/* * 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/). */ (globalThis["webpackChunkExcalidrawLib"] = globalThis["webpackChunkExcalidrawLib"] || []).push([["vendor"],{ /***/ "../../../node_modules/@excalidraw/markdown-to-text/dist/index.js": /*!************************************************************************!*\ !*** ../../../node_modules/@excalidraw/markdown-to-text/dist/index.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.removeMarkdown = void 0;\n/**\n * @function removeMarkdown\n *\n * @description\n * Parse the markdown and returns a string\n *\n * @param markdown - The markdown string to parse\n * @param options - The options for the function\n *\n * @returns The parsed plain text\n */\nvar removeMarkdown = function (markdown, options) {\n if (options === void 0) { options = {\n listUnicodeChar: \"\",\n }; }\n options = options || {};\n options.listUnicodeChar = options.hasOwnProperty(\"listUnicodeChar\")\n ? options.listUnicodeChar\n : false;\n options.stripListLeaders = options.hasOwnProperty(\"stripListLeaders\")\n ? options.stripListLeaders\n : true;\n options.gfm = options.hasOwnProperty(\"gfm\") ? options.gfm : true;\n options.useImgAltText = options.hasOwnProperty(\"useImgAltText\")\n ? options.useImgAltText\n : true;\n options.preserveLinks = options.hasOwnProperty(\"preserveLinks\")\n ? options.preserveLinks\n : false;\n var output = markdown || \"\";\n // Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)\n output = output.replace(/^(-\\s*?|\\*\\s*?|_\\s*?){3,}\\s*$/gm, \"\");\n try {\n if (options.stripListLeaders) {\n if (options.listUnicodeChar)\n output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, options.listUnicodeChar + \" $1\");\n else\n output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, \"$1\");\n }\n if (options.gfm) {\n output = output\n // Header\n .replace(/\\n={2,}/g, \"\\n\")\n // Fenced codeblocks\n .replace(/~{3}.*\\n/g, \"\")\n // Strikethrough\n .replace(/~~/g, \"\")\n // Fenced codeblocks\n .replace(/`{3}.*\\n/g, \"\");\n }\n if (options.preserveLinks) {\n // Remove inline links while preserving the links\n output = output.replace(/\\[(.*?)\\][\\[\\(](.*?)[\\]\\)]/g, \"$1 ($2)\");\n }\n output = output\n // Remove HTML tags\n .replace(/<[^>]*>/g, \"\")\n // Remove setext-style headers\n .replace(/^[=\\-]{2,}\\s*$/g, \"\")\n // Remove footnotes?\n .replace(/\\[\\^.+?\\](\\: .*?$)?/g, \"\")\n .replace(/\\s{0,2}\\[.*?\\]: .*?$/g, \"\")\n // Remove images\n .replace(/\\!\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, options.useImgAltText ? \"$1\" : \"\")\n // Remove inline links\n .replace(/\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, \"$1\")\n // Remove blockquotes\n .replace(/^\\s{0,3}>\\s?/g, \"\")\n .replace(/(^|\\n)\\s{0,3}>\\s?/g, \"\\n\\n\")\n // Remove reference-style links?\n .replace(/^\\s{1,2}\\[(.*?)\\]: (\\S+)( \".*?\")?\\s*$/g, \"\")\n // Remove atx-style headers\n .replace(/^(\\n)?\\s{0,}#{1,6}\\s+| {0,}(\\n)?\\s{0,}#{0,} {0,}(\\n)?\\s{0,}$/gm, \"$1$2$3\")\n // Remove emphasis (repeat the line to remove double emphasis)\n .replace(/([\\*_]{1,3})(\\S.*?\\S{0,1})\\1/g, \"$2\")\n .replace(/([\\*_]{1,3})(\\S.*?\\S{0,1})\\1/g, \"$2\")\n // Remove code blocks\n .replace(/(`{3,})(.*?)\\1/gm, \"$2\")\n // Remove inline code\n .replace(/`(.+?)`/g, \"$1\")\n // Replace two or more newlines with exactly two? Not entirely sure this belongs here...\n .replace(/\\n{2,}/g, \"\\n\\n\");\n }\n catch (e) {\n console.error(e);\n return markdown;\n }\n return output;\n};\nexports.removeMarkdown = removeMarkdown;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21hcmtkb3duLXRvLXRleHQvZGlzdC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxHQUFHO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEdBQUc7QUFDakM7QUFDQSw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsR0FBRztBQUNoQztBQUNBO0FBQ0EseUJBQXlCLElBQUk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixJQUFJO0FBQzlCLCtCQUErQixJQUFJO0FBQ25DO0FBQ0EsMEJBQTBCLElBQUk7QUFDOUI7QUFDQSwrQkFBK0IsR0FBRyxFQUFFLElBQUksTUFBTSxHQUFHLFFBQVEsR0FBRyxFQUFFLEtBQUssR0FBRyxRQUFRLEdBQUc7QUFDakY7QUFDQSw2QkFBNkIsSUFBSSxVQUFVLElBQUk7QUFDL0MsNkJBQTZCLElBQUksVUFBVSxJQUFJO0FBQy9DO0FBQ0EseUJBQXlCLEdBQUc7QUFDNUI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLEdBQUc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21hcmtkb3duLXRvLXRleHQvZGlzdC9pbmRleC5qcz9jMDcyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZW1vdmVNYXJrZG93biA9IHZvaWQgMDtcbi8qKlxuICogQGZ1bmN0aW9uIHJlbW92ZU1hcmtkb3duXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQYXJzZSB0aGUgbWFya2Rvd24gYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gbWFya2Rvd24gLSBUaGUgbWFya2Rvd24gc3RyaW5nIHRvIHBhcnNlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHBsYWluIHRleHRcbiAqL1xudmFyIHJlbW92ZU1hcmtkb3duID0gZnVuY3Rpb24gKG1hcmtkb3duLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge1xuICAgICAgICBsaXN0VW5pY29kZUNoYXI6IFwiXCIsXG4gICAgfTsgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMubGlzdFVuaWNvZGVDaGFyID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImxpc3RVbmljb2RlQ2hhclwiKVxuICAgICAgICA/IG9wdGlvbnMubGlzdFVuaWNvZGVDaGFyXG4gICAgICAgIDogZmFsc2U7XG4gICAgb3B0aW9ucy5zdHJpcExpc3RMZWFkZXJzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcInN0cmlwTGlzdExlYWRlcnNcIilcbiAgICAgICAgPyBvcHRpb25zLnN0cmlwTGlzdExlYWRlcnNcbiAgICAgICAgOiB0cnVlO1xuICAgIG9wdGlvbnMuZ2ZtID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImdmbVwiKSA/IG9wdGlvbnMuZ2ZtIDogdHJ1ZTtcbiAgICBvcHRpb25zLnVzZUltZ0FsdFRleHQgPSBvcHRpb25zLmhhc093blByb3BlcnR5KFwidXNlSW1nQWx0VGV4dFwiKVxuICAgICAgICA/IG9wdGlvbnMudXNlSW1nQWx0VGV4dFxuICAgICAgICA6IHRydWU7XG4gICAgb3B0aW9ucy5wcmVzZXJ2ZUxpbmtzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcInByZXNlcnZlTGlua3NcIilcbiAgICAgICAgPyBvcHRpb25zLnByZXNlcnZlTGlua3NcbiAgICAgICAgOiBmYWxzZTtcbiAgICB2YXIgb3V0cHV0ID0gbWFya2Rvd24gfHwgXCJcIjtcbiAgICAvLyBSZW1vdmUgaG9yaXpvbnRhbCBydWxlcyAoc3RyaXBMaXN0SGVhZGVycyBjb25mbGljdCB3aXRoIHRoaXMgcnVsZSwgd2hpY2ggaXMgd2h5IGl0IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSB0b3ApXG4gICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL14oLVxccyo/fFxcKlxccyo/fF9cXHMqPyl7Myx9XFxzKiQvZ20sIFwiXCIpO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0cmlwTGlzdExlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpc3RVbmljb2RlQ2hhcilcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXihbXFxzXFx0XSopKFtcXCpcXC1cXCtdfFxcZCtcXC4pXFxzKy9nbSwgb3B0aW9ucy5saXN0VW5pY29kZUNoYXIgKyBcIiAkMVwiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXihbXFxzXFx0XSopKFtcXCpcXC1cXCtdfFxcZCtcXC4pXFxzKy9nbSwgXCIkMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5nZm0pIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dFxuICAgICAgICAgICAgICAgIC8vIEhlYWRlclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG49ezIsfS9nLCBcIlxcblwiKVxuICAgICAgICAgICAgICAgIC8vIEZlbmNlZCBjb2RlYmxvY2tzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL357M30uKlxcbi9nLCBcIlwiKVxuICAgICAgICAgICAgICAgIC8vIFN0cmlrZXRocm91Z2hcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvfn4vZywgXCJcIilcbiAgICAgICAgICAgICAgICAvLyBGZW5jZWQgY29kZWJsb2Nrc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9gezN9LipcXG4vZywgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVMaW5rcykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGlubGluZSBsaW5rcyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBsaW5rc1xuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL1xcWyguKj8pXFxdW1xcW1xcKF0oLio/KVtcXF1cXCldL2csIFwiJDEgKCQyKVwiKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSBvdXRwdXRcbiAgICAgICAgICAgIC8vIFJlbW92ZSBIVE1MIHRhZ3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC88W14+XSo+L2csIFwiXCIpXG4gICAgICAgICAgICAvLyBSZW1vdmUgc2V0ZXh0LXN0eWxlIGhlYWRlcnNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eWz1cXC1dezIsfVxccyokL2csIFwiXCIpXG4gICAgICAgICAgICAvLyBSZW1vdmUgZm9vdG5vdGVzP1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcW1xcXi4rP1xcXShcXDogLio/JCk/L2csIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzezAsMn1cXFsuKj9cXF06IC4qPyQvZywgXCJcIilcbiAgICAgICAgICAgIC8vIFJlbW92ZSBpbWFnZXNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXCFcXFsoLio/KVxcXVtcXFtcXChdLio/W1xcXVxcKV0vZywgb3B0aW9ucy51c2VJbWdBbHRUZXh0ID8gXCIkMVwiIDogXCJcIilcbiAgICAgICAgICAgIC8vIFJlbW92ZSBpbmxpbmUgbGlua3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFsoLio/KVxcXVtcXFtcXChdLio/W1xcXVxcKV0vZywgXCIkMVwiKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGJsb2NrcXVvdGVzXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc3swLDN9Plxccz8vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXnxcXG4pXFxzezAsM30+XFxzPy9nLCBcIlxcblxcblwiKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHJlZmVyZW5jZS1zdHlsZSBsaW5rcz9cbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzezEsMn1cXFsoLio/KVxcXTogKFxcUyspKCBcIi4qP1wiKT9cXHMqJC9nLCBcIlwiKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGF0eC1zdHlsZSBoZWFkZXJzXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXG4pP1xcc3swLH0jezEsNn1cXHMrfCB7MCx9KFxcbik/XFxzezAsfSN7MCx9IHswLH0oXFxuKT9cXHN7MCx9JC9nbSwgXCIkMSQyJDNcIilcbiAgICAgICAgICAgIC8vIFJlbW92ZSBlbXBoYXNpcyAocmVwZWF0IHRoZSBsaW5lIHRvIHJlbW92ZSBkb3VibGUgZW1waGFzaXMpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFtcXCpfXXsxLDN9KShcXFMuKj9cXFN7MCwxfSlcXDEvZywgXCIkMlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhbXFwqX117MSwzfSkoXFxTLio/XFxTezAsMX0pXFwxL2csIFwiJDJcIilcbiAgICAgICAgICAgIC8vIFJlbW92ZSBjb2RlIGJsb2Nrc1xuICAgICAgICAgICAgLnJlcGxhY2UoLyhgezMsfSkoLio/KVxcMS9nbSwgXCIkMlwiKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGlubGluZSBjb2RlXG4gICAgICAgICAgICAucmVwbGFjZSgvYCguKz8pYC9nLCBcIiQxXCIpXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHR3byBvciBtb3JlIG5ld2xpbmVzIHdpdGggZXhhY3RseSB0d28/IE5vdCBlbnRpcmVseSBzdXJlIHRoaXMgYmVsb25ncyBoZXJlLi4uXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxuezIsfS9nLCBcIlxcblxcblwiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgcmV0dXJuIG1hcmtkb3duO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufTtcbmV4cG9ydHMucmVtb3ZlTWFya2Rvd24gPSByZW1vdmVNYXJrZG93bjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/markdown-to-text/dist/index.js\n"); /***/ }), /***/ "../../../node_modules/cose-base/cose-base.js": /*!****************************************************!*\ !*** ../../../node_modules/cose-base/cose-base.js ***! \****************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(/*! layout-base */ \"../../../node_modules/layout-base/layout-base.js\"));\n\telse {}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_643__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_643__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_643__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__nested_webpack_require_643__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_643__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_643__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_643__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_643__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_643__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __nested_webpack_require_3185__) {\n\n\"use strict\";\n\n\nvar FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __nested_webpack_require_4002__) {\n\n\"use strict\";\n\n\nvar FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __nested_webpack_require_4409__) {\n\n\"use strict\";\n\n\nvar LGraph = __nested_webpack_require_4409__(0).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __nested_webpack_require_4790__) {\n\n\"use strict\";\n\n\nvar LGraphManager = __nested_webpack_require_4790__(0).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __nested_webpack_require_5205__) {\n\n\"use strict\";\n\n\nvar FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode;\nvar IMath = __nested_webpack_require_5205__(0).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // a simple node, just move it\n if (this.child == null) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // an empty compound node, again just move it\n else if (this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // non-empty compound node, propogate movement to children as well\n else {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.moveBy(dX, dY);\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __nested_webpack_require_8085__) {\n\n\"use strict\";\n\n\nvar FDLayout = __nested_webpack_require_8085__(0).FDLayout;\nvar CoSEGraphManager = __nested_webpack_require_8085__(4);\nvar CoSEGraph = __nested_webpack_require_8085__(3);\nvar CoSENode = __nested_webpack_require_8085__(5);\nvar CoSEEdge = __nested_webpack_require_8085__(2);\nvar CoSEConstants = __nested_webpack_require_8085__(1);\nvar FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants;\nvar LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants;\nvar Point = __nested_webpack_require_8085__(0).Point;\nvar PointD = __nested_webpack_require_8085__(0).PointD;\nvar Layout = __nested_webpack_require_8085__(0).Layout;\nvar Integer = __nested_webpack_require_8085__(0).Integer;\nvar IGeometry = __nested_webpack_require_8085__(0).IGeometry;\nvar LGraph = __nested_webpack_require_8085__(0).LGraph;\nvar Transform = __nested_webpack_require_8085__(0).Transform;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;\n this.coolingAdjuster = 1;\n }\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n this.initSpringEmbedder();\n this.runSpringEmbedder();\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) {\n x += compoundHorizontalMargin;\n y += compoundVerticalMargin;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding\n };\n\n // Sort the nodes in ascending order of their areas\n nodes.sort(function (n1, n2) {\n if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;\n if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;\n return 0;\n });\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __nested_webpack_require_45620__) {\n\n\"use strict\";\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __nested_webpack_require_45620__(0);\ncoseBase.CoSEConstants = __nested_webpack_require_45620__(1);\ncoseBase.CoSEEdge = __nested_webpack_require_45620__(2);\ncoseBase.CoSEGraph = __nested_webpack_require_45620__(3);\ncoseBase.CoSEGraphManager = __nested_webpack_require_45620__(4);\ncoseBase.CoSELayout = __nested_webpack_require_45620__(6);\ncoseBase.CoSENode = __nested_webpack_require_45620__(5);\n\nmodule.exports = coseBase;\n\n/***/ })\n/******/ ]);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nvc2UtYmFzZS9jb3NlLWJhc2UuanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLElBQXlEO0FBQzdELDJCQUEyQixtQkFBTyxDQUFDLHFFQUFhO0FBQ2hELE1BQU0sRUFLMkM7QUFDakQsQ0FBQztBQUNELHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4QkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsOEJBQW1CO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQix1QkFBdUI7QUFDcEQ7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxvQ0FBb0MsNEJBQTRCO0FBQ2hFLDBDQUEwQztBQUMxQyxXQUFXLDhCQUFtQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CLGtDQUFrQztBQUMvRDtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBLGlDQUFpQywrQkFBbUI7O0FBRXBEOzs7QUFHQSx3QkFBd0IsK0JBQW1COztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7O0FBRXJEOztBQUVBLE9B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QSxrQkFBa0IsMkJBQTJCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxpQ0FBaUMsZ0NBQW1COztBQUVwRDs7O0FBR0E7O0FBRUEsc0JBQXNCLGdDQUFtQjtBQUN6Qyx5QkFBeUIsZ0NBQW1CO0FBQzVDLG9CQUFvQixnQ0FBbUI7QUFDdkMscUJBQXFCLGdDQUFtQjtBQUN4Qyw0QkFBNEIsZ0NBQW1CO0FBQy9DLHNCQUFzQixnQ0FBbUI7QUFDekMsb0JBQW9CLGdDQUFtQjs7QUFFdkM7O0FBRUEsT0FBTztBQUNQO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29zZS1iYXNlL2Nvc2UtYmFzZS5qcz9jZGU5Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImxheW91dC1iYXNlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImxheW91dC1iYXNlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNvc2VCYXNlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibGF5b3V0LWJhc2VcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImNvc2VCYXNlXCJdID0gZmFjdG9yeShyb290W1wibGF5b3V0QmFzZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDcpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dENvbnN0YW50cztcblxuZnVuY3Rpb24gQ29TRUNvbnN0YW50cygpIHt9XG5cbi8vQ29TRUNvbnN0YW50cyBpbmhlcml0cyBzdGF0aWMgcHJvcHMgaW4gRkRMYXlvdXRDb25zdGFudHNcbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXRDb25zdGFudHMpIHtcbiAgQ29TRUNvbnN0YW50c1twcm9wXSA9IEZETGF5b3V0Q29uc3RhbnRzW3Byb3BdO1xufVxuXG5Db1NFQ29uc3RhbnRzLkRFRkFVTFRfVVNFX01VTFRJX0xFVkVMX1NDQUxJTkcgPSBmYWxzZTtcbkNvU0VDb25zdGFudHMuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG5Db1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04gPSA2MDtcbkNvU0VDb25zdGFudHMuVElMRSA9IHRydWU7XG5Db1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMID0gMTA7XG5Db1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX0hPUklaT05UQUwgPSAxMDtcbkNvU0VDb25zdGFudHMuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwgPSBmYWxzZTsgLy8gbWFrZSB0aGlzIHRydWUgd2hlbiBjb3NlIGlzIHVzZWQgaW5jcmVtZW50YWxseSBhcyBhIHBhcnQgb2Ygb3RoZXIgbm9uLWluY3JlbWVudGFsIGxheW91dFxuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VDb25zdGFudHM7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgRkRMYXlvdXRFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dEVkZ2U7XG5cbmZ1bmN0aW9uIENvU0VFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBGRExheW91dEVkZ2UuY2FsbCh0aGlzLCBzb3VyY2UsIHRhcmdldCwgdkVkZ2UpO1xufVxuXG5Db1NFRWRnZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEZETGF5b3V0RWRnZS5wcm90b3R5cGUpO1xuZm9yICh2YXIgcHJvcCBpbiBGRExheW91dEVkZ2UpIHtcbiAgQ29TRUVkZ2VbcHJvcF0gPSBGRExheW91dEVkZ2VbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5MR3JhcGg7XG5cbmZ1bmN0aW9uIENvU0VHcmFwaChwYXJlbnQsIGdyYXBoTWdyLCB2R3JhcGgpIHtcbiAgTEdyYXBoLmNhbGwodGhpcywgcGFyZW50LCBncmFwaE1nciwgdkdyYXBoKTtcbn1cblxuQ29TRUdyYXBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaCkge1xuICBDb1NFR3JhcGhbcHJvcF0gPSBMR3JhcGhbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxHcmFwaE1hbmFnZXI7XG5cbmZ1bmN0aW9uIENvU0VHcmFwaE1hbmFnZXIobGF5b3V0KSB7XG4gIExHcmFwaE1hbmFnZXIuY2FsbCh0aGlzLCBsYXlvdXQpO1xufVxuXG5Db1NFR3JhcGhNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoTWFuYWdlci5wcm90b3R5cGUpO1xuZm9yICh2YXIgcHJvcCBpbiBMR3JhcGhNYW5hZ2VyKSB7XG4gIENvU0VHcmFwaE1hbmFnZXJbcHJvcF0gPSBMR3JhcGhNYW5hZ2VyW3Byb3BdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VHcmFwaE1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgRkRMYXlvdXROb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dE5vZGU7XG52YXIgSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLklNYXRoO1xuXG5mdW5jdGlvbiBDb1NFTm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICBGRExheW91dE5vZGUuY2FsbCh0aGlzLCBnbSwgbG9jLCBzaXplLCB2Tm9kZSk7XG59XG5cbkNvU0VOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXROb2RlLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0Tm9kZSkge1xuICBDb1NFTm9kZVtwcm9wXSA9IEZETGF5b3V0Tm9kZVtwcm9wXTtcbn1cblxuQ29TRU5vZGUucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsYXlvdXQgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTtcbiAgdGhpcy5kaXNwbGFjZW1lbnRYID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiAodGhpcy5zcHJpbmdGb3JjZVggKyB0aGlzLnJlcHVsc2lvbkZvcmNlWCArIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpIC8gdGhpcy5ub09mQ2hpbGRyZW47XG4gIHRoaXMuZGlzcGxhY2VtZW50WSA9IGxheW91dC5jb29saW5nRmFjdG9yICogKHRoaXMuc3ByaW5nRm9yY2VZICsgdGhpcy5yZXB1bHNpb25Gb3JjZVkgKyB0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKSAvIHRoaXMubm9PZkNoaWxkcmVuO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpID4gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCkge1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WCA9IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQgKiBJTWF0aC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCk7XG4gIH1cblxuICBpZiAoTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSA+IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQpIHtcbiAgICB0aGlzLmRpc3BsYWNlbWVudFkgPSBsYXlvdXQuY29vbGluZ0ZhY3RvciAqIGxheW91dC5tYXhOb2RlRGlzcGxhY2VtZW50ICogSU1hdGguc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpO1xuICB9XG5cbiAgLy8gYSBzaW1wbGUgbm9kZSwganVzdCBtb3ZlIGl0XG4gIGlmICh0aGlzLmNoaWxkID09IG51bGwpIHtcbiAgICB0aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsIHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gIH1cbiAgLy8gYW4gZW1wdHkgY29tcG91bmQgbm9kZSwgYWdhaW4ganVzdCBtb3ZlIGl0XG4gIGVsc2UgaWYgKHRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuICAgIH1cbiAgICAvLyBub24tZW1wdHkgY29tcG91bmQgbm9kZSwgcHJvcG9nYXRlIG1vdmVtZW50IHRvIGNoaWxkcmVuIGFzIHdlbGxcbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCwgdGhpcy5kaXNwbGFjZW1lbnRZKTtcbiAgICAgIH1cblxuICBsYXlvdXQudG90YWxEaXNwbGFjZW1lbnQgKz0gTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKSArIE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk7XG5cbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WCA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WSA9IDA7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbiA9IGZ1bmN0aW9uIChkWCwgZFkpIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gIHZhciBub2RlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgIGlmIChub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgbm9kZS5tb3ZlQnkoZFgsIGRZKTtcbiAgICAgIG5vZGUuZGlzcGxhY2VtZW50WCArPSBkWDtcbiAgICAgIG5vZGUuZGlzcGxhY2VtZW50WSArPSBkWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKGRYLCBkWSk7XG4gICAgfVxuICB9XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuc2V0UHJlZDEgPSBmdW5jdGlvbiAocHJlZDEpIHtcbiAgdGhpcy5wcmVkMSA9IHByZWQxO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmdldFByZWQxID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJlZDE7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuZ2V0UHJlZDIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcmVkMjtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXROZXh0ID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgdGhpcy5uZXh0ID0gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5nZXROZXh0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQgPSBmdW5jdGlvbiAocHJvY2Vzc2VkKSB7XG4gIHRoaXMucHJvY2Vzc2VkID0gcHJvY2Vzc2VkO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmlzUHJvY2Vzc2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJvY2Vzc2VkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFTm9kZTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBGRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuRkRMYXlvdXQ7XG52YXIgQ29TRUdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgQ29TRUdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBDb1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgQ29TRUVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIENvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dENvbnN0YW50cztcbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxheW91dENvbnN0YW50cztcbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuUG9pbnQ7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Qb2ludEQ7XG52YXIgTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5MYXlvdXQ7XG52YXIgSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuSW50ZWdlcjtcbnZhciBJR2VvbWV0cnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLklHZW9tZXRyeTtcbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxHcmFwaDtcbnZhciBUcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLlRyYW5zZm9ybTtcblxuZnVuY3Rpb24gQ29TRUxheW91dCgpIHtcbiAgRkRMYXlvdXQuY2FsbCh0aGlzKTtcblxuICB0aGlzLnRvQmVUaWxlZCA9IHt9OyAvLyBNZW1vcml6ZSBpZiBhIG5vZGUgaXMgdG8gYmUgdGlsZWQgb3IgaXMgdGlsZWRcbn1cblxuQ29TRUxheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEZETGF5b3V0LnByb3RvdHlwZSk7XG5cbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXQpIHtcbiAgQ29TRUxheW91dFtwcm9wXSA9IEZETGF5b3V0W3Byb3BdO1xufVxuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBnbSA9IG5ldyBDb1NFR3JhcGhNYW5hZ2VyKHRoaXMpO1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xuICByZXR1cm4gZ207XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5uZXdHcmFwaCA9IGZ1bmN0aW9uICh2R3JhcGgpIHtcbiAgcmV0dXJuIG5ldyBDb1NFR3JhcGgobnVsbCwgdGhpcy5ncmFwaE1hbmFnZXIsIHZHcmFwaCk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5uZXdOb2RlID0gZnVuY3Rpb24gKHZOb2RlKSB7XG4gIHJldHVybiBuZXcgQ29TRU5vZGUodGhpcy5ncmFwaE1hbmFnZXIsIHZOb2RlKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld0VkZ2UgPSBmdW5jdGlvbiAodkVkZ2UpIHtcbiAgcmV0dXJuIG5ldyBDb1NFRWRnZShudWxsLCBudWxsLCB2RWRnZSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgRkRMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKCF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgaWYgKENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA8IDEwKSB7XG4gICAgICB0aGlzLmlkZWFsRWRnZUxlbmd0aCA9IDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlkZWFsRWRnZUxlbmd0aCA9IENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24gPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OO1xuICAgIHRoaXMuc3ByaW5nQ29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSDtcbiAgICB0aGlzLnJlcHVsc2lvbkNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg7XG4gICAgdGhpcy5ncmF2aXR5Q29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg7XG4gICAgdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSDtcbiAgICB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I7XG4gICAgdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I7XG5cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRyZWUgcmVkdWN0aW9uIHN1cHBvcnRcbiAgICB0aGlzLnBydW5lZE5vZGVzQWxsID0gW107XG4gICAgdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgPSAwO1xuICAgIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLmlzVHJlZUdyb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzR3Jvd3RoRmluaXNoZWQgPSBmYWxzZTtcblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgY29vbGluZ1xuICAgIHRoaXMuY29vbGluZ0N5Y2xlID0gMDtcbiAgICB0aGlzLm1heENvb2xpbmdDeWNsZSA9IHRoaXMubWF4SXRlcmF0aW9ucyAvIEZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRDtcbiAgICB0aGlzLmZpbmFsVGVtcGVyYXR1cmUgPSBGRExheW91dENvbnN0YW50cy5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QgLyB0aGlzLm1heEl0ZXJhdGlvbnM7XG4gICAgdGhpcy5jb29saW5nQWRqdXN0ZXIgPSAxO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgaWYgKGNyZWF0ZUJlbmRzQXNOZWVkZWQpIHtcbiAgICB0aGlzLmNyZWF0ZUJlbmRwb2ludHMoKTtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gIH1cblxuICB0aGlzLmxldmVsID0gMDtcbiAgcmV0dXJuIHRoaXMuY2xhc3NpY0xheW91dCgpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xhc3NpY0xheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5ub2Rlc1dpdGhHcmF2aXR5ID0gdGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSk7XG4gIHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCk7XG4gIHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKTtcblxuICBpZiAoIXRoaXMuaW5jcmVtZW50YWwpIHtcbiAgICB2YXIgZm9yZXN0ID0gdGhpcy5nZXRGbGF0Rm9yZXN0KCk7XG5cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIGZsYXQgYW5kIGEgZm9yZXN0XG4gICAgaWYgKGZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShmb3Jlc3QpO1xuICAgIH1cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIG5vdCBmbGF0IG9yIGEgZm9yZXN0XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFJlZHVjZSB0aGUgdHJlZXMgd2hlbiBpbmNyZW1lbnRhbCBtb2RlIGlzIG5vdCBlbmFibGVkIGFuZCBncmFwaCBpcyBub3QgYSBmb3Jlc3QgXG4gICAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmhhcyh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKTtcbiAgICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCkge1xuICAgICAgLy8gUmVkdWNlIHRoZSB0cmVlcyBpbiBpbmNyZW1lbnRhbCBtb2RlIGlmIG9ubHkgdGhpcyBjb25zdGFudCBpcyBzZXQgdG8gdHJ1ZSBcbiAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgIC8vIFVwZGF0ZSBub2RlcyB0aGF0IGdyYXZpdHkgd2lsbCBiZSBhcHBsaWVkXG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gdGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihpbnRlcnNlY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCk7XG4gIHRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnRpY2sgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMudG90YWxJdGVyYXRpb25zKys7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zID09PSB0aGlzLm1heEl0ZXJhdGlvbnMgJiYgIXRoaXMuaXNUcmVlR3Jvd2luZyAmJiAhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKSB7XG4gICAgaWYgKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc1RyZWVHcm93aW5nID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EID09IDAgJiYgIXRoaXMuaXNUcmVlR3Jvd2luZyAmJiAhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKSB7XG4gICAgaWYgKHRoaXMuaXNDb252ZXJnZWQoKSkge1xuICAgICAgaWYgKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzVHJlZUdyb3dpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb29saW5nQ3ljbGUrKztcblxuICAgIGlmICh0aGlzLmxheW91dFF1YWxpdHkgPT0gMCkge1xuICAgICAgLy8gcXVhbGl0eSAtIFwiZHJhZnRcIlxuICAgICAgdGhpcy5jb29saW5nQWRqdXN0ZXIgPSB0aGlzLmNvb2xpbmdDeWNsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGF5b3V0UXVhbGl0eSA9PSAxKSB7XG4gICAgICAvLyBxdWFsaXR5IC0gXCJkZWZhdWx0XCJcbiAgICAgIHRoaXMuY29vbGluZ0FkanVzdGVyID0gdGhpcy5jb29saW5nQ3ljbGUgLyAzO1xuICAgIH1cblxuICAgIC8vIGNvb2xpbmcgc2NoZWR1bGUgaXMgYmFzZWQgb24gaHR0cDovL3d3dy5idGx1a2UuY29tL3NpbWFuZjEuaHRtbCAtPiBjb29saW5nIHNjaGVkdWxlIDNcbiAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBNYXRoLm1heCh0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yIC0gTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsIE1hdGgubG9nKDEwMCAqICh0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yIC0gdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkgLyBNYXRoLmxvZyh0aGlzLm1heENvb2xpbmdDeWNsZSkpIC8gMTAwICogdGhpcy5jb29saW5nQWRqdXN0ZXIsIHRoaXMuZmluYWxUZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSBNYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kICogTWF0aC5zcXJ0KHRoaXMuY29vbGluZ0ZhY3RvcikpO1xuICB9XG4gIC8vIE9wZXJhdGlvbnMgd2hpbGUgdHJlZSBpcyBncm93aW5nIGFnYWluIFxuICBpZiAodGhpcy5pc1RyZWVHcm93aW5nKSB7XG4gICAgaWYgKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zICUgMTAgPT0gMCkge1xuICAgICAgaWYgKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgICAgIHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCk7XG4gICAgICAgIC8vIFVwZGF0ZSBub2RlcyB0aGF0IGdyYXZpdHkgd2lsbCBiZSBhcHBsaWVkXG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcbiAgICAgICAgdmFyIGFsbE5vZGVzID0gbmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gdGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiBhbGxOb2Rlcy5oYXMoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihpbnRlcnNlY3Rpb24pO1xuXG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR3Jvd3RoRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrO1xuICB9XG4gIC8vIE9wZXJhdGlvbnMgYWZ0ZXIgZ3Jvd3RoIGlzIGZpbmlzaGVkXG4gIGlmICh0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbnZlcmdlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zICUgMTAgPT0gMCkge1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCAqICgoMTAwIC0gdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpIC8gMTAwKTtcbiAgICB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrO1xuICB9XG5cbiAgdmFyIGdyaWRVcGRhdGVBbGxvd2VkID0gIXRoaXMuaXNUcmVlR3Jvd2luZyAmJiAhdGhpcy5pc0dyb3d0aEZpbmlzaGVkO1xuICB2YXIgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSA9IHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zICUgMTAgPT0gMSAmJiB0aGlzLmlzVHJlZUdyb3dpbmcgfHwgdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgJSAxMCA9PSAxICYmIHRoaXMuaXNHcm93dGhGaW5pc2hlZDtcblxuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50ID0gMDtcbiAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gIHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpO1xuICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoZ3JpZFVwZGF0ZUFsbG93ZWQsIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUpO1xuICB0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCk7XG4gIHRoaXMubW92ZU5vZGVzKCk7XG4gIHRoaXMuYW5pbWF0ZSgpO1xuXG4gIHJldHVybiBmYWxzZTsgLy8gTGF5b3V0IGlzIG5vdCBlbmRlZCB5ZXQgcmV0dXJuIGZhbHNlXG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWxsTm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpO1xuICB2YXIgcERhdGEgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByZWN0ID0gYWxsTm9kZXNbaV0ucmVjdDtcbiAgICB2YXIgaWQgPSBhbGxOb2Rlc1tpXS5pZDtcbiAgICBwRGF0YVtpZF0gPSB7XG4gICAgICBpZDogaWQsXG4gICAgICB4OiByZWN0LmdldENlbnRlclgoKSxcbiAgICAgIHk6IHJlY3QuZ2V0Q2VudGVyWSgpLFxuICAgICAgdzogcmVjdC53aWR0aCxcbiAgICAgIGg6IHJlY3QuaGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBwRGF0YTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QgPSAyNTtcbiAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSB0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7XG4gIHZhciBsYXlvdXRFbmRlZCA9IGZhbHNlO1xuXG4gIC8vIElmIGFtaW5hdGUgb3B0aW9uIGlzICdkdXJpbmcnIHNpZ25hbCB0aGF0IGxheW91dCBpcyBzdXBwb3NlZCB0byBzdGFydCBpdGVyYXRpbmdcbiAgaWYgKEZETGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPT09ICdkdXJpbmcnKSB7XG4gICAgdGhpcy5lbWl0KCdsYXlvdXRzdGFydGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW1pbmF0ZSBvcHRpb24gaXMgJ2R1cmluZycgdGljaygpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIGluZGV4LmpzXG4gICAgd2hpbGUgKCFsYXlvdXRFbmRlZCkge1xuICAgICAgbGF5b3V0RW5kZWQgPSB0aGlzLnRpY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGVMaXN0ID0gW107XG4gIHZhciBncmFwaDtcblxuICB2YXIgZ3JhcGhzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCk7XG4gIHZhciBzaXplID0gZ3JhcGhzLmxlbmd0aDtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBncmFwaCA9IGdyYXBoc1tpXTtcblxuICAgIGdyYXBoLnVwZGF0ZUNvbm5lY3RlZCgpO1xuXG4gICAgaWYgKCFncmFwaC5pc0Nvbm5lY3RlZCkge1xuICAgICAgbm9kZUxpc3QgPSBub2RlTGlzdC5jb25jYXQoZ3JhcGguZ2V0Tm9kZXMoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVMaXN0O1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2VzID0gW107XG4gIGVkZ2VzID0gZWRnZXMuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG5cbiAgICBpZiAoIXZpc2l0ZWQuaGFzKGVkZ2UpKSB7XG4gICAgICB2YXIgc291cmNlID0gZWRnZS5nZXRTb3VyY2UoKTtcbiAgICAgIHZhciB0YXJnZXQgPSBlZGdlLmdldFRhcmdldCgpO1xuXG4gICAgICBpZiAoc291cmNlID09IHRhcmdldCkge1xuICAgICAgICBlZGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBQb2ludEQoKSk7XG4gICAgICAgIGVkZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFBvaW50RCgpKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhlZGdlKTtcbiAgICAgICAgdmlzaXRlZC5hZGQoZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZWRnZUxpc3QgPSBbXTtcblxuICAgICAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdChzb3VyY2UuZ2V0RWRnZUxpc3RUb05vZGUodGFyZ2V0KSk7XG4gICAgICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KHRhcmdldC5nZXRFZGdlTGlzdFRvTm9kZShzb3VyY2UpKTtcblxuICAgICAgICBpZiAoIXZpc2l0ZWQuaGFzKGVkZ2VMaXN0WzBdKSkge1xuICAgICAgICAgIGlmIChlZGdlTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBlZGdlTGlzdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICB2YXIgbXVsdGlFZGdlID0gZWRnZUxpc3Rba107XG4gICAgICAgICAgICAgIG11bHRpRWRnZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgUG9pbnREKCkpO1xuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKG11bHRpRWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkZ2VMaXN0LmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGVkZ2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZpc2l0ZWQuc2l6ZSA9PSBlZGdlcy5sZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhZGlhbGx5ID0gZnVuY3Rpb24gKGZvcmVzdCkge1xuICAvLyBXZSB0aWxlIHRoZSB0cmVlcyB0byBhIGdyaWQgcm93IGJ5IHJvdzsgZmlyc3QgdHJlZSBzdGFydHMgYXQgKDAsMClcbiAgdmFyIGN1cnJlbnRTdGFydGluZ1BvaW50ID0gbmV3IFBvaW50KDAsIDApO1xuICB2YXIgbnVtYmVyT2ZDb2x1bW5zID0gTWF0aC5jZWlsKE1hdGguc3FydChmb3Jlc3QubGVuZ3RoKSk7XG4gIHZhciBoZWlnaHQgPSAwO1xuICB2YXIgY3VycmVudFkgPSAwO1xuICB2YXIgY3VycmVudFggPSAwO1xuICB2YXIgcG9pbnQgPSBuZXcgUG9pbnREKDAsIDApO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgJSBudW1iZXJPZkNvbHVtbnMgPT0gMCkge1xuICAgICAgLy8gU3RhcnQgb2YgYSBuZXcgcm93LCBtYWtlIHRoZSB4IGNvb3JkaW5hdGUgMCwgaW5jcmVtZW50IHRoZVxuICAgICAgLy8geSBjb29yZGluYXRlIHdpdGggdGhlIG1heCBoZWlnaHQgb2YgdGhlIHByZXZpb3VzIHJvd1xuICAgICAgY3VycmVudFggPSAwO1xuICAgICAgY3VycmVudFkgPSBoZWlnaHQ7XG5cbiAgICAgIGlmIChpICE9IDApIHtcbiAgICAgICAgY3VycmVudFkgKz0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OO1xuICAgICAgfVxuXG4gICAgICBoZWlnaHQgPSAwO1xuICAgIH1cblxuICAgIHZhciB0cmVlID0gZm9yZXN0W2ldO1xuXG4gICAgLy8gRmluZCB0aGUgY2VudGVyIG9mIHRoZSB0cmVlXG4gICAgdmFyIGNlbnRlck5vZGUgPSBMYXlvdXQuZmluZENlbnRlck9mVHJlZSh0cmVlKTtcblxuICAgIC8vIFNldCB0aGUgc3RhcmluZyBwb2ludCBvZiB0aGUgbmV4dCB0cmVlXG4gICAgY3VycmVudFN0YXJ0aW5nUG9pbnQueCA9IGN1cnJlbnRYO1xuICAgIGN1cnJlbnRTdGFydGluZ1BvaW50LnkgPSBjdXJyZW50WTtcblxuICAgIC8vIERvIGEgcmFkaWFsIGxheW91dCBzdGFydGluZyB3aXRoIHRoZSBjZW50ZXJcbiAgICBwb2ludCA9IENvU0VMYXlvdXQucmFkaWFsTGF5b3V0KHRyZWUsIGNlbnRlck5vZGUsIGN1cnJlbnRTdGFydGluZ1BvaW50KTtcblxuICAgIGlmIChwb2ludC55ID4gaGVpZ2h0KSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKHBvaW50LnkpO1xuICAgIH1cblxuICAgIGN1cnJlbnRYID0gTWF0aC5mbG9vcihwb2ludC54ICsgQ29TRUNvbnN0YW50cy5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKTtcbiAgfVxuXG4gIHRoaXMudHJhbnNmb3JtKG5ldyBQb2ludEQoTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9YIC0gcG9pbnQueCAvIDIsIExheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWSAtIHBvaW50LnkgLyAyKSk7XG59O1xuXG5Db1NFTGF5b3V0LnJhZGlhbExheW91dCA9IGZ1bmN0aW9uICh0cmVlLCBjZW50ZXJOb2RlLCBzdGFydGluZ1BvaW50KSB7XG4gIHZhciByYWRpYWxTZXAgPSBNYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKHRyZWUpLCBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO1xuICBDb1NFTGF5b3V0LmJyYW5jaFJhZGlhbExheW91dChjZW50ZXJOb2RlLCBudWxsLCAwLCAzNTksIDAsIHJhZGlhbFNlcCk7XG4gIHZhciBib3VuZHMgPSBMR3JhcGguY2FsY3VsYXRlQm91bmRzKHRyZWUpO1xuXG4gIHZhciB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKCk7XG4gIHRyYW5zZm9ybS5zZXREZXZpY2VPcmdYKGJvdW5kcy5nZXRNaW5YKCkpO1xuICB0cmFuc2Zvcm0uc2V0RGV2aWNlT3JnWShib3VuZHMuZ2V0TWluWSgpKTtcbiAgdHJhbnNmb3JtLnNldFdvcmxkT3JnWChzdGFydGluZ1BvaW50LngpO1xuICB0cmFuc2Zvcm0uc2V0V29ybGRPcmdZKHN0YXJ0aW5nUG9pbnQueSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSB0cmVlW2ldO1xuICAgIG5vZGUudHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gIH1cblxuICB2YXIgYm90dG9tUmlnaHQgPSBuZXcgUG9pbnREKGJvdW5kcy5nZXRNYXhYKCksIGJvdW5kcy5nZXRNYXhZKCkpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm0uaW52ZXJzZVRyYW5zZm9ybVBvaW50KGJvdHRvbVJpZ2h0KTtcbn07XG5cbkNvU0VMYXlvdXQuYnJhbmNoUmFkaWFsTGF5b3V0ID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudE9mTm9kZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGRpc3RhbmNlLCByYWRpYWxTZXBhcmF0aW9uKSB7XG4gIC8vIEZpcnN0LCBwb3NpdGlvbiB0aGlzIG5vZGUgYnkgZmluZGluZyBpdHMgYW5nbGUuXG4gIHZhciBoYWxmSW50ZXJ2YWwgPSAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlICsgMSkgLyAyO1xuXG4gIGlmIChoYWxmSW50ZXJ2YWwgPCAwKSB7XG4gICAgaGFsZkludGVydmFsICs9IDE4MDtcbiAgfVxuXG4gIHZhciBub2RlQW5nbGUgPSAoaGFsZkludGVydmFsICsgc3RhcnRBbmdsZSkgJSAzNjA7XG4gIHZhciB0ZXRhID0gbm9kZUFuZ2xlICogSUdlb21ldHJ5LlRXT19QSSAvIDM2MDtcblxuICAvLyBNYWtlIHBvbGFyIHRvIGphdmEgY29yZGluYXRlIGNvbnZlcnNpb24uXG4gIHZhciBjb3NfdGV0YSA9IE1hdGguY29zKHRldGEpO1xuICB2YXIgeF8gPSBkaXN0YW5jZSAqIE1hdGguY29zKHRldGEpO1xuICB2YXIgeV8gPSBkaXN0YW5jZSAqIE1hdGguc2luKHRldGEpO1xuXG4gIG5vZGUuc2V0Q2VudGVyKHhfLCB5Xyk7XG5cbiAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGUgYW5kIHJlY3Vyc2l2ZWx5IGNhbGwgdGhpc1xuICAvLyBmdW5jdGlvbi5cbiAgdmFyIG5laWdoYm9yRWRnZXMgPSBbXTtcbiAgbmVpZ2hib3JFZGdlcyA9IG5laWdoYm9yRWRnZXMuY29uY2F0KG5vZGUuZ2V0RWRnZXMoKSk7XG4gIHZhciBjaGlsZENvdW50ID0gbmVpZ2hib3JFZGdlcy5sZW5ndGg7XG5cbiAgaWYgKHBhcmVudE9mTm9kZSAhPSBudWxsKSB7XG4gICAgY2hpbGRDb3VudC0tO1xuICB9XG5cbiAgdmFyIGJyYW5jaENvdW50ID0gMDtcblxuICB2YXIgaW5jRWRnZXNDb3VudCA9IG5laWdoYm9yRWRnZXMubGVuZ3RoO1xuICB2YXIgc3RhcnRJbmRleDtcblxuICB2YXIgZWRnZXMgPSBub2RlLmdldEVkZ2VzQmV0d2VlbihwYXJlbnRPZk5vZGUpO1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlZGdlcywgcHJ1bmUgdGhlbSB1bnRpbCB0aGVyZSByZW1haW5zIG9ubHkgb25lXG4gIC8vIGVkZ2UuXG4gIHdoaWxlIChlZGdlcy5sZW5ndGggPiAxKSB7XG4gICAgLy9uZWlnaGJvckVkZ2VzLnJlbW92ZShlZGdlcy5yZW1vdmUoMCkpO1xuICAgIHZhciB0ZW1wID0gZWRnZXNbMF07XG4gICAgZWRnZXMuc3BsaWNlKDAsIDEpO1xuICAgIHZhciBpbmRleCA9IG5laWdoYm9yRWRnZXMuaW5kZXhPZih0ZW1wKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgbmVpZ2hib3JFZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpbmNFZGdlc0NvdW50LS07XG4gICAgY2hpbGRDb3VudC0tO1xuICB9XG5cbiAgaWYgKHBhcmVudE9mTm9kZSAhPSBudWxsKSB7XG4gICAgLy9hc3NlcnQgZWRnZXMubGVuZ3RoID09IDE7XG4gICAgc3RhcnRJbmRleCA9IChuZWlnaGJvckVkZ2VzLmluZGV4T2YoZWRnZXNbMF0pICsgMSkgJSBpbmNFZGdlc0NvdW50O1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0SW5kZXggPSAwO1xuICB9XG5cbiAgdmFyIHN0ZXBBbmdsZSA9IE1hdGguYWJzKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkgLyBjaGlsZENvdW50O1xuXG4gIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBicmFuY2hDb3VudCAhPSBjaGlsZENvdW50OyBpID0gKytpICUgaW5jRWRnZXNDb3VudCkge1xuICAgIHZhciBjdXJyZW50TmVpZ2hib3IgPSBuZWlnaGJvckVkZ2VzW2ldLmdldE90aGVyRW5kKG5vZGUpO1xuXG4gICAgLy8gRG9uJ3QgYmFjayB0cmF2ZXJzZSB0byByb290IG5vZGUgaW4gY3VycmVudCB0cmVlLlxuICAgIGlmIChjdXJyZW50TmVpZ2hib3IgPT0gcGFyZW50T2ZOb2RlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRTdGFydEFuZ2xlID0gKHN0YXJ0QW5nbGUgKyBicmFuY2hDb3VudCAqIHN0ZXBBbmdsZSkgJSAzNjA7XG4gICAgdmFyIGNoaWxkRW5kQW5nbGUgPSAoY2hpbGRTdGFydEFuZ2xlICsgc3RlcEFuZ2xlKSAlIDM2MDtcblxuICAgIENvU0VMYXlvdXQuYnJhbmNoUmFkaWFsTGF5b3V0KGN1cnJlbnROZWlnaGJvciwgbm9kZSwgY2hpbGRTdGFydEFuZ2xlLCBjaGlsZEVuZEFuZ2xlLCBkaXN0YW5jZSArIHJhZGlhbFNlcGFyYXRpb24sIHJhZGlhbFNlcGFyYXRpb24pO1xuXG4gICAgYnJhbmNoQ291bnQrKztcbiAgfVxufTtcblxuQ29TRUxheW91dC5tYXhEaWFnb25hbEluVHJlZSA9IGZ1bmN0aW9uICh0cmVlKSB7XG4gIHZhciBtYXhEaWFnb25hbCA9IEludGVnZXIuTUlOX1ZBTFVFO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gdHJlZVtpXTtcbiAgICB2YXIgZGlhZ29uYWwgPSBub2RlLmdldERpYWdvbmFsKCk7XG5cbiAgICBpZiAoZGlhZ29uYWwgPiBtYXhEaWFnb25hbCkge1xuICAgICAgbWF4RGlhZ29uYWwgPSBkaWFnb25hbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF4RGlhZ29uYWw7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGZvcm11bGEgaXMgMiB4IChsZXZlbCArIDEpIHggaWRlYWxFZGdlTGVuZ3RoXG4gIHJldHVybiAyICogKHRoaXMubGV2ZWwgKyAxKSAqIHRoaXMuaWRlYWxFZGdlTGVuZ3RoO1xufTtcblxuLy8gVGlsaW5nIG1ldGhvZHNcblxuLy8gR3JvdXAgemVybyBkZWdyZWUgbWVtYmVycyB3aG9zZSBwYXJlbnRzIGFyZSBub3QgdG8gYmUgdGlsZWQsIGNyZWF0ZSBkdW1teSBwYXJlbnRzIHdoZXJlIG5lZWRlZCBhbmQgZmlsbCBtZW1iZXJHcm91cHMgYnkgdGhlaXIgZHVtbXAgcGFyZW50IGlkJ3NcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgLy8gYXJyYXkgb2YgW3BhcmVudF9pZCB4IG9uZURlZ3JlZU5vZGVfaWRdXG4gIHZhciB0ZW1wTWVtYmVyR3JvdXBzID0ge307IC8vIEEgdGVtcG9yYXJ5IG1hcCBvZiBwYXJlbnQgbm9kZSBhbmQgaXRzIHplcm8gZGVncmVlIG1lbWJlcnNcbiAgdGhpcy5tZW1iZXJHcm91cHMgPSB7fTsgLy8gQSBtYXAgb2YgZHVtbXkgcGFyZW50IG5vZGUgYW5kIGl0cyB6ZXJvIGRlZ3JlZSBtZW1iZXJzIHdob3NlIHBhcmVudHMgYXJlIG5vdCB0byBiZSB0aWxlZFxuICB0aGlzLmlkVG9EdW1teU5vZGUgPSB7fTsgLy8gQSBtYXAgb2YgaWQgdG8gZHVtbXkgbm9kZSBcblxuICB2YXIgemVyb0RlZ3JlZSA9IFtdOyAvLyBMaXN0IG9mIHplcm8gZGVncmVlIG5vZGVzIHdob3NlIHBhcmVudHMgYXJlIG5vdCB0byBiZSB0aWxlZFxuICB2YXIgYWxsTm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpO1xuXG4gIC8vIEZpbGwgemVybyBkZWdyZWUgbGlzdFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICB2YXIgcGFyZW50ID0gbm9kZS5nZXRQYXJlbnQoKTtcbiAgICAvLyBJZiBhIG5vZGUgaGFzIHplcm8gZGVncmVlIGFuZCBpdHMgcGFyZW50IGlzIG5vdCB0byBiZSB0aWxlZCBpZiBleGlzdHMgYWRkIHRoYXQgbm9kZSB0byB6ZXJvRGVncmVzIGxpc3RcbiAgICBpZiAodGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKG5vZGUpID09PSAwICYmIChwYXJlbnQuaWQgPT0gdW5kZWZpbmVkIHx8ICF0aGlzLmdldFRvQmVUaWxlZChwYXJlbnQpKSkge1xuICAgICAgemVyb0RlZ3JlZS5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENyZWF0ZSBhIG1hcCBvZiBwYXJlbnQgbm9kZSBhbmQgaXRzIHplcm8gZGVncmVlIG1lbWJlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB6ZXJvRGVncmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSB6ZXJvRGVncmVlW2ldOyAvLyBaZXJvIGRlZ3JlZSBub2RlIGl0c2VsZlxuICAgIHZhciBwX2lkID0gbm9kZS5nZXRQYXJlbnQoKS5pZDsgLy8gUGFyZW50IGlkXG5cbiAgICBpZiAodHlwZW9mIHRlbXBNZW1iZXJHcm91cHNbcF9pZF0gPT09IFwidW5kZWZpbmVkXCIpIHRlbXBNZW1iZXJHcm91cHNbcF9pZF0gPSBbXTtcblxuICAgIHRlbXBNZW1iZXJHcm91cHNbcF9pZF0gPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdLmNvbmNhdChub2RlKTsgLy8gUHVzaCBub2RlIHRvIHRoZSBsaXN0IGJlbG9uZ3MgdG8gaXRzIHBhcmVudCBpbiB0ZW1wTWVtYmVyR3JvdXBzXG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIG5vZGVzIGF0IGEgbGV2ZWwsIGNyZWF0ZSBhIGR1bW15IGNvbXBvdW5kIGZvciB0aGVtXG4gIE9iamVjdC5rZXlzKHRlbXBNZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24gKHBfaWQpIHtcbiAgICBpZiAodGVtcE1lbWJlckdyb3Vwc1twX2lkXS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZHVtbXlDb21wb3VuZElkID0gXCJEdW1teUNvbXBvdW5kX1wiICsgcF9pZDsgLy8gVGhlIGlkIG9mIGR1bW15IGNvbXBvdW5kIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBzb29uXG4gICAgICBzZWxmLm1lbWJlckdyb3Vwc1tkdW1teUNvbXBvdW5kSWRdID0gdGVtcE1lbWJlckdyb3Vwc1twX2lkXTsgLy8gQWRkIGR1bW15IGNvbXBvdW5kIHRvIG1lbWJlckdyb3Vwc1xuXG4gICAgICB2YXIgcGFyZW50ID0gdGVtcE1lbWJlckdyb3Vwc1twX2lkXVswXS5nZXRQYXJlbnQoKTsgLy8gVGhlIHBhcmVudCBvZiB6ZXJvIGRlZ3JlZSBub2RlcyB3aWxsIGJlIHRoZSBwYXJlbnQgb2YgbmV3IGR1bW15IGNvbXBvdW5kXG5cbiAgICAgIC8vIENyZWF0ZSBhIGR1bW15IGNvbXBvdW5kIHdpdGggY2FsY3VsYXRlZCBpZFxuICAgICAgdmFyIGR1bW15Q29tcG91bmQgPSBuZXcgQ29TRU5vZGUoc2VsZi5ncmFwaE1hbmFnZXIpO1xuICAgICAgZHVtbXlDb21wb3VuZC5pZCA9IGR1bW15Q29tcG91bmRJZDtcbiAgICAgIGR1bW15Q29tcG91bmQucGFkZGluZ0xlZnQgPSBwYXJlbnQucGFkZGluZ0xlZnQgfHwgMDtcbiAgICAgIGR1bW15Q29tcG91bmQucGFkZGluZ1JpZ2h0ID0gcGFyZW50LnBhZGRpbmdSaWdodCB8fCAwO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nQm90dG9tID0gcGFyZW50LnBhZGRpbmdCb3R0b20gfHwgMDtcbiAgICAgIGR1bW15Q29tcG91bmQucGFkZGluZ1RvcCA9IHBhcmVudC5wYWRkaW5nVG9wIHx8IDA7XG5cbiAgICAgIHNlbGYuaWRUb0R1bW15Tm9kZVtkdW1teUNvbXBvdW5kSWRdID0gZHVtbXlDb21wb3VuZDtcblxuICAgICAgdmFyIGR1bW15UGFyZW50R3JhcGggPSBzZWxmLmdldEdyYXBoTWFuYWdlcigpLmFkZChzZWxmLm5ld0dyYXBoKCksIGR1bW15Q29tcG91bmQpO1xuICAgICAgdmFyIHBhcmVudEdyYXBoID0gcGFyZW50LmdldENoaWxkKCk7XG5cbiAgICAgIC8vIEFkZCBkdW1teSBjb21wb3VuZCB0byBwYXJlbnQgdGhlIGdyYXBoXG4gICAgICBwYXJlbnRHcmFwaC5hZGQoZHVtbXlDb21wb3VuZCk7XG5cbiAgICAgIC8vIEZvciBlYWNoIHplcm8gZGVncmVlIG5vZGUgaW4gdGhpcyBsZXZlbCByZW1vdmUgaXQgZnJvbSBpdHMgcGFyZW50IGdyYXBoIGFuZCBhZGQgaXQgdG8gdGhlIGdyYXBoIG9mIGR1bW15IHBhcmVudFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gdGVtcE1lbWJlckdyb3Vwc1twX2lkXVtpXTtcblxuICAgICAgICBwYXJlbnRHcmFwaC5yZW1vdmUobm9kZSk7XG4gICAgICAgIGR1bW15UGFyZW50R3JhcGguYWRkKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jbGVhckNvbXBvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNoaWxkR3JhcGhNYXAgPSB7fTtcbiAgdmFyIGlkVG9Ob2RlID0ge307XG5cbiAgLy8gR2V0IGNvbXBvdW5kIG9yZGVyaW5nIGJ5IGZpbmRpbmcgdGhlIGlubmVyIG9uZSBmaXJzdFxuICB0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZFRvTm9kZVt0aGlzLmNvbXBvdW5kT3JkZXJbaV0uaWRdID0gdGhpcy5jb21wb3VuZE9yZGVyW2ldO1xuICAgIGNoaWxkR3JhcGhNYXBbdGhpcy5jb21wb3VuZE9yZGVyW2ldLmlkXSA9IFtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbaV0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKTtcblxuICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBvZiBjb21wb3VuZHNcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW2ldLmdldENoaWxkKCkpO1xuICAgIHRoaXMuY29tcG91bmRPcmRlcltpXS5jaGlsZCA9IG51bGw7XG4gIH1cblxuICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCk7XG5cbiAgLy8gVGlsZSB0aGUgcmVtb3ZlZCBjaGlsZHJlblxuICB0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoY2hpbGRHcmFwaE1hcCwgaWRUb05vZGUpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdGlsZWRaZXJvRGVncmVlUGFjayA9IHRoaXMudGlsZWRaZXJvRGVncmVlUGFjayA9IFtdO1xuXG4gIE9iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBjb21wb3VuZE5vZGUgPSBzZWxmLmlkVG9EdW1teU5vZGVbaWRdOyAvLyBHZXQgdGhlIGR1bW15IGNvbXBvdW5kXG5cbiAgICB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXSA9IHNlbGYudGlsZU5vZGVzKHNlbGYubWVtYmVyR3JvdXBzW2lkXSwgY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0ICsgY29tcG91bmROb2RlLnBhZGRpbmdSaWdodCk7XG5cbiAgICAvLyBTZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGR1bW15IGNvbXBvdW5kIGFzIGNhbGN1bGF0ZWRcbiAgICBjb21wb3VuZE5vZGUucmVjdC53aWR0aCA9IHRpbGVkWmVyb0RlZ3JlZVBhY2tbaWRdLndpZHRoO1xuICAgIGNvbXBvdW5kTm9kZS5yZWN0LmhlaWdodCA9IHRpbGVkWmVyb0RlZ3JlZVBhY2tbaWRdLmhlaWdodDtcbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gdGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxDb21wb3VuZE5vZGUgPSB0aGlzLmNvbXBvdW5kT3JkZXJbaV07XG4gICAgdmFyIGlkID0gbENvbXBvdW5kTm9kZS5pZDtcbiAgICB2YXIgaG9yaXpvbnRhbE1hcmdpbiA9IGxDb21wb3VuZE5vZGUucGFkZGluZ0xlZnQ7XG4gICAgdmFyIHZlcnRpY2FsTWFyZ2luID0gbENvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuXG4gICAgdGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbaWRdLCBsQ29tcG91bmROb2RlLnJlY3QueCwgbENvbXBvdW5kTm9kZS5yZWN0LnksIGhvcml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0aWxlZFBhY2sgPSB0aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7XG5cbiAgT2JqZWN0LmtleXModGlsZWRQYWNrKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBjb21wb3VuZE5vZGUgPSBzZWxmLmlkVG9EdW1teU5vZGVbaWRdOyAvLyBHZXQgdGhlIGR1bW15IGNvbXBvdW5kIGJ5IGl0cyBpZFxuICAgIHZhciBob3Jpem9udGFsTWFyZ2luID0gY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0O1xuICAgIHZhciB2ZXJ0aWNhbE1hcmdpbiA9IGNvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuXG4gICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbnMgb2Ygbm9kZXMgd3J0IGl0cyBjb21wb3VuZFxuICAgIHNlbGYuYWRqdXN0TG9jYXRpb25zKHRpbGVkUGFja1tpZF0sIGNvbXBvdW5kTm9kZS5yZWN0LngsIGNvbXBvdW5kTm9kZS5yZWN0LnksIGhvcml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luKTtcbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRUb0JlVGlsZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgaWQgPSBub2RlLmlkO1xuICAvL2ZpcnN0bHkgY2hlY2sgdGhlIHByZXZpb3VzIHJlc3VsdHNcbiAgaWYgKHRoaXMudG9CZVRpbGVkW2lkXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMudG9CZVRpbGVkW2lkXTtcbiAgfVxuXG4gIC8vb25seSBjb21wb3VuZCBub2RlcyBhcmUgdG8gYmUgdGlsZWRcbiAgdmFyIGNoaWxkR3JhcGggPSBub2RlLmdldENoaWxkKCk7XG4gIGlmIChjaGlsZEdyYXBoID09IG51bGwpIHtcbiAgICB0aGlzLnRvQmVUaWxlZFtpZF0gPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBjaGlsZEdyYXBoLmdldE5vZGVzKCk7IC8vIEdldCB0aGUgY2hpbGRyZW4gbm9kZXNcblxuICAvL2EgY29tcG91bmQgbm9kZSBpcyBub3QgdG8gYmUgdGlsZWQgaWYgYWxsIG9mIGl0cyBjb21wb3VuZCBjaGlsZHJlbiBhcmUgbm90IHRvIGJlIHRpbGVkXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdGhlQ2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmICh0aGlzLmdldE5vZGVEZWdyZWUodGhlQ2hpbGQpID4gMCkge1xuICAgICAgdGhpcy50b0JlVGlsZWRbaWRdID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy9wYXNzIHRoZSBjaGlsZHJlbiBub3QgaGF2aW5nIHRoZSBjb21wb3VuZCBzdHJ1Y3R1cmVcbiAgICBpZiAodGhlQ2hpbGQuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRvQmVUaWxlZFt0aGVDaGlsZC5pZF0gPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5nZXRUb0JlVGlsZWQodGhlQ2hpbGQpKSB7XG4gICAgICB0aGlzLnRvQmVUaWxlZFtpZF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdGhpcy50b0JlVGlsZWRbaWRdID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBHZXQgZGVncmVlIG9mIGEgbm9kZSBkZXBlbmRpbmcgb2YgaXRzIGVkZ2VzIGFuZCBpbmRlcGVuZGVudCBvZiBpdHMgY2hpbGRyZW5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldE5vZGVEZWdyZWUgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgaWQgPSBub2RlLmlkO1xuICB2YXIgZWRnZXMgPSBub2RlLmdldEVkZ2VzKCk7XG4gIHZhciBkZWdyZWUgPSAwO1xuXG4gIC8vIEZvciB0aGUgZWRnZXMgY29ubmVjdGVkXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgIGlmIChlZGdlLmdldFNvdXJjZSgpLmlkICE9PSBlZGdlLmdldFRhcmdldCgpLmlkKSB7XG4gICAgICBkZWdyZWUgPSBkZWdyZWUgKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVncmVlO1xufTtcblxuLy8gR2V0IGRlZ3JlZSBvZiBhIG5vZGUgd2l0aCBpdHMgY2hpbGRyZW5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4gPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgZGVncmVlID0gdGhpcy5nZXROb2RlRGVncmVlKG5vZGUpO1xuICBpZiAobm9kZS5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICByZXR1cm4gZGVncmVlO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IG5vZGUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgZGVncmVlICs9IHRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihjaGlsZCk7XG4gIH1cbiAgcmV0dXJuIGRlZ3JlZTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jb21wb3VuZE9yZGVyID0gW107XG4gIHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlModGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuZmlsbENvbXBleE9yZGVyQnlERlMgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoY2hpbGQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0VG9CZVRpbGVkKGNoaWxkKSkge1xuICAgICAgdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4qIFRoaXMgbWV0aG9kIHBsYWNlcyBlYWNoIHplcm8gZGVncmVlIG1lbWJlciB3cnQgZ2l2ZW4gKHgseSkgY29vcmRpbmF0ZXMgKHRvcCBsZWZ0KS5cbiovXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnMgPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uLCB4LCB5LCBjb21wb3VuZEhvcml6b250YWxNYXJnaW4sIGNvbXBvdW5kVmVydGljYWxNYXJnaW4pIHtcbiAgeCArPSBjb21wb3VuZEhvcml6b250YWxNYXJnaW47XG4gIHkgKz0gY29tcG91bmRWZXJ0aWNhbE1hcmdpbjtcblxuICB2YXIgbGVmdCA9IHg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByb3cgPSBvcmdhbml6YXRpb24ucm93c1tpXTtcbiAgICB4ID0gbGVmdDtcbiAgICB2YXIgbWF4SGVpZ2h0ID0gMDtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbG5vZGUgPSByb3dbal07XG5cbiAgICAgIGxub2RlLnJlY3QueCA9IHg7IC8vICsgbG5vZGUucmVjdC53aWR0aCAvIDI7XG4gICAgICBsbm9kZS5yZWN0LnkgPSB5OyAvLyArIGxub2RlLnJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgeCArPSBsbm9kZS5yZWN0LndpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nO1xuXG4gICAgICBpZiAobG5vZGUucmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGxub2RlLnJlY3QuaGVpZ2h0O1xuICAgIH1cblxuICAgIHkgKz0gbWF4SGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycyA9IGZ1bmN0aW9uIChjaGlsZEdyYXBoTWFwLCBpZFRvTm9kZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMudGlsZWRNZW1iZXJQYWNrID0gW107XG5cbiAgT2JqZWN0LmtleXMoY2hpbGRHcmFwaE1hcCkuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAvLyBHZXQgdGhlIGNvbXBvdW5kIG5vZGVcbiAgICB2YXIgY29tcG91bmROb2RlID0gaWRUb05vZGVbaWRdO1xuXG4gICAgc2VsZi50aWxlZE1lbWJlclBhY2tbaWRdID0gc2VsZi50aWxlTm9kZXMoY2hpbGRHcmFwaE1hcFtpZF0sIGNvbXBvdW5kTm9kZS5wYWRkaW5nTGVmdCArIGNvbXBvdW5kTm9kZS5wYWRkaW5nUmlnaHQpO1xuXG4gICAgY29tcG91bmROb2RlLnJlY3Qud2lkdGggPSBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0ud2lkdGg7XG4gICAgY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0ID0gc2VsZi50aWxlZE1lbWJlclBhY2tbaWRdLmhlaWdodDtcbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlTm9kZXMgPSBmdW5jdGlvbiAobm9kZXMsIG1pbldpZHRoKSB7XG4gIHZhciB2ZXJ0aWNhbFBhZGRpbmcgPSBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMO1xuICB2YXIgaG9yaXpvbnRhbFBhZGRpbmcgPSBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX0hPUklaT05UQUw7XG4gIHZhciBvcmdhbml6YXRpb24gPSB7XG4gICAgcm93czogW10sXG4gICAgcm93V2lkdGg6IFtdLFxuICAgIHJvd0hlaWdodDogW10sXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiBtaW5XaWR0aCwgLy8gYXNzdW1lIG1pbkhlaWdodCBlcXVhbHMgdG8gbWluV2lkdGhcbiAgICB2ZXJ0aWNhbFBhZGRpbmc6IHZlcnRpY2FsUGFkZGluZyxcbiAgICBob3Jpem9udGFsUGFkZGluZzogaG9yaXpvbnRhbFBhZGRpbmdcbiAgfTtcblxuICAvLyBTb3J0IHRoZSBub2RlcyBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIgYXJlYXNcbiAgbm9kZXMuc29ydChmdW5jdGlvbiAobjEsIG4yKSB7XG4gICAgaWYgKG4xLnJlY3Qud2lkdGggKiBuMS5yZWN0LmhlaWdodCA+IG4yLnJlY3Qud2lkdGggKiBuMi5yZWN0LmhlaWdodCkgcmV0dXJuIC0xO1xuICAgIGlmIChuMS5yZWN0LndpZHRoICogbjEucmVjdC5oZWlnaHQgPCBuMi5yZWN0LndpZHRoICogbjIucmVjdC5oZWlnaHQpIHJldHVybiAxO1xuICAgIHJldHVybiAwO1xuICB9KTtcblxuICAvLyBDcmVhdGUgdGhlIG9yZ2FuaXphdGlvbiAtPiB0aWxlIG1lbWJlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCAwLCBtaW5XaWR0aCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNhbkFkZEhvcml6b250YWwob3JnYW5pemF0aW9uLCBsTm9kZS5yZWN0LndpZHRoLCBsTm9kZS5yZWN0LmhlaWdodCkpIHtcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZVRvUm93KG9yZ2FuaXphdGlvbiwgbE5vZGUsIHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChvcmdhbml6YXRpb24pLCBtaW5XaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZVRvUm93KG9yZ2FuaXphdGlvbiwgbE5vZGUsIG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCwgbWluV2lkdGgpO1xuICAgIH1cblxuICAgIHRoaXMuc2hpZnRUb0xhc3RSb3cob3JnYW5pemF0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBvcmdhbml6YXRpb247XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3cgPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uLCBub2RlLCByb3dJbmRleCwgbWluV2lkdGgpIHtcbiAgdmFyIG1pbkNvbXBvdW5kU2l6ZSA9IG1pbldpZHRoO1xuXG4gIC8vIEFkZCBuZXcgcm93IGlmIG5lZWRlZFxuICBpZiAocm93SW5kZXggPT0gb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoKSB7XG4gICAgdmFyIHNlY29uZERpbWVuc2lvbiA9IFtdO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd3MucHVzaChzZWNvbmREaW1lbnNpb24pO1xuICAgIG9yZ2FuaXphdGlvbi5yb3dXaWR0aC5wdXNoKG1pbkNvbXBvdW5kU2l6ZSk7XG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodC5wdXNoKDApO1xuICB9XG5cbiAgLy8gVXBkYXRlIHJvdyB3aWR0aFxuICB2YXIgdyA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtyb3dJbmRleF0gKyBub2RlLnJlY3Qud2lkdGg7XG5cbiAgaWYgKG9yZ2FuaXphdGlvbi5yb3dzW3Jvd0luZGV4XS5sZW5ndGggPiAwKSB7XG4gICAgdyArPSBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG4gIH1cblxuICBvcmdhbml6YXRpb24ucm93V2lkdGhbcm93SW5kZXhdID0gdztcbiAgLy8gVXBkYXRlIGNvbXBvdW5kIHdpZHRoXG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggPCB3KSB7XG4gICAgb3JnYW5pemF0aW9uLndpZHRoID0gdztcbiAgfVxuXG4gIC8vIFVwZGF0ZSBoZWlnaHRcbiAgdmFyIGggPSBub2RlLnJlY3QuaGVpZ2h0O1xuICBpZiAocm93SW5kZXggPiAwKSBoICs9IG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG5cbiAgdmFyIGV4dHJhSGVpZ2h0ID0gMDtcbiAgaWYgKGggPiBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XSkge1xuICAgIGV4dHJhSGVpZ2h0ID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtyb3dJbmRleF07XG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtyb3dJbmRleF0gPSBoO1xuICAgIGV4dHJhSGVpZ2h0ID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtyb3dJbmRleF0gLSBleHRyYUhlaWdodDtcbiAgfVxuXG4gIG9yZ2FuaXphdGlvbi5oZWlnaHQgKz0gZXh0cmFIZWlnaHQ7XG5cbiAgLy8gSW5zZXJ0IG5vZGVcbiAgb3JnYW5pemF0aW9uLnJvd3Nbcm93SW5kZXhdLnB1c2gobm9kZSk7XG59O1xuXG4vL1NjYW5zIHRoZSByb3dzIG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgcmV0dXJucyB0aGUgb25lIHdpdGggdGhlIG1pbiB3aWR0aFxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleCA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24pIHtcbiAgdmFyIHIgPSAtMTtcbiAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvcmdhbml6YXRpb24ucm93V2lkdGhbaV0gPCBtaW4pIHtcbiAgICAgIHIgPSBpO1xuICAgICAgbWluID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn07XG5cbi8vU2NhbnMgdGhlIHJvd3Mgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCByZXR1cm5zIHRoZSBvbmUgd2l0aCB0aGUgbWF4IHdpZHRoXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXggPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uKSB7XG4gIHZhciByID0gLTE7XG4gIHZhciBtYXggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmIChvcmdhbml6YXRpb24ucm93V2lkdGhbaV0gPiBtYXgpIHtcbiAgICAgIHIgPSBpO1xuICAgICAgbWF4ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufTtcblxuLyoqXG4qIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIGFkZGluZyBleHRyYSB3aWR0aCB0byB0aGUgb3JnYW5pemF0aW9uIHZpb2xhdGVzXG4qIHRoZSBhc3BlY3QgcmF0aW8oMSkgb3Igbm90LlxuKi9cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNhbkFkZEhvcml6b250YWwgPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uLCBleHRyYVdpZHRoLCBleHRyYUhlaWdodCkge1xuXG4gIHZhciBzcmkgPSB0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgob3JnYW5pemF0aW9uKTtcblxuICBpZiAoc3JpIDwgMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIG1pbiA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtzcmldO1xuXG4gIGlmIChtaW4gKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmcgKyBleHRyYVdpZHRoIDw9IG9yZ2FuaXphdGlvbi53aWR0aCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGhEaWZmID0gMDtcblxuICAvLyBBZGRpbmcgdG8gYW4gZXhpc3Rpbmcgcm93XG4gIGlmIChvcmdhbml6YXRpb24ucm93SGVpZ2h0W3NyaV0gPCBleHRyYUhlaWdodCkge1xuICAgIGlmIChzcmkgPiAwKSBoRGlmZiA9IGV4dHJhSGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZyAtIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbc3JpXTtcbiAgfVxuXG4gIHZhciBhZGRfdG9fcm93X3JhdGlvO1xuICBpZiAob3JnYW5pemF0aW9uLndpZHRoIC0gbWluID49IGV4dHJhV2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmcpIHtcbiAgICBhZGRfdG9fcm93X3JhdGlvID0gKG9yZ2FuaXphdGlvbi5oZWlnaHQgKyBoRGlmZikgLyAobWluICsgZXh0cmFXaWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZyk7XG4gIH0gZWxzZSB7XG4gICAgYWRkX3RvX3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gb3JnYW5pemF0aW9uLndpZHRoO1xuICB9XG5cbiAgLy8gQWRkaW5nIGEgbmV3IHJvdyBmb3IgdGhpcyBub2RlXG4gIGhEaWZmID0gZXh0cmFIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuICB2YXIgYWRkX25ld19yb3dfcmF0aW87XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggPCBleHRyYVdpZHRoKSB7XG4gICAgYWRkX25ld19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIGV4dHJhV2lkdGg7XG4gIH0gZWxzZSB7XG4gICAgYWRkX25ld19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIG9yZ2FuaXphdGlvbi53aWR0aDtcbiAgfVxuXG4gIGlmIChhZGRfbmV3X3Jvd19yYXRpbyA8IDEpIGFkZF9uZXdfcm93X3JhdGlvID0gMSAvIGFkZF9uZXdfcm93X3JhdGlvO1xuXG4gIGlmIChhZGRfdG9fcm93X3JhdGlvIDwgMSkgYWRkX3RvX3Jvd19yYXRpbyA9IDEgLyBhZGRfdG9fcm93X3JhdGlvO1xuXG4gIHJldHVybiBhZGRfdG9fcm93X3JhdGlvIDwgYWRkX25ld19yb3dfcmF0aW87XG59O1xuXG4vL0lmIG1vdmluZyB0aGUgbGFzdCBub2RlIGZyb20gdGhlIGxvbmdlc3Qgcm93IGFuZCBhZGRpbmcgaXQgdG8gdGhlIGxhc3Rcbi8vcm93IG1ha2VzIHRoZSBib3VuZGluZyBib3ggc21hbGxlciwgZG8gaXQuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdyA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24pIHtcbiAgdmFyIGxvbmdlc3QgPSB0aGlzLmdldExvbmdlc3RSb3dJbmRleChvcmdhbml6YXRpb24pO1xuICB2YXIgbGFzdCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aC5sZW5ndGggLSAxO1xuICB2YXIgcm93ID0gb3JnYW5pemF0aW9uLnJvd3NbbG9uZ2VzdF07XG4gIHZhciBub2RlID0gcm93W3Jvdy5sZW5ndGggLSAxXTtcblxuICB2YXIgZGlmZiA9IG5vZGUud2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIG9uIHRoZSBsYXN0IHJvd1xuICBpZiAob3JnYW5pemF0aW9uLndpZHRoIC0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xhc3RdID4gZGlmZiAmJiBsb25nZXN0ICE9IGxhc3QpIHtcbiAgICAvLyBSZW1vdmUgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgbG9uZ2VzdCByb3dcbiAgICByb3cuc3BsaWNlKC0xLCAxKTtcblxuICAgIC8vIFB1c2ggaXQgdG8gdGhlIGxhc3Qgcm93XG4gICAgb3JnYW5pemF0aW9uLnJvd3NbbGFzdF0ucHVzaChub2RlKTtcblxuICAgIG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtsb25nZXN0XSA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtsb25nZXN0XSAtIGRpZmY7XG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xhc3RdID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xhc3RdICsgZGlmZjtcbiAgICBvcmdhbml6YXRpb24ud2lkdGggPSBvcmdhbml6YXRpb24ucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KG9yZ2FuaXphdGlvbildO1xuXG4gICAgLy8gVXBkYXRlIGhlaWdodHMgb2YgdGhlIG9yZ2FuaXphdGlvblxuICAgIHZhciBtYXhIZWlnaHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocm93W2ldLmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gcm93W2ldLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKGxvbmdlc3QgPiAwKSBtYXhIZWlnaHQgKz0gb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICAgIHZhciBwcmV2VG90YWwgPSBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xvbmdlc3RdICsgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XTtcblxuICAgIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gPSBtYXhIZWlnaHQ7XG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF0gPCBub2RlLmhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmcpIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF0gPSBub2RlLmhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG5cbiAgICB2YXIgZmluYWxUb3RhbCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gKyBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xhc3RdO1xuICAgIG9yZ2FuaXphdGlvbi5oZWlnaHQgKz0gZmluYWxUb3RhbCAtIHByZXZUb3RhbDtcblxuICAgIHRoaXMuc2hpZnRUb0xhc3RSb3cob3JnYW5pemF0aW9uKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoQ29TRUNvbnN0YW50cy5USUxFKSB7XG4gICAgLy8gRmluZCB6ZXJvIGRlZ3JlZSBub2RlcyBhbmQgY3JlYXRlIGEgY29tcG91bmQgZm9yIGVhY2ggbGV2ZWxcbiAgICB0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgICAvLyBUaWxlIGFuZCBjbGVhciBjaGlsZHJlbiBvZiBlYWNoIGNvbXBvdW5kXG4gICAgdGhpcy5jbGVhckNvbXBvdW5kcygpO1xuICAgIC8vIFNlcGFyYXRlbHkgdGlsZSBhbmQgY2xlYXIgemVybyBkZWdyZWUgbm9kZXMgZm9yIGVhY2ggbGV2ZWxcbiAgICB0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKENvU0VDb25zdGFudHMuVElMRSkge1xuICAgIHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCk7XG4gICAgdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCk7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBUcmVlIFJlZHVjdGlvbiBtZXRob2RzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVkdWNlIHRyZWVzIFxuQ29TRUxheW91dC5wcm90b3R5cGUucmVkdWNlVHJlZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwcnVuZWROb2Rlc0FsbCA9IFtdO1xuICB2YXIgY29udGFpbnNMZWFmID0gdHJ1ZTtcbiAgdmFyIG5vZGU7XG5cbiAgd2hpbGUgKGNvbnRhaW5zTGVhZikge1xuICAgIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gICAgdmFyIHBydW5lZE5vZGVzSW5TdGVwVGVtcCA9IFtdO1xuICAgIGNvbnRhaW5zTGVhZiA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IGFsbE5vZGVzW2ldO1xuICAgICAgaWYgKG5vZGUuZ2V0RWRnZXMoKS5sZW5ndGggPT0gMSAmJiAhbm9kZS5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCAmJiBub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgICBwcnVuZWROb2Rlc0luU3RlcFRlbXAucHVzaChbbm9kZSwgbm9kZS5nZXRFZGdlcygpWzBdLCBub2RlLmdldE93bmVyKCldKTtcbiAgICAgICAgY29udGFpbnNMZWFmID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbnRhaW5zTGVhZiA9PSB0cnVlKSB7XG4gICAgICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXAgPSBbXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChwcnVuZWROb2Rlc0luU3RlcFRlbXBbal1bMF0uZ2V0RWRnZXMoKS5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwLnB1c2gocHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdKTtcbiAgICAgICAgICBwcnVuZWROb2Rlc0luU3RlcFRlbXBbal1bMF0uZ2V0T3duZXIoKS5yZW1vdmUocHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJ1bmVkTm9kZXNBbGwucHVzaChwcnVuZWROb2Rlc0luU3RlcCk7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCk7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gICAgfVxuICB9XG4gIHRoaXMucHJ1bmVkTm9kZXNBbGwgPSBwcnVuZWROb2Rlc0FsbDtcbn07XG5cbi8vIEdyb3cgdHJlZSBvbmUgc3RlcCBcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdyb3dUcmVlID0gZnVuY3Rpb24gKHBydW5lZE5vZGVzQWxsKSB7XG4gIHZhciBsZW5ndGhPZlBydW5lZE5vZGVzSW5TdGVwID0gcHJ1bmVkTm9kZXNBbGwubGVuZ3RoO1xuICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXAgPSBwcnVuZWROb2Rlc0FsbFtsZW5ndGhPZlBydW5lZE5vZGVzSW5TdGVwIC0gMV07XG5cbiAgdmFyIG5vZGVEYXRhO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBydW5lZE5vZGVzSW5TdGVwLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZURhdGEgPSBwcnVuZWROb2Rlc0luU3RlcFtpXTtcblxuICAgIHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShub2RlRGF0YSk7XG5cbiAgICBub2RlRGF0YVsyXS5hZGQobm9kZURhdGFbMF0pO1xuICAgIG5vZGVEYXRhWzJdLmFkZChub2RlRGF0YVsxXSwgbm9kZURhdGFbMV0uc291cmNlLCBub2RlRGF0YVsxXS50YXJnZXQpO1xuICB9XG5cbiAgcHJ1bmVkTm9kZXNBbGwuc3BsaWNlKHBydW5lZE5vZGVzQWxsLmxlbmd0aCAtIDEsIDEpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbn07XG5cbi8vIEZpbmQgYW4gYXBwcm9wcmlhdGUgcG9zaXRpb24gdG8gcmVwbGFjZSBwcnVuZWQgbm9kZSwgdGhpcyBtZXRob2QgY2FuIGJlIGltcHJvdmVkXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5maW5kUGxhY2Vmb3JQcnVuZWROb2RlID0gZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG5cbiAgdmFyIGdyaWRGb3JQcnVuZWROb2RlO1xuICB2YXIgbm9kZVRvQ29ubmVjdDtcbiAgdmFyIHBydW5lZE5vZGUgPSBub2RlRGF0YVswXTtcbiAgaWYgKHBydW5lZE5vZGUgPT0gbm9kZURhdGFbMV0uc291cmNlKSB7XG4gICAgbm9kZVRvQ29ubmVjdCA9IG5vZGVEYXRhWzFdLnRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBub2RlVG9Db25uZWN0ID0gbm9kZURhdGFbMV0uc291cmNlO1xuICB9XG4gIHZhciBzdGFydEdyaWRYID0gbm9kZVRvQ29ubmVjdC5zdGFydFg7XG4gIHZhciBmaW5pc2hHcmlkWCA9IG5vZGVUb0Nvbm5lY3QuZmluaXNoWDtcbiAgdmFyIHN0YXJ0R3JpZFkgPSBub2RlVG9Db25uZWN0LnN0YXJ0WTtcbiAgdmFyIGZpbmlzaEdyaWRZID0gbm9kZVRvQ29ubmVjdC5maW5pc2hZO1xuXG4gIHZhciB1cE5vZGVDb3VudCA9IDA7XG4gIHZhciBkb3duTm9kZUNvdW50ID0gMDtcbiAgdmFyIHJpZ2h0Tm9kZUNvdW50ID0gMDtcbiAgdmFyIGxlZnROb2RlQ291bnQgPSAwO1xuICB2YXIgY29udHJvbFJlZ2lvbnMgPSBbdXBOb2RlQ291bnQsIHJpZ2h0Tm9kZUNvdW50LCBkb3duTm9kZUNvdW50LCBsZWZ0Tm9kZUNvdW50XTtcblxuICBpZiAoc3RhcnRHcmlkWSA+IDApIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRHcmlkWDsgaSA8PSBmaW5pc2hHcmlkWDsgaSsrKSB7XG4gICAgICBjb250cm9sUmVnaW9uc1swXSArPSB0aGlzLmdyaWRbaV1bc3RhcnRHcmlkWSAtIDFdLmxlbmd0aCArIHRoaXMuZ3JpZFtpXVtzdGFydEdyaWRZXS5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZmluaXNoR3JpZFggPCB0aGlzLmdyaWQubGVuZ3RoIC0gMSkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRZOyBpIDw9IGZpbmlzaEdyaWRZOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzFdICs9IHRoaXMuZ3JpZFtmaW5pc2hHcmlkWCArIDFdW2ldLmxlbmd0aCArIHRoaXMuZ3JpZFtmaW5pc2hHcmlkWF1baV0ubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGZpbmlzaEdyaWRZIDwgdGhpcy5ncmlkWzBdLmxlbmd0aCAtIDEpIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRHcmlkWDsgaSA8PSBmaW5pc2hHcmlkWDsgaSsrKSB7XG4gICAgICBjb250cm9sUmVnaW9uc1syXSArPSB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFkgKyAxXS5sZW5ndGggKyB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFldLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG4gIGlmIChzdGFydEdyaWRYID4gMCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRZOyBpIDw9IGZpbmlzaEdyaWRZOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzNdICs9IHRoaXMuZ3JpZFtzdGFydEdyaWRYIC0gMV1baV0ubGVuZ3RoICsgdGhpcy5ncmlkW3N0YXJ0R3JpZFhdW2ldLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG4gIHZhciBtaW4gPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIG1pbkNvdW50O1xuICB2YXIgbWluSW5kZXg7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgY29udHJvbFJlZ2lvbnMubGVuZ3RoOyBqKyspIHtcbiAgICBpZiAoY29udHJvbFJlZ2lvbnNbal0gPCBtaW4pIHtcbiAgICAgIG1pbiA9IGNvbnRyb2xSZWdpb25zW2pdO1xuICAgICAgbWluQ291bnQgPSAxO1xuICAgICAgbWluSW5kZXggPSBqO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbal0gPT0gbWluKSB7XG4gICAgICBtaW5Db3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtaW5Db3VudCA9PSAzICYmIG1pbiA9PSAwKSB7XG4gICAgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDE7XG4gICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzNdID09IDApIHtcbiAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMztcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbkNvdW50ID09IDIgJiYgbWluID09IDApIHtcbiAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMik7XG4gICAgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCkge1xuICAgICAgO1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJhbmRvbSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAobWluQ291bnQgPT0gNCAmJiBtaW4gPT0gMCkge1xuICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KTtcbiAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IHJhbmRvbTtcbiAgfSBlbHNlIHtcbiAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IG1pbkluZGV4O1xuICB9XG5cbiAgaWYgKGdyaWRGb3JQcnVuZWROb2RlID09IDApIHtcbiAgICBwcnVuZWROb2RlLnNldENlbnRlcihub2RlVG9Db25uZWN0LmdldENlbnRlclgoKSwgbm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJZKCkgLSBub2RlVG9Db25uZWN0LmdldEhlaWdodCgpIC8gMiAtIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLSBwcnVuZWROb2RlLmdldEhlaWdodCgpIC8gMik7XG4gIH0gZWxzZSBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMSkge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpICsgbm9kZVRvQ29ubmVjdC5nZXRXaWR0aCgpIC8gMiArIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggKyBwcnVuZWROb2RlLmdldFdpZHRoKCkgLyAyLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSk7XG4gIH0gZWxzZSBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMikge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSArIG5vZGVUb0Nvbm5lY3QuZ2V0SGVpZ2h0KCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0SGVpZ2h0KCkgLyAyKTtcbiAgfSBlbHNlIHtcbiAgICBwcnVuZWROb2RlLnNldENlbnRlcihub2RlVG9Db25uZWN0LmdldENlbnRlclgoKSAtIG5vZGVUb0Nvbm5lY3QuZ2V0V2lkdGgoKSAvIDIgLSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC0gcHJ1bmVkTm9kZS5nZXRXaWR0aCgpIC8gMiwgbm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJZKCkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VMYXlvdXQ7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY29zZUJhc2UgPSB7fTtcblxuY29zZUJhc2UubGF5b3V0QmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5jb3NlQmFzZS5Db1NFQ29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbmNvc2VCYXNlLkNvU0VFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbmNvc2VCYXNlLkNvU0VHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5jb3NlQmFzZS5Db1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbmNvc2VCYXNlLkNvU0VMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuY29zZUJhc2UuQ29TRU5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvc2VCYXNlO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/cose-base/cose-base.js\n"); /***/ }), /***/ "../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js": /*!******************************************************************************!*\ !*** ../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js ***! \******************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(/*! cose-base */ \"../../../node_modules/cose-base/cose-base.js\"));\n\telse {}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_659__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_659__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_659__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__nested_webpack_require_659__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_659__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_659__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_659__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_659__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_659__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __nested_webpack_require_3201__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants;\nvar CoSELayout = __nested_webpack_require_3201__(0).CoSELayout;\nvar CoSENode = __nested_webpack_require_3201__(0).CoSENode;\nvar PointD = __nested_webpack_require_3201__(0).layoutBase.PointD;\nvar DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD;\n\nvar defaults = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // 'draft', 'default' or 'proof\" \n // - 'draft' fast cooling rate \n // - 'default' moderate cooling rate \n // - \"proof\" slow cooling rate\n quality: 'default',\n // include labels in node dimensions\n nodeDimensionsIncludeLabels: false,\n // number of ticks per frame; higher is faster but more jerky\n refresh: 30,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 10,\n // Whether to enable incremental mode\n randomize: true,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: 4500,\n // Ideal edge (non nested) length\n idealEdgeLength: 50,\n // Divisor to compute edge forces\n edgeElasticity: 0.45,\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // Type of layout animation. The option set is {'during', 'end', false}\n animate: 'end',\n // Duration for animate:end\n animationDuration: 500,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5\n};\n\nfunction extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n};\n\nfunction _CoSELayout(_options) {\n this.options = extend(defaults, _options);\n getUserOptions(this.options);\n}\n\nvar getUserOptions = function getUserOptions(options) {\n if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion;\n if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;\n if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity;\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n};\n\n_CoSELayout.prototype.run = function () {\n var ready;\n var frameId;\n var options = this.options;\n var idToLNode = this.idToLNode = {};\n var layout = this.layout = new CoSELayout();\n var self = this;\n\n self.stopped = false;\n\n this.cy = this.options.cy;\n\n this.cy.trigger({ type: 'layoutstart', layout: this });\n\n var gm = layout.newGraphManager();\n this.gm = gm;\n\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n\n this.root = gm.addRoot();\n this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout);\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = this.idToLNode[edge.data(\"source\")];\n var targetNode = this.idToLNode[edge.data(\"target\")];\n if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n }\n }\n\n var getPositions = function getPositions(ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var theId = ele.data('id');\n var lNode = self.idToLNode[theId];\n\n return {\n x: lNode.getRect().getCenterX(),\n y: lNode.getRect().getCenterY()\n };\n };\n\n /*\n * Reposition nodes in iterations animatedly\n */\n var iterateAnimated = function iterateAnimated() {\n // Thigs to perform after nodes are repositioned on screen\n var afterReposition = function afterReposition() {\n if (options.fit) {\n options.cy.fit(options.eles, options.padding);\n }\n\n if (!ready) {\n ready = true;\n self.cy.one('layoutready', options.ready);\n self.cy.trigger({ type: 'layoutready', layout: self });\n }\n };\n\n var ticksPerFrame = self.options.refresh;\n var isDone;\n\n for (var i = 0; i < ticksPerFrame && !isDone; i++) {\n isDone = self.stopped || self.layout.tick();\n }\n\n // If layout is done\n if (isDone) {\n // If the layout is not a sublayout and it is successful perform post layout.\n if (layout.checkLayoutSuccess() && !layout.isSubLayout) {\n layout.doPostLayout();\n }\n\n // If layout has a tilingPostLayout function property call it.\n if (layout.tilingPostLayout) {\n layout.tilingPostLayout();\n }\n\n layout.isLayoutFinished = true;\n\n self.options.eles.nodes().positions(getPositions);\n\n afterReposition();\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n self.cy.one('layoutstop', self.options.stop);\n self.cy.trigger({ type: 'layoutstop', layout: self });\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n\n ready = false;\n return;\n }\n\n var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling\n\n // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds)\n // use position of their ancestors or dummy ancestors\n options.eles.nodes().positions(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n // If ele is a compound node, then its position will be defined by its children\n if (!ele.isParent()) {\n var theId = ele.id();\n var pNode = animationData[theId];\n var temp = ele;\n // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well)\n while (pNode == null) {\n pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')];\n animationData[theId] = pNode;\n temp = temp.parent()[0];\n if (temp == undefined) {\n break;\n }\n }\n if (pNode != null) {\n return {\n x: pNode.x,\n y: pNode.y\n };\n } else {\n return {\n x: ele.position('x'),\n y: ele.position('y')\n };\n }\n }\n });\n\n afterReposition();\n\n frameId = requestAnimationFrame(iterateAnimated);\n };\n\n /*\n * Listen 'layoutstarted' event and start animated iteration if animate option is 'during'\n */\n layout.addListener('layoutstarted', function () {\n if (self.options.animate === 'during') {\n frameId = requestAnimationFrame(iterateAnimated);\n }\n });\n\n layout.runLayout(); // Run cose layout\n\n /*\n * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed)\n */\n if (this.options.animate !== \"during\") {\n self.options.eles.nodes().not(\":parent\").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter\n ready = false;\n }\n\n return this; // chaining\n};\n\n//Get the top most ones of a list of nodes\n_CoSELayout.prototype.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n_CoSELayout.prototype.processChildrenList = function (parent, children, layout) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = theChild.children();\n var theNode;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node\n theNode.id = theChild.data(\"id\");\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to compound if labels will be included in node dimensions \n if (this.options.nodeDimensionsIncludeLabels) {\n if (theChild.isParent()) {\n var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;\n var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;\n var labelPos = theChild.css(\"text-halign\");\n theNode.labelWidth = labelWidth;\n theNode.labelHeight = labelHeight;\n theNode.labelPos = labelPos;\n }\n }\n\n // Map the layout node\n this.idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n this.processChildrenList(theNewGraph, children_of_children, layout);\n }\n }\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\n_CoSELayout.prototype.stop = function () {\n this.stopped = true;\n\n return this; // chaining\n};\n\nvar register = function register(cytoscape) {\n // var Layout = getLayout( cytoscape );\n\n cytoscape('layout', 'cose-bilkent', _CoSELayout);\n};\n\n// auto reg for globals\nif (typeof cytoscape !== 'undefined') {\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ })\n/******/ ]);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2N5dG9zY2FwZS1jb3NlLWJpbGtlbnQvY3l0b3NjYXBlLWNvc2UtYmlsa2VudC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUksSUFBeUQ7QUFDN0QsMkJBQTJCLG1CQUFPLENBQUMsK0RBQVc7QUFDOUMsTUFBTSxFQUtxRDtBQUMzRCxDQUFDO0FBQ0QscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhCQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSw4QkFBbUI7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CLHVCQUF1QjtBQUNwRDtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0IsZUFBZSw4QkFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEUsMENBQTBDO0FBQzFDLFdBQVcsOEJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQjtBQUM3QjtBQUNBO0FBQ0EsaUJBQWlCLDhCQUFtQixDQUFDLDhCQUFtQjtBQUN4RCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsaUNBQWlDLCtCQUFtQjs7QUFFcEQ7OztBQUdBLHNCQUFzQiwrQkFBbUI7QUFDekMsd0JBQXdCLCtCQUFtQjtBQUMzQyxvQkFBb0IsK0JBQW1CO0FBQ3ZDLGlCQUFpQiwrQkFBbUI7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QSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2N5dG9zY2FwZS1jb3NlLWJpbGtlbnQvY3l0b3NjYXBlLWNvc2UtYmlsa2VudC5qcz9lNWRiIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImNvc2UtYmFzZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJjb3NlLWJhc2VcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiY3l0b3NjYXBlQ29zZUJpbGtlbnRcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJjb3NlLWJhc2VcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImN5dG9zY2FwZUNvc2VCaWxrZW50XCJdID0gZmFjdG9yeShyb290W1wiY29zZUJhc2VcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXztcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIENvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkNvU0VDb25zdGFudHM7XG52YXIgQ29TRUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuQ29TRUxheW91dDtcbnZhciBDb1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuQ29TRU5vZGU7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5sYXlvdXRCYXNlLlBvaW50RDtcbnZhciBEaW1lbnNpb25EID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQ7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgLy8gQ2FsbGVkIG9uIGBsYXlvdXRyZWFkeWBcbiAgcmVhZHk6IGZ1bmN0aW9uIHJlYWR5KCkge30sXG4gIC8vIENhbGxlZCBvbiBgbGF5b3V0c3RvcGBcbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHt9LFxuICAvLyAnZHJhZnQnLCAnZGVmYXVsdCcgb3IgJ3Byb29mXCIgXG4gIC8vIC0gJ2RyYWZ0JyBmYXN0IGNvb2xpbmcgcmF0ZSBcbiAgLy8gLSAnZGVmYXVsdCcgbW9kZXJhdGUgY29vbGluZyByYXRlIFxuICAvLyAtIFwicHJvb2ZcIiBzbG93IGNvb2xpbmcgcmF0ZVxuICBxdWFsaXR5OiAnZGVmYXVsdCcsXG4gIC8vIGluY2x1ZGUgbGFiZWxzIGluIG5vZGUgZGltZW5zaW9uc1xuICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IGZhbHNlLFxuICAvLyBudW1iZXIgb2YgdGlja3MgcGVyIGZyYW1lOyBoaWdoZXIgaXMgZmFzdGVyIGJ1dCBtb3JlIGplcmt5XG4gIHJlZnJlc2g6IDMwLFxuICAvLyBXaGV0aGVyIHRvIGZpdCB0aGUgbmV0d29yayB2aWV3IGFmdGVyIHdoZW4gZG9uZVxuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgb24gZml0XG4gIHBhZGRpbmc6IDEwLFxuICAvLyBXaGV0aGVyIHRvIGVuYWJsZSBpbmNyZW1lbnRhbCBtb2RlXG4gIHJhbmRvbWl6ZTogdHJ1ZSxcbiAgLy8gTm9kZSByZXB1bHNpb24gKG5vbiBvdmVybGFwcGluZykgbXVsdGlwbGllclxuICBub2RlUmVwdWxzaW9uOiA0NTAwLFxuICAvLyBJZGVhbCBlZGdlIChub24gbmVzdGVkKSBsZW5ndGhcbiAgaWRlYWxFZGdlTGVuZ3RoOiA1MCxcbiAgLy8gRGl2aXNvciB0byBjb21wdXRlIGVkZ2UgZm9yY2VzXG4gIGVkZ2VFbGFzdGljaXR5OiAwLjQ1LFxuICAvLyBOZXN0aW5nIGZhY3RvciAobXVsdGlwbGllcikgdG8gY29tcHV0ZSBpZGVhbCBlZGdlIGxlbmd0aCBmb3IgbmVzdGVkIGVkZ2VzXG4gIG5lc3RpbmdGYWN0b3I6IDAuMSxcbiAgLy8gR3Jhdml0eSBmb3JjZSAoY29uc3RhbnQpXG4gIGdyYXZpdHk6IDAuMjUsXG4gIC8vIE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybVxuICBudW1JdGVyOiAyNTAwLFxuICAvLyBGb3IgZW5hYmxpbmcgdGlsaW5nXG4gIHRpbGU6IHRydWUsXG4gIC8vIFR5cGUgb2YgbGF5b3V0IGFuaW1hdGlvbi4gVGhlIG9wdGlvbiBzZXQgaXMgeydkdXJpbmcnLCAnZW5kJywgZmFsc2V9XG4gIGFuaW1hdGU6ICdlbmQnLFxuICAvLyBEdXJhdGlvbiBmb3IgYW5pbWF0ZTplbmRcbiAgYW5pbWF0aW9uRHVyYXRpb246IDUwMCxcbiAgLy8gUmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0byBwdXQgYmV0d2VlbiB0aGUgemVybyBkZWdyZWUgbWVtYmVycyBkdXJpbmcgdGhlIHRpbGluZyBvcGVyYXRpb24oY2FuIGFsc28gYmUgYSBmdW5jdGlvbilcbiAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiAxMCxcbiAgLy8gUmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIHRoZSBob3Jpem9udGFsIHNwYWNlIHRvIHB1dCBiZXR3ZWVuIHRoZSB6ZXJvIGRlZ3JlZSBtZW1iZXJzIGR1cmluZyB0aGUgdGlsaW5nIG9wZXJhdGlvbihjYW4gYWxzbyBiZSBhIGZ1bmN0aW9uKVxuICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gIC8vIEdyYXZpdHkgcmFuZ2UgKGNvbnN0YW50KSBmb3IgY29tcG91bmRzXG4gIGdyYXZpdHlSYW5nZUNvbXBvdW5kOiAxLjUsXG4gIC8vIEdyYXZpdHkgZm9yY2UgKGNvbnN0YW50KSBmb3IgY29tcG91bmRzXG4gIGdyYXZpdHlDb21wb3VuZDogMS4wLFxuICAvLyBHcmF2aXR5IHJhbmdlIChjb25zdGFudClcbiAgZ3Jhdml0eVJhbmdlOiAzLjgsXG4gIC8vIEluaXRpYWwgY29vbGluZyBmYWN0b3IgZm9yIGluY3JlbWVudGFsIGxheW91dFxuICBpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDogMC41XG59O1xuXG5mdW5jdGlvbiBleHRlbmQoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGZvciAodmFyIGkgaW4gZGVmYXVsdHMpIHtcbiAgICBvYmpbaV0gPSBkZWZhdWx0c1tpXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgIG9ialtpXSA9IG9wdGlvbnNbaV07XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuZnVuY3Rpb24gX0NvU0VMYXlvdXQoX29wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKGRlZmF1bHRzLCBfb3B0aW9ucyk7XG4gIGdldFVzZXJPcHRpb25zKHRoaXMub3B0aW9ucyk7XG59XG5cbnZhciBnZXRVc2VyT3B0aW9ucyA9IGZ1bmN0aW9uIGdldFVzZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMubm9kZVJlcHVsc2lvbiAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEggPSBvcHRpb25zLm5vZGVSZXB1bHNpb247XG4gIGlmIChvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIID0gb3B0aW9ucy5pZGVhbEVkZ2VMZW5ndGg7XG4gIGlmIChvcHRpb25zLmVkZ2VFbGFzdGljaXR5ICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCA9IG9wdGlvbnMuZWRnZUVsYXN0aWNpdHk7XG4gIGlmIChvcHRpb25zLm5lc3RpbmdGYWN0b3IgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gRkRMYXlvdXRDb25zdGFudHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiA9IG9wdGlvbnMubmVzdGluZ0ZhY3RvcjtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eSAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCA9IG9wdGlvbnMuZ3Jhdml0eTtcbiAgaWYgKG9wdGlvbnMubnVtSXRlciAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLk1BWF9JVEVSQVRJT05TID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSBvcHRpb25zLm51bUl0ZXI7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlSYW5nZSAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gb3B0aW9ucy5ncmF2aXR5UmFuZ2U7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlDb21wb3VuZCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCA9IG9wdGlvbnMuZ3Jhdml0eUNvbXBvdW5kO1xuICBpZiAob3B0aW9ucy5ncmF2aXR5UmFuZ2VDb21wb3VuZCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gb3B0aW9ucy5ncmF2aXR5UmFuZ2VDb21wb3VuZDtcbiAgaWYgKG9wdGlvbnMuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCA9IG9wdGlvbnMuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw7XG5cbiAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSAnZHJhZnQnKSBMYXlvdXRDb25zdGFudHMuUVVBTElUWSA9IDA7ZWxzZSBpZiAob3B0aW9ucy5xdWFsaXR5ID09ICdwcm9vZicpIExheW91dENvbnN0YW50cy5RVUFMSVRZID0gMjtlbHNlIExheW91dENvbnN0YW50cy5RVUFMSVRZID0gMTtcblxuICBDb1NFQ29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IEZETGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IExheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMgPSBvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscztcbiAgQ29TRUNvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gIW9wdGlvbnMucmFuZG9taXplO1xuICBDb1NFQ29uc3RhbnRzLkFOSU1BVEUgPSBGRExheW91dENvbnN0YW50cy5BTklNQVRFID0gTGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPSBvcHRpb25zLmFuaW1hdGU7XG4gIENvU0VDb25zdGFudHMuVElMRSA9IG9wdGlvbnMudGlsZTtcbiAgQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19WRVJUSUNBTCA9IHR5cGVvZiBvcHRpb25zLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKSA6IG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsO1xuICBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX0hPUklaT05UQUwgPSB0eXBlb2Ygb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGlsaW5nUGFkZGluZ0hvcml6b250YWwuY2FsbCgpIDogb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDtcbn07XG5cbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZWFkeTtcbiAgdmFyIGZyYW1lSWQ7XG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgaWRUb0xOb2RlID0gdGhpcy5pZFRvTE5vZGUgPSB7fTtcbiAgdmFyIGxheW91dCA9IHRoaXMubGF5b3V0ID0gbmV3IENvU0VMYXlvdXQoKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuc3RvcHBlZCA9IGZhbHNlO1xuXG4gIHRoaXMuY3kgPSB0aGlzLm9wdGlvbnMuY3k7XG5cbiAgdGhpcy5jeS50cmlnZ2VyKHsgdHlwZTogJ2xheW91dHN0YXJ0JywgbGF5b3V0OiB0aGlzIH0pO1xuXG4gIHZhciBnbSA9IGxheW91dC5uZXdHcmFwaE1hbmFnZXIoKTtcbiAgdGhpcy5nbSA9IGdtO1xuXG4gIHZhciBub2RlcyA9IHRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gIHZhciBlZGdlcyA9IHRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7XG5cbiAgdGhpcy5yb290ID0gZ20uYWRkUm9vdCgpO1xuICB0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LCB0aGlzLmdldFRvcE1vc3ROb2Rlcyhub2RlcyksIGxheW91dCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgdmFyIHNvdXJjZU5vZGUgPSB0aGlzLmlkVG9MTm9kZVtlZGdlLmRhdGEoXCJzb3VyY2VcIildO1xuICAgIHZhciB0YXJnZXROb2RlID0gdGhpcy5pZFRvTE5vZGVbZWRnZS5kYXRhKFwidGFyZ2V0XCIpXTtcbiAgICBpZiAoc291cmNlTm9kZSAhPT0gdGFyZ2V0Tm9kZSAmJiBzb3VyY2VOb2RlLmdldEVkZ2VzQmV0d2Vlbih0YXJnZXROb2RlKS5sZW5ndGggPT0gMCkge1xuICAgICAgdmFyIGUxID0gZ20uYWRkKGxheW91dC5uZXdFZGdlKCksIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgZTEuaWQgPSBlZGdlLmlkKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdldFBvc2l0aW9ucyA9IGZ1bmN0aW9uIGdldFBvc2l0aW9ucyhlbGUsIGkpIHtcbiAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZWxlID0gaTtcbiAgICB9XG4gICAgdmFyIHRoZUlkID0gZWxlLmRhdGEoJ2lkJyk7XG4gICAgdmFyIGxOb2RlID0gc2VsZi5pZFRvTE5vZGVbdGhlSWRdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGxOb2RlLmdldFJlY3QoKS5nZXRDZW50ZXJYKCksXG4gICAgICB5OiBsTm9kZS5nZXRSZWN0KCkuZ2V0Q2VudGVyWSgpXG4gICAgfTtcbiAgfTtcblxuICAvKlxuICAgKiBSZXBvc2l0aW9uIG5vZGVzIGluIGl0ZXJhdGlvbnMgYW5pbWF0ZWRseVxuICAgKi9cbiAgdmFyIGl0ZXJhdGVBbmltYXRlZCA9IGZ1bmN0aW9uIGl0ZXJhdGVBbmltYXRlZCgpIHtcbiAgICAvLyBUaGlncyB0byBwZXJmb3JtIGFmdGVyIG5vZGVzIGFyZSByZXBvc2l0aW9uZWQgb24gc2NyZWVuXG4gICAgdmFyIGFmdGVyUmVwb3NpdGlvbiA9IGZ1bmN0aW9uIGFmdGVyUmVwb3NpdGlvbigpIHtcbiAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICBvcHRpb25zLmN5LmZpdChvcHRpb25zLmVsZXMsIG9wdGlvbnMucGFkZGluZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVhZHkpIHtcbiAgICAgICAgcmVhZHkgPSB0cnVlO1xuICAgICAgICBzZWxmLmN5Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgICAgICAgc2VsZi5jeS50cmlnZ2VyKHsgdHlwZTogJ2xheW91dHJlYWR5JywgbGF5b3V0OiBzZWxmIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdGlja3NQZXJGcmFtZSA9IHNlbGYub3B0aW9ucy5yZWZyZXNoO1xuICAgIHZhciBpc0RvbmU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpY2tzUGVyRnJhbWUgJiYgIWlzRG9uZTsgaSsrKSB7XG4gICAgICBpc0RvbmUgPSBzZWxmLnN0b3BwZWQgfHwgc2VsZi5sYXlvdXQudGljaygpO1xuICAgIH1cblxuICAgIC8vIElmIGxheW91dCBpcyBkb25lXG4gICAgaWYgKGlzRG9uZSkge1xuICAgICAgLy8gSWYgdGhlIGxheW91dCBpcyBub3QgYSBzdWJsYXlvdXQgYW5kIGl0IGlzIHN1Y2Nlc3NmdWwgcGVyZm9ybSBwb3N0IGxheW91dC5cbiAgICAgIGlmIChsYXlvdXQuY2hlY2tMYXlvdXRTdWNjZXNzKCkgJiYgIWxheW91dC5pc1N1YkxheW91dCkge1xuICAgICAgICBsYXlvdXQuZG9Qb3N0TGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGxheW91dCBoYXMgYSB0aWxpbmdQb3N0TGF5b3V0IGZ1bmN0aW9uIHByb3BlcnR5IGNhbGwgaXQuXG4gICAgICBpZiAobGF5b3V0LnRpbGluZ1Bvc3RMYXlvdXQpIHtcbiAgICAgICAgbGF5b3V0LnRpbGluZ1Bvc3RMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgbGF5b3V0LmlzTGF5b3V0RmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBzZWxmLm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhnZXRQb3NpdGlvbnMpO1xuXG4gICAgICBhZnRlclJlcG9zaXRpb24oKTtcblxuICAgICAgLy8gdHJpZ2dlciBsYXlvdXRzdG9wIHdoZW4gdGhlIGxheW91dCBzdG9wcyAoZS5nLiBmaW5pc2hlcylcbiAgICAgIHNlbGYuY3kub25lKCdsYXlvdXRzdG9wJywgc2VsZi5vcHRpb25zLnN0b3ApO1xuICAgICAgc2VsZi5jeS50cmlnZ2VyKHsgdHlwZTogJ2xheW91dHN0b3AnLCBsYXlvdXQ6IHNlbGYgfSk7XG5cbiAgICAgIGlmIChmcmFtZUlkKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgICAgfVxuXG4gICAgICByZWFkeSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmltYXRpb25EYXRhID0gc2VsZi5sYXlvdXQuZ2V0UG9zaXRpb25zRGF0YSgpOyAvLyBHZXQgcG9zaXRpb25zIG9mIGxheW91dCBub2RlcyBub3RlIHRoYXQgYWxsIG5vZGVzIG1heSBub3QgYmUgbGF5b3V0IG5vZGVzIGJlY2F1c2Ugb2YgdGlsaW5nXG5cbiAgICAvLyBQb3NpdGlvbiBub2RlcywgZm9yIHRoZSBub2RlcyB3aG9zZSBpZCBkb2VzIG5vdCBpbmNsdWRlZCBpbiBkYXRhIChiZWNhdXNlIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGVpciBwYXJlbnRzIGFuZCBpbmNsdWRlZCBpbiBkdW1teSBjb21wb3VuZHMpXG4gICAgLy8gdXNlIHBvc2l0aW9uIG9mIHRoZWlyIGFuY2VzdG9ycyBvciBkdW1teSBhbmNlc3RvcnNcbiAgICBvcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24gKGVsZSwgaSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZWxlID0gaTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGVsZSBpcyBhIGNvbXBvdW5kIG5vZGUsIHRoZW4gaXRzIHBvc2l0aW9uIHdpbGwgYmUgZGVmaW5lZCBieSBpdHMgY2hpbGRyZW5cbiAgICAgIGlmICghZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgdmFyIHRoZUlkID0gZWxlLmlkKCk7XG4gICAgICAgIHZhciBwTm9kZSA9IGFuaW1hdGlvbkRhdGFbdGhlSWRdO1xuICAgICAgICB2YXIgdGVtcCA9IGVsZTtcbiAgICAgICAgLy8gSWYgcE5vZGUgaXMgdW5kZWZpbmVkIHNlYXJjaCB1bnRpbCBmaW5kaW5nIHBvc2l0aW9uIGRhdGEgb2YgaXRzIGZpcnN0IGFuY2VzdG9yIChJdCBtYXkgYmUgZHVtbXkgYXMgd2VsbClcbiAgICAgICAgd2hpbGUgKHBOb2RlID09IG51bGwpIHtcbiAgICAgICAgICBwTm9kZSA9IGFuaW1hdGlvbkRhdGFbdGVtcC5kYXRhKCdwYXJlbnQnKV0gfHwgYW5pbWF0aW9uRGF0YVsnRHVtbXlDb21wb3VuZF8nICsgdGVtcC5kYXRhKCdwYXJlbnQnKV07XG4gICAgICAgICAgYW5pbWF0aW9uRGF0YVt0aGVJZF0gPSBwTm9kZTtcbiAgICAgICAgICB0ZW1wID0gdGVtcC5wYXJlbnQoKVswXTtcbiAgICAgICAgICBpZiAodGVtcCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocE5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwTm9kZS54LFxuICAgICAgICAgICAgeTogcE5vZGUueVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGVsZS5wb3NpdGlvbigneCcpLFxuICAgICAgICAgICAgeTogZWxlLnBvc2l0aW9uKCd5JylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhZnRlclJlcG9zaXRpb24oKTtcblxuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaXRlcmF0ZUFuaW1hdGVkKTtcbiAgfTtcblxuICAvKlxuICAqIExpc3RlbiAnbGF5b3V0c3RhcnRlZCcgZXZlbnQgYW5kIHN0YXJ0IGFuaW1hdGVkIGl0ZXJhdGlvbiBpZiBhbmltYXRlIG9wdGlvbiBpcyAnZHVyaW5nJ1xuICAqL1xuICBsYXlvdXQuYWRkTGlzdGVuZXIoJ2xheW91dHN0YXJ0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGYub3B0aW9ucy5hbmltYXRlID09PSAnZHVyaW5nJykge1xuICAgICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShpdGVyYXRlQW5pbWF0ZWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGF5b3V0LnJ1bkxheW91dCgpOyAvLyBSdW4gY29zZSBsYXlvdXRcblxuICAvKlxuICAgKiBJZiBhbmltYXRlIG9wdGlvbiBpcyBub3QgJ2R1cmluZycgKCdlbmQnIG9yIGZhbHNlKSBwZXJmb3JtIHRoZXNlIGhlcmUgKElmIGl0IGlzICdkdXJpbmcnIHNpbWlsYXIgdGhpbmdzIGFyZSBhbHJlYWR5IHBlcmZvcm1lZClcbiAgICovXG4gIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0ZSAhPT0gXCJkdXJpbmdcIikge1xuICAgIHNlbGYub3B0aW9ucy5lbGVzLm5vZGVzKCkubm90KFwiOnBhcmVudFwiKS5sYXlvdXRQb3NpdGlvbnMoc2VsZiwgc2VsZi5vcHRpb25zLCBnZXRQb3NpdGlvbnMpOyAvLyBVc2UgbGF5b3V0IHBvc2l0aW9ucyB0byByZXBvc2l0aW9uIHRoZSBub2RlcyBpdCBjb25zaWRlcnMgdGhlIG9wdGlvbnMgcGFyYW1ldGVyXG4gICAgcmVhZHkgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy9HZXQgdGhlIHRvcCBtb3N0IG9uZXMgb2YgYSBsaXN0IG9mIG5vZGVzXG5fQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBub2Rlc01hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZXNNYXBbbm9kZXNbaV0uaWQoKV0gPSB0cnVlO1xuICB9XG4gIHZhciByb290cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGVsZSA9IGk7XG4gICAgfVxuICAgIHZhciBwYXJlbnQgPSBlbGUucGFyZW50KClbMF07XG4gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICBpZiAobm9kZXNNYXBbcGFyZW50LmlkKCldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiByb290cztcbn07XG5cbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0ID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGRyZW4sIGxheW91dCkge1xuICB2YXIgc2l6ZSA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICB2YXIgdGhlQ2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgY2hpbGRyZW5fb2ZfY2hpbGRyZW4gPSB0aGVDaGlsZC5jaGlsZHJlbigpO1xuICAgIHZhciB0aGVOb2RlO1xuXG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGVDaGlsZC5sYXlvdXREaW1lbnNpb25zKHtcbiAgICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc1xuICAgIH0pO1xuXG4gICAgaWYgKHRoZUNoaWxkLm91dGVyV2lkdGgoKSAhPSBudWxsICYmIHRoZUNoaWxkLm91dGVySGVpZ2h0KCkgIT0gbnVsbCkge1xuICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQodGhlQ2hpbGQucG9zaXRpb24oJ3gnKSAtIGRpbWVuc2lvbnMudyAvIDIsIHRoZUNoaWxkLnBvc2l0aW9uKCd5JykgLSBkaW1lbnNpb25zLmggLyAyKSwgbmV3IERpbWVuc2lvbkQocGFyc2VGbG9hdChkaW1lbnNpb25zLncpLCBwYXJzZUZsb2F0KGRpbWVuc2lvbnMuaCkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZU5vZGUgPSBwYXJlbnQuYWRkKG5ldyBDb1NFTm9kZSh0aGlzLmdyYXBoTWFuYWdlcikpO1xuICAgIH1cbiAgICAvLyBBdHRhY2ggaWQgdG8gdGhlIGxheW91dCBub2RlXG4gICAgdGhlTm9kZS5pZCA9IHRoZUNoaWxkLmRhdGEoXCJpZFwiKTtcbiAgICAvLyBBdHRhY2ggdGhlIHBhZGRpbmdzIG9mIGN5IG5vZGUgdG8gbGF5b3V0IG5vZGVcbiAgICB0aGVOb2RlLnBhZGRpbmdMZWZ0ID0gcGFyc2VJbnQodGhlQ2hpbGQuY3NzKCdwYWRkaW5nJykpO1xuICAgIHRoZU5vZGUucGFkZGluZ1RvcCA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcbiAgICB0aGVOb2RlLnBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcbiAgICB0aGVOb2RlLnBhZGRpbmdCb3R0b20gPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG5cbiAgICAvL0F0dGFjaCB0aGUgbGFiZWwgcHJvcGVydGllcyB0byBjb21wb3VuZCBpZiBsYWJlbHMgd2lsbCBiZSBpbmNsdWRlZCBpbiBub2RlIGRpbWVuc2lvbnMgIFxuICAgIGlmICh0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKSB7XG4gICAgICBpZiAodGhlQ2hpbGQuaXNQYXJlbnQoKSkge1xuICAgICAgICB2YXIgbGFiZWxXaWR0aCA9IHRoZUNoaWxkLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSB9KS53O1xuICAgICAgICB2YXIgbGFiZWxIZWlnaHQgPSB0aGVDaGlsZC5ib3VuZGluZ0JveCh7IGluY2x1ZGVMYWJlbHM6IHRydWUsIGluY2x1ZGVOb2RlczogZmFsc2UgfSkuaDtcbiAgICAgICAgdmFyIGxhYmVsUG9zID0gdGhlQ2hpbGQuY3NzKFwidGV4dC1oYWxpZ25cIik7XG4gICAgICAgIHRoZU5vZGUubGFiZWxXaWR0aCA9IGxhYmVsV2lkdGg7XG4gICAgICAgIHRoZU5vZGUubGFiZWxIZWlnaHQgPSBsYWJlbEhlaWdodDtcbiAgICAgICAgdGhlTm9kZS5sYWJlbFBvcyA9IGxhYmVsUG9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcCB0aGUgbGF5b3V0IG5vZGVcbiAgICB0aGlzLmlkVG9MTm9kZVt0aGVDaGlsZC5kYXRhKFwiaWRcIildID0gdGhlTm9kZTtcblxuICAgIGlmIChpc05hTih0aGVOb2RlLnJlY3QueCkpIHtcbiAgICAgIHRoZU5vZGUucmVjdC54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4odGhlTm9kZS5yZWN0LnkpKSB7XG4gICAgICB0aGVOb2RlLnJlY3QueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuX29mX2NoaWxkcmVuICE9IG51bGwgJiYgY2hpbGRyZW5fb2ZfY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRoZU5ld0dyYXBoO1xuICAgICAgdGhlTmV3R3JhcGggPSBsYXlvdXQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGxheW91dC5uZXdHcmFwaCgpLCB0aGVOb2RlKTtcbiAgICAgIHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGVOZXdHcmFwaCwgY2hpbGRyZW5fb2ZfY2hpbGRyZW4sIGxheW91dCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IGNhbGxlZCBvbiBjb250aW51b3VzIGxheW91dHMgdG8gc3RvcCB0aGVtIGJlZm9yZSB0aGV5IGZpbmlzaFxuICovXG5fQ29TRUxheW91dC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciByZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKGN5dG9zY2FwZSkge1xuICAvLyAgdmFyIExheW91dCA9IGdldExheW91dCggY3l0b3NjYXBlICk7XG5cbiAgY3l0b3NjYXBlKCdsYXlvdXQnLCAnY29zZS1iaWxrZW50JywgX0NvU0VMYXlvdXQpO1xufTtcblxuLy8gYXV0byByZWcgZm9yIGdsb2JhbHNcbmlmICh0eXBlb2YgY3l0b3NjYXBlICE9PSAndW5kZWZpbmVkJykge1xuICByZWdpc3RlcihjeXRvc2NhcGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js\n"); /***/ }), /***/ "../../../node_modules/cytoscape/dist/cytoscape.umd.js": /*!*************************************************************!*\ !*** ../../../node_modules/cytoscape/dist/cytoscape.umd.js ***! \*************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("/**\n * Copyright (c) 2016-2023, The Cytoscape Consortium.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the “Software”), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is furnished to do\n * so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _defineProperty$1(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef\n\n var navigator = _window ? _window.navigator : null;\n _window ? _window.document : null;\n\n var typeofstr = _typeof('');\n\n var typeofobj = _typeof({});\n\n var typeoffn = _typeof(function () {});\n\n var typeofhtmlele = typeof HTMLElement === \"undefined\" ? \"undefined\" : _typeof(HTMLElement);\n\n var instanceStr = function instanceStr(obj) {\n return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null;\n };\n\n var string = function string(obj) {\n return obj != null && _typeof(obj) == typeofstr;\n };\n var fn$6 = function fn(obj) {\n return obj != null && _typeof(obj) === typeoffn;\n };\n var array = function array(obj) {\n return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array);\n };\n var plainObject = function plainObject(obj) {\n return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object;\n };\n var object = function object(obj) {\n return obj != null && _typeof(obj) === typeofobj;\n };\n var number$1 = function number(obj) {\n return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj);\n };\n var integer = function integer(obj) {\n return number$1(obj) && Math.floor(obj) === obj;\n };\n var htmlElement = function htmlElement(obj) {\n if ('undefined' === typeofhtmlele) {\n return undefined;\n } else {\n return null != obj && obj instanceof HTMLElement;\n }\n };\n var elementOrCollection = function elementOrCollection(obj) {\n return element(obj) || collection(obj);\n };\n var element = function element(obj) {\n return instanceStr(obj) === 'collection' && obj._private.single;\n };\n var collection = function collection(obj) {\n return instanceStr(obj) === 'collection' && !obj._private.single;\n };\n var core = function core(obj) {\n return instanceStr(obj) === 'core';\n };\n var stylesheet = function stylesheet(obj) {\n return instanceStr(obj) === 'stylesheet';\n };\n var event = function event(obj) {\n return instanceStr(obj) === 'event';\n };\n var emptyString = function emptyString(obj) {\n if (obj === undefined || obj === null) {\n // null is empty\n return true;\n } else if (obj === '' || obj.match(/^\\s+$/)) {\n return true; // empty string is empty\n }\n\n return false; // otherwise, we don't know what we've got\n };\n var domElement = function domElement(obj) {\n if (typeof HTMLElement === 'undefined') {\n return false; // we're not in a browser so it doesn't matter\n } else {\n return obj instanceof HTMLElement;\n }\n };\n var boundingBox = function boundingBox(obj) {\n return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2);\n };\n var promise = function promise(obj) {\n return object(obj) && fn$6(obj.then);\n };\n var ms = function ms() {\n return navigator && navigator.userAgent.match(/msie|trident|edge/i);\n }; // probably a better way to detect this...\n\n var memoize$1 = function memoize(fn, keyFn) {\n if (!keyFn) {\n keyFn = function keyFn() {\n if (arguments.length === 1) {\n return arguments[0];\n } else if (arguments.length === 0) {\n return 'undefined';\n }\n\n var args = [];\n\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n return args.join('$');\n };\n }\n\n var memoizedFn = function memoizedFn() {\n var self = this;\n var args = arguments;\n var ret;\n var k = keyFn.apply(self, args);\n var cache = memoizedFn.cache;\n\n if (!(ret = cache[k])) {\n ret = cache[k] = fn.apply(self, args);\n }\n\n return ret;\n };\n\n memoizedFn.cache = {};\n return memoizedFn;\n };\n\n var camel2dash = memoize$1(function (str) {\n return str.replace(/([A-Z])/g, function (v) {\n return '-' + v.toLowerCase();\n });\n });\n var dash2camel = memoize$1(function (str) {\n return str.replace(/(-\\w)/g, function (v) {\n return v[1].toUpperCase();\n });\n });\n var prependCamel = memoize$1(function (prefix, str) {\n return prefix + str[0].toUpperCase() + str.substring(1);\n }, function (prefix, str) {\n return prefix + '$' + str;\n });\n var capitalize = function capitalize(str) {\n if (emptyString(str)) {\n return str;\n }\n\n return str.charAt(0).toUpperCase() + str.substring(1);\n };\n\n var number = '(?:[-+]?(?:(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[Ee][+-]?\\\\d+)?))';\n var rgba = 'rgb[a]?\\\\((' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\n var rgbaNoBackRefs = 'rgb[a]?\\\\((?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\n var hsla = 'hsl[a]?\\\\((' + number + ')\\\\s*,\\\\s*(' + number + '[%])\\\\s*,\\\\s*(' + number + '[%])(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\n var hslaNoBackRefs = 'hsl[a]?\\\\((?:' + number + ')\\\\s*,\\\\s*(?:' + number + '[%])\\\\s*,\\\\s*(?:' + number + '[%])(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\n var hex3 = '\\\\#[0-9a-fA-F]{3}';\n var hex6 = '\\\\#[0-9a-fA-F]{6}';\n\n var ascending = function ascending(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n };\n var descending = function descending(a, b) {\n return -1 * ascending(a, b);\n };\n\n var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n var args = arguments;\n\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n\n if (obj == null) {\n continue;\n }\n\n var keys = Object.keys(obj);\n\n for (var j = 0; j < keys.length; j++) {\n var k = keys[j];\n tgt[k] = obj[k];\n }\n }\n\n return tgt;\n };\n\n var hex2tuple = function hex2tuple(hex) {\n if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') {\n return;\n }\n\n var shortHex = hex.length === 4;\n var r, g, b;\n var base = 16;\n\n if (shortHex) {\n r = parseInt(hex[1] + hex[1], base);\n g = parseInt(hex[2] + hex[2], base);\n b = parseInt(hex[3] + hex[3], base);\n } else {\n r = parseInt(hex[1] + hex[2], base);\n g = parseInt(hex[3] + hex[4], base);\n b = parseInt(hex[5] + hex[6], base);\n }\n\n return [r, g, b];\n }; // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0)\n\n var hsl2tuple = function hsl2tuple(hsl) {\n var ret;\n var h, s, l, a, r, g, b;\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n var m = new RegExp('^' + hsla + '$').exec(hsl);\n\n if (m) {\n // get hue\n h = parseInt(m[1]);\n\n if (h < 0) {\n h = (360 - -1 * h % 360) % 360;\n } else if (h > 360) {\n h = h % 360;\n }\n\n h /= 360; // normalise on [0, 1]\n\n s = parseFloat(m[2]);\n\n if (s < 0 || s > 100) {\n return;\n } // saturation is [0, 100]\n\n\n s = s / 100; // normalise on [0, 1]\n\n l = parseFloat(m[3]);\n\n if (l < 0 || l > 100) {\n return;\n } // lightness is [0, 100]\n\n\n l = l / 100; // normalise on [0, 1]\n\n a = m[4];\n\n if (a !== undefined) {\n a = parseFloat(a);\n\n if (a < 0 || a > 1) {\n return;\n } // alpha is [0, 1]\n\n } // now, convert to rgb\n // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n\n\n if (s === 0) {\n r = g = b = Math.round(l * 255); // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = Math.round(255 * hue2rgb(p, q, h + 1 / 3));\n g = Math.round(255 * hue2rgb(p, q, h));\n b = Math.round(255 * hue2rgb(p, q, h - 1 / 3));\n }\n\n ret = [r, g, b, a];\n }\n\n return ret;\n }; // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0)\n\n var rgb2tuple = function rgb2tuple(rgb) {\n var ret;\n var m = new RegExp('^' + rgba + '$').exec(rgb);\n\n if (m) {\n ret = [];\n var isPct = [];\n\n for (var i = 1; i <= 3; i++) {\n var channel = m[i];\n\n if (channel[channel.length - 1] === '%') {\n isPct[i] = true;\n }\n\n channel = parseFloat(channel);\n\n if (isPct[i]) {\n channel = channel / 100 * 255; // normalise to [0, 255]\n }\n\n if (channel < 0 || channel > 255) {\n return;\n } // invalid channel value\n\n\n ret.push(Math.floor(channel));\n }\n\n var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3];\n var allArePct = isPct[1] && isPct[2] && isPct[3];\n\n if (atLeastOneIsPct && !allArePct) {\n return;\n } // must all be percent values if one is\n\n\n var alpha = m[4];\n\n if (alpha !== undefined) {\n alpha = parseFloat(alpha);\n\n if (alpha < 0 || alpha > 1) {\n return;\n } // invalid alpha value\n\n\n ret.push(alpha);\n }\n }\n\n return ret;\n };\n var colorname2tuple = function colorname2tuple(color) {\n return colors[color.toLowerCase()];\n };\n var color2tuple = function color2tuple(color) {\n return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color);\n };\n var colors = {\n // special colour names\n transparent: [0, 0, 0, 0],\n // NB alpha === 0\n // regular colours\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n };\n\n var setMap = function setMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n\n if (plainObject(key)) {\n throw Error('Tried to set map with object key');\n }\n\n if (i < keys.length - 1) {\n // extend the map if necessary\n if (obj[key] == null) {\n obj[key] = {};\n }\n\n obj = obj[key];\n } else {\n // set the value\n obj[key] = options.value;\n }\n }\n }; // gets the value in a map even if it's not built in places\n\n var getMap = function getMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n\n if (plainObject(key)) {\n throw Error('Tried to get map with object key');\n }\n\n obj = obj[key];\n\n if (obj == null) {\n return obj;\n }\n }\n\n return obj;\n }; // deletes the entry in the map\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n var isObject_1 = isObject;\n\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n var _freeGlobal = freeGlobal;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = _freeGlobal || freeSelf || Function('return this')();\n\n var _root = root;\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = function() {\n return _root.Date.now();\n };\n\n var now_1 = now;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n var _trimmedEndIndex = trimmedEndIndex;\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n var _baseTrim = baseTrim;\n\n /** Built-in value references. */\n var Symbol$1 = _root.Symbol;\n\n var _Symbol = Symbol$1;\n\n /** Used for built-in method references. */\n var objectProto$5 = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$4 = objectProto$5.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString$1 = objectProto$5.toString;\n\n /** Built-in value references. */\n var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty$4.call(value, symToStringTag$1),\n tag = value[symToStringTag$1];\n\n try {\n value[symToStringTag$1] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n }\n\n var _getRawTag = getRawTag;\n\n /** Used for built-in method references. */\n var objectProto$4 = Object.prototype;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto$4.toString;\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n var _objectToString = objectToString;\n\n /** `Object#toString` result references. */\n var nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n /** Built-in value references. */\n var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? _getRawTag(value)\n : _objectToString(value);\n }\n\n var _baseGetTag = baseGetTag;\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n var isObjectLike_1 = isObjectLike;\n\n /** `Object#toString` result references. */\n var symbolTag = '[object Symbol]';\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike_1(value) && _baseGetTag(value) == symbolTag);\n }\n\n var isSymbol_1 = isSymbol;\n\n /** Used as references for various `Number` constants. */\n var NAN = 0 / 0;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseInt = parseInt;\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol_1(value)) {\n return NAN;\n }\n if (isObject_1(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject_1(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = _baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n var toNumber_1 = toNumber;\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT$1 = 'Expected a function';\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max,\n nativeMin = Math.min;\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT$1);\n }\n wait = toNumber_1(wait) || 0;\n if (isObject_1(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now_1();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now_1());\n }\n\n function debounced() {\n var time = now_1(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n var debounce_1 = debounce;\n\n var performance = _window ? _window.performance : null;\n var pnow = performance && performance.now ? function () {\n return performance.now();\n } : function () {\n return Date.now();\n };\n\n var raf = function () {\n if (_window) {\n if (_window.requestAnimationFrame) {\n return function (fn) {\n _window.requestAnimationFrame(fn);\n };\n } else if (_window.mozRequestAnimationFrame) {\n return function (fn) {\n _window.mozRequestAnimationFrame(fn);\n };\n } else if (_window.webkitRequestAnimationFrame) {\n return function (fn) {\n _window.webkitRequestAnimationFrame(fn);\n };\n } else if (_window.msRequestAnimationFrame) {\n return function (fn) {\n _window.msRequestAnimationFrame(fn);\n };\n }\n }\n\n return function (fn) {\n if (fn) {\n setTimeout(function () {\n fn(pnow());\n }, 1000 / 60);\n }\n };\n }();\n\n var requestAnimationFrame = function requestAnimationFrame(fn) {\n return raf(fn);\n };\n var performanceNow = pnow;\n\n var DEFAULT_HASH_SEED = 9261;\n var K = 65599; // 37 also works pretty well\n\n var DEFAULT_HASH_SEED_ALT = 5381;\n var hashIterableInts = function hashIterableInts(iterator) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n var hash = seed;\n var entry;\n\n for (;;) {\n entry = iterator.next();\n\n if (entry.done) {\n break;\n }\n\n hash = hash * K + entry.value | 0;\n }\n\n return hash;\n };\n var hashInt = function hashInt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n return seed * K + num | 0;\n };\n var hashIntAlt = function hashIntAlt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT;\n // djb2/string-hash\n return (seed << 5) + seed + num | 0;\n };\n var combineHashes = function combineHashes(hash1, hash2) {\n return hash1 * 0x200000 + hash2;\n };\n var combineHashesArray = function combineHashesArray(hashes) {\n return hashes[0] * 0x200000 + hashes[1];\n };\n var hashArrays = function hashArrays(hashes1, hashes2) {\n return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])];\n };\n var hashIntsArray = function hashIntsArray(ints, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = ints.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = ints[i++];\n } else {\n entry.done = true;\n }\n\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n };\n var hashString = function hashString(str, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = str.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = str.charCodeAt(i++);\n } else {\n entry.done = true;\n }\n\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n };\n var hashStrings = function hashStrings() {\n return hashStringsArray(arguments);\n };\n var hashStringsArray = function hashStringsArray(strs) {\n var hash;\n\n for (var i = 0; i < strs.length; i++) {\n var str = strs[i];\n\n if (i === 0) {\n hash = hashString(str);\n } else {\n hash = hashString(str, hash);\n }\n }\n\n return hash;\n };\n\n /*global console */\n var warningsEnabled = true;\n var warnSupported = console.warn != null; // eslint-disable-line no-console\n\n var traceSupported = console.trace != null; // eslint-disable-line no-console\n\n var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;\n var trueify = function trueify() {\n return true;\n };\n var falsify = function falsify() {\n return false;\n };\n var zeroify = function zeroify() {\n return 0;\n };\n var noop$1 = function noop() {};\n var error = function error(msg) {\n throw new Error(msg);\n };\n var warnings = function warnings(enabled) {\n if (enabled !== undefined) {\n warningsEnabled = !!enabled;\n } else {\n return warningsEnabled;\n }\n };\n var warn = function warn(msg) {\n /* eslint-disable no-console */\n if (!warnings()) {\n return;\n }\n\n if (warnSupported) {\n console.warn(msg);\n } else {\n console.log(msg);\n\n if (traceSupported) {\n console.trace();\n }\n }\n };\n /* eslint-enable */\n\n var clone = function clone(obj) {\n return extend({}, obj);\n }; // gets a shallow copy of the argument\n\n var copy = function copy(obj) {\n if (obj == null) {\n return obj;\n }\n\n if (array(obj)) {\n return obj.slice();\n } else if (plainObject(obj)) {\n return clone(obj);\n } else {\n return obj;\n }\n };\n var copyArray$1 = function copyArray(arr) {\n return arr.slice();\n };\n var uuid = function uuid(a, b\n /* placeholders */\n ) {\n for ( // loop :)\n b = a = ''; // b - result , a - numeric letiable\n a++ < 36; //\n b += a * 51 & 52 // if \"a\" is not 9 or 14 or 19 or 24\n ? // return a random number or 4\n (a ^ 15 // if \"a\" is not 15\n ? // generate a random number from 0 to 15\n 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless \"a\" is 20, in which case a random number from 8 to 11\n : 4 // otherwise 4\n ).toString(16) : '-' // in other cases (if \"a\" is 9,14,19,24) insert \"-\"\n ) {\n }\n\n return b;\n };\n var _staticEmptyObject = {};\n var staticEmptyObject = function staticEmptyObject() {\n return _staticEmptyObject;\n };\n var defaults$g = function defaults(_defaults) {\n var keys = Object.keys(_defaults);\n return function (opts) {\n var filledOpts = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var optVal = opts == null ? undefined : opts[key];\n filledOpts[key] = optVal === undefined ? _defaults[key] : optVal;\n }\n\n return filledOpts;\n };\n };\n var removeFromArray = function removeFromArray(arr, ele, oneCopy) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (arr[i] === ele) {\n arr.splice(i, 1);\n\n if (oneCopy) {\n break;\n }\n }\n }\n };\n var clearArray = function clearArray(arr) {\n arr.splice(0, arr.length);\n };\n var push = function push(arr, otherArr) {\n for (var i = 0; i < otherArr.length; i++) {\n var el = otherArr[i];\n arr.push(el);\n }\n };\n var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n\n return obj[propName];\n };\n var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n\n obj[propName] = value;\n };\n\n /* global Map */\n var ObjectMap = /*#__PURE__*/function () {\n function ObjectMap() {\n _classCallCheck(this, ObjectMap);\n\n this._obj = {};\n }\n\n _createClass(ObjectMap, [{\n key: \"set\",\n value: function set(key, val) {\n this._obj[key] = val;\n return this;\n }\n }, {\n key: \"delete\",\n value: function _delete(key) {\n this._obj[key] = undefined;\n return this;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = {};\n }\n }, {\n key: \"has\",\n value: function has(key) {\n return this._obj[key] !== undefined;\n }\n }, {\n key: \"get\",\n value: function get(key) {\n return this._obj[key];\n }\n }]);\n\n return ObjectMap;\n }();\n\n var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap;\n\n /* global Set */\n var undef = \"undefined\" ;\n\n var ObjectSet = /*#__PURE__*/function () {\n function ObjectSet(arrayOrObjectSet) {\n _classCallCheck(this, ObjectSet);\n\n this._obj = Object.create(null);\n this.size = 0;\n\n if (arrayOrObjectSet != null) {\n var arr;\n\n if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) {\n arr = arrayOrObjectSet.toArray();\n } else {\n arr = arrayOrObjectSet;\n }\n\n for (var i = 0; i < arr.length; i++) {\n this.add(arr[i]);\n }\n }\n }\n\n _createClass(ObjectSet, [{\n key: \"instanceString\",\n value: function instanceString() {\n return 'set';\n }\n }, {\n key: \"add\",\n value: function add(val) {\n var o = this._obj;\n\n if (o[val] !== 1) {\n o[val] = 1;\n this.size++;\n }\n }\n }, {\n key: \"delete\",\n value: function _delete(val) {\n var o = this._obj;\n\n if (o[val] === 1) {\n o[val] = 0;\n this.size--;\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = Object.create(null);\n }\n }, {\n key: \"has\",\n value: function has(val) {\n return this._obj[val] === 1;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n var _this = this;\n\n return Object.keys(this._obj).filter(function (key) {\n return _this.has(key);\n });\n }\n }, {\n key: \"forEach\",\n value: function forEach(callback, thisArg) {\n return this.toArray().forEach(callback, thisArg);\n }\n }]);\n\n return ObjectSet;\n }();\n\n var Set$1 = (typeof Set === \"undefined\" ? \"undefined\" : _typeof(Set)) !== undef ? Set : ObjectSet;\n\n var Element = function Element(cy, params) {\n var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (cy === undefined || params === undefined || !core(cy)) {\n error('An element must have a core reference and parameters set');\n return;\n }\n\n var group = params.group; // try to automatically infer the group if unspecified\n\n if (group == null) {\n if (params.data && params.data.source != null && params.data.target != null) {\n group = 'edges';\n } else {\n group = 'nodes';\n }\n } // validate group\n\n\n if (group !== 'nodes' && group !== 'edges') {\n error('An element must be of type `nodes` or `edges`; you specified `' + group + '`');\n return;\n } // make the element array-like, just like a collection\n\n\n this.length = 1;\n this[0] = this; // NOTE: when something is added here, add also to ele.json()\n\n var _p = this._private = {\n cy: cy,\n single: true,\n // indicates this is an element\n data: params.data || {},\n // data object\n position: params.position || {\n x: 0,\n y: 0\n },\n // (x, y) position pair\n autoWidth: undefined,\n // width and height of nodes calculated by the renderer when set to special 'auto' value\n autoHeight: undefined,\n autoPadding: undefined,\n compoundBoundsClean: false,\n // whether the compound dimensions need to be recalculated the next time dimensions are read\n listeners: [],\n // array of bound listeners\n group: group,\n // string; 'nodes' or 'edges'\n style: {},\n // properties as set by the style\n rstyle: {},\n // properties for style sent from the renderer to the core\n styleCxts: [],\n // applied style contexts from the styler\n styleKeys: {},\n // per-group keys of style property values\n removed: true,\n // whether it's inside the vis; true if removed (set true here since we call restore)\n selected: params.selected ? true : false,\n // whether it's selected\n selectable: params.selectable === undefined ? true : params.selectable ? true : false,\n // whether it's selectable\n locked: params.locked ? true : false,\n // whether the element is locked (cannot be moved)\n grabbed: false,\n // whether the element is grabbed by the mouse; renderer sets this privately\n grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false,\n // whether the element can be grabbed\n pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false,\n // whether the element has passthrough panning enabled\n active: false,\n // whether the element is active from user interaction\n classes: new Set$1(),\n // map ( className => true )\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n rscratch: {},\n // object in which the renderer can store information\n scratch: params.scratch || {},\n // scratch objects\n edges: [],\n // array of connected edges\n children: [],\n // array of children\n parent: params.parent && params.parent.isNode() ? params.parent : null,\n // parent ref\n traversalCache: {},\n // cache of output of traversal functions\n backgrounding: false,\n // whether background images are loading\n bbCache: null,\n // cache of the current bounding box\n bbCacheShift: {\n x: 0,\n y: 0\n },\n // shift applied to cached bb to be applied on next get\n bodyBounds: null,\n // bounds cache of element body, w/o overlay\n overlayBounds: null,\n // bounds cache of element body, including overlay\n labelBounds: {\n // bounds cache of labels\n all: null,\n source: null,\n target: null,\n main: null\n },\n arrowBounds: {\n // bounds cache of edge arrows\n source: null,\n target: null,\n 'mid-source': null,\n 'mid-target': null\n }\n };\n\n if (_p.position.x == null) {\n _p.position.x = 0;\n }\n\n if (_p.position.y == null) {\n _p.position.y = 0;\n } // renderedPosition overrides if specified\n\n\n if (params.renderedPosition) {\n var rpos = params.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n _p.position = {\n x: (rpos.x - pan.x) / zoom,\n y: (rpos.y - pan.y) / zoom\n };\n }\n\n var classes = [];\n\n if (array(params.classes)) {\n classes = params.classes;\n } else if (string(params.classes)) {\n classes = params.classes.split(/\\s+/);\n }\n\n for (var i = 0, l = classes.length; i < l; i++) {\n var cls = classes[i];\n\n if (!cls || cls === '') {\n continue;\n }\n\n _p.classes.add(cls);\n }\n\n this.createEmitter();\n var bypass = params.style || params.css;\n\n if (bypass) {\n warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.');\n this.style(bypass);\n }\n\n if (restore === undefined || restore) {\n this.restore();\n }\n };\n\n var defineSearch = function defineSearch(params) {\n params = {\n bfs: params.bfs || !params.dfs,\n dfs: params.dfs || !params.bfs\n }; // from pseudocode on wikipedia\n\n return function searchFn(roots, fn, directed) {\n var options;\n\n if (plainObject(roots) && !elementOrCollection(roots)) {\n options = roots;\n roots = options.roots || options.root;\n fn = options.visit;\n directed = options.directed;\n }\n\n directed = arguments.length === 2 && !fn$6(fn) ? fn : directed;\n fn = fn$6(fn) ? fn : function () {};\n var cy = this._private.cy;\n var v = roots = string(roots) ? this.filter(roots) : roots;\n var Q = [];\n var connectedNodes = [];\n var connectedBy = {};\n var id2depth = {};\n var V = {};\n var j = 0;\n var found;\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges; // enqueue v\n\n\n for (var i = 0; i < v.length; i++) {\n var vi = v[i];\n var viId = vi.id();\n\n if (vi.isNode()) {\n Q.unshift(vi);\n\n if (params.bfs) {\n V[viId] = true;\n connectedNodes.push(vi);\n }\n\n id2depth[viId] = 0;\n }\n }\n\n var _loop = function _loop() {\n var v = params.bfs ? Q.shift() : Q.pop();\n var vId = v.id();\n\n if (params.dfs) {\n if (V[vId]) {\n return \"continue\";\n }\n\n V[vId] = true;\n connectedNodes.push(v);\n }\n\n var depth = id2depth[vId];\n var prevEdge = connectedBy[vId];\n var src = prevEdge != null ? prevEdge.source() : null;\n var tgt = prevEdge != null ? prevEdge.target() : null;\n var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0];\n var ret = void 0;\n ret = fn(v, prevEdge, prevNode, j++, depth);\n\n if (ret === true) {\n found = v;\n return \"break\";\n }\n\n if (ret === false) {\n return \"break\";\n }\n\n var vwEdges = v.connectedEdges().filter(function (e) {\n return (!directed || e.source().same(v)) && edges.has(e);\n });\n\n for (var _i2 = 0; _i2 < vwEdges.length; _i2++) {\n var e = vwEdges[_i2];\n var w = e.connectedNodes().filter(function (n) {\n return !n.same(v) && nodes.has(n);\n });\n var wId = w.id();\n\n if (w.length !== 0 && !V[wId]) {\n w = w[0];\n Q.push(w);\n\n if (params.bfs) {\n V[wId] = true;\n connectedNodes.push(w);\n }\n\n connectedBy[wId] = e;\n id2depth[wId] = id2depth[vId] + 1;\n }\n }\n };\n\n while (Q.length !== 0) {\n var _ret = _loop();\n\n if (_ret === \"continue\") continue;\n if (_ret === \"break\") break;\n }\n\n var connectedEles = cy.collection();\n\n for (var _i = 0; _i < connectedNodes.length; _i++) {\n var node = connectedNodes[_i];\n var edge = connectedBy[node.id()];\n\n if (edge != null) {\n connectedEles.push(edge);\n }\n\n connectedEles.push(node);\n }\n\n return {\n path: cy.collection(connectedEles),\n found: cy.collection(found)\n };\n };\n }; // search, spanning trees, etc\n\n\n var elesfn$v = {\n breadthFirstSearch: defineSearch({\n bfs: true\n }),\n depthFirstSearch: defineSearch({\n dfs: true\n })\n }; // nice, short mathematical alias\n\n elesfn$v.bfs = elesfn$v.breadthFirstSearch;\n elesfn$v.dfs = elesfn$v.depthFirstSearch;\n\n var heap$1 = createCommonjsModule(function (module, exports) {\n // Generated by CoffeeScript 1.8.0\n (function() {\n var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n floor = Math.floor, min = Math.min;\n\n\n /*\n Default comparison function to be used\n */\n\n defaultCmp = function(x, y) {\n if (x < y) {\n return -1;\n }\n if (x > y) {\n return 1;\n }\n return 0;\n };\n\n\n /*\n Insert item x in list a, and keep it sorted assuming a is sorted.\n \n If x is already in a, insert it to the right of the rightmost x.\n \n Optional args lo (default 0) and hi (default a.length) bound the slice\n of a to be searched.\n */\n\n insort = function(a, x, lo, hi, cmp) {\n var mid;\n if (lo == null) {\n lo = 0;\n }\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (lo < 0) {\n throw new Error('lo must be non-negative');\n }\n if (hi == null) {\n hi = a.length;\n }\n while (lo < hi) {\n mid = floor((lo + hi) / 2);\n if (cmp(x, a[mid]) < 0) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n };\n\n\n /*\n Push item onto heap, maintaining the heap invariant.\n */\n\n heappush = function(array, item, cmp) {\n if (cmp == null) {\n cmp = defaultCmp;\n }\n array.push(item);\n return _siftdown(array, 0, array.length - 1, cmp);\n };\n\n\n /*\n Pop the smallest item off the heap, maintaining the heap invariant.\n */\n\n heappop = function(array, cmp) {\n var lastelt, returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n lastelt = array.pop();\n if (array.length) {\n returnitem = array[0];\n array[0] = lastelt;\n _siftup(array, 0, cmp);\n } else {\n returnitem = lastelt;\n }\n return returnitem;\n };\n\n\n /*\n Pop and return the current smallest value, and add the new item.\n \n This is more efficient than heappop() followed by heappush(), and can be\n more appropriate when using a fixed size heap. Note that the value\n returned may be larger than item! That constrains reasonable use of\n this routine unless written as part of a conditional replacement:\n if item > array[0]\n item = heapreplace(array, item)\n */\n\n heapreplace = function(array, item, cmp) {\n var returnitem;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n returnitem = array[0];\n array[0] = item;\n _siftup(array, 0, cmp);\n return returnitem;\n };\n\n\n /*\n Fast version of a heappush followed by a heappop.\n */\n\n heappushpop = function(array, item, cmp) {\n var _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (array.length && cmp(array[0], item) < 0) {\n _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n _siftup(array, 0, cmp);\n }\n return item;\n };\n\n\n /*\n Transform list into a heap, in-place, in O(array.length) time.\n */\n\n heapify = function(array, cmp) {\n var i, _i, _len, _ref1, _results, _results1;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n _ref1 = (function() {\n _results1 = [];\n for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n return _results1;\n }).apply(this).reverse();\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n i = _ref1[_i];\n _results.push(_siftup(array, i, cmp));\n }\n return _results;\n };\n\n\n /*\n Update the position of the given item in the heap.\n This function should be called every time the item is being modified.\n */\n\n updateItem = function(array, item, cmp) {\n var pos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n pos = array.indexOf(item);\n if (pos === -1) {\n return;\n }\n _siftdown(array, 0, pos, cmp);\n return _siftup(array, pos, cmp);\n };\n\n\n /*\n Find the n largest elements in a dataset.\n */\n\n nlargest = function(array, n, cmp) {\n var elem, result, _i, _len, _ref;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n result = array.slice(0, n);\n if (!result.length) {\n return result;\n }\n heapify(result, cmp);\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n heappushpop(result, elem, cmp);\n }\n return result.sort(cmp).reverse();\n };\n\n\n /*\n Find the n smallest elements in a dataset.\n */\n\n nsmallest = function(array, n, cmp) {\n var elem, los, result, _i, _j, _len, _ref, _ref1, _results;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n if (n * 10 <= array.length) {\n result = array.slice(0, n).sort(cmp);\n if (!result.length) {\n return result;\n }\n los = result[result.length - 1];\n _ref = array.slice(n);\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n elem = _ref[_i];\n if (cmp(elem, los) < 0) {\n insort(result, elem, 0, null, cmp);\n result.pop();\n los = result[result.length - 1];\n }\n }\n return result;\n }\n heapify(array, cmp);\n _results = [];\n for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) {\n _results.push(heappop(array, cmp));\n }\n return _results;\n };\n\n _siftdown = function(array, startpos, pos, cmp) {\n var newitem, parent, parentpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n newitem = array[pos];\n while (pos > startpos) {\n parentpos = (pos - 1) >> 1;\n parent = array[parentpos];\n if (cmp(newitem, parent) < 0) {\n array[pos] = parent;\n pos = parentpos;\n continue;\n }\n break;\n }\n return array[pos] = newitem;\n };\n\n _siftup = function(array, pos, cmp) {\n var childpos, endpos, newitem, rightpos, startpos;\n if (cmp == null) {\n cmp = defaultCmp;\n }\n endpos = array.length;\n startpos = pos;\n newitem = array[pos];\n childpos = 2 * pos + 1;\n while (childpos < endpos) {\n rightpos = childpos + 1;\n if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n childpos = rightpos;\n }\n array[pos] = array[childpos];\n pos = childpos;\n childpos = 2 * pos + 1;\n }\n array[pos] = newitem;\n return _siftdown(array, startpos, pos, cmp);\n };\n\n Heap = (function() {\n Heap.push = heappush;\n\n Heap.pop = heappop;\n\n Heap.replace = heapreplace;\n\n Heap.pushpop = heappushpop;\n\n Heap.heapify = heapify;\n\n Heap.updateItem = updateItem;\n\n Heap.nlargest = nlargest;\n\n Heap.nsmallest = nsmallest;\n\n function Heap(cmp) {\n this.cmp = cmp != null ? cmp : defaultCmp;\n this.nodes = [];\n }\n\n Heap.prototype.push = function(x) {\n return heappush(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pop = function() {\n return heappop(this.nodes, this.cmp);\n };\n\n Heap.prototype.peek = function() {\n return this.nodes[0];\n };\n\n Heap.prototype.contains = function(x) {\n return this.nodes.indexOf(x) !== -1;\n };\n\n Heap.prototype.replace = function(x) {\n return heapreplace(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.pushpop = function(x) {\n return heappushpop(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.heapify = function() {\n return heapify(this.nodes, this.cmp);\n };\n\n Heap.prototype.updateItem = function(x) {\n return updateItem(this.nodes, x, this.cmp);\n };\n\n Heap.prototype.clear = function() {\n return this.nodes = [];\n };\n\n Heap.prototype.empty = function() {\n return this.nodes.length === 0;\n };\n\n Heap.prototype.size = function() {\n return this.nodes.length;\n };\n\n Heap.prototype.clone = function() {\n var heap;\n heap = new Heap();\n heap.nodes = this.nodes.slice(0);\n return heap;\n };\n\n Heap.prototype.toArray = function() {\n return this.nodes.slice(0);\n };\n\n Heap.prototype.insert = Heap.prototype.push;\n\n Heap.prototype.top = Heap.prototype.peek;\n\n Heap.prototype.front = Heap.prototype.peek;\n\n Heap.prototype.has = Heap.prototype.contains;\n\n Heap.prototype.copy = Heap.prototype.clone;\n\n return Heap;\n\n })();\n\n (function(root, factory) {\n {\n return module.exports = factory();\n }\n })(this, function() {\n return Heap;\n });\n\n }).call(commonjsGlobal);\n });\n\n var heap = heap$1;\n\n var dijkstraDefaults = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n });\n var elesfn$u = {\n dijkstra: function dijkstra(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n weight: args[1],\n directed: args[2]\n };\n }\n\n var _dijkstraDefaults = dijkstraDefaults(options),\n root = _dijkstraDefaults.root,\n weight = _dijkstraDefaults.weight,\n directed = _dijkstraDefaults.directed;\n\n var eles = this;\n var weightFn = weight;\n var source = string(root) ? this.filter(root)[0] : root[0];\n var dist = {};\n var prev = {};\n var knownDist = {};\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n edges.unmergeBy(function (ele) {\n return ele.isLoop();\n });\n\n var getDist = function getDist(node) {\n return dist[node.id()];\n };\n\n var setDist = function setDist(node, d) {\n dist[node.id()] = d;\n Q.updateItem(node);\n };\n\n var Q = new heap(function (a, b) {\n return getDist(a) - getDist(b);\n });\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n dist[node.id()] = node.same(source) ? 0 : Infinity;\n Q.push(node);\n }\n\n var distBetween = function distBetween(u, v) {\n var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges);\n var smallestDistance = Infinity;\n var smallestEdge;\n\n for (var _i = 0; _i < uvs.length; _i++) {\n var edge = uvs[_i];\n\n var _weight = weightFn(edge);\n\n if (_weight < smallestDistance || !smallestEdge) {\n smallestDistance = _weight;\n smallestEdge = edge;\n }\n }\n\n return {\n edge: smallestEdge,\n dist: smallestDistance\n };\n };\n\n while (Q.size() > 0) {\n var u = Q.pop();\n var smalletsDist = getDist(u);\n var uid = u.id();\n knownDist[uid] = smalletsDist;\n\n if (smalletsDist === Infinity) {\n continue;\n }\n\n var neighbors = u.neighborhood().intersect(nodes);\n\n for (var _i2 = 0; _i2 < neighbors.length; _i2++) {\n var v = neighbors[_i2];\n var vid = v.id();\n var vDist = distBetween(u, v);\n var alt = smalletsDist + vDist.dist;\n\n if (alt < getDist(v)) {\n setDist(v, alt);\n prev[vid] = {\n node: u,\n edge: vDist.edge\n };\n }\n } // for\n\n } // while\n\n\n return {\n distanceTo: function distanceTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n return knownDist[target.id()];\n },\n pathTo: function pathTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n var S = [];\n var u = target;\n var uid = u.id();\n\n if (target.length > 0) {\n S.unshift(target);\n\n while (prev[uid]) {\n var p = prev[uid];\n S.unshift(p.edge);\n S.unshift(p.node);\n u = p.node;\n uid = u.id();\n }\n }\n\n return eles.spawn(S);\n }\n };\n }\n };\n\n var elesfn$t = {\n // kruskal's algorithm (finds min spanning tree, assuming undirected graph)\n // implemented from pseudocode from wikipedia\n kruskal: function kruskal(weightFn) {\n weightFn = weightFn || function (edge) {\n return 1;\n };\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n var numNodes = nodes.length;\n var forest = new Array(numNodes);\n var A = nodes; // assumes byGroup() creates new collections that can be safely mutated\n\n var findSetIndex = function findSetIndex(ele) {\n for (var i = 0; i < forest.length; i++) {\n var eles = forest[i];\n\n if (eles.has(ele)) {\n return i;\n }\n }\n }; // start with one forest per node\n\n\n for (var i = 0; i < numNodes; i++) {\n forest[i] = this.spawn(nodes[i]);\n }\n\n var S = edges.sort(function (a, b) {\n return weightFn(a) - weightFn(b);\n });\n\n for (var _i = 0; _i < S.length; _i++) {\n var edge = S[_i];\n var u = edge.source()[0];\n var v = edge.target()[0];\n var setUIndex = findSetIndex(u);\n var setVIndex = findSetIndex(v);\n var setU = forest[setUIndex];\n var setV = forest[setVIndex];\n\n if (setUIndex !== setVIndex) {\n A.merge(edge); // combine forests for u and v\n\n setU.merge(setV);\n forest.splice(setVIndex, 1);\n }\n }\n\n return A;\n }\n };\n\n var aStarDefaults = defaults$g({\n root: null,\n goal: null,\n weight: function weight(edge) {\n return 1;\n },\n heuristic: function heuristic(edge) {\n return 0;\n },\n directed: false\n });\n var elesfn$s = {\n // Implemented from pseudocode from wikipedia\n aStar: function aStar(options) {\n var cy = this.cy();\n\n var _aStarDefaults = aStarDefaults(options),\n root = _aStarDefaults.root,\n goal = _aStarDefaults.goal,\n heuristic = _aStarDefaults.heuristic,\n directed = _aStarDefaults.directed,\n weight = _aStarDefaults.weight;\n\n root = cy.collection(root)[0];\n goal = cy.collection(goal)[0];\n var sid = root.id();\n var tid = goal.id();\n var gScore = {};\n var fScore = {};\n var closedSetIds = {};\n var openSet = new heap(function (a, b) {\n return fScore[a.id()] - fScore[b.id()];\n });\n var openSetIds = new Set$1();\n var cameFrom = {};\n var cameFromEdge = {};\n\n var addToOpenSet = function addToOpenSet(ele, id) {\n openSet.push(ele);\n openSetIds.add(id);\n };\n\n var cMin, cMinId;\n\n var popFromOpenSet = function popFromOpenSet() {\n cMin = openSet.pop();\n cMinId = cMin.id();\n openSetIds[\"delete\"](cMinId);\n };\n\n var isInOpenSet = function isInOpenSet(id) {\n return openSetIds.has(id);\n };\n\n addToOpenSet(root, sid);\n gScore[sid] = 0;\n fScore[sid] = heuristic(root); // Counter\n\n var steps = 0; // Main loop\n\n while (openSet.size() > 0) {\n popFromOpenSet();\n steps++; // If we've found our goal, then we are done\n\n if (cMinId === tid) {\n var path = [];\n var pathNode = goal;\n var pathNodeId = tid;\n var pathEdge = cameFromEdge[pathNodeId];\n\n for (;;) {\n path.unshift(pathNode);\n\n if (pathEdge != null) {\n path.unshift(pathEdge);\n }\n\n pathNode = cameFrom[pathNodeId];\n\n if (pathNode == null) {\n break;\n }\n\n pathNodeId = pathNode.id();\n pathEdge = cameFromEdge[pathNodeId];\n }\n\n return {\n found: true,\n distance: gScore[cMinId],\n path: this.spawn(path),\n steps: steps\n };\n } // Add cMin to processed nodes\n\n\n closedSetIds[cMinId] = true; // Update scores for neighbors of cMin\n // Take into account if graph is directed or not\n\n var vwEdges = cMin._private.edges;\n\n for (var i = 0; i < vwEdges.length; i++) {\n var e = vwEdges[i]; // edge must be in set of calling eles\n\n if (!this.hasElementWithId(e.id())) {\n continue;\n } // cMin must be the source of edge if directed\n\n\n if (directed && e.data('source') !== cMinId) {\n continue;\n }\n\n var wSrc = e.source();\n var wTgt = e.target();\n var w = wSrc.id() !== cMinId ? wSrc : wTgt;\n var wid = w.id(); // node must be in set of calling eles\n\n if (!this.hasElementWithId(wid)) {\n continue;\n } // if node is in closedSet, ignore it\n\n\n if (closedSetIds[wid]) {\n continue;\n } // New tentative score for node w\n\n\n var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if:\n // w not present in openSet\n // OR\n // tentative gScore is less than previous value\n // w not in openSet\n\n if (!isInOpenSet(wid)) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n addToOpenSet(w, wid);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n continue;\n } // w already in openSet, but with greater gScore\n\n\n if (tempScore < gScore[wid]) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n }\n } // End of neighbors update\n\n } // End of main loop\n // If we've reached here, then we've not reached our goal\n\n\n return {\n found: false,\n distance: undefined,\n path: undefined,\n steps: steps\n };\n }\n }; // elesfn\n\n var floydWarshallDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n });\n var elesfn$r = {\n // Implemented from pseudocode from wikipedia\n floydWarshall: function floydWarshall(options) {\n var cy = this.cy();\n\n var _floydWarshallDefault = floydWarshallDefaults(options),\n weight = _floydWarshallDefault.weight,\n directed = _floydWarshallDefault.directed;\n\n var weightFn = weight;\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n var N = nodes.length;\n var Nsq = N * N;\n\n var indexOf = function indexOf(node) {\n return nodes.indexOf(node);\n };\n\n var atIndex = function atIndex(i) {\n return nodes[i];\n }; // Initialize distance matrix\n\n\n var dist = new Array(Nsq);\n\n for (var n = 0; n < Nsq; n++) {\n var j = n % N;\n var i = (n - j) / N;\n\n if (i === j) {\n dist[n] = 0;\n } else {\n dist[n] = Infinity;\n }\n } // Initialize matrix used for path reconstruction\n // Initialize distance matrix\n\n\n var next = new Array(Nsq);\n var edgeNext = new Array(Nsq); // Process edges\n\n for (var _i = 0; _i < edges.length; _i++) {\n var edge = edges[_i];\n var src = edge.source()[0];\n var tgt = edge.target()[0];\n\n if (src === tgt) {\n continue;\n } // exclude loops\n\n\n var s = indexOf(src);\n var t = indexOf(tgt);\n var st = s * N + t; // source to target index\n\n var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes\n\n\n if (dist[st] > _weight) {\n dist[st] = _weight;\n next[st] = t;\n edgeNext[st] = edge;\n } // If undirected graph, process 'reversed' edge\n\n\n if (!directed) {\n var ts = t * N + s; // target to source index\n\n if (!directed && dist[ts] > _weight) {\n dist[ts] = _weight;\n next[ts] = s;\n edgeNext[ts] = edge;\n }\n }\n } // Main loop\n\n\n for (var k = 0; k < N; k++) {\n for (var _i2 = 0; _i2 < N; _i2++) {\n var ik = _i2 * N + k;\n\n for (var _j = 0; _j < N; _j++) {\n var ij = _i2 * N + _j;\n var kj = k * N + _j;\n\n if (dist[ik] + dist[kj] < dist[ij]) {\n dist[ij] = dist[ik] + dist[kj];\n next[ij] = next[ik];\n }\n }\n }\n }\n\n var getArgEle = function getArgEle(ele) {\n return (string(ele) ? cy.filter(ele) : ele)[0];\n };\n\n var indexOfArgEle = function indexOfArgEle(ele) {\n return indexOf(getArgEle(ele));\n };\n\n var res = {\n distance: function distance(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n return dist[i * N + j];\n },\n path: function path(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n var fromNode = atIndex(i);\n\n if (i === j) {\n return fromNode.collection();\n }\n\n if (next[i * N + j] == null) {\n return cy.collection();\n }\n\n var path = cy.collection();\n var prev = i;\n var edge;\n path.merge(fromNode);\n\n while (i !== j) {\n prev = i;\n i = next[i * N + j];\n edge = edgeNext[prev * N + i];\n path.merge(edge);\n path.merge(atIndex(i));\n }\n\n return path;\n }\n };\n return res;\n } // floydWarshall\n\n }; // elesfn\n\n var bellmanFordDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n root: null\n });\n var elesfn$q = {\n // Implemented from pseudocode from wikipedia\n bellmanFord: function bellmanFord(options) {\n var _this = this;\n\n var _bellmanFordDefaults = bellmanFordDefaults(options),\n weight = _bellmanFordDefaults.weight,\n directed = _bellmanFordDefaults.directed,\n root = _bellmanFordDefaults.root;\n\n var weightFn = weight;\n var eles = this;\n var cy = this.cy();\n\n var _this$byGroup = this.byGroup(),\n edges = _this$byGroup.edges,\n nodes = _this$byGroup.nodes;\n\n var numNodes = nodes.length;\n var infoMap = new Map$2();\n var hasNegativeWeightCycle = false;\n var negativeWeightCycles = [];\n root = cy.collection(root)[0]; // in case selector passed\n\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numEdges = edges.length;\n\n var getInfo = function getInfo(node) {\n var obj = infoMap.get(node.id());\n\n if (!obj) {\n obj = {};\n infoMap.set(node.id(), obj);\n }\n\n return obj;\n };\n\n var getNodeFromTo = function getNodeFromTo(to) {\n return (string(to) ? cy.$(to) : to)[0];\n };\n\n var distanceTo = function distanceTo(to) {\n return getInfo(getNodeFromTo(to)).dist;\n };\n\n var pathTo = function pathTo(to) {\n var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root;\n var end = getNodeFromTo(to);\n var path = [];\n var node = end;\n\n for (;;) {\n if (node == null) {\n return _this.spawn();\n }\n\n var _getInfo = getInfo(node),\n edge = _getInfo.edge,\n pred = _getInfo.pred;\n\n path.unshift(node[0]);\n\n if (node.same(thisStart) && path.length > 0) {\n break;\n }\n\n if (edge != null) {\n path.unshift(edge);\n }\n\n node = pred;\n }\n\n return eles.spawn(path);\n }; // Initializations { dist, pred, edge }\n\n\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i];\n var info = getInfo(node);\n\n if (node.same(root)) {\n info.dist = 0;\n } else {\n info.dist = Infinity;\n }\n\n info.pred = null;\n info.edge = null;\n } // Edges relaxation\n\n\n var replacedEdge = false;\n\n var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) {\n var dist = info1.dist + weight;\n\n if (dist < info2.dist && !edge.same(info1.edge)) {\n info2.dist = dist;\n info2.pred = node1;\n info2.edge = edge;\n replacedEdge = true;\n }\n };\n\n for (var _i = 1; _i < numNodes; _i++) {\n replacedEdge = false;\n\n for (var e = 0; e < numEdges; e++) {\n var edge = edges[e];\n var src = edge.source();\n var tgt = edge.target();\n\n var _weight = weightFn(edge);\n\n var srcInfo = getInfo(src);\n var tgtInfo = getInfo(tgt);\n checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); // If undirected graph, we need to take into account the 'reverse' edge\n\n if (!directed) {\n checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight);\n }\n }\n\n if (!replacedEdge) {\n break;\n }\n }\n\n if (replacedEdge) {\n // Check for negative weight cycles\n var negativeWeightCycleIds = [];\n\n for (var _e = 0; _e < numEdges; _e++) {\n var _edge = edges[_e];\n\n var _src = _edge.source();\n\n var _tgt = _edge.target();\n\n var _weight2 = weightFn(_edge);\n\n var srcDist = getInfo(_src).dist;\n var tgtDist = getInfo(_tgt).dist;\n\n if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) {\n if (!hasNegativeWeightCycle) {\n warn('Graph contains a negative weight cycle for Bellman-Ford');\n hasNegativeWeightCycle = true;\n }\n\n if (options.findNegativeWeightCycles !== false) {\n var negativeNodes = [];\n\n if (srcDist + _weight2 < tgtDist) {\n negativeNodes.push(_src);\n }\n\n if (!directed && tgtDist + _weight2 < srcDist) {\n negativeNodes.push(_tgt);\n }\n\n var numNegativeNodes = negativeNodes.length;\n\n for (var n = 0; n < numNegativeNodes; n++) {\n var start = negativeNodes[n];\n var cycle = [start];\n cycle.push(getInfo(start).edge);\n var _node = getInfo(start).pred;\n\n while (cycle.indexOf(_node) === -1) {\n cycle.push(_node);\n cycle.push(getInfo(_node).edge);\n _node = getInfo(_node).pred;\n }\n\n cycle = cycle.slice(cycle.indexOf(_node));\n var smallestId = cycle[0].id();\n var smallestIndex = 0;\n\n for (var c = 2; c < cycle.length; c += 2) {\n if (cycle[c].id() < smallestId) {\n smallestId = cycle[c].id();\n smallestIndex = c;\n }\n }\n\n cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex));\n cycle.push(cycle[0]);\n var cycleId = cycle.map(function (el) {\n return el.id();\n }).join(\",\");\n\n if (negativeWeightCycleIds.indexOf(cycleId) === -1) {\n negativeWeightCycles.push(eles.spawn(cycle));\n negativeWeightCycleIds.push(cycleId);\n }\n }\n } else {\n break;\n }\n }\n }\n }\n\n return {\n distanceTo: distanceTo,\n pathTo: pathTo,\n hasNegativeWeightCycle: hasNegativeWeightCycle,\n negativeWeightCycles: negativeWeightCycles\n };\n } // bellmanFord\n\n }; // elesfn\n\n var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one\n // Updates the remaining edge lists\n // Receives as a paramater the edge which causes the collapse\n\n var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) {\n if (remainingEdges.length === 0) {\n error(\"Karger-Stein must be run on a connected (sub)graph\");\n }\n\n var edgeInfo = remainingEdges[edgeIndex];\n var sourceIn = edgeInfo[1];\n var targetIn = edgeInfo[2];\n var partition1 = nodeMap[sourceIn];\n var partition2 = nodeMap[targetIn];\n var newEdges = remainingEdges; // re-use array\n // Delete all edges between partition1 and partition2\n\n for (var i = newEdges.length - 1; i >= 0; i--) {\n var edge = newEdges[i];\n var src = edge[1];\n var tgt = edge[2];\n\n if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) {\n newEdges.splice(i, 1);\n }\n } // All edges pointing to partition2 should now point to partition1\n\n\n for (var _i = 0; _i < newEdges.length; _i++) {\n var _edge = newEdges[_i];\n\n if (_edge[1] === partition2) {\n // Check source\n newEdges[_i] = _edge.slice(); // copy\n\n newEdges[_i][1] = partition1;\n } else if (_edge[2] === partition2) {\n // Check target\n newEdges[_i] = _edge.slice(); // copy\n\n newEdges[_i][2] = partition1;\n }\n } // Move all nodes from partition2 to partition1\n\n\n for (var _i2 = 0; _i2 < nodeMap.length; _i2++) {\n if (nodeMap[_i2] === partition2) {\n nodeMap[_i2] = partition1;\n }\n }\n\n return newEdges;\n }; // Contracts a graph until we reach a certain number of meta nodes\n\n\n var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) {\n while (size > sizeLimit) {\n // Choose an edge randomly\n var edgeIndex = Math.floor(Math.random() * remainingEdges.length); // Collapse graph based on edge\n\n remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges);\n size--;\n }\n\n return remainingEdges;\n };\n\n var elesfn$p = {\n // Computes the minimum cut of an undirected graph\n // Returns the correct answer with high probability\n kargerStein: function kargerStein() {\n var _this = this;\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numNodes = nodes.length;\n var numEdges = edges.length;\n var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2));\n var stopSize = Math.floor(numNodes / sqrt2);\n\n if (numNodes < 2) {\n error('At least 2 nodes are required for Karger-Stein algorithm');\n return undefined;\n } // Now store edge destination as indexes\n // Format for each edge (edge index, source node index, target node index)\n\n\n var edgeIndexes = [];\n\n for (var i = 0; i < numEdges; i++) {\n var e = edges[i];\n edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]);\n } // We will store the best cut found here\n\n\n var minCutSize = Infinity;\n var minCutEdgeIndexes = [];\n var minCutNodeMap = new Array(numNodes); // Initial meta node partition\n\n var metaNodeMap = new Array(numNodes);\n var metaNodeMap2 = new Array(numNodes);\n\n var copyNodesMap = function copyNodesMap(from, to) {\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n to[_i3] = from[_i3];\n }\n }; // Main loop\n\n\n for (var iter = 0; iter <= numIter; iter++) {\n // Reset meta node partition\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n metaNodeMap[_i4] = _i4;\n } // Contract until stop point (stopSize nodes)\n\n\n var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize);\n var edgesState2 = edgesState.slice(); // copy\n // Create a copy of the colapsed nodes state\n\n copyNodesMap(metaNodeMap, metaNodeMap2); // Run 2 iterations starting in the stop state\n\n var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2);\n var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); // Is any of the 2 results the best cut so far?\n\n if (res1.length <= res2.length && res1.length < minCutSize) {\n minCutSize = res1.length;\n minCutEdgeIndexes = res1;\n copyNodesMap(metaNodeMap, minCutNodeMap);\n } else if (res2.length <= res1.length && res2.length < minCutSize) {\n minCutSize = res2.length;\n minCutEdgeIndexes = res2;\n copyNodesMap(metaNodeMap2, minCutNodeMap);\n }\n } // end of main loop\n // Construct result\n\n\n var cut = this.spawn(minCutEdgeIndexes.map(function (e) {\n return edges[e[0]];\n }));\n var partition1 = this.spawn();\n var partition2 = this.spawn(); // traverse metaNodeMap for best cut\n\n var witnessNodePartition = minCutNodeMap[0];\n\n for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) {\n var partitionId = minCutNodeMap[_i5];\n var node = nodes[_i5];\n\n if (partitionId === witnessNodePartition) {\n partition1.merge(node);\n } else {\n partition2.merge(node);\n }\n } // construct components corresponding to each disjoint subset of nodes\n\n\n var constructComponent = function constructComponent(subset) {\n var component = _this.spawn();\n\n subset.forEach(function (node) {\n component.merge(node);\n node.connectedEdges().forEach(function (edge) {\n // ensure edge is within calling collection and edge is not in cut\n if (_this.contains(edge) && !cut.contains(edge)) {\n component.merge(edge);\n }\n });\n });\n return component;\n };\n\n var components = [constructComponent(partition1), constructComponent(partition2)];\n var ret = {\n cut: cut,\n components: components,\n // n.b. partitions are included to be compatible with the old api spec\n // (could be removed in a future major version)\n partition1: partition1,\n partition2: partition2\n };\n return ret;\n }\n }; // elesfn\n\n var copyPosition = function copyPosition(p) {\n return {\n x: p.x,\n y: p.y\n };\n };\n var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) {\n return {\n x: p.x * zoom + pan.x,\n y: p.y * zoom + pan.y\n };\n };\n var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) {\n return {\n x: (p.x - pan.x) / zoom,\n y: (p.y - pan.y) / zoom\n };\n };\n var array2point = function array2point(arr) {\n return {\n x: arr[0],\n y: arr[1]\n };\n };\n var min = function min(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var min = Infinity;\n\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n\n if (isFinite(val)) {\n min = Math.min(val, min);\n }\n }\n\n return min;\n };\n var max = function max(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var max = -Infinity;\n\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n\n if (isFinite(val)) {\n max = Math.max(val, max);\n }\n }\n\n return max;\n };\n var mean = function mean(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var total = 0;\n var n = 0;\n\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n\n if (isFinite(val)) {\n total += val;\n n++;\n }\n }\n\n return total / n;\n };\n var median = function median(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n if (copy) {\n arr = arr.slice(begin, end);\n } else {\n if (end < arr.length) {\n arr.splice(end, arr.length - end);\n }\n\n if (begin > 0) {\n arr.splice(0, begin);\n }\n } // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start\n\n\n var off = 0; // offset from non-finite values\n\n for (var i = arr.length - 1; i >= 0; i--) {\n var v = arr[i];\n\n if (includeHoles) {\n if (!isFinite(v)) {\n arr[i] = -Infinity;\n off++;\n }\n } else {\n // just remove it if we don't want to consider holes\n arr.splice(i, 1);\n }\n }\n\n if (sort) {\n arr.sort(function (a, b) {\n return a - b;\n }); // requires copy = true if you don't want to change the orig\n }\n\n var len = arr.length;\n var mid = Math.floor(len / 2);\n\n if (len % 2 !== 0) {\n return arr[mid + 1 + off];\n } else {\n return (arr[mid - 1 + off] + arr[mid + off]) / 2;\n }\n };\n var deg2rad = function deg2rad(deg) {\n return Math.PI * deg / 180;\n };\n var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) {\n return Math.atan2(dispY, dispX) - Math.PI / 2;\n };\n var log2 = Math.log2 || function (n) {\n return Math.log(n) / Math.log(2);\n };\n var signum = function signum(x) {\n if (x > 0) {\n return 1;\n } else if (x < 0) {\n return -1;\n } else {\n return 0;\n }\n };\n var dist = function dist(p1, p2) {\n return Math.sqrt(sqdist(p1, p2));\n };\n var sqdist = function sqdist(p1, p2) {\n var dx = p2.x - p1.x;\n var dy = p2.y - p1.y;\n return dx * dx + dy * dy;\n };\n var inPlaceSumNormalize = function inPlaceSumNormalize(v) {\n var length = v.length; // First, get sum of all elements\n\n var total = 0;\n\n for (var i = 0; i < length; i++) {\n total += v[i];\n } // Now, divide each by the sum of all elements\n\n\n for (var _i = 0; _i < length; _i++) {\n v[_i] = v[_i] / total;\n }\n\n return v;\n };\n\n var qbezierAt = function qbezierAt(p0, p1, p2, t) {\n return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2;\n };\n var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) {\n return {\n x: qbezierAt(p0.x, p1.x, p2.x, t),\n y: qbezierAt(p0.y, p1.y, p2.y, t)\n };\n };\n var lineAt = function lineAt(p0, p1, t, d) {\n var vec = {\n x: p1.x - p0.x,\n y: p1.y - p0.y\n };\n var vecDist = dist(p0, p1);\n var normVec = {\n x: vec.x / vecDist,\n y: vec.y / vecDist\n };\n t = t == null ? 0 : t;\n d = d != null ? d : t * vecDist;\n return {\n x: p0.x + normVec.x * d,\n y: p0.y + normVec.y * d\n };\n };\n var bound = function bound(min, val, max) {\n return Math.max(min, Math.min(max, val));\n }; // makes a full bb (x1, y1, x2, y2, w, h) from implicit params\n\n var makeBoundingBox = function makeBoundingBox(bb) {\n if (bb == null) {\n return {\n x1: Infinity,\n y1: Infinity,\n x2: -Infinity,\n y2: -Infinity,\n w: 0,\n h: 0\n };\n } else if (bb.x1 != null && bb.y1 != null) {\n if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x2,\n y2: bb.y2,\n w: bb.x2 - bb.x1,\n h: bb.y2 - bb.y1\n };\n } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x1 + bb.w,\n y2: bb.y1 + bb.h,\n w: bb.w,\n h: bb.h\n };\n }\n }\n };\n var copyBoundingBox = function copyBoundingBox(bb) {\n return {\n x1: bb.x1,\n x2: bb.x2,\n w: bb.w,\n y1: bb.y1,\n y2: bb.y2,\n h: bb.h\n };\n };\n var clearBoundingBox = function clearBoundingBox(bb) {\n bb.x1 = Infinity;\n bb.y1 = Infinity;\n bb.x2 = -Infinity;\n bb.y2 = -Infinity;\n bb.w = 0;\n bb.h = 0;\n };\n var updateBoundingBox = function updateBoundingBox(bb1, bb2) {\n // update bb1 with bb2 bounds\n bb1.x1 = Math.min(bb1.x1, bb2.x1);\n bb1.x2 = Math.max(bb1.x2, bb2.x2);\n bb1.w = bb1.x2 - bb1.x1;\n bb1.y1 = Math.min(bb1.y1, bb2.y1);\n bb1.y2 = Math.max(bb1.y2, bb2.y2);\n bb1.h = bb1.y2 - bb1.y1;\n };\n var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) {\n bb.x1 = Math.min(bb.x1, x);\n bb.x2 = Math.max(bb.x2, x);\n bb.w = bb.x2 - bb.x1;\n bb.y1 = Math.min(bb.y1, y);\n bb.y2 = Math.max(bb.y2, y);\n bb.h = bb.y2 - bb.y1;\n };\n var expandBoundingBox = function expandBoundingBox(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n bb.x1 -= padding;\n bb.x2 += padding;\n bb.y1 -= padding;\n bb.y2 += padding;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n };\n var expandBoundingBoxSides = function expandBoundingBoxSides(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0];\n var top, right, bottom, left;\n\n if (padding.length === 1) {\n top = right = bottom = left = padding[0];\n } else if (padding.length === 2) {\n top = bottom = padding[0];\n left = right = padding[1];\n } else if (padding.length === 4) {\n var _padding = _slicedToArray(padding, 4);\n\n top = _padding[0];\n right = _padding[1];\n bottom = _padding[2];\n left = _padding[3];\n }\n\n bb.x1 -= left;\n bb.x2 += right;\n bb.y1 -= top;\n bb.y2 += bottom;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n };\n\n var assignBoundingBox = function assignBoundingBox(bb1, bb2) {\n bb1.x1 = bb2.x1;\n bb1.y1 = bb2.y1;\n bb1.x2 = bb2.x2;\n bb1.y2 = bb2.y2;\n bb1.w = bb1.x2 - bb1.x1;\n bb1.h = bb1.y2 - bb1.y1;\n };\n var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) {\n // case: one bb to right of other\n if (bb1.x1 > bb2.x2) {\n return false;\n }\n\n if (bb2.x1 > bb1.x2) {\n return false;\n } // case: one bb to left of other\n\n\n if (bb1.x2 < bb2.x1) {\n return false;\n }\n\n if (bb2.x2 < bb1.x1) {\n return false;\n } // case: one bb above other\n\n\n if (bb1.y2 < bb2.y1) {\n return false;\n }\n\n if (bb2.y2 < bb1.y1) {\n return false;\n } // case: one bb below other\n\n\n if (bb1.y1 > bb2.y2) {\n return false;\n }\n\n if (bb2.y1 > bb1.y2) {\n return false;\n } // otherwise, must have some overlap\n\n\n return true;\n };\n var inBoundingBox = function inBoundingBox(bb, x, y) {\n return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\n };\n var pointInBoundingBox = function pointInBoundingBox(bb, pt) {\n return inBoundingBox(bb, pt.x, pt.y);\n };\n var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) {\n return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2);\n };\n var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) {\n var cornerRadius = getRoundRectangleRadius(width, height);\n var halfWidth = width / 2;\n var halfHeight = height / 2; // Check intersections with straight line segments\n\n var straightLineIntersections; // Top segment, left to right\n\n {\n var topStartX = nodeX - halfWidth + cornerRadius - padding;\n var topStartY = nodeY - halfHeight - padding;\n var topEndX = nodeX + halfWidth - cornerRadius + padding;\n var topEndY = topStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n } // Right segment, top to bottom\n\n {\n var rightStartX = nodeX + halfWidth + padding;\n var rightStartY = nodeY - halfHeight + cornerRadius - padding;\n var rightEndX = rightStartX;\n var rightEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false);\n\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n } // Bottom segment, left to right\n\n {\n var bottomStartX = nodeX - halfWidth + cornerRadius - padding;\n var bottomStartY = nodeY + halfHeight + padding;\n var bottomEndX = nodeX + halfWidth - cornerRadius + padding;\n var bottomEndY = bottomStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false);\n\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n } // Left segment, top to bottom\n\n {\n var leftStartX = nodeX - halfWidth - padding;\n var leftStartY = nodeY - halfHeight + cornerRadius - padding;\n var leftEndX = leftStartX;\n var leftEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false);\n\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n } // Check intersections with arc segments\n\n var arcIntersections; // Top Left\n\n {\n var topLeftCenterX = nodeX - halfWidth + cornerRadius;\n var topLeftCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle\n\n if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n } // Top Right\n\n {\n var topRightCenterX = nodeX + halfWidth - cornerRadius;\n var topRightCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle\n\n if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n } // Bottom Right\n\n {\n var bottomRightCenterX = nodeX + halfWidth - cornerRadius;\n var bottomRightCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle\n\n if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n } // Bottom Left\n\n {\n var bottomLeftCenterX = nodeX - halfWidth + cornerRadius;\n var bottomLeftCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle\n\n if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n return []; // if nothing\n };\n var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) {\n var t = tolerance;\n var x1 = Math.min(lx1, lx2);\n var x2 = Math.max(lx1, lx2);\n var y1 = Math.min(ly1, ly2);\n var y2 = Math.max(ly1, ly2);\n return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t;\n };\n var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) {\n var bb = {\n x1: Math.min(x1, x3, x2) - tolerance,\n x2: Math.max(x1, x3, x2) + tolerance,\n y1: Math.min(y1, y3, y2) - tolerance,\n y2: Math.max(y1, y3, y2) + tolerance\n }; // if outside the rough bounding box for the bezier, then it can't be a hit\n\n if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) {\n // console.log('bezier out of rough bb')\n return false;\n } else {\n // console.log('do more expensive check');\n return true;\n }\n };\n var solveQuadratic = function solveQuadratic(a, b, c, val) {\n c -= val;\n var r = b * b - 4 * a * c;\n\n if (r < 0) {\n return [];\n }\n\n var sqrtR = Math.sqrt(r);\n var denom = 2 * a;\n var root1 = (-b + sqrtR) / denom;\n var root2 = (-b - sqrtR) / denom;\n return [root1, root2];\n };\n var solveCubic = function solveCubic(a, b, c, d, result) {\n // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where\n // r is the real component, i is the imaginary component\n // An implementation of the Cardano method from the year 1545\n // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots\n var epsilon = 0.00001; // avoid division by zero while keeping the overall expression close in value\n\n if (a === 0) {\n a = epsilon;\n }\n\n b /= a;\n c /= a;\n d /= a;\n var discriminant, q, r, dum1, s, t, term1, r13;\n q = (3.0 * c - b * b) / 9.0;\n r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b));\n r /= 54.0;\n discriminant = q * q * q + r * r;\n result[1] = 0;\n term1 = b / 3.0;\n\n if (discriminant > 0) {\n s = r + Math.sqrt(discriminant);\n s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0);\n t = r - Math.sqrt(discriminant);\n t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0);\n result[0] = -term1 + s + t;\n term1 += (s + t) / 2.0;\n result[4] = result[2] = -term1;\n term1 = Math.sqrt(3.0) * (-t + s) / 2;\n result[3] = term1;\n result[5] = -term1;\n return;\n }\n\n result[5] = result[3] = 0;\n\n if (discriminant === 0) {\n r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0);\n result[0] = -term1 + 2.0 * r13;\n result[4] = result[2] = -(r13 + term1);\n return;\n }\n\n q = -q;\n dum1 = q * q * q;\n dum1 = Math.acos(r / Math.sqrt(dum1));\n r13 = 2.0 * Math.sqrt(q);\n result[0] = -term1 + r13 * Math.cos(dum1 / 3.0);\n result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0);\n result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0);\n return;\n };\n var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) {\n // Find minimum distance by using the minimum of the distance\n // function between the given point and the curve\n // This gives the coefficients of the resulting cubic equation\n // whose roots tell us where a possible minimum is\n // (Coefficients are divided by 4)\n var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3;\n var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3;\n var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y;\n var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; // debug(\"coefficients: \" + a / a + \", \" + b / a + \", \" + c / a + \", \" + d / a);\n\n var roots = []; // Use the cubic solving algorithm\n\n solveCubic(a, b, c, d, roots);\n var zeroThreshold = 0.0000001;\n var params = [];\n\n for (var index = 0; index < 6; index += 2) {\n if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) {\n params.push(roots[index]);\n }\n }\n\n params.push(1.0);\n params.push(0.0);\n var minDistanceSquared = -1;\n var curX, curY, distSquared;\n\n for (var i = 0; i < params.length; i++) {\n curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3;\n curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3;\n distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); // debug('distance for param ' + params[i] + \": \" + Math.sqrt(distSquared));\n\n if (minDistanceSquared >= 0) {\n if (distSquared < minDistanceSquared) {\n minDistanceSquared = distSquared;\n }\n } else {\n minDistanceSquared = distSquared;\n }\n }\n\n return minDistanceSquared;\n };\n var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) {\n var offset = [x - x1, y - y1];\n var line = [x2 - x1, y2 - y1];\n var lineSq = line[0] * line[0] + line[1] * line[1];\n var hypSq = offset[0] * offset[0] + offset[1] * offset[1];\n var dotProduct = offset[0] * line[0] + offset[1] * line[1];\n var adjSq = dotProduct * dotProduct / lineSq;\n\n if (dotProduct < 0) {\n return hypSq;\n }\n\n if (adjSq > lineSq) {\n return (x - x2) * (x - x2) + (y - y2) * (y - y2);\n }\n\n return hypSq - adjSq;\n };\n var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) {\n var x1, y1, x2, y2;\n var y3; // Intersect with vertical line through (x, y)\n\n var up = 0; // let down = 0;\n\n for (var i = 0; i < points.length / 2; i++) {\n x1 = points[i * 2];\n y1 = points[i * 2 + 1];\n\n if (i + 1 < points.length / 2) {\n x2 = points[(i + 1) * 2];\n y2 = points[(i + 1) * 2 + 1];\n } else {\n x2 = points[(i + 1 - points.length / 2) * 2];\n y2 = points[(i + 1 - points.length / 2) * 2 + 1];\n }\n\n if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) {\n y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1;\n\n if (y3 > y) {\n up++;\n } // if( y3 < y ){\n // down++;\n // }\n\n } else {\n continue;\n }\n }\n\n if (up % 2 === 0) {\n return false;\n } else {\n return true;\n }\n };\n var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) {\n var transformedPoints = new Array(basePoints.length); // Gives negative angle\n\n var angle;\n\n if (direction[0] != null) {\n angle = Math.atan(direction[1] / direction[0]);\n\n if (direction[0] < 0) {\n angle = angle + Math.PI / 2;\n } else {\n angle = -angle - Math.PI / 2;\n }\n } else {\n angle = direction;\n }\n\n var cos = Math.cos(-angle);\n var sin = Math.sin(-angle); // console.log(\"base: \" + basePoints);\n\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin);\n transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin);\n transformedPoints[i * 2] += centerX;\n transformedPoints[i * 2 + 1] += centerY;\n }\n\n var points;\n\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n\n return pointInsidePolygonPoints(x, y, points);\n };\n var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) {\n var cutPolygonPoints = new Array(basePoints.length);\n var halfW = width / 2;\n var halfH = height / 2;\n var cornerRadius = getRoundPolygonRadius(width, height);\n var squaredCornerRadius = cornerRadius * cornerRadius;\n\n for (var i = 0; i < basePoints.length / 4; i++) {\n var sourceUv = void 0,\n destUv = void 0;\n\n if (i === 0) {\n sourceUv = basePoints.length - 2;\n } else {\n sourceUv = i * 4 - 2;\n }\n\n destUv = i * 4 + 2;\n var px = centerX + halfW * basePoints[i * 4];\n var py = centerY + halfH * basePoints[i * 4 + 1];\n var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1];\n var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2);\n var cp0x = px - offset * basePoints[sourceUv];\n var cp0y = py - offset * basePoints[sourceUv + 1];\n var cp1x = px + offset * basePoints[destUv];\n var cp1y = py + offset * basePoints[destUv + 1];\n cutPolygonPoints[i * 4] = cp0x;\n cutPolygonPoints[i * 4 + 1] = cp0y;\n cutPolygonPoints[i * 4 + 2] = cp1x;\n cutPolygonPoints[i * 4 + 3] = cp1y;\n var orthx = basePoints[sourceUv + 1];\n var orthy = -basePoints[sourceUv];\n var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1];\n\n if (cosAlpha < 0) {\n orthx *= -1;\n orthy *= -1;\n }\n\n var cx = cp0x + orthx * cornerRadius;\n var cy = cp0y + orthy * cornerRadius;\n var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2);\n\n if (squaredDistance <= squaredCornerRadius) {\n return true;\n }\n }\n\n return pointInsidePolygonPoints(x, y, cutPolygonPoints);\n };\n var joinLines = function joinLines(lineSet) {\n var vertices = new Array(lineSet.length / 2);\n var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY;\n var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY;\n\n for (var i = 0; i < lineSet.length / 4; i++) {\n currentLineStartX = lineSet[i * 4];\n currentLineStartY = lineSet[i * 4 + 1];\n currentLineEndX = lineSet[i * 4 + 2];\n currentLineEndY = lineSet[i * 4 + 3];\n\n if (i < lineSet.length / 4 - 1) {\n nextLineStartX = lineSet[(i + 1) * 4];\n nextLineStartY = lineSet[(i + 1) * 4 + 1];\n nextLineEndX = lineSet[(i + 1) * 4 + 2];\n nextLineEndY = lineSet[(i + 1) * 4 + 3];\n } else {\n nextLineStartX = lineSet[0];\n nextLineStartY = lineSet[1];\n nextLineEndX = lineSet[2];\n nextLineEndY = lineSet[3];\n }\n\n var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true);\n vertices[i * 2] = intersection[0];\n vertices[i * 2 + 1] = intersection[1];\n }\n\n return vertices;\n };\n var expandPolygon = function expandPolygon(points, pad) {\n var expandedLineSet = new Array(points.length * 2);\n var currentPointX, currentPointY, nextPointX, nextPointY;\n\n for (var i = 0; i < points.length / 2; i++) {\n currentPointX = points[i * 2];\n currentPointY = points[i * 2 + 1];\n\n if (i < points.length / 2 - 1) {\n nextPointX = points[(i + 1) * 2];\n nextPointY = points[(i + 1) * 2 + 1];\n } else {\n nextPointX = points[0];\n nextPointY = points[1];\n } // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY]\n // Assume CCW polygon winding\n\n\n var offsetX = nextPointY - currentPointY;\n var offsetY = -(nextPointX - currentPointX); // Normalize\n\n var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY);\n var normalizedOffsetX = offsetX / offsetLength;\n var normalizedOffsetY = offsetY / offsetLength;\n expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad;\n expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad;\n }\n\n return expandedLineSet;\n };\n var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) {\n var dispX = centerX - x;\n var dispY = centerY - y;\n dispX /= ellipseWradius;\n dispY /= ellipseHradius;\n var len = Math.sqrt(dispX * dispX + dispY * dispY);\n var newLength = len - 1;\n\n if (newLength < 0) {\n return [];\n }\n\n var lenProportion = newLength / len;\n return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y];\n };\n var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) {\n x -= centerX;\n y -= centerY;\n x /= width / 2 + padding;\n y /= height / 2 + padding;\n return x * x + y * y <= 1;\n }; // Returns intersections of increasing distance from line's start point\n\n var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) {\n // Calculate d, direction vector of line\n var d = [x2 - x1, y2 - y1]; // Direction vector of line\n\n var f = [x1 - centerX, y1 - centerY];\n var a = d[0] * d[0] + d[1] * d[1];\n var b = 2 * (f[0] * d[0] + f[1] * d[1]);\n var c = f[0] * f[0] + f[1] * f[1] - radius * radius;\n var discriminant = b * b - 4 * a * c;\n\n if (discriminant < 0) {\n return [];\n }\n\n var t1 = (-b + Math.sqrt(discriminant)) / (2 * a);\n var t2 = (-b - Math.sqrt(discriminant)) / (2 * a);\n var tMin = Math.min(t1, t2);\n var tMax = Math.max(t1, t2);\n var inRangeParams = [];\n\n if (tMin >= 0 && tMin <= 1) {\n inRangeParams.push(tMin);\n }\n\n if (tMax >= 0 && tMax <= 1) {\n inRangeParams.push(tMax);\n }\n\n if (inRangeParams.length === 0) {\n return [];\n }\n\n var nearIntersectionX = inRangeParams[0] * d[0] + x1;\n var nearIntersectionY = inRangeParams[0] * d[1] + y1;\n\n if (inRangeParams.length > 1) {\n if (inRangeParams[0] == inRangeParams[1]) {\n return [nearIntersectionX, nearIntersectionY];\n } else {\n var farIntersectionX = inRangeParams[1] * d[0] + x1;\n var farIntersectionY = inRangeParams[1] * d[1] + y1;\n return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY];\n }\n } else {\n return [nearIntersectionX, nearIntersectionY];\n }\n };\n var midOfThree = function midOfThree(a, b, c) {\n if (b <= a && a <= c || c <= a && a <= b) {\n return a;\n } else if (a <= b && b <= c || c <= b && b <= a) {\n return b;\n } else {\n return c;\n }\n }; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4)\n\n var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) {\n var dx13 = x1 - x3;\n var dx21 = x2 - x1;\n var dx43 = x4 - x3;\n var dy13 = y1 - y3;\n var dy21 = y2 - y1;\n var dy43 = y4 - y3;\n var ua_t = dx43 * dy13 - dy43 * dx13;\n var ub_t = dx21 * dy13 - dy21 * dx13;\n var u_b = dy43 * dx21 - dx43 * dy21;\n\n if (u_b !== 0) {\n var ua = ua_t / u_b;\n var ub = ub_t / u_b;\n var flptThreshold = 0.001;\n\n var _min = 0 - flptThreshold;\n\n var _max = 1 + flptThreshold;\n\n if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) {\n return [x1 + ua * dx21, y1 + ua * dy21];\n } else {\n if (!infiniteLines) {\n return [];\n } else {\n return [x1 + ua * dx21, y1 + ua * dy21];\n }\n }\n } else {\n if (ua_t === 0 || ub_t === 0) {\n // Parallel, coincident lines. Check if overlap\n // Check endpoint of second line\n if (midOfThree(x1, x2, x4) === x4) {\n return [x4, y4];\n } // Check start point of second line\n\n\n if (midOfThree(x1, x2, x3) === x3) {\n return [x3, y3];\n } // Endpoint of first line\n\n\n if (midOfThree(x3, x4, x2) === x2) {\n return [x2, y2];\n }\n\n return [];\n } else {\n // Parallel, non-coincident\n return [];\n }\n }\n }; // math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding )\n // intersect a node polygon (pts transformed)\n //\n // math.polygonIntersectLine( x, y, basePoints, centerX, centerY )\n // intersect the points (no transform)\n\n var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) {\n var intersections = [];\n var intersection;\n var transformedPoints = new Array(basePoints.length);\n var doTransform = true;\n\n if (width == null) {\n doTransform = false;\n }\n\n var points;\n\n if (doTransform) {\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = basePoints[i * 2] * width + centerX;\n transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY;\n }\n\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n } else {\n points = basePoints;\n }\n\n var currentX, currentY, nextX, nextY;\n\n for (var _i2 = 0; _i2 < points.length / 2; _i2++) {\n currentX = points[_i2 * 2];\n currentY = points[_i2 * 2 + 1];\n\n if (_i2 < points.length / 2 - 1) {\n nextX = points[(_i2 + 1) * 2];\n nextY = points[(_i2 + 1) * 2 + 1];\n } else {\n nextX = points[0];\n nextY = points[1];\n }\n\n intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY);\n\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n\n return intersections;\n };\n var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) {\n var intersections = [];\n var intersection;\n var lines = new Array(basePoints.length);\n var halfW = width / 2;\n var halfH = height / 2;\n var cornerRadius = getRoundPolygonRadius(width, height);\n\n for (var i = 0; i < basePoints.length / 4; i++) {\n var sourceUv = void 0,\n destUv = void 0;\n\n if (i === 0) {\n sourceUv = basePoints.length - 2;\n } else {\n sourceUv = i * 4 - 2;\n }\n\n destUv = i * 4 + 2;\n var px = centerX + halfW * basePoints[i * 4];\n var py = centerY + halfH * basePoints[i * 4 + 1];\n var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1];\n var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2);\n var cp0x = px - offset * basePoints[sourceUv];\n var cp0y = py - offset * basePoints[sourceUv + 1];\n var cp1x = px + offset * basePoints[destUv];\n var cp1y = py + offset * basePoints[destUv + 1];\n\n if (i === 0) {\n lines[basePoints.length - 2] = cp0x;\n lines[basePoints.length - 1] = cp0y;\n } else {\n lines[i * 4 - 2] = cp0x;\n lines[i * 4 - 1] = cp0y;\n }\n\n lines[i * 4] = cp1x;\n lines[i * 4 + 1] = cp1y;\n var orthx = basePoints[sourceUv + 1];\n var orthy = -basePoints[sourceUv];\n var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1];\n\n if (cosAlpha < 0) {\n orthx *= -1;\n orthy *= -1;\n }\n\n var cx = cp0x + orthx * cornerRadius;\n var cy = cp0y + orthy * cornerRadius;\n intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius);\n\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n\n for (var _i3 = 0; _i3 < lines.length / 4; _i3++) {\n intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false);\n\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n\n if (intersections.length > 2) {\n var lowestIntersection = [intersections[0], intersections[1]];\n var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2);\n\n for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) {\n var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2);\n\n if (squaredDistance <= lowestSquaredDistance) {\n lowestIntersection[0] = intersections[_i4 * 2];\n lowestIntersection[1] = intersections[_i4 * 2 + 1];\n lowestSquaredDistance = squaredDistance;\n }\n }\n\n return lowestIntersection;\n }\n\n return intersections;\n };\n var shortenIntersection = function shortenIntersection(intersection, offset, amount) {\n var disp = [intersection[0] - offset[0], intersection[1] - offset[1]];\n var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]);\n var lenRatio = (length - amount) / length;\n\n if (lenRatio < 0) {\n lenRatio = 0.00001;\n }\n\n return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]];\n };\n var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) {\n var points = generateUnitNgonPoints(sides, rotationRadians);\n points = fitPolygonToSquare(points);\n return points;\n };\n var fitPolygonToSquare = function fitPolygonToSquare(points) {\n var x, y;\n var sides = points.length / 2;\n var minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n for (var i = 0; i < sides; i++) {\n x = points[2 * i];\n y = points[2 * i + 1];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n } // stretch factors\n\n\n var sx = 2 / (maxX - minX);\n var sy = 2 / (maxY - minY);\n\n for (var _i5 = 0; _i5 < sides; _i5++) {\n x = points[2 * _i5] = points[2 * _i5] * sx;\n y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n\n if (minY < -1) {\n for (var _i6 = 0; _i6 < sides; _i6++) {\n y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY);\n }\n }\n\n return points;\n };\n var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) {\n var increment = 1.0 / sides * 2 * Math.PI;\n var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0;\n startAngle += rotationRadians;\n var points = new Array(sides * 2);\n var currentAngle;\n\n for (var i = 0; i < sides; i++) {\n currentAngle = i * increment + startAngle;\n points[2 * i] = Math.cos(currentAngle); // x\n\n points[2 * i + 1] = Math.sin(-currentAngle); // y\n }\n\n return points;\n }; // Set the default radius, unless half of width or height is smaller than default\n\n var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) {\n return Math.min(width / 4, height / 4, 8);\n }; // Set the default radius\n\n var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) {\n return Math.min(width / 10, height / 10, 8);\n };\n var getCutRectangleCornerLength = function getCutRectangleCornerLength() {\n return 8;\n };\n var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) {\n return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0];\n }; // get curve width, height, and control point position offsets as a percentage of node height / width\n\n var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) {\n return {\n heightOffset: Math.min(15, 0.05 * height),\n widthOffset: Math.min(100, 0.25 * width),\n ctrlPtOffsetPct: 0.05\n };\n };\n\n var pageRankDefaults = defaults$g({\n dampingFactor: 0.8,\n precision: 0.000001,\n iterations: 200,\n weight: function weight(edge) {\n return 1;\n }\n });\n var elesfn$o = {\n pageRank: function pageRank(options) {\n var _pageRankDefaults = pageRankDefaults(options),\n dampingFactor = _pageRankDefaults.dampingFactor,\n precision = _pageRankDefaults.precision,\n iterations = _pageRankDefaults.iterations,\n weight = _pageRankDefaults.weight;\n\n var cy = this._private.cy;\n\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n var numNodes = nodes.length;\n var numNodesSqd = numNodes * numNodes;\n var numEdges = edges.length; // Construct transposed adjacency matrix\n // First lets have a zeroed matrix of the right size\n // We'll also keep track of the sum of each column\n\n var matrix = new Array(numNodesSqd);\n var columnSum = new Array(numNodes);\n var additionalProb = (1 - dampingFactor) / numNodes; // Create null matrix\n\n for (var i = 0; i < numNodes; i++) {\n for (var j = 0; j < numNodes; j++) {\n var n = i * numNodes + j;\n matrix[n] = 0;\n }\n\n columnSum[i] = 0;\n } // Now, process edges\n\n\n for (var _i = 0; _i < numEdges; _i++) {\n var edge = edges[_i];\n var srcId = edge.data('source');\n var tgtId = edge.data('target'); // Don't include loops in the matrix\n\n if (srcId === tgtId) {\n continue;\n }\n\n var s = nodes.indexOfId(srcId);\n var t = nodes.indexOfId(tgtId);\n var w = weight(edge);\n\n var _n = t * numNodes + s; // Update matrix\n\n\n matrix[_n] += w; // Update column sum\n\n columnSum[s] += w;\n } // Add additional probability based on damping factor\n // Also, take into account columns that have sum = 0\n\n\n var p = 1.0 / numNodes + additionalProb; // Shorthand\n // Traverse matrix, column by column\n\n for (var _j = 0; _j < numNodes; _j++) {\n if (columnSum[_j] === 0) {\n // No 'links' out from node jth, assume equal probability for each possible node\n for (var _i2 = 0; _i2 < numNodes; _i2++) {\n var _n2 = _i2 * numNodes + _j;\n\n matrix[_n2] = p;\n }\n } else {\n // Node jth has outgoing link, compute normalized probabilities\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n var _n3 = _i3 * numNodes + _j;\n\n matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb;\n }\n }\n } // Compute dominant eigenvector using power method\n\n\n var eigenvector = new Array(numNodes);\n var temp = new Array(numNodes);\n var previous; // Start with a vector of all 1's\n // Also, initialize a null vector which will be used as shorthand\n\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n eigenvector[_i4] = 1;\n }\n\n for (var iter = 0; iter < iterations; iter++) {\n // Temp array with all 0's\n for (var _i5 = 0; _i5 < numNodes; _i5++) {\n temp[_i5] = 0;\n } // Multiply matrix with previous result\n\n\n for (var _i6 = 0; _i6 < numNodes; _i6++) {\n for (var _j2 = 0; _j2 < numNodes; _j2++) {\n var _n4 = _i6 * numNodes + _j2;\n\n temp[_i6] += matrix[_n4] * eigenvector[_j2];\n }\n }\n\n inPlaceSumNormalize(temp);\n previous = eigenvector;\n eigenvector = temp;\n temp = previous;\n var diff = 0; // Compute difference (squared module) of both vectors\n\n for (var _i7 = 0; _i7 < numNodes; _i7++) {\n var delta = previous[_i7] - eigenvector[_i7];\n diff += delta * delta;\n } // If difference is less than the desired threshold, stop iterating\n\n\n if (diff < precision) {\n break;\n }\n } // Construct result\n\n\n var res = {\n rank: function rank(node) {\n node = cy.collection(node)[0];\n return eigenvector[nodes.indexOf(node)];\n }\n };\n return res;\n } // pageRank\n\n }; // elesfn\n\n var defaults$f = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n alpha: 0\n });\n var elesfn$n = {\n degreeCentralityNormalized: function degreeCentralityNormalized(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var nodes = this.nodes();\n var numNodes = nodes.length;\n\n if (!options.directed) {\n var degrees = {};\n var maxDegree = 0;\n\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i]; // add current node to the current options object and call degreeCentrality\n\n options.root = node;\n var currDegree = this.degreeCentrality(options);\n\n if (maxDegree < currDegree.degree) {\n maxDegree = currDegree.degree;\n }\n\n degrees[node.id()] = currDegree.degree;\n }\n\n return {\n degree: function degree(node) {\n if (maxDegree === 0) {\n return 0;\n }\n\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n\n return degrees[node.id()] / maxDegree;\n }\n };\n } else {\n var indegrees = {};\n var outdegrees = {};\n var maxIndegree = 0;\n var maxOutdegree = 0;\n\n for (var _i = 0; _i < numNodes; _i++) {\n var _node = nodes[_i];\n\n var id = _node.id(); // add current node to the current options object and call degreeCentrality\n\n\n options.root = _node;\n\n var _currDegree = this.degreeCentrality(options);\n\n if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree;\n if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree;\n indegrees[id] = _currDegree.indegree;\n outdegrees[id] = _currDegree.outdegree;\n }\n\n return {\n indegree: function indegree(node) {\n if (maxIndegree == 0) {\n return 0;\n }\n\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n\n return indegrees[node.id()] / maxIndegree;\n },\n outdegree: function outdegree(node) {\n if (maxOutdegree === 0) {\n return 0;\n }\n\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n\n return outdegrees[node.id()] / maxOutdegree;\n }\n };\n }\n },\n // degreeCentralityNormalized\n // Implemented from the algorithm in Opsahl's paper\n // \"Node centrality in weighted networks: Generalizing degree and shortest paths\"\n // check the heading 2 \"Degree\"\n degreeCentrality: function degreeCentrality(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var callingEles = this;\n var _options = options,\n root = _options.root,\n weight = _options.weight,\n directed = _options.directed,\n alpha = _options.alpha;\n root = cy.collection(root)[0];\n\n if (!directed) {\n var connEdges = root.connectedEdges().intersection(callingEles);\n var k = connEdges.length;\n var s = 0; // Now, sum edge weights\n\n for (var i = 0; i < connEdges.length; i++) {\n s += weight(connEdges[i]);\n }\n\n return {\n degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha)\n };\n } else {\n var edges = root.connectedEdges();\n var incoming = edges.filter(function (edge) {\n return edge.target().same(root) && callingEles.has(edge);\n });\n var outgoing = edges.filter(function (edge) {\n return edge.source().same(root) && callingEles.has(edge);\n });\n var k_in = incoming.length;\n var k_out = outgoing.length;\n var s_in = 0;\n var s_out = 0; // Now, sum incoming edge weights\n\n for (var _i2 = 0; _i2 < incoming.length; _i2++) {\n s_in += weight(incoming[_i2]);\n } // Now, sum outgoing edge weights\n\n\n for (var _i3 = 0; _i3 < outgoing.length; _i3++) {\n s_out += weight(outgoing[_i3]);\n }\n\n return {\n indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha),\n outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha)\n };\n }\n } // degreeCentrality\n\n }; // elesfn\n // nice, short mathematical alias\n\n elesfn$n.dc = elesfn$n.degreeCentrality;\n elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized;\n\n var defaults$e = defaults$g({\n harmonic: true,\n weight: function weight() {\n return 1;\n },\n directed: false,\n root: null\n });\n var elesfn$m = {\n closenessCentralityNormalized: function closenessCentralityNormalized(options) {\n var _defaults = defaults$e(options),\n harmonic = _defaults.harmonic,\n weight = _defaults.weight,\n directed = _defaults.directed;\n\n var cy = this.cy();\n var closenesses = {};\n var maxCloseness = 0;\n var nodes = this.nodes();\n var fw = this.floydWarshall({\n weight: weight,\n directed: directed\n }); // Compute closeness for every node and find the maximum closeness\n\n for (var i = 0; i < nodes.length; i++) {\n var currCloseness = 0;\n var node_i = nodes[i];\n\n for (var j = 0; j < nodes.length; j++) {\n if (i !== j) {\n var d = fw.distance(node_i, nodes[j]);\n\n if (harmonic) {\n currCloseness += 1 / d;\n } else {\n currCloseness += d;\n }\n }\n }\n\n if (!harmonic) {\n currCloseness = 1 / currCloseness;\n }\n\n if (maxCloseness < currCloseness) {\n maxCloseness = currCloseness;\n }\n\n closenesses[node_i.id()] = currCloseness;\n }\n\n return {\n closeness: function closeness(node) {\n if (maxCloseness == 0) {\n return 0;\n }\n\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node)[0].id();\n } else {\n // from is a node\n node = node.id();\n }\n\n return closenesses[node] / maxCloseness;\n }\n };\n },\n // Implemented from pseudocode from wikipedia\n closenessCentrality: function closenessCentrality(options) {\n var _defaults2 = defaults$e(options),\n root = _defaults2.root,\n weight = _defaults2.weight,\n directed = _defaults2.directed,\n harmonic = _defaults2.harmonic;\n\n root = this.filter(root)[0]; // we need distance from this node to every other node\n\n var dijkstra = this.dijkstra({\n root: root,\n weight: weight,\n directed: directed\n });\n var totalDistance = 0;\n var nodes = this.nodes();\n\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n\n if (!n.same(root)) {\n var d = dijkstra.distanceTo(n);\n\n if (harmonic) {\n totalDistance += 1 / d;\n } else {\n totalDistance += d;\n }\n }\n }\n\n return harmonic ? totalDistance : 1 / totalDistance;\n } // closenessCentrality\n\n }; // elesfn\n // nice, short mathematical alias\n\n elesfn$m.cc = elesfn$m.closenessCentrality;\n elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized;\n\n var defaults$d = defaults$g({\n weight: null,\n directed: false\n });\n var elesfn$l = {\n // Implemented from the algorithm in the paper \"On Variants of Shortest-Path Betweenness Centrality and their Generic Computation\" by Ulrik Brandes\n betweennessCentrality: function betweennessCentrality(options) {\n var _defaults = defaults$d(options),\n directed = _defaults.directed,\n weight = _defaults.weight;\n\n var weighted = weight != null;\n var cy = this.cy(); // starting\n\n var V = this.nodes();\n var A = {};\n var _C = {};\n var max = 0;\n var C = {\n set: function set(key, val) {\n _C[key] = val;\n\n if (val > max) {\n max = val;\n }\n },\n get: function get(key) {\n return _C[key];\n }\n }; // A contains the neighborhoods of every node\n\n for (var i = 0; i < V.length; i++) {\n var v = V[i];\n var vid = v.id();\n\n if (directed) {\n A[vid] = v.outgoers().nodes(); // get outgoers of every node\n } else {\n A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node\n }\n\n C.set(vid, 0);\n }\n\n var _loop = function _loop(s) {\n var sid = V[s].id();\n var S = []; // stack\n\n var P = {};\n var g = {};\n var d = {};\n var Q = new heap(function (a, b) {\n return d[a] - d[b];\n }); // queue\n // init dictionaries\n\n for (var _i = 0; _i < V.length; _i++) {\n var _vid = V[_i].id();\n\n P[_vid] = [];\n g[_vid] = 0;\n d[_vid] = Infinity;\n }\n\n g[sid] = 1; // sigma\n\n d[sid] = 0; // distance to s\n\n Q.push(sid);\n\n while (!Q.empty()) {\n var _v = Q.pop();\n\n S.push(_v);\n\n if (weighted) {\n for (var j = 0; j < A[_v].length; j++) {\n var w = A[_v][j];\n var vEle = cy.getElementById(_v);\n var edge = void 0;\n\n if (vEle.edgesTo(w).length > 0) {\n edge = vEle.edgesTo(w)[0];\n } else {\n edge = w.edgesTo(vEle)[0];\n }\n\n var edgeWeight = weight(edge);\n w = w.id();\n\n if (d[w] > d[_v] + edgeWeight) {\n d[w] = d[_v] + edgeWeight;\n\n if (Q.nodes.indexOf(w) < 0) {\n //if w is not in Q\n Q.push(w);\n } else {\n // update position if w is in Q\n Q.updateItem(w);\n }\n\n g[w] = 0;\n P[w] = [];\n }\n\n if (d[w] == d[_v] + edgeWeight) {\n g[w] = g[w] + g[_v];\n P[w].push(_v);\n }\n }\n } else {\n for (var _j = 0; _j < A[_v].length; _j++) {\n var _w = A[_v][_j].id();\n\n if (d[_w] == Infinity) {\n Q.push(_w);\n d[_w] = d[_v] + 1;\n }\n\n if (d[_w] == d[_v] + 1) {\n g[_w] = g[_w] + g[_v];\n\n P[_w].push(_v);\n }\n }\n }\n }\n\n var e = {};\n\n for (var _i2 = 0; _i2 < V.length; _i2++) {\n e[V[_i2].id()] = 0;\n }\n\n while (S.length > 0) {\n var _w2 = S.pop();\n\n for (var _j2 = 0; _j2 < P[_w2].length; _j2++) {\n var _v2 = P[_w2][_j2];\n e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]);\n }\n\n if (_w2 != V[s].id()) {\n C.set(_w2, C.get(_w2) + e[_w2]);\n }\n }\n };\n\n for (var s = 0; s < V.length; s++) {\n _loop(s);\n }\n\n var ret = {\n betweenness: function betweenness(node) {\n var id = cy.collection(node).id();\n return C.get(id);\n },\n betweennessNormalized: function betweennessNormalized(node) {\n if (max == 0) {\n return 0;\n }\n\n var id = cy.collection(node).id();\n return C.get(id) / max;\n }\n }; // alias\n\n ret.betweennessNormalised = ret.betweennessNormalized;\n return ret;\n } // betweennessCentrality\n\n }; // elesfn\n // nice, short mathematical alias\n\n elesfn$l.bc = elesfn$l.betweennessCentrality;\n\n // Implemented by Zoe Xi @zoexi for GSOC 2016\n /* eslint-disable no-unused-vars */\n\n var defaults$c = defaults$g({\n expandFactor: 2,\n // affects time of computation and cluster granularity to some extent: M * M\n inflateFactor: 2,\n // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j)\n multFactor: 1,\n // optional self loops for each node. Use a neutral value to improve cluster computations.\n maxIterations: 20,\n // maximum number of iterations of the MCL algorithm in a single run\n attributes: [// attributes/features used to group nodes, ie. similarity values between nodes\n function (edge) {\n return 1;\n }]\n });\n /* eslint-enable */\n\n var setOptions$3 = function setOptions(options) {\n return defaults$c(options);\n };\n /* eslint-enable */\n\n\n var getSimilarity$1 = function getSimilarity(edge, attributes) {\n var total = 0;\n\n for (var i = 0; i < attributes.length; i++) {\n total += attributes[i](edge);\n }\n\n return total;\n };\n\n var addLoops = function addLoops(M, n, val) {\n for (var i = 0; i < n; i++) {\n M[i * n + i] = val;\n }\n };\n\n var normalize = function normalize(M, n) {\n var sum;\n\n for (var col = 0; col < n; col++) {\n sum = 0;\n\n for (var row = 0; row < n; row++) {\n sum += M[row * n + col];\n }\n\n for (var _row = 0; _row < n; _row++) {\n M[_row * n + col] = M[_row * n + col] / sum;\n }\n }\n }; // TODO: blocked matrix multiplication?\n\n\n var mmult = function mmult(A, B, n) {\n var C = new Array(n * n);\n\n for (var i = 0; i < n; i++) {\n for (var j = 0; j < n; j++) {\n C[i * n + j] = 0;\n }\n\n for (var k = 0; k < n; k++) {\n for (var _j = 0; _j < n; _j++) {\n C[i * n + _j] += A[i * n + k] * B[k * n + _j];\n }\n }\n }\n\n return C;\n };\n\n var expand = function expand(M, n, expandFactor\n /** power **/\n ) {\n var _M = M.slice(0);\n\n for (var p = 1; p < expandFactor; p++) {\n M = mmult(M, _M, n);\n }\n\n return M;\n };\n\n var inflate = function inflate(M, n, inflateFactor\n /** r **/\n ) {\n var _M = new Array(n * n); // M(i,j) ^ inflatePower\n\n\n for (var i = 0; i < n * n; i++) {\n _M[i] = Math.pow(M[i], inflateFactor);\n }\n\n normalize(_M, n);\n return _M;\n };\n\n var hasConverged = function hasConverged(M, _M, n2, roundFactor) {\n // Check that both matrices have the same elements (i,j)\n for (var i = 0; i < n2; i++) {\n var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places\n\n var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor);\n\n if (v1 !== v2) {\n return false;\n }\n }\n\n return true;\n };\n\n var assign$2 = function assign(M, n, nodes, cy) {\n var clusters = [];\n\n for (var i = 0; i < n; i++) {\n var cluster = [];\n\n for (var j = 0; j < n; j++) {\n // Row-wise attractors and elements that they attract belong in same cluster\n if (Math.round(M[i * n + j] * 1000) / 1000 > 0) {\n cluster.push(nodes[j]);\n }\n }\n\n if (cluster.length !== 0) {\n clusters.push(cy.collection(cluster));\n }\n }\n\n return clusters;\n };\n\n var isDuplicate = function isDuplicate(c1, c2) {\n for (var i = 0; i < c1.length; i++) {\n if (!c2[i] || c1[i].id() !== c2[i].id()) {\n return false;\n }\n }\n\n return true;\n };\n\n var removeDuplicates = function removeDuplicates(clusters) {\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j < clusters.length; j++) {\n if (i != j && isDuplicate(clusters[i], clusters[j])) {\n clusters.splice(j, 1);\n }\n }\n }\n\n return clusters;\n };\n\n var markovClustering = function markovClustering(options) {\n var nodes = this.nodes();\n var edges = this.edges();\n var cy = this.cy(); // Set parameters of algorithm:\n\n var opts = setOptions$3(options); // Map each node to its position in node array\n\n var id2position = {};\n\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n } // Generate stochastic matrix M from input graph G (should be symmetric/undirected)\n\n\n var n = nodes.length,\n n2 = n * n;\n\n var M = new Array(n2),\n _M;\n\n for (var _i = 0; _i < n2; _i++) {\n M[_i] = 0;\n }\n\n for (var e = 0; e < edges.length; e++) {\n var edge = edges[e];\n var _i2 = id2position[edge.source().id()];\n var j = id2position[edge.target().id()];\n var sim = getSimilarity$1(edge, opts.attributes);\n M[_i2 * n + j] += sim; // G should be symmetric and undirected\n\n M[j * n + _i2] += sim;\n } // Begin Markov cluster algorithm\n // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal\n\n\n addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M );\n\n normalize(M, n);\n var isStillMoving = true;\n var iterations = 0;\n\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false; // Step 3:\n\n _M = expand(M, n, opts.expandFactor); // Step 4:\n\n M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached\n\n if (!hasConverged(M, _M, n2, 4)) {\n isStillMoving = true;\n }\n\n iterations++;\n } // Build clusters from matrix\n\n\n var clusters = assign$2(M, n, nodes, cy); // Remove duplicate clusters due to symmetry of graph and M matrix\n\n clusters = removeDuplicates(clusters);\n return clusters;\n };\n\n var markovClustering$1 = {\n markovClustering: markovClustering,\n mcl: markovClustering\n };\n\n // Common distance metrics for clustering algorithms\n\n var identity = function identity(x) {\n return x;\n };\n\n var absDiff = function absDiff(p, q) {\n return Math.abs(q - p);\n };\n\n var addAbsDiff = function addAbsDiff(total, p, q) {\n return total + absDiff(p, q);\n };\n\n var addSquaredDiff = function addSquaredDiff(total, p, q) {\n return total + Math.pow(q - p, 2);\n };\n\n var sqrt = function sqrt(x) {\n return Math.sqrt(x);\n };\n\n var maxAbsDiff = function maxAbsDiff(currentMax, p, q) {\n return Math.max(currentMax, absDiff(p, q));\n };\n\n var getDistance = function getDistance(length, getP, getQ, init, visit) {\n var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity;\n var ret = init;\n var p, q;\n\n for (var dim = 0; dim < length; dim++) {\n p = getP(dim);\n q = getQ(dim);\n ret = visit(ret, p, q);\n }\n\n return post(ret);\n };\n\n var distances = {\n euclidean: function euclidean(length, getP, getQ) {\n if (length >= 2) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt);\n } else {\n // for single attr case, more efficient to avoid sqrt\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n }\n },\n squaredEuclidean: function squaredEuclidean(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff);\n },\n manhattan: function manhattan(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n },\n max: function max(length, getP, getQ) {\n return getDistance(length, getP, getQ, -Infinity, maxAbsDiff);\n }\n }; // in case the user accidentally doesn't use camel case\n\n distances['squared-euclidean'] = distances['squaredEuclidean'];\n distances['squaredeuclidean'] = distances['squaredEuclidean'];\n function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) {\n var impl;\n\n if (fn$6(method)) {\n impl = method;\n } else {\n impl = distances[method] || distances.euclidean;\n }\n\n if (length === 0 && fn$6(method)) {\n return impl(nodeP, nodeQ);\n } else {\n return impl(length, getP, getQ, nodeP, nodeQ);\n }\n }\n\n var defaults$b = defaults$g({\n k: 2,\n m: 2,\n sensitivityThreshold: 0.0001,\n distance: 'euclidean',\n maxIterations: 10,\n attributes: [],\n testMode: false,\n testCentroids: null\n });\n\n var setOptions$2 = function setOptions(options) {\n return defaults$b(options);\n };\n /* eslint-enable */\n\n\n var getDist = function getDist(type, node, centroid, attributes, mode) {\n var noNodeP = mode !== 'kMedoids';\n var getP = noNodeP ? function (i) {\n return centroid[i];\n } : function (i) {\n return attributes[i](centroid);\n };\n\n var getQ = function getQ(i) {\n return attributes[i](node);\n };\n\n var nodeP = centroid;\n var nodeQ = node;\n return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ);\n };\n\n var randomCentroids = function randomCentroids(nodes, k, attributes) {\n var ndim = attributes.length;\n var min = new Array(ndim);\n var max = new Array(ndim);\n var centroids = new Array(k);\n var centroid = null; // Find min, max values for each attribute dimension\n\n for (var i = 0; i < ndim; i++) {\n min[i] = nodes.min(attributes[i]).value;\n max[i] = nodes.max(attributes[i]).value;\n } // Build k centroids, each represented as an n-dim feature vector\n\n\n for (var c = 0; c < k; c++) {\n centroid = [];\n\n for (var _i = 0; _i < ndim; _i++) {\n centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value\n }\n\n centroids[c] = centroid;\n }\n\n return centroids;\n };\n\n var classify = function classify(node, centroids, distance, attributes, type) {\n var min = Infinity;\n var index = 0;\n\n for (var i = 0; i < centroids.length; i++) {\n var dist = getDist(distance, node, centroids[i], attributes, type);\n\n if (dist < min) {\n min = dist;\n index = i;\n }\n }\n\n return index;\n };\n\n var buildCluster = function buildCluster(centroid, nodes, assignment) {\n var cluster = [];\n var node = null;\n\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n\n if (assignment[node.id()] === centroid) {\n //console.log(\"Node \" + node.id() + \" is associated with medoid #: \" + m);\n cluster.push(node);\n }\n }\n\n return cluster;\n };\n\n var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) {\n return Math.abs(v2 - v1) <= sensitivityThreshold;\n };\n\n var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) {\n for (var i = 0; i < v1.length; i++) {\n for (var j = 0; j < v1[i].length; j++) {\n var diff = Math.abs(v1[i][j] - v2[i][j]);\n\n if (diff > sensitivityThreshold) {\n return false;\n }\n }\n }\n\n return true;\n };\n\n var seenBefore = function seenBefore(node, medoids, n) {\n for (var i = 0; i < n; i++) {\n if (node === medoids[i]) return true;\n }\n\n return false;\n };\n\n var randomMedoids = function randomMedoids(nodes, k) {\n var medoids = new Array(k); // For small data sets, the probability of medoid conflict is greater,\n // so we need to check to see if we've already seen or chose this node before.\n\n if (nodes.length < 50) {\n // Randomly select k medoids from the n nodes\n for (var i = 0; i < k; i++) {\n var node = nodes[Math.floor(Math.random() * nodes.length)]; // If we've already chosen this node to be a medoid, don't choose it again (for small data sets).\n // Instead choose a different random node.\n\n while (seenBefore(node, medoids, i)) {\n node = nodes[Math.floor(Math.random() * nodes.length)];\n }\n\n medoids[i] = node;\n }\n } else {\n // Relatively large data set, so pretty safe to not check and just select random nodes\n for (var _i2 = 0; _i2 < k; _i2++) {\n medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)];\n }\n }\n\n return medoids;\n };\n\n var findCost = function findCost(potentialNewMedoid, cluster, attributes) {\n var cost = 0;\n\n for (var n = 0; n < cluster.length; n++) {\n cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids');\n }\n\n return cost;\n };\n\n var kMeans = function kMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null; // Set parameters of algorithm: # of clusters, distance metric, etc.\n\n var opts = setOptions$2(options); // Begin k-means algorithm\n\n var clusters = new Array(opts.k);\n var assignment = {};\n var centroids; // Step 1: Initialize centroid positions\n\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') {\n // TODO: implement a seeded random number generator.\n opts.testCentroids;\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n } else if (_typeof(opts.testCentroids) === 'object') {\n centroids = opts.testCentroids;\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n\n var isStillMoving = true;\n var iterations = 0;\n\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest centroid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster #\n\n assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans');\n } // Step 3: For each of the k clusters, update its centroid\n\n\n isStillMoving = false;\n\n for (var c = 0; c < opts.k; c++) {\n // Get all nodes that belong to this cluster\n var cluster = buildCluster(c, nodes, assignment);\n\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n } // Update centroids by calculating avg of all nodes within the cluster.\n\n\n var ndim = opts.attributes.length;\n var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ]\n\n var newCentroid = new Array(ndim);\n var sum = new Array(ndim);\n\n for (var d = 0; d < ndim; d++) {\n sum[d] = 0.0;\n\n for (var i = 0; i < cluster.length; i++) {\n node = cluster[i];\n sum[d] += opts.attributes[d](node);\n }\n\n newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change\n\n if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n }\n\n centroids[c] = newCentroid;\n clusters[c] = cy.collection(cluster);\n }\n\n iterations++;\n }\n\n return clusters;\n };\n\n var kMedoids = function kMedoids(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null;\n var opts = setOptions$2(options); // Begin k-medoids algorithm\n\n var clusters = new Array(opts.k);\n var medoids;\n var assignment = {};\n var curCost;\n var minCosts = new Array(opts.k); // minimum cost configuration for each cluster\n // Step 1: Initialize k medoids\n\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') {\n medoids = opts.testCentroids;\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n\n var isStillMoving = true;\n var iterations = 0;\n\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest medoid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster #\n\n assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids');\n }\n\n isStillMoving = false; // Step 3: For each medoid m, and for each node associated with mediod m,\n // select the node with the lowest configuration cost as new medoid.\n\n for (var m = 0; m < medoids.length; m++) {\n // Get all nodes that belong to this medoid\n var cluster = buildCluster(m, nodes, assignment);\n\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n }\n\n minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost\n // Select different medoid if its configuration has the lowest cost\n\n for (var _n = 0; _n < cluster.length; _n++) {\n curCost = findCost(cluster[_n], cluster, opts.attributes);\n\n if (curCost < minCosts[m]) {\n minCosts[m] = curCost;\n medoids[m] = cluster[_n];\n isStillMoving = true;\n }\n }\n\n clusters[m] = cy.collection(cluster);\n }\n\n iterations++;\n }\n\n return clusters;\n };\n\n var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) {\n var numerator, denominator;\n\n for (var n = 0; n < nodes.length; n++) {\n for (var c = 0; c < centroids.length; c++) {\n weight[n][c] = Math.pow(U[n][c], opts.m);\n }\n }\n\n for (var _c = 0; _c < centroids.length; _c++) {\n for (var dim = 0; dim < opts.attributes.length; dim++) {\n numerator = 0;\n denominator = 0;\n\n for (var _n2 = 0; _n2 < nodes.length; _n2++) {\n numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]);\n denominator += weight[_n2][_c];\n }\n\n centroids[_c][dim] = numerator / denominator;\n }\n }\n };\n\n var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) {\n // Save previous step\n for (var i = 0; i < U.length; i++) {\n _U[i] = U[i].slice();\n }\n\n var sum, numerator, denominator;\n var pow = 2 / (opts.m - 1);\n\n for (var c = 0; c < centroids.length; c++) {\n for (var n = 0; n < nodes.length; n++) {\n sum = 0;\n\n for (var k = 0; k < centroids.length; k++) {\n // against all other centroids\n numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans');\n denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans');\n sum += Math.pow(numerator / denominator, pow);\n }\n\n U[n][c] = 1 / sum;\n }\n }\n };\n\n var assign$1 = function assign(nodes, U, opts, cy) {\n var clusters = new Array(opts.k);\n\n for (var c = 0; c < clusters.length; c++) {\n clusters[c] = [];\n }\n\n var max;\n var index;\n\n for (var n = 0; n < U.length; n++) {\n // for each node (U is N x C matrix)\n max = -Infinity;\n index = -1; // Determine which cluster the node is most likely to belong in\n\n for (var _c2 = 0; _c2 < U[0].length; _c2++) {\n if (U[n][_c2] > max) {\n max = U[n][_c2];\n index = _c2;\n }\n }\n\n clusters[index].push(nodes[n]);\n } // Turn every array into a collection of nodes\n\n\n for (var _c3 = 0; _c3 < clusters.length; _c3++) {\n clusters[_c3] = cy.collection(clusters[_c3]);\n }\n\n return clusters;\n };\n\n var fuzzyCMeans = function fuzzyCMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions$2(options); // Begin fuzzy c-means algorithm\n\n var clusters;\n var centroids;\n var U;\n\n var _U;\n\n var weight; // Step 1: Initialize letiables.\n\n _U = new Array(nodes.length);\n\n for (var i = 0; i < nodes.length; i++) {\n // N x C matrix\n _U[i] = new Array(opts.k);\n }\n\n U = new Array(nodes.length);\n\n for (var _i3 = 0; _i3 < nodes.length; _i3++) {\n // N x C matrix\n U[_i3] = new Array(opts.k);\n }\n\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n var total = 0;\n\n for (var j = 0; j < opts.k; j++) {\n U[_i4][j] = Math.random();\n total += U[_i4][j];\n }\n\n for (var _j = 0; _j < opts.k; _j++) {\n U[_i4][_j] = U[_i4][_j] / total;\n }\n }\n\n centroids = new Array(opts.k);\n\n for (var _i5 = 0; _i5 < opts.k; _i5++) {\n centroids[_i5] = new Array(opts.attributes.length);\n }\n\n weight = new Array(nodes.length);\n\n for (var _i6 = 0; _i6 < nodes.length; _i6++) {\n // N x C matrix\n weight[_i6] = new Array(opts.k);\n } // end init FCM\n\n\n var isStillMoving = true;\n var iterations = 0;\n\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false; // Step 2: Calculate the centroids for each step.\n\n updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U.\n\n updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence.\n\n if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n\n iterations++;\n } // Assign nodes to clusters with highest probability.\n\n\n clusters = assign$1(nodes, U, opts, cy);\n return {\n clusters: clusters,\n degreeOfMembership: U\n };\n };\n\n var kClustering = {\n kMeans: kMeans,\n kMedoids: kMedoids,\n fuzzyCMeans: fuzzyCMeans,\n fcm: fuzzyCMeans\n };\n\n // Implemented by Zoe Xi @zoexi for GSOC 2016\n var defaults$a = defaults$g({\n distance: 'euclidean',\n // distance metric to compare nodes\n linkage: 'min',\n // linkage criterion : how to determine the distance between clusters of nodes\n mode: 'threshold',\n // mode:'threshold' => clusters must be threshold distance apart\n threshold: Infinity,\n // the distance threshold\n // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters\n addDendrogram: false,\n // whether to add the dendrogram to the graph for viz\n dendrogramDepth: 0,\n // depth at which dendrogram branches are merged into the returned clusters\n attributes: [] // array of attr functions\n\n });\n var linkageAliases = {\n 'single': 'min',\n 'complete': 'max'\n };\n\n var setOptions$1 = function setOptions(options) {\n var opts = defaults$a(options);\n var preferredAlias = linkageAliases[opts.linkage];\n\n if (preferredAlias != null) {\n opts.linkage = preferredAlias;\n }\n\n return opts;\n };\n\n var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) {\n // Find two closest clusters from cached mins\n var minKey = 0;\n var min = Infinity;\n var dist;\n var attrs = opts.attributes;\n\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n };\n\n for (var i = 0; i < clusters.length; i++) {\n var key = clusters[i].key;\n var _dist = dists[key][mins[key]];\n\n if (_dist < min) {\n minKey = key;\n min = _dist;\n }\n }\n\n if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) {\n return false;\n }\n\n var c1 = index[minKey];\n var c2 = index[mins[minKey]];\n var merged; // Merge two closest clusters\n\n if (opts.mode === 'dendrogram') {\n merged = {\n left: c1,\n right: c2,\n key: c1.key\n };\n } else {\n merged = {\n value: c1.value.concat(c2.value),\n key: c1.key\n };\n }\n\n clusters[c1.index] = merged;\n clusters.splice(c2.index, 1);\n index[c1.key] = merged; // Update distances with new merged cluster\n\n for (var _i = 0; _i < clusters.length; _i++) {\n var cur = clusters[_i];\n\n if (c1.key === cur.key) {\n dist = Infinity;\n } else if (opts.linkage === 'min') {\n dist = dists[c1.key][cur.key];\n\n if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'max') {\n dist = dists[c1.key][cur.key];\n\n if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'mean') {\n dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size);\n } else {\n if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]);\n }\n\n dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric\n } // Update cached mins\n\n\n for (var _i2 = 0; _i2 < clusters.length; _i2++) {\n var key1 = clusters[_i2].key;\n\n if (mins[key1] === c1.key || mins[key1] === c2.key) {\n var _min = key1;\n\n for (var j = 0; j < clusters.length; j++) {\n var key2 = clusters[j].key;\n\n if (dists[key1][key2] < dists[key1][_min]) {\n _min = key2;\n }\n }\n\n mins[key1] = _min;\n }\n\n clusters[_i2].index = _i2;\n } // Clean up meta data used for clustering\n\n\n c1.key = c2.key = c1.index = c2.index = null;\n return true;\n };\n\n var getAllChildren = function getAllChildren(root, arr, cy) {\n if (!root) return;\n\n if (root.value) {\n arr.push(root.value);\n } else {\n if (root.left) getAllChildren(root.left, arr);\n if (root.right) getAllChildren(root.right, arr);\n }\n };\n\n var buildDendrogram = function buildDendrogram(root, cy) {\n if (!root) return '';\n\n if (root.left && root.right) {\n var leftStr = buildDendrogram(root.left, cy);\n var rightStr = buildDendrogram(root.right, cy);\n var node = cy.add({\n group: 'nodes',\n data: {\n id: leftStr + ',' + rightStr\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: leftStr,\n target: node.id()\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: rightStr,\n target: node.id()\n }\n });\n return node.id();\n } else if (root.value) {\n return root.value.id();\n }\n };\n\n var buildClustersFromTree = function buildClustersFromTree(root, k, cy) {\n if (!root) return [];\n var left = [],\n right = [],\n leaves = [];\n\n if (k === 0) {\n // don't cut tree, simply return all nodes as 1 single cluster\n if (root.left) getAllChildren(root.left, left);\n if (root.right) getAllChildren(root.right, right);\n leaves = left.concat(right);\n return [cy.collection(leaves)];\n } else if (k === 1) {\n // cut at root\n if (root.value) {\n // leaf node\n return [cy.collection(root.value)];\n } else {\n if (root.left) getAllChildren(root.left, left);\n if (root.right) getAllChildren(root.right, right);\n return [cy.collection(left), cy.collection(right)];\n }\n } else {\n if (root.value) {\n return [cy.collection(root.value)];\n } else {\n if (root.left) left = buildClustersFromTree(root.left, k - 1, cy);\n if (root.right) right = buildClustersFromTree(root.right, k - 1, cy);\n return left.concat(right);\n }\n }\n };\n /* eslint-enable */\n\n\n var hierarchicalClustering = function hierarchicalClustering(options) {\n var cy = this.cy();\n var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc.\n\n var opts = setOptions$1(options);\n var attrs = opts.attributes;\n\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n }; // Begin hierarchical algorithm\n\n\n var clusters = [];\n var dists = []; // distances between each pair of clusters\n\n var mins = []; // closest cluster for each cluster\n\n var index = []; // hash of all clusters by key\n // In agglomerative (bottom-up) clustering, each node starts as its own cluster\n\n for (var n = 0; n < nodes.length; n++) {\n var cluster = {\n value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]],\n key: n,\n index: n\n };\n clusters[n] = cluster;\n index[n] = cluster;\n dists[n] = [];\n mins[n] = 0;\n } // Calculate the distance between each pair of clusters\n\n\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j <= i; j++) {\n var dist = void 0;\n\n if (opts.mode === 'dendrogram') {\n // modes store cluster values differently\n dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value);\n } else {\n dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]);\n }\n\n dists[i][j] = dist;\n dists[j][i] = dist;\n\n if (dist < dists[i][mins[i]]) {\n mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j\n }\n }\n } // Find the closest pair of clusters and merge them into a single cluster.\n // Update distances between new cluster and each of the old clusters, and loop until threshold reached.\n\n\n var merged = mergeClosest(clusters, index, dists, mins, opts);\n\n while (merged) {\n merged = mergeClosest(clusters, index, dists, mins, opts);\n }\n\n var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges\n // in addition to returning the clusters.\n\n if (opts.mode === 'dendrogram') {\n retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy);\n if (opts.addDendrogram) buildDendrogram(clusters[0], cy);\n } else {\n // Regular mode simply returns the clusters\n retClusters = new Array(clusters.length);\n clusters.forEach(function (cluster, i) {\n // Clean up meta data used for clustering\n cluster.key = cluster.index = null;\n retClusters[i] = cy.collection(cluster.value);\n });\n }\n\n return retClusters;\n };\n\n var hierarchicalClustering$1 = {\n hierarchicalClustering: hierarchicalClustering,\n hca: hierarchicalClustering\n };\n\n // Implemented by Zoe Xi @zoexi for GSOC 2016\n var defaults$9 = defaults$g({\n distance: 'euclidean',\n // distance metric to compare attributes between two nodes\n preference: 'median',\n // suitability of a data point to serve as an exemplar\n damping: 0.8,\n // damping factor between [0.5, 1)\n maxIterations: 1000,\n // max number of iterations to run\n minIterations: 100,\n // min number of iterations to run in order for clustering to stop\n attributes: [// functions to quantify the similarity between any two points\n // e.g. node => node.data('weight')\n ]\n });\n\n var setOptions = function setOptions(options) {\n var dmp = options.damping;\n var pref = options.preference;\n\n if (!(0.5 <= dmp && dmp < 1)) {\n error(\"Damping must range on [0.5, 1). Got: \".concat(dmp));\n }\n\n var validPrefs = ['median', 'mean', 'min', 'max'];\n\n if (!(validPrefs.some(function (v) {\n return v === pref;\n }) || number$1(pref))) {\n error(\"Preference must be one of [\".concat(validPrefs.map(function (p) {\n return \"'\".concat(p, \"'\");\n }).join(', '), \"] or a number. Got: \").concat(pref));\n }\n\n return defaults$9(options);\n };\n /* eslint-enable */\n\n\n var getSimilarity = function getSimilarity(type, n1, n2, attributes) {\n var attr = function attr(n, i) {\n return attributes[i](n);\n }; // nb negative because similarity should have an inverse relationship to distance\n\n\n return -clusteringDistance(type, attributes.length, function (i) {\n return attr(n1, i);\n }, function (i) {\n return attr(n2, i);\n }, n1, n2);\n };\n\n var getPreference = function getPreference(S, preference) {\n // larger preference = greater # of clusters\n var p = null;\n\n if (preference === 'median') {\n p = median(S);\n } else if (preference === 'mean') {\n p = mean(S);\n } else if (preference === 'min') {\n p = min(S);\n } else if (preference === 'max') {\n p = max(S);\n } else {\n // Custom preference number, as set by user\n p = preference;\n }\n\n return p;\n };\n\n var findExemplars = function findExemplars(n, R, A) {\n var indices = [];\n\n for (var i = 0; i < n; i++) {\n if (R[i * n + i] + A[i * n + i] > 0) {\n indices.push(i);\n }\n }\n\n return indices;\n };\n\n var assignClusters = function assignClusters(n, S, exemplars) {\n var clusters = [];\n\n for (var i = 0; i < n; i++) {\n var index = -1;\n var max = -Infinity;\n\n for (var ei = 0; ei < exemplars.length; ei++) {\n var e = exemplars[ei];\n\n if (S[i * n + e] > max) {\n index = e;\n max = S[i * n + e];\n }\n }\n\n if (index > 0) {\n clusters.push(index);\n }\n }\n\n for (var _ei = 0; _ei < exemplars.length; _ei++) {\n clusters[exemplars[_ei]] = exemplars[_ei];\n }\n\n return clusters;\n };\n\n var assign = function assign(n, S, exemplars) {\n var clusters = assignClusters(n, S, exemplars);\n\n for (var ei = 0; ei < exemplars.length; ei++) {\n var ii = [];\n\n for (var c = 0; c < clusters.length; c++) {\n if (clusters[c] === exemplars[ei]) {\n ii.push(c);\n }\n }\n\n var maxI = -1;\n var maxSum = -Infinity;\n\n for (var i = 0; i < ii.length; i++) {\n var sum = 0;\n\n for (var j = 0; j < ii.length; j++) {\n sum += S[ii[j] * n + ii[i]];\n }\n\n if (sum > maxSum) {\n maxI = i;\n maxSum = sum;\n }\n }\n\n exemplars[ei] = ii[maxI];\n }\n\n clusters = assignClusters(n, S, exemplars);\n return clusters;\n };\n\n var affinityPropagation = function affinityPropagation(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions(options); // Map each node to its position in node array\n\n var id2position = {};\n\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n } // Begin affinity propagation algorithm\n\n\n var n; // number of data points\n\n var n2; // size of matrices\n\n var S; // similarity matrix (1D array)\n\n var p; // preference/suitability of a data point to serve as an exemplar\n\n var R; // responsibility matrix (1D array)\n\n var A; // availability matrix (1D array)\n\n n = nodes.length;\n n2 = n * n; // Initialize and build S similarity matrix\n\n S = new Array(n2);\n\n for (var _i = 0; _i < n2; _i++) {\n S[_i] = -Infinity; // for cases where two data points shouldn't be linked together\n }\n\n for (var _i2 = 0; _i2 < n; _i2++) {\n for (var j = 0; j < n; j++) {\n if (_i2 !== j) {\n S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes);\n }\n }\n } // Place preferences on the diagonal of S\n\n\n p = getPreference(S, opts.preference);\n\n for (var _i3 = 0; _i3 < n; _i3++) {\n S[_i3 * n + _i3] = p;\n } // Initialize R responsibility matrix\n\n\n R = new Array(n2);\n\n for (var _i4 = 0; _i4 < n2; _i4++) {\n R[_i4] = 0.0;\n } // Initialize A availability matrix\n\n\n A = new Array(n2);\n\n for (var _i5 = 0; _i5 < n2; _i5++) {\n A[_i5] = 0.0;\n }\n\n var old = new Array(n);\n var Rp = new Array(n);\n var se = new Array(n);\n\n for (var _i6 = 0; _i6 < n; _i6++) {\n old[_i6] = 0.0;\n Rp[_i6] = 0.0;\n se[_i6] = 0;\n }\n\n var e = new Array(n * opts.minIterations);\n\n for (var _i7 = 0; _i7 < e.length; _i7++) {\n e[_i7] = 0;\n }\n\n var iter;\n\n for (iter = 0; iter < opts.maxIterations; iter++) {\n // main algorithmic loop\n // Update R responsibility matrix\n for (var _i8 = 0; _i8 < n; _i8++) {\n var max = -Infinity,\n max2 = -Infinity,\n maxI = -1,\n AS = 0.0;\n\n for (var _j = 0; _j < n; _j++) {\n old[_j] = R[_i8 * n + _j];\n AS = A[_i8 * n + _j] + S[_i8 * n + _j];\n\n if (AS >= max) {\n max2 = max;\n max = AS;\n maxI = _j;\n } else if (AS > max2) {\n max2 = AS;\n }\n }\n\n for (var _j2 = 0; _j2 < n; _j2++) {\n R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2];\n }\n\n R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI];\n } // Update A availability matrix\n\n\n for (var _i9 = 0; _i9 < n; _i9++) {\n var sum = 0;\n\n for (var _j3 = 0; _j3 < n; _j3++) {\n old[_j3] = A[_j3 * n + _i9];\n Rp[_j3] = Math.max(0, R[_j3 * n + _i9]);\n sum += Rp[_j3];\n }\n\n sum -= Rp[_i9];\n Rp[_i9] = R[_i9 * n + _i9];\n sum += Rp[_i9];\n\n for (var _j4 = 0; _j4 < n; _j4++) {\n A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4];\n }\n\n A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9];\n } // Check for convergence\n\n\n var K = 0;\n\n for (var _i10 = 0; _i10 < n; _i10++) {\n var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0;\n e[iter % opts.minIterations * n + _i10] = E;\n K += E;\n }\n\n if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) {\n var _sum = 0;\n\n for (var _i11 = 0; _i11 < n; _i11++) {\n se[_i11] = 0;\n\n for (var _j5 = 0; _j5 < opts.minIterations; _j5++) {\n se[_i11] += e[_j5 * n + _i11];\n }\n\n if (se[_i11] === 0 || se[_i11] === opts.minIterations) {\n _sum++;\n }\n }\n\n if (_sum === n) {\n // then we have convergence\n break;\n }\n }\n } // Identify exemplars (cluster centers)\n\n\n var exemplarsIndices = findExemplars(n, R, A); // Assign nodes to clusters\n\n var clusterIndices = assign(n, S, exemplarsIndices);\n var clusters = {};\n\n for (var c = 0; c < exemplarsIndices.length; c++) {\n clusters[exemplarsIndices[c]] = [];\n }\n\n for (var _i12 = 0; _i12 < nodes.length; _i12++) {\n var pos = id2position[nodes[_i12].id()];\n\n var clusterIndex = clusterIndices[pos];\n\n if (clusterIndex != null) {\n // the node may have not been assigned a cluster if no valid attributes were specified\n clusters[clusterIndex].push(nodes[_i12]);\n }\n }\n\n var retClusters = new Array(exemplarsIndices.length);\n\n for (var _c = 0; _c < exemplarsIndices.length; _c++) {\n retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]);\n }\n\n return retClusters;\n };\n\n var affinityPropagation$1 = {\n affinityPropagation: affinityPropagation,\n ap: affinityPropagation\n };\n\n var hierholzerDefaults = defaults$g({\n root: undefined,\n directed: false\n });\n var elesfn$k = {\n hierholzer: function hierholzer(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n directed: args[1]\n };\n }\n\n var _hierholzerDefaults = hierholzerDefaults(options),\n root = _hierholzerDefaults.root,\n directed = _hierholzerDefaults.directed;\n\n var eles = this;\n var dflag = false;\n var oddIn;\n var oddOut;\n var startVertex;\n if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id();\n var nodes = {};\n var edges = {};\n\n if (directed) {\n eles.forEach(function (ele) {\n var id = ele.id();\n\n if (ele.isNode()) {\n var ind = ele.indegree(true);\n var outd = ele.outdegree(true);\n var d1 = ind - outd;\n var d2 = outd - ind;\n\n if (d1 == 1) {\n if (oddIn) dflag = true;else oddIn = id;\n } else if (d2 == 1) {\n if (oddOut) dflag = true;else oddOut = id;\n } else if (d2 > 1 || d1 > 1) {\n dflag = true;\n }\n\n nodes[id] = [];\n ele.outgoers().forEach(function (e) {\n if (e.isEdge()) nodes[id].push(e.id());\n });\n } else {\n edges[id] = [undefined, ele.target().id()];\n }\n });\n } else {\n eles.forEach(function (ele) {\n var id = ele.id();\n\n if (ele.isNode()) {\n var d = ele.degree(true);\n\n if (d % 2) {\n if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true;\n }\n\n nodes[id] = [];\n ele.connectedEdges().forEach(function (e) {\n return nodes[id].push(e.id());\n });\n } else {\n edges[id] = [ele.source().id(), ele.target().id()];\n }\n });\n }\n\n var result = {\n found: false,\n trail: undefined\n };\n if (dflag) return result;else if (oddOut && oddIn) {\n if (directed) {\n if (startVertex && oddOut != startVertex) {\n return result;\n }\n\n startVertex = oddOut;\n } else {\n if (startVertex && oddOut != startVertex && oddIn != startVertex) {\n return result;\n } else if (!startVertex) {\n startVertex = oddOut;\n }\n }\n } else {\n if (!startVertex) startVertex = eles[0].id();\n }\n\n var walk = function walk(v) {\n var currentNode = v;\n var subtour = [v];\n var adj, adjTail, adjHead;\n\n while (nodes[currentNode].length) {\n adj = nodes[currentNode].shift();\n adjTail = edges[adj][0];\n adjHead = edges[adj][1];\n\n if (currentNode != adjHead) {\n nodes[adjHead] = nodes[adjHead].filter(function (e) {\n return e != adj;\n });\n currentNode = adjHead;\n } else if (!directed && currentNode != adjTail) {\n nodes[adjTail] = nodes[adjTail].filter(function (e) {\n return e != adj;\n });\n currentNode = adjTail;\n }\n\n subtour.unshift(adj);\n subtour.unshift(currentNode);\n }\n\n return subtour;\n };\n\n var trail = [];\n var subtour = [];\n subtour = walk(startVertex);\n\n while (subtour.length != 1) {\n if (nodes[subtour[0]].length == 0) {\n trail.unshift(eles.getElementById(subtour.shift()));\n trail.unshift(eles.getElementById(subtour.shift()));\n } else {\n subtour = walk(subtour.shift()).concat(subtour);\n }\n }\n\n trail.unshift(eles.getElementById(subtour.shift())); // final node\n\n for (var d in nodes) {\n if (nodes[d].length) {\n return result;\n }\n }\n\n result.found = true;\n result.trail = this.spawn(trail, true);\n return result;\n }\n };\n\n var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() {\n var eles = this;\n var nodes = {};\n var id = 0;\n var edgeCount = 0;\n var components = [];\n var stack = [];\n var visitedEdges = {};\n\n var buildComponent = function buildComponent(x, y) {\n var i = stack.length - 1;\n var cutset = [];\n var component = eles.spawn();\n\n while (stack[i].x != x || stack[i].y != y) {\n cutset.push(stack.pop().edge);\n i--;\n }\n\n cutset.push(stack.pop().edge);\n cutset.forEach(function (edge) {\n var connectedNodes = edge.connectedNodes().intersection(eles);\n component.merge(edge);\n connectedNodes.forEach(function (node) {\n var nodeId = node.id();\n var connectedEdges = node.connectedEdges().intersection(eles);\n component.merge(node);\n\n if (!nodes[nodeId].cutVertex) {\n component.merge(connectedEdges);\n } else {\n component.merge(connectedEdges.filter(function (edge) {\n return edge.isLoop();\n }));\n }\n });\n });\n components.push(component);\n };\n\n var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) {\n if (root === parent) edgeCount += 1;\n nodes[currentNode] = {\n id: id,\n low: id++,\n cutVertex: false\n };\n var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles);\n\n if (edges.size() === 0) {\n components.push(eles.spawn(eles.getElementById(currentNode)));\n } else {\n var sourceId, targetId, otherNodeId, edgeId;\n edges.forEach(function (edge) {\n sourceId = edge.source().id();\n targetId = edge.target().id();\n otherNodeId = sourceId === currentNode ? targetId : sourceId;\n\n if (otherNodeId !== parent) {\n edgeId = edge.id();\n\n if (!visitedEdges[edgeId]) {\n visitedEdges[edgeId] = true;\n stack.push({\n x: currentNode,\n y: otherNodeId,\n edge: edge\n });\n }\n\n if (!(otherNodeId in nodes)) {\n biconnectedSearch(root, otherNodeId, currentNode);\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low);\n\n if (nodes[currentNode].id <= nodes[otherNodeId].low) {\n nodes[currentNode].cutVertex = true;\n buildComponent(currentNode, otherNodeId);\n }\n } else {\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id);\n }\n }\n });\n }\n };\n\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n\n if (!(nodeId in nodes)) {\n edgeCount = 0;\n biconnectedSearch(nodeId, nodeId);\n nodes[nodeId].cutVertex = edgeCount > 1;\n }\n }\n });\n var cutVertices = Object.keys(nodes).filter(function (id) {\n return nodes[id].cutVertex;\n }).map(function (id) {\n return eles.getElementById(id);\n });\n return {\n cut: eles.spawn(cutVertices),\n components: components\n };\n };\n\n var hopcroftTarjanBiconnected$1 = {\n hopcroftTarjanBiconnected: hopcroftTarjanBiconnected,\n htbc: hopcroftTarjanBiconnected,\n htb: hopcroftTarjanBiconnected,\n hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected\n };\n\n var tarjanStronglyConnected = function tarjanStronglyConnected() {\n var eles = this;\n var nodes = {};\n var index = 0;\n var components = [];\n var stack = [];\n var cut = eles.spawn(eles);\n\n var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) {\n stack.push(sourceNodeId);\n nodes[sourceNodeId] = {\n index: index,\n low: index++,\n explored: false\n };\n var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles);\n connectedEdges.forEach(function (edge) {\n var targetNodeId = edge.target().id();\n\n if (targetNodeId !== sourceNodeId) {\n if (!(targetNodeId in nodes)) {\n stronglyConnectedSearch(targetNodeId);\n }\n\n if (!nodes[targetNodeId].explored) {\n nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low);\n }\n }\n });\n\n if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) {\n var componentNodes = eles.spawn();\n\n for (;;) {\n var nodeId = stack.pop();\n componentNodes.merge(eles.getElementById(nodeId));\n nodes[nodeId].low = nodes[sourceNodeId].index;\n nodes[nodeId].explored = true;\n\n if (nodeId === sourceNodeId) {\n break;\n }\n }\n\n var componentEdges = componentNodes.edgesWith(componentNodes);\n var component = componentNodes.merge(componentEdges);\n components.push(component);\n cut = cut.difference(component);\n }\n };\n\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n\n if (!(nodeId in nodes)) {\n stronglyConnectedSearch(nodeId);\n }\n }\n });\n return {\n cut: cut,\n components: components\n };\n };\n\n var tarjanStronglyConnected$1 = {\n tarjanStronglyConnected: tarjanStronglyConnected,\n tsc: tarjanStronglyConnected,\n tscc: tarjanStronglyConnected,\n tarjanStronglyConnectedComponents: tarjanStronglyConnected\n };\n\n var elesfn$j = {};\n [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) {\n extend(elesfn$j, props);\n });\n\n /*!\n Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable\n Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)\n Licensed under The MIT License (http://opensource.org/licenses/MIT)\n */\n\n /* promise states [Promises/A+ 2.1] */\n var STATE_PENDING = 0;\n /* [Promises/A+ 2.1.1] */\n\n var STATE_FULFILLED = 1;\n /* [Promises/A+ 2.1.2] */\n\n var STATE_REJECTED = 2;\n /* [Promises/A+ 2.1.3] */\n\n /* promise object constructor */\n\n var api = function api(executor) {\n /* optionally support non-constructor/plain-function call */\n if (!(this instanceof api)) return new api(executor);\n /* initialize object */\n\n this.id = 'Thenable/1.0.7';\n this.state = STATE_PENDING;\n /* initial state */\n\n this.fulfillValue = undefined;\n /* initial value */\n\n /* [Promises/A+ 1.3, 2.1.2.2] */\n\n this.rejectReason = undefined;\n /* initial reason */\n\n /* [Promises/A+ 1.5, 2.1.3.2] */\n\n this.onFulfilled = [];\n /* initial handlers */\n\n this.onRejected = [];\n /* initial handlers */\n\n /* provide optional information-hiding proxy */\n\n this.proxy = {\n then: this.then.bind(this)\n };\n /* support optional executor function */\n\n if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this));\n };\n /* promise API methods */\n\n\n api.prototype = {\n /* promise resolving methods */\n fulfill: function fulfill(value) {\n return deliver(this, STATE_FULFILLED, 'fulfillValue', value);\n },\n reject: function reject(value) {\n return deliver(this, STATE_REJECTED, 'rejectReason', value);\n },\n\n /* \"The then Method\" [Promises/A+ 1.1, 1.2, 2.2] */\n then: function then(onFulfilled, onRejected) {\n var curr = this;\n var next = new api();\n /* [Promises/A+ 2.2.7] */\n\n curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill'));\n /* [Promises/A+ 2.2.2/2.2.6] */\n\n curr.onRejected.push(resolver(onRejected, next, 'reject'));\n /* [Promises/A+ 2.2.3/2.2.6] */\n\n execute(curr);\n return next.proxy;\n /* [Promises/A+ 2.2.7, 3.3] */\n }\n };\n /* deliver an action */\n\n var deliver = function deliver(curr, state, name, value) {\n if (curr.state === STATE_PENDING) {\n curr.state = state;\n /* [Promises/A+ 2.1.2.1, 2.1.3.1] */\n\n curr[name] = value;\n /* [Promises/A+ 2.1.2.2, 2.1.3.2] */\n\n execute(curr);\n }\n\n return curr;\n };\n /* execute all handlers */\n\n\n var execute = function execute(curr) {\n if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason);\n };\n /* execute particular set of handlers */\n\n\n var execute_handlers = function execute_handlers(curr, name, value) {\n /* global setImmediate: true */\n\n /* global setTimeout: true */\n\n /* short-circuit processing */\n if (curr[name].length === 0) return;\n /* iterate over all handlers, exactly once */\n\n var handlers = curr[name];\n curr[name] = [];\n /* [Promises/A+ 2.2.2.3, 2.2.3.3] */\n\n var func = function func() {\n for (var i = 0; i < handlers.length; i++) {\n handlers[i](value);\n }\n /* [Promises/A+ 2.2.5] */\n\n };\n /* execute procedure asynchronously */\n\n /* [Promises/A+ 2.2.4, 3.1] */\n\n\n if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0);\n };\n /* generate a resolver function */\n\n\n var resolver = function resolver(cb, next, method) {\n return function (value) {\n if (typeof cb !== 'function')\n /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */\n next[method].call(next, value);\n /* [Promises/A+ 2.2.7.3, 2.2.7.4] */\n else {\n var result;\n\n try {\n result = cb(value);\n }\n /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */\n catch (e) {\n next.reject(e);\n /* [Promises/A+ 2.2.7.2] */\n\n return;\n }\n\n resolve(next, result);\n /* [Promises/A+ 2.2.7.1] */\n }\n };\n };\n /* \"Promise Resolution Procedure\" */\n\n /* [Promises/A+ 2.3] */\n\n\n var resolve = function resolve(promise, x) {\n /* sanity check arguments */\n\n /* [Promises/A+ 2.3.1] */\n if (promise === x || promise.proxy === x) {\n promise.reject(new TypeError('cannot resolve promise with itself'));\n return;\n }\n /* surgically check for a \"then\" method\n (mainly to just call the \"getter\" of \"then\" only once) */\n\n\n var then;\n\n if (_typeof(x) === 'object' && x !== null || typeof x === 'function') {\n try {\n then = x.then;\n }\n /* [Promises/A+ 2.3.3.1, 3.5] */\n catch (e) {\n promise.reject(e);\n /* [Promises/A+ 2.3.3.2] */\n\n return;\n }\n }\n /* handle own Thenables [Promises/A+ 2.3.2]\n and similar \"thenables\" [Promises/A+ 2.3.3] */\n\n\n if (typeof then === 'function') {\n var resolved = false;\n\n try {\n /* call retrieved \"then\" method */\n\n /* [Promises/A+ 2.3.3.3] */\n then.call(x,\n /* resolvePromise */\n\n /* [Promises/A+ 2.3.3.3.1] */\n function (y) {\n if (resolved) return;\n resolved = true;\n /* [Promises/A+ 2.3.3.3.3] */\n\n if (y === x)\n /* [Promises/A+ 3.6] */\n promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y);\n },\n /* rejectPromise */\n\n /* [Promises/A+ 2.3.3.3.2] */\n function (r) {\n if (resolved) return;\n resolved = true;\n /* [Promises/A+ 2.3.3.3.3] */\n\n promise.reject(r);\n });\n } catch (e) {\n if (!resolved)\n /* [Promises/A+ 2.3.3.3.3] */\n promise.reject(e);\n /* [Promises/A+ 2.3.3.3.4] */\n }\n\n return;\n }\n /* handle other values */\n\n\n promise.fulfill(x);\n /* [Promises/A+ 2.3.4, 2.3.3.4] */\n }; // so we always have Promise.all()\n\n\n api.all = function (ps) {\n return new api(function (resolveAll, rejectAll) {\n var vals = new Array(ps.length);\n var doneCount = 0;\n\n var fulfill = function fulfill(i, val) {\n vals[i] = val;\n doneCount++;\n\n if (doneCount === ps.length) {\n resolveAll(vals);\n }\n };\n\n for (var i = 0; i < ps.length; i++) {\n (function (i) {\n var p = ps[i];\n var isPromise = p != null && p.then != null;\n\n if (isPromise) {\n p.then(function (val) {\n fulfill(i, val);\n }, function (err) {\n rejectAll(err);\n });\n } else {\n var val = p;\n fulfill(i, val);\n }\n })(i);\n }\n });\n };\n\n api.resolve = function (val) {\n return new api(function (resolve, reject) {\n resolve(val);\n });\n };\n\n api.reject = function (val) {\n return new api(function (resolve, reject) {\n reject(val);\n });\n };\n\n var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef\n\n var Animation = function Animation(target, opts, opts2) {\n var isCore = core(target);\n var isEle = !isCore;\n\n var _p = this._private = extend({\n duration: 1000\n }, opts, opts2);\n\n _p.target = target;\n _p.style = _p.style || _p.css;\n _p.started = false;\n _p.playing = false;\n _p.hooked = false;\n _p.applying = false;\n _p.progress = 0;\n _p.completes = [];\n _p.frames = [];\n\n if (_p.complete && fn$6(_p.complete)) {\n _p.completes.push(_p.complete);\n }\n\n if (isEle) {\n var pos = target.position();\n _p.startPosition = _p.startPosition || {\n x: pos.x,\n y: pos.y\n };\n _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style);\n }\n\n if (isCore) {\n var pan = target.pan();\n _p.startPan = {\n x: pan.x,\n y: pan.y\n };\n _p.startZoom = target.zoom();\n } // for future timeline/animations impl\n\n\n this.length = 1;\n this[0] = this;\n };\n\n var anifn = Animation.prototype;\n extend(anifn, {\n instanceString: function instanceString() {\n return 'animation';\n },\n hook: function hook() {\n var _p = this._private;\n\n if (!_p.hooked) {\n // add to target's animation queue\n var q;\n var tAni = _p.target._private.animation;\n\n if (_p.queue) {\n q = tAni.queue;\n } else {\n q = tAni.current;\n }\n\n q.push(this); // add to the animation loop pool\n\n if (elementOrCollection(_p.target)) {\n _p.target.cy().addToAnimationPool(_p.target);\n }\n\n _p.hooked = true;\n }\n\n return this;\n },\n play: function play() {\n var _p = this._private; // autorewind\n\n if (_p.progress === 1) {\n _p.progress = 0;\n }\n\n _p.playing = true;\n _p.started = false; // needs to be started by animation loop\n\n _p.stopped = false;\n this.hook(); // the animation loop will start the animation...\n\n return this;\n },\n playing: function playing() {\n return this._private.playing;\n },\n apply: function apply() {\n var _p = this._private;\n _p.applying = true;\n _p.started = false; // needs to be started by animation loop\n\n _p.stopped = false;\n this.hook(); // the animation loop will apply the animation at this progress\n\n return this;\n },\n applying: function applying() {\n return this._private.applying;\n },\n pause: function pause() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n return this;\n },\n stop: function stop() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n _p.stopped = true; // to be removed from animation queues\n\n return this;\n },\n rewind: function rewind() {\n return this.progress(0);\n },\n fastforward: function fastforward() {\n return this.progress(1);\n },\n time: function time(t) {\n var _p = this._private;\n\n if (t === undefined) {\n return _p.progress * _p.duration;\n } else {\n return this.progress(t / _p.duration);\n }\n },\n progress: function progress(p) {\n var _p = this._private;\n var wasPlaying = _p.playing;\n\n if (p === undefined) {\n return _p.progress;\n } else {\n if (wasPlaying) {\n this.pause();\n }\n\n _p.progress = p;\n _p.started = false;\n\n if (wasPlaying) {\n this.play();\n }\n }\n\n return this;\n },\n completed: function completed() {\n return this._private.progress === 1;\n },\n reverse: function reverse() {\n var _p = this._private;\n var wasPlaying = _p.playing;\n\n if (wasPlaying) {\n this.pause();\n }\n\n _p.progress = 1 - _p.progress;\n _p.started = false;\n\n var swap = function swap(a, b) {\n var _pa = _p[a];\n\n if (_pa == null) {\n return;\n }\n\n _p[a] = _p[b];\n _p[b] = _pa;\n };\n\n swap('zoom', 'startZoom');\n swap('pan', 'startPan');\n swap('position', 'startPosition'); // swap styles\n\n if (_p.style) {\n for (var i = 0; i < _p.style.length; i++) {\n var prop = _p.style[i];\n var name = prop.name;\n var startStyleProp = _p.startStyle[name];\n _p.startStyle[name] = prop;\n _p.style[i] = startStyleProp;\n }\n }\n\n if (wasPlaying) {\n this.play();\n }\n\n return this;\n },\n promise: function promise(type) {\n var _p = this._private;\n var arr;\n\n switch (type) {\n case 'frame':\n arr = _p.frames;\n break;\n\n default:\n case 'complete':\n case 'completed':\n arr = _p.completes;\n }\n\n return new Promise$1(function (resolve, reject) {\n arr.push(function () {\n resolve();\n });\n });\n }\n });\n anifn.complete = anifn.completed;\n anifn.run = anifn.play;\n anifn.running = anifn.playing;\n\n var define$3 = {\n animated: function animated() {\n return function animatedImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return false;\n }\n\n var ele = all[0];\n\n if (ele) {\n return ele._private.animation.current.length > 0;\n }\n };\n },\n // animated\n clearQueue: function clearQueue() {\n return function clearQueueImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n ele._private.animation.queue = [];\n }\n\n return this;\n };\n },\n // clearQueue\n delay: function delay() {\n return function delayImpl(time, complete) {\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n return this.animate({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n delayAnimation: function delayAnimation() {\n return function delayAnimationImpl(time, complete) {\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n return this.animation({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n animation: function animation() {\n return function animationImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var cy = this._private.cy || this;\n var isCore = !selfIsArrayLike;\n var isEles = !isCore;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n var style = cy.style();\n properties = extend({}, properties, params);\n var propertiesEmpty = Object.keys(properties).length === 0;\n\n if (propertiesEmpty) {\n return new Animation(all[0], properties); // nothing to animate\n }\n\n if (properties.duration === undefined) {\n properties.duration = 400;\n }\n\n switch (properties.duration) {\n case 'slow':\n properties.duration = 600;\n break;\n\n case 'fast':\n properties.duration = 200;\n break;\n }\n\n if (isEles) {\n properties.style = style.getPropsList(properties.style || properties.css);\n properties.css = undefined;\n }\n\n if (isEles && properties.renderedPosition != null) {\n var rpos = properties.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n properties.position = renderedToModelPosition(rpos, zoom, pan);\n } // override pan w/ panBy if set\n\n\n if (isCore && properties.panBy != null) {\n var panBy = properties.panBy;\n var cyPan = cy.pan();\n properties.pan = {\n x: cyPan.x + panBy.x,\n y: cyPan.y + panBy.y\n };\n } // override pan w/ center if set\n\n\n var center = properties.center || properties.centre;\n\n if (isCore && center != null) {\n var centerPan = cy.getCenterPan(center.eles, properties.zoom);\n\n if (centerPan != null) {\n properties.pan = centerPan;\n }\n } // override pan & zoom w/ fit if set\n\n\n if (isCore && properties.fit != null) {\n var fit = properties.fit;\n var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding);\n\n if (fitVp != null) {\n properties.pan = fitVp.pan;\n properties.zoom = fitVp.zoom;\n }\n } // override zoom (& potentially pan) w/ zoom obj if set\n\n\n if (isCore && plainObject(properties.zoom)) {\n var vp = cy.getZoomedViewport(properties.zoom);\n\n if (vp != null) {\n if (vp.zoomed) {\n properties.zoom = vp.zoom;\n }\n\n if (vp.panned) {\n properties.pan = vp.pan;\n }\n } else {\n properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed\n }\n }\n\n return new Animation(all[0], properties);\n };\n },\n // animate\n animate: function animate() {\n return function animateImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n if (params) {\n properties = extend({}, properties, params);\n } // manually hook and run the animation\n\n\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var queue = ele.animated() && (properties.queue === undefined || properties.queue);\n var ani = ele.animation(properties, queue ? {\n queue: true\n } : undefined);\n ani.play();\n }\n\n return this; // chaining\n };\n },\n // animate\n stop: function stop() {\n return function stopImpl(clearQueue, jumpToEnd) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var cy = this._private.cy || this;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var _p = ele._private;\n var anis = _p.animation.current;\n\n for (var j = 0; j < anis.length; j++) {\n var ani = anis[j];\n var ani_p = ani._private;\n\n if (jumpToEnd) {\n // next iteration of the animation loop, the animation\n // will go straight to the end and be removed\n ani_p.duration = 0;\n }\n } // clear the queue of future animations\n\n\n if (clearQueue) {\n _p.animation.queue = [];\n }\n\n if (!jumpToEnd) {\n _p.animation.current = [];\n }\n } // we have to notify (the animation loop doesn't do it for us on `stop`)\n\n\n cy.notify('draw');\n return this;\n };\n } // stop\n\n }; // define\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n var isArray_1 = isArray;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray_1(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol_1(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n var _isKey = isKey;\n\n /** `Object#toString` result references. */\n var asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject_1(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = _baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n var isFunction_1 = isFunction;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = _root['__core-js_shared__'];\n\n var _coreJsData = coreJsData;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n var _isMasked = isMasked;\n\n /** Used for built-in method references. */\n var funcProto$1 = Function.prototype;\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString$1 = funcProto$1.toString;\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n var _toSource = toSource;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used for built-in method references. */\n var funcProto = Function.prototype,\n objectProto$3 = Object.prototype;\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$3 = objectProto$3.hasOwnProperty;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty$3).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject_1(value) || _isMasked(value)) {\n return false;\n }\n var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor;\n return pattern.test(_toSource(value));\n }\n\n var _baseIsNative = baseIsNative;\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue$1(object, key) {\n return object == null ? undefined : object[key];\n }\n\n var _getValue = getValue$1;\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = _getValue(object, key);\n return _baseIsNative(value) ? value : undefined;\n }\n\n var _getNative = getNative;\n\n /* Built-in method references that are verified to be native. */\n var nativeCreate = _getNative(Object, 'create');\n\n var _nativeCreate = nativeCreate;\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = _nativeCreate ? _nativeCreate(null) : {};\n this.size = 0;\n }\n\n var _hashClear = hashClear;\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n var _hashDelete = hashDelete;\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';\n\n /** Used for built-in method references. */\n var objectProto$2 = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$2 = objectProto$2.hasOwnProperty;\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (_nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED$1 ? undefined : result;\n }\n return hasOwnProperty$2.call(data, key) ? data[key] : undefined;\n }\n\n var _hashGet = hashGet;\n\n /** Used for built-in method references. */\n var objectProto$1 = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$1 = objectProto$1.hasOwnProperty;\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$1.call(data, key);\n }\n\n var _hashHas = hashHas;\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n var _hashSet = hashSet;\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = _hashClear;\n Hash.prototype['delete'] = _hashDelete;\n Hash.prototype.get = _hashGet;\n Hash.prototype.has = _hashHas;\n Hash.prototype.set = _hashSet;\n\n var _Hash = Hash;\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n var _listCacheClear = listCacheClear;\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n var eq_1 = eq;\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq_1(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n var _assocIndexOf = assocIndexOf;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype;\n\n /** Built-in value references. */\n var splice = arrayProto.splice;\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = _assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n var _listCacheDelete = listCacheDelete;\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = _assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n var _listCacheGet = listCacheGet;\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return _assocIndexOf(this.__data__, key) > -1;\n }\n\n var _listCacheHas = listCacheHas;\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = _assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n var _listCacheSet = listCacheSet;\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = _listCacheClear;\n ListCache.prototype['delete'] = _listCacheDelete;\n ListCache.prototype.get = _listCacheGet;\n ListCache.prototype.has = _listCacheHas;\n ListCache.prototype.set = _listCacheSet;\n\n var _ListCache = ListCache;\n\n /* Built-in method references that are verified to be native. */\n var Map$1 = _getNative(_root, 'Map');\n\n var _Map = Map$1;\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new _Hash,\n 'map': new (_Map || _ListCache),\n 'string': new _Hash\n };\n }\n\n var _mapCacheClear = mapCacheClear;\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n var _isKeyable = isKeyable;\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return _isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n var _getMapData = getMapData;\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = _getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n var _mapCacheDelete = mapCacheDelete;\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return _getMapData(this, key).get(key);\n }\n\n var _mapCacheGet = mapCacheGet;\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return _getMapData(this, key).has(key);\n }\n\n var _mapCacheHas = mapCacheHas;\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = _getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n var _mapCacheSet = mapCacheSet;\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = _mapCacheClear;\n MapCache.prototype['delete'] = _mapCacheDelete;\n MapCache.prototype.get = _mapCacheGet;\n MapCache.prototype.has = _mapCacheHas;\n MapCache.prototype.set = _mapCacheSet;\n\n var _MapCache = MapCache;\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || _MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = _MapCache;\n\n var memoize_1 = memoize;\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize_1(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n var _memoizeCapped = memoizeCapped;\n\n /** Used to match property names within property paths. */\n var rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = _memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n var _stringToPath = stringToPath;\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n var _arrayMap = arrayMap;\n\n /** Used as references for various `Number` constants. */\n var INFINITY$1 = 1 / 0;\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray_1(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return _arrayMap(value, baseToString) + '';\n }\n if (isSymbol_1(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result;\n }\n\n var _baseToString = baseToString;\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString$1(value) {\n return value == null ? '' : _baseToString(value);\n }\n\n var toString_1 = toString$1;\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray_1(value)) {\n return value;\n }\n return _isKey(value, object) ? [value] : _stringToPath(toString_1(value));\n }\n\n var _castPath = castPath;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0;\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol_1(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n var _toKey = toKey;\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = _castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[_toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n var _baseGet = baseGet;\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : _baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n var get_1 = get;\n\n var defineProperty = (function() {\n try {\n var func = _getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n var _defineProperty = defineProperty;\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && _defineProperty) {\n _defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n var _baseAssignValue = baseAssignValue;\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq_1(objValue, value)) ||\n (value === undefined && !(key in object))) {\n _baseAssignValue(object, key, value);\n }\n }\n\n var _assignValue = assignValue;\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n var _isIndex = isIndex;\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject_1(object)) {\n return object;\n }\n path = _castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = _toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject_1(objValue)\n ? objValue\n : (_isIndex(path[index + 1]) ? [] : {});\n }\n }\n _assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n var _baseSet = baseSet;\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : _baseSet(object, path, value);\n }\n\n var set_1 = set;\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n var _copyArray = copyArray;\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray_1(value)) {\n return _arrayMap(value, _toKey);\n }\n return isSymbol_1(value) ? [value] : _copyArray(_stringToPath(toString_1(value)));\n }\n\n var toPath_1 = toPath;\n\n var define$2 = {\n // access data field\n data: function data(params) {\n var defaults = {\n field: 'data',\n bindingEvent: 'data',\n allowBinding: false,\n allowSetting: false,\n allowGetting: false,\n settingEvent: 'data',\n settingTriggersEvent: false,\n triggerFnName: 'trigger',\n immutableKeys: {},\n // key => true if immutable\n updateStyle: false,\n beforeGet: function beforeGet(self) {},\n beforeSet: function beforeSet(self, obj) {},\n onSet: function onSet(self) {},\n canSet: function canSet(self) {\n return true;\n }\n };\n params = extend({}, defaults, params);\n return function dataImpl(name, value) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...)\n\n if (string(name)) {\n // set or get property\n var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot \n\n var path = isPathLike && toPath_1(name); // .data('foo')\n\n if (p.allowGetting && value === undefined) {\n // get\n var ret;\n\n if (single) {\n p.beforeGet(single); // check if it's path and a field with the same name doesn't exist\n\n if (path && single._private[p.field][name] === undefined) {\n ret = get_1(single._private[p.field], path);\n } else {\n ret = single._private[p.field][name];\n }\n }\n\n return ret; // .data('foo', 'bar')\n } else if (p.allowSetting && value !== undefined) {\n // set\n var valid = !p.immutableKeys[name];\n\n if (valid) {\n var change = _defineProperty$1({}, name, value);\n\n p.beforeSet(self, change);\n\n for (var i = 0, l = all.length; i < l; i++) {\n var ele = all[i];\n\n if (p.canSet(ele)) {\n if (path && single._private[p.field][name] === undefined) {\n set_1(ele._private[p.field], path, value);\n } else {\n ele._private[p.field][name] = value;\n }\n }\n } // update mappers if asked\n\n\n if (p.updateStyle) {\n self.updateStyle();\n } // call onSet callback\n\n\n p.onSet(self);\n\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n }\n }\n } // .data({ 'foo': 'bar' })\n\n } else if (p.allowSetting && plainObject(name)) {\n // extend\n var obj = name;\n var k, v;\n var keys = Object.keys(obj);\n p.beforeSet(self, obj);\n\n for (var _i = 0; _i < keys.length; _i++) {\n k = keys[_i];\n v = obj[k];\n\n var _valid = !p.immutableKeys[k];\n\n if (_valid) {\n for (var j = 0; j < all.length; j++) {\n var _ele = all[j];\n\n if (p.canSet(_ele)) {\n _ele._private[p.field][k] = v;\n }\n }\n }\n } // update mappers if asked\n\n\n if (p.updateStyle) {\n self.updateStyle();\n } // call onSet callback\n\n\n p.onSet(self);\n\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n } // .data(function(){ ... })\n\n } else if (p.allowBinding && fn$6(name)) {\n // bind to event\n var fn = name;\n self.on(p.bindingEvent, fn); // .data()\n } else if (p.allowGetting && name === undefined) {\n // get whole object\n var _ret;\n\n if (single) {\n p.beforeGet(single);\n _ret = single._private[p.field];\n }\n\n return _ret;\n }\n\n return self; // maintain chainability\n }; // function\n },\n // data\n // remove data field\n removeData: function removeData(params) {\n var defaults = {\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: false,\n immutableKeys: {} // key => true if immutable\n\n };\n params = extend({}, defaults, params);\n return function removeDataImpl(names) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n // .removeData('foo bar')\n\n if (string(names)) {\n // then get the list of keys, and delete them\n var keys = names.split(/\\s+/);\n var l = keys.length;\n\n for (var i = 0; i < l; i++) {\n // delete each non-empty key\n var key = keys[i];\n\n if (emptyString(key)) {\n continue;\n }\n\n var valid = !p.immutableKeys[key]; // not valid if immutable\n\n if (valid) {\n for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) {\n all[i_a]._private[p.field][key] = undefined;\n }\n }\n }\n\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n } // .removeData()\n\n } else if (names === undefined) {\n // then delete all keys\n for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) {\n var _privateFields = all[_i_a]._private[p.field];\n\n var _keys = Object.keys(_privateFields);\n\n for (var _i2 = 0; _i2 < _keys.length; _i2++) {\n var _key = _keys[_i2];\n var validKeyToDelete = !p.immutableKeys[_key];\n\n if (validKeyToDelete) {\n _privateFields[_key] = undefined;\n }\n }\n }\n\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n }\n }\n\n return self; // maintain chaining\n }; // function\n } // removeData\n\n }; // define\n\n var define$1 = {\n eventAliasesOn: function eventAliasesOn(proto) {\n var p = proto;\n p.addListener = p.listen = p.bind = p.on;\n p.unlisten = p.unbind = p.off = p.removeListener;\n p.trigger = p.emit; // this is just a wrapper alias of .on()\n\n p.pon = p.promiseOn = function (events, selector) {\n var self = this;\n var args = Array.prototype.slice.call(arguments, 0);\n return new Promise$1(function (resolve, reject) {\n var callback = function callback(e) {\n self.off.apply(self, offArgs);\n resolve(e);\n };\n\n var onArgs = args.concat([callback]);\n var offArgs = onArgs.concat([]);\n self.on.apply(self, onArgs);\n });\n };\n }\n }; // define\n\n // use this module to cherry pick functions into your prototype\n var define = {};\n [define$3, define$2, define$1].forEach(function (m) {\n extend(define, m);\n });\n\n var elesfn$i = {\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop()\n };\n\n var elesfn$h = {\n classes: function classes(_classes) {\n var self = this;\n\n if (_classes === undefined) {\n var ret = [];\n\n self[0]._private.classes.forEach(function (cls) {\n return ret.push(cls);\n });\n\n return ret;\n } else if (!array(_classes)) {\n // extract classes from string\n _classes = (_classes || '').match(/\\S+/g) || [];\n }\n\n var changed = [];\n var classesSet = new Set$1(_classes); // check and update each ele\n\n for (var j = 0; j < self.length; j++) {\n var ele = self[j];\n var _p = ele._private;\n var eleClasses = _p.classes;\n var changedEle = false; // check if ele has all of the passed classes\n\n for (var i = 0; i < _classes.length; i++) {\n var cls = _classes[i];\n var eleHasClass = eleClasses.has(cls);\n\n if (!eleHasClass) {\n changedEle = true;\n break;\n }\n } // check if ele has classes outside of those passed\n\n\n if (!changedEle) {\n changedEle = eleClasses.size !== _classes.length;\n }\n\n if (changedEle) {\n _p.classes = classesSet;\n changed.push(ele);\n }\n } // trigger update style on those eles that had class changes\n\n\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n\n return self;\n },\n addClass: function addClass(classes) {\n return this.toggleClass(classes, true);\n },\n hasClass: function hasClass(className) {\n var ele = this[0];\n return ele != null && ele._private.classes.has(className);\n },\n toggleClass: function toggleClass(classes, toggle) {\n if (!array(classes)) {\n // extract classes from string\n classes = classes.match(/\\S+/g) || [];\n }\n\n var self = this;\n var toggleUndefd = toggle === undefined;\n var changed = []; // eles who had classes changed\n\n for (var i = 0, il = self.length; i < il; i++) {\n var ele = self[i];\n var eleClasses = ele._private.classes;\n var changedEle = false;\n\n for (var j = 0; j < classes.length; j++) {\n var cls = classes[j];\n var hasClass = eleClasses.has(cls);\n var changedNow = false;\n\n if (toggle || toggleUndefd && !hasClass) {\n eleClasses.add(cls);\n changedNow = true;\n } else if (!toggle || toggleUndefd && hasClass) {\n eleClasses[\"delete\"](cls);\n changedNow = true;\n }\n\n if (!changedEle && changedNow) {\n changed.push(ele);\n changedEle = true;\n }\n } // for j classes\n\n } // for i eles\n // trigger update style on those eles that had class changes\n\n\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n\n return self;\n },\n removeClass: function removeClass(classes) {\n return this.toggleClass(classes, false);\n },\n flashClass: function flashClass(classes, duration) {\n var self = this;\n\n if (duration == null) {\n duration = 250;\n } else if (duration === 0) {\n return self; // nothing to do really\n }\n\n self.addClass(classes);\n setTimeout(function () {\n self.removeClass(classes);\n }, duration);\n return self;\n }\n };\n elesfn$h.className = elesfn$h.classNames = elesfn$h.classes;\n\n var tokens = {\n metaChar: '[\\\\!\\\\\"\\\\#\\\\$\\\\%\\\\&\\\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\.\\\\/\\\\:\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\[\\\\]\\\\^\\\\`\\\\{\\\\|\\\\}\\\\~]',\n // chars we need to escape in let names, etc\n comparatorOp: '=|\\\\!=|>|>=|<|<=|\\\\$=|\\\\^=|\\\\*=',\n // binary comparison op (used in data selectors)\n boolOp: '\\\\?|\\\\!|\\\\^',\n // boolean (unary) operators (used in data selectors)\n string: '\"(?:\\\\\\\\\"|[^\"])*\"' + '|' + \"'(?:\\\\\\\\'|[^'])*'\",\n // string literals (used in data selectors) -- doublequotes | singlequotes\n number: number,\n // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123\n meta: 'degree|indegree|outdegree',\n // allowed metadata fields (i.e. allowed functions to use from Collection)\n separator: '\\\\s*,\\\\s*',\n // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass\n descendant: '\\\\s+',\n child: '\\\\s+>\\\\s+',\n subject: '\\\\$',\n group: 'node|edge|\\\\*',\n directedEdge: '\\\\s+->\\\\s+',\n undirectedEdge: '\\\\s+<->\\\\s+'\n };\n tokens.variable = '(?:[\\\\w-.]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods\n\n tokens.className = '(?:[\\\\w-]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name\n\n tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number\n\n tokens.id = tokens.variable; // an element id (follows variable conventions)\n\n (function () {\n var ops, op, i; // add @ variants to comparatorOp\n\n ops = tokens.comparatorOp.split('|');\n\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n tokens.comparatorOp += '|@' + op;\n } // add ! variants to comparatorOp\n\n\n ops = tokens.comparatorOp.split('|');\n\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n\n if (op.indexOf('!') >= 0) {\n continue;\n } // skip ops that explicitly contain !\n\n\n if (op === '=') {\n continue;\n } // skip = b/c != is explicitly defined\n\n\n tokens.comparatorOp += '|\\\\!' + op;\n }\n })();\n\n /**\n * Make a new query object\n *\n * @prop type {Type} The type enum (int) of the query\n * @prop checks List of checks to make against an ele to test for a match\n */\n var newQuery = function newQuery() {\n return {\n checks: []\n };\n };\n\n /**\n * A check type enum-like object. Uses integer values for fast match() lookup.\n * The ordering does not matter as long as the ints are unique.\n */\n var Type = {\n /** E.g. node */\n GROUP: 0,\n\n /** A collection of elements */\n COLLECTION: 1,\n\n /** A filter(ele) function */\n FILTER: 2,\n\n /** E.g. [foo > 1] */\n DATA_COMPARE: 3,\n\n /** E.g. [foo] */\n DATA_EXIST: 4,\n\n /** E.g. [?foo] */\n DATA_BOOL: 5,\n\n /** E.g. [[degree > 2]] */\n META_COMPARE: 6,\n\n /** E.g. :selected */\n STATE: 7,\n\n /** E.g. #foo */\n ID: 8,\n\n /** E.g. .foo */\n CLASS: 9,\n\n /** E.g. #foo <-> #bar */\n UNDIRECTED_EDGE: 10,\n\n /** E.g. #foo -> #bar */\n DIRECTED_EDGE: 11,\n\n /** E.g. $#foo -> #bar */\n NODE_SOURCE: 12,\n\n /** E.g. #foo -> $#bar */\n NODE_TARGET: 13,\n\n /** E.g. $#foo <-> #bar */\n NODE_NEIGHBOR: 14,\n\n /** E.g. #foo > #bar */\n CHILD: 15,\n\n /** E.g. #foo #bar */\n DESCENDANT: 16,\n\n /** E.g. $#foo > #bar */\n PARENT: 17,\n\n /** E.g. $#foo #bar */\n ANCESTOR: 18,\n\n /** E.g. #foo > $bar > #baz */\n COMPOUND_SPLIT: 19,\n\n /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */\n TRUE: 20\n };\n\n var stateSelectors = [{\n selector: ':selected',\n matches: function matches(ele) {\n return ele.selected();\n }\n }, {\n selector: ':unselected',\n matches: function matches(ele) {\n return !ele.selected();\n }\n }, {\n selector: ':selectable',\n matches: function matches(ele) {\n return ele.selectable();\n }\n }, {\n selector: ':unselectable',\n matches: function matches(ele) {\n return !ele.selectable();\n }\n }, {\n selector: ':locked',\n matches: function matches(ele) {\n return ele.locked();\n }\n }, {\n selector: ':unlocked',\n matches: function matches(ele) {\n return !ele.locked();\n }\n }, {\n selector: ':visible',\n matches: function matches(ele) {\n return ele.visible();\n }\n }, {\n selector: ':hidden',\n matches: function matches(ele) {\n return !ele.visible();\n }\n }, {\n selector: ':transparent',\n matches: function matches(ele) {\n return ele.transparent();\n }\n }, {\n selector: ':grabbed',\n matches: function matches(ele) {\n return ele.grabbed();\n }\n }, {\n selector: ':free',\n matches: function matches(ele) {\n return !ele.grabbed();\n }\n }, {\n selector: ':removed',\n matches: function matches(ele) {\n return ele.removed();\n }\n }, {\n selector: ':inside',\n matches: function matches(ele) {\n return !ele.removed();\n }\n }, {\n selector: ':grabbable',\n matches: function matches(ele) {\n return ele.grabbable();\n }\n }, {\n selector: ':ungrabbable',\n matches: function matches(ele) {\n return !ele.grabbable();\n }\n }, {\n selector: ':animated',\n matches: function matches(ele) {\n return ele.animated();\n }\n }, {\n selector: ':unanimated',\n matches: function matches(ele) {\n return !ele.animated();\n }\n }, {\n selector: ':parent',\n matches: function matches(ele) {\n return ele.isParent();\n }\n }, {\n selector: ':childless',\n matches: function matches(ele) {\n return ele.isChildless();\n }\n }, {\n selector: ':child',\n matches: function matches(ele) {\n return ele.isChild();\n }\n }, {\n selector: ':orphan',\n matches: function matches(ele) {\n return ele.isOrphan();\n }\n }, {\n selector: ':nonorphan',\n matches: function matches(ele) {\n return ele.isChild();\n }\n }, {\n selector: ':compound',\n matches: function matches(ele) {\n if (ele.isNode()) {\n return ele.isParent();\n } else {\n return ele.source().isParent() || ele.target().isParent();\n }\n }\n }, {\n selector: ':loop',\n matches: function matches(ele) {\n return ele.isLoop();\n }\n }, {\n selector: ':simple',\n matches: function matches(ele) {\n return ele.isSimple();\n }\n }, {\n selector: ':active',\n matches: function matches(ele) {\n return ele.active();\n }\n }, {\n selector: ':inactive',\n matches: function matches(ele) {\n return !ele.active();\n }\n }, {\n selector: ':backgrounding',\n matches: function matches(ele) {\n return ele.backgrounding();\n }\n }, {\n selector: ':nonbackgrounding',\n matches: function matches(ele) {\n return !ele.backgrounding();\n }\n }].sort(function (a, b) {\n // n.b. selectors that are starting substrings of others must have the longer ones first\n return descending(a.selector, b.selector);\n });\n\n var lookup = function () {\n var selToFn = {};\n var s;\n\n for (var i = 0; i < stateSelectors.length; i++) {\n s = stateSelectors[i];\n selToFn[s.selector] = s.matches;\n }\n\n return selToFn;\n }();\n\n var stateSelectorMatches = function stateSelectorMatches(sel, ele) {\n return lookup[sel](ele);\n };\n var stateSelectorRegex = '(' + stateSelectors.map(function (s) {\n return s.selector;\n }).join('|') + ')';\n\n // so that values get compared properly in Selector.filter()\n\n var cleanMetaChars = function cleanMetaChars(str) {\n return str.replace(new RegExp('\\\\\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) {\n return $1;\n });\n };\n\n var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) {\n selector[selector.length - 1] = replacementQuery;\n }; // NOTE: add new expression syntax here to have it recognised by the parser;\n // - a query contains all adjacent (i.e. no separator in between) expressions;\n // - the current query is stored in selector[i]\n // - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward\n\n\n var exprs = [{\n name: 'group',\n // just used for identifying when debugging\n query: true,\n regex: '(' + tokens.group + ')',\n populate: function populate(selector, query, _ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n group = _ref2[0];\n\n query.checks.push({\n type: Type.GROUP,\n value: group === '*' ? group : group + 's'\n });\n }\n }, {\n name: 'state',\n query: true,\n regex: stateSelectorRegex,\n populate: function populate(selector, query, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 1),\n state = _ref4[0];\n\n query.checks.push({\n type: Type.STATE,\n value: state\n });\n }\n }, {\n name: 'id',\n query: true,\n regex: '\\\\#(' + tokens.id + ')',\n populate: function populate(selector, query, _ref5) {\n var _ref6 = _slicedToArray(_ref5, 1),\n id = _ref6[0];\n\n query.checks.push({\n type: Type.ID,\n value: cleanMetaChars(id)\n });\n }\n }, {\n name: 'className',\n query: true,\n regex: '\\\\.(' + tokens.className + ')',\n populate: function populate(selector, query, _ref7) {\n var _ref8 = _slicedToArray(_ref7, 1),\n className = _ref8[0];\n\n query.checks.push({\n type: Type.CLASS,\n value: cleanMetaChars(className)\n });\n }\n }, {\n name: 'dataExists',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref9) {\n var _ref10 = _slicedToArray(_ref9, 1),\n variable = _ref10[0];\n\n query.checks.push({\n type: Type.DATA_EXIST,\n field: cleanMetaChars(variable)\n });\n }\n }, {\n name: 'dataCompare',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.value + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref11) {\n var _ref12 = _slicedToArray(_ref11, 3),\n variable = _ref12[0],\n comparatorOp = _ref12[1],\n value = _ref12[2];\n\n var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null;\n\n if (valueIsString) {\n value = value.substring(1, value.length - 1);\n } else {\n value = parseFloat(value);\n }\n\n query.checks.push({\n type: Type.DATA_COMPARE,\n field: cleanMetaChars(variable),\n operator: comparatorOp,\n value: value\n });\n }\n }, {\n name: 'dataBool',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.boolOp + ')\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref13) {\n var _ref14 = _slicedToArray(_ref13, 2),\n boolOp = _ref14[0],\n variable = _ref14[1];\n\n query.checks.push({\n type: Type.DATA_BOOL,\n field: cleanMetaChars(variable),\n operator: boolOp\n });\n }\n }, {\n name: 'metaCompare',\n query: true,\n regex: '\\\\[\\\\[\\\\s*(' + tokens.meta + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.number + ')\\\\s*\\\\]\\\\]',\n populate: function populate(selector, query, _ref15) {\n var _ref16 = _slicedToArray(_ref15, 3),\n meta = _ref16[0],\n comparatorOp = _ref16[1],\n number = _ref16[2];\n\n query.checks.push({\n type: Type.META_COMPARE,\n field: cleanMetaChars(meta),\n operator: comparatorOp,\n value: parseFloat(number)\n });\n }\n }, {\n name: 'nextQuery',\n separator: true,\n regex: tokens.separator,\n populate: function populate(selector, query) {\n var currentSubject = selector.currentSubject;\n var edgeCount = selector.edgeCount;\n var compoundCount = selector.compoundCount;\n var lastQ = selector[selector.length - 1];\n\n if (currentSubject != null) {\n lastQ.subject = currentSubject;\n selector.currentSubject = null;\n }\n\n lastQ.edgeCount = edgeCount;\n lastQ.compoundCount = compoundCount;\n selector.edgeCount = 0;\n selector.compoundCount = 0; // go on to next query\n\n var nextQuery = selector[selector.length++] = newQuery();\n return nextQuery; // this is the new query to be filled by the following exprs\n }\n }, {\n name: 'directedEdge',\n separator: true,\n regex: tokens.directedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.DIRECTED_EDGE,\n source: source,\n target: target\n }); // the query in the selector should be the edge rather than the source\n\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++; // we're now populating the target query with expressions that follow\n\n return target;\n } else {\n // source/target\n var srcTgtQ = newQuery();\n var _source = query;\n\n var _target = newQuery();\n\n srcTgtQ.checks.push({\n type: Type.NODE_SOURCE,\n source: _source,\n target: _target\n }); // the query in the selector should be the neighbourhood rather than the node\n\n replaceLastQuery(selector, query, srcTgtQ);\n selector.edgeCount++;\n return _target; // now populating the target with the following expressions\n }\n }\n }, {\n name: 'undirectedEdge',\n separator: true,\n regex: tokens.undirectedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.UNDIRECTED_EDGE,\n nodes: [source, target]\n }); // the query in the selector should be the edge rather than the source\n\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++; // we're now populating the target query with expressions that follow\n\n return target;\n } else {\n // neighbourhood\n var nhoodQ = newQuery();\n var node = query;\n var neighbor = newQuery();\n nhoodQ.checks.push({\n type: Type.NODE_NEIGHBOR,\n node: node,\n neighbor: neighbor\n }); // the query in the selector should be the neighbourhood rather than the node\n\n replaceLastQuery(selector, query, nhoodQ);\n return neighbor; // now populating the neighbor with following expressions\n }\n }\n }, {\n name: 'child',\n separator: true,\n regex: tokens.child,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: child query\n var parentChildQuery = newQuery();\n var child = newQuery();\n var parent = selector[selector.length - 1];\n parentChildQuery.checks.push({\n type: Type.CHILD,\n parent: parent,\n child: child\n }); // the query in the selector should be the '>' itself\n\n replaceLastQuery(selector, query, parentChildQuery);\n selector.compoundCount++; // we're now populating the child query with expressions that follow\n\n return child;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n\n var _child = newQuery();\n\n var _parent = newQuery(); // set up the root compound q\n\n\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n }); // populate the subject and replace the q at the old spot (within left) with TRUE\n\n subject.checks = query.checks; // take the checks from the left\n\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n // set up the right q\n\n _parent.checks.push({\n type: Type.TRUE\n }); // parent implicitly refs the subject\n\n\n right.checks.push({\n type: Type.PARENT,\n // type is swapped on right side queries\n parent: _parent,\n child: _child // empty for now\n\n });\n replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query`\n\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _child; // now populating the right side's child\n } else {\n // parent query\n // info for parent query\n var _parent2 = newQuery();\n\n var _child2 = newQuery();\n\n var pcQChecks = [{\n type: Type.PARENT,\n parent: _parent2,\n child: _child2\n }]; // the parent-child query takes the place of the query previously being populated\n\n _parent2.checks = query.checks; // the previous query contains the checks for the parent\n\n query.checks = pcQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _child2; // we're now populating the child\n }\n }\n }, {\n name: 'descendant',\n separator: true,\n regex: tokens.descendant,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: descendant query\n var ancChQuery = newQuery();\n var descendant = newQuery();\n var ancestor = selector[selector.length - 1];\n ancChQuery.checks.push({\n type: Type.DESCENDANT,\n ancestor: ancestor,\n descendant: descendant\n }); // the query in the selector should be the '>' itself\n\n replaceLastQuery(selector, query, ancChQuery);\n selector.compoundCount++; // we're now populating the descendant query with expressions that follow\n\n return descendant;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n\n var _descendant = newQuery();\n\n var _ancestor = newQuery(); // set up the root compound q\n\n\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n }); // populate the subject and replace the q at the old spot (within left) with TRUE\n\n subject.checks = query.checks; // take the checks from the left\n\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n // set up the right q\n\n _ancestor.checks.push({\n type: Type.TRUE\n }); // ancestor implicitly refs the subject\n\n\n right.checks.push({\n type: Type.ANCESTOR,\n // type is swapped on right side queries\n ancestor: _ancestor,\n descendant: _descendant // empty for now\n\n });\n replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query`\n\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _descendant; // now populating the right side's descendant\n } else {\n // ancestor query\n // info for parent query\n var _ancestor2 = newQuery();\n\n var _descendant2 = newQuery();\n\n var adQChecks = [{\n type: Type.ANCESTOR,\n ancestor: _ancestor2,\n descendant: _descendant2\n }]; // the parent-child query takes the place of the query previously being populated\n\n _ancestor2.checks = query.checks; // the previous query contains the checks for the parent\n\n query.checks = adQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _descendant2; // we're now populating the child\n }\n }\n }, {\n name: 'subject',\n modifier: true,\n regex: tokens.subject,\n populate: function populate(selector, query) {\n if (selector.currentSubject != null && selector.currentSubject !== query) {\n warn('Redefinition of subject in selector `' + selector.toString() + '`');\n return false;\n }\n\n selector.currentSubject = query;\n var topQ = selector[selector.length - 1];\n var topChk = topQ.checks[0];\n var topType = topChk == null ? null : topChk.type;\n\n if (topType === Type.DIRECTED_EDGE) {\n // directed edge with subject on the target\n // change to target node check\n topChk.type = Type.NODE_TARGET;\n } else if (topType === Type.UNDIRECTED_EDGE) {\n // undirected edge with subject on the second node\n // change to neighbor check\n topChk.type = Type.NODE_NEIGHBOR;\n topChk.node = topChk.nodes[1]; // second node is subject\n\n topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type\n\n topChk.nodes = null;\n }\n }\n }];\n exprs.forEach(function (e) {\n return e.regexObj = new RegExp('^' + e.regex);\n });\n\n /**\n * Of all the expressions, find the first match in the remaining text.\n * @param {string} remaining The remaining text to parse\n * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }`\n */\n\n var consumeExpr = function consumeExpr(remaining) {\n var expr;\n var match;\n var name;\n\n for (var j = 0; j < exprs.length; j++) {\n var e = exprs[j];\n var n = e.name;\n var m = remaining.match(e.regexObj);\n\n if (m != null) {\n match = m;\n expr = e;\n name = n;\n var consumed = m[0];\n remaining = remaining.substring(consumed.length);\n break; // we've consumed one expr, so we can return now\n }\n }\n\n return {\n expr: expr,\n match: match,\n name: name,\n remaining: remaining\n };\n };\n /**\n * Consume all the leading whitespace\n * @param {string} remaining The text to consume\n * @returns The text with the leading whitespace removed\n */\n\n\n var consumeWhitespace = function consumeWhitespace(remaining) {\n var match = remaining.match(/^\\s+/);\n\n if (match) {\n var consumed = match[0];\n remaining = remaining.substring(consumed.length);\n }\n\n return remaining;\n };\n /**\n * Parse the string and store the parsed representation in the Selector.\n * @param {string} selector The selector string\n * @returns `true` if the selector was successfully parsed, `false` otherwise\n */\n\n\n var parse = function parse(selector) {\n var self = this;\n var remaining = self.inputText = selector;\n var currentQuery = self[0] = newQuery();\n self.length = 1;\n remaining = consumeWhitespace(remaining); // get rid of leading whitespace\n\n for (;;) {\n var exprInfo = consumeExpr(remaining);\n\n if (exprInfo.expr == null) {\n warn('The selector `' + selector + '`is invalid');\n return false;\n } else {\n var args = exprInfo.match.slice(1); // let the token populate the selector object in currentQuery\n\n var ret = exprInfo.expr.populate(self, currentQuery, args);\n\n if (ret === false) {\n return false; // exit if population failed\n } else if (ret != null) {\n currentQuery = ret; // change the current query to be filled if the expr specifies\n }\n }\n\n remaining = exprInfo.remaining; // we're done when there's nothing left to parse\n\n if (remaining.match(/^\\s*$/)) {\n break;\n }\n }\n\n var lastQ = self[self.length - 1];\n\n if (self.currentSubject != null) {\n lastQ.subject = self.currentSubject;\n }\n\n lastQ.edgeCount = self.edgeCount;\n lastQ.compoundCount = self.compoundCount;\n\n for (var i = 0; i < self.length; i++) {\n var q = self[i]; // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations\n\n if (q.compoundCount > 0 && q.edgeCount > 0) {\n warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector');\n return false;\n }\n\n if (q.edgeCount > 1) {\n warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors');\n return false;\n } else if (q.edgeCount === 1) {\n warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.');\n }\n }\n\n return true; // success\n };\n /**\n * Get the selector represented as a string. This value uses default formatting,\n * so things like spacing may differ from the input text passed to the constructor.\n * @returns {string} The selector string\n */\n\n\n var toString = function toString() {\n if (this.toStringCache != null) {\n return this.toStringCache;\n }\n\n var clean = function clean(obj) {\n if (obj == null) {\n return '';\n } else {\n return obj;\n }\n };\n\n var cleanVal = function cleanVal(val) {\n if (string(val)) {\n return '\"' + val + '\"';\n } else {\n return clean(val);\n }\n };\n\n var space = function space(val) {\n return ' ' + val + ' ';\n };\n\n var checkToString = function checkToString(check, subject) {\n var type = check.type,\n value = check.value;\n\n switch (type) {\n case Type.GROUP:\n {\n var group = clean(value);\n return group.substring(0, group.length - 1);\n }\n\n case Type.DATA_COMPARE:\n {\n var field = check.field,\n operator = check.operator;\n return '[' + field + space(clean(operator)) + cleanVal(value) + ']';\n }\n\n case Type.DATA_BOOL:\n {\n var _operator = check.operator,\n _field = check.field;\n return '[' + clean(_operator) + _field + ']';\n }\n\n case Type.DATA_EXIST:\n {\n var _field2 = check.field;\n return '[' + _field2 + ']';\n }\n\n case Type.META_COMPARE:\n {\n var _operator2 = check.operator,\n _field3 = check.field;\n return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]';\n }\n\n case Type.STATE:\n {\n return value;\n }\n\n case Type.ID:\n {\n return '#' + value;\n }\n\n case Type.CLASS:\n {\n return '.' + value;\n }\n\n case Type.PARENT:\n case Type.CHILD:\n {\n return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject);\n }\n\n case Type.ANCESTOR:\n case Type.DESCENDANT:\n {\n return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject);\n }\n\n case Type.COMPOUND_SPLIT:\n {\n var lhs = queryToString(check.left, subject);\n var sub = queryToString(check.subject, subject);\n var rhs = queryToString(check.right, subject);\n return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs;\n }\n\n case Type.TRUE:\n {\n return '';\n }\n }\n };\n\n var queryToString = function queryToString(query, subject) {\n return query.checks.reduce(function (str, chk, i) {\n return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject);\n }, '');\n };\n\n var str = '';\n\n for (var i = 0; i < this.length; i++) {\n var query = this[i];\n str += queryToString(query, query.subject);\n\n if (this.length > 1 && i < this.length - 1) {\n str += ', ';\n }\n }\n\n this.toStringCache = str;\n return str;\n };\n var parse$1 = {\n parse: parse,\n toString: toString\n };\n\n var valCmp = function valCmp(fieldVal, operator, value) {\n var matches;\n var isFieldStr = string(fieldVal);\n var isFieldNum = number$1(fieldVal);\n var isValStr = string(value);\n var fieldStr, valStr;\n var caseInsensitive = false;\n var notExpr = false;\n var isIneqCmp = false;\n\n if (operator.indexOf('!') >= 0) {\n operator = operator.replace('!', '');\n notExpr = true;\n }\n\n if (operator.indexOf('@') >= 0) {\n operator = operator.replace('@', '');\n caseInsensitive = true;\n }\n\n if (isFieldStr || isValStr || caseInsensitive) {\n fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal;\n valStr = '' + value;\n } // if we're doing a case insensitive comparison, then we're using a STRING comparison\n // even if we're comparing numbers\n\n\n if (caseInsensitive) {\n fieldVal = fieldStr = fieldStr.toLowerCase();\n value = valStr = valStr.toLowerCase();\n }\n\n switch (operator) {\n case '*=':\n matches = fieldStr.indexOf(valStr) >= 0;\n break;\n\n case '$=':\n matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0;\n break;\n\n case '^=':\n matches = fieldStr.indexOf(valStr) === 0;\n break;\n\n case '=':\n matches = fieldVal === value;\n break;\n\n case '>':\n isIneqCmp = true;\n matches = fieldVal > value;\n break;\n\n case '>=':\n isIneqCmp = true;\n matches = fieldVal >= value;\n break;\n\n case '<':\n isIneqCmp = true;\n matches = fieldVal < value;\n break;\n\n case '<=':\n isIneqCmp = true;\n matches = fieldVal <= value;\n break;\n\n default:\n matches = false;\n break;\n } // apply the not op, but null vals for inequalities should always stay non-matching\n\n\n if (notExpr && (fieldVal != null || !isIneqCmp)) {\n matches = !matches;\n }\n\n return matches;\n };\n var boolCmp = function boolCmp(fieldVal, operator) {\n switch (operator) {\n case '?':\n return fieldVal ? true : false;\n\n case '!':\n return fieldVal ? false : true;\n\n case '^':\n return fieldVal === undefined;\n }\n };\n var existCmp = function existCmp(fieldVal) {\n return fieldVal !== undefined;\n };\n var data$1 = function data(ele, field) {\n return ele.data(field);\n };\n var meta = function meta(ele, field) {\n return ele[field]();\n };\n\n /** A lookup of `match(check, ele)` functions by `Type` int */\n\n var match = [];\n /**\n * Returns whether the query matches for the element\n * @param query The `{ type, value, ... }` query object\n * @param ele The element to compare against\n */\n\n var matches$1 = function matches(query, ele) {\n return query.checks.every(function (chk) {\n return match[chk.type](chk, ele);\n });\n };\n\n match[Type.GROUP] = function (check, ele) {\n var group = check.value;\n return group === '*' || group === ele.group();\n };\n\n match[Type.STATE] = function (check, ele) {\n var stateSelector = check.value;\n return stateSelectorMatches(stateSelector, ele);\n };\n\n match[Type.ID] = function (check, ele) {\n var id = check.value;\n return ele.id() === id;\n };\n\n match[Type.CLASS] = function (check, ele) {\n var cls = check.value;\n return ele.hasClass(cls);\n };\n\n match[Type.META_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(meta(ele, field), operator, value);\n };\n\n match[Type.DATA_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(data$1(ele, field), operator, value);\n };\n\n match[Type.DATA_BOOL] = function (check, ele) {\n var field = check.field,\n operator = check.operator;\n return boolCmp(data$1(ele, field), operator);\n };\n\n match[Type.DATA_EXIST] = function (check, ele) {\n var field = check.field;\n check.operator;\n return existCmp(data$1(ele, field));\n };\n\n match[Type.UNDIRECTED_EDGE] = function (check, ele) {\n var qA = check.nodes[0];\n var qB = check.nodes[1];\n var src = ele.source();\n var tgt = ele.target();\n return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt);\n };\n\n match[Type.NODE_NEIGHBOR] = function (check, ele) {\n return matches$1(check.node, ele) && ele.neighborhood().some(function (n) {\n return n.isNode() && matches$1(check.neighbor, n);\n });\n };\n\n match[Type.DIRECTED_EDGE] = function (check, ele) {\n return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target());\n };\n\n match[Type.NODE_SOURCE] = function (check, ele) {\n return matches$1(check.source, ele) && ele.outgoers().some(function (n) {\n return n.isNode() && matches$1(check.target, n);\n });\n };\n\n match[Type.NODE_TARGET] = function (check, ele) {\n return matches$1(check.target, ele) && ele.incomers().some(function (n) {\n return n.isNode() && matches$1(check.source, n);\n });\n };\n\n match[Type.CHILD] = function (check, ele) {\n return matches$1(check.child, ele) && matches$1(check.parent, ele.parent());\n };\n\n match[Type.PARENT] = function (check, ele) {\n return matches$1(check.parent, ele) && ele.children().some(function (c) {\n return matches$1(check.child, c);\n });\n };\n\n match[Type.DESCENDANT] = function (check, ele) {\n return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) {\n return matches$1(check.ancestor, a);\n });\n };\n\n match[Type.ANCESTOR] = function (check, ele) {\n return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) {\n return matches$1(check.descendant, d);\n });\n };\n\n match[Type.COMPOUND_SPLIT] = function (check, ele) {\n return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele);\n };\n\n match[Type.TRUE] = function () {\n return true;\n };\n\n match[Type.COLLECTION] = function (check, ele) {\n var collection = check.value;\n return collection.has(ele);\n };\n\n match[Type.FILTER] = function (check, ele) {\n var filter = check.value;\n return filter(ele);\n };\n\n var filter = function filter(collection) {\n var self = this; // for 1 id #foo queries, just get the element\n\n if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) {\n return collection.getElementById(self[0].checks[0].value).collection();\n }\n\n var selectorFunction = function selectorFunction(element) {\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n\n if (matches$1(query, element)) {\n return true;\n }\n }\n\n return false;\n };\n\n if (self.text() == null) {\n selectorFunction = function selectorFunction() {\n return true;\n };\n }\n\n return collection.filter(selectorFunction);\n }; // filter\n // does selector match a single element?\n\n\n var matches = function matches(ele) {\n var self = this;\n\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n\n if (matches$1(query, ele)) {\n return true;\n }\n }\n\n return false;\n }; // matches\n\n\n var matching = {\n matches: matches,\n filter: filter\n };\n\n var Selector = function Selector(selector) {\n this.inputText = selector;\n this.currentSubject = null;\n this.compoundCount = 0;\n this.edgeCount = 0;\n this.length = 0;\n\n if (selector == null || string(selector) && selector.match(/^\\s*$/)) ; else if (elementOrCollection(selector)) {\n this.addQuery({\n checks: [{\n type: Type.COLLECTION,\n value: selector.collection()\n }]\n });\n } else if (fn$6(selector)) {\n this.addQuery({\n checks: [{\n type: Type.FILTER,\n value: selector\n }]\n });\n } else if (string(selector)) {\n if (!this.parse(selector)) {\n this.invalid = true;\n }\n } else {\n error('A selector must be created from a string; found ');\n }\n };\n\n var selfn = Selector.prototype;\n [parse$1, matching].forEach(function (p) {\n return extend(selfn, p);\n });\n\n selfn.text = function () {\n return this.inputText;\n };\n\n selfn.size = function () {\n return this.length;\n };\n\n selfn.eq = function (i) {\n return this[i];\n };\n\n selfn.sameText = function (otherSel) {\n return !this.invalid && !otherSel.invalid && this.text() === otherSel.text();\n };\n\n selfn.addQuery = function (q) {\n this[this.length++] = q;\n };\n\n selfn.selector = selfn.toString;\n\n var elesfn$g = {\n allAre: function allAre(selector) {\n var selObj = new Selector(selector);\n return this.every(function (ele) {\n return selObj.matches(ele);\n });\n },\n is: function is(selector) {\n var selObj = new Selector(selector);\n return this.some(function (ele) {\n return selObj.matches(ele);\n });\n },\n some: function some(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n\n if (ret) {\n return true;\n }\n }\n\n return false;\n },\n every: function every(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n\n if (!ret) {\n return false;\n }\n }\n\n return true;\n },\n same: function same(collection) {\n // cheap collection ref check\n if (this === collection) {\n return true;\n }\n\n collection = this.cy().collection(collection);\n var thisLength = this.length;\n var collectionLength = collection.length; // cheap length check\n\n if (thisLength !== collectionLength) {\n return false;\n } // cheap element ref check\n\n\n if (thisLength === 1) {\n return this[0] === collection[0];\n }\n\n return this.every(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n anySame: function anySame(collection) {\n collection = this.cy().collection(collection);\n return this.some(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n allAreNeighbors: function allAreNeighbors(collection) {\n collection = this.cy().collection(collection);\n var nhood = this.neighborhood();\n return collection.every(function (ele) {\n return nhood.hasElementWithId(ele.id());\n });\n },\n contains: function contains(collection) {\n collection = this.cy().collection(collection);\n var self = this;\n return collection.every(function (ele) {\n return self.hasElementWithId(ele.id());\n });\n }\n };\n elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors;\n elesfn$g.has = elesfn$g.contains;\n elesfn$g.equal = elesfn$g.equals = elesfn$g.same;\n\n var cache = function cache(fn, name) {\n return function traversalCache(arg1, arg2, arg3, arg4) {\n var selectorOrEles = arg1;\n var eles = this;\n var key;\n\n if (selectorOrEles == null) {\n key = '';\n } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) {\n key = selectorOrEles.id();\n }\n\n if (eles.length === 1 && key) {\n var _p = eles[0]._private;\n var tch = _p.traversalCache = _p.traversalCache || {};\n var ch = tch[name] = tch[name] || [];\n var hash = hashString(key);\n var cacheHit = ch[hash];\n\n if (cacheHit) {\n return cacheHit;\n } else {\n return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4);\n }\n } else {\n return fn.call(eles, arg1, arg2, arg3, arg4);\n }\n };\n };\n\n var elesfn$f = {\n parent: function parent(selector) {\n var parents = []; // optimisation for single ele call\n\n if (this.length === 1) {\n var parent = this[0]._private.parent;\n\n if (parent) {\n return parent;\n }\n }\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _parent = ele._private.parent;\n\n if (_parent) {\n parents.push(_parent);\n }\n }\n\n return this.spawn(parents, true).filter(selector);\n },\n parents: function parents(selector) {\n var parents = [];\n var eles = this.parent();\n\n while (eles.nonempty()) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n parents.push(ele);\n }\n\n eles = eles.parent();\n }\n\n return this.spawn(parents, true).filter(selector);\n },\n commonAncestors: function commonAncestors(selector) {\n var ancestors;\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var parents = ele.parents();\n ancestors = ancestors || parents;\n ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set\n }\n\n return ancestors.filter(selector);\n },\n orphans: function orphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isOrphan();\n }).filter(selector);\n },\n nonorphans: function nonorphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isChild();\n }).filter(selector);\n },\n children: cache(function (selector) {\n var children = [];\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var eleChildren = ele._private.children;\n\n for (var j = 0; j < eleChildren.length; j++) {\n children.push(eleChildren[j]);\n }\n }\n\n return this.spawn(children, true).filter(selector);\n }, 'children'),\n siblings: function siblings(selector) {\n return this.parent().children().not(this).filter(selector);\n },\n isParent: function isParent() {\n var ele = this[0];\n\n if (ele) {\n return ele.isNode() && ele._private.children.length !== 0;\n }\n },\n isChildless: function isChildless() {\n var ele = this[0];\n\n if (ele) {\n return ele.isNode() && ele._private.children.length === 0;\n }\n },\n isChild: function isChild() {\n var ele = this[0];\n\n if (ele) {\n return ele.isNode() && ele._private.parent != null;\n }\n },\n isOrphan: function isOrphan() {\n var ele = this[0];\n\n if (ele) {\n return ele.isNode() && ele._private.parent == null;\n }\n },\n descendants: function descendants(selector) {\n var elements = [];\n\n function add(eles) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n elements.push(ele);\n\n if (ele.children().nonempty()) {\n add(ele.children());\n }\n }\n }\n\n add(this.children());\n return this.spawn(elements, true).filter(selector);\n }\n };\n\n function forEachCompound(eles, fn, includeSelf, recursiveStep) {\n var q = [];\n var did = new Set$1();\n var cy = eles.cy();\n var hasCompounds = cy.hasCompoundNodes();\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n\n if (includeSelf) {\n q.push(ele);\n } else if (hasCompounds) {\n recursiveStep(q, did, ele);\n }\n }\n\n while (q.length > 0) {\n var _ele = q.shift();\n\n fn(_ele);\n did.add(_ele.id());\n\n if (hasCompounds) {\n recursiveStep(q, did, _ele);\n }\n }\n\n return eles;\n }\n\n function addChildren(q, did, ele) {\n if (ele.isParent()) {\n var children = ele._private.children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (!did.has(child.id())) {\n q.push(child);\n }\n }\n }\n } // very efficient version of eles.add( eles.descendants() ).forEach()\n // for internal use\n\n\n elesfn$f.forEachDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addChildren);\n };\n\n function addParent(q, did, ele) {\n if (ele.isChild()) {\n var parent = ele._private.parent;\n\n if (!did.has(parent.id())) {\n q.push(parent);\n }\n }\n }\n\n elesfn$f.forEachUp = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParent);\n };\n\n function addParentAndChildren(q, did, ele) {\n addParent(q, did, ele);\n addChildren(q, did, ele);\n }\n\n elesfn$f.forEachUpAndDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParentAndChildren);\n }; // aliases\n\n\n elesfn$f.ancestors = elesfn$f.parents;\n\n var fn$5, elesfn$e;\n fn$5 = elesfn$e = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n rscratch: define.data({\n field: 'rscratch',\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: true\n }),\n removeRscratch: define.removeData({\n field: 'rscratch',\n triggerEvent: false\n }),\n id: function id() {\n var ele = this[0];\n\n if (ele) {\n return ele._private.data.id;\n }\n }\n }; // aliases\n\n fn$5.attr = fn$5.data;\n fn$5.removeAttr = fn$5.removeData;\n var data = elesfn$e;\n\n var elesfn$d = {};\n\n function defineDegreeFunction(callback) {\n return function (includeLoops) {\n var self = this;\n\n if (includeLoops === undefined) {\n includeLoops = true;\n }\n\n if (self.length === 0) {\n return;\n }\n\n if (self.isNode() && !self.removed()) {\n var degree = 0;\n var node = self[0];\n var connectedEdges = node._private.edges;\n\n for (var i = 0; i < connectedEdges.length; i++) {\n var edge = connectedEdges[i];\n\n if (!includeLoops && edge.isLoop()) {\n continue;\n }\n\n degree += callback(node, edge);\n }\n\n return degree;\n } else {\n return;\n }\n };\n }\n\n extend(elesfn$d, {\n degree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(edge.target())) {\n return 2;\n } else {\n return 1;\n }\n }),\n indegree: defineDegreeFunction(function (node, edge) {\n if (edge.target().same(node)) {\n return 1;\n } else {\n return 0;\n }\n }),\n outdegree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(node)) {\n return 1;\n } else {\n return 0;\n }\n })\n });\n\n function defineDegreeBoundsFunction(degreeFn, callback) {\n return function (includeLoops) {\n var ret;\n var nodes = this.nodes();\n\n for (var i = 0; i < nodes.length; i++) {\n var ele = nodes[i];\n var degree = ele[degreeFn](includeLoops);\n\n if (degree !== undefined && (ret === undefined || callback(degree, ret))) {\n ret = degree;\n }\n }\n\n return ret;\n };\n }\n\n extend(elesfn$d, {\n minDegree: defineDegreeBoundsFunction('degree', function (degree, min) {\n return degree < min;\n }),\n maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) {\n return degree > max;\n }),\n minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) {\n return degree < min;\n }),\n maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) {\n return degree > max;\n }),\n minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) {\n return degree < min;\n }),\n maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) {\n return degree > max;\n })\n });\n extend(elesfn$d, {\n totalDegree: function totalDegree(includeLoops) {\n var total = 0;\n var nodes = this.nodes();\n\n for (var i = 0; i < nodes.length; i++) {\n total += nodes[i].degree(includeLoops);\n }\n\n return total;\n }\n });\n\n var fn$4, elesfn$c;\n\n var beforePositionSet = function beforePositionSet(eles, newPos, silent) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n\n if (!ele.locked()) {\n var oldPos = ele._private.position;\n var delta = {\n x: newPos.x != null ? newPos.x - oldPos.x : 0,\n y: newPos.y != null ? newPos.y - oldPos.y : 0\n };\n\n if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) {\n ele.children().shift(delta, silent);\n }\n\n ele.dirtyBoundingBoxCache();\n }\n }\n };\n\n var positionDef = {\n field: 'position',\n bindingEvent: 'position',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'position',\n settingTriggersEvent: true,\n triggerFnName: 'emitAndNotify',\n allowGetting: true,\n validKeys: ['x', 'y'],\n beforeGet: function beforeGet(ele) {\n ele.updateCompoundBounds();\n },\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, false);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n },\n canSet: function canSet(ele) {\n return !ele.locked();\n }\n };\n fn$4 = elesfn$c = {\n position: define.data(positionDef),\n // position but no notification to renderer\n silentPosition: define.data(extend({}, positionDef, {\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: false,\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, true);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n }\n })),\n positions: function positions(pos, silent) {\n if (plainObject(pos)) {\n if (silent) {\n this.silentPosition(pos);\n } else {\n this.position(pos);\n }\n } else if (fn$6(pos)) {\n var _fn = pos;\n var cy = this.cy();\n cy.startBatch();\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n\n var _pos = void 0;\n\n if (_pos = _fn(ele, i)) {\n if (silent) {\n ele.silentPosition(_pos);\n } else {\n ele.position(_pos);\n }\n }\n }\n\n cy.endBatch();\n }\n\n return this; // chaining\n },\n silentPositions: function silentPositions(pos) {\n return this.positions(pos, true);\n },\n shift: function shift(dim, val, silent) {\n var delta;\n\n if (plainObject(dim)) {\n delta = {\n x: number$1(dim.x) ? dim.x : 0,\n y: number$1(dim.y) ? dim.y : 0\n };\n silent = val;\n } else if (string(dim) && number$1(val)) {\n delta = {\n x: 0,\n y: 0\n };\n delta[dim] = val;\n }\n\n if (delta != null) {\n var cy = this.cy();\n cy.startBatch();\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i]; // exclude any node that is a descendant of the calling collection\n\n if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) {\n continue;\n }\n\n var pos = ele.position();\n var newPos = {\n x: pos.x + delta.x,\n y: pos.y + delta.y\n };\n\n if (silent) {\n ele.silentPosition(newPos);\n } else {\n ele.position(newPos);\n }\n }\n\n cy.endBatch();\n }\n\n return this;\n },\n silentShift: function silentShift(dim, val) {\n if (plainObject(dim)) {\n this.shift(dim, true);\n } else if (string(dim) && number$1(val)) {\n this.shift(dim, val, true);\n }\n\n return this;\n },\n // get/set the rendered (i.e. on screen) positon of the element\n renderedPosition: function renderedPosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var rpos = plainObject(dim) ? dim : undefined;\n var setting = rpos !== undefined || val !== undefined && string(dim);\n\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele = this[i];\n\n if (val !== undefined) {\n // set one dimension\n _ele.position(dim, (val - pan[dim]) / zoom);\n } else if (rpos !== undefined) {\n // set whole position\n _ele.position(renderedToModelPosition(rpos, zoom, pan));\n }\n }\n } else {\n // getting\n var pos = ele.position();\n rpos = modelToRenderedPosition(pos, zoom, pan);\n\n if (dim === undefined) {\n // then return the whole rendered position\n return rpos;\n } else {\n // then return the specified dimension\n return rpos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n\n return this; // chaining\n },\n // get/set the position relative to the parent\n relativePosition: function relativePosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var ppos = plainObject(dim) ? dim : undefined;\n var setting = ppos !== undefined || val !== undefined && string(dim);\n var hasCompoundNodes = cy.hasCompoundNodes();\n\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele2 = this[i];\n var parent = hasCompoundNodes ? _ele2.parent() : null;\n var hasParent = parent && parent.length > 0;\n var relativeToParent = hasParent;\n\n if (hasParent) {\n parent = parent[0];\n }\n\n var origin = relativeToParent ? parent.position() : {\n x: 0,\n y: 0\n };\n\n if (val !== undefined) {\n // set one dimension\n _ele2.position(dim, val + origin[dim]);\n } else if (ppos !== undefined) {\n // set whole position\n _ele2.position({\n x: ppos.x + origin.x,\n y: ppos.y + origin.y\n });\n }\n }\n } else {\n // getting\n var pos = ele.position();\n\n var _parent = hasCompoundNodes ? ele.parent() : null;\n\n var _hasParent = _parent && _parent.length > 0;\n\n var _relativeToParent = _hasParent;\n\n if (_hasParent) {\n _parent = _parent[0];\n }\n\n var _origin = _relativeToParent ? _parent.position() : {\n x: 0,\n y: 0\n };\n\n ppos = {\n x: pos.x - _origin.x,\n y: pos.y - _origin.y\n };\n\n if (dim === undefined) {\n // then return the whole rendered position\n return ppos;\n } else {\n // then return the specified dimension\n return ppos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n\n return this; // chaining\n }\n }; // aliases\n\n fn$4.modelPosition = fn$4.point = fn$4.position;\n fn$4.modelPositions = fn$4.points = fn$4.positions;\n fn$4.renderedPoint = fn$4.renderedPosition;\n fn$4.relativePoint = fn$4.relativePosition;\n var position = elesfn$c;\n\n var fn$3, elesfn$b;\n fn$3 = elesfn$b = {};\n\n elesfn$b.renderedBoundingBox = function (options) {\n var bb = this.boundingBox(options);\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var x1 = bb.x1 * zoom + pan.x;\n var x2 = bb.x2 * zoom + pan.x;\n var y1 = bb.y1 * zoom + pan.y;\n var y2 = bb.y2 * zoom + pan.y;\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n w: x2 - x1,\n h: y2 - y1\n };\n };\n\n elesfn$b.dirtyCompoundBoundsCache = function () {\n var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy();\n\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n }\n\n this.forEachUp(function (ele) {\n if (ele.isParent()) {\n var _p = ele._private;\n _p.compoundBoundsClean = false;\n _p.bbCache = null;\n\n if (!silent) {\n ele.emitAndNotify('bounds');\n }\n }\n });\n return this;\n };\n\n elesfn$b.updateCompoundBounds = function () {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy(); // not possible to do on non-compound graphs or with the style disabled\n\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n } // save cycles when batching -- but bounds will be stale (or not exist yet)\n\n\n if (!force && cy.batching()) {\n return this;\n }\n\n function update(parent) {\n if (!parent.isParent()) {\n return;\n }\n\n var _p = parent._private;\n var children = parent.children();\n var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include';\n var min = {\n width: {\n val: parent.pstyle('min-width').pfValue,\n left: parent.pstyle('min-width-bias-left'),\n right: parent.pstyle('min-width-bias-right')\n },\n height: {\n val: parent.pstyle('min-height').pfValue,\n top: parent.pstyle('min-height-bias-top'),\n bottom: parent.pstyle('min-height-bias-bottom')\n }\n };\n var bb = children.boundingBox({\n includeLabels: includeLabels,\n includeOverlays: false,\n // updating the compound bounds happens outside of the regular\n // cache cycle (i.e. before fired events)\n useCache: false\n });\n var pos = _p.position; // if children take up zero area then keep position and fall back on stylesheet w/h\n\n if (bb.w === 0 || bb.h === 0) {\n bb = {\n w: parent.pstyle('width').pfValue,\n h: parent.pstyle('height').pfValue\n };\n bb.x1 = pos.x - bb.w / 2;\n bb.x2 = pos.x + bb.w / 2;\n bb.y1 = pos.y - bb.h / 2;\n bb.y2 = pos.y + bb.h / 2;\n }\n\n function computeBiasValues(propDiff, propBias, propBiasComplement) {\n var biasDiff = 0;\n var biasComplementDiff = 0;\n var biasTotal = propBias + propBiasComplement;\n\n if (propDiff > 0 && biasTotal > 0) {\n biasDiff = propBias / biasTotal * propDiff;\n biasComplementDiff = propBiasComplement / biasTotal * propDiff;\n }\n\n return {\n biasDiff: biasDiff,\n biasComplementDiff: biasComplementDiff\n };\n }\n\n function computePaddingValues(width, height, paddingObject, relativeTo) {\n // Assuming percentage is number from 0 to 1\n if (paddingObject.units === '%') {\n switch (relativeTo) {\n case 'width':\n return width > 0 ? paddingObject.pfValue * width : 0;\n\n case 'height':\n return height > 0 ? paddingObject.pfValue * height : 0;\n\n case 'average':\n return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0;\n\n case 'min':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0;\n\n case 'max':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0;\n\n default:\n return 0;\n }\n } else if (paddingObject.units === 'px') {\n return paddingObject.pfValue;\n } else {\n return 0;\n }\n }\n\n var leftVal = min.width.left.value;\n\n if (min.width.left.units === 'px' && min.width.val > 0) {\n leftVal = leftVal * 100 / min.width.val;\n }\n\n var rightVal = min.width.right.value;\n\n if (min.width.right.units === 'px' && min.width.val > 0) {\n rightVal = rightVal * 100 / min.width.val;\n }\n\n var topVal = min.height.top.value;\n\n if (min.height.top.units === 'px' && min.height.val > 0) {\n topVal = topVal * 100 / min.height.val;\n }\n\n var bottomVal = min.height.bottom.value;\n\n if (min.height.bottom.units === 'px' && min.height.val > 0) {\n bottomVal = bottomVal * 100 / min.height.val;\n }\n\n var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal);\n var diffLeft = widthBiasDiffs.biasDiff;\n var diffRight = widthBiasDiffs.biasComplementDiff;\n var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal);\n var diffTop = heightBiasDiffs.biasDiff;\n var diffBottom = heightBiasDiffs.biasComplementDiff;\n _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value);\n _p.autoWidth = Math.max(bb.w, min.width.val);\n pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2;\n _p.autoHeight = Math.max(bb.h, min.height.val);\n pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2;\n }\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n\n if (!_p.compoundBoundsClean || force) {\n update(ele);\n\n if (!cy.batching()) {\n _p.compoundBoundsClean = true;\n }\n }\n }\n\n return this;\n };\n\n var noninf = function noninf(x) {\n if (x === Infinity || x === -Infinity) {\n return 0;\n }\n\n return x;\n };\n\n var updateBounds = function updateBounds(b, x1, y1, x2, y2) {\n // don't update with zero area boxes\n if (x2 - x1 === 0 || y2 - y1 === 0) {\n return;\n } // don't update with null dim\n\n\n if (x1 == null || y1 == null || x2 == null || y2 == null) {\n return;\n }\n\n b.x1 = x1 < b.x1 ? x1 : b.x1;\n b.x2 = x2 > b.x2 ? x2 : b.x2;\n b.y1 = y1 < b.y1 ? y1 : b.y1;\n b.y2 = y2 > b.y2 ? y2 : b.y2;\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n };\n\n var updateBoundsFromBox = function updateBoundsFromBox(b, b2) {\n if (b2 == null) {\n return b;\n }\n\n return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2);\n };\n\n var prefixedProperty = function prefixedProperty(obj, field, prefix) {\n return getPrefixedProperty(obj, field, prefix);\n };\n\n var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var halfArW = rstyle.arrowWidth / 2;\n var arrowType = ele.pstyle(prefix + '-arrow-shape').value;\n var x;\n var y;\n\n if (arrowType !== 'none') {\n if (prefix === 'source') {\n x = rstyle.srcX;\n y = rstyle.srcY;\n } else if (prefix === 'target') {\n x = rstyle.tgtX;\n y = rstyle.tgtY;\n } else {\n x = rstyle.midX;\n y = rstyle.midY;\n } // always store the individual arrow bounds\n\n\n var bbs = _p.arrowBounds = _p.arrowBounds || {};\n var bb = bbs[prefix] = bbs[prefix] || {};\n bb.x1 = x - halfArW;\n bb.y1 = y - halfArW;\n bb.x2 = x + halfArW;\n bb.y2 = y + halfArW;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n expandBoundingBox(bb, 1);\n updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2);\n }\n };\n\n var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n\n var prefixDash;\n\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var label = ele.pstyle(prefixDash + 'label').strValue;\n\n if (label) {\n var halign = ele.pstyle('text-halign');\n var valign = ele.pstyle('text-valign');\n var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix);\n var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix);\n var labelX = prefixedProperty(rstyle, 'labelX', prefix);\n var labelY = prefixedProperty(rstyle, 'labelY', prefix);\n var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var rotation = ele.pstyle(prefixDash + 'text-rotation');\n var outlineWidth = ele.pstyle('text-outline-width').pfValue;\n var borderWidth = ele.pstyle('text-border-width').pfValue;\n var halfBorderWidth = borderWidth / 2;\n var padding = ele.pstyle('text-background-padding').pfValue;\n var marginOfError = 2; // expand to work around browser dimension inaccuracies\n\n var lh = labelHeight;\n var lw = labelWidth;\n var lw_2 = lw / 2;\n var lh_2 = lh / 2;\n var lx1, lx2, ly1, ly2;\n\n if (isEdge) {\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n } else {\n switch (halign.value) {\n case 'left':\n lx1 = labelX - lw;\n lx2 = labelX;\n break;\n\n case 'center':\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n break;\n\n case 'right':\n lx1 = labelX;\n lx2 = labelX + lw;\n break;\n }\n\n switch (valign.value) {\n case 'top':\n ly1 = labelY - lh;\n ly2 = labelY;\n break;\n\n case 'center':\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n break;\n\n case 'bottom':\n ly1 = labelY;\n ly2 = labelY + lh;\n break;\n }\n } // shift by margin and expand by outline and border\n\n\n lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;\n ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; // always store the unrotated label bounds separately\n\n var bbPrefix = prefix || 'main';\n var bbs = _p.labelBounds;\n var bb = bbs[bbPrefix] = bbs[bbPrefix] || {};\n bb.x1 = lx1;\n bb.y1 = ly1;\n bb.x2 = lx2;\n bb.y2 = ly2;\n bb.w = lx2 - lx1;\n bb.h = ly2 - ly1;\n var isAutorotate = isEdge && rotation.strValue === 'autorotate';\n var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0;\n\n if (isAutorotate || isPfValue) {\n var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue;\n var cos = Math.cos(theta);\n var sin = Math.sin(theta); // rotation point (default value for center-center)\n\n var xo = (lx1 + lx2) / 2;\n var yo = (ly1 + ly2) / 2;\n\n if (!isEdge) {\n switch (halign.value) {\n case 'left':\n xo = lx2;\n break;\n\n case 'right':\n xo = lx1;\n break;\n }\n\n switch (valign.value) {\n case 'top':\n yo = ly2;\n break;\n\n case 'bottom':\n yo = ly1;\n break;\n }\n }\n\n var rotate = function rotate(x, y) {\n x = x - xo;\n y = y - yo;\n return {\n x: x * cos - y * sin + xo,\n y: x * sin + y * cos + yo\n };\n };\n\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n }\n\n var bbPrefixRot = bbPrefix + 'Rot';\n var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {};\n bbRot.x1 = lx1;\n bbRot.y1 = ly1;\n bbRot.x2 = lx2;\n bbRot.y2 = ly2;\n bbRot.w = lx2 - lx1;\n bbRot.h = ly2 - ly1;\n updateBounds(bounds, lx1, ly1, lx2, ly2);\n updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2);\n }\n\n return bounds;\n }; // get the bounding box of the elements (in raw model position)\n\n\n var boundingBoxImpl = function boundingBoxImpl(ele, options) {\n var cy = ele._private.cy;\n var styleEnabled = cy.styleEnabled();\n var headless = cy.headless();\n var bounds = makeBoundingBox();\n var _p = ele._private;\n var isNode = ele.isNode();\n var isEdge = ele.isEdge();\n var ex1, ex2, ey1, ey2; // extrema of body / lines\n\n var x, y; // node pos\n\n var rstyle = _p.rstyle;\n var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; // must use `display` prop only, as reading `compound.width()` causes recursion\n // (other factors like width values will be considered later in this function anyway)\n\n var isDisplayed = function isDisplayed(ele) {\n return ele.pstyle('display').value !== 'none';\n };\n\n var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node\n && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target()));\n\n if (displayed) {\n // displayed suffices, since we will find zero area eles anyway\n var overlayOpacity = 0;\n var overlayPadding = 0;\n\n if (styleEnabled && options.includeOverlays) {\n overlayOpacity = ele.pstyle('overlay-opacity').value;\n\n if (overlayOpacity !== 0) {\n overlayPadding = ele.pstyle('overlay-padding').value;\n }\n }\n\n var underlayOpacity = 0;\n var underlayPadding = 0;\n\n if (styleEnabled && options.includeUnderlays) {\n underlayOpacity = ele.pstyle('underlay-opacity').value;\n\n if (underlayOpacity !== 0) {\n underlayPadding = ele.pstyle('underlay-padding').value;\n }\n }\n\n var padding = Math.max(overlayPadding, underlayPadding);\n var w = 0;\n var wHalf = 0;\n\n if (styleEnabled) {\n w = ele.pstyle('width').pfValue;\n wHalf = w / 2;\n }\n\n if (isNode && options.includeNodes) {\n var pos = ele.position();\n x = pos.x;\n y = pos.y;\n\n var _w = ele.outerWidth();\n\n var halfW = _w / 2;\n var h = ele.outerHeight();\n var halfH = h / 2; // handle node dimensions\n /////////////////////////\n\n ex1 = x - halfW;\n ex2 = x + halfW;\n ey1 = y - halfH;\n ey2 = y + halfH;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n } else if (isEdge && options.includeEdges) {\n if (styleEnabled && !headless) {\n var curveStyle = ele.pstyle('curve-style').strValue; // handle edge dimensions (rough box estimate)\n //////////////////////////////////////////////\n\n ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY);\n ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); // take into account edge width\n\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2); // precise edges\n ////////////////\n\n if (curveStyle === 'haystack') {\n var hpts = rstyle.haystackPts;\n\n if (hpts && hpts.length === 2) {\n ex1 = hpts[0].x;\n ey1 = hpts[0].y;\n ex2 = hpts[1].x;\n ey2 = hpts[1].y;\n\n if (ex1 > ex2) {\n var temp = ex1;\n ex1 = ex2;\n ex2 = temp;\n }\n\n if (ey1 > ey2) {\n var _temp = ey1;\n ey1 = ey2;\n ey2 = _temp;\n }\n\n updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf);\n }\n } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') {\n var pts;\n\n switch (curveStyle) {\n case 'bezier':\n case 'unbundled-bezier':\n pts = rstyle.bezierPts;\n break;\n\n case 'segments':\n case 'taxi':\n pts = rstyle.linePts;\n break;\n }\n\n if (pts != null) {\n for (var j = 0; j < pts.length; j++) {\n var pt = pts[j];\n ex1 = pt.x - wHalf;\n ex2 = pt.x + wHalf;\n ey1 = pt.y - wHalf;\n ey2 = pt.y + wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n }\n }\n } // bezier-like or segment-like edge\n\n } else {\n // headless or style disabled\n // fallback on source and target positions\n //////////////////////////////////////////\n var n1 = ele.source();\n var n1pos = n1.position();\n var n2 = ele.target();\n var n2pos = n2.position();\n ex1 = n1pos.x;\n ex2 = n2pos.x;\n ey1 = n1pos.y;\n ey2 = n2pos.y;\n\n if (ex1 > ex2) {\n var _temp2 = ex1;\n ex1 = ex2;\n ex2 = _temp2;\n }\n\n if (ey1 > ey2) {\n var _temp3 = ey1;\n ey1 = ey2;\n ey2 = _temp3;\n } // take into account edge width\n\n\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n } // headless or style disabled\n\n } // edges\n // handle edge arrow size\n /////////////////////////\n\n\n if (styleEnabled && options.includeEdges && isEdge) {\n updateBoundsFromArrow(bounds, ele, 'mid-source');\n updateBoundsFromArrow(bounds, ele, 'mid-target');\n updateBoundsFromArrow(bounds, ele, 'source');\n updateBoundsFromArrow(bounds, ele, 'target');\n } // ghost\n ////////\n\n\n if (styleEnabled) {\n var ghost = ele.pstyle('ghost').value === 'yes';\n\n if (ghost) {\n var gx = ele.pstyle('ghost-offset-x').pfValue;\n var gy = ele.pstyle('ghost-offset-y').pfValue;\n updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy);\n }\n } // always store the body bounds separately from the labels\n\n\n var bbBody = _p.bodyBounds = _p.bodyBounds || {};\n assignBoundingBox(bbBody, bounds);\n expandBoundingBoxSides(bbBody, manualExpansion);\n expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies\n // overlay\n //////////\n\n if (styleEnabled) {\n ex1 = bounds.x1;\n ex2 = bounds.x2;\n ey1 = bounds.y1;\n ey2 = bounds.y2;\n updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding);\n } // always store the body bounds separately from the labels\n\n\n var bbOverlay = _p.overlayBounds = _p.overlayBounds || {};\n assignBoundingBox(bbOverlay, bounds);\n expandBoundingBoxSides(bbOverlay, manualExpansion);\n expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies\n // handle label dimensions\n //////////////////////////\n\n var bbLabels = _p.labelBounds = _p.labelBounds || {};\n\n if (bbLabels.all != null) {\n clearBoundingBox(bbLabels.all);\n } else {\n bbLabels.all = makeBoundingBox();\n }\n\n if (styleEnabled && options.includeLabels) {\n if (options.includeMainLabels) {\n updateBoundsFromLabel(bounds, ele, null);\n }\n\n if (isEdge) {\n if (options.includeSourceLabels) {\n updateBoundsFromLabel(bounds, ele, 'source');\n }\n\n if (options.includeTargetLabels) {\n updateBoundsFromLabel(bounds, ele, 'target');\n }\n }\n } // style enabled for labels\n\n } // if displayed\n\n\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n\n if (bounds.w > 0 && bounds.h > 0 && displayed) {\n expandBoundingBoxSides(bounds, manualExpansion); // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides\n\n expandBoundingBox(bounds, 1);\n }\n\n return bounds;\n };\n\n var getKey = function getKey(opts) {\n var i = 0;\n\n var tf = function tf(val) {\n return (val ? 1 : 0) << i++;\n };\n\n var key = 0;\n key += tf(opts.incudeNodes);\n key += tf(opts.includeEdges);\n key += tf(opts.includeLabels);\n key += tf(opts.includeMainLabels);\n key += tf(opts.includeSourceLabels);\n key += tf(opts.includeTargetLabels);\n key += tf(opts.includeOverlays);\n return key;\n };\n\n var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) {\n if (ele.isEdge()) {\n var p1 = ele.source().position();\n var p2 = ele.target().position();\n\n var r = function r(x) {\n return Math.round(x);\n };\n\n return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]);\n } else {\n return 0;\n }\n };\n\n var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) {\n var _p = ele._private;\n var bb;\n var isEdge = ele.isEdge();\n var key = opts == null ? defBbOptsKey : getKey(opts);\n var usingDefOpts = key === defBbOptsKey;\n var currPosKey = getBoundingBoxPosKey(ele);\n var isPosKeySame = _p.bbCachePosKey === currPosKey;\n var useCache = opts.useCache && isPosKeySame;\n\n var isDirty = function isDirty(ele) {\n return ele._private.bbCache == null || ele._private.styleDirty;\n };\n\n var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target());\n\n if (needRecalc) {\n if (!isPosKeySame) {\n ele.recalculateRenderedStyle(useCache);\n }\n\n bb = boundingBoxImpl(ele, defBbOpts);\n _p.bbCache = bb;\n _p.bbCachePosKey = currPosKey;\n } else {\n bb = _p.bbCache;\n } // not using def opts => need to build up bb from combination of sub bbs\n\n\n if (!usingDefOpts) {\n var isNode = ele.isNode();\n bb = makeBoundingBox();\n\n if (opts.includeNodes && isNode || opts.includeEdges && !isNode) {\n if (opts.includeOverlays) {\n updateBoundsFromBox(bb, _p.overlayBounds);\n } else {\n updateBoundsFromBox(bb, _p.bodyBounds);\n }\n }\n\n if (opts.includeLabels) {\n if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) {\n updateBoundsFromBox(bb, _p.labelBounds.all);\n } else {\n if (opts.includeMainLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.mainRot);\n }\n\n if (opts.includeSourceLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.sourceRot);\n }\n\n if (opts.includeTargetLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.targetRot);\n }\n }\n }\n\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n }\n\n return bb;\n };\n\n var defBbOpts = {\n includeNodes: true,\n includeEdges: true,\n includeLabels: true,\n includeMainLabels: true,\n includeSourceLabels: true,\n includeTargetLabels: true,\n includeOverlays: true,\n includeUnderlays: true,\n useCache: true\n };\n var defBbOptsKey = getKey(defBbOpts);\n var filledBbOpts = defaults$g(defBbOpts);\n\n elesfn$b.boundingBox = function (options) {\n var bounds; // the main usecase is ele.boundingBox() for a single element with no/def options\n // specified s.t. the cache is used, so check for this case to make it faster by\n // avoiding the overhead of the rest of the function\n\n if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) {\n if (options === undefined) {\n options = defBbOpts;\n } else {\n options = filledBbOpts(options);\n }\n\n bounds = cachedBoundingBoxImpl(this[0], options);\n } else {\n bounds = makeBoundingBox();\n options = options || defBbOpts;\n var opts = filledBbOpts(options);\n var eles = this;\n var cy = eles.cy();\n var styleEnabled = cy.styleEnabled();\n\n if (styleEnabled) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var currPosKey = getBoundingBoxPosKey(ele);\n var isPosKeySame = _p.bbCachePosKey === currPosKey;\n var useCache = opts.useCache && isPosKeySame && !_p.styleDirty;\n ele.recalculateRenderedStyle(useCache);\n }\n }\n\n this.updateCompoundBounds(!options.useCache);\n\n for (var _i = 0; _i < eles.length; _i++) {\n var _ele = eles[_i];\n updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts));\n }\n }\n\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n return bounds;\n };\n\n elesfn$b.dirtyBoundingBoxCache = function () {\n for (var i = 0; i < this.length; i++) {\n var _p = this[i]._private;\n _p.bbCache = null;\n _p.bbCachePosKey = null;\n _p.bodyBounds = null;\n _p.overlayBounds = null;\n _p.labelBounds.all = null;\n _p.labelBounds.source = null;\n _p.labelBounds.target = null;\n _p.labelBounds.main = null;\n _p.labelBounds.sourceRot = null;\n _p.labelBounds.targetRot = null;\n _p.labelBounds.mainRot = null;\n _p.arrowBounds.source = null;\n _p.arrowBounds.target = null;\n _p.arrowBounds['mid-source'] = null;\n _p.arrowBounds['mid-target'] = null;\n }\n\n this.emitAndNotify('bounds');\n return this;\n }; // private helper to get bounding box for custom node positions\n // - good for perf in certain cases but currently requires dirtying the rendered style\n // - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer...\n // - try to use for only things like discrete layouts where the node position would change anyway\n\n\n elesfn$b.boundingBoxAt = function (fn) {\n var nodes = this.nodes();\n var cy = this.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n var parents = cy.collection();\n\n if (hasCompoundNodes) {\n parents = nodes.filter(function (node) {\n return node.isParent();\n });\n nodes = nodes.not(parents);\n }\n\n if (plainObject(fn)) {\n var obj = fn;\n\n fn = function fn() {\n return obj;\n };\n }\n\n var storeOldPos = function storeOldPos(node, i) {\n return node._private.bbAtOldPos = fn(node, i);\n };\n\n var getOldPos = function getOldPos(node) {\n return node._private.bbAtOldPos;\n };\n\n cy.startBatch();\n nodes.forEach(storeOldPos).silentPositions(fn);\n\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n\n var bb = copyBoundingBox(this.boundingBox({\n useCache: false\n }));\n nodes.silentPositions(getOldPos);\n\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n\n cy.endBatch();\n return bb;\n };\n\n fn$3.boundingbox = fn$3.bb = fn$3.boundingBox;\n fn$3.renderedBoundingbox = fn$3.renderedBoundingBox;\n var bounds = elesfn$b;\n\n var fn$2, elesfn$a;\n fn$2 = elesfn$a = {};\n\n var defineDimFns = function defineDimFns(opts) {\n opts.uppercaseName = capitalize(opts.name);\n opts.autoName = 'auto' + opts.uppercaseName;\n opts.labelName = 'label' + opts.uppercaseName;\n opts.outerName = 'outer' + opts.uppercaseName;\n opts.uppercaseOuterName = capitalize(opts.outerName);\n\n fn$2[opts.name] = function dimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n\n if (ele) {\n if (styleEnabled) {\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n return _p[opts.autoName] || 0;\n }\n\n var d = ele.pstyle(opts.name);\n\n switch (d.strValue) {\n case 'label':\n ele.recalculateRenderedStyle();\n return _p.rstyle[opts.labelName] || 0;\n\n default:\n return d.pfValue;\n }\n } else {\n return 1;\n }\n }\n };\n\n fn$2['outer' + opts.uppercaseName] = function outerDimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n\n if (ele) {\n if (styleEnabled) {\n var dim = ele[opts.name]();\n var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side\n\n var padding = 2 * ele.padding();\n return dim + border + padding;\n } else {\n return 1;\n }\n }\n };\n\n fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() {\n var ele = this[0];\n\n if (ele) {\n var d = ele[opts.name]();\n return d * this.cy().zoom();\n }\n };\n\n fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() {\n var ele = this[0];\n\n if (ele) {\n var od = ele[opts.outerName]();\n return od * this.cy().zoom();\n }\n };\n };\n\n defineDimFns({\n name: 'width'\n });\n defineDimFns({\n name: 'height'\n });\n\n elesfn$a.padding = function () {\n var ele = this[0];\n var _p = ele._private;\n\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n\n if (_p.autoPadding !== undefined) {\n return _p.autoPadding;\n } else {\n return ele.pstyle('padding').pfValue;\n }\n } else {\n return ele.pstyle('padding').pfValue;\n }\n };\n\n elesfn$a.paddedHeight = function () {\n var ele = this[0];\n return ele.height() + 2 * ele.padding();\n };\n\n elesfn$a.paddedWidth = function () {\n var ele = this[0];\n return ele.width() + 2 * ele.padding();\n };\n\n var widthHeight = elesfn$a;\n\n var ifEdge = function ifEdge(ele, getValue) {\n if (ele.isEdge()) {\n return getValue(ele);\n }\n };\n\n var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) {\n if (ele.isEdge()) {\n var cy = ele.cy();\n return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan());\n }\n };\n\n var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) {\n if (ele.isEdge()) {\n var cy = ele.cy();\n var pan = cy.pan();\n var zoom = cy.zoom();\n return getPoints(ele).map(function (p) {\n return modelToRenderedPosition(p, zoom, pan);\n });\n }\n };\n\n var controlPoints = function controlPoints(ele) {\n return ele.renderer().getControlPoints(ele);\n };\n\n var segmentPoints = function segmentPoints(ele) {\n return ele.renderer().getSegmentPoints(ele);\n };\n\n var sourceEndpoint = function sourceEndpoint(ele) {\n return ele.renderer().getSourceEndpoint(ele);\n };\n\n var targetEndpoint = function targetEndpoint(ele) {\n return ele.renderer().getTargetEndpoint(ele);\n };\n\n var midpoint = function midpoint(ele) {\n return ele.renderer().getEdgeMidpoint(ele);\n };\n\n var pts = {\n controlPoints: {\n get: controlPoints,\n mult: true\n },\n segmentPoints: {\n get: segmentPoints,\n mult: true\n },\n sourceEndpoint: {\n get: sourceEndpoint\n },\n targetEndpoint: {\n get: targetEndpoint\n },\n midpoint: {\n get: midpoint\n }\n };\n\n var renderedName = function renderedName(name) {\n return 'rendered' + name[0].toUpperCase() + name.substr(1);\n };\n\n var edgePoints = Object.keys(pts).reduce(function (obj, name) {\n var spec = pts[name];\n var rName = renderedName(name);\n\n obj[name] = function () {\n return ifEdge(this, spec.get);\n };\n\n if (spec.mult) {\n obj[rName] = function () {\n return ifEdgeRenderedPositions(this, spec.get);\n };\n } else {\n obj[rName] = function () {\n return ifEdgeRenderedPosition(this, spec.get);\n };\n }\n\n return obj;\n }, {});\n\n var dimensions = extend({}, position, bounds, widthHeight, edgePoints);\n\n /*!\n Event object based on jQuery events, MIT license\n\n https://jquery.org/license/\n https://tldrlegal.com/license/mit-license\n https://github.com/jquery/jquery/blob/master/src/event.js\n */\n var Event = function Event(src, props) {\n this.recycle(src, props);\n };\n\n function returnFalse() {\n return false;\n }\n\n function returnTrue() {\n return true;\n } // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n Event.prototype = {\n instanceString: function instanceString() {\n return 'event';\n },\n recycle: function recycle(src, props) {\n this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse;\n\n if (src != null && src.preventDefault) {\n // Browser Event object\n this.type = src.type; // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n\n this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse;\n } else if (src != null && src.type) {\n // Plain object containing all event details\n props = src;\n } else {\n // Event string\n this.type = src;\n } // Put explicitly provided properties onto the event object\n\n\n if (props != null) {\n // more efficient to manually copy fields we use\n this.originalEvent = props.originalEvent;\n this.type = props.type != null ? props.type : this.type;\n this.cy = props.cy;\n this.target = props.target;\n this.position = props.position;\n this.renderedPosition = props.renderedPosition;\n this.namespace = props.namespace;\n this.layout = props.layout;\n }\n\n if (this.cy != null && this.position != null && this.renderedPosition == null) {\n // create a rendered position based on the passed position\n var pos = this.position;\n var zoom = this.cy.zoom();\n var pan = this.cy.pan();\n this.renderedPosition = {\n x: pos.x * zoom + pan.x,\n y: pos.y * zoom + pan.y\n };\n } // Create a timestamp if incoming event doesn't have one\n\n\n this.timeStamp = src && src.timeStamp || Date.now();\n },\n preventDefault: function preventDefault() {\n this.isDefaultPrevented = returnTrue;\n var e = this.originalEvent;\n\n if (!e) {\n return;\n } // if preventDefault exists run it on the original event\n\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n this.isPropagationStopped = returnTrue;\n var e = this.originalEvent;\n\n if (!e) {\n return;\n } // if stopPropagation exists run it on the original event\n\n\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.isImmediatePropagationStopped = returnTrue;\n this.stopPropagation();\n },\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse\n };\n\n var eventRegex = /^([^.]+)(\\.(?:[^.]+))?$/; // regex for matching event strings (e.g. \"click.namespace\")\n\n var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally\n\n var defaults$8 = {\n qualifierCompare: function qualifierCompare(q1, q2) {\n return q1 === q2;\n },\n eventMatches: function\n /*context, listener, eventObj*/\n eventMatches() {\n return true;\n },\n addEventFields: function\n /*context, evt*/\n addEventFields() {},\n callbackContext: function callbackContext(context\n /*, listener, eventObj*/\n ) {\n return context;\n },\n beforeEmit: function\n /* context, listener, eventObj */\n beforeEmit() {},\n afterEmit: function\n /* context, listener, eventObj */\n afterEmit() {},\n bubble: function\n /*context*/\n bubble() {\n return false;\n },\n parent: function\n /*context*/\n parent() {\n return null;\n },\n context: null\n };\n var defaultsKeys = Object.keys(defaults$8);\n var emptyOpts = {};\n\n function Emitter() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts;\n var context = arguments.length > 1 ? arguments[1] : undefined;\n\n // micro-optimisation vs Object.assign() -- reduces Element instantiation time\n for (var i = 0; i < defaultsKeys.length; i++) {\n var key = defaultsKeys[i];\n this[key] = opts[key] || defaults$8[key];\n }\n\n this.context = context || this.context;\n this.listeners = [];\n this.emitting = 0;\n }\n\n var p = Emitter.prototype;\n\n var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) {\n if (fn$6(qualifier)) {\n callback = qualifier;\n qualifier = null;\n }\n\n if (confOverrides) {\n if (conf == null) {\n conf = confOverrides;\n } else {\n conf = extend({}, conf, confOverrides);\n }\n }\n\n var eventList = array(events) ? events : events.split(/\\s+/);\n\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n\n if (emptyString(evt)) {\n continue;\n }\n\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var ret = handler(self, evt, type, namespace, qualifier, callback, conf);\n\n if (ret === false) {\n break;\n } // allow exiting early\n\n }\n }\n };\n\n var makeEventObj = function makeEventObj(self, obj) {\n self.addEventFields(self.context, obj);\n return new Event(obj.type, obj);\n };\n\n var forEachEventObj = function forEachEventObj(self, handler, events) {\n if (event(events)) {\n handler(self, events);\n return;\n } else if (plainObject(events)) {\n handler(self, makeEventObj(self, events));\n return;\n }\n\n var eventList = array(events) ? events : events.split(/\\s+/);\n\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n\n if (emptyString(evt)) {\n continue;\n }\n\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var eventObj = makeEventObj(self, {\n type: type,\n namespace: namespace,\n target: self.context\n });\n handler(self, eventObj);\n }\n }\n };\n\n p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) {\n forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) {\n if (fn$6(callback)) {\n self.listeners.push({\n event: event,\n // full event string\n callback: callback,\n // callback to run\n type: type,\n // the event type (e.g. 'click')\n namespace: namespace,\n // the event namespace (e.g. \".foo\")\n qualifier: qualifier,\n // a restriction on whether to match this emitter\n conf: conf // additional configuration\n\n });\n }\n }, events, qualifier, callback, conf, confOverrides);\n return this;\n };\n\n p.one = function (events, qualifier, callback, conf) {\n return this.on(events, qualifier, callback, conf, {\n one: true\n });\n };\n\n p.removeListener = p.off = function (events, qualifier, callback, conf) {\n var _this = this;\n\n if (this.emitting !== 0) {\n this.listeners = copyArray$1(this.listeners);\n }\n\n var listeners = this.listeners;\n\n var _loop = function _loop(i) {\n var listener = listeners[i];\n forEachEvent(_this, function (self, event, type, namespace, qualifier, callback\n /*, conf*/\n ) {\n if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) {\n listeners.splice(i, 1);\n return false;\n }\n }, events, qualifier, callback, conf);\n };\n\n for (var i = listeners.length - 1; i >= 0; i--) {\n _loop(i);\n }\n\n return this;\n };\n\n p.removeAllListeners = function () {\n return this.removeListener('*');\n };\n\n p.emit = p.trigger = function (events, extraParams, manualCallback) {\n var listeners = this.listeners;\n var numListenersBeforeEmit = listeners.length;\n this.emitting++;\n\n if (!array(extraParams)) {\n extraParams = [extraParams];\n }\n\n forEachEventObj(this, function (self, eventObj) {\n if (manualCallback != null) {\n listeners = [{\n event: eventObj.event,\n type: eventObj.type,\n namespace: eventObj.namespace,\n callback: manualCallback\n }];\n numListenersBeforeEmit = listeners.length;\n }\n\n var _loop2 = function _loop2(i) {\n var listener = listeners[i];\n\n if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) {\n var args = [eventObj];\n\n if (extraParams != null) {\n push(args, extraParams);\n }\n\n self.beforeEmit(self.context, listener, eventObj);\n\n if (listener.conf && listener.conf.one) {\n self.listeners = self.listeners.filter(function (l) {\n return l !== listener;\n });\n }\n\n var context = self.callbackContext(self.context, listener, eventObj);\n var ret = listener.callback.apply(context, args);\n self.afterEmit(self.context, listener, eventObj);\n\n if (ret === false) {\n eventObj.stopPropagation();\n eventObj.preventDefault();\n }\n } // if listener matches\n\n };\n\n for (var i = 0; i < numListenersBeforeEmit; i++) {\n _loop2(i);\n } // for listener\n\n\n if (self.bubble(self.context) && !eventObj.isPropagationStopped()) {\n self.parent(self.context).emit(eventObj, extraParams);\n }\n }, events);\n this.emitting--;\n return this;\n };\n\n var emitterOptions$1 = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(ele, listener, eventObj) {\n var selector = listener.qualifier;\n\n if (selector != null) {\n return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n\n return true;\n },\n addEventFields: function addEventFields(ele, evt) {\n evt.cy = ele.cy();\n evt.target = ele;\n },\n callbackContext: function callbackContext(ele, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : ele;\n },\n beforeEmit: function beforeEmit(context, listener\n /*, eventObj*/\n ) {\n if (listener.conf && listener.conf.once) {\n listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback);\n }\n },\n bubble: function bubble() {\n return true;\n },\n parent: function parent(ele) {\n return ele.isChild() ? ele.parent() : ele.cy();\n }\n };\n\n var argSelector$1 = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n };\n\n var elesfn$9 = {\n createEmitter: function createEmitter() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions$1, ele);\n }\n }\n\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n var argSel = argSelector$1(selector);\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback);\n }\n\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n var argSel = argSelector$1(selector);\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeListener(events, argSel, callback);\n }\n\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeAllListeners();\n }\n\n return this;\n },\n one: function one(events, selector, callback) {\n var argSel = argSelector$1(selector);\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().one(events, argSel, callback);\n }\n\n return this;\n },\n once: function once(events, selector, callback) {\n var argSel = argSelector$1(selector);\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback, {\n once: true,\n onceCollection: this\n });\n }\n },\n emit: function emit(events, extraParams) {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().emit(events, extraParams);\n }\n\n return this;\n },\n emitAndNotify: function emitAndNotify(event, extraParams) {\n // for internal use only\n if (this.length === 0) {\n return;\n } // empty collections don't need to notify anything\n // notify renderer\n\n\n this.cy().notify(event, this);\n this.emit(event, extraParams);\n return this;\n }\n };\n define.eventAliasesOn(elesfn$9);\n\n var elesfn$8 = {\n nodes: function nodes(selector) {\n return this.filter(function (ele) {\n return ele.isNode();\n }).filter(selector);\n },\n edges: function edges(selector) {\n return this.filter(function (ele) {\n return ele.isEdge();\n }).filter(selector);\n },\n // internal helper to get nodes and edges as separate collections with single iteration over elements\n byGroup: function byGroup() {\n var nodes = this.spawn();\n var edges = this.spawn();\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n\n if (ele.isNode()) {\n nodes.push(ele);\n } else {\n edges.push(ele);\n }\n }\n\n return {\n nodes: nodes,\n edges: edges\n };\n },\n filter: function filter(_filter, thisArg) {\n if (_filter === undefined) {\n // check this first b/c it's the most common/performant case\n return this;\n } else if (string(_filter) || elementOrCollection(_filter)) {\n return new Selector(_filter).filter(this);\n } else if (fn$6(_filter)) {\n var filterEles = this.spawn();\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles);\n\n if (include) {\n filterEles.push(ele);\n }\n }\n\n return filterEles;\n }\n\n return this.spawn(); // if not handled by above, give 'em an empty collection\n },\n not: function not(toRemove) {\n if (!toRemove) {\n return this;\n } else {\n if (string(toRemove)) {\n toRemove = this.filter(toRemove);\n }\n\n var elements = this.spawn();\n\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n var remove = toRemove.has(element);\n\n if (!remove) {\n elements.push(element);\n }\n }\n\n return elements;\n }\n },\n absoluteComplement: function absoluteComplement() {\n var cy = this.cy();\n return cy.mutableElements().not(this);\n },\n intersect: function intersect(other) {\n // if a selector is specified, then filter by it instead\n if (string(other)) {\n var selector = other;\n return this.filter(selector);\n }\n\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n var col1Smaller = this.length < other.length;\n var colS = col1Smaller ? col1 : col2;\n var colL = col1Smaller ? col2 : col1;\n\n for (var i = 0; i < colS.length; i++) {\n var ele = colS[i];\n\n if (colL.has(ele)) {\n elements.push(ele);\n }\n }\n\n return elements;\n },\n xor: function xor(other) {\n var cy = this._private.cy;\n\n if (string(other)) {\n other = cy.$(other);\n }\n\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n\n var add = function add(col, other) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n\n if (!inOther) {\n elements.push(ele);\n }\n }\n };\n\n add(col1, col2);\n add(col2, col1);\n return elements;\n },\n diff: function diff(other) {\n var cy = this._private.cy;\n\n if (string(other)) {\n other = cy.$(other);\n }\n\n var left = this.spawn();\n var right = this.spawn();\n var both = this.spawn();\n var col1 = this;\n var col2 = other;\n\n var add = function add(col, other, retEles) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n\n if (inOther) {\n both.merge(ele);\n } else {\n retEles.push(ele);\n }\n }\n };\n\n add(col1, col2, left);\n add(col2, col1, right);\n return {\n left: left,\n right: right,\n both: both\n };\n },\n add: function add(toAdd) {\n var cy = this._private.cy;\n\n if (!toAdd) {\n return this;\n }\n\n if (string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n\n var elements = this.spawnSelf();\n\n for (var i = 0; i < toAdd.length; i++) {\n var ele = toAdd[i];\n var add = !this.has(ele);\n\n if (add) {\n elements.push(ele);\n }\n }\n\n return elements;\n },\n // in place merge on calling collection\n merge: function merge(toAdd) {\n var _p = this._private;\n var cy = _p.cy;\n\n if (!toAdd) {\n return this;\n }\n\n if (toAdd && string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n\n var map = _p.map;\n\n for (var i = 0; i < toAdd.length; i++) {\n var toAddEle = toAdd[i];\n var id = toAddEle._private.data.id;\n var add = !map.has(id);\n\n if (add) {\n var index = this.length++;\n this[index] = toAddEle;\n map.set(id, {\n ele: toAddEle,\n index: index\n });\n }\n }\n\n return this; // chaining\n },\n unmergeAt: function unmergeAt(i) {\n var ele = this[i];\n var id = ele.id();\n var _p = this._private;\n var map = _p.map; // remove ele\n\n this[i] = undefined;\n map[\"delete\"](id);\n var unmergedLastEle = i === this.length - 1; // replace empty spot with last ele in collection\n\n if (this.length > 1 && !unmergedLastEle) {\n var lastEleI = this.length - 1;\n var lastEle = this[lastEleI];\n var lastEleId = lastEle._private.data.id;\n this[lastEleI] = undefined;\n this[i] = lastEle;\n map.set(lastEleId, {\n ele: lastEle,\n index: i\n });\n } // the collection is now 1 ele smaller\n\n\n this.length--;\n return this;\n },\n // remove single ele in place in calling collection\n unmergeOne: function unmergeOne(ele) {\n ele = ele[0];\n var _p = this._private;\n var id = ele._private.data.id;\n var map = _p.map;\n var entry = map.get(id);\n\n if (!entry) {\n return this; // no need to remove\n }\n\n var i = entry.index;\n this.unmergeAt(i);\n return this;\n },\n // remove eles in place on calling collection\n unmerge: function unmerge(toRemove) {\n var cy = this._private.cy;\n\n if (!toRemove) {\n return this;\n }\n\n if (toRemove && string(toRemove)) {\n var selector = toRemove;\n toRemove = cy.mutableElements().filter(selector);\n }\n\n for (var i = 0; i < toRemove.length; i++) {\n this.unmergeOne(toRemove[i]);\n }\n\n return this; // chaining\n },\n unmergeBy: function unmergeBy(toRmFn) {\n for (var i = this.length - 1; i >= 0; i--) {\n var ele = this[i];\n\n if (toRmFn(ele)) {\n this.unmergeAt(i);\n }\n }\n\n return this;\n },\n map: function map(mapFn, thisArg) {\n var arr = [];\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles);\n arr.push(ret);\n }\n\n return arr;\n },\n reduce: function reduce(fn, initialValue) {\n var val = initialValue;\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n val = fn(val, eles[i], i, eles);\n }\n\n return val;\n },\n max: function max(valFn, thisArg) {\n var max = -Infinity;\n var maxEle;\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n\n if (val > max) {\n max = val;\n maxEle = ele;\n }\n }\n\n return {\n value: max,\n ele: maxEle\n };\n },\n min: function min(valFn, thisArg) {\n var min = Infinity;\n var minEle;\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n\n if (val < min) {\n min = val;\n minEle = ele;\n }\n }\n\n return {\n value: min,\n ele: minEle\n };\n }\n }; // aliases\n\n var fn$1 = elesfn$8;\n fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add;\n fn$1['\\\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not;\n fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect;\n fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor;\n fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter;\n fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement;\n\n var elesfn$7 = {\n isNode: function isNode() {\n return this.group() === 'nodes';\n },\n isEdge: function isEdge() {\n return this.group() === 'edges';\n },\n isLoop: function isLoop() {\n return this.isEdge() && this.source()[0] === this.target()[0];\n },\n isSimple: function isSimple() {\n return this.isEdge() && this.source()[0] !== this.target()[0];\n },\n group: function group() {\n var ele = this[0];\n\n if (ele) {\n return ele._private.group;\n }\n }\n };\n\n /**\n * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges),\n * and z-index (low to high). These styles affect how this applies:\n *\n * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the\n * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from\n * root to leaves of the compound graph. The last drawn is `top`.\n * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes.\n * `manual` ignores this convention and draws based on the `z-index` value setting.\n * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher\n * `z-index` will be drawn on top of an element with a lower `z-index`.\n */\n\n var zIndexSort = function zIndexSort(a, b) {\n var cy = a.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n\n function getDepth(ele) {\n var style = ele.pstyle('z-compound-depth');\n\n if (style.value === 'auto') {\n return hasCompoundNodes ? ele.zDepth() : 0;\n } else if (style.value === 'bottom') {\n return -1;\n } else if (style.value === 'top') {\n return MAX_INT$1;\n } // 'orphan'\n\n\n return 0;\n }\n\n var depthDiff = getDepth(a) - getDepth(b);\n\n if (depthDiff !== 0) {\n return depthDiff;\n }\n\n function getEleDepth(ele) {\n var style = ele.pstyle('z-index-compare');\n\n if (style.value === 'auto') {\n return ele.isNode() ? 1 : 0;\n } // 'manual'\n\n\n return 0;\n }\n\n var eleDiff = getEleDepth(a) - getEleDepth(b);\n\n if (eleDiff !== 0) {\n return eleDiff;\n }\n\n var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value;\n\n if (zDiff !== 0) {\n return zDiff;\n } // compare indices in the core (order added to graph w/ last on top)\n\n\n return a.poolIndex() - b.poolIndex();\n };\n\n var elesfn$6 = {\n forEach: function forEach(fn, thisArg) {\n if (fn$6(fn)) {\n var N = this.length;\n\n for (var i = 0; i < N; i++) {\n var ele = this[i];\n var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this);\n\n if (ret === false) {\n break;\n } // exit each early on return false\n\n }\n }\n\n return this;\n },\n toArray: function toArray() {\n var array = [];\n\n for (var i = 0; i < this.length; i++) {\n array.push(this[i]);\n }\n\n return array;\n },\n slice: function slice(start, end) {\n var array = [];\n var thisSize = this.length;\n\n if (end == null) {\n end = thisSize;\n }\n\n if (start == null) {\n start = 0;\n }\n\n if (start < 0) {\n start = thisSize + start;\n }\n\n if (end < 0) {\n end = thisSize + end;\n }\n\n for (var i = start; i >= 0 && i < end && i < thisSize; i++) {\n array.push(this[i]);\n }\n\n return this.spawn(array);\n },\n size: function size() {\n return this.length;\n },\n eq: function eq(i) {\n return this[i] || this.spawn();\n },\n first: function first() {\n return this[0] || this.spawn();\n },\n last: function last() {\n return this[this.length - 1] || this.spawn();\n },\n empty: function empty() {\n return this.length === 0;\n },\n nonempty: function nonempty() {\n return !this.empty();\n },\n sort: function sort(sortFn) {\n if (!fn$6(sortFn)) {\n return this;\n }\n\n var sorted = this.toArray().sort(sortFn);\n return this.spawn(sorted);\n },\n sortByZIndex: function sortByZIndex() {\n return this.sort(zIndexSort);\n },\n zDepth: function zDepth() {\n var ele = this[0];\n\n if (!ele) {\n return undefined;\n } // let cy = ele.cy();\n\n\n var _p = ele._private;\n var group = _p.group;\n\n if (group === 'nodes') {\n var depth = _p.data.parent ? ele.parents().size() : 0;\n\n if (!ele.isParent()) {\n return MAX_INT$1 - 1; // childless nodes always on top\n }\n\n return depth;\n } else {\n var src = _p.source;\n var tgt = _p.target;\n var srcDepth = src.zDepth();\n var tgtDepth = tgt.zDepth();\n return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent\n }\n }\n };\n elesfn$6.each = elesfn$6.forEach;\n\n var defineSymbolIterator = function defineSymbolIterator() {\n var typeofUndef = \"undefined\" ;\n var isIteratorSupported = (typeof Symbol === \"undefined\" ? \"undefined\" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef\n\n if (isIteratorSupported) {\n elesfn$6[Symbol.iterator] = function () {\n var _this = this;\n\n // eslint-disable-line no-undef\n var entry = {\n value: undefined,\n done: false\n };\n var i = 0;\n var length = this.length;\n return _defineProperty$1({\n next: function next() {\n if (i < length) {\n entry.value = _this[i++];\n } else {\n entry.value = undefined;\n entry.done = true;\n }\n\n return entry;\n }\n }, Symbol.iterator, function () {\n // eslint-disable-line no-undef\n return this;\n });\n };\n }\n };\n\n defineSymbolIterator();\n\n var getLayoutDimensionOptions = defaults$g({\n nodeDimensionsIncludeLabels: false\n });\n var elesfn$5 = {\n // Calculates and returns node dimensions { x, y } based on options given\n layoutDimensions: function layoutDimensions(options) {\n options = getLayoutDimensionOptions(options);\n var dims;\n\n if (!this.takesUpSpace()) {\n dims = {\n w: 0,\n h: 0\n };\n } else if (options.nodeDimensionsIncludeLabels) {\n var bbDim = this.boundingBox();\n dims = {\n w: bbDim.w,\n h: bbDim.h\n };\n } else {\n dims = {\n w: this.outerWidth(),\n h: this.outerHeight()\n };\n } // sanitise the dimensions for external layouts (avoid division by zero)\n\n\n if (dims.w === 0 || dims.h === 0) {\n dims.w = dims.h = 1;\n }\n\n return dims;\n },\n // using standard layout options, apply position function (w/ or w/o animation)\n layoutPositions: function layoutPositions(layout, options, fn) {\n var nodes = this.nodes().filter(function (n) {\n return !n.isParent();\n });\n var cy = this.cy();\n var layoutEles = options.eles; // nodes & edges\n\n var getMemoizeKey = function getMemoizeKey(node) {\n return node.id();\n };\n\n var fnMem = memoize$1(fn, getMemoizeKey); // memoized version of position function\n\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n layout.animations = [];\n\n var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) {\n var center = {\n x: nodesBb.x1 + nodesBb.w / 2,\n y: nodesBb.y1 + nodesBb.h / 2\n };\n var spacingVector = {\n // scale from center of bounding box (not necessarily 0,0)\n x: (pos.x - center.x) * spacing,\n y: (pos.y - center.y) * spacing\n };\n return {\n x: center.x + spacingVector.x,\n y: center.y + spacingVector.y\n };\n };\n\n var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1;\n\n var spacingBb = function spacingBb() {\n if (!useSpacingFactor) {\n return null;\n }\n\n var bb = makeBoundingBox();\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = fnMem(node, i);\n expandBoundingBoxByPoint(bb, pos.x, pos.y);\n }\n\n return bb;\n };\n\n var bb = spacingBb();\n var getFinalPos = memoize$1(function (node, i) {\n var newPos = fnMem(node, i);\n\n if (useSpacingFactor) {\n var spacing = Math.abs(options.spacingFactor);\n newPos = calculateSpacing(spacing, bb, newPos);\n }\n\n if (options.transform != null) {\n newPos = options.transform(node, newPos);\n }\n\n return newPos;\n }, getMemoizeKey);\n\n if (options.animate) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var newPos = getFinalPos(node, i);\n var animateNode = options.animateFilter == null || options.animateFilter(node, i);\n\n if (animateNode) {\n var ani = node.animation({\n position: newPos,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(ani);\n } else {\n node.position(newPos);\n }\n }\n\n if (options.fit) {\n var fitAni = cy.animation({\n fit: {\n boundingBox: layoutEles.boundingBoxAt(getFinalPos),\n padding: options.padding\n },\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(fitAni);\n } else if (options.zoom !== undefined && options.pan !== undefined) {\n var zoomPanAni = cy.animation({\n zoom: options.zoom,\n pan: options.pan,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(zoomPanAni);\n }\n\n layout.animations.forEach(function (ani) {\n return ani.play();\n });\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n Promise$1.all(layout.animations.map(function (ani) {\n return ani.promise();\n })).then(function () {\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n });\n } else {\n nodes.positions(getFinalPos);\n\n if (options.fit) {\n cy.fit(options.eles, options.padding);\n }\n\n if (options.zoom != null) {\n cy.zoom(options.zoom);\n }\n\n if (options.pan) {\n cy.pan(options.pan);\n }\n\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n }\n\n return this; // chaining\n },\n layout: function layout(options) {\n var cy = this.cy();\n return cy.makeLayout(extend({}, options, {\n eles: this\n }));\n }\n }; // aliases:\n\n elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout;\n\n function styleCache(key, fn, ele) {\n var _p = ele._private;\n var cache = _p.styleCache = _p.styleCache || [];\n var val;\n\n if ((val = cache[key]) != null) {\n return val;\n } else {\n val = cache[key] = fn(ele);\n return val;\n }\n }\n\n function cacheStyleFunction(key, fn) {\n key = hashString(key);\n return function cachedStyleFunction(ele) {\n return styleCache(key, fn, ele);\n };\n }\n\n function cachePrototypeStyleFunction(key, fn) {\n key = hashString(key);\n\n var selfFn = function selfFn(ele) {\n return fn.call(ele);\n };\n\n return function cachedPrototypeStyleFunction() {\n var ele = this[0];\n\n if (ele) {\n return styleCache(key, selfFn, ele);\n }\n };\n }\n\n var elesfn$4 = {\n recalculateRenderedStyle: function recalculateRenderedStyle(useCache) {\n var cy = this.cy();\n var renderer = cy.renderer();\n var styleEnabled = cy.styleEnabled();\n\n if (renderer && styleEnabled) {\n renderer.recalculateRenderedStyle(this, useCache);\n }\n\n return this;\n },\n dirtyStyleCache: function dirtyStyleCache() {\n var cy = this.cy();\n\n var dirty = function dirty(ele) {\n return ele._private.styleCache = null;\n };\n\n if (cy.hasCompoundNodes()) {\n var eles;\n eles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n eles.merge(eles.connectedEdges());\n eles.forEach(dirty);\n } else {\n this.forEach(function (ele) {\n dirty(ele);\n ele.connectedEdges().forEach(dirty);\n });\n }\n\n return this;\n },\n // fully updates (recalculates) the style for the elements\n updateStyle: function updateStyle(notifyRenderer) {\n var cy = this._private.cy;\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n if (cy.batching()) {\n var bEles = cy._private.batchStyleEles;\n bEles.merge(this);\n return this; // chaining and exit early when batching\n }\n\n var hasCompounds = cy.hasCompoundNodes();\n var updatedEles = this;\n notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false;\n\n if (hasCompounds) {\n // then add everything up and down for compound selector checks\n updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n } // let changedEles = style.apply( updatedEles );\n\n\n var changedEles = updatedEles;\n\n if (notifyRenderer) {\n changedEles.emitAndNotify('style'); // let renderer know we changed style\n } else {\n changedEles.emit('style'); // just fire the event\n }\n\n updatedEles.forEach(function (ele) {\n return ele._private.styleDirty = true;\n });\n return this; // chaining\n },\n // private: clears dirty flag and recalculates style\n cleanStyle: function cleanStyle() {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return;\n }\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n\n if (ele._private.styleDirty) {\n // n.b. this flag should be set before apply() to avoid potential infinite recursion\n ele._private.styleDirty = false;\n cy.style().apply(ele);\n }\n }\n },\n // get the internal parsed style object for the specified property\n parsedStyle: function parsedStyle(property) {\n var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var ele = this[0];\n var cy = ele.cy();\n\n if (!cy.styleEnabled()) {\n return;\n }\n\n if (ele) {\n this.cleanStyle();\n var overriddenStyle = ele._private.style[property];\n\n if (overriddenStyle != null) {\n return overriddenStyle;\n } else if (includeNonDefault) {\n return cy.style().getDefaultProperty(property);\n } else {\n return null;\n }\n }\n },\n numericStyle: function numericStyle(property) {\n var ele = this[0];\n\n if (!ele.cy().styleEnabled()) {\n return;\n }\n\n if (ele) {\n var pstyle = ele.pstyle(property);\n return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value;\n }\n },\n numericStyleUnits: function numericStyleUnits(property) {\n var ele = this[0];\n\n if (!ele.cy().styleEnabled()) {\n return;\n }\n\n if (ele) {\n return ele.pstyle(property).units;\n }\n },\n // get the specified css property as a rendered value (i.e. on-screen value)\n // or get the whole rendered style if no property specified (NB doesn't allow setting)\n renderedStyle: function renderedStyle(property) {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n var ele = this[0];\n\n if (ele) {\n return cy.style().getRenderedStyle(ele, property);\n }\n },\n // read the calculated css style of the element or override the style (via a bypass)\n style: function style(name, value) {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n var updateTransitions = false;\n var style = cy.style();\n\n if (plainObject(name)) {\n // then extend the bypass\n var props = name;\n style.applyBypass(this, props, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n } else if (string(name)) {\n if (value === undefined) {\n // then get the property from the style\n var ele = this[0];\n\n if (ele) {\n return style.getStylePropertyValue(ele, name);\n } else {\n // empty collection => can't get any value\n return;\n }\n } else {\n // then set the bypass with the property value\n style.applyBypass(this, name, value, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n }\n } else if (name === undefined) {\n var _ele = this[0];\n\n if (_ele) {\n return style.getRawStyle(_ele);\n } else {\n // empty collection => can't get any value\n return;\n }\n }\n\n return this; // chaining\n },\n removeStyle: function removeStyle(names) {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return this;\n }\n\n var updateTransitions = false;\n var style = cy.style();\n var eles = this;\n\n if (names === undefined) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n style.removeAllBypasses(ele, updateTransitions);\n }\n } else {\n names = names.split(/\\s+/);\n\n for (var _i = 0; _i < eles.length; _i++) {\n var _ele2 = eles[_i];\n style.removeBypasses(_ele2, names, updateTransitions);\n }\n }\n\n this.emitAndNotify('style'); // let the renderer know we've updated style\n\n return this; // chaining\n },\n show: function show() {\n this.css('display', 'element');\n return this; // chaining\n },\n hide: function hide() {\n this.css('display', 'none');\n return this; // chaining\n },\n effectiveOpacity: function effectiveOpacity() {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return 1;\n }\n\n var hasCompoundNodes = cy.hasCompoundNodes();\n var ele = this[0];\n\n if (ele) {\n var _p = ele._private;\n var parentOpacity = ele.pstyle('opacity').value;\n\n if (!hasCompoundNodes) {\n return parentOpacity;\n }\n\n var parents = !_p.data.parent ? null : ele.parents();\n\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n var opacity = parent.pstyle('opacity').value;\n parentOpacity = opacity * parentOpacity;\n }\n }\n\n return parentOpacity;\n }\n },\n transparent: function transparent() {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return false;\n }\n\n var ele = this[0];\n var hasCompoundNodes = ele.cy().hasCompoundNodes();\n\n if (ele) {\n if (!hasCompoundNodes) {\n return ele.pstyle('opacity').value === 0;\n } else {\n return ele.effectiveOpacity() === 0;\n }\n }\n },\n backgrounding: function backgrounding() {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return false;\n }\n\n var ele = this[0];\n return ele._private.backgrounding ? true : false;\n }\n };\n\n function checkCompound(ele, parentOk) {\n var _p = ele._private;\n var parents = _p.data.parent ? ele.parents() : null;\n\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n\n if (!parentOk(parent)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function defineDerivedStateFunction(specs) {\n var ok = specs.ok;\n var edgeOkViaNode = specs.edgeOkViaNode || specs.ok;\n var parentOk = specs.parentOk || specs.ok;\n return function () {\n var cy = this.cy();\n\n if (!cy.styleEnabled()) {\n return true;\n }\n\n var ele = this[0];\n var hasCompoundNodes = cy.hasCompoundNodes();\n\n if (ele) {\n var _p = ele._private;\n\n if (!ok(ele)) {\n return false;\n }\n\n if (ele.isNode()) {\n return !hasCompoundNodes || checkCompound(ele, parentOk);\n } else {\n var src = _p.source;\n var tgt = _p.target;\n return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode)));\n }\n }\n };\n }\n\n var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) {\n return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true);\n });\n elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({\n ok: eleTakesUpSpace\n }));\n var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) {\n return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele);\n });\n var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) {\n return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent);\n });\n elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({\n ok: eleInteractive,\n parentOk: parentInteractive,\n edgeOkViaNode: eleTakesUpSpace\n }));\n\n elesfn$4.noninteractive = function () {\n var ele = this[0];\n\n if (ele) {\n return !ele.interactive();\n }\n };\n\n var eleVisible = cacheStyleFunction('eleVisible', function (ele) {\n return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele);\n });\n var edgeVisibleViaNode = eleTakesUpSpace;\n elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({\n ok: eleVisible,\n edgeOkViaNode: edgeVisibleViaNode\n }));\n\n elesfn$4.hidden = function () {\n var ele = this[0];\n\n if (ele) {\n return !ele.visible();\n }\n };\n\n elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () {\n if (!this.cy().styleEnabled()) {\n return false;\n }\n\n return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace();\n });\n elesfn$4.bypass = elesfn$4.css = elesfn$4.style;\n elesfn$4.renderedCss = elesfn$4.renderedStyle;\n elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle;\n elesfn$4.pstyle = elesfn$4.parsedStyle;\n\n var elesfn$3 = {};\n\n function defineSwitchFunction(params) {\n return function () {\n var args = arguments;\n var changedEles = []; // e.g. cy.nodes().select( data, handler )\n\n if (args.length === 2) {\n var data = args[0];\n var handler = args[1];\n this.on(params.event, data, handler);\n } // e.g. cy.nodes().select( handler )\n else if (args.length === 1 && fn$6(args[0])) {\n var _handler = args[0];\n this.on(params.event, _handler);\n } // e.g. cy.nodes().select()\n // e.g. (private) cy.nodes().select(['tapselect'])\n else if (args.length === 0 || args.length === 1 && array(args[0])) {\n var addlEvents = args.length === 1 ? args[0] : null;\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var able = !params.ableField || ele._private[params.ableField];\n var changed = ele._private[params.field] != params.value;\n\n if (params.overrideAble) {\n var overrideAble = params.overrideAble(ele);\n\n if (overrideAble !== undefined) {\n able = overrideAble;\n\n if (!overrideAble) {\n return this;\n } // to save cycles assume not able for all on override\n\n }\n }\n\n if (able) {\n ele._private[params.field] = params.value;\n\n if (changed) {\n changedEles.push(ele);\n }\n }\n }\n\n var changedColl = this.spawn(changedEles);\n changedColl.updateStyle(); // change of state => possible change of style\n\n changedColl.emit(params.event);\n\n if (addlEvents) {\n changedColl.emit(addlEvents);\n }\n }\n\n return this;\n };\n }\n\n function defineSwitchSet(params) {\n elesfn$3[params.field] = function () {\n var ele = this[0];\n\n if (ele) {\n if (params.overrideField) {\n var val = params.overrideField(ele);\n\n if (val !== undefined) {\n return val;\n }\n }\n\n return ele._private[params.field];\n }\n };\n\n elesfn$3[params.on] = defineSwitchFunction({\n event: params.on,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: true\n });\n elesfn$3[params.off] = defineSwitchFunction({\n event: params.off,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: false\n });\n }\n\n defineSwitchSet({\n field: 'locked',\n overrideField: function overrideField(ele) {\n return ele.cy().autolock() ? true : undefined;\n },\n on: 'lock',\n off: 'unlock'\n });\n defineSwitchSet({\n field: 'grabbable',\n overrideField: function overrideField(ele) {\n return ele.cy().autoungrabify() || ele.pannable() ? false : undefined;\n },\n on: 'grabify',\n off: 'ungrabify'\n });\n defineSwitchSet({\n field: 'selected',\n ableField: 'selectable',\n overrideAble: function overrideAble(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'select',\n off: 'unselect'\n });\n defineSwitchSet({\n field: 'selectable',\n overrideField: function overrideField(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'selectify',\n off: 'unselectify'\n });\n elesfn$3.deselect = elesfn$3.unselect;\n\n elesfn$3.grabbed = function () {\n var ele = this[0];\n\n if (ele) {\n return ele._private.grabbed;\n }\n };\n\n defineSwitchSet({\n field: 'active',\n on: 'activate',\n off: 'unactivate'\n });\n defineSwitchSet({\n field: 'pannable',\n on: 'panify',\n off: 'unpanify'\n });\n\n elesfn$3.inactive = function () {\n var ele = this[0];\n\n if (ele) {\n return !ele._private.active;\n }\n };\n\n var elesfn$2 = {}; // DAG functions\n ////////////////\n\n var defineDagExtremity = function defineDagExtremity(params) {\n return function dagExtremityImpl(selector) {\n var eles = this;\n var ret = [];\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n\n if (!ele.isNode()) {\n continue;\n }\n\n var disqualified = false;\n var edges = ele.connectedEdges();\n\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n\n if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) {\n disqualified = true;\n break;\n }\n }\n\n if (!disqualified) {\n ret.push(ele);\n }\n }\n\n return this.spawn(ret, true).filter(selector);\n };\n };\n\n var defineDagOneHop = function defineDagOneHop(params) {\n return function (selector) {\n var eles = this;\n var oEles = [];\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n\n if (!ele.isNode()) {\n continue;\n }\n\n var edges = ele.connectedEdges();\n\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n\n if (params.outgoing && src === ele) {\n oEles.push(edge);\n oEles.push(tgt);\n } else if (params.incoming && tgt === ele) {\n oEles.push(edge);\n oEles.push(src);\n }\n }\n }\n\n return this.spawn(oEles, true).filter(selector);\n };\n };\n\n var defineDagAllHops = function defineDagAllHops(params) {\n return function (selector) {\n var eles = this;\n var sEles = [];\n var sElesIds = {};\n\n for (;;) {\n var next = params.outgoing ? eles.outgoers() : eles.incomers();\n\n if (next.length === 0) {\n break;\n } // done if none left\n\n\n var newNext = false;\n\n for (var i = 0; i < next.length; i++) {\n var n = next[i];\n var nid = n.id();\n\n if (!sElesIds[nid]) {\n sElesIds[nid] = true;\n sEles.push(n);\n newNext = true;\n }\n }\n\n if (!newNext) {\n break;\n } // done if touched all outgoers already\n\n\n eles = next;\n }\n\n return this.spawn(sEles, true).filter(selector);\n };\n };\n\n elesfn$2.clearTraversalCache = function () {\n for (var i = 0; i < this.length; i++) {\n this[i]._private.traversalCache = null;\n }\n };\n\n extend(elesfn$2, {\n // get the root nodes in the DAG\n roots: defineDagExtremity({\n noIncomingEdges: true\n }),\n // get the leaf nodes in the DAG\n leaves: defineDagExtremity({\n noOutgoingEdges: true\n }),\n // normally called children in graph theory\n // these nodes =edges=> outgoing nodes\n outgoers: cache(defineDagOneHop({\n outgoing: true\n }), 'outgoers'),\n // aka DAG descendants\n successors: defineDagAllHops({\n outgoing: true\n }),\n // normally called parents in graph theory\n // these nodes <=edges= incoming nodes\n incomers: cache(defineDagOneHop({\n incoming: true\n }), 'incomers'),\n // aka DAG ancestors\n predecessors: defineDagAllHops({\n incoming: true\n })\n }); // Neighbourhood functions\n //////////////////////////\n\n extend(elesfn$2, {\n neighborhood: cache(function (selector) {\n var elements = [];\n var nodes = this.nodes();\n\n for (var i = 0; i < nodes.length; i++) {\n // for all nodes\n var node = nodes[i];\n var connectedEdges = node.connectedEdges(); // for each connected edge, add the edge and the other node\n\n for (var j = 0; j < connectedEdges.length; j++) {\n var edge = connectedEdges[j];\n var src = edge.source();\n var tgt = edge.target();\n var otherNode = node === src ? tgt : src; // need check in case of loop\n\n if (otherNode.length > 0) {\n elements.push(otherNode[0]); // add node 1 hop away\n } // add connected edge\n\n\n elements.push(edge[0]);\n }\n }\n\n return this.spawn(elements, true).filter(selector);\n }, 'neighborhood'),\n closedNeighborhood: function closedNeighborhood(selector) {\n return this.neighborhood().add(this).filter(selector);\n },\n openNeighborhood: function openNeighborhood(selector) {\n return this.neighborhood(selector);\n }\n }); // aliases\n\n elesfn$2.neighbourhood = elesfn$2.neighborhood;\n elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood;\n elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions\n /////////////////\n\n extend(elesfn$2, {\n source: cache(function sourceImpl(selector) {\n var ele = this[0];\n var src;\n\n if (ele) {\n src = ele._private.source || ele.cy().collection();\n }\n\n return src && selector ? src.filter(selector) : src;\n }, 'source'),\n target: cache(function targetImpl(selector) {\n var ele = this[0];\n var tgt;\n\n if (ele) {\n tgt = ele._private.target || ele.cy().collection();\n }\n\n return tgt && selector ? tgt.filter(selector) : tgt;\n }, 'target'),\n sources: defineSourceFunction({\n attr: 'source'\n }),\n targets: defineSourceFunction({\n attr: 'target'\n })\n });\n\n function defineSourceFunction(params) {\n return function sourceImpl(selector) {\n var sources = [];\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var src = ele._private[params.attr];\n\n if (src) {\n sources.push(src);\n }\n }\n\n return this.spawn(sources, true).filter(selector);\n };\n }\n\n extend(elesfn$2, {\n edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'),\n edgesTo: cache(defineEdgesWithFunction({\n thisIsSrc: true\n }), 'edgesTo')\n });\n\n function defineEdgesWithFunction(params) {\n return function edgesWithImpl(otherNodes) {\n var elements = [];\n var cy = this._private.cy;\n var p = params || {}; // get elements if a selector is specified\n\n if (string(otherNodes)) {\n otherNodes = cy.$(otherNodes);\n }\n\n for (var h = 0; h < otherNodes.length; h++) {\n var edges = otherNodes[h]._private.edges;\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var edgeData = edge._private.data;\n var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target);\n var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target);\n var edgeConnectsThisAndOther = thisToOther || otherToThis;\n\n if (!edgeConnectsThisAndOther) {\n continue;\n }\n\n if (p.thisIsSrc || p.thisIsTgt) {\n if (p.thisIsSrc && !thisToOther) {\n continue;\n }\n\n if (p.thisIsTgt && !otherToThis) {\n continue;\n }\n }\n\n elements.push(edge);\n }\n }\n\n return this.spawn(elements, true);\n };\n }\n\n extend(elesfn$2, {\n connectedEdges: cache(function (selector) {\n var retEles = [];\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var node = eles[i];\n\n if (!node.isNode()) {\n continue;\n }\n\n var edges = node._private.edges;\n\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n retEles.push(edge);\n }\n }\n\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedEdges'),\n connectedNodes: cache(function (selector) {\n var retEles = [];\n var eles = this;\n\n for (var i = 0; i < eles.length; i++) {\n var edge = eles[i];\n\n if (!edge.isEdge()) {\n continue;\n }\n\n retEles.push(edge.source()[0]);\n retEles.push(edge.target()[0]);\n }\n\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedNodes'),\n parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'),\n codirectedEdges: cache(defineParallelEdgesFunction({\n codirected: true\n }), 'codirectedEdges')\n });\n\n function defineParallelEdgesFunction(params) {\n var defaults = {\n codirected: false\n };\n params = extend({}, defaults, params);\n return function parallelEdgesImpl(selector) {\n // micro-optimised for renderer\n var elements = [];\n var edges = this.edges();\n var p = params; // look at all the edges in the collection\n\n for (var i = 0; i < edges.length; i++) {\n var edge1 = edges[i];\n var edge1_p = edge1._private;\n var src1 = edge1_p.source;\n var srcid1 = src1._private.data.id;\n var tgtid1 = edge1_p.data.target;\n var srcEdges1 = src1._private.edges; // look at edges connected to the src node of this edge\n\n for (var j = 0; j < srcEdges1.length; j++) {\n var edge2 = srcEdges1[j];\n var edge2data = edge2._private.data;\n var tgtid2 = edge2data.target;\n var srcid2 = edge2data.source;\n var codirected = tgtid2 === tgtid1 && srcid2 === srcid1;\n var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2;\n\n if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) {\n elements.push(edge2);\n }\n }\n }\n\n return this.spawn(elements, true).filter(selector);\n };\n } // Misc functions\n /////////////////\n\n\n extend(elesfn$2, {\n components: function components(root) {\n var self = this;\n var cy = self.cy();\n var visited = cy.collection();\n var unvisited = root == null ? self.nodes() : root.nodes();\n var components = [];\n\n if (root != null && unvisited.empty()) {\n // root may contain only edges\n unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides\n }\n\n var visitInComponent = function visitInComponent(node, component) {\n visited.merge(node);\n unvisited.unmerge(node);\n component.merge(node);\n };\n\n if (unvisited.empty()) {\n return self.spawn();\n }\n\n var _loop = function _loop() {\n // each iteration yields a component\n var cmpt = cy.collection();\n components.push(cmpt);\n var root = unvisited[0];\n visitInComponent(root, cmpt);\n self.bfs({\n directed: false,\n roots: root,\n visit: function visit(v) {\n return visitInComponent(v, cmpt);\n }\n });\n cmpt.forEach(function (node) {\n node.connectedEdges().forEach(function (e) {\n // connectedEdges() usually cached\n if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e); // forEach() only considers nodes -- sets N at call time\n }\n });\n });\n };\n\n do {\n _loop();\n } while (unvisited.length > 0);\n\n return components;\n },\n component: function component() {\n var ele = this[0];\n return ele.cy().mutableElements().components(ele)[0];\n }\n });\n elesfn$2.componentsOf = elesfn$2.components;\n\n var Collection = function Collection(cy, elements) {\n var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (cy === undefined) {\n error('A collection must have a reference to the core');\n return;\n }\n\n var map = new Map$2();\n var createdElements = false;\n\n if (!elements) {\n elements = [];\n } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) {\n createdElements = true; // make elements from json and restore all at once later\n\n var eles = [];\n var elesIds = new Set$1();\n\n for (var i = 0, l = elements.length; i < l; i++) {\n var json = elements[i];\n\n if (json.data == null) {\n json.data = {};\n }\n\n var _data = json.data; // make sure newly created elements have valid ids\n\n if (_data.id == null) {\n _data.id = uuid();\n } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) {\n continue; // can't create element if prior id already exists\n }\n\n var ele = new Element(cy, json, false);\n eles.push(ele);\n elesIds.add(_data.id);\n }\n\n elements = eles;\n }\n\n this.length = 0;\n\n for (var _i = 0, _l = elements.length; _i < _l; _i++) {\n var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements\n\n if (element$1 == null) {\n continue;\n }\n\n var id = element$1._private.data.id;\n\n if (!unique || !map.has(id)) {\n if (unique) {\n map.set(id, {\n index: this.length,\n ele: element$1\n });\n }\n\n this[this.length] = element$1;\n this.length++;\n }\n }\n\n this._private = {\n eles: this,\n cy: cy,\n\n get map() {\n if (this.lazyMap == null) {\n this.rebuildMap();\n }\n\n return this.lazyMap;\n },\n\n set map(m) {\n this.lazyMap = m;\n },\n\n rebuildMap: function rebuildMap() {\n var m = this.lazyMap = new Map$2();\n var eles = this.eles;\n\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n var _ele = eles[_i2];\n m.set(_ele.id(), {\n index: _i2,\n ele: _ele\n });\n }\n }\n };\n\n if (unique) {\n this._private.map = map;\n } // restore the elements if we created them from json\n\n\n if (createdElements && !removed) {\n this.restore();\n }\n }; // Functions\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // keep the prototypes in sync (an element has the same functions as a collection)\n // and use elefn and elesfn as shorthands to the prototypes\n\n\n var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype);\n\n elesfn$1.instanceString = function () {\n return 'collection';\n };\n\n elesfn$1.spawn = function (eles, unique) {\n return new Collection(this.cy(), eles, unique);\n };\n\n elesfn$1.spawnSelf = function () {\n return this.spawn(this);\n };\n\n elesfn$1.cy = function () {\n return this._private.cy;\n };\n\n elesfn$1.renderer = function () {\n return this._private.cy.renderer();\n };\n\n elesfn$1.element = function () {\n return this[0];\n };\n\n elesfn$1.collection = function () {\n if (collection(this)) {\n return this;\n } else {\n // an element\n return new Collection(this._private.cy, [this]);\n }\n };\n\n elesfn$1.unique = function () {\n return new Collection(this._private.cy, this, true);\n };\n\n elesfn$1.hasElementWithId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.has(id);\n };\n\n elesfn$1.getElementById = function (id) {\n id = '' + id; // id must be string\n\n var cy = this._private.cy;\n\n var entry = this._private.map.get(id);\n\n return entry ? entry.ele : new Collection(cy); // get ele or empty collection\n };\n\n elesfn$1.$id = elesfn$1.getElementById;\n\n elesfn$1.poolIndex = function () {\n var cy = this._private.cy;\n var eles = cy._private.elements;\n var id = this[0]._private.data.id;\n return eles._private.map.get(id).index;\n };\n\n elesfn$1.indexOf = function (ele) {\n var id = ele[0]._private.data.id;\n return this._private.map.get(id).index;\n };\n\n elesfn$1.indexOfId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.get(id).index;\n };\n\n elesfn$1.json = function (obj) {\n var ele = this.element();\n var cy = this.cy();\n\n if (ele == null && obj) {\n return this;\n } // can't set to no eles\n\n\n if (ele == null) {\n return undefined;\n } // can't get from no eles\n\n\n var p = ele._private;\n\n if (plainObject(obj)) {\n // set\n cy.startBatch();\n\n if (obj.data) {\n ele.data(obj.data);\n var _data2 = p.data;\n\n if (ele.isEdge()) {\n // source and target are immutable via data()\n var move = false;\n var spec = {};\n var src = obj.data.source;\n var tgt = obj.data.target;\n\n if (src != null && src != _data2.source) {\n spec.source = '' + src; // id must be string\n\n move = true;\n }\n\n if (tgt != null && tgt != _data2.target) {\n spec.target = '' + tgt; // id must be string\n\n move = true;\n }\n\n if (move) {\n ele = ele.move(spec);\n }\n } else {\n // parent is immutable via data()\n var newParentValSpecd = ('parent' in obj.data);\n var parent = obj.data.parent;\n\n if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) {\n if (parent === undefined) {\n // can't set undefined imperatively, so use null\n parent = null;\n }\n\n if (parent != null) {\n parent = '' + parent; // id must be string\n }\n\n ele = ele.move({\n parent: parent\n });\n }\n }\n }\n\n if (obj.position) {\n ele.position(obj.position);\n } // ignore group -- immutable\n\n\n var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) {\n var obj_k = obj[k];\n\n if (obj_k != null && obj_k !== p[k]) {\n if (obj_k) {\n ele[trueFnName]();\n } else {\n ele[falseFnName]();\n }\n }\n };\n\n checkSwitch('removed', 'remove', 'restore');\n checkSwitch('selected', 'select', 'unselect');\n checkSwitch('selectable', 'selectify', 'unselectify');\n checkSwitch('locked', 'lock', 'unlock');\n checkSwitch('grabbable', 'grabify', 'ungrabify');\n checkSwitch('pannable', 'panify', 'unpanify');\n\n if (obj.classes != null) {\n ele.classes(obj.classes);\n }\n\n cy.endBatch();\n return this;\n } else if (obj === undefined) {\n // get\n var json = {\n data: copy(p.data),\n position: copy(p.position),\n group: p.group,\n removed: p.removed,\n selected: p.selected,\n selectable: p.selectable,\n locked: p.locked,\n grabbable: p.grabbable,\n pannable: p.pannable,\n classes: null\n };\n json.classes = '';\n var i = 0;\n p.classes.forEach(function (cls) {\n return json.classes += i++ === 0 ? cls : ' ' + cls;\n });\n return json;\n }\n };\n\n elesfn$1.jsons = function () {\n var jsons = [];\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n jsons.push(json);\n }\n\n return jsons;\n };\n\n elesfn$1.clone = function () {\n var cy = this.cy();\n var elesArr = [];\n\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n var clone = new Element(cy, json, false); // NB no restore\n\n elesArr.push(clone);\n }\n\n return new Collection(cy, elesArr);\n };\n\n elesfn$1.copy = elesfn$1.clone;\n\n elesfn$1.restore = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var cy = self.cy();\n var cy_p = cy._private; // create arrays of nodes and edges, since we need to\n // restore the nodes first\n\n var nodes = [];\n var edges = [];\n var elements;\n\n for (var _i3 = 0, l = self.length; _i3 < l; _i3++) {\n var ele = self[_i3];\n\n if (addToPool && !ele.removed()) {\n // don't need to handle this ele\n continue;\n } // keep nodes first in the array and edges after\n\n\n if (ele.isNode()) {\n // put to front of array if node\n nodes.push(ele);\n } else {\n // put to end of array if edge\n edges.push(ele);\n }\n }\n\n elements = nodes.concat(edges);\n var i;\n\n var removeFromElements = function removeFromElements() {\n elements.splice(i, 1);\n i--;\n }; // now, restore each element\n\n\n for (i = 0; i < elements.length; i++) {\n var _ele2 = elements[i];\n var _private = _ele2._private;\n var _data3 = _private.data; // the traversal cache should start fresh when ele is added\n\n _ele2.clearTraversalCache(); // set id and validate\n\n\n if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) {\n _data3.id = uuid();\n } else if (number$1(_data3.id)) {\n _data3.id = '' + _data3.id; // now it's a string\n } else if (emptyString(_data3.id) || !string(_data3.id)) {\n error('Can not create element with invalid string ID `' + _data3.id + '`'); // can't create element if it has empty string as id or non-string id\n\n removeFromElements();\n continue;\n } else if (cy.hasElementWithId(_data3.id)) {\n error('Can not create second element with ID `' + _data3.id + '`'); // can't create element if one already has that id\n\n removeFromElements();\n continue;\n }\n\n var id = _data3.id; // id is finalised, now let's keep a ref\n\n if (_ele2.isNode()) {\n // extra checks for nodes\n var pos = _private.position; // make sure the nodes have a defined position\n\n if (pos.x == null) {\n pos.x = 0;\n }\n\n if (pos.y == null) {\n pos.y = 0;\n }\n }\n\n if (_ele2.isEdge()) {\n // extra checks for edges\n var edge = _ele2;\n var fields = ['source', 'target'];\n var fieldsLength = fields.length;\n var badSourceOrTarget = false;\n\n for (var j = 0; j < fieldsLength; j++) {\n var field = fields[j];\n var val = _data3[field];\n\n if (number$1(val)) {\n val = _data3[field] = '' + _data3[field]; // now string\n }\n\n if (val == null || val === '') {\n // can't create if source or target is not defined properly\n error('Can not create edge `' + id + '` with unspecified ' + field);\n badSourceOrTarget = true;\n } else if (!cy.hasElementWithId(val)) {\n // can't create edge if one of its nodes doesn't exist\n error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`');\n badSourceOrTarget = true;\n }\n }\n\n if (badSourceOrTarget) {\n removeFromElements();\n continue;\n } // can't create this\n\n\n var src = cy.getElementById(_data3.source);\n var tgt = cy.getElementById(_data3.target); // only one edge in node if loop\n\n if (src.same(tgt)) {\n src._private.edges.push(edge);\n } else {\n src._private.edges.push(edge);\n\n tgt._private.edges.push(edge);\n }\n\n edge._private.source = src;\n edge._private.target = tgt;\n } // if is edge\n // create mock ids / indexes maps for element so it can be used like collections\n\n\n _private.map = new Map$2();\n\n _private.map.set(id, {\n ele: _ele2,\n index: 0\n });\n\n _private.removed = false;\n\n if (addToPool) {\n cy.addToPool(_ele2);\n }\n } // for each element\n // do compound node sanity checks\n\n\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n // each node\n var node = nodes[_i4];\n var _data4 = node._private.data;\n\n if (number$1(_data4.parent)) {\n // then automake string\n _data4.parent = '' + _data4.parent;\n }\n\n var parentId = _data4.parent;\n var specifiedParent = parentId != null;\n\n if (specifiedParent || node._private.parent) {\n var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId);\n\n if (parent.empty()) {\n // non-existant parent; just remove it\n _data4.parent = undefined;\n } else if (parent[0].removed()) {\n warn('Node added with missing parent, reference to parent removed');\n _data4.parent = undefined;\n node._private.parent = null;\n } else {\n var selfAsParent = false;\n var ancestor = parent;\n\n while (!ancestor.empty()) {\n if (node.same(ancestor)) {\n // mark self as parent and remove from data\n selfAsParent = true;\n _data4.parent = undefined; // remove parent reference\n // exit or we loop forever\n\n break;\n }\n\n ancestor = ancestor.parent();\n }\n\n if (!selfAsParent) {\n // connect with children\n parent[0]._private.children.push(node);\n\n node._private.parent = parent[0]; // let the core know we have a compound graph\n\n cy_p.hasCompoundNodes = true;\n }\n } // else\n\n } // if specified parent\n\n } // for each node\n\n\n if (elements.length > 0) {\n var restored = elements.length === self.length ? self : new Collection(cy, elements);\n\n for (var _i5 = 0; _i5 < restored.length; _i5++) {\n var _ele3 = restored[_i5];\n\n if (_ele3.isNode()) {\n continue;\n } // adding an edge invalidates the traversal caches for the parallel edges\n\n\n _ele3.parallelEdges().clearTraversalCache(); // adding an edge invalidates the traversal cache for the connected nodes\n\n\n _ele3.source().clearTraversalCache();\n\n _ele3.target().clearTraversalCache();\n }\n\n var toUpdateStyle;\n\n if (cy_p.hasCompoundNodes) {\n toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent());\n } else {\n toUpdateStyle = restored;\n }\n\n toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer);\n\n if (notifyRenderer) {\n restored.emitAndNotify('add');\n } else if (addToPool) {\n restored.emit('add');\n }\n }\n\n return self; // chainability\n };\n\n elesfn$1.removed = function () {\n var ele = this[0];\n return ele && ele._private.removed;\n };\n\n elesfn$1.inside = function () {\n var ele = this[0];\n return ele && !ele._private.removed;\n };\n\n elesfn$1.remove = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var elesToRemove = [];\n var elesToRemoveIds = {};\n var cy = self._private.cy; // add connected edges\n\n function addConnectedEdges(node) {\n var edges = node._private.edges;\n\n for (var i = 0; i < edges.length; i++) {\n add(edges[i]);\n }\n } // add descendant nodes\n\n\n function addChildren(node) {\n var children = node._private.children;\n\n for (var i = 0; i < children.length; i++) {\n add(children[i]);\n }\n }\n\n function add(ele) {\n var alreadyAdded = elesToRemoveIds[ele.id()];\n\n if (removeFromPool && ele.removed() || alreadyAdded) {\n return;\n } else {\n elesToRemoveIds[ele.id()] = true;\n }\n\n if (ele.isNode()) {\n elesToRemove.push(ele); // nodes are removed last\n\n addConnectedEdges(ele);\n addChildren(ele);\n } else {\n elesToRemove.unshift(ele); // edges are removed first\n }\n } // make the list of elements to remove\n // (may be removing more than specified due to connected edges etc)\n\n\n for (var i = 0, l = self.length; i < l; i++) {\n var ele = self[i];\n add(ele);\n }\n\n function removeEdgeRef(node, edge) {\n var connectedEdges = node._private.edges;\n removeFromArray(connectedEdges, edge); // removing an edges invalidates the traversal cache for its nodes\n\n node.clearTraversalCache();\n }\n\n function removeParallelRef(pllEdge) {\n // removing an edge invalidates the traversal caches for the parallel edges\n pllEdge.clearTraversalCache();\n }\n\n var alteredParents = [];\n alteredParents.ids = {};\n\n function removeChildRef(parent, ele) {\n ele = ele[0];\n parent = parent[0];\n var children = parent._private.children;\n var pid = parent.id();\n removeFromArray(children, ele); // remove parent => child ref\n\n ele._private.parent = null; // remove child => parent ref\n\n if (!alteredParents.ids[pid]) {\n alteredParents.ids[pid] = true;\n alteredParents.push(parent);\n }\n }\n\n self.dirtyCompoundBoundsCache();\n\n if (removeFromPool) {\n cy.removeFromPool(elesToRemove); // remove from core pool\n }\n\n for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) {\n var _ele4 = elesToRemove[_i6];\n\n if (_ele4.isEdge()) {\n // remove references to this edge in its connected nodes\n var src = _ele4.source()[0];\n\n var tgt = _ele4.target()[0];\n\n removeEdgeRef(src, _ele4);\n removeEdgeRef(tgt, _ele4);\n\n var pllEdges = _ele4.parallelEdges();\n\n for (var j = 0; j < pllEdges.length; j++) {\n var pllEdge = pllEdges[j];\n removeParallelRef(pllEdge);\n\n if (pllEdge.isBundledBezier()) {\n pllEdge.dirtyBoundingBoxCache();\n }\n }\n } else {\n // remove reference to parent\n var parent = _ele4.parent();\n\n if (parent.length !== 0) {\n removeChildRef(parent, _ele4);\n }\n }\n\n if (removeFromPool) {\n // mark as removed\n _ele4._private.removed = true;\n }\n } // check to see if we have a compound graph or not\n\n\n var elesStillInside = cy._private.elements;\n cy._private.hasCompoundNodes = false;\n\n for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) {\n var _ele5 = elesStillInside[_i7];\n\n if (_ele5.isParent()) {\n cy._private.hasCompoundNodes = true;\n break;\n }\n }\n\n var removedElements = new Collection(this.cy(), elesToRemove);\n\n if (removedElements.size() > 0) {\n // must manually notify since trigger won't do this automatically once removed\n if (notifyRenderer) {\n removedElements.emitAndNotify('remove');\n } else if (removeFromPool) {\n removedElements.emit('remove');\n }\n } // the parents who were modified by the removal need their style updated\n\n\n for (var _i8 = 0; _i8 < alteredParents.length; _i8++) {\n var _ele6 = alteredParents[_i8];\n\n if (!removeFromPool || !_ele6.removed()) {\n _ele6.updateStyle();\n }\n }\n\n return removedElements;\n };\n\n elesfn$1.move = function (struct) {\n var cy = this._private.cy;\n var eles = this; // just clean up refs, caches, etc. in the same way as when removing and then restoring\n // (our calls to remove/restore do not remove from the graph or make events)\n\n var notifyRenderer = false;\n var modifyPool = false;\n\n var toString = function toString(id) {\n return id == null ? id : '' + id;\n }; // id must be string\n\n\n if (struct.source !== undefined || struct.target !== undefined) {\n var srcId = toString(struct.source);\n var tgtId = toString(struct.target);\n var srcExists = srcId != null && cy.hasElementWithId(srcId);\n var tgtExists = tgtId != null && cy.hasElementWithId(tgtId);\n\n if (srcExists || tgtExists) {\n cy.batch(function () {\n // avoid duplicate style updates\n eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n\n eles.emitAndNotify('moveout');\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data5 = ele._private.data;\n\n if (ele.isEdge()) {\n if (srcExists) {\n _data5.source = srcId;\n }\n\n if (tgtExists) {\n _data5.target = tgtId;\n }\n }\n }\n\n eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n } else if (struct.parent !== undefined) {\n // move node to new parent\n var parentId = toString(struct.parent);\n var parentExists = parentId === null || cy.hasElementWithId(parentId);\n\n if (parentExists) {\n var pidToAssign = parentId === null ? undefined : parentId;\n cy.batch(function () {\n // avoid duplicate style updates\n var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n\n updated.emitAndNotify('moveout');\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data6 = ele._private.data;\n\n if (ele.isNode()) {\n _data6.parent = pidToAssign;\n }\n }\n\n updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n }\n\n return this;\n };\n\n [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) {\n extend(elesfn$1, props);\n });\n\n var corefn$9 = {\n add: function add(opts) {\n var elements;\n var cy = this; // add the elements\n\n if (elementOrCollection(opts)) {\n var eles = opts;\n\n if (eles._private.cy === cy) {\n // same instance => just restore\n elements = eles.restore();\n } else {\n // otherwise, copy from json\n var jsons = [];\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n jsons.push(ele.json());\n }\n\n elements = new Collection(cy, jsons);\n }\n } // specify an array of options\n else if (array(opts)) {\n var _jsons = opts;\n elements = new Collection(cy, _jsons);\n } // specify via opts.nodes and opts.edges\n else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) {\n var elesByGroup = opts;\n var _jsons2 = [];\n var grs = ['nodes', 'edges'];\n\n for (var _i = 0, il = grs.length; _i < il; _i++) {\n var group = grs[_i];\n var elesArray = elesByGroup[group];\n\n if (array(elesArray)) {\n for (var j = 0, jl = elesArray.length; j < jl; j++) {\n var json = extend({\n group: group\n }, elesArray[j]);\n\n _jsons2.push(json);\n }\n }\n }\n\n elements = new Collection(cy, _jsons2);\n } // specify options for one element\n else {\n var _json = opts;\n elements = new Element(cy, _json).collection();\n }\n\n return elements;\n },\n remove: function remove(collection) {\n if (elementOrCollection(collection)) ; else if (string(collection)) {\n var selector = collection;\n collection = this.$(selector);\n }\n\n return collection.remove();\n }\n };\n\n /* global Float32Array */\n\n /*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n function generateCubicBezier(mX1, mY1, mX2, mY2) {\n var NEWTON_ITERATIONS = 4,\n NEWTON_MIN_SLOPE = 0.001,\n SUBDIVISION_PRECISION = 0.0000001,\n SUBDIVISION_MAX_ITERATIONS = 10,\n kSplineTableSize = 11,\n kSampleStepSize = 1.0 / (kSplineTableSize - 1.0),\n float32ArraySupported = typeof Float32Array !== 'undefined';\n /* Must contain four arguments. */\n\n if (arguments.length !== 4) {\n return false;\n }\n /* Arguments must be numbers. */\n\n\n for (var i = 0; i < 4; ++i) {\n if (typeof arguments[i] !== \"number\" || isNaN(arguments[i]) || !isFinite(arguments[i])) {\n return false;\n }\n }\n /* X values must be in the [0, 1] range. */\n\n\n mX1 = Math.min(mX1, 1);\n mX2 = Math.min(mX2, 1);\n mX1 = Math.max(mX1, 0);\n mX2 = Math.max(mX2, 0);\n var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n }\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function newtonRaphsonIterate(aX, aGuessT) {\n for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n\n function calcSampleValues() {\n for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n }\n }\n\n function binarySubdivide(aX, aA, aB) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function getTForX(aX) {\n var intervalStart = 0.0,\n currentSample = 1,\n lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n guessForT = intervalStart + dist * kSampleStepSize,\n initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n }\n }\n\n var _precomputed = false;\n\n function precompute() {\n _precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n calcSampleValues();\n }\n }\n\n var f = function f(aX) {\n if (!_precomputed) {\n precompute();\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return aX;\n }\n\n if (aX === 0) {\n return 0;\n }\n\n if (aX === 1) {\n return 1;\n }\n\n return calcBezier(getTForX(aX), mY1, mY2);\n };\n\n f.getControlPoints = function () {\n return [{\n x: mX1,\n y: mY1\n }, {\n x: mX2,\n y: mY2\n }];\n };\n\n var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\";\n\n f.toString = function () {\n return str;\n };\n\n return f;\n }\n\n /*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n\n /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\n var generateSpringRK4 = function () {\n function springAccelerationForState(state) {\n return -state.tension * state.x - state.friction * state.v;\n }\n\n function springEvaluateStateWithDerivative(initialState, dt, derivative) {\n var state = {\n x: initialState.x + derivative.dx * dt,\n v: initialState.v + derivative.dv * dt,\n tension: initialState.tension,\n friction: initialState.friction\n };\n return {\n dx: state.v,\n dv: springAccelerationForState(state)\n };\n }\n\n function springIntegrateState(state, dt) {\n var a = {\n dx: state.v,\n dv: springAccelerationForState(state)\n },\n b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n d = springEvaluateStateWithDerivative(state, dt, c),\n dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),\n dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);\n state.x = state.x + dxdt * dt;\n state.v = state.v + dvdt * dt;\n return state;\n }\n\n return function springRK4Factory(tension, friction, duration) {\n var initState = {\n x: -1,\n v: 0,\n tension: null,\n friction: null\n },\n path = [0],\n time_lapsed = 0,\n tolerance = 1 / 10000,\n DT = 16 / 1000,\n have_duration,\n dt,\n last_state;\n tension = parseFloat(tension) || 500;\n friction = parseFloat(friction) || 20;\n duration = duration || null;\n initState.tension = tension;\n initState.friction = friction;\n have_duration = duration !== null;\n /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n\n if (have_duration) {\n /* Run the simulation without a duration. */\n time_lapsed = springRK4Factory(tension, friction);\n /* Compute the adjusted time delta. */\n\n dt = time_lapsed / duration * DT;\n } else {\n dt = DT;\n }\n\n for (;;) {\n /* Next/step function .*/\n last_state = springIntegrateState(last_state || initState, dt);\n /* Store the position. */\n\n path.push(1 + last_state.x);\n time_lapsed += 16;\n /* If the change threshold is reached, break. */\n\n if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {\n break;\n }\n }\n /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n computed path and returns a snapshot of the position according to a given percentComplete. */\n\n\n return !have_duration ? time_lapsed : function (percentComplete) {\n return path[percentComplete * (path.length - 1) | 0];\n };\n };\n }();\n\n var cubicBezier = function cubicBezier(t1, p1, t2, p2) {\n var bezier = generateCubicBezier(t1, p1, t2, p2);\n return function (start, end, percent) {\n return start + (end - start) * bezier(percent);\n };\n };\n\n var easings = {\n 'linear': function linear(start, end, percent) {\n return start + (end - start) * percent;\n },\n // default easings\n 'ease': cubicBezier(0.25, 0.1, 0.25, 1),\n 'ease-in': cubicBezier(0.42, 0, 1, 1),\n 'ease-out': cubicBezier(0, 0, 0.58, 1),\n 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1),\n // sine\n 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715),\n 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1),\n 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95),\n // quad\n 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53),\n 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94),\n 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955),\n // cubic\n 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19),\n 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1),\n 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1),\n // quart\n 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22),\n 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1),\n 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1),\n // quint\n 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06),\n 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1),\n 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1),\n // expo\n 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035),\n 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1),\n 'ease-in-out-expo': cubicBezier(1, 0, 0, 1),\n // circ\n 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335),\n 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1),\n 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86),\n // user param easings...\n 'spring': function spring(tension, friction, duration) {\n if (duration === 0) {\n // can't get a spring w/ duration 0\n return easings.linear; // duration 0 => jump to end so impl doesn't matter\n }\n\n var spring = generateSpringRK4(tension, friction, duration);\n return function (start, end, percent) {\n return start + (end - start) * spring(percent);\n };\n },\n 'cubic-bezier': cubicBezier\n };\n\n function getEasedValue(type, start, end, percent, easingFn) {\n if (percent === 1) {\n return end;\n }\n\n if (start === end) {\n return end;\n }\n\n var val = easingFn(start, end, percent);\n\n if (type == null) {\n return val;\n }\n\n if (type.roundValue || type.color) {\n val = Math.round(val);\n }\n\n if (type.min !== undefined) {\n val = Math.max(val, type.min);\n }\n\n if (type.max !== undefined) {\n val = Math.min(val, type.max);\n }\n\n return val;\n }\n\n function getValue(prop, spec) {\n if (prop.pfValue != null || prop.value != null) {\n if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) {\n return prop.pfValue;\n } else {\n return prop.value;\n }\n } else {\n return prop;\n }\n }\n\n function ease(startProp, endProp, percent, easingFn, propSpec) {\n var type = propSpec != null ? propSpec.type : null;\n\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n\n var start = getValue(startProp, propSpec);\n var end = getValue(endProp, propSpec);\n\n if (number$1(start) && number$1(end)) {\n return getEasedValue(type, start, end, percent, easingFn);\n } else if (array(start) && array(end)) {\n var easedArr = [];\n\n for (var i = 0; i < end.length; i++) {\n var si = start[i];\n var ei = end[i];\n\n if (si != null && ei != null) {\n var val = getEasedValue(type, si, ei, percent, easingFn);\n easedArr.push(val);\n } else {\n easedArr.push(ei);\n }\n }\n\n return easedArr;\n }\n\n return undefined;\n }\n\n function step$1(self, ani, now, isCore) {\n var isEles = !isCore;\n var _p = self._private;\n var ani_p = ani._private;\n var pEasing = ani_p.easing;\n var startTime = ani_p.startTime;\n var cy = isCore ? self : self.cy();\n var style = cy.style();\n\n if (!ani_p.easingImpl) {\n if (pEasing == null) {\n // use default\n ani_p.easingImpl = easings['linear'];\n } else {\n // then define w/ name\n var easingVals;\n\n if (string(pEasing)) {\n var easingProp = style.parse('transition-timing-function', pEasing);\n easingVals = easingProp.value;\n } else {\n // then assume preparsed array\n easingVals = pEasing;\n }\n\n var name, args;\n\n if (string(easingVals)) {\n name = easingVals;\n args = [];\n } else {\n name = easingVals[1];\n args = easingVals.slice(2).map(function (n) {\n return +n;\n });\n }\n\n if (args.length > 0) {\n // create with args\n if (name === 'spring') {\n args.push(ani_p.duration); // need duration to generate spring\n }\n\n ani_p.easingImpl = easings[name].apply(null, args);\n } else {\n // static impl by name\n ani_p.easingImpl = easings[name];\n }\n }\n }\n\n var easing = ani_p.easingImpl;\n var percent;\n\n if (ani_p.duration === 0) {\n percent = 1;\n } else {\n percent = (now - startTime) / ani_p.duration;\n }\n\n if (ani_p.applying) {\n percent = ani_p.progress;\n }\n\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n\n if (ani_p.delay == null) {\n // then update\n var startPos = ani_p.startPosition;\n var endPos = ani_p.position;\n\n if (endPos && isEles && !self.locked()) {\n var newPos = {};\n\n if (valid(startPos.x, endPos.x)) {\n newPos.x = ease(startPos.x, endPos.x, percent, easing);\n }\n\n if (valid(startPos.y, endPos.y)) {\n newPos.y = ease(startPos.y, endPos.y, percent, easing);\n }\n\n self.position(newPos);\n }\n\n var startPan = ani_p.startPan;\n var endPan = ani_p.pan;\n var pan = _p.pan;\n var animatingPan = endPan != null && isCore;\n\n if (animatingPan) {\n if (valid(startPan.x, endPan.x)) {\n pan.x = ease(startPan.x, endPan.x, percent, easing);\n }\n\n if (valid(startPan.y, endPan.y)) {\n pan.y = ease(startPan.y, endPan.y, percent, easing);\n }\n\n self.emit('pan');\n }\n\n var startZoom = ani_p.startZoom;\n var endZoom = ani_p.zoom;\n var animatingZoom = endZoom != null && isCore;\n\n if (animatingZoom) {\n if (valid(startZoom, endZoom)) {\n _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom);\n }\n\n self.emit('zoom');\n }\n\n if (animatingPan || animatingZoom) {\n self.emit('viewport');\n }\n\n var props = ani_p.style;\n\n if (props && props.length > 0 && isEles) {\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var _name = prop.name;\n var end = prop;\n var start = ani_p.startStyle[_name];\n var propSpec = style.properties[start.name];\n var easedVal = ease(start, end, percent, easing, propSpec);\n style.overrideBypass(self, _name, easedVal);\n } // for props\n\n\n self.emit('style');\n } // if\n\n }\n\n ani_p.progress = percent;\n return percent;\n }\n\n function valid(start, end) {\n if (start == null || end == null) {\n return false;\n }\n\n if (number$1(start) && number$1(end)) {\n return true;\n } else if (start && end) {\n return true;\n }\n\n return false;\n }\n\n function startAnimation(self, ani, now, isCore) {\n var ani_p = ani._private;\n ani_p.started = true;\n ani_p.startTime = now - ani_p.progress * ani_p.duration;\n }\n\n function stepAll(now, cy) {\n var eles = cy._private.aniEles;\n var doneEles = [];\n\n function stepOne(ele, isCore) {\n var _p = ele._private;\n var current = _p.animation.current;\n var queue = _p.animation.queue;\n var ranAnis = false; // if nothing currently animating, get something from the queue\n\n if (current.length === 0) {\n var next = queue.shift();\n\n if (next) {\n current.push(next);\n }\n }\n\n var callbacks = function callbacks(_callbacks) {\n for (var j = _callbacks.length - 1; j >= 0; j--) {\n var cb = _callbacks[j];\n cb();\n }\n\n _callbacks.splice(0, _callbacks.length);\n }; // step and remove if done\n\n\n for (var i = current.length - 1; i >= 0; i--) {\n var ani = current[i];\n var ani_p = ani._private;\n\n if (ani_p.stopped) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.frames);\n continue;\n }\n\n if (!ani_p.playing && !ani_p.applying) {\n continue;\n } // an apply() while playing shouldn't do anything\n\n\n if (ani_p.playing && ani_p.applying) {\n ani_p.applying = false;\n }\n\n if (!ani_p.started) {\n startAnimation(ele, ani, now);\n }\n\n step$1(ele, ani, now, isCore);\n\n if (ani_p.applying) {\n ani_p.applying = false;\n }\n\n callbacks(ani_p.frames);\n\n if (ani_p.step != null) {\n ani_p.step(now);\n }\n\n if (ani.completed()) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.completes);\n }\n\n ranAnis = true;\n }\n\n if (!isCore && current.length === 0 && queue.length === 0) {\n doneEles.push(ele);\n }\n\n return ranAnis;\n } // stepElement\n // handle all eles\n\n\n var ranEleAni = false;\n\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n var handledThisEle = stepOne(ele);\n ranEleAni = ranEleAni || handledThisEle;\n } // each element\n\n\n var ranCoreAni = stepOne(cy, true); // notify renderer\n\n if (ranEleAni || ranCoreAni) {\n if (eles.length > 0) {\n cy.notify('draw', eles);\n } else {\n cy.notify('draw');\n }\n } // remove elements from list of currently animating if its queues are empty\n\n\n eles.unmerge(doneEles);\n cy.emit('step');\n } // stepAll\n\n var corefn$8 = {\n // pull in animation functions\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop(),\n addToAnimationPool: function addToAnimationPool(eles) {\n var cy = this;\n\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n\n\n cy._private.aniEles.merge(eles);\n },\n stopAnimationLoop: function stopAnimationLoop() {\n this._private.animationsRunning = false;\n },\n startAnimationLoop: function startAnimationLoop() {\n var cy = this;\n cy._private.animationsRunning = true;\n\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n // NB the animation loop will exec in headless environments if style enabled\n // and explicit cy.destroy() is necessary to stop the loop\n\n\n function headlessStep() {\n if (!cy._private.animationsRunning) {\n return;\n }\n\n requestAnimationFrame(function animationStep(now) {\n stepAll(now, cy);\n headlessStep();\n });\n }\n\n var renderer = cy.renderer();\n\n if (renderer && renderer.beforeRender) {\n // let the renderer schedule animations\n renderer.beforeRender(function rendererAnimationStep(willDraw, now) {\n stepAll(now, cy);\n }, renderer.beforeRenderPriorities.animations);\n } else {\n // manage the animation loop ourselves\n headlessStep(); // first call\n }\n }\n };\n\n var emitterOptions = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(cy, listener, eventObj) {\n var selector = listener.qualifier;\n\n if (selector != null) {\n return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n\n return true;\n },\n addEventFields: function addEventFields(cy, evt) {\n evt.cy = cy;\n evt.target = cy;\n },\n callbackContext: function callbackContext(cy, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : cy;\n }\n };\n\n var argSelector = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n };\n\n var elesfn = {\n createEmitter: function createEmitter() {\n var _p = this._private;\n\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions, this);\n }\n\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n this.emitter().on(events, argSelector(selector), callback);\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n this.emitter().removeListener(events, argSelector(selector), callback);\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n this.emitter().removeAllListeners();\n return this;\n },\n one: function one(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n once: function once(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n emit: function emit(events, extraParams) {\n this.emitter().emit(events, extraParams);\n return this;\n },\n emitAndNotify: function emitAndNotify(event, eles) {\n this.emit(event);\n this.notify(event, eles);\n return this;\n }\n };\n define.eventAliasesOn(elesfn);\n\n var corefn$7 = {\n png: function png(options) {\n var renderer = this._private.renderer;\n options = options || {};\n return renderer.png(options);\n },\n jpg: function jpg(options) {\n var renderer = this._private.renderer;\n options = options || {};\n options.bg = options.bg || '#fff';\n return renderer.jpg(options);\n }\n };\n corefn$7.jpeg = corefn$7.jpg;\n\n var corefn$6 = {\n layout: function layout(options) {\n var cy = this;\n\n if (options == null) {\n error('Layout options must be specified to make a layout');\n return;\n }\n\n if (options.name == null) {\n error('A `name` must be specified to make a layout');\n return;\n }\n\n var name = options.name;\n var Layout = cy.extension('layout', name);\n\n if (Layout == null) {\n error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?');\n return;\n }\n\n var eles;\n\n if (string(options.eles)) {\n eles = cy.$(options.eles);\n } else {\n eles = options.eles != null ? options.eles : cy.$();\n }\n\n var layout = new Layout(extend({}, options, {\n cy: cy,\n eles: eles\n }));\n return layout;\n }\n };\n corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout;\n\n var corefn$5 = {\n notify: function notify(eventName, eventEles) {\n var _p = this._private;\n\n if (this.batching()) {\n _p.batchNotifications = _p.batchNotifications || {};\n var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection();\n\n if (eventEles != null) {\n eles.merge(eventEles);\n }\n\n return; // notifications are disabled during batching\n }\n\n if (!_p.notificationsEnabled) {\n return;\n } // exit on disabled\n\n\n var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528\n\n if (this.destroyed() || !renderer) {\n return;\n }\n\n renderer.notify(eventName, eventEles);\n },\n notifications: function notifications(bool) {\n var p = this._private;\n\n if (bool === undefined) {\n return p.notificationsEnabled;\n } else {\n p.notificationsEnabled = bool ? true : false;\n }\n\n return this;\n },\n noNotifications: function noNotifications(callback) {\n this.notifications(false);\n callback();\n this.notifications(true);\n },\n batching: function batching() {\n return this._private.batchCount > 0;\n },\n startBatch: function startBatch() {\n var _p = this._private;\n\n if (_p.batchCount == null) {\n _p.batchCount = 0;\n }\n\n if (_p.batchCount === 0) {\n _p.batchStyleEles = this.collection();\n _p.batchNotifications = {};\n }\n\n _p.batchCount++;\n return this;\n },\n endBatch: function endBatch() {\n var _p = this._private;\n\n if (_p.batchCount === 0) {\n return this;\n }\n\n _p.batchCount--;\n\n if (_p.batchCount === 0) {\n // update style for dirty eles\n _p.batchStyleEles.updateStyle();\n\n var renderer = this.renderer(); // notify the renderer of queued eles and event types\n\n Object.keys(_p.batchNotifications).forEach(function (eventName) {\n var eles = _p.batchNotifications[eventName];\n\n if (eles.empty()) {\n renderer.notify(eventName);\n } else {\n renderer.notify(eventName, eles);\n }\n });\n }\n\n return this;\n },\n batch: function batch(callback) {\n this.startBatch();\n callback();\n this.endBatch();\n return this;\n },\n // for backwards compatibility\n batchData: function batchData(map) {\n var cy = this;\n return this.batch(function () {\n var ids = Object.keys(map);\n\n for (var i = 0; i < ids.length; i++) {\n var id = ids[i];\n var data = map[id];\n var ele = cy.getElementById(id);\n ele.data(data);\n }\n });\n }\n };\n\n var rendererDefaults = defaults$g({\n hideEdgesOnViewport: false,\n textureOnViewport: false,\n motionBlur: false,\n motionBlurOpacity: 0.05,\n pixelRatio: undefined,\n desktopTapThreshold: 4,\n touchTapThreshold: 8,\n wheelSensitivity: 1,\n debug: false,\n showFps: false\n });\n var corefn$4 = {\n renderTo: function renderTo(context, zoom, pan, pxRatio) {\n var r = this._private.renderer;\n r.renderTo(context, zoom, pan, pxRatio);\n return this;\n },\n renderer: function renderer() {\n return this._private.renderer;\n },\n forceRender: function forceRender() {\n this.notify('draw');\n return this;\n },\n resize: function resize() {\n this.invalidateSize();\n this.emitAndNotify('resize');\n return this;\n },\n initRenderer: function initRenderer(options) {\n var cy = this;\n var RendererProto = cy.extension('renderer', options.name);\n\n if (RendererProto == null) {\n error(\"Can not initialise: No such renderer `\".concat(options.name, \"` found. Did you forget to import it and `cytoscape.use()` it?\"));\n return;\n }\n\n if (options.wheelSensitivity !== undefined) {\n warn(\"You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.\");\n }\n\n var rOpts = rendererDefaults(options);\n rOpts.cy = cy;\n cy._private.renderer = new RendererProto(rOpts);\n this.notify('init');\n },\n destroyRenderer: function destroyRenderer() {\n var cy = this;\n cy.notify('destroy'); // destroy the renderer\n\n var domEle = cy.container();\n\n if (domEle) {\n domEle._cyreg = null;\n\n while (domEle.childNodes.length > 0) {\n domEle.removeChild(domEle.childNodes[0]);\n }\n }\n\n cy._private.renderer = null; // to be extra safe, remove the ref\n\n cy.mutableElements().forEach(function (ele) {\n var _p = ele._private;\n _p.rscratch = {};\n _p.rstyle = {};\n _p.animation.current = [];\n _p.animation.queue = [];\n });\n },\n onRender: function onRender(fn) {\n return this.on('render', fn);\n },\n offRender: function offRender(fn) {\n return this.off('render', fn);\n }\n };\n corefn$4.invalidateDimensions = corefn$4.resize;\n\n var corefn$3 = {\n // get a collection\n // - empty collection on no args\n // - collection of elements in the graph on selector arg\n // - guarantee a returned collection when elements or collection specified\n collection: function collection(eles, opts) {\n if (string(eles)) {\n return this.$(eles);\n } else if (elementOrCollection(eles)) {\n return eles.collection();\n } else if (array(eles)) {\n if (!opts) {\n opts = {};\n }\n\n return new Collection(this, eles, opts.unique, opts.removed);\n }\n\n return new Collection(this);\n },\n nodes: function nodes(selector) {\n var nodes = this.$(function (ele) {\n return ele.isNode();\n });\n\n if (selector) {\n return nodes.filter(selector);\n }\n\n return nodes;\n },\n edges: function edges(selector) {\n var edges = this.$(function (ele) {\n return ele.isEdge();\n });\n\n if (selector) {\n return edges.filter(selector);\n }\n\n return edges;\n },\n // search the graph like jQuery\n $: function $(selector) {\n var eles = this._private.elements;\n\n if (selector) {\n return eles.filter(selector);\n } else {\n return eles.spawnSelf();\n }\n },\n mutableElements: function mutableElements() {\n return this._private.elements;\n }\n }; // aliases\n\n corefn$3.elements = corefn$3.filter = corefn$3.$;\n\n var styfn$8 = {}; // keys for style blocks, e.g. ttfftt\n\n var TRUE = 't';\n var FALSE = 'f'; // (potentially expensive calculation)\n // apply the style to the element based on\n // - its bypass\n // - what selectors match it\n\n styfn$8.apply = function (eles) {\n var self = this;\n var _p = self._private;\n var cy = _p.cy;\n var updatedEles = cy.collection();\n\n for (var ie = 0; ie < eles.length; ie++) {\n var ele = eles[ie];\n var cxtMeta = self.getContextMeta(ele);\n\n if (cxtMeta.empty) {\n continue;\n }\n\n var cxtStyle = self.getContextStyle(cxtMeta);\n var app = self.applyContextStyle(cxtMeta, cxtStyle, ele);\n\n if (ele._private.appliedInitStyle) {\n self.updateTransitions(ele, app.diffProps);\n } else {\n ele._private.appliedInitStyle = true;\n }\n\n var hintsDiff = self.updateStyleHints(ele);\n\n if (hintsDiff) {\n updatedEles.push(ele);\n }\n } // for elements\n\n\n return updatedEles;\n };\n\n styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) {\n var self = this;\n var cache = self._private.propDiffs = self._private.propDiffs || {};\n var dualCxtKey = oldCxtKey + '-' + newCxtKey;\n var cachedVal = cache[dualCxtKey];\n\n if (cachedVal) {\n return cachedVal;\n }\n\n var diffProps = [];\n var addedProp = {};\n\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var oldHasCxt = oldCxtKey[i] === TRUE;\n var newHasCxt = newCxtKey[i] === TRUE;\n var cxtHasDiffed = oldHasCxt !== newHasCxt;\n var cxtHasMappedProps = cxt.mappedProperties.length > 0;\n\n if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) {\n var props = void 0;\n\n if (cxtHasDiffed && cxtHasMappedProps) {\n props = cxt.properties; // suffices b/c mappedProperties is a subset of properties\n } else if (cxtHasDiffed) {\n props = cxt.properties; // need to check them all\n } else if (cxtHasMappedProps) {\n props = cxt.mappedProperties; // only need to check mapped\n }\n\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n var name = prop.name; // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter\n // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result\n // is cached)\n\n var laterCxtOverrides = false;\n\n for (var k = i + 1; k < self.length; k++) {\n var laterCxt = self[k];\n var hasLaterCxt = newCxtKey[k] === TRUE;\n\n if (!hasLaterCxt) {\n continue;\n } // can't override unless the context is active\n\n\n laterCxtOverrides = laterCxt.properties[prop.name] != null;\n\n if (laterCxtOverrides) {\n break;\n } // exit early as long as one later context overrides\n\n }\n\n if (!addedProp[name] && !laterCxtOverrides) {\n addedProp[name] = true;\n diffProps.push(name);\n }\n } // for props\n\n } // if\n\n } // for contexts\n\n\n cache[dualCxtKey] = diffProps;\n return diffProps;\n };\n\n styfn$8.getContextMeta = function (ele) {\n var self = this;\n var cxtKey = '';\n var diffProps;\n var prevKey = ele._private.styleCxtKey || ''; // get the cxt key\n\n for (var i = 0; i < self.length; i++) {\n var context = self[i];\n var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core'\n\n if (contextSelectorMatches) {\n cxtKey += TRUE;\n } else {\n cxtKey += FALSE;\n }\n } // for context\n\n\n diffProps = self.getPropertiesDiff(prevKey, cxtKey);\n ele._private.styleCxtKey = cxtKey;\n return {\n key: cxtKey,\n diffPropNames: diffProps,\n empty: diffProps.length === 0\n };\n }; // gets a computed ele style object based on matched contexts\n\n\n styfn$8.getContextStyle = function (cxtMeta) {\n var cxtKey = cxtMeta.key;\n var self = this;\n var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; // if already computed style, returned cached copy\n\n if (cxtStyles[cxtKey]) {\n return cxtStyles[cxtKey];\n }\n\n var style = {\n _private: {\n key: cxtKey\n }\n };\n\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var hasCxt = cxtKey[i] === TRUE;\n\n if (!hasCxt) {\n continue;\n }\n\n for (var j = 0; j < cxt.properties.length; j++) {\n var prop = cxt.properties[j];\n style[prop.name] = prop;\n }\n }\n\n cxtStyles[cxtKey] = style;\n return style;\n };\n\n styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) {\n var self = this;\n var diffProps = cxtMeta.diffPropNames;\n var retDiffProps = {};\n var types = self.types;\n\n for (var i = 0; i < diffProps.length; i++) {\n var diffPropName = diffProps[i];\n var cxtProp = cxtStyle[diffPropName];\n var eleProp = ele.pstyle(diffPropName);\n\n if (!cxtProp) {\n // no context prop means delete\n if (!eleProp) {\n continue; // no existing prop means nothing needs to be removed\n // nb affects initial application on mapped values like control-point-distances\n } else if (eleProp.bypass) {\n cxtProp = {\n name: diffPropName,\n deleteBypassed: true\n };\n } else {\n cxtProp = {\n name: diffPropName,\n \"delete\": true\n };\n }\n } // save cycles when the context prop doesn't need to be applied\n\n\n if (eleProp === cxtProp) {\n continue;\n } // save cycles when a mapped context prop doesn't need to be applied\n\n\n if (cxtProp.mapped === types.fn // context prop is function mapper\n && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one)\n && eleProp.mapping != null // ele prop is a concrete value from from a mapper\n && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper\n ) {\n // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet)\n var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy\n\n var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss\n\n if (fnValue === mapping.prevFnValue) {\n continue;\n }\n }\n\n var retDiffProp = retDiffProps[diffPropName] = {\n prev: eleProp\n };\n self.applyParsedProperty(ele, cxtProp);\n retDiffProp.next = ele.pstyle(diffPropName);\n\n if (retDiffProp.next && retDiffProp.next.bypass) {\n retDiffProp.next = retDiffProp.next.bypassed;\n }\n }\n\n return {\n diffProps: retDiffProps\n };\n };\n\n styfn$8.updateStyleHints = function (ele) {\n var _p = ele._private;\n var self = this;\n var propNames = self.propertyGroupNames;\n var propGrKeys = self.propertyGroupKeys;\n\n var propHash = function propHash(ele, propNames, seedKey) {\n return self.getPropertiesHash(ele, propNames, seedKey);\n };\n\n var oldStyleKey = _p.styleKey;\n\n if (ele.removed()) {\n return false;\n }\n\n var isNode = _p.group === 'nodes'; // get the style key hashes per prop group\n // but lazily -- only use non-default prop values to reduce the number of hashes\n //\n\n var overriddenStyles = ele._private.style;\n propNames = Object.keys(overriddenStyles);\n\n for (var i = 0; i < propGrKeys.length; i++) {\n var grKey = propGrKeys[i];\n _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n }\n\n var updateGrKey1 = function updateGrKey1(val, grKey) {\n return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]);\n };\n\n var updateGrKey2 = function updateGrKey2(val, grKey) {\n return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]);\n };\n\n var updateGrKey = function updateGrKey(val, grKey) {\n updateGrKey1(val, grKey);\n updateGrKey2(val, grKey);\n };\n\n var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) {\n for (var j = 0; j < strVal.length; j++) {\n var ch = strVal.charCodeAt(j);\n updateGrKey1(ch, grKey);\n updateGrKey2(ch, grKey);\n }\n }; // - hashing works on 32 bit ints b/c we use bitwise ops\n // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function)\n // - raise up small numbers so more significant digits are seen by hashing\n // - make small numbers larger than a normal value to avoid collisions\n // - works in practice and it's relatively cheap\n\n\n var N = 2000000000;\n\n var cleanNum = function cleanNum(val) {\n return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val;\n };\n\n for (var _i = 0; _i < propNames.length; _i++) {\n var name = propNames[_i];\n var parsedProp = overriddenStyles[name];\n\n if (parsedProp == null) {\n continue;\n }\n\n var propInfo = this.properties[name];\n var type = propInfo.type;\n var _grKey = propInfo.groupKey;\n var normalizedNumberVal = void 0;\n\n if (propInfo.hashOverride != null) {\n normalizedNumberVal = propInfo.hashOverride(ele, parsedProp);\n } else if (parsedProp.pfValue != null) {\n normalizedNumberVal = parsedProp.pfValue;\n } // might not be a number if it allows enums\n\n\n var numberVal = propInfo.enums == null ? parsedProp.value : null;\n var haveNormNum = normalizedNumberVal != null;\n var haveUnitedNum = numberVal != null;\n var haveNum = haveNormNum || haveUnitedNum;\n var units = parsedProp.units; // numbers are cheaper to hash than strings\n // 1 hash op vs n hash ops (for length n string)\n\n if (type.number && haveNum && !type.multiple) {\n var v = haveNormNum ? normalizedNumberVal : numberVal;\n updateGrKey(cleanNum(v), _grKey);\n\n if (!haveNormNum && units != null) {\n updateGrKeyWStr(units, _grKey);\n }\n } else {\n updateGrKeyWStr(parsedProp.strValue, _grKey);\n }\n } // overall style key\n //\n\n\n var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n\n for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) {\n var _grKey2 = propGrKeys[_i2];\n var grHash = _p.styleKeys[_grKey2];\n hash[0] = hashInt(grHash[0], hash[0]);\n hash[1] = hashIntAlt(grHash[1], hash[1]);\n }\n\n _p.styleKey = combineHashes(hash[0], hash[1]); // label dims\n //\n\n var sk = _p.styleKeys;\n _p.labelDimsKey = combineHashesArray(sk.labelDimensions);\n var labelKeys = propHash(ele, ['label'], sk.labelDimensions);\n _p.labelKey = combineHashesArray(labelKeys);\n _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys));\n\n if (!isNode) {\n var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions);\n _p.sourceLabelKey = combineHashesArray(sourceLabelKeys);\n _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys));\n var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions);\n _p.targetLabelKey = combineHashesArray(targetLabelKeys);\n _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys));\n } // node\n //\n\n\n if (isNode) {\n var _p$styleKeys = _p.styleKeys,\n nodeBody = _p$styleKeys.nodeBody,\n nodeBorder = _p$styleKeys.nodeBorder,\n backgroundImage = _p$styleKeys.backgroundImage,\n compound = _p$styleKeys.compound,\n pie = _p$styleKeys.pie;\n var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) {\n return k != null;\n }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]);\n _p.nodeKey = combineHashesArray(nodeKeys);\n _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT;\n }\n\n return oldStyleKey !== _p.styleKey;\n };\n\n styfn$8.clearStyleHints = function (ele) {\n var _p = ele._private;\n _p.styleCxtKey = '';\n _p.styleKeys = {};\n _p.styleKey = null;\n _p.labelKey = null;\n _p.labelStyleKey = null;\n _p.sourceLabelKey = null;\n _p.sourceLabelStyleKey = null;\n _p.targetLabelKey = null;\n _p.targetLabelStyleKey = null;\n _p.nodeKey = null;\n _p.hasPie = null;\n }; // apply a property to the style (for internal use)\n // returns whether application was successful\n //\n // now, this function flattens the property, and here's how:\n //\n // for parsedProp:{ bypass: true, deleteBypass: true }\n // no property is generated, instead the bypass property in the\n // element's style is replaced by what's pointed to by the `bypassed`\n // field in the bypass property (i.e. restoring the property the\n // bypass was overriding)\n //\n // for parsedProp:{ mapped: truthy }\n // the generated flattenedProp:{ mapping: prop }\n //\n // for parsedProp:{ bypass: true }\n // the generated flattenedProp:{ bypassed: parsedProp }\n\n\n styfn$8.applyParsedProperty = function (ele, parsedProp) {\n var self = this;\n var prop = parsedProp;\n var style = ele._private.style;\n var flatProp;\n var types = self.types;\n var type = self.properties[prop.name].type;\n var propIsBypass = prop.bypass;\n var origProp = style[prop.name];\n var origPropIsBypass = origProp && origProp.bypass;\n var _p = ele._private;\n var flatPropMapping = 'mapping';\n\n var getVal = function getVal(p) {\n if (p == null) {\n return null;\n } else if (p.pfValue != null) {\n return p.pfValue;\n } else {\n return p.value;\n }\n };\n\n var checkTriggers = function checkTriggers() {\n var fromVal = getVal(origProp);\n var toVal = getVal(prop);\n self.checkTriggers(ele, prop.name, fromVal, toVal);\n };\n\n if (prop && prop.name.substr(0, 3) === 'pie') {\n warn('The pie style properties are deprecated. Create charts using background images instead.');\n } // edge sanity checks to prevent the client from making serious mistakes\n\n\n if (parsedProp.name === 'curve-style' && ele.isEdge() && ( // loops must be bundled beziers\n parsedProp.value !== 'bezier' && ele.isLoop() || // edges connected to compound nodes can not be haystacks\n parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) {\n prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass);\n }\n\n if (prop[\"delete\"]) {\n // delete the property and use the default value on falsey value\n style[prop.name] = undefined;\n checkTriggers();\n return true;\n }\n\n if (prop.deleteBypassed) {\n // delete the property that the\n if (!origProp) {\n checkTriggers();\n return true; // can't delete if no prop\n } else if (origProp.bypass) {\n // delete bypassed\n origProp.bypassed = undefined;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypassed\n }\n } // check if we need to delete the current bypass\n\n\n if (prop.deleteBypass) {\n // then this property is just here to indicate we need to delete\n if (!origProp) {\n checkTriggers();\n return true; // property is already not defined\n } else if (origProp.bypass) {\n // then replace the bypass property with the original\n // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary)\n style[prop.name] = origProp.bypassed;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypass\n }\n }\n\n var printMappingErr = function printMappingErr() {\n warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined');\n }; // put the property in the style objects\n\n\n switch (prop.mapped) {\n // flatten the property if mapped\n case types.mapData:\n {\n // flatten the field (e.g. data.foo.bar)\n var fields = prop.field.split('.');\n var fieldVal = _p.data;\n\n for (var i = 0; i < fields.length && fieldVal; i++) {\n var field = fields[i];\n fieldVal = fieldVal[field];\n }\n\n if (fieldVal == null) {\n printMappingErr();\n return false;\n }\n\n var percent;\n\n if (!number$1(fieldVal)) {\n // then don't apply and fall back on the existing style\n warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)');\n return false;\n } else {\n var fieldWidth = prop.fieldMax - prop.fieldMin;\n\n if (fieldWidth === 0) {\n // safety check -- not strictly necessary as no props of zero range should be passed here\n percent = 0;\n } else {\n percent = (fieldVal - prop.fieldMin) / fieldWidth;\n }\n } // make sure to bound percent value\n\n\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n\n if (type.color) {\n var r1 = prop.valueMin[0];\n var r2 = prop.valueMax[0];\n var g1 = prop.valueMin[1];\n var g2 = prop.valueMax[1];\n var b1 = prop.valueMin[2];\n var b2 = prop.valueMax[2];\n var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3];\n var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3];\n var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)];\n flatProp = {\n // colours are simple, so just create the flat property instead of expensive string parsing\n bypass: prop.bypass,\n // we're a bypass if the mapping property is a bypass\n name: prop.name,\n value: clr,\n strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')'\n };\n } else if (type.number) {\n var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent;\n flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping);\n } else {\n return false; // can only map to colours and numbers\n }\n\n if (!flatProp) {\n // if we can't flatten the property, then don't apply the property and fall back on the existing style\n printMappingErr();\n return false;\n }\n\n flatProp.mapping = prop; // keep a reference to the mapping\n\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n // direct mapping\n\n case types.data:\n {\n // flatten the field (e.g. data.foo.bar)\n var _fields = prop.field.split('.');\n\n var _fieldVal = _p.data;\n\n for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) {\n var _field = _fields[_i3];\n _fieldVal = _fieldVal[_field];\n }\n\n if (_fieldVal != null) {\n flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping);\n }\n\n if (!flatProp) {\n // if we can't flatten the property, then don't apply and fall back on the existing style\n printMappingErr();\n return false;\n }\n\n flatProp.mapping = prop; // keep a reference to the mapping\n\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n\n case types.fn:\n {\n var fn = prop.value;\n var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function\n\n prop.prevFnValue = fnRetVal;\n\n if (fnRetVal == null) {\n warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)');\n return false;\n }\n\n flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping);\n\n if (!flatProp) {\n warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)');\n return false;\n }\n\n flatProp.mapping = copy(prop); // keep a reference to the mapping\n\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n\n case undefined:\n break;\n // just set the property\n\n default:\n return false;\n // not a valid mapping\n } // if the property is a bypass property, then link the resultant property to the original one\n\n\n if (propIsBypass) {\n if (origPropIsBypass) {\n // then this bypass overrides the existing one\n prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass\n } else {\n // then link the orig prop to the new bypass\n prop.bypassed = origProp;\n }\n\n style[prop.name] = prop; // and set\n } else {\n // prop is not bypass\n if (origPropIsBypass) {\n // then keep the orig prop (since it's a bypass) and link to the new prop\n origProp.bypassed = prop;\n } else {\n // then just replace the old prop with the new one\n style[prop.name] = prop;\n }\n }\n\n checkTriggers();\n return true;\n };\n\n styfn$8.cleanElements = function (eles, keepBypasses) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n this.clearStyleHints(ele);\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache();\n\n if (!keepBypasses) {\n ele._private.style = {};\n } else {\n var style = ele._private.style;\n var propNames = Object.keys(style);\n\n for (var j = 0; j < propNames.length; j++) {\n var propName = propNames[j];\n var eleProp = style[propName];\n\n if (eleProp != null) {\n if (eleProp.bypass) {\n eleProp.bypassed = null;\n } else {\n style[propName] = null;\n }\n }\n }\n }\n }\n }; // updates the visual style for all elements (useful for manual style modification after init)\n\n\n styfn$8.update = function () {\n var cy = this._private.cy;\n var eles = cy.mutableElements();\n eles.updateStyle();\n }; // diffProps : { name => { prev, next } }\n\n\n styfn$8.updateTransitions = function (ele, diffProps) {\n var self = this;\n var _p = ele._private;\n var props = ele.pstyle('transition-property').value;\n var duration = ele.pstyle('transition-duration').pfValue;\n var delay = ele.pstyle('transition-delay').pfValue;\n\n if (props.length > 0 && duration > 0) {\n var style = {}; // build up the style to animate towards\n\n var anyPrev = false;\n\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var styProp = ele.pstyle(prop);\n var diffProp = diffProps[prop];\n\n if (!diffProp) {\n continue;\n }\n\n var prevProp = diffProp.prev;\n var fromProp = prevProp;\n var toProp = diffProp.next != null ? diffProp.next : styProp;\n var diff = false;\n var initVal = void 0;\n var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity)\n\n if (!fromProp) {\n continue;\n } // consider px values\n\n\n if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) {\n diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy\n\n initVal = fromProp.pfValue + initDt * diff; // consider numerical values\n } else if (number$1(fromProp.value) && number$1(toProp.value)) {\n diff = toProp.value - fromProp.value; // nonzero is truthy\n\n initVal = fromProp.value + initDt * diff; // consider colour values\n } else if (array(fromProp.value) && array(toProp.value)) {\n diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2];\n initVal = fromProp.strValue;\n } // the previous value is good for an animation only if it's different\n\n\n if (diff) {\n style[prop] = toProp.strValue; // to val\n\n this.applyBypass(ele, prop, initVal); // from val\n\n anyPrev = true;\n }\n } // end if props allow ani\n // can't transition if there's nothing previous to transition from\n\n\n if (!anyPrev) {\n return;\n }\n\n _p.transitioning = true;\n new Promise$1(function (resolve) {\n if (delay > 0) {\n ele.delayAnimation(delay).play().promise().then(resolve);\n } else {\n resolve();\n }\n }).then(function () {\n return ele.animation({\n style: style,\n duration: duration,\n easing: ele.pstyle('transition-timing-function').value,\n queue: false\n }).play().promise();\n }).then(function () {\n // if( !isBypass ){\n self.removeBypasses(ele, props);\n ele.emitAndNotify('style'); // }\n\n _p.transitioning = false;\n });\n } else if (_p.transitioning) {\n this.removeBypasses(ele, props);\n ele.emitAndNotify('style');\n _p.transitioning = false;\n }\n };\n\n styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) {\n var prop = this.properties[name];\n var triggerCheck = getTrigger(prop);\n\n if (triggerCheck != null && triggerCheck(fromValue, toValue)) {\n onTrigger(prop);\n }\n };\n\n styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) {\n var _this = this;\n\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersZOrder;\n }, function () {\n _this._private.cy.notify('zorder', ele);\n });\n };\n\n styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBounds;\n }, function (prop) {\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache(); // if the prop change makes the bb of pll bezier edges invalid,\n // then dirty the pll edge bb cache as well\n\n if ( // only for beziers -- so performance of other edges isn't affected\n prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) {\n ele.parallelEdges().forEach(function (pllEdge) {\n if (pllEdge.isBundledBezier()) {\n pllEdge.dirtyBoundingBoxCache();\n }\n });\n }\n });\n };\n\n styfn$8.checkTriggers = function (ele, name, fromValue, toValue) {\n ele.dirtyStyleCache();\n this.checkZOrderTrigger(ele, name, fromValue, toValue);\n this.checkBoundsTrigger(ele, name, fromValue, toValue);\n };\n\n var styfn$7 = {}; // bypasses are applied to an existing style on an element, and just tacked on temporarily\n // returns true iff application was successful for at least 1 specified property\n\n styfn$7.applyBypass = function (eles, name, value, updateTransitions) {\n var self = this;\n var props = [];\n var isBypass = true; // put all the properties (can specify one or many) in an array after parsing them\n\n if (name === '*' || name === '**') {\n // apply to all property names\n if (value !== undefined) {\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var _name = prop.name;\n var parsedProp = this.parse(_name, value, true);\n\n if (parsedProp) {\n props.push(parsedProp);\n }\n }\n }\n } else if (string(name)) {\n // then parse the single property\n var _parsedProp = this.parse(name, value, true);\n\n if (_parsedProp) {\n props.push(_parsedProp);\n }\n } else if (plainObject(name)) {\n // then parse each property\n var specifiedProps = name;\n updateTransitions = value;\n var names = Object.keys(specifiedProps);\n\n for (var _i = 0; _i < names.length; _i++) {\n var _name2 = names[_i];\n var _value = specifiedProps[_name2];\n\n if (_value === undefined) {\n // try camel case name too\n _value = specifiedProps[dash2camel(_name2)];\n }\n\n if (_value !== undefined) {\n var _parsedProp2 = this.parse(_name2, _value, true);\n\n if (_parsedProp2) {\n props.push(_parsedProp2);\n }\n }\n }\n } else {\n // can't do anything without well defined properties\n return false;\n } // we've failed if there are no valid properties\n\n\n if (props.length === 0) {\n return false;\n } // now, apply the bypass properties on the elements\n\n\n var ret = false; // return true if at least one succesful bypass applied\n\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n // for each ele\n var ele = eles[_i2];\n var diffProps = {};\n var diffProp = void 0;\n\n for (var j = 0; j < props.length; j++) {\n // for each prop\n var _prop = props[j];\n\n if (updateTransitions) {\n var prevProp = ele.pstyle(_prop.name);\n diffProp = diffProps[_prop.name] = {\n prev: prevProp\n };\n }\n\n ret = this.applyParsedProperty(ele, copy(_prop)) || ret;\n\n if (updateTransitions) {\n diffProp.next = ele.pstyle(_prop.name);\n }\n } // for props\n\n\n if (ret) {\n this.updateStyleHints(ele);\n }\n\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n\n\n return ret;\n }; // only useful in specific cases like animation\n\n\n styfn$7.overrideBypass = function (eles, name, value) {\n name = camel2dash(name);\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var prop = ele._private.style[name];\n var type = this.properties[name].type;\n var isColor = type.color;\n var isMulti = type.mutiple;\n var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value;\n\n if (!prop || !prop.bypass) {\n // need a bypass if one doesn't exist\n this.applyBypass(ele, name, value);\n } else {\n prop.value = value;\n\n if (prop.pfValue != null) {\n prop.pfValue = value;\n }\n\n if (isColor) {\n prop.strValue = 'rgb(' + value.join(',') + ')';\n } else if (isMulti) {\n prop.strValue = value.join(' ');\n } else {\n prop.strValue = '' + value;\n }\n\n this.updateStyleHints(ele);\n }\n\n this.checkTriggers(ele, name, oldValue, value);\n }\n };\n\n styfn$7.removeAllBypasses = function (eles, updateTransitions) {\n return this.removeBypasses(eles, this.propertyNames, updateTransitions);\n };\n\n styfn$7.removeBypasses = function (eles, props, updateTransitions) {\n var isBypass = true;\n\n for (var j = 0; j < eles.length; j++) {\n var ele = eles[j];\n var diffProps = {};\n\n for (var i = 0; i < props.length; i++) {\n var name = props[i];\n var prop = this.properties[name];\n var prevProp = ele.pstyle(prop.name);\n\n if (!prevProp || !prevProp.bypass) {\n // if a bypass doesn't exist for the prop, nothing needs to be removed\n continue;\n }\n\n var value = ''; // empty => remove bypass\n\n var parsedProp = this.parse(name, value, true);\n var diffProp = diffProps[prop.name] = {\n prev: prevProp\n };\n this.applyParsedProperty(ele, parsedProp);\n diffProp.next = ele.pstyle(prop.name);\n } // for props\n\n\n this.updateStyleHints(ele);\n\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n\n };\n\n var styfn$6 = {}; // gets what an em size corresponds to in pixels relative to a dom element\n\n styfn$6.getEmSizeInPixels = function () {\n var px = this.containerCss('font-size');\n\n if (px != null) {\n return parseFloat(px);\n } else {\n return 1; // for headless\n }\n }; // gets css property from the core container\n\n\n styfn$6.containerCss = function (propName) {\n var cy = this._private.cy;\n var domElement = cy.container();\n var containerWindow = cy.window();\n\n if (containerWindow && domElement && containerWindow.getComputedStyle) {\n return containerWindow.getComputedStyle(domElement).getPropertyValue(propName);\n }\n };\n\n var styfn$5 = {}; // gets the rendered style for an element\n\n styfn$5.getRenderedStyle = function (ele, prop) {\n if (prop) {\n return this.getStylePropertyValue(ele, prop, true);\n } else {\n return this.getRawStyle(ele, true);\n }\n }; // gets the raw style for an element\n\n\n styfn$5.getRawStyle = function (ele, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var rstyle = {};\n\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal);\n\n if (val != null) {\n rstyle[prop.name] = val;\n rstyle[dash2camel(prop.name)] = val;\n }\n }\n\n return rstyle;\n }\n };\n\n styfn$5.getIndexedStyle = function (ele, property, subproperty, index) {\n var pstyle = ele.pstyle(property)[subproperty][index];\n return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0];\n };\n\n styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var prop = self.properties[propName];\n\n if (prop.alias) {\n prop = prop.pointsTo;\n }\n\n var type = prop.type;\n var styleProp = ele.pstyle(prop.name);\n\n if (styleProp) {\n var value = styleProp.value,\n units = styleProp.units,\n strValue = styleProp.strValue;\n\n if (isRenderedVal && type.number && value != null && number$1(value)) {\n var zoom = ele.cy().zoom();\n\n var getRenderedValue = function getRenderedValue(val) {\n return val * zoom;\n };\n\n var getValueStringWithUnits = function getValueStringWithUnits(val, units) {\n return getRenderedValue(val) + units;\n };\n\n var isArrayValue = array(value);\n var haveUnits = isArrayValue ? units.every(function (u) {\n return u != null;\n }) : units != null;\n\n if (haveUnits) {\n if (isArrayValue) {\n return value.map(function (v, i) {\n return getValueStringWithUnits(v, units[i]);\n }).join(' ');\n } else {\n return getValueStringWithUnits(value, units);\n }\n } else {\n if (isArrayValue) {\n return value.map(function (v) {\n return string(v) ? v : '' + getRenderedValue(v);\n }).join(' ');\n } else {\n return '' + getRenderedValue(value);\n }\n }\n } else if (strValue != null) {\n return strValue;\n }\n }\n\n return null;\n }\n };\n\n styfn$5.getAnimationStartStyle = function (ele, aniProps) {\n var rstyle = {};\n\n for (var i = 0; i < aniProps.length; i++) {\n var aniProp = aniProps[i];\n var name = aniProp.name;\n var styleProp = ele.pstyle(name);\n\n if (styleProp !== undefined) {\n // then make a prop of it\n if (plainObject(styleProp)) {\n styleProp = this.parse(name, styleProp.strValue);\n } else {\n styleProp = this.parse(name, styleProp);\n }\n }\n\n if (styleProp) {\n rstyle[name] = styleProp;\n }\n }\n\n return rstyle;\n };\n\n styfn$5.getPropsList = function (propsObj) {\n var self = this;\n var rstyle = [];\n var style = propsObj;\n var props = self.properties;\n\n if (style) {\n var names = Object.keys(style);\n\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n var val = style[name];\n var prop = props[name] || props[camel2dash(name)];\n var styleProp = this.parse(prop.name, val);\n\n if (styleProp) {\n rstyle.push(styleProp);\n }\n }\n }\n\n return rstyle;\n };\n\n styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) {\n var hash = seed.slice();\n var name, val, strVal, chVal;\n var i, j;\n\n for (i = 0; i < propNames.length; i++) {\n name = propNames[i];\n val = ele.pstyle(name, false);\n\n if (val == null) {\n continue;\n } else if (val.pfValue != null) {\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n } else {\n strVal = val.strValue;\n\n for (j = 0; j < strVal.length; j++) {\n chVal = strVal.charCodeAt(j);\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n }\n }\n }\n\n return hash;\n };\n\n styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash;\n\n var styfn$4 = {};\n\n styfn$4.appendFromJson = function (json) {\n var style = this;\n\n for (var i = 0; i < json.length; i++) {\n var context = json[i];\n var selector = context.selector;\n var props = context.style || context.css;\n var names = Object.keys(props);\n style.selector(selector); // apply selector\n\n for (var j = 0; j < names.length; j++) {\n var name = names[j];\n var value = props[name];\n style.css(name, value); // apply property\n }\n }\n\n return style;\n }; // accessible cy.style() function\n\n\n styfn$4.fromJson = function (json) {\n var style = this;\n style.resetToDefault();\n style.appendFromJson(json);\n return style;\n }; // get json from cy.style() api\n\n\n styfn$4.json = function () {\n var json = [];\n\n for (var i = this.defaultLength; i < this.length; i++) {\n var cxt = this[i];\n var selector = cxt.selector;\n var props = cxt.properties;\n var css = {};\n\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n css[prop.name] = prop.strValue;\n }\n\n json.push({\n selector: !selector ? 'core' : selector.toString(),\n style: css\n });\n }\n\n return json;\n };\n\n var styfn$3 = {};\n\n styfn$3.appendFromString = function (string) {\n var self = this;\n var style = this;\n var remaining = '' + string;\n var selAndBlockStr;\n var blockRem;\n var propAndValStr; // remove comments from the style string\n\n remaining = remaining.replace(/[/][*](\\s|.)+?[*][/]/g, '');\n\n function removeSelAndBlockFromRemaining() {\n // remove the parsed selector and block from the remaining text to parse\n if (remaining.length > selAndBlockStr.length) {\n remaining = remaining.substr(selAndBlockStr.length);\n } else {\n remaining = '';\n }\n }\n\n function removePropAndValFromRem() {\n // remove the parsed property and value from the remaining block text to parse\n if (blockRem.length > propAndValStr.length) {\n blockRem = blockRem.substr(propAndValStr.length);\n } else {\n blockRem = '';\n }\n }\n\n for (;;) {\n var nothingLeftToParse = remaining.match(/^\\s*$/);\n\n if (nothingLeftToParse) {\n break;\n }\n\n var selAndBlock = remaining.match(/^\\s*((?:.|\\s)+?)\\s*\\{((?:.|\\s)+?)\\}/);\n\n if (!selAndBlock) {\n warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining);\n break;\n }\n\n selAndBlockStr = selAndBlock[0]; // parse the selector\n\n var selectorStr = selAndBlock[1];\n\n if (selectorStr !== 'core') {\n var selector = new Selector(selectorStr);\n\n if (selector.invalid) {\n warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); // skip this selector and block\n\n removeSelAndBlockFromRemaining();\n continue;\n }\n } // parse the block of properties and values\n\n\n var blockStr = selAndBlock[2];\n var invalidBlock = false;\n blockRem = blockStr;\n var props = [];\n\n for (;;) {\n var _nothingLeftToParse = blockRem.match(/^\\s*$/);\n\n if (_nothingLeftToParse) {\n break;\n }\n\n var propAndVal = blockRem.match(/^\\s*(.+?)\\s*:\\s*(.+?)(?:\\s*;|\\s*$)/);\n\n if (!propAndVal) {\n warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr);\n invalidBlock = true;\n break;\n }\n\n propAndValStr = propAndVal[0];\n var propStr = propAndVal[1];\n var valStr = propAndVal[2];\n var prop = self.properties[propStr];\n\n if (!prop) {\n warn('Skipping property: Invalid property name in: ' + propAndValStr); // skip this property in the block\n\n removePropAndValFromRem();\n continue;\n }\n\n var parsedProp = style.parse(propStr, valStr);\n\n if (!parsedProp) {\n warn('Skipping property: Invalid property definition in: ' + propAndValStr); // skip this property in the block\n\n removePropAndValFromRem();\n continue;\n }\n\n props.push({\n name: propStr,\n val: valStr\n });\n removePropAndValFromRem();\n }\n\n if (invalidBlock) {\n removeSelAndBlockFromRemaining();\n break;\n } // put the parsed block in the style\n\n\n style.selector(selectorStr);\n\n for (var i = 0; i < props.length; i++) {\n var _prop = props[i];\n style.css(_prop.name, _prop.val);\n }\n\n removeSelAndBlockFromRemaining();\n }\n\n return style;\n };\n\n styfn$3.fromString = function (string) {\n var style = this;\n style.resetToDefault();\n style.appendFromString(string);\n return style;\n };\n\n var styfn$2 = {};\n\n (function () {\n var number$1 = number;\n var rgba = rgbaNoBackRefs;\n var hsla = hslaNoBackRefs;\n var hex3$1 = hex3;\n var hex6$1 = hex6;\n\n var data = function data(prefix) {\n return '^' + prefix + '\\\\s*\\\\(\\\\s*([\\\\w\\\\.]+)\\\\s*\\\\)$';\n };\n\n var mapData = function mapData(prefix) {\n var mapArg = number$1 + '|\\\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1;\n return '^' + prefix + '\\\\s*\\\\(([\\\\w\\\\.]+)\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + mapArg + ')\\\\s*\\\\,\\\\s*(' + mapArg + ')\\\\)$';\n };\n\n var urlRegexes = ['^url\\\\s*\\\\(\\\\s*[\\'\"]?(.+?)[\\'\"]?\\\\s*\\\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it\n\n styfn$2.types = {\n time: {\n number: true,\n min: 0,\n units: 's|ms',\n implicitUnits: 'ms'\n },\n percent: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%'\n },\n percentages: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%',\n multiple: true\n },\n zeroOneNumber: {\n number: true,\n min: 0,\n max: 1,\n unitless: true\n },\n zeroOneNumbers: {\n number: true,\n min: 0,\n max: 1,\n unitless: true,\n multiple: true\n },\n nOneOneNumber: {\n number: true,\n min: -1,\n max: 1,\n unitless: true\n },\n nonNegativeInt: {\n number: true,\n min: 0,\n integer: true,\n unitless: true\n },\n position: {\n enums: ['parent', 'origin']\n },\n nodeSize: {\n number: true,\n min: 0,\n enums: ['label']\n },\n number: {\n number: true,\n unitless: true\n },\n numbers: {\n number: true,\n unitless: true,\n multiple: true\n },\n positiveNumber: {\n number: true,\n unitless: true,\n min: 0,\n strictMin: true\n },\n size: {\n number: true,\n min: 0\n },\n bidirectionalSize: {\n number: true\n },\n // allows negative\n bidirectionalSizeMaybePercent: {\n number: true,\n allowPercent: true\n },\n // allows negative\n bidirectionalSizes: {\n number: true,\n multiple: true\n },\n // allows negative\n sizeMaybePercent: {\n number: true,\n min: 0,\n allowPercent: true\n },\n axisDirection: {\n enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto']\n },\n paddingRelativeTo: {\n enums: ['width', 'height', 'average', 'min', 'max']\n },\n bgWH: {\n number: true,\n min: 0,\n allowPercent: true,\n enums: ['auto'],\n multiple: true\n },\n bgPos: {\n number: true,\n allowPercent: true,\n multiple: true\n },\n bgRelativeTo: {\n enums: ['inner', 'include-padding'],\n multiple: true\n },\n bgRepeat: {\n enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'],\n multiple: true\n },\n bgFit: {\n enums: ['none', 'contain', 'cover'],\n multiple: true\n },\n bgCrossOrigin: {\n enums: ['anonymous', 'use-credentials', 'null'],\n multiple: true\n },\n bgClip: {\n enums: ['none', 'node'],\n multiple: true\n },\n bgContainment: {\n enums: ['inside', 'over'],\n multiple: true\n },\n color: {\n color: true\n },\n colors: {\n color: true,\n multiple: true\n },\n fill: {\n enums: ['solid', 'linear-gradient', 'radial-gradient']\n },\n bool: {\n enums: ['yes', 'no']\n },\n bools: {\n enums: ['yes', 'no'],\n multiple: true\n },\n lineStyle: {\n enums: ['solid', 'dotted', 'dashed']\n },\n lineCap: {\n enums: ['butt', 'round', 'square']\n },\n borderStyle: {\n enums: ['solid', 'dotted', 'dashed', 'double']\n },\n curveStyle: {\n enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi']\n },\n fontFamily: {\n regex: '^([\\\\w- \\\\\"]+(?:\\\\s*,\\\\s*[\\\\w- \\\\\"]+)*)$'\n },\n fontStyle: {\n enums: ['italic', 'normal', 'oblique']\n },\n fontWeight: {\n enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900]\n },\n textDecoration: {\n enums: ['none', 'underline', 'overline', 'line-through']\n },\n textTransform: {\n enums: ['none', 'uppercase', 'lowercase']\n },\n textWrap: {\n enums: ['none', 'wrap', 'ellipsis']\n },\n textOverflowWrap: {\n enums: ['whitespace', 'anywhere']\n },\n textBackgroundShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle']\n },\n nodeShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon']\n },\n overlayShape: {\n enums: ['roundrectangle', 'round-rectangle', 'ellipse']\n },\n compoundIncludeLabels: {\n enums: ['include', 'exclude']\n },\n arrowShape: {\n enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none']\n },\n arrowFill: {\n enums: ['filled', 'hollow']\n },\n display: {\n enums: ['element', 'none']\n },\n visibility: {\n enums: ['hidden', 'visible']\n },\n zCompoundDepth: {\n enums: ['bottom', 'orphan', 'auto', 'top']\n },\n zIndexCompare: {\n enums: ['auto', 'manual']\n },\n valign: {\n enums: ['top', 'center', 'bottom']\n },\n halign: {\n enums: ['left', 'center', 'right']\n },\n justification: {\n enums: ['left', 'center', 'right', 'auto']\n },\n text: {\n string: true\n },\n data: {\n mapping: true,\n regex: data('data')\n },\n layoutData: {\n mapping: true,\n regex: data('layoutData')\n },\n scratch: {\n mapping: true,\n regex: data('scratch')\n },\n mapData: {\n mapping: true,\n regex: mapData('mapData')\n },\n mapLayoutData: {\n mapping: true,\n regex: mapData('mapLayoutData')\n },\n mapScratch: {\n mapping: true,\n regex: mapData('mapScratch')\n },\n fn: {\n mapping: true,\n fn: true\n },\n url: {\n regexes: urlRegexes,\n singleRegexMatchValue: true\n },\n urls: {\n regexes: urlRegexes,\n singleRegexMatchValue: true,\n multiple: true\n },\n propList: {\n propList: true\n },\n angle: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad'\n },\n textRotation: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad',\n enums: ['none', 'autorotate']\n },\n polygonPointList: {\n number: true,\n multiple: true,\n evenMultiple: true,\n min: -1,\n max: 1,\n unitless: true\n },\n edgeDistances: {\n enums: ['intersection', 'node-position']\n },\n edgeEndpoint: {\n number: true,\n multiple: true,\n units: '%|px|em|deg|rad',\n implicitUnits: 'px',\n enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'],\n singleEnum: true,\n validate: function validate(valArr, unitsArr) {\n switch (valArr.length) {\n case 2:\n // can be % or px only\n return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad';\n\n case 1:\n // can be enum, deg, or rad only\n return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad';\n\n default:\n return false;\n }\n }\n },\n easing: {\n regexes: ['^(spring)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$', '^(cubic-bezier)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$'],\n enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ']\n },\n gradientDirection: {\n enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order\n ]\n },\n boundsExpansion: {\n number: true,\n multiple: true,\n min: 0,\n validate: function validate(valArr) {\n var length = valArr.length;\n return length === 1 || length === 2 || length === 4;\n }\n }\n };\n var diff = {\n zeroNonZero: function zeroNonZero(val1, val2) {\n if ((val1 == null || val2 == null) && val1 !== val2) {\n return true; // null cases could represent any value\n }\n\n if (val1 == 0 && val2 != 0) {\n return true;\n } else if (val1 != 0 && val2 == 0) {\n return true;\n } else {\n return false;\n }\n },\n any: function any(val1, val2) {\n return val1 != val2;\n },\n emptyNonEmpty: function emptyNonEmpty(str1, str2) {\n var empty1 = emptyString(str1);\n var empty2 = emptyString(str2);\n return empty1 && !empty2 || !empty1 && empty2;\n }\n }; // define visual style properties\n //\n // - n.b. adding a new group of props may require updates to updateStyleHints()\n // - adding new props to an existing group gets handled automatically\n\n var t = styfn$2.types;\n var mainLabel = [{\n name: 'label',\n type: t.text,\n triggersBounds: diff.any,\n triggersZOrder: diff.emptyNonEmpty\n }, {\n name: 'text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }];\n var sourceLabel = [{\n name: 'source-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'source-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var targetLabel = [{\n name: 'target-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'target-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var labelDimensions = [{\n name: 'font-family',\n type: t.fontFamily,\n triggersBounds: diff.any\n }, {\n name: 'font-style',\n type: t.fontStyle,\n triggersBounds: diff.any\n }, {\n name: 'font-weight',\n type: t.fontWeight,\n triggersBounds: diff.any\n }, {\n name: 'font-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-transform',\n type: t.textTransform,\n triggersBounds: diff.any\n }, {\n name: 'text-wrap',\n type: t.textWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-overflow-wrap',\n type: t.textOverflowWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-max-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-outline-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'line-height',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }];\n var commonLabel = [{\n name: 'text-valign',\n type: t.valign,\n triggersBounds: diff.any\n }, {\n name: 'text-halign',\n type: t.halign,\n triggersBounds: diff.any\n }, {\n name: 'color',\n type: t.color\n }, {\n name: 'text-outline-color',\n type: t.color\n }, {\n name: 'text-outline-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-color',\n type: t.color\n }, {\n name: 'text-background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-border-color',\n type: t.color\n }, {\n name: 'text-border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-style',\n type: t.borderStyle,\n triggersBounds: diff.any\n }, {\n name: 'text-background-shape',\n type: t.textBackgroundShape,\n triggersBounds: diff.any\n }, {\n name: 'text-justification',\n type: t.justification\n }];\n var behavior = [{\n name: 'events',\n type: t.bool\n }, {\n name: 'text-events',\n type: t.bool\n }];\n var visibility = [{\n name: 'display',\n type: t.display,\n triggersZOrder: diff.any,\n triggersBounds: diff.any,\n triggersBoundsOfParallelBeziers: true\n }, {\n name: 'visibility',\n type: t.visibility,\n triggersZOrder: diff.any\n }, {\n name: 'opacity',\n type: t.zeroOneNumber,\n triggersZOrder: diff.zeroNonZero\n }, {\n name: 'text-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'min-zoomed-font-size',\n type: t.size\n }, {\n name: 'z-compound-depth',\n type: t.zCompoundDepth,\n triggersZOrder: diff.any\n }, {\n name: 'z-index-compare',\n type: t.zIndexCompare,\n triggersZOrder: diff.any\n }, {\n name: 'z-index',\n type: t.nonNegativeInt,\n triggersZOrder: diff.any\n }];\n var overlay = [{\n name: 'overlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'overlay-color',\n type: t.color\n }, {\n name: 'overlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'overlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }];\n var underlay = [{\n name: 'underlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'underlay-color',\n type: t.color\n }, {\n name: 'underlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'underlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }];\n var transition = [{\n name: 'transition-property',\n type: t.propList\n }, {\n name: 'transition-duration',\n type: t.time\n }, {\n name: 'transition-delay',\n type: t.time\n }, {\n name: 'transition-timing-function',\n type: t.easing\n }];\n\n var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) {\n if (parsedProp.value === 'label') {\n return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway)\n } else {\n return parsedProp.pfValue;\n }\n };\n\n var nodeBody = [{\n name: 'height',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'width',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'shape',\n type: t.nodeShape,\n triggersBounds: diff.any\n }, {\n name: 'shape-polygon-points',\n type: t.polygonPointList,\n triggersBounds: diff.any\n }, {\n name: 'background-color',\n type: t.color\n }, {\n name: 'background-fill',\n type: t.fill\n }, {\n name: 'background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'background-blacken',\n type: t.nOneOneNumber\n }, {\n name: 'background-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'background-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'background-gradient-direction',\n type: t.gradientDirection\n }, {\n name: 'padding',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'padding-relative-to',\n type: t.paddingRelativeTo,\n triggersBounds: diff.any\n }, {\n name: 'bounds-expansion',\n type: t.boundsExpansion,\n triggersBounds: diff.any\n }];\n var nodeBorder = [{\n name: 'border-color',\n type: t.color\n }, {\n name: 'border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'border-style',\n type: t.borderStyle\n }];\n var backgroundImage = [{\n name: 'background-image',\n type: t.urls\n }, {\n name: 'background-image-crossorigin',\n type: t.bgCrossOrigin\n }, {\n name: 'background-image-opacity',\n type: t.zeroOneNumbers\n }, {\n name: 'background-image-containment',\n type: t.bgContainment\n }, {\n name: 'background-image-smoothing',\n type: t.bools\n }, {\n name: 'background-position-x',\n type: t.bgPos\n }, {\n name: 'background-position-y',\n type: t.bgPos\n }, {\n name: 'background-width-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-height-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-repeat',\n type: t.bgRepeat\n }, {\n name: 'background-fit',\n type: t.bgFit\n }, {\n name: 'background-clip',\n type: t.bgClip\n }, {\n name: 'background-width',\n type: t.bgWH\n }, {\n name: 'background-height',\n type: t.bgWH\n }, {\n name: 'background-offset-x',\n type: t.bgPos\n }, {\n name: 'background-offset-y',\n type: t.bgPos\n }];\n var compound = [{\n name: 'position',\n type: t.position,\n triggersBounds: diff.any\n }, {\n name: 'compound-sizing-wrt-labels',\n type: t.compoundIncludeLabels,\n triggersBounds: diff.any\n }, {\n name: 'min-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-left',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-right',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-top',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-bottom',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }];\n var edgeLine = [{\n name: 'line-style',\n type: t.lineStyle\n }, {\n name: 'line-color',\n type: t.color\n }, {\n name: 'line-fill',\n type: t.fill\n }, {\n name: 'line-cap',\n type: t.lineCap\n }, {\n name: 'line-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'line-dash-pattern',\n type: t.numbers\n }, {\n name: 'line-dash-offset',\n type: t.number\n }, {\n name: 'line-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'line-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'curve-style',\n type: t.curveStyle,\n triggersBounds: diff.any,\n triggersBoundsOfParallelBeziers: true\n }, {\n name: 'haystack-radius',\n type: t.zeroOneNumber,\n triggersBounds: diff.any\n }, {\n name: 'source-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'target-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'control-point-step-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'control-point-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'control-point-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'segment-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'segment-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn',\n type: t.bidirectionalSizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn-min-distance',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'taxi-direction',\n type: t.axisDirection,\n triggersBounds: diff.any\n }, {\n name: 'edge-distances',\n type: t.edgeDistances,\n triggersBounds: diff.any\n }, {\n name: 'arrow-scale',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }, {\n name: 'loop-direction',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'loop-sweep',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'source-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'target-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }];\n var ghost = [{\n name: 'ghost',\n type: t.bool,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-opacity',\n type: t.zeroOneNumber\n }];\n var core = [{\n name: 'selection-box-color',\n type: t.color\n }, {\n name: 'selection-box-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'selection-box-border-color',\n type: t.color\n }, {\n name: 'selection-box-border-width',\n type: t.size\n }, {\n name: 'active-bg-color',\n type: t.color\n }, {\n name: 'active-bg-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'active-bg-size',\n type: t.size\n }, {\n name: 'outside-texture-bg-color',\n type: t.color\n }, {\n name: 'outside-texture-bg-opacity',\n type: t.zeroOneNumber\n }]; // pie backgrounds for nodes\n\n var pie = [];\n styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use)\n\n pie.push({\n name: 'pie-size',\n type: t.sizeMaybePercent\n });\n\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n pie.push({\n name: 'pie-' + i + '-background-color',\n type: t.color\n });\n pie.push({\n name: 'pie-' + i + '-background-size',\n type: t.percent\n });\n pie.push({\n name: 'pie-' + i + '-background-opacity',\n type: t.zeroOneNumber\n });\n } // edge arrows\n\n\n var edgeArrow = [];\n var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target'];\n [{\n name: 'arrow-shape',\n type: t.arrowShape,\n triggersBounds: diff.any\n }, {\n name: 'arrow-color',\n type: t.color\n }, {\n name: 'arrow-fill',\n type: t.arrowFill\n }].forEach(function (prop) {\n arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var type = prop.type,\n triggersBounds = prop.triggersBounds;\n edgeArrow.push({\n name: name,\n type: type,\n triggersBounds: triggersBounds\n });\n });\n }, {});\n var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core);\n var propGroups = styfn$2.propertyGroups = {\n // common to all eles\n behavior: behavior,\n transition: transition,\n visibility: visibility,\n overlay: overlay,\n underlay: underlay,\n ghost: ghost,\n // labels\n commonLabel: commonLabel,\n labelDimensions: labelDimensions,\n mainLabel: mainLabel,\n sourceLabel: sourceLabel,\n targetLabel: targetLabel,\n // node props\n nodeBody: nodeBody,\n nodeBorder: nodeBorder,\n backgroundImage: backgroundImage,\n pie: pie,\n compound: compound,\n // edge props\n edgeLine: edgeLine,\n edgeArrow: edgeArrow,\n core: core\n };\n var propGroupNames = styfn$2.propertyGroupNames = {};\n var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups);\n propGroupKeys.forEach(function (key) {\n propGroupNames[key] = propGroups[key].map(function (prop) {\n return prop.name;\n });\n propGroups[key].forEach(function (prop) {\n return prop.groupKey = key;\n });\n }); // define aliases\n\n var aliases = styfn$2.aliases = [{\n name: 'content',\n pointsTo: 'label'\n }, {\n name: 'control-point-distance',\n pointsTo: 'control-point-distances'\n }, {\n name: 'control-point-weight',\n pointsTo: 'control-point-weights'\n }, {\n name: 'edge-text-rotation',\n pointsTo: 'text-rotation'\n }, {\n name: 'padding-left',\n pointsTo: 'padding'\n }, {\n name: 'padding-right',\n pointsTo: 'padding'\n }, {\n name: 'padding-top',\n pointsTo: 'padding'\n }, {\n name: 'padding-bottom',\n pointsTo: 'padding'\n }]; // list of property names\n\n styfn$2.propertyNames = props.map(function (p) {\n return p.name;\n }); // allow access of properties by name ( e.g. style.properties.height )\n\n for (var _i = 0; _i < props.length; _i++) {\n var prop = props[_i];\n props[prop.name] = prop; // allow lookup by name\n } // map aliases\n\n\n for (var _i2 = 0; _i2 < aliases.length; _i2++) {\n var alias = aliases[_i2];\n var pointsToProp = props[alias.pointsTo];\n var aliasProp = {\n name: alias.name,\n alias: true,\n pointsTo: pointsToProp\n }; // add alias prop for parsing\n\n props.push(aliasProp);\n props[alias.name] = aliasProp; // allow lookup by name\n }\n })();\n\n styfn$2.getDefaultProperty = function (name) {\n return this.getDefaultProperties()[name];\n };\n\n styfn$2.getDefaultProperties = function () {\n var _p = this._private;\n\n if (_p.defaultProperties != null) {\n return _p.defaultProperties;\n }\n\n var rawProps = extend({\n // core props\n 'selection-box-color': '#ddd',\n 'selection-box-opacity': 0.65,\n 'selection-box-border-color': '#aaa',\n 'selection-box-border-width': 1,\n 'active-bg-color': 'black',\n 'active-bg-opacity': 0.15,\n 'active-bg-size': 30,\n 'outside-texture-bg-color': '#000',\n 'outside-texture-bg-opacity': 0.125,\n // common node/edge props\n 'events': 'yes',\n 'text-events': 'no',\n 'text-valign': 'top',\n 'text-halign': 'center',\n 'text-justification': 'auto',\n 'line-height': 1,\n 'color': '#000',\n 'text-outline-color': '#000',\n 'text-outline-width': 0,\n 'text-outline-opacity': 1,\n 'text-opacity': 1,\n 'text-decoration': 'none',\n 'text-transform': 'none',\n 'text-wrap': 'none',\n 'text-overflow-wrap': 'whitespace',\n 'text-max-width': 9999,\n 'text-background-color': '#000',\n 'text-background-opacity': 0,\n 'text-background-shape': 'rectangle',\n 'text-background-padding': 0,\n 'text-border-opacity': 0,\n 'text-border-width': 0,\n 'text-border-style': 'solid',\n 'text-border-color': '#000',\n 'font-family': 'Helvetica Neue, Helvetica, sans-serif',\n 'font-style': 'normal',\n 'font-weight': 'normal',\n 'font-size': 16,\n 'min-zoomed-font-size': 0,\n 'text-rotation': 'none',\n 'source-text-rotation': 'none',\n 'target-text-rotation': 'none',\n 'visibility': 'visible',\n 'display': 'element',\n 'opacity': 1,\n 'z-compound-depth': 'auto',\n 'z-index-compare': 'auto',\n 'z-index': 0,\n 'label': '',\n 'text-margin-x': 0,\n 'text-margin-y': 0,\n 'source-label': '',\n 'source-text-offset': 0,\n 'source-text-margin-x': 0,\n 'source-text-margin-y': 0,\n 'target-label': '',\n 'target-text-offset': 0,\n 'target-text-margin-x': 0,\n 'target-text-margin-y': 0,\n 'overlay-opacity': 0,\n 'overlay-color': '#000',\n 'overlay-padding': 10,\n 'overlay-shape': 'round-rectangle',\n 'underlay-opacity': 0,\n 'underlay-color': '#000',\n 'underlay-padding': 10,\n 'underlay-shape': 'round-rectangle',\n 'transition-property': 'none',\n 'transition-duration': 0,\n 'transition-delay': 0,\n 'transition-timing-function': 'linear',\n // node props\n 'background-blacken': 0,\n 'background-color': '#999',\n 'background-fill': 'solid',\n 'background-opacity': 1,\n 'background-image': 'none',\n 'background-image-crossorigin': 'anonymous',\n 'background-image-opacity': 1,\n 'background-image-containment': 'inside',\n 'background-image-smoothing': 'yes',\n 'background-position-x': '50%',\n 'background-position-y': '50%',\n 'background-offset-x': 0,\n 'background-offset-y': 0,\n 'background-width-relative-to': 'include-padding',\n 'background-height-relative-to': 'include-padding',\n 'background-repeat': 'no-repeat',\n 'background-fit': 'none',\n 'background-clip': 'node',\n 'background-width': 'auto',\n 'background-height': 'auto',\n 'border-color': '#000',\n 'border-opacity': 1,\n 'border-width': 0,\n 'border-style': 'solid',\n 'height': 30,\n 'width': 30,\n 'shape': 'ellipse',\n 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1',\n 'bounds-expansion': 0,\n // node gradient\n 'background-gradient-direction': 'to-bottom',\n 'background-gradient-stop-colors': '#999',\n 'background-gradient-stop-positions': '0%',\n // ghost props\n 'ghost': 'no',\n 'ghost-offset-y': 0,\n 'ghost-offset-x': 0,\n 'ghost-opacity': 0,\n // compound props\n 'padding': 0,\n 'padding-relative-to': 'width',\n 'position': 'origin',\n 'compound-sizing-wrt-labels': 'include',\n 'min-width': 0,\n 'min-width-bias-left': 0,\n 'min-width-bias-right': 0,\n 'min-height': 0,\n 'min-height-bias-top': 0,\n 'min-height-bias-bottom': 0\n }, {\n // node pie bg\n 'pie-size': '100%'\n }, [{\n name: 'pie-{{i}}-background-color',\n value: 'black'\n }, {\n name: 'pie-{{i}}-background-size',\n value: '0%'\n }, {\n name: 'pie-{{i}}-background-opacity',\n value: 1\n }].reduce(function (css, prop) {\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n var name = prop.name.replace('{{i}}', i);\n var val = prop.value;\n css[name] = val;\n }\n\n return css;\n }, {}), {\n // edge props\n 'line-style': 'solid',\n 'line-color': '#999',\n 'line-fill': 'solid',\n 'line-cap': 'butt',\n 'line-opacity': 1,\n 'line-gradient-stop-colors': '#999',\n 'line-gradient-stop-positions': '0%',\n 'control-point-step-size': 40,\n 'control-point-weights': 0.5,\n 'segment-weights': 0.5,\n 'segment-distances': 20,\n 'taxi-turn': '50%',\n 'taxi-turn-min-distance': 10,\n 'taxi-direction': 'auto',\n 'edge-distances': 'intersection',\n 'curve-style': 'haystack',\n 'haystack-radius': 0,\n 'arrow-scale': 1,\n 'loop-direction': '-45deg',\n 'loop-sweep': '-90deg',\n 'source-distance-from-node': 0,\n 'target-distance-from-node': 0,\n 'source-endpoint': 'outside-to-node',\n 'target-endpoint': 'outside-to-node',\n 'line-dash-pattern': [6, 3],\n 'line-dash-offset': 0\n }, [{\n name: 'arrow-shape',\n value: 'none'\n }, {\n name: 'arrow-color',\n value: '#999'\n }, {\n name: 'arrow-fill',\n value: 'filled'\n }].reduce(function (css, prop) {\n styfn$2.arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var val = prop.value;\n css[name] = val;\n });\n return css;\n }, {}));\n var parsedProps = {};\n\n for (var i = 0; i < this.properties.length; i++) {\n var prop = this.properties[i];\n\n if (prop.pointsTo) {\n continue;\n }\n\n var name = prop.name;\n var val = rawProps[name];\n var parsedProp = this.parse(name, val);\n parsedProps[name] = parsedProp;\n }\n\n _p.defaultProperties = parsedProps;\n return _p.defaultProperties;\n };\n\n styfn$2.addDefaultStylesheet = function () {\n this.selector(':parent').css({\n 'shape': 'rectangle',\n 'padding': 10,\n 'background-color': '#eee',\n 'border-color': '#ccc',\n 'border-width': 1\n }).selector('edge').css({\n 'width': 3\n }).selector(':loop').css({\n 'curve-style': 'bezier'\n }).selector('edge:compound').css({\n 'curve-style': 'bezier',\n 'source-endpoint': 'outside-to-line',\n 'target-endpoint': 'outside-to-line'\n }).selector(':selected').css({\n 'background-color': '#0169D9',\n 'line-color': '#0169D9',\n 'source-arrow-color': '#0169D9',\n 'target-arrow-color': '#0169D9',\n 'mid-source-arrow-color': '#0169D9',\n 'mid-target-arrow-color': '#0169D9'\n }).selector(':parent:selected').css({\n 'background-color': '#CCE1F9',\n 'border-color': '#aec8e5'\n }).selector(':active').css({\n 'overlay-color': 'black',\n 'overlay-padding': 10,\n 'overlay-opacity': 0.25\n });\n this.defaultLength = this.length;\n };\n\n var styfn$1 = {}; // a caching layer for property parsing\n\n styfn$1.parse = function (name, value, propIsBypass, propIsFlat) {\n var self = this; // function values can't be cached in all cases, and there isn't much benefit of caching them anyway\n\n if (fn$6(value)) {\n return self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n }\n\n var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat;\n var bypassKey = propIsBypass ? 't' : 'f';\n var valueKey = '' + value;\n var argHash = hashStrings(name, valueKey, bypassKey, flatKey);\n var propCache = self.propCache = self.propCache || [];\n var ret;\n\n if (!(ret = propCache[argHash])) {\n ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n } // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden\n // - mappings can't be shared b/c mappings are per-element\n\n\n if (propIsBypass || propIsFlat === 'mapping') {\n // need a copy since props are mutated later in their lifecycles\n ret = copy(ret);\n\n if (ret) {\n ret.value = copy(ret.value); // because it could be an array, e.g. colour\n }\n }\n\n return ret;\n };\n\n styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) {\n var prop = this.parseImpl(name, value, propIsBypass, propIsFlat);\n\n if (!prop && value != null) {\n warn(\"The style property `\".concat(name, \": \").concat(value, \"` is invalid\"));\n }\n\n if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') {\n warn('The style value of `label` is deprecated for `' + prop.name + '`');\n }\n\n return prop;\n }; // parse a property; return null on invalid; return parsed property otherwise\n // fields :\n // - name : the name of the property\n // - value : the parsed, native-typed value of the property\n // - strValue : a string value that represents the property value in valid css\n // - bypass : true iff the property is a bypass property\n\n\n styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) {\n var self = this;\n name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName')\n\n var property = self.properties[name];\n var passedValue = value;\n var types = self.types;\n\n if (!property) {\n return null;\n } // return null on property of unknown name\n\n\n if (value === undefined) {\n return null;\n } // can't assign undefined\n // the property may be an alias\n\n\n if (property.alias) {\n property = property.pointsTo;\n name = property.name;\n }\n\n var valueIsString = string(value);\n\n if (valueIsString) {\n // trim the value to make parsing easier\n value = value.trim();\n }\n\n var type = property.type;\n\n if (!type) {\n return null;\n } // no type, no luck\n // check if bypass is null or empty string (i.e. indication to delete bypass property)\n\n\n if (propIsBypass && (value === '' || value === null)) {\n return {\n name: name,\n value: value,\n bypass: true,\n deleteBypass: true\n };\n } // check if value is a function used as a mapper\n\n\n if (fn$6(value)) {\n return {\n name: name,\n value: value,\n strValue: 'fn',\n mapped: types.fn,\n bypass: propIsBypass\n };\n } // check if value is mapped\n\n\n var data, mapData;\n\n if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n\n\n var mapped = types.data;\n return {\n name: name,\n value: data,\n strValue: '' + value,\n mapped: mapped,\n field: data[1],\n bypass: propIsBypass\n };\n } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n\n\n if (type.multiple) {\n return false;\n } // impossible to map to num\n\n\n var _mapped = types.mapData; // we can map only if the type is a colour or a number\n\n if (!(type.color || type.number)) {\n return false;\n }\n\n var valueMin = this.parse(name, mapData[4]); // parse to validate\n\n if (!valueMin || valueMin.mapped) {\n return false;\n } // can't be invalid or mapped\n\n\n var valueMax = this.parse(name, mapData[5]); // parse to validate\n\n if (!valueMax || valueMax.mapped) {\n return false;\n } // can't be invalid or mapped\n // check if valueMin and valueMax are the same\n\n\n if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) {\n warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`');\n return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range\n } else if (type.color) {\n var c1 = valueMin.value;\n var c2 = valueMax.value;\n var same = c1[0] === c2[0] // red\n && c1[1] === c2[1] // green\n && c1[2] === c2[2] // blue\n && ( // optional alpha\n c1[3] === c2[3] // same alpha outright\n || (c1[3] == null || c1[3] === 1 // full opacity for colour 1?\n ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2?\n );\n\n if (same) {\n return false;\n } // can't make a mapper without a range\n\n }\n\n return {\n name: name,\n value: mapData,\n strValue: '' + value,\n mapped: _mapped,\n field: mapData[1],\n fieldMin: parseFloat(mapData[2]),\n // min & max are numeric\n fieldMax: parseFloat(mapData[3]),\n valueMin: valueMin.value,\n valueMax: valueMax.value,\n bypass: propIsBypass\n };\n }\n\n if (type.multiple && propIsFlat !== 'multiple') {\n var vals;\n\n if (valueIsString) {\n vals = value.split(/\\s+/);\n } else if (array(value)) {\n vals = value;\n } else {\n vals = [value];\n }\n\n if (type.evenMultiple && vals.length % 2 !== 0) {\n return null;\n }\n\n var valArr = [];\n var unitsArr = [];\n var pfValArr = [];\n var strVal = '';\n var hasEnum = false;\n\n for (var i = 0; i < vals.length; i++) {\n var p = self.parse(name, vals[i], propIsBypass, 'multiple');\n hasEnum = hasEnum || string(p.value);\n valArr.push(p.value);\n pfValArr.push(p.pfValue != null ? p.pfValue : p.value);\n unitsArr.push(p.units);\n strVal += (i > 0 ? ' ' : '') + p.strValue;\n }\n\n if (type.validate && !type.validate(valArr, unitsArr)) {\n return null;\n }\n\n if (type.singleEnum && hasEnum) {\n if (valArr.length === 1 && string(valArr[0])) {\n return {\n name: name,\n value: valArr[0],\n strValue: valArr[0],\n bypass: propIsBypass\n };\n } else {\n return null;\n }\n }\n\n return {\n name: name,\n value: valArr,\n pfValue: pfValArr,\n strValue: strVal,\n bypass: propIsBypass,\n units: unitsArr\n };\n } // several types also allow enums\n\n\n var checkEnums = function checkEnums() {\n for (var _i = 0; _i < type.enums.length; _i++) {\n var en = type.enums[_i];\n\n if (en === value) {\n return {\n name: name,\n value: value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n\n return null;\n }; // check the type and return the appropriate object\n\n\n if (type.number) {\n var units;\n var implicitUnits = 'px'; // not set => px\n\n if (type.units) {\n // use specified units if set\n units = type.units;\n }\n\n if (type.implicitUnits) {\n implicitUnits = type.implicitUnits;\n }\n\n if (!type.unitless) {\n if (valueIsString) {\n var unitsRegex = 'px|em' + (type.allowPercent ? '|\\\\%' : '');\n\n if (units) {\n unitsRegex = units;\n } // only allow explicit units if so set\n\n\n var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$');\n\n if (match) {\n value = match[1];\n units = match[2] || implicitUnits;\n }\n } else if (!units || type.implicitUnits) {\n units = implicitUnits; // implicitly px if unspecified\n }\n }\n\n value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid\n\n if (isNaN(value) && type.enums === undefined) {\n return null;\n } // check if this number type also accepts special keywords in place of numbers\n // (i.e. `left`, `auto`, etc)\n\n\n if (isNaN(value) && type.enums !== undefined) {\n value = passedValue;\n return checkEnums();\n } // check if value must be an integer\n\n\n if (type.integer && !integer(value)) {\n return null;\n } // check value is within range\n\n\n if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) {\n return null;\n }\n\n var ret = {\n name: name,\n value: value,\n strValue: '' + value + (units ? units : ''),\n units: units,\n bypass: propIsBypass\n }; // normalise value in pixels\n\n if (type.unitless || units !== 'px' && units !== 'em') {\n ret.pfValue = value;\n } else {\n ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value;\n } // normalise value in ms\n\n\n if (units === 'ms' || units === 's') {\n ret.pfValue = units === 'ms' ? value : 1000 * value;\n } // normalise value in rad\n\n\n if (units === 'deg' || units === 'rad') {\n ret.pfValue = units === 'rad' ? value : deg2rad(value);\n } // normalize value in %\n\n\n if (units === '%') {\n ret.pfValue = value / 100;\n }\n\n return ret;\n } else if (type.propList) {\n var props = [];\n var propsStr = '' + value;\n\n if (propsStr === 'none') ; else {\n // go over each prop\n var propsSplit = propsStr.split(/\\s*,\\s*|\\s+/);\n\n for (var _i2 = 0; _i2 < propsSplit.length; _i2++) {\n var propName = propsSplit[_i2].trim();\n\n if (self.properties[propName]) {\n props.push(propName);\n } else {\n warn('`' + propName + '` is not a valid property name');\n }\n }\n\n if (props.length === 0) {\n return null;\n }\n }\n\n return {\n name: name,\n value: props,\n strValue: props.length === 0 ? 'none' : props.join(' '),\n bypass: propIsBypass\n };\n } else if (type.color) {\n var tuple = color2tuple(value);\n\n if (!tuple) {\n return null;\n }\n\n return {\n name: name,\n value: tuple,\n pfValue: tuple,\n strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')',\n // n.b. no spaces b/c of multiple support\n bypass: propIsBypass\n };\n } else if (type.regex || type.regexes) {\n // first check enums\n if (type.enums) {\n var enumProp = checkEnums();\n\n if (enumProp) {\n return enumProp;\n }\n }\n\n var regexes = type.regexes ? type.regexes : [type.regex];\n\n for (var _i3 = 0; _i3 < regexes.length; _i3++) {\n var regex = new RegExp(regexes[_i3]); // make a regex from the type string\n\n var m = regex.exec(value);\n\n if (m) {\n // regex matches\n return {\n name: name,\n value: type.singleRegexMatchValue ? m[1] : m,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n\n return null; // didn't match any\n } else if (type.string) {\n // just return\n return {\n name: name,\n value: '' + value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n } else if (type.enums) {\n // check enums last because it's a combo type in others\n return checkEnums();\n } else {\n return null; // not a type we can handle\n }\n };\n\n var Style = function Style(cy) {\n if (!(this instanceof Style)) {\n return new Style(cy);\n }\n\n if (!core(cy)) {\n error('A style must have a core reference');\n return;\n }\n\n this._private = {\n cy: cy,\n coreStyle: {}\n };\n this.length = 0;\n this.resetToDefault();\n };\n\n var styfn = Style.prototype;\n\n styfn.instanceString = function () {\n return 'style';\n }; // remove all contexts\n\n\n styfn.clear = function () {\n var _p = this._private;\n var cy = _p.cy;\n var eles = cy.elements();\n\n for (var i = 0; i < this.length; i++) {\n this[i] = undefined;\n }\n\n this.length = 0;\n _p.contextStyles = {};\n _p.propDiffs = {};\n this.cleanElements(eles, true);\n eles.forEach(function (ele) {\n var ele_p = ele[0]._private;\n ele_p.styleDirty = true;\n ele_p.appliedInitStyle = false;\n });\n return this; // chaining\n };\n\n styfn.resetToDefault = function () {\n this.clear();\n this.addDefaultStylesheet();\n return this;\n }; // builds a style object for the 'core' selector\n\n\n styfn.core = function (propName) {\n return this._private.coreStyle[propName] || this.getDefaultProperty(propName);\n }; // create a new context from the specified selector string and switch to that context\n\n\n styfn.selector = function (selectorStr) {\n // 'core' is a special case and does not need a selector\n var selector = selectorStr === 'core' ? null : new Selector(selectorStr);\n var i = this.length++; // new context means new index\n\n this[i] = {\n selector: selector,\n properties: [],\n mappedProperties: [],\n index: i\n };\n return this; // chaining\n }; // add one or many css rules to the current context\n\n\n styfn.css = function () {\n var self = this;\n var args = arguments;\n\n if (args.length === 1) {\n var map = args[0];\n\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var mapVal = map[prop.name];\n\n if (mapVal === undefined) {\n mapVal = map[dash2camel(prop.name)];\n }\n\n if (mapVal !== undefined) {\n this.cssRule(prop.name, mapVal);\n }\n }\n } else if (args.length === 2) {\n this.cssRule(args[0], args[1]);\n } // do nothing if args are invalid\n\n\n return this; // chaining\n };\n\n styfn.style = styfn.css; // add a single css rule to the current context\n\n styfn.cssRule = function (name, value) {\n // name-value pair\n var property = this.parse(name, value); // add property to current context if valid\n\n if (property) {\n var i = this.length - 1;\n this[i].properties.push(property);\n this[i].properties[property.name] = property; // allow access by name as well\n\n if (property.name.match(/pie-(\\d+)-background-size/) && property.value) {\n this._private.hasPie = true;\n }\n\n if (property.mapped) {\n this[i].mappedProperties.push(property);\n } // add to core style if necessary\n\n\n var currentSelectorIsCore = !this[i].selector;\n\n if (currentSelectorIsCore) {\n this._private.coreStyle[property.name] = property;\n }\n }\n\n return this; // chaining\n };\n\n styfn.append = function (style) {\n if (stylesheet(style)) {\n style.appendToStyle(this);\n } else if (array(style)) {\n this.appendFromJson(style);\n } else if (string(style)) {\n this.appendFromString(style);\n } // you probably wouldn't want to append a Style, since you'd duplicate the default parts\n\n\n return this;\n }; // static function\n\n\n Style.fromJson = function (cy, json) {\n var style = new Style(cy);\n style.fromJson(json);\n return style;\n };\n\n Style.fromString = function (cy, string) {\n return new Style(cy).fromString(string);\n };\n\n [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) {\n extend(styfn, props);\n });\n Style.types = styfn.types;\n Style.properties = styfn.properties;\n Style.propertyGroups = styfn.propertyGroups;\n Style.propertyGroupNames = styfn.propertyGroupNames;\n Style.propertyGroupKeys = styfn.propertyGroupKeys;\n\n var corefn$2 = {\n style: function style(newStyle) {\n if (newStyle) {\n var s = this.setStyle(newStyle);\n s.update();\n }\n\n return this._private.style;\n },\n setStyle: function setStyle(style) {\n var _p = this._private;\n\n if (stylesheet(style)) {\n _p.style = style.generateStyle(this);\n } else if (array(style)) {\n _p.style = Style.fromJson(this, style);\n } else if (string(style)) {\n _p.style = Style.fromString(this, style);\n } else {\n _p.style = Style(this);\n }\n\n return _p.style;\n },\n // e.g. cy.data() changed => recalc ele mappers\n updateStyle: function updateStyle() {\n this.mutableElements().updateStyle(); // just send to all eles\n }\n };\n\n var defaultSelectionType = 'single';\n var corefn$1 = {\n autolock: function autolock(bool) {\n if (bool !== undefined) {\n this._private.autolock = bool ? true : false;\n } else {\n return this._private.autolock;\n }\n\n return this; // chaining\n },\n autoungrabify: function autoungrabify(bool) {\n if (bool !== undefined) {\n this._private.autoungrabify = bool ? true : false;\n } else {\n return this._private.autoungrabify;\n }\n\n return this; // chaining\n },\n autounselectify: function autounselectify(bool) {\n if (bool !== undefined) {\n this._private.autounselectify = bool ? true : false;\n } else {\n return this._private.autounselectify;\n }\n\n return this; // chaining\n },\n selectionType: function selectionType(selType) {\n var _p = this._private;\n\n if (_p.selectionType == null) {\n _p.selectionType = defaultSelectionType;\n }\n\n if (selType !== undefined) {\n if (selType === 'additive' || selType === 'single') {\n _p.selectionType = selType;\n }\n } else {\n return _p.selectionType;\n }\n\n return this;\n },\n panningEnabled: function panningEnabled(bool) {\n if (bool !== undefined) {\n this._private.panningEnabled = bool ? true : false;\n } else {\n return this._private.panningEnabled;\n }\n\n return this; // chaining\n },\n userPanningEnabled: function userPanningEnabled(bool) {\n if (bool !== undefined) {\n this._private.userPanningEnabled = bool ? true : false;\n } else {\n return this._private.userPanningEnabled;\n }\n\n return this; // chaining\n },\n zoomingEnabled: function zoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.zoomingEnabled = bool ? true : false;\n } else {\n return this._private.zoomingEnabled;\n }\n\n return this; // chaining\n },\n userZoomingEnabled: function userZoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.userZoomingEnabled = bool ? true : false;\n } else {\n return this._private.userZoomingEnabled;\n }\n\n return this; // chaining\n },\n boxSelectionEnabled: function boxSelectionEnabled(bool) {\n if (bool !== undefined) {\n this._private.boxSelectionEnabled = bool ? true : false;\n } else {\n return this._private.boxSelectionEnabled;\n }\n\n return this; // chaining\n },\n pan: function pan() {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n\n switch (args.length) {\n case 0:\n // .pan()\n return pan;\n\n case 1:\n if (string(args[0])) {\n // .pan('x')\n dim = args[0];\n return pan[dim];\n } else if (plainObject(args[0])) {\n // .pan({ x: 0, y: 100 })\n if (!this._private.panningEnabled) {\n return this;\n }\n\n dims = args[0];\n x = dims.x;\n y = dims.y;\n\n if (number$1(x)) {\n pan.x = x;\n }\n\n if (number$1(y)) {\n pan.y = y;\n }\n\n this.emit('pan viewport');\n }\n\n break;\n\n case 2:\n // .pan('x', 100)\n if (!this._private.panningEnabled) {\n return this;\n }\n\n dim = args[0];\n val = args[1];\n\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] = val;\n }\n\n this.emit('pan viewport');\n break;\n // invalid\n }\n\n this.notify('viewport');\n return this; // chaining\n },\n panBy: function panBy(arg0, arg1) {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n\n if (!this._private.panningEnabled) {\n return this;\n }\n\n switch (args.length) {\n case 1:\n if (plainObject(arg0)) {\n // .panBy({ x: 0, y: 100 })\n dims = args[0];\n x = dims.x;\n y = dims.y;\n\n if (number$1(x)) {\n pan.x += x;\n }\n\n if (number$1(y)) {\n pan.y += y;\n }\n\n this.emit('pan viewport');\n }\n\n break;\n\n case 2:\n // .panBy('x', 100)\n dim = arg0;\n val = arg1;\n\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] += val;\n }\n\n this.emit('pan viewport');\n break;\n // invalid\n }\n\n this.notify('viewport');\n return this; // chaining\n },\n fit: function fit(elements, padding) {\n var viewportState = this.getFitViewport(elements, padding);\n\n if (viewportState) {\n var _p = this._private;\n _p.zoom = viewportState.zoom;\n _p.pan = viewportState.pan;\n this.emit('pan zoom viewport');\n this.notify('viewport');\n }\n\n return this; // chaining\n },\n getFitViewport: function getFitViewport(elements, padding) {\n if (number$1(elements) && padding === undefined) {\n // elements is optional\n padding = elements;\n elements = undefined;\n }\n\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return;\n }\n\n var bb;\n\n if (string(elements)) {\n var sel = elements;\n elements = this.$(sel);\n } else if (boundingBox(elements)) {\n // assume bb\n var bbe = elements;\n bb = {\n x1: bbe.x1,\n y1: bbe.y1,\n x2: bbe.x2,\n y2: bbe.y2\n };\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n\n if (elementOrCollection(elements) && elements.empty()) {\n return;\n } // can't fit to nothing\n\n\n bb = bb || elements.boundingBox();\n var w = this.width();\n var h = this.height();\n var zoom;\n padding = number$1(padding) ? padding : 0;\n\n if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) {\n zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); // crop zoom\n\n zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom;\n zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom;\n var pan = {\n // now pan to middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return {\n zoom: zoom,\n pan: pan\n };\n }\n\n return;\n },\n zoomRange: function zoomRange(min, max) {\n var _p = this._private;\n\n if (max == null) {\n var opts = min;\n min = opts.min;\n max = opts.max;\n }\n\n if (number$1(min) && number$1(max) && min <= max) {\n _p.minZoom = min;\n _p.maxZoom = max;\n } else if (number$1(min) && max === undefined && min <= _p.maxZoom) {\n _p.minZoom = min;\n } else if (number$1(max) && min === undefined && max >= _p.minZoom) {\n _p.maxZoom = max;\n }\n\n return this;\n },\n minZoom: function minZoom(zoom) {\n if (zoom === undefined) {\n return this._private.minZoom;\n } else {\n return this.zoomRange({\n min: zoom\n });\n }\n },\n maxZoom: function maxZoom(zoom) {\n if (zoom === undefined) {\n return this._private.maxZoom;\n } else {\n return this.zoomRange({\n max: zoom\n });\n }\n },\n getZoomedViewport: function getZoomedViewport(params) {\n var _p = this._private;\n var currentPan = _p.pan;\n var currentZoom = _p.zoom;\n var pos; // in rendered px\n\n var zoom;\n var bail = false;\n\n if (!_p.zoomingEnabled) {\n // zooming disabled\n bail = true;\n }\n\n if (number$1(params)) {\n // then set the zoom\n zoom = params;\n } else if (plainObject(params)) {\n // then zoom about a point\n zoom = params.level;\n\n if (params.position != null) {\n pos = modelToRenderedPosition(params.position, currentZoom, currentPan);\n } else if (params.renderedPosition != null) {\n pos = params.renderedPosition;\n }\n\n if (pos != null && !_p.panningEnabled) {\n // panning disabled\n bail = true;\n }\n } // crop zoom\n\n\n zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom;\n zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params\n\n if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) {\n return null;\n }\n\n if (pos != null) {\n // set zoom about position\n var pan1 = currentPan;\n var zoom1 = currentZoom;\n var zoom2 = zoom;\n var pan2 = {\n x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x,\n y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y\n };\n return {\n zoomed: true,\n panned: true,\n zoom: zoom2,\n pan: pan2\n };\n } else {\n // just set the zoom\n return {\n zoomed: true,\n panned: false,\n zoom: zoom,\n pan: currentPan\n };\n }\n },\n zoom: function zoom(params) {\n if (params === undefined) {\n // get\n return this._private.zoom;\n } else {\n // set\n var vp = this.getZoomedViewport(params);\n var _p = this._private;\n\n if (vp == null || !vp.zoomed) {\n return this;\n }\n\n _p.zoom = vp.zoom;\n\n if (vp.panned) {\n _p.pan.x = vp.pan.x;\n _p.pan.y = vp.pan.y;\n }\n\n this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport');\n this.notify('viewport');\n return this; // chaining\n }\n },\n viewport: function viewport(opts) {\n var _p = this._private;\n var zoomDefd = true;\n var panDefd = true;\n var events = []; // to trigger\n\n var zoomFailed = false;\n var panFailed = false;\n\n if (!opts) {\n return this;\n }\n\n if (!number$1(opts.zoom)) {\n zoomDefd = false;\n }\n\n if (!plainObject(opts.pan)) {\n panDefd = false;\n }\n\n if (!zoomDefd && !panDefd) {\n return this;\n }\n\n if (zoomDefd) {\n var z = opts.zoom;\n\n if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) {\n zoomFailed = true;\n } else {\n _p.zoom = z;\n events.push('zoom');\n }\n }\n\n if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) {\n var p = opts.pan;\n\n if (number$1(p.x)) {\n _p.pan.x = p.x;\n panFailed = false;\n }\n\n if (number$1(p.y)) {\n _p.pan.y = p.y;\n panFailed = false;\n }\n\n if (!panFailed) {\n events.push('pan');\n }\n }\n\n if (events.length > 0) {\n events.push('viewport');\n this.emit(events.join(' '));\n this.notify('viewport');\n }\n\n return this; // chaining\n },\n center: function center(elements) {\n var pan = this.getCenterPan(elements);\n\n if (pan) {\n this._private.pan = pan;\n this.emit('pan viewport');\n this.notify('viewport');\n }\n\n return this; // chaining\n },\n getCenterPan: function getCenterPan(elements, zoom) {\n if (!this._private.panningEnabled) {\n return;\n }\n\n if (string(elements)) {\n var selector = elements;\n elements = this.mutableElements().filter(selector);\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n\n if (elements.length === 0) {\n return;\n } // can't centre pan to nothing\n\n\n var bb = elements.boundingBox();\n var w = this.width();\n var h = this.height();\n zoom = zoom === undefined ? this._private.zoom : zoom;\n var pan = {\n // middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return pan;\n },\n reset: function reset() {\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return this;\n }\n\n this.viewport({\n pan: {\n x: 0,\n y: 0\n },\n zoom: 1\n });\n return this; // chaining\n },\n invalidateSize: function invalidateSize() {\n this._private.sizeCache = null;\n },\n size: function size() {\n var _p = this._private;\n var container = _p.container;\n var cy = this;\n return _p.sizeCache = _p.sizeCache || (container ? function () {\n var style = cy.window().getComputedStyle(container);\n\n var val = function val(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n\n return {\n width: container.clientWidth - val('padding-left') - val('padding-right'),\n height: container.clientHeight - val('padding-top') - val('padding-bottom')\n };\n }() : {\n // fallback if no container (not 0 b/c can be used for dividing etc)\n width: 1,\n height: 1\n });\n },\n width: function width() {\n return this.size().width;\n },\n height: function height() {\n return this.size().height;\n },\n extent: function extent() {\n var pan = this._private.pan;\n var zoom = this._private.zoom;\n var rb = this.renderedExtent();\n var b = {\n x1: (rb.x1 - pan.x) / zoom,\n x2: (rb.x2 - pan.x) / zoom,\n y1: (rb.y1 - pan.y) / zoom,\n y2: (rb.y2 - pan.y) / zoom\n };\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n return b;\n },\n renderedExtent: function renderedExtent() {\n var width = this.width();\n var height = this.height();\n return {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height,\n w: width,\n h: height\n };\n },\n multiClickDebounceTime: function multiClickDebounceTime(_int) {\n if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime;\n return this; // chaining\n }\n }; // aliases\n\n corefn$1.centre = corefn$1.center; // backwards compatibility\n\n corefn$1.autolockNodes = corefn$1.autolock;\n corefn$1.autoungrabifyNodes = corefn$1.autoungrabify;\n\n var fn = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n })\n }; // aliases\n\n fn.attr = fn.data;\n fn.removeAttr = fn.removeData;\n\n var Core = function Core(opts) {\n var cy = this;\n opts = extend({}, opts);\n var container = opts.container; // allow for passing a wrapped jquery object\n // e.g. cytoscape({ container: $('#cy') })\n\n if (container && !htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n\n var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery\n\n reg = reg || {};\n\n if (reg && reg.cy) {\n reg.cy.destroy();\n reg = {}; // old instance => replace reg completely\n }\n\n var readies = reg.readies = reg.readies || [];\n\n if (container) {\n container._cyreg = reg;\n } // make sure container assoc'd reg points to this cy\n\n\n reg.cy = cy;\n var head = _window !== undefined && container !== undefined && !opts.headless;\n var options = opts;\n options.layout = extend({\n name: head ? 'grid' : 'null'\n }, options.layout);\n options.renderer = extend({\n name: head ? 'canvas' : 'null'\n }, options.renderer);\n\n var defVal = function defVal(def, val, altVal) {\n if (val !== undefined) {\n return val;\n } else if (altVal !== undefined) {\n return altVal;\n } else {\n return def;\n }\n };\n\n var _p = this._private = {\n container: container,\n // html dom ele container\n ready: false,\n // whether ready has been triggered\n options: options,\n // cached options\n elements: new Collection(this),\n // elements in the graph\n listeners: [],\n // list of listeners\n aniEles: new Collection(this),\n // elements being animated\n data: options.data || {},\n // data for the core\n scratch: {},\n // scratch object for core\n layout: null,\n renderer: null,\n destroyed: false,\n // whether destroy was called\n notificationsEnabled: true,\n // whether notifications are sent to the renderer\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: defVal(true, options.zoomingEnabled),\n userZoomingEnabled: defVal(true, options.userZoomingEnabled),\n panningEnabled: defVal(true, options.panningEnabled),\n userPanningEnabled: defVal(true, options.userPanningEnabled),\n boxSelectionEnabled: defVal(true, options.boxSelectionEnabled),\n autolock: defVal(false, options.autolock, options.autolockNodes),\n autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes),\n autounselectify: defVal(false, options.autounselectify),\n styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled,\n zoom: number$1(options.zoom) ? options.zoom : 1,\n pan: {\n x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0,\n y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0\n },\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n hasCompoundNodes: false,\n multiClickDebounceTime: defVal(250, options.multiClickDebounceTime)\n };\n\n this.createEmitter(); // set selection type\n\n this.selectionType(options.selectionType); // init zoom bounds\n\n this.zoomRange({\n min: options.minZoom,\n max: options.maxZoom\n });\n\n var loadExtData = function loadExtData(extData, next) {\n var anyIsPromise = extData.some(promise);\n\n if (anyIsPromise) {\n return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init\n } else {\n next(extData); // exec synchronously for convenience\n }\n }; // start with the default stylesheet so we have something before loading an external stylesheet\n\n\n if (_p.styleEnabled) {\n cy.setStyle([]);\n } // create the renderer\n\n\n var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options\n\n cy.initRenderer(rendererOptions);\n\n var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) {\n cy.notifications(false); // remove old elements\n\n var oldEles = cy.mutableElements();\n\n if (oldEles.length > 0) {\n oldEles.remove();\n }\n\n if (elements != null) {\n if (plainObject(elements) || array(elements)) {\n cy.add(elements);\n }\n }\n\n cy.one('layoutready', function (e) {\n cy.notifications(true);\n cy.emit(e); // we missed this event by turning notifications off, so pass it on\n\n cy.one('load', onload);\n cy.emitAndNotify('load');\n }).one('layoutstop', function () {\n cy.one('done', ondone);\n cy.emit('done');\n });\n var layoutOpts = extend({}, cy._private.options.layout);\n layoutOpts.eles = cy.elements();\n cy.layout(layoutOpts).run();\n };\n\n loadExtData([options.style, options.elements], function (thens) {\n var initStyle = thens[0];\n var initEles = thens[1]; // init style\n\n if (_p.styleEnabled) {\n cy.style().append(initStyle);\n } // initial load\n\n\n setElesAndLayout(initEles, function () {\n // onready\n cy.startAnimationLoop();\n _p.ready = true; // if a ready callback is specified as an option, the bind it\n\n if (fn$6(options.ready)) {\n cy.on('ready', options.ready);\n } // bind all the ready handlers registered before creating this instance\n\n\n for (var i = 0; i < readies.length; i++) {\n var fn = readies[i];\n cy.on('ready', fn);\n }\n\n if (reg) {\n reg.readies = [];\n } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc\n\n\n cy.emit('ready');\n }, options.done);\n });\n };\n\n var corefn = Core.prototype; // short alias\n\n extend(corefn, {\n instanceString: function instanceString() {\n return 'core';\n },\n isReady: function isReady() {\n return this._private.ready;\n },\n destroyed: function destroyed() {\n return this._private.destroyed;\n },\n ready: function ready(fn) {\n if (this.isReady()) {\n this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event\n } else {\n this.on('ready', fn);\n }\n\n return this;\n },\n destroy: function destroy() {\n var cy = this;\n if (cy.destroyed()) return;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n this.emit('destroy');\n cy._private.destroyed = true;\n return cy;\n },\n hasElementWithId: function hasElementWithId(id) {\n return this._private.elements.hasElementWithId(id);\n },\n getElementById: function getElementById(id) {\n return this._private.elements.getElementById(id);\n },\n hasCompoundNodes: function hasCompoundNodes() {\n return this._private.hasCompoundNodes;\n },\n headless: function headless() {\n return this._private.renderer.isHeadless();\n },\n styleEnabled: function styleEnabled() {\n return this._private.styleEnabled;\n },\n addToPool: function addToPool(eles) {\n this._private.elements.merge(eles);\n\n return this; // chaining\n },\n removeFromPool: function removeFromPool(eles) {\n this._private.elements.unmerge(eles);\n\n return this;\n },\n container: function container() {\n return this._private.container || null;\n },\n window: function window() {\n var container = this._private.container;\n if (container == null) return _window;\n var ownerDocument = this._private.container.ownerDocument;\n\n if (ownerDocument === undefined || ownerDocument == null) {\n return _window;\n }\n\n return ownerDocument.defaultView || _window;\n },\n mount: function mount(container) {\n if (container == null) {\n return;\n }\n\n var cy = this;\n var _p = cy._private;\n var options = _p.options;\n\n if (!htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n _p.container = container;\n _p.styleEnabled = true;\n cy.invalidateSize();\n cy.initRenderer(extend({}, options, options.renderer, {\n // allow custom renderer name to be re-used, otherwise use canvas\n name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name\n }));\n cy.startAnimationLoop();\n cy.style(options.style);\n cy.emit('mount');\n return cy;\n },\n unmount: function unmount() {\n var cy = this;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n cy.initRenderer({\n name: 'null'\n });\n cy.emit('unmount');\n return cy;\n },\n options: function options() {\n return copy(this._private.options);\n },\n json: function json(obj) {\n var cy = this;\n var _p = cy._private;\n var eles = cy.mutableElements();\n\n var getFreshRef = function getFreshRef(ele) {\n return cy.getElementById(ele.id());\n };\n\n if (plainObject(obj)) {\n // set\n cy.startBatch();\n\n if (obj.elements) {\n var idInJson = {};\n\n var updateEles = function updateEles(jsons, gr) {\n var toAdd = [];\n var toMod = [];\n\n for (var i = 0; i < jsons.length; i++) {\n var json = jsons[i];\n\n if (!json.data.id) {\n warn('cy.json() cannot handle elements without an ID attribute');\n continue;\n }\n\n var id = '' + json.data.id; // id must be string\n\n var ele = cy.getElementById(id);\n idInJson[id] = true;\n\n if (ele.length !== 0) {\n // existing element should be updated\n toMod.push({\n ele: ele,\n json: json\n });\n } else {\n // otherwise should be added\n if (gr) {\n json.group = gr;\n toAdd.push(json);\n } else {\n toAdd.push(json);\n }\n }\n }\n\n cy.add(toAdd);\n\n for (var _i = 0; _i < toMod.length; _i++) {\n var _toMod$_i = toMod[_i],\n _ele = _toMod$_i.ele,\n _json = _toMod$_i.json;\n\n _ele.json(_json);\n }\n };\n\n if (array(obj.elements)) {\n // elements: []\n updateEles(obj.elements);\n } else {\n // elements: { nodes: [], edges: [] }\n var grs = ['nodes', 'edges'];\n\n for (var i = 0; i < grs.length; i++) {\n var gr = grs[i];\n var elements = obj.elements[gr];\n\n if (array(elements)) {\n updateEles(elements, gr);\n }\n }\n }\n\n var parentsToRemove = cy.collection();\n eles.filter(function (ele) {\n return !idInJson[ele.id()];\n }).forEach(function (ele) {\n if (ele.isParent()) {\n parentsToRemove.merge(ele);\n } else {\n ele.remove();\n }\n }); // so that children are not removed w/parent\n\n parentsToRemove.forEach(function (ele) {\n return ele.children().move({\n parent: null\n });\n }); // intermediate parents may be moved by prior line, so make sure we remove by fresh refs\n\n parentsToRemove.forEach(function (ele) {\n return getFreshRef(ele).remove();\n });\n }\n\n if (obj.style) {\n cy.style(obj.style);\n }\n\n if (obj.zoom != null && obj.zoom !== _p.zoom) {\n cy.zoom(obj.zoom);\n }\n\n if (obj.pan) {\n if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) {\n cy.pan(obj.pan);\n }\n }\n\n if (obj.data) {\n cy.data(obj.data);\n }\n\n var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime'];\n\n for (var _i2 = 0; _i2 < fields.length; _i2++) {\n var f = fields[_i2];\n\n if (obj[f] != null) {\n cy[f](obj[f]);\n }\n }\n\n cy.endBatch();\n return this; // chaining\n } else {\n // get\n var flat = !!obj;\n var json = {};\n\n if (flat) {\n json.elements = this.elements().map(function (ele) {\n return ele.json();\n });\n } else {\n json.elements = {};\n eles.forEach(function (ele) {\n var group = ele.group();\n\n if (!json.elements[group]) {\n json.elements[group] = [];\n }\n\n json.elements[group].push(ele.json());\n });\n }\n\n if (this._private.styleEnabled) {\n json.style = cy.style().json();\n }\n\n json.data = copy(cy.data());\n var options = _p.options;\n json.zoomingEnabled = _p.zoomingEnabled;\n json.userZoomingEnabled = _p.userZoomingEnabled;\n json.zoom = _p.zoom;\n json.minZoom = _p.minZoom;\n json.maxZoom = _p.maxZoom;\n json.panningEnabled = _p.panningEnabled;\n json.userPanningEnabled = _p.userPanningEnabled;\n json.pan = copy(_p.pan);\n json.boxSelectionEnabled = _p.boxSelectionEnabled;\n json.renderer = copy(options.renderer);\n json.hideEdgesOnViewport = options.hideEdgesOnViewport;\n json.textureOnViewport = options.textureOnViewport;\n json.wheelSensitivity = options.wheelSensitivity;\n json.motionBlur = options.motionBlur;\n json.multiClickDebounceTime = options.multiClickDebounceTime;\n return json;\n }\n }\n });\n corefn.$id = corefn.getElementById;\n [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) {\n extend(corefn, props);\n });\n\n /* eslint-disable no-unused-vars */\n\n var defaults$7 = {\n fit: true,\n // whether to fit the viewport to the graph\n directed: false,\n // whether the tree is directed downwards (or edges can point in any direction if false)\n padding: 30,\n // padding on fit\n circle: false,\n // put depths in concentric circles if true, put depths top down if false\n grid: false,\n // whether to create an even grid into which the DAG is placed (circle:false only)\n spacingFactor: 1.75,\n // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n roots: undefined,\n // the roots of the trees\n depthSort: undefined,\n // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled,\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n\n };\n var deprecatedOptionDefaults = {\n maximal: false,\n // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also\n acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops\n\n };\n /* eslint-enable */\n\n var getInfo = function getInfo(ele) {\n return ele.scratch('breadthfirst');\n };\n\n var setInfo = function setInfo(ele, obj) {\n return ele.scratch('breadthfirst', obj);\n };\n\n function BreadthFirstLayout(options) {\n this.options = extend({}, defaults$7, deprecatedOptionDefaults, options);\n }\n\n BreadthFirstLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().filter(function (n) {\n return !n.isParent();\n });\n var graph = eles;\n var directed = options.directed;\n var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true\n\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var roots;\n\n if (elementOrCollection(options.roots)) {\n roots = options.roots;\n } else if (array(options.roots)) {\n var rootsArray = [];\n\n for (var i = 0; i < options.roots.length; i++) {\n var id = options.roots[i];\n var ele = cy.getElementById(id);\n rootsArray.push(ele);\n }\n\n roots = cy.collection(rootsArray);\n } else if (string(options.roots)) {\n roots = cy.$(options.roots);\n } else {\n if (directed) {\n roots = nodes.roots();\n } else {\n var components = eles.components();\n roots = cy.collection();\n\n var _loop = function _loop(_i) {\n var comp = components[_i];\n var maxDegree = comp.maxDegree(false);\n var compRoots = comp.filter(function (ele) {\n return ele.degree(false) === maxDegree;\n });\n roots = roots.add(compRoots);\n };\n\n for (var _i = 0; _i < components.length; _i++) {\n _loop(_i);\n }\n }\n }\n\n var depths = [];\n var foundByBfs = {};\n\n var addToDepth = function addToDepth(ele, d) {\n if (depths[d] == null) {\n depths[d] = [];\n }\n\n var i = depths[d].length;\n depths[d].push(ele);\n setInfo(ele, {\n index: i,\n depth: d\n });\n };\n\n var changeDepth = function changeDepth(ele, newDepth) {\n var _getInfo = getInfo(ele),\n depth = _getInfo.depth,\n index = _getInfo.index;\n\n depths[depth][index] = null;\n addToDepth(ele, newDepth);\n }; // find the depths of the nodes\n\n\n graph.bfs({\n roots: roots,\n directed: options.directed,\n visit: function visit(node, edge, pNode, i, depth) {\n var ele = node[0];\n var id = ele.id();\n addToDepth(ele, depth);\n foundByBfs[id] = true;\n }\n }); // check for nodes not found by bfs\n\n var orphanNodes = [];\n\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n\n if (foundByBfs[_ele.id()]) {\n continue;\n } else {\n orphanNodes.push(_ele);\n }\n } // assign the nodes a depth and index\n\n\n var assignDepthsAt = function assignDepthsAt(i) {\n var eles = depths[i];\n\n for (var j = 0; j < eles.length; j++) {\n var _ele2 = eles[j];\n\n if (_ele2 == null) {\n eles.splice(j, 1);\n j--;\n continue;\n }\n\n setInfo(_ele2, {\n depth: i,\n index: j\n });\n }\n };\n\n var assignDepths = function assignDepths() {\n for (var _i3 = 0; _i3 < depths.length; _i3++) {\n assignDepthsAt(_i3);\n }\n };\n\n var adjustMaximally = function adjustMaximally(ele, shifted) {\n var eInfo = getInfo(ele);\n var incomers = ele.incomers().filter(function (el) {\n return el.isNode() && eles.has(el);\n });\n var maxDepth = -1;\n var id = ele.id();\n\n for (var k = 0; k < incomers.length; k++) {\n var incmr = incomers[k];\n var iInfo = getInfo(incmr);\n maxDepth = Math.max(maxDepth, iInfo.depth);\n }\n\n if (eInfo.depth <= maxDepth) {\n if (!options.acyclic && shifted[id]) {\n return null;\n }\n\n var newDepth = maxDepth + 1;\n changeDepth(ele, newDepth);\n shifted[id] = newDepth;\n return true;\n }\n\n return false;\n }; // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1)\n\n\n if (directed && maximal) {\n var Q = [];\n var shifted = {};\n\n var enqueue = function enqueue(n) {\n return Q.push(n);\n };\n\n var dequeue = function dequeue() {\n return Q.shift();\n };\n\n nodes.forEach(function (n) {\n return Q.push(n);\n });\n\n while (Q.length > 0) {\n var _ele3 = dequeue();\n\n var didShift = adjustMaximally(_ele3, shifted);\n\n if (didShift) {\n _ele3.outgoers().filter(function (el) {\n return el.isNode() && eles.has(el);\n }).forEach(enqueue);\n } else if (didShift === null) {\n warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.');\n break; // exit on failure\n }\n }\n }\n\n assignDepths(); // clear holes\n // find min distance we need to leave between nodes\n\n var minDistance = 0;\n\n if (options.avoidOverlap) {\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n var n = nodes[_i4];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n } // get the weighted percent for an element based on its connectivity to other levels\n\n\n var cachedWeightedPercent = {};\n\n var getWeightedPercent = function getWeightedPercent(ele) {\n if (cachedWeightedPercent[ele.id()]) {\n return cachedWeightedPercent[ele.id()];\n }\n\n var eleDepth = getInfo(ele).depth;\n var neighbors = ele.neighborhood();\n var percent = 0;\n var samples = 0;\n\n for (var _i5 = 0; _i5 < neighbors.length; _i5++) {\n var neighbor = neighbors[_i5];\n\n if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) {\n continue;\n }\n\n var bf = getInfo(neighbor);\n\n if (bf == null) {\n continue;\n }\n\n var index = bf.index;\n var depth = bf.depth; // unassigned neighbours shouldn't affect the ordering\n\n if (index == null || depth == null) {\n continue;\n }\n\n var nDepth = depths[depth].length;\n\n if (depth < eleDepth) {\n // only get influenced by elements above\n percent += index / nDepth;\n samples++;\n }\n }\n\n samples = Math.max(1, samples);\n percent = percent / samples;\n\n if (samples === 0) {\n // put lone nodes at the start\n percent = 0;\n }\n\n cachedWeightedPercent[ele.id()] = percent;\n return percent;\n }; // rearrange the indices in each depth level based on connectivity\n\n\n var sortFn = function sortFn(a, b) {\n var apct = getWeightedPercent(a);\n var bpct = getWeightedPercent(b);\n var diff = apct - bpct;\n\n if (diff === 0) {\n return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons\n } else {\n return diff;\n }\n };\n\n if (options.depthSort !== undefined) {\n sortFn = options.depthSort;\n } // sort each level to make connected nodes closer\n\n\n for (var _i6 = 0; _i6 < depths.length; _i6++) {\n depths[_i6].sort(sortFn);\n\n assignDepthsAt(_i6);\n } // assign orphan nodes to a new top-level depth\n\n\n var orphanDepth = [];\n\n for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) {\n orphanDepth.push(orphanNodes[_i7]);\n }\n\n depths.unshift(orphanDepth);\n assignDepths();\n var biggestDepthSize = 0;\n\n for (var _i8 = 0; _i8 < depths.length; _i8++) {\n biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize);\n }\n\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.x1 + bb.h / 2\n };\n var maxDepthSize = depths.reduce(function (max, eles) {\n return Math.max(max, eles.length);\n }, 0);\n\n var getPosition = function getPosition(ele) {\n var _getInfo2 = getInfo(ele),\n depth = _getInfo2.depth,\n index = _getInfo2.index;\n\n var depthSize = depths[depth].length;\n var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance);\n var distanceY = Math.max(bb.h / (depths.length + 1), minDistance);\n var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length);\n radiusStepSize = Math.max(radiusStepSize, minDistance);\n\n if (!options.circle) {\n var epos = {\n x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX,\n y: (depth + 1) * distanceY\n };\n return epos;\n } else {\n var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0);\n var theta = 2 * Math.PI / depths[depth].length * index;\n\n if (depth === 0 && depths[0].length === 1) {\n radius = 1;\n }\n\n return {\n x: center.x + radius * Math.cos(theta),\n y: center.y + radius * Math.sin(theta)\n };\n }\n };\n\n eles.nodes().layoutPositions(this, options, getPosition);\n return this; // chaining\n };\n\n var defaults$6 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox and radius if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n radius: undefined,\n // the radius of the circle\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n\n };\n\n function CircleLayout(options) {\n this.options = extend({}, defaults$6, options);\n }\n\n CircleLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var nodes = eles.nodes().not(':parent');\n\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep;\n var dTheta = sweep / Math.max(1, nodes.length - 1);\n var r;\n var minDistance = 0;\n\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n\n if (number$1(options.radius)) {\n r = options.radius;\n } else if (nodes.length <= 1) {\n r = 0;\n } else {\n r = Math.min(bb.h, bb.w) / 2 - minDistance;\n } // calculate the radius\n\n\n if (nodes.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n minDistance *= 1.75; // just to have some nice spacing\n\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n\n r = Math.max(rMin, r);\n }\n\n var getPos = function getPos(ele, i) {\n var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1);\n var rx = r * Math.cos(theta);\n var ry = r * Math.sin(theta);\n var pos = {\n x: center.x + rx,\n y: center.y + ry\n };\n return pos;\n };\n\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n };\n\n var defaults$5 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n equidistant: false,\n // whether levels have an equal radial distance betwen them, may cause bounding box overflow\n minNodeSpacing: 10,\n // min spacing between outside of nodes (used for radius adjustment)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n height: undefined,\n // height of layout area (overrides container height)\n width: undefined,\n // width of layout area (overrides container width)\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n concentric: function concentric(node) {\n // returns numeric value for each node, placing higher nodes in levels towards the centre\n return node.degree();\n },\n levelWidth: function levelWidth(nodes) {\n // the variation of concentric values in each level\n return nodes.maxDegree() / 4;\n },\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n\n };\n\n function ConcentricLayout(options) {\n this.options = extend({}, defaults$5, options);\n }\n\n ConcentricLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var nodeValues = []; // { node, value }\n\n var maxNodeSize = 0;\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var value = void 0; // calculate the node value\n\n value = options.concentric(node);\n nodeValues.push({\n value: value,\n node: node\n }); // for style mapping\n\n node._private.scratch.concentric = value;\n } // in case we used the `concentric` in style\n\n\n nodes.updateStyle(); // calculate max size now based on potentially updated mappers\n\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n\n var nbb = _node.layoutDimensions(options);\n\n maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h);\n } // sort node values in descreasing order\n\n\n nodeValues.sort(function (a, b) {\n return b.value - a.value;\n });\n var levelWidth = options.levelWidth(nodes); // put the values into levels\n\n var levels = [[]];\n var currentLevel = levels[0];\n\n for (var _i2 = 0; _i2 < nodeValues.length; _i2++) {\n var val = nodeValues[_i2];\n\n if (currentLevel.length > 0) {\n var diff = Math.abs(currentLevel[0].value - val.value);\n\n if (diff >= levelWidth) {\n currentLevel = [];\n levels.push(currentLevel);\n }\n }\n\n currentLevel.push(val);\n } // create positions from levels\n\n\n var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes\n\n if (!options.avoidOverlap) {\n // then strictly constrain to bb\n var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1;\n var maxR = Math.min(bb.w, bb.h) / 2 - minDist;\n var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0);\n minDist = Math.min(minDist, rStep);\n } // find the metrics for each level\n\n\n var r = 0;\n\n for (var _i3 = 0; _i3 < levels.length; _i3++) {\n var level = levels[_i3];\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep;\n var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); // calculate the radius\n\n if (level.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n\n r = Math.max(rMin, r);\n }\n\n level.r = r;\n r += minDist;\n }\n\n if (options.equidistant) {\n var rDeltaMax = 0;\n var _r = 0;\n\n for (var _i4 = 0; _i4 < levels.length; _i4++) {\n var _level = levels[_i4];\n var rDelta = _level.r - _r;\n rDeltaMax = Math.max(rDeltaMax, rDelta);\n }\n\n _r = 0;\n\n for (var _i5 = 0; _i5 < levels.length; _i5++) {\n var _level2 = levels[_i5];\n\n if (_i5 === 0) {\n _r = _level2.r;\n }\n\n _level2.r = _r;\n _r += rDeltaMax;\n }\n } // calculate the node positions\n\n\n var pos = {}; // id => position\n\n for (var _i6 = 0; _i6 < levels.length; _i6++) {\n var _level3 = levels[_i6];\n var _dTheta = _level3.dTheta;\n var _r2 = _level3.r;\n\n for (var j = 0; j < _level3.length; j++) {\n var _val = _level3[j];\n var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j;\n var p = {\n x: center.x + _r2 * Math.cos(theta),\n y: center.y + _r2 * Math.sin(theta)\n };\n pos[_val.node.id()] = p;\n }\n } // position the nodes\n\n\n eles.nodes().layoutPositions(this, options, function (ele) {\n var id = ele.id();\n return pos[id];\n });\n return this; // chaining\n };\n\n /*\n The CoSE layout was written by Gerardo Huck.\n https://www.linkedin.com/in/gerardohuck/\n\n Based on the following article:\n http://dl.acm.org/citation.cfm?id=1498047\n\n Modifications tracked on Github.\n */\n var DEBUG;\n /**\n * @brief : default layout options\n */\n\n var defaults$4 = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // Whether to animate while running the layout\n // true : Animate continuously as the layout is running\n // false : Just show the end result\n // 'end' : Animate with the end result, from the initial positions to the end positions\n animate: true,\n // Easing of the animation for animate:'end'\n animationEasing: undefined,\n // The duration of the animation for animate:'end'\n animationDuration: undefined,\n // A function that determines whether the node should be animated\n // All nodes animated by default on animate enabled\n // Non-animated nodes are positioned immediately when the layout starts\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // The layout animates only after this many milliseconds for animate:true\n // (prevents flashing on fast runs)\n animationThreshold: 250,\n // Number of iterations between consecutive screen positions update\n refresh: 20,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 30,\n // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n boundingBox: undefined,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n nodeDimensionsIncludeLabels: false,\n // Randomize the initial positions of the nodes (true) or use existing positions (false)\n randomize: false,\n // Extra spacing between components in non-compound graphs\n componentSpacing: 40,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 2048;\n },\n // Node repulsion (overlapping) multiplier\n nodeOverlap: 4,\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 32;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 32;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 1.2,\n // Gravity force (constant)\n gravity: 1,\n // Maximum number of iterations to perform\n numIter: 1000,\n // Initial temperature (maximum node displacement)\n initialTemp: 1000,\n // Cooling factor (how the temperature is reduced between consecutive iterations\n coolingFactor: 0.99,\n // Lower temperature threshold (below this point the layout will end)\n minTemp: 1.0\n };\n /**\n * @brief : constructor\n * @arg options : object containing layout options\n */\n\n function CoseLayout(options) {\n this.options = extend({}, defaults$4, options);\n this.options.layout = this;\n }\n /**\n * @brief : runs the layout\n */\n\n\n CoseLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var layout = this;\n layout.stopped = false;\n\n if (options.animate === true || options.animate === false) {\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n } // Set DEBUG - Global variable\n\n\n if (true === options.debug) {\n DEBUG = true;\n } else {\n DEBUG = false;\n } // Initialize layout info\n\n\n var layoutInfo = createLayoutInfo(cy, layout, options); // Show LayoutInfo contents if debugging\n\n if (DEBUG) {\n printLayoutInfo(layoutInfo);\n } // If required, randomize node positions\n\n\n if (options.randomize) {\n randomizePositions(layoutInfo);\n }\n\n var startTime = performanceNow();\n\n var refresh = function refresh() {\n refreshPositions(layoutInfo, cy, options); // Fit the graph if necessary\n\n if (true === options.fit) {\n cy.fit(options.padding);\n }\n };\n\n var mainLoop = function mainLoop(i) {\n if (layout.stopped || i >= options.numIter) {\n // logDebug(\"Layout manually stopped. Stopping computation in step \" + i);\n return false;\n } // Do one step in the phisical simulation\n\n\n step(layoutInfo, options); // Update temperature\n\n layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug(\"New temperature: \" + layoutInfo.temperature);\n\n if (layoutInfo.temperature < options.minTemp) {\n // logDebug(\"Temperature drop below minimum threshold. Stopping computation in step \" + i);\n return false;\n }\n\n return true;\n };\n\n var done = function done() {\n if (options.animate === true || options.animate === false) {\n refresh(); // Layout has finished\n\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n } else {\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.layoutPositions(layout, options, getScaledPos);\n }\n };\n\n var i = 0;\n var loopRet = true;\n\n if (options.animate === true) {\n var frame = function frame() {\n var f = 0;\n\n while (loopRet && f < options.refresh) {\n loopRet = mainLoop(i);\n i++;\n f++;\n }\n\n if (!loopRet) {\n // it's done\n separateComponents(layoutInfo, options);\n done();\n } else {\n var now = performanceNow();\n\n if (now - startTime >= options.animationThreshold) {\n refresh();\n }\n\n requestAnimationFrame(frame);\n }\n };\n\n frame();\n } else {\n while (loopRet) {\n loopRet = mainLoop(i);\n i++;\n }\n\n separateComponents(layoutInfo, options);\n done();\n }\n\n return this; // chaining\n };\n /**\n * @brief : called on continuous layouts to stop them before they finish\n */\n\n\n CoseLayout.prototype.stop = function () {\n this.stopped = true;\n\n if (this.thread) {\n this.thread.stop();\n }\n\n this.emit('layoutstop');\n return this; // chaining\n };\n\n CoseLayout.prototype.destroy = function () {\n if (this.thread) {\n this.thread.stop();\n }\n\n return this; // chaining\n };\n /**\n * @brief : Creates an object which is contains all the data\n * used in the layout process\n * @arg cy : cytoscape.js object\n * @return : layoutInfo object initialized\n */\n\n\n var createLayoutInfo = function createLayoutInfo(cy, layout, options) {\n // Shortcut\n var edges = options.eles.edges();\n var nodes = options.eles.nodes();\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var layoutInfo = {\n isCompound: cy.hasCompoundNodes(),\n layoutNodes: [],\n idToIndex: {},\n nodeSize: nodes.size(),\n graphSet: [],\n indexToGraph: [],\n layoutEdges: [],\n edgeSize: edges.size(),\n temperature: options.initialTemp,\n clientWidth: bb.w,\n clientHeight: bb.h,\n boundingBox: bb\n };\n var components = options.eles.components();\n var id2cmptId = {};\n\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n\n for (var j = 0; j < component.length; j++) {\n var node = component[j];\n id2cmptId[node.id()] = i;\n }\n } // Iterate over all nodes, creating layout nodes\n\n\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var tempNode = {};\n tempNode.isLocked = n.locked();\n tempNode.id = n.data('id');\n tempNode.parentId = n.data('parent');\n tempNode.cmptId = id2cmptId[n.id()];\n tempNode.children = [];\n tempNode.positionX = n.position('x');\n tempNode.positionY = n.position('y');\n tempNode.offsetX = 0;\n tempNode.offsetY = 0;\n tempNode.height = nbb.w;\n tempNode.width = nbb.h;\n tempNode.maxX = tempNode.positionX + tempNode.width / 2;\n tempNode.minX = tempNode.positionX - tempNode.width / 2;\n tempNode.maxY = tempNode.positionY + tempNode.height / 2;\n tempNode.minY = tempNode.positionY - tempNode.height / 2;\n tempNode.padLeft = parseFloat(n.style('padding'));\n tempNode.padRight = parseFloat(n.style('padding'));\n tempNode.padTop = parseFloat(n.style('padding'));\n tempNode.padBottom = parseFloat(n.style('padding')); // forces\n\n tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; // Add new node\n\n layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map\n\n layoutInfo.idToIndex[tempNode.id] = i;\n } // Inline implementation of a queue, used for traversing the graph in BFS order\n\n\n var queue = [];\n var start = 0; // Points to the start the queue\n\n var end = -1; // Points to the end of the queue\n\n var tempGraph = []; // Second pass to add child information and\n // initialize queue for hierarchical traversal\n\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n var p_id = n.parentId; // Check if node n has a parent node\n\n if (null != p_id) {\n // Add node Id to parent's list of children\n layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id);\n } else {\n // If a node doesn't have a parent, then it's in the root graph\n queue[++end] = n.id;\n tempGraph.push(n.id);\n }\n } // Add root graph to graphSet\n\n\n layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level,\n\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var node_id = queue[start++];\n var node_ix = layoutInfo.idToIndex[node_id];\n var node = layoutInfo.layoutNodes[node_ix];\n var children = node.children;\n\n if (children.length > 0) {\n // Add children nodes as a new graph to graph set\n layoutInfo.graphSet.push(children); // Add children to que queue to be visited\n\n for (var i = 0; i < children.length; i++) {\n queue[++end] = children[i];\n }\n }\n } // Create indexToGraph map\n\n\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n\n for (var j = 0; j < graph.length; j++) {\n var index = layoutInfo.idToIndex[graph[j]];\n layoutInfo.indexToGraph[index] = i;\n }\n } // Iterate over all edges, creating Layout Edges\n\n\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n var e = edges[i];\n var tempEdge = {};\n tempEdge.id = e.data('id');\n tempEdge.sourceId = e.data('source');\n tempEdge.targetId = e.data('target'); // Compute ideal length\n\n var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength;\n var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; // Check if it's an inter graph edge\n\n var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId];\n var targetIx = layoutInfo.idToIndex[tempEdge.targetId];\n var sourceGraph = layoutInfo.indexToGraph[sourceIx];\n var targetGraph = layoutInfo.indexToGraph[targetIx];\n\n if (sourceGraph != targetGraph) {\n // Find lowest common graph ancestor\n var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); // Compute sum of node depths, relative to lca graph\n\n var lcaGraph = layoutInfo.graphSet[lca];\n var depth = 0; // Source depth\n\n var tempNode = layoutInfo.layoutNodes[sourceIx];\n\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n } // Target depth\n\n\n tempNode = layoutInfo.layoutNodes[targetIx];\n\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n } // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId +\n // \". Index: \" + lca + \" Contents: \" + lcaGraph.toString() +\n // \". Depth: \" + depth);\n // Update idealLength\n\n\n idealLength *= depth * options.nestingFactor;\n }\n\n tempEdge.idealLength = idealLength;\n tempEdge.elasticity = elasticity;\n layoutInfo.layoutEdges.push(tempEdge);\n } // Finally, return layoutInfo object\n\n\n return layoutInfo;\n };\n /**\n * @brief : This function finds the index of the lowest common\n * graph ancestor between 2 nodes in the subtree\n * (from the graph hierarchy induced tree) whose\n * root is graphIx\n *\n * @arg node1: node1's ID\n * @arg node2: node2's ID\n * @arg layoutInfo: layoutInfo object\n *\n */\n\n\n var findLCA = function findLCA(node1, node2, layoutInfo) {\n // Find their common ancester, starting from the root graph\n var res = findLCA_aux(node1, node2, 0, layoutInfo);\n\n if (2 > res.count) {\n // If aux function couldn't find the common ancester,\n // then it is the root graph\n return 0;\n } else {\n return res.graph;\n }\n };\n /**\n * @brief : Auxiliary function used for LCA computation\n *\n * @arg node1 : node1's ID\n * @arg node2 : node2's ID\n * @arg graphIx : subgraph index\n * @arg layoutInfo : layoutInfo object\n *\n * @return : object of the form {count: X, graph: Y}, where:\n * X is the number of ancestors (max: 2) found in\n * graphIx (and it's subgraphs),\n * Y is the graph index of the lowest graph containing\n * all X nodes\n */\n\n\n var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) {\n var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx\n\n if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) {\n return {\n count: 2,\n graph: graphIx\n };\n } // Make recursive calls for all subgraphs\n\n\n var c = 0;\n\n for (var i = 0; i < graph.length; i++) {\n var nodeId = graph[i];\n var nodeIx = layoutInfo.idToIndex[nodeId];\n var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it\n\n if (0 === children.length) {\n continue;\n }\n\n var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]];\n var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo);\n\n if (0 === result.count) {\n // Neither node1 nor node2 are present in this subgraph\n continue;\n } else if (1 === result.count) {\n // One of (node1, node2) is present in this subgraph\n c++;\n\n if (2 === c) {\n // We've already found both nodes, no need to keep searching\n break;\n }\n } else {\n // Both nodes are present in this subgraph\n return result;\n }\n }\n\n return {\n count: c,\n graph: graphIx\n };\n };\n /**\n * @brief: printsLayoutInfo into js console\n * Only used for debbuging\n */\n\n\nvar printLayoutInfo; \n /**\n * @brief : Randomizes the position of all nodes\n */\n\n\n var randomizePositions = function randomizePositions(layoutInfo, cy) {\n var width = layoutInfo.clientWidth;\n var height = layoutInfo.clientHeight;\n\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i]; // No need to randomize compound nodes or locked nodes\n\n if (0 === n.children.length && !n.isLocked) {\n n.positionX = Math.random() * width;\n n.positionY = Math.random() * height;\n }\n }\n };\n\n var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) {\n var bb = layoutInfo.boundingBox;\n var coseBB = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity\n };\n\n if (options.boundingBox) {\n nodes.forEach(function (node) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]];\n coseBB.x1 = Math.min(coseBB.x1, lnode.positionX);\n coseBB.x2 = Math.max(coseBB.x2, lnode.positionX);\n coseBB.y1 = Math.min(coseBB.y1, lnode.positionY);\n coseBB.y2 = Math.max(coseBB.y2, lnode.positionY);\n });\n coseBB.w = coseBB.x2 - coseBB.x1;\n coseBB.h = coseBB.y2 - coseBB.y1;\n }\n\n return function (ele, i) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]];\n\n if (options.boundingBox) {\n // then add extra bounding box constraint\n var pctX = (lnode.positionX - coseBB.x1) / coseBB.w;\n var pctY = (lnode.positionY - coseBB.y1) / coseBB.h;\n return {\n x: bb.x1 + pctX * bb.w,\n y: bb.y1 + pctY * bb.h\n };\n } else {\n return {\n x: lnode.positionX,\n y: lnode.positionY\n };\n }\n };\n };\n /**\n * @brief : Updates the positions of nodes in the network\n * @arg layoutInfo : LayoutInfo object\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\n\n\n var refreshPositions = function refreshPositions(layoutInfo, cy, options) {\n // var s = 'Refreshing positions';\n // logDebug(s);\n var layout = options.layout;\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.positions(getScaledPos); // Trigger layoutReady only on first call\n\n if (true !== layoutInfo.ready) {\n // s = 'Triggering layoutready';\n // logDebug(s);\n layoutInfo.ready = true;\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: this\n });\n }\n };\n /**\n * @brief : Logs a debug message in JS console, if DEBUG is ON\n */\n // var logDebug = function(text) {\n // if (DEBUG) {\n // console.debug(text);\n // }\n // };\n\n /**\n * @brief : Performs one iteration of the physical simulation\n * @arg layoutInfo : LayoutInfo object already initialized\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\n\n\n var step = function step(layoutInfo, options, _step) {\n // var s = \"\\n\\n###############################\";\n // s += \"\\nSTEP: \" + step;\n // s += \"\\n###############################\\n\";\n // logDebug(s);\n // Calculate node repulsions\n calculateNodeForces(layoutInfo, options); // Calculate edge forces\n\n calculateEdgeForces(layoutInfo); // Calculate gravity forces\n\n calculateGravityForces(layoutInfo, options); // Propagate forces from parent to child\n\n propagateForces(layoutInfo); // Update positions based on calculated forces\n\n updatePositions(layoutInfo);\n };\n /**\n * @brief : Computes the node repulsion forces\n */\n\n\n var calculateNodeForces = function calculateNodeForces(layoutInfo, options) {\n // Go through each of the graphs in graphSet\n // Nodes only repel each other if they belong to the same graph\n // var s = 'calculateNodeForces';\n // logDebug(s);\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length; // s = \"Set: \" + graph.toString();\n // logDebug(s);\n // Now get all the pairs of nodes\n // Only get each pair once, (A, B) = (B, A)\n\n for (var j = 0; j < numNodes; j++) {\n var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]];\n\n for (var k = j + 1; k < numNodes; k++) {\n var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]];\n nodeRepulsion(node1, node2, layoutInfo, options);\n }\n }\n }\n };\n\n var randomDistance = function randomDistance(max) {\n return -max + 2 * max * Math.random();\n };\n /**\n * @brief : Compute the node repulsion forces between a pair of nodes\n */\n\n\n var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) {\n // var s = \"Node repulsion. Node1: \" + node1.id + \" Node2: \" + node2.id;\n var cmptId1 = node1.cmptId;\n var cmptId2 = node2.cmptId;\n\n if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) {\n return;\n } // Get direction of line connecting both node centers\n\n\n var directionX = node2.positionX - node1.positionX;\n var directionY = node2.positionY - node1.positionY;\n var maxRandDist = 1; // s += \"\\ndirectionX: \" + directionX + \", directionY: \" + directionY;\n // If both centers are the same, apply a random force\n\n if (0 === directionX && 0 === directionY) {\n directionX = randomDistance(maxRandDist);\n directionY = randomDistance(maxRandDist);\n }\n\n var overlap = nodesOverlap(node1, node2, directionX, directionY);\n\n if (overlap > 0) {\n // s += \"\\nNodes DO overlap.\";\n // s += \"\\nOverlap: \" + overlap;\n // If nodes overlap, repulsion force is proportional\n // to the overlap\n var force = options.nodeOverlap * overlap; // Compute the module and components of the force vector\n\n var distance = Math.sqrt(directionX * directionX + directionY * directionY); // s += \"\\nDistance: \" + distance;\n\n var forceX = force * directionX / distance;\n var forceY = force * directionY / distance;\n } else {\n // s += \"\\nNodes do NOT overlap.\";\n // If there's no overlap, force is inversely proportional\n // to squared distance\n // Get clipping points for both nodes\n var point1 = findClippingPoint(node1, directionX, directionY);\n var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); // Use clipping points to compute distance\n\n var distanceX = point2.x - point1.x;\n var distanceY = point2.y - point1.y;\n var distanceSqr = distanceX * distanceX + distanceY * distanceY;\n var distance = Math.sqrt(distanceSqr); // s += \"\\nDistance: \" + distance;\n // Compute the module and components of the force vector\n\n var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr;\n var forceX = force * distanceX / distance;\n var forceY = force * distanceY / distance;\n } // Apply force\n\n\n if (!node1.isLocked) {\n node1.offsetX -= forceX;\n node1.offsetY -= forceY;\n }\n\n if (!node2.isLocked) {\n node2.offsetX += forceX;\n node2.offsetY += forceY;\n } // s += \"\\nForceX: \" + forceX + \" ForceY: \" + forceY;\n // logDebug(s);\n\n\n return;\n };\n /**\n * @brief : Determines whether two nodes overlap or not\n * @return : Amount of overlapping (0 => no overlap)\n */\n\n\n var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) {\n if (dX > 0) {\n var overlapX = node1.maxX - node2.minX;\n } else {\n var overlapX = node2.maxX - node1.minX;\n }\n\n if (dY > 0) {\n var overlapY = node1.maxY - node2.minY;\n } else {\n var overlapY = node2.maxY - node1.minY;\n }\n\n if (overlapX >= 0 && overlapY >= 0) {\n return Math.sqrt(overlapX * overlapX + overlapY * overlapY);\n } else {\n return 0;\n }\n };\n /**\n * @brief : Finds the point in which an edge (direction dX, dY) intersects\n * the rectangular bounding box of it's source/target node\n */\n\n\n var findClippingPoint = function findClippingPoint(node, dX, dY) {\n // Shorcuts\n var X = node.positionX;\n var Y = node.positionY;\n var H = node.height || 1;\n var W = node.width || 1;\n var dirSlope = dY / dX;\n var nodeSlope = H / W; // var s = 'Computing clipping point of node ' + node.id +\n // \" . Height: \" + H + \", Width: \" + W +\n // \"\\nDirection \" + dX + \", \" + dY;\n //\n // Compute intersection\n\n var res = {}; // Case: Vertical direction (up)\n\n if (0 === dX && 0 < dY) {\n res.x = X; // s += \"\\nUp direction\";\n\n res.y = Y + H / 2;\n return res;\n } // Case: Vertical direction (down)\n\n\n if (0 === dX && 0 > dY) {\n res.x = X;\n res.y = Y + H / 2; // s += \"\\nDown direction\";\n\n return res;\n } // Case: Intersects the right border\n\n\n if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X + W / 2;\n res.y = Y + W * dY / 2 / dX; // s += \"\\nRightborder\";\n\n return res;\n } // Case: Intersects the left border\n\n\n if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X - W / 2;\n res.y = Y - W * dY / 2 / dX; // s += \"\\nLeftborder\";\n\n return res;\n } // Case: Intersects the top border\n\n\n if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X + H * dX / 2 / dY;\n res.y = Y + H / 2; // s += \"\\nTop border\";\n\n return res;\n } // Case: Intersects the bottom border\n\n\n if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X - H * dX / 2 / dY;\n res.y = Y - H / 2; // s += \"\\nBottom border\";\n\n return res;\n } // s += \"\\nClipping point found at \" + res.x + \", \" + res.y;\n // logDebug(s);\n\n\n return res;\n };\n /**\n * @brief : Calculates all edge forces\n */\n\n\n var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) {\n // Iterate over all edges\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n // Get edge, source & target nodes\n var edge = layoutInfo.layoutEdges[i];\n var sourceIx = layoutInfo.idToIndex[edge.sourceId];\n var source = layoutInfo.layoutNodes[sourceIx];\n var targetIx = layoutInfo.idToIndex[edge.targetId];\n var target = layoutInfo.layoutNodes[targetIx]; // Get direction of line connecting both node centers\n\n var directionX = target.positionX - source.positionX;\n var directionY = target.positionY - source.positionY; // If both centers are the same, do nothing.\n // A random force has already been applied as node repulsion\n\n if (0 === directionX && 0 === directionY) {\n continue;\n } // Get clipping points for both nodes\n\n\n var point1 = findClippingPoint(source, directionX, directionY);\n var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY);\n var lx = point2.x - point1.x;\n var ly = point2.y - point1.y;\n var l = Math.sqrt(lx * lx + ly * ly);\n var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity;\n\n if (0 !== l) {\n var forceX = force * lx / l;\n var forceY = force * ly / l;\n } else {\n var forceX = 0;\n var forceY = 0;\n } // Add this force to target and source nodes\n\n\n if (!source.isLocked) {\n source.offsetX += forceX;\n source.offsetY += forceY;\n }\n\n if (!target.isLocked) {\n target.offsetX -= forceX;\n target.offsetY -= forceY;\n } // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id;\n // s += \"\\nDistance: \" + l + \" Force: (\" + forceX + \", \" + forceY + \")\";\n // logDebug(s);\n\n }\n };\n /**\n * @brief : Computes gravity forces for all nodes\n */\n\n\n var calculateGravityForces = function calculateGravityForces(layoutInfo, options) {\n if (options.gravity === 0) {\n return;\n }\n\n var distThreshold = 1; // var s = 'calculateGravityForces';\n // logDebug(s);\n\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length; // s = \"Set: \" + graph.toString();\n // logDebug(s);\n // Compute graph center\n\n if (0 === i) {\n var centerX = layoutInfo.clientHeight / 2;\n var centerY = layoutInfo.clientWidth / 2;\n } else {\n // Get Parent node for this graph, and use its position as center\n var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]];\n var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]];\n var centerX = parent.positionX;\n var centerY = parent.positionY;\n } // s = \"Center found at: \" + centerX + \", \" + centerY;\n // logDebug(s);\n // Apply force to all nodes in graph\n\n\n for (var j = 0; j < numNodes; j++) {\n var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; // s = \"Node: \" + node.id;\n\n if (node.isLocked) {\n continue;\n }\n\n var dx = centerX - node.positionX;\n var dy = centerY - node.positionY;\n var d = Math.sqrt(dx * dx + dy * dy);\n\n if (d > distThreshold) {\n var fx = options.gravity * dx / d;\n var fy = options.gravity * dy / d;\n node.offsetX += fx;\n node.offsetY += fy; // s += \": Applied force: \" + fx + \", \" + fy;\n } // logDebug(s);\n\n }\n }\n };\n /**\n * @brief : This function propagates the existing offsets from\n * parent nodes to its descendents.\n * @arg layoutInfo : layoutInfo Object\n * @arg cy : cytoscape Object\n * @arg options : Layout options\n */\n\n\n var propagateForces = function propagateForces(layoutInfo, options) {\n // Inline implementation of a queue, used for traversing the graph in BFS order\n var queue = [];\n var start = 0; // Points to the start the queue\n\n var end = -1; // Points to the end of the queue\n // logDebug('propagateForces');\n // Start by visiting the nodes in the root graph\n\n queue.push.apply(queue, layoutInfo.graphSet[0]);\n end += layoutInfo.graphSet[0].length; // Traverse the graph, level by level,\n\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var nodeId = queue[start++];\n var nodeIndex = layoutInfo.idToIndex[nodeId];\n var node = layoutInfo.layoutNodes[nodeIndex];\n var children = node.children; // We only need to process the node if it's compound\n\n if (0 < children.length && !node.isLocked) {\n var offX = node.offsetX;\n var offY = node.offsetY; // var s = \"Propagating offset from parent node : \" + node.id +\n // \". OffsetX: \" + offX + \". OffsetY: \" + offY;\n // s += \"\\n Children: \" + children.toString();\n // logDebug(s);\n\n for (var i = 0; i < children.length; i++) {\n var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; // Propagate offset\n\n childNode.offsetX += offX;\n childNode.offsetY += offY; // Add children to queue to be visited\n\n queue[++end] = children[i];\n } // Reset parent offsets\n\n\n node.offsetX = 0;\n node.offsetY = 0;\n }\n }\n };\n /**\n * @brief : Updates the layout model positions, based on\n * the accumulated forces\n */\n\n\n var updatePositions = function updatePositions(layoutInfo, options) {\n // var s = 'Updating positions';\n // logDebug(s);\n // Reset boundaries for compound nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n\n if (0 < n.children.length) {\n // logDebug(\"Resetting boundaries of compound node: \" + n.id);\n n.maxX = undefined;\n n.minX = undefined;\n n.maxY = undefined;\n n.minY = undefined;\n }\n }\n\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n\n if (0 < n.children.length || n.isLocked) {\n // No need to set compound or locked node position\n // logDebug(\"Skipping position update of node: \" + n.id);\n continue;\n } // s = \"Node: \" + n.id + \" Previous position: (\" +\n // n.positionX + \", \" + n.positionY + \").\";\n // Limit displacement in order to improve stability\n\n\n var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature);\n n.positionX += tempForce.x;\n n.positionY += tempForce.y;\n n.offsetX = 0;\n n.offsetY = 0;\n n.minX = n.positionX - n.width;\n n.maxX = n.positionX + n.width;\n n.minY = n.positionY - n.height;\n n.maxY = n.positionY + n.height; // s += \" New Position: (\" + n.positionX + \", \" + n.positionY + \").\";\n // logDebug(s);\n // Update ancestry boudaries\n\n updateAncestryBoundaries(n, layoutInfo);\n } // Update size, position of compund nodes\n\n\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n\n if (0 < n.children.length && !n.isLocked) {\n n.positionX = (n.maxX + n.minX) / 2;\n n.positionY = (n.maxY + n.minY) / 2;\n n.width = n.maxX - n.minX;\n n.height = n.maxY - n.minY; // s = \"Updating position, size of compound node \" + n.id;\n // s += \"\\nPositionX: \" + n.positionX + \", PositionY: \" + n.positionY;\n // s += \"\\nWidth: \" + n.width + \", Height: \" + n.height;\n // logDebug(s);\n }\n }\n };\n /**\n * @brief : Limits a force (forceX, forceY) to be not\n * greater (in modulo) than max.\n 8 Preserves force direction.\n */\n\n\n var limitForce = function limitForce(forceX, forceY, max) {\n // var s = \"Limiting force: (\" + forceX + \", \" + forceY + \"). Max: \" + max;\n var force = Math.sqrt(forceX * forceX + forceY * forceY);\n\n if (force > max) {\n var res = {\n x: max * forceX / force,\n y: max * forceY / force\n };\n } else {\n var res = {\n x: forceX,\n y: forceY\n };\n } // s += \".\\nResult: (\" + res.x + \", \" + res.y + \")\";\n // logDebug(s);\n\n\n return res;\n };\n /**\n * @brief : Function used for keeping track of compound node\n * sizes, since they should bound all their subnodes.\n */\n\n\n var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) {\n // var s = \"Propagating new position/size of node \" + node.id;\n var parentId = node.parentId;\n\n if (null == parentId) {\n // If there's no parent, we are done\n // s += \". No parent node.\";\n // logDebug(s);\n return;\n } // Get Parent Node\n\n\n var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]];\n var flag = false; // MaxX\n\n if (null == p.maxX || node.maxX + p.padRight > p.maxX) {\n p.maxX = node.maxX + p.padRight;\n flag = true; // s += \"\\nNew maxX for parent node \" + p.id + \": \" + p.maxX;\n } // MinX\n\n\n if (null == p.minX || node.minX - p.padLeft < p.minX) {\n p.minX = node.minX - p.padLeft;\n flag = true; // s += \"\\nNew minX for parent node \" + p.id + \": \" + p.minX;\n } // MaxY\n\n\n if (null == p.maxY || node.maxY + p.padBottom > p.maxY) {\n p.maxY = node.maxY + p.padBottom;\n flag = true; // s += \"\\nNew maxY for parent node \" + p.id + \": \" + p.maxY;\n } // MinY\n\n\n if (null == p.minY || node.minY - p.padTop < p.minY) {\n p.minY = node.minY - p.padTop;\n flag = true; // s += \"\\nNew minY for parent node \" + p.id + \": \" + p.minY;\n } // If updated boundaries, propagate changes upward\n\n\n if (flag) {\n // logDebug(s);\n return updateAncestryBoundaries(p, layoutInfo);\n } // s += \". No changes in boundaries/position of parent node \" + p.id;\n // logDebug(s);\n\n\n return;\n };\n\n var separateComponents = function separateComponents(layoutInfo, options) {\n var nodes = layoutInfo.layoutNodes;\n var components = [];\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var cid = node.cmptId;\n var component = components[cid] = components[cid] || [];\n component.push(node);\n }\n\n var totalA = 0;\n\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n\n if (!c) {\n continue;\n }\n\n c.x1 = Infinity;\n c.x2 = -Infinity;\n c.y1 = Infinity;\n c.y2 = -Infinity;\n\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n c.x1 = Math.min(c.x1, n.positionX - n.width / 2);\n c.x2 = Math.max(c.x2, n.positionX + n.width / 2);\n c.y1 = Math.min(c.y1, n.positionY - n.height / 2);\n c.y2 = Math.max(c.y2, n.positionY + n.height / 2);\n }\n\n c.w = c.x2 - c.x1;\n c.h = c.y2 - c.y1;\n totalA += c.w * c.h;\n }\n\n components.sort(function (c1, c2) {\n return c2.w * c2.h - c1.w * c1.h;\n });\n var x = 0;\n var y = 0;\n var usedW = 0;\n var rowH = 0;\n var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight;\n\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n\n if (!c) {\n continue;\n }\n\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n\n if (!n.isLocked) {\n n.positionX += x - c.x1;\n n.positionY += y - c.y1;\n }\n }\n\n x += c.w + options.componentSpacing;\n usedW += c.w + options.componentSpacing;\n rowH = Math.max(rowH, c.h);\n\n if (usedW > maxRowW) {\n y += rowH + options.componentSpacing;\n x = 0;\n usedW = 0;\n rowH = 0;\n }\n }\n };\n\n var defaults$3 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // padding used on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n avoidOverlapPadding: 10,\n // extra spacing around nodes when avoidOverlap: true\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n condense: false,\n // uses all available space on false, uses minimal space on true\n rows: undefined,\n // force num of rows in the grid\n cols: undefined,\n // force num of columns in the grid\n position: function position(node) {},\n // returns { row, col } for element\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n\n };\n\n function GridLayout(options) {\n this.options = extend({}, defaults$3, options);\n }\n\n GridLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n\n if (bb.h === 0 || bb.w === 0) {\n eles.nodes().layoutPositions(this, options, function (ele) {\n return {\n x: bb.x1,\n y: bb.y1\n };\n });\n } else {\n // width/height * splits^2 = cells where splits is number of times to split width\n var cells = nodes.size();\n var splits = Math.sqrt(cells * bb.h / bb.w);\n var rows = Math.round(splits);\n var cols = Math.round(bb.w / bb.h * splits);\n\n var small = function small(val) {\n if (val == null) {\n return Math.min(rows, cols);\n } else {\n var min = Math.min(rows, cols);\n\n if (min == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n\n var large = function large(val) {\n if (val == null) {\n return Math.max(rows, cols);\n } else {\n var max = Math.max(rows, cols);\n\n if (max == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n\n var oRows = options.rows;\n var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values\n\n if (oRows != null && oCols != null) {\n rows = oRows;\n cols = oCols;\n } else if (oRows != null && oCols == null) {\n rows = oRows;\n cols = Math.ceil(cells / rows);\n } else if (oRows == null && oCols != null) {\n cols = oCols;\n rows = Math.ceil(cells / cols);\n } // otherwise use the automatic values and adjust accordingly\n // if rounding was up, see if we can reduce rows or columns\n else if (cols * rows > cells) {\n var sm = small();\n var lg = large(); // reducing the small side takes away the most cells, so try it first\n\n if ((sm - 1) * lg >= cells) {\n small(sm - 1);\n } else if ((lg - 1) * sm >= cells) {\n large(lg - 1);\n }\n } else {\n // if rounding was too low, add rows or columns\n while (cols * rows < cells) {\n var _sm = small();\n\n var _lg = large(); // try to add to larger side first (adds less in multiplication)\n\n\n if ((_lg + 1) * _sm >= cells) {\n large(_lg + 1);\n } else {\n small(_sm + 1);\n }\n }\n }\n\n var cellWidth = bb.w / cols;\n var cellHeight = bb.h / rows;\n\n if (options.condense) {\n cellWidth = 0;\n cellHeight = 0;\n }\n\n if (options.avoidOverlap) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = node._private.position;\n\n if (pos.x == null || pos.y == null) {\n // for bb\n pos.x = 0;\n pos.y = 0;\n }\n\n var nbb = node.layoutDimensions(options);\n var p = options.avoidOverlapPadding;\n var w = nbb.w + p;\n var h = nbb.h + p;\n cellWidth = Math.max(cellWidth, w);\n cellHeight = Math.max(cellHeight, h);\n }\n }\n\n var cellUsed = {}; // e.g. 'c-0-2' => true\n\n var used = function used(row, col) {\n return cellUsed['c-' + row + '-' + col] ? true : false;\n };\n\n var use = function use(row, col) {\n cellUsed['c-' + row + '-' + col] = true;\n }; // to keep track of current cell position\n\n\n var row = 0;\n var col = 0;\n\n var moveToNextCell = function moveToNextCell() {\n col++;\n\n if (col >= cols) {\n col = 0;\n row++;\n }\n }; // get a cache of all the manual positions\n\n\n var id2manPos = {};\n\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n var rcPos = options.position(_node);\n\n if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) {\n // must have at least row or col def'd\n var _pos = {\n row: rcPos.row,\n col: rcPos.col\n };\n\n if (_pos.col === undefined) {\n // find unused col\n _pos.col = 0;\n\n while (used(_pos.row, _pos.col)) {\n _pos.col++;\n }\n } else if (_pos.row === undefined) {\n // find unused row\n _pos.row = 0;\n\n while (used(_pos.row, _pos.col)) {\n _pos.row++;\n }\n }\n\n id2manPos[_node.id()] = _pos;\n use(_pos.row, _pos.col);\n }\n }\n\n var getPos = function getPos(element, i) {\n var x, y;\n\n if (element.locked() || element.isParent()) {\n return false;\n } // see if we have a manual position set\n\n\n var rcPos = id2manPos[element.id()];\n\n if (rcPos) {\n x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1;\n y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1;\n } else {\n // otherwise set automatically\n while (used(row, col)) {\n moveToNextCell();\n }\n\n x = col * cellWidth + cellWidth / 2 + bb.x1;\n y = row * cellHeight + cellHeight / 2 + bb.y1;\n use(row, col);\n moveToNextCell();\n }\n\n return {\n x: x,\n y: y\n };\n };\n\n nodes.layoutPositions(this, options, getPos);\n }\n\n return this; // chaining\n };\n\n var defaults$2 = {\n ready: function ready() {},\n // on layoutready\n stop: function stop() {} // on layoutstop\n\n }; // constructor\n // options : object containing layout options\n\n function NullLayout(options) {\n this.options = extend({}, defaults$2, options);\n } // runs the layout\n\n\n NullLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles; // elements to consider in the layout\n\n var layout = this; // cy is automatically populated for us in the constructor\n // (disable eslint for next line as this serves as example layout code to external developers)\n // eslint-disable-next-line no-unused-vars\n\n options.cy;\n layout.emit('layoutstart'); // puts all nodes at (0, 0)\n // n.b. most layouts would use layoutPositions(), instead of positions() and manual events\n\n eles.nodes().positions(function () {\n return {\n x: 0,\n y: 0\n };\n }); // trigger layoutready when each node has had its position set at least once\n\n layout.one('layoutready', options.ready);\n layout.emit('layoutready'); // trigger layoutstop when the layout stops (e.g. finishes)\n\n layout.one('layoutstop', options.stop);\n layout.emit('layoutstop');\n return this; // chaining\n }; // called on continuous layouts to stop them before they finish\n\n\n NullLayout.prototype.stop = function () {\n return this; // chaining\n };\n\n var defaults$1 = {\n positions: undefined,\n // map of (node id) => (position obj); or function(node){ return somPos; }\n zoom: undefined,\n // the zoom level to set (prob want fit = false if set)\n pan: undefined,\n // the pan level to set (prob want fit = false if set)\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // padding on fit\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n\n };\n\n function PresetLayout(options) {\n this.options = extend({}, defaults$1, options);\n }\n\n PresetLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles;\n var nodes = eles.nodes();\n var posIsFn = fn$6(options.positions);\n\n function getPosition(node) {\n if (options.positions == null) {\n return copyPosition(node.position());\n }\n\n if (posIsFn) {\n return options.positions(node);\n }\n\n var pos = options.positions[node._private.data.id];\n\n if (pos == null) {\n return null;\n }\n\n return pos;\n }\n\n nodes.layoutPositions(this, options, function (node, i) {\n var position = getPosition(node);\n\n if (node.locked() || position == null) {\n return false;\n }\n\n return position;\n });\n return this; // chaining\n };\n\n var defaults = {\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // fit padding\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n\n };\n\n function RandomLayout(options) {\n this.options = extend({}, defaults, options);\n }\n\n RandomLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n\n var getPos = function getPos(node, i) {\n return {\n x: bb.x1 + Math.round(Math.random() * bb.w),\n y: bb.y1 + Math.round(Math.random() * bb.h)\n };\n };\n\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n };\n\n var layout = [{\n name: 'breadthfirst',\n impl: BreadthFirstLayout\n }, {\n name: 'circle',\n impl: CircleLayout\n }, {\n name: 'concentric',\n impl: ConcentricLayout\n }, {\n name: 'cose',\n impl: CoseLayout\n }, {\n name: 'grid',\n impl: GridLayout\n }, {\n name: 'null',\n impl: NullLayout\n }, {\n name: 'preset',\n impl: PresetLayout\n }, {\n name: 'random',\n impl: RandomLayout\n }];\n\n function NullRenderer(options) {\n this.options = options;\n this.notifications = 0; // for testing\n }\n\n var noop = function noop() {};\n\n var throwImgErr = function throwImgErr() {\n throw new Error('A headless instance can not render images');\n };\n\n NullRenderer.prototype = {\n recalculateRenderedStyle: noop,\n notify: function notify() {\n this.notifications++;\n },\n init: noop,\n isHeadless: function isHeadless() {\n return true;\n },\n png: throwImgErr,\n jpg: throwImgErr\n };\n\n var BRp$f = {};\n BRp$f.arrowShapeWidth = 0.3;\n\n BRp$f.registerArrowShapes = function () {\n var arrowShapes = this.arrowShapes = {};\n var renderer = this; // Contract for arrow shapes:\n // 0, 0 is arrow tip\n // (0, 1) is direction towards node\n // (1, 0) is right\n //\n // functional api:\n // collide: check x, y in shape\n // roughCollide: called before collide, no false negatives\n // draw: draw\n // spacing: dist(arrowTip, nodeBoundary)\n // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip\n\n var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) {\n var x1 = translation.x - size / 2 - padding;\n var x2 = translation.x + size / 2 + padding;\n var y1 = translation.y - size / 2 - padding;\n var y2 = translation.y + size / 2 + padding;\n var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2;\n return inside;\n };\n\n var transform = function transform(x, y, size, angle, translation) {\n var xRotated = x * Math.cos(angle) - y * Math.sin(angle);\n var yRotated = x * Math.sin(angle) + y * Math.cos(angle);\n var xScaled = xRotated * size;\n var yScaled = yRotated * size;\n var xTranslated = xScaled + translation.x;\n var yTranslated = yScaled + translation.y;\n return {\n x: xTranslated,\n y: yTranslated\n };\n };\n\n var transformPoints = function transformPoints(pts, size, angle, translation) {\n var retPts = [];\n\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push(transform(x, y, size, angle, translation));\n }\n\n return retPts;\n };\n\n var pointsToArr = function pointsToArr(pts) {\n var ret = [];\n\n for (var i = 0; i < pts.length; i++) {\n var p = pts[i];\n ret.push(p.x, p.y);\n }\n\n return ret;\n };\n\n var standardGap = function standardGap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2;\n };\n\n var defineArrowShape = function defineArrowShape(name, defn) {\n if (string(defn)) {\n defn = arrowShapes[defn];\n }\n\n arrowShapes[name] = extend({\n name: name,\n points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3],\n collide: function collide(x, y, size, angle, translation, padding) {\n var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, points);\n return inside;\n },\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation) {\n var points = transformPoints(this.points, size, angle, translation);\n renderer.arrowShapeImpl('polygon')(context, points);\n },\n spacing: function spacing(edge) {\n return 0;\n },\n gap: standardGap\n }, defn);\n };\n\n defineArrowShape('none', {\n collide: falsify,\n roughCollide: falsify,\n draw: noop$1,\n spacing: zeroify,\n gap: zeroify\n });\n defineArrowShape('triangle', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3]\n });\n defineArrowShape('arrow', 'triangle');\n defineArrowShape('triangle-backcurve', {\n points: arrowShapes['triangle'].points,\n controlPoint: [0, -0.15],\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var ptsTrans = transformPoints(this.points, size, angle, translation);\n var ctrlPt = this.controlPoint;\n var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans);\n },\n gap: function gap(edge) {\n return standardGap(edge) * 0.8;\n }\n });\n defineArrowShape('triangle-tee', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var teePts = transformPoints(this.pointsTee, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, teePts);\n }\n });\n defineArrowShape('circle-triangle', {\n radius: 0.15,\n pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n return pointInsidePolygonPoints(x, y, triPts) || circleInside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.pointsTr, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('triangle-cross', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n baseCrossLinePts: [-0.15, -0.4, // first half of the rectangle\n -0.15, -0.4, 0.15, -0.4, // second half of the rectangle\n 0.15, -0.4],\n crossLinePts: function crossLinePts(size, edgeWidth) {\n // shift points so that the distance between the cross points matches edge width\n var p = this.baseCrossLinePts.slice();\n var shiftFactor = edgeWidth / size;\n var y0 = 3;\n var y1 = 5;\n p[y0] = p[y0] - shiftFactor;\n p[y1] = p[y1] - shiftFactor;\n return p;\n },\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts);\n }\n });\n defineArrowShape('vee', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15],\n gap: function gap(edge) {\n return standardGap(edge) * 0.525;\n }\n });\n defineArrowShape('circle', {\n radius: 0.15,\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('tee', {\n points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0],\n spacing: function spacing(edge) {\n return 1;\n },\n gap: function gap(edge) {\n return 1;\n }\n });\n defineArrowShape('square', {\n points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3]\n });\n defineArrowShape('diamond', {\n points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0],\n gap: function gap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n defineArrowShape('chevron', {\n points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15],\n gap: function gap(edge) {\n return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n };\n\n var BRp$e = {}; // Project mouse\n\n BRp$e.projectIntoViewport = function (clientX, clientY) {\n var cy = this.cy;\n var offsets = this.findContainerClientCoords();\n var offsetLeft = offsets[0];\n var offsetTop = offsets[1];\n var scale = offsets[4];\n var pan = cy.pan();\n var zoom = cy.zoom();\n var x = ((clientX - offsetLeft) / scale - pan.x) / zoom;\n var y = ((clientY - offsetTop) / scale - pan.y) / zoom;\n return [x, y];\n };\n\n BRp$e.findContainerClientCoords = function () {\n if (this.containerBB) {\n return this.containerBB;\n }\n\n var container = this.container;\n var rect = container.getBoundingClientRect();\n var style = this.cy.window().getComputedStyle(container);\n\n var styleValue = function styleValue(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n\n var padding = {\n left: styleValue('padding-left'),\n right: styleValue('padding-right'),\n top: styleValue('padding-top'),\n bottom: styleValue('padding-bottom')\n };\n var border = {\n left: styleValue('border-left-width'),\n right: styleValue('border-right-width'),\n top: styleValue('border-top-width'),\n bottom: styleValue('border-bottom-width')\n };\n var clientWidth = container.clientWidth;\n var clientHeight = container.clientHeight;\n var paddingHor = padding.left + padding.right;\n var paddingVer = padding.top + padding.bottom;\n var borderHor = border.left + border.right;\n var scale = rect.width / (clientWidth + borderHor);\n var unscaledW = clientWidth - paddingHor;\n var unscaledH = clientHeight - paddingVer;\n var left = rect.left + padding.left + border.left;\n var top = rect.top + padding.top + border.top;\n return this.containerBB = [left, top, unscaledW, unscaledH, scale];\n };\n\n BRp$e.invalidateContainerClientCoordsCache = function () {\n this.containerBB = null;\n };\n\n BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) {\n return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0];\n };\n\n BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) {\n var self = this;\n var r = this;\n var eles = r.getCachedZSortedEles();\n var near = []; // 1 node max, 1 edge max\n\n var zoom = r.cy.zoom();\n var hasCompounds = r.cy.hasCompoundNodes();\n var edgeThreshold = (isTouch ? 24 : 8) / zoom;\n var nodeThreshold = (isTouch ? 8 : 2) / zoom;\n var labelThreshold = (isTouch ? 8 : 2) / zoom;\n var minSqDist = Infinity;\n var nearEdge;\n var nearNode;\n\n if (interactiveElementsOnly) {\n eles = eles.interactive;\n }\n\n function addEle(ele, sqDist) {\n if (ele.isNode()) {\n if (nearNode) {\n return; // can't replace node\n } else {\n nearNode = ele;\n near.push(ele);\n }\n }\n\n if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) {\n if (nearEdge) {\n // then replace existing edge\n // can replace only if same z-index\n if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) {\n for (var i = 0; i < near.length; i++) {\n if (near[i].isEdge()) {\n near[i] = ele;\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n break;\n }\n }\n }\n } else {\n near.push(ele);\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n }\n }\n }\n\n function checkNode(node) {\n var width = node.outerWidth() + 2 * nodeThreshold;\n var height = node.outerHeight() + 2 * nodeThreshold;\n var hw = width / 2;\n var hh = height / 2;\n var pos = node.position();\n\n if (pos.x - hw <= x && x <= pos.x + hw // bb check x\n && pos.y - hh <= y && y <= pos.y + hh // bb check y\n ) {\n var shape = r.nodeShapes[self.getNodeShape(node)];\n\n if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) {\n addEle(node, 0);\n return true;\n }\n }\n }\n\n function checkEdge(edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var styleWidth = edge.pstyle('width').pfValue;\n var scale = edge.pstyle('arrow-scale').value;\n var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre\n\n var widthSq = width * width;\n var width2 = width * 2;\n var src = _p.source;\n var tgt = _p.target;\n var sqDist;\n\n if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') {\n var pts = rs.allpts;\n\n for (var i = 0; i + 3 < pts.length; i += 2) {\n if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n var pts = rs.allpts;\n\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n } // if we're close to the edge but didn't hit it, maybe we hit its arrows\n\n\n var src = src || _p.source;\n var tgt = tgt || _p.target;\n var arSize = self.getArrowWidth(styleWidth, scale);\n var arrows = [{\n name: 'source',\n x: rs.arrowStartX,\n y: rs.arrowStartY,\n angle: rs.srcArrowAngle\n }, {\n name: 'target',\n x: rs.arrowEndX,\n y: rs.arrowEndY,\n angle: rs.tgtArrowAngle\n }, {\n name: 'mid-source',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midsrcArrowAngle\n }, {\n name: 'mid-target',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midtgtArrowAngle\n }];\n\n for (var i = 0; i < arrows.length; i++) {\n var ar = arrows[i];\n var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value];\n var edgeWidth = edge.pstyle('width').pfValue;\n\n if (shape.roughCollide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold)) {\n addEle(edge);\n return true;\n }\n } // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence)\n\n\n if (hasCompounds && near.length > 0) {\n checkNode(src);\n checkNode(tgt);\n }\n }\n\n function preprop(obj, name, pre) {\n return getPrefixedProperty(obj, name, pre);\n }\n\n function checkLabel(ele, prefix) {\n var _p = ele._private;\n var th = labelThreshold;\n var prefixDash;\n\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n\n ele.boundingBox();\n var bb = _p.labelBounds[prefix || 'main'];\n var text = ele.pstyle(prefixDash + 'label').value;\n var eventsEnabled = ele.pstyle('text-events').strValue === 'yes';\n\n if (!eventsEnabled || !text) {\n return;\n }\n\n var lx = preprop(_p.rscratch, 'labelX', prefix);\n var ly = preprop(_p.rscratch, 'labelY', prefix);\n var theta = preprop(_p.rscratch, 'labelAngle', prefix);\n var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin\n\n var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly)\n\n var ly1 = bb.y1 - th - oy;\n var ly2 = bb.y2 + th - oy;\n\n if (theta) {\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n\n var rotate = function rotate(x, y) {\n x = x - lx;\n y = y - ly;\n return {\n x: x * cos - y * sin + lx,\n y: x * sin + y * cos + ly\n };\n };\n\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n var points = [// with the margin added after the rotation is applied\n px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy];\n\n if (pointInsidePolygonPoints(x, y, points)) {\n addEle(ele);\n return true;\n }\n } else {\n // do a cheaper bb check\n if (inBoundingBox(bb, x, y)) {\n addEle(ele);\n return true;\n }\n }\n }\n\n for (var i = eles.length - 1; i >= 0; i--) {\n // reverse order for precedence\n var ele = eles[i];\n\n if (ele.isNode()) {\n checkNode(ele) || checkLabel(ele);\n } else {\n // then edge\n checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target');\n }\n }\n\n return near;\n }; // 'Give me everything from this box'\n\n\n BRp$e.getAllInBox = function (x1, y1, x2, y2) {\n var eles = this.getCachedZSortedEles().interactive;\n var box = [];\n var x1c = Math.min(x1, x2);\n var x2c = Math.max(x1, x2);\n var y1c = Math.min(y1, y2);\n var y2c = Math.max(y1, y2);\n x1 = x1c;\n x2 = x2c;\n y1 = y1c;\n y2 = y2c;\n var boxBb = makeBoundingBox({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n\n if (ele.isNode()) {\n var node = ele;\n var nodeBb = node.boundingBox({\n includeNodes: true,\n includeEdges: false,\n includeLabels: false\n });\n\n if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) {\n box.push(node);\n }\n } else {\n var edge = ele;\n var _p = edge._private;\n var rs = _p.rscratch;\n\n if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) {\n continue;\n }\n\n if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) {\n continue;\n }\n\n if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') {\n var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;\n var allInside = true;\n\n for (var i = 0; i < pts.length; i++) {\n if (!pointInBoundingBox(boxBb, pts[i])) {\n allInside = false;\n break;\n }\n }\n\n if (allInside) {\n box.push(edge);\n }\n } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') {\n box.push(edge);\n }\n }\n }\n\n return box;\n };\n\n var BRp$d = {};\n\n BRp$d.calculateArrowAngles = function (edge) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n var isBezier = rs.edgeType === 'bezier';\n var isMultibezier = rs.edgeType === 'multibezier';\n var isSegments = rs.edgeType === 'segments';\n var isCompound = rs.edgeType === 'compound';\n var isSelf = rs.edgeType === 'self'; // Displacement gives direction for arrowhead orientation\n\n var dispX, dispY;\n var startX, startY, endX, endY, midX, midY;\n\n if (isHaystack) {\n startX = rs.haystackPts[0];\n startY = rs.haystackPts[1];\n endX = rs.haystackPts[2];\n endY = rs.haystackPts[3];\n } else {\n startX = rs.arrowStartX;\n startY = rs.arrowStartY;\n endX = rs.arrowEndX;\n endY = rs.arrowEndY;\n }\n\n midX = rs.midX;\n midY = rs.midY; // source\n //\n\n if (isSegments) {\n dispX = startX - rs.segpts[0];\n dispY = startY - rs.segpts[1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1);\n var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1);\n dispX = startX - bX;\n dispY = startY - bY;\n } else {\n dispX = startX - midX;\n dispY = startY - midY;\n }\n\n rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target\n //\n\n var midX = rs.midX;\n var midY = rs.midY;\n\n if (isHaystack) {\n midX = (startX + endX) / 2;\n midY = (startY + endY) / 2;\n }\n\n dispX = endX - startX;\n dispY = endY - startY;\n\n if (isSegments) {\n var pts = rs.allpts;\n\n if (pts.length / 2 % 2 === 0) {\n var i2 = pts.length / 2;\n var i1 = i2 - 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n } else {\n var i2 = pts.length / 2 - 1;\n var i1 = i2 - 2;\n var i3 = i2 + 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n }\n } else if (isMultibezier || isCompound || isSelf) {\n var pts = rs.allpts;\n var cpts = rs.ctrlpts;\n var bp0x, bp0y;\n var bp1x, bp1y;\n\n if (cpts.length / 2 % 2 === 0) {\n var p0 = pts.length / 2 - 1; // startpt\n\n var ic = p0 + 2;\n var p1 = ic + 2;\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001);\n } else {\n var ic = pts.length / 2 - 1; // ctrpt\n\n var p0 = ic - 2; // startpt\n\n var p1 = ic + 2; // endpt\n\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5);\n }\n\n dispX = bp1x - bp0x;\n dispY = bp1y - bp0y;\n }\n\n rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY);\n rs.midDispX = dispX;\n rs.midDispY = dispY; // mid source\n //\n\n dispX *= -1;\n dispY *= -1;\n\n if (isSegments) {\n var pts = rs.allpts;\n\n if (pts.length / 2 % 2 === 0) ; else {\n var i2 = pts.length / 2 - 1;\n var i3 = i2 + 2;\n dispX = -(pts[i3] - pts[i2]);\n dispY = -(pts[i3 + 1] - pts[i2 + 1]);\n }\n }\n\n rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target\n //\n\n if (isSegments) {\n dispX = endX - rs.segpts[rs.segpts.length - 2];\n dispY = endY - rs.segpts[rs.segpts.length - 1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var l = pts.length;\n var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9);\n var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9);\n dispX = endX - bX;\n dispY = endY - bY;\n } else {\n dispX = endX - midX;\n dispY = endY - midY;\n }\n\n rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY);\n };\n\n BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) {\n var cache = this.arrowWidthCache = this.arrowWidthCache || {};\n var cachedVal = cache[edgeWidth + ', ' + scale];\n\n if (cachedVal) {\n return cachedVal;\n }\n\n cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale;\n cache[edgeWidth + ', ' + scale] = cachedVal;\n return cachedVal;\n };\n\n var BRp$c = {};\n\n BRp$c.findHaystackPoints = function (edges) {\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var rs = _p.rscratch;\n\n if (!rs.haystack) {\n var angle = Math.random() * 2 * Math.PI;\n rs.source = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n angle = Math.random() * 2 * Math.PI;\n rs.target = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n }\n\n var src = _p.source;\n var tgt = _p.target;\n var srcPos = src.position();\n var tgtPos = tgt.position();\n var srcW = src.width();\n var tgtW = tgt.width();\n var srcH = src.height();\n var tgtH = tgt.height();\n var radius = edge.pstyle('haystack-radius').value;\n var halfRadius = radius / 2; // b/c have to half width/height\n\n rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y];\n rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2;\n rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; // always override as haystack in case set to different type previously\n\n rs.edgeType = 'haystack';\n rs.haystack = true;\n this.storeEdgeProjections(edge);\n this.calculateArrowAngles(edge);\n this.recalculateEdgeLabelProjections(edge);\n this.calculateLabelAngles(edge);\n }\n };\n\n BRp$c.findSegmentsPoints = function (edge, pairInfo) {\n // Segments (multiple straight lines)\n var rs = edge._private.rscratch;\n var posPts = pairInfo.posPts,\n intersectionPts = pairInfo.intersectionPts,\n vectorNormInverse = pairInfo.vectorNormInverse;\n var edgeDistances = edge.pstyle('edge-distances').value;\n var segmentWs = edge.pstyle('segment-weights');\n var segmentDs = edge.pstyle('segment-distances');\n var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length);\n rs.edgeType = 'segments';\n rs.segpts = [];\n\n for (var s = 0; s < segmentsN; s++) {\n var w = segmentWs.pfValue[s];\n var d = segmentDs.pfValue[s];\n var w1 = 1 - w;\n var w2 = w;\n var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d);\n }\n };\n\n BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Self-edge\n var rs = edge._private.rscratch;\n var dirCounts = pairInfo.dirCounts,\n srcPos = pairInfo.srcPos;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var loopDir = edge.pstyle('loop-direction').pfValue;\n var loopSwp = edge.pstyle('loop-sweep').pfValue;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n rs.edgeType = 'self';\n var j = i;\n var loopDist = stepSize;\n\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n\n var loopAngle = loopDir - Math.PI / 2;\n var outAngle = loopAngle - loopSwp / 2;\n var inAngle = loopAngle + loopSwp / 2; // increase by step size for overlapping loops, keyed on direction and sweep values\n\n var dc = String(loopDir + '_' + loopSwp);\n j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc];\n rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)];\n };\n\n BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Compound edge\n var rs = edge._private.rscratch;\n rs.edgeType = 'compound';\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var j = i;\n var loopDist = stepSize;\n\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n\n var loopW = 50;\n var loopaPos = {\n x: srcPos.x - srcW / 2,\n y: srcPos.y - srcH / 2\n };\n var loopbPos = {\n x: tgtPos.x - tgtW / 2,\n y: tgtPos.y - tgtH / 2\n };\n var loopPos = {\n x: Math.min(loopaPos.x, loopbPos.x),\n y: Math.min(loopaPos.y, loopbPos.y)\n }; // avoids cases with impossible beziers\n\n var minCompoundStretch = 0.5;\n var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01));\n var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01));\n rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y];\n };\n\n BRp$c.findStraightEdgePoints = function (edge) {\n // Straight edge within bundle\n edge._private.rscratch.edgeType = 'straight';\n };\n\n BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) {\n var rs = edge._private.rscratch;\n var vectorNormInverse = pairInfo.vectorNormInverse,\n posPts = pairInfo.posPts,\n intersectionPts = pairInfo.intersectionPts;\n var edgeDistances = edge.pstyle('edge-distances').value;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptWs = edge.pstyle('control-point-weights');\n var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1;\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var ctrlptWeight = ctrlptWs.value[0]; // (Multi)bezier\n\n var multi = edgeIsUnbundled;\n rs.edgeType = multi ? 'multibezier' : 'bezier';\n rs.ctrlpts = [];\n\n for (var b = 0; b < bezierN; b++) {\n var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1);\n var manctrlptDist = void 0;\n var sign = signum(normctrlptDist);\n\n if (multi) {\n ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size\n\n ctrlptWeight = ctrlptWs.value[b];\n }\n\n if (edgeIsUnbundled) {\n // multi or single unbundled\n manctrlptDist = ctrlptDist;\n } else {\n manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined;\n }\n\n var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist;\n var w1 = 1 - ctrlptWeight;\n var w2 = ctrlptWeight;\n var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint);\n }\n };\n\n BRp$c.findTaxiPoints = function (edge, pairInfo) {\n // Taxicab geometry with two turns maximum\n var rs = edge._private.rscratch;\n rs.edgeType = 'segments';\n var VERTICAL = 'vertical';\n var HORIZONTAL = 'horizontal';\n var LEFTWARD = 'leftward';\n var RIGHTWARD = 'rightward';\n var DOWNWARD = 'downward';\n var UPWARD = 'upward';\n var AUTO = 'auto';\n var posPts = pairInfo.posPts,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var edgeDistances = edge.pstyle('edge-distances').value;\n var dIncludesNodeBody = edgeDistances !== 'node-position';\n var taxiDir = edge.pstyle('taxi-direction').value;\n var rawTaxiDir = taxiDir; // unprocessed value\n\n var taxiTurn = edge.pstyle('taxi-turn');\n var turnIsPercent = taxiTurn.units === '%';\n var taxiTurnPfVal = taxiTurn.pfValue;\n var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side\n\n var minD = edge.pstyle('taxi-turn-min-distance').pfValue;\n var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0;\n var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0;\n var pdx = posPts.x2 - posPts.x1;\n var pdy = posPts.y2 - posPts.y1; // take away the effective w/h from the magnitude of the delta value\n\n var subDWH = function subDWH(dxy, dwh) {\n if (dxy > 0) {\n return Math.max(dxy - dwh, 0);\n } else {\n return Math.min(dxy + dwh, 0);\n }\n };\n\n var dx = subDWH(pdx, dw);\n var dy = subDWH(pdy, dh);\n var isExplicitDir = false;\n\n if (rawTaxiDir === AUTO) {\n taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL;\n } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) {\n taxiDir = VERTICAL;\n isExplicitDir = true;\n } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) {\n taxiDir = HORIZONTAL;\n isExplicitDir = true;\n }\n\n var isVert = taxiDir === VERTICAL;\n var l = isVert ? dy : dx;\n var pl = isVert ? pdy : pdx;\n var sgnL = signum(pl);\n var forcedDir = false;\n\n if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction\n && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) {\n sgnL *= -1;\n l = sgnL * Math.abs(l);\n forcedDir = true;\n }\n\n var d;\n\n if (turnIsPercent) {\n var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal;\n d = p * l;\n } else {\n var k = taxiTurnPfVal < 0 ? l : 0;\n d = k + taxiTurnPfVal * sgnL;\n }\n\n var getIsTooClose = function getIsTooClose(d) {\n return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l);\n };\n\n var isTooCloseSrc = getIsTooClose(d);\n var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d));\n var isTooClose = isTooCloseSrc || isTooCloseTgt;\n\n if (isTooClose && !forcedDir) {\n // non-ideal routing\n if (isVert) {\n // vertical fallbacks\n var lShapeInsideSrc = Math.abs(pl) <= srcH / 2;\n var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2;\n\n if (lShapeInsideSrc) {\n // horizontal Z-shape (direction not respected)\n var x = (posPts.x1 + posPts.x2) / 2;\n var y1 = posPts.y1,\n y2 = posPts.y2;\n rs.segpts = [x, y1, x, y2];\n } else if (lShapeInsideTgt) {\n // vertical Z-shape (distance not respected)\n var y = (posPts.y1 + posPts.y2) / 2;\n var x1 = posPts.x1,\n x2 = posPts.x2;\n rs.segpts = [x1, y, x2, y];\n } else {\n // L-shape fallback (turn distance not respected, but works well with tree siblings)\n rs.segpts = [posPts.x1, posPts.y2];\n }\n } else {\n // horizontal fallbacks\n var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2;\n\n var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2;\n\n if (_lShapeInsideSrc) {\n // vertical Z-shape (direction not respected)\n var _y = (posPts.y1 + posPts.y2) / 2;\n\n var _x = posPts.x1,\n _x2 = posPts.x2;\n rs.segpts = [_x, _y, _x2, _y];\n } else if (_lShapeInsideTgt) {\n // horizontal Z-shape (turn distance not respected)\n var _x3 = (posPts.x1 + posPts.x2) / 2;\n\n var _y2 = posPts.y1,\n _y3 = posPts.y2;\n rs.segpts = [_x3, _y2, _x3, _y3];\n } else {\n // L-shape (turn distance not respected, but works well for tree siblings)\n rs.segpts = [posPts.x2, posPts.y1];\n }\n }\n } else {\n // ideal routing\n if (isVert) {\n var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0);\n\n var _x4 = posPts.x1,\n _x5 = posPts.x2;\n rs.segpts = [_x4, _y4, _x5, _y4];\n } else {\n // horizontal\n var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0);\n\n var _y5 = posPts.y1,\n _y6 = posPts.y2;\n rs.segpts = [_x6, _y5, _x6, _y6];\n }\n }\n };\n\n BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) {\n var rs = edge._private.rscratch; // can only correct beziers for now...\n\n if (rs.edgeType === 'bezier') {\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH,\n srcShape = pairInfo.srcShape,\n tgtShape = pairInfo.tgtShape;\n var badStart = !number$1(rs.startX) || !number$1(rs.startY);\n var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY);\n var badEnd = !number$1(rs.endX) || !number$1(rs.endY);\n var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY);\n var minCpADistFactor = 3;\n var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n var minCpADist = minCpADistFactor * arrowW;\n var startACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.startX,\n y: rs.startY\n });\n var closeStartACp = startACpDist < minCpADist;\n var endACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.endX,\n y: rs.endY\n });\n var closeEndACp = endACpDist < minCpADist;\n var overlapping = false;\n\n if (badStart || badAStart || closeStartACp) {\n overlapping = true; // project control point along line from src centre to outside the src shape\n // (otherwise intersection will yield nothing)\n\n var cpD = {\n // delta\n x: rs.ctrlpts[0] - srcPos.x,\n y: rs.ctrlpts[1] - srcPos.y\n };\n var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line\n\n var cpM = {\n // normalised delta\n x: cpD.x / cpL,\n y: cpD.y / cpL\n };\n var radius = Math.max(srcW, srcH);\n var cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + cpM.x * 2 * radius,\n y: rs.ctrlpts[1] + cpM.y * 2 * radius\n };\n var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0);\n\n if (closeStartACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist);\n } else {\n rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist;\n rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist;\n }\n }\n\n if (badEnd || badAEnd || closeEndACp) {\n overlapping = true; // project control point along line from tgt centre to outside the tgt shape\n // (otherwise intersection will yield nothing)\n\n var _cpD = {\n // delta\n x: rs.ctrlpts[0] - tgtPos.x,\n y: rs.ctrlpts[1] - tgtPos.y\n };\n\n var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line\n\n\n var _cpM = {\n // normalised delta\n x: _cpD.x / _cpL,\n y: _cpD.y / _cpL\n };\n\n var _radius = Math.max(srcW, srcH);\n\n var _cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + _cpM.x * 2 * _radius,\n y: rs.ctrlpts[1] + _cpM.y * 2 * _radius\n };\n var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0);\n\n if (closeEndACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist);\n } else {\n rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist;\n rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist;\n }\n }\n\n if (overlapping) {\n // recalc endpts\n this.findEndpoints(edge);\n }\n }\n };\n\n BRp$c.storeAllpts = function (edge) {\n var rs = edge._private.rscratch;\n\n if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n\n for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) {\n // ctrl pt itself\n rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); // the midpt between ctrlpts as intermediate destination pts\n\n if (b + 3 < rs.ctrlpts.length) {\n rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2);\n }\n }\n\n rs.allpts.push(rs.endX, rs.endY);\n var m, mt;\n\n if (rs.ctrlpts.length / 2 % 2 === 0) {\n m = rs.allpts.length / 2 - 1;\n rs.midX = rs.allpts[m];\n rs.midY = rs.allpts[m + 1];\n } else {\n m = rs.allpts.length / 2 - 3;\n mt = 0.5;\n rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt);\n rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt);\n }\n } else if (rs.edgeType === 'straight') {\n // need to calc these after endpts\n rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; // default midpt for labels etc\n\n rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4;\n rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4;\n } else if (rs.edgeType === 'segments') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n rs.allpts.push.apply(rs.allpts, rs.segpts);\n rs.allpts.push(rs.endX, rs.endY);\n\n if (rs.segpts.length % 4 === 0) {\n var i2 = rs.segpts.length / 2;\n var i1 = i2 - 2;\n rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2;\n rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2;\n } else {\n var _i = rs.segpts.length / 2 - 1;\n\n rs.midX = rs.segpts[_i];\n rs.midY = rs.segpts[_i + 1];\n }\n }\n };\n\n BRp$c.checkForInvalidEdgeWarning = function (edge) {\n var rs = edge[0]._private.rscratch;\n\n if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) {\n rs.loggedErr = false;\n } else {\n if (!rs.loggedErr) {\n rs.loggedErr = true;\n warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.');\n }\n }\n };\n\n BRp$c.findEdgeControlPoints = function (edges) {\n var _this = this;\n\n if (!edges || edges.length === 0) {\n return;\n }\n\n var r = this;\n var cy = r.cy;\n var hasCompounds = cy.hasCompoundNodes();\n var hashTable = {\n map: new Map$2(),\n get: function get(pairId) {\n var map2 = this.map.get(pairId[0]);\n\n if (map2 != null) {\n return map2.get(pairId[1]);\n } else {\n return null;\n }\n },\n set: function set(pairId, val) {\n var map2 = this.map.get(pairId[0]);\n\n if (map2 == null) {\n map2 = new Map$2();\n this.map.set(pairId[0], map2);\n }\n\n map2.set(pairId[1], val);\n }\n };\n var pairIds = [];\n var haystackEdges = []; // create a table of edge (src, tgt) => list of edges between them\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var curveStyle = edge.pstyle('curve-style').value; // ignore edges who are not to be displayed\n // they shouldn't take up space\n\n if (edge.removed() || !edge.takesUpSpace()) {\n continue;\n }\n\n if (curveStyle === 'haystack') {\n haystackEdges.push(edge);\n continue;\n }\n\n var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi';\n var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier';\n var src = _p.source;\n var tgt = _p.target;\n var srcIndex = src.poolIndex();\n var tgtIndex = tgt.poolIndex();\n var pairId = [srcIndex, tgtIndex].sort();\n var tableEntry = hashTable.get(pairId);\n\n if (tableEntry == null) {\n tableEntry = {\n eles: []\n };\n hashTable.set(pairId, tableEntry);\n pairIds.push(pairId);\n }\n\n tableEntry.eles.push(edge);\n\n if (edgeIsUnbundled) {\n tableEntry.hasUnbundled = true;\n }\n\n if (edgeIsBezier) {\n tableEntry.hasBezier = true;\n }\n } // for each pair (src, tgt), create the ctrl pts\n // Nested for loop is OK; total number of iterations for both loops = edgeCount\n\n\n var _loop = function _loop(p) {\n var pairId = pairIds[p];\n var pairInfo = hashTable.get(pairId);\n var swappedpairInfo = void 0;\n\n if (!pairInfo.hasUnbundled) {\n var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) {\n return e.isBundledBezier();\n });\n clearArray(pairInfo.eles);\n pllEdges.forEach(function (edge) {\n return pairInfo.eles.push(edge);\n }); // for each pair id, the edges should be sorted by index\n\n pairInfo.eles.sort(function (edge1, edge2) {\n return edge1.poolIndex() - edge2.poolIndex();\n });\n }\n\n var firstEdge = pairInfo.eles[0];\n var src = firstEdge.source();\n var tgt = firstEdge.target(); // make sure src/tgt distinction is consistent w.r.t. pairId\n\n if (src.poolIndex() > tgt.poolIndex()) {\n var temp = src;\n src = tgt;\n tgt = temp;\n }\n\n var srcPos = pairInfo.srcPos = src.position();\n var tgtPos = pairInfo.tgtPos = tgt.position();\n var srcW = pairInfo.srcW = src.outerWidth();\n var srcH = pairInfo.srcH = src.outerHeight();\n var tgtW = pairInfo.tgtW = tgt.outerWidth();\n var tgtH = pairInfo.tgtH = tgt.outerHeight();\n\n var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)];\n\n var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)];\n\n pairInfo.dirCounts = {\n 'north': 0,\n 'west': 0,\n 'south': 0,\n 'east': 0,\n 'northwest': 0,\n 'southwest': 0,\n 'northeast': 0,\n 'southeast': 0\n };\n\n for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) {\n var _edge = pairInfo.eles[_i2];\n var rs = _edge[0]._private.rscratch;\n\n var _curveStyle = _edge.pstyle('curve-style').value;\n\n var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order\n\n\n var edgeIsSwapped = !src.same(_edge.source());\n\n if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) {\n pairInfo.calculatedIntersection = true; // pt outside src shape to calc distance/displacement from src to tgt\n\n var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0);\n var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt\n\n var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0);\n var tgtIntn = pairInfo.tgtIntn = tgtOutside;\n var intersectionPts = pairInfo.intersectionPts = {\n x1: srcOutside[0],\n x2: tgtOutside[0],\n y1: srcOutside[1],\n y2: tgtOutside[1]\n };\n var posPts = pairInfo.posPts = {\n x1: srcPos.x,\n x2: tgtPos.x,\n y1: srcPos.y,\n y2: tgtPos.y\n };\n var dy = tgtOutside[1] - srcOutside[1];\n var dx = tgtOutside[0] - srcOutside[0];\n var l = Math.sqrt(dx * dx + dy * dy);\n var vector = pairInfo.vector = {\n x: dx,\n y: dy\n };\n var vectorNorm = pairInfo.vectorNorm = {\n x: vector.x / l,\n y: vector.y / l\n };\n var vectorNormInverse = {\n x: -vectorNorm.y,\n y: vectorNorm.x\n }; // if node shapes overlap, then no ctrl pts to draw\n\n pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y);\n pairInfo.vectorNormInverse = vectorNormInverse;\n swappedpairInfo = {\n nodesOverlap: pairInfo.nodesOverlap,\n dirCounts: pairInfo.dirCounts,\n calculatedIntersection: true,\n hasBezier: pairInfo.hasBezier,\n hasUnbundled: pairInfo.hasUnbundled,\n eles: pairInfo.eles,\n srcPos: tgtPos,\n tgtPos: srcPos,\n srcW: tgtW,\n srcH: tgtH,\n tgtW: srcW,\n tgtH: srcH,\n srcIntn: tgtIntn,\n tgtIntn: srcIntn,\n srcShape: tgtShape,\n tgtShape: srcShape,\n posPts: {\n x1: posPts.x2,\n y1: posPts.y2,\n x2: posPts.x1,\n y2: posPts.y1\n },\n intersectionPts: {\n x1: intersectionPts.x2,\n y1: intersectionPts.y2,\n x2: intersectionPts.x1,\n y2: intersectionPts.y1\n },\n vector: {\n x: -vector.x,\n y: -vector.y\n },\n vectorNorm: {\n x: -vectorNorm.x,\n y: -vectorNorm.y\n },\n vectorNormInverse: {\n x: -vectorNormInverse.x,\n y: -vectorNormInverse.y\n }\n };\n }\n\n var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo;\n rs.nodesOverlap = passedPairInfo.nodesOverlap;\n rs.srcIntn = passedPairInfo.srcIntn;\n rs.tgtIntn = passedPairInfo.tgtIntn;\n\n if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) {\n _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (src === tgt) {\n _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (_curveStyle === 'segments') {\n _this.findSegmentsPoints(_edge, passedPairInfo);\n } else if (_curveStyle === 'taxi') {\n _this.findTaxiPoints(_edge, passedPairInfo);\n } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) {\n _this.findStraightEdgePoints(_edge);\n } else {\n _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped);\n }\n\n _this.findEndpoints(_edge);\n\n _this.tryToCorrectInvalidPoints(_edge, passedPairInfo);\n\n _this.checkForInvalidEdgeWarning(_edge);\n\n _this.storeAllpts(_edge);\n\n _this.storeEdgeProjections(_edge);\n\n _this.calculateArrowAngles(_edge);\n\n _this.recalculateEdgeLabelProjections(_edge);\n\n _this.calculateLabelAngles(_edge);\n } // for pair edges\n\n };\n\n for (var p = 0; p < pairIds.length; p++) {\n _loop(p);\n } // for pair ids\n // haystacks avoid the expense of pairInfo stuff (intersections etc.)\n\n\n this.findHaystackPoints(haystackEdges);\n };\n\n function getPts(pts) {\n var retPts = [];\n\n if (pts == null) {\n return;\n }\n\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push({\n x: x,\n y: y\n });\n }\n\n return retPts;\n }\n\n BRp$c.getSegmentPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n var type = rs.edgeType;\n\n if (type === 'segments') {\n this.recalculateRenderedStyle(edge);\n return getPts(rs.segpts);\n }\n };\n\n BRp$c.getControlPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n var type = rs.edgeType;\n\n if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') {\n this.recalculateRenderedStyle(edge);\n return getPts(rs.ctrlpts);\n }\n };\n\n BRp$c.getEdgeMidpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n return {\n x: rs.midX,\n y: rs.midY\n };\n };\n\n var BRp$b = {};\n\n BRp$b.manualEndptToPx = function (node, prop) {\n var r = this;\n var npos = node.position();\n var w = node.outerWidth();\n var h = node.outerHeight();\n\n if (prop.value.length === 2) {\n var p = [prop.pfValue[0], prop.pfValue[1]];\n\n if (prop.units[0] === '%') {\n p[0] = p[0] * w;\n }\n\n if (prop.units[1] === '%') {\n p[1] = p[1] * h;\n }\n\n p[0] += npos.x;\n p[1] += npos.y;\n return p;\n } else {\n var angle = prop.pfValue[0];\n angle = -Math.PI / 2 + angle; // start at 12 o'clock\n\n var l = 2 * Math.max(w, h);\n var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l];\n return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0);\n }\n };\n\n BRp$b.findEndpoints = function (edge) {\n var r = this;\n var intersect;\n var source = edge.source()[0];\n var target = edge.target()[0];\n var srcPos = source.position();\n var tgtPos = target.position();\n var tgtArShape = edge.pstyle('target-arrow-shape').value;\n var srcArShape = edge.pstyle('source-arrow-shape').value;\n var tgtDist = edge.pstyle('target-distance-from-node').pfValue;\n var srcDist = edge.pstyle('source-distance-from-node').pfValue;\n var curveStyle = edge.pstyle('curve-style').value;\n var rs = edge._private.rscratch;\n var et = rs.edgeType;\n var taxi = curveStyle === 'taxi';\n var self = et === 'self' || et === 'compound';\n var bezier = et === 'bezier' || et === 'multibezier' || self;\n var multi = et !== 'bezier';\n var lines = et === 'straight' || et === 'segments';\n var segments = et === 'segments';\n var hasEndpts = bezier || multi || lines;\n var overrideEndpts = self || taxi;\n var srcManEndpt = edge.pstyle('source-endpoint');\n var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value;\n var tgtManEndpt = edge.pstyle('target-endpoint');\n var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value;\n rs.srcManEndpt = srcManEndpt;\n rs.tgtManEndpt = tgtManEndpt;\n var p1; // last known point of edge on target side\n\n var p2; // last known point of edge on source side\n\n var p1_i; // point to intersect with target shape\n\n var p2_i; // point to intersect with source shape\n\n if (bezier) {\n var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]];\n var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart;\n p1 = cpEnd;\n p2 = cpStart;\n } else if (lines) {\n var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2);\n var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2);\n p1 = tgtArrowFromPt;\n p2 = srcArrowFromPt;\n }\n\n if (tgtManEndptVal === 'inside-to-node') {\n intersect = [tgtPos.x, tgtPos.y];\n } else if (tgtManEndpt.units) {\n intersect = this.manualEndptToPx(target, tgtManEndpt);\n } else if (tgtManEndptVal === 'outside-to-line') {\n intersect = rs.tgtIntn; // use cached value from ctrlpt calc\n } else {\n if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') {\n p1_i = p1;\n } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') {\n p1_i = [srcPos.x, srcPos.y];\n }\n\n intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0);\n\n if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') {\n var trs = target._private.rscratch;\n var lw = trs.labelWidth;\n var lh = trs.labelHeight;\n var lx = trs.labelX;\n var ly = trs.labelY;\n var lw2 = lw / 2;\n var lh2 = lh / 2;\n var va = target.pstyle('text-valign').value;\n\n if (va === 'top') {\n ly -= lh2;\n } else if (va === 'bottom') {\n ly += lh2;\n }\n\n var ha = target.pstyle('text-halign').value;\n\n if (ha === 'left') {\n lx -= lw2;\n } else if (ha === 'right') {\n lx += lw2;\n }\n\n var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y);\n\n if (labelIntersect.length > 0) {\n var refPt = srcPos;\n var intSqdist = sqdist(refPt, array2point(intersect));\n var labIntSqdist = sqdist(refPt, array2point(labelIntersect));\n var minSqDist = intSqdist;\n\n if (labIntSqdist < intSqdist) {\n intersect = labelIntersect;\n minSqDist = labIntSqdist;\n }\n\n if (labelIntersect.length > 2) {\n var labInt2SqDist = sqdist(refPt, {\n x: labelIntersect[2],\n y: labelIntersect[3]\n });\n\n if (labInt2SqDist < minSqDist) {\n intersect = [labelIntersect[2], labelIntersect[3]];\n }\n }\n }\n }\n }\n\n var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist);\n var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist);\n rs.endX = edgeEnd[0];\n rs.endY = edgeEnd[1];\n rs.arrowEndX = arrowEnd[0];\n rs.arrowEndY = arrowEnd[1];\n\n if (srcManEndptVal === 'inside-to-node') {\n intersect = [srcPos.x, srcPos.y];\n } else if (srcManEndpt.units) {\n intersect = this.manualEndptToPx(source, srcManEndpt);\n } else if (srcManEndptVal === 'outside-to-line') {\n intersect = rs.srcIntn; // use cached value from ctrlpt calc\n } else {\n if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') {\n p2_i = p2;\n } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') {\n p2_i = [tgtPos.x, tgtPos.y];\n }\n\n intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0);\n\n if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') {\n var srs = source._private.rscratch;\n var _lw = srs.labelWidth;\n var _lh = srs.labelHeight;\n var _lx = srs.labelX;\n var _ly = srs.labelY;\n\n var _lw2 = _lw / 2;\n\n var _lh2 = _lh / 2;\n\n var _va = source.pstyle('text-valign').value;\n\n if (_va === 'top') {\n _ly -= _lh2;\n } else if (_va === 'bottom') {\n _ly += _lh2;\n }\n\n var _ha = source.pstyle('text-halign').value;\n\n if (_ha === 'left') {\n _lx -= _lw2;\n } else if (_ha === 'right') {\n _lx += _lw2;\n }\n\n var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y);\n\n if (_labelIntersect.length > 0) {\n var _refPt = tgtPos;\n\n var _intSqdist = sqdist(_refPt, array2point(intersect));\n\n var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect));\n\n var _minSqDist = _intSqdist;\n\n if (_labIntSqdist < _intSqdist) {\n intersect = [_labelIntersect[0], _labelIntersect[1]];\n _minSqDist = _labIntSqdist;\n }\n\n if (_labelIntersect.length > 2) {\n var _labInt2SqDist = sqdist(_refPt, {\n x: _labelIntersect[2],\n y: _labelIntersect[3]\n });\n\n if (_labInt2SqDist < _minSqDist) {\n intersect = [_labelIntersect[2], _labelIntersect[3]];\n }\n }\n }\n }\n }\n\n var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist);\n var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist);\n rs.startX = edgeStart[0];\n rs.startY = edgeStart[1];\n rs.arrowStartX = arrowStart[0];\n rs.arrowStartY = arrowStart[1];\n\n if (hasEndpts) {\n if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) {\n rs.badLine = true;\n } else {\n rs.badLine = false;\n }\n }\n };\n\n BRp$b.getSourceEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[0],\n y: rs.haystackPts[1]\n };\n\n default:\n return {\n x: rs.arrowStartX,\n y: rs.arrowStartY\n };\n }\n };\n\n BRp$b.getTargetEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[2],\n y: rs.haystackPts[3]\n };\n\n default:\n return {\n x: rs.arrowEndX,\n y: rs.arrowEndY\n };\n }\n };\n\n var BRp$a = {};\n\n function pushBezierPts(r, edge, pts) {\n var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) {\n return qbezierAt(p1, p2, p3, t);\n };\n\n var _p = edge._private;\n var bpts = _p.rstyle.bezierPts;\n\n for (var i = 0; i < r.bezierProjPcts.length; i++) {\n var p = r.bezierProjPcts[i];\n bpts.push({\n x: qbezierAt$1(pts[0], pts[2], pts[4], p),\n y: qbezierAt$1(pts[1], pts[3], pts[5], p)\n });\n }\n }\n\n BRp$a.storeEdgeProjections = function (edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var et = rs.edgeType; // clear the cached points state\n\n _p.rstyle.bezierPts = null;\n _p.rstyle.linePts = null;\n _p.rstyle.haystackPts = null;\n\n if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') {\n _p.rstyle.bezierPts = [];\n\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n pushBezierPts(this, edge, rs.allpts.slice(i, i + 6));\n }\n } else if (et === 'segments') {\n var lpts = _p.rstyle.linePts = [];\n\n for (var i = 0; i + 1 < rs.allpts.length; i += 2) {\n lpts.push({\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n });\n }\n } else if (et === 'haystack') {\n var hpts = rs.haystackPts;\n _p.rstyle.haystackPts = [{\n x: hpts[0],\n y: hpts[1]\n }, {\n x: hpts[2],\n y: hpts[3]\n }];\n }\n\n _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n };\n\n BRp$a.recalculateEdgeProjections = function (edges) {\n this.findEdgeControlPoints(edges);\n };\n\n /* global document */\n\n var BRp$9 = {};\n\n BRp$9.recalculateNodeLabelProjection = function (node) {\n var content = node.pstyle('label').strValue;\n\n if (emptyString(content)) {\n return;\n }\n\n var textX, textY;\n var _p = node._private;\n var nodeWidth = node.width();\n var nodeHeight = node.height();\n var padding = node.padding();\n var nodePos = node.position();\n var textHalign = node.pstyle('text-halign').strValue;\n var textValign = node.pstyle('text-valign').strValue;\n var rs = _p.rscratch;\n var rstyle = _p.rstyle;\n\n switch (textHalign) {\n case 'left':\n textX = nodePos.x - nodeWidth / 2 - padding;\n break;\n\n case 'right':\n textX = nodePos.x + nodeWidth / 2 + padding;\n break;\n\n default:\n // e.g. center\n textX = nodePos.x;\n }\n\n switch (textValign) {\n case 'top':\n textY = nodePos.y - nodeHeight / 2 - padding;\n break;\n\n case 'bottom':\n textY = nodePos.y + nodeHeight / 2 + padding;\n break;\n\n default:\n // e.g. middle\n textY = nodePos.y;\n }\n\n rs.labelX = textX;\n rs.labelY = textY;\n rstyle.labelX = textX;\n rstyle.labelY = textY;\n this.calculateLabelAngles(node);\n this.applyLabelDimensions(node);\n };\n\n var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) {\n var angle = Math.atan(dy / dx);\n\n if (dx === 0 && angle < 0) {\n angle = angle * -1;\n }\n\n return angle;\n };\n\n var lineAngle = function lineAngle(p0, p1) {\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n return lineAngleFromDelta(dx, dy);\n };\n\n var bezierAngle = function bezierAngle(p0, p1, p2, t) {\n var t0 = bound(0, t - 0.001, 1);\n var t1 = bound(0, t + 0.001, 1);\n var lp0 = qbezierPtAt(p0, p1, p2, t0);\n var lp1 = qbezierPtAt(p0, p1, p2, t1);\n return lineAngle(lp0, lp1);\n };\n\n BRp$9.recalculateEdgeLabelProjections = function (edge) {\n var p;\n var _p = edge._private;\n var rs = _p.rscratch;\n var r = this;\n var content = {\n mid: edge.pstyle('label').strValue,\n source: edge.pstyle('source-label').strValue,\n target: edge.pstyle('target-label').strValue\n };\n\n if (content.mid || content.source || content.target) ; else {\n return; // no labels => no calcs\n } // add center point to style so bounding box calculations can use it\n //\n\n\n p = {\n x: rs.midX,\n y: rs.midY\n };\n\n var setRs = function setRs(propName, prefix, value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n setPrefixedProperty(_p.rstyle, propName, prefix, value);\n };\n\n setRs('labelX', null, p.x);\n setRs('labelY', null, p.y);\n var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY);\n setRs('labelAutoAngle', null, midAngle);\n\n var createControlPointInfo = function createControlPointInfo() {\n if (createControlPointInfo.cache) {\n return createControlPointInfo.cache;\n } // use cache so only 1x per edge\n\n\n var ctrlpts = []; // store each ctrlpt info init\n\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n var p0 = {\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n };\n var p1 = {\n x: rs.allpts[i + 2],\n y: rs.allpts[i + 3]\n }; // ctrlpt\n\n var p2 = {\n x: rs.allpts[i + 4],\n y: rs.allpts[i + 5]\n };\n ctrlpts.push({\n p0: p0,\n p1: p1,\n p2: p2,\n startDist: 0,\n length: 0,\n segments: []\n });\n }\n\n var bpts = _p.rstyle.bezierPts;\n var nProjs = r.bezierProjPcts.length;\n\n function addSegment(cp, p0, p1, t0, t1) {\n var length = dist(p0, p1);\n var prevSegment = cp.segments[cp.segments.length - 1];\n var segment = {\n p0: p0,\n p1: p1,\n t0: t0,\n t1: t1,\n startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0,\n length: length\n };\n cp.segments.push(segment);\n cp.length += length;\n } // update each ctrlpt with segment info\n\n\n for (var _i = 0; _i < ctrlpts.length; _i++) {\n var cp = ctrlpts[_i];\n var prevCp = ctrlpts[_i - 1];\n\n if (prevCp) {\n cp.startDist = prevCp.startDist + prevCp.length;\n }\n\n addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first\n\n for (var j = 0; j < nProjs - 1; j++) {\n addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]);\n }\n\n addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last\n }\n\n return createControlPointInfo.cache = ctrlpts;\n };\n\n var calculateEndProjection = function calculateEndProjection(prefix) {\n var angle;\n var isSrc = prefix === 'source';\n\n if (!content[prefix]) {\n return;\n }\n\n var offset = edge.pstyle(prefix + '-text-offset').pfValue;\n\n switch (rs.edgeType) {\n case 'self':\n case 'compound':\n case 'bezier':\n case 'multibezier':\n {\n var cps = createControlPointInfo();\n var selected;\n var startDist = 0;\n var totalDist = 0; // find the segment we're on\n\n for (var i = 0; i < cps.length; i++) {\n var _cp = cps[isSrc ? i : cps.length - 1 - i];\n\n for (var j = 0; j < _cp.segments.length; j++) {\n var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j];\n var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1;\n startDist = totalDist;\n totalDist += _seg.length;\n\n if (totalDist >= offset || lastSeg) {\n selected = {\n cp: _cp,\n segment: _seg\n };\n break;\n }\n }\n\n if (selected) {\n break;\n }\n }\n\n var cp = selected.cp;\n var seg = selected.segment;\n var tSegment = (offset - startDist) / seg.length;\n var segDt = seg.t1 - seg.t0;\n var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment;\n t = bound(0, t, 1);\n p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t);\n angle = bezierAngle(cp.p0, cp.p1, cp.p2, t);\n break;\n }\n\n case 'straight':\n case 'segments':\n case 'haystack':\n {\n var d = 0,\n di,\n d0;\n var p0, p1;\n var l = rs.allpts.length;\n\n for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) {\n if (isSrc) {\n p0 = {\n x: rs.allpts[_i2],\n y: rs.allpts[_i2 + 1]\n };\n p1 = {\n x: rs.allpts[_i2 + 2],\n y: rs.allpts[_i2 + 3]\n };\n } else {\n p0 = {\n x: rs.allpts[l - 2 - _i2],\n y: rs.allpts[l - 1 - _i2]\n };\n p1 = {\n x: rs.allpts[l - 4 - _i2],\n y: rs.allpts[l - 3 - _i2]\n };\n }\n\n di = dist(p0, p1);\n d0 = d;\n d += di;\n\n if (d >= offset) {\n break;\n }\n }\n\n var pD = offset - d0;\n\n var _t = pD / di;\n\n _t = bound(0, _t, 1);\n p = lineAt(p0, p1, _t);\n angle = lineAngle(p0, p1);\n break;\n }\n }\n\n setRs('labelX', prefix, p.x);\n setRs('labelY', prefix, p.y);\n setRs('labelAutoAngle', prefix, angle);\n };\n\n calculateEndProjection('source');\n calculateEndProjection('target');\n this.applyLabelDimensions(edge);\n };\n\n BRp$9.applyLabelDimensions = function (ele) {\n this.applyPrefixedLabelDimensions(ele);\n\n if (ele.isEdge()) {\n this.applyPrefixedLabelDimensions(ele, 'source');\n this.applyPrefixedLabelDimensions(ele, 'target');\n }\n };\n\n BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) {\n var _p = ele._private;\n var text = this.getLabelText(ele, prefix);\n var labelDims = this.calculateLabelDimensions(ele, text);\n var lineHeight = ele.pstyle('line-height').pfValue;\n var textWrap = ele.pstyle('text-wrap').strValue;\n var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || [];\n var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1);\n var normPerLineHeight = labelDims.height / numLines;\n var labelLineHeight = normPerLineHeight * lineHeight;\n var width = labelDims.width;\n var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight;\n setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight);\n };\n\n BRp$9.getLabelText = function (ele, prefix) {\n var _p = ele._private;\n var pfd = prefix ? prefix + '-' : '';\n var text = ele.pstyle(pfd + 'label').strValue;\n var textTransform = ele.pstyle('text-transform').value;\n\n var rscratch = function rscratch(propName, value) {\n if (value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n return value;\n } else {\n return getPrefixedProperty(_p.rscratch, propName, prefix);\n }\n }; // for empty text, skip all processing\n\n\n if (!text) {\n return '';\n }\n\n if (textTransform == 'none') ; else if (textTransform == 'uppercase') {\n text = text.toUpperCase();\n } else if (textTransform == 'lowercase') {\n text = text.toLowerCase();\n }\n\n var wrapStyle = ele.pstyle('text-wrap').value;\n\n if (wrapStyle === 'wrap') {\n var labelKey = rscratch('labelKey'); // save recalc if the label is the same as before\n\n if (labelKey != null && rscratch('labelWrapKey') === labelKey) {\n return rscratch('labelWrapCachedText');\n }\n\n var zwsp = \"\\u200B\";\n var lines = text.split('\\n');\n var maxW = ele.pstyle('text-max-width').pfValue;\n var overflow = ele.pstyle('text-overflow-wrap').value;\n var overflowAny = overflow === 'anywhere';\n var wrappedLines = [];\n var wordsRegex = /[\\s\\u200b]+/;\n var wordSeparator = overflowAny ? '' : ' ';\n\n for (var l = 0; l < lines.length; l++) {\n var line = lines[l];\n var lineDims = this.calculateLabelDimensions(ele, line);\n var lineW = lineDims.width;\n\n if (overflowAny) {\n var processedLine = line.split('').join(zwsp);\n line = processedLine;\n }\n\n if (lineW > maxW) {\n // line is too long\n var words = line.split(wordsRegex);\n var subline = '';\n\n for (var w = 0; w < words.length; w++) {\n var word = words[w];\n var testLine = subline.length === 0 ? word : subline + wordSeparator + word;\n var testDims = this.calculateLabelDimensions(ele, testLine);\n var testW = testDims.width;\n\n if (testW <= maxW) {\n // word fits on current line\n subline += word + wordSeparator;\n } else {\n // word starts new line\n if (subline) {\n wrappedLines.push(subline);\n }\n\n subline = word + wordSeparator;\n }\n } // if there's remaining text, put it in a wrapped line\n\n\n if (!subline.match(/^[\\s\\u200b]+$/)) {\n wrappedLines.push(subline);\n }\n } else {\n // line is already short enough\n wrappedLines.push(line);\n }\n } // for\n\n\n rscratch('labelWrapCachedLines', wrappedLines);\n text = rscratch('labelWrapCachedText', wrappedLines.join('\\n'));\n rscratch('labelWrapKey', labelKey);\n } else if (wrapStyle === 'ellipsis') {\n var _maxW = ele.pstyle('text-max-width').pfValue;\n var ellipsized = '';\n var ellipsis = \"\\u2026\";\n var incLastCh = false;\n\n if (this.calculateLabelDimensions(ele, text).width < _maxW) {\n // the label already fits\n return text;\n }\n\n for (var i = 0; i < text.length; i++) {\n var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width;\n\n if (widthWithNextCh > _maxW) {\n break;\n }\n\n ellipsized += text[i];\n\n if (i === text.length - 1) {\n incLastCh = true;\n }\n }\n\n if (!incLastCh) {\n ellipsized += ellipsis;\n }\n\n return ellipsized;\n } // if ellipsize\n\n\n return text;\n };\n\n BRp$9.getLabelJustification = function (ele) {\n var justification = ele.pstyle('text-justification').strValue;\n var textHalign = ele.pstyle('text-halign').strValue;\n\n if (justification === 'auto') {\n if (ele.isNode()) {\n switch (textHalign) {\n case 'left':\n return 'right';\n\n case 'right':\n return 'left';\n\n default:\n return 'center';\n }\n } else {\n return 'center';\n }\n } else {\n return justification;\n }\n };\n\n BRp$9.calculateLabelDimensions = function (ele, text) {\n var r = this;\n var cacheKey = hashString(text, ele._private.labelDimsKey);\n var cache = r.labelDimCache || (r.labelDimCache = []);\n var existingVal = cache[cacheKey];\n\n if (existingVal != null) {\n return existingVal;\n }\n\n var padding = 0; // add padding around text dims, as the measurement isn't that accurate\n\n var fStyle = ele.pstyle('font-style').strValue;\n var size = ele.pstyle('font-size').pfValue;\n var family = ele.pstyle('font-family').strValue;\n var weight = ele.pstyle('font-weight').strValue;\n var canvas = this.labelCalcCanvas;\n var c2d = this.labelCalcCanvasContext;\n\n if (!canvas) {\n canvas = this.labelCalcCanvas = document.createElement('canvas');\n c2d = this.labelCalcCanvasContext = canvas.getContext('2d');\n var ds = canvas.style;\n ds.position = 'absolute';\n ds.left = '-9999px';\n ds.top = '-9999px';\n ds.zIndex = '-1';\n ds.visibility = 'hidden';\n ds.pointerEvents = 'none';\n }\n\n c2d.font = \"\".concat(fStyle, \" \").concat(weight, \" \").concat(size, \"px \").concat(family);\n var width = 0;\n var height = 0;\n var lines = text.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var metrics = c2d.measureText(line);\n var w = Math.ceil(metrics.width);\n var h = size;\n width = Math.max(w, width);\n height += h;\n }\n\n width += padding;\n height += padding;\n return cache[cacheKey] = {\n width: width,\n height: height\n };\n };\n\n BRp$9.calculateLabelAngle = function (ele, prefix) {\n var _p = ele._private;\n var rs = _p.rscratch;\n var isEdge = ele.isEdge();\n var prefixDash = prefix ? prefix + '-' : '';\n var rot = ele.pstyle(prefixDash + 'text-rotation');\n var rotStr = rot.strValue;\n\n if (rotStr === 'none') {\n return 0;\n } else if (isEdge && rotStr === 'autorotate') {\n return rs.labelAutoAngle;\n } else if (rotStr === 'autorotate') {\n return 0;\n } else {\n return rot.pfValue;\n }\n };\n\n BRp$9.calculateLabelAngles = function (ele) {\n var r = this;\n var isEdge = ele.isEdge();\n var _p = ele._private;\n var rs = _p.rscratch;\n rs.labelAngle = r.calculateLabelAngle(ele);\n\n if (isEdge) {\n rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source');\n rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target');\n }\n };\n\n var BRp$8 = {};\n var TOO_SMALL_CUT_RECT = 28;\n var warnedCutRect = false;\n\n BRp$8.getNodeShape = function (node) {\n var r = this;\n var shape = node.pstyle('shape').value;\n\n if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) {\n if (!warnedCutRect) {\n warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead');\n warnedCutRect = true;\n }\n\n return 'rectangle';\n }\n\n if (node.isParent()) {\n if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') {\n return shape;\n } else {\n return 'rectangle';\n }\n }\n\n if (shape === 'polygon') {\n var points = node.pstyle('shape-polygon-points').value;\n return r.nodeShapes.makePolygon(points).name;\n }\n\n return shape;\n };\n\n var BRp$7 = {};\n\n BRp$7.registerCalculationListeners = function () {\n var cy = this.cy;\n var elesToUpdate = cy.collection();\n var r = this;\n\n var enqueue = function enqueue(eles) {\n var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n elesToUpdate.merge(eles);\n\n if (dirtyStyleCaches) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle;\n rstyle.clean = false;\n rstyle.cleanConnected = false;\n }\n }\n };\n\n r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) {\n var ele = e.target;\n enqueue(ele);\n }).on('style.* background.*', function onDirtyStyle(e) {\n var ele = e.target;\n enqueue(ele, false);\n });\n\n var updateEleCalcs = function updateEleCalcs(willDraw) {\n if (willDraw) {\n var fns = r.onUpdateEleCalcsFns; // because we need to have up-to-date style (e.g. stylesheet mappers)\n // before calculating rendered style (and pstyle might not be called yet)\n\n elesToUpdate.cleanStyle();\n\n for (var i = 0; i < elesToUpdate.length; i++) {\n var ele = elesToUpdate[i];\n var rstyle = ele._private.rstyle;\n\n if (ele.isNode() && !rstyle.cleanConnected) {\n enqueue(ele.connectedEdges());\n rstyle.cleanConnected = true;\n }\n }\n\n if (fns) {\n for (var _i = 0; _i < fns.length; _i++) {\n var fn = fns[_i];\n fn(willDraw, elesToUpdate);\n }\n }\n\n r.recalculateRenderedStyle(elesToUpdate);\n elesToUpdate = cy.collection();\n }\n };\n\n r.flushRenderedStyleQueue = function () {\n updateEleCalcs(true);\n };\n\n r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs);\n };\n\n BRp$7.onUpdateEleCalcs = function (fn) {\n var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || [];\n fns.push(fn);\n };\n\n BRp$7.recalculateRenderedStyle = function (eles, useCache) {\n var isCleanConnected = function isCleanConnected(ele) {\n return ele._private.rstyle.cleanConnected;\n };\n\n var edges = [];\n var nodes = []; // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox()\n\n if (this.destroyed) {\n return;\n } // use cache by default for perf\n\n\n if (useCache === undefined) {\n useCache = true;\n }\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle; // an edge may be implicitly dirty b/c of one of its connected nodes\n // (and a request for recalc may come in between frames)\n\n if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) {\n rstyle.clean = false;\n } // only update if dirty and in graph\n\n\n if (useCache && rstyle.clean || ele.removed()) {\n continue;\n } // only update if not display: none\n\n\n if (ele.pstyle('display').value === 'none') {\n continue;\n }\n\n if (_p.group === 'nodes') {\n nodes.push(ele);\n } else {\n // edges\n edges.push(ele);\n }\n\n rstyle.clean = true;\n } // update node data from projections\n\n\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n var _p2 = _ele._private;\n var _rstyle = _p2.rstyle;\n\n var pos = _ele.position();\n\n this.recalculateNodeLabelProjection(_ele);\n _rstyle.nodeX = pos.x;\n _rstyle.nodeY = pos.y;\n _rstyle.nodeW = _ele.pstyle('width').pfValue;\n _rstyle.nodeH = _ele.pstyle('height').pfValue;\n }\n\n this.recalculateEdgeProjections(edges); // update edge data from projections\n\n for (var _i3 = 0; _i3 < edges.length; _i3++) {\n var _ele2 = edges[_i3];\n var _p3 = _ele2._private;\n var _rstyle2 = _p3.rstyle;\n var rs = _p3.rscratch; // update rstyle positions\n\n _rstyle2.srcX = rs.arrowStartX;\n _rstyle2.srcY = rs.arrowStartY;\n _rstyle2.tgtX = rs.arrowEndX;\n _rstyle2.tgtY = rs.arrowEndY;\n _rstyle2.midX = rs.midX;\n _rstyle2.midY = rs.midY;\n _rstyle2.labelAngle = rs.labelAngle;\n _rstyle2.sourceLabelAngle = rs.sourceLabelAngle;\n _rstyle2.targetLabelAngle = rs.targetLabelAngle;\n }\n };\n\n var BRp$6 = {};\n\n BRp$6.updateCachedGrabbedEles = function () {\n var eles = this.cachedZSortedEles;\n\n if (!eles) {\n // just let this be recalculated on the next z sort tick\n return;\n }\n\n eles.drag = [];\n eles.nondrag = [];\n var grabTargets = [];\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n\n if (ele.grabbed() && !ele.isParent()) {\n grabTargets.push(ele);\n } else if (rs.inDragLayer) {\n eles.drag.push(ele);\n } else {\n eles.nondrag.push(ele);\n }\n } // put the grab target nodes last so it's on top of its neighbourhood\n\n\n for (var i = 0; i < grabTargets.length; i++) {\n var ele = grabTargets[i];\n eles.drag.push(ele);\n }\n };\n\n BRp$6.invalidateCachedZSortedEles = function () {\n this.cachedZSortedEles = null;\n };\n\n BRp$6.getCachedZSortedEles = function (forceRecalc) {\n if (forceRecalc || !this.cachedZSortedEles) {\n var eles = this.cy.mutableElements().toArray();\n eles.sort(zIndexSort);\n eles.interactive = eles.filter(function (ele) {\n return ele.interactive();\n });\n this.cachedZSortedEles = eles;\n this.updateCachedGrabbedEles();\n } else {\n eles = this.cachedZSortedEles;\n }\n\n return eles;\n };\n\n var BRp$5 = {};\n [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) {\n extend(BRp$5, props);\n });\n\n var BRp$4 = {};\n\n BRp$4.getCachedImage = function (url, crossOrigin, onLoad) {\n var r = this;\n var imageCache = r.imageCache = r.imageCache || {};\n var cache = imageCache[url];\n\n if (cache) {\n if (!cache.image.complete) {\n cache.image.addEventListener('load', onLoad);\n }\n\n return cache.image;\n } else {\n cache = imageCache[url] = imageCache[url] || {};\n var image = cache.image = new Image(); // eslint-disable-line no-undef\n\n image.addEventListener('load', onLoad);\n image.addEventListener('error', function () {\n image.error = true;\n }); // #1582 safari doesn't load data uris with crossOrigin properly\n // https://bugs.webkit.org/show_bug.cgi?id=123978\n\n var dataUriPrefix = 'data:';\n var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix;\n\n if (!isDataUri) {\n // if crossorigin is 'null'(stringified), then manually set it to null \n crossOrigin = crossOrigin === 'null' ? null : crossOrigin;\n image.crossOrigin = crossOrigin; // prevent tainted canvas\n }\n\n image.src = url;\n return image;\n }\n };\n\n var BRp$3 = {};\n /* global document, window, ResizeObserver, MutationObserver */\n\n BRp$3.registerBinding = function (target, event, handler, useCapture) {\n // eslint-disable-line no-unused-vars\n var args = Array.prototype.slice.apply(arguments, [1]); // copy\n\n var b = this.binder(target);\n return b.on.apply(b, args);\n };\n\n BRp$3.binder = function (tgt) {\n var r = this;\n var containerWindow = r.cy.window();\n var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt);\n\n if (r.supportsPassiveEvents == null) {\n // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n return true;\n }\n });\n containerWindow.addEventListener('test', null, opts);\n } catch (err) {// not supported\n }\n\n r.supportsPassiveEvents = supportsPassive;\n }\n\n var on = function on(event, handler, useCapture) {\n var args = Array.prototype.slice.call(arguments);\n\n if (tgtIsDom && r.supportsPassiveEvents) {\n // replace useCapture w/ opts obj\n args[2] = {\n capture: useCapture != null ? useCapture : false,\n passive: false,\n once: false\n };\n }\n\n r.bindings.push({\n target: tgt,\n args: args\n });\n (tgt.addEventListener || tgt.on).apply(tgt, args);\n return this;\n };\n\n return {\n on: on,\n addEventListener: on,\n addListener: on,\n bind: on\n };\n };\n\n BRp$3.nodeIsDraggable = function (node) {\n return node && node.isNode() && !node.locked() && node.grabbable();\n };\n\n BRp$3.nodeIsGrabbable = function (node) {\n return this.nodeIsDraggable(node) && node.interactive();\n };\n\n BRp$3.load = function () {\n var r = this;\n var containerWindow = r.cy.window();\n\n var isSelected = function isSelected(ele) {\n return ele.selected();\n };\n\n var triggerEvents = function triggerEvents(target, names, e, position) {\n if (target == null) {\n target = r.cy;\n }\n\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n target.emit({\n originalEvent: e,\n type: name,\n position: position\n });\n }\n };\n\n var isMultSelKeyDown = function isMultSelKeyDown(e) {\n return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey\n };\n\n var allowPanningPassthrough = function allowPanningPassthrough(down, downs) {\n var allowPassthrough = true;\n\n if (r.cy.hasCompoundNodes() && down && down.pannable()) {\n // a grabbable compound node below the ele => no passthrough panning\n for (var i = 0; downs && i < downs.length; i++) {\n var down = downs[i]; //if any parent node in event hierarchy isn't pannable, reject passthrough\n\n if (down.isNode() && down.isParent() && !down.pannable()) {\n allowPassthrough = false;\n break;\n }\n }\n } else {\n allowPassthrough = true;\n }\n\n return allowPassthrough;\n };\n\n var setGrabbed = function setGrabbed(ele) {\n ele[0]._private.grabbed = true;\n };\n\n var setFreed = function setFreed(ele) {\n ele[0]._private.grabbed = false;\n };\n\n var setInDragLayer = function setInDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = true;\n };\n\n var setOutDragLayer = function setOutDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = false;\n };\n\n var setGrabTarget = function setGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = true;\n };\n\n var removeGrabTarget = function removeGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = false;\n };\n\n var addToDragList = function addToDragList(ele, opts) {\n var list = opts.addToList;\n var listHasEle = list.has(ele);\n\n if (!listHasEle && ele.grabbable() && !ele.locked()) {\n list.merge(ele);\n setGrabbed(ele);\n }\n }; // helper function to determine which child nodes and inner edges\n // of a compound node to be dragged as well as the grabbed and selected nodes\n\n\n var addDescendantsToDrag = function addDescendantsToDrag(node, opts) {\n if (!node.cy().hasCompoundNodes()) {\n return;\n }\n\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n\n var innerNodes = node.descendants();\n\n if (opts.inDragLayer) {\n innerNodes.forEach(setInDragLayer);\n innerNodes.connectedEdges().forEach(setInDragLayer);\n }\n\n if (opts.addToList) {\n addToDragList(innerNodes, opts);\n }\n }; // adds the given nodes and its neighbourhood to the drag layer\n\n\n var addNodesToDrag = function addNodesToDrag(nodes, opts) {\n opts = opts || {};\n var hasCompoundNodes = nodes.cy().hasCompoundNodes();\n\n if (opts.inDragLayer) {\n nodes.forEach(setInDragLayer);\n nodes.neighborhood().stdFilter(function (ele) {\n return !hasCompoundNodes || ele.isEdge();\n }).forEach(setInDragLayer);\n }\n\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n\n addDescendantsToDrag(nodes, opts); // always add to drag\n // also add nodes and edges related to the topmost ancestor\n\n updateAncestorsInDragLayer(nodes, {\n inDragLayer: opts.inDragLayer\n });\n r.updateCachedGrabbedEles();\n };\n\n var addNodeToDrag = addNodesToDrag;\n\n var freeDraggedElements = function freeDraggedElements(grabbedEles) {\n if (!grabbedEles) {\n return;\n } // just go over all elements rather than doing a bunch of (possibly expensive) traversals\n\n\n r.getCachedZSortedEles().forEach(function (ele) {\n setFreed(ele);\n setOutDragLayer(ele);\n removeGrabTarget(ele);\n });\n r.updateCachedGrabbedEles();\n }; // helper function to determine which ancestor nodes and edges should go\n // to the drag layer (or should be removed from drag layer).\n\n\n var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) {\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n\n if (!node.cy().hasCompoundNodes()) {\n return;\n } // find top-level parent\n\n\n var parent = node.ancestors().orphans(); // no parent node: no nodes to add to the drag layer\n\n if (parent.same(node)) {\n return;\n }\n\n var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants());\n var edges = nodes.connectedEdges();\n\n if (opts.inDragLayer) {\n edges.forEach(setInDragLayer);\n nodes.forEach(setInDragLayer);\n }\n\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n };\n\n var blurActiveDomElement = function blurActiveDomElement() {\n if (document.activeElement != null && document.activeElement.blur != null) {\n document.activeElement.blur();\n }\n };\n\n var haveMutationsApi = typeof MutationObserver !== 'undefined';\n var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; // watch for when the cy container is removed from the dom\n\n if (haveMutationsApi) {\n r.removeObserver = new MutationObserver(function (mutns) {\n // eslint-disable-line no-undef\n for (var i = 0; i < mutns.length; i++) {\n var mutn = mutns[i];\n var rNodes = mutn.removedNodes;\n\n if (rNodes) {\n for (var j = 0; j < rNodes.length; j++) {\n var rNode = rNodes[j];\n\n if (rNode === r.container) {\n r.destroy();\n break;\n }\n }\n }\n }\n });\n\n if (r.container.parentNode) {\n r.removeObserver.observe(r.container.parentNode, {\n childList: true\n });\n }\n } else {\n r.registerBinding(r.container, 'DOMNodeRemoved', function (e) {\n // eslint-disable-line no-unused-vars\n r.destroy();\n });\n }\n\n var onResize = debounce_1(function () {\n r.cy.resize();\n }, 100);\n\n if (haveMutationsApi) {\n r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef\n\n r.styleObserver.observe(r.container, {\n attributes: true\n });\n } // auto resize\n\n\n r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef\n\n if (haveResizeObserverApi) {\n r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef\n\n r.resizeObserver.observe(r.container);\n }\n\n var forEachUp = function forEachUp(domEle, fn) {\n while (domEle != null) {\n fn(domEle);\n domEle = domEle.parentNode;\n }\n };\n\n var invalidateCoords = function invalidateCoords() {\n r.invalidateContainerClientCoordsCache();\n };\n\n forEachUp(r.container, function (domEle) {\n r.registerBinding(domEle, 'transitionend', invalidateCoords);\n r.registerBinding(domEle, 'animationend', invalidateCoords);\n r.registerBinding(domEle, 'scroll', invalidateCoords);\n }); // stop right click menu from appearing on cy\n\n r.registerBinding(r.container, 'contextmenu', function (e) {\n e.preventDefault();\n });\n\n var inBoxSelection = function inBoxSelection() {\n return r.selection[4] !== 0;\n };\n\n var eventInContainer = function eventInContainer(e) {\n // save cycles if mouse events aren't to be captured\n var containerPageCoords = r.findContainerClientCoords();\n var x = containerPageCoords[0];\n var y = containerPageCoords[1];\n var width = containerPageCoords[2];\n var height = containerPageCoords[3];\n var positions = e.touches ? e.touches : [e];\n var atLeastOnePosInside = false;\n\n for (var i = 0; i < positions.length; i++) {\n var p = positions[i];\n\n if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) {\n atLeastOnePosInside = true;\n break;\n }\n }\n\n if (!atLeastOnePosInside) {\n return false;\n }\n\n var container = r.container;\n var target = e.target;\n var tParent = target.parentNode;\n var containerIsTarget = false;\n\n while (tParent) {\n if (tParent === container) {\n containerIsTarget = true;\n break;\n }\n\n tParent = tParent.parentNode;\n }\n\n if (!containerIsTarget) {\n return false;\n } // if target is outisde cy container, then this event is not for us\n\n\n return true;\n }; // Primary key\n\n\n r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) {\n if (!eventInContainer(e)) {\n return;\n }\n\n e.preventDefault();\n blurActiveDomElement();\n r.hoverData.capture = true;\n r.hoverData.which = e.which;\n var cy = r.cy;\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var select = r.selection;\n var nears = r.findNearestElements(pos[0], pos[1], true, false);\n var near = nears[0];\n var draggedElements = r.dragData.possibleDragElements;\n r.hoverData.mdownPos = pos;\n r.hoverData.mdownGPos = gpos;\n\n var checkForTaphold = function checkForTaphold() {\n r.hoverData.tapholdCancelled = false;\n clearTimeout(r.hoverData.tapholdTimeout);\n r.hoverData.tapholdTimeout = setTimeout(function () {\n if (r.hoverData.tapholdCancelled) {\n return;\n } else {\n var ele = r.hoverData.down;\n\n if (ele) {\n ele.emit({\n originalEvent: e,\n type: 'taphold',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n } else {\n cy.emit({\n originalEvent: e,\n type: 'taphold',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n }\n }, r.tapholdDuration);\n }; // Right click button\n\n\n if (e.which == 3) {\n r.hoverData.cxtStarted = true;\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n\n if (near) {\n near.activate();\n near.emit(cxtEvt);\n r.hoverData.down = near;\n } else {\n cy.emit(cxtEvt);\n }\n\n r.hoverData.downTime = new Date().getTime();\n r.hoverData.cxtDragged = false; // Primary button\n } else if (e.which == 1) {\n if (near) {\n near.activate();\n } // Element dragging\n\n\n {\n // If something is under the cursor and it is draggable, prepare to grab it\n if (near != null) {\n if (r.nodeIsGrabbable(near)) {\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n };\n\n var triggerGrab = function triggerGrab(ele) {\n ele.emit(makeEvent('grab'));\n };\n\n setGrabTarget(near);\n\n if (!near.selected()) {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n addNodeToDrag(near, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon')).emit(makeEvent('grab'));\n } else {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n var selectedNodes = cy.$(function (ele) {\n return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon'));\n selectedNodes.forEach(triggerGrab);\n }\n\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n }\n\n r.hoverData.down = near;\n r.hoverData.downs = nears;\n r.hoverData.downTime = new Date().getTime();\n }\n triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, {\n x: pos[0],\n y: pos[1]\n });\n\n if (near == null) {\n select[4] = 1;\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n } else if (near.pannable()) {\n select[4] = 1; // for future pan\n }\n\n checkForTaphold();\n } // Initialize selection box coordinates\n\n\n select[0] = select[2] = pos[0];\n select[1] = select[3] = pos[1];\n }, false);\n r.registerBinding(containerWindow, 'mousemove', function mousemoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.hoverData.capture;\n\n if (!capture && !eventInContainer(e)) {\n return;\n }\n\n var preventDefault = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var mdownPos = r.hoverData.mdownPos;\n var mdownGPos = r.hoverData.mdownGPos;\n var select = r.selection;\n var near = null;\n\n if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) {\n near = r.findNearestElement(pos[0], pos[1], true, false);\n }\n\n var last = r.hoverData.last;\n var down = r.hoverData.down;\n var disp = [pos[0] - select[2], pos[1] - select[3]];\n var draggedElements = r.dragData.possibleDragElements;\n var isOverThresholdDrag;\n\n if (mdownGPos) {\n var dx = gpos[0] - mdownGPos[0];\n var dx2 = dx * dx;\n var dy = gpos[1] - mdownGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2;\n }\n\n var multSelKeyDown = isMultSelKeyDown(e);\n\n if (isOverThresholdDrag) {\n r.hoverData.tapholdCancelled = true;\n }\n\n var updateDragDelta = function updateDragDelta() {\n var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || [];\n\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n };\n\n preventDefault = true;\n triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, {\n x: pos[0],\n y: pos[1]\n });\n\n var goIntoBoxMode = function goIntoBoxMode() {\n r.data.bgActivePosistion = undefined;\n\n if (!r.hoverData.selecting) {\n cy.emit({\n originalEvent: e,\n type: 'boxstart',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n\n select[4] = 1;\n r.hoverData.selecting = true;\n r.redrawHint('select', true);\n r.redraw();\n }; // trigger context drag if rmouse down\n\n\n if (r.hoverData.which === 3) {\n // but only if over threshold\n if (isOverThresholdDrag) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxtdrag',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n\n r.hoverData.cxtDragged = true;\n\n if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) {\n if (r.hoverData.cxtOver) {\n r.hoverData.cxtOver.emit({\n originalEvent: e,\n type: 'cxtdragout',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n\n r.hoverData.cxtOver = near;\n\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'cxtdragover',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n }\n } // Check if we are drag panning the entire graph\n\n } else if (r.hoverData.dragging) {\n preventDefault = true;\n\n if (cy.panningEnabled() && cy.userPanningEnabled()) {\n var deltaP;\n\n if (r.hoverData.justStartedPan) {\n var mdPos = r.hoverData.mdownPos;\n deltaP = {\n x: (pos[0] - mdPos[0]) * zoom,\n y: (pos[1] - mdPos[1]) * zoom\n };\n r.hoverData.justStartedPan = false;\n } else {\n deltaP = {\n x: disp[0] * zoom,\n y: disp[1] * zoom\n };\n }\n\n cy.panBy(deltaP);\n cy.emit('dragpan');\n r.hoverData.dragged = true;\n } // Needs reproject due to pan changing viewport\n\n\n pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much\n } else if (select[4] == 1 && (down == null || down.pannable())) {\n if (isOverThresholdDrag) {\n if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) {\n goIntoBoxMode();\n } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs);\n\n if (allowPassthrough) {\n r.hoverData.dragging = true;\n r.hoverData.justStartedPan = true;\n select[4] = 0;\n r.data.bgActivePosistion = array2point(mdownPos);\n r.redrawHint('select', true);\n r.redraw();\n }\n }\n\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n }\n } else {\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n\n if ((!down || !down.grabbed()) && near != last) {\n if (last) {\n triggerEvents(last, ['mouseout', 'tapdragout'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n\n if (near) {\n triggerEvents(near, ['mouseover', 'tapdragover'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n\n r.hoverData.last = near;\n }\n\n if (down) {\n if (isOverThresholdDrag) {\n // then we can take action\n if (cy.boxSelectionEnabled() && multSelKeyDown) {\n // then selection overrides\n if (down && down.grabbed()) {\n freeDraggedElements(draggedElements);\n down.emit('freeon');\n draggedElements.emit('free');\n\n if (r.dragData.didDrag) {\n down.emit('dragfreeon');\n draggedElements.emit('dragfree');\n }\n }\n\n goIntoBoxMode();\n } else if (down && down.grabbed() && r.nodeIsDraggable(down)) {\n // drag node\n var justStartedDrag = !r.dragData.didDrag;\n\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n }\n\n r.dragData.didDrag = true; // indicate that we actually did drag the node\n // now, add the elements to the drag layer if not done already\n\n if (!r.hoverData.draggingEles) {\n addNodesToDrag(draggedElements, {\n inDragLayer: true\n });\n }\n\n var totalShift = {\n x: 0,\n y: 0\n };\n\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n\n if (justStartedDrag) {\n var dragDelta = r.hoverData.dragDelta;\n\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n\n r.hoverData.draggingEles = true;\n draggedElements.silentShift(totalShift).emit('position drag');\n r.redrawHint('drag', true);\n r.redraw();\n }\n } else {\n // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant\n updateDragDelta();\n }\n } // prevent the dragging from triggering text selection on the page\n\n\n preventDefault = true;\n }\n\n select[2] = pos[0];\n select[3] = pos[1];\n\n if (preventDefault) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n }\n }, false);\n var clickTimeout, didDoubleClick, prevClickTimeStamp;\n r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.hoverData.capture;\n\n if (!capture) {\n return;\n }\n\n r.hoverData.capture = false;\n var cy = r.cy;\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var select = r.selection;\n var near = r.findNearestElement(pos[0], pos[1], true, false);\n var draggedElements = r.dragData.possibleDragElements;\n var down = r.hoverData.down;\n var multSelKeyDown = isMultSelKeyDown(e);\n\n if (r.data.bgActivePosistion) {\n r.redrawHint('select', true);\n r.redraw();\n }\n\n r.hoverData.tapholdCancelled = true;\n r.data.bgActivePosistion = undefined; // not active bg now\n\n if (down) {\n down.unactivate();\n }\n\n if (r.hoverData.which === 3) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n\n if (!r.hoverData.cxtDragged) {\n var cxtTap = {\n originalEvent: e,\n type: 'cxttap',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n\n if (down) {\n down.emit(cxtTap);\n } else {\n cy.emit(cxtTap);\n }\n }\n\n r.hoverData.cxtDragged = false;\n r.hoverData.which = null;\n } else if (r.hoverData.which === 1) {\n triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, {\n x: pos[0],\n y: pos[1]\n });\n\n if (!r.dragData.didDrag && // didn't move a node around\n !r.hoverData.dragged && // didn't pan\n !r.hoverData.selecting && // not box selection\n !r.hoverData.isOverThresholdDrag // didn't move too much\n ) {\n triggerEvents(down, [\"click\", \"tap\", \"vclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n didDoubleClick = false;\n\n if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) {\n clickTimeout && clearTimeout(clickTimeout);\n didDoubleClick = true;\n prevClickTimeStamp = null;\n triggerEvents(down, [\"dblclick\", \"dbltap\", \"vdblclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n } else {\n clickTimeout = setTimeout(function () {\n if (didDoubleClick) return;\n triggerEvents(down, [\"oneclick\", \"onetap\", \"voneclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n }, cy.multiClickDebounceTime());\n prevClickTimeStamp = e.timeStamp;\n }\n } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something\n\n\n if (down == null // not mousedown on node\n && !r.dragData.didDrag // didn't move the node around\n && !r.hoverData.selecting // not box selection\n && !r.hoverData.dragged // didn't pan\n && !isMultSelKeyDown(e)) {\n cy.$(isSelected).unselect(['tapunselect']);\n\n if (draggedElements.length > 0) {\n r.redrawHint('eles', true);\n }\n\n r.dragData.possibleDragElements = draggedElements = cy.collection();\n } // Single selection\n\n\n if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) {\n if (near != null && near._private.selectable) {\n if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) {\n if (near.selected()) {\n near.unselect(['tapunselect']);\n } else {\n near.select(['tapselect']);\n }\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(near).unselect(['tapunselect']);\n near.select(['tapselect']);\n }\n }\n\n r.redrawHint('eles', true);\n }\n }\n\n if (r.hoverData.selecting) {\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n r.redrawHint('select', true);\n\n if (box.length > 0) {\n r.redrawHint('eles', true);\n }\n\n cy.emit({\n type: 'boxend',\n originalEvent: e,\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n\n if (cy.selectionType() === 'additive') {\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(box).unselect();\n }\n\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n } // always need redraw in case eles unselectable\n\n\n r.redraw();\n } // Cancel drag pan\n\n\n if (r.hoverData.dragging) {\n r.hoverData.dragging = false;\n r.redrawHint('select', true);\n r.redrawHint('eles', true);\n r.redraw();\n }\n\n if (!select[4]) {\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n var downWasGrabbed = down && down.grabbed();\n freeDraggedElements(draggedElements);\n\n if (downWasGrabbed) {\n down.emit('freeon');\n draggedElements.emit('free');\n\n if (r.dragData.didDrag) {\n down.emit('dragfreeon');\n draggedElements.emit('dragfree');\n }\n }\n }\n } // else not right mouse\n\n\n select[4] = 0;\n r.hoverData.down = null;\n r.hoverData.cxtStarted = false;\n r.hoverData.draggingEles = false;\n r.hoverData.selecting = false;\n r.hoverData.isOverThresholdDrag = false;\n r.dragData.didDrag = false;\n r.hoverData.dragged = false;\n r.hoverData.dragDelta = [];\n r.hoverData.mdownPos = null;\n r.hoverData.mdownGPos = null;\n }, false);\n\n var wheelHandler = function wheelHandler(e) {\n if (r.scrollingPage) {\n return;\n } // while scrolling, ignore wheel-to-zoom\n\n\n var cy = r.cy;\n var zoom = cy.zoom();\n var pan = cy.pan();\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y];\n\n if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) {\n // if pan dragging or cxt dragging, wheel movements make no zoom\n e.preventDefault();\n return;\n }\n\n if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) {\n e.preventDefault();\n r.data.wheelZooming = true;\n clearTimeout(r.data.wheelTimeout);\n r.data.wheelTimeout = setTimeout(function () {\n r.data.wheelZooming = false;\n r.redrawHint('eles', true);\n r.redraw();\n }, 150);\n var diff;\n\n if (e.deltaY != null) {\n diff = e.deltaY / -250;\n } else if (e.wheelDeltaY != null) {\n diff = e.wheelDeltaY / 1000;\n } else {\n diff = e.wheelDelta / 1000;\n }\n\n diff = diff * r.wheelSensitivity;\n var needsWheelFix = e.deltaMode === 1;\n\n if (needsWheelFix) {\n // fixes slow wheel events on ff/linux and ff/windows\n diff *= 33;\n }\n\n var newZoom = cy.zoom() * Math.pow(10, diff);\n\n if (e.type === 'gesturechange') {\n newZoom = r.gestureStartZoom * e.scale;\n }\n\n cy.zoom({\n level: newZoom,\n renderedPosition: {\n x: rpos[0],\n y: rpos[1]\n }\n });\n cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom');\n }\n }; // Functions to help with whether mouse wheel should trigger zooming\n // --\n\n\n r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events\n // r.registerBinding(r.container, 'mousewheel', wheelHandler, true);\n // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true);\n // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox\n\n r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) {\n // eslint-disable-line no-unused-vars\n r.scrollingPage = true;\n clearTimeout(r.scrollingPageTimeout);\n r.scrollingPageTimeout = setTimeout(function () {\n r.scrollingPage = false;\n }, 250);\n }, true); // desktop safari pinch to zoom start\n\n r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) {\n r.gestureStartZoom = r.cy.zoom();\n\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n e.preventDefault();\n }\n }, true);\n r.registerBinding(r.container, 'gesturechange', function (e) {\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n wheelHandler(e);\n }\n }, true); // Functions to help with handling mouseout/mouseover on the Cytoscape container\n // Handle mouseout on Cytoscape container\n\n r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseout',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseover',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom\n\n var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom\n\n var center1, modelCenter1; // center point on start pinch to zoom\n\n var offsetLeft, offsetTop;\n var containerWidth, containerHeight;\n var twoFingersStartInside;\n\n var distance = function distance(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n };\n\n var distanceSq = function distanceSq(x1, y1, x2, y2) {\n return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n };\n\n var touchstartHandler;\n r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) {\n r.hasTouchStarted = true;\n\n if (!eventInContainer(e)) {\n return;\n }\n\n blurActiveDomElement();\n r.touchData.capture = true;\n r.data.bgActivePosistion = undefined;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n } // record starting points for pinch-to-zoom\n\n\n if (e.touches[1]) {\n r.touchData.singleTouchMoved = true;\n freeDraggedElements(r.dragData.touchDragEles);\n var offsets = r.findContainerClientCoords();\n offsetLeft = offsets[0];\n offsetTop = offsets[1];\n containerWidth = offsets[2];\n containerHeight = offsets[3];\n f1x1 = e.touches[0].clientX - offsetLeft;\n f1y1 = e.touches[0].clientY - offsetTop;\n f2x1 = e.touches[1].clientX - offsetLeft;\n f2y1 = e.touches[1].clientY - offsetTop;\n twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight;\n var pan = cy.pan();\n var zoom = cy.zoom();\n distance1 = distance(f1x1, f1y1, f2x1, f2y1);\n distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1);\n center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2];\n modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; // consider context tap\n\n var cxtDistThreshold = 200;\n var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold;\n\n if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) {\n var near1 = r.findNearestElement(now[0], now[1], true, true);\n var near2 = r.findNearestElement(now[2], now[3], true, true);\n\n if (near1 && near1.isNode()) {\n near1.activate().emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n r.touchData.start = near1;\n } else if (near2 && near2.isNode()) {\n near2.activate().emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n r.touchData.start = near2;\n } else {\n cy.emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n\n r.touchData.cxt = true;\n r.touchData.cxtDragged = false;\n r.data.bgActivePosistion = undefined;\n r.redraw();\n return;\n }\n }\n\n if (e.touches[2]) {\n // ignore\n // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...)\n if (cy.boxSelectionEnabled()) {\n e.preventDefault();\n }\n } else if (e.touches[1]) ; else if (e.touches[0]) {\n var nears = r.findNearestElements(now[0], now[1], true, true);\n var near = nears[0];\n\n if (near != null) {\n near.activate();\n r.touchData.start = near;\n r.touchData.starts = nears;\n\n if (r.nodeIsGrabbable(near)) {\n var draggedEles = r.dragData.touchDragEles = cy.collection();\n var selectedNodes = null;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n\n if (near.selected()) {\n // reset drag elements, since near will be added again\n selectedNodes = cy.$(function (ele) {\n return ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedEles\n });\n } else {\n addNodeToDrag(near, {\n addToList: draggedEles\n });\n }\n\n setGrabTarget(near);\n\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: now[0],\n y: now[1]\n }\n };\n };\n\n near.emit(makeEvent('grabon'));\n\n if (selectedNodes) {\n selectedNodes.forEach(function (n) {\n n.emit(makeEvent('grab'));\n });\n } else {\n near.emit(makeEvent('grab'));\n }\n }\n }\n\n triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, {\n x: now[0],\n y: now[1]\n });\n\n if (near == null) {\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n } // Tap, taphold\n // -----\n\n\n r.touchData.singleTouchMoved = false;\n r.touchData.singleTouchStartTime = +new Date();\n clearTimeout(r.touchData.tapholdTimeout);\n r.touchData.tapholdTimeout = setTimeout(function () {\n if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect\n && !r.touchData.selecting // box selection shouldn't allow taphold through\n ) {\n triggerEvents(r.touchData.start, ['taphold'], e, {\n x: now[0],\n y: now[1]\n });\n }\n }, r.tapholdDuration);\n }\n\n if (e.touches.length >= 1) {\n var sPos = r.touchData.startPosition = [null, null, null, null, null, null];\n\n for (var i = 0; i < now.length; i++) {\n sPos[i] = earlier[i] = now[i];\n }\n\n var touch0 = e.touches[0];\n r.touchData.startGPosition = [touch0.clientX, touch0.clientY];\n }\n }, false);\n var touchmoveHandler;\n r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.touchData.capture;\n\n if (!capture && !eventInContainer(e)) {\n return;\n }\n\n var select = r.selection;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n var zoom = cy.zoom();\n\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n\n var startGPos = r.touchData.startGPosition;\n var isOverThresholdDrag;\n\n if (capture && e.touches[0] && startGPos) {\n var disp = [];\n\n for (var j = 0; j < now.length; j++) {\n disp[j] = now[j] - earlier[j];\n }\n\n var dx = e.touches[0].clientX - startGPos[0];\n var dx2 = dx * dx;\n var dy = e.touches[0].clientY - startGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n isOverThresholdDrag = dist2 >= r.touchTapThreshold2;\n } // context swipe cancelling\n\n\n if (capture && r.touchData.cxt) {\n e.preventDefault();\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop; // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 );\n\n var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2);\n var factorSq = distance2Sq / distance1Sq;\n var distThreshold = 150;\n var distThresholdSq = distThreshold * distThreshold;\n var factorThreshold = 1.5;\n var factorThresholdSq = factorThreshold * factorThreshold; // cancel ctx gestures if the distance b/t the fingers increases\n\n if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) {\n r.touchData.cxt = false;\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n\n if (r.touchData.start) {\n r.touchData.start.unactivate().emit(cxtEvt);\n r.touchData.start = null;\n } else {\n cy.emit(cxtEvt);\n }\n }\n } // context swipe\n\n\n if (capture && r.touchData.cxt) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxtdrag',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n\n if (r.touchData.start) {\n r.touchData.start.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n\n r.touchData.cxtDragged = true;\n var near = r.findNearestElement(now[0], now[1], true, true);\n\n if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) {\n if (r.touchData.cxtOver) {\n r.touchData.cxtOver.emit({\n originalEvent: e,\n type: 'cxtdragout',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n\n r.touchData.cxtOver = near;\n\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'cxtdragover',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n } // box selection\n\n } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) {\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n this.lastThreeTouch = +new Date();\n\n if (!r.touchData.selecting) {\n cy.emit({\n originalEvent: e,\n type: 'boxstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n\n r.touchData.selecting = true;\n r.touchData.didSelect = true;\n select[4] = 1;\n\n if (!select || select.length === 0 || select[0] === undefined) {\n select[0] = (now[0] + now[2] + now[4]) / 3;\n select[1] = (now[1] + now[3] + now[5]) / 3;\n select[2] = (now[0] + now[2] + now[4]) / 3 + 1;\n select[3] = (now[1] + now[3] + now[5]) / 3 + 1;\n } else {\n select[2] = (now[0] + now[2] + now[4]) / 3;\n select[3] = (now[1] + now[3] + now[5]) / 3;\n }\n\n r.redrawHint('select', true);\n r.redraw(); // pinch to zoom\n } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom\n && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) {\n // two fingers => pinch to zoom\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n\n if (draggedEles) {\n r.redrawHint('drag', true);\n\n for (var i = 0; i < draggedEles.length; i++) {\n var de_p = draggedEles[i]._private;\n de_p.grabbed = false;\n de_p.rscratch.inDragLayer = false;\n }\n }\n\n var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2\n\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop;\n var distance2 = distance(f1x2, f1y2, f2x2, f2y2); // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 );\n // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq );\n\n var factor = distance2 / distance1;\n\n if (twoFingersStartInside) {\n // delta finger1\n var df1x = f1x2 - f1x1;\n var df1y = f1y2 - f1y1; // delta finger 2\n\n var df2x = f2x2 - f2x1;\n var df2y = f2y2 - f2y1; // translation is the normalised vector of the two fingers movement\n // i.e. so pinching cancels out and moving together pans\n\n var tx = (df1x + df2x) / 2;\n var ty = (df1y + df2y) / 2; // now calculate the zoom\n\n var zoom1 = cy.zoom();\n var zoom2 = zoom1 * factor;\n var pan1 = cy.pan(); // the model center point converted to the current rendered pos\n\n var ctrx = modelCenter1[0] * zoom1 + pan1.x;\n var ctry = modelCenter1[1] * zoom1 + pan1.y;\n var pan2 = {\n x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx,\n y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry\n }; // remove dragged eles\n\n if (_start && _start.active()) {\n var draggedEles = r.dragData.touchDragEles;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n\n _start.unactivate().emit('freeon');\n\n draggedEles.emit('free');\n\n if (r.dragData.didDrag) {\n _start.emit('dragfreeon');\n\n draggedEles.emit('dragfree');\n }\n }\n\n cy.viewport({\n zoom: zoom2,\n pan: pan2,\n cancelOnFailedZoom: true\n });\n cy.emit('pinchzoom');\n distance1 = distance2;\n f1x1 = f1x2;\n f1y1 = f1y2;\n f2x1 = f2x2;\n f2y1 = f2y2;\n r.pinching = true;\n } // Re-project\n\n\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning\n ) {\n var start = r.touchData.start;\n var last = r.touchData.last;\n var near;\n\n if (!r.hoverData.draggingEles && !r.swipePanning) {\n near = r.findNearestElement(now[0], now[1], true, true);\n }\n\n if (capture && start != null) {\n e.preventDefault();\n } // dragging nodes\n\n\n if (capture && start != null && r.nodeIsDraggable(start)) {\n if (isOverThresholdDrag) {\n // then dragging can happen\n var draggedEles = r.dragData.touchDragEles;\n var justStartedDrag = !r.dragData.didDrag;\n\n if (justStartedDrag) {\n addNodesToDrag(draggedEles, {\n inDragLayer: true\n });\n }\n\n r.dragData.didDrag = true;\n var totalShift = {\n x: 0,\n y: 0\n };\n\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n var dragDelta = r.touchData.dragDelta;\n\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n\n r.hoverData.draggingEles = true;\n draggedEles.silentShift(totalShift).emit('position drag');\n r.redrawHint('drag', true);\n\n if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) {\n r.redrawHint('eles', true);\n }\n\n r.redraw();\n } else {\n // otherwise keep track of drag delta for later\n var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || [];\n\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n }\n } // touchmove\n\n\n {\n triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, {\n x: now[0],\n y: now[1]\n });\n\n if ((!start || !start.grabbed()) && near != last) {\n if (last) {\n last.emit({\n originalEvent: e,\n type: 'tapdragout',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'tapdragover',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n }\n\n r.touchData.last = near;\n } // check to cancel taphold\n\n if (capture) {\n for (var i = 0; i < now.length; i++) {\n if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) {\n r.touchData.singleTouchMoved = true;\n }\n }\n } // panning\n\n\n if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts);\n\n if (allowPassthrough) {\n e.preventDefault();\n\n if (!r.data.bgActivePosistion) {\n r.data.bgActivePosistion = array2point(r.touchData.startPosition);\n }\n\n if (r.swipePanning) {\n cy.panBy({\n x: disp[0] * zoom,\n y: disp[1] * zoom\n });\n cy.emit('dragpan');\n } else if (isOverThresholdDrag) {\n r.swipePanning = true;\n cy.panBy({\n x: dx * zoom,\n y: dy * zoom\n });\n cy.emit('dragpan');\n\n if (start) {\n start.unactivate();\n r.redrawHint('select', true);\n r.touchData.start = null;\n }\n }\n } // Re-project\n\n\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n }\n\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n } // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning\n\n\n if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n r.redraw();\n }\n }, false);\n var touchcancelHandler;\n r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n r.touchData.capture = false;\n\n if (start) {\n start.unactivate();\n }\n });\n var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp;\n r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n var capture = r.touchData.capture;\n\n if (capture) {\n if (e.touches.length === 0) {\n r.touchData.capture = false;\n }\n\n e.preventDefault();\n } else {\n return;\n }\n\n var select = r.selection;\n r.swipePanning = false;\n r.hoverData.draggingEles = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n\n if (start) {\n start.unactivate();\n }\n\n var ctxTapend;\n\n if (r.touchData.cxt) {\n ctxTapend = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n\n if (start) {\n start.emit(ctxTapend);\n } else {\n cy.emit(ctxTapend);\n }\n\n if (!r.touchData.cxtDragged) {\n var ctxTap = {\n originalEvent: e,\n type: 'cxttap',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n\n if (start) {\n start.emit(ctxTap);\n } else {\n cy.emit(ctxTap);\n }\n }\n\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n\n r.touchData.cxt = false;\n r.touchData.start = null;\n r.redraw();\n return;\n } // no more box selection if we don't have three fingers\n\n\n if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) {\n r.touchData.selecting = false;\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n select[0] = undefined;\n select[1] = undefined;\n select[2] = undefined;\n select[3] = undefined;\n select[4] = 0;\n r.redrawHint('select', true);\n cy.emit({\n type: 'boxend',\n originalEvent: e,\n position: {\n x: now[0],\n y: now[1]\n }\n });\n\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n\n if (box.nonempty()) {\n r.redrawHint('eles', true);\n }\n\n r.redraw();\n }\n\n if (start != null) {\n start.unactivate();\n }\n\n if (e.touches[2]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n\n if (start != null) {\n var startWasGrabbed = start._private.grabbed;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n\n if (startWasGrabbed) {\n start.emit('freeon');\n draggedEles.emit('free');\n\n if (r.dragData.didDrag) {\n start.emit('dragfreeon');\n draggedEles.emit('dragfree');\n }\n }\n\n triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n start.unactivate();\n r.touchData.start = null;\n } else {\n var near = r.findNearestElement(now[0], now[1], true, true);\n triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n }\n\n var dx = r.touchData.startPosition[0] - now[0];\n var dx2 = dx * dx;\n var dy = r.touchData.startPosition[1] - now[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n var rdist2 = dist2 * zoom * zoom; // Tap event, roughly same as mouse click event for touch\n\n if (!r.touchData.singleTouchMoved) {\n if (!start) {\n cy.$(':selected').unselect(['tapunselect']);\n }\n\n triggerEvents(start, ['tap', 'vclick'], e, {\n x: now[0],\n y: now[1]\n });\n didDoubleTouch = false;\n\n if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) {\n touchTimeout && clearTimeout(touchTimeout);\n didDoubleTouch = true;\n prevTouchTimeStamp = null;\n triggerEvents(start, ['dbltap', 'vdblclick'], e, {\n x: now[0],\n y: now[1]\n });\n } else {\n touchTimeout = setTimeout(function () {\n if (didDoubleTouch) return;\n triggerEvents(start, ['onetap', 'voneclick'], e, {\n x: now[0],\n y: now[1]\n });\n }, cy.multiClickDebounceTime());\n prevTouchTimeStamp = e.timeStamp;\n }\n } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance\n\n\n if (start != null && !r.dragData.didDrag // didn't drag nodes around\n && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection\n ) {\n if (cy.selectionType() === 'single') {\n cy.$(isSelected).unmerge(start).unselect(['tapunselect']);\n start.select(['tapselect']);\n } else {\n if (start.selected()) {\n start.unselect(['tapunselect']);\n } else {\n start.select(['tapselect']);\n }\n }\n\n r.redrawHint('eles', true);\n }\n\n r.touchData.singleTouchMoved = true;\n }\n\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n }\n\n r.dragData.didDrag = false; // reset for next touchstart\n\n if (e.touches.length === 0) {\n r.touchData.dragDelta = [];\n r.touchData.startPosition = [null, null, null, null, null, null];\n r.touchData.startGPosition = null;\n r.touchData.didSelect = false;\n }\n\n if (e.touches.length < 2) {\n if (e.touches.length === 1) {\n // the old start global pos'n may not be the same finger that remains\n r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY];\n }\n\n r.pinching = false;\n r.redrawHint('eles', true);\n r.redraw();\n } //r.redraw();\n\n }, false); // fallback compatibility layer for ms pointer events\n\n if (typeof TouchEvent === 'undefined') {\n var pointers = [];\n\n var makeTouch = function makeTouch(e) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n force: 1,\n identifier: e.pointerId,\n pageX: e.pageX,\n pageY: e.pageY,\n radiusX: e.width / 2,\n radiusY: e.height / 2,\n screenX: e.screenX,\n screenY: e.screenY,\n target: e.target\n };\n };\n\n var makePointer = function makePointer(e) {\n return {\n event: e,\n touch: makeTouch(e)\n };\n };\n\n var addPointer = function addPointer(e) {\n pointers.push(makePointer(e));\n };\n\n var removePointer = function removePointer(e) {\n for (var i = 0; i < pointers.length; i++) {\n var p = pointers[i];\n\n if (p.event.pointerId === e.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n };\n\n var updatePointer = function updatePointer(e) {\n var p = pointers.filter(function (p) {\n return p.event.pointerId === e.pointerId;\n })[0];\n p.event = e;\n p.touch = makeTouch(e);\n };\n\n var addTouchesToEvent = function addTouchesToEvent(e) {\n e.touches = pointers.map(function (p) {\n return p.touch;\n });\n };\n\n var pointerIsMouse = function pointerIsMouse(e) {\n return e.pointerType === 'mouse' || e.pointerType === 4;\n };\n\n r.registerBinding(r.container, 'pointerdown', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n\n e.preventDefault();\n addPointer(e);\n addTouchesToEvent(e);\n touchstartHandler(e);\n });\n r.registerBinding(r.container, 'pointerup', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n\n removePointer(e);\n addTouchesToEvent(e);\n touchendHandler(e);\n });\n r.registerBinding(r.container, 'pointercancel', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n\n removePointer(e);\n addTouchesToEvent(e);\n touchcancelHandler(e);\n });\n r.registerBinding(r.container, 'pointermove', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n\n e.preventDefault();\n updatePointer(e);\n addTouchesToEvent(e);\n touchmoveHandler(e);\n });\n }\n };\n\n var BRp$2 = {};\n\n BRp$2.generatePolygon = function (name, points) {\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: points,\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding);\n }\n };\n };\n\n BRp$2.generateEllipse = function () {\n return this.nodeShapes['ellipse'] = {\n renderer: this,\n name: 'ellipse',\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n return checkInEllipse(x, y, width, height, centerX, centerY, padding);\n }\n };\n };\n\n BRp$2.generateRoundPolygon = function (name, points) {\n // Pre-compute control points\n // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute\n // the unit vectors.\n // For simplicity the layout will be:\n // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ]\n var allPoints = new Array(points.length * 2);\n\n for (var i = 0; i < points.length / 2; i++) {\n var sourceIndex = i * 2;\n var destIndex = void 0;\n\n if (i < points.length / 2 - 1) {\n destIndex = (i + 1) * 2;\n } else {\n destIndex = 0;\n }\n\n allPoints[i * 4] = points[sourceIndex];\n allPoints[i * 4 + 1] = points[sourceIndex + 1];\n var xDest = points[destIndex] - points[sourceIndex];\n var yDest = points[destIndex + 1] - points[sourceIndex + 1];\n var norm = Math.sqrt(xDest * xDest + yDest * yDest);\n allPoints[i * 4 + 2] = xDest / norm;\n allPoints[i * 4 + 3] = yDest / norm;\n }\n\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: allPoints,\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height);\n }\n };\n };\n\n BRp$2.generateRoundRectangle = function () {\n return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = {\n renderer: this,\n name: 'round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n var cornerRadius = getRoundRectangleRadius(width, height);\n var diam = cornerRadius * 2; // Check hBox\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n } // Check vBox\n\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n } // Check top left quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) {\n return true;\n } // Check top right quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) {\n return true;\n } // Check bottom right quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n } // Check bottom left quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n\n return false;\n }\n };\n };\n\n BRp$2.generateCutRectangle = function () {\n return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = {\n renderer: this,\n name: 'cut-rectangle',\n cornerLength: getCutRectangleCornerLength(),\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) {\n var cl = this.cornerLength;\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh; // points are in clockwise order, inner (imaginary) triangle pt on [4, 5]\n\n return {\n topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl],\n topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl],\n bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl],\n bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl]\n };\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY);\n var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]);\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) {\n return true;\n } // Check vBox\n\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) {\n return true;\n }\n\n var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY);\n return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft);\n }\n };\n };\n\n BRp$2.generateBarrel = function () {\n return this.nodeShapes['barrel'] = {\n renderer: this,\n name: 'barrel',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n // use two fixed t values for the bezier curve approximation\n var t0 = 0.15;\n var t1 = 0.5;\n var t2 = 0.85;\n var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY);\n\n var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) {\n // approximate curve pts based on the two t values\n var m0 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t0);\n var m1 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t1);\n var m2 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t2);\n return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]];\n };\n\n var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft));\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) {\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh;\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset;\n var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; // points are in clockwise order, inner (imaginary) control pt on [4, 5]\n\n var pts = {\n topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin],\n topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset],\n bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd],\n bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset]\n };\n pts.topLeft.isTop = true;\n pts.topRight.isTop = true;\n pts.bottomLeft.isBottom = true;\n pts.bottomRight.isBottom = true;\n return pts;\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset; // Check hBox\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) {\n return true;\n } // Check vBox\n\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) {\n return true;\n }\n\n var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY);\n\n var getCurveT = function getCurveT(x, y, curvePts) {\n var x0 = curvePts[4];\n var x1 = curvePts[2];\n var x2 = curvePts[0];\n var y0 = curvePts[5]; // var y1 = curvePts[ 3 ];\n\n var y2 = curvePts[1];\n var xMin = Math.min(x0, x2);\n var xMax = Math.max(x0, x2);\n var yMin = Math.min(y0, y2);\n var yMax = Math.max(y0, y2);\n\n if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) {\n var coeff = bezierPtsToQuadCoeff(x0, x1, x2);\n var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x);\n var validRoots = roots.filter(function (r) {\n return 0 <= r && r <= 1;\n });\n\n if (validRoots.length > 0) {\n return validRoots[0];\n }\n }\n\n return null;\n };\n\n var curveRegions = Object.keys(barrelCurvePts);\n\n for (var i = 0; i < curveRegions.length; i++) {\n var corner = curveRegions[i];\n var cornerPts = barrelCurvePts[corner];\n var t = getCurveT(x, y, cornerPts);\n\n if (t == null) {\n continue;\n }\n\n var y0 = cornerPts[5];\n var y1 = cornerPts[3];\n var y2 = cornerPts[1];\n var bezY = qbezierAt(y0, y1, y2, t);\n\n if (cornerPts.isTop && bezY <= y) {\n return true;\n }\n\n if (cornerPts.isBottom && y <= bezY) {\n return true;\n }\n }\n\n return false;\n }\n };\n };\n\n BRp$2.generateBottomRoundrectangle = function () {\n return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = {\n renderer: this,\n name: 'bottom-round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) {\n var topStartX = nodeX - (width / 2 + padding);\n var topStartY = nodeY - (height / 2 + padding);\n var topEndY = topStartY;\n var topEndX = nodeX + (width / 2 + padding);\n var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n\n if (topIntersections.length > 0) {\n return topIntersections;\n }\n\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) {\n var cornerRadius = getRoundRectangleRadius(width, height);\n var diam = 2 * cornerRadius; // Check hBox\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n } // Check vBox\n\n\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n } // check non-rounded top side\n\n\n var outerWidth = width / 2 + 2 * padding;\n var outerHeight = height / 2 + 2 * padding;\n var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight];\n\n if (pointInsidePolygonPoints(x, y, points)) {\n return true;\n } // Check bottom right quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n } // Check bottom left quarter circle\n\n\n if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n\n return false;\n }\n };\n };\n\n BRp$2.registerNodeShapes = function () {\n var nodeShapes = this.nodeShapes = {};\n var renderer = this;\n this.generateEllipse();\n this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0));\n nodeShapes['square'] = nodeShapes['rectangle'];\n this.generateRoundRectangle();\n this.generateCutRectangle();\n this.generateBarrel();\n this.generateBottomRoundrectangle();\n {\n var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0];\n this.generatePolygon('diamond', diamondPoints);\n this.generateRoundPolygon('round-diamond', diamondPoints);\n }\n this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0));\n this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0));\n var star5Points = new Array(20);\n {\n var outerPoints = generateUnitNgonPoints(5, 0);\n var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); // Outer radius is 1; inner radius of star is smaller\n\n var innerRadius = 0.5 * (3 - Math.sqrt(5));\n innerRadius *= 1.57;\n\n for (var i = 0; i < innerPoints.length / 2; i++) {\n innerPoints[i * 2] *= innerRadius;\n innerPoints[i * 2 + 1] *= innerRadius;\n }\n\n for (var i = 0; i < 20 / 4; i++) {\n star5Points[i * 4] = outerPoints[i * 2];\n star5Points[i * 4 + 1] = outerPoints[i * 2 + 1];\n star5Points[i * 4 + 2] = innerPoints[i * 2];\n star5Points[i * 4 + 3] = innerPoints[i * 2 + 1];\n }\n }\n star5Points = fitPolygonToSquare(star5Points);\n this.generatePolygon('star', star5Points);\n this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]);\n this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]);\n this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]);\n this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]);\n {\n var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1];\n this.generatePolygon('tag', tagPoints);\n this.generateRoundPolygon('round-tag', tagPoints);\n }\n\n nodeShapes.makePolygon = function (points) {\n // use caching on user-specified polygons so they are as fast as native shapes\n var key = points.join('$');\n var name = 'polygon-' + key;\n var shape;\n\n if (shape = this[name]) {\n // got cached shape\n return shape;\n } // create and cache new shape\n\n\n return renderer.generatePolygon(name, points);\n };\n };\n\n var BRp$1 = {};\n\n BRp$1.timeToRender = function () {\n return this.redrawTotalTime / this.redrawCount;\n };\n\n BRp$1.redraw = function (options) {\n options = options || staticEmptyObject();\n var r = this;\n\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = 0;\n }\n\n if (r.lastRedrawTime === undefined) {\n r.lastRedrawTime = 0;\n }\n\n if (r.lastDrawTime === undefined) {\n r.lastDrawTime = 0;\n }\n\n r.requestedFrame = true;\n r.renderOptions = options;\n };\n\n BRp$1.beforeRender = function (fn, priority) {\n // the renderer can't add tick callbacks when destroyed\n if (this.destroyed) {\n return;\n }\n\n if (priority == null) {\n error('Priority is not optional for beforeRender');\n }\n\n var cbs = this.beforeRenderCallbacks;\n cbs.push({\n fn: fn,\n priority: priority\n }); // higher priority callbacks executed first\n\n cbs.sort(function (a, b) {\n return b.priority - a.priority;\n });\n };\n\n var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) {\n var cbs = r.beforeRenderCallbacks;\n\n for (var i = 0; i < cbs.length; i++) {\n cbs[i].fn(willDraw, startTime);\n }\n };\n\n BRp$1.startRenderLoop = function () {\n var r = this;\n var cy = r.cy;\n\n if (r.renderLoopStarted) {\n return;\n } else {\n r.renderLoopStarted = true;\n }\n\n var renderFn = function renderFn(requestTime) {\n if (r.destroyed) {\n return;\n }\n\n if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) {\n beforeRenderCallbacks(r, true, requestTime);\n var startTime = performanceNow();\n r.render(r.renderOptions);\n var endTime = r.lastDrawTime = performanceNow();\n\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = endTime - startTime;\n }\n\n if (r.redrawCount === undefined) {\n r.redrawCount = 0;\n }\n\n r.redrawCount++;\n\n if (r.redrawTotalTime === undefined) {\n r.redrawTotalTime = 0;\n }\n\n var duration = endTime - startTime;\n r.redrawTotalTime += duration;\n r.lastRedrawTime = duration; // use a weighted average with a bias from the previous average so we don't spike so easily\n\n r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2;\n r.requestedFrame = false;\n } else {\n beforeRenderCallbacks(r, false, requestTime);\n }\n\n r.skipFrame = false;\n requestAnimationFrame(renderFn);\n };\n\n requestAnimationFrame(renderFn);\n };\n\n var BaseRenderer = function BaseRenderer(options) {\n this.init(options);\n };\n\n var BR = BaseRenderer;\n var BRp = BR.prototype;\n BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl'];\n\n BRp.init = function (options) {\n var r = this;\n r.options = options;\n r.cy = options.cy;\n var ctr = r.container = options.cy.container();\n var containerWindow = r.cy.window(); // prepend a stylesheet in the head such that\n\n if (containerWindow) {\n var document = containerWindow.document;\n var head = document.head;\n var stylesheetId = '__________cytoscape_stylesheet';\n var className = '__________cytoscape_container';\n var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null;\n\n if (ctr.className.indexOf(className) < 0) {\n ctr.className = (ctr.className || '') + ' ' + className;\n }\n\n if (!stylesheetAlreadyExists) {\n var stylesheet = document.createElement('style');\n stylesheet.id = stylesheetId;\n stylesheet.textContent = '.' + className + ' { position: relative; }';\n head.insertBefore(stylesheet, head.children[0]); // first so lowest priority\n }\n\n var computedStyle = containerWindow.getComputedStyle(ctr);\n var position = computedStyle.getPropertyValue('position');\n\n if (position === 'static') {\n warn('A Cytoscape container has style position:static and so can not use UI extensions properly');\n }\n }\n\n r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag\n\n r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; //--Pointer-related data\n\n r.hoverData = {\n down: null,\n last: null,\n downTime: null,\n triggerMode: null,\n dragging: false,\n initialPan: [null, null],\n capture: false\n };\n r.dragData = {\n possibleDragElements: []\n };\n r.touchData = {\n start: null,\n capture: false,\n // These 3 fields related to tap, taphold events\n startPosition: [null, null, null, null, null, null],\n singleTouchStartTime: null,\n singleTouchMoved: true,\n now: [null, null, null, null, null, null],\n earlier: [null, null, null, null, null, null]\n };\n r.redraws = 0;\n r.showFps = options.showFps;\n r.debug = options.debug;\n r.hideEdgesOnViewport = options.hideEdgesOnViewport;\n r.textureOnViewport = options.textureOnViewport;\n r.wheelSensitivity = options.wheelSensitivity;\n r.motionBlurEnabled = options.motionBlur; // on by default\n\n r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null;\n r.motionBlur = options.motionBlur; // for initial kick off\n\n r.motionBlurOpacity = options.motionBlurOpacity;\n r.motionBlurTransparency = 1 - r.motionBlurOpacity;\n r.motionBlurPxRatio = 1;\n r.mbPxRBlurry = 1; //0.8;\n\n r.minMbLowQualFrames = 4;\n r.fullQualityMb = false;\n r.clearedForMotionBlur = [];\n r.desktopTapThreshold = options.desktopTapThreshold;\n r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold;\n r.touchTapThreshold = options.touchTapThreshold;\n r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold;\n r.tapholdDuration = 500;\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.beforeRenderPriorities = {\n // higher priority execs before lower one\n animations: 400,\n eleCalcs: 300,\n eleTxrDeq: 200,\n lyrTxrDeq: 150,\n lyrTxrSkip: 100\n };\n r.registerNodeShapes();\n r.registerArrowShapes();\n r.registerCalculationListeners();\n };\n\n BRp.notify = function (eventName, eles) {\n var r = this;\n var cy = r.cy; // the renderer can't be notified after it's destroyed\n\n if (this.destroyed) {\n return;\n }\n\n if (eventName === 'init') {\n r.load();\n return;\n }\n\n if (eventName === 'destroy') {\n r.destroy();\n return;\n }\n\n if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') {\n r.invalidateCachedZSortedEles();\n }\n\n if (eventName === 'viewport') {\n r.redrawHint('select', true);\n }\n\n if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n }\n\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n this.startRenderLoop();\n this.redraw();\n };\n\n BRp.destroy = function () {\n var r = this;\n r.destroyed = true;\n r.cy.stopAnimationLoop();\n\n for (var i = 0; i < r.bindings.length; i++) {\n var binding = r.bindings[i];\n var b = binding;\n var tgt = b.target;\n (tgt.off || tgt.removeEventListener).apply(tgt, b.args);\n }\n\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.onUpdateEleCalcsFns = [];\n\n if (r.removeObserver) {\n r.removeObserver.disconnect();\n }\n\n if (r.styleObserver) {\n r.styleObserver.disconnect();\n }\n\n if (r.resizeObserver) {\n r.resizeObserver.disconnect();\n }\n\n if (r.labelCalcDiv) {\n try {\n document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef\n } catch (e) {// ie10 issue #1014\n }\n }\n };\n\n BRp.isHeadless = function () {\n return false;\n };\n\n [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) {\n extend(BRp, props);\n });\n\n var fullFpsTime = 1000 / 60; // assume 60 frames per second\n\n var defs = {\n setupDequeueing: function setupDequeueing(opts) {\n return function setupDequeueingImpl() {\n var self = this;\n var r = this.renderer;\n\n if (self.dequeueingSetup) {\n return;\n } else {\n self.dequeueingSetup = true;\n }\n\n var queueRedraw = debounce_1(function () {\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n }, opts.deqRedrawThreshold);\n\n var dequeue = function dequeue(willDraw, frameStartTime) {\n var startTime = performanceNow();\n var avgRenderTime = r.averageRedrawTime;\n var renderTime = r.lastRedrawTime;\n var deqd = [];\n var extent = r.cy.extent();\n var pixelRatio = r.getPixelRatio(); // if we aren't in a tick that causes a draw, then the rendered style\n // queue won't automatically be flushed before dequeueing starts\n\n if (!willDraw) {\n r.flushRenderedStyleQueue();\n }\n\n while (true) {\n // eslint-disable-line no-constant-condition\n var now = performanceNow();\n var duration = now - startTime;\n var frameDuration = now - frameStartTime;\n\n if (renderTime < fullFpsTime) {\n // if we're rendering faster than the ideal fps, then do dequeueing\n // during all of the remaining frame time\n var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0);\n\n if (frameDuration >= opts.deqFastCost * timeAvailable) {\n break;\n }\n } else {\n if (willDraw) {\n if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) {\n break;\n }\n } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) {\n break;\n }\n }\n\n var thisDeqd = opts.deq(self, pixelRatio, extent);\n\n if (thisDeqd.length > 0) {\n for (var i = 0; i < thisDeqd.length; i++) {\n deqd.push(thisDeqd[i]);\n }\n } else {\n break;\n }\n } // callbacks on dequeue\n\n\n if (deqd.length > 0) {\n opts.onDeqd(self, deqd);\n\n if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) {\n queueRedraw();\n }\n }\n };\n\n var priority = opts.priority || noop$1;\n r.beforeRender(dequeue, priority(self));\n };\n }\n };\n\n // Uses keys so elements may share the same cache.\n\n var ElementTextureCacheLookup = /*#__PURE__*/function () {\n function ElementTextureCacheLookup(getKey) {\n var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify;\n\n _classCallCheck(this, ElementTextureCacheLookup);\n\n this.idsByKey = new Map$2();\n this.keyForId = new Map$2();\n this.cachesByLvl = new Map$2();\n this.lvls = [];\n this.getKey = getKey;\n this.doesEleInvalidateKey = doesEleInvalidateKey;\n }\n\n _createClass(ElementTextureCacheLookup, [{\n key: \"getIdsFor\",\n value: function getIdsFor(key) {\n if (key == null) {\n error(\"Can not get id list for null key\");\n }\n\n var idsByKey = this.idsByKey;\n var ids = this.idsByKey.get(key);\n\n if (!ids) {\n ids = new Set$1();\n idsByKey.set(key, ids);\n }\n\n return ids;\n }\n }, {\n key: \"addIdForKey\",\n value: function addIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key).add(id);\n }\n }\n }, {\n key: \"deleteIdForKey\",\n value: function deleteIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key)[\"delete\"](id);\n }\n }\n }, {\n key: \"getNumberOfIdsForKey\",\n value: function getNumberOfIdsForKey(key) {\n if (key == null) {\n return 0;\n } else {\n return this.getIdsFor(key).size;\n }\n }\n }, {\n key: \"updateKeyMappingFor\",\n value: function updateKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var currKey = this.getKey(ele);\n this.deleteIdForKey(prevKey, id);\n this.addIdForKey(currKey, id);\n this.keyForId.set(id, currKey);\n }\n }, {\n key: \"deleteKeyMappingFor\",\n value: function deleteKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n this.deleteIdForKey(prevKey, id);\n this.keyForId[\"delete\"](id);\n }\n }, {\n key: \"keyHasChangedFor\",\n value: function keyHasChangedFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var newKey = this.getKey(ele);\n return prevKey !== newKey;\n }\n }, {\n key: \"isInvalid\",\n value: function isInvalid(ele) {\n return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele);\n }\n }, {\n key: \"getCachesAt\",\n value: function getCachesAt(lvl) {\n var cachesByLvl = this.cachesByLvl,\n lvls = this.lvls;\n var caches = cachesByLvl.get(lvl);\n\n if (!caches) {\n caches = new Map$2();\n cachesByLvl.set(lvl, caches);\n lvls.push(lvl);\n }\n\n return caches;\n }\n }, {\n key: \"getCache\",\n value: function getCache(key, lvl) {\n return this.getCachesAt(lvl).get(key);\n }\n }, {\n key: \"get\",\n value: function get(ele, lvl) {\n var key = this.getKey(ele);\n var cache = this.getCache(key, lvl); // getting for an element may need to add to the id list b/c eles can share keys\n\n if (cache != null) {\n this.updateKeyMappingFor(ele);\n }\n\n return cache;\n }\n }, {\n key: \"getForCachedKey\",\n value: function getForCachedKey(ele, lvl) {\n var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key\n\n var cache = this.getCache(key, lvl);\n return cache;\n }\n }, {\n key: \"hasCache\",\n value: function hasCache(key, lvl) {\n return this.getCachesAt(lvl).has(key);\n }\n }, {\n key: \"has\",\n value: function has(ele, lvl) {\n var key = this.getKey(ele);\n return this.hasCache(key, lvl);\n }\n }, {\n key: \"setCache\",\n value: function setCache(key, lvl, cache) {\n cache.key = key;\n this.getCachesAt(lvl).set(key, cache);\n }\n }, {\n key: \"set\",\n value: function set(ele, lvl, cache) {\n var key = this.getKey(ele);\n this.setCache(key, lvl, cache);\n this.updateKeyMappingFor(ele);\n }\n }, {\n key: \"deleteCache\",\n value: function deleteCache(key, lvl) {\n this.getCachesAt(lvl)[\"delete\"](key);\n }\n }, {\n key: \"delete\",\n value: function _delete(ele, lvl) {\n var key = this.getKey(ele);\n this.deleteCache(key, lvl);\n }\n }, {\n key: \"invalidateKey\",\n value: function invalidateKey(key) {\n var _this = this;\n\n this.lvls.forEach(function (lvl) {\n return _this.deleteCache(key, lvl);\n });\n } // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key)\n\n }, {\n key: \"invalidate\",\n value: function invalidate(ele) {\n var id = ele.id();\n var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key)\n\n this.deleteKeyMappingFor(ele);\n var entireKeyInvalidated = this.doesEleInvalidateKey(ele);\n\n if (entireKeyInvalidated) {\n // clear mapping for current key\n this.invalidateKey(key);\n }\n\n return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0;\n }\n }]);\n\n return ElementTextureCacheLookup;\n }();\n\n var minTxrH = 25; // the size of the texture cache for small height eles (special case)\n\n var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up\n\n var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render\n\n var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful)\n\n var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used\n\n var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps\n\n var defTxrWidth = 1024; // default/minimum texture width\n\n var maxTxrW = 1024; // the maximum width of a texture\n\n var maxTxrH = 1024; // the maximum height of a texture\n\n var minUtility = 0.2; // if usage of texture is less than this, it is retired\n\n var maxFullness = 0.8; // fullness of texture after which queue removal is checked\n\n var maxFullnessChecks = 10; // dequeued after this many checks\n\n var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\n\n var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time\n\n var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\n\n var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps\n\n var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\n\n var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch\n\n var getTxrReasons = {\n dequeue: 'dequeue',\n downscale: 'downscale',\n highQuality: 'highQuality'\n };\n var initDefaults = defaults$g({\n getKey: null,\n doesEleInvalidateKey: falsify,\n drawElement: null,\n getBoundingBox: null,\n getRotationPoint: null,\n getRotationOffset: null,\n isVisible: trueify,\n allowEdgeTxrCaching: true,\n allowParentTxrCaching: true\n });\n\n var ElementTextureCache = function ElementTextureCache(renderer, initOptions) {\n var self = this;\n self.renderer = renderer;\n self.onDequeues = [];\n var opts = initDefaults(initOptions);\n extend(self, opts);\n self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey);\n self.setupDequeueing();\n };\n\n var ETCp = ElementTextureCache.prototype;\n ETCp.reasons = getTxrReasons; // the list of textures in which new subtextures for elements can be placed\n\n ETCp.getTextureQueue = function (txrH) {\n var self = this;\n self.eleImgCaches = self.eleImgCaches || {};\n return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || [];\n }; // the list of usused textures which can be recycled (in use in texture queue)\n\n\n ETCp.getRetiredTextureQueue = function (txrH) {\n var self = this;\n var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {};\n var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || [];\n return rtxtrQ;\n }; // queue of element draw requests at different scale levels\n\n\n ETCp.getElementQueue = function () {\n var self = this;\n var q = self.eleCacheQueue = self.eleCacheQueue || new heap(function (a, b) {\n return b.reqs - a.reqs;\n });\n return q;\n }; // queue of element draw requests at different scale levels (element id lookup)\n\n\n ETCp.getElementKeyToQueue = function () {\n var self = this;\n var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {};\n return k2q;\n };\n\n ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) {\n var self = this;\n var r = this.renderer;\n var zoom = r.cy.zoom();\n var lookup = this.lookup;\n\n if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) {\n return null;\n }\n\n if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) {\n return null;\n }\n\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n }\n\n if (lvl < minLvl$1) {\n lvl = minLvl$1;\n } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) {\n return null;\n }\n\n var scale = Math.pow(2, lvl);\n var eleScaledH = bb.h * scale;\n var eleScaledW = bb.w * scale;\n var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale);\n\n if (!this.isVisible(ele, scaledLabelShown)) {\n return null;\n }\n\n var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric\n\n if (eleCache && eleCache.invalidated) {\n eleCache.invalidated = false;\n eleCache.texture.invalidatedWidth -= eleCache.width;\n }\n\n if (eleCache) {\n return eleCache;\n }\n\n var txrH; // which texture height this ele belongs to\n\n if (eleScaledH <= minTxrH) {\n txrH = minTxrH;\n } else if (eleScaledH <= txrStepH) {\n txrH = txrStepH;\n } else {\n txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH;\n }\n\n if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) {\n return null; // caching large elements is not efficient\n }\n\n var txrQ = self.getTextureQueue(txrH); // first try the second last one in case it has space at the end\n\n var txr = txrQ[txrQ.length - 2];\n\n var addNewTxr = function addNewTxr() {\n return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW);\n }; // try the last one if there is no second last one\n\n\n if (!txr) {\n txr = txrQ[txrQ.length - 1];\n } // if the last one doesn't exist, we need a first one\n\n\n if (!txr) {\n txr = addNewTxr();\n } // if there's no room in the current texture, we need a new one\n\n\n if (txr.width - txr.usedWidth < eleScaledW) {\n txr = addNewTxr();\n }\n\n var scalableFrom = function scalableFrom(otherCache) {\n return otherCache && otherCache.scaledLabelShown === scaledLabelShown;\n };\n\n var deqing = reason && reason === getTxrReasons.dequeue;\n var highQualityReq = reason && reason === getTxrReasons.highQuality;\n var downscaleReq = reason && reason === getTxrReasons.downscale;\n var higherCache; // the nearest cache with a higher level\n\n for (var l = lvl + 1; l <= maxLvl$1; l++) {\n var c = lookup.get(ele, l);\n\n if (c) {\n higherCache = c;\n break;\n }\n }\n\n var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null;\n\n var downscale = function downscale() {\n txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH);\n }; // reset ele area in texture\n\n\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH);\n\n if (scalableFrom(oneUpCache)) {\n // then we can relatively cheaply rescale the existing image w/o rerendering\n downscale();\n } else if (scalableFrom(higherCache)) {\n // then use the higher cache for now and queue the next level down\n // to cheaply scale towards the smaller level\n if (highQualityReq) {\n for (var _l = higherCache.level; _l > lvl; _l--) {\n oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale);\n }\n\n downscale();\n } else {\n self.queueElement(ele, higherCache.level - 1);\n return higherCache;\n }\n } else {\n var lowerCache; // the nearest cache with a lower level\n\n if (!deqing && !highQualityReq && !downscaleReq) {\n for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) {\n var _c = lookup.get(ele, _l2);\n\n if (_c) {\n lowerCache = _c;\n break;\n }\n }\n }\n\n if (scalableFrom(lowerCache)) {\n // then use the lower quality cache for now and queue the better one for later\n self.queueElement(ele, lvl);\n return lowerCache;\n }\n\n txr.context.translate(txr.usedWidth, 0);\n txr.context.scale(scale, scale);\n this.drawElement(txr.context, ele, bb, scaledLabelShown, false);\n txr.context.scale(1 / scale, 1 / scale);\n txr.context.translate(-txr.usedWidth, 0);\n }\n\n eleCache = {\n x: txr.usedWidth,\n texture: txr,\n level: lvl,\n scale: scale,\n width: eleScaledW,\n height: eleScaledH,\n scaledLabelShown: scaledLabelShown\n };\n txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing);\n txr.eleCaches.push(eleCache);\n lookup.set(ele, lvl, eleCache);\n self.checkTextureFullness(txr);\n return eleCache;\n };\n\n ETCp.invalidateElements = function (eles) {\n for (var i = 0; i < eles.length; i++) {\n this.invalidateElement(eles[i]);\n }\n };\n\n ETCp.invalidateElement = function (ele) {\n var self = this;\n var lookup = self.lookup;\n var caches = [];\n var invalid = lookup.isInvalid(ele);\n\n if (!invalid) {\n return; // override the invalidation request if the element key has not changed\n }\n\n for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) {\n var cache = lookup.getForCachedKey(ele, lvl);\n\n if (cache) {\n caches.push(cache);\n }\n }\n\n var noOtherElesUseCache = lookup.invalidate(ele);\n\n if (noOtherElesUseCache) {\n for (var i = 0; i < caches.length; i++) {\n var _cache = caches[i];\n var txr = _cache.texture; // remove space from the texture it belongs to\n\n txr.invalidatedWidth += _cache.width; // mark the cache as invalidated\n\n _cache.invalidated = true; // retire the texture if its utility is low\n\n self.checkTextureUtility(txr);\n }\n } // remove from queue since the old req was for the old state\n\n\n self.removeFromQueue(ele);\n };\n\n ETCp.checkTextureUtility = function (txr) {\n // invalidate all entries in the cache if the cache size is small\n if (txr.invalidatedWidth >= minUtility * txr.width) {\n this.retireTexture(txr);\n }\n };\n\n ETCp.checkTextureFullness = function (txr) {\n // if texture has been mostly filled and passed over several times, remove\n // it from the queue so we don't need to waste time looking at it to put new things\n var self = this;\n var txrQ = self.getTextureQueue(txr.height);\n\n if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) {\n removeFromArray(txrQ, txr);\n } else {\n txr.fullnessChecks++;\n }\n };\n\n ETCp.retireTexture = function (txr) {\n var self = this;\n var txrH = txr.height;\n var txrQ = self.getTextureQueue(txrH);\n var lookup = this.lookup; // retire the texture from the active / searchable queue:\n\n removeFromArray(txrQ, txr);\n txr.retired = true; // remove the refs from the eles to the caches:\n\n var eleCaches = txr.eleCaches;\n\n for (var i = 0; i < eleCaches.length; i++) {\n var eleCache = eleCaches[i];\n lookup.deleteCache(eleCache.key, eleCache.level);\n }\n\n clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future:\n\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n rtxtrQ.push(txr);\n };\n\n ETCp.addTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var txr = {};\n txrQ.push(txr);\n txr.eleCaches = [];\n txr.height = txrH;\n txr.width = Math.max(defTxrWidth, minW);\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height);\n txr.context = txr.canvas.getContext('2d');\n return txr;\n };\n\n ETCp.recycleTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n\n for (var i = 0; i < rtxtrQ.length; i++) {\n var txr = rtxtrQ[i];\n\n if (txr.width >= minW) {\n txr.retired = false;\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n clearArray(txr.eleCaches);\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(0, 0, txr.width, txr.height);\n removeFromArray(rtxtrQ, txr);\n txrQ.push(txr);\n return txr;\n }\n }\n };\n\n ETCp.queueElement = function (ele, lvl) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var existingReq = k2q[key];\n\n if (existingReq) {\n // use the max lvl b/c in between lvls are cheap to make\n existingReq.level = Math.max(existingReq.level, lvl);\n existingReq.eles.merge(ele);\n existingReq.reqs++;\n q.updateItem(existingReq);\n } else {\n var req = {\n eles: ele.spawn().merge(ele),\n level: lvl,\n reqs: 1,\n key: key\n };\n q.push(req);\n k2q[key] = req;\n }\n };\n\n ETCp.dequeue = function (pxRatio\n /*, extent*/\n ) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var dequeued = [];\n var lookup = self.lookup;\n\n for (var i = 0; i < maxDeqSize$1; i++) {\n if (q.size() > 0) {\n var req = q.pop();\n var key = req.key;\n var ele = req.eles[0]; // all eles have the same key\n\n var cacheExists = lookup.hasCache(ele, req.level); // clear out the key to req lookup\n\n k2q[key] = null; // dequeueing isn't necessary with an existing cache\n\n if (cacheExists) {\n continue;\n }\n\n dequeued.push(req);\n var bb = self.getBoundingBox(ele);\n self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue);\n } else {\n break;\n }\n }\n\n return dequeued;\n };\n\n ETCp.removeFromQueue = function (ele) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var req = k2q[key];\n\n if (req != null) {\n if (req.eles.length === 1) {\n // remove if last ele in the req\n // bring to front of queue\n req.reqs = MAX_INT$1;\n q.updateItem(req);\n q.pop(); // remove from queue\n\n k2q[key] = null; // remove from lookup map\n } else {\n // otherwise just remove ele from req\n req.eles.unmerge(ele);\n }\n }\n };\n\n ETCp.onDequeue = function (fn) {\n this.onDequeues.push(fn);\n };\n\n ETCp.offDequeue = function (fn) {\n removeFromArray(this.onDequeues, fn);\n };\n\n ETCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold$1,\n deqCost: deqCost$1,\n deqAvgCost: deqAvgCost$1,\n deqNoDrawCost: deqNoDrawCost$1,\n deqFastCost: deqFastCost$1,\n deq: function deq(self, pxRatio, extent) {\n return self.dequeue(pxRatio, extent);\n },\n onDeqd: function onDeqd(self, deqd) {\n for (var i = 0; i < self.onDequeues.length; i++) {\n var fn = self.onDequeues[i];\n fn(deqd);\n }\n },\n shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) {\n for (var i = 0; i < deqd.length; i++) {\n var eles = deqd[i].eles;\n\n for (var j = 0; j < eles.length; j++) {\n var bb = eles[j].boundingBox();\n\n if (boundingBoxesIntersect(bb, extent)) {\n return true;\n }\n }\n }\n\n return false;\n },\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.eleTxrDeq;\n }\n });\n\n var defNumLayers = 1; // default number of layers to use\n\n var minLvl = -4; // when scaling smaller than that we don't need to re-render\n\n var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful)\n\n var maxZoom = 3.99; // beyond this zoom level, layered textures are not used\n\n var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\n\n var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates\n\n var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\n\n var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time\n\n var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\n\n var deqFastCost = 0.9; // % of frame time to be used when >60fps\n\n var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch\n\n var invalidThreshold = 250; // time threshold for disabling b/c of invalidations\n\n var maxLayerArea = 4000 * 4000; // layers can't be bigger than this\n\n var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm)\n // var log = function(){ console.log.apply( console, arguments ); };\n\n var LayeredTextureCache = function LayeredTextureCache(renderer) {\n var self = this;\n var r = self.renderer = renderer;\n var cy = r.cy;\n self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ]\n\n self.firstGet = true;\n self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold;\n self.skipping = false;\n self.eleTxrDeqs = cy.collection();\n self.scheduleElementRefinement = debounce_1(function () {\n self.refineElementTextures(self.eleTxrDeqs);\n self.eleTxrDeqs.unmerge(self.eleTxrDeqs);\n }, refineEleDebounceTime);\n r.beforeRender(function (willDraw, now) {\n if (now - self.lastInvalidationTime <= invalidThreshold) {\n self.skipping = true;\n } else {\n self.skipping = false;\n }\n }, r.beforeRenderPriorities.lyrTxrSkip);\n\n var qSort = function qSort(a, b) {\n return b.reqs - a.reqs;\n };\n\n self.layersQueue = new heap(qSort);\n self.setupDequeueing();\n };\n\n var LTCp = LayeredTextureCache.prototype;\n var layerIdPool = 0;\n var MAX_INT = Math.pow(2, 53) - 1;\n\n LTCp.makeLayer = function (bb, lvl) {\n var scale = Math.pow(2, lvl);\n var w = Math.ceil(bb.w * scale);\n var h = Math.ceil(bb.h * scale);\n var canvas = this.renderer.makeOffscreenCanvas(w, h);\n var layer = {\n id: layerIdPool = ++layerIdPool % MAX_INT,\n bb: bb,\n level: lvl,\n width: w,\n height: h,\n canvas: canvas,\n context: canvas.getContext('2d'),\n eles: [],\n elesQueue: [],\n reqs: 0\n }; // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level);\n\n var cxt = layer.context;\n var dx = -layer.bb.x1;\n var dy = -layer.bb.y1; // do the transform on creation to save cycles (it's the same for all eles)\n\n cxt.scale(scale, scale);\n cxt.translate(dx, dy);\n return layer;\n };\n\n LTCp.getLayers = function (eles, pxRatio, lvl) {\n var self = this;\n var r = self.renderer;\n var cy = r.cy;\n var zoom = cy.zoom();\n var firstGet = self.firstGet;\n self.firstGet = false; // log('--\\nget layers with %s eles', eles.length);\n //log eles.map(function(ele){ return ele.id() }) );\n\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n\n if (lvl < minLvl) {\n lvl = minLvl;\n } else if (zoom >= maxZoom || lvl > maxLvl) {\n return null;\n }\n }\n\n self.validateLayersElesOrdering(lvl, eles);\n var layersByLvl = self.layersByLevel;\n var scale = Math.pow(2, lvl);\n var layers = layersByLvl[lvl] = layersByLvl[lvl] || [];\n var bb;\n var lvlComplete = self.levelIsComplete(lvl, eles);\n var tmpLayers;\n\n var checkTempLevels = function checkTempLevels() {\n var canUseAsTmpLvl = function canUseAsTmpLvl(l) {\n self.validateLayersElesOrdering(l, eles);\n\n if (self.levelIsComplete(l, eles)) {\n tmpLayers = layersByLvl[l];\n return true;\n }\n };\n\n var checkLvls = function checkLvls(dir) {\n if (tmpLayers) {\n return;\n }\n\n for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) {\n if (canUseAsTmpLvl(l)) {\n break;\n }\n }\n };\n\n checkLvls(+1);\n checkLvls(-1); // remove the invalid layers; they will be replaced as needed later in this function\n\n for (var i = layers.length - 1; i >= 0; i--) {\n var layer = layers[i];\n\n if (layer.invalid) {\n removeFromArray(layers, layer);\n }\n }\n };\n\n if (!lvlComplete) {\n // if the current level is incomplete, then use the closest, best quality layerset temporarily\n // and later queue the current layerset so we can get the proper quality level soon\n checkTempLevels();\n } else {\n // log('level complete, using existing layers\\n--');\n return layers;\n }\n\n var getBb = function getBb() {\n if (!bb) {\n bb = makeBoundingBox();\n\n for (var i = 0; i < eles.length; i++) {\n updateBoundingBox(bb, eles[i].boundingBox());\n }\n }\n\n return bb;\n };\n\n var makeLayer = function makeLayer(opts) {\n opts = opts || {};\n var after = opts.after;\n getBb();\n var area = bb.w * scale * (bb.h * scale);\n\n if (area > maxLayerArea) {\n return null;\n }\n\n var layer = self.makeLayer(bb, lvl);\n\n if (after != null) {\n var index = layers.indexOf(after) + 1;\n layers.splice(index, 0, layer);\n } else if (opts.insert === undefined || opts.insert) {\n // no after specified => first layer made so put at start\n layers.unshift(layer);\n } // if( tmpLayers ){\n //self.queueLayer( layer );\n // }\n\n\n return layer;\n };\n\n if (self.skipping && !firstGet) {\n // log('skip layers');\n return null;\n } // log('do layers');\n\n\n var layer = null;\n var maxElesPerLayer = eles.length / defNumLayers;\n var allowLazyQueueing = !firstGet;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; // log('look at ele', ele.id());\n\n var existingLayer = caches[lvl];\n\n if (existingLayer) {\n // reuse layer for later eles\n // log('reuse layer for', ele.id());\n layer = existingLayer;\n continue;\n }\n\n if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) {\n // log('make new layer for ele %s', ele.id());\n layer = makeLayer({\n insert: true,\n after: layer\n }); // if now layer can be built then we can't use layers at this level\n\n if (!layer) {\n return null;\n } // log('new layer with id %s', layer.id);\n\n }\n\n if (tmpLayers || allowLazyQueueing) {\n // log('queue ele %s in layer %s', ele.id(), layer.id);\n self.queueLayer(layer, ele);\n } else {\n // log('draw ele %s in layer %s', ele.id(), layer.id);\n self.drawEleInLayer(layer, ele, lvl, pxRatio);\n }\n\n layer.eles.push(ele);\n caches[lvl] = layer;\n } // log('--');\n\n\n if (tmpLayers) {\n // then we only queued the current layerset and can't draw it yet\n return tmpLayers;\n }\n\n if (allowLazyQueueing) {\n // log('lazy queue level', lvl);\n return null;\n }\n\n return layers;\n }; // a layer may want to use an ele cache of a higher level to avoid blurriness\n // so the layer level might not equal the ele level\n\n\n LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) {\n return lvl;\n };\n\n LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) {\n var self = this;\n var r = this.renderer;\n var context = layer.context;\n var bb = ele.boundingBox();\n\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n\n lvl = self.getEleLevelForLayerLevel(lvl, pxRatio);\n\n {\n r.setImgSmoothing(context, false);\n }\n\n {\n r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs);\n }\n\n {\n r.setImgSmoothing(context, true);\n }\n };\n\n LTCp.levelIsComplete = function (lvl, eles) {\n var self = this;\n var layers = self.layersByLevel[lvl];\n\n if (!layers || layers.length === 0) {\n return false;\n }\n\n var numElesInLayers = 0;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i]; // if there are any eles needed to be drawn yet, the level is not complete\n\n if (layer.reqs > 0) {\n return false;\n } // if the layer is invalid, the level is not complete\n\n\n if (layer.invalid) {\n return false;\n }\n\n numElesInLayers += layer.eles.length;\n } // we should have exactly the number of eles passed in to be complete\n\n\n if (numElesInLayers !== eles.length) {\n return false;\n }\n\n return true;\n };\n\n LTCp.validateLayersElesOrdering = function (lvl, eles) {\n var layers = this.layersByLevel[lvl];\n\n if (!layers) {\n return;\n } // if in a layer the eles are not in the same order, then the layer is invalid\n // (i.e. there is an ele in between the eles in the layer)\n\n\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var offset = -1; // find the offset\n\n for (var j = 0; j < eles.length; j++) {\n if (layer.eles[0] === eles[j]) {\n offset = j;\n break;\n }\n }\n\n if (offset < 0) {\n // then the layer has nonexistent elements and is invalid\n this.invalidateLayer(layer);\n continue;\n } // the eles in the layer must be in the same continuous order, else the layer is invalid\n\n\n var o = offset;\n\n for (var j = 0; j < layer.eles.length; j++) {\n if (layer.eles[j] !== eles[o + j]) {\n // log('invalidate based on ordering', layer.id);\n this.invalidateLayer(layer);\n break;\n }\n }\n }\n };\n\n LTCp.updateElementsInLayers = function (eles, update) {\n var self = this;\n var isEles = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each\n // layer itself along the way\n\n for (var i = 0; i < eles.length; i++) {\n var req = isEles ? null : eles[i];\n var ele = isEles ? eles[i] : eles[i].ele;\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};\n\n for (var l = minLvl; l <= maxLvl; l++) {\n var layer = caches[l];\n\n if (!layer) {\n continue;\n } // if update is a request from the ele cache, then it affects only\n // the matching level\n\n\n if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) {\n continue;\n }\n\n update(layer, ele, req);\n }\n }\n };\n\n LTCp.haveLayers = function () {\n var self = this;\n var haveLayers = false;\n\n for (var l = minLvl; l <= maxLvl; l++) {\n var layers = self.layersByLevel[l];\n\n if (layers && layers.length > 0) {\n haveLayers = true;\n break;\n }\n }\n\n return haveLayers;\n };\n\n LTCp.invalidateElements = function (eles) {\n var self = this;\n\n if (eles.length === 0) {\n return;\n }\n\n self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles');\n\n if (eles.length === 0 || !self.haveLayers()) {\n return;\n }\n\n self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) {\n self.invalidateLayer(layer);\n });\n };\n\n LTCp.invalidateLayer = function (layer) {\n // log('update invalidate layer time');\n this.lastInvalidationTime = performanceNow();\n\n if (layer.invalid) {\n return;\n } // save cycles\n\n\n var lvl = layer.level;\n var eles = layer.eles;\n var layers = this.layersByLevel[lvl]; // log('invalidate layer', layer.id );\n\n removeFromArray(layers, layer); // layer.eles = [];\n\n layer.elesQueue = [];\n layer.invalid = true;\n\n if (layer.replacement) {\n layer.replacement.invalid = true;\n }\n\n for (var i = 0; i < eles.length; i++) {\n var caches = eles[i]._private.rscratch.imgLayerCaches;\n\n if (caches) {\n caches[lvl] = null;\n }\n }\n };\n\n LTCp.refineElementTextures = function (eles) {\n var self = this; // log('refine', eles.length);\n\n self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) {\n var rLyr = layer.replacement;\n\n if (!rLyr) {\n rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level);\n rLyr.replaces = layer;\n rLyr.eles = layer.eles; // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level);\n }\n\n if (!rLyr.reqs) {\n for (var i = 0; i < rLyr.eles.length; i++) {\n self.queueLayer(rLyr, rLyr.eles[i]);\n } // log('queue replacement layer refinement', rLyr.id);\n\n }\n });\n };\n\n LTCp.enqueueElementRefinement = function (ele) {\n\n this.eleTxrDeqs.merge(ele);\n this.scheduleElementRefinement();\n };\n\n LTCp.queueLayer = function (layer, ele) {\n var self = this;\n var q = self.layersQueue;\n var elesQ = layer.elesQueue;\n var hasId = elesQ.hasId = elesQ.hasId || {}; // if a layer is going to be replaced, queuing is a waste of time\n\n if (layer.replacement) {\n return;\n }\n\n if (ele) {\n if (hasId[ele.id()]) {\n return;\n }\n\n elesQ.push(ele);\n hasId[ele.id()] = true;\n }\n\n if (layer.reqs) {\n layer.reqs++;\n q.updateItem(layer);\n } else {\n layer.reqs = 1;\n q.push(layer);\n }\n };\n\n LTCp.dequeue = function (pxRatio) {\n var self = this;\n var q = self.layersQueue;\n var deqd = [];\n var eleDeqs = 0;\n\n while (eleDeqs < maxDeqSize) {\n if (q.size() === 0) {\n break;\n }\n\n var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it\n\n if (layer.replacement) {\n // log('layer %s in queue skipped b/c it already has a replacement', layer.id);\n q.pop();\n continue;\n } // if this is a replacement layer that has been superceded, then forget it\n\n\n if (layer.replaces && layer !== layer.replaces.replacement) {\n // log('layer is no longer the most uptodate replacement; dequeued', layer.id)\n q.pop();\n continue;\n }\n\n if (layer.invalid) {\n // log('replacement layer %s is invalid; dequeued', layer.id);\n q.pop();\n continue;\n }\n\n var ele = layer.elesQueue.shift();\n\n if (ele) {\n // log('dequeue layer %s', layer.id);\n self.drawEleInLayer(layer, ele, layer.level, pxRatio);\n eleDeqs++;\n }\n\n if (deqd.length === 0) {\n // we need only one entry in deqd to queue redrawing etc\n deqd.push(true);\n } // if the layer has all its eles done, then remove from the queue\n\n\n if (layer.elesQueue.length === 0) {\n q.pop();\n layer.reqs = 0; // log('dequeue of layer %s complete', layer.id);\n // when a replacement layer is dequeued, it replaces the old layer in the level\n\n if (layer.replaces) {\n self.applyLayerReplacement(layer);\n }\n\n self.requestRedraw();\n }\n }\n\n return deqd;\n };\n\n LTCp.applyLayerReplacement = function (layer) {\n var self = this;\n var layersInLevel = self.layersByLevel[layer.level];\n var replaced = layer.replaces;\n var index = layersInLevel.indexOf(replaced); // if the replaced layer is not in the active list for the level, then replacing\n // refs would be a mistake (i.e. overwriting the true active layer)\n\n if (index < 0 || replaced.invalid) {\n // log('replacement layer would have no effect', layer.id);\n return;\n }\n\n layersInLevel[index] = layer; // replace level ref\n // replace refs in eles\n\n for (var i = 0; i < layer.eles.length; i++) {\n var _p = layer.eles[i]._private;\n var cache = _p.imgLayerCaches = _p.imgLayerCaches || {};\n\n if (cache) {\n cache[layer.level] = layer;\n }\n } // log('apply replacement layer %s over %s', layer.id, replaced.id);\n\n\n self.requestRedraw();\n };\n\n LTCp.requestRedraw = debounce_1(function () {\n var r = this.renderer;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n }, 100);\n LTCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold,\n deqCost: deqCost,\n deqAvgCost: deqAvgCost,\n deqNoDrawCost: deqNoDrawCost,\n deqFastCost: deqFastCost,\n deq: function deq(self, pxRatio) {\n return self.dequeue(pxRatio);\n },\n onDeqd: noop$1,\n shouldRedraw: trueify,\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.lyrTxrDeq;\n }\n });\n\n var CRp$a = {};\n var impl;\n\n function polygon(context, points) {\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n context.lineTo(pt.x, pt.y);\n }\n }\n\n function triangleBackcurve(context, points, controlPoint) {\n var firstPt;\n\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n\n if (i === 0) {\n firstPt = pt;\n }\n\n context.lineTo(pt.x, pt.y);\n }\n\n context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y);\n }\n\n function triangleTee(context, trianglePoints, teePoints) {\n if (context.beginPath) {\n context.beginPath();\n }\n\n var triPts = trianglePoints;\n\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n\n var teePts = teePoints;\n var firstTeePt = teePoints[0];\n context.moveTo(firstTeePt.x, firstTeePt.y);\n\n for (var i = 1; i < teePts.length; i++) {\n var pt = teePts[i];\n context.lineTo(pt.x, pt.y);\n }\n\n if (context.closePath) {\n context.closePath();\n }\n }\n\n function circleTriangle(context, trianglePoints, rx, ry, r) {\n if (context.beginPath) {\n context.beginPath();\n }\n\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n var triPts = trianglePoints;\n var firstTrPt = triPts[0];\n context.moveTo(firstTrPt.x, firstTrPt.y);\n\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n\n if (context.closePath) {\n context.closePath();\n }\n }\n\n function circle(context, rx, ry, r) {\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n }\n\n CRp$a.arrowShapeImpl = function (name) {\n return (impl || (impl = {\n 'polygon': polygon,\n 'triangle-backcurve': triangleBackcurve,\n 'triangle-tee': triangleTee,\n 'circle-triangle': circleTriangle,\n 'triangle-cross': triangleTee,\n 'circle': circle\n }))[name];\n };\n\n var CRp$9 = {};\n\n CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) {\n var r = this;\n\n if (ele.isNode()) {\n r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n } else {\n r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n }\n };\n\n CRp$9.drawElementOverlay = function (context, ele) {\n var r = this;\n\n if (ele.isNode()) {\n r.drawNodeOverlay(context, ele);\n } else {\n r.drawEdgeOverlay(context, ele);\n }\n };\n\n CRp$9.drawElementUnderlay = function (context, ele) {\n var r = this;\n\n if (ele.isNode()) {\n r.drawNodeUnderlay(context, ele);\n } else {\n r.drawEdgeUnderlay(context, ele);\n }\n };\n\n CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) {\n var r = this;\n var bb = eleTxrCache.getBoundingBox(ele);\n\n if (bb.w === 0 || bb.h === 0) {\n return;\n } // ignore zero size case\n\n\n var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason);\n\n if (eleCache != null) {\n var opacity = getOpacity(r, ele);\n\n if (opacity === 0) {\n return;\n }\n\n var theta = getRotation(r, ele);\n var x1 = bb.x1,\n y1 = bb.y1,\n w = bb.w,\n h = bb.h;\n var x, y, sx, sy, smooth;\n\n if (theta !== 0) {\n var rotPt = eleTxrCache.getRotationPoint(ele);\n sx = rotPt.x;\n sy = rotPt.y;\n context.translate(sx, sy);\n context.rotate(theta);\n smooth = r.getImgSmoothing(context);\n\n if (!smooth) {\n r.setImgSmoothing(context, true);\n }\n\n var off = eleTxrCache.getRotationOffset(ele);\n x = off.x;\n y = off.y;\n } else {\n x = x1;\n y = y1;\n }\n\n var oldGlobalAlpha;\n\n if (opacity !== 1) {\n oldGlobalAlpha = context.globalAlpha;\n context.globalAlpha = oldGlobalAlpha * opacity;\n }\n\n context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h);\n\n if (opacity !== 1) {\n context.globalAlpha = oldGlobalAlpha;\n }\n\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-sx, -sy);\n\n if (!smooth) {\n r.setImgSmoothing(context, false);\n }\n }\n } else {\n eleTxrCache.drawElement(context, ele); // direct draw fallback\n }\n };\n\n var getZeroRotation = function getZeroRotation() {\n return 0;\n };\n\n var getLabelRotation = function getLabelRotation(r, ele) {\n return r.getTextAngle(ele, null);\n };\n\n var getSourceLabelRotation = function getSourceLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'source');\n };\n\n var getTargetLabelRotation = function getTargetLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'target');\n };\n\n var getOpacity = function getOpacity(r, ele) {\n return ele.effectiveOpacity();\n };\n\n var getTextOpacity = function getTextOpacity(e, ele) {\n return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity();\n };\n\n CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) {\n var r = this;\n var _r$data = r.data,\n eleTxrCache = _r$data.eleTxrCache,\n lblTxrCache = _r$data.lblTxrCache,\n slbTxrCache = _r$data.slbTxrCache,\n tlbTxrCache = _r$data.tlbTxrCache;\n var bb = ele.boundingBox();\n var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null;\n\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n\n if (!extent || boundingBoxesIntersect(bb, extent)) {\n var isEdge = ele.isEdge();\n\n var badLine = ele.element()._private.rscratch.badLine;\n\n r.drawElementUnderlay(context, ele);\n r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity);\n\n if (!isEdge || !badLine) {\n r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity);\n }\n\n if (isEdge && !badLine) {\n r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity);\n r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity);\n }\n\n r.drawElementOverlay(context, ele);\n }\n };\n\n CRp$9.drawElements = function (context, eles) {\n var r = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawElement(context, ele);\n }\n };\n\n CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) {\n var r = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n };\n\n CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) {\n var r = this;\n\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n\n if (!ele.isNode()) {\n continue;\n }\n\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n };\n\n CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) {\n var r = this;\n var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio);\n\n if (layers) {\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var bb = layer.bb;\n\n if (bb.w === 0 || bb.h === 0) {\n continue;\n }\n\n context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h);\n }\n } else {\n // fall back on plain caching if no layers\n r.drawCachedElements(context, eles, pxRatio, extent);\n }\n };\n\n /* global Path2D */\n var CRp$8 = {};\n\n CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var rs = edge._private.rscratch;\n\n if (shouldDrawOpacity && !edge.visible()) {\n return;\n } // if bezier ctrl pts can not be calculated, then die\n\n\n if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {\n // isNaN in case edge is impossible and browser bugs (e.g. safari)\n return;\n }\n\n var bb;\n\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n\n var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1;\n var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1;\n var curveStyle = edge.pstyle('curve-style').value;\n var lineStyle = edge.pstyle('line-style').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var lineCap = edge.pstyle('line-cap').value;\n var effectiveLineOpacity = opacity * lineOpacity; // separate arrow opacity would require arrow-opacity property\n\n var effectiveArrowOpacity = opacity * lineOpacity;\n\n var drawLine = function drawLine() {\n var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity;\n\n if (curveStyle === 'straight-triangle') {\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgeTrianglePath(edge, context, rs.allpts);\n } else {\n context.lineWidth = edgeWidth;\n context.lineCap = lineCap;\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgePath(edge, context, rs.allpts, lineStyle);\n context.lineCap = 'butt'; // reset for other drawing functions\n }\n };\n\n var drawOverlay = function drawOverlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n\n r.drawEdgeOverlay(context, edge);\n };\n\n var drawUnderlay = function drawUnderlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n\n r.drawEdgeUnderlay(context, edge);\n };\n\n var drawArrows = function drawArrows() {\n var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity;\n r.drawArrowheads(context, edge, arrowOpacity);\n };\n\n var drawText = function drawText() {\n r.drawElementText(context, edge, null, drawLabel);\n };\n\n context.lineJoin = 'round';\n var ghost = edge.pstyle('ghost').value === 'yes';\n\n if (ghost) {\n var gx = edge.pstyle('ghost-offset-x').pfValue;\n var gy = edge.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = edge.pstyle('ghost-opacity').value;\n var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity;\n context.translate(gx, gy);\n drawLine(effectiveGhostOpacity);\n drawArrows(effectiveGhostOpacity);\n context.translate(-gx, -gy);\n }\n\n drawUnderlay();\n drawLine();\n drawArrows();\n drawOverlay();\n drawText();\n\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n };\n\n var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n\n return function (context, edge) {\n if (!edge.visible()) {\n return;\n }\n\n var opacity = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n\n if (opacity === 0) {\n return;\n }\n\n var r = this;\n var usePaths = r.usePaths();\n var rs = edge._private.rscratch;\n var padding = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var width = 2 * padding;\n var color = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n context.lineWidth = width;\n\n if (rs.edgeType === 'self' && !usePaths) {\n context.lineCap = 'butt';\n } else {\n context.lineCap = 'round';\n }\n\n r.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n r.drawEdgePath(edge, context, rs.allpts, 'solid');\n };\n };\n\n CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay');\n CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay');\n\n CRp$8.drawEdgePath = function (edge, context, pts, type) {\n var rs = edge._private.rscratch;\n var canvasCxt = context;\n var path;\n var pathCacheHit = false;\n var usePaths = this.usePaths();\n var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue;\n var lineDashOffset = edge.pstyle('line-dash-offset').pfValue;\n\n if (usePaths) {\n var pathCacheKey = pts.join('$');\n var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey;\n\n if (keyMatches) {\n path = context = rs.pathCache;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n rs.pathCacheKey = pathCacheKey;\n rs.pathCache = path;\n }\n }\n\n if (canvasCxt.setLineDash) {\n // for very outofdate browsers\n switch (type) {\n case 'dotted':\n canvasCxt.setLineDash([1, 1]);\n break;\n\n case 'dashed':\n canvasCxt.setLineDash(lineDashPattern);\n canvasCxt.lineDashOffset = lineDashOffset;\n break;\n\n case 'solid':\n canvasCxt.setLineDash([]);\n break;\n }\n }\n\n if (!pathCacheHit && !rs.badLine) {\n if (context.beginPath) {\n context.beginPath();\n }\n\n context.moveTo(pts[0], pts[1]);\n\n switch (rs.edgeType) {\n case 'bezier':\n case 'self':\n case 'compound':\n case 'multibezier':\n for (var i = 2; i + 3 < pts.length; i += 4) {\n context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]);\n }\n\n break;\n\n case 'straight':\n case 'segments':\n case 'haystack':\n for (var _i = 2; _i + 1 < pts.length; _i += 2) {\n context.lineTo(pts[_i], pts[_i + 1]);\n }\n\n break;\n }\n }\n\n context = canvasCxt;\n\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n } // reset any line dashes\n\n\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n };\n\n CRp$8.drawEdgeTrianglePath = function (edge, context, pts) {\n // use line stroke style for triangle fill style\n context.fillStyle = context.strokeStyle;\n var edgeWidth = edge.pstyle('width').pfValue;\n\n for (var i = 0; i + 1 < pts.length; i += 2) {\n var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]];\n var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);\n var normal = [vector[1] / length, -vector[0] / length];\n var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2];\n context.beginPath();\n context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]);\n context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]);\n context.lineTo(pts[i + 2], pts[i + 3]);\n context.closePath();\n context.fill();\n }\n };\n\n CRp$8.drawArrowheads = function (context, edge, opacity) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity);\n }\n\n this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity);\n this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity);\n\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity);\n }\n };\n\n CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) {\n if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) {\n return;\n }\n\n var self = this;\n var arrowShape = edge.pstyle(prefix + '-arrow-shape').value;\n\n if (arrowShape === 'none') {\n return;\n }\n\n var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled';\n var arrowFill = edge.pstyle(prefix + '-arrow-fill').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var edgeOpacity = edge.pstyle('opacity').value;\n\n if (opacity === undefined) {\n opacity = edgeOpacity;\n }\n\n var gco = context.globalCompositeOperation;\n\n if (opacity !== 1 || arrowFill === 'hollow') {\n // then extra clear is needed\n context.globalCompositeOperation = 'destination-out';\n self.colorFillStyle(context, 255, 255, 255, 1);\n self.colorStrokeStyle(context, 255, 255, 255, 1);\n self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, x, y, angle);\n context.globalCompositeOperation = gco;\n } // otherwise, the opaque arrow clears it for free :)\n\n\n var color = edge.pstyle(prefix + '-arrow-color').value;\n self.colorFillStyle(context, color[0], color[1], color[2], opacity);\n self.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, x, y, angle);\n };\n\n CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, x, y, angle) {\n var r = this;\n var usePaths = this.usePaths() && shape !== 'triangle-cross';\n var pathCacheHit = false;\n var path;\n var canvasContext = context;\n var translation = {\n x: x,\n y: y\n };\n var scale = edge.pstyle('arrow-scale').value;\n var size = this.getArrowWidth(edgeWidth, scale);\n var shapeImpl = r.arrowShapes[shape];\n\n if (usePaths) {\n var cache = r.arrowPathCache = r.arrowPathCache || [];\n var key = hashString(shape);\n var cachedPath = cache[key];\n\n if (cachedPath != null) {\n path = context = cachedPath;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n cache[key] = path;\n }\n }\n\n if (!pathCacheHit) {\n if (context.beginPath) {\n context.beginPath();\n }\n\n if (usePaths) {\n // store in the path cache with values easily manipulated later\n shapeImpl.draw(context, 1, 0, {\n x: 0,\n y: 0\n }, 1);\n } else {\n shapeImpl.draw(context, size, angle, translation, edgeWidth);\n }\n\n if (context.closePath) {\n context.closePath();\n }\n }\n\n context = canvasContext;\n\n if (usePaths) {\n // set transform to arrow position/orientation\n context.translate(x, y);\n context.rotate(angle);\n context.scale(size, size);\n }\n\n if (fill === 'filled' || fill === 'both') {\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n\n if (fill === 'hollow' || fill === 'both') {\n context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1);\n context.lineJoin = 'miter';\n\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n }\n\n if (usePaths) {\n // reset transform by applying inverse\n context.scale(1 / size, 1 / size);\n context.rotate(-angle);\n context.translate(-x, -y);\n }\n };\n\n var CRp$7 = {};\n\n CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) {\n // detect problematic cases for old browsers with bad images (cheaper than try-catch)\n if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) {\n return;\n }\n\n try {\n context.drawImage(img, ix, iy, iw, ih, x, y, w, h);\n } catch (e) {\n warn(e);\n }\n };\n\n CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) {\n var r = this;\n var pos = node.position();\n var nodeX = pos.x;\n var nodeY = pos.y;\n var styleObj = node.cy().style();\n var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj);\n var fit = getIndexedStyle(node, 'background-fit', 'value', index);\n var repeat = getIndexedStyle(node, 'background-repeat', 'value', index);\n var nodeW = node.width();\n var nodeH = node.height();\n var paddingX2 = node.padding() * 2;\n var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var rs = node._private.rscratch;\n var clip = getIndexedStyle(node, 'background-clip', 'value', index);\n var shouldClip = clip === 'node';\n var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity;\n var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index);\n var imgW = img.width || img.cachedW;\n var imgH = img.height || img.cachedH; // workaround for broken browsers like ie\n\n if (null == imgW || null == imgH) {\n document.body.appendChild(img); // eslint-disable-line no-undef\n\n imgW = img.cachedW = img.width || img.offsetWidth;\n imgH = img.cachedH = img.height || img.offsetHeight;\n document.body.removeChild(img); // eslint-disable-line no-undef\n }\n\n var w = imgW;\n var h = imgH;\n\n if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-width', 'units', index) === '%') {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW;\n } else {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index);\n }\n }\n\n if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-height', 'units', index) === '%') {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH;\n } else {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index);\n }\n }\n\n if (w === 0 || h === 0) {\n return; // no point in drawing empty image (and chrome is broken in this case)\n }\n\n if (fit === 'contain') {\n var scale = Math.min(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n } else if (fit === 'cover') {\n var scale = Math.max(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n }\n\n var x = nodeX - nodeTW / 2; // left\n\n var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index);\n var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index);\n\n if (posXUnits === '%') {\n x += (nodeTW - w) * posXPfVal;\n } else {\n x += posXPfVal;\n }\n\n var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index);\n var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index);\n\n if (offXUnits === '%') {\n x += (nodeTW - w) * offXPfVal;\n } else {\n x += offXPfVal;\n }\n\n var y = nodeY - nodeTH / 2; // top\n\n var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index);\n var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index);\n\n if (posYUnits === '%') {\n y += (nodeTH - h) * posYPfVal;\n } else {\n y += posYPfVal;\n }\n\n var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index);\n var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index);\n\n if (offYUnits === '%') {\n y += (nodeTH - h) * offYPfVal;\n } else {\n y += offYPfVal;\n }\n\n if (rs.pathCache) {\n x -= nodeX;\n y -= nodeY;\n nodeX = 0;\n nodeY = 0;\n }\n\n var gAlpha = context.globalAlpha;\n context.globalAlpha = imgOpacity;\n var smoothingEnabled = r.getImgSmoothing(context);\n var isSmoothingSwitched = false;\n\n if (smooth === 'no' && smoothingEnabled) {\n r.setImgSmoothing(context, false);\n isSmoothingSwitched = true;\n } else if (smooth === 'yes' && !smoothingEnabled) {\n r.setImgSmoothing(context, true);\n isSmoothingSwitched = true;\n }\n\n if (repeat === 'no-repeat') {\n if (shouldClip) {\n context.save();\n\n if (rs.pathCache) {\n context.clip(rs.pathCache);\n } else {\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH);\n context.clip();\n }\n }\n\n r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h);\n\n if (shouldClip) {\n context.restore();\n }\n } else {\n var pattern = context.createPattern(img, repeat);\n context.fillStyle = pattern;\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH);\n context.translate(x, y);\n context.fill();\n context.translate(-x, -y);\n }\n\n context.globalAlpha = gAlpha;\n\n if (isSmoothingSwitched) {\n r.setImgSmoothing(context, smoothingEnabled);\n }\n };\n\n var CRp$6 = {};\n\n CRp$6.eleTextBiggerThanMin = function (ele, scale) {\n if (!scale) {\n var zoom = ele.cy().zoom();\n var pxRatio = this.getPixelRatio();\n var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level\n\n scale = Math.pow(2, lvl);\n }\n\n var computedSize = ele.pstyle('font-size').pfValue * scale;\n var minSize = ele.pstyle('min-zoomed-font-size').pfValue;\n\n if (computedSize < minSize) {\n return false;\n }\n\n return true;\n };\n\n CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) {\n var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n\n if (force == null) {\n if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) {\n return;\n }\n } else if (force === false) {\n return;\n }\n\n if (ele.isNode()) {\n var label = ele.pstyle('label');\n\n if (!label || !label.value) {\n return;\n }\n\n var justification = r.getLabelJustification(ele);\n context.textAlign = justification;\n context.textBaseline = 'bottom';\n } else {\n var badLine = ele.element()._private.rscratch.badLine;\n\n var _label = ele.pstyle('label');\n\n var srcLabel = ele.pstyle('source-label');\n var tgtLabel = ele.pstyle('target-label');\n\n if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) {\n return;\n }\n\n context.textAlign = 'center';\n context.textBaseline = 'bottom';\n }\n\n var applyRotation = !shiftToOriginWithBb;\n var bb;\n\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n\n if (prefix == null) {\n r.drawText(context, ele, null, applyRotation, useEleOpacity);\n\n if (ele.isEdge()) {\n r.drawText(context, ele, 'source', applyRotation, useEleOpacity);\n r.drawText(context, ele, 'target', applyRotation, useEleOpacity);\n }\n } else {\n r.drawText(context, ele, prefix, applyRotation, useEleOpacity);\n }\n\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n };\n\n CRp$6.getFontCache = function (context) {\n var cache;\n this.fontCaches = this.fontCaches || [];\n\n for (var i = 0; i < this.fontCaches.length; i++) {\n cache = this.fontCaches[i];\n\n if (cache.context === context) {\n return cache;\n }\n }\n\n cache = {\n context: context\n };\n this.fontCaches.push(cache);\n return cache;\n }; // set up canvas context with font\n // returns transformed text string\n\n\n CRp$6.setupTextStyle = function (context, ele) {\n var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // Font style\n var labelStyle = ele.pstyle('font-style').strValue;\n var labelSize = ele.pstyle('font-size').pfValue + 'px';\n var labelFamily = ele.pstyle('font-family').strValue;\n var labelWeight = ele.pstyle('font-weight').strValue;\n var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1;\n var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity;\n var color = ele.pstyle('color').value;\n var outlineColor = ele.pstyle('text-outline-color').value;\n context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily;\n context.lineJoin = 'round'; // so text outlines aren't jagged\n\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity);\n }; // TODO ensure re-used\n\n\n function roundRect(ctx, x, y, width, height) {\n var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n ctx.fill();\n }\n\n CRp$6.getTextAngle = function (ele, prefix) {\n var theta;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var pdash = prefix ? prefix + '-' : '';\n var rotation = ele.pstyle(pdash + 'text-rotation');\n var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix);\n\n if (rotation.strValue === 'autorotate') {\n theta = ele.isEdge() ? textAngle : 0;\n } else if (rotation.strValue === 'none') {\n theta = 0;\n } else {\n theta = rotation.pfValue;\n }\n\n return theta;\n };\n\n CRp$6.drawText = function (context, ele, prefix) {\n var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1;\n\n if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) {\n return;\n } // use 'main' as an alias for the main label (i.e. null prefix)\n\n\n if (prefix === 'main') {\n prefix = null;\n }\n\n var textX = getPrefixedProperty(rscratch, 'labelX', prefix);\n var textY = getPrefixedProperty(rscratch, 'labelY', prefix);\n var orgTextX, orgTextY; // used for rotation\n\n var text = this.getLabelText(ele, prefix);\n\n if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) {\n this.setupTextStyle(context, ele, useEleOpacity);\n var pdash = prefix ? prefix + '-' : '';\n var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix);\n var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix);\n var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var halign = ele.pstyle('text-halign').value;\n var valign = ele.pstyle('text-valign').value;\n\n if (isEdge) {\n halign = 'center';\n valign = 'center';\n }\n\n textX += marginX;\n textY += marginY;\n var theta;\n\n if (!applyRotation) {\n theta = 0;\n } else {\n theta = this.getTextAngle(ele, prefix);\n }\n\n if (theta !== 0) {\n orgTextX = textX;\n orgTextY = textY;\n context.translate(orgTextX, orgTextY);\n context.rotate(theta);\n textX = 0;\n textY = 0;\n }\n\n switch (valign) {\n case 'top':\n break;\n\n case 'center':\n textY += textH / 2;\n break;\n\n case 'bottom':\n textY += textH;\n break;\n }\n\n var backgroundOpacity = ele.pstyle('text-background-opacity').value;\n var borderOpacity = ele.pstyle('text-border-opacity').value;\n var textBorderWidth = ele.pstyle('text-border-width').pfValue;\n var backgroundPadding = ele.pstyle('text-background-padding').pfValue;\n\n if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) {\n var bgX = textX - backgroundPadding;\n\n switch (halign) {\n case 'left':\n bgX -= textW;\n break;\n\n case 'center':\n bgX -= textW / 2;\n break;\n }\n\n var bgY = textY - textH - backgroundPadding;\n var bgW = textW + 2 * backgroundPadding;\n var bgH = textH + 2 * backgroundPadding;\n\n if (backgroundOpacity > 0) {\n var textFill = context.fillStyle;\n var textBackgroundColor = ele.pstyle('text-background-color').value;\n context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')';\n var styleShape = ele.pstyle('text-background-shape').strValue;\n\n if (styleShape.indexOf('round') === 0) {\n roundRect(context, bgX, bgY, bgW, bgH, 2);\n } else {\n context.fillRect(bgX, bgY, bgW, bgH);\n }\n\n context.fillStyle = textFill;\n }\n\n if (textBorderWidth > 0 && borderOpacity > 0) {\n var textStroke = context.strokeStyle;\n var textLineWidth = context.lineWidth;\n var textBorderColor = ele.pstyle('text-border-color').value;\n var textBorderStyle = ele.pstyle('text-border-style').value;\n context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')';\n context.lineWidth = textBorderWidth;\n\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (textBorderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n\n case 'double':\n context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders\n\n context.setLineDash([]);\n break;\n\n case 'solid':\n context.setLineDash([]);\n break;\n }\n }\n\n context.strokeRect(bgX, bgY, bgW, bgH);\n\n if (textBorderStyle === 'double') {\n var whiteWidth = textBorderWidth / 2;\n context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2);\n }\n\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n\n context.lineWidth = textLineWidth;\n context.strokeStyle = textStroke;\n }\n }\n\n var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle\n\n if (lineWidth > 0) {\n context.lineWidth = lineWidth;\n }\n\n if (ele.pstyle('text-wrap').value === 'wrap') {\n var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix);\n var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix);\n var halfTextW = textW / 2;\n var justification = this.getLabelJustification(ele);\n\n if (justification === 'auto') ; else if (halign === 'left') {\n // auto justification : right\n if (justification === 'left') {\n textX += -textW;\n } else if (justification === 'center') {\n textX += -halfTextW;\n } // else same as auto\n\n } else if (halign === 'center') {\n // auto justfication : center\n if (justification === 'left') {\n textX += -halfTextW;\n } else if (justification === 'right') {\n textX += halfTextW;\n } // else same as auto\n\n } else if (halign === 'right') {\n // auto justification : left\n if (justification === 'center') {\n textX += halfTextW;\n } else if (justification === 'right') {\n textX += textW;\n } // else same as auto\n\n }\n\n switch (valign) {\n case 'top':\n textY -= (lines.length - 1) * lineHeight;\n break;\n\n case 'center':\n case 'bottom':\n textY -= (lines.length - 1) * lineHeight;\n break;\n }\n\n for (var l = 0; l < lines.length; l++) {\n if (lineWidth > 0) {\n context.strokeText(lines[l], textX, textY);\n }\n\n context.fillText(lines[l], textX, textY);\n textY += lineHeight;\n }\n } else {\n if (lineWidth > 0) {\n context.strokeText(text, textX, textY);\n }\n\n context.fillText(text, textX, textY);\n }\n\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-orgTextX, -orgTextY);\n }\n }\n };\n\n /* global Path2D */\n var CRp$5 = {};\n\n CRp$5.drawNode = function (context, node, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var nodeWidth, nodeHeight;\n var _p = node._private;\n var rs = _p.rscratch;\n var pos = node.position();\n\n if (!number$1(pos.x) || !number$1(pos.y)) {\n return; // can't draw node with undefined position\n }\n\n if (shouldDrawOpacity && !node.visible()) {\n return;\n }\n\n var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1;\n var usePaths = r.usePaths();\n var path;\n var pathCacheHit = false;\n var padding = node.padding();\n nodeWidth = node.width() + 2 * padding;\n nodeHeight = node.height() + 2 * padding; //\n // setup shift\n\n var bb;\n\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n } //\n // load bg image\n\n\n var bgImgProp = node.pstyle('background-image');\n var urls = bgImgProp.value;\n var urlDefined = new Array(urls.length);\n var image = new Array(urls.length);\n var numImages = 0;\n\n for (var i = 0; i < urls.length; i++) {\n var url = urls[i];\n var defd = urlDefined[i] = url != null && url !== 'none';\n\n if (defd) {\n var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i);\n numImages++; // get image, and if not loaded then ask to redraw when later loaded\n\n image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () {\n _p.backgroundTimestamp = Date.now();\n node.emitAndNotify('background');\n });\n }\n } //\n // setup styles\n\n\n var darkness = node.pstyle('background-blacken').value;\n var borderWidth = node.pstyle('border-width').pfValue;\n var bgOpacity = node.pstyle('background-opacity').value * eleOpacity;\n var borderColor = node.pstyle('border-color').value;\n var borderStyle = node.pstyle('border-style').value;\n var borderOpacity = node.pstyle('border-opacity').value * eleOpacity;\n context.lineJoin = 'miter'; // so borders are square with the node shape\n\n var setupShapeColor = function setupShapeColor() {\n var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity;\n r.eleFillStyle(context, node, bgOpy);\n };\n\n var setupBorderColor = function setupBorderColor() {\n var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity;\n r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy);\n }; //\n // setup shape\n\n\n var styleShape = node.pstyle('shape').strValue;\n var shapePts = node.pstyle('shape-polygon-points').pfValue;\n\n if (usePaths) {\n context.translate(pos.x, pos.y);\n var pathCache = r.nodePathCache = r.nodePathCache || [];\n var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth);\n var cachedPath = pathCache[key];\n\n if (cachedPath != null) {\n path = cachedPath;\n pathCacheHit = true;\n rs.pathCache = path;\n } else {\n path = new Path2D();\n pathCache[key] = rs.pathCache = path;\n }\n }\n\n var drawShape = function drawShape() {\n if (!pathCacheHit) {\n var npos = pos;\n\n if (usePaths) {\n npos = {\n x: 0,\n y: 0\n };\n }\n\n r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight);\n }\n\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n };\n\n var drawImages = function drawImages() {\n var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var prevBging = _p.backgrounding;\n var totalCompleted = 0;\n\n for (var _i = 0; _i < image.length; _i++) {\n var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i);\n\n if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') {\n totalCompleted++;\n continue;\n }\n\n if (urlDefined[_i] && image[_i].complete && !image[_i].error) {\n totalCompleted++;\n r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity);\n }\n }\n\n _p.backgrounding = !(totalCompleted === numImages);\n\n if (prevBging !== _p.backgrounding) {\n // update style b/c :backgrounding state changed\n node.updateStyle(false);\n }\n };\n\n var drawPie = function drawPie() {\n var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity;\n\n if (r.hasPie(node)) {\n r.drawPie(context, node, pieOpacity); // redraw/restore path if steps after pie need it\n\n if (redrawShape) {\n if (!usePaths) {\n r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight);\n }\n }\n }\n };\n\n var darken = function darken() {\n var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity;\n var c = darkness > 0 ? 0 : 255;\n\n if (darkness !== 0) {\n r.colorFillStyle(context, c, c, c, opacity);\n\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n };\n\n var drawBorder = function drawBorder() {\n if (borderWidth > 0) {\n context.lineWidth = borderWidth;\n context.lineCap = 'butt';\n\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (borderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n\n case 'solid':\n case 'double':\n context.setLineDash([]);\n break;\n }\n }\n\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n\n if (borderStyle === 'double') {\n context.lineWidth = borderWidth / 3;\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n\n context.globalCompositeOperation = gco;\n } // reset in case we changed the border style\n\n\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n }\n };\n\n var drawOverlay = function drawOverlay() {\n if (shouldDrawOverlay) {\n r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n\n var drawUnderlay = function drawUnderlay() {\n if (shouldDrawOverlay) {\n r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n\n var drawText = function drawText() {\n r.drawElementText(context, node, null, drawLabel);\n };\n\n var ghost = node.pstyle('ghost').value === 'yes';\n\n if (ghost) {\n var gx = node.pstyle('ghost-offset-x').pfValue;\n var gy = node.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = node.pstyle('ghost-opacity').value;\n var effGhostOpacity = ghostOpacity * eleOpacity;\n context.translate(gx, gy);\n setupShapeColor(ghostOpacity * bgOpacity);\n drawShape();\n drawImages(effGhostOpacity, true);\n setupBorderColor(ghostOpacity * borderOpacity);\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawImages(effGhostOpacity, false);\n darken(effGhostOpacity);\n context.translate(-gx, -gy);\n }\n\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n\n drawUnderlay();\n\n if (usePaths) {\n context.translate(pos.x, pos.y);\n }\n\n setupShapeColor();\n drawShape();\n drawImages(eleOpacity, true);\n setupBorderColor();\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawImages(eleOpacity, false);\n darken();\n\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n\n drawText();\n drawOverlay(); //\n // clean up shift\n\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n };\n\n var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n\n return function (context, node, pos, nodeWidth, nodeHeight) {\n var r = this;\n\n if (!node.visible()) {\n return;\n }\n\n var padding = node.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var opacity = node.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n var color = node.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n var shape = node.pstyle(\"\".concat(overlayOrUnderlay, \"-shape\")).value;\n\n if (opacity > 0) {\n pos = pos || node.position();\n\n if (nodeWidth == null || nodeHeight == null) {\n var _padding = node.padding();\n\n nodeWidth = node.width() + 2 * _padding;\n nodeHeight = node.height() + 2 * _padding;\n }\n\n r.colorFillStyle(context, color[0], color[1], color[2], opacity);\n r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2);\n context.fill();\n }\n };\n };\n\n CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay');\n CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece?\n\n CRp$5.hasPie = function (node) {\n node = node[0]; // ensure ele ref\n\n return node._private.hasPie;\n };\n\n CRp$5.drawPie = function (context, node, nodeOpacity, pos) {\n node = node[0]; // ensure ele ref\n\n pos = pos || node.position();\n var cyStyle = node.cy().style();\n var pieSize = node.pstyle('pie-size');\n var x = pos.x;\n var y = pos.y;\n var nodeW = node.width();\n var nodeH = node.height();\n var radius = Math.min(nodeW, nodeH) / 2; // must fit in node\n\n var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1]\n\n var usePaths = this.usePaths();\n\n if (usePaths) {\n x = 0;\n y = 0;\n }\n\n if (pieSize.units === '%') {\n radius = radius * pieSize.pfValue;\n } else if (pieSize.pfValue !== undefined) {\n radius = pieSize.pfValue / 2;\n }\n\n for (var i = 1; i <= cyStyle.pieBackgroundN; i++) {\n // 1..N\n var size = node.pstyle('pie-' + i + '-background-size').value;\n var color = node.pstyle('pie-' + i + '-background-color').value;\n var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity;\n var percent = size / 100; // map integer range [0, 100] to [0, 1]\n // percent can't push beyond 1\n\n if (percent + lastPercent > 1) {\n percent = 1 - lastPercent;\n }\n\n var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise\n\n var angleDelta = 2 * Math.PI * percent;\n var angleEnd = angleStart + angleDelta; // ignore if\n // - zero size\n // - we're already beyond the full circle\n // - adding the current slice would go beyond the full circle\n\n if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) {\n continue;\n }\n\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, angleStart, angleEnd);\n context.closePath();\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n context.fill();\n lastPercent += percent;\n }\n };\n\n var CRp$4 = {};\n var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined';\n\n CRp$4.getPixelRatio = function () {\n var context = this.data.contexts[0];\n\n if (this.forcedPixelRatio != null) {\n return this.forcedPixelRatio;\n }\n\n var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;\n return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef\n };\n\n CRp$4.paintCache = function (context) {\n var caches = this.paintCaches = this.paintCaches || [];\n var needToCreateCache = true;\n var cache;\n\n for (var i = 0; i < caches.length; i++) {\n cache = caches[i];\n\n if (cache.context === context) {\n needToCreateCache = false;\n break;\n }\n }\n\n if (needToCreateCache) {\n cache = {\n context: context\n };\n caches.push(cache);\n }\n\n return cache;\n };\n\n CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) {\n var gradientStyle;\n var usePaths = this.usePaths();\n var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value,\n positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue;\n\n if (fill === 'radial-gradient') {\n if (ele.isEdge()) {\n var start = ele.sourceEndpoint(),\n end = ele.targetEndpoint(),\n mid = ele.midpoint();\n var d1 = dist(start, mid);\n var d2 = dist(end, mid);\n gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2));\n } else {\n var pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n width = ele.paddedWidth(),\n height = ele.paddedHeight();\n gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height));\n }\n } else {\n if (ele.isEdge()) {\n var _start = ele.sourceEndpoint(),\n _end = ele.targetEndpoint();\n\n gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y);\n } else {\n var _pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n _width = ele.paddedWidth(),\n _height = ele.paddedHeight(),\n halfWidth = _width / 2,\n halfHeight = _height / 2;\n\n var direction = ele.pstyle('background-gradient-direction').value;\n\n switch (direction) {\n case 'to-bottom':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight);\n break;\n\n case 'to-top':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight);\n break;\n\n case 'to-left':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y);\n break;\n\n case 'to-right':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y);\n break;\n\n case 'to-bottom-right':\n case 'to-right-bottom':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight);\n break;\n\n case 'to-top-right':\n case 'to-right-top':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight);\n break;\n\n case 'to-bottom-left':\n case 'to-left-bottom':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight);\n break;\n\n case 'to-top-left':\n case 'to-left-top':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight);\n break;\n }\n }\n }\n\n if (!gradientStyle) return null; // invalid gradient style\n\n var hasPositions = positions.length === colors.length;\n var length = colors.length;\n\n for (var i = 0; i < length; i++) {\n gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')');\n }\n\n return gradientStyle;\n };\n\n CRp$4.gradientFillStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n\n context.fillStyle = gradientStyle;\n };\n\n CRp$4.colorFillStyle = function (context, r, g, b, a) {\n context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching\n // var cache = this.paintCache(context);\n // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // if( cache.fillStyle !== fillStyle ){\n // context.fillStyle = cache.fillStyle = fillStyle;\n // }\n };\n\n CRp$4.eleFillStyle = function (context, ele, opacity) {\n var backgroundFill = ele.pstyle('background-fill').value;\n\n if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') {\n this.gradientFillStyle(context, ele, backgroundFill, opacity);\n } else {\n var backgroundColor = ele.pstyle('background-color').value;\n this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity);\n }\n };\n\n CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n\n context.strokeStyle = gradientStyle;\n };\n\n CRp$4.colorStrokeStyle = function (context, r, g, b, a) {\n context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching\n // var cache = this.paintCache(context);\n // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // if( cache.strokeStyle !== strokeStyle ){\n // context.strokeStyle = cache.strokeStyle = strokeStyle;\n // }\n };\n\n CRp$4.eleStrokeStyle = function (context, ele, opacity) {\n var lineFill = ele.pstyle('line-fill').value;\n\n if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') {\n this.gradientStrokeStyle(context, ele, lineFill, opacity);\n } else {\n var lineColor = ele.pstyle('line-color').value;\n this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity);\n }\n }; // Resize canvas\n\n\n CRp$4.matchCanvasSize = function (container) {\n var r = this;\n var data = r.data;\n var bb = r.findContainerClientCoords();\n var width = bb[2];\n var height = bb[3];\n var pixelRatio = r.getPixelRatio();\n var mbPxRatio = r.motionBlurPxRatio;\n\n if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) {\n pixelRatio = mbPxRatio;\n }\n\n var canvasWidth = width * pixelRatio;\n var canvasHeight = height * pixelRatio;\n var canvas;\n\n if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) {\n return; // save cycles if same\n }\n\n r.fontCaches = null; // resizing resets the style\n\n var canvasContainer = data.canvasContainer;\n canvasContainer.style.width = width + 'px';\n canvasContainer.style.height = height + 'px';\n\n for (var i = 0; i < r.CANVAS_LAYERS; i++) {\n canvas = data.canvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n for (var i = 0; i < r.BUFFER_COUNT; i++) {\n canvas = data.bufferCanvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n r.textureMult = 1;\n\n if (pixelRatio <= 1) {\n canvas = data.bufferCanvases[r.TEXTURE_BUFFER];\n r.textureMult = 2;\n canvas.width = canvasWidth * r.textureMult;\n canvas.height = canvasHeight * r.textureMult;\n }\n\n r.canvasWidth = canvasWidth;\n r.canvasHeight = canvasHeight;\n };\n\n CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) {\n this.render({\n forcedContext: cxt,\n forcedZoom: zoom,\n forcedPan: pan,\n drawAllLayers: true,\n forcedPxRatio: pxRatio\n });\n };\n\n CRp$4.render = function (options) {\n options = options || staticEmptyObject();\n var forcedContext = options.forcedContext;\n var drawAllLayers = options.drawAllLayers;\n var drawOnlyNodeLayer = options.drawOnlyNodeLayer;\n var forcedZoom = options.forcedZoom;\n var forcedPan = options.forcedPan;\n var r = this;\n var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio;\n var cy = r.cy;\n var data = r.data;\n var needDraw = data.canvasNeedsRedraw;\n var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming);\n var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur;\n var mbPxRatio = r.motionBlurPxRatio;\n var hasCompoundNodes = cy.hasCompoundNodes();\n var inNodeDragGesture = r.hoverData.draggingEles;\n var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false;\n motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection;\n var motionBlurFadeEffect = motionBlur;\n\n if (!forcedContext) {\n if (r.prevPxRatio !== pixelRatio) {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n\n r.prevPxRatio = pixelRatio;\n }\n\n if (!forcedContext && r.motionBlurTimeout) {\n clearTimeout(r.motionBlurTimeout);\n }\n\n if (motionBlur) {\n if (r.mbFrames == null) {\n r.mbFrames = 0;\n }\n\n r.mbFrames++;\n\n if (r.mbFrames < 3) {\n // need several frames before even high quality motionblur\n motionBlurFadeEffect = false;\n } // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing)\n\n\n if (r.mbFrames > r.minMbLowQualFrames) {\n //r.fullQualityMb = false;\n r.motionBlurPxRatio = r.mbPxRBlurry;\n }\n }\n\n if (r.clearingMotionBlur) {\n r.motionBlurPxRatio = 1;\n } // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame\n // because a rogue async texture frame would clear needDraw\n\n\n if (r.textureDrawLastFrame && !textureDraw) {\n needDraw[r.NODE] = true;\n needDraw[r.SELECT_BOX] = true;\n }\n\n var style = cy.style();\n var zoom = cy.zoom();\n var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom;\n var pan = cy.pan();\n var effectivePan = {\n x: pan.x,\n y: pan.y\n };\n var vp = {\n zoom: zoom,\n pan: {\n x: pan.x,\n y: pan.y\n }\n };\n var prevVp = r.prevViewport;\n var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed)\n\n if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) {\n r.motionBlurPxRatio = 1;\n }\n\n if (forcedPan) {\n effectivePan = forcedPan;\n } // apply pixel ratio\n\n\n effectiveZoom *= pixelRatio;\n effectivePan.x *= pixelRatio;\n effectivePan.y *= pixelRatio;\n var eles = r.getCachedZSortedEles();\n\n function mbclear(context, x, y, w, h) {\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency);\n context.fillRect(x, y, w, h);\n context.globalCompositeOperation = gco;\n }\n\n function setContextTransform(context, clear) {\n var ePan, eZoom, w, h;\n\n if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) {\n ePan = {\n x: pan.x * mbPxRatio,\n y: pan.y * mbPxRatio\n };\n eZoom = zoom * mbPxRatio;\n w = r.canvasWidth * mbPxRatio;\n h = r.canvasHeight * mbPxRatio;\n } else {\n ePan = effectivePan;\n eZoom = effectiveZoom;\n w = r.canvasWidth;\n h = r.canvasHeight;\n }\n\n context.setTransform(1, 0, 0, 1, 0, 0);\n\n if (clear === 'motionBlur') {\n mbclear(context, 0, 0, w, h);\n } else if (!forcedContext && (clear === undefined || clear)) {\n context.clearRect(0, 0, w, h);\n }\n\n if (!drawAllLayers) {\n context.translate(ePan.x, ePan.y);\n context.scale(eZoom, eZoom);\n }\n\n if (forcedPan) {\n context.translate(forcedPan.x, forcedPan.y);\n }\n\n if (forcedZoom) {\n context.scale(forcedZoom, forcedZoom);\n }\n }\n\n if (!textureDraw) {\n r.textureDrawLastFrame = false;\n }\n\n if (textureDraw) {\n r.textureDrawLastFrame = true;\n\n if (!r.textureCache) {\n r.textureCache = {};\n r.textureCache.bb = cy.mutableElements().boundingBox();\n r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER];\n var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER];\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult);\n r.render({\n forcedContext: cxt,\n drawOnlyNodeLayer: true,\n forcedPxRatio: pixelRatio * r.textureMult\n });\n var vp = r.textureCache.viewport = {\n zoom: cy.zoom(),\n pan: cy.pan(),\n width: r.canvasWidth,\n height: r.canvasHeight\n };\n vp.mpan = {\n x: (0 - vp.pan.x) / vp.zoom,\n y: (0 - vp.pan.y) / vp.zoom\n };\n }\n\n needDraw[r.DRAG] = false;\n needDraw[r.NODE] = false;\n var context = data.contexts[r.NODE];\n var texture = r.textureCache.texture;\n var vp = r.textureCache.viewport;\n context.setTransform(1, 0, 0, 1, 0, 0);\n\n if (motionBlur) {\n mbclear(context, 0, 0, vp.width, vp.height);\n } else {\n context.clearRect(0, 0, vp.width, vp.height);\n }\n\n var outsideBgColor = style.core('outside-texture-bg-color').value;\n var outsideBgOpacity = style.core('outside-texture-bg-opacity').value;\n r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity);\n context.fillRect(0, 0, vp.width, vp.height);\n var zoom = cy.zoom();\n setContextTransform(context, false);\n context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n } else if (r.textureOnViewport && !forcedContext) {\n // clear the cache since we don't need it\n r.textureCache = null;\n }\n\n var extent = cy.extent();\n var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated();\n var hideEdges = r.hideEdgesOnViewport && vpManip;\n var needMbClear = [];\n needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur;\n\n if (needMbClear[r.NODE]) {\n r.clearedForMotionBlur[r.NODE] = true;\n }\n\n needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur;\n\n if (needMbClear[r.DRAG]) {\n r.clearedForMotionBlur[r.DRAG] = true;\n }\n\n if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) {\n var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]);\n var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined;\n setContextTransform(context, clear);\n\n if (hideEdges) {\n r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent);\n } else {\n r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent);\n }\n\n if (r.debug) {\n r.drawDebugPoints(context, eles.nondrag);\n }\n\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.NODE] = false;\n }\n }\n\n if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) {\n var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]);\n setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined);\n\n if (hideEdges) {\n r.drawCachedNodes(context, eles.drag, pixelRatio, extent);\n } else {\n r.drawCachedElements(context, eles.drag, pixelRatio, extent);\n }\n\n if (r.debug) {\n r.drawDebugPoints(context, eles.drag);\n }\n\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.DRAG] = false;\n }\n }\n\n if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) {\n var context = forcedContext || data.contexts[r.SELECT_BOX];\n setContextTransform(context);\n\n if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) {\n var zoom = r.cy.zoom();\n var borderWidth = style.core('selection-box-border-width').value / zoom;\n context.lineWidth = borderWidth;\n context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n\n if (borderWidth > 0) {\n context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n }\n }\n\n if (data.bgActivePosistion && !r.hoverData.selecting) {\n var zoom = r.cy.zoom();\n var pos = data.bgActivePosistion;\n context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')';\n context.beginPath();\n context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI);\n context.fill();\n }\n\n var timeToRender = r.lastRedrawTime;\n\n if (r.showFps && timeToRender) {\n timeToRender = Math.round(timeToRender);\n var fps = Math.round(1000 / timeToRender);\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.fillStyle = 'rgba(255, 0, 0, 0.75)';\n context.strokeStyle = 'rgba(255, 0, 0, 0.75)';\n context.lineWidth = 1;\n context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20);\n var maxFps = 60;\n context.strokeRect(0, 30, 250, 20);\n context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20);\n }\n\n if (!drawAllLayers) {\n needDraw[r.SELECT_BOX] = false;\n }\n } // motionblur: blit rendered blurry frames\n\n\n if (motionBlur && mbPxRatio !== 1) {\n var cxtNode = data.contexts[r.NODE];\n var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE];\n var cxtDrag = data.contexts[r.DRAG];\n var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG];\n\n var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) {\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n\n if (needClear || !motionBlurFadeEffect) {\n cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n } else {\n mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight);\n }\n\n var pxr = mbPxRatio;\n cxt.drawImage(txt, // img\n 0, 0, // sx, sy\n r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh\n 0, 0, // x, y\n r.canvasWidth, r.canvasHeight // w, h\n );\n };\n\n if (needDraw[r.NODE] || needMbClear[r.NODE]) {\n drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]);\n needDraw[r.NODE] = false;\n }\n\n if (needDraw[r.DRAG] || needMbClear[r.DRAG]) {\n drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]);\n needDraw[r.DRAG] = false;\n }\n }\n\n r.prevViewport = vp;\n\n if (r.clearingMotionBlur) {\n r.clearingMotionBlur = false;\n r.motionBlurCleared = true;\n r.motionBlur = true;\n }\n\n if (motionBlur) {\n r.motionBlurTimeout = setTimeout(function () {\n r.motionBlurTimeout = null;\n r.clearedForMotionBlur[r.NODE] = false;\n r.clearedForMotionBlur[r.DRAG] = false;\n r.motionBlur = false;\n r.clearingMotionBlur = !textureDraw;\n r.mbFrames = 0;\n needDraw[r.NODE] = true;\n needDraw[r.DRAG] = true;\n r.redraw();\n }, motionBlurDelay);\n }\n\n if (!forcedContext) {\n cy.emit('render');\n }\n };\n\n var CRp$3 = {}; // @O Polygon drawing\n\n CRp$3.drawPolygonPath = function (context, x, y, width, height, points) {\n var halfW = width / 2;\n var halfH = height / 2;\n\n if (context.beginPath) {\n context.beginPath();\n }\n\n context.moveTo(x + halfW * points[0], y + halfH * points[1]);\n\n for (var i = 1; i < points.length / 2; i++) {\n context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]);\n }\n\n context.closePath();\n };\n\n CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) {\n var halfW = width / 2;\n var halfH = height / 2;\n var cornerRadius = getRoundPolygonRadius(width, height);\n\n if (context.beginPath) {\n context.beginPath();\n }\n\n for (var _i = 0; _i < points.length / 4; _i++) {\n var sourceUv = void 0,\n destUv = void 0;\n\n if (_i === 0) {\n sourceUv = points.length - 2;\n } else {\n sourceUv = _i * 4 - 2;\n }\n\n destUv = _i * 4 + 2;\n var px = x + halfW * points[_i * 4];\n var py = y + halfH * points[_i * 4 + 1];\n var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1];\n var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2);\n var cp0x = px - offset * points[sourceUv];\n var cp0y = py - offset * points[sourceUv + 1];\n var cp1x = px + offset * points[destUv];\n var cp1y = py + offset * points[destUv + 1];\n\n if (_i === 0) {\n context.moveTo(cp0x, cp0y);\n } else {\n context.lineTo(cp0x, cp0y);\n }\n\n context.arcTo(px, py, cp1x, cp1y, cornerRadius);\n }\n\n context.closePath();\n }; // Round rectangle drawing\n\n\n CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerRadius = getRoundRectangleRadius(width, height);\n\n if (context.beginPath) {\n context.beginPath();\n } // Start at top middle\n\n\n context.moveTo(x, y - halfHeight); // Arc from middle top to right side\n\n context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); // Arc from right side to bottom\n\n context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); // Arc from bottom to left side\n\n context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); // Arc from left side to topBorder\n\n context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); // Join line\n\n context.lineTo(x, y - halfHeight);\n context.closePath();\n };\n\n CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerRadius = getRoundRectangleRadius(width, height);\n\n if (context.beginPath) {\n context.beginPath();\n } // Start at top middle\n\n\n context.moveTo(x, y - halfHeight);\n context.lineTo(x + halfWidth, y - halfHeight);\n context.lineTo(x + halfWidth, y);\n context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius);\n context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius);\n context.lineTo(x - halfWidth, y - halfHeight);\n context.lineTo(x, y - halfHeight);\n context.closePath();\n };\n\n CRp$3.drawCutRectanglePath = function (context, x, y, width, height) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerLength = getCutRectangleCornerLength();\n\n if (context.beginPath) {\n context.beginPath();\n }\n\n context.moveTo(x - halfWidth + cornerLength, y - halfHeight);\n context.lineTo(x + halfWidth - cornerLength, y - halfHeight);\n context.lineTo(x + halfWidth, y - halfHeight + cornerLength);\n context.lineTo(x + halfWidth, y + halfHeight - cornerLength);\n context.lineTo(x + halfWidth - cornerLength, y + halfHeight);\n context.lineTo(x - halfWidth + cornerLength, y + halfHeight);\n context.lineTo(x - halfWidth, y + halfHeight - cornerLength);\n context.lineTo(x - halfWidth, y - halfHeight + cornerLength);\n context.closePath();\n };\n\n CRp$3.drawBarrelPath = function (context, x, y, width, height) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var xBegin = x - halfWidth;\n var xEnd = x + halfWidth;\n var yBegin = y - halfHeight;\n var yEnd = y + halfHeight;\n var barrelCurveConstants = getBarrelCurveConstants(width, height);\n var wOffset = barrelCurveConstants.widthOffset;\n var hOffset = barrelCurveConstants.heightOffset;\n var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset;\n\n if (context.beginPath) {\n context.beginPath();\n }\n\n context.moveTo(xBegin, yBegin + hOffset);\n context.lineTo(xBegin, yEnd - hOffset);\n context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd);\n context.lineTo(xEnd - wOffset, yEnd);\n context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset);\n context.lineTo(xEnd, yBegin + hOffset);\n context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin);\n context.lineTo(xBegin + wOffset, yBegin);\n context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset);\n context.closePath();\n };\n\n var sin0 = Math.sin(0);\n var cos0 = Math.cos(0);\n var sin = {};\n var cos = {};\n var ellipseStepSize = Math.PI / 40;\n\n for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) {\n sin[i] = Math.sin(i);\n cos[i] = Math.cos(i);\n }\n\n CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) {\n if (context.beginPath) {\n context.beginPath();\n }\n\n if (context.ellipse) {\n context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n var xPos, yPos;\n var rw = width / 2;\n var rh = height / 2;\n\n for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) {\n xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0;\n yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0;\n\n if (i === 0) {\n context.moveTo(xPos, yPos);\n } else {\n context.lineTo(xPos, yPos);\n }\n }\n }\n\n context.closePath();\n };\n\n /* global atob, ArrayBuffer, Uint8Array, Blob */\n var CRp$2 = {};\n\n CRp$2.createBuffer = function (w, h) {\n var buffer = document.createElement('canvas'); // eslint-disable-line no-undef\n\n buffer.width = w;\n buffer.height = h;\n return [buffer, buffer.getContext('2d')];\n };\n\n CRp$2.bufferCanvasImage = function (options) {\n var cy = this.cy;\n var eles = cy.mutableElements();\n var bb = eles.boundingBox();\n var ctrRect = this.findContainerClientCoords();\n var width = options.full ? Math.ceil(bb.w) : ctrRect[2];\n var height = options.full ? Math.ceil(bb.h) : ctrRect[3];\n var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight);\n var pxRatio = this.getPixelRatio();\n var scale = 1;\n\n if (options.scale !== undefined) {\n width *= options.scale;\n height *= options.scale;\n scale = options.scale;\n } else if (specdMaxDims) {\n var maxScaleW = Infinity;\n var maxScaleH = Infinity;\n\n if (number$1(options.maxWidth)) {\n maxScaleW = scale * options.maxWidth / width;\n }\n\n if (number$1(options.maxHeight)) {\n maxScaleH = scale * options.maxHeight / height;\n }\n\n scale = Math.min(maxScaleW, maxScaleH);\n width *= scale;\n height *= scale;\n }\n\n if (!specdMaxDims) {\n width *= pxRatio;\n height *= pxRatio;\n scale *= pxRatio;\n }\n\n var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef\n\n buffCanvas.width = width;\n buffCanvas.height = height;\n buffCanvas.style.width = width + 'px';\n buffCanvas.style.height = height + 'px';\n var buffCxt = buffCanvas.getContext('2d'); // Rasterize the layers, but only if container has nonzero size\n\n if (width > 0 && height > 0) {\n buffCxt.clearRect(0, 0, width, height);\n buffCxt.globalCompositeOperation = 'source-over';\n var zsortedEles = this.getCachedZSortedEles();\n\n if (options.full) {\n // draw the full bounds of the graph\n buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale);\n buffCxt.scale(scale, scale);\n this.drawElements(buffCxt, zsortedEles);\n buffCxt.scale(1 / scale, 1 / scale);\n buffCxt.translate(bb.x1 * scale, bb.y1 * scale);\n } else {\n // draw the current view\n var pan = cy.pan();\n var translation = {\n x: pan.x * scale,\n y: pan.y * scale\n };\n scale *= cy.zoom();\n buffCxt.translate(translation.x, translation.y);\n buffCxt.scale(scale, scale);\n this.drawElements(buffCxt, zsortedEles);\n buffCxt.scale(1 / scale, 1 / scale);\n buffCxt.translate(-translation.x, -translation.y);\n } // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs\n\n\n if (options.bg) {\n buffCxt.globalCompositeOperation = 'destination-over';\n buffCxt.fillStyle = options.bg;\n buffCxt.rect(0, 0, width, height);\n buffCxt.fill();\n }\n }\n\n return buffCanvas;\n };\n\n function b64ToBlob(b64, mimeType) {\n var bytes = atob(b64);\n var buff = new ArrayBuffer(bytes.length);\n var buffUint8 = new Uint8Array(buff);\n\n for (var i = 0; i < bytes.length; i++) {\n buffUint8[i] = bytes.charCodeAt(i);\n }\n\n return new Blob([buff], {\n type: mimeType\n });\n }\n\n function b64UriToB64(b64uri) {\n var i = b64uri.indexOf(',');\n return b64uri.substr(i + 1);\n }\n\n function output(options, canvas, mimeType) {\n var getB64Uri = function getB64Uri() {\n return canvas.toDataURL(mimeType, options.quality);\n };\n\n switch (options.output) {\n case 'blob-promise':\n return new Promise$1(function (resolve, reject) {\n try {\n canvas.toBlob(function (blob) {\n if (blob != null) {\n resolve(blob);\n } else {\n reject(new Error('`canvas.toBlob()` sent a null value in its callback'));\n }\n }, mimeType, options.quality);\n } catch (err) {\n reject(err);\n }\n });\n\n case 'blob':\n return b64ToBlob(b64UriToB64(getB64Uri()), mimeType);\n\n case 'base64':\n return b64UriToB64(getB64Uri());\n\n case 'base64uri':\n default:\n return getB64Uri();\n }\n }\n\n CRp$2.png = function (options) {\n return output(options, this.bufferCanvasImage(options), 'image/png');\n };\n\n CRp$2.jpg = function (options) {\n return output(options, this.bufferCanvasImage(options), 'image/jpeg');\n };\n\n var CRp$1 = {};\n\n CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) {\n switch (name) {\n case 'ellipse':\n return this.drawEllipsePath(context, centerX, centerY, width, height);\n\n case 'polygon':\n return this.drawPolygonPath(context, centerX, centerY, width, height, points);\n\n case 'round-polygon':\n return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points);\n\n case 'roundrectangle':\n case 'round-rectangle':\n return this.drawRoundRectanglePath(context, centerX, centerY, width, height);\n\n case 'cutrectangle':\n case 'cut-rectangle':\n return this.drawCutRectanglePath(context, centerX, centerY, width, height);\n\n case 'bottomroundrectangle':\n case 'bottom-round-rectangle':\n return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height);\n\n case 'barrel':\n return this.drawBarrelPath(context, centerX, centerY, width, height);\n }\n };\n\n var CR = CanvasRenderer;\n var CRp = CanvasRenderer.prototype;\n CRp.CANVAS_LAYERS = 3; //\n\n CRp.SELECT_BOX = 0;\n CRp.DRAG = 1;\n CRp.NODE = 2;\n CRp.BUFFER_COUNT = 3; //\n\n CRp.TEXTURE_BUFFER = 0;\n CRp.MOTIONBLUR_BUFFER_NODE = 1;\n CRp.MOTIONBLUR_BUFFER_DRAG = 2;\n\n function CanvasRenderer(options) {\n var r = this;\n r.data = {\n canvases: new Array(CRp.CANVAS_LAYERS),\n contexts: new Array(CRp.CANVAS_LAYERS),\n canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS),\n bufferCanvases: new Array(CRp.BUFFER_COUNT),\n bufferContexts: new Array(CRp.CANVAS_LAYERS)\n };\n var tapHlOffAttr = '-webkit-tap-highlight-color';\n var tapHlOffStyle = 'rgba(0,0,0,0)';\n r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef\n\n var containerStyle = r.data.canvasContainer.style;\n r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle;\n containerStyle.position = 'relative';\n containerStyle.zIndex = '0';\n containerStyle.overflow = 'hidden';\n var container = options.cy.container();\n container.appendChild(r.data.canvasContainer);\n container.style[tapHlOffAttr] = tapHlOffStyle;\n var styleMap = {\n '-webkit-user-select': 'none',\n '-moz-user-select': '-moz-none',\n 'user-select': 'none',\n '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',\n 'outline-style': 'none'\n };\n\n if (ms()) {\n styleMap['-ms-touch-action'] = 'none';\n styleMap['touch-action'] = 'none';\n }\n\n for (var i = 0; i < CRp.CANVAS_LAYERS; i++) {\n var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef\n\n r.data.contexts[i] = canvas.getContext('2d');\n Object.keys(styleMap).forEach(function (k) {\n canvas.style[k] = styleMap[k];\n });\n canvas.style.position = 'absolute';\n canvas.setAttribute('data-id', 'layer' + i);\n canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i);\n r.data.canvasContainer.appendChild(canvas);\n r.data.canvasNeedsRedraw[i] = false;\n }\n\n r.data.topCanvas = r.data.canvases[0];\n r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node');\n r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox');\n r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag');\n\n for (var i = 0; i < CRp.BUFFER_COUNT; i++) {\n r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef\n\n r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d');\n r.data.bufferCanvases[i].style.position = 'absolute';\n r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i);\n r.data.bufferCanvases[i].style.zIndex = String(-i - 1);\n r.data.bufferCanvases[i].style.visibility = 'hidden'; //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]);\n }\n\n r.pathsEnabled = true;\n var emptyBb = makeBoundingBox();\n\n var getBoxCenter = function getBoxCenter(bb) {\n return {\n x: (bb.x1 + bb.x2) / 2,\n y: (bb.y1 + bb.y2) / 2\n };\n };\n\n var getCenterOffset = function getCenterOffset(bb) {\n return {\n x: -bb.w / 2,\n y: -bb.h / 2\n };\n };\n\n var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) {\n var _p = ele[0]._private;\n var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp;\n return !same;\n };\n\n var getStyleKey = function getStyleKey(ele) {\n return ele[0]._private.nodeKey;\n };\n\n var getLabelKey = function getLabelKey(ele) {\n return ele[0]._private.labelStyleKey;\n };\n\n var getSourceLabelKey = function getSourceLabelKey(ele) {\n return ele[0]._private.sourceLabelStyleKey;\n };\n\n var getTargetLabelKey = function getTargetLabelKey(ele) {\n return ele[0]._private.targetLabelStyleKey;\n };\n\n var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElement(context, ele, bb, false, false, useEleOpacity);\n };\n\n var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity);\n };\n\n var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity);\n };\n\n var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity);\n };\n\n var getElementBox = function getElementBox(ele) {\n ele.boundingBox();\n return ele[0]._private.bodyBounds;\n };\n\n var getLabelBox = function getLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.main || emptyBb;\n };\n\n var getSourceLabelBox = function getSourceLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.source || emptyBb;\n };\n\n var getTargetLabelBox = function getTargetLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.target || emptyBb;\n };\n\n var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) {\n return scaledLabelShown;\n };\n\n var getElementRotationPoint = function getElementRotationPoint(ele) {\n return getBoxCenter(getElementBox(ele));\n };\n\n var addTextMargin = function addTextMargin(prefix, pt, ele) {\n var pre = prefix ? prefix + '-' : '';\n return {\n x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue,\n y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue\n };\n };\n\n var getRsPt = function getRsPt(ele, x, y) {\n var rs = ele[0]._private.rscratch;\n return {\n x: rs[x],\n y: rs[y]\n };\n };\n\n var getLabelRotationPoint = function getLabelRotationPoint(ele) {\n return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele);\n };\n\n var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) {\n return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele);\n };\n\n var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) {\n return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele);\n };\n\n var getElementRotationOffset = function getElementRotationOffset(ele) {\n return getCenterOffset(getElementBox(ele));\n };\n\n var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) {\n return getCenterOffset(getSourceLabelBox(ele));\n };\n\n var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) {\n return getCenterOffset(getTargetLabelBox(ele));\n };\n\n var getLabelRotationOffset = function getLabelRotationOffset(ele) {\n var bb = getLabelBox(ele);\n var p = getCenterOffset(getLabelBox(ele));\n\n if (ele.isNode()) {\n switch (ele.pstyle('text-halign').value) {\n case 'left':\n p.x = -bb.w;\n break;\n\n case 'right':\n p.x = 0;\n break;\n }\n\n switch (ele.pstyle('text-valign').value) {\n case 'top':\n p.y = -bb.h;\n break;\n\n case 'bottom':\n p.y = 0;\n break;\n }\n }\n\n return p;\n };\n\n var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, {\n getKey: getStyleKey,\n doesEleInvalidateKey: backgroundTimestampHasChanged,\n drawElement: drawElement,\n getBoundingBox: getElementBox,\n getRotationPoint: getElementRotationPoint,\n getRotationOffset: getElementRotationOffset,\n allowEdgeTxrCaching: false,\n allowParentTxrCaching: false\n });\n var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, {\n getKey: getLabelKey,\n drawElement: drawLabel,\n getBoundingBox: getLabelBox,\n getRotationPoint: getLabelRotationPoint,\n getRotationOffset: getLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, {\n getKey: getSourceLabelKey,\n drawElement: drawSourceLabel,\n getBoundingBox: getSourceLabelBox,\n getRotationPoint: getSourceLabelRotationPoint,\n getRotationOffset: getSourceLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, {\n getKey: getTargetLabelKey,\n drawElement: drawTargetLabel,\n getBoundingBox: getTargetLabelBox,\n getRotationPoint: getTargetLabelRotationPoint,\n getRotationOffset: getTargetLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r);\n r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) {\n // each cache should check for sub-key diff to see that the update affects that cache particularly\n eleTxrCache.invalidateElements(eles);\n lblTxrCache.invalidateElements(eles);\n slbTxrCache.invalidateElements(eles);\n tlbTxrCache.invalidateElements(eles); // any change invalidates the layers\n\n lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches\n\n for (var _i = 0; _i < eles.length; _i++) {\n var _p = eles[_i]._private;\n _p.oldBackgroundTimestamp = _p.backgroundTimestamp;\n }\n });\n\n var refineInLayers = function refineInLayers(reqs) {\n for (var i = 0; i < reqs.length; i++) {\n lyrTxrCache.enqueueElementRefinement(reqs[i].ele);\n }\n };\n\n eleTxrCache.onDequeue(refineInLayers);\n lblTxrCache.onDequeue(refineInLayers);\n slbTxrCache.onDequeue(refineInLayers);\n tlbTxrCache.onDequeue(refineInLayers);\n }\n\n CRp.redrawHint = function (group, bool) {\n var r = this;\n\n switch (group) {\n case 'eles':\n r.data.canvasNeedsRedraw[CRp.NODE] = bool;\n break;\n\n case 'drag':\n r.data.canvasNeedsRedraw[CRp.DRAG] = bool;\n break;\n\n case 'select':\n r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool;\n break;\n }\n }; // whether to use Path2D caching for drawing\n\n\n var pathsImpld = typeof Path2D !== 'undefined';\n\n CRp.path2dEnabled = function (on) {\n if (on === undefined) {\n return this.pathsEnabled;\n }\n\n this.pathsEnabled = on ? true : false;\n };\n\n CRp.usePaths = function () {\n return pathsImpld && this.pathsEnabled;\n };\n\n CRp.setImgSmoothing = function (context, bool) {\n if (context.imageSmoothingEnabled != null) {\n context.imageSmoothingEnabled = bool;\n } else {\n context.webkitImageSmoothingEnabled = bool;\n context.mozImageSmoothingEnabled = bool;\n context.msImageSmoothingEnabled = bool;\n }\n };\n\n CRp.getImgSmoothing = function (context) {\n if (context.imageSmoothingEnabled != null) {\n return context.imageSmoothingEnabled;\n } else {\n return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled;\n }\n };\n\n CRp.makeOffscreenCanvas = function (width, height) {\n var canvas;\n\n if ((typeof OffscreenCanvas === \"undefined\" ? \"undefined\" : _typeof(OffscreenCanvas)) !== (\"undefined\" )) {\n canvas = new OffscreenCanvas(width, height);\n } else {\n canvas = document.createElement('canvas'); // eslint-disable-line no-undef\n\n canvas.width = width;\n canvas.height = height;\n }\n\n return canvas;\n };\n\n [CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) {\n extend(CRp, props);\n });\n\n var renderer = [{\n name: 'null',\n impl: NullRenderer\n }, {\n name: 'base',\n impl: BR\n }, {\n name: 'canvas',\n impl: CR\n }];\n\n var incExts = [{\n type: 'layout',\n extensions: layout\n }, {\n type: 'renderer',\n extensions: renderer\n }];\n\n var extensions = {}; // registered modules for extensions, indexed by name\n\n var modules = {};\n\n function setExtension(type, name, registrant) {\n var ext = registrant;\n\n var overrideErr = function overrideErr(field) {\n warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden');\n };\n\n if (type === 'core') {\n if (Core.prototype[name]) {\n return overrideErr(name);\n } else {\n Core.prototype[name] = registrant;\n }\n } else if (type === 'collection') {\n if (Collection.prototype[name]) {\n return overrideErr(name);\n } else {\n Collection.prototype[name] = registrant;\n }\n } else if (type === 'layout') {\n // fill in missing layout functions in the prototype\n var Layout = function Layout(options) {\n this.options = options;\n registrant.call(this, options); // make sure layout has _private for use w/ std apis like .on()\n\n if (!plainObject(this._private)) {\n this._private = {};\n }\n\n this._private.cy = options.cy;\n this._private.listeners = [];\n this.createEmitter();\n };\n\n var layoutProto = Layout.prototype = Object.create(registrant.prototype);\n var optLayoutFns = [];\n\n for (var i = 0; i < optLayoutFns.length; i++) {\n var fnName = optLayoutFns[i];\n\n layoutProto[fnName] = layoutProto[fnName] || function () {\n return this;\n };\n } // either .start() or .run() is defined, so autogen the other\n\n\n if (layoutProto.start && !layoutProto.run) {\n layoutProto.run = function () {\n this.start();\n return this;\n };\n } else if (!layoutProto.start && layoutProto.run) {\n layoutProto.start = function () {\n this.run();\n return this;\n };\n }\n\n var regStop = registrant.prototype.stop;\n\n layoutProto.stop = function () {\n var opts = this.options;\n\n if (opts && opts.animate) {\n var anis = this.animations;\n\n if (anis) {\n for (var _i = 0; _i < anis.length; _i++) {\n anis[_i].stop();\n }\n }\n }\n\n if (regStop) {\n regStop.call(this);\n } else {\n this.emit('layoutstop');\n }\n\n return this;\n };\n\n if (!layoutProto.destroy) {\n layoutProto.destroy = function () {\n return this;\n };\n }\n\n layoutProto.cy = function () {\n return this._private.cy;\n };\n\n var getCy = function getCy(layout) {\n return layout._private.cy;\n };\n\n var emitterOpts = {\n addEventFields: function addEventFields(layout, evt) {\n evt.layout = layout;\n evt.cy = getCy(layout);\n evt.target = layout;\n },\n bubble: function bubble() {\n return true;\n },\n parent: function parent(layout) {\n return getCy(layout);\n }\n };\n extend(layoutProto, {\n createEmitter: function createEmitter() {\n this._private.emitter = new Emitter(emitterOpts, this);\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(evt, cb) {\n this.emitter().on(evt, cb);\n return this;\n },\n one: function one(evt, cb) {\n this.emitter().one(evt, cb);\n return this;\n },\n once: function once(evt, cb) {\n this.emitter().one(evt, cb);\n return this;\n },\n removeListener: function removeListener(evt, cb) {\n this.emitter().removeListener(evt, cb);\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n this.emitter().removeAllListeners();\n return this;\n },\n emit: function emit(evt, params) {\n this.emitter().emit(evt, params);\n return this;\n }\n });\n define.eventAliasesOn(layoutProto);\n ext = Layout; // replace with our wrapped layout\n } else if (type === 'renderer' && name !== 'null' && name !== 'base') {\n // user registered renderers inherit from base\n var BaseRenderer = getExtension('renderer', 'base');\n var bProto = BaseRenderer.prototype;\n var RegistrantRenderer = registrant;\n var rProto = registrant.prototype;\n\n var Renderer = function Renderer() {\n BaseRenderer.apply(this, arguments);\n RegistrantRenderer.apply(this, arguments);\n };\n\n var proto = Renderer.prototype;\n\n for (var pName in bProto) {\n var pVal = bProto[pName];\n var existsInR = rProto[pName] != null;\n\n if (existsInR) {\n return overrideErr(pName);\n }\n\n proto[pName] = pVal; // take impl from base\n }\n\n for (var _pName in rProto) {\n proto[_pName] = rProto[_pName]; // take impl from registrant\n }\n\n bProto.clientFunctions.forEach(function (name) {\n proto[name] = proto[name] || function () {\n error('Renderer does not implement `renderer.' + name + '()` on its prototype');\n };\n });\n ext = Renderer;\n } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') {\n // to avoid potential prototype pollution\n return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions');\n }\n\n return setMap({\n map: extensions,\n keys: [type, name],\n value: ext\n });\n }\n\n function getExtension(type, name) {\n return getMap({\n map: extensions,\n keys: [type, name]\n });\n }\n\n function setModule(type, name, moduleType, moduleName, registrant) {\n return setMap({\n map: modules,\n keys: [type, name, moduleType, moduleName],\n value: registrant\n });\n }\n\n function getModule(type, name, moduleType, moduleName) {\n return getMap({\n map: modules,\n keys: [type, name, moduleType, moduleName]\n });\n }\n\n var extension = function extension() {\n // e.g. extension('renderer', 'svg')\n if (arguments.length === 2) {\n return getExtension.apply(null, arguments);\n } // e.g. extension('renderer', 'svg', { ... })\n else if (arguments.length === 3) {\n return setExtension.apply(null, arguments);\n } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse')\n else if (arguments.length === 4) {\n return getModule.apply(null, arguments);\n } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... })\n else if (arguments.length === 5) {\n return setModule.apply(null, arguments);\n } else {\n error('Invalid extension access syntax');\n }\n }; // allows a core instance to access extensions internally\n\n\n Core.prototype.extension = extension; // included extensions\n\n incExts.forEach(function (group) {\n group.extensions.forEach(function (ext) {\n setExtension(group.type, ext.name, ext.impl);\n });\n });\n\n // (useful for init)\n\n var Stylesheet = function Stylesheet() {\n if (!(this instanceof Stylesheet)) {\n return new Stylesheet();\n }\n\n this.length = 0;\n };\n\n var sheetfn = Stylesheet.prototype;\n\n sheetfn.instanceString = function () {\n return 'stylesheet';\n }; // just store the selector to be parsed later\n\n\n sheetfn.selector = function (selector) {\n var i = this.length++;\n this[i] = {\n selector: selector,\n properties: []\n };\n return this; // chaining\n }; // just store the property to be parsed later\n\n\n sheetfn.css = function (name, value) {\n var i = this.length - 1;\n\n if (string(name)) {\n this[i].properties.push({\n name: name,\n value: value\n });\n } else if (plainObject(name)) {\n var map = name;\n var propNames = Object.keys(map);\n\n for (var j = 0; j < propNames.length; j++) {\n var key = propNames[j];\n var mapVal = map[key];\n\n if (mapVal == null) {\n continue;\n }\n\n var prop = Style.properties[key] || Style.properties[dash2camel(key)];\n\n if (prop == null) {\n continue;\n }\n\n var _name = prop.name;\n var _value = mapVal;\n this[i].properties.push({\n name: _name,\n value: _value\n });\n }\n }\n\n return this; // chaining\n };\n\n sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet\n\n sheetfn.generateStyle = function (cy) {\n var style = new Style(cy);\n return this.appendToStyle(style);\n }; // append a dummy stylesheet object on a real style object\n\n\n sheetfn.appendToStyle = function (style) {\n for (var i = 0; i < this.length; i++) {\n var context = this[i];\n var selector = context.selector;\n var props = context.properties;\n style.selector(selector); // apply selector\n\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n style.css(prop.name, prop.value); // apply property\n }\n }\n\n return style;\n };\n\n var version = \"3.26.0\";\n\n var cytoscape = function cytoscape(options) {\n // if no options specified, use default\n if (options === undefined) {\n options = {};\n } // create instance\n\n\n if (plainObject(options)) {\n return new Core(options);\n } // allow for registration of extensions\n else if (string(options)) {\n return extension.apply(extension, arguments);\n }\n }; // e.g. cytoscape.use( require('cytoscape-foo'), bar )\n\n\n cytoscape.use = function (ext) {\n var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext\n\n args.unshift(cytoscape); // cytoscape is first arg to ext\n\n ext.apply(null, args);\n return this;\n };\n\n cytoscape.warnings = function (bool) {\n return warnings(bool);\n }; // replaced by build system\n\n\n cytoscape.version = version; // expose public apis (mostly for extensions)\n\n cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet;\n\n return cytoscape;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2N5dG9zY2FwZS9kaXN0L2N5dG9zY2FwZS51bWQuanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxLQUE0RDtBQUM5RCxFQUFFLENBQ3dHO0FBQzFHLENBQUMsdUJBQXVCOztBQUV4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCLCtCQUErQjtBQUM3RDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDLFNBQVM7O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtEQUErRDs7QUFFL0Q7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7O0FBRTVCLHVDQUF1Qzs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsT0FBTztBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLHdDQUF3QyxPQUFPO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVDQUF1Qzs7O0FBR3ZDLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7O0FBRVQsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLDRCQUE0QjtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxtQ0FBbUMsMEJBQTBCO0FBQ3RIO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxXQUFXO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsV0FBVztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELHNDQUFzQztBQUN2RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLOztBQUVMLEdBQUc7QUFDSCxHQUFHOztBQUVI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QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjs7QUFFQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBLE1BQU07OztBQUdOLHFCQUFxQixhQUFhO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxpR0FBaUc7QUFDakc7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLHFCQUFxQjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsK0RBQStEO0FBQy9EO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFF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QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztB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QUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVIsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxJQUFJOztBQUVQLDRCQUE0Qjs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsNkNBQTZDOztBQUU3QztBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7O0FBRTlDLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLHVDQUF1QyxRQUFRO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUEsc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQSxRQUFROztBQUVSOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7OztBQUdULHVDQUF1QyxRQUFRO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFR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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxvQkFBb0IsNkJBQTZCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUixxQkFBcUIsbUJBQW1CO0FBQ3hDO0FBQ0EsK0JBQStCO0FBQy9CLE1BQU07OztBQUdOLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLHFDQUFxQztBQUNyQztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0EsS0FBSztBQUNMLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0EsS0FBSztBQUNMLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0EsS0FBSztBQUNMLHNCQUFzQiw2QkFBNkI7QUFDbkQsd0NBQXdDLEdBQUc7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLG9CQUFvQjs7QUFFcEI7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLHFCQUFxQix3QkFBd0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQSxnRkFBZ0Y7QUFDaEY7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBLFFBQVE7OztBQUdSLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBLFFBQVE7OztBQUdSLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQSxvR0FBb0c7QUFDcEcsb0RBQW9EO0FBQ3BELFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLHVCQUF1Qix3QkFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUEsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUEsMEJBQTBCLHlCQUF5QjtBQUNuRDs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdCQUF3QixzQkFBc0I7QUFDOUMsOENBQThDOztBQUU5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ04sbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTs7O0FBR04saUJBQWlCO0FBQ2pCOztBQUVBLDJCQUEyQjs7QUFFM0I7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNOzs7QUFHTjtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUI7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQixLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RUFBNkU7O0FBRTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1AsbUJBQW1CO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQkFBc0IsZ0JBQWdCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQkFBc0IsZ0JBQWdCO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsYUFBYTtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0U7O0FBRXRFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVosWUFBWTs7QUFFWixjQUFjOztBQUVkLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ04sOEJBQThCO0FBQzlCLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ04sOEJBQThCO0FBQzlCLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLGFBQWE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsa0JBQWtCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDOztBQUVBOztBQUVBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTixzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDOztBQUU1QyxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTs7O0FBR04sb0JBQW9CLHdCQUF3QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBLE9BQU8sR0FBRztBQUNWOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVEsYUFBYTtBQUNyQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25ELCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsUUFBUTs7O0FBR1IsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsbUJBQW1CO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esd0RBQXdEOztBQUV4RDtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07OztBQUdOLDREQUE0RDs7QUFFNUQ7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixzQkFBc0I7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7OztBQUdUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEMsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTs7QUFFUixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixvQkFBb0I7QUFDOUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsZ0NBQWdDOztBQUVoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7O0FBRWpEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsNEJBQTRCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7O0FBRXpEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvRUFBb0U7O0FBRXBFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtQkFBbUI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDLHlCQUF5Qjs7QUFFekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLG9CQUFvQiw2QkFBNkI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtFQUFrRTs7QUFFbEU7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixtQkFBbUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBOztBQUVBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBOztBQUVBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBLDJFQUEyRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IscUJBQXFCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9JQUFvSTs7QUFFcEk7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNB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QUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qyw0Q0FBNEM7O0FBRTVDLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FB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QUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBOztBQUVBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7O0FBRUEsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSx5REFBeUQ7O0FBRXpELDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCwrQkFBK0I7O0FBRS9COztBQUVBOztBQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2N5dG9zY2FwZS9kaXN0L2N5dG9zY2FwZS51bWQuanM/YmY4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzLCBUaGUgQ3l0b3NjYXBlIENvbnNvcnRpdW0uXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxuICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg4oCcU29mdHdhcmXigJ0pLCB0byBkZWFsIGluXG4gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG4gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllc1xuICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvXG4gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCDigJxBUyBJU+KAnSwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuY3l0b3NjYXBlID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfSwgX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5JDEob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gICAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gICAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgICB2YXIgX2FyciA9IFtdO1xuICAgIHZhciBfbiA9IHRydWU7XG4gICAgdmFyIF9kID0gZmFsc2U7XG5cbiAgICB2YXIgX3MsIF9lO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gICAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBfd2luZG93ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogd2luZG93OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgdmFyIG5hdmlnYXRvciA9IF93aW5kb3cgPyBfd2luZG93Lm5hdmlnYXRvciA6IG51bGw7XG4gIF93aW5kb3cgPyBfd2luZG93LmRvY3VtZW50IDogbnVsbDtcblxuICB2YXIgdHlwZW9mc3RyID0gX3R5cGVvZignJyk7XG5cbiAgdmFyIHR5cGVvZm9iaiA9IF90eXBlb2Yoe30pO1xuXG4gIHZhciB0eXBlb2ZmbiA9IF90eXBlb2YoZnVuY3Rpb24gKCkge30pO1xuXG4gIHZhciB0eXBlb2ZodG1sZWxlID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoSFRNTEVsZW1lbnQpO1xuXG4gIHZhciBpbnN0YW5jZVN0ciA9IGZ1bmN0aW9uIGluc3RhbmNlU3RyKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLmluc3RhbmNlU3RyaW5nICYmIGZuJDYob2JqLmluc3RhbmNlU3RyaW5nKSA/IG9iai5pbnN0YW5jZVN0cmluZygpIDogbnVsbDtcbiAgfTtcblxuICB2YXIgc3RyaW5nID0gZnVuY3Rpb24gc3RyaW5nKG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT0gdHlwZW9mc3RyO1xuICB9O1xuICB2YXIgZm4kNiA9IGZ1bmN0aW9uIGZuKG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZmZuO1xuICB9O1xuICB2YXIgYXJyYXkgPSBmdW5jdGlvbiBhcnJheShvYmopIHtcbiAgICByZXR1cm4gIWVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSAmJiAoQXJyYXkuaXNBcnJheSA/IEFycmF5LmlzQXJyYXkob2JqKSA6IG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIEFycmF5KTtcbiAgfTtcbiAgdmFyIHBsYWluT2JqZWN0ID0gZnVuY3Rpb24gcGxhaW5PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIF90eXBlb2Yob2JqKSA9PT0gdHlwZW9mb2JqICYmICFhcnJheShvYmopICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICB9O1xuICB2YXIgb2JqZWN0ID0gZnVuY3Rpb24gb2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZm9iajtcbiAgfTtcbiAgdmFyIG51bWJlciQxID0gZnVuY3Rpb24gbnVtYmVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IF90eXBlb2YoMSkgJiYgIWlzTmFOKG9iaik7XG4gIH07XG4gIHZhciBpbnRlZ2VyID0gZnVuY3Rpb24gaW50ZWdlcihvYmopIHtcbiAgICByZXR1cm4gbnVtYmVyJDEob2JqKSAmJiBNYXRoLmZsb29yKG9iaikgPT09IG9iajtcbiAgfTtcbiAgdmFyIGh0bWxFbGVtZW50ID0gZnVuY3Rpb24gaHRtbEVsZW1lbnQob2JqKSB7XG4gICAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2ZodG1sZWxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbCAhPSBvYmogJiYgb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gICAgfVxuICB9O1xuICB2YXIgZWxlbWVudE9yQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIGVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQob2JqKSB8fCBjb2xsZWN0aW9uKG9iaik7XG4gIH07XG4gIHZhciBlbGVtZW50ID0gZnVuY3Rpb24gZWxlbWVudChvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ2NvbGxlY3Rpb24nICYmIG9iai5fcHJpdmF0ZS5zaW5nbGU7XG4gIH07XG4gIHZhciBjb2xsZWN0aW9uID0gZnVuY3Rpb24gY29sbGVjdGlvbihvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ2NvbGxlY3Rpb24nICYmICFvYmouX3ByaXZhdGUuc2luZ2xlO1xuICB9O1xuICB2YXIgY29yZSA9IGZ1bmN0aW9uIGNvcmUob2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb3JlJztcbiAgfTtcbiAgdmFyIHN0eWxlc2hlZXQgPSBmdW5jdGlvbiBzdHlsZXNoZWV0KG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZVN0cihvYmopID09PSAnc3R5bGVzaGVldCc7XG4gIH07XG4gIHZhciBldmVudCA9IGZ1bmN0aW9uIGV2ZW50KG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZVN0cihvYmopID09PSAnZXZlbnQnO1xuICB9O1xuICB2YXIgZW1wdHlTdHJpbmcgPSBmdW5jdGlvbiBlbXB0eVN0cmluZyhvYmopIHtcbiAgICBpZiAob2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGVtcHR5XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gJycgfHwgb2JqLm1hdGNoKC9eXFxzKyQvKSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGVtcHR5IHN0cmluZyBpcyBlbXB0eVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gb3RoZXJ3aXNlLCB3ZSBkb24ndCBrbm93IHdoYXQgd2UndmUgZ290XG4gIH07XG4gIHZhciBkb21FbGVtZW50ID0gZnVuY3Rpb24gZG9tRWxlbWVudChvYmopIHtcbiAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyB3ZSdyZSBub3QgaW4gYSBicm93c2VyIHNvIGl0IGRvZXNuJ3QgbWF0dGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbiAgICB9XG4gIH07XG4gIHZhciBib3VuZGluZ0JveCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94KG9iaikge1xuICAgIHJldHVybiBwbGFpbk9iamVjdChvYmopICYmIG51bWJlciQxKG9iai54MSkgJiYgbnVtYmVyJDEob2JqLngyKSAmJiBudW1iZXIkMShvYmoueTEpICYmIG51bWJlciQxKG9iai55Mik7XG4gIH07XG4gIHZhciBwcm9taXNlID0gZnVuY3Rpb24gcHJvbWlzZShvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0KG9iaikgJiYgZm4kNihvYmoudGhlbik7XG4gIH07XG4gIHZhciBtcyA9IGZ1bmN0aW9uIG1zKCkge1xuICAgIHJldHVybiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSk7XG4gIH07IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkZXRlY3QgdGhpcy4uLlxuXG4gIHZhciBtZW1vaXplJDEgPSBmdW5jdGlvbiBtZW1vaXplKGZuLCBrZXlGbikge1xuICAgIGlmICgha2V5Rm4pIHtcbiAgICAgIGtleUZuID0gZnVuY3Rpb24ga2V5Rm4oKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3Muam9pbignJCcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWVtb2l6ZWRGbiA9IGZ1bmN0aW9uIG1lbW9pemVkRm4oKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHZhciByZXQ7XG4gICAgICB2YXIgayA9IGtleUZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZWRGbi5jYWNoZTtcblxuICAgICAgaWYgKCEocmV0ID0gY2FjaGVba10pKSB7XG4gICAgICAgIHJldCA9IGNhY2hlW2tdID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIG1lbW9pemVkRm4uY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZWRGbjtcbiAgfTtcblxuICB2YXIgY2FtZWwyZGFzaCA9IG1lbW9pemUkMShmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gJy0nICsgdi50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgdmFyIGRhc2gyY2FtZWwgPSBtZW1vaXplJDEoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKC1cXHcpL2csIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdlsxXS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgdmFyIHByZXBlbmRDYW1lbCA9IG1lbW9pemUkMShmdW5jdGlvbiAocHJlZml4LCBzdHIpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICB9LCBmdW5jdGlvbiAocHJlZml4LCBzdHIpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJyQnICsgc3RyO1xuICB9KTtcbiAgdmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cikge1xuICAgIGlmIChlbXB0eVN0cmluZyhzdHIpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICB9O1xuXG4gIHZhciBudW1iZXIgPSAnKD86Wy0rXT8oPzooPzpcXFxcZCt8XFxcXGQqXFxcXC5cXFxcZCspKD86W0VlXVsrLV0/XFxcXGQrKT8pKSc7XG4gIHZhciByZ2JhID0gJ3JnYlthXT9cXFxcKCgnICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbiAgdmFyIHJnYmFOb0JhY2tSZWZzID0gJ3JnYlthXT9cXFxcKCg/OicgKyBudW1iZXIgKyAnWyVdPylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0/KVxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJ1slXT8pKD86XFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnKSk/XFxcXCknO1xuICB2YXIgaHNsYSA9ICdoc2xbYV0/XFxcXCgoJyArIG51bWJlciArICcpXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXSlcXFxccyosXFxcXHMqKCcgKyBudW1iZXIgKyAnWyVdKSg/OlxcXFxzKixcXFxccyooJyArIG51bWJlciArICcpKT9cXFxcKSc7XG4gIHZhciBoc2xhTm9CYWNrUmVmcyA9ICdoc2xbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdKSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbiAgdmFyIGhleDMgPSAnXFxcXCNbMC05YS1mQS1GXXszfSc7XG4gIHZhciBoZXg2ID0gJ1xcXFwjWzAtOWEtZkEtRl17Nn0nO1xuXG4gIHZhciBhc2NlbmRpbmcgPSBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICAgIGlmIChhIDwgYikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoYSA+IGIpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH07XG4gIHZhciBkZXNjZW5kaW5nID0gZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gICAgcmV0dXJuIC0xICogYXNjZW5kaW5nKGEsIGIpO1xuICB9O1xuXG4gIHZhciBleHRlbmQgPSBPYmplY3QuYXNzaWduICE9IG51bGwgPyBPYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KSA6IGZ1bmN0aW9uICh0Z3QpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9iaiA9IGFyZ3NbaV07XG5cbiAgICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICB0Z3Rba10gPSBvYmpba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRndDtcbiAgfTtcblxuICB2YXIgaGV4MnR1cGxlID0gZnVuY3Rpb24gaGV4MnR1cGxlKGhleCkge1xuICAgIGlmICghKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gNykgfHwgaGV4WzBdICE9PSAnIycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hvcnRIZXggPSBoZXgubGVuZ3RoID09PSA0O1xuICAgIHZhciByLCBnLCBiO1xuICAgIHZhciBiYXNlID0gMTY7XG5cbiAgICBpZiAoc2hvcnRIZXgpIHtcbiAgICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIGJhc2UpO1xuICAgICAgZyA9IHBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgYmFzZSk7XG4gICAgICBiID0gcGFyc2VJbnQoaGV4WzNdICsgaGV4WzNdLCBiYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IHBhcnNlSW50KGhleFsxXSArIGhleFsyXSwgYmFzZSk7XG4gICAgICBnID0gcGFyc2VJbnQoaGV4WzNdICsgaGV4WzRdLCBiYXNlKTtcbiAgICAgIGIgPSBwYXJzZUludChoZXhbNV0gKyBoZXhbNl0sIGJhc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBbciwgZywgYl07XG4gIH07IC8vIGdldCBbciwgZywgYiwgYV0gZnJvbSBoc2woMCwgMCwgMCkgb3IgaHNsYSgwLCAwLCAwLCAwKVxuXG4gIHZhciBoc2wydHVwbGUgPSBmdW5jdGlvbiBoc2wydHVwbGUoaHNsKSB7XG4gICAgdmFyIHJldDtcbiAgICB2YXIgaCwgcywgbCwgYSwgciwgZywgYjtcblxuICAgIGZ1bmN0aW9uIGh1ZTJyZ2IocCwgcSwgdCkge1xuICAgICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgICBpZiAodCA+IDEpIHQgLT0gMTtcbiAgICAgIGlmICh0IDwgMSAvIDYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgICBpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICB2YXIgbSA9IG5ldyBSZWdFeHAoJ14nICsgaHNsYSArICckJykuZXhlYyhoc2wpO1xuXG4gICAgaWYgKG0pIHtcbiAgICAgIC8vIGdldCBodWVcbiAgICAgIGggPSBwYXJzZUludChtWzFdKTtcblxuICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgIGggPSAoMzYwIC0gLTEgKiBoICUgMzYwKSAlIDM2MDtcbiAgICAgIH0gZWxzZSBpZiAoaCA+IDM2MCkge1xuICAgICAgICBoID0gaCAlIDM2MDtcbiAgICAgIH1cblxuICAgICAgaCAvPSAzNjA7IC8vIG5vcm1hbGlzZSBvbiBbMCwgMV1cblxuICAgICAgcyA9IHBhcnNlRmxvYXQobVsyXSk7XG5cbiAgICAgIGlmIChzIDwgMCB8fCBzID4gMTAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gc2F0dXJhdGlvbiBpcyBbMCwgMTAwXVxuXG5cbiAgICAgIHMgPSBzIC8gMTAwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICAgIGwgPSBwYXJzZUZsb2F0KG1bM10pO1xuXG4gICAgICBpZiAobCA8IDAgfHwgbCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGxpZ2h0bmVzcyBpcyBbMCwgMTAwXVxuXG5cbiAgICAgIGwgPSBsIC8gMTAwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICAgIGEgPSBtWzRdO1xuXG4gICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGEgPSBwYXJzZUZsb2F0KGEpO1xuXG4gICAgICAgIGlmIChhIDwgMCB8fCBhID4gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBhbHBoYSBpcyBbMCwgMV1cblxuICAgICAgfSAvLyBub3csIGNvbnZlcnQgdG8gcmdiXG4gICAgICAvLyBjb2RlIGZyb20gaHR0cDovL21qaWphY2tzb24uY29tLzIwMDgvMDIvcmdiLXRvLWhzbC1hbmQtcmdiLXRvLWhzdi1jb2xvci1tb2RlbC1jb252ZXJzaW9uLWFsZ29yaXRobXMtaW4tamF2YXNjcmlwdFxuXG5cbiAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IE1hdGgucm91bmQobCAqIDI1NSk7IC8vIGFjaHJvbWF0aWNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIHAgPSAyICogbCAtIHE7XG4gICAgICAgIHIgPSBNYXRoLnJvdW5kKDI1NSAqIGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKSk7XG4gICAgICAgIGcgPSBNYXRoLnJvdW5kKDI1NSAqIGh1ZTJyZ2IocCwgcSwgaCkpO1xuICAgICAgICBiID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggLSAxIC8gMykpO1xuICAgICAgfVxuXG4gICAgICByZXQgPSBbciwgZywgYiwgYV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfTsgLy8gZ2V0IFtyLCBnLCBiLCBhXSBmcm9tIHJnYigwLCAwLCAwKSBvciByZ2JhKDAsIDAsIDAsIDApXG5cbiAgdmFyIHJnYjJ0dXBsZSA9IGZ1bmN0aW9uIHJnYjJ0dXBsZShyZ2IpIHtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBtID0gbmV3IFJlZ0V4cCgnXicgKyByZ2JhICsgJyQnKS5leGVjKHJnYik7XG5cbiAgICBpZiAobSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXNQY3QgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbVtpXTtcblxuICAgICAgICBpZiAoY2hhbm5lbFtjaGFubmVsLmxlbmd0aCAtIDFdID09PSAnJScpIHtcbiAgICAgICAgICBpc1BjdFtpXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFubmVsID0gcGFyc2VGbG9hdChjaGFubmVsKTtcblxuICAgICAgICBpZiAoaXNQY3RbaV0pIHtcbiAgICAgICAgICBjaGFubmVsID0gY2hhbm5lbCAvIDEwMCAqIDI1NTsgLy8gbm9ybWFsaXNlIHRvIFswLCAyNTVdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+IDI1NSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBpbnZhbGlkIGNoYW5uZWwgdmFsdWVcblxuXG4gICAgICAgIHJldC5wdXNoKE1hdGguZmxvb3IoY2hhbm5lbCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXRMZWFzdE9uZUlzUGN0ID0gaXNQY3RbMV0gfHwgaXNQY3RbMl0gfHwgaXNQY3RbM107XG4gICAgICB2YXIgYWxsQXJlUGN0ID0gaXNQY3RbMV0gJiYgaXNQY3RbMl0gJiYgaXNQY3RbM107XG5cbiAgICAgIGlmIChhdExlYXN0T25lSXNQY3QgJiYgIWFsbEFyZVBjdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG11c3QgYWxsIGJlIHBlcmNlbnQgdmFsdWVzIGlmIG9uZSBpc1xuXG5cbiAgICAgIHZhciBhbHBoYSA9IG1bNF07XG5cbiAgICAgIGlmIChhbHBoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFscGhhID0gcGFyc2VGbG9hdChhbHBoYSk7XG5cbiAgICAgICAgaWYgKGFscGhhIDwgMCB8fCBhbHBoYSA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gaW52YWxpZCBhbHBoYSB2YWx1ZVxuXG5cbiAgICAgICAgcmV0LnB1c2goYWxwaGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHZhciBjb2xvcm5hbWUydHVwbGUgPSBmdW5jdGlvbiBjb2xvcm5hbWUydHVwbGUoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3JzW2NvbG9yLnRvTG93ZXJDYXNlKCldO1xuICB9O1xuICB2YXIgY29sb3IydHVwbGUgPSBmdW5jdGlvbiBjb2xvcjJ0dXBsZShjb2xvcikge1xuICAgIHJldHVybiAoYXJyYXkoY29sb3IpID8gY29sb3IgOiBudWxsKSB8fCBjb2xvcm5hbWUydHVwbGUoY29sb3IpIHx8IGhleDJ0dXBsZShjb2xvcikgfHwgcmdiMnR1cGxlKGNvbG9yKSB8fCBoc2wydHVwbGUoY29sb3IpO1xuICB9O1xuICB2YXIgY29sb3JzID0ge1xuICAgIC8vIHNwZWNpYWwgY29sb3VyIG5hbWVzXG4gICAgdHJhbnNwYXJlbnQ6IFswLCAwLCAwLCAwXSxcbiAgICAvLyBOQiBhbHBoYSA9PT0gMFxuICAgIC8vIHJlZ3VsYXIgY29sb3Vyc1xuICAgIGFsaWNlYmx1ZTogWzI0MCwgMjQ4LCAyNTVdLFxuICAgIGFudGlxdWV3aGl0ZTogWzI1MCwgMjM1LCAyMTVdLFxuICAgIGFxdWE6IFswLCAyNTUsIDI1NV0sXG4gICAgYXF1YW1hcmluZTogWzEyNywgMjU1LCAyMTJdLFxuICAgIGF6dXJlOiBbMjQwLCAyNTUsIDI1NV0sXG4gICAgYmVpZ2U6IFsyNDUsIDI0NSwgMjIwXSxcbiAgICBiaXNxdWU6IFsyNTUsIDIyOCwgMTk2XSxcbiAgICBibGFjazogWzAsIDAsIDBdLFxuICAgIGJsYW5jaGVkYWxtb25kOiBbMjU1LCAyMzUsIDIwNV0sXG4gICAgYmx1ZTogWzAsIDAsIDI1NV0sXG4gICAgYmx1ZXZpb2xldDogWzEzOCwgNDMsIDIyNl0sXG4gICAgYnJvd246IFsxNjUsIDQyLCA0Ml0sXG4gICAgYnVybHl3b29kOiBbMjIyLCAxODQsIDEzNV0sXG4gICAgY2FkZXRibHVlOiBbOTUsIDE1OCwgMTYwXSxcbiAgICBjaGFydHJldXNlOiBbMTI3LCAyNTUsIDBdLFxuICAgIGNob2NvbGF0ZTogWzIxMCwgMTA1LCAzMF0sXG4gICAgY29yYWw6IFsyNTUsIDEyNywgODBdLFxuICAgIGNvcm5mbG93ZXJibHVlOiBbMTAwLCAxNDksIDIzN10sXG4gICAgY29ybnNpbGs6IFsyNTUsIDI0OCwgMjIwXSxcbiAgICBjcmltc29uOiBbMjIwLCAyMCwgNjBdLFxuICAgIGN5YW46IFswLCAyNTUsIDI1NV0sXG4gICAgZGFya2JsdWU6IFswLCAwLCAxMzldLFxuICAgIGRhcmtjeWFuOiBbMCwgMTM5LCAxMzldLFxuICAgIGRhcmtnb2xkZW5yb2Q6IFsxODQsIDEzNCwgMTFdLFxuICAgIGRhcmtncmF5OiBbMTY5LCAxNjksIDE2OV0sXG4gICAgZGFya2dyZWVuOiBbMCwgMTAwLCAwXSxcbiAgICBkYXJrZ3JleTogWzE2OSwgMTY5LCAxNjldLFxuICAgIGRhcmtraGFraTogWzE4OSwgMTgzLCAxMDddLFxuICAgIGRhcmttYWdlbnRhOiBbMTM5LCAwLCAxMzldLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiBbODUsIDEwNywgNDddLFxuICAgIGRhcmtvcmFuZ2U6IFsyNTUsIDE0MCwgMF0sXG4gICAgZGFya29yY2hpZDogWzE1MywgNTAsIDIwNF0sXG4gICAgZGFya3JlZDogWzEzOSwgMCwgMF0sXG4gICAgZGFya3NhbG1vbjogWzIzMywgMTUwLCAxMjJdLFxuICAgIGRhcmtzZWFncmVlbjogWzE0MywgMTg4LCAxNDNdLFxuICAgIGRhcmtzbGF0ZWJsdWU6IFs3MiwgNjEsIDEzOV0sXG4gICAgZGFya3NsYXRlZ3JheTogWzQ3LCA3OSwgNzldLFxuICAgIGRhcmtzbGF0ZWdyZXk6IFs0NywgNzksIDc5XSxcbiAgICBkYXJrdHVycXVvaXNlOiBbMCwgMjA2LCAyMDldLFxuICAgIGRhcmt2aW9sZXQ6IFsxNDgsIDAsIDIxMV0sXG4gICAgZGVlcHBpbms6IFsyNTUsIDIwLCAxNDddLFxuICAgIGRlZXBza3libHVlOiBbMCwgMTkxLCAyNTVdLFxuICAgIGRpbWdyYXk6IFsxMDUsIDEwNSwgMTA1XSxcbiAgICBkaW1ncmV5OiBbMTA1LCAxMDUsIDEwNV0sXG4gICAgZG9kZ2VyYmx1ZTogWzMwLCAxNDQsIDI1NV0sXG4gICAgZmlyZWJyaWNrOiBbMTc4LCAzNCwgMzRdLFxuICAgIGZsb3JhbHdoaXRlOiBbMjU1LCAyNTAsIDI0MF0sXG4gICAgZm9yZXN0Z3JlZW46IFszNCwgMTM5LCAzNF0sXG4gICAgZnVjaHNpYTogWzI1NSwgMCwgMjU1XSxcbiAgICBnYWluc2Jvcm86IFsyMjAsIDIyMCwgMjIwXSxcbiAgICBnaG9zdHdoaXRlOiBbMjQ4LCAyNDgsIDI1NV0sXG4gICAgZ29sZDogWzI1NSwgMjE1LCAwXSxcbiAgICBnb2xkZW5yb2Q6IFsyMTgsIDE2NSwgMzJdLFxuICAgIGdyYXk6IFsxMjgsIDEyOCwgMTI4XSxcbiAgICBncmV5OiBbMTI4LCAxMjgsIDEyOF0sXG4gICAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICAgIGdyZWVueWVsbG93OiBbMTczLCAyNTUsIDQ3XSxcbiAgICBob25leWRldzogWzI0MCwgMjU1LCAyNDBdLFxuICAgIGhvdHBpbms6IFsyNTUsIDEwNSwgMTgwXSxcbiAgICBpbmRpYW5yZWQ6IFsyMDUsIDkyLCA5Ml0sXG4gICAgaW5kaWdvOiBbNzUsIDAsIDEzMF0sXG4gICAgaXZvcnk6IFsyNTUsIDI1NSwgMjQwXSxcbiAgICBraGFraTogWzI0MCwgMjMwLCAxNDBdLFxuICAgIGxhdmVuZGVyOiBbMjMwLCAyMzAsIDI1MF0sXG4gICAgbGF2ZW5kZXJibHVzaDogWzI1NSwgMjQwLCAyNDVdLFxuICAgIGxhd25ncmVlbjogWzEyNCwgMjUyLCAwXSxcbiAgICBsZW1vbmNoaWZmb246IFsyNTUsIDI1MCwgMjA1XSxcbiAgICBsaWdodGJsdWU6IFsxNzMsIDIxNiwgMjMwXSxcbiAgICBsaWdodGNvcmFsOiBbMjQwLCAxMjgsIDEyOF0sXG4gICAgbGlnaHRjeWFuOiBbMjI0LCAyNTUsIDI1NV0sXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsIDI1MCwgMjEwXSxcbiAgICBsaWdodGdyYXk6IFsyMTEsIDIxMSwgMjExXSxcbiAgICBsaWdodGdyZWVuOiBbMTQ0LCAyMzgsIDE0NF0sXG4gICAgbGlnaHRncmV5OiBbMjExLCAyMTEsIDIxMV0sXG4gICAgbGlnaHRwaW5rOiBbMjU1LCAxODIsIDE5M10sXG4gICAgbGlnaHRzYWxtb246IFsyNTUsIDE2MCwgMTIyXSxcbiAgICBsaWdodHNlYWdyZWVuOiBbMzIsIDE3OCwgMTcwXSxcbiAgICBsaWdodHNreWJsdWU6IFsxMzUsIDIwNiwgMjUwXSxcbiAgICBsaWdodHNsYXRlZ3JheTogWzExOSwgMTM2LCAxNTNdLFxuICAgIGxpZ2h0c2xhdGVncmV5OiBbMTE5LCAxMzYsIDE1M10sXG4gICAgbGlnaHRzdGVlbGJsdWU6IFsxNzYsIDE5NiwgMjIyXSxcbiAgICBsaWdodHllbGxvdzogWzI1NSwgMjU1LCAyMjRdLFxuICAgIGxpbWU6IFswLCAyNTUsIDBdLFxuICAgIGxpbWVncmVlbjogWzUwLCAyMDUsIDUwXSxcbiAgICBsaW5lbjogWzI1MCwgMjQwLCAyMzBdLFxuICAgIG1hZ2VudGE6IFsyNTUsIDAsIDI1NV0sXG4gICAgbWFyb29uOiBbMTI4LCAwLCAwXSxcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiBbMTAyLCAyMDUsIDE3MF0sXG4gICAgbWVkaXVtYmx1ZTogWzAsIDAsIDIwNV0sXG4gICAgbWVkaXVtb3JjaGlkOiBbMTg2LCA4NSwgMjExXSxcbiAgICBtZWRpdW1wdXJwbGU6IFsxNDcsIDExMiwgMjE5XSxcbiAgICBtZWRpdW1zZWFncmVlbjogWzYwLCAxNzksIDExM10sXG4gICAgbWVkaXVtc2xhdGVibHVlOiBbMTIzLCAxMDQsIDIzOF0sXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IFswLCAyNTAsIDE1NF0sXG4gICAgbWVkaXVtdHVycXVvaXNlOiBbNzIsIDIwOSwgMjA0XSxcbiAgICBtZWRpdW12aW9sZXRyZWQ6IFsxOTksIDIxLCAxMzNdLFxuICAgIG1pZG5pZ2h0Ymx1ZTogWzI1LCAyNSwgMTEyXSxcbiAgICBtaW50Y3JlYW06IFsyNDUsIDI1NSwgMjUwXSxcbiAgICBtaXN0eXJvc2U6IFsyNTUsIDIyOCwgMjI1XSxcbiAgICBtb2NjYXNpbjogWzI1NSwgMjI4LCAxODFdLFxuICAgIG5hdmFqb3doaXRlOiBbMjU1LCAyMjIsIDE3M10sXG4gICAgbmF2eTogWzAsIDAsIDEyOF0sXG4gICAgb2xkbGFjZTogWzI1MywgMjQ1LCAyMzBdLFxuICAgIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICAgIG9saXZlZHJhYjogWzEwNywgMTQyLCAzNV0sXG4gICAgb3JhbmdlOiBbMjU1LCAxNjUsIDBdLFxuICAgIG9yYW5nZXJlZDogWzI1NSwgNjksIDBdLFxuICAgIG9yY2hpZDogWzIxOCwgMTEyLCAyMTRdLFxuICAgIHBhbGVnb2xkZW5yb2Q6IFsyMzgsIDIzMiwgMTcwXSxcbiAgICBwYWxlZ3JlZW46IFsxNTIsIDI1MSwgMTUyXSxcbiAgICBwYWxldHVycXVvaXNlOiBbMTc1LCAyMzgsIDIzOF0sXG4gICAgcGFsZXZpb2xldHJlZDogWzIxOSwgMTEyLCAxNDddLFxuICAgIHBhcGF5YXdoaXA6IFsyNTUsIDIzOSwgMjEzXSxcbiAgICBwZWFjaHB1ZmY6IFsyNTUsIDIxOCwgMTg1XSxcbiAgICBwZXJ1OiBbMjA1LCAxMzMsIDYzXSxcbiAgICBwaW5rOiBbMjU1LCAxOTIsIDIwM10sXG4gICAgcGx1bTogWzIyMSwgMTYwLCAyMjFdLFxuICAgIHBvd2RlcmJsdWU6IFsxNzYsIDIyNCwgMjMwXSxcbiAgICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gICAgcmVkOiBbMjU1LCAwLCAwXSxcbiAgICByb3N5YnJvd246IFsxODgsIDE0MywgMTQzXSxcbiAgICByb3lhbGJsdWU6IFs2NSwgMTA1LCAyMjVdLFxuICAgIHNhZGRsZWJyb3duOiBbMTM5LCA2OSwgMTldLFxuICAgIHNhbG1vbjogWzI1MCwgMTI4LCAxMTRdLFxuICAgIHNhbmR5YnJvd246IFsyNDQsIDE2NCwgOTZdLFxuICAgIHNlYWdyZWVuOiBbNDYsIDEzOSwgODddLFxuICAgIHNlYXNoZWxsOiBbMjU1LCAyNDUsIDIzOF0sXG4gICAgc2llbm5hOiBbMTYwLCA4MiwgNDVdLFxuICAgIHNpbHZlcjogWzE5MiwgMTkyLCAxOTJdLFxuICAgIHNreWJsdWU6IFsxMzUsIDIwNiwgMjM1XSxcbiAgICBzbGF0ZWJsdWU6IFsxMDYsIDkwLCAyMDVdLFxuICAgIHNsYXRlZ3JheTogWzExMiwgMTI4LCAxNDRdLFxuICAgIHNsYXRlZ3JleTogWzExMiwgMTI4LCAxNDRdLFxuICAgIHNub3c6IFsyNTUsIDI1MCwgMjUwXSxcbiAgICBzcHJpbmdncmVlbjogWzAsIDI1NSwgMTI3XSxcbiAgICBzdGVlbGJsdWU6IFs3MCwgMTMwLCAxODBdLFxuICAgIHRhbjogWzIxMCwgMTgwLCAxNDBdLFxuICAgIHRlYWw6IFswLCAxMjgsIDEyOF0sXG4gICAgdGhpc3RsZTogWzIxNiwgMTkxLCAyMTZdLFxuICAgIHRvbWF0bzogWzI1NSwgOTksIDcxXSxcbiAgICB0dXJxdW9pc2U6IFs2NCwgMjI0LCAyMDhdLFxuICAgIHZpb2xldDogWzIzOCwgMTMwLCAyMzhdLFxuICAgIHdoZWF0OiBbMjQ1LCAyMjIsIDE3OV0sXG4gICAgd2hpdGU6IFsyNTUsIDI1NSwgMjU1XSxcbiAgICB3aGl0ZXNtb2tlOiBbMjQ1LCAyNDUsIDI0NV0sXG4gICAgeWVsbG93OiBbMjU1LCAyNTUsIDBdLFxuICAgIHllbGxvd2dyZWVuOiBbMTU0LCAyMDUsIDUwXVxuICB9O1xuXG4gIHZhciBzZXRNYXAgPSBmdW5jdGlvbiBzZXRNYXAob3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zLm1hcDtcbiAgICB2YXIga2V5cyA9IG9wdGlvbnMua2V5cztcbiAgICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAocGxhaW5PYmplY3Qoa2V5KSkge1xuICAgICAgICB0aHJvdyBFcnJvcignVHJpZWQgdG8gc2V0IG1hcCB3aXRoIG9iamVjdCBrZXknKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gZXh0ZW5kIHRoZSBtYXAgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmIChvYmpba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZVxuICAgICAgICBvYmpba2V5XSA9IG9wdGlvbnMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBnZXRzIHRoZSB2YWx1ZSBpbiBhIG1hcCBldmVuIGlmIGl0J3Mgbm90IGJ1aWx0IGluIHBsYWNlc1xuXG4gIHZhciBnZXRNYXAgPSBmdW5jdGlvbiBnZXRNYXAob3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zLm1hcDtcbiAgICB2YXIga2V5cyA9IG9wdGlvbnMua2V5cztcbiAgICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAocGxhaW5PYmplY3Qoa2V5KSkge1xuICAgICAgICB0aHJvdyBFcnJvcignVHJpZWQgdG8gZ2V0IG1hcCB3aXRoIG9iamVjdCBrZXknKTtcbiAgICAgIH1cblxuICAgICAgb2JqID0gb2JqW2tleV07XG5cbiAgICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH07IC8vIGRlbGV0ZXMgdGhlIGVudHJ5IGluIHRoZSBtYXBcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gICAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAgICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBtZW1iZXJPZiBfXG4gICAqIEBzaW5jZSAwLjEuMFxuICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8uaXNPYmplY3Qoe30pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqXG4gICAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogXy5pc09iamVjdChudWxsKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICovXG4gIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBpc09iamVjdF8xID0gaXNPYmplY3Q7XG5cbiAgdmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZm4sIG1vZHVsZSkge1xuICBcdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbiAgfVxuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG4gIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGNvbW1vbmpzR2xvYmFsID09ICdvYmplY3QnICYmIGNvbW1vbmpzR2xvYmFsICYmIGNvbW1vbmpzR2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGNvbW1vbmpzR2xvYmFsO1xuXG4gIHZhciBfZnJlZUdsb2JhbCA9IGZyZWVHbG9iYWw7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbiAgdmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbiAgLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG4gIHZhciByb290ID0gX2ZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuICB2YXIgX3Jvb3QgPSByb290O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAgICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDIuNC4wXG4gICAqIEBjYXRlZ29yeSBEYXRlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAqIH0sIF8ubm93KCkpO1xuICAgKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICAgKi9cbiAgdmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfcm9vdC5EYXRlLm5vdygpO1xuICB9O1xuXG4gIHZhciBub3dfMSA9IG5vdztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlXG4gICAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHZhciBfdHJpbW1lZEVuZEluZGV4ID0gdHJpbW1lZEVuZEluZGV4O1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmdcbiAgICAgID8gc3RyaW5nLnNsaWNlKDAsIF90cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgICAgOiBzdHJpbmc7XG4gIH1cblxuICB2YXIgX2Jhc2VUcmltID0gYmFzZVRyaW07XG5cbiAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gIHZhciBTeW1ib2wkMSA9IF9yb290LlN5bWJvbDtcblxuICB2YXIgX1N5bWJvbCA9IFN5bWJvbCQxO1xuXG4gIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG9iamVjdFByb3RvJDUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4gIC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuICB2YXIgaGFzT3duUHJvcGVydHkkNCA9IG9iamVjdFByb3RvJDUuaGFzT3duUHJvcGVydHk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gICAqIG9mIHZhbHVlcy5cbiAgICovXG4gIHZhciBuYXRpdmVPYmplY3RUb1N0cmluZyQxID0gb2JqZWN0UHJvdG8kNS50b1N0cmluZztcblxuICAvKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIHN5bVRvU3RyaW5nVGFnJDEgPSBfU3ltYm9sID8gX1N5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkkNC5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyQxKSxcbiAgICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWckMV07XG5cbiAgICB0cnkge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWckMV0gPSB1bmRlZmluZWQ7XG4gICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmckMS5jYWxsKHZhbHVlKTtcbiAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgIGlmIChpc093bikge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZyQxXSA9IHRhZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZyQxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBfZ2V0UmF3VGFnID0gZ2V0UmF3VGFnO1xuXG4gIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG9iamVjdFByb3RvJDQgPSBPYmplY3QucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gICAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICAgKiBvZiB2YWx1ZXMuXG4gICAqL1xuICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90byQ0LnRvU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgdmFyIF9vYmplY3RUb1N0cmluZyA9IG9iamVjdFRvU3RyaW5nO1xuXG4gIC8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuICAvKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIHN5bVRvU3RyaW5nVGFnID0gX1N5bWJvbCA/IF9TeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gICAgfVxuICAgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICAgID8gX2dldFJhd1RhZyh2YWx1ZSlcbiAgICAgIDogX29iamVjdFRvU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHZhciBfYmFzZUdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICAgKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDQuMC4wXG4gICAqIEBjYXRlZ29yeSBMYW5nXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICovXG4gIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcbiAgfVxuXG4gIHZhciBpc09iamVjdExpa2VfMSA9IGlzT2JqZWN0TGlrZTtcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDQuMC4wXG4gICAqIEBjYXRlZ29yeSBMYW5nXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqL1xuICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAgIChpc09iamVjdExpa2VfMSh2YWx1ZSkgJiYgX2Jhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG4gIH1cblxuICB2YXIgaXNTeW1ib2xfMSA9IGlzU3ltYm9sO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuICB2YXIgTkFOID0gMCAvIDA7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuICB2YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDQuMC4wXG4gICAqIEBjYXRlZ29yeSBMYW5nXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy50b051bWJlcigzLjIpO1xuICAgKiAvLyA9PiAzLjJcbiAgICpcbiAgICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICogLy8gPT4gNWUtMzI0XG4gICAqXG4gICAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICAgKiAvLyA9PiBJbmZpbml0eVxuICAgKlxuICAgKiBfLnRvTnVtYmVyKCczLjInKTtcbiAgICogLy8gPT4gMy4yXG4gICAqL1xuICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sXzEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gTkFOO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3RfMSh2YWx1ZSkpIHtcbiAgICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgIHZhbHVlID0gaXNPYmplY3RfMShvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gICAgfVxuICAgIHZhbHVlID0gX2Jhc2VUcmltKHZhbHVlKTtcbiAgICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICAgIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbiAgfVxuXG4gIHZhciB0b051bWJlcl8xID0gdG9OdW1iZXI7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xuICB2YXIgRlVOQ19FUlJPUl9URVhUJDEgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbiAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xuICB2YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICAgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gICAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gICAqIGludm9jYXRpb24uXG4gICAqXG4gICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgKlxuICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgKlxuICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMC4xLjBcbiAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAgICpcbiAgICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAgICogfSkpO1xuICAgKlxuICAgKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICAgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gICAqXG4gICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICAgKi9cbiAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBsYXN0QXJncyxcbiAgICAgICAgbGFzdFRoaXMsXG4gICAgICAgIG1heFdhaXQsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdGltZXJJZCxcbiAgICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCQxKTtcbiAgICB9XG4gICAgd2FpdCA9IHRvTnVtYmVyXzEod2FpdCkgfHwgMDtcbiAgICBpZiAoaXNPYmplY3RfMShvcHRpb25zKSkge1xuICAgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyXzEob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgICAgcmV0dXJuIG1heGluZ1xuICAgICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICAgIDogdGltZVdhaXRpbmc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICAgIHZhciB0aW1lID0gbm93XzEoKTtcbiAgICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgICB9XG4gICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIH1cbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3dfMSgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgICB2YXIgdGltZSA9IG5vd18xKCksXG4gICAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgICByZXR1cm4gZGVib3VuY2VkO1xuICB9XG5cbiAgdmFyIGRlYm91bmNlXzEgPSBkZWJvdW5jZTtcblxuICB2YXIgcGVyZm9ybWFuY2UgPSBfd2luZG93ID8gX3dpbmRvdy5wZXJmb3JtYW5jZSA6IG51bGw7XG4gIHZhciBwbm93ID0gcGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgfSA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfTtcblxuICB2YXIgcmFmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfd2luZG93KSB7XG4gICAgICBpZiAoX3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIF93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoX3dpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIF93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoX3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIF93aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoX3dpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgX3dpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZShmbik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZuKHBub3coKSk7XG4gICAgICAgIH0sIDEwMDAgLyA2MCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSgpO1xuXG4gIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pIHtcbiAgICByZXR1cm4gcmFmKGZuKTtcbiAgfTtcbiAgdmFyIHBlcmZvcm1hbmNlTm93ID0gcG5vdztcblxuICB2YXIgREVGQVVMVF9IQVNIX1NFRUQgPSA5MjYxO1xuICB2YXIgSyA9IDY1NTk5OyAvLyAzNyBhbHNvIHdvcmtzIHByZXR0eSB3ZWxsXG5cbiAgdmFyIERFRkFVTFRfSEFTSF9TRUVEX0FMVCA9IDUzODE7XG4gIHZhciBoYXNoSXRlcmFibGVJbnRzID0gZnVuY3Rpb24gaGFzaEl0ZXJhYmxlSW50cyhpdGVyYXRvcikge1xuICAgIHZhciBzZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX0hBU0hfU0VFRDtcbiAgICAvLyBzZGJtL3N0cmluZy1oYXNoXG4gICAgdmFyIGhhc2ggPSBzZWVkO1xuICAgIHZhciBlbnRyeTtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpZiAoZW50cnkuZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaGFzaCA9IGhhc2ggKiBLICsgZW50cnkudmFsdWUgfCAwO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNoO1xuICB9O1xuICB2YXIgaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQobnVtKSB7XG4gICAgdmFyIHNlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfSEFTSF9TRUVEO1xuICAgIC8vIHNkYm0vc3RyaW5nLWhhc2hcbiAgICByZXR1cm4gc2VlZCAqIEsgKyBudW0gfCAwO1xuICB9O1xuICB2YXIgaGFzaEludEFsdCA9IGZ1bmN0aW9uIGhhc2hJbnRBbHQobnVtKSB7XG4gICAgdmFyIHNlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfSEFTSF9TRUVEX0FMVDtcbiAgICAvLyBkamIyL3N0cmluZy1oYXNoXG4gICAgcmV0dXJuIChzZWVkIDw8IDUpICsgc2VlZCArIG51bSB8IDA7XG4gIH07XG4gIHZhciBjb21iaW5lSGFzaGVzID0gZnVuY3Rpb24gY29tYmluZUhhc2hlcyhoYXNoMSwgaGFzaDIpIHtcbiAgICByZXR1cm4gaGFzaDEgKiAweDIwMDAwMCArIGhhc2gyO1xuICB9O1xuICB2YXIgY29tYmluZUhhc2hlc0FycmF5ID0gZnVuY3Rpb24gY29tYmluZUhhc2hlc0FycmF5KGhhc2hlcykge1xuICAgIHJldHVybiBoYXNoZXNbMF0gKiAweDIwMDAwMCArIGhhc2hlc1sxXTtcbiAgfTtcbiAgdmFyIGhhc2hBcnJheXMgPSBmdW5jdGlvbiBoYXNoQXJyYXlzKGhhc2hlczEsIGhhc2hlczIpIHtcbiAgICByZXR1cm4gW2hhc2hJbnQoaGFzaGVzMVswXSwgaGFzaGVzMlswXSksIGhhc2hJbnRBbHQoaGFzaGVzMVsxXSwgaGFzaGVzMlsxXSldO1xuICB9O1xuICB2YXIgaGFzaEludHNBcnJheSA9IGZ1bmN0aW9uIGhhc2hJbnRzQXJyYXkoaW50cywgc2VlZCkge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gaW50cy5sZW5ndGg7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgaWYgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeS52YWx1ZSA9IGludHNbaSsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yLCBzZWVkKTtcbiAgfTtcbiAgdmFyIGhhc2hTdHJpbmcgPSBmdW5jdGlvbiBoYXNoU3RyaW5nKHN0ciwgc2VlZCkge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICBpZiAoaSA8IGxlbmd0aCkge1xuICAgICAgICAgIGVudHJ5LnZhbHVlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yLCBzZWVkKTtcbiAgfTtcbiAgdmFyIGhhc2hTdHJpbmdzID0gZnVuY3Rpb24gaGFzaFN0cmluZ3MoKSB7XG4gICAgcmV0dXJuIGhhc2hTdHJpbmdzQXJyYXkoYXJndW1lbnRzKTtcbiAgfTtcbiAgdmFyIGhhc2hTdHJpbmdzQXJyYXkgPSBmdW5jdGlvbiBoYXNoU3RyaW5nc0FycmF5KHN0cnMpIHtcbiAgICB2YXIgaGFzaDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0ciA9IHN0cnNbaV07XG5cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGhhc2ggPSBoYXNoU3RyaW5nKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNoID0gaGFzaFN0cmluZyhzdHIsIGhhc2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNoO1xuICB9O1xuXG4gIC8qZ2xvYmFsIGNvbnNvbGUgKi9cbiAgdmFyIHdhcm5pbmdzRW5hYmxlZCA9IHRydWU7XG4gIHZhciB3YXJuU3VwcG9ydGVkID0gY29uc29sZS53YXJuICE9IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuXG4gIHZhciB0cmFjZVN1cHBvcnRlZCA9IGNvbnNvbGUudHJhY2UgIT0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG5cbiAgdmFyIE1BWF9JTlQkMSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IDkwMDcxOTkyNTQ3NDA5OTE7XG4gIHZhciB0cnVlaWZ5ID0gZnVuY3Rpb24gdHJ1ZWlmeSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgdmFyIGZhbHNpZnkgPSBmdW5jdGlvbiBmYWxzaWZ5KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgdmFyIHplcm9pZnkgPSBmdW5jdGlvbiB6ZXJvaWZ5KCkge1xuICAgIHJldHVybiAwO1xuICB9O1xuICB2YXIgbm9vcCQxID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuICB2YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfTtcbiAgdmFyIHdhcm5pbmdzID0gZnVuY3Rpb24gd2FybmluZ3MoZW5hYmxlZCkge1xuICAgIGlmIChlbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdhcm5pbmdzRW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdhcm5pbmdzRW5hYmxlZDtcbiAgICB9XG4gIH07XG4gIHZhciB3YXJuID0gZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKCF3YXJuaW5ncygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdhcm5TdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhtc2cpO1xuXG4gICAgICBpZiAodHJhY2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gIHZhciBjbG9uZSA9IGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICAgIHJldHVybiBleHRlbmQoe30sIG9iaik7XG4gIH07IC8vIGdldHMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGFyZ3VtZW50XG5cbiAgdmFyIGNvcHkgPSBmdW5jdGlvbiBjb3B5KG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5zbGljZSgpO1xuICAgIH0gZWxzZSBpZiAocGxhaW5PYmplY3Qob2JqKSkge1xuICAgICAgcmV0dXJuIGNsb25lKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9O1xuICB2YXIgY29weUFycmF5JDEgPSBmdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIGFyci5zbGljZSgpO1xuICB9O1xuICB2YXIgdXVpZCA9IGZ1bmN0aW9uIHV1aWQoYSwgYlxuICAvKiBwbGFjZWhvbGRlcnMgKi9cbiAgKSB7XG4gICAgZm9yICggLy8gbG9vcCA6KVxuICAgIGIgPSBhID0gJyc7IC8vIGIgLSByZXN1bHQgLCBhIC0gbnVtZXJpYyBsZXRpYWJsZVxuICAgIGErKyA8IDM2OyAvL1xuICAgIGIgKz0gYSAqIDUxICYgNTIgLy8gaWYgXCJhXCIgaXMgbm90IDkgb3IgMTQgb3IgMTkgb3IgMjRcbiAgICA/IC8vICByZXR1cm4gYSByYW5kb20gbnVtYmVyIG9yIDRcbiAgICAoYSBeIDE1IC8vIGlmIFwiYVwiIGlzIG5vdCAxNVxuICAgID8gLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGZyb20gMCB0byAxNVxuICAgIDggXiBNYXRoLnJhbmRvbSgpICogKGEgXiAyMCA/IDE2IDogNCkgLy8gdW5sZXNzIFwiYVwiIGlzIDIwLCBpbiB3aGljaCBjYXNlIGEgcmFuZG9tIG51bWJlciBmcm9tIDggdG8gMTFcbiAgICA6IDQgLy8gIG90aGVyd2lzZSA0XG4gICAgKS50b1N0cmluZygxNikgOiAnLScgLy8gIGluIG90aGVyIGNhc2VzIChpZiBcImFcIiBpcyA5LDE0LDE5LDI0KSBpbnNlcnQgXCItXCJcbiAgICApIHtcbiAgICB9XG5cbiAgICByZXR1cm4gYjtcbiAgfTtcbiAgdmFyIF9zdGF0aWNFbXB0eU9iamVjdCA9IHt9O1xuICB2YXIgc3RhdGljRW1wdHlPYmplY3QgPSBmdW5jdGlvbiBzdGF0aWNFbXB0eU9iamVjdCgpIHtcbiAgICByZXR1cm4gX3N0YXRpY0VtcHR5T2JqZWN0O1xuICB9O1xuICB2YXIgZGVmYXVsdHMkZyA9IGZ1bmN0aW9uIGRlZmF1bHRzKF9kZWZhdWx0cykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoX2RlZmF1bHRzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgIHZhciBmaWxsZWRPcHRzID0ge307XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIG9wdFZhbCA9IG9wdHMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9wdHNba2V5XTtcbiAgICAgICAgZmlsbGVkT3B0c1trZXldID0gb3B0VmFsID09PSB1bmRlZmluZWQgPyBfZGVmYXVsdHNba2V5XSA6IG9wdFZhbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbGxlZE9wdHM7XG4gICAgfTtcbiAgfTtcbiAgdmFyIHJlbW92ZUZyb21BcnJheSA9IGZ1bmN0aW9uIHJlbW92ZUZyb21BcnJheShhcnIsIGVsZSwgb25lQ29weSkge1xuICAgIGZvciAodmFyIGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcnJbaV0gPT09IGVsZSkge1xuICAgICAgICBhcnIuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgIGlmIChvbmVDb3B5KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBjbGVhckFycmF5ID0gZnVuY3Rpb24gY2xlYXJBcnJheShhcnIpIHtcbiAgICBhcnIuc3BsaWNlKDAsIGFyci5sZW5ndGgpO1xuICB9O1xuICB2YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2goYXJyLCBvdGhlckFycikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3RoZXJBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IG90aGVyQXJyW2ldO1xuICAgICAgYXJyLnB1c2goZWwpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGdldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCkge1xuICAgIGlmIChwcmVmaXgpIHtcbiAgICAgIHByb3BOYW1lID0gcHJlcGVuZENhbWVsKHByZWZpeCwgcHJvcE5hbWUpOyAvLyBlLmcuIChsYWJlbFdpZHRoLCBzb3VyY2UpID0+IHNvdXJjZUxhYmVsV2lkdGhcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqW3Byb3BOYW1lXTtcbiAgfTtcbiAgdmFyIHNldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpIHtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwcm9wTmFtZSA9IHByZXBlbmRDYW1lbChwcmVmaXgsIHByb3BOYW1lKTsgLy8gZS5nLiAobGFiZWxXaWR0aCwgc291cmNlKSA9PiBzb3VyY2VMYWJlbFdpZHRoXG4gICAgfVxuXG4gICAgb2JqW3Byb3BOYW1lXSA9IHZhbHVlO1xuICB9O1xuXG4gIC8qIGdsb2JhbCBNYXAgKi9cbiAgdmFyIE9iamVjdE1hcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JqZWN0TWFwKCkge1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE9iamVjdE1hcCk7XG5cbiAgICAgIHRoaXMuX29iaiA9IHt9O1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhPYmplY3RNYXAsIFt7XG4gICAgICBrZXk6IFwic2V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGtleSwgdmFsKSB7XG4gICAgICAgIHRoaXMuX29ialtrZXldID0gdmFsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlbGV0ZShrZXkpIHtcbiAgICAgICAgdGhpcy5fb2JqW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjbGVhclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9vYmogPSB7fTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqW2tleV07XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE9iamVjdE1hcDtcbiAgfSgpO1xuXG4gIHZhciBNYXAkMiA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnID8gTWFwIDogT2JqZWN0TWFwO1xuXG4gIC8qIGdsb2JhbCBTZXQgKi9cbiAgdmFyIHVuZGVmID0gXCJ1bmRlZmluZWRcIiA7XG5cbiAgdmFyIE9iamVjdFNldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JqZWN0U2V0KGFycmF5T3JPYmplY3RTZXQpIHtcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPYmplY3RTZXQpO1xuXG4gICAgICB0aGlzLl9vYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5zaXplID0gMDtcblxuICAgICAgaWYgKGFycmF5T3JPYmplY3RTZXQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgYXJyO1xuXG4gICAgICAgIGlmIChhcnJheU9yT2JqZWN0U2V0Lmluc3RhbmNlU3RyaW5nICE9IG51bGwgJiYgYXJyYXlPck9iamVjdFNldC5pbnN0YW5jZVN0cmluZygpID09PSB0aGlzLmluc3RhbmNlU3RyaW5nKCkpIHtcbiAgICAgICAgICBhcnIgPSBhcnJheU9yT2JqZWN0U2V0LnRvQXJyYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcnIgPSBhcnJheU9yT2JqZWN0U2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmFkZChhcnJbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKE9iamVjdFNldCwgW3tcbiAgICAgIGtleTogXCJpbnN0YW5jZVN0cmluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluc3RhbmNlU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gJ3NldCc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImFkZFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCh2YWwpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLl9vYmo7XG5cbiAgICAgICAgaWYgKG9bdmFsXSAhPT0gMSkge1xuICAgICAgICAgIG9bdmFsXSA9IDE7XG4gICAgICAgICAgdGhpcy5zaXplKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlbGV0ZSh2YWwpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLl9vYmo7XG5cbiAgICAgICAgaWYgKG9bdmFsXSA9PT0gMSkge1xuICAgICAgICAgIG9bdmFsXSA9IDA7XG4gICAgICAgICAgdGhpcy5zaXplLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKHZhbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqW3ZhbF0gPT09IDE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInRvQXJyYXlcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhcyhrZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBPYmplY3RTZXQ7XG4gIH0oKTtcblxuICB2YXIgU2V0JDEgPSAodHlwZW9mIFNldCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKFNldCkpICE9PSB1bmRlZiA/IFNldCA6IE9iamVjdFNldDtcblxuICB2YXIgRWxlbWVudCA9IGZ1bmN0aW9uIEVsZW1lbnQoY3ksIHBhcmFtcykge1xuICAgIHZhciByZXN0b3JlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuXG4gICAgaWYgKGN5ID09PSB1bmRlZmluZWQgfHwgcGFyYW1zID09PSB1bmRlZmluZWQgfHwgIWNvcmUoY3kpKSB7XG4gICAgICBlcnJvcignQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXAgPSBwYXJhbXMuZ3JvdXA7IC8vIHRyeSB0byBhdXRvbWF0aWNhbGx5IGluZmVyIHRoZSBncm91cCBpZiB1bnNwZWNpZmllZFxuXG4gICAgaWYgKGdyb3VwID09IG51bGwpIHtcbiAgICAgIGlmIChwYXJhbXMuZGF0YSAmJiBwYXJhbXMuZGF0YS5zb3VyY2UgIT0gbnVsbCAmJiBwYXJhbXMuZGF0YS50YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICBncm91cCA9ICdlZGdlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cCA9ICdub2Rlcyc7XG4gICAgICB9XG4gICAgfSAvLyB2YWxpZGF0ZSBncm91cFxuXG5cbiAgICBpZiAoZ3JvdXAgIT09ICdub2RlcycgJiYgZ3JvdXAgIT09ICdlZGdlcycpIHtcbiAgICAgIGVycm9yKCdBbiBlbGVtZW50IG11c3QgYmUgb2YgdHlwZSBgbm9kZXNgIG9yIGBlZGdlc2A7IHlvdSBzcGVjaWZpZWQgYCcgKyBncm91cCArICdgJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBtYWtlIHRoZSBlbGVtZW50IGFycmF5LWxpa2UsIGp1c3QgbGlrZSBhIGNvbGxlY3Rpb25cblxuXG4gICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIHRoaXNbMF0gPSB0aGlzOyAvLyBOT1RFOiB3aGVuIHNvbWV0aGluZyBpcyBhZGRlZCBoZXJlLCBhZGQgYWxzbyB0byBlbGUuanNvbigpXG5cbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0ge1xuICAgICAgY3k6IGN5LFxuICAgICAgc2luZ2xlOiB0cnVlLFxuICAgICAgLy8gaW5kaWNhdGVzIHRoaXMgaXMgYW4gZWxlbWVudFxuICAgICAgZGF0YTogcGFyYW1zLmRhdGEgfHwge30sXG4gICAgICAvLyBkYXRhIG9iamVjdFxuICAgICAgcG9zaXRpb246IHBhcmFtcy5wb3NpdGlvbiB8fCB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sXG4gICAgICAvLyAoeCwgeSkgcG9zaXRpb24gcGFpclxuICAgICAgYXV0b1dpZHRoOiB1bmRlZmluZWQsXG4gICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IG9mIG5vZGVzIGNhbGN1bGF0ZWQgYnkgdGhlIHJlbmRlcmVyIHdoZW4gc2V0IHRvIHNwZWNpYWwgJ2F1dG8nIHZhbHVlXG4gICAgICBhdXRvSGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICBhdXRvUGFkZGluZzogdW5kZWZpbmVkLFxuICAgICAgY29tcG91bmRCb3VuZHNDbGVhbjogZmFsc2UsXG4gICAgICAvLyB3aGV0aGVyIHRoZSBjb21wb3VuZCBkaW1lbnNpb25zIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIHRoZSBuZXh0IHRpbWUgZGltZW5zaW9ucyBhcmUgcmVhZFxuICAgICAgbGlzdGVuZXJzOiBbXSxcbiAgICAgIC8vIGFycmF5IG9mIGJvdW5kIGxpc3RlbmVyc1xuICAgICAgZ3JvdXA6IGdyb3VwLFxuICAgICAgLy8gc3RyaW5nOyAnbm9kZXMnIG9yICdlZGdlcydcbiAgICAgIHN0eWxlOiB7fSxcbiAgICAgIC8vIHByb3BlcnRpZXMgYXMgc2V0IGJ5IHRoZSBzdHlsZVxuICAgICAgcnN0eWxlOiB7fSxcbiAgICAgIC8vIHByb3BlcnRpZXMgZm9yIHN0eWxlIHNlbnQgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGNvcmVcbiAgICAgIHN0eWxlQ3h0czogW10sXG4gICAgICAvLyBhcHBsaWVkIHN0eWxlIGNvbnRleHRzIGZyb20gdGhlIHN0eWxlclxuICAgICAgc3R5bGVLZXlzOiB7fSxcbiAgICAgIC8vIHBlci1ncm91cCBrZXlzIG9mIHN0eWxlIHByb3BlcnR5IHZhbHVlc1xuICAgICAgcmVtb3ZlZDogdHJ1ZSxcbiAgICAgIC8vIHdoZXRoZXIgaXQncyBpbnNpZGUgdGhlIHZpczsgdHJ1ZSBpZiByZW1vdmVkIChzZXQgdHJ1ZSBoZXJlIHNpbmNlIHdlIGNhbGwgcmVzdG9yZSlcbiAgICAgIHNlbGVjdGVkOiBwYXJhbXMuc2VsZWN0ZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICAvLyB3aGV0aGVyIGl0J3Mgc2VsZWN0ZWRcbiAgICAgIHNlbGVjdGFibGU6IHBhcmFtcy5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLnNlbGVjdGFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAvLyB3aGV0aGVyIGl0J3Mgc2VsZWN0YWJsZVxuICAgICAgbG9ja2VkOiBwYXJhbXMubG9ja2VkID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBsb2NrZWQgKGNhbm5vdCBiZSBtb3ZlZClcbiAgICAgIGdyYWJiZWQ6IGZhbHNlLFxuICAgICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBncmFiYmVkIGJ5IHRoZSBtb3VzZTsgcmVuZGVyZXIgc2V0cyB0aGlzIHByaXZhdGVseVxuICAgICAgZ3JhYmJhYmxlOiBwYXJhbXMuZ3JhYmJhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLmdyYWJiYWJsZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIC8vIHdoZXRoZXIgdGhlIGVsZW1lbnQgY2FuIGJlIGdyYWJiZWRcbiAgICAgIHBhbm5hYmxlOiBwYXJhbXMucGFubmFibGUgPT09IHVuZGVmaW5lZCA/IGdyb3VwID09PSAnZWRnZXMnID8gdHJ1ZSA6IGZhbHNlIDogcGFyYW1zLnBhbm5hYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgcGFzc3Rocm91Z2ggcGFubmluZyBlbmFibGVkXG4gICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBhY3RpdmUgZnJvbSB1c2VyIGludGVyYWN0aW9uXG4gICAgICBjbGFzc2VzOiBuZXcgU2V0JDEoKSxcbiAgICAgIC8vIG1hcCAoIGNsYXNzTmFtZSA9PiB0cnVlIClcbiAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAvLyBvYmplY3QgZm9yIGN1cnJlbnRseS1ydW5uaW5nIGFuaW1hdGlvbnNcbiAgICAgICAgY3VycmVudDogW10sXG4gICAgICAgIHF1ZXVlOiBbXVxuICAgICAgfSxcbiAgICAgIHJzY3JhdGNoOiB7fSxcbiAgICAgIC8vIG9iamVjdCBpbiB3aGljaCB0aGUgcmVuZGVyZXIgY2FuIHN0b3JlIGluZm9ybWF0aW9uXG4gICAgICBzY3JhdGNoOiBwYXJhbXMuc2NyYXRjaCB8fCB7fSxcbiAgICAgIC8vIHNjcmF0Y2ggb2JqZWN0c1xuICAgICAgZWRnZXM6IFtdLFxuICAgICAgLy8gYXJyYXkgb2YgY29ubmVjdGVkIGVkZ2VzXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICAvLyBhcnJheSBvZiBjaGlsZHJlblxuICAgICAgcGFyZW50OiBwYXJhbXMucGFyZW50ICYmIHBhcmFtcy5wYXJlbnQuaXNOb2RlKCkgPyBwYXJhbXMucGFyZW50IDogbnVsbCxcbiAgICAgIC8vIHBhcmVudCByZWZcbiAgICAgIHRyYXZlcnNhbENhY2hlOiB7fSxcbiAgICAgIC8vIGNhY2hlIG9mIG91dHB1dCBvZiB0cmF2ZXJzYWwgZnVuY3Rpb25zXG4gICAgICBiYWNrZ3JvdW5kaW5nOiBmYWxzZSxcbiAgICAgIC8vIHdoZXRoZXIgYmFja2dyb3VuZCBpbWFnZXMgYXJlIGxvYWRpbmdcbiAgICAgIGJiQ2FjaGU6IG51bGwsXG4gICAgICAvLyBjYWNoZSBvZiB0aGUgY3VycmVudCBib3VuZGluZyBib3hcbiAgICAgIGJiQ2FjaGVTaGlmdDoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgLy8gc2hpZnQgYXBwbGllZCB0byBjYWNoZWQgYmIgdG8gYmUgYXBwbGllZCBvbiBuZXh0IGdldFxuICAgICAgYm9keUJvdW5kczogbnVsbCxcbiAgICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBlbGVtZW50IGJvZHksIHcvbyBvdmVybGF5XG4gICAgICBvdmVybGF5Qm91bmRzOiBudWxsLFxuICAgICAgLy8gYm91bmRzIGNhY2hlIG9mIGVsZW1lbnQgYm9keSwgaW5jbHVkaW5nIG92ZXJsYXlcbiAgICAgIGxhYmVsQm91bmRzOiB7XG4gICAgICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBsYWJlbHNcbiAgICAgICAgYWxsOiBudWxsLFxuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgbWFpbjogbnVsbFxuICAgICAgfSxcbiAgICAgIGFycm93Qm91bmRzOiB7XG4gICAgICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBlZGdlIGFycm93c1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgJ21pZC1zb3VyY2UnOiBudWxsLFxuICAgICAgICAnbWlkLXRhcmdldCc6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKF9wLnBvc2l0aW9uLnggPT0gbnVsbCkge1xuICAgICAgX3AucG9zaXRpb24ueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKF9wLnBvc2l0aW9uLnkgPT0gbnVsbCkge1xuICAgICAgX3AucG9zaXRpb24ueSA9IDA7XG4gICAgfSAvLyByZW5kZXJlZFBvc2l0aW9uIG92ZXJyaWRlcyBpZiBzcGVjaWZpZWRcblxuXG4gICAgaWYgKHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uKSB7XG4gICAgICB2YXIgcnBvcyA9IHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICBfcC5wb3NpdGlvbiA9IHtcbiAgICAgICAgeDogKHJwb3MueCAtIHBhbi54KSAvIHpvb20sXG4gICAgICAgIHk6IChycG9zLnkgLSBwYW4ueSkgLyB6b29tXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBjbGFzc2VzID0gW107XG5cbiAgICBpZiAoYXJyYXkocGFyYW1zLmNsYXNzZXMpKSB7XG4gICAgICBjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXM7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcocGFyYW1zLmNsYXNzZXMpKSB7XG4gICAgICBjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXMuc3BsaXQoL1xccysvKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2xzID0gY2xhc3Nlc1tpXTtcblxuICAgICAgaWYgKCFjbHMgfHwgY2xzID09PSAnJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgX3AuY2xhc3Nlcy5hZGQoY2xzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZUVtaXR0ZXIoKTtcbiAgICB2YXIgYnlwYXNzID0gcGFyYW1zLnN0eWxlIHx8IHBhcmFtcy5jc3M7XG5cbiAgICBpZiAoYnlwYXNzKSB7XG4gICAgICB3YXJuKCdTZXR0aW5nIGEgYHN0eWxlYCBieXBhc3MgYXQgZWxlbWVudCBjcmVhdGlvbiBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuICBUcnkgdG8gdXNlIHRoZSBzdHlsZXNoZWV0IGluc3RlYWQuJyk7XG4gICAgICB0aGlzLnN0eWxlKGJ5cGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3RvcmUgPT09IHVuZGVmaW5lZCB8fCByZXN0b3JlKSB7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlZmluZVNlYXJjaCA9IGZ1bmN0aW9uIGRlZmluZVNlYXJjaChwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB7XG4gICAgICBiZnM6IHBhcmFtcy5iZnMgfHwgIXBhcmFtcy5kZnMsXG4gICAgICBkZnM6IHBhcmFtcy5kZnMgfHwgIXBhcmFtcy5iZnNcbiAgICB9OyAvLyBmcm9tIHBzZXVkb2NvZGUgb24gd2lraXBlZGlhXG5cbiAgICByZXR1cm4gZnVuY3Rpb24gc2VhcmNoRm4ocm9vdHMsIGZuLCBkaXJlY3RlZCkge1xuICAgICAgdmFyIG9wdGlvbnM7XG5cbiAgICAgIGlmIChwbGFpbk9iamVjdChyb290cykgJiYgIWVsZW1lbnRPckNvbGxlY3Rpb24ocm9vdHMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSByb290cztcbiAgICAgICAgcm9vdHMgPSBvcHRpb25zLnJvb3RzIHx8IG9wdGlvbnMucm9vdDtcbiAgICAgICAgZm4gPSBvcHRpb25zLnZpc2l0O1xuICAgICAgICBkaXJlY3RlZCA9IG9wdGlvbnMuZGlyZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAhZm4kNihmbikgPyBmbiA6IGRpcmVjdGVkO1xuICAgICAgZm4gPSBmbiQ2KGZuKSA/IGZuIDogZnVuY3Rpb24gKCkge307XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgICAgdmFyIHYgPSByb290cyA9IHN0cmluZyhyb290cykgPyB0aGlzLmZpbHRlcihyb290cykgOiByb290cztcbiAgICAgIHZhciBRID0gW107XG4gICAgICB2YXIgY29ubmVjdGVkTm9kZXMgPSBbXTtcbiAgICAgIHZhciBjb25uZWN0ZWRCeSA9IHt9O1xuICAgICAgdmFyIGlkMmRlcHRoID0ge307XG4gICAgICB2YXIgViA9IHt9O1xuICAgICAgdmFyIGogPSAwO1xuICAgICAgdmFyIGZvdW5kO1xuXG4gICAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgICAgIG5vZGVzID0gX3RoaXMkYnlHcm91cC5ub2RlcyxcbiAgICAgICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7IC8vIGVucXVldWUgdlxuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdmkgPSB2W2ldO1xuICAgICAgICB2YXIgdmlJZCA9IHZpLmlkKCk7XG5cbiAgICAgICAgaWYgKHZpLmlzTm9kZSgpKSB7XG4gICAgICAgICAgUS51bnNoaWZ0KHZpKTtcblxuICAgICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgICBWW3ZpSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbm5lY3RlZE5vZGVzLnB1c2godmkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlkMmRlcHRoW3ZpSWRdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgICAgdmFyIHYgPSBwYXJhbXMuYmZzID8gUS5zaGlmdCgpIDogUS5wb3AoKTtcbiAgICAgICAgdmFyIHZJZCA9IHYuaWQoKTtcblxuICAgICAgICBpZiAocGFyYW1zLmRmcykge1xuICAgICAgICAgIGlmIChWW3ZJZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgVlt2SWRdID0gdHJ1ZTtcbiAgICAgICAgICBjb25uZWN0ZWROb2Rlcy5wdXNoKHYpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlcHRoID0gaWQyZGVwdGhbdklkXTtcbiAgICAgICAgdmFyIHByZXZFZGdlID0gY29ubmVjdGVkQnlbdklkXTtcbiAgICAgICAgdmFyIHNyYyA9IHByZXZFZGdlICE9IG51bGwgPyBwcmV2RWRnZS5zb3VyY2UoKSA6IG51bGw7XG4gICAgICAgIHZhciB0Z3QgPSBwcmV2RWRnZSAhPSBudWxsID8gcHJldkVkZ2UudGFyZ2V0KCkgOiBudWxsO1xuICAgICAgICB2YXIgcHJldk5vZGUgPSBwcmV2RWRnZSA9PSBudWxsID8gdW5kZWZpbmVkIDogdi5zYW1lKHNyYykgPyB0Z3RbMF0gOiBzcmNbMF07XG4gICAgICAgIHZhciByZXQgPSB2b2lkIDA7XG4gICAgICAgIHJldCA9IGZuKHYsIHByZXZFZGdlLCBwcmV2Tm9kZSwgaisrLCBkZXB0aCk7XG5cbiAgICAgICAgaWYgKHJldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZvdW5kID0gdjtcbiAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZ3RWRnZXMgPSB2LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmV0dXJuICghZGlyZWN0ZWQgfHwgZS5zb3VyY2UoKS5zYW1lKHYpKSAmJiBlZGdlcy5oYXMoZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHZ3RWRnZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIHZhciBlID0gdndFZGdlc1tfaTJdO1xuICAgICAgICAgIHZhciB3ID0gZS5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuICFuLnNhbWUodikgJiYgbm9kZXMuaGFzKG4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciB3SWQgPSB3LmlkKCk7XG5cbiAgICAgICAgICBpZiAody5sZW5ndGggIT09IDAgJiYgIVZbd0lkXSkge1xuICAgICAgICAgICAgdyA9IHdbMF07XG4gICAgICAgICAgICBRLnB1c2godyk7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgICAgIFZbd0lkXSA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbm5lY3RlZE5vZGVzLnB1c2godyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbm5lY3RlZEJ5W3dJZF0gPSBlO1xuICAgICAgICAgICAgaWQyZGVwdGhbd0lkXSA9IGlkMmRlcHRoW3ZJZF0gKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgd2hpbGUgKFEubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHZhciBfcmV0ID0gX2xvb3AoKTtcblxuICAgICAgICBpZiAoX3JldCA9PT0gXCJjb250aW51ZVwiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb25uZWN0ZWRFbGVzID0gY3kuY29sbGVjdGlvbigpO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgY29ubmVjdGVkTm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gY29ubmVjdGVkTm9kZXNbX2ldO1xuICAgICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEJ5W25vZGUuaWQoKV07XG5cbiAgICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbm5lY3RlZEVsZXMucHVzaChlZGdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbm5lY3RlZEVsZXMucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogY3kuY29sbGVjdGlvbihjb25uZWN0ZWRFbGVzKSxcbiAgICAgICAgZm91bmQ6IGN5LmNvbGxlY3Rpb24oZm91bmQpXG4gICAgICB9O1xuICAgIH07XG4gIH07IC8vIHNlYXJjaCwgc3Bhbm5pbmcgdHJlZXMsIGV0Y1xuXG5cbiAgdmFyIGVsZXNmbiR2ID0ge1xuICAgIGJyZWFkdGhGaXJzdFNlYXJjaDogZGVmaW5lU2VhcmNoKHtcbiAgICAgIGJmczogdHJ1ZVxuICAgIH0pLFxuICAgIGRlcHRoRmlyc3RTZWFyY2g6IGRlZmluZVNlYXJjaCh7XG4gICAgICBkZnM6IHRydWVcbiAgICB9KVxuICB9OyAvLyBuaWNlLCBzaG9ydCBtYXRoZW1hdGljYWwgYWxpYXNcblxuICBlbGVzZm4kdi5iZnMgPSBlbGVzZm4kdi5icmVhZHRoRmlyc3RTZWFyY2g7XG4gIGVsZXNmbiR2LmRmcyA9IGVsZXNmbiR2LmRlcHRoRmlyc3RTZWFyY2g7XG5cbiAgdmFyIGhlYXAkMSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuICAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIEhlYXAsIGRlZmF1bHRDbXAsIGZsb29yLCBoZWFwaWZ5LCBoZWFwcG9wLCBoZWFwcHVzaCwgaGVhcHB1c2hwb3AsIGhlYXByZXBsYWNlLCBpbnNvcnQsIG1pbiwgbmxhcmdlc3QsIG5zbWFsbGVzdCwgdXBkYXRlSXRlbSwgX3NpZnRkb3duLCBfc2lmdHVwO1xuXG4gICAgZmxvb3IgPSBNYXRoLmZsb29yLCBtaW4gPSBNYXRoLm1pbjtcblxuXG4gICAgLypcbiAgICBEZWZhdWx0IGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYmUgdXNlZFxuICAgICAqL1xuXG4gICAgZGVmYXVsdENtcCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIGlmICh4IDwgeSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoeCA+IHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG5cbiAgICAvKlxuICAgIEluc2VydCBpdGVtIHggaW4gbGlzdCBhLCBhbmQga2VlcCBpdCBzb3J0ZWQgYXNzdW1pbmcgYSBpcyBzb3J0ZWQuXG4gICAgXG4gICAgSWYgeCBpcyBhbHJlYWR5IGluIGEsIGluc2VydCBpdCB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCB4LlxuICAgIFxuICAgIE9wdGlvbmFsIGFyZ3MgbG8gKGRlZmF1bHQgMCkgYW5kIGhpIChkZWZhdWx0IGEubGVuZ3RoKSBib3VuZCB0aGUgc2xpY2VcbiAgICBvZiBhIHRvIGJlIHNlYXJjaGVkLlxuICAgICAqL1xuXG4gICAgaW5zb3J0ID0gZnVuY3Rpb24oYSwgeCwgbG8sIGhpLCBjbXApIHtcbiAgICAgIHZhciBtaWQ7XG4gICAgICBpZiAobG8gPT0gbnVsbCkge1xuICAgICAgICBsbyA9IDA7XG4gICAgICB9XG4gICAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICAgIH1cbiAgICAgIGlmIChsbyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgfVxuICAgICAgaWYgKGhpID09IG51bGwpIHtcbiAgICAgICAgaGkgPSBhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIG1pZCA9IGZsb29yKChsbyArIGhpKSAvIDIpO1xuICAgICAgICBpZiAoY21wKHgsIGFbbWlkXSkgPCAwKSB7XG4gICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG8gPSBtaWQgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKFtdLnNwbGljZS5hcHBseShhLCBbbG8sIGxvIC0gbG9dLmNvbmNhdCh4KSksIHgpO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgUHVzaCBpdGVtIG9udG8gaGVhcCwgbWFpbnRhaW5pbmcgdGhlIGhlYXAgaW52YXJpYW50LlxuICAgICAqL1xuXG4gICAgaGVhcHB1c2ggPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICAgIH1cbiAgICAgIGFycmF5LnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gX3NpZnRkb3duKGFycmF5LCAwLCBhcnJheS5sZW5ndGggLSAxLCBjbXApO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgUG9wIHRoZSBzbWFsbGVzdCBpdGVtIG9mZiB0aGUgaGVhcCwgbWFpbnRhaW5pbmcgdGhlIGhlYXAgaW52YXJpYW50LlxuICAgICAqL1xuXG4gICAgaGVhcHBvcCA9IGZ1bmN0aW9uKGFycmF5LCBjbXApIHtcbiAgICAgIHZhciBsYXN0ZWx0LCByZXR1cm5pdGVtO1xuICAgICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgICB9XG4gICAgICBsYXN0ZWx0ID0gYXJyYXkucG9wKCk7XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybml0ZW0gPSBhcnJheVswXTtcbiAgICAgICAgYXJyYXlbMF0gPSBsYXN0ZWx0O1xuICAgICAgICBfc2lmdHVwKGFycmF5LCAwLCBjbXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuaXRlbSA9IGxhc3RlbHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0dXJuaXRlbTtcbiAgICB9O1xuXG5cbiAgICAvKlxuICAgIFBvcCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHNtYWxsZXN0IHZhbHVlLCBhbmQgYWRkIHRoZSBuZXcgaXRlbS5cbiAgICBcbiAgICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaGVhcHBvcCgpIGZvbGxvd2VkIGJ5IGhlYXBwdXNoKCksIGFuZCBjYW4gYmVcbiAgICBtb3JlIGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgYSBmaXhlZCBzaXplIGhlYXAuIE5vdGUgdGhhdCB0aGUgdmFsdWVcbiAgICByZXR1cm5lZCBtYXkgYmUgbGFyZ2VyIHRoYW4gaXRlbSEgVGhhdCBjb25zdHJhaW5zIHJlYXNvbmFibGUgdXNlIG9mXG4gICAgdGhpcyByb3V0aW5lIHVubGVzcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBjb25kaXRpb25hbCByZXBsYWNlbWVudDpcbiAgICAgICAgaWYgaXRlbSA+IGFycmF5WzBdXG4gICAgICAgICAgaXRlbSA9IGhlYXByZXBsYWNlKGFycmF5LCBpdGVtKVxuICAgICAqL1xuXG4gICAgaGVhcHJlcGxhY2UgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgICB2YXIgcmV0dXJuaXRlbTtcbiAgICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgICAgfVxuICAgICAgcmV0dXJuaXRlbSA9IGFycmF5WzBdO1xuICAgICAgYXJyYXlbMF0gPSBpdGVtO1xuICAgICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICAgIHJldHVybiByZXR1cm5pdGVtO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgRmFzdCB2ZXJzaW9uIG9mIGEgaGVhcHB1c2ggZm9sbG93ZWQgYnkgYSBoZWFwcG9wLlxuICAgICAqL1xuXG4gICAgaGVhcHB1c2hwb3AgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgICB2YXIgX3JlZjtcbiAgICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgICAgfVxuICAgICAgaWYgKGFycmF5Lmxlbmd0aCAmJiBjbXAoYXJyYXlbMF0sIGl0ZW0pIDwgMCkge1xuICAgICAgICBfcmVmID0gW2FycmF5WzBdLCBpdGVtXSwgaXRlbSA9IF9yZWZbMF0sIGFycmF5WzBdID0gX3JlZlsxXTtcbiAgICAgICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgVHJhbnNmb3JtIGxpc3QgaW50byBhIGhlYXAsIGluLXBsYWNlLCBpbiBPKGFycmF5Lmxlbmd0aCkgdGltZS5cbiAgICAgKi9cblxuICAgIGhlYXBpZnkgPSBmdW5jdGlvbihhcnJheSwgY21wKSB7XG4gICAgICB2YXIgaSwgX2ksIF9sZW4sIF9yZWYxLCBfcmVzdWx0cywgX3Jlc3VsdHMxO1xuICAgICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgICB9XG4gICAgICBfcmVmMSA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgX3Jlc3VsdHMxID0gW107XG4gICAgICAgIGZvciAodmFyIF9qID0gMCwgX3JlZiA9IGZsb29yKGFycmF5Lmxlbmd0aCAvIDIpOyAwIDw9IF9yZWYgPyBfaiA8IF9yZWYgOiBfaiA+IF9yZWY7IDAgPD0gX3JlZiA/IF9qKysgOiBfai0tKXsgX3Jlc3VsdHMxLnB1c2goX2opOyB9XG4gICAgICAgIHJldHVybiBfcmVzdWx0czE7XG4gICAgICB9KS5hcHBseSh0aGlzKS5yZXZlcnNlKCk7XG4gICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmMS5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBpID0gX3JlZjFbX2ldO1xuICAgICAgICBfcmVzdWx0cy5wdXNoKF9zaWZ0dXAoYXJyYXksIGksIGNtcCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gaXRlbSBpbiB0aGUgaGVhcC5cbiAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaXRlbSBpcyBiZWluZyBtb2RpZmllZC5cbiAgICAgKi9cblxuICAgIHVwZGF0ZUl0ZW0gPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgICB2YXIgcG9zO1xuICAgICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgICB9XG4gICAgICBwb3MgPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xuICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3NpZnRkb3duKGFycmF5LCAwLCBwb3MsIGNtcCk7XG4gICAgICByZXR1cm4gX3NpZnR1cChhcnJheSwgcG9zLCBjbXApO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgRmluZCB0aGUgbiBsYXJnZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC5cbiAgICAgKi9cblxuICAgIG5sYXJnZXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGNtcCkge1xuICAgICAgdmFyIGVsZW0sIHJlc3VsdCwgX2ksIF9sZW4sIF9yZWY7XG4gICAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGFycmF5LnNsaWNlKDAsIG4pO1xuICAgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBoZWFwaWZ5KHJlc3VsdCwgY21wKTtcbiAgICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBlbGVtID0gX3JlZltfaV07XG4gICAgICAgIGhlYXBwdXNocG9wKHJlc3VsdCwgZWxlbSwgY21wKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc29ydChjbXApLnJldmVyc2UoKTtcbiAgICB9O1xuXG5cbiAgICAvKlxuICAgIEZpbmQgdGhlIG4gc21hbGxlc3QgZWxlbWVudHMgaW4gYSBkYXRhc2V0LlxuICAgICAqL1xuXG4gICAgbnNtYWxsZXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGNtcCkge1xuICAgICAgdmFyIGVsZW0sIGxvcywgcmVzdWx0LCBfaSwgX2osIF9sZW4sIF9yZWYsIF9yZWYxLCBfcmVzdWx0cztcbiAgICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgICAgfVxuICAgICAgaWYgKG4gKiAxMCA8PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gYXJyYXkuc2xpY2UoMCwgbikuc29ydChjbXApO1xuICAgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxvcyA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgZWxlbSA9IF9yZWZbX2ldO1xuICAgICAgICAgIGlmIChjbXAoZWxlbSwgbG9zKSA8IDApIHtcbiAgICAgICAgICAgIGluc29ydChyZXN1bHQsIGVsZW0sIDAsIG51bGwsIGNtcCk7XG4gICAgICAgICAgICByZXN1bHQucG9wKCk7XG4gICAgICAgICAgICBsb3MgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaGVhcGlmeShhcnJheSwgY21wKTtcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9qID0gMCwgX3JlZjEgPSBtaW4obiwgYXJyYXkubGVuZ3RoKTsgMCA8PSBfcmVmMSA/IF9qIDwgX3JlZjEgOiBfaiA+IF9yZWYxOyAwIDw9IF9yZWYxID8gKytfaiA6IC0tX2opIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaChoZWFwcG9wKGFycmF5LCBjbXApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgX3NpZnRkb3duID0gZnVuY3Rpb24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCkge1xuICAgICAgdmFyIG5ld2l0ZW0sIHBhcmVudCwgcGFyZW50cG9zO1xuICAgICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgICB9XG4gICAgICBuZXdpdGVtID0gYXJyYXlbcG9zXTtcbiAgICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcykge1xuICAgICAgICBwYXJlbnRwb3MgPSAocG9zIC0gMSkgPj4gMTtcbiAgICAgICAgcGFyZW50ID0gYXJyYXlbcGFyZW50cG9zXTtcbiAgICAgICAgaWYgKGNtcChuZXdpdGVtLCBwYXJlbnQpIDwgMCkge1xuICAgICAgICAgIGFycmF5W3Bvc10gPSBwYXJlbnQ7XG4gICAgICAgICAgcG9zID0gcGFyZW50cG9zO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5W3Bvc10gPSBuZXdpdGVtO1xuICAgIH07XG5cbiAgICBfc2lmdHVwID0gZnVuY3Rpb24oYXJyYXksIHBvcywgY21wKSB7XG4gICAgICB2YXIgY2hpbGRwb3MsIGVuZHBvcywgbmV3aXRlbSwgcmlnaHRwb3MsIHN0YXJ0cG9zO1xuICAgICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgICB9XG4gICAgICBlbmRwb3MgPSBhcnJheS5sZW5ndGg7XG4gICAgICBzdGFydHBvcyA9IHBvcztcbiAgICAgIG5ld2l0ZW0gPSBhcnJheVtwb3NdO1xuICAgICAgY2hpbGRwb3MgPSAyICogcG9zICsgMTtcbiAgICAgIHdoaWxlIChjaGlsZHBvcyA8IGVuZHBvcykge1xuICAgICAgICByaWdodHBvcyA9IGNoaWxkcG9zICsgMTtcbiAgICAgICAgaWYgKHJpZ2h0cG9zIDwgZW5kcG9zICYmICEoY21wKGFycmF5W2NoaWxkcG9zXSwgYXJyYXlbcmlnaHRwb3NdKSA8IDApKSB7XG4gICAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvcztcbiAgICAgICAgfVxuICAgICAgICBhcnJheVtwb3NdID0gYXJyYXlbY2hpbGRwb3NdO1xuICAgICAgICBwb3MgPSBjaGlsZHBvcztcbiAgICAgICAgY2hpbGRwb3MgPSAyICogcG9zICsgMTtcbiAgICAgIH1cbiAgICAgIGFycmF5W3Bvc10gPSBuZXdpdGVtO1xuICAgICAgcmV0dXJuIF9zaWZ0ZG93bihhcnJheSwgc3RhcnRwb3MsIHBvcywgY21wKTtcbiAgICB9O1xuXG4gICAgSGVhcCA9IChmdW5jdGlvbigpIHtcbiAgICAgIEhlYXAucHVzaCA9IGhlYXBwdXNoO1xuXG4gICAgICBIZWFwLnBvcCA9IGhlYXBwb3A7XG5cbiAgICAgIEhlYXAucmVwbGFjZSA9IGhlYXByZXBsYWNlO1xuXG4gICAgICBIZWFwLnB1c2hwb3AgPSBoZWFwcHVzaHBvcDtcblxuICAgICAgSGVhcC5oZWFwaWZ5ID0gaGVhcGlmeTtcblxuICAgICAgSGVhcC51cGRhdGVJdGVtID0gdXBkYXRlSXRlbTtcblxuICAgICAgSGVhcC5ubGFyZ2VzdCA9IG5sYXJnZXN0O1xuXG4gICAgICBIZWFwLm5zbWFsbGVzdCA9IG5zbWFsbGVzdDtcblxuICAgICAgZnVuY3Rpb24gSGVhcChjbXApIHtcbiAgICAgICAgdGhpcy5jbXAgPSBjbXAgIT0gbnVsbCA/IGNtcCA6IGRlZmF1bHRDbXA7XG4gICAgICAgIHRoaXMubm9kZXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgSGVhcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgcmV0dXJuIGhlYXBwdXNoKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGVhcHBvcCh0aGlzLm5vZGVzLCB0aGlzLmNtcCk7XG4gICAgICB9O1xuXG4gICAgICBIZWFwLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzWzBdO1xuICAgICAgfTtcblxuICAgICAgSGVhcC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLmluZGV4T2YoeCkgIT09IC0xO1xuICAgICAgfTtcblxuICAgICAgSGVhcC5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgcmV0dXJuIGhlYXByZXBsYWNlKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLnB1c2hwb3AgPSBmdW5jdGlvbih4KSB7XG4gICAgICAgIHJldHVybiBoZWFwcHVzaHBvcCh0aGlzLm5vZGVzLCB4LCB0aGlzLmNtcCk7XG4gICAgICB9O1xuXG4gICAgICBIZWFwLnByb3RvdHlwZS5oZWFwaWZ5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoZWFwaWZ5KHRoaXMubm9kZXMsIHRoaXMuY21wKTtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLnVwZGF0ZUl0ZW0gPSBmdW5jdGlvbih4KSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVJdGVtKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzID0gW107XG4gICAgICB9O1xuXG4gICAgICBIZWFwLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGggPT09IDA7XG4gICAgICB9O1xuXG4gICAgICBIZWFwLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLmxlbmd0aDtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoZWFwO1xuICAgICAgICBoZWFwID0gbmV3IEhlYXAoKTtcbiAgICAgICAgaGVhcC5ub2RlcyA9IHRoaXMubm9kZXMuc2xpY2UoMCk7XG4gICAgICAgIHJldHVybiBoZWFwO1xuICAgICAgfTtcblxuICAgICAgSGVhcC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5zbGljZSgwKTtcbiAgICAgIH07XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLmluc2VydCA9IEhlYXAucHJvdG90eXBlLnB1c2g7XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLnRvcCA9IEhlYXAucHJvdG90eXBlLnBlZWs7XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLmZyb250ID0gSGVhcC5wcm90b3R5cGUucGVlaztcblxuICAgICAgSGVhcC5wcm90b3R5cGUuaGFzID0gSGVhcC5wcm90b3R5cGUuY29udGFpbnM7XG5cbiAgICAgIEhlYXAucHJvdG90eXBlLmNvcHkgPSBIZWFwLnByb3RvdHlwZS5jbG9uZTtcblxuICAgICAgcmV0dXJuIEhlYXA7XG5cbiAgICB9KSgpO1xuXG4gICAgKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgICAgfVxuICAgIH0pKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIEhlYXA7XG4gICAgfSk7XG5cbiAgfSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG4gIH0pO1xuXG4gIHZhciBoZWFwID0gaGVhcCQxO1xuXG4gIHZhciBkaWprc3RyYURlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gICAgcm9vdDogbnVsbCxcbiAgICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGRpcmVjdGVkOiBmYWxzZVxuICB9KTtcbiAgdmFyIGVsZXNmbiR1ID0ge1xuICAgIGRpamtzdHJhOiBmdW5jdGlvbiBkaWprc3RyYShvcHRpb25zKSB7XG4gICAgICBpZiAoIXBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIHJvb3Q6IGFyZ3NbMF0sXG4gICAgICAgICAgd2VpZ2h0OiBhcmdzWzFdLFxuICAgICAgICAgIGRpcmVjdGVkOiBhcmdzWzJdXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBfZGlqa3N0cmFEZWZhdWx0cyA9IGRpamtzdHJhRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICAgICAgcm9vdCA9IF9kaWprc3RyYURlZmF1bHRzLnJvb3QsXG4gICAgICAgICAgd2VpZ2h0ID0gX2RpamtzdHJhRGVmYXVsdHMud2VpZ2h0LFxuICAgICAgICAgIGRpcmVjdGVkID0gX2RpamtzdHJhRGVmYXVsdHMuZGlyZWN0ZWQ7XG5cbiAgICAgIHZhciBlbGVzID0gdGhpcztcbiAgICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICAgIHZhciBzb3VyY2UgPSBzdHJpbmcocm9vdCkgPyB0aGlzLmZpbHRlcihyb290KVswXSA6IHJvb3RbMF07XG4gICAgICB2YXIgZGlzdCA9IHt9O1xuICAgICAgdmFyIHByZXYgPSB7fTtcbiAgICAgIHZhciBrbm93bkRpc3QgPSB7fTtcblxuICAgICAgdmFyIF90aGlzJGJ5R3JvdXAgPSB0aGlzLmJ5R3JvdXAoKSxcbiAgICAgICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuXG4gICAgICBlZGdlcy51bm1lcmdlQnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmlzTG9vcCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBnZXREaXN0ID0gZnVuY3Rpb24gZ2V0RGlzdChub2RlKSB7XG4gICAgICAgIHJldHVybiBkaXN0W25vZGUuaWQoKV07XG4gICAgICB9O1xuXG4gICAgICB2YXIgc2V0RGlzdCA9IGZ1bmN0aW9uIHNldERpc3Qobm9kZSwgZCkge1xuICAgICAgICBkaXN0W25vZGUuaWQoKV0gPSBkO1xuICAgICAgICBRLnVwZGF0ZUl0ZW0obm9kZSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgUSA9IG5ldyBoZWFwKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBnZXREaXN0KGEpIC0gZ2V0RGlzdChiKTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGRpc3Rbbm9kZS5pZCgpXSA9IG5vZGUuc2FtZShzb3VyY2UpID8gMCA6IEluZmluaXR5O1xuICAgICAgICBRLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXN0QmV0d2VlbiA9IGZ1bmN0aW9uIGRpc3RCZXR3ZWVuKHUsIHYpIHtcbiAgICAgICAgdmFyIHV2cyA9IChkaXJlY3RlZCA/IHUuZWRnZXNUbyh2KSA6IHUuZWRnZXNXaXRoKHYpKS5pbnRlcnNlY3QoZWRnZXMpO1xuICAgICAgICB2YXIgc21hbGxlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICB2YXIgc21hbGxlc3RFZGdlO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB1dnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIGVkZ2UgPSB1dnNbX2ldO1xuXG4gICAgICAgICAgdmFyIF93ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcblxuICAgICAgICAgIGlmIChfd2VpZ2h0IDwgc21hbGxlc3REaXN0YW5jZSB8fCAhc21hbGxlc3RFZGdlKSB7XG4gICAgICAgICAgICBzbWFsbGVzdERpc3RhbmNlID0gX3dlaWdodDtcbiAgICAgICAgICAgIHNtYWxsZXN0RWRnZSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlZGdlOiBzbWFsbGVzdEVkZ2UsXG4gICAgICAgICAgZGlzdDogc21hbGxlc3REaXN0YW5jZVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgd2hpbGUgKFEuc2l6ZSgpID4gMCkge1xuICAgICAgICB2YXIgdSA9IFEucG9wKCk7XG4gICAgICAgIHZhciBzbWFsbGV0c0Rpc3QgPSBnZXREaXN0KHUpO1xuICAgICAgICB2YXIgdWlkID0gdS5pZCgpO1xuICAgICAgICBrbm93bkRpc3RbdWlkXSA9IHNtYWxsZXRzRGlzdDtcblxuICAgICAgICBpZiAoc21hbGxldHNEaXN0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5laWdoYm9ycyA9IHUubmVpZ2hib3Job29kKCkuaW50ZXJzZWN0KG5vZGVzKTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuZWlnaGJvcnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIHZhciB2ID0gbmVpZ2hib3JzW19pMl07XG4gICAgICAgICAgdmFyIHZpZCA9IHYuaWQoKTtcbiAgICAgICAgICB2YXIgdkRpc3QgPSBkaXN0QmV0d2Vlbih1LCB2KTtcbiAgICAgICAgICB2YXIgYWx0ID0gc21hbGxldHNEaXN0ICsgdkRpc3QuZGlzdDtcblxuICAgICAgICAgIGlmIChhbHQgPCBnZXREaXN0KHYpKSB7XG4gICAgICAgICAgICBzZXREaXN0KHYsIGFsdCk7XG4gICAgICAgICAgICBwcmV2W3ZpZF0gPSB7XG4gICAgICAgICAgICAgIG5vZGU6IHUsXG4gICAgICAgICAgICAgIGVkZ2U6IHZEaXN0LmVkZ2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGZvclxuXG4gICAgICB9IC8vIHdoaWxlXG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzdGFuY2VUbzogZnVuY3Rpb24gZGlzdGFuY2VUbyhub2RlKSB7XG4gICAgICAgICAgdmFyIHRhcmdldCA9IHN0cmluZyhub2RlKSA/IG5vZGVzLmZpbHRlcihub2RlKVswXSA6IG5vZGVbMF07XG4gICAgICAgICAgcmV0dXJuIGtub3duRGlzdFt0YXJnZXQuaWQoKV07XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhUbzogZnVuY3Rpb24gcGF0aFRvKG5vZGUpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0ID0gc3RyaW5nKG5vZGUpID8gbm9kZXMuZmlsdGVyKG5vZGUpWzBdIDogbm9kZVswXTtcbiAgICAgICAgICB2YXIgUyA9IFtdO1xuICAgICAgICAgIHZhciB1ID0gdGFyZ2V0O1xuICAgICAgICAgIHZhciB1aWQgPSB1LmlkKCk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIFMudW5zaGlmdCh0YXJnZXQpO1xuXG4gICAgICAgICAgICB3aGlsZSAocHJldlt1aWRdKSB7XG4gICAgICAgICAgICAgIHZhciBwID0gcHJldlt1aWRdO1xuICAgICAgICAgICAgICBTLnVuc2hpZnQocC5lZGdlKTtcbiAgICAgICAgICAgICAgUy51bnNoaWZ0KHAubm9kZSk7XG4gICAgICAgICAgICAgIHUgPSBwLm5vZGU7XG4gICAgICAgICAgICAgIHVpZCA9IHUuaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZWxlcy5zcGF3bihTKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGVsZXNmbiR0ID0ge1xuICAgIC8vIGtydXNrYWwncyBhbGdvcml0aG0gKGZpbmRzIG1pbiBzcGFubmluZyB0cmVlLCBhc3N1bWluZyB1bmRpcmVjdGVkIGdyYXBoKVxuICAgIC8vIGltcGxlbWVudGVkIGZyb20gcHNldWRvY29kZSBmcm9tIHdpa2lwZWRpYVxuICAgIGtydXNrYWw6IGZ1bmN0aW9uIGtydXNrYWwod2VpZ2h0Rm4pIHtcbiAgICAgIHdlaWdodEZuID0gd2VpZ2h0Rm4gfHwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgICAgIG5vZGVzID0gX3RoaXMkYnlHcm91cC5ub2RlcyxcbiAgICAgICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG5cbiAgICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICAgIHZhciBmb3Jlc3QgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgICAgdmFyIEEgPSBub2RlczsgLy8gYXNzdW1lcyBieUdyb3VwKCkgY3JlYXRlcyBuZXcgY29sbGVjdGlvbnMgdGhhdCBjYW4gYmUgc2FmZWx5IG11dGF0ZWRcblxuICAgICAgdmFyIGZpbmRTZXRJbmRleCA9IGZ1bmN0aW9uIGZpbmRTZXRJbmRleChlbGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlcyA9IGZvcmVzdFtpXTtcblxuICAgICAgICAgIGlmIChlbGVzLmhhcyhlbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07IC8vIHN0YXJ0IHdpdGggb25lIGZvcmVzdCBwZXIgbm9kZVxuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICBmb3Jlc3RbaV0gPSB0aGlzLnNwYXduKG5vZGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFMgPSBlZGdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiB3ZWlnaHRGbihhKSAtIHdlaWdodEZuKGIpO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBTLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZWRnZSA9IFNbX2ldO1xuICAgICAgICB2YXIgdSA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgICAgIHZhciB2ID0gZWRnZS50YXJnZXQoKVswXTtcbiAgICAgICAgdmFyIHNldFVJbmRleCA9IGZpbmRTZXRJbmRleCh1KTtcbiAgICAgICAgdmFyIHNldFZJbmRleCA9IGZpbmRTZXRJbmRleCh2KTtcbiAgICAgICAgdmFyIHNldFUgPSBmb3Jlc3Rbc2V0VUluZGV4XTtcbiAgICAgICAgdmFyIHNldFYgPSBmb3Jlc3Rbc2V0VkluZGV4XTtcblxuICAgICAgICBpZiAoc2V0VUluZGV4ICE9PSBzZXRWSW5kZXgpIHtcbiAgICAgICAgICBBLm1lcmdlKGVkZ2UpOyAvLyBjb21iaW5lIGZvcmVzdHMgZm9yIHUgYW5kIHZcblxuICAgICAgICAgIHNldFUubWVyZ2Uoc2V0Vik7XG4gICAgICAgICAgZm9yZXN0LnNwbGljZShzZXRWSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgfTtcblxuICB2YXIgYVN0YXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICAgIHJvb3Q6IG51bGwsXG4gICAgZ29hbDogbnVsbCxcbiAgICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGhldXJpc3RpYzogZnVuY3Rpb24gaGV1cmlzdGljKGVkZ2UpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgZGlyZWN0ZWQ6IGZhbHNlXG4gIH0pO1xuICB2YXIgZWxlc2ZuJHMgPSB7XG4gICAgLy8gSW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gICAgYVN0YXI6IGZ1bmN0aW9uIGFTdGFyKG9wdGlvbnMpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgICAgdmFyIF9hU3RhckRlZmF1bHRzID0gYVN0YXJEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgICAgICByb290ID0gX2FTdGFyRGVmYXVsdHMucm9vdCxcbiAgICAgICAgICBnb2FsID0gX2FTdGFyRGVmYXVsdHMuZ29hbCxcbiAgICAgICAgICBoZXVyaXN0aWMgPSBfYVN0YXJEZWZhdWx0cy5oZXVyaXN0aWMsXG4gICAgICAgICAgZGlyZWN0ZWQgPSBfYVN0YXJEZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgICAgICB3ZWlnaHQgPSBfYVN0YXJEZWZhdWx0cy53ZWlnaHQ7XG5cbiAgICAgIHJvb3QgPSBjeS5jb2xsZWN0aW9uKHJvb3QpWzBdO1xuICAgICAgZ29hbCA9IGN5LmNvbGxlY3Rpb24oZ29hbClbMF07XG4gICAgICB2YXIgc2lkID0gcm9vdC5pZCgpO1xuICAgICAgdmFyIHRpZCA9IGdvYWwuaWQoKTtcbiAgICAgIHZhciBnU2NvcmUgPSB7fTtcbiAgICAgIHZhciBmU2NvcmUgPSB7fTtcbiAgICAgIHZhciBjbG9zZWRTZXRJZHMgPSB7fTtcbiAgICAgIHZhciBvcGVuU2V0ID0gbmV3IGhlYXAoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGZTY29yZVthLmlkKCldIC0gZlNjb3JlW2IuaWQoKV07XG4gICAgICB9KTtcbiAgICAgIHZhciBvcGVuU2V0SWRzID0gbmV3IFNldCQxKCk7XG4gICAgICB2YXIgY2FtZUZyb20gPSB7fTtcbiAgICAgIHZhciBjYW1lRnJvbUVkZ2UgPSB7fTtcblxuICAgICAgdmFyIGFkZFRvT3BlblNldCA9IGZ1bmN0aW9uIGFkZFRvT3BlblNldChlbGUsIGlkKSB7XG4gICAgICAgIG9wZW5TZXQucHVzaChlbGUpO1xuICAgICAgICBvcGVuU2V0SWRzLmFkZChpZCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY01pbiwgY01pbklkO1xuXG4gICAgICB2YXIgcG9wRnJvbU9wZW5TZXQgPSBmdW5jdGlvbiBwb3BGcm9tT3BlblNldCgpIHtcbiAgICAgICAgY01pbiA9IG9wZW5TZXQucG9wKCk7XG4gICAgICAgIGNNaW5JZCA9IGNNaW4uaWQoKTtcbiAgICAgICAgb3BlblNldElkc1tcImRlbGV0ZVwiXShjTWluSWQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGlzSW5PcGVuU2V0ID0gZnVuY3Rpb24gaXNJbk9wZW5TZXQoaWQpIHtcbiAgICAgICAgcmV0dXJuIG9wZW5TZXRJZHMuaGFzKGlkKTtcbiAgICAgIH07XG5cbiAgICAgIGFkZFRvT3BlblNldChyb290LCBzaWQpO1xuICAgICAgZ1Njb3JlW3NpZF0gPSAwO1xuICAgICAgZlNjb3JlW3NpZF0gPSBoZXVyaXN0aWMocm9vdCk7IC8vIENvdW50ZXJcblxuICAgICAgdmFyIHN0ZXBzID0gMDsgLy8gTWFpbiBsb29wXG5cbiAgICAgIHdoaWxlIChvcGVuU2V0LnNpemUoKSA+IDApIHtcbiAgICAgICAgcG9wRnJvbU9wZW5TZXQoKTtcbiAgICAgICAgc3RlcHMrKzsgLy8gSWYgd2UndmUgZm91bmQgb3VyIGdvYWwsIHRoZW4gd2UgYXJlIGRvbmVcblxuICAgICAgICBpZiAoY01pbklkID09PSB0aWQpIHtcbiAgICAgICAgICB2YXIgcGF0aCA9IFtdO1xuICAgICAgICAgIHZhciBwYXRoTm9kZSA9IGdvYWw7XG4gICAgICAgICAgdmFyIHBhdGhOb2RlSWQgPSB0aWQ7XG4gICAgICAgICAgdmFyIHBhdGhFZGdlID0gY2FtZUZyb21FZGdlW3BhdGhOb2RlSWRdO1xuXG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KHBhdGhOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHBhdGhFZGdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcGF0aC51bnNoaWZ0KHBhdGhFZGdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF0aE5vZGUgPSBjYW1lRnJvbVtwYXRoTm9kZUlkXTtcblxuICAgICAgICAgICAgaWYgKHBhdGhOb2RlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGhOb2RlSWQgPSBwYXRoTm9kZS5pZCgpO1xuICAgICAgICAgICAgcGF0aEVkZ2UgPSBjYW1lRnJvbUVkZ2VbcGF0aE5vZGVJZF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvdW5kOiB0cnVlLFxuICAgICAgICAgICAgZGlzdGFuY2U6IGdTY29yZVtjTWluSWRdLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5zcGF3bihwYXRoKSxcbiAgICAgICAgICAgIHN0ZXBzOiBzdGVwc1xuICAgICAgICAgIH07XG4gICAgICAgIH0gLy8gQWRkIGNNaW4gdG8gcHJvY2Vzc2VkIG5vZGVzXG5cblxuICAgICAgICBjbG9zZWRTZXRJZHNbY01pbklkXSA9IHRydWU7IC8vIFVwZGF0ZSBzY29yZXMgZm9yIG5laWdoYm9ycyBvZiBjTWluXG4gICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IGlmIGdyYXBoIGlzIGRpcmVjdGVkIG9yIG5vdFxuXG4gICAgICAgIHZhciB2d0VkZ2VzID0gY01pbi5fcHJpdmF0ZS5lZGdlcztcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZ3RWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZSA9IHZ3RWRnZXNbaV07IC8vIGVkZ2UgbXVzdCBiZSBpbiBzZXQgb2YgY2FsbGluZyBlbGVzXG5cbiAgICAgICAgICBpZiAoIXRoaXMuaGFzRWxlbWVudFdpdGhJZChlLmlkKCkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGNNaW4gbXVzdCBiZSB0aGUgc291cmNlIG9mIGVkZ2UgaWYgZGlyZWN0ZWRcblxuXG4gICAgICAgICAgaWYgKGRpcmVjdGVkICYmIGUuZGF0YSgnc291cmNlJykgIT09IGNNaW5JZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHdTcmMgPSBlLnNvdXJjZSgpO1xuICAgICAgICAgIHZhciB3VGd0ID0gZS50YXJnZXQoKTtcbiAgICAgICAgICB2YXIgdyA9IHdTcmMuaWQoKSAhPT0gY01pbklkID8gd1NyYyA6IHdUZ3Q7XG4gICAgICAgICAgdmFyIHdpZCA9IHcuaWQoKTsgLy8gbm9kZSBtdXN0IGJlIGluIHNldCBvZiBjYWxsaW5nIGVsZXNcblxuICAgICAgICAgIGlmICghdGhpcy5oYXNFbGVtZW50V2l0aElkKHdpZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gaWYgbm9kZSBpcyBpbiBjbG9zZWRTZXQsIGlnbm9yZSBpdFxuXG5cbiAgICAgICAgICBpZiAoY2xvc2VkU2V0SWRzW3dpZF0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gTmV3IHRlbnRhdGl2ZSBzY29yZSBmb3Igbm9kZSB3XG5cblxuICAgICAgICAgIHZhciB0ZW1wU2NvcmUgPSBnU2NvcmVbY01pbklkXSArIHdlaWdodChlKTsgLy8gVXBkYXRlIGdTY29yZSBmb3Igbm9kZSB3IGlmOlxuICAgICAgICAgIC8vICAgdyBub3QgcHJlc2VudCBpbiBvcGVuU2V0XG4gICAgICAgICAgLy8gT1JcbiAgICAgICAgICAvLyAgIHRlbnRhdGl2ZSBnU2NvcmUgaXMgbGVzcyB0aGFuIHByZXZpb3VzIHZhbHVlXG4gICAgICAgICAgLy8gdyBub3QgaW4gb3BlblNldFxuXG4gICAgICAgICAgaWYgKCFpc0luT3BlblNldCh3aWQpKSB7XG4gICAgICAgICAgICBnU2NvcmVbd2lkXSA9IHRlbXBTY29yZTtcbiAgICAgICAgICAgIGZTY29yZVt3aWRdID0gdGVtcFNjb3JlICsgaGV1cmlzdGljKHcpO1xuICAgICAgICAgICAgYWRkVG9PcGVuU2V0KHcsIHdpZCk7XG4gICAgICAgICAgICBjYW1lRnJvbVt3aWRdID0gY01pbjtcbiAgICAgICAgICAgIGNhbWVGcm9tRWRnZVt3aWRdID0gZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gLy8gdyBhbHJlYWR5IGluIG9wZW5TZXQsIGJ1dCB3aXRoIGdyZWF0ZXIgZ1Njb3JlXG5cblxuICAgICAgICAgIGlmICh0ZW1wU2NvcmUgPCBnU2NvcmVbd2lkXSkge1xuICAgICAgICAgICAgZ1Njb3JlW3dpZF0gPSB0ZW1wU2NvcmU7XG4gICAgICAgICAgICBmU2NvcmVbd2lkXSA9IHRlbXBTY29yZSArIGhldXJpc3RpYyh3KTtcbiAgICAgICAgICAgIGNhbWVGcm9tW3dpZF0gPSBjTWluO1xuICAgICAgICAgICAgY2FtZUZyb21FZGdlW3dpZF0gPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBFbmQgb2YgbmVpZ2hib3JzIHVwZGF0ZVxuXG4gICAgICB9IC8vIEVuZCBvZiBtYWluIGxvb3BcbiAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwgdGhlbiB3ZSd2ZSBub3QgcmVhY2hlZCBvdXIgZ29hbFxuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgICAgZGlzdGFuY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgcGF0aDogdW5kZWZpbmVkLFxuICAgICAgICBzdGVwczogc3RlcHNcbiAgICAgIH07XG4gICAgfVxuICB9OyAvLyBlbGVzZm5cblxuICB2YXIgZmxveWRXYXJzaGFsbERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gICAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSxcbiAgICBkaXJlY3RlZDogZmFsc2VcbiAgfSk7XG4gIHZhciBlbGVzZm4kciA9IHtcbiAgICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgICBmbG95ZFdhcnNoYWxsOiBmdW5jdGlvbiBmbG95ZFdhcnNoYWxsKG9wdGlvbnMpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgICAgdmFyIF9mbG95ZFdhcnNoYWxsRGVmYXVsdCA9IGZsb3lkV2Fyc2hhbGxEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgICAgICB3ZWlnaHQgPSBfZmxveWRXYXJzaGFsbERlZmF1bHQud2VpZ2h0LFxuICAgICAgICAgIGRpcmVjdGVkID0gX2Zsb3lkV2Fyc2hhbGxEZWZhdWx0LmRpcmVjdGVkO1xuXG4gICAgICB2YXIgd2VpZ2h0Rm4gPSB3ZWlnaHQ7XG5cbiAgICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcztcblxuICAgICAgdmFyIE4gPSBub2Rlcy5sZW5ndGg7XG4gICAgICB2YXIgTnNxID0gTiAqIE47XG5cbiAgICAgIHZhciBpbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihub2RlKSB7XG4gICAgICAgIHJldHVybiBub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGF0SW5kZXggPSBmdW5jdGlvbiBhdEluZGV4KGkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVzW2ldO1xuICAgICAgfTsgLy8gSW5pdGlhbGl6ZSBkaXN0YW5jZSBtYXRyaXhcblxuXG4gICAgICB2YXIgZGlzdCA9IG5ldyBBcnJheShOc3EpO1xuXG4gICAgICBmb3IgKHZhciBuID0gMDsgbiA8IE5zcTsgbisrKSB7XG4gICAgICAgIHZhciBqID0gbiAlIE47XG4gICAgICAgIHZhciBpID0gKG4gLSBqKSAvIE47XG5cbiAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICBkaXN0W25dID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXN0W25dID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gSW5pdGlhbGl6ZSBtYXRyaXggdXNlZCBmb3IgcGF0aCByZWNvbnN0cnVjdGlvblxuICAgICAgLy8gSW5pdGlhbGl6ZSBkaXN0YW5jZSBtYXRyaXhcblxuXG4gICAgICB2YXIgbmV4dCA9IG5ldyBBcnJheShOc3EpO1xuICAgICAgdmFyIGVkZ2VOZXh0ID0gbmV3IEFycmF5KE5zcSk7IC8vIFByb2Nlc3MgZWRnZXNcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVkZ2VzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW19pXTtcbiAgICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpWzBdO1xuXG4gICAgICAgIGlmIChzcmMgPT09IHRndCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIGV4Y2x1ZGUgbG9vcHNcblxuXG4gICAgICAgIHZhciBzID0gaW5kZXhPZihzcmMpO1xuICAgICAgICB2YXIgdCA9IGluZGV4T2YodGd0KTtcbiAgICAgICAgdmFyIHN0ID0gcyAqIE4gKyB0OyAvLyBzb3VyY2UgdG8gdGFyZ2V0IGluZGV4XG5cbiAgICAgICAgdmFyIF93ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTsgLy8gQ2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzIGFub3RoZXIgZWRnZSBiZXR3ZWVuIHNhbWUgMiBub2Rlc1xuXG5cbiAgICAgICAgaWYgKGRpc3Rbc3RdID4gX3dlaWdodCkge1xuICAgICAgICAgIGRpc3Rbc3RdID0gX3dlaWdodDtcbiAgICAgICAgICBuZXh0W3N0XSA9IHQ7XG4gICAgICAgICAgZWRnZU5leHRbc3RdID0gZWRnZTtcbiAgICAgICAgfSAvLyBJZiB1bmRpcmVjdGVkIGdyYXBoLCBwcm9jZXNzICdyZXZlcnNlZCcgZWRnZVxuXG5cbiAgICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICAgIHZhciB0cyA9IHQgKiBOICsgczsgLy8gdGFyZ2V0IHRvIHNvdXJjZSBpbmRleFxuXG4gICAgICAgICAgaWYgKCFkaXJlY3RlZCAmJiBkaXN0W3RzXSA+IF93ZWlnaHQpIHtcbiAgICAgICAgICAgIGRpc3RbdHNdID0gX3dlaWdodDtcbiAgICAgICAgICAgIG5leHRbdHNdID0gcztcbiAgICAgICAgICAgIGVkZ2VOZXh0W3RzXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIE1haW4gbG9vcFxuXG5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICAgICAgdmFyIGlrID0gX2kyICogTiArIGs7XG5cbiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgTjsgX2orKykge1xuICAgICAgICAgICAgdmFyIGlqID0gX2kyICogTiArIF9qO1xuICAgICAgICAgICAgdmFyIGtqID0gayAqIE4gKyBfajtcblxuICAgICAgICAgICAgaWYgKGRpc3RbaWtdICsgZGlzdFtral0gPCBkaXN0W2lqXSkge1xuICAgICAgICAgICAgICBkaXN0W2lqXSA9IGRpc3RbaWtdICsgZGlzdFtral07XG4gICAgICAgICAgICAgIG5leHRbaWpdID0gbmV4dFtpa107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBnZXRBcmdFbGUgPSBmdW5jdGlvbiBnZXRBcmdFbGUoZWxlKSB7XG4gICAgICAgIHJldHVybiAoc3RyaW5nKGVsZSkgPyBjeS5maWx0ZXIoZWxlKSA6IGVsZSlbMF07XG4gICAgICB9O1xuXG4gICAgICB2YXIgaW5kZXhPZkFyZ0VsZSA9IGZ1bmN0aW9uIGluZGV4T2ZBcmdFbGUoZWxlKSB7XG4gICAgICAgIHJldHVybiBpbmRleE9mKGdldEFyZ0VsZShlbGUpKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZXMgPSB7XG4gICAgICAgIGRpc3RhbmNlOiBmdW5jdGlvbiBkaXN0YW5jZShmcm9tLCB0bykge1xuICAgICAgICAgIHZhciBpID0gaW5kZXhPZkFyZ0VsZShmcm9tKTtcbiAgICAgICAgICB2YXIgaiA9IGluZGV4T2ZBcmdFbGUodG8pO1xuICAgICAgICAgIHJldHVybiBkaXN0W2kgKiBOICsgal07XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uIHBhdGgoZnJvbSwgdG8pIHtcbiAgICAgICAgICB2YXIgaSA9IGluZGV4T2ZBcmdFbGUoZnJvbSk7XG4gICAgICAgICAgdmFyIGogPSBpbmRleE9mQXJnRWxlKHRvKTtcbiAgICAgICAgICB2YXIgZnJvbU5vZGUgPSBhdEluZGV4KGkpO1xuXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tTm9kZS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5leHRbaSAqIE4gKyBqXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwYXRoID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICAgIHZhciBwcmV2ID0gaTtcbiAgICAgICAgICB2YXIgZWRnZTtcbiAgICAgICAgICBwYXRoLm1lcmdlKGZyb21Ob2RlKTtcblxuICAgICAgICAgIHdoaWxlIChpICE9PSBqKSB7XG4gICAgICAgICAgICBwcmV2ID0gaTtcbiAgICAgICAgICAgIGkgPSBuZXh0W2kgKiBOICsgal07XG4gICAgICAgICAgICBlZGdlID0gZWRnZU5leHRbcHJldiAqIE4gKyBpXTtcbiAgICAgICAgICAgIHBhdGgubWVyZ2UoZWRnZSk7XG4gICAgICAgICAgICBwYXRoLm1lcmdlKGF0SW5kZXgoaSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IC8vIGZsb3lkV2Fyc2hhbGxcblxuICB9OyAvLyBlbGVzZm5cblxuICB2YXIgYmVsbG1hbkZvcmREZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICAgIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0sXG4gICAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAgIHJvb3Q6IG51bGxcbiAgfSk7XG4gIHZhciBlbGVzZm4kcSA9IHtcbiAgICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgICBiZWxsbWFuRm9yZDogZnVuY3Rpb24gYmVsbG1hbkZvcmQob3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIF9iZWxsbWFuRm9yZERlZmF1bHRzID0gYmVsbG1hbkZvcmREZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgICAgICB3ZWlnaHQgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy53ZWlnaHQsXG4gICAgICAgICAgZGlyZWN0ZWQgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgICAgICByb290ID0gX2JlbGxtYW5Gb3JkRGVmYXVsdHMucm9vdDtcblxuICAgICAgdmFyIHdlaWdodEZuID0gd2VpZ2h0O1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcyxcbiAgICAgICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXM7XG5cbiAgICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICAgIHZhciBpbmZvTWFwID0gbmV3IE1hcCQyKCk7XG4gICAgICB2YXIgaGFzTmVnYXRpdmVXZWlnaHRDeWNsZSA9IGZhbHNlO1xuICAgICAgdmFyIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzID0gW107XG4gICAgICByb290ID0gY3kuY29sbGVjdGlvbihyb290KVswXTsgLy8gaW4gY2FzZSBzZWxlY3RvciBwYXNzZWRcblxuICAgICAgZWRnZXMudW5tZXJnZUJ5KGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLmlzTG9vcCgpO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtRWRnZXMgPSBlZGdlcy5sZW5ndGg7XG5cbiAgICAgIHZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhub2RlKSB7XG4gICAgICAgIHZhciBvYmogPSBpbmZvTWFwLmdldChub2RlLmlkKCkpO1xuXG4gICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgb2JqID0ge307XG4gICAgICAgICAgaW5mb01hcC5zZXQobm9kZS5pZCgpLCBvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH07XG5cbiAgICAgIHZhciBnZXROb2RlRnJvbVRvID0gZnVuY3Rpb24gZ2V0Tm9kZUZyb21Ubyh0bykge1xuICAgICAgICByZXR1cm4gKHN0cmluZyh0bykgPyBjeS4kKHRvKSA6IHRvKVswXTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBkaXN0YW5jZVRvID0gZnVuY3Rpb24gZGlzdGFuY2VUbyh0bykge1xuICAgICAgICByZXR1cm4gZ2V0SW5mbyhnZXROb2RlRnJvbVRvKHRvKSkuZGlzdDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwYXRoVG8gPSBmdW5jdGlvbiBwYXRoVG8odG8pIHtcbiAgICAgICAgdmFyIHRoaXNTdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogcm9vdDtcbiAgICAgICAgdmFyIGVuZCA9IGdldE5vZGVGcm9tVG8odG8pO1xuICAgICAgICB2YXIgcGF0aCA9IFtdO1xuICAgICAgICB2YXIgbm9kZSA9IGVuZDtcblxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNwYXduKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9nZXRJbmZvID0gZ2V0SW5mbyhub2RlKSxcbiAgICAgICAgICAgICAgZWRnZSA9IF9nZXRJbmZvLmVkZ2UsXG4gICAgICAgICAgICAgIHByZWQgPSBfZ2V0SW5mby5wcmVkO1xuXG4gICAgICAgICAgcGF0aC51bnNoaWZ0KG5vZGVbMF0pO1xuXG4gICAgICAgICAgaWYgKG5vZGUuc2FtZSh0aGlzU3RhcnQpICYmIHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGVkZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vZGUgPSBwcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVsZXMuc3Bhd24ocGF0aCk7XG4gICAgICB9OyAvLyBJbml0aWFsaXphdGlvbnMgeyBkaXN0LCBwcmVkLCBlZGdlIH1cblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIGluZm8gPSBnZXRJbmZvKG5vZGUpO1xuXG4gICAgICAgIGlmIChub2RlLnNhbWUocm9vdCkpIHtcbiAgICAgICAgICBpbmZvLmRpc3QgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluZm8uZGlzdCA9IEluZmluaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mby5wcmVkID0gbnVsbDtcbiAgICAgICAgaW5mby5lZGdlID0gbnVsbDtcbiAgICAgIH0gLy8gRWRnZXMgcmVsYXhhdGlvblxuXG5cbiAgICAgIHZhciByZXBsYWNlZEVkZ2UgPSBmYWxzZTtcblxuICAgICAgdmFyIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50ID0gZnVuY3Rpb24gY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQobm9kZTEsIG5vZGUyLCBlZGdlLCBpbmZvMSwgaW5mbzIsIHdlaWdodCkge1xuICAgICAgICB2YXIgZGlzdCA9IGluZm8xLmRpc3QgKyB3ZWlnaHQ7XG5cbiAgICAgICAgaWYgKGRpc3QgPCBpbmZvMi5kaXN0ICYmICFlZGdlLnNhbWUoaW5mbzEuZWRnZSkpIHtcbiAgICAgICAgICBpbmZvMi5kaXN0ID0gZGlzdDtcbiAgICAgICAgICBpbmZvMi5wcmVkID0gbm9kZTE7XG4gICAgICAgICAgaW5mbzIuZWRnZSA9IGVkZ2U7XG4gICAgICAgICAgcmVwbGFjZWRFZGdlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IG51bU5vZGVzOyBfaSsrKSB7XG4gICAgICAgIHJlcGxhY2VkRWRnZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgbnVtRWRnZXM7IGUrKykge1xuICAgICAgICAgIHZhciBlZGdlID0gZWRnZXNbZV07XG4gICAgICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKCk7XG4gICAgICAgICAgdmFyIHRndCA9IGVkZ2UudGFyZ2V0KCk7XG5cbiAgICAgICAgICB2YXIgX3dlaWdodCA9IHdlaWdodEZuKGVkZ2UpO1xuXG4gICAgICAgICAgdmFyIHNyY0luZm8gPSBnZXRJbmZvKHNyYyk7XG4gICAgICAgICAgdmFyIHRndEluZm8gPSBnZXRJbmZvKHRndCk7XG4gICAgICAgICAgY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQoc3JjLCB0Z3QsIGVkZ2UsIHNyY0luZm8sIHRndEluZm8sIF93ZWlnaHQpOyAvLyBJZiB1bmRpcmVjdGVkIGdyYXBoLCB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSAncmV2ZXJzZScgZWRnZVxuXG4gICAgICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICAgICAgY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQodGd0LCBzcmMsIGVkZ2UsIHRndEluZm8sIHNyY0luZm8sIF93ZWlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVwbGFjZWRFZGdlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJlcGxhY2VkRWRnZSkge1xuICAgICAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgd2VpZ2h0IGN5Y2xlc1xuICAgICAgICB2YXIgbmVnYXRpdmVXZWlnaHRDeWNsZUlkcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIF9lID0gMDsgX2UgPCBudW1FZGdlczsgX2UrKykge1xuICAgICAgICAgIHZhciBfZWRnZSA9IGVkZ2VzW19lXTtcblxuICAgICAgICAgIHZhciBfc3JjID0gX2VkZ2Uuc291cmNlKCk7XG5cbiAgICAgICAgICB2YXIgX3RndCA9IF9lZGdlLnRhcmdldCgpO1xuXG4gICAgICAgICAgdmFyIF93ZWlnaHQyID0gd2VpZ2h0Rm4oX2VkZ2UpO1xuXG4gICAgICAgICAgdmFyIHNyY0Rpc3QgPSBnZXRJbmZvKF9zcmMpLmRpc3Q7XG4gICAgICAgICAgdmFyIHRndERpc3QgPSBnZXRJbmZvKF90Z3QpLmRpc3Q7XG5cbiAgICAgICAgICBpZiAoc3JjRGlzdCArIF93ZWlnaHQyIDwgdGd0RGlzdCB8fCAhZGlyZWN0ZWQgJiYgdGd0RGlzdCArIF93ZWlnaHQyIDwgc3JjRGlzdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlKSB7XG4gICAgICAgICAgICAgIHdhcm4oJ0dyYXBoIGNvbnRhaW5zIGEgbmVnYXRpdmUgd2VpZ2h0IGN5Y2xlIGZvciBCZWxsbWFuLUZvcmQnKTtcbiAgICAgICAgICAgICAgaGFzTmVnYXRpdmVXZWlnaHRDeWNsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdmFyIG5lZ2F0aXZlTm9kZXMgPSBbXTtcblxuICAgICAgICAgICAgICBpZiAoc3JjRGlzdCArIF93ZWlnaHQyIDwgdGd0RGlzdCkge1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZXMucHVzaChfc3JjKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghZGlyZWN0ZWQgJiYgdGd0RGlzdCArIF93ZWlnaHQyIDwgc3JjRGlzdCkge1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZXMucHVzaChfdGd0KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBudW1OZWdhdGl2ZU5vZGVzID0gbmVnYXRpdmVOb2Rlcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBudW1OZWdhdGl2ZU5vZGVzOyBuKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBuZWdhdGl2ZU5vZGVzW25dO1xuICAgICAgICAgICAgICAgIHZhciBjeWNsZSA9IFtzdGFydF07XG4gICAgICAgICAgICAgICAgY3ljbGUucHVzaChnZXRJbmZvKHN0YXJ0KS5lZGdlKTtcbiAgICAgICAgICAgICAgICB2YXIgX25vZGUgPSBnZXRJbmZvKHN0YXJ0KS5wcmVkO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN5Y2xlLmluZGV4T2YoX25vZGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY3ljbGUucHVzaChfbm9kZSk7XG4gICAgICAgICAgICAgICAgICBjeWNsZS5wdXNoKGdldEluZm8oX25vZGUpLmVkZ2UpO1xuICAgICAgICAgICAgICAgICAgX25vZGUgPSBnZXRJbmZvKF9ub2RlKS5wcmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN5Y2xlID0gY3ljbGUuc2xpY2UoY3ljbGUuaW5kZXhPZihfbm9kZSkpO1xuICAgICAgICAgICAgICAgIHZhciBzbWFsbGVzdElkID0gY3ljbGVbMF0uaWQoKTtcbiAgICAgICAgICAgICAgICB2YXIgc21hbGxlc3RJbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMjsgYyA8IGN5Y2xlLmxlbmd0aDsgYyArPSAyKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3ljbGVbY10uaWQoKSA8IHNtYWxsZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RJZCA9IGN5Y2xlW2NdLmlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0SW5kZXggPSBjO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN5Y2xlID0gY3ljbGUuc2xpY2Uoc21hbGxlc3RJbmRleCkuY29uY2F0KGN5Y2xlLnNsaWNlKDAsIHNtYWxsZXN0SW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjeWNsZS5wdXNoKGN5Y2xlWzBdKTtcbiAgICAgICAgICAgICAgICB2YXIgY3ljbGVJZCA9IGN5Y2xlLm1hcChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbC5pZCgpO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlV2VpZ2h0Q3ljbGVJZHMuaW5kZXhPZihjeWNsZUlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzLnB1c2goZWxlcy5zcGF3bihjeWNsZSkpO1xuICAgICAgICAgICAgICAgICAgbmVnYXRpdmVXZWlnaHRDeWNsZUlkcy5wdXNoKGN5Y2xlSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3RhbmNlVG86IGRpc3RhbmNlVG8sXG4gICAgICAgIHBhdGhUbzogcGF0aFRvLFxuICAgICAgICBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOiBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlLFxuICAgICAgICBuZWdhdGl2ZVdlaWdodEN5Y2xlczogbmVnYXRpdmVXZWlnaHRDeWNsZXNcbiAgICAgIH07XG4gICAgfSAvLyBiZWxsbWFuRm9yZFxuXG4gIH07IC8vIGVsZXNmblxuXG4gIHZhciBzcXJ0MiA9IE1hdGguc3FydCgyKTsgLy8gRnVuY3Rpb24gd2hpY2ggY29sYXBzZXMgMiAobWV0YSkgbm9kZXMgaW50byBvbmVcbiAgLy8gVXBkYXRlcyB0aGUgcmVtYWluaW5nIGVkZ2UgbGlzdHNcbiAgLy8gUmVjZWl2ZXMgYXMgYSBwYXJhbWF0ZXIgdGhlIGVkZ2Ugd2hpY2ggY2F1c2VzIHRoZSBjb2xsYXBzZVxuXG4gIHZhciBjb2xsYXBzZSA9IGZ1bmN0aW9uIGNvbGxhcHNlKGVkZ2VJbmRleCwgbm9kZU1hcCwgcmVtYWluaW5nRWRnZXMpIHtcbiAgICBpZiAocmVtYWluaW5nRWRnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBlcnJvcihcIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoXCIpO1xuICAgIH1cblxuICAgIHZhciBlZGdlSW5mbyA9IHJlbWFpbmluZ0VkZ2VzW2VkZ2VJbmRleF07XG4gICAgdmFyIHNvdXJjZUluID0gZWRnZUluZm9bMV07XG4gICAgdmFyIHRhcmdldEluID0gZWRnZUluZm9bMl07XG4gICAgdmFyIHBhcnRpdGlvbjEgPSBub2RlTWFwW3NvdXJjZUluXTtcbiAgICB2YXIgcGFydGl0aW9uMiA9IG5vZGVNYXBbdGFyZ2V0SW5dO1xuICAgIHZhciBuZXdFZGdlcyA9IHJlbWFpbmluZ0VkZ2VzOyAvLyByZS11c2UgYXJyYXlcbiAgICAvLyBEZWxldGUgYWxsIGVkZ2VzIGJldHdlZW4gcGFydGl0aW9uMSBhbmQgcGFydGl0aW9uMlxuXG4gICAgZm9yICh2YXIgaSA9IG5ld0VkZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZWRnZSA9IG5ld0VkZ2VzW2ldO1xuICAgICAgdmFyIHNyYyA9IGVkZ2VbMV07XG4gICAgICB2YXIgdGd0ID0gZWRnZVsyXTtcblxuICAgICAgaWYgKG5vZGVNYXBbc3JjXSA9PT0gcGFydGl0aW9uMSAmJiBub2RlTWFwW3RndF0gPT09IHBhcnRpdGlvbjIgfHwgbm9kZU1hcFtzcmNdID09PSBwYXJ0aXRpb24yICYmIG5vZGVNYXBbdGd0XSA9PT0gcGFydGl0aW9uMSkge1xuICAgICAgICBuZXdFZGdlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfSAvLyBBbGwgZWRnZXMgcG9pbnRpbmcgdG8gcGFydGl0aW9uMiBzaG91bGQgbm93IHBvaW50IHRvIHBhcnRpdGlvbjFcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG5ld0VkZ2VzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9lZGdlID0gbmV3RWRnZXNbX2ldO1xuXG4gICAgICBpZiAoX2VkZ2VbMV0gPT09IHBhcnRpdGlvbjIpIHtcbiAgICAgICAgLy8gQ2hlY2sgc291cmNlXG4gICAgICAgIG5ld0VkZ2VzW19pXSA9IF9lZGdlLnNsaWNlKCk7IC8vIGNvcHlcblxuICAgICAgICBuZXdFZGdlc1tfaV1bMV0gPSBwYXJ0aXRpb24xO1xuICAgICAgfSBlbHNlIGlmIChfZWRnZVsyXSA9PT0gcGFydGl0aW9uMikge1xuICAgICAgICAvLyBDaGVjayB0YXJnZXRcbiAgICAgICAgbmV3RWRnZXNbX2ldID0gX2VkZ2Uuc2xpY2UoKTsgLy8gY29weVxuXG4gICAgICAgIG5ld0VkZ2VzW19pXVsyXSA9IHBhcnRpdGlvbjE7XG4gICAgICB9XG4gICAgfSAvLyBNb3ZlIGFsbCBub2RlcyBmcm9tIHBhcnRpdGlvbjIgdG8gcGFydGl0aW9uMVxuXG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlTWFwLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChub2RlTWFwW19pMl0gPT09IHBhcnRpdGlvbjIpIHtcbiAgICAgICAgbm9kZU1hcFtfaTJdID0gcGFydGl0aW9uMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWRnZXM7XG4gIH07IC8vIENvbnRyYWN0cyBhIGdyYXBoIHVudGlsIHdlIHJlYWNoIGEgY2VydGFpbiBudW1iZXIgb2YgbWV0YSBub2Rlc1xuXG5cbiAgdmFyIGNvbnRyYWN0VW50aWwgPSBmdW5jdGlvbiBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwLCByZW1haW5pbmdFZGdlcywgc2l6ZSwgc2l6ZUxpbWl0KSB7XG4gICAgd2hpbGUgKHNpemUgPiBzaXplTGltaXQpIHtcbiAgICAgIC8vIENob29zZSBhbiBlZGdlIHJhbmRvbWx5XG4gICAgICB2YXIgZWRnZUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmVtYWluaW5nRWRnZXMubGVuZ3RoKTsgLy8gQ29sbGFwc2UgZ3JhcGggYmFzZWQgb24gZWRnZVxuXG4gICAgICByZW1haW5pbmdFZGdlcyA9IGNvbGxhcHNlKGVkZ2VJbmRleCwgbWV0YU5vZGVNYXAsIHJlbWFpbmluZ0VkZ2VzKTtcbiAgICAgIHNpemUtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtYWluaW5nRWRnZXM7XG4gIH07XG5cbiAgdmFyIGVsZXNmbiRwID0ge1xuICAgIC8vIENvbXB1dGVzIHRoZSBtaW5pbXVtIGN1dCBvZiBhbiB1bmRpcmVjdGVkIGdyYXBoXG4gICAgLy8gUmV0dXJucyB0aGUgY29ycmVjdCBhbnN3ZXIgd2l0aCBoaWdoIHByb2JhYmlsaXR5XG4gICAga2FyZ2VyU3RlaW46IGZ1bmN0aW9uIGthcmdlclN0ZWluKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJGJ5R3JvdXAgPSB0aGlzLmJ5R3JvdXAoKSxcbiAgICAgICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuXG4gICAgICBlZGdlcy51bm1lcmdlQnkoZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIGVkZ2UuaXNMb29wKCk7XG4gICAgICB9KTtcbiAgICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcbiAgICAgIHZhciBudW1JdGVyID0gTWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKG51bU5vZGVzKSAvIE1hdGguTE4yLCAyKSk7XG4gICAgICB2YXIgc3RvcFNpemUgPSBNYXRoLmZsb29yKG51bU5vZGVzIC8gc3FydDIpO1xuXG4gICAgICBpZiAobnVtTm9kZXMgPCAyKSB7XG4gICAgICAgIGVycm9yKCdBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobScpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSAvLyBOb3cgc3RvcmUgZWRnZSBkZXN0aW5hdGlvbiBhcyBpbmRleGVzXG4gICAgICAvLyBGb3JtYXQgZm9yIGVhY2ggZWRnZSAoZWRnZSBpbmRleCwgc291cmNlIG5vZGUgaW5kZXgsIHRhcmdldCBub2RlIGluZGV4KVxuXG5cbiAgICAgIHZhciBlZGdlSW5kZXhlcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVkZ2VzOyBpKyspIHtcbiAgICAgICAgdmFyIGUgPSBlZGdlc1tpXTtcbiAgICAgICAgZWRnZUluZGV4ZXMucHVzaChbaSwgbm9kZXMuaW5kZXhPZihlLnNvdXJjZSgpKSwgbm9kZXMuaW5kZXhPZihlLnRhcmdldCgpKV0pO1xuICAgICAgfSAvLyBXZSB3aWxsIHN0b3JlIHRoZSBiZXN0IGN1dCBmb3VuZCBoZXJlXG5cblxuICAgICAgdmFyIG1pbkN1dFNpemUgPSBJbmZpbml0eTtcbiAgICAgIHZhciBtaW5DdXRFZGdlSW5kZXhlcyA9IFtdO1xuICAgICAgdmFyIG1pbkN1dE5vZGVNYXAgPSBuZXcgQXJyYXkobnVtTm9kZXMpOyAvLyBJbml0aWFsIG1ldGEgbm9kZSBwYXJ0aXRpb25cblxuICAgICAgdmFyIG1ldGFOb2RlTWFwID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICAgIHZhciBtZXRhTm9kZU1hcDIgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuXG4gICAgICB2YXIgY29weU5vZGVzTWFwID0gZnVuY3Rpb24gY29weU5vZGVzTWFwKGZyb20sIHRvKSB7XG4gICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IG51bU5vZGVzOyBfaTMrKykge1xuICAgICAgICAgIHRvW19pM10gPSBmcm9tW19pM107XG4gICAgICAgIH1cbiAgICAgIH07IC8vIE1haW4gbG9vcFxuXG5cbiAgICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDw9IG51bUl0ZXI7IGl0ZXIrKykge1xuICAgICAgICAvLyBSZXNldCBtZXRhIG5vZGUgcGFydGl0aW9uXG4gICAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG51bU5vZGVzOyBfaTQrKykge1xuICAgICAgICAgIG1ldGFOb2RlTWFwW19pNF0gPSBfaTQ7XG4gICAgICAgIH0gLy8gQ29udHJhY3QgdW50aWwgc3RvcCBwb2ludCAoc3RvcFNpemUgbm9kZXMpXG5cblxuICAgICAgICB2YXIgZWRnZXNTdGF0ZSA9IGNvbnRyYWN0VW50aWwobWV0YU5vZGVNYXAsIGVkZ2VJbmRleGVzLnNsaWNlKCksIG51bU5vZGVzLCBzdG9wU2l6ZSk7XG4gICAgICAgIHZhciBlZGdlc1N0YXRlMiA9IGVkZ2VzU3RhdGUuc2xpY2UoKTsgLy8gY29weVxuICAgICAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBjb2xhcHNlZCBub2RlcyBzdGF0ZVxuXG4gICAgICAgIGNvcHlOb2Rlc01hcChtZXRhTm9kZU1hcCwgbWV0YU5vZGVNYXAyKTsgLy8gUnVuIDIgaXRlcmF0aW9ucyBzdGFydGluZyBpbiB0aGUgc3RvcCBzdGF0ZVxuXG4gICAgICAgIHZhciByZXMxID0gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcCwgZWRnZXNTdGF0ZSwgc3RvcFNpemUsIDIpO1xuICAgICAgICB2YXIgcmVzMiA9IGNvbnRyYWN0VW50aWwobWV0YU5vZGVNYXAyLCBlZGdlc1N0YXRlMiwgc3RvcFNpemUsIDIpOyAvLyBJcyBhbnkgb2YgdGhlIDIgcmVzdWx0cyB0aGUgYmVzdCBjdXQgc28gZmFyP1xuXG4gICAgICAgIGlmIChyZXMxLmxlbmd0aCA8PSByZXMyLmxlbmd0aCAmJiByZXMxLmxlbmd0aCA8IG1pbkN1dFNpemUpIHtcbiAgICAgICAgICBtaW5DdXRTaXplID0gcmVzMS5sZW5ndGg7XG4gICAgICAgICAgbWluQ3V0RWRnZUluZGV4ZXMgPSByZXMxO1xuICAgICAgICAgIGNvcHlOb2Rlc01hcChtZXRhTm9kZU1hcCwgbWluQ3V0Tm9kZU1hcCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzMi5sZW5ndGggPD0gcmVzMS5sZW5ndGggJiYgcmVzMi5sZW5ndGggPCBtaW5DdXRTaXplKSB7XG4gICAgICAgICAgbWluQ3V0U2l6ZSA9IHJlczIubGVuZ3RoO1xuICAgICAgICAgIG1pbkN1dEVkZ2VJbmRleGVzID0gcmVzMjtcbiAgICAgICAgICBjb3B5Tm9kZXNNYXAobWV0YU5vZGVNYXAyLCBtaW5DdXROb2RlTWFwKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBlbmQgb2YgbWFpbiBsb29wXG4gICAgICAvLyBDb25zdHJ1Y3QgcmVzdWx0XG5cblxuICAgICAgdmFyIGN1dCA9IHRoaXMuc3Bhd24obWluQ3V0RWRnZUluZGV4ZXMubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlZGdlc1tlWzBdXTtcbiAgICAgIH0pKTtcbiAgICAgIHZhciBwYXJ0aXRpb24xID0gdGhpcy5zcGF3bigpO1xuICAgICAgdmFyIHBhcnRpdGlvbjIgPSB0aGlzLnNwYXduKCk7IC8vIHRyYXZlcnNlIG1ldGFOb2RlTWFwIGZvciBiZXN0IGN1dFxuXG4gICAgICB2YXIgd2l0bmVzc05vZGVQYXJ0aXRpb24gPSBtaW5DdXROb2RlTWFwWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBtaW5DdXROb2RlTWFwLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgICAgdmFyIHBhcnRpdGlvbklkID0gbWluQ3V0Tm9kZU1hcFtfaTVdO1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW19pNV07XG5cbiAgICAgICAgaWYgKHBhcnRpdGlvbklkID09PSB3aXRuZXNzTm9kZVBhcnRpdGlvbikge1xuICAgICAgICAgIHBhcnRpdGlvbjEubWVyZ2Uobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFydGl0aW9uMi5tZXJnZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBjb25zdHJ1Y3QgY29tcG9uZW50cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGlzam9pbnQgc3Vic2V0IG9mIG5vZGVzXG5cblxuICAgICAgdmFyIGNvbnN0cnVjdENvbXBvbmVudCA9IGZ1bmN0aW9uIGNvbnN0cnVjdENvbXBvbmVudChzdWJzZXQpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnNwYXduKCk7XG5cbiAgICAgICAgc3Vic2V0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgIC8vIGVuc3VyZSBlZGdlIGlzIHdpdGhpbiBjYWxsaW5nIGNvbGxlY3Rpb24gYW5kIGVkZ2UgaXMgbm90IGluIGN1dFxuICAgICAgICAgICAgaWYgKF90aGlzLmNvbnRhaW5zKGVkZ2UpICYmICFjdXQuY29udGFpbnMoZWRnZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1lcmdlKGVkZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb21wb25lbnRzID0gW2NvbnN0cnVjdENvbXBvbmVudChwYXJ0aXRpb24xKSwgY29uc3RydWN0Q29tcG9uZW50KHBhcnRpdGlvbjIpXTtcbiAgICAgIHZhciByZXQgPSB7XG4gICAgICAgIGN1dDogY3V0LFxuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAvLyBuLmIuIHBhcnRpdGlvbnMgYXJlIGluY2x1ZGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIGFwaSBzcGVjXG4gICAgICAgIC8vIChjb3VsZCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24pXG4gICAgICAgIHBhcnRpdGlvbjE6IHBhcnRpdGlvbjEsXG4gICAgICAgIHBhcnRpdGlvbjI6IHBhcnRpdGlvbjJcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfTsgLy8gZWxlc2ZuXG5cbiAgdmFyIGNvcHlQb3NpdGlvbiA9IGZ1bmN0aW9uIGNvcHlQb3NpdGlvbihwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHAueCxcbiAgICAgIHk6IHAueVxuICAgIH07XG4gIH07XG4gIHZhciBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiA9IGZ1bmN0aW9uIG1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uKHAsIHpvb20sIHBhbikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBwLnggKiB6b29tICsgcGFuLngsXG4gICAgICB5OiBwLnkgKiB6b29tICsgcGFuLnlcbiAgICB9O1xuICB9O1xuICB2YXIgcmVuZGVyZWRUb01vZGVsUG9zaXRpb24gPSBmdW5jdGlvbiByZW5kZXJlZFRvTW9kZWxQb3NpdGlvbihwLCB6b29tLCBwYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogKHAueCAtIHBhbi54KSAvIHpvb20sXG4gICAgICB5OiAocC55IC0gcGFuLnkpIC8gem9vbVxuICAgIH07XG4gIH07XG4gIHZhciBhcnJheTJwb2ludCA9IGZ1bmN0aW9uIGFycmF5MnBvaW50KGFycikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBhcnJbMF0sXG4gICAgICB5OiBhcnJbMV1cbiAgICB9O1xuICB9O1xuICB2YXIgbWluID0gZnVuY3Rpb24gbWluKGFycikge1xuICAgIHZhciBiZWdpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICAgIHZhciBtaW4gPSBJbmZpbml0eTtcblxuICAgIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgdmFsID0gYXJyW2ldO1xuXG4gICAgICBpZiAoaXNGaW5pdGUodmFsKSkge1xuICAgICAgICBtaW4gPSBNYXRoLm1pbih2YWwsIG1pbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbjtcbiAgfTtcbiAgdmFyIG1heCA9IGZ1bmN0aW9uIG1heChhcnIpIHtcbiAgICB2YXIgYmVnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyLmxlbmd0aDtcbiAgICB2YXIgbWF4ID0gLUluZmluaXR5O1xuXG4gICAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSBhcnJbaV07XG5cbiAgICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICAgIG1heCA9IE1hdGgubWF4KHZhbCwgbWF4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4O1xuICB9O1xuICB2YXIgbWVhbiA9IGZ1bmN0aW9uIG1lYW4oYXJyKSB7XG4gICAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFyci5sZW5ndGg7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICB2YXIgbiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IGFycltpXTtcblxuICAgICAgaWYgKGlzRmluaXRlKHZhbCkpIHtcbiAgICAgICAgdG90YWwgKz0gdmFsO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsIC8gbjtcbiAgfTtcbiAgdmFyIG1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgICB2YXIgYmVnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyLmxlbmd0aDtcbiAgICB2YXIgY29weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgICB2YXIgc29ydCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgICB2YXIgaW5jbHVkZUhvbGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB0cnVlO1xuXG4gICAgaWYgKGNvcHkpIHtcbiAgICAgIGFyciA9IGFyci5zbGljZShiZWdpbiwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVuZCA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgYXJyLnNwbGljZShlbmQsIGFyci5sZW5ndGggLSBlbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVnaW4gPiAwKSB7XG4gICAgICAgIGFyci5zcGxpY2UoMCwgYmVnaW4pO1xuICAgICAgfVxuICAgIH0gLy8gYWxsIG5vbiBmaW5pdGUgKGUuZy4gSW5maW5pdHksIE5hTikgZWxlbWVudHMgbXVzdCBiZSAtSW5maW5pdHkgc28gdGhleSBnbyB0byB0aGUgc3RhcnRcblxuXG4gICAgdmFyIG9mZiA9IDA7IC8vIG9mZnNldCBmcm9tIG5vbi1maW5pdGUgdmFsdWVzXG5cbiAgICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdiA9IGFycltpXTtcblxuICAgICAgaWYgKGluY2x1ZGVIb2xlcykge1xuICAgICAgICBpZiAoIWlzRmluaXRlKHYpKSB7XG4gICAgICAgICAgYXJyW2ldID0gLUluZmluaXR5O1xuICAgICAgICAgIG9mZisrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHJlbW92ZSBpdCBpZiB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIGhvbGVzXG4gICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIGFyci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgIH0pOyAvLyByZXF1aXJlcyBjb3B5ID0gdHJ1ZSBpZiB5b3UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIG9yaWdcbiAgICB9XG5cbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcihsZW4gLyAyKTtcblxuICAgIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgICByZXR1cm4gYXJyW21pZCArIDEgKyBvZmZdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKGFyclttaWQgLSAxICsgb2ZmXSArIGFyclttaWQgKyBvZmZdKSAvIDI7XG4gICAgfVxuICB9O1xuICB2YXIgZGVnMnJhZCA9IGZ1bmN0aW9uIGRlZzJyYWQoZGVnKSB7XG4gICAgcmV0dXJuIE1hdGguUEkgKiBkZWcgLyAxODA7XG4gIH07XG4gIHZhciBnZXRBbmdsZUZyb21EaXNwID0gZnVuY3Rpb24gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuMihkaXNwWSwgZGlzcFgpIC0gTWF0aC5QSSAvIDI7XG4gIH07XG4gIHZhciBsb2cyID0gTWF0aC5sb2cyIHx8IGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG4gIH07XG4gIHZhciBzaWdudW0gPSBmdW5jdGlvbiBzaWdudW0oeCkge1xuICAgIGlmICh4ID4gMCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmICh4IDwgMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH07XG4gIHZhciBkaXN0ID0gZnVuY3Rpb24gZGlzdChwMSwgcDIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxZGlzdChwMSwgcDIpKTtcbiAgfTtcbiAgdmFyIHNxZGlzdCA9IGZ1bmN0aW9uIHNxZGlzdChwMSwgcDIpIHtcbiAgICB2YXIgZHggPSBwMi54IC0gcDEueDtcbiAgICB2YXIgZHkgPSBwMi55IC0gcDEueTtcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG4gIH07XG4gIHZhciBpblBsYWNlU3VtTm9ybWFsaXplID0gZnVuY3Rpb24gaW5QbGFjZVN1bU5vcm1hbGl6ZSh2KSB7XG4gICAgdmFyIGxlbmd0aCA9IHYubGVuZ3RoOyAvLyBGaXJzdCwgZ2V0IHN1bSBvZiBhbGwgZWxlbWVudHNcblxuICAgIHZhciB0b3RhbCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbCArPSB2W2ldO1xuICAgIH0gLy8gTm93LCBkaXZpZGUgZWFjaCBieSB0aGUgc3VtIG9mIGFsbCBlbGVtZW50c1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2W19pXSA9IHZbX2ldIC8gdG90YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHY7XG4gIH07XG5cbiAgdmFyIHFiZXppZXJBdCA9IGZ1bmN0aW9uIHFiZXppZXJBdChwMCwgcDEsIHAyLCB0KSB7XG4gICAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogcDAgKyAyICogKDEgLSB0KSAqIHQgKiBwMSArIHQgKiB0ICogcDI7XG4gIH07XG4gIHZhciBxYmV6aWVyUHRBdCA9IGZ1bmN0aW9uIHFiZXppZXJQdEF0KHAwLCBwMSwgcDIsIHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcWJlemllckF0KHAwLngsIHAxLngsIHAyLngsIHQpLFxuICAgICAgeTogcWJlemllckF0KHAwLnksIHAxLnksIHAyLnksIHQpXG4gICAgfTtcbiAgfTtcbiAgdmFyIGxpbmVBdCA9IGZ1bmN0aW9uIGxpbmVBdChwMCwgcDEsIHQsIGQpIHtcbiAgICB2YXIgdmVjID0ge1xuICAgICAgeDogcDEueCAtIHAwLngsXG4gICAgICB5OiBwMS55IC0gcDAueVxuICAgIH07XG4gICAgdmFyIHZlY0Rpc3QgPSBkaXN0KHAwLCBwMSk7XG4gICAgdmFyIG5vcm1WZWMgPSB7XG4gICAgICB4OiB2ZWMueCAvIHZlY0Rpc3QsXG4gICAgICB5OiB2ZWMueSAvIHZlY0Rpc3RcbiAgICB9O1xuICAgIHQgPSB0ID09IG51bGwgPyAwIDogdDtcbiAgICBkID0gZCAhPSBudWxsID8gZCA6IHQgKiB2ZWNEaXN0O1xuICAgIHJldHVybiB7XG4gICAgICB4OiBwMC54ICsgbm9ybVZlYy54ICogZCxcbiAgICAgIHk6IHAwLnkgKyBub3JtVmVjLnkgKiBkXG4gICAgfTtcbiAgfTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gYm91bmQobWluLCB2YWwsIG1heCkge1xuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsKSk7XG4gIH07IC8vIG1ha2VzIGEgZnVsbCBiYiAoeDEsIHkxLCB4MiwgeTIsIHcsIGgpIGZyb20gaW1wbGljaXQgcGFyYW1zXG5cbiAgdmFyIG1ha2VCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIG1ha2VCb3VuZGluZ0JveChiYikge1xuICAgIGlmIChiYiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4MTogSW5maW5pdHksXG4gICAgICAgIHkxOiBJbmZpbml0eSxcbiAgICAgICAgeDI6IC1JbmZpbml0eSxcbiAgICAgICAgeTI6IC1JbmZpbml0eSxcbiAgICAgICAgdzogMCxcbiAgICAgICAgaDogMFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGJiLngxICE9IG51bGwgJiYgYmIueTEgIT0gbnVsbCkge1xuICAgICAgaWYgKGJiLngyICE9IG51bGwgJiYgYmIueTIgIT0gbnVsbCAmJiBiYi54MiA+PSBiYi54MSAmJiBiYi55MiA+PSBiYi55MSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgxOiBiYi54MSxcbiAgICAgICAgICB5MTogYmIueTEsXG4gICAgICAgICAgeDI6IGJiLngyLFxuICAgICAgICAgIHkyOiBiYi55MixcbiAgICAgICAgICB3OiBiYi54MiAtIGJiLngxLFxuICAgICAgICAgIGg6IGJiLnkyIC0gYmIueTFcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoYmIudyAhPSBudWxsICYmIGJiLmggIT0gbnVsbCAmJiBiYi53ID49IDAgJiYgYmIuaCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDE6IGJiLngxLFxuICAgICAgICAgIHkxOiBiYi55MSxcbiAgICAgICAgICB4MjogYmIueDEgKyBiYi53LFxuICAgICAgICAgIHkyOiBiYi55MSArIGJiLmgsXG4gICAgICAgICAgdzogYmIudyxcbiAgICAgICAgICBoOiBiYi5oXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgY29weUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gY29weUJvdW5kaW5nQm94KGJiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiBiYi54MSxcbiAgICAgIHgyOiBiYi54MixcbiAgICAgIHc6IGJiLncsXG4gICAgICB5MTogYmIueTEsXG4gICAgICB5MjogYmIueTIsXG4gICAgICBoOiBiYi5oXG4gICAgfTtcbiAgfTtcbiAgdmFyIGNsZWFyQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBjbGVhckJvdW5kaW5nQm94KGJiKSB7XG4gICAgYmIueDEgPSBJbmZpbml0eTtcbiAgICBiYi55MSA9IEluZmluaXR5O1xuICAgIGJiLngyID0gLUluZmluaXR5O1xuICAgIGJiLnkyID0gLUluZmluaXR5O1xuICAgIGJiLncgPSAwO1xuICAgIGJiLmggPSAwO1xuICB9O1xuICB2YXIgdXBkYXRlQm91bmRpbmdCb3ggPSBmdW5jdGlvbiB1cGRhdGVCb3VuZGluZ0JveChiYjEsIGJiMikge1xuICAgIC8vIHVwZGF0ZSBiYjEgd2l0aCBiYjIgYm91bmRzXG4gICAgYmIxLngxID0gTWF0aC5taW4oYmIxLngxLCBiYjIueDEpO1xuICAgIGJiMS54MiA9IE1hdGgubWF4KGJiMS54MiwgYmIyLngyKTtcbiAgICBiYjEudyA9IGJiMS54MiAtIGJiMS54MTtcbiAgICBiYjEueTEgPSBNYXRoLm1pbihiYjEueTEsIGJiMi55MSk7XG4gICAgYmIxLnkyID0gTWF0aC5tYXgoYmIxLnkyLCBiYjIueTIpO1xuICAgIGJiMS5oID0gYmIxLnkyIC0gYmIxLnkxO1xuICB9O1xuICB2YXIgZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50ID0gZnVuY3Rpb24gZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50KGJiLCB4LCB5KSB7XG4gICAgYmIueDEgPSBNYXRoLm1pbihiYi54MSwgeCk7XG4gICAgYmIueDIgPSBNYXRoLm1heChiYi54MiwgeCk7XG4gICAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gICAgYmIueTEgPSBNYXRoLm1pbihiYi55MSwgeSk7XG4gICAgYmIueTIgPSBNYXRoLm1heChiYi55MiwgeSk7XG4gICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gIH07XG4gIHZhciBleHBhbmRCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGV4cGFuZEJvdW5kaW5nQm94KGJiKSB7XG4gICAgdmFyIHBhZGRpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgYmIueDEgLT0gcGFkZGluZztcbiAgICBiYi54MiArPSBwYWRkaW5nO1xuICAgIGJiLnkxIC09IHBhZGRpbmc7XG4gICAgYmIueTIgKz0gcGFkZGluZztcbiAgICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgICByZXR1cm4gYmI7XG4gIH07XG4gIHZhciBleHBhbmRCb3VuZGluZ0JveFNpZGVzID0gZnVuY3Rpb24gZXhwYW5kQm91bmRpbmdCb3hTaWRlcyhiYikge1xuICAgIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbMF07XG4gICAgdmFyIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDtcblxuICAgIGlmIChwYWRkaW5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdG9wID0gcmlnaHQgPSBib3R0b20gPSBsZWZ0ID0gcGFkZGluZ1swXTtcbiAgICB9IGVsc2UgaWYgKHBhZGRpbmcubGVuZ3RoID09PSAyKSB7XG4gICAgICB0b3AgPSBib3R0b20gPSBwYWRkaW5nWzBdO1xuICAgICAgbGVmdCA9IHJpZ2h0ID0gcGFkZGluZ1sxXTtcbiAgICB9IGVsc2UgaWYgKHBhZGRpbmcubGVuZ3RoID09PSA0KSB7XG4gICAgICB2YXIgX3BhZGRpbmcgPSBfc2xpY2VkVG9BcnJheShwYWRkaW5nLCA0KTtcblxuICAgICAgdG9wID0gX3BhZGRpbmdbMF07XG4gICAgICByaWdodCA9IF9wYWRkaW5nWzFdO1xuICAgICAgYm90dG9tID0gX3BhZGRpbmdbMl07XG4gICAgICBsZWZ0ID0gX3BhZGRpbmdbM107XG4gICAgfVxuXG4gICAgYmIueDEgLT0gbGVmdDtcbiAgICBiYi54MiArPSByaWdodDtcbiAgICBiYi55MSAtPSB0b3A7XG4gICAgYmIueTIgKz0gYm90dG9tO1xuICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgIGJiLmggPSBiYi55MiAtIGJiLnkxO1xuICAgIHJldHVybiBiYjtcbiAgfTtcblxuICB2YXIgYXNzaWduQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBhc3NpZ25Cb3VuZGluZ0JveChiYjEsIGJiMikge1xuICAgIGJiMS54MSA9IGJiMi54MTtcbiAgICBiYjEueTEgPSBiYjIueTE7XG4gICAgYmIxLngyID0gYmIyLngyO1xuICAgIGJiMS55MiA9IGJiMi55MjtcbiAgICBiYjEudyA9IGJiMS54MiAtIGJiMS54MTtcbiAgICBiYjEuaCA9IGJiMS55MiAtIGJiMS55MTtcbiAgfTtcbiAgdmFyIGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QgPSBmdW5jdGlvbiBib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiMSwgYmIyKSB7XG4gICAgLy8gY2FzZTogb25lIGJiIHRvIHJpZ2h0IG9mIG90aGVyXG4gICAgaWYgKGJiMS54MSA+IGJiMi54Mikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChiYjIueDEgPiBiYjEueDIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGNhc2U6IG9uZSBiYiB0byBsZWZ0IG9mIG90aGVyXG5cblxuICAgIGlmIChiYjEueDIgPCBiYjIueDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYmIyLngyIDwgYmIxLngxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBjYXNlOiBvbmUgYmIgYWJvdmUgb3RoZXJcblxuXG4gICAgaWYgKGJiMS55MiA8IGJiMi55MSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChiYjIueTIgPCBiYjEueTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGNhc2U6IG9uZSBiYiBiZWxvdyBvdGhlclxuXG5cbiAgICBpZiAoYmIxLnkxID4gYmIyLnkyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGJiMi55MSA+IGJiMS55Mikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gb3RoZXJ3aXNlLCBtdXN0IGhhdmUgc29tZSBvdmVybGFwXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB2YXIgaW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGluQm91bmRpbmdCb3goYmIsIHgsIHkpIHtcbiAgICByZXR1cm4gYmIueDEgPD0geCAmJiB4IDw9IGJiLngyICYmIGJiLnkxIDw9IHkgJiYgeSA8PSBiYi55MjtcbiAgfTtcbiAgdmFyIHBvaW50SW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIHBvaW50SW5Cb3VuZGluZ0JveChiYiwgcHQpIHtcbiAgICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYiwgcHQueCwgcHQueSk7XG4gIH07XG4gIHZhciBib3VuZGluZ0JveEluQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBib3VuZGluZ0JveEluQm91bmRpbmdCb3goYmIxLCBiYjIpIHtcbiAgICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYjEsIGJiMi54MSwgYmIyLnkxKSAmJiBpbkJvdW5kaW5nQm94KGJiMSwgYmIyLngyLCBiYjIueTIpO1xuICB9O1xuICB2YXIgcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZykge1xuICAgIHZhciBjb3JuZXJSYWRpdXMgPSBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjsgLy8gQ2hlY2sgaW50ZXJzZWN0aW9ucyB3aXRoIHN0cmFpZ2h0IGxpbmUgc2VnbWVudHNcblxuICAgIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zOyAvLyBUb3Agc2VnbWVudCwgbGVmdCB0byByaWdodFxuXG4gICAge1xuICAgICAgdmFyIHRvcFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICAgIHZhciB0b3BTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgLSBwYWRkaW5nO1xuICAgICAgdmFyIHRvcEVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wRW5kWSA9IHRvcFN0YXJ0WTtcbiAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFN0YXJ0WCwgdG9wU3RhcnRZLCB0b3BFbmRYLCB0b3BFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfSAvLyBSaWdodCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG5cbiAgICB7XG4gICAgICB2YXIgcmlnaHRTdGFydFggPSBub2RlWCArIGhhbGZXaWR0aCArIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgICAgdmFyIHJpZ2h0RW5kWCA9IHJpZ2h0U3RhcnRYO1xuICAgICAgdmFyIHJpZ2h0RW5kWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCByaWdodFN0YXJ0WCwgcmlnaHRTdGFydFksIHJpZ2h0RW5kWCwgcmlnaHRFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfSAvLyBCb3R0b20gc2VnbWVudCwgbGVmdCB0byByaWdodFxuXG4gICAge1xuICAgICAgdmFyIGJvdHRvbVN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICAgIHZhciBib3R0b21TdGFydFkgPSBub2RlWSArIGhhbGZIZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgdmFyIGJvdHRvbUVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgICB2YXIgYm90dG9tRW5kWSA9IGJvdHRvbVN0YXJ0WTtcbiAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVN0YXJ0WCwgYm90dG9tU3RhcnRZLCBib3R0b21FbmRYLCBib3R0b21FbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfSAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cblxuICAgIHtcbiAgICAgIHZhciBsZWZ0U3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggLSBwYWRkaW5nO1xuICAgICAgdmFyIGxlZnRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgICAgdmFyIGxlZnRFbmRYID0gbGVmdFN0YXJ0WDtcbiAgICAgIHZhciBsZWZ0RW5kWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCBsZWZ0U3RhcnRYLCBsZWZ0U3RhcnRZLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGludGVyc2VjdGlvbnMgd2l0aCBhcmMgc2VnbWVudHNcblxuICAgIHZhciBhcmNJbnRlcnNlY3Rpb25zOyAvLyBUb3AgTGVmdFxuXG4gICAge1xuICAgICAgdmFyIHRvcExlZnRDZW50ZXJYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgdG9wTGVmdENlbnRlclkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXM7XG4gICAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIHRvcExlZnRDZW50ZXJYLCB0b3BMZWZ0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7IC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuXG4gICAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPD0gdG9wTGVmdENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA8PSB0b3BMZWZ0Q2VudGVyWSkge1xuICAgICAgICByZXR1cm4gW2FyY0ludGVyc2VjdGlvbnNbMF0sIGFyY0ludGVyc2VjdGlvbnNbMV1dO1xuICAgICAgfVxuICAgIH0gLy8gVG9wIFJpZ2h0XG5cbiAgICB7XG4gICAgICB2YXIgdG9wUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgdG9wUmlnaHRDZW50ZXJZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzO1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BSaWdodENlbnRlclgsIHRvcFJpZ2h0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7IC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuXG4gICAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPj0gdG9wUmlnaHRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPD0gdG9wUmlnaHRDZW50ZXJZKSB7XG4gICAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgICB9XG4gICAgfSAvLyBCb3R0b20gUmlnaHRcblxuICAgIHtcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXM7XG4gICAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVJpZ2h0Q2VudGVyWCwgYm90dG9tUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTsgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG5cbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSBib3R0b21SaWdodENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21SaWdodENlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIFthcmNJbnRlcnNlY3Rpb25zWzBdLCBhcmNJbnRlcnNlY3Rpb25zWzFdXTtcbiAgICAgIH1cbiAgICB9IC8vIEJvdHRvbSBMZWZ0XG5cbiAgICB7XG4gICAgICB2YXIgYm90dG9tTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cztcbiAgICAgIGFyY0ludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3RMaW5lQ2lyY2xlKHgsIHksIG5vZGVYLCBub2RlWSwgYm90dG9tTGVmdENlbnRlclgsIGJvdHRvbUxlZnRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTsgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG5cbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA8PSBib3R0b21MZWZ0Q2VudGVyWCAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdID49IGJvdHRvbUxlZnRDZW50ZXJZKSB7XG4gICAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTsgLy8gaWYgbm90aGluZ1xuICB9O1xuICB2YXIgaW5MaW5lVmljaW5pdHkgPSBmdW5jdGlvbiBpbkxpbmVWaWNpbml0eSh4LCB5LCBseDEsIGx5MSwgbHgyLCBseTIsIHRvbGVyYW5jZSkge1xuICAgIHZhciB0ID0gdG9sZXJhbmNlO1xuICAgIHZhciB4MSA9IE1hdGgubWluKGx4MSwgbHgyKTtcbiAgICB2YXIgeDIgPSBNYXRoLm1heChseDEsIGx4Mik7XG4gICAgdmFyIHkxID0gTWF0aC5taW4obHkxLCBseTIpO1xuICAgIHZhciB5MiA9IE1hdGgubWF4KGx5MSwgbHkyKTtcbiAgICByZXR1cm4geDEgLSB0IDw9IHggJiYgeCA8PSB4MiArIHQgJiYgeTEgLSB0IDw9IHkgJiYgeSA8PSB5MiArIHQ7XG4gIH07XG4gIHZhciBpbkJlemllclZpY2luaXR5ID0gZnVuY3Rpb24gaW5CZXppZXJWaWNpbml0eSh4LCB5LCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB0b2xlcmFuY2UpIHtcbiAgICB2YXIgYmIgPSB7XG4gICAgICB4MTogTWF0aC5taW4oeDEsIHgzLCB4MikgLSB0b2xlcmFuY2UsXG4gICAgICB4MjogTWF0aC5tYXgoeDEsIHgzLCB4MikgKyB0b2xlcmFuY2UsXG4gICAgICB5MTogTWF0aC5taW4oeTEsIHkzLCB5MikgLSB0b2xlcmFuY2UsXG4gICAgICB5MjogTWF0aC5tYXgoeTEsIHkzLCB5MikgKyB0b2xlcmFuY2VcbiAgICB9OyAvLyBpZiBvdXRzaWRlIHRoZSByb3VnaCBib3VuZGluZyBib3ggZm9yIHRoZSBiZXppZXIsIHRoZW4gaXQgY2FuJ3QgYmUgYSBoaXRcblxuICAgIGlmICh4IDwgYmIueDEgfHwgeCA+IGJiLngyIHx8IHkgPCBiYi55MSB8fCB5ID4gYmIueTIpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdiZXppZXIgb3V0IG9mIHJvdWdoIGJiJylcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2RvIG1vcmUgZXhwZW5zaXZlIGNoZWNrJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBzb2x2ZVF1YWRyYXRpYyA9IGZ1bmN0aW9uIHNvbHZlUXVhZHJhdGljKGEsIGIsIGMsIHZhbCkge1xuICAgIGMgLT0gdmFsO1xuICAgIHZhciByID0gYiAqIGIgLSA0ICogYSAqIGM7XG5cbiAgICBpZiAociA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3FydFIgPSBNYXRoLnNxcnQocik7XG4gICAgdmFyIGRlbm9tID0gMiAqIGE7XG4gICAgdmFyIHJvb3QxID0gKC1iICsgc3FydFIpIC8gZGVub207XG4gICAgdmFyIHJvb3QyID0gKC1iIC0gc3FydFIpIC8gZGVub207XG4gICAgcmV0dXJuIFtyb290MSwgcm9vdDJdO1xuICB9O1xuICB2YXIgc29sdmVDdWJpYyA9IGZ1bmN0aW9uIHNvbHZlQ3ViaWMoYSwgYiwgYywgZCwgcmVzdWx0KSB7XG4gICAgLy8gU29sdmVzIGEgY3ViaWMgZnVuY3Rpb24sIHJldHVybnMgcm9vdCBpbiBmb3JtIFtyMSwgaTEsIHIyLCBpMiwgcjMsIGkzXSwgd2hlcmVcbiAgICAvLyByIGlzIHRoZSByZWFsIGNvbXBvbmVudCwgaSBpcyB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudFxuICAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYXJkYW5vIG1ldGhvZCBmcm9tIHRoZSB5ZWFyIDE1NDVcbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmljX2Z1bmN0aW9uI1RoZV9uYXR1cmVfb2ZfdGhlX3Jvb3RzXG4gICAgdmFyIGVwc2lsb24gPSAwLjAwMDAxOyAvLyBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIHdoaWxlIGtlZXBpbmcgdGhlIG92ZXJhbGwgZXhwcmVzc2lvbiBjbG9zZSBpbiB2YWx1ZVxuXG4gICAgaWYgKGEgPT09IDApIHtcbiAgICAgIGEgPSBlcHNpbG9uO1xuICAgIH1cblxuICAgIGIgLz0gYTtcbiAgICBjIC89IGE7XG4gICAgZCAvPSBhO1xuICAgIHZhciBkaXNjcmltaW5hbnQsIHEsIHIsIGR1bTEsIHMsIHQsIHRlcm0xLCByMTM7XG4gICAgcSA9ICgzLjAgKiBjIC0gYiAqIGIpIC8gOS4wO1xuICAgIHIgPSAtKDI3LjAgKiBkKSArIGIgKiAoOS4wICogYyAtIDIuMCAqIChiICogYikpO1xuICAgIHIgLz0gNTQuMDtcbiAgICBkaXNjcmltaW5hbnQgPSBxICogcSAqIHEgKyByICogcjtcbiAgICByZXN1bHRbMV0gPSAwO1xuICAgIHRlcm0xID0gYiAvIDMuMDtcblxuICAgIGlmIChkaXNjcmltaW5hbnQgPiAwKSB7XG4gICAgICBzID0gciArIE1hdGguc3FydChkaXNjcmltaW5hbnQpO1xuICAgICAgcyA9IHMgPCAwID8gLU1hdGgucG93KC1zLCAxLjAgLyAzLjApIDogTWF0aC5wb3cocywgMS4wIC8gMy4wKTtcbiAgICAgIHQgPSByIC0gTWF0aC5zcXJ0KGRpc2NyaW1pbmFudCk7XG4gICAgICB0ID0gdCA8IDAgPyAtTWF0aC5wb3coLXQsIDEuMCAvIDMuMCkgOiBNYXRoLnBvdyh0LCAxLjAgLyAzLjApO1xuICAgICAgcmVzdWx0WzBdID0gLXRlcm0xICsgcyArIHQ7XG4gICAgICB0ZXJtMSArPSAocyArIHQpIC8gMi4wO1xuICAgICAgcmVzdWx0WzRdID0gcmVzdWx0WzJdID0gLXRlcm0xO1xuICAgICAgdGVybTEgPSBNYXRoLnNxcnQoMy4wKSAqICgtdCArIHMpIC8gMjtcbiAgICAgIHJlc3VsdFszXSA9IHRlcm0xO1xuICAgICAgcmVzdWx0WzVdID0gLXRlcm0xO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlc3VsdFs1XSA9IHJlc3VsdFszXSA9IDA7XG5cbiAgICBpZiAoZGlzY3JpbWluYW50ID09PSAwKSB7XG4gICAgICByMTMgPSByIDwgMCA/IC1NYXRoLnBvdygtciwgMS4wIC8gMy4wKSA6IE1hdGgucG93KHIsIDEuMCAvIDMuMCk7XG4gICAgICByZXN1bHRbMF0gPSAtdGVybTEgKyAyLjAgKiByMTM7XG4gICAgICByZXN1bHRbNF0gPSByZXN1bHRbMl0gPSAtKHIxMyArIHRlcm0xKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBxID0gLXE7XG4gICAgZHVtMSA9IHEgKiBxICogcTtcbiAgICBkdW0xID0gTWF0aC5hY29zKHIgLyBNYXRoLnNxcnQoZHVtMSkpO1xuICAgIHIxMyA9IDIuMCAqIE1hdGguc3FydChxKTtcbiAgICByZXN1bHRbMF0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcyhkdW0xIC8gMy4wKTtcbiAgICByZXN1bHRbMl0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcygoZHVtMSArIDIuMCAqIE1hdGguUEkpIC8gMy4wKTtcbiAgICByZXN1bHRbNF0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcygoZHVtMSArIDQuMCAqIE1hdGguUEkpIC8gMy4wKTtcbiAgICByZXR1cm47XG4gIH07XG4gIHZhciBzcWRpc3RUb1F1YWRyYXRpY0JlemllciA9IGZ1bmN0aW9uIHNxZGlzdFRvUXVhZHJhdGljQmV6aWVyKHgsIHksIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgICAvLyBGaW5kIG1pbmltdW0gZGlzdGFuY2UgYnkgdXNpbmcgdGhlIG1pbmltdW0gb2YgdGhlIGRpc3RhbmNlXG4gICAgLy8gZnVuY3Rpb24gYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnQgYW5kIHRoZSBjdXJ2ZVxuICAgIC8vIFRoaXMgZ2l2ZXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcmVzdWx0aW5nIGN1YmljIGVxdWF0aW9uXG4gICAgLy8gd2hvc2Ugcm9vdHMgdGVsbCB1cyB3aGVyZSBhIHBvc3NpYmxlIG1pbmltdW0gaXNcbiAgICAvLyAoQ29lZmZpY2llbnRzIGFyZSBkaXZpZGVkIGJ5IDQpXG4gICAgdmFyIGEgPSAxLjAgKiB4MSAqIHgxIC0gNCAqIHgxICogeDIgKyAyICogeDEgKiB4MyArIDQgKiB4MiAqIHgyIC0gNCAqIHgyICogeDMgKyB4MyAqIHgzICsgeTEgKiB5MSAtIDQgKiB5MSAqIHkyICsgMiAqIHkxICogeTMgKyA0ICogeTIgKiB5MiAtIDQgKiB5MiAqIHkzICsgeTMgKiB5MztcbiAgICB2YXIgYiA9IDEuMCAqIDkgKiB4MSAqIHgyIC0gMyAqIHgxICogeDEgLSAzICogeDEgKiB4MyAtIDYgKiB4MiAqIHgyICsgMyAqIHgyICogeDMgKyA5ICogeTEgKiB5MiAtIDMgKiB5MSAqIHkxIC0gMyAqIHkxICogeTMgLSA2ICogeTIgKiB5MiArIDMgKiB5MiAqIHkzO1xuICAgIHZhciBjID0gMS4wICogMyAqIHgxICogeDEgLSA2ICogeDEgKiB4MiArIHgxICogeDMgLSB4MSAqIHggKyAyICogeDIgKiB4MiArIDIgKiB4MiAqIHggLSB4MyAqIHggKyAzICogeTEgKiB5MSAtIDYgKiB5MSAqIHkyICsgeTEgKiB5MyAtIHkxICogeSArIDIgKiB5MiAqIHkyICsgMiAqIHkyICogeSAtIHkzICogeTtcbiAgICB2YXIgZCA9IDEuMCAqIHgxICogeDIgLSB4MSAqIHgxICsgeDEgKiB4IC0geDIgKiB4ICsgeTEgKiB5MiAtIHkxICogeTEgKyB5MSAqIHkgLSB5MiAqIHk7IC8vIGRlYnVnKFwiY29lZmZpY2llbnRzOiBcIiArIGEgLyBhICsgXCIsIFwiICsgYiAvIGEgKyBcIiwgXCIgKyBjIC8gYSArIFwiLCBcIiArIGQgLyBhKTtcblxuICAgIHZhciByb290cyA9IFtdOyAvLyBVc2UgdGhlIGN1YmljIHNvbHZpbmcgYWxnb3JpdGhtXG5cbiAgICBzb2x2ZUN1YmljKGEsIGIsIGMsIGQsIHJvb3RzKTtcbiAgICB2YXIgemVyb1RocmVzaG9sZCA9IDAuMDAwMDAwMTtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5kZXggKz0gMikge1xuICAgICAgaWYgKE1hdGguYWJzKHJvb3RzW2luZGV4ICsgMV0pIDwgemVyb1RocmVzaG9sZCAmJiByb290c1tpbmRleF0gPj0gMCAmJiByb290c1tpbmRleF0gPD0gMS4wKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHJvb3RzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyYW1zLnB1c2goMS4wKTtcbiAgICBwYXJhbXMucHVzaCgwLjApO1xuICAgIHZhciBtaW5EaXN0YW5jZVNxdWFyZWQgPSAtMTtcbiAgICB2YXIgY3VyWCwgY3VyWSwgZGlzdFNxdWFyZWQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY3VyWCA9IE1hdGgucG93KDEuMCAtIHBhcmFtc1tpXSwgMi4wKSAqIHgxICsgMi4wICogKDEgLSBwYXJhbXNbaV0pICogcGFyYW1zW2ldICogeDIgKyBwYXJhbXNbaV0gKiBwYXJhbXNbaV0gKiB4MztcbiAgICAgIGN1clkgPSBNYXRoLnBvdygxIC0gcGFyYW1zW2ldLCAyLjApICogeTEgKyAyICogKDEuMCAtIHBhcmFtc1tpXSkgKiBwYXJhbXNbaV0gKiB5MiArIHBhcmFtc1tpXSAqIHBhcmFtc1tpXSAqIHkzO1xuICAgICAgZGlzdFNxdWFyZWQgPSBNYXRoLnBvdyhjdXJYIC0geCwgMikgKyBNYXRoLnBvdyhjdXJZIC0geSwgMik7IC8vIGRlYnVnKCdkaXN0YW5jZSBmb3IgcGFyYW0gJyArIHBhcmFtc1tpXSArIFwiOiBcIiArIE1hdGguc3FydChkaXN0U3F1YXJlZCkpO1xuXG4gICAgICBpZiAobWluRGlzdGFuY2VTcXVhcmVkID49IDApIHtcbiAgICAgICAgaWYgKGRpc3RTcXVhcmVkIDwgbWluRGlzdGFuY2VTcXVhcmVkKSB7XG4gICAgICAgICAgbWluRGlzdGFuY2VTcXVhcmVkID0gZGlzdFNxdWFyZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pbkRpc3RhbmNlU3F1YXJlZCA9IGRpc3RTcXVhcmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5EaXN0YW5jZVNxdWFyZWQ7XG4gIH07XG4gIHZhciBzcWRpc3RUb0Zpbml0ZUxpbmUgPSBmdW5jdGlvbiBzcWRpc3RUb0Zpbml0ZUxpbmUoeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgICB2YXIgb2Zmc2V0ID0gW3ggLSB4MSwgeSAtIHkxXTtcbiAgICB2YXIgbGluZSA9IFt4MiAtIHgxLCB5MiAtIHkxXTtcbiAgICB2YXIgbGluZVNxID0gbGluZVswXSAqIGxpbmVbMF0gKyBsaW5lWzFdICogbGluZVsxXTtcbiAgICB2YXIgaHlwU3EgPSBvZmZzZXRbMF0gKiBvZmZzZXRbMF0gKyBvZmZzZXRbMV0gKiBvZmZzZXRbMV07XG4gICAgdmFyIGRvdFByb2R1Y3QgPSBvZmZzZXRbMF0gKiBsaW5lWzBdICsgb2Zmc2V0WzFdICogbGluZVsxXTtcbiAgICB2YXIgYWRqU3EgPSBkb3RQcm9kdWN0ICogZG90UHJvZHVjdCAvIGxpbmVTcTtcblxuICAgIGlmIChkb3RQcm9kdWN0IDwgMCkge1xuICAgICAgcmV0dXJuIGh5cFNxO1xuICAgIH1cblxuICAgIGlmIChhZGpTcSA+IGxpbmVTcSkge1xuICAgICAgcmV0dXJuICh4IC0geDIpICogKHggLSB4MikgKyAoeSAtIHkyKSAqICh5IC0geTIpO1xuICAgIH1cblxuICAgIHJldHVybiBoeXBTcSAtIGFkalNxO1xuICB9O1xuICB2YXIgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzID0gZnVuY3Rpb24gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHBvaW50cykge1xuICAgIHZhciB4MSwgeTEsIHgyLCB5MjtcbiAgICB2YXIgeTM7IC8vIEludGVyc2VjdCB3aXRoIHZlcnRpY2FsIGxpbmUgdGhyb3VnaCAoeCwgeSlcblxuICAgIHZhciB1cCA9IDA7IC8vIGxldCBkb3duID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgeDEgPSBwb2ludHNbaSAqIDJdO1xuICAgICAgeTEgPSBwb2ludHNbaSAqIDIgKyAxXTtcblxuICAgICAgaWYgKGkgKyAxIDwgcG9pbnRzLmxlbmd0aCAvIDIpIHtcbiAgICAgICAgeDIgPSBwb2ludHNbKGkgKyAxKSAqIDJdO1xuICAgICAgICB5MiA9IHBvaW50c1soaSArIDEpICogMiArIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeDIgPSBwb2ludHNbKGkgKyAxIC0gcG9pbnRzLmxlbmd0aCAvIDIpICogMl07XG4gICAgICAgIHkyID0gcG9pbnRzWyhpICsgMSAtIHBvaW50cy5sZW5ndGggLyAyKSAqIDIgKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHgxID09IHggJiYgeDIgPT0geCkgOyBlbHNlIGlmICh4MSA+PSB4ICYmIHggPj0geDIgfHwgeDEgPD0geCAmJiB4IDw9IHgyKSB7XG4gICAgICAgIHkzID0gKHggLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTtcblxuICAgICAgICBpZiAoeTMgPiB5KSB7XG4gICAgICAgICAgdXArKztcbiAgICAgICAgfSAvLyBpZiggeTMgPCB5ICl7XG4gICAgICAgIC8vIGRvd24rKztcbiAgICAgICAgLy8gfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXAgJSAyID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIHBvaW50SW5zaWRlUG9seWdvbiA9IGZ1bmN0aW9uIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBkaXJlY3Rpb24sIHBhZGRpbmcpIHtcbiAgICB2YXIgdHJhbnNmb3JtZWRQb2ludHMgPSBuZXcgQXJyYXkoYmFzZVBvaW50cy5sZW5ndGgpOyAvLyBHaXZlcyBuZWdhdGl2ZSBhbmdsZVxuXG4gICAgdmFyIGFuZ2xlO1xuXG4gICAgaWYgKGRpcmVjdGlvblswXSAhPSBudWxsKSB7XG4gICAgICBhbmdsZSA9IE1hdGguYXRhbihkaXJlY3Rpb25bMV0gLyBkaXJlY3Rpb25bMF0pO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uWzBdIDwgMCkge1xuICAgICAgICBhbmdsZSA9IGFuZ2xlICsgTWF0aC5QSSAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbmdsZSA9IC1hbmdsZSAtIE1hdGguUEkgLyAyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhbmdsZSA9IGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgY29zID0gTWF0aC5jb3MoLWFuZ2xlKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oLWFuZ2xlKTsgLy8gICAgY29uc29sZS5sb2coXCJiYXNlOiBcIiArIGJhc2VQb2ludHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1lZFBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgIHRyYW5zZm9ybWVkUG9pbnRzW2kgKiAyXSA9IHdpZHRoIC8gMiAqIChiYXNlUG9pbnRzW2kgKiAyXSAqIGNvcyAtIGJhc2VQb2ludHNbaSAqIDIgKyAxXSAqIHNpbik7XG4gICAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdID0gaGVpZ2h0IC8gMiAqIChiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBjb3MgKyBiYXNlUG9pbnRzW2kgKiAyXSAqIHNpbik7XG4gICAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMl0gKz0gY2VudGVyWDtcbiAgICAgIHRyYW5zZm9ybWVkUG9pbnRzW2kgKiAyICsgMV0gKz0gY2VudGVyWTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzO1xuXG4gICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gZXhwYW5kUG9seWdvbih0cmFuc2Zvcm1lZFBvaW50cywgLXBhZGRpbmcpO1xuICAgICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50cyA9IHRyYW5zZm9ybWVkUG9pbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKTtcbiAgfTtcbiAgdmFyIHBvaW50SW5zaWRlUm91bmRQb2x5Z29uID0gZnVuY3Rpb24gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCkge1xuICAgIHZhciBjdXRQb2x5Z29uUG9pbnRzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoKTtcbiAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIID0gaGVpZ2h0IC8gMjtcbiAgICB2YXIgY29ybmVyUmFkaXVzID0gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciBzcXVhcmVkQ29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzICogY29ybmVyUmFkaXVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlUG9pbnRzLmxlbmd0aCAvIDQ7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZVV2ID0gdm9pZCAwLFxuICAgICAgICAgIGRlc3RVdiA9IHZvaWQgMDtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgc291cmNlVXYgPSBiYXNlUG9pbnRzLmxlbmd0aCAtIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VVdiA9IGkgKiA0IC0gMjtcbiAgICAgIH1cblxuICAgICAgZGVzdFV2ID0gaSAqIDQgKyAyO1xuICAgICAgdmFyIHB4ID0gY2VudGVyWCArIGhhbGZXICogYmFzZVBvaW50c1tpICogNF07XG4gICAgICB2YXIgcHkgPSBjZW50ZXJZICsgaGFsZkggKiBiYXNlUG9pbnRzW2kgKiA0ICsgMV07XG4gICAgICB2YXIgY29zVGhldGEgPSAtYmFzZVBvaW50c1tzb3VyY2VVdl0gKiBiYXNlUG9pbnRzW2Rlc3RVdl0gLSBiYXNlUG9pbnRzW3NvdXJjZVV2ICsgMV0gKiBiYXNlUG9pbnRzW2Rlc3RVdiArIDFdO1xuICAgICAgdmFyIG9mZnNldCA9IGNvcm5lclJhZGl1cyAvIE1hdGgudGFuKE1hdGguYWNvcyhjb3NUaGV0YSkgLyAyKTtcbiAgICAgIHZhciBjcDB4ID0gcHggLSBvZmZzZXQgKiBiYXNlUG9pbnRzW3NvdXJjZVV2XTtcbiAgICAgIHZhciBjcDB5ID0gcHkgLSBvZmZzZXQgKiBiYXNlUG9pbnRzW3NvdXJjZVV2ICsgMV07XG4gICAgICB2YXIgY3AxeCA9IHB4ICsgb2Zmc2V0ICogYmFzZVBvaW50c1tkZXN0VXZdO1xuICAgICAgdmFyIGNwMXkgPSBweSArIG9mZnNldCAqIGJhc2VQb2ludHNbZGVzdFV2ICsgMV07XG4gICAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0XSA9IGNwMHg7XG4gICAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgMV0gPSBjcDB5O1xuICAgICAgY3V0UG9seWdvblBvaW50c1tpICogNCArIDJdID0gY3AxeDtcbiAgICAgIGN1dFBvbHlnb25Qb2ludHNbaSAqIDQgKyAzXSA9IGNwMXk7XG4gICAgICB2YXIgb3J0aHggPSBiYXNlUG9pbnRzW3NvdXJjZVV2ICsgMV07XG4gICAgICB2YXIgb3J0aHkgPSAtYmFzZVBvaW50c1tzb3VyY2VVdl07XG4gICAgICB2YXIgY29zQWxwaGEgPSBvcnRoeCAqIGJhc2VQb2ludHNbZGVzdFV2XSArIG9ydGh5ICogYmFzZVBvaW50c1tkZXN0VXYgKyAxXTtcblxuICAgICAgaWYgKGNvc0FscGhhIDwgMCkge1xuICAgICAgICBvcnRoeCAqPSAtMTtcbiAgICAgICAgb3J0aHkgKj0gLTE7XG4gICAgICB9XG5cbiAgICAgIHZhciBjeCA9IGNwMHggKyBvcnRoeCAqIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBjeSA9IGNwMHkgKyBvcnRoeSAqIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBzcXVhcmVkRGlzdGFuY2UgPSBNYXRoLnBvdyhjeCAtIHgsIDIpICsgTWF0aC5wb3coY3kgLSB5LCAyKTtcblxuICAgICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBzcXVhcmVkQ29ybmVyUmFkaXVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0UG9seWdvblBvaW50cyk7XG4gIH07XG4gIHZhciBqb2luTGluZXMgPSBmdW5jdGlvbiBqb2luTGluZXMobGluZVNldCkge1xuICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBBcnJheShsaW5lU2V0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjdXJyZW50TGluZVN0YXJ0WCwgY3VycmVudExpbmVTdGFydFksIGN1cnJlbnRMaW5lRW5kWCwgY3VycmVudExpbmVFbmRZO1xuICAgIHZhciBuZXh0TGluZVN0YXJ0WCwgbmV4dExpbmVTdGFydFksIG5leHRMaW5lRW5kWCwgbmV4dExpbmVFbmRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lU2V0Lmxlbmd0aCAvIDQ7IGkrKykge1xuICAgICAgY3VycmVudExpbmVTdGFydFggPSBsaW5lU2V0W2kgKiA0XTtcbiAgICAgIGN1cnJlbnRMaW5lU3RhcnRZID0gbGluZVNldFtpICogNCArIDFdO1xuICAgICAgY3VycmVudExpbmVFbmRYID0gbGluZVNldFtpICogNCArIDJdO1xuICAgICAgY3VycmVudExpbmVFbmRZID0gbGluZVNldFtpICogNCArIDNdO1xuXG4gICAgICBpZiAoaSA8IGxpbmVTZXQubGVuZ3RoIC8gNCAtIDEpIHtcbiAgICAgICAgbmV4dExpbmVTdGFydFggPSBsaW5lU2V0WyhpICsgMSkgKiA0XTtcbiAgICAgICAgbmV4dExpbmVTdGFydFkgPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgMV07XG4gICAgICAgIG5leHRMaW5lRW5kWCA9IGxpbmVTZXRbKGkgKyAxKSAqIDQgKyAyXTtcbiAgICAgICAgbmV4dExpbmVFbmRZID0gbGluZVNldFsoaSArIDEpICogNCArIDNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dExpbmVTdGFydFggPSBsaW5lU2V0WzBdO1xuICAgICAgICBuZXh0TGluZVN0YXJ0WSA9IGxpbmVTZXRbMV07XG4gICAgICAgIG5leHRMaW5lRW5kWCA9IGxpbmVTZXRbMl07XG4gICAgICAgIG5leHRMaW5lRW5kWSA9IGxpbmVTZXRbM107XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBmaW5pdGVMaW5lc0ludGVyc2VjdChjdXJyZW50TGluZVN0YXJ0WCwgY3VycmVudExpbmVTdGFydFksIGN1cnJlbnRMaW5lRW5kWCwgY3VycmVudExpbmVFbmRZLCBuZXh0TGluZVN0YXJ0WCwgbmV4dExpbmVTdGFydFksIG5leHRMaW5lRW5kWCwgbmV4dExpbmVFbmRZLCB0cnVlKTtcbiAgICAgIHZlcnRpY2VzW2kgKiAyXSA9IGludGVyc2VjdGlvblswXTtcbiAgICAgIHZlcnRpY2VzW2kgKiAyICsgMV0gPSBpbnRlcnNlY3Rpb25bMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnRpY2VzO1xuICB9O1xuICB2YXIgZXhwYW5kUG9seWdvbiA9IGZ1bmN0aW9uIGV4cGFuZFBvbHlnb24ocG9pbnRzLCBwYWQpIHtcbiAgICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcbiAgICB2YXIgY3VycmVudFBvaW50WCwgY3VycmVudFBvaW50WSwgbmV4dFBvaW50WCwgbmV4dFBvaW50WTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgY3VycmVudFBvaW50WCA9IHBvaW50c1tpICogMl07XG4gICAgICBjdXJyZW50UG9pbnRZID0gcG9pbnRzW2kgKiAyICsgMV07XG5cbiAgICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aCAvIDIgLSAxKSB7XG4gICAgICAgIG5leHRQb2ludFggPSBwb2ludHNbKGkgKyAxKSAqIDJdO1xuICAgICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWyhpICsgMSkgKiAyICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0UG9pbnRYID0gcG9pbnRzWzBdO1xuICAgICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWzFdO1xuICAgICAgfSAvLyBDdXJyZW50IGxpbmU6IFtjdXJyZW50UG9pbnRYLCBjdXJyZW50UG9pbnRZXSB0byBbbmV4dFBvaW50WCwgbmV4dFBvaW50WV1cbiAgICAgIC8vIEFzc3VtZSBDQ1cgcG9seWdvbiB3aW5kaW5nXG5cblxuICAgICAgdmFyIG9mZnNldFggPSBuZXh0UG9pbnRZIC0gY3VycmVudFBvaW50WTtcbiAgICAgIHZhciBvZmZzZXRZID0gLShuZXh0UG9pbnRYIC0gY3VycmVudFBvaW50WCk7IC8vIE5vcm1hbGl6ZVxuXG4gICAgICB2YXIgb2Zmc2V0TGVuZ3RoID0gTWF0aC5zcXJ0KG9mZnNldFggKiBvZmZzZXRYICsgb2Zmc2V0WSAqIG9mZnNldFkpO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRPZmZzZXRYID0gb2Zmc2V0WCAvIG9mZnNldExlbmd0aDtcbiAgICAgIHZhciBub3JtYWxpemVkT2Zmc2V0WSA9IG9mZnNldFkgLyBvZmZzZXRMZW5ndGg7XG4gICAgICBleHBhbmRlZExpbmVTZXRbaSAqIDRdID0gY3VycmVudFBvaW50WCArIG5vcm1hbGl6ZWRPZmZzZXRYICogcGFkO1xuICAgICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgMV0gPSBjdXJyZW50UG9pbnRZICsgbm9ybWFsaXplZE9mZnNldFkgKiBwYWQ7XG4gICAgICBleHBhbmRlZExpbmVTZXRbaSAqIDQgKyAyXSA9IG5leHRQb2ludFggKyBub3JtYWxpemVkT2Zmc2V0WCAqIHBhZDtcbiAgICAgIGV4cGFuZGVkTGluZVNldFtpICogNCArIDNdID0gbmV4dFBvaW50WSArIG5vcm1hbGl6ZWRPZmZzZXRZICogcGFkO1xuICAgIH1cblxuICAgIHJldHVybiBleHBhbmRlZExpbmVTZXQ7XG4gIH07XG4gIHZhciBpbnRlcnNlY3RMaW5lRWxsaXBzZSA9IGZ1bmN0aW9uIGludGVyc2VjdExpbmVFbGxpcHNlKHgsIHksIGNlbnRlclgsIGNlbnRlclksIGVsbGlwc2VXcmFkaXVzLCBlbGxpcHNlSHJhZGl1cykge1xuICAgIHZhciBkaXNwWCA9IGNlbnRlclggLSB4O1xuICAgIHZhciBkaXNwWSA9IGNlbnRlclkgLSB5O1xuICAgIGRpc3BYIC89IGVsbGlwc2VXcmFkaXVzO1xuICAgIGRpc3BZIC89IGVsbGlwc2VIcmFkaXVzO1xuICAgIHZhciBsZW4gPSBNYXRoLnNxcnQoZGlzcFggKiBkaXNwWCArIGRpc3BZICogZGlzcFkpO1xuICAgIHZhciBuZXdMZW5ndGggPSBsZW4gLSAxO1xuXG4gICAgaWYgKG5ld0xlbmd0aCA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgbGVuUHJvcG9ydGlvbiA9IG5ld0xlbmd0aCAvIGxlbjtcbiAgICByZXR1cm4gWyhjZW50ZXJYIC0geCkgKiBsZW5Qcm9wb3J0aW9uICsgeCwgKGNlbnRlclkgLSB5KSAqIGxlblByb3BvcnRpb24gKyB5XTtcbiAgfTtcbiAgdmFyIGNoZWNrSW5FbGxpcHNlID0gZnVuY3Rpb24gY2hlY2tJbkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgcGFkZGluZykge1xuICAgIHggLT0gY2VudGVyWDtcbiAgICB5IC09IGNlbnRlclk7XG4gICAgeCAvPSB3aWR0aCAvIDIgKyBwYWRkaW5nO1xuICAgIHkgLz0gaGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgcmV0dXJuIHggKiB4ICsgeSAqIHkgPD0gMTtcbiAgfTsgLy8gUmV0dXJucyBpbnRlcnNlY3Rpb25zIG9mIGluY3JlYXNpbmcgZGlzdGFuY2UgZnJvbSBsaW5lJ3Mgc3RhcnQgcG9pbnRcblxuICB2YXIgaW50ZXJzZWN0TGluZUNpcmNsZSA9IGZ1bmN0aW9uIGludGVyc2VjdExpbmVDaXJjbGUoeDEsIHkxLCB4MiwgeTIsIGNlbnRlclgsIGNlbnRlclksIHJhZGl1cykge1xuICAgIC8vIENhbGN1bGF0ZSBkLCBkaXJlY3Rpb24gdmVjdG9yIG9mIGxpbmVcbiAgICB2YXIgZCA9IFt4MiAtIHgxLCB5MiAtIHkxXTsgLy8gRGlyZWN0aW9uIHZlY3RvciBvZiBsaW5lXG5cbiAgICB2YXIgZiA9IFt4MSAtIGNlbnRlclgsIHkxIC0gY2VudGVyWV07XG4gICAgdmFyIGEgPSBkWzBdICogZFswXSArIGRbMV0gKiBkWzFdO1xuICAgIHZhciBiID0gMiAqIChmWzBdICogZFswXSArIGZbMV0gKiBkWzFdKTtcbiAgICB2YXIgYyA9IGZbMF0gKiBmWzBdICsgZlsxXSAqIGZbMV0gLSByYWRpdXMgKiByYWRpdXM7XG4gICAgdmFyIGRpc2NyaW1pbmFudCA9IGIgKiBiIC0gNCAqIGEgKiBjO1xuXG4gICAgaWYgKGRpc2NyaW1pbmFudCA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgdDEgPSAoLWIgKyBNYXRoLnNxcnQoZGlzY3JpbWluYW50KSkgLyAoMiAqIGEpO1xuICAgIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gICAgdmFyIHRNaW4gPSBNYXRoLm1pbih0MSwgdDIpO1xuICAgIHZhciB0TWF4ID0gTWF0aC5tYXgodDEsIHQyKTtcbiAgICB2YXIgaW5SYW5nZVBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHRNaW4gPj0gMCAmJiB0TWluIDw9IDEpIHtcbiAgICAgIGluUmFuZ2VQYXJhbXMucHVzaCh0TWluKTtcbiAgICB9XG5cbiAgICBpZiAodE1heCA+PSAwICYmIHRNYXggPD0gMSkge1xuICAgICAgaW5SYW5nZVBhcmFtcy5wdXNoKHRNYXgpO1xuICAgIH1cblxuICAgIGlmIChpblJhbmdlUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBuZWFySW50ZXJzZWN0aW9uWCA9IGluUmFuZ2VQYXJhbXNbMF0gKiBkWzBdICsgeDE7XG4gICAgdmFyIG5lYXJJbnRlcnNlY3Rpb25ZID0gaW5SYW5nZVBhcmFtc1swXSAqIGRbMV0gKyB5MTtcblxuICAgIGlmIChpblJhbmdlUGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChpblJhbmdlUGFyYW1zWzBdID09IGluUmFuZ2VQYXJhbXNbMV0pIHtcbiAgICAgICAgcmV0dXJuIFtuZWFySW50ZXJzZWN0aW9uWCwgbmVhckludGVyc2VjdGlvblldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGZhckludGVyc2VjdGlvblggPSBpblJhbmdlUGFyYW1zWzFdICogZFswXSArIHgxO1xuICAgICAgICB2YXIgZmFySW50ZXJzZWN0aW9uWSA9IGluUmFuZ2VQYXJhbXNbMV0gKiBkWzFdICsgeTE7XG4gICAgICAgIHJldHVybiBbbmVhckludGVyc2VjdGlvblgsIG5lYXJJbnRlcnNlY3Rpb25ZLCBmYXJJbnRlcnNlY3Rpb25YLCBmYXJJbnRlcnNlY3Rpb25ZXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtuZWFySW50ZXJzZWN0aW9uWCwgbmVhckludGVyc2VjdGlvblldO1xuICAgIH1cbiAgfTtcbiAgdmFyIG1pZE9mVGhyZWUgPSBmdW5jdGlvbiBtaWRPZlRocmVlKGEsIGIsIGMpIHtcbiAgICBpZiAoYiA8PSBhICYmIGEgPD0gYyB8fCBjIDw9IGEgJiYgYSA8PSBiKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IGVsc2UgaWYgKGEgPD0gYiAmJiBiIDw9IGMgfHwgYyA8PSBiICYmIGIgPD0gYSkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgfTsgLy8gKHgxLHkxKT0+KHgyLHkyKSBpbnRlcnNlY3Qgd2l0aCAoeDMseTMpPT4oeDQseTQpXG5cbiAgdmFyIGZpbml0ZUxpbmVzSW50ZXJzZWN0ID0gZnVuY3Rpb24gZmluaXRlTGluZXNJbnRlcnNlY3QoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBpbmZpbml0ZUxpbmVzKSB7XG4gICAgdmFyIGR4MTMgPSB4MSAtIHgzO1xuICAgIHZhciBkeDIxID0geDIgLSB4MTtcbiAgICB2YXIgZHg0MyA9IHg0IC0geDM7XG4gICAgdmFyIGR5MTMgPSB5MSAtIHkzO1xuICAgIHZhciBkeTIxID0geTIgLSB5MTtcbiAgICB2YXIgZHk0MyA9IHk0IC0geTM7XG4gICAgdmFyIHVhX3QgPSBkeDQzICogZHkxMyAtIGR5NDMgKiBkeDEzO1xuICAgIHZhciB1Yl90ID0gZHgyMSAqIGR5MTMgLSBkeTIxICogZHgxMztcbiAgICB2YXIgdV9iID0gZHk0MyAqIGR4MjEgLSBkeDQzICogZHkyMTtcblxuICAgIGlmICh1X2IgIT09IDApIHtcbiAgICAgIHZhciB1YSA9IHVhX3QgLyB1X2I7XG4gICAgICB2YXIgdWIgPSB1Yl90IC8gdV9iO1xuICAgICAgdmFyIGZscHRUaHJlc2hvbGQgPSAwLjAwMTtcblxuICAgICAgdmFyIF9taW4gPSAwIC0gZmxwdFRocmVzaG9sZDtcblxuICAgICAgdmFyIF9tYXggPSAxICsgZmxwdFRocmVzaG9sZDtcblxuICAgICAgaWYgKF9taW4gPD0gdWEgJiYgdWEgPD0gX21heCAmJiBfbWluIDw9IHViICYmIHViIDw9IF9tYXgpIHtcbiAgICAgICAgcmV0dXJuIFt4MSArIHVhICogZHgyMSwgeTEgKyB1YSAqIGR5MjFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFpbmZpbml0ZUxpbmVzKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbeDEgKyB1YSAqIGR4MjEsIHkxICsgdWEgKiBkeTIxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodWFfdCA9PT0gMCB8fCB1Yl90ID09PSAwKSB7XG4gICAgICAgIC8vIFBhcmFsbGVsLCBjb2luY2lkZW50IGxpbmVzLiBDaGVjayBpZiBvdmVybGFwXG4gICAgICAgIC8vIENoZWNrIGVuZHBvaW50IG9mIHNlY29uZCBsaW5lXG4gICAgICAgIGlmIChtaWRPZlRocmVlKHgxLCB4MiwgeDQpID09PSB4NCkge1xuICAgICAgICAgIHJldHVybiBbeDQsIHk0XTtcbiAgICAgICAgfSAvLyBDaGVjayBzdGFydCBwb2ludCBvZiBzZWNvbmQgbGluZVxuXG5cbiAgICAgICAgaWYgKG1pZE9mVGhyZWUoeDEsIHgyLCB4MykgPT09IHgzKSB7XG4gICAgICAgICAgcmV0dXJuIFt4MywgeTNdO1xuICAgICAgICB9IC8vIEVuZHBvaW50IG9mIGZpcnN0IGxpbmVcblxuXG4gICAgICAgIGlmIChtaWRPZlRocmVlKHgzLCB4NCwgeDIpID09PSB4Mikge1xuICAgICAgICAgIHJldHVybiBbeDIsIHkyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFBhcmFsbGVsLCBub24tY29pbmNpZGVudFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBtYXRoLnBvbHlnb25JbnRlcnNlY3RMaW5lKCB4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nIClcbiAgLy8gaW50ZXJzZWN0IGEgbm9kZSBwb2x5Z29uIChwdHMgdHJhbnNmb3JtZWQpXG4gIC8vXG4gIC8vIG1hdGgucG9seWdvbkludGVyc2VjdExpbmUoIHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclkgKVxuICAvLyBpbnRlcnNlY3QgdGhlIHBvaW50cyAobm8gdHJhbnNmb3JtKVxuXG4gIHZhciBwb2x5Z29uSW50ZXJzZWN0TGluZSA9IGZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcpIHtcbiAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IFtdO1xuICAgIHZhciBpbnRlcnNlY3Rpb247XG4gICAgdmFyIHRyYW5zZm9ybWVkUG9pbnRzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoKTtcbiAgICB2YXIgZG9UcmFuc2Zvcm0gPSB0cnVlO1xuXG4gICAgaWYgKHdpZHRoID09IG51bGwpIHtcbiAgICAgIGRvVHJhbnNmb3JtID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cztcblxuICAgIGlmIChkb1RyYW5zZm9ybSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1lZFBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdID0gYmFzZVBvaW50c1tpICogMl0gKiB3aWR0aCArIGNlbnRlclg7XG4gICAgICAgIHRyYW5zZm9ybWVkUG9pbnRzW2kgKiAyICsgMV0gPSBiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBoZWlnaHQgKyBjZW50ZXJZO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFkZGluZyA+IDApIHtcbiAgICAgICAgdmFyIGV4cGFuZGVkTGluZVNldCA9IGV4cGFuZFBvbHlnb24odHJhbnNmb3JtZWRQb2ludHMsIC1wYWRkaW5nKTtcbiAgICAgICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb2ludHMgPSB0cmFuc2Zvcm1lZFBvaW50cztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gYmFzZVBvaW50cztcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudFgsIGN1cnJlbnRZLCBuZXh0WCwgbmV4dFk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwb2ludHMubGVuZ3RoIC8gMjsgX2kyKyspIHtcbiAgICAgIGN1cnJlbnRYID0gcG9pbnRzW19pMiAqIDJdO1xuICAgICAgY3VycmVudFkgPSBwb2ludHNbX2kyICogMiArIDFdO1xuXG4gICAgICBpZiAoX2kyIDwgcG9pbnRzLmxlbmd0aCAvIDIgLSAxKSB7XG4gICAgICAgIG5leHRYID0gcG9pbnRzWyhfaTIgKyAxKSAqIDJdO1xuICAgICAgICBuZXh0WSA9IHBvaW50c1soX2kyICsgMSkgKiAyICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0WCA9IHBvaW50c1swXTtcbiAgICAgICAgbmV4dFkgPSBwb2ludHNbMV07XG4gICAgICB9XG5cbiAgICAgIGludGVyc2VjdGlvbiA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIGNlbnRlclgsIGNlbnRlclksIGN1cnJlbnRYLCBjdXJyZW50WSwgbmV4dFgsIG5leHRZKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvblswXSwgaW50ZXJzZWN0aW9uWzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbiAgfTtcbiAgdmFyIHJvdW5kUG9seWdvbkludGVyc2VjdExpbmUgPSBmdW5jdGlvbiByb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcpIHtcbiAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IFtdO1xuICAgIHZhciBpbnRlcnNlY3Rpb247XG4gICAgdmFyIGxpbmVzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoKTtcbiAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIID0gaGVpZ2h0IC8gMjtcbiAgICB2YXIgY29ybmVyUmFkaXVzID0gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlUG9pbnRzLmxlbmd0aCAvIDQ7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZVV2ID0gdm9pZCAwLFxuICAgICAgICAgIGRlc3RVdiA9IHZvaWQgMDtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgc291cmNlVXYgPSBiYXNlUG9pbnRzLmxlbmd0aCAtIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VVdiA9IGkgKiA0IC0gMjtcbiAgICAgIH1cblxuICAgICAgZGVzdFV2ID0gaSAqIDQgKyAyO1xuICAgICAgdmFyIHB4ID0gY2VudGVyWCArIGhhbGZXICogYmFzZVBvaW50c1tpICogNF07XG4gICAgICB2YXIgcHkgPSBjZW50ZXJZICsgaGFsZkggKiBiYXNlUG9pbnRzW2kgKiA0ICsgMV07XG4gICAgICB2YXIgY29zVGhldGEgPSAtYmFzZVBvaW50c1tzb3VyY2VVdl0gKiBiYXNlUG9pbnRzW2Rlc3RVdl0gLSBiYXNlUG9pbnRzW3NvdXJjZVV2ICsgMV0gKiBiYXNlUG9pbnRzW2Rlc3RVdiArIDFdO1xuICAgICAgdmFyIG9mZnNldCA9IGNvcm5lclJhZGl1cyAvIE1hdGgudGFuKE1hdGguYWNvcyhjb3NUaGV0YSkgLyAyKTtcbiAgICAgIHZhciBjcDB4ID0gcHggLSBvZmZzZXQgKiBiYXNlUG9pbnRzW3NvdXJjZVV2XTtcbiAgICAgIHZhciBjcDB5ID0gcHkgLSBvZmZzZXQgKiBiYXNlUG9pbnRzW3NvdXJjZVV2ICsgMV07XG4gICAgICB2YXIgY3AxeCA9IHB4ICsgb2Zmc2V0ICogYmFzZVBvaW50c1tkZXN0VXZdO1xuICAgICAgdmFyIGNwMXkgPSBweSArIG9mZnNldCAqIGJhc2VQb2ludHNbZGVzdFV2ICsgMV07XG5cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGxpbmVzW2Jhc2VQb2ludHMubGVuZ3RoIC0gMl0gPSBjcDB4O1xuICAgICAgICBsaW5lc1tiYXNlUG9pbnRzLmxlbmd0aCAtIDFdID0gY3AweTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzW2kgKiA0IC0gMl0gPSBjcDB4O1xuICAgICAgICBsaW5lc1tpICogNCAtIDFdID0gY3AweTtcbiAgICAgIH1cblxuICAgICAgbGluZXNbaSAqIDRdID0gY3AxeDtcbiAgICAgIGxpbmVzW2kgKiA0ICsgMV0gPSBjcDF5O1xuICAgICAgdmFyIG9ydGh4ID0gYmFzZVBvaW50c1tzb3VyY2VVdiArIDFdO1xuICAgICAgdmFyIG9ydGh5ID0gLWJhc2VQb2ludHNbc291cmNlVXZdO1xuICAgICAgdmFyIGNvc0FscGhhID0gb3J0aHggKiBiYXNlUG9pbnRzW2Rlc3RVdl0gKyBvcnRoeSAqIGJhc2VQb2ludHNbZGVzdFV2ICsgMV07XG5cbiAgICAgIGlmIChjb3NBbHBoYSA8IDApIHtcbiAgICAgICAgb3J0aHggKj0gLTE7XG4gICAgICAgIG9ydGh5ICo9IC0xO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3ggPSBjcDB4ICsgb3J0aHggKiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgY3kgPSBjcDB5ICsgb3J0aHkgKiBjb3JuZXJSYWRpdXM7XG4gICAgICBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RMaW5lQ2lyY2xlKHgsIHksIGNlbnRlclgsIGNlbnRlclksIGN4LCBjeSwgY29ybmVyUmFkaXVzKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvblswXSwgaW50ZXJzZWN0aW9uWzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBsaW5lcy5sZW5ndGggLyA0OyBfaTMrKykge1xuICAgICAgaW50ZXJzZWN0aW9uID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgbGluZXNbX2kzICogNF0sIGxpbmVzW19pMyAqIDQgKyAxXSwgbGluZXNbX2kzICogNCArIDJdLCBsaW5lc1tfaTMgKiA0ICsgM10sIGZhbHNlKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvblswXSwgaW50ZXJzZWN0aW9uWzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICB2YXIgbG93ZXN0SW50ZXJzZWN0aW9uID0gW2ludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV1dO1xuICAgICAgdmFyIGxvd2VzdFNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGxvd2VzdEludGVyc2VjdGlvblswXSAtIHgsIDIpICsgTWF0aC5wb3cobG93ZXN0SW50ZXJzZWN0aW9uWzFdIC0geSwgMik7XG5cbiAgICAgIGZvciAodmFyIF9pNCA9IDE7IF9pNCA8IGludGVyc2VjdGlvbnMubGVuZ3RoIC8gMjsgX2k0KyspIHtcbiAgICAgICAgdmFyIHNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGludGVyc2VjdGlvbnNbX2k0ICogMl0gLSB4LCAyKSArIE1hdGgucG93KGludGVyc2VjdGlvbnNbX2k0ICogMiArIDFdIC0geSwgMik7XG5cbiAgICAgICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBsb3dlc3RTcXVhcmVkRGlzdGFuY2UpIHtcbiAgICAgICAgICBsb3dlc3RJbnRlcnNlY3Rpb25bMF0gPSBpbnRlcnNlY3Rpb25zW19pNCAqIDJdO1xuICAgICAgICAgIGxvd2VzdEludGVyc2VjdGlvblsxXSA9IGludGVyc2VjdGlvbnNbX2k0ICogMiArIDFdO1xuICAgICAgICAgIGxvd2VzdFNxdWFyZWREaXN0YW5jZSA9IHNxdWFyZWREaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG93ZXN0SW50ZXJzZWN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb25zO1xuICB9O1xuICB2YXIgc2hvcnRlbkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0aW9uLCBvZmZzZXQsIGFtb3VudCkge1xuICAgIHZhciBkaXNwID0gW2ludGVyc2VjdGlvblswXSAtIG9mZnNldFswXSwgaW50ZXJzZWN0aW9uWzFdIC0gb2Zmc2V0WzFdXTtcbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5zcXJ0KGRpc3BbMF0gKiBkaXNwWzBdICsgZGlzcFsxXSAqIGRpc3BbMV0pO1xuICAgIHZhciBsZW5SYXRpbyA9IChsZW5ndGggLSBhbW91bnQpIC8gbGVuZ3RoO1xuXG4gICAgaWYgKGxlblJhdGlvIDwgMCkge1xuICAgICAgbGVuUmF0aW8gPSAwLjAwMDAxO1xuICAgIH1cblxuICAgIHJldHVybiBbb2Zmc2V0WzBdICsgbGVuUmF0aW8gKiBkaXNwWzBdLCBvZmZzZXRbMV0gKyBsZW5SYXRpbyAqIGRpc3BbMV1dO1xuICB9O1xuICB2YXIgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlID0gZnVuY3Rpb24gZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKHNpZGVzLCByb3RhdGlvblJhZGlhbnMpIHtcbiAgICB2YXIgcG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyhzaWRlcywgcm90YXRpb25SYWRpYW5zKTtcbiAgICBwb2ludHMgPSBmaXRQb2x5Z29uVG9TcXVhcmUocG9pbnRzKTtcbiAgICByZXR1cm4gcG9pbnRzO1xuICB9O1xuICB2YXIgZml0UG9seWdvblRvU3F1YXJlID0gZnVuY3Rpb24gZml0UG9seWdvblRvU3F1YXJlKHBvaW50cykge1xuICAgIHZhciB4LCB5O1xuICAgIHZhciBzaWRlcyA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIHZhciBtaW5YID0gSW5maW5pdHksXG4gICAgICAgIG1pblkgPSBJbmZpbml0eSxcbiAgICAgICAgbWF4WCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lkZXM7IGkrKykge1xuICAgICAgeCA9IHBvaW50c1syICogaV07XG4gICAgICB5ID0gcG9pbnRzWzIgKiBpICsgMV07XG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgeCk7XG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG4gICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG4gICAgfSAvLyBzdHJldGNoIGZhY3RvcnNcblxuXG4gICAgdmFyIHN4ID0gMiAvIChtYXhYIC0gbWluWCk7XG4gICAgdmFyIHN5ID0gMiAvIChtYXhZIC0gbWluWSk7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBzaWRlczsgX2k1KyspIHtcbiAgICAgIHggPSBwb2ludHNbMiAqIF9pNV0gPSBwb2ludHNbMiAqIF9pNV0gKiBzeDtcbiAgICAgIHkgPSBwb2ludHNbMiAqIF9pNSArIDFdID0gcG9pbnRzWzIgKiBfaTUgKyAxXSAqIHN5O1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHkpO1xuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuICAgIH1cblxuICAgIGlmIChtaW5ZIDwgLTEpIHtcbiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IHNpZGVzOyBfaTYrKykge1xuICAgICAgICB5ID0gcG9pbnRzWzIgKiBfaTYgKyAxXSA9IHBvaW50c1syICogX2k2ICsgMV0gKyAoLTEgLSBtaW5ZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9O1xuICB2YXIgZ2VuZXJhdGVVbml0TmdvblBvaW50cyA9IGZ1bmN0aW9uIGdlbmVyYXRlVW5pdE5nb25Qb2ludHMoc2lkZXMsIHJvdGF0aW9uUmFkaWFucykge1xuICAgIHZhciBpbmNyZW1lbnQgPSAxLjAgLyBzaWRlcyAqIDIgKiBNYXRoLlBJO1xuICAgIHZhciBzdGFydEFuZ2xlID0gc2lkZXMgJSAyID09PSAwID8gTWF0aC5QSSAvIDIuMCArIGluY3JlbWVudCAvIDIuMCA6IE1hdGguUEkgLyAyLjA7XG4gICAgc3RhcnRBbmdsZSArPSByb3RhdGlvblJhZGlhbnM7XG4gICAgdmFyIHBvaW50cyA9IG5ldyBBcnJheShzaWRlcyAqIDIpO1xuICAgIHZhciBjdXJyZW50QW5nbGU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICAgIGN1cnJlbnRBbmdsZSA9IGkgKiBpbmNyZW1lbnQgKyBzdGFydEFuZ2xlO1xuICAgICAgcG9pbnRzWzIgKiBpXSA9IE1hdGguY29zKGN1cnJlbnRBbmdsZSk7IC8vIHhcblxuICAgICAgcG9pbnRzWzIgKiBpICsgMV0gPSBNYXRoLnNpbigtY3VycmVudEFuZ2xlKTsgLy8geVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH07IC8vIFNldCB0aGUgZGVmYXVsdCByYWRpdXMsIHVubGVzcyBoYWxmIG9mIHdpZHRoIG9yIGhlaWdodCBpcyBzbWFsbGVyIHRoYW4gZGVmYXVsdFxuXG4gIHZhciBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyA9IGZ1bmN0aW9uIGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gTWF0aC5taW4od2lkdGggLyA0LCBoZWlnaHQgLyA0LCA4KTtcbiAgfTsgLy8gU2V0IHRoZSBkZWZhdWx0IHJhZGl1c1xuXG4gIHZhciBnZXRSb3VuZFBvbHlnb25SYWRpdXMgPSBmdW5jdGlvbiBnZXRSb3VuZFBvbHlnb25SYWRpdXMod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBNYXRoLm1pbih3aWR0aCAvIDEwLCBoZWlnaHQgLyAxMCwgOCk7XG4gIH07XG4gIHZhciBnZXRDdXRSZWN0YW5nbGVDb3JuZXJMZW5ndGggPSBmdW5jdGlvbiBnZXRDdXRSZWN0YW5nbGVDb3JuZXJMZW5ndGgoKSB7XG4gICAgcmV0dXJuIDg7XG4gIH07XG4gIHZhciBiZXppZXJQdHNUb1F1YWRDb2VmZiA9IGZ1bmN0aW9uIGJlemllclB0c1RvUXVhZENvZWZmKHAwLCBwMSwgcDIpIHtcbiAgICByZXR1cm4gW3AwIC0gMiAqIHAxICsgcDIsIDIgKiAocDEgLSBwMCksIHAwXTtcbiAgfTsgLy8gZ2V0IGN1cnZlIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250cm9sIHBvaW50IHBvc2l0aW9uIG9mZnNldHMgYXMgYSBwZXJjZW50YWdlIG9mIG5vZGUgaGVpZ2h0IC8gd2lkdGhcblxuICB2YXIgZ2V0QmFycmVsQ3VydmVDb25zdGFudHMgPSBmdW5jdGlvbiBnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodE9mZnNldDogTWF0aC5taW4oMTUsIDAuMDUgKiBoZWlnaHQpLFxuICAgICAgd2lkdGhPZmZzZXQ6IE1hdGgubWluKDEwMCwgMC4yNSAqIHdpZHRoKSxcbiAgICAgIGN0cmxQdE9mZnNldFBjdDogMC4wNVxuICAgIH07XG4gIH07XG5cbiAgdmFyIHBhZ2VSYW5rRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgICBkYW1waW5nRmFjdG9yOiAwLjgsXG4gICAgcHJlY2lzaW9uOiAwLjAwMDAwMSxcbiAgICBpdGVyYXRpb25zOiAyMDAsXG4gICAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9KTtcbiAgdmFyIGVsZXNmbiRvID0ge1xuICAgIHBhZ2VSYW5rOiBmdW5jdGlvbiBwYWdlUmFuayhvcHRpb25zKSB7XG4gICAgICB2YXIgX3BhZ2VSYW5rRGVmYXVsdHMgPSBwYWdlUmFua0RlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgICAgIGRhbXBpbmdGYWN0b3IgPSBfcGFnZVJhbmtEZWZhdWx0cy5kYW1waW5nRmFjdG9yLFxuICAgICAgICAgIHByZWNpc2lvbiA9IF9wYWdlUmFua0RlZmF1bHRzLnByZWNpc2lvbixcbiAgICAgICAgICBpdGVyYXRpb25zID0gX3BhZ2VSYW5rRGVmYXVsdHMuaXRlcmF0aW9ucyxcbiAgICAgICAgICB3ZWlnaHQgPSBfcGFnZVJhbmtEZWZhdWx0cy53ZWlnaHQ7XG5cbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG5cbiAgICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcztcblxuICAgICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgICAgdmFyIG51bU5vZGVzU3FkID0gbnVtTm9kZXMgKiBudW1Ob2RlcztcbiAgICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDsgLy8gQ29uc3RydWN0IHRyYW5zcG9zZWQgYWRqYWNlbmN5IG1hdHJpeFxuICAgICAgLy8gRmlyc3QgbGV0cyBoYXZlIGEgemVyb2VkIG1hdHJpeCBvZiB0aGUgcmlnaHQgc2l6ZVxuICAgICAgLy8gV2UnbGwgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBzdW0gb2YgZWFjaCBjb2x1bW5cblxuICAgICAgdmFyIG1hdHJpeCA9IG5ldyBBcnJheShudW1Ob2Rlc1NxZCk7XG4gICAgICB2YXIgY29sdW1uU3VtID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICAgIHZhciBhZGRpdGlvbmFsUHJvYiA9ICgxIC0gZGFtcGluZ0ZhY3RvcikgLyBudW1Ob2RlczsgLy8gQ3JlYXRlIG51bGwgbWF0cml4XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bU5vZGVzOyBqKyspIHtcbiAgICAgICAgICB2YXIgbiA9IGkgKiBudW1Ob2RlcyArIGo7XG4gICAgICAgICAgbWF0cml4W25dID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtblN1bVtpXSA9IDA7XG4gICAgICB9IC8vIE5vdywgcHJvY2VzcyBlZGdlc1xuXG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1FZGdlczsgX2krKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW19pXTtcbiAgICAgICAgdmFyIHNyY0lkID0gZWRnZS5kYXRhKCdzb3VyY2UnKTtcbiAgICAgICAgdmFyIHRndElkID0gZWRnZS5kYXRhKCd0YXJnZXQnKTsgLy8gRG9uJ3QgaW5jbHVkZSBsb29wcyBpbiB0aGUgbWF0cml4XG5cbiAgICAgICAgaWYgKHNyY0lkID09PSB0Z3RJZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHMgPSBub2Rlcy5pbmRleE9mSWQoc3JjSWQpO1xuICAgICAgICB2YXIgdCA9IG5vZGVzLmluZGV4T2ZJZCh0Z3RJZCk7XG4gICAgICAgIHZhciB3ID0gd2VpZ2h0KGVkZ2UpO1xuXG4gICAgICAgIHZhciBfbiA9IHQgKiBudW1Ob2RlcyArIHM7IC8vIFVwZGF0ZSBtYXRyaXhcblxuXG4gICAgICAgIG1hdHJpeFtfbl0gKz0gdzsgLy8gVXBkYXRlIGNvbHVtbiBzdW1cblxuICAgICAgICBjb2x1bW5TdW1bc10gKz0gdztcbiAgICAgIH0gLy8gQWRkIGFkZGl0aW9uYWwgcHJvYmFiaWxpdHkgYmFzZWQgb24gZGFtcGluZyBmYWN0b3JcbiAgICAgIC8vIEFsc28sIHRha2UgaW50byBhY2NvdW50IGNvbHVtbnMgdGhhdCBoYXZlIHN1bSA9IDBcblxuXG4gICAgICB2YXIgcCA9IDEuMCAvIG51bU5vZGVzICsgYWRkaXRpb25hbFByb2I7IC8vIFNob3J0aGFuZFxuICAgICAgLy8gVHJhdmVyc2UgbWF0cml4LCBjb2x1bW4gYnkgY29sdW1uXG5cbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBudW1Ob2RlczsgX2orKykge1xuICAgICAgICBpZiAoY29sdW1uU3VtW19qXSA9PT0gMCkge1xuICAgICAgICAgIC8vIE5vICdsaW5rcycgb3V0IGZyb20gbm9kZSBqdGgsIGFzc3VtZSBlcXVhbCBwcm9iYWJpbGl0eSBmb3IgZWFjaCBwb3NzaWJsZSBub2RlXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbnVtTm9kZXM7IF9pMisrKSB7XG4gICAgICAgICAgICB2YXIgX24yID0gX2kyICogbnVtTm9kZXMgKyBfajtcblxuICAgICAgICAgICAgbWF0cml4W19uMl0gPSBwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb2RlIGp0aCBoYXMgb3V0Z29pbmcgbGluaywgY29tcHV0ZSBub3JtYWxpemVkIHByb2JhYmlsaXRpZXNcbiAgICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBudW1Ob2RlczsgX2kzKyspIHtcbiAgICAgICAgICAgIHZhciBfbjMgPSBfaTMgKiBudW1Ob2RlcyArIF9qO1xuXG4gICAgICAgICAgICBtYXRyaXhbX24zXSA9IG1hdHJpeFtfbjNdIC8gY29sdW1uU3VtW19qXSArIGFkZGl0aW9uYWxQcm9iO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDb21wdXRlIGRvbWluYW50IGVpZ2VudmVjdG9yIHVzaW5nIHBvd2VyIG1ldGhvZFxuXG5cbiAgICAgIHZhciBlaWdlbnZlY3RvciA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgICB2YXIgdGVtcCA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgICB2YXIgcHJldmlvdXM7IC8vIFN0YXJ0IHdpdGggYSB2ZWN0b3Igb2YgYWxsIDEnc1xuICAgICAgLy8gQWxzbywgaW5pdGlhbGl6ZSBhIG51bGwgdmVjdG9yIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBzaG9ydGhhbmRcblxuICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbnVtTm9kZXM7IF9pNCsrKSB7XG4gICAgICAgIGVpZ2VudmVjdG9yW19pNF0gPSAxO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpdGVyID0gMDsgaXRlciA8IGl0ZXJhdGlvbnM7IGl0ZXIrKykge1xuICAgICAgICAvLyBUZW1wIGFycmF5IHdpdGggYWxsIDAnc1xuICAgICAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBudW1Ob2RlczsgX2k1KyspIHtcbiAgICAgICAgICB0ZW1wW19pNV0gPSAwO1xuICAgICAgICB9IC8vIE11bHRpcGx5IG1hdHJpeCB3aXRoIHByZXZpb3VzIHJlc3VsdFxuXG5cbiAgICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbnVtTm9kZXM7IF9pNisrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2oyID0gMDsgX2oyIDwgbnVtTm9kZXM7IF9qMisrKSB7XG4gICAgICAgICAgICB2YXIgX240ID0gX2k2ICogbnVtTm9kZXMgKyBfajI7XG5cbiAgICAgICAgICAgIHRlbXBbX2k2XSArPSBtYXRyaXhbX240XSAqIGVpZ2VudmVjdG9yW19qMl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5QbGFjZVN1bU5vcm1hbGl6ZSh0ZW1wKTtcbiAgICAgICAgcHJldmlvdXMgPSBlaWdlbnZlY3RvcjtcbiAgICAgICAgZWlnZW52ZWN0b3IgPSB0ZW1wO1xuICAgICAgICB0ZW1wID0gcHJldmlvdXM7XG4gICAgICAgIHZhciBkaWZmID0gMDsgLy8gQ29tcHV0ZSBkaWZmZXJlbmNlIChzcXVhcmVkIG1vZHVsZSkgb2YgYm90aCB2ZWN0b3JzXG5cbiAgICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgbnVtTm9kZXM7IF9pNysrKSB7XG4gICAgICAgICAgdmFyIGRlbHRhID0gcHJldmlvdXNbX2k3XSAtIGVpZ2VudmVjdG9yW19pN107XG4gICAgICAgICAgZGlmZiArPSBkZWx0YSAqIGRlbHRhO1xuICAgICAgICB9IC8vIElmIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgc3RvcCBpdGVyYXRpbmdcblxuXG4gICAgICAgIGlmIChkaWZmIDwgcHJlY2lzaW9uKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ29uc3RydWN0IHJlc3VsdFxuXG5cbiAgICAgIHZhciByZXMgPSB7XG4gICAgICAgIHJhbms6IGZ1bmN0aW9uIHJhbmsobm9kZSkge1xuICAgICAgICAgIG5vZGUgPSBjeS5jb2xsZWN0aW9uKG5vZGUpWzBdO1xuICAgICAgICAgIHJldHVybiBlaWdlbnZlY3Rvcltub2Rlcy5pbmRleE9mKG5vZGUpXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSAvLyBwYWdlUmFua1xuXG4gIH07IC8vIGVsZXNmblxuXG4gIHZhciBkZWZhdWx0cyRmID0gZGVmYXVsdHMkZyh7XG4gICAgcm9vdDogbnVsbCxcbiAgICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGRpcmVjdGVkOiBmYWxzZSxcbiAgICBhbHBoYTogMFxuICB9KTtcbiAgdmFyIGVsZXNmbiRuID0ge1xuICAgIGRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkOiBmdW5jdGlvbiBkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdHMkZihvcHRpb25zKTtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKCFvcHRpb25zLmRpcmVjdGVkKSB7XG4gICAgICAgIHZhciBkZWdyZWVzID0ge307XG4gICAgICAgIHZhciBtYXhEZWdyZWUgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07IC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuXG4gICAgICAgICAgb3B0aW9ucy5yb290ID0gbm9kZTtcbiAgICAgICAgICB2YXIgY3VyckRlZ3JlZSA9IHRoaXMuZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKTtcblxuICAgICAgICAgIGlmIChtYXhEZWdyZWUgPCBjdXJyRGVncmVlLmRlZ3JlZSkge1xuICAgICAgICAgICAgbWF4RGVncmVlID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVncmVlc1tub2RlLmlkKCldID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlZ3JlZTogZnVuY3Rpb24gZGVncmVlKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChtYXhEZWdyZWUgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgICAgLy8gZnJvbSBpcyBhIHNlbGVjdG9yIHN0cmluZ1xuICAgICAgICAgICAgICBub2RlID0gY3kuZmlsdGVyKG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVncmVlc1tub2RlLmlkKCldIC8gbWF4RGVncmVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRlZ3JlZXMgPSB7fTtcbiAgICAgICAgdmFyIG91dGRlZ3JlZXMgPSB7fTtcbiAgICAgICAgdmFyIG1heEluZGVncmVlID0gMDtcbiAgICAgICAgdmFyIG1heE91dGRlZ3JlZSA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG51bU5vZGVzOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIF9ub2RlID0gbm9kZXNbX2ldO1xuXG4gICAgICAgICAgdmFyIGlkID0gX25vZGUuaWQoKTsgLy8gYWRkIGN1cnJlbnQgbm9kZSB0byB0aGUgY3VycmVudCBvcHRpb25zIG9iamVjdCBhbmQgY2FsbCBkZWdyZWVDZW50cmFsaXR5XG5cblxuICAgICAgICAgIG9wdGlvbnMucm9vdCA9IF9ub2RlO1xuXG4gICAgICAgICAgdmFyIF9jdXJyRGVncmVlID0gdGhpcy5kZWdyZWVDZW50cmFsaXR5KG9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKG1heEluZGVncmVlIDwgX2N1cnJEZWdyZWUuaW5kZWdyZWUpIG1heEluZGVncmVlID0gX2N1cnJEZWdyZWUuaW5kZWdyZWU7XG4gICAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA8IF9jdXJyRGVncmVlLm91dGRlZ3JlZSkgbWF4T3V0ZGVncmVlID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgICAgIGluZGVncmVlc1tpZF0gPSBfY3VyckRlZ3JlZS5pbmRlZ3JlZTtcbiAgICAgICAgICBvdXRkZWdyZWVzW2lkXSA9IF9jdXJyRGVncmVlLm91dGRlZ3JlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5kZWdyZWU6IGZ1bmN0aW9uIGluZGVncmVlKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChtYXhJbmRlZ3JlZSA9PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyaW5nKG5vZGUpKSB7XG4gICAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgICAgbm9kZSA9IGN5LmZpbHRlcihub2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluZGVncmVlc1tub2RlLmlkKCldIC8gbWF4SW5kZWdyZWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRkZWdyZWU6IGZ1bmN0aW9uIG91dGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgICBpZiAobWF4T3V0ZGVncmVlID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RyaW5nKG5vZGUpKSB7XG4gICAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgICAgbm9kZSA9IGN5LmZpbHRlcihub2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dGRlZ3JlZXNbbm9kZS5pZCgpXSAvIG1heE91dGRlZ3JlZTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZFxuICAgIC8vIEltcGxlbWVudGVkIGZyb20gdGhlIGFsZ29yaXRobSBpbiBPcHNhaGwncyBwYXBlclxuICAgIC8vIFwiTm9kZSBjZW50cmFsaXR5IGluIHdlaWdodGVkIG5ldHdvcmtzOiBHZW5lcmFsaXppbmcgZGVncmVlIGFuZCBzaG9ydGVzdCBwYXRoc1wiXG4gICAgLy8gY2hlY2sgdGhlIGhlYWRpbmcgMiBcIkRlZ3JlZVwiXG4gICAgZGVncmVlQ2VudHJhbGl0eTogZnVuY3Rpb24gZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdHMkZihvcHRpb25zKTtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIHZhciBjYWxsaW5nRWxlcyA9IHRoaXM7XG4gICAgICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgICAgIHJvb3QgPSBfb3B0aW9ucy5yb290LFxuICAgICAgICAgIHdlaWdodCA9IF9vcHRpb25zLndlaWdodCxcbiAgICAgICAgICBkaXJlY3RlZCA9IF9vcHRpb25zLmRpcmVjdGVkLFxuICAgICAgICAgIGFscGhhID0gX29wdGlvbnMuYWxwaGE7XG4gICAgICByb290ID0gY3kuY29sbGVjdGlvbihyb290KVswXTtcblxuICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICB2YXIgY29ubkVkZ2VzID0gcm9vdC5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihjYWxsaW5nRWxlcyk7XG4gICAgICAgIHZhciBrID0gY29ubkVkZ2VzLmxlbmd0aDtcbiAgICAgICAgdmFyIHMgPSAwOyAvLyBOb3csIHN1bSBlZGdlIHdlaWdodHNcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbm5FZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHMgKz0gd2VpZ2h0KGNvbm5FZGdlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlZ3JlZTogTWF0aC5wb3coaywgMSAtIGFscGhhKSAqIE1hdGgucG93KHMsIGFscGhhKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVkZ2VzID0gcm9vdC5jb25uZWN0ZWRFZGdlcygpO1xuICAgICAgICB2YXIgaW5jb21pbmcgPSBlZGdlcy5maWx0ZXIoZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICByZXR1cm4gZWRnZS50YXJnZXQoKS5zYW1lKHJvb3QpICYmIGNhbGxpbmdFbGVzLmhhcyhlZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvdXRnb2luZyA9IGVkZ2VzLmZpbHRlcihmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgIHJldHVybiBlZGdlLnNvdXJjZSgpLnNhbWUocm9vdCkgJiYgY2FsbGluZ0VsZXMuaGFzKGVkZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGtfaW4gPSBpbmNvbWluZy5sZW5ndGg7XG4gICAgICAgIHZhciBrX291dCA9IG91dGdvaW5nLmxlbmd0aDtcbiAgICAgICAgdmFyIHNfaW4gPSAwO1xuICAgICAgICB2YXIgc19vdXQgPSAwOyAvLyBOb3csIHN1bSBpbmNvbWluZyBlZGdlIHdlaWdodHNcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBpbmNvbWluZy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgc19pbiArPSB3ZWlnaHQoaW5jb21pbmdbX2kyXSk7XG4gICAgICAgIH0gLy8gTm93LCBzdW0gb3V0Z29pbmcgZWRnZSB3ZWlnaHRzXG5cblxuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBvdXRnb2luZy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgICAgc19vdXQgKz0gd2VpZ2h0KG91dGdvaW5nW19pM10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbmRlZ3JlZTogTWF0aC5wb3coa19pbiwgMSAtIGFscGhhKSAqIE1hdGgucG93KHNfaW4sIGFscGhhKSxcbiAgICAgICAgICBvdXRkZWdyZWU6IE1hdGgucG93KGtfb3V0LCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19vdXQsIGFscGhhKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gZGVncmVlQ2VudHJhbGl0eVxuXG4gIH07IC8vIGVsZXNmblxuICAvLyBuaWNlLCBzaG9ydCBtYXRoZW1hdGljYWwgYWxpYXNcblxuICBlbGVzZm4kbi5kYyA9IGVsZXNmbiRuLmRlZ3JlZUNlbnRyYWxpdHk7XG4gIGVsZXNmbiRuLmRjbiA9IGVsZXNmbiRuLmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkID0gZWxlc2ZuJG4uZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7XG5cbiAgdmFyIGRlZmF1bHRzJGUgPSBkZWZhdWx0cyRnKHtcbiAgICBoYXJtb25pYzogdHJ1ZSxcbiAgICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodCgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0sXG4gICAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAgIHJvb3Q6IG51bGxcbiAgfSk7XG4gIHZhciBlbGVzZm4kbSA9IHtcbiAgICBjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQob3B0aW9ucykge1xuICAgICAgdmFyIF9kZWZhdWx0cyA9IGRlZmF1bHRzJGUob3B0aW9ucyksXG4gICAgICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMuaGFybW9uaWMsXG4gICAgICAgICAgd2VpZ2h0ID0gX2RlZmF1bHRzLndlaWdodCxcbiAgICAgICAgICBkaXJlY3RlZCA9IF9kZWZhdWx0cy5kaXJlY3RlZDtcblxuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgdmFyIGNsb3NlbmVzc2VzID0ge307XG4gICAgICB2YXIgbWF4Q2xvc2VuZXNzID0gMDtcbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICAgIHZhciBmdyA9IHRoaXMuZmxveWRXYXJzaGFsbCh7XG4gICAgICAgIHdlaWdodDogd2VpZ2h0LFxuICAgICAgICBkaXJlY3RlZDogZGlyZWN0ZWRcbiAgICAgIH0pOyAvLyBDb21wdXRlIGNsb3NlbmVzcyBmb3IgZXZlcnkgbm9kZSBhbmQgZmluZCB0aGUgbWF4aW11bSBjbG9zZW5lc3NcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyckNsb3NlbmVzcyA9IDA7XG4gICAgICAgIHZhciBub2RlX2kgPSBub2Rlc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKGkgIT09IGopIHtcbiAgICAgICAgICAgIHZhciBkID0gZncuZGlzdGFuY2Uobm9kZV9pLCBub2Rlc1tqXSk7XG5cbiAgICAgICAgICAgIGlmIChoYXJtb25pYykge1xuICAgICAgICAgICAgICBjdXJyQ2xvc2VuZXNzICs9IDEgLyBkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSBkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFybW9uaWMpIHtcbiAgICAgICAgICBjdXJyQ2xvc2VuZXNzID0gMSAvIGN1cnJDbG9zZW5lc3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4Q2xvc2VuZXNzIDwgY3VyckNsb3NlbmVzcykge1xuICAgICAgICAgIG1heENsb3NlbmVzcyA9IGN1cnJDbG9zZW5lc3M7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9zZW5lc3Nlc1tub2RlX2kuaWQoKV0gPSBjdXJyQ2xvc2VuZXNzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbG9zZW5lc3M6IGZ1bmN0aW9uIGNsb3NlbmVzcyhub2RlKSB7XG4gICAgICAgICAgaWYgKG1heENsb3NlbmVzcyA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RyaW5nKG5vZGUpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIGlzIGEgc2VsZWN0b3Igc3RyaW5nXG4gICAgICAgICAgICBub2RlID0gY3kuZmlsdGVyKG5vZGUpWzBdLmlkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBub2RlXG4gICAgICAgICAgICBub2RlID0gbm9kZS5pZCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjbG9zZW5lc3Nlc1tub2RlXSAvIG1heENsb3NlbmVzcztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIC8vIEltcGxlbWVudGVkIGZyb20gcHNldWRvY29kZSBmcm9tIHdpa2lwZWRpYVxuICAgIGNsb3NlbmVzc0NlbnRyYWxpdHk6IGZ1bmN0aW9uIGNsb3NlbmVzc0NlbnRyYWxpdHkob3B0aW9ucykge1xuICAgICAgdmFyIF9kZWZhdWx0czIgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgICAgIHJvb3QgPSBfZGVmYXVsdHMyLnJvb3QsXG4gICAgICAgICAgd2VpZ2h0ID0gX2RlZmF1bHRzMi53ZWlnaHQsXG4gICAgICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMyLmRpcmVjdGVkLFxuICAgICAgICAgIGhhcm1vbmljID0gX2RlZmF1bHRzMi5oYXJtb25pYztcblxuICAgICAgcm9vdCA9IHRoaXMuZmlsdGVyKHJvb3QpWzBdOyAvLyB3ZSBuZWVkIGRpc3RhbmNlIGZyb20gdGhpcyBub2RlIHRvIGV2ZXJ5IG90aGVyIG5vZGVcblxuICAgICAgdmFyIGRpamtzdHJhID0gdGhpcy5kaWprc3RyYSh7XG4gICAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0LFxuICAgICAgICBkaXJlY3RlZDogZGlyZWN0ZWRcbiAgICAgIH0pO1xuICAgICAgdmFyIHRvdGFsRGlzdGFuY2UgPSAwO1xuICAgICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuID0gbm9kZXNbaV07XG5cbiAgICAgICAgaWYgKCFuLnNhbWUocm9vdCkpIHtcbiAgICAgICAgICB2YXIgZCA9IGRpamtzdHJhLmRpc3RhbmNlVG8obik7XG5cbiAgICAgICAgICBpZiAoaGFybW9uaWMpIHtcbiAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gMSAvIGQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhcm1vbmljID8gdG90YWxEaXN0YW5jZSA6IDEgLyB0b3RhbERpc3RhbmNlO1xuICAgIH0gLy8gY2xvc2VuZXNzQ2VudHJhbGl0eVxuXG4gIH07IC8vIGVsZXNmblxuICAvLyBuaWNlLCBzaG9ydCBtYXRoZW1hdGljYWwgYWxpYXNcblxuICBlbGVzZm4kbS5jYyA9IGVsZXNmbiRtLmNsb3NlbmVzc0NlbnRyYWxpdHk7XG4gIGVsZXNmbiRtLmNjbiA9IGVsZXNmbiRtLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpc2VkID0gZWxlc2ZuJG0uY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7XG5cbiAgdmFyIGRlZmF1bHRzJGQgPSBkZWZhdWx0cyRnKHtcbiAgICB3ZWlnaHQ6IG51bGwsXG4gICAgZGlyZWN0ZWQ6IGZhbHNlXG4gIH0pO1xuICB2YXIgZWxlc2ZuJGwgPSB7XG4gICAgLy8gSW1wbGVtZW50ZWQgZnJvbSB0aGUgYWxnb3JpdGhtIGluIHRoZSBwYXBlciBcIk9uIFZhcmlhbnRzIG9mIFNob3J0ZXN0LVBhdGggQmV0d2Vlbm5lc3MgQ2VudHJhbGl0eSBhbmQgdGhlaXIgR2VuZXJpYyBDb21wdXRhdGlvblwiIGJ5IFVscmlrIEJyYW5kZXNcbiAgICBiZXR3ZWVubmVzc0NlbnRyYWxpdHk6IGZ1bmN0aW9uIGJldHdlZW5uZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgICB2YXIgX2RlZmF1bHRzID0gZGVmYXVsdHMkZChvcHRpb25zKSxcbiAgICAgICAgICBkaXJlY3RlZCA9IF9kZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgICAgICB3ZWlnaHQgPSBfZGVmYXVsdHMud2VpZ2h0O1xuXG4gICAgICB2YXIgd2VpZ2h0ZWQgPSB3ZWlnaHQgIT0gbnVsbDtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTsgLy8gc3RhcnRpbmdcblxuICAgICAgdmFyIFYgPSB0aGlzLm5vZGVzKCk7XG4gICAgICB2YXIgQSA9IHt9O1xuICAgICAgdmFyIF9DID0ge307XG4gICAgICB2YXIgbWF4ID0gMDtcbiAgICAgIHZhciBDID0ge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbCkge1xuICAgICAgICAgIF9DW2tleV0gPSB2YWw7XG5cbiAgICAgICAgICBpZiAodmFsID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gX0Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgfTsgLy8gQSBjb250YWlucyB0aGUgbmVpZ2hib3Job29kcyBvZiBldmVyeSBub2RlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdiA9IFZbaV07XG4gICAgICAgIHZhciB2aWQgPSB2LmlkKCk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgICAgQVt2aWRdID0gdi5vdXRnb2VycygpLm5vZGVzKCk7IC8vIGdldCBvdXRnb2VycyBvZiBldmVyeSBub2RlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQVt2aWRdID0gdi5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKTsgLy8gZ2V0IG5laWdoYm9ycyBvZiBldmVyeSBub2RlXG4gICAgICAgIH1cblxuICAgICAgICBDLnNldCh2aWQsIDApO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChzKSB7XG4gICAgICAgIHZhciBzaWQgPSBWW3NdLmlkKCk7XG4gICAgICAgIHZhciBTID0gW107IC8vIHN0YWNrXG5cbiAgICAgICAgdmFyIFAgPSB7fTtcbiAgICAgICAgdmFyIGcgPSB7fTtcbiAgICAgICAgdmFyIGQgPSB7fTtcbiAgICAgICAgdmFyIFEgPSBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHJldHVybiBkW2FdIC0gZFtiXTtcbiAgICAgICAgfSk7IC8vIHF1ZXVlXG4gICAgICAgIC8vIGluaXQgZGljdGlvbmFyaWVzXG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IFYubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIF92aWQgPSBWW19pXS5pZCgpO1xuXG4gICAgICAgICAgUFtfdmlkXSA9IFtdO1xuICAgICAgICAgIGdbX3ZpZF0gPSAwO1xuICAgICAgICAgIGRbX3ZpZF0gPSBJbmZpbml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdbc2lkXSA9IDE7IC8vIHNpZ21hXG5cbiAgICAgICAgZFtzaWRdID0gMDsgLy8gZGlzdGFuY2UgdG8gc1xuXG4gICAgICAgIFEucHVzaChzaWQpO1xuXG4gICAgICAgIHdoaWxlICghUS5lbXB0eSgpKSB7XG4gICAgICAgICAgdmFyIF92ID0gUS5wb3AoKTtcblxuICAgICAgICAgIFMucHVzaChfdik7XG5cbiAgICAgICAgICBpZiAod2VpZ2h0ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgQVtfdl0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIHcgPSBBW192XVtqXTtcbiAgICAgICAgICAgICAgdmFyIHZFbGUgPSBjeS5nZXRFbGVtZW50QnlJZChfdik7XG4gICAgICAgICAgICAgIHZhciBlZGdlID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgIGlmICh2RWxlLmVkZ2VzVG8odykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVkZ2UgPSB2RWxlLmVkZ2VzVG8odylbMF07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWRnZSA9IHcuZWRnZXNUbyh2RWxlKVswXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBlZGdlV2VpZ2h0ID0gd2VpZ2h0KGVkZ2UpO1xuICAgICAgICAgICAgICB3ID0gdy5pZCgpO1xuXG4gICAgICAgICAgICAgIGlmIChkW3ddID4gZFtfdl0gKyBlZGdlV2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgZFt3XSA9IGRbX3ZdICsgZWRnZVdlaWdodDtcblxuICAgICAgICAgICAgICAgIGlmIChRLm5vZGVzLmluZGV4T2YodykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAvL2lmIHcgaXMgbm90IGluIFFcbiAgICAgICAgICAgICAgICAgIFEucHVzaCh3KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIGlmIHcgaXMgaW4gUVxuICAgICAgICAgICAgICAgICAgUS51cGRhdGVJdGVtKHcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGdbd10gPSAwO1xuICAgICAgICAgICAgICAgIFBbd10gPSBbXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkW3ddID09IGRbX3ZdICsgZWRnZVdlaWdodCkge1xuICAgICAgICAgICAgICAgIGdbd10gPSBnW3ddICsgZ1tfdl07XG4gICAgICAgICAgICAgICAgUFt3XS5wdXNoKF92KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgQVtfdl0ubGVuZ3RoOyBfaisrKSB7XG4gICAgICAgICAgICAgIHZhciBfdyA9IEFbX3ZdW19qXS5pZCgpO1xuXG4gICAgICAgICAgICAgIGlmIChkW193XSA9PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgIFEucHVzaChfdyk7XG4gICAgICAgICAgICAgICAgZFtfd10gPSBkW192XSArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZFtfd10gPT0gZFtfdl0gKyAxKSB7XG4gICAgICAgICAgICAgICAgZ1tfd10gPSBnW193XSArIGdbX3ZdO1xuXG4gICAgICAgICAgICAgICAgUFtfd10ucHVzaChfdik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZSA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IFYubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIGVbVltfaTJdLmlkKCldID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChTLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgX3cyID0gUy5wb3AoKTtcblxuICAgICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IFBbX3cyXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICAgICAgICB2YXIgX3YyID0gUFtfdzJdW19qMl07XG4gICAgICAgICAgICBlW192Ml0gPSBlW192Ml0gKyBnW192Ml0gLyBnW193Ml0gKiAoMSArIGVbX3cyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF93MiAhPSBWW3NdLmlkKCkpIHtcbiAgICAgICAgICAgIEMuc2V0KF93MiwgQy5nZXQoX3cyKSArIGVbX3cyXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBzID0gMDsgcyA8IFYubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgX2xvb3Aocyk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXQgPSB7XG4gICAgICAgIGJldHdlZW5uZXNzOiBmdW5jdGlvbiBiZXR3ZWVubmVzcyhub2RlKSB7XG4gICAgICAgICAgdmFyIGlkID0gY3kuY29sbGVjdGlvbihub2RlKS5pZCgpO1xuICAgICAgICAgIHJldHVybiBDLmdldChpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGJldHdlZW5uZXNzTm9ybWFsaXplZDogZnVuY3Rpb24gYmV0d2Vlbm5lc3NOb3JtYWxpemVkKG5vZGUpIHtcbiAgICAgICAgICBpZiAobWF4ID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpZCA9IGN5LmNvbGxlY3Rpb24obm9kZSkuaWQoKTtcbiAgICAgICAgICByZXR1cm4gQy5nZXQoaWQpIC8gbWF4O1xuICAgICAgICB9XG4gICAgICB9OyAvLyBhbGlhc1xuXG4gICAgICByZXQuYmV0d2Vlbm5lc3NOb3JtYWxpc2VkID0gcmV0LmJldHdlZW5uZXNzTm9ybWFsaXplZDtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSAvLyBiZXR3ZWVubmVzc0NlbnRyYWxpdHlcblxuICB9OyAvLyBlbGVzZm5cbiAgLy8gbmljZSwgc2hvcnQgbWF0aGVtYXRpY2FsIGFsaWFzXG5cbiAgZWxlc2ZuJGwuYmMgPSBlbGVzZm4kbC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7XG5cbiAgLy8gSW1wbGVtZW50ZWQgYnkgWm9lIFhpIEB6b2V4aSBmb3IgR1NPQyAyMDE2XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbiAgdmFyIGRlZmF1bHRzJGMgPSBkZWZhdWx0cyRnKHtcbiAgICBleHBhbmRGYWN0b3I6IDIsXG4gICAgLy8gYWZmZWN0cyB0aW1lIG9mIGNvbXB1dGF0aW9uIGFuZCBjbHVzdGVyIGdyYW51bGFyaXR5IHRvIHNvbWUgZXh0ZW50OiBNICogTVxuICAgIGluZmxhdGVGYWN0b3I6IDIsXG4gICAgLy8gYWZmZWN0cyBjbHVzdGVyIGdyYW51bGFyaXR5ICh0aGUgZ3JlYXRlciB0aGUgdmFsdWUsIHRoZSBtb3JlIGNsdXN0ZXJzKTogTShpLGopIC8gRShqKVxuICAgIG11bHRGYWN0b3I6IDEsXG4gICAgLy8gb3B0aW9uYWwgc2VsZiBsb29wcyBmb3IgZWFjaCBub2RlLiBVc2UgYSBuZXV0cmFsIHZhbHVlIHRvIGltcHJvdmUgY2x1c3RlciBjb21wdXRhdGlvbnMuXG4gICAgbWF4SXRlcmF0aW9uczogMjAsXG4gICAgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgTUNMIGFsZ29yaXRobSBpbiBhIHNpbmdsZSBydW5cbiAgICBhdHRyaWJ1dGVzOiBbLy8gYXR0cmlidXRlcy9mZWF0dXJlcyB1c2VkIHRvIGdyb3VwIG5vZGVzLCBpZS4gc2ltaWxhcml0eSB2YWx1ZXMgYmV0d2VlbiBub2Rlc1xuICAgIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XVxuICB9KTtcbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gIHZhciBzZXRPcHRpb25zJDMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZGVmYXVsdHMkYyhvcHRpb25zKTtcbiAgfTtcbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG5cbiAgdmFyIGdldFNpbWlsYXJpdHkkMSA9IGZ1bmN0aW9uIGdldFNpbWlsYXJpdHkoZWRnZSwgYXR0cmlidXRlcykge1xuICAgIHZhciB0b3RhbCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsICs9IGF0dHJpYnV0ZXNbaV0oZWRnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsO1xuICB9O1xuXG4gIHZhciBhZGRMb29wcyA9IGZ1bmN0aW9uIGFkZExvb3BzKE0sIG4sIHZhbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBNW2kgKiBuICsgaV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIHZhciBub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoTSwgbikge1xuICAgIHZhciBzdW07XG5cbiAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuOyBjb2wrKykge1xuICAgICAgc3VtID0gMDtcblxuICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbjsgcm93KyspIHtcbiAgICAgICAgc3VtICs9IE1bcm93ICogbiArIGNvbF07XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9yb3cgPSAwOyBfcm93IDwgbjsgX3JvdysrKSB7XG4gICAgICAgIE1bX3JvdyAqIG4gKyBjb2xdID0gTVtfcm93ICogbiArIGNvbF0gLyBzdW07XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUT0RPOiBibG9ja2VkIG1hdHJpeCBtdWx0aXBsaWNhdGlvbj9cblxuXG4gIHZhciBtbXVsdCA9IGZ1bmN0aW9uIG1tdWx0KEEsIEIsIG4pIHtcbiAgICB2YXIgQyA9IG5ldyBBcnJheShuICogbik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgQ1tpICogbiArIGpdID0gMDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG47IF9qKyspIHtcbiAgICAgICAgICBDW2kgKiBuICsgX2pdICs9IEFbaSAqIG4gKyBrXSAqIEJbayAqIG4gKyBfal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQztcbiAgfTtcblxuICB2YXIgZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKE0sIG4sIGV4cGFuZEZhY3RvclxuICAvKiogcG93ZXIgKiovXG4gICkge1xuICAgIHZhciBfTSA9IE0uc2xpY2UoMCk7XG5cbiAgICBmb3IgKHZhciBwID0gMTsgcCA8IGV4cGFuZEZhY3RvcjsgcCsrKSB7XG4gICAgICBNID0gbW11bHQoTSwgX00sIG4pO1xuICAgIH1cblxuICAgIHJldHVybiBNO1xuICB9O1xuXG4gIHZhciBpbmZsYXRlID0gZnVuY3Rpb24gaW5mbGF0ZShNLCBuLCBpbmZsYXRlRmFjdG9yXG4gIC8qKiByICoqL1xuICApIHtcbiAgICB2YXIgX00gPSBuZXcgQXJyYXkobiAqIG4pOyAvLyBNKGksaikgXiBpbmZsYXRlUG93ZXJcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuICogbjsgaSsrKSB7XG4gICAgICBfTVtpXSA9IE1hdGgucG93KE1baV0sIGluZmxhdGVGYWN0b3IpO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZShfTSwgbik7XG4gICAgcmV0dXJuIF9NO1xuICB9O1xuXG4gIHZhciBoYXNDb252ZXJnZWQgPSBmdW5jdGlvbiBoYXNDb252ZXJnZWQoTSwgX00sIG4yLCByb3VuZEZhY3Rvcikge1xuICAgIC8vIENoZWNrIHRoYXQgYm90aCBtYXRyaWNlcyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIChpLGopXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuMjsgaSsrKSB7XG4gICAgICB2YXIgdjEgPSBNYXRoLnJvdW5kKE1baV0gKiBNYXRoLnBvdygxMCwgcm91bmRGYWN0b3IpKSAvIE1hdGgucG93KDEwLCByb3VuZEZhY3Rvcik7IC8vIHRydW5jYXRlIHRvICdyb3VuZEZhY3RvcicgZGVjaW1hbCBwbGFjZXNcblxuICAgICAgdmFyIHYyID0gTWF0aC5yb3VuZChfTVtpXSAqIE1hdGgucG93KDEwLCByb3VuZEZhY3RvcikpIC8gTWF0aC5wb3coMTAsIHJvdW5kRmFjdG9yKTtcblxuICAgICAgaWYgKHYxICE9PSB2Mikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdmFyIGFzc2lnbiQyID0gZnVuY3Rpb24gYXNzaWduKE0sIG4sIG5vZGVzLCBjeSkge1xuICAgIHZhciBjbHVzdGVycyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhciBjbHVzdGVyID0gW107XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIFJvdy13aXNlIGF0dHJhY3RvcnMgYW5kIGVsZW1lbnRzIHRoYXQgdGhleSBhdHRyYWN0IGJlbG9uZyBpbiBzYW1lIGNsdXN0ZXJcbiAgICAgICAgaWYgKE1hdGgucm91bmQoTVtpICogbiArIGpdICogMTAwMCkgLyAxMDAwID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXIucHVzaChub2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNsdXN0ZXIubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNsdXN0ZXJzLnB1c2goY3kuY29sbGVjdGlvbihjbHVzdGVyKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsdXN0ZXJzO1xuICB9O1xuXG4gIHZhciBpc0R1cGxpY2F0ZSA9IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGMxLCBjMikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYzEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghYzJbaV0gfHwgYzFbaV0uaWQoKSAhPT0gYzJbaV0uaWQoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdmFyIHJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzKGNsdXN0ZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbHVzdGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoaSAhPSBqICYmIGlzRHVwbGljYXRlKGNsdXN0ZXJzW2ldLCBjbHVzdGVyc1tqXSkpIHtcbiAgICAgICAgICBjbHVzdGVycy5zcGxpY2UoaiwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIG1hcmtvdkNsdXN0ZXJpbmcgPSBmdW5jdGlvbiBtYXJrb3ZDbHVzdGVyaW5nKG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5lZGdlcygpO1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTsgLy8gU2V0IHBhcmFtZXRlcnMgb2YgYWxnb3JpdGhtOlxuXG4gICAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDMob3B0aW9ucyk7IC8vIE1hcCBlYWNoIG5vZGUgdG8gaXRzIHBvc2l0aW9uIGluIG5vZGUgYXJyYXlcblxuICAgIHZhciBpZDJwb3NpdGlvbiA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWQycG9zaXRpb25bbm9kZXNbaV0uaWQoKV0gPSBpO1xuICAgIH0gLy8gR2VuZXJhdGUgc3RvY2hhc3RpYyBtYXRyaXggTSBmcm9tIGlucHV0IGdyYXBoIEcgKHNob3VsZCBiZSBzeW1tZXRyaWMvdW5kaXJlY3RlZClcblxuXG4gICAgdmFyIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG4yID0gbiAqIG47XG5cbiAgICB2YXIgTSA9IG5ldyBBcnJheShuMiksXG4gICAgICAgIF9NO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG4yOyBfaSsrKSB7XG4gICAgICBNW19pXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCBlZGdlcy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tlXTtcbiAgICAgIHZhciBfaTIgPSBpZDJwb3NpdGlvbltlZGdlLnNvdXJjZSgpLmlkKCldO1xuICAgICAgdmFyIGogPSBpZDJwb3NpdGlvbltlZGdlLnRhcmdldCgpLmlkKCldO1xuICAgICAgdmFyIHNpbSA9IGdldFNpbWlsYXJpdHkkMShlZGdlLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgTVtfaTIgKiBuICsgal0gKz0gc2ltOyAvLyBHIHNob3VsZCBiZSBzeW1tZXRyaWMgYW5kIHVuZGlyZWN0ZWRcblxuICAgICAgTVtqICogbiArIF9pMl0gKz0gc2ltO1xuICAgIH0gLy8gQmVnaW4gTWFya292IGNsdXN0ZXIgYWxnb3JpdGhtXG4gICAgLy8gU3RlcCAxOiBBZGQgc2VsZiBsb29wcyB0byBlYWNoIG5vZGUsIGllLiBhZGQgbXVsdEZhY3RvciB0byBtYXRyaXggZGlhZ29uYWxcblxuXG4gICAgYWRkTG9vcHMoTSwgbiwgb3B0cy5tdWx0RmFjdG9yKTsgLy8gU3RlcCAyOiBNID0gbm9ybWFsaXplKCBNICk7XG5cbiAgICBub3JtYWxpemUoTSwgbik7XG4gICAgdmFyIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcblxuICAgIHdoaWxlIChpc1N0aWxsTW92aW5nICYmIGl0ZXJhdGlvbnMgPCBvcHRzLm1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTsgLy8gU3RlcCAzOlxuXG4gICAgICBfTSA9IGV4cGFuZChNLCBuLCBvcHRzLmV4cGFuZEZhY3Rvcik7IC8vIFN0ZXAgNDpcblxuICAgICAgTSA9IGluZmxhdGUoX00sIG4sIG9wdHMuaW5mbGF0ZUZhY3Rvcik7IC8vIFN0ZXAgNTogY2hlY2sgdG8gc2VlIGlmIH5zdGVhZHkgc3RhdGUgaGFzIGJlZW4gcmVhY2hlZFxuXG4gICAgICBpZiAoIWhhc0NvbnZlcmdlZChNLCBfTSwgbjIsIDQpKSB7XG4gICAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpdGVyYXRpb25zKys7XG4gICAgfSAvLyBCdWlsZCBjbHVzdGVycyBmcm9tIG1hdHJpeFxuXG5cbiAgICB2YXIgY2x1c3RlcnMgPSBhc3NpZ24kMihNLCBuLCBub2RlcywgY3kpOyAvLyBSZW1vdmUgZHVwbGljYXRlIGNsdXN0ZXJzIGR1ZSB0byBzeW1tZXRyeSBvZiBncmFwaCBhbmQgTSBtYXRyaXhcblxuICAgIGNsdXN0ZXJzID0gcmVtb3ZlRHVwbGljYXRlcyhjbHVzdGVycyk7XG4gICAgcmV0dXJuIGNsdXN0ZXJzO1xuICB9O1xuXG4gIHZhciBtYXJrb3ZDbHVzdGVyaW5nJDEgPSB7XG4gICAgbWFya292Q2x1c3RlcmluZzogbWFya292Q2x1c3RlcmluZyxcbiAgICBtY2w6IG1hcmtvdkNsdXN0ZXJpbmdcbiAgfTtcblxuICAvLyBDb21tb24gZGlzdGFuY2UgbWV0cmljcyBmb3IgY2x1c3RlcmluZyBhbGdvcml0aG1zXG5cbiAgdmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xuICB9O1xuXG4gIHZhciBhYnNEaWZmID0gZnVuY3Rpb24gYWJzRGlmZihwLCBxKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHEgLSBwKTtcbiAgfTtcblxuICB2YXIgYWRkQWJzRGlmZiA9IGZ1bmN0aW9uIGFkZEFic0RpZmYodG90YWwsIHAsIHEpIHtcbiAgICByZXR1cm4gdG90YWwgKyBhYnNEaWZmKHAsIHEpO1xuICB9O1xuXG4gIHZhciBhZGRTcXVhcmVkRGlmZiA9IGZ1bmN0aW9uIGFkZFNxdWFyZWREaWZmKHRvdGFsLCBwLCBxKSB7XG4gICAgcmV0dXJuIHRvdGFsICsgTWF0aC5wb3cocSAtIHAsIDIpO1xuICB9O1xuXG4gIHZhciBzcXJ0ID0gZnVuY3Rpb24gc3FydCh4KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh4KTtcbiAgfTtcblxuICB2YXIgbWF4QWJzRGlmZiA9IGZ1bmN0aW9uIG1heEFic0RpZmYoY3VycmVudE1heCwgcCwgcSkge1xuICAgIHJldHVybiBNYXRoLm1heChjdXJyZW50TWF4LCBhYnNEaWZmKHAsIHEpKTtcbiAgfTtcblxuICB2YXIgZ2V0RGlzdGFuY2UgPSBmdW5jdGlvbiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIGluaXQsIHZpc2l0KSB7XG4gICAgdmFyIHBvc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IGlkZW50aXR5O1xuICAgIHZhciByZXQgPSBpbml0O1xuICAgIHZhciBwLCBxO1xuXG4gICAgZm9yICh2YXIgZGltID0gMDsgZGltIDwgbGVuZ3RoOyBkaW0rKykge1xuICAgICAgcCA9IGdldFAoZGltKTtcbiAgICAgIHEgPSBnZXRRKGRpbSk7XG4gICAgICByZXQgPSB2aXNpdChyZXQsIHAsIHEpO1xuICAgIH1cblxuICAgIHJldHVybiBwb3N0KHJldCk7XG4gIH07XG5cbiAgdmFyIGRpc3RhbmNlcyA9IHtcbiAgICBldWNsaWRlYW46IGZ1bmN0aW9uIGV1Y2xpZGVhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICAgIGlmIChsZW5ndGggPj0gMikge1xuICAgICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRTcXVhcmVkRGlmZiwgc3FydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmb3Igc2luZ2xlIGF0dHIgY2FzZSwgbW9yZSBlZmZpY2llbnQgdG8gYXZvaWQgc3FydFxuICAgICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRBYnNEaWZmKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNxdWFyZWRFdWNsaWRlYW46IGZ1bmN0aW9uIHNxdWFyZWRFdWNsaWRlYW4obGVuZ3RoLCBnZXRQLCBnZXRRKSB7XG4gICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRTcXVhcmVkRGlmZik7XG4gICAgfSxcbiAgICBtYW5oYXR0YW46IGZ1bmN0aW9uIG1hbmhhdHRhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZEFic0RpZmYpO1xuICAgIH0sXG4gICAgbWF4OiBmdW5jdGlvbiBtYXgobGVuZ3RoLCBnZXRQLCBnZXRRKSB7XG4gICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAtSW5maW5pdHksIG1heEFic0RpZmYpO1xuICAgIH1cbiAgfTsgLy8gaW4gY2FzZSB0aGUgdXNlciBhY2NpZGVudGFsbHkgZG9lc24ndCB1c2UgY2FtZWwgY2FzZVxuXG4gIGRpc3RhbmNlc1snc3F1YXJlZC1ldWNsaWRlYW4nXSA9IGRpc3RhbmNlc1snc3F1YXJlZEV1Y2xpZGVhbiddO1xuICBkaXN0YW5jZXNbJ3NxdWFyZWRldWNsaWRlYW4nXSA9IGRpc3RhbmNlc1snc3F1YXJlZEV1Y2xpZGVhbiddO1xuICBmdW5jdGlvbiBjbHVzdGVyaW5nRGlzdGFuY2UgKG1ldGhvZCwgbGVuZ3RoLCBnZXRQLCBnZXRRLCBub2RlUCwgbm9kZVEpIHtcbiAgICB2YXIgaW1wbDtcblxuICAgIGlmIChmbiQ2KG1ldGhvZCkpIHtcbiAgICAgIGltcGwgPSBtZXRob2Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltcGwgPSBkaXN0YW5jZXNbbWV0aG9kXSB8fCBkaXN0YW5jZXMuZXVjbGlkZWFuO1xuICAgIH1cblxuICAgIGlmIChsZW5ndGggPT09IDAgJiYgZm4kNihtZXRob2QpKSB7XG4gICAgICByZXR1cm4gaW1wbChub2RlUCwgbm9kZVEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW1wbChsZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlZmF1bHRzJGIgPSBkZWZhdWx0cyRnKHtcbiAgICBrOiAyLFxuICAgIG06IDIsXG4gICAgc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6IDAuMDAwMSxcbiAgICBkaXN0YW5jZTogJ2V1Y2xpZGVhbicsXG4gICAgbWF4SXRlcmF0aW9uczogMTAsXG4gICAgYXR0cmlidXRlczogW10sXG4gICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgIHRlc3RDZW50cm9pZHM6IG51bGxcbiAgfSk7XG5cbiAgdmFyIHNldE9wdGlvbnMkMiA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0cyRiKG9wdGlvbnMpO1xuICB9O1xuICAvKiBlc2xpbnQtZW5hYmxlICovXG5cblxuICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3QodHlwZSwgbm9kZSwgY2VudHJvaWQsIGF0dHJpYnV0ZXMsIG1vZGUpIHtcbiAgICB2YXIgbm9Ob2RlUCA9IG1vZGUgIT09ICdrTWVkb2lkcyc7XG4gICAgdmFyIGdldFAgPSBub05vZGVQID8gZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBjZW50cm9pZFtpXTtcbiAgICB9IDogZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzW2ldKGNlbnRyb2lkKTtcbiAgICB9O1xuXG4gICAgdmFyIGdldFEgPSBmdW5jdGlvbiBnZXRRKGkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzW2ldKG5vZGUpO1xuICAgIH07XG5cbiAgICB2YXIgbm9kZVAgPSBjZW50cm9pZDtcbiAgICB2YXIgbm9kZVEgPSBub2RlO1xuICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2UodHlwZSwgYXR0cmlidXRlcy5sZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG4gIH07XG5cbiAgdmFyIHJhbmRvbUNlbnRyb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbUNlbnRyb2lkcyhub2RlcywgaywgYXR0cmlidXRlcykge1xuICAgIHZhciBuZGltID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgdmFyIG1pbiA9IG5ldyBBcnJheShuZGltKTtcbiAgICB2YXIgbWF4ID0gbmV3IEFycmF5KG5kaW0pO1xuICAgIHZhciBjZW50cm9pZHMgPSBuZXcgQXJyYXkoayk7XG4gICAgdmFyIGNlbnRyb2lkID0gbnVsbDsgLy8gRmluZCBtaW4sIG1heCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIGRpbWVuc2lvblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZGltOyBpKyspIHtcbiAgICAgIG1pbltpXSA9IG5vZGVzLm1pbihhdHRyaWJ1dGVzW2ldKS52YWx1ZTtcbiAgICAgIG1heFtpXSA9IG5vZGVzLm1heChhdHRyaWJ1dGVzW2ldKS52YWx1ZTtcbiAgICB9IC8vIEJ1aWxkIGsgY2VudHJvaWRzLCBlYWNoIHJlcHJlc2VudGVkIGFzIGFuIG4tZGltIGZlYXR1cmUgdmVjdG9yXG5cblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgazsgYysrKSB7XG4gICAgICBjZW50cm9pZCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmRpbTsgX2krKykge1xuICAgICAgICBjZW50cm9pZFtfaV0gPSBNYXRoLnJhbmRvbSgpICogKG1heFtfaV0gLSBtaW5bX2ldKSArIG1pbltfaV07IC8vIHJhbmRvbSBpbml0aWFsIHZhbHVlXG4gICAgICB9XG5cbiAgICAgIGNlbnRyb2lkc1tjXSA9IGNlbnRyb2lkO1xuICAgIH1cblxuICAgIHJldHVybiBjZW50cm9pZHM7XG4gIH07XG5cbiAgdmFyIGNsYXNzaWZ5ID0gZnVuY3Rpb24gY2xhc3NpZnkobm9kZSwgY2VudHJvaWRzLCBkaXN0YW5jZSwgYXR0cmlidXRlcywgdHlwZSkge1xuICAgIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZW50cm9pZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkaXN0ID0gZ2V0RGlzdChkaXN0YW5jZSwgbm9kZSwgY2VudHJvaWRzW2ldLCBhdHRyaWJ1dGVzLCB0eXBlKTtcblxuICAgICAgaWYgKGRpc3QgPCBtaW4pIHtcbiAgICAgICAgbWluID0gZGlzdDtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfTtcblxuICB2YXIgYnVpbGRDbHVzdGVyID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyKGNlbnRyb2lkLCBub2RlcywgYXNzaWdubWVudCkge1xuICAgIHZhciBjbHVzdGVyID0gW107XG4gICAgdmFyIG5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgICAgbm9kZSA9IG5vZGVzW25dO1xuXG4gICAgICBpZiAoYXNzaWdubWVudFtub2RlLmlkKCldID09PSBjZW50cm9pZCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm9kZSBcIiArIG5vZGUuaWQoKSArIFwiIGlzIGFzc29jaWF0ZWQgd2l0aCBtZWRvaWQgIzogXCIgKyBtKTtcbiAgICAgICAgY2x1c3Rlci5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbHVzdGVyO1xuICB9O1xuXG4gIHZhciBoYXZlVmFsdWVzQ29udmVyZ2VkID0gZnVuY3Rpb24gaGF2ZVZhbHVlc0NvbnZlcmdlZCh2MSwgdjIsIHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHYyIC0gdjEpIDw9IHNlbnNpdGl2aXR5VGhyZXNob2xkO1xuICB9O1xuXG4gIHZhciBoYXZlTWF0cmljZXNDb252ZXJnZWQgPSBmdW5jdGlvbiBoYXZlTWF0cmljZXNDb252ZXJnZWQodjEsIHYyLCBzZW5zaXRpdml0eVRocmVzaG9sZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdjEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdjFbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyh2MVtpXVtqXSAtIHYyW2ldW2pdKTtcblxuICAgICAgICBpZiAoZGlmZiA+IHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdmFyIHNlZW5CZWZvcmUgPSBmdW5jdGlvbiBzZWVuQmVmb3JlKG5vZGUsIG1lZG9pZHMsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgaWYgKG5vZGUgPT09IG1lZG9pZHNbaV0pIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICB2YXIgcmFuZG9tTWVkb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbU1lZG9pZHMobm9kZXMsIGspIHtcbiAgICB2YXIgbWVkb2lkcyA9IG5ldyBBcnJheShrKTsgLy8gRm9yIHNtYWxsIGRhdGEgc2V0cywgdGhlIHByb2JhYmlsaXR5IG9mIG1lZG9pZCBjb25mbGljdCBpcyBncmVhdGVyLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGFscmVhZHkgc2VlbiBvciBjaG9zZSB0aGlzIG5vZGUgYmVmb3JlLlxuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCA8IDUwKSB7XG4gICAgICAvLyBSYW5kb21seSBzZWxlY3QgayBtZWRvaWRzIGZyb20gdGhlIG4gbm9kZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07IC8vIElmIHdlJ3ZlIGFscmVhZHkgY2hvc2VuIHRoaXMgbm9kZSB0byBiZSBhIG1lZG9pZCwgZG9uJ3QgY2hvb3NlIGl0IGFnYWluIChmb3Igc21hbGwgZGF0YSBzZXRzKS5cbiAgICAgICAgLy8gSW5zdGVhZCBjaG9vc2UgYSBkaWZmZXJlbnQgcmFuZG9tIG5vZGUuXG5cbiAgICAgICAgd2hpbGUgKHNlZW5CZWZvcmUobm9kZSwgbWVkb2lkcywgaSkpIHtcbiAgICAgICAgICBub2RlID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07XG4gICAgICAgIH1cblxuICAgICAgICBtZWRvaWRzW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVsYXRpdmVseSBsYXJnZSBkYXRhIHNldCwgc28gcHJldHR5IHNhZmUgdG8gbm90IGNoZWNrIGFuZCBqdXN0IHNlbGVjdCByYW5kb20gbm9kZXNcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGs7IF9pMisrKSB7XG4gICAgICAgIG1lZG9pZHNbX2kyXSA9IG5vZGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVzLmxlbmd0aCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZWRvaWRzO1xuICB9O1xuXG4gIHZhciBmaW5kQ29zdCA9IGZ1bmN0aW9uIGZpbmRDb3N0KHBvdGVudGlhbE5ld01lZG9pZCwgY2x1c3RlciwgYXR0cmlidXRlcykge1xuICAgIHZhciBjb3N0ID0gMDtcblxuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgY2x1c3Rlci5sZW5ndGg7IG4rKykge1xuICAgICAgY29zdCArPSBnZXREaXN0KCdtYW5oYXR0YW4nLCBjbHVzdGVyW25dLCBwb3RlbnRpYWxOZXdNZWRvaWQsIGF0dHJpYnV0ZXMsICdrTWVkb2lkcycpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3N0O1xuICB9O1xuXG4gIHZhciBrTWVhbnMgPSBmdW5jdGlvbiBrTWVhbnMob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gICAgdmFyIG5vZGUgPSBudWxsOyAvLyBTZXQgcGFyYW1ldGVycyBvZiBhbGdvcml0aG06ICMgb2YgY2x1c3RlcnMsIGRpc3RhbmNlIG1ldHJpYywgZXRjLlxuXG4gICAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDIob3B0aW9ucyk7IC8vIEJlZ2luIGstbWVhbnMgYWxnb3JpdGhtXG5cbiAgICB2YXIgY2x1c3RlcnMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgICB2YXIgYXNzaWdubWVudCA9IHt9O1xuICAgIHZhciBjZW50cm9pZHM7IC8vIFN0ZXAgMTogSW5pdGlhbGl6ZSBjZW50cm9pZCBwb3NpdGlvbnNcblxuICAgIGlmIChvcHRzLnRlc3RNb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMudGVzdENlbnRyb2lkcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGEgc2VlZGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICAgICAgICBvcHRzLnRlc3RDZW50cm9pZHM7XG4gICAgICAgIGNlbnRyb2lkcyA9IHJhbmRvbUNlbnRyb2lkcyhub2Rlcywgb3B0cy5rLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKG9wdHMudGVzdENlbnRyb2lkcykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNlbnRyb2lkcyA9IG9wdHMudGVzdENlbnRyb2lkcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRyb2lkcyA9IHJhbmRvbUNlbnRyb2lkcyhub2Rlcywgb3B0cy5rLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjZW50cm9pZHMgPSByYW5kb21DZW50cm9pZHMobm9kZXMsIG9wdHMuaywgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuXG4gICAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgICAgLy8gU3RlcCAyOiBBc3NpZ24gbm9kZXMgdG8gdGhlIG5lYXJlc3QgY2VudHJvaWRcbiAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25dOyAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGlzIG5vZGUgYmVsb25ncyB0bzogbm9kZSBpZCA9PiBjbHVzdGVyICNcblxuICAgICAgICBhc3NpZ25tZW50W25vZGUuaWQoKV0gPSBjbGFzc2lmeShub2RlLCBjZW50cm9pZHMsIG9wdHMuZGlzdGFuY2UsIG9wdHMuYXR0cmlidXRlcywgJ2tNZWFucycpO1xuICAgICAgfSAvLyBTdGVwIDM6IEZvciBlYWNoIG9mIHRoZSBrIGNsdXN0ZXJzLCB1cGRhdGUgaXRzIGNlbnRyb2lkXG5cblxuICAgICAgaXNTdGlsbE1vdmluZyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBjID0gMDsgYyA8IG9wdHMuazsgYysrKSB7XG4gICAgICAgIC8vIEdldCBhbGwgbm9kZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBjbHVzdGVyXG4gICAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKGMsIG5vZGVzLCBhc3NpZ25tZW50KTtcblxuICAgICAgICBpZiAoY2x1c3Rlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFVwZGF0ZSBjZW50cm9pZHMgYnkgY2FsY3VsYXRpbmcgYXZnIG9mIGFsbCBub2RlcyB3aXRoaW4gdGhlIGNsdXN0ZXIuXG5cblxuICAgICAgICB2YXIgbmRpbSA9IG9wdHMuYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIHZhciBjZW50cm9pZCA9IGNlbnRyb2lkc1tjXTsgLy8gWyBkaW1fMSwgZGltXzIsIGRpbV8zLCAuLi4gLCBkaW1fbiBdXG5cbiAgICAgICAgdmFyIG5ld0NlbnRyb2lkID0gbmV3IEFycmF5KG5kaW0pO1xuICAgICAgICB2YXIgc3VtID0gbmV3IEFycmF5KG5kaW0pO1xuXG4gICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbmRpbTsgZCsrKSB7XG4gICAgICAgICAgc3VtW2RdID0gMC4wO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbHVzdGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBub2RlID0gY2x1c3RlcltpXTtcbiAgICAgICAgICAgIHN1bVtkXSArPSBvcHRzLmF0dHJpYnV0ZXNbZF0obm9kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Q2VudHJvaWRbZF0gPSBzdW1bZF0gLyBjbHVzdGVyLmxlbmd0aDsgLy8gQ2hlY2sgdG8gc2VlIGlmIGFsZ29yaXRobSBoYXMgY29udmVyZ2VkLCBpLmUuIHdoZW4gY2VudHJvaWRzIG5vIGxvbmdlciBjaGFuZ2VcblxuICAgICAgICAgIGlmICghaGF2ZVZhbHVlc0NvbnZlcmdlZChuZXdDZW50cm9pZFtkXSwgY2VudHJvaWRbZF0sIG9wdHMuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpKSB7XG4gICAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjZW50cm9pZHNbY10gPSBuZXdDZW50cm9pZDtcbiAgICAgICAgY2x1c3RlcnNbY10gPSBjeS5jb2xsZWN0aW9uKGNsdXN0ZXIpO1xuICAgICAgfVxuXG4gICAgICBpdGVyYXRpb25zKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsdXN0ZXJzO1xuICB9O1xuXG4gIHZhciBrTWVkb2lkcyA9IGZ1bmN0aW9uIGtNZWRvaWRzKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBub2RlID0gbnVsbDtcbiAgICB2YXIgb3B0cyA9IHNldE9wdGlvbnMkMihvcHRpb25zKTsgLy8gQmVnaW4gay1tZWRvaWRzIGFsZ29yaXRobVxuXG4gICAgdmFyIGNsdXN0ZXJzID0gbmV3IEFycmF5KG9wdHMuayk7XG4gICAgdmFyIG1lZG9pZHM7XG4gICAgdmFyIGFzc2lnbm1lbnQgPSB7fTtcbiAgICB2YXIgY3VyQ29zdDtcbiAgICB2YXIgbWluQ29zdHMgPSBuZXcgQXJyYXkob3B0cy5rKTsgLy8gbWluaW11bSBjb3N0IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggY2x1c3RlclxuICAgIC8vIFN0ZXAgMTogSW5pdGlhbGl6ZSBrIG1lZG9pZHNcblxuICAgIGlmIChvcHRzLnRlc3RNb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMudGVzdENlbnRyb2lkcyA9PT0gJ251bWJlcicpIDsgZWxzZSBpZiAoX3R5cGVvZihvcHRzLnRlc3RDZW50cm9pZHMpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtZWRvaWRzID0gb3B0cy50ZXN0Q2VudHJvaWRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVkb2lkcyA9IHJhbmRvbU1lZG9pZHMobm9kZXMsIG9wdHMuayk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lZG9pZHMgPSByYW5kb21NZWRvaWRzKG5vZGVzLCBvcHRzLmspO1xuICAgIH1cblxuICAgIHZhciBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDA7XG5cbiAgICB3aGlsZSAoaXNTdGlsbE1vdmluZyAmJiBpdGVyYXRpb25zIDwgb3B0cy5tYXhJdGVyYXRpb25zKSB7XG4gICAgICAvLyBTdGVwIDI6IEFzc2lnbiBub2RlcyB0byB0aGUgbmVhcmVzdCBtZWRvaWRcbiAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25dOyAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGlzIG5vZGUgYmVsb25ncyB0bzogbm9kZSBpZCA9PiBjbHVzdGVyICNcblxuICAgICAgICBhc3NpZ25tZW50W25vZGUuaWQoKV0gPSBjbGFzc2lmeShub2RlLCBtZWRvaWRzLCBvcHRzLmRpc3RhbmNlLCBvcHRzLmF0dHJpYnV0ZXMsICdrTWVkb2lkcycpO1xuICAgICAgfVxuXG4gICAgICBpc1N0aWxsTW92aW5nID0gZmFsc2U7IC8vIFN0ZXAgMzogRm9yIGVhY2ggbWVkb2lkIG0sIGFuZCBmb3IgZWFjaCBub2RlIGFzc29jaWF0ZWQgd2l0aCBtZWRpb2QgbSxcbiAgICAgIC8vIHNlbGVjdCB0aGUgbm9kZSB3aXRoIHRoZSBsb3dlc3QgY29uZmlndXJhdGlvbiBjb3N0IGFzIG5ldyBtZWRvaWQuXG5cbiAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgbWVkb2lkcy5sZW5ndGg7IG0rKykge1xuICAgICAgICAvLyBHZXQgYWxsIG5vZGVzIHRoYXQgYmVsb25nIHRvIHRoaXMgbWVkb2lkXG4gICAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKG0sIG5vZGVzLCBhc3NpZ25tZW50KTtcblxuICAgICAgICBpZiAoY2x1c3Rlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWluQ29zdHNbbV0gPSBmaW5kQ29zdChtZWRvaWRzW21dLCBjbHVzdGVyLCBvcHRzLmF0dHJpYnV0ZXMpOyAvLyBvcmlnaW5hbCBjb3N0XG4gICAgICAgIC8vIFNlbGVjdCBkaWZmZXJlbnQgbWVkb2lkIGlmIGl0cyBjb25maWd1cmF0aW9uIGhhcyB0aGUgbG93ZXN0IGNvc3RcblxuICAgICAgICBmb3IgKHZhciBfbiA9IDA7IF9uIDwgY2x1c3Rlci5sZW5ndGg7IF9uKyspIHtcbiAgICAgICAgICBjdXJDb3N0ID0gZmluZENvc3QoY2x1c3Rlcltfbl0sIGNsdXN0ZXIsIG9wdHMuYXR0cmlidXRlcyk7XG5cbiAgICAgICAgICBpZiAoY3VyQ29zdCA8IG1pbkNvc3RzW21dKSB7XG4gICAgICAgICAgICBtaW5Db3N0c1ttXSA9IGN1ckNvc3Q7XG4gICAgICAgICAgICBtZWRvaWRzW21dID0gY2x1c3Rlcltfbl07XG4gICAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjbHVzdGVyc1ttXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlcik7XG4gICAgICB9XG5cbiAgICAgIGl0ZXJhdGlvbnMrKztcbiAgICB9XG5cbiAgICByZXR1cm4gY2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIHVwZGF0ZUNlbnRyb2lkcyA9IGZ1bmN0aW9uIHVwZGF0ZUNlbnRyb2lkcyhjZW50cm9pZHMsIG5vZGVzLCBVLCB3ZWlnaHQsIG9wdHMpIHtcbiAgICB2YXIgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjtcblxuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2VudHJvaWRzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgIHdlaWdodFtuXVtjXSA9IE1hdGgucG93KFVbbl1bY10sIG9wdHMubSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2MgPSAwOyBfYyA8IGNlbnRyb2lkcy5sZW5ndGg7IF9jKyspIHtcbiAgICAgIGZvciAodmFyIGRpbSA9IDA7IGRpbSA8IG9wdHMuYXR0cmlidXRlcy5sZW5ndGg7IGRpbSsrKSB7XG4gICAgICAgIG51bWVyYXRvciA9IDA7XG4gICAgICAgIGRlbm9taW5hdG9yID0gMDtcblxuICAgICAgICBmb3IgKHZhciBfbjIgPSAwOyBfbjIgPCBub2Rlcy5sZW5ndGg7IF9uMisrKSB7XG4gICAgICAgICAgbnVtZXJhdG9yICs9IHdlaWdodFtfbjJdW19jXSAqIG9wdHMuYXR0cmlidXRlc1tkaW1dKG5vZGVzW19uMl0pO1xuICAgICAgICAgIGRlbm9taW5hdG9yICs9IHdlaWdodFtfbjJdW19jXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNlbnRyb2lkc1tfY11bZGltXSA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgdXBkYXRlTWVtYmVyc2hpcCA9IGZ1bmN0aW9uIHVwZGF0ZU1lbWJlcnNoaXAoVSwgX1UsIGNlbnRyb2lkcywgbm9kZXMsIG9wdHMpIHtcbiAgICAvLyBTYXZlIHByZXZpb3VzIHN0ZXBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IFUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9VW2ldID0gVVtpXS5zbGljZSgpO1xuICAgIH1cblxuICAgIHZhciBzdW0sIG51bWVyYXRvciwgZGVub21pbmF0b3I7XG4gICAgdmFyIHBvdyA9IDIgLyAob3B0cy5tIC0gMSk7XG5cbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNlbnRyb2lkcy5sZW5ndGg7IGMrKykge1xuICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgICAgICBzdW0gPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2VudHJvaWRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgLy8gYWdhaW5zdCBhbGwgb3RoZXIgY2VudHJvaWRzXG4gICAgICAgICAgbnVtZXJhdG9yID0gZ2V0RGlzdChvcHRzLmRpc3RhbmNlLCBub2Rlc1tuXSwgY2VudHJvaWRzW2NdLCBvcHRzLmF0dHJpYnV0ZXMsICdjbWVhbnMnKTtcbiAgICAgICAgICBkZW5vbWluYXRvciA9IGdldERpc3Qob3B0cy5kaXN0YW5jZSwgbm9kZXNbbl0sIGNlbnRyb2lkc1trXSwgb3B0cy5hdHRyaWJ1dGVzLCAnY21lYW5zJyk7XG4gICAgICAgICAgc3VtICs9IE1hdGgucG93KG51bWVyYXRvciAvIGRlbm9taW5hdG9yLCBwb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgVVtuXVtjXSA9IDEgLyBzdW07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBhc3NpZ24kMSA9IGZ1bmN0aW9uIGFzc2lnbihub2RlcywgVSwgb3B0cywgY3kpIHtcbiAgICB2YXIgY2x1c3RlcnMgPSBuZXcgQXJyYXkob3B0cy5rKTtcblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2x1c3RlcnMubGVuZ3RoOyBjKyspIHtcbiAgICAgIGNsdXN0ZXJzW2NdID0gW107XG4gICAgfVxuXG4gICAgdmFyIG1heDtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IFUubGVuZ3RoOyBuKyspIHtcbiAgICAgIC8vIGZvciBlYWNoIG5vZGUgKFUgaXMgTiB4IEMgbWF0cml4KVxuICAgICAgbWF4ID0gLUluZmluaXR5O1xuICAgICAgaW5kZXggPSAtMTsgLy8gRGV0ZXJtaW5lIHdoaWNoIGNsdXN0ZXIgdGhlIG5vZGUgaXMgbW9zdCBsaWtlbHkgdG8gYmVsb25nIGluXG5cbiAgICAgIGZvciAodmFyIF9jMiA9IDA7IF9jMiA8IFVbMF0ubGVuZ3RoOyBfYzIrKykge1xuICAgICAgICBpZiAoVVtuXVtfYzJdID4gbWF4KSB7XG4gICAgICAgICAgbWF4ID0gVVtuXVtfYzJdO1xuICAgICAgICAgIGluZGV4ID0gX2MyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsdXN0ZXJzW2luZGV4XS5wdXNoKG5vZGVzW25dKTtcbiAgICB9IC8vIFR1cm4gZXZlcnkgYXJyYXkgaW50byBhIGNvbGxlY3Rpb24gb2Ygbm9kZXNcblxuXG4gICAgZm9yICh2YXIgX2MzID0gMDsgX2MzIDwgY2x1c3RlcnMubGVuZ3RoOyBfYzMrKykge1xuICAgICAgY2x1c3RlcnNbX2MzXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3RlcnNbX2MzXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsdXN0ZXJzO1xuICB9O1xuXG4gIHZhciBmdXp6eUNNZWFucyA9IGZ1bmN0aW9uIGZ1enp5Q01lYW5zKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBvcHRzID0gc2V0T3B0aW9ucyQyKG9wdGlvbnMpOyAvLyBCZWdpbiBmdXp6eSBjLW1lYW5zIGFsZ29yaXRobVxuXG4gICAgdmFyIGNsdXN0ZXJzO1xuICAgIHZhciBjZW50cm9pZHM7XG4gICAgdmFyIFU7XG5cbiAgICB2YXIgX1U7XG5cbiAgICB2YXIgd2VpZ2h0OyAvLyBTdGVwIDE6IEluaXRpYWxpemUgbGV0aWFibGVzLlxuXG4gICAgX1UgPSBuZXcgQXJyYXkobm9kZXMubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIE4geCBDIG1hdHJpeFxuICAgICAgX1VbaV0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgICB9XG5cbiAgICBVID0gbmV3IEFycmF5KG5vZGVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2Rlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAvLyBOIHggQyBtYXRyaXhcbiAgICAgIFVbX2kzXSA9IG5ldyBBcnJheShvcHRzLmspO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG5vZGVzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgIHZhciB0b3RhbCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0cy5rOyBqKyspIHtcbiAgICAgICAgVVtfaTRdW2pdID0gTWF0aC5yYW5kb20oKTtcbiAgICAgICAgdG90YWwgKz0gVVtfaTRdW2pdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgb3B0cy5rOyBfaisrKSB7XG4gICAgICAgIFVbX2k0XVtfal0gPSBVW19pNF1bX2pdIC8gdG90YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2VudHJvaWRzID0gbmV3IEFycmF5KG9wdHMuayk7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBvcHRzLms7IF9pNSsrKSB7XG4gICAgICBjZW50cm9pZHNbX2k1XSA9IG5ldyBBcnJheShvcHRzLmF0dHJpYnV0ZXMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBuZXcgQXJyYXkobm9kZXMubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG5vZGVzLmxlbmd0aDsgX2k2KyspIHtcbiAgICAgIC8vIE4geCBDIG1hdHJpeFxuICAgICAgd2VpZ2h0W19pNl0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgICB9IC8vIGVuZCBpbml0IEZDTVxuXG5cbiAgICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuXG4gICAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgICAgaXNTdGlsbE1vdmluZyA9IGZhbHNlOyAvLyBTdGVwIDI6IENhbGN1bGF0ZSB0aGUgY2VudHJvaWRzIGZvciBlYWNoIHN0ZXAuXG5cbiAgICAgIHVwZGF0ZUNlbnRyb2lkcyhjZW50cm9pZHMsIG5vZGVzLCBVLCB3ZWlnaHQsIG9wdHMpOyAvLyBTdGVwIDM6IFVwZGF0ZSB0aGUgcGFydGl0aW9uIG1hdHJpeCBVLlxuXG4gICAgICB1cGRhdGVNZW1iZXJzaGlwKFUsIF9VLCBjZW50cm9pZHMsIG5vZGVzLCBvcHRzKTsgLy8gU3RlcCA0OiBDaGVjayBmb3IgY29udmVyZ2VuY2UuXG5cbiAgICAgIGlmICghaGF2ZU1hdHJpY2VzQ29udmVyZ2VkKFUsIF9VLCBvcHRzLnNlbnNpdGl2aXR5VGhyZXNob2xkKSkge1xuICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaXRlcmF0aW9ucysrO1xuICAgIH0gLy8gQXNzaWduIG5vZGVzIHRvIGNsdXN0ZXJzIHdpdGggaGlnaGVzdCBwcm9iYWJpbGl0eS5cblxuXG4gICAgY2x1c3RlcnMgPSBhc3NpZ24kMShub2RlcywgVSwgb3B0cywgY3kpO1xuICAgIHJldHVybiB7XG4gICAgICBjbHVzdGVyczogY2x1c3RlcnMsXG4gICAgICBkZWdyZWVPZk1lbWJlcnNoaXA6IFVcbiAgICB9O1xuICB9O1xuXG4gIHZhciBrQ2x1c3RlcmluZyA9IHtcbiAgICBrTWVhbnM6IGtNZWFucyxcbiAgICBrTWVkb2lkczoga01lZG9pZHMsXG4gICAgZnV6enlDTWVhbnM6IGZ1enp5Q01lYW5zLFxuICAgIGZjbTogZnV6enlDTWVhbnNcbiAgfTtcblxuICAvLyBJbXBsZW1lbnRlZCBieSBab2UgWGkgQHpvZXhpIGZvciBHU09DIDIwMTZcbiAgdmFyIGRlZmF1bHRzJGEgPSBkZWZhdWx0cyRnKHtcbiAgICBkaXN0YW5jZTogJ2V1Y2xpZGVhbicsXG4gICAgLy8gZGlzdGFuY2UgbWV0cmljIHRvIGNvbXBhcmUgbm9kZXNcbiAgICBsaW5rYWdlOiAnbWluJyxcbiAgICAvLyBsaW5rYWdlIGNyaXRlcmlvbiA6IGhvdyB0byBkZXRlcm1pbmUgdGhlIGRpc3RhbmNlIGJldHdlZW4gY2x1c3RlcnMgb2Ygbm9kZXNcbiAgICBtb2RlOiAndGhyZXNob2xkJyxcbiAgICAvLyBtb2RlOid0aHJlc2hvbGQnID0+IGNsdXN0ZXJzIG11c3QgYmUgdGhyZXNob2xkIGRpc3RhbmNlIGFwYXJ0XG4gICAgdGhyZXNob2xkOiBJbmZpbml0eSxcbiAgICAvLyB0aGUgZGlzdGFuY2UgdGhyZXNob2xkXG4gICAgLy8gbW9kZTonZGVuZHJvZ3JhbScgPT4gdGhlIG5vZGVzIGFyZSBvcmdhbmlzZWQgYXMgbGVhdmVzIGluIGEgdHJlZSAoc2libGluZ3MgYXJlIGNsb3NlKSwgbWVyZ2luZyBtYWtlcyBjbHVzdGVyc1xuICAgIGFkZERlbmRyb2dyYW06IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBkZW5kcm9ncmFtIHRvIHRoZSBncmFwaCBmb3Igdml6XG4gICAgZGVuZHJvZ3JhbURlcHRoOiAwLFxuICAgIC8vIGRlcHRoIGF0IHdoaWNoIGRlbmRyb2dyYW0gYnJhbmNoZXMgYXJlIG1lcmdlZCBpbnRvIHRoZSByZXR1cm5lZCBjbHVzdGVyc1xuICAgIGF0dHJpYnV0ZXM6IFtdIC8vIGFycmF5IG9mIGF0dHIgZnVuY3Rpb25zXG5cbiAgfSk7XG4gIHZhciBsaW5rYWdlQWxpYXNlcyA9IHtcbiAgICAnc2luZ2xlJzogJ21pbicsXG4gICAgJ2NvbXBsZXRlJzogJ21heCdcbiAgfTtcblxuICB2YXIgc2V0T3B0aW9ucyQxID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIG9wdHMgPSBkZWZhdWx0cyRhKG9wdGlvbnMpO1xuICAgIHZhciBwcmVmZXJyZWRBbGlhcyA9IGxpbmthZ2VBbGlhc2VzW29wdHMubGlua2FnZV07XG5cbiAgICBpZiAocHJlZmVycmVkQWxpYXMgIT0gbnVsbCkge1xuICAgICAgb3B0cy5saW5rYWdlID0gcHJlZmVycmVkQWxpYXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgdmFyIG1lcmdlQ2xvc2VzdCA9IGZ1bmN0aW9uIG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKSB7XG4gICAgLy8gRmluZCB0d28gY2xvc2VzdCBjbHVzdGVycyBmcm9tIGNhY2hlZCBtaW5zXG4gICAgdmFyIG1pbktleSA9IDA7XG4gICAgdmFyIG1pbiA9IEluZmluaXR5O1xuICAgIHZhciBkaXN0O1xuICAgIHZhciBhdHRycyA9IG9wdHMuYXR0cmlidXRlcztcblxuICAgIHZhciBnZXREaXN0ID0gZnVuY3Rpb24gZ2V0RGlzdChuMSwgbjIpIHtcbiAgICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2Uob3B0cy5kaXN0YW5jZSwgYXR0cnMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gYXR0cnNbaV0objEpO1xuICAgICAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzW2ldKG4yKTtcbiAgICAgIH0sIG4xLCBuMik7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBjbHVzdGVyc1tpXS5rZXk7XG4gICAgICB2YXIgX2Rpc3QgPSBkaXN0c1trZXldW21pbnNba2V5XV07XG5cbiAgICAgIGlmIChfZGlzdCA8IG1pbikge1xuICAgICAgICBtaW5LZXkgPSBrZXk7XG4gICAgICAgIG1pbiA9IF9kaXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRzLm1vZGUgPT09ICd0aHJlc2hvbGQnICYmIG1pbiA+PSBvcHRzLnRocmVzaG9sZCB8fCBvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJyAmJiBjbHVzdGVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYzEgPSBpbmRleFttaW5LZXldO1xuICAgIHZhciBjMiA9IGluZGV4W21pbnNbbWluS2V5XV07XG4gICAgdmFyIG1lcmdlZDsgLy8gTWVyZ2UgdHdvIGNsb3Nlc3QgY2x1c3RlcnNcblxuICAgIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykge1xuICAgICAgbWVyZ2VkID0ge1xuICAgICAgICBsZWZ0OiBjMSxcbiAgICAgICAgcmlnaHQ6IGMyLFxuICAgICAgICBrZXk6IGMxLmtleVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkID0ge1xuICAgICAgICB2YWx1ZTogYzEudmFsdWUuY29uY2F0KGMyLnZhbHVlKSxcbiAgICAgICAga2V5OiBjMS5rZXlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2x1c3RlcnNbYzEuaW5kZXhdID0gbWVyZ2VkO1xuICAgIGNsdXN0ZXJzLnNwbGljZShjMi5pbmRleCwgMSk7XG4gICAgaW5kZXhbYzEua2V5XSA9IG1lcmdlZDsgLy8gVXBkYXRlIGRpc3RhbmNlcyB3aXRoIG5ldyBtZXJnZWQgY2x1c3RlclxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGNsdXN0ZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGN1ciA9IGNsdXN0ZXJzW19pXTtcblxuICAgICAgaWYgKGMxLmtleSA9PT0gY3VyLmtleSkge1xuICAgICAgICBkaXN0ID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMubGlua2FnZSA9PT0gJ21pbicpIHtcbiAgICAgICAgZGlzdCA9IGRpc3RzW2MxLmtleV1bY3VyLmtleV07XG5cbiAgICAgICAgaWYgKGRpc3RzW2MxLmtleV1bY3VyLmtleV0gPiBkaXN0c1tjMi5rZXldW2N1ci5rZXldKSB7XG4gICAgICAgICAgZGlzdCA9IGRpc3RzW2MyLmtleV1bY3VyLmtleV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3B0cy5saW5rYWdlID09PSAnbWF4Jykge1xuICAgICAgICBkaXN0ID0gZGlzdHNbYzEua2V5XVtjdXIua2V5XTtcblxuICAgICAgICBpZiAoZGlzdHNbYzEua2V5XVtjdXIua2V5XSA8IGRpc3RzW2MyLmtleV1bY3VyLmtleV0pIHtcbiAgICAgICAgICBkaXN0ID0gZGlzdHNbYzIua2V5XVtjdXIua2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvcHRzLmxpbmthZ2UgPT09ICdtZWFuJykge1xuICAgICAgICBkaXN0ID0gKGRpc3RzW2MxLmtleV1bY3VyLmtleV0gKiBjMS5zaXplICsgZGlzdHNbYzIua2V5XVtjdXIua2V5XSAqIGMyLnNpemUpIC8gKGMxLnNpemUgKyBjMi5zaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykgZGlzdCA9IGdldERpc3QoY3VyLnZhbHVlLCBjMS52YWx1ZSk7ZWxzZSBkaXN0ID0gZ2V0RGlzdChjdXIudmFsdWVbMF0sIGMxLnZhbHVlWzBdKTtcbiAgICAgIH1cblxuICAgICAgZGlzdHNbYzEua2V5XVtjdXIua2V5XSA9IGRpc3RzW2N1ci5rZXldW2MxLmtleV0gPSBkaXN0OyAvLyBkaXN0YW5jZSBtYXRyaXggaXMgc3ltbWV0cmljXG4gICAgfSAvLyBVcGRhdGUgY2FjaGVkIG1pbnNcblxuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgY2x1c3RlcnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgdmFyIGtleTEgPSBjbHVzdGVyc1tfaTJdLmtleTtcblxuICAgICAgaWYgKG1pbnNba2V5MV0gPT09IGMxLmtleSB8fCBtaW5zW2tleTFdID09PSBjMi5rZXkpIHtcbiAgICAgICAgdmFyIF9taW4gPSBrZXkxO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2x1c3RlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIga2V5MiA9IGNsdXN0ZXJzW2pdLmtleTtcblxuICAgICAgICAgIGlmIChkaXN0c1trZXkxXVtrZXkyXSA8IGRpc3RzW2tleTFdW19taW5dKSB7XG4gICAgICAgICAgICBfbWluID0ga2V5MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtaW5zW2tleTFdID0gX21pbjtcbiAgICAgIH1cblxuICAgICAgY2x1c3RlcnNbX2kyXS5pbmRleCA9IF9pMjtcbiAgICB9IC8vIENsZWFuIHVwIG1ldGEgZGF0YSB1c2VkIGZvciBjbHVzdGVyaW5nXG5cblxuICAgIGMxLmtleSA9IGMyLmtleSA9IGMxLmluZGV4ID0gYzIuaW5kZXggPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHZhciBnZXRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIGdldEFsbENoaWxkcmVuKHJvb3QsIGFyciwgY3kpIHtcbiAgICBpZiAoIXJvb3QpIHJldHVybjtcblxuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICBhcnIucHVzaChyb290LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJvb3QubGVmdCkgZ2V0QWxsQ2hpbGRyZW4ocm9vdC5sZWZ0LCBhcnIpO1xuICAgICAgaWYgKHJvb3QucmlnaHQpIGdldEFsbENoaWxkcmVuKHJvb3QucmlnaHQsIGFycik7XG4gICAgfVxuICB9O1xuXG4gIHZhciBidWlsZERlbmRyb2dyYW0gPSBmdW5jdGlvbiBidWlsZERlbmRyb2dyYW0ocm9vdCwgY3kpIHtcbiAgICBpZiAoIXJvb3QpIHJldHVybiAnJztcblxuICAgIGlmIChyb290LmxlZnQgJiYgcm9vdC5yaWdodCkge1xuICAgICAgdmFyIGxlZnRTdHIgPSBidWlsZERlbmRyb2dyYW0ocm9vdC5sZWZ0LCBjeSk7XG4gICAgICB2YXIgcmlnaHRTdHIgPSBidWlsZERlbmRyb2dyYW0ocm9vdC5yaWdodCwgY3kpO1xuICAgICAgdmFyIG5vZGUgPSBjeS5hZGQoe1xuICAgICAgICBncm91cDogJ25vZGVzJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGlkOiBsZWZ0U3RyICsgJywnICsgcmlnaHRTdHJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjeS5hZGQoe1xuICAgICAgICBncm91cDogJ2VkZ2VzJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHNvdXJjZTogbGVmdFN0cixcbiAgICAgICAgICB0YXJnZXQ6IG5vZGUuaWQoKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGN5LmFkZCh7XG4gICAgICAgIGdyb3VwOiAnZWRnZXMnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc291cmNlOiByaWdodFN0cixcbiAgICAgICAgICB0YXJnZXQ6IG5vZGUuaWQoKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBub2RlLmlkKCk7XG4gICAgfSBlbHNlIGlmIChyb290LnZhbHVlKSB7XG4gICAgICByZXR1cm4gcm9vdC52YWx1ZS5pZCgpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgYnVpbGRDbHVzdGVyc0Zyb21UcmVlID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QsIGssIGN5KSB7XG4gICAgaWYgKCFyb290KSByZXR1cm4gW107XG4gICAgdmFyIGxlZnQgPSBbXSxcbiAgICAgICAgcmlnaHQgPSBbXSxcbiAgICAgICAgbGVhdmVzID0gW107XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgLy8gZG9uJ3QgY3V0IHRyZWUsIHNpbXBseSByZXR1cm4gYWxsIG5vZGVzIGFzIDEgc2luZ2xlIGNsdXN0ZXJcbiAgICAgIGlmIChyb290LmxlZnQpIGdldEFsbENoaWxkcmVuKHJvb3QubGVmdCwgbGVmdCk7XG4gICAgICBpZiAocm9vdC5yaWdodCkgZ2V0QWxsQ2hpbGRyZW4ocm9vdC5yaWdodCwgcmlnaHQpO1xuICAgICAgbGVhdmVzID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgcmV0dXJuIFtjeS5jb2xsZWN0aW9uKGxlYXZlcyldO1xuICAgIH0gZWxzZSBpZiAoayA9PT0gMSkge1xuICAgICAgLy8gY3V0IGF0IHJvb3RcbiAgICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICAgIC8vIGxlYWYgbm9kZVxuICAgICAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24ocm9vdC52YWx1ZSldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJvb3QubGVmdCkgZ2V0QWxsQ2hpbGRyZW4ocm9vdC5sZWZ0LCBsZWZ0KTtcbiAgICAgICAgaWYgKHJvb3QucmlnaHQpIGdldEFsbENoaWxkcmVuKHJvb3QucmlnaHQsIHJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIFtjeS5jb2xsZWN0aW9uKGxlZnQpLCBjeS5jb2xsZWN0aW9uKHJpZ2h0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbY3kuY29sbGVjdGlvbihyb290LnZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocm9vdC5sZWZ0KSBsZWZ0ID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QubGVmdCwgayAtIDEsIGN5KTtcbiAgICAgICAgaWYgKHJvb3QucmlnaHQpIHJpZ2h0ID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QucmlnaHQsIGsgLSAxLCBjeSk7XG4gICAgICAgIHJldHVybiBsZWZ0LmNvbmNhdChyaWdodCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKiBlc2xpbnQtZW5hYmxlICovXG5cblxuICB2YXIgaGllcmFyY2hpY2FsQ2x1c3RlcmluZyA9IGZ1bmN0aW9uIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmcob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7IC8vIFNldCBwYXJhbWV0ZXJzIG9mIGFsZ29yaXRobTogbGlua2FnZSB0eXBlLCBkaXN0YW5jZSBtZXRyaWMsIGV0Yy5cblxuICAgIHZhciBvcHRzID0gc2V0T3B0aW9ucyQxKG9wdGlvbnMpO1xuICAgIHZhciBhdHRycyA9IG9wdHMuYXR0cmlidXRlcztcblxuICAgIHZhciBnZXREaXN0ID0gZnVuY3Rpb24gZ2V0RGlzdChuMSwgbjIpIHtcbiAgICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2Uob3B0cy5kaXN0YW5jZSwgYXR0cnMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gYXR0cnNbaV0objEpO1xuICAgICAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzW2ldKG4yKTtcbiAgICAgIH0sIG4xLCBuMik7XG4gICAgfTsgLy8gQmVnaW4gaGllcmFyY2hpY2FsIGFsZ29yaXRobVxuXG5cbiAgICB2YXIgY2x1c3RlcnMgPSBbXTtcbiAgICB2YXIgZGlzdHMgPSBbXTsgLy8gZGlzdGFuY2VzIGJldHdlZW4gZWFjaCBwYWlyIG9mIGNsdXN0ZXJzXG5cbiAgICB2YXIgbWlucyA9IFtdOyAvLyBjbG9zZXN0IGNsdXN0ZXIgZm9yIGVhY2ggY2x1c3RlclxuXG4gICAgdmFyIGluZGV4ID0gW107IC8vIGhhc2ggb2YgYWxsIGNsdXN0ZXJzIGJ5IGtleVxuICAgIC8vIEluIGFnZ2xvbWVyYXRpdmUgKGJvdHRvbS11cCkgY2x1c3RlcmluZywgZWFjaCBub2RlIHN0YXJ0cyBhcyBpdHMgb3duIGNsdXN0ZXJcblxuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgIHZhciBjbHVzdGVyID0ge1xuICAgICAgICB2YWx1ZTogb3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScgPyBub2Rlc1tuXSA6IFtub2Rlc1tuXV0sXG4gICAgICAgIGtleTogbixcbiAgICAgICAgaW5kZXg6IG5cbiAgICAgIH07XG4gICAgICBjbHVzdGVyc1tuXSA9IGNsdXN0ZXI7XG4gICAgICBpbmRleFtuXSA9IGNsdXN0ZXI7XG4gICAgICBkaXN0c1tuXSA9IFtdO1xuICAgICAgbWluc1tuXSA9IDA7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gZWFjaCBwYWlyIG9mIGNsdXN0ZXJzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDw9IGk7IGorKykge1xuICAgICAgICB2YXIgZGlzdCA9IHZvaWQgMDtcblxuICAgICAgICBpZiAob3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScpIHtcbiAgICAgICAgICAvLyBtb2RlcyBzdG9yZSBjbHVzdGVyIHZhbHVlcyBkaWZmZXJlbnRseVxuICAgICAgICAgIGRpc3QgPSBpID09PSBqID8gSW5maW5pdHkgOiBnZXREaXN0KGNsdXN0ZXJzW2ldLnZhbHVlLCBjbHVzdGVyc1tqXS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzdCA9IGkgPT09IGogPyBJbmZpbml0eSA6IGdldERpc3QoY2x1c3RlcnNbaV0udmFsdWVbMF0sIGNsdXN0ZXJzW2pdLnZhbHVlWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3RzW2ldW2pdID0gZGlzdDtcbiAgICAgICAgZGlzdHNbal1baV0gPSBkaXN0O1xuXG4gICAgICAgIGlmIChkaXN0IDwgZGlzdHNbaV1bbWluc1tpXV0pIHtcbiAgICAgICAgICBtaW5zW2ldID0gajsgLy8gQ2FjaGUgbWluczogY2xvc2VzdCBjbHVzdGVyIHRvIGNsdXN0ZXIgaSBpcyBjbHVzdGVyIGpcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gRmluZCB0aGUgY2xvc2VzdCBwYWlyIG9mIGNsdXN0ZXJzIGFuZCBtZXJnZSB0aGVtIGludG8gYSBzaW5nbGUgY2x1c3Rlci5cbiAgICAvLyBVcGRhdGUgZGlzdGFuY2VzIGJldHdlZW4gbmV3IGNsdXN0ZXIgYW5kIGVhY2ggb2YgdGhlIG9sZCBjbHVzdGVycywgYW5kIGxvb3AgdW50aWwgdGhyZXNob2xkIHJlYWNoZWQuXG5cblxuICAgIHZhciBtZXJnZWQgPSBtZXJnZUNsb3Nlc3QoY2x1c3RlcnMsIGluZGV4LCBkaXN0cywgbWlucywgb3B0cyk7XG5cbiAgICB3aGlsZSAobWVyZ2VkKSB7XG4gICAgICBtZXJnZWQgPSBtZXJnZUNsb3Nlc3QoY2x1c3RlcnMsIGluZGV4LCBkaXN0cywgbWlucywgb3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHJldENsdXN0ZXJzOyAvLyBEZW5kcm9ncmFtIG1vZGUgYnVpbGRzIHRoZSBoaWVyYXJjaHkgYW5kIGFkZHMgaW50ZXJtZWRpYXJ5IG5vZGVzICsgZWRnZXNcbiAgICAvLyBpbiBhZGRpdGlvbiB0byByZXR1cm5pbmcgdGhlIGNsdXN0ZXJzLlxuXG4gICAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSB7XG4gICAgICByZXRDbHVzdGVycyA9IGJ1aWxkQ2x1c3RlcnNGcm9tVHJlZShjbHVzdGVyc1swXSwgb3B0cy5kZW5kcm9ncmFtRGVwdGgsIGN5KTtcbiAgICAgIGlmIChvcHRzLmFkZERlbmRyb2dyYW0pIGJ1aWxkRGVuZHJvZ3JhbShjbHVzdGVyc1swXSwgY3kpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIG1vZGUgc2ltcGx5IHJldHVybnMgdGhlIGNsdXN0ZXJzXG4gICAgICByZXRDbHVzdGVycyA9IG5ldyBBcnJheShjbHVzdGVycy5sZW5ndGgpO1xuICAgICAgY2x1c3RlcnMuZm9yRWFjaChmdW5jdGlvbiAoY2x1c3RlciwgaSkge1xuICAgICAgICAvLyBDbGVhbiB1cCBtZXRhIGRhdGEgdXNlZCBmb3IgY2x1c3RlcmluZ1xuICAgICAgICBjbHVzdGVyLmtleSA9IGNsdXN0ZXIuaW5kZXggPSBudWxsO1xuICAgICAgICByZXRDbHVzdGVyc1tpXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlci52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0Q2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmckMSA9IHtcbiAgICBoaWVyYXJjaGljYWxDbHVzdGVyaW5nOiBoaWVyYXJjaGljYWxDbHVzdGVyaW5nLFxuICAgIGhjYTogaGllcmFyY2hpY2FsQ2x1c3RlcmluZ1xuICB9O1xuXG4gIC8vIEltcGxlbWVudGVkIGJ5IFpvZSBYaSBAem9leGkgZm9yIEdTT0MgMjAxNlxuICB2YXIgZGVmYXVsdHMkOSA9IGRlZmF1bHRzJGcoe1xuICAgIGRpc3RhbmNlOiAnZXVjbGlkZWFuJyxcbiAgICAvLyBkaXN0YW5jZSBtZXRyaWMgdG8gY29tcGFyZSBhdHRyaWJ1dGVzIGJldHdlZW4gdHdvIG5vZGVzXG4gICAgcHJlZmVyZW5jZTogJ21lZGlhbicsXG4gICAgLy8gc3VpdGFiaWxpdHkgb2YgYSBkYXRhIHBvaW50IHRvIHNlcnZlIGFzIGFuIGV4ZW1wbGFyXG4gICAgZGFtcGluZzogMC44LFxuICAgIC8vIGRhbXBpbmcgZmFjdG9yIGJldHdlZW4gWzAuNSwgMSlcbiAgICBtYXhJdGVyYXRpb25zOiAxMDAwLFxuICAgIC8vIG1heCBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBydW5cbiAgICBtaW5JdGVyYXRpb25zOiAxMDAsXG4gICAgLy8gbWluIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJ1biBpbiBvcmRlciBmb3IgY2x1c3RlcmluZyB0byBzdG9wXG4gICAgYXR0cmlidXRlczogWy8vIGZ1bmN0aW9ucyB0byBxdWFudGlmeSB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGFueSB0d28gcG9pbnRzXG4gICAgICAvLyBlLmcuIG5vZGUgPT4gbm9kZS5kYXRhKCd3ZWlnaHQnKVxuICAgIF1cbiAgfSk7XG5cbiAgdmFyIHNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgZG1wID0gb3B0aW9ucy5kYW1waW5nO1xuICAgIHZhciBwcmVmID0gb3B0aW9ucy5wcmVmZXJlbmNlO1xuXG4gICAgaWYgKCEoMC41IDw9IGRtcCAmJiBkbXAgPCAxKSkge1xuICAgICAgZXJyb3IoXCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6IFwiLmNvbmNhdChkbXApKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsaWRQcmVmcyA9IFsnbWVkaWFuJywgJ21lYW4nLCAnbWluJywgJ21heCddO1xuXG4gICAgaWYgKCEodmFsaWRQcmVmcy5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdiA9PT0gcHJlZjtcbiAgICB9KSB8fCBudW1iZXIkMShwcmVmKSkpIHtcbiAgICAgIGVycm9yKFwiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbXCIuY29uY2F0KHZhbGlkUHJlZnMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBcIidcIi5jb25jYXQocCwgXCInXCIpO1xuICAgICAgfSkuam9pbignLCAnKSwgXCJdIG9yIGEgbnVtYmVyLiAgR290OiBcIikuY29uY2F0KHByZWYpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdHMkOShvcHRpb25zKTtcbiAgfTtcbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG5cbiAgdmFyIGdldFNpbWlsYXJpdHkgPSBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KHR5cGUsIG4xLCBuMiwgYXR0cmlidXRlcykge1xuICAgIHZhciBhdHRyID0gZnVuY3Rpb24gYXR0cihuLCBpKSB7XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1tpXShuKTtcbiAgICB9OyAvLyBuYiBuZWdhdGl2ZSBiZWNhdXNlIHNpbWlsYXJpdHkgc2hvdWxkIGhhdmUgYW4gaW52ZXJzZSByZWxhdGlvbnNoaXAgdG8gZGlzdGFuY2VcblxuXG4gICAgcmV0dXJuIC1jbHVzdGVyaW5nRGlzdGFuY2UodHlwZSwgYXR0cmlidXRlcy5sZW5ndGgsIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cihuMSwgaSk7XG4gICAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBhdHRyKG4yLCBpKTtcbiAgICB9LCBuMSwgbjIpO1xuICB9O1xuXG4gIHZhciBnZXRQcmVmZXJlbmNlID0gZnVuY3Rpb24gZ2V0UHJlZmVyZW5jZShTLCBwcmVmZXJlbmNlKSB7XG4gICAgLy8gbGFyZ2VyIHByZWZlcmVuY2UgPSBncmVhdGVyICMgb2YgY2x1c3RlcnNcbiAgICB2YXIgcCA9IG51bGw7XG5cbiAgICBpZiAocHJlZmVyZW5jZSA9PT0gJ21lZGlhbicpIHtcbiAgICAgIHAgPSBtZWRpYW4oUyk7XG4gICAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWVhbicpIHtcbiAgICAgIHAgPSBtZWFuKFMpO1xuICAgIH0gZWxzZSBpZiAocHJlZmVyZW5jZSA9PT0gJ21pbicpIHtcbiAgICAgIHAgPSBtaW4oUyk7XG4gICAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWF4Jykge1xuICAgICAgcCA9IG1heChTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VzdG9tIHByZWZlcmVuY2UgbnVtYmVyLCBhcyBzZXQgYnkgdXNlclxuICAgICAgcCA9IHByZWZlcmVuY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHA7XG4gIH07XG5cbiAgdmFyIGZpbmRFeGVtcGxhcnMgPSBmdW5jdGlvbiBmaW5kRXhlbXBsYXJzKG4sIFIsIEEpIHtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGlmIChSW2kgKiBuICsgaV0gKyBBW2kgKiBuICsgaV0gPiAwKSB7XG4gICAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfTtcblxuICB2YXIgYXNzaWduQ2x1c3RlcnMgPSBmdW5jdGlvbiBhc3NpZ25DbHVzdGVycyhuLCBTLCBleGVtcGxhcnMpIHtcbiAgICB2YXIgY2x1c3RlcnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG5cbiAgICAgIGZvciAodmFyIGVpID0gMDsgZWkgPCBleGVtcGxhcnMubGVuZ3RoOyBlaSsrKSB7XG4gICAgICAgIHZhciBlID0gZXhlbXBsYXJzW2VpXTtcblxuICAgICAgICBpZiAoU1tpICogbiArIGVdID4gbWF4KSB7XG4gICAgICAgICAgaW5kZXggPSBlO1xuICAgICAgICAgIG1heCA9IFNbaSAqIG4gKyBlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNsdXN0ZXJzLnB1c2goaW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9laSA9IDA7IF9laSA8IGV4ZW1wbGFycy5sZW5ndGg7IF9laSsrKSB7XG4gICAgICBjbHVzdGVyc1tleGVtcGxhcnNbX2VpXV0gPSBleGVtcGxhcnNbX2VpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihuLCBTLCBleGVtcGxhcnMpIHtcbiAgICB2YXIgY2x1c3RlcnMgPSBhc3NpZ25DbHVzdGVycyhuLCBTLCBleGVtcGxhcnMpO1xuXG4gICAgZm9yICh2YXIgZWkgPSAwOyBlaSA8IGV4ZW1wbGFycy5sZW5ndGg7IGVpKyspIHtcbiAgICAgIHZhciBpaSA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNsdXN0ZXJzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgIGlmIChjbHVzdGVyc1tjXSA9PT0gZXhlbXBsYXJzW2VpXSkge1xuICAgICAgICAgIGlpLnB1c2goYyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG1heEkgPSAtMTtcbiAgICAgIHZhciBtYXhTdW0gPSAtSW5maW5pdHk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpaS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHN1bSArPSBTW2lpW2pdICogbiArIGlpW2ldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdW0gPiBtYXhTdW0pIHtcbiAgICAgICAgICBtYXhJID0gaTtcbiAgICAgICAgICBtYXhTdW0gPSBzdW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXhlbXBsYXJzW2VpXSA9IGlpW21heEldO1xuICAgIH1cblxuICAgIGNsdXN0ZXJzID0gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKTtcbiAgICByZXR1cm4gY2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIGFmZmluaXR5UHJvcGFnYXRpb24gPSBmdW5jdGlvbiBhZmZpbml0eVByb3BhZ2F0aW9uKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBvcHRzID0gc2V0T3B0aW9ucyhvcHRpb25zKTsgLy8gTWFwIGVhY2ggbm9kZSB0byBpdHMgcG9zaXRpb24gaW4gbm9kZSBhcnJheVxuXG4gICAgdmFyIGlkMnBvc2l0aW9uID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZDJwb3NpdGlvbltub2Rlc1tpXS5pZCgpXSA9IGk7XG4gICAgfSAvLyBCZWdpbiBhZmZpbml0eSBwcm9wYWdhdGlvbiBhbGdvcml0aG1cblxuXG4gICAgdmFyIG47IC8vIG51bWJlciBvZiBkYXRhIHBvaW50c1xuXG4gICAgdmFyIG4yOyAvLyBzaXplIG9mIG1hdHJpY2VzXG5cbiAgICB2YXIgUzsgLy8gc2ltaWxhcml0eSBtYXRyaXggKDFEIGFycmF5KVxuXG4gICAgdmFyIHA7IC8vIHByZWZlcmVuY2Uvc3VpdGFiaWxpdHkgb2YgYSBkYXRhIHBvaW50IHRvIHNlcnZlIGFzIGFuIGV4ZW1wbGFyXG5cbiAgICB2YXIgUjsgLy8gcmVzcG9uc2liaWxpdHkgbWF0cml4ICgxRCBhcnJheSlcblxuICAgIHZhciBBOyAvLyBhdmFpbGFiaWxpdHkgbWF0cml4ICgxRCBhcnJheSlcblxuICAgIG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgbjIgPSBuICogbjsgLy8gSW5pdGlhbGl6ZSBhbmQgYnVpbGQgUyBzaW1pbGFyaXR5IG1hdHJpeFxuXG4gICAgUyA9IG5ldyBBcnJheShuMik7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbjI7IF9pKyspIHtcbiAgICAgIFNbX2ldID0gLUluZmluaXR5OyAvLyBmb3IgY2FzZXMgd2hlcmUgdHdvIGRhdGEgcG9pbnRzIHNob3VsZG4ndCBiZSBsaW5rZWQgdG9nZXRoZXJcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuOyBfaTIrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKF9pMiAhPT0gaikge1xuICAgICAgICAgIFNbX2kyICogbiArIGpdID0gZ2V0U2ltaWxhcml0eShvcHRzLmRpc3RhbmNlLCBub2Rlc1tfaTJdLCBub2Rlc1tqXSwgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUGxhY2UgcHJlZmVyZW5jZXMgb24gdGhlIGRpYWdvbmFsIG9mIFNcblxuXG4gICAgcCA9IGdldFByZWZlcmVuY2UoUywgb3B0cy5wcmVmZXJlbmNlKTtcblxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IG47IF9pMysrKSB7XG4gICAgICBTW19pMyAqIG4gKyBfaTNdID0gcDtcbiAgICB9IC8vIEluaXRpYWxpemUgUiByZXNwb25zaWJpbGl0eSBtYXRyaXhcblxuXG4gICAgUiA9IG5ldyBBcnJheShuMik7XG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBuMjsgX2k0KyspIHtcbiAgICAgIFJbX2k0XSA9IDAuMDtcbiAgICB9IC8vIEluaXRpYWxpemUgQSBhdmFpbGFiaWxpdHkgbWF0cml4XG5cblxuICAgIEEgPSBuZXcgQXJyYXkobjIpO1xuXG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbjI7IF9pNSsrKSB7XG4gICAgICBBW19pNV0gPSAwLjA7XG4gICAgfVxuXG4gICAgdmFyIG9sZCA9IG5ldyBBcnJheShuKTtcbiAgICB2YXIgUnAgPSBuZXcgQXJyYXkobik7XG4gICAgdmFyIHNlID0gbmV3IEFycmF5KG4pO1xuXG4gICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbjsgX2k2KyspIHtcbiAgICAgIG9sZFtfaTZdID0gMC4wO1xuICAgICAgUnBbX2k2XSA9IDAuMDtcbiAgICAgIHNlW19pNl0gPSAwO1xuICAgIH1cblxuICAgIHZhciBlID0gbmV3IEFycmF5KG4gKiBvcHRzLm1pbkl0ZXJhdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgZS5sZW5ndGg7IF9pNysrKSB7XG4gICAgICBlW19pN10gPSAwO1xuICAgIH1cblxuICAgIHZhciBpdGVyO1xuXG4gICAgZm9yIChpdGVyID0gMDsgaXRlciA8IG9wdHMubWF4SXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgICAvLyBtYWluIGFsZ29yaXRobWljIGxvb3BcbiAgICAgIC8vIFVwZGF0ZSBSIHJlc3BvbnNpYmlsaXR5IG1hdHJpeFxuICAgICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgbjsgX2k4KyspIHtcbiAgICAgICAgdmFyIG1heCA9IC1JbmZpbml0eSxcbiAgICAgICAgICAgIG1heDIgPSAtSW5maW5pdHksXG4gICAgICAgICAgICBtYXhJID0gLTEsXG4gICAgICAgICAgICBBUyA9IDAuMDtcblxuICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgbjsgX2orKykge1xuICAgICAgICAgIG9sZFtfal0gPSBSW19pOCAqIG4gKyBfal07XG4gICAgICAgICAgQVMgPSBBW19pOCAqIG4gKyBfal0gKyBTW19pOCAqIG4gKyBfal07XG5cbiAgICAgICAgICBpZiAoQVMgPj0gbWF4KSB7XG4gICAgICAgICAgICBtYXgyID0gbWF4O1xuICAgICAgICAgICAgbWF4ID0gQVM7XG4gICAgICAgICAgICBtYXhJID0gX2o7XG4gICAgICAgICAgfSBlbHNlIGlmIChBUyA+IG1heDIpIHtcbiAgICAgICAgICAgIG1heDIgPSBBUztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfajIgPSAwOyBfajIgPCBuOyBfajIrKykge1xuICAgICAgICAgIFJbX2k4ICogbiArIF9qMl0gPSAoMSAtIG9wdHMuZGFtcGluZykgKiAoU1tfaTggKiBuICsgX2oyXSAtIG1heCkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2oyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJbX2k4ICogbiArIG1heEldID0gKDEgLSBvcHRzLmRhbXBpbmcpICogKFNbX2k4ICogbiArIG1heEldIC0gbWF4MikgKyBvcHRzLmRhbXBpbmcgKiBvbGRbbWF4SV07XG4gICAgICB9IC8vIFVwZGF0ZSBBIGF2YWlsYWJpbGl0eSBtYXRyaXhcblxuXG4gICAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCBuOyBfaTkrKykge1xuICAgICAgICB2YXIgc3VtID0gMDtcblxuICAgICAgICBmb3IgKHZhciBfajMgPSAwOyBfajMgPCBuOyBfajMrKykge1xuICAgICAgICAgIG9sZFtfajNdID0gQVtfajMgKiBuICsgX2k5XTtcbiAgICAgICAgICBScFtfajNdID0gTWF0aC5tYXgoMCwgUltfajMgKiBuICsgX2k5XSk7XG4gICAgICAgICAgc3VtICs9IFJwW19qM107XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gLT0gUnBbX2k5XTtcbiAgICAgICAgUnBbX2k5XSA9IFJbX2k5ICogbiArIF9pOV07XG4gICAgICAgIHN1bSArPSBScFtfaTldO1xuXG4gICAgICAgIGZvciAodmFyIF9qNCA9IDA7IF9qNCA8IG47IF9qNCsrKSB7XG4gICAgICAgICAgQVtfajQgKiBuICsgX2k5XSA9ICgxIC0gb3B0cy5kYW1waW5nKSAqIE1hdGgubWluKDAsIHN1bSAtIFJwW19qNF0pICsgb3B0cy5kYW1waW5nICogb2xkW19qNF07XG4gICAgICAgIH1cblxuICAgICAgICBBW19pOSAqIG4gKyBfaTldID0gKDEgLSBvcHRzLmRhbXBpbmcpICogKHN1bSAtIFJwW19pOV0pICsgb3B0cy5kYW1waW5nICogb2xkW19pOV07XG4gICAgICB9IC8vIENoZWNrIGZvciBjb252ZXJnZW5jZVxuXG5cbiAgICAgIHZhciBLID0gMDtcblxuICAgICAgZm9yICh2YXIgX2kxMCA9IDA7IF9pMTAgPCBuOyBfaTEwKyspIHtcbiAgICAgICAgdmFyIEUgPSBBW19pMTAgKiBuICsgX2kxMF0gKyBSW19pMTAgKiBuICsgX2kxMF0gPiAwID8gMSA6IDA7XG4gICAgICAgIGVbaXRlciAlIG9wdHMubWluSXRlcmF0aW9ucyAqIG4gKyBfaTEwXSA9IEU7XG4gICAgICAgIEsgKz0gRTtcbiAgICAgIH1cblxuICAgICAgaWYgKEsgPiAwICYmIChpdGVyID49IG9wdHMubWluSXRlcmF0aW9ucyAtIDEgfHwgaXRlciA9PSBvcHRzLm1heEl0ZXJhdGlvbnMgLSAxKSkge1xuICAgICAgICB2YXIgX3N1bSA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgX2kxMSA9IDA7IF9pMTEgPCBuOyBfaTExKyspIHtcbiAgICAgICAgICBzZVtfaTExXSA9IDA7XG5cbiAgICAgICAgICBmb3IgKHZhciBfajUgPSAwOyBfajUgPCBvcHRzLm1pbkl0ZXJhdGlvbnM7IF9qNSsrKSB7XG4gICAgICAgICAgICBzZVtfaTExXSArPSBlW19qNSAqIG4gKyBfaTExXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VbX2kxMV0gPT09IDAgfHwgc2VbX2kxMV0gPT09IG9wdHMubWluSXRlcmF0aW9ucykge1xuICAgICAgICAgICAgX3N1bSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfc3VtID09PSBuKSB7XG4gICAgICAgICAgLy8gdGhlbiB3ZSBoYXZlIGNvbnZlcmdlbmNlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElkZW50aWZ5IGV4ZW1wbGFycyAoY2x1c3RlciBjZW50ZXJzKVxuXG5cbiAgICB2YXIgZXhlbXBsYXJzSW5kaWNlcyA9IGZpbmRFeGVtcGxhcnMobiwgUiwgQSk7IC8vIEFzc2lnbiBub2RlcyB0byBjbHVzdGVyc1xuXG4gICAgdmFyIGNsdXN0ZXJJbmRpY2VzID0gYXNzaWduKG4sIFMsIGV4ZW1wbGFyc0luZGljZXMpO1xuICAgIHZhciBjbHVzdGVycyA9IHt9O1xuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBleGVtcGxhcnNJbmRpY2VzLmxlbmd0aDsgYysrKSB7XG4gICAgICBjbHVzdGVyc1tleGVtcGxhcnNJbmRpY2VzW2NdXSA9IFtdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pMTIgPSAwOyBfaTEyIDwgbm9kZXMubGVuZ3RoOyBfaTEyKyspIHtcbiAgICAgIHZhciBwb3MgPSBpZDJwb3NpdGlvbltub2Rlc1tfaTEyXS5pZCgpXTtcblxuICAgICAgdmFyIGNsdXN0ZXJJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW3Bvc107XG5cbiAgICAgIGlmIChjbHVzdGVySW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyB0aGUgbm9kZSBtYXkgaGF2ZSBub3QgYmVlbiBhc3NpZ25lZCBhIGNsdXN0ZXIgaWYgbm8gdmFsaWQgYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZFxuICAgICAgICBjbHVzdGVyc1tjbHVzdGVySW5kZXhdLnB1c2gobm9kZXNbX2kxMl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXRDbHVzdGVycyA9IG5ldyBBcnJheShleGVtcGxhcnNJbmRpY2VzLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBfYyA9IDA7IF9jIDwgZXhlbXBsYXJzSW5kaWNlcy5sZW5ndGg7IF9jKyspIHtcbiAgICAgIHJldENsdXN0ZXJzW19jXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3RlcnNbZXhlbXBsYXJzSW5kaWNlc1tfY11dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0Q2x1c3RlcnM7XG4gIH07XG5cbiAgdmFyIGFmZmluaXR5UHJvcGFnYXRpb24kMSA9IHtcbiAgICBhZmZpbml0eVByb3BhZ2F0aW9uOiBhZmZpbml0eVByb3BhZ2F0aW9uLFxuICAgIGFwOiBhZmZpbml0eVByb3BhZ2F0aW9uXG4gIH07XG5cbiAgdmFyIGhpZXJob2x6ZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICAgIHJvb3Q6IHVuZGVmaW5lZCxcbiAgICBkaXJlY3RlZDogZmFsc2VcbiAgfSk7XG4gIHZhciBlbGVzZm4kayA9IHtcbiAgICBoaWVyaG9semVyOiBmdW5jdGlvbiBoaWVyaG9semVyKG9wdGlvbnMpIHtcbiAgICAgIGlmICghcGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgcm9vdDogYXJnc1swXSxcbiAgICAgICAgICBkaXJlY3RlZDogYXJnc1sxXVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgX2hpZXJob2x6ZXJEZWZhdWx0cyA9IGhpZXJob2x6ZXJEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgICAgICByb290ID0gX2hpZXJob2x6ZXJEZWZhdWx0cy5yb290LFxuICAgICAgICAgIGRpcmVjdGVkID0gX2hpZXJob2x6ZXJEZWZhdWx0cy5kaXJlY3RlZDtcblxuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgICAgdmFyIGRmbGFnID0gZmFsc2U7XG4gICAgICB2YXIgb2RkSW47XG4gICAgICB2YXIgb2RkT3V0O1xuICAgICAgdmFyIHN0YXJ0VmVydGV4O1xuICAgICAgaWYgKHJvb3QpIHN0YXJ0VmVydGV4ID0gc3RyaW5nKHJvb3QpID8gdGhpcy5maWx0ZXIocm9vdClbMF0uaWQoKSA6IHJvb3RbMF0uaWQoKTtcbiAgICAgIHZhciBub2RlcyA9IHt9O1xuICAgICAgdmFyIGVkZ2VzID0ge307XG5cbiAgICAgIGlmIChkaXJlY3RlZCkge1xuICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuXG4gICAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgICAgdmFyIGluZCA9IGVsZS5pbmRlZ3JlZSh0cnVlKTtcbiAgICAgICAgICAgIHZhciBvdXRkID0gZWxlLm91dGRlZ3JlZSh0cnVlKTtcbiAgICAgICAgICAgIHZhciBkMSA9IGluZCAtIG91dGQ7XG4gICAgICAgICAgICB2YXIgZDIgPSBvdXRkIC0gaW5kO1xuXG4gICAgICAgICAgICBpZiAoZDEgPT0gMSkge1xuICAgICAgICAgICAgICBpZiAob2RkSW4pIGRmbGFnID0gdHJ1ZTtlbHNlIG9kZEluID0gaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGQyID09IDEpIHtcbiAgICAgICAgICAgICAgaWYgKG9kZE91dCkgZGZsYWcgPSB0cnVlO2Vsc2Ugb2RkT3V0ID0gaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGQyID4gMSB8fCBkMSA+IDEpIHtcbiAgICAgICAgICAgICAgZGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2Rlc1tpZF0gPSBbXTtcbiAgICAgICAgICAgIGVsZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUuaXNFZGdlKCkpIG5vZGVzW2lkXS5wdXNoKGUuaWQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWRnZXNbaWRdID0gW3VuZGVmaW5lZCwgZWxlLnRhcmdldCgpLmlkKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuXG4gICAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgICAgdmFyIGQgPSBlbGUuZGVncmVlKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoZCAlIDIpIHtcbiAgICAgICAgICAgICAgaWYgKCFvZGRJbikgb2RkSW4gPSBpZDtlbHNlIGlmICghb2RkT3V0KSBvZGRPdXQgPSBpZDtlbHNlIGRmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZXNbaWRdID0gW107XG4gICAgICAgICAgICBlbGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2Rlc1tpZF0ucHVzaChlLmlkKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVkZ2VzW2lkXSA9IFtlbGUuc291cmNlKCkuaWQoKSwgZWxlLnRhcmdldCgpLmlkKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgICAgdHJhaWw6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIGlmIChkZmxhZykgcmV0dXJuIHJlc3VsdDtlbHNlIGlmIChvZGRPdXQgJiYgb2RkSW4pIHtcbiAgICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0VmVydGV4ICYmIG9kZE91dCAhPSBzdGFydFZlcnRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGFydFZlcnRleCA9IG9kZE91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RhcnRWZXJ0ZXggJiYgb2RkT3V0ICE9IHN0YXJ0VmVydGV4ICYmIG9kZEluICE9IHN0YXJ0VmVydGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXJ0VmVydGV4KSB7XG4gICAgICAgICAgICBzdGFydFZlcnRleCA9IG9kZE91dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghc3RhcnRWZXJ0ZXgpIHN0YXJ0VmVydGV4ID0gZWxlc1swXS5pZCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIHdhbGsodikge1xuICAgICAgICB2YXIgY3VycmVudE5vZGUgPSB2O1xuICAgICAgICB2YXIgc3VidG91ciA9IFt2XTtcbiAgICAgICAgdmFyIGFkaiwgYWRqVGFpbCwgYWRqSGVhZDtcblxuICAgICAgICB3aGlsZSAobm9kZXNbY3VycmVudE5vZGVdLmxlbmd0aCkge1xuICAgICAgICAgIGFkaiA9IG5vZGVzW2N1cnJlbnROb2RlXS5zaGlmdCgpO1xuICAgICAgICAgIGFkalRhaWwgPSBlZGdlc1thZGpdWzBdO1xuICAgICAgICAgIGFkakhlYWQgPSBlZGdlc1thZGpdWzFdO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGFkakhlYWQpIHtcbiAgICAgICAgICAgIG5vZGVzW2FkakhlYWRdID0gbm9kZXNbYWRqSGVhZF0uZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlICE9IGFkajtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBhZGpIZWFkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWRpcmVjdGVkICYmIGN1cnJlbnROb2RlICE9IGFkalRhaWwpIHtcbiAgICAgICAgICAgIG5vZGVzW2FkalRhaWxdID0gbm9kZXNbYWRqVGFpbF0uZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlICE9IGFkajtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBhZGpUYWlsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YnRvdXIudW5zaGlmdChhZGopO1xuICAgICAgICAgIHN1YnRvdXIudW5zaGlmdChjdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VidG91cjtcbiAgICAgIH07XG5cbiAgICAgIHZhciB0cmFpbCA9IFtdO1xuICAgICAgdmFyIHN1YnRvdXIgPSBbXTtcbiAgICAgIHN1YnRvdXIgPSB3YWxrKHN0YXJ0VmVydGV4KTtcblxuICAgICAgd2hpbGUgKHN1YnRvdXIubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgaWYgKG5vZGVzW3N1YnRvdXJbMF1dLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdHJhaWwudW5zaGlmdChlbGVzLmdldEVsZW1lbnRCeUlkKHN1YnRvdXIuc2hpZnQoKSkpO1xuICAgICAgICAgIHRyYWlsLnVuc2hpZnQoZWxlcy5nZXRFbGVtZW50QnlJZChzdWJ0b3VyLnNoaWZ0KCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJ0b3VyID0gd2FsayhzdWJ0b3VyLnNoaWZ0KCkpLmNvbmNhdChzdWJ0b3VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFpbC51bnNoaWZ0KGVsZXMuZ2V0RWxlbWVudEJ5SWQoc3VidG91ci5zaGlmdCgpKSk7IC8vIGZpbmFsIG5vZGVcblxuICAgICAgZm9yICh2YXIgZCBpbiBub2Rlcykge1xuICAgICAgICBpZiAobm9kZXNbZF0ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQuZm91bmQgPSB0cnVlO1xuICAgICAgcmVzdWx0LnRyYWlsID0gdGhpcy5zcGF3bih0cmFpbCwgdHJ1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfTtcblxuICB2YXIgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCA9IGZ1bmN0aW9uIGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQoKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBub2RlcyA9IHt9O1xuICAgIHZhciBpZCA9IDA7XG4gICAgdmFyIGVkZ2VDb3VudCA9IDA7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgdmlzaXRlZEVkZ2VzID0ge307XG5cbiAgICB2YXIgYnVpbGRDb21wb25lbnQgPSBmdW5jdGlvbiBidWlsZENvbXBvbmVudCh4LCB5KSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgY3V0c2V0ID0gW107XG4gICAgICB2YXIgY29tcG9uZW50ID0gZWxlcy5zcGF3bigpO1xuXG4gICAgICB3aGlsZSAoc3RhY2tbaV0ueCAhPSB4IHx8IHN0YWNrW2ldLnkgIT0geSkge1xuICAgICAgICBjdXRzZXQucHVzaChzdGFjay5wb3AoKS5lZGdlKTtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuXG4gICAgICBjdXRzZXQucHVzaChzdGFjay5wb3AoKS5lZGdlKTtcbiAgICAgIGN1dHNldC5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHZhciBjb25uZWN0ZWROb2RlcyA9IGVkZ2UuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgICAgIGNvbXBvbmVudC5tZXJnZShlZGdlKTtcbiAgICAgICAgY29ubmVjdGVkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHZhciBub2RlSWQgPSBub2RlLmlkKCk7XG4gICAgICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG5cbiAgICAgICAgICBpZiAoIW5vZGVzW25vZGVJZF0uY3V0VmVydGV4KSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWVyZ2UoY29ubmVjdGVkRWRnZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWVyZ2UoY29ubmVjdGVkRWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlZGdlLmlzTG9vcCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgIH07XG5cbiAgICB2YXIgYmljb25uZWN0ZWRTZWFyY2ggPSBmdW5jdGlvbiBiaWNvbm5lY3RlZFNlYXJjaChyb290LCBjdXJyZW50Tm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAocm9vdCA9PT0gcGFyZW50KSBlZGdlQ291bnQgKz0gMTtcbiAgICAgIG5vZGVzW2N1cnJlbnROb2RlXSA9IHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBsb3c6IGlkKyssXG4gICAgICAgIGN1dFZlcnRleDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgZWRnZXMgPSBlbGVzLmdldEVsZW1lbnRCeUlkKGN1cnJlbnROb2RlKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcblxuICAgICAgaWYgKGVkZ2VzLnNpemUoKSA9PT0gMCkge1xuICAgICAgICBjb21wb25lbnRzLnB1c2goZWxlcy5zcGF3bihlbGVzLmdldEVsZW1lbnRCeUlkKGN1cnJlbnROb2RlKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZUlkLCB0YXJnZXRJZCwgb3RoZXJOb2RlSWQsIGVkZ2VJZDtcbiAgICAgICAgZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgIHNvdXJjZUlkID0gZWRnZS5zb3VyY2UoKS5pZCgpO1xuICAgICAgICAgIHRhcmdldElkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgICAgIG90aGVyTm9kZUlkID0gc291cmNlSWQgPT09IGN1cnJlbnROb2RlID8gdGFyZ2V0SWQgOiBzb3VyY2VJZDtcblxuICAgICAgICAgIGlmIChvdGhlck5vZGVJZCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgICBlZGdlSWQgPSBlZGdlLmlkKCk7XG5cbiAgICAgICAgICAgIGlmICghdmlzaXRlZEVkZ2VzW2VkZ2VJZF0pIHtcbiAgICAgICAgICAgICAgdmlzaXRlZEVkZ2VzW2VkZ2VJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50Tm9kZSxcbiAgICAgICAgICAgICAgICB5OiBvdGhlck5vZGVJZCxcbiAgICAgICAgICAgICAgICBlZGdlOiBlZGdlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIShvdGhlck5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICAgICAgYmljb25uZWN0ZWRTZWFyY2gocm9vdCwgb3RoZXJOb2RlSWQsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgbm9kZXNbY3VycmVudE5vZGVdLmxvdyA9IE1hdGgubWluKG5vZGVzW2N1cnJlbnROb2RlXS5sb3csIG5vZGVzW290aGVyTm9kZUlkXS5sb3cpO1xuXG4gICAgICAgICAgICAgIGlmIChub2Rlc1tjdXJyZW50Tm9kZV0uaWQgPD0gbm9kZXNbb3RoZXJOb2RlSWRdLmxvdykge1xuICAgICAgICAgICAgICAgIG5vZGVzW2N1cnJlbnROb2RlXS5jdXRWZXJ0ZXggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJ1aWxkQ29tcG9uZW50KGN1cnJlbnROb2RlLCBvdGhlck5vZGVJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5vZGVzW2N1cnJlbnROb2RlXS5sb3cgPSBNYXRoLm1pbihub2Rlc1tjdXJyZW50Tm9kZV0ubG93LCBub2Rlc1tvdGhlck5vZGVJZF0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIHZhciBub2RlSWQgPSBlbGUuaWQoKTtcblxuICAgICAgICBpZiAoIShub2RlSWQgaW4gbm9kZXMpKSB7XG4gICAgICAgICAgZWRnZUNvdW50ID0gMDtcbiAgICAgICAgICBiaWNvbm5lY3RlZFNlYXJjaChub2RlSWQsIG5vZGVJZCk7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS5jdXRWZXJ0ZXggPSBlZGdlQ291bnQgPiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGN1dFZlcnRpY2VzID0gT2JqZWN0LmtleXMobm9kZXMpLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHJldHVybiBub2Rlc1tpZF0uY3V0VmVydGV4O1xuICAgIH0pLm1hcChmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHJldHVybiBlbGVzLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY3V0OiBlbGVzLnNwYXduKGN1dFZlcnRpY2VzKSxcbiAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHNcbiAgICB9O1xuICB9O1xuXG4gIHZhciBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkJDEgPSB7XG4gICAgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgICBodGJjOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkLFxuICAgIGh0YjogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgICBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZFxuICB9O1xuXG4gIHZhciB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCA9IGZ1bmN0aW9uIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkKCkge1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgbm9kZXMgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjb21wb25lbnRzID0gW107XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGN1dCA9IGVsZXMuc3Bhd24oZWxlcyk7XG5cbiAgICB2YXIgc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2ggPSBmdW5jdGlvbiBzdHJvbmdseUNvbm5lY3RlZFNlYXJjaChzb3VyY2VOb2RlSWQpIHtcbiAgICAgIHN0YWNrLnB1c2goc291cmNlTm9kZUlkKTtcbiAgICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0gPSB7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgbG93OiBpbmRleCsrLFxuICAgICAgICBleHBsb3JlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBlbGVzLmdldEVsZW1lbnRCeUlkKHNvdXJjZU5vZGVJZCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgICBjb25uZWN0ZWRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHZhciB0YXJnZXROb2RlSWQgPSBlZGdlLnRhcmdldCgpLmlkKCk7XG5cbiAgICAgICAgaWYgKHRhcmdldE5vZGVJZCAhPT0gc291cmNlTm9kZUlkKSB7XG4gICAgICAgICAgaWYgKCEodGFyZ2V0Tm9kZUlkIGluIG5vZGVzKSkge1xuICAgICAgICAgICAgc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2godGFyZ2V0Tm9kZUlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5vZGVzW3RhcmdldE5vZGVJZF0uZXhwbG9yZWQpIHtcbiAgICAgICAgICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0ubG93ID0gTWF0aC5taW4obm9kZXNbc291cmNlTm9kZUlkXS5sb3csIG5vZGVzW3RhcmdldE5vZGVJZF0ubG93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAobm9kZXNbc291cmNlTm9kZUlkXS5pbmRleCA9PT0gbm9kZXNbc291cmNlTm9kZUlkXS5sb3cpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5vZGVzID0gZWxlcy5zcGF3bigpO1xuXG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICB2YXIgbm9kZUlkID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgY29tcG9uZW50Tm9kZXMubWVyZ2UoZWxlcy5nZXRFbGVtZW50QnlJZChub2RlSWQpKTtcbiAgICAgICAgICBub2Rlc1tub2RlSWRdLmxvdyA9IG5vZGVzW3NvdXJjZU5vZGVJZF0uaW5kZXg7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS5leHBsb3JlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAobm9kZUlkID09PSBzb3VyY2VOb2RlSWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb21wb25lbnRFZGdlcyA9IGNvbXBvbmVudE5vZGVzLmVkZ2VzV2l0aChjb21wb25lbnROb2Rlcyk7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnROb2Rlcy5tZXJnZShjb21wb25lbnRFZGdlcyk7XG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgICBjdXQgPSBjdXQuZGlmZmVyZW5jZShjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICB2YXIgbm9kZUlkID0gZWxlLmlkKCk7XG5cbiAgICAgICAgaWYgKCEobm9kZUlkIGluIG5vZGVzKSkge1xuICAgICAgICAgIHN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoKG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY3V0OiBjdXQsXG4gICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gICAgfTtcbiAgfTtcblxuICB2YXIgdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQkMSA9IHtcbiAgICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZDogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gICAgdHNjOiB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCxcbiAgICB0c2NjOiB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCxcbiAgICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHM6IHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkXG4gIH07XG5cbiAgdmFyIGVsZXNmbiRqID0ge307XG4gIFtlbGVzZm4kdiwgZWxlc2ZuJHUsIGVsZXNmbiR0LCBlbGVzZm4kcywgZWxlc2ZuJHIsIGVsZXNmbiRxLCBlbGVzZm4kcCwgZWxlc2ZuJG8sIGVsZXNmbiRuLCBlbGVzZm4kbSwgZWxlc2ZuJGwsIG1hcmtvdkNsdXN0ZXJpbmckMSwga0NsdXN0ZXJpbmcsIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmckMSwgYWZmaW5pdHlQcm9wYWdhdGlvbiQxLCBlbGVzZm4kaywgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCQxLCB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGV4dGVuZChlbGVzZm4kaiwgcHJvcHMpO1xuICB9KTtcblxuICAvKiFcbiAgRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZVxuICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKVxuICBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpXG4gICovXG5cbiAgLyogIHByb21pc2Ugc3RhdGVzIFtQcm9taXNlcy9BKyAyLjFdICAqL1xuICB2YXIgU1RBVEVfUEVORElORyA9IDA7XG4gIC8qICBbUHJvbWlzZXMvQSsgMi4xLjFdICAqL1xuXG4gIHZhciBTVEFURV9GVUxGSUxMRUQgPSAxO1xuICAvKiAgW1Byb21pc2VzL0ErIDIuMS4yXSAgKi9cblxuICB2YXIgU1RBVEVfUkVKRUNURUQgPSAyO1xuICAvKiAgW1Byb21pc2VzL0ErIDIuMS4zXSAgKi9cblxuICAvKiAgcHJvbWlzZSBvYmplY3QgY29uc3RydWN0b3IgICovXG5cbiAgdmFyIGFwaSA9IGZ1bmN0aW9uIGFwaShleGVjdXRvcikge1xuICAgIC8qICBvcHRpb25hbGx5IHN1cHBvcnQgbm9uLWNvbnN0cnVjdG9yL3BsYWluLWZ1bmN0aW9uIGNhbGwgICovXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGFwaSkpIHJldHVybiBuZXcgYXBpKGV4ZWN1dG9yKTtcbiAgICAvKiAgaW5pdGlhbGl6ZSBvYmplY3QgICovXG5cbiAgICB0aGlzLmlkID0gJ1RoZW5hYmxlLzEuMC43JztcbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUEVORElORztcbiAgICAvKiAgaW5pdGlhbCBzdGF0ZSAgKi9cblxuICAgIHRoaXMuZnVsZmlsbFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIC8qICBpbml0aWFsIHZhbHVlICAqL1xuXG4gICAgLyogIFtQcm9taXNlcy9BKyAxLjMsIDIuMS4yLjJdICAqL1xuXG4gICAgdGhpcy5yZWplY3RSZWFzb24gPSB1bmRlZmluZWQ7XG4gICAgLyogIGluaXRpYWwgcmVhc29uICovXG5cbiAgICAvKiAgW1Byb21pc2VzL0ErIDEuNSwgMi4xLjMuMl0gICovXG5cbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gW107XG4gICAgLyogIGluaXRpYWwgaGFuZGxlcnMgICovXG5cbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBbXTtcbiAgICAvKiAgaW5pdGlhbCBoYW5kbGVycyAgKi9cblxuICAgIC8qICBwcm92aWRlIG9wdGlvbmFsIGluZm9ybWF0aW9uLWhpZGluZyBwcm94eSAgKi9cblxuICAgIHRoaXMucHJveHkgPSB7XG4gICAgICB0aGVuOiB0aGlzLnRoZW4uYmluZCh0aGlzKVxuICAgIH07XG4gICAgLyogIHN1cHBvcnQgb3B0aW9uYWwgZXhlY3V0b3IgZnVuY3Rpb24gICovXG5cbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yID09PSAnZnVuY3Rpb24nKSBleGVjdXRvci5jYWxsKHRoaXMsIHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLCB0aGlzLnJlamVjdC5iaW5kKHRoaXMpKTtcbiAgfTtcbiAgLyogIHByb21pc2UgQVBJIG1ldGhvZHMgICovXG5cblxuICBhcGkucHJvdG90eXBlID0ge1xuICAgIC8qICBwcm9taXNlIHJlc29sdmluZyBtZXRob2RzICAqL1xuICAgIGZ1bGZpbGw6IGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICAgIHJldHVybiBkZWxpdmVyKHRoaXMsIFNUQVRFX0ZVTEZJTExFRCwgJ2Z1bGZpbGxWYWx1ZScsIHZhbHVlKTtcbiAgICB9LFxuICAgIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZGVsaXZlcih0aGlzLCBTVEFURV9SRUpFQ1RFRCwgJ3JlamVjdFJlYXNvbicsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgLyogIFwiVGhlIHRoZW4gTWV0aG9kXCIgW1Byb21pc2VzL0ErIDEuMSwgMS4yLCAyLjJdICAqL1xuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBjdXJyID0gdGhpcztcbiAgICAgIHZhciBuZXh0ID0gbmV3IGFwaSgpO1xuICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjIuN10gICovXG5cbiAgICAgIGN1cnIub25GdWxmaWxsZWQucHVzaChyZXNvbHZlcihvbkZ1bGZpbGxlZCwgbmV4dCwgJ2Z1bGZpbGwnKSk7XG4gICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi4yLzIuMi42XSAgKi9cblxuICAgICAgY3Vyci5vblJlamVjdGVkLnB1c2gocmVzb2x2ZXIob25SZWplY3RlZCwgbmV4dCwgJ3JlamVjdCcpKTtcbiAgICAgIC8qICBbUHJvbWlzZXMvQSsgMi4yLjMvMi4yLjZdICAqL1xuXG4gICAgICBleGVjdXRlKGN1cnIpO1xuICAgICAgcmV0dXJuIG5leHQucHJveHk7XG4gICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi43LCAzLjNdICAqL1xuICAgIH1cbiAgfTtcbiAgLyogIGRlbGl2ZXIgYW4gYWN0aW9uICAqL1xuXG4gIHZhciBkZWxpdmVyID0gZnVuY3Rpb24gZGVsaXZlcihjdXJyLCBzdGF0ZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoY3Vyci5zdGF0ZSA9PT0gU1RBVEVfUEVORElORykge1xuICAgICAgY3Vyci5zdGF0ZSA9IHN0YXRlO1xuICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjEuMi4xLCAyLjEuMy4xXSAgKi9cblxuICAgICAgY3VycltuYW1lXSA9IHZhbHVlO1xuICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjEuMi4yLCAyLjEuMy4yXSAgKi9cblxuICAgICAgZXhlY3V0ZShjdXJyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycjtcbiAgfTtcbiAgLyogIGV4ZWN1dGUgYWxsIGhhbmRsZXJzICAqL1xuXG5cbiAgdmFyIGV4ZWN1dGUgPSBmdW5jdGlvbiBleGVjdXRlKGN1cnIpIHtcbiAgICBpZiAoY3Vyci5zdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKSBleGVjdXRlX2hhbmRsZXJzKGN1cnIsICdvbkZ1bGZpbGxlZCcsIGN1cnIuZnVsZmlsbFZhbHVlKTtlbHNlIGlmIChjdXJyLnN0YXRlID09PSBTVEFURV9SRUpFQ1RFRCkgZXhlY3V0ZV9oYW5kbGVycyhjdXJyLCAnb25SZWplY3RlZCcsIGN1cnIucmVqZWN0UmVhc29uKTtcbiAgfTtcbiAgLyogIGV4ZWN1dGUgcGFydGljdWxhciBzZXQgb2YgaGFuZGxlcnMgICovXG5cblxuICB2YXIgZXhlY3V0ZV9oYW5kbGVycyA9IGZ1bmN0aW9uIGV4ZWN1dGVfaGFuZGxlcnMoY3VyciwgbmFtZSwgdmFsdWUpIHtcbiAgICAvKiBnbG9iYWwgc2V0SW1tZWRpYXRlOiB0cnVlICovXG5cbiAgICAvKiBnbG9iYWwgc2V0VGltZW91dDogdHJ1ZSAqL1xuXG4gICAgLyogIHNob3J0LWNpcmN1aXQgcHJvY2Vzc2luZyAgKi9cbiAgICBpZiAoY3VycltuYW1lXS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvKiAgaXRlcmF0ZSBvdmVyIGFsbCBoYW5kbGVycywgZXhhY3RseSBvbmNlICAqL1xuXG4gICAgdmFyIGhhbmRsZXJzID0gY3VycltuYW1lXTtcbiAgICBjdXJyW25hbWVdID0gW107XG4gICAgLyogIFtQcm9taXNlcy9BKyAyLjIuMi4zLCAyLjIuMy4zXSAgKi9cblxuICAgIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYygpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaGFuZGxlcnNbaV0odmFsdWUpO1xuICAgICAgfVxuICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjIuNV0gICovXG5cbiAgICB9O1xuICAgIC8qICBleGVjdXRlIHByb2NlZHVyZSBhc3luY2hyb25vdXNseSAgKi9cblxuICAgIC8qICBbUHJvbWlzZXMvQSsgMi4yLjQsIDMuMV0gICovXG5cblxuICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSBzZXRJbW1lZGlhdGUoZnVuYyk7ZWxzZSBzZXRUaW1lb3V0KGZ1bmMsIDApO1xuICB9O1xuICAvKiAgZ2VuZXJhdGUgYSByZXNvbHZlciBmdW5jdGlvbiAgKi9cblxuXG4gIHZhciByZXNvbHZlciA9IGZ1bmN0aW9uIHJlc29sdmVyKGNiLCBuZXh0LCBtZXRob2QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi4xLCAyLjIuNy4zLCAyLjIuNy40XSAgKi9cbiAgICAgICAgbmV4dFttZXRob2RdLmNhbGwobmV4dCwgdmFsdWUpO1xuICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjMsIDIuMi43LjRdICAqL1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBjYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjIuMi4xLCAyLjIuMy4xLCAyLjIuNSwgMy4yXSAgKi9cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBuZXh0LnJlamVjdChlKTtcbiAgICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjJdICAqL1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShuZXh0LCByZXN1bHQpO1xuICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjFdICAqL1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIC8qICBcIlByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmVcIiAgKi9cblxuICAvKiAgW1Byb21pc2VzL0ErIDIuM10gICovXG5cblxuICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUocHJvbWlzZSwgeCkge1xuICAgIC8qICBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICAqL1xuXG4gICAgLyogIFtQcm9taXNlcy9BKyAyLjMuMV0gICovXG4gICAgaWYgKHByb21pc2UgPT09IHggfHwgcHJvbWlzZS5wcm94eSA9PT0geCkge1xuICAgICAgcHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogIHN1cmdpY2FsbHkgY2hlY2sgZm9yIGEgXCJ0aGVuXCIgbWV0aG9kXG4gICAgICAobWFpbmx5IHRvIGp1c3QgY2FsbCB0aGUgXCJnZXR0ZXJcIiBvZiBcInRoZW5cIiBvbmx5IG9uY2UpICAqL1xuXG5cbiAgICB2YXIgdGhlbjtcblxuICAgIGlmIChfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGVuID0geC50aGVuO1xuICAgICAgfVxuICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4xLCAzLjVdICAqL1xuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMl0gICovXG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiAgaGFuZGxlIG93biBUaGVuYWJsZXMgICAgW1Byb21pc2VzL0ErIDIuMy4yXVxuICAgICAgYW5kIHNpbWlsYXIgXCJ0aGVuYWJsZXNcIiBbUHJvbWlzZXMvQSsgMi4zLjNdICAqL1xuXG5cbiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciByZXNvbHZlZCA9IGZhbHNlO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvKiAgY2FsbCByZXRyaWV2ZWQgXCJ0aGVuXCIgbWV0aG9kICovXG5cbiAgICAgICAgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zXSAgKi9cbiAgICAgICAgdGhlbi5jYWxsKHgsXG4gICAgICAgIC8qICByZXNvbHZlUHJvbWlzZSAgKi9cblxuICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjMuMV0gICovXG4gICAgICAgIGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgcmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cblxuICAgICAgICAgIGlmICh5ID09PSB4KVxuICAgICAgICAgICAgLyogIFtQcm9taXNlcy9BKyAzLjZdICAqL1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignY2lyY3VsYXIgdGhlbmFibGUgY2hhaW4nKSk7ZWxzZSByZXNvbHZlKHByb21pc2UsIHkpO1xuICAgICAgICB9LFxuICAgICAgICAvKiAgcmVqZWN0UHJvbWlzZSAgKi9cblxuICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjMuMl0gICovXG4gICAgICAgIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgcmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cblxuICAgICAgICAgIHByb21pc2UucmVqZWN0KHIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjMuM10gICovXG4gICAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy40XSAgKi9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiAgaGFuZGxlIG90aGVyIHZhbHVlcyAgKi9cblxuXG4gICAgcHJvbWlzZS5mdWxmaWxsKHgpO1xuICAgIC8qICBbUHJvbWlzZXMvQSsgMi4zLjQsIDIuMy4zLjRdICAqL1xuICB9OyAvLyBzbyB3ZSBhbHdheXMgaGF2ZSBQcm9taXNlLmFsbCgpXG5cblxuICBhcGkuYWxsID0gZnVuY3Rpb24gKHBzKSB7XG4gICAgcmV0dXJuIG5ldyBhcGkoZnVuY3Rpb24gKHJlc29sdmVBbGwsIHJlamVjdEFsbCkge1xuICAgICAgdmFyIHZhbHMgPSBuZXcgQXJyYXkocHMubGVuZ3RoKTtcbiAgICAgIHZhciBkb25lQ291bnQgPSAwO1xuXG4gICAgICB2YXIgZnVsZmlsbCA9IGZ1bmN0aW9uIGZ1bGZpbGwoaSwgdmFsKSB7XG4gICAgICAgIHZhbHNbaV0gPSB2YWw7XG4gICAgICAgIGRvbmVDb3VudCsrO1xuXG4gICAgICAgIGlmIChkb25lQ291bnQgPT09IHBzLmxlbmd0aCkge1xuICAgICAgICAgIHJlc29sdmVBbGwodmFscyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgdmFyIHAgPSBwc1tpXTtcbiAgICAgICAgICB2YXIgaXNQcm9taXNlID0gcCAhPSBudWxsICYmIHAudGhlbiAhPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzUHJvbWlzZSkge1xuICAgICAgICAgICAgcC50aGVuKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgZnVsZmlsbChpLCB2YWwpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICByZWplY3RBbGwoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gcDtcbiAgICAgICAgICAgIGZ1bGZpbGwoaSwgdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKGkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGFwaS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiBuZXcgYXBpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlc29sdmUodmFsKTtcbiAgICB9KTtcbiAgfTtcblxuICBhcGkucmVqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiBuZXcgYXBpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlamVjdCh2YWwpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBQcm9taXNlJDEgPSB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgPyBQcm9taXNlIDogYXBpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgdmFyIEFuaW1hdGlvbiA9IGZ1bmN0aW9uIEFuaW1hdGlvbih0YXJnZXQsIG9wdHMsIG9wdHMyKSB7XG4gICAgdmFyIGlzQ29yZSA9IGNvcmUodGFyZ2V0KTtcbiAgICB2YXIgaXNFbGUgPSAhaXNDb3JlO1xuXG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZSA9IGV4dGVuZCh7XG4gICAgICBkdXJhdGlvbjogMTAwMFxuICAgIH0sIG9wdHMsIG9wdHMyKTtcblxuICAgIF9wLnRhcmdldCA9IHRhcmdldDtcbiAgICBfcC5zdHlsZSA9IF9wLnN0eWxlIHx8IF9wLmNzcztcbiAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgX3AucGxheWluZyA9IGZhbHNlO1xuICAgIF9wLmhvb2tlZCA9IGZhbHNlO1xuICAgIF9wLmFwcGx5aW5nID0gZmFsc2U7XG4gICAgX3AucHJvZ3Jlc3MgPSAwO1xuICAgIF9wLmNvbXBsZXRlcyA9IFtdO1xuICAgIF9wLmZyYW1lcyA9IFtdO1xuXG4gICAgaWYgKF9wLmNvbXBsZXRlICYmIGZuJDYoX3AuY29tcGxldGUpKSB7XG4gICAgICBfcC5jb21wbGV0ZXMucHVzaChfcC5jb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRWxlKSB7XG4gICAgICB2YXIgcG9zID0gdGFyZ2V0LnBvc2l0aW9uKCk7XG4gICAgICBfcC5zdGFydFBvc2l0aW9uID0gX3Auc3RhcnRQb3NpdGlvbiB8fCB7XG4gICAgICAgIHg6IHBvcy54LFxuICAgICAgICB5OiBwb3MueVxuICAgICAgfTtcbiAgICAgIF9wLnN0YXJ0U3R5bGUgPSBfcC5zdGFydFN0eWxlIHx8IHRhcmdldC5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZSh0YXJnZXQsIF9wLnN0eWxlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb3JlKSB7XG4gICAgICB2YXIgcGFuID0gdGFyZ2V0LnBhbigpO1xuICAgICAgX3Auc3RhcnRQYW4gPSB7XG4gICAgICAgIHg6IHBhbi54LFxuICAgICAgICB5OiBwYW4ueVxuICAgICAgfTtcbiAgICAgIF9wLnN0YXJ0Wm9vbSA9IHRhcmdldC56b29tKCk7XG4gICAgfSAvLyBmb3IgZnV0dXJlIHRpbWVsaW5lL2FuaW1hdGlvbnMgaW1wbFxuXG5cbiAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgdGhpc1swXSA9IHRoaXM7XG4gIH07XG5cbiAgdmFyIGFuaWZuID0gQW5pbWF0aW9uLnByb3RvdHlwZTtcbiAgZXh0ZW5kKGFuaWZuLCB7XG4gICAgaW5zdGFuY2VTdHJpbmc6IGZ1bmN0aW9uIGluc3RhbmNlU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICdhbmltYXRpb24nO1xuICAgIH0sXG4gICAgaG9vazogZnVuY3Rpb24gaG9vaygpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmICghX3AuaG9va2VkKSB7XG4gICAgICAgIC8vIGFkZCB0byB0YXJnZXQncyBhbmltYXRpb24gcXVldWVcbiAgICAgICAgdmFyIHE7XG4gICAgICAgIHZhciB0QW5pID0gX3AudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtcblxuICAgICAgICBpZiAoX3AucXVldWUpIHtcbiAgICAgICAgICBxID0gdEFuaS5xdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxID0gdEFuaS5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcS5wdXNoKHRoaXMpOyAvLyBhZGQgdG8gdGhlIGFuaW1hdGlvbiBsb29wIHBvb2xcblxuICAgICAgICBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihfcC50YXJnZXQpKSB7XG4gICAgICAgICAgX3AudGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKF9wLnRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICBfcC5ob29rZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHBsYXk6IGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlOyAvLyBhdXRvcmV3aW5kXG5cbiAgICAgIGlmIChfcC5wcm9ncmVzcyA9PT0gMSkge1xuICAgICAgICBfcC5wcm9ncmVzcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIF9wLnBsYXlpbmcgPSB0cnVlO1xuICAgICAgX3Auc3RhcnRlZCA9IGZhbHNlOyAvLyBuZWVkcyB0byBiZSBzdGFydGVkIGJ5IGFuaW1hdGlvbiBsb29wXG5cbiAgICAgIF9wLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaG9vaygpOyAvLyB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBzdGFydCB0aGUgYW5pbWF0aW9uLi4uXG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgcGxheWluZzogZnVuY3Rpb24gcGxheWluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmc7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkoKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgX3AuYXBwbHlpbmcgPSB0cnVlO1xuICAgICAgX3Auc3RhcnRlZCA9IGZhbHNlOyAvLyBuZWVkcyB0byBiZSBzdGFydGVkIGJ5IGFuaW1hdGlvbiBsb29wXG5cbiAgICAgIF9wLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaG9vaygpOyAvLyB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBhcHBseSB0aGUgYW5pbWF0aW9uIGF0IHRoaXMgcHJvZ3Jlc3NcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBhcHBseWluZzogZnVuY3Rpb24gYXBwbHlpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZztcbiAgICB9LFxuICAgIHBhdXNlOiBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICBfcC5wbGF5aW5nID0gZmFsc2U7XG4gICAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgX3AucGxheWluZyA9IGZhbHNlO1xuICAgICAgX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgX3Auc3RvcHBlZCA9IHRydWU7IC8vIHRvIGJlIHJlbW92ZWQgZnJvbSBhbmltYXRpb24gcXVldWVzXG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgcmV3aW5kOiBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmVzcygwKTtcbiAgICB9LFxuICAgIGZhc3Rmb3J3YXJkOiBmdW5jdGlvbiBmYXN0Zm9yd2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzKDEpO1xuICAgIH0sXG4gICAgdGltZTogZnVuY3Rpb24gdGltZSh0KSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuXG4gICAgICBpZiAodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBfcC5wcm9ncmVzcyAqIF9wLmR1cmF0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3ModCAvIF9wLmR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiBwcm9ncmVzcyhwKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgdmFyIHdhc1BsYXlpbmcgPSBfcC5wbGF5aW5nO1xuXG4gICAgICBpZiAocCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBfcC5wcm9ncmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3AucHJvZ3Jlc3MgPSBwO1xuICAgICAgICBfcC5zdGFydGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGNvbXBsZXRlZDogZnVuY3Rpb24gY29tcGxldGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucHJvZ3Jlc3MgPT09IDE7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICAgIHZhciB3YXNQbGF5aW5nID0gX3AucGxheWluZztcblxuICAgICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuXG4gICAgICBfcC5wcm9ncmVzcyA9IDEgLSBfcC5wcm9ncmVzcztcbiAgICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgICAgdmFyIHN3YXAgPSBmdW5jdGlvbiBzd2FwKGEsIGIpIHtcbiAgICAgICAgdmFyIF9wYSA9IF9wW2FdO1xuXG4gICAgICAgIGlmIChfcGEgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF9wW2FdID0gX3BbYl07XG4gICAgICAgIF9wW2JdID0gX3BhO1xuICAgICAgfTtcblxuICAgICAgc3dhcCgnem9vbScsICdzdGFydFpvb20nKTtcbiAgICAgIHN3YXAoJ3BhbicsICdzdGFydFBhbicpO1xuICAgICAgc3dhcCgncG9zaXRpb24nLCAnc3RhcnRQb3NpdGlvbicpOyAvLyBzd2FwIHN0eWxlc1xuXG4gICAgICBpZiAoX3Auc3R5bGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcC5zdHlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwcm9wID0gX3Auc3R5bGVbaV07XG4gICAgICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7XG4gICAgICAgICAgdmFyIHN0YXJ0U3R5bGVQcm9wID0gX3Auc3RhcnRTdHlsZVtuYW1lXTtcbiAgICAgICAgICBfcC5zdGFydFN0eWxlW25hbWVdID0gcHJvcDtcbiAgICAgICAgICBfcC5zdHlsZVtpXSA9IHN0YXJ0U3R5bGVQcm9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHByb21pc2U6IGZ1bmN0aW9uIHByb21pc2UodHlwZSkge1xuICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICAgIHZhciBhcnI7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdmcmFtZSc6XG4gICAgICAgICAgYXJyID0gX3AuZnJhbWVzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICBhcnIgPSBfcC5jb21wbGV0ZXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgYXJyLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBhbmlmbi5jb21wbGV0ZSA9IGFuaWZuLmNvbXBsZXRlZDtcbiAgYW5pZm4ucnVuID0gYW5pZm4ucGxheTtcbiAgYW5pZm4ucnVubmluZyA9IGFuaWZuLnBsYXlpbmc7XG5cbiAgdmFyIGRlZmluZSQzID0ge1xuICAgIGFuaW1hdGVkOiBmdW5jdGlvbiBhbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBhbmltYXRlZEltcGwoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcblxuICAgICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG5cbiAgICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbGUgPSBhbGxbMF07XG5cbiAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIC8vIGFuaW1hdGVkXG4gICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24gY2xlYXJRdWV1ZSgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjbGVhclF1ZXVlSW1wbCgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuXG4gICAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcblxuICAgICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBhbGxbaV07XG4gICAgICAgICAgZWxlLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH0sXG4gICAgLy8gY2xlYXJRdWV1ZVxuICAgIGRlbGF5OiBmdW5jdGlvbiBkZWxheSgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBkZWxheUltcGwodGltZSwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuXG4gICAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoe1xuICAgICAgICAgIGRlbGF5OiB0aW1lLFxuICAgICAgICAgIGR1cmF0aW9uOiB0aW1lLFxuICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICAvLyBkZWxheVxuICAgIGRlbGF5QW5pbWF0aW9uOiBmdW5jdGlvbiBkZWxheUFuaW1hdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBkZWxheUFuaW1hdGlvbkltcGwodGltZSwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuXG4gICAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGlvbih7XG4gICAgICAgICAgZGVsYXk6IHRpbWUsXG4gICAgICAgICAgZHVyYXRpb246IHRpbWUsXG4gICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIC8vIGRlbGF5XG4gICAgYW5pbWF0aW9uOiBmdW5jdGlvbiBhbmltYXRpb24oKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gYW5pbWF0aW9uSW1wbChwcm9wZXJ0aWVzLCBwYXJhbXMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuXG4gICAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgICAgdmFyIGlzQ29yZSA9ICFzZWxmSXNBcnJheUxpa2U7XG4gICAgICAgIHZhciBpc0VsZXMgPSAhaXNDb3JlO1xuXG4gICAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG4gICAgICAgIHByb3BlcnRpZXMgPSBleHRlbmQoe30sIHByb3BlcnRpZXMsIHBhcmFtcyk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzRW1wdHkgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXNFbXB0eSkge1xuICAgICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKGFsbFswXSwgcHJvcGVydGllcyk7IC8vIG5vdGhpbmcgdG8gYW5pbWF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSA0MDA7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHByb3BlcnRpZXMuZHVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlICdzbG93JzpcbiAgICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSA2MDA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2Zhc3QnOlxuICAgICAgICAgICAgcHJvcGVydGllcy5kdXJhdGlvbiA9IDIwMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRWxlcykge1xuICAgICAgICAgIHByb3BlcnRpZXMuc3R5bGUgPSBzdHlsZS5nZXRQcm9wc0xpc3QocHJvcGVydGllcy5zdHlsZSB8fCBwcm9wZXJ0aWVzLmNzcyk7XG4gICAgICAgICAgcHJvcGVydGllcy5jc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFbGVzICYmIHByb3BlcnRpZXMucmVuZGVyZWRQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIHJwb3MgPSBwcm9wZXJ0aWVzLnJlbmRlcmVkUG9zaXRpb247XG4gICAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgICAgICAgIHByb3BlcnRpZXMucG9zaXRpb24gPSByZW5kZXJlZFRvTW9kZWxQb3NpdGlvbihycG9zLCB6b29tLCBwYW4pO1xuICAgICAgICB9IC8vIG92ZXJyaWRlIHBhbiB3LyBwYW5CeSBpZiBzZXRcblxuXG4gICAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5wYW5CeSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIHBhbkJ5ID0gcHJvcGVydGllcy5wYW5CeTtcbiAgICAgICAgICB2YXIgY3lQYW4gPSBjeS5wYW4oKTtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IHtcbiAgICAgICAgICAgIHg6IGN5UGFuLnggKyBwYW5CeS54LFxuICAgICAgICAgICAgeTogY3lQYW4ueSArIHBhbkJ5LnlcbiAgICAgICAgICB9O1xuICAgICAgICB9IC8vIG92ZXJyaWRlIHBhbiB3LyBjZW50ZXIgaWYgc2V0XG5cblxuICAgICAgICB2YXIgY2VudGVyID0gcHJvcGVydGllcy5jZW50ZXIgfHwgcHJvcGVydGllcy5jZW50cmU7XG5cbiAgICAgICAgaWYgKGlzQ29yZSAmJiBjZW50ZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjZW50ZXJQYW4gPSBjeS5nZXRDZW50ZXJQYW4oY2VudGVyLmVsZXMsIHByb3BlcnRpZXMuem9vbSk7XG5cbiAgICAgICAgICBpZiAoY2VudGVyUGFuICE9IG51bGwpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMucGFuID0gY2VudGVyUGFuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBvdmVycmlkZSBwYW4gJiB6b29tIHcvIGZpdCBpZiBzZXRcblxuXG4gICAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5maXQgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmaXQgPSBwcm9wZXJ0aWVzLmZpdDtcbiAgICAgICAgICB2YXIgZml0VnAgPSBjeS5nZXRGaXRWaWV3cG9ydChmaXQuZWxlcyB8fCBmaXQuYm91bmRpbmdCb3gsIGZpdC5wYWRkaW5nKTtcblxuICAgICAgICAgIGlmIChmaXRWcCAhPSBudWxsKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IGZpdFZwLnBhbjtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IGZpdFZwLnpvb207XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIG92ZXJyaWRlIHpvb20gKCYgcG90ZW50aWFsbHkgcGFuKSB3LyB6b29tIG9iaiBpZiBzZXRcblxuXG4gICAgICAgIGlmIChpc0NvcmUgJiYgcGxhaW5PYmplY3QocHJvcGVydGllcy56b29tKSkge1xuICAgICAgICAgIHZhciB2cCA9IGN5LmdldFpvb21lZFZpZXdwb3J0KHByb3BlcnRpZXMuem9vbSk7XG5cbiAgICAgICAgICBpZiAodnAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHZwLnpvb21lZCkge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnpvb20gPSB2cC56b29tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodnAucGFubmVkKSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXMucGFuID0gdnAucGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnpvb20gPSBudWxsOyAvLyBhbiBpbmF2YWxpZCB6b29tIChlLmcuIG5vIGRlbHRhKSBnZXRzIGF1dG9tYXRpY2FsbHkgZGVzdHJveWVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb24oYWxsWzBdLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICAvLyBhbmltYXRlXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gYW5pbWF0ZSgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBhbmltYXRlSW1wbChwcm9wZXJ0aWVzLCBwYXJhbXMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuXG4gICAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcblxuICAgICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IGV4dGVuZCh7fSwgcHJvcGVydGllcywgcGFyYW1zKTtcbiAgICAgICAgfSAvLyBtYW51YWxseSBob29rIGFuZCBydW4gdGhlIGFuaW1hdGlvblxuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICAgIHZhciBxdWV1ZSA9IGVsZS5hbmltYXRlZCgpICYmIChwcm9wZXJ0aWVzLnF1ZXVlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydGllcy5xdWV1ZSk7XG4gICAgICAgICAgdmFyIGFuaSA9IGVsZS5hbmltYXRpb24ocHJvcGVydGllcywgcXVldWUgPyB7XG4gICAgICAgICAgICBxdWV1ZTogdHJ1ZVxuICAgICAgICAgIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgIGFuaS5wbGF5KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICAgIH07XG4gICAgfSxcbiAgICAvLyBhbmltYXRlXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBzdG9wSW1wbChjbGVhclF1ZXVlLCBqdW1wVG9FbmQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuXG4gICAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcblxuICAgICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBhbGxbaV07XG4gICAgICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgICAgIHZhciBhbmlzID0gX3AuYW5pbWF0aW9uLmN1cnJlbnQ7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFuaXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBhbmkgPSBhbmlzW2pdO1xuICAgICAgICAgICAgdmFyIGFuaV9wID0gYW5pLl9wcml2YXRlO1xuXG4gICAgICAgICAgICBpZiAoanVtcFRvRW5kKSB7XG4gICAgICAgICAgICAgIC8vIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBhbmltYXRpb24gbG9vcCwgdGhlIGFuaW1hdGlvblxuICAgICAgICAgICAgICAvLyB3aWxsIGdvIHN0cmFpZ2h0IHRvIHRoZSBlbmQgYW5kIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgYW5pX3AuZHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gY2xlYXIgdGhlIHF1ZXVlIG9mIGZ1dHVyZSBhbmltYXRpb25zXG5cblxuICAgICAgICAgIGlmIChjbGVhclF1ZXVlKSB7XG4gICAgICAgICAgICBfcC5hbmltYXRpb24ucXVldWUgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWp1bXBUb0VuZCkge1xuICAgICAgICAgICAgX3AuYW5pbWF0aW9uLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gd2UgaGF2ZSB0byBub3RpZnkgKHRoZSBhbmltYXRpb24gbG9vcCBkb2Vzbid0IGRvIGl0IGZvciB1cyBvbiBgc3RvcGApXG5cblxuICAgICAgICBjeS5ub3RpZnkoJ2RyYXcnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH0gLy8gc3RvcFxuXG4gIH07IC8vIGRlZmluZVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBtZW1iZXJPZiBfXG4gICAqIEBzaW5jZSAwLjEuMFxuICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAqIC8vID0+IHRydWVcbiAgICpcbiAgICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBfLmlzQXJyYXkoJ2FiYycpO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKlxuICAgKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICovXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuICB2YXIgaXNBcnJheV8xID0gaXNBcnJheTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgICBpZiAoaXNBcnJheV8xKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2xfMSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xuICB9XG5cbiAgdmFyIF9pc0tleSA9IGlzS2V5O1xuXG4gIC8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDAuMS4wXG4gICAqIEBjYXRlZ29yeSBMYW5nXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKi9cbiAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICghaXNPYmplY3RfMSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gICAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gICAgdmFyIHRhZyA9IF9iYXNlR2V0VGFnKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xuICB9XG5cbiAgdmFyIGlzRnVuY3Rpb25fMSA9IGlzRnVuY3Rpb247XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xuICB2YXIgY29yZUpzRGF0YSA9IF9yb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICB2YXIgX2NvcmVKc0RhdGEgPSBjb3JlSnNEYXRhO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG4gIHZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9jb3JlSnNEYXRhICYmIF9jb3JlSnNEYXRhLmtleXMgJiYgX2NvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xuICB9KCkpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gICAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbiAgfVxuXG4gIHZhciBfaXNNYXNrZWQgPSBpc01hc2tlZDtcblxuICAvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG4gIHZhciBmdW5jUHJvdG8kMSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG4gIHZhciBmdW5jVG9TdHJpbmckMSA9IGZ1bmNQcm90byQxLnRvU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAgICovXG4gIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nJDEuY2FsbChmdW5jKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgX3RvU291cmNlID0gdG9Tb3VyY2U7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbiAgdmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbiAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICB2YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgb2JqZWN0UHJvdG8kMyA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xuICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gIC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuICB2YXIgaGFzT3duUHJvcGVydHkkMyA9IG9iamVjdFByb3RvJDMuaGFzT3duUHJvcGVydHk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbiAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSQzKS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdF8xKHZhbHVlKSB8fCBfaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbl8xKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChfdG9Tb3VyY2UodmFsdWUpKTtcbiAgfVxuXG4gIHZhciBfYmFzZUlzTmF0aXZlID0gYmFzZUlzTmF0aXZlO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZSQxKG9iamVjdCwga2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH1cblxuICB2YXIgX2dldFZhbHVlID0gZ2V0VmFsdWUkMTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gICAgdmFyIHZhbHVlID0gX2dldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgICByZXR1cm4gX2Jhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfZ2V0TmF0aXZlID0gZ2V0TmF0aXZlO1xuXG4gIC8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbiAgdmFyIG5hdGl2ZUNyZWF0ZSA9IF9nZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbiAgdmFyIF9uYXRpdmVDcmVhdGUgPSBuYXRpdmVDcmVhdGU7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBuYW1lIGNsZWFyXG4gICAqIEBtZW1iZXJPZiBIYXNoXG4gICAqL1xuICBmdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gICAgdGhpcy5fX2RhdGFfXyA9IF9uYXRpdmVDcmVhdGUgPyBfbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gICAgdGhpcy5zaXplID0gMDtcbiAgfVxuXG4gIHZhciBfaGFzaENsZWFyID0gaGFzaENsZWFyO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgZGVsZXRlXG4gICAqIEBtZW1iZXJPZiBIYXNoXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBfaGFzaERlbGV0ZSA9IGhhc2hEZWxldGU7XG5cbiAgLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xuICB2YXIgSEFTSF9VTkRFRklORUQkMSA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuICAvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG4gIHZhciBvYmplY3RQcm90byQyID0gT2JqZWN0LnByb3RvdHlwZTtcblxuICAvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbiAgdmFyIGhhc093blByb3BlcnR5JDIgPSBvYmplY3RQcm90byQyLmhhc093blByb3BlcnR5O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgZ2V0XG4gICAqIEBtZW1iZXJPZiBIYXNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICBpZiAoX25hdGl2ZUNyZWF0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEJDEgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eSQyLmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfaGFzaEdldCA9IGhhc2hHZXQ7XG5cbiAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICB2YXIgb2JqZWN0UHJvdG8kMSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gIHZhciBoYXNPd25Qcm9wZXJ0eSQxID0gb2JqZWN0UHJvdG8kMS5oYXNPd25Qcm9wZXJ0eTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbmFtZSBoYXNcbiAgICogQG1lbWJlck9mIEhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgIHJldHVybiBfbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5JDEuY2FsbChkYXRhLCBrZXkpO1xuICB9XG5cbiAgdmFyIF9oYXNoSGFzID0gaGFzaEhhcztcblxuICAvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG4gIHZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuICAvKipcbiAgICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbmFtZSBzZXRcbiAgICogQG1lbWJlck9mIEhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgIGRhdGFba2V5XSA9IChfbmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBfaGFzaFNldCA9IGhhc2hTZXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgKi9cbiAgZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbiAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBfaGFzaENsZWFyO1xuICBIYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfaGFzaERlbGV0ZTtcbiAgSGFzaC5wcm90b3R5cGUuZ2V0ID0gX2hhc2hHZXQ7XG4gIEhhc2gucHJvdG90eXBlLmhhcyA9IF9oYXNoSGFzO1xuICBIYXNoLnByb3RvdHlwZS5zZXQgPSBfaGFzaFNldDtcblxuICB2YXIgX0hhc2ggPSBIYXNoO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbmFtZSBjbGVhclxuICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAqL1xuICBmdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgICB0aGlzLl9fZGF0YV9fID0gW107XG4gICAgdGhpcy5zaXplID0gMDtcbiAgfVxuXG4gIHZhciBfbGlzdENhY2hlQ2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcblxuICAvKipcbiAgICogUGVyZm9ybXMgYVxuICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgNC4wLjBcbiAgICogQGNhdGVnb3J5IExhbmdcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAqXG4gICAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqXG4gICAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIF8uZXEoJ2EnLCAnYScpO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqXG4gICAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIF8uZXEoTmFOLCBOYU4pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqL1xuICBmdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbiAgfVxuXG4gIHZhciBlcV8xID0gZXE7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChlcV8xKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIF9hc3NvY0luZGV4T2YgPSBhc3NvY0luZGV4T2Y7XG5cbiAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuICAvKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgZGVsZXRlXG4gICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgIGluZGV4ID0gX2Fzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICAgIGRhdGEucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgICB9XG4gICAgLS10aGlzLnNpemU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgX2xpc3RDYWNoZURlbGV0ZSA9IGxpc3RDYWNoZURlbGV0ZTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBuYW1lIGdldFxuICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICBpbmRleCA9IF9hc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbiAgfVxuXG4gIHZhciBfbGlzdENhY2hlR2V0ID0gbGlzdENhY2hlR2V0O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBuYW1lIGhhc1xuICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgcmV0dXJuIF9hc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xuICB9XG5cbiAgdmFyIF9saXN0Q2FjaGVIYXMgPSBsaXN0Q2FjaGVIYXM7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgc2V0XG4gICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICBpbmRleCA9IF9hc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICsrdGhpcy5zaXplO1xuICAgICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIF9saXN0Q2FjaGVTZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICovXG4gIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICBMaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gX2xpc3RDYWNoZUNsZWFyO1xuICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IF9saXN0Q2FjaGVEZWxldGU7XG4gIExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX2xpc3RDYWNoZUdldDtcbiAgTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBfbGlzdENhY2hlSGFzO1xuICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IF9saXN0Q2FjaGVTZXQ7XG5cbiAgdmFyIF9MaXN0Q2FjaGUgPSBMaXN0Q2FjaGU7XG5cbiAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICB2YXIgTWFwJDEgPSBfZ2V0TmF0aXZlKF9yb290LCAnTWFwJyk7XG5cbiAgdmFyIF9NYXAgPSBNYXAkMTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbmFtZSBjbGVhclxuICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICovXG4gIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgJ2hhc2gnOiBuZXcgX0hhc2gsXG4gICAgICAnbWFwJzogbmV3IChfTWFwIHx8IF9MaXN0Q2FjaGUpLFxuICAgICAgJ3N0cmluZyc6IG5ldyBfSGFzaFxuICAgIH07XG4gIH1cblxuICB2YXIgX21hcENhY2hlQ2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG4gIH1cblxuICB2YXIgX2lzS2V5YWJsZSA9IGlzS2V5YWJsZTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICAgIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICAgIHJldHVybiBfaXNLZXlhYmxlKGtleSlcbiAgICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgICA6IGRhdGEubWFwO1xuICB9XG5cbiAgdmFyIF9nZXRNYXBEYXRhID0gZ2V0TWFwRGF0YTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgZGVsZXRlXG4gICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gICAgdmFyIHJlc3VsdCA9IF9nZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgX21hcENhY2hlRGVsZXRlID0gbWFwQ2FjaGVEZWxldGU7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBuYW1lIGdldFxuICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICAgIHJldHVybiBfZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xuICB9XG5cbiAgdmFyIF9tYXBDYWNoZUdldCA9IG1hcENhY2hlR2V0O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG5hbWUgaGFzXG4gICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gICAgcmV0dXJuIF9nZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gIH1cblxuICB2YXIgX21hcENhY2hlSGFzID0gbWFwQ2FjaGVIYXM7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbmFtZSBzZXRcbiAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IF9nZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBfbWFwQ2FjaGVTZXQgPSBtYXBDYWNoZVNldDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAqL1xuICBmdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gIE1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IF9tYXBDYWNoZUNsZWFyO1xuICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX21hcENhY2hlRGVsZXRlO1xuICBNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX21hcENhY2hlR2V0O1xuICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gX21hcENhY2hlSGFzO1xuICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gX21hcENhY2hlU2V0O1xuXG4gIHZhciBfTWFwQ2FjaGUgPSBNYXBDYWNoZTtcblxuICAvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG4gIHZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gICAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gICAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gICAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICAgKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICAgKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMC4xLjBcbiAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICAgKlxuICAgKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAgICogdmFsdWVzKG9iamVjdCk7XG4gICAqIC8vID0+IFsxLCAyXVxuICAgKlxuICAgKiB2YWx1ZXMob3RoZXIpO1xuICAgKiAvLyA9PiBbMywgNF1cbiAgICpcbiAgICogb2JqZWN0LmEgPSAyO1xuICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICogLy8gPT4gWzEsIDJdXG4gICAqXG4gICAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICAgKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAqIHZhbHVlcyhvYmplY3QpO1xuICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gICAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gICAqL1xuICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgfVxuICAgIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9NYXBDYWNoZSk7XG4gICAgcmV0dXJuIG1lbW9pemVkO1xuICB9XG5cbiAgLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG4gIG1lbW9pemUuQ2FjaGUgPSBfTWFwQ2FjaGU7XG5cbiAgdmFyIG1lbW9pemVfMSA9IG1lbW9pemU7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xuICB2YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICAgKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gICAgdmFyIHJlc3VsdCA9IG1lbW9pemVfMShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH0pO1xuXG4gICAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgX21lbW9pemVDYXBwZWQgPSBtZW1vaXplQ2FwcGVkO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgKi9cbiAgdmFyIHN0cmluZ1RvUGF0aCA9IF9tZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgICB9XG4gICAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHZhciBfc3RyaW5nVG9QYXRoID0gc3RyaW5nVG9QYXRoO1xuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAgICogc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBfYXJyYXlNYXAgPSBhcnJheU1hcDtcblxuICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbiAgdmFyIElORklOSVRZJDEgPSAxIC8gMDtcblxuICAvKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbiAgdmFyIHN5bWJvbFByb3RvID0gX1N5bWJvbCA/IF9TeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAgICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheV8xKHZhbHVlKSkge1xuICAgICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHJldHVybiBfYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sXzEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkkMSkgPyAnLTAnIDogcmVzdWx0O1xuICB9XG5cbiAgdmFyIF9iYXNlVG9TdHJpbmcgPSBiYXNlVG9TdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gICAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBtZW1iZXJPZiBfXG4gICAqIEBzaW5jZSA0LjAuMFxuICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBfLnRvU3RyaW5nKG51bGwpO1xuICAgKiAvLyA9PiAnJ1xuICAgKlxuICAgKiBfLnRvU3RyaW5nKC0wKTtcbiAgICogLy8gPT4gJy0wJ1xuICAgKlxuICAgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gICAqIC8vID0+ICcxLDIsMydcbiAgICovXG4gIGZ1bmN0aW9uIHRvU3RyaW5nJDEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogX2Jhc2VUb1N0cmluZyh2YWx1ZSk7XG4gIH1cblxuICB2YXIgdG9TdHJpbmdfMSA9IHRvU3RyaW5nJDE7XG5cbiAgLyoqXG4gICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgaWYgKGlzQXJyYXlfMSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF9pc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBfc3RyaW5nVG9QYXRoKHRvU3RyaW5nXzEodmFsdWUpKTtcbiAgfVxuXG4gIHZhciBfY2FzdFBhdGggPSBjYXN0UGF0aDtcblxuICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbiAgdmFyIElORklOSVRZID0gMSAvIDA7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAgICovXG4gIGZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbF8xKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbiAgfVxuXG4gIHZhciBfdG9LZXkgPSB0b0tleTtcblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtfdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICAgIH1cbiAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX2Jhc2VHZXQgPSBiYXNlR2V0O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICAgKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMy43LjBcbiAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICpcbiAgICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAgICogLy8gPT4gM1xuICAgKlxuICAgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICogLy8gPT4gM1xuICAgKlxuICAgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gICAqIC8vID0+ICdkZWZhdWx0J1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogX2Jhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG4gIH1cblxuICB2YXIgZ2V0XzEgPSBnZXQ7XG5cbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZnVuYyA9IF9nZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgICByZXR1cm4gZnVuYztcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9KCkpO1xuXG4gIHZhciBfZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eTtcblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAgICogdmFsdWUgY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX2RlZmluZVByb3BlcnR5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBfYmFzZUFzc2lnblZhbHVlID0gYmFzZUFzc2lnblZhbHVlO1xuXG4gIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuICAvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbiAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLyoqXG4gICAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgKi9cbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXFfMShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgX2Jhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBfYXNzaWduVmFsdWUgPSBhc3NpZ25WYWx1ZTtcblxuICAvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbiAgdmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG4gIH1cblxuICB2YXIgX2lzSW5kZXggPSBpc0luZGV4O1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICBpZiAoIWlzT2JqZWN0XzEob2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gICAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGtleSA9IF90b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgICAgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwga2V5LCBuZXN0ZWQpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3RfMShvYmpWYWx1ZSlcbiAgICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICAgIDogKF9pc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2Fzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBfYmFzZVNldCA9IGJhc2VTZXQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICAgKiBpdCdzIGNyZWF0ZWQuIEFycmF5cyBhcmUgY3JlYXRlZCBmb3IgbWlzc2luZyBpbmRleCBwcm9wZXJ0aWVzIHdoaWxlIG9iamVjdHNcbiAgICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAgICogYHBhdGhgIGNyZWF0aW9uLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMy43LjBcbiAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAqXG4gICAqIF8uc2V0KG9iamVjdCwgJ2FbMF0uYi5jJywgNCk7XG4gICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAqIC8vID0+IDRcbiAgICpcbiAgICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAqIC8vID0+IDVcbiAgICovXG4gIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogX2Jhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICB2YXIgc2V0XzEgPSBzZXQ7XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgKi9cbiAgZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICAgIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB2YXIgX2NvcHlBcnJheSA9IGNvcHlBcnJheTtcblxuICAvKipcbiAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDQuMC4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIF8udG9QYXRoKCdhLmIuYycpO1xuICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICpcbiAgICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gICAqIC8vID0+IFsnYScsICcwJywgJ2InLCAnYyddXG4gICAqL1xuICBmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgICBpZiAoaXNBcnJheV8xKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIF9hcnJheU1hcCh2YWx1ZSwgX3RvS2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzU3ltYm9sXzEodmFsdWUpID8gW3ZhbHVlXSA6IF9jb3B5QXJyYXkoX3N0cmluZ1RvUGF0aCh0b1N0cmluZ18xKHZhbHVlKSkpO1xuICB9XG5cbiAgdmFyIHRvUGF0aF8xID0gdG9QYXRoO1xuXG4gIHZhciBkZWZpbmUkMiA9IHtcbiAgICAvLyBhY2Nlc3MgZGF0YSBmaWVsZFxuICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEocGFyYW1zKSB7XG4gICAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgIGZpZWxkOiAnZGF0YScsXG4gICAgICAgIGJpbmRpbmdFdmVudDogJ2RhdGEnLFxuICAgICAgICBhbGxvd0JpbmRpbmc6IGZhbHNlLFxuICAgICAgICBhbGxvd1NldHRpbmc6IGZhbHNlLFxuICAgICAgICBhbGxvd0dldHRpbmc6IGZhbHNlLFxuICAgICAgICBzZXR0aW5nRXZlbnQ6ICdkYXRhJyxcbiAgICAgICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IGZhbHNlLFxuICAgICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICAgIGltbXV0YWJsZUtleXM6IHt9LFxuICAgICAgICAvLyBrZXkgPT4gdHJ1ZSBpZiBpbW11dGFibGVcbiAgICAgICAgdXBkYXRlU3R5bGU6IGZhbHNlLFxuICAgICAgICBiZWZvcmVHZXQ6IGZ1bmN0aW9uIGJlZm9yZUdldChzZWxmKSB7fSxcbiAgICAgICAgYmVmb3JlU2V0OiBmdW5jdGlvbiBiZWZvcmVTZXQoc2VsZiwgb2JqKSB7fSxcbiAgICAgICAgb25TZXQ6IGZ1bmN0aW9uIG9uU2V0KHNlbGYpIHt9LFxuICAgICAgICBjYW5TZXQ6IGZ1bmN0aW9uIGNhblNldChzZWxmKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRhdGFJbXBsKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBwID0gcGFyYW1zO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG5cbiAgICAgICAgdmFyIHNpbmdsZSA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGZbMF0gOiBzZWxmOyAvLyAuZGF0YSgnZm9vJywgLi4uKVxuXG4gICAgICAgIGlmIChzdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAvLyBzZXQgb3IgZ2V0IHByb3BlcnR5XG4gICAgICAgICAgdmFyIGlzUGF0aExpa2UgPSBuYW1lLmluZGV4T2YoJy4nKSAhPT0gLTE7IC8vIHRoZXJlIG1pZ2h0IGJlIGEgbm9ybWFsIGZpZWxkIHdpdGggYSBkb3QgXG5cbiAgICAgICAgICB2YXIgcGF0aCA9IGlzUGF0aExpa2UgJiYgdG9QYXRoXzEobmFtZSk7IC8vIC5kYXRhKCdmb28nKVxuXG4gICAgICAgICAgaWYgKHAuYWxsb3dHZXR0aW5nICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGdldFxuICAgICAgICAgICAgdmFyIHJldDtcblxuICAgICAgICAgICAgaWYgKHNpbmdsZSkge1xuICAgICAgICAgICAgICBwLmJlZm9yZUdldChzaW5nbGUpOyAvLyBjaGVjayBpZiBpdCdzIHBhdGggYW5kIGEgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lIGRvZXNuJ3QgZXhpc3RcblxuICAgICAgICAgICAgICBpZiAocGF0aCAmJiBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF1bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldCA9IGdldF8xKHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXSwgcGF0aCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXQ7IC8vIC5kYXRhKCdmb28nLCAnYmFyJylcbiAgICAgICAgICB9IGVsc2UgaWYgKHAuYWxsb3dTZXR0aW5nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldFxuICAgICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1tuYW1lXTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBfZGVmaW5lUHJvcGVydHkkMSh7fSwgbmFtZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgIHAuYmVmb3JlU2V0KHNlbGYsIGNoYW5nZSk7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhbGwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZSA9IGFsbFtpXTtcblxuICAgICAgICAgICAgICAgIGlmIChwLmNhblNldChlbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF1bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRfMShlbGUuX3ByaXZhdGVbcC5maWVsZF0sIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5fcHJpdmF0ZVtwLmZpZWxkXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSAvLyB1cGRhdGUgbWFwcGVycyBpZiBhc2tlZFxuXG5cbiAgICAgICAgICAgICAgaWYgKHAudXBkYXRlU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgICAgICAgIH0gLy8gY2FsbCBvblNldCBjYWxsYmFja1xuXG5cbiAgICAgICAgICAgICAgcC5vblNldChzZWxmKTtcblxuICAgICAgICAgICAgICBpZiAocC5zZXR0aW5nVHJpZ2dlcnNFdmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLnNldHRpbmdFdmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIC5kYXRhKHsgJ2Zvbyc6ICdiYXInIH0pXG5cbiAgICAgICAgfSBlbHNlIGlmIChwLmFsbG93U2V0dGluZyAmJiBwbGFpbk9iamVjdChuYW1lKSkge1xuICAgICAgICAgIC8vIGV4dGVuZFxuICAgICAgICAgIHZhciBvYmogPSBuYW1lO1xuICAgICAgICAgIHZhciBrLCB2O1xuICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgICBwLmJlZm9yZVNldChzZWxmLCBvYmopO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBrID0ga2V5c1tfaV07XG4gICAgICAgICAgICB2ID0gb2JqW2tdO1xuXG4gICAgICAgICAgICB2YXIgX3ZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1trXTtcblxuICAgICAgICAgICAgaWYgKF92YWxpZCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBfZWxlID0gYWxsW2pdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHAuY2FuU2V0KF9lbGUpKSB7XG4gICAgICAgICAgICAgICAgICBfZWxlLl9wcml2YXRlW3AuZmllbGRdW2tdID0gdjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIHVwZGF0ZSBtYXBwZXJzIGlmIGFza2VkXG5cblxuICAgICAgICAgIGlmIChwLnVwZGF0ZVN0eWxlKSB7XG4gICAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgICAgfSAvLyBjYWxsIG9uU2V0IGNhbGxiYWNrXG5cblxuICAgICAgICAgIHAub25TZXQoc2VsZik7XG5cbiAgICAgICAgICBpZiAocC5zZXR0aW5nVHJpZ2dlcnNFdmVudCkge1xuICAgICAgICAgICAgc2VsZltwLnRyaWdnZXJGbk5hbWVdKHAuc2V0dGluZ0V2ZW50KTtcbiAgICAgICAgICB9IC8vIC5kYXRhKGZ1bmN0aW9uKCl7IC4uLiB9KVxuXG4gICAgICAgIH0gZWxzZSBpZiAocC5hbGxvd0JpbmRpbmcgJiYgZm4kNihuYW1lKSkge1xuICAgICAgICAgIC8vIGJpbmQgdG8gZXZlbnRcbiAgICAgICAgICB2YXIgZm4gPSBuYW1lO1xuICAgICAgICAgIHNlbGYub24ocC5iaW5kaW5nRXZlbnQsIGZuKTsgLy8gLmRhdGEoKVxuICAgICAgICB9IGVsc2UgaWYgKHAuYWxsb3dHZXR0aW5nICYmIG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGdldCB3aG9sZSBvYmplY3RcbiAgICAgICAgICB2YXIgX3JldDtcblxuICAgICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgIHAuYmVmb3JlR2V0KHNpbmdsZSk7XG4gICAgICAgICAgICBfcmV0ID0gc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfcmV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGY7IC8vIG1haW50YWluIGNoYWluYWJpbGl0eVxuICAgICAgfTsgLy8gZnVuY3Rpb25cbiAgICB9LFxuICAgIC8vIGRhdGFcbiAgICAvLyByZW1vdmUgZGF0YSBmaWVsZFxuICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uIHJlbW92ZURhdGEocGFyYW1zKSB7XG4gICAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgIGZpZWxkOiAnZGF0YScsXG4gICAgICAgIGV2ZW50OiAnZGF0YScsXG4gICAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgICAgdHJpZ2dlckV2ZW50OiBmYWxzZSxcbiAgICAgICAgaW1tdXRhYmxlS2V5czoge30gLy8ga2V5ID0+IHRydWUgaWYgaW1tdXRhYmxlXG5cbiAgICAgIH07XG4gICAgICBwYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbW92ZURhdGFJbXBsKG5hbWVzKSB7XG4gICAgICAgIHZhciBwID0gcGFyYW1zO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICAgIC8vIC5yZW1vdmVEYXRhKCdmb28gYmFyJylcblxuICAgICAgICBpZiAoc3RyaW5nKG5hbWVzKSkge1xuICAgICAgICAgIC8vIHRoZW4gZ2V0IHRoZSBsaXN0IG9mIGtleXMsIGFuZCBkZWxldGUgdGhlbVxuICAgICAgICAgIHZhciBrZXlzID0gbmFtZXMuc3BsaXQoL1xccysvKTtcbiAgICAgICAgICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIC8vIGRlbGV0ZSBlYWNoIG5vbi1lbXB0eSBrZXlcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICAgICAgICBpZiAoZW1wdHlTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1trZXldOyAvLyBub3QgdmFsaWQgaWYgaW1tdXRhYmxlXG5cbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpX2EgPSAwLCBsX2EgPSBhbGwubGVuZ3RoOyBpX2EgPCBsX2E7IGlfYSsrKSB7XG4gICAgICAgICAgICAgICAgYWxsW2lfYV0uX3ByaXZhdGVbcC5maWVsZF1ba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwLnRyaWdnZXJFdmVudCkge1xuICAgICAgICAgICAgc2VsZltwLnRyaWdnZXJGbk5hbWVdKHAuZXZlbnQpO1xuICAgICAgICAgIH0gLy8gLnJlbW92ZURhdGEoKVxuXG4gICAgICAgIH0gZWxzZSBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoZW4gZGVsZXRlIGFsbCBrZXlzXG4gICAgICAgICAgZm9yICh2YXIgX2lfYSA9IDAsIF9sX2EgPSBhbGwubGVuZ3RoOyBfaV9hIDwgX2xfYTsgX2lfYSsrKSB7XG4gICAgICAgICAgICB2YXIgX3ByaXZhdGVGaWVsZHMgPSBhbGxbX2lfYV0uX3ByaXZhdGVbcC5maWVsZF07XG5cbiAgICAgICAgICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzKF9wcml2YXRlRmllbGRzKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2tleXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgICAgICB2YXIgX2tleSA9IF9rZXlzW19pMl07XG4gICAgICAgICAgICAgIHZhciB2YWxpZEtleVRvRGVsZXRlID0gIXAuaW1tdXRhYmxlS2V5c1tfa2V5XTtcblxuICAgICAgICAgICAgICBpZiAodmFsaWRLZXlUb0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgIF9wcml2YXRlRmllbGRzW19rZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAudHJpZ2dlckV2ZW50KSB7XG4gICAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5ldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGY7IC8vIG1haW50YWluIGNoYWluaW5nXG4gICAgICB9OyAvLyBmdW5jdGlvblxuICAgIH0gLy8gcmVtb3ZlRGF0YVxuXG4gIH07IC8vIGRlZmluZVxuXG4gIHZhciBkZWZpbmUkMSA9IHtcbiAgICBldmVudEFsaWFzZXNPbjogZnVuY3Rpb24gZXZlbnRBbGlhc2VzT24ocHJvdG8pIHtcbiAgICAgIHZhciBwID0gcHJvdG87XG4gICAgICBwLmFkZExpc3RlbmVyID0gcC5saXN0ZW4gPSBwLmJpbmQgPSBwLm9uO1xuICAgICAgcC51bmxpc3RlbiA9IHAudW5iaW5kID0gcC5vZmYgPSBwLnJlbW92ZUxpc3RlbmVyO1xuICAgICAgcC50cmlnZ2VyID0gcC5lbWl0OyAvLyB0aGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFsaWFzIG9mIC5vbigpXG5cbiAgICAgIHAucG9uID0gcC5wcm9taXNlT24gPSBmdW5jdGlvbiAoZXZlbnRzLCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKGUpIHtcbiAgICAgICAgICAgIHNlbGYub2ZmLmFwcGx5KHNlbGYsIG9mZkFyZ3MpO1xuICAgICAgICAgICAgcmVzb2x2ZShlKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdmFyIG9uQXJncyA9IGFyZ3MuY29uY2F0KFtjYWxsYmFja10pO1xuICAgICAgICAgIHZhciBvZmZBcmdzID0gb25BcmdzLmNvbmNhdChbXSk7XG4gICAgICAgICAgc2VsZi5vbi5hcHBseShzZWxmLCBvbkFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9OyAvLyBkZWZpbmVcblxuICAvLyB1c2UgdGhpcyBtb2R1bGUgdG8gY2hlcnJ5IHBpY2sgZnVuY3Rpb25zIGludG8geW91ciBwcm90b3R5cGVcbiAgdmFyIGRlZmluZSA9IHt9O1xuICBbZGVmaW5lJDMsIGRlZmluZSQyLCBkZWZpbmUkMV0uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIGV4dGVuZChkZWZpbmUsIG0pO1xuICB9KTtcblxuICB2YXIgZWxlc2ZuJGkgPSB7XG4gICAgYW5pbWF0ZTogZGVmaW5lLmFuaW1hdGUoKSxcbiAgICBhbmltYXRpb246IGRlZmluZS5hbmltYXRpb24oKSxcbiAgICBhbmltYXRlZDogZGVmaW5lLmFuaW1hdGVkKCksXG4gICAgY2xlYXJRdWV1ZTogZGVmaW5lLmNsZWFyUXVldWUoKSxcbiAgICBkZWxheTogZGVmaW5lLmRlbGF5KCksXG4gICAgZGVsYXlBbmltYXRpb246IGRlZmluZS5kZWxheUFuaW1hdGlvbigpLFxuICAgIHN0b3A6IGRlZmluZS5zdG9wKClcbiAgfTtcblxuICB2YXIgZWxlc2ZuJGggPSB7XG4gICAgY2xhc3NlczogZnVuY3Rpb24gY2xhc3NlcyhfY2xhc3Nlcykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICBpZiAoX2NsYXNzZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgcmV0ID0gW107XG5cbiAgICAgICAgc2VsZlswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgICAgIHJldHVybiByZXQucHVzaChjbHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSBlbHNlIGlmICghYXJyYXkoX2NsYXNzZXMpKSB7XG4gICAgICAgIC8vIGV4dHJhY3QgY2xhc3NlcyBmcm9tIHN0cmluZ1xuICAgICAgICBfY2xhc3NlcyA9IChfY2xhc3NlcyB8fCAnJykubWF0Y2goL1xcUysvZykgfHwgW107XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGFuZ2VkID0gW107XG4gICAgICB2YXIgY2xhc3Nlc1NldCA9IG5ldyBTZXQkMShfY2xhc3Nlcyk7IC8vIGNoZWNrIGFuZCB1cGRhdGUgZWFjaCBlbGVcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlbGUgPSBzZWxmW2pdO1xuICAgICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICAgIHZhciBlbGVDbGFzc2VzID0gX3AuY2xhc3NlcztcbiAgICAgICAgdmFyIGNoYW5nZWRFbGUgPSBmYWxzZTsgLy8gY2hlY2sgaWYgZWxlIGhhcyBhbGwgb2YgdGhlIHBhc3NlZCBjbGFzc2VzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjbHMgPSBfY2xhc3Nlc1tpXTtcbiAgICAgICAgICB2YXIgZWxlSGFzQ2xhc3MgPSBlbGVDbGFzc2VzLmhhcyhjbHMpO1xuXG4gICAgICAgICAgaWYgKCFlbGVIYXNDbGFzcykge1xuICAgICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gY2hlY2sgaWYgZWxlIGhhcyBjbGFzc2VzIG91dHNpZGUgb2YgdGhvc2UgcGFzc2VkXG5cblxuICAgICAgICBpZiAoIWNoYW5nZWRFbGUpIHtcbiAgICAgICAgICBjaGFuZ2VkRWxlID0gZWxlQ2xhc3Nlcy5zaXplICE9PSBfY2xhc3Nlcy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlZEVsZSkge1xuICAgICAgICAgIF9wLmNsYXNzZXMgPSBjbGFzc2VzU2V0O1xuICAgICAgICAgIGNoYW5nZWQucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9IC8vIHRyaWdnZXIgdXBkYXRlIHN0eWxlIG9uIHRob3NlIGVsZXMgdGhhdCBoYWQgY2xhc3MgY2hhbmdlc1xuXG5cbiAgICAgIGlmIChjaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zcGF3bihjaGFuZ2VkKS51cGRhdGVTdHlsZSgpLmVtaXQoJ2NsYXNzJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH0sXG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzZXMsIHRydWUpO1xuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICByZXR1cm4gZWxlICE9IG51bGwgJiYgZWxlLl9wcml2YXRlLmNsYXNzZXMuaGFzKGNsYXNzTmFtZSk7XG4gICAgfSxcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoY2xhc3NlcywgdG9nZ2xlKSB7XG4gICAgICBpZiAoIWFycmF5KGNsYXNzZXMpKSB7XG4gICAgICAgIC8vIGV4dHJhY3QgY2xhc3NlcyBmcm9tIHN0cmluZ1xuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5tYXRjaCgvXFxTKy9nKSB8fCBbXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHRvZ2dsZVVuZGVmZCA9IHRvZ2dsZSA9PT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGNoYW5nZWQgPSBbXTsgLy8gZWxlcyB3aG8gaGFkIGNsYXNzZXMgY2hhbmdlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBzZWxmLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHNlbGZbaV07XG4gICAgICAgIHZhciBlbGVDbGFzc2VzID0gZWxlLl9wcml2YXRlLmNsYXNzZXM7XG4gICAgICAgIHZhciBjaGFuZ2VkRWxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGNscyA9IGNsYXNzZXNbal07XG4gICAgICAgICAgdmFyIGhhc0NsYXNzID0gZWxlQ2xhc3Nlcy5oYXMoY2xzKTtcbiAgICAgICAgICB2YXIgY2hhbmdlZE5vdyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRvZ2dsZSB8fCB0b2dnbGVVbmRlZmQgJiYgIWhhc0NsYXNzKSB7XG4gICAgICAgICAgICBlbGVDbGFzc2VzLmFkZChjbHMpO1xuICAgICAgICAgICAgY2hhbmdlZE5vdyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghdG9nZ2xlIHx8IHRvZ2dsZVVuZGVmZCAmJiBoYXNDbGFzcykge1xuICAgICAgICAgICAgZWxlQ2xhc3Nlc1tcImRlbGV0ZVwiXShjbHMpO1xuICAgICAgICAgICAgY2hhbmdlZE5vdyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjaGFuZ2VkRWxlICYmIGNoYW5nZWROb3cpIHtcbiAgICAgICAgICAgIGNoYW5nZWQucHVzaChlbGUpO1xuICAgICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGZvciBqIGNsYXNzZXNcblxuICAgICAgfSAvLyBmb3IgaSBlbGVzXG4gICAgICAvLyB0cmlnZ2VyIHVwZGF0ZSBzdHlsZSBvbiB0aG9zZSBlbGVzIHRoYXQgaGFkIGNsYXNzIGNoYW5nZXNcblxuXG4gICAgICBpZiAoY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3Bhd24oY2hhbmdlZCkudXBkYXRlU3R5bGUoKS5lbWl0KCdjbGFzcycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhjbGFzc2VzLCBmYWxzZSk7XG4gICAgfSxcbiAgICBmbGFzaENsYXNzOiBmdW5jdGlvbiBmbGFzaENsYXNzKGNsYXNzZXMsIGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIGR1cmF0aW9uID0gMjUwO1xuICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc2VsZjsgLy8gbm90aGluZyB0byBkbyByZWFsbHlcbiAgICAgIH1cblxuICAgICAgc2VsZi5hZGRDbGFzcyhjbGFzc2VzKTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnJlbW92ZUNsYXNzKGNsYXNzZXMpO1xuICAgICAgfSwgZHVyYXRpb24pO1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICB9O1xuICBlbGVzZm4kaC5jbGFzc05hbWUgPSBlbGVzZm4kaC5jbGFzc05hbWVzID0gZWxlc2ZuJGguY2xhc3NlcztcblxuICB2YXIgdG9rZW5zID0ge1xuICAgIG1ldGFDaGFyOiAnW1xcXFwhXFxcXFwiXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwuXFxcXC9cXFxcOlxcXFw7XFxcXDxcXFxcPVxcXFw+XFxcXD9cXFxcQFxcXFxbXFxcXF1cXFxcXlxcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dJyxcbiAgICAvLyBjaGFycyB3ZSBuZWVkIHRvIGVzY2FwZSBpbiBsZXQgbmFtZXMsIGV0Y1xuICAgIGNvbXBhcmF0b3JPcDogJz18XFxcXCE9fD58Pj18PHw8PXxcXFxcJD18XFxcXF49fFxcXFwqPScsXG4gICAgLy8gYmluYXJ5IGNvbXBhcmlzb24gb3AgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpXG4gICAgYm9vbE9wOiAnXFxcXD98XFxcXCF8XFxcXF4nLFxuICAgIC8vIGJvb2xlYW4gKHVuYXJ5KSBvcGVyYXRvcnMgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpXG4gICAgc3RyaW5nOiAnXCIoPzpcXFxcXFxcXFwifFteXCJdKSpcIicgKyAnfCcgKyBcIicoPzpcXFxcXFxcXCd8W14nXSkqJ1wiLFxuICAgIC8vIHN0cmluZyBsaXRlcmFscyAodXNlZCBpbiBkYXRhIHNlbGVjdG9ycykgLS0gZG91YmxlcXVvdGVzIHwgc2luZ2xlcXVvdGVzXG4gICAgbnVtYmVyOiBudW1iZXIsXG4gICAgLy8gbnVtYmVyIGxpdGVyYWwgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tLSBlLmcuIDAuMTIzNCwgMTIzNCwgMTJlMTIzXG4gICAgbWV0YTogJ2RlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUnLFxuICAgIC8vIGFsbG93ZWQgbWV0YWRhdGEgZmllbGRzIChpLmUuIGFsbG93ZWQgZnVuY3Rpb25zIHRvIHVzZSBmcm9tIENvbGxlY3Rpb24pXG4gICAgc2VwYXJhdG9yOiAnXFxcXHMqLFxcXFxzKicsXG4gICAgLy8gcXVlcmllcyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgZS5nLiBlZGdlW2ZvbyA9ICdiYXInXSwgbm9kZS5zb21lQ2xhc3NcbiAgICBkZXNjZW5kYW50OiAnXFxcXHMrJyxcbiAgICBjaGlsZDogJ1xcXFxzKz5cXFxccysnLFxuICAgIHN1YmplY3Q6ICdcXFxcJCcsXG4gICAgZ3JvdXA6ICdub2RlfGVkZ2V8XFxcXConLFxuICAgIGRpcmVjdGVkRWRnZTogJ1xcXFxzKy0+XFxcXHMrJyxcbiAgICB1bmRpcmVjdGVkRWRnZTogJ1xcXFxzKzwtPlxcXFxzKydcbiAgfTtcbiAgdG9rZW5zLnZhcmlhYmxlID0gJyg/OltcXFxcdy0uXXwoPzpcXFxcXFxcXCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKSkrJzsgLy8gYSB2YXJpYWJsZSBuYW1lIGNhbiBoYXZlIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcywgYW5kIHBlcmlvZHNcblxuICB0b2tlbnMuY2xhc3NOYW1lID0gJyg/OltcXFxcdy1dfCg/OlxcXFxcXFxcJyArIHRva2Vucy5tZXRhQ2hhciArICcpKSsnOyAvLyBhIGNsYXNzIG5hbWUgaGFzIHRoZSBzYW1lIHJ1bGVzIGFzIGEgdmFyaWFibGUgZXhjZXB0IGl0IGNhbid0IGhhdmUgYSAnLicgaW4gdGhlIG5hbWVcblxuICB0b2tlbnMudmFsdWUgPSB0b2tlbnMuc3RyaW5nICsgJ3wnICsgdG9rZW5zLm51bWJlcjsgLy8gYSB2YWx1ZSBsaXRlcmFsLCBlaXRoZXIgYSBzdHJpbmcgb3IgbnVtYmVyXG5cbiAgdG9rZW5zLmlkID0gdG9rZW5zLnZhcmlhYmxlOyAvLyBhbiBlbGVtZW50IGlkIChmb2xsb3dzIHZhcmlhYmxlIGNvbnZlbnRpb25zKVxuXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wcywgb3AsIGk7IC8vIGFkZCBAIHZhcmlhbnRzIHRvIGNvbXBhcmF0b3JPcFxuXG4gICAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3AgPSBvcHNbaV07XG4gICAgICB0b2tlbnMuY29tcGFyYXRvck9wICs9ICd8QCcgKyBvcDtcbiAgICB9IC8vIGFkZCAhIHZhcmlhbnRzIHRvIGNvbXBhcmF0b3JPcFxuXG5cbiAgICBvcHMgPSB0b2tlbnMuY29tcGFyYXRvck9wLnNwbGl0KCd8Jyk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvcCA9IG9wc1tpXTtcblxuICAgICAgaWYgKG9wLmluZGV4T2YoJyEnKSA+PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBza2lwIG9wcyB0aGF0IGV4cGxpY2l0bHkgY29udGFpbiAhXG5cblxuICAgICAgaWYgKG9wID09PSAnPScpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHNraXAgPSBiL2MgIT0gaXMgZXhwbGljaXRseSBkZWZpbmVkXG5cblxuICAgICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfFxcXFwhJyArIG9wO1xuICAgIH1cbiAgfSkoKTtcblxuICAvKipcbiAgICogTWFrZSBhIG5ldyBxdWVyeSBvYmplY3RcbiAgICpcbiAgICogQHByb3AgdHlwZSB7VHlwZX0gVGhlIHR5cGUgZW51bSAoaW50KSBvZiB0aGUgcXVlcnlcbiAgICogQHByb3AgY2hlY2tzIExpc3Qgb2YgY2hlY2tzIHRvIG1ha2UgYWdhaW5zdCBhbiBlbGUgdG8gdGVzdCBmb3IgYSBtYXRjaFxuICAgKi9cbiAgdmFyIG5ld1F1ZXJ5ID0gZnVuY3Rpb24gbmV3UXVlcnkoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrczogW11cbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIGNoZWNrIHR5cGUgZW51bS1saWtlIG9iamVjdC4gIFVzZXMgaW50ZWdlciB2YWx1ZXMgZm9yIGZhc3QgbWF0Y2goKSBsb29rdXAuXG4gICAqIFRoZSBvcmRlcmluZyBkb2VzIG5vdCBtYXR0ZXIgYXMgbG9uZyBhcyB0aGUgaW50cyBhcmUgdW5pcXVlLlxuICAgKi9cbiAgdmFyIFR5cGUgPSB7XG4gICAgLyoqIEUuZy4gbm9kZSAqL1xuICAgIEdST1VQOiAwLFxuXG4gICAgLyoqIEEgY29sbGVjdGlvbiBvZiBlbGVtZW50cyAqL1xuICAgIENPTExFQ1RJT046IDEsXG5cbiAgICAvKiogQSBmaWx0ZXIoZWxlKSBmdW5jdGlvbiAqL1xuICAgIEZJTFRFUjogMixcblxuICAgIC8qKiBFLmcuIFtmb28gPiAxXSAqL1xuICAgIERBVEFfQ09NUEFSRTogMyxcblxuICAgIC8qKiBFLmcuIFtmb29dICovXG4gICAgREFUQV9FWElTVDogNCxcblxuICAgIC8qKiBFLmcuIFs/Zm9vXSAqL1xuICAgIERBVEFfQk9PTDogNSxcblxuICAgIC8qKiBFLmcuIFtbZGVncmVlID4gMl1dICovXG4gICAgTUVUQV9DT01QQVJFOiA2LFxuXG4gICAgLyoqIEUuZy4gOnNlbGVjdGVkICovXG4gICAgU1RBVEU6IDcsXG5cbiAgICAvKiogRS5nLiAjZm9vICovXG4gICAgSUQ6IDgsXG5cbiAgICAvKiogRS5nLiAuZm9vICovXG4gICAgQ0xBU1M6IDksXG5cbiAgICAvKiogRS5nLiAjZm9vIDwtPiAjYmFyICovXG4gICAgVU5ESVJFQ1RFRF9FREdFOiAxMCxcblxuICAgIC8qKiBFLmcuICNmb28gLT4gI2JhciAqL1xuICAgIERJUkVDVEVEX0VER0U6IDExLFxuXG4gICAgLyoqIEUuZy4gJCNmb28gLT4gI2JhciAqL1xuICAgIE5PREVfU09VUkNFOiAxMixcblxuICAgIC8qKiBFLmcuICNmb28gLT4gJCNiYXIgKi9cbiAgICBOT0RFX1RBUkdFVDogMTMsXG5cbiAgICAvKiogRS5nLiAkI2ZvbyA8LT4gI2JhciAqL1xuICAgIE5PREVfTkVJR0hCT1I6IDE0LFxuXG4gICAgLyoqIEUuZy4gI2ZvbyA+ICNiYXIgKi9cbiAgICBDSElMRDogMTUsXG5cbiAgICAvKiogRS5nLiAjZm9vICNiYXIgKi9cbiAgICBERVNDRU5EQU5UOiAxNixcblxuICAgIC8qKiBFLmcuICQjZm9vID4gI2JhciAqL1xuICAgIFBBUkVOVDogMTcsXG5cbiAgICAvKiogRS5nLiAkI2ZvbyAjYmFyICovXG4gICAgQU5DRVNUT1I6IDE4LFxuXG4gICAgLyoqIEUuZy4gI2ZvbyA+ICRiYXIgPiAjYmF6ICovXG4gICAgQ09NUE9VTkRfU1BMSVQ6IDE5LFxuXG4gICAgLyoqIEFsd2F5cyBtYXRjaGVzLCB1c2VmdWwgcGxhY2Vob2xkZXIgZm9yIHN1YmplY3QgaW4gYENPTVBPVU5EX1NQTElUYCAqL1xuICAgIFRSVUU6IDIwXG4gIH07XG5cbiAgdmFyIHN0YXRlU2VsZWN0b3JzID0gW3tcbiAgICBzZWxlY3RvcjogJzpzZWxlY3RlZCcsXG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuc2VsZWN0ZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzp1bnNlbGVjdGVkJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuICFlbGUuc2VsZWN0ZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpzZWxlY3RhYmxlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5zZWxlY3RhYmxlKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6dW5zZWxlY3RhYmxlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuICFlbGUuc2VsZWN0YWJsZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOmxvY2tlZCcsXG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICAgIHJldHVybiBlbGUubG9ja2VkKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6dW5sb2NrZWQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gIWVsZS5sb2NrZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzp2aXNpYmxlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS52aXNpYmxlKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6aGlkZGVuJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuICFlbGUudmlzaWJsZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOnRyYW5zcGFyZW50JyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS50cmFuc3BhcmVudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOmdyYWJiZWQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmdyYWJiZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpmcmVlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuICFlbGUuZ3JhYmJlZCgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOnJlbW92ZWQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLnJlbW92ZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzppbnNpZGUnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gIWVsZS5yZW1vdmVkKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6Z3JhYmJhYmxlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5ncmFiYmFibGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzp1bmdyYWJiYWJsZScsXG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICAgIHJldHVybiAhZWxlLmdyYWJiYWJsZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOmFuaW1hdGVkJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5hbmltYXRlZCgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOnVuYW5pbWF0ZWQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gIWVsZS5hbmltYXRlZCgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOnBhcmVudCcsXG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNQYXJlbnQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpjaGlsZGxlc3MnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzQ2hpbGRsZXNzKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6Y2hpbGQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpvcnBoYW4nLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzT3JwaGFuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6bm9ub3JwaGFuJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0NoaWxkKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6Y29tcG91bmQnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIHJldHVybiBlbGUuaXNQYXJlbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpsb29wJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpzaW1wbGUnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzU2ltcGxlKCk7XG4gICAgfVxuICB9LCB7XG4gICAgc2VsZWN0b3I6ICc6YWN0aXZlJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5hY3RpdmUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzppbmFjdGl2ZScsXG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICAgIHJldHVybiAhZWxlLmFjdGl2ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIHNlbGVjdG9yOiAnOmJhY2tncm91bmRpbmcnLFxuICAgIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmJhY2tncm91bmRpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBzZWxlY3RvcjogJzpub25iYWNrZ3JvdW5kaW5nJyxcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgICAgcmV0dXJuICFlbGUuYmFja2dyb3VuZGluZygpO1xuICAgIH1cbiAgfV0uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIC8vIG4uYi4gc2VsZWN0b3JzIHRoYXQgYXJlIHN0YXJ0aW5nIHN1YnN0cmluZ3Mgb2Ygb3RoZXJzIG11c3QgaGF2ZSB0aGUgbG9uZ2VyIG9uZXMgZmlyc3RcbiAgICByZXR1cm4gZGVzY2VuZGluZyhhLnNlbGVjdG9yLCBiLnNlbGVjdG9yKTtcbiAgfSk7XG5cbiAgdmFyIGxvb2t1cCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsVG9GbiA9IHt9O1xuICAgIHZhciBzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZVNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgcyA9IHN0YXRlU2VsZWN0b3JzW2ldO1xuICAgICAgc2VsVG9GbltzLnNlbGVjdG9yXSA9IHMubWF0Y2hlcztcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsVG9GbjtcbiAgfSgpO1xuXG4gIHZhciBzdGF0ZVNlbGVjdG9yTWF0Y2hlcyA9IGZ1bmN0aW9uIHN0YXRlU2VsZWN0b3JNYXRjaGVzKHNlbCwgZWxlKSB7XG4gICAgcmV0dXJuIGxvb2t1cFtzZWxdKGVsZSk7XG4gIH07XG4gIHZhciBzdGF0ZVNlbGVjdG9yUmVnZXggPSAnKCcgKyBzdGF0ZVNlbGVjdG9ycy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy5zZWxlY3RvcjtcbiAgfSkuam9pbignfCcpICsgJyknO1xuXG4gIC8vIHNvIHRoYXQgdmFsdWVzIGdldCBjb21wYXJlZCBwcm9wZXJseSBpbiBTZWxlY3Rvci5maWx0ZXIoKVxuXG4gIHZhciBjbGVhbk1ldGFDaGFycyA9IGZ1bmN0aW9uIGNsZWFuTWV0YUNoYXJzKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcXFxcXCgnICsgdG9rZW5zLm1ldGFDaGFyICsgJyknLCAnZycpLCBmdW5jdGlvbiAobWF0Y2gsICQxKSB7XG4gICAgICByZXR1cm4gJDE7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHJlcGxhY2VMYXN0UXVlcnkgPSBmdW5jdGlvbiByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBleGFtaW5pbmdRdWVyeSwgcmVwbGFjZW1lbnRRdWVyeSkge1xuICAgIHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdID0gcmVwbGFjZW1lbnRRdWVyeTtcbiAgfTsgLy8gTk9URTogYWRkIG5ldyBleHByZXNzaW9uIHN5bnRheCBoZXJlIHRvIGhhdmUgaXQgcmVjb2duaXNlZCBieSB0aGUgcGFyc2VyO1xuICAvLyAtIGEgcXVlcnkgY29udGFpbnMgYWxsIGFkamFjZW50IChpLmUuIG5vIHNlcGFyYXRvciBpbiBiZXR3ZWVuKSBleHByZXNzaW9ucztcbiAgLy8gLSB0aGUgY3VycmVudCBxdWVyeSBpcyBzdG9yZWQgaW4gc2VsZWN0b3JbaV1cbiAgLy8gLSB5b3UgbmVlZCB0byBjaGVjayB0aGUgcXVlcnkgb2JqZWN0cyBpbiBtYXRjaCgpIGZvciBpdCBhY3R1YWxseSBmaWx0ZXIgcHJvcGVybHksIGJ1dCB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0IGZvcndhcmRcblxuXG4gIHZhciBleHBycyA9IFt7XG4gICAgbmFtZTogJ2dyb3VwJyxcbiAgICAvLyBqdXN0IHVzZWQgZm9yIGlkZW50aWZ5aW5nIHdoZW4gZGVidWdnaW5nXG4gICAgcXVlcnk6IHRydWUsXG4gICAgcmVnZXg6ICcoJyArIHRva2Vucy5ncm91cCArICcpJyxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmKSB7XG4gICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgICBncm91cCA9IF9yZWYyWzBdO1xuXG4gICAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuR1JPVVAsXG4gICAgICAgIHZhbHVlOiBncm91cCA9PT0gJyonID8gZ3JvdXAgOiBncm91cCArICdzJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogJ3N0YXRlJyxcbiAgICBxdWVyeTogdHJ1ZSxcbiAgICByZWdleDogc3RhdGVTZWxlY3RvclJlZ2V4LFxuICAgIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWYzKSB7XG4gICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICAgICAgc3RhdGUgPSBfcmVmNFswXTtcblxuICAgICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLlNUQVRFLFxuICAgICAgICB2YWx1ZTogc3RhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6ICdpZCcsXG4gICAgcXVlcnk6IHRydWUsXG4gICAgcmVnZXg6ICdcXFxcIygnICsgdG9rZW5zLmlkICsgJyknLFxuICAgIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWY1KSB7XG4gICAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMSksXG4gICAgICAgICAgaWQgPSBfcmVmNlswXTtcblxuICAgICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLklELFxuICAgICAgICB2YWx1ZTogY2xlYW5NZXRhQ2hhcnMoaWQpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAnY2xhc3NOYW1lJyxcbiAgICBxdWVyeTogdHJ1ZSxcbiAgICByZWdleDogJ1xcXFwuKCcgKyB0b2tlbnMuY2xhc3NOYW1lICsgJyknLFxuICAgIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWY3KSB7XG4gICAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMSksXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3JlZjhbMF07XG5cbiAgICAgIHF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5DTEFTUyxcbiAgICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGNsYXNzTmFtZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6ICdkYXRhRXhpc3RzJyxcbiAgICBxdWVyeTogdHJ1ZSxcbiAgICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmOSkge1xuICAgICAgdmFyIF9yZWYxMCA9IF9zbGljZWRUb0FycmF5KF9yZWY5LCAxKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IF9yZWYxMFswXTtcblxuICAgICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLkRBVEFfRVhJU1QsXG4gICAgICAgIGZpZWxkOiBjbGVhbk1ldGFDaGFycyh2YXJpYWJsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6ICdkYXRhQ29tcGFyZScsXG4gICAgcXVlcnk6IHRydWUsXG4gICAgcmVnZXg6ICdcXFxcW1xcXFxzKignICsgdG9rZW5zLnZhcmlhYmxlICsgJylcXFxccyooJyArIHRva2Vucy5jb21wYXJhdG9yT3AgKyAnKVxcXFxzKignICsgdG9rZW5zLnZhbHVlICsgJylcXFxccypcXFxcXScsXG4gICAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjExKSB7XG4gICAgICB2YXIgX3JlZjEyID0gX3NsaWNlZFRvQXJyYXkoX3JlZjExLCAzKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IF9yZWYxMlswXSxcbiAgICAgICAgICBjb21wYXJhdG9yT3AgPSBfcmVmMTJbMV0sXG4gICAgICAgICAgdmFsdWUgPSBfcmVmMTJbMl07XG5cbiAgICAgIHZhciB2YWx1ZUlzU3RyaW5nID0gbmV3IFJlZ0V4cCgnXicgKyB0b2tlbnMuc3RyaW5nICsgJyQnKS5leGVjKHZhbHVlKSAhPSBudWxsO1xuXG4gICAgICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5EQVRBX0NPTVBBUkUsXG4gICAgICAgIGZpZWxkOiBjbGVhbk1ldGFDaGFycyh2YXJpYWJsZSksXG4gICAgICAgIG9wZXJhdG9yOiBjb21wYXJhdG9yT3AsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogJ2RhdGFCb29sJyxcbiAgICBxdWVyeTogdHJ1ZSxcbiAgICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMuYm9vbE9wICsgJylcXFxccyooJyArIHRva2Vucy52YXJpYWJsZSArICcpXFxcXHMqXFxcXF0nLFxuICAgIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWYxMykge1xuICAgICAgdmFyIF9yZWYxNCA9IF9zbGljZWRUb0FycmF5KF9yZWYxMywgMiksXG4gICAgICAgICAgYm9vbE9wID0gX3JlZjE0WzBdLFxuICAgICAgICAgIHZhcmlhYmxlID0gX3JlZjE0WzFdO1xuXG4gICAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuREFUQV9CT09MLFxuICAgICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnModmFyaWFibGUpLFxuICAgICAgICBvcGVyYXRvcjogYm9vbE9wXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAnbWV0YUNvbXBhcmUnLFxuICAgIHF1ZXJ5OiB0cnVlLFxuICAgIHJlZ2V4OiAnXFxcXFtcXFxcW1xcXFxzKignICsgdG9rZW5zLm1ldGEgKyAnKVxcXFxzKignICsgdG9rZW5zLmNvbXBhcmF0b3JPcCArICcpXFxcXHMqKCcgKyB0b2tlbnMubnVtYmVyICsgJylcXFxccypcXFxcXVxcXFxdJyxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTUpIHtcbiAgICAgIHZhciBfcmVmMTYgPSBfc2xpY2VkVG9BcnJheShfcmVmMTUsIDMpLFxuICAgICAgICAgIG1ldGEgPSBfcmVmMTZbMF0sXG4gICAgICAgICAgY29tcGFyYXRvck9wID0gX3JlZjE2WzFdLFxuICAgICAgICAgIG51bWJlciA9IF9yZWYxNlsyXTtcblxuICAgICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLk1FVEFfQ09NUEFSRSxcbiAgICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKG1ldGEpLFxuICAgICAgICBvcGVyYXRvcjogY29tcGFyYXRvck9wLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAnbmV4dFF1ZXJ5JyxcbiAgICBzZXBhcmF0b3I6IHRydWUsXG4gICAgcmVnZXg6IHRva2Vucy5zZXBhcmF0b3IsXG4gICAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSkge1xuICAgICAgdmFyIGN1cnJlbnRTdWJqZWN0ID0gc2VsZWN0b3IuY3VycmVudFN1YmplY3Q7XG4gICAgICB2YXIgZWRnZUNvdW50ID0gc2VsZWN0b3IuZWRnZUNvdW50O1xuICAgICAgdmFyIGNvbXBvdW5kQ291bnQgPSBzZWxlY3Rvci5jb21wb3VuZENvdW50O1xuICAgICAgdmFyIGxhc3RRID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChjdXJyZW50U3ViamVjdCAhPSBudWxsKSB7XG4gICAgICAgIGxhc3RRLnN1YmplY3QgPSBjdXJyZW50U3ViamVjdDtcbiAgICAgICAgc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBsYXN0US5lZGdlQ291bnQgPSBlZGdlQ291bnQ7XG4gICAgICBsYXN0US5jb21wb3VuZENvdW50ID0gY29tcG91bmRDb3VudDtcbiAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCA9IDA7XG4gICAgICBzZWxlY3Rvci5jb21wb3VuZENvdW50ID0gMDsgLy8gZ28gb24gdG8gbmV4dCBxdWVyeVxuXG4gICAgICB2YXIgbmV4dFF1ZXJ5ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoKytdID0gbmV3UXVlcnkoKTtcbiAgICAgIHJldHVybiBuZXh0UXVlcnk7IC8vIHRoaXMgaXMgdGhlIG5ldyBxdWVyeSB0byBiZSBmaWxsZWQgYnkgdGhlIGZvbGxvd2luZyBleHByc1xuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6ICdkaXJlY3RlZEVkZ2UnLFxuICAgIHNlcGFyYXRvcjogdHJ1ZSxcbiAgICByZWdleDogdG9rZW5zLmRpcmVjdGVkRWRnZSxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgICAvLyB1bmRpcmVjdGVkIGVkZ2VcbiAgICAgICAgdmFyIGVkZ2VRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIHZhciBzb3VyY2UgPSBxdWVyeTtcbiAgICAgICAgdmFyIHRhcmdldCA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIGVkZ2VRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHlwZS5ESVJFQ1RFRF9FREdFLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pOyAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgZWRnZSByYXRoZXIgdGhhbiB0aGUgc291cmNlXG5cbiAgICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIGVkZ2VRdWVyeSk7XG4gICAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCsrOyAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgdGFyZ2V0IHF1ZXJ5IHdpdGggZXhwcmVzc2lvbnMgdGhhdCBmb2xsb3dcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc291cmNlL3RhcmdldFxuICAgICAgICB2YXIgc3JjVGd0USA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIHZhciBfc291cmNlID0gcXVlcnk7XG5cbiAgICAgICAgdmFyIF90YXJnZXQgPSBuZXdRdWVyeSgpO1xuXG4gICAgICAgIHNyY1RndFEuY2hlY2tzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFR5cGUuTk9ERV9TT1VSQ0UsXG4gICAgICAgICAgc291cmNlOiBfc291cmNlLFxuICAgICAgICAgIHRhcmdldDogX3RhcmdldFxuICAgICAgICB9KTsgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlIG5laWdoYm91cmhvb2QgcmF0aGVyIHRoYW4gdGhlIG5vZGVcblxuICAgICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBxdWVyeSwgc3JjVGd0USk7XG4gICAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCsrO1xuICAgICAgICByZXR1cm4gX3RhcmdldDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kaXJlY3RlZEVkZ2UnLFxuICAgIHNlcGFyYXRvcjogdHJ1ZSxcbiAgICByZWdleDogdG9rZW5zLnVuZGlyZWN0ZWRFZGdlLFxuICAgIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICAgIGlmIChzZWxlY3Rvci5jdXJyZW50U3ViamVjdCA9PSBudWxsKSB7XG4gICAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZVxuICAgICAgICB2YXIgZWRnZVF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHF1ZXJ5O1xuICAgICAgICB2YXIgdGFyZ2V0ID0gbmV3UXVlcnkoKTtcbiAgICAgICAgZWRnZVF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBUeXBlLlVORElSRUNURURfRURHRSxcbiAgICAgICAgICBub2RlczogW3NvdXJjZSwgdGFyZ2V0XVxuICAgICAgICB9KTsgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlIGVkZ2UgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZVxuXG4gICAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBlZGdlUXVlcnkpO1xuICAgICAgICBzZWxlY3Rvci5lZGdlQ291bnQrKzsgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIHRhcmdldCBxdWVyeSB3aXRoIGV4cHJlc3Npb25zIHRoYXQgZm9sbG93XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5laWdoYm91cmhvb2RcbiAgICAgICAgdmFyIG5ob29kUSA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIHZhciBub2RlID0gcXVlcnk7XG4gICAgICAgIHZhciBuZWlnaGJvciA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIG5ob29kUS5jaGVja3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHlwZS5OT0RFX05FSUdIQk9SLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgbmVpZ2hib3I6IG5laWdoYm9yXG4gICAgICAgIH0pOyAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgbmVpZ2hib3VyaG9vZCByYXRoZXIgdGhhbiB0aGUgbm9kZVxuXG4gICAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBuaG9vZFEpO1xuICAgICAgICByZXR1cm4gbmVpZ2hib3I7IC8vIG5vdyBwb3B1bGF0aW5nIHRoZSBuZWlnaGJvciB3aXRoIGZvbGxvd2luZyBleHByZXNzaW9uc1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6ICdjaGlsZCcsXG4gICAgc2VwYXJhdG9yOiB0cnVlLFxuICAgIHJlZ2V4OiB0b2tlbnMuY2hpbGQsXG4gICAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSkge1xuICAgICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgICAgLy8gZGVmYXVsdDogY2hpbGQgcXVlcnlcbiAgICAgICAgdmFyIHBhcmVudENoaWxkUXVlcnkgPSBuZXdRdWVyeSgpO1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXdRdWVyeSgpO1xuICAgICAgICB2YXIgcGFyZW50ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICAgIHBhcmVudENoaWxkUXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFR5cGUuQ0hJTEQsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgY2hpbGQ6IGNoaWxkXG4gICAgICAgIH0pOyAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuXG4gICAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBwYXJlbnRDaGlsZFF1ZXJ5KTtcbiAgICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrOyAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgY2hpbGQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT09IHF1ZXJ5KSB7XG4gICAgICAgIC8vIGNvbXBvdW5kIHNwbGl0IHF1ZXJ5XG4gICAgICAgIHZhciBjb21wb3VuZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIHZhciBsZWZ0ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICAgIHZhciByaWdodCA9IG5ld1F1ZXJ5KCk7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3UXVlcnkoKTtcblxuICAgICAgICB2YXIgX2NoaWxkID0gbmV3UXVlcnkoKTtcblxuICAgICAgICB2YXIgX3BhcmVudCA9IG5ld1F1ZXJ5KCk7IC8vIHNldCB1cCB0aGUgcm9vdCBjb21wb3VuZCBxXG5cblxuICAgICAgICBjb21wb3VuZC5jaGVja3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHlwZS5DT01QT1VORF9TUExJVCxcbiAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgIH0pOyAvLyBwb3B1bGF0ZSB0aGUgc3ViamVjdCBhbmQgcmVwbGFjZSB0aGUgcSBhdCB0aGUgb2xkIHNwb3QgKHdpdGhpbiBsZWZ0KSB3aXRoIFRSVUVcblxuICAgICAgICBzdWJqZWN0LmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGFrZSB0aGUgY2hlY2tzIGZyb20gdGhlIGxlZnRcblxuICAgICAgICBxdWVyeS5jaGVja3MgPSBbe1xuICAgICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgICB9XTsgLy8gY2hlY2tzIHVuZGVyIGxlZnQgcmVmcyB0aGUgc3ViamVjdCBpbXBsaWNpdGx5XG4gICAgICAgIC8vIHNldCB1cCB0aGUgcmlnaHQgcVxuXG4gICAgICAgIF9wYXJlbnQuY2hlY2tzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgICB9KTsgLy8gcGFyZW50IGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuXG5cbiAgICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFR5cGUuUEFSRU5ULFxuICAgICAgICAgIC8vIHR5cGUgaXMgc3dhcHBlZCBvbiByaWdodCBzaWRlIHF1ZXJpZXNcbiAgICAgICAgICBwYXJlbnQ6IF9wYXJlbnQsXG4gICAgICAgICAgY2hpbGQ6IF9jaGlsZCAvLyBlbXB0eSBmb3Igbm93XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIGxlZnQsIGNvbXBvdW5kKTsgLy8gdXBkYXRlIHRoZSByZWYgc2luY2Ugd2UgbW92ZWQgdGhpbmdzIGFyb3VuZCBmb3IgYHF1ZXJ5YFxuXG4gICAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgICByZXR1cm4gX2NoaWxkOyAvLyBub3cgcG9wdWxhdGluZyB0aGUgcmlnaHQgc2lkZSdzIGNoaWxkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgcXVlcnlcbiAgICAgICAgLy8gaW5mbyBmb3IgcGFyZW50IHF1ZXJ5XG4gICAgICAgIHZhciBfcGFyZW50MiA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgICAgdmFyIF9jaGlsZDIgPSBuZXdRdWVyeSgpO1xuXG4gICAgICAgIHZhciBwY1FDaGVja3MgPSBbe1xuICAgICAgICAgIHR5cGU6IFR5cGUuUEFSRU5ULFxuICAgICAgICAgIHBhcmVudDogX3BhcmVudDIsXG4gICAgICAgICAgY2hpbGQ6IF9jaGlsZDJcbiAgICAgICAgfV07IC8vIHRoZSBwYXJlbnQtY2hpbGQgcXVlcnkgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBxdWVyeSBwcmV2aW91c2x5IGJlaW5nIHBvcHVsYXRlZFxuXG4gICAgICAgIF9wYXJlbnQyLmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGhlIHByZXZpb3VzIHF1ZXJ5IGNvbnRhaW5zIHRoZSBjaGVja3MgZm9yIHRoZSBwYXJlbnRcblxuICAgICAgICBxdWVyeS5jaGVja3MgPSBwY1FDaGVja3M7IC8vIHBjIHF1ZXJ5IHRha2VzIG92ZXJcblxuICAgICAgICBzZWxlY3Rvci5jb21wb3VuZENvdW50Kys7XG4gICAgICAgIHJldHVybiBfY2hpbGQyOyAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgY2hpbGRcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAnZGVzY2VuZGFudCcsXG4gICAgc2VwYXJhdG9yOiB0cnVlLFxuICAgIHJlZ2V4OiB0b2tlbnMuZGVzY2VuZGFudCxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgICAvLyBkZWZhdWx0OiBkZXNjZW5kYW50IHF1ZXJ5XG4gICAgICAgIHZhciBhbmNDaFF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgICAgdmFyIGRlc2NlbmRhbnQgPSBuZXdRdWVyeSgpO1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSBzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGggLSAxXTtcbiAgICAgICAgYW5jQ2hRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHlwZS5ERVNDRU5EQU5ULFxuICAgICAgICAgIGFuY2VzdG9yOiBhbmNlc3RvcixcbiAgICAgICAgICBkZXNjZW5kYW50OiBkZXNjZW5kYW50XG4gICAgICAgIH0pOyAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuXG4gICAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBhbmNDaFF1ZXJ5KTtcbiAgICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrOyAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgZGVzY2VuZGFudCBxdWVyeSB3aXRoIGV4cHJlc3Npb25zIHRoYXQgZm9sbG93XG5cbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnQ7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09PSBxdWVyeSkge1xuICAgICAgICAvLyBjb21wb3VuZCBzcGxpdCBxdWVyeVxuICAgICAgICB2YXIgY29tcG91bmQgPSBuZXdRdWVyeSgpO1xuICAgICAgICB2YXIgbGVmdCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgICB2YXIgcmlnaHQgPSBuZXdRdWVyeSgpO1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgICAgdmFyIF9kZXNjZW5kYW50ID0gbmV3UXVlcnkoKTtcblxuICAgICAgICB2YXIgX2FuY2VzdG9yID0gbmV3UXVlcnkoKTsgLy8gc2V0IHVwIHRoZSByb290IGNvbXBvdW5kIHFcblxuXG4gICAgICAgIGNvbXBvdW5kLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBUeXBlLkNPTVBPVU5EX1NQTElULFxuICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3RcbiAgICAgICAgfSk7IC8vIHBvcHVsYXRlIHRoZSBzdWJqZWN0IGFuZCByZXBsYWNlIHRoZSBxIGF0IHRoZSBvbGQgc3BvdCAod2l0aGluIGxlZnQpIHdpdGggVFJVRVxuXG4gICAgICAgIHN1YmplY3QuY2hlY2tzID0gcXVlcnkuY2hlY2tzOyAvLyB0YWtlIHRoZSBjaGVja3MgZnJvbSB0aGUgbGVmdFxuXG4gICAgICAgIHF1ZXJ5LmNoZWNrcyA9IFt7XG4gICAgICAgICAgdHlwZTogVHlwZS5UUlVFXG4gICAgICAgIH1dOyAvLyBjaGVja3MgdW5kZXIgbGVmdCByZWZzIHRoZSBzdWJqZWN0IGltcGxpY2l0bHlcbiAgICAgICAgLy8gc2V0IHVwIHRoZSByaWdodCBxXG5cbiAgICAgICAgX2FuY2VzdG9yLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgICAgfSk7IC8vIGFuY2VzdG9yIGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuXG5cbiAgICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFR5cGUuQU5DRVNUT1IsXG4gICAgICAgICAgLy8gdHlwZSBpcyBzd2FwcGVkIG9uIHJpZ2h0IHNpZGUgcXVlcmllc1xuICAgICAgICAgIGFuY2VzdG9yOiBfYW5jZXN0b3IsXG4gICAgICAgICAgZGVzY2VuZGFudDogX2Rlc2NlbmRhbnQgLy8gZW1wdHkgZm9yIG5vd1xuXG4gICAgICAgIH0pO1xuICAgICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBsZWZ0LCBjb21wb3VuZCk7IC8vIHVwZGF0ZSB0aGUgcmVmIHNpbmNlIHdlIG1vdmVkIHRoaW5ncyBhcm91bmQgZm9yIGBxdWVyeWBcblxuICAgICAgICBzZWxlY3Rvci5jdXJyZW50U3ViamVjdCA9IHN1YmplY3Q7XG4gICAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgICAgcmV0dXJuIF9kZXNjZW5kYW50OyAvLyBub3cgcG9wdWxhdGluZyB0aGUgcmlnaHQgc2lkZSdzIGRlc2NlbmRhbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuY2VzdG9yIHF1ZXJ5XG4gICAgICAgIC8vIGluZm8gZm9yIHBhcmVudCBxdWVyeVxuICAgICAgICB2YXIgX2FuY2VzdG9yMiA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgICAgdmFyIF9kZXNjZW5kYW50MiA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgICAgdmFyIGFkUUNoZWNrcyA9IFt7XG4gICAgICAgICAgdHlwZTogVHlwZS5BTkNFU1RPUixcbiAgICAgICAgICBhbmNlc3RvcjogX2FuY2VzdG9yMixcbiAgICAgICAgICBkZXNjZW5kYW50OiBfZGVzY2VuZGFudDJcbiAgICAgICAgfV07IC8vIHRoZSBwYXJlbnQtY2hpbGQgcXVlcnkgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBxdWVyeSBwcmV2aW91c2x5IGJlaW5nIHBvcHVsYXRlZFxuXG4gICAgICAgIF9hbmNlc3RvcjIuY2hlY2tzID0gcXVlcnkuY2hlY2tzOyAvLyB0aGUgcHJldmlvdXMgcXVlcnkgY29udGFpbnMgdGhlIGNoZWNrcyBmb3IgdGhlIHBhcmVudFxuXG4gICAgICAgIHF1ZXJ5LmNoZWNrcyA9IGFkUUNoZWNrczsgLy8gcGMgcXVlcnkgdGFrZXMgb3ZlclxuXG4gICAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgICAgcmV0dXJuIF9kZXNjZW5kYW50MjsgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogJ3N1YmplY3QnLFxuICAgIG1vZGlmaWVyOiB0cnVlLFxuICAgIHJlZ2V4OiB0b2tlbnMuc3ViamVjdCxcbiAgICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgIT0gbnVsbCAmJiBzZWxlY3Rvci5jdXJyZW50U3ViamVjdCAhPT0gcXVlcnkpIHtcbiAgICAgICAgd2FybignUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCcgKyBzZWxlY3Rvci50b1N0cmluZygpICsgJ2AnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3Rvci5jdXJyZW50U3ViamVjdCA9IHF1ZXJ5O1xuICAgICAgdmFyIHRvcFEgPSBzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGggLSAxXTtcbiAgICAgIHZhciB0b3BDaGsgPSB0b3BRLmNoZWNrc1swXTtcbiAgICAgIHZhciB0b3BUeXBlID0gdG9wQ2hrID09IG51bGwgPyBudWxsIDogdG9wQ2hrLnR5cGU7XG5cbiAgICAgIGlmICh0b3BUeXBlID09PSBUeXBlLkRJUkVDVEVEX0VER0UpIHtcbiAgICAgICAgLy8gZGlyZWN0ZWQgZWRnZSB3aXRoIHN1YmplY3Qgb24gdGhlIHRhcmdldFxuICAgICAgICAvLyBjaGFuZ2UgdG8gdGFyZ2V0IG5vZGUgY2hlY2tcbiAgICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfVEFSR0VUO1xuICAgICAgfSBlbHNlIGlmICh0b3BUeXBlID09PSBUeXBlLlVORElSRUNURURfRURHRSkge1xuICAgICAgICAvLyB1bmRpcmVjdGVkIGVkZ2Ugd2l0aCBzdWJqZWN0IG9uIHRoZSBzZWNvbmQgbm9kZVxuICAgICAgICAvLyBjaGFuZ2UgdG8gbmVpZ2hib3IgY2hlY2tcbiAgICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfTkVJR0hCT1I7XG4gICAgICAgIHRvcENoay5ub2RlID0gdG9wQ2hrLm5vZGVzWzFdOyAvLyBzZWNvbmQgbm9kZSBpcyBzdWJqZWN0XG5cbiAgICAgICAgdG9wQ2hrLm5laWdoYm9yID0gdG9wQ2hrLm5vZGVzWzBdOyAvLyBjbGVhbiB1cCB1bnVzZWQgZmllbGRzIGZvciBuZXcgdHlwZVxuXG4gICAgICAgIHRvcENoay5ub2RlcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XTtcbiAgZXhwcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlLnJlZ2V4T2JqID0gbmV3IFJlZ0V4cCgnXicgKyBlLnJlZ2V4KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIE9mIGFsbCB0aGUgZXhwcmVzc2lvbnMsIGZpbmQgdGhlIGZpcnN0IG1hdGNoIGluIHRoZSByZW1haW5pbmcgdGV4dC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlbWFpbmluZyBUaGUgcmVtYWluaW5nIHRleHQgdG8gcGFyc2VcbiAgICogQHJldHVybnMgVGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBhbmQgdGhlIG5ld2x5IHJlbWFpbmluZyB0ZXh0IGB7IGV4cHIsIG1hdGNoLCBuYW1lLCByZW1haW5pbmcgfWBcbiAgICovXG5cbiAgdmFyIGNvbnN1bWVFeHByID0gZnVuY3Rpb24gY29uc3VtZUV4cHIocmVtYWluaW5nKSB7XG4gICAgdmFyIGV4cHI7XG4gICAgdmFyIG1hdGNoO1xuICAgIHZhciBuYW1lO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBleHBycy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGUgPSBleHByc1tqXTtcbiAgICAgIHZhciBuID0gZS5uYW1lO1xuICAgICAgdmFyIG0gPSByZW1haW5pbmcubWF0Y2goZS5yZWdleE9iaik7XG5cbiAgICAgIGlmIChtICE9IG51bGwpIHtcbiAgICAgICAgbWF0Y2ggPSBtO1xuICAgICAgICBleHByID0gZTtcbiAgICAgICAgbmFtZSA9IG47XG4gICAgICAgIHZhciBjb25zdW1lZCA9IG1bMF07XG4gICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoY29uc3VtZWQubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7IC8vIHdlJ3ZlIGNvbnN1bWVkIG9uZSBleHByLCBzbyB3ZSBjYW4gcmV0dXJuIG5vd1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleHByOiBleHByLFxuICAgICAgbWF0Y2g6IG1hdGNoLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbnN1bWUgYWxsIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlbWFpbmluZyBUaGUgdGV4dCB0byBjb25zdW1lXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSByZW1vdmVkXG4gICAqL1xuXG5cbiAgdmFyIGNvbnN1bWVXaGl0ZXNwYWNlID0gZnVuY3Rpb24gY29uc3VtZVdoaXRlc3BhY2UocmVtYWluaW5nKSB7XG4gICAgdmFyIG1hdGNoID0gcmVtYWluaW5nLm1hdGNoKC9eXFxzKy8pO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgY29uc3VtZWQgPSBtYXRjaFswXTtcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoY29uc3VtZWQubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtYWluaW5nO1xuICB9O1xuICAvKipcbiAgICogUGFyc2UgdGhlIHN0cmluZyBhbmQgc3RvcmUgdGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBpbiB0aGUgU2VsZWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBUaGUgc2VsZWN0b3Igc3RyaW5nXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2VsZWN0b3Igd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuXG5cbiAgdmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHJlbWFpbmluZyA9IHNlbGYuaW5wdXRUZXh0ID0gc2VsZWN0b3I7XG4gICAgdmFyIGN1cnJlbnRRdWVyeSA9IHNlbGZbMF0gPSBuZXdRdWVyeSgpO1xuICAgIHNlbGYubGVuZ3RoID0gMTtcbiAgICByZW1haW5pbmcgPSBjb25zdW1lV2hpdGVzcGFjZShyZW1haW5pbmcpOyAvLyBnZXQgcmlkIG9mIGxlYWRpbmcgd2hpdGVzcGFjZVxuXG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIGV4cHJJbmZvID0gY29uc3VtZUV4cHIocmVtYWluaW5nKTtcblxuICAgICAgaWYgKGV4cHJJbmZvLmV4cHIgPT0gbnVsbCkge1xuICAgICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgaXMgaW52YWxpZCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJncyA9IGV4cHJJbmZvLm1hdGNoLnNsaWNlKDEpOyAvLyBsZXQgdGhlIHRva2VuIHBvcHVsYXRlIHRoZSBzZWxlY3RvciBvYmplY3QgaW4gY3VycmVudFF1ZXJ5XG5cbiAgICAgICAgdmFyIHJldCA9IGV4cHJJbmZvLmV4cHIucG9wdWxhdGUoc2VsZiwgY3VycmVudFF1ZXJ5LCBhcmdzKTtcblxuICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXhpdCBpZiBwb3B1bGF0aW9uIGZhaWxlZFxuICAgICAgICB9IGVsc2UgaWYgKHJldCAhPSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXJ5ID0gcmV0OyAvLyBjaGFuZ2UgdGhlIGN1cnJlbnQgcXVlcnkgdG8gYmUgZmlsbGVkIGlmIHRoZSBleHByIHNwZWNpZmllc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlbWFpbmluZyA9IGV4cHJJbmZvLnJlbWFpbmluZzsgLy8gd2UncmUgZG9uZSB3aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHBhcnNlXG5cbiAgICAgIGlmIChyZW1haW5pbmcubWF0Y2goL15cXHMqJC8pKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYXN0USA9IHNlbGZbc2VsZi5sZW5ndGggLSAxXTtcblxuICAgIGlmIChzZWxmLmN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICAgIGxhc3RRLnN1YmplY3QgPSBzZWxmLmN1cnJlbnRTdWJqZWN0O1xuICAgIH1cblxuICAgIGxhc3RRLmVkZ2VDb3VudCA9IHNlbGYuZWRnZUNvdW50O1xuICAgIGxhc3RRLmNvbXBvdW5kQ291bnQgPSBzZWxmLmNvbXBvdW5kQ291bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gc2VsZltpXTsgLy8gaW4gZnV0dXJlLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGJlIGFsbG93ZWQgaWYgdGhlcmUgd2VyZSBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCBkZXRlY3Rpb24gb2YgaW52YWxpZCBjb21iaW5hdGlvbnNcblxuICAgICAgaWYgKHEuY29tcG91bmRDb3VudCA+IDAgJiYgcS5lZGdlQ291bnQgPiAwKSB7XG4gICAgICAgIHdhcm4oJ1RoZSBzZWxlY3RvciBgJyArIHNlbGVjdG9yICsgJ2AgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHEuZWRnZUNvdW50ID4gMSkge1xuICAgICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocS5lZGdlQ291bnQgPT09IDEpIHtcbiAgICAgICAgd2FybignVGhlIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IgKyAnYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7IC8vIHN1Y2Nlc3NcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgc2VsZWN0b3IgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuICBUaGlzIHZhbHVlIHVzZXMgZGVmYXVsdCBmb3JtYXR0aW5nLFxuICAgKiBzbyB0aGluZ3MgbGlrZSBzcGFjaW5nIG1heSBkaWZmZXIgZnJvbSB0aGUgaW5wdXQgdGV4dCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2VsZWN0b3Igc3RyaW5nXG4gICAqL1xuXG5cbiAgdmFyIHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMudG9TdHJpbmdDYWNoZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO1xuICAgIH1cblxuICAgIHZhciBjbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKG9iaikge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBjbGVhblZhbCA9IGZ1bmN0aW9uIGNsZWFuVmFsKHZhbCkge1xuICAgICAgaWYgKHN0cmluZyh2YWwpKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgdmFsICsgJ1wiJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjbGVhbih2YWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgc3BhY2UgPSBmdW5jdGlvbiBzcGFjZSh2YWwpIHtcbiAgICAgIHJldHVybiAnICcgKyB2YWwgKyAnICc7XG4gICAgfTtcblxuICAgIHZhciBjaGVja1RvU3RyaW5nID0gZnVuY3Rpb24gY2hlY2tUb1N0cmluZyhjaGVjaywgc3ViamVjdCkge1xuICAgICAgdmFyIHR5cGUgPSBjaGVjay50eXBlLFxuICAgICAgICAgIHZhbHVlID0gY2hlY2sudmFsdWU7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFR5cGUuR1JPVVA6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGdyb3VwID0gY2xlYW4odmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwLnN1YnN0cmluZygwLCBncm91cC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLkRBVEFfQ09NUEFSRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBjaGVjay5maWVsZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGNoZWNrLm9wZXJhdG9yO1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGZpZWxkICsgc3BhY2UoY2xlYW4ob3BlcmF0b3IpKSArIGNsZWFuVmFsKHZhbHVlKSArICddJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLkRBVEFfQk9PTDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX29wZXJhdG9yID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgX2ZpZWxkID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgY2xlYW4oX29wZXJhdG9yKSArIF9maWVsZCArICddJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLkRBVEFfRVhJU1Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9maWVsZDIgPSBjaGVjay5maWVsZDtcbiAgICAgICAgICAgIHJldHVybiAnWycgKyBfZmllbGQyICsgJ10nO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFR5cGUuTUVUQV9DT01QQVJFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfb3BlcmF0b3IyID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgX2ZpZWxkMyA9IGNoZWNrLmZpZWxkO1xuICAgICAgICAgICAgcmV0dXJuICdbWycgKyBfZmllbGQzICsgc3BhY2UoY2xlYW4oX29wZXJhdG9yMikpICsgY2xlYW5WYWwodmFsdWUpICsgJ11dJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLlNUQVRFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLklEOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLkNMQVNTOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAnLicgKyB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLlBBUkVOVDpcbiAgICAgICAgY2FzZSBUeXBlLkNISUxEOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVRvU3RyaW5nKGNoZWNrLnBhcmVudCwgc3ViamVjdCkgKyBzcGFjZSgnPicpICsgcXVlcnlUb1N0cmluZyhjaGVjay5jaGlsZCwgc3ViamVjdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVHlwZS5BTkNFU1RPUjpcbiAgICAgICAgY2FzZSBUeXBlLkRFU0NFTkRBTlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5VG9TdHJpbmcoY2hlY2suYW5jZXN0b3IsIHN1YmplY3QpICsgJyAnICsgcXVlcnlUb1N0cmluZyhjaGVjay5kZXNjZW5kYW50LCBzdWJqZWN0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUeXBlLkNPTVBPVU5EX1NQTElUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsaHMgPSBxdWVyeVRvU3RyaW5nKGNoZWNrLmxlZnQsIHN1YmplY3QpO1xuICAgICAgICAgICAgdmFyIHN1YiA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2suc3ViamVjdCwgc3ViamVjdCk7XG4gICAgICAgICAgICB2YXIgcmhzID0gcXVlcnlUb1N0cmluZyhjaGVjay5yaWdodCwgc3ViamVjdCk7XG4gICAgICAgICAgICByZXR1cm4gbGhzICsgKGxocy5sZW5ndGggPiAwID8gJyAnIDogJycpICsgc3ViICsgcmhzO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFR5cGUuVFJVRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcXVlcnlUb1N0cmluZyA9IGZ1bmN0aW9uIHF1ZXJ5VG9TdHJpbmcocXVlcnksIHN1YmplY3QpIHtcbiAgICAgIHJldHVybiBxdWVyeS5jaGVja3MucmVkdWNlKGZ1bmN0aW9uIChzdHIsIGNoaywgaSkge1xuICAgICAgICByZXR1cm4gc3RyICsgKHN1YmplY3QgPT09IHF1ZXJ5ICYmIGkgPT09IDAgPyAnJCcgOiAnJykgKyBjaGVja1RvU3RyaW5nKGNoaywgc3ViamVjdCk7XG4gICAgICB9LCAnJyk7XG4gICAgfTtcblxuICAgIHZhciBzdHIgPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXJ5ID0gdGhpc1tpXTtcbiAgICAgIHN0ciArPSBxdWVyeVRvU3RyaW5nKHF1ZXJ5LCBxdWVyeS5zdWJqZWN0KTtcblxuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMSAmJiBpIDwgdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0ciArPSAnLCAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG9TdHJpbmdDYWNoZSA9IHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICB2YXIgcGFyc2UkMSA9IHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgdG9TdHJpbmc6IHRvU3RyaW5nXG4gIH07XG5cbiAgdmFyIHZhbENtcCA9IGZ1bmN0aW9uIHZhbENtcChmaWVsZFZhbCwgb3BlcmF0b3IsIHZhbHVlKSB7XG4gICAgdmFyIG1hdGNoZXM7XG4gICAgdmFyIGlzRmllbGRTdHIgPSBzdHJpbmcoZmllbGRWYWwpO1xuICAgIHZhciBpc0ZpZWxkTnVtID0gbnVtYmVyJDEoZmllbGRWYWwpO1xuICAgIHZhciBpc1ZhbFN0ciA9IHN0cmluZyh2YWx1ZSk7XG4gICAgdmFyIGZpZWxkU3RyLCB2YWxTdHI7XG4gICAgdmFyIGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlO1xuICAgIHZhciBub3RFeHByID0gZmFsc2U7XG4gICAgdmFyIGlzSW5lcUNtcCA9IGZhbHNlO1xuXG4gICAgaWYgKG9wZXJhdG9yLmluZGV4T2YoJyEnKSA+PSAwKSB7XG4gICAgICBvcGVyYXRvciA9IG9wZXJhdG9yLnJlcGxhY2UoJyEnLCAnJyk7XG4gICAgICBub3RFeHByID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0b3IuaW5kZXhPZignQCcpID49IDApIHtcbiAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3IucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzRmllbGRTdHIgfHwgaXNWYWxTdHIgfHwgY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBmaWVsZFN0ciA9ICFpc0ZpZWxkU3RyICYmICFpc0ZpZWxkTnVtID8gJycgOiAnJyArIGZpZWxkVmFsO1xuICAgICAgdmFsU3RyID0gJycgKyB2YWx1ZTtcbiAgICB9IC8vIGlmIHdlJ3JlIGRvaW5nIGEgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uLCB0aGVuIHdlJ3JlIHVzaW5nIGEgU1RSSU5HIGNvbXBhcmlzb25cbiAgICAvLyBldmVuIGlmIHdlJ3JlIGNvbXBhcmluZyBudW1iZXJzXG5cblxuICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgIGZpZWxkVmFsID0gZmllbGRTdHIgPSBmaWVsZFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFsdWUgPSB2YWxTdHIgPSB2YWxTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlICcqPSc6XG4gICAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0cikgPj0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyQ9JzpcbiAgICAgICAgbWF0Y2hlcyA9IGZpZWxkU3RyLmluZGV4T2YodmFsU3RyLCBmaWVsZFN0ci5sZW5ndGggLSB2YWxTdHIubGVuZ3RoKSA+PSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnXj0nOlxuICAgICAgICBtYXRjaGVzID0gZmllbGRTdHIuaW5kZXhPZih2YWxTdHIpID09PSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnPSc6XG4gICAgICAgIG1hdGNoZXMgPSBmaWVsZFZhbCA9PT0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICc+JzpcbiAgICAgICAgaXNJbmVxQ21wID0gdHJ1ZTtcbiAgICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsID4gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICc+PSc6XG4gICAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICAgIG1hdGNoZXMgPSBmaWVsZFZhbCA+PSB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBpc0luZXFDbXAgPSB0cnVlO1xuICAgICAgICBtYXRjaGVzID0gZmllbGRWYWwgPCB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgaXNJbmVxQ21wID0gdHJ1ZTtcbiAgICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsIDw9IHZhbHVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbWF0Y2hlcyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICB9IC8vIGFwcGx5IHRoZSBub3Qgb3AsIGJ1dCBudWxsIHZhbHMgZm9yIGluZXF1YWxpdGllcyBzaG91bGQgYWx3YXlzIHN0YXkgbm9uLW1hdGNoaW5nXG5cblxuICAgIGlmIChub3RFeHByICYmIChmaWVsZFZhbCAhPSBudWxsIHx8ICFpc0luZXFDbXApKSB7XG4gICAgICBtYXRjaGVzID0gIW1hdGNoZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH07XG4gIHZhciBib29sQ21wID0gZnVuY3Rpb24gYm9vbENtcChmaWVsZFZhbCwgb3BlcmF0b3IpIHtcbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlICc/JzpcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBjYXNlICchJzpcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsID8gZmFsc2UgOiB0cnVlO1xuXG4gICAgICBjYXNlICdeJzpcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICB2YXIgZXhpc3RDbXAgPSBmdW5jdGlvbiBleGlzdENtcChmaWVsZFZhbCkge1xuICAgIHJldHVybiBmaWVsZFZhbCAhPT0gdW5kZWZpbmVkO1xuICB9O1xuICB2YXIgZGF0YSQxID0gZnVuY3Rpb24gZGF0YShlbGUsIGZpZWxkKSB7XG4gICAgcmV0dXJuIGVsZS5kYXRhKGZpZWxkKTtcbiAgfTtcbiAgdmFyIG1ldGEgPSBmdW5jdGlvbiBtZXRhKGVsZSwgZmllbGQpIHtcbiAgICByZXR1cm4gZWxlW2ZpZWxkXSgpO1xuICB9O1xuXG4gIC8qKiBBIGxvb2t1cCBvZiBgbWF0Y2goY2hlY2ssIGVsZSlgIGZ1bmN0aW9ucyBieSBgVHlwZWAgaW50ICovXG5cbiAgdmFyIG1hdGNoID0gW107XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHF1ZXJ5IG1hdGNoZXMgZm9yIHRoZSBlbGVtZW50XG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgYHsgdHlwZSwgdmFsdWUsIC4uLiB9YCBxdWVyeSBvYmplY3RcbiAgICogQHBhcmFtIGVsZSBUaGUgZWxlbWVudCB0byBjb21wYXJlIGFnYWluc3RcbiAgKi9cblxuICB2YXIgbWF0Y2hlcyQxID0gZnVuY3Rpb24gbWF0Y2hlcyhxdWVyeSwgZWxlKSB7XG4gICAgcmV0dXJuIHF1ZXJ5LmNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hrKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbY2hrLnR5cGVdKGNoaywgZWxlKTtcbiAgICB9KTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLkdST1VQXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgdmFyIGdyb3VwID0gY2hlY2sudmFsdWU7XG4gICAgcmV0dXJuIGdyb3VwID09PSAnKicgfHwgZ3JvdXAgPT09IGVsZS5ncm91cCgpO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuU1RBVEVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgc3RhdGVTZWxlY3RvciA9IGNoZWNrLnZhbHVlO1xuICAgIHJldHVybiBzdGF0ZVNlbGVjdG9yTWF0Y2hlcyhzdGF0ZVNlbGVjdG9yLCBlbGUpO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuSURdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgaWQgPSBjaGVjay52YWx1ZTtcbiAgICByZXR1cm4gZWxlLmlkKCkgPT09IGlkO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuQ0xBU1NdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgY2xzID0gY2hlY2sudmFsdWU7XG4gICAgcmV0dXJuIGVsZS5oYXNDbGFzcyhjbHMpO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuTUVUQV9DT01QQVJFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgICAgIG9wZXJhdG9yID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgIHZhbHVlID0gY2hlY2sudmFsdWU7XG4gICAgcmV0dXJuIHZhbENtcChtZXRhKGVsZSwgZmllbGQpLCBvcGVyYXRvciwgdmFsdWUpO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuREFUQV9DT01QQVJFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgICAgIG9wZXJhdG9yID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgIHZhbHVlID0gY2hlY2sudmFsdWU7XG4gICAgcmV0dXJuIHZhbENtcChkYXRhJDEoZWxlLCBmaWVsZCksIG9wZXJhdG9yLCB2YWx1ZSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5EQVRBX0JPT0xdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgZmllbGQgPSBjaGVjay5maWVsZCxcbiAgICAgICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcjtcbiAgICByZXR1cm4gYm9vbENtcChkYXRhJDEoZWxlLCBmaWVsZCksIG9wZXJhdG9yKTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLkRBVEFfRVhJU1RdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgZmllbGQgPSBjaGVjay5maWVsZDtcbiAgICAgICAgY2hlY2sub3BlcmF0b3I7XG4gICAgcmV0dXJuIGV4aXN0Q21wKGRhdGEkMShlbGUsIGZpZWxkKSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5VTkRJUkVDVEVEX0VER0VdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgcUEgPSBjaGVjay5ub2Rlc1swXTtcbiAgICB2YXIgcUIgPSBjaGVjay5ub2Rlc1sxXTtcbiAgICB2YXIgc3JjID0gZWxlLnNvdXJjZSgpO1xuICAgIHZhciB0Z3QgPSBlbGUudGFyZ2V0KCk7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShxQSwgc3JjKSAmJiBtYXRjaGVzJDEocUIsIHRndCkgfHwgbWF0Y2hlcyQxKHFCLCBzcmMpICYmIG1hdGNoZXMkMShxQSwgdGd0KTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLk5PREVfTkVJR0hCT1JdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLm5vZGUsIGVsZSkgJiYgZWxlLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay5uZWlnaGJvciwgbik7XG4gICAgfSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5ESVJFQ1RFRF9FREdFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIGVsZS5zb3VyY2UoKSkgJiYgbWF0Y2hlcyQxKGNoZWNrLnRhcmdldCwgZWxlLnRhcmdldCgpKTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLk5PREVfU09VUkNFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIGVsZSkgJiYgZWxlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4uaXNOb2RlKCkgJiYgbWF0Y2hlcyQxKGNoZWNrLnRhcmdldCwgbik7XG4gICAgfSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5OT0RFX1RBUkdFVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICAgIHJldHVybiBtYXRjaGVzJDEoY2hlY2sudGFyZ2V0LCBlbGUpICYmIGVsZS5pbmNvbWVycygpLnNvbWUoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIG4pO1xuICAgIH0pO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuQ0hJTERdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmNoaWxkLCBlbGUpICYmIG1hdGNoZXMkMShjaGVjay5wYXJlbnQsIGVsZS5wYXJlbnQoKSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5QQVJFTlRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnBhcmVudCwgZWxlKSAmJiBlbGUuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmNoaWxkLCBjKTtcbiAgICB9KTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLkRFU0NFTkRBTlRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmRlc2NlbmRhbnQsIGVsZSkgJiYgZWxlLmFuY2VzdG9ycygpLnNvbWUoZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzJDEoY2hlY2suYW5jZXN0b3IsIGEpO1xuICAgIH0pO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuQU5DRVNUT1JdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmFuY2VzdG9yLCBlbGUpICYmIGVsZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzJDEoY2hlY2suZGVzY2VuZGFudCwgZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5DT01QT1VORF9TUExJVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICAgIHJldHVybiBtYXRjaGVzJDEoY2hlY2suc3ViamVjdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2subGVmdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2sucmlnaHQsIGVsZSk7XG4gIH07XG5cbiAgbWF0Y2hbVHlwZS5UUlVFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBtYXRjaFtUeXBlLkNPTExFQ1RJT05dID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgICB2YXIgY29sbGVjdGlvbiA9IGNoZWNrLnZhbHVlO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmhhcyhlbGUpO1xuICB9O1xuXG4gIG1hdGNoW1R5cGUuRklMVEVSXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gICAgdmFyIGZpbHRlciA9IGNoZWNrLnZhbHVlO1xuICAgIHJldHVybiBmaWx0ZXIoZWxlKTtcbiAgfTtcblxuICB2YXIgZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7IC8vIGZvciAxIGlkICNmb28gcXVlcmllcywganVzdCBnZXQgdGhlIGVsZW1lbnRcblxuICAgIGlmIChzZWxmLmxlbmd0aCA9PT0gMSAmJiBzZWxmWzBdLmNoZWNrcy5sZW5ndGggPT09IDEgJiYgc2VsZlswXS5jaGVja3NbMF0udHlwZSA9PT0gVHlwZS5JRCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0RWxlbWVudEJ5SWQoc2VsZlswXS5jaGVja3NbMF0udmFsdWUpLmNvbGxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIHNlbGVjdG9yRnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IHNlbGZbal07XG5cbiAgICAgICAgaWYgKG1hdGNoZXMkMShxdWVyeSwgZWxlbWVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGlmIChzZWxmLnRleHQoKSA9PSBudWxsKSB7XG4gICAgICBzZWxlY3RvckZ1bmN0aW9uID0gZnVuY3Rpb24gc2VsZWN0b3JGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBjb2xsZWN0aW9uLmZpbHRlcihzZWxlY3RvckZ1bmN0aW9uKTtcbiAgfTsgLy8gZmlsdGVyXG4gIC8vIGRvZXMgc2VsZWN0b3IgbWF0Y2ggYSBzaW5nbGUgZWxlbWVudD9cblxuXG4gIHZhciBtYXRjaGVzID0gZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGYubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBxdWVyeSA9IHNlbGZbal07XG5cbiAgICAgIGlmIChtYXRjaGVzJDEocXVlcnksIGVsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9OyAvLyBtYXRjaGVzXG5cblxuICB2YXIgbWF0Y2hpbmcgPSB7XG4gICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICBmaWx0ZXI6IGZpbHRlclxuICB9O1xuXG4gIHZhciBTZWxlY3RvciA9IGZ1bmN0aW9uIFNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gICAgdGhpcy5pbnB1dFRleHQgPSBzZWxlY3RvcjtcbiAgICB0aGlzLmN1cnJlbnRTdWJqZWN0ID0gbnVsbDtcbiAgICB0aGlzLmNvbXBvdW5kQ291bnQgPSAwO1xuICAgIHRoaXMuZWRnZUNvdW50ID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICBpZiAoc2VsZWN0b3IgPT0gbnVsbCB8fCBzdHJpbmcoc2VsZWN0b3IpICYmIHNlbGVjdG9yLm1hdGNoKC9eXFxzKiQvKSkgOyBlbHNlIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKHNlbGVjdG9yKSkge1xuICAgICAgdGhpcy5hZGRRdWVyeSh7XG4gICAgICAgIGNoZWNrczogW3tcbiAgICAgICAgICB0eXBlOiBUeXBlLkNPTExFQ1RJT04sXG4gICAgICAgICAgdmFsdWU6IHNlbGVjdG9yLmNvbGxlY3Rpb24oKVxuICAgICAgICB9XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmbiQ2KHNlbGVjdG9yKSkge1xuICAgICAgdGhpcy5hZGRRdWVyeSh7XG4gICAgICAgIGNoZWNrczogW3tcbiAgICAgICAgICB0eXBlOiBUeXBlLkZJTFRFUixcbiAgICAgICAgICB2YWx1ZTogc2VsZWN0b3JcbiAgICAgICAgfV1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nKHNlbGVjdG9yKSkge1xuICAgICAgaWYgKCF0aGlzLnBhcnNlKHNlbGVjdG9yKSkge1xuICAgICAgICB0aGlzLmludmFsaWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignQSBzZWxlY3RvciBtdXN0IGJlIGNyZWF0ZWQgZnJvbSBhIHN0cmluZzsgZm91bmQgJyk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBzZWxmbiA9IFNlbGVjdG9yLnByb3RvdHlwZTtcbiAgW3BhcnNlJDEsIG1hdGNoaW5nXS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIGV4dGVuZChzZWxmbiwgcCk7XG4gIH0pO1xuXG4gIHNlbGZuLnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0O1xuICB9O1xuXG4gIHNlbGZuLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICB9O1xuXG4gIHNlbGZuLmVxID0gZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gdGhpc1tpXTtcbiAgfTtcblxuICBzZWxmbi5zYW1lVGV4dCA9IGZ1bmN0aW9uIChvdGhlclNlbCkge1xuICAgIHJldHVybiAhdGhpcy5pbnZhbGlkICYmICFvdGhlclNlbC5pbnZhbGlkICYmIHRoaXMudGV4dCgpID09PSBvdGhlclNlbC50ZXh0KCk7XG4gIH07XG5cbiAgc2VsZm4uYWRkUXVlcnkgPSBmdW5jdGlvbiAocSkge1xuICAgIHRoaXNbdGhpcy5sZW5ndGgrK10gPSBxO1xuICB9O1xuXG4gIHNlbGZuLnNlbGVjdG9yID0gc2VsZm4udG9TdHJpbmc7XG5cbiAgdmFyIGVsZXNmbiRnID0ge1xuICAgIGFsbEFyZTogZnVuY3Rpb24gYWxsQXJlKHNlbGVjdG9yKSB7XG4gICAgICB2YXIgc2VsT2JqID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzOiBmdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICAgICAgdmFyIHNlbE9iaiA9IG5ldyBTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICByZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoZm4sIHRoaXNBcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmV0ID0gIXRoaXNBcmcgPyBmbih0aGlzW2ldLCBpLCB0aGlzKSA6IGZuLmFwcGx5KHRoaXNBcmcsIFt0aGlzW2ldLCBpLCB0aGlzXSk7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShmbiwgdGhpc0FyZykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZXQgPSAhdGhpc0FyZyA/IGZuKHRoaXNbaV0sIGksIHRoaXMpIDogZm4uYXBwbHkodGhpc0FyZywgW3RoaXNbaV0sIGksIHRoaXNdKTtcblxuICAgICAgICBpZiAoIXJldCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHNhbWU6IGZ1bmN0aW9uIHNhbWUoY29sbGVjdGlvbikge1xuICAgICAgLy8gY2hlYXAgY29sbGVjdGlvbiByZWYgY2hlY2tcbiAgICAgIGlmICh0aGlzID09PSBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgICB2YXIgdGhpc0xlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgdmFyIGNvbGxlY3Rpb25MZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsgLy8gY2hlYXAgbGVuZ3RoIGNoZWNrXG5cbiAgICAgIGlmICh0aGlzTGVuZ3RoICE9PSBjb2xsZWN0aW9uTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gY2hlYXAgZWxlbWVudCByZWYgY2hlY2tcblxuXG4gICAgICBpZiAodGhpc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdGhpc1swXSA9PT0gY29sbGVjdGlvblswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYW55U2FtZTogZnVuY3Rpb24gYW55U2FtZShjb2xsZWN0aW9uKSB7XG4gICAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uaGFzRWxlbWVudFdpdGhJZChlbGUuaWQoKSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFsbEFyZU5laWdoYm9yczogZnVuY3Rpb24gYWxsQXJlTmVpZ2hib3JzKGNvbGxlY3Rpb24pIHtcbiAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmN5KCkuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICAgIHZhciBuaG9vZCA9IHRoaXMubmVpZ2hib3Job29kKCk7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5ldmVyeShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBuaG9vZC5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uIGNvbnRhaW5zKGNvbGxlY3Rpb24pIHtcbiAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmN5KCkuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaGFzRWxlbWVudFdpdGhJZChlbGUuaWQoKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGVsZXNmbiRnLmFsbEFyZU5laWdoYm91cnMgPSBlbGVzZm4kZy5hbGxBcmVOZWlnaGJvcnM7XG4gIGVsZXNmbiRnLmhhcyA9IGVsZXNmbiRnLmNvbnRhaW5zO1xuICBlbGVzZm4kZy5lcXVhbCA9IGVsZXNmbiRnLmVxdWFscyA9IGVsZXNmbiRnLnNhbWU7XG5cbiAgdmFyIGNhY2hlID0gZnVuY3Rpb24gY2FjaGUoZm4sIG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdHJhdmVyc2FsQ2FjaGUoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgdmFyIHNlbGVjdG9yT3JFbGVzID0gYXJnMTtcbiAgICAgIHZhciBlbGVzID0gdGhpcztcbiAgICAgIHZhciBrZXk7XG5cbiAgICAgIGlmIChzZWxlY3Rvck9yRWxlcyA9PSBudWxsKSB7XG4gICAgICAgIGtleSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKHNlbGVjdG9yT3JFbGVzKSAmJiBzZWxlY3Rvck9yRWxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAga2V5ID0gc2VsZWN0b3JPckVsZXMuaWQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZXMubGVuZ3RoID09PSAxICYmIGtleSkge1xuICAgICAgICB2YXIgX3AgPSBlbGVzWzBdLl9wcml2YXRlO1xuICAgICAgICB2YXIgdGNoID0gX3AudHJhdmVyc2FsQ2FjaGUgPSBfcC50cmF2ZXJzYWxDYWNoZSB8fCB7fTtcbiAgICAgICAgdmFyIGNoID0gdGNoW25hbWVdID0gdGNoW25hbWVdIHx8IFtdO1xuICAgICAgICB2YXIgaGFzaCA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgICAgICAgdmFyIGNhY2hlSGl0ID0gY2hbaGFzaF07XG5cbiAgICAgICAgaWYgKGNhY2hlSGl0KSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlSGl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjaFtoYXNoXSA9IGZuLmNhbGwoZWxlcywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKGVsZXMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgdmFyIGVsZXNmbiRmID0ge1xuICAgIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KHNlbGVjdG9yKSB7XG4gICAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBvcHRpbWlzYXRpb24gZm9yIHNpbmdsZSBlbGUgY2FsbFxuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXNbMF0uX3ByaXZhdGUucGFyZW50O1xuXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIF9wYXJlbnQgPSBlbGUuX3ByaXZhdGUucGFyZW50O1xuXG4gICAgICAgIGlmIChfcGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKF9wYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKHBhcmVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSxcbiAgICBwYXJlbnRzOiBmdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gICAgICB2YXIgcGFyZW50cyA9IFtdO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzLnBhcmVudCgpO1xuXG4gICAgICB3aGlsZSAoZWxlcy5ub25lbXB0eSgpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICAgIHBhcmVudHMucHVzaChlbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlcyA9IGVsZXMucGFyZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKHBhcmVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSxcbiAgICBjb21tb25BbmNlc3RvcnM6IGZ1bmN0aW9uIGNvbW1vbkFuY2VzdG9ycyhzZWxlY3Rvcikge1xuICAgICAgdmFyIGFuY2VzdG9ycztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgcGFyZW50cyA9IGVsZS5wYXJlbnRzKCk7XG4gICAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycyB8fCBwYXJlbnRzO1xuICAgICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMuaW50ZXJzZWN0KHBhcmVudHMpOyAvLyBjdXJyZW50IGxpc3QgbXVzdCBiZSBjb21tb24gd2l0aCBjdXJyZW50IGVsZSBwYXJlbnRzIHNldFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYW5jZXN0b3JzLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSxcbiAgICBvcnBoYW5zOiBmdW5jdGlvbiBvcnBoYW5zKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmlzT3JwaGFuKCk7XG4gICAgICB9KS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgbm9ub3JwaGFuczogZnVuY3Rpb24gbm9ub3JwaGFucyhzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5pc0NoaWxkKCk7XG4gICAgICB9KS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgY2hpbGRyZW46IGNhY2hlKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIGVsZUNoaWxkcmVuID0gZWxlLl9wcml2YXRlLmNoaWxkcmVuO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWxlQ2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zcGF3bihjaGlsZHJlbiwgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9LCAnY2hpbGRyZW4nKSxcbiAgICBzaWJsaW5nczogZnVuY3Rpb24gc2libGluZ3Moc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmNoaWxkcmVuKCkubm90KHRoaXMpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSxcbiAgICBpc1BhcmVudDogZnVuY3Rpb24gaXNQYXJlbnQoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGggIT09IDA7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc0NoaWxkbGVzczogZnVuY3Rpb24gaXNDaGlsZGxlc3MoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGggPT09IDA7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc0NoaWxkOiBmdW5jdGlvbiBpc0NoaWxkKCkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUucGFyZW50ICE9IG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc09ycGhhbjogZnVuY3Rpb24gaXNPcnBoYW4oKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5wYXJlbnQgPT0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NlbmRhbnRzOiBmdW5jdGlvbiBkZXNjZW5kYW50cyhzZWxlY3Rvcikge1xuICAgICAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgICAgIGZ1bmN0aW9uIGFkZChlbGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcblxuICAgICAgICAgIGlmIChlbGUuY2hpbGRyZW4oKS5ub25lbXB0eSgpKSB7XG4gICAgICAgICAgICBhZGQoZWxlLmNoaWxkcmVuKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGQodGhpcy5jaGlsZHJlbigpKTtcbiAgICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBmb3JFYWNoQ29tcG91bmQoZWxlcywgZm4sIGluY2x1ZGVTZWxmLCByZWN1cnNpdmVTdGVwKSB7XG4gICAgdmFyIHEgPSBbXTtcbiAgICB2YXIgZGlkID0gbmV3IFNldCQxKCk7XG4gICAgdmFyIGN5ID0gZWxlcy5jeSgpO1xuICAgIHZhciBoYXNDb21wb3VuZHMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuXG4gICAgICBpZiAoaW5jbHVkZVNlbGYpIHtcbiAgICAgICAgcS5wdXNoKGVsZSk7XG4gICAgICB9IGVsc2UgaWYgKGhhc0NvbXBvdW5kcykge1xuICAgICAgICByZWN1cnNpdmVTdGVwKHEsIGRpZCwgZWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAocS5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgX2VsZSA9IHEuc2hpZnQoKTtcblxuICAgICAgZm4oX2VsZSk7XG4gICAgICBkaWQuYWRkKF9lbGUuaWQoKSk7XG5cbiAgICAgIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgICAgcmVjdXJzaXZlU3RlcChxLCBkaWQsIF9lbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVzO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkQ2hpbGRyZW4ocSwgZGlkLCBlbGUpIHtcbiAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsZS5fcHJpdmF0ZS5jaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgICAgICBpZiAoIWRpZC5oYXMoY2hpbGQuaWQoKSkpIHtcbiAgICAgICAgICBxLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIHZlcnkgZWZmaWNpZW50IHZlcnNpb24gb2YgZWxlcy5hZGQoIGVsZXMuZGVzY2VuZGFudHMoKSApLmZvckVhY2goKVxuICAvLyBmb3IgaW50ZXJuYWwgdXNlXG5cblxuICBlbGVzZm4kZi5mb3JFYWNoRG93biA9IGZ1bmN0aW9uIChmbikge1xuICAgIHZhciBpbmNsdWRlU2VsZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICByZXR1cm4gZm9yRWFjaENvbXBvdW5kKHRoaXMsIGZuLCBpbmNsdWRlU2VsZiwgYWRkQ2hpbGRyZW4pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZFBhcmVudChxLCBkaWQsIGVsZSkge1xuICAgIGlmIChlbGUuaXNDaGlsZCgpKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWxlLl9wcml2YXRlLnBhcmVudDtcblxuICAgICAgaWYgKCFkaWQuaGFzKHBhcmVudC5pZCgpKSkge1xuICAgICAgICBxLnB1c2gocGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbGVzZm4kZi5mb3JFYWNoVXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgaW5jbHVkZVNlbGYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgcmV0dXJuIGZvckVhY2hDb21wb3VuZCh0aGlzLCBmbiwgaW5jbHVkZVNlbGYsIGFkZFBhcmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkUGFyZW50QW5kQ2hpbGRyZW4ocSwgZGlkLCBlbGUpIHtcbiAgICBhZGRQYXJlbnQocSwgZGlkLCBlbGUpO1xuICAgIGFkZENoaWxkcmVuKHEsIGRpZCwgZWxlKTtcbiAgfVxuXG4gIGVsZXNmbiRmLmZvckVhY2hVcEFuZERvd24gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgaW5jbHVkZVNlbGYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgcmV0dXJuIGZvckVhY2hDb21wb3VuZCh0aGlzLCBmbiwgaW5jbHVkZVNlbGYsIGFkZFBhcmVudEFuZENoaWxkcmVuKTtcbiAgfTsgLy8gYWxpYXNlc1xuXG5cbiAgZWxlc2ZuJGYuYW5jZXN0b3JzID0gZWxlc2ZuJGYucGFyZW50cztcblxuICB2YXIgZm4kNSwgZWxlc2ZuJGU7XG4gIGZuJDUgPSBlbGVzZm4kZSA9IHtcbiAgICBkYXRhOiBkZWZpbmUuZGF0YSh7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgYmluZGluZ0V2ZW50OiAnZGF0YScsXG4gICAgICBhbGxvd0JpbmRpbmc6IHRydWUsXG4gICAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgICBzZXR0aW5nRXZlbnQ6ICdkYXRhJyxcbiAgICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlS2V5czoge1xuICAgICAgICAnaWQnOiB0cnVlLFxuICAgICAgICAnc291cmNlJzogdHJ1ZSxcbiAgICAgICAgJ3RhcmdldCc6IHRydWUsXG4gICAgICAgICdwYXJlbnQnOiB0cnVlXG4gICAgICB9LFxuICAgICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgICB9KSxcbiAgICByZW1vdmVEYXRhOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgZXZlbnQ6ICdkYXRhJyxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIHRyaWdnZXJFdmVudDogdHJ1ZSxcbiAgICAgIGltbXV0YWJsZUtleXM6IHtcbiAgICAgICAgJ2lkJzogdHJ1ZSxcbiAgICAgICAgJ3NvdXJjZSc6IHRydWUsXG4gICAgICAgICd0YXJnZXQnOiB0cnVlLFxuICAgICAgICAncGFyZW50JzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gICAgfSksXG4gICAgc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICAgIGJpbmRpbmdFdmVudDogJ3NjcmF0Y2gnLFxuICAgICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgICAgc2V0dGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gICAgfSksXG4gICAgcmVtb3ZlU2NyYXRjaDogZGVmaW5lLnJlbW92ZURhdGEoe1xuICAgICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICAgIGV2ZW50OiAnc2NyYXRjaCcsXG4gICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICAgIH0pLFxuICAgIHJzY3JhdGNoOiBkZWZpbmUuZGF0YSh7XG4gICAgICBmaWVsZDogJ3JzY3JhdGNoJyxcbiAgICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogZmFsc2UsXG4gICAgICBhbGxvd0dldHRpbmc6IHRydWVcbiAgICB9KSxcbiAgICByZW1vdmVSc2NyYXRjaDogZGVmaW5lLnJlbW92ZURhdGEoe1xuICAgICAgZmllbGQ6ICdyc2NyYXRjaCcsXG4gICAgICB0cmlnZ2VyRXZlbnQ6IGZhbHNlXG4gICAgfSksXG4gICAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gYWxpYXNlc1xuXG4gIGZuJDUuYXR0ciA9IGZuJDUuZGF0YTtcbiAgZm4kNS5yZW1vdmVBdHRyID0gZm4kNS5yZW1vdmVEYXRhO1xuICB2YXIgZGF0YSA9IGVsZXNmbiRlO1xuXG4gIHZhciBlbGVzZm4kZCA9IHt9O1xuXG4gIGZ1bmN0aW9uIGRlZmluZURlZ3JlZUZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpbmNsdWRlTG9vcHMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgaWYgKGluY2x1ZGVMb29wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluY2x1ZGVMb29wcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLmlzTm9kZSgpICYmICFzZWxmLnJlbW92ZWQoKSkge1xuICAgICAgICB2YXIgZGVncmVlID0gMDtcbiAgICAgICAgdmFyIG5vZGUgPSBzZWxmWzBdO1xuICAgICAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2ldO1xuXG4gICAgICAgICAgaWYgKCFpbmNsdWRlTG9vcHMgJiYgZWRnZS5pc0xvb3AoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVncmVlICs9IGNhbGxiYWNrKG5vZGUsIGVkZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZ3JlZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZXh0ZW5kKGVsZXNmbiRkLCB7XG4gICAgZGVncmVlOiBkZWZpbmVEZWdyZWVGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgZWRnZSkge1xuICAgICAgaWYgKGVkZ2Uuc291cmNlKCkuc2FtZShlZGdlLnRhcmdldCgpKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGluZGVncmVlOiBkZWZpbmVEZWdyZWVGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgZWRnZSkge1xuICAgICAgaWYgKGVkZ2UudGFyZ2V0KCkuc2FtZShub2RlKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pLFxuICAgIG91dGRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICAgIGlmIChlZGdlLnNvdXJjZSgpLnNhbWUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KVxuICB9KTtcblxuICBmdW5jdGlvbiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbihkZWdyZWVGbiwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGluY2x1ZGVMb29wcykge1xuICAgICAgdmFyIHJldDtcbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBkZWdyZWUgPSBlbGVbZGVncmVlRm5dKGluY2x1ZGVMb29wcyk7XG5cbiAgICAgICAgaWYgKGRlZ3JlZSAhPT0gdW5kZWZpbmVkICYmIChyZXQgPT09IHVuZGVmaW5lZCB8fCBjYWxsYmFjayhkZWdyZWUsIHJldCkpKSB7XG4gICAgICAgICAgcmV0ID0gZGVncmVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbiAgfVxuXG4gIGV4dGVuZChlbGVzZm4kZCwge1xuICAgIG1pbkRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ2RlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgICAgcmV0dXJuIGRlZ3JlZSA8IG1pbjtcbiAgICB9KSxcbiAgICBtYXhEZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtYXgpIHtcbiAgICAgIHJldHVybiBkZWdyZWUgPiBtYXg7XG4gICAgfSksXG4gICAgbWluSW5kZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdpbmRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgICAgcmV0dXJuIGRlZ3JlZSA8IG1pbjtcbiAgICB9KSxcbiAgICBtYXhJbmRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ2luZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgICByZXR1cm4gZGVncmVlID4gbWF4O1xuICAgIH0pLFxuICAgIG1pbk91dGRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ291dGRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgICAgcmV0dXJuIGRlZ3JlZSA8IG1pbjtcbiAgICB9KSxcbiAgICBtYXhPdXRkZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdvdXRkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtYXgpIHtcbiAgICAgIHJldHVybiBkZWdyZWUgPiBtYXg7XG4gICAgfSlcbiAgfSk7XG4gIGV4dGVuZChlbGVzZm4kZCwge1xuICAgIHRvdGFsRGVncmVlOiBmdW5jdGlvbiB0b3RhbERlZ3JlZShpbmNsdWRlTG9vcHMpIHtcbiAgICAgIHZhciB0b3RhbCA9IDA7XG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG90YWwgKz0gbm9kZXNbaV0uZGVncmVlKGluY2x1ZGVMb29wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBmbiQ0LCBlbGVzZm4kYztcblxuICB2YXIgYmVmb3JlUG9zaXRpb25TZXQgPSBmdW5jdGlvbiBiZWZvcmVQb3NpdGlvblNldChlbGVzLCBuZXdQb3MsIHNpbGVudCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG5cbiAgICAgIGlmICghZWxlLmxvY2tlZCgpKSB7XG4gICAgICAgIHZhciBvbGRQb3MgPSBlbGUuX3ByaXZhdGUucG9zaXRpb247XG4gICAgICAgIHZhciBkZWx0YSA9IHtcbiAgICAgICAgICB4OiBuZXdQb3MueCAhPSBudWxsID8gbmV3UG9zLnggLSBvbGRQb3MueCA6IDAsXG4gICAgICAgICAgeTogbmV3UG9zLnkgIT0gbnVsbCA/IG5ld1Bvcy55IC0gb2xkUG9zLnkgOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGVsZS5pc1BhcmVudCgpICYmICEoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSkge1xuICAgICAgICAgIGVsZS5jaGlsZHJlbigpLnNoaWZ0KGRlbHRhLCBzaWxlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgcG9zaXRpb25EZWYgPSB7XG4gICAgZmllbGQ6ICdwb3NpdGlvbicsXG4gICAgYmluZGluZ0V2ZW50OiAncG9zaXRpb24nLFxuICAgIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgc2V0dGluZ0V2ZW50OiAncG9zaXRpb24nLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgIHRyaWdnZXJGbk5hbWU6ICdlbWl0QW5kTm90aWZ5JyxcbiAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgdmFsaWRLZXlzOiBbJ3gnLCAneSddLFxuICAgIGJlZm9yZUdldDogZnVuY3Rpb24gYmVmb3JlR2V0KGVsZSkge1xuICAgICAgZWxlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCk7XG4gICAgfSxcbiAgICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChlbGVzLCBuZXdQb3MpIHtcbiAgICAgIGJlZm9yZVBvc2l0aW9uU2V0KGVsZXMsIG5ld1BvcywgZmFsc2UpO1xuICAgIH0sXG4gICAgb25TZXQ6IGZ1bmN0aW9uIG9uU2V0KGVsZXMpIHtcbiAgICAgIGVsZXMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgfSxcbiAgICBjYW5TZXQ6IGZ1bmN0aW9uIGNhblNldChlbGUpIHtcbiAgICAgIHJldHVybiAhZWxlLmxvY2tlZCgpO1xuICAgIH1cbiAgfTtcbiAgZm4kNCA9IGVsZXNmbiRjID0ge1xuICAgIHBvc2l0aW9uOiBkZWZpbmUuZGF0YShwb3NpdGlvbkRlZiksXG4gICAgLy8gcG9zaXRpb24gYnV0IG5vIG5vdGlmaWNhdGlvbiB0byByZW5kZXJlclxuICAgIHNpbGVudFBvc2l0aW9uOiBkZWZpbmUuZGF0YShleHRlbmQoe30sIHBvc2l0aW9uRGVmLCB7XG4gICAgICBhbGxvd0JpbmRpbmc6IGZhbHNlLFxuICAgICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IGZhbHNlLFxuICAgICAgYWxsb3dHZXR0aW5nOiBmYWxzZSxcbiAgICAgIGJlZm9yZVNldDogZnVuY3Rpb24gYmVmb3JlU2V0KGVsZXMsIG5ld1Bvcykge1xuICAgICAgICBiZWZvcmVQb3NpdGlvblNldChlbGVzLCBuZXdQb3MsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2V0OiBmdW5jdGlvbiBvblNldChlbGVzKSB7XG4gICAgICAgIGVsZXMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgICB9XG4gICAgfSkpLFxuICAgIHBvc2l0aW9uczogZnVuY3Rpb24gcG9zaXRpb25zKHBvcywgc2lsZW50KSB7XG4gICAgICBpZiAocGxhaW5PYmplY3QocG9zKSkge1xuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgdGhpcy5zaWxlbnRQb3NpdGlvbihwb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9zaXRpb24ocG9zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmbiQ2KHBvcykpIHtcbiAgICAgICAgdmFyIF9mbiA9IHBvcztcbiAgICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG5cbiAgICAgICAgICB2YXIgX3BvcyA9IHZvaWQgMDtcblxuICAgICAgICAgIGlmIChfcG9zID0gX2ZuKGVsZSwgaSkpIHtcbiAgICAgICAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgICAgICAgZWxlLnNpbGVudFBvc2l0aW9uKF9wb3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWxlLnBvc2l0aW9uKF9wb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgc2lsZW50UG9zaXRpb25zOiBmdW5jdGlvbiBzaWxlbnRQb3NpdGlvbnMocG9zKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbnMocG9zLCB0cnVlKTtcbiAgICB9LFxuICAgIHNoaWZ0OiBmdW5jdGlvbiBzaGlmdChkaW0sIHZhbCwgc2lsZW50KSB7XG4gICAgICB2YXIgZGVsdGE7XG5cbiAgICAgIGlmIChwbGFpbk9iamVjdChkaW0pKSB7XG4gICAgICAgIGRlbHRhID0ge1xuICAgICAgICAgIHg6IG51bWJlciQxKGRpbS54KSA/IGRpbS54IDogMCxcbiAgICAgICAgICB5OiBudW1iZXIkMShkaW0ueSkgPyBkaW0ueSA6IDBcbiAgICAgICAgfTtcbiAgICAgICAgc2lsZW50ID0gdmFsO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmcoZGltKSAmJiBudW1iZXIkMSh2YWwpKSB7XG4gICAgICAgIGRlbHRhID0ge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9O1xuICAgICAgICBkZWx0YVtkaW1dID0gdmFsO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVsdGEgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTsgLy8gZXhjbHVkZSBhbnkgbm9kZSB0aGF0IGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgY2FsbGluZyBjb2xsZWN0aW9uXG5cbiAgICAgICAgICBpZiAoY3kuaGFzQ29tcG91bmROb2RlcygpICYmIGVsZS5pc0NoaWxkKCkgJiYgZWxlLmFuY2VzdG9ycygpLmFueVNhbWUodGhpcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcbiAgICAgICAgICB2YXIgbmV3UG9zID0ge1xuICAgICAgICAgICAgeDogcG9zLnggKyBkZWx0YS54LFxuICAgICAgICAgICAgeTogcG9zLnkgKyBkZWx0YS55XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgICAgIGVsZS5zaWxlbnRQb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGUucG9zaXRpb24obmV3UG9zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjeS5lbmRCYXRjaCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHNpbGVudFNoaWZ0OiBmdW5jdGlvbiBzaWxlbnRTaGlmdChkaW0sIHZhbCkge1xuICAgICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgICAgdGhpcy5zaGlmdChkaW0sIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmcoZGltKSAmJiBudW1iZXIkMSh2YWwpKSB7XG4gICAgICAgIHRoaXMuc2hpZnQoZGltLCB2YWwsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8vIGdldC9zZXQgdGhlIHJlbmRlcmVkIChpLmUuIG9uIHNjcmVlbikgcG9zaXRvbiBvZiB0aGUgZWxlbWVudFxuICAgIHJlbmRlcmVkUG9zaXRpb246IGZ1bmN0aW9uIHJlbmRlcmVkUG9zaXRpb24oZGltLCB2YWwpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICB2YXIgcnBvcyA9IHBsYWluT2JqZWN0KGRpbSkgPyBkaW0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgc2V0dGluZyA9IHJwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcblxuICAgICAgaWYgKGVsZSAmJiBlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9lbGUgPSB0aGlzW2ldO1xuXG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IG9uZSBkaW1lbnNpb25cbiAgICAgICAgICAgICAgX2VsZS5wb3NpdGlvbihkaW0sICh2YWwgLSBwYW5bZGltXSkgLyB6b29tKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnBvcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIHNldCB3aG9sZSBwb3NpdGlvblxuICAgICAgICAgICAgICBfZWxlLnBvc2l0aW9uKHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uKHJwb3MsIHpvb20sIHBhbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBnZXR0aW5nXG4gICAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICAgIHJwb3MgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwb3MsIHpvb20sIHBhbik7XG5cbiAgICAgICAgICBpZiAoZGltID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSB3aG9sZSByZW5kZXJlZCBwb3NpdGlvblxuICAgICAgICAgICAgcmV0dXJuIHJwb3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uXG4gICAgICAgICAgICByZXR1cm4gcnBvc1tkaW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2V0dGluZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBmb3IgZW1wdHkgY29sbGVjdGlvbiBjYXNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgLy8gZ2V0L3NldCB0aGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICAgIHJlbGF0aXZlUG9zaXRpb246IGZ1bmN0aW9uIHJlbGF0aXZlUG9zaXRpb24oZGltLCB2YWwpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgdmFyIHBwb3MgPSBwbGFpbk9iamVjdChkaW0pID8gZGltIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHNldHRpbmcgPSBwcG9zICE9PSB1bmRlZmluZWQgfHwgdmFsICE9PSB1bmRlZmluZWQgJiYgc3RyaW5nKGRpbSk7XG4gICAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcblxuICAgICAgaWYgKGVsZSAmJiBlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9lbGUyID0gdGhpc1tpXTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBoYXNDb21wb3VuZE5vZGVzID8gX2VsZTIucGFyZW50KCkgOiBudWxsO1xuICAgICAgICAgICAgdmFyIGhhc1BhcmVudCA9IHBhcmVudCAmJiBwYXJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZVRvUGFyZW50ID0gaGFzUGFyZW50O1xuXG4gICAgICAgICAgICBpZiAoaGFzUGFyZW50KSB7XG4gICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG9yaWdpbiA9IHJlbGF0aXZlVG9QYXJlbnQgPyBwYXJlbnQucG9zaXRpb24oKSA6IHtcbiAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBvbmUgZGltZW5zaW9uXG4gICAgICAgICAgICAgIF9lbGUyLnBvc2l0aW9uKGRpbSwgdmFsICsgb3JpZ2luW2RpbV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHdob2xlIHBvc2l0aW9uXG4gICAgICAgICAgICAgIF9lbGUyLnBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICB4OiBwcG9zLnggKyBvcmlnaW4ueCxcbiAgICAgICAgICAgICAgICB5OiBwcG9zLnkgKyBvcmlnaW4ueVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZ2V0dGluZ1xuICAgICAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcblxuICAgICAgICAgIHZhciBfcGFyZW50ID0gaGFzQ29tcG91bmROb2RlcyA/IGVsZS5wYXJlbnQoKSA6IG51bGw7XG5cbiAgICAgICAgICB2YXIgX2hhc1BhcmVudCA9IF9wYXJlbnQgJiYgX3BhcmVudC5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgdmFyIF9yZWxhdGl2ZVRvUGFyZW50ID0gX2hhc1BhcmVudDtcblxuICAgICAgICAgIGlmIChfaGFzUGFyZW50KSB7XG4gICAgICAgICAgICBfcGFyZW50ID0gX3BhcmVudFswXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX29yaWdpbiA9IF9yZWxhdGl2ZVRvUGFyZW50ID8gX3BhcmVudC5wb3NpdGlvbigpIDoge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcHBvcyA9IHtcbiAgICAgICAgICAgIHg6IHBvcy54IC0gX29yaWdpbi54LFxuICAgICAgICAgICAgeTogcG9zLnkgLSBfb3JpZ2luLnlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGRpbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgd2hvbGUgcmVuZGVyZWQgcG9zaXRpb25cbiAgICAgICAgICAgIHJldHVybiBwcG9zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvblxuICAgICAgICAgICAgcmV0dXJuIHBwb3NbZGltXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNldHRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZm9yIGVtcHR5IGNvbGxlY3Rpb24gY2FzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9XG4gIH07IC8vIGFsaWFzZXNcblxuICBmbiQ0Lm1vZGVsUG9zaXRpb24gPSBmbiQ0LnBvaW50ID0gZm4kNC5wb3NpdGlvbjtcbiAgZm4kNC5tb2RlbFBvc2l0aW9ucyA9IGZuJDQucG9pbnRzID0gZm4kNC5wb3NpdGlvbnM7XG4gIGZuJDQucmVuZGVyZWRQb2ludCA9IGZuJDQucmVuZGVyZWRQb3NpdGlvbjtcbiAgZm4kNC5yZWxhdGl2ZVBvaW50ID0gZm4kNC5yZWxhdGl2ZVBvc2l0aW9uO1xuICB2YXIgcG9zaXRpb24gPSBlbGVzZm4kYztcblxuICB2YXIgZm4kMywgZWxlc2ZuJGI7XG4gIGZuJDMgPSBlbGVzZm4kYiA9IHt9O1xuXG4gIGVsZXNmbiRiLnJlbmRlcmVkQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBiYiA9IHRoaXMuYm91bmRpbmdCb3gob3B0aW9ucyk7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgeDEgPSBiYi54MSAqIHpvb20gKyBwYW4ueDtcbiAgICB2YXIgeDIgPSBiYi54MiAqIHpvb20gKyBwYW4ueDtcbiAgICB2YXIgeTEgPSBiYi55MSAqIHpvb20gKyBwYW4ueTtcbiAgICB2YXIgeTIgPSBiYi55MiAqIHpvb20gKyBwYW4ueTtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IHgxLFxuICAgICAgeDI6IHgyLFxuICAgICAgeTE6IHkxLFxuICAgICAgeTI6IHkyLFxuICAgICAgdzogeDIgLSB4MSxcbiAgICAgIGg6IHkyIC0geTFcbiAgICB9O1xuICB9O1xuXG4gIGVsZXNmbiRiLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2lsZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG5cbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpIHx8ICFjeS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICAgIF9wLmNvbXBvdW5kQm91bmRzQ2xlYW4gPSBmYWxzZTtcbiAgICAgICAgX3AuYmJDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICBlbGUuZW1pdEFuZE5vdGlmeSgnYm91bmRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBlbGVzZm4kYi51cGRhdGVDb21wb3VuZEJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTsgLy8gbm90IHBvc3NpYmxlIHRvIGRvIG9uIG5vbi1jb21wb3VuZCBncmFwaHMgb3Igd2l0aCB0aGUgc3R5bGUgZGlzYWJsZWRcblxuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkgfHwgIWN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyBzYXZlIGN5Y2xlcyB3aGVuIGJhdGNoaW5nIC0tIGJ1dCBib3VuZHMgd2lsbCBiZSBzdGFsZSAob3Igbm90IGV4aXN0IHlldClcblxuXG4gICAgaWYgKCFmb3JjZSAmJiBjeS5iYXRjaGluZygpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUocGFyZW50KSB7XG4gICAgICBpZiAoIXBhcmVudC5pc1BhcmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9wID0gcGFyZW50Ll9wcml2YXRlO1xuICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuKCk7XG4gICAgICB2YXIgaW5jbHVkZUxhYmVscyA9IHBhcmVudC5wc3R5bGUoJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJykudmFsdWUgPT09ICdpbmNsdWRlJztcbiAgICAgIHZhciBtaW4gPSB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgdmFsOiBwYXJlbnQucHN0eWxlKCdtaW4td2lkdGgnKS5wZlZhbHVlLFxuICAgICAgICAgIGxlZnQ6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aC1iaWFzLWxlZnQnKSxcbiAgICAgICAgICByaWdodDogcGFyZW50LnBzdHlsZSgnbWluLXdpZHRoLWJpYXMtcmlnaHQnKVxuICAgICAgICB9LFxuICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICB2YWw6IHBhcmVudC5wc3R5bGUoJ21pbi1oZWlnaHQnKS5wZlZhbHVlLFxuICAgICAgICAgIHRvcDogcGFyZW50LnBzdHlsZSgnbWluLWhlaWdodC1iaWFzLXRvcCcpLFxuICAgICAgICAgIGJvdHRvbTogcGFyZW50LnBzdHlsZSgnbWluLWhlaWdodC1iaWFzLWJvdHRvbScpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgYmIgPSBjaGlsZHJlbi5ib3VuZGluZ0JveCh7XG4gICAgICAgIGluY2x1ZGVMYWJlbHM6IGluY2x1ZGVMYWJlbHMsXG4gICAgICAgIGluY2x1ZGVPdmVybGF5czogZmFsc2UsXG4gICAgICAgIC8vIHVwZGF0aW5nIHRoZSBjb21wb3VuZCBib3VuZHMgaGFwcGVucyBvdXRzaWRlIG9mIHRoZSByZWd1bGFyXG4gICAgICAgIC8vIGNhY2hlIGN5Y2xlIChpLmUuIGJlZm9yZSBmaXJlZCBldmVudHMpXG4gICAgICAgIHVzZUNhY2hlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB2YXIgcG9zID0gX3AucG9zaXRpb247IC8vIGlmIGNoaWxkcmVuIHRha2UgdXAgemVybyBhcmVhIHRoZW4ga2VlcCBwb3NpdGlvbiBhbmQgZmFsbCBiYWNrIG9uIHN0eWxlc2hlZXQgdy9oXG5cbiAgICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgICAgYmIgPSB7XG4gICAgICAgICAgdzogcGFyZW50LnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlLFxuICAgICAgICAgIGg6IHBhcmVudC5wc3R5bGUoJ2hlaWdodCcpLnBmVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYmIueDEgPSBwb3MueCAtIGJiLncgLyAyO1xuICAgICAgICBiYi54MiA9IHBvcy54ICsgYmIudyAvIDI7XG4gICAgICAgIGJiLnkxID0gcG9zLnkgLSBiYi5oIC8gMjtcbiAgICAgICAgYmIueTIgPSBwb3MueSArIGJiLmggLyAyO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wdXRlQmlhc1ZhbHVlcyhwcm9wRGlmZiwgcHJvcEJpYXMsIHByb3BCaWFzQ29tcGxlbWVudCkge1xuICAgICAgICB2YXIgYmlhc0RpZmYgPSAwO1xuICAgICAgICB2YXIgYmlhc0NvbXBsZW1lbnREaWZmID0gMDtcbiAgICAgICAgdmFyIGJpYXNUb3RhbCA9IHByb3BCaWFzICsgcHJvcEJpYXNDb21wbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wRGlmZiA+IDAgJiYgYmlhc1RvdGFsID4gMCkge1xuICAgICAgICAgIGJpYXNEaWZmID0gcHJvcEJpYXMgLyBiaWFzVG90YWwgKiBwcm9wRGlmZjtcbiAgICAgICAgICBiaWFzQ29tcGxlbWVudERpZmYgPSBwcm9wQmlhc0NvbXBsZW1lbnQgLyBiaWFzVG90YWwgKiBwcm9wRGlmZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmlhc0RpZmY6IGJpYXNEaWZmLFxuICAgICAgICAgIGJpYXNDb21wbGVtZW50RGlmZjogYmlhc0NvbXBsZW1lbnREaWZmXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNvbXB1dGVQYWRkaW5nVmFsdWVzKHdpZHRoLCBoZWlnaHQsIHBhZGRpbmdPYmplY3QsIHJlbGF0aXZlVG8pIHtcbiAgICAgICAgLy8gQXNzdW1pbmcgcGVyY2VudGFnZSBpcyBudW1iZXIgZnJvbSAwIHRvIDFcbiAgICAgICAgaWYgKHBhZGRpbmdPYmplY3QudW5pdHMgPT09ICclJykge1xuICAgICAgICAgIHN3aXRjaCAocmVsYXRpdmVUbykge1xuICAgICAgICAgICAgY2FzZSAnd2lkdGgnOlxuICAgICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuXG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0ID4gMCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIGhlaWdodCA6IDA7XG5cbiAgICAgICAgICAgIGNhc2UgJ2F2ZXJhZ2UnOlxuICAgICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiAod2lkdGggKyBoZWlnaHQpIC8gMiA6IDA7XG5cbiAgICAgICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHdpZHRoID4gaGVpZ2h0ID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuXG4gICAgICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyB3aWR0aCA+IGhlaWdodCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIHdpZHRoIDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogMDtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhZGRpbmdPYmplY3QudW5pdHMgPT09ICdweCcpIHtcbiAgICAgICAgICByZXR1cm4gcGFkZGluZ09iamVjdC5wZlZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZWZ0VmFsID0gbWluLndpZHRoLmxlZnQudmFsdWU7XG5cbiAgICAgIGlmIChtaW4ud2lkdGgubGVmdC51bml0cyA9PT0gJ3B4JyAmJiBtaW4ud2lkdGgudmFsID4gMCkge1xuICAgICAgICBsZWZ0VmFsID0gbGVmdFZhbCAqIDEwMCAvIG1pbi53aWR0aC52YWw7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodFZhbCA9IG1pbi53aWR0aC5yaWdodC52YWx1ZTtcblxuICAgICAgaWYgKG1pbi53aWR0aC5yaWdodC51bml0cyA9PT0gJ3B4JyAmJiBtaW4ud2lkdGgudmFsID4gMCkge1xuICAgICAgICByaWdodFZhbCA9IHJpZ2h0VmFsICogMTAwIC8gbWluLndpZHRoLnZhbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvcFZhbCA9IG1pbi5oZWlnaHQudG9wLnZhbHVlO1xuXG4gICAgICBpZiAobWluLmhlaWdodC50b3AudW5pdHMgPT09ICdweCcgJiYgbWluLmhlaWdodC52YWwgPiAwKSB7XG4gICAgICAgIHRvcFZhbCA9IHRvcFZhbCAqIDEwMCAvIG1pbi5oZWlnaHQudmFsO1xuICAgICAgfVxuXG4gICAgICB2YXIgYm90dG9tVmFsID0gbWluLmhlaWdodC5ib3R0b20udmFsdWU7XG5cbiAgICAgIGlmIChtaW4uaGVpZ2h0LmJvdHRvbS51bml0cyA9PT0gJ3B4JyAmJiBtaW4uaGVpZ2h0LnZhbCA+IDApIHtcbiAgICAgICAgYm90dG9tVmFsID0gYm90dG9tVmFsICogMTAwIC8gbWluLmhlaWdodC52YWw7XG4gICAgICB9XG5cbiAgICAgIHZhciB3aWR0aEJpYXNEaWZmcyA9IGNvbXB1dGVCaWFzVmFsdWVzKG1pbi53aWR0aC52YWwgLSBiYi53LCBsZWZ0VmFsLCByaWdodFZhbCk7XG4gICAgICB2YXIgZGlmZkxlZnQgPSB3aWR0aEJpYXNEaWZmcy5iaWFzRGlmZjtcbiAgICAgIHZhciBkaWZmUmlnaHQgPSB3aWR0aEJpYXNEaWZmcy5iaWFzQ29tcGxlbWVudERpZmY7XG4gICAgICB2YXIgaGVpZ2h0Qmlhc0RpZmZzID0gY29tcHV0ZUJpYXNWYWx1ZXMobWluLmhlaWdodC52YWwgLSBiYi5oLCB0b3BWYWwsIGJvdHRvbVZhbCk7XG4gICAgICB2YXIgZGlmZlRvcCA9IGhlaWdodEJpYXNEaWZmcy5iaWFzRGlmZjtcbiAgICAgIHZhciBkaWZmQm90dG9tID0gaGVpZ2h0Qmlhc0RpZmZzLmJpYXNDb21wbGVtZW50RGlmZjtcbiAgICAgIF9wLmF1dG9QYWRkaW5nID0gY29tcHV0ZVBhZGRpbmdWYWx1ZXMoYmIudywgYmIuaCwgcGFyZW50LnBzdHlsZSgncGFkZGluZycpLCBwYXJlbnQucHN0eWxlKCdwYWRkaW5nLXJlbGF0aXZlLXRvJykudmFsdWUpO1xuICAgICAgX3AuYXV0b1dpZHRoID0gTWF0aC5tYXgoYmIudywgbWluLndpZHRoLnZhbCk7XG4gICAgICBwb3MueCA9ICgtZGlmZkxlZnQgKyBiYi54MSArIGJiLngyICsgZGlmZlJpZ2h0KSAvIDI7XG4gICAgICBfcC5hdXRvSGVpZ2h0ID0gTWF0aC5tYXgoYmIuaCwgbWluLmhlaWdodC52YWwpO1xuICAgICAgcG9zLnkgPSAoLWRpZmZUb3AgKyBiYi55MSArIGJiLnkyICsgZGlmZkJvdHRvbSkgLyAyO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG5cbiAgICAgIGlmICghX3AuY29tcG91bmRCb3VuZHNDbGVhbiB8fCBmb3JjZSkge1xuICAgICAgICB1cGRhdGUoZWxlKTtcblxuICAgICAgICBpZiAoIWN5LmJhdGNoaW5nKCkpIHtcbiAgICAgICAgICBfcC5jb21wb3VuZEJvdW5kc0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBub25pbmYgPSBmdW5jdGlvbiBub25pbmYoeCkge1xuICAgIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xuICB9O1xuXG4gIHZhciB1cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHMoYiwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgICAvLyBkb24ndCB1cGRhdGUgd2l0aCB6ZXJvIGFyZWEgYm94ZXNcbiAgICBpZiAoeDIgLSB4MSA9PT0gMCB8fCB5MiAtIHkxID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBkb24ndCB1cGRhdGUgd2l0aCBudWxsIGRpbVxuXG5cbiAgICBpZiAoeDEgPT0gbnVsbCB8fCB5MSA9PSBudWxsIHx8IHgyID09IG51bGwgfHwgeTIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGIueDEgPSB4MSA8IGIueDEgPyB4MSA6IGIueDE7XG4gICAgYi54MiA9IHgyID4gYi54MiA/IHgyIDogYi54MjtcbiAgICBiLnkxID0geTEgPCBiLnkxID8geTEgOiBiLnkxO1xuICAgIGIueTIgPSB5MiA+IGIueTIgPyB5MiA6IGIueTI7XG4gICAgYi53ID0gYi54MiAtIGIueDE7XG4gICAgYi5oID0gYi55MiAtIGIueTE7XG4gIH07XG5cbiAgdmFyIHVwZGF0ZUJvdW5kc0Zyb21Cb3ggPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tQm94KGIsIGIyKSB7XG4gICAgaWYgKGIyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVCb3VuZHMoYiwgYjIueDEsIGIyLnkxLCBiMi54MiwgYjIueTIpO1xuICB9O1xuXG4gIHZhciBwcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rpb24gcHJlZml4ZWRQcm9wZXJ0eShvYmosIGZpZWxkLCBwcmVmaXgpIHtcbiAgICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIGZpZWxkLCBwcmVmaXgpO1xuICB9O1xuXG4gIHZhciB1cGRhdGVCb3VuZHNGcm9tQXJyb3cgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsIHByZWZpeCkge1xuICAgIGlmIChlbGUuY3koKS5oZWFkbGVzcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciByc3R5bGUgPSBfcC5yc3R5bGU7XG4gICAgdmFyIGhhbGZBclcgPSByc3R5bGUuYXJyb3dXaWR0aCAvIDI7XG4gICAgdmFyIGFycm93VHlwZSA9IGVsZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1zaGFwZScpLnZhbHVlO1xuICAgIHZhciB4O1xuICAgIHZhciB5O1xuXG4gICAgaWYgKGFycm93VHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpZiAocHJlZml4ID09PSAnc291cmNlJykge1xuICAgICAgICB4ID0gcnN0eWxlLnNyY1g7XG4gICAgICAgIHkgPSByc3R5bGUuc3JjWTtcbiAgICAgIH0gZWxzZSBpZiAocHJlZml4ID09PSAndGFyZ2V0Jykge1xuICAgICAgICB4ID0gcnN0eWxlLnRndFg7XG4gICAgICAgIHkgPSByc3R5bGUudGd0WTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSByc3R5bGUubWlkWDtcbiAgICAgICAgeSA9IHJzdHlsZS5taWRZO1xuICAgICAgfSAvLyBhbHdheXMgc3RvcmUgdGhlIGluZGl2aWR1YWwgYXJyb3cgYm91bmRzXG5cblxuICAgICAgdmFyIGJicyA9IF9wLmFycm93Qm91bmRzID0gX3AuYXJyb3dCb3VuZHMgfHwge307XG4gICAgICB2YXIgYmIgPSBiYnNbcHJlZml4XSA9IGJic1twcmVmaXhdIHx8IHt9O1xuICAgICAgYmIueDEgPSB4IC0gaGFsZkFyVztcbiAgICAgIGJiLnkxID0geSAtIGhhbGZBclc7XG4gICAgICBiYi54MiA9IHggKyBoYWxmQXJXO1xuICAgICAgYmIueTIgPSB5ICsgaGFsZkFyVztcbiAgICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgICBleHBhbmRCb3VuZGluZ0JveChiYiwgMSk7XG4gICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBiYi54MSwgYmIueTEsIGJiLngyLCBiYi55Mik7XG4gICAgfVxuICB9O1xuXG4gIHZhciB1cGRhdGVCb3VuZHNGcm9tTGFiZWwgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsIHByZWZpeCkge1xuICAgIGlmIChlbGUuY3koKS5oZWFkbGVzcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByZWZpeERhc2g7XG5cbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhEYXNoID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciByc3R5bGUgPSBfcC5yc3R5bGU7XG4gICAgdmFyIGxhYmVsID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ2xhYmVsJykuc3RyVmFsdWU7XG5cbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIHZhciBoYWxpZ24gPSBlbGUucHN0eWxlKCd0ZXh0LWhhbGlnbicpO1xuICAgICAgdmFyIHZhbGlnbiA9IGVsZS5wc3R5bGUoJ3RleHQtdmFsaWduJyk7XG4gICAgICB2YXIgbGFiZWxXaWR0aCA9IHByZWZpeGVkUHJvcGVydHkocnN0eWxlLCAnbGFiZWxXaWR0aCcsIHByZWZpeCk7XG4gICAgICB2YXIgbGFiZWxIZWlnaHQgPSBwcmVmaXhlZFByb3BlcnR5KHJzdHlsZSwgJ2xhYmVsSGVpZ2h0JywgcHJlZml4KTtcbiAgICAgIHZhciBsYWJlbFggPSBwcmVmaXhlZFByb3BlcnR5KHJzdHlsZSwgJ2xhYmVsWCcsIHByZWZpeCk7XG4gICAgICB2YXIgbGFiZWxZID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbFknLCBwcmVmaXgpO1xuICAgICAgdmFyIG1hcmdpblggPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teCcpLnBmVmFsdWU7XG4gICAgICB2YXIgbWFyZ2luWSA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICd0ZXh0LW1hcmdpbi15JykucGZWYWx1ZTtcbiAgICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gICAgICB2YXIgcm90YXRpb24gPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICAgICAgdmFyIG91dGxpbmVXaWR0aCA9IGVsZS5wc3R5bGUoJ3RleHQtb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7XG4gICAgICB2YXIgYm9yZGVyV2lkdGggPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci13aWR0aCcpLnBmVmFsdWU7XG4gICAgICB2YXIgaGFsZkJvcmRlcldpZHRoID0gYm9yZGVyV2lkdGggLyAyO1xuICAgICAgdmFyIHBhZGRpbmcgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycpLnBmVmFsdWU7XG4gICAgICB2YXIgbWFyZ2luT2ZFcnJvciA9IDI7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgICAgdmFyIGxoID0gbGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgbHcgPSBsYWJlbFdpZHRoO1xuICAgICAgdmFyIGx3XzIgPSBsdyAvIDI7XG4gICAgICB2YXIgbGhfMiA9IGxoIC8gMjtcbiAgICAgIHZhciBseDEsIGx4MiwgbHkxLCBseTI7XG5cbiAgICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgICAgbHgxID0gbGFiZWxYIC0gbHdfMjtcbiAgICAgICAgbHgyID0gbGFiZWxYICsgbHdfMjtcbiAgICAgICAgbHkxID0gbGFiZWxZIC0gbGhfMjtcbiAgICAgICAgbHkyID0gbGFiZWxZICsgbGhfMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAoaGFsaWduLnZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICBseDEgPSBsYWJlbFggLSBsdztcbiAgICAgICAgICAgIGx4MiA9IGxhYmVsWDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIGx4MSA9IGxhYmVsWCAtIGx3XzI7XG4gICAgICAgICAgICBseDIgPSBsYWJlbFggKyBsd18yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICBseDEgPSBsYWJlbFg7XG4gICAgICAgICAgICBseDIgPSBsYWJlbFggKyBsdztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh2YWxpZ24udmFsdWUpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgbHkxID0gbGFiZWxZIC0gbGg7XG4gICAgICAgICAgICBseTIgPSBsYWJlbFk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgICBseTEgPSBsYWJlbFkgLSBsaF8yO1xuICAgICAgICAgICAgbHkyID0gbGFiZWxZICsgbGhfMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIGx5MSA9IGxhYmVsWTtcbiAgICAgICAgICAgIGx5MiA9IGxhYmVsWSArIGxoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gc2hpZnQgYnkgbWFyZ2luIGFuZCBleHBhbmQgYnkgb3V0bGluZSBhbmQgYm9yZGVyXG5cblxuICAgICAgbHgxICs9IG1hcmdpblggLSBNYXRoLm1heChvdXRsaW5lV2lkdGgsIGhhbGZCb3JkZXJXaWR0aCkgLSBwYWRkaW5nIC0gbWFyZ2luT2ZFcnJvcjtcbiAgICAgIGx4MiArPSBtYXJnaW5YICsgTWF0aC5tYXgob3V0bGluZVdpZHRoLCBoYWxmQm9yZGVyV2lkdGgpICsgcGFkZGluZyArIG1hcmdpbk9mRXJyb3I7XG4gICAgICBseTEgKz0gbWFyZ2luWSAtIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSAtIHBhZGRpbmcgLSBtYXJnaW5PZkVycm9yO1xuICAgICAgbHkyICs9IG1hcmdpblkgKyBNYXRoLm1heChvdXRsaW5lV2lkdGgsIGhhbGZCb3JkZXJXaWR0aCkgKyBwYWRkaW5nICsgbWFyZ2luT2ZFcnJvcjsgLy8gYWx3YXlzIHN0b3JlIHRoZSB1bnJvdGF0ZWQgbGFiZWwgYm91bmRzIHNlcGFyYXRlbHlcblxuICAgICAgdmFyIGJiUHJlZml4ID0gcHJlZml4IHx8ICdtYWluJztcbiAgICAgIHZhciBiYnMgPSBfcC5sYWJlbEJvdW5kcztcbiAgICAgIHZhciBiYiA9IGJic1tiYlByZWZpeF0gPSBiYnNbYmJQcmVmaXhdIHx8IHt9O1xuICAgICAgYmIueDEgPSBseDE7XG4gICAgICBiYi55MSA9IGx5MTtcbiAgICAgIGJiLngyID0gbHgyO1xuICAgICAgYmIueTIgPSBseTI7XG4gICAgICBiYi53ID0gbHgyIC0gbHgxO1xuICAgICAgYmIuaCA9IGx5MiAtIGx5MTtcbiAgICAgIHZhciBpc0F1dG9yb3RhdGUgPSBpc0VkZ2UgJiYgcm90YXRpb24uc3RyVmFsdWUgPT09ICdhdXRvcm90YXRlJztcbiAgICAgIHZhciBpc1BmVmFsdWUgPSByb3RhdGlvbi5wZlZhbHVlICE9IG51bGwgJiYgcm90YXRpb24ucGZWYWx1ZSAhPT0gMDtcblxuICAgICAgaWYgKGlzQXV0b3JvdGF0ZSB8fCBpc1BmVmFsdWUpIHtcbiAgICAgICAgdmFyIHRoZXRhID0gaXNBdXRvcm90YXRlID8gcHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbEFuZ2xlJywgcHJlZml4KSA6IHJvdGF0aW9uLnBmVmFsdWU7XG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbih0aGV0YSk7IC8vIHJvdGF0aW9uIHBvaW50IChkZWZhdWx0IHZhbHVlIGZvciBjZW50ZXItY2VudGVyKVxuXG4gICAgICAgIHZhciB4byA9IChseDEgKyBseDIpIC8gMjtcbiAgICAgICAgdmFyIHlvID0gKGx5MSArIGx5MikgLyAyO1xuXG4gICAgICAgIGlmICghaXNFZGdlKSB7XG4gICAgICAgICAgc3dpdGNoIChoYWxpZ24udmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICB4byA9IGx4MjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgeG8gPSBseDE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAodmFsaWduLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICB5byA9IGx5MjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgIHlvID0gbHkxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm90YXRlID0gZnVuY3Rpb24gcm90YXRlKHgsIHkpIHtcbiAgICAgICAgICB4ID0geCAtIHhvO1xuICAgICAgICAgIHkgPSB5IC0geW87XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHggKiBjb3MgLSB5ICogc2luICsgeG8sXG4gICAgICAgICAgICB5OiB4ICogc2luICsgeSAqIGNvcyArIHlvXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHgxeTEgPSByb3RhdGUobHgxLCBseTEpO1xuICAgICAgICB2YXIgcHgxeTIgPSByb3RhdGUobHgxLCBseTIpO1xuICAgICAgICB2YXIgcHgyeTEgPSByb3RhdGUobHgyLCBseTEpO1xuICAgICAgICB2YXIgcHgyeTIgPSByb3RhdGUobHgyLCBseTIpO1xuICAgICAgICBseDEgPSBNYXRoLm1pbihweDF5MS54LCBweDF5Mi54LCBweDJ5MS54LCBweDJ5Mi54KTtcbiAgICAgICAgbHgyID0gTWF0aC5tYXgocHgxeTEueCwgcHgxeTIueCwgcHgyeTEueCwgcHgyeTIueCk7XG4gICAgICAgIGx5MSA9IE1hdGgubWluKHB4MXkxLnksIHB4MXkyLnksIHB4MnkxLnksIHB4MnkyLnkpO1xuICAgICAgICBseTIgPSBNYXRoLm1heChweDF5MS55LCBweDF5Mi55LCBweDJ5MS55LCBweDJ5Mi55KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJiUHJlZml4Um90ID0gYmJQcmVmaXggKyAnUm90JztcbiAgICAgIHZhciBiYlJvdCA9IGJic1tiYlByZWZpeFJvdF0gPSBiYnNbYmJQcmVmaXhSb3RdIHx8IHt9O1xuICAgICAgYmJSb3QueDEgPSBseDE7XG4gICAgICBiYlJvdC55MSA9IGx5MTtcbiAgICAgIGJiUm90LngyID0gbHgyO1xuICAgICAgYmJSb3QueTIgPSBseTI7XG4gICAgICBiYlJvdC53ID0gbHgyIC0gbHgxO1xuICAgICAgYmJSb3QuaCA9IGx5MiAtIGx5MTtcbiAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGx4MSwgbHkxLCBseDIsIGx5Mik7XG4gICAgICB1cGRhdGVCb3VuZHMoX3AubGFiZWxCb3VuZHMuYWxsLCBseDEsIGx5MSwgbHgyLCBseTIpO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZHM7XG4gIH07IC8vIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBlbGVtZW50cyAoaW4gcmF3IG1vZGVsIHBvc2l0aW9uKVxuXG5cbiAgdmFyIGJvdW5kaW5nQm94SW1wbCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94SW1wbChlbGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSBlbGUuX3ByaXZhdGUuY3k7XG4gICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5LnN0eWxlRW5hYmxlZCgpO1xuICAgIHZhciBoZWFkbGVzcyA9IGN5LmhlYWRsZXNzKCk7XG4gICAgdmFyIGJvdW5kcyA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgaXNOb2RlID0gZWxlLmlzTm9kZSgpO1xuICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gICAgdmFyIGV4MSwgZXgyLCBleTEsIGV5MjsgLy8gZXh0cmVtYSBvZiBib2R5IC8gbGluZXNcblxuICAgIHZhciB4LCB5OyAvLyBub2RlIHBvc1xuXG4gICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgICB2YXIgbWFudWFsRXhwYW5zaW9uID0gaXNOb2RlICYmIHN0eWxlRW5hYmxlZCA/IGVsZS5wc3R5bGUoJ2JvdW5kcy1leHBhbnNpb24nKS5wZlZhbHVlIDogWzBdOyAvLyBtdXN0IHVzZSBgZGlzcGxheWAgcHJvcCBvbmx5LCBhcyByZWFkaW5nIGBjb21wb3VuZC53aWR0aCgpYCBjYXVzZXMgcmVjdXJzaW9uXG4gICAgLy8gKG90aGVyIGZhY3RvcnMgbGlrZSB3aWR0aCB2YWx1ZXMgd2lsbCBiZSBjb25zaWRlcmVkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24gYW55d2F5KVxuXG4gICAgdmFyIGlzRGlzcGxheWVkID0gZnVuY3Rpb24gaXNEaXNwbGF5ZWQoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLnBzdHlsZSgnZGlzcGxheScpLnZhbHVlICE9PSAnbm9uZSc7XG4gICAgfTtcblxuICAgIHZhciBkaXNwbGF5ZWQgPSAhc3R5bGVFbmFibGVkIHx8IGlzRGlzcGxheWVkKGVsZSkgLy8gbXVzdCB0YWtlIGludG8gYWNjb3VudCBjb25uZWN0ZWQgbm9kZXMgYi9jIG9mIGltcGxpY2l0IGVkZ2UgaGlkaW5nIG9uIGRpc3BsYXk6bm9uZSBub2RlXG4gICAgJiYgKCFpc0VkZ2UgfHwgaXNEaXNwbGF5ZWQoZWxlLnNvdXJjZSgpKSAmJiBpc0Rpc3BsYXllZChlbGUudGFyZ2V0KCkpKTtcblxuICAgIGlmIChkaXNwbGF5ZWQpIHtcbiAgICAgIC8vIGRpc3BsYXllZCBzdWZmaWNlcywgc2luY2Ugd2Ugd2lsbCBmaW5kIHplcm8gYXJlYSBlbGVzIGFueXdheVxuICAgICAgdmFyIG92ZXJsYXlPcGFjaXR5ID0gMDtcbiAgICAgIHZhciBvdmVybGF5UGFkZGluZyA9IDA7XG5cbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlT3ZlcmxheXMpIHtcbiAgICAgICAgb3ZlcmxheU9wYWNpdHkgPSBlbGUucHN0eWxlKCdvdmVybGF5LW9wYWNpdHknKS52YWx1ZTtcblxuICAgICAgICBpZiAob3ZlcmxheU9wYWNpdHkgIT09IDApIHtcbiAgICAgICAgICBvdmVybGF5UGFkZGluZyA9IGVsZS5wc3R5bGUoJ292ZXJsYXktcGFkZGluZycpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB1bmRlcmxheU9wYWNpdHkgPSAwO1xuICAgICAgdmFyIHVuZGVybGF5UGFkZGluZyA9IDA7XG5cbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlVW5kZXJsYXlzKSB7XG4gICAgICAgIHVuZGVybGF5T3BhY2l0eSA9IGVsZS5wc3R5bGUoJ3VuZGVybGF5LW9wYWNpdHknKS52YWx1ZTtcblxuICAgICAgICBpZiAodW5kZXJsYXlPcGFjaXR5ICE9PSAwKSB7XG4gICAgICAgICAgdW5kZXJsYXlQYWRkaW5nID0gZWxlLnBzdHlsZSgndW5kZXJsYXktcGFkZGluZycpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYWRkaW5nID0gTWF0aC5tYXgob3ZlcmxheVBhZGRpbmcsIHVuZGVybGF5UGFkZGluZyk7XG4gICAgICB2YXIgdyA9IDA7XG4gICAgICB2YXIgd0hhbGYgPSAwO1xuXG4gICAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIHcgPSBlbGUucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgICAgIHdIYWxmID0gdyAvIDI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05vZGUgJiYgb3B0aW9ucy5pbmNsdWRlTm9kZXMpIHtcbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICB4ID0gcG9zLng7XG4gICAgICAgIHkgPSBwb3MueTtcblxuICAgICAgICB2YXIgX3cgPSBlbGUub3V0ZXJXaWR0aCgpO1xuXG4gICAgICAgIHZhciBoYWxmVyA9IF93IC8gMjtcbiAgICAgICAgdmFyIGggPSBlbGUub3V0ZXJIZWlnaHQoKTtcbiAgICAgICAgdmFyIGhhbGZIID0gaCAvIDI7IC8vIGhhbmRsZSBub2RlIGRpbWVuc2lvbnNcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIGV4MSA9IHggLSBoYWxmVztcbiAgICAgICAgZXgyID0geCArIGhhbGZXO1xuICAgICAgICBleTEgPSB5IC0gaGFsZkg7XG4gICAgICAgIGV5MiA9IHkgKyBoYWxmSDtcbiAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxLCBleTEsIGV4MiwgZXkyKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFZGdlICYmIG9wdGlvbnMuaW5jbHVkZUVkZ2VzKSB7XG4gICAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgIWhlYWRsZXNzKSB7XG4gICAgICAgICAgdmFyIGN1cnZlU3R5bGUgPSBlbGUucHN0eWxlKCdjdXJ2ZS1zdHlsZScpLnN0clZhbHVlOyAvLyBoYW5kbGUgZWRnZSBkaW1lbnNpb25zIChyb3VnaCBib3ggZXN0aW1hdGUpXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgZXgxID0gTWF0aC5taW4ocnN0eWxlLnNyY1gsIHJzdHlsZS5taWRYLCByc3R5bGUudGd0WCk7XG4gICAgICAgICAgZXgyID0gTWF0aC5tYXgocnN0eWxlLnNyY1gsIHJzdHlsZS5taWRYLCByc3R5bGUudGd0WCk7XG4gICAgICAgICAgZXkxID0gTWF0aC5taW4ocnN0eWxlLnNyY1ksIHJzdHlsZS5taWRZLCByc3R5bGUudGd0WSk7XG4gICAgICAgICAgZXkyID0gTWF0aC5tYXgocnN0eWxlLnNyY1ksIHJzdHlsZS5taWRZLCByc3R5bGUudGd0WSk7IC8vIHRha2UgaW50byBhY2NvdW50IGVkZ2Ugd2lkdGhcblxuICAgICAgICAgIGV4MSAtPSB3SGFsZjtcbiAgICAgICAgICBleDIgKz0gd0hhbGY7XG4gICAgICAgICAgZXkxIC09IHdIYWxmO1xuICAgICAgICAgIGV5MiArPSB3SGFsZjtcbiAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpOyAvLyBwcmVjaXNlIGVkZ2VzXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgaWYgKGN1cnZlU3R5bGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgICAgICAgIHZhciBocHRzID0gcnN0eWxlLmhheXN0YWNrUHRzO1xuXG4gICAgICAgICAgICBpZiAoaHB0cyAmJiBocHRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICBleDEgPSBocHRzWzBdLng7XG4gICAgICAgICAgICAgIGV5MSA9IGhwdHNbMF0ueTtcbiAgICAgICAgICAgICAgZXgyID0gaHB0c1sxXS54O1xuICAgICAgICAgICAgICBleTIgPSBocHRzWzFdLnk7XG5cbiAgICAgICAgICAgICAgaWYgKGV4MSA+IGV4Mikge1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gZXgxO1xuICAgICAgICAgICAgICAgIGV4MSA9IGV4MjtcbiAgICAgICAgICAgICAgICBleDIgPSB0ZW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgICAgICAgIHZhciBfdGVtcCA9IGV5MTtcbiAgICAgICAgICAgICAgICBleTEgPSBleTI7XG4gICAgICAgICAgICAgICAgZXkyID0gX3RlbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEgLSB3SGFsZiwgZXkxIC0gd0hhbGYsIGV4MiArIHdIYWxmLCBleTIgKyB3SGFsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJ2ZVN0eWxlID09PSAnYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlID09PSAndW5idW5kbGVkLWJlemllcicgfHwgY3VydmVTdHlsZSA9PT0gJ3NlZ21lbnRzJyB8fCBjdXJ2ZVN0eWxlID09PSAndGF4aScpIHtcbiAgICAgICAgICAgIHZhciBwdHM7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY3VydmVTdHlsZSkge1xuICAgICAgICAgICAgICBjYXNlICdiZXppZXInOlxuICAgICAgICAgICAgICBjYXNlICd1bmJ1bmRsZWQtYmV6aWVyJzpcbiAgICAgICAgICAgICAgICBwdHMgPSByc3R5bGUuYmV6aWVyUHRzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgICAgICAgICAgY2FzZSAndGF4aSc6XG4gICAgICAgICAgICAgICAgcHRzID0gcnN0eWxlLmxpbmVQdHM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBwdCA9IHB0c1tqXTtcbiAgICAgICAgICAgICAgICBleDEgPSBwdC54IC0gd0hhbGY7XG4gICAgICAgICAgICAgICAgZXgyID0gcHQueCArIHdIYWxmO1xuICAgICAgICAgICAgICAgIGV5MSA9IHB0LnkgLSB3SGFsZjtcbiAgICAgICAgICAgICAgICBleTIgPSBwdC55ICsgd0hhbGY7XG4gICAgICAgICAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxLCBleTEsIGV4MiwgZXkyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gYmV6aWVyLWxpa2Ugb3Igc2VnbWVudC1saWtlIGVkZ2VcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGhlYWRsZXNzIG9yIHN0eWxlIGRpc2FibGVkXG4gICAgICAgICAgLy8gZmFsbGJhY2sgb24gc291cmNlIGFuZCB0YXJnZXQgcG9zaXRpb25zXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgdmFyIG4xID0gZWxlLnNvdXJjZSgpO1xuICAgICAgICAgIHZhciBuMXBvcyA9IG4xLnBvc2l0aW9uKCk7XG4gICAgICAgICAgdmFyIG4yID0gZWxlLnRhcmdldCgpO1xuICAgICAgICAgIHZhciBuMnBvcyA9IG4yLnBvc2l0aW9uKCk7XG4gICAgICAgICAgZXgxID0gbjFwb3MueDtcbiAgICAgICAgICBleDIgPSBuMnBvcy54O1xuICAgICAgICAgIGV5MSA9IG4xcG9zLnk7XG4gICAgICAgICAgZXkyID0gbjJwb3MueTtcblxuICAgICAgICAgIGlmIChleDEgPiBleDIpIHtcbiAgICAgICAgICAgIHZhciBfdGVtcDIgPSBleDE7XG4gICAgICAgICAgICBleDEgPSBleDI7XG4gICAgICAgICAgICBleDIgPSBfdGVtcDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgICAgdmFyIF90ZW1wMyA9IGV5MTtcbiAgICAgICAgICAgIGV5MSA9IGV5MjtcbiAgICAgICAgICAgIGV5MiA9IF90ZW1wMztcbiAgICAgICAgICB9IC8vIHRha2UgaW50byBhY2NvdW50IGVkZ2Ugd2lkdGhcblxuXG4gICAgICAgICAgZXgxIC09IHdIYWxmO1xuICAgICAgICAgIGV4MiArPSB3SGFsZjtcbiAgICAgICAgICBleTEgLT0gd0hhbGY7XG4gICAgICAgICAgZXkyICs9IHdIYWxmO1xuICAgICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSwgZXkxLCBleDIsIGV5Mik7XG4gICAgICAgIH0gLy8gaGVhZGxlc3Mgb3Igc3R5bGUgZGlzYWJsZWRcblxuICAgICAgfSAvLyBlZGdlc1xuICAgICAgLy8gaGFuZGxlIGVkZ2UgYXJyb3cgc2l6ZVxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlRWRnZXMgJiYgaXNFZGdlKSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21BcnJvdyhib3VuZHMsIGVsZSwgJ21pZC1zb3VyY2UnKTtcbiAgICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnbWlkLXRhcmdldCcpO1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICdzb3VyY2UnKTtcbiAgICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAndGFyZ2V0Jyk7XG4gICAgICB9IC8vIGdob3N0XG4gICAgICAvLy8vLy8vL1xuXG5cbiAgICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgICAgdmFyIGdob3N0ID0gZWxlLnBzdHlsZSgnZ2hvc3QnKS52YWx1ZSA9PT0gJ3llcyc7XG5cbiAgICAgICAgaWYgKGdob3N0KSB7XG4gICAgICAgICAgdmFyIGd4ID0gZWxlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXgnKS5wZlZhbHVlO1xuICAgICAgICAgIHZhciBneSA9IGVsZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBib3VuZHMueDEgKyBneCwgYm91bmRzLnkxICsgZ3ksIGJvdW5kcy54MiArIGd4LCBib3VuZHMueTIgKyBneSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYWx3YXlzIHN0b3JlIHRoZSBib2R5IGJvdW5kcyBzZXBhcmF0ZWx5IGZyb20gdGhlIGxhYmVsc1xuXG5cbiAgICAgIHZhciBiYkJvZHkgPSBfcC5ib2R5Qm91bmRzID0gX3AuYm9keUJvdW5kcyB8fCB7fTtcbiAgICAgIGFzc2lnbkJvdW5kaW5nQm94KGJiQm9keSwgYm91bmRzKTtcbiAgICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYmJCb2R5LCBtYW51YWxFeHBhbnNpb24pO1xuICAgICAgZXhwYW5kQm91bmRpbmdCb3goYmJCb2R5LCAxKTsgLy8gZXhwYW5kIHRvIHdvcmsgYXJvdW5kIGJyb3dzZXIgZGltZW5zaW9uIGluYWNjdXJhY2llc1xuICAgICAgLy8gb3ZlcmxheVxuICAgICAgLy8vLy8vLy8vL1xuXG4gICAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGV4MSA9IGJvdW5kcy54MTtcbiAgICAgICAgZXgyID0gYm91bmRzLngyO1xuICAgICAgICBleTEgPSBib3VuZHMueTE7XG4gICAgICAgIGV5MiA9IGJvdW5kcy55MjtcbiAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxIC0gcGFkZGluZywgZXkxIC0gcGFkZGluZywgZXgyICsgcGFkZGluZywgZXkyICsgcGFkZGluZyk7XG4gICAgICB9IC8vIGFsd2F5cyBzdG9yZSB0aGUgYm9keSBib3VuZHMgc2VwYXJhdGVseSBmcm9tIHRoZSBsYWJlbHNcblxuXG4gICAgICB2YXIgYmJPdmVybGF5ID0gX3Aub3ZlcmxheUJvdW5kcyA9IF9wLm92ZXJsYXlCb3VuZHMgfHwge307XG4gICAgICBhc3NpZ25Cb3VuZGluZ0JveChiYk92ZXJsYXksIGJvdW5kcyk7XG4gICAgICBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJiT3ZlcmxheSwgbWFudWFsRXhwYW5zaW9uKTtcbiAgICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiT3ZlcmxheSwgMSk7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcbiAgICAgIC8vIGhhbmRsZSBsYWJlbCBkaW1lbnNpb25zXG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICB2YXIgYmJMYWJlbHMgPSBfcC5sYWJlbEJvdW5kcyA9IF9wLmxhYmVsQm91bmRzIHx8IHt9O1xuXG4gICAgICBpZiAoYmJMYWJlbHMuYWxsICE9IG51bGwpIHtcbiAgICAgICAgY2xlYXJCb3VuZGluZ0JveChiYkxhYmVscy5hbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmJMYWJlbHMuYWxsID0gbWFrZUJvdW5kaW5nQm94KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlTGFiZWxzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNYWluTGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU291cmNlTGFiZWxzKSB7XG4gICAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsICd0YXJnZXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gc3R5bGUgZW5hYmxlZCBmb3IgbGFiZWxzXG5cbiAgICB9IC8vIGlmIGRpc3BsYXllZFxuXG5cbiAgICBib3VuZHMueDEgPSBub25pbmYoYm91bmRzLngxKTtcbiAgICBib3VuZHMueTEgPSBub25pbmYoYm91bmRzLnkxKTtcbiAgICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgICBib3VuZHMueTIgPSBub25pbmYoYm91bmRzLnkyKTtcbiAgICBib3VuZHMudyA9IG5vbmluZihib3VuZHMueDIgLSBib3VuZHMueDEpO1xuICAgIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG5cbiAgICBpZiAoYm91bmRzLncgPiAwICYmIGJvdW5kcy5oID4gMCAmJiBkaXNwbGF5ZWQpIHtcbiAgICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYm91bmRzLCBtYW51YWxFeHBhbnNpb24pOyAvLyBleHBhbmQgYm91bmRzIGJ5IDEgYmVjYXVzZSBhbnRpYWxpYXNpbmcgY2FuIGluY3JlYXNlIHRoZSB2aXN1YWwvZWZmZWN0aXZlIHNpemUgYnkgMSBvbiBhbGwgc2lkZXNcblxuICAgICAgZXhwYW5kQm91bmRpbmdCb3goYm91bmRzLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9O1xuXG4gIHZhciBnZXRLZXkgPSBmdW5jdGlvbiBnZXRLZXkob3B0cykge1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciB0ZiA9IGZ1bmN0aW9uIHRmKHZhbCkge1xuICAgICAgcmV0dXJuICh2YWwgPyAxIDogMCkgPDwgaSsrO1xuICAgIH07XG5cbiAgICB2YXIga2V5ID0gMDtcbiAgICBrZXkgKz0gdGYob3B0cy5pbmN1ZGVOb2Rlcyk7XG4gICAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZUVkZ2VzKTtcbiAgICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlTGFiZWxzKTtcbiAgICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlTWFpbkxhYmVscyk7XG4gICAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZVNvdXJjZUxhYmVscyk7XG4gICAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZVRhcmdldExhYmVscyk7XG4gICAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZU92ZXJsYXlzKTtcbiAgICByZXR1cm4ga2V5O1xuICB9O1xuXG4gIHZhciBnZXRCb3VuZGluZ0JveFBvc0tleSA9IGZ1bmN0aW9uIGdldEJvdW5kaW5nQm94UG9zS2V5KGVsZSkge1xuICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgIHZhciBwMSA9IGVsZS5zb3VyY2UoKS5wb3NpdGlvbigpO1xuICAgICAgdmFyIHAyID0gZWxlLnRhcmdldCgpLnBvc2l0aW9uKCk7XG5cbiAgICAgIHZhciByID0gZnVuY3Rpb24gcih4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHgpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGhhc2hJbnRzQXJyYXkoW3IocDEueCksIHIocDEueSksIHIocDIueCksIHIocDIueSldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9O1xuXG4gIHZhciBjYWNoZWRCb3VuZGluZ0JveEltcGwgPSBmdW5jdGlvbiBjYWNoZWRCb3VuZGluZ0JveEltcGwoZWxlLCBvcHRzKSB7XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBiYjtcbiAgICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICAgIHZhciBrZXkgPSBvcHRzID09IG51bGwgPyBkZWZCYk9wdHNLZXkgOiBnZXRLZXkob3B0cyk7XG4gICAgdmFyIHVzaW5nRGVmT3B0cyA9IGtleSA9PT0gZGVmQmJPcHRzS2V5O1xuICAgIHZhciBjdXJyUG9zS2V5ID0gZ2V0Qm91bmRpbmdCb3hQb3NLZXkoZWxlKTtcbiAgICB2YXIgaXNQb3NLZXlTYW1lID0gX3AuYmJDYWNoZVBvc0tleSA9PT0gY3VyclBvc0tleTtcbiAgICB2YXIgdXNlQ2FjaGUgPSBvcHRzLnVzZUNhY2hlICYmIGlzUG9zS2V5U2FtZTtcblxuICAgIHZhciBpc0RpcnR5ID0gZnVuY3Rpb24gaXNEaXJ0eShlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYmJDYWNoZSA9PSBudWxsIHx8IGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5O1xuICAgIH07XG5cbiAgICB2YXIgbmVlZFJlY2FsYyA9ICF1c2VDYWNoZSB8fCBpc0RpcnR5KGVsZSkgfHwgaXNFZGdlICYmIGlzRGlydHkoZWxlLnNvdXJjZSgpKSB8fCBpc0RpcnR5KGVsZS50YXJnZXQoKSk7XG5cbiAgICBpZiAobmVlZFJlY2FsYykge1xuICAgICAgaWYgKCFpc1Bvc0tleVNhbWUpIHtcbiAgICAgICAgZWxlLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh1c2VDYWNoZSk7XG4gICAgICB9XG5cbiAgICAgIGJiID0gYm91bmRpbmdCb3hJbXBsKGVsZSwgZGVmQmJPcHRzKTtcbiAgICAgIF9wLmJiQ2FjaGUgPSBiYjtcbiAgICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBjdXJyUG9zS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiYiA9IF9wLmJiQ2FjaGU7XG4gICAgfSAvLyBub3QgdXNpbmcgZGVmIG9wdHMgPT4gbmVlZCB0byBidWlsZCB1cCBiYiBmcm9tIGNvbWJpbmF0aW9uIG9mIHN1YiBiYnNcblxuXG4gICAgaWYgKCF1c2luZ0RlZk9wdHMpIHtcbiAgICAgIHZhciBpc05vZGUgPSBlbGUuaXNOb2RlKCk7XG4gICAgICBiYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuXG4gICAgICBpZiAob3B0cy5pbmNsdWRlTm9kZXMgJiYgaXNOb2RlIHx8IG9wdHMuaW5jbHVkZUVkZ2VzICYmICFpc05vZGUpIHtcbiAgICAgICAgaWYgKG9wdHMuaW5jbHVkZU92ZXJsYXlzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3Aub3ZlcmxheUJvdW5kcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AuYm9keUJvdW5kcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuaW5jbHVkZUxhYmVscykge1xuICAgICAgICBpZiAob3B0cy5pbmNsdWRlTWFpbkxhYmVscyAmJiAoIWlzRWRnZSB8fCBvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMgJiYgb3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSkge1xuICAgICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmxhYmVsQm91bmRzLmFsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wdHMuaW5jbHVkZU1haW5MYWJlbHMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmxhYmVsQm91bmRzLm1haW5Sb3QpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmxhYmVsQm91bmRzLnNvdXJjZVJvdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdHMuaW5jbHVkZVRhcmdldExhYmVscykge1xuICAgICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gICAgICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmI7XG4gIH07XG5cbiAgdmFyIGRlZkJiT3B0cyA9IHtcbiAgICBpbmNsdWRlTm9kZXM6IHRydWUsXG4gICAgaW5jbHVkZUVkZ2VzOiB0cnVlLFxuICAgIGluY2x1ZGVMYWJlbHM6IHRydWUsXG4gICAgaW5jbHVkZU1haW5MYWJlbHM6IHRydWUsXG4gICAgaW5jbHVkZVNvdXJjZUxhYmVsczogdHJ1ZSxcbiAgICBpbmNsdWRlVGFyZ2V0TGFiZWxzOiB0cnVlLFxuICAgIGluY2x1ZGVPdmVybGF5czogdHJ1ZSxcbiAgICBpbmNsdWRlVW5kZXJsYXlzOiB0cnVlLFxuICAgIHVzZUNhY2hlOiB0cnVlXG4gIH07XG4gIHZhciBkZWZCYk9wdHNLZXkgPSBnZXRLZXkoZGVmQmJPcHRzKTtcbiAgdmFyIGZpbGxlZEJiT3B0cyA9IGRlZmF1bHRzJGcoZGVmQmJPcHRzKTtcblxuICBlbGVzZm4kYi5ib3VuZGluZ0JveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGJvdW5kczsgLy8gdGhlIG1haW4gdXNlY2FzZSBpcyBlbGUuYm91bmRpbmdCb3goKSBmb3IgYSBzaW5nbGUgZWxlbWVudCB3aXRoIG5vL2RlZiBvcHRpb25zXG4gICAgLy8gc3BlY2lmaWVkIHMudC4gdGhlIGNhY2hlIGlzIHVzZWQsIHNvIGNoZWNrIGZvciB0aGlzIGNhc2UgdG8gbWFrZSBpdCBmYXN0ZXIgYnlcbiAgICAvLyBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpc1swXS5fcHJpdmF0ZS5iYkNhY2hlICE9IG51bGwgJiYgIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSAmJiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudXNlQ2FjaGUgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnVzZUNhY2hlID09PSB0cnVlKSkge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zID0gZGVmQmJPcHRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgYm91bmRzID0gY2FjaGVkQm91bmRpbmdCb3hJbXBsKHRoaXNbMF0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZHMgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IGRlZkJiT3B0cztcbiAgICAgIHZhciBvcHRzID0gZmlsbGVkQmJPcHRzKG9wdGlvbnMpO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgICAgdmFyIGN5ID0gZWxlcy5jeSgpO1xuICAgICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5LnN0eWxlRW5hYmxlZCgpO1xuXG4gICAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgICB2YXIgY3VyclBvc0tleSA9IGdldEJvdW5kaW5nQm94UG9zS2V5KGVsZSk7XG4gICAgICAgICAgdmFyIGlzUG9zS2V5U2FtZSA9IF9wLmJiQ2FjaGVQb3NLZXkgPT09IGN1cnJQb3NLZXk7XG4gICAgICAgICAgdmFyIHVzZUNhY2hlID0gb3B0cy51c2VDYWNoZSAmJiBpc1Bvc0tleVNhbWUgJiYgIV9wLnN0eWxlRGlydHk7XG4gICAgICAgICAgZWxlLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh1c2VDYWNoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVDb21wb3VuZEJvdW5kcyghb3B0aW9ucy51c2VDYWNoZSk7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlbGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX2VsZSA9IGVsZXNbX2ldO1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJvdW5kcywgY2FjaGVkQm91bmRpbmdCb3hJbXBsKF9lbGUsIG9wdHMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZHMueDEgPSBub25pbmYoYm91bmRzLngxKTtcbiAgICBib3VuZHMueTEgPSBub25pbmYoYm91bmRzLnkxKTtcbiAgICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgICBib3VuZHMueTIgPSBub25pbmYoYm91bmRzLnkyKTtcbiAgICBib3VuZHMudyA9IG5vbmluZihib3VuZHMueDIgLSBib3VuZHMueDEpO1xuICAgIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfTtcblxuICBlbGVzZm4kYi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzW2ldLl9wcml2YXRlO1xuICAgICAgX3AuYmJDYWNoZSA9IG51bGw7XG4gICAgICBfcC5iYkNhY2hlUG9zS2V5ID0gbnVsbDtcbiAgICAgIF9wLmJvZHlCb3VuZHMgPSBudWxsO1xuICAgICAgX3Aub3ZlcmxheUJvdW5kcyA9IG51bGw7XG4gICAgICBfcC5sYWJlbEJvdW5kcy5hbGwgPSBudWxsO1xuICAgICAgX3AubGFiZWxCb3VuZHMuc291cmNlID0gbnVsbDtcbiAgICAgIF9wLmxhYmVsQm91bmRzLnRhcmdldCA9IG51bGw7XG4gICAgICBfcC5sYWJlbEJvdW5kcy5tYWluID0gbnVsbDtcbiAgICAgIF9wLmxhYmVsQm91bmRzLnNvdXJjZVJvdCA9IG51bGw7XG4gICAgICBfcC5sYWJlbEJvdW5kcy50YXJnZXRSb3QgPSBudWxsO1xuICAgICAgX3AubGFiZWxCb3VuZHMubWFpblJvdCA9IG51bGw7XG4gICAgICBfcC5hcnJvd0JvdW5kcy5zb3VyY2UgPSBudWxsO1xuICAgICAgX3AuYXJyb3dCb3VuZHMudGFyZ2V0ID0gbnVsbDtcbiAgICAgIF9wLmFycm93Qm91bmRzWydtaWQtc291cmNlJ10gPSBudWxsO1xuICAgICAgX3AuYXJyb3dCb3VuZHNbJ21pZC10YXJnZXQnXSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdib3VuZHMnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTsgLy8gcHJpdmF0ZSBoZWxwZXIgdG8gZ2V0IGJvdW5kaW5nIGJveCBmb3IgY3VzdG9tIG5vZGUgcG9zaXRpb25zXG4gIC8vIC0gZ29vZCBmb3IgcGVyZiBpbiBjZXJ0YWluIGNhc2VzIGJ1dCBjdXJyZW50bHkgcmVxdWlyZXMgZGlydHlpbmcgdGhlIHJlbmRlcmVkIHN0eWxlXG4gIC8vIC0gd291bGQgYmUgYmV0dGVyIHRvIG5vdCBtb2RpZnkgdGhlIG5vZGVzIGJ1dCB0aGUgbm9kZXMgYXJlIHJlYWQgZGlyZWN0bHkgZXZlcnl3aGVyZSBpbiB0aGUgcmVuZGVyZXIuLi5cbiAgLy8gLSB0cnkgdG8gdXNlIGZvciBvbmx5IHRoaW5ncyBsaWtlIGRpc2NyZXRlIGxheW91dHMgd2hlcmUgdGhlIG5vZGUgcG9zaXRpb24gd291bGQgY2hhbmdlIGFueXdheVxuXG5cbiAgZWxlc2ZuJGIuYm91bmRpbmdCb3hBdCA9IGZ1bmN0aW9uIChmbikge1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgdmFyIHBhcmVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG5cbiAgICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgICAgcGFyZW50cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5pc1BhcmVudCgpO1xuICAgICAgfSk7XG4gICAgICBub2RlcyA9IG5vZGVzLm5vdChwYXJlbnRzKTtcbiAgICB9XG5cbiAgICBpZiAocGxhaW5PYmplY3QoZm4pKSB7XG4gICAgICB2YXIgb2JqID0gZm47XG5cbiAgICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBzdG9yZU9sZFBvcyA9IGZ1bmN0aW9uIHN0b3JlT2xkUG9zKG5vZGUsIGkpIHtcbiAgICAgIHJldHVybiBub2RlLl9wcml2YXRlLmJiQXRPbGRQb3MgPSBmbihub2RlLCBpKTtcbiAgICB9O1xuXG4gICAgdmFyIGdldE9sZFBvcyA9IGZ1bmN0aW9uIGdldE9sZFBvcyhub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5fcHJpdmF0ZS5iYkF0T2xkUG9zO1xuICAgIH07XG5cbiAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgbm9kZXMuZm9yRWFjaChzdG9yZU9sZFBvcykuc2lsZW50UG9zaXRpb25zKGZuKTtcblxuICAgIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICBwYXJlbnRzLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICAgICAgcGFyZW50cy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICAgIHBhcmVudHMudXBkYXRlQ29tcG91bmRCb3VuZHModHJ1ZSk7IC8vIGZvcmNlIHVwZGF0ZSBiL2Mgd2UncmUgaW5zaWRlIGEgYmF0Y2ggY3ljbGVcbiAgICB9XG5cbiAgICB2YXIgYmIgPSBjb3B5Qm91bmRpbmdCb3godGhpcy5ib3VuZGluZ0JveCh7XG4gICAgICB1c2VDYWNoZTogZmFsc2VcbiAgICB9KSk7XG4gICAgbm9kZXMuc2lsZW50UG9zaXRpb25zKGdldE9sZFBvcyk7XG5cbiAgICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgICAgcGFyZW50cy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICAgIHBhcmVudHMuZGlydHlCb3VuZGluZ0JveENhY2hlKCk7XG4gICAgICBwYXJlbnRzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKHRydWUpOyAvLyBmb3JjZSB1cGRhdGUgYi9jIHdlJ3JlIGluc2lkZSBhIGJhdGNoIGN5Y2xlXG4gICAgfVxuXG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgICByZXR1cm4gYmI7XG4gIH07XG5cbiAgZm4kMy5ib3VuZGluZ2JveCA9IGZuJDMuYmIgPSBmbiQzLmJvdW5kaW5nQm94O1xuICBmbiQzLnJlbmRlcmVkQm91bmRpbmdib3ggPSBmbiQzLnJlbmRlcmVkQm91bmRpbmdCb3g7XG4gIHZhciBib3VuZHMgPSBlbGVzZm4kYjtcblxuICB2YXIgZm4kMiwgZWxlc2ZuJGE7XG4gIGZuJDIgPSBlbGVzZm4kYSA9IHt9O1xuXG4gIHZhciBkZWZpbmVEaW1GbnMgPSBmdW5jdGlvbiBkZWZpbmVEaW1GbnMob3B0cykge1xuICAgIG9wdHMudXBwZXJjYXNlTmFtZSA9IGNhcGl0YWxpemUob3B0cy5uYW1lKTtcbiAgICBvcHRzLmF1dG9OYW1lID0gJ2F1dG8nICsgb3B0cy51cHBlcmNhc2VOYW1lO1xuICAgIG9wdHMubGFiZWxOYW1lID0gJ2xhYmVsJyArIG9wdHMudXBwZXJjYXNlTmFtZTtcbiAgICBvcHRzLm91dGVyTmFtZSA9ICdvdXRlcicgKyBvcHRzLnVwcGVyY2FzZU5hbWU7XG4gICAgb3B0cy51cHBlcmNhc2VPdXRlck5hbWUgPSBjYXBpdGFsaXplKG9wdHMub3V0ZXJOYW1lKTtcblxuICAgIGZuJDJbb3B0cy5uYW1lXSA9IGZ1bmN0aW9uIGRpbUltcGwoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBjeSA9IF9wLmN5O1xuICAgICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5Ll9wcml2YXRlLnN0eWxlRW5hYmxlZDtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICAgICAgaWYgKGVsZS5pc1BhcmVudCgpKSB7XG4gICAgICAgICAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICAgICAgICAgIHJldHVybiBfcFtvcHRzLmF1dG9OYW1lXSB8fCAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkID0gZWxlLnBzdHlsZShvcHRzLm5hbWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChkLnN0clZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdsYWJlbCc6XG4gICAgICAgICAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIF9wLnJzdHlsZVtvcHRzLmxhYmVsTmFtZV0gfHwgMDtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGQucGZWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm4kMlsnb3V0ZXInICsgb3B0cy51cHBlcmNhc2VOYW1lXSA9IGZ1bmN0aW9uIG91dGVyRGltSW1wbCgpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgdmFyIGN5ID0gX3AuY3k7XG4gICAgICB2YXIgc3R5bGVFbmFibGVkID0gY3kuX3ByaXZhdGUuc3R5bGVFbmFibGVkO1xuXG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgICAgICB2YXIgZGltID0gZWxlW29wdHMubmFtZV0oKTtcbiAgICAgICAgICB2YXIgYm9yZGVyID0gZWxlLnBzdHlsZSgnYm9yZGVyLXdpZHRoJykucGZWYWx1ZTsgLy8gbi5iLiAxLzIgZWFjaCBzaWRlXG5cbiAgICAgICAgICB2YXIgcGFkZGluZyA9IDIgKiBlbGUucGFkZGluZygpO1xuICAgICAgICAgIHJldHVybiBkaW0gKyBib3JkZXIgKyBwYWRkaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZuJDJbJ3JlbmRlcmVkJyArIG9wdHMudXBwZXJjYXNlTmFtZV0gPSBmdW5jdGlvbiByZW5kZXJlZERpbUltcGwoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICB2YXIgZCA9IGVsZVtvcHRzLm5hbWVdKCk7XG4gICAgICAgIHJldHVybiBkICogdGhpcy5jeSgpLnpvb20oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm4kMlsncmVuZGVyZWQnICsgb3B0cy51cHBlcmNhc2VPdXRlck5hbWVdID0gZnVuY3Rpb24gcmVuZGVyZWRPdXRlckRpbUltcGwoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICB2YXIgb2QgPSBlbGVbb3B0cy5vdXRlck5hbWVdKCk7XG4gICAgICAgIHJldHVybiBvZCAqIHRoaXMuY3koKS56b29tKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBkZWZpbmVEaW1GbnMoe1xuICAgIG5hbWU6ICd3aWR0aCdcbiAgfSk7XG4gIGRlZmluZURpbUZucyh7XG4gICAgbmFtZTogJ2hlaWdodCdcbiAgfSk7XG5cbiAgZWxlc2ZuJGEucGFkZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG5cbiAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIGVsZS51cGRhdGVDb21wb3VuZEJvdW5kcygpO1xuXG4gICAgICBpZiAoX3AuYXV0b1BhZGRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gX3AuYXV0b1BhZGRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxlLnBzdHlsZSgncGFkZGluZycpLnBmVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGUucHN0eWxlKCdwYWRkaW5nJykucGZWYWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgZWxlc2ZuJGEucGFkZGVkSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHJldHVybiBlbGUuaGVpZ2h0KCkgKyAyICogZWxlLnBhZGRpbmcoKTtcbiAgfTtcblxuICBlbGVzZm4kYS5wYWRkZWRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICByZXR1cm4gZWxlLndpZHRoKCkgKyAyICogZWxlLnBhZGRpbmcoKTtcbiAgfTtcblxuICB2YXIgd2lkdGhIZWlnaHQgPSBlbGVzZm4kYTtcblxuICB2YXIgaWZFZGdlID0gZnVuY3Rpb24gaWZFZGdlKGVsZSwgZ2V0VmFsdWUpIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICByZXR1cm4gZ2V0VmFsdWUoZWxlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9uKGVsZSwgZ2V0UG9pbnQpIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICAgIHJldHVybiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihnZXRQb2ludChlbGUpLCBjeS56b29tKCksIGN5LnBhbigpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlmRWRnZVJlbmRlcmVkUG9zaXRpb25zID0gZnVuY3Rpb24gaWZFZGdlUmVuZGVyZWRQb3NpdGlvbnMoZWxlLCBnZXRQb2ludHMpIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgICAgcmV0dXJuIGdldFBvaW50cyhlbGUpLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24ocCwgem9vbSwgcGFuKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB2YXIgY29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZWxlKTtcbiAgfTtcblxuICB2YXIgc2VnbWVudFBvaW50cyA9IGZ1bmN0aW9uIHNlZ21lbnRQb2ludHMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5yZW5kZXJlcigpLmdldFNlZ21lbnRQb2ludHMoZWxlKTtcbiAgfTtcblxuICB2YXIgc291cmNlRW5kcG9pbnQgPSBmdW5jdGlvbiBzb3VyY2VFbmRwb2ludChlbGUpIHtcbiAgICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZWxlKTtcbiAgfTtcblxuICB2YXIgdGFyZ2V0RW5kcG9pbnQgPSBmdW5jdGlvbiB0YXJnZXRFbmRwb2ludChlbGUpIHtcbiAgICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0VGFyZ2V0RW5kcG9pbnQoZWxlKTtcbiAgfTtcblxuICB2YXIgbWlkcG9pbnQgPSBmdW5jdGlvbiBtaWRwb2ludChlbGUpIHtcbiAgICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KGVsZSk7XG4gIH07XG5cbiAgdmFyIHB0cyA9IHtcbiAgICBjb250cm9sUG9pbnRzOiB7XG4gICAgICBnZXQ6IGNvbnRyb2xQb2ludHMsXG4gICAgICBtdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzZWdtZW50UG9pbnRzOiB7XG4gICAgICBnZXQ6IHNlZ21lbnRQb2ludHMsXG4gICAgICBtdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzb3VyY2VFbmRwb2ludDoge1xuICAgICAgZ2V0OiBzb3VyY2VFbmRwb2ludFxuICAgIH0sXG4gICAgdGFyZ2V0RW5kcG9pbnQ6IHtcbiAgICAgIGdldDogdGFyZ2V0RW5kcG9pbnRcbiAgICB9LFxuICAgIG1pZHBvaW50OiB7XG4gICAgICBnZXQ6IG1pZHBvaW50XG4gICAgfVxuICB9O1xuXG4gIHZhciByZW5kZXJlZE5hbWUgPSBmdW5jdGlvbiByZW5kZXJlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiAncmVuZGVyZWQnICsgbmFtZVswXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSk7XG4gIH07XG5cbiAgdmFyIGVkZ2VQb2ludHMgPSBPYmplY3Qua2V5cyhwdHMpLnJlZHVjZShmdW5jdGlvbiAob2JqLCBuYW1lKSB7XG4gICAgdmFyIHNwZWMgPSBwdHNbbmFtZV07XG4gICAgdmFyIHJOYW1lID0gcmVuZGVyZWROYW1lKG5hbWUpO1xuXG4gICAgb2JqW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGlmRWRnZSh0aGlzLCBzcGVjLmdldCk7XG4gICAgfTtcblxuICAgIGlmIChzcGVjLm11bHQpIHtcbiAgICAgIG9ialtyTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyh0aGlzLCBzcGVjLmdldCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpbck5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaWZFZGdlUmVuZGVyZWRQb3NpdGlvbih0aGlzLCBzcGVjLmdldCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcblxuICB2YXIgZGltZW5zaW9ucyA9IGV4dGVuZCh7fSwgcG9zaXRpb24sIGJvdW5kcywgd2lkdGhIZWlnaHQsIGVkZ2VQb2ludHMpO1xuXG4gIC8qIVxuICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2VcblxuICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS9cbiAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2VcbiAgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL2V2ZW50LmpzXG4gICovXG4gIHZhciBFdmVudCA9IGZ1bmN0aW9uIEV2ZW50KHNyYywgcHJvcHMpIHtcbiAgICB0aGlzLnJlY3ljbGUoc3JjLCBwcm9wcyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcblxuXG4gIEV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJ2V2ZW50JztcbiAgICB9LFxuICAgIHJlY3ljbGU6IGZ1bmN0aW9uIHJlY3ljbGUoc3JjLCBwcm9wcykge1xuICAgICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVybkZhbHNlO1xuXG4gICAgICBpZiAoc3JjICE9IG51bGwgJiYgc3JjLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIC8vIEJyb3dzZXIgRXZlbnQgb2JqZWN0XG4gICAgICAgIHRoaXMudHlwZSA9IHNyYy50eXBlOyAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMudHlwZSkge1xuICAgICAgICAvLyBQbGFpbiBvYmplY3QgY29udGFpbmluZyBhbGwgZXZlbnQgZGV0YWlsc1xuICAgICAgICBwcm9wcyA9IHNyYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEV2ZW50IHN0cmluZ1xuICAgICAgICB0aGlzLnR5cGUgPSBzcmM7XG4gICAgICB9IC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cblxuICAgICAgaWYgKHByb3BzICE9IG51bGwpIHtcbiAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQgdG8gbWFudWFsbHkgY29weSBmaWVsZHMgd2UgdXNlXG4gICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHByb3BzLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgIHRoaXMudHlwZSA9IHByb3BzLnR5cGUgIT0gbnVsbCA/IHByb3BzLnR5cGUgOiB0aGlzLnR5cGU7XG4gICAgICAgIHRoaXMuY3kgPSBwcm9wcy5jeTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwcm9wcy5wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID0gcHJvcHMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2U7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gcHJvcHMubGF5b3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jeSAhPSBudWxsICYmIHRoaXMucG9zaXRpb24gIT0gbnVsbCAmJiB0aGlzLnJlbmRlcmVkUG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICAvLyBjcmVhdGUgYSByZW5kZXJlZCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgcGFzc2VkIHBvc2l0aW9uXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgICB2YXIgem9vbSA9IHRoaXMuY3kuem9vbSgpO1xuICAgICAgICB2YXIgcGFuID0gdGhpcy5jeS5wYW4oKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHBvcy54ICogem9vbSArIHBhbi54LFxuICAgICAgICAgIHk6IHBvcy55ICogem9vbSArIHBhbi55XG4gICAgICAgIH07XG4gICAgICB9IC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cblxuICAgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgIH0sXG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICghZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50XG5cblxuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcbiAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnRcblxuXG4gICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24gc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcbiAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG4gICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlXG4gIH07XG5cbiAgdmFyIGV2ZW50UmVnZXggPSAvXihbXi5dKykoXFwuKD86W14uXSspKT8kLzsgLy8gcmVnZXggZm9yIG1hdGNoaW5nIGV2ZW50IHN0cmluZ3MgKGUuZy4gXCJjbGljay5uYW1lc3BhY2VcIilcblxuICB2YXIgdW5pdmVyc2FsTmFtZXNwYWNlID0gJy4qJzsgLy8gbWF0Y2hlcyBhcyBpZiBubyBuYW1lc3BhY2Ugc3BlY2lmaWVkIGFuZCBwcmV2ZW50cyB1c2VycyBmcm9tIHVuYmluZGluZyBhY2NpZGVudGFsbHlcblxuICB2YXIgZGVmYXVsdHMkOCA9IHtcbiAgICBxdWFsaWZpZXJDb21wYXJlOiBmdW5jdGlvbiBxdWFsaWZpZXJDb21wYXJlKHExLCBxMikge1xuICAgICAgcmV0dXJuIHExID09PSBxMjtcbiAgICB9LFxuICAgIGV2ZW50TWF0Y2hlczogZnVuY3Rpb25cbiAgICAgIC8qY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKi9cbiAgICBldmVudE1hdGNoZXMoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvblxuICAgICAgLypjb250ZXh0LCBldnQqL1xuICAgIGFkZEV2ZW50RmllbGRzKCkge30sXG4gICAgY2FsbGJhY2tDb250ZXh0OiBmdW5jdGlvbiBjYWxsYmFja0NvbnRleHQoY29udGV4dFxuICAgIC8qLCBsaXN0ZW5lciwgZXZlbnRPYmoqL1xuICAgICkge1xuICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfSxcbiAgICBiZWZvcmVFbWl0OiBmdW5jdGlvblxuICAgICAgLyogY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqICovXG4gICAgYmVmb3JlRW1pdCgpIHt9LFxuICAgIGFmdGVyRW1pdDogZnVuY3Rpb25cbiAgICAgIC8qIGNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaiAqL1xuICAgIGFmdGVyRW1pdCgpIHt9LFxuICAgIGJ1YmJsZTogZnVuY3Rpb25cbiAgICAgIC8qY29udGV4dCovXG4gICAgYnViYmxlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgcGFyZW50OiBmdW5jdGlvblxuICAgICAgLypjb250ZXh0Ki9cbiAgICBwYXJlbnQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGNvbnRleHQ6IG51bGxcbiAgfTtcbiAgdmFyIGRlZmF1bHRzS2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRzJDgpO1xuICB2YXIgZW1wdHlPcHRzID0ge307XG5cbiAgZnVuY3Rpb24gRW1pdHRlcigpIHtcbiAgICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHlPcHRzO1xuICAgIHZhciBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBtaWNyby1vcHRpbWlzYXRpb24gdnMgT2JqZWN0LmFzc2lnbigpIC0tIHJlZHVjZXMgRWxlbWVudCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRzS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGRlZmF1bHRzS2V5c1tpXTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XSB8fCBkZWZhdWx0cyQ4W2tleV07XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLmNvbnRleHQ7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLmVtaXR0aW5nID0gMDtcbiAgfVxuXG4gIHZhciBwID0gRW1pdHRlci5wcm90b3R5cGU7XG5cbiAgdmFyIGZvckVhY2hFdmVudCA9IGZ1bmN0aW9uIGZvckVhY2hFdmVudChzZWxmLCBoYW5kbGVyLCBldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYsIGNvbmZPdmVycmlkZXMpIHtcbiAgICBpZiAoZm4kNihxdWFsaWZpZXIpKSB7XG4gICAgICBjYWxsYmFjayA9IHF1YWxpZmllcjtcbiAgICAgIHF1YWxpZmllciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZPdmVycmlkZXMpIHtcbiAgICAgIGlmIChjb25mID09IG51bGwpIHtcbiAgICAgICAgY29uZiA9IGNvbmZPdmVycmlkZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25mID0gZXh0ZW5kKHt9LCBjb25mLCBjb25mT3ZlcnJpZGVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG5cbiAgICAgIGlmIChlbXB0eVN0cmluZyhldnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhciB0eXBlID0gbWF0Y2hbMV07XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgICAgdmFyIHJldCA9IGhhbmRsZXIoc2VsZiwgZXZ0LCB0eXBlLCBuYW1lc3BhY2UsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYpO1xuXG4gICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gYWxsb3cgZXhpdGluZyBlYXJseVxuXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBtYWtlRXZlbnRPYmogPSBmdW5jdGlvbiBtYWtlRXZlbnRPYmooc2VsZiwgb2JqKSB7XG4gICAgc2VsZi5hZGRFdmVudEZpZWxkcyhzZWxmLmNvbnRleHQsIG9iaik7XG4gICAgcmV0dXJuIG5ldyBFdmVudChvYmoudHlwZSwgb2JqKTtcbiAgfTtcblxuICB2YXIgZm9yRWFjaEV2ZW50T2JqID0gZnVuY3Rpb24gZm9yRWFjaEV2ZW50T2JqKHNlbGYsIGhhbmRsZXIsIGV2ZW50cykge1xuICAgIGlmIChldmVudChldmVudHMpKSB7XG4gICAgICBoYW5kbGVyKHNlbGYsIGV2ZW50cyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChldmVudHMpKSB7XG4gICAgICBoYW5kbGVyKHNlbGYsIG1ha2VFdmVudE9iaihzZWxmLCBldmVudHMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG5cbiAgICAgIGlmIChlbXB0eVN0cmluZyhldnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhciB0eXBlID0gbWF0Y2hbMV07XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgICAgdmFyIGV2ZW50T2JqID0gbWFrZUV2ZW50T2JqKHNlbGYsIHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICAgIHRhcmdldDogc2VsZi5jb250ZXh0XG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVyKHNlbGYsIGV2ZW50T2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcC5vbiA9IHAuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKSB7XG4gICAgZm9yRWFjaEV2ZW50KHRoaXMsIGZ1bmN0aW9uIChzZWxmLCBldmVudCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gICAgICBpZiAoZm4kNihjYWxsYmFjaykpIHtcbiAgICAgICAgc2VsZi5saXN0ZW5lcnMucHVzaCh7XG4gICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIC8vIGZ1bGwgZXZlbnQgc3RyaW5nXG4gICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAgIC8vIGNhbGxiYWNrIHRvIHJ1blxuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgLy8gdGhlIGV2ZW50IHR5cGUgKGUuZy4gJ2NsaWNrJylcbiAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgICAvLyB0aGUgZXZlbnQgbmFtZXNwYWNlIChlLmcuIFwiLmZvb1wiKVxuICAgICAgICAgIHF1YWxpZmllcjogcXVhbGlmaWVyLFxuICAgICAgICAgIC8vIGEgcmVzdHJpY3Rpb24gb24gd2hldGhlciB0byBtYXRjaCB0aGlzIGVtaXR0ZXJcbiAgICAgICAgICBjb25mOiBjb25mIC8vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZiwgY29uZk92ZXJyaWRlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcC5vbmUgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCB7XG4gICAgICBvbmU6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBwLnJlbW92ZUxpc3RlbmVyID0gcC5vZmYgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLmVtaXR0aW5nICE9PSAwKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IGNvcHlBcnJheSQxKHRoaXMubGlzdGVuZXJzKTtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnM7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBmb3JFYWNoRXZlbnQoX3RoaXMsIGZ1bmN0aW9uIChzZWxmLCBldmVudCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrXG4gICAgICAvKiwgY29uZiovXG4gICAgICApIHtcbiAgICAgICAgaWYgKChsaXN0ZW5lci50eXBlID09PSB0eXBlIHx8IGV2ZW50cyA9PT0gJyonKSAmJiAoIW5hbWVzcGFjZSAmJiBsaXN0ZW5lci5uYW1lc3BhY2UgIT09ICcuKicgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSBuYW1lc3BhY2UpICYmICghcXVhbGlmaWVyIHx8IHNlbGYucXVhbGlmaWVyQ29tcGFyZShsaXN0ZW5lci5xdWFsaWZpZXIsIHF1YWxpZmllcikpICYmICghY2FsbGJhY2sgfHwgbGlzdGVuZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrKSkge1xuICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCBldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYpO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBfbG9vcChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcignKicpO1xuICB9O1xuXG4gIHAuZW1pdCA9IHAudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudHMsIGV4dHJhUGFyYW1zLCBtYW51YWxDYWxsYmFjaykge1xuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycztcbiAgICB2YXIgbnVtTGlzdGVuZXJzQmVmb3JlRW1pdCA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgdGhpcy5lbWl0dGluZysrO1xuXG4gICAgaWYgKCFhcnJheShleHRyYVBhcmFtcykpIHtcbiAgICAgIGV4dHJhUGFyYW1zID0gW2V4dHJhUGFyYW1zXTtcbiAgICB9XG5cbiAgICBmb3JFYWNoRXZlbnRPYmoodGhpcywgZnVuY3Rpb24gKHNlbGYsIGV2ZW50T2JqKSB7XG4gICAgICBpZiAobWFudWFsQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMgPSBbe1xuICAgICAgICAgIGV2ZW50OiBldmVudE9iai5ldmVudCxcbiAgICAgICAgICB0eXBlOiBldmVudE9iai50eXBlLFxuICAgICAgICAgIG5hbWVzcGFjZTogZXZlbnRPYmoubmFtZXNwYWNlLFxuICAgICAgICAgIGNhbGxiYWNrOiBtYW51YWxDYWxsYmFja1xuICAgICAgICB9XTtcbiAgICAgICAgbnVtTGlzdGVuZXJzQmVmb3JlRW1pdCA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoaSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IGV2ZW50T2JqLnR5cGUgJiYgKCFsaXN0ZW5lci5uYW1lc3BhY2UgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSBldmVudE9iai5uYW1lc3BhY2UgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSB1bml2ZXJzYWxOYW1lc3BhY2UpICYmIHNlbGYuZXZlbnRNYXRjaGVzKHNlbGYuY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKSkge1xuICAgICAgICAgIHZhciBhcmdzID0gW2V2ZW50T2JqXTtcblxuICAgICAgICAgIGlmIChleHRyYVBhcmFtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBwdXNoKGFyZ3MsIGV4dHJhUGFyYW1zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZWxmLmJlZm9yZUVtaXQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuXG4gICAgICAgICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmUpIHtcbiAgICAgICAgICAgIHNlbGYubGlzdGVuZXJzID0gc2VsZi5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsICE9PSBsaXN0ZW5lcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjb250ZXh0ID0gc2VsZi5jYWxsYmFja0NvbnRleHQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICAgIHZhciByZXQgPSBsaXN0ZW5lci5jYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBzZWxmLmFmdGVyRW1pdChzZWxmLmNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaik7XG5cbiAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZXZlbnRPYmouc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudE9iai5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBpZiBsaXN0ZW5lciBtYXRjaGVzXG5cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTGlzdGVuZXJzQmVmb3JlRW1pdDsgaSsrKSB7XG4gICAgICAgIF9sb29wMihpKTtcbiAgICAgIH0gLy8gZm9yIGxpc3RlbmVyXG5cblxuICAgICAgaWYgKHNlbGYuYnViYmxlKHNlbGYuY29udGV4dCkgJiYgIWV2ZW50T2JqLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgc2VsZi5wYXJlbnQoc2VsZi5jb250ZXh0KS5lbWl0KGV2ZW50T2JqLCBleHRyYVBhcmFtcyk7XG4gICAgICB9XG4gICAgfSwgZXZlbnRzKTtcbiAgICB0aGlzLmVtaXR0aW5nLS07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGVtaXR0ZXJPcHRpb25zJDEgPSB7XG4gICAgcXVhbGlmaWVyQ29tcGFyZTogZnVuY3Rpb24gcXVhbGlmaWVyQ29tcGFyZShzZWxlY3RvcjEsIHNlbGVjdG9yMikge1xuICAgICAgaWYgKHNlbGVjdG9yMSA9PSBudWxsIHx8IHNlbGVjdG9yMiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvcjEgPT0gbnVsbCAmJiBzZWxlY3RvcjIgPT0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvcjEuc2FtZVRleHQoc2VsZWN0b3IyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV2ZW50TWF0Y2hlczogZnVuY3Rpb24gZXZlbnRNYXRjaGVzKGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBsaXN0ZW5lci5xdWFsaWZpZXI7XG5cbiAgICAgIGlmIChzZWxlY3RvciAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBlbGUgIT09IGV2ZW50T2JqLnRhcmdldCAmJiBlbGVtZW50KGV2ZW50T2JqLnRhcmdldCkgJiYgc2VsZWN0b3IubWF0Y2hlcyhldmVudE9iai50YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhlbGUsIGV2dCkge1xuICAgICAgZXZ0LmN5ID0gZWxlLmN5KCk7XG4gICAgICBldnQudGFyZ2V0ID0gZWxlO1xuICAgIH0sXG4gICAgY2FsbGJhY2tDb250ZXh0OiBmdW5jdGlvbiBjYWxsYmFja0NvbnRleHQoZWxlLCBsaXN0ZW5lciwgZXZlbnRPYmopIHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5xdWFsaWZpZXIgIT0gbnVsbCA/IGV2ZW50T2JqLnRhcmdldCA6IGVsZTtcbiAgICB9LFxuICAgIGJlZm9yZUVtaXQ6IGZ1bmN0aW9uIGJlZm9yZUVtaXQoY29udGV4dCwgbGlzdGVuZXJcbiAgICAvKiwgZXZlbnRPYmoqL1xuICAgICkge1xuICAgICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmNlKSB7XG4gICAgICAgIGxpc3RlbmVyLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIuZXZlbnQsIGxpc3RlbmVyLnF1YWxpZmllciwgbGlzdGVuZXIuY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0sXG4gICAgYnViYmxlOiBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0NoaWxkKCkgPyBlbGUucGFyZW50KCkgOiBlbGUuY3koKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGFyZ1NlbGVjdG9yJDEgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgICBpZiAoc3RyaW5nKGFyZykpIHtcbiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoYXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gIH07XG5cbiAgdmFyIGVsZXNmbiQ5ID0ge1xuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIGNyZWF0ZUVtaXR0ZXIoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcblxuICAgICAgICBpZiAoIV9wLmVtaXR0ZXIpIHtcbiAgICAgICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMkMSwgZWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICAgIH0sXG4gICAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgZWxlLmVtaXR0ZXIoKS5vbihldmVudHMsIGFyZ1NlbCwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIGVsZS5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBhcmdTZWwsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgZWxlLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBvbmU6IGZ1bmN0aW9uIG9uZShldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIGVsZS5lbWl0dGVyKCkub25lKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgb25jZTogZnVuY3Rpb24gb25jZShldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIGVsZS5lbWl0dGVyKCkub24oZXZlbnRzLCBhcmdTZWwsIGNhbGxiYWNrLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICBvbmNlQ29sbGVjdGlvbjogdGhpc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQoZXZlbnRzLCBleHRyYVBhcmFtcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICBlbGUuZW1pdHRlcigpLmVtaXQoZXZlbnRzLCBleHRyYVBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1pdEFuZE5vdGlmeTogZnVuY3Rpb24gZW1pdEFuZE5vdGlmeShldmVudCwgZXh0cmFQYXJhbXMpIHtcbiAgICAgIC8vIGZvciBpbnRlcm5hbCB1c2Ugb25seVxuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gZW1wdHkgY29sbGVjdGlvbnMgZG9uJ3QgbmVlZCB0byBub3RpZnkgYW55dGhpbmdcbiAgICAgIC8vIG5vdGlmeSByZW5kZXJlclxuXG5cbiAgICAgIHRoaXMuY3koKS5ub3RpZnkoZXZlbnQsIHRoaXMpO1xuICAgICAgdGhpcy5lbWl0KGV2ZW50LCBleHRyYVBhcmFtcyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH07XG4gIGRlZmluZS5ldmVudEFsaWFzZXNPbihlbGVzZm4kOSk7XG5cbiAgdmFyIGVsZXNmbiQ4ID0ge1xuICAgIG5vZGVzOiBmdW5jdGlvbiBub2RlcyhzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKTtcbiAgICAgIH0pLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSxcbiAgICBlZGdlczogZnVuY3Rpb24gZWRnZXMoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuaXNFZGdlKCk7XG4gICAgICB9KS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgLy8gaW50ZXJuYWwgaGVscGVyIHRvIGdldCBub2RlcyBhbmQgZWRnZXMgYXMgc2VwYXJhdGUgY29sbGVjdGlvbnMgd2l0aCBzaW5nbGUgaXRlcmF0aW9uIG92ZXIgZWxlbWVudHNcbiAgICBieUdyb3VwOiBmdW5jdGlvbiBieUdyb3VwKCkge1xuICAgICAgdmFyIG5vZGVzID0gdGhpcy5zcGF3bigpO1xuICAgICAgdmFyIGVkZ2VzID0gdGhpcy5zcGF3bigpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG5cbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBlZGdlczogZWRnZXNcbiAgICAgIH07XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihfZmlsdGVyLCB0aGlzQXJnKSB7XG4gICAgICBpZiAoX2ZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGNoZWNrIHRoaXMgZmlyc3QgYi9jIGl0J3MgdGhlIG1vc3QgY29tbW9uL3BlcmZvcm1hbnQgY2FzZVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nKF9maWx0ZXIpIHx8IGVsZW1lbnRPckNvbGxlY3Rpb24oX2ZpbHRlcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RvcihfZmlsdGVyKS5maWx0ZXIodGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKGZuJDYoX2ZpbHRlcikpIHtcbiAgICAgICAgdmFyIGZpbHRlckVsZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgICAgIHZhciBlbGVzID0gdGhpcztcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgICB2YXIgaW5jbHVkZSA9IHRoaXNBcmcgPyBfZmlsdGVyLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIGVsZXNdKSA6IF9maWx0ZXIoZWxlLCBpLCBlbGVzKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICAgICAgICBmaWx0ZXJFbGVzLnB1c2goZWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyRWxlcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc3Bhd24oKTsgLy8gaWYgbm90IGhhbmRsZWQgYnkgYWJvdmUsIGdpdmUgJ2VtIGFuIGVtcHR5IGNvbGxlY3Rpb25cbiAgICB9LFxuICAgIG5vdDogZnVuY3Rpb24gbm90KHRvUmVtb3ZlKSB7XG4gICAgICBpZiAoIXRvUmVtb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgICAgICB0b1JlbW92ZSA9IHRoaXMuZmlsdGVyKHRvUmVtb3ZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuc3Bhd24oKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07XG4gICAgICAgICAgdmFyIHJlbW92ZSA9IHRvUmVtb3ZlLmhhcyhlbGVtZW50KTtcblxuICAgICAgICAgIGlmICghcmVtb3ZlKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgIH1cbiAgICB9LFxuICAgIGFic29sdXRlQ29tcGxlbWVudDogZnVuY3Rpb24gYWJzb2x1dGVDb21wbGVtZW50KCkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgcmV0dXJuIGN5Lm11dGFibGVFbGVtZW50cygpLm5vdCh0aGlzKTtcbiAgICB9LFxuICAgIGludGVyc2VjdDogZnVuY3Rpb24gaW50ZXJzZWN0KG90aGVyKSB7XG4gICAgICAvLyBpZiBhIHNlbGVjdG9yIGlzIHNwZWNpZmllZCwgdGhlbiBmaWx0ZXIgYnkgaXQgaW5zdGVhZFxuICAgICAgaWYgKHN0cmluZyhvdGhlcikpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gb3RoZXI7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuc3Bhd24oKTtcbiAgICAgIHZhciBjb2wxID0gdGhpcztcbiAgICAgIHZhciBjb2wyID0gb3RoZXI7XG4gICAgICB2YXIgY29sMVNtYWxsZXIgPSB0aGlzLmxlbmd0aCA8IG90aGVyLmxlbmd0aDtcbiAgICAgIHZhciBjb2xTID0gY29sMVNtYWxsZXIgPyBjb2wxIDogY29sMjtcbiAgICAgIHZhciBjb2xMID0gY29sMVNtYWxsZXIgPyBjb2wyIDogY29sMTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBjb2xTW2ldO1xuXG4gICAgICAgIGlmIChjb2xMLmhhcyhlbGUpKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuICAgIHhvcjogZnVuY3Rpb24geG9yKG90aGVyKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuXG4gICAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgICBvdGhlciA9IGN5LiQob3RoZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduKCk7XG4gICAgICB2YXIgY29sMSA9IHRoaXM7XG4gICAgICB2YXIgY29sMiA9IG90aGVyO1xuXG4gICAgICB2YXIgYWRkID0gZnVuY3Rpb24gYWRkKGNvbCwgb3RoZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gY29sW2ldO1xuICAgICAgICAgIHZhciBpZCA9IGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgICAgIHZhciBpbk90aGVyID0gb3RoZXIuaGFzRWxlbWVudFdpdGhJZChpZCk7XG5cbiAgICAgICAgICBpZiAoIWluT3RoZXIpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGFkZChjb2wxLCBjb2wyKTtcbiAgICAgIGFkZChjb2wyLCBjb2wxKTtcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuICAgIGRpZmY6IGZ1bmN0aW9uIGRpZmYob3RoZXIpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG5cbiAgICAgIGlmIChzdHJpbmcob3RoZXIpKSB7XG4gICAgICAgIG90aGVyID0gY3kuJChvdGhlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZWZ0ID0gdGhpcy5zcGF3bigpO1xuICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5zcGF3bigpO1xuICAgICAgdmFyIGJvdGggPSB0aGlzLnNwYXduKCk7XG4gICAgICB2YXIgY29sMSA9IHRoaXM7XG4gICAgICB2YXIgY29sMiA9IG90aGVyO1xuXG4gICAgICB2YXIgYWRkID0gZnVuY3Rpb24gYWRkKGNvbCwgb3RoZXIsIHJldEVsZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gY29sW2ldO1xuICAgICAgICAgIHZhciBpZCA9IGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgICAgIHZhciBpbk90aGVyID0gb3RoZXIuaGFzRWxlbWVudFdpdGhJZChpZCk7XG5cbiAgICAgICAgICBpZiAoaW5PdGhlcikge1xuICAgICAgICAgICAgYm90aC5tZXJnZShlbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRFbGVzLnB1c2goZWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGFkZChjb2wxLCBjb2wyLCBsZWZ0KTtcbiAgICAgIGFkZChjb2wyLCBjb2wxLCByaWdodCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIGJvdGg6IGJvdGhcbiAgICAgIH07XG4gICAgfSxcbiAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh0b0FkZCkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcblxuICAgICAgaWYgKCF0b0FkZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmluZyh0b0FkZCkpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdG9BZGQ7XG4gICAgICAgIHRvQWRkID0gY3kubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5zcGF3blNlbGYoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0FkZC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdG9BZGRbaV07XG4gICAgICAgIHZhciBhZGQgPSAhdGhpcy5oYXMoZWxlKTtcblxuICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuICAgIC8vIGluIHBsYWNlIG1lcmdlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICAgIG1lcmdlOiBmdW5jdGlvbiBtZXJnZSh0b0FkZCkge1xuICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICAgIHZhciBjeSA9IF9wLmN5O1xuXG4gICAgICBpZiAoIXRvQWRkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9BZGQgJiYgc3RyaW5nKHRvQWRkKSkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSB0b0FkZDtcbiAgICAgICAgdG9BZGQgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWFwID0gX3AubWFwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvQWRkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0b0FkZEVsZSA9IHRvQWRkW2ldO1xuICAgICAgICB2YXIgaWQgPSB0b0FkZEVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgICB2YXIgYWRkID0gIW1hcC5oYXMoaWQpO1xuXG4gICAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxlbmd0aCsrO1xuICAgICAgICAgIHRoaXNbaW5kZXhdID0gdG9BZGRFbGU7XG4gICAgICAgICAgbWFwLnNldChpZCwge1xuICAgICAgICAgICAgZWxlOiB0b0FkZEVsZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgdW5tZXJnZUF0OiBmdW5jdGlvbiB1bm1lcmdlQXQoaSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICB2YXIgbWFwID0gX3AubWFwOyAvLyByZW1vdmUgZWxlXG5cbiAgICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gICAgICBtYXBbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgdmFyIHVubWVyZ2VkTGFzdEVsZSA9IGkgPT09IHRoaXMubGVuZ3RoIC0gMTsgLy8gcmVwbGFjZSBlbXB0eSBzcG90IHdpdGggbGFzdCBlbGUgaW4gY29sbGVjdGlvblxuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxICYmICF1bm1lcmdlZExhc3RFbGUpIHtcbiAgICAgICAgdmFyIGxhc3RFbGVJID0gdGhpcy5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgbGFzdEVsZSA9IHRoaXNbbGFzdEVsZUldO1xuICAgICAgICB2YXIgbGFzdEVsZUlkID0gbGFzdEVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgICB0aGlzW2xhc3RFbGVJXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpc1tpXSA9IGxhc3RFbGU7XG4gICAgICAgIG1hcC5zZXQobGFzdEVsZUlkLCB7XG4gICAgICAgICAgZWxlOiBsYXN0RWxlLFxuICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aGUgY29sbGVjdGlvbiBpcyBub3cgMSBlbGUgc21hbGxlclxuXG5cbiAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8vIHJlbW92ZSBzaW5nbGUgZWxlIGluIHBsYWNlIGluIGNhbGxpbmcgY29sbGVjdGlvblxuICAgIHVubWVyZ2VPbmU6IGZ1bmN0aW9uIHVubWVyZ2VPbmUoZWxlKSB7XG4gICAgICBlbGUgPSBlbGVbMF07XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgdmFyIGlkID0gZWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICB2YXIgbWFwID0gX3AubWFwO1xuICAgICAgdmFyIGVudHJ5ID0gbWFwLmdldChpZCk7XG5cbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIG5vIG5lZWQgdG8gcmVtb3ZlXG4gICAgICB9XG5cbiAgICAgIHZhciBpID0gZW50cnkuaW5kZXg7XG4gICAgICB0aGlzLnVubWVyZ2VBdChpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLy8gcmVtb3ZlIGVsZXMgaW4gcGxhY2Ugb24gY2FsbGluZyBjb2xsZWN0aW9uXG4gICAgdW5tZXJnZTogZnVuY3Rpb24gdW5tZXJnZSh0b1JlbW92ZSkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcblxuICAgICAgaWYgKCF0b1JlbW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRvUmVtb3ZlICYmIHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdG9SZW1vdmU7XG4gICAgICAgIHRvUmVtb3ZlID0gY3kubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b1JlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnVubWVyZ2VPbmUodG9SZW1vdmVbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIHVubWVyZ2VCeTogZnVuY3Rpb24gdW5tZXJnZUJ5KHRvUm1Gbikge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG5cbiAgICAgICAgaWYgKHRvUm1GbihlbGUpKSB7XG4gICAgICAgICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBGbiwgdGhpc0FyZykge1xuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciByZXQgPSB0aGlzQXJnID8gbWFwRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogbWFwRm4oZWxlLCBpLCBlbGVzKTtcbiAgICAgICAgYXJyLnB1c2gocmV0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciB2YWwgPSBpbml0aWFsVmFsdWU7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWwgPSBmbih2YWwsIGVsZXNbaV0sIGksIGVsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgbWF4OiBmdW5jdGlvbiBtYXgodmFsRm4sIHRoaXNBcmcpIHtcbiAgICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG4gICAgICB2YXIgbWF4RWxlO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciB2YWwgPSB0aGlzQXJnID8gdmFsRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogdmFsRm4oZWxlLCBpLCBlbGVzKTtcblxuICAgICAgICBpZiAodmFsID4gbWF4KSB7XG4gICAgICAgICAgbWF4ID0gdmFsO1xuICAgICAgICAgIG1heEVsZSA9IGVsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbWF4LFxuICAgICAgICBlbGU6IG1heEVsZVxuICAgICAgfTtcbiAgICB9LFxuICAgIG1pbjogZnVuY3Rpb24gbWluKHZhbEZuLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgbWluID0gSW5maW5pdHk7XG4gICAgICB2YXIgbWluRWxlO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciB2YWwgPSB0aGlzQXJnID8gdmFsRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogdmFsRm4oZWxlLCBpLCBlbGVzKTtcblxuICAgICAgICBpZiAodmFsIDwgbWluKSB7XG4gICAgICAgICAgbWluID0gdmFsO1xuICAgICAgICAgIG1pbkVsZSA9IGVsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbWluLFxuICAgICAgICBlbGU6IG1pbkVsZVxuICAgICAgfTtcbiAgICB9XG4gIH07IC8vIGFsaWFzZXNcblxuICB2YXIgZm4kMSA9IGVsZXNmbiQ4O1xuICBmbiQxWyd1J10gPSBmbiQxWyd8J10gPSBmbiQxWycrJ10gPSBmbiQxLnVuaW9uID0gZm4kMS5vciA9IGZuJDEuYWRkO1xuICBmbiQxWydcXFxcJ10gPSBmbiQxWychJ10gPSBmbiQxWyctJ10gPSBmbiQxLmRpZmZlcmVuY2UgPSBmbiQxLnJlbGF0aXZlQ29tcGxlbWVudCA9IGZuJDEuc3VidHJhY3QgPSBmbiQxLm5vdDtcbiAgZm4kMVsnbiddID0gZm4kMVsnJiddID0gZm4kMVsnLiddID0gZm4kMS5hbmQgPSBmbiQxLmludGVyc2VjdGlvbiA9IGZuJDEuaW50ZXJzZWN0O1xuICBmbiQxWydeJ10gPSBmbiQxWycoKyknXSA9IGZuJDFbJygtKSddID0gZm4kMS5zeW1tZXRyaWNEaWZmZXJlbmNlID0gZm4kMS5zeW1kaWZmID0gZm4kMS54b3I7XG4gIGZuJDEuZm5GaWx0ZXIgPSBmbiQxLmZpbHRlckZuID0gZm4kMS5zdGRGaWx0ZXIgPSBmbiQxLmZpbHRlcjtcbiAgZm4kMS5jb21wbGVtZW50ID0gZm4kMS5hYnNjb21wID0gZm4kMS5hYnNvbHV0ZUNvbXBsZW1lbnQ7XG5cbiAgdmFyIGVsZXNmbiQ3ID0ge1xuICAgIGlzTm9kZTogZnVuY3Rpb24gaXNOb2RlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAoKSA9PT0gJ25vZGVzJztcbiAgICB9LFxuICAgIGlzRWRnZTogZnVuY3Rpb24gaXNFZGdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAoKSA9PT0gJ2VkZ2VzJztcbiAgICB9LFxuICAgIGlzTG9vcDogZnVuY3Rpb24gaXNMb29wKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNFZGdlKCkgJiYgdGhpcy5zb3VyY2UoKVswXSA9PT0gdGhpcy50YXJnZXQoKVswXTtcbiAgICB9LFxuICAgIGlzU2ltcGxlOiBmdW5jdGlvbiBpc1NpbXBsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRWRnZSgpICYmIHRoaXMuc291cmNlKClbMF0gIT09IHRoaXMudGFyZ2V0KClbMF07XG4gICAgfSxcbiAgICBncm91cDogZnVuY3Rpb24gZ3JvdXAoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLl9wcml2YXRlLmdyb3VwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogIEVsZW1lbnRzIGFyZSBkcmF3biBpbiBhIHNwZWNpZmljIG9yZGVyIGJhc2VkIG9uIGNvbXBvdW5kIGRlcHRoIChsb3cgdG8gaGlnaCksIHRoZSBlbGVtZW50IHR5cGUgKG5vZGVzIGFib3ZlIGVkZ2VzKSxcbiAgICogIGFuZCB6LWluZGV4IChsb3cgdG8gaGlnaCkuICBUaGVzZSBzdHlsZXMgYWZmZWN0IGhvdyB0aGlzIGFwcGxpZXM6XG4gICAqXG4gICAqICB6LWNvbXBvdW5kLWRlcHRoOiBNYXkgYmUgYGJvdHRvbSB8IG9ycGhhbiB8IGF1dG8gfCB0b3BgLiAgVGhlIGZpcnN0IGRyYXduIGlzIGBib3R0b21gLCB0aGVuIGBvcnBoYW5gIHdoaWNoIGlzIHRoZVxuICAgKiAgICAgIHNhbWUgZGVwdGggYXMgdGhlIHJvb3Qgb2YgdGhlIGNvbXBvdW5kIGdyYXBoLCBmb2xsb3dlZCBieSB0aGUgZGVmYXVsdCB2YWx1ZSBgYXV0b2Agd2hpY2ggZHJhd3MgaW4gb3JkZXIgZnJvbVxuICAgKiAgICAgIHJvb3QgdG8gbGVhdmVzIG9mIHRoZSBjb21wb3VuZCBncmFwaC4gIFRoZSBsYXN0IGRyYXduIGlzIGB0b3BgLlxuICAgKiAgei1pbmRleC1jb21wYXJlOiBNYXkgYmUgYGF1dG8gfCBtYW51YWxgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGF1dG9gIHdoaWNoIGFsd2F5cyBkcmF3cyBlZGdlcyB1bmRlciBub2Rlcy5cbiAgICogICAgICBgbWFudWFsYCBpZ25vcmVzIHRoaXMgY29udmVudGlvbiBhbmQgZHJhd3MgYmFzZWQgb24gdGhlIGB6LWluZGV4YCB2YWx1ZSBzZXR0aW5nLlxuICAgKiAgei1pbmRleDogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGFmZmVjdHMgdGhlIHJlbGF0aXZlIGRyYXcgb3JkZXIgb2YgZWxlbWVudHMuICBJbiBnZW5lcmFsLCBhbiBlbGVtZW50IHdpdGggYSBoaWdoZXJcbiAgICogICAgICBgei1pbmRleGAgd2lsbCBiZSBkcmF3biBvbiB0b3Agb2YgYW4gZWxlbWVudCB3aXRoIGEgbG93ZXIgYHotaW5kZXhgLlxuICAgKi9cblxuICB2YXIgekluZGV4U29ydCA9IGZ1bmN0aW9uIHpJbmRleFNvcnQoYSwgYikge1xuICAgIHZhciBjeSA9IGEuY3koKTtcbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcblxuICAgIGZ1bmN0aW9uIGdldERlcHRoKGVsZSkge1xuICAgICAgdmFyIHN0eWxlID0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpO1xuXG4gICAgICBpZiAoc3R5bGUudmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgICByZXR1cm4gaGFzQ29tcG91bmROb2RlcyA/IGVsZS56RGVwdGgoKSA6IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLnZhbHVlID09PSAnYm90dG9tJykge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLnZhbHVlID09PSAndG9wJykge1xuICAgICAgICByZXR1cm4gTUFYX0lOVCQxO1xuICAgICAgfSAvLyAnb3JwaGFuJ1xuXG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBkZXB0aERpZmYgPSBnZXREZXB0aChhKSAtIGdldERlcHRoKGIpO1xuXG4gICAgaWYgKGRlcHRoRGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIGRlcHRoRGlmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFbGVEZXB0aChlbGUpIHtcbiAgICAgIHZhciBzdHlsZSA9IGVsZS5wc3R5bGUoJ3otaW5kZXgtY29tcGFyZScpO1xuXG4gICAgICBpZiAoc3R5bGUudmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgICByZXR1cm4gZWxlLmlzTm9kZSgpID8gMSA6IDA7XG4gICAgICB9IC8vICdtYW51YWwnXG5cblxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIGVsZURpZmYgPSBnZXRFbGVEZXB0aChhKSAtIGdldEVsZURlcHRoKGIpO1xuXG4gICAgaWYgKGVsZURpZmYgIT09IDApIHtcbiAgICAgIHJldHVybiBlbGVEaWZmO1xuICAgIH1cblxuICAgIHZhciB6RGlmZiA9IGEucHN0eWxlKCd6LWluZGV4JykudmFsdWUgLSBiLnBzdHlsZSgnei1pbmRleCcpLnZhbHVlO1xuXG4gICAgaWYgKHpEaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gekRpZmY7XG4gICAgfSAvLyBjb21wYXJlIGluZGljZXMgaW4gdGhlIGNvcmUgKG9yZGVyIGFkZGVkIHRvIGdyYXBoIHcvIGxhc3Qgb24gdG9wKVxuXG5cbiAgICByZXR1cm4gYS5wb29sSW5kZXgoKSAtIGIucG9vbEluZGV4KCk7XG4gIH07XG5cbiAgdmFyIGVsZXNmbiQ2ID0ge1xuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4sIHRoaXNBcmcpIHtcbiAgICAgIGlmIChmbiQ2KGZuKSkge1xuICAgICAgICB2YXIgTiA9IHRoaXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgICAgdmFyIHJldCA9IHRoaXNBcmcgPyBmbi5hcHBseSh0aGlzQXJnLCBbZWxlLCBpLCB0aGlzXSkgOiBmbihlbGUsIGksIHRoaXMpO1xuXG4gICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gLy8gZXhpdCBlYWNoIGVhcmx5IG9uIHJldHVybiBmYWxzZVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJheS5wdXNoKHRoaXNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSxcbiAgICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICB2YXIgdGhpc1NpemUgPSB0aGlzLmxlbmd0aDtcblxuICAgICAgaWYgKGVuZCA9PSBudWxsKSB7XG4gICAgICAgIGVuZCA9IHRoaXNTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgPT0gbnVsbCkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSB0aGlzU2l6ZSArIHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgPSB0aGlzU2l6ZSArIGVuZDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpID49IDAgJiYgaSA8IGVuZCAmJiBpIDwgdGhpc1NpemU7IGkrKykge1xuICAgICAgICBhcnJheS5wdXNoKHRoaXNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zcGF3bihhcnJheSk7XG4gICAgfSxcbiAgICBzaXplOiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICAgIH0sXG4gICAgZXE6IGZ1bmN0aW9uIGVxKGkpIHtcbiAgICAgIHJldHVybiB0aGlzW2ldIHx8IHRoaXMuc3Bhd24oKTtcbiAgICB9LFxuICAgIGZpcnN0OiBmdW5jdGlvbiBmaXJzdCgpIHtcbiAgICAgIHJldHVybiB0aGlzWzBdIHx8IHRoaXMuc3Bhd24oKTtcbiAgICB9LFxuICAgIGxhc3Q6IGZ1bmN0aW9uIGxhc3QoKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIHx8IHRoaXMuc3Bhd24oKTtcbiAgICB9LFxuICAgIGVtcHR5OiBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgICB9LFxuICAgIG5vbmVtcHR5OiBmdW5jdGlvbiBub25lbXB0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5lbXB0eSgpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChzb3J0Rm4pIHtcbiAgICAgIGlmICghZm4kNihzb3J0Rm4pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgc29ydGVkID0gdGhpcy50b0FycmF5KCkuc29ydChzb3J0Rm4pO1xuICAgICAgcmV0dXJuIHRoaXMuc3Bhd24oc29ydGVkKTtcbiAgICB9LFxuICAgIHNvcnRCeVpJbmRleDogZnVuY3Rpb24gc29ydEJ5WkluZGV4KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydCh6SW5kZXhTb3J0KTtcbiAgICB9LFxuICAgIHpEZXB0aDogZnVuY3Rpb24gekRlcHRoKCkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmICghZWxlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IC8vIGxldCBjeSA9IGVsZS5jeSgpO1xuXG5cbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBncm91cCA9IF9wLmdyb3VwO1xuXG4gICAgICBpZiAoZ3JvdXAgPT09ICdub2RlcycpIHtcbiAgICAgICAgdmFyIGRlcHRoID0gX3AuZGF0YS5wYXJlbnQgPyBlbGUucGFyZW50cygpLnNpemUoKSA6IDA7XG5cbiAgICAgICAgaWYgKCFlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgIHJldHVybiBNQVhfSU5UJDEgLSAxOyAvLyBjaGlsZGxlc3Mgbm9kZXMgYWx3YXlzIG9uIHRvcFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlcHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgICAgdmFyIHRndCA9IF9wLnRhcmdldDtcbiAgICAgICAgdmFyIHNyY0RlcHRoID0gc3JjLnpEZXB0aCgpO1xuICAgICAgICB2YXIgdGd0RGVwdGggPSB0Z3QuekRlcHRoKCk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChzcmNEZXB0aCwgdGd0RGVwdGgsIDApOyAvLyBkZXB0aCBvZiBkZWVwZXN0IHBhcmVudFxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZWxlc2ZuJDYuZWFjaCA9IGVsZXNmbiQ2LmZvckVhY2g7XG5cbiAgdmFyIGRlZmluZVN5bWJvbEl0ZXJhdG9yID0gZnVuY3Rpb24gZGVmaW5lU3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgdmFyIHR5cGVvZlVuZGVmID0gXCJ1bmRlZmluZWRcIiA7XG4gICAgdmFyIGlzSXRlcmF0b3JTdXBwb3J0ZWQgPSAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKFN5bWJvbCkpICE9IHR5cGVvZlVuZGVmICYmIF90eXBlb2YoU3ltYm9sLml0ZXJhdG9yKSAhPSB0eXBlb2ZVbmRlZjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgaWYgKGlzSXRlcmF0b3JTdXBwb3J0ZWQpIHtcbiAgICAgIGVsZXNmbiQ2W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSQxKHtcbiAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgaWYgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSBfdGhpc1tpKytdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGVudHJ5LmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBTeW1ib2wuaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgZGVmaW5lU3ltYm9sSXRlcmF0b3IoKTtcblxuICB2YXIgZ2V0TGF5b3V0RGltZW5zaW9uT3B0aW9ucyA9IGRlZmF1bHRzJGcoe1xuICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2VcbiAgfSk7XG4gIHZhciBlbGVzZm4kNSA9IHtcbiAgICAvLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIG5vZGUgZGltZW5zaW9ucyB7IHgsIHkgfSBiYXNlZCBvbiBvcHRpb25zIGdpdmVuXG4gICAgbGF5b3V0RGltZW5zaW9uczogZnVuY3Rpb24gbGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gZ2V0TGF5b3V0RGltZW5zaW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIHZhciBkaW1zO1xuXG4gICAgICBpZiAoIXRoaXMudGFrZXNVcFNwYWNlKCkpIHtcbiAgICAgICAgZGltcyA9IHtcbiAgICAgICAgICB3OiAwLFxuICAgICAgICAgIGg6IDBcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpIHtcbiAgICAgICAgdmFyIGJiRGltID0gdGhpcy5ib3VuZGluZ0JveCgpO1xuICAgICAgICBkaW1zID0ge1xuICAgICAgICAgIHc6IGJiRGltLncsXG4gICAgICAgICAgaDogYmJEaW0uaFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGltcyA9IHtcbiAgICAgICAgICB3OiB0aGlzLm91dGVyV2lkdGgoKSxcbiAgICAgICAgICBoOiB0aGlzLm91dGVySGVpZ2h0KClcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gc2FuaXRpc2UgdGhlIGRpbWVuc2lvbnMgZm9yIGV4dGVybmFsIGxheW91dHMgKGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8pXG5cblxuICAgICAgaWYgKGRpbXMudyA9PT0gMCB8fCBkaW1zLmggPT09IDApIHtcbiAgICAgICAgZGltcy53ID0gZGltcy5oID0gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpbXM7XG4gICAgfSxcbiAgICAvLyB1c2luZyBzdGFuZGFyZCBsYXlvdXQgb3B0aW9ucywgYXBwbHkgcG9zaXRpb24gZnVuY3Rpb24gKHcvIG9yIHcvbyBhbmltYXRpb24pXG4gICAgbGF5b3V0UG9zaXRpb25zOiBmdW5jdGlvbiBsYXlvdXRQb3NpdGlvbnMobGF5b3V0LCBvcHRpb25zLCBmbikge1xuICAgICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gIW4uaXNQYXJlbnQoKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgICAgdmFyIGxheW91dEVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIG5vZGVzICYgZWRnZXNcblxuICAgICAgdmFyIGdldE1lbW9pemVLZXkgPSBmdW5jdGlvbiBnZXRNZW1vaXplS2V5KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuaWQoKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBmbk1lbSA9IG1lbW9pemUkMShmbiwgZ2V0TWVtb2l6ZUtleSk7IC8vIG1lbW9pemVkIHZlcnNpb24gb2YgcG9zaXRpb24gZnVuY3Rpb25cblxuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RhcnQnLFxuICAgICAgICBsYXlvdXQ6IGxheW91dFxuICAgICAgfSk7XG4gICAgICBsYXlvdXQuYW5pbWF0aW9ucyA9IFtdO1xuXG4gICAgICB2YXIgY2FsY3VsYXRlU3BhY2luZyA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNwYWNpbmcoc3BhY2luZywgbm9kZXNCYiwgcG9zKSB7XG4gICAgICAgIHZhciBjZW50ZXIgPSB7XG4gICAgICAgICAgeDogbm9kZXNCYi54MSArIG5vZGVzQmIudyAvIDIsXG4gICAgICAgICAgeTogbm9kZXNCYi55MSArIG5vZGVzQmIuaCAvIDJcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNwYWNpbmdWZWN0b3IgPSB7XG4gICAgICAgICAgLy8gc2NhbGUgZnJvbSBjZW50ZXIgb2YgYm91bmRpbmcgYm94IChub3QgbmVjZXNzYXJpbHkgMCwwKVxuICAgICAgICAgIHg6IChwb3MueCAtIGNlbnRlci54KSAqIHNwYWNpbmcsXG4gICAgICAgICAgeTogKHBvcy55IC0gY2VudGVyLnkpICogc3BhY2luZ1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGNlbnRlci54ICsgc3BhY2luZ1ZlY3Rvci54LFxuICAgICAgICAgIHk6IGNlbnRlci55ICsgc3BhY2luZ1ZlY3Rvci55XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICB2YXIgdXNlU3BhY2luZ0ZhY3RvciA9IG9wdGlvbnMuc3BhY2luZ0ZhY3RvciAmJiBvcHRpb25zLnNwYWNpbmdGYWN0b3IgIT09IDE7XG5cbiAgICAgIHZhciBzcGFjaW5nQmIgPSBmdW5jdGlvbiBzcGFjaW5nQmIoKSB7XG4gICAgICAgIGlmICghdXNlU3BhY2luZ0ZhY3Rvcikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgdmFyIHBvcyA9IGZuTWVtKG5vZGUsIGkpO1xuICAgICAgICAgIGV4cGFuZEJvdW5kaW5nQm94QnlQb2ludChiYiwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYjtcbiAgICAgIH07XG5cbiAgICAgIHZhciBiYiA9IHNwYWNpbmdCYigpO1xuICAgICAgdmFyIGdldEZpbmFsUG9zID0gbWVtb2l6ZSQxKGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgICAgIHZhciBuZXdQb3MgPSBmbk1lbShub2RlLCBpKTtcblxuICAgICAgICBpZiAodXNlU3BhY2luZ0ZhY3Rvcikge1xuICAgICAgICAgIHZhciBzcGFjaW5nID0gTWF0aC5hYnMob3B0aW9ucy5zcGFjaW5nRmFjdG9yKTtcbiAgICAgICAgICBuZXdQb3MgPSBjYWxjdWxhdGVTcGFjaW5nKHNwYWNpbmcsIGJiLCBuZXdQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudHJhbnNmb3JtICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdQb3MgPSBvcHRpb25zLnRyYW5zZm9ybShub2RlLCBuZXdQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICAgIH0sIGdldE1lbW9pemVLZXkpO1xuXG4gICAgICBpZiAob3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgIHZhciBuZXdQb3MgPSBnZXRGaW5hbFBvcyhub2RlLCBpKTtcbiAgICAgICAgICB2YXIgYW5pbWF0ZU5vZGUgPSBvcHRpb25zLmFuaW1hdGVGaWx0ZXIgPT0gbnVsbCB8fCBvcHRpb25zLmFuaW1hdGVGaWx0ZXIobm9kZSwgaSk7XG5cbiAgICAgICAgICBpZiAoYW5pbWF0ZU5vZGUpIHtcbiAgICAgICAgICAgIHZhciBhbmkgPSBub2RlLmFuaW1hdGlvbih7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXdQb3MsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgICAgICBlYXNpbmc6IG9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goYW5pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5wb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICAgIHZhciBmaXRBbmkgPSBjeS5hbmltYXRpb24oe1xuICAgICAgICAgICAgZml0OiB7XG4gICAgICAgICAgICAgIGJvdW5kaW5nQm94OiBsYXlvdXRFbGVzLmJvdW5kaW5nQm94QXQoZ2V0RmluYWxQb3MpLFxuICAgICAgICAgICAgICBwYWRkaW5nOiBvcHRpb25zLnBhZGRpbmdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsYXlvdXQuYW5pbWF0aW9ucy5wdXNoKGZpdEFuaSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy56b29tICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5wYW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciB6b29tUGFuQW5pID0gY3kuYW5pbWF0aW9uKHtcbiAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICAgIHBhbjogb3B0aW9ucy5wYW4sXG4gICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsYXlvdXQuYW5pbWF0aW9ucy5wdXNoKHpvb21QYW5BbmkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0LmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pKSB7XG4gICAgICAgICAgcmV0dXJuIGFuaS5wbGF5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsYXlvdXQub25lKCdsYXlvdXRyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHJlYWR5JyxcbiAgICAgICAgICBsYXlvdXQ6IGxheW91dFxuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZSQxLmFsbChsYXlvdXQuYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24gKGFuaSkge1xuICAgICAgICAgIHJldHVybiBhbmkucHJvbWlzZSgpO1xuICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGF5b3V0Lm9uZSgnbGF5b3V0c3RvcCcsIG9wdGlvbnMuc3RvcCk7XG4gICAgICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgICAgbGF5b3V0OiBsYXlvdXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2Rlcy5wb3NpdGlvbnMoZ2V0RmluYWxQb3MpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICAgIGN5LmZpdChvcHRpb25zLmVsZXMsIG9wdGlvbnMucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy56b29tICE9IG51bGwpIHtcbiAgICAgICAgICBjeS56b29tKG9wdGlvbnMuem9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYW4pIHtcbiAgICAgICAgICBjeS5wYW4ob3B0aW9ucy5wYW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgICAgbGF5b3V0OiBsYXlvdXRcbiAgICAgICAgfSk7XG4gICAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIGxheW91dDogZnVuY3Rpb24gbGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIHJldHVybiBjeS5tYWtlTGF5b3V0KGV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgICBlbGVzOiB0aGlzXG4gICAgICB9KSk7XG4gICAgfVxuICB9OyAvLyBhbGlhc2VzOlxuXG4gIGVsZXNmbiQ1LmNyZWF0ZUxheW91dCA9IGVsZXNmbiQ1Lm1ha2VMYXlvdXQgPSBlbGVzZm4kNS5sYXlvdXQ7XG5cbiAgZnVuY3Rpb24gc3R5bGVDYWNoZShrZXksIGZuLCBlbGUpIHtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIGNhY2hlID0gX3Auc3R5bGVDYWNoZSA9IF9wLnN0eWxlQ2FjaGUgfHwgW107XG4gICAgdmFyIHZhbDtcblxuICAgIGlmICgodmFsID0gY2FjaGVba2V5XSkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gY2FjaGVba2V5XSA9IGZuKGVsZSk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhY2hlU3R5bGVGdW5jdGlvbihrZXksIGZuKSB7XG4gICAga2V5ID0gaGFzaFN0cmluZyhrZXkpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjYWNoZWRTdHlsZUZ1bmN0aW9uKGVsZSkge1xuICAgICAgcmV0dXJuIHN0eWxlQ2FjaGUoa2V5LCBmbiwgZWxlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKGtleSwgZm4pIHtcbiAgICBrZXkgPSBoYXNoU3RyaW5nKGtleSk7XG5cbiAgICB2YXIgc2VsZkZuID0gZnVuY3Rpb24gc2VsZkZuKGVsZSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwoZWxlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZFByb3RvdHlwZVN0eWxlRnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICByZXR1cm4gc3R5bGVDYWNoZShrZXksIHNlbGZGbiwgZWxlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGVsZXNmbiQ0ID0ge1xuICAgIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogZnVuY3Rpb24gcmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHVzZUNhY2hlKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgICB2YXIgcmVuZGVyZXIgPSBjeS5yZW5kZXJlcigpO1xuICAgICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5LnN0eWxlRW5hYmxlZCgpO1xuXG4gICAgICBpZiAocmVuZGVyZXIgJiYgc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIHJlbmRlcmVyLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLCB1c2VDYWNoZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZGlydHlTdHlsZUNhY2hlOiBmdW5jdGlvbiBkaXJ0eVN0eWxlQ2FjaGUoKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG5cbiAgICAgIHZhciBkaXJ0eSA9IGZ1bmN0aW9uIGRpcnR5KGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlQ2FjaGUgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgICB2YXIgZWxlcztcbiAgICAgICAgZWxlcyA9IHRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSk7XG4gICAgICAgIGVsZXMubWVyZ2UoZWxlcy5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgICAgZWxlcy5mb3JFYWNoKGRpcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgZGlydHkoZWxlKTtcbiAgICAgICAgICBlbGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGRpcnR5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLy8gZnVsbHkgdXBkYXRlcyAocmVjYWxjdWxhdGVzKSB0aGUgc3R5bGUgZm9yIHRoZSBlbGVtZW50c1xuICAgIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZShub3RpZnlSZW5kZXJlcikge1xuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKGN5LmJhdGNoaW5nKCkpIHtcbiAgICAgICAgdmFyIGJFbGVzID0gY3kuX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7XG4gICAgICAgIGJFbGVzLm1lcmdlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmcgYW5kIGV4aXQgZWFybHkgd2hlbiBiYXRjaGluZ1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgICAgdmFyIHVwZGF0ZWRFbGVzID0gdGhpcztcbiAgICAgIG5vdGlmeVJlbmRlcmVyID0gbm90aWZ5UmVuZGVyZXIgfHwgbm90aWZ5UmVuZGVyZXIgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgaWYgKGhhc0NvbXBvdW5kcykge1xuICAgICAgICAvLyB0aGVuIGFkZCBldmVyeXRoaW5nIHVwIGFuZCBkb3duIGZvciBjb21wb3VuZCBzZWxlY3RvciBjaGVja3NcbiAgICAgICAgdXBkYXRlZEVsZXMgPSB0aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpO1xuICAgICAgfSAvLyBsZXQgY2hhbmdlZEVsZXMgPSBzdHlsZS5hcHBseSggdXBkYXRlZEVsZXMgKTtcblxuXG4gICAgICB2YXIgY2hhbmdlZEVsZXMgPSB1cGRhdGVkRWxlcztcblxuICAgICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICAgIGNoYW5nZWRFbGVzLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7IC8vIGxldCByZW5kZXJlciBrbm93IHdlIGNoYW5nZWQgc3R5bGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZWRFbGVzLmVtaXQoJ3N0eWxlJyk7IC8vIGp1c3QgZmlyZSB0aGUgZXZlbnRcbiAgICAgIH1cblxuICAgICAgdXBkYXRlZEVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eSA9IHRydWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgLy8gcHJpdmF0ZTogY2xlYXJzIGRpcnR5IGZsYWcgYW5kIHJlY2FsY3VsYXRlcyBzdHlsZVxuICAgIGNsZWFuU3R5bGU6IGZ1bmN0aW9uIGNsZWFuU3R5bGUoKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG5cbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG5cbiAgICAgICAgaWYgKGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5KSB7XG4gICAgICAgICAgLy8gbi5iLiB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCBiZWZvcmUgYXBwbHkoKSB0byBhdm9pZCBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uXG4gICAgICAgICAgZWxlLl9wcml2YXRlLnN0eWxlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICBjeS5zdHlsZSgpLmFwcGx5KGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldCB0aGUgaW50ZXJuYWwgcGFyc2VkIHN0eWxlIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eVxuICAgIHBhcnNlZFN0eWxlOiBmdW5jdGlvbiBwYXJzZWRTdHlsZShwcm9wZXJ0eSkge1xuICAgICAgdmFyIGluY2x1ZGVOb25EZWZhdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICB2YXIgY3kgPSBlbGUuY3koKTtcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgdGhpcy5jbGVhblN0eWxlKCk7XG4gICAgICAgIHZhciBvdmVycmlkZGVuU3R5bGUgPSBlbGUuX3ByaXZhdGUuc3R5bGVbcHJvcGVydHldO1xuXG4gICAgICAgIGlmIChvdmVycmlkZGVuU3R5bGUgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZGVuU3R5bGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU5vbkRlZmF1bHQpIHtcbiAgICAgICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBudW1lcmljU3R5bGU6IGZ1bmN0aW9uIG51bWVyaWNTdHlsZShwcm9wZXJ0eSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIHZhciBwc3R5bGUgPSBlbGUucHN0eWxlKHByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuIHBzdHlsZS5wZlZhbHVlICE9PSB1bmRlZmluZWQgPyBwc3R5bGUucGZWYWx1ZSA6IHBzdHlsZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG51bWVyaWNTdHlsZVVuaXRzOiBmdW5jdGlvbiBudW1lcmljU3R5bGVVbml0cyhwcm9wZXJ0eSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUucHN0eWxlKHByb3BlcnR5KS51bml0cztcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldCB0aGUgc3BlY2lmaWVkIGNzcyBwcm9wZXJ0eSBhcyBhIHJlbmRlcmVkIHZhbHVlIChpLmUuIG9uLXNjcmVlbiB2YWx1ZSlcbiAgICAvLyBvciBnZXQgdGhlIHdob2xlIHJlbmRlcmVkIHN0eWxlIGlmIG5vIHByb3BlcnR5IHNwZWNpZmllZCAoTkIgZG9lc24ndCBhbGxvdyBzZXR0aW5nKVxuICAgIHJlbmRlcmVkU3R5bGU6IGZ1bmN0aW9uIHJlbmRlcmVkU3R5bGUocHJvcGVydHkpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGN5LnN0eWxlKCkuZ2V0UmVuZGVyZWRTdHlsZShlbGUsIHByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHJlYWQgdGhlIGNhbGN1bGF0ZWQgY3NzIHN0eWxlIG9mIHRoZSBlbGVtZW50IG9yIG92ZXJyaWRlIHRoZSBzdHlsZSAodmlhIGEgYnlwYXNzKVxuICAgIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXBkYXRlVHJhbnNpdGlvbnMgPSBmYWxzZTtcbiAgICAgIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG5cbiAgICAgIGlmIChwbGFpbk9iamVjdChuYW1lKSkge1xuICAgICAgICAvLyB0aGVuIGV4dGVuZCB0aGUgYnlwYXNzXG4gICAgICAgIHZhciBwcm9wcyA9IG5hbWU7XG4gICAgICAgIHN0eWxlLmFwcGx5QnlwYXNzKHRoaXMsIHByb3BzLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gdGhlbiBnZXQgdGhlIHByb3BlcnR5IGZyb20gdGhlIHN0eWxlXG4gICAgICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGVsZSwgbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGNvbGxlY3Rpb24gPT4gY2FuJ3QgZ2V0IGFueSB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGVuIHNldCB0aGUgYnlwYXNzIHdpdGggdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICAgICAgc3R5bGUuYXBwbHlCeXBhc3ModGhpcywgbmFtZSwgdmFsdWUsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgICAgICB0aGlzLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7IC8vIGxldCB0aGUgcmVuZGVyZXIga25vdyB3ZSd2ZSB1cGRhdGVkIHN0eWxlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBfZWxlID0gdGhpc1swXTtcblxuICAgICAgICBpZiAoX2VsZSkge1xuICAgICAgICAgIHJldHVybiBzdHlsZS5nZXRSYXdTdHlsZShfZWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlbXB0eSBjb2xsZWN0aW9uID0+IGNhbid0IGdldCBhbnkgdmFsdWVcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICByZW1vdmVTdHlsZTogZnVuY3Rpb24gcmVtb3ZlU3R5bGUobmFtZXMpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgICB2YXIgc3R5bGUgPSBjeS5zdHlsZSgpO1xuICAgICAgdmFyIGVsZXMgPSB0aGlzO1xuXG4gICAgICBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgICBzdHlsZS5yZW1vdmVBbGxCeXBhc3NlcyhlbGUsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXMgPSBuYW1lcy5zcGxpdCgvXFxzKy8pO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlbGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBfZWxlMiA9IGVsZXNbX2ldO1xuICAgICAgICAgIHN0eWxlLnJlbW92ZUJ5cGFzc2VzKF9lbGUyLCBuYW1lcywgdXBkYXRlVHJhbnNpdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBzaG93OiBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdGhpcy5jc3MoJ2Rpc3BsYXknLCAnZWxlbWVudCcpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgdGhpcy5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBlZmZlY3RpdmVPcGFjaXR5OiBmdW5jdGlvbiBlZmZlY3RpdmVPcGFjaXR5KCkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuXG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIHBhcmVudE9wYWNpdHkgPSBlbGUucHN0eWxlKCdvcGFjaXR5JykudmFsdWU7XG5cbiAgICAgICAgaWYgKCFoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudE9wYWNpdHk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50cyA9ICFfcC5kYXRhLnBhcmVudCA/IG51bGwgOiBlbGUucGFyZW50cygpO1xuXG4gICAgICAgIGlmIChwYXJlbnRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgIHZhciBvcGFjaXR5ID0gcGFyZW50LnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICAgICAgICAgICAgcGFyZW50T3BhY2l0eSA9IG9wYWNpdHkgKiBwYXJlbnRPcGFjaXR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJlbnRPcGFjaXR5O1xuICAgICAgfVxuICAgIH0sXG4gICAgdHJhbnNwYXJlbnQ6IGZ1bmN0aW9uIHRyYW5zcGFyZW50KCkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGVsZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICBpZiAoIWhhc0NvbXBvdW5kTm9kZXMpIHtcbiAgICAgICAgICByZXR1cm4gZWxlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbGUuZWZmZWN0aXZlT3BhY2l0eSgpID09PSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBiYWNrZ3JvdW5kaW5nOiBmdW5jdGlvbiBiYWNrZ3JvdW5kaW5nKCkge1xuICAgICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLmJhY2tncm91bmRpbmcgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrQ29tcG91bmQoZWxlLCBwYXJlbnRPaykge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgcGFyZW50cyA9IF9wLmRhdGEucGFyZW50ID8gZWxlLnBhcmVudHMoKSA6IG51bGw7XG5cbiAgICBpZiAocGFyZW50cykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuXG4gICAgICAgIGlmICghcGFyZW50T2socGFyZW50KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oc3BlY3MpIHtcbiAgICB2YXIgb2sgPSBzcGVjcy5vaztcbiAgICB2YXIgZWRnZU9rVmlhTm9kZSA9IHNwZWNzLmVkZ2VPa1ZpYU5vZGUgfHwgc3BlY3Mub2s7XG4gICAgdmFyIHBhcmVudE9rID0gc3BlY3MucGFyZW50T2sgfHwgc3BlY3Mub2s7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG5cbiAgICAgICAgaWYgKCFvayhlbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgIHJldHVybiAhaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKGVsZSwgcGFyZW50T2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzcmMgPSBfcC5zb3VyY2U7XG4gICAgICAgICAgdmFyIHRndCA9IF9wLnRhcmdldDtcbiAgICAgICAgICByZXR1cm4gZWRnZU9rVmlhTm9kZShzcmMpICYmICghaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKHNyYywgZWRnZU9rVmlhTm9kZSkpICYmIChzcmMgPT09IHRndCB8fCBlZGdlT2tWaWFOb2RlKHRndCkgJiYgKCFoYXNDb21wb3VuZE5vZGVzIHx8IGNoZWNrQ29tcG91bmQodGd0LCBlZGdlT2tWaWFOb2RlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBlbGVUYWtlc1VwU3BhY2UgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZVRha2VzVXBTcGFjZScsIGZ1bmN0aW9uIChlbGUpIHtcbiAgICByZXR1cm4gZWxlLnBzdHlsZSgnZGlzcGxheScpLnZhbHVlID09PSAnZWxlbWVudCcgJiYgZWxlLndpZHRoKCkgIT09IDAgJiYgKGVsZS5pc05vZGUoKSA/IGVsZS5oZWlnaHQoKSAhPT0gMCA6IHRydWUpO1xuICB9KTtcbiAgZWxlc2ZuJDQudGFrZXNVcFNwYWNlID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCd0YWtlc1VwU3BhY2UnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gICAgb2s6IGVsZVRha2VzVXBTcGFjZVxuICB9KSk7XG4gIHZhciBlbGVJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbignZWxlSW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5wc3R5bGUoJ2V2ZW50cycpLnZhbHVlID09PSAneWVzJyAmJiBlbGUucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGVUYWtlc1VwU3BhY2UoZWxlKTtcbiAgfSk7XG4gIHZhciBwYXJlbnRJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbigncGFyZW50SW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5wc3R5bGUoJ3Zpc2liaWxpdHknKS52YWx1ZSA9PT0gJ3Zpc2libGUnICYmIGVsZVRha2VzVXBTcGFjZShwYXJlbnQpO1xuICB9KTtcbiAgZWxlc2ZuJDQuaW50ZXJhY3RpdmUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ2ludGVyYWN0aXZlJywgZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oe1xuICAgIG9rOiBlbGVJbnRlcmFjdGl2ZSxcbiAgICBwYXJlbnRPazogcGFyZW50SW50ZXJhY3RpdmUsXG4gICAgZWRnZU9rVmlhTm9kZTogZWxlVGFrZXNVcFNwYWNlXG4gIH0pKTtcblxuICBlbGVzZm4kNC5ub25pbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiAhZWxlLmludGVyYWN0aXZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBlbGVWaXNpYmxlID0gY2FjaGVTdHlsZUZ1bmN0aW9uKCdlbGVWaXNpYmxlJywgZnVuY3Rpb24gKGVsZSkge1xuICAgIHJldHVybiBlbGUucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGUucHN0eWxlKCdvcGFjaXR5JykucGZWYWx1ZSAhPT0gMCAmJiBlbGVUYWtlc1VwU3BhY2UoZWxlKTtcbiAgfSk7XG4gIHZhciBlZGdlVmlzaWJsZVZpYU5vZGUgPSBlbGVUYWtlc1VwU3BhY2U7XG4gIGVsZXNmbiQ0LnZpc2libGUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ3Zpc2libGUnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gICAgb2s6IGVsZVZpc2libGUsXG4gICAgZWRnZU9rVmlhTm9kZTogZWRnZVZpc2libGVWaWFOb2RlXG4gIH0pKTtcblxuICBlbGVzZm4kNC5oaWRkZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gIWVsZS52aXNpYmxlKCk7XG4gICAgfVxuICB9O1xuXG4gIGVsZXNmbiQ0LmlzQnVuZGxlZEJlemllciA9IGNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbignaXNCdW5kbGVkQmV6aWVyJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzLnJlbW92ZWQoKSAmJiB0aGlzLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZSA9PT0gJ2JlemllcicgJiYgdGhpcy50YWtlc1VwU3BhY2UoKTtcbiAgfSk7XG4gIGVsZXNmbiQ0LmJ5cGFzcyA9IGVsZXNmbiQ0LmNzcyA9IGVsZXNmbiQ0LnN0eWxlO1xuICBlbGVzZm4kNC5yZW5kZXJlZENzcyA9IGVsZXNmbiQ0LnJlbmRlcmVkU3R5bGU7XG4gIGVsZXNmbiQ0LnJlbW92ZUJ5cGFzcyA9IGVsZXNmbiQ0LnJlbW92ZUNzcyA9IGVsZXNmbiQ0LnJlbW92ZVN0eWxlO1xuICBlbGVzZm4kNC5wc3R5bGUgPSBlbGVzZm4kNC5wYXJzZWRTdHlsZTtcblxuICB2YXIgZWxlc2ZuJDMgPSB7fTtcblxuICBmdW5jdGlvbiBkZWZpbmVTd2l0Y2hGdW5jdGlvbihwYXJhbXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB2YXIgY2hhbmdlZEVsZXMgPSBbXTsgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCggZGF0YSwgaGFuZGxlciApXG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YXIgZGF0YSA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBoYW5kbGVyID0gYXJnc1sxXTtcbiAgICAgICAgdGhpcy5vbihwYXJhbXMuZXZlbnQsIGRhdGEsIGhhbmRsZXIpO1xuICAgICAgfSAvLyBlLmcuIGN5Lm5vZGVzKCkuc2VsZWN0KCBoYW5kbGVyIClcbiAgICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGZuJDYoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIF9oYW5kbGVyID0gYXJnc1swXTtcbiAgICAgICAgdGhpcy5vbihwYXJhbXMuZXZlbnQsIF9oYW5kbGVyKTtcbiAgICAgIH0gLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCgpXG4gICAgICAvLyBlLmcuIChwcml2YXRlKSBjeS5ub2RlcygpLnNlbGVjdChbJ3RhcHNlbGVjdCddKVxuICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDAgfHwgYXJncy5sZW5ndGggPT09IDEgJiYgYXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGFkZGxFdmVudHMgPSBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICAgIHZhciBhYmxlID0gIXBhcmFtcy5hYmxlRmllbGQgfHwgZWxlLl9wcml2YXRlW3BhcmFtcy5hYmxlRmllbGRdO1xuICAgICAgICAgIHZhciBjaGFuZ2VkID0gZWxlLl9wcml2YXRlW3BhcmFtcy5maWVsZF0gIT0gcGFyYW1zLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5vdmVycmlkZUFibGUpIHtcbiAgICAgICAgICAgIHZhciBvdmVycmlkZUFibGUgPSBwYXJhbXMub3ZlcnJpZGVBYmxlKGVsZSk7XG5cbiAgICAgICAgICAgIGlmIChvdmVycmlkZUFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBhYmxlID0gb3ZlcnJpZGVBYmxlO1xuXG4gICAgICAgICAgICAgIGlmICghb3ZlcnJpZGVBYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgIH0gLy8gdG8gc2F2ZSBjeWNsZXMgYXNzdW1lIG5vdCBhYmxlIGZvciBhbGwgb24gb3ZlcnJpZGVcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhYmxlKSB7XG4gICAgICAgICAgICBlbGUuX3ByaXZhdGVbcGFyYW1zLmZpZWxkXSA9IHBhcmFtcy52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgY2hhbmdlZEVsZXMucHVzaChlbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFuZ2VkQ29sbCA9IHRoaXMuc3Bhd24oY2hhbmdlZEVsZXMpO1xuICAgICAgICBjaGFuZ2VkQ29sbC51cGRhdGVTdHlsZSgpOyAvLyBjaGFuZ2Ugb2Ygc3RhdGUgPT4gcG9zc2libGUgY2hhbmdlIG9mIHN0eWxlXG5cbiAgICAgICAgY2hhbmdlZENvbGwuZW1pdChwYXJhbXMuZXZlbnQpO1xuXG4gICAgICAgIGlmIChhZGRsRXZlbnRzKSB7XG4gICAgICAgICAgY2hhbmdlZENvbGwuZW1pdChhZGRsRXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lU3dpdGNoU2V0KHBhcmFtcykge1xuICAgIGVsZXNmbiQzW3BhcmFtcy5maWVsZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1swXTtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICBpZiAocGFyYW1zLm92ZXJyaWRlRmllbGQpIHtcbiAgICAgICAgICB2YXIgdmFsID0gcGFyYW1zLm92ZXJyaWRlRmllbGQoZWxlKTtcblxuICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxlLl9wcml2YXRlW3BhcmFtcy5maWVsZF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZXNmbiQzW3BhcmFtcy5vbl0gPSBkZWZpbmVTd2l0Y2hGdW5jdGlvbih7XG4gICAgICBldmVudDogcGFyYW1zLm9uLFxuICAgICAgZmllbGQ6IHBhcmFtcy5maWVsZCxcbiAgICAgIGFibGVGaWVsZDogcGFyYW1zLmFibGVGaWVsZCxcbiAgICAgIG92ZXJyaWRlQWJsZTogcGFyYW1zLm92ZXJyaWRlQWJsZSxcbiAgICAgIHZhbHVlOiB0cnVlXG4gICAgfSk7XG4gICAgZWxlc2ZuJDNbcGFyYW1zLm9mZl0gPSBkZWZpbmVTd2l0Y2hGdW5jdGlvbih7XG4gICAgICBldmVudDogcGFyYW1zLm9mZixcbiAgICAgIGZpZWxkOiBwYXJhbXMuZmllbGQsXG4gICAgICBhYmxlRmllbGQ6IHBhcmFtcy5hYmxlRmllbGQsXG4gICAgICBvdmVycmlkZUFibGU6IHBhcmFtcy5vdmVycmlkZUFibGUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIGRlZmluZVN3aXRjaFNldCh7XG4gICAgZmllbGQ6ICdsb2NrZWQnLFxuICAgIG92ZXJyaWRlRmllbGQ6IGZ1bmN0aW9uIG92ZXJyaWRlRmllbGQoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmN5KCkuYXV0b2xvY2soKSA/IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBvbjogJ2xvY2snLFxuICAgIG9mZjogJ3VubG9jaydcbiAgfSk7XG4gIGRlZmluZVN3aXRjaFNldCh7XG4gICAgZmllbGQ6ICdncmFiYmFibGUnLFxuICAgIG92ZXJyaWRlRmllbGQ6IGZ1bmN0aW9uIG92ZXJyaWRlRmllbGQoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmN5KCkuYXV0b3VuZ3JhYmlmeSgpIHx8IGVsZS5wYW5uYWJsZSgpID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBvbjogJ2dyYWJpZnknLFxuICAgIG9mZjogJ3VuZ3JhYmlmeSdcbiAgfSk7XG4gIGRlZmluZVN3aXRjaFNldCh7XG4gICAgZmllbGQ6ICdzZWxlY3RlZCcsXG4gICAgYWJsZUZpZWxkOiAnc2VsZWN0YWJsZScsXG4gICAgb3ZlcnJpZGVBYmxlOiBmdW5jdGlvbiBvdmVycmlkZUFibGUoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCkgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIG9uOiAnc2VsZWN0JyxcbiAgICBvZmY6ICd1bnNlbGVjdCdcbiAgfSk7XG4gIGRlZmluZVN3aXRjaFNldCh7XG4gICAgZmllbGQ6ICdzZWxlY3RhYmxlJyxcbiAgICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5jeSgpLmF1dG91bnNlbGVjdGlmeSgpID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBvbjogJ3NlbGVjdGlmeScsXG4gICAgb2ZmOiAndW5zZWxlY3RpZnknXG4gIH0pO1xuICBlbGVzZm4kMy5kZXNlbGVjdCA9IGVsZXNmbiQzLnVuc2VsZWN0O1xuXG4gIGVsZXNmbiQzLmdyYWJiZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLmdyYWJiZWQ7XG4gICAgfVxuICB9O1xuXG4gIGRlZmluZVN3aXRjaFNldCh7XG4gICAgZmllbGQ6ICdhY3RpdmUnLFxuICAgIG9uOiAnYWN0aXZhdGUnLFxuICAgIG9mZjogJ3VuYWN0aXZhdGUnXG4gIH0pO1xuICBkZWZpbmVTd2l0Y2hTZXQoe1xuICAgIGZpZWxkOiAncGFubmFibGUnLFxuICAgIG9uOiAncGFuaWZ5JyxcbiAgICBvZmY6ICd1bnBhbmlmeSdcbiAgfSk7XG5cbiAgZWxlc2ZuJDMuaW5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG5cbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gIWVsZS5fcHJpdmF0ZS5hY3RpdmU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBlbGVzZm4kMiA9IHt9OyAvLyBEQUcgZnVuY3Rpb25zXG4gIC8vLy8vLy8vLy8vLy8vLy9cblxuICB2YXIgZGVmaW5lRGFnRXh0cmVtaXR5ID0gZnVuY3Rpb24gZGVmaW5lRGFnRXh0cmVtaXR5KHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbiBkYWdFeHRyZW1pdHlJbXBsKHNlbGVjdG9yKSB7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgICB2YXIgcmV0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcblxuICAgICAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpc3F1YWxpZmllZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZWRnZXMgPSBlbGUuY29ubmVjdGVkRWRnZXMoKTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcblxuICAgICAgICAgIGlmIChwYXJhbXMubm9JbmNvbWluZ0VkZ2VzICYmIHRndCA9PT0gZWxlICYmIHNyYyAhPT0gZWxlIHx8IHBhcmFtcy5ub091dGdvaW5nRWRnZXMgJiYgc3JjID09PSBlbGUgJiYgdGd0ICE9PSBlbGUpIHtcbiAgICAgICAgICAgIGRpc3F1YWxpZmllZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpc3F1YWxpZmllZCkge1xuICAgICAgICAgIHJldC5wdXNoKGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc3Bhd24ocmV0LCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGRlZmluZURhZ09uZUhvcCA9IGZ1bmN0aW9uIGRlZmluZURhZ09uZUhvcChwYXJhbXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgICB2YXIgb0VsZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuXG4gICAgICAgIGlmICghZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWRnZXMgPSBlbGUuY29ubmVjdGVkRWRnZXMoKTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcblxuICAgICAgICAgIGlmIChwYXJhbXMub3V0Z29pbmcgJiYgc3JjID09PSBlbGUpIHtcbiAgICAgICAgICAgIG9FbGVzLnB1c2goZWRnZSk7XG4gICAgICAgICAgICBvRWxlcy5wdXNoKHRndCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuaW5jb21pbmcgJiYgdGd0ID09PSBlbGUpIHtcbiAgICAgICAgICAgIG9FbGVzLnB1c2goZWRnZSk7XG4gICAgICAgICAgICBvRWxlcy5wdXNoKHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKG9FbGVzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGRlZmluZURhZ0FsbEhvcHMgPSBmdW5jdGlvbiBkZWZpbmVEYWdBbGxIb3BzKHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbGVzID0gdGhpcztcbiAgICAgIHZhciBzRWxlcyA9IFtdO1xuICAgICAgdmFyIHNFbGVzSWRzID0ge307XG5cbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgdmFyIG5leHQgPSBwYXJhbXMub3V0Z29pbmcgPyBlbGVzLm91dGdvZXJzKCkgOiBlbGVzLmluY29tZXJzKCk7XG5cbiAgICAgICAgaWYgKG5leHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gZG9uZSBpZiBub25lIGxlZnRcblxuXG4gICAgICAgIHZhciBuZXdOZXh0ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG4gPSBuZXh0W2ldO1xuICAgICAgICAgIHZhciBuaWQgPSBuLmlkKCk7XG5cbiAgICAgICAgICBpZiAoIXNFbGVzSWRzW25pZF0pIHtcbiAgICAgICAgICAgIHNFbGVzSWRzW25pZF0gPSB0cnVlO1xuICAgICAgICAgICAgc0VsZXMucHVzaChuKTtcbiAgICAgICAgICAgIG5ld05leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbmV3TmV4dCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGRvbmUgaWYgdG91Y2hlZCBhbGwgb3V0Z29lcnMgYWxyZWFkeVxuXG5cbiAgICAgICAgZWxlcyA9IG5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKHNFbGVzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH07XG4gIH07XG5cbiAgZWxlc2ZuJDIuY2xlYXJUcmF2ZXJzYWxDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXNbaV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGUgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBleHRlbmQoZWxlc2ZuJDIsIHtcbiAgICAvLyBnZXQgdGhlIHJvb3Qgbm9kZXMgaW4gdGhlIERBR1xuICAgIHJvb3RzOiBkZWZpbmVEYWdFeHRyZW1pdHkoe1xuICAgICAgbm9JbmNvbWluZ0VkZ2VzOiB0cnVlXG4gICAgfSksXG4gICAgLy8gZ2V0IHRoZSBsZWFmIG5vZGVzIGluIHRoZSBEQUdcbiAgICBsZWF2ZXM6IGRlZmluZURhZ0V4dHJlbWl0eSh7XG4gICAgICBub091dGdvaW5nRWRnZXM6IHRydWVcbiAgICB9KSxcbiAgICAvLyBub3JtYWxseSBjYWxsZWQgY2hpbGRyZW4gaW4gZ3JhcGggdGhlb3J5XG4gICAgLy8gdGhlc2Ugbm9kZXMgPWVkZ2VzPT4gb3V0Z29pbmcgbm9kZXNcbiAgICBvdXRnb2VyczogY2FjaGUoZGVmaW5lRGFnT25lSG9wKHtcbiAgICAgIG91dGdvaW5nOiB0cnVlXG4gICAgfSksICdvdXRnb2VycycpLFxuICAgIC8vIGFrYSBEQUcgZGVzY2VuZGFudHNcbiAgICBzdWNjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICAgIG91dGdvaW5nOiB0cnVlXG4gICAgfSksXG4gICAgLy8gbm9ybWFsbHkgY2FsbGVkIHBhcmVudHMgaW4gZ3JhcGggdGhlb3J5XG4gICAgLy8gdGhlc2Ugbm9kZXMgPD1lZGdlcz0gaW5jb21pbmcgbm9kZXNcbiAgICBpbmNvbWVyczogY2FjaGUoZGVmaW5lRGFnT25lSG9wKHtcbiAgICAgIGluY29taW5nOiB0cnVlXG4gICAgfSksICdpbmNvbWVycycpLFxuICAgIC8vIGFrYSBEQUcgYW5jZXN0b3JzXG4gICAgcHJlZGVjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICAgIGluY29taW5nOiB0cnVlXG4gICAgfSlcbiAgfSk7IC8vIE5laWdoYm91cmhvb2QgZnVuY3Rpb25zXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZXh0ZW5kKGVsZXNmbiQyLCB7XG4gICAgbmVpZ2hib3Job29kOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGZvciBhbGwgbm9kZXNcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpOyAvLyBmb3IgZWFjaCBjb25uZWN0ZWQgZWRnZSwgYWRkIHRoZSBlZGdlIGFuZCB0aGUgb3RoZXIgbm9kZVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2pdO1xuICAgICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpO1xuICAgICAgICAgIHZhciBvdGhlck5vZGUgPSBub2RlID09PSBzcmMgPyB0Z3QgOiBzcmM7IC8vIG5lZWQgY2hlY2sgaW4gY2FzZSBvZiBsb29wXG5cbiAgICAgICAgICBpZiAob3RoZXJOb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gob3RoZXJOb2RlWzBdKTsgLy8gYWRkIG5vZGUgMSBob3AgYXdheVxuICAgICAgICAgIH0gLy8gYWRkIGNvbm5lY3RlZCBlZGdlXG5cblxuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZVswXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc3Bhd24oZWxlbWVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSwgJ25laWdoYm9yaG9vZCcpLFxuICAgIGNsb3NlZE5laWdoYm9yaG9vZDogZnVuY3Rpb24gY2xvc2VkTmVpZ2hib3Job29kKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoKS5hZGQodGhpcykuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9LFxuICAgIG9wZW5OZWlnaGJvcmhvb2Q6IGZ1bmN0aW9uIG9wZW5OZWlnaGJvcmhvb2Qoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm5laWdoYm9yaG9vZChzZWxlY3Rvcik7XG4gICAgfVxuICB9KTsgLy8gYWxpYXNlc1xuXG4gIGVsZXNmbiQyLm5laWdoYm91cmhvb2QgPSBlbGVzZm4kMi5uZWlnaGJvcmhvb2Q7XG4gIGVsZXNmbiQyLmNsb3NlZE5laWdoYm91cmhvb2QgPSBlbGVzZm4kMi5jbG9zZWROZWlnaGJvcmhvb2Q7XG4gIGVsZXNmbiQyLm9wZW5OZWlnaGJvdXJob29kID0gZWxlc2ZuJDIub3Blbk5laWdoYm9yaG9vZDsgLy8gRWRnZSBmdW5jdGlvbnNcbiAgLy8vLy8vLy8vLy8vLy8vLy9cblxuICBleHRlbmQoZWxlc2ZuJDIsIHtcbiAgICBzb3VyY2U6IGNhY2hlKGZ1bmN0aW9uIHNvdXJjZUltcGwoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgdmFyIHNyYztcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICBzcmMgPSBlbGUuX3ByaXZhdGUuc291cmNlIHx8IGVsZS5jeSgpLmNvbGxlY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNyYyAmJiBzZWxlY3RvciA/IHNyYy5maWx0ZXIoc2VsZWN0b3IpIDogc3JjO1xuICAgIH0sICdzb3VyY2UnKSxcbiAgICB0YXJnZXQ6IGNhY2hlKGZ1bmN0aW9uIHRhcmdldEltcGwoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgdmFyIHRndDtcblxuICAgICAgaWYgKGVsZSkge1xuICAgICAgICB0Z3QgPSBlbGUuX3ByaXZhdGUudGFyZ2V0IHx8IGVsZS5jeSgpLmNvbGxlY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRndCAmJiBzZWxlY3RvciA/IHRndC5maWx0ZXIoc2VsZWN0b3IpIDogdGd0O1xuICAgIH0sICd0YXJnZXQnKSxcbiAgICBzb3VyY2VzOiBkZWZpbmVTb3VyY2VGdW5jdGlvbih7XG4gICAgICBhdHRyOiAnc291cmNlJ1xuICAgIH0pLFxuICAgIHRhcmdldHM6IGRlZmluZVNvdXJjZUZ1bmN0aW9uKHtcbiAgICAgIGF0dHI6ICd0YXJnZXQnXG4gICAgfSlcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZGVmaW5lU291cmNlRnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNvdXJjZUltcGwoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBzb3VyY2VzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIHNyYyA9IGVsZS5fcHJpdmF0ZVtwYXJhbXMuYXR0cl07XG5cbiAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgIHNvdXJjZXMucHVzaChzcmMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKHNvdXJjZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGV4dGVuZChlbGVzZm4kMiwge1xuICAgIGVkZ2VzV2l0aDogY2FjaGUoZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24oKSwgJ2VkZ2VzV2l0aCcpLFxuICAgIGVkZ2VzVG86IGNhY2hlKGRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uKHtcbiAgICAgIHRoaXNJc1NyYzogdHJ1ZVxuICAgIH0pLCAnZWRnZXNUbycpXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uKHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbiBlZGdlc1dpdGhJbXBsKG90aGVyTm9kZXMpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICAgIHZhciBwID0gcGFyYW1zIHx8IHt9OyAvLyBnZXQgZWxlbWVudHMgaWYgYSBzZWxlY3RvciBpcyBzcGVjaWZpZWRcblxuICAgICAgaWYgKHN0cmluZyhvdGhlck5vZGVzKSkge1xuICAgICAgICBvdGhlck5vZGVzID0gY3kuJChvdGhlck5vZGVzKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaCA9IDA7IGggPCBvdGhlck5vZGVzLmxlbmd0aDsgaCsrKSB7XG4gICAgICAgIHZhciBlZGdlcyA9IG90aGVyTm9kZXNbaF0uX3ByaXZhdGUuZWRnZXM7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgICAgICAgdmFyIGVkZ2VEYXRhID0gZWRnZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICAgIHZhciB0aGlzVG9PdGhlciA9IHRoaXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS5zb3VyY2UpICYmIG90aGVyTm9kZXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS50YXJnZXQpO1xuICAgICAgICAgIHZhciBvdGhlclRvVGhpcyA9IG90aGVyTm9kZXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS5zb3VyY2UpICYmIHRoaXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS50YXJnZXQpO1xuICAgICAgICAgIHZhciBlZGdlQ29ubmVjdHNUaGlzQW5kT3RoZXIgPSB0aGlzVG9PdGhlciB8fCBvdGhlclRvVGhpcztcblxuICAgICAgICAgIGlmICghZWRnZUNvbm5lY3RzVGhpc0FuZE90aGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocC50aGlzSXNTcmMgfHwgcC50aGlzSXNUZ3QpIHtcbiAgICAgICAgICAgIGlmIChwLnRoaXNJc1NyYyAmJiAhdGhpc1RvT3RoZXIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwLnRoaXNJc1RndCAmJiAhb3RoZXJUb1RoaXMpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudHMucHVzaChlZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zcGF3bihlbGVtZW50cywgdHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIGV4dGVuZChlbGVzZm4kMiwge1xuICAgIGNvbm5lY3RlZEVkZ2VzOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIHZhciByZXRFbGVzID0gW107XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IGVsZXNbaV07XG5cbiAgICAgICAgaWYgKCFub2RlLmlzTm9kZSgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2pdO1xuICAgICAgICAgIHJldEVsZXMucHVzaChlZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zcGF3bihyZXRFbGVzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH0sICdjb25uZWN0ZWRFZGdlcycpLFxuICAgIGNvbm5lY3RlZE5vZGVzOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIHZhciByZXRFbGVzID0gW107XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVsZXNbaV07XG5cbiAgICAgICAgaWYgKCFlZGdlLmlzRWRnZSgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXRFbGVzLnB1c2goZWRnZS5zb3VyY2UoKVswXSk7XG4gICAgICAgIHJldEVsZXMucHVzaChlZGdlLnRhcmdldCgpWzBdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuc3Bhd24ocmV0RWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9LCAnY29ubmVjdGVkTm9kZXMnKSxcbiAgICBwYXJhbGxlbEVkZ2VzOiBjYWNoZShkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24oKSwgJ3BhcmFsbGVsRWRnZXMnKSxcbiAgICBjb2RpcmVjdGVkRWRnZXM6IGNhY2hlKGRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbih7XG4gICAgICBjb2RpcmVjdGVkOiB0cnVlXG4gICAgfSksICdjb2RpcmVjdGVkRWRnZXMnKVxuICB9KTtcblxuICBmdW5jdGlvbiBkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgY29kaXJlY3RlZDogZmFsc2VcbiAgICB9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhcmFsbGVsRWRnZXNJbXBsKHNlbGVjdG9yKSB7XG4gICAgICAvLyBtaWNyby1vcHRpbWlzZWQgZm9yIHJlbmRlcmVyXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICAgIHZhciBlZGdlcyA9IHRoaXMuZWRnZXMoKTtcbiAgICAgIHZhciBwID0gcGFyYW1zOyAvLyBsb29rIGF0IGFsbCB0aGUgZWRnZXMgaW4gdGhlIGNvbGxlY3Rpb25cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWRnZTEgPSBlZGdlc1tpXTtcbiAgICAgICAgdmFyIGVkZ2UxX3AgPSBlZGdlMS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIHNyYzEgPSBlZGdlMV9wLnNvdXJjZTtcbiAgICAgICAgdmFyIHNyY2lkMSA9IHNyYzEuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgICAgdmFyIHRndGlkMSA9IGVkZ2UxX3AuZGF0YS50YXJnZXQ7XG4gICAgICAgIHZhciBzcmNFZGdlczEgPSBzcmMxLl9wcml2YXRlLmVkZ2VzOyAvLyBsb29rIGF0IGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgc3JjIG5vZGUgb2YgdGhpcyBlZGdlXG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcmNFZGdlczEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgZWRnZTIgPSBzcmNFZGdlczFbal07XG4gICAgICAgICAgdmFyIGVkZ2UyZGF0YSA9IGVkZ2UyLl9wcml2YXRlLmRhdGE7XG4gICAgICAgICAgdmFyIHRndGlkMiA9IGVkZ2UyZGF0YS50YXJnZXQ7XG4gICAgICAgICAgdmFyIHNyY2lkMiA9IGVkZ2UyZGF0YS5zb3VyY2U7XG4gICAgICAgICAgdmFyIGNvZGlyZWN0ZWQgPSB0Z3RpZDIgPT09IHRndGlkMSAmJiBzcmNpZDIgPT09IHNyY2lkMTtcbiAgICAgICAgICB2YXIgb3BwZGlyZWN0ZWQgPSBzcmNpZDEgPT09IHRndGlkMiAmJiB0Z3RpZDEgPT09IHNyY2lkMjtcblxuICAgICAgICAgIGlmIChwLmNvZGlyZWN0ZWQgJiYgY29kaXJlY3RlZCB8fCAhcC5jb2RpcmVjdGVkICYmIChjb2RpcmVjdGVkIHx8IG9wcGRpcmVjdGVkKSkge1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChlZGdlMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH07XG4gIH0gLy8gTWlzYyBmdW5jdGlvbnNcbiAgLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4gIGV4dGVuZChlbGVzZm4kMiwge1xuICAgIGNvbXBvbmVudHM6IGZ1bmN0aW9uIGNvbXBvbmVudHMocm9vdCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIGN5ID0gc2VsZi5jeSgpO1xuICAgICAgdmFyIHZpc2l0ZWQgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICB2YXIgdW52aXNpdGVkID0gcm9vdCA9PSBudWxsID8gc2VsZi5ub2RlcygpIDogcm9vdC5ub2RlcygpO1xuICAgICAgdmFyIGNvbXBvbmVudHMgPSBbXTtcblxuICAgICAgaWYgKHJvb3QgIT0gbnVsbCAmJiB1bnZpc2l0ZWQuZW1wdHkoKSkge1xuICAgICAgICAvLyByb290IG1heSBjb250YWluIG9ubHkgZWRnZXNcbiAgICAgICAgdW52aXNpdGVkID0gcm9vdC5zb3VyY2VzKCk7IC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIG5vZGUgdG8gdXNlICh1bmRpcmVjdGVkKSwgc28ganVzdCB1c2UgdGhlIHNvdXJjZSBzaWRlc1xuICAgICAgfVxuXG4gICAgICB2YXIgdmlzaXRJbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHZpc2l0SW5Db21wb25lbnQobm9kZSwgY29tcG9uZW50KSB7XG4gICAgICAgIHZpc2l0ZWQubWVyZ2Uobm9kZSk7XG4gICAgICAgIHVudmlzaXRlZC51bm1lcmdlKG5vZGUpO1xuICAgICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodW52aXNpdGVkLmVtcHR5KCkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuc3Bhd24oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgIC8vIGVhY2ggaXRlcmF0aW9uIHlpZWxkcyBhIGNvbXBvbmVudFxuICAgICAgICB2YXIgY21wdCA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGNtcHQpO1xuICAgICAgICB2YXIgcm9vdCA9IHVudmlzaXRlZFswXTtcbiAgICAgICAgdmlzaXRJbkNvbXBvbmVudChyb290LCBjbXB0KTtcbiAgICAgICAgc2VsZi5iZnMoe1xuICAgICAgICAgIGRpcmVjdGVkOiBmYWxzZSxcbiAgICAgICAgICByb290czogcm9vdCxcbiAgICAgICAgICB2aXNpdDogZnVuY3Rpb24gdmlzaXQodikge1xuICAgICAgICAgICAgcmV0dXJuIHZpc2l0SW5Db21wb25lbnQodiwgY21wdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY21wdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIGNvbm5lY3RlZEVkZ2VzKCkgdXN1YWxseSBjYWNoZWRcbiAgICAgICAgICAgIGlmIChzZWxmLmhhcyhlKSAmJiBjbXB0LmhhcyhlLnNvdXJjZSgpKSAmJiBjbXB0LmhhcyhlLnRhcmdldCgpKSkge1xuICAgICAgICAgICAgICAvLyBoYXMoKSBpcyBjaGVhcFxuICAgICAgICAgICAgICBjbXB0Lm1lcmdlKGUpOyAvLyBmb3JFYWNoKCkgb25seSBjb25zaWRlcnMgbm9kZXMgLS0gc2V0cyBOIGF0IGNhbGwgdGltZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGRvIHtcbiAgICAgICAgX2xvb3AoKTtcbiAgICAgIH0gd2hpbGUgKHVudmlzaXRlZC5sZW5ndGggPiAwKTtcblxuICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfSxcbiAgICBjb21wb25lbnQ6IGZ1bmN0aW9uIGNvbXBvbmVudCgpIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgICAgcmV0dXJuIGVsZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZWxlKVswXTtcbiAgICB9XG4gIH0pO1xuICBlbGVzZm4kMi5jb21wb25lbnRzT2YgPSBlbGVzZm4kMi5jb21wb25lbnRzO1xuXG4gIHZhciBDb2xsZWN0aW9uID0gZnVuY3Rpb24gQ29sbGVjdGlvbihjeSwgZWxlbWVudHMpIHtcbiAgICB2YXIgdW5pcXVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICB2YXIgcmVtb3ZlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG5cbiAgICBpZiAoY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IoJ0EgY29sbGVjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFwID0gbmV3IE1hcCQyKCk7XG4gICAgdmFyIGNyZWF0ZWRFbGVtZW50cyA9IGZhbHNlO1xuXG4gICAgaWYgKCFlbGVtZW50cykge1xuICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgcGxhaW5PYmplY3QoZWxlbWVudHNbMF0pICYmICFlbGVtZW50KGVsZW1lbnRzWzBdKSkge1xuICAgICAgY3JlYXRlZEVsZW1lbnRzID0gdHJ1ZTsgLy8gbWFrZSBlbGVtZW50cyBmcm9tIGpzb24gYW5kIHJlc3RvcmUgYWxsIGF0IG9uY2UgbGF0ZXJcblxuICAgICAgdmFyIGVsZXMgPSBbXTtcbiAgICAgIHZhciBlbGVzSWRzID0gbmV3IFNldCQxKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBqc29uID0gZWxlbWVudHNbaV07XG5cbiAgICAgICAgaWYgKGpzb24uZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAganNvbi5kYXRhID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2RhdGEgPSBqc29uLmRhdGE7IC8vIG1ha2Ugc3VyZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRzIGhhdmUgdmFsaWQgaWRzXG5cbiAgICAgICAgaWYgKF9kYXRhLmlkID09IG51bGwpIHtcbiAgICAgICAgICBfZGF0YS5pZCA9IHV1aWQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjeS5oYXNFbGVtZW50V2l0aElkKF9kYXRhLmlkKSB8fCBlbGVzSWRzLmhhcyhfZGF0YS5pZCkpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gY2FuJ3QgY3JlYXRlIGVsZW1lbnQgaWYgcHJpb3IgaWQgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbGUgPSBuZXcgRWxlbWVudChjeSwganNvbiwgZmFsc2UpO1xuICAgICAgICBlbGVzLnB1c2goZWxlKTtcbiAgICAgICAgZWxlc0lkcy5hZGQoX2RhdGEuaWQpO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50cyA9IGVsZXM7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbCA9IGVsZW1lbnRzLmxlbmd0aDsgX2kgPCBfbDsgX2krKykge1xuICAgICAgdmFyIGVsZW1lbnQkMSA9IGVsZW1lbnRzW19pXVswXTsgLy8gWzBdIGluIGNhc2UgZWxlbWVudHMgaXMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMsIHJhdGhlciB0aGFuIGFycmF5IG9mIGVsZW1lbnRzXG5cbiAgICAgIGlmIChlbGVtZW50JDEgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkID0gZWxlbWVudCQxLl9wcml2YXRlLmRhdGEuaWQ7XG5cbiAgICAgIGlmICghdW5pcXVlIHx8ICFtYXAuaGFzKGlkKSkge1xuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgbWFwLnNldChpZCwge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMubGVuZ3RoLFxuICAgICAgICAgICAgZWxlOiBlbGVtZW50JDFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdGhpcy5sZW5ndGhdID0gZWxlbWVudCQxO1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3ByaXZhdGUgPSB7XG4gICAgICBlbGVzOiB0aGlzLFxuICAgICAgY3k6IGN5LFxuXG4gICAgICBnZXQgbWFwKCkge1xuICAgICAgICBpZiAodGhpcy5sYXp5TWFwID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnJlYnVpbGRNYXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxhenlNYXA7XG4gICAgICB9LFxuXG4gICAgICBzZXQgbWFwKG0pIHtcbiAgICAgICAgdGhpcy5sYXp5TWFwID0gbTtcbiAgICAgIH0sXG5cbiAgICAgIHJlYnVpbGRNYXA6IGZ1bmN0aW9uIHJlYnVpbGRNYXAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5sYXp5TWFwID0gbmV3IE1hcCQyKCk7XG4gICAgICAgIHZhciBlbGVzID0gdGhpcy5lbGVzO1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIHZhciBfZWxlID0gZWxlc1tfaTJdO1xuICAgICAgICAgIG0uc2V0KF9lbGUuaWQoKSwge1xuICAgICAgICAgICAgaW5kZXg6IF9pMixcbiAgICAgICAgICAgIGVsZTogX2VsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh1bmlxdWUpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUubWFwID0gbWFwO1xuICAgIH0gLy8gcmVzdG9yZSB0aGUgZWxlbWVudHMgaWYgd2UgY3JlYXRlZCB0aGVtIGZyb20ganNvblxuXG5cbiAgICBpZiAoY3JlYXRlZEVsZW1lbnRzICYmICFyZW1vdmVkKSB7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9XG4gIH07IC8vIEZ1bmN0aW9uc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIGtlZXAgdGhlIHByb3RvdHlwZXMgaW4gc3luYyAoYW4gZWxlbWVudCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGEgY29sbGVjdGlvbilcbiAgLy8gYW5kIHVzZSBlbGVmbiBhbmQgZWxlc2ZuIGFzIHNob3J0aGFuZHMgdG8gdGhlIHByb3RvdHlwZXNcblxuXG4gIHZhciBlbGVzZm4kMSA9IEVsZW1lbnQucHJvdG90eXBlID0gQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7XG5cbiAgZWxlc2ZuJDEuaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdjb2xsZWN0aW9uJztcbiAgfTtcblxuICBlbGVzZm4kMS5zcGF3biA9IGZ1bmN0aW9uIChlbGVzLCB1bmlxdWUpIHtcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcy5jeSgpLCBlbGVzLCB1bmlxdWUpO1xuICB9O1xuXG4gIGVsZXNmbiQxLnNwYXduU2VsZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zcGF3bih0aGlzKTtcbiAgfTtcblxuICBlbGVzZm4kMS5jeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgfTtcblxuICBlbGVzZm4kMS5yZW5kZXJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeS5yZW5kZXJlcigpO1xuICB9O1xuXG4gIGVsZXNmbiQxLmVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXNbMF07XG4gIH07XG5cbiAgZWxlc2ZuJDEuY29sbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29sbGVjdGlvbih0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFuIGVsZW1lbnRcbiAgICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzLl9wcml2YXRlLmN5LCBbdGhpc10pO1xuICAgIH1cbiAgfTtcblxuICBlbGVzZm4kMS51bmlxdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuX3ByaXZhdGUuY3ksIHRoaXMsIHRydWUpO1xuICB9O1xuXG4gIGVsZXNmbiQxLmhhc0VsZW1lbnRXaXRoSWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICBpZCA9ICcnICsgaWQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG5cbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKGlkKTtcbiAgfTtcblxuICBlbGVzZm4kMS5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG5cbiAgICB2YXIgZW50cnkgPSB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpO1xuXG4gICAgcmV0dXJuIGVudHJ5ID8gZW50cnkuZWxlIDogbmV3IENvbGxlY3Rpb24oY3kpOyAvLyBnZXQgZWxlIG9yIGVtcHR5IGNvbGxlY3Rpb25cbiAgfTtcblxuICBlbGVzZm4kMS4kaWQgPSBlbGVzZm4kMS5nZXRFbGVtZW50QnlJZDtcblxuICBlbGVzZm4kMS5wb29sSW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICB2YXIgZWxlcyA9IGN5Ll9wcml2YXRlLmVsZW1lbnRzO1xuICAgIHZhciBpZCA9IHRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtcbiAgICByZXR1cm4gZWxlcy5fcHJpdmF0ZS5tYXAuZ2V0KGlkKS5pbmRleDtcbiAgfTtcblxuICBlbGVzZm4kMS5pbmRleE9mID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBpZCA9IGVsZVswXS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpLmluZGV4O1xuICB9O1xuXG4gIGVsZXNmbiQxLmluZGV4T2ZJZCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpLmluZGV4O1xuICB9O1xuXG4gIGVsZXNmbiQxLmpzb24gPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIGVsZSA9IHRoaXMuZWxlbWVudCgpO1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAgIGlmIChlbGUgPT0gbnVsbCAmJiBvYmopIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gY2FuJ3Qgc2V0IHRvIG5vIGVsZXNcblxuXG4gICAgaWYgKGVsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gLy8gY2FuJ3QgZ2V0IGZyb20gbm8gZWxlc1xuXG5cbiAgICB2YXIgcCA9IGVsZS5fcHJpdmF0ZTtcblxuICAgIGlmIChwbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAvLyBzZXRcbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgICAgaWYgKG9iai5kYXRhKSB7XG4gICAgICAgIGVsZS5kYXRhKG9iai5kYXRhKTtcbiAgICAgICAgdmFyIF9kYXRhMiA9IHAuZGF0YTtcblxuICAgICAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICAgICAgLy8gc291cmNlIGFuZCB0YXJnZXQgYXJlIGltbXV0YWJsZSB2aWEgZGF0YSgpXG4gICAgICAgICAgdmFyIG1vdmUgPSBmYWxzZTtcbiAgICAgICAgICB2YXIgc3BlYyA9IHt9O1xuICAgICAgICAgIHZhciBzcmMgPSBvYmouZGF0YS5zb3VyY2U7XG4gICAgICAgICAgdmFyIHRndCA9IG9iai5kYXRhLnRhcmdldDtcblxuICAgICAgICAgIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMgIT0gX2RhdGEyLnNvdXJjZSkge1xuICAgICAgICAgICAgc3BlYy5zb3VyY2UgPSAnJyArIHNyYzsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICAgICAgICAgICAgbW92ZSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRndCAhPSBudWxsICYmIHRndCAhPSBfZGF0YTIudGFyZ2V0KSB7XG4gICAgICAgICAgICBzcGVjLnRhcmdldCA9ICcnICsgdGd0OyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuXG4gICAgICAgICAgICBtb3ZlID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobW92ZSkge1xuICAgICAgICAgICAgZWxlID0gZWxlLm1vdmUoc3BlYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHBhcmVudCBpcyBpbW11dGFibGUgdmlhIGRhdGEoKVxuICAgICAgICAgIHZhciBuZXdQYXJlbnRWYWxTcGVjZCA9ICgncGFyZW50JyBpbiBvYmouZGF0YSk7XG4gICAgICAgICAgdmFyIHBhcmVudCA9IG9iai5kYXRhLnBhcmVudDtcblxuICAgICAgICAgIGlmIChuZXdQYXJlbnRWYWxTcGVjZCAmJiAocGFyZW50ICE9IG51bGwgfHwgX2RhdGEyLnBhcmVudCAhPSBudWxsKSAmJiBwYXJlbnQgIT0gX2RhdGEyLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIGNhbid0IHNldCB1bmRlZmluZWQgaW1wZXJhdGl2ZWx5LCBzbyB1c2UgbnVsbFxuICAgICAgICAgICAgICBwYXJlbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFyZW50ID0gJycgKyBwYXJlbnQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZSA9IGVsZS5tb3ZlKHtcbiAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob2JqLnBvc2l0aW9uKSB7XG4gICAgICAgIGVsZS5wb3NpdGlvbihvYmoucG9zaXRpb24pO1xuICAgICAgfSAvLyBpZ25vcmUgZ3JvdXAgLS0gaW1tdXRhYmxlXG5cblxuICAgICAgdmFyIGNoZWNrU3dpdGNoID0gZnVuY3Rpb24gY2hlY2tTd2l0Y2goaywgdHJ1ZUZuTmFtZSwgZmFsc2VGbk5hbWUpIHtcbiAgICAgICAgdmFyIG9ial9rID0gb2JqW2tdO1xuXG4gICAgICAgIGlmIChvYmpfayAhPSBudWxsICYmIG9ial9rICE9PSBwW2tdKSB7XG4gICAgICAgICAgaWYgKG9ial9rKSB7XG4gICAgICAgICAgICBlbGVbdHJ1ZUZuTmFtZV0oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlW2ZhbHNlRm5OYW1lXSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY2hlY2tTd2l0Y2goJ3JlbW92ZWQnLCAncmVtb3ZlJywgJ3Jlc3RvcmUnKTtcbiAgICAgIGNoZWNrU3dpdGNoKCdzZWxlY3RlZCcsICdzZWxlY3QnLCAndW5zZWxlY3QnKTtcbiAgICAgIGNoZWNrU3dpdGNoKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGlmeScsICd1bnNlbGVjdGlmeScpO1xuICAgICAgY2hlY2tTd2l0Y2goJ2xvY2tlZCcsICdsb2NrJywgJ3VubG9jaycpO1xuICAgICAgY2hlY2tTd2l0Y2goJ2dyYWJiYWJsZScsICdncmFiaWZ5JywgJ3VuZ3JhYmlmeScpO1xuICAgICAgY2hlY2tTd2l0Y2goJ3Bhbm5hYmxlJywgJ3BhbmlmeScsICd1bnBhbmlmeScpO1xuXG4gICAgICBpZiAob2JqLmNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICBlbGUuY2xhc3NlcyhvYmouY2xhc3Nlcyk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBnZXRcbiAgICAgIHZhciBqc29uID0ge1xuICAgICAgICBkYXRhOiBjb3B5KHAuZGF0YSksXG4gICAgICAgIHBvc2l0aW9uOiBjb3B5KHAucG9zaXRpb24pLFxuICAgICAgICBncm91cDogcC5ncm91cCxcbiAgICAgICAgcmVtb3ZlZDogcC5yZW1vdmVkLFxuICAgICAgICBzZWxlY3RlZDogcC5zZWxlY3RlZCxcbiAgICAgICAgc2VsZWN0YWJsZTogcC5zZWxlY3RhYmxlLFxuICAgICAgICBsb2NrZWQ6IHAubG9ja2VkLFxuICAgICAgICBncmFiYmFibGU6IHAuZ3JhYmJhYmxlLFxuICAgICAgICBwYW5uYWJsZTogcC5wYW5uYWJsZSxcbiAgICAgICAgY2xhc3NlczogbnVsbFxuICAgICAgfTtcbiAgICAgIGpzb24uY2xhc3NlcyA9ICcnO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgcC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgICByZXR1cm4ganNvbi5jbGFzc2VzICs9IGkrKyA9PT0gMCA/IGNscyA6ICcgJyArIGNscztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICB9O1xuXG4gIGVsZXNmbiQxLmpzb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBqc29ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBqc29uID0gZWxlLmpzb24oKTtcbiAgICAgIGpzb25zLnB1c2goanNvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25zO1xuICB9O1xuXG4gIGVsZXNmbiQxLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgZWxlc0FyciA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBqc29uID0gZWxlLmpzb24oKTtcbiAgICAgIHZhciBjbG9uZSA9IG5ldyBFbGVtZW50KGN5LCBqc29uLCBmYWxzZSk7IC8vIE5CIG5vIHJlc3RvcmVcblxuICAgICAgZWxlc0Fyci5wdXNoKGNsb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oY3ksIGVsZXNBcnIpO1xuICB9O1xuXG4gIGVsZXNmbiQxLmNvcHkgPSBlbGVzZm4kMS5jbG9uZTtcblxuICBlbGVzZm4kMS5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBub3RpZnlSZW5kZXJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICB2YXIgYWRkVG9Qb29sID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3kgPSBzZWxmLmN5KCk7XG4gICAgdmFyIGN5X3AgPSBjeS5fcHJpdmF0ZTsgLy8gY3JlYXRlIGFycmF5cyBvZiBub2RlcyBhbmQgZWRnZXMsIHNpbmNlIHdlIG5lZWQgdG9cbiAgICAvLyByZXN0b3JlIHRoZSBub2RlcyBmaXJzdFxuXG4gICAgdmFyIG5vZGVzID0gW107XG4gICAgdmFyIGVkZ2VzID0gW107XG4gICAgdmFyIGVsZW1lbnRzO1xuXG4gICAgZm9yICh2YXIgX2kzID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBfaTMgPCBsOyBfaTMrKykge1xuICAgICAgdmFyIGVsZSA9IHNlbGZbX2kzXTtcblxuICAgICAgaWYgKGFkZFRvUG9vbCAmJiAhZWxlLnJlbW92ZWQoKSkge1xuICAgICAgICAvLyBkb24ndCBuZWVkIHRvIGhhbmRsZSB0aGlzIGVsZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8ga2VlcCBub2RlcyBmaXJzdCBpbiB0aGUgYXJyYXkgYW5kIGVkZ2VzIGFmdGVyXG5cblxuICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAvLyBwdXQgdG8gZnJvbnQgb2YgYXJyYXkgaWYgbm9kZVxuICAgICAgICBub2Rlcy5wdXNoKGVsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwdXQgdG8gZW5kIG9mIGFycmF5IGlmIGVkZ2VcbiAgICAgICAgZWRnZXMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnRzID0gbm9kZXMuY29uY2F0KGVkZ2VzKTtcbiAgICB2YXIgaTtcblxuICAgIHZhciByZW1vdmVGcm9tRWxlbWVudHMgPSBmdW5jdGlvbiByZW1vdmVGcm9tRWxlbWVudHMoKSB7XG4gICAgICBlbGVtZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgfTsgLy8gbm93LCByZXN0b3JlIGVhY2ggZWxlbWVudFxuXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBfZWxlMiA9IGVsZW1lbnRzW2ldO1xuICAgICAgdmFyIF9wcml2YXRlID0gX2VsZTIuX3ByaXZhdGU7XG4gICAgICB2YXIgX2RhdGEzID0gX3ByaXZhdGUuZGF0YTsgLy8gdGhlIHRyYXZlcnNhbCBjYWNoZSBzaG91bGQgc3RhcnQgZnJlc2ggd2hlbiBlbGUgaXMgYWRkZWRcblxuICAgICAgX2VsZTIuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpOyAvLyBzZXQgaWQgYW5kIHZhbGlkYXRlXG5cblxuICAgICAgaWYgKCFhZGRUb1Bvb2wgJiYgIV9wcml2YXRlLnJlbW92ZWQpIDsgZWxzZSBpZiAoX2RhdGEzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX2RhdGEzLmlkID0gdXVpZCgpO1xuICAgICAgfSBlbHNlIGlmIChudW1iZXIkMShfZGF0YTMuaWQpKSB7XG4gICAgICAgIF9kYXRhMy5pZCA9ICcnICsgX2RhdGEzLmlkOyAvLyBub3cgaXQncyBhIHN0cmluZ1xuICAgICAgfSBlbHNlIGlmIChlbXB0eVN0cmluZyhfZGF0YTMuaWQpIHx8ICFzdHJpbmcoX2RhdGEzLmlkKSkge1xuICAgICAgICBlcnJvcignQ2FuIG5vdCBjcmVhdGUgZWxlbWVudCB3aXRoIGludmFsaWQgc3RyaW5nIElEIGAnICsgX2RhdGEzLmlkICsgJ2AnKTsgLy8gY2FuJ3QgY3JlYXRlIGVsZW1lbnQgaWYgaXQgaGFzIGVtcHR5IHN0cmluZyBhcyBpZCBvciBub24tc3RyaW5nIGlkXG5cbiAgICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChjeS5oYXNFbGVtZW50V2l0aElkKF9kYXRhMy5pZCkpIHtcbiAgICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCcgKyBfZGF0YTMuaWQgKyAnYCcpOyAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBvbmUgYWxyZWFkeSBoYXMgdGhhdCBpZFxuXG4gICAgICAgIHJlbW92ZUZyb21FbGVtZW50cygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkID0gX2RhdGEzLmlkOyAvLyBpZCBpcyBmaW5hbGlzZWQsIG5vdyBsZXQncyBrZWVwIGEgcmVmXG5cbiAgICAgIGlmIChfZWxlMi5pc05vZGUoKSkge1xuICAgICAgICAvLyBleHRyYSBjaGVja3MgZm9yIG5vZGVzXG4gICAgICAgIHZhciBwb3MgPSBfcHJpdmF0ZS5wb3NpdGlvbjsgLy8gbWFrZSBzdXJlIHRoZSBub2RlcyBoYXZlIGEgZGVmaW5lZCBwb3NpdGlvblxuXG4gICAgICAgIGlmIChwb3MueCA9PSBudWxsKSB7XG4gICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvcy55ID09IG51bGwpIHtcbiAgICAgICAgICBwb3MueSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF9lbGUyLmlzRWRnZSgpKSB7XG4gICAgICAgIC8vIGV4dHJhIGNoZWNrcyBmb3IgZWRnZXNcbiAgICAgICAgdmFyIGVkZ2UgPSBfZWxlMjtcbiAgICAgICAgdmFyIGZpZWxkcyA9IFsnc291cmNlJywgJ3RhcmdldCddO1xuICAgICAgICB2YXIgZmllbGRzTGVuZ3RoID0gZmllbGRzLmxlbmd0aDtcbiAgICAgICAgdmFyIGJhZFNvdXJjZU9yVGFyZ2V0ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmaWVsZHNMZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tqXTtcbiAgICAgICAgICB2YXIgdmFsID0gX2RhdGEzW2ZpZWxkXTtcblxuICAgICAgICAgIGlmIChudW1iZXIkMSh2YWwpKSB7XG4gICAgICAgICAgICB2YWwgPSBfZGF0YTNbZmllbGRdID0gJycgKyBfZGF0YTNbZmllbGRdOyAvLyBub3cgc3RyaW5nXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIGNhbid0IGNyZWF0ZSBpZiBzb3VyY2Ugb3IgdGFyZ2V0IGlzIG5vdCBkZWZpbmVkIHByb3Blcmx5XG4gICAgICAgICAgICBlcnJvcignQ2FuIG5vdCBjcmVhdGUgZWRnZSBgJyArIGlkICsgJ2Agd2l0aCB1bnNwZWNpZmllZCAnICsgZmllbGQpO1xuICAgICAgICAgICAgYmFkU291cmNlT3JUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWN5Lmhhc0VsZW1lbnRXaXRoSWQodmFsKSkge1xuICAgICAgICAgICAgLy8gY2FuJ3QgY3JlYXRlIGVkZ2UgaWYgb25lIG9mIGl0cyBub2RlcyBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICBlcnJvcignQ2FuIG5vdCBjcmVhdGUgZWRnZSBgJyArIGlkICsgJ2Agd2l0aCBub25leGlzdGFudCAnICsgZmllbGQgKyAnIGAnICsgdmFsICsgJ2AnKTtcbiAgICAgICAgICAgIGJhZFNvdXJjZU9yVGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFkU291cmNlT3JUYXJnZXQpIHtcbiAgICAgICAgICByZW1vdmVGcm9tRWxlbWVudHMoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjYW4ndCBjcmVhdGUgdGhpc1xuXG5cbiAgICAgICAgdmFyIHNyYyA9IGN5LmdldEVsZW1lbnRCeUlkKF9kYXRhMy5zb3VyY2UpO1xuICAgICAgICB2YXIgdGd0ID0gY3kuZ2V0RWxlbWVudEJ5SWQoX2RhdGEzLnRhcmdldCk7IC8vIG9ubHkgb25lIGVkZ2UgaW4gbm9kZSBpZiBsb29wXG5cbiAgICAgICAgaWYgKHNyYy5zYW1lKHRndCkpIHtcbiAgICAgICAgICBzcmMuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcmMuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcblxuICAgICAgICAgIHRndC5fcHJpdmF0ZS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRnZS5fcHJpdmF0ZS5zb3VyY2UgPSBzcmM7XG4gICAgICAgIGVkZ2UuX3ByaXZhdGUudGFyZ2V0ID0gdGd0O1xuICAgICAgfSAvLyBpZiBpcyBlZGdlXG4gICAgICAvLyBjcmVhdGUgbW9jayBpZHMgLyBpbmRleGVzIG1hcHMgZm9yIGVsZW1lbnQgc28gaXQgY2FuIGJlIHVzZWQgbGlrZSBjb2xsZWN0aW9uc1xuXG5cbiAgICAgIF9wcml2YXRlLm1hcCA9IG5ldyBNYXAkMigpO1xuXG4gICAgICBfcHJpdmF0ZS5tYXAuc2V0KGlkLCB7XG4gICAgICAgIGVsZTogX2VsZTIsXG4gICAgICAgIGluZGV4OiAwXG4gICAgICB9KTtcblxuICAgICAgX3ByaXZhdGUucmVtb3ZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoYWRkVG9Qb29sKSB7XG4gICAgICAgIGN5LmFkZFRvUG9vbChfZWxlMik7XG4gICAgICB9XG4gICAgfSAvLyBmb3IgZWFjaCBlbGVtZW50XG4gICAgLy8gZG8gY29tcG91bmQgbm9kZSBzYW5pdHkgY2hlY2tzXG5cblxuICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG5vZGVzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgIC8vIGVhY2ggbm9kZVxuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tfaTRdO1xuICAgICAgdmFyIF9kYXRhNCA9IG5vZGUuX3ByaXZhdGUuZGF0YTtcblxuICAgICAgaWYgKG51bWJlciQxKF9kYXRhNC5wYXJlbnQpKSB7XG4gICAgICAgIC8vIHRoZW4gYXV0b21ha2Ugc3RyaW5nXG4gICAgICAgIF9kYXRhNC5wYXJlbnQgPSAnJyArIF9kYXRhNC5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnRJZCA9IF9kYXRhNC5wYXJlbnQ7XG4gICAgICB2YXIgc3BlY2lmaWVkUGFyZW50ID0gcGFyZW50SWQgIT0gbnVsbDtcblxuICAgICAgaWYgKHNwZWNpZmllZFBhcmVudCB8fCBub2RlLl9wcml2YXRlLnBhcmVudCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPyBjeS5jb2xsZWN0aW9uKCkubWVyZ2Uobm9kZS5fcHJpdmF0ZS5wYXJlbnQpIDogY3kuZ2V0RWxlbWVudEJ5SWQocGFyZW50SWQpO1xuXG4gICAgICAgIGlmIChwYXJlbnQuZW1wdHkoKSkge1xuICAgICAgICAgIC8vIG5vbi1leGlzdGFudCBwYXJlbnQ7IGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnRbMF0ucmVtb3ZlZCgpKSB7XG4gICAgICAgICAgd2FybignTm9kZSBhZGRlZCB3aXRoIG1pc3NpbmcgcGFyZW50LCByZWZlcmVuY2UgdG8gcGFyZW50IHJlbW92ZWQnKTtcbiAgICAgICAgICBfZGF0YTQucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5vZGUuX3ByaXZhdGUucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc2VsZkFzUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gcGFyZW50O1xuXG4gICAgICAgICAgd2hpbGUgKCFhbmNlc3Rvci5lbXB0eSgpKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5zYW1lKGFuY2VzdG9yKSkge1xuICAgICAgICAgICAgICAvLyBtYXJrIHNlbGYgYXMgcGFyZW50IGFuZCByZW1vdmUgZnJvbSBkYXRhXG4gICAgICAgICAgICAgIHNlbGZBc1BhcmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIF9kYXRhNC5wYXJlbnQgPSB1bmRlZmluZWQ7IC8vIHJlbW92ZSBwYXJlbnQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgIC8vIGV4aXQgb3Igd2UgbG9vcCBmb3JldmVyXG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzZWxmQXNQYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIGNvbm5lY3Qgd2l0aCBjaGlsZHJlblxuICAgICAgICAgICAgcGFyZW50WzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIG5vZGUuX3ByaXZhdGUucGFyZW50ID0gcGFyZW50WzBdOyAvLyBsZXQgdGhlIGNvcmUga25vdyB3ZSBoYXZlIGEgY29tcG91bmQgZ3JhcGhcblxuICAgICAgICAgICAgY3lfcC5oYXNDb21wb3VuZE5vZGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZWxzZVxuXG4gICAgICB9IC8vIGlmIHNwZWNpZmllZCBwYXJlbnRcblxuICAgIH0gLy8gZm9yIGVhY2ggbm9kZVxuXG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHJlc3RvcmVkID0gZWxlbWVudHMubGVuZ3RoID09PSBzZWxmLmxlbmd0aCA/IHNlbGYgOiBuZXcgQ29sbGVjdGlvbihjeSwgZWxlbWVudHMpO1xuXG4gICAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXN0b3JlZC5sZW5ndGg7IF9pNSsrKSB7XG4gICAgICAgIHZhciBfZWxlMyA9IHJlc3RvcmVkW19pNV07XG5cbiAgICAgICAgaWYgKF9lbGUzLmlzTm9kZSgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZXMgZm9yIHRoZSBwYXJhbGxlbCBlZGdlc1xuXG5cbiAgICAgICAgX2VsZTMucGFyYWxsZWxFZGdlcygpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTsgLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZSBmb3IgdGhlIGNvbm5lY3RlZCBub2Rlc1xuXG5cbiAgICAgICAgX2VsZTMuc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuXG4gICAgICAgIF9lbGUzLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvVXBkYXRlU3R5bGU7XG5cbiAgICAgIGlmIChjeV9wLmhhc0NvbXBvdW5kTm9kZXMpIHtcbiAgICAgICAgdG9VcGRhdGVTdHlsZSA9IGN5LmNvbGxlY3Rpb24oKS5tZXJnZShyZXN0b3JlZCkubWVyZ2UocmVzdG9yZWQuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UocmVzdG9yZWQucGFyZW50KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9VcGRhdGVTdHlsZSA9IHJlc3RvcmVkO1xuICAgICAgfVxuXG4gICAgICB0b1VwZGF0ZVN0eWxlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKG5vdGlmeVJlbmRlcmVyKTtcblxuICAgICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICAgIHJlc3RvcmVkLmVtaXRBbmROb3RpZnkoJ2FkZCcpO1xuICAgICAgfSBlbHNlIGlmIChhZGRUb1Bvb2wpIHtcbiAgICAgICAgcmVzdG9yZWQuZW1pdCgnYWRkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGY7IC8vIGNoYWluYWJpbGl0eVxuICB9O1xuXG4gIGVsZXNmbiQxLnJlbW92ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZSAmJiBlbGUuX3ByaXZhdGUucmVtb3ZlZDtcbiAgfTtcblxuICBlbGVzZm4kMS5pbnNpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZSAmJiAhZWxlLl9wcml2YXRlLnJlbW92ZWQ7XG4gIH07XG5cbiAgZWxlc2ZuJDEucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBub3RpZnlSZW5kZXJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICB2YXIgcmVtb3ZlRnJvbVBvb2wgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBlbGVzVG9SZW1vdmUgPSBbXTtcbiAgICB2YXIgZWxlc1RvUmVtb3ZlSWRzID0ge307XG4gICAgdmFyIGN5ID0gc2VsZi5fcHJpdmF0ZS5jeTsgLy8gYWRkIGNvbm5lY3RlZCBlZGdlc1xuXG4gICAgZnVuY3Rpb24gYWRkQ29ubmVjdGVkRWRnZXMobm9kZSkge1xuICAgICAgdmFyIGVkZ2VzID0gbm9kZS5fcHJpdmF0ZS5lZGdlcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhZGQoZWRnZXNbaV0pO1xuICAgICAgfVxuICAgIH0gLy8gYWRkIGRlc2NlbmRhbnQgbm9kZXNcblxuXG4gICAgZnVuY3Rpb24gYWRkQ2hpbGRyZW4obm9kZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5fcHJpdmF0ZS5jaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBhZGQoY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZChlbGUpIHtcbiAgICAgIHZhciBhbHJlYWR5QWRkZWQgPSBlbGVzVG9SZW1vdmVJZHNbZWxlLmlkKCldO1xuXG4gICAgICBpZiAocmVtb3ZlRnJvbVBvb2wgJiYgZWxlLnJlbW92ZWQoKSB8fCBhbHJlYWR5QWRkZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgZWxlc1RvUmVtb3ZlLnB1c2goZWxlKTsgLy8gbm9kZXMgYXJlIHJlbW92ZWQgbGFzdFxuXG4gICAgICAgIGFkZENvbm5lY3RlZEVkZ2VzKGVsZSk7XG4gICAgICAgIGFkZENoaWxkcmVuKGVsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVzVG9SZW1vdmUudW5zaGlmdChlbGUpOyAvLyBlZGdlcyBhcmUgcmVtb3ZlZCBmaXJzdFxuICAgICAgfVxuICAgIH0gLy8gbWFrZSB0aGUgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmVcbiAgICAvLyAobWF5IGJlIHJlbW92aW5nIG1vcmUgdGhhbiBzcGVjaWZpZWQgZHVlIHRvIGNvbm5lY3RlZCBlZGdlcyBldGMpXG5cblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBzZWxmW2ldO1xuICAgICAgYWRkKGVsZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRWRnZVJlZihub2RlLCBlZGdlKSB7XG4gICAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgICAgcmVtb3ZlRnJvbUFycmF5KGNvbm5lY3RlZEVkZ2VzLCBlZGdlKTsgLy8gcmVtb3ZpbmcgYW4gZWRnZXMgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZSBmb3IgaXRzIG5vZGVzXG5cbiAgICAgIG5vZGUuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZVBhcmFsbGVsUmVmKHBsbEVkZ2UpIHtcbiAgICAgIC8vIHJlbW92aW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZXMgZm9yIHRoZSBwYXJhbGxlbCBlZGdlc1xuICAgICAgcGxsRWRnZS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gICAgfVxuXG4gICAgdmFyIGFsdGVyZWRQYXJlbnRzID0gW107XG4gICAgYWx0ZXJlZFBhcmVudHMuaWRzID0ge307XG5cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZFJlZihwYXJlbnQsIGVsZSkge1xuICAgICAgZWxlID0gZWxlWzBdO1xuICAgICAgcGFyZW50ID0gcGFyZW50WzBdO1xuICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50Ll9wcml2YXRlLmNoaWxkcmVuO1xuICAgICAgdmFyIHBpZCA9IHBhcmVudC5pZCgpO1xuICAgICAgcmVtb3ZlRnJvbUFycmF5KGNoaWxkcmVuLCBlbGUpOyAvLyByZW1vdmUgcGFyZW50ID0+IGNoaWxkIHJlZlxuXG4gICAgICBlbGUuX3ByaXZhdGUucGFyZW50ID0gbnVsbDsgLy8gcmVtb3ZlIGNoaWxkID0+IHBhcmVudCByZWZcblxuICAgICAgaWYgKCFhbHRlcmVkUGFyZW50cy5pZHNbcGlkXSkge1xuICAgICAgICBhbHRlcmVkUGFyZW50cy5pZHNbcGlkXSA9IHRydWU7XG4gICAgICAgIGFsdGVyZWRQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxmLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuXG4gICAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgICBjeS5yZW1vdmVGcm9tUG9vbChlbGVzVG9SZW1vdmUpOyAvLyByZW1vdmUgZnJvbSBjb3JlIHBvb2xcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBlbGVzVG9SZW1vdmUubGVuZ3RoOyBfaTYrKykge1xuICAgICAgdmFyIF9lbGU0ID0gZWxlc1RvUmVtb3ZlW19pNl07XG5cbiAgICAgIGlmIChfZWxlNC5pc0VkZ2UoKSkge1xuICAgICAgICAvLyByZW1vdmUgcmVmZXJlbmNlcyB0byB0aGlzIGVkZ2UgaW4gaXRzIGNvbm5lY3RlZCBub2Rlc1xuICAgICAgICB2YXIgc3JjID0gX2VsZTQuc291cmNlKClbMF07XG5cbiAgICAgICAgdmFyIHRndCA9IF9lbGU0LnRhcmdldCgpWzBdO1xuXG4gICAgICAgIHJlbW92ZUVkZ2VSZWYoc3JjLCBfZWxlNCk7XG4gICAgICAgIHJlbW92ZUVkZ2VSZWYodGd0LCBfZWxlNCk7XG5cbiAgICAgICAgdmFyIHBsbEVkZ2VzID0gX2VsZTQucGFyYWxsZWxFZGdlcygpO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGxsRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgcGxsRWRnZSA9IHBsbEVkZ2VzW2pdO1xuICAgICAgICAgIHJlbW92ZVBhcmFsbGVsUmVmKHBsbEVkZ2UpO1xuXG4gICAgICAgICAgaWYgKHBsbEVkZ2UuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgICAgICAgIHBsbEVkZ2UuZGlydHlCb3VuZGluZ0JveENhY2hlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIHRvIHBhcmVudFxuICAgICAgICB2YXIgcGFyZW50ID0gX2VsZTQucGFyZW50KCk7XG5cbiAgICAgICAgaWYgKHBhcmVudC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByZW1vdmVDaGlsZFJlZihwYXJlbnQsIF9lbGU0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZlRnJvbVBvb2wpIHtcbiAgICAgICAgLy8gbWFyayBhcyByZW1vdmVkXG4gICAgICAgIF9lbGU0Ll9wcml2YXRlLnJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBjb21wb3VuZCBncmFwaCBvciBub3RcblxuXG4gICAgdmFyIGVsZXNTdGlsbEluc2lkZSA9IGN5Ll9wcml2YXRlLmVsZW1lbnRzO1xuICAgIGN5Ll9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXMgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIF9pNyA9IDA7IF9pNyA8IGVsZXNTdGlsbEluc2lkZS5sZW5ndGg7IF9pNysrKSB7XG4gICAgICB2YXIgX2VsZTUgPSBlbGVzU3RpbGxJbnNpZGVbX2k3XTtcblxuICAgICAgaWYgKF9lbGU1LmlzUGFyZW50KCkpIHtcbiAgICAgICAgY3kuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZW1vdmVkRWxlbWVudHMgPSBuZXcgQ29sbGVjdGlvbih0aGlzLmN5KCksIGVsZXNUb1JlbW92ZSk7XG5cbiAgICBpZiAocmVtb3ZlZEVsZW1lbnRzLnNpemUoKSA+IDApIHtcbiAgICAgIC8vIG11c3QgbWFudWFsbHkgbm90aWZ5IHNpbmNlIHRyaWdnZXIgd29uJ3QgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IG9uY2UgcmVtb3ZlZFxuICAgICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICAgIHJlbW92ZWRFbGVtZW50cy5lbWl0QW5kTm90aWZ5KCdyZW1vdmUnKTtcbiAgICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVBvb2wpIHtcbiAgICAgICAgcmVtb3ZlZEVsZW1lbnRzLmVtaXQoJ3JlbW92ZScpO1xuICAgICAgfVxuICAgIH0gLy8gdGhlIHBhcmVudHMgd2hvIHdlcmUgbW9kaWZpZWQgYnkgdGhlIHJlbW92YWwgbmVlZCB0aGVpciBzdHlsZSB1cGRhdGVkXG5cblxuICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IGFsdGVyZWRQYXJlbnRzLmxlbmd0aDsgX2k4KyspIHtcbiAgICAgIHZhciBfZWxlNiA9IGFsdGVyZWRQYXJlbnRzW19pOF07XG5cbiAgICAgIGlmICghcmVtb3ZlRnJvbVBvb2wgfHwgIV9lbGU2LnJlbW92ZWQoKSkge1xuICAgICAgICBfZWxlNi51cGRhdGVTdHlsZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkRWxlbWVudHM7XG4gIH07XG5cbiAgZWxlc2ZuJDEubW92ZSA9IGZ1bmN0aW9uIChzdHJ1Y3QpIHtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIHZhciBlbGVzID0gdGhpczsgLy8ganVzdCBjbGVhbiB1cCByZWZzLCBjYWNoZXMsIGV0Yy4gaW4gdGhlIHNhbWUgd2F5IGFzIHdoZW4gcmVtb3ZpbmcgYW5kIHRoZW4gcmVzdG9yaW5nXG4gICAgLy8gKG91ciBjYWxscyB0byByZW1vdmUvcmVzdG9yZSBkbyBub3QgcmVtb3ZlIGZyb20gdGhlIGdyYXBoIG9yIG1ha2UgZXZlbnRzKVxuXG4gICAgdmFyIG5vdGlmeVJlbmRlcmVyID0gZmFsc2U7XG4gICAgdmFyIG1vZGlmeVBvb2wgPSBmYWxzZTtcblxuICAgIHZhciB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGlkKSB7XG4gICAgICByZXR1cm4gaWQgPT0gbnVsbCA/IGlkIDogJycgKyBpZDtcbiAgICB9OyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuXG5cbiAgICBpZiAoc3RydWN0LnNvdXJjZSAhPT0gdW5kZWZpbmVkIHx8IHN0cnVjdC50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHNyY0lkID0gdG9TdHJpbmcoc3RydWN0LnNvdXJjZSk7XG4gICAgICB2YXIgdGd0SWQgPSB0b1N0cmluZyhzdHJ1Y3QudGFyZ2V0KTtcbiAgICAgIHZhciBzcmNFeGlzdHMgPSBzcmNJZCAhPSBudWxsICYmIGN5Lmhhc0VsZW1lbnRXaXRoSWQoc3JjSWQpO1xuICAgICAgdmFyIHRndEV4aXN0cyA9IHRndElkICE9IG51bGwgJiYgY3kuaGFzRWxlbWVudFdpdGhJZCh0Z3RJZCk7XG5cbiAgICAgIGlmIChzcmNFeGlzdHMgfHwgdGd0RXhpc3RzKSB7XG4gICAgICAgIGN5LmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBhdm9pZCBkdXBsaWNhdGUgc3R5bGUgdXBkYXRlc1xuICAgICAgICAgIGVsZXMucmVtb3ZlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gY2xlYW4gdXAgcmVmcyBldGMuXG5cbiAgICAgICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmVvdXQnKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgICB2YXIgX2RhdGE1ID0gZWxlLl9wcml2YXRlLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHNyY0V4aXN0cykge1xuICAgICAgICAgICAgICAgIF9kYXRhNS5zb3VyY2UgPSBzcmNJZDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0Z3RFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBfZGF0YTUudGFyZ2V0ID0gdGd0SWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVzLnJlc3RvcmUobm90aWZ5UmVuZGVyZXIsIG1vZGlmeVBvb2wpOyAvLyBtYWtlIG5ldyByZWZzLCBzdHlsZSwgZXRjLlxuICAgICAgICB9KTtcbiAgICAgICAgZWxlcy5lbWl0QW5kTm90aWZ5KCdtb3ZlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJ1Y3QucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1vdmUgbm9kZSB0byBuZXcgcGFyZW50XG4gICAgICB2YXIgcGFyZW50SWQgPSB0b1N0cmluZyhzdHJ1Y3QucGFyZW50KTtcbiAgICAgIHZhciBwYXJlbnRFeGlzdHMgPSBwYXJlbnRJZCA9PT0gbnVsbCB8fCBjeS5oYXNFbGVtZW50V2l0aElkKHBhcmVudElkKTtcblxuICAgICAgaWYgKHBhcmVudEV4aXN0cykge1xuICAgICAgICB2YXIgcGlkVG9Bc3NpZ24gPSBwYXJlbnRJZCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHBhcmVudElkO1xuICAgICAgICBjeS5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRlIHN0eWxlIHVwZGF0ZXNcbiAgICAgICAgICB2YXIgdXBkYXRlZCA9IGVsZXMucmVtb3ZlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gY2xlYW4gdXAgcmVmcyBldGMuXG5cbiAgICAgICAgICB1cGRhdGVkLmVtaXRBbmROb3RpZnkoJ21vdmVvdXQnKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgICB2YXIgX2RhdGE2ID0gZWxlLl9wcml2YXRlLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgICAgICAgX2RhdGE2LnBhcmVudCA9IHBpZFRvQXNzaWduO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZWQucmVzdG9yZShub3RpZnlSZW5kZXJlciwgbW9kaWZ5UG9vbCk7IC8vIG1ha2UgbmV3IHJlZnMsIHN0eWxlLCBldGMuXG4gICAgICAgIH0pO1xuICAgICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBbZWxlc2ZuJGosIGVsZXNmbiRpLCBlbGVzZm4kaCwgZWxlc2ZuJGcsIGVsZXNmbiRmLCBkYXRhLCBlbGVzZm4kZCwgZGltZW5zaW9ucywgZWxlc2ZuJDksIGVsZXNmbiQ4LCBlbGVzZm4kNywgZWxlc2ZuJDYsIGVsZXNmbiQ1LCBlbGVzZm4kNCwgZWxlc2ZuJDMsIGVsZXNmbiQyXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGV4dGVuZChlbGVzZm4kMSwgcHJvcHMpO1xuICB9KTtcblxuICB2YXIgY29yZWZuJDkgPSB7XG4gICAgYWRkOiBmdW5jdGlvbiBhZGQob3B0cykge1xuICAgICAgdmFyIGVsZW1lbnRzO1xuICAgICAgdmFyIGN5ID0gdGhpczsgLy8gYWRkIHRoZSBlbGVtZW50c1xuXG4gICAgICBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihvcHRzKSkge1xuICAgICAgICB2YXIgZWxlcyA9IG9wdHM7XG5cbiAgICAgICAgaWYgKGVsZXMuX3ByaXZhdGUuY3kgPT09IGN5KSB7XG4gICAgICAgICAgLy8gc2FtZSBpbnN0YW5jZSA9PiBqdXN0IHJlc3RvcmVcbiAgICAgICAgICBlbGVtZW50cyA9IGVsZXMucmVzdG9yZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSwgY29weSBmcm9tIGpzb25cbiAgICAgICAgICB2YXIganNvbnMgPSBbXTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgICBqc29ucy5wdXNoKGVsZS5qc29uKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnRzID0gbmV3IENvbGxlY3Rpb24oY3ksIGpzb25zKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzcGVjaWZ5IGFuIGFycmF5IG9mIG9wdGlvbnNcbiAgICAgIGVsc2UgaWYgKGFycmF5KG9wdHMpKSB7XG4gICAgICAgIHZhciBfanNvbnMgPSBvcHRzO1xuICAgICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBfanNvbnMpO1xuICAgICAgfSAvLyBzcGVjaWZ5IHZpYSBvcHRzLm5vZGVzIGFuZCBvcHRzLmVkZ2VzXG4gICAgICBlbHNlIGlmIChwbGFpbk9iamVjdChvcHRzKSAmJiAoYXJyYXkob3B0cy5ub2RlcykgfHwgYXJyYXkob3B0cy5lZGdlcykpKSB7XG4gICAgICAgIHZhciBlbGVzQnlHcm91cCA9IG9wdHM7XG4gICAgICAgIHZhciBfanNvbnMyID0gW107XG4gICAgICAgIHZhciBncnMgPSBbJ25vZGVzJywgJ2VkZ2VzJ107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBpbCA9IGdycy5sZW5ndGg7IF9pIDwgaWw7IF9pKyspIHtcbiAgICAgICAgICB2YXIgZ3JvdXAgPSBncnNbX2ldO1xuICAgICAgICAgIHZhciBlbGVzQXJyYXkgPSBlbGVzQnlHcm91cFtncm91cF07XG5cbiAgICAgICAgICBpZiAoYXJyYXkoZWxlc0FycmF5KSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpsID0gZWxlc0FycmF5Lmxlbmd0aDsgaiA8IGpsOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIGpzb24gPSBleHRlbmQoe1xuICAgICAgICAgICAgICAgIGdyb3VwOiBncm91cFxuICAgICAgICAgICAgICB9LCBlbGVzQXJyYXlbal0pO1xuXG4gICAgICAgICAgICAgIF9qc29uczIucHVzaChqc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBfanNvbnMyKTtcbiAgICAgIH0gLy8gc3BlY2lmeSBvcHRpb25zIGZvciBvbmUgZWxlbWVudFxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBfanNvbiA9IG9wdHM7XG4gICAgICAgIGVsZW1lbnRzID0gbmV3IEVsZW1lbnQoY3ksIF9qc29uKS5jb2xsZWN0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24pKSA7IGVsc2UgaWYgKHN0cmluZyhjb2xsZWN0aW9uKSkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBjb2xsZWN0aW9uO1xuICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy4kKHNlbGVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qIGdsb2JhbCBGbG9hdDMyQXJyYXkgKi9cblxuICAvKiEgQmV6aWVyIGN1cnZlIGZ1bmN0aW9uIGdlbmVyYXRvci4gQ29weXJpZ2h0IEdhZXRhbiBSZW5hdWRlYXUuIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICovXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gICAgdmFyIE5FV1RPTl9JVEVSQVRJT05TID0gNCxcbiAgICAgICAgTkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxuICAgICAgICBTVUJESVZJU0lPTl9QUkVDSVNJT04gPSAwLjAwMDAwMDEsXG4gICAgICAgIFNVQkRJVklTSU9OX01BWF9JVEVSQVRJT05TID0gMTAsXG4gICAgICAgIGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcbiAgICAgICAga1NhbXBsZVN0ZXBTaXplID0gMS4wIC8gKGtTcGxpbmVUYWJsZVNpemUgLSAxLjApLFxuICAgICAgICBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPSB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJztcbiAgICAvKiBNdXN0IGNvbnRhaW4gZm91ciBhcmd1bWVudHMuICovXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKiBBcmd1bWVudHMgbXVzdCBiZSBudW1iZXJzLiAqL1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIFggdmFsdWVzIG11c3QgYmUgaW4gdGhlIFswLCAxXSByYW5nZS4gKi9cblxuXG4gICAgbVgxID0gTWF0aC5taW4obVgxLCAxKTtcbiAgICBtWDIgPSBNYXRoLm1pbihtWDIsIDEpO1xuICAgIG1YMSA9IE1hdGgubWF4KG1YMSwgMCk7XG4gICAgbVgyID0gTWF0aC5tYXgobVgyLCAwKTtcbiAgICB2YXIgbVNhbXBsZVZhbHVlcyA9IGZsb2F0MzJBcnJheVN1cHBvcnRlZCA/IG5ldyBGbG9hdDMyQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSkgOiBuZXcgQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSk7XG5cbiAgICBmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XG4gICAgICByZXR1cm4gMS4wIC0gMy4wICogYUEyICsgMy4wICogYUExO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIEIoYUExLCBhQTIpIHtcbiAgICAgIHJldHVybiAzLjAgKiBhQTIgLSA2LjAgKiBhQTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQyhhQTEpIHtcbiAgICAgIHJldHVybiAzLjAgKiBhQTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY0JlemllcihhVCwgYUExLCBhQTIpIHtcbiAgICAgIHJldHVybiAoKEEoYUExLCBhQTIpICogYVQgKyBCKGFBMSwgYUEyKSkgKiBhVCArIEMoYUExKSkgKiBhVDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTbG9wZShhVCwgYUExLCBhQTIpIHtcbiAgICAgIHJldHVybiAzLjAgKiBBKGFBMSwgYUEyKSAqIGFUICogYVQgKyAyLjAgKiBCKGFBMSwgYUEyKSAqIGFUICsgQyhhQTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBhR3Vlc3NUKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgTkVXVE9OX0lURVJBVElPTlM7ICsrX2kpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTbG9wZSA9IGdldFNsb3BlKGFHdWVzc1QsIG1YMSwgbVgyKTtcblxuICAgICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgICByZXR1cm4gYUd1ZXNzVDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50WCA9IGNhbGNCZXppZXIoYUd1ZXNzVCwgbVgxLCBtWDIpIC0gYVg7XG4gICAgICAgIGFHdWVzc1QgLT0gY3VycmVudFggLyBjdXJyZW50U2xvcGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhR3Vlc3NUO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGNTYW1wbGVWYWx1ZXMoKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrU3BsaW5lVGFibGVTaXplOyArK19pMikge1xuICAgICAgICBtU2FtcGxlVmFsdWVzW19pMl0gPSBjYWxjQmV6aWVyKF9pMiAqIGtTYW1wbGVTdGVwU2l6ZSwgbVgxLCBtWDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpbmFyeVN1YmRpdmlkZShhWCwgYUEsIGFCKSB7XG4gICAgICB2YXIgY3VycmVudFgsXG4gICAgICAgICAgY3VycmVudFQsXG4gICAgICAgICAgaSA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgY3VycmVudFQgPSBhQSArIChhQiAtIGFBKSAvIDIuMDtcbiAgICAgICAgY3VycmVudFggPSBjYWxjQmV6aWVyKGN1cnJlbnRULCBtWDEsIG1YMikgLSBhWDtcblxuICAgICAgICBpZiAoY3VycmVudFggPiAwLjApIHtcbiAgICAgICAgICBhQiA9IGN1cnJlbnRUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFBID0gY3VycmVudFQ7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50VDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRURm9yWChhWCkge1xuICAgICAgdmFyIGludGVydmFsU3RhcnQgPSAwLjAsXG4gICAgICAgICAgY3VycmVudFNhbXBsZSA9IDEsXG4gICAgICAgICAgbGFzdFNhbXBsZSA9IGtTcGxpbmVUYWJsZVNpemUgLSAxO1xuXG4gICAgICBmb3IgKDsgY3VycmVudFNhbXBsZSAhPT0gbGFzdFNhbXBsZSAmJiBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgICAgaW50ZXJ2YWxTdGFydCArPSBrU2FtcGxlU3RlcFNpemU7XG4gICAgICB9XG5cbiAgICAgIC0tY3VycmVudFNhbXBsZTtcbiAgICAgIHZhciBkaXN0ID0gKGFYIC0gbVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSkgLyAobVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlICsgMV0gLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSxcbiAgICAgICAgICBndWVzc0ZvclQgPSBpbnRlcnZhbFN0YXJ0ICsgZGlzdCAqIGtTYW1wbGVTdGVwU2l6ZSxcbiAgICAgICAgICBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcblxuICAgICAgaWYgKGluaXRpYWxTbG9wZSA+PSBORVdUT05fTUlOX1NMT1BFKSB7XG4gICAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgcmV0dXJuIGd1ZXNzRm9yVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiaW5hcnlTdWJkaXZpZGUoYVgsIGludGVydmFsU3RhcnQsIGludGVydmFsU3RhcnQgKyBrU2FtcGxlU3RlcFNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfcHJlY29tcHV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XG4gICAgICBfcHJlY29tcHV0ZWQgPSB0cnVlO1xuXG4gICAgICBpZiAobVgxICE9PSBtWTEgfHwgbVgyICE9PSBtWTIpIHtcbiAgICAgICAgY2FsY1NhbXBsZVZhbHVlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmID0gZnVuY3Rpb24gZihhWCkge1xuICAgICAgaWYgKCFfcHJlY29tcHV0ZWQpIHtcbiAgICAgICAgcHJlY29tcHV0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAobVgxID09PSBtWTEgJiYgbVgyID09PSBtWTIpIHtcbiAgICAgICAgcmV0dXJuIGFYO1xuICAgICAgfVxuXG4gICAgICBpZiAoYVggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChhWCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhbGNCZXppZXIoZ2V0VEZvclgoYVgpLCBtWTEsIG1ZMik7XG4gICAgfTtcblxuICAgIGYuZ2V0Q29udHJvbFBvaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICB4OiBtWDEsXG4gICAgICAgIHk6IG1ZMVxuICAgICAgfSwge1xuICAgICAgICB4OiBtWDIsXG4gICAgICAgIHk6IG1ZMlxuICAgICAgfV07XG4gICAgfTtcblxuICAgIHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcblxuICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH07XG5cbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIC8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cblxuICAvKiBHaXZlbiBhIHRlbnNpb24sIGZyaWN0aW9uLCBhbmQgZHVyYXRpb24sIGEgc2ltdWxhdGlvbiBhdCA2MEZQUyB3aWxsIGZpcnN0IHJ1biB3aXRob3V0IGEgZGVmaW5lZCBkdXJhdGlvbiBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIGZ1bGwgcGF0aC4gQSBzZWNvbmQgcGFzc1xuICAgICB0aGVuIGFkanVzdHMgdGhlIHRpbWUgZGVsdGEgLS0gdXNpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gYWN0dWFsIHRpbWUgYW5kIGR1cmF0aW9uIC0tIHRvIGNhbGN1bGF0ZSB0aGUgcGF0aCBmb3IgdGhlIGR1cmF0aW9uLWNvbnN0cmFpbmVkIGFuaW1hdGlvbi4gKi9cbiAgdmFyIGdlbmVyYXRlU3ByaW5nUks0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKSB7XG4gICAgICByZXR1cm4gLXN0YXRlLnRlbnNpb24gKiBzdGF0ZS54IC0gc3RhdGUuZnJpY3Rpb24gKiBzdGF0ZS52O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShpbml0aWFsU3RhdGUsIGR0LCBkZXJpdmF0aXZlKSB7XG4gICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIHg6IGluaXRpYWxTdGF0ZS54ICsgZGVyaXZhdGl2ZS5keCAqIGR0LFxuICAgICAgICB2OiBpbml0aWFsU3RhdGUudiArIGRlcml2YXRpdmUuZHYgKiBkdCxcbiAgICAgICAgdGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXG4gICAgICAgIGZyaWN0aW9uOiBpbml0aWFsU3RhdGUuZnJpY3Rpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkeDogc3RhdGUudixcbiAgICAgICAgZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcbiAgICAgIHZhciBhID0ge1xuICAgICAgICBkeDogc3RhdGUudixcbiAgICAgICAgZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKVxuICAgICAgfSxcbiAgICAgICAgICBiID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYSksXG4gICAgICAgICAgYyA9IHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShzdGF0ZSwgZHQgKiAwLjUsIGIpLFxuICAgICAgICAgIGQgPSBzcHJpbmdFdmFsdWF0ZVN0YXRlV2l0aERlcml2YXRpdmUoc3RhdGUsIGR0LCBjKSxcbiAgICAgICAgICBkeGR0ID0gMS4wIC8gNi4wICogKGEuZHggKyAyLjAgKiAoYi5keCArIGMuZHgpICsgZC5keCksXG4gICAgICAgICAgZHZkdCA9IDEuMCAvIDYuMCAqIChhLmR2ICsgMi4wICogKGIuZHYgKyBjLmR2KSArIGQuZHYpO1xuICAgICAgc3RhdGUueCA9IHN0YXRlLnggKyBkeGR0ICogZHQ7XG4gICAgICBzdGF0ZS52ID0gc3RhdGUudiArIGR2ZHQgKiBkdDtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gc3ByaW5nUks0RmFjdG9yeSh0ZW5zaW9uLCBmcmljdGlvbiwgZHVyYXRpb24pIHtcbiAgICAgIHZhciBpbml0U3RhdGUgPSB7XG4gICAgICAgIHg6IC0xLFxuICAgICAgICB2OiAwLFxuICAgICAgICB0ZW5zaW9uOiBudWxsLFxuICAgICAgICBmcmljdGlvbjogbnVsbFxuICAgICAgfSxcbiAgICAgICAgICBwYXRoID0gWzBdLFxuICAgICAgICAgIHRpbWVfbGFwc2VkID0gMCxcbiAgICAgICAgICB0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXG4gICAgICAgICAgRFQgPSAxNiAvIDEwMDAsXG4gICAgICAgICAgaGF2ZV9kdXJhdGlvbixcbiAgICAgICAgICBkdCxcbiAgICAgICAgICBsYXN0X3N0YXRlO1xuICAgICAgdGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xuICAgICAgZnJpY3Rpb24gPSBwYXJzZUZsb2F0KGZyaWN0aW9uKSB8fCAyMDtcbiAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gfHwgbnVsbDtcbiAgICAgIGluaXRTdGF0ZS50ZW5zaW9uID0gdGVuc2lvbjtcbiAgICAgIGluaXRTdGF0ZS5mcmljdGlvbiA9IGZyaWN0aW9uO1xuICAgICAgaGF2ZV9kdXJhdGlvbiA9IGR1cmF0aW9uICE9PSBudWxsO1xuICAgICAgLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgdGltZSBpdCB0YWtlcyBmb3IgdGhpcyBhbmltYXRpb24gdG8gY29tcGxldGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZGl0aW9ucy4gKi9cblxuICAgICAgaWYgKGhhdmVfZHVyYXRpb24pIHtcbiAgICAgICAgLyogUnVuIHRoZSBzaW11bGF0aW9uIHdpdGhvdXQgYSBkdXJhdGlvbi4gKi9cbiAgICAgICAgdGltZV9sYXBzZWQgPSBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uKTtcbiAgICAgICAgLyogQ29tcHV0ZSB0aGUgYWRqdXN0ZWQgdGltZSBkZWx0YS4gKi9cblxuICAgICAgICBkdCA9IHRpbWVfbGFwc2VkIC8gZHVyYXRpb24gKiBEVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGR0ID0gRFQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgLyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xuICAgICAgICBsYXN0X3N0YXRlID0gc3ByaW5nSW50ZWdyYXRlU3RhdGUobGFzdF9zdGF0ZSB8fCBpbml0U3RhdGUsIGR0KTtcbiAgICAgICAgLyogU3RvcmUgdGhlIHBvc2l0aW9uLiAqL1xuXG4gICAgICAgIHBhdGgucHVzaCgxICsgbGFzdF9zdGF0ZS54KTtcbiAgICAgICAgdGltZV9sYXBzZWQgKz0gMTY7XG4gICAgICAgIC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xuXG4gICAgICAgIGlmICghKE1hdGguYWJzKGxhc3Rfc3RhdGUueCkgPiB0b2xlcmFuY2UgJiYgTWF0aC5hYnMobGFzdF9zdGF0ZS52KSA+IHRvbGVyYW5jZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogSWYgZHVyYXRpb24gaXMgbm90IGRlZmluZWQsIHJldHVybiB0aGUgYWN0dWFsIHRpbWUgcmVxdWlyZWQgZm9yIGNvbXBsZXRpbmcgdGhpcyBhbmltYXRpb24uIE90aGVyd2lzZSwgcmV0dXJuIGEgY2xvc3VyZSB0aGF0IGhvbGRzIHRoZVxuICAgICAgICAgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXG5cblxuICAgICAgcmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbiAocGVyY2VudENvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBwYXRoW3BlcmNlbnRDb21wbGV0ZSAqIChwYXRoLmxlbmd0aCAtIDEpIHwgMF07XG4gICAgICB9O1xuICAgIH07XG4gIH0oKTtcblxuICB2YXIgY3ViaWNCZXppZXIgPSBmdW5jdGlvbiBjdWJpY0Jlemllcih0MSwgcDEsIHQyLCBwMikge1xuICAgIHZhciBiZXppZXIgPSBnZW5lcmF0ZUN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXJ0LCBlbmQsIHBlcmNlbnQpIHtcbiAgICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBiZXppZXIocGVyY2VudCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgZWFzaW5ncyA9IHtcbiAgICAnbGluZWFyJzogZnVuY3Rpb24gbGluZWFyKHN0YXJ0LCBlbmQsIHBlcmNlbnQpIHtcbiAgICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBwZXJjZW50O1xuICAgIH0sXG4gICAgLy8gZGVmYXVsdCBlYXNpbmdzXG4gICAgJ2Vhc2UnOiBjdWJpY0JlemllcigwLjI1LCAwLjEsIDAuMjUsIDEpLFxuICAgICdlYXNlLWluJzogY3ViaWNCZXppZXIoMC40MiwgMCwgMSwgMSksXG4gICAgJ2Vhc2Utb3V0JzogY3ViaWNCZXppZXIoMCwgMCwgMC41OCwgMSksXG4gICAgJ2Vhc2UtaW4tb3V0JzogY3ViaWNCZXppZXIoMC40MiwgMCwgMC41OCwgMSksXG4gICAgLy8gc2luZVxuICAgICdlYXNlLWluLXNpbmUnOiBjdWJpY0JlemllcigwLjQ3LCAwLCAwLjc0NSwgMC43MTUpLFxuICAgICdlYXNlLW91dC1zaW5lJzogY3ViaWNCZXppZXIoMC4zOSwgMC41NzUsIDAuNTY1LCAxKSxcbiAgICAnZWFzZS1pbi1vdXQtc2luZSc6IGN1YmljQmV6aWVyKDAuNDQ1LCAwLjA1LCAwLjU1LCAwLjk1KSxcbiAgICAvLyBxdWFkXG4gICAgJ2Vhc2UtaW4tcXVhZCc6IGN1YmljQmV6aWVyKDAuNTUsIDAuMDg1LCAwLjY4LCAwLjUzKSxcbiAgICAnZWFzZS1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpLFxuICAgICdlYXNlLWluLW91dC1xdWFkJzogY3ViaWNCZXppZXIoMC40NTUsIDAuMDMsIDAuNTE1LCAwLjk1NSksXG4gICAgLy8gY3ViaWNcbiAgICAnZWFzZS1pbi1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOSksXG4gICAgJ2Vhc2Utb3V0LWN1YmljJzogY3ViaWNCZXppZXIoMC4yMTUsIDAuNjEsIDAuMzU1LCAxKSxcbiAgICAnZWFzZS1pbi1vdXQtY3ViaWMnOiBjdWJpY0JlemllcigwLjY0NSwgMC4wNDUsIDAuMzU1LCAxKSxcbiAgICAvLyBxdWFydFxuICAgICdlYXNlLWluLXF1YXJ0JzogY3ViaWNCZXppZXIoMC44OTUsIDAuMDMsIDAuNjg1LCAwLjIyKSxcbiAgICAnZWFzZS1vdXQtcXVhcnQnOiBjdWJpY0JlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSksXG4gICAgJ2Vhc2UtaW4tb3V0LXF1YXJ0JzogY3ViaWNCZXppZXIoMC43NywgMCwgMC4xNzUsIDEpLFxuICAgIC8vIHF1aW50XG4gICAgJ2Vhc2UtaW4tcXVpbnQnOiBjdWJpY0JlemllcigwLjc1NSwgMC4wNSwgMC44NTUsIDAuMDYpLFxuICAgICdlYXNlLW91dC1xdWludCc6IGN1YmljQmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLFxuICAgICdlYXNlLWluLW91dC1xdWludCc6IGN1YmljQmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpLFxuICAgIC8vIGV4cG9cbiAgICAnZWFzZS1pbi1leHBvJzogY3ViaWNCZXppZXIoMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1KSxcbiAgICAnZWFzZS1vdXQtZXhwbyc6IGN1YmljQmV6aWVyKDAuMTksIDEsIDAuMjIsIDEpLFxuICAgICdlYXNlLWluLW91dC1leHBvJzogY3ViaWNCZXppZXIoMSwgMCwgMCwgMSksXG4gICAgLy8gY2lyY1xuICAgICdlYXNlLWluLWNpcmMnOiBjdWJpY0JlemllcigwLjYsIDAuMDQsIDAuOTgsIDAuMzM1KSxcbiAgICAnZWFzZS1vdXQtY2lyYyc6IGN1YmljQmV6aWVyKDAuMDc1LCAwLjgyLCAwLjE2NSwgMSksXG4gICAgJ2Vhc2UtaW4tb3V0LWNpcmMnOiBjdWJpY0JlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLFxuICAgIC8vIHVzZXIgcGFyYW0gZWFzaW5ncy4uLlxuICAgICdzcHJpbmcnOiBmdW5jdGlvbiBzcHJpbmcodGVuc2lvbiwgZnJpY3Rpb24sIGR1cmF0aW9uKSB7XG4gICAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgLy8gY2FuJ3QgZ2V0IGEgc3ByaW5nIHcvIGR1cmF0aW9uIDBcbiAgICAgICAgcmV0dXJuIGVhc2luZ3MubGluZWFyOyAvLyBkdXJhdGlvbiAwID0+IGp1bXAgdG8gZW5kIHNvIGltcGwgZG9lc24ndCBtYXR0ZXJcbiAgICAgIH1cblxuICAgICAgdmFyIHNwcmluZyA9IGdlbmVyYXRlU3ByaW5nUks0KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXJ0LCBlbmQsIHBlcmNlbnQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHNwcmluZyhwZXJjZW50KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICAnY3ViaWMtYmV6aWVyJzogY3ViaWNCZXppZXJcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRFYXNlZFZhbHVlKHR5cGUsIHN0YXJ0LCBlbmQsIHBlcmNlbnQsIGVhc2luZ0ZuKSB7XG4gICAgaWYgKHBlcmNlbnQgPT09IDEpIHtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfVxuXG4gICAgdmFyIHZhbCA9IGVhc2luZ0ZuKHN0YXJ0LCBlbmQsIHBlcmNlbnQpO1xuXG4gICAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5yb3VuZFZhbHVlIHx8IHR5cGUuY29sb3IpIHtcbiAgICAgIHZhbCA9IE1hdGgucm91bmQodmFsKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsID0gTWF0aC5tYXgodmFsLCB0eXBlLm1pbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbCA9IE1hdGgubWluKHZhbCwgdHlwZS5tYXgpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWYWx1ZShwcm9wLCBzcGVjKSB7XG4gICAgaWYgKHByb3AucGZWYWx1ZSAhPSBudWxsIHx8IHByb3AudmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKHByb3AucGZWYWx1ZSAhPSBudWxsICYmIChzcGVjID09IG51bGwgfHwgc3BlYy50eXBlLnVuaXRzICE9PSAnJScpKSB7XG4gICAgICAgIHJldHVybiBwcm9wLnBmVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvcC52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWFzZShzdGFydFByb3AsIGVuZFByb3AsIHBlcmNlbnQsIGVhc2luZ0ZuLCBwcm9wU3BlYykge1xuICAgIHZhciB0eXBlID0gcHJvcFNwZWMgIT0gbnVsbCA/IHByb3BTcGVjLnR5cGUgOiBudWxsO1xuXG4gICAgaWYgKHBlcmNlbnQgPCAwKSB7XG4gICAgICBwZXJjZW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPiAxKSB7XG4gICAgICBwZXJjZW50ID0gMTtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnQgPSBnZXRWYWx1ZShzdGFydFByb3AsIHByb3BTcGVjKTtcbiAgICB2YXIgZW5kID0gZ2V0VmFsdWUoZW5kUHJvcCwgcHJvcFNwZWMpO1xuXG4gICAgaWYgKG51bWJlciQxKHN0YXJ0KSAmJiBudW1iZXIkMShlbmQpKSB7XG4gICAgICByZXR1cm4gZ2V0RWFzZWRWYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCBwZXJjZW50LCBlYXNpbmdGbik7XG4gICAgfSBlbHNlIGlmIChhcnJheShzdGFydCkgJiYgYXJyYXkoZW5kKSkge1xuICAgICAgdmFyIGVhc2VkQXJyID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzaSA9IHN0YXJ0W2ldO1xuICAgICAgICB2YXIgZWkgPSBlbmRbaV07XG5cbiAgICAgICAgaWYgKHNpICE9IG51bGwgJiYgZWkgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciB2YWwgPSBnZXRFYXNlZFZhbHVlKHR5cGUsIHNpLCBlaSwgcGVyY2VudCwgZWFzaW5nRm4pO1xuICAgICAgICAgIGVhc2VkQXJyLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlYXNlZEFyci5wdXNoKGVpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWFzZWRBcnI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAkMShzZWxmLCBhbmksIG5vdywgaXNDb3JlKSB7XG4gICAgdmFyIGlzRWxlcyA9ICFpc0NvcmU7XG4gICAgdmFyIF9wID0gc2VsZi5fcHJpdmF0ZTtcbiAgICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gICAgdmFyIHBFYXNpbmcgPSBhbmlfcC5lYXNpbmc7XG4gICAgdmFyIHN0YXJ0VGltZSA9IGFuaV9wLnN0YXJ0VGltZTtcbiAgICB2YXIgY3kgPSBpc0NvcmUgPyBzZWxmIDogc2VsZi5jeSgpO1xuICAgIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG5cbiAgICBpZiAoIWFuaV9wLmVhc2luZ0ltcGwpIHtcbiAgICAgIGlmIChwRWFzaW5nID09IG51bGwpIHtcbiAgICAgICAgLy8gdXNlIGRlZmF1bHRcbiAgICAgICAgYW5pX3AuZWFzaW5nSW1wbCA9IGVhc2luZ3NbJ2xpbmVhciddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlbiBkZWZpbmUgdy8gbmFtZVxuICAgICAgICB2YXIgZWFzaW5nVmFscztcblxuICAgICAgICBpZiAoc3RyaW5nKHBFYXNpbmcpKSB7XG4gICAgICAgICAgdmFyIGVhc2luZ1Byb3AgPSBzdHlsZS5wYXJzZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCBwRWFzaW5nKTtcbiAgICAgICAgICBlYXNpbmdWYWxzID0gZWFzaW5nUHJvcC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGVuIGFzc3VtZSBwcmVwYXJzZWQgYXJyYXlcbiAgICAgICAgICBlYXNpbmdWYWxzID0gcEVhc2luZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lLCBhcmdzO1xuXG4gICAgICAgIGlmIChzdHJpbmcoZWFzaW5nVmFscykpIHtcbiAgICAgICAgICBuYW1lID0gZWFzaW5nVmFscztcbiAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZSA9IGVhc2luZ1ZhbHNbMV07XG4gICAgICAgICAgYXJncyA9IGVhc2luZ1ZhbHMuc2xpY2UoMikubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gK247XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIHdpdGggYXJnc1xuICAgICAgICAgIGlmIChuYW1lID09PSAnc3ByaW5nJykge1xuICAgICAgICAgICAgYXJncy5wdXNoKGFuaV9wLmR1cmF0aW9uKTsgLy8gbmVlZCBkdXJhdGlvbiB0byBnZW5lcmF0ZSBzcHJpbmdcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbmlfcC5lYXNpbmdJbXBsID0gZWFzaW5nc1tuYW1lXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdGF0aWMgaW1wbCBieSBuYW1lXG4gICAgICAgICAgYW5pX3AuZWFzaW5nSW1wbCA9IGVhc2luZ3NbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZWFzaW5nID0gYW5pX3AuZWFzaW5nSW1wbDtcbiAgICB2YXIgcGVyY2VudDtcblxuICAgIGlmIChhbmlfcC5kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcGVyY2VudCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcmNlbnQgPSAobm93IC0gc3RhcnRUaW1lKSAvIGFuaV9wLmR1cmF0aW9uO1xuICAgIH1cblxuICAgIGlmIChhbmlfcC5hcHBseWluZykge1xuICAgICAgcGVyY2VudCA9IGFuaV9wLnByb2dyZXNzO1xuICAgIH1cblxuICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgcGVyY2VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChwZXJjZW50ID4gMSkge1xuICAgICAgcGVyY2VudCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGFuaV9wLmRlbGF5ID09IG51bGwpIHtcbiAgICAgIC8vIHRoZW4gdXBkYXRlXG4gICAgICB2YXIgc3RhcnRQb3MgPSBhbmlfcC5zdGFydFBvc2l0aW9uO1xuICAgICAgdmFyIGVuZFBvcyA9IGFuaV9wLnBvc2l0aW9uO1xuXG4gICAgICBpZiAoZW5kUG9zICYmIGlzRWxlcyAmJiAhc2VsZi5sb2NrZWQoKSkge1xuICAgICAgICB2YXIgbmV3UG9zID0ge307XG5cbiAgICAgICAgaWYgKHZhbGlkKHN0YXJ0UG9zLngsIGVuZFBvcy54KSkge1xuICAgICAgICAgIG5ld1Bvcy54ID0gZWFzZShzdGFydFBvcy54LCBlbmRQb3MueCwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZChzdGFydFBvcy55LCBlbmRQb3MueSkpIHtcbiAgICAgICAgICBuZXdQb3MueSA9IGVhc2Uoc3RhcnRQb3MueSwgZW5kUG9zLnksIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLnBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydFBhbiA9IGFuaV9wLnN0YXJ0UGFuO1xuICAgICAgdmFyIGVuZFBhbiA9IGFuaV9wLnBhbjtcbiAgICAgIHZhciBwYW4gPSBfcC5wYW47XG4gICAgICB2YXIgYW5pbWF0aW5nUGFuID0gZW5kUGFuICE9IG51bGwgJiYgaXNDb3JlO1xuXG4gICAgICBpZiAoYW5pbWF0aW5nUGFuKSB7XG4gICAgICAgIGlmICh2YWxpZChzdGFydFBhbi54LCBlbmRQYW4ueCkpIHtcbiAgICAgICAgICBwYW4ueCA9IGVhc2Uoc3RhcnRQYW4ueCwgZW5kUGFuLngsIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWQoc3RhcnRQYW4ueSwgZW5kUGFuLnkpKSB7XG4gICAgICAgICAgcGFuLnkgPSBlYXNlKHN0YXJ0UGFuLnksIGVuZFBhbi55LCBwZXJjZW50LCBlYXNpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5lbWl0KCdwYW4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0Wm9vbSA9IGFuaV9wLnN0YXJ0Wm9vbTtcbiAgICAgIHZhciBlbmRab29tID0gYW5pX3Auem9vbTtcbiAgICAgIHZhciBhbmltYXRpbmdab29tID0gZW5kWm9vbSAhPSBudWxsICYmIGlzQ29yZTtcblxuICAgICAgaWYgKGFuaW1hdGluZ1pvb20pIHtcbiAgICAgICAgaWYgKHZhbGlkKHN0YXJ0Wm9vbSwgZW5kWm9vbSkpIHtcbiAgICAgICAgICBfcC56b29tID0gYm91bmQoX3AubWluWm9vbSwgZWFzZShzdGFydFpvb20sIGVuZFpvb20sIHBlcmNlbnQsIGVhc2luZyksIF9wLm1heFpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5lbWl0KCd6b29tJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmltYXRpbmdQYW4gfHwgYW5pbWF0aW5nWm9vbSkge1xuICAgICAgICBzZWxmLmVtaXQoJ3ZpZXdwb3J0Jyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wcyA9IGFuaV9wLnN0eWxlO1xuXG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCAmJiBpc0VsZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgIHZhciBlbmQgPSBwcm9wO1xuICAgICAgICAgIHZhciBzdGFydCA9IGFuaV9wLnN0YXJ0U3R5bGVbX25hbWVdO1xuICAgICAgICAgIHZhciBwcm9wU3BlYyA9IHN0eWxlLnByb3BlcnRpZXNbc3RhcnQubmFtZV07XG4gICAgICAgICAgdmFyIGVhc2VkVmFsID0gZWFzZShzdGFydCwgZW5kLCBwZXJjZW50LCBlYXNpbmcsIHByb3BTcGVjKTtcbiAgICAgICAgICBzdHlsZS5vdmVycmlkZUJ5cGFzcyhzZWxmLCBfbmFtZSwgZWFzZWRWYWwpO1xuICAgICAgICB9IC8vIGZvciBwcm9wc1xuXG5cbiAgICAgICAgc2VsZi5lbWl0KCdzdHlsZScpO1xuICAgICAgfSAvLyBpZlxuXG4gICAgfVxuXG4gICAgYW5pX3AucHJvZ3Jlc3MgPSBwZXJjZW50O1xuICAgIHJldHVybiBwZXJjZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWQoc3RhcnQsIGVuZCkge1xuICAgIGlmIChzdGFydCA9PSBudWxsIHx8IGVuZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlciQxKHN0YXJ0KSAmJiBudW1iZXIkMShlbmQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRBbmltYXRpb24oc2VsZiwgYW5pLCBub3csIGlzQ29yZSkge1xuICAgIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcbiAgICBhbmlfcC5zdGFydGVkID0gdHJ1ZTtcbiAgICBhbmlfcC5zdGFydFRpbWUgPSBub3cgLSBhbmlfcC5wcm9ncmVzcyAqIGFuaV9wLmR1cmF0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RlcEFsbChub3csIGN5KSB7XG4gICAgdmFyIGVsZXMgPSBjeS5fcHJpdmF0ZS5hbmlFbGVzO1xuICAgIHZhciBkb25lRWxlcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc3RlcE9uZShlbGUsIGlzQ29yZSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgdmFyIGN1cnJlbnQgPSBfcC5hbmltYXRpb24uY3VycmVudDtcbiAgICAgIHZhciBxdWV1ZSA9IF9wLmFuaW1hdGlvbi5xdWV1ZTtcbiAgICAgIHZhciByYW5BbmlzID0gZmFsc2U7IC8vIGlmIG5vdGhpbmcgY3VycmVudGx5IGFuaW1hdGluZywgZ2V0IHNvbWV0aGluZyBmcm9tIHRoZSBxdWV1ZVxuXG4gICAgICBpZiAoY3VycmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIG5leHQgPSBxdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgY3VycmVudC5wdXNoKG5leHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjYWxsYmFja3MgPSBmdW5jdGlvbiBjYWxsYmFja3MoX2NhbGxiYWNrcykge1xuICAgICAgICBmb3IgKHZhciBqID0gX2NhbGxiYWNrcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIHZhciBjYiA9IF9jYWxsYmFja3Nbal07XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9jYWxsYmFja3Muc3BsaWNlKDAsIF9jYWxsYmFja3MubGVuZ3RoKTtcbiAgICAgIH07IC8vIHN0ZXAgYW5kIHJlbW92ZSBpZiBkb25lXG5cblxuICAgICAgZm9yICh2YXIgaSA9IGN1cnJlbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGFuaSA9IGN1cnJlbnRbaV07XG4gICAgICAgIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcblxuICAgICAgICBpZiAoYW5pX3Auc3RvcHBlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGFuaV9wLmhvb2tlZCA9IGZhbHNlO1xuICAgICAgICAgIGFuaV9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICBhbmlfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgY2FsbGJhY2tzKGFuaV9wLmZyYW1lcyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuaV9wLnBsYXlpbmcgJiYgIWFuaV9wLmFwcGx5aW5nKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gYW4gYXBwbHkoKSB3aGlsZSBwbGF5aW5nIHNob3VsZG4ndCBkbyBhbnl0aGluZ1xuXG5cbiAgICAgICAgaWYgKGFuaV9wLnBsYXlpbmcgJiYgYW5pX3AuYXBwbHlpbmcpIHtcbiAgICAgICAgICBhbmlfcC5hcHBseWluZyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbmlfcC5zdGFydGVkKSB7XG4gICAgICAgICAgc3RhcnRBbmltYXRpb24oZWxlLCBhbmksIG5vdyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGVwJDEoZWxlLCBhbmksIG5vdywgaXNDb3JlKTtcblxuICAgICAgICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICAgICAgICBhbmlfcC5hcHBseWluZyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2tzKGFuaV9wLmZyYW1lcyk7XG5cbiAgICAgICAgaWYgKGFuaV9wLnN0ZXAgIT0gbnVsbCkge1xuICAgICAgICAgIGFuaV9wLnN0ZXAobm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbmkuY29tcGxldGVkKCkpIHtcbiAgICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTtcbiAgICAgICAgICBhbmlfcC5ob29rZWQgPSBmYWxzZTtcbiAgICAgICAgICBhbmlfcC5wbGF5aW5nID0gZmFsc2U7XG4gICAgICAgICAgYW5pX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgIGNhbGxiYWNrcyhhbmlfcC5jb21wbGV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmFuQW5pcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDb3JlICYmIGN1cnJlbnQubGVuZ3RoID09PSAwICYmIHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkb25lRWxlcy5wdXNoKGVsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByYW5BbmlzO1xuICAgIH0gLy8gc3RlcEVsZW1lbnRcbiAgICAvLyBoYW5kbGUgYWxsIGVsZXNcblxuXG4gICAgdmFyIHJhbkVsZUFuaSA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbGVzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tlXTtcbiAgICAgIHZhciBoYW5kbGVkVGhpc0VsZSA9IHN0ZXBPbmUoZWxlKTtcbiAgICAgIHJhbkVsZUFuaSA9IHJhbkVsZUFuaSB8fCBoYW5kbGVkVGhpc0VsZTtcbiAgICB9IC8vIGVhY2ggZWxlbWVudFxuXG5cbiAgICB2YXIgcmFuQ29yZUFuaSA9IHN0ZXBPbmUoY3ksIHRydWUpOyAvLyBub3RpZnkgcmVuZGVyZXJcblxuICAgIGlmIChyYW5FbGVBbmkgfHwgcmFuQ29yZUFuaSkge1xuICAgICAgaWYgKGVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjeS5ub3RpZnkoJ2RyYXcnLCBlbGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgICAgfVxuICAgIH0gLy8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gbGlzdCBvZiBjdXJyZW50bHkgYW5pbWF0aW5nIGlmIGl0cyBxdWV1ZXMgYXJlIGVtcHR5XG5cblxuICAgIGVsZXMudW5tZXJnZShkb25lRWxlcyk7XG4gICAgY3kuZW1pdCgnc3RlcCcpO1xuICB9IC8vIHN0ZXBBbGxcblxuICB2YXIgY29yZWZuJDggPSB7XG4gICAgLy8gcHVsbCBpbiBhbmltYXRpb24gZnVuY3Rpb25zXG4gICAgYW5pbWF0ZTogZGVmaW5lLmFuaW1hdGUoKSxcbiAgICBhbmltYXRpb246IGRlZmluZS5hbmltYXRpb24oKSxcbiAgICBhbmltYXRlZDogZGVmaW5lLmFuaW1hdGVkKCksXG4gICAgY2xlYXJRdWV1ZTogZGVmaW5lLmNsZWFyUXVldWUoKSxcbiAgICBkZWxheTogZGVmaW5lLmRlbGF5KCksXG4gICAgZGVsYXlBbmltYXRpb246IGRlZmluZS5kZWxheUFuaW1hdGlvbigpLFxuICAgIHN0b3A6IGRlZmluZS5zdG9wKCksXG4gICAgYWRkVG9BbmltYXRpb25Qb29sOiBmdW5jdGlvbiBhZGRUb0FuaW1hdGlvblBvb2woZWxlcykge1xuICAgICAgdmFyIGN5ID0gdGhpcztcblxuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHNhdmUgY3ljbGVzIHdoZW4gbm8gc3R5bGUgdXNlZFxuXG5cbiAgICAgIGN5Ll9wcml2YXRlLmFuaUVsZXMubWVyZ2UoZWxlcyk7XG4gICAgfSxcbiAgICBzdG9wQW5pbWF0aW9uTG9vcDogZnVuY3Rpb24gc3RvcEFuaW1hdGlvbkxvb3AoKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nID0gZmFsc2U7XG4gICAgfSxcbiAgICBzdGFydEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uIHN0YXJ0QW5pbWF0aW9uTG9vcCgpIHtcbiAgICAgIHZhciBjeSA9IHRoaXM7XG4gICAgICBjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyA9IHRydWU7XG5cbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBzYXZlIGN5Y2xlcyB3aGVuIG5vIHN0eWxlIHVzZWRcbiAgICAgIC8vIE5CIHRoZSBhbmltYXRpb24gbG9vcCB3aWxsIGV4ZWMgaW4gaGVhZGxlc3MgZW52aXJvbm1lbnRzIGlmIHN0eWxlIGVuYWJsZWRcbiAgICAgIC8vIGFuZCBleHBsaWNpdCBjeS5kZXN0cm95KCkgaXMgbmVjZXNzYXJ5IHRvIHN0b3AgdGhlIGxvb3BcblxuXG4gICAgICBmdW5jdGlvbiBoZWFkbGVzc1N0ZXAoKSB7XG4gICAgICAgIGlmICghY3kuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uU3RlcChub3cpIHtcbiAgICAgICAgICBzdGVwQWxsKG5vdywgY3kpO1xuICAgICAgICAgIGhlYWRsZXNzU3RlcCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbmRlcmVyID0gY3kucmVuZGVyZXIoKTtcblxuICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLmJlZm9yZVJlbmRlcikge1xuICAgICAgICAvLyBsZXQgdGhlIHJlbmRlcmVyIHNjaGVkdWxlIGFuaW1hdGlvbnNcbiAgICAgICAgcmVuZGVyZXIuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uIHJlbmRlcmVyQW5pbWF0aW9uU3RlcCh3aWxsRHJhdywgbm93KSB7XG4gICAgICAgICAgc3RlcEFsbChub3csIGN5KTtcbiAgICAgICAgfSwgcmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1hbmFnZSB0aGUgYW5pbWF0aW9uIGxvb3Agb3Vyc2VsdmVzXG4gICAgICAgIGhlYWRsZXNzU3RlcCgpOyAvLyBmaXJzdCBjYWxsXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBlbWl0dGVyT3B0aW9ucyA9IHtcbiAgICBxdWFsaWZpZXJDb21wYXJlOiBmdW5jdGlvbiBxdWFsaWZpZXJDb21wYXJlKHNlbGVjdG9yMSwgc2VsZWN0b3IyKSB7XG4gICAgICBpZiAoc2VsZWN0b3IxID09IG51bGwgfHwgc2VsZWN0b3IyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yMSA9PSBudWxsICYmIHNlbGVjdG9yMiA9PSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yMS5zYW1lVGV4dChzZWxlY3RvcjIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoY3ksIGxpc3RlbmVyLCBldmVudE9iaikge1xuICAgICAgdmFyIHNlbGVjdG9yID0gbGlzdGVuZXIucXVhbGlmaWVyO1xuXG4gICAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY3kgIT09IGV2ZW50T2JqLnRhcmdldCAmJiBlbGVtZW50KGV2ZW50T2JqLnRhcmdldCkgJiYgc2VsZWN0b3IubWF0Y2hlcyhldmVudE9iai50YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhjeSwgZXZ0KSB7XG4gICAgICBldnQuY3kgPSBjeTtcbiAgICAgIGV2dC50YXJnZXQgPSBjeTtcbiAgICB9LFxuICAgIGNhbGxiYWNrQ29udGV4dDogZnVuY3Rpb24gY2FsbGJhY2tDb250ZXh0KGN5LCBsaXN0ZW5lciwgZXZlbnRPYmopIHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5xdWFsaWZpZXIgIT0gbnVsbCA/IGV2ZW50T2JqLnRhcmdldCA6IGN5O1xuICAgIH1cbiAgfTtcblxuICB2YXIgYXJnU2VsZWN0b3IgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgICBpZiAoc3RyaW5nKGFyZykpIHtcbiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoYXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gIH07XG5cbiAgdmFyIGVsZXNmbiA9IHtcbiAgICBjcmVhdGVFbWl0dGVyOiBmdW5jdGlvbiBjcmVhdGVFbWl0dGVyKCkge1xuICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcblxuICAgICAgaWYgKCFfcC5lbWl0dGVyKSB7XG4gICAgICAgIF9wLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcihlbWl0dGVyT3B0aW9ucywgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1pdHRlcjogZnVuY3Rpb24gZW1pdHRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXI7XG4gICAgfSxcbiAgICBvbjogZnVuY3Rpb24gb24oZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsZWN0b3Ioc2VsZWN0b3IpLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBhcmdTZWxlY3RvcihzZWxlY3RvciksIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIoKS5vbmUoZXZlbnRzLCBhcmdTZWxlY3RvcihzZWxlY3RvciksIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdChldmVudHMsIGV4dHJhUGFyYW1zKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0QW5kTm90aWZ5OiBmdW5jdGlvbiBlbWl0QW5kTm90aWZ5KGV2ZW50LCBlbGVzKSB7XG4gICAgICB0aGlzLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5ub3RpZnkoZXZlbnQsIGVsZXMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuICBkZWZpbmUuZXZlbnRBbGlhc2VzT24oZWxlc2ZuKTtcblxuICB2YXIgY29yZWZuJDcgPSB7XG4gICAgcG5nOiBmdW5jdGlvbiBwbmcob3B0aW9ucykge1xuICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLnBuZyhvcHRpb25zKTtcbiAgICB9LFxuICAgIGpwZzogZnVuY3Rpb24ganBnKG9wdGlvbnMpIHtcbiAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3ByaXZhdGUucmVuZGVyZXI7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgIG9wdGlvbnMuYmcgPSBvcHRpb25zLmJnIHx8ICcjZmZmJztcbiAgICAgIHJldHVybiByZW5kZXJlci5qcGcob3B0aW9ucyk7XG4gICAgfVxuICB9O1xuICBjb3JlZm4kNy5qcGVnID0gY29yZWZuJDcuanBnO1xuXG4gIHZhciBjb3JlZm4kNiA9IHtcbiAgICBsYXlvdXQ6IGZ1bmN0aW9uIGxheW91dChvcHRpb25zKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdMYXlvdXQgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICB2YXIgTGF5b3V0ID0gY3kuZXh0ZW5zaW9uKCdsYXlvdXQnLCBuYW1lKTtcblxuICAgICAgaWYgKExheW91dCA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdObyBzdWNoIGxheW91dCBgJyArIG5hbWUgKyAnYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZXM7XG5cbiAgICAgIGlmIChzdHJpbmcob3B0aW9ucy5lbGVzKSkge1xuICAgICAgICBlbGVzID0gY3kuJChvcHRpb25zLmVsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlcyA9IG9wdGlvbnMuZWxlcyAhPSBudWxsID8gb3B0aW9ucy5lbGVzIDogY3kuJCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGF5b3V0ID0gbmV3IExheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgY3k6IGN5LFxuICAgICAgICBlbGVzOiBlbGVzXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gbGF5b3V0O1xuICAgIH1cbiAgfTtcbiAgY29yZWZuJDYuY3JlYXRlTGF5b3V0ID0gY29yZWZuJDYubWFrZUxheW91dCA9IGNvcmVmbiQ2LmxheW91dDtcblxuICB2YXIgY29yZWZuJDUgPSB7XG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoZXZlbnROYW1lLCBldmVudEVsZXMpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmICh0aGlzLmJhdGNoaW5nKCkpIHtcbiAgICAgICAgX3AuYmF0Y2hOb3RpZmljYXRpb25zID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zIHx8IHt9O1xuICAgICAgICB2YXIgZWxlcyA9IF9wLmJhdGNoTm90aWZpY2F0aW9uc1tldmVudE5hbWVdID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zW2V2ZW50TmFtZV0gfHwgdGhpcy5jb2xsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGV2ZW50RWxlcyAhPSBudWxsKSB7XG4gICAgICAgICAgZWxlcy5tZXJnZShldmVudEVsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuOyAvLyBub3RpZmljYXRpb25zIGFyZSBkaXNhYmxlZCBkdXJpbmcgYmF0Y2hpbmdcbiAgICAgIH1cblxuICAgICAgaWYgKCFfcC5ub3RpZmljYXRpb25zRW5hYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGV4aXQgb24gZGlzYWJsZWRcblxuXG4gICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyKCk7IC8vIGV4aXQgaWYgZGVzdHJveSgpIGNhbGxlZCBvbiBjb3JlIG9yIHJlbmRlcmVyIGluIGJldHdlZW4gZnJhbWVzICMxNDk5ICMxNTI4XG5cbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCgpIHx8ICFyZW5kZXJlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcmVyLm5vdGlmeShldmVudE5hbWUsIGV2ZW50RWxlcyk7XG4gICAgfSxcbiAgICBub3RpZmljYXRpb25zOiBmdW5jdGlvbiBub3RpZmljYXRpb25zKGJvb2wpIHtcbiAgICAgIHZhciBwID0gdGhpcy5fcHJpdmF0ZTtcblxuICAgICAgaWYgKGJvb2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcC5ub3RpZmljYXRpb25zRW5hYmxlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAubm90aWZpY2F0aW9uc0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIG5vTm90aWZpY2F0aW9uczogZnVuY3Rpb24gbm9Ob3RpZmljYXRpb25zKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyh0cnVlKTtcbiAgICB9LFxuICAgIGJhdGNoaW5nOiBmdW5jdGlvbiBiYXRjaGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQgPiAwO1xuICAgIH0sXG4gICAgc3RhcnRCYXRjaDogZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmIChfcC5iYXRjaENvdW50ID09IG51bGwpIHtcbiAgICAgICAgX3AuYmF0Y2hDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICAgIF9wLmJhdGNoU3R5bGVFbGVzID0gdGhpcy5jb2xsZWN0aW9uKCk7XG4gICAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBfcC5iYXRjaENvdW50Kys7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZEJhdGNoOiBmdW5jdGlvbiBlbmRCYXRjaCgpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBfcC5iYXRjaENvdW50LS07XG5cbiAgICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBzdHlsZSBmb3IgZGlydHkgZWxlc1xuICAgICAgICBfcC5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO1xuXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIoKTsgLy8gbm90aWZ5IHRoZSByZW5kZXJlciBvZiBxdWV1ZWQgZWxlcyBhbmQgZXZlbnQgdHlwZXNcblxuICAgICAgICBPYmplY3Qua2V5cyhfcC5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIHZhciBlbGVzID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zW2V2ZW50TmFtZV07XG5cbiAgICAgICAgICBpZiAoZWxlcy5lbXB0eSgpKSB7XG4gICAgICAgICAgICByZW5kZXJlci5ub3RpZnkoZXZlbnROYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyZXIubm90aWZ5KGV2ZW50TmFtZSwgZWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBiYXRjaDogZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuc3RhcnRCYXRjaCgpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIHRoaXMuZW5kQmF0Y2goKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgYmF0Y2hEYXRhOiBmdW5jdGlvbiBiYXRjaERhdGEobWFwKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMobWFwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICAgICAgICB2YXIgZGF0YSA9IG1hcFtpZF07XG4gICAgICAgICAgdmFyIGVsZSA9IGN5LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgICBlbGUuZGF0YShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZW5kZXJlckRlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gICAgaGlkZUVkZ2VzT25WaWV3cG9ydDogZmFsc2UsXG4gICAgdGV4dHVyZU9uVmlld3BvcnQ6IGZhbHNlLFxuICAgIG1vdGlvbkJsdXI6IGZhbHNlLFxuICAgIG1vdGlvbkJsdXJPcGFjaXR5OiAwLjA1LFxuICAgIHBpeGVsUmF0aW86IHVuZGVmaW5lZCxcbiAgICBkZXNrdG9wVGFwVGhyZXNob2xkOiA0LFxuICAgIHRvdWNoVGFwVGhyZXNob2xkOiA4LFxuICAgIHdoZWVsU2Vuc2l0aXZpdHk6IDEsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIHNob3dGcHM6IGZhbHNlXG4gIH0pO1xuICB2YXIgY29yZWZuJDQgPSB7XG4gICAgcmVuZGVyVG86IGZ1bmN0aW9uIHJlbmRlclRvKGNvbnRleHQsIHpvb20sIHBhbiwgcHhSYXRpbykge1xuICAgICAgdmFyIHIgPSB0aGlzLl9wcml2YXRlLnJlbmRlcmVyO1xuICAgICAgci5yZW5kZXJUbyhjb250ZXh0LCB6b29tLCBwYW4sIHB4UmF0aW8pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW5kZXJlcjogZnVuY3Rpb24gcmVuZGVyZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICB9LFxuICAgIGZvcmNlUmVuZGVyOiBmdW5jdGlvbiBmb3JjZVJlbmRlcigpIHtcbiAgICAgIHRoaXMubm90aWZ5KCdkcmF3Jyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgdGhpcy5pbnZhbGlkYXRlU2l6ZSgpO1xuICAgICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdyZXNpemUnKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgaW5pdFJlbmRlcmVyOiBmdW5jdGlvbiBpbml0UmVuZGVyZXIob3B0aW9ucykge1xuICAgICAgdmFyIGN5ID0gdGhpcztcbiAgICAgIHZhciBSZW5kZXJlclByb3RvID0gY3kuZXh0ZW5zaW9uKCdyZW5kZXJlcicsIG9wdGlvbnMubmFtZSk7XG5cbiAgICAgIGlmIChSZW5kZXJlclByb3RvID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoXCJDYW4gbm90IGluaXRpYWxpc2U6IE5vIHN1Y2ggcmVuZGVyZXIgYFwiLmNvbmNhdChvcHRpb25zLm5hbWUsIFwiYCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD9cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndoZWVsU2Vuc2l0aXZpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuKFwiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgck9wdHMgPSByZW5kZXJlckRlZmF1bHRzKG9wdGlvbnMpO1xuICAgICAgck9wdHMuY3kgPSBjeTtcbiAgICAgIGN5Ll9wcml2YXRlLnJlbmRlcmVyID0gbmV3IFJlbmRlcmVyUHJvdG8ock9wdHMpO1xuICAgICAgdGhpcy5ub3RpZnkoJ2luaXQnKTtcbiAgICB9LFxuICAgIGRlc3Ryb3lSZW5kZXJlcjogZnVuY3Rpb24gZGVzdHJveVJlbmRlcmVyKCkge1xuICAgICAgdmFyIGN5ID0gdGhpcztcbiAgICAgIGN5Lm5vdGlmeSgnZGVzdHJveScpOyAvLyBkZXN0cm95IHRoZSByZW5kZXJlclxuXG4gICAgICB2YXIgZG9tRWxlID0gY3kuY29udGFpbmVyKCk7XG5cbiAgICAgIGlmIChkb21FbGUpIHtcbiAgICAgICAgZG9tRWxlLl9jeXJlZyA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKGRvbUVsZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkb21FbGUucmVtb3ZlQ2hpbGQoZG9tRWxlLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN5Ll9wcml2YXRlLnJlbmRlcmVyID0gbnVsbDsgLy8gdG8gYmUgZXh0cmEgc2FmZSwgcmVtb3ZlIHRoZSByZWZcblxuICAgICAgY3kubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgX3AucnNjcmF0Y2ggPSB7fTtcbiAgICAgICAgX3AucnN0eWxlID0ge307XG4gICAgICAgIF9wLmFuaW1hdGlvbi5jdXJyZW50ID0gW107XG4gICAgICAgIF9wLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBvblJlbmRlcjogZnVuY3Rpb24gb25SZW5kZXIoZm4pIHtcbiAgICAgIHJldHVybiB0aGlzLm9uKCdyZW5kZXInLCBmbik7XG4gICAgfSxcbiAgICBvZmZSZW5kZXI6IGZ1bmN0aW9uIG9mZlJlbmRlcihmbikge1xuICAgICAgcmV0dXJuIHRoaXMub2ZmKCdyZW5kZXInLCBmbik7XG4gICAgfVxuICB9O1xuICBjb3JlZm4kNC5pbnZhbGlkYXRlRGltZW5zaW9ucyA9IGNvcmVmbiQ0LnJlc2l6ZTtcblxuICB2YXIgY29yZWZuJDMgPSB7XG4gICAgLy8gZ2V0IGEgY29sbGVjdGlvblxuICAgIC8vIC0gZW1wdHkgY29sbGVjdGlvbiBvbiBubyBhcmdzXG4gICAgLy8gLSBjb2xsZWN0aW9uIG9mIGVsZW1lbnRzIGluIHRoZSBncmFwaCBvbiBzZWxlY3RvciBhcmdcbiAgICAvLyAtIGd1YXJhbnRlZSBhIHJldHVybmVkIGNvbGxlY3Rpb24gd2hlbiBlbGVtZW50cyBvciBjb2xsZWN0aW9uIHNwZWNpZmllZFxuICAgIGNvbGxlY3Rpb246IGZ1bmN0aW9uIGNvbGxlY3Rpb24oZWxlcywgb3B0cykge1xuICAgICAgaWYgKHN0cmluZyhlbGVzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy4kKGVsZXMpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKGVsZXMpKSB7XG4gICAgICAgIHJldHVybiBlbGVzLmNvbGxlY3Rpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJyYXkoZWxlcykpIHtcbiAgICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMsIGVsZXMsIG9wdHMudW5pcXVlLCBvcHRzLnJlbW92ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcyk7XG4gICAgfSxcbiAgICBub2RlczogZnVuY3Rpb24gbm9kZXMoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBub2RlcyA9IHRoaXMuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub2Rlcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZXM7XG4gICAgfSxcbiAgICBlZGdlczogZnVuY3Rpb24gZWRnZXMoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlZGdlcyA9IHRoaXMuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuaXNFZGdlKCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlZGdlcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWRnZXM7XG4gICAgfSxcbiAgICAvLyBzZWFyY2ggdGhlIGdyYXBoIGxpa2UgalF1ZXJ5XG4gICAgJDogZnVuY3Rpb24gJChzZWxlY3Rvcikge1xuICAgICAgdmFyIGVsZXMgPSB0aGlzLl9wcml2YXRlLmVsZW1lbnRzO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGVsZXMuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbGVzLnNwYXduU2VsZigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbXV0YWJsZUVsZW1lbnRzOiBmdW5jdGlvbiBtdXRhYmxlRWxlbWVudHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cztcbiAgICB9XG4gIH07IC8vIGFsaWFzZXNcblxuICBjb3JlZm4kMy5lbGVtZW50cyA9IGNvcmVmbiQzLmZpbHRlciA9IGNvcmVmbiQzLiQ7XG5cbiAgdmFyIHN0eWZuJDggPSB7fTsgLy8ga2V5cyBmb3Igc3R5bGUgYmxvY2tzLCBlLmcuIHR0ZmZ0dFxuXG4gIHZhciBUUlVFID0gJ3QnO1xuICB2YXIgRkFMU0UgPSAnZic7IC8vIChwb3RlbnRpYWxseSBleHBlbnNpdmUgY2FsY3VsYXRpb24pXG4gIC8vIGFwcGx5IHRoZSBzdHlsZSB0byB0aGUgZWxlbWVudCBiYXNlZCBvblxuICAvLyAtIGl0cyBieXBhc3NcbiAgLy8gLSB3aGF0IHNlbGVjdG9ycyBtYXRjaCBpdFxuXG4gIHN0eWZuJDguYXBwbHkgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgX3AgPSBzZWxmLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIHZhciB1cGRhdGVkRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcblxuICAgIGZvciAodmFyIGllID0gMDsgaWUgPCBlbGVzLmxlbmd0aDsgaWUrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaWVdO1xuICAgICAgdmFyIGN4dE1ldGEgPSBzZWxmLmdldENvbnRleHRNZXRhKGVsZSk7XG5cbiAgICAgIGlmIChjeHRNZXRhLmVtcHR5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3h0U3R5bGUgPSBzZWxmLmdldENvbnRleHRTdHlsZShjeHRNZXRhKTtcbiAgICAgIHZhciBhcHAgPSBzZWxmLmFwcGx5Q29udGV4dFN0eWxlKGN4dE1ldGEsIGN4dFN0eWxlLCBlbGUpO1xuXG4gICAgICBpZiAoZWxlLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGUpIHtcbiAgICAgICAgc2VsZi51cGRhdGVUcmFuc2l0aW9ucyhlbGUsIGFwcC5kaWZmUHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGludHNEaWZmID0gc2VsZi51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG5cbiAgICAgIGlmIChoaW50c0RpZmYpIHtcbiAgICAgICAgdXBkYXRlZEVsZXMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH0gLy8gZm9yIGVsZW1lbnRzXG5cblxuICAgIHJldHVybiB1cGRhdGVkRWxlcztcbiAgfTtcblxuICBzdHlmbiQ4LmdldFByb3BlcnRpZXNEaWZmID0gZnVuY3Rpb24gKG9sZEN4dEtleSwgbmV3Q3h0S2V5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBjYWNoZSA9IHNlbGYuX3ByaXZhdGUucHJvcERpZmZzID0gc2VsZi5fcHJpdmF0ZS5wcm9wRGlmZnMgfHwge307XG4gICAgdmFyIGR1YWxDeHRLZXkgPSBvbGRDeHRLZXkgKyAnLScgKyBuZXdDeHRLZXk7XG4gICAgdmFyIGNhY2hlZFZhbCA9IGNhY2hlW2R1YWxDeHRLZXldO1xuXG4gICAgaWYgKGNhY2hlZFZhbCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFZhbDtcbiAgICB9XG5cbiAgICB2YXIgZGlmZlByb3BzID0gW107XG4gICAgdmFyIGFkZGVkUHJvcCA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3h0ID0gc2VsZltpXTtcbiAgICAgIHZhciBvbGRIYXNDeHQgPSBvbGRDeHRLZXlbaV0gPT09IFRSVUU7XG4gICAgICB2YXIgbmV3SGFzQ3h0ID0gbmV3Q3h0S2V5W2ldID09PSBUUlVFO1xuICAgICAgdmFyIGN4dEhhc0RpZmZlZCA9IG9sZEhhc0N4dCAhPT0gbmV3SGFzQ3h0O1xuICAgICAgdmFyIGN4dEhhc01hcHBlZFByb3BzID0gY3h0Lm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGN4dEhhc0RpZmZlZCB8fCBuZXdIYXNDeHQgJiYgY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChjeHRIYXNEaWZmZWQgJiYgY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgICAgICBwcm9wcyA9IGN4dC5wcm9wZXJ0aWVzOyAvLyBzdWZmaWNlcyBiL2MgbWFwcGVkUHJvcGVydGllcyBpcyBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzXG4gICAgICAgIH0gZWxzZSBpZiAoY3h0SGFzRGlmZmVkKSB7XG4gICAgICAgICAgcHJvcHMgPSBjeHQucHJvcGVydGllczsgLy8gbmVlZCB0byBjaGVjayB0aGVtIGFsbFxuICAgICAgICB9IGVsc2UgaWYgKGN4dEhhc01hcHBlZFByb3BzKSB7XG4gICAgICAgICAgcHJvcHMgPSBjeHQubWFwcGVkUHJvcGVydGllczsgLy8gb25seSBuZWVkIHRvIGNoZWNrIG1hcHBlZFxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7IC8vIGlmIGEgbGF0ZXIgY29udGV4dCBvdmVycmlkZXMgdGhpcyBwcm9wZXJ0eSwgdGhlbiB0aGUgZmFjdCB0aGF0IHRoaXMgY29udGV4dCBoYXMgc3dpdGNoZWQvZGlmZmVkIGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgICAgLy8gKHNlbWkgZXhwZW5zaXZlIGNoZWNrIHNpbmNlIGl0IG1ha2VzIHRoaXMgZnVuY3Rpb24gTyhuXjIpIG9uIGNvbnRleHQgbGVuZ3RoLCBidXQgd29ydGggaXQgc2luY2Ugb3ZlcmFsbCByZXN1bHRcbiAgICAgICAgICAvLyBpcyBjYWNoZWQpXG5cbiAgICAgICAgICB2YXIgbGF0ZXJDeHRPdmVycmlkZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSBpICsgMTsgayA8IHNlbGYubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBsYXRlckN4dCA9IHNlbGZba107XG4gICAgICAgICAgICB2YXIgaGFzTGF0ZXJDeHQgPSBuZXdDeHRLZXlba10gPT09IFRSVUU7XG5cbiAgICAgICAgICAgIGlmICghaGFzTGF0ZXJDeHQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IC8vIGNhbid0IG92ZXJyaWRlIHVubGVzcyB0aGUgY29udGV4dCBpcyBhY3RpdmVcblxuXG4gICAgICAgICAgICBsYXRlckN4dE92ZXJyaWRlcyA9IGxhdGVyQ3h0LnByb3BlcnRpZXNbcHJvcC5uYW1lXSAhPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAobGF0ZXJDeHRPdmVycmlkZXMpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIGV4aXQgZWFybHkgYXMgbG9uZyBhcyBvbmUgbGF0ZXIgY29udGV4dCBvdmVycmlkZXNcblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghYWRkZWRQcm9wW25hbWVdICYmICFsYXRlckN4dE92ZXJyaWRlcykge1xuICAgICAgICAgICAgYWRkZWRQcm9wW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIGRpZmZQcm9wcy5wdXNoKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBmb3IgcHJvcHNcblxuICAgICAgfSAvLyBpZlxuXG4gICAgfSAvLyBmb3IgY29udGV4dHNcblxuXG4gICAgY2FjaGVbZHVhbEN4dEtleV0gPSBkaWZmUHJvcHM7XG4gICAgcmV0dXJuIGRpZmZQcm9wcztcbiAgfTtcblxuICBzdHlmbiQ4LmdldENvbnRleHRNZXRhID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3h0S2V5ID0gJyc7XG4gICAgdmFyIGRpZmZQcm9wcztcbiAgICB2YXIgcHJldktleSA9IGVsZS5fcHJpdmF0ZS5zdHlsZUN4dEtleSB8fCAnJzsgLy8gZ2V0IHRoZSBjeHQga2V5XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb250ZXh0ID0gc2VsZltpXTtcbiAgICAgIHZhciBjb250ZXh0U2VsZWN0b3JNYXRjaGVzID0gY29udGV4dC5zZWxlY3RvciAmJiBjb250ZXh0LnNlbGVjdG9yLm1hdGNoZXMoZWxlKTsgLy8gTkI6IGNvbnRleHQuc2VsZWN0b3IgbWF5IGJlIG51bGwgZm9yICdjb3JlJ1xuXG4gICAgICBpZiAoY29udGV4dFNlbGVjdG9yTWF0Y2hlcykge1xuICAgICAgICBjeHRLZXkgKz0gVFJVRTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN4dEtleSArPSBGQUxTRTtcbiAgICAgIH1cbiAgICB9IC8vIGZvciBjb250ZXh0XG5cblxuICAgIGRpZmZQcm9wcyA9IHNlbGYuZ2V0UHJvcGVydGllc0RpZmYocHJldktleSwgY3h0S2V5KTtcbiAgICBlbGUuX3ByaXZhdGUuc3R5bGVDeHRLZXkgPSBjeHRLZXk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogY3h0S2V5LFxuICAgICAgZGlmZlByb3BOYW1lczogZGlmZlByb3BzLFxuICAgICAgZW1wdHk6IGRpZmZQcm9wcy5sZW5ndGggPT09IDBcbiAgICB9O1xuICB9OyAvLyBnZXRzIGEgY29tcHV0ZWQgZWxlIHN0eWxlIG9iamVjdCBiYXNlZCBvbiBtYXRjaGVkIGNvbnRleHRzXG5cblxuICBzdHlmbiQ4LmdldENvbnRleHRTdHlsZSA9IGZ1bmN0aW9uIChjeHRNZXRhKSB7XG4gICAgdmFyIGN4dEtleSA9IGN4dE1ldGEua2V5O1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3h0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzIHx8IHt9OyAvLyBpZiBhbHJlYWR5IGNvbXB1dGVkIHN0eWxlLCByZXR1cm5lZCBjYWNoZWQgY29weVxuXG4gICAgaWYgKGN4dFN0eWxlc1tjeHRLZXldKSB7XG4gICAgICByZXR1cm4gY3h0U3R5bGVzW2N4dEtleV07XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlID0ge1xuICAgICAgX3ByaXZhdGU6IHtcbiAgICAgICAga2V5OiBjeHRLZXlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3h0ID0gc2VsZltpXTtcbiAgICAgIHZhciBoYXNDeHQgPSBjeHRLZXlbaV0gPT09IFRSVUU7XG5cbiAgICAgIGlmICghaGFzQ3h0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN4dC5wcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gY3h0LnByb3BlcnRpZXNbal07XG4gICAgICAgIHN0eWxlW3Byb3AubmFtZV0gPSBwcm9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN4dFN0eWxlc1tjeHRLZXldID0gc3R5bGU7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9O1xuXG4gIHN0eWZuJDguYXBwbHlDb250ZXh0U3R5bGUgPSBmdW5jdGlvbiAoY3h0TWV0YSwgY3h0U3R5bGUsIGVsZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGlmZlByb3BzID0gY3h0TWV0YS5kaWZmUHJvcE5hbWVzO1xuICAgIHZhciByZXREaWZmUHJvcHMgPSB7fTtcbiAgICB2YXIgdHlwZXMgPSBzZWxmLnR5cGVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkaWZmUHJvcE5hbWUgPSBkaWZmUHJvcHNbaV07XG4gICAgICB2YXIgY3h0UHJvcCA9IGN4dFN0eWxlW2RpZmZQcm9wTmFtZV07XG4gICAgICB2YXIgZWxlUHJvcCA9IGVsZS5wc3R5bGUoZGlmZlByb3BOYW1lKTtcblxuICAgICAgaWYgKCFjeHRQcm9wKSB7XG4gICAgICAgIC8vIG5vIGNvbnRleHQgcHJvcCBtZWFucyBkZWxldGVcbiAgICAgICAgaWYgKCFlbGVQcm9wKSB7XG4gICAgICAgICAgY29udGludWU7IC8vIG5vIGV4aXN0aW5nIHByb3AgbWVhbnMgbm90aGluZyBuZWVkcyB0byBiZSByZW1vdmVkXG4gICAgICAgICAgLy8gbmIgYWZmZWN0cyBpbml0aWFsIGFwcGxpY2F0aW9uIG9uIG1hcHBlZCB2YWx1ZXMgbGlrZSBjb250cm9sLXBvaW50LWRpc3RhbmNlc1xuICAgICAgICB9IGVsc2UgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgICAgY3h0UHJvcCA9IHtcbiAgICAgICAgICAgIG5hbWU6IGRpZmZQcm9wTmFtZSxcbiAgICAgICAgICAgIGRlbGV0ZUJ5cGFzc2VkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeHRQcm9wID0ge1xuICAgICAgICAgICAgbmFtZTogZGlmZlByb3BOYW1lLFxuICAgICAgICAgICAgXCJkZWxldGVcIjogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gc2F2ZSBjeWNsZXMgd2hlbiB0aGUgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG5cblxuICAgICAgaWYgKGVsZVByb3AgPT09IGN4dFByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHNhdmUgY3ljbGVzIHdoZW4gYSBtYXBwZWQgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG5cblxuICAgICAgaWYgKGN4dFByb3AubWFwcGVkID09PSB0eXBlcy5mbiAvLyBjb250ZXh0IHByb3AgaXMgZnVuY3Rpb24gbWFwcGVyXG4gICAgICAmJiBlbGVQcm9wICE9IG51bGwgLy8gc29tZSBwcm9wcyBjYW4gYmUgbnVsbCBldmVuIGJ5IGRlZmF1bHQgKGUuZy4gYSBwcm9wIHRoYXQgb3ZlcnJpZGVzIGFub3RoZXIgb25lKVxuICAgICAgJiYgZWxlUHJvcC5tYXBwaW5nICE9IG51bGwgLy8gZWxlIHByb3AgaXMgYSBjb25jcmV0ZSB2YWx1ZSBmcm9tIGZyb20gYSBtYXBwZXJcbiAgICAgICYmIGVsZVByb3AubWFwcGluZy52YWx1ZSA9PT0gY3h0UHJvcC52YWx1ZSAvLyB0aGUgY3VycmVudCBwcm9wIG9uIHRoZSBlbGUgaXMgYSBmbGF0IHByb3AgdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiBtYXBwZXJcbiAgICAgICkge1xuICAgICAgICAvLyBOQiBkb24ndCB3cml0ZSB0byBjeHRQcm9wLCBhcyBpdCdzIHNoYXJlZCBhbW9uZyBlbGVzIChzdG9yZWQgaW4gc3R5bGVzaGVldClcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBlbGVQcm9wLm1hcHBpbmc7IC8vIGNhbiB3cml0ZSB0byBtYXBwaW5nLCBhcyBpdCdzIGEgcGVyLWVsZSBjb3B5XG5cbiAgICAgICAgdmFyIGZuVmFsdWUgPSBtYXBwaW5nLmZuVmFsdWUgPSBjeHRQcm9wLnZhbHVlKGVsZSk7IC8vIHRlbXBvcmFyaWx5IGNhY2hlIHRoZSB2YWx1ZSBpbiBjYXNlIG9mIGEgbWlzc1xuXG4gICAgICAgIGlmIChmblZhbHVlID09PSBtYXBwaW5nLnByZXZGblZhbHVlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJldERpZmZQcm9wID0gcmV0RGlmZlByb3BzW2RpZmZQcm9wTmFtZV0gPSB7XG4gICAgICAgIHByZXY6IGVsZVByb3BcbiAgICAgIH07XG4gICAgICBzZWxmLmFwcGx5UGFyc2VkUHJvcGVydHkoZWxlLCBjeHRQcm9wKTtcbiAgICAgIHJldERpZmZQcm9wLm5leHQgPSBlbGUucHN0eWxlKGRpZmZQcm9wTmFtZSk7XG5cbiAgICAgIGlmIChyZXREaWZmUHJvcC5uZXh0ICYmIHJldERpZmZQcm9wLm5leHQuYnlwYXNzKSB7XG4gICAgICAgIHJldERpZmZQcm9wLm5leHQgPSByZXREaWZmUHJvcC5uZXh0LmJ5cGFzc2VkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaWZmUHJvcHM6IHJldERpZmZQcm9wc1xuICAgIH07XG4gIH07XG5cbiAgc3R5Zm4kOC51cGRhdGVTdHlsZUhpbnRzID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb3BOYW1lcyA9IHNlbGYucHJvcGVydHlHcm91cE5hbWVzO1xuICAgIHZhciBwcm9wR3JLZXlzID0gc2VsZi5wcm9wZXJ0eUdyb3VwS2V5cztcblxuICAgIHZhciBwcm9wSGFzaCA9IGZ1bmN0aW9uIHByb3BIYXNoKGVsZSwgcHJvcE5hbWVzLCBzZWVkS2V5KSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRQcm9wZXJ0aWVzSGFzaChlbGUsIHByb3BOYW1lcywgc2VlZEtleSk7XG4gICAgfTtcblxuICAgIHZhciBvbGRTdHlsZUtleSA9IF9wLnN0eWxlS2V5O1xuXG4gICAgaWYgKGVsZS5yZW1vdmVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgaXNOb2RlID0gX3AuZ3JvdXAgPT09ICdub2Rlcyc7IC8vIGdldCB0aGUgc3R5bGUga2V5IGhhc2hlcyBwZXIgcHJvcCBncm91cFxuICAgIC8vIGJ1dCBsYXppbHkgLS0gb25seSB1c2Ugbm9uLWRlZmF1bHQgcHJvcCB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgaGFzaGVzXG4gICAgLy9cblxuICAgIHZhciBvdmVycmlkZGVuU3R5bGVzID0gZWxlLl9wcml2YXRlLnN0eWxlO1xuICAgIHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG92ZXJyaWRkZW5TdHlsZXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wR3JLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZ3JLZXkgPSBwcm9wR3JLZXlzW2ldO1xuICAgICAgX3Auc3R5bGVLZXlzW2dyS2V5XSA9IFtERUZBVUxUX0hBU0hfU0VFRCwgREVGQVVMVF9IQVNIX1NFRURfQUxUXTtcbiAgICB9XG5cbiAgICB2YXIgdXBkYXRlR3JLZXkxID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkxKHZhbCwgZ3JLZXkpIHtcbiAgICAgIHJldHVybiBfcC5zdHlsZUtleXNbZ3JLZXldWzBdID0gaGFzaEludCh2YWwsIF9wLnN0eWxlS2V5c1tncktleV1bMF0pO1xuICAgIH07XG5cbiAgICB2YXIgdXBkYXRlR3JLZXkyID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkyKHZhbCwgZ3JLZXkpIHtcbiAgICAgIHJldHVybiBfcC5zdHlsZUtleXNbZ3JLZXldWzFdID0gaGFzaEludEFsdCh2YWwsIF9wLnN0eWxlS2V5c1tncktleV1bMV0pO1xuICAgIH07XG5cbiAgICB2YXIgdXBkYXRlR3JLZXkgPSBmdW5jdGlvbiB1cGRhdGVHcktleSh2YWwsIGdyS2V5KSB7XG4gICAgICB1cGRhdGVHcktleTEodmFsLCBncktleSk7XG4gICAgICB1cGRhdGVHcktleTIodmFsLCBncktleSk7XG4gICAgfTtcblxuICAgIHZhciB1cGRhdGVHcktleVdTdHIgPSBmdW5jdGlvbiB1cGRhdGVHcktleVdTdHIoc3RyVmFsLCBncktleSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHJWYWwubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNoID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICAgIHVwZGF0ZUdyS2V5MShjaCwgZ3JLZXkpO1xuICAgICAgICB1cGRhdGVHcktleTIoY2gsIGdyS2V5KTtcbiAgICAgIH1cbiAgICB9OyAvLyAtIGhhc2hpbmcgd29ya3Mgb24gMzIgYml0IGludHMgYi9jIHdlIHVzZSBiaXR3aXNlIG9wc1xuICAgIC8vIC0gc21hbGwgbnVtYmVycyBnZXQgY3V0IG9mZiAoZS5nLiAwLjEyMyBpcyBzZWVuIGFzIDAgYnkgdGhlIGhhc2hpbmcgZnVuY3Rpb24pXG4gICAgLy8gLSByYWlzZSB1cCBzbWFsbCBudW1iZXJzIHNvIG1vcmUgc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSBzZWVuIGJ5IGhhc2hpbmdcbiAgICAvLyAtIG1ha2Ugc21hbGwgbnVtYmVycyBsYXJnZXIgdGhhbiBhIG5vcm1hbCB2YWx1ZSB0byBhdm9pZCBjb2xsaXNpb25zXG4gICAgLy8gLSB3b3JrcyBpbiBwcmFjdGljZSBhbmQgaXQncyByZWxhdGl2ZWx5IGNoZWFwXG5cblxuICAgIHZhciBOID0gMjAwMDAwMDAwMDtcblxuICAgIHZhciBjbGVhbk51bSA9IGZ1bmN0aW9uIGNsZWFuTnVtKHZhbCkge1xuICAgICAgcmV0dXJuIC0xMjggPCB2YWwgJiYgdmFsIDwgMTI4ICYmIE1hdGguZmxvb3IodmFsKSAhPT0gdmFsID8gTiAtICh2YWwgKiAxMDI0IHwgMCkgOiB2YWw7XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wTmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHByb3BOYW1lc1tfaV07XG4gICAgICB2YXIgcGFyc2VkUHJvcCA9IG92ZXJyaWRkZW5TdHlsZXNbbmFtZV07XG5cbiAgICAgIGlmIChwYXJzZWRQcm9wID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wSW5mbyA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgICAgIHZhciB0eXBlID0gcHJvcEluZm8udHlwZTtcbiAgICAgIHZhciBfZ3JLZXkgPSBwcm9wSW5mby5ncm91cEtleTtcbiAgICAgIHZhciBub3JtYWxpemVkTnVtYmVyVmFsID0gdm9pZCAwO1xuXG4gICAgICBpZiAocHJvcEluZm8uaGFzaE92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgICAgbm9ybWFsaXplZE51bWJlclZhbCA9IHByb3BJbmZvLmhhc2hPdmVycmlkZShlbGUsIHBhcnNlZFByb3ApO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZWRQcm9wLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBub3JtYWxpemVkTnVtYmVyVmFsID0gcGFyc2VkUHJvcC5wZlZhbHVlO1xuICAgICAgfSAvLyBtaWdodCBub3QgYmUgYSBudW1iZXIgaWYgaXQgYWxsb3dzIGVudW1zXG5cblxuICAgICAgdmFyIG51bWJlclZhbCA9IHByb3BJbmZvLmVudW1zID09IG51bGwgPyBwYXJzZWRQcm9wLnZhbHVlIDogbnVsbDtcbiAgICAgIHZhciBoYXZlTm9ybU51bSA9IG5vcm1hbGl6ZWROdW1iZXJWYWwgIT0gbnVsbDtcbiAgICAgIHZhciBoYXZlVW5pdGVkTnVtID0gbnVtYmVyVmFsICE9IG51bGw7XG4gICAgICB2YXIgaGF2ZU51bSA9IGhhdmVOb3JtTnVtIHx8IGhhdmVVbml0ZWROdW07XG4gICAgICB2YXIgdW5pdHMgPSBwYXJzZWRQcm9wLnVuaXRzOyAvLyBudW1iZXJzIGFyZSBjaGVhcGVyIHRvIGhhc2ggdGhhbiBzdHJpbmdzXG4gICAgICAvLyAxIGhhc2ggb3AgdnMgbiBoYXNoIG9wcyAoZm9yIGxlbmd0aCBuIHN0cmluZylcblxuICAgICAgaWYgKHR5cGUubnVtYmVyICYmIGhhdmVOdW0gJiYgIXR5cGUubXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIHYgPSBoYXZlTm9ybU51bSA/IG5vcm1hbGl6ZWROdW1iZXJWYWwgOiBudW1iZXJWYWw7XG4gICAgICAgIHVwZGF0ZUdyS2V5KGNsZWFuTnVtKHYpLCBfZ3JLZXkpO1xuXG4gICAgICAgIGlmICghaGF2ZU5vcm1OdW0gJiYgdW5pdHMgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUdyS2V5V1N0cih1bml0cywgX2dyS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlR3JLZXlXU3RyKHBhcnNlZFByb3Auc3RyVmFsdWUsIF9ncktleSk7XG4gICAgICB9XG4gICAgfSAvLyBvdmVyYWxsIHN0eWxlIGtleVxuICAgIC8vXG5cblxuICAgIHZhciBoYXNoID0gW0RFRkFVTFRfSEFTSF9TRUVELCBERUZBVUxUX0hBU0hfU0VFRF9BTFRdO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvcEdyS2V5cy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgX2dyS2V5MiA9IHByb3BHcktleXNbX2kyXTtcbiAgICAgIHZhciBnckhhc2ggPSBfcC5zdHlsZUtleXNbX2dyS2V5Ml07XG4gICAgICBoYXNoWzBdID0gaGFzaEludChnckhhc2hbMF0sIGhhc2hbMF0pO1xuICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoZ3JIYXNoWzFdLCBoYXNoWzFdKTtcbiAgICB9XG5cbiAgICBfcC5zdHlsZUtleSA9IGNvbWJpbmVIYXNoZXMoaGFzaFswXSwgaGFzaFsxXSk7IC8vIGxhYmVsIGRpbXNcbiAgICAvL1xuXG4gICAgdmFyIHNrID0gX3Auc3R5bGVLZXlzO1xuICAgIF9wLmxhYmVsRGltc0tleSA9IGNvbWJpbmVIYXNoZXNBcnJheShzay5sYWJlbERpbWVuc2lvbnMpO1xuICAgIHZhciBsYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsnbGFiZWwnXSwgc2subGFiZWxEaW1lbnNpb25zKTtcbiAgICBfcC5sYWJlbEtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShsYWJlbEtleXMpO1xuICAgIF9wLmxhYmVsU3R5bGVLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkoaGFzaEFycmF5cyhzay5jb21tb25MYWJlbCwgbGFiZWxLZXlzKSk7XG5cbiAgICBpZiAoIWlzTm9kZSkge1xuICAgICAgdmFyIHNvdXJjZUxhYmVsS2V5cyA9IHByb3BIYXNoKGVsZSwgWydzb3VyY2UtbGFiZWwnXSwgc2subGFiZWxEaW1lbnNpb25zKTtcbiAgICAgIF9wLnNvdXJjZUxhYmVsS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KHNvdXJjZUxhYmVsS2V5cyk7XG4gICAgICBfcC5zb3VyY2VMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHNvdXJjZUxhYmVsS2V5cykpO1xuICAgICAgdmFyIHRhcmdldExhYmVsS2V5cyA9IHByb3BIYXNoKGVsZSwgWyd0YXJnZXQtbGFiZWwnXSwgc2subGFiZWxEaW1lbnNpb25zKTtcbiAgICAgIF9wLnRhcmdldExhYmVsS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KHRhcmdldExhYmVsS2V5cyk7XG4gICAgICBfcC50YXJnZXRMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHRhcmdldExhYmVsS2V5cykpO1xuICAgIH0gLy8gbm9kZVxuICAgIC8vXG5cblxuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHZhciBfcCRzdHlsZUtleXMgPSBfcC5zdHlsZUtleXMsXG4gICAgICAgICAgbm9kZUJvZHkgPSBfcCRzdHlsZUtleXMubm9kZUJvZHksXG4gICAgICAgICAgbm9kZUJvcmRlciA9IF9wJHN0eWxlS2V5cy5ub2RlQm9yZGVyLFxuICAgICAgICAgIGJhY2tncm91bmRJbWFnZSA9IF9wJHN0eWxlS2V5cy5iYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICAgICAgY29tcG91bmQgPSBfcCRzdHlsZUtleXMuY29tcG91bmQsXG4gICAgICAgICAgcGllID0gX3Akc3R5bGVLZXlzLnBpZTtcbiAgICAgIHZhciBub2RlS2V5cyA9IFtub2RlQm9keSwgbm9kZUJvcmRlciwgYmFja2dyb3VuZEltYWdlLCBjb21wb3VuZCwgcGllXS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIGsgIT0gbnVsbDtcbiAgICAgIH0pLnJlZHVjZShoYXNoQXJyYXlzLCBbREVGQVVMVF9IQVNIX1NFRUQsIERFRkFVTFRfSEFTSF9TRUVEX0FMVF0pO1xuICAgICAgX3Aubm9kZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShub2RlS2V5cyk7XG4gICAgICBfcC5oYXNQaWUgPSBwaWUgIT0gbnVsbCAmJiBwaWVbMF0gIT09IERFRkFVTFRfSEFTSF9TRUVEICYmIHBpZVsxXSAhPT0gREVGQVVMVF9IQVNIX1NFRURfQUxUO1xuICAgIH1cblxuICAgIHJldHVybiBvbGRTdHlsZUtleSAhPT0gX3Auc3R5bGVLZXk7XG4gIH07XG5cbiAgc3R5Zm4kOC5jbGVhclN0eWxlSGludHMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIF9wLnN0eWxlQ3h0S2V5ID0gJyc7XG4gICAgX3Auc3R5bGVLZXlzID0ge307XG4gICAgX3Auc3R5bGVLZXkgPSBudWxsO1xuICAgIF9wLmxhYmVsS2V5ID0gbnVsbDtcbiAgICBfcC5sYWJlbFN0eWxlS2V5ID0gbnVsbDtcbiAgICBfcC5zb3VyY2VMYWJlbEtleSA9IG51bGw7XG4gICAgX3Auc291cmNlTGFiZWxTdHlsZUtleSA9IG51bGw7XG4gICAgX3AudGFyZ2V0TGFiZWxLZXkgPSBudWxsO1xuICAgIF9wLnRhcmdldExhYmVsU3R5bGVLZXkgPSBudWxsO1xuICAgIF9wLm5vZGVLZXkgPSBudWxsO1xuICAgIF9wLmhhc1BpZSA9IG51bGw7XG4gIH07IC8vIGFwcGx5IGEgcHJvcGVydHkgdG8gdGhlIHN0eWxlIChmb3IgaW50ZXJuYWwgdXNlKVxuICAvLyByZXR1cm5zIHdoZXRoZXIgYXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgLy9cbiAgLy8gbm93LCB0aGlzIGZ1bmN0aW9uIGZsYXR0ZW5zIHRoZSBwcm9wZXJ0eSwgYW5kIGhlcmUncyBob3c6XG4gIC8vXG4gIC8vIGZvciBwYXJzZWRQcm9wOnsgYnlwYXNzOiB0cnVlLCBkZWxldGVCeXBhc3M6IHRydWUgfVxuICAvLyBubyBwcm9wZXJ0eSBpcyBnZW5lcmF0ZWQsIGluc3RlYWQgdGhlIGJ5cGFzcyBwcm9wZXJ0eSBpbiB0aGVcbiAgLy8gZWxlbWVudCdzIHN0eWxlIGlzIHJlcGxhY2VkIGJ5IHdoYXQncyBwb2ludGVkIHRvIGJ5IHRoZSBgYnlwYXNzZWRgXG4gIC8vIGZpZWxkIGluIHRoZSBieXBhc3MgcHJvcGVydHkgKGkuZS4gcmVzdG9yaW5nIHRoZSBwcm9wZXJ0eSB0aGVcbiAgLy8gYnlwYXNzIHdhcyBvdmVycmlkaW5nKVxuICAvL1xuICAvLyBmb3IgcGFyc2VkUHJvcDp7IG1hcHBlZDogdHJ1dGh5IH1cbiAgLy8gdGhlIGdlbmVyYXRlZCBmbGF0dGVuZWRQcm9wOnsgbWFwcGluZzogcHJvcCB9XG4gIC8vXG4gIC8vIGZvciBwYXJzZWRQcm9wOnsgYnlwYXNzOiB0cnVlIH1cbiAgLy8gdGhlIGdlbmVyYXRlZCBmbGF0dGVuZWRQcm9wOnsgYnlwYXNzZWQ6IHBhcnNlZFByb3AgfVxuXG5cbiAgc3R5Zm4kOC5hcHBseVBhcnNlZFByb3BlcnR5ID0gZnVuY3Rpb24gKGVsZSwgcGFyc2VkUHJvcCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvcCA9IHBhcnNlZFByb3A7XG4gICAgdmFyIHN0eWxlID0gZWxlLl9wcml2YXRlLnN0eWxlO1xuICAgIHZhciBmbGF0UHJvcDtcbiAgICB2YXIgdHlwZXMgPSBzZWxmLnR5cGVzO1xuICAgIHZhciB0eXBlID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3AubmFtZV0udHlwZTtcbiAgICB2YXIgcHJvcElzQnlwYXNzID0gcHJvcC5ieXBhc3M7XG4gICAgdmFyIG9yaWdQcm9wID0gc3R5bGVbcHJvcC5uYW1lXTtcbiAgICB2YXIgb3JpZ1Byb3BJc0J5cGFzcyA9IG9yaWdQcm9wICYmIG9yaWdQcm9wLmJ5cGFzcztcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIGZsYXRQcm9wTWFwcGluZyA9ICdtYXBwaW5nJztcblxuICAgIHZhciBnZXRWYWwgPSBmdW5jdGlvbiBnZXRWYWwocCkge1xuICAgICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHAucGZWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwLnZhbHVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgY2hlY2tUcmlnZ2VycyA9IGZ1bmN0aW9uIGNoZWNrVHJpZ2dlcnMoKSB7XG4gICAgICB2YXIgZnJvbVZhbCA9IGdldFZhbChvcmlnUHJvcCk7XG4gICAgICB2YXIgdG9WYWwgPSBnZXRWYWwocHJvcCk7XG4gICAgICBzZWxmLmNoZWNrVHJpZ2dlcnMoZWxlLCBwcm9wLm5hbWUsIGZyb21WYWwsIHRvVmFsKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb3AgJiYgcHJvcC5uYW1lLnN1YnN0cigwLCAzKSA9PT0gJ3BpZScpIHtcbiAgICAgIHdhcm4oJ1RoZSBwaWUgc3R5bGUgcHJvcGVydGllcyBhcmUgZGVwcmVjYXRlZC4gIENyZWF0ZSBjaGFydHMgdXNpbmcgYmFja2dyb3VuZCBpbWFnZXMgaW5zdGVhZC4nKTtcbiAgICB9IC8vIGVkZ2Ugc2FuaXR5IGNoZWNrcyB0byBwcmV2ZW50IHRoZSBjbGllbnQgZnJvbSBtYWtpbmcgc2VyaW91cyBtaXN0YWtlc1xuXG5cbiAgICBpZiAocGFyc2VkUHJvcC5uYW1lID09PSAnY3VydmUtc3R5bGUnICYmIGVsZS5pc0VkZ2UoKSAmJiAoIC8vIGxvb3BzIG11c3QgYmUgYnVuZGxlZCBiZXppZXJzXG4gICAgcGFyc2VkUHJvcC52YWx1ZSAhPT0gJ2JlemllcicgJiYgZWxlLmlzTG9vcCgpIHx8IC8vIGVkZ2VzIGNvbm5lY3RlZCB0byBjb21wb3VuZCBub2RlcyBjYW4gbm90IGJlIGhheXN0YWNrc1xuICAgIHBhcnNlZFByb3AudmFsdWUgPT09ICdoYXlzdGFjaycgJiYgKGVsZS5zb3VyY2UoKS5pc1BhcmVudCgpIHx8IGVsZS50YXJnZXQoKS5pc1BhcmVudCgpKSkpIHtcbiAgICAgIHByb3AgPSBwYXJzZWRQcm9wID0gdGhpcy5wYXJzZShwYXJzZWRQcm9wLm5hbWUsICdiZXppZXInLCBwcm9wSXNCeXBhc3MpO1xuICAgIH1cblxuICAgIGlmIChwcm9wW1wiZGVsZXRlXCJdKSB7XG4gICAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IGFuZCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb24gZmFsc2V5IHZhbHVlXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3AuZGVsZXRlQnlwYXNzZWQpIHtcbiAgICAgIC8vIGRlbGV0ZSB0aGUgcHJvcGVydHkgdGhhdCB0aGVcbiAgICAgIGlmICghb3JpZ1Byb3ApIHtcbiAgICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gY2FuJ3QgZGVsZXRlIGlmIG5vIHByb3BcbiAgICAgIH0gZWxzZSBpZiAob3JpZ1Byb3AuYnlwYXNzKSB7XG4gICAgICAgIC8vIGRlbGV0ZSBieXBhc3NlZFxuICAgICAgICBvcmlnUHJvcC5ieXBhc3NlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gd2UncmUgdW5zdWNjZXNzZnVsIGRlbGV0aW5nIHRoZSBieXBhc3NlZFxuICAgICAgfVxuICAgIH0gLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnlwYXNzXG5cblxuICAgIGlmIChwcm9wLmRlbGV0ZUJ5cGFzcykge1xuICAgICAgLy8gdGhlbiB0aGlzIHByb3BlcnR5IGlzIGp1c3QgaGVyZSB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgaWYgKCFvcmlnUHJvcCkge1xuICAgICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBwcm9wZXJ0eSBpcyBhbHJlYWR5IG5vdCBkZWZpbmVkXG4gICAgICB9IGVsc2UgaWYgKG9yaWdQcm9wLmJ5cGFzcykge1xuICAgICAgICAvLyB0aGVuIHJlcGxhY2UgdGhlIGJ5cGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBvcmlnaW5hbFxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBieXBhc3NlZCBwcm9wZXJ0eSB3YXMgYWxyZWFkeSBhcHBsaWVkIChhbmQgdGhlcmVmb3JlIHBhcnNlZCksIHdlIGNhbiBqdXN0IHJlcGxhY2UgaXQgKG5vIHJlYXBwbHlpbmcgbmVjZXNzYXJ5KVxuICAgICAgICBzdHlsZVtwcm9wLm5hbWVdID0gb3JpZ1Byb3AuYnlwYXNzZWQ7XG4gICAgICAgIGNoZWNrVHJpZ2dlcnMoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHdlJ3JlIHVuc3VjY2Vzc2Z1bCBkZWxldGluZyB0aGUgYnlwYXNzXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByaW50TWFwcGluZ0VyciA9IGZ1bmN0aW9uIHByaW50TWFwcGluZ0VycigpIHtcbiAgICAgIHdhcm4oJ0RvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCcgKyBwcm9wLm5hbWUgKyAnYCB3aXRoIGRhdGEgZmllbGQgYCcgKyBwcm9wLmZpZWxkICsgJ2ApOyB0cnkgYSBgWycgKyBwcm9wLmZpZWxkICsgJ11gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCcgKyBwcm9wLmZpZWxkICsgJ2AgZGVmaW5lZCcpO1xuICAgIH07IC8vIHB1dCB0aGUgcHJvcGVydHkgaW4gdGhlIHN0eWxlIG9iamVjdHNcblxuXG4gICAgc3dpdGNoIChwcm9wLm1hcHBlZCkge1xuICAgICAgLy8gZmxhdHRlbiB0aGUgcHJvcGVydHkgaWYgbWFwcGVkXG4gICAgICBjYXNlIHR5cGVzLm1hcERhdGE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBmbGF0dGVuIHRoZSBmaWVsZCAoZS5nLiBkYXRhLmZvby5iYXIpXG4gICAgICAgICAgdmFyIGZpZWxkcyA9IHByb3AuZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgICAgICB2YXIgZmllbGRWYWwgPSBfcC5kYXRhO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoICYmIGZpZWxkVmFsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIGZpZWxkVmFsID0gZmllbGRWYWxbZmllbGRdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZFZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGVyY2VudDtcblxuICAgICAgICAgIGlmICghbnVtYmVyJDEoZmllbGRWYWwpKSB7XG4gICAgICAgICAgICAvLyB0aGVuIGRvbid0IGFwcGx5IGFuZCBmYWxsIGJhY2sgb24gdGhlIGV4aXN0aW5nIHN0eWxlXG4gICAgICAgICAgICB3YXJuKCdEbyBub3QgdXNlIGNvbnRpbnVvdXMgbWFwcGVycyB3aXRob3V0IHNwZWNpZnlpbmcgbnVtZXJpYyBkYXRhIChpLmUuIGAnICsgcHJvcC5maWVsZCArICc6ICcgKyBmaWVsZFZhbCArICdgIGZvciBgJyArIGVsZS5pZCgpICsgJ2AgaXMgbm9uLW51bWVyaWMpJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmaWVsZFdpZHRoID0gcHJvcC5maWVsZE1heCAtIHByb3AuZmllbGRNaW47XG5cbiAgICAgICAgICAgIGlmIChmaWVsZFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIC8vIHNhZmV0eSBjaGVjayAtLSBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGFzIG5vIHByb3BzIG9mIHplcm8gcmFuZ2Ugc2hvdWxkIGJlIHBhc3NlZCBoZXJlXG4gICAgICAgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVyY2VudCA9IChmaWVsZFZhbCAtIHByb3AuZmllbGRNaW4pIC8gZmllbGRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIG1ha2Ugc3VyZSB0byBib3VuZCBwZXJjZW50IHZhbHVlXG5cblxuICAgICAgICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgICAgICAgcGVyY2VudCA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50ID4gMSkge1xuICAgICAgICAgICAgcGVyY2VudCA9IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgICAgICAgIHZhciByMSA9IHByb3AudmFsdWVNaW5bMF07XG4gICAgICAgICAgICB2YXIgcjIgPSBwcm9wLnZhbHVlTWF4WzBdO1xuICAgICAgICAgICAgdmFyIGcxID0gcHJvcC52YWx1ZU1pblsxXTtcbiAgICAgICAgICAgIHZhciBnMiA9IHByb3AudmFsdWVNYXhbMV07XG4gICAgICAgICAgICB2YXIgYjEgPSBwcm9wLnZhbHVlTWluWzJdO1xuICAgICAgICAgICAgdmFyIGIyID0gcHJvcC52YWx1ZU1heFsyXTtcbiAgICAgICAgICAgIHZhciBhMSA9IHByb3AudmFsdWVNaW5bM10gPT0gbnVsbCA/IDEgOiBwcm9wLnZhbHVlTWluWzNdO1xuICAgICAgICAgICAgdmFyIGEyID0gcHJvcC52YWx1ZU1heFszXSA9PSBudWxsID8gMSA6IHByb3AudmFsdWVNYXhbM107XG4gICAgICAgICAgICB2YXIgY2xyID0gW01hdGgucm91bmQocjEgKyAocjIgLSByMSkgKiBwZXJjZW50KSwgTWF0aC5yb3VuZChnMSArIChnMiAtIGcxKSAqIHBlcmNlbnQpLCBNYXRoLnJvdW5kKGIxICsgKGIyIC0gYjEpICogcGVyY2VudCksIE1hdGgucm91bmQoYTEgKyAoYTIgLSBhMSkgKiBwZXJjZW50KV07XG4gICAgICAgICAgICBmbGF0UHJvcCA9IHtcbiAgICAgICAgICAgICAgLy8gY29sb3VycyBhcmUgc2ltcGxlLCBzbyBqdXN0IGNyZWF0ZSB0aGUgZmxhdCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGV4cGVuc2l2ZSBzdHJpbmcgcGFyc2luZ1xuICAgICAgICAgICAgICBieXBhc3M6IHByb3AuYnlwYXNzLFxuICAgICAgICAgICAgICAvLyB3ZSdyZSBhIGJ5cGFzcyBpZiB0aGUgbWFwcGluZyBwcm9wZXJ0eSBpcyBhIGJ5cGFzc1xuICAgICAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBjbHIsXG4gICAgICAgICAgICAgIHN0clZhbHVlOiAncmdiKCcgKyBjbHJbMF0gKyAnLCAnICsgY2xyWzFdICsgJywgJyArIGNsclsyXSArICcpJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgY2FsY1ZhbHVlID0gcHJvcC52YWx1ZU1pbiArIChwcm9wLnZhbHVlTWF4IC0gcHJvcC52YWx1ZU1pbikgKiBwZXJjZW50O1xuICAgICAgICAgICAgZmxhdFByb3AgPSB0aGlzLnBhcnNlKHByb3AubmFtZSwgY2FsY1ZhbHVlLCBwcm9wLmJ5cGFzcywgZmxhdFByb3BNYXBwaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYW4gb25seSBtYXAgdG8gY29sb3VycyBhbmQgbnVtYmVyc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGNhbid0IGZsYXR0ZW4gdGhlIHByb3BlcnR5LCB0aGVuIGRvbid0IGFwcGx5IHRoZSBwcm9wZXJ0eSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgICAgcHJpbnRNYXBwaW5nRXJyKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmxhdFByb3AubWFwcGluZyA9IHByb3A7IC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1hcHBpbmdcblxuICAgICAgICAgIHByb3AgPSBmbGF0UHJvcDsgLy8gdGhlIGZsYXR0ZW5lZCAobWFwcGVkKSBwcm9wZXJ0eSBpcyB0aGUgb25lIHdlIHdhbnRcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAvLyBkaXJlY3QgbWFwcGluZ1xuXG4gICAgICBjYXNlIHR5cGVzLmRhdGE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBmbGF0dGVuIHRoZSBmaWVsZCAoZS5nLiBkYXRhLmZvby5iYXIpXG4gICAgICAgICAgdmFyIF9maWVsZHMgPSBwcm9wLmZpZWxkLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICB2YXIgX2ZpZWxkVmFsID0gX3AuZGF0YTtcblxuICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IF9maWVsZHMubGVuZ3RoICYmIF9maWVsZFZhbDsgX2kzKyspIHtcbiAgICAgICAgICAgIHZhciBfZmllbGQgPSBfZmllbGRzW19pM107XG4gICAgICAgICAgICBfZmllbGRWYWwgPSBfZmllbGRWYWxbX2ZpZWxkXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2ZpZWxkVmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZsYXRQcm9wID0gdGhpcy5wYXJzZShwcm9wLm5hbWUsIF9maWVsZFZhbCwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFmbGF0UHJvcCkge1xuICAgICAgICAgICAgLy8gaWYgd2UgY2FuJ3QgZmxhdHRlbiB0aGUgcHJvcGVydHksIHRoZW4gZG9uJ3QgYXBwbHkgYW5kIGZhbGwgYmFjayBvbiB0aGUgZXhpc3Rpbmcgc3R5bGVcbiAgICAgICAgICAgIHByaW50TWFwcGluZ0VycigpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZsYXRQcm9wLm1hcHBpbmcgPSBwcm9wOyAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBtYXBwaW5nXG5cbiAgICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIHR5cGVzLmZuOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGZuID0gcHJvcC52YWx1ZTtcbiAgICAgICAgICB2YXIgZm5SZXRWYWwgPSBwcm9wLmZuVmFsdWUgIT0gbnVsbCA/IHByb3AuZm5WYWx1ZSA6IGZuKGVsZSk7IC8vIGNoZWNrIGZvciBjYWNoZWQgdmFsdWUgYmVmb3JlIGNhbGxpbmcgZnVuY3Rpb25cblxuICAgICAgICAgIHByb3AucHJldkZuVmFsdWUgPSBmblJldFZhbDtcblxuICAgICAgICAgIGlmIChmblJldFZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICB3YXJuKCdDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAnICsgcHJvcC5uYW1lICsgJ2AgZm9yIGVsZSBgJyArIGVsZS5pZCgpICsgJ2AgaXMgbnVsbCknKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBmblJldFZhbCwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG5cbiAgICAgICAgICBpZiAoIWZsYXRQcm9wKSB7XG4gICAgICAgICAgICB3YXJuKCdDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBpbnZhbGlkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHR5cGUgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBpbnZhbGlkKScpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZsYXRQcm9wLm1hcHBpbmcgPSBjb3B5KHByb3ApOyAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBtYXBwaW5nXG5cbiAgICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBqdXN0IHNldCB0aGUgcHJvcGVydHlcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gbm90IGEgdmFsaWQgbWFwcGluZ1xuICAgIH0gLy8gaWYgdGhlIHByb3BlcnR5IGlzIGEgYnlwYXNzIHByb3BlcnR5LCB0aGVuIGxpbmsgdGhlIHJlc3VsdGFudCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgb25lXG5cblxuICAgIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICAgIGlmIChvcmlnUHJvcElzQnlwYXNzKSB7XG4gICAgICAgIC8vIHRoZW4gdGhpcyBieXBhc3Mgb3ZlcnJpZGVzIHRoZSBleGlzdGluZyBvbmVcbiAgICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wLmJ5cGFzc2VkOyAvLyBzdGVhbCBieXBhc3NlZCBwcm9wIGZyb20gb2xkIGJ5cGFzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlbiBsaW5rIHRoZSBvcmlnIHByb3AgdG8gdGhlIG5ldyBieXBhc3NcbiAgICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wO1xuICAgICAgfVxuXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDsgLy8gYW5kIHNldFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwcm9wIGlzIG5vdCBieXBhc3NcbiAgICAgIGlmIChvcmlnUHJvcElzQnlwYXNzKSB7XG4gICAgICAgIC8vIHRoZW4ga2VlcCB0aGUgb3JpZyBwcm9wIChzaW5jZSBpdCdzIGEgYnlwYXNzKSBhbmQgbGluayB0byB0aGUgbmV3IHByb3BcbiAgICAgICAgb3JpZ1Byb3AuYnlwYXNzZWQgPSBwcm9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlbiBqdXN0IHJlcGxhY2UgdGhlIG9sZCBwcm9wIHdpdGggdGhlIG5ldyBvbmVcbiAgICAgICAgc3R5bGVbcHJvcC5uYW1lXSA9IHByb3A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tUcmlnZ2VycygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHN0eWZuJDguY2xlYW5FbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVzLCBrZWVwQnlwYXNzZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdGhpcy5jbGVhclN0eWxlSGludHMoZWxlKTtcbiAgICAgIGVsZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcblxuICAgICAgaWYgKCFrZWVwQnlwYXNzZXMpIHtcbiAgICAgICAgZWxlLl9wcml2YXRlLnN0eWxlID0ge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc3R5bGUgPSBlbGUuX3ByaXZhdGUuc3R5bGU7XG4gICAgICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wTmFtZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTmFtZXNbal07XG4gICAgICAgICAgdmFyIGVsZVByb3AgPSBzdHlsZVtwcm9wTmFtZV07XG5cbiAgICAgICAgICBpZiAoZWxlUHJvcCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZWxlUHJvcC5ieXBhc3MpIHtcbiAgICAgICAgICAgICAgZWxlUHJvcC5ieXBhc3NlZCA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHlsZVtwcm9wTmFtZV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gdXBkYXRlcyB0aGUgdmlzdWFsIHN0eWxlIGZvciBhbGwgZWxlbWVudHMgKHVzZWZ1bCBmb3IgbWFudWFsIHN0eWxlIG1vZGlmaWNhdGlvbiBhZnRlciBpbml0KVxuXG5cbiAgc3R5Zm4kOC51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICAgIGVsZXMudXBkYXRlU3R5bGUoKTtcbiAgfTsgLy8gZGlmZlByb3BzIDogeyBuYW1lID0+IHsgcHJldiwgbmV4dCB9IH1cblxuXG4gIHN0eWZuJDgudXBkYXRlVHJhbnNpdGlvbnMgPSBmdW5jdGlvbiAoZWxlLCBkaWZmUHJvcHMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBwcm9wcyA9IGVsZS5wc3R5bGUoJ3RyYW5zaXRpb24tcHJvcGVydHknKS52YWx1ZTtcbiAgICB2YXIgZHVyYXRpb24gPSBlbGUucHN0eWxlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJykucGZWYWx1ZTtcbiAgICB2YXIgZGVsYXkgPSBlbGUucHN0eWxlKCd0cmFuc2l0aW9uLWRlbGF5JykucGZWYWx1ZTtcblxuICAgIGlmIChwcm9wcy5sZW5ndGggPiAwICYmIGR1cmF0aW9uID4gMCkge1xuICAgICAgdmFyIHN0eWxlID0ge307IC8vIGJ1aWxkIHVwIHRoZSBzdHlsZSB0byBhbmltYXRlIHRvd2FyZHNcblxuICAgICAgdmFyIGFueVByZXYgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgICB2YXIgc3R5UHJvcCA9IGVsZS5wc3R5bGUocHJvcCk7XG4gICAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wXTtcblxuICAgICAgICBpZiAoIWRpZmZQcm9wKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJldlByb3AgPSBkaWZmUHJvcC5wcmV2O1xuICAgICAgICB2YXIgZnJvbVByb3AgPSBwcmV2UHJvcDtcbiAgICAgICAgdmFyIHRvUHJvcCA9IGRpZmZQcm9wLm5leHQgIT0gbnVsbCA/IGRpZmZQcm9wLm5leHQgOiBzdHlQcm9wO1xuICAgICAgICB2YXIgZGlmZiA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5pdFZhbCA9IHZvaWQgMDtcbiAgICAgICAgdmFyIGluaXREdCA9IDAuMDAwMDAxOyAvLyBkZWx0YSB0aW1lICUgdmFsdWUgZm9yIGluaXRWYWwgKGFsbG93cyBhbmltYXRpbmcgb3V0IG9mIGluaXQgemVybyBvcGFjaXR5KVxuXG4gICAgICAgIGlmICghZnJvbVByb3ApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjb25zaWRlciBweCB2YWx1ZXNcblxuXG4gICAgICAgIGlmIChudW1iZXIkMShmcm9tUHJvcC5wZlZhbHVlKSAmJiBudW1iZXIkMSh0b1Byb3AucGZWYWx1ZSkpIHtcbiAgICAgICAgICBkaWZmID0gdG9Qcm9wLnBmVmFsdWUgLSBmcm9tUHJvcC5wZlZhbHVlOyAvLyBub256ZXJvIGlzIHRydXRoeVxuXG4gICAgICAgICAgaW5pdFZhbCA9IGZyb21Qcm9wLnBmVmFsdWUgKyBpbml0RHQgKiBkaWZmOyAvLyBjb25zaWRlciBudW1lcmljYWwgdmFsdWVzXG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyJDEoZnJvbVByb3AudmFsdWUpICYmIG51bWJlciQxKHRvUHJvcC52YWx1ZSkpIHtcbiAgICAgICAgICBkaWZmID0gdG9Qcm9wLnZhbHVlIC0gZnJvbVByb3AudmFsdWU7IC8vIG5vbnplcm8gaXMgdHJ1dGh5XG5cbiAgICAgICAgICBpbml0VmFsID0gZnJvbVByb3AudmFsdWUgKyBpbml0RHQgKiBkaWZmOyAvLyBjb25zaWRlciBjb2xvdXIgdmFsdWVzXG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXkoZnJvbVByb3AudmFsdWUpICYmIGFycmF5KHRvUHJvcC52YWx1ZSkpIHtcbiAgICAgICAgICBkaWZmID0gZnJvbVByb3AudmFsdWVbMF0gIT09IHRvUHJvcC52YWx1ZVswXSB8fCBmcm9tUHJvcC52YWx1ZVsxXSAhPT0gdG9Qcm9wLnZhbHVlWzFdIHx8IGZyb21Qcm9wLnZhbHVlWzJdICE9PSB0b1Byb3AudmFsdWVbMl07XG4gICAgICAgICAgaW5pdFZhbCA9IGZyb21Qcm9wLnN0clZhbHVlO1xuICAgICAgICB9IC8vIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyBnb29kIGZvciBhbiBhbmltYXRpb24gb25seSBpZiBpdCdzIGRpZmZlcmVudFxuXG5cbiAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICBzdHlsZVtwcm9wXSA9IHRvUHJvcC5zdHJWYWx1ZTsgLy8gdG8gdmFsXG5cbiAgICAgICAgICB0aGlzLmFwcGx5QnlwYXNzKGVsZSwgcHJvcCwgaW5pdFZhbCk7IC8vIGZyb20gdmFsXG5cbiAgICAgICAgICBhbnlQcmV2ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBlbmQgaWYgcHJvcHMgYWxsb3cgYW5pXG4gICAgICAvLyBjYW4ndCB0cmFuc2l0aW9uIGlmIHRoZXJlJ3Mgbm90aGluZyBwcmV2aW91cyB0byB0cmFuc2l0aW9uIGZyb21cblxuXG4gICAgICBpZiAoIWFueVByZXYpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfcC50cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICAgIGVsZS5kZWxheUFuaW1hdGlvbihkZWxheSkucGxheSgpLnByb21pc2UoKS50aGVuKHJlc29sdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlbGUuYW5pbWF0aW9uKHtcbiAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogZWxlLnBzdHlsZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nKS52YWx1ZSxcbiAgICAgICAgICBxdWV1ZTogZmFsc2VcbiAgICAgICAgfSkucGxheSgpLnByb21pc2UoKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBpZiggIWlzQnlwYXNzICl7XG4gICAgICAgIHNlbGYucmVtb3ZlQnlwYXNzZXMoZWxlLCBwcm9wcyk7XG4gICAgICAgIGVsZS5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyB9XG5cbiAgICAgICAgX3AudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChfcC50cmFuc2l0aW9uaW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZUJ5cGFzc2VzKGVsZSwgcHJvcHMpO1xuICAgICAgZWxlLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7XG4gICAgICBfcC50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHN0eWZuJDguY2hlY2tUcmlnZ2VyID0gZnVuY3Rpb24gKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlLCBnZXRUcmlnZ2VyLCBvblRyaWdnZXIpIHtcbiAgICB2YXIgcHJvcCA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgICB2YXIgdHJpZ2dlckNoZWNrID0gZ2V0VHJpZ2dlcihwcm9wKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hlY2sgIT0gbnVsbCAmJiB0cmlnZ2VyQ2hlY2soZnJvbVZhbHVlLCB0b1ZhbHVlKSkge1xuICAgICAgb25UcmlnZ2VyKHByb3ApO1xuICAgIH1cbiAgfTtcblxuICBzdHlmbiQ4LmNoZWNrWk9yZGVyVHJpZ2dlciA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNoZWNrVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiBwcm9wLnRyaWdnZXJzWk9yZGVyO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl9wcml2YXRlLmN5Lm5vdGlmeSgnem9yZGVyJywgZWxlKTtcbiAgICB9KTtcbiAgfTtcblxuICBzdHlmbiQ4LmNoZWNrQm91bmRzVHJpZ2dlciA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICAgIHRoaXMuY2hlY2tUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlLCBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuIHByb3AudHJpZ2dlcnNCb3VuZHM7XG4gICAgfSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIGVsZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTsgLy8gaWYgdGhlIHByb3AgY2hhbmdlIG1ha2VzIHRoZSBiYiBvZiBwbGwgYmV6aWVyIGVkZ2VzIGludmFsaWQsXG4gICAgICAvLyB0aGVuIGRpcnR5IHRoZSBwbGwgZWRnZSBiYiBjYWNoZSBhcyB3ZWxsXG5cbiAgICAgIGlmICggLy8gb25seSBmb3IgYmV6aWVycyAtLSBzbyBwZXJmb3JtYW5jZSBvZiBvdGhlciBlZGdlcyBpc24ndCBhZmZlY3RlZFxuICAgICAgcHJvcC50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzICYmIChuYW1lID09PSAnY3VydmUtc3R5bGUnICYmIChmcm9tVmFsdWUgPT09ICdiZXppZXInIHx8IHRvVmFsdWUgPT09ICdiZXppZXInKSB8fCBuYW1lID09PSAnZGlzcGxheScgJiYgKGZyb21WYWx1ZSA9PT0gJ25vbmUnIHx8IHRvVmFsdWUgPT09ICdub25lJykpKSB7XG4gICAgICAgIGVsZS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAocGxsRWRnZSkge1xuICAgICAgICAgIGlmIChwbGxFZGdlLmlzQnVuZGxlZEJlemllcigpKSB7XG4gICAgICAgICAgICBwbGxFZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgc3R5Zm4kOC5jaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKSB7XG4gICAgZWxlLmRpcnR5U3R5bGVDYWNoZSgpO1xuICAgIHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbiAgICB0aGlzLmNoZWNrQm91bmRzVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSk7XG4gIH07XG5cbiAgdmFyIHN0eWZuJDcgPSB7fTsgLy8gYnlwYXNzZXMgYXJlIGFwcGxpZWQgdG8gYW4gZXhpc3Rpbmcgc3R5bGUgb24gYW4gZWxlbWVudCwgYW5kIGp1c3QgdGFja2VkIG9uIHRlbXBvcmFyaWx5XG4gIC8vIHJldHVybnMgdHJ1ZSBpZmYgYXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWwgZm9yIGF0IGxlYXN0IDEgc3BlY2lmaWVkIHByb3BlcnR5XG5cbiAgc3R5Zm4kNy5hcHBseUJ5cGFzcyA9IGZ1bmN0aW9uIChlbGVzLCBuYW1lLCB2YWx1ZSwgdXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb3BzID0gW107XG4gICAgdmFyIGlzQnlwYXNzID0gdHJ1ZTsgLy8gcHV0IGFsbCB0aGUgcHJvcGVydGllcyAoY2FuIHNwZWNpZnkgb25lIG9yIG1hbnkpIGluIGFuIGFycmF5IGFmdGVyIHBhcnNpbmcgdGhlbVxuXG4gICAgaWYgKG5hbWUgPT09ICcqJyB8fCBuYW1lID09PSAnKionKSB7XG4gICAgICAvLyBhcHBseSB0byBhbGwgcHJvcGVydHkgbmFtZXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbaV07XG4gICAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgIHZhciBwYXJzZWRQcm9wID0gdGhpcy5wYXJzZShfbmFtZSwgdmFsdWUsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKHBhcnNlZFByb3ApIHtcbiAgICAgICAgICAgIHByb3BzLnB1c2gocGFyc2VkUHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJpbmcobmFtZSkpIHtcbiAgICAgIC8vIHRoZW4gcGFyc2UgdGhlIHNpbmdsZSBwcm9wZXJ0eVxuICAgICAgdmFyIF9wYXJzZWRQcm9wID0gdGhpcy5wYXJzZShuYW1lLCB2YWx1ZSwgdHJ1ZSk7XG5cbiAgICAgIGlmIChfcGFyc2VkUHJvcCkge1xuICAgICAgICBwcm9wcy5wdXNoKF9wYXJzZWRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgICAvLyB0aGVuIHBhcnNlIGVhY2ggcHJvcGVydHlcbiAgICAgIHZhciBzcGVjaWZpZWRQcm9wcyA9IG5hbWU7XG4gICAgICB1cGRhdGVUcmFuc2l0aW9ucyA9IHZhbHVlO1xuICAgICAgdmFyIG5hbWVzID0gT2JqZWN0LmtleXMoc3BlY2lmaWVkUHJvcHMpO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBfbmFtZTIgPSBuYW1lc1tfaV07XG4gICAgICAgIHZhciBfdmFsdWUgPSBzcGVjaWZpZWRQcm9wc1tfbmFtZTJdO1xuXG4gICAgICAgIGlmIChfdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRyeSBjYW1lbCBjYXNlIG5hbWUgdG9vXG4gICAgICAgICAgX3ZhbHVlID0gc3BlY2lmaWVkUHJvcHNbZGFzaDJjYW1lbChfbmFtZTIpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBfcGFyc2VkUHJvcDIgPSB0aGlzLnBhcnNlKF9uYW1lMiwgX3ZhbHVlLCB0cnVlKTtcblxuICAgICAgICAgIGlmIChfcGFyc2VkUHJvcDIpIHtcbiAgICAgICAgICAgIHByb3BzLnB1c2goX3BhcnNlZFByb3AyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCB3ZWxsIGRlZmluZWQgcHJvcGVydGllc1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gd2UndmUgZmFpbGVkIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIG5vdywgYXBwbHkgdGhlIGJ5cGFzcyBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50c1xuXG5cbiAgICB2YXIgcmV0ID0gZmFsc2U7IC8vIHJldHVybiB0cnVlIGlmIGF0IGxlYXN0IG9uZSBzdWNjZXNmdWwgYnlwYXNzIGFwcGxpZWRcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgLy8gZm9yIGVhY2ggZWxlXG4gICAgICB2YXIgZWxlID0gZWxlc1tfaTJdO1xuICAgICAgdmFyIGRpZmZQcm9wcyA9IHt9O1xuICAgICAgdmFyIGRpZmZQcm9wID0gdm9pZCAwO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIC8vIGZvciBlYWNoIHByb3BcbiAgICAgICAgdmFyIF9wcm9wID0gcHJvcHNbal07XG5cbiAgICAgICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShfcHJvcC5uYW1lKTtcbiAgICAgICAgICBkaWZmUHJvcCA9IGRpZmZQcm9wc1tfcHJvcC5uYW1lXSA9IHtcbiAgICAgICAgICAgIHByZXY6IHByZXZQcm9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGNvcHkoX3Byb3ApKSB8fCByZXQ7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUoX3Byb3AubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yIHByb3BzXG5cblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlSGludHMoZWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVHJhbnNpdGlvbnMoZWxlLCBkaWZmUHJvcHMsIGlzQnlwYXNzKTtcbiAgICAgIH1cbiAgICB9IC8vIGZvciBlbGVzXG5cblxuICAgIHJldHVybiByZXQ7XG4gIH07IC8vIG9ubHkgdXNlZnVsIGluIHNwZWNpZmljIGNhc2VzIGxpa2UgYW5pbWF0aW9uXG5cblxuICBzdHlmbiQ3Lm92ZXJyaWRlQnlwYXNzID0gZnVuY3Rpb24gKGVsZXMsIG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IGNhbWVsMmRhc2gobmFtZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdmFyIHByb3AgPSBlbGUuX3ByaXZhdGUuc3R5bGVbbmFtZV07XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcGVydGllc1tuYW1lXS50eXBlO1xuICAgICAgdmFyIGlzQ29sb3IgPSB0eXBlLmNvbG9yO1xuICAgICAgdmFyIGlzTXVsdGkgPSB0eXBlLm11dGlwbGU7XG4gICAgICB2YXIgb2xkVmFsdWUgPSAhcHJvcCA/IG51bGwgOiBwcm9wLnBmVmFsdWUgIT0gbnVsbCA/IHByb3AucGZWYWx1ZSA6IHByb3AudmFsdWU7XG5cbiAgICAgIGlmICghcHJvcCB8fCAhcHJvcC5ieXBhc3MpIHtcbiAgICAgICAgLy8gbmVlZCBhIGJ5cGFzcyBpZiBvbmUgZG9lc24ndCBleGlzdFxuICAgICAgICB0aGlzLmFwcGx5QnlwYXNzKGVsZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChwcm9wLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHByb3AucGZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ29sb3IpIHtcbiAgICAgICAgICBwcm9wLnN0clZhbHVlID0gJ3JnYignICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICBwcm9wLnN0clZhbHVlID0gdmFsdWUuam9pbignICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3Auc3RyVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhlbGUsIG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHN0eWZuJDcucmVtb3ZlQWxsQnlwYXNzZXMgPSBmdW5jdGlvbiAoZWxlcywgdXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3NlcyhlbGVzLCB0aGlzLnByb3BlcnR5TmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgfTtcblxuICBzdHlmbiQ3LnJlbW92ZUJ5cGFzc2VzID0gZnVuY3Rpb24gKGVsZXMsIHByb3BzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICAgIHZhciBpc0J5cGFzcyA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2pdO1xuICAgICAgdmFyIGRpZmZQcm9wcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gcHJvcHNbaV07XG4gICAgICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgICB2YXIgcHJldlByb3AgPSBlbGUucHN0eWxlKHByb3AubmFtZSk7XG5cbiAgICAgICAgaWYgKCFwcmV2UHJvcCB8fCAhcHJldlByb3AuYnlwYXNzKSB7XG4gICAgICAgICAgLy8gaWYgYSBieXBhc3MgZG9lc24ndCBleGlzdCBmb3IgdGhlIHByb3AsIG5vdGhpbmcgbmVlZHMgdG8gYmUgcmVtb3ZlZFxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbHVlID0gJyc7IC8vIGVtcHR5ID0+IHJlbW92ZSBieXBhc3NcblxuICAgICAgICB2YXIgcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUsIHRydWUpO1xuICAgICAgICB2YXIgZGlmZlByb3AgPSBkaWZmUHJvcHNbcHJvcC5uYW1lXSA9IHtcbiAgICAgICAgICBwcmV2OiBwcmV2UHJvcFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoZWxlLCBwYXJzZWRQcm9wKTtcbiAgICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUocHJvcC5uYW1lKTtcbiAgICAgIH0gLy8gZm9yIHByb3BzXG5cblxuICAgICAgdGhpcy51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG5cbiAgICAgIGlmICh1cGRhdGVUcmFuc2l0aW9ucykge1xuICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgZGlmZlByb3BzLCBpc0J5cGFzcyk7XG4gICAgICB9XG4gICAgfSAvLyBmb3IgZWxlc1xuXG4gIH07XG5cbiAgdmFyIHN0eWZuJDYgPSB7fTsgLy8gZ2V0cyB3aGF0IGFuIGVtIHNpemUgY29ycmVzcG9uZHMgdG8gaW4gcGl4ZWxzIHJlbGF0aXZlIHRvIGEgZG9tIGVsZW1lbnRcblxuICBzdHlmbiQ2LmdldEVtU2l6ZUluUGl4ZWxzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBweCA9IHRoaXMuY29udGFpbmVyQ3NzKCdmb250LXNpemUnKTtcblxuICAgIGlmIChweCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChweCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAxOyAvLyBmb3IgaGVhZGxlc3NcbiAgICB9XG4gIH07IC8vIGdldHMgY3NzIHByb3BlcnR5IGZyb20gdGhlIGNvcmUgY29udGFpbmVyXG5cblxuICBzdHlmbiQ2LmNvbnRhaW5lckNzcyA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgdmFyIGRvbUVsZW1lbnQgPSBjeS5jb250YWluZXIoKTtcbiAgICB2YXIgY29udGFpbmVyV2luZG93ID0gY3kud2luZG93KCk7XG5cbiAgICBpZiAoY29udGFpbmVyV2luZG93ICYmIGRvbUVsZW1lbnQgJiYgY29udGFpbmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICAgIHJldHVybiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHN0eWZuJDUgPSB7fTsgLy8gZ2V0cyB0aGUgcmVuZGVyZWQgc3R5bGUgZm9yIGFuIGVsZW1lbnRcblxuICBzdHlmbiQ1LmdldFJlbmRlcmVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlLCBwcm9wKSB7XG4gICAgaWYgKHByb3ApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZShlbGUsIHByb3AsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSYXdTdHlsZShlbGUsIHRydWUpO1xuICAgIH1cbiAgfTsgLy8gZ2V0cyB0aGUgcmF3IHN0eWxlIGZvciBhbiBlbGVtZW50XG5cblxuICBzdHlmbiQ1LmdldFJhd1N0eWxlID0gZnVuY3Rpb24gKGVsZSwgaXNSZW5kZXJlZFZhbCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBlbGUgPSBlbGVbMF07IC8vIGluc3VyZSBpdCdzIGFuIGVsZW1lbnRcblxuICAgIGlmIChlbGUpIHtcbiAgICAgIHZhciByc3R5bGUgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbaV07XG4gICAgICAgIHZhciB2YWwgPSBzZWxmLmdldFN0eWxlUHJvcGVydHlWYWx1ZShlbGUsIHByb3AubmFtZSwgaXNSZW5kZXJlZFZhbCk7XG5cbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgcnN0eWxlW3Byb3AubmFtZV0gPSB2YWw7XG4gICAgICAgICAgcnN0eWxlW2Rhc2gyY2FtZWwocHJvcC5uYW1lKV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJzdHlsZTtcbiAgICB9XG4gIH07XG5cbiAgc3R5Zm4kNS5nZXRJbmRleGVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlLCBwcm9wZXJ0eSwgc3VicHJvcGVydHksIGluZGV4KSB7XG4gICAgdmFyIHBzdHlsZSA9IGVsZS5wc3R5bGUocHJvcGVydHkpW3N1YnByb3BlcnR5XVtpbmRleF07XG4gICAgcmV0dXJuIHBzdHlsZSAhPSBudWxsID8gcHN0eWxlIDogZWxlLmN5KCkuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpW3N1YnByb3BlcnR5XVswXTtcbiAgfTtcblxuICBzdHlmbiQ1LmdldFN0eWxlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChlbGUsIHByb3BOYW1lLCBpc1JlbmRlcmVkVmFsKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGVsZSA9IGVsZVswXTsgLy8gaW5zdXJlIGl0J3MgYW4gZWxlbWVudFxuXG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbcHJvcE5hbWVdO1xuXG4gICAgICBpZiAocHJvcC5hbGlhcykge1xuICAgICAgICBwcm9wID0gcHJvcC5wb2ludHNUbztcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gICAgICB2YXIgc3R5bGVQcm9wID0gZWxlLnBzdHlsZShwcm9wLm5hbWUpO1xuXG4gICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlUHJvcC52YWx1ZSxcbiAgICAgICAgICAgIHVuaXRzID0gc3R5bGVQcm9wLnVuaXRzLFxuICAgICAgICAgICAgc3RyVmFsdWUgPSBzdHlsZVByb3Auc3RyVmFsdWU7XG5cbiAgICAgICAgaWYgKGlzUmVuZGVyZWRWYWwgJiYgdHlwZS5udW1iZXIgJiYgdmFsdWUgIT0gbnVsbCAmJiBudW1iZXIkMSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcblxuICAgICAgICAgIHZhciBnZXRSZW5kZXJlZFZhbHVlID0gZnVuY3Rpb24gZ2V0UmVuZGVyZWRWYWx1ZSh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwgKiB6b29tO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgZ2V0VmFsdWVTdHJpbmdXaXRoVW5pdHMgPSBmdW5jdGlvbiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWwsIHVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmVuZGVyZWRWYWx1ZSh2YWwpICsgdW5pdHM7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciBpc0FycmF5VmFsdWUgPSBhcnJheSh2YWx1ZSk7XG4gICAgICAgICAgdmFyIGhhdmVVbml0cyA9IGlzQXJyYXlWYWx1ZSA/IHVuaXRzLmV2ZXJ5KGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICByZXR1cm4gdSAhPSBudWxsO1xuICAgICAgICAgIH0pIDogdW5pdHMgIT0gbnVsbDtcblxuICAgICAgICAgIGlmIChoYXZlVW5pdHMpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2LCB1bml0c1tpXSk7XG4gICAgICAgICAgICAgIH0pLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWx1ZSwgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nKHYpID8gdiA6ICcnICsgZ2V0UmVuZGVyZWRWYWx1ZSh2KTtcbiAgICAgICAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuICcnICsgZ2V0UmVuZGVyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0clZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHN0eWZuJDUuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZSA9IGZ1bmN0aW9uIChlbGUsIGFuaVByb3BzKSB7XG4gICAgdmFyIHJzdHlsZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmlQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGFuaVByb3AgPSBhbmlQcm9wc1tpXTtcbiAgICAgIHZhciBuYW1lID0gYW5pUHJvcC5uYW1lO1xuICAgICAgdmFyIHN0eWxlUHJvcCA9IGVsZS5wc3R5bGUobmFtZSk7XG5cbiAgICAgIGlmIChzdHlsZVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIG1ha2UgYSBwcm9wIG9mIGl0XG4gICAgICAgIGlmIChwbGFpbk9iamVjdChzdHlsZVByb3ApKSB7XG4gICAgICAgICAgc3R5bGVQcm9wID0gdGhpcy5wYXJzZShuYW1lLCBzdHlsZVByb3Auc3RyVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgIHJzdHlsZVtuYW1lXSA9IHN0eWxlUHJvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnN0eWxlO1xuICB9O1xuXG4gIHN0eWZuJDUuZ2V0UHJvcHNMaXN0ID0gZnVuY3Rpb24gKHByb3BzT2JqKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByc3R5bGUgPSBbXTtcbiAgICB2YXIgc3R5bGUgPSBwcm9wc09iajtcbiAgICB2YXIgcHJvcHMgPSBzZWxmLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICB2YXIgdmFsID0gc3R5bGVbbmFtZV07XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV0gfHwgcHJvcHNbY2FtZWwyZGFzaChuYW1lKV07XG4gICAgICAgIHZhciBzdHlsZVByb3AgPSB0aGlzLnBhcnNlKHByb3AubmFtZSwgdmFsKTtcblxuICAgICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgICAgcnN0eWxlLnB1c2goc3R5bGVQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByc3R5bGU7XG4gIH07XG5cbiAgc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2ggPSBmdW5jdGlvbiAoZWxlLCBwcm9wTmFtZXMsIHNlZWQpIHtcbiAgICB2YXIgaGFzaCA9IHNlZWQuc2xpY2UoKTtcbiAgICB2YXIgbmFtZSwgdmFsLCBzdHJWYWwsIGNoVmFsO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbmFtZSA9IHByb3BOYW1lc1tpXTtcbiAgICAgIHZhbCA9IGVsZS5wc3R5bGUobmFtZSwgZmFsc2UpO1xuXG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaGFzaFswXSA9IGhhc2hJbnQoY2hWYWwsIGhhc2hbMF0pO1xuICAgICAgICBoYXNoWzFdID0gaGFzaEludEFsdChjaFZhbCwgaGFzaFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJWYWwgPSB2YWwuc3RyVmFsdWU7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IHN0clZhbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNoVmFsID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICAgICAgaGFzaFswXSA9IGhhc2hJbnQoY2hWYWwsIGhhc2hbMF0pO1xuICAgICAgICAgIGhhc2hbMV0gPSBoYXNoSW50QWx0KGNoVmFsLCBoYXNoWzFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNoO1xuICB9O1xuXG4gIHN0eWZuJDUuZ2V0UHJvcGVydGllc0hhc2ggPSBzdHlmbiQ1LmdldE5vbkRlZmF1bHRQcm9wZXJ0aWVzSGFzaDtcblxuICB2YXIgc3R5Zm4kNCA9IHt9O1xuXG4gIHN0eWZuJDQuYXBwZW5kRnJvbUpzb24gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBzdHlsZSA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb250ZXh0ID0ganNvbltpXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7XG4gICAgICB2YXIgcHJvcHMgPSBjb250ZXh0LnN0eWxlIHx8IGNvbnRleHQuY3NzO1xuICAgICAgdmFyIG5hbWVzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3IpOyAvLyBhcHBseSBzZWxlY3RvclxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5hbWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZXNbal07XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgICBzdHlsZS5jc3MobmFtZSwgdmFsdWUpOyAvLyBhcHBseSBwcm9wZXJ0eVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfTsgLy8gYWNjZXNzaWJsZSBjeS5zdHlsZSgpIGZ1bmN0aW9uXG5cblxuICBzdHlmbiQ0LmZyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzO1xuICAgIHN0eWxlLnJlc2V0VG9EZWZhdWx0KCk7XG4gICAgc3R5bGUuYXBwZW5kRnJvbUpzb24oanNvbik7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9OyAvLyBnZXQganNvbiBmcm9tIGN5LnN0eWxlKCkgYXBpXG5cblxuICBzdHlmbiQ0Lmpzb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGpzb24gPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSB0aGlzLmRlZmF1bHRMZW5ndGg7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3h0ID0gdGhpc1tpXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IGN4dC5zZWxlY3RvcjtcbiAgICAgIHZhciBwcm9wcyA9IGN4dC5wcm9wZXJ0aWVzO1xuICAgICAgdmFyIGNzcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgIGNzc1twcm9wLm5hbWVdID0gcHJvcC5zdHJWYWx1ZTtcbiAgICAgIH1cblxuICAgICAganNvbi5wdXNoKHtcbiAgICAgICAgc2VsZWN0b3I6ICFzZWxlY3RvciA/ICdjb3JlJyA6IHNlbGVjdG9yLnRvU3RyaW5nKCksXG4gICAgICAgIHN0eWxlOiBjc3NcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9O1xuXG4gIHZhciBzdHlmbiQzID0ge307XG5cbiAgc3R5Zm4kMy5hcHBlbmRGcm9tU3RyaW5nID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3R5bGUgPSB0aGlzO1xuICAgIHZhciByZW1haW5pbmcgPSAnJyArIHN0cmluZztcbiAgICB2YXIgc2VsQW5kQmxvY2tTdHI7XG4gICAgdmFyIGJsb2NrUmVtO1xuICAgIHZhciBwcm9wQW5kVmFsU3RyOyAvLyByZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgc3R5bGUgc3RyaW5nXG5cbiAgICByZW1haW5pbmcgPSByZW1haW5pbmcucmVwbGFjZSgvWy9dWypdKFxcc3wuKSs/WypdWy9dL2csICcnKTtcblxuICAgIGZ1bmN0aW9uIHJlbW92ZVNlbEFuZEJsb2NrRnJvbVJlbWFpbmluZygpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcGFyc2VkIHNlbGVjdG9yIGFuZCBibG9jayBmcm9tIHRoZSByZW1haW5pbmcgdGV4dCB0byBwYXJzZVxuICAgICAgaWYgKHJlbWFpbmluZy5sZW5ndGggPiBzZWxBbmRCbG9ja1N0ci5sZW5ndGgpIHtcbiAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nLnN1YnN0cihzZWxBbmRCbG9ja1N0ci5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtYWluaW5nID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0oKSB7XG4gICAgICAvLyByZW1vdmUgdGhlIHBhcnNlZCBwcm9wZXJ0eSBhbmQgdmFsdWUgZnJvbSB0aGUgcmVtYWluaW5nIGJsb2NrIHRleHQgdG8gcGFyc2VcbiAgICAgIGlmIChibG9ja1JlbS5sZW5ndGggPiBwcm9wQW5kVmFsU3RyLmxlbmd0aCkge1xuICAgICAgICBibG9ja1JlbSA9IGJsb2NrUmVtLnN1YnN0cihwcm9wQW5kVmFsU3RyLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBibG9ja1JlbSA9ICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBub3RoaW5nTGVmdFRvUGFyc2UgPSByZW1haW5pbmcubWF0Y2goL15cXHMqJC8pO1xuXG4gICAgICBpZiAobm90aGluZ0xlZnRUb1BhcnNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsQW5kQmxvY2sgPSByZW1haW5pbmcubWF0Y2goL15cXHMqKCg/Oi58XFxzKSs/KVxccypcXHsoKD86LnxcXHMpKz8pXFx9Lyk7XG5cbiAgICAgIGlmICghc2VsQW5kQmxvY2spIHtcbiAgICAgICAgd2FybignSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogJyArIHJlbWFpbmluZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzZWxBbmRCbG9ja1N0ciA9IHNlbEFuZEJsb2NrWzBdOyAvLyBwYXJzZSB0aGUgc2VsZWN0b3JcblxuICAgICAgdmFyIHNlbGVjdG9yU3RyID0gc2VsQW5kQmxvY2tbMV07XG5cbiAgICAgIGlmIChzZWxlY3RvclN0ciAhPT0gJ2NvcmUnKSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3RvclN0cik7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yLmludmFsaWQpIHtcbiAgICAgICAgICB3YXJuKCdTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIHNlbGVjdG9yIGZvdW5kIGluIHN0cmluZyBzdHlsZXNoZWV0OiAnICsgc2VsZWN0b3JTdHIpOyAvLyBza2lwIHRoaXMgc2VsZWN0b3IgYW5kIGJsb2NrXG5cbiAgICAgICAgICByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBwYXJzZSB0aGUgYmxvY2sgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzXG5cblxuICAgICAgdmFyIGJsb2NrU3RyID0gc2VsQW5kQmxvY2tbMl07XG4gICAgICB2YXIgaW52YWxpZEJsb2NrID0gZmFsc2U7XG4gICAgICBibG9ja1JlbSA9IGJsb2NrU3RyO1xuICAgICAgdmFyIHByb3BzID0gW107XG5cbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgdmFyIF9ub3RoaW5nTGVmdFRvUGFyc2UgPSBibG9ja1JlbS5tYXRjaCgvXlxccyokLyk7XG5cbiAgICAgICAgaWYgKF9ub3RoaW5nTGVmdFRvUGFyc2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9wQW5kVmFsID0gYmxvY2tSZW0ubWF0Y2goL15cXHMqKC4rPylcXHMqOlxccyooLis/KSg/Olxccyo7fFxccyokKS8pO1xuXG4gICAgICAgIGlmICghcHJvcEFuZFZhbCkge1xuICAgICAgICAgIHdhcm4oJ1NraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgZm9ybWF0dGluZyBvZiBzdHlsZSBwcm9wZXJ0eSBhbmQgdmFsdWUgZGVmaW5pdGlvbnMgZm91bmQgaW46JyArIGJsb2NrU3RyKTtcbiAgICAgICAgICBpbnZhbGlkQmxvY2sgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcEFuZFZhbFN0ciA9IHByb3BBbmRWYWxbMF07XG4gICAgICAgIHZhciBwcm9wU3RyID0gcHJvcEFuZFZhbFsxXTtcbiAgICAgICAgdmFyIHZhbFN0ciA9IHByb3BBbmRWYWxbMl07XG4gICAgICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3BTdHJdO1xuXG4gICAgICAgIGlmICghcHJvcCkge1xuICAgICAgICAgIHdhcm4oJ1NraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IG5hbWUgaW46ICcgKyBwcm9wQW5kVmFsU3RyKTsgLy8gc2tpcCB0aGlzIHByb3BlcnR5IGluIHRoZSBibG9ja1xuXG4gICAgICAgICAgcmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0oKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJzZWRQcm9wID0gc3R5bGUucGFyc2UocHJvcFN0ciwgdmFsU3RyKTtcblxuICAgICAgICBpZiAoIXBhcnNlZFByb3ApIHtcbiAgICAgICAgICB3YXJuKCdTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAnICsgcHJvcEFuZFZhbFN0cik7IC8vIHNraXAgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYmxvY2tcblxuICAgICAgICAgIHJlbW92ZVByb3BBbmRWYWxGcm9tUmVtKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBwcm9wU3RyLFxuICAgICAgICAgIHZhbDogdmFsU3RyXG4gICAgICAgIH0pO1xuICAgICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW52YWxpZEJsb2NrKSB7XG4gICAgICAgIHJlbW92ZVNlbEFuZEJsb2NrRnJvbVJlbWFpbmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gcHV0IHRoZSBwYXJzZWQgYmxvY2sgaW4gdGhlIHN0eWxlXG5cblxuICAgICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3JTdHIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfcHJvcCA9IHByb3BzW2ldO1xuICAgICAgICBzdHlsZS5jc3MoX3Byb3AubmFtZSwgX3Byb3AudmFsKTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9O1xuXG4gIHN0eWZuJDMuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzO1xuICAgIHN0eWxlLnJlc2V0VG9EZWZhdWx0KCk7XG4gICAgc3R5bGUuYXBwZW5kRnJvbVN0cmluZyhzdHJpbmcpO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfTtcblxuICB2YXIgc3R5Zm4kMiA9IHt9O1xuXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG51bWJlciQxID0gbnVtYmVyO1xuICAgIHZhciByZ2JhID0gcmdiYU5vQmFja1JlZnM7XG4gICAgdmFyIGhzbGEgPSBoc2xhTm9CYWNrUmVmcztcbiAgICB2YXIgaGV4MyQxID0gaGV4MztcbiAgICB2YXIgaGV4NiQxID0gaGV4NjtcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb24gZGF0YShwcmVmaXgpIHtcbiAgICAgIHJldHVybiAnXicgKyBwcmVmaXggKyAnXFxcXHMqXFxcXChcXFxccyooW1xcXFx3XFxcXC5dKylcXFxccypcXFxcKSQnO1xuICAgIH07XG5cbiAgICB2YXIgbWFwRGF0YSA9IGZ1bmN0aW9uIG1hcERhdGEocHJlZml4KSB7XG4gICAgICB2YXIgbWFwQXJnID0gbnVtYmVyJDEgKyAnfFxcXFx3K3wnICsgcmdiYSArICd8JyArIGhzbGEgKyAnfCcgKyBoZXgzJDEgKyAnfCcgKyBoZXg2JDE7XG4gICAgICByZXR1cm4gJ14nICsgcHJlZml4ICsgJ1xcXFxzKlxcXFwoKFtcXFxcd1xcXFwuXSspXFxcXHMqXFxcXCxcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG1hcEFyZyArICcpXFxcXHMqXFxcXCxcXFxccyooJyArIG1hcEFyZyArICcpXFxcXCkkJztcbiAgICB9O1xuXG4gICAgdmFyIHVybFJlZ2V4ZXMgPSBbJ151cmxcXFxccypcXFxcKFxcXFxzKltcXCdcIl0/KC4rPylbXFwnXCJdP1xcXFxzKlxcXFwpJCcsICdeKG5vbmUpJCcsICdeKC4rKSQnXTsgLy8gZWFjaCB2aXN1YWwgc3R5bGUgcHJvcGVydHkgaGFzIGEgdHlwZSBhbmQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkIGFjY29yZGluZyB0byBpdFxuXG4gICAgc3R5Zm4kMi50eXBlcyA9IHtcbiAgICAgIHRpbWU6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIHVuaXRzOiAnc3xtcycsXG4gICAgICAgIGltcGxpY2l0VW5pdHM6ICdtcydcbiAgICAgIH0sXG4gICAgICBwZXJjZW50OiB7XG4gICAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgdW5pdHM6ICclJyxcbiAgICAgICAgaW1wbGljaXRVbml0czogJyUnXG4gICAgICB9LFxuICAgICAgcGVyY2VudGFnZXM6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMTAwLFxuICAgICAgICB1bml0czogJyUnLFxuICAgICAgICBpbXBsaWNpdFVuaXRzOiAnJScsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgemVyb09uZU51bWJlcjoge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxLFxuICAgICAgICB1bml0bGVzczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHplcm9PbmVOdW1iZXJzOiB7XG4gICAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDEsXG4gICAgICAgIHVuaXRsZXNzOiB0cnVlLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5PbmVPbmVOdW1iZXI6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IC0xLFxuICAgICAgICBtYXg6IDEsXG4gICAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgICB9LFxuICAgICAgbm9uTmVnYXRpdmVJbnQ6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIGludGVnZXI6IHRydWUsXG4gICAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgICB9LFxuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgZW51bXM6IFsncGFyZW50JywgJ29yaWdpbiddXG4gICAgICB9LFxuICAgICAgbm9kZVNpemU6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIGVudW1zOiBbJ2xhYmVsJ11cbiAgICAgIH0sXG4gICAgICBudW1iZXI6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICB1bml0bGVzczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICB1bml0bGVzczogdHJ1ZSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBwb3NpdGl2ZU51bWJlcjoge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIHVuaXRsZXNzOiB0cnVlLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIHN0cmljdE1pbjogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtaW46IDBcbiAgICAgIH0sXG4gICAgICBiaWRpcmVjdGlvbmFsU2l6ZToge1xuICAgICAgICBudW1iZXI6IHRydWVcbiAgICAgIH0sXG4gICAgICAvLyBhbGxvd3MgbmVnYXRpdmVcbiAgICAgIGJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50OiB7XG4gICAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgICAgYWxsb3dQZXJjZW50OiB0cnVlXG4gICAgICB9LFxuICAgICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgICBiaWRpcmVjdGlvbmFsU2l6ZXM6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIC8vIGFsbG93cyBuZWdhdGl2ZVxuICAgICAgc2l6ZU1heWJlUGVyY2VudDoge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgYWxsb3dQZXJjZW50OiB0cnVlXG4gICAgICB9LFxuICAgICAgYXhpc0RpcmVjdGlvbjoge1xuICAgICAgICBlbnVtczogWydob3Jpem9udGFsJywgJ2xlZnR3YXJkJywgJ3JpZ2h0d2FyZCcsICd2ZXJ0aWNhbCcsICd1cHdhcmQnLCAnZG93bndhcmQnLCAnYXV0byddXG4gICAgICB9LFxuICAgICAgcGFkZGluZ1JlbGF0aXZlVG86IHtcbiAgICAgICAgZW51bXM6IFsnd2lkdGgnLCAnaGVpZ2h0JywgJ2F2ZXJhZ2UnLCAnbWluJywgJ21heCddXG4gICAgICB9LFxuICAgICAgYmdXSDoge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgYWxsb3dQZXJjZW50OiB0cnVlLFxuICAgICAgICBlbnVtczogWydhdXRvJ10sXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgYmdQb3M6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBhbGxvd1BlcmNlbnQ6IHRydWUsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgYmdSZWxhdGl2ZVRvOiB7XG4gICAgICAgIGVudW1zOiBbJ2lubmVyJywgJ2luY2x1ZGUtcGFkZGluZyddLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGJnUmVwZWF0OiB7XG4gICAgICAgIGVudW1zOiBbJ3JlcGVhdCcsICdyZXBlYXQteCcsICdyZXBlYXQteScsICduby1yZXBlYXQnXSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBiZ0ZpdDoge1xuICAgICAgICBlbnVtczogWydub25lJywgJ2NvbnRhaW4nLCAnY292ZXInXSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBiZ0Nyb3NzT3JpZ2luOiB7XG4gICAgICAgIGVudW1zOiBbJ2Fub255bW91cycsICd1c2UtY3JlZGVudGlhbHMnLCAnbnVsbCddLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGJnQ2xpcDoge1xuICAgICAgICBlbnVtczogWydub25lJywgJ25vZGUnXSxcbiAgICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICAgIH0sXG4gICAgICBiZ0NvbnRhaW5tZW50OiB7XG4gICAgICAgIGVudW1zOiBbJ2luc2lkZScsICdvdmVyJ10sXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgY29sb3I6IHtcbiAgICAgICAgY29sb3I6IHRydWVcbiAgICAgIH0sXG4gICAgICBjb2xvcnM6IHtcbiAgICAgICAgY29sb3I6IHRydWUsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgZmlsbDoge1xuICAgICAgICBlbnVtczogWydzb2xpZCcsICdsaW5lYXItZ3JhZGllbnQnLCAncmFkaWFsLWdyYWRpZW50J11cbiAgICAgIH0sXG4gICAgICBib29sOiB7XG4gICAgICAgIGVudW1zOiBbJ3llcycsICdubyddXG4gICAgICB9LFxuICAgICAgYm9vbHM6IHtcbiAgICAgICAgZW51bXM6IFsneWVzJywgJ25vJ10sXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgbGluZVN0eWxlOiB7XG4gICAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2RvdHRlZCcsICdkYXNoZWQnXVxuICAgICAgfSxcbiAgICAgIGxpbmVDYXA6IHtcbiAgICAgICAgZW51bXM6IFsnYnV0dCcsICdyb3VuZCcsICdzcXVhcmUnXVxuICAgICAgfSxcbiAgICAgIGJvcmRlclN0eWxlOiB7XG4gICAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2RvdHRlZCcsICdkYXNoZWQnLCAnZG91YmxlJ11cbiAgICAgIH0sXG4gICAgICBjdXJ2ZVN0eWxlOiB7XG4gICAgICAgIGVudW1zOiBbJ2JlemllcicsICd1bmJ1bmRsZWQtYmV6aWVyJywgJ2hheXN0YWNrJywgJ3NlZ21lbnRzJywgJ3N0cmFpZ2h0JywgJ3N0cmFpZ2h0LXRyaWFuZ2xlJywgJ3RheGknXVxuICAgICAgfSxcbiAgICAgIGZvbnRGYW1pbHk6IHtcbiAgICAgICAgcmVnZXg6ICdeKFtcXFxcdy0gXFxcXFwiXSsoPzpcXFxccyosXFxcXHMqW1xcXFx3LSBcXFxcXCJdKykqKSQnXG4gICAgICB9LFxuICAgICAgZm9udFN0eWxlOiB7XG4gICAgICAgIGVudW1zOiBbJ2l0YWxpYycsICdub3JtYWwnLCAnb2JsaXF1ZSddXG4gICAgICB9LFxuICAgICAgZm9udFdlaWdodDoge1xuICAgICAgICBlbnVtczogWydub3JtYWwnLCAnYm9sZCcsICdib2xkZXInLCAnbGlnaHRlcicsICcxMDAnLCAnMjAwJywgJzMwMCcsICc0MDAnLCAnNTAwJywgJzYwMCcsICc4MDAnLCAnOTAwJywgMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDAsIDYwMCwgNzAwLCA4MDAsIDkwMF1cbiAgICAgIH0sXG4gICAgICB0ZXh0RGVjb3JhdGlvbjoge1xuICAgICAgICBlbnVtczogWydub25lJywgJ3VuZGVybGluZScsICdvdmVybGluZScsICdsaW5lLXRocm91Z2gnXVxuICAgICAgfSxcbiAgICAgIHRleHRUcmFuc2Zvcm06IHtcbiAgICAgICAgZW51bXM6IFsnbm9uZScsICd1cHBlcmNhc2UnLCAnbG93ZXJjYXNlJ11cbiAgICAgIH0sXG4gICAgICB0ZXh0V3JhcDoge1xuICAgICAgICBlbnVtczogWydub25lJywgJ3dyYXAnLCAnZWxsaXBzaXMnXVxuICAgICAgfSxcbiAgICAgIHRleHRPdmVyZmxvd1dyYXA6IHtcbiAgICAgICAgZW51bXM6IFsnd2hpdGVzcGFjZScsICdhbnl3aGVyZSddXG4gICAgICB9LFxuICAgICAgdGV4dEJhY2tncm91bmRTaGFwZToge1xuICAgICAgICBlbnVtczogWydyZWN0YW5nbGUnLCAncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJ11cbiAgICAgIH0sXG4gICAgICBub2RlU2hhcGU6IHtcbiAgICAgICAgZW51bXM6IFsncmVjdGFuZ2xlJywgJ3JvdW5kcmVjdGFuZ2xlJywgJ3JvdW5kLXJlY3RhbmdsZScsICdjdXRyZWN0YW5nbGUnLCAnY3V0LXJlY3RhbmdsZScsICdib3R0b21yb3VuZHJlY3RhbmdsZScsICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJywgJ2JhcnJlbCcsICdlbGxpcHNlJywgJ3RyaWFuZ2xlJywgJ3JvdW5kLXRyaWFuZ2xlJywgJ3NxdWFyZScsICdwZW50YWdvbicsICdyb3VuZC1wZW50YWdvbicsICdoZXhhZ29uJywgJ3JvdW5kLWhleGFnb24nLCAnY29uY2F2ZWhleGFnb24nLCAnY29uY2F2ZS1oZXhhZ29uJywgJ2hlcHRhZ29uJywgJ3JvdW5kLWhlcHRhZ29uJywgJ29jdGFnb24nLCAncm91bmQtb2N0YWdvbicsICd0YWcnLCAncm91bmQtdGFnJywgJ3N0YXInLCAnZGlhbW9uZCcsICdyb3VuZC1kaWFtb25kJywgJ3ZlZScsICdyaG9tYm9pZCcsICdyaWdodC1yaG9tYm9pZCcsICdwb2x5Z29uJ11cbiAgICAgIH0sXG4gICAgICBvdmVybGF5U2hhcGU6IHtcbiAgICAgICAgZW51bXM6IFsncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJywgJ2VsbGlwc2UnXVxuICAgICAgfSxcbiAgICAgIGNvbXBvdW5kSW5jbHVkZUxhYmVsczoge1xuICAgICAgICBlbnVtczogWydpbmNsdWRlJywgJ2V4Y2x1ZGUnXVxuICAgICAgfSxcbiAgICAgIGFycm93U2hhcGU6IHtcbiAgICAgICAgZW51bXM6IFsndGVlJywgJ3RyaWFuZ2xlJywgJ3RyaWFuZ2xlLXRlZScsICdjaXJjbGUtdHJpYW5nbGUnLCAndHJpYW5nbGUtY3Jvc3MnLCAndHJpYW5nbGUtYmFja2N1cnZlJywgJ3ZlZScsICdzcXVhcmUnLCAnY2lyY2xlJywgJ2RpYW1vbmQnLCAnY2hldnJvbicsICdub25lJ11cbiAgICAgIH0sXG4gICAgICBhcnJvd0ZpbGw6IHtcbiAgICAgICAgZW51bXM6IFsnZmlsbGVkJywgJ2hvbGxvdyddXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBlbnVtczogWydlbGVtZW50JywgJ25vbmUnXVxuICAgICAgfSxcbiAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgZW51bXM6IFsnaGlkZGVuJywgJ3Zpc2libGUnXVxuICAgICAgfSxcbiAgICAgIHpDb21wb3VuZERlcHRoOiB7XG4gICAgICAgIGVudW1zOiBbJ2JvdHRvbScsICdvcnBoYW4nLCAnYXV0bycsICd0b3AnXVxuICAgICAgfSxcbiAgICAgIHpJbmRleENvbXBhcmU6IHtcbiAgICAgICAgZW51bXM6IFsnYXV0bycsICdtYW51YWwnXVxuICAgICAgfSxcbiAgICAgIHZhbGlnbjoge1xuICAgICAgICBlbnVtczogWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddXG4gICAgICB9LFxuICAgICAgaGFsaWduOiB7XG4gICAgICAgIGVudW1zOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J11cbiAgICAgIH0sXG4gICAgICBqdXN0aWZpY2F0aW9uOiB7XG4gICAgICAgIGVudW1zOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JywgJ2F1dG8nXVxuICAgICAgfSxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgc3RyaW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGF0YToge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogZGF0YSgnZGF0YScpXG4gICAgICB9LFxuICAgICAgbGF5b3V0RGF0YToge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogZGF0YSgnbGF5b3V0RGF0YScpXG4gICAgICB9LFxuICAgICAgc2NyYXRjaDoge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogZGF0YSgnc2NyYXRjaCcpXG4gICAgICB9LFxuICAgICAgbWFwRGF0YToge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogbWFwRGF0YSgnbWFwRGF0YScpXG4gICAgICB9LFxuICAgICAgbWFwTGF5b3V0RGF0YToge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogbWFwRGF0YSgnbWFwTGF5b3V0RGF0YScpXG4gICAgICB9LFxuICAgICAgbWFwU2NyYXRjaDoge1xuICAgICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgICByZWdleDogbWFwRGF0YSgnbWFwU2NyYXRjaCcpXG4gICAgICB9LFxuICAgICAgZm46IHtcbiAgICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgZm46IHRydWVcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgcmVnZXhlczogdXJsUmVnZXhlcyxcbiAgICAgICAgc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiB0cnVlXG4gICAgICB9LFxuICAgICAgdXJsczoge1xuICAgICAgICByZWdleGVzOiB1cmxSZWdleGVzLFxuICAgICAgICBzaW5nbGVSZWdleE1hdGNoVmFsdWU6IHRydWUsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgcHJvcExpc3Q6IHtcbiAgICAgICAgcHJvcExpc3Q6IHRydWVcbiAgICAgIH0sXG4gICAgICBhbmdsZToge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIHVuaXRzOiAnZGVnfHJhZCcsXG4gICAgICAgIGltcGxpY2l0VW5pdHM6ICdyYWQnXG4gICAgICB9LFxuICAgICAgdGV4dFJvdGF0aW9uOiB7XG4gICAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgICAgdW5pdHM6ICdkZWd8cmFkJyxcbiAgICAgICAgaW1wbGljaXRVbml0czogJ3JhZCcsXG4gICAgICAgIGVudW1zOiBbJ25vbmUnLCAnYXV0b3JvdGF0ZSddXG4gICAgICB9LFxuICAgICAgcG9seWdvblBvaW50TGlzdDoge1xuICAgICAgICBudW1iZXI6IHRydWUsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICBldmVuTXVsdGlwbGU6IHRydWUsXG4gICAgICAgIG1pbjogLTEsXG4gICAgICAgIG1heDogMSxcbiAgICAgICAgdW5pdGxlc3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBlZGdlRGlzdGFuY2VzOiB7XG4gICAgICAgIGVudW1zOiBbJ2ludGVyc2VjdGlvbicsICdub2RlLXBvc2l0aW9uJ11cbiAgICAgIH0sXG4gICAgICBlZGdlRW5kcG9pbnQ6IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgdW5pdHM6ICclfHB4fGVtfGRlZ3xyYWQnLFxuICAgICAgICBpbXBsaWNpdFVuaXRzOiAncHgnLFxuICAgICAgICBlbnVtczogWydpbnNpZGUtdG8tbm9kZScsICdvdXRzaWRlLXRvLW5vZGUnLCAnb3V0c2lkZS10by1ub2RlLW9yLWxhYmVsJywgJ291dHNpZGUtdG8tbGluZScsICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnXSxcbiAgICAgICAgc2luZ2xlRW51bTogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKHZhbEFyciwgdW5pdHNBcnIpIHtcbiAgICAgICAgICBzd2l0Y2ggKHZhbEFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgLy8gY2FuIGJlICUgb3IgcHggb25seVxuICAgICAgICAgICAgICByZXR1cm4gdW5pdHNBcnJbMF0gIT09ICdkZWcnICYmIHVuaXRzQXJyWzBdICE9PSAncmFkJyAmJiB1bml0c0FyclsxXSAhPT0gJ2RlZycgJiYgdW5pdHNBcnJbMV0gIT09ICdyYWQnO1xuXG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIC8vIGNhbiBiZSBlbnVtLCBkZWcsIG9yIHJhZCBvbmx5XG4gICAgICAgICAgICAgIHJldHVybiBzdHJpbmcodmFsQXJyWzBdKSB8fCB1bml0c0FyclswXSA9PT0gJ2RlZycgfHwgdW5pdHNBcnJbMF0gPT09ICdyYWQnO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZWFzaW5nOiB7XG4gICAgICAgIHJlZ2V4ZXM6IFsnXihzcHJpbmcpXFxcXHMqXFxcXChcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqXFxcXCkkJywgJ14oY3ViaWMtYmV6aWVyKVxcXFxzKlxcXFwoXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqXFxcXCkkJ10sXG4gICAgICAgIGVudW1zOiBbJ2xpbmVhcicsICdlYXNlJywgJ2Vhc2UtaW4nLCAnZWFzZS1vdXQnLCAnZWFzZS1pbi1vdXQnLCAnZWFzZS1pbi1zaW5lJywgJ2Vhc2Utb3V0LXNpbmUnLCAnZWFzZS1pbi1vdXQtc2luZScsICdlYXNlLWluLXF1YWQnLCAnZWFzZS1vdXQtcXVhZCcsICdlYXNlLWluLW91dC1xdWFkJywgJ2Vhc2UtaW4tY3ViaWMnLCAnZWFzZS1vdXQtY3ViaWMnLCAnZWFzZS1pbi1vdXQtY3ViaWMnLCAnZWFzZS1pbi1xdWFydCcsICdlYXNlLW91dC1xdWFydCcsICdlYXNlLWluLW91dC1xdWFydCcsICdlYXNlLWluLXF1aW50JywgJ2Vhc2Utb3V0LXF1aW50JywgJ2Vhc2UtaW4tb3V0LXF1aW50JywgJ2Vhc2UtaW4tZXhwbycsICdlYXNlLW91dC1leHBvJywgJ2Vhc2UtaW4tb3V0LWV4cG8nLCAnZWFzZS1pbi1jaXJjJywgJ2Vhc2Utb3V0LWNpcmMnLCAnZWFzZS1pbi1vdXQtY2lyYyddXG4gICAgICB9LFxuICAgICAgZ3JhZGllbnREaXJlY3Rpb246IHtcbiAgICAgICAgZW51bXM6IFsndG8tYm90dG9tJywgJ3RvLXRvcCcsICd0by1sZWZ0JywgJ3RvLXJpZ2h0JywgJ3RvLWJvdHRvbS1yaWdodCcsICd0by1ib3R0b20tbGVmdCcsICd0by10b3AtcmlnaHQnLCAndG8tdG9wLWxlZnQnLCAndG8tcmlnaHQtYm90dG9tJywgJ3RvLWxlZnQtYm90dG9tJywgJ3RvLXJpZ2h0LXRvcCcsICd0by1sZWZ0LXRvcCcgLy8gZGlmZmVyZW50IG9yZGVyXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBib3VuZHNFeHBhbnNpb246IHtcbiAgICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUodmFsQXJyKSB7XG4gICAgICAgICAgdmFyIGxlbmd0aCA9IHZhbEFyci5sZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aCA9PT0gMSB8fCBsZW5ndGggPT09IDIgfHwgbGVuZ3RoID09PSA0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgZGlmZiA9IHtcbiAgICAgIHplcm9Ob25aZXJvOiBmdW5jdGlvbiB6ZXJvTm9uWmVybyh2YWwxLCB2YWwyKSB7XG4gICAgICAgIGlmICgodmFsMSA9PSBudWxsIHx8IHZhbDIgPT0gbnVsbCkgJiYgdmFsMSAhPT0gdmFsMikge1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBudWxsIGNhc2VzIGNvdWxkIHJlcHJlc2VudCBhbnkgdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwxID09IDAgJiYgdmFsMiAhPSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsMSAhPSAwICYmIHZhbDIgPT0gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFueTogZnVuY3Rpb24gYW55KHZhbDEsIHZhbDIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDEgIT0gdmFsMjtcbiAgICAgIH0sXG4gICAgICBlbXB0eU5vbkVtcHR5OiBmdW5jdGlvbiBlbXB0eU5vbkVtcHR5KHN0cjEsIHN0cjIpIHtcbiAgICAgICAgdmFyIGVtcHR5MSA9IGVtcHR5U3RyaW5nKHN0cjEpO1xuICAgICAgICB2YXIgZW1wdHkyID0gZW1wdHlTdHJpbmcoc3RyMik7XG4gICAgICAgIHJldHVybiBlbXB0eTEgJiYgIWVtcHR5MiB8fCAhZW1wdHkxICYmIGVtcHR5MjtcbiAgICAgIH1cbiAgICB9OyAvLyBkZWZpbmUgdmlzdWFsIHN0eWxlIHByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0gbi5iLiBhZGRpbmcgYSBuZXcgZ3JvdXAgb2YgcHJvcHMgbWF5IHJlcXVpcmUgdXBkYXRlcyB0byB1cGRhdGVTdHlsZUhpbnRzKClcbiAgICAvLyAtIGFkZGluZyBuZXcgcHJvcHMgdG8gYW4gZXhpc3RpbmcgZ3JvdXAgZ2V0cyBoYW5kbGVkIGF1dG9tYXRpY2FsbHlcblxuICAgIHZhciB0ID0gc3R5Zm4kMi50eXBlcztcbiAgICB2YXIgbWFpbkxhYmVsID0gW3tcbiAgICAgIG5hbWU6ICdsYWJlbCcsXG4gICAgICB0eXBlOiB0LnRleHQsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5lbXB0eU5vbkVtcHR5XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtcm90YXRpb24nLFxuICAgICAgdHlwZTogdC50ZXh0Um90YXRpb24sXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1tYXJnaW4teCcsXG4gICAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtbWFyZ2luLXknLFxuICAgICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciBzb3VyY2VMYWJlbCA9IFt7XG4gICAgICBuYW1lOiAnc291cmNlLWxhYmVsJyxcbiAgICAgIHR5cGU6IHQudGV4dCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzb3VyY2UtdGV4dC1yb3RhdGlvbicsXG4gICAgICB0eXBlOiB0LnRleHRSb3RhdGlvbixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzb3VyY2UtdGV4dC1tYXJnaW4teCcsXG4gICAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3NvdXJjZS10ZXh0LW1hcmdpbi15JyxcbiAgICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnc291cmNlLXRleHQtb2Zmc2V0JyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciB0YXJnZXRMYWJlbCA9IFt7XG4gICAgICBuYW1lOiAndGFyZ2V0LWxhYmVsJyxcbiAgICAgIHR5cGU6IHQudGV4dCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0YXJnZXQtdGV4dC1yb3RhdGlvbicsXG4gICAgICB0eXBlOiB0LnRleHRSb3RhdGlvbixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0YXJnZXQtdGV4dC1tYXJnaW4teCcsXG4gICAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RhcmdldC10ZXh0LW1hcmdpbi15JyxcbiAgICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGFyZ2V0LXRleHQtb2Zmc2V0JyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciBsYWJlbERpbWVuc2lvbnMgPSBbe1xuICAgICAgbmFtZTogJ2ZvbnQtZmFtaWx5JyxcbiAgICAgIHR5cGU6IHQuZm9udEZhbWlseSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdmb250LXN0eWxlJyxcbiAgICAgIHR5cGU6IHQuZm9udFN0eWxlLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgIHR5cGU6IHQuZm9udFdlaWdodCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdmb250LXNpemUnLFxuICAgICAgdHlwZTogdC5zaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtdHJhbnNmb3JtJyxcbiAgICAgIHR5cGU6IHQudGV4dFRyYW5zZm9ybSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LXdyYXAnLFxuICAgICAgdHlwZTogdC50ZXh0V3JhcCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LW92ZXJmbG93LXdyYXAnLFxuICAgICAgdHlwZTogdC50ZXh0T3ZlcmZsb3dXcmFwLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtbWF4LXdpZHRoJyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LW91dGxpbmUtd2lkdGgnLFxuICAgICAgdHlwZTogdC5zaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2xpbmUtaGVpZ2h0JyxcbiAgICAgIHR5cGU6IHQucG9zaXRpdmVOdW1iZXIsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9XTtcbiAgICB2YXIgY29tbW9uTGFiZWwgPSBbe1xuICAgICAgbmFtZTogJ3RleHQtdmFsaWduJyxcbiAgICAgIHR5cGU6IHQudmFsaWduLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtaGFsaWduJyxcbiAgICAgIHR5cGU6IHQuaGFsaWduLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2NvbG9yJyxcbiAgICAgIHR5cGU6IHQuY29sb3JcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1vdXRsaW5lLWNvbG9yJyxcbiAgICAgIHR5cGU6IHQuY29sb3JcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1vdXRsaW5lLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICB0eXBlOiB0LmNvbG9yXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycsXG4gICAgICB0eXBlOiB0LnNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1ib3JkZXItb3BhY2l0eScsXG4gICAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1ib3JkZXItY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LWJvcmRlci13aWR0aCcsXG4gICAgICB0eXBlOiB0LnNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1ib3JkZXItc3R5bGUnLFxuICAgICAgdHlwZTogdC5ib3JkZXJTdHlsZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtc2hhcGUnLFxuICAgICAgdHlwZTogdC50ZXh0QmFja2dyb3VuZFNoYXBlLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtanVzdGlmaWNhdGlvbicsXG4gICAgICB0eXBlOiB0Lmp1c3RpZmljYXRpb25cbiAgICB9XTtcbiAgICB2YXIgYmVoYXZpb3IgPSBbe1xuICAgICAgbmFtZTogJ2V2ZW50cycsXG4gICAgICB0eXBlOiB0LmJvb2xcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGV4dC1ldmVudHMnLFxuICAgICAgdHlwZTogdC5ib29sXG4gICAgfV07XG4gICAgdmFyIHZpc2liaWxpdHkgPSBbe1xuICAgICAgbmFtZTogJ2Rpc3BsYXknLFxuICAgICAgdHlwZTogdC5kaXNwbGF5LFxuICAgICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuYW55LFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgICAgdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczogdHJ1ZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd2aXNpYmlsaXR5JyxcbiAgICAgIHR5cGU6IHQudmlzaWJpbGl0eSxcbiAgICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdvcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlcixcbiAgICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLnplcm9Ob25aZXJvXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RleHQtb3BhY2l0eScsXG4gICAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbWluLXpvb21lZC1mb250LXNpemUnLFxuICAgICAgdHlwZTogdC5zaXplXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3otY29tcG91bmQtZGVwdGgnLFxuICAgICAgdHlwZTogdC56Q29tcG91bmREZXB0aCxcbiAgICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd6LWluZGV4LWNvbXBhcmUnLFxuICAgICAgdHlwZTogdC56SW5kZXhDb21wYXJlLFxuICAgICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3otaW5kZXgnLFxuICAgICAgdHlwZTogdC5ub25OZWdhdGl2ZUludCxcbiAgICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciBvdmVybGF5ID0gW3tcbiAgICAgIG5hbWU6ICdvdmVybGF5LXBhZGRpbmcnLFxuICAgICAgdHlwZTogdC5zaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ292ZXJsYXktY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdvdmVybGF5LW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnb3ZlcmxheS1zaGFwZScsXG4gICAgICB0eXBlOiB0Lm92ZXJsYXlTaGFwZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciB1bmRlcmxheSA9IFt7XG4gICAgICBuYW1lOiAndW5kZXJsYXktcGFkZGluZycsXG4gICAgICB0eXBlOiB0LnNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndW5kZXJsYXktY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd1bmRlcmxheS1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlcixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLnplcm9Ob25aZXJvXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3VuZGVybGF5LXNoYXBlJyxcbiAgICAgIHR5cGU6IHQub3ZlcmxheVNoYXBlLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfV07XG4gICAgdmFyIHRyYW5zaXRpb24gPSBbe1xuICAgICAgbmFtZTogJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAgICAgdHlwZTogdC5wcm9wTGlzdFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0cmFuc2l0aW9uLWR1cmF0aW9uJyxcbiAgICAgIHR5cGU6IHQudGltZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgICAgIHR5cGU6IHQudGltZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICAgICB0eXBlOiB0LmVhc2luZ1xuICAgIH1dO1xuXG4gICAgdmFyIG5vZGVTaXplSGFzaE92ZXJyaWRlID0gZnVuY3Rpb24gbm9kZVNpemVIYXNoT3ZlcnJpZGUoZWxlLCBwYXJzZWRQcm9wKSB7XG4gICAgICBpZiAocGFyc2VkUHJvcC52YWx1ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgICByZXR1cm4gLWVsZS5wb29sSW5kZXgoKTsgLy8gbm8gaGFzaCBrZXkgaGl0cyBpcyB1c2luZyBsYWJlbCBzaXplIChoaXRyYXRlIGZvciBwZXJmIHByb2JhYmx5IGxvdyBhbnl3YXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VkUHJvcC5wZlZhbHVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgbm9kZUJvZHkgPSBbe1xuICAgICAgbmFtZTogJ2hlaWdodCcsXG4gICAgICB0eXBlOiB0Lm5vZGVTaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgICAgaGFzaE92ZXJyaWRlOiBub2RlU2l6ZUhhc2hPdmVycmlkZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd3aWR0aCcsXG4gICAgICB0eXBlOiB0Lm5vZGVTaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgICAgaGFzaE92ZXJyaWRlOiBub2RlU2l6ZUhhc2hPdmVycmlkZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzaGFwZScsXG4gICAgICB0eXBlOiB0Lm5vZGVTaGFwZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzaGFwZS1wb2x5Z29uLXBvaW50cycsXG4gICAgICB0eXBlOiB0LnBvbHlnb25Qb2ludExpc3QsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICB0eXBlOiB0LmNvbG9yXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtZmlsbCcsXG4gICAgICB0eXBlOiB0LmZpbGxcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWJsYWNrZW4nLFxuICAgICAgdHlwZTogdC5uT25lT25lTnVtYmVyXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMnLFxuICAgICAgdHlwZTogdC5jb2xvcnNcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucycsXG4gICAgICB0eXBlOiB0LnBlcmNlbnRhZ2VzXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uJyxcbiAgICAgIHR5cGU6IHQuZ3JhZGllbnREaXJlY3Rpb25cbiAgICB9LCB7XG4gICAgICBuYW1lOiAncGFkZGluZycsXG4gICAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAncGFkZGluZy1yZWxhdGl2ZS10bycsXG4gICAgICB0eXBlOiB0LnBhZGRpbmdSZWxhdGl2ZVRvLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JvdW5kcy1leHBhbnNpb24nLFxuICAgICAgdHlwZTogdC5ib3VuZHNFeHBhbnNpb24sXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9XTtcbiAgICB2YXIgbm9kZUJvcmRlciA9IFt7XG4gICAgICBuYW1lOiAnYm9yZGVyLWNvbG9yJyxcbiAgICAgIHR5cGU6IHQuY29sb3JcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYm9yZGVyLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JvcmRlci13aWR0aCcsXG4gICAgICB0eXBlOiB0LnNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYm9yZGVyLXN0eWxlJyxcbiAgICAgIHR5cGU6IHQuYm9yZGVyU3R5bGVcbiAgICB9XTtcbiAgICB2YXIgYmFja2dyb3VuZEltYWdlID0gW3tcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgIHR5cGU6IHQudXJsc1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luJyxcbiAgICAgIHR5cGU6IHQuYmdDcm9zc09yaWdpblxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyc1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50JyxcbiAgICAgIHR5cGU6IHQuYmdDb250YWlubWVudFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZycsXG4gICAgICB0eXBlOiB0LmJvb2xzXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teCcsXG4gICAgICB0eXBlOiB0LmJnUG9zXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teScsXG4gICAgICB0eXBlOiB0LmJnUG9zXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLFxuICAgICAgdHlwZTogdC5iZ1JlbGF0aXZlVG9cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLFxuICAgICAgdHlwZTogdC5iZ1JlbGF0aXZlVG9cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgICAgdHlwZTogdC5iZ1JlcGVhdFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWZpdCcsXG4gICAgICB0eXBlOiB0LmJnRml0XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtY2xpcCcsXG4gICAgICB0eXBlOiB0LmJnQ2xpcFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXdpZHRoJyxcbiAgICAgIHR5cGU6IHQuYmdXSFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWhlaWdodCcsXG4gICAgICB0eXBlOiB0LmJnV0hcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYmFja2dyb3VuZC1vZmZzZXQteCcsXG4gICAgICB0eXBlOiB0LmJnUG9zXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2JhY2tncm91bmQtb2Zmc2V0LXknLFxuICAgICAgdHlwZTogdC5iZ1Bvc1xuICAgIH1dO1xuICAgIHZhciBjb21wb3VuZCA9IFt7XG4gICAgICBuYW1lOiAncG9zaXRpb24nLFxuICAgICAgdHlwZTogdC5wb3NpdGlvbixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscycsXG4gICAgICB0eXBlOiB0LmNvbXBvdW5kSW5jbHVkZUxhYmVscyxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaW4td2lkdGgnLFxuICAgICAgdHlwZTogdC5zaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ21pbi13aWR0aC1iaWFzLWxlZnQnLFxuICAgICAgdHlwZTogdC5zaXplTWF5YmVQZXJjZW50LFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ21pbi13aWR0aC1iaWFzLXJpZ2h0JyxcbiAgICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaW4taGVpZ2h0JyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaW4taGVpZ2h0LWJpYXMtdG9wJyxcbiAgICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaW4taGVpZ2h0LWJpYXMtYm90dG9tJyxcbiAgICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciBlZGdlTGluZSA9IFt7XG4gICAgICBuYW1lOiAnbGluZS1zdHlsZScsXG4gICAgICB0eXBlOiB0LmxpbmVTdHlsZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsaW5lLWNvbG9yJyxcbiAgICAgIHR5cGU6IHQuY29sb3JcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbGluZS1maWxsJyxcbiAgICAgIHR5cGU6IHQuZmlsbFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsaW5lLWNhcCcsXG4gICAgICB0eXBlOiB0LmxpbmVDYXBcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbGluZS1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsaW5lLWRhc2gtcGF0dGVybicsXG4gICAgICB0eXBlOiB0Lm51bWJlcnNcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbGluZS1kYXNoLW9mZnNldCcsXG4gICAgICB0eXBlOiB0Lm51bWJlclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzJyxcbiAgICAgIHR5cGU6IHQuY29sb3JzXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnLFxuICAgICAgdHlwZTogdC5wZXJjZW50YWdlc1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdjdXJ2ZS1zdHlsZScsXG4gICAgICB0eXBlOiB0LmN1cnZlU3R5bGUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgICB0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiB0cnVlXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2hheXN0YWNrLXJhZGl1cycsXG4gICAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnc291cmNlLWVuZHBvaW50JyxcbiAgICAgIHR5cGU6IHQuZWRnZUVuZHBvaW50LFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RhcmdldC1lbmRwb2ludCcsXG4gICAgICB0eXBlOiB0LmVkZ2VFbmRwb2ludCxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdjb250cm9sLXBvaW50LXN0ZXAtc2l6ZScsXG4gICAgICB0eXBlOiB0LnNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnLFxuICAgICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZXMsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnY29udHJvbC1wb2ludC13ZWlnaHRzJyxcbiAgICAgIHR5cGU6IHQubnVtYmVycyxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzZWdtZW50LWRpc3RhbmNlcycsXG4gICAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplcyxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzZWdtZW50LXdlaWdodHMnLFxuICAgICAgdHlwZTogdC5udW1iZXJzLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RheGktdHVybicsXG4gICAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RheGktdHVybi1taW4tZGlzdGFuY2UnLFxuICAgICAgdHlwZTogdC5zaXplLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RheGktZGlyZWN0aW9uJyxcbiAgICAgIHR5cGU6IHQuYXhpc0RpcmVjdGlvbixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdlZGdlLWRpc3RhbmNlcycsXG4gICAgICB0eXBlOiB0LmVkZ2VEaXN0YW5jZXMsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYXJyb3ctc2NhbGUnLFxuICAgICAgdHlwZTogdC5wb3NpdGl2ZU51bWJlcixcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsb29wLWRpcmVjdGlvbicsXG4gICAgICB0eXBlOiB0LmFuZ2xlLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2xvb3Atc3dlZXAnLFxuICAgICAgdHlwZTogdC5hbmdsZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlJyxcbiAgICAgIHR5cGU6IHQuc2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH1dO1xuICAgIHZhciBnaG9zdCA9IFt7XG4gICAgICBuYW1lOiAnZ2hvc3QnLFxuICAgICAgdHlwZTogdC5ib29sLFxuICAgICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gICAgfSwge1xuICAgICAgbmFtZTogJ2dob3N0LW9mZnNldC14JyxcbiAgICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZ2hvc3Qtb2Zmc2V0LXknLFxuICAgICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdnaG9zdC1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH1dO1xuICAgIHZhciBjb3JlID0gW3tcbiAgICAgIG5hbWU6ICdzZWxlY3Rpb24tYm94LWNvbG9yJyxcbiAgICAgIHR5cGU6IHQuY29sb3JcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcicsXG4gICAgICB0eXBlOiB0LmNvbG9yXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoJyxcbiAgICAgIHR5cGU6IHQuc2l6ZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdhY3RpdmUtYmctY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdhY3RpdmUtYmctb3BhY2l0eScsXG4gICAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYWN0aXZlLWJnLXNpemUnLFxuICAgICAgdHlwZTogdC5zaXplXG4gICAgfSwge1xuICAgICAgbmFtZTogJ291dHNpZGUtdGV4dHVyZS1iZy1jb2xvcicsXG4gICAgICB0eXBlOiB0LmNvbG9yXG4gICAgfSwge1xuICAgICAgbmFtZTogJ291dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5JyxcbiAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgIH1dOyAvLyBwaWUgYmFja2dyb3VuZHMgZm9yIG5vZGVzXG5cbiAgICB2YXIgcGllID0gW107XG4gICAgc3R5Zm4kMi5waWVCYWNrZ3JvdW5kTiA9IDE2OyAvLyBiZWNhdXNlIHRoZSBwaWUgcHJvcGVydGllcyBhcmUgbnVtYmVyZWQsIGdpdmUgYWNjZXNzIHRvIGEgY29uc3RhbnQgTiAoZm9yIHJlbmRlcmVyIHVzZSlcblxuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtc2l6ZScsXG4gICAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnRcbiAgICB9KTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgICAgcGllLnB1c2goe1xuICAgICAgICBuYW1lOiAncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgICAgdHlwZTogdC5jb2xvclxuICAgICAgfSk7XG4gICAgICBwaWUucHVzaCh7XG4gICAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtc2l6ZScsXG4gICAgICAgIHR5cGU6IHQucGVyY2VudFxuICAgICAgfSk7XG4gICAgICBwaWUucHVzaCh7XG4gICAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtb3BhY2l0eScsXG4gICAgICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICAgICAgfSk7XG4gICAgfSAvLyBlZGdlIGFycm93c1xuXG5cbiAgICB2YXIgZWRnZUFycm93ID0gW107XG4gICAgdmFyIGFycm93UHJlZml4ZXMgPSBzdHlmbiQyLmFycm93UHJlZml4ZXMgPSBbJ3NvdXJjZScsICdtaWQtc291cmNlJywgJ3RhcmdldCcsICdtaWQtdGFyZ2V0J107XG4gICAgW3tcbiAgICAgIG5hbWU6ICdhcnJvdy1zaGFwZScsXG4gICAgICB0eXBlOiB0LmFycm93U2hhcGUsXG4gICAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYXJyb3ctY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdhcnJvdy1maWxsJyxcbiAgICAgIHR5cGU6IHQuYXJyb3dGaWxsXG4gICAgfV0uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgYXJyb3dQcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBwcmVmaXggKyAnLScgKyBwcm9wLm5hbWU7XG4gICAgICAgIHZhciB0eXBlID0gcHJvcC50eXBlLFxuICAgICAgICAgICAgdHJpZ2dlcnNCb3VuZHMgPSBwcm9wLnRyaWdnZXJzQm91bmRzO1xuICAgICAgICBlZGdlQXJyb3cucHVzaCh7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHRyaWdnZXJzQm91bmRzOiB0cmlnZ2Vyc0JvdW5kc1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHt9KTtcbiAgICB2YXIgcHJvcHMgPSBzdHlmbiQyLnByb3BlcnRpZXMgPSBbXS5jb25jYXQoYmVoYXZpb3IsIHRyYW5zaXRpb24sIHZpc2liaWxpdHksIG92ZXJsYXksIHVuZGVybGF5LCBnaG9zdCwgY29tbW9uTGFiZWwsIGxhYmVsRGltZW5zaW9ucywgbWFpbkxhYmVsLCBzb3VyY2VMYWJlbCwgdGFyZ2V0TGFiZWwsIG5vZGVCb2R5LCBub2RlQm9yZGVyLCBiYWNrZ3JvdW5kSW1hZ2UsIHBpZSwgY29tcG91bmQsIGVkZ2VMaW5lLCBlZGdlQXJyb3csIGNvcmUpO1xuICAgIHZhciBwcm9wR3JvdXBzID0gc3R5Zm4kMi5wcm9wZXJ0eUdyb3VwcyA9IHtcbiAgICAgIC8vIGNvbW1vbiB0byBhbGwgZWxlc1xuICAgICAgYmVoYXZpb3I6IGJlaGF2aW9yLFxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgICAgIHZpc2liaWxpdHk6IHZpc2liaWxpdHksXG4gICAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgICAgdW5kZXJsYXk6IHVuZGVybGF5LFxuICAgICAgZ2hvc3Q6IGdob3N0LFxuICAgICAgLy8gbGFiZWxzXG4gICAgICBjb21tb25MYWJlbDogY29tbW9uTGFiZWwsXG4gICAgICBsYWJlbERpbWVuc2lvbnM6IGxhYmVsRGltZW5zaW9ucyxcbiAgICAgIG1haW5MYWJlbDogbWFpbkxhYmVsLFxuICAgICAgc291cmNlTGFiZWw6IHNvdXJjZUxhYmVsLFxuICAgICAgdGFyZ2V0TGFiZWw6IHRhcmdldExhYmVsLFxuICAgICAgLy8gbm9kZSBwcm9wc1xuICAgICAgbm9kZUJvZHk6IG5vZGVCb2R5LFxuICAgICAgbm9kZUJvcmRlcjogbm9kZUJvcmRlcixcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYmFja2dyb3VuZEltYWdlLFxuICAgICAgcGllOiBwaWUsXG4gICAgICBjb21wb3VuZDogY29tcG91bmQsXG4gICAgICAvLyBlZGdlIHByb3BzXG4gICAgICBlZGdlTGluZTogZWRnZUxpbmUsXG4gICAgICBlZGdlQXJyb3c6IGVkZ2VBcnJvdyxcbiAgICAgIGNvcmU6IGNvcmVcbiAgICB9O1xuICAgIHZhciBwcm9wR3JvdXBOYW1lcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cE5hbWVzID0ge307XG4gICAgdmFyIHByb3BHcm91cEtleXMgPSBzdHlmbiQyLnByb3BlcnR5R3JvdXBLZXlzID0gT2JqZWN0LmtleXMocHJvcEdyb3Vwcyk7XG4gICAgcHJvcEdyb3VwS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHByb3BHcm91cE5hbWVzW2tleV0gPSBwcm9wR3JvdXBzW2tleV0ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiBwcm9wLm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHByb3BHcm91cHNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiBwcm9wLmdyb3VwS2V5ID0ga2V5O1xuICAgICAgfSk7XG4gICAgfSk7IC8vIGRlZmluZSBhbGlhc2VzXG5cbiAgICB2YXIgYWxpYXNlcyA9IHN0eWZuJDIuYWxpYXNlcyA9IFt7XG4gICAgICBuYW1lOiAnY29udGVudCcsXG4gICAgICBwb2ludHNUbzogJ2xhYmVsJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdjb250cm9sLXBvaW50LWRpc3RhbmNlJyxcbiAgICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0JyxcbiAgICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC13ZWlnaHRzJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdlZGdlLXRleHQtcm90YXRpb24nLFxuICAgICAgcG9pbnRzVG86ICd0ZXh0LXJvdGF0aW9uJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdwYWRkaW5nLWxlZnQnLFxuICAgICAgcG9pbnRzVG86ICdwYWRkaW5nJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgIHBvaW50c1RvOiAncGFkZGluZydcbiAgICB9LCB7XG4gICAgICBuYW1lOiAncGFkZGluZy10b3AnLFxuICAgICAgcG9pbnRzVG86ICdwYWRkaW5nJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gICAgfV07IC8vIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXNcblxuICAgIHN0eWZuJDIucHJvcGVydHlOYW1lcyA9IHByb3BzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuIHAubmFtZTtcbiAgICB9KTsgLy8gYWxsb3cgYWNjZXNzIG9mIHByb3BlcnRpZXMgYnkgbmFtZSAoIGUuZy4gc3R5bGUucHJvcGVydGllcy5oZWlnaHQgKVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHByb3BzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tfaV07XG4gICAgICBwcm9wc1twcm9wLm5hbWVdID0gcHJvcDsgLy8gYWxsb3cgbG9va3VwIGJ5IG5hbWVcbiAgICB9IC8vIG1hcCBhbGlhc2VzXG5cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGFsaWFzZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgdmFyIGFsaWFzID0gYWxpYXNlc1tfaTJdO1xuICAgICAgdmFyIHBvaW50c1RvUHJvcCA9IHByb3BzW2FsaWFzLnBvaW50c1RvXTtcbiAgICAgIHZhciBhbGlhc1Byb3AgPSB7XG4gICAgICAgIG5hbWU6IGFsaWFzLm5hbWUsXG4gICAgICAgIGFsaWFzOiB0cnVlLFxuICAgICAgICBwb2ludHNUbzogcG9pbnRzVG9Qcm9wXG4gICAgICB9OyAvLyBhZGQgYWxpYXMgcHJvcCBmb3IgcGFyc2luZ1xuXG4gICAgICBwcm9wcy5wdXNoKGFsaWFzUHJvcCk7XG4gICAgICBwcm9wc1thbGlhcy5uYW1lXSA9IGFsaWFzUHJvcDsgLy8gYWxsb3cgbG9va3VwIGJ5IG5hbWVcbiAgICB9XG4gIH0pKCk7XG5cbiAgc3R5Zm4kMi5nZXREZWZhdWx0UHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbbmFtZV07XG4gIH07XG5cbiAgc3R5Zm4kMi5nZXREZWZhdWx0UHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuXG4gICAgaWYgKF9wLmRlZmF1bHRQcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBfcC5kZWZhdWx0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICB2YXIgcmF3UHJvcHMgPSBleHRlbmQoe1xuICAgICAgLy8gY29yZSBwcm9wc1xuICAgICAgJ3NlbGVjdGlvbi1ib3gtY29sb3InOiAnI2RkZCcsXG4gICAgICAnc2VsZWN0aW9uLWJveC1vcGFjaXR5JzogMC42NSxcbiAgICAgICdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcic6ICcjYWFhJyxcbiAgICAgICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCc6IDEsXG4gICAgICAnYWN0aXZlLWJnLWNvbG9yJzogJ2JsYWNrJyxcbiAgICAgICdhY3RpdmUtYmctb3BhY2l0eSc6IDAuMTUsXG4gICAgICAnYWN0aXZlLWJnLXNpemUnOiAzMCxcbiAgICAgICdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InOiAnIzAwMCcsXG4gICAgICAnb3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHknOiAwLjEyNSxcbiAgICAgIC8vIGNvbW1vbiBub2RlL2VkZ2UgcHJvcHNcbiAgICAgICdldmVudHMnOiAneWVzJyxcbiAgICAgICd0ZXh0LWV2ZW50cyc6ICdubycsXG4gICAgICAndGV4dC12YWxpZ24nOiAndG9wJyxcbiAgICAgICd0ZXh0LWhhbGlnbic6ICdjZW50ZXInLFxuICAgICAgJ3RleHQtanVzdGlmaWNhdGlvbic6ICdhdXRvJyxcbiAgICAgICdsaW5lLWhlaWdodCc6IDEsXG4gICAgICAnY29sb3InOiAnIzAwMCcsXG4gICAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMDAnLFxuICAgICAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDAsXG4gICAgICAndGV4dC1vdXRsaW5lLW9wYWNpdHknOiAxLFxuICAgICAgJ3RleHQtb3BhY2l0eSc6IDEsXG4gICAgICAndGV4dC1kZWNvcmF0aW9uJzogJ25vbmUnLFxuICAgICAgJ3RleHQtdHJhbnNmb3JtJzogJ25vbmUnLFxuICAgICAgJ3RleHQtd3JhcCc6ICdub25lJyxcbiAgICAgICd0ZXh0LW92ZXJmbG93LXdyYXAnOiAnd2hpdGVzcGFjZScsXG4gICAgICAndGV4dC1tYXgtd2lkdGgnOiA5OTk5LFxuICAgICAgJ3RleHQtYmFja2dyb3VuZC1jb2xvcic6ICcjMDAwJyxcbiAgICAgICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSc6IDAsXG4gICAgICAndGV4dC1iYWNrZ3JvdW5kLXNoYXBlJzogJ3JlY3RhbmdsZScsXG4gICAgICAndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnOiAwLFxuICAgICAgJ3RleHQtYm9yZGVyLW9wYWNpdHknOiAwLFxuICAgICAgJ3RleHQtYm9yZGVyLXdpZHRoJzogMCxcbiAgICAgICd0ZXh0LWJvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgICAndGV4dC1ib3JkZXItY29sb3InOiAnIzAwMCcsXG4gICAgICAnZm9udC1mYW1pbHknOiAnSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZicsXG4gICAgICAnZm9udC1zdHlsZSc6ICdub3JtYWwnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ25vcm1hbCcsXG4gICAgICAnZm9udC1zaXplJzogMTYsXG4gICAgICAnbWluLXpvb21lZC1mb250LXNpemUnOiAwLFxuICAgICAgJ3RleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgICAnc291cmNlLXRleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgICAndGFyZ2V0LXRleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgICAndmlzaWJpbGl0eSc6ICd2aXNpYmxlJyxcbiAgICAgICdkaXNwbGF5JzogJ2VsZW1lbnQnLFxuICAgICAgJ29wYWNpdHknOiAxLFxuICAgICAgJ3otY29tcG91bmQtZGVwdGgnOiAnYXV0bycsXG4gICAgICAnei1pbmRleC1jb21wYXJlJzogJ2F1dG8nLFxuICAgICAgJ3otaW5kZXgnOiAwLFxuICAgICAgJ2xhYmVsJzogJycsXG4gICAgICAndGV4dC1tYXJnaW4teCc6IDAsXG4gICAgICAndGV4dC1tYXJnaW4teSc6IDAsXG4gICAgICAnc291cmNlLWxhYmVsJzogJycsXG4gICAgICAnc291cmNlLXRleHQtb2Zmc2V0JzogMCxcbiAgICAgICdzb3VyY2UtdGV4dC1tYXJnaW4teCc6IDAsXG4gICAgICAnc291cmNlLXRleHQtbWFyZ2luLXknOiAwLFxuICAgICAgJ3RhcmdldC1sYWJlbCc6ICcnLFxuICAgICAgJ3RhcmdldC10ZXh0LW9mZnNldCc6IDAsXG4gICAgICAndGFyZ2V0LXRleHQtbWFyZ2luLXgnOiAwLFxuICAgICAgJ3RhcmdldC10ZXh0LW1hcmdpbi15JzogMCxcbiAgICAgICdvdmVybGF5LW9wYWNpdHknOiAwLFxuICAgICAgJ292ZXJsYXktY29sb3InOiAnIzAwMCcsXG4gICAgICAnb3ZlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgICAnb3ZlcmxheS1zaGFwZSc6ICdyb3VuZC1yZWN0YW5nbGUnLFxuICAgICAgJ3VuZGVybGF5LW9wYWNpdHknOiAwLFxuICAgICAgJ3VuZGVybGF5LWNvbG9yJzogJyMwMDAnLFxuICAgICAgJ3VuZGVybGF5LXBhZGRpbmcnOiAxMCxcbiAgICAgICd1bmRlcmxheS1zaGFwZSc6ICdyb3VuZC1yZWN0YW5nbGUnLFxuICAgICAgJ3RyYW5zaXRpb24tcHJvcGVydHknOiAnbm9uZScsXG4gICAgICAndHJhbnNpdGlvbi1kdXJhdGlvbic6IDAsXG4gICAgICAndHJhbnNpdGlvbi1kZWxheSc6IDAsXG4gICAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiAnbGluZWFyJyxcbiAgICAgIC8vIG5vZGUgcHJvcHNcbiAgICAgICdiYWNrZ3JvdW5kLWJsYWNrZW4nOiAwLFxuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzk5OScsXG4gICAgICAnYmFja2dyb3VuZC1maWxsJzogJ3NvbGlkJyxcbiAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAxLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbm9uZScsXG4gICAgICAnYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbic6ICdhbm9ueW1vdXMnLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSc6IDEsXG4gICAgICAnYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCc6ICdpbnNpZGUnLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nJzogJ3llcycsXG4gICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi14JzogJzUwJScsXG4gICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi15JzogJzUwJScsXG4gICAgICAnYmFja2dyb3VuZC1vZmZzZXQteCc6IDAsXG4gICAgICAnYmFja2dyb3VuZC1vZmZzZXQteSc6IDAsXG4gICAgICAnYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byc6ICdpbmNsdWRlLXBhZGRpbmcnLFxuICAgICAgJ2JhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvJzogJ2luY2x1ZGUtcGFkZGluZycsXG4gICAgICAnYmFja2dyb3VuZC1yZXBlYXQnOiAnbm8tcmVwZWF0JyxcbiAgICAgICdiYWNrZ3JvdW5kLWZpdCc6ICdub25lJyxcbiAgICAgICdiYWNrZ3JvdW5kLWNsaXAnOiAnbm9kZScsXG4gICAgICAnYmFja2dyb3VuZC13aWR0aCc6ICdhdXRvJyxcbiAgICAgICdiYWNrZ3JvdW5kLWhlaWdodCc6ICdhdXRvJyxcbiAgICAgICdib3JkZXItY29sb3InOiAnIzAwMCcsXG4gICAgICAnYm9yZGVyLW9wYWNpdHknOiAxLFxuICAgICAgJ2JvcmRlci13aWR0aCc6IDAsXG4gICAgICAnYm9yZGVyLXN0eWxlJzogJ3NvbGlkJyxcbiAgICAgICdoZWlnaHQnOiAzMCxcbiAgICAgICd3aWR0aCc6IDMwLFxuICAgICAgJ3NoYXBlJzogJ2VsbGlwc2UnLFxuICAgICAgJ3NoYXBlLXBvbHlnb24tcG9pbnRzJzogJy0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxJyxcbiAgICAgICdib3VuZHMtZXhwYW5zaW9uJzogMCxcbiAgICAgIC8vIG5vZGUgZ3JhZGllbnRcbiAgICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbic6ICd0by1ib3R0b20nLFxuICAgICAgJ2JhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMnOiAnIzk5OScsXG4gICAgICAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyc6ICcwJScsXG4gICAgICAvLyBnaG9zdCBwcm9wc1xuICAgICAgJ2dob3N0JzogJ25vJyxcbiAgICAgICdnaG9zdC1vZmZzZXQteSc6IDAsXG4gICAgICAnZ2hvc3Qtb2Zmc2V0LXgnOiAwLFxuICAgICAgJ2dob3N0LW9wYWNpdHknOiAwLFxuICAgICAgLy8gY29tcG91bmQgcHJvcHNcbiAgICAgICdwYWRkaW5nJzogMCxcbiAgICAgICdwYWRkaW5nLXJlbGF0aXZlLXRvJzogJ3dpZHRoJyxcbiAgICAgICdwb3NpdGlvbic6ICdvcmlnaW4nLFxuICAgICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJzogJ2luY2x1ZGUnLFxuICAgICAgJ21pbi13aWR0aCc6IDAsXG4gICAgICAnbWluLXdpZHRoLWJpYXMtbGVmdCc6IDAsXG4gICAgICAnbWluLXdpZHRoLWJpYXMtcmlnaHQnOiAwLFxuICAgICAgJ21pbi1oZWlnaHQnOiAwLFxuICAgICAgJ21pbi1oZWlnaHQtYmlhcy10b3AnOiAwLFxuICAgICAgJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nOiAwXG4gICAgfSwge1xuICAgICAgLy8gbm9kZSBwaWUgYmdcbiAgICAgICdwaWUtc2l6ZSc6ICcxMDAlJ1xuICAgIH0sIFt7XG4gICAgICBuYW1lOiAncGllLXt7aX19LWJhY2tncm91bmQtY29sb3InLFxuICAgICAgdmFsdWU6ICdibGFjaydcbiAgICB9LCB7XG4gICAgICBuYW1lOiAncGllLXt7aX19LWJhY2tncm91bmQtc2l6ZScsXG4gICAgICB2YWx1ZTogJzAlJ1xuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1vcGFjaXR5JyxcbiAgICAgIHZhbHVlOiAxXG4gICAgfV0ucmVkdWNlKGZ1bmN0aW9uIChjc3MsIHByb3ApIHtcbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgICAgICB2YXIgbmFtZSA9IHByb3AubmFtZS5yZXBsYWNlKCd7e2l9fScsIGkpO1xuICAgICAgICB2YXIgdmFsID0gcHJvcC52YWx1ZTtcbiAgICAgICAgY3NzW25hbWVdID0gdmFsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIHt9KSwge1xuICAgICAgLy8gZWRnZSBwcm9wc1xuICAgICAgJ2xpbmUtc3R5bGUnOiAnc29saWQnLFxuICAgICAgJ2xpbmUtY29sb3InOiAnIzk5OScsXG4gICAgICAnbGluZS1maWxsJzogJ3NvbGlkJyxcbiAgICAgICdsaW5lLWNhcCc6ICdidXR0JyxcbiAgICAgICdsaW5lLW9wYWNpdHknOiAxLFxuICAgICAgJ2xpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMnOiAnIzk5OScsXG4gICAgICAnbGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyc6ICcwJScsXG4gICAgICAnY29udHJvbC1wb2ludC1zdGVwLXNpemUnOiA0MCxcbiAgICAgICdjb250cm9sLXBvaW50LXdlaWdodHMnOiAwLjUsXG4gICAgICAnc2VnbWVudC13ZWlnaHRzJzogMC41LFxuICAgICAgJ3NlZ21lbnQtZGlzdGFuY2VzJzogMjAsXG4gICAgICAndGF4aS10dXJuJzogJzUwJScsXG4gICAgICAndGF4aS10dXJuLW1pbi1kaXN0YW5jZSc6IDEwLFxuICAgICAgJ3RheGktZGlyZWN0aW9uJzogJ2F1dG8nLFxuICAgICAgJ2VkZ2UtZGlzdGFuY2VzJzogJ2ludGVyc2VjdGlvbicsXG4gICAgICAnY3VydmUtc3R5bGUnOiAnaGF5c3RhY2snLFxuICAgICAgJ2hheXN0YWNrLXJhZGl1cyc6IDAsXG4gICAgICAnYXJyb3ctc2NhbGUnOiAxLFxuICAgICAgJ2xvb3AtZGlyZWN0aW9uJzogJy00NWRlZycsXG4gICAgICAnbG9vcC1zd2VlcCc6ICctOTBkZWcnLFxuICAgICAgJ3NvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUnOiAwLFxuICAgICAgJ3RhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUnOiAwLFxuICAgICAgJ3NvdXJjZS1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLW5vZGUnLFxuICAgICAgJ3RhcmdldC1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLW5vZGUnLFxuICAgICAgJ2xpbmUtZGFzaC1wYXR0ZXJuJzogWzYsIDNdLFxuICAgICAgJ2xpbmUtZGFzaC1vZmZzZXQnOiAwXG4gICAgfSwgW3tcbiAgICAgIG5hbWU6ICdhcnJvdy1zaGFwZScsXG4gICAgICB2YWx1ZTogJ25vbmUnXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2Fycm93LWNvbG9yJyxcbiAgICAgIHZhbHVlOiAnIzk5OSdcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnYXJyb3ctZmlsbCcsXG4gICAgICB2YWx1ZTogJ2ZpbGxlZCdcbiAgICB9XS5yZWR1Y2UoZnVuY3Rpb24gKGNzcywgcHJvcCkge1xuICAgICAgc3R5Zm4kMi5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICB2YXIgbmFtZSA9IHByZWZpeCArICctJyArIHByb3AubmFtZTtcbiAgICAgICAgdmFyIHZhbCA9IHByb3AudmFsdWU7XG4gICAgICAgIGNzc1tuYW1lXSA9IHZhbDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCB7fSkpO1xuICAgIHZhciBwYXJzZWRQcm9wcyA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuXG4gICAgICBpZiAocHJvcC5wb2ludHNUbykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7XG4gICAgICB2YXIgdmFsID0gcmF3UHJvcHNbbmFtZV07XG4gICAgICB2YXIgcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgdmFsKTtcbiAgICAgIHBhcnNlZFByb3BzW25hbWVdID0gcGFyc2VkUHJvcDtcbiAgICB9XG5cbiAgICBfcC5kZWZhdWx0UHJvcGVydGllcyA9IHBhcnNlZFByb3BzO1xuICAgIHJldHVybiBfcC5kZWZhdWx0UHJvcGVydGllcztcbiAgfTtcblxuICBzdHlmbiQyLmFkZERlZmF1bHRTdHlsZXNoZWV0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2VsZWN0b3IoJzpwYXJlbnQnKS5jc3Moe1xuICAgICAgJ3NoYXBlJzogJ3JlY3RhbmdsZScsXG4gICAgICAncGFkZGluZyc6IDEwLFxuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2VlZScsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogJyNjY2MnLFxuICAgICAgJ2JvcmRlci13aWR0aCc6IDFcbiAgICB9KS5zZWxlY3RvcignZWRnZScpLmNzcyh7XG4gICAgICAnd2lkdGgnOiAzXG4gICAgfSkuc2VsZWN0b3IoJzpsb29wJykuY3NzKHtcbiAgICAgICdjdXJ2ZS1zdHlsZSc6ICdiZXppZXInXG4gICAgfSkuc2VsZWN0b3IoJ2VkZ2U6Y29tcG91bmQnKS5jc3Moe1xuICAgICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcicsXG4gICAgICAnc291cmNlLWVuZHBvaW50JzogJ291dHNpZGUtdG8tbGluZScsXG4gICAgICAndGFyZ2V0LWVuZHBvaW50JzogJ291dHNpZGUtdG8tbGluZSdcbiAgICB9KS5zZWxlY3RvcignOnNlbGVjdGVkJykuY3NzKHtcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyMwMTY5RDknLFxuICAgICAgJ2xpbmUtY29sb3InOiAnIzAxNjlEOScsXG4gICAgICAnc291cmNlLWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAgICdtaWQtc291cmNlLWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICAgJ21pZC10YXJnZXQtYXJyb3ctY29sb3InOiAnIzAxNjlEOSdcbiAgICB9KS5zZWxlY3RvcignOnBhcmVudDpzZWxlY3RlZCcpLmNzcyh7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjQ0NFMUY5JyxcbiAgICAgICdib3JkZXItY29sb3InOiAnI2FlYzhlNSdcbiAgICB9KS5zZWxlY3RvcignOmFjdGl2ZScpLmNzcyh7XG4gICAgICAnb3ZlcmxheS1jb2xvcic6ICdibGFjaycsXG4gICAgICAnb3ZlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgICAnb3ZlcmxheS1vcGFjaXR5JzogMC4yNVxuICAgIH0pO1xuICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB9O1xuXG4gIHZhciBzdHlmbiQxID0ge307IC8vIGEgY2FjaGluZyBsYXllciBmb3IgcHJvcGVydHkgcGFyc2luZ1xuXG4gIHN0eWZuJDEucGFyc2UgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCkge1xuICAgIHZhciBzZWxmID0gdGhpczsgLy8gZnVuY3Rpb24gdmFsdWVzIGNhbid0IGJlIGNhY2hlZCBpbiBhbGwgY2FzZXMsIGFuZCB0aGVyZSBpc24ndCBtdWNoIGJlbmVmaXQgb2YgY2FjaGluZyB0aGVtIGFueXdheVxuXG4gICAgaWYgKGZuJDYodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc2VsZi5wYXJzZUltcGxXYXJuKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpO1xuICAgIH1cblxuICAgIHZhciBmbGF0S2V5ID0gcHJvcElzRmxhdCA9PT0gJ21hcHBpbmcnIHx8IHByb3BJc0ZsYXQgPT09IHRydWUgfHwgcHJvcElzRmxhdCA9PT0gZmFsc2UgfHwgcHJvcElzRmxhdCA9PSBudWxsID8gJ2RvbnRjYXJlJyA6IHByb3BJc0ZsYXQ7XG4gICAgdmFyIGJ5cGFzc0tleSA9IHByb3BJc0J5cGFzcyA/ICd0JyA6ICdmJztcbiAgICB2YXIgdmFsdWVLZXkgPSAnJyArIHZhbHVlO1xuICAgIHZhciBhcmdIYXNoID0gaGFzaFN0cmluZ3MobmFtZSwgdmFsdWVLZXksIGJ5cGFzc0tleSwgZmxhdEtleSk7XG4gICAgdmFyIHByb3BDYWNoZSA9IHNlbGYucHJvcENhY2hlID0gc2VsZi5wcm9wQ2FjaGUgfHwgW107XG4gICAgdmFyIHJldDtcblxuICAgIGlmICghKHJldCA9IHByb3BDYWNoZVthcmdIYXNoXSkpIHtcbiAgICAgIHJldCA9IHByb3BDYWNoZVthcmdIYXNoXSA9IHNlbGYucGFyc2VJbXBsV2FybihuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KTtcbiAgICB9IC8vIC0gYnlwYXNzZXMgY2FuJ3QgYmUgc2hhcmVkIGIvYyB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYnkgYW5pbWF0aW9ucyBvciBvdGhlcndpc2Ugb3ZlcnJpZGRlblxuICAgIC8vIC0gbWFwcGluZ3MgY2FuJ3QgYmUgc2hhcmVkIGIvYyBtYXBwaW5ncyBhcmUgcGVyLWVsZW1lbnRcblxuXG4gICAgaWYgKHByb3BJc0J5cGFzcyB8fCBwcm9wSXNGbGF0ID09PSAnbWFwcGluZycpIHtcbiAgICAgIC8vIG5lZWQgYSBjb3B5IHNpbmNlIHByb3BzIGFyZSBtdXRhdGVkIGxhdGVyIGluIHRoZWlyIGxpZmVjeWNsZXNcbiAgICAgIHJldCA9IGNvcHkocmV0KTtcblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICByZXQudmFsdWUgPSBjb3B5KHJldC52YWx1ZSk7IC8vIGJlY2F1c2UgaXQgY291bGQgYmUgYW4gYXJyYXksIGUuZy4gY29sb3VyXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICBzdHlmbiQxLnBhcnNlSW1wbFdhcm4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCkge1xuICAgIHZhciBwcm9wID0gdGhpcy5wYXJzZUltcGwobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCk7XG5cbiAgICBpZiAoIXByb3AgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgd2FybihcIlRoZSBzdHlsZSBwcm9wZXJ0eSBgXCIuY29uY2F0KG5hbWUsIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcImAgaXMgaW52YWxpZFwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3AgJiYgKHByb3AubmFtZSA9PT0gJ3dpZHRoJyB8fCBwcm9wLm5hbWUgPT09ICdoZWlnaHQnKSAmJiB2YWx1ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgd2FybignVGhlIHN0eWxlIHZhbHVlIG9mIGBsYWJlbGAgaXMgZGVwcmVjYXRlZCBmb3IgYCcgKyBwcm9wLm5hbWUgKyAnYCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wO1xuICB9OyAvLyBwYXJzZSBhIHByb3BlcnR5OyByZXR1cm4gbnVsbCBvbiBpbnZhbGlkOyByZXR1cm4gcGFyc2VkIHByb3BlcnR5IG90aGVyd2lzZVxuICAvLyBmaWVsZHMgOlxuICAvLyAtIG5hbWUgOiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAgLy8gLSB2YWx1ZSA6IHRoZSBwYXJzZWQsIG5hdGl2ZS10eXBlZCB2YWx1ZSBvZiB0aGUgcHJvcGVydHlcbiAgLy8gLSBzdHJWYWx1ZSA6IGEgc3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgcHJvcGVydHkgdmFsdWUgaW4gdmFsaWQgY3NzXG4gIC8vIC0gYnlwYXNzIDogdHJ1ZSBpZmYgdGhlIHByb3BlcnR5IGlzIGEgYnlwYXNzIHByb3BlcnR5XG5cblxuICBzdHlmbiQxLnBhcnNlSW1wbCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIG5hbWUgPSBjYW1lbDJkYXNoKG5hbWUpOyAvLyBtYWtlIHN1cmUgdGhlIHByb3BlcnR5IG5hbWUgaXMgaW4gZGFzaCBmb3JtIChlLmcuICdwcm9wZXJ0eS1uYW1lJyBub3QgJ3Byb3BlcnR5TmFtZScpXG5cbiAgICB2YXIgcHJvcGVydHkgPSBzZWxmLnByb3BlcnRpZXNbbmFtZV07XG4gICAgdmFyIHBhc3NlZFZhbHVlID0gdmFsdWU7XG4gICAgdmFyIHR5cGVzID0gc2VsZi50eXBlcztcblxuICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gcmV0dXJuIG51bGwgb24gcHJvcGVydHkgb2YgdW5rbm93biBuYW1lXG5cblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGNhbid0IGFzc2lnbiB1bmRlZmluZWRcbiAgICAvLyB0aGUgcHJvcGVydHkgbWF5IGJlIGFuIGFsaWFzXG5cblxuICAgIGlmIChwcm9wZXJ0eS5hbGlhcykge1xuICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eS5wb2ludHNUbztcbiAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUlzU3RyaW5nID0gc3RyaW5nKHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICAvLyB0cmltIHRoZSB2YWx1ZSB0byBtYWtlIHBhcnNpbmcgZWFzaWVyXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IHByb3BlcnR5LnR5cGU7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gbm8gdHlwZSwgbm8gbHVja1xuICAgIC8vIGNoZWNrIGlmIGJ5cGFzcyBpcyBudWxsIG9yIGVtcHR5IHN0cmluZyAoaS5lLiBpbmRpY2F0aW9uIHRvIGRlbGV0ZSBieXBhc3MgcHJvcGVydHkpXG5cblxuICAgIGlmIChwcm9wSXNCeXBhc3MgJiYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgYnlwYXNzOiB0cnVlLFxuICAgICAgICBkZWxldGVCeXBhc3M6IHRydWVcbiAgICAgIH07XG4gICAgfSAvLyBjaGVjayBpZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHVzZWQgYXMgYSBtYXBwZXJcblxuXG4gICAgaWYgKGZuJDYodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHN0clZhbHVlOiAnZm4nLFxuICAgICAgICBtYXBwZWQ6IHR5cGVzLmZuLFxuICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgICAgfTtcbiAgICB9IC8vIGNoZWNrIGlmIHZhbHVlIGlzIG1hcHBlZFxuXG5cbiAgICB2YXIgZGF0YSwgbWFwRGF0YTtcblxuICAgIGlmICghdmFsdWVJc1N0cmluZyB8fCBwcm9wSXNGbGF0IHx8IHZhbHVlLmxlbmd0aCA8IDcgfHwgdmFsdWVbMV0gIT09ICdhJykgOyBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPj0gNyAmJiB2YWx1ZVswXSA9PT0gJ2QnICYmIChkYXRhID0gbmV3IFJlZ0V4cCh0eXBlcy5kYXRhLnJlZ2V4KS5leGVjKHZhbHVlKSkpIHtcbiAgICAgIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBtYXBwZXJzIG5vdCBhbGxvd2VkIGluIGJ5cGFzc1xuXG5cbiAgICAgIHZhciBtYXBwZWQgPSB0eXBlcy5kYXRhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICBtYXBwZWQ6IG1hcHBlZCxcbiAgICAgICAgZmllbGQ6IGRhdGFbMV0sXG4gICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID49IDEwICYmIHZhbHVlWzBdID09PSAnbScgJiYgKG1hcERhdGEgPSBuZXcgUmVnRXhwKHR5cGVzLm1hcERhdGEucmVnZXgpLmV4ZWModmFsdWUpKSkge1xuICAgICAgaWYgKHByb3BJc0J5cGFzcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIG1hcHBlcnMgbm90IGFsbG93ZWQgaW4gYnlwYXNzXG5cblxuICAgICAgaWYgKHR5cGUubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBpbXBvc3NpYmxlIHRvIG1hcCB0byBudW1cblxuXG4gICAgICB2YXIgX21hcHBlZCA9IHR5cGVzLm1hcERhdGE7IC8vIHdlIGNhbiBtYXAgb25seSBpZiB0aGUgdHlwZSBpcyBhIGNvbG91ciBvciBhIG51bWJlclxuXG4gICAgICBpZiAoISh0eXBlLmNvbG9yIHx8IHR5cGUubnVtYmVyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZU1pbiA9IHRoaXMucGFyc2UobmFtZSwgbWFwRGF0YVs0XSk7IC8vIHBhcnNlIHRvIHZhbGlkYXRlXG5cbiAgICAgIGlmICghdmFsdWVNaW4gfHwgdmFsdWVNaW4ubWFwcGVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gY2FuJ3QgYmUgaW52YWxpZCBvciBtYXBwZWRcblxuXG4gICAgICB2YXIgdmFsdWVNYXggPSB0aGlzLnBhcnNlKG5hbWUsIG1hcERhdGFbNV0pOyAvLyBwYXJzZSB0byB2YWxpZGF0ZVxuXG4gICAgICBpZiAoIXZhbHVlTWF4IHx8IHZhbHVlTWF4Lm1hcHBlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGNhbid0IGJlIGludmFsaWQgb3IgbWFwcGVkXG4gICAgICAvLyBjaGVjayBpZiB2YWx1ZU1pbiBhbmQgdmFsdWVNYXggYXJlIHRoZSBzYW1lXG5cblxuICAgICAgaWYgKHZhbHVlTWluLnBmVmFsdWUgPT09IHZhbHVlTWF4LnBmVmFsdWUgfHwgdmFsdWVNaW4uc3RyVmFsdWUgPT09IHZhbHVlTWF4LnN0clZhbHVlKSB7XG4gICAgICAgIHdhcm4oJ2AnICsgbmFtZSArICc6ICcgKyB2YWx1ZSArICdgIGlzIG5vdCBhIHZhbGlkIG1hcHBlciBiZWNhdXNlIHRoZSBvdXRwdXQgcmFuZ2UgaXMgemVybzsgY29udmVydGluZyB0byBgJyArIG5hbWUgKyAnOiAnICsgdmFsdWVNaW4uc3RyVmFsdWUgKyAnYCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShuYW1lLCB2YWx1ZU1pbi5zdHJWYWx1ZSk7IC8vIGNhbid0IG1ha2UgbXVjaCBvZiBhIG1hcHBlciB3aXRob3V0IGEgcmFuZ2VcbiAgICAgIH0gZWxzZSBpZiAodHlwZS5jb2xvcikge1xuICAgICAgICB2YXIgYzEgPSB2YWx1ZU1pbi52YWx1ZTtcbiAgICAgICAgdmFyIGMyID0gdmFsdWVNYXgudmFsdWU7XG4gICAgICAgIHZhciBzYW1lID0gYzFbMF0gPT09IGMyWzBdIC8vIHJlZFxuICAgICAgICAmJiBjMVsxXSA9PT0gYzJbMV0gLy8gZ3JlZW5cbiAgICAgICAgJiYgYzFbMl0gPT09IGMyWzJdIC8vIGJsdWVcbiAgICAgICAgJiYgKCAvLyBvcHRpb25hbCBhbHBoYVxuICAgICAgICBjMVszXSA9PT0gYzJbM10gLy8gc2FtZSBhbHBoYSBvdXRyaWdodFxuICAgICAgICB8fCAoYzFbM10gPT0gbnVsbCB8fCBjMVszXSA9PT0gMSAvLyBmdWxsIG9wYWNpdHkgZm9yIGNvbG91ciAxP1xuICAgICAgICApICYmIChjMlszXSA9PSBudWxsIHx8IGMyWzNdID09PSAxKSAvLyBmdWxsIG9wYWNpdHkgZm9yIGNvbG91ciAyP1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IC8vIGNhbid0IG1ha2UgYSBtYXBwZXIgd2l0aG91dCBhIHJhbmdlXG5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IG1hcERhdGEsXG4gICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICBtYXBwZWQ6IF9tYXBwZWQsXG4gICAgICAgIGZpZWxkOiBtYXBEYXRhWzFdLFxuICAgICAgICBmaWVsZE1pbjogcGFyc2VGbG9hdChtYXBEYXRhWzJdKSxcbiAgICAgICAgLy8gbWluICYgbWF4IGFyZSBudW1lcmljXG4gICAgICAgIGZpZWxkTWF4OiBwYXJzZUZsb2F0KG1hcERhdGFbM10pLFxuICAgICAgICB2YWx1ZU1pbjogdmFsdWVNaW4udmFsdWUsXG4gICAgICAgIHZhbHVlTWF4OiB2YWx1ZU1heC52YWx1ZSxcbiAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGUubXVsdGlwbGUgJiYgcHJvcElzRmxhdCAhPT0gJ211bHRpcGxlJykge1xuICAgICAgdmFyIHZhbHM7XG5cbiAgICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICAgIHZhbHMgPSB2YWx1ZS5zcGxpdCgvXFxzKy8pO1xuICAgICAgfSBlbHNlIGlmIChhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFscyA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFscyA9IFt2YWx1ZV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLmV2ZW5NdWx0aXBsZSAmJiB2YWxzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxBcnIgPSBbXTtcbiAgICAgIHZhciB1bml0c0FyciA9IFtdO1xuICAgICAgdmFyIHBmVmFsQXJyID0gW107XG4gICAgICB2YXIgc3RyVmFsID0gJyc7XG4gICAgICB2YXIgaGFzRW51bSA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHAgPSBzZWxmLnBhcnNlKG5hbWUsIHZhbHNbaV0sIHByb3BJc0J5cGFzcywgJ211bHRpcGxlJyk7XG4gICAgICAgIGhhc0VudW0gPSBoYXNFbnVtIHx8IHN0cmluZyhwLnZhbHVlKTtcbiAgICAgICAgdmFsQXJyLnB1c2gocC52YWx1ZSk7XG4gICAgICAgIHBmVmFsQXJyLnB1c2gocC5wZlZhbHVlICE9IG51bGwgPyBwLnBmVmFsdWUgOiBwLnZhbHVlKTtcbiAgICAgICAgdW5pdHNBcnIucHVzaChwLnVuaXRzKTtcbiAgICAgICAgc3RyVmFsICs9IChpID4gMCA/ICcgJyA6ICcnKSArIHAuc3RyVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLnZhbGlkYXRlICYmICF0eXBlLnZhbGlkYXRlKHZhbEFyciwgdW5pdHNBcnIpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZS5zaW5nbGVFbnVtICYmIGhhc0VudW0pIHtcbiAgICAgICAgaWYgKHZhbEFyci5sZW5ndGggPT09IDEgJiYgc3RyaW5nKHZhbEFyclswXSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWxBcnJbMF0sXG4gICAgICAgICAgICBzdHJWYWx1ZTogdmFsQXJyWzBdLFxuICAgICAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWxBcnIsXG4gICAgICAgIHBmVmFsdWU6IHBmVmFsQXJyLFxuICAgICAgICBzdHJWYWx1ZTogc3RyVmFsLFxuICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzcyxcbiAgICAgICAgdW5pdHM6IHVuaXRzQXJyXG4gICAgICB9O1xuICAgIH0gLy8gc2V2ZXJhbCB0eXBlcyBhbHNvIGFsbG93IGVudW1zXG5cblxuICAgIHZhciBjaGVja0VudW1zID0gZnVuY3Rpb24gY2hlY2tFbnVtcygpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0eXBlLmVudW1zLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZW4gPSB0eXBlLmVudW1zW19pXTtcblxuICAgICAgICBpZiAoZW4gPT09IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9OyAvLyBjaGVjayB0aGUgdHlwZSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBvYmplY3RcblxuXG4gICAgaWYgKHR5cGUubnVtYmVyKSB7XG4gICAgICB2YXIgdW5pdHM7XG4gICAgICB2YXIgaW1wbGljaXRVbml0cyA9ICdweCc7IC8vIG5vdCBzZXQgPT4gcHhcblxuICAgICAgaWYgKHR5cGUudW5pdHMpIHtcbiAgICAgICAgLy8gdXNlIHNwZWNpZmllZCB1bml0cyBpZiBzZXRcbiAgICAgICAgdW5pdHMgPSB0eXBlLnVuaXRzO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZS5pbXBsaWNpdFVuaXRzKSB7XG4gICAgICAgIGltcGxpY2l0VW5pdHMgPSB0eXBlLmltcGxpY2l0VW5pdHM7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHlwZS51bml0bGVzcykge1xuICAgICAgICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgICAgICAgIHZhciB1bml0c1JlZ2V4ID0gJ3B4fGVtJyArICh0eXBlLmFsbG93UGVyY2VudCA/ICd8XFxcXCUnIDogJycpO1xuXG4gICAgICAgICAgaWYgKHVuaXRzKSB7XG4gICAgICAgICAgICB1bml0c1JlZ2V4ID0gdW5pdHM7XG4gICAgICAgICAgfSAvLyBvbmx5IGFsbG93IGV4cGxpY2l0IHVuaXRzIGlmIHNvIHNldFxuXG5cbiAgICAgICAgICB2YXIgbWF0Y2ggPSB2YWx1ZS5tYXRjaCgnXignICsgbnVtYmVyICsgJykoJyArIHVuaXRzUmVnZXggKyAnKT8nICsgJyQnKTtcblxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgdmFsdWUgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIHVuaXRzID0gbWF0Y2hbMl0gfHwgaW1wbGljaXRVbml0cztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXVuaXRzIHx8IHR5cGUuaW1wbGljaXRVbml0cykge1xuICAgICAgICAgIHVuaXRzID0gaW1wbGljaXRVbml0czsgLy8gaW1wbGljaXRseSBweCBpZiB1bnNwZWNpZmllZFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7IC8vIGlmIG5vdCBhIG51bWJlciBhbmQgZW51bXMgbm90IGFsbG93ZWQsIHRoZW4gdGhlIHZhbHVlIGlzIGludmFsaWRcblxuICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlLmVudW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIGNoZWNrIGlmIHRoaXMgbnVtYmVyIHR5cGUgYWxzbyBhY2NlcHRzIHNwZWNpYWwga2V5d29yZHMgaW4gcGxhY2Ugb2YgbnVtYmVyc1xuICAgICAgLy8gKGkuZS4gYGxlZnRgLCBgYXV0b2AsIGV0YylcblxuXG4gICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGUuZW51bXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHBhc3NlZFZhbHVlO1xuICAgICAgICByZXR1cm4gY2hlY2tFbnVtcygpO1xuICAgICAgfSAvLyBjaGVjayBpZiB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAodHlwZS5pbnRlZ2VyICYmICFpbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gY2hlY2sgdmFsdWUgaXMgd2l0aGluIHJhbmdlXG5cblxuICAgICAgaWYgKHR5cGUubWluICE9PSB1bmRlZmluZWQgJiYgKHZhbHVlIDwgdHlwZS5taW4gfHwgdHlwZS5zdHJpY3RNaW4gJiYgdmFsdWUgPT09IHR5cGUubWluKSB8fCB0eXBlLm1heCAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA+IHR5cGUubWF4IHx8IHR5cGUuc3RyaWN0TWF4ICYmIHZhbHVlID09PSB0eXBlLm1heCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUgKyAodW5pdHMgPyB1bml0cyA6ICcnKSxcbiAgICAgICAgdW5pdHM6IHVuaXRzLFxuICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgICAgfTsgLy8gbm9ybWFsaXNlIHZhbHVlIGluIHBpeGVsc1xuXG4gICAgICBpZiAodHlwZS51bml0bGVzcyB8fCB1bml0cyAhPT0gJ3B4JyAmJiB1bml0cyAhPT0gJ2VtJykge1xuICAgICAgICByZXQucGZWYWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LnBmVmFsdWUgPSB1bml0cyA9PT0gJ3B4JyB8fCAhdW5pdHMgPyB2YWx1ZSA6IHRoaXMuZ2V0RW1TaXplSW5QaXhlbHMoKSAqIHZhbHVlO1xuICAgICAgfSAvLyBub3JtYWxpc2UgdmFsdWUgaW4gbXNcblxuXG4gICAgICBpZiAodW5pdHMgPT09ICdtcycgfHwgdW5pdHMgPT09ICdzJykge1xuICAgICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAnbXMnID8gdmFsdWUgOiAxMDAwICogdmFsdWU7XG4gICAgICB9IC8vIG5vcm1hbGlzZSB2YWx1ZSBpbiByYWRcblxuXG4gICAgICBpZiAodW5pdHMgPT09ICdkZWcnIHx8IHVuaXRzID09PSAncmFkJykge1xuICAgICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAncmFkJyA/IHZhbHVlIDogZGVnMnJhZCh2YWx1ZSk7XG4gICAgICB9IC8vIG5vcm1hbGl6ZSB2YWx1ZSBpbiAlXG5cblxuICAgICAgaWYgKHVuaXRzID09PSAnJScpIHtcbiAgICAgICAgcmV0LnBmVmFsdWUgPSB2YWx1ZSAvIDEwMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2UgaWYgKHR5cGUucHJvcExpc3QpIHtcbiAgICAgIHZhciBwcm9wcyA9IFtdO1xuICAgICAgdmFyIHByb3BzU3RyID0gJycgKyB2YWx1ZTtcblxuICAgICAgaWYgKHByb3BzU3RyID09PSAnbm9uZScpIDsgZWxzZSB7XG4gICAgICAgIC8vIGdvIG92ZXIgZWFjaCBwcm9wXG4gICAgICAgIHZhciBwcm9wc1NwbGl0ID0gcHJvcHNTdHIuc3BsaXQoL1xccyosXFxzKnxcXHMrLyk7XG5cbiAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvcHNTcGxpdC5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcHNTcGxpdFtfaTJdLnRyaW0oKTtcblxuICAgICAgICAgIGlmIChzZWxmLnByb3BlcnRpZXNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICBwcm9wcy5wdXNoKHByb3BOYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FybignYCcgKyBwcm9wTmFtZSArICdgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLFxuICAgICAgICBzdHJWYWx1ZTogcHJvcHMubGVuZ3RoID09PSAwID8gJ25vbmUnIDogcHJvcHMuam9pbignICcpLFxuICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgIHZhciB0dXBsZSA9IGNvbG9yMnR1cGxlKHZhbHVlKTtcblxuICAgICAgaWYgKCF0dXBsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHR1cGxlLFxuICAgICAgICBwZlZhbHVlOiB0dXBsZSxcbiAgICAgICAgc3RyVmFsdWU6ICdyZ2IoJyArIHR1cGxlWzBdICsgJywnICsgdHVwbGVbMV0gKyAnLCcgKyB0dXBsZVsyXSArICcpJyxcbiAgICAgICAgLy8gbi5iLiBubyBzcGFjZXMgYi9jIG9mIG11bHRpcGxlIHN1cHBvcnRcbiAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlLnJlZ2V4IHx8IHR5cGUucmVnZXhlcykge1xuICAgICAgLy8gZmlyc3QgY2hlY2sgZW51bXNcbiAgICAgIGlmICh0eXBlLmVudW1zKSB7XG4gICAgICAgIHZhciBlbnVtUHJvcCA9IGNoZWNrRW51bXMoKTtcblxuICAgICAgICBpZiAoZW51bVByb3ApIHtcbiAgICAgICAgICByZXR1cm4gZW51bVByb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2V4ZXMgPSB0eXBlLnJlZ2V4ZXMgPyB0eXBlLnJlZ2V4ZXMgOiBbdHlwZS5yZWdleF07XG5cbiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHJlZ2V4ZXMubGVuZ3RoOyBfaTMrKykge1xuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4ZXNbX2kzXSk7IC8vIG1ha2UgYSByZWdleCBmcm9tIHRoZSB0eXBlIHN0cmluZ1xuXG4gICAgICAgIHZhciBtID0gcmVnZXguZXhlYyh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAvLyByZWdleCBtYXRjaGVzXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdHlwZS5zaW5nbGVSZWdleE1hdGNoVmFsdWUgPyBtWzFdIDogbSxcbiAgICAgICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsOyAvLyBkaWRuJ3QgbWF0Y2ggYW55XG4gICAgfSBlbHNlIGlmICh0eXBlLnN0cmluZykge1xuICAgICAgLy8ganVzdCByZXR1cm5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlLmVudW1zKSB7XG4gICAgICAvLyBjaGVjayBlbnVtcyBsYXN0IGJlY2F1c2UgaXQncyBhIGNvbWJvIHR5cGUgaW4gb3RoZXJzXG4gICAgICByZXR1cm4gY2hlY2tFbnVtcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gbm90IGEgdHlwZSB3ZSBjYW4gaGFuZGxlXG4gICAgfVxuICB9O1xuXG4gIHZhciBTdHlsZSA9IGZ1bmN0aW9uIFN0eWxlKGN5KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0eWxlKSkge1xuICAgICAgcmV0dXJuIG5ldyBTdHlsZShjeSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb3JlKGN5KSkge1xuICAgICAgZXJyb3IoJ0Egc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcml2YXRlID0ge1xuICAgICAgY3k6IGN5LFxuICAgICAgY29yZVN0eWxlOiB7fVxuICAgIH07XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMucmVzZXRUb0RlZmF1bHQoKTtcbiAgfTtcblxuICB2YXIgc3R5Zm4gPSBTdHlsZS5wcm90b3R5cGU7XG5cbiAgc3R5Zm4uaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdzdHlsZSc7XG4gIH07IC8vIHJlbW92ZSBhbGwgY29udGV4dHNcblxuXG4gIHN0eWZuLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIGN5ID0gX3AuY3k7XG4gICAgdmFyIGVsZXMgPSBjeS5lbGVtZW50cygpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzW2ldID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICBfcC5jb250ZXh0U3R5bGVzID0ge307XG4gICAgX3AucHJvcERpZmZzID0ge307XG4gICAgdGhpcy5jbGVhbkVsZW1lbnRzKGVsZXMsIHRydWUpO1xuICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICB2YXIgZWxlX3AgPSBlbGVbMF0uX3ByaXZhdGU7XG4gICAgICBlbGVfcC5zdHlsZURpcnR5ID0gdHJ1ZTtcbiAgICAgIGVsZV9wLmFwcGxpZWRJbml0U3R5bGUgPSBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfTtcblxuICBzdHlmbi5yZXNldFRvRGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9OyAvLyBidWlsZHMgYSBzdHlsZSBvYmplY3QgZm9yIHRoZSAnY29yZScgc2VsZWN0b3JcblxuXG4gIHN0eWZuLmNvcmUgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbcHJvcE5hbWVdIHx8IHRoaXMuZ2V0RGVmYXVsdFByb3BlcnR5KHByb3BOYW1lKTtcbiAgfTsgLy8gY3JlYXRlIGEgbmV3IGNvbnRleHQgZnJvbSB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yIHN0cmluZyBhbmQgc3dpdGNoIHRvIHRoYXQgY29udGV4dFxuXG5cbiAgc3R5Zm4uc2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3JTdHIpIHtcbiAgICAvLyAnY29yZScgaXMgYSBzcGVjaWFsIGNhc2UgYW5kIGRvZXMgbm90IG5lZWQgYSBzZWxlY3RvclxuICAgIHZhciBzZWxlY3RvciA9IHNlbGVjdG9yU3RyID09PSAnY29yZScgPyBudWxsIDogbmV3IFNlbGVjdG9yKHNlbGVjdG9yU3RyKTtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoKys7IC8vIG5ldyBjb250ZXh0IG1lYW5zIG5ldyBpbmRleFxuXG4gICAgdGhpc1tpXSA9IHtcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgbWFwcGVkUHJvcGVydGllczogW10sXG4gICAgICBpbmRleDogaVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07IC8vIGFkZCBvbmUgb3IgbWFueSBjc3MgcnVsZXMgdG8gdGhlIGN1cnJlbnQgY29udGV4dFxuXG5cbiAgc3R5Zm4uY3NzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIG1hcCA9IGFyZ3NbMF07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICB2YXIgbWFwVmFsID0gbWFwW3Byb3AubmFtZV07XG5cbiAgICAgICAgaWYgKG1hcFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWFwVmFsID0gbWFwW2Rhc2gyY2FtZWwocHJvcC5uYW1lKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFwVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmNzc1J1bGUocHJvcC5uYW1lLCBtYXBWYWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5jc3NSdWxlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIH0gLy8gZG8gbm90aGluZyBpZiBhcmdzIGFyZSBpbnZhbGlkXG5cblxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuXG4gIHN0eWZuLnN0eWxlID0gc3R5Zm4uY3NzOyAvLyBhZGQgYSBzaW5nbGUgY3NzIHJ1bGUgdG8gdGhlIGN1cnJlbnQgY29udGV4dFxuXG4gIHN0eWZuLmNzc1J1bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBuYW1lLXZhbHVlIHBhaXJcbiAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbHVlKTsgLy8gYWRkIHByb3BlcnR5IHRvIGN1cnJlbnQgY29udGV4dCBpZiB2YWxpZFxuXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICB2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICAgIHRoaXNbaV0ucHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICAgIHRoaXNbaV0ucHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5OyAvLyBhbGxvdyBhY2Nlc3MgYnkgbmFtZSBhcyB3ZWxsXG5cbiAgICAgIGlmIChwcm9wZXJ0eS5uYW1lLm1hdGNoKC9waWUtKFxcZCspLWJhY2tncm91bmQtc2l6ZS8pICYmIHByb3BlcnR5LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUuaGFzUGllID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5Lm1hcHBlZCkge1xuICAgICAgICB0aGlzW2ldLm1hcHBlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICB9IC8vIGFkZCB0byBjb3JlIHN0eWxlIGlmIG5lY2Vzc2FyeVxuXG5cbiAgICAgIHZhciBjdXJyZW50U2VsZWN0b3JJc0NvcmUgPSAhdGhpc1tpXS5zZWxlY3RvcjtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RvcklzQ29yZSkge1xuICAgICAgICB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtwcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuXG4gIHN0eWZuLmFwcGVuZCA9IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgIGlmIChzdHlsZXNoZWV0KHN0eWxlKSkge1xuICAgICAgc3R5bGUuYXBwZW5kVG9TdHlsZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHN0eWxlKSkge1xuICAgICAgdGhpcy5hcHBlbmRGcm9tSnNvbihzdHlsZSk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcoc3R5bGUpKSB7XG4gICAgICB0aGlzLmFwcGVuZEZyb21TdHJpbmcoc3R5bGUpO1xuICAgIH0gLy8geW91IHByb2JhYmx5IHdvdWxkbid0IHdhbnQgdG8gYXBwZW5kIGEgU3R5bGUsIHNpbmNlIHlvdSdkIGR1cGxpY2F0ZSB0aGUgZGVmYXVsdCBwYXJ0c1xuXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTsgLy8gc3RhdGljIGZ1bmN0aW9uXG5cblxuICBTdHlsZS5mcm9tSnNvbiA9IGZ1bmN0aW9uIChjeSwganNvbikge1xuICAgIHZhciBzdHlsZSA9IG5ldyBTdHlsZShjeSk7XG4gICAgc3R5bGUuZnJvbUpzb24oanNvbik7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9O1xuXG4gIFN0eWxlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoY3ksIHN0cmluZykge1xuICAgIHJldHVybiBuZXcgU3R5bGUoY3kpLmZyb21TdHJpbmcoc3RyaW5nKTtcbiAgfTtcblxuICBbc3R5Zm4kOCwgc3R5Zm4kNywgc3R5Zm4kNiwgc3R5Zm4kNSwgc3R5Zm4kNCwgc3R5Zm4kMywgc3R5Zm4kMiwgc3R5Zm4kMV0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBleHRlbmQoc3R5Zm4sIHByb3BzKTtcbiAgfSk7XG4gIFN0eWxlLnR5cGVzID0gc3R5Zm4udHlwZXM7XG4gIFN0eWxlLnByb3BlcnRpZXMgPSBzdHlmbi5wcm9wZXJ0aWVzO1xuICBTdHlsZS5wcm9wZXJ0eUdyb3VwcyA9IHN0eWZuLnByb3BlcnR5R3JvdXBzO1xuICBTdHlsZS5wcm9wZXJ0eUdyb3VwTmFtZXMgPSBzdHlmbi5wcm9wZXJ0eUdyb3VwTmFtZXM7XG4gIFN0eWxlLnByb3BlcnR5R3JvdXBLZXlzID0gc3R5Zm4ucHJvcGVydHlHcm91cEtleXM7XG5cbiAgdmFyIGNvcmVmbiQyID0ge1xuICAgIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShuZXdTdHlsZSkge1xuICAgICAgaWYgKG5ld1N0eWxlKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5zZXRTdHlsZShuZXdTdHlsZSk7XG4gICAgICAgIHMudXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlO1xuICAgIH0sXG4gICAgc2V0U3R5bGU6IGZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuXG4gICAgICBpZiAoc3R5bGVzaGVldChzdHlsZSkpIHtcbiAgICAgICAgX3Auc3R5bGUgPSBzdHlsZS5nZW5lcmF0ZVN0eWxlKHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChhcnJheShzdHlsZSkpIHtcbiAgICAgICAgX3Auc3R5bGUgPSBTdHlsZS5mcm9tSnNvbih0aGlzLCBzdHlsZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZyhzdHlsZSkpIHtcbiAgICAgICAgX3Auc3R5bGUgPSBTdHlsZS5mcm9tU3RyaW5nKHRoaXMsIHN0eWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9wLnN0eWxlID0gU3R5bGUodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcC5zdHlsZTtcbiAgICB9LFxuICAgIC8vIGUuZy4gY3kuZGF0YSgpIGNoYW5nZWQgPT4gcmVjYWxjIGVsZSBtYXBwZXJzXG4gICAgdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKCkge1xuICAgICAgdGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpOyAvLyBqdXN0IHNlbmQgdG8gYWxsIGVsZXNcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlZmF1bHRTZWxlY3Rpb25UeXBlID0gJ3NpbmdsZSc7XG4gIHZhciBjb3JlZm4kMSA9IHtcbiAgICBhdXRvbG9jazogZnVuY3Rpb24gYXV0b2xvY2soYm9vbCkge1xuICAgICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9wcml2YXRlLmF1dG9sb2NrID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIGF1dG91bmdyYWJpZnk6IGZ1bmN0aW9uIGF1dG91bmdyYWJpZnkoYm9vbCkge1xuICAgICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnkgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBhdXRvdW5zZWxlY3RpZnk6IGZ1bmN0aW9uIGF1dG91bnNlbGVjdGlmeShib29sKSB7XG4gICAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5ID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBzZWxlY3Rpb25UeXBlOiBmdW5jdGlvbiBzZWxlY3Rpb25UeXBlKHNlbFR5cGUpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmIChfcC5zZWxlY3Rpb25UeXBlID09IG51bGwpIHtcbiAgICAgICAgX3Auc2VsZWN0aW9uVHlwZSA9IGRlZmF1bHRTZWxlY3Rpb25UeXBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzZWxUeXBlID09PSAnYWRkaXRpdmUnIHx8IHNlbFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgX3Auc2VsZWN0aW9uVHlwZSA9IHNlbFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfcC5zZWxlY3Rpb25UeXBlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiBwYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgdXNlclBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiB1c2VyUGFubmluZ0VuYWJsZWQoYm9vbCkge1xuICAgICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgem9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHpvb21pbmdFbmFibGVkKGJvb2wpIHtcbiAgICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJab29taW5nRW5hYmxlZChib29sKSB7XG4gICAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUudXNlclpvb21pbmdFbmFibGVkID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBib3hTZWxlY3Rpb25FbmFibGVkOiBmdW5jdGlvbiBib3hTZWxlY3Rpb25FbmFibGVkKGJvb2wpIHtcbiAgICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgcGFuOiBmdW5jdGlvbiBwYW4oKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICAgIHZhciBkaW0sIHZhbCwgZGltcywgeCwgeTtcblxuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgLy8gLnBhbigpXG4gICAgICAgICAgcmV0dXJuIHBhbjtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHN0cmluZyhhcmdzWzBdKSkge1xuICAgICAgICAgICAgLy8gLnBhbigneCcpXG4gICAgICAgICAgICBkaW0gPSBhcmdzWzBdO1xuICAgICAgICAgICAgcmV0dXJuIHBhbltkaW1dO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGxhaW5PYmplY3QoYXJnc1swXSkpIHtcbiAgICAgICAgICAgIC8vIC5wYW4oeyB4OiAwLCB5OiAxMDAgfSlcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGltcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICB4ID0gZGltcy54O1xuICAgICAgICAgICAgeSA9IGRpbXMueTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciQxKHgpKSB7XG4gICAgICAgICAgICAgIHBhbi54ID0geDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bWJlciQxKHkpKSB7XG4gICAgICAgICAgICAgIHBhbi55ID0geTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbWl0KCdwYW4gdmlld3BvcnQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgLy8gLnBhbigneCcsIDEwMClcbiAgICAgICAgICBpZiAoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpbSA9IGFyZ3NbMF07XG4gICAgICAgICAgdmFsID0gYXJnc1sxXTtcblxuICAgICAgICAgIGlmICgoZGltID09PSAneCcgfHwgZGltID09PSAneScpICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICAgIHBhbltkaW1dID0gdmFsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIGludmFsaWRcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnkoJ3ZpZXdwb3J0Jyk7XG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIHBhbkJ5OiBmdW5jdGlvbiBwYW5CeShhcmcwLCBhcmcxKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICAgIHZhciBkaW0sIHZhbCwgZGltcywgeCwgeTtcblxuICAgICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAocGxhaW5PYmplY3QoYXJnMCkpIHtcbiAgICAgICAgICAgIC8vIC5wYW5CeSh7IHg6IDAsIHk6IDEwMCB9KVxuICAgICAgICAgICAgZGltcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICB4ID0gZGltcy54O1xuICAgICAgICAgICAgeSA9IGRpbXMueTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciQxKHgpKSB7XG4gICAgICAgICAgICAgIHBhbi54ICs9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIkMSh5KSkge1xuICAgICAgICAgICAgICBwYW4ueSArPSB5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyAucGFuQnkoJ3gnLCAxMDApXG4gICAgICAgICAgZGltID0gYXJnMDtcbiAgICAgICAgICB2YWwgPSBhcmcxO1xuXG4gICAgICAgICAgaWYgKChkaW0gPT09ICd4JyB8fCBkaW0gPT09ICd5JykgJiYgbnVtYmVyJDEodmFsKSkge1xuICAgICAgICAgICAgcGFuW2RpbV0gKz0gdmFsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIGludmFsaWRcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnkoJ3ZpZXdwb3J0Jyk7XG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIGZpdDogZnVuY3Rpb24gZml0KGVsZW1lbnRzLCBwYWRkaW5nKSB7XG4gICAgICB2YXIgdmlld3BvcnRTdGF0ZSA9IHRoaXMuZ2V0Rml0Vmlld3BvcnQoZWxlbWVudHMsIHBhZGRpbmcpO1xuXG4gICAgICBpZiAodmlld3BvcnRTdGF0ZSkge1xuICAgICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgICBfcC56b29tID0gdmlld3BvcnRTdGF0ZS56b29tO1xuICAgICAgICBfcC5wYW4gPSB2aWV3cG9ydFN0YXRlLnBhbjtcbiAgICAgICAgdGhpcy5lbWl0KCdwYW4gem9vbSB2aWV3cG9ydCcpO1xuICAgICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBnZXRGaXRWaWV3cG9ydDogZnVuY3Rpb24gZ2V0Rml0Vmlld3BvcnQoZWxlbWVudHMsIHBhZGRpbmcpIHtcbiAgICAgIGlmIChudW1iZXIkMShlbGVtZW50cykgJiYgcGFkZGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGVsZW1lbnRzIGlzIG9wdGlvbmFsXG4gICAgICAgIHBhZGRpbmcgPSBlbGVtZW50cztcbiAgICAgICAgZWxlbWVudHMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCB8fCAhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBiYjtcblxuICAgICAgaWYgKHN0cmluZyhlbGVtZW50cykpIHtcbiAgICAgICAgdmFyIHNlbCA9IGVsZW1lbnRzO1xuICAgICAgICBlbGVtZW50cyA9IHRoaXMuJChzZWwpO1xuICAgICAgfSBlbHNlIGlmIChib3VuZGluZ0JveChlbGVtZW50cykpIHtcbiAgICAgICAgLy8gYXNzdW1lIGJiXG4gICAgICAgIHZhciBiYmUgPSBlbGVtZW50cztcbiAgICAgICAgYmIgPSB7XG4gICAgICAgICAgeDE6IGJiZS54MSxcbiAgICAgICAgICB5MTogYmJlLnkxLFxuICAgICAgICAgIHgyOiBiYmUueDIsXG4gICAgICAgICAgeTI6IGJiZS55MlxuICAgICAgICB9O1xuICAgICAgICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgICAgICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgICB9IGVsc2UgaWYgKCFlbGVtZW50T3JDb2xsZWN0aW9uKGVsZW1lbnRzKSkge1xuICAgICAgICBlbGVtZW50cyA9IHRoaXMubXV0YWJsZUVsZW1lbnRzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKGVsZW1lbnRzKSAmJiBlbGVtZW50cy5lbXB0eSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gY2FuJ3QgZml0IHRvIG5vdGhpbmdcblxuXG4gICAgICBiYiA9IGJiIHx8IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgICB2YXIgdyA9IHRoaXMud2lkdGgoKTtcbiAgICAgIHZhciBoID0gdGhpcy5oZWlnaHQoKTtcbiAgICAgIHZhciB6b29tO1xuICAgICAgcGFkZGluZyA9IG51bWJlciQxKHBhZGRpbmcpID8gcGFkZGluZyA6IDA7XG5cbiAgICAgIGlmICghaXNOYU4odykgJiYgIWlzTmFOKGgpICYmIHcgPiAwICYmIGggPiAwICYmICFpc05hTihiYi53KSAmJiAhaXNOYU4oYmIuaCkgJiYgYmIudyA+IDAgJiYgYmIuaCA+IDApIHtcbiAgICAgICAgem9vbSA9IE1hdGgubWluKCh3IC0gMiAqIHBhZGRpbmcpIC8gYmIudywgKGggLSAyICogcGFkZGluZykgLyBiYi5oKTsgLy8gY3JvcCB6b29tXG5cbiAgICAgICAgem9vbSA9IHpvb20gPiB0aGlzLl9wcml2YXRlLm1heFpvb20gPyB0aGlzLl9wcml2YXRlLm1heFpvb20gOiB6b29tO1xuICAgICAgICB6b29tID0gem9vbSA8IHRoaXMuX3ByaXZhdGUubWluWm9vbSA/IHRoaXMuX3ByaXZhdGUubWluWm9vbSA6IHpvb207XG4gICAgICAgIHZhciBwYW4gPSB7XG4gICAgICAgICAgLy8gbm93IHBhbiB0byBtaWRkbGVcbiAgICAgICAgICB4OiAodyAtIHpvb20gKiAoYmIueDEgKyBiYi54MikpIC8gMixcbiAgICAgICAgICB5OiAoaCAtIHpvb20gKiAoYmIueTEgKyBiYi55MikpIC8gMlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHpvb206IHpvb20sXG4gICAgICAgICAgcGFuOiBwYW5cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0sXG4gICAgem9vbVJhbmdlOiBmdW5jdGlvbiB6b29tUmFuZ2UobWluLCBtYXgpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG5cbiAgICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgICB2YXIgb3B0cyA9IG1pbjtcbiAgICAgICAgbWluID0gb3B0cy5taW47XG4gICAgICAgIG1heCA9IG9wdHMubWF4O1xuICAgICAgfVxuXG4gICAgICBpZiAobnVtYmVyJDEobWluKSAmJiBudW1iZXIkMShtYXgpICYmIG1pbiA8PSBtYXgpIHtcbiAgICAgICAgX3AubWluWm9vbSA9IG1pbjtcbiAgICAgICAgX3AubWF4Wm9vbSA9IG1heDtcbiAgICAgIH0gZWxzZSBpZiAobnVtYmVyJDEobWluKSAmJiBtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPD0gX3AubWF4Wm9vbSkge1xuICAgICAgICBfcC5taW5ab29tID0gbWluO1xuICAgICAgfSBlbHNlIGlmIChudW1iZXIkMShtYXgpICYmIG1pbiA9PT0gdW5kZWZpbmVkICYmIG1heCA+PSBfcC5taW5ab29tKSB7XG4gICAgICAgIF9wLm1heFpvb20gPSBtYXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgbWluWm9vbTogZnVuY3Rpb24gbWluWm9vbSh6b29tKSB7XG4gICAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLm1pblpvb207XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy56b29tUmFuZ2Uoe1xuICAgICAgICAgIG1pbjogem9vbVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1heFpvb206IGZ1bmN0aW9uIG1heFpvb20oem9vbSkge1xuICAgICAgaWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXhab29tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuem9vbVJhbmdlKHtcbiAgICAgICAgICBtYXg6IHpvb21cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRab29tZWRWaWV3cG9ydDogZnVuY3Rpb24gZ2V0Wm9vbWVkVmlld3BvcnQocGFyYW1zKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgdmFyIGN1cnJlbnRQYW4gPSBfcC5wYW47XG4gICAgICB2YXIgY3VycmVudFpvb20gPSBfcC56b29tO1xuICAgICAgdmFyIHBvczsgLy8gaW4gcmVuZGVyZWQgcHhcblxuICAgICAgdmFyIHpvb207XG4gICAgICB2YXIgYmFpbCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIV9wLnpvb21pbmdFbmFibGVkKSB7XG4gICAgICAgIC8vIHpvb21pbmcgZGlzYWJsZWRcbiAgICAgICAgYmFpbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChudW1iZXIkMShwYXJhbXMpKSB7XG4gICAgICAgIC8vIHRoZW4gc2V0IHRoZSB6b29tXG4gICAgICAgIHpvb20gPSBwYXJhbXM7XG4gICAgICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgICAgLy8gdGhlbiB6b29tIGFib3V0IGEgcG9pbnRcbiAgICAgICAgem9vbSA9IHBhcmFtcy5sZXZlbDtcblxuICAgICAgICBpZiAocGFyYW1zLnBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBwb3MgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwYXJhbXMucG9zaXRpb24sIGN1cnJlbnRab29tLCBjdXJyZW50UGFuKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVuZGVyZWRQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgcG9zID0gcGFyYW1zLnJlbmRlcmVkUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zICE9IG51bGwgJiYgIV9wLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICAgICAgLy8gcGFubmluZyBkaXNhYmxlZFxuICAgICAgICAgIGJhaWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIGNyb3Agem9vbVxuXG5cbiAgICAgIHpvb20gPSB6b29tID4gX3AubWF4Wm9vbSA/IF9wLm1heFpvb20gOiB6b29tO1xuICAgICAgem9vbSA9IHpvb20gPCBfcC5taW5ab29tID8gX3AubWluWm9vbSA6IHpvb207IC8vIGNhbid0IHpvb20gd2l0aCBpbnZhbGlkIHBhcmFtc1xuXG4gICAgICBpZiAoYmFpbCB8fCAhbnVtYmVyJDEoem9vbSkgfHwgem9vbSA9PT0gY3VycmVudFpvb20gfHwgcG9zICE9IG51bGwgJiYgKCFudW1iZXIkMShwb3MueCkgfHwgIW51bWJlciQxKHBvcy55KSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgIT0gbnVsbCkge1xuICAgICAgICAvLyBzZXQgem9vbSBhYm91dCBwb3NpdGlvblxuICAgICAgICB2YXIgcGFuMSA9IGN1cnJlbnRQYW47XG4gICAgICAgIHZhciB6b29tMSA9IGN1cnJlbnRab29tO1xuICAgICAgICB2YXIgem9vbTIgPSB6b29tO1xuICAgICAgICB2YXIgcGFuMiA9IHtcbiAgICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChwb3MueCAtIHBhbjEueCkgKyBwb3MueCxcbiAgICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChwb3MueSAtIHBhbjEueSkgKyBwb3MueVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHpvb21lZDogdHJ1ZSxcbiAgICAgICAgICBwYW5uZWQ6IHRydWUsXG4gICAgICAgICAgem9vbTogem9vbTIsXG4gICAgICAgICAgcGFuOiBwYW4yXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHNldCB0aGUgem9vbVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHpvb21lZDogdHJ1ZSxcbiAgICAgICAgICBwYW5uZWQ6IGZhbHNlLFxuICAgICAgICAgIHpvb206IHpvb20sXG4gICAgICAgICAgcGFuOiBjdXJyZW50UGFuXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICB6b29tOiBmdW5jdGlvbiB6b29tKHBhcmFtcykge1xuICAgICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGdldFxuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2V0XG4gICAgICAgIHZhciB2cCA9IHRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQocGFyYW1zKTtcbiAgICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcblxuICAgICAgICBpZiAodnAgPT0gbnVsbCB8fCAhdnAuem9vbWVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBfcC56b29tID0gdnAuem9vbTtcblxuICAgICAgICBpZiAodnAucGFubmVkKSB7XG4gICAgICAgICAgX3AucGFuLnggPSB2cC5wYW4ueDtcbiAgICAgICAgICBfcC5wYW4ueSA9IHZwLnBhbi55O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0KCd6b29tJyArICh2cC5wYW5uZWQgPyAnIHBhbicgOiAnJykgKyAnIHZpZXdwb3J0Jyk7XG4gICAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpZXdwb3J0OiBmdW5jdGlvbiB2aWV3cG9ydChvcHRzKSB7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgdmFyIHpvb21EZWZkID0gdHJ1ZTtcbiAgICAgIHZhciBwYW5EZWZkID0gdHJ1ZTtcbiAgICAgIHZhciBldmVudHMgPSBbXTsgLy8gdG8gdHJpZ2dlclxuXG4gICAgICB2YXIgem9vbUZhaWxlZCA9IGZhbHNlO1xuICAgICAgdmFyIHBhbkZhaWxlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGlmICghbnVtYmVyJDEob3B0cy56b29tKSkge1xuICAgICAgICB6b29tRGVmZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBsYWluT2JqZWN0KG9wdHMucGFuKSkge1xuICAgICAgICBwYW5EZWZkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghem9vbURlZmQgJiYgIXBhbkRlZmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh6b29tRGVmZCkge1xuICAgICAgICB2YXIgeiA9IG9wdHMuem9vbTtcblxuICAgICAgICBpZiAoeiA8IF9wLm1pblpvb20gfHwgeiA+IF9wLm1heFpvb20gfHwgIV9wLnpvb21pbmdFbmFibGVkKSB7XG4gICAgICAgICAgem9vbUZhaWxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3Auem9vbSA9IHo7XG4gICAgICAgICAgZXZlbnRzLnB1c2goJ3pvb20nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFuRGVmZCAmJiAoIXpvb21GYWlsZWQgfHwgIW9wdHMuY2FuY2VsT25GYWlsZWRab29tKSAmJiBfcC5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICB2YXIgcCA9IG9wdHMucGFuO1xuXG4gICAgICAgIGlmIChudW1iZXIkMShwLngpKSB7XG4gICAgICAgICAgX3AucGFuLnggPSBwLng7XG4gICAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobnVtYmVyJDEocC55KSkge1xuICAgICAgICAgIF9wLnBhbi55ID0gcC55O1xuICAgICAgICAgIHBhbkZhaWxlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYW5GYWlsZWQpIHtcbiAgICAgICAgICBldmVudHMucHVzaCgncGFuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKCd2aWV3cG9ydCcpO1xuICAgICAgICB0aGlzLmVtaXQoZXZlbnRzLmpvaW4oJyAnKSk7XG4gICAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9LFxuICAgIGNlbnRlcjogZnVuY3Rpb24gY2VudGVyKGVsZW1lbnRzKSB7XG4gICAgICB2YXIgcGFuID0gdGhpcy5nZXRDZW50ZXJQYW4oZWxlbWVudHMpO1xuXG4gICAgICBpZiAocGFuKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUucGFuID0gcGFuO1xuICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSxcbiAgICBnZXRDZW50ZXJQYW46IGZ1bmN0aW9uIGdldENlbnRlclBhbihlbGVtZW50cywgem9vbSkge1xuICAgICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmluZyhlbGVtZW50cykpIHtcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudHM7XG4gICAgICAgIGVsZW1lbnRzID0gdGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgICAgfSBlbHNlIGlmICghZWxlbWVudE9yQ29sbGVjdGlvbihlbGVtZW50cykpIHtcbiAgICAgICAgZWxlbWVudHMgPSB0aGlzLm11dGFibGVFbGVtZW50cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gY2FuJ3QgY2VudHJlIHBhbiB0byBub3RoaW5nXG5cblxuICAgICAgdmFyIGJiID0gZWxlbWVudHMuYm91bmRpbmdCb3goKTtcbiAgICAgIHZhciB3ID0gdGhpcy53aWR0aCgpO1xuICAgICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgICAgem9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3ByaXZhdGUuem9vbSA6IHpvb207XG4gICAgICB2YXIgcGFuID0ge1xuICAgICAgICAvLyBtaWRkbGVcbiAgICAgICAgeDogKHcgLSB6b29tICogKGJiLngxICsgYmIueDIpKSAvIDIsXG4gICAgICAgIHk6IChoIC0gem9vbSAqIChiYi55MSArIGJiLnkyKSkgLyAyXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHBhbjtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCB8fCAhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy52aWV3cG9ydCh7XG4gICAgICAgIHBhbjoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9LFxuICAgICAgICB6b29tOiAxXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgaW52YWxpZGF0ZVNpemU6IGZ1bmN0aW9uIGludmFsaWRhdGVTaXplKCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGUgPSBudWxsO1xuICAgIH0sXG4gICAgc2l6ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICB2YXIgY29udGFpbmVyID0gX3AuY29udGFpbmVyO1xuICAgICAgdmFyIGN5ID0gdGhpcztcbiAgICAgIHJldHVybiBfcC5zaXplQ2FjaGUgPSBfcC5zaXplQ2FjaGUgfHwgKGNvbnRhaW5lciA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuXG4gICAgICAgIHZhciB2YWwgPSBmdW5jdGlvbiB2YWwobmFtZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2lkdGg6IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIHZhbCgncGFkZGluZy1sZWZ0JykgLSB2YWwoJ3BhZGRpbmctcmlnaHQnKSxcbiAgICAgICAgICBoZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgLSB2YWwoJ3BhZGRpbmctdG9wJykgLSB2YWwoJ3BhZGRpbmctYm90dG9tJylcbiAgICAgICAgfTtcbiAgICAgIH0oKSA6IHtcbiAgICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gY29udGFpbmVyIChub3QgMCBiL2MgY2FuIGJlIHVzZWQgZm9yIGRpdmlkaW5nIGV0YylcbiAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgIGhlaWdodDogMVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB3aWR0aDogZnVuY3Rpb24gd2lkdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplKCkud2lkdGg7XG4gICAgfSxcbiAgICBoZWlnaHQ6IGZ1bmN0aW9uIGhlaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUoKS5oZWlnaHQ7XG4gICAgfSxcbiAgICBleHRlbnQ6IGZ1bmN0aW9uIGV4dGVudCgpIHtcbiAgICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICAgIHZhciB6b29tID0gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgICAgdmFyIHJiID0gdGhpcy5yZW5kZXJlZEV4dGVudCgpO1xuICAgICAgdmFyIGIgPSB7XG4gICAgICAgIHgxOiAocmIueDEgLSBwYW4ueCkgLyB6b29tLFxuICAgICAgICB4MjogKHJiLngyIC0gcGFuLngpIC8gem9vbSxcbiAgICAgICAgeTE6IChyYi55MSAtIHBhbi55KSAvIHpvb20sXG4gICAgICAgIHkyOiAocmIueTIgLSBwYW4ueSkgLyB6b29tXG4gICAgICB9O1xuICAgICAgYi53ID0gYi54MiAtIGIueDE7XG4gICAgICBiLmggPSBiLnkyIC0gYi55MTtcbiAgICAgIHJldHVybiBiO1xuICAgIH0sXG4gICAgcmVuZGVyZWRFeHRlbnQ6IGZ1bmN0aW9uIHJlbmRlcmVkRXh0ZW50KCkge1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCgpO1xuICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4MTogMCxcbiAgICAgICAgeTE6IDAsXG4gICAgICAgIHgyOiB3aWR0aCxcbiAgICAgICAgeTI6IGhlaWdodCxcbiAgICAgICAgdzogd2lkdGgsXG4gICAgICAgIGg6IGhlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGZ1bmN0aW9uIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoX2ludCkge1xuICAgICAgaWYgKF9pbnQpIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZSA9IF9pbnQ7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfVxuICB9OyAvLyBhbGlhc2VzXG5cbiAgY29yZWZuJDEuY2VudHJlID0gY29yZWZuJDEuY2VudGVyOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gIGNvcmVmbiQxLmF1dG9sb2NrTm9kZXMgPSBjb3JlZm4kMS5hdXRvbG9jaztcbiAgY29yZWZuJDEuYXV0b3VuZ3JhYmlmeU5vZGVzID0gY29yZWZuJDEuYXV0b3VuZ3JhYmlmeTtcblxuICB2YXIgZm4gPSB7XG4gICAgZGF0YTogZGVmaW5lLmRhdGEoe1xuICAgICAgZmllbGQ6ICdkYXRhJyxcbiAgICAgIGJpbmRpbmdFdmVudDogJ2RhdGEnLFxuICAgICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgICAgc2V0dGluZ0V2ZW50OiAnZGF0YScsXG4gICAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gICAgfSksXG4gICAgcmVtb3ZlRGF0YTogZGVmaW5lLnJlbW92ZURhdGEoe1xuICAgICAgZmllbGQ6ICdkYXRhJyxcbiAgICAgIGV2ZW50OiAnZGF0YScsXG4gICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICAgIH0pLFxuICAgIHNjcmF0Y2g6IGRlZmluZS5kYXRhKHtcbiAgICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgICBiaW5kaW5nRXZlbnQ6ICdzY3JhdGNoJyxcbiAgICAgIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICAgIHNldHRpbmdFdmVudDogJ3NjcmF0Y2gnLFxuICAgICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IHRydWUsXG4gICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICAgIH0pLFxuICAgIHJlbW92ZVNjcmF0Y2g6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgICBldmVudDogJ3NjcmF0Y2gnLFxuICAgICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgICAgdHJpZ2dlckV2ZW50OiB0cnVlLFxuICAgICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgICB9KVxuICB9OyAvLyBhbGlhc2VzXG5cbiAgZm4uYXR0ciA9IGZuLmRhdGE7XG4gIGZuLnJlbW92ZUF0dHIgPSBmbi5yZW1vdmVEYXRhO1xuXG4gIHZhciBDb3JlID0gZnVuY3Rpb24gQ29yZShvcHRzKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICBvcHRzID0gZXh0ZW5kKHt9LCBvcHRzKTtcbiAgICB2YXIgY29udGFpbmVyID0gb3B0cy5jb250YWluZXI7IC8vIGFsbG93IGZvciBwYXNzaW5nIGEgd3JhcHBlZCBqcXVlcnkgb2JqZWN0XG4gICAgLy8gZS5nLiBjeXRvc2NhcGUoeyBjb250YWluZXI6ICQoJyNjeScpIH0pXG5cbiAgICBpZiAoY29udGFpbmVyICYmICFodG1sRWxlbWVudChjb250YWluZXIpICYmIGh0bWxFbGVtZW50KGNvbnRhaW5lclswXSkpIHtcbiAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgICB9XG5cbiAgICB2YXIgcmVnID0gY29udGFpbmVyID8gY29udGFpbmVyLl9jeXJlZyA6IG51bGw7IC8vIGUuZy4gYWxyZWFkeSByZWdpc3RlcmVkIHNvbWUgaW5mbyAoZS5nLiByZWFkaWVzKSB2aWEganF1ZXJ5XG5cbiAgICByZWcgPSByZWcgfHwge307XG5cbiAgICBpZiAocmVnICYmIHJlZy5jeSkge1xuICAgICAgcmVnLmN5LmRlc3Ryb3koKTtcbiAgICAgIHJlZyA9IHt9OyAvLyBvbGQgaW5zdGFuY2UgPT4gcmVwbGFjZSByZWcgY29tcGxldGVseVxuICAgIH1cblxuICAgIHZhciByZWFkaWVzID0gcmVnLnJlYWRpZXMgPSByZWcucmVhZGllcyB8fCBbXTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5fY3lyZWcgPSByZWc7XG4gICAgfSAvLyBtYWtlIHN1cmUgY29udGFpbmVyIGFzc29jJ2QgcmVnIHBvaW50cyB0byB0aGlzIGN5XG5cblxuICAgIHJlZy5jeSA9IGN5O1xuICAgIHZhciBoZWFkID0gX3dpbmRvdyAhPT0gdW5kZWZpbmVkICYmIGNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmICFvcHRzLmhlYWRsZXNzO1xuICAgIHZhciBvcHRpb25zID0gb3B0cztcbiAgICBvcHRpb25zLmxheW91dCA9IGV4dGVuZCh7XG4gICAgICBuYW1lOiBoZWFkID8gJ2dyaWQnIDogJ251bGwnXG4gICAgfSwgb3B0aW9ucy5sYXlvdXQpO1xuICAgIG9wdGlvbnMucmVuZGVyZXIgPSBleHRlbmQoe1xuICAgICAgbmFtZTogaGVhZCA/ICdjYW52YXMnIDogJ251bGwnXG4gICAgfSwgb3B0aW9ucy5yZW5kZXJlcik7XG5cbiAgICB2YXIgZGVmVmFsID0gZnVuY3Rpb24gZGVmVmFsKGRlZiwgdmFsLCBhbHRWYWwpIHtcbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSBlbHNlIGlmIChhbHRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYWx0VmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZSA9IHtcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgLy8gaHRtbCBkb20gZWxlIGNvbnRhaW5lclxuICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgLy8gd2hldGhlciByZWFkeSBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAvLyBjYWNoZWQgb3B0aW9uc1xuICAgICAgZWxlbWVudHM6IG5ldyBDb2xsZWN0aW9uKHRoaXMpLFxuICAgICAgLy8gZWxlbWVudHMgaW4gdGhlIGdyYXBoXG4gICAgICBsaXN0ZW5lcnM6IFtdLFxuICAgICAgLy8gbGlzdCBvZiBsaXN0ZW5lcnNcbiAgICAgIGFuaUVsZXM6IG5ldyBDb2xsZWN0aW9uKHRoaXMpLFxuICAgICAgLy8gZWxlbWVudHMgYmVpbmcgYW5pbWF0ZWRcbiAgICAgIGRhdGE6IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAgIC8vIGRhdGEgZm9yIHRoZSBjb3JlXG4gICAgICBzY3JhdGNoOiB7fSxcbiAgICAgIC8vIHNjcmF0Y2ggb2JqZWN0IGZvciBjb3JlXG4gICAgICBsYXlvdXQ6IG51bGwsXG4gICAgICByZW5kZXJlcjogbnVsbCxcbiAgICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgICAvLyB3aGV0aGVyIGRlc3Ryb3kgd2FzIGNhbGxlZFxuICAgICAgbm90aWZpY2F0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAvLyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHJlbmRlcmVyXG4gICAgICBtaW5ab29tOiAxZS01MCxcbiAgICAgIG1heFpvb206IDFlNTAsXG4gICAgICB6b29taW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMuem9vbWluZ0VuYWJsZWQpLFxuICAgICAgdXNlclpvb21pbmdFbmFibGVkOiBkZWZWYWwodHJ1ZSwgb3B0aW9ucy51c2VyWm9vbWluZ0VuYWJsZWQpLFxuICAgICAgcGFubmluZ0VuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLnBhbm5pbmdFbmFibGVkKSxcbiAgICAgIHVzZXJQYW5uaW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMudXNlclBhbm5pbmdFbmFibGVkKSxcbiAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLmJveFNlbGVjdGlvbkVuYWJsZWQpLFxuICAgICAgYXV0b2xvY2s6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvbG9jaywgb3B0aW9ucy5hdXRvbG9ja05vZGVzKSxcbiAgICAgIGF1dG91bmdyYWJpZnk6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvdW5ncmFiaWZ5LCBvcHRpb25zLmF1dG91bmdyYWJpZnlOb2RlcyksXG4gICAgICBhdXRvdW5zZWxlY3RpZnk6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvdW5zZWxlY3RpZnkpLFxuICAgICAgc3R5bGVFbmFibGVkOiBvcHRpb25zLnN0eWxlRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gaGVhZCA6IG9wdGlvbnMuc3R5bGVFbmFibGVkLFxuICAgICAgem9vbTogbnVtYmVyJDEob3B0aW9ucy56b29tKSA/IG9wdGlvbnMuem9vbSA6IDEsXG4gICAgICBwYW46IHtcbiAgICAgICAgeDogcGxhaW5PYmplY3Qob3B0aW9ucy5wYW4pICYmIG51bWJlciQxKG9wdGlvbnMucGFuLngpID8gb3B0aW9ucy5wYW4ueCA6IDAsXG4gICAgICAgIHk6IHBsYWluT2JqZWN0KG9wdGlvbnMucGFuKSAmJiBudW1iZXIkMShvcHRpb25zLnBhbi55KSA/IG9wdGlvbnMucGFuLnkgOiAwXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgIC8vIG9iamVjdCBmb3IgY3VycmVudGx5LXJ1bm5pbmcgYW5pbWF0aW9uc1xuICAgICAgICBjdXJyZW50OiBbXSxcbiAgICAgICAgcXVldWU6IFtdXG4gICAgICB9LFxuICAgICAgaGFzQ29tcG91bmROb2RlczogZmFsc2UsXG4gICAgICBtdWx0aUNsaWNrRGVib3VuY2VUaW1lOiBkZWZWYWwoMjUwLCBvcHRpb25zLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpXG4gICAgfTtcblxuICAgIHRoaXMuY3JlYXRlRW1pdHRlcigpOyAvLyBzZXQgc2VsZWN0aW9uIHR5cGVcblxuICAgIHRoaXMuc2VsZWN0aW9uVHlwZShvcHRpb25zLnNlbGVjdGlvblR5cGUpOyAvLyBpbml0IHpvb20gYm91bmRzXG5cbiAgICB0aGlzLnpvb21SYW5nZSh7XG4gICAgICBtaW46IG9wdGlvbnMubWluWm9vbSxcbiAgICAgIG1heDogb3B0aW9ucy5tYXhab29tXG4gICAgfSk7XG5cbiAgICB2YXIgbG9hZEV4dERhdGEgPSBmdW5jdGlvbiBsb2FkRXh0RGF0YShleHREYXRhLCBuZXh0KSB7XG4gICAgICB2YXIgYW55SXNQcm9taXNlID0gZXh0RGF0YS5zb21lKHByb21pc2UpO1xuXG4gICAgICBpZiAoYW55SXNQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGV4dERhdGEpLnRoZW4obmV4dCk7IC8vIGxvYWQgYWxsIGRhdGEgYXN5bmNocm9ub3VzbHksIHRoZW4gZXhlYyByZXN0IG9mIGluaXRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQoZXh0RGF0YSk7IC8vIGV4ZWMgc3luY2hyb25vdXNseSBmb3IgY29udmVuaWVuY2VcbiAgICAgIH1cbiAgICB9OyAvLyBzdGFydCB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQgc28gd2UgaGF2ZSBzb21ldGhpbmcgYmVmb3JlIGxvYWRpbmcgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldFxuXG5cbiAgICBpZiAoX3Auc3R5bGVFbmFibGVkKSB7XG4gICAgICBjeS5zZXRTdHlsZShbXSk7XG4gICAgfSAvLyBjcmVhdGUgdGhlIHJlbmRlcmVyXG5cblxuICAgIHZhciByZW5kZXJlck9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMsIG9wdGlvbnMucmVuZGVyZXIpOyAvLyBhbGxvdyByZW5kZXJpbmcgaGludHMgaW4gdG9wIGxldmVsIG9wdGlvbnNcblxuICAgIGN5LmluaXRSZW5kZXJlcihyZW5kZXJlck9wdGlvbnMpO1xuXG4gICAgdmFyIHNldEVsZXNBbmRMYXlvdXQgPSBmdW5jdGlvbiBzZXRFbGVzQW5kTGF5b3V0KGVsZW1lbnRzLCBvbmxvYWQsIG9uZG9uZSkge1xuICAgICAgY3kubm90aWZpY2F0aW9ucyhmYWxzZSk7IC8vIHJlbW92ZSBvbGQgZWxlbWVudHNcblxuICAgICAgdmFyIG9sZEVsZXMgPSBjeS5tdXRhYmxlRWxlbWVudHMoKTtcblxuICAgICAgaWYgKG9sZEVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBvbGRFbGVzLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCkge1xuICAgICAgICBpZiAocGxhaW5PYmplY3QoZWxlbWVudHMpIHx8IGFycmF5KGVsZW1lbnRzKSkge1xuICAgICAgICAgIGN5LmFkZChlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3kub25lKCdsYXlvdXRyZWFkeScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGN5Lm5vdGlmaWNhdGlvbnModHJ1ZSk7XG4gICAgICAgIGN5LmVtaXQoZSk7IC8vIHdlIG1pc3NlZCB0aGlzIGV2ZW50IGJ5IHR1cm5pbmcgbm90aWZpY2F0aW9ucyBvZmYsIHNvIHBhc3MgaXQgb25cblxuICAgICAgICBjeS5vbmUoJ2xvYWQnLCBvbmxvYWQpO1xuICAgICAgICBjeS5lbWl0QW5kTm90aWZ5KCdsb2FkJyk7XG4gICAgICB9KS5vbmUoJ2xheW91dHN0b3AnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN5Lm9uZSgnZG9uZScsIG9uZG9uZSk7XG4gICAgICAgIGN5LmVtaXQoJ2RvbmUnKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGxheW91dE9wdHMgPSBleHRlbmQoe30sIGN5Ll9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtcbiAgICAgIGxheW91dE9wdHMuZWxlcyA9IGN5LmVsZW1lbnRzKCk7XG4gICAgICBjeS5sYXlvdXQobGF5b3V0T3B0cykucnVuKCk7XG4gICAgfTtcblxuICAgIGxvYWRFeHREYXRhKFtvcHRpb25zLnN0eWxlLCBvcHRpb25zLmVsZW1lbnRzXSwgZnVuY3Rpb24gKHRoZW5zKSB7XG4gICAgICB2YXIgaW5pdFN0eWxlID0gdGhlbnNbMF07XG4gICAgICB2YXIgaW5pdEVsZXMgPSB0aGVuc1sxXTsgLy8gaW5pdCBzdHlsZVxuXG4gICAgICBpZiAoX3Auc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGN5LnN0eWxlKCkuYXBwZW5kKGluaXRTdHlsZSk7XG4gICAgICB9IC8vIGluaXRpYWwgbG9hZFxuXG5cbiAgICAgIHNldEVsZXNBbmRMYXlvdXQoaW5pdEVsZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gb25yZWFkeVxuICAgICAgICBjeS5zdGFydEFuaW1hdGlvbkxvb3AoKTtcbiAgICAgICAgX3AucmVhZHkgPSB0cnVlOyAvLyBpZiBhIHJlYWR5IGNhbGxiYWNrIGlzIHNwZWNpZmllZCBhcyBhbiBvcHRpb24sIHRoZSBiaW5kIGl0XG5cbiAgICAgICAgaWYgKGZuJDYob3B0aW9ucy5yZWFkeSkpIHtcbiAgICAgICAgICBjeS5vbigncmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgICAgICAgfSAvLyBiaW5kIGFsbCB0aGUgcmVhZHkgaGFuZGxlcnMgcmVnaXN0ZXJlZCBiZWZvcmUgY3JlYXRpbmcgdGhpcyBpbnN0YW5jZVxuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFkaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGZuID0gcmVhZGllc1tpXTtcbiAgICAgICAgICBjeS5vbigncmVhZHknLCBmbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnKSB7XG4gICAgICAgICAgcmVnLnJlYWRpZXMgPSBbXTtcbiAgICAgICAgfSAvLyBjbGVhciBiL2Mgd2UndmUgYm91bmQgdGhlbSBhbGwgYW5kIGRvbid0IHdhbnQgdG8ga2VlcCBpdCBhcm91bmQgaW4gY2FzZSBhIG5ldyBjb3JlIHVzZXMgdGhlIHNhbWUgZGl2IGV0Y1xuXG5cbiAgICAgICAgY3kuZW1pdCgncmVhZHknKTtcbiAgICAgIH0sIG9wdGlvbnMuZG9uZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGNvcmVmbiA9IENvcmUucHJvdG90eXBlOyAvLyBzaG9ydCBhbGlhc1xuXG4gIGV4dGVuZChjb3JlZm4sIHtcbiAgICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJ2NvcmUnO1xuICAgIH0sXG4gICAgaXNSZWFkeTogZnVuY3Rpb24gaXNSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5O1xuICAgIH0sXG4gICAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWQ7XG4gICAgfSxcbiAgICByZWFkeTogZnVuY3Rpb24gcmVhZHkoZm4pIHtcbiAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KCdyZWFkeScsIFtdLCBmbik7IC8vIGp1c3QgY2FsbHMgZm4gYXMgdGhvdWdoIHRyaWdnZXJlZCB2aWEgcmVhZHkgZXZlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub24oJ3JlYWR5JywgZm4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzO1xuICAgICAgaWYgKGN5LmRlc3Ryb3llZCgpKSByZXR1cm47XG4gICAgICBjeS5zdG9wQW5pbWF0aW9uTG9vcCgpO1xuICAgICAgY3kuZGVzdHJveVJlbmRlcmVyKCk7XG4gICAgICB0aGlzLmVtaXQoJ2Rlc3Ryb3knKTtcbiAgICAgIGN5Ll9wcml2YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICByZXR1cm4gY3k7XG4gICAgfSxcbiAgICBoYXNFbGVtZW50V2l0aElkOiBmdW5jdGlvbiBoYXNFbGVtZW50V2l0aElkKGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKGlkKTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZChpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIH0sXG4gICAgaGFzQ29tcG91bmROb2RlczogZnVuY3Rpb24gaGFzQ29tcG91bmROb2RlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM7XG4gICAgfSxcbiAgICBoZWFkbGVzczogZnVuY3Rpb24gaGVhZGxlc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCk7XG4gICAgfSxcbiAgICBzdHlsZUVuYWJsZWQ6IGZ1bmN0aW9uIHN0eWxlRW5hYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtcbiAgICB9LFxuICAgIGFkZFRvUG9vbDogZnVuY3Rpb24gYWRkVG9Qb29sKGVsZXMpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMubWVyZ2UoZWxlcyk7XG5cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH0sXG4gICAgcmVtb3ZlRnJvbVBvb2w6IGZ1bmN0aW9uIHJlbW92ZUZyb21Qb29sKGVsZXMpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlbGVzKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBjb250YWluZXI6IGZ1bmN0aW9uIGNvbnRhaW5lcigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lciB8fCBudWxsO1xuICAgIH0sXG4gICAgd2luZG93OiBmdW5jdGlvbiB3aW5kb3coKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fcHJpdmF0ZS5jb250YWluZXI7XG4gICAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHJldHVybiBfd2luZG93O1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLl9wcml2YXRlLmNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuXG4gICAgICBpZiAob3duZXJEb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8IG93bmVyRG9jdW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gX3dpbmRvdztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgX3dpbmRvdztcbiAgICB9LFxuICAgIG1vdW50OiBmdW5jdGlvbiBtb3VudChjb250YWluZXIpIHtcbiAgICAgIGlmIChjb250YWluZXIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjeSA9IHRoaXM7XG4gICAgICB2YXIgX3AgPSBjeS5fcHJpdmF0ZTtcbiAgICAgIHZhciBvcHRpb25zID0gX3Aub3B0aW9ucztcblxuICAgICAgaWYgKCFodG1sRWxlbWVudChjb250YWluZXIpICYmIGh0bWxFbGVtZW50KGNvbnRhaW5lclswXSkpIHtcbiAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyWzBdO1xuICAgICAgfVxuXG4gICAgICBjeS5zdG9wQW5pbWF0aW9uTG9vcCgpO1xuICAgICAgY3kuZGVzdHJveVJlbmRlcmVyKCk7XG4gICAgICBfcC5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICBfcC5zdHlsZUVuYWJsZWQgPSB0cnVlO1xuICAgICAgY3kuaW52YWxpZGF0ZVNpemUoKTtcbiAgICAgIGN5LmluaXRSZW5kZXJlcihleHRlbmQoe30sIG9wdGlvbnMsIG9wdGlvbnMucmVuZGVyZXIsIHtcbiAgICAgICAgLy8gYWxsb3cgY3VzdG9tIHJlbmRlcmVyIG5hbWUgdG8gYmUgcmUtdXNlZCwgb3RoZXJ3aXNlIHVzZSBjYW52YXNcbiAgICAgICAgbmFtZTogb3B0aW9ucy5yZW5kZXJlci5uYW1lID09PSAnbnVsbCcgPyAnY2FudmFzJyA6IG9wdGlvbnMucmVuZGVyZXIubmFtZVxuICAgICAgfSkpO1xuICAgICAgY3kuc3RhcnRBbmltYXRpb25Mb29wKCk7XG4gICAgICBjeS5zdHlsZShvcHRpb25zLnN0eWxlKTtcbiAgICAgIGN5LmVtaXQoJ21vdW50Jyk7XG4gICAgICByZXR1cm4gY3k7XG4gICAgfSxcbiAgICB1bm1vdW50OiBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgICAgdmFyIGN5ID0gdGhpcztcbiAgICAgIGN5LnN0b3BBbmltYXRpb25Mb29wKCk7XG4gICAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICAgIGN5LmluaXRSZW5kZXJlcih7XG4gICAgICAgIG5hbWU6ICdudWxsJ1xuICAgICAgfSk7XG4gICAgICBjeS5lbWl0KCd1bm1vdW50Jyk7XG4gICAgICByZXR1cm4gY3k7XG4gICAgfSxcbiAgICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGNvcHkodGhpcy5fcHJpdmF0ZS5vcHRpb25zKTtcbiAgICB9LFxuICAgIGpzb246IGZ1bmN0aW9uIGpzb24ob2JqKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzO1xuICAgICAgdmFyIF9wID0gY3kuX3ByaXZhdGU7XG4gICAgICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuXG4gICAgICB2YXIgZ2V0RnJlc2hSZWYgPSBmdW5jdGlvbiBnZXRGcmVzaFJlZihlbGUpIHtcbiAgICAgICAgcmV0dXJuIGN5LmdldEVsZW1lbnRCeUlkKGVsZS5pZCgpKTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChwbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAgIC8vIHNldFxuICAgICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgICAgaWYgKG9iai5lbGVtZW50cykge1xuICAgICAgICAgIHZhciBpZEluSnNvbiA9IHt9O1xuXG4gICAgICAgICAgdmFyIHVwZGF0ZUVsZXMgPSBmdW5jdGlvbiB1cGRhdGVFbGVzKGpzb25zLCBncikge1xuICAgICAgICAgICAgdmFyIHRvQWRkID0gW107XG4gICAgICAgICAgICB2YXIgdG9Nb2QgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIganNvbiA9IGpzb25zW2ldO1xuXG4gICAgICAgICAgICAgIGlmICghanNvbi5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgd2FybignY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUnKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBpZCA9ICcnICsganNvbi5kYXRhLmlkOyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuXG4gICAgICAgICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICAgIGlkSW5Kc29uW2lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGVsZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBlbGVtZW50IHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICAgICAgICAgICAgdG9Nb2QucHVzaCh7XG4gICAgICAgICAgICAgICAgICBlbGU6IGVsZSxcbiAgICAgICAgICAgICAgICAgIGpzb246IGpzb25cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2hvdWxkIGJlIGFkZGVkXG4gICAgICAgICAgICAgICAgaWYgKGdyKSB7XG4gICAgICAgICAgICAgICAgICBqc29uLmdyb3VwID0gZ3I7XG4gICAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKGpzb24pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKGpzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjeS5hZGQodG9BZGQpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdG9Nb2QubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBfdG9Nb2QkX2kgPSB0b01vZFtfaV0sXG4gICAgICAgICAgICAgICAgICBfZWxlID0gX3RvTW9kJF9pLmVsZSxcbiAgICAgICAgICAgICAgICAgIF9qc29uID0gX3RvTW9kJF9pLmpzb247XG5cbiAgICAgICAgICAgICAgX2VsZS5qc29uKF9qc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGFycmF5KG9iai5lbGVtZW50cykpIHtcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzOiBbXVxuICAgICAgICAgICAgdXBkYXRlRWxlcyhvYmouZWxlbWVudHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbGVtZW50czogeyBub2RlczogW10sIGVkZ2VzOiBbXSB9XG4gICAgICAgICAgICB2YXIgZ3JzID0gWydub2RlcycsICdlZGdlcyddO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgZ3IgPSBncnNbaV07XG4gICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IG9iai5lbGVtZW50c1tncl07XG5cbiAgICAgICAgICAgICAgaWYgKGFycmF5KGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUVsZXMoZWxlbWVudHMsIGdyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwYXJlbnRzVG9SZW1vdmUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgcmV0dXJuICFpZEluSnNvbltlbGUuaWQoKV07XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICAgICAgcGFyZW50c1RvUmVtb3ZlLm1lcmdlKGVsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7IC8vIHNvIHRoYXQgY2hpbGRyZW4gYXJlIG5vdCByZW1vdmVkIHcvcGFyZW50XG5cbiAgICAgICAgICBwYXJlbnRzVG9SZW1vdmUuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlLmNoaWxkcmVuKCkubW92ZSh7XG4gICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7IC8vIGludGVybWVkaWF0ZSBwYXJlbnRzIG1heSBiZSBtb3ZlZCBieSBwcmlvciBsaW5lLCBzbyBtYWtlIHN1cmUgd2UgcmVtb3ZlIGJ5IGZyZXNoIHJlZnNcblxuICAgICAgICAgIHBhcmVudHNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRGcmVzaFJlZihlbGUpLnJlbW92ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iai5zdHlsZSkge1xuICAgICAgICAgIGN5LnN0eWxlKG9iai5zdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqLnpvb20gIT0gbnVsbCAmJiBvYmouem9vbSAhPT0gX3Auem9vbSkge1xuICAgICAgICAgIGN5Lnpvb20ob2JqLnpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iai5wYW4pIHtcbiAgICAgICAgICBpZiAob2JqLnBhbi54ICE9PSBfcC5wYW4ueCB8fCBvYmoucGFuLnkgIT09IF9wLnBhbi55KSB7XG4gICAgICAgICAgICBjeS5wYW4ob2JqLnBhbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iai5kYXRhKSB7XG4gICAgICAgICAgY3kuZGF0YShvYmouZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmllbGRzID0gWydtaW5ab29tJywgJ21heFpvb20nLCAnem9vbWluZ0VuYWJsZWQnLCAndXNlclpvb21pbmdFbmFibGVkJywgJ3Bhbm5pbmdFbmFibGVkJywgJ3VzZXJQYW5uaW5nRW5hYmxlZCcsICdib3hTZWxlY3Rpb25FbmFibGVkJywgJ2F1dG9sb2NrJywgJ2F1dG91bmdyYWJpZnknLCAnYXV0b3Vuc2VsZWN0aWZ5JywgJ211bHRpQ2xpY2tEZWJvdW5jZVRpbWUnXTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBmaWVsZHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIHZhciBmID0gZmllbGRzW19pMl07XG5cbiAgICAgICAgICBpZiAob2JqW2ZdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGN5W2ZdKG9ialtmXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3kuZW5kQmF0Y2goKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXRcbiAgICAgICAgdmFyIGZsYXQgPSAhIW9iajtcbiAgICAgICAgdmFyIGpzb24gPSB7fTtcblxuICAgICAgICBpZiAoZmxhdCkge1xuICAgICAgICAgIGpzb24uZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUuanNvbigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpzb24uZWxlbWVudHMgPSB7fTtcbiAgICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgdmFyIGdyb3VwID0gZWxlLmdyb3VwKCk7XG5cbiAgICAgICAgICAgIGlmICghanNvbi5lbGVtZW50c1tncm91cF0pIHtcbiAgICAgICAgICAgICAganNvbi5lbGVtZW50c1tncm91cF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAganNvbi5lbGVtZW50c1tncm91cF0ucHVzaChlbGUuanNvbigpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCkge1xuICAgICAgICAgIGpzb24uc3R5bGUgPSBjeS5zdHlsZSgpLmpzb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGpzb24uZGF0YSA9IGNvcHkoY3kuZGF0YSgpKTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBfcC5vcHRpb25zO1xuICAgICAgICBqc29uLnpvb21pbmdFbmFibGVkID0gX3Auem9vbWluZ0VuYWJsZWQ7XG4gICAgICAgIGpzb24udXNlclpvb21pbmdFbmFibGVkID0gX3AudXNlclpvb21pbmdFbmFibGVkO1xuICAgICAgICBqc29uLnpvb20gPSBfcC56b29tO1xuICAgICAgICBqc29uLm1pblpvb20gPSBfcC5taW5ab29tO1xuICAgICAgICBqc29uLm1heFpvb20gPSBfcC5tYXhab29tO1xuICAgICAgICBqc29uLnBhbm5pbmdFbmFibGVkID0gX3AucGFubmluZ0VuYWJsZWQ7XG4gICAgICAgIGpzb24udXNlclBhbm5pbmdFbmFibGVkID0gX3AudXNlclBhbm5pbmdFbmFibGVkO1xuICAgICAgICBqc29uLnBhbiA9IGNvcHkoX3AucGFuKTtcbiAgICAgICAganNvbi5ib3hTZWxlY3Rpb25FbmFibGVkID0gX3AuYm94U2VsZWN0aW9uRW5hYmxlZDtcbiAgICAgICAganNvbi5yZW5kZXJlciA9IGNvcHkob3B0aW9ucy5yZW5kZXJlcik7XG4gICAgICAgIGpzb24uaGlkZUVkZ2VzT25WaWV3cG9ydCA9IG9wdGlvbnMuaGlkZUVkZ2VzT25WaWV3cG9ydDtcbiAgICAgICAganNvbi50ZXh0dXJlT25WaWV3cG9ydCA9IG9wdGlvbnMudGV4dHVyZU9uVmlld3BvcnQ7XG4gICAgICAgIGpzb24ud2hlZWxTZW5zaXRpdml0eSA9IG9wdGlvbnMud2hlZWxTZW5zaXRpdml0eTtcbiAgICAgICAganNvbi5tb3Rpb25CbHVyID0gb3B0aW9ucy5tb3Rpb25CbHVyO1xuICAgICAgICBqc29uLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUgPSBvcHRpb25zLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvcmVmbi4kaWQgPSBjb3JlZm4uZ2V0RWxlbWVudEJ5SWQ7XG4gIFtjb3JlZm4kOSwgY29yZWZuJDgsIGVsZXNmbiwgY29yZWZuJDcsIGNvcmVmbiQ2LCBjb3JlZm4kNSwgY29yZWZuJDQsIGNvcmVmbiQzLCBjb3JlZm4kMiwgY29yZWZuJDEsIGZuXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGV4dGVuZChjb3JlZm4sIHByb3BzKTtcbiAgfSk7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuICB2YXIgZGVmYXVsdHMkNyA9IHtcbiAgICBmaXQ6IHRydWUsXG4gICAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICAgIGRpcmVjdGVkOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSB0cmVlIGlzIGRpcmVjdGVkIGRvd253YXJkcyAob3IgZWRnZXMgY2FuIHBvaW50IGluIGFueSBkaXJlY3Rpb24gaWYgZmFsc2UpXG4gICAgcGFkZGluZzogMzAsXG4gICAgLy8gcGFkZGluZyBvbiBmaXRcbiAgICBjaXJjbGU6IGZhbHNlLFxuICAgIC8vIHB1dCBkZXB0aHMgaW4gY29uY2VudHJpYyBjaXJjbGVzIGlmIHRydWUsIHB1dCBkZXB0aHMgdG9wIGRvd24gaWYgZmFsc2VcbiAgICBncmlkOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBldmVuIGdyaWQgaW50byB3aGljaCB0aGUgREFHIGlzIHBsYWNlZCAoY2lyY2xlOmZhbHNlIG9ubHkpXG4gICAgc3BhY2luZ0ZhY3RvcjogMS43NSxcbiAgICAvLyBwb3NpdGl2ZSBzcGFjaW5nIGZhY3RvciwgbGFyZ2VyID0+IG1vcmUgc3BhY2UgYmV0d2VlbiBub2RlcyAoTi5CLiBuL2EgaWYgY2F1c2VzIG92ZXJsYXApXG4gICAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gICAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggaWYgbm90IGVub3VnaCBzcGFjZVxuICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gICAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgICByb290czogdW5kZWZpbmVkLFxuICAgIC8vIHRoZSByb290cyBvZiB0aGUgdHJlZXNcbiAgICBkZXB0aFNvcnQ6IHVuZGVmaW5lZCxcbiAgICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgbm9kZXMgYXQgZXF1YWwgZGVwdGguIGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1zIGlmIGVuYWJsZWRcbiAgICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWQsXG4gICAgYW5pbWF0ZUZpbHRlcjogZnVuY3Rpb24gYW5pbWF0ZUZpbHRlcihub2RlLCBpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8vIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGFuaW1hdGVkLiAgQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkLiAgTm9uLWFuaW1hdGVkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGxheW91dCBzdGFydHNcbiAgICByZWFkeTogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gICAgc3RvcDogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzXG5cbiAgfTtcbiAgdmFyIGRlcHJlY2F0ZWRPcHRpb25EZWZhdWx0cyA9IHtcbiAgICBtYXhpbWFsOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRvIHNoaWZ0IG5vZGVzIGRvd24gdGhlaXIgbmF0dXJhbCBCRlMgZGVwdGhzIGluIG9yZGVyIHRvIGF2b2lkIHVwd2FyZHMgZWRnZXMgKERBR1Mgb25seSk7IHNldHRpbmcgYWN5Y2xpYyB0byB0cnVlIHNldHMgbWF4aW1hbCB0byB0cnVlIGFsc29cbiAgICBhY3ljbGljOiBmYWxzZSAvLyB3aGV0aGVyIHRoZSB0cmVlIGlzIGFjeWNsaWMgYW5kIHRodXMgYSBub2RlIGNvdWxkIGJlIHNoaWZ0ZWQgKGR1ZSB0byB0aGUgbWF4aW1hbCBvcHRpb24pIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wOyBzZXR0aW5nIHRvIHRydWUgc2V0cyBtYXhpbWFsIHRvIHRydWUgYWxzbzsgaWYgeW91IGFyZSB1bmNlcnRhaW4gd2hldGhlciBhIHRyZWUgaXMgYWN5Y2xpYywgc2V0IHRvIGZhbHNlIHRvIGF2b2lkIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wc1xuXG4gIH07XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICB2YXIgZ2V0SW5mbyA9IGZ1bmN0aW9uIGdldEluZm8oZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnKTtcbiAgfTtcblxuICB2YXIgc2V0SW5mbyA9IGZ1bmN0aW9uIHNldEluZm8oZWxlLCBvYmopIHtcbiAgICByZXR1cm4gZWxlLnNjcmF0Y2goJ2JyZWFkdGhmaXJzdCcsIG9iaik7XG4gIH07XG5cbiAgZnVuY3Rpb24gQnJlYWR0aEZpcnN0TGF5b3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDcsIGRlcHJlY2F0ZWRPcHRpb25EZWZhdWx0cywgb3B0aW9ucyk7XG4gIH1cblxuICBCcmVhZHRoRmlyc3RMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBvcHRpb25zID0gcGFyYW1zO1xuICAgIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gIW4uaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICB2YXIgZ3JhcGggPSBlbGVzO1xuICAgIHZhciBkaXJlY3RlZCA9IG9wdGlvbnMuZGlyZWN0ZWQ7XG4gICAgdmFyIG1heGltYWwgPSBvcHRpb25zLmFjeWNsaWMgfHwgb3B0aW9ucy5tYXhpbWFsIHx8IG9wdGlvbnMubWF4aW1hbEFkanVzdG1lbnRzID4gMDsgLy8gbWF4aW1hbEFkanVzdG1lbnRzIGZvciBjb21wYXQuIHcvIG9sZCBjb2RlOyBhbHNvLCBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZVxuXG4gICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHc6IGN5LndpZHRoKCksXG4gICAgICBoOiBjeS5oZWlnaHQoKVxuICAgIH0pO1xuICAgIHZhciByb290cztcblxuICAgIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKG9wdGlvbnMucm9vdHMpKSB7XG4gICAgICByb290cyA9IG9wdGlvbnMucm9vdHM7XG4gICAgfSBlbHNlIGlmIChhcnJheShvcHRpb25zLnJvb3RzKSkge1xuICAgICAgdmFyIHJvb3RzQXJyYXkgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnJvb3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpZCA9IG9wdGlvbnMucm9vdHNbaV07XG4gICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIHJvb3RzQXJyYXkucHVzaChlbGUpO1xuICAgICAgfVxuXG4gICAgICByb290cyA9IGN5LmNvbGxlY3Rpb24ocm9vdHNBcnJheSk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcob3B0aW9ucy5yb290cykpIHtcbiAgICAgIHJvb3RzID0gY3kuJChvcHRpb25zLnJvb3RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIHJvb3RzID0gbm9kZXMucm9vdHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjb21wb25lbnRzID0gZWxlcy5jb21wb25lbnRzKCk7XG4gICAgICAgIHJvb3RzID0gY3kuY29sbGVjdGlvbigpO1xuXG4gICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICAgICAgdmFyIGNvbXAgPSBjb21wb25lbnRzW19pXTtcbiAgICAgICAgICB2YXIgbWF4RGVncmVlID0gY29tcC5tYXhEZWdyZWUoZmFsc2UpO1xuICAgICAgICAgIHZhciBjb21wUm9vdHMgPSBjb21wLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlLmRlZ3JlZShmYWxzZSkgPT09IG1heERlZ3JlZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByb290cyA9IHJvb3RzLmFkZChjb21wUm9vdHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb21wb25lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIF9sb29wKF9pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZXB0aHMgPSBbXTtcbiAgICB2YXIgZm91bmRCeUJmcyA9IHt9O1xuXG4gICAgdmFyIGFkZFRvRGVwdGggPSBmdW5jdGlvbiBhZGRUb0RlcHRoKGVsZSwgZCkge1xuICAgICAgaWYgKGRlcHRoc1tkXSA9PSBudWxsKSB7XG4gICAgICAgIGRlcHRoc1tkXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICB2YXIgaSA9IGRlcHRoc1tkXS5sZW5ndGg7XG4gICAgICBkZXB0aHNbZF0ucHVzaChlbGUpO1xuICAgICAgc2V0SW5mbyhlbGUsIHtcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIGRlcHRoOiBkXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIGNoYW5nZURlcHRoID0gZnVuY3Rpb24gY2hhbmdlRGVwdGgoZWxlLCBuZXdEZXB0aCkge1xuICAgICAgdmFyIF9nZXRJbmZvID0gZ2V0SW5mbyhlbGUpLFxuICAgICAgICAgIGRlcHRoID0gX2dldEluZm8uZGVwdGgsXG4gICAgICAgICAgaW5kZXggPSBfZ2V0SW5mby5pbmRleDtcblxuICAgICAgZGVwdGhzW2RlcHRoXVtpbmRleF0gPSBudWxsO1xuICAgICAgYWRkVG9EZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgICB9OyAvLyBmaW5kIHRoZSBkZXB0aHMgb2YgdGhlIG5vZGVzXG5cblxuICAgIGdyYXBoLmJmcyh7XG4gICAgICByb290czogcm9vdHMsXG4gICAgICBkaXJlY3RlZDogb3B0aW9ucy5kaXJlY3RlZCxcbiAgICAgIHZpc2l0OiBmdW5jdGlvbiB2aXNpdChub2RlLCBlZGdlLCBwTm9kZSwgaSwgZGVwdGgpIHtcbiAgICAgICAgdmFyIGVsZSA9IG5vZGVbMF07XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICBhZGRUb0RlcHRoKGVsZSwgZGVwdGgpO1xuICAgICAgICBmb3VuZEJ5QmZzW2lkXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7IC8vIGNoZWNrIGZvciBub2RlcyBub3QgZm91bmQgYnkgYmZzXG5cbiAgICB2YXIgb3JwaGFuTm9kZXMgPSBbXTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIHZhciBfZWxlID0gbm9kZXNbX2kyXTtcblxuICAgICAgaWYgKGZvdW5kQnlCZnNbX2VsZS5pZCgpXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ycGhhbk5vZGVzLnB1c2goX2VsZSk7XG4gICAgICB9XG4gICAgfSAvLyBhc3NpZ24gdGhlIG5vZGVzIGEgZGVwdGggYW5kIGluZGV4XG5cblxuICAgIHZhciBhc3NpZ25EZXB0aHNBdCA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRoc0F0KGkpIHtcbiAgICAgIHZhciBlbGVzID0gZGVwdGhzW2ldO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIF9lbGUyID0gZWxlc1tqXTtcblxuICAgICAgICBpZiAoX2VsZTIgPT0gbnVsbCkge1xuICAgICAgICAgIGVsZXMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGotLTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEluZm8oX2VsZTIsIHtcbiAgICAgICAgICBkZXB0aDogaSxcbiAgICAgICAgICBpbmRleDogalxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGFzc2lnbkRlcHRocyA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRocygpIHtcbiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGRlcHRocy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgIGFzc2lnbkRlcHRoc0F0KF9pMyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBhZGp1c3RNYXhpbWFsbHkgPSBmdW5jdGlvbiBhZGp1c3RNYXhpbWFsbHkoZWxlLCBzaGlmdGVkKSB7XG4gICAgICB2YXIgZUluZm8gPSBnZXRJbmZvKGVsZSk7XG4gICAgICB2YXIgaW5jb21lcnMgPSBlbGUuaW5jb21lcnMoKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC5pc05vZGUoKSAmJiBlbGVzLmhhcyhlbCk7XG4gICAgICB9KTtcbiAgICAgIHZhciBtYXhEZXB0aCA9IC0xO1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaW5jb21lcnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGluY21yID0gaW5jb21lcnNba107XG4gICAgICAgIHZhciBpSW5mbyA9IGdldEluZm8oaW5jbXIpO1xuICAgICAgICBtYXhEZXB0aCA9IE1hdGgubWF4KG1heERlcHRoLCBpSW5mby5kZXB0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlSW5mby5kZXB0aCA8PSBtYXhEZXB0aCkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWN5Y2xpYyAmJiBzaGlmdGVkW2lkXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld0RlcHRoID0gbWF4RGVwdGggKyAxO1xuICAgICAgICBjaGFuZ2VEZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgICAgICAgc2hpZnRlZFtpZF0gPSBuZXdEZXB0aDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9OyAvLyBmb3IgdGhlIGRpcmVjdGVkIGNhc2UsIHRyeSB0byBtYWtlIHRoZSBlZGdlcyBhbGwgZ28gZG93biAoaS5lLiBkZXB0aCBpID0+IGRlcHRoIGkgKyAxKVxuXG5cbiAgICBpZiAoZGlyZWN0ZWQgJiYgbWF4aW1hbCkge1xuICAgICAgdmFyIFEgPSBbXTtcbiAgICAgIHZhciBzaGlmdGVkID0ge307XG5cbiAgICAgIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShuKSB7XG4gICAgICAgIHJldHVybiBRLnB1c2gobik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZGVxdWV1ZSA9IGZ1bmN0aW9uIGRlcXVldWUoKSB7XG4gICAgICAgIHJldHVybiBRLnNoaWZ0KCk7XG4gICAgICB9O1xuXG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBRLnB1c2gobik7XG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKFEubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgX2VsZTMgPSBkZXF1ZXVlKCk7XG5cbiAgICAgICAgdmFyIGRpZFNoaWZ0ID0gYWRqdXN0TWF4aW1hbGx5KF9lbGUzLCBzaGlmdGVkKTtcblxuICAgICAgICBpZiAoZGlkU2hpZnQpIHtcbiAgICAgICAgICBfZWxlMy5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbC5pc05vZGUoKSAmJiBlbGVzLmhhcyhlbCk7XG4gICAgICAgICAgfSkuZm9yRWFjaChlbnF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkaWRTaGlmdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHdhcm4oJ0RldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAnICsgX2VsZTMuaWQoKSArICdgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4nKTtcbiAgICAgICAgICBicmVhazsgLy8gZXhpdCBvbiBmYWlsdXJlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3NpZ25EZXB0aHMoKTsgLy8gY2xlYXIgaG9sZXNcbiAgICAvLyBmaW5kIG1pbiBkaXN0YW5jZSB3ZSBuZWVkIHRvIGxlYXZlIGJldHdlZW4gbm9kZXNcblxuICAgIHZhciBtaW5EaXN0YW5jZSA9IDA7XG5cbiAgICBpZiAob3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG5vZGVzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgICAgdmFyIG4gPSBub2Rlc1tfaTRdO1xuICAgICAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgICAgICB2YXIgdyA9IG5iYi53O1xuICAgICAgICB2YXIgaCA9IG5iYi5oO1xuICAgICAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgICAgIH1cbiAgICB9IC8vIGdldCB0aGUgd2VpZ2h0ZWQgcGVyY2VudCBmb3IgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHMgY29ubmVjdGl2aXR5IHRvIG90aGVyIGxldmVsc1xuXG5cbiAgICB2YXIgY2FjaGVkV2VpZ2h0ZWRQZXJjZW50ID0ge307XG5cbiAgICB2YXIgZ2V0V2VpZ2h0ZWRQZXJjZW50ID0gZnVuY3Rpb24gZ2V0V2VpZ2h0ZWRQZXJjZW50KGVsZSkge1xuICAgICAgaWYgKGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV0pIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV07XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVEZXB0aCA9IGdldEluZm8oZWxlKS5kZXB0aDtcbiAgICAgIHZhciBuZWlnaGJvcnMgPSBlbGUubmVpZ2hib3Job29kKCk7XG4gICAgICB2YXIgcGVyY2VudCA9IDA7XG4gICAgICB2YXIgc2FtcGxlcyA9IDA7XG5cbiAgICAgIGZvciAodmFyIF9pNSA9IDA7IF9pNSA8IG5laWdoYm9ycy5sZW5ndGg7IF9pNSsrKSB7XG4gICAgICAgIHZhciBuZWlnaGJvciA9IG5laWdoYm9yc1tfaTVdO1xuXG4gICAgICAgIGlmIChuZWlnaGJvci5pc0VkZ2UoKSB8fCBuZWlnaGJvci5pc1BhcmVudCgpIHx8ICFub2Rlcy5oYXMobmVpZ2hib3IpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYmYgPSBnZXRJbmZvKG5laWdoYm9yKTtcblxuICAgICAgICBpZiAoYmYgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0gYmYuaW5kZXg7XG4gICAgICAgIHZhciBkZXB0aCA9IGJmLmRlcHRoOyAvLyB1bmFzc2lnbmVkIG5laWdoYm91cnMgc2hvdWxkbid0IGFmZmVjdCB0aGUgb3JkZXJpbmdcblxuICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCB8fCBkZXB0aCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbkRlcHRoID0gZGVwdGhzW2RlcHRoXS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRlcHRoIDwgZWxlRGVwdGgpIHtcbiAgICAgICAgICAvLyBvbmx5IGdldCBpbmZsdWVuY2VkIGJ5IGVsZW1lbnRzIGFib3ZlXG4gICAgICAgICAgcGVyY2VudCArPSBpbmRleCAvIG5EZXB0aDtcbiAgICAgICAgICBzYW1wbGVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2FtcGxlcyA9IE1hdGgubWF4KDEsIHNhbXBsZXMpO1xuICAgICAgcGVyY2VudCA9IHBlcmNlbnQgLyBzYW1wbGVzO1xuXG4gICAgICBpZiAoc2FtcGxlcyA9PT0gMCkge1xuICAgICAgICAvLyBwdXQgbG9uZSBub2RlcyBhdCB0aGUgc3RhcnRcbiAgICAgICAgcGVyY2VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV0gPSBwZXJjZW50O1xuICAgICAgcmV0dXJuIHBlcmNlbnQ7XG4gICAgfTsgLy8gcmVhcnJhbmdlIHRoZSBpbmRpY2VzIGluIGVhY2ggZGVwdGggbGV2ZWwgYmFzZWQgb24gY29ubmVjdGl2aXR5XG5cblxuICAgIHZhciBzb3J0Rm4gPSBmdW5jdGlvbiBzb3J0Rm4oYSwgYikge1xuICAgICAgdmFyIGFwY3QgPSBnZXRXZWlnaHRlZFBlcmNlbnQoYSk7XG4gICAgICB2YXIgYnBjdCA9IGdldFdlaWdodGVkUGVyY2VudChiKTtcbiAgICAgIHZhciBkaWZmID0gYXBjdCAtIGJwY3Q7XG5cbiAgICAgIGlmIChkaWZmID09PSAwKSB7XG4gICAgICAgIHJldHVybiBhc2NlbmRpbmcoYS5pZCgpLCBiLmlkKCkpOyAvLyBtYWtlIHN1cmUgc29ydCBkb2Vzbid0IGhhdmUgZG9uJ3QtY2FyZSBjb21wYXJpc29uc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLmRlcHRoU29ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb3J0Rm4gPSBvcHRpb25zLmRlcHRoU29ydDtcbiAgICB9IC8vIHNvcnQgZWFjaCBsZXZlbCB0byBtYWtlIGNvbm5lY3RlZCBub2RlcyBjbG9zZXJcblxuXG4gICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgZGVwdGhzLmxlbmd0aDsgX2k2KyspIHtcbiAgICAgIGRlcHRoc1tfaTZdLnNvcnQoc29ydEZuKTtcblxuICAgICAgYXNzaWduRGVwdGhzQXQoX2k2KTtcbiAgICB9IC8vIGFzc2lnbiBvcnBoYW4gbm9kZXMgdG8gYSBuZXcgdG9wLWxldmVsIGRlcHRoXG5cblxuICAgIHZhciBvcnBoYW5EZXB0aCA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgb3JwaGFuTm9kZXMubGVuZ3RoOyBfaTcrKykge1xuICAgICAgb3JwaGFuRGVwdGgucHVzaChvcnBoYW5Ob2Rlc1tfaTddKTtcbiAgICB9XG5cbiAgICBkZXB0aHMudW5zaGlmdChvcnBoYW5EZXB0aCk7XG4gICAgYXNzaWduRGVwdGhzKCk7XG4gICAgdmFyIGJpZ2dlc3REZXB0aFNpemUgPSAwO1xuXG4gICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgZGVwdGhzLmxlbmd0aDsgX2k4KyspIHtcbiAgICAgIGJpZ2dlc3REZXB0aFNpemUgPSBNYXRoLm1heChkZXB0aHNbX2k4XS5sZW5ndGgsIGJpZ2dlc3REZXB0aFNpemUpO1xuICAgIH1cblxuICAgIHZhciBjZW50ZXIgPSB7XG4gICAgICB4OiBiYi54MSArIGJiLncgLyAyLFxuICAgICAgeTogYmIueDEgKyBiYi5oIC8gMlxuICAgIH07XG4gICAgdmFyIG1heERlcHRoU2l6ZSA9IGRlcHRocy5yZWR1Y2UoZnVuY3Rpb24gKG1heCwgZWxlcykge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KG1heCwgZWxlcy5sZW5ndGgpO1xuICAgIH0sIDApO1xuXG4gICAgdmFyIGdldFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0UG9zaXRpb24oZWxlKSB7XG4gICAgICB2YXIgX2dldEluZm8yID0gZ2V0SW5mbyhlbGUpLFxuICAgICAgICAgIGRlcHRoID0gX2dldEluZm8yLmRlcHRoLFxuICAgICAgICAgIGluZGV4ID0gX2dldEluZm8yLmluZGV4O1xuXG4gICAgICB2YXIgZGVwdGhTaXplID0gZGVwdGhzW2RlcHRoXS5sZW5ndGg7XG4gICAgICB2YXIgZGlzdGFuY2VYID0gTWF0aC5tYXgoYmIudyAvICgob3B0aW9ucy5ncmlkID8gbWF4RGVwdGhTaXplIDogZGVwdGhTaXplKSArIDEpLCBtaW5EaXN0YW5jZSk7XG4gICAgICB2YXIgZGlzdGFuY2VZID0gTWF0aC5tYXgoYmIuaCAvIChkZXB0aHMubGVuZ3RoICsgMSksIG1pbkRpc3RhbmNlKTtcbiAgICAgIHZhciByYWRpdXNTdGVwU2l6ZSA9IE1hdGgubWluKGJiLncgLyAyIC8gZGVwdGhzLmxlbmd0aCwgYmIuaCAvIDIgLyBkZXB0aHMubGVuZ3RoKTtcbiAgICAgIHJhZGl1c1N0ZXBTaXplID0gTWF0aC5tYXgocmFkaXVzU3RlcFNpemUsIG1pbkRpc3RhbmNlKTtcblxuICAgICAgaWYgKCFvcHRpb25zLmNpcmNsZSkge1xuICAgICAgICB2YXIgZXBvcyA9IHtcbiAgICAgICAgICB4OiBjZW50ZXIueCArIChpbmRleCArIDEgLSAoZGVwdGhTaXplICsgMSkgLyAyKSAqIGRpc3RhbmNlWCxcbiAgICAgICAgICB5OiAoZGVwdGggKyAxKSAqIGRpc3RhbmNlWVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByYWRpdXMgPSByYWRpdXNTdGVwU2l6ZSAqIGRlcHRoICsgcmFkaXVzU3RlcFNpemUgLSAoZGVwdGhzLmxlbmd0aCA+IDAgJiYgZGVwdGhzWzBdLmxlbmd0aCA8PSAzID8gcmFkaXVzU3RlcFNpemUgLyAyIDogMCk7XG4gICAgICAgIHZhciB0aGV0YSA9IDIgKiBNYXRoLlBJIC8gZGVwdGhzW2RlcHRoXS5sZW5ndGggKiBpbmRleDtcblxuICAgICAgICBpZiAoZGVwdGggPT09IDAgJiYgZGVwdGhzWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJhZGl1cyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGNlbnRlci54ICsgcmFkaXVzICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICAgIHk6IGNlbnRlci55ICsgcmFkaXVzICogTWF0aC5zaW4odGhldGEpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZ2V0UG9zaXRpb24pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuXG4gIHZhciBkZWZhdWx0cyQ2ID0ge1xuICAgIGZpdDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIHRvIGZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIGdyYXBoXG4gICAgcGFkZGluZzogMzAsXG4gICAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gICAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gICAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggYW5kIHJhZGl1cyBpZiBub3QgZW5vdWdoIHNwYWNlXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICAgIHNwYWNpbmdGYWN0b3I6IHVuZGVmaW5lZCxcbiAgICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICAgIHJhZGl1czogdW5kZWZpbmVkLFxuICAgIC8vIHRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICAgIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgICAvLyB3aGVyZSBub2RlcyBzdGFydCBpbiByYWRpYW5zXG4gICAgc3dlZXA6IHVuZGVmaW5lZCxcbiAgICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgICBjbG9ja3dpc2U6IHRydWUsXG4gICAgLy8gd2hldGhlciB0aGUgbGF5b3V0IHNob3VsZCBnbyBjbG9ja3dpc2UgKHRydWUpIG9yIGNvdW50ZXJjbG9ja3dpc2UvYW50aWNsb2Nrd2lzZSAoZmFsc2UpXG4gICAgc29ydDogdW5kZWZpbmVkLFxuICAgIC8vIGEgc29ydGluZyBmdW5jdGlvbiB0byBvcmRlciB0aGUgbm9kZXM7IGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1zIGlmIGVuYWJsZWRcbiAgICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWRcbiAgICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICAgIHJlYWR5OiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0cmVhZHlcbiAgICBzdG9wOiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG5cbiAgfTtcblxuICBmdW5jdGlvbiBDaXJjbGVMYXlvdXQob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkNiwgb3B0aW9ucyk7XG4gIH1cblxuICBDaXJjbGVMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBvcHRpb25zID0gcGFyYW1zO1xuICAgIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgICB2YXIgY2xvY2t3aXNlID0gb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlICE9PSB1bmRlZmluZWQgPyAhb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlIDogb3B0aW9ucy5jbG9ja3dpc2U7XG4gICAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpLm5vdCgnOnBhcmVudCcpO1xuXG4gICAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgICAgbm9kZXMgPSBub2Rlcy5zb3J0KG9wdGlvbnMuc29ydCk7XG4gICAgfVxuXG4gICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHc6IGN5LndpZHRoKCksXG4gICAgICBoOiBjeS5oZWlnaHQoKVxuICAgIH0pO1xuICAgIHZhciBjZW50ZXIgPSB7XG4gICAgICB4OiBiYi54MSArIGJiLncgLyAyLFxuICAgICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICAgIH07XG4gICAgdmFyIHN3ZWVwID0gb3B0aW9ucy5zd2VlcCA9PT0gdW5kZWZpbmVkID8gMiAqIE1hdGguUEkgLSAyICogTWF0aC5QSSAvIG5vZGVzLmxlbmd0aCA6IG9wdGlvbnMuc3dlZXA7XG4gICAgdmFyIGRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbm9kZXMubGVuZ3RoIC0gMSk7XG4gICAgdmFyIHI7XG4gICAgdmFyIG1pbkRpc3RhbmNlID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuID0gbm9kZXNbaV07XG4gICAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgICAgdmFyIHcgPSBuYmIudztcbiAgICAgIHZhciBoID0gbmJiLmg7XG4gICAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyJDEob3B0aW9ucy5yYWRpdXMpKSB7XG4gICAgICByID0gb3B0aW9ucy5yYWRpdXM7XG4gICAgfSBlbHNlIGlmIChub2Rlcy5sZW5ndGggPD0gMSkge1xuICAgICAgciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSBNYXRoLm1pbihiYi5oLCBiYi53KSAvIDIgLSBtaW5EaXN0YW5jZTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgcmFkaXVzXG5cblxuICAgIGlmIChub2Rlcy5sZW5ndGggPiAxICYmIG9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgICBtaW5EaXN0YW5jZSAqPSAxLjc1OyAvLyBqdXN0IHRvIGhhdmUgc29tZSBuaWNlIHNwYWNpbmdcblxuICAgICAgdmFyIGRjb3MgPSBNYXRoLmNvcyhkVGhldGEpIC0gTWF0aC5jb3MoMCk7XG4gICAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICAgIHZhciByTWluID0gTWF0aC5zcXJ0KG1pbkRpc3RhbmNlICogbWluRGlzdGFuY2UgLyAoZGNvcyAqIGRjb3MgKyBkc2luICogZHNpbikpOyAvLyBzLnQuIG5vIG5vZGVzIG92ZXJsYXBwaW5nXG5cbiAgICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgICB9XG5cbiAgICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKGVsZSwgaSkge1xuICAgICAgdmFyIHRoZXRhID0gb3B0aW9ucy5zdGFydEFuZ2xlICsgaSAqIGRUaGV0YSAqIChjbG9ja3dpc2UgPyAxIDogLTEpO1xuICAgICAgdmFyIHJ4ID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICAgIHZhciByeSA9IHIgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgICB2YXIgcG9zID0ge1xuICAgICAgICB4OiBjZW50ZXIueCArIHJ4LFxuICAgICAgICB5OiBjZW50ZXIueSArIHJ5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHBvcztcbiAgICB9O1xuXG4gICAgZWxlcy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBnZXRQb3MpO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuXG4gIHZhciBkZWZhdWx0cyQ1ID0ge1xuICAgIGZpdDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIHRvIGZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIGdyYXBoXG4gICAgcGFkZGluZzogMzAsXG4gICAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gICAgc3RhcnRBbmdsZTogMyAvIDIgKiBNYXRoLlBJLFxuICAgIC8vIHdoZXJlIG5vZGVzIHN0YXJ0IGluIHJhZGlhbnNcbiAgICBzd2VlcDogdW5kZWZpbmVkLFxuICAgIC8vIGhvdyBtYW55IHJhZGlhbnMgc2hvdWxkIGJlIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG5vZGUgKGRlZmF1bHRzIHRvIGZ1bGwgY2lyY2xlKVxuICAgIGNsb2Nrd2lzZTogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgICBlcXVpZGlzdGFudDogZmFsc2UsXG4gICAgLy8gd2hldGhlciBsZXZlbHMgaGF2ZSBhbiBlcXVhbCByYWRpYWwgZGlzdGFuY2UgYmV0d2VuIHRoZW0sIG1heSBjYXVzZSBib3VuZGluZyBib3ggb3ZlcmZsb3dcbiAgICBtaW5Ob2RlU3BhY2luZzogMTAsXG4gICAgLy8gbWluIHNwYWNpbmcgYmV0d2VlbiBvdXRzaWRlIG9mIG5vZGVzICh1c2VkIGZvciByYWRpdXMgYWRqdXN0bWVudClcbiAgICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAgIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICAgIGF2b2lkT3ZlcmxhcDogdHJ1ZSxcbiAgICAvLyBwcmV2ZW50cyBub2RlIG92ZXJsYXAsIG1heSBvdmVyZmxvdyBib3VuZGluZ0JveCBpZiBub3QgZW5vdWdoIHNwYWNlXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIC8vIGhlaWdodCBvZiBsYXlvdXQgYXJlYSAob3ZlcnJpZGVzIGNvbnRhaW5lciBoZWlnaHQpXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAvLyB3aWR0aCBvZiBsYXlvdXQgYXJlYSAob3ZlcnJpZGVzIGNvbnRhaW5lciB3aWR0aClcbiAgICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gICAgLy8gQXBwbGllcyBhIG11bHRpcGxpY2F0aXZlIGZhY3RvciAoPjApIHRvIGV4cGFuZCBvciBjb21wcmVzcyB0aGUgb3ZlcmFsbCBhcmVhIHRoYXQgdGhlIG5vZGVzIHRha2UgdXBcbiAgICBjb25jZW50cmljOiBmdW5jdGlvbiBjb25jZW50cmljKG5vZGUpIHtcbiAgICAgIC8vIHJldHVybnMgbnVtZXJpYyB2YWx1ZSBmb3IgZWFjaCBub2RlLCBwbGFjaW5nIGhpZ2hlciBub2RlcyBpbiBsZXZlbHMgdG93YXJkcyB0aGUgY2VudHJlXG4gICAgICByZXR1cm4gbm9kZS5kZWdyZWUoKTtcbiAgICB9LFxuICAgIGxldmVsV2lkdGg6IGZ1bmN0aW9uIGxldmVsV2lkdGgobm9kZXMpIHtcbiAgICAgIC8vIHRoZSB2YXJpYXRpb24gb2YgY29uY2VudHJpYyB2YWx1ZXMgaW4gZWFjaCBsZXZlbFxuICAgICAgcmV0dXJuIG5vZGVzLm1heERlZ3JlZSgpIC8gNDtcbiAgICB9LFxuICAgIGFuaW1hdGU6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdG8gdHJhbnNpdGlvbiB0aGUgbm9kZSBwb3NpdGlvbnNcbiAgICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAgIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtcyBpZiBlbmFibGVkXG4gICAgYW5pbWF0aW9uRWFzaW5nOiB1bmRlZmluZWQsXG4gICAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gICAgYW5pbWF0ZUZpbHRlcjogZnVuY3Rpb24gYW5pbWF0ZUZpbHRlcihub2RlLCBpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8vIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGFuaW1hdGVkLiAgQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkLiAgTm9uLWFuaW1hdGVkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGxheW91dCBzdGFydHNcbiAgICByZWFkeTogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gICAgc3RvcDogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzXG5cbiAgfTtcblxuICBmdW5jdGlvbiBDb25jZW50cmljTGF5b3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDUsIG9wdGlvbnMpO1xuICB9XG5cbiAgQ29uY2VudHJpY0xheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJhbXMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gICAgdmFyIGNsb2Nrd2lzZSA9IG9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkID8gIW9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSA6IG9wdGlvbnMuY2xvY2t3aXNlO1xuICAgIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCkubm90KCc6cGFyZW50Jyk7XG4gICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHc6IGN5LndpZHRoKCksXG4gICAgICBoOiBjeS5oZWlnaHQoKVxuICAgIH0pO1xuICAgIHZhciBjZW50ZXIgPSB7XG4gICAgICB4OiBiYi54MSArIGJiLncgLyAyLFxuICAgICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICAgIH07XG4gICAgdmFyIG5vZGVWYWx1ZXMgPSBbXTsgLy8geyBub2RlLCB2YWx1ZSB9XG5cbiAgICB2YXIgbWF4Tm9kZVNpemUgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IHZvaWQgMDsgLy8gY2FsY3VsYXRlIHRoZSBub2RlIHZhbHVlXG5cbiAgICAgIHZhbHVlID0gb3B0aW9ucy5jb25jZW50cmljKG5vZGUpO1xuICAgICAgbm9kZVZhbHVlcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBub2RlOiBub2RlXG4gICAgICB9KTsgLy8gZm9yIHN0eWxlIG1hcHBpbmdcblxuICAgICAgbm9kZS5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWMgPSB2YWx1ZTtcbiAgICB9IC8vIGluIGNhc2Ugd2UgdXNlZCB0aGUgYGNvbmNlbnRyaWNgIGluIHN0eWxlXG5cblxuICAgIG5vZGVzLnVwZGF0ZVN0eWxlKCk7IC8vIGNhbGN1bGF0ZSBtYXggc2l6ZSBub3cgYmFzZWQgb24gcG90ZW50aWFsbHkgdXBkYXRlZCBtYXBwZXJzXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG5cbiAgICAgIHZhciBuYmIgPSBfbm9kZS5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuXG4gICAgICBtYXhOb2RlU2l6ZSA9IE1hdGgubWF4KG1heE5vZGVTaXplLCBuYmIudywgbmJiLmgpO1xuICAgIH0gLy8gc29ydCBub2RlIHZhbHVlcyBpbiBkZXNjcmVhc2luZyBvcmRlclxuXG5cbiAgICBub2RlVmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBiLnZhbHVlIC0gYS52YWx1ZTtcbiAgICB9KTtcbiAgICB2YXIgbGV2ZWxXaWR0aCA9IG9wdGlvbnMubGV2ZWxXaWR0aChub2Rlcyk7IC8vIHB1dCB0aGUgdmFsdWVzIGludG8gbGV2ZWxzXG5cbiAgICB2YXIgbGV2ZWxzID0gW1tdXTtcbiAgICB2YXIgY3VycmVudExldmVsID0gbGV2ZWxzWzBdO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbm9kZVZhbHVlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgdmFsID0gbm9kZVZhbHVlc1tfaTJdO1xuXG4gICAgICBpZiAoY3VycmVudExldmVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50TGV2ZWxbMF0udmFsdWUgLSB2YWwudmFsdWUpO1xuXG4gICAgICAgIGlmIChkaWZmID49IGxldmVsV2lkdGgpIHtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBbXTtcbiAgICAgICAgICBsZXZlbHMucHVzaChjdXJyZW50TGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRMZXZlbC5wdXNoKHZhbCk7XG4gICAgfSAvLyBjcmVhdGUgcG9zaXRpb25zIGZyb20gbGV2ZWxzXG5cblxuICAgIHZhciBtaW5EaXN0ID0gbWF4Tm9kZVNpemUgKyBvcHRpb25zLm1pbk5vZGVTcGFjaW5nOyAvLyBtaW4gZGlzdCBiZXR3ZWVuIG5vZGVzXG5cbiAgICBpZiAoIW9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgICAvLyB0aGVuIHN0cmljdGx5IGNvbnN0cmFpbiB0byBiYlxuICAgICAgdmFyIGZpcnN0THZsSGFzTXVsdGkgPSBsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbHNbMF0ubGVuZ3RoID4gMTtcbiAgICAgIHZhciBtYXhSID0gTWF0aC5taW4oYmIudywgYmIuaCkgLyAyIC0gbWluRGlzdDtcbiAgICAgIHZhciByU3RlcCA9IG1heFIgLyAobGV2ZWxzLmxlbmd0aCArIGZpcnN0THZsSGFzTXVsdGkgPyAxIDogMCk7XG4gICAgICBtaW5EaXN0ID0gTWF0aC5taW4obWluRGlzdCwgclN0ZXApO1xuICAgIH0gLy8gZmluZCB0aGUgbWV0cmljcyBmb3IgZWFjaCBsZXZlbFxuXG5cbiAgICB2YXIgciA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBsZXZlbHMubGVuZ3RoOyBfaTMrKykge1xuICAgICAgdmFyIGxldmVsID0gbGV2ZWxzW19pM107XG4gICAgICB2YXIgc3dlZXAgPSBvcHRpb25zLnN3ZWVwID09PSB1bmRlZmluZWQgPyAyICogTWF0aC5QSSAtIDIgKiBNYXRoLlBJIC8gbGV2ZWwubGVuZ3RoIDogb3B0aW9ucy5zd2VlcDtcbiAgICAgIHZhciBkVGhldGEgPSBsZXZlbC5kVGhldGEgPSBzd2VlcCAvIE1hdGgubWF4KDEsIGxldmVsLmxlbmd0aCAtIDEpOyAvLyBjYWxjdWxhdGUgdGhlIHJhZGl1c1xuXG4gICAgICBpZiAobGV2ZWwubGVuZ3RoID4gMSAmJiBvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgICAgIHZhciBkY29zID0gTWF0aC5jb3MoZFRoZXRhKSAtIE1hdGguY29zKDApO1xuICAgICAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICAgICAgdmFyIHJNaW4gPSBNYXRoLnNxcnQobWluRGlzdCAqIG1pbkRpc3QgLyAoZGNvcyAqIGRjb3MgKyBkc2luICogZHNpbikpOyAvLyBzLnQuIG5vIG5vZGVzIG92ZXJsYXBwaW5nXG5cbiAgICAgICAgciA9IE1hdGgubWF4KHJNaW4sIHIpO1xuICAgICAgfVxuXG4gICAgICBsZXZlbC5yID0gcjtcbiAgICAgIHIgKz0gbWluRGlzdDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5lcXVpZGlzdGFudCkge1xuICAgICAgdmFyIHJEZWx0YU1heCA9IDA7XG4gICAgICB2YXIgX3IgPSAwO1xuXG4gICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBsZXZlbHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgICB2YXIgX2xldmVsID0gbGV2ZWxzW19pNF07XG4gICAgICAgIHZhciByRGVsdGEgPSBfbGV2ZWwuciAtIF9yO1xuICAgICAgICByRGVsdGFNYXggPSBNYXRoLm1heChyRGVsdGFNYXgsIHJEZWx0YSk7XG4gICAgICB9XG5cbiAgICAgIF9yID0gMDtcblxuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbGV2ZWxzLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgICAgdmFyIF9sZXZlbDIgPSBsZXZlbHNbX2k1XTtcblxuICAgICAgICBpZiAoX2k1ID09PSAwKSB7XG4gICAgICAgICAgX3IgPSBfbGV2ZWwyLnI7XG4gICAgICAgIH1cblxuICAgICAgICBfbGV2ZWwyLnIgPSBfcjtcbiAgICAgICAgX3IgKz0gckRlbHRhTWF4O1xuICAgICAgfVxuICAgIH0gLy8gY2FsY3VsYXRlIHRoZSBub2RlIHBvc2l0aW9uc1xuXG5cbiAgICB2YXIgcG9zID0ge307IC8vIGlkID0+IHBvc2l0aW9uXG5cbiAgICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBsZXZlbHMubGVuZ3RoOyBfaTYrKykge1xuICAgICAgdmFyIF9sZXZlbDMgPSBsZXZlbHNbX2k2XTtcbiAgICAgIHZhciBfZFRoZXRhID0gX2xldmVsMy5kVGhldGE7XG4gICAgICB2YXIgX3IyID0gX2xldmVsMy5yO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9sZXZlbDMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIF92YWwgPSBfbGV2ZWwzW2pdO1xuICAgICAgICB2YXIgdGhldGEgPSBvcHRpb25zLnN0YXJ0QW5nbGUgKyAoY2xvY2t3aXNlID8gMSA6IC0xKSAqIF9kVGhldGEgKiBqO1xuICAgICAgICB2YXIgcCA9IHtcbiAgICAgICAgICB4OiBjZW50ZXIueCArIF9yMiAqIE1hdGguY29zKHRoZXRhKSxcbiAgICAgICAgICB5OiBjZW50ZXIueSArIF9yMiAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgICB9O1xuICAgICAgICBwb3NbX3ZhbC5ub2RlLmlkKCldID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIHBvc2l0aW9uIHRoZSBub2Rlc1xuXG5cbiAgICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgcmV0dXJuIHBvc1tpZF07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07XG5cbiAgLypcbiAgVGhlIENvU0UgbGF5b3V0IHdhcyB3cml0dGVuIGJ5IEdlcmFyZG8gSHVjay5cbiAgaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2dlcmFyZG9odWNrL1xuXG4gIEJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZTpcbiAgaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTE0OTgwNDdcblxuICBNb2RpZmljYXRpb25zIHRyYWNrZWQgb24gR2l0aHViLlxuICAqL1xuICB2YXIgREVCVUc7XG4gIC8qKlxuICAgKiBAYnJpZWYgOiAgZGVmYXVsdCBsYXlvdXQgb3B0aW9uc1xuICAgKi9cblxuICB2YXIgZGVmYXVsdHMkNCA9IHtcbiAgICAvLyBDYWxsZWQgb24gYGxheW91dHJlYWR5YFxuICAgIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAgIC8vIENhbGxlZCBvbiBgbGF5b3V0c3RvcGBcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30sXG4gICAgLy8gV2hldGhlciB0byBhbmltYXRlIHdoaWxlIHJ1bm5pbmcgdGhlIGxheW91dFxuICAgIC8vIHRydWUgOiBBbmltYXRlIGNvbnRpbnVvdXNseSBhcyB0aGUgbGF5b3V0IGlzIHJ1bm5pbmdcbiAgICAvLyBmYWxzZSA6IEp1c3Qgc2hvdyB0aGUgZW5kIHJlc3VsdFxuICAgIC8vICdlbmQnIDogQW5pbWF0ZSB3aXRoIHRoZSBlbmQgcmVzdWx0LCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9ucyB0byB0aGUgZW5kIHBvc2l0aW9uc1xuICAgIGFuaW1hdGU6IHRydWUsXG4gICAgLy8gRWFzaW5nIG9mIHRoZSBhbmltYXRpb24gZm9yIGFuaW1hdGU6J2VuZCdcbiAgICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgICAvLyBUaGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgYW5pbWF0ZTonZW5kJ1xuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgLy8gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWRcbiAgICAvLyBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWRcbiAgICAvLyBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICAgIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAvLyBUaGUgbGF5b3V0IGFuaW1hdGVzIG9ubHkgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgYW5pbWF0ZTp0cnVlXG4gICAgLy8gKHByZXZlbnRzIGZsYXNoaW5nIG9uIGZhc3QgcnVucylcbiAgICBhbmltYXRpb25UaHJlc2hvbGQ6IDI1MCxcbiAgICAvLyBOdW1iZXIgb2YgaXRlcmF0aW9ucyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNjcmVlbiBwb3NpdGlvbnMgdXBkYXRlXG4gICAgcmVmcmVzaDogMjAsXG4gICAgLy8gV2hldGhlciB0byBmaXQgdGhlIG5ldHdvcmsgdmlldyBhZnRlciB3aGVuIGRvbmVcbiAgICBmaXQ6IHRydWUsXG4gICAgLy8gUGFkZGluZyBvbiBmaXRcbiAgICBwYWRkaW5nOiAzMCxcbiAgICAvLyBDb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAgIC8vIEV4Y2x1ZGVzIHRoZSBsYWJlbCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgYm91bmRpbmcgYm94ZXMgZm9yIHRoZSBsYXlvdXQgYWxnb3JpdGhtXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgICAvLyBSYW5kb21pemUgdGhlIGluaXRpYWwgcG9zaXRpb25zIG9mIHRoZSBub2RlcyAodHJ1ZSkgb3IgdXNlIGV4aXN0aW5nIHBvc2l0aW9ucyAoZmFsc2UpXG4gICAgcmFuZG9taXplOiBmYWxzZSxcbiAgICAvLyBFeHRyYSBzcGFjaW5nIGJldHdlZW4gY29tcG9uZW50cyBpbiBub24tY29tcG91bmQgZ3JhcGhzXG4gICAgY29tcG9uZW50U3BhY2luZzogNDAsXG4gICAgLy8gTm9kZSByZXB1bHNpb24gKG5vbiBvdmVybGFwcGluZykgbXVsdGlwbGllclxuICAgIG5vZGVSZXB1bHNpb246IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZSkge1xuICAgICAgcmV0dXJuIDIwNDg7XG4gICAgfSxcbiAgICAvLyBOb2RlIHJlcHVsc2lvbiAob3ZlcmxhcHBpbmcpIG11bHRpcGxpZXJcbiAgICBub2RlT3ZlcmxhcDogNCxcbiAgICAvLyBJZGVhbCBlZGdlIChub24gbmVzdGVkKSBsZW5ndGhcbiAgICBpZGVhbEVkZ2VMZW5ndGg6IGZ1bmN0aW9uIGlkZWFsRWRnZUxlbmd0aChlZGdlKSB7XG4gICAgICByZXR1cm4gMzI7XG4gICAgfSxcbiAgICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgICBlZGdlRWxhc3RpY2l0eTogZnVuY3Rpb24gZWRnZUVsYXN0aWNpdHkoZWRnZSkge1xuICAgICAgcmV0dXJuIDMyO1xuICAgIH0sXG4gICAgLy8gTmVzdGluZyBmYWN0b3IgKG11bHRpcGxpZXIpIHRvIGNvbXB1dGUgaWRlYWwgZWRnZSBsZW5ndGggZm9yIG5lc3RlZCBlZGdlc1xuICAgIG5lc3RpbmdGYWN0b3I6IDEuMixcbiAgICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgICBncmF2aXR5OiAxLFxuICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybVxuICAgIG51bUl0ZXI6IDEwMDAsXG4gICAgLy8gSW5pdGlhbCB0ZW1wZXJhdHVyZSAobWF4aW11bSBub2RlIGRpc3BsYWNlbWVudClcbiAgICBpbml0aWFsVGVtcDogMTAwMCxcbiAgICAvLyBDb29saW5nIGZhY3RvciAoaG93IHRoZSB0ZW1wZXJhdHVyZSBpcyByZWR1Y2VkIGJldHdlZW4gY29uc2VjdXRpdmUgaXRlcmF0aW9uc1xuICAgIGNvb2xpbmdGYWN0b3I6IDAuOTksXG4gICAgLy8gTG93ZXIgdGVtcGVyYXR1cmUgdGhyZXNob2xkIChiZWxvdyB0aGlzIHBvaW50IHRoZSBsYXlvdXQgd2lsbCBlbmQpXG4gICAgbWluVGVtcDogMS4wXG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgICAgICAgOiBjb25zdHJ1Y3RvclxuICAgKiBAYXJnIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuICAgKi9cblxuICBmdW5jdGlvbiBDb3NlTGF5b3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDQsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5sYXlvdXQgPSB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBydW5zIHRoZSBsYXlvdXRcbiAgICovXG5cblxuICBDb3NlTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgICB2YXIgbGF5b3V0ID0gdGhpcztcbiAgICBsYXlvdXQuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlKSB7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9IC8vIFNldCBERUJVRyAtIEdsb2JhbCB2YXJpYWJsZVxuXG5cbiAgICBpZiAodHJ1ZSA9PT0gb3B0aW9ucy5kZWJ1Zykge1xuICAgICAgREVCVUcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBERUJVRyA9IGZhbHNlO1xuICAgIH0gLy8gSW5pdGlhbGl6ZSBsYXlvdXQgaW5mb1xuXG5cbiAgICB2YXIgbGF5b3V0SW5mbyA9IGNyZWF0ZUxheW91dEluZm8oY3ksIGxheW91dCwgb3B0aW9ucyk7IC8vIFNob3cgTGF5b3V0SW5mbyBjb250ZW50cyBpZiBkZWJ1Z2dpbmdcblxuICAgIGlmIChERUJVRykge1xuICAgICAgcHJpbnRMYXlvdXRJbmZvKGxheW91dEluZm8pO1xuICAgIH0gLy8gSWYgcmVxdWlyZWQsIHJhbmRvbWl6ZSBub2RlIHBvc2l0aW9uc1xuXG5cbiAgICBpZiAob3B0aW9ucy5yYW5kb21pemUpIHtcbiAgICAgIHJhbmRvbWl6ZVBvc2l0aW9ucyhsYXlvdXRJbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcblxuICAgIHZhciByZWZyZXNoID0gZnVuY3Rpb24gcmVmcmVzaCgpIHtcbiAgICAgIHJlZnJlc2hQb3NpdGlvbnMobGF5b3V0SW5mbywgY3ksIG9wdGlvbnMpOyAvLyBGaXQgdGhlIGdyYXBoIGlmIG5lY2Vzc2FyeVxuXG4gICAgICBpZiAodHJ1ZSA9PT0gb3B0aW9ucy5maXQpIHtcbiAgICAgICAgY3kuZml0KG9wdGlvbnMucGFkZGluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBtYWluTG9vcCA9IGZ1bmN0aW9uIG1haW5Mb29wKGkpIHtcbiAgICAgIGlmIChsYXlvdXQuc3RvcHBlZCB8fCBpID49IG9wdGlvbnMubnVtSXRlcikge1xuICAgICAgICAvLyBsb2dEZWJ1ZyhcIkxheW91dCBtYW51YWxseSBzdG9wcGVkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gRG8gb25lIHN0ZXAgaW4gdGhlIHBoaXNpY2FsIHNpbXVsYXRpb25cblxuXG4gICAgICBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMpOyAvLyBVcGRhdGUgdGVtcGVyYXR1cmVcblxuICAgICAgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSA9IGxheW91dEluZm8udGVtcGVyYXR1cmUgKiBvcHRpb25zLmNvb2xpbmdGYWN0b3I7IC8vIGxvZ0RlYnVnKFwiTmV3IHRlbXBlcmF0dXJlOiBcIiArIGxheW91dEluZm8udGVtcGVyYXR1cmUpO1xuXG4gICAgICBpZiAobGF5b3V0SW5mby50ZW1wZXJhdHVyZSA8IG9wdGlvbnMubWluVGVtcCkge1xuICAgICAgICAvLyBsb2dEZWJ1ZyhcIlRlbXBlcmF0dXJlIGRyb3AgYmVsb3cgbWluaW11bSB0aHJlc2hvbGQuIFN0b3BwaW5nIGNvbXB1dGF0aW9uIGluIHN0ZXAgXCIgKyBpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJlZnJlc2goKTsgLy8gTGF5b3V0IGhhcyBmaW5pc2hlZFxuXG4gICAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vZGVzID0gb3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gICAgICAgIHZhciBnZXRTY2FsZWRQb3MgPSBnZXRTY2FsZUluQm91bmRzRm4obGF5b3V0SW5mbywgb3B0aW9ucywgbm9kZXMpO1xuICAgICAgICBub2Rlcy5sYXlvdXRQb3NpdGlvbnMobGF5b3V0LCBvcHRpb25zLCBnZXRTY2FsZWRQb3MpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxvb3BSZXQgPSB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFyIGZyYW1lID0gZnVuY3Rpb24gZnJhbWUoKSB7XG4gICAgICAgIHZhciBmID0gMDtcblxuICAgICAgICB3aGlsZSAobG9vcFJldCAmJiBmIDwgb3B0aW9ucy5yZWZyZXNoKSB7XG4gICAgICAgICAgbG9vcFJldCA9IG1haW5Mb29wKGkpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBmKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxvb3BSZXQpIHtcbiAgICAgICAgICAvLyBpdCdzIGRvbmVcbiAgICAgICAgICBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub3cgPSBwZXJmb3JtYW5jZU5vdygpO1xuXG4gICAgICAgICAgaWYgKG5vdyAtIHN0YXJ0VGltZSA+PSBvcHRpb25zLmFuaW1hdGlvblRocmVzaG9sZCkge1xuICAgICAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZyYW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChsb29wUmV0KSB7XG4gICAgICAgIGxvb3BSZXQgPSBtYWluTG9vcChpKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICBkb25lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBjYWxsZWQgb24gY29udGludW91cyBsYXlvdXRzIHRvIHN0b3AgdGhlbSBiZWZvcmUgdGhleSBmaW5pc2hcbiAgICovXG5cblxuICBDb3NlTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy50aHJlYWQpIHtcbiAgICAgIHRoaXMudGhyZWFkLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ2xheW91dHN0b3AnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfTtcblxuICBDb3NlTGF5b3V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRocmVhZCkge1xuICAgICAgdGhpcy50aHJlYWQuc3RvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuICAvKipcbiAgICogQGJyaWVmICAgICA6IENyZWF0ZXMgYW4gb2JqZWN0IHdoaWNoIGlzIGNvbnRhaW5zIGFsbCB0aGUgZGF0YVxuICAgKiAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3NcbiAgICogQGFyZyBjeSAgICA6IGN5dG9zY2FwZS5qcyBvYmplY3RcbiAgICogQHJldHVybiAgICA6IGxheW91dEluZm8gb2JqZWN0IGluaXRpYWxpemVkXG4gICAqL1xuXG5cbiAgdmFyIGNyZWF0ZUxheW91dEluZm8gPSBmdW5jdGlvbiBjcmVhdGVMYXlvdXRJbmZvKGN5LCBsYXlvdXQsIG9wdGlvbnMpIHtcbiAgICAvLyBTaG9ydGN1dFxuICAgIHZhciBlZGdlcyA9IG9wdGlvbnMuZWxlcy5lZGdlcygpO1xuICAgIHZhciBub2RlcyA9IG9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICAgIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICAgIHgxOiAwLFxuICAgICAgeTE6IDAsXG4gICAgICB3OiBjeS53aWR0aCgpLFxuICAgICAgaDogY3kuaGVpZ2h0KClcbiAgICB9KTtcbiAgICB2YXIgbGF5b3V0SW5mbyA9IHtcbiAgICAgIGlzQ29tcG91bmQ6IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSxcbiAgICAgIGxheW91dE5vZGVzOiBbXSxcbiAgICAgIGlkVG9JbmRleDoge30sXG4gICAgICBub2RlU2l6ZTogbm9kZXMuc2l6ZSgpLFxuICAgICAgZ3JhcGhTZXQ6IFtdLFxuICAgICAgaW5kZXhUb0dyYXBoOiBbXSxcbiAgICAgIGxheW91dEVkZ2VzOiBbXSxcbiAgICAgIGVkZ2VTaXplOiBlZGdlcy5zaXplKCksXG4gICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy5pbml0aWFsVGVtcCxcbiAgICAgIGNsaWVudFdpZHRoOiBiYi53LFxuICAgICAgY2xpZW50SGVpZ2h0OiBiYi5oLFxuICAgICAgYm91bmRpbmdCb3g6IGJiXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50cyA9IG9wdGlvbnMuZWxlcy5jb21wb25lbnRzKCk7XG4gICAgdmFyIGlkMmNtcHRJZCA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21wb25lbnQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21wb25lbnRbal07XG4gICAgICAgIGlkMmNtcHRJZFtub2RlLmlkKCldID0gaTtcbiAgICAgIH1cbiAgICB9IC8vIEl0ZXJhdGUgb3ZlciBhbGwgbm9kZXMsIGNyZWF0aW5nIGxheW91dCBub2Rlc1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgICAgdmFyIG4gPSBub2Rlc1tpXTtcbiAgICAgIHZhciBuYmIgPSBuLmxheW91dERpbWVuc2lvbnMob3B0aW9ucyk7XG4gICAgICB2YXIgdGVtcE5vZGUgPSB7fTtcbiAgICAgIHRlbXBOb2RlLmlzTG9ja2VkID0gbi5sb2NrZWQoKTtcbiAgICAgIHRlbXBOb2RlLmlkID0gbi5kYXRhKCdpZCcpO1xuICAgICAgdGVtcE5vZGUucGFyZW50SWQgPSBuLmRhdGEoJ3BhcmVudCcpO1xuICAgICAgdGVtcE5vZGUuY21wdElkID0gaWQyY21wdElkW24uaWQoKV07XG4gICAgICB0ZW1wTm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgdGVtcE5vZGUucG9zaXRpb25YID0gbi5wb3NpdGlvbigneCcpO1xuICAgICAgdGVtcE5vZGUucG9zaXRpb25ZID0gbi5wb3NpdGlvbigneScpO1xuICAgICAgdGVtcE5vZGUub2Zmc2V0WCA9IDA7XG4gICAgICB0ZW1wTm9kZS5vZmZzZXRZID0gMDtcbiAgICAgIHRlbXBOb2RlLmhlaWdodCA9IG5iYi53O1xuICAgICAgdGVtcE5vZGUud2lkdGggPSBuYmIuaDtcbiAgICAgIHRlbXBOb2RlLm1heFggPSB0ZW1wTm9kZS5wb3NpdGlvblggKyB0ZW1wTm9kZS53aWR0aCAvIDI7XG4gICAgICB0ZW1wTm9kZS5taW5YID0gdGVtcE5vZGUucG9zaXRpb25YIC0gdGVtcE5vZGUud2lkdGggLyAyO1xuICAgICAgdGVtcE5vZGUubWF4WSA9IHRlbXBOb2RlLnBvc2l0aW9uWSArIHRlbXBOb2RlLmhlaWdodCAvIDI7XG4gICAgICB0ZW1wTm9kZS5taW5ZID0gdGVtcE5vZGUucG9zaXRpb25ZIC0gdGVtcE5vZGUuaGVpZ2h0IC8gMjtcbiAgICAgIHRlbXBOb2RlLnBhZExlZnQgPSBwYXJzZUZsb2F0KG4uc3R5bGUoJ3BhZGRpbmcnKSk7XG4gICAgICB0ZW1wTm9kZS5wYWRSaWdodCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICAgIHRlbXBOb2RlLnBhZFRvcCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICAgIHRlbXBOb2RlLnBhZEJvdHRvbSA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTsgLy8gZm9yY2VzXG5cbiAgICAgIHRlbXBOb2RlLm5vZGVSZXB1bHNpb24gPSBmbiQ2KG9wdGlvbnMubm9kZVJlcHVsc2lvbikgPyBvcHRpb25zLm5vZGVSZXB1bHNpb24obikgOiBvcHRpb25zLm5vZGVSZXB1bHNpb247IC8vIEFkZCBuZXcgbm9kZVxuXG4gICAgICBsYXlvdXRJbmZvLmxheW91dE5vZGVzLnB1c2godGVtcE5vZGUpOyAvLyBBZGQgZW50cnkgdG8gaWQtaW5kZXggbWFwXG5cbiAgICAgIGxheW91dEluZm8uaWRUb0luZGV4W3RlbXBOb2RlLmlkXSA9IGk7XG4gICAgfSAvLyBJbmxpbmUgaW1wbGVtZW50YXRpb24gb2YgYSBxdWV1ZSwgdXNlZCBmb3IgdHJhdmVyc2luZyB0aGUgZ3JhcGggaW4gQkZTIG9yZGVyXG5cblxuICAgIHZhciBxdWV1ZSA9IFtdO1xuICAgIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG5cbiAgICB2YXIgZW5kID0gLTE7IC8vIFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuXG4gICAgdmFyIHRlbXBHcmFwaCA9IFtdOyAvLyBTZWNvbmQgcGFzcyB0byBhZGQgY2hpbGQgaW5mb3JtYXRpb24gYW5kXG4gICAgLy8gaW5pdGlhbGl6ZSBxdWV1ZSBmb3IgaGllcmFyY2hpY2FsIHRyYXZlcnNhbFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICAgIHZhciBwX2lkID0gbi5wYXJlbnRJZDsgLy8gQ2hlY2sgaWYgbm9kZSBuIGhhcyBhIHBhcmVudCBub2RlXG5cbiAgICAgIGlmIChudWxsICE9IHBfaWQpIHtcbiAgICAgICAgLy8gQWRkIG5vZGUgSWQgdG8gcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlblxuICAgICAgICBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3BfaWRdXS5jaGlsZHJlbi5wdXNoKG4uaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhlbiBpdCdzIGluIHRoZSByb290IGdyYXBoXG4gICAgICAgIHF1ZXVlWysrZW5kXSA9IG4uaWQ7XG4gICAgICAgIHRlbXBHcmFwaC5wdXNoKG4uaWQpO1xuICAgICAgfVxuICAgIH0gLy8gQWRkIHJvb3QgZ3JhcGggdG8gZ3JhcGhTZXRcblxuXG4gICAgbGF5b3V0SW5mby5ncmFwaFNldC5wdXNoKHRlbXBHcmFwaCk7IC8vIFRyYXZlcnNlIHRoZSBncmFwaCwgbGV2ZWwgYnkgbGV2ZWwsXG5cbiAgICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgICAvLyBHZXQgdGhlIG5vZGUgdG8gdmlzaXQgYW5kIHJlbW92ZSBpdCBmcm9tIHF1ZXVlXG4gICAgICB2YXIgbm9kZV9pZCA9IHF1ZXVlW3N0YXJ0KytdO1xuICAgICAgdmFyIG5vZGVfaXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlX2lkXTtcbiAgICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlX2l4XTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBjaGlsZHJlbiBub2RlcyBhcyBhIG5ldyBncmFwaCB0byBncmFwaCBzZXRcbiAgICAgICAgbGF5b3V0SW5mby5ncmFwaFNldC5wdXNoKGNoaWxkcmVuKTsgLy8gQWRkIGNoaWxkcmVuIHRvIHF1ZSBxdWV1ZSB0byBiZSB2aXNpdGVkXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHF1ZXVlWysrZW5kXSA9IGNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBDcmVhdGUgaW5kZXhUb0dyYXBoIG1hcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8uZ3JhcGhTZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbaV07XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JhcGgubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dO1xuICAgICAgICBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtpbmRleF0gPSBpO1xuICAgICAgfVxuICAgIH0gLy8gSXRlcmF0ZSBvdmVyIGFsbCBlZGdlcywgY3JlYXRpbmcgTGF5b3V0IEVkZ2VzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5lZGdlU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgZSA9IGVkZ2VzW2ldO1xuICAgICAgdmFyIHRlbXBFZGdlID0ge307XG4gICAgICB0ZW1wRWRnZS5pZCA9IGUuZGF0YSgnaWQnKTtcbiAgICAgIHRlbXBFZGdlLnNvdXJjZUlkID0gZS5kYXRhKCdzb3VyY2UnKTtcbiAgICAgIHRlbXBFZGdlLnRhcmdldElkID0gZS5kYXRhKCd0YXJnZXQnKTsgLy8gQ29tcHV0ZSBpZGVhbCBsZW5ndGhcblxuICAgICAgdmFyIGlkZWFsTGVuZ3RoID0gZm4kNihvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCkgPyBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aChlKSA6IG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoO1xuICAgICAgdmFyIGVsYXN0aWNpdHkgPSBmbiQ2KG9wdGlvbnMuZWRnZUVsYXN0aWNpdHkpID8gb3B0aW9ucy5lZGdlRWxhc3RpY2l0eShlKSA6IG9wdGlvbnMuZWRnZUVsYXN0aWNpdHk7IC8vIENoZWNrIGlmIGl0J3MgYW4gaW50ZXIgZ3JhcGggZWRnZVxuXG4gICAgICB2YXIgc291cmNlSXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFt0ZW1wRWRnZS5zb3VyY2VJZF07XG4gICAgICB2YXIgdGFyZ2V0SXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFt0ZW1wRWRnZS50YXJnZXRJZF07XG4gICAgICB2YXIgc291cmNlR3JhcGggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtzb3VyY2VJeF07XG4gICAgICB2YXIgdGFyZ2V0R3JhcGggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFt0YXJnZXRJeF07XG5cbiAgICAgIGlmIChzb3VyY2VHcmFwaCAhPSB0YXJnZXRHcmFwaCkge1xuICAgICAgICAvLyBGaW5kIGxvd2VzdCBjb21tb24gZ3JhcGggYW5jZXN0b3JcbiAgICAgICAgdmFyIGxjYSA9IGZpbmRMQ0EodGVtcEVkZ2Uuc291cmNlSWQsIHRlbXBFZGdlLnRhcmdldElkLCBsYXlvdXRJbmZvKTsgLy8gQ29tcHV0ZSBzdW0gb2Ygbm9kZSBkZXB0aHMsIHJlbGF0aXZlIHRvIGxjYSBncmFwaFxuXG4gICAgICAgIHZhciBsY2FHcmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbbGNhXTtcbiAgICAgICAgdmFyIGRlcHRoID0gMDsgLy8gU291cmNlIGRlcHRoXG5cbiAgICAgICAgdmFyIHRlbXBOb2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tzb3VyY2VJeF07XG5cbiAgICAgICAgd2hpbGUgKC0xID09PSBsY2FHcmFwaC5pbmRleE9mKHRlbXBOb2RlLmlkKSkge1xuICAgICAgICAgIHRlbXBOb2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFt0ZW1wTm9kZS5wYXJlbnRJZF1dO1xuICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH0gLy8gVGFyZ2V0IGRlcHRoXG5cblxuICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbdGFyZ2V0SXhdO1xuXG4gICAgICAgIHdoaWxlICgtMSA9PT0gbGNhR3JhcGguaW5kZXhPZih0ZW1wTm9kZS5pZCkpIHtcbiAgICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUucGFyZW50SWRdXTtcbiAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9IC8vIGxvZ0RlYnVnKCdMQ0Egb2Ygbm9kZXMgJyArIHRlbXBFZGdlLnNvdXJjZUlkICsgJyBhbmQgJyArIHRlbXBFZGdlLnRhcmdldElkICtcbiAgICAgICAgLy8gIFwiLiBJbmRleDogXCIgKyBsY2EgKyBcIiBDb250ZW50czogXCIgKyBsY2FHcmFwaC50b1N0cmluZygpICtcbiAgICAgICAgLy8gIFwiLiBEZXB0aDogXCIgKyBkZXB0aCk7XG4gICAgICAgIC8vIFVwZGF0ZSBpZGVhbExlbmd0aFxuXG5cbiAgICAgICAgaWRlYWxMZW5ndGggKj0gZGVwdGggKiBvcHRpb25zLm5lc3RpbmdGYWN0b3I7XG4gICAgICB9XG5cbiAgICAgIHRlbXBFZGdlLmlkZWFsTGVuZ3RoID0gaWRlYWxMZW5ndGg7XG4gICAgICB0ZW1wRWRnZS5lbGFzdGljaXR5ID0gZWxhc3RpY2l0eTtcbiAgICAgIGxheW91dEluZm8ubGF5b3V0RWRnZXMucHVzaCh0ZW1wRWRnZSk7XG4gICAgfSAvLyBGaW5hbGx5LCByZXR1cm4gbGF5b3V0SW5mbyBvYmplY3RcblxuXG4gICAgcmV0dXJuIGxheW91dEluZm87XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBpbmRleCBvZiB0aGUgbG93ZXN0IGNvbW1vblxuICAgKiAgICAgICAgICBncmFwaCBhbmNlc3RvciBiZXR3ZWVuIDIgbm9kZXMgaW4gdGhlIHN1YnRyZWVcbiAgICogICAgICAgICAgKGZyb20gdGhlIGdyYXBoIGhpZXJhcmNoeSBpbmR1Y2VkIHRyZWUpIHdob3NlXG4gICAqICAgICAgICAgIHJvb3QgaXMgZ3JhcGhJeFxuICAgKlxuICAgKiBAYXJnIG5vZGUxOiBub2RlMSdzIElEXG4gICAqIEBhcmcgbm9kZTI6IG5vZGUyJ3MgSURcbiAgICogQGFyZyBsYXlvdXRJbmZvOiBsYXlvdXRJbmZvIG9iamVjdFxuICAgKlxuICAgKi9cblxuXG4gIHZhciBmaW5kTENBID0gZnVuY3Rpb24gZmluZExDQShub2RlMSwgbm9kZTIsIGxheW91dEluZm8pIHtcbiAgICAvLyBGaW5kIHRoZWlyIGNvbW1vbiBhbmNlc3Rlciwgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCBncmFwaFxuICAgIHZhciByZXMgPSBmaW5kTENBX2F1eChub2RlMSwgbm9kZTIsIDAsIGxheW91dEluZm8pO1xuXG4gICAgaWYgKDIgPiByZXMuY291bnQpIHtcbiAgICAgIC8vIElmIGF1eCBmdW5jdGlvbiBjb3VsZG4ndCBmaW5kIHRoZSBjb21tb24gYW5jZXN0ZXIsXG4gICAgICAvLyB0aGVuIGl0IGlzIHRoZSByb290IGdyYXBoXG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlcy5ncmFwaDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgICAgICAgICAgOiBBdXhpbGlhcnkgZnVuY3Rpb24gdXNlZCBmb3IgTENBIGNvbXB1dGF0aW9uXG4gICAqXG4gICAqIEBhcmcgbm9kZTEgICAgICA6IG5vZGUxJ3MgSURcbiAgICogQGFyZyBub2RlMiAgICAgIDogbm9kZTIncyBJRFxuICAgKiBAYXJnIGdyYXBoSXggICAgOiBzdWJncmFwaCBpbmRleFxuICAgKiBAYXJnIGxheW91dEluZm8gOiBsYXlvdXRJbmZvIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJuICAgICAgICAgOiBvYmplY3Qgb2YgdGhlIGZvcm0ge2NvdW50OiBYLCBncmFwaDogWX0sIHdoZXJlOlxuICAgKiAgICAgICAgICAgICAgICAgICBYIGlzIHRoZSBudW1iZXIgb2YgYW5jZXN0b3JzIChtYXg6IDIpIGZvdW5kIGluXG4gICAqICAgICAgICAgICAgICAgICAgIGdyYXBoSXggKGFuZCBpdCdzIHN1YmdyYXBocyksXG4gICAqICAgICAgICAgICAgICAgICAgIFkgaXMgdGhlIGdyYXBoIGluZGV4IG9mIHRoZSBsb3dlc3QgZ3JhcGggY29udGFpbmluZ1xuICAgKiAgICAgICAgICAgICAgICAgICBhbGwgWCBub2Rlc1xuICAgKi9cblxuXG4gIHZhciBmaW5kTENBX2F1eCA9IGZ1bmN0aW9uIGZpbmRMQ0FfYXV4KG5vZGUxLCBub2RlMiwgZ3JhcGhJeCwgbGF5b3V0SW5mbykge1xuICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbZ3JhcGhJeF07IC8vIElmIGJvdGggbm9kZXMgYmVsb25ncyB0byBncmFwaEl4XG5cbiAgICBpZiAoLTEgPCBncmFwaC5pbmRleE9mKG5vZGUxKSAmJiAtMSA8IGdyYXBoLmluZGV4T2Yobm9kZTIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb3VudDogMixcbiAgICAgICAgZ3JhcGg6IGdyYXBoSXhcbiAgICAgIH07XG4gICAgfSAvLyBNYWtlIHJlY3Vyc2l2ZSBjYWxscyBmb3IgYWxsIHN1YmdyYXBoc1xuXG5cbiAgICB2YXIgYyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZUlkID0gZ3JhcGhbaV07XG4gICAgICB2YXIgbm9kZUl4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbbm9kZUlkXTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbm9kZUl4XS5jaGlsZHJlbjsgLy8gSWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkLCBza2lwIGl0XG5cbiAgICAgIGlmICgwID09PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZEdyYXBoSXggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtsYXlvdXRJbmZvLmlkVG9JbmRleFtjaGlsZHJlblswXV1dO1xuICAgICAgdmFyIHJlc3VsdCA9IGZpbmRMQ0FfYXV4KG5vZGUxLCBub2RlMiwgY2hpbGRHcmFwaEl4LCBsYXlvdXRJbmZvKTtcblxuICAgICAgaWYgKDAgPT09IHJlc3VsdC5jb3VudCkge1xuICAgICAgICAvLyBOZWl0aGVyIG5vZGUxIG5vciBub2RlMiBhcmUgcHJlc2VudCBpbiB0aGlzIHN1YmdyYXBoXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICgxID09PSByZXN1bHQuY291bnQpIHtcbiAgICAgICAgLy8gT25lIG9mIChub2RlMSwgbm9kZTIpIGlzIHByZXNlbnQgaW4gdGhpcyBzdWJncmFwaFxuICAgICAgICBjKys7XG5cbiAgICAgICAgaWYgKDIgPT09IGMpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGZvdW5kIGJvdGggbm9kZXMsIG5vIG5lZWQgdG8ga2VlcCBzZWFyY2hpbmdcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQm90aCBub2RlcyBhcmUgcHJlc2VudCBpbiB0aGlzIHN1YmdyYXBoXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiBjLFxuICAgICAgZ3JhcGg6IGdyYXBoSXhcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogQGJyaWVmOiBwcmludHNMYXlvdXRJbmZvIGludG8ganMgY29uc29sZVxuICAgKiAgICAgICAgIE9ubHkgdXNlZCBmb3IgZGViYnVnaW5nXG4gICAqL1xuXG5cbnZhciBwcmludExheW91dEluZm87IFxuICAvKipcbiAgICogQGJyaWVmIDogUmFuZG9taXplcyB0aGUgcG9zaXRpb24gb2YgYWxsIG5vZGVzXG4gICAqL1xuXG5cbiAgdmFyIHJhbmRvbWl6ZVBvc2l0aW9ucyA9IGZ1bmN0aW9uIHJhbmRvbWl6ZVBvc2l0aW9ucyhsYXlvdXRJbmZvLCBjeSkge1xuICAgIHZhciB3aWR0aCA9IGxheW91dEluZm8uY2xpZW50V2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IGxheW91dEluZm8uY2xpZW50SGVpZ2h0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTsgLy8gTm8gbmVlZCB0byByYW5kb21pemUgY29tcG91bmQgbm9kZXMgb3IgbG9ja2VkIG5vZGVzXG5cbiAgICAgIGlmICgwID09PSBuLmNoaWxkcmVuLmxlbmd0aCAmJiAhbi5pc0xvY2tlZCkge1xuICAgICAgICBuLnBvc2l0aW9uWCA9IE1hdGgucmFuZG9tKCkgKiB3aWR0aDtcbiAgICAgICAgbi5wb3NpdGlvblkgPSBNYXRoLnJhbmRvbSgpICogaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0U2NhbGVJbkJvdW5kc0ZuID0gZnVuY3Rpb24gZ2V0U2NhbGVJbkJvdW5kc0ZuKGxheW91dEluZm8sIG9wdGlvbnMsIG5vZGVzKSB7XG4gICAgdmFyIGJiID0gbGF5b3V0SW5mby5ib3VuZGluZ0JveDtcbiAgICB2YXIgY29zZUJCID0ge1xuICAgICAgeDE6IEluZmluaXR5LFxuICAgICAgeDI6IC1JbmZpbml0eSxcbiAgICAgIHkxOiBJbmZpbml0eSxcbiAgICAgIHkyOiAtSW5maW5pdHlcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuYm91bmRpbmdCb3gpIHtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIGxub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlLmRhdGEoJ2lkJyldXTtcbiAgICAgICAgY29zZUJCLngxID0gTWF0aC5taW4oY29zZUJCLngxLCBsbm9kZS5wb3NpdGlvblgpO1xuICAgICAgICBjb3NlQkIueDIgPSBNYXRoLm1heChjb3NlQkIueDIsIGxub2RlLnBvc2l0aW9uWCk7XG4gICAgICAgIGNvc2VCQi55MSA9IE1hdGgubWluKGNvc2VCQi55MSwgbG5vZGUucG9zaXRpb25ZKTtcbiAgICAgICAgY29zZUJCLnkyID0gTWF0aC5tYXgoY29zZUJCLnkyLCBsbm9kZS5wb3NpdGlvblkpO1xuICAgICAgfSk7XG4gICAgICBjb3NlQkIudyA9IGNvc2VCQi54MiAtIGNvc2VCQi54MTtcbiAgICAgIGNvc2VCQi5oID0gY29zZUJCLnkyIC0gY29zZUJCLnkxO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICB2YXIgbG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W2VsZS5kYXRhKCdpZCcpXV07XG5cbiAgICAgIGlmIChvcHRpb25zLmJvdW5kaW5nQm94KSB7XG4gICAgICAgIC8vIHRoZW4gYWRkIGV4dHJhIGJvdW5kaW5nIGJveCBjb25zdHJhaW50XG4gICAgICAgIHZhciBwY3RYID0gKGxub2RlLnBvc2l0aW9uWCAtIGNvc2VCQi54MSkgLyBjb3NlQkIudztcbiAgICAgICAgdmFyIHBjdFkgPSAobG5vZGUucG9zaXRpb25ZIC0gY29zZUJCLnkxKSAvIGNvc2VCQi5oO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGJiLngxICsgcGN0WCAqIGJiLncsXG4gICAgICAgICAgeTogYmIueTEgKyBwY3RZICogYmIuaFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBsbm9kZS5wb3NpdGlvblgsXG4gICAgICAgICAgeTogbG5vZGUucG9zaXRpb25ZXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEBicmllZiAgICAgICAgICA6IFVwZGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiBub2RlcyBpbiB0aGUgbmV0d29ya1xuICAgKiBAYXJnIGxheW91dEluZm8gOiBMYXlvdXRJbmZvIG9iamVjdFxuICAgKiBAYXJnIGN5ICAgICAgICAgOiBDeXRvc2NhcGUgb2JqZWN0XG4gICAqIEBhcmcgb3B0aW9ucyAgICA6IExheW91dCBvcHRpb25zXG4gICAqL1xuXG5cbiAgdmFyIHJlZnJlc2hQb3NpdGlvbnMgPSBmdW5jdGlvbiByZWZyZXNoUG9zaXRpb25zKGxheW91dEluZm8sIGN5LCBvcHRpb25zKSB7XG4gICAgLy8gdmFyIHMgPSAnUmVmcmVzaGluZyBwb3NpdGlvbnMnO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIHZhciBsYXlvdXQgPSBvcHRpb25zLmxheW91dDtcbiAgICB2YXIgbm9kZXMgPSBvcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgICB2YXIgZ2V0U2NhbGVkUG9zID0gZ2V0U2NhbGVJbkJvdW5kc0ZuKGxheW91dEluZm8sIG9wdGlvbnMsIG5vZGVzKTtcbiAgICBub2Rlcy5wb3NpdGlvbnMoZ2V0U2NhbGVkUG9zKTsgLy8gVHJpZ2dlciBsYXlvdXRSZWFkeSBvbmx5IG9uIGZpcnN0IGNhbGxcblxuICAgIGlmICh0cnVlICE9PSBsYXlvdXRJbmZvLnJlYWR5KSB7XG4gICAgICAvLyBzID0gJ1RyaWdnZXJpbmcgbGF5b3V0cmVhZHknO1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgICBsYXlvdXRJbmZvLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQGJyaWVmIDogTG9ncyBhIGRlYnVnIG1lc3NhZ2UgaW4gSlMgY29uc29sZSwgaWYgREVCVUcgaXMgT05cbiAgICovXG4gIC8vIHZhciBsb2dEZWJ1ZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgLy8gICBpZiAoREVCVUcpIHtcbiAgLy8gICAgIGNvbnNvbGUuZGVidWcodGV4dCk7XG4gIC8vICAgfVxuICAvLyB9O1xuXG4gIC8qKlxuICAgKiBAYnJpZWYgICAgICAgICAgOiBQZXJmb3JtcyBvbmUgaXRlcmF0aW9uIG9mIHRoZSBwaHlzaWNhbCBzaW11bGF0aW9uXG4gICAqIEBhcmcgbGF5b3V0SW5mbyA6IExheW91dEluZm8gb2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgICogQGFyZyBjeSAgICAgICAgIDogQ3l0b3NjYXBlIG9iamVjdFxuICAgKiBAYXJnIG9wdGlvbnMgICAgOiBMYXlvdXQgb3B0aW9uc1xuICAgKi9cblxuXG4gIHZhciBzdGVwID0gZnVuY3Rpb24gc3RlcChsYXlvdXRJbmZvLCBvcHRpb25zLCBfc3RlcCkge1xuICAgIC8vIHZhciBzID0gXCJcXG5cXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCI7XG4gICAgLy8gcyArPSBcIlxcblNURVA6IFwiICsgc3RlcDtcbiAgICAvLyBzICs9IFwiXFxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xcblwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIC8vIENhbGN1bGF0ZSBub2RlIHJlcHVsc2lvbnNcbiAgICBjYWxjdWxhdGVOb2RlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpOyAvLyBDYWxjdWxhdGUgZWRnZSBmb3JjZXNcblxuICAgIGNhbGN1bGF0ZUVkZ2VGb3JjZXMobGF5b3V0SW5mbyk7IC8vIENhbGN1bGF0ZSBncmF2aXR5IGZvcmNlc1xuXG4gICAgY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKTsgLy8gUHJvcGFnYXRlIGZvcmNlcyBmcm9tIHBhcmVudCB0byBjaGlsZFxuXG4gICAgcHJvcGFnYXRlRm9yY2VzKGxheW91dEluZm8pOyAvLyBVcGRhdGUgcG9zaXRpb25zIGJhc2VkIG9uIGNhbGN1bGF0ZWQgZm9yY2VzXG5cbiAgICB1cGRhdGVQb3NpdGlvbnMobGF5b3V0SW5mbyk7XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBDb21wdXRlcyB0aGUgbm9kZSByZXB1bHNpb24gZm9yY2VzXG4gICAqL1xuXG5cbiAgdmFyIGNhbGN1bGF0ZU5vZGVGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVOb2RlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgICAvLyBHbyB0aHJvdWdoIGVhY2ggb2YgdGhlIGdyYXBocyBpbiBncmFwaFNldFxuICAgIC8vIE5vZGVzIG9ubHkgcmVwZWwgZWFjaCBvdGhlciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBncmFwaFxuICAgIC8vIHZhciBzID0gJ2NhbGN1bGF0ZU5vZGVGb3JjZXMnO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICAgIHZhciBudW1Ob2RlcyA9IGdyYXBoLmxlbmd0aDsgLy8gcyA9IFwiU2V0OiBcIiArIGdyYXBoLnRvU3RyaW5nKCk7XG4gICAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICAgIC8vIE5vdyBnZXQgYWxsIHRoZSBwYWlycyBvZiBub2Rlc1xuICAgICAgLy8gT25seSBnZXQgZWFjaCBwYWlyIG9uY2UsIChBLCBCKSA9IChCLCBBKVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bU5vZGVzOyBqKyspIHtcbiAgICAgICAgdmFyIG5vZGUxID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtqXV1dO1xuXG4gICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IG51bU5vZGVzOyBrKyspIHtcbiAgICAgICAgICB2YXIgbm9kZTIgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W2dyYXBoW2tdXV07XG4gICAgICAgICAgbm9kZVJlcHVsc2lvbihub2RlMSwgbm9kZTIsIGxheW91dEluZm8sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciByYW5kb21EaXN0YW5jZSA9IGZ1bmN0aW9uIHJhbmRvbURpc3RhbmNlKG1heCkge1xuICAgIHJldHVybiAtbWF4ICsgMiAqIG1heCAqIE1hdGgucmFuZG9tKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBDb21wdXRlIHRoZSBub2RlIHJlcHVsc2lvbiBmb3JjZXMgYmV0d2VlbiBhIHBhaXIgb2Ygbm9kZXNcbiAgICovXG5cblxuICB2YXIgbm9kZVJlcHVsc2lvbiA9IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZTEsIG5vZGUyLCBsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gICAgLy8gdmFyIHMgPSBcIk5vZGUgcmVwdWxzaW9uLiBOb2RlMTogXCIgKyBub2RlMS5pZCArIFwiIE5vZGUyOiBcIiArIG5vZGUyLmlkO1xuICAgIHZhciBjbXB0SWQxID0gbm9kZTEuY21wdElkO1xuICAgIHZhciBjbXB0SWQyID0gbm9kZTIuY21wdElkO1xuXG4gICAgaWYgKGNtcHRJZDEgIT09IGNtcHRJZDIgJiYgIWxheW91dEluZm8uaXNDb21wb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2V0IGRpcmVjdGlvbiBvZiBsaW5lIGNvbm5lY3RpbmcgYm90aCBub2RlIGNlbnRlcnNcblxuXG4gICAgdmFyIGRpcmVjdGlvblggPSBub2RlMi5wb3NpdGlvblggLSBub2RlMS5wb3NpdGlvblg7XG4gICAgdmFyIGRpcmVjdGlvblkgPSBub2RlMi5wb3NpdGlvblkgLSBub2RlMS5wb3NpdGlvblk7XG4gICAgdmFyIG1heFJhbmREaXN0ID0gMTsgLy8gcyArPSBcIlxcbmRpcmVjdGlvblg6IFwiICsgZGlyZWN0aW9uWCArIFwiLCBkaXJlY3Rpb25ZOiBcIiArIGRpcmVjdGlvblk7XG4gICAgLy8gSWYgYm90aCBjZW50ZXJzIGFyZSB0aGUgc2FtZSwgYXBwbHkgYSByYW5kb20gZm9yY2VcblxuICAgIGlmICgwID09PSBkaXJlY3Rpb25YICYmIDAgPT09IGRpcmVjdGlvblkpIHtcbiAgICAgIGRpcmVjdGlvblggPSByYW5kb21EaXN0YW5jZShtYXhSYW5kRGlzdCk7XG4gICAgICBkaXJlY3Rpb25ZID0gcmFuZG9tRGlzdGFuY2UobWF4UmFuZERpc3QpO1xuICAgIH1cblxuICAgIHZhciBvdmVybGFwID0gbm9kZXNPdmVybGFwKG5vZGUxLCBub2RlMiwgZGlyZWN0aW9uWCwgZGlyZWN0aW9uWSk7XG5cbiAgICBpZiAob3ZlcmxhcCA+IDApIHtcbiAgICAgIC8vIHMgKz0gXCJcXG5Ob2RlcyBETyBvdmVybGFwLlwiO1xuICAgICAgLy8gcyArPSBcIlxcbk92ZXJsYXA6IFwiICsgb3ZlcmxhcDtcbiAgICAgIC8vIElmIG5vZGVzIG92ZXJsYXAsIHJlcHVsc2lvbiBmb3JjZSBpcyBwcm9wb3J0aW9uYWxcbiAgICAgIC8vIHRvIHRoZSBvdmVybGFwXG4gICAgICB2YXIgZm9yY2UgPSBvcHRpb25zLm5vZGVPdmVybGFwICogb3ZlcmxhcDsgLy8gQ29tcHV0ZSB0aGUgbW9kdWxlIGFuZCBjb21wb25lbnRzIG9mIHRoZSBmb3JjZSB2ZWN0b3JcblxuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpcmVjdGlvblggKiBkaXJlY3Rpb25YICsgZGlyZWN0aW9uWSAqIGRpcmVjdGlvblkpOyAvLyBzICs9IFwiXFxuRGlzdGFuY2U6IFwiICsgZGlzdGFuY2U7XG5cbiAgICAgIHZhciBmb3JjZVggPSBmb3JjZSAqIGRpcmVjdGlvblggLyBkaXN0YW5jZTtcbiAgICAgIHZhciBmb3JjZVkgPSBmb3JjZSAqIGRpcmVjdGlvblkgLyBkaXN0YW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcyArPSBcIlxcbk5vZGVzIGRvIE5PVCBvdmVybGFwLlwiO1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBvdmVybGFwLCBmb3JjZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsXG4gICAgICAvLyB0byBzcXVhcmVkIGRpc3RhbmNlXG4gICAgICAvLyBHZXQgY2xpcHBpbmcgcG9pbnRzIGZvciBib3RoIG5vZGVzXG4gICAgICB2YXIgcG9pbnQxID0gZmluZENsaXBwaW5nUG9pbnQobm9kZTEsIGRpcmVjdGlvblgsIGRpcmVjdGlvblkpO1xuICAgICAgdmFyIHBvaW50MiA9IGZpbmRDbGlwcGluZ1BvaW50KG5vZGUyLCAtMSAqIGRpcmVjdGlvblgsIC0xICogZGlyZWN0aW9uWSk7IC8vIFVzZSBjbGlwcGluZyBwb2ludHMgdG8gY29tcHV0ZSBkaXN0YW5jZVxuXG4gICAgICB2YXIgZGlzdGFuY2VYID0gcG9pbnQyLnggLSBwb2ludDEueDtcbiAgICAgIHZhciBkaXN0YW5jZVkgPSBwb2ludDIueSAtIHBvaW50MS55O1xuICAgICAgdmFyIGRpc3RhbmNlU3FyID0gZGlzdGFuY2VYICogZGlzdGFuY2VYICsgZGlzdGFuY2VZICogZGlzdGFuY2VZO1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpc3RhbmNlU3FyKTsgLy8gcyArPSBcIlxcbkRpc3RhbmNlOiBcIiArIGRpc3RhbmNlO1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgbW9kdWxlIGFuZCBjb21wb25lbnRzIG9mIHRoZSBmb3JjZSB2ZWN0b3JcblxuICAgICAgdmFyIGZvcmNlID0gKG5vZGUxLm5vZGVSZXB1bHNpb24gKyBub2RlMi5ub2RlUmVwdWxzaW9uKSAvIGRpc3RhbmNlU3FyO1xuICAgICAgdmFyIGZvcmNlWCA9IGZvcmNlICogZGlzdGFuY2VYIC8gZGlzdGFuY2U7XG4gICAgICB2YXIgZm9yY2VZID0gZm9yY2UgKiBkaXN0YW5jZVkgLyBkaXN0YW5jZTtcbiAgICB9IC8vIEFwcGx5IGZvcmNlXG5cblxuICAgIGlmICghbm9kZTEuaXNMb2NrZWQpIHtcbiAgICAgIG5vZGUxLm9mZnNldFggLT0gZm9yY2VYO1xuICAgICAgbm9kZTEub2Zmc2V0WSAtPSBmb3JjZVk7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlMi5pc0xvY2tlZCkge1xuICAgICAgbm9kZTIub2Zmc2V0WCArPSBmb3JjZVg7XG4gICAgICBub2RlMi5vZmZzZXRZICs9IGZvcmNlWTtcbiAgICB9IC8vIHMgKz0gXCJcXG5Gb3JjZVg6IFwiICsgZm9yY2VYICsgXCIgRm9yY2VZOiBcIiArIGZvcmNlWTtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuXG4gICAgcmV0dXJuO1xuICB9O1xuICAvKipcbiAgICogQGJyaWVmICA6IERldGVybWluZXMgd2hldGhlciB0d28gbm9kZXMgb3ZlcmxhcCBvciBub3RcbiAgICogQHJldHVybiA6IEFtb3VudCBvZiBvdmVybGFwcGluZyAoMCA9PiBubyBvdmVybGFwKVxuICAgKi9cblxuXG4gIHZhciBub2Rlc092ZXJsYXAgPSBmdW5jdGlvbiBub2Rlc092ZXJsYXAobm9kZTEsIG5vZGUyLCBkWCwgZFkpIHtcbiAgICBpZiAoZFggPiAwKSB7XG4gICAgICB2YXIgb3ZlcmxhcFggPSBub2RlMS5tYXhYIC0gbm9kZTIubWluWDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG92ZXJsYXBYID0gbm9kZTIubWF4WCAtIG5vZGUxLm1pblg7XG4gICAgfVxuXG4gICAgaWYgKGRZID4gMCkge1xuICAgICAgdmFyIG92ZXJsYXBZID0gbm9kZTEubWF4WSAtIG5vZGUyLm1pblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvdmVybGFwWSA9IG5vZGUyLm1heFkgLSBub2RlMS5taW5ZO1xuICAgIH1cblxuICAgIGlmIChvdmVybGFwWCA+PSAwICYmIG92ZXJsYXBZID49IDApIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQob3ZlcmxhcFggKiBvdmVybGFwWCArIG92ZXJsYXBZICogb3ZlcmxhcFkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBGaW5kcyB0aGUgcG9pbnQgaW4gd2hpY2ggYW4gZWRnZSAoZGlyZWN0aW9uIGRYLCBkWSkgaW50ZXJzZWN0c1xuICAgKiAgICAgICAgICB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IG9mIGl0J3Mgc291cmNlL3RhcmdldCBub2RlXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRDbGlwcGluZ1BvaW50ID0gZnVuY3Rpb24gZmluZENsaXBwaW5nUG9pbnQobm9kZSwgZFgsIGRZKSB7XG4gICAgLy8gU2hvcmN1dHNcbiAgICB2YXIgWCA9IG5vZGUucG9zaXRpb25YO1xuICAgIHZhciBZID0gbm9kZS5wb3NpdGlvblk7XG4gICAgdmFyIEggPSBub2RlLmhlaWdodCB8fCAxO1xuICAgIHZhciBXID0gbm9kZS53aWR0aCB8fCAxO1xuICAgIHZhciBkaXJTbG9wZSA9IGRZIC8gZFg7XG4gICAgdmFyIG5vZGVTbG9wZSA9IEggLyBXOyAvLyB2YXIgcyA9ICdDb21wdXRpbmcgY2xpcHBpbmcgcG9pbnQgb2Ygbm9kZSAnICsgbm9kZS5pZCArXG4gICAgLy8gICBcIiAuIEhlaWdodDogIFwiICsgSCArIFwiLCBXaWR0aDogXCIgKyBXICtcbiAgICAvLyAgIFwiXFxuRGlyZWN0aW9uIFwiICsgZFggKyBcIiwgXCIgKyBkWTtcbiAgICAvL1xuICAgIC8vIENvbXB1dGUgaW50ZXJzZWN0aW9uXG5cbiAgICB2YXIgcmVzID0ge307IC8vIENhc2U6IFZlcnRpY2FsIGRpcmVjdGlvbiAodXApXG5cbiAgICBpZiAoMCA9PT0gZFggJiYgMCA8IGRZKSB7XG4gICAgICByZXMueCA9IFg7IC8vIHMgKz0gXCJcXG5VcCBkaXJlY3Rpb25cIjtcblxuICAgICAgcmVzLnkgPSBZICsgSCAvIDI7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gLy8gQ2FzZTogVmVydGljYWwgZGlyZWN0aW9uIChkb3duKVxuXG5cbiAgICBpZiAoMCA9PT0gZFggJiYgMCA+IGRZKSB7XG4gICAgICByZXMueCA9IFg7XG4gICAgICByZXMueSA9IFkgKyBIIC8gMjsgLy8gcyArPSBcIlxcbkRvd24gZGlyZWN0aW9uXCI7XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSAvLyBDYXNlOiBJbnRlcnNlY3RzIHRoZSByaWdodCBib3JkZXJcblxuXG4gICAgaWYgKDAgPCBkWCAmJiAtMSAqIG5vZGVTbG9wZSA8PSBkaXJTbG9wZSAmJiBkaXJTbG9wZSA8PSBub2RlU2xvcGUpIHtcbiAgICAgIHJlcy54ID0gWCArIFcgLyAyO1xuICAgICAgcmVzLnkgPSBZICsgVyAqIGRZIC8gMiAvIGRYOyAvLyBzICs9IFwiXFxuUmlnaHRib3JkZXJcIjtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IC8vIENhc2U6IEludGVyc2VjdHMgdGhlIGxlZnQgYm9yZGVyXG5cblxuICAgIGlmICgwID4gZFggJiYgLTEgKiBub2RlU2xvcGUgPD0gZGlyU2xvcGUgJiYgZGlyU2xvcGUgPD0gbm9kZVNsb3BlKSB7XG4gICAgICByZXMueCA9IFggLSBXIC8gMjtcbiAgICAgIHJlcy55ID0gWSAtIFcgKiBkWSAvIDIgLyBkWDsgLy8gcyArPSBcIlxcbkxlZnRib3JkZXJcIjtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IC8vIENhc2U6IEludGVyc2VjdHMgdGhlIHRvcCBib3JkZXJcblxuXG4gICAgaWYgKDAgPCBkWSAmJiAoZGlyU2xvcGUgPD0gLTEgKiBub2RlU2xvcGUgfHwgZGlyU2xvcGUgPj0gbm9kZVNsb3BlKSkge1xuICAgICAgcmVzLnggPSBYICsgSCAqIGRYIC8gMiAvIGRZO1xuICAgICAgcmVzLnkgPSBZICsgSCAvIDI7IC8vIHMgKz0gXCJcXG5Ub3AgYm9yZGVyXCI7XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSAvLyBDYXNlOiBJbnRlcnNlY3RzIHRoZSBib3R0b20gYm9yZGVyXG5cblxuICAgIGlmICgwID4gZFkgJiYgKGRpclNsb3BlIDw9IC0xICogbm9kZVNsb3BlIHx8IGRpclNsb3BlID49IG5vZGVTbG9wZSkpIHtcbiAgICAgIHJlcy54ID0gWCAtIEggKiBkWCAvIDIgLyBkWTtcbiAgICAgIHJlcy55ID0gWSAtIEggLyAyOyAvLyBzICs9IFwiXFxuQm90dG9tIGJvcmRlclwiO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gLy8gcyArPSBcIlxcbkNsaXBwaW5nIHBvaW50IGZvdW5kIGF0IFwiICsgcmVzLnggKyBcIiwgXCIgKyByZXMueTtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbiAgLyoqXG4gICAqIEBicmllZiA6IENhbGN1bGF0ZXMgYWxsIGVkZ2UgZm9yY2VzXG4gICAqL1xuXG5cbiAgdmFyIGNhbGN1bGF0ZUVkZ2VGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVFZGdlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGVkZ2VzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmVkZ2VTaXplOyBpKyspIHtcbiAgICAgIC8vIEdldCBlZGdlLCBzb3VyY2UgJiB0YXJnZXQgbm9kZXNcbiAgICAgIHZhciBlZGdlID0gbGF5b3V0SW5mby5sYXlvdXRFZGdlc1tpXTtcbiAgICAgIHZhciBzb3VyY2VJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W2VkZ2Uuc291cmNlSWRdO1xuICAgICAgdmFyIHNvdXJjZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbc291cmNlSXhdO1xuICAgICAgdmFyIHRhcmdldEl4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbZWRnZS50YXJnZXRJZF07XG4gICAgICB2YXIgdGFyZ2V0ID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1t0YXJnZXRJeF07IC8vIEdldCBkaXJlY3Rpb24gb2YgbGluZSBjb25uZWN0aW5nIGJvdGggbm9kZSBjZW50ZXJzXG5cbiAgICAgIHZhciBkaXJlY3Rpb25YID0gdGFyZ2V0LnBvc2l0aW9uWCAtIHNvdXJjZS5wb3NpdGlvblg7XG4gICAgICB2YXIgZGlyZWN0aW9uWSA9IHRhcmdldC5wb3NpdGlvblkgLSBzb3VyY2UucG9zaXRpb25ZOyAvLyBJZiBib3RoIGNlbnRlcnMgYXJlIHRoZSBzYW1lLCBkbyBub3RoaW5nLlxuICAgICAgLy8gQSByYW5kb20gZm9yY2UgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFzIG5vZGUgcmVwdWxzaW9uXG5cbiAgICAgIGlmICgwID09PSBkaXJlY3Rpb25YICYmIDAgPT09IGRpcmVjdGlvblkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIEdldCBjbGlwcGluZyBwb2ludHMgZm9yIGJvdGggbm9kZXNcblxuXG4gICAgICB2YXIgcG9pbnQxID0gZmluZENsaXBwaW5nUG9pbnQoc291cmNlLCBkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTtcbiAgICAgIHZhciBwb2ludDIgPSBmaW5kQ2xpcHBpbmdQb2ludCh0YXJnZXQsIC0xICogZGlyZWN0aW9uWCwgLTEgKiBkaXJlY3Rpb25ZKTtcbiAgICAgIHZhciBseCA9IHBvaW50Mi54IC0gcG9pbnQxLng7XG4gICAgICB2YXIgbHkgPSBwb2ludDIueSAtIHBvaW50MS55O1xuICAgICAgdmFyIGwgPSBNYXRoLnNxcnQobHggKiBseCArIGx5ICogbHkpO1xuICAgICAgdmFyIGZvcmNlID0gTWF0aC5wb3coZWRnZS5pZGVhbExlbmd0aCAtIGwsIDIpIC8gZWRnZS5lbGFzdGljaXR5O1xuXG4gICAgICBpZiAoMCAhPT0gbCkge1xuICAgICAgICB2YXIgZm9yY2VYID0gZm9yY2UgKiBseCAvIGw7XG4gICAgICAgIHZhciBmb3JjZVkgPSBmb3JjZSAqIGx5IC8gbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBmb3JjZVggPSAwO1xuICAgICAgICB2YXIgZm9yY2VZID0gMDtcbiAgICAgIH0gLy8gQWRkIHRoaXMgZm9yY2UgdG8gdGFyZ2V0IGFuZCBzb3VyY2Ugbm9kZXNcblxuXG4gICAgICBpZiAoIXNvdXJjZS5pc0xvY2tlZCkge1xuICAgICAgICBzb3VyY2Uub2Zmc2V0WCArPSBmb3JjZVg7XG4gICAgICAgIHNvdXJjZS5vZmZzZXRZICs9IGZvcmNlWTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXQuaXNMb2NrZWQpIHtcbiAgICAgICAgdGFyZ2V0Lm9mZnNldFggLT0gZm9yY2VYO1xuICAgICAgICB0YXJnZXQub2Zmc2V0WSAtPSBmb3JjZVk7XG4gICAgICB9IC8vIHZhciBzID0gJ0VkZ2UgZm9yY2UgYmV0d2VlbiBub2RlcyAnICsgc291cmNlLmlkICsgJyBhbmQgJyArIHRhcmdldC5pZDtcbiAgICAgIC8vIHMgKz0gXCJcXG5EaXN0YW5jZTogXCIgKyBsICsgXCIgRm9yY2U6IChcIiArIGZvcmNlWCArIFwiLCBcIiArIGZvcmNlWSArIFwiKVwiO1xuICAgICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgOiBDb21wdXRlcyBncmF2aXR5IGZvcmNlcyBmb3IgYWxsIG5vZGVzXG4gICAqL1xuXG5cbiAgdmFyIGNhbGN1bGF0ZUdyYXZpdHlGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5ncmF2aXR5ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRpc3RUaHJlc2hvbGQgPSAxOyAvLyB2YXIgcyA9ICdjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzJztcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICAgIHZhciBudW1Ob2RlcyA9IGdyYXBoLmxlbmd0aDsgLy8gcyA9IFwiU2V0OiBcIiArIGdyYXBoLnRvU3RyaW5nKCk7XG4gICAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICAgIC8vIENvbXB1dGUgZ3JhcGggY2VudGVyXG5cbiAgICAgIGlmICgwID09PSBpKSB7XG4gICAgICAgIHZhciBjZW50ZXJYID0gbGF5b3V0SW5mby5jbGllbnRIZWlnaHQgLyAyO1xuICAgICAgICB2YXIgY2VudGVyWSA9IGxheW91dEluZm8uY2xpZW50V2lkdGggLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR2V0IFBhcmVudCBub2RlIGZvciB0aGlzIGdyYXBoLCBhbmQgdXNlIGl0cyBwb3NpdGlvbiBhcyBjZW50ZXJcbiAgICAgICAgdmFyIHRlbXAgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W2dyYXBoWzBdXV07XG4gICAgICAgIHZhciBwYXJlbnQgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3RlbXAucGFyZW50SWRdXTtcbiAgICAgICAgdmFyIGNlbnRlclggPSBwYXJlbnQucG9zaXRpb25YO1xuICAgICAgICB2YXIgY2VudGVyWSA9IHBhcmVudC5wb3NpdGlvblk7XG4gICAgICB9IC8vIHMgPSBcIkNlbnRlciBmb3VuZCBhdDogXCIgKyBjZW50ZXJYICsgXCIsIFwiICsgY2VudGVyWTtcbiAgICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgICAgLy8gQXBwbHkgZm9yY2UgdG8gYWxsIG5vZGVzIGluIGdyYXBoXG5cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1Ob2RlczsgaisrKSB7XG4gICAgICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtqXV1dOyAvLyBzID0gXCJOb2RlOiBcIiArIG5vZGUuaWQ7XG5cbiAgICAgICAgaWYgKG5vZGUuaXNMb2NrZWQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkeCA9IGNlbnRlclggLSBub2RlLnBvc2l0aW9uWDtcbiAgICAgICAgdmFyIGR5ID0gY2VudGVyWSAtIG5vZGUucG9zaXRpb25ZO1xuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKGQgPiBkaXN0VGhyZXNob2xkKSB7XG4gICAgICAgICAgdmFyIGZ4ID0gb3B0aW9ucy5ncmF2aXR5ICogZHggLyBkO1xuICAgICAgICAgIHZhciBmeSA9IG9wdGlvbnMuZ3Jhdml0eSAqIGR5IC8gZDtcbiAgICAgICAgICBub2RlLm9mZnNldFggKz0gZng7XG4gICAgICAgICAgbm9kZS5vZmZzZXRZICs9IGZ5OyAvLyBzICs9IFwiOiBBcHBsaWVkIGZvcmNlOiBcIiArIGZ4ICsgXCIsIFwiICsgZnk7XG4gICAgICAgIH0gLy8gbG9nRGVidWcocyk7XG5cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAYnJpZWYgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHByb3BhZ2F0ZXMgdGhlIGV4aXN0aW5nIG9mZnNldHMgZnJvbVxuICAgKiAgICAgICAgICAgICAgICAgICBwYXJlbnQgbm9kZXMgdG8gaXRzIGRlc2NlbmRlbnRzLlxuICAgKiBAYXJnIGxheW91dEluZm8gOiBsYXlvdXRJbmZvIE9iamVjdFxuICAgKiBAYXJnIGN5ICAgICAgICAgOiBjeXRvc2NhcGUgT2JqZWN0XG4gICAqIEBhcmcgb3B0aW9ucyAgICA6IExheW91dCBvcHRpb25zXG4gICAqL1xuXG5cbiAgdmFyIHByb3BhZ2F0ZUZvcmNlcyA9IGZ1bmN0aW9uIHByb3BhZ2F0ZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gICAgLy8gSW5saW5lIGltcGxlbWVudGF0aW9uIG9mIGEgcXVldWUsIHVzZWQgZm9yIHRyYXZlcnNpbmcgdGhlIGdyYXBoIGluIEJGUyBvcmRlclxuICAgIHZhciBxdWV1ZSA9IFtdO1xuICAgIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG5cbiAgICB2YXIgZW5kID0gLTE7IC8vIFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgIC8vIGxvZ0RlYnVnKCdwcm9wYWdhdGVGb3JjZXMnKTtcbiAgICAvLyBTdGFydCBieSB2aXNpdGluZyB0aGUgbm9kZXMgaW4gdGhlIHJvb3QgZ3JhcGhcblxuICAgIHF1ZXVlLnB1c2guYXBwbHkocXVldWUsIGxheW91dEluZm8uZ3JhcGhTZXRbMF0pO1xuICAgIGVuZCArPSBsYXlvdXRJbmZvLmdyYXBoU2V0WzBdLmxlbmd0aDsgLy8gVHJhdmVyc2UgdGhlIGdyYXBoLCBsZXZlbCBieSBsZXZlbCxcblxuICAgIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICAgIC8vIEdldCB0aGUgbm9kZSB0byB2aXNpdCBhbmQgcmVtb3ZlIGl0IGZyb20gcXVldWVcbiAgICAgIHZhciBub2RlSWQgPSBxdWV1ZVtzdGFydCsrXTtcbiAgICAgIHZhciBub2RlSW5kZXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlSWRdO1xuICAgICAgdmFyIG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW25vZGVJbmRleF07XG4gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOyAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgbm9kZSBpZiBpdCdzIGNvbXBvdW5kXG5cbiAgICAgIGlmICgwIDwgY2hpbGRyZW4ubGVuZ3RoICYmICFub2RlLmlzTG9ja2VkKSB7XG4gICAgICAgIHZhciBvZmZYID0gbm9kZS5vZmZzZXRYO1xuICAgICAgICB2YXIgb2ZmWSA9IG5vZGUub2Zmc2V0WTsgLy8gdmFyIHMgPSBcIlByb3BhZ2F0aW5nIG9mZnNldCBmcm9tIHBhcmVudCBub2RlIDogXCIgKyBub2RlLmlkICtcbiAgICAgICAgLy8gICBcIi4gT2Zmc2V0WDogXCIgKyBvZmZYICsgXCIuIE9mZnNldFk6IFwiICsgb2ZmWTtcbiAgICAgICAgLy8gcyArPSBcIlxcbiBDaGlsZHJlbjogXCIgKyBjaGlsZHJlbi50b1N0cmluZygpO1xuICAgICAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbY2hpbGRyZW5baV1dXTsgLy8gUHJvcGFnYXRlIG9mZnNldFxuXG4gICAgICAgICAgY2hpbGROb2RlLm9mZnNldFggKz0gb2ZmWDtcbiAgICAgICAgICBjaGlsZE5vZGUub2Zmc2V0WSArPSBvZmZZOyAvLyBBZGQgY2hpbGRyZW4gdG8gcXVldWUgdG8gYmUgdmlzaXRlZFxuXG4gICAgICAgICAgcXVldWVbKytlbmRdID0gY2hpbGRyZW5baV07XG4gICAgICAgIH0gLy8gUmVzZXQgcGFyZW50IG9mZnNldHNcblxuXG4gICAgICAgIG5vZGUub2Zmc2V0WCA9IDA7XG4gICAgICAgIG5vZGUub2Zmc2V0WSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQGJyaWVmIDogVXBkYXRlcyB0aGUgbGF5b3V0IG1vZGVsIHBvc2l0aW9ucywgYmFzZWQgb25cbiAgICogICAgICAgICAgdGhlIGFjY3VtdWxhdGVkIGZvcmNlc1xuICAgKi9cblxuXG4gIHZhciB1cGRhdGVQb3NpdGlvbnMgPSBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbnMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICAgIC8vIHZhciBzID0gJ1VwZGF0aW5nIHBvc2l0aW9ucyc7XG4gICAgLy8gbG9nRGVidWcocyk7XG4gICAgLy8gUmVzZXQgYm91bmRhcmllcyBmb3IgY29tcG91bmQgbm9kZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgICAgdmFyIG4gPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2ldO1xuXG4gICAgICBpZiAoMCA8IG4uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxvZ0RlYnVnKFwiUmVzZXR0aW5nIGJvdW5kYXJpZXMgb2YgY29tcG91bmQgbm9kZTogXCIgKyBuLmlkKTtcbiAgICAgICAgbi5tYXhYID0gdW5kZWZpbmVkO1xuICAgICAgICBuLm1pblggPSB1bmRlZmluZWQ7XG4gICAgICAgIG4ubWF4WSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbi5taW5ZID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG5cbiAgICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggfHwgbi5pc0xvY2tlZCkge1xuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCBjb21wb3VuZCBvciBsb2NrZWQgbm9kZSBwb3NpdGlvblxuICAgICAgICAvLyBsb2dEZWJ1ZyhcIlNraXBwaW5nIHBvc2l0aW9uIHVwZGF0ZSBvZiBub2RlOiBcIiArIG4uaWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gcyA9IFwiTm9kZTogXCIgKyBuLmlkICsgXCIgUHJldmlvdXMgcG9zaXRpb246IChcIiArXG4gICAgICAvLyBuLnBvc2l0aW9uWCArIFwiLCBcIiArIG4ucG9zaXRpb25ZICsgXCIpLlwiO1xuICAgICAgLy8gTGltaXQgZGlzcGxhY2VtZW50IGluIG9yZGVyIHRvIGltcHJvdmUgc3RhYmlsaXR5XG5cblxuICAgICAgdmFyIHRlbXBGb3JjZSA9IGxpbWl0Rm9yY2Uobi5vZmZzZXRYLCBuLm9mZnNldFksIGxheW91dEluZm8udGVtcGVyYXR1cmUpO1xuICAgICAgbi5wb3NpdGlvblggKz0gdGVtcEZvcmNlLng7XG4gICAgICBuLnBvc2l0aW9uWSArPSB0ZW1wRm9yY2UueTtcbiAgICAgIG4ub2Zmc2V0WCA9IDA7XG4gICAgICBuLm9mZnNldFkgPSAwO1xuICAgICAgbi5taW5YID0gbi5wb3NpdGlvblggLSBuLndpZHRoO1xuICAgICAgbi5tYXhYID0gbi5wb3NpdGlvblggKyBuLndpZHRoO1xuICAgICAgbi5taW5ZID0gbi5wb3NpdGlvblkgLSBuLmhlaWdodDtcbiAgICAgIG4ubWF4WSA9IG4ucG9zaXRpb25ZICsgbi5oZWlnaHQ7IC8vIHMgKz0gXCIgTmV3IFBvc2l0aW9uOiAoXCIgKyBuLnBvc2l0aW9uWCArIFwiLCBcIiArIG4ucG9zaXRpb25ZICsgXCIpLlwiO1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgICAvLyBVcGRhdGUgYW5jZXN0cnkgYm91ZGFyaWVzXG5cbiAgICAgIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhuLCBsYXlvdXRJbmZvKTtcbiAgICB9IC8vIFVwZGF0ZSBzaXplLCBwb3NpdGlvbiBvZiBjb21wdW5kIG5vZGVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG5cbiAgICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggJiYgIW4uaXNMb2NrZWQpIHtcbiAgICAgICAgbi5wb3NpdGlvblggPSAobi5tYXhYICsgbi5taW5YKSAvIDI7XG4gICAgICAgIG4ucG9zaXRpb25ZID0gKG4ubWF4WSArIG4ubWluWSkgLyAyO1xuICAgICAgICBuLndpZHRoID0gbi5tYXhYIC0gbi5taW5YO1xuICAgICAgICBuLmhlaWdodCA9IG4ubWF4WSAtIG4ubWluWTsgLy8gcyA9IFwiVXBkYXRpbmcgcG9zaXRpb24sIHNpemUgb2YgY29tcG91bmQgbm9kZSBcIiArIG4uaWQ7XG4gICAgICAgIC8vIHMgKz0gXCJcXG5Qb3NpdGlvblg6IFwiICsgbi5wb3NpdGlvblggKyBcIiwgUG9zaXRpb25ZOiBcIiArIG4ucG9zaXRpb25ZO1xuICAgICAgICAvLyBzICs9IFwiXFxuV2lkdGg6IFwiICsgbi53aWR0aCArIFwiLCBIZWlnaHQ6IFwiICsgbi5oZWlnaHQ7XG4gICAgICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBicmllZiA6IExpbWl0cyBhIGZvcmNlIChmb3JjZVgsIGZvcmNlWSkgdG8gYmUgbm90XG4gICAqICAgICAgICAgIGdyZWF0ZXIgKGluIG1vZHVsbykgdGhhbiBtYXguXG4gICA4ICAgICAgICAgIFByZXNlcnZlcyBmb3JjZSBkaXJlY3Rpb24uXG4gICAgKi9cblxuXG4gIHZhciBsaW1pdEZvcmNlID0gZnVuY3Rpb24gbGltaXRGb3JjZShmb3JjZVgsIGZvcmNlWSwgbWF4KSB7XG4gICAgLy8gdmFyIHMgPSBcIkxpbWl0aW5nIGZvcmNlOiAoXCIgKyBmb3JjZVggKyBcIiwgXCIgKyBmb3JjZVkgKyBcIikuIE1heDogXCIgKyBtYXg7XG4gICAgdmFyIGZvcmNlID0gTWF0aC5zcXJ0KGZvcmNlWCAqIGZvcmNlWCArIGZvcmNlWSAqIGZvcmNlWSk7XG5cbiAgICBpZiAoZm9yY2UgPiBtYXgpIHtcbiAgICAgIHZhciByZXMgPSB7XG4gICAgICAgIHg6IG1heCAqIGZvcmNlWCAvIGZvcmNlLFxuICAgICAgICB5OiBtYXggKiBmb3JjZVkgLyBmb3JjZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlcyA9IHtcbiAgICAgICAgeDogZm9yY2VYLFxuICAgICAgICB5OiBmb3JjZVlcbiAgICAgIH07XG4gICAgfSAvLyBzICs9IFwiLlxcblJlc3VsdDogKFwiICsgcmVzLnggKyBcIiwgXCIgKyByZXMueSArIFwiKVwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuICAvKipcbiAgICogQGJyaWVmIDogRnVuY3Rpb24gdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBjb21wb3VuZCBub2RlXG4gICAqICAgICAgICAgIHNpemVzLCBzaW5jZSB0aGV5IHNob3VsZCBib3VuZCBhbGwgdGhlaXIgc3Vibm9kZXMuXG4gICAqL1xuXG5cbiAgdmFyIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyA9IGZ1bmN0aW9uIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhub2RlLCBsYXlvdXRJbmZvKSB7XG4gICAgLy8gdmFyIHMgPSBcIlByb3BhZ2F0aW5nIG5ldyBwb3NpdGlvbi9zaXplIG9mIG5vZGUgXCIgKyBub2RlLmlkO1xuICAgIHZhciBwYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG5cbiAgICBpZiAobnVsbCA9PSBwYXJlbnRJZCkge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlIGFyZSBkb25lXG4gICAgICAvLyBzICs9IFwiLiBObyBwYXJlbnQgbm9kZS5cIjtcbiAgICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2V0IFBhcmVudCBOb2RlXG5cblxuICAgIHZhciBwID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtwYXJlbnRJZF1dO1xuICAgIHZhciBmbGFnID0gZmFsc2U7IC8vIE1heFhcblxuICAgIGlmIChudWxsID09IHAubWF4WCB8fCBub2RlLm1heFggKyBwLnBhZFJpZ2h0ID4gcC5tYXhYKSB7XG4gICAgICBwLm1heFggPSBub2RlLm1heFggKyBwLnBhZFJpZ2h0O1xuICAgICAgZmxhZyA9IHRydWU7IC8vIHMgKz0gXCJcXG5OZXcgbWF4WCBmb3IgcGFyZW50IG5vZGUgXCIgKyBwLmlkICsgXCI6IFwiICsgcC5tYXhYO1xuICAgIH0gLy8gTWluWFxuXG5cbiAgICBpZiAobnVsbCA9PSBwLm1pblggfHwgbm9kZS5taW5YIC0gcC5wYWRMZWZ0IDwgcC5taW5YKSB7XG4gICAgICBwLm1pblggPSBub2RlLm1pblggLSBwLnBhZExlZnQ7XG4gICAgICBmbGFnID0gdHJ1ZTsgLy8gcyArPSBcIlxcbk5ldyBtaW5YIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1pblg7XG4gICAgfSAvLyBNYXhZXG5cblxuICAgIGlmIChudWxsID09IHAubWF4WSB8fCBub2RlLm1heFkgKyBwLnBhZEJvdHRvbSA+IHAubWF4WSkge1xuICAgICAgcC5tYXhZID0gbm9kZS5tYXhZICsgcC5wYWRCb3R0b207XG4gICAgICBmbGFnID0gdHJ1ZTsgLy8gcyArPSBcIlxcbk5ldyBtYXhZIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1heFk7XG4gICAgfSAvLyBNaW5ZXG5cblxuICAgIGlmIChudWxsID09IHAubWluWSB8fCBub2RlLm1pblkgLSBwLnBhZFRvcCA8IHAubWluWSkge1xuICAgICAgcC5taW5ZID0gbm9kZS5taW5ZIC0gcC5wYWRUb3A7XG4gICAgICBmbGFnID0gdHJ1ZTsgLy8gcyArPSBcIlxcbk5ldyBtaW5ZIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1pblk7XG4gICAgfSAvLyBJZiB1cGRhdGVkIGJvdW5kYXJpZXMsIHByb3BhZ2F0ZSBjaGFuZ2VzIHVwd2FyZFxuXG5cbiAgICBpZiAoZmxhZykge1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgICByZXR1cm4gdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzKHAsIGxheW91dEluZm8pO1xuICAgIH0gLy8gcyArPSBcIi4gTm8gY2hhbmdlcyBpbiBib3VuZGFyaWVzL3Bvc2l0aW9uIG9mIHBhcmVudCBub2RlIFwiICsgcC5pZDtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuXG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIHZhciBzZXBhcmF0ZUNvbXBvbmVudHMgPSBmdW5jdGlvbiBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICAgIHZhciBub2RlcyA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXM7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgY2lkID0gbm9kZS5jbXB0SWQ7XG4gICAgICB2YXIgY29tcG9uZW50ID0gY29tcG9uZW50c1tjaWRdID0gY29tcG9uZW50c1tjaWRdIHx8IFtdO1xuICAgICAgY29tcG9uZW50LnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsQSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY29tcG9uZW50c1tpXTtcblxuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjLngxID0gSW5maW5pdHk7XG4gICAgICBjLngyID0gLUluZmluaXR5O1xuICAgICAgYy55MSA9IEluZmluaXR5O1xuICAgICAgYy55MiA9IC1JbmZpbml0eTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBuID0gY1tqXTtcbiAgICAgICAgYy54MSA9IE1hdGgubWluKGMueDEsIG4ucG9zaXRpb25YIC0gbi53aWR0aCAvIDIpO1xuICAgICAgICBjLngyID0gTWF0aC5tYXgoYy54Miwgbi5wb3NpdGlvblggKyBuLndpZHRoIC8gMik7XG4gICAgICAgIGMueTEgPSBNYXRoLm1pbihjLnkxLCBuLnBvc2l0aW9uWSAtIG4uaGVpZ2h0IC8gMik7XG4gICAgICAgIGMueTIgPSBNYXRoLm1heChjLnkyLCBuLnBvc2l0aW9uWSArIG4uaGVpZ2h0IC8gMik7XG4gICAgICB9XG5cbiAgICAgIGMudyA9IGMueDIgLSBjLngxO1xuICAgICAgYy5oID0gYy55MiAtIGMueTE7XG4gICAgICB0b3RhbEEgKz0gYy53ICogYy5oO1xuICAgIH1cblxuICAgIGNvbXBvbmVudHMuc29ydChmdW5jdGlvbiAoYzEsIGMyKSB7XG4gICAgICByZXR1cm4gYzIudyAqIGMyLmggLSBjMS53ICogYzEuaDtcbiAgICB9KTtcbiAgICB2YXIgeCA9IDA7XG4gICAgdmFyIHkgPSAwO1xuICAgIHZhciB1c2VkVyA9IDA7XG4gICAgdmFyIHJvd0ggPSAwO1xuICAgIHZhciBtYXhSb3dXID0gTWF0aC5zcXJ0KHRvdGFsQSkgKiBsYXlvdXRJbmZvLmNsaWVudFdpZHRoIC8gbGF5b3V0SW5mby5jbGllbnRIZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY29tcG9uZW50c1tpXTtcblxuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG4gPSBjW2pdO1xuXG4gICAgICAgIGlmICghbi5pc0xvY2tlZCkge1xuICAgICAgICAgIG4ucG9zaXRpb25YICs9IHggLSBjLngxO1xuICAgICAgICAgIG4ucG9zaXRpb25ZICs9IHkgLSBjLnkxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHggKz0gYy53ICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgICAgdXNlZFcgKz0gYy53ICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgICAgcm93SCA9IE1hdGgubWF4KHJvd0gsIGMuaCk7XG5cbiAgICAgIGlmICh1c2VkVyA+IG1heFJvd1cpIHtcbiAgICAgICAgeSArPSByb3dIICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgICAgICB4ID0gMDtcbiAgICAgICAgdXNlZFcgPSAwO1xuICAgICAgICByb3dIID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlZmF1bHRzJDMgPSB7XG4gICAgZml0OiB0cnVlLFxuICAgIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgICBwYWRkaW5nOiAzMCxcbiAgICAvLyBwYWRkaW5nIHVzZWQgb24gZml0XG4gICAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gICAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggaWYgbm90IGVub3VnaCBzcGFjZVxuICAgIGF2b2lkT3ZlcmxhcFBhZGRpbmc6IDEwLFxuICAgIC8vIGV4dHJhIHNwYWNpbmcgYXJvdW5kIG5vZGVzIHdoZW4gYXZvaWRPdmVybGFwOiB0cnVlXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICAgIHNwYWNpbmdGYWN0b3I6IHVuZGVmaW5lZCxcbiAgICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICAgIGNvbmRlbnNlOiBmYWxzZSxcbiAgICAvLyB1c2VzIGFsbCBhdmFpbGFibGUgc3BhY2Ugb24gZmFsc2UsIHVzZXMgbWluaW1hbCBzcGFjZSBvbiB0cnVlXG4gICAgcm93czogdW5kZWZpbmVkLFxuICAgIC8vIGZvcmNlIG51bSBvZiByb3dzIGluIHRoZSBncmlkXG4gICAgY29sczogdW5kZWZpbmVkLFxuICAgIC8vIGZvcmNlIG51bSBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4gICAgcG9zaXRpb246IGZ1bmN0aW9uIHBvc2l0aW9uKG5vZGUpIHt9LFxuICAgIC8vIHJldHVybnMgeyByb3csIGNvbCB9IGZvciBlbGVtZW50XG4gICAgc29ydDogdW5kZWZpbmVkLFxuICAgIC8vIGEgc29ydGluZyBmdW5jdGlvbiB0byBvcmRlciB0aGUgbm9kZXM7IGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1zIGlmIGVuYWJsZWRcbiAgICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWRcbiAgICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICAgIHJlYWR5OiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0cmVhZHlcbiAgICBzdG9wOiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG5cbiAgfTtcblxuICBmdW5jdGlvbiBHcmlkTGF5b3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDMsIG9wdGlvbnMpO1xuICB9XG5cbiAgR3JpZExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJhbXMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gICAgdmFyIGN5ID0gcGFyYW1zLmN5O1xuICAgIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICAgIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcblxuICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICAgIHgxOiAwLFxuICAgICAgeTE6IDAsXG4gICAgICB3OiBjeS53aWR0aCgpLFxuICAgICAgaDogY3kuaGVpZ2h0KClcbiAgICB9KTtcblxuICAgIGlmIChiYi5oID09PSAwIHx8IGJiLncgPT09IDApIHtcbiAgICAgIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGJiLngxLFxuICAgICAgICAgIHk6IGJiLnkxXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd2lkdGgvaGVpZ2h0ICogc3BsaXRzXjIgPSBjZWxscyB3aGVyZSBzcGxpdHMgaXMgbnVtYmVyIG9mIHRpbWVzIHRvIHNwbGl0IHdpZHRoXG4gICAgICB2YXIgY2VsbHMgPSBub2Rlcy5zaXplKCk7XG4gICAgICB2YXIgc3BsaXRzID0gTWF0aC5zcXJ0KGNlbGxzICogYmIuaCAvIGJiLncpO1xuICAgICAgdmFyIHJvd3MgPSBNYXRoLnJvdW5kKHNwbGl0cyk7XG4gICAgICB2YXIgY29scyA9IE1hdGgucm91bmQoYmIudyAvIGJiLmggKiBzcGxpdHMpO1xuXG4gICAgICB2YXIgc21hbGwgPSBmdW5jdGlvbiBzbWFsbCh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgubWluKHJvd3MsIGNvbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyb3dzLCBjb2xzKTtcblxuICAgICAgICAgIGlmIChtaW4gPT0gcm93cykge1xuICAgICAgICAgICAgcm93cyA9IHZhbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29scyA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBsYXJnZSA9IGZ1bmN0aW9uIGxhcmdlKHZhbCkge1xuICAgICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgocm93cywgY29scyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuXG4gICAgICAgICAgaWYgKG1heCA9PSByb3dzKSB7XG4gICAgICAgICAgICByb3dzID0gdmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xzID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIG9Sb3dzID0gb3B0aW9ucy5yb3dzO1xuICAgICAgdmFyIG9Db2xzID0gb3B0aW9ucy5jb2xzICE9IG51bGwgPyBvcHRpb25zLmNvbHMgOiBvcHRpb25zLmNvbHVtbnM7IC8vIGlmIHJvd3Mgb3IgY29sdW1ucyB3ZXJlIHNldCBpbiBvcHRpb25zLCB1c2UgdGhvc2UgdmFsdWVzXG5cbiAgICAgIGlmIChvUm93cyAhPSBudWxsICYmIG9Db2xzICE9IG51bGwpIHtcbiAgICAgICAgcm93cyA9IG9Sb3dzO1xuICAgICAgICBjb2xzID0gb0NvbHM7XG4gICAgICB9IGVsc2UgaWYgKG9Sb3dzICE9IG51bGwgJiYgb0NvbHMgPT0gbnVsbCkge1xuICAgICAgICByb3dzID0gb1Jvd3M7XG4gICAgICAgIGNvbHMgPSBNYXRoLmNlaWwoY2VsbHMgLyByb3dzKTtcbiAgICAgIH0gZWxzZSBpZiAob1Jvd3MgPT0gbnVsbCAmJiBvQ29scyAhPSBudWxsKSB7XG4gICAgICAgIGNvbHMgPSBvQ29scztcbiAgICAgICAgcm93cyA9IE1hdGguY2VpbChjZWxscyAvIGNvbHMpO1xuICAgICAgfSAvLyBvdGhlcndpc2UgdXNlIHRoZSBhdXRvbWF0aWMgdmFsdWVzIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgIC8vIGlmIHJvdW5kaW5nIHdhcyB1cCwgc2VlIGlmIHdlIGNhbiByZWR1Y2Ugcm93cyBvciBjb2x1bW5zXG4gICAgICBlbHNlIGlmIChjb2xzICogcm93cyA+IGNlbGxzKSB7XG4gICAgICAgIHZhciBzbSA9IHNtYWxsKCk7XG4gICAgICAgIHZhciBsZyA9IGxhcmdlKCk7IC8vIHJlZHVjaW5nIHRoZSBzbWFsbCBzaWRlIHRha2VzIGF3YXkgdGhlIG1vc3QgY2VsbHMsIHNvIHRyeSBpdCBmaXJzdFxuXG4gICAgICAgIGlmICgoc20gLSAxKSAqIGxnID49IGNlbGxzKSB7XG4gICAgICAgICAgc21hbGwoc20gLSAxKTtcbiAgICAgICAgfSBlbHNlIGlmICgobGcgLSAxKSAqIHNtID49IGNlbGxzKSB7XG4gICAgICAgICAgbGFyZ2UobGcgLSAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgcm91bmRpbmcgd2FzIHRvbyBsb3csIGFkZCByb3dzIG9yIGNvbHVtbnNcbiAgICAgICAgd2hpbGUgKGNvbHMgKiByb3dzIDwgY2VsbHMpIHtcbiAgICAgICAgICB2YXIgX3NtID0gc21hbGwoKTtcblxuICAgICAgICAgIHZhciBfbGcgPSBsYXJnZSgpOyAvLyB0cnkgdG8gYWRkIHRvIGxhcmdlciBzaWRlIGZpcnN0IChhZGRzIGxlc3MgaW4gbXVsdGlwbGljYXRpb24pXG5cblxuICAgICAgICAgIGlmICgoX2xnICsgMSkgKiBfc20gPj0gY2VsbHMpIHtcbiAgICAgICAgICAgIGxhcmdlKF9sZyArIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbWFsbChfc20gKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNlbGxXaWR0aCA9IGJiLncgLyBjb2xzO1xuICAgICAgdmFyIGNlbGxIZWlnaHQgPSBiYi5oIC8gcm93cztcblxuICAgICAgaWYgKG9wdGlvbnMuY29uZGVuc2UpIHtcbiAgICAgICAgY2VsbFdpZHRoID0gMDtcbiAgICAgICAgY2VsbEhlaWdodCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICB2YXIgcG9zID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbjtcblxuICAgICAgICAgIGlmIChwb3MueCA9PSBudWxsIHx8IHBvcy55ID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGZvciBiYlxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuYmIgPSBub2RlLmxheW91dERpbWVuc2lvbnMob3B0aW9ucyk7XG4gICAgICAgICAgdmFyIHAgPSBvcHRpb25zLmF2b2lkT3ZlcmxhcFBhZGRpbmc7XG4gICAgICAgICAgdmFyIHcgPSBuYmIudyArIHA7XG4gICAgICAgICAgdmFyIGggPSBuYmIuaCArIHA7XG4gICAgICAgICAgY2VsbFdpZHRoID0gTWF0aC5tYXgoY2VsbFdpZHRoLCB3KTtcbiAgICAgICAgICBjZWxsSGVpZ2h0ID0gTWF0aC5tYXgoY2VsbEhlaWdodCwgaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNlbGxVc2VkID0ge307IC8vIGUuZy4gJ2MtMC0yJyA9PiB0cnVlXG5cbiAgICAgIHZhciB1c2VkID0gZnVuY3Rpb24gdXNlZChyb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gY2VsbFVzZWRbJ2MtJyArIHJvdyArICctJyArIGNvbF0gPyB0cnVlIDogZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICB2YXIgdXNlID0gZnVuY3Rpb24gdXNlKHJvdywgY29sKSB7XG4gICAgICAgIGNlbGxVc2VkWydjLScgKyByb3cgKyAnLScgKyBjb2xdID0gdHJ1ZTtcbiAgICAgIH07IC8vIHRvIGtlZXAgdHJhY2sgb2YgY3VycmVudCBjZWxsIHBvc2l0aW9uXG5cblxuICAgICAgdmFyIHJvdyA9IDA7XG4gICAgICB2YXIgY29sID0gMDtcblxuICAgICAgdmFyIG1vdmVUb05leHRDZWxsID0gZnVuY3Rpb24gbW92ZVRvTmV4dENlbGwoKSB7XG4gICAgICAgIGNvbCsrO1xuXG4gICAgICAgIGlmIChjb2wgPj0gY29scykge1xuICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgcm93Kys7XG4gICAgICAgIH1cbiAgICAgIH07IC8vIGdldCBhIGNhY2hlIG9mIGFsbCB0aGUgbWFudWFsIHBvc2l0aW9uc1xuXG5cbiAgICAgIHZhciBpZDJtYW5Qb3MgPSB7fTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG5vZGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG4gICAgICAgIHZhciByY1BvcyA9IG9wdGlvbnMucG9zaXRpb24oX25vZGUpO1xuXG4gICAgICAgIGlmIChyY1BvcyAmJiAocmNQb3Mucm93ICE9PSB1bmRlZmluZWQgfHwgcmNQb3MuY29sICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IHJvdyBvciBjb2wgZGVmJ2RcbiAgICAgICAgICB2YXIgX3BvcyA9IHtcbiAgICAgICAgICAgIHJvdzogcmNQb3Mucm93LFxuICAgICAgICAgICAgY29sOiByY1Bvcy5jb2xcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKF9wb3MuY29sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGZpbmQgdW51c2VkIGNvbFxuICAgICAgICAgICAgX3Bvcy5jb2wgPSAwO1xuXG4gICAgICAgICAgICB3aGlsZSAodXNlZChfcG9zLnJvdywgX3Bvcy5jb2wpKSB7XG4gICAgICAgICAgICAgIF9wb3MuY29sKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChfcG9zLnJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBmaW5kIHVudXNlZCByb3dcbiAgICAgICAgICAgIF9wb3Mucm93ID0gMDtcblxuICAgICAgICAgICAgd2hpbGUgKHVzZWQoX3Bvcy5yb3csIF9wb3MuY29sKSkge1xuICAgICAgICAgICAgICBfcG9zLnJvdysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlkMm1hblBvc1tfbm9kZS5pZCgpXSA9IF9wb3M7XG4gICAgICAgICAgdXNlKF9wb3Mucm93LCBfcG9zLmNvbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGdldFBvcyA9IGZ1bmN0aW9uIGdldFBvcyhlbGVtZW50LCBpKSB7XG4gICAgICAgIHZhciB4LCB5O1xuXG4gICAgICAgIGlmIChlbGVtZW50LmxvY2tlZCgpIHx8IGVsZW1lbnQuaXNQYXJlbnQoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSAvLyBzZWUgaWYgd2UgaGF2ZSBhIG1hbnVhbCBwb3NpdGlvbiBzZXRcblxuXG4gICAgICAgIHZhciByY1BvcyA9IGlkMm1hblBvc1tlbGVtZW50LmlkKCldO1xuXG4gICAgICAgIGlmIChyY1Bvcykge1xuICAgICAgICAgIHggPSByY1Bvcy5jb2wgKiBjZWxsV2lkdGggKyBjZWxsV2lkdGggLyAyICsgYmIueDE7XG4gICAgICAgICAgeSA9IHJjUG9zLnJvdyAqIGNlbGxIZWlnaHQgKyBjZWxsSGVpZ2h0IC8gMiArIGJiLnkxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgYXV0b21hdGljYWxseVxuICAgICAgICAgIHdoaWxlICh1c2VkKHJvdywgY29sKSkge1xuICAgICAgICAgICAgbW92ZVRvTmV4dENlbGwoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4ID0gY29sICogY2VsbFdpZHRoICsgY2VsbFdpZHRoIC8gMiArIGJiLngxO1xuICAgICAgICAgIHkgPSByb3cgKiBjZWxsSGVpZ2h0ICsgY2VsbEhlaWdodCAvIDIgKyBiYi55MTtcbiAgICAgICAgICB1c2Uocm93LCBjb2wpO1xuICAgICAgICAgIG1vdmVUb05leHRDZWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgbm9kZXMubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07XG5cbiAgdmFyIGRlZmF1bHRzJDIgPSB7XG4gICAgcmVhZHk6IGZ1bmN0aW9uIHJlYWR5KCkge30sXG4gICAgLy8gb24gbGF5b3V0cmVhZHlcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxuXG4gIH07IC8vIGNvbnN0cnVjdG9yXG4gIC8vIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuXG4gIGZ1bmN0aW9uIE51bGxMYXlvdXQob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMiwgb3B0aW9ucyk7XG4gIH0gLy8gcnVucyB0aGUgbGF5b3V0XG5cblxuICBOdWxsTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIGVsZW1lbnRzIHRvIGNvbnNpZGVyIGluIHRoZSBsYXlvdXRcblxuICAgIHZhciBsYXlvdXQgPSB0aGlzOyAvLyBjeSBpcyBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlZCBmb3IgdXMgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAgLy8gKGRpc2FibGUgZXNsaW50IGZvciBuZXh0IGxpbmUgYXMgdGhpcyBzZXJ2ZXMgYXMgZXhhbXBsZSBsYXlvdXQgY29kZSB0byBleHRlcm5hbCBkZXZlbG9wZXJzKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gICAgb3B0aW9ucy5jeTtcbiAgICBsYXlvdXQuZW1pdCgnbGF5b3V0c3RhcnQnKTsgLy8gcHV0cyBhbGwgbm9kZXMgYXQgKDAsIDApXG4gICAgLy8gbi5iLiBtb3N0IGxheW91dHMgd291bGQgdXNlIGxheW91dFBvc2l0aW9ucygpLCBpbnN0ZWFkIG9mIHBvc2l0aW9ucygpIGFuZCBtYW51YWwgZXZlbnRzXG5cbiAgICBlbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH07XG4gICAgfSk7IC8vIHRyaWdnZXIgbGF5b3V0cmVhZHkgd2hlbiBlYWNoIG5vZGUgaGFzIGhhZCBpdHMgcG9zaXRpb24gc2V0IGF0IGxlYXN0IG9uY2VcblxuICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgbGF5b3V0LmVtaXQoJ2xheW91dHJlYWR5Jyk7IC8vIHRyaWdnZXIgbGF5b3V0c3RvcCB3aGVuIHRoZSBsYXlvdXQgc3RvcHMgKGUuZy4gZmluaXNoZXMpXG5cbiAgICBsYXlvdXQub25lKCdsYXlvdXRzdG9wJywgb3B0aW9ucy5zdG9wKTtcbiAgICBsYXlvdXQuZW1pdCgnbGF5b3V0c3RvcCcpO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9OyAvLyBjYWxsZWQgb24gY29udGludW91cyBsYXlvdXRzIHRvIHN0b3AgdGhlbSBiZWZvcmUgdGhleSBmaW5pc2hcblxuXG4gIE51bGxMYXlvdXQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07XG5cbiAgdmFyIGRlZmF1bHRzJDEgPSB7XG4gICAgcG9zaXRpb25zOiB1bmRlZmluZWQsXG4gICAgLy8gbWFwIG9mIChub2RlIGlkKSA9PiAocG9zaXRpb24gb2JqKTsgb3IgZnVuY3Rpb24obm9kZSl7IHJldHVybiBzb21Qb3M7IH1cbiAgICB6b29tOiB1bmRlZmluZWQsXG4gICAgLy8gdGhlIHpvb20gbGV2ZWwgdG8gc2V0IChwcm9iIHdhbnQgZml0ID0gZmFsc2UgaWYgc2V0KVxuICAgIHBhbjogdW5kZWZpbmVkLFxuICAgIC8vIHRoZSBwYW4gbGV2ZWwgdG8gc2V0IChwcm9iIHdhbnQgZml0ID0gZmFsc2UgaWYgc2V0KVxuICAgIGZpdDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIHRvIGZpdCB0byB2aWV3cG9ydFxuICAgIHBhZGRpbmc6IDMwLFxuICAgIC8vIHBhZGRpbmcgb24gZml0XG4gICAgYW5pbWF0ZTogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1zIGlmIGVuYWJsZWRcbiAgICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWRcbiAgICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICAgIHJlYWR5OiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0cmVhZHlcbiAgICBzdG9wOiB1bmRlZmluZWQsXG4gICAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcblxuICB9O1xuXG4gIGZ1bmN0aW9uIFByZXNldExheW91dChvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQxLCBvcHRpb25zKTtcbiAgfVxuXG4gIFByZXNldExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICAgIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKTtcbiAgICB2YXIgcG9zSXNGbiA9IGZuJDYob3B0aW9ucy5wb3NpdGlvbnMpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UG9zaXRpb24obm9kZSkge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb25zID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlQb3NpdGlvbihub2RlLnBvc2l0aW9uKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9zSXNGbikge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wb3NpdGlvbnMobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3MgPSBvcHRpb25zLnBvc2l0aW9uc1tub2RlLl9wcml2YXRlLmRhdGEuaWRdO1xuXG4gICAgICBpZiAocG9zID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuXG4gICAgbm9kZXMubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihub2RlKTtcblxuICAgICAgaWYgKG5vZGUubG9ja2VkKCkgfHwgcG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfTtcblxuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgZml0OiB0cnVlLFxuICAgIC8vIHdoZXRoZXIgdG8gZml0IHRvIHZpZXdwb3J0XG4gICAgcGFkZGluZzogMzAsXG4gICAgLy8gZml0IHBhZGRpbmdcbiAgICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAgIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICAgIGFuaW1hdGU6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdG8gdHJhbnNpdGlvbiB0aGUgbm9kZSBwb3NpdGlvbnNcbiAgICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAgIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtcyBpZiBlbmFibGVkXG4gICAgYW5pbWF0aW9uRWFzaW5nOiB1bmRlZmluZWQsXG4gICAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gICAgYW5pbWF0ZUZpbHRlcjogZnVuY3Rpb24gYW5pbWF0ZUZpbHRlcihub2RlLCBpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8vIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGFuaW1hdGVkLiAgQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkLiAgTm9uLWFuaW1hdGVkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGxheW91dCBzdGFydHNcbiAgICByZWFkeTogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gICAgc3RvcDogdW5kZWZpbmVkLFxuICAgIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzIFxuXG4gIH07XG5cbiAgZnVuY3Rpb24gUmFuZG9tTGF5b3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIFJhbmRvbUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBjeSA9IG9wdGlvbnMuY3k7XG4gICAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHc6IGN5LndpZHRoKCksXG4gICAgICBoOiBjeS5oZWlnaHQoKVxuICAgIH0pO1xuXG4gICAgdmFyIGdldFBvcyA9IGZ1bmN0aW9uIGdldFBvcyhub2RlLCBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBiYi54MSArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGJiLncpLFxuICAgICAgICB5OiBiYi55MSArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGJiLmgpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH07XG5cbiAgdmFyIGxheW91dCA9IFt7XG4gICAgbmFtZTogJ2JyZWFkdGhmaXJzdCcsXG4gICAgaW1wbDogQnJlYWR0aEZpcnN0TGF5b3V0XG4gIH0sIHtcbiAgICBuYW1lOiAnY2lyY2xlJyxcbiAgICBpbXBsOiBDaXJjbGVMYXlvdXRcbiAgfSwge1xuICAgIG5hbWU6ICdjb25jZW50cmljJyxcbiAgICBpbXBsOiBDb25jZW50cmljTGF5b3V0XG4gIH0sIHtcbiAgICBuYW1lOiAnY29zZScsXG4gICAgaW1wbDogQ29zZUxheW91dFxuICB9LCB7XG4gICAgbmFtZTogJ2dyaWQnLFxuICAgIGltcGw6IEdyaWRMYXlvdXRcbiAgfSwge1xuICAgIG5hbWU6ICdudWxsJyxcbiAgICBpbXBsOiBOdWxsTGF5b3V0XG4gIH0sIHtcbiAgICBuYW1lOiAncHJlc2V0JyxcbiAgICBpbXBsOiBQcmVzZXRMYXlvdXRcbiAgfSwge1xuICAgIG5hbWU6ICdyYW5kb20nLFxuICAgIGltcGw6IFJhbmRvbUxheW91dFxuICB9XTtcblxuICBmdW5jdGlvbiBOdWxsUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zID0gMDsgLy8gZm9yIHRlc3RpbmdcbiAgfVxuXG4gIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4gIHZhciB0aHJvd0ltZ0VyciA9IGZ1bmN0aW9uIHRocm93SW1nRXJyKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBoZWFkbGVzcyBpbnN0YW5jZSBjYW4gbm90IHJlbmRlciBpbWFnZXMnKTtcbiAgfTtcblxuICBOdWxsUmVuZGVyZXIucHJvdG90eXBlID0ge1xuICAgIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogbm9vcCxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucysrO1xuICAgIH0sXG4gICAgaW5pdDogbm9vcCxcbiAgICBpc0hlYWRsZXNzOiBmdW5jdGlvbiBpc0hlYWRsZXNzKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBwbmc6IHRocm93SW1nRXJyLFxuICAgIGpwZzogdGhyb3dJbWdFcnJcbiAgfTtcblxuICB2YXIgQlJwJGYgPSB7fTtcbiAgQlJwJGYuYXJyb3dTaGFwZVdpZHRoID0gMC4zO1xuXG4gIEJScCRmLnJlZ2lzdGVyQXJyb3dTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycm93U2hhcGVzID0gdGhpcy5hcnJvd1NoYXBlcyA9IHt9O1xuICAgIHZhciByZW5kZXJlciA9IHRoaXM7IC8vIENvbnRyYWN0IGZvciBhcnJvdyBzaGFwZXM6XG4gICAgLy8gMCwgMCBpcyBhcnJvdyB0aXBcbiAgICAvLyAoMCwgMSkgaXMgZGlyZWN0aW9uIHRvd2FyZHMgbm9kZVxuICAgIC8vICgxLCAwKSBpcyByaWdodFxuICAgIC8vXG4gICAgLy8gZnVuY3Rpb25hbCBhcGk6XG4gICAgLy8gY29sbGlkZTogY2hlY2sgeCwgeSBpbiBzaGFwZVxuICAgIC8vIHJvdWdoQ29sbGlkZTogY2FsbGVkIGJlZm9yZSBjb2xsaWRlLCBubyBmYWxzZSBuZWdhdGl2ZXNcbiAgICAvLyBkcmF3OiBkcmF3XG4gICAgLy8gc3BhY2luZzogZGlzdChhcnJvd1RpcCwgbm9kZUJvdW5kYXJ5KVxuICAgIC8vIGdhcDogZGlzdChlZGdlVGlwLCBub2RlQm91bmRhcnkpLCBlZGdlVGlwIG1heSAhPSBhcnJvd1RpcFxuXG4gICAgdmFyIGJiQ29sbGlkZSA9IGZ1bmN0aW9uIGJiQ29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCwgcGFkZGluZykge1xuICAgICAgdmFyIHgxID0gdHJhbnNsYXRpb24ueCAtIHNpemUgLyAyIC0gcGFkZGluZztcbiAgICAgIHZhciB4MiA9IHRyYW5zbGF0aW9uLnggKyBzaXplIC8gMiArIHBhZGRpbmc7XG4gICAgICB2YXIgeTEgPSB0cmFuc2xhdGlvbi55IC0gc2l6ZSAvIDIgLSBwYWRkaW5nO1xuICAgICAgdmFyIHkyID0gdHJhbnNsYXRpb24ueSArIHNpemUgLyAyICsgcGFkZGluZztcbiAgICAgIHZhciBpbnNpZGUgPSB4MSA8PSB4ICYmIHggPD0geDIgJiYgeTEgPD0geSAmJiB5IDw9IHkyO1xuICAgICAgcmV0dXJuIGluc2lkZTtcbiAgICB9O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pIHtcbiAgICAgIHZhciB4Um90YXRlZCA9IHggKiBNYXRoLmNvcyhhbmdsZSkgLSB5ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgdmFyIHlSb3RhdGVkID0geCAqIE1hdGguc2luKGFuZ2xlKSArIHkgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICB2YXIgeFNjYWxlZCA9IHhSb3RhdGVkICogc2l6ZTtcbiAgICAgIHZhciB5U2NhbGVkID0geVJvdGF0ZWQgKiBzaXplO1xuICAgICAgdmFyIHhUcmFuc2xhdGVkID0geFNjYWxlZCArIHRyYW5zbGF0aW9uLng7XG4gICAgICB2YXIgeVRyYW5zbGF0ZWQgPSB5U2NhbGVkICsgdHJhbnNsYXRpb24ueTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHhUcmFuc2xhdGVkLFxuICAgICAgICB5OiB5VHJhbnNsYXRlZFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIHRyYW5zZm9ybVBvaW50cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50cyhwdHMsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgICAgdmFyIHJldFB0cyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgeCA9IHB0c1tpXTtcbiAgICAgICAgdmFyIHkgPSBwdHNbaSArIDFdO1xuICAgICAgICByZXRQdHMucHVzaCh0cmFuc2Zvcm0oeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXRQdHM7XG4gICAgfTtcblxuICAgIHZhciBwb2ludHNUb0FyciA9IGZ1bmN0aW9uIHBvaW50c1RvQXJyKHB0cykge1xuICAgICAgdmFyIHJldCA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcCA9IHB0c1tpXTtcbiAgICAgICAgcmV0LnB1c2gocC54LCBwLnkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH07XG5cbiAgICB2YXIgc3RhbmRhcmRHYXAgPSBmdW5jdGlvbiBzdGFuZGFyZEdhcChlZGdlKSB7XG4gICAgICByZXR1cm4gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnBmVmFsdWUgKiAyO1xuICAgIH07XG5cbiAgICB2YXIgZGVmaW5lQXJyb3dTaGFwZSA9IGZ1bmN0aW9uIGRlZmluZUFycm93U2hhcGUobmFtZSwgZGVmbikge1xuICAgICAgaWYgKHN0cmluZyhkZWZuKSkge1xuICAgICAgICBkZWZuID0gYXJyb3dTaGFwZXNbZGVmbl07XG4gICAgICB9XG5cbiAgICAgIGFycm93U2hhcGVzW25hbWVdID0gZXh0ZW5kKHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcG9pbnRzOiBbLTAuMTUsIC0wLjMsIDAuMTUsIC0wLjMsIDAuMTUsIDAuMywgLTAuMTUsIDAuM10sXG4gICAgICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBwYWRkaW5nKSB7XG4gICAgICAgICAgdmFyIHBvaW50cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgICAgICB2YXIgaW5zaWRlID0gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHBvaW50cyk7XG4gICAgICAgICAgcmV0dXJuIGluc2lkZTtcbiAgICAgICAgfSxcbiAgICAgICAgcm91Z2hDb2xsaWRlOiBiYkNvbGxpZGUsXG4gICAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgdmFyIHBvaW50cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgICByZW5kZXJlci5hcnJvd1NoYXBlSW1wbCgncG9seWdvbicpKGNvbnRleHQsIHBvaW50cyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9LFxuICAgICAgICBnYXA6IHN0YW5kYXJkR2FwXG4gICAgICB9LCBkZWZuKTtcbiAgICB9O1xuXG4gICAgZGVmaW5lQXJyb3dTaGFwZSgnbm9uZScsIHtcbiAgICAgIGNvbGxpZGU6IGZhbHNpZnksXG4gICAgICByb3VnaENvbGxpZGU6IGZhbHNpZnksXG4gICAgICBkcmF3OiBub29wJDEsXG4gICAgICBzcGFjaW5nOiB6ZXJvaWZ5LFxuICAgICAgZ2FwOiB6ZXJvaWZ5XG4gICAgfSk7XG4gICAgZGVmaW5lQXJyb3dTaGFwZSgndHJpYW5nbGUnLCB7XG4gICAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuM11cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCdhcnJvdycsICd0cmlhbmdsZScpO1xuICAgIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWJhY2tjdXJ2ZScsIHtcbiAgICAgIHBvaW50czogYXJyb3dTaGFwZXNbJ3RyaWFuZ2xlJ10ucG9pbnRzLFxuICAgICAgY29udHJvbFBvaW50OiBbMCwgLTAuMTVdLFxuICAgICAgcm91Z2hDb2xsaWRlOiBiYkNvbGxpZGUsXG4gICAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoKSB7XG4gICAgICAgIHZhciBwdHNUcmFucyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgdmFyIGN0cmxQdCA9IHRoaXMuY29udHJvbFBvaW50O1xuICAgICAgICB2YXIgY3RybFB0VHJhbnMgPSB0cmFuc2Zvcm0oY3RybFB0WzBdLCBjdHJsUHRbMV0sIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbik7XG4gICAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgcHRzVHJhbnMsIGN0cmxQdFRyYW5zKTtcbiAgICAgIH0sXG4gICAgICBnYXA6IGZ1bmN0aW9uIGdhcChlZGdlKSB7XG4gICAgICAgIHJldHVybiBzdGFuZGFyZEdhcChlZGdlKSAqIDAuODtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCd0cmlhbmdsZS10ZWUnLCB7XG4gICAgICBwb2ludHM6IFswLCAwLCAwLjE1LCAtMC4zLCAtMC4xNSwgLTAuMywgMCwgMF0sXG4gICAgICBwb2ludHNUZWU6IFstMC4xNSwgLTAuNCwgLTAuMTUsIC0wLjUsIDAuMTUsIC0wLjUsIDAuMTUsIC0wLjRdLFxuICAgICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCwgcGFkZGluZykge1xuICAgICAgICB2YXIgdHJpUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgICB2YXIgdGVlUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzVGVlLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgICB2YXIgaW5zaWRlID0gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRlZVB0cyk7XG4gICAgICAgIHJldHVybiBpbnNpZGU7XG4gICAgICB9LFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgICB2YXIgdHJpUHRzID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgICB2YXIgdGVlUHRzID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzVGVlLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgICByZW5kZXJlci5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGNvbnRleHQsIHRyaVB0cywgdGVlUHRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCdjaXJjbGUtdHJpYW5nbGUnLCB7XG4gICAgICByYWRpdXM6IDAuMTUsXG4gICAgICBwb2ludHNUcjogWzAsIC0wLjE1LCAwLjE1LCAtMC40NSwgLTAuMTUsIC0wLjQ1LCAwLCAtMC4xNV0sXG4gICAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICAgIHZhciB0ID0gdHJhbnNsYXRpb247XG4gICAgICAgIHZhciBjaXJjbGVJbnNpZGUgPSBNYXRoLnBvdyh0LnggLSB4LCAyKSArIE1hdGgucG93KHQueSAtIHksIDIpIDw9IE1hdGgucG93KChzaXplICsgMiAqIHBhZGRpbmcpICogdGhpcy5yYWRpdXMsIDIpO1xuICAgICAgICB2YXIgdHJpUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgICByZXR1cm4gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgY2lyY2xlSW5zaWRlO1xuICAgICAgfSxcbiAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RyLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgICByZW5kZXJlci5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGNvbnRleHQsIHRyaVB0cywgdHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSwgdGhpcy5yYWRpdXMgKiBzaXplKTtcbiAgICAgIH0sXG4gICAgICBzcGFjaW5nOiBmdW5jdGlvbiBzcGFjaW5nKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5yYWRpdXM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVmaW5lQXJyb3dTaGFwZSgndHJpYW5nbGUtY3Jvc3MnLCB7XG4gICAgICBwb2ludHM6IFswLCAwLCAwLjE1LCAtMC4zLCAtMC4xNSwgLTAuMywgMCwgMF0sXG4gICAgICBiYXNlQ3Jvc3NMaW5lUHRzOiBbLTAuMTUsIC0wLjQsIC8vIGZpcnN0IGhhbGYgb2YgdGhlIHJlY3RhbmdsZVxuICAgICAgLTAuMTUsIC0wLjQsIDAuMTUsIC0wLjQsIC8vIHNlY29uZCBoYWxmIG9mIHRoZSByZWN0YW5nbGVcbiAgICAgIDAuMTUsIC0wLjRdLFxuICAgICAgY3Jvc3NMaW5lUHRzOiBmdW5jdGlvbiBjcm9zc0xpbmVQdHMoc2l6ZSwgZWRnZVdpZHRoKSB7XG4gICAgICAgIC8vIHNoaWZ0IHBvaW50cyBzbyB0aGF0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjcm9zcyBwb2ludHMgbWF0Y2hlcyBlZGdlIHdpZHRoXG4gICAgICAgIHZhciBwID0gdGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCk7XG4gICAgICAgIHZhciBzaGlmdEZhY3RvciA9IGVkZ2VXaWR0aCAvIHNpemU7XG4gICAgICAgIHZhciB5MCA9IDM7XG4gICAgICAgIHZhciB5MSA9IDU7XG4gICAgICAgIHBbeTBdID0gcFt5MF0gLSBzaGlmdEZhY3RvcjtcbiAgICAgICAgcFt5MV0gPSBwW3kxXSAtIHNoaWZ0RmFjdG9yO1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH0sXG4gICAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICAgIHZhciB0ZWVQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5jcm9zc0xpbmVQdHMoc2l6ZSwgZWRnZVdpZHRoKSwgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgICAgdmFyIGluc2lkZSA9IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCB0cmlQdHMpIHx8IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCB0ZWVQdHMpO1xuICAgICAgICByZXR1cm4gaW5zaWRlO1xuICAgICAgfSxcbiAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgdmFyIGNyb3NzTGluZVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLmNyb3NzTGluZVB0cyhzaXplLCBlZGdlV2lkdGgpLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgICByZW5kZXJlci5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGNvbnRleHQsIHRyaVB0cywgY3Jvc3NMaW5lUHRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCd2ZWUnLCB7XG4gICAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuMywgMCwgLTAuMTVdLFxuICAgICAgZ2FwOiBmdW5jdGlvbiBnYXAoZWRnZSkge1xuICAgICAgICByZXR1cm4gc3RhbmRhcmRHYXAoZWRnZSkgKiAwLjUyNTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCdjaXJjbGUnLCB7XG4gICAgICByYWRpdXM6IDAuMTUsXG4gICAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICAgIHZhciB0ID0gdHJhbnNsYXRpb247XG4gICAgICAgIHZhciBpbnNpZGUgPSBNYXRoLnBvdyh0LnggLSB4LCAyKSArIE1hdGgucG93KHQueSAtIHksIDIpIDw9IE1hdGgucG93KChzaXplICsgMiAqIHBhZGRpbmcpICogdGhpcy5yYWRpdXMsIDIpO1xuICAgICAgICByZXR1cm4gaW5zaWRlO1xuICAgICAgfSxcbiAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCB0cmFuc2xhdGlvbi54LCB0cmFuc2xhdGlvbi55LCB0aGlzLnJhZGl1cyAqIHNpemUpO1xuICAgICAgfSxcbiAgICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0QXJyb3dXaWR0aChlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlLCBlZGdlLnBzdHlsZSgnYXJyb3ctc2NhbGUnKS52YWx1ZSkgKiB0aGlzLnJhZGl1cztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCd0ZWUnLCB7XG4gICAgICBwb2ludHM6IFstMC4xNSwgMCwgLTAuMTUsIC0wLjEsIDAuMTUsIC0wLjEsIDAuMTUsIDBdLFxuICAgICAgc3BhY2luZzogZnVuY3Rpb24gc3BhY2luZyhlZGdlKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSxcbiAgICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVmaW5lQXJyb3dTaGFwZSgnc3F1YXJlJywge1xuICAgICAgcG9pbnRzOiBbLTAuMTUsIDAuMDAsIDAuMTUsIDAuMDAsIDAuMTUsIC0wLjMsIC0wLjE1LCAtMC4zXVxuICAgIH0pO1xuICAgIGRlZmluZUFycm93U2hhcGUoJ2RpYW1vbmQnLCB7XG4gICAgICBwb2ludHM6IFstMC4xNSwgLTAuMTUsIDAsIC0wLjMsIDAuMTUsIC0wLjE1LCAwLCAwXSxcbiAgICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUgKiBlZGdlLnBzdHlsZSgnYXJyb3ctc2NhbGUnKS52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVBcnJvd1NoYXBlKCdjaGV2cm9uJywge1xuICAgICAgcG9pbnRzOiBbMCwgMCwgLTAuMTUsIC0wLjE1LCAtMC4xLCAtMC4yLCAwLCAtMC4xLCAwLjEsIC0wLjIsIDAuMTUsIC0wLjE1XSxcbiAgICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIDAuOTUgKiBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlICogZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIEJScCRlID0ge307IC8vIFByb2plY3QgbW91c2VcblxuICBCUnAkZS5wcm9qZWN0SW50b1ZpZXdwb3J0ID0gZnVuY3Rpb24gKGNsaWVudFgsIGNsaWVudFkpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5O1xuICAgIHZhciBvZmZzZXRzID0gdGhpcy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gICAgdmFyIG9mZnNldExlZnQgPSBvZmZzZXRzWzBdO1xuICAgIHZhciBvZmZzZXRUb3AgPSBvZmZzZXRzWzFdO1xuICAgIHZhciBzY2FsZSA9IG9mZnNldHNbNF07XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciB4ID0gKChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgLyBzY2FsZSAtIHBhbi54KSAvIHpvb207XG4gICAgdmFyIHkgPSAoKGNsaWVudFkgLSBvZmZzZXRUb3ApIC8gc2NhbGUgLSBwYW4ueSkgLyB6b29tO1xuICAgIHJldHVybiBbeCwgeV07XG4gIH07XG5cbiAgQlJwJGUuZmluZENvbnRhaW5lckNsaWVudENvb3JkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jb250YWluZXJCQikge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyQkI7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xuICAgIHZhciByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBzdHlsZSA9IHRoaXMuY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBmdW5jdGlvbiBzdHlsZVZhbHVlKG5hbWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICAgIH07XG5cbiAgICB2YXIgcGFkZGluZyA9IHtcbiAgICAgIGxlZnQ6IHN0eWxlVmFsdWUoJ3BhZGRpbmctbGVmdCcpLFxuICAgICAgcmlnaHQ6IHN0eWxlVmFsdWUoJ3BhZGRpbmctcmlnaHQnKSxcbiAgICAgIHRvcDogc3R5bGVWYWx1ZSgncGFkZGluZy10b3AnKSxcbiAgICAgIGJvdHRvbTogc3R5bGVWYWx1ZSgncGFkZGluZy1ib3R0b20nKVxuICAgIH07XG4gICAgdmFyIGJvcmRlciA9IHtcbiAgICAgIGxlZnQ6IHN0eWxlVmFsdWUoJ2JvcmRlci1sZWZ0LXdpZHRoJyksXG4gICAgICByaWdodDogc3R5bGVWYWx1ZSgnYm9yZGVyLXJpZ2h0LXdpZHRoJyksXG4gICAgICB0b3A6IHN0eWxlVmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSxcbiAgICAgIGJvdHRvbTogc3R5bGVWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpXG4gICAgfTtcbiAgICB2YXIgY2xpZW50V2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgdmFyIGNsaWVudEhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgdmFyIHBhZGRpbmdIb3IgPSBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0O1xuICAgIHZhciBwYWRkaW5nVmVyID0gcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgICB2YXIgYm9yZGVySG9yID0gYm9yZGVyLmxlZnQgKyBib3JkZXIucmlnaHQ7XG4gICAgdmFyIHNjYWxlID0gcmVjdC53aWR0aCAvIChjbGllbnRXaWR0aCArIGJvcmRlckhvcik7XG4gICAgdmFyIHVuc2NhbGVkVyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0hvcjtcbiAgICB2YXIgdW5zY2FsZWRIID0gY2xpZW50SGVpZ2h0IC0gcGFkZGluZ1ZlcjtcbiAgICB2YXIgbGVmdCA9IHJlY3QubGVmdCArIHBhZGRpbmcubGVmdCArIGJvcmRlci5sZWZ0O1xuICAgIHZhciB0b3AgPSByZWN0LnRvcCArIHBhZGRpbmcudG9wICsgYm9yZGVyLnRvcDtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJCQiA9IFtsZWZ0LCB0b3AsIHVuc2NhbGVkVywgdW5zY2FsZWRILCBzY2FsZV07XG4gIH07XG5cbiAgQlJwJGUuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29udGFpbmVyQkIgPSBudWxsO1xuICB9O1xuXG4gIEJScCRlLmZpbmROZWFyZXN0RWxlbWVudCA9IGZ1bmN0aW9uICh4LCB5LCBpbnRlcmFjdGl2ZUVsZW1lbnRzT25seSwgaXNUb3VjaCkge1xuICAgIHJldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpWzBdO1xuICB9O1xuXG4gIEJScCRlLmZpbmROZWFyZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICAgIHZhciBuZWFyID0gW107IC8vIDEgbm9kZSBtYXgsIDEgZWRnZSBtYXhcblxuICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgdmFyIGhhc0NvbXBvdW5kcyA9IHIuY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciBlZGdlVGhyZXNob2xkID0gKGlzVG91Y2ggPyAyNCA6IDgpIC8gem9vbTtcbiAgICB2YXIgbm9kZVRocmVzaG9sZCA9IChpc1RvdWNoID8gOCA6IDIpIC8gem9vbTtcbiAgICB2YXIgbGFiZWxUaHJlc2hvbGQgPSAoaXNUb3VjaCA/IDggOiAyKSAvIHpvb207XG4gICAgdmFyIG1pblNxRGlzdCA9IEluZmluaXR5O1xuICAgIHZhciBuZWFyRWRnZTtcbiAgICB2YXIgbmVhck5vZGU7XG5cbiAgICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50c09ubHkpIHtcbiAgICAgIGVsZXMgPSBlbGVzLmludGVyYWN0aXZlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEVsZShlbGUsIHNxRGlzdCkge1xuICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICBpZiAobmVhck5vZGUpIHtcbiAgICAgICAgICByZXR1cm47IC8vIGNhbid0IHJlcGxhY2Ugbm9kZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lYXJOb2RlID0gZWxlO1xuICAgICAgICAgIG5lYXIucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGUuaXNFZGdlKCkgJiYgKHNxRGlzdCA9PSBudWxsIHx8IHNxRGlzdCA8IG1pblNxRGlzdCkpIHtcbiAgICAgICAgaWYgKG5lYXJFZGdlKSB7XG4gICAgICAgICAgLy8gdGhlbiByZXBsYWNlIGV4aXN0aW5nIGVkZ2VcbiAgICAgICAgICAvLyBjYW4gcmVwbGFjZSBvbmx5IGlmIHNhbWUgei1pbmRleFxuICAgICAgICAgIGlmIChuZWFyRWRnZS5wc3R5bGUoJ3otY29tcG91bmQtZGVwdGgnKS52YWx1ZSA9PT0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlICYmIG5lYXJFZGdlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlID09PSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJykudmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVhci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAobmVhcltpXS5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgICAgIG5lYXJbaV0gPSBlbGU7XG4gICAgICAgICAgICAgICAgbmVhckVkZ2UgPSBlbGU7XG4gICAgICAgICAgICAgICAgbWluU3FEaXN0ID0gc3FEaXN0ICE9IG51bGwgPyBzcURpc3QgOiBtaW5TcURpc3Q7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmVhci5wdXNoKGVsZSk7XG4gICAgICAgICAgbmVhckVkZ2UgPSBlbGU7XG4gICAgICAgICAgbWluU3FEaXN0ID0gc3FEaXN0ICE9IG51bGwgPyBzcURpc3QgOiBtaW5TcURpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja05vZGUobm9kZSkge1xuICAgICAgdmFyIHdpZHRoID0gbm9kZS5vdXRlcldpZHRoKCkgKyAyICogbm9kZVRocmVzaG9sZDtcbiAgICAgIHZhciBoZWlnaHQgPSBub2RlLm91dGVySGVpZ2h0KCkgKyAyICogbm9kZVRocmVzaG9sZDtcbiAgICAgIHZhciBodyA9IHdpZHRoIC8gMjtcbiAgICAgIHZhciBoaCA9IGhlaWdodCAvIDI7XG4gICAgICB2YXIgcG9zID0gbm9kZS5wb3NpdGlvbigpO1xuXG4gICAgICBpZiAocG9zLnggLSBodyA8PSB4ICYmIHggPD0gcG9zLnggKyBodyAvLyBiYiBjaGVjayB4XG4gICAgICAmJiBwb3MueSAtIGhoIDw9IHkgJiYgeSA8PSBwb3MueSArIGhoIC8vIGJiIGNoZWNrIHlcbiAgICAgICkge1xuICAgICAgICB2YXIgc2hhcGUgPSByLm5vZGVTaGFwZXNbc2VsZi5nZXROb2RlU2hhcGUobm9kZSldO1xuXG4gICAgICAgIGlmIChzaGFwZS5jaGVja1BvaW50KHgsIHksIDAsIHdpZHRoLCBoZWlnaHQsIHBvcy54LCBwb3MueSkpIHtcbiAgICAgICAgICBhZGRFbGUobm9kZSwgMCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0VkZ2UoZWRnZSkge1xuICAgICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICAgICAgdmFyIHN0eWxlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICAgICAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgICB2YXIgd2lkdGggPSBzdHlsZVdpZHRoIC8gMiArIGVkZ2VUaHJlc2hvbGQ7IC8vIG1vcmUgbGlrZSBhIGRpc3RhbmNlIHJhZGl1cyBmcm9tIGNlbnRyZVxuXG4gICAgICB2YXIgd2lkdGhTcSA9IHdpZHRoICogd2lkdGg7XG4gICAgICB2YXIgd2lkdGgyID0gd2lkdGggKiAyO1xuICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgICB2YXIgc3FEaXN0O1xuXG4gICAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcgfHwgcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSArIDMgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICBpZiAoaW5MaW5lVmljaW5pdHkoeCwgeSwgcHRzW2ldLCBwdHNbaSArIDFdLCBwdHNbaSArIDJdLCBwdHNbaSArIDNdLCB3aWR0aDIpICYmIHdpZHRoU3EgPiAoc3FEaXN0ID0gc3FkaXN0VG9GaW5pdGVMaW5lKHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSkpKSB7XG4gICAgICAgICAgICBhZGRFbGUoZWRnZSwgc3FEaXN0KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpICsgNSA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgIGlmIChpbkJlemllclZpY2luaXR5KHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSwgcHRzW2kgKyA0XSwgcHRzW2kgKyA1XSwgd2lkdGgyKSAmJiB3aWR0aFNxID4gKHNxRGlzdCA9IHNxZGlzdFRvUXVhZHJhdGljQmV6aWVyKHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSwgcHRzW2kgKyA0XSwgcHRzW2kgKyA1XSkpKSB7XG4gICAgICAgICAgICBhZGRFbGUoZWRnZSwgc3FEaXN0KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBpZiB3ZSdyZSBjbG9zZSB0byB0aGUgZWRnZSBidXQgZGlkbid0IGhpdCBpdCwgbWF5YmUgd2UgaGl0IGl0cyBhcnJvd3NcblxuXG4gICAgICB2YXIgc3JjID0gc3JjIHx8IF9wLnNvdXJjZTtcbiAgICAgIHZhciB0Z3QgPSB0Z3QgfHwgX3AudGFyZ2V0O1xuICAgICAgdmFyIGFyU2l6ZSA9IHNlbGYuZ2V0QXJyb3dXaWR0aChzdHlsZVdpZHRoLCBzY2FsZSk7XG4gICAgICB2YXIgYXJyb3dzID0gW3tcbiAgICAgICAgbmFtZTogJ3NvdXJjZScsXG4gICAgICAgIHg6IHJzLmFycm93U3RhcnRYLFxuICAgICAgICB5OiBycy5hcnJvd1N0YXJ0WSxcbiAgICAgICAgYW5nbGU6IHJzLnNyY0Fycm93QW5nbGVcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICAgIHg6IHJzLmFycm93RW5kWCxcbiAgICAgICAgeTogcnMuYXJyb3dFbmRZLFxuICAgICAgICBhbmdsZTogcnMudGd0QXJyb3dBbmdsZVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnbWlkLXNvdXJjZScsXG4gICAgICAgIHg6IHJzLm1pZFgsXG4gICAgICAgIHk6IHJzLm1pZFksXG4gICAgICAgIGFuZ2xlOiBycy5taWRzcmNBcnJvd0FuZ2xlXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdtaWQtdGFyZ2V0JyxcbiAgICAgICAgeDogcnMubWlkWCxcbiAgICAgICAgeTogcnMubWlkWSxcbiAgICAgICAgYW5nbGU6IHJzLm1pZHRndEFycm93QW5nbGVcbiAgICAgIH1dO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXIgPSBhcnJvd3NbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IHIuYXJyb3dTaGFwZXNbZWRnZS5wc3R5bGUoYXIubmFtZSArICctYXJyb3ctc2hhcGUnKS52YWx1ZV07XG4gICAgICAgIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuXG4gICAgICAgIGlmIChzaGFwZS5yb3VnaENvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICAgIHg6IGFyLngsXG4gICAgICAgICAgeTogYXIueVxuICAgICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpICYmIHNoYXBlLmNvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICAgIHg6IGFyLngsXG4gICAgICAgICAgeTogYXIueVxuICAgICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpKSB7XG4gICAgICAgICAgYWRkRWxlKGVkZ2UpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZvciBjb21wb3VuZCBncmFwaHMsIGhpdHRpbmcgZWRnZSBtYXkgYWN0dWFsbHkgd2FudCBhIGNvbm5lY3RlZCBub2RlIGluc3RlYWQgKGIvYyBlZGdlIG1heSBoYXZlIGdyZWF0ZXIgei1pbmRleCBwcmVjZWRlbmNlKVxuXG5cbiAgICAgIGlmIChoYXNDb21wb3VuZHMgJiYgbmVhci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNoZWNrTm9kZShzcmMpO1xuICAgICAgICBjaGVja05vZGUodGd0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9wKG9iaiwgbmFtZSwgcHJlKSB7XG4gICAgICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIG5hbWUsIHByZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tMYWJlbChlbGUsIHByZWZpeCkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgdmFyIHRoID0gbGFiZWxUaHJlc2hvbGQ7XG4gICAgICB2YXIgcHJlZml4RGFzaDtcblxuICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJlZml4RGFzaCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICAgIHZhciBiYiA9IF9wLmxhYmVsQm91bmRzW3ByZWZpeCB8fCAnbWFpbiddO1xuICAgICAgdmFyIHRleHQgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAnbGFiZWwnKS52YWx1ZTtcbiAgICAgIHZhciBldmVudHNFbmFibGVkID0gZWxlLnBzdHlsZSgndGV4dC1ldmVudHMnKS5zdHJWYWx1ZSA9PT0gJ3llcyc7XG5cbiAgICAgIGlmICghZXZlbnRzRW5hYmxlZCB8fCAhdGV4dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBseCA9IHByZXByb3AoX3AucnNjcmF0Y2gsICdsYWJlbFgnLCBwcmVmaXgpO1xuICAgICAgdmFyIGx5ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWScsIHByZWZpeCk7XG4gICAgICB2YXIgdGhldGEgPSBwcmVwcm9wKF9wLnJzY3JhdGNoLCAnbGFiZWxBbmdsZScsIHByZWZpeCk7XG4gICAgICB2YXIgb3ggPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teCcpLnBmVmFsdWU7XG4gICAgICB2YXIgb3kgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgICB2YXIgbHgxID0gYmIueDEgLSB0aCAtIG94OyAvLyAoLW94LCAtb3kpIGFzIGJiIGFscmVhZHkgaW5jbHVkZXMgbWFyZ2luXG5cbiAgICAgIHZhciBseDIgPSBiYi54MiArIHRoIC0gb3g7IC8vIGFuZCByb3RhdGlvbiBpcyBhYm91dCAobHgsIGx5KVxuXG4gICAgICB2YXIgbHkxID0gYmIueTEgLSB0aCAtIG95O1xuICAgICAgdmFyIGx5MiA9IGJiLnkyICsgdGggLSBveTtcblxuICAgICAgaWYgKHRoZXRhKSB7XG4gICAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICAgICAgdmFyIHJvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSh4LCB5KSB7XG4gICAgICAgICAgeCA9IHggLSBseDtcbiAgICAgICAgICB5ID0geSAtIGx5O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB4ICogY29zIC0geSAqIHNpbiArIGx4LFxuICAgICAgICAgICAgeTogeCAqIHNpbiArIHkgKiBjb3MgKyBseVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHB4MXkxID0gcm90YXRlKGx4MSwgbHkxKTtcbiAgICAgICAgdmFyIHB4MXkyID0gcm90YXRlKGx4MSwgbHkyKTtcbiAgICAgICAgdmFyIHB4MnkxID0gcm90YXRlKGx4MiwgbHkxKTtcbiAgICAgICAgdmFyIHB4MnkyID0gcm90YXRlKGx4MiwgbHkyKTtcbiAgICAgICAgdmFyIHBvaW50cyA9IFsvLyB3aXRoIHRoZSBtYXJnaW4gYWRkZWQgYWZ0ZXIgdGhlIHJvdGF0aW9uIGlzIGFwcGxpZWRcbiAgICAgICAgcHgxeTEueCArIG94LCBweDF5MS55ICsgb3ksIHB4MnkxLnggKyBveCwgcHgyeTEueSArIG95LCBweDJ5Mi54ICsgb3gsIHB4MnkyLnkgKyBveSwgcHgxeTIueCArIG94LCBweDF5Mi55ICsgb3ldO1xuXG4gICAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSkge1xuICAgICAgICAgIGFkZEVsZShlbGUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkbyBhIGNoZWFwZXIgYmIgY2hlY2tcbiAgICAgICAgaWYgKGluQm91bmRpbmdCb3goYmIsIHgsIHkpKSB7XG4gICAgICAgICAgYWRkRWxlKGVsZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gZWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gcmV2ZXJzZSBvcmRlciBmb3IgcHJlY2VkZW5jZVxuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG5cbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgY2hlY2tOb2RlKGVsZSkgfHwgY2hlY2tMYWJlbChlbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlbiBlZGdlXG4gICAgICAgIGNoZWNrRWRnZShlbGUpIHx8IGNoZWNrTGFiZWwoZWxlKSB8fCBjaGVja0xhYmVsKGVsZSwgJ3NvdXJjZScpIHx8IGNoZWNrTGFiZWwoZWxlLCAndGFyZ2V0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lYXI7XG4gIH07IC8vICdHaXZlIG1lIGV2ZXJ5dGhpbmcgZnJvbSB0aGlzIGJveCdcblxuXG4gIEJScCRlLmdldEFsbEluQm94ID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmU7XG4gICAgdmFyIGJveCA9IFtdO1xuICAgIHZhciB4MWMgPSBNYXRoLm1pbih4MSwgeDIpO1xuICAgIHZhciB4MmMgPSBNYXRoLm1heCh4MSwgeDIpO1xuICAgIHZhciB5MWMgPSBNYXRoLm1pbih5MSwgeTIpO1xuICAgIHZhciB5MmMgPSBNYXRoLm1heCh5MSwgeTIpO1xuICAgIHgxID0geDFjO1xuICAgIHgyID0geDJjO1xuICAgIHkxID0geTFjO1xuICAgIHkyID0geTJjO1xuICAgIHZhciBib3hCYiA9IG1ha2VCb3VuZGluZ0JveCh7XG4gICAgICB4MTogeDEsXG4gICAgICB5MTogeTEsXG4gICAgICB4MjogeDIsXG4gICAgICB5MjogeTJcbiAgICB9KTtcblxuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgZWxlcy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbZV07XG5cbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBlbGU7XG4gICAgICAgIHZhciBub2RlQmIgPSBub2RlLmJvdW5kaW5nQm94KHtcbiAgICAgICAgICBpbmNsdWRlTm9kZXM6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZUVkZ2VzOiBmYWxzZSxcbiAgICAgICAgICBpbmNsdWRlTGFiZWxzOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYm91bmRpbmdCb3hlc0ludGVyc2VjdChib3hCYiwgbm9kZUJiKSAmJiAhYm91bmRpbmdCb3hJbkJvdW5kaW5nQm94KG5vZGVCYiwgYm94QmIpKSB7XG4gICAgICAgICAgYm94LnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlZGdlID0gZWxlO1xuICAgICAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgICAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcblxuICAgICAgICBpZiAocnMuc3RhcnRYICE9IG51bGwgJiYgcnMuc3RhcnRZICE9IG51bGwgJiYgIWluQm91bmRpbmdCb3goYm94QmIsIHJzLnN0YXJ0WCwgcnMuc3RhcnRZKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJzLmVuZFggIT0gbnVsbCAmJiBycy5lbmRZICE9IG51bGwgJiYgIWluQm91bmRpbmdCb3goYm94QmIsIHJzLmVuZFgsIHJzLmVuZFkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdiZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnc2VsZicgfHwgcnMuZWRnZVR5cGUgPT09ICdjb21wb3VuZCcgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycgfHwgcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgICAgICB2YXIgcHRzID0gX3AucnN0eWxlLmJlemllclB0cyB8fCBfcC5yc3R5bGUubGluZVB0cyB8fCBfcC5yc3R5bGUuaGF5c3RhY2tQdHM7XG4gICAgICAgICAgdmFyIGFsbEluc2lkZSA9IHRydWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFwb2ludEluQm91bmRpbmdCb3goYm94QmIsIHB0c1tpXSkpIHtcbiAgICAgICAgICAgICAgYWxsSW5zaWRlID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhbGxJbnNpZGUpIHtcbiAgICAgICAgICAgIGJveC5wdXNoKGVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJyB8fCBycy5lZGdlVHlwZSA9PT0gJ3N0cmFpZ2h0Jykge1xuICAgICAgICAgIGJveC5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJveDtcbiAgfTtcblxuICB2YXIgQlJwJGQgPSB7fTtcblxuICBCUnAkZC5jYWxjdWxhdGVBcnJvd0FuZ2xlcyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgaXNIYXlzdGFjayA9IHJzLmVkZ2VUeXBlID09PSAnaGF5c3RhY2snO1xuICAgIHZhciBpc0JlemllciA9IHJzLmVkZ2VUeXBlID09PSAnYmV6aWVyJztcbiAgICB2YXIgaXNNdWx0aWJlemllciA9IHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInO1xuICAgIHZhciBpc1NlZ21lbnRzID0gcnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cyc7XG4gICAgdmFyIGlzQ29tcG91bmQgPSBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJztcbiAgICB2YXIgaXNTZWxmID0gcnMuZWRnZVR5cGUgPT09ICdzZWxmJzsgLy8gRGlzcGxhY2VtZW50IGdpdmVzIGRpcmVjdGlvbiBmb3IgYXJyb3doZWFkIG9yaWVudGF0aW9uXG5cbiAgICB2YXIgZGlzcFgsIGRpc3BZO1xuICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgbWlkWCwgbWlkWTtcblxuICAgIGlmIChpc0hheXN0YWNrKSB7XG4gICAgICBzdGFydFggPSBycy5oYXlzdGFja1B0c1swXTtcbiAgICAgIHN0YXJ0WSA9IHJzLmhheXN0YWNrUHRzWzFdO1xuICAgICAgZW5kWCA9IHJzLmhheXN0YWNrUHRzWzJdO1xuICAgICAgZW5kWSA9IHJzLmhheXN0YWNrUHRzWzNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFggPSBycy5hcnJvd1N0YXJ0WDtcbiAgICAgIHN0YXJ0WSA9IHJzLmFycm93U3RhcnRZO1xuICAgICAgZW5kWCA9IHJzLmFycm93RW5kWDtcbiAgICAgIGVuZFkgPSBycy5hcnJvd0VuZFk7XG4gICAgfVxuXG4gICAgbWlkWCA9IHJzLm1pZFg7XG4gICAgbWlkWSA9IHJzLm1pZFk7IC8vIHNvdXJjZVxuICAgIC8vXG5cbiAgICBpZiAoaXNTZWdtZW50cykge1xuICAgICAgZGlzcFggPSBzdGFydFggLSBycy5zZWdwdHNbMF07XG4gICAgICBkaXNwWSA9IHN0YXJ0WSAtIHJzLnNlZ3B0c1sxXTtcbiAgICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgICB2YXIgYlggPSBxYmV6aWVyQXQocHRzWzBdLCBwdHNbMl0sIHB0c1s0XSwgMC4xKTtcbiAgICAgIHZhciBiWSA9IHFiZXppZXJBdChwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCAwLjEpO1xuICAgICAgZGlzcFggPSBzdGFydFggLSBiWDtcbiAgICAgIGRpc3BZID0gc3RhcnRZIC0gYlk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BYID0gc3RhcnRYIC0gbWlkWDtcbiAgICAgIGRpc3BZID0gc3RhcnRZIC0gbWlkWTtcbiAgICB9XG5cbiAgICBycy5zcmNBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpOyAvLyBtaWQgdGFyZ2V0XG4gICAgLy9cblxuICAgIHZhciBtaWRYID0gcnMubWlkWDtcbiAgICB2YXIgbWlkWSA9IHJzLm1pZFk7XG5cbiAgICBpZiAoaXNIYXlzdGFjaykge1xuICAgICAgbWlkWCA9IChzdGFydFggKyBlbmRYKSAvIDI7XG4gICAgICBtaWRZID0gKHN0YXJ0WSArIGVuZFkpIC8gMjtcbiAgICB9XG5cbiAgICBkaXNwWCA9IGVuZFggLSBzdGFydFg7XG4gICAgZGlzcFkgPSBlbmRZIC0gc3RhcnRZO1xuXG4gICAgaWYgKGlzU2VnbWVudHMpIHtcbiAgICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG5cbiAgICAgIGlmIChwdHMubGVuZ3RoIC8gMiAlIDIgPT09IDApIHtcbiAgICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDI7XG4gICAgICAgIHZhciBpMSA9IGkyIC0gMjtcbiAgICAgICAgZGlzcFggPSBwdHNbaTJdIC0gcHRzW2kxXTtcbiAgICAgICAgZGlzcFkgPSBwdHNbaTIgKyAxXSAtIHB0c1tpMSArIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICAgIHZhciBpMyA9IGkyICsgMjtcbiAgICAgICAgZGlzcFggPSBwdHNbaTJdIC0gcHRzW2kxXTtcbiAgICAgICAgZGlzcFkgPSBwdHNbaTIgKyAxXSAtIHB0c1tpMSArIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNNdWx0aWJlemllciB8fCBpc0NvbXBvdW5kIHx8IGlzU2VsZikge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICAgIHZhciBjcHRzID0gcnMuY3RybHB0cztcbiAgICAgIHZhciBicDB4LCBicDB5O1xuICAgICAgdmFyIGJwMXgsIGJwMXk7XG5cbiAgICAgIGlmIChjcHRzLmxlbmd0aCAvIDIgJSAyID09PSAwKSB7XG4gICAgICAgIHZhciBwMCA9IHB0cy5sZW5ndGggLyAyIC0gMTsgLy8gc3RhcnRwdFxuXG4gICAgICAgIHZhciBpYyA9IHAwICsgMjtcbiAgICAgICAgdmFyIHAxID0gaWMgKyAyO1xuICAgICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMCk7XG4gICAgICAgIGJwMHkgPSBxYmV6aWVyQXQocHRzW3AwICsgMV0sIHB0c1tpYyArIDFdLCBwdHNbcDEgKyAxXSwgMC4wKTtcbiAgICAgICAgYnAxeCA9IHFiZXppZXJBdChwdHNbcDBdLCBwdHNbaWNdLCBwdHNbcDFdLCAwLjAwMDEpO1xuICAgICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMDAwMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaWMgPSBwdHMubGVuZ3RoIC8gMiAtIDE7IC8vIGN0cnB0XG5cbiAgICAgICAgdmFyIHAwID0gaWMgLSAyOyAvLyBzdGFydHB0XG5cbiAgICAgICAgdmFyIHAxID0gaWMgKyAyOyAvLyBlbmRwdFxuXG4gICAgICAgIGJwMHggPSBxYmV6aWVyQXQocHRzW3AwXSwgcHRzW2ljXSwgcHRzW3AxXSwgMC40OTk5KTtcbiAgICAgICAgYnAweSA9IHFiZXppZXJBdChwdHNbcDAgKyAxXSwgcHRzW2ljICsgMV0sIHB0c1twMSArIDFdLCAwLjQ5OTkpO1xuICAgICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNSk7XG4gICAgICAgIGJwMXkgPSBxYmV6aWVyQXQocHRzW3AwICsgMV0sIHB0c1tpYyArIDFdLCBwdHNbcDEgKyAxXSwgMC41KTtcbiAgICAgIH1cblxuICAgICAgZGlzcFggPSBicDF4IC0gYnAweDtcbiAgICAgIGRpc3BZID0gYnAxeSAtIGJwMHk7XG4gICAgfVxuXG4gICAgcnMubWlkdGd0QXJyb3dBbmdsZSA9IGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKTtcbiAgICBycy5taWREaXNwWCA9IGRpc3BYO1xuICAgIHJzLm1pZERpc3BZID0gZGlzcFk7IC8vIG1pZCBzb3VyY2VcbiAgICAvL1xuXG4gICAgZGlzcFggKj0gLTE7XG4gICAgZGlzcFkgKj0gLTE7XG5cbiAgICBpZiAoaXNTZWdtZW50cykge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcblxuICAgICAgaWYgKHB0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkgOyBlbHNlIHtcbiAgICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgICB2YXIgaTMgPSBpMiArIDI7XG4gICAgICAgIGRpc3BYID0gLShwdHNbaTNdIC0gcHRzW2kyXSk7XG4gICAgICAgIGRpc3BZID0gLShwdHNbaTMgKyAxXSAtIHB0c1tpMiArIDFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBycy5taWRzcmNBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpOyAvLyB0YXJnZXRcbiAgICAvL1xuXG4gICAgaWYgKGlzU2VnbWVudHMpIHtcbiAgICAgIGRpc3BYID0gZW5kWCAtIHJzLnNlZ3B0c1tycy5zZWdwdHMubGVuZ3RoIC0gMl07XG4gICAgICBkaXNwWSA9IGVuZFkgLSBycy5zZWdwdHNbcnMuc2VncHRzLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSBpZiAoaXNNdWx0aWJlemllciB8fCBpc0NvbXBvdW5kIHx8IGlzU2VsZiB8fCBpc0Jlemllcikge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICAgIHZhciBsID0gcHRzLmxlbmd0aDtcbiAgICAgIHZhciBiWCA9IHFiZXppZXJBdChwdHNbbCAtIDZdLCBwdHNbbCAtIDRdLCBwdHNbbCAtIDJdLCAwLjkpO1xuICAgICAgdmFyIGJZID0gcWJlemllckF0KHB0c1tsIC0gNV0sIHB0c1tsIC0gM10sIHB0c1tsIC0gMV0sIDAuOSk7XG4gICAgICBkaXNwWCA9IGVuZFggLSBiWDtcbiAgICAgIGRpc3BZID0gZW5kWSAtIGJZO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwWCA9IGVuZFggLSBtaWRYO1xuICAgICAgZGlzcFkgPSBlbmRZIC0gbWlkWTtcbiAgICB9XG5cbiAgICBycy50Z3RBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuICB9O1xuXG4gIEJScCRkLmdldEFycm93V2lkdGggPSBCUnAkZC5nZXRBcnJvd0hlaWdodCA9IGZ1bmN0aW9uIChlZGdlV2lkdGgsIHNjYWxlKSB7XG4gICAgdmFyIGNhY2hlID0gdGhpcy5hcnJvd1dpZHRoQ2FjaGUgPSB0aGlzLmFycm93V2lkdGhDYWNoZSB8fCB7fTtcbiAgICB2YXIgY2FjaGVkVmFsID0gY2FjaGVbZWRnZVdpZHRoICsgJywgJyArIHNjYWxlXTtcblxuICAgIGlmIChjYWNoZWRWYWwpIHtcbiAgICAgIHJldHVybiBjYWNoZWRWYWw7XG4gICAgfVxuXG4gICAgY2FjaGVkVmFsID0gTWF0aC5tYXgoTWF0aC5wb3coZWRnZVdpZHRoICogMTMuMzcsIDAuOSksIDI5KSAqIHNjYWxlO1xuICAgIGNhY2hlW2VkZ2VXaWR0aCArICcsICcgKyBzY2FsZV0gPSBjYWNoZWRWYWw7XG4gICAgcmV0dXJuIGNhY2hlZFZhbDtcbiAgfTtcblxuICB2YXIgQlJwJGMgPSB7fTtcblxuICBCUnAkYy5maW5kSGF5c3RhY2tQb2ludHMgPSBmdW5jdGlvbiAoZWRnZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuXG4gICAgICBpZiAoIXJzLmhheXN0YWNrKSB7XG4gICAgICAgIHZhciBhbmdsZSA9IE1hdGgucmFuZG9tKCkgKiAyICogTWF0aC5QSTtcbiAgICAgICAgcnMuc291cmNlID0ge1xuICAgICAgICAgIHg6IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSlcbiAgICAgICAgfTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLnJhbmRvbSgpICogMiAqIE1hdGguUEk7XG4gICAgICAgIHJzLnRhcmdldCA9IHtcbiAgICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBzcmMgPSBfcC5zb3VyY2U7XG4gICAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgICAgdmFyIHNyY1BvcyA9IHNyYy5wb3NpdGlvbigpO1xuICAgICAgdmFyIHRndFBvcyA9IHRndC5wb3NpdGlvbigpO1xuICAgICAgdmFyIHNyY1cgPSBzcmMud2lkdGgoKTtcbiAgICAgIHZhciB0Z3RXID0gdGd0LndpZHRoKCk7XG4gICAgICB2YXIgc3JjSCA9IHNyYy5oZWlnaHQoKTtcbiAgICAgIHZhciB0Z3RIID0gdGd0LmhlaWdodCgpO1xuICAgICAgdmFyIHJhZGl1cyA9IGVkZ2UucHN0eWxlKCdoYXlzdGFjay1yYWRpdXMnKS52YWx1ZTtcbiAgICAgIHZhciBoYWxmUmFkaXVzID0gcmFkaXVzIC8gMjsgLy8gYi9jIGhhdmUgdG8gaGFsZiB3aWR0aC9oZWlnaHRcblxuICAgICAgcnMuaGF5c3RhY2tQdHMgPSBycy5hbGxwdHMgPSBbcnMuc291cmNlLnggKiBzcmNXICogaGFsZlJhZGl1cyArIHNyY1Bvcy54LCBycy5zb3VyY2UueSAqIHNyY0ggKiBoYWxmUmFkaXVzICsgc3JjUG9zLnksIHJzLnRhcmdldC54ICogdGd0VyAqIGhhbGZSYWRpdXMgKyB0Z3RQb3MueCwgcnMudGFyZ2V0LnkgKiB0Z3RIICogaGFsZlJhZGl1cyArIHRndFBvcy55XTtcbiAgICAgIHJzLm1pZFggPSAocnMuYWxscHRzWzBdICsgcnMuYWxscHRzWzJdKSAvIDI7XG4gICAgICBycy5taWRZID0gKHJzLmFsbHB0c1sxXSArIHJzLmFsbHB0c1szXSkgLyAyOyAvLyBhbHdheXMgb3ZlcnJpZGUgYXMgaGF5c3RhY2sgaW4gY2FzZSBzZXQgdG8gZGlmZmVyZW50IHR5cGUgcHJldmlvdXNseVxuXG4gICAgICBycy5lZGdlVHlwZSA9ICdoYXlzdGFjayc7XG4gICAgICBycy5oYXlzdGFjayA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKGVkZ2UpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhlZGdlKTtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhlZGdlKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoZWRnZSk7XG4gICAgfVxuICB9O1xuXG4gIEJScCRjLmZpbmRTZWdtZW50c1BvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbykge1xuICAgIC8vIFNlZ21lbnRzIChtdWx0aXBsZSBzdHJhaWdodCBsaW5lcylcbiAgICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMsXG4gICAgICAgIGludGVyc2VjdGlvblB0cyA9IHBhaXJJbmZvLmludGVyc2VjdGlvblB0cyxcbiAgICAgICAgdmVjdG9yTm9ybUludmVyc2UgPSBwYWlySW5mby52ZWN0b3JOb3JtSW52ZXJzZTtcbiAgICB2YXIgZWRnZURpc3RhbmNlcyA9IGVkZ2UucHN0eWxlKCdlZGdlLWRpc3RhbmNlcycpLnZhbHVlO1xuICAgIHZhciBzZWdtZW50V3MgPSBlZGdlLnBzdHlsZSgnc2VnbWVudC13ZWlnaHRzJyk7XG4gICAgdmFyIHNlZ21lbnREcyA9IGVkZ2UucHN0eWxlKCdzZWdtZW50LWRpc3RhbmNlcycpO1xuICAgIHZhciBzZWdtZW50c04gPSBNYXRoLm1pbihzZWdtZW50V3MucGZWYWx1ZS5sZW5ndGgsIHNlZ21lbnREcy5wZlZhbHVlLmxlbmd0aCk7XG4gICAgcnMuZWRnZVR5cGUgPSAnc2VnbWVudHMnO1xuICAgIHJzLnNlZ3B0cyA9IFtdO1xuXG4gICAgZm9yICh2YXIgcyA9IDA7IHMgPCBzZWdtZW50c047IHMrKykge1xuICAgICAgdmFyIHcgPSBzZWdtZW50V3MucGZWYWx1ZVtzXTtcbiAgICAgIHZhciBkID0gc2VnbWVudERzLnBmVmFsdWVbc107XG4gICAgICB2YXIgdzEgPSAxIC0gdztcbiAgICAgIHZhciB3MiA9IHc7XG4gICAgICB2YXIgbWlkcHRQdHMgPSBlZGdlRGlzdGFuY2VzID09PSAnbm9kZS1wb3NpdGlvbicgPyBwb3NQdHMgOiBpbnRlcnNlY3Rpb25QdHM7XG4gICAgICB2YXIgYWRqdXN0ZWRNaWRwdCA9IHtcbiAgICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXG4gICAgICAgIHk6IG1pZHB0UHRzLnkxICogdzEgKyBtaWRwdFB0cy55MiAqIHcyXG4gICAgICB9O1xuICAgICAgcnMuc2VncHRzLnB1c2goYWRqdXN0ZWRNaWRwdC54ICsgdmVjdG9yTm9ybUludmVyc2UueCAqIGQsIGFkanVzdGVkTWlkcHQueSArIHZlY3Rvck5vcm1JbnZlcnNlLnkgKiBkKTtcbiAgICB9XG4gIH07XG5cbiAgQlJwJGMuZmluZExvb3BQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgIC8vIFNlbGYtZWRnZVxuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGRpckNvdW50cyA9IHBhaXJJbmZvLmRpckNvdW50cyxcbiAgICAgICAgc3JjUG9zID0gcGFpckluZm8uc3JjUG9zO1xuICAgIHZhciBjdHJscHREaXN0cyA9IGVkZ2UucHN0eWxlKCdjb250cm9sLXBvaW50LWRpc3RhbmNlcycpO1xuICAgIHZhciBjdHJscHREaXN0ID0gY3RybHB0RGlzdHMgPyBjdHJscHREaXN0cy5wZlZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsb29wRGlyID0gZWRnZS5wc3R5bGUoJ2xvb3AtZGlyZWN0aW9uJykucGZWYWx1ZTtcbiAgICB2YXIgbG9vcFN3cCA9IGVkZ2UucHN0eWxlKCdsb29wLXN3ZWVwJykucGZWYWx1ZTtcbiAgICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICAgIHJzLmVkZ2VUeXBlID0gJ3NlbGYnO1xuICAgIHZhciBqID0gaTtcbiAgICB2YXIgbG9vcERpc3QgPSBzdGVwU2l6ZTtcblxuICAgIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICAgIGogPSAwO1xuICAgICAgbG9vcERpc3QgPSBjdHJscHREaXN0O1xuICAgIH1cblxuICAgIHZhciBsb29wQW5nbGUgPSBsb29wRGlyIC0gTWF0aC5QSSAvIDI7XG4gICAgdmFyIG91dEFuZ2xlID0gbG9vcEFuZ2xlIC0gbG9vcFN3cCAvIDI7XG4gICAgdmFyIGluQW5nbGUgPSBsb29wQW5nbGUgKyBsb29wU3dwIC8gMjsgLy8gaW5jcmVhc2UgYnkgc3RlcCBzaXplIGZvciBvdmVybGFwcGluZyBsb29wcywga2V5ZWQgb24gZGlyZWN0aW9uIGFuZCBzd2VlcCB2YWx1ZXNcblxuICAgIHZhciBkYyA9IFN0cmluZyhsb29wRGlyICsgJ18nICsgbG9vcFN3cCk7XG4gICAgaiA9IGRpckNvdW50c1tkY10gPT09IHVuZGVmaW5lZCA/IGRpckNvdW50c1tkY10gPSAwIDogKytkaXJDb3VudHNbZGNdO1xuICAgIHJzLmN0cmxwdHMgPSBbc3JjUG9zLnggKyBNYXRoLmNvcyhvdXRBbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKG91dEFuZ2xlKSAqIDEuNCAqIGxvb3BEaXN0ICogKGogLyAzICsgMSksIHNyY1Bvcy54ICsgTWF0aC5jb3MoaW5BbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKGluQW5nbGUpICogMS40ICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKV07XG4gIH07XG5cbiAgQlJwJGMuZmluZENvbXBvdW5kTG9vcFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbywgaSwgZWRnZUlzVW5idW5kbGVkKSB7XG4gICAgLy8gQ29tcG91bmQgZWRnZVxuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcnMuZWRnZVR5cGUgPSAnY29tcG91bmQnO1xuICAgIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MsXG4gICAgICAgIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyxcbiAgICAgICAgc3JjVyA9IHBhaXJJbmZvLnNyY1csXG4gICAgICAgIHNyY0ggPSBwYWlySW5mby5zcmNILFxuICAgICAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICAgICAgdGd0SCA9IHBhaXJJbmZvLnRndEg7XG4gICAgdmFyIHN0ZXBTaXplID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJykucGZWYWx1ZTtcbiAgICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgICB2YXIgY3RybHB0RGlzdCA9IGN0cmxwdERpc3RzID8gY3RybHB0RGlzdHMucGZWYWx1ZVswXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaiA9IGk7XG4gICAgdmFyIGxvb3BEaXN0ID0gc3RlcFNpemU7XG5cbiAgICBpZiAoZWRnZUlzVW5idW5kbGVkKSB7XG4gICAgICBqID0gMDtcbiAgICAgIGxvb3BEaXN0ID0gY3RybHB0RGlzdDtcbiAgICB9XG5cbiAgICB2YXIgbG9vcFcgPSA1MDtcbiAgICB2YXIgbG9vcGFQb3MgPSB7XG4gICAgICB4OiBzcmNQb3MueCAtIHNyY1cgLyAyLFxuICAgICAgeTogc3JjUG9zLnkgLSBzcmNIIC8gMlxuICAgIH07XG4gICAgdmFyIGxvb3BiUG9zID0ge1xuICAgICAgeDogdGd0UG9zLnggLSB0Z3RXIC8gMixcbiAgICAgIHk6IHRndFBvcy55IC0gdGd0SCAvIDJcbiAgICB9O1xuICAgIHZhciBsb29wUG9zID0ge1xuICAgICAgeDogTWF0aC5taW4obG9vcGFQb3MueCwgbG9vcGJQb3MueCksXG4gICAgICB5OiBNYXRoLm1pbihsb29wYVBvcy55LCBsb29wYlBvcy55KVxuICAgIH07IC8vIGF2b2lkcyBjYXNlcyB3aXRoIGltcG9zc2libGUgYmV6aWVyc1xuXG4gICAgdmFyIG1pbkNvbXBvdW5kU3RyZXRjaCA9IDAuNTtcbiAgICB2YXIgY29tcG91bmRTdHJldGNoQSA9IE1hdGgubWF4KG1pbkNvbXBvdW5kU3RyZXRjaCwgTWF0aC5sb2coc3JjVyAqIDAuMDEpKTtcbiAgICB2YXIgY29tcG91bmRTdHJldGNoQiA9IE1hdGgubWF4KG1pbkNvbXBvdW5kU3RyZXRjaCwgTWF0aC5sb2codGd0VyAqIDAuMDEpKTtcbiAgICBycy5jdHJscHRzID0gW2xvb3BQb3MueCwgbG9vcFBvcy55IC0gKDEgKyBNYXRoLnBvdyhsb29wVywgMS4xMikgLyAxMDApICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSAqIGNvbXBvdW5kU3RyZXRjaEEsIGxvb3BQb3MueCAtICgxICsgTWF0aC5wb3cobG9vcFcsIDEuMTIpIC8gMTAwKSAqIGxvb3BEaXN0ICogKGogLyAzICsgMSkgKiBjb21wb3VuZFN0cmV0Y2hCLCBsb29wUG9zLnldO1xuICB9O1xuXG4gIEJScCRjLmZpbmRTdHJhaWdodEVkZ2VQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIC8vIFN0cmFpZ2h0IGVkZ2Ugd2l0aGluIGJ1bmRsZVxuICAgIGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGUgPSAnc3RyYWlnaHQnO1xuICB9O1xuXG4gIEJScCRjLmZpbmRCZXppZXJQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCwgZWRnZUlzU3dhcHBlZCkge1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIHZlY3Rvck5vcm1JbnZlcnNlID0gcGFpckluZm8udmVjdG9yTm9ybUludmVyc2UsXG4gICAgICAgIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICAgICAgaW50ZXJzZWN0aW9uUHRzID0gcGFpckluZm8uaW50ZXJzZWN0aW9uUHRzO1xuICAgIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gICAgdmFyIHN0ZXBTaXplID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJykucGZWYWx1ZTtcbiAgICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgICB2YXIgY3RybHB0V3MgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC13ZWlnaHRzJyk7XG4gICAgdmFyIGJlemllck4gPSBjdHJscHREaXN0cyAmJiBjdHJscHRXcyA/IE1hdGgubWluKGN0cmxwdERpc3RzLnZhbHVlLmxlbmd0aCwgY3RybHB0V3MudmFsdWUubGVuZ3RoKSA6IDE7XG4gICAgdmFyIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGN0cmxwdFdlaWdodCA9IGN0cmxwdFdzLnZhbHVlWzBdOyAvLyAoTXVsdGkpYmV6aWVyXG5cbiAgICB2YXIgbXVsdGkgPSBlZGdlSXNVbmJ1bmRsZWQ7XG4gICAgcnMuZWRnZVR5cGUgPSBtdWx0aSA/ICdtdWx0aWJlemllcicgOiAnYmV6aWVyJztcbiAgICBycy5jdHJscHRzID0gW107XG5cbiAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJlemllck47IGIrKykge1xuICAgICAgdmFyIG5vcm1jdHJscHREaXN0ID0gKDAuNSAtIHBhaXJJbmZvLmVsZXMubGVuZ3RoIC8gMiArIGkpICogc3RlcFNpemUgKiAoZWRnZUlzU3dhcHBlZCA/IC0xIDogMSk7XG4gICAgICB2YXIgbWFuY3RybHB0RGlzdCA9IHZvaWQgMDtcbiAgICAgIHZhciBzaWduID0gc2lnbnVtKG5vcm1jdHJscHREaXN0KTtcblxuICAgICAgaWYgKG11bHRpKSB7XG4gICAgICAgIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbYl0gOiBzdGVwU2l6ZTsgLy8gZmFsbCBiYWNrIG9uIHN0ZXAgc2l6ZVxuXG4gICAgICAgIGN0cmxwdFdlaWdodCA9IGN0cmxwdFdzLnZhbHVlW2JdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRnZUlzVW5idW5kbGVkKSB7XG4gICAgICAgIC8vIG11bHRpIG9yIHNpbmdsZSB1bmJ1bmRsZWRcbiAgICAgICAgbWFuY3RybHB0RGlzdCA9IGN0cmxwdERpc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYW5jdHJscHREaXN0ID0gY3RybHB0RGlzdCAhPT0gdW5kZWZpbmVkID8gc2lnbiAqIGN0cmxwdERpc3QgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXN0YW5jZUZyb21NaWRwb2ludCA9IG1hbmN0cmxwdERpc3QgIT09IHVuZGVmaW5lZCA/IG1hbmN0cmxwdERpc3QgOiBub3JtY3RybHB0RGlzdDtcbiAgICAgIHZhciB3MSA9IDEgLSBjdHJscHRXZWlnaHQ7XG4gICAgICB2YXIgdzIgPSBjdHJscHRXZWlnaHQ7XG4gICAgICB2YXIgbWlkcHRQdHMgPSBlZGdlRGlzdGFuY2VzID09PSAnbm9kZS1wb3NpdGlvbicgPyBwb3NQdHMgOiBpbnRlcnNlY3Rpb25QdHM7XG4gICAgICB2YXIgYWRqdXN0ZWRNaWRwdCA9IHtcbiAgICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXG4gICAgICAgIHk6IG1pZHB0UHRzLnkxICogdzEgKyBtaWRwdFB0cy55MiAqIHcyXG4gICAgICB9O1xuICAgICAgcnMuY3RybHB0cy5wdXNoKGFkanVzdGVkTWlkcHQueCArIHZlY3Rvck5vcm1JbnZlcnNlLnggKiBkaXN0YW5jZUZyb21NaWRwb2ludCwgYWRqdXN0ZWRNaWRwdC55ICsgdmVjdG9yTm9ybUludmVyc2UueSAqIGRpc3RhbmNlRnJvbU1pZHBvaW50KTtcbiAgICB9XG4gIH07XG5cbiAgQlJwJGMuZmluZFRheGlQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgICAvLyBUYXhpY2FiIGdlb21ldHJ5IHdpdGggdHdvIHR1cm5zIG1heGltdW1cbiAgICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHJzLmVkZ2VUeXBlID0gJ3NlZ21lbnRzJztcbiAgICB2YXIgVkVSVElDQUwgPSAndmVydGljYWwnO1xuICAgIHZhciBIT1JJWk9OVEFMID0gJ2hvcml6b250YWwnO1xuICAgIHZhciBMRUZUV0FSRCA9ICdsZWZ0d2FyZCc7XG4gICAgdmFyIFJJR0hUV0FSRCA9ICdyaWdodHdhcmQnO1xuICAgIHZhciBET1dOV0FSRCA9ICdkb3dud2FyZCc7XG4gICAgdmFyIFVQV0FSRCA9ICd1cHdhcmQnO1xuICAgIHZhciBBVVRPID0gJ2F1dG8nO1xuICAgIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMsXG4gICAgICAgIHNyY1cgPSBwYWlySW5mby5zcmNXLFxuICAgICAgICBzcmNIID0gcGFpckluZm8uc3JjSCxcbiAgICAgICAgdGd0VyA9IHBhaXJJbmZvLnRndFcsXG4gICAgICAgIHRndEggPSBwYWlySW5mby50Z3RIO1xuICAgIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gICAgdmFyIGRJbmNsdWRlc05vZGVCb2R5ID0gZWRnZURpc3RhbmNlcyAhPT0gJ25vZGUtcG9zaXRpb24nO1xuICAgIHZhciB0YXhpRGlyID0gZWRnZS5wc3R5bGUoJ3RheGktZGlyZWN0aW9uJykudmFsdWU7XG4gICAgdmFyIHJhd1RheGlEaXIgPSB0YXhpRGlyOyAvLyB1bnByb2Nlc3NlZCB2YWx1ZVxuXG4gICAgdmFyIHRheGlUdXJuID0gZWRnZS5wc3R5bGUoJ3RheGktdHVybicpO1xuICAgIHZhciB0dXJuSXNQZXJjZW50ID0gdGF4aVR1cm4udW5pdHMgPT09ICclJztcbiAgICB2YXIgdGF4aVR1cm5QZlZhbCA9IHRheGlUdXJuLnBmVmFsdWU7XG4gICAgdmFyIHR1cm5Jc05lZ2F0aXZlID0gdGF4aVR1cm5QZlZhbCA8IDA7IC8vIGkuZS4gZnJvbSB0YXJnZXQgc2lkZVxuXG4gICAgdmFyIG1pbkQgPSBlZGdlLnBzdHlsZSgndGF4aS10dXJuLW1pbi1kaXN0YW5jZScpLnBmVmFsdWU7XG4gICAgdmFyIGR3ID0gZEluY2x1ZGVzTm9kZUJvZHkgPyAoc3JjVyArIHRndFcpIC8gMiA6IDA7XG4gICAgdmFyIGRoID0gZEluY2x1ZGVzTm9kZUJvZHkgPyAoc3JjSCArIHRndEgpIC8gMiA6IDA7XG4gICAgdmFyIHBkeCA9IHBvc1B0cy54MiAtIHBvc1B0cy54MTtcbiAgICB2YXIgcGR5ID0gcG9zUHRzLnkyIC0gcG9zUHRzLnkxOyAvLyB0YWtlIGF3YXkgdGhlIGVmZmVjdGl2ZSB3L2ggZnJvbSB0aGUgbWFnbml0dWRlIG9mIHRoZSBkZWx0YSB2YWx1ZVxuXG4gICAgdmFyIHN1YkRXSCA9IGZ1bmN0aW9uIHN1YkRXSChkeHksIGR3aCkge1xuICAgICAgaWYgKGR4eSA+IDApIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGR4eSAtIGR3aCwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oZHh5ICsgZHdoLCAwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGR4ID0gc3ViRFdIKHBkeCwgZHcpO1xuICAgIHZhciBkeSA9IHN1YkRXSChwZHksIGRoKTtcbiAgICB2YXIgaXNFeHBsaWNpdERpciA9IGZhbHNlO1xuXG4gICAgaWYgKHJhd1RheGlEaXIgPT09IEFVVE8pIHtcbiAgICAgIHRheGlEaXIgPSBNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgPyBIT1JJWk9OVEFMIDogVkVSVElDQUw7XG4gICAgfSBlbHNlIGlmIChyYXdUYXhpRGlyID09PSBVUFdBUkQgfHwgcmF3VGF4aURpciA9PT0gRE9XTldBUkQpIHtcbiAgICAgIHRheGlEaXIgPSBWRVJUSUNBTDtcbiAgICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmF3VGF4aURpciA9PT0gTEVGVFdBUkQgfHwgcmF3VGF4aURpciA9PT0gUklHSFRXQVJEKSB7XG4gICAgICB0YXhpRGlyID0gSE9SSVpPTlRBTDtcbiAgICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBpc1ZlcnQgPSB0YXhpRGlyID09PSBWRVJUSUNBTDtcbiAgICB2YXIgbCA9IGlzVmVydCA/IGR5IDogZHg7XG4gICAgdmFyIHBsID0gaXNWZXJ0ID8gcGR5IDogcGR4O1xuICAgIHZhciBzZ25MID0gc2lnbnVtKHBsKTtcbiAgICB2YXIgZm9yY2VkRGlyID0gZmFsc2U7XG5cbiAgICBpZiAoIShpc0V4cGxpY2l0RGlyICYmICh0dXJuSXNQZXJjZW50IHx8IHR1cm5Jc05lZ2F0aXZlKSkgLy8gZm9yY2luZyBpbiB0aGlzIGNhc2Ugd291bGQgY2F1c2Ugd2VpcmQgZ3Jvd2luZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXG4gICAgJiYgKHJhd1RheGlEaXIgPT09IERPV05XQVJEICYmIHBsIDwgMCB8fCByYXdUYXhpRGlyID09PSBVUFdBUkQgJiYgcGwgPiAwIHx8IHJhd1RheGlEaXIgPT09IExFRlRXQVJEICYmIHBsID4gMCB8fCByYXdUYXhpRGlyID09PSBSSUdIVFdBUkQgJiYgcGwgPCAwKSkge1xuICAgICAgc2duTCAqPSAtMTtcbiAgICAgIGwgPSBzZ25MICogTWF0aC5hYnMobCk7XG4gICAgICBmb3JjZWREaXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBkO1xuXG4gICAgaWYgKHR1cm5Jc1BlcmNlbnQpIHtcbiAgICAgIHZhciBwID0gdGF4aVR1cm5QZlZhbCA8IDAgPyAxICsgdGF4aVR1cm5QZlZhbCA6IHRheGlUdXJuUGZWYWw7XG4gICAgICBkID0gcCAqIGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrID0gdGF4aVR1cm5QZlZhbCA8IDAgPyBsIDogMDtcbiAgICAgIGQgPSBrICsgdGF4aVR1cm5QZlZhbCAqIHNnbkw7XG4gICAgfVxuXG4gICAgdmFyIGdldElzVG9vQ2xvc2UgPSBmdW5jdGlvbiBnZXRJc1Rvb0Nsb3NlKGQpIHtcbiAgICAgIHJldHVybiBNYXRoLmFicyhkKSA8IG1pbkQgfHwgTWF0aC5hYnMoZCkgPj0gTWF0aC5hYnMobCk7XG4gICAgfTtcblxuICAgIHZhciBpc1Rvb0Nsb3NlU3JjID0gZ2V0SXNUb29DbG9zZShkKTtcbiAgICB2YXIgaXNUb29DbG9zZVRndCA9IGdldElzVG9vQ2xvc2UoTWF0aC5hYnMobCkgLSBNYXRoLmFicyhkKSk7XG4gICAgdmFyIGlzVG9vQ2xvc2UgPSBpc1Rvb0Nsb3NlU3JjIHx8IGlzVG9vQ2xvc2VUZ3Q7XG5cbiAgICBpZiAoaXNUb29DbG9zZSAmJiAhZm9yY2VkRGlyKSB7XG4gICAgICAvLyBub24taWRlYWwgcm91dGluZ1xuICAgICAgaWYgKGlzVmVydCkge1xuICAgICAgICAvLyB2ZXJ0aWNhbCBmYWxsYmFja3NcbiAgICAgICAgdmFyIGxTaGFwZUluc2lkZVNyYyA9IE1hdGguYWJzKHBsKSA8PSBzcmNIIC8gMjtcbiAgICAgICAgdmFyIGxTaGFwZUluc2lkZVRndCA9IE1hdGguYWJzKHBkeCkgPD0gdGd0VyAvIDI7XG5cbiAgICAgICAgaWYgKGxTaGFwZUluc2lkZVNyYykge1xuICAgICAgICAgIC8vIGhvcml6b250YWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgICAgdmFyIHggPSAocG9zUHRzLngxICsgcG9zUHRzLngyKSAvIDI7XG4gICAgICAgICAgdmFyIHkxID0gcG9zUHRzLnkxLFxuICAgICAgICAgICAgICB5MiA9IHBvc1B0cy55MjtcbiAgICAgICAgICBycy5zZWdwdHMgPSBbeCwgeTEsIHgsIHkyXTtcbiAgICAgICAgfSBlbHNlIGlmIChsU2hhcGVJbnNpZGVUZ3QpIHtcbiAgICAgICAgICAvLyB2ZXJ0aWNhbCBaLXNoYXBlIChkaXN0YW5jZSBub3QgcmVzcGVjdGVkKVxuICAgICAgICAgIHZhciB5ID0gKHBvc1B0cy55MSArIHBvc1B0cy55MikgLyAyO1xuICAgICAgICAgIHZhciB4MSA9IHBvc1B0cy54MSxcbiAgICAgICAgICAgICAgeDIgPSBwb3NQdHMueDI7XG4gICAgICAgICAgcnMuc2VncHRzID0gW3gxLCB5LCB4MiwgeV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTC1zaGFwZSBmYWxsYmFjayAodHVybiBkaXN0YW5jZSBub3QgcmVzcGVjdGVkLCBidXQgd29ya3Mgd2VsbCB3aXRoIHRyZWUgc2libGluZ3MpXG4gICAgICAgICAgcnMuc2VncHRzID0gW3Bvc1B0cy54MSwgcG9zUHRzLnkyXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCBmYWxsYmFja3NcbiAgICAgICAgdmFyIF9sU2hhcGVJbnNpZGVTcmMgPSBNYXRoLmFicyhwbCkgPD0gc3JjVyAvIDI7XG5cbiAgICAgICAgdmFyIF9sU2hhcGVJbnNpZGVUZ3QgPSBNYXRoLmFicyhwZHkpIDw9IHRndEggLyAyO1xuXG4gICAgICAgIGlmIChfbFNoYXBlSW5zaWRlU3JjKSB7XG4gICAgICAgICAgLy8gdmVydGljYWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgICAgdmFyIF95ID0gKHBvc1B0cy55MSArIHBvc1B0cy55MikgLyAyO1xuXG4gICAgICAgICAgdmFyIF94ID0gcG9zUHRzLngxLFxuICAgICAgICAgICAgICBfeDIgPSBwb3NQdHMueDI7XG4gICAgICAgICAgcnMuc2VncHRzID0gW194LCBfeSwgX3gyLCBfeV07XG4gICAgICAgIH0gZWxzZSBpZiAoX2xTaGFwZUluc2lkZVRndCkge1xuICAgICAgICAgIC8vIGhvcml6b250YWwgWi1zaGFwZSAodHVybiBkaXN0YW5jZSBub3QgcmVzcGVjdGVkKVxuICAgICAgICAgIHZhciBfeDMgPSAocG9zUHRzLngxICsgcG9zUHRzLngyKSAvIDI7XG5cbiAgICAgICAgICB2YXIgX3kyID0gcG9zUHRzLnkxLFxuICAgICAgICAgICAgICBfeTMgPSBwb3NQdHMueTI7XG4gICAgICAgICAgcnMuc2VncHRzID0gW194MywgX3kyLCBfeDMsIF95M107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTC1zaGFwZSAodHVybiBkaXN0YW5jZSBub3QgcmVzcGVjdGVkLCBidXQgd29ya3Mgd2VsbCBmb3IgdHJlZSBzaWJsaW5ncylcbiAgICAgICAgICBycy5zZWdwdHMgPSBbcG9zUHRzLngyLCBwb3NQdHMueTFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlkZWFsIHJvdXRpbmdcbiAgICAgIGlmIChpc1ZlcnQpIHtcbiAgICAgICAgdmFyIF95NCA9IHBvc1B0cy55MSArIGQgKyAoZEluY2x1ZGVzTm9kZUJvZHkgPyBzcmNIIC8gMiAqIHNnbkwgOiAwKTtcblxuICAgICAgICB2YXIgX3g0ID0gcG9zUHRzLngxLFxuICAgICAgICAgICAgX3g1ID0gcG9zUHRzLngyO1xuICAgICAgICBycy5zZWdwdHMgPSBbX3g0LCBfeTQsIF94NSwgX3k0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGhvcml6b250YWxcbiAgICAgICAgdmFyIF94NiA9IHBvc1B0cy54MSArIGQgKyAoZEluY2x1ZGVzTm9kZUJvZHkgPyBzcmNXIC8gMiAqIHNnbkwgOiAwKTtcblxuICAgICAgICB2YXIgX3k1ID0gcG9zUHRzLnkxLFxuICAgICAgICAgICAgX3k2ID0gcG9zUHRzLnkyO1xuICAgICAgICBycy5zZWdwdHMgPSBbX3g2LCBfeTUsIF94NiwgX3k2XTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQlJwJGMudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbykge1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7IC8vIGNhbiBvbmx5IGNvcnJlY3QgYmV6aWVycyBmb3Igbm93Li4uXG5cbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdiZXppZXInKSB7XG4gICAgICB2YXIgc3JjUG9zID0gcGFpckluZm8uc3JjUG9zLFxuICAgICAgICAgIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyxcbiAgICAgICAgICBzcmNXID0gcGFpckluZm8uc3JjVyxcbiAgICAgICAgICBzcmNIID0gcGFpckluZm8uc3JjSCxcbiAgICAgICAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICAgICAgICB0Z3RIID0gcGFpckluZm8udGd0SCxcbiAgICAgICAgICBzcmNTaGFwZSA9IHBhaXJJbmZvLnNyY1NoYXBlLFxuICAgICAgICAgIHRndFNoYXBlID0gcGFpckluZm8udGd0U2hhcGU7XG4gICAgICB2YXIgYmFkU3RhcnQgPSAhbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKTtcbiAgICAgIHZhciBiYWRBU3RhcnQgPSAhbnVtYmVyJDEocnMuYXJyb3dTdGFydFgpIHx8ICFudW1iZXIkMShycy5hcnJvd1N0YXJ0WSk7XG4gICAgICB2YXIgYmFkRW5kID0gIW51bWJlciQxKHJzLmVuZFgpIHx8ICFudW1iZXIkMShycy5lbmRZKTtcbiAgICAgIHZhciBiYWRBRW5kID0gIW51bWJlciQxKHJzLmFycm93RW5kWCkgfHwgIW51bWJlciQxKHJzLmFycm93RW5kWSk7XG4gICAgICB2YXIgbWluQ3BBRGlzdEZhY3RvciA9IDM7XG4gICAgICB2YXIgYXJyb3dXID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMuYXJyb3dTaGFwZVdpZHRoO1xuICAgICAgdmFyIG1pbkNwQURpc3QgPSBtaW5DcEFEaXN0RmFjdG9yICogYXJyb3dXO1xuICAgICAgdmFyIHN0YXJ0QUNwRGlzdCA9IGRpc3Qoe1xuICAgICAgICB4OiBycy5jdHJscHRzWzBdLFxuICAgICAgICB5OiBycy5jdHJscHRzWzFdXG4gICAgICB9LCB7XG4gICAgICAgIHg6IHJzLnN0YXJ0WCxcbiAgICAgICAgeTogcnMuc3RhcnRZXG4gICAgICB9KTtcbiAgICAgIHZhciBjbG9zZVN0YXJ0QUNwID0gc3RhcnRBQ3BEaXN0IDwgbWluQ3BBRGlzdDtcbiAgICAgIHZhciBlbmRBQ3BEaXN0ID0gZGlzdCh7XG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0sXG4gICAgICAgIHk6IHJzLmN0cmxwdHNbMV1cbiAgICAgIH0sIHtcbiAgICAgICAgeDogcnMuZW5kWCxcbiAgICAgICAgeTogcnMuZW5kWVxuICAgICAgfSk7XG4gICAgICB2YXIgY2xvc2VFbmRBQ3AgPSBlbmRBQ3BEaXN0IDwgbWluQ3BBRGlzdDtcbiAgICAgIHZhciBvdmVybGFwcGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoYmFkU3RhcnQgfHwgYmFkQVN0YXJ0IHx8IGNsb3NlU3RhcnRBQ3ApIHtcbiAgICAgICAgb3ZlcmxhcHBpbmcgPSB0cnVlOyAvLyBwcm9qZWN0IGNvbnRyb2wgcG9pbnQgYWxvbmcgbGluZSBmcm9tIHNyYyBjZW50cmUgdG8gb3V0c2lkZSB0aGUgc3JjIHNoYXBlXG4gICAgICAgIC8vIChvdGhlcndpc2UgaW50ZXJzZWN0aW9uIHdpbGwgeWllbGQgbm90aGluZylcblxuICAgICAgICB2YXIgY3BEID0ge1xuICAgICAgICAgIC8vIGRlbHRhXG4gICAgICAgICAgeDogcnMuY3RybHB0c1swXSAtIHNyY1Bvcy54LFxuICAgICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gLSBzcmNQb3MueVxuICAgICAgICB9O1xuICAgICAgICB2YXIgY3BMID0gTWF0aC5zcXJ0KGNwRC54ICogY3BELnggKyBjcEQueSAqIGNwRC55KTsgLy8gbGVuZ3RoIG9mIGxpbmVcblxuICAgICAgICB2YXIgY3BNID0ge1xuICAgICAgICAgIC8vIG5vcm1hbGlzZWQgZGVsdGFcbiAgICAgICAgICB4OiBjcEQueCAvIGNwTCxcbiAgICAgICAgICB5OiBjcEQueSAvIGNwTFxuICAgICAgICB9O1xuICAgICAgICB2YXIgcmFkaXVzID0gTWF0aC5tYXgoc3JjVywgc3JjSCk7XG4gICAgICAgIHZhciBjcFByb2ogPSB7XG4gICAgICAgICAgLy8gKjIgcmFkaXVzIGd1YXJhbnRlZXMgb3V0c2lkZSBzaGFwZVxuICAgICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gKyBjcE0ueCAqIDIgKiByYWRpdXMsXG4gICAgICAgICAgeTogcnMuY3RybHB0c1sxXSArIGNwTS55ICogMiAqIHJhZGl1c1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3JjQ3RybFB0SW50biA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCBjcFByb2oueCwgY3BQcm9qLnksIDApO1xuXG4gICAgICAgIGlmIChjbG9zZVN0YXJ0QUNwKSB7XG4gICAgICAgICAgcnMuY3RybHB0c1swXSA9IHJzLmN0cmxwdHNbMF0gKyBjcE0ueCAqIChtaW5DcEFEaXN0IC0gc3RhcnRBQ3BEaXN0KTtcbiAgICAgICAgICBycy5jdHJscHRzWzFdID0gcnMuY3RybHB0c1sxXSArIGNwTS55ICogKG1pbkNwQURpc3QgLSBzdGFydEFDcERpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJzLmN0cmxwdHNbMF0gPSBzcmNDdHJsUHRJbnRuWzBdICsgY3BNLnggKiBtaW5DcEFEaXN0O1xuICAgICAgICAgIHJzLmN0cmxwdHNbMV0gPSBzcmNDdHJsUHRJbnRuWzFdICsgY3BNLnkgKiBtaW5DcEFEaXN0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChiYWRFbmQgfHwgYmFkQUVuZCB8fCBjbG9zZUVuZEFDcCkge1xuICAgICAgICBvdmVybGFwcGluZyA9IHRydWU7IC8vIHByb2plY3QgY29udHJvbCBwb2ludCBhbG9uZyBsaW5lIGZyb20gdGd0IGNlbnRyZSB0byBvdXRzaWRlIHRoZSB0Z3Qgc2hhcGVcbiAgICAgICAgLy8gKG90aGVyd2lzZSBpbnRlcnNlY3Rpb24gd2lsbCB5aWVsZCBub3RoaW5nKVxuXG4gICAgICAgIHZhciBfY3BEID0ge1xuICAgICAgICAgIC8vIGRlbHRhXG4gICAgICAgICAgeDogcnMuY3RybHB0c1swXSAtIHRndFBvcy54LFxuICAgICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gLSB0Z3RQb3MueVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBfY3BMID0gTWF0aC5zcXJ0KF9jcEQueCAqIF9jcEQueCArIF9jcEQueSAqIF9jcEQueSk7IC8vIGxlbmd0aCBvZiBsaW5lXG5cblxuICAgICAgICB2YXIgX2NwTSA9IHtcbiAgICAgICAgICAvLyBub3JtYWxpc2VkIGRlbHRhXG4gICAgICAgICAgeDogX2NwRC54IC8gX2NwTCxcbiAgICAgICAgICB5OiBfY3BELnkgLyBfY3BMXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIF9yYWRpdXMgPSBNYXRoLm1heChzcmNXLCBzcmNIKTtcblxuICAgICAgICB2YXIgX2NwUHJvaiA9IHtcbiAgICAgICAgICAvLyAqMiByYWRpdXMgZ3VhcmFudGVlcyBvdXRzaWRlIHNoYXBlXG4gICAgICAgICAgeDogcnMuY3RybHB0c1swXSArIF9jcE0ueCAqIDIgKiBfcmFkaXVzLFxuICAgICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gKyBfY3BNLnkgKiAyICogX3JhZGl1c1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdGd0Q3RybFB0SW50biA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBfY3BQcm9qLngsIF9jcFByb2oueSwgMCk7XG5cbiAgICAgICAgaWYgKGNsb3NlRW5kQUNwKSB7XG4gICAgICAgICAgcnMuY3RybHB0c1swXSA9IHJzLmN0cmxwdHNbMF0gKyBfY3BNLnggKiAobWluQ3BBRGlzdCAtIGVuZEFDcERpc3QpO1xuICAgICAgICAgIHJzLmN0cmxwdHNbMV0gPSBycy5jdHJscHRzWzFdICsgX2NwTS55ICogKG1pbkNwQURpc3QgLSBlbmRBQ3BEaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBycy5jdHJscHRzWzBdID0gdGd0Q3RybFB0SW50blswXSArIF9jcE0ueCAqIG1pbkNwQURpc3Q7XG4gICAgICAgICAgcnMuY3RybHB0c1sxXSA9IHRndEN0cmxQdEludG5bMV0gKyBfY3BNLnkgKiBtaW5DcEFEaXN0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGFwcGluZykge1xuICAgICAgICAvLyByZWNhbGMgZW5kcHRzXG4gICAgICAgIHRoaXMuZmluZEVuZHBvaW50cyhlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQlJwJGMuc3RvcmVBbGxwdHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG5cbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdiZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnc2VsZicgfHwgcnMuZWRnZVR5cGUgPT09ICdjb21wb3VuZCcpIHtcbiAgICAgIHJzLmFsbHB0cyA9IFtdO1xuICAgICAgcnMuYWxscHRzLnB1c2gocnMuc3RhcnRYLCBycy5zdGFydFkpO1xuXG4gICAgICBmb3IgKHZhciBiID0gMDsgYiArIDEgPCBycy5jdHJscHRzLmxlbmd0aDsgYiArPSAyKSB7XG4gICAgICAgIC8vIGN0cmwgcHQgaXRzZWxmXG4gICAgICAgIHJzLmFsbHB0cy5wdXNoKHJzLmN0cmxwdHNbYl0sIHJzLmN0cmxwdHNbYiArIDFdKTsgLy8gdGhlIG1pZHB0IGJldHdlZW4gY3RybHB0cyBhcyBpbnRlcm1lZGlhdGUgZGVzdGluYXRpb24gcHRzXG5cbiAgICAgICAgaWYgKGIgKyAzIDwgcnMuY3RybHB0cy5sZW5ndGgpIHtcbiAgICAgICAgICBycy5hbGxwdHMucHVzaCgocnMuY3RybHB0c1tiXSArIHJzLmN0cmxwdHNbYiArIDJdKSAvIDIsIChycy5jdHJscHRzW2IgKyAxXSArIHJzLmN0cmxwdHNbYiArIDNdKSAvIDIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJzLmFsbHB0cy5wdXNoKHJzLmVuZFgsIHJzLmVuZFkpO1xuICAgICAgdmFyIG0sIG10O1xuXG4gICAgICBpZiAocnMuY3RybHB0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgICBtID0gcnMuYWxscHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgICBycy5taWRYID0gcnMuYWxscHRzW21dO1xuICAgICAgICBycy5taWRZID0gcnMuYWxscHRzW20gKyAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0gPSBycy5hbGxwdHMubGVuZ3RoIC8gMiAtIDM7XG4gICAgICAgIG10ID0gMC41O1xuICAgICAgICBycy5taWRYID0gcWJlemllckF0KHJzLmFsbHB0c1ttXSwgcnMuYWxscHRzW20gKyAyXSwgcnMuYWxscHRzW20gKyA0XSwgbXQpO1xuICAgICAgICBycy5taWRZID0gcWJlemllckF0KHJzLmFsbHB0c1ttICsgMV0sIHJzLmFsbHB0c1ttICsgM10sIHJzLmFsbHB0c1ttICsgNV0sIG10KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJzLmVkZ2VUeXBlID09PSAnc3RyYWlnaHQnKSB7XG4gICAgICAvLyBuZWVkIHRvIGNhbGMgdGhlc2UgYWZ0ZXIgZW5kcHRzXG4gICAgICBycy5hbGxwdHMgPSBbcnMuc3RhcnRYLCBycy5zdGFydFksIHJzLmVuZFgsIHJzLmVuZFldOyAvLyBkZWZhdWx0IG1pZHB0IGZvciBsYWJlbHMgZXRjXG5cbiAgICAgIHJzLm1pZFggPSAocnMuc3RhcnRYICsgcnMuZW5kWCArIHJzLmFycm93U3RhcnRYICsgcnMuYXJyb3dFbmRYKSAvIDQ7XG4gICAgICBycy5taWRZID0gKHJzLnN0YXJ0WSArIHJzLmVuZFkgKyBycy5hcnJvd1N0YXJ0WSArIHJzLmFycm93RW5kWSkgLyA0O1xuICAgIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycpIHtcbiAgICAgIHJzLmFsbHB0cyA9IFtdO1xuICAgICAgcnMuYWxscHRzLnB1c2gocnMuc3RhcnRYLCBycy5zdGFydFkpO1xuICAgICAgcnMuYWxscHRzLnB1c2guYXBwbHkocnMuYWxscHRzLCBycy5zZWdwdHMpO1xuICAgICAgcnMuYWxscHRzLnB1c2gocnMuZW5kWCwgcnMuZW5kWSk7XG5cbiAgICAgIGlmIChycy5zZWdwdHMubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgICAgICB2YXIgaTIgPSBycy5zZWdwdHMubGVuZ3RoIC8gMjtcbiAgICAgICAgdmFyIGkxID0gaTIgLSAyO1xuICAgICAgICBycy5taWRYID0gKHJzLnNlZ3B0c1tpMV0gKyBycy5zZWdwdHNbaTJdKSAvIDI7XG4gICAgICAgIHJzLm1pZFkgPSAocnMuc2VncHRzW2kxICsgMV0gKyBycy5zZWdwdHNbaTIgKyAxXSkgLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9pID0gcnMuc2VncHRzLmxlbmd0aCAvIDIgLSAxO1xuXG4gICAgICAgIHJzLm1pZFggPSBycy5zZWdwdHNbX2ldO1xuICAgICAgICBycy5taWRZID0gcnMuc2VncHRzW19pICsgMV07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJScCRjLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuXG4gICAgaWYgKHJzLm5vZGVzT3ZlcmxhcCB8fCBudW1iZXIkMShycy5zdGFydFgpICYmIG51bWJlciQxKHJzLnN0YXJ0WSkgJiYgbnVtYmVyJDEocnMuZW5kWCkgJiYgbnVtYmVyJDEocnMuZW5kWSkpIHtcbiAgICAgIHJzLmxvZ2dlZEVyciA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXJzLmxvZ2dlZEVycikge1xuICAgICAgICBycy5sb2dnZWRFcnIgPSB0cnVlO1xuICAgICAgICB3YXJuKCdFZGdlIGAnICsgZWRnZS5pZCgpICsgJ2AgaGFzIGludmFsaWQgZW5kcG9pbnRzIGFuZCBzbyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRyYXcuICBBZGp1c3QgeW91ciBlZGdlIHN0eWxlIChlLmcuIGNvbnRyb2wgcG9pbnRzKSBhY2NvcmRpbmdseSBvciB1c2UgYW4gYWx0ZXJuYXRpdmUgZWRnZSB0eXBlLiAgVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvdXIgd2hlbiB0aGUgc291cmNlIG5vZGUgYW5kIHRoZSB0YXJnZXQgbm9kZSBvdmVybGFwLicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCUnAkYy5maW5kRWRnZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoZWRnZXMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCFlZGdlcyB8fCBlZGdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciBoYXNoVGFibGUgPSB7XG4gICAgICBtYXA6IG5ldyBNYXAkMigpLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQocGFpcklkKSB7XG4gICAgICAgIHZhciBtYXAyID0gdGhpcy5tYXAuZ2V0KHBhaXJJZFswXSk7XG5cbiAgICAgICAgaWYgKG1hcDIgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBtYXAyLmdldChwYWlySWRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQocGFpcklkLCB2YWwpIHtcbiAgICAgICAgdmFyIG1hcDIgPSB0aGlzLm1hcC5nZXQocGFpcklkWzBdKTtcblxuICAgICAgICBpZiAobWFwMiA9PSBudWxsKSB7XG4gICAgICAgICAgbWFwMiA9IG5ldyBNYXAkMigpO1xuICAgICAgICAgIHRoaXMubWFwLnNldChwYWlySWRbMF0sIG1hcDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwMi5zZXQocGFpcklkWzFdLCB2YWwpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHBhaXJJZHMgPSBbXTtcbiAgICB2YXIgaGF5c3RhY2tFZGdlcyA9IFtdOyAvLyBjcmVhdGUgYSB0YWJsZSBvZiBlZGdlIChzcmMsIHRndCkgPT4gbGlzdCBvZiBlZGdlcyBiZXR3ZWVuIHRoZW1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgICAgdmFyIGN1cnZlU3R5bGUgPSBlZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTsgLy8gaWdub3JlIGVkZ2VzIHdobyBhcmUgbm90IHRvIGJlIGRpc3BsYXllZFxuICAgICAgLy8gdGhleSBzaG91bGRuJ3QgdGFrZSB1cCBzcGFjZVxuXG4gICAgICBpZiAoZWRnZS5yZW1vdmVkKCkgfHwgIWVkZ2UudGFrZXNVcFNwYWNlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnaGF5c3RhY2snKSB7XG4gICAgICAgIGhheXN0YWNrRWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBlZGdlSXNVbmJ1bmRsZWQgPSBjdXJ2ZVN0eWxlID09PSAndW5idW5kbGVkLWJlemllcicgfHwgY3VydmVTdHlsZSA9PT0gJ3NlZ21lbnRzJyB8fCBjdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQnIHx8IGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodC10cmlhbmdsZScgfHwgY3VydmVTdHlsZSA9PT0gJ3RheGknO1xuICAgICAgdmFyIGVkZ2VJc0JlemllciA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlID09PSAnYmV6aWVyJztcbiAgICAgIHZhciBzcmMgPSBfcC5zb3VyY2U7XG4gICAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgICAgdmFyIHNyY0luZGV4ID0gc3JjLnBvb2xJbmRleCgpO1xuICAgICAgdmFyIHRndEluZGV4ID0gdGd0LnBvb2xJbmRleCgpO1xuICAgICAgdmFyIHBhaXJJZCA9IFtzcmNJbmRleCwgdGd0SW5kZXhdLnNvcnQoKTtcbiAgICAgIHZhciB0YWJsZUVudHJ5ID0gaGFzaFRhYmxlLmdldChwYWlySWQpO1xuXG4gICAgICBpZiAodGFibGVFbnRyeSA9PSBudWxsKSB7XG4gICAgICAgIHRhYmxlRW50cnkgPSB7XG4gICAgICAgICAgZWxlczogW11cbiAgICAgICAgfTtcbiAgICAgICAgaGFzaFRhYmxlLnNldChwYWlySWQsIHRhYmxlRW50cnkpO1xuICAgICAgICBwYWlySWRzLnB1c2gocGFpcklkKTtcbiAgICAgIH1cblxuICAgICAgdGFibGVFbnRyeS5lbGVzLnB1c2goZWRnZSk7XG5cbiAgICAgIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICAgICAgdGFibGVFbnRyeS5oYXNVbmJ1bmRsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRnZUlzQmV6aWVyKSB7XG4gICAgICAgIHRhYmxlRW50cnkuaGFzQmV6aWVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIGZvciBlYWNoIHBhaXIgKHNyYywgdGd0KSwgY3JlYXRlIHRoZSBjdHJsIHB0c1xuICAgIC8vIE5lc3RlZCBmb3IgbG9vcCBpcyBPSzsgdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIGJvdGggbG9vcHMgPSBlZGdlQ291bnRcblxuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AocCkge1xuICAgICAgdmFyIHBhaXJJZCA9IHBhaXJJZHNbcF07XG4gICAgICB2YXIgcGFpckluZm8gPSBoYXNoVGFibGUuZ2V0KHBhaXJJZCk7XG4gICAgICB2YXIgc3dhcHBlZHBhaXJJbmZvID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIXBhaXJJbmZvLmhhc1VuYnVuZGxlZCkge1xuICAgICAgICB2YXIgcGxsRWRnZXMgPSBwYWlySW5mby5lbGVzWzBdLnBhcmFsbGVsRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5pc0J1bmRsZWRCZXppZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFyQXJyYXkocGFpckluZm8uZWxlcyk7XG4gICAgICAgIHBsbEVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICByZXR1cm4gcGFpckluZm8uZWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9KTsgLy8gZm9yIGVhY2ggcGFpciBpZCwgdGhlIGVkZ2VzIHNob3VsZCBiZSBzb3J0ZWQgYnkgaW5kZXhcblxuICAgICAgICBwYWlySW5mby5lbGVzLnNvcnQoZnVuY3Rpb24gKGVkZ2UxLCBlZGdlMikge1xuICAgICAgICAgIHJldHVybiBlZGdlMS5wb29sSW5kZXgoKSAtIGVkZ2UyLnBvb2xJbmRleCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0RWRnZSA9IHBhaXJJbmZvLmVsZXNbMF07XG4gICAgICB2YXIgc3JjID0gZmlyc3RFZGdlLnNvdXJjZSgpO1xuICAgICAgdmFyIHRndCA9IGZpcnN0RWRnZS50YXJnZXQoKTsgLy8gbWFrZSBzdXJlIHNyYy90Z3QgZGlzdGluY3Rpb24gaXMgY29uc2lzdGVudCB3LnIudC4gcGFpcklkXG5cbiAgICAgIGlmIChzcmMucG9vbEluZGV4KCkgPiB0Z3QucG9vbEluZGV4KCkpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBzcmM7XG4gICAgICAgIHNyYyA9IHRndDtcbiAgICAgICAgdGd0ID0gdGVtcDtcbiAgICAgIH1cblxuICAgICAgdmFyIHNyY1BvcyA9IHBhaXJJbmZvLnNyY1BvcyA9IHNyYy5wb3NpdGlvbigpO1xuICAgICAgdmFyIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyA9IHRndC5wb3NpdGlvbigpO1xuICAgICAgdmFyIHNyY1cgPSBwYWlySW5mby5zcmNXID0gc3JjLm91dGVyV2lkdGgoKTtcbiAgICAgIHZhciBzcmNIID0gcGFpckluZm8uc3JjSCA9IHNyYy5vdXRlckhlaWdodCgpO1xuICAgICAgdmFyIHRndFcgPSBwYWlySW5mby50Z3RXID0gdGd0Lm91dGVyV2lkdGgoKTtcbiAgICAgIHZhciB0Z3RIID0gcGFpckluZm8udGd0SCA9IHRndC5vdXRlckhlaWdodCgpO1xuXG4gICAgICB2YXIgc3JjU2hhcGUgPSBwYWlySW5mby5zcmNTaGFwZSA9IHIubm9kZVNoYXBlc1tfdGhpcy5nZXROb2RlU2hhcGUoc3JjKV07XG5cbiAgICAgIHZhciB0Z3RTaGFwZSA9IHBhaXJJbmZvLnRndFNoYXBlID0gci5ub2RlU2hhcGVzW190aGlzLmdldE5vZGVTaGFwZSh0Z3QpXTtcblxuICAgICAgcGFpckluZm8uZGlyQ291bnRzID0ge1xuICAgICAgICAnbm9ydGgnOiAwLFxuICAgICAgICAnd2VzdCc6IDAsXG4gICAgICAgICdzb3V0aCc6IDAsXG4gICAgICAgICdlYXN0JzogMCxcbiAgICAgICAgJ25vcnRod2VzdCc6IDAsXG4gICAgICAgICdzb3V0aHdlc3QnOiAwLFxuICAgICAgICAnbm9ydGhlYXN0JzogMCxcbiAgICAgICAgJ3NvdXRoZWFzdCc6IDBcbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHBhaXJJbmZvLmVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgX2VkZ2UgPSBwYWlySW5mby5lbGVzW19pMl07XG4gICAgICAgIHZhciBycyA9IF9lZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuXG4gICAgICAgIHZhciBfY3VydmVTdHlsZSA9IF9lZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcblxuICAgICAgICB2YXIgX2VkZ2VJc1VuYnVuZGxlZCA9IF9jdXJ2ZVN0eWxlID09PSAndW5idW5kbGVkLWJlemllcicgfHwgX2N1cnZlU3R5bGUgPT09ICdzZWdtZW50cycgfHwgX2N1cnZlU3R5bGUgPT09ICd0YXhpJzsgLy8gd2hldGhlciB0aGUgbm9ybWFsaXNlZCBwYWlyIG9yZGVyIGlzIHRoZSByZXZlcnNlIG9mIHRoZSBlZGdlJ3Mgc3JjLXRndCBvcmRlclxuXG5cbiAgICAgICAgdmFyIGVkZ2VJc1N3YXBwZWQgPSAhc3JjLnNhbWUoX2VkZ2Uuc291cmNlKCkpO1xuXG4gICAgICAgIGlmICghcGFpckluZm8uY2FsY3VsYXRlZEludGVyc2VjdGlvbiAmJiBzcmMgIT09IHRndCAmJiAocGFpckluZm8uaGFzQmV6aWVyIHx8IHBhaXJJbmZvLmhhc1VuYnVuZGxlZCkpIHtcbiAgICAgICAgICBwYWlySW5mby5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uID0gdHJ1ZTsgLy8gcHQgb3V0c2lkZSBzcmMgc2hhcGUgdG8gY2FsYyBkaXN0YW5jZS9kaXNwbGFjZW1lbnQgZnJvbSBzcmMgdG8gdGd0XG5cbiAgICAgICAgICB2YXIgc3JjT3V0c2lkZSA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCB0Z3RQb3MueCwgdGd0UG9zLnksIDApO1xuICAgICAgICAgIHZhciBzcmNJbnRuID0gcGFpckluZm8uc3JjSW50biA9IHNyY091dHNpZGU7IC8vIHB0IG91dHNpZGUgdGd0IHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuXG4gICAgICAgICAgdmFyIHRndE91dHNpZGUgPSB0Z3RTaGFwZS5pbnRlcnNlY3RMaW5lKHRndFBvcy54LCB0Z3RQb3MueSwgdGd0VywgdGd0SCwgc3JjUG9zLngsIHNyY1Bvcy55LCAwKTtcbiAgICAgICAgICB2YXIgdGd0SW50biA9IHBhaXJJbmZvLnRndEludG4gPSB0Z3RPdXRzaWRlO1xuICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb25QdHMgPSBwYWlySW5mby5pbnRlcnNlY3Rpb25QdHMgPSB7XG4gICAgICAgICAgICB4MTogc3JjT3V0c2lkZVswXSxcbiAgICAgICAgICAgIHgyOiB0Z3RPdXRzaWRlWzBdLFxuICAgICAgICAgICAgeTE6IHNyY091dHNpZGVbMV0sXG4gICAgICAgICAgICB5MjogdGd0T3V0c2lkZVsxXVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyA9IHtcbiAgICAgICAgICAgIHgxOiBzcmNQb3MueCxcbiAgICAgICAgICAgIHgyOiB0Z3RQb3MueCxcbiAgICAgICAgICAgIHkxOiBzcmNQb3MueSxcbiAgICAgICAgICAgIHkyOiB0Z3RQb3MueVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIGR5ID0gdGd0T3V0c2lkZVsxXSAtIHNyY091dHNpZGVbMV07XG4gICAgICAgICAgdmFyIGR4ID0gdGd0T3V0c2lkZVswXSAtIHNyY091dHNpZGVbMF07XG4gICAgICAgICAgdmFyIGwgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICAgIHZhciB2ZWN0b3IgPSBwYWlySW5mby52ZWN0b3IgPSB7XG4gICAgICAgICAgICB4OiBkeCxcbiAgICAgICAgICAgIHk6IGR5XG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgdmVjdG9yTm9ybSA9IHBhaXJJbmZvLnZlY3Rvck5vcm0gPSB7XG4gICAgICAgICAgICB4OiB2ZWN0b3IueCAvIGwsXG4gICAgICAgICAgICB5OiB2ZWN0b3IueSAvIGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciB2ZWN0b3JOb3JtSW52ZXJzZSA9IHtcbiAgICAgICAgICAgIHg6IC12ZWN0b3JOb3JtLnksXG4gICAgICAgICAgICB5OiB2ZWN0b3JOb3JtLnhcbiAgICAgICAgICB9OyAvLyBpZiBub2RlIHNoYXBlcyBvdmVybGFwLCB0aGVuIG5vIGN0cmwgcHRzIHRvIGRyYXdcblxuICAgICAgICAgIHBhaXJJbmZvLm5vZGVzT3ZlcmxhcCA9ICFudW1iZXIkMShsKSB8fCB0Z3RTaGFwZS5jaGVja1BvaW50KHNyY091dHNpZGVbMF0sIHNyY091dHNpZGVbMV0sIDAsIHRndFcsIHRndEgsIHRndFBvcy54LCB0Z3RQb3MueSkgfHwgc3JjU2hhcGUuY2hlY2tQb2ludCh0Z3RPdXRzaWRlWzBdLCB0Z3RPdXRzaWRlWzFdLCAwLCBzcmNXLCBzcmNILCBzcmNQb3MueCwgc3JjUG9zLnkpO1xuICAgICAgICAgIHBhaXJJbmZvLnZlY3Rvck5vcm1JbnZlcnNlID0gdmVjdG9yTm9ybUludmVyc2U7XG4gICAgICAgICAgc3dhcHBlZHBhaXJJbmZvID0ge1xuICAgICAgICAgICAgbm9kZXNPdmVybGFwOiBwYWlySW5mby5ub2Rlc092ZXJsYXAsXG4gICAgICAgICAgICBkaXJDb3VudHM6IHBhaXJJbmZvLmRpckNvdW50cyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZWRJbnRlcnNlY3Rpb246IHRydWUsXG4gICAgICAgICAgICBoYXNCZXppZXI6IHBhaXJJbmZvLmhhc0JlemllcixcbiAgICAgICAgICAgIGhhc1VuYnVuZGxlZDogcGFpckluZm8uaGFzVW5idW5kbGVkLFxuICAgICAgICAgICAgZWxlczogcGFpckluZm8uZWxlcyxcbiAgICAgICAgICAgIHNyY1BvczogdGd0UG9zLFxuICAgICAgICAgICAgdGd0UG9zOiBzcmNQb3MsXG4gICAgICAgICAgICBzcmNXOiB0Z3RXLFxuICAgICAgICAgICAgc3JjSDogdGd0SCxcbiAgICAgICAgICAgIHRndFc6IHNyY1csXG4gICAgICAgICAgICB0Z3RIOiBzcmNILFxuICAgICAgICAgICAgc3JjSW50bjogdGd0SW50bixcbiAgICAgICAgICAgIHRndEludG46IHNyY0ludG4sXG4gICAgICAgICAgICBzcmNTaGFwZTogdGd0U2hhcGUsXG4gICAgICAgICAgICB0Z3RTaGFwZTogc3JjU2hhcGUsXG4gICAgICAgICAgICBwb3NQdHM6IHtcbiAgICAgICAgICAgICAgeDE6IHBvc1B0cy54MixcbiAgICAgICAgICAgICAgeTE6IHBvc1B0cy55MixcbiAgICAgICAgICAgICAgeDI6IHBvc1B0cy54MSxcbiAgICAgICAgICAgICAgeTI6IHBvc1B0cy55MVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludGVyc2VjdGlvblB0czoge1xuICAgICAgICAgICAgICB4MTogaW50ZXJzZWN0aW9uUHRzLngyLFxuICAgICAgICAgICAgICB5MTogaW50ZXJzZWN0aW9uUHRzLnkyLFxuICAgICAgICAgICAgICB4MjogaW50ZXJzZWN0aW9uUHRzLngxLFxuICAgICAgICAgICAgICB5MjogaW50ZXJzZWN0aW9uUHRzLnkxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVjdG9yOiB7XG4gICAgICAgICAgICAgIHg6IC12ZWN0b3IueCxcbiAgICAgICAgICAgICAgeTogLXZlY3Rvci55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVjdG9yTm9ybToge1xuICAgICAgICAgICAgICB4OiAtdmVjdG9yTm9ybS54LFxuICAgICAgICAgICAgICB5OiAtdmVjdG9yTm9ybS55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVjdG9yTm9ybUludmVyc2U6IHtcbiAgICAgICAgICAgICAgeDogLXZlY3Rvck5vcm1JbnZlcnNlLngsXG4gICAgICAgICAgICAgIHk6IC12ZWN0b3JOb3JtSW52ZXJzZS55XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXNzZWRQYWlySW5mbyA9IGVkZ2VJc1N3YXBwZWQgPyBzd2FwcGVkcGFpckluZm8gOiBwYWlySW5mbztcbiAgICAgICAgcnMubm9kZXNPdmVybGFwID0gcGFzc2VkUGFpckluZm8ubm9kZXNPdmVybGFwO1xuICAgICAgICBycy5zcmNJbnRuID0gcGFzc2VkUGFpckluZm8uc3JjSW50bjtcbiAgICAgICAgcnMudGd0SW50biA9IHBhc3NlZFBhaXJJbmZvLnRndEludG47XG5cbiAgICAgICAgaWYgKGhhc0NvbXBvdW5kcyAmJiAoc3JjLmlzUGFyZW50KCkgfHwgc3JjLmlzQ2hpbGQoKSB8fCB0Z3QuaXNQYXJlbnQoKSB8fCB0Z3QuaXNDaGlsZCgpKSAmJiAoc3JjLnBhcmVudHMoKS5hbnlTYW1lKHRndCkgfHwgdGd0LnBhcmVudHMoKS5hbnlTYW1lKHNyYykgfHwgc3JjLnNhbWUodGd0KSAmJiBzcmMuaXNQYXJlbnQoKSkpIHtcbiAgICAgICAgICBfdGhpcy5maW5kQ29tcG91bmRMb29wUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcmMgPT09IHRndCkge1xuICAgICAgICAgIF90aGlzLmZpbmRMb29wUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChfY3VydmVTdHlsZSA9PT0gJ3NlZ21lbnRzJykge1xuICAgICAgICAgIF90aGlzLmZpbmRTZWdtZW50c1BvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8pO1xuICAgICAgICB9IGVsc2UgaWYgKF9jdXJ2ZVN0eWxlID09PSAndGF4aScpIHtcbiAgICAgICAgICBfdGhpcy5maW5kVGF4aVBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8pO1xuICAgICAgICB9IGVsc2UgaWYgKF9jdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQnIHx8ICFfZWRnZUlzVW5idW5kbGVkICYmIHBhaXJJbmZvLmVsZXMubGVuZ3RoICUgMiA9PT0gMSAmJiBfaTIgPT09IE1hdGguZmxvb3IocGFpckluZm8uZWxlcy5sZW5ndGggLyAyKSkge1xuICAgICAgICAgIF90aGlzLmZpbmRTdHJhaWdodEVkZ2VQb2ludHMoX2VkZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmZpbmRCZXppZXJQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvLCBfaTIsIF9lZGdlSXNVbmJ1bmRsZWQsIGVkZ2VJc1N3YXBwZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuZmluZEVuZHBvaW50cyhfZWRnZSk7XG5cbiAgICAgICAgX3RoaXMudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8pO1xuXG4gICAgICAgIF90aGlzLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKF9lZGdlKTtcblxuICAgICAgICBfdGhpcy5zdG9yZUFsbHB0cyhfZWRnZSk7XG5cbiAgICAgICAgX3RoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoX2VkZ2UpO1xuXG4gICAgICAgIF90aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKF9lZGdlKTtcblxuICAgICAgICBfdGhpcy5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKF9lZGdlKTtcblxuICAgICAgICBfdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhfZWRnZSk7XG4gICAgICB9IC8vIGZvciBwYWlyIGVkZ2VzXG5cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwYWlySWRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICBfbG9vcChwKTtcbiAgICB9IC8vIGZvciBwYWlyIGlkc1xuICAgIC8vIGhheXN0YWNrcyBhdm9pZCB0aGUgZXhwZW5zZSBvZiBwYWlySW5mbyBzdHVmZiAoaW50ZXJzZWN0aW9ucyBldGMuKVxuXG5cbiAgICB0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhoYXlzdGFja0VkZ2VzKTtcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRQdHMocHRzKSB7XG4gICAgdmFyIHJldFB0cyA9IFtdO1xuXG4gICAgaWYgKHB0cyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHZhciB4ID0gcHRzW2ldO1xuICAgICAgdmFyIHkgPSBwdHNbaSArIDFdO1xuICAgICAgcmV0UHRzLnB1c2goe1xuICAgICAgICB4OiB4LFxuICAgICAgICB5OiB5XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0UHRzO1xuICB9XG5cbiAgQlJwJGMuZ2V0U2VnbWVudFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgdHlwZSA9IHJzLmVkZ2VUeXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzZWdtZW50cycpIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVkZ2UpO1xuICAgICAgcmV0dXJuIGdldFB0cyhycy5zZWdwdHMpO1xuICAgIH1cbiAgfTtcblxuICBCUnAkYy5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2JlemllcicgfHwgdHlwZSA9PT0gJ211bHRpYmV6aWVyJyB8fCB0eXBlID09PSAnc2VsZicgfHwgdHlwZSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgICByZXR1cm4gZ2V0UHRzKHJzLmN0cmxwdHMpO1xuICAgIH1cbiAgfTtcblxuICBCUnAkYy5nZXRFZGdlTWlkcG9pbnQgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJzLm1pZFgsXG4gICAgICB5OiBycy5taWRZXG4gICAgfTtcbiAgfTtcblxuICB2YXIgQlJwJGIgPSB7fTtcblxuICBCUnAkYi5tYW51YWxFbmRwdFRvUHggPSBmdW5jdGlvbiAobm9kZSwgcHJvcCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgbnBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgICB2YXIgdyA9IG5vZGUub3V0ZXJXaWR0aCgpO1xuICAgIHZhciBoID0gbm9kZS5vdXRlckhlaWdodCgpO1xuXG4gICAgaWYgKHByb3AudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgcCA9IFtwcm9wLnBmVmFsdWVbMF0sIHByb3AucGZWYWx1ZVsxXV07XG5cbiAgICAgIGlmIChwcm9wLnVuaXRzWzBdID09PSAnJScpIHtcbiAgICAgICAgcFswXSA9IHBbMF0gKiB3O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcC51bml0c1sxXSA9PT0gJyUnKSB7XG4gICAgICAgIHBbMV0gPSBwWzFdICogaDtcbiAgICAgIH1cblxuICAgICAgcFswXSArPSBucG9zLng7XG4gICAgICBwWzFdICs9IG5wb3MueTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5nbGUgPSBwcm9wLnBmVmFsdWVbMF07XG4gICAgICBhbmdsZSA9IC1NYXRoLlBJIC8gMiArIGFuZ2xlOyAvLyBzdGFydCBhdCAxMiBvJ2Nsb2NrXG5cbiAgICAgIHZhciBsID0gMiAqIE1hdGgubWF4KHcsIGgpO1xuICAgICAgdmFyIF9wID0gW25wb3MueCArIE1hdGguY29zKGFuZ2xlKSAqIGwsIG5wb3MueSArIE1hdGguc2luKGFuZ2xlKSAqIGxdO1xuICAgICAgcmV0dXJuIHIubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZShub2RlKV0uaW50ZXJzZWN0TGluZShucG9zLngsIG5wb3MueSwgdywgaCwgX3BbMF0sIF9wWzFdLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgQlJwJGIuZmluZEVuZHBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBpbnRlcnNlY3Q7XG4gICAgdmFyIHNvdXJjZSA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KClbMF07XG4gICAgdmFyIHNyY1BvcyA9IHNvdXJjZS5wb3NpdGlvbigpO1xuICAgIHZhciB0Z3RQb3MgPSB0YXJnZXQucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0QXJTaGFwZSA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgICB2YXIgc3JjQXJTaGFwZSA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgICB2YXIgdGd0RGlzdCA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlJykucGZWYWx1ZTtcbiAgICB2YXIgc3JjRGlzdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJykucGZWYWx1ZTtcbiAgICB2YXIgY3VydmVTdHlsZSA9IGVkZ2UucHN0eWxlKCdjdXJ2ZS1zdHlsZScpLnZhbHVlO1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGV0ID0gcnMuZWRnZVR5cGU7XG4gICAgdmFyIHRheGkgPSBjdXJ2ZVN0eWxlID09PSAndGF4aSc7XG4gICAgdmFyIHNlbGYgPSBldCA9PT0gJ3NlbGYnIHx8IGV0ID09PSAnY29tcG91bmQnO1xuICAgIHZhciBiZXppZXIgPSBldCA9PT0gJ2JlemllcicgfHwgZXQgPT09ICdtdWx0aWJlemllcicgfHwgc2VsZjtcbiAgICB2YXIgbXVsdGkgPSBldCAhPT0gJ2Jlemllcic7XG4gICAgdmFyIGxpbmVzID0gZXQgPT09ICdzdHJhaWdodCcgfHwgZXQgPT09ICdzZWdtZW50cyc7XG4gICAgdmFyIHNlZ21lbnRzID0gZXQgPT09ICdzZWdtZW50cyc7XG4gICAgdmFyIGhhc0VuZHB0cyA9IGJlemllciB8fCBtdWx0aSB8fCBsaW5lcztcbiAgICB2YXIgb3ZlcnJpZGVFbmRwdHMgPSBzZWxmIHx8IHRheGk7XG4gICAgdmFyIHNyY01hbkVuZHB0ID0gZWRnZS5wc3R5bGUoJ3NvdXJjZS1lbmRwb2ludCcpO1xuICAgIHZhciBzcmNNYW5FbmRwdFZhbCA9IG92ZXJyaWRlRW5kcHRzID8gJ291dHNpZGUtdG8tbm9kZScgOiBzcmNNYW5FbmRwdC52YWx1ZTtcbiAgICB2YXIgdGd0TWFuRW5kcHQgPSBlZGdlLnBzdHlsZSgndGFyZ2V0LWVuZHBvaW50Jyk7XG4gICAgdmFyIHRndE1hbkVuZHB0VmFsID0gb3ZlcnJpZGVFbmRwdHMgPyAnb3V0c2lkZS10by1ub2RlJyA6IHRndE1hbkVuZHB0LnZhbHVlO1xuICAgIHJzLnNyY01hbkVuZHB0ID0gc3JjTWFuRW5kcHQ7XG4gICAgcnMudGd0TWFuRW5kcHQgPSB0Z3RNYW5FbmRwdDtcbiAgICB2YXIgcDE7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiB0YXJnZXQgc2lkZVxuXG4gICAgdmFyIHAyOyAvLyBsYXN0IGtub3duIHBvaW50IG9mIGVkZ2Ugb24gc291cmNlIHNpZGVcblxuICAgIHZhciBwMV9pOyAvLyBwb2ludCB0byBpbnRlcnNlY3Qgd2l0aCB0YXJnZXQgc2hhcGVcblxuICAgIHZhciBwMl9pOyAvLyBwb2ludCB0byBpbnRlcnNlY3Qgd2l0aCBzb3VyY2Ugc2hhcGVcblxuICAgIGlmIChiZXppZXIpIHtcbiAgICAgIHZhciBjcFN0YXJ0ID0gW3JzLmN0cmxwdHNbMF0sIHJzLmN0cmxwdHNbMV1dO1xuICAgICAgdmFyIGNwRW5kID0gbXVsdGkgPyBbcnMuY3RybHB0c1tycy5jdHJscHRzLmxlbmd0aCAtIDJdLCBycy5jdHJscHRzW3JzLmN0cmxwdHMubGVuZ3RoIC0gMV1dIDogY3BTdGFydDtcbiAgICAgIHAxID0gY3BFbmQ7XG4gICAgICBwMiA9IGNwU3RhcnQ7XG4gICAgfSBlbHNlIGlmIChsaW5lcykge1xuICAgICAgdmFyIHNyY0Fycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3RndFBvcy54LCB0Z3RQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UoMCwgMik7XG4gICAgICB2YXIgdGd0QXJyb3dGcm9tUHQgPSAhc2VnbWVudHMgPyBbc3JjUG9zLngsIHNyY1Bvcy55XSA6IHJzLnNlZ3B0cy5zbGljZShycy5zZWdwdHMubGVuZ3RoIC0gMik7XG4gICAgICBwMSA9IHRndEFycm93RnJvbVB0O1xuICAgICAgcDIgPSBzcmNBcnJvd0Zyb21QdDtcbiAgICB9XG5cbiAgICBpZiAodGd0TWFuRW5kcHRWYWwgPT09ICdpbnNpZGUtdG8tbm9kZScpIHtcbiAgICAgIGludGVyc2VjdCA9IFt0Z3RQb3MueCwgdGd0UG9zLnldO1xuICAgIH0gZWxzZSBpZiAodGd0TWFuRW5kcHQudW5pdHMpIHtcbiAgICAgIGludGVyc2VjdCA9IHRoaXMubWFudWFsRW5kcHRUb1B4KHRhcmdldCwgdGd0TWFuRW5kcHQpO1xuICAgIH0gZWxzZSBpZiAodGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUnKSB7XG4gICAgICBpbnRlcnNlY3QgPSBycy50Z3RJbnRuOyAvLyB1c2UgY2FjaGVkIHZhbHVlIGZyb20gY3RybHB0IGNhbGNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRndE1hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1ub2RlJyB8fCB0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcpIHtcbiAgICAgICAgcDFfaSA9IHAxO1xuICAgICAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICAgIHAxX2kgPSBbc3JjUG9zLngsIHNyY1Bvcy55XTtcbiAgICAgIH1cblxuICAgICAgaW50ZXJzZWN0ID0gci5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKHRhcmdldCldLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0YXJnZXQub3V0ZXJXaWR0aCgpLCB0YXJnZXQub3V0ZXJIZWlnaHQoKSwgcDFfaVswXSwgcDFfaVsxXSwgMCk7XG5cbiAgICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICAgIHZhciB0cnMgPSB0YXJnZXQuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICAgIHZhciBsdyA9IHRycy5sYWJlbFdpZHRoO1xuICAgICAgICB2YXIgbGggPSB0cnMubGFiZWxIZWlnaHQ7XG4gICAgICAgIHZhciBseCA9IHRycy5sYWJlbFg7XG4gICAgICAgIHZhciBseSA9IHRycy5sYWJlbFk7XG4gICAgICAgIHZhciBsdzIgPSBsdyAvIDI7XG4gICAgICAgIHZhciBsaDIgPSBsaCAvIDI7XG4gICAgICAgIHZhciB2YSA9IHRhcmdldC5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhID09PSAndG9wJykge1xuICAgICAgICAgIGx5IC09IGxoMjtcbiAgICAgICAgfSBlbHNlIGlmICh2YSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBseSArPSBsaDI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGEgPSB0YXJnZXQucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnZhbHVlO1xuXG4gICAgICAgIGlmIChoYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgbHggLT0gbHcyO1xuICAgICAgICB9IGVsc2UgaWYgKGhhID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgbHggKz0gbHcyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDFfaVswXSwgcDFfaVsxXSwgW2x4IC0gbHcyLCBseSAtIGxoMiwgbHggKyBsdzIsIGx5IC0gbGgyLCBseCArIGx3MiwgbHkgKyBsaDIsIGx4IC0gbHcyLCBseSArIGxoMl0sIHRndFBvcy54LCB0Z3RQb3MueSk7XG5cbiAgICAgICAgaWYgKGxhYmVsSW50ZXJzZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgcmVmUHQgPSBzcmNQb3M7XG4gICAgICAgICAgdmFyIGludFNxZGlzdCA9IHNxZGlzdChyZWZQdCwgYXJyYXkycG9pbnQoaW50ZXJzZWN0KSk7XG4gICAgICAgICAgdmFyIGxhYkludFNxZGlzdCA9IHNxZGlzdChyZWZQdCwgYXJyYXkycG9pbnQobGFiZWxJbnRlcnNlY3QpKTtcbiAgICAgICAgICB2YXIgbWluU3FEaXN0ID0gaW50U3FkaXN0O1xuXG4gICAgICAgICAgaWYgKGxhYkludFNxZGlzdCA8IGludFNxZGlzdCkge1xuICAgICAgICAgICAgaW50ZXJzZWN0ID0gbGFiZWxJbnRlcnNlY3Q7XG4gICAgICAgICAgICBtaW5TcURpc3QgPSBsYWJJbnRTcWRpc3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhYmVsSW50ZXJzZWN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBsYWJJbnQyU3FEaXN0ID0gc3FkaXN0KHJlZlB0LCB7XG4gICAgICAgICAgICAgIHg6IGxhYmVsSW50ZXJzZWN0WzJdLFxuICAgICAgICAgICAgICB5OiBsYWJlbEludGVyc2VjdFszXVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsYWJJbnQyU3FEaXN0IDwgbWluU3FEaXN0KSB7XG4gICAgICAgICAgICAgIGludGVyc2VjdCA9IFtsYWJlbEludGVyc2VjdFsyXSwgbGFiZWxJbnRlcnNlY3RbM11dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhcnJvd0VuZCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMSwgci5hcnJvd1NoYXBlc1t0Z3RBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgdGd0RGlzdCk7XG4gICAgdmFyIGVkZ2VFbmQgPSBzaG9ydGVuSW50ZXJzZWN0aW9uKGludGVyc2VjdCwgcDEsIHIuYXJyb3dTaGFwZXNbdGd0QXJTaGFwZV0uZ2FwKGVkZ2UpICsgdGd0RGlzdCk7XG4gICAgcnMuZW5kWCA9IGVkZ2VFbmRbMF07XG4gICAgcnMuZW5kWSA9IGVkZ2VFbmRbMV07XG4gICAgcnMuYXJyb3dFbmRYID0gYXJyb3dFbmRbMF07XG4gICAgcnMuYXJyb3dFbmRZID0gYXJyb3dFbmRbMV07XG5cbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdpbnNpZGUtdG8tbm9kZScpIHtcbiAgICAgIGludGVyc2VjdCA9IFtzcmNQb3MueCwgc3JjUG9zLnldO1xuICAgIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHQudW5pdHMpIHtcbiAgICAgIGludGVyc2VjdCA9IHRoaXMubWFudWFsRW5kcHRUb1B4KHNvdXJjZSwgc3JjTWFuRW5kcHQpO1xuICAgIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUnKSB7XG4gICAgICBpbnRlcnNlY3QgPSBycy5zcmNJbnRuOyAvLyB1c2UgY2FjaGVkIHZhbHVlIGZyb20gY3RybHB0IGNhbGNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1ub2RlJyB8fCBzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcpIHtcbiAgICAgICAgcDJfaSA9IHAyO1xuICAgICAgfSBlbHNlIGlmIChzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScgfHwgc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICAgIHAyX2kgPSBbdGd0UG9zLngsIHRndFBvcy55XTtcbiAgICAgIH1cblxuICAgICAgaW50ZXJzZWN0ID0gci5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKHNvdXJjZSldLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzb3VyY2Uub3V0ZXJXaWR0aCgpLCBzb3VyY2Uub3V0ZXJIZWlnaHQoKSwgcDJfaVswXSwgcDJfaVsxXSwgMCk7XG5cbiAgICAgIGlmIChzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcgfHwgc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICAgIHZhciBzcnMgPSBzb3VyY2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICAgIHZhciBfbHcgPSBzcnMubGFiZWxXaWR0aDtcbiAgICAgICAgdmFyIF9saCA9IHNycy5sYWJlbEhlaWdodDtcbiAgICAgICAgdmFyIF9seCA9IHNycy5sYWJlbFg7XG4gICAgICAgIHZhciBfbHkgPSBzcnMubGFiZWxZO1xuXG4gICAgICAgIHZhciBfbHcyID0gX2x3IC8gMjtcblxuICAgICAgICB2YXIgX2xoMiA9IF9saCAvIDI7XG5cbiAgICAgICAgdmFyIF92YSA9IHNvdXJjZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG5cbiAgICAgICAgaWYgKF92YSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBfbHkgLT0gX2xoMjtcbiAgICAgICAgfSBlbHNlIGlmIChfdmEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgX2x5ICs9IF9saDI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2hhID0gc291cmNlLnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcblxuICAgICAgICBpZiAoX2hhID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBfbHggLT0gX2x3MjtcbiAgICAgICAgfSBlbHNlIGlmIChfaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBfbHggKz0gX2x3MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfbGFiZWxJbnRlcnNlY3QgPSBwb2x5Z29uSW50ZXJzZWN0TGluZShwMl9pWzBdLCBwMl9pWzFdLCBbX2x4IC0gX2x3MiwgX2x5IC0gX2xoMiwgX2x4ICsgX2x3MiwgX2x5IC0gX2xoMiwgX2x4ICsgX2x3MiwgX2x5ICsgX2xoMiwgX2x4IC0gX2x3MiwgX2x5ICsgX2xoMl0sIHNyY1Bvcy54LCBzcmNQb3MueSk7XG5cbiAgICAgICAgaWYgKF9sYWJlbEludGVyc2VjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIF9yZWZQdCA9IHRndFBvcztcblxuICAgICAgICAgIHZhciBfaW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoaW50ZXJzZWN0KSk7XG5cbiAgICAgICAgICB2YXIgX2xhYkludFNxZGlzdCA9IHNxZGlzdChfcmVmUHQsIGFycmF5MnBvaW50KF9sYWJlbEludGVyc2VjdCkpO1xuXG4gICAgICAgICAgdmFyIF9taW5TcURpc3QgPSBfaW50U3FkaXN0O1xuXG4gICAgICAgICAgaWYgKF9sYWJJbnRTcWRpc3QgPCBfaW50U3FkaXN0KSB7XG4gICAgICAgICAgICBpbnRlcnNlY3QgPSBbX2xhYmVsSW50ZXJzZWN0WzBdLCBfbGFiZWxJbnRlcnNlY3RbMV1dO1xuICAgICAgICAgICAgX21pblNxRGlzdCA9IF9sYWJJbnRTcWRpc3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9sYWJlbEludGVyc2VjdC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgX2xhYkludDJTcURpc3QgPSBzcWRpc3QoX3JlZlB0LCB7XG4gICAgICAgICAgICAgIHg6IF9sYWJlbEludGVyc2VjdFsyXSxcbiAgICAgICAgICAgICAgeTogX2xhYmVsSW50ZXJzZWN0WzNdXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKF9sYWJJbnQyU3FEaXN0IDwgX21pblNxRGlzdCkge1xuICAgICAgICAgICAgICBpbnRlcnNlY3QgPSBbX2xhYmVsSW50ZXJzZWN0WzJdLCBfbGFiZWxJbnRlcnNlY3RbM11dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhcnJvd1N0YXJ0ID0gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3QsIHAyLCByLmFycm93U2hhcGVzW3NyY0FyU2hhcGVdLnNwYWNpbmcoZWRnZSkgKyBzcmNEaXN0KTtcbiAgICB2YXIgZWRnZVN0YXJ0ID0gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3QsIHAyLCByLmFycm93U2hhcGVzW3NyY0FyU2hhcGVdLmdhcChlZGdlKSArIHNyY0Rpc3QpO1xuICAgIHJzLnN0YXJ0WCA9IGVkZ2VTdGFydFswXTtcbiAgICBycy5zdGFydFkgPSBlZGdlU3RhcnRbMV07XG4gICAgcnMuYXJyb3dTdGFydFggPSBhcnJvd1N0YXJ0WzBdO1xuICAgIHJzLmFycm93U3RhcnRZID0gYXJyb3dTdGFydFsxXTtcblxuICAgIGlmIChoYXNFbmRwdHMpIHtcbiAgICAgIGlmICghbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKSB8fCAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpKSB7XG4gICAgICAgIHJzLmJhZExpbmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnMuYmFkTGluZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCUnAkYi5nZXRTb3VyY2VFbmRwb2ludCA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShlZGdlKTtcblxuICAgIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2hheXN0YWNrJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBycy5oYXlzdGFja1B0c1swXSxcbiAgICAgICAgICB5OiBycy5oYXlzdGFja1B0c1sxXVxuICAgICAgICB9O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHJzLmFycm93U3RhcnRYLFxuICAgICAgICAgIHk6IHJzLmFycm93U3RhcnRZXG4gICAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIEJScCRiLmdldFRhcmdldEVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVkZ2UpO1xuXG4gICAgc3dpdGNoIChycy5lZGdlVHlwZSkge1xuICAgICAgY2FzZSAnaGF5c3RhY2snOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHJzLmhheXN0YWNrUHRzWzJdLFxuICAgICAgICAgIHk6IHJzLmhheXN0YWNrUHRzWzNdXG4gICAgICAgIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogcnMuYXJyb3dFbmRYLFxuICAgICAgICAgIHk6IHJzLmFycm93RW5kWVxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICB2YXIgQlJwJGEgPSB7fTtcblxuICBmdW5jdGlvbiBwdXNoQmV6aWVyUHRzKHIsIGVkZ2UsIHB0cykge1xuICAgIHZhciBxYmV6aWVyQXQkMSA9IGZ1bmN0aW9uIHFiZXppZXJBdCQxKHAxLCBwMiwgcDMsIHQpIHtcbiAgICAgIHJldHVybiBxYmV6aWVyQXQocDEsIHAyLCBwMywgdCk7XG4gICAgfTtcblxuICAgIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gICAgdmFyIGJwdHMgPSBfcC5yc3R5bGUuYmV6aWVyUHRzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByLmJlemllclByb2pQY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcCA9IHIuYmV6aWVyUHJvalBjdHNbaV07XG4gICAgICBicHRzLnB1c2goe1xuICAgICAgICB4OiBxYmV6aWVyQXQkMShwdHNbMF0sIHB0c1syXSwgcHRzWzRdLCBwKSxcbiAgICAgICAgeTogcWJlemllckF0JDEocHRzWzFdLCBwdHNbM10sIHB0c1s1XSwgcClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEJScCRhLnN0b3JlRWRnZVByb2plY3Rpb25zID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICAgIHZhciBldCA9IHJzLmVkZ2VUeXBlOyAvLyBjbGVhciB0aGUgY2FjaGVkIHBvaW50cyBzdGF0ZVxuXG4gICAgX3AucnN0eWxlLmJlemllclB0cyA9IG51bGw7XG4gICAgX3AucnN0eWxlLmxpbmVQdHMgPSBudWxsO1xuICAgIF9wLnJzdHlsZS5oYXlzdGFja1B0cyA9IG51bGw7XG5cbiAgICBpZiAoZXQgPT09ICdtdWx0aWJlemllcicgfHwgZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnc2VsZicgfHwgZXQgPT09ICdjb21wb3VuZCcpIHtcbiAgICAgIF9wLnJzdHlsZS5iZXppZXJQdHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIHB1c2hCZXppZXJQdHModGhpcywgZWRnZSwgcnMuYWxscHRzLnNsaWNlKGksIGkgKyA2KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldCA9PT0gJ3NlZ21lbnRzJykge1xuICAgICAgdmFyIGxwdHMgPSBfcC5yc3R5bGUubGluZVB0cyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgbHB0cy5wdXNoKHtcbiAgICAgICAgICB4OiBycy5hbGxwdHNbaV0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV0ID09PSAnaGF5c3RhY2snKSB7XG4gICAgICB2YXIgaHB0cyA9IHJzLmhheXN0YWNrUHRzO1xuICAgICAgX3AucnN0eWxlLmhheXN0YWNrUHRzID0gW3tcbiAgICAgICAgeDogaHB0c1swXSxcbiAgICAgICAgeTogaHB0c1sxXVxuICAgICAgfSwge1xuICAgICAgICB4OiBocHRzWzJdLFxuICAgICAgICB5OiBocHRzWzNdXG4gICAgICB9XTtcbiAgICB9XG5cbiAgICBfcC5yc3R5bGUuYXJyb3dXaWR0aCA9IHRoaXMuZ2V0QXJyb3dXaWR0aChlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlLCBlZGdlLnBzdHlsZSgnYXJyb3ctc2NhbGUnKS52YWx1ZSkgKiB0aGlzLmFycm93U2hhcGVXaWR0aDtcbiAgfTtcblxuICBCUnAkYS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyA9IGZ1bmN0aW9uIChlZGdlcykge1xuICAgIHRoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKGVkZ2VzKTtcbiAgfTtcblxuICAvKiBnbG9iYWwgZG9jdW1lbnQgKi9cblxuICB2YXIgQlJwJDkgPSB7fTtcblxuICBCUnAkOS5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBjb250ZW50ID0gbm9kZS5wc3R5bGUoJ2xhYmVsJykuc3RyVmFsdWU7XG5cbiAgICBpZiAoZW1wdHlTdHJpbmcoY29udGVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGV4dFgsIHRleHRZO1xuICAgIHZhciBfcCA9IG5vZGUuX3ByaXZhdGU7XG4gICAgdmFyIG5vZGVXaWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgICB2YXIgbm9kZUhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gICAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgICB2YXIgbm9kZVBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgICB2YXIgdGV4dEhhbGlnbiA9IG5vZGUucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnN0clZhbHVlO1xuICAgIHZhciB0ZXh0VmFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtdmFsaWduJykuc3RyVmFsdWU7XG4gICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcblxuICAgIHN3aXRjaCAodGV4dEhhbGlnbikge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRleHRYID0gbm9kZVBvcy54IC0gbm9kZVdpZHRoIC8gMiAtIHBhZGRpbmc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHRleHRYID0gbm9kZVBvcy54ICsgbm9kZVdpZHRoIC8gMiArIHBhZGRpbmc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBlLmcuIGNlbnRlclxuICAgICAgICB0ZXh0WCA9IG5vZGVQb3MueDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRleHRWYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRleHRZID0gbm9kZVBvcy55IC0gbm9kZUhlaWdodCAvIDIgLSBwYWRkaW5nO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdGV4dFkgPSBub2RlUG9zLnkgKyBub2RlSGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBlLmcuIG1pZGRsZVxuICAgICAgICB0ZXh0WSA9IG5vZGVQb3MueTtcbiAgICB9XG5cbiAgICBycy5sYWJlbFggPSB0ZXh0WDtcbiAgICBycy5sYWJlbFkgPSB0ZXh0WTtcbiAgICByc3R5bGUubGFiZWxYID0gdGV4dFg7XG4gICAgcnN0eWxlLmxhYmVsWSA9IHRleHRZO1xuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMobm9kZSk7XG4gICAgdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyhub2RlKTtcbiAgfTtcblxuICB2YXIgbGluZUFuZ2xlRnJvbURlbHRhID0gZnVuY3Rpb24gbGluZUFuZ2xlRnJvbURlbHRhKGR4LCBkeSkge1xuICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbihkeSAvIGR4KTtcblxuICAgIGlmIChkeCA9PT0gMCAmJiBhbmdsZSA8IDApIHtcbiAgICAgIGFuZ2xlID0gYW5nbGUgKiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5nbGU7XG4gIH07XG5cbiAgdmFyIGxpbmVBbmdsZSA9IGZ1bmN0aW9uIGxpbmVBbmdsZShwMCwgcDEpIHtcbiAgICB2YXIgZHggPSBwMS54IC0gcDAueDtcbiAgICB2YXIgZHkgPSBwMS55IC0gcDAueTtcbiAgICByZXR1cm4gbGluZUFuZ2xlRnJvbURlbHRhKGR4LCBkeSk7XG4gIH07XG5cbiAgdmFyIGJlemllckFuZ2xlID0gZnVuY3Rpb24gYmV6aWVyQW5nbGUocDAsIHAxLCBwMiwgdCkge1xuICAgIHZhciB0MCA9IGJvdW5kKDAsIHQgLSAwLjAwMSwgMSk7XG4gICAgdmFyIHQxID0gYm91bmQoMCwgdCArIDAuMDAxLCAxKTtcbiAgICB2YXIgbHAwID0gcWJlemllclB0QXQocDAsIHAxLCBwMiwgdDApO1xuICAgIHZhciBscDEgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MSk7XG4gICAgcmV0dXJuIGxpbmVBbmdsZShscDAsIGxwMSk7XG4gIH07XG5cbiAgQlJwJDkucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHA7XG4gICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGNvbnRlbnQgPSB7XG4gICAgICBtaWQ6IGVkZ2UucHN0eWxlKCdsYWJlbCcpLnN0clZhbHVlLFxuICAgICAgc291cmNlOiBlZGdlLnBzdHlsZSgnc291cmNlLWxhYmVsJykuc3RyVmFsdWUsXG4gICAgICB0YXJnZXQ6IGVkZ2UucHN0eWxlKCd0YXJnZXQtbGFiZWwnKS5zdHJWYWx1ZVxuICAgIH07XG5cbiAgICBpZiAoY29udGVudC5taWQgfHwgY29udGVudC5zb3VyY2UgfHwgY29udGVudC50YXJnZXQpIDsgZWxzZSB7XG4gICAgICByZXR1cm47IC8vIG5vIGxhYmVscyA9PiBubyBjYWxjc1xuICAgIH0gLy8gYWRkIGNlbnRlciBwb2ludCB0byBzdHlsZSBzbyBib3VuZGluZyBib3ggY2FsY3VsYXRpb25zIGNhbiB1c2UgaXRcbiAgICAvL1xuXG5cbiAgICBwID0ge1xuICAgICAgeDogcnMubWlkWCxcbiAgICAgIHk6IHJzLm1pZFlcbiAgICB9O1xuXG4gICAgdmFyIHNldFJzID0gZnVuY3Rpb24gc2V0UnMocHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpIHtcbiAgICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKTtcbiAgICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCBwcm9wTmFtZSwgcHJlZml4LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIHNldFJzKCdsYWJlbFgnLCBudWxsLCBwLngpO1xuICAgIHNldFJzKCdsYWJlbFknLCBudWxsLCBwLnkpO1xuICAgIHZhciBtaWRBbmdsZSA9IGxpbmVBbmdsZUZyb21EZWx0YShycy5taWREaXNwWCwgcnMubWlkRGlzcFkpO1xuICAgIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIG51bGwsIG1pZEFuZ2xlKTtcblxuICAgIHZhciBjcmVhdGVDb250cm9sUG9pbnRJbmZvID0gZnVuY3Rpb24gY3JlYXRlQ29udHJvbFBvaW50SW5mbygpIHtcbiAgICAgIGlmIChjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlO1xuICAgICAgfSAvLyB1c2UgY2FjaGUgc28gb25seSAxeCBwZXIgZWRnZVxuXG5cbiAgICAgIHZhciBjdHJscHRzID0gW107IC8vIHN0b3JlIGVhY2ggY3RybHB0IGluZm8gaW5pdFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSArIDUgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgdmFyIHAwID0ge1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgICB5OiBycy5hbGxwdHNbaSArIDFdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBwMSA9IHtcbiAgICAgICAgICB4OiBycy5hbGxwdHNbaSArIDJdLFxuICAgICAgICAgIHk6IHJzLmFsbHB0c1tpICsgM11cbiAgICAgICAgfTsgLy8gY3RybHB0XG5cbiAgICAgICAgdmFyIHAyID0ge1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpICsgNF0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgKyA1XVxuICAgICAgICB9O1xuICAgICAgICBjdHJscHRzLnB1c2goe1xuICAgICAgICAgIHAwOiBwMCxcbiAgICAgICAgICBwMTogcDEsXG4gICAgICAgICAgcDI6IHAyLFxuICAgICAgICAgIHN0YXJ0RGlzdDogMCxcbiAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgc2VnbWVudHM6IFtdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnB0cyA9IF9wLnJzdHlsZS5iZXppZXJQdHM7XG4gICAgICB2YXIgblByb2pzID0gci5iZXppZXJQcm9qUGN0cy5sZW5ndGg7XG5cbiAgICAgIGZ1bmN0aW9uIGFkZFNlZ21lbnQoY3AsIHAwLCBwMSwgdDAsIHQxKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBkaXN0KHAwLCBwMSk7XG4gICAgICAgIHZhciBwcmV2U2VnbWVudCA9IGNwLnNlZ21lbnRzW2NwLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB2YXIgc2VnbWVudCA9IHtcbiAgICAgICAgICBwMDogcDAsXG4gICAgICAgICAgcDE6IHAxLFxuICAgICAgICAgIHQwOiB0MCxcbiAgICAgICAgICB0MTogdDEsXG4gICAgICAgICAgc3RhcnREaXN0OiBwcmV2U2VnbWVudCA/IHByZXZTZWdtZW50LnN0YXJ0RGlzdCArIHByZXZTZWdtZW50Lmxlbmd0aCA6IDAsXG4gICAgICAgICAgbGVuZ3RoOiBsZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgY3Auc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgICAgY3AubGVuZ3RoICs9IGxlbmd0aDtcbiAgICAgIH0gLy8gdXBkYXRlIGVhY2ggY3RybHB0IHdpdGggc2VnbWVudCBpbmZvXG5cblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGN0cmxwdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBjcCA9IGN0cmxwdHNbX2ldO1xuICAgICAgICB2YXIgcHJldkNwID0gY3RybHB0c1tfaSAtIDFdO1xuXG4gICAgICAgIGlmIChwcmV2Q3ApIHtcbiAgICAgICAgICBjcC5zdGFydERpc3QgPSBwcmV2Q3Auc3RhcnREaXN0ICsgcHJldkNwLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFNlZ21lbnQoY3AsIGNwLnAwLCBicHRzW19pICogblByb2pzXSwgMCwgci5iZXppZXJQcm9qUGN0c1swXSk7IC8vIGZpcnN0XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuUHJvanMgLSAxOyBqKyspIHtcbiAgICAgICAgICBhZGRTZWdtZW50KGNwLCBicHRzW19pICogblByb2pzICsgal0sIGJwdHNbX2kgKiBuUHJvanMgKyBqICsgMV0sIHIuYmV6aWVyUHJvalBjdHNbal0sIHIuYmV6aWVyUHJvalBjdHNbaiArIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFNlZ21lbnQoY3AsIGJwdHNbX2kgKiBuUHJvanMgKyBuUHJvanMgLSAxXSwgY3AucDIsIHIuYmV6aWVyUHJvalBjdHNbblByb2pzIC0gMV0sIDEpOyAvLyBsYXN0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlID0gY3RybHB0cztcbiAgICB9O1xuXG4gICAgdmFyIGNhbGN1bGF0ZUVuZFByb2plY3Rpb24gPSBmdW5jdGlvbiBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKHByZWZpeCkge1xuICAgICAgdmFyIGFuZ2xlO1xuICAgICAgdmFyIGlzU3JjID0gcHJlZml4ID09PSAnc291cmNlJztcblxuICAgICAgaWYgKCFjb250ZW50W3ByZWZpeF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2Zmc2V0ID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy10ZXh0LW9mZnNldCcpLnBmVmFsdWU7XG5cbiAgICAgIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VsZic6XG4gICAgICAgIGNhc2UgJ2NvbXBvdW5kJzpcbiAgICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgICAgY2FzZSAnbXVsdGliZXppZXInOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjcHMgPSBjcmVhdGVDb250cm9sUG9pbnRJbmZvKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQ7XG4gICAgICAgICAgICB2YXIgc3RhcnREaXN0ID0gMDtcbiAgICAgICAgICAgIHZhciB0b3RhbERpc3QgPSAwOyAvLyBmaW5kIHRoZSBzZWdtZW50IHdlJ3JlIG9uXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBfY3AgPSBjcHNbaXNTcmMgPyBpIDogY3BzLmxlbmd0aCAtIDEgLSBpXTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9jcC5zZWdtZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBfc2VnID0gX2NwLnNlZ21lbnRzW2lzU3JjID8gaiA6IF9jcC5zZWdtZW50cy5sZW5ndGggLSAxIC0gal07XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RTZWcgPSBpID09PSBjcHMubGVuZ3RoIC0gMSAmJiBqID09PSBfY3Auc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBzdGFydERpc3QgPSB0b3RhbERpc3Q7XG4gICAgICAgICAgICAgICAgdG90YWxEaXN0ICs9IF9zZWcubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsRGlzdCA+PSBvZmZzZXQgfHwgbGFzdFNlZykge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNwOiBfY3AsXG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnQ6IF9zZWdcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3AgPSBzZWxlY3RlZC5jcDtcbiAgICAgICAgICAgIHZhciBzZWcgPSBzZWxlY3RlZC5zZWdtZW50O1xuICAgICAgICAgICAgdmFyIHRTZWdtZW50ID0gKG9mZnNldCAtIHN0YXJ0RGlzdCkgLyBzZWcubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHNlZ0R0ID0gc2VnLnQxIC0gc2VnLnQwO1xuICAgICAgICAgICAgdmFyIHQgPSBpc1NyYyA/IHNlZy50MCArIHNlZ0R0ICogdFNlZ21lbnQgOiBzZWcudDEgLSBzZWdEdCAqIHRTZWdtZW50O1xuICAgICAgICAgICAgdCA9IGJvdW5kKDAsIHQsIDEpO1xuICAgICAgICAgICAgcCA9IHFiZXppZXJQdEF0KGNwLnAwLCBjcC5wMSwgY3AucDIsIHQpO1xuICAgICAgICAgICAgYW5nbGUgPSBiZXppZXJBbmdsZShjcC5wMCwgY3AucDEsIGNwLnAyLCB0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgICAgY2FzZSAnaGF5c3RhY2snOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkID0gMCxcbiAgICAgICAgICAgICAgICBkaSxcbiAgICAgICAgICAgICAgICBkMDtcbiAgICAgICAgICAgIHZhciBwMCwgcDE7XG4gICAgICAgICAgICB2YXIgbCA9IHJzLmFsbHB0cy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiArIDMgPCBsOyBfaTIgKz0gMikge1xuICAgICAgICAgICAgICBpZiAoaXNTcmMpIHtcbiAgICAgICAgICAgICAgICBwMCA9IHtcbiAgICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tfaTJdLFxuICAgICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW19pMiArIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwMSA9IHtcbiAgICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tfaTIgKyAyXSxcbiAgICAgICAgICAgICAgICAgIHk6IHJzLmFsbHB0c1tfaTIgKyAzXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcDAgPSB7XG4gICAgICAgICAgICAgICAgICB4OiBycy5hbGxwdHNbbCAtIDIgLSBfaTJdLFxuICAgICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW2wgLSAxIC0gX2kyXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcDEgPSB7XG4gICAgICAgICAgICAgICAgICB4OiBycy5hbGxwdHNbbCAtIDQgLSBfaTJdLFxuICAgICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW2wgLSAzIC0gX2kyXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkaSA9IGRpc3QocDAsIHAxKTtcbiAgICAgICAgICAgICAgZDAgPSBkO1xuICAgICAgICAgICAgICBkICs9IGRpO1xuXG4gICAgICAgICAgICAgIGlmIChkID49IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwRCA9IG9mZnNldCAtIGQwO1xuXG4gICAgICAgICAgICB2YXIgX3QgPSBwRCAvIGRpO1xuXG4gICAgICAgICAgICBfdCA9IGJvdW5kKDAsIF90LCAxKTtcbiAgICAgICAgICAgIHAgPSBsaW5lQXQocDAsIHAxLCBfdCk7XG4gICAgICAgICAgICBhbmdsZSA9IGxpbmVBbmdsZShwMCwgcDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRScygnbGFiZWxYJywgcHJlZml4LCBwLngpO1xuICAgICAgc2V0UnMoJ2xhYmVsWScsIHByZWZpeCwgcC55KTtcbiAgICAgIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIHByZWZpeCwgYW5nbGUpO1xuICAgIH07XG5cbiAgICBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKCdzb3VyY2UnKTtcbiAgICBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKCd0YXJnZXQnKTtcbiAgICB0aGlzLmFwcGx5TGFiZWxEaW1lbnNpb25zKGVkZ2UpO1xuICB9O1xuXG4gIEJScCQ5LmFwcGx5TGFiZWxEaW1lbnNpb25zID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUpO1xuXG4gICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGVsZSwgJ3NvdXJjZScpO1xuICAgICAgdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGVsZSwgJ3RhcmdldCcpO1xuICAgIH1cbiAgfTtcblxuICBCUnAkOS5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zID0gZnVuY3Rpb24gKGVsZSwgcHJlZml4KSB7XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciB0ZXh0ID0gdGhpcy5nZXRMYWJlbFRleHQoZWxlLCBwcmVmaXgpO1xuICAgIHZhciBsYWJlbERpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRleHQpO1xuICAgIHZhciBsaW5lSGVpZ2h0ID0gZWxlLnBzdHlsZSgnbGluZS1oZWlnaHQnKS5wZlZhbHVlO1xuICAgIHZhciB0ZXh0V3JhcCA9IGVsZS5wc3R5bGUoJ3RleHQtd3JhcCcpLnN0clZhbHVlO1xuICAgIHZhciBsaW5lcyA9IGdldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbFdyYXBDYWNoZWRMaW5lcycsIHByZWZpeCkgfHwgW107XG4gICAgdmFyIG51bUxpbmVzID0gdGV4dFdyYXAgIT09ICd3cmFwJyA/IDEgOiBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDEpO1xuICAgIHZhciBub3JtUGVyTGluZUhlaWdodCA9IGxhYmVsRGltcy5oZWlnaHQgLyBudW1MaW5lcztcbiAgICB2YXIgbGFiZWxMaW5lSGVpZ2h0ID0gbm9ybVBlckxpbmVIZWlnaHQgKiBsaW5lSGVpZ2h0O1xuICAgIHZhciB3aWR0aCA9IGxhYmVsRGltcy53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gbGFiZWxEaW1zLmhlaWdodCArIChudW1MaW5lcyAtIDEpICogKGxpbmVIZWlnaHQgLSAxKSAqIG5vcm1QZXJMaW5lSGVpZ2h0O1xuICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCAnbGFiZWxXaWR0aCcsIHByZWZpeCwgd2lkdGgpO1xuICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gICAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbEhlaWdodCcsIHByZWZpeCwgaGVpZ2h0KTtcbiAgICBzZXRQcmVmaXhlZFByb3BlcnR5KF9wLnJzY3JhdGNoLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgsIGhlaWdodCk7XG4gICAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCwgbGFiZWxMaW5lSGVpZ2h0KTtcbiAgfTtcblxuICBCUnAkOS5nZXRMYWJlbFRleHQgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIHBmZCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICAgIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwZmQgKyAnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgICB2YXIgdGV4dFRyYW5zZm9ybSA9IGVsZS5wc3R5bGUoJ3RleHQtdHJhbnNmb3JtJykudmFsdWU7XG5cbiAgICB2YXIgcnNjcmF0Y2ggPSBmdW5jdGlvbiByc2NyYXRjaChwcm9wTmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBzZXRQcmVmaXhlZFByb3BlcnR5KF9wLnJzY3JhdGNoLCBwcm9wTmFtZSwgcHJlZml4LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRQcmVmaXhlZFByb3BlcnR5KF9wLnJzY3JhdGNoLCBwcm9wTmFtZSwgcHJlZml4KTtcbiAgICAgIH1cbiAgICB9OyAvLyBmb3IgZW1wdHkgdGV4dCwgc2tpcCBhbGwgcHJvY2Vzc2luZ1xuXG5cbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGV4dFRyYW5zZm9ybSA9PSAnbm9uZScpIDsgZWxzZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAndXBwZXJjYXNlJykge1xuICAgICAgdGV4dCA9IHRleHQudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ2xvd2VyY2FzZScpIHtcbiAgICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgdmFyIHdyYXBTdHlsZSA9IGVsZS5wc3R5bGUoJ3RleHQtd3JhcCcpLnZhbHVlO1xuXG4gICAgaWYgKHdyYXBTdHlsZSA9PT0gJ3dyYXAnKSB7XG4gICAgICB2YXIgbGFiZWxLZXkgPSByc2NyYXRjaCgnbGFiZWxLZXknKTsgLy8gc2F2ZSByZWNhbGMgaWYgdGhlIGxhYmVsIGlzIHRoZSBzYW1lIGFzIGJlZm9yZVxuXG4gICAgICBpZiAobGFiZWxLZXkgIT0gbnVsbCAmJiByc2NyYXRjaCgnbGFiZWxXcmFwS2V5JykgPT09IGxhYmVsS2V5KSB7XG4gICAgICAgIHJldHVybiByc2NyYXRjaCgnbGFiZWxXcmFwQ2FjaGVkVGV4dCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgendzcCA9IFwiXFx1MjAwQlwiO1xuICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgbWF4VyA9IGVsZS5wc3R5bGUoJ3RleHQtbWF4LXdpZHRoJykucGZWYWx1ZTtcbiAgICAgIHZhciBvdmVyZmxvdyA9IGVsZS5wc3R5bGUoJ3RleHQtb3ZlcmZsb3ctd3JhcCcpLnZhbHVlO1xuICAgICAgdmFyIG92ZXJmbG93QW55ID0gb3ZlcmZsb3cgPT09ICdhbnl3aGVyZSc7XG4gICAgICB2YXIgd3JhcHBlZExpbmVzID0gW107XG4gICAgICB2YXIgd29yZHNSZWdleCA9IC9bXFxzXFx1MjAwYl0rLztcbiAgICAgIHZhciB3b3JkU2VwYXJhdG9yID0gb3ZlcmZsb3dBbnkgPyAnJyA6ICcgJztcblxuICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsaW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xdO1xuICAgICAgICB2YXIgbGluZURpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGxpbmUpO1xuICAgICAgICB2YXIgbGluZVcgPSBsaW5lRGltcy53aWR0aDtcblxuICAgICAgICBpZiAob3ZlcmZsb3dBbnkpIHtcbiAgICAgICAgICB2YXIgcHJvY2Vzc2VkTGluZSA9IGxpbmUuc3BsaXQoJycpLmpvaW4oendzcCk7XG4gICAgICAgICAgbGluZSA9IHByb2Nlc3NlZExpbmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZVcgPiBtYXhXKSB7XG4gICAgICAgICAgLy8gbGluZSBpcyB0b28gbG9uZ1xuICAgICAgICAgIHZhciB3b3JkcyA9IGxpbmUuc3BsaXQod29yZHNSZWdleCk7XG4gICAgICAgICAgdmFyIHN1YmxpbmUgPSAnJztcblxuICAgICAgICAgIGZvciAodmFyIHcgPSAwOyB3IDwgd29yZHMubGVuZ3RoOyB3KyspIHtcbiAgICAgICAgICAgIHZhciB3b3JkID0gd29yZHNbd107XG4gICAgICAgICAgICB2YXIgdGVzdExpbmUgPSBzdWJsaW5lLmxlbmd0aCA9PT0gMCA/IHdvcmQgOiBzdWJsaW5lICsgd29yZFNlcGFyYXRvciArIHdvcmQ7XG4gICAgICAgICAgICB2YXIgdGVzdERpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRlc3RMaW5lKTtcbiAgICAgICAgICAgIHZhciB0ZXN0VyA9IHRlc3REaW1zLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAodGVzdFcgPD0gbWF4Vykge1xuICAgICAgICAgICAgICAvLyB3b3JkIGZpdHMgb24gY3VycmVudCBsaW5lXG4gICAgICAgICAgICAgIHN1YmxpbmUgKz0gd29yZCArIHdvcmRTZXBhcmF0b3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB3b3JkIHN0YXJ0cyBuZXcgbGluZVxuICAgICAgICAgICAgICBpZiAoc3VibGluZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1YmxpbmUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3VibGluZSA9IHdvcmQgKyB3b3JkU2VwYXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gaWYgdGhlcmUncyByZW1haW5pbmcgdGV4dCwgcHV0IGl0IGluIGEgd3JhcHBlZCBsaW5lXG5cblxuICAgICAgICAgIGlmICghc3VibGluZS5tYXRjaCgvXltcXHNcXHUyMDBiXSskLykpIHtcbiAgICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1YmxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBsaW5lIGlzIGFscmVhZHkgc2hvcnQgZW5vdWdoXG4gICAgICAgICAgd3JhcHBlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yXG5cblxuICAgICAgcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgd3JhcHBlZExpbmVzKTtcbiAgICAgIHRleHQgPSByc2NyYXRjaCgnbGFiZWxXcmFwQ2FjaGVkVGV4dCcsIHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKSk7XG4gICAgICByc2NyYXRjaCgnbGFiZWxXcmFwS2V5JywgbGFiZWxLZXkpO1xuICAgIH0gZWxzZSBpZiAod3JhcFN0eWxlID09PSAnZWxsaXBzaXMnKSB7XG4gICAgICB2YXIgX21heFcgPSBlbGUucHN0eWxlKCd0ZXh0LW1heC13aWR0aCcpLnBmVmFsdWU7XG4gICAgICB2YXIgZWxsaXBzaXplZCA9ICcnO1xuICAgICAgdmFyIGVsbGlwc2lzID0gXCJcXHUyMDI2XCI7XG4gICAgICB2YXIgaW5jTGFzdENoID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRleHQpLndpZHRoIDwgX21heFcpIHtcbiAgICAgICAgLy8gdGhlIGxhYmVsIGFscmVhZHkgZml0c1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB3aWR0aFdpdGhOZXh0Q2ggPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGVsbGlwc2l6ZWQgKyB0ZXh0W2ldICsgZWxsaXBzaXMpLndpZHRoO1xuXG4gICAgICAgIGlmICh3aWR0aFdpdGhOZXh0Q2ggPiBfbWF4Vykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxsaXBzaXplZCArPSB0ZXh0W2ldO1xuXG4gICAgICAgIGlmIChpID09PSB0ZXh0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpbmNMYXN0Q2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5jTGFzdENoKSB7XG4gICAgICAgIGVsbGlwc2l6ZWQgKz0gZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGxpcHNpemVkO1xuICAgIH0gLy8gaWYgZWxsaXBzaXplXG5cblxuICAgIHJldHVybiB0ZXh0O1xuICB9O1xuXG4gIEJScCQ5LmdldExhYmVsSnVzdGlmaWNhdGlvbiA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIganVzdGlmaWNhdGlvbiA9IGVsZS5wc3R5bGUoJ3RleHQtanVzdGlmaWNhdGlvbicpLnN0clZhbHVlO1xuICAgIHZhciB0ZXh0SGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKS5zdHJWYWx1ZTtcblxuICAgIGlmIChqdXN0aWZpY2F0aW9uID09PSAnYXV0bycpIHtcbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgc3dpdGNoICh0ZXh0SGFsaWduKSB7XG4gICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICByZXR1cm4gJ3JpZ2h0JztcblxuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHJldHVybiAnbGVmdCc7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBqdXN0aWZpY2F0aW9uO1xuICAgIH1cbiAgfTtcblxuICBCUnAkOS5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlLCB0ZXh0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBjYWNoZUtleSA9IGhhc2hTdHJpbmcodGV4dCwgZWxlLl9wcml2YXRlLmxhYmVsRGltc0tleSk7XG4gICAgdmFyIGNhY2hlID0gci5sYWJlbERpbUNhY2hlIHx8IChyLmxhYmVsRGltQ2FjaGUgPSBbXSk7XG4gICAgdmFyIGV4aXN0aW5nVmFsID0gY2FjaGVbY2FjaGVLZXldO1xuXG4gICAgaWYgKGV4aXN0aW5nVmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBleGlzdGluZ1ZhbDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IDA7IC8vIGFkZCBwYWRkaW5nIGFyb3VuZCB0ZXh0IGRpbXMsIGFzIHRoZSBtZWFzdXJlbWVudCBpc24ndCB0aGF0IGFjY3VyYXRlXG5cbiAgICB2YXIgZlN0eWxlID0gZWxlLnBzdHlsZSgnZm9udC1zdHlsZScpLnN0clZhbHVlO1xuICAgIHZhciBzaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZTtcbiAgICB2YXIgZmFtaWx5ID0gZWxlLnBzdHlsZSgnZm9udC1mYW1pbHknKS5zdHJWYWx1ZTtcbiAgICB2YXIgd2VpZ2h0ID0gZWxlLnBzdHlsZSgnZm9udC13ZWlnaHQnKS5zdHJWYWx1ZTtcbiAgICB2YXIgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXM7XG4gICAgdmFyIGMyZCA9IHRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dDtcblxuICAgIGlmICghY2FudmFzKSB7XG4gICAgICBjYW52YXMgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgYzJkID0gdGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICB2YXIgZHMgPSBjYW52YXMuc3R5bGU7XG4gICAgICBkcy5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBkcy5sZWZ0ID0gJy05OTk5cHgnO1xuICAgICAgZHMudG9wID0gJy05OTk5cHgnO1xuICAgICAgZHMuekluZGV4ID0gJy0xJztcbiAgICAgIGRzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIGRzLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgYzJkLmZvbnQgPSBcIlwiLmNvbmNhdChmU3R5bGUsIFwiIFwiKS5jb25jYXQod2VpZ2h0LCBcIiBcIikuY29uY2F0KHNpemUsIFwicHggXCIpLmNvbmNhdChmYW1pbHkpO1xuICAgIHZhciB3aWR0aCA9IDA7XG4gICAgdmFyIGhlaWdodCA9IDA7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgdmFyIG1ldHJpY3MgPSBjMmQubWVhc3VyZVRleHQobGluZSk7XG4gICAgICB2YXIgdyA9IE1hdGguY2VpbChtZXRyaWNzLndpZHRoKTtcbiAgICAgIHZhciBoID0gc2l6ZTtcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgodywgd2lkdGgpO1xuICAgICAgaGVpZ2h0ICs9IGg7XG4gICAgfVxuXG4gICAgd2lkdGggKz0gcGFkZGluZztcbiAgICBoZWlnaHQgKz0gcGFkZGluZztcbiAgICByZXR1cm4gY2FjaGVbY2FjaGVLZXldID0ge1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9O1xuICB9O1xuXG4gIEJScCQ5LmNhbGN1bGF0ZUxhYmVsQW5nbGUgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgcHJlZml4RGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICAgIHZhciByb3QgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICAgIHZhciByb3RTdHIgPSByb3Quc3RyVmFsdWU7XG5cbiAgICBpZiAocm90U3RyID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoaXNFZGdlICYmIHJvdFN0ciA9PT0gJ2F1dG9yb3RhdGUnKSB7XG4gICAgICByZXR1cm4gcnMubGFiZWxBdXRvQW5nbGU7XG4gICAgfSBlbHNlIGlmIChyb3RTdHIgPT09ICdhdXRvcm90YXRlJykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb3QucGZWYWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgQlJwJDkuY2FsY3VsYXRlTGFiZWxBbmdsZXMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICAgIHJzLmxhYmVsQW5nbGUgPSByLmNhbGN1bGF0ZUxhYmVsQW5nbGUoZWxlKTtcblxuICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgIHJzLnNvdXJjZUxhYmVsQW5nbGUgPSByLmNhbGN1bGF0ZUxhYmVsQW5nbGUoZWxlLCAnc291cmNlJyk7XG4gICAgICBycy50YXJnZXRMYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSwgJ3RhcmdldCcpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgQlJwJDggPSB7fTtcbiAgdmFyIFRPT19TTUFMTF9DVVRfUkVDVCA9IDI4O1xuICB2YXIgd2FybmVkQ3V0UmVjdCA9IGZhbHNlO1xuXG4gIEJScCQ4LmdldE5vZGVTaGFwZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBzaGFwZSA9IG5vZGUucHN0eWxlKCdzaGFwZScpLnZhbHVlO1xuXG4gICAgaWYgKHNoYXBlID09PSAnY3V0cmVjdGFuZ2xlJyAmJiAobm9kZS53aWR0aCgpIDwgVE9PX1NNQUxMX0NVVF9SRUNUIHx8IG5vZGUuaGVpZ2h0KCkgPCBUT09fU01BTExfQ1VUX1JFQ1QpKSB7XG4gICAgICBpZiAoIXdhcm5lZEN1dFJlY3QpIHtcbiAgICAgICAgd2FybignVGhlIGBjdXRyZWN0YW5nbGVgIG5vZGUgc2hhcGUgY2FuIG5vdCBiZSB1c2VkIGF0IHNtYWxsIHNpemVzIHNvIGByZWN0YW5nbGVgIGlzIHVzZWQgaW5zdGVhZCcpO1xuICAgICAgICB3YXJuZWRDdXRSZWN0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdyZWN0YW5nbGUnO1xuICAgIH1cblxuICAgIGlmIChub2RlLmlzUGFyZW50KCkpIHtcbiAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdyb3VuZHJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdyb3VuZC1yZWN0YW5nbGUnIHx8IHNoYXBlID09PSAnY3V0cmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ2N1dC1yZWN0YW5nbGUnIHx8IHNoYXBlID09PSAnYmFycmVsJykge1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3JlY3RhbmdsZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlID09PSAncG9seWdvbicpIHtcbiAgICAgIHZhciBwb2ludHMgPSBub2RlLnBzdHlsZSgnc2hhcGUtcG9seWdvbi1wb2ludHMnKS52YWx1ZTtcbiAgICAgIHJldHVybiByLm5vZGVTaGFwZXMubWFrZVBvbHlnb24ocG9pbnRzKS5uYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFwZTtcbiAgfTtcblxuICB2YXIgQlJwJDcgPSB7fTtcblxuICBCUnAkNy5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3k7XG4gICAgdmFyIGVsZXNUb1VwZGF0ZSA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICB2YXIgciA9IHRoaXM7XG5cbiAgICB2YXIgZW5xdWV1ZSA9IGZ1bmN0aW9uIGVucXVldWUoZWxlcykge1xuICAgICAgdmFyIGRpcnR5U3R5bGVDYWNoZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgICBlbGVzVG9VcGRhdGUubWVyZ2UoZWxlcyk7XG5cbiAgICAgIGlmIChkaXJ0eVN0eWxlQ2FjaGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICAgICAgICAgIHJzdHlsZS5jbGVhbiA9IGZhbHNlO1xuICAgICAgICAgIHJzdHlsZS5jbGVhbkNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHIuYmluZGVyKGN5KS5vbignYm91bmRzLiogZGlydHkuKicsIGZ1bmN0aW9uIG9uRGlydHlCb3VuZHMoZSkge1xuICAgICAgdmFyIGVsZSA9IGUudGFyZ2V0O1xuICAgICAgZW5xdWV1ZShlbGUpO1xuICAgIH0pLm9uKCdzdHlsZS4qIGJhY2tncm91bmQuKicsIGZ1bmN0aW9uIG9uRGlydHlTdHlsZShlKSB7XG4gICAgICB2YXIgZWxlID0gZS50YXJnZXQ7XG4gICAgICBlbnF1ZXVlKGVsZSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgdmFyIHVwZGF0ZUVsZUNhbGNzID0gZnVuY3Rpb24gdXBkYXRlRWxlQ2FsY3Mod2lsbERyYXcpIHtcbiAgICAgIGlmICh3aWxsRHJhdykge1xuICAgICAgICB2YXIgZm5zID0gci5vblVwZGF0ZUVsZUNhbGNzRm5zOyAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gaGF2ZSB1cC10by1kYXRlIHN0eWxlIChlLmcuIHN0eWxlc2hlZXQgbWFwcGVycylcbiAgICAgICAgLy8gYmVmb3JlIGNhbGN1bGF0aW5nIHJlbmRlcmVkIHN0eWxlIChhbmQgcHN0eWxlIG1pZ2h0IG5vdCBiZSBjYWxsZWQgeWV0KVxuXG4gICAgICAgIGVsZXNUb1VwZGF0ZS5jbGVhblN0eWxlKCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzVG9VcGRhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1RvVXBkYXRlW2ldO1xuICAgICAgICAgIHZhciByc3R5bGUgPSBlbGUuX3ByaXZhdGUucnN0eWxlO1xuXG4gICAgICAgICAgaWYgKGVsZS5pc05vZGUoKSAmJiAhcnN0eWxlLmNsZWFuQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICBlbnF1ZXVlKGVsZS5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgICAgICAgIHJzdHlsZS5jbGVhbkNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZucykge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmbnNbX2ldO1xuICAgICAgICAgICAgZm4od2lsbERyYXcsIGVsZXNUb1VwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgci5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWxlc1RvVXBkYXRlKTtcbiAgICAgICAgZWxlc1RvVXBkYXRlID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlRWxlQ2FsY3ModHJ1ZSk7XG4gICAgfTtcblxuICAgIHIuYmVmb3JlUmVuZGVyKHVwZGF0ZUVsZUNhbGNzLCByLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlQ2FsY3MpO1xuICB9O1xuXG4gIEJScCQ3Lm9uVXBkYXRlRWxlQ2FsY3MgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgZm5zID0gdGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zID0gdGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zIHx8IFtdO1xuICAgIGZucy5wdXNoKGZuKTtcbiAgfTtcblxuICBCUnAkNy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlcywgdXNlQ2FjaGUpIHtcbiAgICB2YXIgaXNDbGVhbkNvbm5lY3RlZCA9IGZ1bmN0aW9uIGlzQ2xlYW5Db25uZWN0ZWQoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZDtcbiAgICB9O1xuXG4gICAgdmFyIGVkZ2VzID0gW107XG4gICAgdmFyIG5vZGVzID0gW107IC8vIHRoZSByZW5kZXJlciBjYW4ndCBiZSB1c2VkIGZvciBjYWxjcyB3aGVuIGRlc3Ryb3llZCwgZS5nLiBlbGUuYm91bmRpbmdCb3goKVxuXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1c2UgY2FjaGUgYnkgZGVmYXVsdCBmb3IgcGVyZlxuXG5cbiAgICBpZiAodXNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNlQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICB2YXIgcnN0eWxlID0gX3AucnN0eWxlOyAvLyBhbiBlZGdlIG1heSBiZSBpbXBsaWNpdGx5IGRpcnR5IGIvYyBvZiBvbmUgb2YgaXRzIGNvbm5lY3RlZCBub2Rlc1xuICAgICAgLy8gKGFuZCBhIHJlcXVlc3QgZm9yIHJlY2FsYyBtYXkgY29tZSBpbiBiZXR3ZWVuIGZyYW1lcylcblxuICAgICAgaWYgKGVsZS5pc0VkZ2UoKSAmJiAoIWlzQ2xlYW5Db25uZWN0ZWQoZWxlLnNvdXJjZSgpKSB8fCAhaXNDbGVhbkNvbm5lY3RlZChlbGUudGFyZ2V0KCkpKSkge1xuICAgICAgICByc3R5bGUuY2xlYW4gPSBmYWxzZTtcbiAgICAgIH0gLy8gb25seSB1cGRhdGUgaWYgZGlydHkgYW5kIGluIGdyYXBoXG5cblxuICAgICAgaWYgKHVzZUNhY2hlICYmIHJzdHlsZS5jbGVhbiB8fCBlbGUucmVtb3ZlZCgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBvbmx5IHVwZGF0ZSBpZiBub3QgZGlzcGxheTogbm9uZVxuXG5cbiAgICAgIGlmIChlbGUucHN0eWxlKCdkaXNwbGF5JykudmFsdWUgPT09ICdub25lJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9wLmdyb3VwID09PSAnbm9kZXMnKSB7XG4gICAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVkZ2VzXG4gICAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICAgIH1cblxuICAgICAgcnN0eWxlLmNsZWFuID0gdHJ1ZTtcbiAgICB9IC8vIHVwZGF0ZSBub2RlIGRhdGEgZnJvbSBwcm9qZWN0aW9uc1xuXG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2Rlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgX2VsZSA9IG5vZGVzW19pMl07XG4gICAgICB2YXIgX3AyID0gX2VsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBfcnN0eWxlID0gX3AyLnJzdHlsZTtcblxuICAgICAgdmFyIHBvcyA9IF9lbGUucG9zaXRpb24oKTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oX2VsZSk7XG4gICAgICBfcnN0eWxlLm5vZGVYID0gcG9zLng7XG4gICAgICBfcnN0eWxlLm5vZGVZID0gcG9zLnk7XG4gICAgICBfcnN0eWxlLm5vZGVXID0gX2VsZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIF9yc3R5bGUubm9kZUggPSBfZWxlLnBzdHlsZSgnaGVpZ2h0JykucGZWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKGVkZ2VzKTsgLy8gdXBkYXRlIGVkZ2UgZGF0YSBmcm9tIHByb2plY3Rpb25zXG5cbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBlZGdlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgX2VsZTIgPSBlZGdlc1tfaTNdO1xuICAgICAgdmFyIF9wMyA9IF9lbGUyLl9wcml2YXRlO1xuICAgICAgdmFyIF9yc3R5bGUyID0gX3AzLnJzdHlsZTtcbiAgICAgIHZhciBycyA9IF9wMy5yc2NyYXRjaDsgLy8gdXBkYXRlIHJzdHlsZSBwb3NpdGlvbnNcblxuICAgICAgX3JzdHlsZTIuc3JjWCA9IHJzLmFycm93U3RhcnRYO1xuICAgICAgX3JzdHlsZTIuc3JjWSA9IHJzLmFycm93U3RhcnRZO1xuICAgICAgX3JzdHlsZTIudGd0WCA9IHJzLmFycm93RW5kWDtcbiAgICAgIF9yc3R5bGUyLnRndFkgPSBycy5hcnJvd0VuZFk7XG4gICAgICBfcnN0eWxlMi5taWRYID0gcnMubWlkWDtcbiAgICAgIF9yc3R5bGUyLm1pZFkgPSBycy5taWRZO1xuICAgICAgX3JzdHlsZTIubGFiZWxBbmdsZSA9IHJzLmxhYmVsQW5nbGU7XG4gICAgICBfcnN0eWxlMi5zb3VyY2VMYWJlbEFuZ2xlID0gcnMuc291cmNlTGFiZWxBbmdsZTtcbiAgICAgIF9yc3R5bGUyLnRhcmdldExhYmVsQW5nbGUgPSBycy50YXJnZXRMYWJlbEFuZ2xlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgQlJwJDYgPSB7fTtcblxuICBCUnAkNi51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWxlcyA9IHRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7XG5cbiAgICBpZiAoIWVsZXMpIHtcbiAgICAgIC8vIGp1c3QgbGV0IHRoaXMgYmUgcmVjYWxjdWxhdGVkIG9uIHRoZSBuZXh0IHogc29ydCB0aWNrXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlcy5kcmFnID0gW107XG4gICAgZWxlcy5ub25kcmFnID0gW107XG4gICAgdmFyIGdyYWJUYXJnZXRzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdmFyIHJzID0gZWxlLl9wcml2YXRlLnJzY3JhdGNoO1xuXG4gICAgICBpZiAoZWxlLmdyYWJiZWQoKSAmJiAhZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgZ3JhYlRhcmdldHMucHVzaChlbGUpO1xuICAgICAgfSBlbHNlIGlmIChycy5pbkRyYWdMYXllcikge1xuICAgICAgICBlbGVzLmRyYWcucHVzaChlbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlcy5ub25kcmFnLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9IC8vIHB1dCB0aGUgZ3JhYiB0YXJnZXQgbm9kZXMgbGFzdCBzbyBpdCdzIG9uIHRvcCBvZiBpdHMgbmVpZ2hib3VyaG9vZFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYWJUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZ3JhYlRhcmdldHNbaV07XG4gICAgICBlbGVzLmRyYWcucHVzaChlbGUpO1xuICAgIH1cbiAgfTtcblxuICBCUnAkNi5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jYWNoZWRaU29ydGVkRWxlcyA9IG51bGw7XG4gIH07XG5cbiAgQlJwJDYuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMgPSBmdW5jdGlvbiAoZm9yY2VSZWNhbGMpIHtcbiAgICBpZiAoZm9yY2VSZWNhbGMgfHwgIXRoaXMuY2FjaGVkWlNvcnRlZEVsZXMpIHtcbiAgICAgIHZhciBlbGVzID0gdGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7XG4gICAgICBlbGVzLnNvcnQoekluZGV4U29ydCk7XG4gICAgICBlbGVzLmludGVyYWN0aXZlID0gZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLmludGVyYWN0aXZlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FjaGVkWlNvcnRlZEVsZXMgPSBlbGVzO1xuICAgICAgdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVzID0gdGhpcy5jYWNoZWRaU29ydGVkRWxlcztcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlcztcbiAgfTtcblxuICB2YXIgQlJwJDUgPSB7fTtcbiAgW0JScCRlLCBCUnAkZCwgQlJwJGMsIEJScCRiLCBCUnAkYSwgQlJwJDksIEJScCQ4LCBCUnAkNywgQlJwJDZdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgZXh0ZW5kKEJScCQ1LCBwcm9wcyk7XG4gIH0pO1xuXG4gIHZhciBCUnAkNCA9IHt9O1xuXG4gIEJScCQ0LmdldENhY2hlZEltYWdlID0gZnVuY3Rpb24gKHVybCwgY3Jvc3NPcmlnaW4sIG9uTG9hZCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSB8fCB7fTtcbiAgICB2YXIgY2FjaGUgPSBpbWFnZUNhY2hlW3VybF07XG5cbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGlmICghY2FjaGUuaW1hZ2UuY29tcGxldGUpIHtcbiAgICAgICAgY2FjaGUuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZS5pbWFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGUgPSBpbWFnZUNhY2hlW3VybF0gPSBpbWFnZUNhY2hlW3VybF0gfHwge307XG4gICAgICB2YXIgaW1hZ2UgPSBjYWNoZS5pbWFnZSA9IG5ldyBJbWFnZSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGltYWdlLmVycm9yID0gdHJ1ZTtcbiAgICAgIH0pOyAvLyAjMTU4MiBzYWZhcmkgZG9lc24ndCBsb2FkIGRhdGEgdXJpcyB3aXRoIGNyb3NzT3JpZ2luIHByb3Blcmx5XG4gICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTc4XG5cbiAgICAgIHZhciBkYXRhVXJpUHJlZml4ID0gJ2RhdGE6JztcbiAgICAgIHZhciBpc0RhdGFVcmkgPSB1cmwuc3Vic3RyaW5nKDAsIGRhdGFVcmlQcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBkYXRhVXJpUHJlZml4O1xuXG4gICAgICBpZiAoIWlzRGF0YVVyaSkge1xuICAgICAgICAvLyBpZiBjcm9zc29yaWdpbiBpcyAnbnVsbCcoc3RyaW5naWZpZWQpLCB0aGVuIG1hbnVhbGx5IHNldCBpdCB0byBudWxsIFxuICAgICAgICBjcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luID09PSAnbnVsbCcgPyBudWxsIDogY3Jvc3NPcmlnaW47XG4gICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47IC8vIHByZXZlbnQgdGFpbnRlZCBjYW52YXNcbiAgICAgIH1cblxuICAgICAgaW1hZ2Uuc3JjID0gdXJsO1xuICAgICAgcmV0dXJuIGltYWdlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgQlJwJDMgPSB7fTtcbiAgLyogZ2xvYmFsIGRvY3VtZW50LCB3aW5kb3csIFJlc2l6ZU9ic2VydmVyLCBNdXRhdGlvbk9ic2VydmVyICovXG5cbiAgQlJwJDMucmVnaXN0ZXJCaW5kaW5nID0gZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLCBbMV0pOyAvLyBjb3B5XG5cbiAgICB2YXIgYiA9IHRoaXMuYmluZGVyKHRhcmdldCk7XG4gICAgcmV0dXJuIGIub24uYXBwbHkoYiwgYXJncyk7XG4gIH07XG5cbiAgQlJwJDMuYmluZGVyID0gZnVuY3Rpb24gKHRndCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcbiAgICB2YXIgdGd0SXNEb20gPSB0Z3QgPT09IGNvbnRhaW5lcldpbmRvdyB8fCB0Z3QgPT09IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudCB8fCB0Z3QgPT09IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudC5ib2R5IHx8IGRvbUVsZW1lbnQodGd0KTtcblxuICAgIGlmIChyLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA9PSBudWxsKSB7XG4gICAgICAvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL0V2ZW50TGlzdGVuZXJPcHRpb25zL2Jsb2IvZ2gtcGFnZXMvZXhwbGFpbmVyLm1kI2ZlYXR1cmUtZGV0ZWN0aW9uXG4gICAgICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdHMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7Ly8gbm90IHN1cHBvcnRlZFxuICAgICAgfVxuXG4gICAgICByLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA9IHN1cHBvcnRzUGFzc2l2ZTtcbiAgICB9XG5cbiAgICB2YXIgb24gPSBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkge1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICBpZiAodGd0SXNEb20gJiYgci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMpIHtcbiAgICAgICAgLy8gcmVwbGFjZSB1c2VDYXB0dXJlIHcvIG9wdHMgb2JqXG4gICAgICAgIGFyZ3NbMl0gPSB7XG4gICAgICAgICAgY2FwdHVyZTogdXNlQ2FwdHVyZSAhPSBudWxsID8gdXNlQ2FwdHVyZSA6IGZhbHNlLFxuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgIG9uY2U6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHIuYmluZGluZ3MucHVzaCh7XG4gICAgICAgIHRhcmdldDogdGd0LFxuICAgICAgICBhcmdzOiBhcmdzXG4gICAgICB9KTtcbiAgICAgICh0Z3QuYWRkRXZlbnRMaXN0ZW5lciB8fCB0Z3Qub24pLmFwcGx5KHRndCwgYXJncyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uOiBvbixcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IG9uLFxuICAgICAgYWRkTGlzdGVuZXI6IG9uLFxuICAgICAgYmluZDogb25cbiAgICB9O1xuICB9O1xuXG4gIEJScCQzLm5vZGVJc0RyYWdnYWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5pc05vZGUoKSAmJiAhbm9kZS5sb2NrZWQoKSAmJiBub2RlLmdyYWJiYWJsZSgpO1xuICB9O1xuXG4gIEJScCQzLm5vZGVJc0dyYWJiYWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKG5vZGUpICYmIG5vZGUuaW50ZXJhY3RpdmUoKTtcbiAgfTtcblxuICBCUnAkMy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcblxuICAgIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24gaXNTZWxlY3RlZChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuc2VsZWN0ZWQoKTtcbiAgICB9O1xuXG4gICAgdmFyIHRyaWdnZXJFdmVudHMgPSBmdW5jdGlvbiB0cmlnZ2VyRXZlbnRzKHRhcmdldCwgbmFtZXMsIGUsIHBvc2l0aW9uKSB7XG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgdGFyZ2V0ID0gci5jeTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICB0YXJnZXQuZW1pdCh7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiBuYW1lLFxuICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlzTXVsdFNlbEtleURvd24gPSBmdW5jdGlvbiBpc011bHRTZWxLZXlEb3duKGUpIHtcbiAgICAgIHJldHVybiBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7IC8vIG1heWJlIGUuYWx0S2V5XG4gICAgfTtcblxuICAgIHZhciBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaCA9IGZ1bmN0aW9uIGFsbG93UGFubmluZ1Bhc3N0aHJvdWdoKGRvd24sIGRvd25zKSB7XG4gICAgICB2YXIgYWxsb3dQYXNzdGhyb3VnaCA9IHRydWU7XG5cbiAgICAgIGlmIChyLmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSAmJiBkb3duICYmIGRvd24ucGFubmFibGUoKSkge1xuICAgICAgICAvLyBhIGdyYWJiYWJsZSBjb21wb3VuZCBub2RlIGJlbG93IHRoZSBlbGUgPT4gbm8gcGFzc3Rocm91Z2ggcGFubmluZ1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgZG93bnMgJiYgaSA8IGRvd25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGRvd24gPSBkb3duc1tpXTsgLy9pZiBhbnkgcGFyZW50IG5vZGUgaW4gZXZlbnQgaGllcmFyY2h5IGlzbid0IHBhbm5hYmxlLCByZWplY3QgcGFzc3Rocm91Z2hcblxuICAgICAgICAgIGlmIChkb3duLmlzTm9kZSgpICYmIGRvd24uaXNQYXJlbnQoKSAmJiAhZG93bi5wYW5uYWJsZSgpKSB7XG4gICAgICAgICAgICBhbGxvd1Bhc3N0aHJvdWdoID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93UGFzc3Rocm91Z2ggPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxsb3dQYXNzdGhyb3VnaDtcbiAgICB9O1xuXG4gICAgdmFyIHNldEdyYWJiZWQgPSBmdW5jdGlvbiBzZXRHcmFiYmVkKGVsZSkge1xuICAgICAgZWxlWzBdLl9wcml2YXRlLmdyYWJiZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgc2V0RnJlZWQgPSBmdW5jdGlvbiBzZXRGcmVlZChlbGUpIHtcbiAgICAgIGVsZVswXS5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBzZXRJbkRyYWdMYXllciA9IGZ1bmN0aW9uIHNldEluRHJhZ0xheWVyKGVsZSkge1xuICAgICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHNldE91dERyYWdMYXllciA9IGZ1bmN0aW9uIHNldE91dERyYWdMYXllcihlbGUpIHtcbiAgICAgIGVsZVswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllciA9IGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgc2V0R3JhYlRhcmdldCA9IGZ1bmN0aW9uIHNldEdyYWJUYXJnZXQoZWxlKSB7XG4gICAgICBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHJlbW92ZUdyYWJUYXJnZXQgPSBmdW5jdGlvbiByZW1vdmVHcmFiVGFyZ2V0KGVsZSkge1xuICAgICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldCA9IGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgYWRkVG9EcmFnTGlzdCA9IGZ1bmN0aW9uIGFkZFRvRHJhZ0xpc3QoZWxlLCBvcHRzKSB7XG4gICAgICB2YXIgbGlzdCA9IG9wdHMuYWRkVG9MaXN0O1xuICAgICAgdmFyIGxpc3RIYXNFbGUgPSBsaXN0LmhhcyhlbGUpO1xuXG4gICAgICBpZiAoIWxpc3RIYXNFbGUgJiYgZWxlLmdyYWJiYWJsZSgpICYmICFlbGUubG9ja2VkKCkpIHtcbiAgICAgICAgbGlzdC5tZXJnZShlbGUpO1xuICAgICAgICBzZXRHcmFiYmVkKGVsZSk7XG4gICAgICB9XG4gICAgfTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBjaGlsZCBub2RlcyBhbmQgaW5uZXIgZWRnZXNcbiAgICAvLyBvZiBhIGNvbXBvdW5kIG5vZGUgdG8gYmUgZHJhZ2dlZCBhcyB3ZWxsIGFzIHRoZSBncmFiYmVkIGFuZCBzZWxlY3RlZCBub2Rlc1xuXG5cbiAgICB2YXIgYWRkRGVzY2VuZGFudHNUb0RyYWcgPSBmdW5jdGlvbiBhZGREZXNjZW5kYW50c1RvRHJhZyhub2RlLCBvcHRzKSB7XG4gICAgICBpZiAoIW5vZGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5pbkRyYWdMYXllciA9PSBudWxsICYmIG9wdHMuYWRkVG9MaXN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBub3RoaW5nIHRvIGRvXG5cblxuICAgICAgdmFyIGlubmVyTm9kZXMgPSBub2RlLmRlc2NlbmRhbnRzKCk7XG5cbiAgICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICAgIGlubmVyTm9kZXMuZm9yRWFjaChzZXRJbkRyYWdMYXllcik7XG4gICAgICAgIGlubmVyTm9kZXMuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICAgIGFkZFRvRHJhZ0xpc3QoaW5uZXJOb2Rlcywgb3B0cyk7XG4gICAgICB9XG4gICAgfTsgLy8gYWRkcyB0aGUgZ2l2ZW4gbm9kZXMgYW5kIGl0cyBuZWlnaGJvdXJob29kIHRvIHRoZSBkcmFnIGxheWVyXG5cblxuICAgIHZhciBhZGROb2Rlc1RvRHJhZyA9IGZ1bmN0aW9uIGFkZE5vZGVzVG9EcmFnKG5vZGVzLCBvcHRzKSB7XG4gICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gbm9kZXMuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7XG5cbiAgICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgICBub2Rlcy5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiAhaGFzQ29tcG91bmROb2RlcyB8fCBlbGUuaXNFZGdlKCk7XG4gICAgICAgIH0pLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hZGRUb0xpc3QpIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgYWRkVG9EcmFnTGlzdChlbGUsIG9wdHMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYWRkRGVzY2VuZGFudHNUb0RyYWcobm9kZXMsIG9wdHMpOyAvLyBhbHdheXMgYWRkIHRvIGRyYWdcbiAgICAgIC8vIGFsc28gYWRkIG5vZGVzIGFuZCBlZGdlcyByZWxhdGVkIHRvIHRoZSB0b3Btb3N0IGFuY2VzdG9yXG5cbiAgICAgIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGVzLCB7XG4gICAgICAgIGluRHJhZ0xheWVyOiBvcHRzLmluRHJhZ0xheWVyXG4gICAgICB9KTtcbiAgICAgIHIudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKTtcbiAgICB9O1xuXG4gICAgdmFyIGFkZE5vZGVUb0RyYWcgPSBhZGROb2Rlc1RvRHJhZztcblxuICAgIHZhciBmcmVlRHJhZ2dlZEVsZW1lbnRzID0gZnVuY3Rpb24gZnJlZURyYWdnZWRFbGVtZW50cyhncmFiYmVkRWxlcykge1xuICAgICAgaWYgKCFncmFiYmVkRWxlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGp1c3QgZ28gb3ZlciBhbGwgZWxlbWVudHMgcmF0aGVyIHRoYW4gZG9pbmcgYSBidW5jaCBvZiAocG9zc2libHkgZXhwZW5zaXZlKSB0cmF2ZXJzYWxzXG5cblxuICAgICAgci5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBzZXRGcmVlZChlbGUpO1xuICAgICAgICBzZXRPdXREcmFnTGF5ZXIoZWxlKTtcbiAgICAgICAgcmVtb3ZlR3JhYlRhcmdldChlbGUpO1xuICAgICAgfSk7XG4gICAgICByLnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCk7XG4gICAgfTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBhbmNlc3RvciBub2RlcyBhbmQgZWRnZXMgc2hvdWxkIGdvXG4gICAgLy8gdG8gdGhlIGRyYWcgbGF5ZXIgKG9yIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZHJhZyBsYXllcikuXG5cblxuICAgIHZhciB1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciA9IGZ1bmN0aW9uIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGUsIG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLmluRHJhZ0xheWVyID09IG51bGwgJiYgb3B0cy5hZGRUb0xpc3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG5vdGhpbmcgdG8gZG9cblxuXG4gICAgICBpZiAoIW5vZGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBmaW5kIHRvcC1sZXZlbCBwYXJlbnRcblxuXG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7IC8vIG5vIHBhcmVudCBub2RlOiBubyBub2RlcyB0byBhZGQgdG8gdGhlIGRyYWcgbGF5ZXJcblxuICAgICAgaWYgKHBhcmVudC5zYW1lKG5vZGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vZGVzID0gcGFyZW50LmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UocGFyZW50KS51bm1lcmdlKG5vZGUpLnVubWVyZ2Uobm9kZS5kZXNjZW5kYW50cygpKTtcbiAgICAgIHZhciBlZGdlcyA9IG5vZGVzLmNvbm5lY3RlZEVkZ2VzKCk7XG5cbiAgICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICAgIGVkZ2VzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIGFkZFRvRHJhZ0xpc3QoZWxlLCBvcHRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBibHVyQWN0aXZlRG9tRWxlbWVudCA9IGZ1bmN0aW9uIGJsdXJBY3RpdmVEb21FbGVtZW50KCkge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIgIT0gbnVsbCkge1xuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGhhdmVNdXRhdGlvbnNBcGkgPSB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGhhdmVSZXNpemVPYnNlcnZlckFwaSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7IC8vIHdhdGNoIGZvciB3aGVuIHRoZSBjeSBjb250YWluZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb21cblxuICAgIGlmIChoYXZlTXV0YXRpb25zQXBpKSB7XG4gICAgICByLnJlbW92ZU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dG5zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBtdXRuID0gbXV0bnNbaV07XG4gICAgICAgICAgdmFyIHJOb2RlcyA9IG11dG4ucmVtb3ZlZE5vZGVzO1xuXG4gICAgICAgICAgaWYgKHJOb2Rlcykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIHJOb2RlID0gck5vZGVzW2pdO1xuXG4gICAgICAgICAgICAgIGlmIChyTm9kZSA9PT0gci5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyLmNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgIHIucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZShyLmNvbnRhaW5lci5wYXJlbnROb2RlLCB7XG4gICAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ0RPTU5vZGVSZW1vdmVkJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICByLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBvblJlc2l6ZSA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgICAgci5jeS5yZXNpemUoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgaWYgKGhhdmVNdXRhdGlvbnNBcGkpIHtcbiAgICAgIHIuc3R5bGVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgICByLnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZShyLmNvbnRhaW5lciwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IC8vIGF1dG8gcmVzaXplXG5cblxuICAgIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Jlc2l6ZScsIG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgaWYgKGhhdmVSZXNpemVPYnNlcnZlckFwaSkge1xuICAgICAgci5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihvblJlc2l6ZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgICAgci5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZm9yRWFjaFVwID0gZnVuY3Rpb24gZm9yRWFjaFVwKGRvbUVsZSwgZm4pIHtcbiAgICAgIHdoaWxlIChkb21FbGUgIT0gbnVsbCkge1xuICAgICAgICBmbihkb21FbGUpO1xuICAgICAgICBkb21FbGUgPSBkb21FbGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGludmFsaWRhdGVDb29yZHMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlQ29vcmRzKCkge1xuICAgICAgci5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKTtcbiAgICB9O1xuXG4gICAgZm9yRWFjaFVwKHIuY29udGFpbmVyLCBmdW5jdGlvbiAoZG9tRWxlKSB7XG4gICAgICByLnJlZ2lzdGVyQmluZGluZyhkb21FbGUsICd0cmFuc2l0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgICByLnJlZ2lzdGVyQmluZGluZyhkb21FbGUsICdhbmltYXRpb25lbmQnLCBpbnZhbGlkYXRlQ29vcmRzKTtcbiAgICAgIHIucmVnaXN0ZXJCaW5kaW5nKGRvbUVsZSwgJ3Njcm9sbCcsIGludmFsaWRhdGVDb29yZHMpO1xuICAgIH0pOyAvLyBzdG9wIHJpZ2h0IGNsaWNrIG1lbnUgZnJvbSBhcHBlYXJpbmcgb24gY3lcblxuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgdmFyIGluQm94U2VsZWN0aW9uID0gZnVuY3Rpb24gaW5Cb3hTZWxlY3Rpb24oKSB7XG4gICAgICByZXR1cm4gci5zZWxlY3Rpb25bNF0gIT09IDA7XG4gICAgfTtcblxuICAgIHZhciBldmVudEluQ29udGFpbmVyID0gZnVuY3Rpb24gZXZlbnRJbkNvbnRhaW5lcihlKSB7XG4gICAgICAvLyBzYXZlIGN5Y2xlcyBpZiBtb3VzZSBldmVudHMgYXJlbid0IHRvIGJlIGNhcHR1cmVkXG4gICAgICB2YXIgY29udGFpbmVyUGFnZUNvb3JkcyA9IHIuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1xuICAgICAgdmFyIHggPSBjb250YWluZXJQYWdlQ29vcmRzWzBdO1xuICAgICAgdmFyIHkgPSBjb250YWluZXJQYWdlQ29vcmRzWzFdO1xuICAgICAgdmFyIHdpZHRoID0gY29udGFpbmVyUGFnZUNvb3Jkc1syXTtcbiAgICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJQYWdlQ29vcmRzWzNdO1xuICAgICAgdmFyIHBvc2l0aW9ucyA9IGUudG91Y2hlcyA/IGUudG91Y2hlcyA6IFtlXTtcbiAgICAgIHZhciBhdExlYXN0T25lUG9zSW5zaWRlID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwID0gcG9zaXRpb25zW2ldO1xuXG4gICAgICAgIGlmICh4IDw9IHAuY2xpZW50WCAmJiBwLmNsaWVudFggPD0geCArIHdpZHRoICYmIHkgPD0gcC5jbGllbnRZICYmIHAuY2xpZW50WSA8PSB5ICsgaGVpZ2h0KSB7XG4gICAgICAgICAgYXRMZWFzdE9uZVBvc0luc2lkZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdExlYXN0T25lUG9zSW5zaWRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRhaW5lciA9IHIuY29udGFpbmVyO1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgdmFyIHRQYXJlbnQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIHZhciBjb250YWluZXJJc1RhcmdldCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAodFBhcmVudCkge1xuICAgICAgICBpZiAodFBhcmVudCA9PT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgY29udGFpbmVySXNUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdFBhcmVudCA9IHRQYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250YWluZXJJc1RhcmdldCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGlmIHRhcmdldCBpcyBvdXRpc2RlIGN5IGNvbnRhaW5lciwgdGhlbiB0aGlzIGV2ZW50IGlzIG5vdCBmb3IgdXNcblxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9OyAvLyBQcmltYXJ5IGtleVxuXG5cbiAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIG1vdXNlZG93bkhhbmRsZXIoZSkge1xuICAgICAgaWYgKCFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYmx1ckFjdGl2ZURvbUVsZW1lbnQoKTtcbiAgICAgIHIuaG92ZXJEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgICAgci5ob3ZlckRhdGEud2hpY2ggPSBlLndoaWNoO1xuICAgICAgdmFyIGN5ID0gci5jeTtcbiAgICAgIHZhciBncG9zID0gW2UuY2xpZW50WCwgZS5jbGllbnRZXTtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZ3Bvc1swXSwgZ3Bvc1sxXSk7XG4gICAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgICB2YXIgbmVhcnMgPSByLmZpbmROZWFyZXN0RWxlbWVudHMocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICAgIHZhciBuZWFyID0gbmVhcnNbMF07XG4gICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gcG9zO1xuICAgICAgci5ob3ZlckRhdGEubWRvd25HUG9zID0gZ3BvcztcblxuICAgICAgdmFyIGNoZWNrRm9yVGFwaG9sZCA9IGZ1bmN0aW9uIGNoZWNrRm9yVGFwaG9sZCgpIHtcbiAgICAgICAgci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBjbGVhclRpbWVvdXQoci5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQpO1xuICAgICAgICByLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChyLmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBlbGUgPSByLmhvdmVyRGF0YS5kb3duO1xuXG4gICAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICAgIGVsZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0YXBob2xkJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN5LmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhcGhvbGQnLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgci50YXBob2xkRHVyYXRpb24pO1xuICAgICAgfTsgLy8gUmlnaHQgY2xpY2sgYnV0dG9uXG5cblxuICAgICAgaWYgKGUud2hpY2ggPT0gMykge1xuICAgICAgICByLmhvdmVyRGF0YS5jeHRTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBzdGFydCcsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgICAgICBuZWFyLmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH1cblxuICAgICAgICByLmhvdmVyRGF0YS5kb3duVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICByLmhvdmVyRGF0YS5jeHREcmFnZ2VkID0gZmFsc2U7IC8vIFByaW1hcnkgYnV0dG9uXG4gICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gMSkge1xuICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgICAgfSAvLyBFbGVtZW50IGRyYWdnaW5nXG5cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGlzIHVuZGVyIHRoZSBjdXJzb3IgYW5kIGl0IGlzIGRyYWdnYWJsZSwgcHJlcGFyZSB0byBncmFiIGl0XG4gICAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHIubm9kZUlzR3JhYmJhYmxlKG5lYXIpKSB7XG4gICAgICAgICAgICAgIHZhciBtYWtlRXZlbnQgPSBmdW5jdGlvbiBtYWtlRXZlbnQodHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB2YXIgdHJpZ2dlckdyYWIgPSBmdW5jdGlvbiB0cmlnZ2VyR3JhYihlbGUpIHtcbiAgICAgICAgICAgICAgICBlbGUuZW1pdChtYWtlRXZlbnQoJ2dyYWInKSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc2V0R3JhYlRhcmdldChuZWFyKTtcblxuICAgICAgICAgICAgICBpZiAoIW5lYXIuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cyA9IHIuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgYWRkTm9kZVRvRHJhZyhuZWFyLCB7XG4gICAgICAgICAgICAgICAgICBhZGRUb0xpc3Q6IGRyYWdnZWRFbGVtZW50c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG5lYXIuZW1pdChtYWtlRXZlbnQoJ2dyYWJvbicpKS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkcmFnZ2VkRWxlbWVudHMgPSByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVzID0gY3kuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5zZWxlY3RlZCgpICYmIHIubm9kZUlzR3JhYmJhYmxlKGVsZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoc2VsZWN0ZWROb2Rlcywge1xuICAgICAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlbWVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFib24nKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2Rlcy5mb3JFYWNoKHRyaWdnZXJHcmFiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgICAgICByLmhvdmVyRGF0YS5kb3ducyA9IG5lYXJzO1xuICAgICAgICAgIHIuaG92ZXJEYXRhLmRvd25UaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ21vdXNlZG93bicsICd0YXBzdGFydCcsICd2bW91c2Vkb3duJ10sIGUsIHtcbiAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgICBzZWxlY3RbNF0gPSAxO1xuICAgICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH07XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgICByLnJlZHJhdygpO1xuICAgICAgICB9IGVsc2UgaWYgKG5lYXIucGFubmFibGUoKSkge1xuICAgICAgICAgIHNlbGVjdFs0XSA9IDE7IC8vIGZvciBmdXR1cmUgcGFuXG4gICAgICAgIH1cblxuICAgICAgICBjaGVja0ZvclRhcGhvbGQoKTtcbiAgICAgIH0gLy8gSW5pdGlhbGl6ZSBzZWxlY3Rpb24gYm94IGNvb3JkaW5hdGVzXG5cblxuICAgICAgc2VsZWN0WzBdID0gc2VsZWN0WzJdID0gcG9zWzBdO1xuICAgICAgc2VsZWN0WzFdID0gc2VsZWN0WzNdID0gcG9zWzFdO1xuICAgIH0sIGZhbHNlKTtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICdtb3VzZW1vdmUnLCBmdW5jdGlvbiBtb3VzZW1vdmVIYW5kbGVyKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcblxuICAgICAgaWYgKCFjYXB0dXJlICYmICFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICB2YXIgZ3BvcyA9IFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGdwb3NbMF0sIGdwb3NbMV0pO1xuICAgICAgdmFyIG1kb3duUG9zID0gci5ob3ZlckRhdGEubWRvd25Qb3M7XG4gICAgICB2YXIgbWRvd25HUG9zID0gci5ob3ZlckRhdGEubWRvd25HUG9zO1xuICAgICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgICAgdmFyIG5lYXIgPSBudWxsO1xuXG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5ob3ZlckRhdGEuZHJhZ2dpbmcgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3QgPSByLmhvdmVyRGF0YS5sYXN0O1xuICAgICAgdmFyIGRvd24gPSByLmhvdmVyRGF0YS5kb3duO1xuICAgICAgdmFyIGRpc3AgPSBbcG9zWzBdIC0gc2VsZWN0WzJdLCBwb3NbMV0gLSBzZWxlY3RbM11dO1xuICAgICAgdmFyIGRyYWdnZWRFbGVtZW50cyA9IHIuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7XG4gICAgICB2YXIgaXNPdmVyVGhyZXNob2xkRHJhZztcblxuICAgICAgaWYgKG1kb3duR1Bvcykge1xuICAgICAgICB2YXIgZHggPSBncG9zWzBdIC0gbWRvd25HUG9zWzBdO1xuICAgICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgICAgdmFyIGR5ID0gZ3Bvc1sxXSAtIG1kb3duR1Bvc1sxXTtcbiAgICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICAgIHZhciBkaXN0MiA9IGR4MiArIGR5MjtcbiAgICAgICAgci5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyA9IGlzT3ZlclRocmVzaG9sZERyYWcgPSBkaXN0MiA+PSByLmRlc2t0b3BUYXBUaHJlc2hvbGQyO1xuICAgICAgfVxuXG4gICAgICB2YXIgbXVsdFNlbEtleURvd24gPSBpc011bHRTZWxLZXlEb3duKGUpO1xuXG4gICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICByLmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZURyYWdEZWx0YSA9IGZ1bmN0aW9uIHVwZGF0ZURyYWdEZWx0YSgpIHtcbiAgICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSB8fCBbXTtcblxuICAgICAgICBpZiAoZHJhZ0RlbHRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICAgIGRyYWdEZWx0YVsxXSArPSBkaXNwWzFdO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICB0cmlnZ2VyRXZlbnRzKG5lYXIsIFsnbW91c2Vtb3ZlJywgJ3Ztb3VzZW1vdmUnLCAndGFwZHJhZyddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcblxuICAgICAgdmFyIGdvSW50b0JveE1vZGUgPSBmdW5jdGlvbiBnb0ludG9Cb3hNb2RlKCkge1xuICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnYm94c3RhcnQnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdFs0XSA9IDE7XG4gICAgICAgIHIuaG92ZXJEYXRhLnNlbGVjdGluZyA9IHRydWU7XG4gICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9OyAvLyB0cmlnZ2VyIGNvbnRleHQgZHJhZyBpZiBybW91c2UgZG93blxuXG5cbiAgICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMykge1xuICAgICAgICAvLyBidXQgb25seSBpZiBvdmVyIHRocmVzaG9sZFxuICAgICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dGRyYWcnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICAgIGRvd24uZW1pdChjeHRFdnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoIXIuaG92ZXJEYXRhLmN4dE92ZXIgfHwgbmVhciAhPT0gci5ob3ZlckRhdGEuY3h0T3Zlcikge1xuICAgICAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICAgICAgci5ob3ZlckRhdGEuY3h0T3Zlci5lbWl0KHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgci5ob3ZlckRhdGEuY3h0T3ZlciA9IG5lYXI7XG5cbiAgICAgICAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgICAgICAgIG5lYXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY3h0ZHJhZ292ZXInLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDaGVjayBpZiB3ZSBhcmUgZHJhZyBwYW5uaW5nIHRoZSBlbnRpcmUgZ3JhcGhcblxuICAgICAgfSBlbHNlIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkpIHtcbiAgICAgICAgICB2YXIgZGVsdGFQO1xuXG4gICAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuKSB7XG4gICAgICAgICAgICB2YXIgbWRQb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICAgICAgICAgIGRlbHRhUCA9IHtcbiAgICAgICAgICAgICAgeDogKHBvc1swXSAtIG1kUG9zWzBdKSAqIHpvb20sXG4gICAgICAgICAgICAgIHk6IChwb3NbMV0gLSBtZFBvc1sxXSkgKiB6b29tXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgci5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsdGFQID0ge1xuICAgICAgICAgICAgICB4OiBkaXNwWzBdICogem9vbSxcbiAgICAgICAgICAgICAgeTogZGlzcFsxXSAqIHpvb21cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3kucGFuQnkoZGVsdGFQKTtcbiAgICAgICAgICBjeS5lbWl0KCdkcmFncGFuJyk7XG4gICAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IHRydWU7XG4gICAgICAgIH0gLy8gTmVlZHMgcmVwcm9qZWN0IGR1ZSB0byBwYW4gY2hhbmdpbmcgdmlld3BvcnRcblxuXG4gICAgICAgIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7IC8vIENoZWNrcyBwcmltYXJ5IGJ1dHRvbiBkb3duICYgb3V0IG9mIHRpbWUgJiBtb3VzZSBub3QgbW92ZWQgbXVjaFxuICAgICAgfSBlbHNlIGlmIChzZWxlY3RbNF0gPT0gMSAmJiAoZG93biA9PSBudWxsIHx8IGRvd24ucGFubmFibGUoKSkpIHtcbiAgICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSAmJiAobXVsdFNlbEtleURvd24gfHwgIWN5LnBhbm5pbmdFbmFibGVkKCkgfHwgIWN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSkge1xuICAgICAgICAgICAgZ29JbnRvQm94TW9kZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICB2YXIgYWxsb3dQYXNzdGhyb3VnaCA9IGFsbG93UGFubmluZ1Bhc3N0aHJvdWdoKGRvd24sIHIuaG92ZXJEYXRhLmRvd25zKTtcblxuICAgICAgICAgICAgaWYgKGFsbG93UGFzc3Rocm91Z2gpIHtcbiAgICAgICAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICByLmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbiA9IHRydWU7XG4gICAgICAgICAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICAgICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IGFycmF5MnBvaW50KG1kb3duUG9zKTtcbiAgICAgICAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZG93biAmJiBkb3duLnBhbm5hYmxlKCkgJiYgZG93bi5hY3RpdmUoKSkge1xuICAgICAgICAgICAgZG93bi51bmFjdGl2YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZG93biAmJiBkb3duLnBhbm5hYmxlKCkgJiYgZG93bi5hY3RpdmUoKSkge1xuICAgICAgICAgIGRvd24udW5hY3RpdmF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCghZG93biB8fCAhZG93bi5ncmFiYmVkKCkpICYmIG5lYXIgIT0gbGFzdCkge1xuICAgICAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnRzKGxhc3QsIFsnbW91c2VvdXQnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ21vdXNlb3ZlcicsICd0YXBkcmFnb3ZlciddLCBlLCB7XG4gICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLmhvdmVyRGF0YS5sYXN0ID0gbmVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb3duKSB7XG4gICAgICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHRha2UgYWN0aW9uXG4gICAgICAgICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpICYmIG11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICAgIC8vIHRoZW4gc2VsZWN0aW9uIG92ZXJyaWRlc1xuICAgICAgICAgICAgICBpZiAoZG93biAmJiBkb3duLmdyYWJiZWQoKSkge1xuICAgICAgICAgICAgICAgIGZyZWVEcmFnZ2VkRWxlbWVudHMoZHJhZ2dlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBkb3duLmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdmcmVlJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoci5kcmFnRGF0YS5kaWREcmFnKSB7XG4gICAgICAgICAgICAgICAgICBkb3duLmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdkcmFnZnJlZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdvSW50b0JveE1vZGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG93biAmJiBkb3duLmdyYWJiZWQoKSAmJiByLm5vZGVJc0RyYWdnYWJsZShkb3duKSkge1xuICAgICAgICAgICAgICAvLyBkcmFnIG5vZGVcbiAgICAgICAgICAgICAgdmFyIGp1c3RTdGFydGVkRHJhZyA9ICFyLmRyYWdEYXRhLmRpZERyYWc7XG5cbiAgICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgci5kcmFnRGF0YS5kaWREcmFnID0gdHJ1ZTsgLy8gaW5kaWNhdGUgdGhhdCB3ZSBhY3R1YWxseSBkaWQgZHJhZyB0aGUgbm9kZVxuICAgICAgICAgICAgICAvLyBub3csIGFkZCB0aGUgZWxlbWVudHMgdG8gdGhlIGRyYWcgbGF5ZXIgaWYgbm90IGRvbmUgYWxyZWFkeVxuXG4gICAgICAgICAgICAgIGlmICghci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzKSB7XG4gICAgICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoZHJhZ2dlZEVsZW1lbnRzLCB7XG4gICAgICAgICAgICAgICAgICBpbkRyYWdMYXllcjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHRvdGFsU2hpZnQgPSB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG51bWJlciQxKGRpc3BbMF0pICYmIG51bWJlciQxKGRpc3BbMV0pKSB7XG4gICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICAgICAgdG90YWxTaGlmdC55ICs9IGRpc3BbMV07XG5cbiAgICAgICAgICAgICAgICBpZiAoanVzdFN0YXJ0ZWREcmFnKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZHJhZ0RlbHRhID0gci5ob3ZlckRhdGEuZHJhZ0RlbHRhO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RlbHRhICYmIG51bWJlciQxKGRyYWdEZWx0YVswXSkgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnggKz0gZHJhZ0RlbHRhWzBdO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZHJhZ0RlbHRhWzFdO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyA9IHRydWU7XG4gICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5zaWxlbnRTaGlmdCh0b3RhbFNoaWZ0KS5lbWl0KCdwb3NpdGlvbiBkcmFnJyk7XG4gICAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgICAgICByLnJlZHJhdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2F2ZSBkcmFnIGRlbHRhIGZvciB3aGVuIHdlIGFjdHVhbGx5IHN0YXJ0IGRyYWdnaW5nIHNvIHRoZSByZWxhdGl2ZSBncmFiIHBvcyBpcyBjb25zdGFudFxuICAgICAgICAgICAgdXBkYXRlRHJhZ0RlbHRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHByZXZlbnQgdGhlIGRyYWdnaW5nIGZyb20gdHJpZ2dlcmluZyB0ZXh0IHNlbGVjdGlvbiBvbiB0aGUgcGFnZVxuXG5cbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RbMl0gPSBwb3NbMF07XG4gICAgICBzZWxlY3RbM10gPSBwb3NbMV07XG5cbiAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG4gICAgdmFyIGNsaWNrVGltZW91dCwgZGlkRG91YmxlQ2xpY2ssIHByZXZDbGlja1RpbWVTdGFtcDtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICdtb3VzZXVwJywgZnVuY3Rpb24gbW91c2V1cEhhbmRsZXIoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgICAgdmFyIGNhcHR1cmUgPSByLmhvdmVyRGF0YS5jYXB0dXJlO1xuXG4gICAgICBpZiAoIWNhcHR1cmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByLmhvdmVyRGF0YS5jYXB0dXJlID0gZmFsc2U7XG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgICB2YXIgbmVhciA9IHIuZmluZE5lYXJlc3RFbGVtZW50KHBvc1swXSwgcG9zWzFdLCB0cnVlLCBmYWxzZSk7XG4gICAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICAgIHZhciBkb3duID0gci5ob3ZlckRhdGEuZG93bjtcbiAgICAgIHZhciBtdWx0U2VsS2V5RG93biA9IGlzTXVsdFNlbEtleURvd24oZSk7XG5cbiAgICAgIGlmIChyLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24pIHtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cblxuICAgICAgci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCA9IHRydWU7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7IC8vIG5vdCBhY3RpdmUgYmcgbm93XG5cbiAgICAgIGlmIChkb3duKSB7XG4gICAgICAgIGRvd24udW5hY3RpdmF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDMpIHtcbiAgICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICBkb3duLmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXIuaG92ZXJEYXRhLmN4dERyYWdnZWQpIHtcbiAgICAgICAgICB2YXIgY3h0VGFwID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgIHR5cGU6ICdjeHR0YXAnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICAgIGRvd24uZW1pdChjeHRUYXApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjeS5lbWl0KGN4dFRhcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByLmhvdmVyRGF0YS53aGljaCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHIuaG92ZXJEYXRhLndoaWNoID09PSAxKSB7XG4gICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZXVwJywgJ3RhcGVuZCcsICd2bW91c2V1cCddLCBlLCB7XG4gICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXIuZHJhZ0RhdGEuZGlkRHJhZyAmJiAvLyBkaWRuJ3QgbW92ZSBhIG5vZGUgYXJvdW5kXG4gICAgICAgICFyLmhvdmVyRGF0YS5kcmFnZ2VkICYmIC8vIGRpZG4ndCBwYW5cbiAgICAgICAgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJiAvLyBub3QgYm94IHNlbGVjdGlvblxuICAgICAgICAhci5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyAvLyBkaWRuJ3QgbW92ZSB0b28gbXVjaFxuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKGRvd24sIFtcImNsaWNrXCIsIFwidGFwXCIsIFwidmNsaWNrXCJdLCBlLCB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaWREb3VibGVDbGljayA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGUudGltZVN0YW1wIC0gcHJldkNsaWNrVGltZVN0YW1wIDw9IGN5Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSkge1xuICAgICAgICAgICAgY2xpY2tUaW1lb3V0ICYmIGNsZWFyVGltZW91dChjbGlja1RpbWVvdXQpO1xuICAgICAgICAgICAgZGlkRG91YmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgcHJldkNsaWNrVGltZVN0YW1wID0gbnVsbDtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoZG93biwgW1wiZGJsY2xpY2tcIiwgXCJkYmx0YXBcIiwgXCJ2ZGJsY2xpY2tcIl0sIGUsIHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGlja1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRpZERvdWJsZUNsaWNrKSByZXR1cm47XG4gICAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoZG93biwgW1wib25lY2xpY2tcIiwgXCJvbmV0YXBcIiwgXCJ2b25lY2xpY2tcIl0sIGUsIHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgY3kubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKTtcbiAgICAgICAgICAgIHByZXZDbGlja1RpbWVTdGFtcCA9IGUudGltZVN0YW1wO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEZXNlbGVjdCBhbGwgZWxlbWVudHMgaWYgbm90aGluZyBpcyBjdXJyZW50bHkgdW5kZXIgdGhlIG1vdXNlIGN1cnNvciBhbmQgd2UgYXJlbid0IGRyYWdnaW5nIHNvbWV0aGluZ1xuXG5cbiAgICAgICAgaWYgKGRvd24gPT0gbnVsbCAvLyBub3QgbW91c2Vkb3duIG9uIG5vZGVcbiAgICAgICAgJiYgIXIuZHJhZ0RhdGEuZGlkRHJhZyAvLyBkaWRuJ3QgbW92ZSB0aGUgbm9kZSBhcm91bmRcbiAgICAgICAgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAvLyBub3QgYm94IHNlbGVjdGlvblxuICAgICAgICAmJiAhci5ob3ZlckRhdGEuZHJhZ2dlZCAvLyBkaWRuJ3QgcGFuXG4gICAgICAgICYmICFpc011bHRTZWxLZXlEb3duKGUpKSB7XG4gICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuXG4gICAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzID0gZHJhZ2dlZEVsZW1lbnRzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICB9IC8vIFNpbmdsZSBzZWxlY3Rpb25cblxuXG4gICAgICAgIGlmIChuZWFyID09IGRvd24gJiYgIXIuZHJhZ0RhdGEuZGlkRHJhZyAmJiAhci5ob3ZlckRhdGEuc2VsZWN0aW5nKSB7XG4gICAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCAmJiBuZWFyLl9wcml2YXRlLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykgOyBlbHNlIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdhZGRpdGl2ZScgfHwgbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgICAgaWYgKG5lYXIuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIG5lYXIudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZWFyLnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCFtdWx0U2VsS2V5RG93bikge1xuICAgICAgICAgICAgICAgIGN5LiQoaXNTZWxlY3RlZCkudW5tZXJnZShuZWFyKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgICAgICAgIG5lYXIuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgICAgICB2YXIgYm94ID0gY3kuY29sbGVjdGlvbihyLmdldEFsbEluQm94KHNlbGVjdFswXSwgc2VsZWN0WzFdLCBzZWxlY3RbMl0sIHNlbGVjdFszXSkpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN5LmVtaXQoe1xuICAgICAgICAgICAgdHlwZTogJ2JveGVuZCcsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBlbGVXb3VsZEJlU2VsZWN0ZWQgPSBmdW5jdGlvbiBlbGVXb3VsZEJlU2VsZWN0ZWQoZWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKSAmJiAhZWxlLnNlbGVjdGVkKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdhZGRpdGl2ZScpIHtcbiAgICAgICAgICAgIGJveC5lbWl0KCdib3gnKS5zdGRGaWx0ZXIoZWxlV291bGRCZVNlbGVjdGVkKS5zZWxlY3QoKS5lbWl0KCdib3hzZWxlY3QnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFtdWx0U2VsS2V5RG93bikge1xuICAgICAgICAgICAgICBjeS4kKGlzU2VsZWN0ZWQpLnVubWVyZ2UoYm94KS51bnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib3guZW1pdCgnYm94Jykuc3RkRmlsdGVyKGVsZVdvdWxkQmVTZWxlY3RlZCkuc2VsZWN0KCkuZW1pdCgnYm94c2VsZWN0Jyk7XG4gICAgICAgICAgfSAvLyBhbHdheXMgbmVlZCByZWRyYXcgaW4gY2FzZSBlbGVzIHVuc2VsZWN0YWJsZVxuXG5cbiAgICAgICAgICByLnJlZHJhdygpO1xuICAgICAgICB9IC8vIENhbmNlbCBkcmFnIHBhblxuXG5cbiAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nKSB7XG4gICAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGVjdFs0XSkge1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgIHZhciBkb3duV2FzR3JhYmJlZCA9IGRvd24gJiYgZG93bi5ncmFiYmVkKCk7XG4gICAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlbWVudHMpO1xuXG4gICAgICAgICAgaWYgKGRvd25XYXNHcmFiYmVkKSB7XG4gICAgICAgICAgICBkb3duLmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLmVtaXQoJ2ZyZWUnKTtcblxuICAgICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgICBkb3duLmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGVsc2Ugbm90IHJpZ2h0IG1vdXNlXG5cblxuICAgICAgc2VsZWN0WzRdID0gMDtcbiAgICAgIHIuaG92ZXJEYXRhLmRvd24gPSBudWxsO1xuICAgICAgci5ob3ZlckRhdGEuY3h0U3RhcnRlZCA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzID0gZmFsc2U7XG4gICAgICByLmhvdmVyRGF0YS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgIHIuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWcgPSBmYWxzZTtcbiAgICAgIHIuZHJhZ0RhdGEuZGlkRHJhZyA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEuZHJhZ0RlbHRhID0gW107XG4gICAgICByLmhvdmVyRGF0YS5tZG93blBvcyA9IG51bGw7XG4gICAgICByLmhvdmVyRGF0YS5tZG93bkdQb3MgPSBudWxsO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIHZhciB3aGVlbEhhbmRsZXIgPSBmdW5jdGlvbiB3aGVlbEhhbmRsZXIoZSkge1xuICAgICAgaWYgKHIuc2Nyb2xsaW5nUGFnZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHdoaWxlIHNjcm9sbGluZywgaWdub3JlIHdoZWVsLXRvLXpvb21cblxuXG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgIHZhciBycG9zID0gW3Bvc1swXSAqIHpvb20gKyBwYW4ueCwgcG9zWzFdICogem9vbSArIHBhbi55XTtcblxuICAgICAgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLmhvdmVyRGF0YS5jeHRTdGFydGVkIHx8IGluQm94U2VsZWN0aW9uKCkpIHtcbiAgICAgICAgLy8gaWYgcGFuIGRyYWdnaW5nIG9yIGN4dCBkcmFnZ2luZywgd2hlZWwgbW92ZW1lbnRzIG1ha2Ugbm8gem9vbVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS51c2VyWm9vbWluZ0VuYWJsZWQoKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHIuZGF0YS53aGVlbFpvb21pbmcgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQoci5kYXRhLndoZWVsVGltZW91dCk7XG4gICAgICAgIHIuZGF0YS53aGVlbFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByLmRhdGEud2hlZWxab29taW5nID0gZmFsc2U7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgdmFyIGRpZmY7XG5cbiAgICAgICAgaWYgKGUuZGVsdGFZICE9IG51bGwpIHtcbiAgICAgICAgICBkaWZmID0gZS5kZWx0YVkgLyAtMjUwO1xuICAgICAgICB9IGVsc2UgaWYgKGUud2hlZWxEZWx0YVkgIT0gbnVsbCkge1xuICAgICAgICAgIGRpZmYgPSBlLndoZWVsRGVsdGFZIC8gMTAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaWZmID0gZS53aGVlbERlbHRhIC8gMTAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZmYgPSBkaWZmICogci53aGVlbFNlbnNpdGl2aXR5O1xuICAgICAgICB2YXIgbmVlZHNXaGVlbEZpeCA9IGUuZGVsdGFNb2RlID09PSAxO1xuXG4gICAgICAgIGlmIChuZWVkc1doZWVsRml4KSB7XG4gICAgICAgICAgLy8gZml4ZXMgc2xvdyB3aGVlbCBldmVudHMgb24gZmYvbGludXggYW5kIGZmL3dpbmRvd3NcbiAgICAgICAgICBkaWZmICo9IDMzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld1pvb20gPSBjeS56b29tKCkgKiBNYXRoLnBvdygxMCwgZGlmZik7XG5cbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnKSB7XG4gICAgICAgICAgbmV3Wm9vbSA9IHIuZ2VzdHVyZVN0YXJ0Wm9vbSAqIGUuc2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBjeS56b29tKHtcbiAgICAgICAgICBsZXZlbDogbmV3Wm9vbSxcbiAgICAgICAgICByZW5kZXJlZFBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBycG9zWzBdLFxuICAgICAgICAgICAgeTogcnBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGN5LmVtaXQoZS50eXBlID09PSAnZ2VzdHVyZWNoYW5nZScgPyAncGluY2h6b29tJyA6ICdzY3JvbGx6b29tJyk7XG4gICAgICB9XG4gICAgfTsgLy8gRnVuY3Rpb25zIHRvIGhlbHAgd2l0aCB3aGV0aGVyIG1vdXNlIHdoZWVsIHNob3VsZCB0cmlnZ2VyIHpvb21pbmdcbiAgICAvLyAtLVxuXG5cbiAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3doZWVsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTsgLy8gZGlzYWJsZSBub25zdGFuZGFyZCB3aGVlbCBldmVudHNcbiAgICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNld2hlZWwnLCB3aGVlbEhhbmRsZXIsIHRydWUpO1xuICAgIC8vIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnRE9NTW91c2VTY3JvbGwnLCB3aGVlbEhhbmRsZXIsIHRydWUpO1xuICAgIC8vIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnTW96TW91c2VQaXhlbFNjcm9sbCcsIHdoZWVsSGFuZGxlciwgdHJ1ZSk7IC8vIG9sZGVyIGZpcmVmb3hcblxuICAgIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Njcm9sbCcsIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgci5zY3JvbGxpbmdQYWdlID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dChyLnNjcm9sbGluZ1BhZ2VUaW1lb3V0KTtcbiAgICAgIHIuc2Nyb2xsaW5nUGFnZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgci5zY3JvbGxpbmdQYWdlID0gZmFsc2U7XG4gICAgICB9LCAyNTApO1xuICAgIH0sIHRydWUpOyAvLyBkZXNrdG9wIHNhZmFyaSBwaW5jaCB0byB6b29tIHN0YXJ0XG5cbiAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2dlc3R1cmVzdGFydCcsIGZ1bmN0aW9uIGdlc3R1cmVTdGFydEhhbmRsZXIoZSkge1xuICAgICAgci5nZXN0dXJlU3RhcnRab29tID0gci5jeS56b29tKCk7XG5cbiAgICAgIGlmICghci5oYXNUb3VjaFN0YXJ0ZWQpIHtcbiAgICAgICAgLy8gZG9uJ3QgYWZmZWN0IHRvdWNoIGRldmljZXMgbGlrZSBpcGhvbmVcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0sIHRydWUpO1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnZ2VzdHVyZWNoYW5nZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIXIuaGFzVG91Y2hTdGFydGVkKSB7XG4gICAgICAgIC8vIGRvbid0IGFmZmVjdCB0b3VjaCBkZXZpY2VzIGxpa2UgaXBob25lXG4gICAgICAgIHdoZWVsSGFuZGxlcihlKTtcbiAgICAgIH1cbiAgICB9LCB0cnVlKTsgLy8gRnVuY3Rpb25zIHRvIGhlbHAgd2l0aCBoYW5kbGluZyBtb3VzZW91dC9tb3VzZW92ZXIgb24gdGhlIEN5dG9zY2FwZSBjb250YWluZXJcbiAgICAvLyBIYW5kbGUgbW91c2VvdXQgb24gQ3l0b3NjYXBlIGNvbnRhaW5lclxuXG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdtb3VzZW91dCcsIGZ1bmN0aW9uIG1vdXNlT3V0SGFuZGxlcihlKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgIHIuY3kuZW1pdCh7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdtb3VzZW91dCcsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBmYWxzZSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdtb3VzZW92ZXInLCBmdW5jdGlvbiBtb3VzZU92ZXJIYW5kbGVyKGUpIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgci5jeS5lbWl0KHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgdHlwZTogJ21vdXNlb3ZlcicsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBmYWxzZSk7XG4gICAgdmFyIGYxeDEsIGYxeTEsIGYyeDEsIGYyeTE7IC8vIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuXG4gICAgdmFyIGRpc3RhbmNlMSwgZGlzdGFuY2UxU3E7IC8vIGluaXRpYWwgZGlzdGFuY2UgYmV0d2VlbiBmaW5nZXIgMSBhbmQgZmluZ2VyIDIgZm9yIHBpbmNoLXRvLXpvb21cblxuICAgIHZhciBjZW50ZXIxLCBtb2RlbENlbnRlcjE7IC8vIGNlbnRlciBwb2ludCBvbiBzdGFydCBwaW5jaCB0byB6b29tXG5cbiAgICB2YXIgb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wO1xuICAgIHZhciBjb250YWluZXJXaWR0aCwgY29udGFpbmVySGVpZ2h0O1xuICAgIHZhciB0d29GaW5nZXJzU3RhcnRJbnNpZGU7XG5cbiAgICB2YXIgZGlzdGFuY2UgPSBmdW5jdGlvbiBkaXN0YW5jZSh4MSwgeTEsIHgyLCB5Mikge1xuICAgICAgcmV0dXJuIE1hdGguc3FydCgoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSkpO1xuICAgIH07XG5cbiAgICB2YXIgZGlzdGFuY2VTcSA9IGZ1bmN0aW9uIGRpc3RhbmNlU3EoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICAgIHJldHVybiAoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSk7XG4gICAgfTtcblxuICAgIHZhciB0b3VjaHN0YXJ0SGFuZGxlcjtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0b3VjaHN0YXJ0SGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNoc3RhcnRIYW5kbGVyKGUpIHtcbiAgICAgIHIuaGFzVG91Y2hTdGFydGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKCFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYmx1ckFjdGl2ZURvbUVsZW1lbnQoKTtcbiAgICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGN5ID0gci5jeTtcbiAgICAgIHZhciBub3cgPSByLnRvdWNoRGF0YS5ub3c7XG4gICAgICB2YXIgZWFybGllciA9IHIudG91Y2hEYXRhLmVhcmxpZXI7XG5cbiAgICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUudG91Y2hlc1sxXSkge1xuICAgICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1sxXS5jbGllbnRYLCBlLnRvdWNoZXNbMV0uY2xpZW50WSk7XG4gICAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgICAgbm93WzNdID0gcG9zWzFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZS50b3VjaGVzWzJdKSB7XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzJdLmNsaWVudFgsIGUudG91Y2hlc1syXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgICBub3dbNV0gPSBwb3NbMV07XG4gICAgICB9IC8vIHJlY29yZCBzdGFydGluZyBwb2ludHMgZm9yIHBpbmNoLXRvLXpvb21cblxuXG4gICAgICBpZiAoZS50b3VjaGVzWzFdKSB7XG4gICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7XG4gICAgICAgIHZhciBvZmZzZXRzID0gci5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gICAgICAgIG9mZnNldExlZnQgPSBvZmZzZXRzWzBdO1xuICAgICAgICBvZmZzZXRUb3AgPSBvZmZzZXRzWzFdO1xuICAgICAgICBjb250YWluZXJXaWR0aCA9IG9mZnNldHNbMl07XG4gICAgICAgIGNvbnRhaW5lckhlaWdodCA9IG9mZnNldHNbM107XG4gICAgICAgIGYxeDEgPSBlLnRvdWNoZXNbMF0uY2xpZW50WCAtIG9mZnNldExlZnQ7XG4gICAgICAgIGYxeTEgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgICAgZjJ4MSA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdDtcbiAgICAgICAgZjJ5MSA9IGUudG91Y2hlc1sxXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgICB0d29GaW5nZXJzU3RhcnRJbnNpZGUgPSAwIDw9IGYxeDEgJiYgZjF4MSA8PSBjb250YWluZXJXaWR0aCAmJiAwIDw9IGYyeDEgJiYgZjJ4MSA8PSBjb250YWluZXJXaWR0aCAmJiAwIDw9IGYxeTEgJiYgZjF5MSA8PSBjb250YWluZXJIZWlnaHQgJiYgMCA8PSBmMnkxICYmIGYyeTEgPD0gY29udGFpbmVySGVpZ2h0O1xuICAgICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgICAgICBkaXN0YW5jZTEgPSBkaXN0YW5jZShmMXgxLCBmMXkxLCBmMngxLCBmMnkxKTtcbiAgICAgICAgZGlzdGFuY2UxU3EgPSBkaXN0YW5jZVNxKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgICBjZW50ZXIxID0gWyhmMXgxICsgZjJ4MSkgLyAyLCAoZjF5MSArIGYyeTEpIC8gMl07XG4gICAgICAgIG1vZGVsQ2VudGVyMSA9IFsoY2VudGVyMVswXSAtIHBhbi54KSAvIHpvb20sIChjZW50ZXIxWzFdIC0gcGFuLnkpIC8gem9vbV07IC8vIGNvbnNpZGVyIGNvbnRleHQgdGFwXG5cbiAgICAgICAgdmFyIGN4dERpc3RUaHJlc2hvbGQgPSAyMDA7XG4gICAgICAgIHZhciBjeHREaXN0VGhyZXNob2xkU3EgPSBjeHREaXN0VGhyZXNob2xkICogY3h0RGlzdFRocmVzaG9sZDtcblxuICAgICAgICBpZiAoZGlzdGFuY2UxU3EgPCBjeHREaXN0VGhyZXNob2xkU3EgJiYgIWUudG91Y2hlc1syXSkge1xuICAgICAgICAgIHZhciBuZWFyMSA9IHIuZmluZE5lYXJlc3RFbGVtZW50KG5vd1swXSwgbm93WzFdLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB2YXIgbmVhcjIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMl0sIG5vd1szXSwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAobmVhcjEgJiYgbmVhcjEuaXNOb2RlKCkpIHtcbiAgICAgICAgICAgIG5lYXIxLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHR0YXBzdGFydCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbmVhcjE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZWFyMiAmJiBuZWFyMi5pc05vZGUoKSkge1xuICAgICAgICAgICAgbmVhcjIuYWN0aXZhdGUoKS5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3kuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHR0YXBzdGFydCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLnRvdWNoRGF0YS5jeHQgPSB0cnVlO1xuICAgICAgICAgIHIudG91Y2hEYXRhLmN4dERyYWdnZWQgPSBmYWxzZTtcbiAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgLy8gc2FmYXJpIG9uIGlvcyBwYW5zIHRoZSBwYWdlIG90aGVyd2lzZSAobm9ybWFsbHkgeW91IHNob3VsZCBiZSBhYmxlIHRvIHByZXZlbnRkZWZhdWx0IG9uIHRvdWNobW92ZS4uLilcbiAgICAgICAgaWYgKGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlLnRvdWNoZXNbMV0pIDsgZWxzZSBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICAgIHZhciBuZWFycyA9IHIuZmluZE5lYXJlc3RFbGVtZW50cyhub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHZhciBuZWFyID0gbmVhcnNbMF07XG5cbiAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydCA9IG5lYXI7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnRzID0gbmVhcnM7XG5cbiAgICAgICAgICBpZiAoci5ub2RlSXNHcmFiYmFibGUobmVhcikpIHtcbiAgICAgICAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVzID0gbnVsbDtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgLy8gcmVzZXQgZHJhZyBlbGVtZW50cywgc2luY2UgbmVhciB3aWxsIGJlIGFkZGVkIGFnYWluXG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBjeS4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLnNlbGVjdGVkKCkgJiYgci5ub2RlSXNHcmFiYmFibGUoZWxlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKHNlbGVjdGVkTm9kZXMsIHtcbiAgICAgICAgICAgICAgICBhZGRUb0xpc3Q6IGRyYWdnZWRFbGVzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkTm9kZVRvRHJhZyhuZWFyLCB7XG4gICAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0R3JhYlRhcmdldChuZWFyKTtcblxuICAgICAgICAgICAgdmFyIG1ha2VFdmVudCA9IGZ1bmN0aW9uIG1ha2VFdmVudCh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFib24nKSk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgICAgIG4uZW1pdChtYWtlRXZlbnQoJ2dyYWInKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmVhci5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cmlnZ2VyRXZlbnRzKG5lYXIsIFsndG91Y2hzdGFydCcsICd0YXBzdGFydCcsICd2bW91c2Vkb3duJ10sIGUsIHtcbiAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgeTogbm93WzFdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgfSAvLyBUYXAsIHRhcGhvbGRcbiAgICAgICAgLy8gLS0tLS1cblxuXG4gICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgci50b3VjaERhdGEuc2luZ2xlVG91Y2hTdGFydFRpbWUgPSArbmV3IERhdGUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KTtcbiAgICAgICAgci50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoci50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZCA9PT0gZmFsc2UgJiYgIXIucGluY2hpbmcgLy8gaWYgcGluY2hpbmcsIHRoZW4gdGFwaG9sZCB1bnNlbGVjdCBzaG91bGRuJ3QgdGFrZSBlZmZlY3RcbiAgICAgICAgICAmJiAhci50b3VjaERhdGEuc2VsZWN0aW5nIC8vIGJveCBzZWxlY3Rpb24gc2hvdWxkbid0IGFsbG93IHRhcGhvbGQgdGhyb3VnaFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50cyhyLnRvdWNoRGF0YS5zdGFydCwgWyd0YXBob2xkJ10sIGUsIHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgci50YXBob2xkRHVyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgIHZhciBzUG9zID0gci50b3VjaERhdGEuc3RhcnRQb3NpdGlvbiA9IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNQb3NbaV0gPSBlYXJsaWVyW2ldID0gbm93W2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoMCA9IGUudG91Y2hlc1swXTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbdG91Y2gwLmNsaWVudFgsIHRvdWNoMC5jbGllbnRZXTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG4gICAgdmFyIHRvdWNobW92ZUhhbmRsZXI7XG4gICAgci5yZWdpc3RlckJpbmRpbmcod2luZG93LCAndG91Y2htb3ZlJywgdG91Y2htb3ZlSGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNobW92ZUhhbmRsZXIoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuXG4gICAgICBpZiAoIWNhcHR1cmUgJiYgIWV2ZW50SW5Db250YWluZXIoZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgdmFyIG5vdyA9IHIudG91Y2hEYXRhLm5vdztcbiAgICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuXG4gICAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1syXS5jbGllbnRYLCBlLnRvdWNoZXNbMl0uY2xpZW50WSk7XG4gICAgICAgIG5vd1s0XSA9IHBvc1swXTtcbiAgICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRHUG9zID0gci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb247XG4gICAgICB2YXIgaXNPdmVyVGhyZXNob2xkRHJhZztcblxuICAgICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzWzBdICYmIHN0YXJ0R1Bvcykge1xuICAgICAgICB2YXIgZGlzcCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZGlzcFtqXSA9IG5vd1tqXSAtIGVhcmxpZXJbal07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZHggPSBlLnRvdWNoZXNbMF0uY2xpZW50WCAtIHN0YXJ0R1Bvc1swXTtcbiAgICAgICAgdmFyIGR4MiA9IGR4ICogZHg7XG4gICAgICAgIHZhciBkeSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gc3RhcnRHUG9zWzFdO1xuICAgICAgICB2YXIgZHkyID0gZHkgKiBkeTtcbiAgICAgICAgdmFyIGRpc3QyID0gZHgyICsgZHkyO1xuICAgICAgICBpc092ZXJUaHJlc2hvbGREcmFnID0gZGlzdDIgPj0gci50b3VjaFRhcFRocmVzaG9sZDI7XG4gICAgICB9IC8vIGNvbnRleHQgc3dpcGUgY2FuY2VsbGluZ1xuXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIHIudG91Y2hEYXRhLmN4dCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBmMXgyID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBvZmZzZXRMZWZ0LFxuICAgICAgICAgICAgZjF5MiA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgICB2YXIgZjJ4MiA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIGYyeTIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDsgLy8gdmFyIGRpc3RhbmNlMiA9IGRpc3RhbmNlKCBmMXgyLCBmMXkyLCBmMngyLCBmMnkyICk7XG5cbiAgICAgICAgdmFyIGRpc3RhbmNlMlNxID0gZGlzdGFuY2VTcShmMXgyLCBmMXkyLCBmMngyLCBmMnkyKTtcbiAgICAgICAgdmFyIGZhY3RvclNxID0gZGlzdGFuY2UyU3EgLyBkaXN0YW5jZTFTcTtcbiAgICAgICAgdmFyIGRpc3RUaHJlc2hvbGQgPSAxNTA7XG4gICAgICAgIHZhciBkaXN0VGhyZXNob2xkU3EgPSBkaXN0VGhyZXNob2xkICogZGlzdFRocmVzaG9sZDtcbiAgICAgICAgdmFyIGZhY3RvclRocmVzaG9sZCA9IDEuNTtcbiAgICAgICAgdmFyIGZhY3RvclRocmVzaG9sZFNxID0gZmFjdG9yVGhyZXNob2xkICogZmFjdG9yVGhyZXNob2xkOyAvLyBjYW5jZWwgY3R4IGdlc3R1cmVzIGlmIHRoZSBkaXN0YW5jZSBiL3QgdGhlIGZpbmdlcnMgaW5jcmVhc2VzXG5cbiAgICAgICAgaWYgKGZhY3RvclNxID49IGZhY3RvclRocmVzaG9sZFNxIHx8IGRpc3RhbmNlMlNxID49IGRpc3RUaHJlc2hvbGRTcSkge1xuICAgICAgICAgIHIudG91Y2hEYXRhLmN4dCA9IGZhbHNlO1xuICAgICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcGVuZCcsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KGN4dEV2dCk7XG4gICAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29udGV4dCBzd2lwZVxuXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIHIudG91Y2hEYXRhLmN4dCkge1xuICAgICAgICB2YXIgY3h0RXZ0ID0ge1xuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgdHlwZTogJ2N4dGRyYWcnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcblxuICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3kuZW1pdChjeHRFdnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIudG91Y2hEYXRhLnN0YXJ0KSB7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgci50b3VjaERhdGEuY3h0RHJhZ2dlZCA9IHRydWU7XG4gICAgICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuXG4gICAgICAgIGlmICghci50b3VjaERhdGEuY3h0T3ZlciB8fCBuZWFyICE9PSByLnRvdWNoRGF0YS5jeHRPdmVyKSB7XG4gICAgICAgICAgaWYgKHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHIudG91Y2hEYXRhLmN4dE92ZXIgPSBuZWFyO1xuXG4gICAgICAgICAgaWYgKG5lYXIpIHtcbiAgICAgICAgICAgIG5lYXIuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3ZlcicsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYm94IHNlbGVjdGlvblxuXG4gICAgICB9IGVsc2UgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzWzJdICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sYXN0VGhyZWVUb3VjaCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgICAgIGlmICghci50b3VjaERhdGEuc2VsZWN0aW5nKSB7XG4gICAgICAgICAgY3kuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2JveHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByLnRvdWNoRGF0YS5zZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSB0cnVlO1xuICAgICAgICBzZWxlY3RbNF0gPSAxO1xuXG4gICAgICAgIGlmICghc2VsZWN0IHx8IHNlbGVjdC5sZW5ndGggPT09IDAgfHwgc2VsZWN0WzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZWxlY3RbMF0gPSAobm93WzBdICsgbm93WzJdICsgbm93WzRdKSAvIDM7XG4gICAgICAgICAgc2VsZWN0WzFdID0gKG5vd1sxXSArIG5vd1szXSArIG5vd1s1XSkgLyAzO1xuICAgICAgICAgIHNlbGVjdFsyXSA9IChub3dbMF0gKyBub3dbMl0gKyBub3dbNF0pIC8gMyArIDE7XG4gICAgICAgICAgc2VsZWN0WzNdID0gKG5vd1sxXSArIG5vd1szXSArIG5vd1s1XSkgLyAzICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RbMl0gPSAobm93WzBdICsgbm93WzJdICsgbm93WzRdKSAvIDM7XG4gICAgICAgICAgc2VsZWN0WzNdID0gKG5vd1sxXSArIG5vd1szXSArIG5vd1s1XSkgLyAzO1xuICAgICAgICB9XG5cbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTsgLy8gcGluY2ggdG8gem9vbVxuICAgICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1sxXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBwaW5jaC10by16b29tXG4gICAgICAmJiBjeS56b29taW5nRW5hYmxlZCgpICYmIGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclpvb21pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkpIHtcbiAgICAgICAgLy8gdHdvIGZpbmdlcnMgPT4gcGluY2ggdG8gem9vbVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgdmFyIGRyYWdnZWRFbGVzID0gci5kcmFnRGF0YS50b3VjaERyYWdFbGVzO1xuXG4gICAgICAgIGlmIChkcmFnZ2VkRWxlcykge1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkcmFnZ2VkRWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGRlX3AgPSBkcmFnZ2VkRWxlc1tpXS5fcHJpdmF0ZTtcbiAgICAgICAgICAgIGRlX3AuZ3JhYmJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGVfcC5yc2NyYXRjaC5pbkRyYWdMYXllciA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDsgLy8gKHgyLCB5MikgZm9yIGZpbmdlcnMgMSBhbmQgMlxuXG4gICAgICAgIHZhciBmMXgyID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBvZmZzZXRMZWZ0LFxuICAgICAgICAgICAgZjF5MiA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgICB2YXIgZjJ4MiA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIGYyeTIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgICAgdmFyIGRpc3RhbmNlMiA9IGRpc3RhbmNlKGYxeDIsIGYxeTIsIGYyeDIsIGYyeTIpOyAvLyB2YXIgZGlzdGFuY2UyU3EgPSBkaXN0YW5jZVNxKCBmMXgyLCBmMXkyLCBmMngyLCBmMnkyICk7XG4gICAgICAgIC8vIHZhciBmYWN0b3IgPSBNYXRoLnNxcnQoIGRpc3RhbmNlMlNxICkgLyBNYXRoLnNxcnQoIGRpc3RhbmNlMVNxICk7XG5cbiAgICAgICAgdmFyIGZhY3RvciA9IGRpc3RhbmNlMiAvIGRpc3RhbmNlMTtcblxuICAgICAgICBpZiAodHdvRmluZ2Vyc1N0YXJ0SW5zaWRlKSB7XG4gICAgICAgICAgLy8gZGVsdGEgZmluZ2VyMVxuICAgICAgICAgIHZhciBkZjF4ID0gZjF4MiAtIGYxeDE7XG4gICAgICAgICAgdmFyIGRmMXkgPSBmMXkyIC0gZjF5MTsgLy8gZGVsdGEgZmluZ2VyIDJcblxuICAgICAgICAgIHZhciBkZjJ4ID0gZjJ4MiAtIGYyeDE7XG4gICAgICAgICAgdmFyIGRmMnkgPSBmMnkyIC0gZjJ5MTsgLy8gdHJhbnNsYXRpb24gaXMgdGhlIG5vcm1hbGlzZWQgdmVjdG9yIG9mIHRoZSB0d28gZmluZ2VycyBtb3ZlbWVudFxuICAgICAgICAgIC8vIGkuZS4gc28gcGluY2hpbmcgY2FuY2VscyBvdXQgYW5kIG1vdmluZyB0b2dldGhlciBwYW5zXG5cbiAgICAgICAgICB2YXIgdHggPSAoZGYxeCArIGRmMngpIC8gMjtcbiAgICAgICAgICB2YXIgdHkgPSAoZGYxeSArIGRmMnkpIC8gMjsgLy8gbm93IGNhbGN1bGF0ZSB0aGUgem9vbVxuXG4gICAgICAgICAgdmFyIHpvb20xID0gY3kuem9vbSgpO1xuICAgICAgICAgIHZhciB6b29tMiA9IHpvb20xICogZmFjdG9yO1xuICAgICAgICAgIHZhciBwYW4xID0gY3kucGFuKCk7IC8vIHRoZSBtb2RlbCBjZW50ZXIgcG9pbnQgY29udmVydGVkIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVkIHBvc1xuXG4gICAgICAgICAgdmFyIGN0cnggPSBtb2RlbENlbnRlcjFbMF0gKiB6b29tMSArIHBhbjEueDtcbiAgICAgICAgICB2YXIgY3RyeSA9IG1vZGVsQ2VudGVyMVsxXSAqIHpvb20xICsgcGFuMS55O1xuICAgICAgICAgIHZhciBwYW4yID0ge1xuICAgICAgICAgICAgeDogLXpvb20yIC8gem9vbTEgKiAoY3RyeCAtIHBhbjEueCAtIHR4KSArIGN0cngsXG4gICAgICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChjdHJ5IC0gcGFuMS55IC0gdHkpICsgY3RyeVxuICAgICAgICAgIH07IC8vIHJlbW92ZSBkcmFnZ2VkIGVsZXNcblxuICAgICAgICAgIGlmIChfc3RhcnQgJiYgX3N0YXJ0LmFjdGl2ZSgpKSB7XG4gICAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKGRyYWdnZWRFbGVzKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIF9zdGFydC51bmFjdGl2YXRlKCkuZW1pdCgnZnJlZW9uJyk7XG5cbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2ZyZWUnKTtcblxuICAgICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgICBfc3RhcnQuZW1pdCgnZHJhZ2ZyZWVvbicpO1xuXG4gICAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3kudmlld3BvcnQoe1xuICAgICAgICAgICAgem9vbTogem9vbTIsXG4gICAgICAgICAgICBwYW46IHBhbjIsXG4gICAgICAgICAgICBjYW5jZWxPbkZhaWxlZFpvb206IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjeS5lbWl0KCdwaW5jaHpvb20nKTtcbiAgICAgICAgICBkaXN0YW5jZTEgPSBkaXN0YW5jZTI7XG4gICAgICAgICAgZjF4MSA9IGYxeDI7XG4gICAgICAgICAgZjF5MSA9IGYxeTI7XG4gICAgICAgICAgZjJ4MSA9IGYyeDI7XG4gICAgICAgICAgZjJ5MSA9IGYyeTI7XG4gICAgICAgICAgci5waW5jaGluZyA9IHRydWU7XG4gICAgICAgIH0gLy8gUmUtcHJvamVjdFxuXG5cbiAgICAgICAgaWYgKGUudG91Y2hlc1swXSkge1xuICAgICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICAgICAgbm93WzFdID0gcG9zWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudG91Y2hlc1sxXSkge1xuICAgICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgICAgbm93WzNdID0gcG9zWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzJdLmNsaWVudFgsIGUudG91Y2hlc1syXS5jbGllbnRZKTtcbiAgICAgICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1swXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBzaW5nbGUgZmluZ2VyIGV2ZW50cyBsaWtlIHBhbm5pbmdcbiAgICAgICkge1xuICAgICAgICB2YXIgc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDtcbiAgICAgICAgdmFyIGxhc3QgPSByLnRvdWNoRGF0YS5sYXN0O1xuICAgICAgICB2YXIgbmVhcjtcblxuICAgICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcpIHtcbiAgICAgICAgICBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSAvLyBkcmFnZ2luZyBub2Rlc1xuXG5cbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgc3RhcnQgIT0gbnVsbCAmJiByLm5vZGVJc0RyYWdnYWJsZShzdGFydCkpIHtcbiAgICAgICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICAgICAgLy8gdGhlbiBkcmFnZ2luZyBjYW4gaGFwcGVuXG4gICAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgICB2YXIganVzdFN0YXJ0ZWREcmFnID0gIXIuZHJhZ0RhdGEuZGlkRHJhZztcblxuICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICBhZGROb2Rlc1RvRHJhZyhkcmFnZ2VkRWxlcywge1xuICAgICAgICAgICAgICAgIGluRHJhZ0xheWVyOiB0cnVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByLmRyYWdEYXRhLmRpZERyYWcgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHRvdGFsU2hpZnQgPSB7XG4gICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIkMShkaXNwWzBdKSAmJiBudW1iZXIkMShkaXNwWzFdKSkge1xuICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnggKz0gZGlzcFswXTtcbiAgICAgICAgICAgICAgdG90YWxTaGlmdC55ICs9IGRpc3BbMV07XG5cbiAgICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGE7XG5cbiAgICAgICAgICAgICAgICBpZiAoZHJhZ0RlbHRhICYmIG51bWJlciQxKGRyYWdEZWx0YVswXSkgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzFdKSkge1xuICAgICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkcmFnRGVsdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyA9IHRydWU7XG4gICAgICAgICAgICBkcmFnZ2VkRWxlcy5zaWxlbnRTaGlmdCh0b3RhbFNoaWZ0KS5lbWl0KCdwb3NpdGlvbiBkcmFnJyk7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0gPT0gZWFybGllclswXSAmJiByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdID09IGVhcmxpZXJbMV0pIHtcbiAgICAgICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBrZWVwIHRyYWNrIG9mIGRyYWcgZGVsdGEgZm9yIGxhdGVyXG4gICAgICAgICAgICB2YXIgZHJhZ0RlbHRhID0gci50b3VjaERhdGEuZHJhZ0RlbHRhID0gci50b3VjaERhdGEuZHJhZ0RlbHRhIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAoZHJhZ0RlbHRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBkcmFnRGVsdGEucHVzaChkaXNwWzBdKTtcbiAgICAgICAgICAgICAgZHJhZ0RlbHRhLnB1c2goZGlzcFsxXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkcmFnRGVsdGFbMF0gKz0gZGlzcFswXTtcbiAgICAgICAgICAgICAgZHJhZ0RlbHRhWzFdICs9IGRpc3BbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHRvdWNobW92ZVxuXG5cbiAgICAgICAge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQgfHwgbmVhciwgWyd0b3VjaG1vdmUnLCAndGFwZHJhZycsICd2bW91c2Vtb3ZlJ10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKCghc3RhcnQgfHwgIXN0YXJ0LmdyYWJiZWQoKSkgJiYgbmVhciAhPSBsYXN0KSB7XG4gICAgICAgICAgICBpZiAobGFzdCkge1xuICAgICAgICAgICAgICBsYXN0LmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhcGRyYWdvdXQnLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgICBuZWFyLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhcGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLnRvdWNoRGF0YS5sYXN0ID0gbmVhcjtcbiAgICAgICAgfSAvLyBjaGVjayB0byBjYW5jZWwgdGFwaG9sZFxuXG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChub3dbaV0gJiYgci50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltpXSAmJiBpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBwYW5uaW5nXG5cblxuICAgICAgICBpZiAoY2FwdHVyZSAmJiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydC5wYW5uYWJsZSgpKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgdmFyIGFsbG93UGFzc3Rocm91Z2ggPSBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaChzdGFydCwgci50b3VjaERhdGEuc3RhcnRzKTtcblxuICAgICAgICAgIGlmIChhbGxvd1Bhc3N0aHJvdWdoKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmICghci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICAgICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IGFycmF5MnBvaW50KHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoci5zd2lwZVBhbm5pbmcpIHtcbiAgICAgICAgICAgICAgY3kucGFuQnkoe1xuICAgICAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgICAgIHk6IGRpc3BbMV0gKiB6b29tXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjeS5lbWl0KCdkcmFncGFuJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAgICAgci5zd2lwZVBhbm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgICAgeDogZHggKiB6b29tLFxuICAgICAgICAgICAgICAgIHk6IGR5ICogem9vbVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3kuZW1pdCgnZHJhZ3BhbicpO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUmUtcHJvamVjdFxuXG5cbiAgICAgICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vdy5sZW5ndGg7IGorKykge1xuICAgICAgICBlYXJsaWVyW2pdID0gbm93W2pdO1xuICAgICAgfSAvLyB0aGUgYWN0aXZlIGJnIGluZGljYXRvciBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIG1ha2luZyBhIHN3aXBlIHRoYXQgaXMgbmVpdGhlciBmb3IgZHJhZ2dpbmcgbm9kZXMgb3IgcGFubmluZ1xuXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIGUudG91Y2hlcy5sZW5ndGggPiAwICYmICFyLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgJiYgIXIuc3dpcGVQYW5uaW5nICYmIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG4gICAgdmFyIHRvdWNoY2FuY2VsSGFuZGxlcjtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICd0b3VjaGNhbmNlbCcsIHRvdWNoY2FuY2VsSGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNoY2FuY2VsSGFuZGxlcihlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICB2YXIgc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDtcbiAgICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgdG91Y2hlbmRIYW5kbGVyLCBkaWREb3VibGVUb3VjaCwgdG91Y2hUaW1lb3V0LCBwcmV2VG91Y2hUaW1lU3RhbXA7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoY29udGFpbmVyV2luZG93LCAndG91Y2hlbmQnLCB0b3VjaGVuZEhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaGVuZEhhbmRsZXIoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgdmFyIHN0YXJ0ID0gci50b3VjaERhdGEuc3RhcnQ7XG4gICAgICB2YXIgY2FwdHVyZSA9IHIudG91Y2hEYXRhLmNhcHR1cmU7XG5cbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgci50b3VjaERhdGEuY2FwdHVyZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgICByLnN3aXBlUGFubmluZyA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzID0gZmFsc2U7XG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgICAgdmFyIGVhcmxpZXIgPSByLnRvdWNoRGF0YS5lYXJsaWVyO1xuXG4gICAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1syXS5jbGllbnRYLCBlLnRvdWNoZXNbMl0uY2xpZW50WSk7XG4gICAgICAgIG5vd1s0XSA9IHBvc1swXTtcbiAgICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgc3RhcnQudW5hY3RpdmF0ZSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3R4VGFwZW5kO1xuXG4gICAgICBpZiAoci50b3VjaERhdGEuY3h0KSB7XG4gICAgICAgIGN0eFRhcGVuZCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgc3RhcnQuZW1pdChjdHhUYXBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3R4VGFwZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghci50b3VjaERhdGEuY3h0RHJhZ2dlZCkge1xuICAgICAgICAgIHZhciBjdHhUYXAgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcCcsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXJ0LmVtaXQoY3R4VGFwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3kuZW1pdChjdHhUYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIudG91Y2hEYXRhLmN4dCA9IGZhbHNlO1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydCA9IG51bGw7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gbm8gbW9yZSBib3ggc2VsZWN0aW9uIGlmIHdlIGRvbid0IGhhdmUgdGhyZWUgZmluZ2Vyc1xuXG5cbiAgICAgIGlmICghZS50b3VjaGVzWzJdICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSAmJiByLnRvdWNoRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgICAgci50b3VjaERhdGEuc2VsZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBib3ggPSBjeS5jb2xsZWN0aW9uKHIuZ2V0QWxsSW5Cb3goc2VsZWN0WzBdLCBzZWxlY3RbMV0sIHNlbGVjdFsyXSwgc2VsZWN0WzNdKSk7XG4gICAgICAgIHNlbGVjdFswXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0WzFdID0gdW5kZWZpbmVkO1xuICAgICAgICBzZWxlY3RbMl0gPSB1bmRlZmluZWQ7XG4gICAgICAgIHNlbGVjdFszXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0WzRdID0gMDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgY3kuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2JveGVuZCcsXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuc2VsZWN0YWJsZSgpICYmICFlbGUuc2VsZWN0ZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBib3guZW1pdCgnYm94Jykuc3RkRmlsdGVyKGVsZVdvdWxkQmVTZWxlY3RlZCkuc2VsZWN0KCkuZW1pdCgnYm94c2VsZWN0Jyk7XG5cbiAgICAgICAgaWYgKGJveC5ub25lbXB0eSgpKSB7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByLnJlZHJhdygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBzdGFydC51bmFjdGl2YXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChlLnRvdWNoZXNbMV0pIDsgZWxzZSBpZiAoZS50b3VjaGVzWzBdKSA7IGVsc2UgaWYgKCFlLnRvdWNoZXNbMF0pIHtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG5cbiAgICAgICAgaWYgKHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgc3RhcnRXYXNHcmFiYmVkID0gc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZDtcbiAgICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKGRyYWdnZWRFbGVzKTtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcblxuICAgICAgICAgIGlmIChzdGFydFdhc0dyYWJiZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0LmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZXMuZW1pdCgnZnJlZScpO1xuXG4gICAgICAgICAgICBpZiAoci5kcmFnRGF0YS5kaWREcmFnKSB7XG4gICAgICAgICAgICAgIHN0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZXMuZW1pdCgnZHJhZ2ZyZWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ3RvdWNoZW5kJywgJ3RhcGVuZCcsICd2bW91c2V1cCcsICd0YXBkcmFnb3V0J10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ3RvdWNoZW5kJywgJ3RhcGVuZCcsICd2bW91c2V1cCcsICd0YXBkcmFnb3V0J10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGR4ID0gci50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXSAtIG5vd1swXTtcbiAgICAgICAgdmFyIGR4MiA9IGR4ICogZHg7XG4gICAgICAgIHZhciBkeSA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0gLSBub3dbMV07XG4gICAgICAgIHZhciBkeTIgPSBkeSAqIGR5O1xuICAgICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICAgIHZhciByZGlzdDIgPSBkaXN0MiAqIHpvb20gKiB6b29tOyAvLyBUYXAgZXZlbnQsIHJvdWdobHkgc2FtZSBhcyBtb3VzZSBjbGljayBldmVudCBmb3IgdG91Y2hcblxuICAgICAgICBpZiAoIXIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQpIHtcbiAgICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgICBjeS4kKCc6c2VsZWN0ZWQnKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQsIFsndGFwJywgJ3ZjbGljayddLCBlLCB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaWREb3VibGVUb3VjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGUudGltZVN0YW1wIC0gcHJldlRvdWNoVGltZVN0YW1wIDw9IGN5Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSkge1xuICAgICAgICAgICAgdG91Y2hUaW1lb3V0ICYmIGNsZWFyVGltZW91dCh0b3VjaFRpbWVvdXQpO1xuICAgICAgICAgICAgZGlkRG91YmxlVG91Y2ggPSB0cnVlO1xuICAgICAgICAgICAgcHJldlRvdWNoVGltZVN0YW1wID0gbnVsbDtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQsIFsnZGJsdGFwJywgJ3ZkYmxjbGljayddLCBlLCB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmIChkaWREb3VibGVUb3VjaCkgcmV0dXJuO1xuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ29uZXRhcCcsICd2b25lY2xpY2snXSwgZSwge1xuICAgICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpO1xuICAgICAgICAgICAgcHJldlRvdWNoVGltZVN0YW1wID0gZS50aW1lU3RhbXA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFByZXBhcmUgdG8gc2VsZWN0IHRoZSBjdXJyZW50bHkgdG91Y2hlZCBub2RlLCBvbmx5IGlmIGl0IGhhc24ndCBiZWVuIGRyYWdnZWQgcGFzdCBhIGNlcnRhaW4gZGlzdGFuY2VcblxuXG4gICAgICAgIGlmIChzdGFydCAhPSBudWxsICYmICFyLmRyYWdEYXRhLmRpZERyYWcgLy8gZGlkbid0IGRyYWcgbm9kZXMgYXJvdW5kXG4gICAgICAgICYmIHN0YXJ0Ll9wcml2YXRlLnNlbGVjdGFibGUgJiYgcmRpc3QyIDwgci50b3VjaFRhcFRocmVzaG9sZDIgJiYgIXIucGluY2hpbmcgLy8gcGluY2ggdG8gem9vbSBzaG91bGQgbm90IGFmZmVjdCBzZWxlY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGN5LnNlbGVjdGlvblR5cGUoKSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGN5LiQoaXNTZWxlY3RlZCkudW5tZXJnZShzdGFydCkudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICAgIHN0YXJ0LnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0LnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgc3RhcnQudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXJ0LnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vdy5sZW5ndGg7IGorKykge1xuICAgICAgICBlYXJsaWVyW2pdID0gbm93W2pdO1xuICAgICAgfVxuXG4gICAgICByLmRyYWdEYXRhLmRpZERyYWcgPSBmYWxzZTsgLy8gcmVzZXQgZm9yIG5leHQgdG91Y2hzdGFydFxuXG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSBbXTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRQb3NpdGlvbiA9IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBudWxsO1xuICAgICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgLy8gdGhlIG9sZCBzdGFydCBnbG9iYWwgcG9zJ24gbWF5IG5vdCBiZSB0aGUgc2FtZSBmaW5nZXIgdGhhdCByZW1haW5zXG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIucGluY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9IC8vci5yZWRyYXcoKTtcblxuICAgIH0sIGZhbHNlKTsgLy8gZmFsbGJhY2sgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgbXMgcG9pbnRlciBldmVudHNcblxuICAgIGlmICh0eXBlb2YgVG91Y2hFdmVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBwb2ludGVycyA9IFtdO1xuXG4gICAgICB2YXIgbWFrZVRvdWNoID0gZnVuY3Rpb24gbWFrZVRvdWNoKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgICAgIGZvcmNlOiAxLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGUucG9pbnRlcklkLFxuICAgICAgICAgIHBhZ2VYOiBlLnBhZ2VYLFxuICAgICAgICAgIHBhZ2VZOiBlLnBhZ2VZLFxuICAgICAgICAgIHJhZGl1c1g6IGUud2lkdGggLyAyLFxuICAgICAgICAgIHJhZGl1c1k6IGUuaGVpZ2h0IC8gMixcbiAgICAgICAgICBzY3JlZW5YOiBlLnNjcmVlblgsXG4gICAgICAgICAgc2NyZWVuWTogZS5zY3JlZW5ZLFxuICAgICAgICAgIHRhcmdldDogZS50YXJnZXRcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBtYWtlUG9pbnRlciA9IGZ1bmN0aW9uIG1ha2VQb2ludGVyKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICB0b3VjaDogbWFrZVRvdWNoKGUpXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICB2YXIgYWRkUG9pbnRlciA9IGZ1bmN0aW9uIGFkZFBvaW50ZXIoZSkge1xuICAgICAgICBwb2ludGVycy5wdXNoKG1ha2VQb2ludGVyKGUpKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZnVuY3Rpb24gcmVtb3ZlUG9pbnRlcihlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcCA9IHBvaW50ZXJzW2ldO1xuXG4gICAgICAgICAgaWYgKHAuZXZlbnQucG9pbnRlcklkID09PSBlLnBvaW50ZXJJZCkge1xuICAgICAgICAgICAgcG9pbnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIHVwZGF0ZVBvaW50ZXIgPSBmdW5jdGlvbiB1cGRhdGVQb2ludGVyKGUpIHtcbiAgICAgICAgdmFyIHAgPSBwb2ludGVycy5maWx0ZXIoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICByZXR1cm4gcC5ldmVudC5wb2ludGVySWQgPT09IGUucG9pbnRlcklkO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgcC5ldmVudCA9IGU7XG4gICAgICAgIHAudG91Y2ggPSBtYWtlVG91Y2goZSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgYWRkVG91Y2hlc1RvRXZlbnQgPSBmdW5jdGlvbiBhZGRUb3VjaGVzVG9FdmVudChlKSB7XG4gICAgICAgIGUudG91Y2hlcyA9IHBvaW50ZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICAgIHJldHVybiBwLnRvdWNoO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwb2ludGVySXNNb3VzZSA9IGZ1bmN0aW9uIHBvaW50ZXJJc01vdXNlKGUpIHtcbiAgICAgICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgfHwgZS5wb2ludGVyVHlwZSA9PT0gNDtcbiAgICAgIH07XG5cbiAgICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcmRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGFkZFBvaW50ZXIoZSk7XG4gICAgICAgIGFkZFRvdWNoZXNUb0V2ZW50KGUpO1xuICAgICAgICB0b3VjaHN0YXJ0SGFuZGxlcihlKTtcbiAgICAgIH0pO1xuICAgICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVydXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cblxuICAgICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgICAgdG91Y2hlbmRIYW5kbGVyKGUpO1xuICAgICAgfSk7XG4gICAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3BvaW50ZXJjYW5jZWwnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cblxuICAgICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgICAgdG91Y2hjYW5jZWxIYW5kbGVyKGUpO1xuICAgICAgfSk7XG4gICAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3BvaW50ZXJtb3ZlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKHBvaW50ZXJJc01vdXNlKGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1cGRhdGVQb2ludGVyKGUpO1xuICAgICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgICAgdG91Y2htb3ZlSGFuZGxlcihlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB2YXIgQlJwJDIgPSB7fTtcblxuICBCUnAkMi5nZW5lcmF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1tuYW1lXSA9IHtcbiAgICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgncG9seWdvbicsIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHRoaXMucG9pbnRzKTtcbiAgICAgIH0sXG4gICAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZykge1xuICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdExpbmUoeCwgeSwgdGhpcy5wb2ludHMsIG5vZGVYLCBub2RlWSwgd2lkdGggLyAyLCBoZWlnaHQgLyAyLCBwYWRkaW5nKTtcbiAgICAgIH0sXG4gICAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBCUnAkMi5nZW5lcmF0ZUVsbGlwc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snZWxsaXBzZSddID0ge1xuICAgICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgICBuYW1lOiAnZWxsaXBzZScsXG4gICAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LFxuICAgICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcpIHtcbiAgICAgICAgcmV0dXJuIGludGVyc2VjdExpbmVFbGxpcHNlKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGggLyAyICsgcGFkZGluZywgaGVpZ2h0IC8gMiArIHBhZGRpbmcpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICByZXR1cm4gY2hlY2tJbkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgcGFkZGluZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBCUnAkMi5nZW5lcmF0ZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBwb2ludHMpIHtcbiAgICAvLyBQcmUtY29tcHV0ZSBjb250cm9sIHBvaW50c1xuICAgIC8vIFNpbmNlIHRoZXNlIHBvaW50cyBkZXBlbmQgb24gdGhlIHJhZGl1cyBsZW5ndGggKHdoaWNoIGluIHR1cm5zIGRlcGVuZCBvbiB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBub2RlKSB3ZSB3aWxsIG9ubHkgcHJlLWNvbXB1dGVcbiAgICAvLyB0aGUgdW5pdCB2ZWN0b3JzLlxuICAgIC8vIEZvciBzaW1wbGljaXR5IHRoZSBsYXlvdXQgd2lsbCBiZTpcbiAgICAvLyBbIHAwLCBVbml0VmVjdG9yUDBQMSwgcDEsIFVuaVZlY3RvclAxUDIsIC4uLiwgcG4sIFVuaXRWZWN0b3JQblAwIF1cbiAgICB2YXIgYWxsUG9pbnRzID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZUluZGV4ID0gaSAqIDI7XG4gICAgICB2YXIgZGVzdEluZGV4ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGggLyAyIC0gMSkge1xuICAgICAgICBkZXN0SW5kZXggPSAoaSArIDEpICogMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGFsbFBvaW50c1tpICogNF0gPSBwb2ludHNbc291cmNlSW5kZXhdO1xuICAgICAgYWxsUG9pbnRzW2kgKiA0ICsgMV0gPSBwb2ludHNbc291cmNlSW5kZXggKyAxXTtcbiAgICAgIHZhciB4RGVzdCA9IHBvaW50c1tkZXN0SW5kZXhdIC0gcG9pbnRzW3NvdXJjZUluZGV4XTtcbiAgICAgIHZhciB5RGVzdCA9IHBvaW50c1tkZXN0SW5kZXggKyAxXSAtIHBvaW50c1tzb3VyY2VJbmRleCArIDFdO1xuICAgICAgdmFyIG5vcm0gPSBNYXRoLnNxcnQoeERlc3QgKiB4RGVzdCArIHlEZXN0ICogeURlc3QpO1xuICAgICAgYWxsUG9pbnRzW2kgKiA0ICsgMl0gPSB4RGVzdCAvIG5vcm07XG4gICAgICBhbGxQb2ludHNbaSAqIDQgKyAzXSA9IHlEZXN0IC8gbm9ybTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzW25hbWVdID0ge1xuICAgICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcG9pbnRzOiBhbGxQb2ludHMsXG4gICAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdyb3VuZC1wb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMpO1xuICAgICAgfSxcbiAgICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nKSB7XG4gICAgICAgIHJldHVybiByb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHRoaXMucG9pbnRzLCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICByZXR1cm4gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgQlJwJDIuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydyb3VuZC1yZWN0YW5nbGUnXSA9IHRoaXMubm9kZVNoYXBlc1sncm91bmRyZWN0YW5nbGUnXSA9IHtcbiAgICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgICAgbmFtZTogJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIH0sXG4gICAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZykge1xuICAgICAgICByZXR1cm4gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyk7XG4gICAgICB9LFxuICAgICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgICAgIHZhciBjb3JuZXJSYWRpdXMgPSBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdmFyIGRpYW0gPSBjb3JuZXJSYWRpdXMgKiAyOyAvLyBDaGVjayBoQm94XG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgdkJveFxuXG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSBkaWFtLCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgdG9wIGxlZnQgcXVhcnRlciBjaXJjbGVcblxuXG4gICAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYIC0gd2lkdGggLyAyICsgY29ybmVyUmFkaXVzLCBjZW50ZXJZIC0gaGVpZ2h0IC8gMiArIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyBDaGVjayB0b3AgcmlnaHQgcXVhcnRlciBjaXJjbGVcblxuXG4gICAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZIC0gaGVpZ2h0IC8gMiArIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyBDaGVjayBib3R0b20gcmlnaHQgcXVhcnRlciBjaXJjbGVcblxuXG4gICAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyBDaGVjayBib3R0b20gbGVmdCBxdWFydGVyIGNpcmNsZVxuXG5cbiAgICAgICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksIGRpYW0sIGRpYW0sIGNlbnRlclggLSB3aWR0aCAvIDIgKyBjb3JuZXJSYWRpdXMsIGNlbnRlclkgKyBoZWlnaHQgLyAyIC0gY29ybmVyUmFkaXVzLCBwYWRkaW5nKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgQlJwJDIuZ2VuZXJhdGVDdXRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snY3V0LXJlY3RhbmdsZSddID0gdGhpcy5ub2RlU2hhcGVzWydjdXRyZWN0YW5nbGUnXSA9IHtcbiAgICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgICAgbmFtZTogJ2N1dC1yZWN0YW5nbGUnLFxuICAgICAgY29ybmVyTGVuZ3RoOiBnZXRDdXRSZWN0YW5nbGVDb3JuZXJMZW5ndGgoKSxcbiAgICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfSxcbiAgICAgIGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6IGZ1bmN0aW9uIGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMod2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICB2YXIgY2wgPSB0aGlzLmNvcm5lckxlbmd0aDtcbiAgICAgICAgdmFyIGhoID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgICB2YXIgeEJlZ2luID0gY2VudGVyWCAtIGh3O1xuICAgICAgICB2YXIgeEVuZCA9IGNlbnRlclggKyBodztcbiAgICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgICAgdmFyIHlFbmQgPSBjZW50ZXJZICsgaGg7IC8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVyLCBpbm5lciAoaW1hZ2luYXJ5KSB0cmlhbmdsZSBwdCBvbiBbNCwgNV1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvcExlZnQ6IFt4QmVnaW4sIHlCZWdpbiArIGNsLCB4QmVnaW4gKyBjbCwgeUJlZ2luLCB4QmVnaW4gKyBjbCwgeUJlZ2luICsgY2xdLFxuICAgICAgICAgIHRvcFJpZ2h0OiBbeEVuZCAtIGNsLCB5QmVnaW4sIHhFbmQsIHlCZWdpbiArIGNsLCB4RW5kIC0gY2wsIHlCZWdpbiArIGNsXSxcbiAgICAgICAgICBib3R0b21SaWdodDogW3hFbmQsIHlFbmQgLSBjbCwgeEVuZCAtIGNsLCB5RW5kLCB4RW5kIC0gY2wsIHlFbmQgLSBjbF0sXG4gICAgICAgICAgYm90dG9tTGVmdDogW3hCZWdpbiArIGNsLCB5RW5kLCB4QmVnaW4sIHlFbmQgLSBjbCwgeEJlZ2luICsgY2wsIHlFbmQgLSBjbF1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZykge1xuICAgICAgICB2YXIgY1B0cyA9IHRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCArIDIgKiBwYWRkaW5nLCBoZWlnaHQgKyAyICogcGFkZGluZywgbm9kZVgsIG5vZGVZKTtcbiAgICAgICAgdmFyIHB0cyA9IFtdLmNvbmNhdC5hcHBseShbXSwgW2NQdHMudG9wTGVmdC5zcGxpY2UoMCwgNCksIGNQdHMudG9wUmlnaHQuc3BsaWNlKDAsIDQpLCBjUHRzLmJvdHRvbVJpZ2h0LnNwbGljZSgwLCA0KSwgY1B0cy5ib3R0b21MZWZ0LnNwbGljZSgwLCA0KV0pO1xuICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdExpbmUoeCwgeSwgcHRzLCBub2RlWCwgbm9kZVkpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICAvLyBDaGVjayBoQm94XG4gICAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQgLSAyICogdGhpcy5jb3JuZXJMZW5ndGgsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgdkJveFxuXG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSAyICogdGhpcy5jb3JuZXJMZW5ndGgsIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXRUcmlhbmdsZVB0cyA9IHRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgICAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRUcmlhbmdsZVB0cy50b3BMZWZ0KSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMudG9wUmlnaHQpIHx8IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRUcmlhbmdsZVB0cy5ib3R0b21SaWdodCkgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIGN1dFRyaWFuZ2xlUHRzLmJvdHRvbUxlZnQpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgQlJwJDIuZ2VuZXJhdGVCYXJyZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snYmFycmVsJ10gPSB7XG4gICAgICByZW5kZXJlcjogdGhpcyxcbiAgICAgIG5hbWU6ICdiYXJyZWwnLFxuICAgICAgcG9pbnRzOiBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNCwgMCksXG4gICAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB9LFxuICAgICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcpIHtcbiAgICAgICAgLy8gdXNlIHR3byBmaXhlZCB0IHZhbHVlcyBmb3IgdGhlIGJlemllciBjdXJ2ZSBhcHByb3hpbWF0aW9uXG4gICAgICAgIHZhciB0MCA9IDAuMTU7XG4gICAgICAgIHZhciB0MSA9IDAuNTtcbiAgICAgICAgdmFyIHQyID0gMC44NTtcbiAgICAgICAgdmFyIGJQdHMgPSB0aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKHdpZHRoICsgMiAqIHBhZGRpbmcsIGhlaWdodCArIDIgKiBwYWRkaW5nLCBub2RlWCwgbm9kZVkpO1xuXG4gICAgICAgIHZhciBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzID0gZnVuY3Rpb24gYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhwdHMpIHtcbiAgICAgICAgICAvLyBhcHByb3hpbWF0ZSBjdXJ2ZSBwdHMgYmFzZWQgb24gdGhlIHR3byB0IHZhbHVlc1xuICAgICAgICAgIHZhciBtMCA9IHFiZXppZXJQdEF0KHtcbiAgICAgICAgICAgIHg6IHB0c1swXSxcbiAgICAgICAgICAgIHk6IHB0c1sxXVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHg6IHB0c1syXSxcbiAgICAgICAgICAgIHk6IHB0c1szXVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHg6IHB0c1s0XSxcbiAgICAgICAgICAgIHk6IHB0c1s1XVxuICAgICAgICAgIH0sIHQwKTtcbiAgICAgICAgICB2YXIgbTEgPSBxYmV6aWVyUHRBdCh7XG4gICAgICAgICAgICB4OiBwdHNbMF0sXG4gICAgICAgICAgICB5OiBwdHNbMV1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB4OiBwdHNbMl0sXG4gICAgICAgICAgICB5OiBwdHNbM11cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB4OiBwdHNbNF0sXG4gICAgICAgICAgICB5OiBwdHNbNV1cbiAgICAgICAgICB9LCB0MSk7XG4gICAgICAgICAgdmFyIG0yID0gcWJlemllclB0QXQoe1xuICAgICAgICAgICAgeDogcHRzWzBdLFxuICAgICAgICAgICAgeTogcHRzWzFdXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgeDogcHRzWzJdLFxuICAgICAgICAgICAgeTogcHRzWzNdXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgeDogcHRzWzRdLFxuICAgICAgICAgICAgeTogcHRzWzVdXG4gICAgICAgICAgfSwgdDIpO1xuICAgICAgICAgIHJldHVybiBbcHRzWzBdLCBwdHNbMV0sIG0wLngsIG0wLnksIG0xLngsIG0xLnksIG0yLngsIG0yLnksIHB0c1s0XSwgcHRzWzVdXTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHRzID0gW10uY29uY2F0KGFwcHJveGltYXRlQmFycmVsQ3VydmVQdHMoYlB0cy50b3BMZWZ0KSwgYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLnRvcFJpZ2h0KSwgYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLmJvdHRvbVJpZ2h0KSwgYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLmJvdHRvbUxlZnQpKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHB0cywgbm9kZVgsIG5vZGVZKTtcbiAgICAgIH0sXG4gICAgICBnZW5lcmF0ZUJhcnJlbEJlemllclB0czogZnVuY3Rpb24gZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMod2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgICB2YXIgaHcgPSB3aWR0aCAvIDI7XG4gICAgICAgIHZhciB4QmVnaW4gPSBjZW50ZXJYIC0gaHc7XG4gICAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgICB2YXIgeUJlZ2luID0gY2VudGVyWSAtIGhoO1xuICAgICAgICB2YXIgeUVuZCA9IGNlbnRlclkgKyBoaDtcbiAgICAgICAgdmFyIGN1cnZlQ29uc3RhbnRzID0gZ2V0QmFycmVsQ3VydmVDb25zdGFudHMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBoT2Zmc2V0ID0gY3VydmVDb25zdGFudHMuaGVpZ2h0T2Zmc2V0O1xuICAgICAgICB2YXIgd09mZnNldCA9IGN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuICAgICAgICB2YXIgY3RybFB0WE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmN0cmxQdE9mZnNldFBjdCAqIHdpZHRoOyAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgY29udHJvbCBwdCBvbiBbNCwgNV1cblxuICAgICAgICB2YXIgcHRzID0ge1xuICAgICAgICAgIHRvcExlZnQ6IFt4QmVnaW4sIHlCZWdpbiArIGhPZmZzZXQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEJlZ2luICsgd09mZnNldCwgeUJlZ2luXSxcbiAgICAgICAgICB0b3BSaWdodDogW3hFbmQgLSB3T2Zmc2V0LCB5QmVnaW4sIHhFbmQgLSBjdHJsUHRYT2Zmc2V0LCB5QmVnaW4sIHhFbmQsIHlCZWdpbiArIGhPZmZzZXRdLFxuICAgICAgICAgIGJvdHRvbVJpZ2h0OiBbeEVuZCwgeUVuZCAtIGhPZmZzZXQsIHhFbmQgLSBjdHJsUHRYT2Zmc2V0LCB5RW5kLCB4RW5kIC0gd09mZnNldCwgeUVuZF0sXG4gICAgICAgICAgYm90dG9tTGVmdDogW3hCZWdpbiArIHdPZmZzZXQsIHlFbmQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhCZWdpbiwgeUVuZCAtIGhPZmZzZXRdXG4gICAgICAgIH07XG4gICAgICAgIHB0cy50b3BMZWZ0LmlzVG9wID0gdHJ1ZTtcbiAgICAgICAgcHRzLnRvcFJpZ2h0LmlzVG9wID0gdHJ1ZTtcbiAgICAgICAgcHRzLmJvdHRvbUxlZnQuaXNCb3R0b20gPSB0cnVlO1xuICAgICAgICBwdHMuYm90dG9tUmlnaHQuaXNCb3R0b20gPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHRzO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgICAgICB2YXIgY3VydmVDb25zdGFudHMgPSBnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdmFyIGhPZmZzZXQgPSBjdXJ2ZUNvbnN0YW50cy5oZWlnaHRPZmZzZXQ7XG4gICAgICAgIHZhciB3T2Zmc2V0ID0gY3VydmVDb25zdGFudHMud2lkdGhPZmZzZXQ7IC8vIENoZWNrIGhCb3hcblxuICAgICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0IC0gMiAqIGhPZmZzZXQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgdkJveFxuXG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSAyICogd09mZnNldCwgaGVpZ2h0LCBbMCwgLTFdLCBwYWRkaW5nKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJhcnJlbEN1cnZlUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcblxuICAgICAgICB2YXIgZ2V0Q3VydmVUID0gZnVuY3Rpb24gZ2V0Q3VydmVUKHgsIHksIGN1cnZlUHRzKSB7XG4gICAgICAgICAgdmFyIHgwID0gY3VydmVQdHNbNF07XG4gICAgICAgICAgdmFyIHgxID0gY3VydmVQdHNbMl07XG4gICAgICAgICAgdmFyIHgyID0gY3VydmVQdHNbMF07XG4gICAgICAgICAgdmFyIHkwID0gY3VydmVQdHNbNV07IC8vIHZhciB5MSA9IGN1cnZlUHRzWyAzIF07XG5cbiAgICAgICAgICB2YXIgeTIgPSBjdXJ2ZVB0c1sxXTtcbiAgICAgICAgICB2YXIgeE1pbiA9IE1hdGgubWluKHgwLCB4Mik7XG4gICAgICAgICAgdmFyIHhNYXggPSBNYXRoLm1heCh4MCwgeDIpO1xuICAgICAgICAgIHZhciB5TWluID0gTWF0aC5taW4oeTAsIHkyKTtcbiAgICAgICAgICB2YXIgeU1heCA9IE1hdGgubWF4KHkwLCB5Mik7XG5cbiAgICAgICAgICBpZiAoeE1pbiA8PSB4ICYmIHggPD0geE1heCAmJiB5TWluIDw9IHkgJiYgeSA8PSB5TWF4KSB7XG4gICAgICAgICAgICB2YXIgY29lZmYgPSBiZXppZXJQdHNUb1F1YWRDb2VmZih4MCwgeDEsIHgyKTtcbiAgICAgICAgICAgIHZhciByb290cyA9IHNvbHZlUXVhZHJhdGljKGNvZWZmWzBdLCBjb2VmZlsxXSwgY29lZmZbMl0sIHgpO1xuICAgICAgICAgICAgdmFyIHZhbGlkUm9vdHMgPSByb290cy5maWx0ZXIoZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDAgPD0gciAmJiByIDw9IDE7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkUm9vdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRSb290c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgY3VydmVSZWdpb25zID0gT2JqZWN0LmtleXMoYmFycmVsQ3VydmVQdHMpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VydmVSZWdpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvcm5lciA9IGN1cnZlUmVnaW9uc1tpXTtcbiAgICAgICAgICB2YXIgY29ybmVyUHRzID0gYmFycmVsQ3VydmVQdHNbY29ybmVyXTtcbiAgICAgICAgICB2YXIgdCA9IGdldEN1cnZlVCh4LCB5LCBjb3JuZXJQdHMpO1xuXG4gICAgICAgICAgaWYgKHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHkwID0gY29ybmVyUHRzWzVdO1xuICAgICAgICAgIHZhciB5MSA9IGNvcm5lclB0c1szXTtcbiAgICAgICAgICB2YXIgeTIgPSBjb3JuZXJQdHNbMV07XG4gICAgICAgICAgdmFyIGJlelkgPSBxYmV6aWVyQXQoeTAsIHkxLCB5MiwgdCk7XG5cbiAgICAgICAgICBpZiAoY29ybmVyUHRzLmlzVG9wICYmIGJlelkgPD0geSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvcm5lclB0cy5pc0JvdHRvbSAmJiB5IDw9IGJlelkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIEJScCQyLmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddID0gdGhpcy5ub2RlU2hhcGVzWydib3R0b21yb3VuZHJlY3RhbmdsZSddID0ge1xuICAgICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgICBuYW1lOiAnYm90dG9tLXJvdW5kLXJlY3RhbmdsZScsXG4gICAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIH0sXG4gICAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZykge1xuICAgICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSAod2lkdGggLyAyICsgcGFkZGluZyk7XG4gICAgICAgIHZhciB0b3BTdGFydFkgPSBub2RlWSAtIChoZWlnaHQgLyAyICsgcGFkZGluZyk7XG4gICAgICAgIHZhciB0b3BFbmRZID0gdG9wU3RhcnRZO1xuICAgICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgKHdpZHRoIC8gMiArIHBhZGRpbmcpO1xuICAgICAgICB2YXIgdG9wSW50ZXJzZWN0aW9ucyA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIG5vZGVYLCBub2RlWSwgdG9wU3RhcnRYLCB0b3BTdGFydFksIHRvcEVuZFgsIHRvcEVuZFksIGZhbHNlKTtcblxuICAgICAgICBpZiAodG9wSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRvcEludGVyc2VjdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyk7XG4gICAgICB9LFxuICAgICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgICAgIHZhciBjb3JuZXJSYWRpdXMgPSBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdmFyIGRpYW0gPSAyICogY29ybmVyUmFkaXVzOyAvLyBDaGVjayBoQm94XG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgdkJveFxuXG5cbiAgICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSBkaWFtLCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gY2hlY2sgbm9uLXJvdW5kZWQgdG9wIHNpZGVcblxuXG4gICAgICAgIHZhciBvdXRlcldpZHRoID0gd2lkdGggLyAyICsgMiAqIHBhZGRpbmc7XG4gICAgICAgIHZhciBvdXRlckhlaWdodCA9IGhlaWdodCAvIDIgKyAyICogcGFkZGluZztcbiAgICAgICAgdmFyIHBvaW50cyA9IFtjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSAtIG91dGVySGVpZ2h0LCBjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSwgY2VudGVyWCArIG91dGVyV2lkdGgsIGNlbnRlclksIGNlbnRlclggKyBvdXRlcldpZHRoLCBjZW50ZXJZIC0gb3V0ZXJIZWlnaHRdO1xuXG4gICAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuXG5cbiAgICAgICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksIGRpYW0sIGRpYW0sIGNlbnRlclggKyB3aWR0aCAvIDIgLSBjb3JuZXJSYWRpdXMsIGNlbnRlclkgKyBoZWlnaHQgLyAyIC0gY29ybmVyUmFkaXVzLCBwYWRkaW5nKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG5cblxuICAgICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cywgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBCUnAkMi5yZWdpc3Rlck5vZGVTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGVTaGFwZXMgPSB0aGlzLm5vZGVTaGFwZXMgPSB7fTtcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzO1xuICAgIHRoaXMuZ2VuZXJhdGVFbGxpcHNlKCk7XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3RyaWFuZ2xlJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDMsIDApKTtcbiAgICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC10cmlhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSgzLCAwKSk7XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3JlY3RhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSk7XG4gICAgbm9kZVNoYXBlc1snc3F1YXJlJ10gPSBub2RlU2hhcGVzWydyZWN0YW5nbGUnXTtcbiAgICB0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUJhcnJlbCgpO1xuICAgIHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO1xuICAgIHtcbiAgICAgIHZhciBkaWFtb25kUG9pbnRzID0gWzAsIDEsIDEsIDAsIDAsIC0xLCAtMSwgMF07XG4gICAgICB0aGlzLmdlbmVyYXRlUG9seWdvbignZGlhbW9uZCcsIGRpYW1vbmRQb2ludHMpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtZGlhbW9uZCcsIGRpYW1vbmRQb2ludHMpO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlUG9seWdvbigncGVudGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNSwgMCkpO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXBlbnRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDUsIDApKTtcbiAgICB0aGlzLmdlbmVyYXRlUG9seWdvbignaGV4YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg2LCAwKSk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtaGV4YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg2LCAwKSk7XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hlcHRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDcsIDApKTtcbiAgICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC1oZXB0YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg3LCAwKSk7XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ29jdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoOCwgMCkpO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLW9jdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoOCwgMCkpO1xuICAgIHZhciBzdGFyNVBvaW50cyA9IG5ldyBBcnJheSgyMCk7XG4gICAge1xuICAgICAgdmFyIG91dGVyUG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyg1LCAwKTtcbiAgICAgIHZhciBpbm5lclBvaW50cyA9IGdlbmVyYXRlVW5pdE5nb25Qb2ludHMoNSwgTWF0aC5QSSAvIDUpOyAvLyBPdXRlciByYWRpdXMgaXMgMTsgaW5uZXIgcmFkaXVzIG9mIHN0YXIgaXMgc21hbGxlclxuXG4gICAgICB2YXIgaW5uZXJSYWRpdXMgPSAwLjUgKiAoMyAtIE1hdGguc3FydCg1KSk7XG4gICAgICBpbm5lclJhZGl1cyAqPSAxLjU3O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyUG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICBpbm5lclBvaW50c1tpICogMl0gKj0gaW5uZXJSYWRpdXM7XG4gICAgICAgIGlubmVyUG9pbnRzW2kgKiAyICsgMV0gKj0gaW5uZXJSYWRpdXM7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgLyA0OyBpKyspIHtcbiAgICAgICAgc3RhcjVQb2ludHNbaSAqIDRdID0gb3V0ZXJQb2ludHNbaSAqIDJdO1xuICAgICAgICBzdGFyNVBvaW50c1tpICogNCArIDFdID0gb3V0ZXJQb2ludHNbaSAqIDIgKyAxXTtcbiAgICAgICAgc3RhcjVQb2ludHNbaSAqIDQgKyAyXSA9IGlubmVyUG9pbnRzW2kgKiAyXTtcbiAgICAgICAgc3RhcjVQb2ludHNbaSAqIDQgKyAzXSA9IGlubmVyUG9pbnRzW2kgKiAyICsgMV07XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXI1UG9pbnRzID0gZml0UG9seWdvblRvU3F1YXJlKHN0YXI1UG9pbnRzKTtcbiAgICB0aGlzLmdlbmVyYXRlUG9seWdvbignc3RhcicsIHN0YXI1UG9pbnRzKTtcbiAgICB0aGlzLmdlbmVyYXRlUG9seWdvbigndmVlJywgWy0xLCAtMSwgMCwgLTAuMzMzLCAxLCAtMSwgMCwgMV0pO1xuICAgIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdyaG9tYm9pZCcsIFstMSwgLTEsIDAuMzMzLCAtMSwgMSwgMSwgLTAuMzMzLCAxXSk7XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3JpZ2h0LXJob21ib2lkJywgWy0wLjMzMywgLTEsIDEsIC0xLCAwLjMzMywgMSwgLTEsIDFdKTtcbiAgICB0aGlzLm5vZGVTaGFwZXNbJ2NvbmNhdmVoZXhhZ29uJ10gPSB0aGlzLmdlbmVyYXRlUG9seWdvbignY29uY2F2ZS1oZXhhZ29uJywgWy0xLCAtMC45NSwgLTAuNzUsIDAsIC0xLCAwLjk1LCAxLCAwLjk1LCAwLjc1LCAwLCAxLCAtMC45NV0pO1xuICAgIHtcbiAgICAgIHZhciB0YWdQb2ludHMgPSBbLTEsIC0xLCAwLjI1LCAtMSwgMSwgMCwgMC4yNSwgMSwgLTEsIDFdO1xuICAgICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3RhZycsIHRhZ1BvaW50cyk7XG4gICAgICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC10YWcnLCB0YWdQb2ludHMpO1xuICAgIH1cblxuICAgIG5vZGVTaGFwZXMubWFrZVBvbHlnb24gPSBmdW5jdGlvbiAocG9pbnRzKSB7XG4gICAgICAvLyB1c2UgY2FjaGluZyBvbiB1c2VyLXNwZWNpZmllZCBwb2x5Z29ucyBzbyB0aGV5IGFyZSBhcyBmYXN0IGFzIG5hdGl2ZSBzaGFwZXNcbiAgICAgIHZhciBrZXkgPSBwb2ludHMuam9pbignJCcpO1xuICAgICAgdmFyIG5hbWUgPSAncG9seWdvbi0nICsga2V5O1xuICAgICAgdmFyIHNoYXBlO1xuXG4gICAgICBpZiAoc2hhcGUgPSB0aGlzW25hbWVdKSB7XG4gICAgICAgIC8vIGdvdCBjYWNoZWQgc2hhcGVcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgICAgfSAvLyBjcmVhdGUgYW5kIGNhY2hlIG5ldyBzaGFwZVxuXG5cbiAgICAgIHJldHVybiByZW5kZXJlci5nZW5lcmF0ZVBvbHlnb24obmFtZSwgcG9pbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBCUnAkMSA9IHt9O1xuXG4gIEJScCQxLnRpbWVUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdUb3RhbFRpbWUgLyB0aGlzLnJlZHJhd0NvdW50O1xuICB9O1xuXG4gIEJScCQxLnJlZHJhdyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgc3RhdGljRW1wdHlPYmplY3QoKTtcbiAgICB2YXIgciA9IHRoaXM7XG5cbiAgICBpZiAoci5hdmVyYWdlUmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoci5sYXN0UmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByLmxhc3RSZWRyYXdUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoci5sYXN0RHJhd1RpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgci5sYXN0RHJhd1RpbWUgPSAwO1xuICAgIH1cblxuICAgIHIucmVxdWVzdGVkRnJhbWUgPSB0cnVlO1xuICAgIHIucmVuZGVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgQlJwJDEuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZuLCBwcmlvcml0eSkge1xuICAgIC8vIHRoZSByZW5kZXJlciBjYW4ndCBhZGQgdGljayBjYWxsYmFja3Mgd2hlbiBkZXN0cm95ZWRcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJpb3JpdHkgPT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ1ByaW9yaXR5IGlzIG5vdCBvcHRpb25hbCBmb3IgYmVmb3JlUmVuZGVyJyk7XG4gICAgfVxuXG4gICAgdmFyIGNicyA9IHRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO1xuICAgIGNicy5wdXNoKHtcbiAgICAgIGZuOiBmbixcbiAgICAgIHByaW9yaXR5OiBwcmlvcml0eVxuICAgIH0pOyAvLyBoaWdoZXIgcHJpb3JpdHkgY2FsbGJhY2tzIGV4ZWN1dGVkIGZpcnN0XG5cbiAgICBjYnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIucHJpb3JpdHkgLSBhLnByaW9yaXR5O1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBiZWZvcmVSZW5kZXJDYWxsYmFja3MgPSBmdW5jdGlvbiBiZWZvcmVSZW5kZXJDYWxsYmFja3Mociwgd2lsbERyYXcsIHN0YXJ0VGltZSkge1xuICAgIHZhciBjYnMgPSByLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYnNbaV0uZm4od2lsbERyYXcsIHN0YXJ0VGltZSk7XG4gICAgfVxuICB9O1xuXG4gIEJScCQxLnN0YXJ0UmVuZGVyTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGN5ID0gci5jeTtcblxuICAgIGlmIChyLnJlbmRlckxvb3BTdGFydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHIucmVuZGVyTG9vcFN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciByZW5kZXJGbiA9IGZ1bmN0aW9uIHJlbmRlckZuKHJlcXVlc3RUaW1lKSB7XG4gICAgICBpZiAoci5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3kuYmF0Y2hpbmcoKSkgOyBlbHNlIGlmIChyLnJlcXVlc3RlZEZyYW1lICYmICFyLnNraXBGcmFtZSkge1xuICAgICAgICBiZWZvcmVSZW5kZXJDYWxsYmFja3MociwgdHJ1ZSwgcmVxdWVzdFRpbWUpO1xuICAgICAgICB2YXIgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgci5yZW5kZXIoci5yZW5kZXJPcHRpb25zKTtcbiAgICAgICAgdmFyIGVuZFRpbWUgPSByLmxhc3REcmF3VGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG5cbiAgICAgICAgaWYgKHIuYXZlcmFnZVJlZHJhd1RpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHIuYXZlcmFnZVJlZHJhd1RpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIucmVkcmF3Q291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHIucmVkcmF3Q291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgci5yZWRyYXdDb3VudCsrO1xuXG4gICAgICAgIGlmIChyLnJlZHJhd1RvdGFsVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgci5yZWRyYXdUb3RhbFRpbWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAgICAgci5yZWRyYXdUb3RhbFRpbWUgKz0gZHVyYXRpb247XG4gICAgICAgIHIubGFzdFJlZHJhd1RpbWUgPSBkdXJhdGlvbjsgLy8gdXNlIGEgd2VpZ2h0ZWQgYXZlcmFnZSB3aXRoIGEgYmlhcyBmcm9tIHRoZSBwcmV2aW91cyBhdmVyYWdlIHNvIHdlIGRvbid0IHNwaWtlIHNvIGVhc2lseVxuXG4gICAgICAgIHIuYXZlcmFnZVJlZHJhd1RpbWUgPSByLmF2ZXJhZ2VSZWRyYXdUaW1lIC8gMiArIGR1cmF0aW9uIC8gMjtcbiAgICAgICAgci5yZXF1ZXN0ZWRGcmFtZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlUmVuZGVyQ2FsbGJhY2tzKHIsIGZhbHNlLCByZXF1ZXN0VGltZSk7XG4gICAgICB9XG5cbiAgICAgIHIuc2tpcEZyYW1lID0gZmFsc2U7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyRm4pO1xuICAgIH07XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyRm4pO1xuICB9O1xuXG4gIHZhciBCYXNlUmVuZGVyZXIgPSBmdW5jdGlvbiBCYXNlUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcbiAgfTtcblxuICB2YXIgQlIgPSBCYXNlUmVuZGVyZXI7XG4gIHZhciBCUnAgPSBCUi5wcm90b3R5cGU7XG4gIEJScC5jbGllbnRGdW5jdGlvbnMgPSBbJ3JlZHJhd0hpbnQnLCAncmVuZGVyJywgJ3JlbmRlclRvJywgJ21hdGNoQ2FudmFzU2l6ZScsICdub2RlU2hhcGVJbXBsJywgJ2Fycm93U2hhcGVJbXBsJ107XG5cbiAgQlJwLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciByID0gdGhpcztcbiAgICByLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHIuY3kgPSBvcHRpb25zLmN5O1xuICAgIHZhciBjdHIgPSByLmNvbnRhaW5lciA9IG9wdGlvbnMuY3kuY29udGFpbmVyKCk7XG4gICAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHIuY3kud2luZG93KCk7IC8vIHByZXBlbmQgYSBzdHlsZXNoZWV0IGluIHRoZSBoZWFkIHN1Y2ggdGhhdFxuXG4gICAgaWYgKGNvbnRhaW5lcldpbmRvdykge1xuICAgICAgdmFyIGRvY3VtZW50ID0gY29udGFpbmVyV2luZG93LmRvY3VtZW50O1xuICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkO1xuICAgICAgdmFyIHN0eWxlc2hlZXRJZCA9ICdfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQnO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICdfX19fX19fX19fY3l0b3NjYXBlX2NvbnRhaW5lcic7XG4gICAgICB2YXIgc3R5bGVzaGVldEFscmVhZHlFeGlzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdHlsZXNoZWV0SWQpICE9IG51bGw7XG5cbiAgICAgIGlmIChjdHIuY2xhc3NOYW1lLmluZGV4T2YoY2xhc3NOYW1lKSA8IDApIHtcbiAgICAgICAgY3RyLmNsYXNzTmFtZSA9IChjdHIuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIGNsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdHlsZXNoZWV0QWxyZWFkeUV4aXN0cykge1xuICAgICAgICB2YXIgc3R5bGVzaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHN0eWxlc2hlZXQuaWQgPSBzdHlsZXNoZWV0SWQ7XG4gICAgICAgIHN0eWxlc2hlZXQudGV4dENvbnRlbnQgPSAnLicgKyBjbGFzc05hbWUgKyAnIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9JztcbiAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVzaGVldCwgaGVhZC5jaGlsZHJlblswXSk7IC8vIGZpcnN0IHNvIGxvd2VzdCBwcmlvcml0eVxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGN0cik7XG4gICAgICB2YXIgcG9zaXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJyk7XG5cbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgd2FybignQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHknKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByLnNlbGVjdGlvbiA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDBdOyAvLyBDb29yZGluYXRlcyBmb3Igc2VsZWN0aW9uIGJveCwgcGx1cyBlbmFibGVkIGZsYWdcblxuICAgIHIuYmV6aWVyUHJvalBjdHMgPSBbMC4wNSwgMC4yMjUsIDAuNCwgMC41LCAwLjYsIDAuNzc1LCAwLjk1XTsgLy8tLVBvaW50ZXItcmVsYXRlZCBkYXRhXG5cbiAgICByLmhvdmVyRGF0YSA9IHtcbiAgICAgIGRvd246IG51bGwsXG4gICAgICBsYXN0OiBudWxsLFxuICAgICAgZG93blRpbWU6IG51bGwsXG4gICAgICB0cmlnZ2VyTW9kZTogbnVsbCxcbiAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgIGluaXRpYWxQYW46IFtudWxsLCBudWxsXSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfTtcbiAgICByLmRyYWdEYXRhID0ge1xuICAgICAgcG9zc2libGVEcmFnRWxlbWVudHM6IFtdXG4gICAgfTtcbiAgICByLnRvdWNoRGF0YSA9IHtcbiAgICAgIHN0YXJ0OiBudWxsLFxuICAgICAgY2FwdHVyZTogZmFsc2UsXG4gICAgICAvLyBUaGVzZSAzIGZpZWxkcyByZWxhdGVkIHRvIHRhcCwgdGFwaG9sZCBldmVudHNcbiAgICAgIHN0YXJ0UG9zaXRpb246IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSxcbiAgICAgIHNpbmdsZVRvdWNoU3RhcnRUaW1lOiBudWxsLFxuICAgICAgc2luZ2xlVG91Y2hNb3ZlZDogdHJ1ZSxcbiAgICAgIG5vdzogW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdLFxuICAgICAgZWFybGllcjogW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdXG4gICAgfTtcbiAgICByLnJlZHJhd3MgPSAwO1xuICAgIHIuc2hvd0ZwcyA9IG9wdGlvbnMuc2hvd0ZwcztcbiAgICByLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcbiAgICByLmhpZGVFZGdlc09uVmlld3BvcnQgPSBvcHRpb25zLmhpZGVFZGdlc09uVmlld3BvcnQ7XG4gICAgci50ZXh0dXJlT25WaWV3cG9ydCA9IG9wdGlvbnMudGV4dHVyZU9uVmlld3BvcnQ7XG4gICAgci53aGVlbFNlbnNpdGl2aXR5ID0gb3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5O1xuICAgIHIubW90aW9uQmx1ckVuYWJsZWQgPSBvcHRpb25zLm1vdGlvbkJsdXI7IC8vIG9uIGJ5IGRlZmF1bHRcblxuICAgIHIuZm9yY2VkUGl4ZWxSYXRpbyA9IG51bWJlciQxKG9wdGlvbnMucGl4ZWxSYXRpbykgPyBvcHRpb25zLnBpeGVsUmF0aW8gOiBudWxsO1xuICAgIHIubW90aW9uQmx1ciA9IG9wdGlvbnMubW90aW9uQmx1cjsgLy8gZm9yIGluaXRpYWwga2ljayBvZmZcblxuICAgIHIubW90aW9uQmx1ck9wYWNpdHkgPSBvcHRpb25zLm1vdGlvbkJsdXJPcGFjaXR5O1xuICAgIHIubW90aW9uQmx1clRyYW5zcGFyZW5jeSA9IDEgLSByLm1vdGlvbkJsdXJPcGFjaXR5O1xuICAgIHIubW90aW9uQmx1clB4UmF0aW8gPSAxO1xuICAgIHIubWJQeFJCbHVycnkgPSAxOyAvLzAuODtcblxuICAgIHIubWluTWJMb3dRdWFsRnJhbWVzID0gNDtcbiAgICByLmZ1bGxRdWFsaXR5TWIgPSBmYWxzZTtcbiAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyID0gW107XG4gICAgci5kZXNrdG9wVGFwVGhyZXNob2xkID0gb3B0aW9ucy5kZXNrdG9wVGFwVGhyZXNob2xkO1xuICAgIHIuZGVza3RvcFRhcFRocmVzaG9sZDIgPSBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQgKiBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQ7XG4gICAgci50b3VjaFRhcFRocmVzaG9sZCA9IG9wdGlvbnMudG91Y2hUYXBUaHJlc2hvbGQ7XG4gICAgci50b3VjaFRhcFRocmVzaG9sZDIgPSBvcHRpb25zLnRvdWNoVGFwVGhyZXNob2xkICogb3B0aW9ucy50b3VjaFRhcFRocmVzaG9sZDtcbiAgICByLnRhcGhvbGREdXJhdGlvbiA9IDUwMDtcbiAgICByLmJpbmRpbmdzID0gW107XG4gICAgci5iZWZvcmVSZW5kZXJDYWxsYmFja3MgPSBbXTtcbiAgICByLmJlZm9yZVJlbmRlclByaW9yaXRpZXMgPSB7XG4gICAgICAvLyBoaWdoZXIgcHJpb3JpdHkgZXhlY3MgYmVmb3JlIGxvd2VyIG9uZVxuICAgICAgYW5pbWF0aW9uczogNDAwLFxuICAgICAgZWxlQ2FsY3M6IDMwMCxcbiAgICAgIGVsZVR4ckRlcTogMjAwLFxuICAgICAgbHlyVHhyRGVxOiAxNTAsXG4gICAgICBseXJUeHJTa2lwOiAxMDBcbiAgICB9O1xuICAgIHIucmVnaXN0ZXJOb2RlU2hhcGVzKCk7XG4gICAgci5yZWdpc3RlckFycm93U2hhcGVzKCk7XG4gICAgci5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzKCk7XG4gIH07XG5cbiAgQlJwLm5vdGlmeSA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGVsZXMpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGN5ID0gci5jeTsgLy8gdGhlIHJlbmRlcmVyIGNhbid0IGJlIG5vdGlmaWVkIGFmdGVyIGl0J3MgZGVzdHJveWVkXG5cbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5pdCcpIHtcbiAgICAgIHIubG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudE5hbWUgPT09ICdkZXN0cm95Jykge1xuICAgICAgci5kZXN0cm95KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2FkZCcgfHwgZXZlbnROYW1lID09PSAncmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdtb3ZlJyAmJiBjeS5oYXNDb21wb3VuZE5vZGVzKCkgfHwgZXZlbnROYW1lID09PSAnbG9hZCcgfHwgZXZlbnROYW1lID09PSAnem9yZGVyJyB8fCBldmVudE5hbWUgPT09ICdtb3VudCcpIHtcbiAgICAgIHIuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSAnbG9hZCcgfHwgZXZlbnROYW1lID09PSAncmVzaXplJyB8fCBldmVudE5hbWUgPT09ICdtb3VudCcpIHtcbiAgICAgIHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCk7XG4gICAgICByLm1hdGNoQ2FudmFzU2l6ZShyLmNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgdGhpcy5zdGFydFJlbmRlckxvb3AoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIEJScC5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgci5jeS5zdG9wQW5pbWF0aW9uTG9vcCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByLmJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYmluZGluZyA9IHIuYmluZGluZ3NbaV07XG4gICAgICB2YXIgYiA9IGJpbmRpbmc7XG4gICAgICB2YXIgdGd0ID0gYi50YXJnZXQ7XG4gICAgICAodGd0Lm9mZiB8fCB0Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkodGd0LCBiLmFyZ3MpO1xuICAgIH1cblxuICAgIHIuYmluZGluZ3MgPSBbXTtcbiAgICByLmJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IFtdO1xuICAgIHIub25VcGRhdGVFbGVDYWxjc0ZucyA9IFtdO1xuXG4gICAgaWYgKHIucmVtb3ZlT2JzZXJ2ZXIpIHtcbiAgICAgIHIucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGlmIChyLnN0eWxlT2JzZXJ2ZXIpIHtcbiAgICAgIHIuc3R5bGVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHIucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHIucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIGlmIChyLmxhYmVsQ2FsY0Rpdikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyLmxhYmVsQ2FsY0Rpdik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgIH0gY2F0Y2ggKGUpIHsvLyBpZTEwIGlzc3VlICMxMDE0XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJScC5pc0hlYWRsZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBbQlJwJGYsIEJScCQ1LCBCUnAkNCwgQlJwJDMsIEJScCQyLCBCUnAkMV0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBleHRlbmQoQlJwLCBwcm9wcyk7XG4gIH0pO1xuXG4gIHZhciBmdWxsRnBzVGltZSA9IDEwMDAgLyA2MDsgLy8gYXNzdW1lIDYwIGZyYW1lcyBwZXIgc2Vjb25kXG5cbiAgdmFyIGRlZnMgPSB7XG4gICAgc2V0dXBEZXF1ZXVlaW5nOiBmdW5jdGlvbiBzZXR1cERlcXVldWVpbmcob3B0cykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldHVwRGVxdWV1ZWluZ0ltcGwoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuXG4gICAgICAgIGlmIChzZWxmLmRlcXVldWVpbmdTZXR1cCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLmRlcXVldWVpbmdTZXR1cCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcXVldWVSZWRyYXcgPSBkZWJvdW5jZV8xKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICAgICAgICByLnJlZHJhdygpO1xuICAgICAgICB9LCBvcHRzLmRlcVJlZHJhd1RocmVzaG9sZCk7XG5cbiAgICAgICAgdmFyIGRlcXVldWUgPSBmdW5jdGlvbiBkZXF1ZXVlKHdpbGxEcmF3LCBmcmFtZVN0YXJ0VGltZSkge1xuICAgICAgICAgIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICAgIHZhciBhdmdSZW5kZXJUaW1lID0gci5hdmVyYWdlUmVkcmF3VGltZTtcbiAgICAgICAgICB2YXIgcmVuZGVyVGltZSA9IHIubGFzdFJlZHJhd1RpbWU7XG4gICAgICAgICAgdmFyIGRlcWQgPSBbXTtcbiAgICAgICAgICB2YXIgZXh0ZW50ID0gci5jeS5leHRlbnQoKTtcbiAgICAgICAgICB2YXIgcGl4ZWxSYXRpbyA9IHIuZ2V0UGl4ZWxSYXRpbygpOyAvLyBpZiB3ZSBhcmVuJ3QgaW4gYSB0aWNrIHRoYXQgY2F1c2VzIGEgZHJhdywgdGhlbiB0aGUgcmVuZGVyZWQgc3R5bGVcbiAgICAgICAgICAvLyBxdWV1ZSB3b24ndCBhdXRvbWF0aWNhbGx5IGJlIGZsdXNoZWQgYmVmb3JlIGRlcXVldWVpbmcgc3RhcnRzXG5cbiAgICAgICAgICBpZiAoIXdpbGxEcmF3KSB7XG4gICAgICAgICAgICByLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgICB2YXIgbm93ID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5vdyAtIHN0YXJ0VGltZTtcbiAgICAgICAgICAgIHZhciBmcmFtZUR1cmF0aW9uID0gbm93IC0gZnJhbWVTdGFydFRpbWU7XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJUaW1lIDwgZnVsbEZwc1RpbWUpIHtcbiAgICAgICAgICAgICAgLy8gaWYgd2UncmUgcmVuZGVyaW5nIGZhc3RlciB0aGFuIHRoZSBpZGVhbCBmcHMsIHRoZW4gZG8gZGVxdWV1ZWluZ1xuICAgICAgICAgICAgICAvLyBkdXJpbmcgYWxsIG9mIHRoZSByZW1haW5pbmcgZnJhbWUgdGltZVxuICAgICAgICAgICAgICB2YXIgdGltZUF2YWlsYWJsZSA9IGZ1bGxGcHNUaW1lIC0gKHdpbGxEcmF3ID8gYXZnUmVuZGVyVGltZSA6IDApO1xuXG4gICAgICAgICAgICAgIGlmIChmcmFtZUR1cmF0aW9uID49IG9wdHMuZGVxRmFzdENvc3QgKiB0aW1lQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh3aWxsRHJhdykge1xuICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+PSBvcHRzLmRlcUNvc3QgKiByZW5kZXJUaW1lIHx8IGR1cmF0aW9uID49IG9wdHMuZGVxQXZnQ29zdCAqIGF2Z1JlbmRlclRpbWUpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUR1cmF0aW9uID49IG9wdHMuZGVxTm9EcmF3Q29zdCAqIGZ1bGxGcHNUaW1lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRoaXNEZXFkID0gb3B0cy5kZXEoc2VsZiwgcGl4ZWxSYXRpbywgZXh0ZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXNEZXFkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzRGVxZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGRlcWQucHVzaCh0aGlzRGVxZFtpXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gY2FsbGJhY2tzIG9uIGRlcXVldWVcblxuXG4gICAgICAgICAgaWYgKGRlcWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb3B0cy5vbkRlcWQoc2VsZiwgZGVxZCk7XG5cbiAgICAgICAgICAgIGlmICghd2lsbERyYXcgJiYgb3B0cy5zaG91bGRSZWRyYXcoc2VsZiwgZGVxZCwgcGl4ZWxSYXRpbywgZXh0ZW50KSkge1xuICAgICAgICAgICAgICBxdWV1ZVJlZHJhdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJpb3JpdHkgPSBvcHRzLnByaW9yaXR5IHx8IG5vb3AkMTtcbiAgICAgICAgci5iZWZvcmVSZW5kZXIoZGVxdWV1ZSwgcHJpb3JpdHkoc2VsZikpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVXNlcyBrZXlzIHNvIGVsZW1lbnRzIG1heSBzaGFyZSB0aGUgc2FtZSBjYWNoZS5cblxuICB2YXIgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cChnZXRLZXkpIHtcbiAgICAgIHZhciBkb2VzRWxlSW52YWxpZGF0ZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2lmeTtcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXApO1xuXG4gICAgICB0aGlzLmlkc0J5S2V5ID0gbmV3IE1hcCQyKCk7XG4gICAgICB0aGlzLmtleUZvcklkID0gbmV3IE1hcCQyKCk7XG4gICAgICB0aGlzLmNhY2hlc0J5THZsID0gbmV3IE1hcCQyKCk7XG4gICAgICB0aGlzLmx2bHMgPSBbXTtcbiAgICAgIHRoaXMuZ2V0S2V5ID0gZ2V0S2V5O1xuICAgICAgdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleSA9IGRvZXNFbGVJbnZhbGlkYXRlS2V5O1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwLCBbe1xuICAgICAga2V5OiBcImdldElkc0ZvclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldElkc0ZvcihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgZXJyb3IoXCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZHNCeUtleSA9IHRoaXMuaWRzQnlLZXk7XG4gICAgICAgIHZhciBpZHMgPSB0aGlzLmlkc0J5S2V5LmdldChrZXkpO1xuXG4gICAgICAgIGlmICghaWRzKSB7XG4gICAgICAgICAgaWRzID0gbmV3IFNldCQxKCk7XG4gICAgICAgICAgaWRzQnlLZXkuc2V0KGtleSwgaWRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpZHM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImFkZElkRm9yS2V5XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmdldElkc0ZvcihrZXkpLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlSWRGb3JLZXlcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWxldGVJZEZvcktleShrZXksIGlkKSB7XG4gICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSlbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldE51bWJlck9mSWRzRm9yS2V5XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TnVtYmVyT2ZJZHNGb3JLZXkoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldElkc0ZvcihrZXkpLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidXBkYXRlS2V5TWFwcGluZ0ZvclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUtleU1hcHBpbmdGb3IoZWxlKSB7XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICB2YXIgcHJldktleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTtcbiAgICAgICAgdmFyIGN1cnJLZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgICB0aGlzLmRlbGV0ZUlkRm9yS2V5KHByZXZLZXksIGlkKTtcbiAgICAgICAgdGhpcy5hZGRJZEZvcktleShjdXJyS2V5LCBpZCk7XG4gICAgICAgIHRoaXMua2V5Rm9ySWQuc2V0KGlkLCBjdXJyS2V5KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlS2V5TWFwcGluZ0ZvclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKSB7XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICB2YXIgcHJldktleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTtcbiAgICAgICAgdGhpcy5kZWxldGVJZEZvcktleShwcmV2S2V5LCBpZCk7XG4gICAgICAgIHRoaXMua2V5Rm9ySWRbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJrZXlIYXNDaGFuZ2VkRm9yXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24ga2V5SGFzQ2hhbmdlZEZvcihlbGUpIHtcbiAgICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICAgIHZhciBwcmV2S2V5ID0gdGhpcy5rZXlGb3JJZC5nZXQoaWQpO1xuICAgICAgICB2YXIgbmV3S2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgICAgcmV0dXJuIHByZXZLZXkgIT09IG5ld0tleTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaXNJbnZhbGlkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNJbnZhbGlkKGVsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKGVsZSkgfHwgdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShlbGUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRDYWNoZXNBdFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlc0F0KGx2bCkge1xuICAgICAgICB2YXIgY2FjaGVzQnlMdmwgPSB0aGlzLmNhY2hlc0J5THZsLFxuICAgICAgICAgICAgbHZscyA9IHRoaXMubHZscztcbiAgICAgICAgdmFyIGNhY2hlcyA9IGNhY2hlc0J5THZsLmdldChsdmwpO1xuXG4gICAgICAgIGlmICghY2FjaGVzKSB7XG4gICAgICAgICAgY2FjaGVzID0gbmV3IE1hcCQyKCk7XG4gICAgICAgICAgY2FjaGVzQnlMdmwuc2V0KGx2bCwgY2FjaGVzKTtcbiAgICAgICAgICBsdmxzLnB1c2gobHZsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWNoZXM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldENhY2hlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2FjaGUoa2V5LCBsdmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobHZsKS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGVsZSwgbHZsKSB7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmdldENhY2hlKGtleSwgbHZsKTsgLy8gZ2V0dGluZyBmb3IgYW4gZWxlbWVudCBtYXkgbmVlZCB0byBhZGQgdG8gdGhlIGlkIGxpc3QgYi9jIGVsZXMgY2FuIHNoYXJlIGtleXNcblxuICAgICAgICBpZiAoY2FjaGUgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihlbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRGb3JDYWNoZWRLZXlcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpIHtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGVsZS5pZCgpKTsgLy8gbi5iLiB1c2UgY2FjaGVkIGtleSwgbm90IG5ld2x5IGNvbXB1dGVkIGtleVxuXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuICAgICAgICByZXR1cm4gY2FjaGU7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhc0NhY2hlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzQ2FjaGUoa2V5LCBsdmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobHZsKS5oYXMoa2V5KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGVsZSwgbHZsKSB7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNDYWNoZShrZXksIGx2bCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNldENhY2hlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q2FjaGUoa2V5LCBsdmwsIGNhY2hlKSB7XG4gICAgICAgIGNhY2hlLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5nZXRDYWNoZXNBdChsdmwpLnNldChrZXksIGNhY2hlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGVsZSwgbHZsLCBjYWNoZSkge1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgICAgdGhpcy5zZXRDYWNoZShrZXksIGx2bCwgY2FjaGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoZWxlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlQ2FjaGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWxldGVDYWNoZShrZXksIGx2bCkge1xuICAgICAgICB0aGlzLmdldENhY2hlc0F0KGx2bClbXCJkZWxldGVcIl0oa2V5KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlbGV0ZShlbGUsIGx2bCkge1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgICAgdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImludmFsaWRhdGVLZXlcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbnZhbGlkYXRlS2V5KGtleSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMubHZscy5mb3JFYWNoKGZ1bmN0aW9uIChsdmwpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZGVsZXRlQ2FjaGUoa2V5LCBsdmwpO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcmV0dXJucyB0cnVlIGlmIG5vIG90aGVyIGVsZXMgcmVmZXJlbmNlIHRoZSBpbnZhbGlkYXRlZCBjYWNoZSAobi5iLiBvdGhlciBlbGVzIG1heSBuZWVkIHRoZSBjYWNoZSB3aXRoIHRoZSBzYW1lIGtleSlcblxuICAgIH0sIHtcbiAgICAgIGtleTogXCJpbnZhbGlkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZShlbGUpIHtcbiAgICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLmtleUZvcklkLmdldChpZCk7IC8vIG4uYi4gdXNlIHN0b3JlZCBrZXkgcmF0aGVyIHRoYW4gY3VycmVudCAocG90ZW50aWFsIGtleSlcblxuICAgICAgICB0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKTtcbiAgICAgICAgdmFyIGVudGlyZUtleUludmFsaWRhdGVkID0gdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShlbGUpO1xuXG4gICAgICAgIGlmIChlbnRpcmVLZXlJbnZhbGlkYXRlZCkge1xuICAgICAgICAgIC8vIGNsZWFyIG1hcHBpbmcgZm9yIGN1cnJlbnQga2V5XG4gICAgICAgICAgdGhpcy5pbnZhbGlkYXRlS2V5KGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50aXJlS2V5SW52YWxpZGF0ZWQgfHwgdGhpcy5nZXROdW1iZXJPZklkc0ZvcktleShrZXkpID09PSAwO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwO1xuICB9KCk7XG5cbiAgdmFyIG1pblR4ckggPSAyNTsgLy8gdGhlIHNpemUgb2YgdGhlIHRleHR1cmUgY2FjaGUgZm9yIHNtYWxsIGhlaWdodCBlbGVzIChzcGVjaWFsIGNhc2UpXG5cbiAgdmFyIHR4clN0ZXBIID0gNTA7IC8vIHRoZSBtaW4gc2l6ZSBvZiB0aGUgcmVndWxhciBjYWNoZSwgYW5kIHRoZSBzaXplIGl0IGluY3JlYXNlcyB3aXRoIGVhY2ggc3RlcCB1cFxuXG4gIHZhciBtaW5MdmwkMSA9IC00OyAvLyB3aGVuIHNjYWxpbmcgc21hbGxlciB0aGFuIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZS1yZW5kZXJcblxuICB2YXIgbWF4THZsJDEgPSAzOyAvLyB3aGVuIGxhcmdlciB0aGFuIHRoaXMgc2NhbGUganVzdCByZW5kZXIgZGlyZWN0bHkgKGNhY2hpbmcgaXMgbm90IGhlbHBmdWwpXG5cbiAgdmFyIG1heFpvb20kMSA9IDcuOTk7IC8vIGJleW9uZCB0aGlzIHpvb20gbGV2ZWwsIGxheWVyZWQgdGV4dHVyZXMgYXJlIG5vdCB1c2VkXG5cbiAgdmFyIGVsZVR4clNwYWNpbmcgPSA4OyAvLyBzcGFjaW5nIGJldHdlZW4gZWxlbWVudHMgb24gdGV4dHVyZXMgdG8gYXZvaWQgYmxpdHRpbmcgb3ZlcmxhcHNcblxuICB2YXIgZGVmVHhyV2lkdGggPSAxMDI0OyAvLyBkZWZhdWx0L21pbmltdW0gdGV4dHVyZSB3aWR0aFxuXG4gIHZhciBtYXhUeHJXID0gMTAyNDsgLy8gdGhlIG1heGltdW0gd2lkdGggb2YgYSB0ZXh0dXJlXG5cbiAgdmFyIG1heFR4ckggPSAxMDI0OyAvLyB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYSB0ZXh0dXJlXG5cbiAgdmFyIG1pblV0aWxpdHkgPSAwLjI7IC8vIGlmIHVzYWdlIG9mIHRleHR1cmUgaXMgbGVzcyB0aGFuIHRoaXMsIGl0IGlzIHJldGlyZWRcblxuICB2YXIgbWF4RnVsbG5lc3MgPSAwLjg7IC8vIGZ1bGxuZXNzIG9mIHRleHR1cmUgYWZ0ZXIgd2hpY2ggcXVldWUgcmVtb3ZhbCBpcyBjaGVja2VkXG5cbiAgdmFyIG1heEZ1bGxuZXNzQ2hlY2tzID0gMTA7IC8vIGRlcXVldWVkIGFmdGVyIHRoaXMgbWFueSBjaGVja3NcblxuICB2YXIgZGVxQ29zdCQxID0gMC4xNTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBhbGxvd2VkIGZvciBkZXF1ZXVpbmcgZWxlIGNhY2hlcyBlYWNoIGZyYW1lXG5cbiAgdmFyIGRlcUF2Z0Nvc3QkMSA9IDAuMTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBjb21wYXJlZCB0byBhdmVyYWdlIG92ZXJhbGwgcmVkcmF3IHRpbWVcblxuICB2YXIgZGVxTm9EcmF3Q29zdCQxID0gMC45OyAvLyAlIG9mIGF2ZyBmcmFtZSB0aW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcXVldWVpbmcgd2hlbiBub3QgZHJhd2luZ1xuXG4gIHZhciBkZXFGYXN0Q29zdCQxID0gMC45OyAvLyAlIG9mIGZyYW1lIHRpbWUgdG8gYmUgdXNlZCB3aGVuID42MGZwc1xuXG4gIHZhciBkZXFSZWRyYXdUaHJlc2hvbGQkMSA9IDEwMDsgLy8gdGltZSB0byBiYXRjaCByZWRyYXdzIHRvZ2V0aGVyIGZyb20gZGVxdWV1ZWluZyB0byBhbGxvdyBtb3JlIGRlcXVldWVpbmcgY2FsY3MgdG8gaGFwcGVuIGluIHRoZSBtZWFud2hpbGVcblxuICB2YXIgbWF4RGVxU2l6ZSQxID0gMTsgLy8gbnVtYmVyIG9mIGVsZXMgdG8gZGVxdWV1ZSBhbmQgcmVuZGVyIGF0IGhpZ2hlciB0ZXh0dXJlIGluIGVhY2ggYmF0Y2hcblxuICB2YXIgZ2V0VHhyUmVhc29ucyA9IHtcbiAgICBkZXF1ZXVlOiAnZGVxdWV1ZScsXG4gICAgZG93bnNjYWxlOiAnZG93bnNjYWxlJyxcbiAgICBoaWdoUXVhbGl0eTogJ2hpZ2hRdWFsaXR5J1xuICB9O1xuICB2YXIgaW5pdERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gICAgZ2V0S2V5OiBudWxsLFxuICAgIGRvZXNFbGVJbnZhbGlkYXRlS2V5OiBmYWxzaWZ5LFxuICAgIGRyYXdFbGVtZW50OiBudWxsLFxuICAgIGdldEJvdW5kaW5nQm94OiBudWxsLFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IG51bGwsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IG51bGwsXG4gICAgaXNWaXNpYmxlOiB0cnVlaWZ5LFxuICAgIGFsbG93RWRnZVR4ckNhY2hpbmc6IHRydWUsXG4gICAgYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBFbGVtZW50VGV4dHVyZUNhY2hlID0gZnVuY3Rpb24gRWxlbWVudFRleHR1cmVDYWNoZShyZW5kZXJlciwgaW5pdE9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHNlbGYub25EZXF1ZXVlcyA9IFtdO1xuICAgIHZhciBvcHRzID0gaW5pdERlZmF1bHRzKGluaXRPcHRpb25zKTtcbiAgICBleHRlbmQoc2VsZiwgb3B0cyk7XG4gICAgc2VsZi5sb29rdXAgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cChvcHRzLmdldEtleSwgb3B0cy5kb2VzRWxlSW52YWxpZGF0ZUtleSk7XG4gICAgc2VsZi5zZXR1cERlcXVldWVpbmcoKTtcbiAgfTtcblxuICB2YXIgRVRDcCA9IEVsZW1lbnRUZXh0dXJlQ2FjaGUucHJvdG90eXBlO1xuICBFVENwLnJlYXNvbnMgPSBnZXRUeHJSZWFzb25zOyAvLyB0aGUgbGlzdCBvZiB0ZXh0dXJlcyBpbiB3aGljaCBuZXcgc3VidGV4dHVyZXMgZm9yIGVsZW1lbnRzIGNhbiBiZSBwbGFjZWRcblxuICBFVENwLmdldFRleHR1cmVRdWV1ZSA9IGZ1bmN0aW9uICh0eHJIKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZWxlSW1nQ2FjaGVzID0gc2VsZi5lbGVJbWdDYWNoZXMgfHwge307XG4gICAgcmV0dXJuIHNlbGYuZWxlSW1nQ2FjaGVzW3R4ckhdID0gc2VsZi5lbGVJbWdDYWNoZXNbdHhySF0gfHwgW107XG4gIH07IC8vIHRoZSBsaXN0IG9mIHVzdXNlZCB0ZXh0dXJlcyB3aGljaCBjYW4gYmUgcmVjeWNsZWQgKGluIHVzZSBpbiB0ZXh0dXJlIHF1ZXVlKVxuXG5cbiAgRVRDcC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlID0gZnVuY3Rpb24gKHR4ckgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHJ0eHRyUXMgPSBzZWxmLmVsZUltZ0NhY2hlcy5yZXRpcmVkID0gc2VsZi5lbGVJbWdDYWNoZXMucmV0aXJlZCB8fCB7fTtcbiAgICB2YXIgcnR4dHJRID0gcnR4dHJRc1t0eHJIXSA9IHJ0eHRyUXNbdHhySF0gfHwgW107XG4gICAgcmV0dXJuIHJ0eHRyUTtcbiAgfTsgLy8gcXVldWUgb2YgZWxlbWVudCBkcmF3IHJlcXVlc3RzIGF0IGRpZmZlcmVudCBzY2FsZSBsZXZlbHNcblxuXG4gIEVUQ3AuZ2V0RWxlbWVudFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSB8fCBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIucmVxcyAtIGEucmVxcztcbiAgICB9KTtcbiAgICByZXR1cm4gcTtcbiAgfTsgLy8gcXVldWUgb2YgZWxlbWVudCBkcmF3IHJlcXVlc3RzIGF0IGRpZmZlcmVudCBzY2FsZSBsZXZlbHMgKGVsZW1lbnQgaWQgbG9va3VwKVxuXG5cbiAgRVRDcC5nZXRFbGVtZW50S2V5VG9RdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGsycSA9IHNlbGYuZWxlS2V5VG9DYWNoZVF1ZXVlID0gc2VsZi5lbGVLZXlUb0NhY2hlUXVldWUgfHwge307XG4gICAgcmV0dXJuIGsycTtcbiAgfTtcblxuICBFVENwLmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlLCBiYiwgcHhSYXRpbywgbHZsLCByZWFzb24pIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgdmFyIGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgaWYgKCFiYiB8fCBiYi53ID09PSAwIHx8IGJiLmggPT09IDAgfHwgaXNOYU4oYmIudykgfHwgaXNOYU4oYmIuaCkgfHwgIWVsZS52aXNpYmxlKCkgfHwgZWxlLnJlbW92ZWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFzZWxmLmFsbG93RWRnZVR4ckNhY2hpbmcgJiYgZWxlLmlzRWRnZSgpIHx8ICFzZWxmLmFsbG93UGFyZW50VHhyQ2FjaGluZyAmJiBlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGx2bCA9PSBudWxsKSB7XG4gICAgICBsdmwgPSBNYXRoLmNlaWwobG9nMih6b29tICogcHhSYXRpbykpO1xuICAgIH1cblxuICAgIGlmIChsdmwgPCBtaW5MdmwkMSkge1xuICAgICAgbHZsID0gbWluTHZsJDE7XG4gICAgfSBlbHNlIGlmICh6b29tID49IG1heFpvb20kMSB8fCBsdmwgPiBtYXhMdmwkMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgICB2YXIgZWxlU2NhbGVkSCA9IGJiLmggKiBzY2FsZTtcbiAgICB2YXIgZWxlU2NhbGVkVyA9IGJiLncgKiBzY2FsZTtcbiAgICB2YXIgc2NhbGVkTGFiZWxTaG93biA9IHIuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZWxlLCBzY2FsZSk7XG5cbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBlbGVDYWNoZSA9IGxvb2t1cC5nZXQoZWxlLCBsdmwpOyAvLyBpZiB0aGlzIGdldCB3YXMgb24gYW4gdW51c2VkL2ludmFsaWRhdGVkIGNhY2hlLCB0aGVuIHJlc3RvcmUgdGhlIHRleHR1cmUgdXNhZ2UgbWV0cmljXG5cbiAgICBpZiAoZWxlQ2FjaGUgJiYgZWxlQ2FjaGUuaW52YWxpZGF0ZWQpIHtcbiAgICAgIGVsZUNhY2hlLmludmFsaWRhdGVkID0gZmFsc2U7XG4gICAgICBlbGVDYWNoZS50ZXh0dXJlLmludmFsaWRhdGVkV2lkdGggLT0gZWxlQ2FjaGUud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKGVsZUNhY2hlKSB7XG4gICAgICByZXR1cm4gZWxlQ2FjaGU7XG4gICAgfVxuXG4gICAgdmFyIHR4ckg7IC8vIHdoaWNoIHRleHR1cmUgaGVpZ2h0IHRoaXMgZWxlIGJlbG9uZ3MgdG9cblxuICAgIGlmIChlbGVTY2FsZWRIIDw9IG1pblR4ckgpIHtcbiAgICAgIHR4ckggPSBtaW5UeHJIO1xuICAgIH0gZWxzZSBpZiAoZWxlU2NhbGVkSCA8PSB0eHJTdGVwSCkge1xuICAgICAgdHhySCA9IHR4clN0ZXBIO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eHJIID0gTWF0aC5jZWlsKGVsZVNjYWxlZEggLyB0eHJTdGVwSCkgKiB0eHJTdGVwSDtcbiAgICB9XG5cbiAgICBpZiAoZWxlU2NhbGVkSCA+IG1heFR4ckggfHwgZWxlU2NhbGVkVyA+IG1heFR4clcpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBjYWNoaW5nIGxhcmdlIGVsZW1lbnRzIGlzIG5vdCBlZmZpY2llbnRcbiAgICB9XG5cbiAgICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ckgpOyAvLyBmaXJzdCB0cnkgdGhlIHNlY29uZCBsYXN0IG9uZSBpbiBjYXNlIGl0IGhhcyBzcGFjZSBhdCB0aGUgZW5kXG5cbiAgICB2YXIgdHhyID0gdHhyUVt0eHJRLmxlbmd0aCAtIDJdO1xuXG4gICAgdmFyIGFkZE5ld1R4ciA9IGZ1bmN0aW9uIGFkZE5ld1R4cigpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlY3ljbGVUZXh0dXJlKHR4ckgsIGVsZVNjYWxlZFcpIHx8IHNlbGYuYWRkVGV4dHVyZSh0eHJILCBlbGVTY2FsZWRXKTtcbiAgICB9OyAvLyB0cnkgdGhlIGxhc3Qgb25lIGlmIHRoZXJlIGlzIG5vIHNlY29uZCBsYXN0IG9uZVxuXG5cbiAgICBpZiAoIXR4cikge1xuICAgICAgdHhyID0gdHhyUVt0eHJRLmxlbmd0aCAtIDFdO1xuICAgIH0gLy8gaWYgdGhlIGxhc3Qgb25lIGRvZXNuJ3QgZXhpc3QsIHdlIG5lZWQgYSBmaXJzdCBvbmVcblxuXG4gICAgaWYgKCF0eHIpIHtcbiAgICAgIHR4ciA9IGFkZE5ld1R4cigpO1xuICAgIH0gLy8gaWYgdGhlcmUncyBubyByb29tIGluIHRoZSBjdXJyZW50IHRleHR1cmUsIHdlIG5lZWQgYSBuZXcgb25lXG5cblxuICAgIGlmICh0eHIud2lkdGggLSB0eHIudXNlZFdpZHRoIDwgZWxlU2NhbGVkVykge1xuICAgICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gICAgfVxuXG4gICAgdmFyIHNjYWxhYmxlRnJvbSA9IGZ1bmN0aW9uIHNjYWxhYmxlRnJvbShvdGhlckNhY2hlKSB7XG4gICAgICByZXR1cm4gb3RoZXJDYWNoZSAmJiBvdGhlckNhY2hlLnNjYWxlZExhYmVsU2hvd24gPT09IHNjYWxlZExhYmVsU2hvd247XG4gICAgfTtcblxuICAgIHZhciBkZXFpbmcgPSByZWFzb24gJiYgcmVhc29uID09PSBnZXRUeHJSZWFzb25zLmRlcXVldWU7XG4gICAgdmFyIGhpZ2hRdWFsaXR5UmVxID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5oaWdoUXVhbGl0eTtcbiAgICB2YXIgZG93bnNjYWxlUmVxID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kb3duc2NhbGU7XG4gICAgdmFyIGhpZ2hlckNhY2hlOyAvLyB0aGUgbmVhcmVzdCBjYWNoZSB3aXRoIGEgaGlnaGVyIGxldmVsXG5cbiAgICBmb3IgKHZhciBsID0gbHZsICsgMTsgbCA8PSBtYXhMdmwkMTsgbCsrKSB7XG4gICAgICB2YXIgYyA9IGxvb2t1cC5nZXQoZWxlLCBsKTtcblxuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaGlnaGVyQ2FjaGUgPSBjO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb25lVXBDYWNoZSA9IGhpZ2hlckNhY2hlICYmIGhpZ2hlckNhY2hlLmxldmVsID09PSBsdmwgKyAxID8gaGlnaGVyQ2FjaGUgOiBudWxsO1xuXG4gICAgdmFyIGRvd25zY2FsZSA9IGZ1bmN0aW9uIGRvd25zY2FsZSgpIHtcbiAgICAgIHR4ci5jb250ZXh0LmRyYXdJbWFnZShvbmVVcENhY2hlLnRleHR1cmUuY2FudmFzLCBvbmVVcENhY2hlLngsIDAsIG9uZVVwQ2FjaGUud2lkdGgsIG9uZVVwQ2FjaGUuaGVpZ2h0LCB0eHIudXNlZFdpZHRoLCAwLCBlbGVTY2FsZWRXLCBlbGVTY2FsZWRIKTtcbiAgICB9OyAvLyByZXNldCBlbGUgYXJlYSBpbiB0ZXh0dXJlXG5cblxuICAgIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0eHIuY29udGV4dC5jbGVhclJlY3QodHhyLnVzZWRXaWR0aCwgMCwgZWxlU2NhbGVkVywgdHhySCk7XG5cbiAgICBpZiAoc2NhbGFibGVGcm9tKG9uZVVwQ2FjaGUpKSB7XG4gICAgICAvLyB0aGVuIHdlIGNhbiByZWxhdGl2ZWx5IGNoZWFwbHkgcmVzY2FsZSB0aGUgZXhpc3RpbmcgaW1hZ2Ugdy9vIHJlcmVuZGVyaW5nXG4gICAgICBkb3duc2NhbGUoKTtcbiAgICB9IGVsc2UgaWYgKHNjYWxhYmxlRnJvbShoaWdoZXJDYWNoZSkpIHtcbiAgICAgIC8vIHRoZW4gdXNlIHRoZSBoaWdoZXIgY2FjaGUgZm9yIG5vdyBhbmQgcXVldWUgdGhlIG5leHQgbGV2ZWwgZG93blxuICAgICAgLy8gdG8gY2hlYXBseSBzY2FsZSB0b3dhcmRzIHRoZSBzbWFsbGVyIGxldmVsXG4gICAgICBpZiAoaGlnaFF1YWxpdHlSZXEpIHtcbiAgICAgICAgZm9yICh2YXIgX2wgPSBoaWdoZXJDYWNoZS5sZXZlbDsgX2wgPiBsdmw7IF9sLS0pIHtcbiAgICAgICAgICBvbmVVcENhY2hlID0gc2VsZi5nZXRFbGVtZW50KGVsZSwgYmIsIHB4UmF0aW8sIF9sLCBnZXRUeHJSZWFzb25zLmRvd25zY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkb3duc2NhbGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgaGlnaGVyQ2FjaGUubGV2ZWwgLSAxKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hlckNhY2hlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG93ZXJDYWNoZTsgLy8gdGhlIG5lYXJlc3QgY2FjaGUgd2l0aCBhIGxvd2VyIGxldmVsXG5cbiAgICAgIGlmICghZGVxaW5nICYmICFoaWdoUXVhbGl0eVJlcSAmJiAhZG93bnNjYWxlUmVxKSB7XG4gICAgICAgIGZvciAodmFyIF9sMiA9IGx2bCAtIDE7IF9sMiA+PSBtaW5MdmwkMTsgX2wyLS0pIHtcbiAgICAgICAgICB2YXIgX2MgPSBsb29rdXAuZ2V0KGVsZSwgX2wyKTtcblxuICAgICAgICAgIGlmIChfYykge1xuICAgICAgICAgICAgbG93ZXJDYWNoZSA9IF9jO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2FsYWJsZUZyb20obG93ZXJDYWNoZSkpIHtcbiAgICAgICAgLy8gdGhlbiB1c2UgdGhlIGxvd2VyIHF1YWxpdHkgY2FjaGUgZm9yIG5vdyBhbmQgcXVldWUgdGhlIGJldHRlciBvbmUgZm9yIGxhdGVyXG4gICAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgbHZsKTtcbiAgICAgICAgcmV0dXJuIGxvd2VyQ2FjaGU7XG4gICAgICB9XG5cbiAgICAgIHR4ci5jb250ZXh0LnRyYW5zbGF0ZSh0eHIudXNlZFdpZHRoLCAwKTtcbiAgICAgIHR4ci5jb250ZXh0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICB0aGlzLmRyYXdFbGVtZW50KHR4ci5jb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCBmYWxzZSk7XG4gICAgICB0eHIuY29udGV4dC5zY2FsZSgxIC8gc2NhbGUsIDEgLyBzY2FsZSk7XG4gICAgICB0eHIuY29udGV4dC50cmFuc2xhdGUoLXR4ci51c2VkV2lkdGgsIDApO1xuICAgIH1cblxuICAgIGVsZUNhY2hlID0ge1xuICAgICAgeDogdHhyLnVzZWRXaWR0aCxcbiAgICAgIHRleHR1cmU6IHR4cixcbiAgICAgIGxldmVsOiBsdmwsXG4gICAgICBzY2FsZTogc2NhbGUsXG4gICAgICB3aWR0aDogZWxlU2NhbGVkVyxcbiAgICAgIGhlaWdodDogZWxlU2NhbGVkSCxcbiAgICAgIHNjYWxlZExhYmVsU2hvd246IHNjYWxlZExhYmVsU2hvd25cbiAgICB9O1xuICAgIHR4ci51c2VkV2lkdGggKz0gTWF0aC5jZWlsKGVsZVNjYWxlZFcgKyBlbGVUeHJTcGFjaW5nKTtcbiAgICB0eHIuZWxlQ2FjaGVzLnB1c2goZWxlQ2FjaGUpO1xuICAgIGxvb2t1cC5zZXQoZWxlLCBsdmwsIGVsZUNhY2hlKTtcbiAgICBzZWxmLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKHR4cik7XG4gICAgcmV0dXJuIGVsZUNhY2hlO1xuICB9O1xuXG4gIEVUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUVsZW1lbnQoZWxlc1tpXSk7XG4gICAgfVxuICB9O1xuXG4gIEVUQ3AuaW52YWxpZGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBsb29rdXAgPSBzZWxmLmxvb2t1cDtcbiAgICB2YXIgY2FjaGVzID0gW107XG4gICAgdmFyIGludmFsaWQgPSBsb29rdXAuaXNJbnZhbGlkKGVsZSk7XG5cbiAgICBpZiAoIWludmFsaWQpIHtcbiAgICAgIHJldHVybjsgLy8gb3ZlcnJpZGUgdGhlIGludmFsaWRhdGlvbiByZXF1ZXN0IGlmIHRoZSBlbGVtZW50IGtleSBoYXMgbm90IGNoYW5nZWRcbiAgICB9XG5cbiAgICBmb3IgKHZhciBsdmwgPSBtaW5MdmwkMTsgbHZsIDw9IG1heEx2bCQxOyBsdmwrKykge1xuICAgICAgdmFyIGNhY2hlID0gbG9va3VwLmdldEZvckNhY2hlZEtleShlbGUsIGx2bCk7XG5cbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjYWNoZXMucHVzaChjYWNoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vT3RoZXJFbGVzVXNlQ2FjaGUgPSBsb29rdXAuaW52YWxpZGF0ZShlbGUpO1xuXG4gICAgaWYgKG5vT3RoZXJFbGVzVXNlQ2FjaGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfY2FjaGUgPSBjYWNoZXNbaV07XG4gICAgICAgIHZhciB0eHIgPSBfY2FjaGUudGV4dHVyZTsgLy8gcmVtb3ZlIHNwYWNlIGZyb20gdGhlIHRleHR1cmUgaXQgYmVsb25ncyB0b1xuXG4gICAgICAgIHR4ci5pbnZhbGlkYXRlZFdpZHRoICs9IF9jYWNoZS53aWR0aDsgLy8gbWFyayB0aGUgY2FjaGUgYXMgaW52YWxpZGF0ZWRcblxuICAgICAgICBfY2FjaGUuaW52YWxpZGF0ZWQgPSB0cnVlOyAvLyByZXRpcmUgdGhlIHRleHR1cmUgaWYgaXRzIHV0aWxpdHkgaXMgbG93XG5cbiAgICAgICAgc2VsZi5jaGVja1RleHR1cmVVdGlsaXR5KHR4cik7XG4gICAgICB9XG4gICAgfSAvLyByZW1vdmUgZnJvbSBxdWV1ZSBzaW5jZSB0aGUgb2xkIHJlcSB3YXMgZm9yIHRoZSBvbGQgc3RhdGVcblxuXG4gICAgc2VsZi5yZW1vdmVGcm9tUXVldWUoZWxlKTtcbiAgfTtcblxuICBFVENwLmNoZWNrVGV4dHVyZVV0aWxpdHkgPSBmdW5jdGlvbiAodHhyKSB7XG4gICAgLy8gaW52YWxpZGF0ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgaWYgdGhlIGNhY2hlIHNpemUgaXMgc21hbGxcbiAgICBpZiAodHhyLmludmFsaWRhdGVkV2lkdGggPj0gbWluVXRpbGl0eSAqIHR4ci53aWR0aCkge1xuICAgICAgdGhpcy5yZXRpcmVUZXh0dXJlKHR4cik7XG4gICAgfVxuICB9O1xuXG4gIEVUQ3AuY2hlY2tUZXh0dXJlRnVsbG5lc3MgPSBmdW5jdGlvbiAodHhyKSB7XG4gICAgLy8gaWYgdGV4dHVyZSBoYXMgYmVlbiBtb3N0bHkgZmlsbGVkIGFuZCBwYXNzZWQgb3ZlciBzZXZlcmFsIHRpbWVzLCByZW1vdmVcbiAgICAvLyBpdCBmcm9tIHRoZSBxdWV1ZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhc3RlIHRpbWUgbG9va2luZyBhdCBpdCB0byBwdXQgbmV3IHRoaW5nc1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ci5oZWlnaHQpO1xuXG4gICAgaWYgKHR4ci51c2VkV2lkdGggLyB0eHIud2lkdGggPiBtYXhGdWxsbmVzcyAmJiB0eHIuZnVsbG5lc3NDaGVja3MgPj0gbWF4RnVsbG5lc3NDaGVja3MpIHtcbiAgICAgIHJlbW92ZUZyb21BcnJheSh0eHJRLCB0eHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eHIuZnVsbG5lc3NDaGVja3MrKztcbiAgICB9XG4gIH07XG5cbiAgRVRDcC5yZXRpcmVUZXh0dXJlID0gZnVuY3Rpb24gKHR4cikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgdHhySCA9IHR4ci5oZWlnaHQ7XG4gICAgdmFyIHR4clEgPSBzZWxmLmdldFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgICB2YXIgbG9va3VwID0gdGhpcy5sb29rdXA7IC8vIHJldGlyZSB0aGUgdGV4dHVyZSBmcm9tIHRoZSBhY3RpdmUgLyBzZWFyY2hhYmxlIHF1ZXVlOlxuXG4gICAgcmVtb3ZlRnJvbUFycmF5KHR4clEsIHR4cik7XG4gICAgdHhyLnJldGlyZWQgPSB0cnVlOyAvLyByZW1vdmUgdGhlIHJlZnMgZnJvbSB0aGUgZWxlcyB0byB0aGUgY2FjaGVzOlxuXG4gICAgdmFyIGVsZUNhY2hlcyA9IHR4ci5lbGVDYWNoZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZUNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZUNhY2hlID0gZWxlQ2FjaGVzW2ldO1xuICAgICAgbG9va3VwLmRlbGV0ZUNhY2hlKGVsZUNhY2hlLmtleSwgZWxlQ2FjaGUubGV2ZWwpO1xuICAgIH1cblxuICAgIGNsZWFyQXJyYXkoZWxlQ2FjaGVzKTsgLy8gYWRkIHRoZSB0ZXh0dXJlIHRvIGEgcmV0aXJlZCBxdWV1ZSBzbyBpdCBjYW4gYmUgcmVjeWNsZWQgaW4gZnV0dXJlOlxuXG4gICAgdmFyIHJ0eHRyUSA9IHNlbGYuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgICBydHh0clEucHVzaCh0eHIpO1xuICB9O1xuXG4gIEVUQ3AuYWRkVGV4dHVyZSA9IGZ1bmN0aW9uICh0eHJILCBtaW5XKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG4gICAgdmFyIHR4ciA9IHt9O1xuICAgIHR4clEucHVzaCh0eHIpO1xuICAgIHR4ci5lbGVDYWNoZXMgPSBbXTtcbiAgICB0eHIuaGVpZ2h0ID0gdHhySDtcbiAgICB0eHIud2lkdGggPSBNYXRoLm1heChkZWZUeHJXaWR0aCwgbWluVyk7XG4gICAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gICAgdHhyLmludmFsaWRhdGVkV2lkdGggPSAwO1xuICAgIHR4ci5mdWxsbmVzc0NoZWNrcyA9IDA7XG4gICAgdHhyLmNhbnZhcyA9IHNlbGYucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyh0eHIud2lkdGgsIHR4ci5oZWlnaHQpO1xuICAgIHR4ci5jb250ZXh0ID0gdHhyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHJldHVybiB0eHI7XG4gIH07XG5cbiAgRVRDcC5yZWN5Y2xlVGV4dHVyZSA9IGZ1bmN0aW9uICh0eHJILCBtaW5XKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG4gICAgdmFyIHJ0eHRyUSA9IHNlbGYuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0eHJIKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnR4dHJRLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHhyID0gcnR4dHJRW2ldO1xuXG4gICAgICBpZiAodHhyLndpZHRoID49IG1pblcpIHtcbiAgICAgICAgdHhyLnJldGlyZWQgPSBmYWxzZTtcbiAgICAgICAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gICAgICAgIHR4ci5pbnZhbGlkYXRlZFdpZHRoID0gMDtcbiAgICAgICAgdHhyLmZ1bGxuZXNzQ2hlY2tzID0gMDtcbiAgICAgICAgY2xlYXJBcnJheSh0eHIuZWxlQ2FjaGVzKTtcbiAgICAgICAgdHhyLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICB0eHIuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdHhyLndpZHRoLCB0eHIuaGVpZ2h0KTtcbiAgICAgICAgcmVtb3ZlRnJvbUFycmF5KHJ0eHRyUSwgdHhyKTtcbiAgICAgICAgdHhyUS5wdXNoKHR4cik7XG4gICAgICAgIHJldHVybiB0eHI7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEVUQ3AucXVldWVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZSwgbHZsKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBxID0gc2VsZi5nZXRFbGVtZW50UXVldWUoKTtcbiAgICB2YXIgazJxID0gc2VsZi5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpO1xuICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgIHZhciBleGlzdGluZ1JlcSA9IGsycVtrZXldO1xuXG4gICAgaWYgKGV4aXN0aW5nUmVxKSB7XG4gICAgICAvLyB1c2UgdGhlIG1heCBsdmwgYi9jIGluIGJldHdlZW4gbHZscyBhcmUgY2hlYXAgdG8gbWFrZVxuICAgICAgZXhpc3RpbmdSZXEubGV2ZWwgPSBNYXRoLm1heChleGlzdGluZ1JlcS5sZXZlbCwgbHZsKTtcbiAgICAgIGV4aXN0aW5nUmVxLmVsZXMubWVyZ2UoZWxlKTtcbiAgICAgIGV4aXN0aW5nUmVxLnJlcXMrKztcbiAgICAgIHEudXBkYXRlSXRlbShleGlzdGluZ1JlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXEgPSB7XG4gICAgICAgIGVsZXM6IGVsZS5zcGF3bigpLm1lcmdlKGVsZSksXG4gICAgICAgIGxldmVsOiBsdmwsXG4gICAgICAgIHJlcXM6IDEsXG4gICAgICAgIGtleToga2V5XG4gICAgICB9O1xuICAgICAgcS5wdXNoKHJlcSk7XG4gICAgICBrMnFba2V5XSA9IHJlcTtcbiAgICB9XG4gIH07XG5cbiAgRVRDcC5kZXF1ZXVlID0gZnVuY3Rpb24gKHB4UmF0aW9cbiAgLyosIGV4dGVudCovXG4gICkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gICAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgICB2YXIgZGVxdWV1ZWQgPSBbXTtcbiAgICB2YXIgbG9va3VwID0gc2VsZi5sb29rdXA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heERlcVNpemUkMTsgaSsrKSB7XG4gICAgICBpZiAocS5zaXplKCkgPiAwKSB7XG4gICAgICAgIHZhciByZXEgPSBxLnBvcCgpO1xuICAgICAgICB2YXIga2V5ID0gcmVxLmtleTtcbiAgICAgICAgdmFyIGVsZSA9IHJlcS5lbGVzWzBdOyAvLyBhbGwgZWxlcyBoYXZlIHRoZSBzYW1lIGtleVxuXG4gICAgICAgIHZhciBjYWNoZUV4aXN0cyA9IGxvb2t1cC5oYXNDYWNoZShlbGUsIHJlcS5sZXZlbCk7IC8vIGNsZWFyIG91dCB0aGUga2V5IHRvIHJlcSBsb29rdXBcblxuICAgICAgICBrMnFba2V5XSA9IG51bGw7IC8vIGRlcXVldWVpbmcgaXNuJ3QgbmVjZXNzYXJ5IHdpdGggYW4gZXhpc3RpbmcgY2FjaGVcblxuICAgICAgICBpZiAoY2FjaGVFeGlzdHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcXVldWVkLnB1c2gocmVxKTtcbiAgICAgICAgdmFyIGJiID0gc2VsZi5nZXRCb3VuZGluZ0JveChlbGUpO1xuICAgICAgICBzZWxmLmdldEVsZW1lbnQoZWxlLCBiYiwgcHhSYXRpbywgcmVxLmxldmVsLCBnZXRUeHJSZWFzb25zLmRlcXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcXVldWVkO1xuICB9O1xuXG4gIEVUQ3AucmVtb3ZlRnJvbVF1ZXVlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gICAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICB2YXIgcmVxID0gazJxW2tleV07XG5cbiAgICBpZiAocmVxICE9IG51bGwpIHtcbiAgICAgIGlmIChyZXEuZWxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gcmVtb3ZlIGlmIGxhc3QgZWxlIGluIHRoZSByZXFcbiAgICAgICAgLy8gYnJpbmcgdG8gZnJvbnQgb2YgcXVldWVcbiAgICAgICAgcmVxLnJlcXMgPSBNQVhfSU5UJDE7XG4gICAgICAgIHEudXBkYXRlSXRlbShyZXEpO1xuICAgICAgICBxLnBvcCgpOyAvLyByZW1vdmUgZnJvbSBxdWV1ZVxuXG4gICAgICAgIGsycVtrZXldID0gbnVsbDsgLy8gcmVtb3ZlIGZyb20gbG9va3VwIG1hcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmVtb3ZlIGVsZSBmcm9tIHJlcVxuICAgICAgICByZXEuZWxlcy51bm1lcmdlKGVsZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEVUQ3Aub25EZXF1ZXVlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdGhpcy5vbkRlcXVldWVzLnB1c2goZm4pO1xuICB9O1xuXG4gIEVUQ3Aub2ZmRGVxdWV1ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHJlbW92ZUZyb21BcnJheSh0aGlzLm9uRGVxdWV1ZXMsIGZuKTtcbiAgfTtcblxuICBFVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgICBkZXFSZWRyYXdUaHJlc2hvbGQ6IGRlcVJlZHJhd1RocmVzaG9sZCQxLFxuICAgIGRlcUNvc3Q6IGRlcUNvc3QkMSxcbiAgICBkZXFBdmdDb3N0OiBkZXFBdmdDb3N0JDEsXG4gICAgZGVxTm9EcmF3Q29zdDogZGVxTm9EcmF3Q29zdCQxLFxuICAgIGRlcUZhc3RDb3N0OiBkZXFGYXN0Q29zdCQxLFxuICAgIGRlcTogZnVuY3Rpb24gZGVxKHNlbGYsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgICAgcmV0dXJuIHNlbGYuZGVxdWV1ZShweFJhdGlvLCBleHRlbnQpO1xuICAgIH0sXG4gICAgb25EZXFkOiBmdW5jdGlvbiBvbkRlcWQoc2VsZiwgZGVxZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLm9uRGVxdWV1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZuID0gc2VsZi5vbkRlcXVldWVzW2ldO1xuICAgICAgICBmbihkZXFkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3VsZFJlZHJhdzogZnVuY3Rpb24gc2hvdWxkUmVkcmF3KHNlbGYsIGRlcWQsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXFkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGVzID0gZGVxZFtpXS5lbGVzO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBiYiA9IGVsZXNbal0uYm91bmRpbmdCb3goKTtcblxuICAgICAgICAgIGlmIChib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiLCBleHRlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgcHJpb3JpdHk6IGZ1bmN0aW9uIHByaW9yaXR5KHNlbGYpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGRlZk51bUxheWVycyA9IDE7IC8vIGRlZmF1bHQgbnVtYmVyIG9mIGxheWVycyB0byB1c2VcblxuICB2YXIgbWluTHZsID0gLTQ7IC8vIHdoZW4gc2NhbGluZyBzbWFsbGVyIHRoYW4gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlbmRlclxuXG4gIHZhciBtYXhMdmwgPSAyOyAvLyB3aGVuIGxhcmdlciB0aGFuIHRoaXMgc2NhbGUganVzdCByZW5kZXIgZGlyZWN0bHkgKGNhY2hpbmcgaXMgbm90IGhlbHBmdWwpXG5cbiAgdmFyIG1heFpvb20gPSAzLjk5OyAvLyBiZXlvbmQgdGhpcyB6b29tIGxldmVsLCBsYXllcmVkIHRleHR1cmVzIGFyZSBub3QgdXNlZFxuXG4gIHZhciBkZXFSZWRyYXdUaHJlc2hvbGQgPSA1MDsgLy8gdGltZSB0byBiYXRjaCByZWRyYXdzIHRvZ2V0aGVyIGZyb20gZGVxdWV1ZWluZyB0byBhbGxvdyBtb3JlIGRlcXVldWVpbmcgY2FsY3MgdG8gaGFwcGVuIGluIHRoZSBtZWFud2hpbGVcblxuICB2YXIgcmVmaW5lRWxlRGVib3VuY2VUaW1lID0gNTA7IC8vIHRpbWUgdG8gZGVib3VuY2Ugc2hhcnBlciBlbGUgdGV4dHVyZSB1cGRhdGVzXG5cbiAgdmFyIGRlcUNvc3QgPSAwLjE1OyAvLyAlIG9mIGFkZCdsIHJlbmRlcmluZyBjb3N0IGFsbG93ZWQgZm9yIGRlcXVldWluZyBlbGUgY2FjaGVzIGVhY2ggZnJhbWVcblxuICB2YXIgZGVxQXZnQ29zdCA9IDAuMTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBjb21wYXJlZCB0byBhdmVyYWdlIG92ZXJhbGwgcmVkcmF3IHRpbWVcblxuICB2YXIgZGVxTm9EcmF3Q29zdCA9IDAuOTsgLy8gJSBvZiBhdmcgZnJhbWUgdGltZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkZXF1ZXVlaW5nIHdoZW4gbm90IGRyYXdpbmdcblxuICB2YXIgZGVxRmFzdENvc3QgPSAwLjk7IC8vICUgb2YgZnJhbWUgdGltZSB0byBiZSB1c2VkIHdoZW4gPjYwZnBzXG5cbiAgdmFyIG1heERlcVNpemUgPSAxOyAvLyBudW1iZXIgb2YgZWxlcyB0byBkZXF1ZXVlIGFuZCByZW5kZXIgYXQgaGlnaGVyIHRleHR1cmUgaW4gZWFjaCBiYXRjaFxuXG4gIHZhciBpbnZhbGlkVGhyZXNob2xkID0gMjUwOyAvLyB0aW1lIHRocmVzaG9sZCBmb3IgZGlzYWJsaW5nIGIvYyBvZiBpbnZhbGlkYXRpb25zXG5cbiAgdmFyIG1heExheWVyQXJlYSA9IDQwMDAgKiA0MDAwOyAvLyBsYXllcnMgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gdGhpc1xuXG4gIHZhciB1c2VIaWdoUXVhbGl0eUVsZVR4clJlcXMgPSB0cnVlOyAvLyB3aGV0aGVyIHRvIHVzZSBoaWdoIHF1YWxpdHkgZWxlIHR4ciByZXF1ZXN0cyAoZ2VuZXJhbGx5IGZhc3RlciBhbmQgY2hlYXBlciBpbiB0aGUgbG9uZ3Rlcm0pXG4gIC8vIHZhciBsb2cgPSBmdW5jdGlvbigpeyBjb25zb2xlLmxvZy5hcHBseSggY29uc29sZSwgYXJndW1lbnRzICk7IH07XG5cbiAgdmFyIExheWVyZWRUZXh0dXJlQ2FjaGUgPSBmdW5jdGlvbiBMYXllcmVkVGV4dHVyZUNhY2hlKHJlbmRlcmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByID0gc2VsZi5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHZhciBjeSA9IHIuY3k7XG4gICAgc2VsZi5sYXllcnNCeUxldmVsID0ge307IC8vIGUuZy4gMiA9PiBbIGxheWVyMSwgbGF5ZXIyLCAuLi4sIGxheWVyTiBdXG5cbiAgICBzZWxmLmZpcnN0R2V0ID0gdHJ1ZTtcbiAgICBzZWxmLmxhc3RJbnZhbGlkYXRpb25UaW1lID0gcGVyZm9ybWFuY2VOb3coKSAtIDIgKiBpbnZhbGlkVGhyZXNob2xkO1xuICAgIHNlbGYuc2tpcHBpbmcgPSBmYWxzZTtcbiAgICBzZWxmLmVsZVR4ckRlcXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgc2VsZi5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50ID0gZGVib3VuY2VfMShmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnJlZmluZUVsZW1lbnRUZXh0dXJlcyhzZWxmLmVsZVR4ckRlcXMpO1xuICAgICAgc2VsZi5lbGVUeHJEZXFzLnVubWVyZ2Uoc2VsZi5lbGVUeHJEZXFzKTtcbiAgICB9LCByZWZpbmVFbGVEZWJvdW5jZVRpbWUpO1xuICAgIHIuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uICh3aWxsRHJhdywgbm93KSB7XG4gICAgICBpZiAobm93IC0gc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA8PSBpbnZhbGlkVGhyZXNob2xkKSB7XG4gICAgICAgIHNlbGYuc2tpcHBpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5za2lwcGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sIHIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTtcblxuICAgIHZhciBxU29ydCA9IGZ1bmN0aW9uIHFTb3J0KGEsIGIpIHtcbiAgICAgIHJldHVybiBiLnJlcXMgLSBhLnJlcXM7XG4gICAgfTtcblxuICAgIHNlbGYubGF5ZXJzUXVldWUgPSBuZXcgaGVhcChxU29ydCk7XG4gICAgc2VsZi5zZXR1cERlcXVldWVpbmcoKTtcbiAgfTtcblxuICB2YXIgTFRDcCA9IExheWVyZWRUZXh0dXJlQ2FjaGUucHJvdG90eXBlO1xuICB2YXIgbGF5ZXJJZFBvb2wgPSAwO1xuICB2YXIgTUFYX0lOVCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG5cbiAgTFRDcC5tYWtlTGF5ZXIgPSBmdW5jdGlvbiAoYmIsIGx2bCkge1xuICAgIHZhciBzY2FsZSA9IE1hdGgucG93KDIsIGx2bCk7XG4gICAgdmFyIHcgPSBNYXRoLmNlaWwoYmIudyAqIHNjYWxlKTtcbiAgICB2YXIgaCA9IE1hdGguY2VpbChiYi5oICogc2NhbGUpO1xuICAgIHZhciBjYW52YXMgPSB0aGlzLnJlbmRlcmVyLm1ha2VPZmZzY3JlZW5DYW52YXModywgaCk7XG4gICAgdmFyIGxheWVyID0ge1xuICAgICAgaWQ6IGxheWVySWRQb29sID0gKytsYXllcklkUG9vbCAlIE1BWF9JTlQsXG4gICAgICBiYjogYmIsXG4gICAgICBsZXZlbDogbHZsLFxuICAgICAgd2lkdGg6IHcsXG4gICAgICBoZWlnaHQ6IGgsXG4gICAgICBjYW52YXM6IGNhbnZhcyxcbiAgICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLFxuICAgICAgZWxlczogW10sXG4gICAgICBlbGVzUXVldWU6IFtdLFxuICAgICAgcmVxczogMFxuICAgIH07IC8vIGxvZygnbWFrZSBsYXllciAlcyB3aXRoIHcgJXMgYW5kIGggJXMgYW5kIGx2bCAlcycsIGxheWVyLmlkLCBsYXllci53aWR0aCwgbGF5ZXIuaGVpZ2h0LCBsYXllci5sZXZlbCk7XG5cbiAgICB2YXIgY3h0ID0gbGF5ZXIuY29udGV4dDtcbiAgICB2YXIgZHggPSAtbGF5ZXIuYmIueDE7XG4gICAgdmFyIGR5ID0gLWxheWVyLmJiLnkxOyAvLyBkbyB0aGUgdHJhbnNmb3JtIG9uIGNyZWF0aW9uIHRvIHNhdmUgY3ljbGVzIChpdCdzIHRoZSBzYW1lIGZvciBhbGwgZWxlcylcblxuICAgIGN4dC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgIGN4dC50cmFuc2xhdGUoZHgsIGR5KTtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH07XG5cbiAgTFRDcC5nZXRMYXllcnMgPSBmdW5jdGlvbiAoZWxlcywgcHhSYXRpbywgbHZsKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByID0gc2VsZi5yZW5kZXJlcjtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciBmaXJzdEdldCA9IHNlbGYuZmlyc3RHZXQ7XG4gICAgc2VsZi5maXJzdEdldCA9IGZhbHNlOyAvLyBsb2coJy0tXFxuZ2V0IGxheWVycyB3aXRoICVzIGVsZXMnLCBlbGVzLmxlbmd0aCk7XG4gICAgLy9sb2cgZWxlcy5tYXAoZnVuY3Rpb24oZWxlKXsgcmV0dXJuIGVsZS5pZCgpIH0pICk7XG5cbiAgICBpZiAobHZsID09IG51bGwpIHtcbiAgICAgIGx2bCA9IE1hdGguY2VpbChsb2cyKHpvb20gKiBweFJhdGlvKSk7XG5cbiAgICAgIGlmIChsdmwgPCBtaW5MdmwpIHtcbiAgICAgICAgbHZsID0gbWluTHZsO1xuICAgICAgfSBlbHNlIGlmICh6b29tID49IG1heFpvb20gfHwgbHZsID4gbWF4THZsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGYudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobHZsLCBlbGVzKTtcbiAgICB2YXIgbGF5ZXJzQnlMdmwgPSBzZWxmLmxheWVyc0J5TGV2ZWw7XG4gICAgdmFyIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgICB2YXIgbGF5ZXJzID0gbGF5ZXJzQnlMdmxbbHZsXSA9IGxheWVyc0J5THZsW2x2bF0gfHwgW107XG4gICAgdmFyIGJiO1xuICAgIHZhciBsdmxDb21wbGV0ZSA9IHNlbGYubGV2ZWxJc0NvbXBsZXRlKGx2bCwgZWxlcyk7XG4gICAgdmFyIHRtcExheWVycztcblxuICAgIHZhciBjaGVja1RlbXBMZXZlbHMgPSBmdW5jdGlvbiBjaGVja1RlbXBMZXZlbHMoKSB7XG4gICAgICB2YXIgY2FuVXNlQXNUbXBMdmwgPSBmdW5jdGlvbiBjYW5Vc2VBc1RtcEx2bChsKSB7XG4gICAgICAgIHNlbGYudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobCwgZWxlcyk7XG5cbiAgICAgICAgaWYgKHNlbGYubGV2ZWxJc0NvbXBsZXRlKGwsIGVsZXMpKSB7XG4gICAgICAgICAgdG1wTGF5ZXJzID0gbGF5ZXJzQnlMdmxbbF07XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBjaGVja0x2bHMgPSBmdW5jdGlvbiBjaGVja0x2bHMoZGlyKSB7XG4gICAgICAgIGlmICh0bXBMYXllcnMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBsID0gbHZsICsgZGlyOyBtaW5MdmwgPD0gbCAmJiBsIDw9IG1heEx2bDsgbCArPSBkaXIpIHtcbiAgICAgICAgICBpZiAoY2FuVXNlQXNUbXBMdmwobCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY2hlY2tMdmxzKCsxKTtcbiAgICAgIGNoZWNrTHZscygtMSk7IC8vIHJlbW92ZSB0aGUgaW52YWxpZCBsYXllcnM7IHRoZXkgd2lsbCBiZSByZXBsYWNlZCBhcyBuZWVkZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvblxuXG4gICAgICBmb3IgKHZhciBpID0gbGF5ZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBsYXllciA9IGxheWVyc1tpXTtcblxuICAgICAgICBpZiAobGF5ZXIuaW52YWxpZCkge1xuICAgICAgICAgIHJlbW92ZUZyb21BcnJheShsYXllcnMsIGxheWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWx2bENvbXBsZXRlKSB7XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBsZXZlbCBpcyBpbmNvbXBsZXRlLCB0aGVuIHVzZSB0aGUgY2xvc2VzdCwgYmVzdCBxdWFsaXR5IGxheWVyc2V0IHRlbXBvcmFyaWx5XG4gICAgICAvLyBhbmQgbGF0ZXIgcXVldWUgdGhlIGN1cnJlbnQgbGF5ZXJzZXQgc28gd2UgY2FuIGdldCB0aGUgcHJvcGVyIHF1YWxpdHkgbGV2ZWwgc29vblxuICAgICAgY2hlY2tUZW1wTGV2ZWxzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvZygnbGV2ZWwgY29tcGxldGUsIHVzaW5nIGV4aXN0aW5nIGxheWVyc1xcbi0tJyk7XG4gICAgICByZXR1cm4gbGF5ZXJzO1xuICAgIH1cblxuICAgIHZhciBnZXRCYiA9IGZ1bmN0aW9uIGdldEJiKCkge1xuICAgICAgaWYgKCFiYikge1xuICAgICAgICBiYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHVwZGF0ZUJvdW5kaW5nQm94KGJiLCBlbGVzW2ldLmJvdW5kaW5nQm94KCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYjtcbiAgICB9O1xuXG4gICAgdmFyIG1ha2VMYXllciA9IGZ1bmN0aW9uIG1ha2VMYXllcihvcHRzKSB7XG4gICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgIHZhciBhZnRlciA9IG9wdHMuYWZ0ZXI7XG4gICAgICBnZXRCYigpO1xuICAgICAgdmFyIGFyZWEgPSBiYi53ICogc2NhbGUgKiAoYmIuaCAqIHNjYWxlKTtcblxuICAgICAgaWYgKGFyZWEgPiBtYXhMYXllckFyZWEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYXllciA9IHNlbGYubWFrZUxheWVyKGJiLCBsdmwpO1xuXG4gICAgICBpZiAoYWZ0ZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaW5kZXggPSBsYXllcnMuaW5kZXhPZihhZnRlcikgKyAxO1xuICAgICAgICBsYXllcnMuc3BsaWNlKGluZGV4LCAwLCBsYXllcik7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMuaW5zZXJ0ID09PSB1bmRlZmluZWQgfHwgb3B0cy5pbnNlcnQpIHtcbiAgICAgICAgLy8gbm8gYWZ0ZXIgc3BlY2lmaWVkID0+IGZpcnN0IGxheWVyIG1hZGUgc28gcHV0IGF0IHN0YXJ0XG4gICAgICAgIGxheWVycy51bnNoaWZ0KGxheWVyKTtcbiAgICAgIH0gLy8gaWYoIHRtcExheWVycyApe1xuICAgICAgLy9zZWxmLnF1ZXVlTGF5ZXIoIGxheWVyICk7XG4gICAgICAvLyB9XG5cblxuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH07XG5cbiAgICBpZiAoc2VsZi5za2lwcGluZyAmJiAhZmlyc3RHZXQpIHtcbiAgICAgIC8vIGxvZygnc2tpcCBsYXllcnMnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gbG9nKCdkbyBsYXllcnMnKTtcblxuXG4gICAgdmFyIGxheWVyID0gbnVsbDtcbiAgICB2YXIgbWF4RWxlc1BlckxheWVyID0gZWxlcy5sZW5ndGggLyBkZWZOdW1MYXllcnM7XG4gICAgdmFyIGFsbG93TGF6eVF1ZXVlaW5nID0gIWZpcnN0R2V0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBjYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyA9IHJzLmltZ0xheWVyQ2FjaGVzIHx8IHt9OyAvLyBsb2coJ2xvb2sgYXQgZWxlJywgZWxlLmlkKCkpO1xuXG4gICAgICB2YXIgZXhpc3RpbmdMYXllciA9IGNhY2hlc1tsdmxdO1xuXG4gICAgICBpZiAoZXhpc3RpbmdMYXllcikge1xuICAgICAgICAvLyByZXVzZSBsYXllciBmb3IgbGF0ZXIgZWxlc1xuICAgICAgICAvLyBsb2coJ3JldXNlIGxheWVyIGZvcicsIGVsZS5pZCgpKTtcbiAgICAgICAgbGF5ZXIgPSBleGlzdGluZ0xheWVyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsYXllciB8fCBsYXllci5lbGVzLmxlbmd0aCA+PSBtYXhFbGVzUGVyTGF5ZXIgfHwgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChsYXllci5iYiwgZWxlLmJvdW5kaW5nQm94KCkpKSB7XG4gICAgICAgIC8vIGxvZygnbWFrZSBuZXcgbGF5ZXIgZm9yIGVsZSAlcycsIGVsZS5pZCgpKTtcbiAgICAgICAgbGF5ZXIgPSBtYWtlTGF5ZXIoe1xuICAgICAgICAgIGluc2VydDogdHJ1ZSxcbiAgICAgICAgICBhZnRlcjogbGF5ZXJcbiAgICAgICAgfSk7IC8vIGlmIG5vdyBsYXllciBjYW4gYmUgYnVpbHQgdGhlbiB3ZSBjYW4ndCB1c2UgbGF5ZXJzIGF0IHRoaXMgbGV2ZWxcblxuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gLy8gbG9nKCduZXcgbGF5ZXIgd2l0aCBpZCAlcycsIGxheWVyLmlkKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAodG1wTGF5ZXJzIHx8IGFsbG93TGF6eVF1ZXVlaW5nKSB7XG4gICAgICAgIC8vIGxvZygncXVldWUgZWxlICVzIGluIGxheWVyICVzJywgZWxlLmlkKCksIGxheWVyLmlkKTtcbiAgICAgICAgc2VsZi5xdWV1ZUxheWVyKGxheWVyLCBlbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbG9nKCdkcmF3IGVsZSAlcyBpbiBsYXllciAlcycsIGVsZS5pZCgpLCBsYXllci5pZCk7XG4gICAgICAgIHNlbGYuZHJhd0VsZUluTGF5ZXIobGF5ZXIsIGVsZSwgbHZsLCBweFJhdGlvKTtcbiAgICAgIH1cblxuICAgICAgbGF5ZXIuZWxlcy5wdXNoKGVsZSk7XG4gICAgICBjYWNoZXNbbHZsXSA9IGxheWVyO1xuICAgIH0gLy8gbG9nKCctLScpO1xuXG5cbiAgICBpZiAodG1wTGF5ZXJzKSB7XG4gICAgICAvLyB0aGVuIHdlIG9ubHkgcXVldWVkIHRoZSBjdXJyZW50IGxheWVyc2V0IGFuZCBjYW4ndCBkcmF3IGl0IHlldFxuICAgICAgcmV0dXJuIHRtcExheWVycztcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dMYXp5UXVldWVpbmcpIHtcbiAgICAgIC8vIGxvZygnbGF6eSBxdWV1ZSBsZXZlbCcsIGx2bCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9OyAvLyBhIGxheWVyIG1heSB3YW50IHRvIHVzZSBhbiBlbGUgY2FjaGUgb2YgYSBoaWdoZXIgbGV2ZWwgdG8gYXZvaWQgYmx1cnJpbmVzc1xuICAvLyBzbyB0aGUgbGF5ZXIgbGV2ZWwgbWlnaHQgbm90IGVxdWFsIHRoZSBlbGUgbGV2ZWxcblxuXG4gIExUQ3AuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsID0gZnVuY3Rpb24gKGx2bCwgcHhSYXRpbykge1xuICAgIHJldHVybiBsdmw7XG4gIH07XG5cbiAgTFRDcC5kcmF3RWxlSW5MYXllciA9IGZ1bmN0aW9uIChsYXllciwgZWxlLCBsdmwsIHB4UmF0aW8pIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBjb250ZXh0ID0gbGF5ZXIuY29udGV4dDtcbiAgICB2YXIgYmIgPSBlbGUuYm91bmRpbmdCb3goKTtcblxuICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDAgfHwgIWVsZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsdmwgPSBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsdmwsIHB4UmF0aW8pO1xuXG4gICAge1xuICAgICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnQoY29udGV4dCwgZWxlLCBudWxsLCBudWxsLCBsdmwsIHVzZUhpZ2hRdWFsaXR5RWxlVHhyUmVxcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIExUQ3AubGV2ZWxJc0NvbXBsZXRlID0gZnVuY3Rpb24gKGx2bCwgZWxlcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbGF5ZXJzID0gc2VsZi5sYXllcnNCeUxldmVsW2x2bF07XG5cbiAgICBpZiAoIWxheWVycyB8fCBsYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG51bUVsZXNJbkxheWVycyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldOyAvLyBpZiB0aGVyZSBhcmUgYW55IGVsZXMgbmVlZGVkIHRvIGJlIGRyYXduIHlldCwgdGhlIGxldmVsIGlzIG5vdCBjb21wbGV0ZVxuXG4gICAgICBpZiAobGF5ZXIucmVxcyA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBpZiB0aGUgbGF5ZXIgaXMgaW52YWxpZCwgdGhlIGxldmVsIGlzIG5vdCBjb21wbGV0ZVxuXG5cbiAgICAgIGlmIChsYXllci5pbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbnVtRWxlc0luTGF5ZXJzICs9IGxheWVyLmVsZXMubGVuZ3RoO1xuICAgIH0gLy8gd2Ugc2hvdWxkIGhhdmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGVsZXMgcGFzc2VkIGluIHRvIGJlIGNvbXBsZXRlXG5cblxuICAgIGlmIChudW1FbGVzSW5MYXllcnMgIT09IGVsZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgTFRDcC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyA9IGZ1bmN0aW9uIChsdmwsIGVsZXMpIHtcbiAgICB2YXIgbGF5ZXJzID0gdGhpcy5sYXllcnNCeUxldmVsW2x2bF07XG5cbiAgICBpZiAoIWxheWVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaWYgaW4gYSBsYXllciB0aGUgZWxlcyBhcmUgbm90IGluIHRoZSBzYW1lIG9yZGVyLCB0aGVuIHRoZSBsYXllciBpcyBpbnZhbGlkXG4gICAgLy8gKGkuZS4gdGhlcmUgaXMgYW4gZWxlIGluIGJldHdlZW4gdGhlIGVsZXMgaW4gdGhlIGxheWVyKVxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldO1xuICAgICAgdmFyIG9mZnNldCA9IC0xOyAvLyBmaW5kIHRoZSBvZmZzZXRcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChsYXllci5lbGVzWzBdID09PSBlbGVzW2pdKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gajtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAvLyB0aGVuIHRoZSBsYXllciBoYXMgbm9uZXhpc3RlbnQgZWxlbWVudHMgYW5kIGlzIGludmFsaWRcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gdGhlIGVsZXMgaW4gdGhlIGxheWVyIG11c3QgYmUgaW4gdGhlIHNhbWUgY29udGludW91cyBvcmRlciwgZWxzZSB0aGUgbGF5ZXIgaXMgaW52YWxpZFxuXG5cbiAgICAgIHZhciBvID0gb2Zmc2V0O1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxheWVyLmVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGxheWVyLmVsZXNbal0gIT09IGVsZXNbbyArIGpdKSB7XG4gICAgICAgICAgLy8gbG9nKCdpbnZhbGlkYXRlIGJhc2VkIG9uIG9yZGVyaW5nJywgbGF5ZXIuaWQpO1xuICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBMVENwLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMgPSBmdW5jdGlvbiAoZWxlcywgdXBkYXRlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBpc0VsZXMgPSBlbGVtZW50KGVsZXNbMF0pOyAvLyBjb2xsZWN0IHVkcGF0ZWQgZWxlbWVudHMgKGNhc2NhZGVkIGZyb20gdGhlIGxheWVycykgYW5kIHVwZGF0ZSBlYWNoXG4gICAgLy8gbGF5ZXIgaXRzZWxmIGFsb25nIHRoZSB3YXlcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcSA9IGlzRWxlcyA/IG51bGwgOiBlbGVzW2ldO1xuICAgICAgdmFyIGVsZSA9IGlzRWxlcyA/IGVsZXNbaV0gOiBlbGVzW2ldLmVsZTtcbiAgICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBjYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyA9IHJzLmltZ0xheWVyQ2FjaGVzIHx8IHt9O1xuXG4gICAgICBmb3IgKHZhciBsID0gbWluTHZsOyBsIDw9IG1heEx2bDsgbCsrKSB7XG4gICAgICAgIHZhciBsYXllciA9IGNhY2hlc1tsXTtcblxuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gaWYgdXBkYXRlIGlzIGEgcmVxdWVzdCBmcm9tIHRoZSBlbGUgY2FjaGUsIHRoZW4gaXQgYWZmZWN0cyBvbmx5XG4gICAgICAgIC8vIHRoZSBtYXRjaGluZyBsZXZlbFxuXG5cbiAgICAgICAgaWYgKHJlcSAmJiBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsYXllci5sZXZlbCkgIT09IHJlcS5sZXZlbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlKGxheWVyLCBlbGUsIHJlcSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIExUQ3AuaGF2ZUxheWVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGhhdmVMYXllcnMgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGwgPSBtaW5Mdmw7IGwgPD0gbWF4THZsOyBsKyspIHtcbiAgICAgIHZhciBsYXllcnMgPSBzZWxmLmxheWVyc0J5TGV2ZWxbbF07XG5cbiAgICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGF2ZUxheWVycyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXZlTGF5ZXJzO1xuICB9O1xuXG4gIExUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmxhc3RJbnZhbGlkYXRpb25UaW1lID0gcGVyZm9ybWFuY2VOb3coKTsgLy8gbG9nKCd1cGRhdGUgaW52YWxpZGF0ZSBsYXllciB0aW1lIGZyb20gZWxlcycpO1xuXG4gICAgaWYgKGVsZXMubGVuZ3RoID09PSAwIHx8ICFzZWxmLmhhdmVMYXllcnMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlRWxlbWVudHNJbkxheWVycyhlbGVzLCBmdW5jdGlvbiBpbnZhbEFzc29jTGF5ZXJzKGxheWVyLCBlbGUsIHJlcSkge1xuICAgICAgc2VsZi5pbnZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH0pO1xuICB9O1xuXG4gIExUQ3AuaW52YWxpZGF0ZUxheWVyID0gZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgLy8gbG9nKCd1cGRhdGUgaW52YWxpZGF0ZSBsYXllciB0aW1lJyk7XG4gICAgdGhpcy5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG5cbiAgICBpZiAobGF5ZXIuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F2ZSBjeWNsZXNcblxuXG4gICAgdmFyIGx2bCA9IGxheWVyLmxldmVsO1xuICAgIHZhciBlbGVzID0gbGF5ZXIuZWxlcztcbiAgICB2YXIgbGF5ZXJzID0gdGhpcy5sYXllcnNCeUxldmVsW2x2bF07IC8vIGxvZygnaW52YWxpZGF0ZSBsYXllcicsIGxheWVyLmlkICk7XG5cbiAgICByZW1vdmVGcm9tQXJyYXkobGF5ZXJzLCBsYXllcik7IC8vIGxheWVyLmVsZXMgPSBbXTtcblxuICAgIGxheWVyLmVsZXNRdWV1ZSA9IFtdO1xuICAgIGxheWVyLmludmFsaWQgPSB0cnVlO1xuXG4gICAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgICBsYXllci5yZXBsYWNlbWVudC5pbnZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWNoZXMgPSBlbGVzW2ldLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO1xuXG4gICAgICBpZiAoY2FjaGVzKSB7XG4gICAgICAgIGNhY2hlc1tsdmxdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgTFRDcC5yZWZpbmVFbGVtZW50VGV4dHVyZXMgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgIHZhciBzZWxmID0gdGhpczsgLy8gbG9nKCdyZWZpbmUnLCBlbGVzLmxlbmd0aCk7XG5cbiAgICBzZWxmLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoZWxlcywgZnVuY3Rpb24gcmVmaW5lRWFjaEVsZShsYXllciwgZWxlLCByZXEpIHtcbiAgICAgIHZhciByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQ7XG5cbiAgICAgIGlmICghckx5cikge1xuICAgICAgICByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQgPSBzZWxmLm1ha2VMYXllcihsYXllci5iYiwgbGF5ZXIubGV2ZWwpO1xuICAgICAgICByTHlyLnJlcGxhY2VzID0gbGF5ZXI7XG4gICAgICAgIHJMeXIuZWxlcyA9IGxheWVyLmVsZXM7IC8vIGxvZygnbWFrZSByZXBsYWNlbWVudCBsYXllciAlcyBmb3IgJXMgd2l0aCBsZXZlbCAlcycsIHJMeXIuaWQsIGxheWVyLmlkLCByTHlyLmxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyTHlyLnJlcXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByTHlyLmVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzZWxmLnF1ZXVlTGF5ZXIockx5ciwgckx5ci5lbGVzW2ldKTtcbiAgICAgICAgfSAvLyBsb2coJ3F1ZXVlIHJlcGxhY2VtZW50IGxheWVyIHJlZmluZW1lbnQnLCByTHlyLmlkKTtcblxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIExUQ3AuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50ID0gZnVuY3Rpb24gKGVsZSkge1xuXG4gICAgdGhpcy5lbGVUeHJEZXFzLm1lcmdlKGVsZSk7XG4gICAgdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCk7XG4gIH07XG5cbiAgTFRDcC5xdWV1ZUxheWVyID0gZnVuY3Rpb24gKGxheWVyLCBlbGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHEgPSBzZWxmLmxheWVyc1F1ZXVlO1xuICAgIHZhciBlbGVzUSA9IGxheWVyLmVsZXNRdWV1ZTtcbiAgICB2YXIgaGFzSWQgPSBlbGVzUS5oYXNJZCA9IGVsZXNRLmhhc0lkIHx8IHt9OyAvLyBpZiBhIGxheWVyIGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkLCBxdWV1aW5nIGlzIGEgd2FzdGUgb2YgdGltZVxuXG4gICAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKGhhc0lkW2VsZS5pZCgpXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsZXNRLnB1c2goZWxlKTtcbiAgICAgIGhhc0lkW2VsZS5pZCgpXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyLnJlcXMpIHtcbiAgICAgIGxheWVyLnJlcXMrKztcbiAgICAgIHEudXBkYXRlSXRlbShsYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyLnJlcXMgPSAxO1xuICAgICAgcS5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH07XG5cbiAgTFRDcC5kZXF1ZXVlID0gZnVuY3Rpb24gKHB4UmF0aW8pIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHEgPSBzZWxmLmxheWVyc1F1ZXVlO1xuICAgIHZhciBkZXFkID0gW107XG4gICAgdmFyIGVsZURlcXMgPSAwO1xuXG4gICAgd2hpbGUgKGVsZURlcXMgPCBtYXhEZXFTaXplKSB7XG4gICAgICBpZiAocS5zaXplKCkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYXllciA9IHEucGVlaygpOyAvLyBpZiBhIGxheWVyIGhhcyBiZWVuIG9yIHdpbGwgYmUgcmVwbGFjZWQsIHRoZW4gZG9uJ3Qgd2FzdGUgdGltZSB3aXRoIGl0XG5cbiAgICAgIGlmIChsYXllci5yZXBsYWNlbWVudCkge1xuICAgICAgICAvLyBsb2coJ2xheWVyICVzIGluIHF1ZXVlIHNraXBwZWQgYi9jIGl0IGFscmVhZHkgaGFzIGEgcmVwbGFjZW1lbnQnLCBsYXllci5pZCk7XG4gICAgICAgIHEucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBpZiB0aGlzIGlzIGEgcmVwbGFjZW1lbnQgbGF5ZXIgdGhhdCBoYXMgYmVlbiBzdXBlcmNlZGVkLCB0aGVuIGZvcmdldCBpdFxuXG5cbiAgICAgIGlmIChsYXllci5yZXBsYWNlcyAmJiBsYXllciAhPT0gbGF5ZXIucmVwbGFjZXMucmVwbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gbG9nKCdsYXllciBpcyBubyBsb25nZXIgdGhlIG1vc3QgdXB0b2RhdGUgcmVwbGFjZW1lbnQ7IGRlcXVldWVkJywgbGF5ZXIuaWQpXG4gICAgICAgIHEucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobGF5ZXIuaW52YWxpZCkge1xuICAgICAgICAvLyBsb2coJ3JlcGxhY2VtZW50IGxheWVyICVzIGlzIGludmFsaWQ7IGRlcXVldWVkJywgbGF5ZXIuaWQpO1xuICAgICAgICBxLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZSA9IGxheWVyLmVsZXNRdWV1ZS5zaGlmdCgpO1xuXG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIC8vIGxvZygnZGVxdWV1ZSBsYXllciAlcycsIGxheWVyLmlkKTtcbiAgICAgICAgc2VsZi5kcmF3RWxlSW5MYXllcihsYXllciwgZWxlLCBsYXllci5sZXZlbCwgcHhSYXRpbyk7XG4gICAgICAgIGVsZURlcXMrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlcWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgb25seSBvbmUgZW50cnkgaW4gZGVxZCB0byBxdWV1ZSByZWRyYXdpbmcgZXRjXG4gICAgICAgIGRlcWQucHVzaCh0cnVlKTtcbiAgICAgIH0gLy8gaWYgdGhlIGxheWVyIGhhcyBhbGwgaXRzIGVsZXMgZG9uZSwgdGhlbiByZW1vdmUgZnJvbSB0aGUgcXVldWVcblxuXG4gICAgICBpZiAobGF5ZXIuZWxlc1F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBxLnBvcCgpO1xuICAgICAgICBsYXllci5yZXFzID0gMDsgLy8gbG9nKCdkZXF1ZXVlIG9mIGxheWVyICVzIGNvbXBsZXRlJywgbGF5ZXIuaWQpO1xuICAgICAgICAvLyB3aGVuIGEgcmVwbGFjZW1lbnQgbGF5ZXIgaXMgZGVxdWV1ZWQsIGl0IHJlcGxhY2VzIHRoZSBvbGQgbGF5ZXIgaW4gdGhlIGxldmVsXG5cbiAgICAgICAgaWYgKGxheWVyLnJlcGxhY2VzKSB7XG4gICAgICAgICAgc2VsZi5hcHBseUxheWVyUmVwbGFjZW1lbnQobGF5ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5yZXF1ZXN0UmVkcmF3KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcWQ7XG4gIH07XG5cbiAgTFRDcC5hcHBseUxheWVyUmVwbGFjZW1lbnQgPSBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGxheWVyc0luTGV2ZWwgPSBzZWxmLmxheWVyc0J5TGV2ZWxbbGF5ZXIubGV2ZWxdO1xuICAgIHZhciByZXBsYWNlZCA9IGxheWVyLnJlcGxhY2VzO1xuICAgIHZhciBpbmRleCA9IGxheWVyc0luTGV2ZWwuaW5kZXhPZihyZXBsYWNlZCk7IC8vIGlmIHRoZSByZXBsYWNlZCBsYXllciBpcyBub3QgaW4gdGhlIGFjdGl2ZSBsaXN0IGZvciB0aGUgbGV2ZWwsIHRoZW4gcmVwbGFjaW5nXG4gICAgLy8gcmVmcyB3b3VsZCBiZSBhIG1pc3Rha2UgKGkuZS4gb3ZlcndyaXRpbmcgdGhlIHRydWUgYWN0aXZlIGxheWVyKVxuXG4gICAgaWYgKGluZGV4IDwgMCB8fCByZXBsYWNlZC5pbnZhbGlkKSB7XG4gICAgICAvLyBsb2coJ3JlcGxhY2VtZW50IGxheWVyIHdvdWxkIGhhdmUgbm8gZWZmZWN0JywgbGF5ZXIuaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxheWVyc0luTGV2ZWxbaW5kZXhdID0gbGF5ZXI7IC8vIHJlcGxhY2UgbGV2ZWwgcmVmXG4gICAgLy8gcmVwbGFjZSByZWZzIGluIGVsZXNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXIuZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9wID0gbGF5ZXIuZWxlc1tpXS5fcHJpdmF0ZTtcbiAgICAgIHZhciBjYWNoZSA9IF9wLmltZ0xheWVyQ2FjaGVzID0gX3AuaW1nTGF5ZXJDYWNoZXMgfHwge307XG5cbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjYWNoZVtsYXllci5sZXZlbF0gPSBsYXllcjtcbiAgICAgIH1cbiAgICB9IC8vIGxvZygnYXBwbHkgcmVwbGFjZW1lbnQgbGF5ZXIgJXMgb3ZlciAlcycsIGxheWVyLmlkLCByZXBsYWNlZC5pZCk7XG5cblxuICAgIHNlbGYucmVxdWVzdFJlZHJhdygpO1xuICB9O1xuXG4gIExUQ3AucmVxdWVzdFJlZHJhdyA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgIHZhciByID0gdGhpcy5yZW5kZXJlcjtcbiAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICByLnJlZHJhdygpO1xuICB9LCAxMDApO1xuICBMVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgICBkZXFSZWRyYXdUaHJlc2hvbGQ6IGRlcVJlZHJhd1RocmVzaG9sZCxcbiAgICBkZXFDb3N0OiBkZXFDb3N0LFxuICAgIGRlcUF2Z0Nvc3Q6IGRlcUF2Z0Nvc3QsXG4gICAgZGVxTm9EcmF3Q29zdDogZGVxTm9EcmF3Q29zdCxcbiAgICBkZXFGYXN0Q29zdDogZGVxRmFzdENvc3QsXG4gICAgZGVxOiBmdW5jdGlvbiBkZXEoc2VsZiwgcHhSYXRpbykge1xuICAgICAgcmV0dXJuIHNlbGYuZGVxdWV1ZShweFJhdGlvKTtcbiAgICB9LFxuICAgIG9uRGVxZDogbm9vcCQxLFxuICAgIHNob3VsZFJlZHJhdzogdHJ1ZWlmeSxcbiAgICBwcmlvcml0eTogZnVuY3Rpb24gcHJpb3JpdHkoc2VsZikge1xuICAgICAgcmV0dXJuIHNlbGYucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXE7XG4gICAgfVxuICB9KTtcblxuICB2YXIgQ1JwJGEgPSB7fTtcbiAgdmFyIGltcGw7XG5cbiAgZnVuY3Rpb24gcG9seWdvbihjb250ZXh0LCBwb2ludHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHB0ID0gcG9pbnRzW2ldO1xuICAgICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpYW5nbGVCYWNrY3VydmUoY29udGV4dCwgcG9pbnRzLCBjb250cm9sUG9pbnQpIHtcbiAgICB2YXIgZmlyc3RQdDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHQgPSBwb2ludHNbaV07XG5cbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGZpcnN0UHQgPSBwdDtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgZmlyc3RQdC54LCBmaXJzdFB0LnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJpYW5nbGVUZWUoY29udGV4dCwgdHJpYW5nbGVQb2ludHMsIHRlZVBvaW50cykge1xuICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB9XG5cbiAgICB2YXIgdHJpUHRzID0gdHJpYW5nbGVQb2ludHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaVB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHB0ID0gdHJpUHRzW2ldO1xuICAgICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgfVxuXG4gICAgdmFyIHRlZVB0cyA9IHRlZVBvaW50cztcbiAgICB2YXIgZmlyc3RUZWVQdCA9IHRlZVBvaW50c1swXTtcbiAgICBjb250ZXh0Lm1vdmVUbyhmaXJzdFRlZVB0LngsIGZpcnN0VGVlUHQueSk7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRlZVB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHB0ID0gdGVlUHRzW2ldO1xuICAgICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuY2xvc2VQYXRoKSB7XG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNpcmNsZVRyaWFuZ2xlKGNvbnRleHQsIHRyaWFuZ2xlUG9pbnRzLCByeCwgcnksIHIpIHtcbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5hcmMocngsIHJ5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xuICAgIHZhciB0cmlQdHMgPSB0cmlhbmdsZVBvaW50cztcbiAgICB2YXIgZmlyc3RUclB0ID0gdHJpUHRzWzBdO1xuICAgIGNvbnRleHQubW92ZVRvKGZpcnN0VHJQdC54LCBmaXJzdFRyUHQueSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaVB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHB0ID0gdHJpUHRzW2ldO1xuICAgICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuY2xvc2VQYXRoKSB7XG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNpcmNsZShjb250ZXh0LCByeCwgcnksIHIpIHtcbiAgICBjb250ZXh0LmFyYyhyeCwgcnksIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG4gIH1cblxuICBDUnAkYS5hcnJvd1NoYXBlSW1wbCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIChpbXBsIHx8IChpbXBsID0ge1xuICAgICAgJ3BvbHlnb24nOiBwb2x5Z29uLFxuICAgICAgJ3RyaWFuZ2xlLWJhY2tjdXJ2ZSc6IHRyaWFuZ2xlQmFja2N1cnZlLFxuICAgICAgJ3RyaWFuZ2xlLXRlZSc6IHRyaWFuZ2xlVGVlLFxuICAgICAgJ2NpcmNsZS10cmlhbmdsZSc6IGNpcmNsZVRyaWFuZ2xlLFxuICAgICAgJ3RyaWFuZ2xlLWNyb3NzJzogdHJpYW5nbGVUZWUsXG4gICAgICAnY2lyY2xlJzogY2lyY2xlXG4gICAgfSkpW25hbWVdO1xuICB9O1xuXG4gIHZhciBDUnAkOSA9IHt9O1xuXG4gIENScCQ5LmRyYXdFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgc2hvd0xhYmVsLCBzaG93T3ZlcmxheSwgc2hvd09wYWNpdHkpIHtcbiAgICB2YXIgciA9IHRoaXM7XG5cbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICByLmRyYXdOb2RlKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgc2hvd0xhYmVsLCBzaG93T3ZlcmxheSwgc2hvd09wYWNpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdFZGdlKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgc2hvd0xhYmVsLCBzaG93T3ZlcmxheSwgc2hvd09wYWNpdHkpO1xuICAgIH1cbiAgfTtcblxuICBDUnAkOS5kcmF3RWxlbWVudE92ZXJsYXkgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuXG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgci5kcmF3Tm9kZU92ZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3RWRnZU92ZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDkuZHJhd0VsZW1lbnRVbmRlcmxheSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgICB2YXIgciA9IHRoaXM7XG5cbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICByLmRyYXdOb2RlVW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3RWRnZVVuZGVybGF5KGNvbnRleHQsIGVsZSk7XG4gICAgfVxuICB9O1xuXG4gIENScCQ5LmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbiA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGVsZVR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0Um90YXRpb24sIGdldE9wYWNpdHkpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGJiID0gZWxlVHhyQ2FjaGUuZ2V0Qm91bmRpbmdCb3goZWxlKTtcblxuICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGlnbm9yZSB6ZXJvIHNpemUgY2FzZVxuXG5cbiAgICB2YXIgZWxlQ2FjaGUgPSBlbGVUeHJDYWNoZS5nZXRFbGVtZW50KGVsZSwgYmIsIHB4UmF0aW8sIGx2bCwgcmVhc29uKTtcblxuICAgIGlmIChlbGVDYWNoZSAhPSBudWxsKSB7XG4gICAgICB2YXIgb3BhY2l0eSA9IGdldE9wYWNpdHkociwgZWxlKTtcblxuICAgICAgaWYgKG9wYWNpdHkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGhldGEgPSBnZXRSb3RhdGlvbihyLCBlbGUpO1xuICAgICAgdmFyIHgxID0gYmIueDEsXG4gICAgICAgICAgeTEgPSBiYi55MSxcbiAgICAgICAgICB3ID0gYmIudyxcbiAgICAgICAgICBoID0gYmIuaDtcbiAgICAgIHZhciB4LCB5LCBzeCwgc3ksIHNtb290aDtcblxuICAgICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICAgIHZhciByb3RQdCA9IGVsZVR4ckNhY2hlLmdldFJvdGF0aW9uUG9pbnQoZWxlKTtcbiAgICAgICAgc3ggPSByb3RQdC54O1xuICAgICAgICBzeSA9IHJvdFB0Lnk7XG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHN4LCBzeSk7XG4gICAgICAgIGNvbnRleHQucm90YXRlKHRoZXRhKTtcbiAgICAgICAgc21vb3RoID0gci5nZXRJbWdTbW9vdGhpbmcoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFzbW9vdGgpIHtcbiAgICAgICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvZmYgPSBlbGVUeHJDYWNoZS5nZXRSb3RhdGlvbk9mZnNldChlbGUpO1xuICAgICAgICB4ID0gb2ZmLng7XG4gICAgICAgIHkgPSBvZmYueTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB4MTtcbiAgICAgICAgeSA9IHkxO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2xkR2xvYmFsQWxwaGE7XG5cbiAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhICogb3BhY2l0eTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoZWxlQ2FjaGUudGV4dHVyZS5jYW52YXMsIGVsZUNhY2hlLngsIDAsIGVsZUNhY2hlLndpZHRoLCBlbGVDYWNoZS5oZWlnaHQsIHgsIHksIHcsIGgpO1xuXG4gICAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgICBjb250ZXh0LnJvdGF0ZSgtdGhldGEpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc3gsIC1zeSk7XG5cbiAgICAgICAgaWYgKCFzbW9vdGgpIHtcbiAgICAgICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxlVHhyQ2FjaGUuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTsgLy8gZGlyZWN0IGRyYXcgZmFsbGJhY2tcbiAgICB9XG4gIH07XG5cbiAgdmFyIGdldFplcm9Sb3RhdGlvbiA9IGZ1bmN0aW9uIGdldFplcm9Sb3RhdGlvbigpIHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICB2YXIgZ2V0TGFiZWxSb3RhdGlvbiA9IGZ1bmN0aW9uIGdldExhYmVsUm90YXRpb24ociwgZWxlKSB7XG4gICAgcmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGVsZSwgbnVsbCk7XG4gIH07XG5cbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICAgIHJldHVybiByLmdldFRleHRBbmdsZShlbGUsICdzb3VyY2UnKTtcbiAgfTtcblxuICB2YXIgZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbiA9IGZ1bmN0aW9uIGdldFRhcmdldExhYmVsUm90YXRpb24ociwgZWxlKSB7XG4gICAgcmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGVsZSwgJ3RhcmdldCcpO1xuICB9O1xuXG4gIHZhciBnZXRPcGFjaXR5ID0gZnVuY3Rpb24gZ2V0T3BhY2l0eShyLCBlbGUpIHtcbiAgICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKTtcbiAgfTtcblxuICB2YXIgZ2V0VGV4dE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRUZXh0T3BhY2l0eShlLCBlbGUpIHtcbiAgICByZXR1cm4gZWxlLnBzdHlsZSgndGV4dC1vcGFjaXR5JykucGZWYWx1ZSAqIGVsZS5lZmZlY3RpdmVPcGFjaXR5KCk7XG4gIH07XG5cbiAgQ1JwJDkuZHJhd0NhY2hlZEVsZW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBweFJhdGlvLCBleHRlbnQsIGx2bCwgcmVxdWVzdEhpZ2hRdWFsaXR5KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBfciRkYXRhID0gci5kYXRhLFxuICAgICAgICBlbGVUeHJDYWNoZSA9IF9yJGRhdGEuZWxlVHhyQ2FjaGUsXG4gICAgICAgIGxibFR4ckNhY2hlID0gX3IkZGF0YS5sYmxUeHJDYWNoZSxcbiAgICAgICAgc2xiVHhyQ2FjaGUgPSBfciRkYXRhLnNsYlR4ckNhY2hlLFxuICAgICAgICB0bGJUeHJDYWNoZSA9IF9yJGRhdGEudGxiVHhyQ2FjaGU7XG4gICAgdmFyIGJiID0gZWxlLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHJlYXNvbiA9IHJlcXVlc3RIaWdoUXVhbGl0eSA9PT0gdHJ1ZSA/IGVsZVR4ckNhY2hlLnJlYXNvbnMuaGlnaFF1YWxpdHkgOiBudWxsO1xuXG4gICAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZXh0ZW50IHx8IGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYmIsIGV4dGVudCkpIHtcbiAgICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG5cbiAgICAgIHZhciBiYWRMaW5lID0gZWxlLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO1xuXG4gICAgICByLmRyYXdFbGVtZW50VW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgZWxlVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRaZXJvUm90YXRpb24sIGdldE9wYWNpdHkpO1xuXG4gICAgICBpZiAoIWlzRWRnZSB8fCAhYmFkTGluZSkge1xuICAgICAgICByLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbihjb250ZXh0LCBlbGUsIGxibFR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0TGFiZWxSb3RhdGlvbiwgZ2V0VGV4dE9wYWNpdHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNFZGdlICYmICFiYWRMaW5lKSB7XG4gICAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgc2xiVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uLCBnZXRUZXh0T3BhY2l0eSk7XG4gICAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgdGxiVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uLCBnZXRUZXh0T3BhY2l0eSk7XG4gICAgICB9XG5cbiAgICAgIHIuZHJhd0VsZW1lbnRPdmVybGF5KGNvbnRleHQsIGVsZSk7XG4gICAgfVxuICB9O1xuXG4gIENScCQ5LmRyYXdFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDkuZHJhd0NhY2hlZEVsZW1lbnRzID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZXMsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIHZhciByID0gdGhpcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDkuZHJhd0NhY2hlZE5vZGVzID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZXMsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIHZhciByID0gdGhpcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG5cbiAgICAgIGlmICghZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDkuZHJhd0xheWVyZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgdmFyIGxheWVycyA9IHIuZGF0YS5seXJUeHJDYWNoZS5nZXRMYXllcnMoZWxlcywgcHhSYXRpbyk7XG5cbiAgICBpZiAobGF5ZXJzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICAgIHZhciBiYiA9IGxheWVyLmJiO1xuXG4gICAgICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGxheWVyLmNhbnZhcywgYmIueDEsIGJiLnkxLCBiYi53LCBiYi5oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIG9uIHBsYWluIGNhY2hpbmcgaWYgbm8gbGF5ZXJzXG4gICAgICByLmRyYXdDYWNoZWRFbGVtZW50cyhjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpO1xuICAgIH1cbiAgfTtcblxuICAvKiBnbG9iYWwgUGF0aDJEICovXG4gIHZhciBDUnAkOCA9IHt9O1xuXG4gIENScCQ4LmRyYXdFZGdlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVkZ2UsIHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICAgIHZhciBzaG91bGREcmF3T3ZlcmxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgICB2YXIgc2hvdWxkRHJhd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG5cbiAgICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBpZiBiZXppZXIgY3RybCBwdHMgY2FuIG5vdCBiZSBjYWxjdWxhdGVkLCB0aGVuIGRpZVxuXG5cbiAgICBpZiAocnMuYmFkTGluZSB8fCBycy5hbGxwdHMgPT0gbnVsbCB8fCBpc05hTihycy5hbGxwdHNbMF0pKSB7XG4gICAgICAvLyBpc05hTiBpbiBjYXNlIGVkZ2UgaXMgaW1wb3NzaWJsZSBhbmQgYnJvd3NlciBidWdzIChlLmcuIHNhZmFyaSlcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYmI7XG5cbiAgICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoLWJiLngxLCAtYmIueTEpO1xuICAgIH1cblxuICAgIHZhciBvcGFjaXR5ID0gc2hvdWxkRHJhd09wYWNpdHkgPyBlZGdlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgICB2YXIgbGluZU9wYWNpdHkgPSBzaG91bGREcmF3T3BhY2l0eSA/IGVkZ2UucHN0eWxlKCdsaW5lLW9wYWNpdHknKS52YWx1ZSA6IDE7XG4gICAgdmFyIGN1cnZlU3R5bGUgPSBlZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgICB2YXIgbGluZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2xpbmUtc3R5bGUnKS52YWx1ZTtcbiAgICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgbGluZUNhcCA9IGVkZ2UucHN0eWxlKCdsaW5lLWNhcCcpLnZhbHVlO1xuICAgIHZhciBlZmZlY3RpdmVMaW5lT3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTsgLy8gc2VwYXJhdGUgYXJyb3cgb3BhY2l0eSB3b3VsZCByZXF1aXJlIGFycm93LW9wYWNpdHkgcHJvcGVydHlcblxuICAgIHZhciBlZmZlY3RpdmVBcnJvd09wYWNpdHkgPSBvcGFjaXR5ICogbGluZU9wYWNpdHk7XG5cbiAgICB2YXIgZHJhd0xpbmUgPSBmdW5jdGlvbiBkcmF3TGluZSgpIHtcbiAgICAgIHZhciBzdHJva2VPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlZmZlY3RpdmVMaW5lT3BhY2l0eTtcblxuICAgICAgaWYgKGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodC10cmlhbmdsZScpIHtcbiAgICAgICAgci5lbGVTdHJva2VTdHlsZShjb250ZXh0LCBlZGdlLCBzdHJva2VPcGFjaXR5KTtcbiAgICAgICAgci5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlZGdlLCBjb250ZXh0LCBycy5hbGxwdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBlZGdlV2lkdGg7XG4gICAgICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgICAgIHIuZWxlU3Ryb2tlU3R5bGUoY29udGV4dCwgZWRnZSwgc3Ryb2tlT3BhY2l0eSk7XG4gICAgICAgIHIuZHJhd0VkZ2VQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cywgbGluZVN0eWxlKTtcbiAgICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgICBpZiAoIXNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgci5kcmF3RWRnZU92ZXJsYXkoY29udGV4dCwgZWRnZSk7XG4gICAgfTtcblxuICAgIHZhciBkcmF3VW5kZXJsYXkgPSBmdW5jdGlvbiBkcmF3VW5kZXJsYXkoKSB7XG4gICAgICBpZiAoIXNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgci5kcmF3RWRnZVVuZGVybGF5KGNvbnRleHQsIGVkZ2UpO1xuICAgIH07XG5cbiAgICB2YXIgZHJhd0Fycm93cyA9IGZ1bmN0aW9uIGRyYXdBcnJvd3MoKSB7XG4gICAgICB2YXIgYXJyb3dPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlZmZlY3RpdmVBcnJvd09wYWNpdHk7XG4gICAgICByLmRyYXdBcnJvd2hlYWRzKGNvbnRleHQsIGVkZ2UsIGFycm93T3BhY2l0eSk7XG4gICAgfTtcblxuICAgIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgICAgci5kcmF3RWxlbWVudFRleHQoY29udGV4dCwgZWRnZSwgbnVsbCwgZHJhd0xhYmVsKTtcbiAgICB9O1xuXG4gICAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7XG4gICAgdmFyIGdob3N0ID0gZWRnZS5wc3R5bGUoJ2dob3N0JykudmFsdWUgPT09ICd5ZXMnO1xuXG4gICAgaWYgKGdob3N0KSB7XG4gICAgICB2YXIgZ3ggPSBlZGdlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXgnKS5wZlZhbHVlO1xuICAgICAgdmFyIGd5ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICAgIHZhciBnaG9zdE9wYWNpdHkgPSBlZGdlLnBzdHlsZSgnZ2hvc3Qtb3BhY2l0eScpLnZhbHVlO1xuICAgICAgdmFyIGVmZmVjdGl2ZUdob3N0T3BhY2l0eSA9IGVmZmVjdGl2ZUxpbmVPcGFjaXR5ICogZ2hvc3RPcGFjaXR5O1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoZ3gsIGd5KTtcbiAgICAgIGRyYXdMaW5lKGVmZmVjdGl2ZUdob3N0T3BhY2l0eSk7XG4gICAgICBkcmF3QXJyb3dzKGVmZmVjdGl2ZUdob3N0T3BhY2l0eSk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtZ3gsIC1neSk7XG4gICAgfVxuXG4gICAgZHJhd1VuZGVybGF5KCk7XG4gICAgZHJhd0xpbmUoKTtcbiAgICBkcmF3QXJyb3dzKCk7XG4gICAgZHJhd092ZXJsYXkoKTtcbiAgICBkcmF3VGV4dCgpO1xuXG4gICAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKGJiLngxLCBiYi55MSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSA9IGZ1bmN0aW9uIGRyYXdFZGdlT3ZlcmxheVVuZGVybGF5KG92ZXJsYXlPclVuZGVybGF5KSB7XG4gICAgaWYgKCFbJ292ZXJsYXknLCAndW5kZXJsYXknXS5pbmNsdWRlcyhvdmVybGF5T3JVbmRlcmxheSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZScpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSkge1xuICAgICAgaWYgKCFlZGdlLnZpc2libGUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvcGFjaXR5ID0gZWRnZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLW9wYWNpdHlcIikpLnZhbHVlO1xuXG4gICAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIHZhciB1c2VQYXRocyA9IHIudXNlUGF0aHMoKTtcbiAgICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICB2YXIgcGFkZGluZyA9IGVkZ2UucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgICAgdmFyIHdpZHRoID0gMiAqIHBhZGRpbmc7XG4gICAgICB2YXIgY29sb3IgPSBlZGdlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItY29sb3JcIikpLnZhbHVlO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSB3aWR0aDtcblxuICAgICAgaWYgKHJzLmVkZ2VUeXBlID09PSAnc2VsZicgJiYgIXVzZVBhdGhzKSB7XG4gICAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQubGluZUNhcCA9ICdyb3VuZCc7XG4gICAgICB9XG5cbiAgICAgIHIuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICAgIHIuZHJhd0VkZ2VQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cywgJ3NvbGlkJyk7XG4gICAgfTtcbiAgfTtcblxuICBDUnAkOC5kcmF3RWRnZU92ZXJsYXkgPSBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSgnb3ZlcmxheScpO1xuICBDUnAkOC5kcmF3RWRnZVVuZGVybGF5ID0gZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkoJ3VuZGVybGF5Jyk7XG5cbiAgQ1JwJDguZHJhd0VkZ2VQYXRoID0gZnVuY3Rpb24gKGVkZ2UsIGNvbnRleHQsIHB0cywgdHlwZSkge1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGNhbnZhc0N4dCA9IGNvbnRleHQ7XG4gICAgdmFyIHBhdGg7XG4gICAgdmFyIHBhdGhDYWNoZUhpdCA9IGZhbHNlO1xuICAgIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgICB2YXIgbGluZURhc2hQYXR0ZXJuID0gZWRnZS5wc3R5bGUoJ2xpbmUtZGFzaC1wYXR0ZXJuJykucGZWYWx1ZTtcbiAgICB2YXIgbGluZURhc2hPZmZzZXQgPSBlZGdlLnBzdHlsZSgnbGluZS1kYXNoLW9mZnNldCcpLnBmVmFsdWU7XG5cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIHZhciBwYXRoQ2FjaGVLZXkgPSBwdHMuam9pbignJCcpO1xuICAgICAgdmFyIGtleU1hdGNoZXMgPSBycy5wYXRoQ2FjaGVLZXkgJiYgcnMucGF0aENhY2hlS2V5ID09PSBwYXRoQ2FjaGVLZXk7XG5cbiAgICAgIGlmIChrZXlNYXRjaGVzKSB7XG4gICAgICAgIHBhdGggPSBjb250ZXh0ID0gcnMucGF0aENhY2hlO1xuICAgICAgICBwYXRoQ2FjaGVIaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGNvbnRleHQgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIHJzLnBhdGhDYWNoZUtleSA9IHBhdGhDYWNoZUtleTtcbiAgICAgICAgcnMucGF0aENhY2hlID0gcGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2FudmFzQ3h0LnNldExpbmVEYXNoKSB7XG4gICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgIGNhbnZhc0N4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Rhc2hlZCc6XG4gICAgICAgICAgY2FudmFzQ3h0LnNldExpbmVEYXNoKGxpbmVEYXNoUGF0dGVybik7XG4gICAgICAgICAgY2FudmFzQ3h0LmxpbmVEYXNoT2Zmc2V0ID0gbGluZURhc2hPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICAgIGNhbnZhc0N4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoQ2FjaGVIaXQgJiYgIXJzLmJhZExpbmUpIHtcbiAgICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1vdmVUbyhwdHNbMF0sIHB0c1sxXSk7XG5cbiAgICAgIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgICAgY2FzZSAnc2VsZic6XG4gICAgICAgIGNhc2UgJ2NvbXBvdW5kJzpcbiAgICAgICAgY2FzZSAnbXVsdGliZXppZXInOlxuICAgICAgICAgIGZvciAodmFyIGkgPSAyOyBpICsgMyA8IHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3RyYWlnaHQnOlxuICAgICAgICBjYXNlICdzZWdtZW50cyc6XG4gICAgICAgIGNhc2UgJ2hheXN0YWNrJzpcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pICsgMSA8IHB0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHB0c1tfaV0sIHB0c1tfaSArIDFdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250ZXh0ID0gY2FudmFzQ3h0O1xuXG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICBjb250ZXh0LnN0cm9rZShwYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICB9IC8vIHJlc2V0IGFueSBsaW5lIGRhc2hlc1xuXG5cbiAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDguZHJhd0VkZ2VUcmlhbmdsZVBhdGggPSBmdW5jdGlvbiAoZWRnZSwgY29udGV4dCwgcHRzKSB7XG4gICAgLy8gdXNlIGxpbmUgc3Ryb2tlIHN0eWxlIGZvciB0cmlhbmdsZSBmaWxsIHN0eWxlXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICAgIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyAxIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgdmVjdG9yID0gW3B0c1tpICsgMl0gLSBwdHNbaV0sIHB0c1tpICsgM10gLSBwdHNbaSArIDFdXTtcbiAgICAgIHZhciBsZW5ndGggPSBNYXRoLnNxcnQodmVjdG9yWzBdICogdmVjdG9yWzBdICsgdmVjdG9yWzFdICogdmVjdG9yWzFdKTtcbiAgICAgIHZhciBub3JtYWwgPSBbdmVjdG9yWzFdIC8gbGVuZ3RoLCAtdmVjdG9yWzBdIC8gbGVuZ3RoXTtcbiAgICAgIHZhciB0cmlhbmdsZUhlYWQgPSBbbm9ybWFsWzBdICogZWRnZVdpZHRoIC8gMiwgbm9ybWFsWzFdICogZWRnZVdpZHRoIC8gMl07XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5tb3ZlVG8ocHRzW2ldIC0gdHJpYW5nbGVIZWFkWzBdLCBwdHNbaSArIDFdIC0gdHJpYW5nbGVIZWFkWzFdKTtcbiAgICAgIGNvbnRleHQubGluZVRvKHB0c1tpXSArIHRyaWFuZ2xlSGVhZFswXSwgcHRzW2kgKyAxXSArIHRyaWFuZ2xlSGVhZFsxXSk7XG4gICAgICBjb250ZXh0LmxpbmVUbyhwdHNbaSArIDJdLCBwdHNbaSArIDNdKTtcbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDguZHJhd0Fycm93aGVhZHMgPSBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSwgb3BhY2l0eSkge1xuICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGlzSGF5c3RhY2sgPSBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJztcblxuICAgIGlmICghaXNIYXlzdGFjaykge1xuICAgICAgdGhpcy5kcmF3QXJyb3doZWFkKGNvbnRleHQsIGVkZ2UsICdzb3VyY2UnLCBycy5hcnJvd1N0YXJ0WCwgcnMuYXJyb3dTdGFydFksIHJzLnNyY0Fycm93QW5nbGUsIG9wYWNpdHkpO1xuICAgIH1cblxuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAnbWlkLXRhcmdldCcsIHJzLm1pZFgsIHJzLm1pZFksIHJzLm1pZHRndEFycm93QW5nbGUsIG9wYWNpdHkpO1xuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAnbWlkLXNvdXJjZScsIHJzLm1pZFgsIHJzLm1pZFksIHJzLm1pZHNyY0Fycm93QW5nbGUsIG9wYWNpdHkpO1xuXG4gICAgaWYgKCFpc0hheXN0YWNrKSB7XG4gICAgICB0aGlzLmRyYXdBcnJvd2hlYWQoY29udGV4dCwgZWRnZSwgJ3RhcmdldCcsIHJzLmFycm93RW5kWCwgcnMuYXJyb3dFbmRZLCBycy50Z3RBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDguZHJhd0Fycm93aGVhZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlZGdlLCBwcmVmaXgsIHgsIHksIGFuZ2xlLCBvcGFjaXR5KSB7XG4gICAgaWYgKGlzTmFOKHgpIHx8IHggPT0gbnVsbCB8fCBpc05hTih5KSB8fCB5ID09IG51bGwgfHwgaXNOYU4oYW5nbGUpIHx8IGFuZ2xlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGFycm93U2hhcGUgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LXNoYXBlJykudmFsdWU7XG5cbiAgICBpZiAoYXJyb3dTaGFwZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFycm93Q2xlYXJGaWxsID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1maWxsJykudmFsdWUgPT09ICdob2xsb3cnID8gJ2JvdGgnIDogJ2ZpbGxlZCc7XG4gICAgdmFyIGFycm93RmlsbCA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctZmlsbCcpLnZhbHVlO1xuICAgIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICAgIHZhciBlZGdlT3BhY2l0eSA9IGVkZ2UucHN0eWxlKCdvcGFjaXR5JykudmFsdWU7XG5cbiAgICBpZiAob3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcGFjaXR5ID0gZWRnZU9wYWNpdHk7XG4gICAgfVxuXG4gICAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuXG4gICAgaWYgKG9wYWNpdHkgIT09IDEgfHwgYXJyb3dGaWxsID09PSAnaG9sbG93Jykge1xuICAgICAgLy8gdGhlbiBleHRyYSBjbGVhciBpcyBuZWVkZWRcbiAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgICBzZWxmLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgICAgc2VsZi5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgICAgc2VsZi5kcmF3QXJyb3dTaGFwZShlZGdlLCBjb250ZXh0LCBhcnJvd0NsZWFyRmlsbCwgZWRnZVdpZHRoLCBhcnJvd1NoYXBlLCB4LCB5LCBhbmdsZSk7XG4gICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgICB9IC8vIG90aGVyd2lzZSwgdGhlIG9wYXF1ZSBhcnJvdyBjbGVhcnMgaXQgZm9yIGZyZWUgOilcblxuXG4gICAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1jb2xvcicpLnZhbHVlO1xuICAgIHNlbGYuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgb3BhY2l0eSk7XG4gICAgc2VsZi5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIHNlbGYuZHJhd0Fycm93U2hhcGUoZWRnZSwgY29udGV4dCwgYXJyb3dGaWxsLCBlZGdlV2lkdGgsIGFycm93U2hhcGUsIHgsIHksIGFuZ2xlKTtcbiAgfTtcblxuICBDUnAkOC5kcmF3QXJyb3dTaGFwZSA9IGZ1bmN0aW9uIChlZGdlLCBjb250ZXh0LCBmaWxsLCBlZGdlV2lkdGgsIHNoYXBlLCB4LCB5LCBhbmdsZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgdXNlUGF0aHMgPSB0aGlzLnVzZVBhdGhzKCkgJiYgc2hhcGUgIT09ICd0cmlhbmdsZS1jcm9zcyc7XG4gICAgdmFyIHBhdGhDYWNoZUhpdCA9IGZhbHNlO1xuICAgIHZhciBwYXRoO1xuICAgIHZhciBjYW52YXNDb250ZXh0ID0gY29udGV4dDtcbiAgICB2YXIgdHJhbnNsYXRpb24gPSB7XG4gICAgICB4OiB4LFxuICAgICAgeTogeVxuICAgIH07XG4gICAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgdmFyIHNpemUgPSB0aGlzLmdldEFycm93V2lkdGgoZWRnZVdpZHRoLCBzY2FsZSk7XG4gICAgdmFyIHNoYXBlSW1wbCA9IHIuYXJyb3dTaGFwZXNbc2hhcGVdO1xuXG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICB2YXIgY2FjaGUgPSByLmFycm93UGF0aENhY2hlID0gci5hcnJvd1BhdGhDYWNoZSB8fCBbXTtcbiAgICAgIHZhciBrZXkgPSBoYXNoU3RyaW5nKHNoYXBlKTtcbiAgICAgIHZhciBjYWNoZWRQYXRoID0gY2FjaGVba2V5XTtcblxuICAgICAgaWYgKGNhY2hlZFBhdGggIT0gbnVsbCkge1xuICAgICAgICBwYXRoID0gY29udGV4dCA9IGNhY2hlZFBhdGg7XG4gICAgICAgIHBhdGhDYWNoZUhpdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRoID0gY29udGV4dCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgY2FjaGVba2V5XSA9IHBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXRoQ2FjaGVIaXQpIHtcbiAgICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgLy8gc3RvcmUgaW4gdGhlIHBhdGggY2FjaGUgd2l0aCB2YWx1ZXMgZWFzaWx5IG1hbmlwdWxhdGVkIGxhdGVyXG4gICAgICAgIHNoYXBlSW1wbC5kcmF3KGNvbnRleHQsIDEsIDAsIHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaGFwZUltcGwuZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0LmNsb3NlUGF0aCkge1xuICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQgPSBjYW52YXNDb250ZXh0O1xuXG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAvLyBzZXQgdHJhbnNmb3JtIHRvIGFycm93IHBvc2l0aW9uL29yaWVudGF0aW9uXG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgIGNvbnRleHQucm90YXRlKGFuZ2xlKTtcbiAgICAgIGNvbnRleHQuc2NhbGUoc2l6ZSwgc2l6ZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGwgPT09ICdmaWxsZWQnIHx8IGZpbGwgPT09ICdib3RoJykge1xuICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgIGNvbnRleHQuZmlsbChwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWxsID09PSAnaG9sbG93JyB8fCBmaWxsID09PSAnYm90aCcpIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gKHNoYXBlSW1wbC5tYXRjaEVkZ2VXaWR0aCA/IGVkZ2VXaWR0aCA6IDEpIC8gKHVzZVBhdGhzID8gc2l6ZSA6IDEpO1xuICAgICAgY29udGV4dC5saW5lSm9pbiA9ICdtaXRlcic7XG5cbiAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICBjb250ZXh0LnN0cm9rZShwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAvLyByZXNldCB0cmFuc2Zvcm0gYnkgYXBwbHlpbmcgaW52ZXJzZVxuICAgICAgY29udGV4dC5zY2FsZSgxIC8gc2l6ZSwgMSAvIHNpemUpO1xuICAgICAgY29udGV4dC5yb3RhdGUoLWFuZ2xlKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBDUnAkNyA9IHt9O1xuXG4gIENScCQ3LnNhZmVEcmF3SW1hZ2UgPSBmdW5jdGlvbiAoY29udGV4dCwgaW1nLCBpeCwgaXksIGl3LCBpaCwgeCwgeSwgdywgaCkge1xuICAgIC8vIGRldGVjdCBwcm9ibGVtYXRpYyBjYXNlcyBmb3Igb2xkIGJyb3dzZXJzIHdpdGggYmFkIGltYWdlcyAoY2hlYXBlciB0aGFuIHRyeS1jYXRjaClcbiAgICBpZiAoaXcgPD0gMCB8fCBpaCA8PSAwIHx8IHcgPD0gMCB8fCBoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCBpeCwgaXksIGl3LCBpaCwgeCwgeSwgdywgaCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2FybihlKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDcuZHJhd0luc2NyaWJlZEltYWdlID0gZnVuY3Rpb24gKGNvbnRleHQsIGltZywgbm9kZSwgaW5kZXgsIG5vZGVPcGFjaXR5KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBwb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gICAgdmFyIG5vZGVYID0gcG9zLng7XG4gICAgdmFyIG5vZGVZID0gcG9zLnk7XG4gICAgdmFyIHN0eWxlT2JqID0gbm9kZS5jeSgpLnN0eWxlKCk7XG4gICAgdmFyIGdldEluZGV4ZWRTdHlsZSA9IHN0eWxlT2JqLmdldEluZGV4ZWRTdHlsZS5iaW5kKHN0eWxlT2JqKTtcbiAgICB2YXIgZml0ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWZpdCcsICd2YWx1ZScsIGluZGV4KTtcbiAgICB2YXIgcmVwZWF0ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXJlcGVhdCcsICd2YWx1ZScsIGluZGV4KTtcbiAgICB2YXIgbm9kZVcgPSBub2RlLndpZHRoKCk7XG4gICAgdmFyIG5vZGVIID0gbm9kZS5oZWlnaHQoKTtcbiAgICB2YXIgcGFkZGluZ1gyID0gbm9kZS5wYWRkaW5nKCkgKiAyO1xuICAgIHZhciBub2RlVFcgPSBub2RlVyArIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLCAndmFsdWUnLCBpbmRleCkgPT09ICdpbm5lcicgPyAwIDogcGFkZGluZ1gyKTtcbiAgICB2YXIgbm9kZVRIID0gbm9kZUggKyAoZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10bycsICd2YWx1ZScsIGluZGV4KSA9PT0gJ2lubmVyJyA/IDAgOiBwYWRkaW5nWDIpO1xuICAgIHZhciBycyA9IG5vZGUuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGNsaXAgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtY2xpcCcsICd2YWx1ZScsIGluZGV4KTtcbiAgICB2YXIgc2hvdWxkQ2xpcCA9IGNsaXAgPT09ICdub2RlJztcbiAgICB2YXIgaW1nT3BhY2l0eSA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JywgJ3ZhbHVlJywgaW5kZXgpICogbm9kZU9wYWNpdHk7XG4gICAgdmFyIHNtb290aCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmcnLCAndmFsdWUnLCBpbmRleCk7XG4gICAgdmFyIGltZ1cgPSBpbWcud2lkdGggfHwgaW1nLmNhY2hlZFc7XG4gICAgdmFyIGltZ0ggPSBpbWcuaGVpZ2h0IHx8IGltZy5jYWNoZWRIOyAvLyB3b3JrYXJvdW5kIGZvciBicm9rZW4gYnJvd3NlcnMgbGlrZSBpZVxuXG4gICAgaWYgKG51bGwgPT0gaW1nVyB8fCBudWxsID09IGltZ0gpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgICBpbWdXID0gaW1nLmNhY2hlZFcgPSBpbWcud2lkdGggfHwgaW1nLm9mZnNldFdpZHRoO1xuICAgICAgaW1nSCA9IGltZy5jYWNoZWRIID0gaW1nLmhlaWdodCB8fCBpbWcub2Zmc2V0SGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgfVxuXG4gICAgdmFyIHcgPSBpbWdXO1xuICAgIHZhciBoID0gaW1nSDtcblxuICAgIGlmIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAndmFsdWUnLCBpbmRleCkgIT09ICdhdXRvJykge1xuICAgICAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd1bml0cycsIGluZGV4KSA9PT0gJyUnKSB7XG4gICAgICAgIHcgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAncGZWYWx1ZScsIGluZGV4KSAqIG5vZGVUVztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHcgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWhlaWdodCcsICd2YWx1ZScsIGluZGV4KSAhPT0gJ2F1dG8nKSB7XG4gICAgICBpZiAoZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWhlaWdodCcsICd1bml0cycsIGluZGV4KSA9PT0gJyUnKSB7XG4gICAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVEg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWhlaWdodCcsICdwZlZhbHVlJywgaW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3ID09PSAwIHx8IGggPT09IDApIHtcbiAgICAgIHJldHVybjsgLy8gbm8gcG9pbnQgaW4gZHJhd2luZyBlbXB0eSBpbWFnZSAoYW5kIGNocm9tZSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlKVxuICAgIH1cblxuICAgIGlmIChmaXQgPT09ICdjb250YWluJykge1xuICAgICAgdmFyIHNjYWxlID0gTWF0aC5taW4obm9kZVRXIC8gdywgbm9kZVRIIC8gaCk7XG4gICAgICB3ICo9IHNjYWxlO1xuICAgICAgaCAqPSBzY2FsZTtcbiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gJ2NvdmVyJykge1xuICAgICAgdmFyIHNjYWxlID0gTWF0aC5tYXgobm9kZVRXIC8gdywgbm9kZVRIIC8gaCk7XG4gICAgICB3ICo9IHNjYWxlO1xuICAgICAgaCAqPSBzY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgeCA9IG5vZGVYIC0gbm9kZVRXIC8gMjsgLy8gbGVmdFxuXG4gICAgdmFyIHBvc1hVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgJ3VuaXRzJywgaW5kZXgpO1xuICAgIHZhciBwb3NYUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcG9zaXRpb24teCcsICdwZlZhbHVlJywgaW5kZXgpO1xuXG4gICAgaWYgKHBvc1hVbml0cyA9PT0gJyUnKSB7XG4gICAgICB4ICs9IChub2RlVFcgLSB3KSAqIHBvc1hQZlZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgeCArPSBwb3NYUGZWYWw7XG4gICAgfVxuXG4gICAgdmFyIG9mZlhVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1vZmZzZXQteCcsICd1bml0cycsIGluZGV4KTtcbiAgICB2YXIgb2ZmWFBmVmFsID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLW9mZnNldC14JywgJ3BmVmFsdWUnLCBpbmRleCk7XG5cbiAgICBpZiAob2ZmWFVuaXRzID09PSAnJScpIHtcbiAgICAgIHggKz0gKG5vZGVUVyAtIHcpICogb2ZmWFBmVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB4ICs9IG9mZlhQZlZhbDtcbiAgICB9XG5cbiAgICB2YXIgeSA9IG5vZGVZIC0gbm9kZVRIIC8gMjsgLy8gdG9wXG5cbiAgICB2YXIgcG9zWVVuaXRzID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLCAndW5pdHMnLCBpbmRleCk7XG4gICAgdmFyIHBvc1lQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgJ3BmVmFsdWUnLCBpbmRleCk7XG5cbiAgICBpZiAocG9zWVVuaXRzID09PSAnJScpIHtcbiAgICAgIHkgKz0gKG5vZGVUSCAtIGgpICogcG9zWVBmVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB5ICs9IHBvc1lQZlZhbDtcbiAgICB9XG5cbiAgICB2YXIgb2ZmWVVuaXRzID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLW9mZnNldC15JywgJ3VuaXRzJywgaW5kZXgpO1xuICAgIHZhciBvZmZZUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXknLCAncGZWYWx1ZScsIGluZGV4KTtcblxuICAgIGlmIChvZmZZVW5pdHMgPT09ICclJykge1xuICAgICAgeSArPSAobm9kZVRIIC0gaCkgKiBvZmZZUGZWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHkgKz0gb2ZmWVBmVmFsO1xuICAgIH1cblxuICAgIGlmIChycy5wYXRoQ2FjaGUpIHtcbiAgICAgIHggLT0gbm9kZVg7XG4gICAgICB5IC09IG5vZGVZO1xuICAgICAgbm9kZVggPSAwO1xuICAgICAgbm9kZVkgPSAwO1xuICAgIH1cblxuICAgIHZhciBnQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBpbWdPcGFjaXR5O1xuICAgIHZhciBzbW9vdGhpbmdFbmFibGVkID0gci5nZXRJbWdTbW9vdGhpbmcoY29udGV4dCk7XG4gICAgdmFyIGlzU21vb3RoaW5nU3dpdGNoZWQgPSBmYWxzZTtcblxuICAgIGlmIChzbW9vdGggPT09ICdubycgJiYgc21vb3RoaW5nRW5hYmxlZCkge1xuICAgICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICAgICAgaXNTbW9vdGhpbmdTd2l0Y2hlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzbW9vdGggPT09ICd5ZXMnICYmICFzbW9vdGhpbmdFbmFibGVkKSB7XG4gICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgICAgIGlzU21vb3RoaW5nU3dpdGNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZXBlYXQgPT09ICduby1yZXBlYXQnKSB7XG4gICAgICBpZiAoc2hvdWxkQ2xpcCkge1xuICAgICAgICBjb250ZXh0LnNhdmUoKTtcblxuICAgICAgICBpZiAocnMucGF0aENhY2hlKSB7XG4gICAgICAgICAgY29udGV4dC5jbGlwKHJzLnBhdGhDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIG5vZGVYLCBub2RlWSwgbm9kZVRXLCBub2RlVEgpO1xuICAgICAgICAgIGNvbnRleHQuY2xpcCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHIuc2FmZURyYXdJbWFnZShjb250ZXh0LCBpbWcsIDAsIDAsIGltZ1csIGltZ0gsIHgsIHksIHcsIGgpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2xpcCkge1xuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhdHRlcm4gPSBjb250ZXh0LmNyZWF0ZVBhdHRlcm4oaW1nLCByZXBlYXQpO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBwYXR0ZXJuO1xuICAgICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIG5vZGVYLCBub2RlWSwgbm9kZVRXLCBub2RlVEgpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGdBbHBoYTtcblxuICAgIGlmIChpc1Ntb290aGluZ1N3aXRjaGVkKSB7XG4gICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBzbW9vdGhpbmdFbmFibGVkKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIENScCQ2ID0ge307XG5cbiAgQ1JwJDYuZWxlVGV4dEJpZ2dlclRoYW5NaW4gPSBmdW5jdGlvbiAoZWxlLCBzY2FsZSkge1xuICAgIGlmICghc2NhbGUpIHtcbiAgICAgIHZhciB6b29tID0gZWxlLmN5KCkuem9vbSgpO1xuICAgICAgdmFyIHB4UmF0aW8gPSB0aGlzLmdldFBpeGVsUmF0aW8oKTtcbiAgICAgIHZhciBsdmwgPSBNYXRoLmNlaWwobG9nMih6b29tICogcHhSYXRpbykpOyAvLyB0aGUgZWZmZWN0aXZlIHRleHR1cmUgbGV2ZWxcblxuICAgICAgc2NhbGUgPSBNYXRoLnBvdygyLCBsdmwpO1xuICAgIH1cblxuICAgIHZhciBjb21wdXRlZFNpemUgPSBlbGUucHN0eWxlKCdmb250LXNpemUnKS5wZlZhbHVlICogc2NhbGU7XG4gICAgdmFyIG1pblNpemUgPSBlbGUucHN0eWxlKCdtaW4tem9vbWVkLWZvbnQtc2l6ZScpLnBmVmFsdWU7XG5cbiAgICBpZiAoY29tcHV0ZWRTaXplIDwgbWluU2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIENScCQ2LmRyYXdFbGVtZW50VGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIGZvcmNlLCBwcmVmaXgpIHtcbiAgICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICB2YXIgciA9IHRoaXM7XG5cbiAgICBpZiAoZm9yY2UgPT0gbnVsbCkge1xuICAgICAgaWYgKHVzZUVsZU9wYWNpdHkgJiYgIXIuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmb3JjZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICB2YXIgbGFiZWwgPSBlbGUucHN0eWxlKCdsYWJlbCcpO1xuXG4gICAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBqdXN0aWZpY2F0aW9uID0gci5nZXRMYWJlbEp1c3RpZmljYXRpb24oZWxlKTtcbiAgICAgIGNvbnRleHQudGV4dEFsaWduID0ganVzdGlmaWNhdGlvbjtcbiAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBiYWRMaW5lID0gZWxlLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO1xuXG4gICAgICB2YXIgX2xhYmVsID0gZWxlLnBzdHlsZSgnbGFiZWwnKTtcblxuICAgICAgdmFyIHNyY0xhYmVsID0gZWxlLnBzdHlsZSgnc291cmNlLWxhYmVsJyk7XG4gICAgICB2YXIgdGd0TGFiZWwgPSBlbGUucHN0eWxlKCd0YXJnZXQtbGFiZWwnKTtcblxuICAgICAgaWYgKGJhZExpbmUgfHwgKCFfbGFiZWwgfHwgIV9sYWJlbC52YWx1ZSkgJiYgKCFzcmNMYWJlbCB8fCAhc3JjTGFiZWwudmFsdWUpICYmICghdGd0TGFiZWwgfHwgIXRndExhYmVsLnZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xuICAgIH1cblxuICAgIHZhciBhcHBseVJvdGF0aW9uID0gIXNoaWZ0VG9PcmlnaW5XaXRoQmI7XG4gICAgdmFyIGJiO1xuXG4gICAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICAgIGJiID0gc2hpZnRUb09yaWdpbldpdGhCYjtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgICB9XG5cbiAgICBpZiAocHJlZml4ID09IG51bGwpIHtcbiAgICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCBudWxsLCBhcHBseVJvdGF0aW9uLCB1c2VFbGVPcGFjaXR5KTtcblxuICAgICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgJ3NvdXJjZScsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICAgICAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgJ3RhcmdldCcsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgcHJlZml4LCBhcHBseVJvdGF0aW9uLCB1c2VFbGVPcGFjaXR5KTtcbiAgICB9XG5cbiAgICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoYmIueDEsIGJiLnkxKTtcbiAgICB9XG4gIH07XG5cbiAgQ1JwJDYuZ2V0Rm9udENhY2hlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgY2FjaGU7XG4gICAgdGhpcy5mb250Q2FjaGVzID0gdGhpcy5mb250Q2FjaGVzIHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvbnRDYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhY2hlID0gdGhpcy5mb250Q2FjaGVzW2ldO1xuXG4gICAgICBpZiAoY2FjaGUuY29udGV4dCA9PT0gY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY2FjaGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FjaGUgPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfTtcbiAgICB0aGlzLmZvbnRDYWNoZXMucHVzaChjYWNoZSk7XG4gICAgcmV0dXJuIGNhY2hlO1xuICB9OyAvLyBzZXQgdXAgY2FudmFzIGNvbnRleHQgd2l0aCBmb250XG4gIC8vIHJldHVybnMgdHJhbnNmb3JtZWQgdGV4dCBzdHJpbmdcblxuXG4gIENScCQ2LnNldHVwVGV4dFN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSkge1xuICAgIHZhciB1c2VFbGVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgIC8vIEZvbnQgc3R5bGVcbiAgICB2YXIgbGFiZWxTdHlsZSA9IGVsZS5wc3R5bGUoJ2ZvbnQtc3R5bGUnKS5zdHJWYWx1ZTtcbiAgICB2YXIgbGFiZWxTaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZSArICdweCc7XG4gICAgdmFyIGxhYmVsRmFtaWx5ID0gZWxlLnBzdHlsZSgnZm9udC1mYW1pbHknKS5zdHJWYWx1ZTtcbiAgICB2YXIgbGFiZWxXZWlnaHQgPSBlbGUucHN0eWxlKCdmb250LXdlaWdodCcpLnN0clZhbHVlO1xuICAgIHZhciBvcGFjaXR5ID0gdXNlRWxlT3BhY2l0eSA/IGVsZS5lZmZlY3RpdmVPcGFjaXR5KCkgKiBlbGUucHN0eWxlKCd0ZXh0LW9wYWNpdHknKS52YWx1ZSA6IDE7XG4gICAgdmFyIG91dGxpbmVPcGFjaXR5ID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLW9wYWNpdHknKS52YWx1ZSAqIG9wYWNpdHk7XG4gICAgdmFyIGNvbG9yID0gZWxlLnBzdHlsZSgnY29sb3InKS52YWx1ZTtcbiAgICB2YXIgb3V0bGluZUNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLWNvbG9yJykudmFsdWU7XG4gICAgY29udGV4dC5mb250ID0gbGFiZWxTdHlsZSArICcgJyArIGxhYmVsV2VpZ2h0ICsgJyAnICsgbGFiZWxTaXplICsgJyAnICsgbGFiZWxGYW1pbHk7XG4gICAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7IC8vIHNvIHRleHQgb3V0bGluZXMgYXJlbid0IGphZ2dlZFxuXG4gICAgdGhpcy5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICB0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgb3V0bGluZUNvbG9yWzBdLCBvdXRsaW5lQ29sb3JbMV0sIG91dGxpbmVDb2xvclsyXSwgb3V0bGluZU9wYWNpdHkpO1xuICB9OyAvLyBUT0RPIGVuc3VyZSByZS11c2VkXG5cblxuICBmdW5jdGlvbiByb3VuZFJlY3QoY3R4LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdmFyIHJhZGl1cyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogNTtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh4ICsgcmFkaXVzLCB5KTtcbiAgICBjdHgubGluZVRvKHggKyB3aWR0aCAtIHJhZGl1cywgeSk7XG4gICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xuICAgIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCk7XG4gICAgY3R4LmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcbiAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICBjdHgubGluZVRvKHgsIHkgKyByYWRpdXMpO1xuICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICBjdHguZmlsbCgpO1xuICB9XG5cbiAgQ1JwJDYuZ2V0VGV4dEFuZ2xlID0gZnVuY3Rpb24gKGVsZSwgcHJlZml4KSB7XG4gICAgdmFyIHRoZXRhO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnNjcmF0Y2ggPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgcGRhc2ggPSBwcmVmaXggPyBwcmVmaXggKyAnLScgOiAnJztcbiAgICB2YXIgcm90YXRpb24gPSBlbGUucHN0eWxlKHBkYXNoICsgJ3RleHQtcm90YXRpb24nKTtcbiAgICB2YXIgdGV4dEFuZ2xlID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsQW5nbGUnLCBwcmVmaXgpO1xuXG4gICAgaWYgKHJvdGF0aW9uLnN0clZhbHVlID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICAgIHRoZXRhID0gZWxlLmlzRWRnZSgpID8gdGV4dEFuZ2xlIDogMDtcbiAgICB9IGVsc2UgaWYgKHJvdGF0aW9uLnN0clZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgIHRoZXRhID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhldGEgPSByb3RhdGlvbi5wZlZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGV0YTtcbiAgfTtcblxuICBDUnAkNi5kcmF3VGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIHByZWZpeCkge1xuICAgIHZhciBhcHBseVJvdGF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICAgIHZhciB1c2VFbGVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB0cnVlO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnNjcmF0Y2ggPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgcGFyZW50T3BhY2l0eSA9IHVzZUVsZU9wYWNpdHkgPyBlbGUuZWZmZWN0aXZlT3BhY2l0eSgpIDogMTtcblxuICAgIGlmICh1c2VFbGVPcGFjaXR5ICYmIChwYXJlbnRPcGFjaXR5ID09PSAwIHx8IGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlID09PSAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gdXNlICdtYWluJyBhcyBhbiBhbGlhcyBmb3IgdGhlIG1haW4gbGFiZWwgKGkuZS4gbnVsbCBwcmVmaXgpXG5cblxuICAgIGlmIChwcmVmaXggPT09ICdtYWluJykge1xuICAgICAgcHJlZml4ID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdGV4dFggPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxYJywgcHJlZml4KTtcbiAgICB2YXIgdGV4dFkgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxZJywgcHJlZml4KTtcbiAgICB2YXIgb3JnVGV4dFgsIG9yZ1RleHRZOyAvLyB1c2VkIGZvciByb3RhdGlvblxuXG4gICAgdmFyIHRleHQgPSB0aGlzLmdldExhYmVsVGV4dChlbGUsIHByZWZpeCk7XG5cbiAgICBpZiAodGV4dCAhPSBudWxsICYmIHRleHQgIT09ICcnICYmICFpc05hTih0ZXh0WCkgJiYgIWlzTmFOKHRleHRZKSkge1xuICAgICAgdGhpcy5zZXR1cFRleHRTdHlsZShjb250ZXh0LCBlbGUsIHVzZUVsZU9wYWNpdHkpO1xuICAgICAgdmFyIHBkYXNoID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gICAgICB2YXIgdGV4dFcgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxXaWR0aCcsIHByZWZpeCk7XG4gICAgICB2YXIgdGV4dEggPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgpO1xuICAgICAgdmFyIG1hcmdpblggPSBlbGUucHN0eWxlKHBkYXNoICsgJ3RleHQtbWFyZ2luLXgnKS5wZlZhbHVlO1xuICAgICAgdmFyIG1hcmdpblkgPSBlbGUucHN0eWxlKHBkYXNoICsgJ3RleHQtbWFyZ2luLXknKS5wZlZhbHVlO1xuICAgICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICAgIHZhciBoYWxpZ24gPSBlbGUucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnZhbHVlO1xuICAgICAgdmFyIHZhbGlnbiA9IGVsZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG5cbiAgICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgICAgaGFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgIHZhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuXG4gICAgICB0ZXh0WCArPSBtYXJnaW5YO1xuICAgICAgdGV4dFkgKz0gbWFyZ2luWTtcbiAgICAgIHZhciB0aGV0YTtcblxuICAgICAgaWYgKCFhcHBseVJvdGF0aW9uKSB7XG4gICAgICAgIHRoZXRhID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoZXRhID0gdGhpcy5nZXRUZXh0QW5nbGUoZWxlLCBwcmVmaXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhldGEgIT09IDApIHtcbiAgICAgICAgb3JnVGV4dFggPSB0ZXh0WDtcbiAgICAgICAgb3JnVGV4dFkgPSB0ZXh0WTtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUob3JnVGV4dFgsIG9yZ1RleHRZKTtcbiAgICAgICAgY29udGV4dC5yb3RhdGUodGhldGEpO1xuICAgICAgICB0ZXh0WCA9IDA7XG4gICAgICAgIHRleHRZID0gMDtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh2YWxpZ24pIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAgIHRleHRZICs9IHRleHRIIC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRleHRZICs9IHRleHRIO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgYmFja2dyb3VuZE9wYWNpdHkgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eScpLnZhbHVlO1xuICAgICAgdmFyIGJvcmRlck9wYWNpdHkgPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci1vcGFjaXR5JykudmFsdWU7XG4gICAgICB2YXIgdGV4dEJvcmRlcldpZHRoID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItd2lkdGgnKS5wZlZhbHVlO1xuICAgICAgdmFyIGJhY2tncm91bmRQYWRkaW5nID0gZWxlLnBzdHlsZSgndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnKS5wZlZhbHVlO1xuXG4gICAgICBpZiAoYmFja2dyb3VuZE9wYWNpdHkgPiAwIHx8IHRleHRCb3JkZXJXaWR0aCA+IDAgJiYgYm9yZGVyT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdmFyIGJnWCA9IHRleHRYIC0gYmFja2dyb3VuZFBhZGRpbmc7XG5cbiAgICAgICAgc3dpdGNoIChoYWxpZ24pIHtcbiAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgIGJnWCAtPSB0ZXh0VztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIGJnWCAtPSB0ZXh0VyAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBiZ1kgPSB0ZXh0WSAtIHRleHRIIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICAgIHZhciBiZ1cgPSB0ZXh0VyArIDIgKiBiYWNrZ3JvdW5kUGFkZGluZztcbiAgICAgICAgdmFyIGJnSCA9IHRleHRIICsgMiAqIGJhY2tncm91bmRQYWRkaW5nO1xuXG4gICAgICAgIGlmIChiYWNrZ3JvdW5kT3BhY2l0eSA+IDApIHtcbiAgICAgICAgICB2YXIgdGV4dEZpbGwgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgICAgICAgICB2YXIgdGV4dEJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHRleHRCYWNrZ3JvdW5kQ29sb3JbMF0gKyAnLCcgKyB0ZXh0QmFja2dyb3VuZENvbG9yWzFdICsgJywnICsgdGV4dEJhY2tncm91bmRDb2xvclsyXSArICcsJyArIGJhY2tncm91bmRPcGFjaXR5ICogcGFyZW50T3BhY2l0eSArICcpJztcbiAgICAgICAgICB2YXIgc3R5bGVTaGFwZSA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1zaGFwZScpLnN0clZhbHVlO1xuXG4gICAgICAgICAgaWYgKHN0eWxlU2hhcGUuaW5kZXhPZigncm91bmQnKSA9PT0gMCkge1xuICAgICAgICAgICAgcm91bmRSZWN0KGNvbnRleHQsIGJnWCwgYmdZLCBiZ1csIGJnSCwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYmdYLCBiZ1ksIGJnVywgYmdIKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRleHRGaWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRCb3JkZXJXaWR0aCA+IDAgJiYgYm9yZGVyT3BhY2l0eSA+IDApIHtcbiAgICAgICAgICB2YXIgdGV4dFN0cm9rZSA9IGNvbnRleHQuc3Ryb2tlU3R5bGU7XG4gICAgICAgICAgdmFyIHRleHRMaW5lV2lkdGggPSBjb250ZXh0LmxpbmVXaWR0aDtcbiAgICAgICAgICB2YXIgdGV4dEJvcmRlckNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItY29sb3InKS52YWx1ZTtcbiAgICAgICAgICB2YXIgdGV4dEJvcmRlclN0eWxlID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItc3R5bGUnKS52YWx1ZTtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJ3JnYmEoJyArIHRleHRCb3JkZXJDb2xvclswXSArICcsJyArIHRleHRCb3JkZXJDb2xvclsxXSArICcsJyArIHRleHRCb3JkZXJDb2xvclsyXSArICcsJyArIGJvcmRlck9wYWNpdHkgKiBwYXJlbnRPcGFjaXR5ICsgJyknO1xuICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICAgICAgc3dpdGNoICh0ZXh0Qm9yZGVyU3R5bGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnZG90dGVkJzpcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxLCAxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFs0LCAyXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRleHRCb3JkZXJXaWR0aCAvIDQ7IC8vIDUwJSByZXNlcnZlZCBmb3Igd2hpdGUgYmV0d2VlbiB0aGUgdHdvIGJvcmRlcnNcblxuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NvbGlkJzpcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3QoYmdYLCBiZ1ksIGJnVywgYmdIKTtcblxuICAgICAgICAgIGlmICh0ZXh0Qm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgICAgICB2YXIgd2hpdGVXaWR0aCA9IHRleHRCb3JkZXJXaWR0aCAvIDI7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3QoYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRleHRMaW5lV2lkdGg7XG4gICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHRleHRTdHJva2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxpbmVXaWR0aCA9IDIgKiBlbGUucHN0eWxlKCd0ZXh0LW91dGxpbmUtd2lkdGgnKS5wZlZhbHVlOyAvLyAqMiBiL2MgdGhlIHN0cm9rZSBpcyBkcmF3biBjZW50cmVkIG9uIHRoZSBtaWRkbGVcblxuICAgICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS52YWx1ZSA9PT0gJ3dyYXAnKSB7XG4gICAgICAgIHZhciBsaW5lcyA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFdyYXBDYWNoZWRMaW5lcycsIHByZWZpeCk7XG4gICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCk7XG4gICAgICAgIHZhciBoYWxmVGV4dFcgPSB0ZXh0VyAvIDI7XG4gICAgICAgIHZhciBqdXN0aWZpY2F0aW9uID0gdGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZWxlKTtcblxuICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2F1dG8nKSA7IGVsc2UgaWYgKGhhbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgLy8gYXV0byBqdXN0aWZpY2F0aW9uIDogcmlnaHRcbiAgICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0ZXh0WCArPSAtdGV4dFc7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdXN0aWZpY2F0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgdGV4dFggKz0gLWhhbGZUZXh0VztcbiAgICAgICAgICB9IC8vIGVsc2Ugc2FtZSBhcyBhdXRvXG5cbiAgICAgICAgfSBlbHNlIGlmIChoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgLy8gYXV0byBqdXN0ZmljYXRpb24gOiBjZW50ZXJcbiAgICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0ZXh0WCArPSAtaGFsZlRleHRXO1xuICAgICAgICAgIH0gZWxzZSBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGV4dFggKz0gaGFsZlRleHRXO1xuICAgICAgICAgIH0gLy8gZWxzZSBzYW1lIGFzIGF1dG9cblxuICAgICAgICB9IGVsc2UgaWYgKGhhbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIC8vIGF1dG8ganVzdGlmaWNhdGlvbiA6IGxlZnRcbiAgICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIHRleHRYICs9IGhhbGZUZXh0VztcbiAgICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRleHRYICs9IHRleHRXO1xuICAgICAgICAgIH0gLy8gZWxzZSBzYW1lIGFzIGF1dG9cblxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh2YWxpZ24pIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgdGV4dFkgLT0gKGxpbmVzLmxlbmd0aCAtIDEpICogbGluZUhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgdGV4dFkgLT0gKGxpbmVzLmxlbmd0aCAtIDEpICogbGluZUhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsaW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgICAgIGlmIChsaW5lV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVRleHQobGluZXNbbF0sIHRleHRYLCB0ZXh0WSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5maWxsVGV4dChsaW5lc1tsXSwgdGV4dFgsIHRleHRZKTtcbiAgICAgICAgICB0ZXh0WSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobGluZVdpZHRoID4gMCkge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlVGV4dCh0ZXh0LCB0ZXh0WCwgdGV4dFkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5maWxsVGV4dCh0ZXh0LCB0ZXh0WCwgdGV4dFkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhldGEgIT09IDApIHtcbiAgICAgICAgY29udGV4dC5yb3RhdGUoLXRoZXRhKTtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLW9yZ1RleHRYLCAtb3JnVGV4dFkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKiBnbG9iYWwgUGF0aDJEICovXG4gIHZhciBDUnAkNSA9IHt9O1xuXG4gIENScCQ1LmRyYXdOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQsIG5vZGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICAgIHZhciBzaG91bGREcmF3T3ZlcmxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgICB2YXIgc2hvdWxkRHJhd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBub2RlV2lkdGgsIG5vZGVIZWlnaHQ7XG4gICAgdmFyIF9wID0gbm9kZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgcG9zID0gbm9kZS5wb3NpdGlvbigpO1xuXG4gICAgaWYgKCFudW1iZXIkMShwb3MueCkgfHwgIW51bWJlciQxKHBvcy55KSkge1xuICAgICAgcmV0dXJuOyAvLyBjYW4ndCBkcmF3IG5vZGUgd2l0aCB1bmRlZmluZWQgcG9zaXRpb25cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIW5vZGUudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZU9wYWNpdHkgPSBzaG91bGREcmF3T3BhY2l0eSA/IG5vZGUuZWZmZWN0aXZlT3BhY2l0eSgpIDogMTtcbiAgICB2YXIgdXNlUGF0aHMgPSByLnVzZVBhdGhzKCk7XG4gICAgdmFyIHBhdGg7XG4gICAgdmFyIHBhdGhDYWNoZUhpdCA9IGZhbHNlO1xuICAgIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgbm9kZVdpZHRoID0gbm9kZS53aWR0aCgpICsgMiAqIHBhZGRpbmc7XG4gICAgbm9kZUhlaWdodCA9IG5vZGUuaGVpZ2h0KCkgKyAyICogcGFkZGluZzsgLy9cbiAgICAvLyBzZXR1cCBzaGlmdFxuXG4gICAgdmFyIGJiO1xuXG4gICAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICAgIGJiID0gc2hpZnRUb09yaWdpbldpdGhCYjtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgICB9IC8vXG4gICAgLy8gbG9hZCBiZyBpbWFnZVxuXG5cbiAgICB2YXIgYmdJbWdQcm9wID0gbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnKTtcbiAgICB2YXIgdXJscyA9IGJnSW1nUHJvcC52YWx1ZTtcbiAgICB2YXIgdXJsRGVmaW5lZCA9IG5ldyBBcnJheSh1cmxzLmxlbmd0aCk7XG4gICAgdmFyIGltYWdlID0gbmV3IEFycmF5KHVybHMubGVuZ3RoKTtcbiAgICB2YXIgbnVtSW1hZ2VzID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHVybCA9IHVybHNbaV07XG4gICAgICB2YXIgZGVmZCA9IHVybERlZmluZWRbaV0gPSB1cmwgIT0gbnVsbCAmJiB1cmwgIT09ICdub25lJztcblxuICAgICAgaWYgKGRlZmQpIHtcbiAgICAgICAgdmFyIGJnSW1nQ3Jvc3NPcmlnaW4gPSBub2RlLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4nLCAndmFsdWUnLCBpKTtcbiAgICAgICAgbnVtSW1hZ2VzKys7IC8vIGdldCBpbWFnZSwgYW5kIGlmIG5vdCBsb2FkZWQgdGhlbiBhc2sgdG8gcmVkcmF3IHdoZW4gbGF0ZXIgbG9hZGVkXG5cbiAgICAgICAgaW1hZ2VbaV0gPSByLmdldENhY2hlZEltYWdlKHVybCwgYmdJbWdDcm9zc09yaWdpbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF9wLmJhY2tncm91bmRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIG5vZGUuZW1pdEFuZE5vdGlmeSgnYmFja2dyb3VuZCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IC8vXG4gICAgLy8gc2V0dXAgc3R5bGVzXG5cblxuICAgIHZhciBkYXJrbmVzcyA9IG5vZGUucHN0eWxlKCdiYWNrZ3JvdW5kLWJsYWNrZW4nKS52YWx1ZTtcbiAgICB2YXIgYm9yZGVyV2lkdGggPSBub2RlLnBzdHlsZSgnYm9yZGVyLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYmdPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtb3BhY2l0eScpLnZhbHVlICogZWxlT3BhY2l0eTtcbiAgICB2YXIgYm9yZGVyQ29sb3IgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWNvbG9yJykudmFsdWU7XG4gICAgdmFyIGJvcmRlclN0eWxlID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1zdHlsZScpLnZhbHVlO1xuICAgIHZhciBib3JkZXJPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1vcGFjaXR5JykudmFsdWUgKiBlbGVPcGFjaXR5O1xuICAgIGNvbnRleHQubGluZUpvaW4gPSAnbWl0ZXInOyAvLyBzbyBib3JkZXJzIGFyZSBzcXVhcmUgd2l0aCB0aGUgbm9kZSBzaGFwZVxuXG4gICAgdmFyIHNldHVwU2hhcGVDb2xvciA9IGZ1bmN0aW9uIHNldHVwU2hhcGVDb2xvcigpIHtcbiAgICAgIHZhciBiZ09weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogYmdPcGFjaXR5O1xuICAgICAgci5lbGVGaWxsU3R5bGUoY29udGV4dCwgbm9kZSwgYmdPcHkpO1xuICAgIH07XG5cbiAgICB2YXIgc2V0dXBCb3JkZXJDb2xvciA9IGZ1bmN0aW9uIHNldHVwQm9yZGVyQ29sb3IoKSB7XG4gICAgICB2YXIgYmRyT3B5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBib3JkZXJPcGFjaXR5O1xuICAgICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGJvcmRlckNvbG9yWzBdLCBib3JkZXJDb2xvclsxXSwgYm9yZGVyQ29sb3JbMl0sIGJkck9weSk7XG4gICAgfTsgLy9cbiAgICAvLyBzZXR1cCBzaGFwZVxuXG5cbiAgICB2YXIgc3R5bGVTaGFwZSA9IG5vZGUucHN0eWxlKCdzaGFwZScpLnN0clZhbHVlO1xuICAgIHZhciBzaGFwZVB0cyA9IG5vZGUucHN0eWxlKCdzaGFwZS1wb2x5Z29uLXBvaW50cycpLnBmVmFsdWU7XG5cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKHBvcy54LCBwb3MueSk7XG4gICAgICB2YXIgcGF0aENhY2hlID0gci5ub2RlUGF0aENhY2hlID0gci5ub2RlUGF0aENhY2hlIHx8IFtdO1xuICAgICAgdmFyIGtleSA9IGhhc2hTdHJpbmdzKHN0eWxlU2hhcGUgPT09ICdwb2x5Z29uJyA/IHN0eWxlU2hhcGUgKyAnLCcgKyBzaGFwZVB0cy5qb2luKCcsJykgOiBzdHlsZVNoYXBlLCAnJyArIG5vZGVIZWlnaHQsICcnICsgbm9kZVdpZHRoKTtcbiAgICAgIHZhciBjYWNoZWRQYXRoID0gcGF0aENhY2hlW2tleV07XG5cbiAgICAgIGlmIChjYWNoZWRQYXRoICE9IG51bGwpIHtcbiAgICAgICAgcGF0aCA9IGNhY2hlZFBhdGg7XG4gICAgICAgIHBhdGhDYWNoZUhpdCA9IHRydWU7XG4gICAgICAgIHJzLnBhdGhDYWNoZSA9IHBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICBwYXRoQ2FjaGVba2V5XSA9IHJzLnBhdGhDYWNoZSA9IHBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSgpIHtcbiAgICAgIGlmICghcGF0aENhY2hlSGl0KSB7XG4gICAgICAgIHZhciBucG9zID0gcG9zO1xuXG4gICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgIG5wb3MgPSB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByLm5vZGVTaGFwZXNbci5nZXROb2RlU2hhcGUobm9kZSldLmRyYXcocGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgIGNvbnRleHQuZmlsbChwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZHJhd0ltYWdlcyA9IGZ1bmN0aW9uIGRyYXdJbWFnZXMoKSB7XG4gICAgICB2YXIgbm9kZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVsZU9wYWNpdHk7XG4gICAgICB2YXIgaW5zaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgICAgdmFyIHByZXZCZ2luZyA9IF9wLmJhY2tncm91bmRpbmc7XG4gICAgICB2YXIgdG90YWxDb21wbGV0ZWQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW1hZ2UubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBiZ0NvbnRhaW5tZW50ID0gbm9kZS5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50JywgJ3ZhbHVlJywgX2kpO1xuXG4gICAgICAgIGlmIChpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ292ZXInIHx8ICFpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZCsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybERlZmluZWRbX2ldICYmIGltYWdlW19pXS5jb21wbGV0ZSAmJiAhaW1hZ2VbX2ldLmVycm9yKSB7XG4gICAgICAgICAgdG90YWxDb21wbGV0ZWQrKztcbiAgICAgICAgICByLmRyYXdJbnNjcmliZWRJbWFnZShjb250ZXh0LCBpbWFnZVtfaV0sIG5vZGUsIF9pLCBub2RlT3BhY2l0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3AuYmFja2dyb3VuZGluZyA9ICEodG90YWxDb21wbGV0ZWQgPT09IG51bUltYWdlcyk7XG5cbiAgICAgIGlmIChwcmV2QmdpbmcgIT09IF9wLmJhY2tncm91bmRpbmcpIHtcbiAgICAgICAgLy8gdXBkYXRlIHN0eWxlIGIvYyA6YmFja2dyb3VuZGluZyBzdGF0ZSBjaGFuZ2VkXG4gICAgICAgIG5vZGUudXBkYXRlU3R5bGUoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZHJhd1BpZSA9IGZ1bmN0aW9uIGRyYXdQaWUoKSB7XG4gICAgICB2YXIgcmVkcmF3U2hhcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgdmFyIHBpZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGVsZU9wYWNpdHk7XG5cbiAgICAgIGlmIChyLmhhc1BpZShub2RlKSkge1xuICAgICAgICByLmRyYXdQaWUoY29udGV4dCwgbm9kZSwgcGllT3BhY2l0eSk7IC8vIHJlZHJhdy9yZXN0b3JlIHBhdGggaWYgc3RlcHMgYWZ0ZXIgcGllIG5lZWQgaXRcblxuICAgICAgICBpZiAocmVkcmF3U2hhcGUpIHtcbiAgICAgICAgICBpZiAoIXVzZVBhdGhzKSB7XG4gICAgICAgICAgICByLm5vZGVTaGFwZXNbci5nZXROb2RlU2hhcGUobm9kZSldLmRyYXcoY29udGV4dCwgcG9zLngsIHBvcy55LCBub2RlV2lkdGgsIG5vZGVIZWlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZGFya2VuID0gZnVuY3Rpb24gZGFya2VuKCkge1xuICAgICAgdmFyIGRhcmtlbk9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVsZU9wYWNpdHk7XG4gICAgICB2YXIgb3BhY2l0eSA9IChkYXJrbmVzcyA+IDAgPyBkYXJrbmVzcyA6IC1kYXJrbmVzcykgKiBkYXJrZW5PcGFjaXR5O1xuICAgICAgdmFyIGMgPSBkYXJrbmVzcyA+IDAgPyAwIDogMjU1O1xuXG4gICAgICBpZiAoZGFya25lc3MgIT09IDApIHtcbiAgICAgICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjLCBjLCBjLCBvcGFjaXR5KTtcblxuICAgICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgICBjb250ZXh0LmZpbGwocGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRyYXdCb3JkZXIgPSBmdW5jdGlvbiBkcmF3Qm9yZGVyKCkge1xuICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgICBjb250ZXh0LmxpbmVDYXAgPSAnYnV0dCc7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgICBzd2l0Y2ggKGJvcmRlclN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxLCAxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdkYXNoZWQnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFs0LCAyXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgICAgY29udGV4dC5zdHJva2UocGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3JkZXJTdHlsZSA9PT0gJ2RvdWJsZScpIHtcbiAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoIC8gMztcbiAgICAgICAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcblxuICAgICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgICAgY29udGV4dC5zdHJva2UocGF0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnY287XG4gICAgICAgIH0gLy8gcmVzZXQgaW4gY2FzZSB3ZSBjaGFuZ2VkIHRoZSBib3JkZXIgc3R5bGVcblxuXG4gICAgICAgIGlmIChjb250ZXh0LnNldExpbmVEYXNoKSB7XG4gICAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgICBpZiAoc2hvdWxkRHJhd092ZXJsYXkpIHtcbiAgICAgICAgci5kcmF3Tm9kZU92ZXJsYXkoY29udGV4dCwgbm9kZSwgcG9zLCBub2RlV2lkdGgsIG5vZGVIZWlnaHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZHJhd1VuZGVybGF5ID0gZnVuY3Rpb24gZHJhd1VuZGVybGF5KCkge1xuICAgICAgaWYgKHNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICAgIHIuZHJhd05vZGVVbmRlcmxheShjb250ZXh0LCBub2RlLCBwb3MsIG5vZGVXaWR0aCwgbm9kZUhlaWdodCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgICAgci5kcmF3RWxlbWVudFRleHQoY29udGV4dCwgbm9kZSwgbnVsbCwgZHJhd0xhYmVsKTtcbiAgICB9O1xuXG4gICAgdmFyIGdob3N0ID0gbm9kZS5wc3R5bGUoJ2dob3N0JykudmFsdWUgPT09ICd5ZXMnO1xuXG4gICAgaWYgKGdob3N0KSB7XG4gICAgICB2YXIgZ3ggPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXgnKS5wZlZhbHVlO1xuICAgICAgdmFyIGd5ID0gbm9kZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICAgIHZhciBnaG9zdE9wYWNpdHkgPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb3BhY2l0eScpLnZhbHVlO1xuICAgICAgdmFyIGVmZkdob3N0T3BhY2l0eSA9IGdob3N0T3BhY2l0eSAqIGVsZU9wYWNpdHk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShneCwgZ3kpO1xuICAgICAgc2V0dXBTaGFwZUNvbG9yKGdob3N0T3BhY2l0eSAqIGJnT3BhY2l0eSk7XG4gICAgICBkcmF3U2hhcGUoKTtcbiAgICAgIGRyYXdJbWFnZXMoZWZmR2hvc3RPcGFjaXR5LCB0cnVlKTtcbiAgICAgIHNldHVwQm9yZGVyQ29sb3IoZ2hvc3RPcGFjaXR5ICogYm9yZGVyT3BhY2l0eSk7XG4gICAgICBkcmF3Qm9yZGVyKCk7XG4gICAgICBkcmF3UGllKGRhcmtuZXNzICE9PSAwIHx8IGJvcmRlcldpZHRoICE9PSAwKTtcbiAgICAgIGRyYXdJbWFnZXMoZWZmR2hvc3RPcGFjaXR5LCBmYWxzZSk7XG4gICAgICBkYXJrZW4oZWZmR2hvc3RPcGFjaXR5KTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1neCwgLWd5KTtcbiAgICB9XG5cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1wb3MueCwgLXBvcy55KTtcbiAgICB9XG5cbiAgICBkcmF3VW5kZXJsYXkoKTtcblxuICAgIGlmICh1c2VQYXRocykge1xuICAgICAgY29udGV4dC50cmFuc2xhdGUocG9zLngsIHBvcy55KTtcbiAgICB9XG5cbiAgICBzZXR1cFNoYXBlQ29sb3IoKTtcbiAgICBkcmF3U2hhcGUoKTtcbiAgICBkcmF3SW1hZ2VzKGVsZU9wYWNpdHksIHRydWUpO1xuICAgIHNldHVwQm9yZGVyQ29sb3IoKTtcbiAgICBkcmF3Qm9yZGVyKCk7XG4gICAgZHJhd1BpZShkYXJrbmVzcyAhPT0gMCB8fCBib3JkZXJXaWR0aCAhPT0gMCk7XG4gICAgZHJhd0ltYWdlcyhlbGVPcGFjaXR5LCBmYWxzZSk7XG4gICAgZGFya2VuKCk7XG5cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1wb3MueCwgLXBvcy55KTtcbiAgICB9XG5cbiAgICBkcmF3VGV4dCgpO1xuICAgIGRyYXdPdmVybGF5KCk7IC8vXG4gICAgLy8gY2xlYW4gdXAgc2hpZnRcblxuICAgIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShiYi54MSwgYmIueTEpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZHJhd05vZGVPdmVybGF5VW5kZXJsYXkgPSBmdW5jdGlvbiBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheShvdmVybGF5T3JVbmRlcmxheSkge1xuICAgIGlmICghWydvdmVybGF5JywgJ3VuZGVybGF5J10uaW5jbHVkZXMob3ZlcmxheU9yVW5kZXJsYXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQsIG5vZGUsIHBvcywgbm9kZVdpZHRoLCBub2RlSGVpZ2h0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG5cbiAgICAgIGlmICghbm9kZS52aXNpYmxlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFkZGluZyA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgICAgdmFyIG9wYWNpdHkgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItb3BhY2l0eVwiKSkudmFsdWU7XG4gICAgICB2YXIgY29sb3IgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItY29sb3JcIikpLnZhbHVlO1xuICAgICAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLXNoYXBlXCIpKS52YWx1ZTtcblxuICAgICAgaWYgKG9wYWNpdHkgPiAwKSB7XG4gICAgICAgIHBvcyA9IHBvcyB8fCBub2RlLnBvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKG5vZGVXaWR0aCA9PSBudWxsIHx8IG5vZGVIZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuXG4gICAgICAgICAgbm9kZVdpZHRoID0gbm9kZS53aWR0aCgpICsgMiAqIF9wYWRkaW5nO1xuICAgICAgICAgIG5vZGVIZWlnaHQgPSBub2RlLmhlaWdodCgpICsgMiAqIF9wYWRkaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICAgICAgci5ub2RlU2hhcGVzW3NoYXBlXS5kcmF3KGNvbnRleHQsIHBvcy54LCBwb3MueSwgbm9kZVdpZHRoICsgcGFkZGluZyAqIDIsIG5vZGVIZWlnaHQgKyBwYWRkaW5nICogMik7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgQ1JwJDUuZHJhd05vZGVPdmVybGF5ID0gZHJhd05vZGVPdmVybGF5VW5kZXJsYXkoJ292ZXJsYXknKTtcbiAgQ1JwJDUuZHJhd05vZGVVbmRlcmxheSA9IGRyYXdOb2RlT3ZlcmxheVVuZGVybGF5KCd1bmRlcmxheScpOyAvLyBkb2VzIHRoZSBub2RlIGhhdmUgYXQgbGVhc3Qgb25lIHBpZSBwaWVjZT9cblxuICBDUnAkNS5oYXNQaWUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIG5vZGUgPSBub2RlWzBdOyAvLyBlbnN1cmUgZWxlIHJlZlxuXG4gICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuaGFzUGllO1xuICB9O1xuXG4gIENScCQ1LmRyYXdQaWUgPSBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgbm9kZU9wYWNpdHksIHBvcykge1xuICAgIG5vZGUgPSBub2RlWzBdOyAvLyBlbnN1cmUgZWxlIHJlZlxuXG4gICAgcG9zID0gcG9zIHx8IG5vZGUucG9zaXRpb24oKTtcbiAgICB2YXIgY3lTdHlsZSA9IG5vZGUuY3koKS5zdHlsZSgpO1xuICAgIHZhciBwaWVTaXplID0gbm9kZS5wc3R5bGUoJ3BpZS1zaXplJyk7XG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuICAgIHZhciBub2RlVyA9IG5vZGUud2lkdGgoKTtcbiAgICB2YXIgbm9kZUggPSBub2RlLmhlaWdodCgpO1xuICAgIHZhciByYWRpdXMgPSBNYXRoLm1pbihub2RlVywgbm9kZUgpIC8gMjsgLy8gbXVzdCBmaXQgaW4gbm9kZVxuXG4gICAgdmFyIGxhc3RQZXJjZW50ID0gMDsgLy8gd2hhdCAlIHRvIGNvbnRpbnVlIGRyYXdpbmcgcGllIHNsaWNlcyBmcm9tIG9uIFswLCAxXVxuXG4gICAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuXG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICB4ID0gMDtcbiAgICAgIHkgPSAwO1xuICAgIH1cblxuICAgIGlmIChwaWVTaXplLnVuaXRzID09PSAnJScpIHtcbiAgICAgIHJhZGl1cyA9IHJhZGl1cyAqIHBpZVNpemUucGZWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHBpZVNpemUucGZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByYWRpdXMgPSBwaWVTaXplLnBmVmFsdWUgLyAyO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IGN5U3R5bGUucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgICAgLy8gMS4uTlxuICAgICAgdmFyIHNpemUgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLXNpemUnKS52YWx1ZTtcbiAgICAgIHZhciBjb2xvciA9IG5vZGUucHN0eWxlKCdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtY29sb3InKS52YWx1ZTtcbiAgICAgIHZhciBvcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ3BpZS0nICsgaSArICctYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWUgKiBub2RlT3BhY2l0eTtcbiAgICAgIHZhciBwZXJjZW50ID0gc2l6ZSAvIDEwMDsgLy8gbWFwIGludGVnZXIgcmFuZ2UgWzAsIDEwMF0gdG8gWzAsIDFdXG4gICAgICAvLyBwZXJjZW50IGNhbid0IHB1c2ggYmV5b25kIDFcblxuICAgICAgaWYgKHBlcmNlbnQgKyBsYXN0UGVyY2VudCA+IDEpIHtcbiAgICAgICAgcGVyY2VudCA9IDEgLSBsYXN0UGVyY2VudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuZ2xlU3RhcnQgPSAxLjUgKiBNYXRoLlBJICsgMiAqIE1hdGguUEkgKiBsYXN0UGVyY2VudDsgLy8gc3RhcnQgYXQgMTIgbydjbG9jayBhbmQgZ28gY2xvY2t3aXNlXG5cbiAgICAgIHZhciBhbmdsZURlbHRhID0gMiAqIE1hdGguUEkgKiBwZXJjZW50O1xuICAgICAgdmFyIGFuZ2xlRW5kID0gYW5nbGVTdGFydCArIGFuZ2xlRGVsdGE7IC8vIGlnbm9yZSBpZlxuICAgICAgLy8gLSB6ZXJvIHNpemVcbiAgICAgIC8vIC0gd2UncmUgYWxyZWFkeSBiZXlvbmQgdGhlIGZ1bGwgY2lyY2xlXG4gICAgICAvLyAtIGFkZGluZyB0aGUgY3VycmVudCBzbGljZSB3b3VsZCBnbyBiZXlvbmQgdGhlIGZ1bGwgY2lyY2xlXG5cbiAgICAgIGlmIChzaXplID09PSAwIHx8IGxhc3RQZXJjZW50ID49IDEgfHwgbGFzdFBlcmNlbnQgKyBwZXJjZW50ID4gMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgY29udGV4dC5hcmMoeCwgeSwgcmFkaXVzLCBhbmdsZVN0YXJ0LCBhbmdsZUVuZCk7XG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgbGFzdFBlcmNlbnQgKz0gcGVyY2VudDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIENScCQ0ID0ge307XG4gIHZhciBtb3Rpb25CbHVyRGVsYXkgPSAxMDA7IC8vIHZhciBpc0ZpcmVmb3ggPSB0eXBlb2YgSW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnO1xuXG4gIENScCQ0LmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmRhdGEuY29udGV4dHNbMF07XG5cbiAgICBpZiAodGhpcy5mb3JjZWRQaXhlbFJhdGlvICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87XG4gICAgfVxuXG4gICAgdmFyIGJhY2tpbmdTdG9yZSA9IGNvbnRleHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IDE7XG4gICAgcmV0dXJuICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvIGJhY2tpbmdTdG9yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICB9O1xuXG4gIENScCQ0LnBhaW50Q2FjaGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHZhciBjYWNoZXMgPSB0aGlzLnBhaW50Q2FjaGVzID0gdGhpcy5wYWludENhY2hlcyB8fCBbXTtcbiAgICB2YXIgbmVlZFRvQ3JlYXRlQ2FjaGUgPSB0cnVlO1xuICAgIHZhciBjYWNoZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWNoZSA9IGNhY2hlc1tpXTtcblxuICAgICAgaWYgKGNhY2hlLmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgbmVlZFRvQ3JlYXRlQ2FjaGUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRUb0NyZWF0ZUNhY2hlKSB7XG4gICAgICBjYWNoZSA9IHtcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgfTtcbiAgICAgIGNhY2hlcy5wdXNoKGNhY2hlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGU7XG4gIH07XG5cbiAgQ1JwJDQuY3JlYXRlR3JhZGllbnRTdHlsZUZvciA9IGZ1bmN0aW9uIChjb250ZXh0LCBzaGFwZVN0eWxlTmFtZSwgZWxlLCBmaWxsLCBvcGFjaXR5KSB7XG4gICAgdmFyIGdyYWRpZW50U3R5bGU7XG4gICAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuICAgIHZhciBjb2xvcnMgPSBlbGUucHN0eWxlKHNoYXBlU3R5bGVOYW1lICsgJy1ncmFkaWVudC1zdG9wLWNvbG9ycycpLnZhbHVlLFxuICAgICAgICBwb3NpdGlvbnMgPSBlbGUucHN0eWxlKHNoYXBlU3R5bGVOYW1lICsgJy1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucycpLnBmVmFsdWU7XG5cbiAgICBpZiAoZmlsbCA9PT0gJ3JhZGlhbC1ncmFkaWVudCcpIHtcbiAgICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZWxlLnNvdXJjZUVuZHBvaW50KCksXG4gICAgICAgICAgICBlbmQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKSxcbiAgICAgICAgICAgIG1pZCA9IGVsZS5taWRwb2ludCgpO1xuICAgICAgICB2YXIgZDEgPSBkaXN0KHN0YXJ0LCBtaWQpO1xuICAgICAgICB2YXIgZDIgPSBkaXN0KGVuZCwgbWlkKTtcbiAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQobWlkLngsIG1pZC55LCAwLCBtaWQueCwgbWlkLnksIE1hdGgubWF4KGQxLCBkMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHBvcyA9IHVzZVBhdGhzID8ge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9IDogZWxlLnBvc2l0aW9uKCksXG4gICAgICAgICAgICB3aWR0aCA9IGVsZS5wYWRkZWRXaWR0aCgpLFxuICAgICAgICAgICAgaGVpZ2h0ID0gZWxlLnBhZGRlZEhlaWdodCgpO1xuICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChwb3MueCwgcG9zLnksIDAsIHBvcy54LCBwb3MueSwgTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICAgIHZhciBfc3RhcnQgPSBlbGUuc291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgICAgIF9lbmQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKTtcblxuICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfc3RhcnQueCwgX3N0YXJ0LnksIF9lbmQueCwgX2VuZC55KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfcG9zID0gdXNlUGF0aHMgPyB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH0gOiBlbGUucG9zaXRpb24oKSxcbiAgICAgICAgICAgIF93aWR0aCA9IGVsZS5wYWRkZWRXaWR0aCgpLFxuICAgICAgICAgICAgX2hlaWdodCA9IGVsZS5wYWRkZWRIZWlnaHQoKSxcbiAgICAgICAgICAgIGhhbGZXaWR0aCA9IF93aWR0aCAvIDIsXG4gICAgICAgICAgICBoYWxmSGVpZ2h0ID0gX2hlaWdodCAvIDI7XG5cbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uJykudmFsdWU7XG5cbiAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICBjYXNlICd0by1ib3R0b20nOlxuICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54LCBfcG9zLnkgLSBoYWxmSGVpZ2h0LCBfcG9zLngsIF9wb3MueSArIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd0by10b3AnOlxuICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54LCBfcG9zLnkgKyBoYWxmSGVpZ2h0LCBfcG9zLngsIF9wb3MueSAtIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd0by1sZWZ0JzpcbiAgICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3RvLXJpZ2h0JzpcbiAgICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55LCBfcG9zLnggKyBoYWxmV2lkdGgsIF9wb3MueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3RvLWJvdHRvbS1yaWdodCc6XG4gICAgICAgICAgY2FzZSAndG8tcmlnaHQtYm90dG9tJzpcbiAgICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAndG8tdG9wLXJpZ2h0JzpcbiAgICAgICAgICBjYXNlICd0by1yaWdodC10b3AnOlxuICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54IC0gaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0LCBfcG9zLnggKyBoYWxmV2lkdGgsIF9wb3MueSAtIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd0by1ib3R0b20tbGVmdCc6XG4gICAgICAgICAgY2FzZSAndG8tbGVmdC1ib3R0b20nOlxuICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgLSBoYWxmSGVpZ2h0LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd0by10b3AtbGVmdCc6XG4gICAgICAgICAgY2FzZSAndG8tbGVmdC10b3AnOlxuICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSAtIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBpbnZhbGlkIGdyYWRpZW50IHN0eWxlXG5cbiAgICB2YXIgaGFzUG9zaXRpb25zID0gcG9zaXRpb25zLmxlbmd0aCA9PT0gY29sb3JzLmxlbmd0aDtcbiAgICB2YXIgbGVuZ3RoID0gY29sb3JzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGdyYWRpZW50U3R5bGUuYWRkQ29sb3JTdG9wKGhhc1Bvc2l0aW9ucyA/IHBvc2l0aW9uc1tpXSA6IGkgLyAobGVuZ3RoIC0gMSksICdyZ2JhKCcgKyBjb2xvcnNbaV1bMF0gKyAnLCcgKyBjb2xvcnNbaV1bMV0gKyAnLCcgKyBjb2xvcnNbaV1bMl0gKyAnLCcgKyBvcGFjaXR5ICsgJyknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhZGllbnRTdHlsZTtcbiAgfTtcblxuICBDUnAkNC5ncmFkaWVudEZpbGxTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgICB2YXIgZ3JhZGllbnRTdHlsZSA9IHRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcihjb250ZXh0LCAnYmFja2dyb3VuZCcsIGVsZSwgZmlsbCwgb3BhY2l0eSk7XG4gICAgaWYgKCFncmFkaWVudFN0eWxlKSByZXR1cm4gbnVsbDsgLy8gZXJyb3JcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbiAgfTtcblxuICBDUnAkNC5jb2xvckZpbGxTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCByLCBnLCBiLCBhKSB7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsgciArICcsJyArIGcgKyAnLCcgKyBiICsgJywnICsgYSArICcpJzsgLy8gdHVybiBvZmYgZm9yIG5vdywgc2VlbXMgY29udGV4dCBkb2VzIGl0cyBvd24gY2FjaGluZ1xuICAgIC8vIHZhciBjYWNoZSA9IHRoaXMucGFpbnRDYWNoZShjb250ZXh0KTtcbiAgICAvLyB2YXIgZmlsbFN0eWxlID0gJ3JnYmEoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcsJyArIGEgKyAnKSc7XG4gICAgLy8gaWYoIGNhY2hlLmZpbGxTdHlsZSAhPT0gZmlsbFN0eWxlICl7XG4gICAgLy8gICBjb250ZXh0LmZpbGxTdHlsZSA9IGNhY2hlLmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcbiAgICAvLyB9XG4gIH07XG5cbiAgQ1JwJDQuZWxlRmlsbFN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgb3BhY2l0eSkge1xuICAgIHZhciBiYWNrZ3JvdW5kRmlsbCA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZmlsbCcpLnZhbHVlO1xuXG4gICAgaWYgKGJhY2tncm91bmRGaWxsID09PSAnbGluZWFyLWdyYWRpZW50JyB8fCBiYWNrZ3JvdW5kRmlsbCA9PT0gJ3JhZGlhbC1ncmFkaWVudCcpIHtcbiAgICAgIHRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoY29udGV4dCwgZWxlLCBiYWNrZ3JvdW5kRmlsbCwgb3BhY2l0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBiYWNrZ3JvdW5kQ29sb3IgPSBlbGUucHN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykudmFsdWU7XG4gICAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGJhY2tncm91bmRDb2xvclswXSwgYmFja2dyb3VuZENvbG9yWzFdLCBiYWNrZ3JvdW5kQ29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIH1cbiAgfTtcblxuICBDUnAkNC5ncmFkaWVudFN0cm9rZVN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgZmlsbCwgb3BhY2l0eSkge1xuICAgIHZhciBncmFkaWVudFN0eWxlID0gdGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKGNvbnRleHQsICdsaW5lJywgZWxlLCBmaWxsLCBvcGFjaXR5KTtcbiAgICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBlcnJvclxuXG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGdyYWRpZW50U3R5bGU7XG4gIH07XG5cbiAgQ1JwJDQuY29sb3JTdHJva2VTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCByLCBnLCBiLCBhKSB7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknOyAvLyB0dXJuIG9mZiBmb3Igbm93LCBzZWVtcyBjb250ZXh0IGRvZXMgaXRzIG93biBjYWNoaW5nXG4gICAgLy8gdmFyIGNhY2hlID0gdGhpcy5wYWludENhY2hlKGNvbnRleHQpO1xuICAgIC8vIHZhciBzdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuICAgIC8vIGlmKCBjYWNoZS5zdHJva2VTdHlsZSAhPT0gc3Ryb2tlU3R5bGUgKXtcbiAgICAvLyAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjYWNoZS5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuICAgIC8vIH1cbiAgfTtcblxuICBDUnAkNC5lbGVTdHJva2VTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIG9wYWNpdHkpIHtcbiAgICB2YXIgbGluZUZpbGwgPSBlbGUucHN0eWxlKCdsaW5lLWZpbGwnKS52YWx1ZTtcblxuICAgIGlmIChsaW5lRmlsbCA9PT0gJ2xpbmVhci1ncmFkaWVudCcgfHwgbGluZUZpbGwgPT09ICdyYWRpYWwtZ3JhZGllbnQnKSB7XG4gICAgICB0aGlzLmdyYWRpZW50U3Ryb2tlU3R5bGUoY29udGV4dCwgZWxlLCBsaW5lRmlsbCwgb3BhY2l0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsaW5lQ29sb3IgPSBlbGUucHN0eWxlKCdsaW5lLWNvbG9yJykudmFsdWU7XG4gICAgICB0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgbGluZUNvbG9yWzBdLCBsaW5lQ29sb3JbMV0sIGxpbmVDb2xvclsyXSwgb3BhY2l0eSk7XG4gICAgfVxuICB9OyAvLyBSZXNpemUgY2FudmFzXG5cblxuICBDUnAkNC5tYXRjaENhbnZhc1NpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBkYXRhID0gci5kYXRhO1xuICAgIHZhciBiYiA9IHIuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1xuICAgIHZhciB3aWR0aCA9IGJiWzJdO1xuICAgIHZhciBoZWlnaHQgPSBiYlszXTtcbiAgICB2YXIgcGl4ZWxSYXRpbyA9IHIuZ2V0UGl4ZWxSYXRpbygpO1xuICAgIHZhciBtYlB4UmF0aW8gPSByLm1vdGlvbkJsdXJQeFJhdGlvO1xuXG4gICAgaWYgKGNvbnRhaW5lciA9PT0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV0gfHwgY29udGFpbmVyID09PSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSkge1xuICAgICAgcGl4ZWxSYXRpbyA9IG1iUHhSYXRpbztcbiAgICB9XG5cbiAgICB2YXIgY2FudmFzV2lkdGggPSB3aWR0aCAqIHBpeGVsUmF0aW87XG4gICAgdmFyIGNhbnZhc0hlaWdodCA9IGhlaWdodCAqIHBpeGVsUmF0aW87XG4gICAgdmFyIGNhbnZhcztcblxuICAgIGlmIChjYW52YXNXaWR0aCA9PT0gci5jYW52YXNXaWR0aCAmJiBjYW52YXNIZWlnaHQgPT09IHIuY2FudmFzSGVpZ2h0KSB7XG4gICAgICByZXR1cm47IC8vIHNhdmUgY3ljbGVzIGlmIHNhbWVcbiAgICB9XG5cbiAgICByLmZvbnRDYWNoZXMgPSBudWxsOyAvLyByZXNpemluZyByZXNldHMgdGhlIHN0eWxlXG5cbiAgICB2YXIgY2FudmFzQ29udGFpbmVyID0gZGF0YS5jYW52YXNDb250YWluZXI7XG4gICAgY2FudmFzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIGNhbnZhc0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByLkNBTlZBU19MQVlFUlM7IGkrKykge1xuICAgICAgY2FudmFzID0gZGF0YS5jYW52YXNlc1tpXTtcbiAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgci5CVUZGRVJfQ09VTlQ7IGkrKykge1xuICAgICAgY2FudmFzID0gZGF0YS5idWZmZXJDYW52YXNlc1tpXTtcbiAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIHIudGV4dHVyZU11bHQgPSAxO1xuXG4gICAgaWYgKHBpeGVsUmF0aW8gPD0gMSkge1xuICAgICAgY2FudmFzID0gZGF0YS5idWZmZXJDYW52YXNlc1tyLlRFWFRVUkVfQlVGRkVSXTtcbiAgICAgIHIudGV4dHVyZU11bHQgPSAyO1xuICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGggKiByLnRleHR1cmVNdWx0O1xuICAgICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHIudGV4dHVyZU11bHQ7XG4gICAgfVxuXG4gICAgci5jYW52YXNXaWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgIHIuY2FudmFzSGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICB9O1xuXG4gIENScCQ0LnJlbmRlclRvID0gZnVuY3Rpb24gKGN4dCwgem9vbSwgcGFuLCBweFJhdGlvKSB7XG4gICAgdGhpcy5yZW5kZXIoe1xuICAgICAgZm9yY2VkQ29udGV4dDogY3h0LFxuICAgICAgZm9yY2VkWm9vbTogem9vbSxcbiAgICAgIGZvcmNlZFBhbjogcGFuLFxuICAgICAgZHJhd0FsbExheWVyczogdHJ1ZSxcbiAgICAgIGZvcmNlZFB4UmF0aW86IHB4UmF0aW9cbiAgICB9KTtcbiAgfTtcblxuICBDUnAkNC5yZW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHN0YXRpY0VtcHR5T2JqZWN0KCk7XG4gICAgdmFyIGZvcmNlZENvbnRleHQgPSBvcHRpb25zLmZvcmNlZENvbnRleHQ7XG4gICAgdmFyIGRyYXdBbGxMYXllcnMgPSBvcHRpb25zLmRyYXdBbGxMYXllcnM7XG4gICAgdmFyIGRyYXdPbmx5Tm9kZUxheWVyID0gb3B0aW9ucy5kcmF3T25seU5vZGVMYXllcjtcbiAgICB2YXIgZm9yY2VkWm9vbSA9IG9wdGlvbnMuZm9yY2VkWm9vbTtcbiAgICB2YXIgZm9yY2VkUGFuID0gb3B0aW9ucy5mb3JjZWRQYW47XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciBwaXhlbFJhdGlvID0gb3B0aW9ucy5mb3JjZWRQeFJhdGlvID09PSB1bmRlZmluZWQgPyB0aGlzLmdldFBpeGVsUmF0aW8oKSA6IG9wdGlvbnMuZm9yY2VkUHhSYXRpbztcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBkYXRhID0gci5kYXRhO1xuICAgIHZhciBuZWVkRHJhdyA9IGRhdGEuY2FudmFzTmVlZHNSZWRyYXc7XG4gICAgdmFyIHRleHR1cmVEcmF3ID0gci50ZXh0dXJlT25WaWV3cG9ydCAmJiAhZm9yY2VkQ29udGV4dCAmJiAoci5waW5jaGluZyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLnN3aXBlUGFubmluZyB8fCByLmRhdGEud2hlZWxab29taW5nKTtcbiAgICB2YXIgbW90aW9uQmx1ciA9IG9wdGlvbnMubW90aW9uQmx1ciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tb3Rpb25CbHVyIDogci5tb3Rpb25CbHVyO1xuICAgIHZhciBtYlB4UmF0aW8gPSByLm1vdGlvbkJsdXJQeFJhdGlvO1xuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciBpbk5vZGVEcmFnR2VzdHVyZSA9IHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcztcbiAgICB2YXIgaW5Cb3hTZWxlY3Rpb24gPSByLmhvdmVyRGF0YS5zZWxlY3RpbmcgfHwgci50b3VjaERhdGEuc2VsZWN0aW5nID8gdHJ1ZSA6IGZhbHNlO1xuICAgIG1vdGlvbkJsdXIgPSBtb3Rpb25CbHVyICYmICFmb3JjZWRDb250ZXh0ICYmIHIubW90aW9uQmx1ckVuYWJsZWQgJiYgIWluQm94U2VsZWN0aW9uO1xuICAgIHZhciBtb3Rpb25CbHVyRmFkZUVmZmVjdCA9IG1vdGlvbkJsdXI7XG5cbiAgICBpZiAoIWZvcmNlZENvbnRleHQpIHtcbiAgICAgIGlmIChyLnByZXZQeFJhdGlvICE9PSBwaXhlbFJhdGlvKSB7XG4gICAgICAgIHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCk7XG4gICAgICAgIHIubWF0Y2hDYW52YXNTaXplKHIuY29udGFpbmVyKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICByLnByZXZQeFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICB9XG5cbiAgICBpZiAoIWZvcmNlZENvbnRleHQgJiYgci5tb3Rpb25CbHVyVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHIubW90aW9uQmx1clRpbWVvdXQpO1xuICAgIH1cblxuICAgIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgICBpZiAoci5tYkZyYW1lcyA9PSBudWxsKSB7XG4gICAgICAgIHIubWJGcmFtZXMgPSAwO1xuICAgICAgfVxuXG4gICAgICByLm1iRnJhbWVzKys7XG5cbiAgICAgIGlmIChyLm1iRnJhbWVzIDwgMykge1xuICAgICAgICAvLyBuZWVkIHNldmVyYWwgZnJhbWVzIGJlZm9yZSBldmVuIGhpZ2ggcXVhbGl0eSBtb3Rpb25ibHVyXG4gICAgICAgIG1vdGlvbkJsdXJGYWRlRWZmZWN0ID0gZmFsc2U7XG4gICAgICB9IC8vIGdvIHRvIGxvd2VyIHF1YWxpdHkgYmx1cnJ5IGZyYW1lcyB3aGVuIHNldmVyYWwgbS9iIGZyYW1lcyBoYXZlIGJlZW4gcmVuZGVyZWQgKGF2b2lkcyBmbGFzaGluZylcblxuXG4gICAgICBpZiAoci5tYkZyYW1lcyA+IHIubWluTWJMb3dRdWFsRnJhbWVzKSB7XG4gICAgICAgIC8vci5mdWxsUXVhbGl0eU1iID0gZmFsc2U7XG4gICAgICAgIHIubW90aW9uQmx1clB4UmF0aW8gPSByLm1iUHhSQmx1cnJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyLmNsZWFyaW5nTW90aW9uQmx1cikge1xuICAgICAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gICAgfSAvLyBiL2MgZHJhd1RvQ29udGV4dCgpIG1heSBiZSBhc3luYyB3LnIudC4gcmVkcmF3KCksIGtlZXAgdHJhY2sgb2YgbGFzdCB0ZXh0dXJlIGZyYW1lXG4gICAgLy8gYmVjYXVzZSBhIHJvZ3VlIGFzeW5jIHRleHR1cmUgZnJhbWUgd291bGQgY2xlYXIgbmVlZERyYXdcblxuXG4gICAgaWYgKHIudGV4dHVyZURyYXdMYXN0RnJhbWUgJiYgIXRleHR1cmVEcmF3KSB7XG4gICAgICBuZWVkRHJhd1tyLk5PREVdID0gdHJ1ZTtcbiAgICAgIG5lZWREcmF3W3IuU0VMRUNUX0JPWF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgdmFyIGVmZmVjdGl2ZVpvb20gPSBmb3JjZWRab29tICE9PSB1bmRlZmluZWQgPyBmb3JjZWRab29tIDogem9vbTtcbiAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgdmFyIGVmZmVjdGl2ZVBhbiA9IHtcbiAgICAgIHg6IHBhbi54LFxuICAgICAgeTogcGFuLnlcbiAgICB9O1xuICAgIHZhciB2cCA9IHtcbiAgICAgIHpvb206IHpvb20sXG4gICAgICBwYW46IHtcbiAgICAgICAgeDogcGFuLngsXG4gICAgICAgIHk6IHBhbi55XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgcHJldlZwID0gci5wcmV2Vmlld3BvcnQ7XG4gICAgdmFyIHZpZXdwb3J0SXNEaWZmID0gcHJldlZwID09PSB1bmRlZmluZWQgfHwgdnAuem9vbSAhPT0gcHJldlZwLnpvb20gfHwgdnAucGFuLnggIT09IHByZXZWcC5wYW4ueCB8fCB2cC5wYW4ueSAhPT0gcHJldlZwLnBhbi55OyAvLyB3ZSB3YW50IHRoZSBsb3cgcXVhbGl0eSBtb3Rpb25ibHVyIG9ubHkgd2hlbiB0aGUgdmlld3BvcnQgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgZXRjICh3aGVyZSBpdCdzIG5vdCBub3RpY2VkKVxuXG4gICAgaWYgKCF2aWV3cG9ydElzRGlmZiAmJiAhKGluTm9kZURyYWdHZXN0dXJlICYmICFoYXNDb21wb3VuZE5vZGVzKSkge1xuICAgICAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGZvcmNlZFBhbikge1xuICAgICAgZWZmZWN0aXZlUGFuID0gZm9yY2VkUGFuO1xuICAgIH0gLy8gYXBwbHkgcGl4ZWwgcmF0aW9cblxuXG4gICAgZWZmZWN0aXZlWm9vbSAqPSBwaXhlbFJhdGlvO1xuICAgIGVmZmVjdGl2ZVBhbi54ICo9IHBpeGVsUmF0aW87XG4gICAgZWZmZWN0aXZlUGFuLnkgKj0gcGl4ZWxSYXRpbztcbiAgICB2YXIgZWxlcyA9IHIuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtcblxuICAgIGZ1bmN0aW9uIG1iY2xlYXIoY29udGV4dCwgeCwgeSwgdywgaCkge1xuICAgICAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcbiAgICAgIHIuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgMjU1LCAyNTUsIDI1NSwgci5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KTtcbiAgICAgIGNvbnRleHQuZmlsbFJlY3QoeCwgeSwgdywgaCk7XG4gICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIGNsZWFyKSB7XG4gICAgICB2YXIgZVBhbiwgZVpvb20sIHcsIGg7XG5cbiAgICAgIGlmICghci5jbGVhcmluZ01vdGlvbkJsdXIgJiYgKGNvbnRleHQgPT09IGRhdGEuYnVmZmVyQ29udGV4dHNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSB8fCBjb250ZXh0ID09PSBkYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pKSB7XG4gICAgICAgIGVQYW4gPSB7XG4gICAgICAgICAgeDogcGFuLnggKiBtYlB4UmF0aW8sXG4gICAgICAgICAgeTogcGFuLnkgKiBtYlB4UmF0aW9cbiAgICAgICAgfTtcbiAgICAgICAgZVpvb20gPSB6b29tICogbWJQeFJhdGlvO1xuICAgICAgICB3ID0gci5jYW52YXNXaWR0aCAqIG1iUHhSYXRpbztcbiAgICAgICAgaCA9IHIuY2FudmFzSGVpZ2h0ICogbWJQeFJhdGlvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZVBhbiA9IGVmZmVjdGl2ZVBhbjtcbiAgICAgICAgZVpvb20gPSBlZmZlY3RpdmVab29tO1xuICAgICAgICB3ID0gci5jYW52YXNXaWR0aDtcbiAgICAgICAgaCA9IHIuY2FudmFzSGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgICAgaWYgKGNsZWFyID09PSAnbW90aW9uQmx1cicpIHtcbiAgICAgICAgbWJjbGVhcihjb250ZXh0LCAwLCAwLCB3LCBoKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZvcmNlZENvbnRleHQgJiYgKGNsZWFyID09PSB1bmRlZmluZWQgfHwgY2xlYXIpKSB7XG4gICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRyYXdBbGxMYXllcnMpIHtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZVBhbi54LCBlUGFuLnkpO1xuICAgICAgICBjb250ZXh0LnNjYWxlKGVab29tLCBlWm9vbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JjZWRQYW4pIHtcbiAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZm9yY2VkUGFuLngsIGZvcmNlZFBhbi55KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlZFpvb20pIHtcbiAgICAgICAgY29udGV4dC5zY2FsZShmb3JjZWRab29tLCBmb3JjZWRab29tKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRleHR1cmVEcmF3KSB7XG4gICAgICByLnRleHR1cmVEcmF3TGFzdEZyYW1lID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmVEcmF3KSB7XG4gICAgICByLnRleHR1cmVEcmF3TGFzdEZyYW1lID0gdHJ1ZTtcblxuICAgICAgaWYgKCFyLnRleHR1cmVDYWNoZSkge1xuICAgICAgICByLnRleHR1cmVDYWNoZSA9IHt9O1xuICAgICAgICByLnRleHR1cmVDYWNoZS5iYiA9IGN5Lm11dGFibGVFbGVtZW50cygpLmJvdW5kaW5nQm94KCk7XG4gICAgICAgIHIudGV4dHVyZUNhY2hlLnRleHR1cmUgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5URVhUVVJFX0JVRkZFUl07XG4gICAgICAgIHZhciBjeHQgPSByLmRhdGEuYnVmZmVyQ29udGV4dHNbci5URVhUVVJFX0JVRkZFUl07XG4gICAgICAgIGN4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgIGN4dC5jbGVhclJlY3QoMCwgMCwgci5jYW52YXNXaWR0aCAqIHIudGV4dHVyZU11bHQsIHIuY2FudmFzSGVpZ2h0ICogci50ZXh0dXJlTXVsdCk7XG4gICAgICAgIHIucmVuZGVyKHtcbiAgICAgICAgICBmb3JjZWRDb250ZXh0OiBjeHQsXG4gICAgICAgICAgZHJhd09ubHlOb2RlTGF5ZXI6IHRydWUsXG4gICAgICAgICAgZm9yY2VkUHhSYXRpbzogcGl4ZWxSYXRpbyAqIHIudGV4dHVyZU11bHRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB2cCA9IHIudGV4dHVyZUNhY2hlLnZpZXdwb3J0ID0ge1xuICAgICAgICAgIHpvb206IGN5Lnpvb20oKSxcbiAgICAgICAgICBwYW46IGN5LnBhbigpLFxuICAgICAgICAgIHdpZHRoOiByLmNhbnZhc1dpZHRoLFxuICAgICAgICAgIGhlaWdodDogci5jYW52YXNIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgdnAubXBhbiA9IHtcbiAgICAgICAgICB4OiAoMCAtIHZwLnBhbi54KSAvIHZwLnpvb20sXG4gICAgICAgICAgeTogKDAgLSB2cC5wYW4ueSkgLyB2cC56b29tXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICAgIG5lZWREcmF3W3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgIHZhciBjb250ZXh0ID0gZGF0YS5jb250ZXh0c1tyLk5PREVdO1xuICAgICAgdmFyIHRleHR1cmUgPSByLnRleHR1cmVDYWNoZS50ZXh0dXJlO1xuICAgICAgdmFyIHZwID0gci50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7XG4gICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgICAgaWYgKG1vdGlvbkJsdXIpIHtcbiAgICAgICAgbWJjbGVhcihjb250ZXh0LCAwLCAwLCB2cC53aWR0aCwgdnAuaGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3V0c2lkZUJnQ29sb3IgPSBzdHlsZS5jb3JlKCdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InKS52YWx1ZTtcbiAgICAgIHZhciBvdXRzaWRlQmdPcGFjaXR5ID0gc3R5bGUuY29yZSgnb3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHknKS52YWx1ZTtcbiAgICAgIHIuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgb3V0c2lkZUJnQ29sb3JbMF0sIG91dHNpZGVCZ0NvbG9yWzFdLCBvdXRzaWRlQmdDb2xvclsyXSwgb3V0c2lkZUJnT3BhY2l0eSk7XG4gICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgICBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIGZhbHNlKTtcbiAgICAgIGNvbnRleHQuY2xlYXJSZWN0KHZwLm1wYW4ueCwgdnAubXBhbi55LCB2cC53aWR0aCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvLCB2cC5oZWlnaHQgLyB2cC56b29tIC8gcGl4ZWxSYXRpbyk7XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlLCB2cC5tcGFuLngsIHZwLm1wYW4ueSwgdnAud2lkdGggLyB2cC56b29tIC8gcGl4ZWxSYXRpbywgdnAuaGVpZ2h0IC8gdnAuem9vbSAvIHBpeGVsUmF0aW8pO1xuICAgIH0gZWxzZSBpZiAoci50ZXh0dXJlT25WaWV3cG9ydCAmJiAhZm9yY2VkQ29udGV4dCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGNhY2hlIHNpbmNlIHdlIGRvbid0IG5lZWQgaXRcbiAgICAgIHIudGV4dHVyZUNhY2hlID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZXh0ZW50ID0gY3kuZXh0ZW50KCk7XG4gICAgdmFyIHZwTWFuaXAgPSByLnBpbmNoaW5nIHx8IHIuaG92ZXJEYXRhLmRyYWdnaW5nIHx8IHIuc3dpcGVQYW5uaW5nIHx8IHIuZGF0YS53aGVlbFpvb21pbmcgfHwgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzIHx8IHIuY3kuYW5pbWF0ZWQoKTtcbiAgICB2YXIgaGlkZUVkZ2VzID0gci5oaWRlRWRnZXNPblZpZXdwb3J0ICYmIHZwTWFuaXA7XG4gICAgdmFyIG5lZWRNYkNsZWFyID0gW107XG4gICAgbmVlZE1iQ2xlYXJbci5OT0RFXSA9ICFuZWVkRHJhd1tyLk5PREVdICYmIG1vdGlvbkJsdXIgJiYgIXIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5OT0RFXSB8fCByLmNsZWFyaW5nTW90aW9uQmx1cjtcblxuICAgIGlmIChuZWVkTWJDbGVhcltyLk5PREVdKSB7XG4gICAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSB0cnVlO1xuICAgIH1cblxuICAgIG5lZWRNYkNsZWFyW3IuRFJBR10gPSAhbmVlZERyYXdbci5EUkFHXSAmJiBtb3Rpb25CbHVyICYmICFyLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuRFJBR10gfHwgci5jbGVhcmluZ01vdGlvbkJsdXI7XG5cbiAgICBpZiAobmVlZE1iQ2xlYXJbci5EUkFHXSkge1xuICAgICAgci5jbGVhcmVkRm9yTW90aW9uQmx1cltyLkRSQUddID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZERyYXdbci5OT0RFXSB8fCBkcmF3QWxsTGF5ZXJzIHx8IGRyYXdPbmx5Tm9kZUxheWVyIHx8IG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLk5PREVdICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICAgIHZhciBjb250ZXh0ID0gZm9yY2VkQ29udGV4dCB8fCAodXNlQnVmZmVyID8gci5kYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV0gOiBkYXRhLmNvbnRleHRzW3IuTk9ERV0pO1xuICAgICAgdmFyIGNsZWFyID0gbW90aW9uQmx1ciAmJiAhdXNlQnVmZmVyID8gJ21vdGlvbkJsdXInIDogdW5kZWZpbmVkO1xuICAgICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBjbGVhcik7XG5cbiAgICAgIGlmIChoaWRlRWRnZXMpIHtcbiAgICAgICAgci5kcmF3Q2FjaGVkTm9kZXMoY29udGV4dCwgZWxlcy5ub25kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgci5kcmF3TGF5ZXJlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMubm9uZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHIuZGVidWcpIHtcbiAgICAgICAgci5kcmF3RGVidWdQb2ludHMoY29udGV4dCwgZWxlcy5ub25kcmFnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkcmF3QWxsTGF5ZXJzICYmICFtb3Rpb25CbHVyKSB7XG4gICAgICAgIG5lZWREcmF3W3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRyYXdPbmx5Tm9kZUxheWVyICYmIChuZWVkRHJhd1tyLkRSQUddIHx8IGRyYXdBbGxMYXllcnMgfHwgbmVlZE1iQ2xlYXJbci5EUkFHXSkpIHtcbiAgICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLkRSQUddICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICAgIHZhciBjb250ZXh0ID0gZm9yY2VkQ29udGV4dCB8fCAodXNlQnVmZmVyID8gci5kYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10gOiBkYXRhLmNvbnRleHRzW3IuRFJBR10pO1xuICAgICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBtb3Rpb25CbHVyICYmICF1c2VCdWZmZXIgPyAnbW90aW9uQmx1cicgOiB1bmRlZmluZWQpO1xuXG4gICAgICBpZiAoaGlkZUVkZ2VzKSB7XG4gICAgICAgIHIuZHJhd0NhY2hlZE5vZGVzKGNvbnRleHQsIGVsZXMuZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMuZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHIuZGVidWcpIHtcbiAgICAgICAgci5kcmF3RGVidWdQb2ludHMoY29udGV4dCwgZWxlcy5kcmFnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkcmF3QWxsTGF5ZXJzICYmICFtb3Rpb25CbHVyKSB7XG4gICAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoci5zaG93RnBzIHx8ICFkcmF3T25seU5vZGVMYXllciAmJiBuZWVkRHJhd1tyLlNFTEVDVF9CT1hdICYmICFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGZvcmNlZENvbnRleHQgfHwgZGF0YS5jb250ZXh0c1tyLlNFTEVDVF9CT1hdO1xuICAgICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0KTtcblxuICAgICAgaWYgKHIuc2VsZWN0aW9uWzRdID09IDEgJiYgKHIuaG92ZXJEYXRhLnNlbGVjdGluZyB8fCByLnRvdWNoRGF0YS5zZWxlY3RpbmcpKSB7XG4gICAgICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgICAgIHZhciBib3JkZXJXaWR0aCA9IHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoJykudmFsdWUgLyB6b29tO1xuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMl0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgICAgY29udGV4dC5maWxsUmVjdChyLnNlbGVjdGlvblswXSwgci5zZWxlY3Rpb25bMV0sIHIuc2VsZWN0aW9uWzJdIC0gci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzNdIC0gci5zZWxlY3Rpb25bMV0pO1xuXG4gICAgICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcicpLnZhbHVlWzFdICsgJywnICsgc3R5bGUuY29yZSgnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScpLnZhbHVlICsgJyknO1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChyLnNlbGVjdGlvblswXSwgci5zZWxlY3Rpb25bMV0sIHIuc2VsZWN0aW9uWzJdIC0gci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzNdIC0gci5zZWxlY3Rpb25bMV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmJnQWN0aXZlUG9zaXN0aW9uICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgICAgdmFyIHpvb20gPSByLmN5Lnpvb20oKTtcbiAgICAgICAgdmFyIHBvcyA9IGRhdGEuYmdBY3RpdmVQb3Npc3Rpb247XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1jb2xvcicpLnZhbHVlWzBdICsgJywnICsgc3R5bGUuY29yZSgnYWN0aXZlLWJnLWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdhY3RpdmUtYmctY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1vcGFjaXR5JykudmFsdWUgKyAnKSc7XG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnRleHQuYXJjKHBvcy54LCBwb3MueSwgc3R5bGUuY29yZSgnYWN0aXZlLWJnLXNpemUnKS5wZlZhbHVlIC8gem9vbSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRpbWVUb1JlbmRlciA9IHIubGFzdFJlZHJhd1RpbWU7XG5cbiAgICAgIGlmIChyLnNob3dGcHMgJiYgdGltZVRvUmVuZGVyKSB7XG4gICAgICAgIHRpbWVUb1JlbmRlciA9IE1hdGgucm91bmQodGltZVRvUmVuZGVyKTtcbiAgICAgICAgdmFyIGZwcyA9IE1hdGgucm91bmQoMTAwMCAvIHRpbWVUb1JlbmRlcik7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJ3JnYmEoMjU1LCAwLCAwLCAwLjc1KSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTtcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnMSBmcmFtZSA9ICcgKyB0aW1lVG9SZW5kZXIgKyAnIG1zID0gJyArIGZwcyArICcgZnBzJywgMCwgMjApO1xuICAgICAgICB2YXIgbWF4RnBzID0gNjA7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdCgwLCAzMCwgMjUwLCAyMCk7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMzAsIDI1MCAqIE1hdGgubWluKGZwcyAvIG1heEZwcywgMSksIDIwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgICAgIG5lZWREcmF3W3IuU0VMRUNUX0JPWF0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IC8vIG1vdGlvbmJsdXI6IGJsaXQgcmVuZGVyZWQgYmx1cnJ5IGZyYW1lc1xuXG5cbiAgICBpZiAobW90aW9uQmx1ciAmJiBtYlB4UmF0aW8gIT09IDEpIHtcbiAgICAgIHZhciBjeHROb2RlID0gZGF0YS5jb250ZXh0c1tyLk5PREVdO1xuICAgICAgdmFyIHR4dE5vZGUgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXTtcbiAgICAgIHZhciBjeHREcmFnID0gZGF0YS5jb250ZXh0c1tyLkRSQUddO1xuICAgICAgdmFyIHR4dERyYWcgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTtcblxuICAgICAgdmFyIGRyYXdNb3Rpb25CbHVyID0gZnVuY3Rpb24gZHJhd01vdGlvbkJsdXIoY3h0LCB0eHQsIG5lZWRDbGVhcikge1xuICAgICAgICBjeHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuXG4gICAgICAgIGlmIChuZWVkQ2xlYXIgfHwgIW1vdGlvbkJsdXJGYWRlRWZmZWN0KSB7XG4gICAgICAgICAgY3h0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWJjbGVhcihjeHQsIDAsIDAsIHIuY2FudmFzV2lkdGgsIHIuY2FudmFzSGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBweHIgPSBtYlB4UmF0aW87XG4gICAgICAgIGN4dC5kcmF3SW1hZ2UodHh0LCAvLyBpbWdcbiAgICAgICAgMCwgMCwgLy8gc3gsIHN5XG4gICAgICAgIHIuY2FudmFzV2lkdGggKiBweHIsIHIuY2FudmFzSGVpZ2h0ICogcHhyLCAvLyBzdywgc2hcbiAgICAgICAgMCwgMCwgLy8geCwgeVxuICAgICAgICByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCAvLyB3LCBoXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBpZiAobmVlZERyYXdbci5OT0RFXSB8fCBuZWVkTWJDbGVhcltyLk5PREVdKSB7XG4gICAgICAgIGRyYXdNb3Rpb25CbHVyKGN4dE5vZGUsIHR4dE5vZGUsIG5lZWRNYkNsZWFyW3IuTk9ERV0pO1xuICAgICAgICBuZWVkRHJhd1tyLk5PREVdID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkRHJhd1tyLkRSQUddIHx8IG5lZWRNYkNsZWFyW3IuRFJBR10pIHtcbiAgICAgICAgZHJhd01vdGlvbkJsdXIoY3h0RHJhZywgdHh0RHJhZywgbmVlZE1iQ2xlYXJbci5EUkFHXSk7XG4gICAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByLnByZXZWaWV3cG9ydCA9IHZwO1xuXG4gICAgaWYgKHIuY2xlYXJpbmdNb3Rpb25CbHVyKSB7XG4gICAgICByLmNsZWFyaW5nTW90aW9uQmx1ciA9IGZhbHNlO1xuICAgICAgci5tb3Rpb25CbHVyQ2xlYXJlZCA9IHRydWU7XG4gICAgICByLm1vdGlvbkJsdXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgICByLm1vdGlvbkJsdXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHIubW90aW9uQmx1clRpbWVvdXQgPSBudWxsO1xuICAgICAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgICAgci5jbGVhcmVkRm9yTW90aW9uQmx1cltyLkRSQUddID0gZmFsc2U7XG4gICAgICAgIHIubW90aW9uQmx1ciA9IGZhbHNlO1xuICAgICAgICByLmNsZWFyaW5nTW90aW9uQmx1ciA9ICF0ZXh0dXJlRHJhdztcbiAgICAgICAgci5tYkZyYW1lcyA9IDA7XG4gICAgICAgIG5lZWREcmF3W3IuTk9ERV0gPSB0cnVlO1xuICAgICAgICBuZWVkRHJhd1tyLkRSQUddID0gdHJ1ZTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH0sIG1vdGlvbkJsdXJEZWxheSk7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JjZWRDb250ZXh0KSB7XG4gICAgICBjeS5lbWl0KCdyZW5kZXInKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIENScCQzID0ge307IC8vIEBPIFBvbHlnb24gZHJhd2luZ1xuXG4gIENScCQzLmRyYXdQb2x5Z29uUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpIHtcbiAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIID0gaGVpZ2h0IC8gMjtcblxuICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4ICsgaGFsZlcgKiBwb2ludHNbMF0sIHkgKyBoYWxmSCAqIHBvaW50c1sxXSk7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgIGNvbnRleHQubGluZVRvKHggKyBoYWxmVyAqIHBvaW50c1tpICogMl0sIHkgKyBoYWxmSCAqIHBvaW50c1tpICogMiArIDFdKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuXG4gIENScCQzLmRyYXdSb3VuZFBvbHlnb25QYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cykge1xuICAgIHZhciBoYWxmVyA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkggPSBoZWlnaHQgLyAyO1xuICAgIHZhciBjb3JuZXJSYWRpdXMgPSBnZXRSb3VuZFBvbHlnb25SYWRpdXMod2lkdGgsIGhlaWdodCk7XG5cbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBvaW50cy5sZW5ndGggLyA0OyBfaSsrKSB7XG4gICAgICB2YXIgc291cmNlVXYgPSB2b2lkIDAsXG4gICAgICAgICAgZGVzdFV2ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoX2kgPT09IDApIHtcbiAgICAgICAgc291cmNlVXYgPSBwb2ludHMubGVuZ3RoIC0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZVV2ID0gX2kgKiA0IC0gMjtcbiAgICAgIH1cblxuICAgICAgZGVzdFV2ID0gX2kgKiA0ICsgMjtcbiAgICAgIHZhciBweCA9IHggKyBoYWxmVyAqIHBvaW50c1tfaSAqIDRdO1xuICAgICAgdmFyIHB5ID0geSArIGhhbGZIICogcG9pbnRzW19pICogNCArIDFdO1xuICAgICAgdmFyIGNvc1RoZXRhID0gLXBvaW50c1tzb3VyY2VVdl0gKiBwb2ludHNbZGVzdFV2XSAtIHBvaW50c1tzb3VyY2VVdiArIDFdICogcG9pbnRzW2Rlc3RVdiArIDFdO1xuICAgICAgdmFyIG9mZnNldCA9IGNvcm5lclJhZGl1cyAvIE1hdGgudGFuKE1hdGguYWNvcyhjb3NUaGV0YSkgLyAyKTtcbiAgICAgIHZhciBjcDB4ID0gcHggLSBvZmZzZXQgKiBwb2ludHNbc291cmNlVXZdO1xuICAgICAgdmFyIGNwMHkgPSBweSAtIG9mZnNldCAqIHBvaW50c1tzb3VyY2VVdiArIDFdO1xuICAgICAgdmFyIGNwMXggPSBweCArIG9mZnNldCAqIHBvaW50c1tkZXN0VXZdO1xuICAgICAgdmFyIGNwMXkgPSBweSArIG9mZnNldCAqIHBvaW50c1tkZXN0VXYgKyAxXTtcblxuICAgICAgaWYgKF9pID09PSAwKSB7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKGNwMHgsIGNwMHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8oY3AweCwgY3AweSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuYXJjVG8ocHgsIHB5LCBjcDF4LCBjcDF5LCBjb3JuZXJSYWRpdXMpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH07IC8vIFJvdW5kIHJlY3RhbmdsZSBkcmF3aW5nXG5cblxuICBDUnAkMy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICB2YXIgY29ybmVyUmFkaXVzID0gZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCk7XG5cbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfSAvLyBTdGFydCBhdCB0b3AgbWlkZGxlXG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTsgLy8gQXJjIGZyb20gbWlkZGxlIHRvcCB0byByaWdodCBzaWRlXG5cbiAgICBjb250ZXh0LmFyY1RvKHggKyBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0LCB4ICsgaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpOyAvLyBBcmMgZnJvbSByaWdodCBzaWRlIHRvIGJvdHRvbVxuXG4gICAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCwgeSArIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyk7IC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcblxuICAgIGNvbnRleHQuYXJjVG8oeCAtIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHggLSBoYWxmV2lkdGgsIHksIGNvcm5lclJhZGl1cyk7IC8vIEFyYyBmcm9tIGxlZnQgc2lkZSB0byB0b3BCb3JkZXJcblxuICAgIGNvbnRleHQuYXJjVG8oeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQsIHgsIHkgLSBoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMpOyAvLyBKb2luIGxpbmVcblxuICAgIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuXG4gIENScCQzLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGggPSBmdW5jdGlvbiAoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgIHZhciBjb3JuZXJSYWRpdXMgPSBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB9IC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeCwgeSAtIGhhbGZIZWlnaHQpO1xuICAgIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoLCB5KTtcbiAgICBjb250ZXh0LmFyY1RvKHggKyBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0LCB4LCB5ICsgaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0LCB4IC0gaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpO1xuICAgIGNvbnRleHQubGluZVRvKHggLSBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4LCB5IC0gaGFsZkhlaWdodCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfTtcblxuICBDUnAkMy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgdmFyIGNvcm5lckxlbmd0aCA9IGdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCgpO1xuXG4gICAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIH1cblxuICAgIGNvbnRleHQubW92ZVRvKHggLSBoYWxmV2lkdGggKyBjb3JuZXJMZW5ndGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoIC0gY29ybmVyTGVuZ3RoLCB5IC0gaGFsZkhlaWdodCk7XG4gICAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJMZW5ndGgpO1xuICAgIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoIC0gY29ybmVyTGVuZ3RoLCB5ICsgaGFsZkhlaWdodCk7XG4gICAgY29udGV4dC5saW5lVG8oeCAtIGhhbGZXaWR0aCArIGNvcm5lckxlbmd0aCwgeSArIGhhbGZIZWlnaHQpO1xuICAgIGNvbnRleHQubGluZVRvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCArIGNvcm5lckxlbmd0aCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfTtcblxuICBDUnAkMy5kcmF3QmFycmVsUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgdmFyIHhCZWdpbiA9IHggLSBoYWxmV2lkdGg7XG4gICAgdmFyIHhFbmQgPSB4ICsgaGFsZldpZHRoO1xuICAgIHZhciB5QmVnaW4gPSB5IC0gaGFsZkhlaWdodDtcbiAgICB2YXIgeUVuZCA9IHkgKyBoYWxmSGVpZ2h0O1xuICAgIHZhciBiYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciB3T2Zmc2V0ID0gYmFycmVsQ3VydmVDb25zdGFudHMud2lkdGhPZmZzZXQ7XG4gICAgdmFyIGhPZmZzZXQgPSBiYXJyZWxDdXJ2ZUNvbnN0YW50cy5oZWlnaHRPZmZzZXQ7XG4gICAgdmFyIGN0cmxQdFhPZmZzZXQgPSBiYXJyZWxDdXJ2ZUNvbnN0YW50cy5jdHJsUHRPZmZzZXRQY3QgKiB3T2Zmc2V0O1xuXG4gICAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIH1cblxuICAgIGNvbnRleHQubW92ZVRvKHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gICAgY29udGV4dC5saW5lVG8oeEJlZ2luLCB5RW5kIC0gaE9mZnNldCk7XG4gICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhCZWdpbiArIHdPZmZzZXQsIHlFbmQpO1xuICAgIGNvbnRleHQubGluZVRvKHhFbmQgLSB3T2Zmc2V0LCB5RW5kKTtcbiAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhFbmQsIHlFbmQgLSBoT2Zmc2V0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4RW5kLCB5QmVnaW4gKyBoT2Zmc2V0KTtcbiAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEVuZCAtIHdPZmZzZXQsIHlCZWdpbik7XG4gICAgY29udGV4dC5saW5lVG8oeEJlZ2luICsgd09mZnNldCwgeUJlZ2luKTtcbiAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEJlZ2luICsgY3RybFB0WE9mZnNldCwgeUJlZ2luLCB4QmVnaW4sIHlCZWdpbiArIGhPZmZzZXQpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH07XG5cbiAgdmFyIHNpbjAgPSBNYXRoLnNpbigwKTtcbiAgdmFyIGNvczAgPSBNYXRoLmNvcygwKTtcbiAgdmFyIHNpbiA9IHt9O1xuICB2YXIgY29zID0ge307XG4gIHZhciBlbGxpcHNlU3RlcFNpemUgPSBNYXRoLlBJIC8gNDA7XG5cbiAgZm9yICh2YXIgaSA9IDAgKiBNYXRoLlBJOyBpIDwgMiAqIE1hdGguUEk7IGkgKz0gZWxsaXBzZVN0ZXBTaXplKSB7XG4gICAgc2luW2ldID0gTWF0aC5zaW4oaSk7XG4gICAgY29zW2ldID0gTWF0aC5jb3MoaSk7XG4gIH1cblxuICBDUnAkMy5kcmF3RWxsaXBzZVBhdGggPSBmdW5jdGlvbiAoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5lbGxpcHNlKSB7XG4gICAgICBjb250ZXh0LmVsbGlwc2UoY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLyAyLCBoZWlnaHQgLyAyLCAwLCAwLCAyICogTWF0aC5QSSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB4UG9zLCB5UG9zO1xuICAgICAgdmFyIHJ3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHJoID0gaGVpZ2h0IC8gMjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAgKiBNYXRoLlBJOyBpIDwgMiAqIE1hdGguUEk7IGkgKz0gZWxsaXBzZVN0ZXBTaXplKSB7XG4gICAgICAgIHhQb3MgPSBjZW50ZXJYIC0gcncgKiBzaW5baV0gKiBzaW4wICsgcncgKiBjb3NbaV0gKiBjb3MwO1xuICAgICAgICB5UG9zID0gY2VudGVyWSArIHJoICogY29zW2ldICogc2luMCArIHJoICogc2luW2ldICogY29zMDtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGNvbnRleHQubW92ZVRvKHhQb3MsIHlQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfTtcblxuICAvKiBnbG9iYWwgYXRvYiwgQXJyYXlCdWZmZXIsIFVpbnQ4QXJyYXksIEJsb2IgKi9cbiAgdmFyIENScCQyID0ge307XG5cbiAgQ1JwJDIuY3JlYXRlQnVmZmVyID0gZnVuY3Rpb24gKHcsIGgpIHtcbiAgICB2YXIgYnVmZmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgIGJ1ZmZlci53aWR0aCA9IHc7XG4gICAgYnVmZmVyLmhlaWdodCA9IGg7XG4gICAgcmV0dXJuIFtidWZmZXIsIGJ1ZmZlci5nZXRDb250ZXh0KCcyZCcpXTtcbiAgfTtcblxuICBDUnAkMi5idWZmZXJDYW52YXNJbWFnZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeTtcbiAgICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICAgIHZhciBiYiA9IGVsZXMuYm91bmRpbmdCb3goKTtcbiAgICB2YXIgY3RyUmVjdCA9IHRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMuZnVsbCA/IE1hdGguY2VpbChiYi53KSA6IGN0clJlY3RbMl07XG4gICAgdmFyIGhlaWdodCA9IG9wdGlvbnMuZnVsbCA/IE1hdGguY2VpbChiYi5oKSA6IGN0clJlY3RbM107XG4gICAgdmFyIHNwZWNkTWF4RGltcyA9IG51bWJlciQxKG9wdGlvbnMubWF4V2lkdGgpIHx8IG51bWJlciQxKG9wdGlvbnMubWF4SGVpZ2h0KTtcbiAgICB2YXIgcHhSYXRpbyA9IHRoaXMuZ2V0UGl4ZWxSYXRpbygpO1xuICAgIHZhciBzY2FsZSA9IDE7XG5cbiAgICBpZiAob3B0aW9ucy5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3aWR0aCAqPSBvcHRpb25zLnNjYWxlO1xuICAgICAgaGVpZ2h0ICo9IG9wdGlvbnMuc2NhbGU7XG4gICAgICBzY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG4gICAgfSBlbHNlIGlmIChzcGVjZE1heERpbXMpIHtcbiAgICAgIHZhciBtYXhTY2FsZVcgPSBJbmZpbml0eTtcbiAgICAgIHZhciBtYXhTY2FsZUggPSBJbmZpbml0eTtcblxuICAgICAgaWYgKG51bWJlciQxKG9wdGlvbnMubWF4V2lkdGgpKSB7XG4gICAgICAgIG1heFNjYWxlVyA9IHNjYWxlICogb3B0aW9ucy5tYXhXaWR0aCAvIHdpZHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAobnVtYmVyJDEob3B0aW9ucy5tYXhIZWlnaHQpKSB7XG4gICAgICAgIG1heFNjYWxlSCA9IHNjYWxlICogb3B0aW9ucy5tYXhIZWlnaHQgLyBoZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHNjYWxlID0gTWF0aC5taW4obWF4U2NhbGVXLCBtYXhTY2FsZUgpO1xuICAgICAgd2lkdGggKj0gc2NhbGU7XG4gICAgICBoZWlnaHQgKj0gc2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKCFzcGVjZE1heERpbXMpIHtcbiAgICAgIHdpZHRoICo9IHB4UmF0aW87XG4gICAgICBoZWlnaHQgKj0gcHhSYXRpbztcbiAgICAgIHNjYWxlICo9IHB4UmF0aW87XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgYnVmZkNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGJ1ZmZDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJ1ZmZDYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgYnVmZkNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgIHZhciBidWZmQ3h0ID0gYnVmZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOyAvLyBSYXN0ZXJpemUgdGhlIGxheWVycywgYnV0IG9ubHkgaWYgY29udGFpbmVyIGhhcyBub256ZXJvIHNpemVcblxuICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkge1xuICAgICAgYnVmZkN4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBidWZmQ3h0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICB2YXIgenNvcnRlZEVsZXMgPSB0aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmZ1bGwpIHtcbiAgICAgICAgLy8gZHJhdyB0aGUgZnVsbCBib3VuZHMgb2YgdGhlIGdyYXBoXG4gICAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKC1iYi54MSAqIHNjYWxlLCAtYmIueTEgKiBzY2FsZSk7XG4gICAgICAgIGJ1ZmZDeHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgdGhpcy5kcmF3RWxlbWVudHMoYnVmZkN4dCwgenNvcnRlZEVsZXMpO1xuICAgICAgICBidWZmQ3h0LnNjYWxlKDEgLyBzY2FsZSwgMSAvIHNjYWxlKTtcbiAgICAgICAgYnVmZkN4dC50cmFuc2xhdGUoYmIueDEgKiBzY2FsZSwgYmIueTEgKiBzY2FsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkcmF3IHRoZSBjdXJyZW50IHZpZXdcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgICB2YXIgdHJhbnNsYXRpb24gPSB7XG4gICAgICAgICAgeDogcGFuLnggKiBzY2FsZSxcbiAgICAgICAgICB5OiBwYW4ueSAqIHNjYWxlXG4gICAgICAgIH07XG4gICAgICAgIHNjYWxlICo9IGN5Lnpvb20oKTtcbiAgICAgICAgYnVmZkN4dC50cmFuc2xhdGUodHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSk7XG4gICAgICAgIGJ1ZmZDeHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgdGhpcy5kcmF3RWxlbWVudHMoYnVmZkN4dCwgenNvcnRlZEVsZXMpO1xuICAgICAgICBidWZmQ3h0LnNjYWxlKDEgLyBzY2FsZSwgMSAvIHNjYWxlKTtcbiAgICAgICAgYnVmZkN4dC50cmFuc2xhdGUoLXRyYW5zbGF0aW9uLngsIC10cmFuc2xhdGlvbi55KTtcbiAgICAgIH0gLy8gbmVlZCB0byBmaWxsIGJnIGF0IGVuZCBsaWtlIHRoaXMgaW4gb3JkZXIgdG8gZmlsbCBjbGVhcmVkIHRyYW5zcGFyZW50IHBpeGVscyBpbiBqcGdzXG5cblxuICAgICAgaWYgKG9wdGlvbnMuYmcpIHtcbiAgICAgICAgYnVmZkN4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7XG4gICAgICAgIGJ1ZmZDeHQuZmlsbFN0eWxlID0gb3B0aW9ucy5iZztcbiAgICAgICAgYnVmZkN4dC5yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBidWZmQ3h0LmZpbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZkNhbnZhcztcbiAgfTtcblxuICBmdW5jdGlvbiBiNjRUb0Jsb2IoYjY0LCBtaW1lVHlwZSkge1xuICAgIHZhciBieXRlcyA9IGF0b2IoYjY0KTtcbiAgICB2YXIgYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcy5sZW5ndGgpO1xuICAgIHZhciBidWZmVWludDggPSBuZXcgVWludDhBcnJheShidWZmKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZVaW50OFtpXSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmXSwge1xuICAgICAgdHlwZTogbWltZVR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGI2NFVyaVRvQjY0KGI2NHVyaSkge1xuICAgIHZhciBpID0gYjY0dXJpLmluZGV4T2YoJywnKTtcbiAgICByZXR1cm4gYjY0dXJpLnN1YnN0cihpICsgMSk7XG4gIH1cblxuICBmdW5jdGlvbiBvdXRwdXQob3B0aW9ucywgY2FudmFzLCBtaW1lVHlwZSkge1xuICAgIHZhciBnZXRCNjRVcmkgPSBmdW5jdGlvbiBnZXRCNjRVcmkoKSB7XG4gICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTChtaW1lVHlwZSwgb3B0aW9ucy5xdWFsaXR5KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChvcHRpb25zLm91dHB1dCkge1xuICAgICAgY2FzZSAnYmxvYi1wcm9taXNlJzpcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYW52YXMudG9CbG9iKGZ1bmN0aW9uIChibG9iKSB7XG4gICAgICAgICAgICAgIGlmIChibG9iICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2BjYW52YXMudG9CbG9iKClgIHNlbnQgYSBudWxsIHZhbHVlIGluIGl0cyBjYWxsYmFjaycpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbWltZVR5cGUsIG9wdGlvbnMucXVhbGl0eSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdibG9iJzpcbiAgICAgICAgcmV0dXJuIGI2NFRvQmxvYihiNjRVcmlUb0I2NChnZXRCNjRVcmkoKSksIG1pbWVUeXBlKTtcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGI2NFVyaVRvQjY0KGdldEI2NFVyaSgpKTtcblxuICAgICAgY2FzZSAnYmFzZTY0dXJpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBnZXRCNjRVcmkoKTtcbiAgICB9XG4gIH1cblxuICBDUnAkMi5wbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBvdXRwdXQob3B0aW9ucywgdGhpcy5idWZmZXJDYW52YXNJbWFnZShvcHRpb25zKSwgJ2ltYWdlL3BuZycpO1xuICB9O1xuXG4gIENScCQyLmpwZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG91dHB1dChvcHRpb25zLCB0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKG9wdGlvbnMpLCAnaW1hZ2UvanBlZycpO1xuICB9O1xuXG4gIHZhciBDUnAkMSA9IHt9O1xuXG4gIENScCQxLm5vZGVTaGFwZUltcGwgPSBmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzKSB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlICdlbGxpcHNlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1BvbHlnb25QYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cyk7XG5cbiAgICAgIGNhc2UgJ3JvdW5kLXBvbHlnb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpO1xuXG4gICAgICBjYXNlICdyb3VuZHJlY3RhbmdsZSc6XG4gICAgICBjYXNlICdyb3VuZC1yZWN0YW5nbGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBjYXNlICdjdXRyZWN0YW5nbGUnOlxuICAgICAgY2FzZSAnY3V0LXJlY3RhbmdsZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBjYXNlICdib3R0b21yb3VuZHJlY3RhbmdsZSc6XG4gICAgICBjYXNlICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgY2FzZSAnYmFycmVsJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd0JhcnJlbFBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBDUiA9IENhbnZhc1JlbmRlcmVyO1xuICB2YXIgQ1JwID0gQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlO1xuICBDUnAuQ0FOVkFTX0xBWUVSUyA9IDM7IC8vXG5cbiAgQ1JwLlNFTEVDVF9CT1ggPSAwO1xuICBDUnAuRFJBRyA9IDE7XG4gIENScC5OT0RFID0gMjtcbiAgQ1JwLkJVRkZFUl9DT1VOVCA9IDM7IC8vXG5cbiAgQ1JwLlRFWFRVUkVfQlVGRkVSID0gMDtcbiAgQ1JwLk1PVElPTkJMVVJfQlVGRkVSX05PREUgPSAxO1xuICBDUnAuTU9USU9OQkxVUl9CVUZGRVJfRFJBRyA9IDI7XG5cbiAgZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIob3B0aW9ucykge1xuICAgIHZhciByID0gdGhpcztcbiAgICByLmRhdGEgPSB7XG4gICAgICBjYW52YXNlczogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICAgIGNvbnRleHRzOiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpLFxuICAgICAgY2FudmFzTmVlZHNSZWRyYXc6IG5ldyBBcnJheShDUnAuQ0FOVkFTX0xBWUVSUyksXG4gICAgICBidWZmZXJDYW52YXNlczogbmV3IEFycmF5KENScC5CVUZGRVJfQ09VTlQpLFxuICAgICAgYnVmZmVyQ29udGV4dHM6IG5ldyBBcnJheShDUnAuQ0FOVkFTX0xBWUVSUylcbiAgICB9O1xuICAgIHZhciB0YXBIbE9mZkF0dHIgPSAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJztcbiAgICB2YXIgdGFwSGxPZmZTdHlsZSA9ICdyZ2JhKDAsMCwwLDApJztcbiAgICByLmRhdGEuY2FudmFzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgIHZhciBjb250YWluZXJTdHlsZSA9IHIuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7XG4gICAgci5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt0YXBIbE9mZkF0dHJdID0gdGFwSGxPZmZTdHlsZTtcbiAgICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgY29udGFpbmVyU3R5bGUuekluZGV4ID0gJzAnO1xuICAgIGNvbnRhaW5lclN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMuY3kuY29udGFpbmVyKCk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHIuZGF0YS5jYW52YXNDb250YWluZXIpO1xuICAgIGNvbnRhaW5lci5zdHlsZVt0YXBIbE9mZkF0dHJdID0gdGFwSGxPZmZTdHlsZTtcbiAgICB2YXIgc3R5bGVNYXAgPSB7XG4gICAgICAnLXdlYmtpdC11c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAgICctbW96LXVzZXItc2VsZWN0JzogJy1tb3otbm9uZScsXG4gICAgICAndXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgICAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJzogJ3JnYmEoMCwwLDAsMCknLFxuICAgICAgJ291dGxpbmUtc3R5bGUnOiAnbm9uZSdcbiAgICB9O1xuXG4gICAgaWYgKG1zKCkpIHtcbiAgICAgIHN0eWxlTWFwWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgICBzdHlsZU1hcFsndG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDUnAuQ0FOVkFTX0xBWUVSUzsgaSsrKSB7XG4gICAgICB2YXIgY2FudmFzID0gci5kYXRhLmNhbnZhc2VzW2ldID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgICAgci5kYXRhLmNvbnRleHRzW2ldID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICBPYmplY3Qua2V5cyhzdHlsZU1hcCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBjYW52YXMuc3R5bGVba10gPSBzdHlsZU1hcFtrXTtcbiAgICAgIH0pO1xuICAgICAgY2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnbGF5ZXInICsgaSk7XG4gICAgICBjYW52YXMuc3R5bGUuekluZGV4ID0gU3RyaW5nKENScC5DQU5WQVNfTEFZRVJTIC0gaSk7XG4gICAgICByLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICByLmRhdGEudG9wQ2FudmFzID0gci5kYXRhLmNhbnZhc2VzWzBdO1xuICAgIHIuZGF0YS5jYW52YXNlc1tDUnAuTk9ERV0uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgJ2xheWVyJyArIENScC5OT0RFICsgJy1ub2RlJyk7XG4gICAgci5kYXRhLmNhbnZhc2VzW0NScC5TRUxFQ1RfQk9YXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnbGF5ZXInICsgQ1JwLlNFTEVDVF9CT1ggKyAnLXNlbGVjdGJveCcpO1xuICAgIHIuZGF0YS5jYW52YXNlc1tDUnAuRFJBR10uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgJ2xheWVyJyArIENScC5EUkFHICsgJy1kcmFnJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENScC5CVUZGRVJfQ09VTlQ7IGkrKykge1xuICAgICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgICAgci5kYXRhLmJ1ZmZlckNvbnRleHRzW2ldID0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldLmdldENvbnRleHQoJzJkJyk7XG4gICAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdidWZmZXInICsgaSk7XG4gICAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUuekluZGV4ID0gU3RyaW5nKC1pIC0gMSk7XG4gICAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOyAvL3IuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldKTtcbiAgICB9XG5cbiAgICByLnBhdGhzRW5hYmxlZCA9IHRydWU7XG4gICAgdmFyIGVtcHR5QmIgPSBtYWtlQm91bmRpbmdCb3goKTtcblxuICAgIHZhciBnZXRCb3hDZW50ZXIgPSBmdW5jdGlvbiBnZXRCb3hDZW50ZXIoYmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IChiYi54MSArIGJiLngyKSAvIDIsXG4gICAgICAgIHk6IChiYi55MSArIGJiLnkyKSAvIDJcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnZXRDZW50ZXJPZmZzZXQgPSBmdW5jdGlvbiBnZXRDZW50ZXJPZmZzZXQoYmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IC1iYi53IC8gMixcbiAgICAgICAgeTogLWJiLmggLyAyXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQgPSBmdW5jdGlvbiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZChlbGUpIHtcbiAgICAgIHZhciBfcCA9IGVsZVswXS5fcHJpdmF0ZTtcbiAgICAgIHZhciBzYW1lID0gX3Aub2xkQmFja2dyb3VuZFRpbWVzdGFtcCA9PT0gX3AuYmFja2dyb3VuZFRpbWVzdGFtcDtcbiAgICAgIHJldHVybiAhc2FtZTtcbiAgICB9O1xuXG4gICAgdmFyIGdldFN0eWxlS2V5ID0gZnVuY3Rpb24gZ2V0U3R5bGVLZXkoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLm5vZGVLZXk7XG4gICAgfTtcblxuICAgIHZhciBnZXRMYWJlbEtleSA9IGZ1bmN0aW9uIGdldExhYmVsS2V5KGVsZSkge1xuICAgICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS5sYWJlbFN0eWxlS2V5O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0U291cmNlTGFiZWxLZXkgPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbEtleShlbGUpIHtcbiAgICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleTtcbiAgICB9O1xuXG4gICAgdmFyIGdldFRhcmdldExhYmVsS2V5ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxLZXkoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXk7XG4gICAgfTtcblxuICAgIHZhciBkcmF3RWxlbWVudCA9IGZ1bmN0aW9uIGRyYXdFbGVtZW50KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sIHVzZUVsZU9wYWNpdHkpIHtcbiAgICAgIHJldHVybiByLmRyYXdFbGVtZW50KGNvbnRleHQsIGVsZSwgYmIsIGZhbHNlLCBmYWxzZSwgdXNlRWxlT3BhY2l0eSk7XG4gICAgfTtcblxuICAgIHZhciBkcmF3TGFiZWwgPSBmdW5jdGlvbiBkcmF3TGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgICAgcmV0dXJuIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sICdtYWluJywgdXNlRWxlT3BhY2l0eSk7XG4gICAgfTtcblxuICAgIHZhciBkcmF3U291cmNlTGFiZWwgPSBmdW5jdGlvbiBkcmF3U291cmNlTGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgICAgcmV0dXJuIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sICdzb3VyY2UnLCB1c2VFbGVPcGFjaXR5KTtcbiAgICB9O1xuXG4gICAgdmFyIGRyYXdUYXJnZXRMYWJlbCA9IGZ1bmN0aW9uIGRyYXdUYXJnZXRMYWJlbChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgICByZXR1cm4gci5kcmF3RWxlbWVudFRleHQoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgJ3RhcmdldCcsIHVzZUVsZU9wYWNpdHkpO1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RWxlbWVudEJveCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRCb3goZWxlKSB7XG4gICAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUuYm9keUJvdW5kcztcbiAgICB9O1xuXG4gICAgdmFyIGdldExhYmVsQm94ID0gZnVuY3Rpb24gZ2V0TGFiZWxCb3goZWxlKSB7XG4gICAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbiB8fCBlbXB0eUJiO1xuICAgIH07XG5cbiAgICB2YXIgZ2V0U291cmNlTGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbEJveChlbGUpIHtcbiAgICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2UgfHwgZW1wdHlCYjtcbiAgICB9O1xuXG4gICAgdmFyIGdldFRhcmdldExhYmVsQm94ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxCb3goZWxlKSB7XG4gICAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0IHx8IGVtcHR5QmI7XG4gICAgfTtcblxuICAgIHZhciBpc0xhYmVsVmlzaWJsZUF0U2NhbGUgPSBmdW5jdGlvbiBpc0xhYmVsVmlzaWJsZUF0U2NhbGUoZWxlLCBzY2FsZWRMYWJlbFNob3duKSB7XG4gICAgICByZXR1cm4gc2NhbGVkTGFiZWxTaG93bjtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVsZW1lbnRSb3RhdGlvblBvaW50ID0gZnVuY3Rpb24gZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgICByZXR1cm4gZ2V0Qm94Q2VudGVyKGdldEVsZW1lbnRCb3goZWxlKSk7XG4gICAgfTtcblxuICAgIHZhciBhZGRUZXh0TWFyZ2luID0gZnVuY3Rpb24gYWRkVGV4dE1hcmdpbihwcmVmaXgsIHB0LCBlbGUpIHtcbiAgICAgIHZhciBwcmUgPSBwcmVmaXggPyBwcmVmaXggKyAnLScgOiAnJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHB0LnggKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZSxcbiAgICAgICAgeTogcHQueSArIGVsZS5wc3R5bGUocHJlICsgJ3RleHQtbWFyZ2luLXknKS5wZlZhbHVlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0UnNQdCA9IGZ1bmN0aW9uIGdldFJzUHQoZWxlLCB4LCB5KSB7XG4gICAgICB2YXIgcnMgPSBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiByc1t4XSxcbiAgICAgICAgeTogcnNbeV1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBnZXRMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgICByZXR1cm4gYWRkVGV4dE1hcmdpbignJywgZ2V0UnNQdChlbGUsICdsYWJlbFgnLCAnbGFiZWxZJyksIGVsZSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgICByZXR1cm4gYWRkVGV4dE1hcmdpbignc291cmNlJywgZ2V0UnNQdChlbGUsICdzb3VyY2VMYWJlbFgnLCAnc291cmNlTGFiZWxZJyksIGVsZSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgICByZXR1cm4gYWRkVGV4dE1hcmdpbigndGFyZ2V0JywgZ2V0UnNQdChlbGUsICd0YXJnZXRMYWJlbFgnLCAndGFyZ2V0TGFiZWxZJyksIGVsZSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbGVtZW50Um90YXRpb25PZmZzZXQgPSBmdW5jdGlvbiBnZXRFbGVtZW50Um90YXRpb25PZmZzZXQoZWxlKSB7XG4gICAgICByZXR1cm4gZ2V0Q2VudGVyT2Zmc2V0KGdldEVsZW1lbnRCb3goZWxlKSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0U291cmNlTGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0U291cmNlTGFiZWxCb3goZWxlKSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0VGFyZ2V0TGFiZWxCb3goZWxlKSk7XG4gICAgfTtcblxuICAgIHZhciBnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICAgIHZhciBiYiA9IGdldExhYmVsQm94KGVsZSk7XG4gICAgICB2YXIgcCA9IGdldENlbnRlck9mZnNldChnZXRMYWJlbEJveChlbGUpKTtcblxuICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykudmFsdWUpIHtcbiAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgIHAueCA9IC1iYi53O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICBwLnggPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWUpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgcC55ID0gLWJiLmg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICBwLnkgPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHA7XG4gICAgfTtcblxuICAgIHZhciBlbGVUeHJDYWNoZSA9IHIuZGF0YS5lbGVUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICAgIGdldEtleTogZ2V0U3R5bGVLZXksXG4gICAgICBkb2VzRWxlSW52YWxpZGF0ZUtleTogYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQsXG4gICAgICBkcmF3RWxlbWVudDogZHJhd0VsZW1lbnQsXG4gICAgICBnZXRCb3VuZGluZ0JveDogZ2V0RWxlbWVudEJveCxcbiAgICAgIGdldFJvdGF0aW9uUG9pbnQ6IGdldEVsZW1lbnRSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCxcbiAgICAgIGFsbG93RWRnZVR4ckNhY2hpbmc6IGZhbHNlLFxuICAgICAgYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIHZhciBsYmxUeHJDYWNoZSA9IHIuZGF0YS5sYmxUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICAgIGdldEtleTogZ2V0TGFiZWxLZXksXG4gICAgICBkcmF3RWxlbWVudDogZHJhd0xhYmVsLFxuICAgICAgZ2V0Qm91bmRpbmdCb3g6IGdldExhYmVsQm94LFxuICAgICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0TGFiZWxSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldExhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICAgIH0pO1xuICAgIHZhciBzbGJUeHJDYWNoZSA9IHIuZGF0YS5zbGJUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICAgIGdldEtleTogZ2V0U291cmNlTGFiZWxLZXksXG4gICAgICBkcmF3RWxlbWVudDogZHJhd1NvdXJjZUxhYmVsLFxuICAgICAgZ2V0Qm91bmRpbmdCb3g6IGdldFNvdXJjZUxhYmVsQm94LFxuICAgICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0U291cmNlTGFiZWxSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICAgIH0pO1xuICAgIHZhciB0bGJUeHJDYWNoZSA9IHIuZGF0YS50bGJUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICAgIGdldEtleTogZ2V0VGFyZ2V0TGFiZWxLZXksXG4gICAgICBkcmF3RWxlbWVudDogZHJhd1RhcmdldExhYmVsLFxuICAgICAgZ2V0Qm91bmRpbmdCb3g6IGdldFRhcmdldExhYmVsQm94LFxuICAgICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldFRhcmdldExhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICAgIH0pO1xuICAgIHZhciBseXJUeHJDYWNoZSA9IHIuZGF0YS5seXJUeHJDYWNoZSA9IG5ldyBMYXllcmVkVGV4dHVyZUNhY2hlKHIpO1xuICAgIHIub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbiBpbnZhbGlkYXRlVGV4dHVyZUNhY2hlcyh3aWxsRHJhdywgZWxlcykge1xuICAgICAgLy8gZWFjaCBjYWNoZSBzaG91bGQgY2hlY2sgZm9yIHN1Yi1rZXkgZGlmZiB0byBzZWUgdGhhdCB0aGUgdXBkYXRlIGFmZmVjdHMgdGhhdCBjYWNoZSBwYXJ0aWN1bGFybHlcbiAgICAgIGVsZVR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICAgIGxibFR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICAgIHNsYlR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICAgIHRsYlR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTsgLy8gYW55IGNoYW5nZSBpbnZhbGlkYXRlcyB0aGUgbGF5ZXJzXG5cbiAgICAgIGx5clR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTsgLy8gdXBkYXRlIHRoZSBvbGQgYmcgdGltZXN0YW1wIHNvIGRpZmZzIGNhbiBiZSBkb25lIGluIHRoZSBlbGUgdHhyIGNhY2hlc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIF9wID0gZWxlc1tfaV0uX3ByaXZhdGU7XG4gICAgICAgIF9wLm9sZEJhY2tncm91bmRUaW1lc3RhbXAgPSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlZmluZUluTGF5ZXJzID0gZnVuY3Rpb24gcmVmaW5lSW5MYXllcnMocmVxcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGx5clR4ckNhY2hlLmVucXVldWVFbGVtZW50UmVmaW5lbWVudChyZXFzW2ldLmVsZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsZVR4ckNhY2hlLm9uRGVxdWV1ZShyZWZpbmVJbkxheWVycyk7XG4gICAgbGJsVHhyQ2FjaGUub25EZXF1ZXVlKHJlZmluZUluTGF5ZXJzKTtcbiAgICBzbGJUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICAgIHRsYlR4ckNhY2hlLm9uRGVxdWV1ZShyZWZpbmVJbkxheWVycyk7XG4gIH1cblxuICBDUnAucmVkcmF3SGludCA9IGZ1bmN0aW9uIChncm91cCwgYm9vbCkge1xuICAgIHZhciByID0gdGhpcztcblxuICAgIHN3aXRjaCAoZ3JvdXApIHtcbiAgICAgIGNhc2UgJ2VsZXMnOlxuICAgICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbQ1JwLk5PREVdID0gYm9vbDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2RyYWcnOlxuICAgICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbQ1JwLkRSQUddID0gYm9vbDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tDUnAuU0VMRUNUX0JPWF0gPSBib29sO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07IC8vIHdoZXRoZXIgdG8gdXNlIFBhdGgyRCBjYWNoaW5nIGZvciBkcmF3aW5nXG5cblxuICB2YXIgcGF0aHNJbXBsZCA9IHR5cGVvZiBQYXRoMkQgIT09ICd1bmRlZmluZWQnO1xuXG4gIENScC5wYXRoMmRFbmFibGVkID0gZnVuY3Rpb24gKG9uKSB7XG4gICAgaWYgKG9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhdGhzRW5hYmxlZDtcbiAgICB9XG5cbiAgICB0aGlzLnBhdGhzRW5hYmxlZCA9IG9uID8gdHJ1ZSA6IGZhbHNlO1xuICB9O1xuXG4gIENScC51c2VQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGF0aHNJbXBsZCAmJiB0aGlzLnBhdGhzRW5hYmxlZDtcbiAgfTtcblxuICBDUnAuc2V0SW1nU21vb3RoaW5nID0gZnVuY3Rpb24gKGNvbnRleHQsIGJvb2wpIHtcbiAgICBpZiAoY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgIT0gbnVsbCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBib29sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gICAgICBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gYm9vbDtcbiAgICB9XG4gIH07XG5cbiAgQ1JwLmdldEltZ1Ntb290aGluZyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ7XG4gICAgfVxuICB9O1xuXG4gIENScC5tYWtlT2Zmc2NyZWVuQ2FudmFzID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgY2FudmFzO1xuXG4gICAgaWYgKCh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoT2Zmc2NyZWVuQ2FudmFzKSkgIT09IChcInVuZGVmaW5lZFwiICkpIHtcbiAgICAgIGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xuICB9O1xuXG4gIFtDUnAkYSwgQ1JwJDksIENScCQ4LCBDUnAkNywgQ1JwJDYsIENScCQ1LCBDUnAkNCwgQ1JwJDMsIENScCQyLCBDUnAkMV0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBleHRlbmQoQ1JwLCBwcm9wcyk7XG4gIH0pO1xuXG4gIHZhciByZW5kZXJlciA9IFt7XG4gICAgbmFtZTogJ251bGwnLFxuICAgIGltcGw6IE51bGxSZW5kZXJlclxuICB9LCB7XG4gICAgbmFtZTogJ2Jhc2UnLFxuICAgIGltcGw6IEJSXG4gIH0sIHtcbiAgICBuYW1lOiAnY2FudmFzJyxcbiAgICBpbXBsOiBDUlxuICB9XTtcblxuICB2YXIgaW5jRXh0cyA9IFt7XG4gICAgdHlwZTogJ2xheW91dCcsXG4gICAgZXh0ZW5zaW9uczogbGF5b3V0XG4gIH0sIHtcbiAgICB0eXBlOiAncmVuZGVyZXInLFxuICAgIGV4dGVuc2lvbnM6IHJlbmRlcmVyXG4gIH1dO1xuXG4gIHZhciBleHRlbnNpb25zID0ge307IC8vIHJlZ2lzdGVyZWQgbW9kdWxlcyBmb3IgZXh0ZW5zaW9ucywgaW5kZXhlZCBieSBuYW1lXG5cbiAgdmFyIG1vZHVsZXMgPSB7fTtcblxuICBmdW5jdGlvbiBzZXRFeHRlbnNpb24odHlwZSwgbmFtZSwgcmVnaXN0cmFudCkge1xuICAgIHZhciBleHQgPSByZWdpc3RyYW50O1xuXG4gICAgdmFyIG92ZXJyaWRlRXJyID0gZnVuY3Rpb24gb3ZlcnJpZGVFcnIoZmllbGQpIHtcbiAgICAgIHdhcm4oJ0NhbiBub3QgcmVnaXN0ZXIgYCcgKyBuYW1lICsgJ2AgZm9yIGAnICsgdHlwZSArICdgIHNpbmNlIGAnICsgZmllbGQgKyAnYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4nKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGUgPT09ICdjb3JlJykge1xuICAgICAgaWYgKENvcmUucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZUVycihuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvcmUucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb2xsZWN0aW9uJykge1xuICAgICAgaWYgKENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZUVycihuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsYXlvdXQnKSB7XG4gICAgICAvLyBmaWxsIGluIG1pc3NpbmcgbGF5b3V0IGZ1bmN0aW9ucyBpbiB0aGUgcHJvdG90eXBlXG4gICAgICB2YXIgTGF5b3V0ID0gZnVuY3Rpb24gTGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgcmVnaXN0cmFudC5jYWxsKHRoaXMsIG9wdGlvbnMpOyAvLyBtYWtlIHN1cmUgbGF5b3V0IGhhcyBfcHJpdmF0ZSBmb3IgdXNlIHcvIHN0ZCBhcGlzIGxpa2UgLm9uKClcblxuICAgICAgICBpZiAoIXBsYWluT2JqZWN0KHRoaXMuX3ByaXZhdGUpKSB7XG4gICAgICAgICAgdGhpcy5fcHJpdmF0ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJpdmF0ZS5jeSA9IG9wdGlvbnMuY3k7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzID0gW107XG4gICAgICAgIHRoaXMuY3JlYXRlRW1pdHRlcigpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGxheW91dFByb3RvID0gTGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocmVnaXN0cmFudC5wcm90b3R5cGUpO1xuICAgICAgdmFyIG9wdExheW91dEZucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdExheW91dEZucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZm5OYW1lID0gb3B0TGF5b3V0Rm5zW2ldO1xuXG4gICAgICAgIGxheW91dFByb3RvW2ZuTmFtZV0gPSBsYXlvdXRQcm90b1tmbk5hbWVdIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gZWl0aGVyIC5zdGFydCgpIG9yIC5ydW4oKSBpcyBkZWZpbmVkLCBzbyBhdXRvZ2VuIHRoZSBvdGhlclxuXG5cbiAgICAgIGlmIChsYXlvdXRQcm90by5zdGFydCAmJiAhbGF5b3V0UHJvdG8ucnVuKSB7XG4gICAgICAgIGxheW91dFByb3RvLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKCFsYXlvdXRQcm90by5zdGFydCAmJiBsYXlvdXRQcm90by5ydW4pIHtcbiAgICAgICAgbGF5b3V0UHJvdG8uc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ1N0b3AgPSByZWdpc3RyYW50LnByb3RvdHlwZS5zdG9wO1xuXG4gICAgICBsYXlvdXRQcm90by5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3B0cyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmFuaW1hdGUpIHtcbiAgICAgICAgICB2YXIgYW5pcyA9IHRoaXMuYW5pbWF0aW9ucztcblxuICAgICAgICAgIGlmIChhbmlzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYW5pcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgYW5pc1tfaV0uc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWdTdG9wKSB7XG4gICAgICAgICAgcmVnU3RvcC5jYWxsKHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgnbGF5b3V0c3RvcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWxheW91dFByb3RvLmRlc3Ryb3kpIHtcbiAgICAgICAgbGF5b3V0UHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbGF5b3V0UHJvdG8uY3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmN5O1xuICAgICAgfTtcblxuICAgICAgdmFyIGdldEN5ID0gZnVuY3Rpb24gZ2V0Q3kobGF5b3V0KSB7XG4gICAgICAgIHJldHVybiBsYXlvdXQuX3ByaXZhdGUuY3k7XG4gICAgICB9O1xuXG4gICAgICB2YXIgZW1pdHRlck9wdHMgPSB7XG4gICAgICAgIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhsYXlvdXQsIGV2dCkge1xuICAgICAgICAgIGV2dC5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgICAgZXZ0LmN5ID0gZ2V0Q3kobGF5b3V0KTtcbiAgICAgICAgICBldnQudGFyZ2V0ID0gbGF5b3V0O1xuICAgICAgICB9LFxuICAgICAgICBidWJibGU6IGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQobGF5b3V0KSB7XG4gICAgICAgICAgcmV0dXJuIGdldEN5KGxheW91dCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBleHRlbmQobGF5b3V0UHJvdG8sIHtcbiAgICAgICAgY3JlYXRlRW1pdHRlcjogZnVuY3Rpb24gY3JlYXRlRW1pdHRlcigpIHtcbiAgICAgICAgICB0aGlzLl9wcml2YXRlLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcihlbWl0dGVyT3B0cywgdGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgb246IGZ1bmN0aW9uIG9uKGV2dCwgY2IpIHtcbiAgICAgICAgICB0aGlzLmVtaXR0ZXIoKS5vbihldnQsIGNiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgb25lOiBmdW5jdGlvbiBvbmUoZXZ0LCBjYikge1xuICAgICAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldnQsIGNiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgb25jZTogZnVuY3Rpb24gb25jZShldnQsIGNiKSB7XG4gICAgICAgICAgdGhpcy5lbWl0dGVyKCkub25lKGV2dCwgY2IpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZ0LCBjYikge1xuICAgICAgICAgIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKGV2dCwgY2IpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICAgICAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZW1pdDogZnVuY3Rpb24gZW1pdChldnQsIHBhcmFtcykge1xuICAgICAgICAgIHRoaXMuZW1pdHRlcigpLmVtaXQoZXZ0LCBwYXJhbXMpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRlZmluZS5ldmVudEFsaWFzZXNPbihsYXlvdXRQcm90byk7XG4gICAgICBleHQgPSBMYXlvdXQ7IC8vIHJlcGxhY2Ugd2l0aCBvdXIgd3JhcHBlZCBsYXlvdXRcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyZW5kZXJlcicgJiYgbmFtZSAhPT0gJ251bGwnICYmIG5hbWUgIT09ICdiYXNlJykge1xuICAgICAgLy8gdXNlciByZWdpc3RlcmVkIHJlbmRlcmVycyBpbmhlcml0IGZyb20gYmFzZVxuICAgICAgdmFyIEJhc2VSZW5kZXJlciA9IGdldEV4dGVuc2lvbigncmVuZGVyZXInLCAnYmFzZScpO1xuICAgICAgdmFyIGJQcm90byA9IEJhc2VSZW5kZXJlci5wcm90b3R5cGU7XG4gICAgICB2YXIgUmVnaXN0cmFudFJlbmRlcmVyID0gcmVnaXN0cmFudDtcbiAgICAgIHZhciByUHJvdG8gPSByZWdpc3RyYW50LnByb3RvdHlwZTtcblxuICAgICAgdmFyIFJlbmRlcmVyID0gZnVuY3Rpb24gUmVuZGVyZXIoKSB7XG4gICAgICAgIEJhc2VSZW5kZXJlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBSZWdpc3RyYW50UmVuZGVyZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwcm90byA9IFJlbmRlcmVyLnByb3RvdHlwZTtcblxuICAgICAgZm9yICh2YXIgcE5hbWUgaW4gYlByb3RvKSB7XG4gICAgICAgIHZhciBwVmFsID0gYlByb3RvW3BOYW1lXTtcbiAgICAgICAgdmFyIGV4aXN0c0luUiA9IHJQcm90b1twTmFtZV0gIT0gbnVsbDtcblxuICAgICAgICBpZiAoZXhpc3RzSW5SKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlRXJyKHBOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb3RvW3BOYW1lXSA9IHBWYWw7IC8vIHRha2UgaW1wbCBmcm9tIGJhc2VcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX3BOYW1lIGluIHJQcm90bykge1xuICAgICAgICBwcm90b1tfcE5hbWVdID0gclByb3RvW19wTmFtZV07IC8vIHRha2UgaW1wbCBmcm9tIHJlZ2lzdHJhbnRcbiAgICAgIH1cblxuICAgICAgYlByb3RvLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHByb3RvW25hbWVdID0gcHJvdG9bbmFtZV0gfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVycm9yKCdSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLicgKyBuYW1lICsgJygpYCBvbiBpdHMgcHJvdG90eXBlJyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGV4dCA9IFJlbmRlcmVyO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ19fcHJvdG9fXycgfHwgdHlwZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0eXBlID09PSAncHJvdG90eXBlJykge1xuICAgICAgLy8gdG8gYXZvaWQgcG90ZW50aWFsIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIHJldHVybiBlcnJvcih0eXBlICsgJyBpcyBhbiBpbGxlZ2FsIHR5cGUgdG8gYmUgcmVnaXN0ZXJlZCwgcG9zc2libHkgbGVhZCB0byBwcm90b3R5cGUgcG9sbHV0aW9ucycpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRNYXAoe1xuICAgICAgbWFwOiBleHRlbnNpb25zLFxuICAgICAga2V5czogW3R5cGUsIG5hbWVdLFxuICAgICAgdmFsdWU6IGV4dFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHR5cGUsIG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0TWFwKHtcbiAgICAgIG1hcDogZXh0ZW5zaW9ucyxcbiAgICAgIGtleXM6IFt0eXBlLCBuYW1lXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TW9kdWxlKHR5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWUsIHJlZ2lzdHJhbnQpIHtcbiAgICByZXR1cm4gc2V0TWFwKHtcbiAgICAgIG1hcDogbW9kdWxlcyxcbiAgICAgIGtleXM6IFt0eXBlLCBuYW1lLCBtb2R1bGVUeXBlLCBtb2R1bGVOYW1lXSxcbiAgICAgIHZhbHVlOiByZWdpc3RyYW50XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNb2R1bGUodHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBnZXRNYXAoe1xuICAgICAgbWFwOiBtb2R1bGVzLFxuICAgICAga2V5czogW3R5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWVdXG4gICAgfSk7XG4gIH1cblxuICB2YXIgZXh0ZW5zaW9uID0gZnVuY3Rpb24gZXh0ZW5zaW9uKCkge1xuICAgIC8vIGUuZy4gZXh0ZW5zaW9uKCdyZW5kZXJlcicsICdzdmcnKVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm4gZ2V0RXh0ZW5zaW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgeyAuLi4gfSlcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICByZXR1cm4gc2V0RXh0ZW5zaW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgJ25vZGVTaGFwZScsICdlbGxpcHNlJylcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0KSB7XG4gICAgICByZXR1cm4gZ2V0TW9kdWxlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgJ25vZGVTaGFwZScsICdlbGxpcHNlJywgeyAuLi4gfSlcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KSB7XG4gICAgICByZXR1cm4gc2V0TW9kdWxlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGV4dGVuc2lvbiBhY2Nlc3Mgc3ludGF4Jyk7XG4gICAgfVxuICB9OyAvLyBhbGxvd3MgYSBjb3JlIGluc3RhbmNlIHRvIGFjY2VzcyBleHRlbnNpb25zIGludGVybmFsbHlcblxuXG4gIENvcmUucHJvdG90eXBlLmV4dGVuc2lvbiA9IGV4dGVuc2lvbjsgLy8gaW5jbHVkZWQgZXh0ZW5zaW9uc1xuXG4gIGluY0V4dHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICBncm91cC5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24gKGV4dCkge1xuICAgICAgc2V0RXh0ZW5zaW9uKGdyb3VwLnR5cGUsIGV4dC5uYW1lLCBleHQuaW1wbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vICh1c2VmdWwgZm9yIGluaXQpXG5cbiAgdmFyIFN0eWxlc2hlZXQgPSBmdW5jdGlvbiBTdHlsZXNoZWV0KCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHlsZXNoZWV0KSkge1xuICAgICAgcmV0dXJuIG5ldyBTdHlsZXNoZWV0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9O1xuXG4gIHZhciBzaGVldGZuID0gU3R5bGVzaGVldC5wcm90b3R5cGU7XG5cbiAgc2hlZXRmbi5pbnN0YW5jZVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ3N0eWxlc2hlZXQnO1xuICB9OyAvLyBqdXN0IHN0b3JlIHRoZSBzZWxlY3RvciB0byBiZSBwYXJzZWQgbGF0ZXJcblxuXG4gIHNoZWV0Zm4uc2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoKys7XG4gICAgdGhpc1tpXSA9IHtcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIHByb3BlcnRpZXM6IFtdXG4gICAgfTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfTsgLy8ganVzdCBzdG9yZSB0aGUgcHJvcGVydHkgdG8gYmUgcGFyc2VkIGxhdGVyXG5cblxuICBzaGVldGZuLmNzcyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggLSAxO1xuXG4gICAgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgICAgdGhpc1tpXS5wcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocGxhaW5PYmplY3QobmFtZSkpIHtcbiAgICAgIHZhciBtYXAgPSBuYW1lO1xuICAgICAgdmFyIHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG1hcCk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcE5hbWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wTmFtZXNbal07XG4gICAgICAgIHZhciBtYXBWYWwgPSBtYXBba2V5XTtcblxuICAgICAgICBpZiAobWFwVmFsID09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9wID0gU3R5bGUucHJvcGVydGllc1trZXldIHx8IFN0eWxlLnByb3BlcnRpZXNbZGFzaDJjYW1lbChrZXkpXTtcblxuICAgICAgICBpZiAocHJvcCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX25hbWUgPSBwcm9wLm5hbWU7XG4gICAgICAgIHZhciBfdmFsdWUgPSBtYXBWYWw7XG4gICAgICAgIHRoaXNbaV0ucHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBfbmFtZSxcbiAgICAgICAgICB2YWx1ZTogX3ZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9O1xuXG4gIHNoZWV0Zm4uc3R5bGUgPSBzaGVldGZuLmNzczsgLy8gZ2VuZXJhdGUgYSByZWFsIHN0eWxlIG9iamVjdCBmcm9tIHRoZSBkdW1teSBzdHlsZXNoZWV0XG5cbiAgc2hlZXRmbi5nZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGN5KSB7XG4gICAgdmFyIHN0eWxlID0gbmV3IFN0eWxlKGN5KTtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRUb1N0eWxlKHN0eWxlKTtcbiAgfTsgLy8gYXBwZW5kIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3Qgb24gYSByZWFsIHN0eWxlIG9iamVjdFxuXG5cbiAgc2hlZXRmbi5hcHBlbmRUb1N0eWxlID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXNbaV07XG4gICAgICB2YXIgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yO1xuICAgICAgdmFyIHByb3BzID0gY29udGV4dC5wcm9wZXJ0aWVzO1xuICAgICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3IpOyAvLyBhcHBseSBzZWxlY3RvclxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgIHN0eWxlLmNzcyhwcm9wLm5hbWUsIHByb3AudmFsdWUpOyAvLyBhcHBseSBwcm9wZXJ0eVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfTtcblxuICB2YXIgdmVyc2lvbiA9IFwiMy4yNi4wXCI7XG5cbiAgdmFyIGN5dG9zY2FwZSA9IGZ1bmN0aW9uIGN5dG9zY2FwZShvcHRpb25zKSB7XG4gICAgLy8gaWYgbm8gb3B0aW9ucyBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH0gLy8gY3JlYXRlIGluc3RhbmNlXG5cblxuICAgIGlmIChwbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG5ldyBDb3JlKG9wdGlvbnMpO1xuICAgIH0gLy8gYWxsb3cgZm9yIHJlZ2lzdHJhdGlvbiBvZiBleHRlbnNpb25zXG4gICAgZWxzZSBpZiAoc3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gZXh0ZW5zaW9uLmFwcGx5KGV4dGVuc2lvbiwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07IC8vIGUuZy4gY3l0b3NjYXBlLnVzZSggcmVxdWlyZSgnY3l0b3NjYXBlLWZvbycpLCBiYXIgKVxuXG5cbiAgY3l0b3NjYXBlLnVzZSA9IGZ1bmN0aW9uIChleHQpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGFyZ3MgdG8gcGFzcyB0byBleHRcblxuICAgIGFyZ3MudW5zaGlmdChjeXRvc2NhcGUpOyAvLyBjeXRvc2NhcGUgaXMgZmlyc3QgYXJnIHRvIGV4dFxuXG4gICAgZXh0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGN5dG9zY2FwZS53YXJuaW5ncyA9IGZ1bmN0aW9uIChib29sKSB7XG4gICAgcmV0dXJuIHdhcm5pbmdzKGJvb2wpO1xuICB9OyAvLyByZXBsYWNlZCBieSBidWlsZCBzeXN0ZW1cblxuXG4gIGN5dG9zY2FwZS52ZXJzaW9uID0gdmVyc2lvbjsgLy8gZXhwb3NlIHB1YmxpYyBhcGlzIChtb3N0bHkgZm9yIGV4dGVuc2lvbnMpXG5cbiAgY3l0b3NjYXBlLnN0eWxlc2hlZXQgPSBjeXRvc2NhcGUuU3R5bGVzaGVldCA9IFN0eWxlc2hlZXQ7XG5cbiAgcmV0dXJuIGN5dG9zY2FwZTtcblxufSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/cytoscape/dist/cytoscape.umd.js\n"); /***/ }), /***/ "../../../node_modules/dayjs/dayjs.min.js": /*!************************************************!*\ !*** ../../../node_modules/dayjs/dayjs.min.js ***! \************************************************/ /***/ (function(module) { eval("!function(t,e){ true?module.exports=e():0}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new b(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var b=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELG9CQUFvQixDQUF3SSxDQUFDLGtCQUFrQixhQUFhLE9BQU8sd0hBQXdILCtFQUErRSxJQUFJLHdEQUF3RCxlQUFlLDhCQUE4QixrQkFBa0IsbUJBQW1CLFlBQVksc0NBQXNDLHlCQUF5QixzQkFBc0IsZUFBZSxvQkFBb0IsbURBQW1ELCtCQUErQixJQUFJLGdCQUFnQixXQUFXLHdDQUF3QyxpQkFBaUIsbUJBQW1CLE1BQU0sWUFBWSxNQUFNLGdDQUFnQyxPQUFPLE9BQU8seUJBQXlCLFNBQVMsSUFBSSxpQkFBaUIsdUJBQXVCLG1CQUFtQix1QkFBdUIsc0JBQXNCLHlCQUF5QixvQkFBb0Isd0JBQXdCLFdBQVcsRUFBRSxjQUFjLHFCQUFxQix1TUFBdU0saUNBQWlDLCtCQUErQixNQUFNLGlEQUFpRCx3REFBd0QsMERBQTBELG9CQUFvQixpQkFBaUIsdUJBQXVCLG1CQUFtQixzQkFBc0IsK0JBQStCLHVCQUF1QixtQkFBbUIsNkNBQTZDLGVBQWUsWUFBWSxFQUFFLHVCQUF1QixjQUFjLFFBQVEsbUJBQW1CLDRDQUE0QyxJQUFJLEdBQUcsSUFBSSxxQkFBcUIseUJBQXlCLHFGQUFxRixxQkFBcUIsR0FBRyw0QkFBNEIsSUFBSSxNQUFNLHNDQUFzQyxRQUFRLGlCQUFpQiwwQkFBMEIsbUJBQW1CLFlBQVksU0FBUyxJQUFJLE1BQU0sV0FBVyxrQ0FBa0MsS0FBSyxxREFBcUQsK0JBQStCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLDhEQUE4RCxPQUFPLHVCQUF1Qix5RUFBeUUsNEJBQTRCLG9CQUFvQiw4QkFBOEIsVUFBVSxXQUFXLHVCQUF1QiwwQ0FBMEMsd0VBQXdFLElBQUksOERBQThELG1LQUFtSyxnQ0FBZ0MsZ0NBQWdDLHVIQUF1SCxTQUFTLHFCQUFxQiw2R0FBNkcsa0RBQWtELEtBQUssTUFBTSxZQUFZLHNCQUFzQixnQkFBZ0Isc0NBQXNDLE1BQU0sOEJBQThCLHNCQUFzQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0LmpzP2RiODQiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQ9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXtMVFM6XCJoOm1tOnNzIEFcIixMVDpcImg6bW0gQVwiLEw6XCJNTS9ERC9ZWVlZXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn0sdD0vKFxcW1teW10qXFxdKXwoWy1fOi8uLCgpXFxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyxuPS9cXGRcXGQvLHI9L1xcZFxcZD8vLGk9L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8sbz17fSxzPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0sZj1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLGg9ZnVuY3Rpb24oZSl7dmFyIHQ9b1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LHU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW8ubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGQ9e0E6W2ksZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249dShlLCExKX1dLGE6W2ksZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249dShlLCEwKX1dLFM6Wy9cXGQvLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W3IsYShcInNlY29uZHNcIildLHNzOltyLGEoXCJzZWNvbmRzXCIpXSxtOltyLGEoXCJtaW51dGVzXCIpXSxtbTpbcixhKFwibWludXRlc1wiKV0sSDpbcixhKFwiaG91cnNcIildLGg6W3IsYShcImhvdXJzXCIpXSxISDpbcixhKFwiaG91cnNcIildLGhoOltyLGEoXCJob3Vyc1wiKV0sRDpbcixhKFwiZGF5XCIpXSxERDpbbixhKFwiZGF5XCIpXSxEbzpbaSxmdW5jdGlvbihlKXt2YXIgdD1vLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSxNOltyLGEoXCJtb250aFwiKV0sTU06W24sYShcIm1vbnRoXCIpXSxNTU06W2ksZnVuY3Rpb24oZSl7dmFyIHQ9aChcIm1vbnRoc1wiKSxuPShoKFwibW9udGhzU2hvcnRcIil8fHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgwLDMpfSkpKS5pbmRleE9mKGUpKzE7aWYobjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPW4lMTJ8fG59XSxNTU1NOltpLGZ1bmN0aW9uKGUpe3ZhciB0PWgoXCJtb250aHNcIikuaW5kZXhPZihlKSsxO2lmKHQ8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD10JTEyfHx0fV0sWTpbL1srLV0/XFxkKy8sYShcInllYXJcIildLFlZOltuLGZ1bmN0aW9uKGUpe3RoaXMueWVhcj1zKGUpfV0sWVlZWTpbL1xcZHs0fS8sYShcInllYXJcIildLFo6ZixaWjpmfTtmdW5jdGlvbiBjKG4pe3ZhciByLGk7cj1uLGk9byYmby5mb3JtYXRzO2Zvcih2YXIgcz0obj1yLnJlcGxhY2UoLyhcXFtbXlxcXV0rXSl8KExUUz98bHsxLDR9fEx7MSw0fSkvZywoZnVuY3Rpb24odCxuLHIpe3ZhciBvPXImJnIudG9VcHBlckNhc2UoKTtyZXR1cm4gbnx8aVtyXXx8ZVtyXXx8aVtvXS5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdHx8bi5zbGljZSgxKX0pKX0pKSkubWF0Y2godCksYT1zLmxlbmd0aCxmPTA7ZjxhO2YrPTEpe3ZhciBoPXNbZl0sdT1kW2hdLGM9dSYmdVswXSxsPXUmJnVbMV07c1tmXT1sP3tyZWdleDpjLHBhcnNlcjpsfTpoLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9MDtuPGE7bis9MSl7dmFyIGk9c1tuXTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSlyKz1pLmxlbmd0aDtlbHNle3ZhciBvPWkucmVnZXgsZj1pLnBhcnNlcixoPWUuc2xpY2UociksdT1vLmV4ZWMoaClbMF07Zi5jYWxsKHQsdSksZT1lLnJlcGxhY2UodSxcIlwiKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUuYWZ0ZXJub29uO2lmKHZvaWQgMCE9PXQpe3ZhciBuPWUuaG91cnM7dD9uPDEyJiYoZS5ob3Vycys9MTIpOjEyPT09biYmKGUuaG91cnM9MCksZGVsZXRlIGUuYWZ0ZXJub29ufX0odCksdH19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtuLnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZSYmZS5wYXJzZVR3b0RpZ2l0WWVhciYmKHM9ZS5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHI9dC5wcm90b3R5cGUsaT1yLnBhcnNlO3IucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlLHI9ZS51dGMscz1lLmFyZ3M7dGhpcy4kdT1yO3ZhciBhPXNbMV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBmPSEwPT09c1syXSxoPSEwPT09c1szXSx1PWZ8fGgsZD1zWzJdO2gmJihkPXNbMl0pLG89dGhpcy4kbG9jYWxlKCksIWYmJmQmJihvPW4uTHNbZF0pLHRoaXMuJGQ9ZnVuY3Rpb24oZSx0LG4pe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciByPWModCkoZSksaT1yLnllYXIsbz1yLm1vbnRoLHM9ci5kYXksYT1yLmhvdXJzLGY9ci5taW51dGVzLGg9ci5zZWNvbmRzLHU9ci5taWxsaXNlY29uZHMsZD1yLnpvbmUsbD1uZXcgRGF0ZSxtPXN8fChpfHxvPzE6bC5nZXREYXRlKCkpLE09aXx8bC5nZXRGdWxsWWVhcigpLFk9MDtpJiYhb3x8KFk9bz4wP28tMTpsLmdldE1vbnRoKCkpO3ZhciBwPWF8fDAsdj1mfHwwLEQ9aHx8MCxnPXV8fDA7cmV0dXJuIGQ/bmV3IERhdGUoRGF0ZS5VVEMoTSxZLG0scCx2LEQsZys2MCpkLm9mZnNldCoxZTMpKTpuP25ldyBEYXRlKERhdGUuVVRDKE0sWSxtLHAsdixELGcpKTpuZXcgRGF0ZShNLFksbSxwLHYsRCxnKX1jYXRjaChlKXtyZXR1cm4gbmV3IERhdGUoXCJcIil9fSh0LGEsciksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxvPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbD1hLmxlbmd0aCxtPTE7bTw9bDttKz0xKXtzWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMscyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWwmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dayjs/plugin/customParseFormat.js\n"); /***/ }), /***/ "../../../node_modules/dayjs/plugin/isoWeek.js": /*!*****************************************************!*\ !*** ../../../node_modules/dayjs/plugin/isoWeek.js ***! \*****************************************************/ /***/ (function(module) { eval("!function(e,t){ true?module.exports=t():0}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9pc29XZWVrLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBb0Qsb0JBQW9CLENBQThILENBQUMsa0JBQWtCLGFBQWEsWUFBWSx1QkFBdUIsa0JBQWtCLGlDQUFpQyxlQUFlLHlCQUF5QixzQkFBc0IsdUJBQXVCLCtEQUErRCx3SkFBd0osMEJBQTBCLDBCQUEwQixzRUFBc0UsZ0JBQWdCLHdCQUF3QixrQ0FBa0MseUtBQXlLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vaXNvV2Vlay5qcz9jOGNiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPVwiZGF5XCI7cmV0dXJuIGZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hZGQoNC10Lmlzb1dlZWtkYXkoKSxlKX0sZD1pLnByb3RvdHlwZTtkLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykueWVhcigpfSxkLmlzb1dlZWs9ZnVuY3Rpb24odCl7aWYoIXRoaXMuJHV0aWxzKCkudSh0KSlyZXR1cm4gdGhpcy5hZGQoNyoodC10aGlzLmlzb1dlZWsoKSksZSk7dmFyIGksZCxuLG8scj1hKHRoaXMpLHU9KGk9dGhpcy5pc29XZWVrWWVhcigpLGQ9dGhpcy4kdSxuPShkP3MudXRjOnMpKCkueWVhcihpKS5zdGFydE9mKFwieWVhclwiKSxvPTQtbi5pc29XZWVrZGF5KCksbi5pc29XZWVrZGF5KCk+NCYmKG8rPTcpLG4uYWRkKG8sZSkpO3JldHVybiByLmRpZmYodSxcIndlZWtcIikrMX0sZC5pc29XZWVrZGF5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiR1dGlscygpLnUoZSk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/ZTplLTcpfTt2YXIgbj1kLnN0YXJ0T2Y7ZC5zdGFydE9mPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy4kdXRpbHMoKSxzPSEhaS51KHQpfHx0O3JldHVyblwiaXNvd2Vla1wiPT09aS5wKGUpP3M/dGhpcy5kYXRlKHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSkuc3RhcnRPZihcImRheVwiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoXCJkYXlcIik6bi5iaW5kKHRoaXMpKGUsdCl9fX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dayjs/plugin/isoWeek.js\n"); /***/ }), /***/ "../../../node_modules/debug/src/browser.js": /*!**************************************************!*\ !*** ../../../node_modules/debug/src/browser.js ***! \**************************************************/ /***/ ((module, exports, __webpack_require__) => { eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"../../../node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIsWUFBWTtBQUNaLFlBQVk7QUFDWixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sc3FDQUFXO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9mOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/browser.js\n"); /***/ }), /***/ "../../../node_modules/debug/src/common.js": /*!*************************************************!*\ !*** ../../../node_modules/debug/src/common.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = __webpack_require__(/*! ms */ \"../../../node_modules/ms/index.js\");\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMuanMiLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFPLENBQUMsNkNBQUk7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsU0FBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsU0FBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanM/YmRlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/common.js\n"); /***/ }), /***/ "../../../node_modules/dompurify/dist/purify.js": /*!******************************************************!*\ !*** ../../../node_modules/dompurify/dist/purify.js ***! \******************************************************/ /***/ (function(module) { eval("/*! @license DOMPurify 3.0.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.3/LICENSE */\n\n(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n})(this, (function () { 'use strict';\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create\n } = Object; // eslint-disable-line import/no-mutable-exports\n\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\n\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return construct(func, args);\n };\n }\n /* Add properties to a lookup table */\n\n function addToSet(set, array, transformCaseFunc) {\n var _transformCaseFunc;\n\n transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;\n\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n\n while (l--) {\n let element = array[l];\n\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n }\n /* Shallow clone an object */\n\n function clone(object) {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n newObject[property] = value;\n }\n\n return newObject;\n }\n /* This method automatically checks if the prop is function\n * or getter and behaves accordingly. */\n\n function lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG\n\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']); // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME\n });\n\n const getGlobal = () => typeof window === 'undefined' ? null : window;\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n\n\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n } // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n\n\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n const DOMPurify = root => createDOMPurify(root);\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n\n\n DOMPurify.version = '3.0.3';\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n const currentScript = originalDocument.currentScript;\n let {\n document\n } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n\n let CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n\n let SAFE_FOR_TEMPLATES = false;\n /* Decide if document with ... should be returned */\n\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n /* Parsing of strict XHTML documents */\n\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n /* Keep a reference to config to pass to hooks */\n\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n\n\n const _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n\n\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n\n\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n\n\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...text]);\n ALLOWED_ATTR = [];\n\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n\n\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n\n\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n\n\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n\n\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n } // Overwrite existing TrustedTypes policy.\n\n\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; // Sign local variables required by `sanitize`.\n\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n } // If creating the internal policy succeeded sign internal variables.\n\n\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n } // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n\n\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n\n const ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n const ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n } // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n\n\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n } // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n\n\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n } // The only way to switch from SVG to MathML is via\n // and HTML integration points\n\n\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n } // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n\n\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n } // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n\n\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n } // For XHTML and XML documents that support custom namespaces\n\n\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n } // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n\n\n return false;\n };\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n\n\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n\n\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name); // We void attribute values for unremovable \"is\"\" attributes\n\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n\n\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n\n\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {// Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n\n\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n\n\n const _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n\n\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n\n\n const _isNode = function _isNode(object) {\n return typeof Node === 'object' ? object instanceof Node : object && typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n\n\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n\n\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content;\n /* Execute a hook if present */\n\n _executeHook('beforeSanitizeElements', currentNode, null);\n /* Check if element is clobbered or can clobber */\n\n\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n\n return true;\n }\n /* Now let's check the element's type and name */\n\n\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n\n\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n\n return true;\n }\n /* Remove element if anything forbids its presence */\n\n\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n }\n /* Keep content except for bad-listed elements */\n\n\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n\n return true;\n }\n /* Check whether element has a valid namespace */\n\n\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n\n return true;\n }\n /* Make sure that older browsers don't get noscript mXSS */\n\n\n if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n\n return true;\n }\n /* Sanitize element content to be template-safe */\n\n\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR, ' ');\n content = stringReplace(content, ERB_EXPR, ' ');\n content = stringReplace(content, TMPLIT_EXPR, ' ');\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n\n\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n\n\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n\n\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n\n return true;\n };\n /**\n * _basicCustomElementCheck\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n * @param {string} tagName name of the tag of the node to sanitize\n */\n\n\n const _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n return tagName.indexOf('-') > 0;\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n\n\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n let attr;\n let value;\n let lcName;\n let l;\n /* Execute a hook if present */\n\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n\n while (l--) {\n attr = attributes[l];\n const {\n name,\n namespaceURI\n } = attr;\n value = name === 'value' ? attr.value : stringTrim(attr.value);\n lcName = transformCaseFunc(name);\n /* Execute a hook if present */\n\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */\n\n\n _removeAttribute(name, currentNode);\n /* Did the hooks approve of the attribute? */\n\n\n if (!hookEvent.keepAttr) {\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n\n\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n\n\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR, ' ');\n value = stringReplace(value, ERB_EXPR, ' ');\n value = stringReplace(value, TMPLIT_EXPR, ' ');\n }\n /* Is `value` valid for this attribute? */\n\n\n const lcTag = transformCaseFunc(currentNode.nodeName);\n\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n\n\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode); // Prefix the value and later re-create the attribute with the sanitized value\n\n\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Handle attributes that require Trusted Types */\n\n\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n\n\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n /* Execute a hook if present */\n\n\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n\n\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode;\n\n const shadowIterator = _createIterator(fragment);\n /* Execute a hook if present */\n\n\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n /* Sanitize tags and elements */\n\n\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n /* Deep shadow DOM detected */\n\n\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n /* Check attributes, sanitize if necessary */\n\n\n _sanitizeAttributes(shadowNode);\n }\n /* Execute a hook if present */\n\n\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n\n\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body;\n let importedNode;\n let currentNode;\n let returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n\n IS_EMPTY_INPUT = !dirty;\n\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n\n\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n\n\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n\n\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n\n\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n\n\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n\n\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n\n\n const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n\n\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n /* Shadow DOM detected, sanitize it */\n\n\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n /* Check attributes, sanitize if necessary */\n\n\n _sanitizeAttributes(currentNode);\n }\n /* If we sanitized `dirty` in-place, return it. */\n\n\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n\n\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n\n\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n\n\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n\n SET_CONFIG = true;\n };\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n\n\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n\n\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n\n\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n\n\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n\n\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n\n\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n }\n\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9kaXN0L3B1cmlmeS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBLEVBQUUsS0FBNEQ7QUFDOUQsRUFBRSxDQUN3RztBQUMxRyxDQUFDLHVCQUF1Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxVQUFVOztBQUVkO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZGQUE2RixhQUFhO0FBQzFHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxlQUFlO0FBQzVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsby9CQUFvL0I7O0FBRXAvQjtBQUNBLDBaQUEwWjtBQUMxWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpVUFBaVU7QUFDalU7O0FBRUE7QUFD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QTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsUUFBUTtBQUN4QixnQkFBZ0IsU0FBUztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxVQUFVO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQixVQUFVO0FBQzFCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUM7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmpzPzhlY2IiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjAuMyB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4wLjMvTElDRU5TRSAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5ET01QdXJpZnkgPSBmYWN0b3J5KCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGNvbnN0IHtcbiAgICBlbnRyaWVzLFxuICAgIHNldFByb3RvdHlwZU9mLFxuICAgIGlzRnJvemVuLFxuICAgIGdldFByb3RvdHlwZU9mLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvclxuICB9ID0gT2JqZWN0O1xuICBsZXQge1xuICAgIGZyZWV6ZSxcbiAgICBzZWFsLFxuICAgIGNyZWF0ZVxuICB9ID0gT2JqZWN0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby1tdXRhYmxlLWV4cG9ydHNcblxuICBsZXQge1xuICAgIGFwcGx5LFxuICAgIGNvbnN0cnVjdFxuICB9ID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3Q7XG5cbiAgaWYgKCFhcHBseSkge1xuICAgIGFwcGx5ID0gZnVuY3Rpb24gYXBwbHkoZnVuLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW4uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFmcmVlemUpIHtcbiAgICBmcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2VhbCkge1xuICAgIHNlYWwgPSBmdW5jdGlvbiBzZWFsKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cblxuICBpZiAoIWNvbnN0cnVjdCkge1xuICAgIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIGNvbnN0cnVjdChGdW5jLCBhcmdzKSB7XG4gICAgICByZXR1cm4gbmV3IEZ1bmMoLi4uYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGFycmF5Rm9yRWFjaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpO1xuICBjb25zdCBhcnJheVBvcCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnBvcCk7XG4gIGNvbnN0IGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICBjb25zdCBzdHJpbmdUb0xvd2VyQ2FzZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSk7XG4gIGNvbnN0IHN0cmluZ1RvU3RyaW5nID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgY29uc3Qgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuICBjb25zdCBzdHJpbmdSZXBsYWNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuICBjb25zdCBzdHJpbmdJbmRleE9mID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpO1xuICBjb25zdCBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuICBjb25zdCByZWdFeHBUZXN0ID0gdW5hcHBseShSZWdFeHAucHJvdG90eXBlLnRlc3QpO1xuICBjb25zdCB0eXBlRXJyb3JDcmVhdGUgPSB1bmNvbnN0cnVjdChUeXBlRXJyb3IpO1xuICBmdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXNBcmcpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHVuY29uc3RydWN0KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0cnVjdChmdW5jLCBhcmdzKTtcbiAgICB9O1xuICB9XG4gIC8qIEFkZCBwcm9wZXJ0aWVzIHRvIGEgbG9va3VwIHRhYmxlICovXG5cbiAgZnVuY3Rpb24gYWRkVG9TZXQoc2V0LCBhcnJheSwgdHJhbnNmb3JtQ2FzZUZ1bmMpIHtcbiAgICB2YXIgX3RyYW5zZm9ybUNhc2VGdW5jO1xuXG4gICAgdHJhbnNmb3JtQ2FzZUZ1bmMgPSAoX3RyYW5zZm9ybUNhc2VGdW5jID0gdHJhbnNmb3JtQ2FzZUZ1bmMpICE9PSBudWxsICYmIF90cmFuc2Zvcm1DYXNlRnVuYyAhPT0gdm9pZCAwID8gX3RyYW5zZm9ybUNhc2VGdW5jIDogc3RyaW5nVG9Mb3dlckNhc2U7XG5cbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIC8vIE1ha2UgJ2luJyBhbmQgdHJ1dGh5IGNoZWNrcyBsaWtlIEJvb2xlYW4oc2V0LmNvbnN0cnVjdG9yKVxuICAgICAgLy8gaW5kZXBlbmRlbnQgb2YgYW55IHByb3BlcnRpZXMgZGVmaW5lZCBvbiBPYmplY3QucHJvdG90eXBlLlxuICAgICAgLy8gUHJldmVudCBwcm90b3R5cGUgc2V0dGVycyBmcm9tIGludGVyY2VwdGluZyBzZXQgYXMgYSB0aGlzIHZhbHVlLlxuICAgICAgc2V0UHJvdG90eXBlT2Yoc2V0LCBudWxsKTtcbiAgICB9XG5cbiAgICBsZXQgbCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlIChsLS0pIHtcbiAgICAgIGxldCBlbGVtZW50ID0gYXJyYXlbbF07XG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbGNFbGVtZW50ID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGxjRWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIC8vIENvbmZpZyBwcmVzZXRzIChlLmcuIHRhZ3MuanMsIGF0dHJzLmpzKSBhcmUgaW1tdXRhYmxlLlxuICAgICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgICBhcnJheVtsXSA9IGxjRWxlbWVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50ID0gbGNFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldFtlbGVtZW50XSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldDtcbiAgfVxuICAvKiBTaGFsbG93IGNsb25lIGFuIG9iamVjdCAqL1xuXG4gIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkge1xuICAgIGNvbnN0IG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZV0gb2YgZW50cmllcyhvYmplY3QpKSB7XG4gICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld09iamVjdDtcbiAgfVxuICAvKiBUaGlzIG1ldGhvZCBhdXRvbWF0aWNhbGx5IGNoZWNrcyBpZiB0aGUgcHJvcCBpcyBmdW5jdGlvblxuICAgKiBvciBnZXR0ZXIgYW5kIGJlaGF2ZXMgYWNjb3JkaW5nbHkuICovXG5cbiAgZnVuY3Rpb24gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcCkge1xuICAgIHdoaWxlIChvYmplY3QgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlc2MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wKTtcblxuICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy5nZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWxsYmFja1ZhbHVlKGVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybignZmFsbGJhY2sgdmFsdWUgZm9yJywgZWxlbWVudCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGh0bWwkMSA9IGZyZWV6ZShbJ2EnLCAnYWJicicsICdhY3JvbnltJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxpbmsnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY2l0ZScsICdjb2RlJywgJ2NvbCcsICdjb2xncm91cCcsICdjb250ZW50JywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVjb3JhdG9yJywgJ2RlbCcsICdkZXRhaWxzJywgJ2RmbicsICdkaWFsb2cnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbGVtZW50JywgJ2VtJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2ZvbnQnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0ZXInLCAnbmF2JywgJ25vYnInLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ291dHB1dCcsICdwJywgJ3BpY3R1cmUnLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLCAncnAnLCAncnQnLCAncnVieScsICdzJywgJ3NhbXAnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc2hhZG93JywgJ3NtYWxsJywgJ3NvdXJjZScsICdzcGFjZXInLCAnc3BhbicsICdzdHJpa2UnLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RyJywgJ3RyYWNrJywgJ3R0JywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3diciddKTsgLy8gU1ZHXG5cbiAgY29uc3Qgc3ZnJDEgPSBmcmVlemUoWydzdmcnLCAnYScsICdhbHRnbHlwaCcsICdhbHRnbHlwaGRlZicsICdhbHRnbHlwaGl0ZW0nLCAnYW5pbWF0ZWNvbG9yJywgJ2FuaW1hdGVtb3Rpb24nLCAnYW5pbWF0ZXRyYW5zZm9ybScsICdjaXJjbGUnLCAnY2xpcHBhdGgnLCAnZGVmcycsICdkZXNjJywgJ2VsbGlwc2UnLCAnZmlsdGVyJywgJ2ZvbnQnLCAnZycsICdnbHlwaCcsICdnbHlwaHJlZicsICdoa2VybicsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhcmdyYWRpZW50JywgJ21hcmtlcicsICdtYXNrJywgJ21ldGFkYXRhJywgJ21wYXRoJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbGdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdHlsZScsICdzd2l0Y2gnLCAnc3ltYm9sJywgJ3RleHQnLCAndGV4dHBhdGgnLCAndGl0bGUnLCAndHJlZicsICd0c3BhbicsICd2aWV3JywgJ3ZrZXJuJ10pO1xuICBjb25zdCBzdmdGaWx0ZXJzID0gZnJlZXplKFsnZmVCbGVuZCcsICdmZUNvbG9yTWF0cml4JywgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLCAnZmVDb21wb3NpdGUnLCAnZmVDb252b2x2ZU1hdHJpeCcsICdmZURpZmZ1c2VMaWdodGluZycsICdmZURpc3BsYWNlbWVudE1hcCcsICdmZURpc3RhbnRMaWdodCcsICdmZURyb3BTaGFkb3cnLCAnZmVGbG9vZCcsICdmZUZ1bmNBJywgJ2ZlRnVuY0InLCAnZmVGdW5jRycsICdmZUZ1bmNSJywgJ2ZlR2F1c3NpYW5CbHVyJywgJ2ZlSW1hZ2UnLCAnZmVNZXJnZScsICdmZU1lcmdlTm9kZScsICdmZU1vcnBob2xvZ3knLCAnZmVPZmZzZXQnLCAnZmVQb2ludExpZ2h0JywgJ2ZlU3BlY3VsYXJMaWdodGluZycsICdmZVNwb3RMaWdodCcsICdmZVRpbGUnLCAnZmVUdXJidWxlbmNlJ10pOyAvLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gIC8vIFdlIHN0aWxsIG5lZWQgdG8ga25vdyB0aGVtIHNvIHRoYXQgd2UgY2FuIGRvIG5hbWVzcGFjZVxuICAvLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbiAgLy8gYWxsb3ctbGlzdC5cblxuICBjb25zdCBzdmdEaXNhbGxvd2VkID0gZnJlZXplKFsnYW5pbWF0ZScsICdjb2xvci1wcm9maWxlJywgJ2N1cnNvcicsICdkaXNjYXJkJywgJ2ZvbnQtZmFjZScsICdmb250LWZhY2UtZm9ybWF0JywgJ2ZvbnQtZmFjZS1uYW1lJywgJ2ZvbnQtZmFjZS1zcmMnLCAnZm9udC1mYWNlLXVyaScsICdmb3JlaWdub2JqZWN0JywgJ2hhdGNoJywgJ2hhdGNocGF0aCcsICdtZXNoJywgJ21lc2hncmFkaWVudCcsICdtZXNocGF0Y2gnLCAnbWVzaHJvdycsICdtaXNzaW5nLWdseXBoJywgJ3NjcmlwdCcsICdzZXQnLCAnc29saWRjb2xvcicsICd1bmtub3duJywgJ3VzZSddKTtcbiAgY29uc3QgbWF0aE1sJDEgPSBmcmVlemUoWydtYXRoJywgJ21lbmNsb3NlJywgJ21lcnJvcicsICdtZmVuY2VkJywgJ21mcmFjJywgJ21nbHlwaCcsICdtaScsICdtbGFiZWxlZHRyJywgJ21tdWx0aXNjcmlwdHMnLCAnbW4nLCAnbW8nLCAnbW92ZXInLCAnbXBhZGRlZCcsICdtcGhhbnRvbScsICdtcm9vdCcsICdtcm93JywgJ21zJywgJ21zcGFjZScsICdtc3FydCcsICdtc3R5bGUnLCAnbXN1YicsICdtc3VwJywgJ21zdWJzdXAnLCAnbXRhYmxlJywgJ210ZCcsICdtdGV4dCcsICdtdHInLCAnbXVuZGVyJywgJ211bmRlcm92ZXInLCAnbXByZXNjcmlwdHMnXSk7IC8vIFNpbWlsYXJseSB0byBTVkcsIHdlIHdhbnQgdG8ga25vdyBhbGwgTWF0aE1MIGVsZW1lbnRzLFxuICAvLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cblxuICBjb25zdCBtYXRoTWxEaXNhbGxvd2VkID0gZnJlZXplKFsnbWFjdGlvbicsICdtYWxpZ25ncm91cCcsICdtYWxpZ25tYXJrJywgJ21sb25nZGl2JywgJ21zY2FycmllcycsICdtc2NhcnJ5JywgJ21zZ3JvdXAnLCAnbXN0YWNrJywgJ21zbGluZScsICdtc3JvdycsICdzZW1hbnRpY3MnLCAnYW5ub3RhdGlvbicsICdhbm5vdGF0aW9uLXhtbCcsICdtcHJlc2NyaXB0cycsICdub25lJ10pO1xuICBjb25zdCB0ZXh0ID0gZnJlZXplKFsnI3RleHQnXSk7XG5cbiAgY29uc3QgaHRtbCA9IGZyZWV6ZShbJ2FjY2VwdCcsICdhY3Rpb24nLCAnYWxpZ24nLCAnYWx0JywgJ2F1dG9jYXBpdGFsaXplJywgJ2F1dG9jb21wbGV0ZScsICdhdXRvcGljdHVyZWlucGljdHVyZScsICdhdXRvcGxheScsICdiYWNrZ3JvdW5kJywgJ2JnY29sb3InLCAnYm9yZGVyJywgJ2NhcHR1cmUnLCAnY2VsbHBhZGRpbmcnLCAnY2VsbHNwYWNpbmcnLCAnY2hlY2tlZCcsICdjaXRlJywgJ2NsYXNzJywgJ2NsZWFyJywgJ2NvbG9yJywgJ2NvbHMnLCAnY29sc3BhbicsICdjb250cm9scycsICdjb250cm9sc2xpc3QnLCAnY29vcmRzJywgJ2Nyb3Nzb3JpZ2luJywgJ2RhdGV0aW1lJywgJ2RlY29kaW5nJywgJ2RlZmF1bHQnLCAnZGlyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVwaWN0dXJlaW5waWN0dXJlJywgJ2Rpc2FibGVyZW1vdGVwbGF5YmFjaycsICdkb3dubG9hZCcsICdkcmFnZ2FibGUnLCAnZW5jdHlwZScsICdlbnRlcmtleWhpbnQnLCAnZmFjZScsICdmb3InLCAnaGVhZGVycycsICdoZWlnaHQnLCAnaGlkZGVuJywgJ2hpZ2gnLCAnaHJlZicsICdocmVmbGFuZycsICdpZCcsICdpbnB1dG1vZGUnLCAnaW50ZWdyaXR5JywgJ2lzbWFwJywgJ2tpbmQnLCAnbGFiZWwnLCAnbGFuZycsICdsaXN0JywgJ2xvYWRpbmcnLCAnbG9vcCcsICdsb3cnLCAnbWF4JywgJ21heGxlbmd0aCcsICdtZWRpYScsICdtZXRob2QnLCAnbWluJywgJ21pbmxlbmd0aCcsICdtdWx0aXBsZScsICdtdXRlZCcsICduYW1lJywgJ25vbmNlJywgJ25vc2hhZGUnLCAnbm92YWxpZGF0ZScsICdub3dyYXAnLCAnb3BlbicsICdvcHRpbXVtJywgJ3BhdHRlcm4nLCAncGxhY2Vob2xkZXInLCAncGxheXNpbmxpbmUnLCAncG9zdGVyJywgJ3ByZWxvYWQnLCAncHViZGF0ZScsICdyYWRpb2dyb3VwJywgJ3JlYWRvbmx5JywgJ3JlbCcsICdyZXF1aXJlZCcsICdyZXYnLCAncmV2ZXJzZWQnLCAncm9sZScsICdyb3dzJywgJ3Jvd3NwYW4nLCAnc3BlbGxjaGVjaycsICdzY29wZScsICdzZWxlY3RlZCcsICdzaGFwZScsICdzaXplJywgJ3NpemVzJywgJ3NwYW4nLCAnc3JjbGFuZycsICdzdGFydCcsICdzcmMnLCAnc3Jjc2V0JywgJ3N0ZXAnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJpbmRleCcsICd0aXRsZScsICd0cmFuc2xhdGUnLCAndHlwZScsICd1c2VtYXAnLCAndmFsaWduJywgJ3ZhbHVlJywgJ3dpZHRoJywgJ3htbG5zJywgJ3Nsb3QnXSk7XG4gIGNvbnN0IHN2ZyA9IGZyZWV6ZShbJ2FjY2VudC1oZWlnaHQnLCAnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXNjZW50JywgJ2F0dHJpYnV0ZW5hbWUnLCAnYXR0cmlidXRldHlwZScsICdhemltdXRoJywgJ2Jhc2VmcmVxdWVuY3knLCAnYmFzZWxpbmUtc2hpZnQnLCAnYmVnaW4nLCAnYmlhcycsICdieScsICdjbGFzcycsICdjbGlwJywgJ2NsaXBwYXRodW5pdHMnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvcicsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdjeCcsICdjeScsICdkJywgJ2R4JywgJ2R5JywgJ2RpZmZ1c2Vjb25zdGFudCcsICdkaXJlY3Rpb24nLCAnZGlzcGxheScsICdkaXZpc29yJywgJ2R1cicsICdlZGdlbW9kZScsICdlbGV2YXRpb24nLCAnZW5kJywgJ2ZpbGwnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmaWx0ZXInLCAnZmlsdGVydW5pdHMnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZngnLCAnZnknLCAnZzEnLCAnZzInLCAnZ2x5cGgtbmFtZScsICdnbHlwaHJlZicsICdncmFkaWVudHVuaXRzJywgJ2dyYWRpZW50dHJhbnNmb3JtJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2ltYWdlLXJlbmRlcmluZycsICdpbicsICdpbjInLCAnaycsICdrMScsICdrMicsICdrMycsICdrNCcsICdrZXJuaW5nJywgJ2tleXBvaW50cycsICdrZXlzcGxpbmVzJywgJ2tleXRpbWVzJywgJ2xhbmcnLCAnbGVuZ3RoYWRqdXN0JywgJ2xldHRlci1zcGFjaW5nJywgJ2tlcm5lbG1hdHJpeCcsICdrZXJuZWx1bml0bGVuZ3RoJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ2xvY2FsJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnbWFya2VyaGVpZ2h0JywgJ21hcmtlcnVuaXRzJywgJ21hcmtlcndpZHRoJywgJ21hc2tjb250ZW50dW5pdHMnLCAnbWFza3VuaXRzJywgJ21heCcsICdtYXNrJywgJ21lZGlhJywgJ21ldGhvZCcsICdtb2RlJywgJ21pbicsICduYW1lJywgJ251bW9jdGF2ZXMnLCAnb2Zmc2V0JywgJ29wZXJhdG9yJywgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JpZW50JywgJ29yaWVudGF0aW9uJywgJ29yaWdpbicsICdvdmVyZmxvdycsICdwYWludC1vcmRlcicsICdwYXRoJywgJ3BhdGhsZW5ndGgnLCAncGF0dGVybmNvbnRlbnR1bml0cycsICdwYXR0ZXJudHJhbnNmb3JtJywgJ3BhdHRlcm51bml0cycsICdwb2ludHMnLCAncHJlc2VydmVhbHBoYScsICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJywgJ3ByaW1pdGl2ZXVuaXRzJywgJ3InLCAncngnLCAncnknLCAncmFkaXVzJywgJ3JlZngnLCAncmVmeScsICdyZXBlYXRjb3VudCcsICdyZXBlYXRkdXInLCAncmVzdGFydCcsICdyZXN1bHQnLCAncm90YXRlJywgJ3NjYWxlJywgJ3NlZWQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3NwZWN1bGFyY29uc3RhbnQnLCAnc3BlY3VsYXJleHBvbmVudCcsICdzcHJlYWRtZXRob2QnLCAnc3RhcnRvZmZzZXQnLCAnc3RkZGV2aWF0aW9uJywgJ3N0aXRjaHRpbGVzJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZScsICdzdHJva2Utd2lkdGgnLCAnc3R5bGUnLCAnc3VyZmFjZXNjYWxlJywgJ3N5c3RlbWxhbmd1YWdlJywgJ3RhYmluZGV4JywgJ3RhcmdldHgnLCAndGFyZ2V0eScsICd0cmFuc2Zvcm0nLCAndHJhbnNmb3JtLW9yaWdpbicsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dGxlbmd0aCcsICd0eXBlJywgJ3UxJywgJ3UyJywgJ3VuaWNvZGUnLCAndmFsdWVzJywgJ3ZpZXdib3gnLCAndmlzaWJpbGl0eScsICd2ZXJzaW9uJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dpZHRoJywgJ3dvcmQtc3BhY2luZycsICd3cmFwJywgJ3dyaXRpbmctbW9kZScsICd4Y2hhbm5lbHNlbGVjdG9yJywgJ3ljaGFubmVsc2VsZWN0b3InLCAneCcsICd4MScsICd4MicsICd4bWxucycsICd5JywgJ3kxJywgJ3kyJywgJ3onLCAnem9vbWFuZHBhbiddKTtcbiAgY29uc3QgbWF0aE1sID0gZnJlZXplKFsnYWNjZW50JywgJ2FjY2VudHVuZGVyJywgJ2FsaWduJywgJ2JldmVsbGVkJywgJ2Nsb3NlJywgJ2NvbHVtbnNhbGlnbicsICdjb2x1bW5saW5lcycsICdjb2x1bW5zcGFuJywgJ2Rlbm9tYWxpZ24nLCAnZGVwdGgnLCAnZGlyJywgJ2Rpc3BsYXknLCAnZGlzcGxheXN0eWxlJywgJ2VuY29kaW5nJywgJ2ZlbmNlJywgJ2ZyYW1lJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2xhcmdlb3AnLCAnbGVuZ3RoJywgJ2xpbmV0aGlja25lc3MnLCAnbHNwYWNlJywgJ2xxdW90ZScsICdtYXRoYmFja2dyb3VuZCcsICdtYXRoY29sb3InLCAnbWF0aHNpemUnLCAnbWF0aHZhcmlhbnQnLCAnbWF4c2l6ZScsICdtaW5zaXplJywgJ21vdmFibGVsaW1pdHMnLCAnbm90YXRpb24nLCAnbnVtYWxpZ24nLCAnb3BlbicsICdyb3dhbGlnbicsICdyb3dsaW5lcycsICdyb3dzcGFjaW5nJywgJ3Jvd3NwYW4nLCAncnNwYWNlJywgJ3JxdW90ZScsICdzY3JpcHRsZXZlbCcsICdzY3JpcHRtaW5zaXplJywgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJywgJ3NlbGVjdGlvbicsICdzZXBhcmF0b3InLCAnc2VwYXJhdG9ycycsICdzdHJldGNoeScsICdzdWJzY3JpcHRzaGlmdCcsICdzdXBzY3JpcHRzaGlmdCcsICdzeW1tZXRyaWMnLCAndm9mZnNldCcsICd3aWR0aCcsICd4bWxucyddKTtcbiAgY29uc3QgeG1sID0gZnJlZXplKFsneGxpbms6aHJlZicsICd4bWw6aWQnLCAneGxpbms6dGl0bGUnLCAneG1sOnNwYWNlJywgJ3htbG5zOnhsaW5rJ10pO1xuXG4gIGNvbnN0IE1VU1RBQ0hFX0VYUFIgPSBzZWFsKC9cXHtcXHtbXFx3XFxXXSp8W1xcd1xcV10qXFx9XFx9L2dtKTsgLy8gU3BlY2lmeSB0ZW1wbGF0ZSBkZXRlY3Rpb24gcmVnZXggZm9yIFNBRkVfRk9SX1RFTVBMQVRFUyBtb2RlXG5cbiAgY29uc3QgRVJCX0VYUFIgPSBzZWFsKC88JVtcXHdcXFddKnxbXFx3XFxXXSolPi9nbSk7XG4gIGNvbnN0IFRNUExJVF9FWFBSID0gc2VhbCgvXFwke1tcXHdcXFddKn0vZ20pO1xuICBjb25zdCBEQVRBX0FUVFIgPSBzZWFsKC9eZGF0YS1bXFwtXFx3LlxcdTAwQjctXFx1RkZGRl0vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuXG4gIGNvbnN0IEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuXG4gIGNvbnN0IElTX0FMTE9XRURfVVJJID0gc2VhbCgvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHApOnxbXmEtel18W2EteisuXFwtXSsoPzpbXmEteisuXFwtOl18JCkpL2kgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICApO1xuICBjb25zdCBJU19TQ1JJUFRfT1JfREFUQSA9IHNlYWwoL14oPzpcXHcrc2NyaXB0fGRhdGEpOi9pKTtcbiAgY29uc3QgQVRUUl9XSElURVNQQUNFID0gc2VhbCgvW1xcdTAwMDAtXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MTgwRVxcdTIwMDAtXFx1MjAyOVxcdTIwNUZcXHUzMDAwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuICApO1xuICBjb25zdCBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG5cbiAgdmFyIEVYUFJFU1NJT05TID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNVVNUQUNIRV9FWFBSOiBNVVNUQUNIRV9FWFBSLFxuICAgIEVSQl9FWFBSOiBFUkJfRVhQUixcbiAgICBUTVBMSVRfRVhQUjogVE1QTElUX0VYUFIsXG4gICAgREFUQV9BVFRSOiBEQVRBX0FUVFIsXG4gICAgQVJJQV9BVFRSOiBBUklBX0FUVFIsXG4gICAgSVNfQUxMT1dFRF9VUkk6IElTX0FMTE9XRURfVVJJLFxuICAgIElTX1NDUklQVF9PUl9EQVRBOiBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICBBVFRSX1dISVRFU1BBQ0U6IEFUVFJfV0hJVEVTUEFDRSxcbiAgICBET0NUWVBFX05BTUU6IERPQ1RZUEVfTkFNRVxuICB9KTtcblxuICBjb25zdCBnZXRHbG9iYWwgPSAoKSA9PiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbm8tb3AgcG9saWN5IGZvciBpbnRlcm5hbCB1c2Ugb25seS5cbiAgICogRG9uJ3QgZXhwb3J0IHRoaXMgZnVuY3Rpb24gb3V0c2lkZSB0aGlzIG1vZHVsZSFcbiAgICogQHBhcmFtIHs/VHJ1c3RlZFR5cGVQb2xpY3lGYWN0b3J5fSB0cnVzdGVkVHlwZXMgVGhlIHBvbGljeSBmYWN0b3J5LlxuICAgKiBAcGFyYW0ge0hUTUxTY3JpcHRFbGVtZW50fSBwdXJpZnlIb3N0RWxlbWVudCBUaGUgU2NyaXB0IGVsZW1lbnQgdXNlZCB0byBsb2FkIERPTVB1cmlmeSAodG8gZGV0ZXJtaW5lIHBvbGljeSBuYW1lIHN1ZmZpeCkuXG4gICAqIEByZXR1cm4gez9UcnVzdGVkVHlwZVBvbGljeX0gVGhlIHBvbGljeSBjcmVhdGVkIChvciBudWxsLCBpZiBUcnVzdGVkIFR5cGVzXG4gICAqIGFyZSBub3Qgc3VwcG9ydGVkIG9yIGNyZWF0aW5nIHRoZSBwb2xpY3kgZmFpbGVkKS5cbiAgICovXG5cblxuICBjb25zdCBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5ID0gZnVuY3Rpb24gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIHB1cmlmeUhvc3RFbGVtZW50KSB7XG4gICAgaWYgKHR5cGVvZiB0cnVzdGVkVHlwZXMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIEFsbG93IHRoZSBjYWxsZXJzIHRvIGNvbnRyb2wgdGhlIHVuaXF1ZSBwb2xpY3kgbmFtZVxuICAgIC8vIGJ5IGFkZGluZyBhIGRhdGEtdHQtcG9saWN5LXN1ZmZpeCB0byB0aGUgc2NyaXB0IGVsZW1lbnQgd2l0aCB0aGUgRE9NUHVyaWZ5LlxuICAgIC8vIFBvbGljeSBjcmVhdGlvbiB3aXRoIGR1cGxpY2F0ZSBuYW1lcyB0aHJvd3MgaW4gVHJ1c3RlZCBUeXBlcy5cblxuXG4gICAgbGV0IHN1ZmZpeCA9IG51bGw7XG4gICAgY29uc3QgQVRUUl9OQU1FID0gJ2RhdGEtdHQtcG9saWN5LXN1ZmZpeCc7XG5cbiAgICBpZiAocHVyaWZ5SG9zdEVsZW1lbnQgJiYgcHVyaWZ5SG9zdEVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICAgIHN1ZmZpeCA9IHB1cmlmeUhvc3RFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvbGljeU5hbWUgPSAnZG9tcHVyaWZ5JyArIChzdWZmaXggPyAnIycgKyBzdWZmaXggOiAnJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kocG9saWN5TmFtZSwge1xuICAgICAgICBjcmVhdGVIVE1MKGh0bWwpIHtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHNjcmlwdFVybDtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvLyBQb2xpY3kgY3JlYXRpb24gZmFpbGVkIChtb3N0IGxpa2VseSBhbm90aGVyIERPTVB1cmlmeSBzY3JpcHQgaGFzXG4gICAgICAvLyBhbHJlYWR5IHJ1bikuIFNraXAgY3JlYXRpbmcgdGhlIHBvbGljeSwgYXMgdGhpcyB3aWxsIG9ubHkgY2F1c2UgZXJyb3JzXG4gICAgICAvLyBpZiBUVCBhcmUgZW5mb3JjZWQuXG4gICAgICBjb25zb2xlLndhcm4oJ1RydXN0ZWRUeXBlcyBwb2xpY3kgJyArIHBvbGljeU5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZURPTVB1cmlmeSgpIHtcbiAgICBsZXQgd2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBnZXRHbG9iYWwoKTtcblxuICAgIGNvbnN0IERPTVB1cmlmeSA9IHJvb3QgPT4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuICAgIC8qKlxuICAgICAqIFZlcnNpb24gbGFiZWwsIGV4cG9zZWQgZm9yIGVhc2llciBjaGVja3NcbiAgICAgKiBpZiBET01QdXJpZnkgaXMgdXAgdG8gZGF0ZSBvciBub3RcbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LnZlcnNpb24gPSAnMy4wLjMnO1xuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAgICogRW1wdHkgaWYgbm90aGluZyB3YXMgcmVtb3ZlZC5cbiAgICAgKi9cblxuICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG5cbiAgICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LmRvY3VtZW50IHx8IHdpbmRvdy5kb2N1bWVudC5ub2RlVHlwZSAhPT0gOSkge1xuICAgICAgLy8gTm90IHJ1bm5pbmcgaW4gYSBicm93c2VyLCBwcm92aWRlIGEgZmFjdG9yeSBmdW5jdGlvblxuICAgICAgLy8gc28gdGhhdCB5b3UgY2FuIHBhc3MgeW91ciBvd24gV2luZG93XG4gICAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBET01QdXJpZnk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxEb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gb3JpZ2luYWxEb2N1bWVudC5jdXJyZW50U2NyaXB0O1xuICAgIGxldCB7XG4gICAgICBkb2N1bWVudFxuICAgIH0gPSB3aW5kb3c7XG4gICAgY29uc3Qge1xuICAgICAgRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQsXG4gICAgICBOb2RlLFxuICAgICAgRWxlbWVudCxcbiAgICAgIE5vZGVGaWx0ZXIsXG4gICAgICBOYW1lZE5vZGVNYXAgPSB3aW5kb3cuTmFtZWROb2RlTWFwIHx8IHdpbmRvdy5Nb3pOYW1lZEF0dHJNYXAsXG4gICAgICBIVE1MRm9ybUVsZW1lbnQsXG4gICAgICBET01QYXJzZXIsXG4gICAgICB0cnVzdGVkVHlwZXNcbiAgICB9ID0gd2luZG93O1xuICAgIGNvbnN0IEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcbiAgICBjb25zdCBjbG9uZU5vZGUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2Nsb25lTm9kZScpO1xuICAgIGNvbnN0IGdldE5leHRTaWJsaW5nID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICduZXh0U2libGluZycpO1xuICAgIGNvbnN0IGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICBjb25zdCBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7IC8vIEFzIHBlciBpc3N1ZSAjNDcsIHRoZSB3ZWItY29tcG9uZW50cyByZWdpc3RyeSBpcyBpbmhlcml0ZWQgYnkgYVxuICAgIC8vIG5ldyBkb2N1bWVudCBjcmVhdGVkIHZpYSBjcmVhdGVIVE1MRG9jdW1lbnQuIEFzIHBlciB0aGUgc3BlY1xuICAgIC8vIChodHRwOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjcmVhdGluZy1hbmQtcGFzc2luZy1yZWdpc3RyaWVzKVxuICAgIC8vIGEgbmV3IGVtcHR5IHJlZ2lzdHJ5IGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRlbXBsYXRlIGNvbnRlbnRzIG93bmVyXG4gICAgLy8gZG9jdW1lbnQsIHNvIHdlIHVzZSB0aGF0IGFzIG91ciBwYXJlbnQgZG9jdW1lbnQgdG8gZW5zdXJlIG5vdGhpbmdcbiAgICAvLyBpcyBpbmhlcml0ZWQuXG5cbiAgICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcblxuICAgICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50ID0gdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0cnVzdGVkVHlwZXNQb2xpY3k7XG4gICAgbGV0IGVtcHR5SFRNTCA9ICcnO1xuICAgIGNvbnN0IHtcbiAgICAgIGltcGxlbWVudGF0aW9uLFxuICAgICAgY3JlYXRlTm9kZUl0ZXJhdG9yLFxuICAgICAgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lXG4gICAgfSA9IGRvY3VtZW50O1xuICAgIGNvbnN0IHtcbiAgICAgIGltcG9ydE5vZGVcbiAgICB9ID0gb3JpZ2luYWxEb2N1bWVudDtcbiAgICBsZXQgaG9va3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAgICovXG5cbiAgICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZW50cmllcyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZ2V0UGFyZW50Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbXBsZW1lbnRhdGlvbiAmJiBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCB7XG4gICAgICBNVVNUQUNIRV9FWFBSLFxuICAgICAgRVJCX0VYUFIsXG4gICAgICBUTVBMSVRfRVhQUixcbiAgICAgIERBVEFfQVRUUixcbiAgICAgIEFSSUFfQVRUUixcbiAgICAgIElTX1NDUklQVF9PUl9EQVRBLFxuICAgICAgQVRUUl9XSElURVNQQUNFXG4gICAgfSA9IEVYUFJFU1NJT05TO1xuICAgIGxldCB7XG4gICAgICBJU19BTExPV0VEX1VSSTogSVNfQUxMT1dFRF9VUkkkMVxuICAgIH0gPSBFWFBSRVNTSU9OUztcbiAgICAvKipcbiAgICAgKiBXZSBjb25zaWRlciB0aGUgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYmVsb3cgdG8gYmUgc2FmZS4gSWRlYWxseVxuICAgICAqIGRvbid0IGFkZCBhbnkgbmV3IG9uZXMgYnV0IGZlZWwgZnJlZSB0byByZW1vdmUgdW53YW50ZWQgb25lcy5cbiAgICAgKi9cblxuICAgIC8qIGFsbG93ZWQgZWxlbWVudCBuYW1lcyAqL1xuXG4gICAgbGV0IEFMTE9XRURfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLmh0bWwkMSwgLi4uc3ZnJDEsIC4uLnN2Z0ZpbHRlcnMsIC4uLm1hdGhNbCQxLCAuLi50ZXh0XSk7XG4gICAgLyogQWxsb3dlZCBhdHRyaWJ1dGUgbmFtZXMgKi9cblxuICAgIGxldCBBTExPV0VEX0FUVFIgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9BVFRSID0gYWRkVG9TZXQoe30sIFsuLi5odG1sLCAuLi5zdmcsIC4uLm1hdGhNbCwgLi4ueG1sXSk7XG4gICAgLypcbiAgICAgKiBDb25maWd1cmUgaG93IERPTVBVcmlmeSBzaG91bGQgaGFuZGxlIGN1c3RvbSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIGN1c3RvbWl6ZWQgYnVpbHQtaW4gZWxlbWVudHMuXG4gICAgICogQHByb3BlcnR5IHtSZWdFeHB8RnVuY3Rpb258bnVsbH0gdGFnTmFtZUNoZWNrIG9uZSBvZiBbbnVsbCwgcmVnZXhQYXR0ZXJuLCBwcmVkaWNhdGVdLiBEZWZhdWx0OiBgbnVsbGAgKGRpc2FsbG93IGFueSBjdXN0b20gZWxlbWVudHMpXG4gICAgICogQHByb3BlcnR5IHtSZWdFeHB8RnVuY3Rpb258bnVsbH0gYXR0cmlidXRlTmFtZUNoZWNrIG9uZSBvZiBbbnVsbCwgcmVnZXhQYXR0ZXJuLCBwcmVkaWNhdGVdLiBEZWZhdWx0OiBgbnVsbGAgKGRpc2FsbG93IGFueSBhdHRyaWJ1dGVzIG5vdCBvbiB0aGUgYWxsb3cgbGlzdClcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyBhbGxvdyBjdXN0b20gZWxlbWVudHMgZGVyaXZlZCBmcm9tIGJ1aWx0LWlucyBpZiB0aGV5IHBhc3MgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLiBEZWZhdWx0OiBgZmFsc2VgLlxuICAgICAqL1xuXG4gICAgbGV0IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICB0YWdOYW1lQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlTmFtZUNoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSxcbiAgICAgIGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICB9XG4gICAgfSkpO1xuICAgIC8qIEV4cGxpY2l0bHkgZm9yYmlkZGVuIHRhZ3MgKG92ZXJyaWRlcyBBTExPV0VEX1RBR1MvQUREX1RBR1MpICovXG5cbiAgICBsZXQgRk9SQklEX1RBR1MgPSBudWxsO1xuICAgIC8qIEV4cGxpY2l0bHkgZm9yYmlkZGVuIGF0dHJpYnV0ZXMgKG92ZXJyaWRlcyBBTExPV0VEX0FUVFIvQUREX0FUVFIpICovXG5cbiAgICBsZXQgRk9SQklEX0FUVFIgPSBudWxsO1xuICAgIC8qIERlY2lkZSBpZiBBUklBIGF0dHJpYnV0ZXMgYXJlIG9rYXkgKi9cblxuICAgIGxldCBBTExPV19BUklBX0FUVFIgPSB0cnVlO1xuICAgIC8qIERlY2lkZSBpZiBjdXN0b20gZGF0YSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG5cbiAgICBsZXQgQUxMT1dfREFUQV9BVFRSID0gdHJ1ZTtcbiAgICAvKiBEZWNpZGUgaWYgdW5rbm93biBwcm90b2NvbHMgYXJlIG9rYXkgKi9cblxuICAgIGxldCBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGZhbHNlO1xuICAgIC8qIERlY2lkZSBpZiBzZWxmLWNsb3NpbmcgdGFncyBpbiBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkLlxuICAgICAqIFVzdWFsbHkgcmVtb3ZlZCBkdWUgdG8gYSBtWFNTIGlzc3VlIGluIGpRdWVyeSAzLjAgKi9cblxuICAgIGxldCBBTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgPSB0cnVlO1xuICAgIC8qIE91dHB1dCBzaG91bGQgYmUgc2FmZSBmb3IgY29tbW9uIHRlbXBsYXRlIGVuZ2luZXMuXG4gICAgICogVGhpcyBtZWFucywgRE9NUHVyaWZ5IHJlbW92ZXMgZGF0YSBhdHRyaWJ1dGVzLCBtdXN0YWNoZXMgYW5kIEVSQlxuICAgICAqL1xuXG4gICAgbGV0IFNBRkVfRk9SX1RFTVBMQVRFUyA9IGZhbHNlO1xuICAgIC8qIERlY2lkZSBpZiBkb2N1bWVudCB3aXRoIDxodG1sPi4uLiBzaG91bGQgYmUgcmV0dXJuZWQgKi9cblxuICAgIGxldCBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuICAgIC8qIFRyYWNrIHdoZXRoZXIgY29uZmlnIGlzIGFscmVhZHkgc2V0IG9uIHRoaXMgaW5zdGFuY2Ugb2YgRE9NUHVyaWZ5LiAqL1xuXG4gICAgbGV0IFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICAvKiBEZWNpZGUgaWYgYWxsIGVsZW1lbnRzIChlLmcuIHN0eWxlLCBzY3JpcHQpIG11c3QgYmUgY2hpbGRyZW4gb2ZcbiAgICAgKiBkb2N1bWVudC5ib2R5LiBCeSBkZWZhdWx0LCBicm93c2VycyBtaWdodCBtb3ZlIHRoZW0gdG8gZG9jdW1lbnQuaGVhZCAqL1xuXG4gICAgbGV0IEZPUkNFX0JPRFkgPSBmYWxzZTtcbiAgICAvKiBEZWNpZGUgaWYgYSBET00gYEhUTUxCb2R5RWxlbWVudGAgc2hvdWxkIGJlIHJldHVybmVkLCBpbnN0ZWFkIG9mIGEgaHRtbFxuICAgICAqIHN0cmluZyAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKS5cbiAgICAgKiBJZiBgV0hPTEVfRE9DVU1FTlRgIGlzIGVuYWJsZWQgYSBgSFRNTEh0bWxFbGVtZW50YCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWRcbiAgICAgKi9cblxuICAgIGxldCBSRVRVUk5fRE9NID0gZmFsc2U7XG4gICAgLyogRGVjaWRlIGlmIGEgRE9NIGBEb2N1bWVudEZyYWdtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAgICogc3RyaW5nICAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKSAqL1xuXG4gICAgbGV0IFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcbiAgICAvKiBUcnkgdG8gcmV0dXJuIGEgVHJ1c3RlZCBUeXBlIG9iamVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLCByZXR1cm4gYSBzdHJpbmcgaW5cbiAgICAgKiBjYXNlIFRydXN0ZWQgVHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgICovXG5cbiAgICBsZXQgUkVUVVJOX1RSVVNURURfVFlQRSA9IGZhbHNlO1xuICAgIC8qIE91dHB1dCBzaG91bGQgYmUgZnJlZSBmcm9tIERPTSBjbG9iYmVyaW5nIGF0dGFja3M/XG4gICAgICogVGhpcyBzYW5pdGl6ZXMgbWFya3VwcyBuYW1lZCB3aXRoIGNvbGxpZGluZywgY2xvYmJlcmFibGUgYnVpbHQtaW4gRE9NIEFQSXMuXG4gICAgICovXG5cbiAgICBsZXQgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcbiAgICAvKiBBY2hpZXZlIGZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiBieSBpc29sYXRpbmcgdGhlIG5hbWVzcGFjZSBvZiBuYW1lZFxuICAgICAqIHByb3BlcnRpZXMgYW5kIEpTIHZhcmlhYmxlcywgbWl0aWdhdGluZyBhdHRhY2tzIHRoYXQgYWJ1c2UgdGhlIEhUTUwvRE9NIHNwZWMgcnVsZXMuXG4gICAgICpcbiAgICAgKiBIVE1ML0RPTSBzcGVjIHJ1bGVzIHRoYXQgZW5hYmxlIERPTSBDbG9iYmVyaW5nOlxuICAgICAqICAgLSBOYW1lZCBBY2Nlc3Mgb24gV2luZG93ICjCpzcuMy4zKVxuICAgICAqICAgLSBET00gVHJlZSBBY2Nlc3NvcnMgKMKnMy4xLjUpXG4gICAgICogICAtIEZvcm0gRWxlbWVudCBQYXJlbnQtQ2hpbGQgUmVsYXRpb25zICjCpzQuMTAuMylcbiAgICAgKiAgIC0gSWZyYW1lIHNyY2RvYyAvIE5lc3RlZCBXaW5kb3dQcm94aWVzICjCpzQuOC41KVxuICAgICAqICAgLSBIVE1MQ29sbGVjdGlvbiAowqc0LjIuMTAuMilcbiAgICAgKlxuICAgICAqIE5hbWVzcGFjZSBpc29sYXRpb24gaXMgaW1wbGVtZW50ZWQgYnkgcHJlZml4aW5nIGBpZGAgYW5kIGBuYW1lYCBhdHRyaWJ1dGVzXG4gICAgICogd2l0aCBhIGNvbnN0YW50IHN0cmluZywgaS5lLiwgYHVzZXItY29udGVudC1gXG4gICAgICovXG5cbiAgICBsZXQgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBmYWxzZTtcbiAgICBjb25zdCBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggPSAndXNlci1jb250ZW50LSc7XG4gICAgLyogS2VlcCBlbGVtZW50IGNvbnRlbnQgd2hlbiByZW1vdmluZyBlbGVtZW50PyAqL1xuXG4gICAgbGV0IEtFRVBfQ09OVEVOVCA9IHRydWU7XG4gICAgLyogSWYgYSBgTm9kZWAgaXMgcGFzc2VkIHRvIHNhbml0aXplKCksIHRoZW4gcGVyZm9ybXMgc2FuaXRpemF0aW9uIGluLXBsYWNlIGluc3RlYWRcbiAgICAgKiBvZiBpbXBvcnRpbmcgaXQgaW50byBhIG5ldyBEb2N1bWVudCBhbmQgcmV0dXJuaW5nIGEgc2FuaXRpemVkIGNvcHkgKi9cblxuICAgIGxldCBJTl9QTEFDRSA9IGZhbHNlO1xuICAgIC8qIEFsbG93IHVzYWdlIG9mIHByb2ZpbGVzIGxpa2UgaHRtbCwgc3ZnIGFuZCBtYXRoTWwgKi9cblxuICAgIGxldCBVU0VfUFJPRklMRVMgPSB7fTtcbiAgICAvKiBUYWdzIHRvIGlnbm9yZSBjb250ZW50IG9mIHdoZW4gS0VFUF9DT05URU5UIGlzIHRydWUgKi9cblxuICAgIGxldCBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFsnYW5ub3RhdGlvbi14bWwnLCAnYXVkaW8nLCAnY29sZ3JvdXAnLCAnZGVzYycsICdmb3JlaWdub2JqZWN0JywgJ2hlYWQnLCAnaWZyYW1lJywgJ21hdGgnLCAnbWknLCAnbW4nLCAnbW8nLCAnbXMnLCAnbXRleHQnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdwbGFpbnRleHQnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3N2ZycsICd0ZW1wbGF0ZScsICd0aGVhZCcsICd0aXRsZScsICd2aWRlbycsICd4bXAnXSk7XG4gICAgLyogVGFncyB0aGF0IGFyZSBzYWZlIGZvciBkYXRhOiBVUklzICovXG5cbiAgICBsZXQgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFsnYXVkaW8nLCAndmlkZW8nLCAnaW1nJywgJ3NvdXJjZScsICdpbWFnZScsICd0cmFjayddKTtcbiAgICAvKiBBdHRyaWJ1dGVzIHNhZmUgZm9yIHZhbHVlcyBsaWtlIFwiamF2YXNjcmlwdDpcIiAqL1xuXG4gICAgbGV0IFVSSV9TQUZFX0FUVFJJQlVURVMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyA9IGFkZFRvU2V0KHt9LCBbJ2FsdCcsICdjbGFzcycsICdmb3InLCAnaWQnLCAnbGFiZWwnLCAnbmFtZScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3JvbGUnLCAnc3VtbWFyeScsICd0aXRsZScsICd2YWx1ZScsICdzdHlsZScsICd4bWxucyddKTtcbiAgICBjb25zdCBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICAgIGNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGNvbnN0IEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xuICAgIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuXG4gICAgbGV0IE5BTUVTUEFDRSA9IEhUTUxfTkFNRVNQQUNFO1xuICAgIGxldCBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuICAgIC8qIEFsbG93ZWQgWEhUTUwrWE1MIG5hbWVzcGFjZXMgKi9cblxuICAgIGxldCBBTExPV0VEX05BTUVTUEFDRVMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTID0gYWRkVG9TZXQoe30sIFtNQVRITUxfTkFNRVNQQUNFLCBTVkdfTkFNRVNQQUNFLCBIVE1MX05BTUVTUEFDRV0sIHN0cmluZ1RvU3RyaW5nKTtcbiAgICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cblxuICAgIGxldCBQQVJTRVJfTUVESUFfVFlQRTtcbiAgICBjb25zdCBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTID0gWydhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCAndGV4dC9odG1sJ107XG4gICAgY29uc3QgREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA9ICd0ZXh0L2h0bWwnO1xuICAgIGxldCB0cmFuc2Zvcm1DYXNlRnVuYztcbiAgICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIGNvbmZpZyB0byBwYXNzIHRvIGhvb2tzICovXG5cbiAgICBsZXQgQ09ORklHID0gbnVsbDtcbiAgICAvKiBJZGVhbGx5LCBkbyBub3QgdG91Y2ggYW55dGhpbmcgYmVsb3cgdGhpcyBsaW5lICovXG5cbiAgICAvKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICovXG5cbiAgICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcblxuICAgIGNvbnN0IGlzUmVnZXhPckZ1bmN0aW9uID0gZnVuY3Rpb24gaXNSZWdleE9yRnVuY3Rpb24odGVzdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX3BhcnNlQ29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGNmZyBvcHRpb25hbCBjb25maWcgbGl0ZXJhbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cblxuICAgIGNvbnN0IF9wYXJzZUNvbmZpZyA9IGZ1bmN0aW9uIF9wYXJzZUNvbmZpZyhjZmcpIHtcbiAgICAgIGlmIChDT05GSUcgJiYgQ09ORklHID09PSBjZmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gdGFtcGVyaW5nICovXG5cblxuICAgICAgaWYgKCFjZmcgfHwgdHlwZW9mIGNmZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2ZnID0ge307XG4gICAgICB9XG4gICAgICAvKiBTaGllbGQgY29uZmlndXJhdGlvbiBvYmplY3QgZnJvbSBwcm90b3R5cGUgcG9sbHV0aW9uICovXG5cblxuICAgICAgY2ZnID0gY2xvbmUoY2ZnKTtcbiAgICAgIFBBUlNFUl9NRURJQV9UWVBFID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWluY2x1ZGVzXG4gICAgICBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTLmluZGV4T2YoY2ZnLlBBUlNFUl9NRURJQV9UWVBFKSA9PT0gLTEgPyBQQVJTRVJfTUVESUFfVFlQRSA9IERFRkFVTFRfUEFSU0VSX01FRElBX1RZUEUgOiBQQVJTRVJfTUVESUFfVFlQRSA9IGNmZy5QQVJTRVJfTUVESUFfVFlQRTsgLy8gSFRNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzIGFyZSBub3QgY2FzZS1zZW5zaXRpdmUsIGNvbnZlcnRpbmcgdG8gbG93ZXJjYXNlLiBLZWVwaW5nIFhIVE1MIGFzIGlzLlxuXG4gICAgICB0cmFuc2Zvcm1DYXNlRnVuYyA9IFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyA/IHN0cmluZ1RvU3RyaW5nIDogc3RyaW5nVG9Mb3dlckNhc2U7XG4gICAgICAvKiBTZXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG5cbiAgICAgIEFMTE9XRURfVEFHUyA9ICdBTExPV0VEX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICAgIEFMTE9XRURfQVRUUiA9ICdBTExPV0VEX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICAgIEFMTE9XRURfTkFNRVNQQUNFUyA9ICdBTExPV0VEX05BTUVTUEFDRVMnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9OQU1FU1BBQ0VTLCBzdHJpbmdUb1N0cmluZykgOiBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUztcbiAgICAgIFVSSV9TQUZFX0FUVFJJQlVURVMgPSAnQUREX1VSSV9TQUZFX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICBjZmcuQUREX1VSSV9TQUZFX0FUVFIsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICB0cmFuc2Zvcm1DYXNlRnVuYyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgOiBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVM7XG4gICAgICBEQVRBX1VSSV9UQUdTID0gJ0FERF9EQVRBX1VSSV9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldChjbG9uZShERUZBVUxUX0RBVEFfVVJJX1RBR1MpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgY2ZnLkFERF9EQVRBX1VSSV9UQUdTLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgICAgRk9SQklEX0NPTlRFTlRTID0gJ0ZPUkJJRF9DT05URU5UUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTO1xuICAgICAgRk9SQklEX1RBR1MgPSAnRk9SQklEX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX1RBR1MsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgRk9SQklEX0FUVFIgPSAnRk9SQklEX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgVVNFX1BST0ZJTEVTID0gJ1VTRV9QUk9GSUxFUycgaW4gY2ZnID8gY2ZnLlVTRV9QUk9GSUxFUyA6IGZhbHNlO1xuICAgICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuXG4gICAgICBBTExPV19EQVRBX0FUVFIgPSBjZmcuQUxMT1dfREFUQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG5cbiAgICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IGNmZy5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcblxuICAgICAgU0FGRV9GT1JfVEVNUExBVEVTID0gY2ZnLlNBRkVfRk9SX1RFTVBMQVRFUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBXSE9MRV9ET0NVTUVOVCA9IGNmZy5XSE9MRV9ET0NVTUVOVCB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBSRVRVUk5fRE9NID0gY2ZnLlJFVFVSTl9ET00gfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcblxuICAgICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBjZmcuUkVUVVJOX1RSVVNURURfVFlQRSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBGT1JDRV9CT0RZID0gY2ZnLkZPUkNFX0JPRFkgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcblxuICAgICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuXG4gICAgICBTQU5JVElaRV9OQU1FRF9QUk9QUyA9IGNmZy5TQU5JVElaRV9OQU1FRF9QUk9QUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBLRUVQX0NPTlRFTlQgPSBjZmcuS0VFUF9DT05URU5UICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG5cbiAgICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIElTX0FMTE9XRURfVVJJJDEgPSBjZmcuQUxMT1dFRF9VUklfUkVHRVhQIHx8IElTX0FMTE9XRURfVVJJO1xuICAgICAgTkFNRVNQQUNFID0gY2ZnLk5BTUVTUEFDRSB8fCBIVE1MX05BTUVTUEFDRTtcbiAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIHx8IHt9O1xuXG4gICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spKSB7XG4gICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2s7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgIH1cblxuICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiB0eXBlb2YgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgQUxMT1dfREFUQV9BVFRSID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIFJFVFVSTl9ET00gPSB0cnVlO1xuICAgICAgfVxuICAgICAgLyogUGFyc2UgcHJvZmlsZSBpbmZvICovXG5cblxuICAgICAgaWYgKFVTRV9QUk9GSUxFUykge1xuICAgICAgICBBTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLnRleHRdKTtcbiAgICAgICAgQUxMT1dFRF9BVFRSID0gW107XG5cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBodG1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgaHRtbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgc3ZnKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2Z0ZpbHRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIHN2Z0ZpbHRlcnMpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgc3ZnKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLm1hdGhNbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgbWF0aE1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgbWF0aE1sKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIE1lcmdlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqL1xuXG5cbiAgICAgIGlmIChjZmcuQUREX1RBR1MpIHtcbiAgICAgICAgaWYgKEFMTE9XRURfVEFHUyA9PT0gREVGQVVMVF9BTExPV0VEX1RBR1MpIHtcbiAgICAgICAgICBBTExPV0VEX1RBR1MgPSBjbG9uZShBTExPV0VEX1RBR1MpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBjZmcuQUREX1RBR1MsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSID09PSBERUZBVUxUX0FMTE9XRURfQVRUUikge1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZnLkFERF9VUklfU0FGRV9BVFRSKSB7XG4gICAgICAgIGFkZFRvU2V0KFVSSV9TQUZFX0FUVFJJQlVURVMsIGNmZy5BRERfVVJJX1NBRkVfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZnLkZPUkJJRF9DT05URU5UUykge1xuICAgICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cbiAgICAgIC8qIEFkZCAjdGV4dCBpbiBjYXNlIEtFRVBfQ09OVEVOVCBpcyBzZXQgdG8gdHJ1ZSAqL1xuXG5cbiAgICAgIGlmIChLRUVQX0NPTlRFTlQpIHtcbiAgICAgICAgQUxMT1dFRF9UQUdTWycjdGV4dCddID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8qIEFkZCBodG1sLCBoZWFkIGFuZCBib2R5IHRvIEFMTE9XRURfVEFHUyBpbiBjYXNlIFdIT0xFX0RPQ1VNRU5UIGlzIHRydWUgKi9cblxuXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ2h0bWwnLCAnaGVhZCcsICdib2R5J10pO1xuICAgICAgfVxuICAgICAgLyogQWRkIHRib2R5IHRvIEFMTE9XRURfVEFHUyBpbiBjYXNlIHRhYmxlcyBhcmUgcGVybWl0dGVkLCBzZWUgIzI4NiwgIzM2NSAqL1xuXG5cbiAgICAgIGlmIChBTExPV0VEX1RBR1MudGFibGUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ3Rib2R5J10pO1xuICAgICAgICBkZWxldGUgRk9SQklEX1RBR1MudGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVIVE1MXCIgaG9vay4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVTY3JpcHRVUkxcIiBob29rLicpO1xuICAgICAgICB9IC8vIE92ZXJ3cml0ZSBleGlzdGluZyBUcnVzdGVkVHlwZXMgcG9saWN5LlxuXG5cbiAgICAgICAgdHJ1c3RlZFR5cGVzUG9saWN5ID0gY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZOyAvLyBTaWduIGxvY2FsIHZhcmlhYmxlcyByZXF1aXJlZCBieSBgc2FuaXRpemVgLlxuXG4gICAgICAgIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVuaW5pdGlhbGl6ZWQgcG9saWN5LCBhdHRlbXB0IHRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIGRvbXB1cmlmeSBwb2xpY3kuXG4gICAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRydXN0ZWRUeXBlc1BvbGljeSA9IF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kodHJ1c3RlZFR5cGVzLCBjdXJyZW50U2NyaXB0KTtcbiAgICAgICAgfSAvLyBJZiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcG9saWN5IHN1Y2NlZWRlZCBzaWduIGludGVybmFsIHZhcmlhYmxlcy5cblxuXG4gICAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgIT09IG51bGwgJiYgdHlwZW9mIGVtcHR5SFRNTCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUHJldmVudCBmdXJ0aGVyIG1hbmlwdWxhdGlvbiBvZiBjb25maWd1cmF0aW9uLlxuICAgICAgLy8gTm90IGF2YWlsYWJsZSBpbiBJRTgsIFNhZmFyaSA1LCBldGMuXG5cblxuICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICBmcmVlemUoY2ZnKTtcbiAgICAgIH1cblxuICAgICAgQ09ORklHID0gY2ZnO1xuICAgIH07XG5cbiAgICBjb25zdCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgICBjb25zdCBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbJ2ZvcmVpZ25vYmplY3QnLCAnZGVzYycsICd0aXRsZScsICdhbm5vdGF0aW9uLXhtbCddKTsgLy8gQ2VydGFpbiBlbGVtZW50cyBhcmUgYWxsb3dlZCBpbiBib3RoIFNWRyBhbmQgSFRNTFxuICAgIC8vIG5hbWVzcGFjZS4gV2UgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZXhwbGljaXRseVxuICAgIC8vIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgZXJyb25lb3VzbHkgZGVsZXRlZCBmcm9tXG4gICAgLy8gSFRNTCBuYW1lc3BhY2UuXG5cbiAgICBjb25zdCBDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTID0gYWRkVG9TZXQoe30sIFsndGl0bGUnLCAnc3R5bGUnLCAnZm9udCcsICdhJywgJ3NjcmlwdCddKTtcbiAgICAvKiBLZWVwIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBTVkcgYW5kIE1hdGhNTCB0YWdzXG4gICAgICogc28gdGhhdCB3ZSBjYW4gcGVyZm9ybSB0aGUgbmFtZXNwYWNlIGNoZWNrc1xuICAgICAqIGNvcnJlY3RseS4gKi9cblxuICAgIGNvbnN0IEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBzdmckMSk7XG4gICAgYWRkVG9TZXQoQUxMX1NWR19UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0Rpc2FsbG93ZWQpO1xuICAgIGNvbnN0IEFMTF9NQVRITUxfVEFHUyA9IGFkZFRvU2V0KHt9LCBtYXRoTWwkMSk7XG4gICAgYWRkVG9TZXQoQUxMX01BVEhNTF9UQUdTLCBtYXRoTWxEaXNhbGxvd2VkKTtcbiAgICAvKipcbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudCBhIERPTSBlbGVtZW50IHdob3NlIG5hbWVzcGFjZSBpcyBiZWluZyBjaGVja2VkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiBmYWxzZSBpZiB0aGUgZWxlbWVudCBoYXMgYVxuICAgICAqICBuYW1lc3BhY2UgdGhhdCBhIHNwZWMtY29tcGxpYW50IHBhcnNlciB3b3VsZCBuZXZlclxuICAgICAqICByZXR1cm4uIFJldHVybiB0cnVlIG90aGVyd2lzZS5cbiAgICAgKi9cblxuICAgIGNvbnN0IF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgICAgbGV0IHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7IC8vIEluIEpTRE9NLCBpZiB3ZSdyZSBpbnNpZGUgc2hhZG93IERPTSwgdGhlbiBwYXJlbnROb2RlXG4gICAgICAvLyBjYW4gYmUgbnVsbC4gV2UganVzdCBzaW11bGF0ZSBwYXJlbnQgaW4gdGhpcyBjYXNlLlxuXG4gICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnRhZ05hbWUpIHtcbiAgICAgICAgcGFyZW50ID0ge1xuICAgICAgICAgIG5hbWVzcGFjZVVSSTogTkFNRVNQQUNFLFxuICAgICAgICAgIHRhZ05hbWU6ICd0ZW1wbGF0ZSdcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gICAgICBjb25zdCBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuXG4gICAgICBpZiAoIUFMTE9XRURfTkFNRVNQQUNFU1tlbGVtZW50Lm5hbWVzcGFjZVVSSV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIEhUTUwgbmFtZXNwYWNlIHRvIFNWR1xuICAgICAgICAvLyBpcyB2aWEgPHN2Zz4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGtpbGxlZC5cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgICB9IC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBNYXRoTUwgdG8gU1ZHIGlzIHZpYWBcbiAgICAgICAgLy8gc3ZnIGlmIHBhcmVudCBpcyBlaXRoZXIgPGFubm90YXRpb24teG1sPiBvciBNYXRoTUxcbiAgICAgICAgLy8gdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHMuXG5cblxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJyAmJiAocGFyZW50VGFnTmFtZSA9PT0gJ2Fubm90YXRpb24teG1sJyB8fCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pO1xuICAgICAgICB9IC8vIFdlIG9ubHkgYWxsb3cgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBTVkdcbiAgICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBTVkcgbmFtZXNwYWNlLlxuXG5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBIVE1MIG5hbWVzcGFjZSB0byBNYXRoTUxcbiAgICAgICAgLy8gaXMgdmlhIDxtYXRoPi4gSWYgaXQgaGFwcGVucyB2aWEgYW55IG90aGVyIHRhZywgdGhlblxuICAgICAgICAvLyBpdCBzaG91bGQgYmUga2lsbGVkLlxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ21hdGgnO1xuICAgICAgICB9IC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gTWF0aE1MIGlzIHZpYVxuICAgICAgICAvLyA8bWF0aD4gYW5kIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzXG5cblxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCcgJiYgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV07XG4gICAgICAgIH0gLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIE1hdGhNTFxuICAgICAgICAvLyBzcGVjLiBBbGwgb3RoZXJzIGFyZSBkaXNhbGxvd2VkIGluIE1hdGhNTCBuYW1lc3BhY2UuXG5cblxuICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gSFRNTCBpcyB2aWFcbiAgICAgICAgLy8gSFRNTCBpbnRlZ3JhdGlvbiBwb2ludHMsIGFuZCBmcm9tIE1hdGhNTCB0byBIVE1MXG4gICAgICAgIC8vIGlzIHZpYSBNYXRoTUwgdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHNcbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgJiYgIUhUTUxfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UgJiYgIU1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSAvLyBXZSBkaXNhbGxvdyB0YWdzIHRoYXQgYXJlIHNwZWNpZmljIGZvciBNYXRoTUxcbiAgICAgICAgLy8gb3IgU1ZHIGFuZCBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIEhUTUwgbmFtZXNwYWNlXG5cblxuICAgICAgICByZXR1cm4gIUFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSAmJiAoQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UU1t0YWdOYW1lXSB8fCAhQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH0gLy8gRm9yIFhIVE1MIGFuZCBYTUwgZG9jdW1lbnRzIHRoYXQgc3VwcG9ydCBjdXN0b20gbmFtZXNwYWNlc1xuXG5cbiAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgJiYgQUxMT1dFRF9OQU1FU1BBQ0VTW2VsZW1lbnQubmFtZXNwYWNlVVJJXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gVGhlIGNvZGUgc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcGxhY2UgKHRoaXMgbWVhbnNcbiAgICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgc29tZWhvdyBnb3QgbmFtZXNwYWNlIHRoYXQgaXMgbm90XG4gICAgICAvLyBIVE1MLCBTVkcsIE1hdGhNTCBvciBhbGxvd2VkIHZpYSBBTExPV0VEX05BTUVTUEFDRVMpLlxuICAgICAgLy8gUmV0dXJuIGZhbHNlIGp1c3QgaW4gY2FzZS5cblxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfZm9yY2VSZW1vdmVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgICAqL1xuXG5cbiAgICBjb25zdCBfZm9yY2VSZW1vdmUgPSBmdW5jdGlvbiBfZm9yY2VSZW1vdmUobm9kZSkge1xuICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgIGVsZW1lbnQ6IG5vZGVcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9yZW1vdmVBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSBhbiBBdHRyaWJ1dGUgbmFtZVxuICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgICAqL1xuXG5cbiAgICBjb25zdCBfcmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBub2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICBhdHRyaWJ1dGU6IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSxcbiAgICAgICAgICBmcm9tOiBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICBhdHRyaWJ1dGU6IG51bGwsXG4gICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7IC8vIFdlIHZvaWQgYXR0cmlidXRlIHZhbHVlcyBmb3IgdW5yZW1vdmFibGUgXCJpc1wiXCIgYXR0cmlidXRlc1xuXG4gICAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJiAhQUxMT1dFRF9BVFRSW25hbWVdKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfaW5pdERvY3VtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGRpcnR5IGEgc3RyaW5nIG9mIGRpcnR5IG1hcmt1cFxuICAgICAqIEByZXR1cm4ge0RvY3VtZW50fSBhIERPTSwgZmlsbGVkIHdpdGggdGhlIGRpcnR5IG1hcmt1cFxuICAgICAqL1xuXG5cbiAgICBjb25zdCBfaW5pdERvY3VtZW50ID0gZnVuY3Rpb24gX2luaXREb2N1bWVudChkaXJ0eSkge1xuICAgICAgLyogQ3JlYXRlIGEgSFRNTCBkb2N1bWVudCAqL1xuICAgICAgbGV0IGRvYztcbiAgICAgIGxldCBsZWFkaW5nV2hpdGVzcGFjZTtcblxuICAgICAgaWYgKEZPUkNFX0JPRFkpIHtcbiAgICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBJZiBGT1JDRV9CT0RZIGlzbid0IHVzZWQsIGxlYWRpbmcgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBwcmVzZXJ2ZWQgbWFudWFsbHkgKi9cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0cmluZ01hdGNoKGRpcnR5LCAvXltcXHJcXG5cXHQgXSsvKTtcbiAgICAgICAgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgJiYgTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBSb290IG9mIFhIVE1MIGRvYyBtdXN0IGNvbnRhaW4geG1sbnMgZGVjbGFyYXRpb24gKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveGh0bWwxL25vcm1hdGl2ZS5odG1sI3N0cmljdClcbiAgICAgICAgZGlydHkgPSAnPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PC9oZWFkPjxib2R5PicgKyBkaXJ0eSArICc8L2JvZHk+PC9odG1sPic7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpcnR5UGF5bG9hZCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgLypcbiAgICAgICAqIFVzZSB0aGUgRE9NUGFyc2VyIEFQSSBieSBkZWZhdWx0LCBmYWxsYmFjayBsYXRlciBpZiBuZWVkcyBiZVxuICAgICAgICogRE9NUGFyc2VyIG5vdCB3b3JrIGZvciBzdmcgd2hlbiBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50LlxuICAgICAgICovXG5cbiAgICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkaXJ0eVBheWxvYWQsIFBBUlNFUl9NRURJQV9UWVBFKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIC8qIFVzZSBjcmVhdGVIVE1MRG9jdW1lbnQgaW4gY2FzZSBET01QYXJzZXIgaXMgbm90IGF2YWlsYWJsZSAqL1xuXG5cbiAgICAgIGlmICghZG9jIHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KE5BTUVTUEFDRSwgJ3RlbXBsYXRlJywgbnVsbCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9IElTX0VNUFRZX0lOUFVUID8gZW1wdHlIVE1MIDogZGlydHlQYXlsb2FkO1xuICAgICAgICB9IGNhdGNoIChfKSB7Ly8gU3ludGF4IGVycm9yIGlmIGRpcnR5UGF5bG9hZCBpcyBpbnZhbGlkIHhtbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgICBpZiAoZGlydHkgJiYgbGVhZGluZ1doaXRlc3BhY2UpIHtcbiAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpLCBib2R5LmNoaWxkTm9kZXNbMF0gfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICAvKiBXb3JrIG9uIHdob2xlIGRvY3VtZW50IG9yIGp1c3QgaXRzIGJvZHkgKi9cblxuXG4gICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIFdIT0xFX0RPQ1VNRU5UID8gJ2h0bWwnIDogJ2JvZHknKVswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdIT0xFX0RPQ1VNRU5UID8gZG9jLmRvY3VtZW50RWxlbWVudCA6IGJvZHk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfY3JlYXRlSXRlcmF0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0RvY3VtZW50fSByb290IGRvY3VtZW50L2ZyYWdtZW50IHRvIGNyZWF0ZSBpdGVyYXRvciBmb3JcbiAgICAgKiBAcmV0dXJuIHtJdGVyYXRvcn0gaXRlcmF0b3IgaW5zdGFuY2VcbiAgICAgKi9cblxuXG4gICAgY29uc3QgX2NyZWF0ZUl0ZXJhdG9yID0gZnVuY3Rpb24gX2NyZWF0ZUl0ZXJhdG9yKHJvb3QpIHtcbiAgICAgIHJldHVybiBjcmVhdGVOb2RlSXRlcmF0b3IuY2FsbChyb290Lm93bmVyRG9jdW1lbnQgfHwgcm9vdCwgcm9vdCwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCwgZmFsc2UpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX2lzQ2xvYmJlcmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBlbG0gZWxlbWVudCB0byBjaGVjayBmb3IgY2xvYmJlcmluZyBhdHRhY2tzXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBjbG9iYmVyZWQsIGZhbHNlIGlmIHNhZmVcbiAgICAgKi9cblxuXG4gICAgY29uc3QgX2lzQ2xvYmJlcmVkID0gZnVuY3Rpb24gX2lzQ2xvYmJlcmVkKGVsbSkge1xuICAgICAgcmV0dXJuIGVsbSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCAmJiAodHlwZW9mIGVsbS5ub2RlTmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS50ZXh0Q29udGVudCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS5yZW1vdmVDaGlsZCAhPT0gJ2Z1bmN0aW9uJyB8fCAhKGVsbS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKSB8fCB0eXBlb2YgZWxtLnJlbW92ZUF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZWxtLnNldEF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZWxtLm5hbWVzcGFjZVVSSSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS5pbnNlcnRCZWZvcmUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5oYXNDaGlsZE5vZGVzICE9PSAnZnVuY3Rpb24nKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9pc05vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG9iaiBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAgICovXG5cblxuICAgIGNvbnN0IF9pc05vZGUgPSBmdW5jdGlvbiBfaXNOb2RlKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBOb2RlID09PSAnb2JqZWN0JyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiBvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZyc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfZXhlY3V0ZUhvb2tcbiAgICAgKiBFeGVjdXRlIHVzZXIgY29uZmlndXJhYmxlIGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGVudHJ5UG9pbnQgIE5hbWUgb2YgdGhlIGhvb2sncyBlbnRyeSBwb2ludFxuICAgICAqIEBwYXJhbSAge05vZGV9IGN1cnJlbnROb2RlIG5vZGUgdG8gd29yayBvbiB3aXRoIHRoZSBob29rXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBkYXRhIGFkZGl0aW9uYWwgaG9vayBwYXJhbWV0ZXJzXG4gICAgICovXG5cblxuICAgIGNvbnN0IF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgaWYgKCFob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFycmF5Rm9yRWFjaChob29rc1tlbnRyeVBvaW50XSwgaG9vayA9PiB7XG4gICAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVFbGVtZW50c1xuICAgICAqXG4gICAgICogQHByb3RlY3Qgbm9kZU5hbWVcbiAgICAgKiBAcHJvdGVjdCB0ZXh0Q29udGVudFxuICAgICAqIEBwcm90ZWN0IHJlbW92ZUNoaWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gICB7Tm9kZX0gY3VycmVudE5vZGUgdG8gY2hlY2sgZm9yIHBlcm1pc3Npb24gdG8gZXhpc3RcbiAgICAgKiBAcmV0dXJuICB7Qm9vbGVhbn0gdHJ1ZSBpZiBub2RlIHdhcyBraWxsZWQsIGZhbHNlIGlmIGxlZnQgYWxpdmVcbiAgICAgKi9cblxuXG4gICAgY29uc3QgX3Nhbml0aXplRWxlbWVudHMgPSBmdW5jdGlvbiBfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkge1xuICAgICAgbGV0IGNvbnRlbnQ7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIC8qIENoZWNrIGlmIGVsZW1lbnQgaXMgY2xvYmJlcmVkIG9yIGNhbiBjbG9iYmVyICovXG5cblxuICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8qIE5vdyBsZXQncyBjaGVjayB0aGUgZWxlbWVudCdzIHR5cGUgYW5kIG5hbWUgKi9cblxuXG4gICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuXG4gICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLCBjdXJyZW50Tm9kZSwge1xuICAgICAgICB0YWdOYW1lLFxuICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICB9KTtcbiAgICAgIC8qIERldGVjdCBtWFNTIGF0dGVtcHRzIGFidXNpbmcgbmFtZXNwYWNlIGNvbmZ1c2lvbiAqL1xuXG5cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmICghX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50KSB8fCAhX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvKiBSZW1vdmUgZWxlbWVudCBpZiBhbnl0aGluZyBmb3JiaWRzIGl0cyBwcmVzZW5jZSAqL1xuXG5cbiAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBjdXN0b20gZWxlbWVudCB0byBoYW5kbGUgKi9cbiAgICAgICAgaWYgKCFGT1JCSURfVEFHU1t0YWdOYW1lXSAmJiBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCh0YWdOYW1lKSkge1xuICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHRhZ05hbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayh0YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cblxuXG4gICAgICAgIGlmIChLRUVQX0NPTlRFTlQgJiYgIUZPUkJJRF9DT05URU5UU1t0YWdOYW1lXSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2hpbGRDb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNsb25lTm9kZShjaGlsZE5vZGVzW2ldLCB0cnVlKSwgZ2V0TmV4dFNpYmxpbmcoY3VycmVudE5vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLyogQ2hlY2sgd2hldGhlciBlbGVtZW50IGhhcyBhIHZhbGlkIG5hbWVzcGFjZSAqL1xuXG5cbiAgICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIV9jaGVja1ZhbGlkTmFtZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLyogTWFrZSBzdXJlIHRoYXQgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgZ2V0IG5vc2NyaXB0IG1YU1MgKi9cblxuXG4gICAgICBpZiAoKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ25vZW1iZWQnKSAmJiByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkKS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvKiBTYW5pdGl6ZSBlbGVtZW50IGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuXG5cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgLyogR2V0IHRoZSBlbGVtZW50J3MgdGV4dCBjb250ZW50ICovXG4gICAgICAgIGNvbnRlbnQgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgTVVTVEFDSEVfRVhQUiwgJyAnKTtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgRVJCX0VYUFIsICcgJyk7XG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIFRNUExJVF9FWFBSLCAnICcpO1xuXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS50ZXh0Q29udGVudCAhPT0gY29udGVudCkge1xuICAgICAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICAgICAgZWxlbWVudDogY3VycmVudE5vZGUuY2xvbmVOb2RlKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cblxuXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX2lzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbGNUYWcgTG93ZXJjYXNlIHRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGxjTmFtZSBMb3dlcmNhc2UgYXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuXG5cbiAgICBjb25zdCBfaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSB7XG4gICAgICAvKiBNYWtlIHN1cmUgYXR0cmlidXRlIGNhbm5vdCBjbG9iYmVyICovXG4gICAgICBpZiAoU0FOSVRJWkVfRE9NICYmIChsY05hbWUgPT09ICdpZCcgfHwgbGNOYW1lID09PSAnbmFtZScpICYmICh2YWx1ZSBpbiBkb2N1bWVudCB8fCB2YWx1ZSBpbiBmb3JtRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogQWxsb3cgdmFsaWQgZGF0YS0qIGF0dHJpYnV0ZXM6IEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgXCItXCJcbiAgICAgICAgICAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZW1iZWRkaW5nLWN1c3RvbS1ub24tdmlzaWJsZS1kYXRhLXdpdGgtdGhlLWRhdGEtKi1hdHRyaWJ1dGVzKVxuICAgICAgICAgIFhNTC1jb21wYXRpYmxlIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3htbC1jb21wYXRpYmxlIGFuZCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI2QwZTgwNClcbiAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZTsgaXQncyBhbHdheXMgVVJJIHNhZmUuICovXG5cblxuICAgICAgaWYgKEFMTE9XX0RBVEFfQVRUUiAmJiAhRk9SQklEX0FUVFJbbGNOYW1lXSAmJiByZWdFeHBUZXN0KERBVEFfQVRUUiwgbGNOYW1lKSkgOyBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIsIGxjTmFtZSkpIDsgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgaWYgKCAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KGxjVGFnKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaywgbGNOYW1lKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sobGNOYW1lKSkgfHwgLy8gQWx0ZXJuYXRpdmUsIHNlY29uZCBjb25kaXRpb24gY2hlY2tzIGlmIGl0J3MgYW4gYGlzYC1hdHRyaWJ1dGUsIEFORFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VzIHdoYXRldmVyIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGZvciBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2tcbiAgICAgICAgbGNOYW1lID09PSAnaXMnICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpIDsgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIENoZWNrIHZhbHVlIGlzIHNhZmUuIEZpcnN0LCBpcyBhdHRyIGluZXJ0PyBJZiBzbywgaXMgc2FmZSAqL1xuXG4gICAgICB9IGVsc2UgaWYgKFVSSV9TQUZFX0FUVFJJQlVURVNbbGNOYW1lXSkgOyBlbHNlIGlmIChyZWdFeHBUZXN0KElTX0FMTE9XRURfVVJJJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSwgJycpKSkgOyBlbHNlIGlmICgobGNOYW1lID09PSAnc3JjJyB8fCBsY05hbWUgPT09ICd4bGluazpocmVmJyB8fCBsY05hbWUgPT09ICdocmVmJykgJiYgbGNUYWcgIT09ICdzY3JpcHQnICYmIHN0cmluZ0luZGV4T2YodmFsdWUsICdkYXRhOicpID09PSAwICYmIERBVEFfVVJJX1RBR1NbbGNUYWddKSA7IGVsc2UgaWYgKEFMTE9XX1VOS05PV05fUFJPVE9DT0xTICYmICFyZWdFeHBUZXN0KElTX1NDUklQVF9PUl9EQVRBLCBzdHJpbmdSZXBsYWNlKHZhbHVlLCBBVFRSX1dISVRFU1BBQ0UsICcnKSkpIDsgZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfYmFzaWNDdXN0b21FbGVtZW50Q2hlY2tcbiAgICAgKiBjaGVja3MgaWYgYXQgbGVhc3Qgb25lIGRhc2ggaXMgaW5jbHVkZWQgaW4gdGFnTmFtZSwgYW5kIGl0J3Mgbm90IHRoZSBmaXJzdCBjaGFyXG4gICAgICogZm9yIG1vcmUgc29waGlzdGljYXRlZCBjaGVja2luZyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy92YWxpZGF0ZS1lbGVtZW50LW5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBuYW1lIG9mIHRoZSB0YWcgb2YgdGhlIG5vZGUgdG8gc2FuaXRpemVcbiAgICAgKi9cblxuXG4gICAgY29uc3QgX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QgPSBmdW5jdGlvbiBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCh0YWdOYW1lKSB7XG4gICAgICByZXR1cm4gdGFnTmFtZS5pbmRleE9mKCctJykgPiAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplQXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHByb3RlY3QgYXR0cmlidXRlc1xuICAgICAqIEBwcm90ZWN0IG5vZGVOYW1lXG4gICAgICogQHByb3RlY3QgcmVtb3ZlQXR0cmlidXRlXG4gICAgICogQHByb3RlY3Qgc2V0QXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSB0byBzYW5pdGl6ZVxuICAgICAqL1xuXG5cbiAgICBjb25zdCBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSkge1xuICAgICAgbGV0IGF0dHI7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBsZXQgbGNOYW1lO1xuICAgICAgbGV0IGw7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgIH0gPSBjdXJyZW50Tm9kZTtcbiAgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYXR0cmlidXRlczsgaWYgbm90IHdlIG1pZ2h0IGhhdmUgYSB0ZXh0IG5vZGUgKi9cblxuICAgICAgaWYgKCFhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaG9va0V2ZW50ID0ge1xuICAgICAgICBhdHRyTmFtZTogJycsXG4gICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogQUxMT1dFRF9BVFRSXG4gICAgICB9O1xuICAgICAgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgLyogR28gYmFja3dhcmRzIG92ZXIgYWxsIGF0dHJpYnV0ZXM7IHNhZmVseSByZW1vdmUgYmFkIG9uZXMgKi9cblxuICAgICAgd2hpbGUgKGwtLSkge1xuICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgbmFtZXNwYWNlVVJJXG4gICAgICAgIH0gPSBhdHRyO1xuICAgICAgICB2YWx1ZSA9IG5hbWUgPT09ICd2YWx1ZScgPyBhdHRyLnZhbHVlIDogc3RyaW5nVHJpbShhdHRyLnZhbHVlKTtcbiAgICAgICAgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMobmFtZSk7XG4gICAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cblxuICAgICAgICBob29rRXZlbnQuYXR0ck5hbWUgPSBsY05hbWU7XG4gICAgICAgIGhvb2tFdmVudC5hdHRyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaG9va0V2ZW50LmtlZXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgaG9va0V2ZW50LmZvcmNlS2VlcEF0dHIgPSB1bmRlZmluZWQ7IC8vIEFsbG93cyBkZXZlbG9wZXJzIHRvIHNlZSB0aGlzIGlzIGEgcHJvcGVydHkgdGhleSBjYW4gc2V0XG5cbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcblxuICAgICAgICB2YWx1ZSA9IGhvb2tFdmVudC5hdHRyVmFsdWU7XG4gICAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuXG4gICAgICAgIGlmIChob29rRXZlbnQuZm9yY2VLZWVwQXR0cikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIFJlbW92ZSBhdHRyaWJ1dGUgKi9cblxuXG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAvKiBEaWQgdGhlIGhvb2tzIGFwcHJvdmUgb2YgdGhlIGF0dHJpYnV0ZT8gKi9cblxuXG4gICAgICAgIGlmICghaG9va0V2ZW50LmtlZXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG5cblxuICAgICAgICBpZiAoIUFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAmJiByZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogU2FuaXRpemUgYXR0cmlidXRlIGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuXG5cbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgTVVTVEFDSEVfRVhQUiwgJyAnKTtcbiAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIEVSQl9FWFBSLCAnICcpO1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgVE1QTElUX0VYUFIsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogSXMgYHZhbHVlYCB2YWxpZCBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovXG5cblxuICAgICAgICBjb25zdCBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcblxuICAgICAgICBpZiAoIV9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiB2aWEgbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAgICAgICAgICogUHJlZml4IGlkIGFuZCBuYW1lIGF0dHJpYnV0ZXMgd2l0aCBgdXNlci1jb250ZW50LWBcbiAgICAgICAgICovXG5cblxuICAgICAgICBpZiAoU0FOSVRJWkVfTkFNRURfUFJPUFMgJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoaXMgdmFsdWVcbiAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTsgLy8gUHJlZml4IHRoZSB2YWx1ZSBhbmQgbGF0ZXIgcmUtY3JlYXRlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FuaXRpemVkIHZhbHVlXG5cblxuICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVfTkFNRURfUFJPUFNfUFJFRklYICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogSGFuZGxlIGF0dHJpYnV0ZXMgdGhhdCByZXF1aXJlIFRydXN0ZWQgVHlwZXMgKi9cblxuXG4gICAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSkgOyBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1c3RlZFR5cGVzLmdldEF0dHJpYnV0ZVR5cGUobGNUYWcsIGxjTmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnVHJ1c3RlZEhUTUwnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ1RydXN0ZWRTY3JpcHRVUkwnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZVNjcmlwdFVSTCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIEhhbmRsZSBpbnZhbGlkIGRhdGEtKiBhdHRyaWJ1dGUgc2V0IGJ5IHRyeS1jYXRjaGluZyBpdCAqL1xuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gc2V0QXR0cmlidXRlKCkgZm9yIGJyb3dzZXItdW5yZWNvZ25pemVkIG5hbWVzcGFjZXMgZS5nLiBcIngtc2NoZW1hXCIuICovXG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFycmF5UG9wKERPTVB1cmlmeS5yZW1vdmVkKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cblxuXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplU2hhZG93RE9NXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudCB0byBpdGVyYXRlIG92ZXIgcmVjdXJzaXZlbHlcbiAgICAgKi9cblxuXG4gICAgY29uc3QgX3Nhbml0aXplU2hhZG93RE9NID0gZnVuY3Rpb24gX3Nhbml0aXplU2hhZG93RE9NKGZyYWdtZW50KSB7XG4gICAgICBsZXQgc2hhZG93Tm9kZTtcblxuICAgICAgY29uc3Qgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlSXRlcmF0b3IoZnJhZ21lbnQpO1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG5cbiAgICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplU2hhZG93Tm9kZScsIHNoYWRvd05vZGUsIG51bGwpO1xuICAgICAgICAvKiBTYW5pdGl6ZSB0YWdzIGFuZCBlbGVtZW50cyAqL1xuXG5cbiAgICAgICAgaWYgKF9zYW5pdGl6ZUVsZW1lbnRzKHNoYWRvd05vZGUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogRGVlcCBzaGFkb3cgRE9NIGRldGVjdGVkICovXG5cblxuICAgICAgICBpZiAoc2hhZG93Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShzaGFkb3dOb2RlLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuXG5cbiAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgIH1cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cblxuXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZVxuICAgICAqIFB1YmxpYyBtZXRob2QgcHJvdmlkaW5nIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuXG5cbiAgICBET01QdXJpZnkuc2FuaXRpemUgPSBmdW5jdGlvbiAoZGlydHkpIHtcbiAgICAgIGxldCBjZmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgbGV0IGJvZHk7XG4gICAgICBsZXQgaW1wb3J0ZWROb2RlO1xuICAgICAgbGV0IGN1cnJlbnROb2RlO1xuICAgICAgbGV0IHJldHVybk5vZGU7XG4gICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHN0cmluZyB0byBzYW5pdGl6ZS5cbiAgICAgICAgRE8gTk9UIHJldHVybiBlYXJseSwgYXMgdGhpcyB3aWxsIHJldHVybiB0aGUgd3JvbmcgdHlwZSBpZlxuICAgICAgICB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgRE9NIG9iamVjdCByYXRoZXIgdGhhbiBhIHN0cmluZyAqL1xuXG4gICAgICBJU19FTVBUWV9JTlBVVCA9ICFkaXJ0eTtcblxuICAgICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICAgIGRpcnR5ID0gJzwhLS0+JztcbiAgICAgIH1cbiAgICAgIC8qIFN0cmluZ2lmeSwgaW4gY2FzZSBkaXJ0eSBpcyBhbiBvYmplY3QgKi9cblxuXG4gICAgICBpZiAodHlwZW9mIGRpcnR5ICE9PSAnc3RyaW5nJyAmJiAhX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRpcnR5ID0gZGlydHkudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ2RpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCd0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBSZXR1cm4gZGlydHkgSFRNTCBpZiBET01QdXJpZnkgY2Fubm90IHJ1biAqL1xuXG5cbiAgICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICAgIH1cbiAgICAgIC8qIEFzc2lnbiBjb25maWcgdmFycyAqL1xuXG5cbiAgICAgIGlmICghU0VUX0NPTkZJRykge1xuICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgIH1cbiAgICAgIC8qIENsZWFuIHVwIHJlbW92ZWQgZWxlbWVudHMgKi9cblxuXG4gICAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgICAgLyogQ2hlY2sgaWYgZGlydHkgaXMgY29ycmVjdGx5IHR5cGVkIGZvciBJTl9QTEFDRSAqL1xuXG4gICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBJTl9QTEFDRSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgLyogRG8gc29tZSBlYXJseSBwcmUtc2FuaXRpemF0aW9uIHRvIGF2b2lkIHVuc2FmZSByb290IG5vZGVzICovXG4gICAgICAgIGlmIChkaXJ0eS5ub2RlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhkaXJ0eS5ub2RlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRpcnR5IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAvKiBJZiBkaXJ0eSBpcyBhIERPTSBlbGVtZW50LCBhcHBlbmQgdG8gYW4gZW1wdHkgZG9jdW1lbnQgdG8gYXZvaWRcbiAgICAgICAgICAgZWxlbWVudHMgYmVpbmcgc3RyaXBwZWQgYnkgdGhlIHBhcnNlciAqL1xuICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudCgnPCEtLS0tPicpO1xuICAgICAgICBpbXBvcnRlZE5vZGUgPSBib2R5Lm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShkaXJ0eSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKGltcG9ydGVkTm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICAgIC8qIE5vZGUgaXMgYWxyZWFkeSBhIGJvZHksIHVzZSBhcyBpcyAqL1xuICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIEV4aXQgZGlyZWN0bHkgaWYgd2UgaGF2ZSBub3RoaW5nIHRvIGRvICovXG4gICAgICAgIGlmICghUkVUVVJOX0RPTSAmJiAhU0FGRV9GT1JfVEVNUExBVEVTICYmICFXSE9MRV9ET0NVTUVOVCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaW5jbHVkZXNcbiAgICAgICAgZGlydHkuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGRvY3VtZW50IHRvIHdvcmsgb24gKi9cblxuXG4gICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KGRpcnR5KTtcbiAgICAgICAgLyogQ2hlY2sgd2UgaGF2ZSBhIERPTSBub2RlIGZyb20gdGhlIGRhdGEgKi9cblxuICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICByZXR1cm4gUkVUVVJOX0RPTSA/IG51bGwgOiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gZW1wdHlIVE1MIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIFJlbW92ZSBmaXJzdCBlbGVtZW50IG5vZGUgKG91cnMpIGlmIEZPUkNFX0JPRFkgaXMgc2V0ICovXG5cblxuICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIC8qIEdldCBub2RlIGl0ZXJhdG9yICovXG5cblxuICAgICAgY29uc3Qgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZUl0ZXJhdG9yKElOX1BMQUNFID8gZGlydHkgOiBib2R5KTtcbiAgICAgIC8qIE5vdyBzdGFydCBpdGVyYXRpbmcgb3ZlciB0aGUgY3JlYXRlZCBkb2N1bWVudCAqL1xuXG5cbiAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSA9IG5vZGVJdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBTaGFkb3cgRE9NIGRldGVjdGVkLCBzYW5pdGl6ZSBpdCAqL1xuXG5cbiAgICAgICAgaWYgKGN1cnJlbnROb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKGN1cnJlbnROb2RlLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuXG5cbiAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICAvKiBJZiB3ZSBzYW5pdGl6ZWQgYGRpcnR5YCBpbi1wbGFjZSwgcmV0dXJuIGl0LiAqL1xuXG5cbiAgICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICB9XG4gICAgICAvKiBSZXR1cm4gc2FuaXRpemVkIHN0cmluZyBvciBET00gKi9cblxuXG4gICAgICBpZiAoUkVUVVJOX0RPTSkge1xuICAgICAgICBpZiAoUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgICAgIHJldHVybk5vZGUgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50LmNhbGwoYm9keS5vd25lckRvY3VtZW50KTtcblxuICAgICAgICAgIHdoaWxlIChib2R5LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICAgIHJldHVybk5vZGUuYXBwZW5kQ2hpbGQoYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuTm9kZSA9IGJvZHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QgfHwgQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3Rtb2QpIHtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgQWRvcHROb2RlKCkgaXMgbm90IHVzZWQgYmVjYXVzZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgcmVzZXRcbiAgICAgICAgICAgIChlLmcuIHRoZSBwYXN0IG5hbWVzIG1hcCBvZiBhIEhUTUxGb3JtRWxlbWVudCksIHRoaXMgaXMgc2FmZVxuICAgICAgICAgICAgaW4gdGhlb3J5IGJ1dCB3ZSB3b3VsZCByYXRoZXIgbm90IHJpc2sgYW5vdGhlciBhdHRhY2sgdmVjdG9yLlxuICAgICAgICAgICAgVGhlIHN0YXRlIHRoYXQgaXMgY2xvbmVkIGJ5IGltcG9ydE5vZGUoKSBpcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgICAgICAgICAgIGJ5IHRoZSBzcGVjcy5cbiAgICAgICAgICAqL1xuICAgICAgICAgIHJldHVybk5vZGUgPSBpbXBvcnROb2RlLmNhbGwob3JpZ2luYWxEb2N1bWVudCwgcmV0dXJuTm9kZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0dXJuTm9kZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNlcmlhbGl6ZWRIVE1MID0gV0hPTEVfRE9DVU1FTlQgPyBib2R5Lm91dGVySFRNTCA6IGJvZHkuaW5uZXJIVE1MO1xuICAgICAgLyogU2VyaWFsaXplIGRvY3R5cGUgaWYgYWxsb3dlZCAqL1xuXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQgJiYgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmIGJvZHkub3duZXJEb2N1bWVudCAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmIHJlZ0V4cFRlc3QoRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSkge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH1cbiAgICAgIC8qIFNhbml0aXplIGZpbmFsIHN0cmluZyB0ZW1wbGF0ZS1zYWZlICovXG5cblxuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9IHN0cmluZ1JlcGxhY2Uoc2VyaWFsaXplZEhUTUwsIE1VU1RBQ0hFX0VYUFIsICcgJyk7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgRVJCX0VYUFIsICcgJyk7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgVE1QTElUX0VYUFIsICcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHNlcmlhbGl6ZWRIVE1MKSA6IHNlcmlhbGl6ZWRIVE1MO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZVxuICAgICAqIHNldENvbmZpZ1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZykge1xuICAgICAgX3BhcnNlQ29uZmlnKGNmZyk7XG5cbiAgICAgIFNFVF9DT05GSUcgPSB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBjbGVhckNvbmZpZ1xuICAgICAqXG4gICAgICovXG5cblxuICAgIERPTVB1cmlmeS5jbGVhckNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIENPTkZJRyA9IG51bGw7XG4gICAgICBTRVRfQ09ORklHID0gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgKiBVc2VzIGxhc3Qgc2V0IGNvbmZpZywgaWYgYW55LiBPdGhlcndpc2UsIHVzZXMgY29uZmlnIGRlZmF1bHRzLlxuICAgICAqIGlzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdGFnIFRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGF0dHIgQXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LmlzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAodGFnLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgLyogSW5pdGlhbGl6ZSBzaGFyZWQgY29uZmlnIHZhcnMgaWYgbmVjZXNzYXJ5LiAqL1xuICAgICAgaWYgKCFDT05GSUcpIHtcbiAgICAgICAgX3BhcnNlQ29uZmlnKHt9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgICAgY29uc3QgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkSG9va1xuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gYWRkIERPTVB1cmlmeSBob29rc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIGFkZFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhvb2tGdW5jdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlXG4gICAgICovXG5cblxuICAgIERPTVB1cmlmeS5hZGRIb29rID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQsIGhvb2tGdW5jdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiBob29rRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBob29rc1tlbnRyeVBvaW50XSA9IGhvb2tzW2VudHJ5UG9pbnRdIHx8IFtdO1xuICAgICAgYXJyYXlQdXNoKGhvb2tzW2VudHJ5UG9pbnRdLCBob29rRnVuY3Rpb24pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlSG9va1xuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gcmVtb3ZlIGEgRE9NUHVyaWZ5IGhvb2sgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAgICogKHBvcHMgaXQgZnJvbSB0aGUgc3RhY2sgb2YgaG9va3MgaWYgbW9yZSBhcmUgcHJlc2VudClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byByZW1vdmVcbiAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gcmVtb3ZlZChwb3BwZWQpIGhvb2tcbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVIb29rc1xuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gcmVtb3ZlIGFsbCBET01QdXJpZnkgaG9va3MgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rcyB0byByZW1vdmVcbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2tzID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQpIHtcbiAgICAgIGlmIChob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICBob29rc1tlbnRyeVBvaW50XSA9IFtdO1xuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlQWxsSG9va3NcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhbGwgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgICAgaG9va3MgPSB7fTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgfVxuXG4gIHZhciBwdXJpZnkgPSBjcmVhdGVET01QdXJpZnkoKTtcblxuICByZXR1cm4gcHVyaWZ5O1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdXJpZnkuanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dompurify/dist/purify.js\n"); /***/ }), /***/ "../../../node_modules/elkjs/lib/elk.bundled.js": /*!******************************************************!*\ !*** ../../../node_modules/elkjs/lib/elk.bundled.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$defaultLayoutOpt = _ref.defaultLayoutOptions,\n defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt,\n _ref$algorithms = _ref.algorithms,\n algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms,\n workerFactory = _ref.workerFactory,\n workerUrl = _ref.workerUrl;\n\n _classCallCheck(this, ELK);\n\n this.defaultLayoutOptions = defaultLayoutOptions;\n this.initialized = false;\n\n // check valid worker construction possible\n if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') {\n throw new Error(\"Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.\");\n }\n var factory = workerFactory;\n if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') {\n // use default Web Worker\n factory = function factory(url) {\n return new Worker(url);\n };\n }\n\n // create the worker\n var worker = factory(workerUrl);\n if (typeof worker.postMessage !== 'function') {\n throw new TypeError(\"Created worker does not provide\" + \" the required 'postMessage' function.\");\n }\n\n // wrap the worker to return promises\n this.worker = new PromisedWorker(worker);\n\n // initially register algorithms\n this.worker.postMessage({\n cmd: 'register',\n algorithms: algorithms\n }).then(function (r) {\n return _this.initialized = true;\n }).catch(console.err);\n }\n\n _createClass(ELK, [{\n key: 'layout',\n value: function layout(graph) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$layoutOptions = _ref2.layoutOptions,\n layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions,\n _ref2$logging = _ref2.logging,\n logging = _ref2$logging === undefined ? false : _ref2$logging,\n _ref2$measureExecutio = _ref2.measureExecutionTime,\n measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio;\n\n if (!graph) {\n return Promise.reject(new Error(\"Missing mandatory parameter 'graph'.\"));\n }\n return this.worker.postMessage({\n cmd: 'layout',\n graph: graph,\n layoutOptions: layoutOptions,\n options: {\n logging: logging,\n measureExecutionTime: measureExecutionTime\n }\n });\n }\n }, {\n key: 'knownLayoutAlgorithms',\n value: function knownLayoutAlgorithms() {\n return this.worker.postMessage({ cmd: 'algorithms' });\n }\n }, {\n key: 'knownLayoutOptions',\n value: function knownLayoutOptions() {\n return this.worker.postMessage({ cmd: 'options' });\n }\n }, {\n key: 'knownLayoutCategories',\n value: function knownLayoutCategories() {\n return this.worker.postMessage({ cmd: 'categories' });\n }\n }, {\n key: 'terminateWorker',\n value: function terminateWorker() {\n this.worker.terminate();\n }\n }]);\n\n return ELK;\n}();\n\nexports.default = ELK;\n\nvar PromisedWorker = function () {\n function PromisedWorker(worker) {\n var _this2 = this;\n\n _classCallCheck(this, PromisedWorker);\n\n if (worker === undefined) {\n throw new Error(\"Missing mandatory parameter 'worker'.\");\n }\n this.resolvers = {};\n this.worker = worker;\n this.worker.onmessage = function (answer) {\n // why is this necessary?\n setTimeout(function () {\n _this2.receive(_this2, answer);\n }, 0);\n };\n }\n\n _createClass(PromisedWorker, [{\n key: 'postMessage',\n value: function postMessage(msg) {\n var id = this.id || 0;\n this.id = id + 1;\n msg.id = id;\n var self = this;\n return new Promise(function (resolve, reject) {\n // prepare the resolver\n self.resolvers[id] = function (err, res) {\n if (err) {\n self.convertGwtStyleError(err);\n reject(err);\n } else {\n resolve(res);\n }\n };\n // post the message\n self.worker.postMessage(msg);\n });\n }\n }, {\n key: 'receive',\n value: function receive(self, answer) {\n var json = answer.data;\n var resolver = self.resolvers[json.id];\n if (resolver) {\n delete self.resolvers[json.id];\n if (json.error) {\n resolver(json.error);\n } else {\n resolver(null, json.data);\n }\n }\n }\n }, {\n key: 'terminate',\n value: function terminate() {\n if (this.worker.terminate) {\n this.worker.terminate();\n }\n }\n }, {\n key: 'convertGwtStyleError',\n value: function convertGwtStyleError(err) {\n if (!err) {\n return;\n }\n // Somewhat flatten the way GWT stores nested exception(s)\n var javaException = err['__java$exception'];\n if (javaException) {\n // Note that the property name of the nested exception is different\n // in the non-minified ('cause') and the minified (not deterministic) version.\n // Hence, the version below only works for the non-minified version.\n // However, as the minified stack trace is not of much use anyway, one\n // should switch the used version for debugging in such a case.\n if (javaException.cause && javaException.cause.backingJsObject) {\n err.cause = javaException.cause.backingJsObject;\n this.convertGwtStyleError(err.cause);\n }\n delete err['__java$exception'];\n }\n }\n }]);\n\n return PromisedWorker;\n}();\n},{}],2:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\n// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- \nvar $wnd;\nif (typeof window !== 'undefined')\n $wnd = window\nelse if (typeof global !== 'undefined')\n $wnd = global // nodejs\nelse if (typeof self !== 'undefined')\n $wnd = self // web worker\n\nvar $moduleName,\n $moduleBase;\n\n// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- \nvar g, i, o;\n\n// -------------- GENERATED CODE -------------- \nfunction nb(){}\nfunction xb(){}\nfunction Fd(){}\nfunction $g(){}\nfunction _p(){}\nfunction yq(){}\nfunction Sq(){}\nfunction Es(){}\nfunction Jw(){}\nfunction Vw(){}\nfunction VA(){}\nfunction dA(){}\nfunction MA(){}\nfunction PA(){}\nfunction PB(){}\nfunction bx(){}\nfunction cx(){}\nfunction vy(){}\nfunction Nz(){}\nfunction Yz(){}\nfunction Ylb(){}\nfunction Ymb(){}\nfunction xmb(){}\nfunction Fmb(){}\nfunction Qmb(){}\nfunction gcb(){}\nfunction ccb(){}\nfunction jcb(){}\nfunction jtb(){}\nfunction otb(){}\nfunction qtb(){}\nfunction _fb(){}\nfunction bpb(){}\nfunction kpb(){}\nfunction ppb(){}\nfunction Gpb(){}\nfunction drb(){}\nfunction dzb(){}\nfunction fzb(){}\nfunction fxb(){}\nfunction Vxb(){}\nfunction Ovb(){}\nfunction byb(){}\nfunction zyb(){}\nfunction Zyb(){}\nfunction _yb(){}\nfunction hzb(){}\nfunction jzb(){}\nfunction lzb(){}\nfunction nzb(){}\nfunction rzb(){}\nfunction zzb(){}\nfunction Czb(){}\nfunction Ezb(){}\nfunction Gzb(){}\nfunction Izb(){}\nfunction Mzb(){}\nfunction bBb(){}\nfunction NBb(){}\nfunction PBb(){}\nfunction RBb(){}\nfunction iCb(){}\nfunction OCb(){}\nfunction SCb(){}\nfunction GDb(){}\nfunction JDb(){}\nfunction fEb(){}\nfunction xEb(){}\nfunction CEb(){}\nfunction GEb(){}\nfunction yFb(){}\nfunction KGb(){}\nfunction tIb(){}\nfunction vIb(){}\nfunction xIb(){}\nfunction zIb(){}\nfunction OIb(){}\nfunction SIb(){}\nfunction TJb(){}\nfunction VJb(){}\nfunction XJb(){}\nfunction XKb(){}\nfunction fKb(){}\nfunction VKb(){}\nfunction VLb(){}\nfunction jLb(){}\nfunction nLb(){}\nfunction GLb(){}\nfunction KLb(){}\nfunction MLb(){}\nfunction OLb(){}\nfunction RLb(){}\nfunction YLb(){}\nfunction bMb(){}\nfunction gMb(){}\nfunction lMb(){}\nfunction pMb(){}\nfunction wMb(){}\nfunction zMb(){}\nfunction CMb(){}\nfunction FMb(){}\nfunction LMb(){}\nfunction zNb(){}\nfunction PNb(){}\nfunction kOb(){}\nfunction pOb(){}\nfunction tOb(){}\nfunction yOb(){}\nfunction FOb(){}\nfunction GPb(){}\nfunction aQb(){}\nfunction cQb(){}\nfunction eQb(){}\nfunction gQb(){}\nfunction iQb(){}\nfunction CQb(){}\nfunction MQb(){}\nfunction OQb(){}\nfunction ASb(){}\nfunction fTb(){}\nfunction kTb(){}\nfunction STb(){}\nfunction fUb(){}\nfunction DUb(){}\nfunction VUb(){}\nfunction YUb(){}\nfunction _Ub(){}\nfunction _Wb(){}\nfunction QWb(){}\nfunction XWb(){}\nfunction jVb(){}\nfunction DVb(){}\nfunction VVb(){}\nfunction $Vb(){}\nfunction dXb(){}\nfunction hXb(){}\nfunction lXb(){}\nfunction gYb(){}\nfunction HYb(){}\nfunction SYb(){}\nfunction VYb(){}\nfunction dZb(){}\nfunction P$b(){}\nfunction T$b(){}\nfunction h1b(){}\nfunction m1b(){}\nfunction q1b(){}\nfunction u1b(){}\nfunction y1b(){}\nfunction C1b(){}\nfunction e2b(){}\nfunction g2b(){}\nfunction m2b(){}\nfunction q2b(){}\nfunction u2b(){}\nfunction S2b(){}\nfunction U2b(){}\nfunction W2b(){}\nfunction _2b(){}\nfunction e3b(){}\nfunction h3b(){}\nfunction p3b(){}\nfunction t3b(){}\nfunction w3b(){}\nfunction y3b(){}\nfunction A3b(){}\nfunction M3b(){}\nfunction Q3b(){}\nfunction U3b(){}\nfunction Y3b(){}\nfunction l4b(){}\nfunction q4b(){}\nfunction s4b(){}\nfunction u4b(){}\nfunction w4b(){}\nfunction y4b(){}\nfunction L4b(){}\nfunction N4b(){}\nfunction P4b(){}\nfunction R4b(){}\nfunction T4b(){}\nfunction X4b(){}\nfunction I5b(){}\nfunction Q5b(){}\nfunction T5b(){}\nfunction Z5b(){}\nfunction l6b(){}\nfunction o6b(){}\nfunction t6b(){}\nfunction z6b(){}\nfunction L6b(){}\nfunction M6b(){}\nfunction P6b(){}\nfunction X6b(){}\nfunction $6b(){}\nfunction a7b(){}\nfunction c7b(){}\nfunction g7b(){}\nfunction j7b(){}\nfunction m7b(){}\nfunction r7b(){}\nfunction x7b(){}\nfunction D7b(){}\nfunction D9b(){}\nfunction b9b(){}\nfunction h9b(){}\nfunction j9b(){}\nfunction l9b(){}\nfunction w9b(){}\nfunction F9b(){}\nfunction hac(){}\nfunction jac(){}\nfunction pac(){}\nfunction uac(){}\nfunction Iac(){}\nfunction Kac(){}\nfunction Sac(){}\nfunction obc(){}\nfunction rbc(){}\nfunction vbc(){}\nfunction Fbc(){}\nfunction Jbc(){}\nfunction Xbc(){}\nfunction ccc(){}\nfunction fcc(){}\nfunction lcc(){}\nfunction occ(){}\nfunction tcc(){}\nfunction ycc(){}\nfunction Acc(){}\nfunction Ccc(){}\nfunction Ecc(){}\nfunction Gcc(){}\nfunction Zcc(){}\nfunction _cc(){}\nfunction bdc(){}\nfunction fdc(){}\nfunction jdc(){}\nfunction pdc(){}\nfunction sdc(){}\nfunction ydc(){}\nfunction Adc(){}\nfunction Cdc(){}\nfunction Edc(){}\nfunction Idc(){}\nfunction Ndc(){}\nfunction Qdc(){}\nfunction Sdc(){}\nfunction Udc(){}\nfunction Wdc(){}\nfunction Ydc(){}\nfunction aec(){}\nfunction hec(){}\nfunction jec(){}\nfunction lec(){}\nfunction nec(){}\nfunction uec(){}\nfunction wec(){}\nfunction yec(){}\nfunction Aec(){}\nfunction Fec(){}\nfunction Jec(){}\nfunction Lec(){}\nfunction Nec(){}\nfunction Rec(){}\nfunction Uec(){}\nfunction Zec(){}\nfunction Zfc(){}\nfunction lfc(){}\nfunction tfc(){}\nfunction xfc(){}\nfunction zfc(){}\nfunction Ffc(){}\nfunction Jfc(){}\nfunction Nfc(){}\nfunction Pfc(){}\nfunction Vfc(){}\nfunction _fc(){}\nfunction fgc(){}\nfunction jgc(){}\nfunction lgc(){}\nfunction Bgc(){}\nfunction ehc(){}\nfunction ghc(){}\nfunction ihc(){}\nfunction khc(){}\nfunction mhc(){}\nfunction ohc(){}\nfunction qhc(){}\nfunction yhc(){}\nfunction Ahc(){}\nfunction Ghc(){}\nfunction Ihc(){}\nfunction Khc(){}\nfunction Mhc(){}\nfunction Shc(){}\nfunction Uhc(){}\nfunction Whc(){}\nfunction dic(){}\nfunction dlc(){}\nfunction blc(){}\nfunction flc(){}\nfunction hlc(){}\nfunction jlc(){}\nfunction Glc(){}\nfunction Ilc(){}\nfunction Klc(){}\nfunction Mlc(){}\nfunction Mjc(){}\nfunction Qjc(){}\nfunction Qlc(){}\nfunction Ulc(){}\nfunction Ylc(){}\nfunction Lkc(){}\nfunction Nkc(){}\nfunction Pkc(){}\nfunction Rkc(){}\nfunction Xkc(){}\nfunction _kc(){}\nfunction gmc(){}\nfunction kmc(){}\nfunction zmc(){}\nfunction Fmc(){}\nfunction Wmc(){}\nfunction $mc(){}\nfunction anc(){}\nfunction mnc(){}\nfunction wnc(){}\nfunction Hnc(){}\nfunction Jnc(){}\nfunction Lnc(){}\nfunction Nnc(){}\nfunction Pnc(){}\nfunction Ync(){}\nfunction eoc(){}\nfunction Aoc(){}\nfunction Coc(){}\nfunction Eoc(){}\nfunction Joc(){}\nfunction Loc(){}\nfunction Zoc(){}\nfunction _oc(){}\nfunction bpc(){}\nfunction hpc(){}\nfunction kpc(){}\nfunction ppc(){}\nfunction pFc(){}\nfunction Ryc(){}\nfunction QCc(){}\nfunction PDc(){}\nfunction xGc(){}\nfunction HGc(){}\nfunction JGc(){}\nfunction NGc(){}\nfunction GIc(){}\nfunction iKc(){}\nfunction mKc(){}\nfunction wKc(){}\nfunction yKc(){}\nfunction AKc(){}\nfunction EKc(){}\nfunction KKc(){}\nfunction OKc(){}\nfunction QKc(){}\nfunction SKc(){}\nfunction UKc(){}\nfunction YKc(){}\nfunction aLc(){}\nfunction fLc(){}\nfunction hLc(){}\nfunction nLc(){}\nfunction pLc(){}\nfunction tLc(){}\nfunction vLc(){}\nfunction zLc(){}\nfunction BLc(){}\nfunction DLc(){}\nfunction FLc(){}\nfunction sMc(){}\nfunction JMc(){}\nfunction hNc(){}\nfunction RNc(){}\nfunction ZNc(){}\nfunction _Nc(){}\nfunction bOc(){}\nfunction dOc(){}\nfunction fOc(){}\nfunction hOc(){}\nfunction hRc(){}\nfunction jRc(){}\nfunction KRc(){}\nfunction NRc(){}\nfunction NQc(){}\nfunction LQc(){}\nfunction _Qc(){}\nfunction cPc(){}\nfunction iPc(){}\nfunction kPc(){}\nfunction mPc(){}\nfunction xPc(){}\nfunction zPc(){}\nfunction zSc(){}\nfunction BSc(){}\nfunction GSc(){}\nfunction ISc(){}\nfunction NSc(){}\nfunction TSc(){}\nfunction NTc(){}\nfunction NVc(){}\nfunction oVc(){}\nfunction SVc(){}\nfunction VVc(){}\nfunction XVc(){}\nfunction ZVc(){}\nfunction bWc(){}\nfunction bXc(){}\nfunction CXc(){}\nfunction FXc(){}\nfunction IXc(){}\nfunction MXc(){}\nfunction UXc(){}\nfunction bYc(){}\nfunction fYc(){}\nfunction oYc(){}\nfunction qYc(){}\nfunction uYc(){}\nfunction pZc(){}\nfunction G$c(){}\nfunction h0c(){}\nfunction N0c(){}\nfunction k1c(){}\nfunction I1c(){}\nfunction Q1c(){}\nfunction f2c(){}\nfunction i2c(){}\nfunction k2c(){}\nfunction w2c(){}\nfunction O2c(){}\nfunction S2c(){}\nfunction Z2c(){}\nfunction v3c(){}\nfunction x3c(){}\nfunction R3c(){}\nfunction U3c(){}\nfunction e4c(){}\nfunction w4c(){}\nfunction x4c(){}\nfunction z4c(){}\nfunction B4c(){}\nfunction D4c(){}\nfunction F4c(){}\nfunction H4c(){}\nfunction J4c(){}\nfunction L4c(){}\nfunction N4c(){}\nfunction P4c(){}\nfunction R4c(){}\nfunction T4c(){}\nfunction V4c(){}\nfunction X4c(){}\nfunction Z4c(){}\nfunction _4c(){}\nfunction _7c(){}\nfunction b5c(){}\nfunction d5c(){}\nfunction f5c(){}\nfunction h5c(){}\nfunction H5c(){}\nfunction Hfd(){}\nfunction Zfd(){}\nfunction Zed(){}\nfunction ged(){}\nfunction Jed(){}\nfunction Ned(){}\nfunction Red(){}\nfunction Ved(){}\nfunction bbd(){}\nfunction mdd(){}\nfunction _fd(){}\nfunction fgd(){}\nfunction kgd(){}\nfunction Mgd(){}\nfunction Ahd(){}\nfunction Ald(){}\nfunction Tld(){}\nfunction xkd(){}\nfunction rmd(){}\nfunction knd(){}\nfunction Jod(){}\nfunction JCd(){}\nfunction Bpd(){}\nfunction BFd(){}\nfunction oFd(){}\nfunction bqd(){}\nfunction bvd(){}\nfunction jvd(){}\nfunction yud(){}\nfunction Hxd(){}\nfunction EBd(){}\nfunction aDd(){}\nfunction MGd(){}\nfunction vHd(){}\nfunction RHd(){}\nfunction wNd(){}\nfunction zNd(){}\nfunction CNd(){}\nfunction KNd(){}\nfunction XNd(){}\nfunction $Nd(){}\nfunction HPd(){}\nfunction lUd(){}\nfunction XUd(){}\nfunction DWd(){}\nfunction GWd(){}\nfunction JWd(){}\nfunction MWd(){}\nfunction PWd(){}\nfunction SWd(){}\nfunction VWd(){}\nfunction YWd(){}\nfunction _Wd(){}\nfunction xYd(){}\nfunction BYd(){}\nfunction mZd(){}\nfunction EZd(){}\nfunction GZd(){}\nfunction JZd(){}\nfunction MZd(){}\nfunction PZd(){}\nfunction SZd(){}\nfunction VZd(){}\nfunction YZd(){}\nfunction _Zd(){}\nfunction c$d(){}\nfunction f$d(){}\nfunction i$d(){}\nfunction l$d(){}\nfunction o$d(){}\nfunction r$d(){}\nfunction u$d(){}\nfunction x$d(){}\nfunction A$d(){}\nfunction D$d(){}\nfunction G$d(){}\nfunction J$d(){}\nfunction M$d(){}\nfunction P$d(){}\nfunction S$d(){}\nfunction V$d(){}\nfunction Y$d(){}\nfunction _$d(){}\nfunction c_d(){}\nfunction f_d(){}\nfunction i_d(){}\nfunction l_d(){}\nfunction o_d(){}\nfunction r_d(){}\nfunction u_d(){}\nfunction x_d(){}\nfunction A_d(){}\nfunction D_d(){}\nfunction G_d(){}\nfunction J_d(){}\nfunction M_d(){}\nfunction P_d(){}\nfunction S_d(){}\nfunction V_d(){}\nfunction Y_d(){}\nfunction h5d(){}\nfunction U6d(){}\nfunction U9d(){}\nfunction _8d(){}\nfunction fae(){}\nfunction hae(){}\nfunction kae(){}\nfunction nae(){}\nfunction qae(){}\nfunction tae(){}\nfunction wae(){}\nfunction zae(){}\nfunction Cae(){}\nfunction Fae(){}\nfunction Iae(){}\nfunction Lae(){}\nfunction Oae(){}\nfunction Rae(){}\nfunction Uae(){}\nfunction Xae(){}\nfunction $ae(){}\nfunction bbe(){}\nfunction ebe(){}\nfunction hbe(){}\nfunction kbe(){}\nfunction nbe(){}\nfunction qbe(){}\nfunction tbe(){}\nfunction wbe(){}\nfunction zbe(){}\nfunction Cbe(){}\nfunction Fbe(){}\nfunction Ibe(){}\nfunction Lbe(){}\nfunction Obe(){}\nfunction Rbe(){}\nfunction Ube(){}\nfunction Xbe(){}\nfunction $be(){}\nfunction bce(){}\nfunction ece(){}\nfunction hce(){}\nfunction kce(){}\nfunction nce(){}\nfunction qce(){}\nfunction tce(){}\nfunction wce(){}\nfunction zce(){}\nfunction Cce(){}\nfunction Fce(){}\nfunction Ice(){}\nfunction Lce(){}\nfunction Oce(){}\nfunction Rce(){}\nfunction Uce(){}\nfunction Xce(){}\nfunction ude(){}\nfunction Vge(){}\nfunction dhe(){}\nfunction s_b(a){}\nfunction jSd(a){}\nfunction ol(){wb()}\nfunction oPb(){nPb()}\nfunction EPb(){CPb()}\nfunction gFb(){fFb()}\nfunction TRb(){SRb()}\nfunction ySb(){wSb()}\nfunction PSb(){OSb()}\nfunction dTb(){bTb()}\nfunction i4b(){b4b()}\nfunction D2b(){x2b()}\nfunction J6b(){D6b()}\nfunction u9b(){q9b()}\nfunction $9b(){I9b()}\nfunction Umc(){Imc()}\nfunction abc(){Vac()}\nfunction ZCc(){VCc()}\nfunction kCc(){hCc()}\nfunction rCc(){oCc()}\nfunction Tcc(){Occ()}\nfunction xkc(){gkc()}\nfunction xDc(){rDc()}\nfunction iDc(){cDc()}\nfunction kwc(){jwc()}\nfunction tJc(){jJc()}\nfunction dJc(){aJc()}\nfunction Pyc(){Nyc()}\nfunction VBc(){SBc()}\nfunction CFc(){yFc()}\nfunction CUc(){wUc()}\nfunction lUc(){fUc()}\nfunction sUc(){pUc()}\nfunction IUc(){GUc()}\nfunction IWc(){HWc()}\nfunction _Wc(){ZWc()}\nfunction fHc(){dHc()}\nfunction f0c(){d0c()}\nfunction B0c(){A0c()}\nfunction L0c(){J0c()}\nfunction LTc(){JTc()}\nfunction sTc(){rTc()}\nfunction KLc(){ILc()}\nfunction wNc(){tNc()}\nfunction PYc(){OYc()}\nfunction nZc(){lZc()}\nfunction q3c(){p3c()}\nfunction Z7c(){X7c()}\nfunction Z9c(){Y9c()}\nfunction _ad(){Zad()}\nfunction kdd(){idd()}\nfunction $md(){Smd()}\nfunction HGd(){tGd()}\nfunction hLd(){NKd()}\nfunction J6d(){Uge()}\nfunction Mvb(a){uCb(a)}\nfunction Yb(a){this.a=a}\nfunction cc(a){this.a=a}\nfunction cj(a){this.a=a}\nfunction ij(a){this.a=a}\nfunction Dj(a){this.a=a}\nfunction df(a){this.a=a}\nfunction kf(a){this.a=a}\nfunction ah(a){this.a=a}\nfunction lh(a){this.a=a}\nfunction th(a){this.a=a}\nfunction Ph(a){this.a=a}\nfunction vi(a){this.a=a}\nfunction Ci(a){this.a=a}\nfunction Fk(a){this.a=a}\nfunction Ln(a){this.a=a}\nfunction ap(a){this.a=a}\nfunction zp(a){this.a=a}\nfunction Yp(a){this.a=a}\nfunction qq(a){this.a=a}\nfunction Dq(a){this.a=a}\nfunction wr(a){this.a=a}\nfunction Ir(a){this.b=a}\nfunction sj(a){this.c=a}\nfunction sw(a){this.a=a}\nfunction fw(a){this.a=a}\nfunction xw(a){this.a=a}\nfunction Cw(a){this.a=a}\nfunction Qw(a){this.a=a}\nfunction Rw(a){this.a=a}\nfunction Xw(a){this.a=a}\nfunction Xv(a){this.a=a}\nfunction Sv(a){this.a=a}\nfunction eu(a){this.a=a}\nfunction Zx(a){this.a=a}\nfunction _x(a){this.a=a}\nfunction xy(a){this.a=a}\nfunction xB(a){this.a=a}\nfunction HB(a){this.a=a}\nfunction TB(a){this.a=a}\nfunction fC(a){this.a=a}\nfunction wB(){this.a=[]}\nfunction MBb(a,b){a.a=b}\nfunction w_b(a,b){a.a=b}\nfunction x_b(a,b){a.b=b}\nfunction YOb(a,b){a.b=b}\nfunction $Ob(a,b){a.b=b}\nfunction ZGb(a,b){a.j=b}\nfunction qNb(a,b){a.g=b}\nfunction rNb(a,b){a.i=b}\nfunction dRb(a,b){a.c=b}\nfunction eRb(a,b){a.d=b}\nfunction z_b(a,b){a.d=b}\nfunction y_b(a,b){a.c=b}\nfunction __b(a,b){a.k=b}\nfunction E0b(a,b){a.c=b}\nfunction njc(a,b){a.c=b}\nfunction mjc(a,b){a.a=b}\nfunction dFc(a,b){a.a=b}\nfunction eFc(a,b){a.f=b}\nfunction nOc(a,b){a.a=b}\nfunction oOc(a,b){a.b=b}\nfunction pOc(a,b){a.d=b}\nfunction qOc(a,b){a.i=b}\nfunction rOc(a,b){a.o=b}\nfunction sOc(a,b){a.r=b}\nfunction $Pc(a,b){a.a=b}\nfunction _Pc(a,b){a.b=b}\nfunction DVc(a,b){a.e=b}\nfunction EVc(a,b){a.f=b}\nfunction FVc(a,b){a.g=b}\nfunction SZc(a,b){a.e=b}\nfunction TZc(a,b){a.f=b}\nfunction c$c(a,b){a.f=b}\nfunction bJd(a,b){a.n=b}\nfunction A1d(a,b){a.a=b}\nfunction J1d(a,b){a.a=b}\nfunction B1d(a,b){a.c=b}\nfunction K1d(a,b){a.c=b}\nfunction L1d(a,b){a.d=b}\nfunction M1d(a,b){a.e=b}\nfunction N1d(a,b){a.g=b}\nfunction d2d(a,b){a.a=b}\nfunction e2d(a,b){a.c=b}\nfunction f2d(a,b){a.d=b}\nfunction g2d(a,b){a.e=b}\nfunction h2d(a,b){a.f=b}\nfunction i2d(a,b){a.j=b}\nfunction Z8d(a,b){a.a=b}\nfunction $8d(a,b){a.b=b}\nfunction g9d(a,b){a.a=b}\nfunction Cic(a){a.b=a.a}\nfunction Dg(a){a.c=a.d.d}\nfunction vib(a){this.d=a}\nfunction eib(a){this.a=a}\nfunction Pib(a){this.a=a}\nfunction Vib(a){this.a=a}\nfunction $ib(a){this.a=a}\nfunction mcb(a){this.a=a}\nfunction Mcb(a){this.a=a}\nfunction Xcb(a){this.a=a}\nfunction Ndb(a){this.a=a}\nfunction _db(a){this.a=a}\nfunction teb(a){this.a=a}\nfunction Qeb(a){this.a=a}\nfunction djb(a){this.a=a}\nfunction Gjb(a){this.a=a}\nfunction Njb(a){this.a=a}\nfunction Bjb(a){this.b=a}\nfunction lnb(a){this.b=a}\nfunction Dnb(a){this.b=a}\nfunction anb(a){this.a=a}\nfunction Mob(a){this.a=a}\nfunction Rob(a){this.a=a}\nfunction iob(a){this.c=a}\nfunction olb(a){this.c=a}\nfunction qub(a){this.c=a}\nfunction Tub(a){this.a=a}\nfunction Vub(a){this.a=a}\nfunction Xub(a){this.a=a}\nfunction Zub(a){this.a=a}\nfunction tpb(a){this.a=a}\nfunction _pb(a){this.a=a}\nfunction Wqb(a){this.a=a}\nfunction nsb(a){this.a=a}\nfunction Rxb(a){this.a=a}\nfunction Txb(a){this.a=a}\nfunction Xxb(a){this.a=a}\nfunction bzb(a){this.a=a}\nfunction tzb(a){this.a=a}\nfunction vzb(a){this.a=a}\nfunction xzb(a){this.a=a}\nfunction Kzb(a){this.a=a}\nfunction Ozb(a){this.a=a}\nfunction iAb(a){this.a=a}\nfunction kAb(a){this.a=a}\nfunction mAb(a){this.a=a}\nfunction BAb(a){this.a=a}\nfunction hBb(a){this.a=a}\nfunction jBb(a){this.a=a}\nfunction nBb(a){this.a=a}\nfunction TBb(a){this.a=a}\nfunction XBb(a){this.a=a}\nfunction QCb(a){this.a=a}\nfunction WCb(a){this.a=a}\nfunction _Cb(a){this.a=a}\nfunction dEb(a){this.a=a}\nfunction QGb(a){this.a=a}\nfunction YGb(a){this.a=a}\nfunction tKb(a){this.a=a}\nfunction CLb(a){this.a=a}\nfunction JMb(a){this.a=a}\nfunction RNb(a){this.a=a}\nfunction kQb(a){this.a=a}\nfunction mQb(a){this.a=a}\nfunction FQb(a){this.a=a}\nfunction ETb(a){this.a=a}\nfunction UTb(a){this.a=a}\nfunction dUb(a){this.a=a}\nfunction hUb(a){this.a=a}\nfunction EZb(a){this.a=a}\nfunction j$b(a){this.a=a}\nfunction v$b(a){this.e=a}\nfunction J0b(a){this.a=a}\nfunction M0b(a){this.a=a}\nfunction R0b(a){this.a=a}\nfunction U0b(a){this.a=a}\nfunction i2b(a){this.a=a}\nfunction k2b(a){this.a=a}\nfunction o2b(a){this.a=a}\nfunction s2b(a){this.a=a}\nfunction G2b(a){this.a=a}\nfunction I2b(a){this.a=a}\nfunction K2b(a){this.a=a}\nfunction M2b(a){this.a=a}\nfunction W3b(a){this.a=a}\nfunction $3b(a){this.a=a}\nfunction V4b(a){this.a=a}\nfunction u5b(a){this.a=a}\nfunction A7b(a){this.a=a}\nfunction G7b(a){this.a=a}\nfunction J7b(a){this.a=a}\nfunction M7b(a){this.a=a}\nfunction Mbc(a){this.a=a}\nfunction Pbc(a){this.a=a}\nfunction lac(a){this.a=a}\nfunction nac(a){this.a=a}\nfunction qcc(a){this.a=a}\nfunction Gdc(a){this.a=a}\nfunction $dc(a){this.a=a}\nfunction cec(a){this.a=a}\nfunction _ec(a){this.a=a}\nfunction pfc(a){this.a=a}\nfunction Bfc(a){this.a=a}\nfunction Lfc(a){this.a=a}\nfunction ygc(a){this.a=a}\nfunction Dgc(a){this.a=a}\nfunction shc(a){this.a=a}\nfunction uhc(a){this.a=a}\nfunction whc(a){this.a=a}\nfunction Chc(a){this.a=a}\nfunction Ehc(a){this.a=a}\nfunction Ohc(a){this.a=a}\nfunction Yhc(a){this.a=a}\nfunction Tkc(a){this.a=a}\nfunction Vkc(a){this.a=a}\nfunction Olc(a){this.a=a}\nfunction pnc(a){this.a=a}\nfunction rnc(a){this.a=a}\nfunction dpc(a){this.a=a}\nfunction fpc(a){this.a=a}\nfunction GCc(a){this.a=a}\nfunction KCc(a){this.a=a}\nfunction mDc(a){this.a=a}\nfunction jEc(a){this.a=a}\nfunction HEc(a){this.a=a}\nfunction FEc(a){this.c=a}\nfunction qoc(a){this.b=a}\nfunction bFc(a){this.a=a}\nfunction GFc(a){this.a=a}\nfunction iGc(a){this.a=a}\nfunction kGc(a){this.a=a}\nfunction mGc(a){this.a=a}\nfunction $Gc(a){this.a=a}\nfunction hIc(a){this.a=a}\nfunction lIc(a){this.a=a}\nfunction pIc(a){this.a=a}\nfunction tIc(a){this.a=a}\nfunction xIc(a){this.a=a}\nfunction zIc(a){this.a=a}\nfunction CIc(a){this.a=a}\nfunction LIc(a){this.a=a}\nfunction CKc(a){this.a=a}\nfunction IKc(a){this.a=a}\nfunction MKc(a){this.a=a}\nfunction $Kc(a){this.a=a}\nfunction cLc(a){this.a=a}\nfunction jLc(a){this.a=a}\nfunction rLc(a){this.a=a}\nfunction xLc(a){this.a=a}\nfunction OMc(a){this.a=a}\nfunction ZOc(a){this.a=a}\nfunction ZRc(a){this.a=a}\nfunction aSc(a){this.a=a}\nfunction I$c(a){this.a=a}\nfunction K$c(a){this.a=a}\nfunction M$c(a){this.a=a}\nfunction O$c(a){this.a=a}\nfunction U$c(a){this.a=a}\nfunction n1c(a){this.a=a}\nfunction z1c(a){this.a=a}\nfunction B1c(a){this.a=a}\nfunction Q2c(a){this.a=a}\nfunction U2c(a){this.a=a}\nfunction z3c(a){this.a=a}\nfunction med(a){this.a=a}\nfunction Xed(a){this.a=a}\nfunction _ed(a){this.a=a}\nfunction Qfd(a){this.a=a}\nfunction Bgd(a){this.a=a}\nfunction $gd(a){this.a=a}\nfunction lrd(a){this.a=a}\nfunction urd(a){this.a=a}\nfunction vrd(a){this.a=a}\nfunction wrd(a){this.a=a}\nfunction xrd(a){this.a=a}\nfunction yrd(a){this.a=a}\nfunction zrd(a){this.a=a}\nfunction Ard(a){this.a=a}\nfunction Brd(a){this.a=a}\nfunction Crd(a){this.a=a}\nfunction Ird(a){this.a=a}\nfunction Krd(a){this.a=a}\nfunction Lrd(a){this.a=a}\nfunction Mrd(a){this.a=a}\nfunction Nrd(a){this.a=a}\nfunction Prd(a){this.a=a}\nfunction Srd(a){this.a=a}\nfunction Yrd(a){this.a=a}\nfunction Zrd(a){this.a=a}\nfunction _rd(a){this.a=a}\nfunction asd(a){this.a=a}\nfunction bsd(a){this.a=a}\nfunction csd(a){this.a=a}\nfunction dsd(a){this.a=a}\nfunction msd(a){this.a=a}\nfunction osd(a){this.a=a}\nfunction qsd(a){this.a=a}\nfunction ssd(a){this.a=a}\nfunction Wsd(a){this.a=a}\nfunction Lsd(a){this.b=a}\nfunction thd(a){this.f=a}\nfunction qtd(a){this.a=a}\nfunction yBd(a){this.a=a}\nfunction GBd(a){this.a=a}\nfunction MBd(a){this.a=a}\nfunction SBd(a){this.a=a}\nfunction iCd(a){this.a=a}\nfunction YMd(a){this.a=a}\nfunction GNd(a){this.a=a}\nfunction EPd(a){this.a=a}\nfunction EQd(a){this.a=a}\nfunction NTd(a){this.a=a}\nfunction qOd(a){this.b=a}\nfunction lVd(a){this.c=a}\nfunction VVd(a){this.e=a}\nfunction iYd(a){this.a=a}\nfunction RYd(a){this.a=a}\nfunction ZYd(a){this.a=a}\nfunction z0d(a){this.a=a}\nfunction O0d(a){this.a=a}\nfunction s0d(a){this.d=a}\nfunction W5d(a){this.a=a}\nfunction cge(a){this.a=a}\nfunction xfe(a){this.e=a}\nfunction Tfd(){this.a=0}\nfunction jkb(){Vjb(this)}\nfunction Rkb(){Ckb(this)}\nfunction Lqb(){Uhb(this)}\nfunction lEb(){kEb(this)}\nfunction A_b(){s_b(this)}\nfunction UQd(){this.c=FQd}\nfunction v6d(a,b){b.Wb(a)}\nfunction moc(a,b){a.b+=b}\nfunction yXb(a){a.b=new Ji}\nfunction vbb(a){return a.e}\nfunction DB(a){return a.a}\nfunction LB(a){return a.a}\nfunction ZB(a){return a.a}\nfunction lC(a){return a.a}\nfunction EC(a){return a.a}\nfunction wC(){return null}\nfunction SB(){return null}\nfunction hcb(){mvd();ovd()}\nfunction zJb(a){a.b.tf(a.e)}\nfunction j5b(a,b){a.b=b-a.b}\nfunction g5b(a,b){a.a=b-a.a}\nfunction PXc(a,b){b.ad(a.a)}\nfunction plc(a,b){G0b(b,a)}\nfunction hp(a,b,c){a.Od(c,b)}\nfunction As(a,b){a.e=b;b.b=a}\nfunction Zl(a){Ql();this.a=a}\nfunction jq(a){Ql();this.a=a}\nfunction sq(a){Ql();this.a=a}\nfunction Fq(a){im();this.a=a}\nfunction Sz(a){Rz();Qz.be(a)}\nfunction gz(){Xy.call(this)}\nfunction xcb(){Xy.call(this)}\nfunction pcb(){gz.call(this)}\nfunction tcb(){gz.call(this)}\nfunction Bdb(){gz.call(this)}\nfunction Vdb(){gz.call(this)}\nfunction Ydb(){gz.call(this)}\nfunction Geb(){gz.call(this)}\nfunction bgb(){gz.call(this)}\nfunction Apb(){gz.call(this)}\nfunction Jpb(){gz.call(this)}\nfunction utb(){gz.call(this)}\nfunction x2c(){gz.call(this)}\nfunction rQd(){this.a=this}\nfunction MPd(){this.Bb|=256}\nfunction tTb(){this.b=new mt}\nfunction fA(){fA=ccb;new Lqb}\nfunction rcb(){pcb.call(this)}\nfunction dCb(a,b){a.length=b}\nfunction Tvb(a,b){Ekb(a.a,b)}\nfunction sKb(a,b){UHb(a.c,b)}\nfunction SMc(a,b){Qqb(a.b,b)}\nfunction vBd(a,b){uAd(a.a,b)}\nfunction wBd(a,b){vAd(a.a,b)}\nfunction GLd(a,b){Uhd(a.e,b)}\nfunction d7d(a){D2d(a.c,a.b)}\nfunction mj(a,b){a.kc().Nb(b)}\nfunction Odb(a){this.a=Tdb(a)}\nfunction Tqb(){this.a=new Lqb}\nfunction gyb(){this.a=new Lqb}\nfunction Wvb(){this.a=new Rkb}\nfunction KFb(){this.a=new Rkb}\nfunction PFb(){this.a=new Rkb}\nfunction FFb(){this.a=new yFb}\nfunction pGb(){this.a=new MFb}\nfunction ZQb(){this.a=new MQb}\nfunction Gxb(){this.a=new Pwb}\nfunction jUb(){this.a=new PTb}\nfunction sDb(){this.a=new oDb}\nfunction zDb(){this.a=new tDb}\nfunction CWb(){this.a=new Rkb}\nfunction HXb(){this.a=new Rkb}\nfunction nYb(){this.a=new Rkb}\nfunction BYb(){this.a=new Rkb}\nfunction fLb(){this.d=new Rkb}\nfunction vYb(){this.a=new Tqb}\nfunction a2b(){this.a=new Lqb}\nfunction wZb(){this.b=new Lqb}\nfunction TCc(){this.b=new Rkb}\nfunction zJc(){this.e=new Rkb}\nfunction uMc(){this.d=new Rkb}\nfunction wdc(){this.a=new xkc}\nfunction vKc(){Rkb.call(this)}\nfunction twb(){Wvb.call(this)}\nfunction oHb(){$Gb.call(this)}\nfunction LXb(){HXb.call(this)}\nfunction L_b(){H_b.call(this)}\nfunction H_b(){A_b.call(this)}\nfunction p0b(){A_b.call(this)}\nfunction s0b(){p0b.call(this)}\nfunction WMc(){VMc.call(this)}\nfunction bNc(){VMc.call(this)}\nfunction EPc(){CPc.call(this)}\nfunction JPc(){CPc.call(this)}\nfunction OPc(){CPc.call(this)}\nfunction w1c(){s1c.call(this)}\nfunction s7c(){Psb.call(this)}\nfunction apd(){Ald.call(this)}\nfunction ppd(){Ald.call(this)}\nfunction lDd(){YCd.call(this)}\nfunction NDd(){YCd.call(this)}\nfunction mFd(){Lqb.call(this)}\nfunction vFd(){Lqb.call(this)}\nfunction GFd(){Lqb.call(this)}\nfunction KPd(){Tqb.call(this)}\nfunction OJd(){hJd.call(this)}\nfunction aQd(){MPd.call(this)}\nfunction SSd(){FId.call(this)}\nfunction rUd(){FId.call(this)}\nfunction oUd(){Lqb.call(this)}\nfunction NYd(){Lqb.call(this)}\nfunction cZd(){Lqb.call(this)}\nfunction R8d(){MGd.call(this)}\nfunction o9d(){MGd.call(this)}\nfunction i9d(){R8d.call(this)}\nfunction hee(){ude.call(this)}\nfunction Dd(a){yd.call(this,a)}\nfunction Hd(a){yd.call(this,a)}\nfunction ph(a){lh.call(this,a)}\nfunction Sh(a){Wc.call(this,a)}\nfunction oi(a){Sh.call(this,a)}\nfunction Ii(a){Wc.call(this,a)}\nfunction Zdd(){this.a=new Psb}\nfunction CPc(){this.a=new Tqb}\nfunction s1c(){this.a=new Lqb}\nfunction QSc(){this.a=new Rkb}\nfunction D2c(){this.j=new Rkb}\nfunction QXc(){this.a=new UXc}\nfunction e_c(){this.a=new d_c}\nfunction YCd(){this.a=new aDd}\nfunction _k(){_k=ccb;$k=new al}\nfunction Lk(){Lk=ccb;Kk=new Mk}\nfunction wb(){wb=ccb;vb=new xb}\nfunction hs(){hs=ccb;gs=new is}\nfunction rs(a){Sh.call(this,a)}\nfunction Gp(a){Sh.call(this,a)}\nfunction xp(a){Lo.call(this,a)}\nfunction Ep(a){Lo.call(this,a)}\nfunction Tp(a){Wn.call(this,a)}\nfunction wx(a){un.call(this,a)}\nfunction ov(a){dv.call(this,a)}\nfunction Mv(a){Br.call(this,a)}\nfunction Ov(a){Br.call(this,a)}\nfunction Lw(a){Br.call(this,a)}\nfunction hz(a){Yy.call(this,a)}\nfunction MB(a){hz.call(this,a)}\nfunction eC(){fC.call(this,{})}\nfunction Ftb(a){Atb();this.a=a}\nfunction zwb(a){a.b=null;a.c=0}\nfunction Vy(a,b){a.e=b;Sy(a,b)}\nfunction LVb(a,b){a.a=b;NVb(a)}\nfunction lIb(a,b,c){a.a[b.g]=c}\nfunction vfd(a,b,c){Dfd(c,a,b)}\nfunction Odc(a,b){rjc(b.i,a.n)}\nfunction Wyc(a,b){Xyc(a).td(b)}\nfunction ERb(a,b){return a*a/b}\nfunction Xr(a,b){return a.g-b.g}\nfunction tC(a){return new TB(a)}\nfunction vC(a){return new yC(a)}\nfunction ocb(a){hz.call(this,a)}\nfunction qcb(a){hz.call(this,a)}\nfunction ucb(a){hz.call(this,a)}\nfunction vcb(a){Yy.call(this,a)}\nfunction fGc(a){LFc();this.a=a}\nfunction c0d(a){kzd();this.a=a}\nfunction bhd(a){Rgd();this.f=a}\nfunction dhd(a){Rgd();this.f=a}\nfunction Cdb(a){hz.call(this,a)}\nfunction Wdb(a){hz.call(this,a)}\nfunction Zdb(a){hz.call(this,a)}\nfunction Feb(a){hz.call(this,a)}\nfunction Heb(a){hz.call(this,a)}\nfunction Ccb(a){return uCb(a),a}\nfunction Edb(a){return uCb(a),a}\nfunction Gdb(a){return uCb(a),a}\nfunction jfb(a){return uCb(a),a}\nfunction tfb(a){return uCb(a),a}\nfunction akb(a){return a.b==a.c}\nfunction Hwb(a){return !!a&&a.b}\nfunction pIb(a){return !!a&&a.k}\nfunction qIb(a){return !!a&&a.j}\nfunction amb(a){uCb(a);this.a=a}\nfunction wVb(a){qVb(a);return a}\nfunction Blb(a){Glb(a,a.length)}\nfunction cgb(a){hz.call(this,a)}\nfunction cqd(a){hz.call(this,a)}\nfunction n8d(a){hz.call(this,a)}\nfunction y2c(a){hz.call(this,a)}\nfunction z2c(a){hz.call(this,a)}\nfunction mde(a){hz.call(this,a)}\nfunction pc(a){qc.call(this,a,0)}\nfunction Ji(){Ki.call(this,12,3)}\nfunction Kz(){Kz=ccb;Jz=new Nz}\nfunction jz(){jz=ccb;iz=new nb}\nfunction KA(){KA=ccb;JA=new MA}\nfunction OB(){OB=ccb;NB=new PB}\nfunction jc(){throw vbb(new bgb)}\nfunction zh(){throw vbb(new bgb)}\nfunction Pi(){throw vbb(new bgb)}\nfunction Pj(){throw vbb(new bgb)}\nfunction Qj(){throw vbb(new bgb)}\nfunction Ym(){throw vbb(new bgb)}\nfunction Gb(){this.a=GD(Qb(She))}\nfunction oy(a){Ql();this.a=Qb(a)}\nfunction Bs(a,b){a.Td(b);b.Sd(a)}\nfunction iw(a,b){a.a.ec().Mc(b)}\nfunction CYb(a,b,c){a.c.lf(b,c)}\nfunction scb(a){qcb.call(this,a)}\nfunction Oeb(a){Wdb.call(this,a)}\nfunction Hfb(){mcb.call(this,'')}\nfunction Ifb(){mcb.call(this,'')}\nfunction Ufb(){mcb.call(this,'')}\nfunction Vfb(){mcb.call(this,'')}\nfunction Xfb(a){qcb.call(this,a)}\nfunction zob(a){lnb.call(this,a)}\nfunction Yob(a){Inb.call(this,a)}\nfunction Gob(a){zob.call(this,a)}\nfunction Mk(){Fk.call(this,null)}\nfunction al(){Fk.call(this,null)}\nfunction Az(){Az=ccb;!!(Rz(),Qz)}\nfunction wrb(){wrb=ccb;vrb=yrb()}\nfunction Mtb(a){return a.a?a.b:0}\nfunction Vtb(a){return a.a?a.b:0}\nfunction Lcb(a,b){return a.a-b.a}\nfunction Wcb(a,b){return a.a-b.a}\nfunction Peb(a,b){return a.a-b.a}\nfunction eCb(a,b){return PC(a,b)}\nfunction GC(a,b){return rdb(a,b)}\nfunction _B(b,a){return a in b.a}\nfunction _Db(a,b){a.f=b;return a}\nfunction ZDb(a,b){a.b=b;return a}\nfunction $Db(a,b){a.c=b;return a}\nfunction aEb(a,b){a.g=b;return a}\nfunction HGb(a,b){a.a=b;return a}\nfunction IGb(a,b){a.f=b;return a}\nfunction JGb(a,b){a.k=b;return a}\nfunction dLb(a,b){a.a=b;return a}\nfunction eLb(a,b){a.e=b;return a}\nfunction zVb(a,b){a.e=b;return a}\nfunction AVb(a,b){a.f=b;return a}\nfunction KOb(a,b){a.b=true;a.d=b}\nfunction DHb(a,b){a.b=new g7c(b)}\nfunction uvb(a,b,c){b.td(a.a[c])}\nfunction zvb(a,b,c){b.we(a.a[c])}\nfunction wJc(a,b){return a.b-b.b}\nfunction kOc(a,b){return a.g-b.g}\nfunction WQc(a,b){return a.s-b.s}\nfunction Lic(a,b){return a?0:b-1}\nfunction SFc(a,b){return a?0:b-1}\nfunction RFc(a,b){return a?b-1:0}\nfunction M2c(a,b){return b.Yf(a)}\nfunction M3c(a,b){a.b=b;return a}\nfunction L3c(a,b){a.a=b;return a}\nfunction N3c(a,b){a.c=b;return a}\nfunction O3c(a,b){a.d=b;return a}\nfunction P3c(a,b){a.e=b;return a}\nfunction Q3c(a,b){a.f=b;return a}\nfunction b4c(a,b){a.a=b;return a}\nfunction c4c(a,b){a.b=b;return a}\nfunction d4c(a,b){a.c=b;return a}\nfunction z5c(a,b){a.c=b;return a}\nfunction y5c(a,b){a.b=b;return a}\nfunction A5c(a,b){a.d=b;return a}\nfunction B5c(a,b){a.e=b;return a}\nfunction C5c(a,b){a.f=b;return a}\nfunction D5c(a,b){a.g=b;return a}\nfunction E5c(a,b){a.a=b;return a}\nfunction F5c(a,b){a.i=b;return a}\nfunction G5c(a,b){a.j=b;return a}\nfunction Vdd(a,b){a.k=b;return a}\nfunction Wdd(a,b){a.j=b;return a}\nfunction ykc(a,b){gkc();F0b(b,a)}\nfunction T$c(a,b,c){R$c(a.a,b,c)}\nfunction RGc(a){cEc.call(this,a)}\nfunction iHc(a){cEc.call(this,a)}\nfunction t7c(a){Qsb.call(this,a)}\nfunction aPb(a){_Ob.call(this,a)}\nfunction Ixd(a){zud.call(this,a)}\nfunction dCd(a){ZBd.call(this,a)}\nfunction fCd(a){ZBd.call(this,a)}\nfunction p_b(){q_b.call(this,'')}\nfunction d7c(){this.a=0;this.b=0}\nfunction aPc(){this.b=0;this.a=0}\nfunction NJd(a,b){a.b=0;DId(a,b)}\nfunction X1d(a,b){a.c=b;a.b=true}\nfunction Oc(a,b){return a.c._b(b)}\nfunction gdb(a){return a.e&&a.e()}\nfunction Vd(a){return !a?null:a.d}\nfunction sn(a,b){return Gv(a.b,b)}\nfunction Fv(a){return !a?null:a.g}\nfunction Kv(a){return !a?null:a.i}\nfunction hdb(a){fdb(a);return a.o}\nfunction Fhd(){Fhd=ccb;Ehd=ond()}\nfunction Hhd(){Hhd=ccb;Ghd=Cod()}\nfunction LFd(){LFd=ccb;KFd=qZd()}\nfunction p8d(){p8d=ccb;o8d=Y9d()}\nfunction r8d(){r8d=ccb;q8d=dae()}\nfunction mvd(){mvd=ccb;lvd=n4c()}\nfunction Srb(){throw vbb(new bgb)}\nfunction enb(){throw vbb(new bgb)}\nfunction fnb(){throw vbb(new bgb)}\nfunction gnb(){throw vbb(new bgb)}\nfunction jnb(){throw vbb(new bgb)}\nfunction Cnb(){throw vbb(new bgb)}\nfunction Uqb(a){this.a=new Mqb(a)}\nfunction tgb(a){lgb();ngb(this,a)}\nfunction Hxb(a){this.a=new Qwb(a)}\nfunction _ub(a,b){while(a.ye(b));}\nfunction Sub(a,b){while(a.sd(b));}\nfunction Bfb(a,b){a.a+=b;return a}\nfunction Cfb(a,b){a.a+=b;return a}\nfunction Ffb(a,b){a.a+=b;return a}\nfunction Lfb(a,b){a.a+=b;return a}\nfunction WAb(a){Tzb(a);return a.a}\nfunction Wsb(a){return a.b!=a.d.c}\nfunction pD(a){return a.l|a.m<<22}\nfunction aIc(a,b){return a.d[b.p]}\nfunction h2c(a,b){return c2c(a,b)}\nfunction cCb(a,b,c){a.splice(b,c)}\nfunction WHb(a){a.c?VHb(a):XHb(a)}\nfunction jVc(a){this.a=0;this.b=a}\nfunction ZUc(){this.a=new L2c(K$)}\nfunction tRc(){this.b=new L2c(h$)}\nfunction Q$c(){this.b=new L2c(J_)}\nfunction d_c(){this.b=new L2c(J_)}\nfunction OCd(){throw vbb(new bgb)}\nfunction PCd(){throw vbb(new bgb)}\nfunction QCd(){throw vbb(new bgb)}\nfunction RCd(){throw vbb(new bgb)}\nfunction SCd(){throw vbb(new bgb)}\nfunction TCd(){throw vbb(new bgb)}\nfunction UCd(){throw vbb(new bgb)}\nfunction VCd(){throw vbb(new bgb)}\nfunction WCd(){throw vbb(new bgb)}\nfunction XCd(){throw vbb(new bgb)}\nfunction ahe(){throw vbb(new utb)}\nfunction bhe(){throw vbb(new utb)}\nfunction Rge(a){this.a=new ege(a)}\nfunction ege(a){dge(this,a,Vee())}\nfunction Fhe(a){return !a||Ehe(a)}\nfunction dde(a){return $ce[a]!=-1}\nfunction Iz(){xz!=0&&(xz=0);zz=-1}\nfunction Ybb(){Wbb==null&&(Wbb=[])}\nfunction ONd(a,b){Rxd(ZKd(a.a),b)}\nfunction TNd(a,b){Rxd(ZKd(a.a),b)}\nfunction Yf(a,b){zf.call(this,a,b)}\nfunction $f(a,b){Yf.call(this,a,b)}\nfunction Hf(a,b){this.b=a;this.c=b}\nfunction rk(a,b){this.b=a;this.a=b}\nfunction ek(a,b){this.a=a;this.b=b}\nfunction gk(a,b){this.a=a;this.b=b}\nfunction pk(a,b){this.a=a;this.b=b}\nfunction yk(a,b){this.a=a;this.b=b}\nfunction Ak(a,b){this.a=a;this.b=b}\nfunction Fj(a,b){this.a=a;this.b=b}\nfunction _j(a,b){this.a=a;this.b=b}\nfunction dr(a,b){this.a=a;this.b=b}\nfunction zr(a,b){this.b=a;this.a=b}\nfunction So(a,b){this.b=a;this.a=b}\nfunction qp(a,b){this.b=a;this.a=b}\nfunction $q(a,b){this.b=a;this.a=b}\nfunction $r(a,b){this.f=a;this.g=b}\nfunction ne(a,b){this.e=a;this.d=b}\nfunction Wo(a,b){this.g=a;this.i=b}\nfunction bu(a,b){this.a=a;this.b=b}\nfunction qu(a,b){this.a=a;this.f=b}\nfunction qv(a,b){this.b=a;this.c=b}\nfunction ox(a,b){this.a=a;this.b=b}\nfunction Px(a,b){this.a=a;this.b=b}\nfunction mC(a,b){this.a=a;this.b=b}\nfunction Wc(a){Lb(a.dc());this.c=a}\nfunction rf(a){this.b=BD(Qb(a),83)}\nfunction Zv(a){this.a=BD(Qb(a),83)}\nfunction dv(a){this.a=BD(Qb(a),15)}\nfunction $u(a){this.a=BD(Qb(a),15)}\nfunction Br(a){this.b=BD(Qb(a),47)}\nfunction eB(){this.q=new $wnd.Date}\nfunction Zfb(){Zfb=ccb;Yfb=new jcb}\nfunction Emb(){Emb=ccb;Dmb=new Fmb}\nfunction Vhb(a){return a.f.c+a.g.c}\nfunction hnb(a,b){return a.b.Hc(b)}\nfunction inb(a,b){return a.b.Ic(b)}\nfunction knb(a,b){return a.b.Qc(b)}\nfunction Dob(a,b){return a.b.Hc(b)}\nfunction dob(a,b){return a.c.uc(b)}\nfunction Rqb(a,b){return a.a._b(b)}\nfunction fob(a,b){return pb(a.c,b)}\nfunction jt(a,b){return Mhb(a.b,b)}\nfunction Lp(a,b){return a>b&&b0}\nfunction Gbb(a,b){return ybb(a,b)<0}\nfunction Crb(a,b){return a.a.get(b)}\nfunction icb(b,a){return a.split(b)}\nfunction Vrb(a,b){return Mhb(a.e,b)}\nfunction Nvb(a){return uCb(a),false}\nfunction Rub(a){Kub.call(this,a,21)}\nfunction wcb(a,b){Zy.call(this,a,b)}\nfunction mxb(a,b){$r.call(this,a,b)}\nfunction Gyb(a,b){$r.call(this,a,b)}\nfunction zx(a){yx();Wn.call(this,a)}\nfunction zlb(a,b){Dlb(a,a.length,b)}\nfunction Alb(a,b){Flb(a,a.length,b)}\nfunction ABb(a,b,c){b.ud(a.a.Ge(c))}\nfunction uBb(a,b,c){b.we(a.a.Fe(c))}\nfunction GBb(a,b,c){b.td(a.a.Kb(c))}\nfunction Zq(a,b,c){a.Mb(c)&&b.td(c)}\nfunction aCb(a,b,c){a.splice(b,0,c)}\nfunction lDb(a,b){return uqb(a.e,b)}\nfunction pjb(a,b){this.d=a;this.e=b}\nfunction kqb(a,b){this.b=a;this.a=b}\nfunction VBb(a,b){this.b=a;this.a=b}\nfunction BEb(a,b){this.b=a;this.a=b}\nfunction sBb(a,b){this.a=a;this.b=b}\nfunction yBb(a,b){this.a=a;this.b=b}\nfunction EBb(a,b){this.a=a;this.b=b}\nfunction KBb(a,b){this.a=a;this.b=b}\nfunction aDb(a,b){this.a=a;this.b=b}\nfunction tMb(a,b){this.b=a;this.a=b}\nfunction oOb(a,b){this.b=a;this.a=b}\nfunction SOb(a,b){$r.call(this,a,b)}\nfunction SMb(a,b){$r.call(this,a,b)}\nfunction NEb(a,b){$r.call(this,a,b)}\nfunction VEb(a,b){$r.call(this,a,b)}\nfunction sFb(a,b){$r.call(this,a,b)}\nfunction hHb(a,b){$r.call(this,a,b)}\nfunction OHb(a,b){$r.call(this,a,b)}\nfunction FIb(a,b){$r.call(this,a,b)}\nfunction wLb(a,b){$r.call(this,a,b)}\nfunction YRb(a,b){$r.call(this,a,b)}\nfunction zTb(a,b){$r.call(this,a,b)}\nfunction rUb(a,b){$r.call(this,a,b)}\nfunction oWb(a,b){$r.call(this,a,b)}\nfunction SXb(a,b){$r.call(this,a,b)}\nfunction k0b(a,b){$r.call(this,a,b)}\nfunction z5b(a,b){$r.call(this,a,b)}\nfunction T8b(a,b){$r.call(this,a,b)}\nfunction ibc(a,b){$r.call(this,a,b)}\nfunction Cec(a,b){this.a=a;this.b=b}\nfunction rfc(a,b){this.a=a;this.b=b}\nfunction Rfc(a,b){this.a=a;this.b=b}\nfunction Tfc(a,b){this.a=a;this.b=b}\nfunction bgc(a,b){this.a=a;this.b=b}\nfunction ngc(a,b){this.a=a;this.b=b}\nfunction Qhc(a,b){this.a=a;this.b=b}\nfunction $hc(a,b){this.a=a;this.b=b}\nfunction Z0b(a,b){this.a=a;this.b=b}\nfunction ZVb(a,b){this.b=a;this.a=b}\nfunction Dfc(a,b){this.b=a;this.a=b}\nfunction dgc(a,b){this.b=a;this.a=b}\nfunction Bmc(a,b){this.b=a;this.a=b}\nfunction cWb(a,b){this.c=a;this.d=b}\nfunction I$b(a,b){this.e=a;this.d=b}\nfunction Unc(a,b){this.a=a;this.b=b}\nfunction Oic(a,b){this.b=b;this.c=a}\nfunction Bjc(a,b){$r.call(this,a,b)}\nfunction Yjc(a,b){$r.call(this,a,b)}\nfunction Gkc(a,b){$r.call(this,a,b)}\nfunction Bpc(a,b){$r.call(this,a,b)}\nfunction Jpc(a,b){$r.call(this,a,b)}\nfunction Tpc(a,b){$r.call(this,a,b)}\nfunction cqc(a,b){$r.call(this,a,b)}\nfunction oqc(a,b){$r.call(this,a,b)}\nfunction yqc(a,b){$r.call(this,a,b)}\nfunction Hqc(a,b){$r.call(this,a,b)}\nfunction Uqc(a,b){$r.call(this,a,b)}\nfunction arc(a,b){$r.call(this,a,b)}\nfunction mrc(a,b){$r.call(this,a,b)}\nfunction zrc(a,b){$r.call(this,a,b)}\nfunction Prc(a,b){$r.call(this,a,b)}\nfunction Yrc(a,b){$r.call(this,a,b)}\nfunction fsc(a,b){$r.call(this,a,b)}\nfunction nsc(a,b){$r.call(this,a,b)}\nfunction nzc(a,b){$r.call(this,a,b)}\nfunction zzc(a,b){$r.call(this,a,b)}\nfunction Kzc(a,b){$r.call(this,a,b)}\nfunction Xzc(a,b){$r.call(this,a,b)}\nfunction Dtc(a,b){$r.call(this,a,b)}\nfunction lAc(a,b){$r.call(this,a,b)}\nfunction uAc(a,b){$r.call(this,a,b)}\nfunction CAc(a,b){$r.call(this,a,b)}\nfunction LAc(a,b){$r.call(this,a,b)}\nfunction UAc(a,b){$r.call(this,a,b)}\nfunction aBc(a,b){$r.call(this,a,b)}\nfunction uBc(a,b){$r.call(this,a,b)}\nfunction DBc(a,b){$r.call(this,a,b)}\nfunction MBc(a,b){$r.call(this,a,b)}\nfunction sGc(a,b){$r.call(this,a,b)}\nfunction VIc(a,b){$r.call(this,a,b)}\nfunction EIc(a,b){this.b=a;this.a=b}\nfunction qKc(a,b){this.a=a;this.b=b}\nfunction GKc(a,b){this.a=a;this.b=b}\nfunction lLc(a,b){this.a=a;this.b=b}\nfunction mMc(a,b){this.a=a;this.b=b}\nfunction fMc(a,b){$r.call(this,a,b)}\nfunction ZLc(a,b){$r.call(this,a,b)}\nfunction ZMc(a,b){this.b=a;this.d=b}\nfunction IOc(a,b){$r.call(this,a,b)}\nfunction GQc(a,b){$r.call(this,a,b)}\nfunction PQc(a,b){this.a=a;this.b=b}\nfunction RQc(a,b){this.a=a;this.b=b}\nfunction ARc(a,b){$r.call(this,a,b)}\nfunction rSc(a,b){$r.call(this,a,b)}\nfunction TTc(a,b){$r.call(this,a,b)}\nfunction _Tc(a,b){$r.call(this,a,b)}\nfunction RUc(a,b){$r.call(this,a,b)}\nfunction uVc(a,b){$r.call(this,a,b)}\nfunction hWc(a,b){$r.call(this,a,b)}\nfunction rWc(a,b){$r.call(this,a,b)}\nfunction kXc(a,b){$r.call(this,a,b)}\nfunction uXc(a,b){$r.call(this,a,b)}\nfunction AYc(a,b){$r.call(this,a,b)}\nfunction l$c(a,b){$r.call(this,a,b)}\nfunction Z$c(a,b){$r.call(this,a,b)}\nfunction D_c(a,b){$r.call(this,a,b)}\nfunction O_c(a,b){$r.call(this,a,b)}\nfunction c1c(a,b){$r.call(this,a,b)}\nfunction cVb(a,b){return uqb(a.c,b)}\nfunction nnc(a,b){return uqb(b.b,a)}\nfunction x1c(a,b){return -a.b.Je(b)}\nfunction D3c(a,b){return uqb(a.g,b)}\nfunction O5c(a,b){$r.call(this,a,b)}\nfunction a6c(a,b){$r.call(this,a,b)}\nfunction m2c(a,b){this.a=a;this.b=b}\nfunction W2c(a,b){this.a=a;this.b=b}\nfunction f7c(a,b){this.a=a;this.b=b}\nfunction G7c(a,b){$r.call(this,a,b)}\nfunction j8c(a,b){$r.call(this,a,b)}\nfunction iad(a,b){$r.call(this,a,b)}\nfunction rad(a,b){$r.call(this,a,b)}\nfunction Bad(a,b){$r.call(this,a,b)}\nfunction Nad(a,b){$r.call(this,a,b)}\nfunction ibd(a,b){$r.call(this,a,b)}\nfunction tbd(a,b){$r.call(this,a,b)}\nfunction Ibd(a,b){$r.call(this,a,b)}\nfunction Ubd(a,b){$r.call(this,a,b)}\nfunction gcd(a,b){$r.call(this,a,b)}\nfunction scd(a,b){$r.call(this,a,b)}\nfunction Ycd(a,b){$r.call(this,a,b)}\nfunction udd(a,b){$r.call(this,a,b)}\nfunction Jdd(a,b){$r.call(this,a,b)}\nfunction Eed(a,b){$r.call(this,a,b)}\nfunction bfd(a,b){this.a=a;this.b=b}\nfunction dfd(a,b){this.a=a;this.b=b}\nfunction ffd(a,b){this.a=a;this.b=b}\nfunction Kfd(a,b){this.a=a;this.b=b}\nfunction Mfd(a,b){this.a=a;this.b=b}\nfunction Ofd(a,b){this.a=a;this.b=b}\nfunction vgd(a,b){this.a=a;this.b=b}\nfunction qgd(a,b){$r.call(this,a,b)}\nfunction jrd(a,b){this.a=a;this.b=b}\nfunction krd(a,b){this.a=a;this.b=b}\nfunction mrd(a,b){this.a=a;this.b=b}\nfunction nrd(a,b){this.a=a;this.b=b}\nfunction qrd(a,b){this.a=a;this.b=b}\nfunction rrd(a,b){this.a=a;this.b=b}\nfunction srd(a,b){this.b=a;this.a=b}\nfunction trd(a,b){this.b=a;this.a=b}\nfunction Drd(a,b){this.b=a;this.a=b}\nfunction Frd(a,b){this.b=a;this.a=b}\nfunction Hrd(a,b){this.a=a;this.b=b}\nfunction Jrd(a,b){this.a=a;this.b=b}\nfunction Ord(a,b){Xqd(a.a,BD(b,56))}\nfunction BIc(a,b){gIc(a.a,BD(b,11))}\nfunction fIc(a,b){FHc();return b!=a}\nfunction Arb(){wrb();return new vrb}\nfunction CMc(){wMc();this.b=new Tqb}\nfunction NNc(){FNc();this.a=new Tqb}\nfunction eCc(){ZBc();aCc.call(this)}\nfunction Dsd(a,b){$r.call(this,a,b)}\nfunction Urd(a,b){this.a=a;this.b=b}\nfunction Wrd(a,b){this.a=a;this.b=b}\nfunction kGd(a,b){this.a=a;this.b=b}\nfunction nGd(a,b){this.a=a;this.b=b}\nfunction bUd(a,b){this.a=a;this.b=b}\nfunction zVd(a,b){this.a=a;this.b=b}\nfunction C1d(a,b){this.d=a;this.b=b}\nfunction MLd(a,b){this.d=a;this.e=b}\nfunction Wud(a,b){this.f=a;this.c=b}\nfunction f7d(a,b){this.b=a;this.c=b}\nfunction _zd(a,b){this.i=a;this.g=b}\nfunction Y1d(a,b){this.e=a;this.a=b}\nfunction c8d(a,b){this.a=a;this.b=b}\nfunction $Id(a,b){a.i=null;_Id(a,b)}\nfunction ivd(a,b){!!a&&Rhb(cvd,a,b)}\nfunction hCd(a,b){return qAd(a.a,b)}\nfunction e7d(a){return R2d(a.c,a.b)}\nfunction Wd(a){return !a?null:a.dd()}\nfunction PD(a){return a==null?null:a}\nfunction KD(a){return typeof a===Khe}\nfunction LD(a){return typeof a===Lhe}\nfunction ND(a){return typeof a===Mhe}\nfunction Em(a,b){return a.Hd().Xb(b)}\nfunction Kq(a,b){return hr(a.Kc(),b)}\nfunction Bbb(a,b){return ybb(a,b)==0}\nfunction Ebb(a,b){return ybb(a,b)>=0}\nfunction Kbb(a,b){return ybb(a,b)!=0}\nfunction Jdb(a){return ''+(uCb(a),a)}\nfunction pfb(a,b){return a.substr(b)}\nfunction cg(a){ag(a);return a.d.gc()}\nfunction oVb(a){pVb(a,a.c);return a}\nfunction RD(a){CCb(a==null);return a}\nfunction Dfb(a,b){a.a+=''+b;return a}\nfunction Efb(a,b){a.a+=''+b;return a}\nfunction Nfb(a,b){a.a+=''+b;return a}\nfunction Pfb(a,b){a.a+=''+b;return a}\nfunction Qfb(a,b){a.a+=''+b;return a}\nfunction Mfb(a,b){return a.a+=''+b,a}\nfunction Esb(a,b){Gsb(a,b,a.a,a.a.a)}\nfunction Fsb(a,b){Gsb(a,b,a.c.b,a.c)}\nfunction Mqd(a,b,c){Rpd(b,kqd(a,c))}\nfunction Nqd(a,b,c){Rpd(b,kqd(a,c))}\nfunction Dhe(a,b){Hhe(new Fyd(a),b)}\nfunction cB(a,b){a.q.setTime(Sbb(b))}\nfunction fvb(a,b){bvb.call(this,a,b)}\nfunction jvb(a,b){bvb.call(this,a,b)}\nfunction nvb(a,b){bvb.call(this,a,b)}\nfunction Nqb(a){Uhb(this);Ld(this,a)}\nfunction wmb(a){tCb(a,0);return null}\nfunction X6c(a){a.a=0;a.b=0;return a}\nfunction f3c(a,b){a.a=b.g+1;return a}\nfunction PJc(a,b){return a.j[b.p]==2}\nfunction _Pb(a){return VPb(BD(a,79))}\nfunction yJb(){yJb=ccb;xJb=as(wJb())}\nfunction Y8b(){Y8b=ccb;X8b=as(W8b())}\nfunction mt(){this.b=new Mqb(Cv(12))}\nfunction Otb(){this.b=0;this.a=false}\nfunction Wtb(){this.b=0;this.a=false}\nfunction sl(a){this.a=a;ol.call(this)}\nfunction vl(a){this.a=a;ol.call(this)}\nfunction Nsd(a,b){Msd.call(this,a,b)}\nfunction $zd(a,b){Cyd.call(this,a,b)}\nfunction nNd(a,b){_zd.call(this,a,b)}\nfunction s4d(a,b){p4d.call(this,a,b)}\nfunction w4d(a,b){qRd.call(this,a,b)}\nfunction rEd(a,b){pEd();Rhb(oEd,a,b)}\nfunction lcb(a,b){return qfb(a.a,0,b)}\nfunction ww(a,b){return a.a.a.a.cc(b)}\nfunction mb(a,b){return PD(a)===PD(b)}\nfunction Mdb(a,b){return Kdb(a.a,b.a)}\nfunction $db(a,b){return beb(a.a,b.a)}\nfunction seb(a,b){return ueb(a.a,b.a)}\nfunction hfb(a,b){return a.indexOf(b)}\nfunction Ny(a,b){return a==b?0:a?1:-1}\nfunction kB(a){return a<10?'0'+a:''+a}\nfunction Mq(a){return Qb(a),new sl(a)}\nfunction SC(a){return TC(a.l,a.m,a.h)}\nfunction Hdb(a){return QD((uCb(a),a))}\nfunction Idb(a){return QD((uCb(a),a))}\nfunction NIb(a,b){return beb(a.g,b.g)}\nfunction Fbb(a){return typeof a===Lhe}\nfunction mWb(a){return a==hWb||a==kWb}\nfunction nWb(a){return a==hWb||a==iWb}\nfunction G1b(a){return Jkb(a.b.b,a,0)}\nfunction lrb(a){this.a=Arb();this.b=a}\nfunction Frb(a){this.a=Arb();this.b=a}\nfunction swb(a,b){Ekb(a.a,b);return b}\nfunction Z1c(a,b){Ekb(a.c,b);return a}\nfunction E2c(a,b){d3c(a.a,b);return a}\nfunction _gc(a,b){Hgc();return b.a+=a}\nfunction bhc(a,b){Hgc();return b.a+=a}\nfunction ahc(a,b){Hgc();return b.c+=a}\nfunction Nlb(a,b){Klb(a,0,a.length,b)}\nfunction zsb(){Wqb.call(this,new $rb)}\nfunction I_b(){B_b.call(this,0,0,0,0)}\nfunction I6c(){J6c.call(this,0,0,0,0)}\nfunction g7c(a){this.a=a.a;this.b=a.b}\nfunction fad(a){return a==aad||a==bad}\nfunction gad(a){return a==dad||a==_9c}\nfunction Jzc(a){return a==Fzc||a==Ezc}\nfunction fcd(a){return a!=bcd&&a!=ccd}\nfunction oid(a){return a.Lg()&&a.Mg()}\nfunction Gfd(a){return Kkd(BD(a,118))}\nfunction k3c(a){return d3c(new j3c,a)}\nfunction y2d(a,b){return new p4d(b,a)}\nfunction z2d(a,b){return new p4d(b,a)}\nfunction ukd(a,b,c){vkd(a,b);wkd(a,c)}\nfunction _kd(a,b,c){cld(a,b);ald(a,c)}\nfunction bld(a,b,c){dld(a,b);eld(a,c)}\nfunction gmd(a,b,c){hmd(a,b);imd(a,c)}\nfunction nmd(a,b,c){omd(a,b);pmd(a,c)}\nfunction iKd(a,b){$Jd(a,b);_Jd(a,a.D)}\nfunction _ud(a){Wud.call(this,a,true)}\nfunction Xg(a,b,c){Vg.call(this,a,b,c)}\nfunction Ygb(a){Hgb();Zgb.call(this,a)}\nfunction rxb(){mxb.call(this,'Head',1)}\nfunction wxb(){mxb.call(this,'Tail',3)}\nfunction Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)}\nfunction Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)}\nfunction MGb(a){Hkb(a.xf(),new QGb(a))}\nfunction xtb(a){return a!=null?tb(a):0}\nfunction b2b(a,b){return ntd(b,mpd(a))}\nfunction c2b(a,b){return ntd(b,mpd(a))}\nfunction dAb(a,b){return a[a.length]=b}\nfunction gAb(a,b){return a[a.length]=b}\nfunction Vq(a){return lr(a.b.Kc(),a.a)}\nfunction dqd(a,b){return _o(qo(a.d),b)}\nfunction eqd(a,b){return _o(qo(a.g),b)}\nfunction fqd(a,b){return _o(qo(a.j),b)}\nfunction Osd(a,b){Msd.call(this,a.b,b)}\nfunction q0b(a){B_b.call(this,a,a,a,a)}\nfunction HOb(a){a.b&&LOb(a);return a.a}\nfunction IOb(a){a.b&&LOb(a);return a.c}\nfunction uyb(a,b){if(lyb){return}a.b=b}\nfunction lzd(a,b,c){NC(a,b,c);return c}\nfunction mBc(a,b,c){NC(a.c[b.g],b.g,c)}\nfunction _Hd(a,b,c){BD(a.c,69).Xh(b,c)}\nfunction wfd(a,b,c){bld(c,c.i+a,c.j+b)}\nfunction UOd(a,b){wtd(VKd(a.a),XOd(b))}\nfunction bTd(a,b){wtd(QSd(a.a),eTd(b))}\nfunction Lge(a){wfe();xfe.call(this,a)}\nfunction CAd(a){return a==null?0:tb(a)}\nfunction fNc(){fNc=ccb;eNc=new Rpb(v1)}\nfunction h0d(){h0d=ccb;new i0d;new Rkb}\nfunction i0d(){new Lqb;new Lqb;new Lqb}\nfunction GA(){GA=ccb;fA();FA=new Lqb}\nfunction Iy(){Iy=ccb;$wnd.Math.log(2)}\nfunction UVd(){UVd=ccb;TVd=(AFd(),zFd)}\nfunction _ge(){throw vbb(new cgb(Cxe))}\nfunction ohe(){throw vbb(new cgb(Cxe))}\nfunction che(){throw vbb(new cgb(Dxe))}\nfunction rhe(){throw vbb(new cgb(Dxe))}\nfunction Mg(a){this.a=a;Gg.call(this,a)}\nfunction up(a){this.a=a;rf.call(this,a)}\nfunction Bp(a){this.a=a;rf.call(this,a)}\nfunction Okb(a,b){Mlb(a.c,a.c.length,b)}\nfunction llb(a){return a.ab?1:0}\nfunction Deb(a,b){return ybb(a,b)>0?a:b}\nfunction TC(a,b,c){return {l:a,m:b,h:c}}\nfunction Ctb(a,b){a.a!=null&&BIc(b,a.a)}\nfunction Csb(a){a.a=new jtb;a.c=new jtb}\nfunction hDb(a){this.b=a;this.a=new Rkb}\nfunction dOb(a){this.b=new pOb;this.a=a}\nfunction q_b(a){n_b.call(this);this.a=a}\nfunction txb(){mxb.call(this,'Range',2)}\nfunction bUb(){ZTb();this.a=new L2c(zP)}\nfunction Bh(a,b){Qb(b);Ah(a).Jc(new Vw)}\nfunction fKc(a,b){FJc();return b.n.b+=a}\nfunction Tgc(a,b,c){return Rhb(a.g,c,b)}\nfunction LJc(a,b,c){return Rhb(a.k,c,b)}\nfunction r1c(a,b){return Rhb(a.a,b.a,b)}\nfunction jBc(a,b,c){return hBc(b,c,a.c)}\nfunction E6c(a){return new f7c(a.c,a.d)}\nfunction F6c(a){return new f7c(a.c,a.d)}\nfunction R6c(a){return new f7c(a.a,a.b)}\nfunction CQd(a,b){return hA(a.a,b,null)}\nfunction fec(a){QZb(a,null);RZb(a,null)}\nfunction AOc(a){BOc(a,null);COc(a,null)}\nfunction u4d(){qRd.call(this,null,null)}\nfunction y4d(){RRd.call(this,null,null)}\nfunction a7d(a){this.a=a;Lqb.call(this)}\nfunction Pp(a){this.b=(mmb(),new iob(a))}\nfunction Py(a){a.j=KC(VI,nie,310,0,0,1)}\nfunction oAd(a,b,c){a.c.Vc(b,BD(c,133))}\nfunction GAd(a,b,c){a.c.ji(b,BD(c,133))}\nfunction JLd(a,b){Uxd(a);a.Gc(BD(b,15))}\nfunction b7d(a,b){return t2d(a.c,a.b,b)}\nfunction Bv(a,b){return new Qv(a.Kc(),b)}\nfunction Lq(a,b){return rr(a.Kc(),b)!=-1}\nfunction Sqb(a,b){return a.a.Bc(b)!=null}\nfunction pr(a){return a.Ob()?a.Pb():null}\nfunction yfb(a){return zfb(a,0,a.length)}\nfunction JD(a,b){return a!=null&&AD(a,b)}\nfunction $A(a,b){a.q.setHours(b);YA(a,b)}\nfunction Yrb(a,b){if(a.c){jsb(b);isb(b)}}\nfunction nk(a,b,c){BD(a.Kb(c),164).Nb(b)}\nfunction RJc(a,b,c){SJc(a,b,c);return c}\nfunction Eub(a,b,c){a.a=b^1502;a.b=c^kke}\nfunction xHb(a,b,c){return a.a[b.g][c.g]}\nfunction REc(a,b){return a.a[b.c.p][b.p]}\nfunction aEc(a,b){return a.e[b.c.p][b.p]}\nfunction tEc(a,b){return a.c[b.c.p][b.p]}\nfunction OJc(a,b){return a.j[b.p]=aKc(b)}\nfunction k5c(a,b){return cfb(a.f,b.tg())}\nfunction Isd(a,b){return cfb(a.b,b.tg())}\nfunction Sfd(a,b){return a.a0?b*b/a:b*b*100}\nfunction CRb(a,b){return a>0?b/(a*a):b*100}\nfunction G2c(a,b,c){return Ekb(b,I2c(a,c))}\nfunction t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)}\nfunction St(a,b,c){var d;d=a.Zc(b);d.Rb(c)}\nfunction O6c(a,b,c){a.a+=b;a.b+=c;return a}\nfunction Z6c(a,b,c){a.a*=b;a.b*=c;return a}\nfunction b7c(a,b,c){a.a-=b;a.b-=c;return a}\nfunction a7c(a,b){a.a=b.a;a.b=b.b;return a}\nfunction V6c(a){a.a=-a.a;a.b=-a.b;return a}\nfunction Dic(a){this.c=a;this.a=1;this.b=1}\nfunction xed(a){this.c=a;dld(a,0);eld(a,0)}\nfunction u7c(a){Psb.call(this);n7c(this,a)}\nfunction AXb(a){xXb();yXb(this);this.mf(a)}\nfunction GRd(a,b){nRd();qRd.call(this,a,b)}\nfunction dSd(a,b){LRd();RRd.call(this,a,b)}\nfunction hSd(a,b){LRd();RRd.call(this,a,b)}\nfunction fSd(a,b){LRd();dSd.call(this,a,b)}\nfunction sId(a,b,c){dId.call(this,a,b,c,2)}\nfunction zXd(a,b){UVd();nXd.call(this,a,b)}\nfunction BXd(a,b){UVd();zXd.call(this,a,b)}\nfunction DXd(a,b){UVd();zXd.call(this,a,b)}\nfunction FXd(a,b){UVd();DXd.call(this,a,b)}\nfunction PXd(a,b){UVd();nXd.call(this,a,b)}\nfunction RXd(a,b){UVd();PXd.call(this,a,b)}\nfunction XXd(a,b){UVd();nXd.call(this,a,b)}\nfunction pAd(a,b){return a.c.Fc(BD(b,133))}\nfunction w1d(a,b,c){return V1d(p1d(a,b),c)}\nfunction N2d(a,b,c){return b.Qk(a.e,a.c,c)}\nfunction P2d(a,b,c){return b.Rk(a.e,a.c,c)}\nfunction a3d(a,b){return xid(a.e,BD(b,49))}\nfunction aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))}\nfunction TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))}\nfunction ypb(a,b){b.$modCount=a.$modCount}\nfunction MUc(){MUc=ccb;LUc=new Lsd('root')}\nfunction LCd(){LCd=ccb;KCd=new lDd;new NDd}\nfunction KVc(){this.a=new Hp;this.b=new Hp}\nfunction FUd(){hJd.call(this);this.Bb|=Tje}\nfunction t_c(){$r.call(this,'GROW_TREE',0)}\nfunction C9d(a){return a==null?null:cde(a)}\nfunction G9d(a){return a==null?null:jde(a)}\nfunction J9d(a){return a==null?null:fcb(a)}\nfunction K9d(a){return a==null?null:fcb(a)}\nfunction fdb(a){if(a.o!=null){return}vdb(a)}\nfunction DD(a){CCb(a==null||KD(a));return a}\nfunction ED(a){CCb(a==null||LD(a));return a}\nfunction GD(a){CCb(a==null||ND(a));return a}\nfunction gB(a){this.q=new $wnd.Date(Sbb(a))}\nfunction Mf(a,b){this.c=a;ne.call(this,a,b)}\nfunction Sf(a,b){this.a=a;Mf.call(this,a,b)}\nfunction Hg(a,b){this.d=a;Dg(this);this.b=b}\nfunction bAb(a,b){Vzb.call(this,a);this.a=b}\nfunction vAb(a,b){Vzb.call(this,a);this.a=b}\nfunction sNb(a){pNb.call(this,0,0);this.f=a}\nfunction Vg(a,b,c){dg.call(this,a,b,c,null)}\nfunction Yg(a,b,c){dg.call(this,a,b,c,null)}\nfunction Pxb(a,b,c){return a.ue(b,c)<=0?c:b}\nfunction Qxb(a,b,c){return a.ue(b,c)<=0?b:c}\nfunction g4c(a,b){return BD(Wrb(a.b,b),149)}\nfunction i4c(a,b){return BD(Wrb(a.c,b),229)}\nfunction wic(a){return BD(Ikb(a.a,a.b),287)}\nfunction B6c(a){return new f7c(a.c,a.d+a.a)}\nfunction eLc(a){return FJc(),Jzc(BD(a,197))}\nfunction $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))}\nfunction fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)}\nfunction qyb(a,b){if(lyb){return}Ekb(a.a,b)}\nfunction F2b(a,b){x2b();return f_b(b.d.i,a)}\nfunction _9b(a,b){I9b();return new gac(b,a)}\nfunction _Hb(a,b){ytb(b,lle);a.f=b;return a}\nfunction Kld(a,b,c){c=_hd(a,b,3,c);return c}\nfunction bmd(a,b,c){c=_hd(a,b,6,c);return c}\nfunction kpd(a,b,c){c=_hd(a,b,9,c);return c}\nfunction Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)}\nfunction Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))}\nfunction bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)}\nfunction c7d(a,b,c){return C2d(a.c,a.b,b,c)}\nfunction DAd(a,b){return (b&Ohe)%a.d.length}\nfunction Msd(a,b){Lsd.call(this,a);this.a=b}\nfunction uVd(a,b){lVd.call(this,a);this.a=b}\nfunction sYd(a,b){lVd.call(this,a);this.a=b}\nfunction zyd(a,b){this.c=a;zud.call(this,b)}\nfunction YOd(a,b){this.a=a;qOd.call(this,b)}\nfunction fTd(a,b){this.a=a;qOd.call(this,b)}\nfunction Xp(a){this.a=(Xj(a,Jie),new Skb(a))}\nfunction cq(a){this.a=(Xj(a,Jie),new Skb(a))}\nfunction LA(a){!a.a&&(a.a=new VA);return a.a}\nfunction XMb(a){if(a>8){return 0}return a+1}\nfunction Ecb(a,b){Bcb();return a==b?0:a?1:-1}\nfunction Opb(a,b,c){return Npb(a,BD(b,22),c)}\nfunction Bz(a,b,c){return a.apply(b,c);var d}\nfunction Sfb(a,b,c){a.a+=zfb(b,0,c);return a}\nfunction ijb(a,b){var c;c=a.e;a.e=b;return c}\nfunction trb(a,b){var c;c=a[hke];c.call(a,b)}\nfunction urb(a,b){var c;c=a[hke];c.call(a,b)}\nfunction Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1}\nfunction Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d}\nfunction _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)}\nfunction _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))}\nfunction Bxb(a,b){return Vd(Cwb(a.a,b,true))}\nfunction Cxb(a,b){return Vd(Dwb(a.a,b,true))}\nfunction _Bb(a,b){return eCb(new Array(b),a)}\nfunction HD(a){return String.fromCharCode(a)}\nfunction mz(a){return a==null?null:a.message}\nfunction gRb(){this.a=new Rkb;this.b=new Rkb}\nfunction iTb(){this.a=new MQb;this.b=new tTb}\nfunction tDb(){this.b=new d7c;this.c=new Rkb}\nfunction _Qb(){this.d=new d7c;this.e=new d7c}\nfunction n_b(){this.n=new d7c;this.o=new d7c}\nfunction $Gb(){this.n=new p0b;this.i=new I6c}\nfunction sec(){this.a=new Umc;this.b=new mnc}\nfunction NIc(){this.a=new Rkb;this.d=new Rkb}\nfunction LDc(){this.b=new Tqb;this.a=new Tqb}\nfunction hSc(){this.b=new Lqb;this.a=new Lqb}\nfunction HRc(){this.b=new tRc;this.a=new hRc}\nfunction aHb(){$Gb.call(this);this.a=new d7c}\nfunction Ywb(a){Zwb.call(this,a,(lxb(),hxb))}\nfunction J_b(a,b,c,d){B_b.call(this,a,b,c,d)}\nfunction sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))}\nfunction tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))}\nfunction Tod(a,b,c){c=_hd(a,b,11,c);return c}\nfunction P6c(a,b){a.a+=b.a;a.b+=b.b;return a}\nfunction c7c(a,b){a.a-=b.a;a.b-=b.b;return a}\nfunction u7b(a,b){return a.n.a=(uCb(b),b)+10}\nfunction v7b(a,b){return a.n.a=(uCb(b),b)+10}\nfunction dLd(a,b){return b==a||pud(UKd(b),a)}\nfunction PYd(a,b){return Rhb(a.a,b,'')==null}\nfunction E2b(a,b){x2b();return !f_b(b.d.i,a)}\nfunction rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)}\nfunction h1d(a,b){var c;c=b.Hh(a.a);return c}\nfunction Cyd(a,b){qcb.call(this,gve+a+mue+b)}\nfunction gUd(a,b,c,d){cUd.call(this,a,b,c,d)}\nfunction Q4d(a,b,c,d){cUd.call(this,a,b,c,d)}\nfunction U4d(a,b,c,d){Q4d.call(this,a,b,c,d)}\nfunction n5d(a,b,c,d){i5d.call(this,a,b,c,d)}\nfunction p5d(a,b,c,d){i5d.call(this,a,b,c,d)}\nfunction v5d(a,b,c,d){i5d.call(this,a,b,c,d)}\nfunction t5d(a,b,c,d){p5d.call(this,a,b,c,d)}\nfunction A5d(a,b,c,d){p5d.call(this,a,b,c,d)}\nfunction y5d(a,b,c,d){v5d.call(this,a,b,c,d)}\nfunction D5d(a,b,c,d){A5d.call(this,a,b,c,d)}\nfunction d6d(a,b,c,d){Y5d.call(this,a,b,c,d)}\nfunction Vp(a,b,c){this.a=a;qc.call(this,b,c)}\nfunction tk(a,b,c){this.c=b;this.b=c;this.a=a}\nfunction ik(a,b,c){return a.d=BD(b.Kb(c),164)}\nfunction j6d(a,b){return a.Aj().Nh().Kh(a,b)}\nfunction h6d(a,b){return a.Aj().Nh().Ih(a,b)}\nfunction Fdb(a,b){return uCb(a),PD(a)===PD(b)}\nfunction dfb(a,b){return uCb(a),PD(a)===PD(b)}\nfunction Dxb(a,b){return Vd(Cwb(a.a,b,false))}\nfunction Exb(a,b){return Vd(Dwb(a.a,b,false))}\nfunction vBb(a,b){return a.b.sd(new yBb(a,b))}\nfunction BBb(a,b){return a.b.sd(new EBb(a,b))}\nfunction HBb(a,b){return a.b.sd(new KBb(a,b))}\nfunction lfb(a,b,c){return a.lastIndexOf(b,c)}\nfunction uTb(a,b,c){return Kdb(a[b.b],a[c.b])}\nfunction RTb(a,b){return yNb(b,(Nyc(),Cwc),a)}\nfunction fmc(a,b){return beb(b.a.d.p,a.a.d.p)}\nfunction emc(a,b){return beb(a.a.d.p,b.a.d.p)}\nfunction _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)}\nfunction S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)}\nfunction Vxd(a){return a<100?null:new Ixd(a)}\nfunction ecd(a){return a==Zbd||a==_bd||a==$bd}\nfunction zAd(a,b){return JD(b,15)&&Btd(a.c,b)}\nfunction vyb(a,b){if(lyb){return}!!b&&(a.d=b)}\nfunction ujb(a,b){var c;c=b;return !!Awb(a,c)}\nfunction czd(a,b){this.c=a;Pyd.call(this,a,b)}\nfunction fBb(a){this.c=a;nvb.call(this,rie,0)}\nfunction Avb(a,b){Bvb.call(this,a,a.length,b)}\nfunction aId(a,b,c){return BD(a.c,69).lk(b,c)}\nfunction bId(a,b,c){return BD(a.c,69).mk(b,c)}\nfunction O2d(a,b,c){return N2d(a,BD(b,332),c)}\nfunction Q2d(a,b,c){return P2d(a,BD(b,332),c)}\nfunction i3d(a,b,c){return h3d(a,BD(b,332),c)}\nfunction k3d(a,b,c){return j3d(a,BD(b,332),c)}\nfunction tn(a,b){return b==null?null:Hv(a.b,b)}\nfunction Kcb(a){return LD(a)?(uCb(a),a):a.ke()}\nfunction Ldb(a){return !isNaN(a)&&!isFinite(a)}\nfunction Wn(a){Ql();this.a=(mmb(),new zob(a))}\nfunction dIc(a){FHc();this.d=a;this.a=new jkb}\nfunction xqb(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction Nrb(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction $sb(a,b,c){this.d=a;this.b=c;this.a=b}\nfunction Qsb(a){Csb(this);Osb(this);ye(this,a)}\nfunction Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())}\nfunction Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null}\nfunction iyb(a){this.a=a;Zfb();Cbb(Date.now())}\nfunction JCb(){JCb=ccb;GCb=new nb;ICb=new nb}\nfunction ntb(){ntb=ccb;ltb=new otb;mtb=new qtb}\nfunction kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)}\nfunction tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)}\nfunction $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)}\nfunction Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))}\nfunction pxb(a){lxb();return es((zxb(),yxb),a)}\nfunction Hyb(a){Fyb();return es((Kyb(),Jyb),a)}\nfunction OEb(a){MEb();return es((REb(),QEb),a)}\nfunction WEb(a){UEb();return es((ZEb(),YEb),a)}\nfunction tFb(a){rFb();return es((wFb(),vFb),a)}\nfunction iHb(a){gHb();return es((lHb(),kHb),a)}\nfunction PHb(a){NHb();return es((SHb(),RHb),a)}\nfunction GIb(a){EIb();return es((JIb(),IIb),a)}\nfunction vJb(a){qJb();return es((yJb(),xJb),a)}\nfunction xLb(a){vLb();return es((ALb(),zLb),a)}\nfunction TMb(a){RMb();return es((WMb(),VMb),a)}\nfunction TOb(a){ROb();return es((WOb(),VOb),a)}\nfunction ePb(a){cPb();return es((hPb(),gPb),a)}\nfunction ZRb(a){XRb();return es((aSb(),_Rb),a)}\nfunction ATb(a){yTb();return es((DTb(),CTb),a)}\nfunction sUb(a){qUb();return es((vUb(),uUb),a)}\nfunction rWb(a){lWb();return es((uWb(),tWb),a)}\nfunction TXb(a){RXb();return es((WXb(),VXb),a)}\nfunction Mb(a,b){if(!a){throw vbb(new Wdb(b))}}\nfunction l0b(a){j0b();return es((o0b(),n0b),a)}\nfunction r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)}\nfunction K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)}\nfunction mKb(a,b,c){this.b=a;this.c=b;this.a=c}\nfunction BZb(a,b,c){this.b=a;this.a=b;this.c=c}\nfunction TNb(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction uOb(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction S3b(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction Z6b(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction n9b(a,b,c){this.b=a;this.a=b;this.c=c}\nfunction x$b(a,b,c){this.e=b;this.b=a;this.d=c}\nfunction $Ab(a,b,c){EAb();a.a.Od(b,c);return b}\nfunction LGb(a){var b;b=new KGb;b.e=a;return b}\nfunction iLb(a){var b;b=new fLb;b.b=a;return b}\nfunction D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b}\nfunction Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc}\nfunction jbc(a){gbc();return es((mbc(),lbc),a)}\nfunction Cjc(a){Ajc();return es((Fjc(),Ejc),a)}\nfunction Clc(a){Alc();return es((Flc(),Elc),a)}\nfunction Cpc(a){Apc();return es((Fpc(),Epc),a)}\nfunction Kpc(a){Ipc();return es((Npc(),Mpc),a)}\nfunction Wpc(a){Rpc();return es((Zpc(),Ypc),a)}\nfunction $jc(a){Xjc();return es((bkc(),akc),a)}\nfunction Hkc(a){Fkc();return es((Kkc(),Jkc),a)}\nfunction dqc(a){bqc();return es((gqc(),fqc),a)}\nfunction rqc(a){mqc();return es((uqc(),tqc),a)}\nfunction zqc(a){xqc();return es((Cqc(),Bqc),a)}\nfunction Iqc(a){Gqc();return es((Lqc(),Kqc),a)}\nfunction Vqc(a){Sqc();return es((Yqc(),Xqc),a)}\nfunction brc(a){_qc();return es((erc(),drc),a)}\nfunction nrc(a){lrc();return es((qrc(),prc),a)}\nfunction Arc(a){yrc();return es((Drc(),Crc),a)}\nfunction Qrc(a){Orc();return es((Trc(),Src),a)}\nfunction Zrc(a){Xrc();return es((asc(),_rc),a)}\nfunction gsc(a){esc();return es((jsc(),isc),a)}\nfunction osc(a){msc();return es((rsc(),qsc),a)}\nfunction Etc(a){Ctc();return es((Htc(),Gtc),a)}\nfunction qzc(a){lzc();return es((tzc(),szc),a)}\nfunction Azc(a){xzc();return es((Dzc(),Czc),a)}\nfunction Mzc(a){Izc();return es((Pzc(),Ozc),a)}\nfunction MAc(a){KAc();return es((PAc(),OAc),a)}\nfunction mAc(a){kAc();return es((pAc(),oAc),a)}\nfunction vAc(a){tAc();return es((yAc(),xAc),a)}\nfunction DAc(a){BAc();return es((GAc(),FAc),a)}\nfunction VAc(a){TAc();return es((YAc(),XAc),a)}\nfunction $zc(a){Vzc();return es((bAc(),aAc),a)}\nfunction bBc(a){_Ac();return es((eBc(),dBc),a)}\nfunction vBc(a){tBc();return es((yBc(),xBc),a)}\nfunction EBc(a){CBc();return es((HBc(),GBc),a)}\nfunction NBc(a){LBc();return es((QBc(),PBc),a)}\nfunction tGc(a){rGc();return es((wGc(),vGc),a)}\nfunction WIc(a){UIc();return es((ZIc(),YIc),a)}\nfunction $Lc(a){YLc();return es((bMc(),aMc),a)}\nfunction gMc(a){eMc();return es((jMc(),iMc),a)}\nfunction JOc(a){HOc();return es((MOc(),LOc),a)}\nfunction HQc(a){FQc();return es((KQc(),JQc),a)}\nfunction DRc(a){yRc();return es((GRc(),FRc),a)}\nfunction tSc(a){qSc();return es((wSc(),vSc),a)}\nfunction UTc(a){STc();return es((XTc(),WTc),a)}\nfunction UUc(a){PUc();return es((XUc(),WUc),a)}\nfunction aUc(a){$Tc();return es((dUc(),cUc),a)}\nfunction wVc(a){tVc();return es((zVc(),yVc),a)}\nfunction iWc(a){fWc();return es((lWc(),kWc),a)}\nfunction sWc(a){pWc();return es((vWc(),uWc),a)}\nfunction lXc(a){iXc();return es((oXc(),nXc),a)}\nfunction vXc(a){sXc();return es((yXc(),xXc),a)}\nfunction BYc(a){zYc();return es((EYc(),DYc),a)}\nfunction m$c(a){k$c();return es((p$c(),o$c),a)}\nfunction $$c(a){Y$c();return es((b_c(),a_c),a)}\nfunction n_c(a){i_c();return es((q_c(),p_c),a)}\nfunction w_c(a){s_c();return es((z_c(),y_c),a)}\nfunction E_c(a){C_c();return es((H_c(),G_c),a)}\nfunction P_c(a){N_c();return es((S_c(),R_c),a)}\nfunction W0c(a){R0c();return es((Z0c(),Y0c),a)}\nfunction f1c(a){a1c();return es((i1c(),h1c),a)}\nfunction P5c(a){N5c();return es((S5c(),R5c),a)}\nfunction b6c(a){_5c();return es((e6c(),d6c),a)}\nfunction H7c(a){F7c();return es((K7c(),J7c),a)}\nfunction k8c(a){i8c();return es((n8c(),m8c),a)}\nfunction V8b(a){S8b();return es((Y8b(),X8b),a)}\nfunction A5b(a){y5b();return es((D5b(),C5b),a)}\nfunction jad(a){ead();return es((mad(),lad),a)}\nfunction sad(a){qad();return es((vad(),uad),a)}\nfunction Cad(a){Aad();return es((Fad(),Ead),a)}\nfunction Oad(a){Mad();return es((Rad(),Qad),a)}\nfunction jbd(a){hbd();return es((mbd(),lbd),a)}\nfunction ubd(a){rbd();return es((xbd(),wbd),a)}\nfunction Kbd(a){Hbd();return es((Nbd(),Mbd),a)}\nfunction Vbd(a){Tbd();return es((Ybd(),Xbd),a)}\nfunction hcd(a){dcd();return es((kcd(),jcd),a)}\nfunction vcd(a){rcd();return es((ycd(),xcd),a)}\nfunction vdd(a){tdd();return es((ydd(),xdd),a)}\nfunction Kdd(a){Idd();return es((Ndd(),Mdd),a)}\nfunction $cd(a){Ucd();return es((cdd(),bdd),a)}\nfunction Fed(a){Ded();return es((Ied(),Hed),a)}\nfunction rgd(a){pgd();return es((ugd(),tgd),a)}\nfunction Esd(a){Csd();return es((Hsd(),Gsd),a)}\nfunction Yoc(a,b){return (uCb(a),a)+(uCb(b),b)}\nfunction NNd(a,b){Zfb();return wtd(ZKd(a.a),b)}\nfunction SNd(a,b){Zfb();return wtd(ZKd(a.a),b)}\nfunction bPc(a,b){this.c=a;this.a=b;this.b=b-a}\nfunction nYc(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction L1c(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction T1c(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction Rrd(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction zCd(a,b,c){this.a=a;this.b=b;this.c=c}\nfunction IVd(a,b,c){this.e=a;this.a=b;this.c=c}\nfunction kWd(a,b,c){UVd();cWd.call(this,a,b,c)}\nfunction HXd(a,b,c){UVd();oXd.call(this,a,b,c)}\nfunction TXd(a,b,c){UVd();oXd.call(this,a,b,c)}\nfunction ZXd(a,b,c){UVd();oXd.call(this,a,b,c)}\nfunction JXd(a,b,c){UVd();HXd.call(this,a,b,c)}\nfunction LXd(a,b,c){UVd();HXd.call(this,a,b,c)}\nfunction NXd(a,b,c){UVd();LXd.call(this,a,b,c)}\nfunction VXd(a,b,c){UVd();TXd.call(this,a,b,c)}\nfunction _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)}\nfunction $j(a,b){Qb(a);Qb(b);return new _j(a,b)}\nfunction Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)}\nfunction Rq(a,b){Qb(a);Qb(b);return new ar(a,b)}\nfunction lr(a,b){Qb(a);Qb(b);return new zr(a,b)}\nfunction BD(a,b){CCb(a==null||AD(a,b));return a}\nfunction Nu(a){var b;b=new Rkb;fr(b,a);return b}\nfunction Ex(a){var b;b=new Tqb;fr(b,a);return b}\nfunction Hx(a){var b;b=new Gxb;Jq(b,a);return b}\nfunction Ru(a){var b;b=new Psb;Jq(b,a);return b}\nfunction YEc(a){!a.e&&(a.e=new Rkb);return a.e}\nfunction SMd(a){!a.c&&(a.c=new xYd);return a.c}\nfunction Ekb(a,b){a.c[a.c.length]=b;return true}\nfunction WA(a,b){this.c=a;this.b=b;this.a=false}\nfunction Gg(a){this.d=a;Dg(this);this.b=ed(a.d)}\nfunction pzb(){this.a=';,;';this.b='';this.c=''}\nfunction Bvb(a,b,c){qvb.call(this,b,c);this.a=a}\nfunction fAb(a,b,c){this.b=a;fvb.call(this,b,c)}\nfunction lsb(a,b,c){this.c=a;pjb.call(this,b,c)}\nfunction bCb(a,b,c){$Bb(c,0,a,b,c.length,false)}\nfunction HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e}\nfunction eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}}\nfunction v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e}\nfunction h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b}\nfunction k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c}\nfunction Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))}\nfunction rlc(a,b){return beb(D0b(a.d),D0b(b.d))}\nfunction uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d}\nfunction FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd}\nfunction DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))}\nfunction aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)}\nfunction C6c(a){return new f7c(a.c+a.b,a.d+a.a)}\nfunction Vmc(a,b){Imc();return beb(a.d.p,b.d.p)}\nfunction Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)}\nfunction Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)}\nfunction rCb(a,b){if(!a){throw vbb(new ucb(b))}}\nfunction mCb(a,b){if(!a){throw vbb(new Wdb(b))}}\nfunction dWb(a,b,c){cWb.call(this,a,b);this.b=c}\nfunction pMd(a,b,c){MLd.call(this,a,b);this.c=c}\nfunction Dnc(a,b,c){Cnc.call(this,b,c);this.d=a}\nfunction _Gd(a){$Gd();MGd.call(this);this.th(a)}\nfunction PNd(a,b,c){this.a=a;nNd.call(this,b,c)}\nfunction UNd(a,b,c){this.a=a;nNd.call(this,b,c)}\nfunction k2d(a,b,c){MLd.call(this,a,b);this.c=c}\nfunction y1d(){T0d();z1d.call(this,(yFd(),xFd))}\nfunction gFd(a){return a!=null&&!OEd(a,CEd,DEd)}\nfunction dFd(a,b){return (jFd(a)<<4|jFd(b))&aje}\nfunction ln(a,b){return Vm(),Wj(a,b),new iy(a,b)}\nfunction Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}}\nfunction Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)}\nfunction WUd(a,b){var c;c=a.c;VUd(a,b);return c}\nfunction Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a}\nfunction $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a}\nfunction G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e}\nfunction Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true}\nfunction jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null}\nfunction Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()}\nfunction Wq(a,b){this.b=a;this.a=b;ol.call(this)}\nfunction ar(a,b){this.a=a;this.b=b;ol.call(this)}\nfunction vvb(a,b){qvb.call(this,b,1040);this.a=a}\nfunction Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1}\nfunction WPb(a){QPb();return jtd(a)==Xod(ltd(a))}\nfunction XPb(a){QPb();return ltd(a)==Xod(jtd(a))}\nfunction iYb(a,b){return hYb(a,new cWb(b.a,b.b))}\nfunction NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c}\nfunction _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a}\nfunction YHb(a){var b;b=a.n;return a.e.b+b.d+b.a}\nfunction ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c}\nfunction zfe(a){wfe();++vfe;return new ige(0,a)}\nfunction o_b(a){if(a.a){return a.a}return JZb(a)}\nfunction CCb(a){if(!a){throw vbb(new Cdb(null))}}\nfunction X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))}\nfunction ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))}\nfunction oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)}\nfunction d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)}\nfunction sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)}\nfunction tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)}\nfunction xfd(a,b){return Ekb(a,new f7c(b.a,b.b))}\nfunction Bic(a,b){return a.c=b){throw vbb(new rcb)}}\nfunction Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b}\nfunction _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)}\nfunction n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)}\nfunction tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)}\nfunction D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)}\nfunction oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b}\nfunction bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b}\nfunction qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie}\nfunction gub(a){this.b=new Skb(11);this.a=(ipb(),a)}\nfunction Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)}\nfunction nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)}\nfunction Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)}\nfunction Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)}\nfunction jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)}\nfunction Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)}\nfunction nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)}\nfunction DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)}\nfunction cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d}\nfunction i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d}\nfunction x0d(a){Wud.call(this,a,false);this.a=false}\nfunction Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b}\nfunction px(a,b){im();ox.call(this,a,Dm(new amb(b)))}\nfunction Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)}\nfunction Efe(a,b){wfe();++vfe;return new Dge(6,a,b)}\nfunction nfb(a,b){return dfb(a.substr(0,b.length),b)}\nfunction Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)}\nfunction Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}}\nfunction Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c}\nfunction amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d}\nfunction xJc(a){var b;b=a;while(b.f){b=b.f}return b}\nfunction fkb(a){var b;b=bkb(a);sCb(b!=null);return b}\nfunction gkb(a){var b;b=ckb(a);sCb(b!=null);return b}\nfunction cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b}\nfunction Glb(a,b){var c;for(c=0;c0?$wnd.Math.log(a/b):-100}\nfunction ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0}\nfunction HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))}\nfunction iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()}\nfunction Olb(a,b){return avb(b,a.length),new vvb(a,b)}\nfunction Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b}\nfunction Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie}\nfunction rge(a,b){xfe.call(this,1);this.a=a;this.b=b}\nfunction Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a}\nfunction uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d}\nfunction ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)}\nfunction Flb(a,b,c){var d;for(d=0;d=a.g}\nfunction NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)}\nfunction Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)}\nfunction gCb(a,b){var c;c=console[a];c.call(console,b)}\nfunction Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))}\nfunction E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))}\nfunction oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c}\nfunction Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c}\nfunction dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c}\nfunction f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)}\nfunction z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd}\nfunction ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e}\nfunction usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)}\nfunction uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1}\nfunction U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)}\nfunction Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)}\nfunction Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)}\nfunction oAb(a){if(0>=a){return new yAb}return pAb(a-1)}\nfunction Nfe(a){if(!bfe)return false;return Qhb(bfe,a)}\nfunction Ehe(a){if(a)return a.dc();return !a.Kc().Ob()}\nfunction Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a}\nfunction LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a}\nfunction LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d}\nfunction uCb(a){if(a==null){throw vbb(new Geb)}return a}\nfunction Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}}\nfunction Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}}\nfunction Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)}\nfunction qlc(a,b){return beb(b.j.c.length,a.j.c.length)}\nfunction igd(a,b){a.c<0||a.b.b=0?a.Bh(c):vid(a,b)}\nfunction WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c}\nfunction Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e}\nfunction Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e}\nfunction Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f}\nfunction fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k}\nfunction cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j}\nfunction dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j}\nfunction AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b}\nfunction $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c}\nfunction pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c}\nfunction MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))}\nfunction Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)}\nfunction Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)}\nfunction Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)}\nfunction Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d}\nfunction $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d}\nfunction iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b}\nfunction cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)}\nfunction AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)}\nfunction T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)}\nfunction vfb(a){return String.fromCharCode.apply(null,a)}\nfunction Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)}\nfunction tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()}\nfunction d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))}\nfunction ix(a,b){ex();return new gx(new il(a),new Uk(b))}\nfunction Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))}\nfunction Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))}\nfunction hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d}\nfunction eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a}\nfunction gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b}\nfunction keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a}\nfunction wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)}\nfunction Gbc(a,b){return Bcb(),BD(b.b,19).ad&&++d;return d}\nfunction Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c}\nfunction Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c}\nfunction hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null}\nfunction JZb(a){var b;b=P2b(a);if(b){return b}return null}\nfunction Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b}\nfunction YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())}\nfunction ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))}\nfunction jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))}\nfunction wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)}\nfunction UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)}\nfunction pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)}\nfunction prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d}\nfunction ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d}\nfunction JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d}\nfunction ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d}\nfunction cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a}\nfunction jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a}\nfunction Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))}\nfunction ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)}\nfunction lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)}\nfunction tib(a){sCb(a.b=0&&dfb(a.substr(c,b.length),b)}\nfunction H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)}\nfunction Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)}\nfunction vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)}\nfunction $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])}\nfunction KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b}\nfunction cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b}\nfunction kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)}\nfunction nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)}\nfunction cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])}\nfunction crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])}\nfunction Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])}\nfunction Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])}\nfunction psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])}\nfunction EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])}\nfunction XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])}\nfunction KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])}\nfunction _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])}\nfunction hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])}\nfunction IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])}\nfunction bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])}\nfunction VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])}\nfunction VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])}\nfunction jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])}\nfunction g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])}\nfunction F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])}\nfunction PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])}\nfunction XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])}\nfunction $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])}\nfunction B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])}\nfunction lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)}\nfunction hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)}\nfunction Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)}\nfunction exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)}\nfunction pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a}\nfunction by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))}\nfunction bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))}\nfunction FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)}\nfunction YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)}\nfunction Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2}\nfunction Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c}\nfunction cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c}\nfunction aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true}\nfunction isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a}\nfunction $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)}\nfunction iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))}\nfunction tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)}\nfunction YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))}\nfunction Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)}\nfunction Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))}\nfunction QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0}\nfunction uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c}\nfunction Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)}\nfunction QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)}\nfunction Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d}\nfunction NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)}\nfunction zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)}\nfunction hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)}\nfunction g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c}\nfunction VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c}\nfunction b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c}\nfunction Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()}\nfunction ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)}\nfunction no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}}\nfunction Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b}\nfunction ecb(a){function b(){}\n;b.prototype=a||{};return new b}\nfunction dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false}\nfunction aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)}\nfunction tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]}\nfunction Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)}\nfunction mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)}\nfunction fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)}\nfunction Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)}\nfunction Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)}\nfunction Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)}\nfunction nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)}\nfunction Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)}\nfunction Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()}\nfunction t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a}\nfunction A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b}\nfunction Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0}\nfunction oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0}\nfunction BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)}\nfunction RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)}\nfunction eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)}\nfunction STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)}\nfunction evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)}\nfunction Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)}\nfunction _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)}\nfunction MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)}\nfunction ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)}\nfunction WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)}\nfunction rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))}\nfunction hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c}\nfunction aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)}\nfunction Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)}\nfunction FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)}\nfunction Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a}\nfunction bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a}\nfunction uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f}\nfunction vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f}\nfunction RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)}\nfunction QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)}\nfunction $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)}\nfunction F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)}\nfunction jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))}\nfunction qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))}\nfunction aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)}\nfunction IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))}\nfunction wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}}\nfunction Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null}\nfunction WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false}\nfunction qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))}\nfunction SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))}\nfunction ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))}\nfunction oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))}\nfunction aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))}\nfunction FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))}\nfunction ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))}\nfunction wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))}\nfunction fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))}\nfunction DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)}\nfunction W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a}\nfunction e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)}\nfunction BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)}\nfunction COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)}\nfunction D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b}\nfunction BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)}\nfunction cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)}\nfunction lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)}\nfunction T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)}\nfunction jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))}\nfunction XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c}\nfunction eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c}\nfunction yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c}\nfunction Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()}\nfunction UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)}\nfunction nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}}\nfunction Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b}\nfunction Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b}\nfunction Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)}\nfunction Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))}\nfunction tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}}\nfunction BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}}\nfunction Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b}\nfunction kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)}\nfunction A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))}\nfunction Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])}\nfunction jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])}\nfunction QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])}\nfunction HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])}\nfunction UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])}\nfunction BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])}\nfunction Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])}\nfunction Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])}\nfunction eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])}\nfunction Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])}\nfunction Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])}\nfunction hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])}\nfunction $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])}\nfunction NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])}\nfunction wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])}\nfunction WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])}\nfunction OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])}\nfunction wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])}\nfunction FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])}\nfunction uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])}\nfunction xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])}\nfunction tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])}\nfunction CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])}\nfunction wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])}\nfunction _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])}\nfunction kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])}\nfunction tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])}\nfunction o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)}\nfunction LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c}\nfunction tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)}\nfunction fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)}\nfunction av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)}\nfunction cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)}\nfunction Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje}\nfunction bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje}\nfunction Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a}\nfunction _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d}\nfunction mlb(a){sCb(a.ad?1:0}\nfunction bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a}\nfunction iSc(a,b){var c;c=a+'';while(c.length0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)}\nfunction wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)}\nfunction RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))}\nfunction cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))}\nfunction $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))}\nfunction XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))}\nfunction k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)}\nfunction l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)}\nfunction cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)}\nfunction kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))}\nfunction rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))}\nfunction Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)}\nfunction YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)}\nfunction o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)}\nfunction p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)}\nfunction i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d}\nfunction vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b}\nfunction H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a}\nfunction tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null}\nfunction Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true}\nfunction _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b}\nfunction Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a}\nfunction Tb(a,b,c){if(a<0||bc){throw vbb(new qcb(Kb(a,b,c)))}}\nfunction eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a}\nfunction xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}}\nfunction $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false}\nfunction dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false}\nfunction msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false}\nfunction qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false}\nfunction Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)}\nfunction tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b}\nfunction Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b}\nfunction Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b}\nfunction orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array}\nfunction Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))}\nfunction Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))}\nfunction m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)}\nfunction sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)}\nfunction SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)}\nfunction a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))}\nfunction _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))}\nfunction Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d}\nfunction Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d}\nfunction $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d}\nfunction _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d}\nfunction Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b}\nfunction Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}}\nfunction C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()}\nfunction j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1}\nfunction mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1}\nfunction jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c}\nfunction uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c}\nfunction msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)}\nfunction cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))}\nfunction z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))}\nfunction q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))}\nfunction Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))}\nfunction hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))}\nfunction yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])}\nfunction qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])}\nfunction UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])}\nfunction UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])}\nfunction sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])}\nfunction kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])}\nfunction Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)}\nfunction Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])}\nfunction okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))}\nfunction Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)}\nfunction Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)}\nfunction Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)}\nfunction _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)}\nfunction Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()}\nfunction ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null}\nfunction Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0}\nfunction Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c}\nfunction Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)}\nfunction Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)}\nfunction A2c(a,b){var c;for(c=a.j.c.length;c0&&$fb(a.g,0,b,0,a.i);return b}\nfunction qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)}\nfunction Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24}\nfunction axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24}\nfunction gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16}\nfunction Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16}\nfunction sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)}\nfunction nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a}\nfunction Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))}\nfunction VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))}\nfunction E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)}\nfunction L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)}\nfunction q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)}\nfunction JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32}\nfunction Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)}\nfunction kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)}\nfunction Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b}\nfunction Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a}\nfunction kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c}\nfunction R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)}\nfunction TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)}\nfunction mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)}\nfunction dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)}\nfunction dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}}\nfunction vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b}\nfunction pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}}\nfunction VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n}\nfunction Fqb(a){sCb(a.a=0&&a.a[c]===b[c];c--);return c<0}\nfunction Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0}\nfunction Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb}\nfunction Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b}\nfunction GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))}\nfunction Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))}\nfunction REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))}\nfunction ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))}\nfunction aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))}\nfunction D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))}\nfunction Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))}\nfunction erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))}\nfunction eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))}\nfunction GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))}\nfunction Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))}\nfunction rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))}\nfunction MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))}\nfunction ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))}\nfunction bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))}\nfunction jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))}\nfunction KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))}\nfunction dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))}\nfunction XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))}\nfunction XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))}\nfunction lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))}\nfunction i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))}\nfunction H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))}\nfunction UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)}\nfunction Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)}\nfunction Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)}\nfunction Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d}\nfunction zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d}\nfunction Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a}\nfunction reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}}\nfunction me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))}\nfunction Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b}\nfunction Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d}\nfunction lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)}\nfunction fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)}\nfunction FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)}\nfunction tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])}\nfunction _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])}\nfunction Dz(b){Az();return function(){return Ez(b,this,arguments);var a}}\nfunction sz(){if(Date.now){return Date.now()}return (new Date).getTime()}\nfunction OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i}\nfunction pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()}\nfunction ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g}\nfunction ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)}\nfunction PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)}\nfunction jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)}\nfunction rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c}\nfunction wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb}\nfunction oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false}\nfunction C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false}\nfunction zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c}\nfunction j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)}\nfunction Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)}\nfunction Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)}\nfunction $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t}\nfunction kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])}\nfunction Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])}\nfunction Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])}\nfunction Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])}\nfunction _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])}\nfunction sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])}\nfunction n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])}\nfunction _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])}\nfunction Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])}\nfunction T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)}\nfunction yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c}\nfunction zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false}\nfunction RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)}\nfunction uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d0?ihb(a,b):lhb(a,-b)}\nfunction Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)}\nfunction Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}}\nfunction Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b}\nfunction kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b}\nfunction hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)}\nfunction uHb(a,b,c,d){var e;for(e=0;eb){throw vbb(new qcb(Jb(a,b,'index')))}return a}\nfunction zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e}\nfunction _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)}\nfunction A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))}\nfunction Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)}\nfunction b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)}\nfunction kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb}\nfunction MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb}\nfunction Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)}\nfunction wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b}\nfunction CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b}\nfunction IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b}\nfunction BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)}\nfunction SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb}\nfunction g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')}\nfunction Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))}\nfunction HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)}\nfunction _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)}\nfunction C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)}\nfunction PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)}\nfunction KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()}\nfunction JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a}\nfunction poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null}\nfunction ODc(a,b){if(a.pb.p){return -1}return 0}\nfunction pvb(a,b){uCb(b);if(a.c=0,'Initial capacity must not be negative')}\nfunction lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))}\nfunction SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))}\nfunction JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))}\nfunction Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))}\nfunction DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))}\nfunction WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))}\nfunction Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))}\nfunction gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))}\nfunction Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))}\nfunction Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))}\nfunction jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))}\nfunction asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))}\nfunction Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))}\nfunction YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))}\nfunction yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))}\nfunction PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))}\nfunction QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))}\nfunction yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))}\nfunction HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))}\nfunction wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))}\nfunction zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))}\nfunction vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))}\nfunction EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))}\nfunction yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))}\nfunction b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))}\nfunction mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))}\nfunction vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))}\nfunction icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])}\nfunction ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)}\nfunction NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d}\nfunction yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a}\nfunction EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b}\nfunction FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c}\nfunction A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;dc||b=0?a._g(c,true,true):sid(a,b,true)}\nfunction s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))}\nfunction pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)}\nfunction IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)}\nfunction qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)}\nfunction ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b}\nfunction dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true}\nfunction vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)}\nfunction r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)}\nfunction p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)}\nfunction fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)}\nfunction UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)}\nfunction yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0}\nfunction MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}}\nfunction nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]}\nfunction pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c}\nfunction KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)}\nfunction Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c}\nfunction ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c}\nfunction Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)}\nfunction bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)}\nfunction hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)}\nfunction iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)}\nfunction nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)}\nfunction qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b}\nfunction Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)}\nfunction NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)}\nfunction lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb}\nfunction zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))}\nfunction uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))}\nfunction ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))}\nfunction WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))}\nfunction WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))}\nfunction GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))}\nfunction mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))}\nfunction oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))}\nfunction Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))}\nfunction Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))}\nfunction ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))}\nfunction xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))}\nfunction Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))}\nfunction Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))}\nfunction ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))}\nfunction A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)}\nfunction _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)}\nfunction eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))}\nfunction gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))}\nfunction PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a}\nfunction Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true}\nfunction Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null}\nfunction Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))}\nfunction Jkb(a,b,c){for(;c=0?fid(a,c,true,true):sid(a,b,true)}\nfunction vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)}\nfunction Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))}\nfunction Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))}\nfunction Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))}\nfunction Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))}\nfunction agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)}\nfunction S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)}\nfunction U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)}\nfunction INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)}\nfunction uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d}\nfunction Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}}\nfunction YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e}\nfunction fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c}\nfunction Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null}\nfunction UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)}\nfunction LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)}\nfunction tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)}\nfunction yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}}\nfunction oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije}\nfunction HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$}\nfunction dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b}\nfunction uA(a,b){while(b[0]=0){++b[0]}}\nfunction sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))}\nfunction vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d}\nfunction EA(a,b,c){var d,e;d=10;for(e=0;ea.a[d]&&(d=c)}return d}\nfunction fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c}\nfunction Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)}\nfunction nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}}\nfunction AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb}\nfunction UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)}\nfunction XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)}\nfunction xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)}\nfunction uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))}\nfunction bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))}\nfunction bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))}\nfunction Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))}\nfunction S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))}\nfunction S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))}\nfunction p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))}\nfunction vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))}\nfunction mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))}\nfunction Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))}\nfunction cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))}\nfunction _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c}\nfunction hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false}\nfunction ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false}\nfunction Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false}\nfunction Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)}\nfunction Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a=0&&b=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a}\nfunction sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()}\nfunction idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)}\nfunction Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)}\nfunction Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)}\nfunction u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))}\nfunction VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)}\nfunction mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a}\nfunction Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b}\nfunction bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e}\nfunction yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)}\nfunction zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)}\nfunction avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}}\nfunction Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b}\nfunction Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null}\nfunction VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)}\nfunction ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)}\nfunction xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}}\nfunction t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b}\nfunction ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))}\nfunction NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))}\nfunction iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))}\nfunction Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c}\nfunction ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false}\nfunction Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e0){a.a/=b;a.b/=b}return a}\nfunction bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}}\nfunction gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}}\nfunction qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])}\nfunction Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)}\nfunction Jmc(a){var b;for(b=0;b=14&&b<=16)));return a}\nfunction dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d}\nfunction TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)}\nfunction NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()}\nfunction ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)}\nfunction Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)}\nfunction Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)}\nfunction oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))}\nfunction o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))}\nfunction n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))}\nfunction K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))}\nfunction Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))}\nfunction Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))}\nfunction qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))}\nfunction tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))}\nfunction Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))}\nfunction wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))}\nfunction ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))}\nfunction Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))}\nfunction Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])}\nfunction vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))}\nfunction wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))}\nfunction hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))}\nfunction ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))}\nfunction cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))}\nfunction dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))}\nfunction eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))}\nfunction omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))}\nfunction imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))}\nfunction pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))}\nfunction qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))}\nfunction AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))}\nfunction DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))}\nfunction _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))}\nfunction izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)}\nfunction Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null}\nfunction ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c}\nfunction LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c}\nfunction Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a}\nfunction ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g}\nfunction rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c}\nfunction tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c}\nfunction BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c}\nfunction GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c}\nfunction xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c}\nfunction rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1}\nfunction pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e}\nfunction My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a}\nfunction n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c}\nfunction KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)}\nfunction bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)}\nfunction rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)}\nfunction ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)}\nfunction JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}}\nfunction $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a}\nfunction Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a}\nfunction Bt(a,b){var c,d;for(c=0,d=a.gc();c0){return BD(Ikb(c.a,d-1),10)}return null}\nfunction Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))}\nfunction kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))}\nfunction lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))}\nfunction Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))}\nfunction zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))}\nfunction UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))}\nfunction VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))}\nfunction Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))}\nfunction pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))}\nfunction PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))}\nfunction jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))}\nfunction Rdd(a,b){if(a.r>0&&a.c0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}}\nfunction dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)}\nfunction g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)}\nfunction _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))}\nfunction Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))}\nfunction pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)}\nfunction umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)}\nfunction aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(cb){b<<=1;return b>0?b:Iie}return b}\nfunction xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)}\nfunction T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}}\nfunction _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d}\nfunction IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}}\nfunction N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))}\nfunction DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))}\nfunction jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))}\nfunction _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))}\nfunction $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d>>31}d!=0&&(a[c]=d)}\nfunction rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}}\nfunction u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))}\nfunction Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}}\nfunction G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true}\nfunction sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e}\nfunction tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e}\nfunction Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b}\nfunction Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}}\nfunction $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}}\nfunction nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)}\nfunction oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)}\nfunction l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)}\nfunction Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)}\nfunction WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)}\nfunction m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.af&&b.b1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}}\nfunction kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)}\nfunction Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)}\nfunction Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)}\nfunction nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)}\nfunction bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)}\nfunction ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b}\nfunction btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}}\nfunction Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false}\nfunction kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()}\nfunction Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true}\nfunction Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a}\nfunction yac(a,b){var c,d;for(d=new olb(a.b);d.a=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)}\nfunction _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)}\nfunction bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0}\nfunction I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))}\nfunction $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;dd)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)}\nfunction xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a}\nfunction yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a}\nfunction TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c}\nfunction j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c}\nfunction Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f>=1);return b}}\nfunction $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}}\nfunction bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b}\nfunction EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c}\nfunction Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d}\nfunction djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}}\nfunction xVb(a){var b,c;for(c=new olb(a.a.b);c.ac&&(c=a[b])}return c}\nfunction SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d}\nfunction crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f}\nfunction j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e}\nfunction m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e}\nfunction Xb(a,b){var c;for(c=0;c1||b>=0&&a.b<3}\nfunction w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b}\nfunction qVb(a){var b,c;for(c=new olb(a.a.b);c.ad?1:0}\nfunction NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}}\nfunction d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}}\nfunction syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)}\nfunction mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))}\nfunction Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e}\nfunction Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1}\nfunction UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}}\nfunction nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c}\nfunction JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c}\nfunction Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false}\nfunction oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false}\nfunction Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g}\nfunction Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false}\nfunction Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false}\nfunction Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]}\nfunction Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb(\"The 'no null' constraint is violated\"))}return b}\nfunction $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)}\nfunction XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a}\nfunction b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}}\nfunction c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}}\nfunction Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)}\nfunction pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)}\nfunction pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)}\nfunction Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)}\nfunction nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)}\nfunction Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)}\nfunction tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)}\nfunction Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c}\nfunction o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)}\nfunction r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d}\nfunction $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null}\nfunction Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))}\nfunction Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)}\nfunction le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d}\nfunction AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}}\nfunction C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(bb){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}}\nfunction j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}}\nfunction vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.iRqe?a-c>Rqe:c-a>Rqe}\nfunction pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()}\nfunction qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()}\nfunction fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)}\nfunction xC(a){rC();throw vbb(new MB(\"Unexpected typeof result '\"+a+\"'; please report this bug to the GWT team\"))}\nfunction lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''}\nfunction F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)}\nfunction ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)}\nfunction xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)}\nfunction LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))}\nfunction VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b}\nfunction DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}}\nfunction yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()}\nfunction VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)}\nfunction wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.de){$Zc(b.q,e);d=c!=b.q.d}}return d}\nfunction PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c}\nfunction Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d}\nfunction Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)}\nfunction j7c(a,b){var c;for(c=0;c=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)}\nfunction BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f}\nfunction Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b}\nfunction A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}}\nfunction UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false}\nfunction JDc(a){var b,c;for(c=new olb(a.r);c.a=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e}\nfunction y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e}\nfunction sAd(a){var b,c,d,e;if(a!=null){for(c=0;c0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))}\nfunction $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))}\nfunction gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a}\nfunction u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b}\nfunction qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a}\nfunction Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c}\nfunction _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c}\nfunction vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d}\nfunction RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c}\nfunction STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c}\nfunction zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c}\nfunction o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d}\nfunction kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()}\nfunction vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a}\nfunction __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;dc){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}}\nfunction eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}}\nfunction Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f=d||b=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0}\nfunction QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a}\nfunction OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c}\nfunction BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))}\nfunction eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))}\nfunction LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))}\nfunction CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))}\nfunction fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))}\nfunction N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)}\nfunction meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)}\nfunction Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)}\nfunction L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false}\nfunction i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null}\nfunction l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null}\nfunction cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false}\nfunction vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)}\nfunction iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null}\nfunction $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+\"' is not a valid attribute\"))}\nfunction V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;db){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1}\nfunction f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)}\nfunction Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}}\nfunction vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}}\nfunction ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))}\nfunction dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))}\nfunction eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))}\nfunction fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))}\nfunction jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)}\nfunction jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null}\nfunction k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null}\nfunction n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)}\nfunction a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c}\nfunction rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}}\nfunction Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb(\"Stream already terminated, can't be modified or used\"))}}\nfunction Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a}\nfunction ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d}\nfunction ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f}\nfunction pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c}\nfunction hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null}\nfunction Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c}\nfunction Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje>1;a.k=c-1>>1}\nfunction Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke}\nfunction O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b}\nfunction aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63}\nfunction Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)}\nfunction Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e}\nfunction EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)}\nfunction LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a}\nfunction Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e}\nfunction efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))}\nfunction Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)}\nfunction Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)}\nfunction zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)}\nfunction Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)}\nfunction tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)}\nfunction Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b))}\nfunction yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)}\nfunction t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;fb&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}}\nfunction did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}}\nfunction xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}}\nfunction iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}}\nfunction GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}}\nfunction Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)}\nfunction Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)}\nfunction MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c}\nfunction VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)}\nfunction fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()}\nfunction Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)}\nfunction _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)}\nfunction OEd(a,b,c){var d,e;for(d=0,e=a.length;d=e){return b.c+c}}return b.c+b.b.gc()}\nfunction NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d}\nfunction Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b0&&this.b>0&&q$c(this.c,this.b,this.a)}\nfunction ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))}\nfunction I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}}\nfunction Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false}\nfunction Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}}\nfunction Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)}\nfunction gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}}\nfunction QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}}\nfunction b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}}\nfunction qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}}\nfunction ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb}\nfunction hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b}\nfunction bhb(a){var b,c,d;if(a>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true}\nfunction XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false}\nfunction s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}}\nfunction Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c=0;--d){b=c[d];for(e=0;e>1;this.k=b-1>>1}\nfunction r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)}\nfunction NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d}\nfunction xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))}\nfunction T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))}\nfunction xud(a,b){var c;if(a.i>0){if(b.lengtha.i&&NC(b,a.i,null);return b}\nfunction Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c}\nfunction HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c}\nfunction GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c}\nfunction _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}\nfunction Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b}\nfunction pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d}\nfunction Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false}\nfunction qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}}\nfunction AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null}\nfunction R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))}\nfunction Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f}\nfunction Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}}\nfunction Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e}\nfunction Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e}\nfunction Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e}\nfunction QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g}\nfunction hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))}\nfunction zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false}\nfunction wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true}\nfunction Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false}\nfunction Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error}\nfunction BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))>0}\nfunction DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<0}\nfunction CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:ab?1:Ny(isNaN(a),isNaN(b)))<=0}\nfunction ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;cWje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d}\nfunction fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null}\nfunction fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}}\nfunction uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))}\nfunction Igb(a,b){if(a.e>b.e){return 1}if(a.eb.d){return a.e}if(a.d=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1}\nfunction Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)}\nfunction ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c=f){hkb(a,b);return -1}else{ikb(a,b);return 1}}\nfunction lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(db.e){return 1}else if(a.fb.f){return 1}return tb(a)-tb(b)}\nfunction efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())}\nfunction x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)}\nfunction _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()}\nfunction a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()}\nfunction FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null}\nfunction HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c}\nfunction gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d0}else{return false}}\nfunction q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}}\nfunction ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}}\nfunction OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}}\nfunction TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}}\nfunction tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)}\nfunction xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))}\nfunction b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))}\nfunction dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)}\nfunction k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)}\nfunction _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}}\nfunction HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a=e)return e;for(b=b>0?b:0;bd&&NC(b,d,null);return b}\nfunction _lb(a,b){var c,d;d=a.a.length;b.lengthd&&NC(b,d,null);return b}\nfunction Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}}\nfunction P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d(\"Invalid hexBinary value: '\"+a+\"'\"))}return b}\nfunction ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)}\nfunction wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])}\nfunction vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))}\nfunction Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))}\nfunction N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)}\nfunction Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)}\nfunction UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1}\nfunction cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad}\nfunction kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}}\nfunction Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e}\nfunction c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d}\nfunction oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))}\nfunction mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)}\nfunction Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+\"'. \"+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}}\nfunction L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d(\"Invalid base64Binary value: '\"+a+\"'\"))}return b}\nfunction Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}}\nfunction Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}}\nfunction CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb}\nfunction NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}}\nfunction ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}}\nfunction JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}}\nfunction S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}}\nfunction zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)}\nfunction Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb(\"Can't get element \"+c))}else throw vbb(a)}}\nfunction Tgb(a,b){this.e=a;if(b=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}}\nfunction RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true}\nfunction ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true}\nfunction dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)}\nfunction CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.ac.b){return true}}}return false}\nfunction AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false}\nfunction jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a}\nfunction jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)}\nfunction fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)}\nfunction u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}}\nfunction H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}}\nfunction kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}}\nfunction Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e}\nfunction lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b=0)return e;if(a.Fk()){for(d=0;d=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)}\nfunction gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}}\nfunction mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)}\nfunction LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b}\nfunction qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)}\nfunction X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}}\nfunction tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}}\nfunction ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}}\nfunction tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}}\nfunction OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a1&&(f=GFb(a,b));return f}\nfunction dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f}\nfunction emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i}\nfunction zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b}\nfunction uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}}\nfunction m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null}\nfunction wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0}\nfunction b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a}\nfunction Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)}\nfunction Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)}\nfunction XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}}\nfunction HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false}\nfunction FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false}\nfunction QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false}\nfunction FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10}\nfunction Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}}\nfunction kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()}\nfunction jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c}\nfunction kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c}\nfunction mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)}\nfunction iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}}\nfunction V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e}\nfunction IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.af&&NC(b,f,null);return b}\nfunction Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c0&&(i+=e);j[k]=g;g+=h*(i+d)}}\nfunction Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b0?a.c:0);++e}a.b=d;a.d=f}\nfunction BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a0?a.g:0);++c}a.c=e;a.d=d}\nfunction AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c}\nfunction lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}}\nfunction mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}}\nfunction d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}}\nfunction e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}}\nfunction udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)}\nfunction ikc(a,b,c,d){var e,f;for(e=b;e0&&(e.b+=b);return e}\nfunction GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e}\nfunction d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\\n')}return []}\nfunction jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28}\nfunction _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d}\nfunction DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b}\nfunction P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))}\nfunction C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))}\nfunction Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e}\nfunction shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b}\nfunction Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}}\nfunction bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)}\nfunction Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true}\nfunction Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true}\nfunction Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0}\nfunction Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}}\nfunction End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d}\nfunction tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c}\nfunction UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.ac.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)}\nfunction p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb}\nfunction rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)}\nfunction $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb}\nfunction MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;eWje){return p6d(a,d)}if(d==a){return true}}}return false}\nfunction HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}}\nfunction LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}}\nfunction XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}}\nfunction V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0}\nfunction hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}}\nfunction v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)}\nfunction wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r}\nfunction yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d}\nfunction O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f}\nfunction fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))}\nfunction cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}}\nfunction vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a0?a.g:0);++c}b.b=d;b.e=e}\nfunction to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}}\nfunction cNb(a,b,c,d){var e,f,g,h;for(e=0;eg&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a}\nfunction ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd}\nfunction Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d}\nfunction qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd}\nfunction HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c}\nfunction nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie}\nfunction qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c}\nfunction eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c}\nfunction PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c}\nfunction ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)}\nfunction s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)}\nfunction qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}}\nfunction BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null}\nfunction t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a}\nfunction Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}}\nfunction Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}}\nfunction IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d}\nfunction T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}}\nfunction lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)}\nfunction FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d}\nfunction jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}}\nfunction Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)}\nfunction Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)}\nfunction Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)}\nfunction mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}}\nfunction Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)}\nfunction JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}}\nfunction Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;aOqe){return c}else e>-1.0E-6&&++c}return c}\nfunction PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))}\nfunction SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))}\nfunction E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)}\nfunction I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)}\nfunction qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0}\nfunction zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}}\nfunction Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}}\nfunction eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false}\nfunction h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c}\nfunction Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b}\nfunction mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f}\nfunction U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))}\nfunction Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)}\nfunction jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)}\nfunction KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a0&&ric(this,this.c-1,(Ucd(),zcd));this.c0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss}\nfunction tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)}\nfunction rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b}\nfunction HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))}\nfunction oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b}\nfunction pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)}\nfunction yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d}\nfunction zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}}\nfunction S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false}\nfunction kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}}\nfunction rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)}\nfunction tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.ac;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<=a.f){break}f.c[f.c.length]=c}return f}\nfunction sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;ef&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e}\nfunction MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0}\nfunction iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}}\nfunction j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c}\nfunction wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}}\nfunction bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}}\nfunction IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}}\nfunction Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)}\nfunction kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0}\nfunction cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true}\nfunction BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f=h}\nfunction Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}}\nfunction W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0}\nfunction X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0}\nfunction Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null}\nfunction ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true}\nfunction fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}}\nfunction lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)}\nfunction vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c}\nfunction qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)}\nfunction SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}}\nfunction IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}}\nfunction y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)}\nfunction RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d}\nfunction m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d}\nfunction Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)}\nfunction CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;cd&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}}\nfunction gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])}\nfunction omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}}\nfunction oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f}\nfunction oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;dwic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}}\nfunction XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.ah&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)}\nfunction sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g}\nfunction t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false}\nfunction ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)}\nfunction bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))}\nfunction yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}}\nfunction wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}}\nfunction pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f>22-b;e=a.h<>22-b}else if(b<44){c=0;d=a.l<>44-b}else{c=0;d=0;e=a.l<a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))}\nfunction jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)}\nfunction fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}}\nfunction ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a0&&WGc(a,c,b);return e}return TGc(a,b,c)}\nfunction MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}}\nfunction JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+11&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}}\nfunction cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}}\nfunction Q6c(a,b,c,d,e){if(dd&&(a.a=d);a.be&&(a.b=e);return a}\nfunction lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}}\nfunction mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g>>e|c[g+d+1]<>>e;++g}return f}\nfunction zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false}\nfunction mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)}\nfunction Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)}\nfunction ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a=c){K9b(a,b,d.p);return true}}return false}\nfunction Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' \"',b),a.a),'\"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a}\nfunction Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;gc){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))}\nfunction Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e0&&iCc(a,f,c))}}b.p=0}\nfunction p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f}\nfunction Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}}\nfunction aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c}\nfunction ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}}\nfunction QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}}\nfunction I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g1&&(b.c[b.c.length]=f,true)}}\nfunction TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}}\nfunction _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)}\nfunction H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++0){uu(this)}}this.b=b;this.a=null}\nfunction rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)}\nfunction FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d}\nfunction OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d}\nfunction cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.ac.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)}\nfunction aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))}\nfunction PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}}\nfunction Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}}\nfunction Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}}\nfunction q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b}\nfunction jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null}\nfunction YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c}\nfunction uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}}\nfunction RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)}\nfunction SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)}\nfunction Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f=0?BD(qud(d,f),56):null}\nfunction Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}}\nfunction Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}}\nfunction ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))}\nfunction QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f}\nfunction K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d}\nfunction Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}}\nfunction tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a=f){g.$b()}else{e=g.Kc();for(d=0;d0?zh():g<0&&Bw(a,b,-g);return true}else{return false}}\nfunction fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0}\nfunction gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0}\nfunction MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}}\nfunction NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c}\nfunction iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c}\nfunction TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a}\nfunction zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}}\nfunction mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f}\nfunction mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}}\nfunction LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}}\nfunction k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e=0&&f=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}}\nfunction BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a}\nfunction v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}}\nfunction rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e}\nfunction vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))}\nfunction fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e=0&&j>=0&&i=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}}\nfunction $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb}\nfunction BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}}\nfunction _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h}\nfunction ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)}\nfunction sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}}\nfunction wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}}\nfunction u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}}\nfunction KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)}\nfunction qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}}\nfunction oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}}\nfunction NRd(a){var b,c;if(a.f){while(a.n=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e}\nfunction m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))}\nfunction AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)}\nfunction IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}}\nfunction Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)}\nfunction olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0}\nfunction swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}}\nfunction D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))}\nfunction Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;bg){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true}\nfunction wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)}\nfunction DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)}\nfunction Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a}\nfunction l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb(\"Couldn't create new instance of property '\"+a.f+\"'. \"+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)}\nfunction aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f}\nfunction nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e>16)),15).Xc(f);if(h0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}}\nfunction N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)}\nfunction XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)}\nfunction Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d}\nfunction gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)}\nfunction Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c0&&(e=c);for(g=new olb(a.f.e);g.a0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))}\nfunction PIc(a,b){if(a.cb.c){return 1}else if(a.bb.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0}\nfunction aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e0}else if(e<0&&-e0}return false}\nfunction RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a>24}return g}\nfunction vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]}\nfunction qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true}\nfunction UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}}\nfunction PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h0&&++k}}++j}return k}\nfunction Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a}\nfunction TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a>24}return c}\nfunction lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e}\nfunction r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g=0){return e}else{f=1;for(h=new olb(b.j);h.a0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb}\nfunction n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\\\[\\\\]\\\\s,]+');for(f=i,g=0,h=f.length;g0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}}\nfunction Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}}\nfunction htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g}\nfunction Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<=2147483648&&(d-=Zje);return d}}\nfunction Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}}\nfunction l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\\\w+'),e=0,f=d.length;ea.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i}\nfunction lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc}\nfunction Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i0&&JPb(this,e)}}\nfunction IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null}\nfunction e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a=2}\nfunction gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true}\nfunction U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null}\nfunction ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}}\nfunction mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}}\nfunction AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}}\nfunction Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e}\nfunction r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f1||c>1){return 2}}if(b+c==1){return 2}return 0}\nfunction WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)}\nfunction yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}}\nfunction ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c}\nfunction AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))}\nfunction Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}}\nfunction UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j}\nfunction O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}}\nfunction _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1}\nfunction qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a1){for(e=new olb(a.a);e.a0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b3&&EA(a,0,b-3)}}\nfunction cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)}\nfunction lkc(a){var b,c;c=0;for(;c0){break}}if(c>0&&c0){break}}if(b>0&&c>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))}\nfunction npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))}\nfunction Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))}\nfunction VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null}\nfunction wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b}\nfunction IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d}\nfunction vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}}\nfunction jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}}\nfunction jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(ed.b.g&&(f.c[f.c.length]=d,true)}}return f}\nfunction k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)}\nfunction Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}}\nfunction aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}}\nfunction $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))}\nfunction uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}}\nfunction G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.af.a){return -1}else if(e.ai){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f}\nfunction rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))}\nfunction W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])}\nfunction Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)}\nfunction esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l}\nfunction ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))}\nfunction NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))}\nfunction Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)}\nfunction aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g}\nfunction o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}}\nfunction rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)}\nfunction Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c}\nfunction Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;fj){i=c;k=e;j=d}}b.a=k;b.c=i}\nfunction sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)}\nfunction AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a}\nfunction HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;hi-a.b&&hi-a.a&&h0&&++n}}}++m}return n}\nfunction hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)}\nfunction S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}}\nfunction Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}}\nfunction Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))}\nfunction q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}}\nfunction FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)}\nfunction hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)}\nfunction GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}}\nfunction Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+\"' has its layer constraint set to FIRST, but has at least one incoming edge that \"+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}}\nfunction vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b}\nfunction ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)}\nfunction Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}}\nfunction aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)}\nfunction vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c0&&a.a[c]<<32-b!=0){for(c=0;c=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}}\nfunction R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null}\nfunction Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)}\nfunction bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}}\nfunction AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)}\nfunction Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}}\nfunction inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k1){Xxd(e,e.i-1)}}return d}}\nfunction Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.aa.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c}\nfunction o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f}\nfunction Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}}\nfunction UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.ah.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i}\nfunction Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)}\nfunction gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e}\nfunction fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f}\nfunction zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false}\nfunction BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false}\nfunction DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l}\nfunction ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;dvre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e}\nfunction Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))}\nfunction jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of \"real\" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)}\nfunction hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje}\nfunction BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d}\nfunction xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true}\nfunction Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1}\nfunction Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c0){a.qj();if(b!=null){for(f=0;f>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}}\nfunction AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)}\nfunction rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)}\nfunction roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e}\nfunction VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)}\nfunction hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}}\nfunction Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))}\nfunction a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c}\nfunction wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb}\nfunction ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a0&&b=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f}\nfunction hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;ea.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c}\nfunction Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false}\nfunction iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:ef?1:Ny(isNaN(e),isNaN(f))}\nfunction YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}}\nfunction BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}}\nfunction N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' \"',b),d),'\"')}}else{Qfb(Qfb((b.a+=' \"',b),c),'\"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a}\nfunction opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' \"',b),d),'\"')}}else{Qfb(Qfb((b.a+=' \"',b),c),'\"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a}\nfunction h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e}\nfunction QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(ee.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e}\nfunction NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))}\nfunction Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h0){e=i.length;while(e>0&&i[e-1]==''){--e}e=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}}\nfunction _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a=0&&ic?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)}\nfunction Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a=0){h=bD(a,g);if(h){j<22?(i.l|=1<>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i}\nfunction TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;dc){throw vbb(new Oeb(Oje+a+'\"'))}return h}\nfunction dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)}\nfunction pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}}\nfunction B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))}\nfunction tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d}\nfunction LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;bm){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n}\nfunction kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)}\nfunction DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f1){for(d=new olb(e);d.ac.s&&hh){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}}\nfunction MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.ah){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}}\nfunction Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))}\nfunction W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)}\nfunction pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.ai+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c}\nfunction VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}}\nfunction FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}}\nfunction xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1}\nfunction mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.fb.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}}\nfunction Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}}\nfunction tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)}\nfunction Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}}\nfunction pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b}\nfunction _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b}\nfunction bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.bf*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l}\nfunction qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e0){for(g=0;g>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c}\nfunction f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.ac);return e}\nfunction XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e}\nfunction uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}}\nfunction _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)}\nfunction lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47}\nfunction FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)}\nfunction mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.af){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)}\nfunction vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}}\nfunction gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)}\nfunction WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a0);d.a.Xb(d.c=--d.b)}}}}\nfunction Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe}\nfunction S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb(\"Layout algorithm '\"),b),\"' not found for \");yfd(a,c);throw vbb(new y2c(c.a))}}}\nfunction hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h}\nfunction ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.aEdb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)}\nfunction odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a>>0,'0'+b.toString(16));d='\\\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d}\nfunction yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j}\nfunction YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false}\nfunction Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}}\nfunction YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)}\nfunction opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)}\nfunction MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;ee&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n}\nfunction y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}}\nfunction E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c}\nfunction Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e}\nfunction X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.aj&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e}\nfunction XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)}\nfunction q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)}\nfunction qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)}\nfunction pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]}\nfunction SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f}\nfunction rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;ib[m]&&md[i]&&aNb(a,i,m,false,true)}}}\nfunction lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}}\nfunction Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}}\nfunction DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))}\nfunction Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a}\nfunction v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}}\nfunction OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.ab.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.ab){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l}\nfunction OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a}\nfunction vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l}\nfunction C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;ha.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}}\nfunction rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)}\nfunction $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,\"Array types don't match\");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&bd;){NC(f,h,k[--b])}}else{for(h=d+e;d0&&$Bb(a,b,c,d,e,true)}\nfunction phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}\nfunction soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' \"',b),e),'\"')}}else{Qfb(Qfb((b.a+=' \"',b),d),'\"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a}\nfunction TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}}\nfunction Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;kk){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g}\nfunction TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}}\nfunction nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)}\nfunction Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.aa.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true}\nfunction thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j}\nfunction oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j}\nfunction V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n=a.b[e+1]){e+=2}else if(c0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.bv)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)}\nfunction Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a}\nfunction rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g}\nfunction npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null}\nfunction JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.dg.c&&f.c0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)}\nfunction o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}}\nfunction vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;da.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c}\nfunction eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)}\nfunction vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)}\nfunction nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;rq.a-p-k&&(r=q.a-p-k);h.n.a=b+r}}\nfunction ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(fh[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p}\nfunction Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+\"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. \"+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+\"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. \"+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}}\nfunction C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a0&&iCc(a,h,l)}for(e=new olb(l);e.a>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)}\nfunction F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.cb.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}}\nfunction XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;cOqe){f=b;g=0;while($wnd.Math.abs(b-f)0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}}\nfunction $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false}\nfunction l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}}\nfunction kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))}\nfunction AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.ag)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}}\nfunction o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}}\nfunction JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h}\nfunction jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}}\nfunction nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c}\nfunction Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e}\nfunction sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g}\nfunction NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g}\nfunction _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)}\nfunction BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))}\nfunction iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}}\nfunction nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))}\nfunction rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+11){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(iQie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)}\nfunction sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}}\nfunction Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.aa.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.aa.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)}\nfunction fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)}\nfunction xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))}\nfunction sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.ah}\nfunction k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}}\nfunction Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb(\"Invalid value: '\"+d+\"' for datatype :\"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)}\nfunction zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f=97&&d<=122||d>=65&&d<=90){for(g=f+1;g=j){throw vbb(new Wdb(\"Missing trailing '\"))}g+10&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.aJkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null}\nfunction wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)}\nfunction xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}}\nfunction wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a-1){for(f=new olb(h);f.a0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}}\nfunction QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c}\nfunction O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))}\nfunction zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)}\nfunction lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}}\nfunction y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a=0){i=null;h=new Bib(k.a,j+1);while(h.bg?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f}\nfunction z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p=0&&p=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}}\nfunction VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m}\nfunction d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}}\nfunction m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.ad.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}}\nfunction l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}}\nfunction oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.aQje||b.o==cMc&&k0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}}\nfunction _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}}\nfunction $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in \"Drawing free trees.\", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))}\nfunction LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)}\nfunction Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)}\nfunction Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'\"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'\"'))}for(e=0;e0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'\"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'\"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'\"'))}}return l}\nfunction Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g=0&&g0&&(BD(Mpb(a.b,b),124).a.b=c)}\nfunction b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)}\nfunction f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e}\nfunction cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)}\nfunction mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true}\nfunction z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}}\nfunction Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))}\nfunction fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.ah?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return eh?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1}\nfunction acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.bb.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}}\nfunction QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;ee+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(gw&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}}\nfunction SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}}\nfunction rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a}\nfunction iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)}\nfunction Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h}\nfunction yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;hB[i]&&(q=i);for(l=new olb(a.a.b);l.an){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(Fqme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)}\nfunction KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.ah){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p}\nfunction Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)}\nfunction bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l}\nfunction Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.aA.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false}\nfunction XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.aj&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)}\nfunction aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}}\nfunction fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a0||c.o==dMc&&e0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(gg?Anc(a,b,c):Anc(a,c,b);return eg?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return df?1:0}\nfunction u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k}\nfunction AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j=c}\nfunction ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}}\nfunction j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}}\nif(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}}\nfunction aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)}\nfunction f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.aj&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l}\nfunction fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.ap){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.ae){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}}\nfunction erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o=\"An edge must have a source node (edge id: '\"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q=\"The source port of an edge must be a port of the edge's source node (edge id: '\"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s=\"An edge must have a target node (edge id: '\"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u=\"The target port of an edge must be a port of the edge's target node (edge id: '\"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D}\nfunction DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g}\nfunction Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.ae.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.bf.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p}\nfunction WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)}\nfunction lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.aD.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}}\nfunction qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d=48&&b<=57){d=b-48;while(e=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f}\nfunction $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):Hw+p?(r=w+p):Iv-u&&qw-p&&rH+G?(B=H+G):vI+A?(C=I+A):wH-G&&BI-A&&Cc&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}}\nfunction Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc}\nfunction shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a}\nfunction z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k}\nfunction $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a0?G+1:1}for(g=new olb(w.g);g.a0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;ja.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)}\nfunction sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c}\nfunction aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d}\nfunction P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)}\nfunction gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h}\nfunction xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))}\nfunction fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.al){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.aSLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true}\nfunction X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p}\nfunction yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)}\nfunction Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true}\nfunction wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')}\nfunction jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc}\nfunction S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)}\nfunction KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;Jj.b&&(j.b=Z)}else if(U.i.c==bb){Zj.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u'?\":dfb(wue,a)?\"'(?<' or '(? toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{\"\\' \\t\\r\\n',nne=')]}\"\\' \\t\\r\\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne=\"Node '\",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse=\"Couldn't clone property '\",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite=\"The feature '\",jte=\"' is not a valid changeable feature\",kte='Expecting null',lte=\"' is not a valid feature\",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte=\"The datatype '\",ute=\"' is not a valid classifier\",vte=\"The value '\",wte={190:1,3:1,4:1},xte=\"The class '\",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte=\"An edge must have at least one source and one target (edge id: '\",$te=\"').\",_te='Referenced edge section does not exist: ',aue=\" (edge id: '\",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue=\"Passed edge is not 'simple'.\",jue='org.eclipse.elk.graph.util',kue=\"The 'no duplicates' constraint is violated\",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve=\"The value of type '\",Zve=\"' must be of type '\",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\\\i\\\\c*',Zwe='[\\\\i-[:]][\\\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\\\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='09\\u0660\\u0669\\u06F0\\u06F9\\u0966\\u096F\\u09E6\\u09EF\\u0A66\\u0A6F\\u0AE6\\u0AEF\\u0B66\\u0B6F\\u0BE7\\u0BEF\\u0C66\\u0C6F\\u0CE6\\u0CEF\\u0D66\\u0D6F\\u0E50\\u0E59\\u0ED0\\u0ED9\\u0F20\\u0F29',txe='AZaz\\xC0\\xD6\\xD8\\xF6\\xF8\\u0131\\u0134\\u013E\\u0141\\u0148\\u014A\\u017E\\u0180\\u01C3\\u01CD\\u01F0\\u01F4\\u01F5\\u01FA\\u0217\\u0250\\u02A8\\u02BB\\u02C1\\u0386\\u0386\\u0388\\u038A\\u038C\\u038C\\u038E\\u03A1\\u03A3\\u03CE\\u03D0\\u03D6\\u03DA\\u03DA\\u03DC\\u03DC\\u03DE\\u03DE\\u03E0\\u03E0\\u03E2\\u03F3\\u0401\\u040C\\u040E\\u044F\\u0451\\u045C\\u045E\\u0481\\u0490\\u04C4\\u04C7\\u04C8\\u04CB\\u04CC\\u04D0\\u04EB\\u04EE\\u04F5\\u04F8\\u04F9\\u0531\\u0556\\u0559\\u0559\\u0561\\u0586\\u05D0\\u05EA\\u05F0\\u05F2\\u0621\\u063A\\u0641\\u064A\\u0671\\u06B7\\u06BA\\u06BE\\u06C0\\u06CE\\u06D0\\u06D3\\u06D5\\u06D5\\u06E5\\u06E6\\u0905\\u0939\\u093D\\u093D\\u0958\\u0961\\u0985\\u098C\\u098F\\u0990\\u0993\\u09A8\\u09AA\\u09B0\\u09B2\\u09B2\\u09B6\\u09B9\\u09DC\\u09DD\\u09DF\\u09E1\\u09F0\\u09F1\\u0A05\\u0A0A\\u0A0F\\u0A10\\u0A13\\u0A28\\u0A2A\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59\\u0A5C\\u0A5E\\u0A5E\\u0A72\\u0A74\\u0A85\\u0A8B\\u0A8D\\u0A8D\\u0A8F\\u0A91\\u0A93\\u0AA8\\u0AAA\\u0AB0\\u0AB2\\u0AB3\\u0AB5\\u0AB9\\u0ABD\\u0ABD\\u0AE0\\u0AE0\\u0B05\\u0B0C\\u0B0F\\u0B10\\u0B13\\u0B28\\u0B2A\\u0B30\\u0B32\\u0B33\\u0B36\\u0B39\\u0B3D\\u0B3D\\u0B5C\\u0B5D\\u0B5F\\u0B61\\u0B85\\u0B8A\\u0B8E\\u0B90\\u0B92\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8\\u0BAA\\u0BAE\\u0BB5\\u0BB7\\u0BB9\\u0C05\\u0C0C\\u0C0E\\u0C10\\u0C12\\u0C28\\u0C2A\\u0C33\\u0C35\\u0C39\\u0C60\\u0C61\\u0C85\\u0C8C\\u0C8E\\u0C90\\u0C92\\u0CA8\\u0CAA\\u0CB3\\u0CB5\\u0CB9\\u0CDE\\u0CDE\\u0CE0\\u0CE1\\u0D05\\u0D0C\\u0D0E\\u0D10\\u0D12\\u0D28\\u0D2A\\u0D39\\u0D60\\u0D61\\u0E01\\u0E2E\\u0E30\\u0E30\\u0E32\\u0E33\\u0E40\\u0E45\\u0E81\\u0E82\\u0E84\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8A\\u0E8D\\u0E8D\\u0E94\\u0E97\\u0E99\\u0E9F\\u0EA1\\u0EA3\\u0EA5\\u0EA5\\u0EA7\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EAE\\u0EB0\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EBD\\u0EC0\\u0EC4\\u0F40\\u0F47\\u0F49\\u0F69\\u10A0\\u10C5\\u10D0\\u10F6\\u1100\\u1100\\u1102\\u1103\\u1105\\u1107\\u1109\\u1109\\u110B\\u110C\\u110E\\u1112\\u113C\\u113C\\u113E\\u113E\\u1140\\u1140\\u114C\\u114C\\u114E\\u114E\\u1150\\u1150\\u1154\\u1155\\u1159\\u1159\\u115F\\u1161\\u1163\\u1163\\u1165\\u1165\\u1167\\u1167\\u1169\\u1169\\u116D\\u116E\\u1172\\u1173\\u1175\\u1175\\u119E\\u119E\\u11A8\\u11A8\\u11AB\\u11AB\\u11AE\\u11AF\\u11B7\\u11B8\\u11BA\\u11BA\\u11BC\\u11C2\\u11EB\\u11EB\\u11F0\\u11F0\\u11F9\\u11F9\\u1E00\\u1E9B\\u1EA0\\u1EF9\\u1F00\\u1F15\\u1F18\\u1F1D\\u1F20\\u1F45\\u1F48\\u1F4D\\u1F50\\u1F57\\u1F59\\u1F59\\u1F5B\\u1F5B\\u1F5D\\u1F5D\\u1F5F\\u1F7D\\u1F80\\u1FB4\\u1FB6\\u1FBC\\u1FBE\\u1FBE\\u1FC2\\u1FC4\\u1FC6\\u1FCC\\u1FD0\\u1FD3\\u1FD6\\u1FDB\\u1FE0\\u1FEC\\u1FF2\\u1FF4\\u1FF6\\u1FFC\\u2126\\u2126\\u212A\\u212B\\u212E\\u212E\\u2180\\u2182\\u3007\\u3007\\u3021\\u3029\\u3041\\u3094\\u30A1\\u30FA\\u3105\\u312C\\u4E00\\u9FA5\\uAC00\\uD7A3',uxe='Private Use',vxe='ASSIGNED',wxe='\\x00\\x7F\\x80\\xFF\\u0100\\u017F\\u0180\\u024F\\u0250\\u02AF\\u02B0\\u02FF\\u0300\\u036F\\u0370\\u03FF\\u0400\\u04FF\\u0530\\u058F\\u0590\\u05FF\\u0600\\u06FF\\u0700\\u074F\\u0780\\u07BF\\u0900\\u097F\\u0980\\u09FF\\u0A00\\u0A7F\\u0A80\\u0AFF\\u0B00\\u0B7F\\u0B80\\u0BFF\\u0C00\\u0C7F\\u0C80\\u0CFF\\u0D00\\u0D7F\\u0D80\\u0DFF\\u0E00\\u0E7F\\u0E80\\u0EFF\\u0F00\\u0FFF\\u1000\\u109F\\u10A0\\u10FF\\u1100\\u11FF\\u1200\\u137F\\u13A0\\u13FF\\u1400\\u167F\\u1680\\u169F\\u16A0\\u16FF\\u1780\\u17FF\\u1800\\u18AF\\u1E00\\u1EFF\\u1F00\\u1FFF\\u2000\\u206F\\u2070\\u209F\\u20A0\\u20CF\\u20D0\\u20FF\\u2100\\u214F\\u2150\\u218F\\u2190\\u21FF\\u2200\\u22FF\\u2300\\u23FF\\u2400\\u243F\\u2440\\u245F\\u2460\\u24FF\\u2500\\u257F\\u2580\\u259F\\u25A0\\u25FF\\u2600\\u26FF\\u2700\\u27BF\\u2800\\u28FF\\u2E80\\u2EFF\\u2F00\\u2FDF\\u2FF0\\u2FFF\\u3000\\u303F\\u3040\\u309F\\u30A0\\u30FF\\u3100\\u312F\\u3130\\u318F\\u3190\\u319F\\u31A0\\u31BF\\u3200\\u32FF\\u3300\\u33FF\\u3400\\u4DB5\\u4E00\\u9FFF\\uA000\\uA48F\\uA490\\uA4CF\\uAC00\\uD7A3\\uE000\\uF8FF\\uF900\\uFAFF\\uFB00\\uFB4F\\uFB50\\uFDFF\\uFE20\\uFE2F\\uFE30\\uFE4F\\uFE50\\uFE6F\\uFE70\\uFEFE\\uFEFF\\uFEFF\\uFF00\\uFFEF',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,\"Can't add a queue to itself\");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.lengthb&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.ad.d.c||d.d.c==f.d.c&&d.d.b0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),\"Factor for repulsive forces in Eades' model.\"),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),\"Maximum number of performed iterations. Takes higher precedence than 'epsilon'.\"),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.an){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'Allow Non-Flow Ports To Switch Sides'),\"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed.\"),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'Port Sorting Strategy'),\"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes.\"),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'Layer Choice Constraint'),\"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine.\"),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'Upper Bound On Width [MinWidth Layerer]'),\"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected.\"),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),\"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected.\"),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'Semi-Interactive Crossing Minimization'),\"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints.\"),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'Position Choice Constraint'),\"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine.\"),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'Greedy Switch Activation Threshold'),\"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation.\"),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'Greedy Switch Crossing Minimization'),\"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used.\"),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),\"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges.\"),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'Favor Straight Edges Over Balancing'),\"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false.\"),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'BK Edge Straightening'),\"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments.\"),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'nodePlacement.networkSimplex'),'Node Flexibility'),\"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent.\"),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),\"Default value of the 'nodeFlexibility' option for the children of a hierarchical node.\"),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'Spacing Base Value'),\"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node.\"),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'Edge Node Between Layers Spacing'),\"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used.\"),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'Edge Edge Between Layer Spacing'),\"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer.\"),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'Node Node Between Layers Spacing'),\"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself.\"),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'Graph Wrapping Strategy'),\"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'.\"),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'Correction Factor for Wrapping'),\"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option.\"),1),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a');a0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.aqme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\\r|\\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}| |\\t|\\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'Bend Points'),\"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points.\"),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'Hierarchy Handling'),\"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`.\"),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'Padding'),\"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately.\"),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'Omit Node Micro Layout'),\"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout.\"),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),\"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position.\"),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),\"Label managers can shorten labels upon a layout algorithm's request.\"),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'Margins'),\"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels.\"),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'No Layout'),\"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node.\"),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'Scale Factor'),\"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set.\"),1),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'Animation Time Factor'),\"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'.\"),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),\"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated.\"),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'Edge Label Spacing'),\"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option.\"),2),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'Label Node Spacing'),\"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option.\"),5),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'Horizontal spacing between Label and Port'),\"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option.\"),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'Vertical spacing between Label and Port'),\"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option.\"),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),\"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent.\"),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),\"Hints for where node labels are to be placed; if empty, the node label's position is not modified.\"),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),\"Defines how ports on the northern side are placed, overriding the node's general port alignment.\"),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),\"Defines how ports on the southern side are placed, overriding the node's general port alignment.\"),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),\"Defines how ports on the western side are placed, overriding the node's general port alignment.\"),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),\"Defines how ports on the eastern side are placed, overriding the node's general port alignment.\"),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'Node Size Constraints'),\"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed.\"),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'Fixed Graph Size'),\"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so.\"),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'Inline Edge Labels'),\"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible.\"),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'Port Index'),\"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case.\"),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'Port Side'),\"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports.\"),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'Port Border Offset'),\"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border.\"),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),\"Decides on a placement method for port labels; if empty, the node label's position is not modified.\"),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),\"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE.\"),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'Activate Inside Self Loops'),\"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports.\"),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called \"hierarchies\", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the \"topology-shape-metrics\" approach by Batini, Nardelli and Tamassia \\'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;gc)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;cc)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.lengthd&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.lengthh&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;ah&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+\"'\"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+\"'\"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+\"'\"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+\"'\"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+\"'\"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+\" uri='\"+this.d+\"'\"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return ac*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\\\d';else if(this==sfe)c='\\\\w';else if(this==nfe)c='\\\\s';else{d=new Hfb;d.a+='[';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\\\D';else if(this==lfe)c='\\\\W';else if(this==kfe)c='\\\\S';else{d=new Hfb;d.a+='[^';for(b=0;b0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\\\'+HD(this.a&aje);break;case 12:d='\\\\f';break;case 10:d='\\\\n';break;case 13:d='\\\\r';break;case 9:d='\\\\t';break;case 27:d='\\\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]);\n// -------------- RUN GWT INITIALIZATION CODE -------------- \ngwtOnLoad(null, 'elk', null);\n\n}).call(this)}).call(this,typeof __webpack_require__.g !== \"undefined\" ? __webpack_require__.g : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],3:[function(require,module,exports){\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/*******************************************************************************\n * Copyright (c) 2021 Kiel University and others.\n * This program and the accompanying materials are made available under the\n * terms of the Eclipse Public License 2.0 which is available at\n * http://www.eclipse.org/legal/epl-2.0.\n * \n * SPDX-License-Identifier: EPL-2.0\n *******************************************************************************/\nvar ELK = require('./elk-api.js').default;\n\nvar ELKNode = function (_ELK) {\n _inherits(ELKNode, _ELK);\n\n function ELKNode() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, ELKNode);\n\n var optionsClone = Object.assign({}, options);\n\n var workerThreadsExist = false;\n try {\n require.resolve('web-worker');\n workerThreadsExist = true;\n } catch (e) {}\n\n // user requested a worker\n if (options.workerUrl) {\n if (workerThreadsExist) {\n var Worker = require('web-worker');\n optionsClone.workerFactory = function (url) {\n return new Worker(url);\n };\n } else {\n console.warn('Web worker requested but \\'web-worker\\' package not installed. \\nConsider installing the package or pass your own \\'workerFactory\\' to ELK\\'s constructor.\\n... Falling back to non-web worker version.');\n }\n }\n\n // unless no other workerFactory is registered, use the fake worker\n if (!optionsClone.workerFactory) {\n var _require = require('./elk-worker.min.js'),\n _Worker = _require.Worker;\n\n optionsClone.workerFactory = function (url) {\n return new _Worker(url);\n };\n }\n\n return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone));\n }\n\n return ELKNode;\n}(ELK);\n\nObject.defineProperty(module.exports, \"__esModule\", {\n value: true\n});\nmodule.exports = ELKNode;\nELKNode.default = ELKNode;\n},{\"./elk-api.js\":1,\"./elk-worker.min.js\":2,\"web-worker\":4}],4:[function(require,module,exports){\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nmodule.exports = Worker;\n},{}]},{},[3])(3)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Vsa2pzL2xpYi9lbGsuYnVuZGxlZC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxhQUFhLEdBQUcsSUFBc0QsRUFBRSxtQkFBbUIsS0FBSyxVQUE0TixDQUFDLGFBQWEsMEJBQTBCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLFVBQVUsVUFBVSxNQUFNLFNBQW1DLENBQUMsZ0JBQWdCLE9BQUMsT0FBTyxvQkFBb0IsOENBQThDLGtDQUFrQyxZQUFZLFlBQVksbUNBQW1DLGlCQUFpQixlQUFlLHNCQUFzQixvQkFBb0IsVUFBVSxTQUFtQyxLQUFLLFdBQVcsWUFBWSxTQUFTLFNBQVMsS0FBSztBQUN4ekI7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELCtEQUErRCx5REFBeUQscUVBQXFFLDZEQUE2RCx3QkFBd0I7O0FBRWpqQixrREFBa0QsMENBQTBDOztBQUU1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUZBQXFGO0FBQ3JGO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFEO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZEO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFEO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDO0FBQ0QsQ0FBQyxHQUFHO0FBQ0osbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZ0JBQWdCO0FBQ2hCLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixjQUFjO0FBQ2Qsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2YsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7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QixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0IsU0FBUztBQUMzQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCLFNBQVM7QUFDM0Isa0JBQWtCO0FBQ2xCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQixTQUFTO0FBQzNCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCLE1BQU07QUFD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QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLE1BQU07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QXlCLHlCQUF5QiwwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLDBCQUEwQix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIsVUFBVSx5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5QixVQUFVLHlCQUF5QixVQUFVLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5QiwwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLFVBQVUseUJBQXlCLHlCQUF5Qiw2QkFBNkIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLFVBQVUseUJBQXlCLFVBQVUseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIsV0FBVywwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsV0FBVywwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsMEJBQTBCLFdBQVcsMEJBQTBCLDBCQUEwQixVQUFVLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5Qix5QkFBeUIseUJBQXlCLHlCQUF5QixXQUFXLDBCQUEwQjtBQUNwdUcsZ0JBQWdCLE1BQU0sY0FBYyxTQUFTLGNBQWMsd0JBQXdCLFdBQVcsZ0NBQWdDLG1CQUFtQix1Q0FBdUMsdUZBQXVGLHNG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LGFBQWEsWUFBWSxzQkFBc0Isc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQixjQUFjLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLGNBQWMsYUFBYSx1QkFBdUIsYUFBYSxjQUFjLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQixjQUFjLHVCQUF1Qix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsY0FBYyx1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLGNBQWMsdUJBQXVCLHVCQUF1Qix1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixjQUFjLGNBQWMsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1Qix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLGNBQWMsc0JBQXNCLHVCQUF1QixzQkFBc0IsY0FBYyxhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLGNBQWMsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1Qix1QkFBdUIsc0JBQXNCLHVCQUF1Qix1QkFBdUIsc0JBQXNCLGNBQWMsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLGNBQWMsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSxjQUFjLHNCQUFzQix1QkFBdUIsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSxjQUFjLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixjQUFjLGNBQWMsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixjQUFjLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsY0FBYyxjQUFjLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSxjQUFjLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsY0FBYyxzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsY0FBYyxhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixjQUFjLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsY0FBYyxjQUFjLHVCQUF1Qix1QkFBdUIsc0JBQXNCLHVCQUF1Qix1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLGNBQWMsc0JBQXNCLHVCQUF1QixhQUFhLGNBQWMsc0JBQXNCLGNBQWMsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLHVCQUF1QixhQUFhLGNBQWMsYUFBYSxjQUFjLHNCQUFzQix1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSxjQUFjLGNBQWMsdUJBQXVCLHVCQUF1QixhQUFhLHVCQUF1QixjQUFjLHNCQUFzQix1QkFBdUIsYUFBYSxjQUFjLGFBQWEsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLHNCQUFzQixjQUFjLGFBQWEsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLHVCQUF1Qix1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsY0FBYyxhQUFhLHVCQUF1QixzQkFBc0IsdUJBQXVCLGFBQWEsY0FBYyxzQkFBc0IsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0JBQXNCLGNBQWMsYUFBYSx1QkFBdUIsYUFBYSx1QkFBdUIsYUFBYSxjQUFjLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixjQUFjLGFBQWEsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLGNBQWMsYUFBYSxjQUFjLGFBQWEsY0FBYyxzQkFBc0IsdUJBQXVCLHNCQUFzQixjQUFjLHNCQUFz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b0Isa0JBQWtCLG9CQUFvQixrQkFBa0IscUJBQXFCLFNBQVMsT0FBTyxvQkFBb0IscURBQXFELG9CQUFvQixpQkFBaUIsb0JBQW9CLGVBQWUsb0JBQW9CLGlCQUFpQixvQkFBb0IseUJBQXlCLE1BQU0sTUFBTSxvREFBb0Qsb0JBQW9CLG9CQUFvQixxQkFBcUIsb0JBQW9CLG9CQUFvQixvQkFBb0Isb0JBQW9CLHFCQUFxQiwwREFBMEQsa0NBQWtDLDhCQUE4QixpREFBaUQsa0JBQWtCLDRCQUE0QixTQUFTO0FBQ3Z5NWpCO0FBQ0E7O0FBRUEsQ0FBQyxhQUFhLG1CQUFtQixxQkFBTSxtQkFBbUIscUJBQU0sbUZBQW1GO0FBQ25KLENBQUMsR0FBRztBQUNKOztBQUVBLGtEQUFrRCwwQ0FBMEM7O0FBRTVGLGtEQUFrRCxhQUFhLHlGQUF5Rjs7QUFFeEosMkNBQTJDLCtEQUErRCx1R0FBdUcseUVBQXlFLGVBQWUsMEVBQTBFLEdBQUc7O0FBRXRYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUMsRUFBRSx3REFBd0Q7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQ1QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZWxranMvbGliL2Vsay5idW5kbGVkLmpzP2Y4M2MiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09XCJvYmplY3RcIiYmdHlwZW9mIG1vZHVsZSE9PVwidW5kZWZpbmVkXCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT1cInVuZGVmaW5lZFwiKXtnPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT1cInVuZGVmaW5lZFwiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09XCJ1bmRlZmluZWRcIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcuRUxLID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgS2llbCBVbml2ZXJzaXR5IGFuZCBvdGhlcnMuXG4gKiBcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLyBcbiAqIFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xudmFyIEVMSyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRUxLKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgIF9yZWYkZGVmYXVsdExheW91dE9wdCA9IF9yZWYuZGVmYXVsdExheW91dE9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRMYXlvdXRPcHRpb25zID0gX3JlZiRkZWZhdWx0TGF5b3V0T3B0ID09PSB1bmRlZmluZWQgPyB7fSA6IF9yZWYkZGVmYXVsdExheW91dE9wdCxcbiAgICAgICAgX3JlZiRhbGdvcml0aG1zID0gX3JlZi5hbGdvcml0aG1zLFxuICAgICAgICBhbGdvcml0aG1zID0gX3JlZiRhbGdvcml0aG1zID09PSB1bmRlZmluZWQgPyBbJ2xheWVyZWQnLCAnc3RyZXNzJywgJ21ydHJlZScsICdyYWRpYWwnLCAnZm9yY2UnLCAnZGlzY28nLCAnc3BvcmVPdmVybGFwJywgJ3Nwb3JlQ29tcGFjdGlvbicsICdyZWN0cGFja2luZyddIDogX3JlZiRhbGdvcml0aG1zLFxuICAgICAgICB3b3JrZXJGYWN0b3J5ID0gX3JlZi53b3JrZXJGYWN0b3J5LFxuICAgICAgICB3b3JrZXJVcmwgPSBfcmVmLndvcmtlclVybDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFTEspO1xuXG4gICAgdGhpcy5kZWZhdWx0TGF5b3V0T3B0aW9ucyA9IGRlZmF1bHRMYXlvdXRPcHRpb25zO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIGNoZWNrIHZhbGlkIHdvcmtlciBjb25zdHJ1Y3Rpb24gcG9zc2libGVcbiAgICBpZiAodHlwZW9mIHdvcmtlclVybCA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdvcmtlckZhY3RvcnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy5cIik7XG4gICAgfVxuICAgIHZhciBmYWN0b3J5ID0gd29ya2VyRmFjdG9yeTtcbiAgICBpZiAodHlwZW9mIHdvcmtlclVybCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdvcmtlckZhY3RvcnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyB1c2UgZGVmYXVsdCBXZWIgV29ya2VyXG4gICAgICBmYWN0b3J5ID0gZnVuY3Rpb24gZmFjdG9yeSh1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXIodXJsKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHRoZSB3b3JrZXJcbiAgICB2YXIgd29ya2VyID0gZmFjdG9yeSh3b3JrZXJVcmwpO1xuICAgIGlmICh0eXBlb2Ygd29ya2VyLnBvc3RNZXNzYWdlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JlYXRlZCB3b3JrZXIgZG9lcyBub3QgcHJvdmlkZVwiICsgXCIgdGhlIHJlcXVpcmVkICdwb3N0TWVzc2FnZScgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIC8vIHdyYXAgdGhlIHdvcmtlciB0byByZXR1cm4gcHJvbWlzZXNcbiAgICB0aGlzLndvcmtlciA9IG5ldyBQcm9taXNlZFdvcmtlcih3b3JrZXIpO1xuXG4gICAgLy8gaW5pdGlhbGx5IHJlZ2lzdGVyIGFsZ29yaXRobXNcbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICBjbWQ6ICdyZWdpc3RlcicsXG4gICAgICBhbGdvcml0aG1zOiBhbGdvcml0aG1zXG4gICAgfSkudGhlbihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIF90aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9KS5jYXRjaChjb25zb2xlLmVycik7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRUxLLCBbe1xuICAgIGtleTogJ2xheW91dCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxheW91dChncmFwaCkge1xuICAgICAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICBfcmVmMiRsYXlvdXRPcHRpb25zID0gX3JlZjIubGF5b3V0T3B0aW9ucyxcbiAgICAgICAgICBsYXlvdXRPcHRpb25zID0gX3JlZjIkbGF5b3V0T3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdGhpcy5kZWZhdWx0TGF5b3V0T3B0aW9ucyA6IF9yZWYyJGxheW91dE9wdGlvbnMsXG4gICAgICAgICAgX3JlZjIkbG9nZ2luZyA9IF9yZWYyLmxvZ2dpbmcsXG4gICAgICAgICAgbG9nZ2luZyA9IF9yZWYyJGxvZ2dpbmcgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZjIkbG9nZ2luZyxcbiAgICAgICAgICBfcmVmMiRtZWFzdXJlRXhlY3V0aW8gPSBfcmVmMi5tZWFzdXJlRXhlY3V0aW9uVGltZSxcbiAgICAgICAgICBtZWFzdXJlRXhlY3V0aW9uVGltZSA9IF9yZWYyJG1lYXN1cmVFeGVjdXRpbyA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmMiRtZWFzdXJlRXhlY3V0aW87XG5cbiAgICAgIGlmICghZ3JhcGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IHBhcmFtZXRlciAnZ3JhcGgnLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBjbWQ6ICdsYXlvdXQnLFxuICAgICAgICBncmFwaDogZ3JhcGgsXG4gICAgICAgIGxheW91dE9wdGlvbnM6IGxheW91dE9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBsb2dnaW5nOiBsb2dnaW5nLFxuICAgICAgICAgIG1lYXN1cmVFeGVjdXRpb25UaW1lOiBtZWFzdXJlRXhlY3V0aW9uVGltZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdrbm93bkxheW91dEFsZ29yaXRobXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrbm93bkxheW91dEFsZ29yaXRobXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoeyBjbWQ6ICdhbGdvcml0aG1zJyB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdrbm93bkxheW91dE9wdGlvbnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrbm93bkxheW91dE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoeyBjbWQ6ICdvcHRpb25zJyB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdrbm93bkxheW91dENhdGVnb3JpZXMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrbm93bkxheW91dENhdGVnb3JpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoeyBjbWQ6ICdjYXRlZ29yaWVzJyB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0ZXJtaW5hdGVXb3JrZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0ZXJtaW5hdGVXb3JrZXIoKSB7XG4gICAgICB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRUxLO1xufSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBFTEs7XG5cbnZhciBQcm9taXNlZFdvcmtlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUHJvbWlzZWRXb3JrZXIod29ya2VyKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvbWlzZWRXb3JrZXIpO1xuXG4gICAgaWYgKHdvcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuXCIpO1xuICAgIH1cbiAgICB0aGlzLnJlc29sdmVycyA9IHt9O1xuICAgIHRoaXMud29ya2VyID0gd29ya2VyO1xuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChhbnN3ZXIpIHtcbiAgICAgIC8vIHdoeSBpcyB0aGlzIG5lY2Vzc2FyeT9cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucmVjZWl2ZShfdGhpczIsIGFuc3dlcik7XG4gICAgICB9LCAwKTtcbiAgICB9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFByb21pc2VkV29ya2VyLCBbe1xuICAgIGtleTogJ3Bvc3RNZXNzYWdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobXNnKSB7XG4gICAgICB2YXIgaWQgPSB0aGlzLmlkIHx8IDA7XG4gICAgICB0aGlzLmlkID0gaWQgKyAxO1xuICAgICAgbXNnLmlkID0gaWQ7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBwcmVwYXJlIHRoZSByZXNvbHZlclxuICAgICAgICBzZWxmLnJlc29sdmVyc1tpZF0gPSBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLmNvbnZlcnRHd3RTdHlsZUVycm9yKGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gcG9zdCB0aGUgbWVzc2FnZVxuICAgICAgICBzZWxmLndvcmtlci5wb3N0TWVzc2FnZShtc2cpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVjZWl2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlY2VpdmUoc2VsZiwgYW5zd2VyKSB7XG4gICAgICB2YXIganNvbiA9IGFuc3dlci5kYXRhO1xuICAgICAgdmFyIHJlc29sdmVyID0gc2VsZi5yZXNvbHZlcnNbanNvbi5pZF07XG4gICAgICBpZiAocmVzb2x2ZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGYucmVzb2x2ZXJzW2pzb24uaWRdO1xuICAgICAgICBpZiAoanNvbi5lcnJvcikge1xuICAgICAgICAgIHJlc29sdmVyKGpzb24uZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmVyKG51bGwsIGpzb24uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0ZXJtaW5hdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0ZXJtaW5hdGUoKSB7XG4gICAgICBpZiAodGhpcy53b3JrZXIudGVybWluYXRlKSB7XG4gICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbnZlcnRHd3RTdHlsZUVycm9yJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29udmVydEd3dFN0eWxlRXJyb3IoZXJyKSB7XG4gICAgICBpZiAoIWVycikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTb21ld2hhdCBmbGF0dGVuIHRoZSB3YXkgR1dUIHN0b3JlcyBuZXN0ZWQgZXhjZXB0aW9uKHMpXG4gICAgICB2YXIgamF2YUV4Y2VwdGlvbiA9IGVyclsnX19qYXZhJGV4Y2VwdGlvbiddO1xuICAgICAgaWYgKGphdmFFeGNlcHRpb24pIHtcbiAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBuZXN0ZWQgZXhjZXB0aW9uIGlzIGRpZmZlcmVudFxuICAgICAgICAvLyBpbiB0aGUgbm9uLW1pbmlmaWVkICgnY2F1c2UnKSBhbmQgdGhlIG1pbmlmaWVkIChub3QgZGV0ZXJtaW5pc3RpYykgdmVyc2lvbi5cbiAgICAgICAgLy8gSGVuY2UsIHRoZSB2ZXJzaW9uIGJlbG93IG9ubHkgd29ya3MgZm9yIHRoZSBub24tbWluaWZpZWQgdmVyc2lvbi5cbiAgICAgICAgLy8gSG93ZXZlciwgYXMgdGhlIG1pbmlmaWVkIHN0YWNrIHRyYWNlIGlzIG5vdCBvZiBtdWNoIHVzZSBhbnl3YXksIG9uZVxuICAgICAgICAvLyBzaG91bGQgc3dpdGNoIHRoZSB1c2VkIHZlcnNpb24gZm9yIGRlYnVnZ2luZyBpbiBzdWNoIGEgY2FzZS5cbiAgICAgICAgaWYgKGphdmFFeGNlcHRpb24uY2F1c2UgJiYgamF2YUV4Y2VwdGlvbi5jYXVzZS5iYWNraW5nSnNPYmplY3QpIHtcbiAgICAgICAgICBlcnIuY2F1c2UgPSBqYXZhRXhjZXB0aW9uLmNhdXNlLmJhY2tpbmdKc09iamVjdDtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRHd3RTdHlsZUVycm9yKGVyci5jYXVzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGVyclsnX19qYXZhJGV4Y2VwdGlvbiddO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQcm9taXNlZFdvcmtlcjtcbn0oKTtcbn0se31dLDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpeyhmdW5jdGlvbiAoKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0gICAgRkFLRSBFTEVNRU5UUyBHV1QgQVNTVU1FUyBFWElTVCAgIC0tLS0tLS0tLS0tLS0tIFxudmFyICR3bmQ7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgJHduZCA9IHdpbmRvd1xuZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgJHduZCA9IGdsb2JhbCAvLyBub2RlanNcbmVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJylcbiAgICAkd25kID0gc2VsZiAvLyB3ZWIgd29ya2VyXG5cbnZhciAkbW9kdWxlTmFtZSxcbiAgICAkbW9kdWxlQmFzZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0gICAgV09SS0FST1VORCBTVFJJQ1QgTU9ERSwgU0VFICMxMjcgICAgLS0tLS0tLS0tLS0tLS0gXG52YXIgZywgaSwgbztcblxuLy8gLS0tLS0tLS0tLS0tLS0gICAgR0VORVJBVEVEIENPREUgICAgLS0tLS0tLS0tLS0tLS0gXG5mdW5jdGlvbiBuYigpe31cbmZ1bmN0aW9uIHhiKCl7fVxuZnVuY3Rpb24gRmQoKXt9XG5mdW5jdGlvbiAkZygpe31cbmZ1bmN0aW9uIF9wKCl7fVxuZnVuY3Rpb24geXEoKXt9XG5mdW5jdGlvbiBTcSgpe31cbmZ1bmN0aW9uIEVzKCl7fVxuZnVuY3Rpb24gSncoKXt9XG5mdW5jdGlvbiBWdygpe31cbmZ1bmN0aW9uIFZBKCl7fVxuZnVuY3Rpb24gZEEoKXt9XG5mdW5jdGlvbiBNQSgpe31cbmZ1bmN0aW9uIFBBKCl7fVxuZnVuY3Rpb24gUEIoKXt9XG5mdW5jdGlvbiBieCgpe31cbmZ1bmN0aW9uIGN4KCl7fVxuZnVuY3Rpb24gdnkoKXt9XG5mdW5jdGlvbiBOeigpe31cbmZ1bmN0aW9uIFl6KCl7fVxuZnVuY3Rpb24gWWxiKCl7fVxuZnVuY3Rpb24gWW1iKCl7fVxuZnVuY3Rpb24geG1iKCl7fVxuZnVuY3Rpb24gRm1iKCl7fVxuZnVuY3Rpb24gUW1iKCl7fVxuZnVuY3Rpb24gZ2NiKCl7fVxuZnVuY3Rpb24gY2NiKCl7fVxuZnVuY3Rpb24gamNiKCl7fVxuZnVuY3Rpb24ganRiKCl7fVxuZnVuY3Rpb24gb3RiKCl7fVxuZnVuY3Rpb24gcXRiKCl7fVxuZnVuY3Rpb24gX2ZiKCl7fVxuZnVuY3Rpb24gYnBiKCl7fVxuZnVuY3Rpb24ga3BiKCl7fVxuZnVuY3Rpb24gcHBiKCl7fVxuZnVuY3Rpb24gR3BiKCl7fVxuZnVuY3Rpb24gZHJiKCl7fVxuZnVuY3Rpb24gZHpiKCl7fVxuZnVuY3Rpb24gZnpiKCl7fVxuZnVuY3Rpb24gZnhiKCl7fVxuZnVuY3Rpb24gVnhiKCl7fVxuZnVuY3Rpb24gT3ZiKCl7fVxuZnVuY3Rpb24gYnliKCl7fVxuZnVuY3Rpb24genliKCl7fVxuZnVuY3Rpb24gWnliKCl7fVxuZnVuY3Rpb24gX3liKCl7fVxuZnVuY3Rpb24gaHpiKCl7fVxuZnVuY3Rpb24ganpiKCl7fVxuZnVuY3Rpb24gbHpiKCl7fVxuZnVuY3Rpb24gbnpiKCl7fVxuZnVuY3Rpb24gcnpiKCl7fVxuZnVuY3Rpb24genpiKCl7fVxuZnVuY3Rpb24gQ3piKCl7fVxuZnVuY3Rpb24gRXpiKCl7fVxuZnVuY3Rpb24gR3piKCl7fVxuZnVuY3Rpb24gSXpiKCl7fVxuZnVuY3Rpb24gTXpiKCl7fVxuZnVuY3Rpb24gYkJiKCl7fVxuZnVuY3Rpb24gTkJiKCl7fVxuZnVuY3Rpb24gUEJiKCl7fVxuZnVuY3Rpb24gUkJiKCl7fVxuZnVuY3Rpb24gaUNiKCl7fVxuZnVuY3Rpb24gT0NiKCl7fVxuZnVuY3Rpb24gU0NiKCl7fVxuZnVuY3Rpb24gR0RiKCl7fVxuZnVuY3Rpb24gSkRiKCl7fVxuZnVuY3Rpb24gZkViKCl7fVxuZnVuY3Rpb24geEViKCl7fVxuZnVuY3Rpb24gQ0ViKCl7fVxuZnVuY3Rpb24gR0ViKCl7fVxuZnVuY3Rpb24geUZiKCl7fVxuZnVuY3Rpb24gS0diKCl7fVxuZnVuY3Rpb24gdEliKCl7fVxuZnVuY3Rpb24gdkliKCl7fVxuZnVuY3Rpb24geEliKCl7fVxuZnVuY3Rpb24gekliKCl7fVxuZnVuY3Rpb24gT0liKCl7fVxuZnVuY3Rpb24gU0liKCl7fVxuZnVuY3Rpb24gVEpiKCl7fVxuZnVuY3Rpb24gVkpiKCl7fVxuZnVuY3Rpb24gWEpiKCl7fVxuZnVuY3Rpb24gWEtiKCl7fVxuZnVuY3Rpb24gZktiKCl7fVxuZnVuY3Rpb24gVktiKCl7fVxuZnVuY3Rpb24gVkxiKCl7fVxuZnVuY3Rpb24gakxiKCl7fVxuZnVuY3Rpb24gbkxiKCl7fVxuZnVuY3Rpb24gR0xiKCl7fVxuZnVuY3Rpb24gS0xiKCl7fVxuZnVuY3Rpb24gTUxiKCl7fVxuZnVuY3Rpb24gT0xiKCl7fVxuZnVuY3Rpb24gUkxiKCl7fVxuZnVuY3Rpb24gWUxiKCl7fVxuZnVuY3Rpb24gYk1iKCl7fVxuZnVuY3Rpb24gZ01iKCl7fVxuZnVuY3Rpb24gbE1iKCl7fVxuZnVuY3Rpb24gcE1iKCl7fVxuZnVuY3Rpb24gd01iKCl7fVxuZnVuY3Rpb24gek1iKCl7fVxuZnVuY3Rpb24gQ01iKCl7fVxuZnVuY3Rpb24gRk1iKCl7fVxuZnVuY3Rpb24gTE1iKCl7fVxuZnVuY3Rpb24gek5iKCl7fVxuZnVuY3Rpb24gUE5iKCl7fVxuZnVuY3Rpb24ga09iKCl7fVxuZnVuY3Rpb24gcE9iKCl7fVxuZnVuY3Rpb24gdE9iKCl7fVxuZnVuY3Rpb24geU9iKCl7fVxuZnVuY3Rpb24gRk9iKCl7fVxuZnVuY3Rpb24gR1BiKCl7fVxuZnVuY3Rpb24gYVFiKCl7fVxuZnVuY3Rpb24gY1FiKCl7fVxuZnVuY3Rpb24gZVFiKCl7fVxuZnVuY3Rpb24gZ1FiKCl7fVxuZnVuY3Rpb24gaVFiKCl7fVxuZnVuY3Rpb24gQ1FiKCl7fVxuZnVuY3Rpb24gTVFiKCl7fVxuZnVuY3Rpb24gT1FiKCl7fVxuZnVuY3Rpb24gQVNiKCl7fVxuZnVuY3Rpb24gZlRiKCl7fVxuZnVuY3Rpb24ga1RiKCl7fVxuZnVuY3Rpb24gU1RiKCl7fVxuZnVuY3Rpb24gZlViKCl7fVxuZnVuY3Rpb24gRFViKCl7fVxuZnVuY3Rpb24gVlViKCl7fVxuZnVuY3Rpb24gWVViKCl7fVxuZnVuY3Rpb24gX1ViKCl7fVxuZnVuY3Rpb24gX1diKCl7fVxuZnVuY3Rpb24gUVdiKCl7fVxuZnVuY3Rpb24gWFdiKCl7fVxuZnVuY3Rpb24galZiKCl7fVxuZnVuY3Rpb24gRFZiKCl7fVxuZnVuY3Rpb24gVlZiKCl7fVxuZnVuY3Rpb24gJFZiKCl7fVxuZnVuY3Rpb24gZFhiKCl7fVxuZnVuY3Rpb24gaFhiKCl7fVxuZnVuY3Rpb24gbFhiKCl7fVxuZnVuY3Rpb24gZ1liKCl7fVxuZnVuY3Rpb24gSFliKCl7fVxuZnVuY3Rpb24gU1liKCl7fVxuZnVuY3Rpb24gVlliKCl7fVxuZnVuY3Rpb24gZFpiKCl7fVxuZnVuY3Rpb24gUCRiKCl7fVxuZnVuY3Rpb24gVCRiKCl7fVxuZnVuY3Rpb24gaDFiKCl7fVxuZnVuY3Rpb24gbTFiKCl7fVxuZnVuY3Rpb24gcTFiKCl7fVxuZnVuY3Rpb24gdTFiKCl7fVxuZnVuY3Rpb24geTFiKCl7fVxuZnVuY3Rpb24gQzFiKCl7fVxuZnVuY3Rpb24gZTJiKCl7fVxuZnVuY3Rpb24gZzJiKCl7fVxuZnVuY3Rpb24gbTJiKCl7fVxuZnVuY3Rpb24gcTJiKCl7fVxuZnVuY3Rpb24gdTJiKCl7fVxuZnVuY3Rpb24gUzJiKCl7fVxuZnVuY3Rpb24gVTJiKCl7fVxuZnVuY3Rpb24gVzJiKCl7fVxuZnVuY3Rpb24gXzJiKCl7fVxuZnVuY3Rpb24gZTNiKCl7fVxuZnVuY3Rpb24gaDNiKCl7fVxuZnVuY3Rpb24gcDNiKCl7fVxuZnVuY3Rpb24gdDNiKCl7fVxuZnVuY3Rpb24gdzNiKCl7fVxuZnVuY3Rpb24geTNiKCl7fVxuZnVuY3Rpb24gQTNiKCl7fVxuZnVuY3Rpb24gTTNiKCl7fVxuZnVuY3Rpb24gUTNiKCl7fVxuZnVuY3Rpb24gVTNiKCl7fVxuZnVuY3Rpb24gWTNiKCl7fVxuZnVuY3Rpb24gbDRiKCl7fVxuZnVuY3Rpb24gcTRiKCl7fVxuZnVuY3Rpb24gczRiKCl7fVxuZnVuY3Rpb24gdTRiKCl7fVxuZnVuY3Rpb24gdzRiKCl7fVxuZnVuY3Rpb24geTRiKCl7fVxuZnVuY3Rpb24gTDRiKCl7fVxuZnVuY3Rpb24gTjRiKCl7fVxuZnVuY3Rpb24gUDRiKCl7fVxuZnVuY3Rpb24gUjRiKCl7fVxuZnVuY3Rpb24gVDRiKCl7fVxuZnVuY3Rpb24gWDRiKCl7fVxuZnVuY3Rpb24gSTViKCl7fVxuZnVuY3Rpb24gUTViKCl7fVxuZnVuY3Rpb24gVDViKCl7fVxuZnVuY3Rpb24gWjViKCl7fVxuZnVuY3Rpb24gbDZiKCl7fVxuZnVuY3Rpb24gbzZiKCl7fVxuZnVuY3Rpb24gdDZiKCl7fVxuZnVuY3Rpb24gejZiKCl7fVxuZnVuY3Rpb24gTDZiKCl7fVxuZnVuY3Rpb24gTTZiKCl7fVxuZnVuY3Rpb24gUDZiKCl7fVxuZnVuY3Rpb24gWDZiKCl7fVxuZnVuY3Rpb24gJDZiKCl7fVxuZnVuY3Rpb24gYTdiKCl7fVxuZnVuY3Rpb24gYzdiKCl7fVxuZnVuY3Rpb24gZzdiKCl7fVxuZnVuY3Rpb24gajdiKCl7fVxuZnVuY3Rpb24gbTdiKCl7fVxuZnVuY3Rpb24gcjdiKCl7fVxuZnVuY3Rpb24geDdiKCl7fVxuZnVuY3Rpb24gRDdiKCl7fVxuZnVuY3Rpb24gRDliKCl7fVxuZnVuY3Rpb24gYjliKCl7fVxuZnVuY3Rpb24gaDliKCl7fVxuZnVuY3Rpb24gajliKCl7fVxuZnVuY3Rpb24gbDliKCl7fVxuZnVuY3Rpb24gdzliKCl7fVxuZnVuY3Rpb24gRjliKCl7fVxuZnVuY3Rpb24gaGFjKCl7fVxuZnVuY3Rpb24gamFjKCl7fVxuZnVuY3Rpb24gcGFjKCl7fVxuZnVuY3Rpb24gdWFjKCl7fVxuZnVuY3Rpb24gSWFjKCl7fVxuZnVuY3Rpb24gS2FjKCl7fVxuZnVuY3Rpb24gU2FjKCl7fVxuZnVuY3Rpb24gb2JjKCl7fVxuZnVuY3Rpb24gcmJjKCl7fVxuZnVuY3Rpb24gdmJjKCl7fVxuZnVuY3Rpb24gRmJjKCl7fVxuZnVuY3Rpb24gSmJjKCl7fVxuZnVuY3Rpb24gWGJjKCl7fVxuZnVuY3Rpb24gY2NjKCl7fVxuZnVuY3Rpb24gZmNjKCl7fVxuZnVuY3Rpb24gbGNjKCl7fVxuZnVuY3Rpb24gb2NjKCl7fVxuZnVuY3Rpb24gdGNjKCl7fVxuZnVuY3Rpb24geWNjKCl7fVxuZnVuY3Rpb24gQWNjKCl7fVxuZnVuY3Rpb24gQ2NjKCl7fVxuZnVuY3Rpb24gRWNjKCl7fVxuZnVuY3Rpb24gR2NjKCl7fVxuZnVuY3Rpb24gWmNjKCl7fVxuZnVuY3Rpb24gX2NjKCl7fVxuZnVuY3Rpb24gYmRjKCl7fVxuZnVuY3Rpb24gZmRjKCl7fVxuZnVuY3Rpb24gamRjKCl7fVxuZnVuY3Rpb24gcGRjKCl7fVxuZnVuY3Rpb24gc2RjKCl7fVxuZnVuY3Rpb24geWRjKCl7fVxuZnVuY3Rpb24gQWRjKCl7fVxuZnVuY3Rpb24gQ2RjKCl7fVxuZnVuY3Rpb24gRWRjKCl7fVxuZnVuY3Rpb24gSWRjKCl7fVxuZnVuY3Rpb24gTmRjKCl7fVxuZnVuY3Rpb24gUWRjKCl7fVxuZnVuY3Rpb24gU2RjKCl7fVxuZnVuY3Rpb24gVWRjKCl7fVxuZnVuY3Rpb24gV2RjKCl7fVxuZnVuY3Rpb24gWWRjKCl7fVxuZnVuY3Rpb24gYWVjKCl7fVxuZnVuY3Rpb24gaGVjKCl7fVxuZnVuY3Rpb24gamVjKCl7fVxuZnVuY3Rpb24gbGVjKCl7fVxuZnVuY3Rpb24gbmVjKCl7fVxuZnVuY3Rpb24gdWVjKCl7fVxuZnVuY3Rpb24gd2VjKCl7fVxuZnVuY3Rpb24geWVjKCl7fVxuZnVuY3Rpb24gQWVjKCl7fVxuZnVuY3Rpb24gRmVjKCl7fVxuZnVuY3Rpb24gSmVjKCl7fVxuZnVuY3Rpb24gTGVjKCl7fVxuZnVuY3Rpb24gTmVjKCl7fVxuZnVuY3Rpb24gUmVjKCl7fVxuZnVuY3Rpb24gVWVjKCl7fVxuZnVuY3Rpb24gWmVjKCl7fVxuZnVuY3Rpb24gWmZjKCl7fVxuZnVuY3Rpb24gbGZjKCl7fVxuZnVuY3Rpb24gdGZjKCl7fVxuZnVuY3Rpb24geGZjKCl7fVxuZnVuY3Rpb24gemZjKCl7fVxuZnVuY3Rpb24gRmZjKCl7fVxuZnVuY3Rpb24gSmZjKCl7fVxuZnVuY3Rpb24gTmZjKCl7fVxuZnVuY3Rpb24gUGZjKCl7fVxuZnVuY3Rpb24gVmZjKCl7fVxuZnVuY3Rpb24gX2ZjKCl7fVxuZnVuY3Rpb24gZmdjKCl7fVxuZnVuY3Rpb24gamdjKCl7fVxuZnVuY3Rpb24gbGdjKCl7fVxuZnVuY3Rpb24gQmdjKCl7fVxuZnVuY3Rpb24gZWhjKCl7fVxuZnVuY3Rpb24gZ2hjKCl7fVxuZnVuY3Rpb24gaWhjKCl7fVxuZnVuY3Rpb24ga2hjKCl7fVxuZnVuY3Rpb24gbWhjKCl7fVxuZnVuY3Rpb24gb2hjKCl7fVxuZnVuY3Rpb24gcWhjKCl7fVxuZnVuY3Rpb24geWhjKCl7fVxuZnVuY3Rpb24gQWhjKCl7fVxuZnVuY3Rpb24gR2hjKCl7fVxuZnVuY3Rpb24gSWhjKCl7fVxuZnVuY3Rpb24gS2hjKCl7fVxuZnVuY3Rpb24gTWhjKCl7fVxuZnVuY3Rpb24gU2hjKCl7fVxuZnVuY3Rpb24gVWhjKCl7fVxuZnVuY3Rpb24gV2hjKCl7fVxuZnVuY3Rpb24gZGljKCl7fVxuZnVuY3Rpb24gZGxjKCl7fVxuZnVuY3Rpb24gYmxjKCl7fVxuZnVuY3Rpb24gZmxjKCl7fVxuZnVuY3Rpb24gaGxjKCl7fVxuZnVuY3Rpb24gamxjKCl7fVxuZnVuY3Rpb24gR2xjKCl7fVxuZnVuY3Rpb24gSWxjKCl7fVxuZnVuY3Rpb24gS2xjKCl7fVxuZnVuY3Rpb24gTWxjKCl7fVxuZnVuY3Rpb24gTWpjKCl7fVxuZnVuY3Rpb24gUWpjKCl7fVxuZnVuY3Rpb24gUWxjKCl7fVxuZnVuY3Rpb24gVWxjKCl7fVxuZnVuY3Rpb24gWWxjKCl7fVxuZnVuY3Rpb24gTGtjKCl7fVxuZnVuY3Rpb24gTmtjKCl7fVxuZnVuY3Rpb24gUGtjKCl7fVxuZnVuY3Rpb24gUmtjKCl7fVxuZnVuY3Rpb24gWGtjKCl7fVxuZnVuY3Rpb24gX2tjKCl7fVxuZnVuY3Rpb24gZ21jKCl7fVxuZnVuY3Rpb24ga21jKCl7fVxuZnVuY3Rpb24gem1jKCl7fVxuZnVuY3Rpb24gRm1jKCl7fVxuZnVuY3Rpb24gV21jKCl7fVxuZnVuY3Rpb24gJG1jKCl7fVxuZnVuY3Rpb24gYW5jKCl7fVxuZnVuY3Rpb24gbW5jKCl7fVxuZnVuY3Rpb24gd25jKCl7fVxuZnVuY3Rpb24gSG5jKCl7fVxuZnVuY3Rpb24gSm5jKCl7fVxuZnVuY3Rpb24gTG5jKCl7fVxuZnVuY3Rpb24gTm5jKCl7fVxuZnVuY3Rpb24gUG5jKCl7fVxuZnVuY3Rpb24gWW5jKCl7fVxuZnVuY3Rpb24gZW9jKCl7fVxuZnVuY3Rpb24gQW9jKCl7fVxuZnVuY3Rpb24gQ29jKCl7fVxuZnVuY3Rpb24gRW9jKCl7fVxuZnVuY3Rpb24gSm9jKCl7fVxuZnVuY3Rpb24gTG9jKCl7fVxuZnVuY3Rpb24gWm9jKCl7fVxuZnVuY3Rpb24gX29jKCl7fVxuZnVuY3Rpb24gYnBjKCl7fVxuZnVuY3Rpb24gaHBjKCl7fVxuZnVuY3Rpb24ga3BjKCl7fVxuZnVuY3Rpb24gcHBjKCl7fVxuZnVuY3Rpb24gcEZjKCl7fVxuZnVuY3Rpb24gUnljKCl7fVxuZnVuY3Rpb24gUUNjKCl7fVxuZnVuY3Rpb24gUERjKCl7fVxuZnVuY3Rpb24geEdjKCl7fVxuZnVuY3Rpb24gSEdjKCl7fVxuZnVuY3Rpb24gSkdjKCl7fVxuZnVuY3Rpb24gTkdjKCl7fVxuZnVuY3Rpb24gR0ljKCl7fVxuZnVuY3Rpb24gaUtjKCl7fVxuZnVuY3Rpb24gbUtjKCl7fVxuZnVuY3Rpb24gd0tjKCl7fVxuZnVuY3Rpb24geUtjKCl7fVxuZnVuY3Rpb24gQUtjKCl7fVxuZnVuY3Rpb24gRUtjKCl7fVxuZnVuY3Rpb24gS0tjKCl7fVxuZnVuY3Rpb24gT0tjKCl7fVxuZnVuY3Rpb24gUUtjKCl7fVxuZnVuY3Rpb24gU0tjKCl7fVxuZnVuY3Rpb24gVUtjKCl7fVxuZnVuY3Rpb24gWUtjKCl7fVxuZnVuY3Rpb24gYUxjKCl7fVxuZnVuY3Rpb24gZkxjKCl7fVxuZnVuY3Rpb24gaExjKCl7fVxuZnVuY3Rpb24gbkxjKCl7fVxuZnVuY3Rpb24gcExjKCl7fVxuZnVuY3Rpb24gdExjKCl7fVxuZnVuY3Rpb24gdkxjKCl7fVxuZnVuY3Rpb24gekxjKCl7fVxuZnVuY3Rpb24gQkxjKCl7fVxuZnVuY3Rpb24gRExjKCl7fVxuZnVuY3Rpb24gRkxjKCl7fVxuZnVuY3Rpb24gc01jKCl7fVxuZnVuY3Rpb24gSk1jKCl7fVxuZnVuY3Rpb24gaE5jKCl7fVxuZnVuY3Rpb24gUk5jKCl7fVxuZnVuY3Rpb24gWk5jKCl7fVxuZnVuY3Rpb24gX05jKCl7fVxuZnVuY3Rpb24gYk9jKCl7fVxuZnVuY3Rpb24gZE9jKCl7fVxuZnVuY3Rpb24gZk9jKCl7fVxuZnVuY3Rpb24gaE9jKCl7fVxuZnVuY3Rpb24gaFJjKCl7fVxuZnVuY3Rpb24galJjKCl7fVxuZnVuY3Rpb24gS1JjKCl7fVxuZnVuY3Rpb24gTlJjKCl7fVxuZnVuY3Rpb24gTlFjKCl7fVxuZnVuY3Rpb24gTFFjKCl7fVxuZnVuY3Rpb24gX1FjKCl7fVxuZnVuY3Rpb24gY1BjKCl7fVxuZnVuY3Rpb24gaVBjKCl7fVxuZnVuY3Rpb24ga1BjKCl7fVxuZnVuY3Rpb24gbVBjKCl7fVxuZnVuY3Rpb24geFBjKCl7fVxuZnVuY3Rpb24gelBjKCl7fVxuZnVuY3Rpb24gelNjKCl7fVxuZnVuY3Rpb24gQlNjKCl7fVxuZnVuY3Rpb24gR1NjKCl7fVxuZnVuY3Rpb24gSVNjKCl7fVxuZnVuY3Rpb24gTlNjKCl7fVxuZnVuY3Rpb24gVFNjKCl7fVxuZnVuY3Rpb24gTlRjKCl7fVxuZnVuY3Rpb24gTlZjKCl7fVxuZnVuY3Rpb24gb1ZjKCl7fVxuZnVuY3Rpb24gU1ZjKCl7fVxuZnVuY3Rpb24gVlZjKCl7fVxuZnVuY3Rpb24gWFZjKCl7fVxuZnVuY3Rpb24gWlZjKCl7fVxuZnVuY3Rpb24gYldjKCl7fVxuZnVuY3Rpb24gYlhjKCl7fVxuZnVuY3Rpb24gQ1hjKCl7fVxuZnVuY3Rpb24gRlhjKCl7fVxuZnVuY3Rpb24gSVhjKCl7fVxuZnVuY3Rpb24gTVhjKCl7fVxuZnVuY3Rpb24gVVhjKCl7fVxuZnVuY3Rpb24gYlljKCl7fVxuZnVuY3Rpb24gZlljKCl7fVxuZnVuY3Rpb24gb1ljKCl7fVxuZnVuY3Rpb24gcVljKCl7fVxuZnVuY3Rpb24gdVljKCl7fVxuZnVuY3Rpb24gcFpjKCl7fVxuZnVuY3Rpb24gRyRjKCl7fVxuZnVuY3Rpb24gaDBjKCl7fVxuZnVuY3Rpb24gTjBjKCl7fVxuZnVuY3Rpb24gazFjKCl7fVxuZnVuY3Rpb24gSTFjKCl7fVxuZnVuY3Rpb24gUTFjKCl7fVxuZnVuY3Rpb24gZjJjKCl7fVxuZnVuY3Rpb24gaTJjKCl7fVxuZnVuY3Rpb24gazJjKCl7fVxuZnVuY3Rpb24gdzJjKCl7fVxuZnVuY3Rpb24gTzJjKCl7fVxuZnVuY3Rpb24gUzJjKCl7fVxuZnVuY3Rpb24gWjJjKCl7fVxuZnVuY3Rpb24gdjNjKCl7fVxuZnVuY3Rpb24geDNjKCl7fVxuZnVuY3Rpb24gUjNjKCl7fVxuZnVuY3Rpb24gVTNjKCl7fVxuZnVuY3Rpb24gZTRjKCl7fVxuZnVuY3Rpb24gdzRjKCl7fVxuZnVuY3Rpb24geDRjKCl7fVxuZnVuY3Rpb24gejRjKCl7fVxuZnVuY3Rpb24gQjRjKCl7fVxuZnVuY3Rpb24gRDRjKCl7fVxuZnVuY3Rpb24gRjRjKCl7fVxuZnVuY3Rpb24gSDRjKCl7fVxuZnVuY3Rpb24gSjRjKCl7fVxuZnVuY3Rpb24gTDRjKCl7fVxuZnVuY3Rpb24gTjRjKCl7fVxuZnVuY3Rpb24gUDRjKCl7fVxuZnVuY3Rpb24gUjRjKCl7fVxuZnVuY3Rpb24gVDRjKCl7fVxuZnVuY3Rpb24gVjRjKCl7fVxuZnVuY3Rpb24gWDRjKCl7fVxuZnVuY3Rpb24gWjRjKCl7fVxuZnVuY3Rpb24gXzRjKCl7fVxuZnVuY3Rpb24gXzdjKCl7fVxuZnVuY3Rpb24gYjVjKCl7fVxuZnVuY3Rpb24gZDVjKCl7fVxuZnVuY3Rpb24gZjVjKCl7fVxuZnVuY3Rpb24gaDVjKCl7fVxuZnVuY3Rpb24gSDVjKCl7fVxuZnVuY3Rpb24gSGZkKCl7fVxuZnVuY3Rpb24gWmZkKCl7fVxuZnVuY3Rpb24gWmVkKCl7fVxuZnVuY3Rpb24gZ2VkKCl7fVxuZnVuY3Rpb24gSmVkKCl7fVxuZnVuY3Rpb24gTmVkKCl7fVxuZnVuY3Rpb24gUmVkKCl7fVxuZnVuY3Rpb24gVmVkKCl7fVxuZnVuY3Rpb24gYmJkKCl7fVxuZnVuY3Rpb24gbWRkKCl7fVxuZnVuY3Rpb24gX2ZkKCl7fVxuZnVuY3Rpb24gZmdkKCl7fVxuZnVuY3Rpb24ga2dkKCl7fVxuZnVuY3Rpb24gTWdkKCl7fVxuZnVuY3Rpb24gQWhkKCl7fVxuZnVuY3Rpb24gQWxkKCl7fVxuZnVuY3Rpb24gVGxkKCl7fVxuZnVuY3Rpb24geGtkKCl7fVxuZnVuY3Rpb24gcm1kKCl7fVxuZnVuY3Rpb24ga25kKCl7fVxuZnVuY3Rpb24gSm9kKCl7fVxuZnVuY3Rpb24gSkNkKCl7fVxuZnVuY3Rpb24gQnBkKCl7fVxuZnVuY3Rpb24gQkZkKCl7fVxuZnVuY3Rpb24gb0ZkKCl7fVxuZnVuY3Rpb24gYnFkKCl7fVxuZnVuY3Rpb24gYnZkKCl7fVxuZnVuY3Rpb24ganZkKCl7fVxuZnVuY3Rpb24geXVkKCl7fVxuZnVuY3Rpb24gSHhkKCl7fVxuZnVuY3Rpb24gRUJkKCl7fVxuZnVuY3Rpb24gYURkKCl7fVxuZnVuY3Rpb24gTUdkKCl7fVxuZnVuY3Rpb24gdkhkKCl7fVxuZnVuY3Rpb24gUkhkKCl7fVxuZnVuY3Rpb24gd05kKCl7fVxuZnVuY3Rpb24gek5kKCl7fVxuZnVuY3Rpb24gQ05kKCl7fVxuZnVuY3Rpb24gS05kKCl7fVxuZnVuY3Rpb24gWE5kKCl7fVxuZnVuY3Rpb24gJE5kKCl7fVxuZnVuY3Rpb24gSFBkKCl7fVxuZnVuY3Rpb24gbFVkKCl7fVxuZnVuY3Rpb24gWFVkKCl7fVxuZnVuY3Rpb24gRFdkKCl7fVxuZnVuY3Rpb24gR1dkKCl7fVxuZnVuY3Rpb24gSldkKCl7fVxuZnVuY3Rpb24gTVdkKCl7fVxuZnVuY3Rpb24gUFdkKCl7fVxuZnVuY3Rpb24gU1dkKCl7fVxuZnVuY3Rpb24gVldkKCl7fVxuZnVuY3Rpb24gWVdkKCl7fVxuZnVuY3Rpb24gX1dkKCl7fVxuZnVuY3Rpb24geFlkKCl7fVxuZnVuY3Rpb24gQllkKCl7fVxuZnVuY3Rpb24gbVpkKCl7fVxuZnVuY3Rpb24gRVpkKCl7fVxuZnVuY3Rpb24gR1pkKCl7fVxuZnVuY3Rpb24gSlpkKCl7fVxuZnVuY3Rpb24gTVpkKCl7fVxuZnVuY3Rpb24gUFpkKCl7fVxuZnVuY3Rpb24gU1pkKCl7fVxuZnVuY3Rpb24gVlpkKCl7fVxuZnVuY3Rpb24gWVpkKCl7fVxuZnVuY3Rpb24gX1pkKCl7fVxuZnVuY3Rpb24gYyRkKCl7fVxuZnVuY3Rpb24gZiRkKCl7fVxuZnVuY3Rpb24gaSRkKCl7fVxuZnVuY3Rpb24gbCRkKCl7fVxuZnVuY3Rpb24gbyRkKCl7fVxuZnVuY3Rpb24gciRkKCl7fVxuZnVuY3Rpb24gdSRkKCl7fVxuZnVuY3Rpb24geCRkKCl7fVxuZnVuY3Rpb24gQSRkKCl7fVxuZnVuY3Rpb24gRCRkKCl7fVxuZnVuY3Rpb24gRyRkKCl7fVxuZnVuY3Rpb24gSiRkKCl7fVxuZnVuY3Rpb24gTSRkKCl7fVxuZnVuY3Rpb24gUCRkKCl7fVxuZnVuY3Rpb24gUyRkKCl7fVxuZnVuY3Rpb24gViRkKCl7fVxuZnVuY3Rpb24gWSRkKCl7fVxuZnVuY3Rpb24gXyRkKCl7fVxuZnVuY3Rpb24gY19kKCl7fVxuZnVuY3Rpb24gZl9kKCl7fVxuZnVuY3Rpb24gaV9kKCl7fVxuZnVuY3Rpb24gbF9kKCl7fVxuZnVuY3Rpb24gb19kKCl7fVxuZnVuY3Rpb24gcl9kKCl7fVxuZnVuY3Rpb24gdV9kKCl7fVxuZnVuY3Rpb24geF9kKCl7fVxuZnVuY3Rpb24gQV9kKCl7fVxuZnVuY3Rpb24gRF9kKCl7fVxuZnVuY3Rpb24gR19kKCl7fVxuZnVuY3Rpb24gSl9kKCl7fVxuZnVuY3Rpb24gTV9kKCl7fVxuZnVuY3Rpb24gUF9kKCl7fVxuZnVuY3Rpb24gU19kKCl7fVxuZnVuY3Rpb24gVl9kKCl7fVxuZnVuY3Rpb24gWV9kKCl7fVxuZnVuY3Rpb24gaDVkKCl7fVxuZnVuY3Rpb24gVTZkKCl7fVxuZnVuY3Rpb24gVTlkKCl7fVxuZnVuY3Rpb24gXzhkKCl7fVxuZnVuY3Rpb24gZmFlKCl7fVxuZnVuY3Rpb24gaGFlKCl7fVxuZnVuY3Rpb24ga2FlKCl7fVxuZnVuY3Rpb24gbmFlKCl7fVxuZnVuY3Rpb24gcWFlKCl7fVxuZnVuY3Rpb24gdGFlKCl7fVxuZnVuY3Rpb24gd2FlKCl7fVxuZnVuY3Rpb24gemFlKCl7fVxuZnVuY3Rpb24gQ2FlKCl7fVxuZnVuY3Rpb24gRmFlKCl7fVxuZnVuY3Rpb24gSWFlKCl7fVxuZnVuY3Rpb24gTGFlKCl7fVxuZnVuY3Rpb24gT2FlKCl7fVxuZnVuY3Rpb24gUmFlKCl7fVxuZnVuY3Rpb24gVWFlKCl7fVxuZnVuY3Rpb24gWGFlKCl7fVxuZnVuY3Rpb24gJGFlKCl7fVxuZnVuY3Rpb24gYmJlKCl7fVxuZnVuY3Rpb24gZWJlKCl7fVxuZnVuY3Rpb24gaGJlKCl7fVxuZnVuY3Rpb24ga2JlKCl7fVxuZnVuY3Rpb24gbmJlKCl7fVxuZnVuY3Rpb24gcWJlKCl7fVxuZnVuY3Rpb24gdGJlKCl7fVxuZnVuY3Rpb24gd2JlKCl7fVxuZnVuY3Rpb24gemJlKCl7fVxuZnVuY3Rpb24gQ2JlKCl7fVxuZnVuY3Rpb24gRmJlKCl7fVxuZnVuY3Rpb24gSWJlKCl7fVxuZnVuY3Rpb24gTGJlKCl7fVxuZnVuY3Rpb24gT2JlKCl7fVxuZnVuY3Rpb24gUmJlKCl7fVxuZnVuY3Rpb24gVWJlKCl7fVxuZnVuY3Rpb24gWGJlKCl7fVxuZnVuY3Rpb24gJGJlKCl7fVxuZnVuY3Rpb24gYmNlKCl7fVxuZnVuY3Rpb24gZWNlKCl7fVxuZnVuY3Rpb24gaGNlKCl7fVxuZnVuY3Rpb24ga2NlKCl7fVxuZnVuY3Rpb24gbmNlKCl7fVxuZnVuY3Rpb24gcWNlKCl7fVxuZnVuY3Rpb24gdGNlKCl7fVxuZnVuY3Rpb24gd2NlKCl7fVxuZnVuY3Rpb24gemNlKCl7fVxuZnVuY3Rpb24gQ2NlKCl7fVxuZnVuY3Rpb24gRmNlKCl7fVxuZnVuY3Rpb24gSWNlKCl7fVxuZnVuY3Rpb24gTGNlKCl7fVxuZnVuY3Rpb24gT2NlKCl7fVxuZnVuY3Rpb24gUmNlKCl7fVxuZnVuY3Rpb24gVWNlKCl7fVxuZnVuY3Rpb24gWGNlKCl7fVxuZnVuY3Rpb24gdWRlKCl7fVxuZnVuY3Rpb24gVmdlKCl7fVxuZnVuY3Rpb24gZGhlKCl7fVxuZnVuY3Rpb24gc19iKGEpe31cbmZ1bmN0aW9uIGpTZChhKXt9XG5mdW5jdGlvbiBvbCgpe3diKCl9XG5mdW5jdGlvbiBvUGIoKXtuUGIoKX1cbmZ1bmN0aW9uIEVQYigpe0NQYigpfVxuZnVuY3Rpb24gZ0ZiKCl7ZkZiKCl9XG5mdW5jdGlvbiBUUmIoKXtTUmIoKX1cbmZ1bmN0aW9uIHlTYigpe3dTYigpfVxuZnVuY3Rpb24gUFNiKCl7T1NiKCl9XG5mdW5jdGlvbiBkVGIoKXtiVGIoKX1cbmZ1bmN0aW9uIGk0Yigpe2I0YigpfVxuZnVuY3Rpb24gRDJiKCl7eDJiKCl9XG5mdW5jdGlvbiBKNmIoKXtENmIoKX1cbmZ1bmN0aW9uIHU5Yigpe3E5YigpfVxuZnVuY3Rpb24gJDliKCl7STliKCl9XG5mdW5jdGlvbiBVbWMoKXtJbWMoKX1cbmZ1bmN0aW9uIGFiYygpe1ZhYygpfVxuZnVuY3Rpb24gWkNjKCl7VkNjKCl9XG5mdW5jdGlvbiBrQ2MoKXtoQ2MoKX1cbmZ1bmN0aW9uIHJDYygpe29DYygpfVxuZnVuY3Rpb24gVGNjKCl7T2NjKCl9XG5mdW5jdGlvbiB4a2MoKXtna2MoKX1cbmZ1bmN0aW9uIHhEYygpe3JEYygpfVxuZnVuY3Rpb24gaURjKCl7Y0RjKCl9XG5mdW5jdGlvbiBrd2MoKXtqd2MoKX1cbmZ1bmN0aW9uIHRKYygpe2pKYygpfVxuZnVuY3Rpb24gZEpjKCl7YUpjKCl9XG5mdW5jdGlvbiBQeWMoKXtOeWMoKX1cbmZ1bmN0aW9uIFZCYygpe1NCYygpfVxuZnVuY3Rpb24gQ0ZjKCl7eUZjKCl9XG5mdW5jdGlvbiBDVWMoKXt3VWMoKX1cbmZ1bmN0aW9uIGxVYygpe2ZVYygpfVxuZnVuY3Rpb24gc1VjKCl7cFVjKCl9XG5mdW5jdGlvbiBJVWMoKXtHVWMoKX1cbmZ1bmN0aW9uIElXYygpe0hXYygpfVxuZnVuY3Rpb24gX1djKCl7WldjKCl9XG5mdW5jdGlvbiBmSGMoKXtkSGMoKX1cbmZ1bmN0aW9uIGYwYygpe2QwYygpfVxuZnVuY3Rpb24gQjBjKCl7QTBjKCl9XG5mdW5jdGlvbiBMMGMoKXtKMGMoKX1cbmZ1bmN0aW9uIExUYygpe0pUYygpfVxuZnVuY3Rpb24gc1RjKCl7clRjKCl9XG5mdW5jdGlvbiBLTGMoKXtJTGMoKX1cbmZ1bmN0aW9uIHdOYygpe3ROYygpfVxuZnVuY3Rpb24gUFljKCl7T1ljKCl9XG5mdW5jdGlvbiBuWmMoKXtsWmMoKX1cbmZ1bmN0aW9uIHEzYygpe3AzYygpfVxuZnVuY3Rpb24gWjdjKCl7WDdjKCl9XG5mdW5jdGlvbiBaOWMoKXtZOWMoKX1cbmZ1bmN0aW9uIF9hZCgpe1phZCgpfVxuZnVuY3Rpb24ga2RkKCl7aWRkKCl9XG5mdW5jdGlvbiAkbWQoKXtTbWQoKX1cbmZ1bmN0aW9uIEhHZCgpe3RHZCgpfVxuZnVuY3Rpb24gaExkKCl7TktkKCl9XG5mdW5jdGlvbiBKNmQoKXtVZ2UoKX1cbmZ1bmN0aW9uIE12YihhKXt1Q2IoYSl9XG5mdW5jdGlvbiBZYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGNjKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gY2ooYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBpaihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIERqKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gZGYoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBrZihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGFoKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gbGgoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiB0aChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFBoKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gdmkoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBDaShhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEZrKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gTG4oYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBhcChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHpwKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gWXAoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBxcShhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIERxKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gd3IoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBJcihhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIHNqKGEpe3RoaXMuYz1hfVxuZnVuY3Rpb24gc3coYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBmdyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHh3KGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gQ3coYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBRdyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFJ3KGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gWHcoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBYdihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFN2KGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gZXUoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBaeChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF94KGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24geHkoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiB4QihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEhCKGEpe3RoaXMuYT1hfVxuZnVuY3Rpb24gVEIoYSl7dGhpcy5hPWF9XG5mdW5jdGlvbiBmQyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHdCKCl7dGhpcy5hPVtdfVxuZnVuY3Rpb24gTUJiKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiB3X2IoYSxiKXthLmE9Yn1cbmZ1bmN0aW9uIHhfYihhLGIpe2EuYj1ifVxuZnVuY3Rpb24gWU9iKGEsYil7YS5iPWJ9XG5mdW5jdGlvbiAkT2IoYSxiKXthLmI9Yn1cbmZ1bmN0aW9uIFpHYihhLGIpe2Euaj1ifVxuZnVuY3Rpb24gcU5iKGEsYil7YS5nPWJ9XG5mdW5jdGlvbiByTmIoYSxiKXthLmk9Yn1cbmZ1bmN0aW9uIGRSYihhLGIpe2EuYz1ifVxuZnVuY3Rpb24gZVJiKGEsYil7YS5kPWJ9XG5mdW5jdGlvbiB6X2IoYSxiKXthLmQ9Yn1cbmZ1bmN0aW9uIHlfYihhLGIpe2EuYz1ifVxuZnVuY3Rpb24gX19iKGEsYil7YS5rPWJ9XG5mdW5jdGlvbiBFMGIoYSxiKXthLmM9Yn1cbmZ1bmN0aW9uIG5qYyhhLGIpe2EuYz1ifVxuZnVuY3Rpb24gbWpjKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiBkRmMoYSxiKXthLmE9Yn1cbmZ1bmN0aW9uIGVGYyhhLGIpe2EuZj1ifVxuZnVuY3Rpb24gbk9jKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiBvT2MoYSxiKXthLmI9Yn1cbmZ1bmN0aW9uIHBPYyhhLGIpe2EuZD1ifVxuZnVuY3Rpb24gcU9jKGEsYil7YS5pPWJ9XG5mdW5jdGlvbiByT2MoYSxiKXthLm89Yn1cbmZ1bmN0aW9uIHNPYyhhLGIpe2Eucj1ifVxuZnVuY3Rpb24gJFBjKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiBfUGMoYSxiKXthLmI9Yn1cbmZ1bmN0aW9uIERWYyhhLGIpe2EuZT1ifVxuZnVuY3Rpb24gRVZjKGEsYil7YS5mPWJ9XG5mdW5jdGlvbiBGVmMoYSxiKXthLmc9Yn1cbmZ1bmN0aW9uIFNaYyhhLGIpe2EuZT1ifVxuZnVuY3Rpb24gVFpjKGEsYil7YS5mPWJ9XG5mdW5jdGlvbiBjJGMoYSxiKXthLmY9Yn1cbmZ1bmN0aW9uIGJKZChhLGIpe2Eubj1ifVxuZnVuY3Rpb24gQTFkKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiBKMWQoYSxiKXthLmE9Yn1cbmZ1bmN0aW9uIEIxZChhLGIpe2EuYz1ifVxuZnVuY3Rpb24gSzFkKGEsYil7YS5jPWJ9XG5mdW5jdGlvbiBMMWQoYSxiKXthLmQ9Yn1cbmZ1bmN0aW9uIE0xZChhLGIpe2EuZT1ifVxuZnVuY3Rpb24gTjFkKGEsYil7YS5nPWJ9XG5mdW5jdGlvbiBkMmQoYSxiKXthLmE9Yn1cbmZ1bmN0aW9uIGUyZChhLGIpe2EuYz1ifVxuZnVuY3Rpb24gZjJkKGEsYil7YS5kPWJ9XG5mdW5jdGlvbiBnMmQoYSxiKXthLmU9Yn1cbmZ1bmN0aW9uIGgyZChhLGIpe2EuZj1ifVxuZnVuY3Rpb24gaTJkKGEsYil7YS5qPWJ9XG5mdW5jdGlvbiBaOGQoYSxiKXthLmE9Yn1cbmZ1bmN0aW9uICQ4ZChhLGIpe2EuYj1ifVxuZnVuY3Rpb24gZzlkKGEsYil7YS5hPWJ9XG5mdW5jdGlvbiBDaWMoYSl7YS5iPWEuYX1cbmZ1bmN0aW9uIERnKGEpe2EuYz1hLmQuZH1cbmZ1bmN0aW9uIHZpYihhKXt0aGlzLmQ9YX1cbmZ1bmN0aW9uIGVpYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFBpYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFZpYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICRpYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1jYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1jYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFhjYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE5kYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9kYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHRlYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFFlYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGRqYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdqYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE5qYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEJqYihhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIGxuYihhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIERuYihhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIGFuYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1vYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFJvYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGlvYihhKXt0aGlzLmM9YX1cbmZ1bmN0aW9uIG9sYihhKXt0aGlzLmM9YX1cbmZ1bmN0aW9uIHF1YihhKXt0aGlzLmM9YX1cbmZ1bmN0aW9uIFR1YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFZ1YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFh1YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFp1YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHRwYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9wYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFdxYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG5zYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFJ4YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFR4YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFh4YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGJ6YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHR6YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHZ6YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHh6YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEt6YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE96YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGlBYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGtBYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1BYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEJBYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGhCYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGpCYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG5CYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFRCYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFhCYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFFDYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFdDYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9DYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGRFYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFFHYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFlHYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHRLYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIENMYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEpNYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFJOYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGtRYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1RYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEZRYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVUYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFVUYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGRVYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGhVYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVaYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGokYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHYkYihhKXt0aGlzLmU9YX1cbmZ1bmN0aW9uIEowYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE0wYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFIwYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFUwYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGkyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGsyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG8yYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHMyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEcyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEkyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEsyYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE0yYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFczYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICQzYihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFY0YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHU1YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEE3YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEc3YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEo3YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE03YihhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1iYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFBiYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGxhYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG5hYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHFjYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdkYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICRkYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGNlYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9lYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHBmYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEJmYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIExmYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHlnYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIERnYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHNoYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHVoYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHdoYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIENoYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVoYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE9oYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFloYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFRrYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFZrYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE9sYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHBuYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHJuYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGRwYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGZwYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdDYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEtDYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1EYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGpFYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEhFYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEZFYyhhKXt0aGlzLmM9YX1cbmZ1bmN0aW9uIHFvYyhhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIGJGYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdGYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGlHYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGtHYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1HYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICRHYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGhJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGxJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHBJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHRJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHhJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHpJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIENJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIExJYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIENLYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIElLYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1LYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICRLYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGNMYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGpMYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHJMYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHhMYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE9NYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFpPYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFpSYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGFTYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEkkYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEskYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE0kYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE8kYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFUkYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG4xYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHoxYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEIxYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFEyYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFUyYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHozYyhhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1lZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFhlZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9lZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFFmZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEJnZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uICRnZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGxyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHVyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHZyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHdyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHhyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHlyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHpyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEFyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEJyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIENyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIElyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEtyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIExyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1yZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE5yZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFByZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFNyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFlyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFpyZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIF9yZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGFzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGJzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGNzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGRzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG1zZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIG9zZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHFzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHNzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFdzZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIExzZChhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIHRoZChhKXt0aGlzLmY9YX1cbmZ1bmN0aW9uIHF0ZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHlCZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdCZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE1CZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFNCZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGlDZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFlNZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEdOZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVQZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVRZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE5UZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHFPZChhKXt0aGlzLmI9YX1cbmZ1bmN0aW9uIGxWZChhKXt0aGlzLmM9YX1cbmZ1bmN0aW9uIFZWZChhKXt0aGlzLmU9YX1cbmZ1bmN0aW9uIGlZZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFJZZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIFpZZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHowZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIE8wZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHMwZChhKXt0aGlzLmQ9YX1cbmZ1bmN0aW9uIFc1ZChhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIGNnZShhKXt0aGlzLmE9YX1cbmZ1bmN0aW9uIHhmZShhKXt0aGlzLmU9YX1cbmZ1bmN0aW9uIFRmZCgpe3RoaXMuYT0wfVxuZnVuY3Rpb24gamtiKCl7VmpiKHRoaXMpfVxuZnVuY3Rpb24gUmtiKCl7Q2tiKHRoaXMpfVxuZnVuY3Rpb24gTHFiKCl7VWhiKHRoaXMpfVxuZnVuY3Rpb24gbEViKCl7a0ViKHRoaXMpfVxuZnVuY3Rpb24gQV9iKCl7c19iKHRoaXMpfVxuZnVuY3Rpb24gVVFkKCl7dGhpcy5jPUZRZH1cbmZ1bmN0aW9uIHY2ZChhLGIpe2IuV2IoYSl9XG5mdW5jdGlvbiBtb2MoYSxiKXthLmIrPWJ9XG5mdW5jdGlvbiB5WGIoYSl7YS5iPW5ldyBKaX1cbmZ1bmN0aW9uIHZiYihhKXtyZXR1cm4gYS5lfVxuZnVuY3Rpb24gREIoYSl7cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIExCKGEpe3JldHVybiBhLmF9XG5mdW5jdGlvbiBaQihhKXtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gbEMoYSl7cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIEVDKGEpe3JldHVybiBhLmF9XG5mdW5jdGlvbiB3Qygpe3JldHVybiBudWxsfVxuZnVuY3Rpb24gU0IoKXtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGhjYigpe212ZCgpO292ZCgpfVxuZnVuY3Rpb24gekpiKGEpe2EuYi50ZihhLmUpfVxuZnVuY3Rpb24gajViKGEsYil7YS5iPWItYS5ifVxuZnVuY3Rpb24gZzViKGEsYil7YS5hPWItYS5hfVxuZnVuY3Rpb24gUFhjKGEsYil7Yi5hZChhLmEpfVxuZnVuY3Rpb24gcGxjKGEsYil7RzBiKGIsYSl9XG5mdW5jdGlvbiBocChhLGIsYyl7YS5PZChjLGIpfVxuZnVuY3Rpb24gQXMoYSxiKXthLmU9YjtiLmI9YX1cbmZ1bmN0aW9uIFpsKGEpe1FsKCk7dGhpcy5hPWF9XG5mdW5jdGlvbiBqcShhKXtRbCgpO3RoaXMuYT1hfVxuZnVuY3Rpb24gc3EoYSl7UWwoKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIEZxKGEpe2ltKCk7dGhpcy5hPWF9XG5mdW5jdGlvbiBTeihhKXtSeigpO1F6LmJlKGEpfVxuZnVuY3Rpb24gZ3ooKXtYeS5jYWxsKHRoaXMpfVxuZnVuY3Rpb24geGNiKCl7WHkuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHBjYigpe2d6LmNhbGwodGhpcyl9XG5mdW5jdGlvbiB0Y2IoKXtnei5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gQmRiKCl7Z3ouY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIFZkYigpe2d6LmNhbGwodGhpcyl9XG5mdW5jdGlvbiBZZGIoKXtnei5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gR2ViKCl7Z3ouY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIGJnYigpe2d6LmNhbGwodGhpcyl9XG5mdW5jdGlvbiBBcGIoKXtnei5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gSnBiKCl7Z3ouY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHV0Yigpe2d6LmNhbGwodGhpcyl9XG5mdW5jdGlvbiB4MmMoKXtnei5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gclFkKCl7dGhpcy5hPXRoaXN9XG5mdW5jdGlvbiBNUGQoKXt0aGlzLkJifD0yNTZ9XG5mdW5jdGlvbiB0VGIoKXt0aGlzLmI9bmV3IG10fVxuZnVuY3Rpb24gZkEoKXtmQT1jY2I7bmV3IExxYn1cbmZ1bmN0aW9uIHJjYigpe3BjYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gZENiKGEsYil7YS5sZW5ndGg9Yn1cbmZ1bmN0aW9uIFR2YihhLGIpe0VrYihhLmEsYil9XG5mdW5jdGlvbiBzS2IoYSxiKXtVSGIoYS5jLGIpfVxuZnVuY3Rpb24gU01jKGEsYil7UXFiKGEuYixiKX1cbmZ1bmN0aW9uIHZCZChhLGIpe3VBZChhLmEsYil9XG5mdW5jdGlvbiB3QmQoYSxiKXt2QWQoYS5hLGIpfVxuZnVuY3Rpb24gR0xkKGEsYil7VWhkKGEuZSxiKX1cbmZ1bmN0aW9uIGQ3ZChhKXtEMmQoYS5jLGEuYil9XG5mdW5jdGlvbiBtaihhLGIpe2Eua2MoKS5OYihiKX1cbmZ1bmN0aW9uIE9kYihhKXt0aGlzLmE9VGRiKGEpfVxuZnVuY3Rpb24gVHFiKCl7dGhpcy5hPW5ldyBMcWJ9XG5mdW5jdGlvbiBneWIoKXt0aGlzLmE9bmV3IExxYn1cbmZ1bmN0aW9uIFd2Yigpe3RoaXMuYT1uZXcgUmtifVxuZnVuY3Rpb24gS0ZiKCl7dGhpcy5hPW5ldyBSa2J9XG5mdW5jdGlvbiBQRmIoKXt0aGlzLmE9bmV3IFJrYn1cbmZ1bmN0aW9uIEZGYigpe3RoaXMuYT1uZXcgeUZifVxuZnVuY3Rpb24gcEdiKCl7dGhpcy5hPW5ldyBNRmJ9XG5mdW5jdGlvbiBaUWIoKXt0aGlzLmE9bmV3IE1RYn1cbmZ1bmN0aW9uIEd4Yigpe3RoaXMuYT1uZXcgUHdifVxuZnVuY3Rpb24galViKCl7dGhpcy5hPW5ldyBQVGJ9XG5mdW5jdGlvbiBzRGIoKXt0aGlzLmE9bmV3IG9EYn1cbmZ1bmN0aW9uIHpEYigpe3RoaXMuYT1uZXcgdERifVxuZnVuY3Rpb24gQ1diKCl7dGhpcy5hPW5ldyBSa2J9XG5mdW5jdGlvbiBIWGIoKXt0aGlzLmE9bmV3IFJrYn1cbmZ1bmN0aW9uIG5ZYigpe3RoaXMuYT1uZXcgUmtifVxuZnVuY3Rpb24gQlliKCl7dGhpcy5hPW5ldyBSa2J9XG5mdW5jdGlvbiBmTGIoKXt0aGlzLmQ9bmV3IFJrYn1cbmZ1bmN0aW9uIHZZYigpe3RoaXMuYT1uZXcgVHFifVxuZnVuY3Rpb24gYTJiKCl7dGhpcy5hPW5ldyBMcWJ9XG5mdW5jdGlvbiB3WmIoKXt0aGlzLmI9bmV3IExxYn1cbmZ1bmN0aW9uIFRDYygpe3RoaXMuYj1uZXcgUmtifVxuZnVuY3Rpb24gekpjKCl7dGhpcy5lPW5ldyBSa2J9XG5mdW5jdGlvbiB1TWMoKXt0aGlzLmQ9bmV3IFJrYn1cbmZ1bmN0aW9uIHdkYygpe3RoaXMuYT1uZXcgeGtjfVxuZnVuY3Rpb24gdktjKCl7UmtiLmNhbGwodGhpcyl9XG5mdW5jdGlvbiB0d2IoKXtXdmIuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIG9IYigpeyRHYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gTFhiKCl7SFhiLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBMX2IoKXtIX2IuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIEhfYigpe0FfYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gcDBiKCl7QV9iLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBzMGIoKXtwMGIuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIFdNYygpe1ZNYy5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gYk5jKCl7Vk1jLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBFUGMoKXtDUGMuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIEpQYygpe0NQYy5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gT1BjKCl7Q1BjLmNhbGwodGhpcyl9XG5mdW5jdGlvbiB3MWMoKXtzMWMuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHM3Yygpe1BzYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gYXBkKCl7QWxkLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBwcGQoKXtBbGQuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIGxEZCgpe1lDZC5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gTkRkKCl7WUNkLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBtRmQoKXtMcWIuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHZGZCgpe0xxYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gR0ZkKCl7THFiLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBLUGQoKXtUcWIuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIE9KZCgpe2hKZC5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gYVFkKCl7TVBkLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBTU2QoKXtGSWQuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHJVZCgpe0ZJZC5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gb1VkKCl7THFiLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBOWWQoKXtMcWIuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIGNaZCgpe0xxYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gUjhkKCl7TUdkLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBvOWQoKXtNR2QuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIGk5ZCgpe1I4ZC5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gaGVlKCl7dWRlLmNhbGwodGhpcyl9XG5mdW5jdGlvbiBEZChhKXt5ZC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBIZChhKXt5ZC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBwaChhKXtsaC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBTaChhKXtXYy5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBvaShhKXtTaC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBJaShhKXtXYy5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBaZGQoKXt0aGlzLmE9bmV3IFBzYn1cbmZ1bmN0aW9uIENQYygpe3RoaXMuYT1uZXcgVHFifVxuZnVuY3Rpb24gczFjKCl7dGhpcy5hPW5ldyBMcWJ9XG5mdW5jdGlvbiBRU2MoKXt0aGlzLmE9bmV3IFJrYn1cbmZ1bmN0aW9uIEQyYygpe3RoaXMuaj1uZXcgUmtifVxuZnVuY3Rpb24gUVhjKCl7dGhpcy5hPW5ldyBVWGN9XG5mdW5jdGlvbiBlX2MoKXt0aGlzLmE9bmV3IGRfY31cbmZ1bmN0aW9uIFlDZCgpe3RoaXMuYT1uZXcgYURkfVxuZnVuY3Rpb24gX2soKXtfaz1jY2I7JGs9bmV3IGFsfVxuZnVuY3Rpb24gTGsoKXtMaz1jY2I7S2s9bmV3IE1rfVxuZnVuY3Rpb24gd2IoKXt3Yj1jY2I7dmI9bmV3IHhifVxuZnVuY3Rpb24gaHMoKXtocz1jY2I7Z3M9bmV3IGlzfVxuZnVuY3Rpb24gcnMoYSl7U2guY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gR3AoYSl7U2guY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24geHAoYSl7TG8uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gRXAoYSl7TG8uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gVHAoYSl7V24uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gd3goYSl7dW4uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gb3YoYSl7ZHYuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gTXYoYSl7QnIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gT3YoYSl7QnIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gTHcoYSl7QnIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gaHooYSl7WXkuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gTUIoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gZUMoKXtmQy5jYWxsKHRoaXMse30pfVxuZnVuY3Rpb24gRnRiKGEpe0F0YigpO3RoaXMuYT1hfVxuZnVuY3Rpb24gendiKGEpe2EuYj1udWxsO2EuYz0wfVxuZnVuY3Rpb24gVnkoYSxiKXthLmU9YjtTeShhLGIpfVxuZnVuY3Rpb24gTFZiKGEsYil7YS5hPWI7TlZiKGEpfVxuZnVuY3Rpb24gbEliKGEsYixjKXthLmFbYi5nXT1jfVxuZnVuY3Rpb24gdmZkKGEsYixjKXtEZmQoYyxhLGIpfVxuZnVuY3Rpb24gT2RjKGEsYil7cmpjKGIuaSxhLm4pfVxuZnVuY3Rpb24gV3ljKGEsYil7WHljKGEpLnRkKGIpfVxuZnVuY3Rpb24gRVJiKGEsYil7cmV0dXJuIGEqYS9ifVxuZnVuY3Rpb24gWHIoYSxiKXtyZXR1cm4gYS5nLWIuZ31cbmZ1bmN0aW9uIHRDKGEpe3JldHVybiBuZXcgVEIoYSl9XG5mdW5jdGlvbiB2QyhhKXtyZXR1cm4gbmV3IHlDKGEpfVxuZnVuY3Rpb24gb2NiKGEpe2h6LmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIHFjYihhKXtoei5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiB1Y2IoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gdmNiKGEpe1l5LmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIGZHYyhhKXtMRmMoKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIGMwZChhKXtremQoKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIGJoZChhKXtSZ2QoKTt0aGlzLmY9YX1cbmZ1bmN0aW9uIGRoZChhKXtSZ2QoKTt0aGlzLmY9YX1cbmZ1bmN0aW9uIENkYihhKXtoei5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBXZGIoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gWmRiKGEpe2h6LmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIEZlYihhKXtoei5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBIZWIoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gQ2NiKGEpe3JldHVybiB1Q2IoYSksYX1cbmZ1bmN0aW9uIEVkYihhKXtyZXR1cm4gdUNiKGEpLGF9XG5mdW5jdGlvbiBHZGIoYSl7cmV0dXJuIHVDYihhKSxhfVxuZnVuY3Rpb24gamZiKGEpe3JldHVybiB1Q2IoYSksYX1cbmZ1bmN0aW9uIHRmYihhKXtyZXR1cm4gdUNiKGEpLGF9XG5mdW5jdGlvbiBha2IoYSl7cmV0dXJuIGEuYj09YS5jfVxuZnVuY3Rpb24gSHdiKGEpe3JldHVybiAhIWEmJmEuYn1cbmZ1bmN0aW9uIHBJYihhKXtyZXR1cm4gISFhJiZhLmt9XG5mdW5jdGlvbiBxSWIoYSl7cmV0dXJuICEhYSYmYS5qfVxuZnVuY3Rpb24gYW1iKGEpe3VDYihhKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIHdWYihhKXtxVmIoYSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBCbGIoYSl7R2xiKGEsYS5sZW5ndGgpfVxuZnVuY3Rpb24gY2diKGEpe2h6LmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIGNxZChhKXtoei5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBuOGQoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24geTJjKGEpe2h6LmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIHoyYyhhKXtoei5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBtZGUoYSl7aHouY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gcGMoYSl7cWMuY2FsbCh0aGlzLGEsMCl9XG5mdW5jdGlvbiBKaSgpe0tpLmNhbGwodGhpcywxMiwzKX1cbmZ1bmN0aW9uIEt6KCl7S3o9Y2NiO0p6PW5ldyBOen1cbmZ1bmN0aW9uIGp6KCl7ano9Y2NiO2l6PW5ldyBuYn1cbmZ1bmN0aW9uIEtBKCl7S0E9Y2NiO0pBPW5ldyBNQX1cbmZ1bmN0aW9uIE9CKCl7T0I9Y2NiO05CPW5ldyBQQn1cbmZ1bmN0aW9uIGpjKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gemgoKXt0aHJvdyB2YmIobmV3IGJnYil9XG5mdW5jdGlvbiBQaSgpe3Rocm93IHZiYihuZXcgYmdiKX1cbmZ1bmN0aW9uIFBqKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gUWooKXt0aHJvdyB2YmIobmV3IGJnYil9XG5mdW5jdGlvbiBZbSgpe3Rocm93IHZiYihuZXcgYmdiKX1cbmZ1bmN0aW9uIEdiKCl7dGhpcy5hPUdEKFFiKFNoZSkpfVxuZnVuY3Rpb24gb3koYSl7UWwoKTt0aGlzLmE9UWIoYSl9XG5mdW5jdGlvbiBCcyhhLGIpe2EuVGQoYik7Yi5TZChhKX1cbmZ1bmN0aW9uIGl3KGEsYil7YS5hLmVjKCkuTWMoYil9XG5mdW5jdGlvbiBDWWIoYSxiLGMpe2EuYy5sZihiLGMpfVxuZnVuY3Rpb24gc2NiKGEpe3FjYi5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBPZWIoYSl7V2RiLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIEhmYigpe21jYi5jYWxsKHRoaXMsJycpfVxuZnVuY3Rpb24gSWZiKCl7bWNiLmNhbGwodGhpcywnJyl9XG5mdW5jdGlvbiBVZmIoKXttY2IuY2FsbCh0aGlzLCcnKX1cbmZ1bmN0aW9uIFZmYigpe21jYi5jYWxsKHRoaXMsJycpfVxuZnVuY3Rpb24gWGZiKGEpe3FjYi5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiB6b2IoYSl7bG5iLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIFlvYihhKXtJbmIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gR29iKGEpe3pvYi5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBNaygpe0ZrLmNhbGwodGhpcyxudWxsKX1cbmZ1bmN0aW9uIGFsKCl7RmsuY2FsbCh0aGlzLG51bGwpfVxuZnVuY3Rpb24gQXooKXtBej1jY2I7ISEoUnooKSxReil9XG5mdW5jdGlvbiB3cmIoKXt3cmI9Y2NiO3ZyYj15cmIoKX1cbmZ1bmN0aW9uIE10YihhKXtyZXR1cm4gYS5hP2EuYjowfVxuZnVuY3Rpb24gVnRiKGEpe3JldHVybiBhLmE/YS5iOjB9XG5mdW5jdGlvbiBMY2IoYSxiKXtyZXR1cm4gYS5hLWIuYX1cbmZ1bmN0aW9uIFdjYihhLGIpe3JldHVybiBhLmEtYi5hfVxuZnVuY3Rpb24gUGViKGEsYil7cmV0dXJuIGEuYS1iLmF9XG5mdW5jdGlvbiBlQ2IoYSxiKXtyZXR1cm4gUEMoYSxiKX1cbmZ1bmN0aW9uIEdDKGEsYil7cmV0dXJuIHJkYihhLGIpfVxuZnVuY3Rpb24gX0IoYixhKXtyZXR1cm4gYSBpbiBiLmF9XG5mdW5jdGlvbiBfRGIoYSxiKXthLmY9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIFpEYihhLGIpe2EuYj1iO3JldHVybiBhfVxuZnVuY3Rpb24gJERiKGEsYil7YS5jPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBhRWIoYSxiKXthLmc9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIEhHYihhLGIpe2EuYT1iO3JldHVybiBhfVxuZnVuY3Rpb24gSUdiKGEsYil7YS5mPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBKR2IoYSxiKXthLms9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGRMYihhLGIpe2EuYT1iO3JldHVybiBhfVxuZnVuY3Rpb24gZUxiKGEsYil7YS5lPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiB6VmIoYSxiKXthLmU9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIEFWYihhLGIpe2EuZj1iO3JldHVybiBhfVxuZnVuY3Rpb24gS09iKGEsYil7YS5iPXRydWU7YS5kPWJ9XG5mdW5jdGlvbiBESGIoYSxiKXthLmI9bmV3IGc3YyhiKX1cbmZ1bmN0aW9uIHV2YihhLGIsYyl7Yi50ZChhLmFbY10pfVxuZnVuY3Rpb24genZiKGEsYixjKXtiLndlKGEuYVtjXSl9XG5mdW5jdGlvbiB3SmMoYSxiKXtyZXR1cm4gYS5iLWIuYn1cbmZ1bmN0aW9uIGtPYyhhLGIpe3JldHVybiBhLmctYi5nfVxuZnVuY3Rpb24gV1FjKGEsYil7cmV0dXJuIGEucy1iLnN9XG5mdW5jdGlvbiBMaWMoYSxiKXtyZXR1cm4gYT8wOmItMX1cbmZ1bmN0aW9uIFNGYyhhLGIpe3JldHVybiBhPzA6Yi0xfVxuZnVuY3Rpb24gUkZjKGEsYil7cmV0dXJuIGE/Yi0xOjB9XG5mdW5jdGlvbiBNMmMoYSxiKXtyZXR1cm4gYi5ZZihhKX1cbmZ1bmN0aW9uIE0zYyhhLGIpe2EuYj1iO3JldHVybiBhfVxuZnVuY3Rpb24gTDNjKGEsYil7YS5hPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBOM2MoYSxiKXthLmM9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIE8zYyhhLGIpe2EuZD1iO3JldHVybiBhfVxuZnVuY3Rpb24gUDNjKGEsYil7YS5lPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBRM2MoYSxiKXthLmY9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGI0YyhhLGIpe2EuYT1iO3JldHVybiBhfVxuZnVuY3Rpb24gYzRjKGEsYil7YS5iPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBkNGMoYSxiKXthLmM9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIHo1YyhhLGIpe2EuYz1iO3JldHVybiBhfVxuZnVuY3Rpb24geTVjKGEsYil7YS5iPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBBNWMoYSxiKXthLmQ9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIEI1YyhhLGIpe2EuZT1iO3JldHVybiBhfVxuZnVuY3Rpb24gQzVjKGEsYil7YS5mPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBENWMoYSxiKXthLmc9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIEU1YyhhLGIpe2EuYT1iO3JldHVybiBhfVxuZnVuY3Rpb24gRjVjKGEsYil7YS5pPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBHNWMoYSxiKXthLmo9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIFZkZChhLGIpe2Euaz1iO3JldHVybiBhfVxuZnVuY3Rpb24gV2RkKGEsYil7YS5qPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiB5a2MoYSxiKXtna2MoKTtGMGIoYixhKX1cbmZ1bmN0aW9uIFQkYyhhLGIsYyl7UiRjKGEuYSxiLGMpfVxuZnVuY3Rpb24gUkdjKGEpe2NFYy5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBpSGMoYSl7Y0VjLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIHQ3YyhhKXtRc2IuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gYVBiKGEpe19PYi5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBJeGQoYSl7enVkLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIGRDZChhKXtaQmQuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gZkNkKGEpe1pCZC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBwX2IoKXtxX2IuY2FsbCh0aGlzLCcnKX1cbmZ1bmN0aW9uIGQ3Yygpe3RoaXMuYT0wO3RoaXMuYj0wfVxuZnVuY3Rpb24gYVBjKCl7dGhpcy5iPTA7dGhpcy5hPTB9XG5mdW5jdGlvbiBOSmQoYSxiKXthLmI9MDtESWQoYSxiKX1cbmZ1bmN0aW9uIFgxZChhLGIpe2EuYz1iO2EuYj10cnVlfVxuZnVuY3Rpb24gT2MoYSxiKXtyZXR1cm4gYS5jLl9iKGIpfVxuZnVuY3Rpb24gZ2RiKGEpe3JldHVybiBhLmUmJmEuZSgpfVxuZnVuY3Rpb24gVmQoYSl7cmV0dXJuICFhP251bGw6YS5kfVxuZnVuY3Rpb24gc24oYSxiKXtyZXR1cm4gR3YoYS5iLGIpfVxuZnVuY3Rpb24gRnYoYSl7cmV0dXJuICFhP251bGw6YS5nfVxuZnVuY3Rpb24gS3YoYSl7cmV0dXJuICFhP251bGw6YS5pfVxuZnVuY3Rpb24gaGRiKGEpe2ZkYihhKTtyZXR1cm4gYS5vfVxuZnVuY3Rpb24gRmhkKCl7RmhkPWNjYjtFaGQ9b25kKCl9XG5mdW5jdGlvbiBIaGQoKXtIaGQ9Y2NiO0doZD1Db2QoKX1cbmZ1bmN0aW9uIExGZCgpe0xGZD1jY2I7S0ZkPXFaZCgpfVxuZnVuY3Rpb24gcDhkKCl7cDhkPWNjYjtvOGQ9WTlkKCl9XG5mdW5jdGlvbiByOGQoKXtyOGQ9Y2NiO3E4ZD1kYWUoKX1cbmZ1bmN0aW9uIG12ZCgpe212ZD1jY2I7bHZkPW40YygpfVxuZnVuY3Rpb24gU3JiKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gZW5iKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gZm5iKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gZ25iKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gam5iKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gQ25iKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gVXFiKGEpe3RoaXMuYT1uZXcgTXFiKGEpfVxuZnVuY3Rpb24gdGdiKGEpe2xnYigpO25nYih0aGlzLGEpfVxuZnVuY3Rpb24gSHhiKGEpe3RoaXMuYT1uZXcgUXdiKGEpfVxuZnVuY3Rpb24gX3ViKGEsYil7d2hpbGUoYS55ZShiKSk7fVxuZnVuY3Rpb24gU3ViKGEsYil7d2hpbGUoYS5zZChiKSk7fVxuZnVuY3Rpb24gQmZiKGEsYil7YS5hKz1iO3JldHVybiBhfVxuZnVuY3Rpb24gQ2ZiKGEsYil7YS5hKz1iO3JldHVybiBhfVxuZnVuY3Rpb24gRmZiKGEsYil7YS5hKz1iO3JldHVybiBhfVxuZnVuY3Rpb24gTGZiKGEsYil7YS5hKz1iO3JldHVybiBhfVxuZnVuY3Rpb24gV0FiKGEpe1R6YihhKTtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gV3NiKGEpe3JldHVybiBhLmIhPWEuZC5jfVxuZnVuY3Rpb24gcEQoYSl7cmV0dXJuIGEubHxhLm08PDIyfVxuZnVuY3Rpb24gYUljKGEsYil7cmV0dXJuIGEuZFtiLnBdfVxuZnVuY3Rpb24gaDJjKGEsYil7cmV0dXJuIGMyYyhhLGIpfVxuZnVuY3Rpb24gY0NiKGEsYixjKXthLnNwbGljZShiLGMpfVxuZnVuY3Rpb24gV0hiKGEpe2EuYz9WSGIoYSk6WEhiKGEpfVxuZnVuY3Rpb24galZjKGEpe3RoaXMuYT0wO3RoaXMuYj1hfVxuZnVuY3Rpb24gWlVjKCl7dGhpcy5hPW5ldyBMMmMoSyQpfVxuZnVuY3Rpb24gdFJjKCl7dGhpcy5iPW5ldyBMMmMoaCQpfVxuZnVuY3Rpb24gUSRjKCl7dGhpcy5iPW5ldyBMMmMoSl8pfVxuZnVuY3Rpb24gZF9jKCl7dGhpcy5iPW5ldyBMMmMoSl8pfVxuZnVuY3Rpb24gT0NkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gUENkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gUUNkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gUkNkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gU0NkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gVENkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gVUNkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gVkNkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gV0NkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gWENkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfVxuZnVuY3Rpb24gYWhlKCl7dGhyb3cgdmJiKG5ldyB1dGIpfVxuZnVuY3Rpb24gYmhlKCl7dGhyb3cgdmJiKG5ldyB1dGIpfVxuZnVuY3Rpb24gUmdlKGEpe3RoaXMuYT1uZXcgZWdlKGEpfVxuZnVuY3Rpb24gZWdlKGEpe2RnZSh0aGlzLGEsVmVlKCkpfVxuZnVuY3Rpb24gRmhlKGEpe3JldHVybiAhYXx8RWhlKGEpfVxuZnVuY3Rpb24gZGRlKGEpe3JldHVybiAkY2VbYV0hPS0xfVxuZnVuY3Rpb24gSXooKXt4eiE9MCYmKHh6PTApO3p6PS0xfVxuZnVuY3Rpb24gWWJiKCl7V2JiPT1udWxsJiYoV2JiPVtdKX1cbmZ1bmN0aW9uIE9OZChhLGIpe1J4ZChaS2QoYS5hKSxiKX1cbmZ1bmN0aW9uIFROZChhLGIpe1J4ZChaS2QoYS5hKSxiKX1cbmZ1bmN0aW9uIFlmKGEsYil7emYuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiAkZihhLGIpe1lmLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gSGYoYSxiKXt0aGlzLmI9YTt0aGlzLmM9Yn1cbmZ1bmN0aW9uIHJrKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBlayhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gZ2soYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIHBrKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiB5ayhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gQWsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIEZqKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBfaihhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gZHIoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIHpyKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBTbyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gcXAoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uICRxKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiAkcihhLGIpe3RoaXMuZj1hO3RoaXMuZz1ifVxuZnVuY3Rpb24gbmUoYSxiKXt0aGlzLmU9YTt0aGlzLmQ9Yn1cbmZ1bmN0aW9uIFdvKGEsYil7dGhpcy5nPWE7dGhpcy5pPWJ9XG5mdW5jdGlvbiBidShhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gcXUoYSxiKXt0aGlzLmE9YTt0aGlzLmY9Yn1cbmZ1bmN0aW9uIHF2KGEsYil7dGhpcy5iPWE7dGhpcy5jPWJ9XG5mdW5jdGlvbiBveChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gUHgoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIG1DKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBXYyhhKXtMYihhLmRjKCkpO3RoaXMuYz1hfVxuZnVuY3Rpb24gcmYoYSl7dGhpcy5iPUJEKFFiKGEpLDgzKX1cbmZ1bmN0aW9uIFp2KGEpe3RoaXMuYT1CRChRYihhKSw4Myl9XG5mdW5jdGlvbiBkdihhKXt0aGlzLmE9QkQoUWIoYSksMTUpfVxuZnVuY3Rpb24gJHUoYSl7dGhpcy5hPUJEKFFiKGEpLDE1KX1cbmZ1bmN0aW9uIEJyKGEpe3RoaXMuYj1CRChRYihhKSw0Nyl9XG5mdW5jdGlvbiBlQigpe3RoaXMucT1uZXcgJHduZC5EYXRlfVxuZnVuY3Rpb24gWmZiKCl7WmZiPWNjYjtZZmI9bmV3IGpjYn1cbmZ1bmN0aW9uIEVtYigpe0VtYj1jY2I7RG1iPW5ldyBGbWJ9XG5mdW5jdGlvbiBWaGIoYSl7cmV0dXJuIGEuZi5jK2EuZy5jfVxuZnVuY3Rpb24gaG5iKGEsYil7cmV0dXJuIGEuYi5IYyhiKX1cbmZ1bmN0aW9uIGluYihhLGIpe3JldHVybiBhLmIuSWMoYil9XG5mdW5jdGlvbiBrbmIoYSxiKXtyZXR1cm4gYS5iLlFjKGIpfVxuZnVuY3Rpb24gRG9iKGEsYil7cmV0dXJuIGEuYi5IYyhiKX1cbmZ1bmN0aW9uIGRvYihhLGIpe3JldHVybiBhLmMudWMoYil9XG5mdW5jdGlvbiBScWIoYSxiKXtyZXR1cm4gYS5hLl9iKGIpfVxuZnVuY3Rpb24gZm9iKGEsYil7cmV0dXJuIHBiKGEuYyxiKX1cbmZ1bmN0aW9uIGp0KGEsYil7cmV0dXJuIE1oYihhLmIsYil9XG5mdW5jdGlvbiBMcChhLGIpe3JldHVybiBhPmImJmI8SWllfVxuZnVuY3Rpb24gUnliKGEsYil7cmV0dXJuIGEuR2MoYiksYX1cbmZ1bmN0aW9uIFN5YihhLGIpe3JldHVybiB5ZShhLGIpLGF9XG5mdW5jdGlvbiBzQyhhKXtyZXR1cm4gR0IoKSxhP0ZCOkVCfVxuZnVuY3Rpb24gTXFiKGEpe1doYi5jYWxsKHRoaXMsYSwwKX1cbmZ1bmN0aW9uIFB3Yigpe1F3Yi5jYWxsKHRoaXMsbnVsbCl9XG5mdW5jdGlvbiB5QWIoKXtWemIuY2FsbCh0aGlzLG51bGwpfVxuZnVuY3Rpb24gR3FiKGEpe3RoaXMuYz1hO0RxYih0aGlzKX1cbmZ1bmN0aW9uIFBzYigpe0NzYih0aGlzKTtPc2IodGhpcyl9XG5mdW5jdGlvbiBNQWIoYSxiKXtUemIoYSk7YS5hLk5iKGIpfVxuZnVuY3Rpb24gTXliKGEsYil7YS5HYyhiKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHFEYihhLGIpe2EuYS5mPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiB3RGIoYSxiKXthLmEuZD1iO3JldHVybiBhfVxuZnVuY3Rpb24geERiKGEsYil7YS5hLmc9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIHlEYihhLGIpe2EuYS5qPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBCRmIoYSxiKXthLmEuYT1iO3JldHVybiBhfVxuZnVuY3Rpb24gQ0ZiKGEsYil7YS5hLmQ9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIERGYihhLGIpe2EuYS5lPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBFRmIoYSxiKXthLmEuZz1iO3JldHVybiBhfVxuZnVuY3Rpb24gb0diKGEsYil7YS5hLmY9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIFRHYihhKXthLmI9ZmFsc2U7cmV0dXJuIGF9XG5mdW5jdGlvbiBMdGIoKXtMdGI9Y2NiO0t0Yj1uZXcgT3RifVxuZnVuY3Rpb24gVXRiKCl7VXRiPWNjYjtUdGI9bmV3IFd0Yn1cbmZ1bmN0aW9uICR4YigpeyR4Yj1jY2I7WnhiPW5ldyBieWJ9XG5mdW5jdGlvbiAkWWIoKXskWWI9Y2NiO1pZYj1uZXcgZFpifVxuZnVuY3Rpb24gY1BiKCl7Y1BiPWNjYjtiUGI9bmV3IGRQYn1cbmZ1bmN0aW9uIEVBYigpe0VBYj1jY2I7REFiPW5ldyBQQmJ9XG5mdW5jdGlvbiBhJGIoKXthJGI9Y2NiO19aYj1uZXcgUCRifVxuZnVuY3Rpb24gRkRiKCl7RkRiPWNjYjtFRGI9bmV3IEdEYn1cbmZ1bmN0aW9uIHhVYigpe3hVYj1jY2I7d1ViPW5ldyBEVWJ9XG5mdW5jdGlvbiB4MmIoKXt4MmI9Y2NiO3cyYj1uZXcgZDdjfVxuZnVuY3Rpb24gaVZiKCl7aVZiPWNjYjtoVmI9bmV3IGpWYn1cbmZ1bmN0aW9uIG5WYigpe25WYj1jY2I7bVZiPW5ldyBPVmJ9XG5mdW5jdGlvbiBMV2IoKXtMV2I9Y2NiO0tXYj1uZXcgUVdifVxuZnVuY3Rpb24gYjRiKCl7YjRiPWNjYjthNGI9bmV3IGw0Yn1cbmZ1bmN0aW9uIHE5Yigpe3E5Yj1jY2I7cDliPW5ldyB3OWJ9XG5mdW5jdGlvbiBxZ2MoKXtxZ2M9Y2NiO3BnYz1uZXcgZGljfVxuZnVuY3Rpb24gSW1jKCl7SW1jPWNjYjtIbWM9bmV3IFdtY31cbmZ1bmN0aW9uIEdVYygpe0dVYz1jY2I7RlVjPW5ldyBqM2N9XG5mdW5jdGlvbiBpX2MoKXtpX2M9Y2NiO2hfYz1uZXcga19jfVxuZnVuY3Rpb24gc19jKCl7c19jPWNjYjtyX2M9bmV3IHRfY31cbmZ1bmN0aW9uIFIwYygpe1IwYz1jY2I7UTBjPW5ldyBUMGN9XG5mdW5jdGlvbiBWeWMoKXtWeWM9Y2NiO1V5Yz1uZXcgVmVkfVxuZnVuY3Rpb24gRENjKCl7dkNjKCk7dGhpcy5jPW5ldyBKaX1cbmZ1bmN0aW9uIGtfYygpeyRyLmNhbGwodGhpcyxVbmUsMCl9XG5mdW5jdGlvbiByNGMoYSxiKXtYcmIoYS5jLmIsYi5jLGIpfVxuZnVuY3Rpb24gczRjKGEsYil7WHJiKGEuYy5jLGIuYixiKX1cbmZ1bmN0aW9uIEIzYyhhLGIsYyl7U2hiKGEuZCxiLmYsYyl9XG5mdW5jdGlvbiBrS2IoYSxiLGMsZCl7aktiKGEsZCxiLGMpfVxuZnVuY3Rpb24gRTNiKGEsYixjLGQpe0ozYihkLGEsYixjKX1cbmZ1bmN0aW9uIGU5YihhLGIsYyxkKXtmOWIoZCxhLGIsYyl9XG5mdW5jdGlvbiBnM2MoYSxiKXthLmE9Yi5nO3JldHVybiBhfVxuZnVuY3Rpb24gRFFkKGEsYil7cmV0dXJuIHFBKGEuYSxiKX1cbmZ1bmN0aW9uIG5RZChhKXtyZXR1cm4gYS5iP2EuYjphLmF9XG5mdW5jdGlvbiAkT2MoYSl7cmV0dXJuIChhLmMrYS5hKS8yfVxuZnVuY3Rpb24gUGdkKCl7UGdkPWNjYjtPZ2Q9bmV3IEFoZH1cbmZ1bmN0aW9uIEFGZCgpe0FGZD1jY2I7ekZkPW5ldyBCRmR9XG5mdW5jdGlvbiB0RmQoKXt0RmQ9Y2NiO3NGZD1uZXcgdkZkfVxuZnVuY3Rpb24gRUZkKCl7RUZkPWNjYjtERmQ9bmV3IEdGZH1cbmZ1bmN0aW9uIHlGZCgpe3lGZD1jY2I7eEZkPW5ldyBvVWR9XG5mdW5jdGlvbiBKRmQoKXtKRmQ9Y2NiO0lGZD1uZXcgY1pkfVxuZnVuY3Rpb24gblJkKCl7blJkPWNjYjttUmQ9bmV3IHU0ZH1cbmZ1bmN0aW9uIExSZCgpe0xSZD1jY2I7S1JkPW5ldyB5NGR9XG5mdW5jdGlvbiBnNWQoKXtnNWQ9Y2NiO2Y1ZD1uZXcgaDVkfVxuZnVuY3Rpb24gUTZkKCl7UTZkPWNjYjtQNmQ9bmV3IFU2ZH1cbmZ1bmN0aW9uIHBFZCgpe3BFZD1jY2I7b0VkPW5ldyBMcWJ9XG5mdW5jdGlvbiB0WmQoKXt0WmQ9Y2NiO3JaZD1uZXcgUmtifVxuZnVuY3Rpb24gWGdlKCl7WGdlPWNjYjtXZ2U9bmV3IGRoZX1cbmZ1bmN0aW9uIEh6KGEpeyR3bmQuY2xlYXJUaW1lb3V0KGEpfVxuZnVuY3Rpb24gancoYSl7dGhpcy5hPUJEKFFiKGEpLDIyNCl9XG5mdW5jdGlvbiBMdihhKXtyZXR1cm4gQkQoYSw0MikuY2QoKX1cbmZ1bmN0aW9uIHNpYihhKXtyZXR1cm4gYS5iPGEuZC5nYygpfVxuZnVuY3Rpb24gTHBiKGEsYil7cmV0dXJuIHRxYihhLmEsYil9XG5mdW5jdGlvbiBEYmIoYSxiKXtyZXR1cm4geWJiKGEsYik+MH1cbmZ1bmN0aW9uIEdiYihhLGIpe3JldHVybiB5YmIoYSxiKTwwfVxuZnVuY3Rpb24gQ3JiKGEsYil7cmV0dXJuIGEuYS5nZXQoYil9XG5mdW5jdGlvbiBpY2IoYixhKXtyZXR1cm4gYS5zcGxpdChiKX1cbmZ1bmN0aW9uIFZyYihhLGIpe3JldHVybiBNaGIoYS5lLGIpfVxuZnVuY3Rpb24gTnZiKGEpe3JldHVybiB1Q2IoYSksZmFsc2V9XG5mdW5jdGlvbiBSdWIoYSl7S3ViLmNhbGwodGhpcyxhLDIxKX1cbmZ1bmN0aW9uIHdjYihhLGIpe1p5LmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gbXhiKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBHeWIoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHp4KGEpe3l4KCk7V24uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gemxiKGEsYil7RGxiKGEsYS5sZW5ndGgsYil9XG5mdW5jdGlvbiBBbGIoYSxiKXtGbGIoYSxhLmxlbmd0aCxiKX1cbmZ1bmN0aW9uIEFCYihhLGIsYyl7Yi51ZChhLmEuR2UoYykpfVxuZnVuY3Rpb24gdUJiKGEsYixjKXtiLndlKGEuYS5GZShjKSl9XG5mdW5jdGlvbiBHQmIoYSxiLGMpe2IudGQoYS5hLktiKGMpKX1cbmZ1bmN0aW9uIFpxKGEsYixjKXthLk1iKGMpJiZiLnRkKGMpfVxuZnVuY3Rpb24gYUNiKGEsYixjKXthLnNwbGljZShiLDAsYyl9XG5mdW5jdGlvbiBsRGIoYSxiKXtyZXR1cm4gdXFiKGEuZSxiKX1cbmZ1bmN0aW9uIHBqYihhLGIpe3RoaXMuZD1hO3RoaXMuZT1ifVxuZnVuY3Rpb24ga3FiKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBWQmIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIEJFYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gc0JiKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiB5QmIoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIEVCYihhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gS0JiKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBhRGIoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIHRNYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gb09iKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBTT2IoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFNNYihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gTkViKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBWRWIoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHNGYihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gaEhiKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBPSGIoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIEZJYihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gd0xiKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBZUmIoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHpUYihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gclViKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBvV2IoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFNYYihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gazBiKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiB6NWIoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFQ4YihhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gaWJjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBDZWMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIHJmYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gUmZjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBUZmMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIGJnYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gbmdjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBRaGMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uICRoYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gWjBiKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBaVmIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIERmYyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gZGdjKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBCbWMoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIGNXYihhLGIpe3RoaXMuYz1hO3RoaXMuZD1ifVxuZnVuY3Rpb24gSSRiKGEsYil7dGhpcy5lPWE7dGhpcy5kPWJ9XG5mdW5jdGlvbiBVbmMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIE9pYyhhLGIpe3RoaXMuYj1iO3RoaXMuYz1hfVxuZnVuY3Rpb24gQmpjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBZamMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIEdrYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gQnBjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBKcGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFRwYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gY3FjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBvcWMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHlxYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gSHFjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBVcWMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIGFyYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gbXJjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiB6cmMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFByYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gWXJjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBmc2MoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIG5zYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gbnpjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiB6emMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIEt6YyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gWHpjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBEdGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIGxBYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gdUFjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBDQWMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIExBYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gVUFjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBhQmMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHVCYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gREJjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBNQmMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHNHYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gVkljKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBFSWMoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIHFLYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gR0tjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBsTGMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIG1NYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gZk1jKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBaTGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFpNYyhhLGIpe3RoaXMuYj1hO3RoaXMuZD1ifVxuZnVuY3Rpb24gSU9jKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBHUWMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFBRYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gUlFjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBBUmMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHJTYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gVFRjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBfVGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFJVYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gdVZjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBoV2MoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHJXYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24ga1hjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiB1WGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIEFZYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gbCRjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBaJGMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIERfYyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gT19jKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBjMWMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIGNWYihhLGIpe3JldHVybiB1cWIoYS5jLGIpfVxuZnVuY3Rpb24gbm5jKGEsYil7cmV0dXJuIHVxYihiLmIsYSl9XG5mdW5jdGlvbiB4MWMoYSxiKXtyZXR1cm4gLWEuYi5KZShiKX1cbmZ1bmN0aW9uIEQzYyhhLGIpe3JldHVybiB1cWIoYS5nLGIpfVxuZnVuY3Rpb24gTzVjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBhNmMoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIG0yYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gVzJjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBmN2MoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIEc3YyhhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gajhjKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBpYWQoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHJhZChhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gQmFkKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBOYWQoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIGliZChhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gdGJkKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBJYmQoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFViZChhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gZ2NkKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBzY2QoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFljZChhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gdWRkKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBKZGQoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIEVlZChhLGIpeyRyLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gYmZkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBkZmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIGZmZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gS2ZkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBNZmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIE9mZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gdmdkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBxZ2QoYSxiKXskci5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIGpyZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24ga3JkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBtcmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIG5yZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gcXJkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBycmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIHNyZChhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gdHJkKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBEcmQoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIEZyZChhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifVxuZnVuY3Rpb24gSHJkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBKcmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIE9yZChhLGIpe1hxZChhLmEsQkQoYiw1NikpfVxuZnVuY3Rpb24gQkljKGEsYil7Z0ljKGEuYSxCRChiLDExKSl9XG5mdW5jdGlvbiBmSWMoYSxiKXtGSGMoKTtyZXR1cm4gYiE9YX1cbmZ1bmN0aW9uIEFyYigpe3dyYigpO3JldHVybiBuZXcgdnJifVxuZnVuY3Rpb24gQ01jKCl7d01jKCk7dGhpcy5iPW5ldyBUcWJ9XG5mdW5jdGlvbiBOTmMoKXtGTmMoKTt0aGlzLmE9bmV3IFRxYn1cbmZ1bmN0aW9uIGVDYygpe1pCYygpO2FDYy5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gRHNkKGEsYil7JHIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBVcmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIFdyZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24ga0dkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBuR2QoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIGJVZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gelZkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBDMWQoYSxiKXt0aGlzLmQ9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIE1MZChhLGIpe3RoaXMuZD1hO3RoaXMuZT1ifVxuZnVuY3Rpb24gV3VkKGEsYil7dGhpcy5mPWE7dGhpcy5jPWJ9XG5mdW5jdGlvbiBmN2QoYSxiKXt0aGlzLmI9YTt0aGlzLmM9Yn1cbmZ1bmN0aW9uIF96ZChhLGIpe3RoaXMuaT1hO3RoaXMuZz1ifVxuZnVuY3Rpb24gWTFkKGEsYil7dGhpcy5lPWE7dGhpcy5hPWJ9XG5mdW5jdGlvbiBjOGQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uICRJZChhLGIpe2EuaT1udWxsO19JZChhLGIpfVxuZnVuY3Rpb24gaXZkKGEsYil7ISFhJiZSaGIoY3ZkLGEsYil9XG5mdW5jdGlvbiBoQ2QoYSxiKXtyZXR1cm4gcUFkKGEuYSxiKX1cbmZ1bmN0aW9uIGU3ZChhKXtyZXR1cm4gUjJkKGEuYyxhLmIpfVxuZnVuY3Rpb24gV2QoYSl7cmV0dXJuICFhP251bGw6YS5kZCgpfVxuZnVuY3Rpb24gUEQoYSl7cmV0dXJuIGE9PW51bGw/bnVsbDphfVxuZnVuY3Rpb24gS0QoYSl7cmV0dXJuIHR5cGVvZiBhPT09S2hlfVxuZnVuY3Rpb24gTEQoYSl7cmV0dXJuIHR5cGVvZiBhPT09TGhlfVxuZnVuY3Rpb24gTkQoYSl7cmV0dXJuIHR5cGVvZiBhPT09TWhlfVxuZnVuY3Rpb24gRW0oYSxiKXtyZXR1cm4gYS5IZCgpLlhiKGIpfVxuZnVuY3Rpb24gS3EoYSxiKXtyZXR1cm4gaHIoYS5LYygpLGIpfVxuZnVuY3Rpb24gQmJiKGEsYil7cmV0dXJuIHliYihhLGIpPT0wfVxuZnVuY3Rpb24gRWJiKGEsYil7cmV0dXJuIHliYihhLGIpPj0wfVxuZnVuY3Rpb24gS2JiKGEsYil7cmV0dXJuIHliYihhLGIpIT0wfVxuZnVuY3Rpb24gSmRiKGEpe3JldHVybiAnJysodUNiKGEpLGEpfVxuZnVuY3Rpb24gcGZiKGEsYil7cmV0dXJuIGEuc3Vic3RyKGIpfVxuZnVuY3Rpb24gY2coYSl7YWcoYSk7cmV0dXJuIGEuZC5nYygpfVxuZnVuY3Rpb24gb1ZiKGEpe3BWYihhLGEuYyk7cmV0dXJuIGF9XG5mdW5jdGlvbiBSRChhKXtDQ2IoYT09bnVsbCk7cmV0dXJuIGF9XG5mdW5jdGlvbiBEZmIoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9XG5mdW5jdGlvbiBFZmIoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9XG5mdW5jdGlvbiBOZmIoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9XG5mdW5jdGlvbiBQZmIoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9XG5mdW5jdGlvbiBRZmIoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9XG5mdW5jdGlvbiBNZmIoYSxiKXtyZXR1cm4gYS5hKz0nJytiLGF9XG5mdW5jdGlvbiBFc2IoYSxiKXtHc2IoYSxiLGEuYSxhLmEuYSl9XG5mdW5jdGlvbiBGc2IoYSxiKXtHc2IoYSxiLGEuYy5iLGEuYyl9XG5mdW5jdGlvbiBNcWQoYSxiLGMpe1JwZChiLGtxZChhLGMpKX1cbmZ1bmN0aW9uIE5xZChhLGIsYyl7UnBkKGIsa3FkKGEsYykpfVxuZnVuY3Rpb24gRGhlKGEsYil7SGhlKG5ldyBGeWQoYSksYil9XG5mdW5jdGlvbiBjQihhLGIpe2EucS5zZXRUaW1lKFNiYihiKSl9XG5mdW5jdGlvbiBmdmIoYSxiKXtidmIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBqdmIoYSxiKXtidmIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBudmIoYSxiKXtidmIuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBOcWIoYSl7VWhiKHRoaXMpO0xkKHRoaXMsYSl9XG5mdW5jdGlvbiB3bWIoYSl7dENiKGEsMCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBYNmMoYSl7YS5hPTA7YS5iPTA7cmV0dXJuIGF9XG5mdW5jdGlvbiBmM2MoYSxiKXthLmE9Yi5nKzE7cmV0dXJuIGF9XG5mdW5jdGlvbiBQSmMoYSxiKXtyZXR1cm4gYS5qW2IucF09PTJ9XG5mdW5jdGlvbiBfUGIoYSl7cmV0dXJuIFZQYihCRChhLDc5KSl9XG5mdW5jdGlvbiB5SmIoKXt5SmI9Y2NiO3hKYj1hcyh3SmIoKSl9XG5mdW5jdGlvbiBZOGIoKXtZOGI9Y2NiO1g4Yj1hcyhXOGIoKSl9XG5mdW5jdGlvbiBtdCgpe3RoaXMuYj1uZXcgTXFiKEN2KDEyKSl9XG5mdW5jdGlvbiBPdGIoKXt0aGlzLmI9MDt0aGlzLmE9ZmFsc2V9XG5mdW5jdGlvbiBXdGIoKXt0aGlzLmI9MDt0aGlzLmE9ZmFsc2V9XG5mdW5jdGlvbiBzbChhKXt0aGlzLmE9YTtvbC5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gdmwoYSl7dGhpcy5hPWE7b2wuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIE5zZChhLGIpe01zZC5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uICR6ZChhLGIpe0N5ZC5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIG5OZChhLGIpe196ZC5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHM0ZChhLGIpe3A0ZC5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHc0ZChhLGIpe3FSZC5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIHJFZChhLGIpe3BFZCgpO1JoYihvRWQsYSxiKX1cbmZ1bmN0aW9uIGxjYihhLGIpe3JldHVybiBxZmIoYS5hLDAsYil9XG5mdW5jdGlvbiB3dyhhLGIpe3JldHVybiBhLmEuYS5hLmNjKGIpfVxuZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gUEQoYSk9PT1QRChiKX1cbmZ1bmN0aW9uIE1kYihhLGIpe3JldHVybiBLZGIoYS5hLGIuYSl9XG5mdW5jdGlvbiAkZGIoYSxiKXtyZXR1cm4gYmViKGEuYSxiLmEpfVxuZnVuY3Rpb24gc2ViKGEsYil7cmV0dXJuIHVlYihhLmEsYi5hKX1cbmZ1bmN0aW9uIGhmYihhLGIpe3JldHVybiBhLmluZGV4T2YoYil9XG5mdW5jdGlvbiBOeShhLGIpe3JldHVybiBhPT1iPzA6YT8xOi0xfVxuZnVuY3Rpb24ga0IoYSl7cmV0dXJuIGE8MTA/JzAnK2E6JycrYX1cbmZ1bmN0aW9uIE1xKGEpe3JldHVybiBRYihhKSxuZXcgc2woYSl9XG5mdW5jdGlvbiBTQyhhKXtyZXR1cm4gVEMoYS5sLGEubSxhLmgpfVxuZnVuY3Rpb24gSGRiKGEpe3JldHVybiBRRCgodUNiKGEpLGEpKX1cbmZ1bmN0aW9uIElkYihhKXtyZXR1cm4gUUQoKHVDYihhKSxhKSl9XG5mdW5jdGlvbiBOSWIoYSxiKXtyZXR1cm4gYmViKGEuZyxiLmcpfVxuZnVuY3Rpb24gRmJiKGEpe3JldHVybiB0eXBlb2YgYT09PUxoZX1cbmZ1bmN0aW9uIG1XYihhKXtyZXR1cm4gYT09aFdifHxhPT1rV2J9XG5mdW5jdGlvbiBuV2IoYSl7cmV0dXJuIGE9PWhXYnx8YT09aVdifVxuZnVuY3Rpb24gRzFiKGEpe3JldHVybiBKa2IoYS5iLmIsYSwwKX1cbmZ1bmN0aW9uIGxyYihhKXt0aGlzLmE9QXJiKCk7dGhpcy5iPWF9XG5mdW5jdGlvbiBGcmIoYSl7dGhpcy5hPUFyYigpO3RoaXMuYj1hfVxuZnVuY3Rpb24gc3diKGEsYil7RWtiKGEuYSxiKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIFoxYyhhLGIpe0VrYihhLmMsYik7cmV0dXJuIGF9XG5mdW5jdGlvbiBFMmMoYSxiKXtkM2MoYS5hLGIpO3JldHVybiBhfVxuZnVuY3Rpb24gX2djKGEsYil7SGdjKCk7cmV0dXJuIGIuYSs9YX1cbmZ1bmN0aW9uIGJoYyhhLGIpe0hnYygpO3JldHVybiBiLmErPWF9XG5mdW5jdGlvbiBhaGMoYSxiKXtIZ2MoKTtyZXR1cm4gYi5jKz1hfVxuZnVuY3Rpb24gTmxiKGEsYil7S2xiKGEsMCxhLmxlbmd0aCxiKX1cbmZ1bmN0aW9uIHpzYigpe1dxYi5jYWxsKHRoaXMsbmV3ICRyYil9XG5mdW5jdGlvbiBJX2IoKXtCX2IuY2FsbCh0aGlzLDAsMCwwLDApfVxuZnVuY3Rpb24gSTZjKCl7SjZjLmNhbGwodGhpcywwLDAsMCwwKX1cbmZ1bmN0aW9uIGc3YyhhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmJ9XG5mdW5jdGlvbiBmYWQoYSl7cmV0dXJuIGE9PWFhZHx8YT09YmFkfVxuZnVuY3Rpb24gZ2FkKGEpe3JldHVybiBhPT1kYWR8fGE9PV85Y31cbmZ1bmN0aW9uIEp6YyhhKXtyZXR1cm4gYT09RnpjfHxhPT1FemN9XG5mdW5jdGlvbiBmY2QoYSl7cmV0dXJuIGEhPWJjZCYmYSE9Y2NkfVxuZnVuY3Rpb24gb2lkKGEpe3JldHVybiBhLkxnKCkmJmEuTWcoKX1cbmZ1bmN0aW9uIEdmZChhKXtyZXR1cm4gS2tkKEJEKGEsMTE4KSl9XG5mdW5jdGlvbiBrM2MoYSl7cmV0dXJuIGQzYyhuZXcgajNjLGEpfVxuZnVuY3Rpb24geTJkKGEsYil7cmV0dXJuIG5ldyBwNGQoYixhKX1cbmZ1bmN0aW9uIHoyZChhLGIpe3JldHVybiBuZXcgcDRkKGIsYSl9XG5mdW5jdGlvbiB1a2QoYSxiLGMpe3ZrZChhLGIpO3drZChhLGMpfVxuZnVuY3Rpb24gX2tkKGEsYixjKXtjbGQoYSxiKTthbGQoYSxjKX1cbmZ1bmN0aW9uIGJsZChhLGIsYyl7ZGxkKGEsYik7ZWxkKGEsYyl9XG5mdW5jdGlvbiBnbWQoYSxiLGMpe2htZChhLGIpO2ltZChhLGMpfVxuZnVuY3Rpb24gbm1kKGEsYixjKXtvbWQoYSxiKTtwbWQoYSxjKX1cbmZ1bmN0aW9uIGlLZChhLGIpeyRKZChhLGIpO19KZChhLGEuRCl9XG5mdW5jdGlvbiBfdWQoYSl7V3VkLmNhbGwodGhpcyxhLHRydWUpfVxuZnVuY3Rpb24gWGcoYSxiLGMpe1ZnLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBZZ2IoYSl7SGdiKCk7WmdiLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIHJ4Yigpe214Yi5jYWxsKHRoaXMsJ0hlYWQnLDEpfVxuZnVuY3Rpb24gd3hiKCl7bXhiLmNhbGwodGhpcywnVGFpbCcsMyl9XG5mdW5jdGlvbiBDa2IoYSl7YS5jPUtDKFNJLFVoZSwxLDAsNSwxKX1cbmZ1bmN0aW9uIFZqYihhKXthLmE9S0MoU0ksVWhlLDEsOCw1LDEpfVxuZnVuY3Rpb24gTUdiKGEpe0hrYihhLnhmKCksbmV3IFFHYihhKSl9XG5mdW5jdGlvbiB4dGIoYSl7cmV0dXJuIGEhPW51bGw/dGIoYSk6MH1cbmZ1bmN0aW9uIGIyYihhLGIpe3JldHVybiBudGQoYixtcGQoYSkpfVxuZnVuY3Rpb24gYzJiKGEsYil7cmV0dXJuIG50ZChiLG1wZChhKSl9XG5mdW5jdGlvbiBkQWIoYSxiKXtyZXR1cm4gYVthLmxlbmd0aF09Yn1cbmZ1bmN0aW9uIGdBYihhLGIpe3JldHVybiBhW2EubGVuZ3RoXT1ifVxuZnVuY3Rpb24gVnEoYSl7cmV0dXJuIGxyKGEuYi5LYygpLGEuYSl9XG5mdW5jdGlvbiBkcWQoYSxiKXtyZXR1cm4gX28ocW8oYS5kKSxiKX1cbmZ1bmN0aW9uIGVxZChhLGIpe3JldHVybiBfbyhxbyhhLmcpLGIpfVxuZnVuY3Rpb24gZnFkKGEsYil7cmV0dXJuIF9vKHFvKGEuaiksYil9XG5mdW5jdGlvbiBPc2QoYSxiKXtNc2QuY2FsbCh0aGlzLGEuYixiKX1cbmZ1bmN0aW9uIHEwYihhKXtCX2IuY2FsbCh0aGlzLGEsYSxhLGEpfVxuZnVuY3Rpb24gSE9iKGEpe2EuYiYmTE9iKGEpO3JldHVybiBhLmF9XG5mdW5jdGlvbiBJT2IoYSl7YS5iJiZMT2IoYSk7cmV0dXJuIGEuY31cbmZ1bmN0aW9uIHV5YihhLGIpe2lmKGx5Yil7cmV0dXJufWEuYj1ifVxuZnVuY3Rpb24gbHpkKGEsYixjKXtOQyhhLGIsYyk7cmV0dXJuIGN9XG5mdW5jdGlvbiBtQmMoYSxiLGMpe05DKGEuY1tiLmddLGIuZyxjKX1cbmZ1bmN0aW9uIF9IZChhLGIsYyl7QkQoYS5jLDY5KS5YaChiLGMpfVxuZnVuY3Rpb24gd2ZkKGEsYixjKXtibGQoYyxjLmkrYSxjLmorYil9XG5mdW5jdGlvbiBVT2QoYSxiKXt3dGQoVktkKGEuYSksWE9kKGIpKX1cbmZ1bmN0aW9uIGJUZChhLGIpe3d0ZChRU2QoYS5hKSxlVGQoYikpfVxuZnVuY3Rpb24gTGdlKGEpe3dmZSgpO3hmZS5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBDQWQoYSl7cmV0dXJuIGE9PW51bGw/MDp0YihhKX1cbmZ1bmN0aW9uIGZOYygpe2ZOYz1jY2I7ZU5jPW5ldyBScGIodjEpfVxuZnVuY3Rpb24gaDBkKCl7aDBkPWNjYjtuZXcgaTBkO25ldyBSa2J9XG5mdW5jdGlvbiBpMGQoKXtuZXcgTHFiO25ldyBMcWI7bmV3IExxYn1cbmZ1bmN0aW9uIEdBKCl7R0E9Y2NiO2ZBKCk7RkE9bmV3IExxYn1cbmZ1bmN0aW9uIEl5KCl7SXk9Y2NiOyR3bmQuTWF0aC5sb2coMil9XG5mdW5jdGlvbiBVVmQoKXtVVmQ9Y2NiO1RWZD0oQUZkKCksekZkKX1cbmZ1bmN0aW9uIF9nZSgpe3Rocm93IHZiYihuZXcgY2diKEN4ZSkpfVxuZnVuY3Rpb24gb2hlKCl7dGhyb3cgdmJiKG5ldyBjZ2IoQ3hlKSl9XG5mdW5jdGlvbiBjaGUoKXt0aHJvdyB2YmIobmV3IGNnYihEeGUpKX1cbmZ1bmN0aW9uIHJoZSgpe3Rocm93IHZiYihuZXcgY2diKER4ZSkpfVxuZnVuY3Rpb24gTWcoYSl7dGhpcy5hPWE7R2cuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gdXAoYSl7dGhpcy5hPWE7cmYuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gQnAoYSl7dGhpcy5hPWE7cmYuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gT2tiKGEsYil7TWxiKGEuYyxhLmMubGVuZ3RoLGIpfVxuZnVuY3Rpb24gbGxiKGEpe3JldHVybiBhLmE8YS5jLmMubGVuZ3RofVxuZnVuY3Rpb24gRXFiKGEpe3JldHVybiBhLmE8YS5jLmEubGVuZ3RofVxuZnVuY3Rpb24gTnRiKGEsYil7cmV0dXJuIGEuYT9hLmI6Yi5EZSgpfVxuZnVuY3Rpb24gYmViKGEsYil7cmV0dXJuIGE8Yj8tMTphPmI/MTowfVxuZnVuY3Rpb24gRGViKGEsYil7cmV0dXJuIHliYihhLGIpPjA/YTpifVxuZnVuY3Rpb24gVEMoYSxiLGMpe3JldHVybiB7bDphLG06YixoOmN9fVxuZnVuY3Rpb24gQ3RiKGEsYil7YS5hIT1udWxsJiZCSWMoYixhLmEpfVxuZnVuY3Rpb24gQ3NiKGEpe2EuYT1uZXcganRiO2EuYz1uZXcganRifVxuZnVuY3Rpb24gaERiKGEpe3RoaXMuYj1hO3RoaXMuYT1uZXcgUmtifVxuZnVuY3Rpb24gZE9iKGEpe3RoaXMuYj1uZXcgcE9iO3RoaXMuYT1hfVxuZnVuY3Rpb24gcV9iKGEpe25fYi5jYWxsKHRoaXMpO3RoaXMuYT1hfVxuZnVuY3Rpb24gdHhiKCl7bXhiLmNhbGwodGhpcywnUmFuZ2UnLDIpfVxuZnVuY3Rpb24gYlViKCl7WlRiKCk7dGhpcy5hPW5ldyBMMmMoelApfVxuZnVuY3Rpb24gQmgoYSxiKXtRYihiKTtBaChhKS5KYyhuZXcgVncpfVxuZnVuY3Rpb24gZktjKGEsYil7RkpjKCk7cmV0dXJuIGIubi5iKz1hfVxuZnVuY3Rpb24gVGdjKGEsYixjKXtyZXR1cm4gUmhiKGEuZyxjLGIpfVxuZnVuY3Rpb24gTEpjKGEsYixjKXtyZXR1cm4gUmhiKGEuayxjLGIpfVxuZnVuY3Rpb24gcjFjKGEsYil7cmV0dXJuIFJoYihhLmEsYi5hLGIpfVxuZnVuY3Rpb24gakJjKGEsYixjKXtyZXR1cm4gaEJjKGIsYyxhLmMpfVxuZnVuY3Rpb24gRTZjKGEpe3JldHVybiBuZXcgZjdjKGEuYyxhLmQpfVxuZnVuY3Rpb24gRjZjKGEpe3JldHVybiBuZXcgZjdjKGEuYyxhLmQpfVxuZnVuY3Rpb24gUjZjKGEpe3JldHVybiBuZXcgZjdjKGEuYSxhLmIpfVxuZnVuY3Rpb24gQ1FkKGEsYil7cmV0dXJuIGhBKGEuYSxiLG51bGwpfVxuZnVuY3Rpb24gZmVjKGEpe1FaYihhLG51bGwpO1JaYihhLG51bGwpfVxuZnVuY3Rpb24gQU9jKGEpe0JPYyhhLG51bGwpO0NPYyhhLG51bGwpfVxuZnVuY3Rpb24gdTRkKCl7cVJkLmNhbGwodGhpcyxudWxsLG51bGwpfVxuZnVuY3Rpb24geTRkKCl7UlJkLmNhbGwodGhpcyxudWxsLG51bGwpfVxuZnVuY3Rpb24gYTdkKGEpe3RoaXMuYT1hO0xxYi5jYWxsKHRoaXMpfVxuZnVuY3Rpb24gUHAoYSl7dGhpcy5iPShtbWIoKSxuZXcgaW9iKGEpKX1cbmZ1bmN0aW9uIFB5KGEpe2Euaj1LQyhWSSxuaWUsMzEwLDAsMCwxKX1cbmZ1bmN0aW9uIG9BZChhLGIsYyl7YS5jLlZjKGIsQkQoYywxMzMpKX1cbmZ1bmN0aW9uIEdBZChhLGIsYyl7YS5jLmppKGIsQkQoYywxMzMpKX1cbmZ1bmN0aW9uIEpMZChhLGIpe1V4ZChhKTthLkdjKEJEKGIsMTUpKX1cbmZ1bmN0aW9uIGI3ZChhLGIpe3JldHVybiB0MmQoYS5jLGEuYixiKX1cbmZ1bmN0aW9uIEJ2KGEsYil7cmV0dXJuIG5ldyBRdihhLktjKCksYil9XG5mdW5jdGlvbiBMcShhLGIpe3JldHVybiBycihhLktjKCksYikhPS0xfVxuZnVuY3Rpb24gU3FiKGEsYil7cmV0dXJuIGEuYS5CYyhiKSE9bnVsbH1cbmZ1bmN0aW9uIHByKGEpe3JldHVybiBhLk9iKCk/YS5QYigpOm51bGx9XG5mdW5jdGlvbiB5ZmIoYSl7cmV0dXJuIHpmYihhLDAsYS5sZW5ndGgpfVxuZnVuY3Rpb24gSkQoYSxiKXtyZXR1cm4gYSE9bnVsbCYmQUQoYSxiKX1cbmZ1bmN0aW9uICRBKGEsYil7YS5xLnNldEhvdXJzKGIpO1lBKGEsYil9XG5mdW5jdGlvbiBZcmIoYSxiKXtpZihhLmMpe2pzYihiKTtpc2IoYil9fVxuZnVuY3Rpb24gbmsoYSxiLGMpe0JEKGEuS2IoYyksMTY0KS5OYihiKX1cbmZ1bmN0aW9uIFJKYyhhLGIsYyl7U0pjKGEsYixjKTtyZXR1cm4gY31cbmZ1bmN0aW9uIEV1YihhLGIsYyl7YS5hPWJeMTUwMjthLmI9Y15ra2V9XG5mdW5jdGlvbiB4SGIoYSxiLGMpe3JldHVybiBhLmFbYi5nXVtjLmddfVxuZnVuY3Rpb24gUkVjKGEsYil7cmV0dXJuIGEuYVtiLmMucF1bYi5wXX1cbmZ1bmN0aW9uIGFFYyhhLGIpe3JldHVybiBhLmVbYi5jLnBdW2IucF19XG5mdW5jdGlvbiB0RWMoYSxiKXtyZXR1cm4gYS5jW2IuYy5wXVtiLnBdfVxuZnVuY3Rpb24gT0pjKGEsYil7cmV0dXJuIGEualtiLnBdPWFLYyhiKX1cbmZ1bmN0aW9uIGs1YyhhLGIpe3JldHVybiBjZmIoYS5mLGIudGcoKSl9XG5mdW5jdGlvbiBJc2QoYSxiKXtyZXR1cm4gY2ZiKGEuYixiLnRnKCkpfVxuZnVuY3Rpb24gU2ZkKGEsYil7cmV0dXJuIGEuYTxLY2IoYik/LTE6MX1cbmZ1bmN0aW9uIFpEYyhhLGIsYyl7cmV0dXJuIGM/YiE9MDpiIT1hLTF9XG5mdW5jdGlvbiBfNmMoYSxiLGMpe2EuYT1iO2EuYj1jO3JldHVybiBhfVxuZnVuY3Rpb24gWTZjKGEsYil7YS5hKj1iO2EuYio9YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIG11ZChhLGIsYyl7TkMoYS5nLGIsYyk7cmV0dXJuIGN9XG5mdW5jdGlvbiBDSGIoYSxiLGMsZCl7TkMoYS5hW2IuZ10sYy5nLGQpfVxuZnVuY3Rpb24gRVFiKGEsYil7TzZjKGIsYS5hLmEuYSxhLmEuYS5iKX1cbmZ1bmN0aW9uIE96ZChhKXthLmE9QkQoQWpkKGEuYi5hLDQpLDEyNil9XG5mdW5jdGlvbiBXemQoYSl7YS5hPUJEKEFqZChhLmIuYSw0KSwxMjYpfVxuZnVuY3Rpb24gb3RkKGEpe3l0YihhLGh1ZSk7UmxkKGEsZ3RkKGEpKX1cbmZ1bmN0aW9uIEF0Yigpe0F0Yj1jY2I7enRiPW5ldyBGdGIobnVsbCl9XG5mdW5jdGlvbiBJdmIoKXtJdmI9Y2NiO0l2YigpO0h2Yj1uZXcgT3ZifVxuZnVuY3Rpb24gRklkKCl7dGhpcy5CYnw9MjU2O3RoaXMuQmJ8PTUxMn1cbmZ1bmN0aW9uIEZ5ZChhKXt0aGlzLmk9YTt0aGlzLmY9dGhpcy5pLmp9XG5mdW5jdGlvbiB4TWQoYSxiLGMpe3BNZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gQk1kKGEsYixjKXt4TWQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIEs0ZChhLGIsYyl7eE1kLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBONGQoYSxiLGMpe0JNZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gWDRkKGEsYixjKXtwTWQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIF80ZChhLGIsYyl7cE1kLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBDNGQoYSxiLGMpe2syZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gRzRkKGEsYixjKXtrMmQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIEk0ZChhLGIsYyl7QzRkLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBjNWQoYSxiLGMpe1g0ZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gemYoYSxiKXt0aGlzLmE9YTtyZi5jYWxsKHRoaXMsYil9XG5mdW5jdGlvbiBhaihhLGIpe3RoaXMuYT1hO3BjLmNhbGwodGhpcyxiKX1cbmZ1bmN0aW9uIGtqKGEsYil7dGhpcy5hPWE7cGMuY2FsbCh0aGlzLGIpfVxuZnVuY3Rpb24gSmooYSxiKXt0aGlzLmE9YTtwYy5jYWxsKHRoaXMsYil9XG5mdW5jdGlvbiBSaihhKXt0aGlzLmE9YTtzai5jYWxsKHRoaXMsYS5kKX1cbmZ1bmN0aW9uIHNoZShhKXt0aGlzLmM9YTt0aGlzLmE9dGhpcy5jLmF9XG5mdW5jdGlvbiB4bChhLGIpe3RoaXMuYT1iO3BjLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIFFvKGEsYil7dGhpcy5hPWI7TG8uY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gb3AoYSxiKXt0aGlzLmE9YTtMby5jYWxsKHRoaXMsYil9XG5mdW5jdGlvbiByaihhLGIpe3JldHVybiBSbChYbShhLmMpKS5YYihiKX1cbmZ1bmN0aW9uIEViKGEsYil7cmV0dXJuIERiKGEsbmV3IFVmYixiKS5hfVxuZnVuY3Rpb24gdXIoYSxiKXtRYihiKTtyZXR1cm4gbmV3IEdyKGEsYil9XG5mdW5jdGlvbiBHcihhLGIpe3RoaXMuYT1iO0JyLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIEhzKGEpe3RoaXMuYj1hO3RoaXMuYT10aGlzLmIuYS5lfVxuZnVuY3Rpb24gRWcoYSl7YS5iLlFiKCk7LS1hLmQuZi5kO2JnKGEuZCl9XG5mdW5jdGlvbiBVayhhKXtGay5jYWxsKHRoaXMsQkQoUWIoYSksMzUpKX1cbmZ1bmN0aW9uIGlsKGEpe0ZrLmNhbGwodGhpcyxCRChRYihhKSwzNSkpfVxuZnVuY3Rpb24gaXMoKXskci5jYWxsKHRoaXMsJ0lOU1RBTkNFJywwKX1cbmZ1bmN0aW9uIExiKGEpe2lmKCFhKXt0aHJvdyB2YmIobmV3IFZkYil9fVxuZnVuY3Rpb24gVWIoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgWWRiKX19XG5mdW5jdGlvbiBvdChhKXtpZighYSl7dGhyb3cgdmJiKG5ldyB1dGIpfX1cbmZ1bmN0aW9uIEk2ZCgpe0k2ZD1jY2I7ZzVkKCk7SDZkPW5ldyBKNmR9XG5mdW5jdGlvbiBCY2IoKXtCY2I9Y2NiO3pjYj1mYWxzZTtBY2I9dHJ1ZX1cbmZ1bmN0aW9uIEpmYihhKXttY2IuY2FsbCh0aGlzLCh1Q2IoYSksYSkpfVxuZnVuY3Rpb24gV2ZiKGEpe21jYi5jYWxsKHRoaXMsKHVDYihhKSxhKSl9XG5mdW5jdGlvbiBJbmIoYSl7bG5iLmNhbGwodGhpcyxhKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIFhuYihhKXtEbmIuY2FsbCh0aGlzLGEpO3RoaXMuYT1hfVxuZnVuY3Rpb24gWm9iKGEpe3pvYi5jYWxsKHRoaXMsYSk7dGhpcy5hPWF9XG5mdW5jdGlvbiBYeSgpe1B5KHRoaXMpO1J5KHRoaXMpO3RoaXMuX2QoKX1cbmZ1bmN0aW9uIFF2KGEsYil7dGhpcy5hPWI7QnIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gYXUoYSxiKXtyZXR1cm4gbmV3IHh1KGEuYSxhLmIsYil9XG5mdW5jdGlvbiBrZmIoYSxiKXtyZXR1cm4gYS5sYXN0SW5kZXhPZihiKX1cbmZ1bmN0aW9uIGlmYihhLGIsYyl7cmV0dXJuIGEuaW5kZXhPZihiLGMpfVxuZnVuY3Rpb24geGZiKGEpe3JldHVybiBhPT1udWxsP1hoZTpmY2IoYSl9XG5mdW5jdGlvbiBueihhKXtyZXR1cm4gYT09bnVsbD9udWxsOmEubmFtZX1cbmZ1bmN0aW9uIEV0YihhKXtyZXR1cm4gYS5hIT1udWxsP2EuYTpudWxsfVxuZnVuY3Rpb24gb3IoYSl7cmV0dXJuIFdzYihhLmEpP25yKGEpOm51bGx9XG5mdW5jdGlvbiBGeGIoYSxiKXtyZXR1cm4gSndiKGEuYSxiKSE9bnVsbH1cbmZ1bmN0aW9uIHVxYihhLGIpe3JldHVybiAhIWImJmEuYltiLmddPT1ifVxuZnVuY3Rpb24gRkNiKGEpe3JldHVybiBhLiRIfHwoYS4kSD0rK0VDYil9XG5mdW5jdGlvbiBhRChhKXtyZXR1cm4gYS5sK2EubSpIamUrYS5oKklqZX1cbmZ1bmN0aW9uIHBEYihhLGIpe0VrYihiLmEsYS5hKTtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gdkRiKGEsYil7RWtiKGIuYixhLmEpO3JldHVybiBhLmF9XG5mdW5jdGlvbiBuR2IoYSxiKXtFa2IoYi5hLGEuYSk7cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIEJ0YihhKXtzQ2IoYS5hIT1udWxsKTtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gQXNiKGEpe1dxYi5jYWxsKHRoaXMsbmV3IF9yYihhKSl9XG5mdW5jdGlvbiBHVWIoYSxiKXtIVWIuY2FsbCh0aGlzLGEsYixudWxsKX1cbmZ1bmN0aW9uIGN4YihhKXt0aGlzLmE9YTtCamIuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gQ0tiKCl7Q0tiPWNjYjtCS2I9bmV3IE1zZCh0bGUsMCl9XG5mdW5jdGlvbiBORmIoYSxiKXsrK2EuYjtyZXR1cm4gRWtiKGEuYSxiKX1cbmZ1bmN0aW9uIE9GYihhLGIpeysrYS5iO3JldHVybiBMa2IoYS5hLGIpfVxuZnVuY3Rpb24gbjZiKGEsYil7cmV0dXJuIEtkYihhLm4uYSxiLm4uYSl9XG5mdW5jdGlvbiBXS2IoYSxiKXtyZXR1cm4gS2RiKGEuYy5kLGIuYy5kKX1cbmZ1bmN0aW9uIGdMYihhLGIpe3JldHVybiBLZGIoYS5jLmMsYi5jLmMpfVxuZnVuY3Rpb24gelhiKGEsYil7cmV0dXJuIEJEKFFjKGEuYixiKSwxNSl9XG5mdW5jdGlvbiBzN2IoYSxiKXtyZXR1cm4gYS5uLmI9KHVDYihiKSxiKX1cbmZ1bmN0aW9uIHQ3YihhLGIpe3JldHVybiBhLm4uYj0odUNiKGIpLGIpfVxuZnVuY3Rpb24gYTFiKGEpe3JldHVybiBsbGIoYS5hKXx8bGxiKGEuYil9XG5mdW5jdGlvbiBmQmMoYSxiLGMpe3JldHVybiBnQmMoYSxiLGMsYS5iKX1cbmZ1bmN0aW9uIGlCYyhhLGIsYyl7cmV0dXJuIGdCYyhhLGIsYyxhLmMpfVxuZnVuY3Rpb24gaTNjKGEsYixjKXtCRChCMmMoYSxiKSwyMSkuRmMoYyl9XG5mdW5jdGlvbiB4QmQoYSxiLGMpe3ZBZChhLmEsYyk7dUFkKGEuYSxiKX1cbmZ1bmN0aW9uIHFSZChhLGIpe25SZCgpO3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gUlJkKGEsYil7TFJkKCk7dGhpcy5iPWE7dGhpcy5jPWJ9XG5mdW5jdGlvbiBoaGQoYSxiKXtSZ2QoKTt0aGlzLmY9Yjt0aGlzLmQ9YX1cbmZ1bmN0aW9uIHFjKGEsYil7U2IoYixhKTt0aGlzLmQ9YTt0aGlzLmM9Yn1cbmZ1bmN0aW9uIG41YihhKXt2YXIgYjtiPWEuYTthLmE9YS5iO2EuYj1ifVxuZnVuY3Rpb24gY2hjKGEpe0hnYygpO3JldHVybiAhIWEmJiFhLmRjKCl9XG5mdW5jdGlvbiBBZmUoYSl7Kyt2ZmU7cmV0dXJuIG5ldyBsZ2UoMyxhKX1cbmZ1bmN0aW9uIGptKGEsYil7cmV0dXJuIG5ldyBWcChhLGEuZ2MoKSxiKX1cbmZ1bmN0aW9uIG5zKGEpe2hzKCk7cmV0dXJuIGVzKChxcygpLHBzKSxhKX1cbmZ1bmN0aW9uIE95ZChhKXt0aGlzLmQ9YTtGeWQuY2FsbCh0aGlzLGEpfVxuZnVuY3Rpb24gJHlkKGEpe3RoaXMuYz1hO0Z5ZC5jYWxsKHRoaXMsYSl9XG5mdW5jdGlvbiBiemQoYSl7dGhpcy5jPWE7T3lkLmNhbGwodGhpcyxhKX1cbmZ1bmN0aW9uIHNnYygpe3FnYygpO3RoaXMuYj1uZXcgeWdjKHRoaXMpfVxuZnVuY3Rpb24gUHUoYSl7WGooYSxKaWUpO3JldHVybiBuZXcgU2tiKGEpfVxuZnVuY3Rpb24gVnooYSl7UnooKTtyZXR1cm4gcGFyc2VJbnQoYSl8fC0xfVxuZnVuY3Rpb24gcWZiKGEsYixjKXtyZXR1cm4gYS5zdWJzdHIoYixjLWIpfVxuZnVuY3Rpb24gZ2ZiKGEsYixjKXtyZXR1cm4gaWZiKGEsd2ZiKGIpLGMpfVxuZnVuY3Rpb24gUGtiKGEpe3JldHVybiBaQmIoYS5jLGEuYy5sZW5ndGgpfVxuZnVuY3Rpb24gWXIoYSl7cmV0dXJuIGEuZiE9bnVsbD9hLmY6JycrYS5nfVxuZnVuY3Rpb24gWnIoYSl7cmV0dXJuIGEuZiE9bnVsbD9hLmY6JycrYS5nfVxuZnVuY3Rpb24gSHNiKGEpe3NDYihhLmIhPTApO3JldHVybiBhLmEuYS5jfVxuZnVuY3Rpb24gSXNiKGEpe3NDYihhLmIhPTApO3JldHVybiBhLmMuYi5jfVxuZnVuY3Rpb24gQ21kKGEpe0pEKGEsMTUwKSYmQkQoYSwxNTApLkdoKCl9XG5mdW5jdGlvbiBXd2IoYSl7cmV0dXJuIGEuYj1CRCh0aWIoYS5hKSw0Mil9XG5mdW5jdGlvbiBQdGIoYSl7THRiKCk7dGhpcy5iPWE7dGhpcy5hPXRydWV9XG5mdW5jdGlvbiBYdGIoYSl7VXRiKCk7dGhpcy5iPWE7dGhpcy5hPXRydWV9XG5mdW5jdGlvbiBUcmIoYSl7YS5kPW5ldyBrc2IoYSk7YS5lPW5ldyBMcWJ9XG5mdW5jdGlvbiBta2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgQXBiKX19XG5mdW5jdGlvbiBsQ2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgVmRiKX19XG5mdW5jdGlvbiB5Q2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgWWRiKX19XG5mdW5jdGlvbiBxQ2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgdGNiKX19XG5mdW5jdGlvbiBzQ2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgdXRiKX19XG5mdW5jdGlvbiBrc2IoYSl7bHNiLmNhbGwodGhpcyxhLG51bGwsbnVsbCl9XG5mdW5jdGlvbiBkUGIoKXskci5jYWxsKHRoaXMsJ1BPTFlPTUlOTycsMCl9XG5mdW5jdGlvbiBDZyhhLGIsYyxkKXtxZy5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiB6a2MoYSxiKXtna2MoKTtyZXR1cm4gUmMoYSxiLmUsYil9XG5mdW5jdGlvbiBhemMoYSxiLGMpe1Z5YygpO3JldHVybiBjLnFnKGEsYil9XG5mdW5jdGlvbiB3TmIoYSxiKXtyZXR1cm4gISFhLnEmJk1oYihhLnEsYil9XG5mdW5jdGlvbiBKUmIoYSxiKXtyZXR1cm4gYT4wP2IqYi9hOmIqYioxMDB9XG5mdW5jdGlvbiBDUmIoYSxiKXtyZXR1cm4gYT4wP2IvKGEqYSk6YioxMDB9XG5mdW5jdGlvbiBHMmMoYSxiLGMpe3JldHVybiBFa2IoYixJMmMoYSxjKSl9XG5mdW5jdGlvbiB0M2MoYSxiLGMpe3AzYygpO2EuWGUoYikmJmMudGQoYSl9XG5mdW5jdGlvbiBTdChhLGIsYyl7dmFyIGQ7ZD1hLlpjKGIpO2QuUmIoYyl9XG5mdW5jdGlvbiBPNmMoYSxiLGMpe2EuYSs9YjthLmIrPWM7cmV0dXJuIGF9XG5mdW5jdGlvbiBaNmMoYSxiLGMpe2EuYSo9YjthLmIqPWM7cmV0dXJuIGF9XG5mdW5jdGlvbiBiN2MoYSxiLGMpe2EuYS09YjthLmItPWM7cmV0dXJuIGF9XG5mdW5jdGlvbiBhN2MoYSxiKXthLmE9Yi5hO2EuYj1iLmI7cmV0dXJuIGF9XG5mdW5jdGlvbiBWNmMoYSl7YS5hPS1hLmE7YS5iPS1hLmI7cmV0dXJuIGF9XG5mdW5jdGlvbiBEaWMoYSl7dGhpcy5jPWE7dGhpcy5hPTE7dGhpcy5iPTF9XG5mdW5jdGlvbiB4ZWQoYSl7dGhpcy5jPWE7ZGxkKGEsMCk7ZWxkKGEsMCl9XG5mdW5jdGlvbiB1N2MoYSl7UHNiLmNhbGwodGhpcyk7bjdjKHRoaXMsYSl9XG5mdW5jdGlvbiBBWGIoYSl7eFhiKCk7eVhiKHRoaXMpO3RoaXMubWYoYSl9XG5mdW5jdGlvbiBHUmQoYSxiKXtuUmQoKTtxUmQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBkU2QoYSxiKXtMUmQoKTtSUmQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBoU2QoYSxiKXtMUmQoKTtSUmQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBmU2QoYSxiKXtMUmQoKTtkU2QuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBzSWQoYSxiLGMpe2RJZC5jYWxsKHRoaXMsYSxiLGMsMil9XG5mdW5jdGlvbiB6WGQoYSxiKXtVVmQoKTtuWGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBCWGQoYSxiKXtVVmQoKTt6WGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBEWGQoYSxiKXtVVmQoKTt6WGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBGWGQoYSxiKXtVVmQoKTtEWGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBQWGQoYSxiKXtVVmQoKTtuWGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBSWGQoYSxiKXtVVmQoKTtQWGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBYWGQoYSxiKXtVVmQoKTtuWGQuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBwQWQoYSxiKXtyZXR1cm4gYS5jLkZjKEJEKGIsMTMzKSl9XG5mdW5jdGlvbiB3MWQoYSxiLGMpe3JldHVybiBWMWQocDFkKGEsYiksYyl9XG5mdW5jdGlvbiBOMmQoYSxiLGMpe3JldHVybiBiLlFrKGEuZSxhLmMsYyl9XG5mdW5jdGlvbiBQMmQoYSxiLGMpe3JldHVybiBiLlJrKGEuZSxhLmMsYyl9XG5mdW5jdGlvbiBhM2QoYSxiKXtyZXR1cm4geGlkKGEuZSxCRChiLDQ5KSl9XG5mdW5jdGlvbiBhVGQoYSxiLGMpe3Z0ZChRU2QoYS5hKSxiLGVUZChjKSl9XG5mdW5jdGlvbiBUT2QoYSxiLGMpe3Z0ZChWS2QoYS5hKSxiLFhPZChjKSl9XG5mdW5jdGlvbiB5cGIoYSxiKXtiLiRtb2RDb3VudD1hLiRtb2RDb3VudH1cbmZ1bmN0aW9uIE1VYygpe01VYz1jY2I7TFVjPW5ldyBMc2QoJ3Jvb3QnKX1cbmZ1bmN0aW9uIExDZCgpe0xDZD1jY2I7S0NkPW5ldyBsRGQ7bmV3IE5EZH1cbmZ1bmN0aW9uIEtWYygpe3RoaXMuYT1uZXcgSHA7dGhpcy5iPW5ldyBIcH1cbmZ1bmN0aW9uIEZVZCgpe2hKZC5jYWxsKHRoaXMpO3RoaXMuQmJ8PVRqZX1cbmZ1bmN0aW9uIHRfYygpeyRyLmNhbGwodGhpcywnR1JPV19UUkVFJywwKX1cbmZ1bmN0aW9uIEM5ZChhKXtyZXR1cm4gYT09bnVsbD9udWxsOmNkZShhKX1cbmZ1bmN0aW9uIEc5ZChhKXtyZXR1cm4gYT09bnVsbD9udWxsOmpkZShhKX1cbmZ1bmN0aW9uIEo5ZChhKXtyZXR1cm4gYT09bnVsbD9udWxsOmZjYihhKX1cbmZ1bmN0aW9uIEs5ZChhKXtyZXR1cm4gYT09bnVsbD9udWxsOmZjYihhKX1cbmZ1bmN0aW9uIGZkYihhKXtpZihhLm8hPW51bGwpe3JldHVybn12ZGIoYSl9XG5mdW5jdGlvbiBERChhKXtDQ2IoYT09bnVsbHx8S0QoYSkpO3JldHVybiBhfVxuZnVuY3Rpb24gRUQoYSl7Q0NiKGE9PW51bGx8fExEKGEpKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIEdEKGEpe0NDYihhPT1udWxsfHxORChhKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBnQihhKXt0aGlzLnE9bmV3ICR3bmQuRGF0ZShTYmIoYSkpfVxuZnVuY3Rpb24gTWYoYSxiKXt0aGlzLmM9YTtuZS5jYWxsKHRoaXMsYSxiKX1cbmZ1bmN0aW9uIFNmKGEsYil7dGhpcy5hPWE7TWYuY2FsbCh0aGlzLGEsYil9XG5mdW5jdGlvbiBIZyhhLGIpe3RoaXMuZD1hO0RnKHRoaXMpO3RoaXMuYj1ifVxuZnVuY3Rpb24gYkFiKGEsYil7VnpiLmNhbGwodGhpcyxhKTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIHZBYihhLGIpe1Z6Yi5jYWxsKHRoaXMsYSk7dGhpcy5hPWJ9XG5mdW5jdGlvbiBzTmIoYSl7cE5iLmNhbGwodGhpcywwLDApO3RoaXMuZj1hfVxuZnVuY3Rpb24gVmcoYSxiLGMpe2RnLmNhbGwodGhpcyxhLGIsYyxudWxsKX1cbmZ1bmN0aW9uIFlnKGEsYixjKXtkZy5jYWxsKHRoaXMsYSxiLGMsbnVsbCl9XG5mdW5jdGlvbiBQeGIoYSxiLGMpe3JldHVybiBhLnVlKGIsYyk8PTA/YzpifVxuZnVuY3Rpb24gUXhiKGEsYixjKXtyZXR1cm4gYS51ZShiLGMpPD0wP2I6Y31cbmZ1bmN0aW9uIGc0YyhhLGIpe3JldHVybiBCRChXcmIoYS5iLGIpLDE0OSl9XG5mdW5jdGlvbiBpNGMoYSxiKXtyZXR1cm4gQkQoV3JiKGEuYyxiKSwyMjkpfVxuZnVuY3Rpb24gd2ljKGEpe3JldHVybiBCRChJa2IoYS5hLGEuYiksMjg3KX1cbmZ1bmN0aW9uIEI2YyhhKXtyZXR1cm4gbmV3IGY3YyhhLmMsYS5kK2EuYSl9XG5mdW5jdGlvbiBlTGMoYSl7cmV0dXJuIEZKYygpLEp6YyhCRChhLDE5NykpfVxuZnVuY3Rpb24gJEpiKCl7JEpiPWNjYjtaSmI9cHFiKCh0ZGQoKSxzZGQpKX1cbmZ1bmN0aW9uIGZPYihhLGIpe2IuYT9nT2IoYSxiKTpGeGIoYS5hLGIuYil9XG5mdW5jdGlvbiBxeWIoYSxiKXtpZihseWIpe3JldHVybn1Fa2IoYS5hLGIpfVxuZnVuY3Rpb24gRjJiKGEsYil7eDJiKCk7cmV0dXJuIGZfYihiLmQuaSxhKX1cbmZ1bmN0aW9uIF85YihhLGIpe0k5YigpO3JldHVybiBuZXcgZ2FjKGIsYSl9XG5mdW5jdGlvbiBfSGIoYSxiKXt5dGIoYixsbGUpO2EuZj1iO3JldHVybiBhfVxuZnVuY3Rpb24gS2xkKGEsYixjKXtjPV9oZChhLGIsMyxjKTtyZXR1cm4gY31cbmZ1bmN0aW9uIGJtZChhLGIsYyl7Yz1faGQoYSxiLDYsYyk7cmV0dXJuIGN9XG5mdW5jdGlvbiBrcGQoYSxiLGMpe2M9X2hkKGEsYiw5LGMpO3JldHVybiBjfVxuZnVuY3Rpb24gQ3ZkKGEsYixjKXsrK2EuajthLktpKCk7QXRkKGEsYixjKX1cbmZ1bmN0aW9uIEF2ZChhLGIsYyl7KythLmo7YS5IaShiLGEub2koYixjKSl9XG5mdW5jdGlvbiBiUmQoYSxiLGMpe3ZhciBkO2Q9YS5aYyhiKTtkLlJiKGMpfVxuZnVuY3Rpb24gYzdkKGEsYixjKXtyZXR1cm4gQzJkKGEuYyxhLmIsYixjKX1cbmZ1bmN0aW9uIERBZChhLGIpe3JldHVybiAoYiZPaGUpJWEuZC5sZW5ndGh9XG5mdW5jdGlvbiBNc2QoYSxiKXtMc2QuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifVxuZnVuY3Rpb24gdVZkKGEsYil7bFZkLmNhbGwodGhpcyxhKTt0aGlzLmE9Yn1cbmZ1bmN0aW9uIHNZZChhLGIpe2xWZC5jYWxsKHRoaXMsYSk7dGhpcy5hPWJ9XG5mdW5jdGlvbiB6eWQoYSxiKXt0aGlzLmM9YTt6dWQuY2FsbCh0aGlzLGIpfVxuZnVuY3Rpb24gWU9kKGEsYil7dGhpcy5hPWE7cU9kLmNhbGwodGhpcyxiKX1cbmZ1bmN0aW9uIGZUZChhLGIpe3RoaXMuYT1hO3FPZC5jYWxsKHRoaXMsYil9XG5mdW5jdGlvbiBYcChhKXt0aGlzLmE9KFhqKGEsSmllKSxuZXcgU2tiKGEpKX1cbmZ1bmN0aW9uIGNxKGEpe3RoaXMuYT0oWGooYSxKaWUpLG5ldyBTa2IoYSkpfVxuZnVuY3Rpb24gTEEoYSl7IWEuYSYmKGEuYT1uZXcgVkEpO3JldHVybiBhLmF9XG5mdW5jdGlvbiBYTWIoYSl7aWYoYT44KXtyZXR1cm4gMH1yZXR1cm4gYSsxfVxuZnVuY3Rpb24gRWNiKGEsYil7QmNiKCk7cmV0dXJuIGE9PWI/MDphPzE6LTF9XG5mdW5jdGlvbiBPcGIoYSxiLGMpe3JldHVybiBOcGIoYSxCRChiLDIyKSxjKX1cbmZ1bmN0aW9uIEJ6KGEsYixjKXtyZXR1cm4gYS5hcHBseShiLGMpO3ZhciBkfVxuZnVuY3Rpb24gU2ZiKGEsYixjKXthLmErPXpmYihiLDAsYyk7cmV0dXJuIGF9XG5mdW5jdGlvbiBpamIoYSxiKXt2YXIgYztjPWEuZTthLmU9YjtyZXR1cm4gY31cbmZ1bmN0aW9uIHRyYihhLGIpe3ZhciBjO2M9YVtoa2VdO2MuY2FsbChhLGIpfVxuZnVuY3Rpb24gdXJiKGEsYil7dmFyIGM7Yz1hW2hrZV07Yy5jYWxsKGEsYil9XG5mdW5jdGlvbiBBaWIoYSxiKXthLmEuVmMoYS5iLGIpOysrYS5iO2EuYz0tMX1cbmZ1bmN0aW9uIFVyYihhKXtVaGIoYS5lKTthLmQuYj1hLmQ7YS5kLmE9YS5kfVxuZnVuY3Rpb24gX2YoYSl7YS5iP19mKGEuYik6YS5mLmMuemMoYS5lLGEuZCl9XG5mdW5jdGlvbiBfQWIoYSxiLGMpe0VBYigpO01CYihhLGIuQ2UoYS5hLGMpKX1cbmZ1bmN0aW9uIEJ4YihhLGIpe3JldHVybiBWZChDd2IoYS5hLGIsdHJ1ZSkpfVxuZnVuY3Rpb24gQ3hiKGEsYil7cmV0dXJuIFZkKER3YihhLmEsYix0cnVlKSl9XG5mdW5jdGlvbiBfQmIoYSxiKXtyZXR1cm4gZUNiKG5ldyBBcnJheShiKSxhKX1cbmZ1bmN0aW9uIEhEKGEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfVxuZnVuY3Rpb24gbXooYSl7cmV0dXJuIGE9PW51bGw/bnVsbDphLm1lc3NhZ2V9XG5mdW5jdGlvbiBnUmIoKXt0aGlzLmE9bmV3IFJrYjt0aGlzLmI9bmV3IFJrYn1cbmZ1bmN0aW9uIGlUYigpe3RoaXMuYT1uZXcgTVFiO3RoaXMuYj1uZXcgdFRifVxuZnVuY3Rpb24gdERiKCl7dGhpcy5iPW5ldyBkN2M7dGhpcy5jPW5ldyBSa2J9XG5mdW5jdGlvbiBfUWIoKXt0aGlzLmQ9bmV3IGQ3Yzt0aGlzLmU9bmV3IGQ3Y31cbmZ1bmN0aW9uIG5fYigpe3RoaXMubj1uZXcgZDdjO3RoaXMubz1uZXcgZDdjfVxuZnVuY3Rpb24gJEdiKCl7dGhpcy5uPW5ldyBwMGI7dGhpcy5pPW5ldyBJNmN9XG5mdW5jdGlvbiBzZWMoKXt0aGlzLmE9bmV3IFVtYzt0aGlzLmI9bmV3IG1uY31cbmZ1bmN0aW9uIE5JYygpe3RoaXMuYT1uZXcgUmtiO3RoaXMuZD1uZXcgUmtifVxuZnVuY3Rpb24gTERjKCl7dGhpcy5iPW5ldyBUcWI7dGhpcy5hPW5ldyBUcWJ9XG5mdW5jdGlvbiBoU2MoKXt0aGlzLmI9bmV3IExxYjt0aGlzLmE9bmV3IExxYn1cbmZ1bmN0aW9uIEhSYygpe3RoaXMuYj1uZXcgdFJjO3RoaXMuYT1uZXcgaFJjfVxuZnVuY3Rpb24gYUhiKCl7JEdiLmNhbGwodGhpcyk7dGhpcy5hPW5ldyBkN2N9XG5mdW5jdGlvbiBZd2IoYSl7WndiLmNhbGwodGhpcyxhLChseGIoKSxoeGIpKX1cbmZ1bmN0aW9uIEpfYihhLGIsYyxkKXtCX2IuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24gc3FkKGEsYixjKXtjIT1udWxsJiZrbWQoYixXcWQoYSxjKSl9XG5mdW5jdGlvbiB0cWQoYSxiLGMpe2MhPW51bGwmJmxtZChiLFdxZChhLGMpKX1cbmZ1bmN0aW9uIFRvZChhLGIsYyl7Yz1faGQoYSxiLDExLGMpO3JldHVybiBjfVxuZnVuY3Rpb24gUDZjKGEsYil7YS5hKz1iLmE7YS5iKz1iLmI7cmV0dXJuIGF9XG5mdW5jdGlvbiBjN2MoYSxiKXthLmEtPWIuYTthLmItPWIuYjtyZXR1cm4gYX1cbmZ1bmN0aW9uIHU3YihhLGIpe3JldHVybiBhLm4uYT0odUNiKGIpLGIpKzEwfVxuZnVuY3Rpb24gdjdiKGEsYil7cmV0dXJuIGEubi5hPSh1Q2IoYiksYikrMTB9XG5mdW5jdGlvbiBkTGQoYSxiKXtyZXR1cm4gYj09YXx8cHVkKFVLZChiKSxhKX1cbmZ1bmN0aW9uIFBZZChhLGIpe3JldHVybiBSaGIoYS5hLGIsJycpPT1udWxsfVxuZnVuY3Rpb24gRTJiKGEsYil7eDJiKCk7cmV0dXJuICFmX2IoYi5kLmksYSl9XG5mdW5jdGlvbiByamMoYSxiKXtmYWQoYS5mKT9zamMoYSxiKTp0amMoYSxiKX1cbmZ1bmN0aW9uIGgxZChhLGIpe3ZhciBjO2M9Yi5IaChhLmEpO3JldHVybiBjfVxuZnVuY3Rpb24gQ3lkKGEsYil7cWNiLmNhbGwodGhpcyxndmUrYSttdWUrYil9XG5mdW5jdGlvbiBnVWQoYSxiLGMsZCl7Y1VkLmNhbGwodGhpcyxhLGIsYyxkKX1cbmZ1bmN0aW9uIFE0ZChhLGIsYyxkKXtjVWQuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24gVTRkKGEsYixjLGQpe1E0ZC5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiBuNWQoYSxiLGMsZCl7aTVkLmNhbGwodGhpcyxhLGIsYyxkKX1cbmZ1bmN0aW9uIHA1ZChhLGIsYyxkKXtpNWQuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24gdjVkKGEsYixjLGQpe2k1ZC5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiB0NWQoYSxiLGMsZCl7cDVkLmNhbGwodGhpcyxhLGIsYyxkKX1cbmZ1bmN0aW9uIEE1ZChhLGIsYyxkKXtwNWQuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24geTVkKGEsYixjLGQpe3Y1ZC5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiBENWQoYSxiLGMsZCl7QTVkLmNhbGwodGhpcyxhLGIsYyxkKX1cbmZ1bmN0aW9uIGQ2ZChhLGIsYyxkKXtZNWQuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24gVnAoYSxiLGMpe3RoaXMuYT1hO3FjLmNhbGwodGhpcyxiLGMpfVxuZnVuY3Rpb24gdGsoYSxiLGMpe3RoaXMuYz1iO3RoaXMuYj1jO3RoaXMuYT1hfVxuZnVuY3Rpb24gaWsoYSxiLGMpe3JldHVybiBhLmQ9QkQoYi5LYihjKSwxNjQpfVxuZnVuY3Rpb24gajZkKGEsYil7cmV0dXJuIGEuQWooKS5OaCgpLktoKGEsYil9XG5mdW5jdGlvbiBoNmQoYSxiKXtyZXR1cm4gYS5BaigpLk5oKCkuSWgoYSxiKX1cbmZ1bmN0aW9uIEZkYihhLGIpe3JldHVybiB1Q2IoYSksUEQoYSk9PT1QRChiKX1cbmZ1bmN0aW9uIGRmYihhLGIpe3JldHVybiB1Q2IoYSksUEQoYSk9PT1QRChiKX1cbmZ1bmN0aW9uIER4YihhLGIpe3JldHVybiBWZChDd2IoYS5hLGIsZmFsc2UpKX1cbmZ1bmN0aW9uIEV4YihhLGIpe3JldHVybiBWZChEd2IoYS5hLGIsZmFsc2UpKX1cbmZ1bmN0aW9uIHZCYihhLGIpe3JldHVybiBhLmIuc2QobmV3IHlCYihhLGIpKX1cbmZ1bmN0aW9uIEJCYihhLGIpe3JldHVybiBhLmIuc2QobmV3IEVCYihhLGIpKX1cbmZ1bmN0aW9uIEhCYihhLGIpe3JldHVybiBhLmIuc2QobmV3IEtCYihhLGIpKX1cbmZ1bmN0aW9uIGxmYihhLGIsYyl7cmV0dXJuIGEubGFzdEluZGV4T2YoYixjKX1cbmZ1bmN0aW9uIHVUYihhLGIsYyl7cmV0dXJuIEtkYihhW2IuYl0sYVtjLmJdKX1cbmZ1bmN0aW9uIFJUYihhLGIpe3JldHVybiB5TmIoYiwoTnljKCksQ3djKSxhKX1cbmZ1bmN0aW9uIGZtYyhhLGIpe3JldHVybiBiZWIoYi5hLmQucCxhLmEuZC5wKX1cbmZ1bmN0aW9uIGVtYyhhLGIpe3JldHVybiBiZWIoYS5hLmQucCxiLmEuZC5wKX1cbmZ1bmN0aW9uIF9PYyhhLGIpe3JldHVybiBLZGIoYS5jLWEucyxiLmMtYi5zKX1cbmZ1bmN0aW9uIFNfYihhKXtyZXR1cm4gIWEuYz8tMTpKa2IoYS5jLmEsYSwwKX1cbmZ1bmN0aW9uIFZ4ZChhKXtyZXR1cm4gYTwxMDA/bnVsbDpuZXcgSXhkKGEpfVxuZnVuY3Rpb24gZWNkKGEpe3JldHVybiBhPT1aYmR8fGE9PV9iZHx8YT09JGJkfVxuZnVuY3Rpb24gekFkKGEsYil7cmV0dXJuIEpEKGIsMTUpJiZCdGQoYS5jLGIpfVxuZnVuY3Rpb24gdnliKGEsYil7aWYobHliKXtyZXR1cm59ISFiJiYoYS5kPWIpfVxuZnVuY3Rpb24gdWpiKGEsYil7dmFyIGM7Yz1iO3JldHVybiAhIUF3YihhLGMpfVxuZnVuY3Rpb24gY3pkKGEsYil7dGhpcy5jPWE7UHlkLmNhbGwodGhpcyxhLGIpfVxuZnVuY3Rpb24gZkJiKGEpe3RoaXMuYz1hO252Yi5jYWxsKHRoaXMscmllLDApfVxuZnVuY3Rpb24gQXZiKGEsYil7QnZiLmNhbGwodGhpcyxhLGEubGVuZ3RoLGIpfVxuZnVuY3Rpb24gYUlkKGEsYixjKXtyZXR1cm4gQkQoYS5jLDY5KS5sayhiLGMpfVxuZnVuY3Rpb24gYklkKGEsYixjKXtyZXR1cm4gQkQoYS5jLDY5KS5tayhiLGMpfVxuZnVuY3Rpb24gTzJkKGEsYixjKXtyZXR1cm4gTjJkKGEsQkQoYiwzMzIpLGMpfVxuZnVuY3Rpb24gUTJkKGEsYixjKXtyZXR1cm4gUDJkKGEsQkQoYiwzMzIpLGMpfVxuZnVuY3Rpb24gaTNkKGEsYixjKXtyZXR1cm4gaDNkKGEsQkQoYiwzMzIpLGMpfVxuZnVuY3Rpb24gazNkKGEsYixjKXtyZXR1cm4gajNkKGEsQkQoYiwzMzIpLGMpfVxuZnVuY3Rpb24gdG4oYSxiKXtyZXR1cm4gYj09bnVsbD9udWxsOkh2KGEuYixiKX1cbmZ1bmN0aW9uIEtjYihhKXtyZXR1cm4gTEQoYSk/KHVDYihhKSxhKTphLmtlKCl9XG5mdW5jdGlvbiBMZGIoYSl7cmV0dXJuICFpc05hTihhKSYmIWlzRmluaXRlKGEpfVxuZnVuY3Rpb24gV24oYSl7UWwoKTt0aGlzLmE9KG1tYigpLG5ldyB6b2IoYSkpfVxuZnVuY3Rpb24gZEljKGEpe0ZIYygpO3RoaXMuZD1hO3RoaXMuYT1uZXcgamtifVxuZnVuY3Rpb24geHFiKGEsYixjKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIE5yYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiAkc2IoYSxiLGMpe3RoaXMuZD1hO3RoaXMuYj1jO3RoaXMuYT1ifVxuZnVuY3Rpb24gUXNiKGEpe0NzYih0aGlzKTtPc2IodGhpcyk7eWUodGhpcyxhKX1cbmZ1bmN0aW9uIFRrYihhKXtDa2IodGhpcyk7YkNiKHRoaXMuYywwLGEuUGMoKSl9XG5mdW5jdGlvbiBYd2IoYSl7dWliKGEuYSk7S3diKGEuYyxhLmIpO2EuYj1udWxsfVxuZnVuY3Rpb24gaXliKGEpe3RoaXMuYT1hO1pmYigpO0NiYihEYXRlLm5vdygpKX1cbmZ1bmN0aW9uIEpDYigpe0pDYj1jY2I7R0NiPW5ldyBuYjtJQ2I9bmV3IG5ifVxuZnVuY3Rpb24gbnRiKCl7bnRiPWNjYjtsdGI9bmV3IG90YjttdGI9bmV3IHF0Yn1cbmZ1bmN0aW9uIGt6ZCgpe2t6ZD1jY2I7anpkPUtDKFNJLFVoZSwxLDAsNSwxKX1cbmZ1bmN0aW9uIHRHZCgpe3RHZD1jY2I7c0dkPUtDKFNJLFVoZSwxLDAsNSwxKX1cbmZ1bmN0aW9uICRHZCgpeyRHZD1jY2I7WkdkPUtDKFNJLFVoZSwxLDAsNSwxKX1cbmZ1bmN0aW9uIFFsKCl7UWw9Y2NiO25ldyBabCgobW1iKCksbW1iKCksam1iKSl9XG5mdW5jdGlvbiBweGIoYSl7bHhiKCk7cmV0dXJuIGVzKCh6eGIoKSx5eGIpLGEpfVxuZnVuY3Rpb24gSHliKGEpe0Z5YigpO3JldHVybiBlcygoS3liKCksSnliKSxhKX1cbmZ1bmN0aW9uIE9FYihhKXtNRWIoKTtyZXR1cm4gZXMoKFJFYigpLFFFYiksYSl9XG5mdW5jdGlvbiBXRWIoYSl7VUViKCk7cmV0dXJuIGVzKChaRWIoKSxZRWIpLGEpfVxuZnVuY3Rpb24gdEZiKGEpe3JGYigpO3JldHVybiBlcygod0ZiKCksdkZiKSxhKX1cbmZ1bmN0aW9uIGlIYihhKXtnSGIoKTtyZXR1cm4gZXMoKGxIYigpLGtIYiksYSl9XG5mdW5jdGlvbiBQSGIoYSl7TkhiKCk7cmV0dXJuIGVzKChTSGIoKSxSSGIpLGEpfVxuZnVuY3Rpb24gR0liKGEpe0VJYigpO3JldHVybiBlcygoSkliKCksSUliKSxhKX1cbmZ1bmN0aW9uIHZKYihhKXtxSmIoKTtyZXR1cm4gZXMoKHlKYigpLHhKYiksYSl9XG5mdW5jdGlvbiB4TGIoYSl7dkxiKCk7cmV0dXJuIGVzKChBTGIoKSx6TGIpLGEpfVxuZnVuY3Rpb24gVE1iKGEpe1JNYigpO3JldHVybiBlcygoV01iKCksVk1iKSxhKX1cbmZ1bmN0aW9uIFRPYihhKXtST2IoKTtyZXR1cm4gZXMoKFdPYigpLFZPYiksYSl9XG5mdW5jdGlvbiBlUGIoYSl7Y1BiKCk7cmV0dXJuIGVzKChoUGIoKSxnUGIpLGEpfVxuZnVuY3Rpb24gWlJiKGEpe1hSYigpO3JldHVybiBlcygoYVNiKCksX1JiKSxhKX1cbmZ1bmN0aW9uIEFUYihhKXt5VGIoKTtyZXR1cm4gZXMoKERUYigpLENUYiksYSl9XG5mdW5jdGlvbiBzVWIoYSl7cVViKCk7cmV0dXJuIGVzKCh2VWIoKSx1VWIpLGEpfVxuZnVuY3Rpb24gcldiKGEpe2xXYigpO3JldHVybiBlcygodVdiKCksdFdiKSxhKX1cbmZ1bmN0aW9uIFRYYihhKXtSWGIoKTtyZXR1cm4gZXMoKFdYYigpLFZYYiksYSl9XG5mdW5jdGlvbiBNYihhLGIpe2lmKCFhKXt0aHJvdyB2YmIobmV3IFdkYihiKSl9fVxuZnVuY3Rpb24gbDBiKGEpe2owYigpO3JldHVybiBlcygobzBiKCksbjBiKSxhKX1cbmZ1bmN0aW9uIHIwYihhKXtCX2IuY2FsbCh0aGlzLGEuZCxhLmMsYS5hLGEuYil9XG5mdW5jdGlvbiBLX2IoYSl7Ql9iLmNhbGwodGhpcyxhLmQsYS5jLGEuYSxhLmIpfVxuZnVuY3Rpb24gbUtiKGEsYixjKXt0aGlzLmI9YTt0aGlzLmM9Yjt0aGlzLmE9Y31cbmZ1bmN0aW9uIEJaYihhLGIsYyl7dGhpcy5iPWE7dGhpcy5hPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiBUTmIoYSxiLGMpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jfVxuZnVuY3Rpb24gdU9iKGEsYixjKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIFMzYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiBaNmIoYSxiLGMpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jfVxuZnVuY3Rpb24gbjliKGEsYixjKXt0aGlzLmI9YTt0aGlzLmE9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIHgkYihhLGIsYyl7dGhpcy5lPWI7dGhpcy5iPWE7dGhpcy5kPWN9XG5mdW5jdGlvbiAkQWIoYSxiLGMpe0VBYigpO2EuYS5PZChiLGMpO3JldHVybiBifVxuZnVuY3Rpb24gTEdiKGEpe3ZhciBiO2I9bmV3IEtHYjtiLmU9YTtyZXR1cm4gYn1cbmZ1bmN0aW9uIGlMYihhKXt2YXIgYjtiPW5ldyBmTGI7Yi5iPWE7cmV0dXJuIGJ9XG5mdW5jdGlvbiBENmIoKXtENmI9Y2NiO0I2Yj1uZXcgTTZiO0M2Yj1uZXcgUDZifVxuZnVuY3Rpb24gSGdjKCl7SGdjPWNjYjtGZ2M9bmV3IGdoYztHZ2M9bmV3IGloY31cbmZ1bmN0aW9uIGpiYyhhKXtnYmMoKTtyZXR1cm4gZXMoKG1iYygpLGxiYyksYSl9XG5mdW5jdGlvbiBDamMoYSl7QWpjKCk7cmV0dXJuIGVzKChGamMoKSxFamMpLGEpfVxuZnVuY3Rpb24gQ2xjKGEpe0FsYygpO3JldHVybiBlcygoRmxjKCksRWxjKSxhKX1cbmZ1bmN0aW9uIENwYyhhKXtBcGMoKTtyZXR1cm4gZXMoKEZwYygpLEVwYyksYSl9XG5mdW5jdGlvbiBLcGMoYSl7SXBjKCk7cmV0dXJuIGVzKChOcGMoKSxNcGMpLGEpfVxuZnVuY3Rpb24gV3BjKGEpe1JwYygpO3JldHVybiBlcygoWnBjKCksWXBjKSxhKX1cbmZ1bmN0aW9uICRqYyhhKXtYamMoKTtyZXR1cm4gZXMoKGJrYygpLGFrYyksYSl9XG5mdW5jdGlvbiBIa2MoYSl7RmtjKCk7cmV0dXJuIGVzKChLa2MoKSxKa2MpLGEpfVxuZnVuY3Rpb24gZHFjKGEpe2JxYygpO3JldHVybiBlcygoZ3FjKCksZnFjKSxhKX1cbmZ1bmN0aW9uIHJxYyhhKXttcWMoKTtyZXR1cm4gZXMoKHVxYygpLHRxYyksYSl9XG5mdW5jdGlvbiB6cWMoYSl7eHFjKCk7cmV0dXJuIGVzKChDcWMoKSxCcWMpLGEpfVxuZnVuY3Rpb24gSXFjKGEpe0dxYygpO3JldHVybiBlcygoTHFjKCksS3FjKSxhKX1cbmZ1bmN0aW9uIFZxYyhhKXtTcWMoKTtyZXR1cm4gZXMoKFlxYygpLFhxYyksYSl9XG5mdW5jdGlvbiBicmMoYSl7X3FjKCk7cmV0dXJuIGVzKChlcmMoKSxkcmMpLGEpfVxuZnVuY3Rpb24gbnJjKGEpe2xyYygpO3JldHVybiBlcygocXJjKCkscHJjKSxhKX1cbmZ1bmN0aW9uIEFyYyhhKXt5cmMoKTtyZXR1cm4gZXMoKERyYygpLENyYyksYSl9XG5mdW5jdGlvbiBRcmMoYSl7T3JjKCk7cmV0dXJuIGVzKChUcmMoKSxTcmMpLGEpfVxuZnVuY3Rpb24gWnJjKGEpe1hyYygpO3JldHVybiBlcygoYXNjKCksX3JjKSxhKX1cbmZ1bmN0aW9uIGdzYyhhKXtlc2MoKTtyZXR1cm4gZXMoKGpzYygpLGlzYyksYSl9XG5mdW5jdGlvbiBvc2MoYSl7bXNjKCk7cmV0dXJuIGVzKChyc2MoKSxxc2MpLGEpfVxuZnVuY3Rpb24gRXRjKGEpe0N0YygpO3JldHVybiBlcygoSHRjKCksR3RjKSxhKX1cbmZ1bmN0aW9uIHF6YyhhKXtsemMoKTtyZXR1cm4gZXMoKHR6YygpLHN6YyksYSl9XG5mdW5jdGlvbiBBemMoYSl7eHpjKCk7cmV0dXJuIGVzKChEemMoKSxDemMpLGEpfVxuZnVuY3Rpb24gTXpjKGEpe0l6YygpO3JldHVybiBlcygoUHpjKCksT3pjKSxhKX1cbmZ1bmN0aW9uIE1BYyhhKXtLQWMoKTtyZXR1cm4gZXMoKFBBYygpLE9BYyksYSl9XG5mdW5jdGlvbiBtQWMoYSl7a0FjKCk7cmV0dXJuIGVzKChwQWMoKSxvQWMpLGEpfVxuZnVuY3Rpb24gdkFjKGEpe3RBYygpO3JldHVybiBlcygoeUFjKCkseEFjKSxhKX1cbmZ1bmN0aW9uIERBYyhhKXtCQWMoKTtyZXR1cm4gZXMoKEdBYygpLEZBYyksYSl9XG5mdW5jdGlvbiBWQWMoYSl7VEFjKCk7cmV0dXJuIGVzKChZQWMoKSxYQWMpLGEpfVxuZnVuY3Rpb24gJHpjKGEpe1Z6YygpO3JldHVybiBlcygoYkFjKCksYUFjKSxhKX1cbmZ1bmN0aW9uIGJCYyhhKXtfQWMoKTtyZXR1cm4gZXMoKGVCYygpLGRCYyksYSl9XG5mdW5jdGlvbiB2QmMoYSl7dEJjKCk7cmV0dXJuIGVzKCh5QmMoKSx4QmMpLGEpfVxuZnVuY3Rpb24gRUJjKGEpe0NCYygpO3JldHVybiBlcygoSEJjKCksR0JjKSxhKX1cbmZ1bmN0aW9uIE5CYyhhKXtMQmMoKTtyZXR1cm4gZXMoKFFCYygpLFBCYyksYSl9XG5mdW5jdGlvbiB0R2MoYSl7ckdjKCk7cmV0dXJuIGVzKCh3R2MoKSx2R2MpLGEpfVxuZnVuY3Rpb24gV0ljKGEpe1VJYygpO3JldHVybiBlcygoWkljKCksWUljKSxhKX1cbmZ1bmN0aW9uICRMYyhhKXtZTGMoKTtyZXR1cm4gZXMoKGJNYygpLGFNYyksYSl9XG5mdW5jdGlvbiBnTWMoYSl7ZU1jKCk7cmV0dXJuIGVzKChqTWMoKSxpTWMpLGEpfVxuZnVuY3Rpb24gSk9jKGEpe0hPYygpO3JldHVybiBlcygoTU9jKCksTE9jKSxhKX1cbmZ1bmN0aW9uIEhRYyhhKXtGUWMoKTtyZXR1cm4gZXMoKEtRYygpLEpRYyksYSl9XG5mdW5jdGlvbiBEUmMoYSl7eVJjKCk7cmV0dXJuIGVzKChHUmMoKSxGUmMpLGEpfVxuZnVuY3Rpb24gdFNjKGEpe3FTYygpO3JldHVybiBlcygod1NjKCksdlNjKSxhKX1cbmZ1bmN0aW9uIFVUYyhhKXtTVGMoKTtyZXR1cm4gZXMoKFhUYygpLFdUYyksYSl9XG5mdW5jdGlvbiBVVWMoYSl7UFVjKCk7cmV0dXJuIGVzKChYVWMoKSxXVWMpLGEpfVxuZnVuY3Rpb24gYVVjKGEpeyRUYygpO3JldHVybiBlcygoZFVjKCksY1VjKSxhKX1cbmZ1bmN0aW9uIHdWYyhhKXt0VmMoKTtyZXR1cm4gZXMoKHpWYygpLHlWYyksYSl9XG5mdW5jdGlvbiBpV2MoYSl7ZldjKCk7cmV0dXJuIGVzKChsV2MoKSxrV2MpLGEpfVxuZnVuY3Rpb24gc1djKGEpe3BXYygpO3JldHVybiBlcygodldjKCksdVdjKSxhKX1cbmZ1bmN0aW9uIGxYYyhhKXtpWGMoKTtyZXR1cm4gZXMoKG9YYygpLG5YYyksYSl9XG5mdW5jdGlvbiB2WGMoYSl7c1hjKCk7cmV0dXJuIGVzKCh5WGMoKSx4WGMpLGEpfVxuZnVuY3Rpb24gQlljKGEpe3pZYygpO3JldHVybiBlcygoRVljKCksRFljKSxhKX1cbmZ1bmN0aW9uIG0kYyhhKXtrJGMoKTtyZXR1cm4gZXMoKHAkYygpLG8kYyksYSl9XG5mdW5jdGlvbiAkJGMoYSl7WSRjKCk7cmV0dXJuIGVzKChiX2MoKSxhX2MpLGEpfVxuZnVuY3Rpb24gbl9jKGEpe2lfYygpO3JldHVybiBlcygocV9jKCkscF9jKSxhKX1cbmZ1bmN0aW9uIHdfYyhhKXtzX2MoKTtyZXR1cm4gZXMoKHpfYygpLHlfYyksYSl9XG5mdW5jdGlvbiBFX2MoYSl7Q19jKCk7cmV0dXJuIGVzKChIX2MoKSxHX2MpLGEpfVxuZnVuY3Rpb24gUF9jKGEpe05fYygpO3JldHVybiBlcygoU19jKCksUl9jKSxhKX1cbmZ1bmN0aW9uIFcwYyhhKXtSMGMoKTtyZXR1cm4gZXMoKFowYygpLFkwYyksYSl9XG5mdW5jdGlvbiBmMWMoYSl7YTFjKCk7cmV0dXJuIGVzKChpMWMoKSxoMWMpLGEpfVxuZnVuY3Rpb24gUDVjKGEpe041YygpO3JldHVybiBlcygoUzVjKCksUjVjKSxhKX1cbmZ1bmN0aW9uIGI2YyhhKXtfNWMoKTtyZXR1cm4gZXMoKGU2YygpLGQ2YyksYSl9XG5mdW5jdGlvbiBIN2MoYSl7RjdjKCk7cmV0dXJuIGVzKChLN2MoKSxKN2MpLGEpfVxuZnVuY3Rpb24gazhjKGEpe2k4YygpO3JldHVybiBlcygobjhjKCksbThjKSxhKX1cbmZ1bmN0aW9uIFY4YihhKXtTOGIoKTtyZXR1cm4gZXMoKFk4YigpLFg4YiksYSl9XG5mdW5jdGlvbiBBNWIoYSl7eTViKCk7cmV0dXJuIGVzKChENWIoKSxDNWIpLGEpfVxuZnVuY3Rpb24gamFkKGEpe2VhZCgpO3JldHVybiBlcygobWFkKCksbGFkKSxhKX1cbmZ1bmN0aW9uIHNhZChhKXtxYWQoKTtyZXR1cm4gZXMoKHZhZCgpLHVhZCksYSl9XG5mdW5jdGlvbiBDYWQoYSl7QWFkKCk7cmV0dXJuIGVzKChGYWQoKSxFYWQpLGEpfVxuZnVuY3Rpb24gT2FkKGEpe01hZCgpO3JldHVybiBlcygoUmFkKCksUWFkKSxhKX1cbmZ1bmN0aW9uIGpiZChhKXtoYmQoKTtyZXR1cm4gZXMoKG1iZCgpLGxiZCksYSl9XG5mdW5jdGlvbiB1YmQoYSl7cmJkKCk7cmV0dXJuIGVzKCh4YmQoKSx3YmQpLGEpfVxuZnVuY3Rpb24gS2JkKGEpe0hiZCgpO3JldHVybiBlcygoTmJkKCksTWJkKSxhKX1cbmZ1bmN0aW9uIFZiZChhKXtUYmQoKTtyZXR1cm4gZXMoKFliZCgpLFhiZCksYSl9XG5mdW5jdGlvbiBoY2QoYSl7ZGNkKCk7cmV0dXJuIGVzKChrY2QoKSxqY2QpLGEpfVxuZnVuY3Rpb24gdmNkKGEpe3JjZCgpO3JldHVybiBlcygoeWNkKCkseGNkKSxhKX1cbmZ1bmN0aW9uIHZkZChhKXt0ZGQoKTtyZXR1cm4gZXMoKHlkZCgpLHhkZCksYSl9XG5mdW5jdGlvbiBLZGQoYSl7SWRkKCk7cmV0dXJuIGVzKChOZGQoKSxNZGQpLGEpfVxuZnVuY3Rpb24gJGNkKGEpe1VjZCgpO3JldHVybiBlcygoY2RkKCksYmRkKSxhKX1cbmZ1bmN0aW9uIEZlZChhKXtEZWQoKTtyZXR1cm4gZXMoKEllZCgpLEhlZCksYSl9XG5mdW5jdGlvbiByZ2QoYSl7cGdkKCk7cmV0dXJuIGVzKCh1Z2QoKSx0Z2QpLGEpfVxuZnVuY3Rpb24gRXNkKGEpe0NzZCgpO3JldHVybiBlcygoSHNkKCksR3NkKSxhKX1cbmZ1bmN0aW9uIFlvYyhhLGIpe3JldHVybiAodUNiKGEpLGEpKyh1Q2IoYiksYil9XG5mdW5jdGlvbiBOTmQoYSxiKXtaZmIoKTtyZXR1cm4gd3RkKFpLZChhLmEpLGIpfVxuZnVuY3Rpb24gU05kKGEsYil7WmZiKCk7cmV0dXJuIHd0ZChaS2QoYS5hKSxiKX1cbmZ1bmN0aW9uIGJQYyhhLGIpe3RoaXMuYz1hO3RoaXMuYT1iO3RoaXMuYj1iLWF9XG5mdW5jdGlvbiBuWWMoYSxiLGMpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jfVxuZnVuY3Rpb24gTDFjKGEsYixjKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIFQxYyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiBScmQoYSxiLGMpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jfVxuZnVuY3Rpb24gekNkKGEsYixjKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIElWZChhLGIsYyl7dGhpcy5lPWE7dGhpcy5hPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiBrV2QoYSxiLGMpe1VWZCgpO2NXZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gSFhkKGEsYixjKXtVVmQoKTtvWGQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIFRYZChhLGIsYyl7VVZkKCk7b1hkLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBaWGQoYSxiLGMpe1VWZCgpO29YZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gSlhkKGEsYixjKXtVVmQoKTtIWGQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIExYZChhLGIsYyl7VVZkKCk7SFhkLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiBOWGQoYSxiLGMpe1VWZCgpO0xYZC5jYWxsKHRoaXMsYSxiLGMpfVxuZnVuY3Rpb24gVlhkKGEsYixjKXtVVmQoKTtUWGQuY2FsbCh0aGlzLGEsYixjKX1cbmZ1bmN0aW9uIF9YZChhLGIsYyl7VVZkKCk7WlhkLmNhbGwodGhpcyxhLGIsYyl9XG5mdW5jdGlvbiAkaihhLGIpe1FiKGEpO1FiKGIpO3JldHVybiBuZXcgX2ooYSxiKX1cbmZ1bmN0aW9uIE5xKGEsYil7UWIoYSk7UWIoYik7cmV0dXJuIG5ldyBXcShhLGIpfVxuZnVuY3Rpb24gUnEoYSxiKXtRYihhKTtRYihiKTtyZXR1cm4gbmV3IGFyKGEsYil9XG5mdW5jdGlvbiBscihhLGIpe1FiKGEpO1FiKGIpO3JldHVybiBuZXcgenIoYSxiKX1cbmZ1bmN0aW9uIEJEKGEsYil7Q0NiKGE9PW51bGx8fEFEKGEsYikpO3JldHVybiBhfVxuZnVuY3Rpb24gTnUoYSl7dmFyIGI7Yj1uZXcgUmtiO2ZyKGIsYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBFeChhKXt2YXIgYjtiPW5ldyBUcWI7ZnIoYixhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEh4KGEpe3ZhciBiO2I9bmV3IEd4YjtKcShiLGEpO3JldHVybiBifVxuZnVuY3Rpb24gUnUoYSl7dmFyIGI7Yj1uZXcgUHNiO0pxKGIsYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBZRWMoYSl7IWEuZSYmKGEuZT1uZXcgUmtiKTtyZXR1cm4gYS5lfVxuZnVuY3Rpb24gU01kKGEpeyFhLmMmJihhLmM9bmV3IHhZZCk7cmV0dXJuIGEuY31cbmZ1bmN0aW9uIEVrYihhLGIpe2EuY1thLmMubGVuZ3RoXT1iO3JldHVybiB0cnVlfVxuZnVuY3Rpb24gV0EoYSxiKXt0aGlzLmM9YTt0aGlzLmI9Yjt0aGlzLmE9ZmFsc2V9XG5mdW5jdGlvbiBHZyhhKXt0aGlzLmQ9YTtEZyh0aGlzKTt0aGlzLmI9ZWQoYS5kKX1cbmZ1bmN0aW9uIHB6Yigpe3RoaXMuYT0nOyw7Jzt0aGlzLmI9Jyc7dGhpcy5jPScnfVxuZnVuY3Rpb24gQnZiKGEsYixjKXtxdmIuY2FsbCh0aGlzLGIsYyk7dGhpcy5hPWF9XG5mdW5jdGlvbiBmQWIoYSxiLGMpe3RoaXMuYj1hO2Z2Yi5jYWxsKHRoaXMsYixjKX1cbmZ1bmN0aW9uIGxzYihhLGIsYyl7dGhpcy5jPWE7cGpiLmNhbGwodGhpcyxiLGMpfVxuZnVuY3Rpb24gYkNiKGEsYixjKXskQmIoYywwLGEsYixjLmxlbmd0aCxmYWxzZSl9XG5mdW5jdGlvbiBIVmIoYSxiLGMsZCxlKXthLmI9YjthLmM9YzthLmQ9ZDthLmE9ZX1cbmZ1bmN0aW9uIGVCYihhLGIpe2lmKGIpe2EuYj1iO2EuYT0oVHpiKGIpLGIuYSl9fVxuZnVuY3Rpb24gdl9iKGEsYixjLGQsZSl7YS5kPWI7YS5jPWM7YS5hPWQ7YS5iPWV9XG5mdW5jdGlvbiBoNWIoYSl7dmFyIGIsYztiPWEuYjtjPWEuYzthLmI9YzthLmM9Yn1cbmZ1bmN0aW9uIGs1YihhKXt2YXIgYixjO2M9YS5kO2I9YS5hO2EuZD1iO2EuYT1jfVxuZnVuY3Rpb24gTGJiKGEpe3JldHVybiB6YmIoaUQoRmJiKGEpP1JiYihhKTphKSl9XG5mdW5jdGlvbiBybGMoYSxiKXtyZXR1cm4gYmViKEQwYihhLmQpLEQwYihiLmQpKX1cbmZ1bmN0aW9uIHVpYyhhLGIpe3JldHVybiBiPT0oVWNkKCksVGNkKT9hLmM6YS5kfVxuZnVuY3Rpb24gRkhjKCl7RkhjPWNjYjtESGM9KFVjZCgpLFRjZCk7RUhjPXpjZH1cbmZ1bmN0aW9uIERSYigpe3RoaXMuYj1FZGIoRUQoS3NkKCh3U2IoKSx2U2IpKSkpfVxuZnVuY3Rpb24gYUJiKGEpe3JldHVybiBFQWIoKSxLQyhTSSxVaGUsMSxhLDUsMSl9XG5mdW5jdGlvbiBDNmMoYSl7cmV0dXJuIG5ldyBmN2MoYS5jK2EuYixhLmQrYS5hKX1cbmZ1bmN0aW9uIFZtYyhhLGIpe0ltYygpO3JldHVybiBiZWIoYS5kLnAsYi5kLnApfVxuZnVuY3Rpb24gTHNiKGEpe3NDYihhLmIhPTApO3JldHVybiBOc2IoYSxhLmEuYSl9XG5mdW5jdGlvbiBNc2IoYSl7c0NiKGEuYiE9MCk7cmV0dXJuIE5zYihhLGEuYy5iKX1cbmZ1bmN0aW9uIHJDYihhLGIpe2lmKCFhKXt0aHJvdyB2YmIobmV3IHVjYihiKSl9fVxuZnVuY3Rpb24gbUNiKGEsYil7aWYoIWEpe3Rocm93IHZiYihuZXcgV2RiKGIpKX19XG5mdW5jdGlvbiBkV2IoYSxiLGMpe2NXYi5jYWxsKHRoaXMsYSxiKTt0aGlzLmI9Y31cbmZ1bmN0aW9uIHBNZChhLGIsYyl7TUxkLmNhbGwodGhpcyxhLGIpO3RoaXMuYz1jfVxuZnVuY3Rpb24gRG5jKGEsYixjKXtDbmMuY2FsbCh0aGlzLGIsYyk7dGhpcy5kPWF9XG5mdW5jdGlvbiBfR2QoYSl7JEdkKCk7TUdkLmNhbGwodGhpcyk7dGhpcy50aChhKX1cbmZ1bmN0aW9uIFBOZChhLGIsYyl7dGhpcy5hPWE7bk5kLmNhbGwodGhpcyxiLGMpfVxuZnVuY3Rpb24gVU5kKGEsYixjKXt0aGlzLmE9YTtuTmQuY2FsbCh0aGlzLGIsYyl9XG5mdW5jdGlvbiBrMmQoYSxiLGMpe01MZC5jYWxsKHRoaXMsYSxiKTt0aGlzLmM9Y31cbmZ1bmN0aW9uIHkxZCgpe1QwZCgpO3oxZC5jYWxsKHRoaXMsKHlGZCgpLHhGZCkpfVxuZnVuY3Rpb24gZ0ZkKGEpe3JldHVybiBhIT1udWxsJiYhT0VkKGEsQ0VkLERFZCl9XG5mdW5jdGlvbiBkRmQoYSxiKXtyZXR1cm4gKGpGZChhKTw8NHxqRmQoYikpJmFqZX1cbmZ1bmN0aW9uIGxuKGEsYil7cmV0dXJuIFZtKCksV2ooYSxiKSxuZXcgaXkoYSxiKX1cbmZ1bmN0aW9uIFNkZChhLGIpe3ZhciBjO2lmKGEubil7Yz1iO0VrYihhLmYsYyl9fVxuZnVuY3Rpb24gVXBkKGEsYixjKXt2YXIgZDtkPW5ldyB5QyhjKTtjQyhhLGIsZCl9XG5mdW5jdGlvbiBXVWQoYSxiKXt2YXIgYztjPWEuYztWVWQoYSxiKTtyZXR1cm4gY31cbmZ1bmN0aW9uIFlkZChhLGIpe2I8MD8oYS5nPS0xKTooYS5nPWIpO3JldHVybiBhfVxuZnVuY3Rpb24gJDZjKGEsYil7VzZjKGEpO2EuYSo9YjthLmIqPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBHNmMoYSxiLGMsZCxlKXthLmM9YjthLmQ9YzthLmI9ZDthLmE9ZX1cbmZ1bmN0aW9uIERzYihhLGIpe0dzYihhLGIsYS5jLmIsYS5jKTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIGpzYihhKXthLmEuYj1hLmI7YS5iLmE9YS5hO2EuYT1hLmI9bnVsbH1cbmZ1bmN0aW9uIEFxKGEpe3RoaXMuYj1hO3RoaXMuYT1XbSh0aGlzLmIuYSkuRWQoKX1cbmZ1bmN0aW9uIFdxKGEsYil7dGhpcy5iPWE7dGhpcy5hPWI7b2wuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIGFyKGEsYil7dGhpcy5hPWE7dGhpcy5iPWI7b2wuY2FsbCh0aGlzKX1cbmZ1bmN0aW9uIHZ2YihhLGIpe3F2Yi5jYWxsKHRoaXMsYiwxMDQwKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIEVlYihhKXtyZXR1cm4gYT09MHx8aXNOYU4oYSk/YTphPDA/LTE6MX1cbmZ1bmN0aW9uIFdQYihhKXtRUGIoKTtyZXR1cm4ganRkKGEpPT1Yb2QobHRkKGEpKX1cbmZ1bmN0aW9uIFhQYihhKXtRUGIoKTtyZXR1cm4gbHRkKGEpPT1Yb2QoanRkKGEpKX1cbmZ1bmN0aW9uIGlZYihhLGIpe3JldHVybiBoWWIoYSxuZXcgY1diKGIuYSxiLmIpKX1cbmZ1bmN0aW9uIE5aYihhKXtyZXR1cm4gIU9aYihhKSYmYS5jLmkuYz09YS5kLmkuY31cbmZ1bmN0aW9uIF9HYihhKXt2YXIgYjtiPWEubjtyZXR1cm4gYS5hLmIrYi5kK2IuYX1cbmZ1bmN0aW9uIFlIYihhKXt2YXIgYjtiPWEubjtyZXR1cm4gYS5lLmIrYi5kK2IuYX1cbmZ1bmN0aW9uIFpIYihhKXt2YXIgYjtiPWEubjtyZXR1cm4gYS5lLmErYi5iK2IuY31cbmZ1bmN0aW9uIHpmZShhKXt3ZmUoKTsrK3ZmZTtyZXR1cm4gbmV3IGlnZSgwLGEpfVxuZnVuY3Rpb24gb19iKGEpe2lmKGEuYSl7cmV0dXJuIGEuYX1yZXR1cm4gSlpiKGEpfVxuZnVuY3Rpb24gQ0NiKGEpe2lmKCFhKXt0aHJvdyB2YmIobmV3IENkYihudWxsKSl9fVxuZnVuY3Rpb24gWDZkKCl7WDZkPWNjYjtXNmQ9KG1tYigpLG5ldyBhbmIoRndlKSl9XG5mdW5jdGlvbiBleCgpe2V4PWNjYjtuZXcgZ3goKF9rKCksJGspLChMaygpLEtrKSl9XG5mdW5jdGlvbiBvZWIoKXtvZWI9Y2NiO25lYj1LQyhKSSxuaWUsMTksMjU2LDAsMSl9XG5mdW5jdGlvbiBkJGMoYSxiLGMsZCl7ZSRjLmNhbGwodGhpcyxhLGIsYyxkLDAsMCl9XG5mdW5jdGlvbiBzUWMoYSxiLGMpe3JldHVybiBSaGIoYS5iLEJEKGMuYiwxNyksYil9XG5mdW5jdGlvbiB0UWMoYSxiLGMpe3JldHVybiBSaGIoYS5iLEJEKGMuYiwxNyksYil9XG5mdW5jdGlvbiB4ZmQoYSxiKXtyZXR1cm4gRWtiKGEsbmV3IGY3YyhiLmEsYi5iKSl9XG5mdW5jdGlvbiBCaWMoYSxiKXtyZXR1cm4gYS5jPGIuYz8tMTphLmM9PWIuYz8wOjF9XG5mdW5jdGlvbiBCMGIoYSl7cmV0dXJuIGEuZS5jLmxlbmd0aCthLmcuYy5sZW5ndGh9XG5mdW5jdGlvbiBEMGIoYSl7cmV0dXJuIGEuZS5jLmxlbmd0aC1hLmcuYy5sZW5ndGh9XG5mdW5jdGlvbiBPamMoYSl7cmV0dXJuIGEuYi5jLmxlbmd0aC1hLmUuYy5sZW5ndGh9XG5mdW5jdGlvbiBkS2MoYSl7RkpjKCk7cmV0dXJuIChVY2QoKSxFY2QpLkhjKGEuail9XG5mdW5jdGlvbiBsSGQoYSl7JEdkKCk7X0dkLmNhbGwodGhpcyxhKTt0aGlzLmE9LTF9XG5mdW5jdGlvbiBSN2QoYSxiKXtmN2QuY2FsbCh0aGlzLGEsYik7dGhpcy5hPXRoaXN9XG5mdW5jdGlvbiBvZGIoYSxiKXt2YXIgYztjPWxkYihhLGIpO2MuaT0yO3JldHVybiBjfVxuZnVuY3Rpb24gRXZkKGEsYil7dmFyIGM7KythLmo7Yz1hLlRpKGIpO3JldHVybiBjfVxuZnVuY3Rpb24gZTNjKGEsYixjKXthLmE9LTE7aTNjKGEsYi5nLGMpO3JldHVybiBhfVxuZnVuY3Rpb24gUXJkKGEsYixjKXtLcWQoYS5hLGEuYixhLmMsQkQoYiwyMDIpLGMpfVxuZnVuY3Rpb24gT0hkKGEsYil7UEhkKGEsYj09bnVsbD9udWxsOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gU1VkKGEsYil7VVVkKGEsYj09bnVsbD9udWxsOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gVFVkKGEsYil7VVVkKGEsYj09bnVsbD9udWxsOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gWmooYSxiLGMpe3JldHVybiBuZXcgdGsob0FiKGEpLkllKCksYyxiKX1cbmZ1bmN0aW9uIElDKGEsYixjLGQsZSxmKXtyZXR1cm4gSkMoYSxiLGMsZCxlLDAsZil9XG5mdW5jdGlvbiBVY2IoKXtVY2I9Y2NiO1RjYj1LQyh4SSxuaWUsMjE3LDI1NiwwLDEpfVxuZnVuY3Rpb24gQ2ViKCl7Q2ViPWNjYjtCZWI9S0MoTUksbmllLDE2MiwyNTYsMCwxKX1cbmZ1bmN0aW9uIFllYigpe1llYj1jY2I7WGViPUtDKFVJLG5pZSwxODQsMjU2LDAsMSl9XG5mdW5jdGlvbiBkZGIoKXtkZGI9Y2NiO2NkYj1LQyh5SSxuaWUsMTcyLDEyOCwwLDEpfVxuZnVuY3Rpb24gSVZiKCl7SFZiKHRoaXMsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpfVxuZnVuY3Rpb24gbXkoYSl7aW0oKTt0aGlzLmE9KG1tYigpLG5ldyBhbmIoUWIoYSkpKX1cbmZ1bmN0aW9uIGlyKGEpe1FiKGEpO3doaWxlKGEuT2IoKSl7YS5QYigpO2EuUWIoKX19XG5mdW5jdGlvbiBUdyhhKXthLmEuY2QoKTtCRChhLmEuZGQoKSwxNCkuZ2MoKTt6aCgpfVxuZnVuY3Rpb24gbWYoYSl7dGhpcy5jPWE7dGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1cbmZ1bmN0aW9uIGZxYihhKXt0aGlzLmM9YTt0aGlzLmE9bmV3IEdxYih0aGlzLmMuYSl9XG5mdW5jdGlvbiBWcWIoYSl7dGhpcy5hPW5ldyBNcWIoYS5nYygpKTt5ZSh0aGlzLGEpfVxuZnVuY3Rpb24gQnNiKGEpe1dxYi5jYWxsKHRoaXMsbmV3ICRyYik7eWUodGhpcyxhKX1cbmZ1bmN0aW9uIFJmYihhLGIpe2EuYSs9emZiKGIsMCxiLmxlbmd0aCk7cmV0dXJuIGF9XG5mdW5jdGlvbiBJa2IoYSxiKXt0Q2IoYixhLmMubGVuZ3RoKTtyZXR1cm4gYS5jW2JdfVxuZnVuY3Rpb24gJGxiKGEsYil7dENiKGIsYS5hLmxlbmd0aCk7cmV0dXJuIGEuYVtiXX1cbmZ1bmN0aW9uIFlBYihhLGIpe0VBYigpO1Z6Yi5jYWxsKHRoaXMsYSk7dGhpcy5hPWJ9XG5mdW5jdGlvbiBReWIoYSxiKXtyZXR1cm4gQWViKHdiYihBZWIoYS5hKS5hLGIuYSkpfVxuZnVuY3Rpb24ganBiKGEsYil7cmV0dXJuIHVDYihhKSxGY2IoYSwodUNiKGIpLGIpKX1cbmZ1bmN0aW9uIG9wYihhLGIpe3JldHVybiB1Q2IoYiksRmNiKGIsKHVDYihhKSxhKSl9XG5mdW5jdGlvbiBPeWIoYSxiKXtyZXR1cm4gTkMoYiwwLEJ6YihiWzBdLEFlYigxKSkpfVxuZnVuY3Rpb24gQnpiKGEsYil7cmV0dXJuIFF5YihCRChhLDE2MiksQkQoYiwxNjIpKX1cbmZ1bmN0aW9uIHZpYyhhKXtyZXR1cm4gYS5jLUJEKElrYihhLmEsYS5iKSwyODcpLmJ9XG5mdW5jdGlvbiB1TmIoYSl7cmV0dXJuICFhLnE/KG1tYigpLG1tYigpLGttYik6YS5xfVxuZnVuY3Rpb24gWGkoYSl7cmV0dXJuIGEuZS5IZCgpLmdjKCkqYS5jLkhkKCkuZ2MoKX1cbmZ1bmN0aW9uIG9uYyhhLGIsYyl7cmV0dXJuIGJlYihiLmRbYS5nXSxjLmRbYS5nXSl9XG5mdW5jdGlvbiBZSGMoYSxiLGMpe3JldHVybiBiZWIoYS5kW2IucF0sYS5kW2MucF0pfVxuZnVuY3Rpb24gWkhjKGEsYixjKXtyZXR1cm4gYmViKGEuZFtiLnBdLGEuZFtjLnBdKX1cbmZ1bmN0aW9uICRIYyhhLGIsYyl7cmV0dXJuIGJlYihhLmRbYi5wXSxhLmRbYy5wXSl9XG5mdW5jdGlvbiBfSGMoYSxiLGMpe3JldHVybiBiZWIoYS5kW2IucF0sYS5kW2MucF0pfVxuZnVuY3Rpb24gcSRjKGEsYixjKXtyZXR1cm4gJHduZC5NYXRoLm1pbihjL2EsMS9iKX1cbmZ1bmN0aW9uIHNFYyhhLGIpe3JldHVybiBhPzA6JHduZC5NYXRoLm1heCgwLGItMSl9XG5mdW5jdGlvbiBFbGIoYSxiKXt2YXIgYztmb3IoYz0wO2M8YjsrK2Mpe2FbY109LTF9fVxuZnVuY3Rpb24gYlZjKGEpe3ZhciBiO2I9aFZjKGEpO3JldHVybiAhYj9hOmJWYyhiKX1cbmZ1bmN0aW9uIFZvYyhhLGIpe2EuYT09bnVsbCYmVG9jKGEpO3JldHVybiBhLmFbYl19XG5mdW5jdGlvbiBxZWQoYSl7aWYoYS5jKXtyZXR1cm4gYS5jLmZ9cmV0dXJuIGEuZS5ifVxuZnVuY3Rpb24gcmVkKGEpe2lmKGEuYyl7cmV0dXJuIGEuYy5nfXJldHVybiBhLmUuYX1cbmZ1bmN0aW9uIHBGZChhKXt6dWQuY2FsbCh0aGlzLGEuZ2MoKSk7eXRkKHRoaXMsYSl9XG5mdW5jdGlvbiBuWGQoYSxiKXtVVmQoKTtWVmQuY2FsbCh0aGlzLGIpO3RoaXMuYT1hfVxuZnVuY3Rpb24gS1lkKGEsYixjKXt0aGlzLmE9YTt4TWQuY2FsbCh0aGlzLGIsYywyKX1cbmZ1bmN0aW9uIEJfYihhLGIsYyxkKXtzX2IodGhpcyk7dl9iKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiBpZ2UoYSxiKXt3ZmUoKTt4ZmUuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifVxuZnVuY3Rpb24gamdkKGEpe3RoaXMuYj1uZXcgUHNiO3RoaXMuYT1hO3RoaXMuYz0tMX1cbmZ1bmN0aW9uIE1PYigpe3RoaXMuZD1uZXcgZjdjKDAsMCk7dGhpcy5lPW5ldyBUcWJ9XG5mdW5jdGlvbiBOcihhKXtxYy5jYWxsKHRoaXMsMCwwKTt0aGlzLmE9YTt0aGlzLmI9MH1cbmZ1bmN0aW9uIGVqYyhhKXt0aGlzLmE9YTt0aGlzLmM9bmV3IExxYjskaWModGhpcyl9XG5mdW5jdGlvbiBqdShhKXtpZihhLmUuYyE9YS5iKXt0aHJvdyB2YmIobmV3IEFwYil9fVxuZnVuY3Rpb24gYnQoYSl7aWYoYS5jLmUhPWEuYSl7dGhyb3cgdmJiKG5ldyBBcGIpfX1cbmZ1bmN0aW9uIFRiYihhKXtpZihGYmIoYSkpe3JldHVybiBhfDB9cmV0dXJuIHBEKGEpfVxuZnVuY3Rpb24gQmZlKGEsYil7d2ZlKCk7Kyt2ZmU7cmV0dXJuIG5ldyByZ2UoYSxiKX1cbmZ1bmN0aW9uIFNFZChhLGIpe3JldHVybiBhPT1udWxsP2I9PW51bGw6ZGZiKGEsYil9XG5mdW5jdGlvbiBURWQoYSxiKXtyZXR1cm4gYT09bnVsbD9iPT1udWxsOmVmYihhLGIpfVxuZnVuY3Rpb24gTnBiKGEsYixjKXtycWIoYS5hLGIpO3JldHVybiBRcGIoYSxiLmcsYyl9XG5mdW5jdGlvbiBNbGIoYSxiLGMpe29DYigwLGIsYS5sZW5ndGgpO0tsYihhLDAsYixjKX1cbmZ1bmN0aW9uIERrYihhLGIsYyl7d0NiKGIsYS5jLmxlbmd0aCk7YUNiKGEuYyxiLGMpfVxuZnVuY3Rpb24gRGxiKGEsYixjKXt2YXIgZDtmb3IoZD0wO2Q8YjsrK2Qpe2FbZF09Y319XG5mdW5jdGlvbiBxcWIoYSxiKXt2YXIgYztjPXBxYihhKTtubWIoYyxiKTtyZXR1cm4gY31cbmZ1bmN0aW9uIE96KGEsYil7IWEmJihhPVtdKTthW2EubGVuZ3RoXT1iO3JldHVybiBhfVxuZnVuY3Rpb24gQnJiKGEsYil7cmV0dXJuICEoYS5hLmdldChiKT09PXVuZGVmaW5lZCl9XG5mdW5jdGlvbiBXeWIoYSxiKXtyZXR1cm4gTnliKG5ldyByemIsbmV3IGJ6YihhKSxiKX1cbmZ1bmN0aW9uIEl0YihhKXtyZXR1cm4gYT09bnVsbD96dGI6bmV3IEZ0Yih1Q2IoYSkpfVxuZnVuY3Rpb24gdHFiKGEsYil7cmV0dXJuIEpEKGIsMjIpJiZ1cWIoYSxCRChiLDIyKSl9XG5mdW5jdGlvbiB2cWIoYSxiKXtyZXR1cm4gSkQoYiwyMikmJndxYihhLEJEKGIsMjIpKX1cbmZ1bmN0aW9uIEF1YihhKXtyZXR1cm4gQ3ViKGEsMjYpKmlrZStDdWIoYSwyNykqamtlfVxuZnVuY3Rpb24gTUMoYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSkmJmEuaW09PT1nY2J9XG5mdW5jdGlvbiBiZyhhKXthLmI/YmcoYS5iKTphLmQuZGMoKSYmYS5mLmMuQmMoYS5lKX1cbmZ1bmN0aW9uICROYihhLGIpe1A2YyhhLmMsYik7YS5iLmMrPWIuYTthLmIuZCs9Yi5ifVxuZnVuY3Rpb24gWk5iKGEsYil7JE5iKGEsYzdjKG5ldyBmN2MoYi5hLGIuYiksYS5jKSl9XG5mdW5jdGlvbiBCTGIoYSxiKXt0aGlzLmI9bmV3IFBzYjt0aGlzLmE9YTt0aGlzLmM9Yn1cbmZ1bmN0aW9uIE9WYigpe3RoaXMuYj1uZXcgJFZiO3RoaXMuYz1uZXcgU1ZiKHRoaXMpfVxuZnVuY3Rpb24gb0ViKCl7dGhpcy5kPW5ldyBDRWI7dGhpcy5lPW5ldyB1RWIodGhpcyl9XG5mdW5jdGlvbiBhQ2MoKXtaQmMoKTt0aGlzLmY9bmV3IFBzYjt0aGlzLmU9bmV3IFBzYn1cbmZ1bmN0aW9uICRKYygpe0ZKYygpO3RoaXMuaz1uZXcgTHFiO3RoaXMuZD1uZXcgVHFifVxuZnVuY3Rpb24gUmdkKCl7UmdkPWNjYjtRZ2Q9bmV3IE9zZCgoWTljKCksczljKSwwKX1cbmZ1bmN0aW9uIE1yKCl7TXI9Y2NiO0xyPW5ldyBOcihLQyhTSSxVaGUsMSwwLDUsMSkpfVxuZnVuY3Rpb24gZ2ZjKGEsYixjKXtiZmMoYyxhLDEpO0VrYihiLG5ldyBUZmMoYyxhKSl9XG5mdW5jdGlvbiBoZmMoYSxiLGMpe2NmYyhjLGEsMSk7RWtiKGIsbmV3IGRnYyhjLGEpKX1cbmZ1bmN0aW9uIFIkYyhhLGIsYyl7cmV0dXJuIFFxYihhLG5ldyBhRGIoYi5hLGMuYSkpfVxuZnVuY3Rpb24gQUNjKGEsYixjKXtyZXR1cm4gLWJlYihhLmZbYi5wXSxhLmZbYy5wXSl9XG5mdW5jdGlvbiBtSGIoYSxiLGMpe3ZhciBkO2lmKGEpe2Q9YS5pO2QuYz1iO2QuYj1jfX1cbmZ1bmN0aW9uIG5IYihhLGIsYyl7dmFyIGQ7aWYoYSl7ZD1hLmk7ZC5kPWI7ZC5hPWN9fVxuZnVuY3Rpb24gYzNjKGEsYixjKXthLmE9LTE7aTNjKGEsYi5nKzEsYyk7cmV0dXJuIGF9XG5mdW5jdGlvbiBEb2QoYSxiLGMpe2M9X2hkKGEsQkQoYiw0OSksNyxjKTtyZXR1cm4gY31cbmZ1bmN0aW9uIEpIZChhLGIsYyl7Yz1faGQoYSxCRChiLDQ5KSwzLGMpO3JldHVybiBjfVxuZnVuY3Rpb24gSk1kKGEsYixjKXt0aGlzLmE9YTtCTWQuY2FsbCh0aGlzLGIsYywyMil9XG5mdW5jdGlvbiBVVGQoYSxiLGMpe3RoaXMuYT1hO0JNZC5jYWxsKHRoaXMsYixjLDE0KX1cbmZ1bmN0aW9uIGVYZChhLGIsYyxkKXtVVmQoKTtuV2QuY2FsbCh0aGlzLGEsYixjLGQpfVxuZnVuY3Rpb24gbFhkKGEsYixjLGQpe1VWZCgpO25XZC5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiBGTmQoYSxiKXsoYi5CYiZvdGUpIT0wJiYhYS5hLm8mJihhLmEubz1iKX1cbmZ1bmN0aW9uIE1EKGEpe3JldHVybiBhIT1udWxsJiZPRChhKSYmIShhLmltPT09Z2NiKX1cbmZ1bmN0aW9uIElEKGEpe3JldHVybiAhQXJyYXkuaXNBcnJheShhKSYmYS5pbT09PWdjYn1cbmZ1bmN0aW9uIGVkKGEpe3JldHVybiBKRChhLDE1KT9CRChhLDE1KS5ZYygpOmEuS2MoKX1cbmZ1bmN0aW9uIERlKGEpe3JldHVybiBhLlFjKEtDKFNJLFVoZSwxLGEuZ2MoKSw1LDEpKX1cbmZ1bmN0aW9uIHUxZChhLGIpe3JldHVybiBXMWQocDFkKGEsYikpP2IuUWgoKTpudWxsfVxuZnVuY3Rpb24gdXZkKGEpe2E/VHkoYSwoWmZiKCksWWZiKSwnJyk6KFpmYigpLFlmYil9XG5mdW5jdGlvbiBTcihhKXt0aGlzLmE9KE1yKCksTHIpO3RoaXMuZD1CRChRYihhKSw0Nyl9XG5mdW5jdGlvbiBxZyhhLGIsYyxkKXt0aGlzLmE9YTtkZy5jYWxsKHRoaXMsYSxiLGMsZCl9XG5mdW5jdGlvbiBZZ2UoYSl7WGdlKCk7dGhpcy5hPTA7dGhpcy5iPWEtMTt0aGlzLmM9MX1cbmZ1bmN0aW9uIFl5KGEpe1B5KHRoaXMpO3RoaXMuZz1hO1J5KHRoaXMpO3RoaXMuX2QoKX1cbmZ1bmN0aW9uIFdtKGEpe2lmKGEuYyl7cmV0dXJuIGEuY31yZXR1cm4gYS5jPWEuSWQoKX1cbmZ1bmN0aW9uIFhtKGEpe2lmKGEuZCl7cmV0dXJuIGEuZH1yZXR1cm4gYS5kPWEuSmQoKX1cbmZ1bmN0aW9uIFJsKGEpe3ZhciBiO2I9YS5jO3JldHVybiAhYj8oYS5jPWEuRGQoKSk6Yn1cbmZ1bmN0aW9uIGZlKGEpe3ZhciBiO2I9YS5mO3JldHVybiAhYj8oYS5mPWEuRGMoKSk6Yn1cbmZ1bmN0aW9uIEVjKGEpe3ZhciBiO2I9YS5pO3JldHVybiAhYj8oYS5pPWEuYmMoKSk6Yn1cbmZ1bmN0aW9uIEZmZShhKXt3ZmUoKTsrK3ZmZTtyZXR1cm4gbmV3IEhnZSgxMCxhLDApfVxuZnVuY3Rpb24gVWJiKGEpe2lmKEZiYihhKSl7cmV0dXJuICcnK2F9cmV0dXJuIHFEKGEpfVxuZnVuY3Rpb24gYTRkKGEpe2lmKGEuZS5qIT1hLmQpe3Rocm93IHZiYihuZXcgQXBiKX19XG5mdW5jdGlvbiBOYmIoYSxiKXtyZXR1cm4gemJiKGtEKEZiYihhKT9SYmIoYSk6YSxiKSl9XG5mdW5jdGlvbiBPYmIoYSxiKXtyZXR1cm4gemJiKGxEKEZiYihhKT9SYmIoYSk6YSxiKSl9XG5mdW5jdGlvbiBQYmIoYSxiKXtyZXR1cm4gemJiKG1EKEZiYihhKT9SYmIoYSk6YSxiKSl9XG5mdW5jdGlvbiBEY2IoYSxiKXtyZXR1cm4gRWNiKCh1Q2IoYSksYSksKHVDYihiKSxiKSl9XG5mdW5jdGlvbiBEZGIoYSxiKXtyZXR1cm4gS2RiKCh1Q2IoYSksYSksKHVDYihiKSxiKSl9XG5mdW5jdGlvbiBmeChhLGIpe3JldHVybiBRYihiKSxhLmEuQWQoYikmJiFhLmIuQWQoYil9XG5mdW5jdGlvbiBkRChhLGIpe3JldHVybiBUQyhhLmwmYi5sLGEubSZiLm0sYS5oJmIuaCl9XG5mdW5jdGlvbiBqRChhLGIpe3JldHVybiBUQyhhLmx8Yi5sLGEubXxiLm0sYS5ofGIuaCl9XG5mdW5jdGlvbiByRChhLGIpe3JldHVybiBUQyhhLmxeYi5sLGEubV5iLm0sYS5oXmIuaCl9XG5mdW5jdGlvbiBRQWIoYSxiKXtyZXR1cm4gVEFiKGEsKHVDYihiKSxuZXcgUnhiKGIpKSl9XG5mdW5jdGlvbiBSQWIoYSxiKXtyZXR1cm4gVEFiKGEsKHVDYihiKSxuZXcgVHhiKGIpKSl9XG5mdW5jdGlvbiBnMWIoYSl7cmV0dXJuIHowYigpLEJEKGEsMTEpLmUuYy5sZW5ndGghPTB9XG5mdW5jdGlvbiBsMWIoYSl7cmV0dXJuIHowYigpLEJEKGEsMTEpLmcuYy5sZW5ndGghPTB9XG5mdW5jdGlvbiBiYWMoYSxiKXtJOWIoKTtyZXR1cm4gS2RiKGIuYS5vLmEsYS5hLm8uYSl9XG5mdW5jdGlvbiBSbmMoYSxiLGMpe3JldHVybiBTbmMoYSxCRChiLDExKSxCRChjLDExKSl9XG5mdW5jdGlvbiBrb2MoYSl7aWYoYS5lKXtyZXR1cm4gcG9jKGEuZSl9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBJdWIoYSl7aWYoIWEuZCl7YS5kPWEuYi5LYygpO2EuYz1hLmIuZ2MoKX19XG5mdW5jdGlvbiBwQmIoYSxiLGMpe2lmKGEuYS5NYihjKSl7YS5iPXRydWU7Yi50ZChjKX19XG5mdW5jdGlvbiBfdmIoYSxiKXtpZihhPDB8fGE+PWIpe3Rocm93IHZiYihuZXcgcmNiKX19XG5mdW5jdGlvbiBQeWIoYSxiLGMpe05DKGIsMCxCemIoYlswXSxjWzBdKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBfeWMoYSxiLGMpe2IuWWUoYyxFZGIoRUQoT2hiKGEuYixjKSkpKmEuYSl9XG5mdW5jdGlvbiBuNmMoYSxiLGMpe2k2YygpO3JldHVybiBtNmMoYSxiKSYmbTZjKGEsYyl9XG5mdW5jdGlvbiB0Y2QoYSl7cmNkKCk7cmV0dXJuICFhLkhjKG5jZCkmJiFhLkhjKHBjZCl9XG5mdW5jdGlvbiBENmMoYSl7cmV0dXJuIG5ldyBmN2MoYS5jK2EuYi8yLGEuZCthLmEvMil9XG5mdW5jdGlvbiBvT2QoYSxiKXtyZXR1cm4gYi5raCgpP3hpZChhLmIsQkQoYiw0OSkpOmJ9XG5mdW5jdGlvbiBidmIoYSxiKXt0aGlzLmU9YTt0aGlzLmQ9KGImNjQpIT0wP2J8b2llOmJ9XG5mdW5jdGlvbiBxdmIoYSxiKXt0aGlzLmM9MDt0aGlzLmQ9YTt0aGlzLmI9Ynw2NHxvaWV9XG5mdW5jdGlvbiBndWIoYSl7dGhpcy5iPW5ldyBTa2IoMTEpO3RoaXMuYT0oaXBiKCksYSl9XG5mdW5jdGlvbiBRd2IoYSl7dGhpcy5iPW51bGw7dGhpcy5hPShpcGIoKSwhYT9mcGI6YSl9XG5mdW5jdGlvbiBuSGMoYSl7dGhpcy5hPWxIYyhhLmEpO3RoaXMuYj1uZXcgVGtiKGEuYil9XG5mdW5jdGlvbiBQemQoYSl7dGhpcy5iPWE7T3lkLmNhbGwodGhpcyxhKTtPemQodGhpcyl9XG5mdW5jdGlvbiBYemQoYSl7dGhpcy5iPWE7YnpkLmNhbGwodGhpcyxhKTtXemQodGhpcyl9XG5mdW5jdGlvbiBqVWQoYSxiLGMpe3RoaXMuYT1hO2dVZC5jYWxsKHRoaXMsYixjLDUsNil9XG5mdW5jdGlvbiBZNWQoYSxiLGMsZCl7dGhpcy5iPWE7eE1kLmNhbGwodGhpcyxiLGMsZCl9XG5mdW5jdGlvbiBuU2QoYSxiLGMsZCxlKXtvU2QuY2FsbCh0aGlzLGEsYixjLGQsZSwtMSl9XG5mdW5jdGlvbiBEU2QoYSxiLGMsZCxlKXtFU2QuY2FsbCh0aGlzLGEsYixjLGQsZSwtMSl9XG5mdW5jdGlvbiBjVWQoYSxiLGMsZCl7eE1kLmNhbGwodGhpcyxhLGIsYyk7dGhpcy5iPWR9XG5mdW5jdGlvbiBpNWQoYSxiLGMsZCl7cE1kLmNhbGwodGhpcyxhLGIsYyk7dGhpcy5iPWR9XG5mdW5jdGlvbiB4MGQoYSl7V3VkLmNhbGwodGhpcyxhLGZhbHNlKTt0aGlzLmE9ZmFsc2V9XG5mdW5jdGlvbiBMaihhLGIpe3RoaXMuYj1hO3NqLmNhbGwodGhpcyxhLmIpO3RoaXMuYT1ifVxuZnVuY3Rpb24gcHgoYSxiKXtpbSgpO294LmNhbGwodGhpcyxhLERtKG5ldyBhbWIoYikpKX1cbmZ1bmN0aW9uIENmZShhLGIpe3dmZSgpOysrdmZlO3JldHVybiBuZXcgRGdlKGEsYiwwKX1cbmZ1bmN0aW9uIEVmZShhLGIpe3dmZSgpOysrdmZlO3JldHVybiBuZXcgRGdlKDYsYSxiKX1cbmZ1bmN0aW9uIG5mYihhLGIpe3JldHVybiBkZmIoYS5zdWJzdHIoMCxiLmxlbmd0aCksYil9XG5mdW5jdGlvbiBNaGIoYSxiKXtyZXR1cm4gTkQoYik/UWhiKGEsYik6ISFpcmIoYS5mLGIpfVxuZnVuY3Rpb24gUnJiKGEsYil7dUNiKGIpO3doaWxlKGEuT2IoKSl7Yi50ZChhLlBiKCkpfX1cbmZ1bmN0aW9uIFZnYihhLGIsYyl7SGdiKCk7dGhpcy5lPWE7dGhpcy5kPWI7dGhpcy5hPWN9XG5mdW5jdGlvbiBhbWMoYSxiLGMsZCl7dmFyIGU7ZT1hLmk7ZS5pPWI7ZS5hPWM7ZS5iPWR9XG5mdW5jdGlvbiB4SmMoYSl7dmFyIGI7Yj1hO3doaWxlKGIuZil7Yj1iLmZ9cmV0dXJuIGJ9XG5mdW5jdGlvbiBma2IoYSl7dmFyIGI7Yj1ia2IoYSk7c0NiKGIhPW51bGwpO3JldHVybiBifVxuZnVuY3Rpb24gZ2tiKGEpe3ZhciBiO2I9Y2tiKGEpO3NDYihiIT1udWxsKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIGN2KGEsYil7dmFyIGM7Yz1hLmEuZ2MoKTtTYihiLGMpO3JldHVybiBjLWJ9XG5mdW5jdGlvbiBHbGIoYSxiKXt2YXIgYztmb3IoYz0wO2M8YjsrK2Mpe2FbY109ZmFsc2V9fVxuZnVuY3Rpb24gQ2xiKGEsYixjLGQpe3ZhciBlO2ZvcihlPWI7ZTxjOysrZSl7YVtlXT1kfX1cbmZ1bmN0aW9uIHlsYihhLGIsYyxkKXtvQ2IoYixjLGEubGVuZ3RoKTtDbGIoYSxiLGMsZCl9XG5mdW5jdGlvbiBWdmIoYSxiLGMpe192YihjLGEuYS5jLmxlbmd0aCk7TmtiKGEuYSxjLGIpfVxuZnVuY3Rpb24gTHliKGEsYixjKXt0aGlzLmM9YTt0aGlzLmE9YjttbWIoKTt0aGlzLmI9Y31cbmZ1bmN0aW9uIFFwYihhLGIsYyl7dmFyIGQ7ZD1hLmJbYl07YS5iW2JdPWM7cmV0dXJuIGR9XG5mdW5jdGlvbiBRcWIoYSxiKXt2YXIgYztjPWEuYS56YyhiLGEpO3JldHVybiBjPT1udWxsfVxuZnVuY3Rpb24gempiKGEpe2lmKCFhKXt0aHJvdyB2YmIobmV3IHV0Yil9cmV0dXJuIGEuZH1cbmZ1bmN0aW9uIHZDYihhLGIpe2lmKGE9PW51bGwpe3Rocm93IHZiYihuZXcgSGViKGIpKX19XG5mdW5jdGlvbiBHb2MoYSxiKXtpZighYil7cmV0dXJuIGZhbHNlfXJldHVybiB5ZShhLGIpfVxuZnVuY3Rpb24gSzJjKGEsYixjKXtDMmMoYSxiLmcsYyk7cnFiKGEuYyxiKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHZWYihhKXt0VmIoYSwoZWFkKCksYWFkKSk7YS5kPXRydWU7cmV0dXJuIGF9XG5mdW5jdGlvbiBjMmQoYSl7IWEuaiYmaTJkKGEsZDFkKGEuZyxhLmIpKTtyZXR1cm4gYS5qfVxuZnVuY3Rpb24gbmxiKGEpe3lDYihhLmIhPS0xKTtLa2IoYS5jLGEuYT1hLmIpO2EuYj0tMX1cbmZ1bmN0aW9uIFVoYihhKXthLmY9bmV3IGxyYihhKTthLmc9bmV3IEZyYihhKTt6cGIoYSl9XG5mdW5jdGlvbiBQbGIoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxPbGIoYSxhLmxlbmd0aCkpfVxuZnVuY3Rpb24gdWwoYSl7cmV0dXJuIG5ldyBTcihuZXcgeGwoYS5hLmxlbmd0aCxhLmEpKX1cbmZ1bmN0aW9uIGlEKGEpe3JldHVybiBUQyh+YS5sJkVqZSx+YS5tJkVqZSx+YS5oJkZqZSl9XG5mdW5jdGlvbiBPRChhKXtyZXR1cm4gdHlwZW9mIGE9PT1KaGV8fHR5cGVvZiBhPT09TmhlfVxuZnVuY3Rpb24gRDlkKGEpe3JldHVybiBhPT1QamU/TndlOmE9PVFqZT8nLUlORic6JycrYX1cbmZ1bmN0aW9uIEY5ZChhKXtyZXR1cm4gYT09UGplP053ZTphPT1RamU/Jy1JTkYnOicnK2F9XG5mdW5jdGlvbiB5UmIoYSxiKXtyZXR1cm4gYT4wPyR3bmQuTWF0aC5sb2coYS9iKTotMTAwfVxuZnVuY3Rpb24gdWViKGEsYil7cmV0dXJuIHliYihhLGIpPDA/LTE6eWJiKGEsYik+MD8xOjB9XG5mdW5jdGlvbiBITWIoYSxiLGMpe3JldHVybiBJTWIoYSxCRChiLDQ2KSxCRChjLDE2NykpfVxuZnVuY3Rpb24gaXEoYSxiKXtyZXR1cm4gQkQoUmwoV20oYS5hKSkuWGIoYiksNDIpLmNkKCl9XG5mdW5jdGlvbiBPbGIoYSxiKXtyZXR1cm4gYXZiKGIsYS5sZW5ndGgpLG5ldyB2dmIoYSxiKX1cbmZ1bmN0aW9uIFB5ZChhLGIpe3RoaXMuZD1hO0Z5ZC5jYWxsKHRoaXMsYSk7dGhpcy5lPWJ9XG5mdW5jdGlvbiBMdWIoYSl7dGhpcy5kPSh1Q2IoYSksYSk7dGhpcy5hPTA7dGhpcy5jPXJpZX1cbmZ1bmN0aW9uIHJnZShhLGIpe3hmZS5jYWxsKHRoaXMsMSk7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBSemIoYSxiKXshYS5jP0VrYihhLmIsYik6UnpiKGEuYyxiKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHVCKGEsYixjKXt2YXIgZDtkPXRCKGEsYik7dkIoYSxiLGMpO3JldHVybiBkfVxuZnVuY3Rpb24gWkJiKGEsYil7dmFyIGM7Yz1hLnNsaWNlKDAsYik7cmV0dXJuIFBDKGMsYSl9XG5mdW5jdGlvbiBGbGIoYSxiLGMpe3ZhciBkO2ZvcihkPTA7ZDxiOysrZCl7TkMoYSxkLGMpfX1cbmZ1bmN0aW9uIGZmYihhLGIsYyxkLGUpe3doaWxlKGI8Yyl7ZFtlKytdPWJmYihhLGIrKyl9fVxuZnVuY3Rpb24gaExiKGEsYil7cmV0dXJuIEtkYihhLmMuYythLmMuYixiLmMuYytiLmMuYil9XG5mdW5jdGlvbiBBeGIoYSxiKXtyZXR1cm4gSXdiKGEuYSxiLChCY2IoKSx6Y2IpKT09bnVsbH1cbmZ1bmN0aW9uIFZzYihhLGIpe0dzYihhLmQsYixhLmIuYixhLmIpOysrYS5hO2EuYz1udWxsfVxuZnVuY3Rpb24gZDNkKGEsYil7SkxkKGEsSkQoYiwxNTMpP2I6QkQoYiwxOTM3KS5nbCgpKX1cbmZ1bmN0aW9uIGhrYyhhLGIpe01BYihOQWIoYS5PYygpLG5ldyBSa2MpLG5ldyBUa2MoYikpfVxuZnVuY3Rpb24ga2tjKGEsYixjLGQsZSl7amtjKGEsQkQoUWMoYi5rLGMpLDE1KSxjLGQsZSl9XG5mdW5jdGlvbiBsT2MoYSl7YS5zPU5hTjthLmM9TmFOO21PYyhhLGEuZSk7bU9jKGEsYS5qKX1cbmZ1bmN0aW9uIGl0KGEpe2EuYT1udWxsO2EuZT1udWxsO1VoYihhLmIpO2EuZD0wOysrYS5jfVxuZnVuY3Rpb24gZ0tjKGEpe3JldHVybiAkd25kLk1hdGguYWJzKGEuZC5lLWEuZS5lKS1hLmF9XG5mdW5jdGlvbiBNQWQoYSxiLGMpe3JldHVybiBCRChhLmMuX2MoYixCRChjLDEzMykpLDQyKX1cbmZ1bmN0aW9uIG9zKCl7aHMoKTtyZXR1cm4gT0MoR0MoeUcsMSksS2llLDUzOCwwLFtnc10pfVxuZnVuY3Rpb24gVlBiKGEpe1FQYigpO3JldHVybiBYb2QoanRkKGEpKT09WG9kKGx0ZChhKSl9XG5mdW5jdGlvbiBhUmIoYSl7X1FiLmNhbGwodGhpcyk7dGhpcy5hPWE7RWtiKGEuYSx0aGlzKX1cbmZ1bmN0aW9uIHRQYyhhLGIpe3RoaXMuZD1EUGMoYSk7dGhpcy5jPWI7dGhpcy5hPTAuNSpifVxuZnVuY3Rpb24gQTZkKCl7JHJiLmNhbGwodGhpcyk7dGhpcy5hPXRydWU7dGhpcy5iPXRydWV9XG5mdW5jdGlvbiBhTGQoYSl7cmV0dXJuIChhLmk9PW51bGwmJlRLZChhKSxhLmkpLmxlbmd0aH1cbmZ1bmN0aW9uIG9SZChhKXtyZXR1cm4gSkQoYSw5OSkmJihCRChhLDE4KS5CYiZvdGUpIT0wfVxuZnVuY3Rpb24gdzJkKGEsYil7KythLmo7dDNkKGEsYS5pLGIpO3YyZChhLEJEKGIsMzMyKSl9XG5mdW5jdGlvbiB2SWQoYSxiKXtiPWEubmsobnVsbCxiKTtyZXR1cm4gdUlkKGEsbnVsbCxiKX1cbmZ1bmN0aW9uIHl0ZChhLGIpe2EuaGkoKSYmKGI9RHRkKGEsYikpO3JldHVybiBhLldoKGIpfVxuZnVuY3Rpb24gbWRiKGEsYixjKXt2YXIgZDtkPWxkYihhLGIpO3pkYihjLGQpO3JldHVybiBkfVxuZnVuY3Rpb24gbGRiKGEsYil7dmFyIGM7Yz1uZXcgamRiO2Muaj1hO2MuZD1iO3JldHVybiBjfVxuZnVuY3Rpb24gUWIoYSl7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBHZWIpfXJldHVybiBhfVxuZnVuY3Rpb24gRmMoYSl7dmFyIGI7Yj1hLmo7cmV0dXJuICFiPyhhLmo9bmV3IEN3KGEpKTpifVxuZnVuY3Rpb24gVmkoYSl7dmFyIGI7Yj1hLmY7cmV0dXJuICFiPyhhLmY9bmV3IFJqKGEpKTpifVxuZnVuY3Rpb24gY2koYSl7dmFyIGI7cmV0dXJuIGI9YS5rLCFiPyhhLms9bmV3IHRoKGEpKTpifVxuZnVuY3Rpb24gVWMoYSl7dmFyIGI7cmV0dXJuIGI9YS5rLCFiPyhhLms9bmV3IHRoKGEpKTpifVxuZnVuY3Rpb24gUGMoYSl7dmFyIGI7cmV0dXJuIGI9YS5nLCFiPyhhLmc9bmV3IGxoKGEpKTpifVxuZnVuY3Rpb24gWWkoYSl7dmFyIGI7cmV0dXJuIGI9YS5pLCFiPyhhLmk9bmV3IENpKGEpKTpifVxuZnVuY3Rpb24gcW8oYSl7dmFyIGI7Yj1hLmQ7cmV0dXJuICFiPyhhLmQ9bmV3IGFwKGEpKTpifVxuZnVuY3Rpb24gRmIoYSl7UWIoYSk7cmV0dXJuIEpEKGEsNDc1KT9CRChhLDQ3NSk6ZmNiKGEpfVxuZnVuY3Rpb24gSXgoYSl7aWYoSkQoYSw2MDcpKXtyZXR1cm4gYX1yZXR1cm4gbmV3IGJ5KGEpfVxuZnVuY3Rpb24gcWooYSxiKXtQYihiLGEuYy5iLmMuZ2MoKSk7cmV0dXJuIG5ldyBGaihhLGIpfVxuZnVuY3Rpb24gRGZlKGEsYixjKXt3ZmUoKTsrK3ZmZTtyZXR1cm4gbmV3IHpnZShhLGIsYyl9XG5mdW5jdGlvbiBOQyhhLGIsYyl7cUNiKGM9PW51bGx8fEZDKGEsYykpO3JldHVybiBhW2JdPWN9XG5mdW5jdGlvbiBidihhLGIpe3ZhciBjO2M9YS5hLmdjKCk7UGIoYixjKTtyZXR1cm4gYy0xLWJ9XG5mdW5jdGlvbiBBZmIoYSxiKXthLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoYik7cmV0dXJuIGF9XG5mdW5jdGlvbiBLZmIoYSxiKXthLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoYik7cmV0dXJuIGF9XG5mdW5jdGlvbiBvdmIoYSxiKXt1Q2IoYik7d2hpbGUoYS5jPGEuZCl7YS56ZShiLGEuYysrKX19XG5mdW5jdGlvbiBPaGIoYSxiKXtyZXR1cm4gTkQoYik/UGhiKGEsYik6V2QoaXJiKGEuZixiKSl9XG5mdW5jdGlvbiBaUGIoYSxiKXtRUGIoKTtyZXR1cm4gYT09anRkKGIpP2x0ZChiKTpqdGQoYil9XG5mdW5jdGlvbiBpc2QoYSxiKXtRcGQoYSxuZXcgeUMoYi5mIT1udWxsP2IuZjonJytiLmcpKX1cbmZ1bmN0aW9uIGtzZChhLGIpe1FwZChhLG5ldyB5QyhiLmYhPW51bGw/Yi5mOicnK2IuZykpfVxuZnVuY3Rpb24gZFZiKGEpe3RoaXMuYj1uZXcgUmtiO3RoaXMuYT1uZXcgUmtiO3RoaXMuYz1hfVxuZnVuY3Rpb24gSDFiKGEpe3RoaXMuYz1uZXcgZDdjO3RoaXMuYT1uZXcgUmtiO3RoaXMuYj1hfVxuZnVuY3Rpb24gcFJiKGEpe19RYi5jYWxsKHRoaXMpO3RoaXMuYT1uZXcgZDdjO3RoaXMuYz1hfVxuZnVuY3Rpb24geUMoYSl7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBHZWIpfXRoaXMuYT1hfVxuZnVuY3Rpb24gSEEoYSl7ZkEoKTt0aGlzLmI9bmV3IFJrYjt0aGlzLmE9YTtzQSh0aGlzLGEpfVxuZnVuY3Rpb24gdjRjKGEpe3RoaXMuYz1hO3RoaXMuYT1uZXcgUHNiO3RoaXMuYj1uZXcgUHNifVxuZnVuY3Rpb24gR0IoKXtHQj1jY2I7RUI9bmV3IEhCKGZhbHNlKTtGQj1uZXcgSEIodHJ1ZSl9XG5mdW5jdGlvbiBpbSgpe2ltPWNjYjtRbCgpO2htPW5ldyB1eCgobW1iKCksbW1iKCksam1iKSl9XG5mdW5jdGlvbiB5eCgpe3l4PWNjYjtRbCgpO3h4PW5ldyB6eCgobW1iKCksbW1iKCksbG1iKSl9XG5mdW5jdGlvbiBORmQoKXtORmQ9Y2NiO01GZD1CWmQoKTshIShqR2QoKSxQRmQpJiZEWmQoKX1cbmZ1bmN0aW9uIGFhYyhhLGIpe0k5YigpO3JldHVybiBCRChNcGIoYSxiLmQpLDE1KS5GYyhiKX1cbmZ1bmN0aW9uIHBUYihhLGIsYyxkKXtyZXR1cm4gYz09MHx8KGMtZCkvYzxhLmV8fGI+PWEuZ31cbmZ1bmN0aW9uIE5IYyhhLGIsYyl7dmFyIGQ7ZD1USGMoYSxiLGMpO3JldHVybiBNSGMoYSxkKX1cbmZ1bmN0aW9uIFFwZChhLGIpe3ZhciBjO2M9YS5hLmxlbmd0aDt0QihhLGMpO3ZCKGEsYyxiKX1cbmZ1bmN0aW9uIGdDYihhLGIpe3ZhciBjO2M9Y29uc29sZVthXTtjLmNhbGwoY29uc29sZSxiKX1cbmZ1bmN0aW9uIEJ2ZChhLGIpe3ZhciBjOysrYS5qO2M9YS5WaSgpO2EuSWkoYS5vaShjLGIpKX1cbmZ1bmN0aW9uIEUxYyhhLGIsYyl7QkQoYi5iLDY1KTtIa2IoYi5hLG5ldyBMMWMoYSxjLGIpKX1cbmZ1bmN0aW9uIG9YZChhLGIsYyl7VlZkLmNhbGwodGhpcyxiKTt0aGlzLmE9YTt0aGlzLmI9Y31cbmZ1bmN0aW9uIERnZShhLGIsYyl7eGZlLmNhbGwodGhpcyxhKTt0aGlzLmE9Yjt0aGlzLmI9Y31cbmZ1bmN0aW9uIGRZZChhLGIsYyl7dGhpcy5hPWE7bFZkLmNhbGwodGhpcyxiKTt0aGlzLmI9Y31cbmZ1bmN0aW9uIGYwZChhLGIsYyl7dGhpcy5hPWE7bXhkLmNhbGwodGhpcyw4LGIsbnVsbCxjKX1cbmZ1bmN0aW9uIHoxZChhKXt0aGlzLmE9KHVDYihSdmUpLFJ2ZSk7dGhpcy5iPWE7bmV3IG9VZH1cbmZ1bmN0aW9uIGN0KGEpe3RoaXMuYz1hO3RoaXMuYj10aGlzLmMuYTt0aGlzLmE9dGhpcy5jLmV9XG5mdW5jdGlvbiB1c2IoYSl7dGhpcy5jPWE7dGhpcy5iPWEuYS5kLmE7eXBiKGEuYS5lLHRoaXMpfVxuZnVuY3Rpb24gdWliKGEpe3lDYihhLmMhPS0xKTthLmQuJGMoYS5jKTthLmI9YS5jO2EuYz0tMX1cbmZ1bmN0aW9uIFU2YyhhKXtyZXR1cm4gJHduZC5NYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKX1cbmZ1bmN0aW9uIFV2YihhLGIpe3JldHVybiBfdmIoYixhLmEuYy5sZW5ndGgpLElrYihhLmEsYil9XG5mdW5jdGlvbiBIYihhLGIpe3JldHVybiBQRChhKT09PVBEKGIpfHxhIT1udWxsJiZwYihhLGIpfVxuZnVuY3Rpb24gb0FiKGEpe2lmKDA+PWEpe3JldHVybiBuZXcgeUFifXJldHVybiBwQWIoYS0xKX1cbmZ1bmN0aW9uIE5mZShhKXtpZighYmZlKXJldHVybiBmYWxzZTtyZXR1cm4gUWhiKGJmZSxhKX1cbmZ1bmN0aW9uIEVoZShhKXtpZihhKXJldHVybiBhLmRjKCk7cmV0dXJuICFhLktjKCkuT2IoKX1cbmZ1bmN0aW9uIFFfYihhKXtpZighYS5hJiYhIWEuYyl7cmV0dXJuIGEuYy5ifXJldHVybiBhLmF9XG5mdW5jdGlvbiBMSGQoYSl7IWEuYSYmKGEuYT1uZXcgeE1kKG01LGEsNCkpO3JldHVybiBhLmF9XG5mdW5jdGlvbiBMUWQoYSl7IWEuZCYmKGEuZD1uZXcgeE1kKGo1LGEsMSkpO3JldHVybiBhLmR9XG5mdW5jdGlvbiB1Q2IoYSl7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBHZWIpfXJldHVybiBhfVxuZnVuY3Rpb24gUXpiKGEpe2lmKCFhLmMpe2EuZD10cnVlO1N6YihhKX1lbHNle2EuYy5IZSgpfX1cbmZ1bmN0aW9uIFR6YihhKXtpZighYS5jKXtVemIoYSk7YS5kPXRydWV9ZWxzZXtUemIoYS5jKX19XG5mdW5jdGlvbiBLcGIoYSl7QWUoYS5hKTthLmI9S0MoU0ksVWhlLDEsYS5iLmxlbmd0aCw1LDEpfVxuZnVuY3Rpb24gcWxjKGEsYil7cmV0dXJuIGJlYihiLmouYy5sZW5ndGgsYS5qLmMubGVuZ3RoKX1cbmZ1bmN0aW9uIGlnZChhLGIpe2EuYzwwfHxhLmIuYjxhLmM/RnNiKGEuYixiKTphLmEuX2UoYil9XG5mdW5jdGlvbiBEaWQoYSxiKXt2YXIgYztjPWEuWWcoYik7Yz49MD9hLkJoKGMpOnZpZChhLGIpfVxuZnVuY3Rpb24gV0hjKGEpe3ZhciBiLGM7Yj1hLmMuaS5jO2M9YS5kLmkuYztyZXR1cm4gYj09Y31cbmZ1bmN0aW9uIFd3ZChhKXtpZihhLnAhPTQpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBhLmV9XG5mdW5jdGlvbiBWd2QoYSl7aWYoYS5wIT0zKXRocm93IHZiYihuZXcgWWRiKTtyZXR1cm4gYS5lfVxuZnVuY3Rpb24gWXdkKGEpe2lmKGEucCE9Nil0aHJvdyB2YmIobmV3IFlkYik7cmV0dXJuIGEuZn1cbmZ1bmN0aW9uIGZ4ZChhKXtpZihhLnAhPTYpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBhLmt9XG5mdW5jdGlvbiBjeGQoYSl7aWYoYS5wIT0zKXRocm93IHZiYihuZXcgWWRiKTtyZXR1cm4gYS5qfVxuZnVuY3Rpb24gZHhkKGEpe2lmKGEucCE9NCl0aHJvdyB2YmIobmV3IFlkYik7cmV0dXJuIGEuan1cbmZ1bmN0aW9uIEFZZChhKXshYS5iJiYoYS5iPW5ldyBSWWQobmV3IE5ZZCkpO3JldHVybiBhLmJ9XG5mdW5jdGlvbiAkMWQoYSl7YS5jPT0tMiYmZTJkKGEsWDBkKGEuZyxhLmIpKTtyZXR1cm4gYS5jfVxuZnVuY3Rpb24gcGRiKGEsYil7dmFyIGM7Yz1sZGIoJycsYSk7Yy5uPWI7Yy5pPTE7cmV0dXJuIGN9XG5mdW5jdGlvbiBNTmIoYSxiKXskTmIoQkQoYi5iLDY1KSxhKTtIa2IoYi5hLG5ldyBSTmIoYSkpfVxuZnVuY3Rpb24gQ25kKGEsYil7d3RkKCghYS5hJiYoYS5hPW5ldyBmVGQoYSxhKSksYS5hKSxiKX1cbmZ1bmN0aW9uIFF6ZChhLGIpe3RoaXMuYj1hO1B5ZC5jYWxsKHRoaXMsYSxiKTtPemQodGhpcyl9XG5mdW5jdGlvbiBZemQoYSxiKXt0aGlzLmI9YTtjemQuY2FsbCh0aGlzLGEsYik7V3pkKHRoaXMpfVxuZnVuY3Rpb24gTXMoYSxiLGMsZCl7V28uY2FsbCh0aGlzLGEsYik7dGhpcy5kPWM7dGhpcy5hPWR9XG5mdW5jdGlvbiAkbyhhLGIsYyxkKXtXby5jYWxsKHRoaXMsYSxjKTt0aGlzLmE9Yjt0aGlzLmY9ZH1cbmZ1bmN0aW9uIGl5KGEsYil7UHAuY2FsbCh0aGlzLHVtYihRYihhKSxRYihiKSkpO3RoaXMuYT1ifVxuZnVuY3Rpb24gY2FlKCl7Zm9kLmNhbGwodGhpcyxFd2UsKHA4ZCgpLG84ZCkpOyQ5ZCh0aGlzKX1cbmZ1bmN0aW9uIEFaZCgpe2ZvZC5jYWxsKHRoaXMsX3ZlLChMRmQoKSxLRmQpKTt1WmQodGhpcyl9XG5mdW5jdGlvbiBUMGMoKXskci5jYWxsKHRoaXMsJ0RFTEFVTkFZX1RSSUFOR1VMQVRJT04nLDApfVxuZnVuY3Rpb24gdmZiKGEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYSl9XG5mdW5jdGlvbiBSaGIoYSxiLGMpe3JldHVybiBORChiKT9TaGIoYSxiLGMpOmpyYihhLmYsYixjKX1cbmZ1bmN0aW9uIHRtYihhKXttbWIoKTtyZXR1cm4gIWE/KGlwYigpLGlwYigpLGhwYik6YS52ZSgpfVxuZnVuY3Rpb24gZDJjKGEsYixjKXtZMWMoKTtyZXR1cm4gYy5wZyhhLEJEKGIuY2QoKSwxNDYpKX1cbmZ1bmN0aW9uIGl4KGEsYil7ZXgoKTtyZXR1cm4gbmV3IGd4KG5ldyBpbChhKSxuZXcgVWsoYikpfVxuZnVuY3Rpb24gSXUoYSl7WGooYSxNaWUpO3JldHVybiBPeSh3YmIod2JiKDUsYSksYS8xMHwwKSl9XG5mdW5jdGlvbiBWbSgpe1ZtPWNjYjtVbT1uZXcgd3goT0MoR0MoQ0ssMSksemllLDQyLDAsW10pKX1cbmZ1bmN0aW9uIGhvYihhKXshYS5kJiYoYS5kPW5ldyBsbmIoYS5jLkNjKCkpKTtyZXR1cm4gYS5kfVxuZnVuY3Rpb24gZW9iKGEpeyFhLmEmJihhLmE9bmV3IEdvYihhLmMudmMoKSkpO3JldHVybiBhLmF9XG5mdW5jdGlvbiBnb2IoYSl7IWEuYiYmKGEuYj1uZXcgem9iKGEuYy5lYygpKSk7cmV0dXJuIGEuYn1cbmZ1bmN0aW9uIGtlYihhLGIpe3doaWxlKGItLT4wKXthPWE8PDF8KGE8MD8xOjApfXJldHVybiBhfVxuZnVuY3Rpb24gd3RiKGEsYil7cmV0dXJuIFBEKGEpPT09UEQoYil8fGEhPW51bGwmJnBiKGEsYil9XG5mdW5jdGlvbiBHYmMoYSxiKXtyZXR1cm4gQmNiKCksQkQoYi5iLDE5KS5hPGE/dHJ1ZTpmYWxzZX1cbmZ1bmN0aW9uIEhiYyhhLGIpe3JldHVybiBCY2IoKSxCRChiLmEsMTkpLmE8YT90cnVlOmZhbHNlfVxuZnVuY3Rpb24gTXBiKGEsYil7cmV0dXJuIHRxYihhLmEsYik/YS5iW0JEKGIsMjIpLmddOm51bGx9XG5mdW5jdGlvbiBrY2IoYSxiLGMsZCl7YS5hPXFmYihhLmEsMCxiKSsoJycrZCkrcGZiKGEuYSxjKX1cbmZ1bmN0aW9uIE9KYihhLGIpe2EudS5IYygocmNkKCksbmNkKSkmJk1KYihhLGIpO1FKYihhLGIpfVxuZnVuY3Rpb24gYmZiKGEsYil7QkNiKGIsYS5sZW5ndGgpO3JldHVybiBhLmNoYXJDb2RlQXQoYil9XG5mdW5jdGlvbiB2dGIoKXtoei5jYWxsKHRoaXMsJ1RoZXJlIGlzIG5vIG1vcmUgZWxlbWVudC4nKX1cbmZ1bmN0aW9uIHhrYihhKXt0aGlzLmQ9YTt0aGlzLmE9dGhpcy5kLmI7dGhpcy5iPXRoaXMuZC5jfVxuZnVuY3Rpb24ga0ViKGEpe2EuYj1mYWxzZTthLmM9ZmFsc2U7YS5kPWZhbHNlO2EuYT1mYWxzZX1cbmZ1bmN0aW9uIFpuZChhLGIsYyxkKXtZbmQoYSxiLGMsZmFsc2UpO0xQZChhLGQpO3JldHVybiBhfVxuZnVuY3Rpb24gaDNjKGEpe2Euai5jPUtDKFNJLFVoZSwxLDAsNSwxKTthLmE9LTE7cmV0dXJuIGF9XG5mdW5jdGlvbiBPbGQoYSl7IWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSk7cmV0dXJuIGEuY31cbmZ1bmN0aW9uIE5sZChhKXshYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKTtyZXR1cm4gYS5ifVxuZnVuY3Rpb24gS2tkKGEpeyFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpO3JldHVybiBhLm59XG5mdW5jdGlvbiBZb2QoYSl7IWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSk7cmV0dXJuIGEuY31cbmZ1bmN0aW9uIGEyZChhKXthLmU9PUd3ZSYmZzJkKGEsYTFkKGEuZyxhLmIpKTtyZXR1cm4gYS5lfVxuZnVuY3Rpb24gYjJkKGEpe2EuZj09R3dlJiZoMmQoYSxiMWQoYS5nLGEuYikpO3JldHVybiBhLmZ9XG5mdW5jdGlvbiBBaChhKXt2YXIgYjtiPWEuYjshYiYmKGEuYj1iPW5ldyBQaChhKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBBZShhKXt2YXIgYjtmb3IoYj1hLktjKCk7Yi5PYigpOyl7Yi5QYigpO2IuUWIoKX19XG5mdW5jdGlvbiBGZyhhKXthZyhhLmQpO2lmKGEuZC5kIT1hLmMpe3Rocm93IHZiYihuZXcgQXBiKX19XG5mdW5jdGlvbiBYeChhLGIpe3RoaXMuYj1hO3RoaXMuYz1iO3RoaXMuYT1uZXcgR3FiKHRoaXMuYil9XG5mdW5jdGlvbiBaZWIoYSxiLGMpe3RoaXMuYT1aaWU7dGhpcy5kPWE7dGhpcy5iPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiBNdWIoYSxiKXt0aGlzLmQ9KHVDYihhKSxhKTt0aGlzLmE9MTY0NDk7dGhpcy5jPWJ9XG5mdW5jdGlvbiBucWQoYSxiKXtjdGQoYSxFZGIoWHBkKGIsJ3gnKSksRWRiKFhwZChiLCd5JykpKX1cbmZ1bmN0aW9uIEFxZChhLGIpe2N0ZChhLEVkYihYcGQoYiwneCcpKSxFZGIoWHBkKGIsJ3knKSkpfVxuZnVuY3Rpb24gSkFiKGEsYil7VXpiKGEpO3JldHVybiBuZXcgWUFiKGEsbmV3IHFCYihiLGEuYSkpfVxuZnVuY3Rpb24gTkFiKGEsYil7VXpiKGEpO3JldHVybiBuZXcgWUFiKGEsbmV3IElCYihiLGEuYSkpfVxuZnVuY3Rpb24gT0FiKGEsYil7VXpiKGEpO3JldHVybiBuZXcgYkFiKGEsbmV3IHdCYihiLGEuYSkpfVxuZnVuY3Rpb24gUEFiKGEsYil7VXpiKGEpO3JldHVybiBuZXcgdkFiKGEsbmV3IENCYihiLGEuYSkpfVxuZnVuY3Rpb24gQ3koYSxiKXtyZXR1cm4gbmV3IEF5KEJEKFFiKGEpLDYyKSxCRChRYihiKSw2MikpfVxuZnVuY3Rpb24gUFdiKGEsYil7TFdiKCk7cmV0dXJuIEtkYigodUNiKGEpLGEpLCh1Q2IoYiksYikpfVxuZnVuY3Rpb24gZlBiKCl7Y1BiKCk7cmV0dXJuIE9DKEdDKEdPLDEpLEtpZSw0ODEsMCxbYlBiXSl9XG5mdW5jdGlvbiBvX2MoKXtpX2MoKTtyZXR1cm4gT0MoR0MoTl8sMSksS2llLDQ4MiwwLFtoX2NdKX1cbmZ1bmN0aW9uIHhfYygpe3NfYygpO3JldHVybiBPQyhHQyhPXywxKSxLaWUsNTUxLDAsW3JfY10pfVxuZnVuY3Rpb24gWDBjKCl7UjBjKCk7cmV0dXJuIE9DKEdDKFdfLDEpLEtpZSw1MzAsMCxbUTBjXSl9XG5mdW5jdGlvbiBjRWMoYSl7dGhpcy5hPW5ldyBSa2I7dGhpcy5lPUtDKFdELG5pZSw0OCxhLDAsMil9XG5mdW5jdGlvbiBsJGIoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5lPWI7dGhpcy5kPWM7dGhpcy5jPWR9XG5mdW5jdGlvbiBRSWMoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5iPWM7dGhpcy5kPWR9XG5mdW5jdGlvbiByS2MoYSxiLGMsZCl7dGhpcy5jPWE7dGhpcy5iPWI7dGhpcy5hPWM7dGhpcy5kPWR9XG5mdW5jdGlvbiBXS2MoYSxiLGMsZCl7dGhpcy5jPWE7dGhpcy5iPWI7dGhpcy5kPWM7dGhpcy5hPWR9XG5mdW5jdGlvbiBKNmMoYSxiLGMsZCl7dGhpcy5jPWE7dGhpcy5kPWI7dGhpcy5iPWM7dGhpcy5hPWR9XG5mdW5jdGlvbiBnUGMoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5kPWI7dGhpcy5jPWM7dGhpcy5iPWR9XG5mdW5jdGlvbiBCbGMoYSxiLGMsZCl7JHIuY2FsbCh0aGlzLGEsYik7dGhpcy5hPWM7dGhpcy5iPWR9XG5mdW5jdGlvbiBHZ2QoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5kPWM7dGhpcy5iPWR9XG5mdW5jdGlvbiBwZWMoYSxiLGMpe1BtYyhhLmEsYyk7ZG1jKGMpO2VuYyhhLmIsYyk7eG1jKGIsYyl9XG5mdW5jdGlvbiBQaWQoYSxiLGMpe3ZhciBkLGU7ZD1RRWQoYSk7ZT1iLktoKGMsZCk7cmV0dXJuIGV9XG5mdW5jdGlvbiBLUGIoYSxiKXt2YXIgYyxkO2M9YS9iO2Q9UUQoYyk7Yz5kJiYrK2Q7cmV0dXJuIGR9XG5mdW5jdGlvbiBObmQoYSl7dmFyIGIsYztjPShiPW5ldyBVUWQsYik7TlFkKGMsYSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBPbmQoYSl7dmFyIGIsYztjPShiPW5ldyBVUWQsYik7UlFkKGMsYSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBocWQoYSxiKXt2YXIgYztjPU9oYihhLmYsYik7WXFkKGIsYyk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBKWmIoYSl7dmFyIGI7Yj1QMmIoYSk7aWYoYil7cmV0dXJuIGJ9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBXb2QoYSl7IWEuYiYmKGEuYj1uZXcgY1VkKEIyLGEsMTIsMykpO3JldHVybiBhLmJ9XG5mdW5jdGlvbiBZRWQoYSl7cmV0dXJuIGEhPW51bGwmJmhuYihHRWQsYS50b0xvd2VyQ2FzZSgpKX1cbmZ1bmN0aW9uIGllZChhLGIpe3JldHVybiBLZGIocmVkKGEpKnFlZChhKSxyZWQoYikqcWVkKGIpKX1cbmZ1bmN0aW9uIGplZChhLGIpe3JldHVybiBLZGIocmVkKGEpKnFlZChhKSxyZWQoYikqcWVkKGIpKX1cbmZ1bmN0aW9uIHdFYihhLGIpe3JldHVybiBLZGIoYS5kLmMrYS5kLmIvMixiLmQuYytiLmQuYi8yKX1cbmZ1bmN0aW9uIFVWYihhLGIpe3JldHVybiBLZGIoYS5nLmMrYS5nLmIvMixiLmcuYytiLmcuYi8yKX1cbmZ1bmN0aW9uIHBRYihhLGIsYyl7Yy5hP2VsZChhLGIuYi1hLmYvMik6ZGxkKGEsYi5hLWEuZy8yKX1cbmZ1bmN0aW9uIHByZChhLGIsYyxkKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Yzt0aGlzLmQ9ZH1cbmZ1bmN0aW9uIG9yZChhLGIsYyxkKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Yzt0aGlzLmQ9ZH1cbmZ1bmN0aW9uIEpWZChhLGIsYyxkKXt0aGlzLmU9YTt0aGlzLmE9Yjt0aGlzLmM9Yzt0aGlzLmQ9ZH1cbmZ1bmN0aW9uIFpWZChhLGIsYyxkKXt0aGlzLmE9YTt0aGlzLmM9Yjt0aGlzLmQ9Yzt0aGlzLmI9ZH1cbmZ1bmN0aW9uIGNYZChhLGIsYyxkKXtVVmQoKTttV2QuY2FsbCh0aGlzLGIsYyxkKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIGpYZChhLGIsYyxkKXtVVmQoKTttV2QuY2FsbCh0aGlzLGIsYyxkKTt0aGlzLmE9YX1cbmZ1bmN0aW9uIE5nKGEsYil7dGhpcy5hPWE7SGcuY2FsbCh0aGlzLGEsQkQoYS5kLDE1KS5aYyhiKSl9XG5mdW5jdGlvbiBaQmQoYSl7dGhpcy5mPWE7dGhpcy5jPXRoaXMuZi5lO2EuZj4wJiZZQmQodGhpcyl9XG5mdW5jdGlvbiBsQmIoYSxiLGMsZCl7dGhpcy5iPWE7dGhpcy5jPWQ7bnZiLmNhbGwodGhpcyxiLGMpfVxuZnVuY3Rpb24gdGliKGEpe3NDYihhLmI8YS5kLmdjKCkpO3JldHVybiBhLmQuWGIoYS5jPWEuYisrKX1cbmZ1bmN0aW9uIE9zYihhKXthLmEuYT1hLmM7YS5jLmI9YS5hO2EuYS5iPWEuYy5hPW51bGw7YS5iPTB9XG5mdW5jdGlvbiB1X2IoYSxiKXthLmI9Yi5iO2EuYz1iLmM7YS5kPWIuZDthLmE9Yi5hO3JldHVybiBhfVxuZnVuY3Rpb24gUnkoYSl7aWYoYS5uKXthLmUhPT1TaWUmJmEuX2QoKTthLmo9bnVsbH1yZXR1cm4gYX1cbmZ1bmN0aW9uIEZEKGEpe0NDYihhPT1udWxsfHxPRChhKSYmIShhLmltPT09Z2NiKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBwNGIoYSl7dGhpcy5iPW5ldyBSa2I7R2tiKHRoaXMuYix0aGlzLmIpO3RoaXMuYT1hfVxuZnVuY3Rpb24gUVBiKCl7UVBiPWNjYjtQUGI9bmV3IFJrYjtPUGI9bmV3IExxYjtOUGI9bmV3IFJrYn1cbmZ1bmN0aW9uIG1tYigpe21tYj1jY2I7am1iPW5ldyB4bWI7a21iPW5ldyBRbWI7bG1iPW5ldyBZbWJ9XG5mdW5jdGlvbiBpcGIoKXtpcGI9Y2NiO2ZwYj1uZXcga3BiO2dwYj1uZXcga3BiO2hwYj1uZXcgcHBifVxuZnVuY3Rpb24gT0RiKCl7T0RiPWNjYjtMRGI9bmV3IEpEYjtORGI9bmV3IG9FYjtNRGI9bmV3IGZFYn1cbmZ1bmN0aW9uIE1DYigpe2lmKEhDYj09MjU2KXtHQ2I9SUNiO0lDYj1uZXcgbmI7SENiPTB9KytIQ2J9XG5mdW5jdGlvbiBuZChhKXt2YXIgYjtyZXR1cm4gYj1hLmYsIWI/KGEuZj1uZXcgbmUoYSxhLmMpKTpifVxuZnVuY3Rpb24gZDJiKGEpe3JldHVybiBRbGQoYSkmJkNjYihERChoa2QoYSwoTnljKCksZ3hjKSkpKX1cbmZ1bmN0aW9uIG1jYyhhLGIpe3JldHVybiBSYyhhLEJEKHZOYihiLChOeWMoKSxOeGMpKSwxOSksYil9XG5mdW5jdGlvbiBQT2MoYSxiKXtyZXR1cm4gdlBjKGEuaixiLnMsYi5jKSt2UGMoYi5lLGEucyxhLmMpfVxuZnVuY3Rpb24gb29jKGEsYil7aWYoISFhLmUmJiFhLmUuYSl7bW9jKGEuZSxiKTtvb2MoYS5lLGIpfX1cbmZ1bmN0aW9uIG5vYyhhLGIpe2lmKCEhYS5kJiYhYS5kLmEpe21vYyhhLmQsYik7bm9jKGEuZCxiKX19XG5mdW5jdGlvbiBoZWQoYSxiKXtyZXR1cm4gLUtkYihyZWQoYSkqcWVkKGEpLHJlZChiKSpxZWQoYikpfVxuZnVuY3Rpb24gY2dkKGEpe3JldHVybiBCRChhLmNkKCksMTQ2KS50ZygpKyc6JytmY2IoYS5kZCgpKX1cbmZ1bmN0aW9uIFpnYyhhKXtIZ2MoKTt2YXIgYjtiPUJEKGEuZywxMCk7Yi5uLmE9YS5kLmMrYi5kLmJ9XG5mdW5jdGlvbiB3Z2MoYSxiLGMpe3FnYygpO3JldHVybiBpRWIoQkQoT2hiKGEuZSxiKSw1MjIpLGMpfVxuZnVuY3Rpb24gWTJjKGEsYil7cmIoYSk7cmIoYik7cmV0dXJuIFhyKEJEKGEsMjIpLEJEKGIsMjIpKX1cbmZ1bmN0aW9uIG9pYyhhLGIsYyl7YS5pPTA7YS5lPTA7aWYoYj09Yyl7cmV0dXJufWtpYyhhLGIsYyl9XG5mdW5jdGlvbiBwaWMoYSxiLGMpe2EuaT0wO2EuZT0wO2lmKGI9PWMpe3JldHVybn1saWMoYSxiLGMpfVxuZnVuY3Rpb24gU3BkKGEsYixjKXt2YXIgZCxlO2Q9S2NiKGMpO2U9bmV3IFRCKGQpO2NDKGEsYixlKX1cbmZ1bmN0aW9uIEZTZChhLGIsYyxkLGUsZil7RVNkLmNhbGwodGhpcyxhLGIsYyxkLGUsZj8tMjotMSl9XG5mdW5jdGlvbiBVNWQoYSxiLGMsZCl7TUxkLmNhbGwodGhpcyxiLGMpO3RoaXMuYj1hO3RoaXMuYT1kfVxuZnVuY3Rpb24gUVJjKGEsYil7bmV3IFBzYjt0aGlzLmE9bmV3IHM3Yzt0aGlzLmI9YTt0aGlzLmM9Yn1cbmZ1bmN0aW9uIEhlYyhhLGIpe0JEKHZOYihhLCh3dGMoKSxRc2MpKSwxNSkuRmMoYik7cmV0dXJuIGJ9XG5mdW5jdGlvbiBSYihhLGIpe2lmKGE9PW51bGwpe3Rocm93IHZiYihuZXcgSGViKGIpKX1yZXR1cm4gYX1cbmZ1bmN0aW9uIFdLZChhKXshYS5xJiYoYS5xPW5ldyBjVWQobjUsYSwxMSwxMCkpO3JldHVybiBhLnF9XG5mdW5jdGlvbiBaS2QoYSl7IWEucyYmKGEucz1uZXcgY1VkKHQ1LGEsMjEsMTcpKTtyZXR1cm4gYS5zfVxuZnVuY3Rpb24gVm9kKGEpeyFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSk7cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIER4KGEpe3JldHVybiBKRChhLDE0KT9uZXcgVnFiKEJEKGEsMTQpKTpFeChhLktjKCkpfVxuZnVuY3Rpb24gTmkoYSl7cmV0dXJuIG5ldyBhaihhLGEuZS5IZCgpLmdjKCkqYS5jLkhkKCkuZ2MoKSl9XG5mdW5jdGlvbiBaaShhKXtyZXR1cm4gbmV3IGtqKGEsYS5lLkhkKCkuZ2MoKSphLmMuSGQoKS5nYygpKX1cbmZ1bmN0aW9uIHJ6KGEpe3JldHVybiAhIWEmJiEhYS5oYXNoQ29kZT9hLmhhc2hDb2RlKCk6RkNiKGEpfVxuZnVuY3Rpb24gUWhiKGEsYil7cmV0dXJuIGI9PW51bGw/ISFpcmIoYS5mLG51bGwpOkJyYihhLmcsYil9XG5mdW5jdGlvbiBPcShhKXtRYihhKTtyZXR1cm4gbXIobmV3IFNyKHVyKGEuYS5LYygpLG5ldyBTcSkpKX1cbmZ1bmN0aW9uIHZtYihhKXttbWIoKTtyZXR1cm4gSkQoYSw1NCk/bmV3IFlvYihhKTpuZXcgSW5iKGEpfVxuZnVuY3Rpb24gVkRiKGEsYixjKXtpZihhLmYpe3JldHVybiBhLmYuTmUoYixjKX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBHZmIoYSxiKXthLmE9cWZiKGEuYSwwLGIpKycnK3BmYihhLmEsYisxKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGZWYihhLGIpe3ZhciBjO2M9U3FiKGEuYSxiKTtjJiYoYi5kPW51bGwpO3JldHVybiBjfVxuZnVuY3Rpb24genBiKGEpe3ZhciBiLGM7Yz1hO2I9Yy4kbW9kQ291bnR8MDtjLiRtb2RDb3VudD1iKzF9XG5mdW5jdGlvbiBwdShhKXt0aGlzLmI9YTt0aGlzLmM9YTthLmU9bnVsbDthLmM9bnVsbDt0aGlzLmE9MX1cbmZ1bmN0aW9uIGhPYihhKXt0aGlzLmI9YTt0aGlzLmE9bmV3IEh4YihCRChRYihuZXcga09iKSw2MikpfVxuZnVuY3Rpb24gdUViKGEpe3RoaXMuYz1hO3RoaXMuYj1uZXcgSHhiKEJEKFFiKG5ldyB4RWIpLDYyKSl9XG5mdW5jdGlvbiBTVmIoYSl7dGhpcy5jPWE7dGhpcy5iPW5ldyBIeGIoQkQoUWIobmV3IFZWYiksNjIpKX1cbmZ1bmN0aW9uIEZZYigpe3RoaXMuYT1uZXcgSFhiO3RoaXMuYj1uZXcgTFhiO3RoaXMuZD1uZXcgU1lifVxuZnVuY3Rpb24gVVpiKCl7dGhpcy5hPW5ldyBzN2M7dGhpcy5iPShYaigzLEppZSksbmV3IFNrYigzKSl9XG5mdW5jdGlvbiBWTWMoKXt0aGlzLmI9bmV3IFRxYjt0aGlzLmQ9bmV3IFBzYjt0aGlzLmU9bmV3IHR3Yn1cbmZ1bmN0aW9uIEs2YyhhKXt0aGlzLmM9YS5jO3RoaXMuZD1hLmQ7dGhpcy5iPWEuYjt0aGlzLmE9YS5hfVxuZnVuY3Rpb24gQXkoYSxiKXtvaS5jYWxsKHRoaXMsbmV3IFF3YihhKSk7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBlb2QoKXtib2QodGhpcyxuZXcgJG1kKTt0aGlzLndiPShORmQoKSxNRmQpO0xGZCgpfVxuZnVuY3Rpb24gZUhjKGEpe09kZChhLCdObyBjcm9zc2luZyBtaW5pbWl6YXRpb24nLDEpO1FkZChhKX1cbmZ1bmN0aW9uIEd6KGEpe0F6KCk7JHduZC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYX0sMCl9XG5mdW5jdGlvbiBfS2QoYSl7aWYoIWEudSl7JEtkKGEpO2EudT1uZXcgWU9kKGEsYSl9cmV0dXJuIGEudX1cbmZ1bmN0aW9uIHdqZChhKXt2YXIgYjtiPUJEKEFqZChhLDE2KSwyNik7cmV0dXJuICFiP2EuemgoKTpifVxuZnVuY3Rpb24gSnNkKGEsYil7cmV0dXJuIEpEKGIsMTQ2KSYmZGZiKGEuYixCRChiLDE0NikudGcoKSl9XG5mdW5jdGlvbiB0MGQoYSxiKXtyZXR1cm4gYS5hP2IuV2coKS5LYygpOkJEKGIuV2coKSw2OSkuWmgoKX1cbmZ1bmN0aW9uIHUzYihhKXtyZXR1cm4gYS5rPT0oajBiKCksaDBiKSYmd05iKGEsKHd0YygpLENzYykpfVxuZnVuY3Rpb24gdXgoYSl7dGhpcy5hPShtbWIoKSxKRChhLDU0KT9uZXcgWW9iKGEpOm5ldyBJbmIoYSkpfVxuZnVuY3Rpb24gUnooKXtSej1jY2I7dmFyIGEsYjtiPSFYeigpO2E9bmV3IGRBO1F6PWI/bmV3IFl6OmF9XG5mdW5jdGlvbiBXeShhLGIpe3ZhciBjO2M9aGRiKGEuZ20pO3JldHVybiBiPT1udWxsP2M6YysnOiAnK2J9XG5mdW5jdGlvbiBFb2IoYSxiKXt2YXIgYztjPWEuYi5RYyhiKTtGb2IoYyxhLmIuZ2MoKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiB5dGIoYSxiKXtpZihhPT1udWxsKXt0aHJvdyB2YmIobmV3IEhlYihiKSl9cmV0dXJuIGF9XG5mdW5jdGlvbiBpcmIoYSxiKXtyZXR1cm4gZ3JiKGEsYixocmIoYSxiPT1udWxsPzA6YS5iLnNlKGIpKSl9XG5mdW5jdGlvbiBvZmIoYSxiLGMpe3JldHVybiBjPj0wJiZkZmIoYS5zdWJzdHIoYyxiLmxlbmd0aCksYil9XG5mdW5jdGlvbiBIMmQoYSxiLGMsZCxlLGYsZyl7cmV0dXJuIG5ldyBPN2QoYS5lLGIsYyxkLGUsZixnKX1cbmZ1bmN0aW9uIEN4ZChhLGIsYyxkLGUsZil7dGhpcy5hPWE7bnhkLmNhbGwodGhpcyxiLGMsZCxlLGYpfVxuZnVuY3Rpb24gdnlkKGEsYixjLGQsZSxmKXt0aGlzLmE9YTtueGQuY2FsbCh0aGlzLGIsYyxkLGUsZil9XG5mdW5jdGlvbiAkRWMoYSxiKXt0aGlzLmc9YTt0aGlzLmQ9T0MoR0MoT1EsMSksa25lLDEwLDAsW2JdKX1cbmZ1bmN0aW9uIEtWZChhLGIpe3RoaXMuZT1hO3RoaXMuYT1TSTt0aGlzLmI9UjVkKGIpO3RoaXMuYz1ifVxuZnVuY3Rpb24gY0liKGEsYil7JEdiLmNhbGwodGhpcyk7VEhiKHRoaXMpO3RoaXMuYT1hO3RoaXMuYz1ifVxuZnVuY3Rpb24ga0JjKGEsYixjLGQpe05DKGEuY1tiLmddLGMuZyxkKTtOQyhhLmNbYy5nXSxiLmcsZCl9XG5mdW5jdGlvbiBuQmMoYSxiLGMsZCl7TkMoYS5jW2IuZ10sYi5nLGMpO05DKGEuYltiLmddLGIuZyxkKX1cbmZ1bmN0aW9uIGNCYygpe19BYygpO3JldHVybiBPQyhHQyhmWCwxKSxLaWUsMzc2LDAsWyRBYyxaQWNdKX1cbmZ1bmN0aW9uIGNyYygpe19xYygpO3JldHVybiBPQyhHQyhNVywxKSxLaWUsNDc5LDAsWyRxYyxacWNdKX1cbmZ1bmN0aW9uIEFxYygpe3hxYygpO3JldHVybiBPQyhHQyhKVywxKSxLaWUsNDE5LDAsW3ZxYyx3cWNdKX1cbmZ1bmN0aW9uIExwYygpe0lwYygpO3JldHVybiBPQyhHQyhGVywxKSxLaWUsNDIyLDAsW0dwYyxIcGNdKX1cbmZ1bmN0aW9uIHBzYygpe21zYygpO3JldHVybiBPQyhHQyhTVywxKSxLaWUsNDIwLDAsW2tzYyxsc2NdKX1cbmZ1bmN0aW9uIEVBYygpe0JBYygpO3JldHVybiBPQyhHQyhjWCwxKSxLaWUsNDIxLDAsW3pBYyxBQWNdKX1cbmZ1bmN0aW9uIFhJYygpe1VJYygpO3JldHVybiBPQyhHQyhtWSwxKSxLaWUsNTIzLDAsW1RJYyxTSWNdKX1cbmZ1bmN0aW9uIEtPYygpe0hPYygpO3JldHVybiBPQyhHQyhEWiwxKSxLaWUsNTIwLDAsW0dPYyxGT2NdKX1cbmZ1bmN0aW9uIF9MYygpe1lMYygpO3JldHVybiBPQyhHQyhmWiwxKSxLaWUsNTE2LDAsW1hMYyxXTGNdKX1cbmZ1bmN0aW9uIGhNYygpe2VNYygpO3JldHVybiBPQyhHQyhnWiwxKSxLaWUsNTE1LDAsW2NNYyxkTWNdKX1cbmZ1bmN0aW9uIElRYygpe0ZRYygpO3JldHVybiBPQyhHQyhZWiwxKSxLaWUsNDU1LDAsW0RRYyxFUWNdKX1cbmZ1bmN0aW9uIGJVYygpeyRUYygpO3JldHVybiBPQyhHQyhGJCwxKSxLaWUsNDI1LDAsW1pUYyxZVGNdKX1cbmZ1bmN0aW9uIFZUYygpe1NUYygpO3JldHVybiBPQyhHQyhFJCwxKSxLaWUsNDgwLDAsW1FUYyxSVGNdKX1cbmZ1bmN0aW9uIFZVYygpe1BVYygpO3JldHVybiBPQyhHQyhLJCwxKSxLaWUsNDk1LDAsW05VYyxPVWNdKX1cbmZ1bmN0aW9uIGpXYygpe2ZXYygpO3JldHVybiBPQyhHQyhYJCwxKSxLaWUsNDI2LDAsW2RXYyxlV2NdKX1cbmZ1bmN0aW9uIGcxYygpe2ExYygpO3JldHVybiBPQyhHQyhYXywxKSxLaWUsNDI5LDAsW18wYywkMGNdKX1cbmZ1bmN0aW9uIEZfYygpe0NfYygpO3JldHVybiBPQyhHQyhQXywxKSxLaWUsNDMwLDAsW0JfYyxBX2NdKX1cbmZ1bmN0aW9uIFBFYigpe01FYigpO3JldHVybiBPQyhHQyhhTiwxKSxLaWUsNDI4LDAsW0xFYixLRWJdKX1cbmZ1bmN0aW9uIFhFYigpe1VFYigpO3JldHVybiBPQyhHQyhiTiwxKSxLaWUsNDI3LDAsW1NFYixURWJdKX1cbmZ1bmN0aW9uICRSYigpe1hSYigpO3JldHVybiBPQyhHQyhnUCwxKSxLaWUsNDI0LDAsW1ZSYixXUmJdKX1cbmZ1bmN0aW9uIEI1Yigpe3k1YigpO3JldHVybiBPQyhHQyhaUiwxKSxLaWUsNTExLDAsW3g1Yix3NWJdKX1cbmZ1bmN0aW9uIGxpZChhLGIsYyxkKXtyZXR1cm4gYz49MD9hLmpoKGIsYyxkKTphLlNnKG51bGwsYyxkKX1cbmZ1bmN0aW9uIGhnZChhKXtpZihhLmIuYj09MCl7cmV0dXJuIGEuYS4kZSgpfXJldHVybiBMc2IoYS5iKX1cbmZ1bmN0aW9uIFh3ZChhKXtpZihhLnAhPTUpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBUYmIoYS5mKX1cbmZ1bmN0aW9uIGV4ZChhKXtpZihhLnAhPTUpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBUYmIoYS5rKX1cbmZ1bmN0aW9uIHBOZChhKXtQRChhLmEpPT09UEQoKE5LZCgpLE1LZCkpJiZxTmQoYSk7cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIGJ5KGEpe3RoaXMuYT1CRChRYihhKSwyNzEpO3RoaXMuYj0obW1iKCksbmV3IFpvYihhKSl9XG5mdW5jdGlvbiBiUWMoYSxiKXskUGModGhpcyxuZXcgZjdjKGEuYSxhLmIpKTtfUGModGhpcyxSdShiKSl9XG5mdW5jdGlvbiBGUWMoKXtGUWM9Y2NiO0RRYz1uZXcgR1FjKGpsZSwwKTtFUWM9bmV3IEdRYyhrbGUsMSl9XG5mdW5jdGlvbiBZTGMoKXtZTGM9Y2NiO1hMYz1uZXcgWkxjKGtsZSwwKTtXTGM9bmV3IFpMYyhqbGUsMSl9XG5mdW5jdGlvbiBIcCgpe0dwLmNhbGwodGhpcyxuZXcgTXFiKEN2KDEyKSkpO0xiKHRydWUpO3RoaXMuYT0yfVxuZnVuY3Rpb24gSGdlKGEsYixjKXt3ZmUoKTt4ZmUuY2FsbCh0aGlzLGEpO3RoaXMuYj1iO3RoaXMuYT1jfVxuZnVuY3Rpb24gY1dkKGEsYixjKXtVVmQoKTtWVmQuY2FsbCh0aGlzLGIpO3RoaXMuYT1hO3RoaXMuYj1jfVxuZnVuY3Rpb24gYUliKGEpeyRHYi5jYWxsKHRoaXMpO1RIYih0aGlzKTt0aGlzLmE9YTt0aGlzLmM9dHJ1ZX1cbmZ1bmN0aW9uIGlzYihhKXt2YXIgYjtiPWEuYy5kLmI7YS5iPWI7YS5hPWEuYy5kO2IuYT1hLmMuZC5iPWF9XG5mdW5jdGlvbiAkQ2IoYSl7dmFyIGI7TkdiKGEuYSk7TUdiKGEuYSk7Yj1uZXcgWUdiKGEuYSk7VUdiKGIpfVxuZnVuY3Rpb24gaUtiKGEsYil7aEtiKGEsdHJ1ZSk7SGtiKGEuZS53ZigpLG5ldyBtS2IoYSx0cnVlLGIpKX1cbmZ1bmN0aW9uIHRsYihhLGIpe3BDYihiKTtyZXR1cm4gdmxiKGEsS0MoV0Qsb2plLDI1LGIsMTUsMSksYil9XG5mdW5jdGlvbiBZUGIoYSxiKXtRUGIoKTtyZXR1cm4gYT09WG9kKGp0ZChiKSl8fGE9PVhvZChsdGQoYikpfVxuZnVuY3Rpb24gUGhiKGEsYil7cmV0dXJuIGI9PW51bGw/V2QoaXJiKGEuZixudWxsKSk6Q3JiKGEuZyxiKX1cbmZ1bmN0aW9uIEtzYihhKXtyZXR1cm4gYS5iPT0wP251bGw6KHNDYihhLmIhPTApLE5zYihhLGEuYS5hKSl9XG5mdW5jdGlvbiBRRChhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSxPaGUpLC0yMTQ3NDgzNjQ4KXwwfVxuZnVuY3Rpb24gdXooYSxiKXt2YXIgYz10elthLmNoYXJDb2RlQXQoMCldO3JldHVybiBjPT1udWxsP2E6Y31cbmZ1bmN0aW9uIEN4KGEsYil7UmIoYSwnc2V0MScpO1JiKGIsJ3NldDInKTtyZXR1cm4gbmV3IFB4KGEsYil9XG5mdW5jdGlvbiBRVWIoYSxiKXt2YXIgYztjPXpVYihhLmYsYik7cmV0dXJuIFA2YyhWNmMoYyksYS5mLmQpfVxuZnVuY3Rpb24gSndiKGEsYil7dmFyIGMsZDtjPWI7ZD1uZXcgZnhiO0x3YihhLGMsZCk7cmV0dXJuIGQuZH1cbmZ1bmN0aW9uIE5KYihhLGIsYyxkKXt2YXIgZTtlPW5ldyBhSGI7Yi5hW2MuZ109ZTtOcGIoYS5iLGQsZSl9XG5mdW5jdGlvbiB6aWQoYSxiLGMpe3ZhciBkO2Q9YS5ZZyhiKTtkPj0wP2Euc2goZCxjKTp1aWQoYSxiLGMpfVxuZnVuY3Rpb24gaHZkKGEsYixjKXtldmQoKTshIWEmJlJoYihkdmQsYSxiKTshIWEmJlJoYihjdmQsYSxjKX1cbmZ1bmN0aW9uIGdfYyhhLGIsYyl7dGhpcy5pPW5ldyBSa2I7dGhpcy5iPWE7dGhpcy5nPWI7dGhpcy5hPWN9XG5mdW5jdGlvbiBWWmMoYSxiLGMpe3RoaXMuYz1uZXcgUmtiO3RoaXMuZT1hO3RoaXMuZj1iO3RoaXMuYj1jfVxuZnVuY3Rpb24gYiRjKGEsYixjKXt0aGlzLmE9bmV3IFJrYjt0aGlzLmU9YTt0aGlzLmY9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIFp5KGEsYil7UHkodGhpcyk7dGhpcy5mPWI7dGhpcy5nPWE7UnkodGhpcyk7dGhpcy5fZCgpfVxuZnVuY3Rpb24gWkEoYSxiKXt2YXIgYztjPWEucS5nZXRIb3VycygpO2EucS5zZXREYXRlKGIpO1lBKGEsYyl9XG5mdW5jdGlvbiBubyhhLGIpe3ZhciBjO1FiKGIpO2ZvcihjPWEuYTtjO2M9Yy5jKXtiLk9kKGMuZyxjLmkpfX1cbmZ1bmN0aW9uIEZ4KGEpe3ZhciBiO2I9bmV3IFVxYihDdihhLmxlbmd0aCkpO25tYihiLGEpO3JldHVybiBifVxuZnVuY3Rpb24gZWNiKGEpe2Z1bmN0aW9uIGIoKXt9XG47Yi5wcm90b3R5cGU9YXx8e307cmV0dXJuIG5ldyBifVxuZnVuY3Rpb24gZGtiKGEsYil7aWYoWmpiKGEsYikpe3drYihhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBhQyhhLGIpe2lmKGI9PW51bGwpe3Rocm93IHZiYihuZXcgR2ViKX1yZXR1cm4gYkMoYSxiKX1cbmZ1bmN0aW9uIHRkYihhKXtpZihhLnFlKCkpe3JldHVybiBudWxsfXZhciBiPWEubjtyZXR1cm4gX2JiW2JdfVxuZnVuY3Rpb24gTWxkKGEpe2lmKGEuRGI+PjE2IT0zKXJldHVybiBudWxsO3JldHVybiBCRChhLkNiLDMzKX1cbmZ1bmN0aW9uIG1wZChhKXtpZihhLkRiPj4xNiE9OSlyZXR1cm4gbnVsbDtyZXR1cm4gQkQoYS5DYiwzMyl9XG5mdW5jdGlvbiBmbWQoYSl7aWYoYS5EYj4+MTYhPTYpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGEuQ2IsNzkpfVxuZnVuY3Rpb24gSW5kKGEpe2lmKGEuRGI+PjE2IT03KXJldHVybiBudWxsO3JldHVybiBCRChhLkNiLDIzNSl9XG5mdW5jdGlvbiBGb2QoYSl7aWYoYS5EYj4+MTYhPTcpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGEuQ2IsMTYwKX1cbmZ1bmN0aW9uIFhvZChhKXtpZihhLkRiPj4xNiE9MTEpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGEuQ2IsMzMpfVxuZnVuY3Rpb24gbmlkKGEsYil7dmFyIGM7Yz1hLllnKGIpO3JldHVybiBjPj0wP2EubGgoYyk6dGlkKGEsYil9XG5mdW5jdGlvbiBEdGQoYSxiKXt2YXIgYztjPW5ldyBCc2IoYik7VmUoYyxhKTtyZXR1cm4gbmV3IFRrYihjKX1cbmZ1bmN0aW9uIFV1ZChhKXt2YXIgYjtiPWEuZDtiPWEuc2koYS5mKTt3dGQoYSxiKTtyZXR1cm4gYi5PYigpfVxuZnVuY3Rpb24gdF9iKGEsYil7YS5iKz1iLmI7YS5jKz1iLmM7YS5kKz1iLmQ7YS5hKz1iLmE7cmV0dXJuIGF9XG5mdW5jdGlvbiBBNGIoYSxiKXtyZXR1cm4gJHduZC5NYXRoLmFicyhhKTwkd25kLk1hdGguYWJzKGIpP2E6Yn1cbmZ1bmN0aW9uIFpvZChhKXtyZXR1cm4gIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEuaT4wfVxuZnVuY3Rpb24gb0RiKCl7dGhpcy5hPW5ldyB6c2I7dGhpcy5lPW5ldyBUcWI7dGhpcy5nPTA7dGhpcy5pPTB9XG5mdW5jdGlvbiBCR2MoYSl7dGhpcy5hPWE7dGhpcy5iPUtDKFNYLG5pZSwxOTQ0LGEuZS5sZW5ndGgsMCwyKX1cbmZ1bmN0aW9uIFJIYyhhLGIsYyl7dmFyIGQ7ZD1TSGMoYSxiLGMpO2EuYj1uZXcgQkhjKGQuYy5sZW5ndGgpfVxuZnVuY3Rpb24gZU1jKCl7ZU1jPWNjYjtjTWM9bmV3IGZNYyh2bGUsMCk7ZE1jPW5ldyBmTWMoJ1VQJywxKX1cbmZ1bmN0aW9uIFNUYygpe1NUYz1jY2I7UVRjPW5ldyBUVGMoWXFlLDApO1JUYz1uZXcgVFRjKCdGQU4nLDEpfVxuZnVuY3Rpb24gZXZkKCl7ZXZkPWNjYjtkdmQ9bmV3IExxYjtjdmQ9bmV3IExxYjtpdmQoaEssbmV3IGp2ZCl9XG5mdW5jdGlvbiBTd2QoYSl7aWYoYS5wIT0wKXRocm93IHZiYihuZXcgWWRiKTtyZXR1cm4gS2JiKGEuZiwwKX1cbmZ1bmN0aW9uIF93ZChhKXtpZihhLnAhPTApdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBLYmIoYS5rLDApfVxuZnVuY3Rpb24gTUhkKGEpe2lmKGEuRGI+PjE2IT0zKXJldHVybiBudWxsO3JldHVybiBCRChhLkNiLDE0Nyl9XG5mdW5jdGlvbiBaSmQoYSl7aWYoYS5EYj4+MTYhPTYpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGEuQ2IsMjM1KX1cbmZ1bmN0aW9uIFdJZChhKXtpZihhLkRiPj4xNiE9MTcpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGEuQ2IsMjYpfVxuZnVuY3Rpb24gcmRiKGEsYil7dmFyIGM9YS5hPWEuYXx8W107cmV0dXJuIGNbYl18fChjW2JdPWEubGUoYikpfVxuZnVuY3Rpb24gaHJiKGEsYil7dmFyIGM7Yz1hLmEuZ2V0KGIpO3JldHVybiBjPT1udWxsP25ldyBBcnJheTpjfVxuZnVuY3Rpb24gYUIoYSxiKXt2YXIgYztjPWEucS5nZXRIb3VycygpO2EucS5zZXRNb250aChiKTtZQShhLGMpfVxuZnVuY3Rpb24gU2hiKGEsYixjKXtyZXR1cm4gYj09bnVsbD9qcmIoYS5mLG51bGwsYyk6RHJiKGEuZyxiLGMpfVxuZnVuY3Rpb24gRkxkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IHBTZChhLmUsYixhLmFqKCksYyxkLGUsZil9XG5mdW5jdGlvbiBUZmIoYSxiLGMpe2EuYT1xZmIoYS5hLDAsYikrKCcnK2MpK3BmYihhLmEsYik7cmV0dXJuIGF9XG5mdW5jdGlvbiBicShhLGIsYyl7RWtiKGEuYSwoVm0oKSxXaihiLGMpLG5ldyBXbyhiLGMpKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiB1dShhKXtvdChhLmMpO2EuZT1hLmE9YS5jO2EuYz1hLmMuYzsrK2EuZDtyZXR1cm4gYS5hLmZ9XG5mdW5jdGlvbiB2dShhKXtvdChhLmUpO2EuYz1hLmE9YS5lO2EuZT1hLmUuZTstLWEuZDtyZXR1cm4gYS5hLmZ9XG5mdW5jdGlvbiBSWmIoYSxiKXshIWEuZCYmTGtiKGEuZC5lLGEpO2EuZD1iOyEhYS5kJiZFa2IoYS5kLmUsYSl9XG5mdW5jdGlvbiBRWmIoYSxiKXshIWEuYyYmTGtiKGEuYy5nLGEpO2EuYz1iOyEhYS5jJiZFa2IoYS5jLmcsYSl9XG5mdW5jdGlvbiAkX2IoYSxiKXshIWEuYyYmTGtiKGEuYy5hLGEpO2EuYz1iOyEhYS5jJiZFa2IoYS5jLmEsYSl9XG5mdW5jdGlvbiBGMGIoYSxiKXshIWEuaSYmTGtiKGEuaS5qLGEpO2EuaT1iOyEhYS5pJiZFa2IoYS5pLmosYSl9XG5mdW5jdGlvbiBqRGIoYSxiLGMpe3RoaXMuYT1iO3RoaXMuYz1hO3RoaXMuYj0oUWIoYyksbmV3IFRrYihjKSl9XG5mdW5jdGlvbiBxWGIoYSxiLGMpe3RoaXMuYT1iO3RoaXMuYz1hO3RoaXMuYj0oUWIoYyksbmV3IFRrYihjKSl9XG5mdW5jdGlvbiBhT2IoYSxiKXt0aGlzLmE9YTt0aGlzLmM9UjZjKHRoaXMuYSk7dGhpcy5iPW5ldyBLNmMoYil9XG5mdW5jdGlvbiBJQWIoYSl7dmFyIGI7VXpiKGEpO2I9bmV3IFRxYjtyZXR1cm4gSkFiKGEsbmV3IGpCYihiKSl9XG5mdW5jdGlvbiB3Q2IoYSxiKXtpZihhPDB8fGE+Yil7dGhyb3cgdmJiKG5ldyBxY2IoQWtlK2ErQmtlK2IpKX19XG5mdW5jdGlvbiBQcGIoYSxiKXtyZXR1cm4gdnFiKGEuYSxiKT9RcGIoYSxCRChiLDIyKS5nLG51bGwpOm51bGx9XG5mdW5jdGlvbiBXVWIoYSl7TFViKCk7cmV0dXJuIEJjYigpLEJEKGEuYSw4MSkuZC5lIT0wP3RydWU6ZmFsc2V9XG5mdW5jdGlvbiBxcygpe3FzPWNjYjtwcz1hcygoaHMoKSxPQyhHQyh5RywxKSxLaWUsNTM4LDAsW2dzXSkpKX1cbmZ1bmN0aW9uIFNCYygpe1NCYz1jY2I7UkJjPWMzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxKOGIpKX1cbmZ1bmN0aW9uIFpCYygpe1pCYz1jY2I7WUJjPWMzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxKOGIpKX1cbmZ1bmN0aW9uIG9DYygpe29DYz1jY2I7bkNjPWMzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxKOGIpKX1cbmZ1bmN0aW9uIGFKYygpe2FKYz1jY2I7X0ljPWUzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxoOGIpKX1cbmZ1bmN0aW9uIEZKYygpe0ZKYz1jY2I7RUpjPWUzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxoOGIpKX1cbmZ1bmN0aW9uIElMYygpe0lMYz1jY2I7SExjPWUzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxoOGIpKX1cbmZ1bmN0aW9uIHdNYygpe3dNYz1jY2I7dk1jPWUzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxoOGIpKX1cbmZ1bmN0aW9uIGZVYygpe2ZVYz1jY2I7ZVVjPWMzYyhuZXcgajNjLCh5UmMoKSx4UmMpLChxU2MoKSxrU2MpKX1cbmZ1bmN0aW9uIERPYyhhLGIsYyxkKXt0aGlzLmM9YTt0aGlzLmQ9ZDtCT2ModGhpcyxiKTtDT2ModGhpcyxjKX1cbmZ1bmN0aW9uIFczYyhhKXt0aGlzLmM9bmV3IFBzYjt0aGlzLmI9YS5iO3RoaXMuZD1hLmM7dGhpcy5hPWEuYX1cbmZ1bmN0aW9uIGU3YyhhKXt0aGlzLmE9JHduZC5NYXRoLmNvcyhhKTt0aGlzLmI9JHduZC5NYXRoLnNpbihhKX1cbmZ1bmN0aW9uIEJPYyhhLGIpeyEhYS5hJiZMa2IoYS5hLmssYSk7YS5hPWI7ISFhLmEmJkVrYihhLmEuayxhKX1cbmZ1bmN0aW9uIENPYyhhLGIpeyEhYS5iJiZMa2IoYS5iLmYsYSk7YS5iPWI7ISFhLmImJkVrYihhLmIuZixhKX1cbmZ1bmN0aW9uIEQxYyhhLGIpe0UxYyhhLGEuYixhLmMpO0JEKGEuYi5iLDY1KTshIWImJkJEKGIuYiw2NSkuYn1cbmZ1bmN0aW9uIEJVZChhLGIpe0NVZChhLGIpO0pEKGEuQ2IsODgpJiZYTWQoJEtkKEJEKGEuQ2IsODgpKSwyKX1cbmZ1bmN0aW9uIGNKZChhLGIpe0pEKGEuQ2IsODgpJiZYTWQoJEtkKEJEKGEuQ2IsODgpKSw0KTtwbmQoYSxiKX1cbmZ1bmN0aW9uIGxLZChhLGIpe0pEKGEuQ2IsMTc5KSYmKEJEKGEuQ2IsMTc5KS50Yj1udWxsKTtwbmQoYSxiKX1cbmZ1bmN0aW9uIFQyZChhLGIpe3JldHVybiBRNmQoKSxZSWQoYik/bmV3IFI3ZChiLGEpOm5ldyBmN2QoYixhKX1cbmZ1bmN0aW9uIGpzZChhLGIpe3ZhciBjLGQ7Yz1iLmM7ZD1jIT1udWxsO2QmJlFwZChhLG5ldyB5QyhiLmMpKX1cbmZ1bmN0aW9uIFhPZChhKXt2YXIgYixjO2M9KExGZCgpLGI9bmV3IFVRZCxiKTtOUWQoYyxhKTtyZXR1cm4gY31cbmZ1bmN0aW9uIGVUZChhKXt2YXIgYixjO2M9KExGZCgpLGI9bmV3IFVRZCxiKTtOUWQoYyxhKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHlDYyhhLGIpe3ZhciBjO2M9bmV3IEgxYihhKTtiLmNbYi5jLmxlbmd0aF09YztyZXR1cm4gY31cbmZ1bmN0aW9uIEF3KGEsYil7dmFyIGM7Yz1CRChIdihuZChhLmEpLGIpLDE0KTtyZXR1cm4gIWM/MDpjLmdjKCl9XG5mdW5jdGlvbiBVQWIoYSl7dmFyIGI7VXpiKGEpO2I9KGlwYigpLGlwYigpLGdwYik7cmV0dXJuIFZBYihhLGIpfVxuZnVuY3Rpb24gbnIoYSl7dmFyIGI7d2hpbGUodHJ1ZSl7Yj1hLlBiKCk7aWYoIWEuT2IoKSl7cmV0dXJuIGJ9fX1cbmZ1bmN0aW9uIEtpKGEsYil7SWkuY2FsbCh0aGlzLG5ldyBNcWIoQ3YoYSkpKTtYaihiLG1pZSk7dGhpcy5hPWJ9XG5mdW5jdGlvbiBKaWIoYSxiLGMpe3hDYihiLGMsYS5nYygpKTt0aGlzLmM9YTt0aGlzLmE9Yjt0aGlzLmI9Yy1ifVxuZnVuY3Rpb24gTWtiKGEsYixjKXt2YXIgZDt4Q2IoYixjLGEuYy5sZW5ndGgpO2Q9Yy1iO2NDYihhLmMsYixkKX1cbmZ1bmN0aW9uIEZ1YihhLGIpe0V1YihhLFRiYih4YmIoT2JiKGIsMjQpLG5rZSkpLFRiYih4YmIoYixua2UpKSl9XG5mdW5jdGlvbiB0Q2IoYSxiKXtpZihhPDB8fGE+PWIpe3Rocm93IHZiYihuZXcgcWNiKEFrZSthK0JrZStiKSl9fVxuZnVuY3Rpb24gQkNiKGEsYil7aWYoYTwwfHxhPj1iKXt0aHJvdyB2YmIobmV3IFhmYihBa2UrYStCa2UrYikpfX1cbmZ1bmN0aW9uIEt1YihhLGIpe3RoaXMuYj0odUNiKGEpLGEpO3RoaXMuYT0oYiZSamUpPT0wP2J8NjR8b2llOmJ9XG5mdW5jdGlvbiBra2IoYSl7VmpiKHRoaXMpO2RDYih0aGlzLmEsZ2ViKCR3bmQuTWF0aC5tYXgoOCxhKSk8PDEpfVxuZnVuY3Rpb24gQTBiKGEpe3JldHVybiBsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbYS5pLm4sYS5uLGEuYV0pKX1cbmZ1bmN0aW9uIEl5Yigpe0Z5YigpO3JldHVybiBPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW0N5YixEeWIsRXliXSl9XG5mdW5jdGlvbiBqSGIoKXtnSGIoKTtyZXR1cm4gT0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pfVxuZnVuY3Rpb24gUUhiKCl7TkhiKCk7cmV0dXJuIE9DKEdDKHNOLDEpLEtpZSw0NjEsMCxbTEhiLEtIYixNSGJdKX1cbmZ1bmN0aW9uIEhJYigpe0VJYigpO3JldHVybiBPQyhHQyh6TiwxKSxLaWUsNDYyLDAsW0RJYixDSWIsQkliXSl9XG5mdW5jdGlvbiBVWGIoKXtSWGIoKTtyZXR1cm4gT0MoR0MoaFEsMSksS2llLDQyMywwLFtRWGIsUFhiLE9YYl0pfVxuZnVuY3Rpb24gQlRiKCl7eVRiKCk7cmV0dXJuIE9DKEdDKG9QLDEpLEtpZSwzNzksMCxbd1RiLHZUYix4VGJdKX1cbmZ1bmN0aW9uIEJ6Yygpe3h6YygpO3JldHVybiBPQyhHQyhaVywxKSxLaWUsMzc4LDAsW3V6Yyx2emMsd3pjXSl9XG5mdW5jdGlvbiBYcGMoKXtScGMoKTtyZXR1cm4gT0MoR0MoR1csMSksS2llLDMxNCwwLFtQcGMsT3BjLFFwY10pfVxuZnVuY3Rpb24gZXFjKCl7YnFjKCk7cmV0dXJuIE9DKEdDKEhXLDEpLEtpZSwzMzcsMCxbJHBjLGFxYyxfcGNdKX1cbmZ1bmN0aW9uIEpxYygpe0dxYygpO3JldHVybiBPQyhHQyhLVywxKSxLaWUsNDUwLDAsW0VxYyxEcWMsRnFjXSl9XG5mdW5jdGlvbiBJa2MoKXtGa2MoKTtyZXR1cm4gT0MoR0ModlYsMSksS2llLDM2MSwwLFtFa2MsRGtjLENrY10pfVxuZnVuY3Rpb24gaHNjKCl7ZXNjKCk7cmV0dXJuIE9DKEdDKFJXLDEpLEtpZSwzMDMsMCxbY3NjLGRzYyxic2NdKX1cbmZ1bmN0aW9uICRyYygpe1hyYygpO3JldHVybiBPQyhHQyhRVywxKSxLaWUsMjkyLDAsW1ZyYyxXcmMsVXJjXSl9XG5mdW5jdGlvbiBOQWMoKXtLQWMoKTtyZXR1cm4gT0MoR0MoZFgsMSksS2llLDQ1MiwwLFtKQWMsSEFjLElBY10pfVxuZnVuY3Rpb24gd0FjKCl7dEFjKCk7cmV0dXJuIE9DKEdDKGJYLDEpLEtpZSwzMzksMCxbckFjLHFBYyxzQWNdKX1cbmZ1bmN0aW9uIFdBYygpe1RBYygpO3JldHVybiBPQyhHQyhlWCwxKSxLaWUsMzc1LDAsW1FBYyxSQWMsU0FjXSl9XG5mdW5jdGlvbiBPQmMoKXtMQmMoKTtyZXR1cm4gT0MoR0MoalgsMSksS2llLDM3NywwLFtKQmMsS0JjLElCY10pfVxuZnVuY3Rpb24gd0JjKCl7dEJjKCk7cmV0dXJuIE9DKEdDKGhYLDEpLEtpZSwzMzYsMCxbcUJjLHJCYyxzQmNdKX1cbmZ1bmN0aW9uIEZCYygpe0NCYygpO3JldHVybiBPQyhHQyhpWCwxKSxLaWUsMzM4LDAsW0JCYyx6QmMsQUJjXSl9XG5mdW5jdGlvbiB1R2MoKXtyR2MoKTtyZXR1cm4gT0MoR0MoUFgsMSksS2llLDQ1NCwwLFtvR2MscEdjLHFHY10pfVxuZnVuY3Rpb24geFZjKCl7dFZjKCk7cmV0dXJuIE9DKEdDKE8kLDEpLEtpZSw0NDIsMCxbc1ZjLHFWYyxyVmNdKX1cbmZ1bmN0aW9uIHRXYygpe3BXYygpO3JldHVybiBPQyhHQyhZJCwxKSxLaWUsMzgwLDAsW21XYyxuV2Msb1djXSl9XG5mdW5jdGlvbiBDWWMoKXt6WWMoKTtyZXR1cm4gT0MoR0MocV8sMSksS2llLDM4MSwwLFt4WWMseVljLHdZY10pfVxuZnVuY3Rpb24gd1hjKCl7c1hjKCk7cmV0dXJuIE9DKEdDKGJfLDEpLEtpZSwyOTMsMCxbcVhjLHJYYyxwWGNdKX1cbmZ1bmN0aW9uIF8kYygpe1kkYygpO3JldHVybiBPQyhHQyhKXywxKSxLaWUsNDM3LDAsW1YkYyxXJGMsWCRjXSl9XG5mdW5jdGlvbiBrYmQoKXtoYmQoKTtyZXR1cm4gT0MoR0MoejEsMSksS2llLDMzNCwwLFtmYmQsZWJkLGdiZF0pfVxuZnVuY3Rpb24gdGFkKCl7cWFkKCk7cmV0dXJuIE9DKEdDKHUxLDEpLEtpZSwyNzIsMCxbbmFkLG9hZCxwYWRdKX1cbmZ1bmN0aW9uIG8zZChhLGIpe3JldHVybiBwM2QoYSxiLEpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MCl9XG5mdW5jdGlvbiBMWmMoYSxiLGMpe3ZhciBkO2Q9TVpjKGEsYixmYWxzZSk7cmV0dXJuIGQuYjw9YiYmZC5hPD1jfVxuZnVuY3Rpb24gdE1jKGEsYixjKXt2YXIgZDtkPW5ldyBzTWM7ZC5iPWI7ZC5hPWM7KytiLmI7RWtiKGEuZCxkKX1cbmZ1bmN0aW9uIGZzKGEsYil7dmFyIGM7Yz0odUNiKGEpLGEpLmc7bENiKCEhYyk7dUNiKGIpO3JldHVybiBjKGIpfVxuZnVuY3Rpb24gYXYoYSxiKXt2YXIgYyxkO2Q9Y3YoYSxiKTtjPWEuYS5aYyhkKTtyZXR1cm4gbmV3IHF2KGEsYyl9XG5mdW5jdGlvbiBjS2QoYSl7aWYoYS5EYj4+MTYhPTYpcmV0dXJuIG51bGw7cmV0dXJuIEJEKGFpZChhKSwyMzUpfVxuZnVuY3Rpb24gVXdkKGEpe2lmKGEucCE9Mil0aHJvdyB2YmIobmV3IFlkYik7cmV0dXJuIFRiYihhLmYpJmFqZX1cbmZ1bmN0aW9uIGJ4ZChhKXtpZihhLnAhPTIpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBUYmIoYS5rKSZhamV9XG5mdW5jdGlvbiBaMWQoYSl7YS5hPT0oVDBkKCksUzBkKSYmZDJkKGEsVTBkKGEuZyxhLmIpKTtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gXzFkKGEpe2EuZD09KFQwZCgpLFMwZCkmJmYyZChhLFkwZChhLmcsYS5iKSk7cmV0dXJuIGEuZH1cbmZ1bmN0aW9uIG1sYihhKXtzQ2IoYS5hPGEuYy5jLmxlbmd0aCk7YS5iPWEuYSsrO3JldHVybiBhLmMuY1thLmJdfVxuZnVuY3Rpb24gaEViKGEsYil7YS5iPWEuYnxiLmI7YS5jPWEuY3xiLmM7YS5kPWEuZHxiLmQ7YS5hPWEuYXxiLmF9XG5mdW5jdGlvbiB4YmIoYSxiKXtyZXR1cm4gemJiKGREKEZiYihhKT9SYmIoYSk6YSxGYmIoYik/UmJiKGIpOmIpKX1cbmZ1bmN0aW9uIE1iYihhLGIpe3JldHVybiB6YmIoakQoRmJiKGEpP1JiYihhKTphLEZiYihiKT9SYmIoYik6YikpfVxuZnVuY3Rpb24gVmJiKGEsYil7cmV0dXJuIHpiYihyRChGYmIoYSk/UmJiKGEpOmEsRmJiKGIpP1JiYihiKTpiKSl9XG5mdW5jdGlvbiBEdWIoYSl7cmV0dXJuIHdiYihOYmIoQ2JiKEN1YihhLDMyKSksMzIpLENiYihDdWIoYSwzMikpKX1cbmZ1bmN0aW9uIE11KGEpe1FiKGEpO3JldHVybiBKRChhLDE0KT9uZXcgVGtiKEJEKGEsMTQpKTpOdShhLktjKCkpfVxuZnVuY3Rpb24gRVdiKGEsYil7QVdiKCk7cmV0dXJuIGEuYz09Yi5jP0tkYihiLmQsYS5kKTpLZGIoYS5jLGIuYyl9XG5mdW5jdGlvbiBGV2IoYSxiKXtBV2IoKTtyZXR1cm4gYS5jPT1iLmM/S2RiKGEuZCxiLmQpOktkYihhLmMsYi5jKX1cbmZ1bmN0aW9uIEhXYihhLGIpe0FXYigpO3JldHVybiBhLmM9PWIuYz9LZGIoYS5kLGIuZCk6S2RiKGIuYyxhLmMpfVxuZnVuY3Rpb24gR1diKGEsYil7QVdiKCk7cmV0dXJuIGEuYz09Yi5jP0tkYihiLmQsYS5kKTpLZGIoYi5jLGEuYyl9XG5mdW5jdGlvbiBXR2IoYSxiKXt2YXIgYztjPUVkYihFRChhLmEuV2UoKFk5YygpLFE5YykpKSk7WEdiKGEsYixjKX1cbmZ1bmN0aW9uIFJnYyhhLGIpe3ZhciBjO2M9QkQoT2hiKGEuZyxiKSw1Nyk7SGtiKGIuZCxuZXcgUWhjKGEsYykpfVxuZnVuY3Rpb24gR1liKGEsYil7dmFyIGMsZDtjPWRfYihhKTtkPWRfYihiKTtyZXR1cm4gYzxkPy0xOmM+ZD8xOjB9XG5mdW5jdGlvbiBiamMoYSxiKXt2YXIgYyxkO2M9YWpjKGIpO2Q9YztyZXR1cm4gQkQoT2hiKGEuYyxkKSwxOSkuYX1cbmZ1bmN0aW9uIGlTYyhhLGIpe3ZhciBjO2M9YSsnJzt3aGlsZShjLmxlbmd0aDxiKXtjPScwJytjfXJldHVybiBjfVxuZnVuY3Rpb24gV1JjKGEpe3JldHVybiBhLmM9PW51bGx8fGEuYy5sZW5ndGg9PTA/J25fJythLmc6J25fJythLmN9XG5mdW5jdGlvbiBvUmIoYSl7cmV0dXJuIGEuYz09bnVsbHx8YS5jLmxlbmd0aD09MD8nbl8nK2EuYjonbl8nK2EuY31cbmZ1bmN0aW9uIHF6KGEsYil7cmV0dXJuICEhYSYmISFhLmVxdWFscz9hLmVxdWFscyhiKTpQRChhKT09PVBEKGIpfVxuZnVuY3Rpb24gZGtkKGEsYil7aWYoYj09MCl7cmV0dXJuICEhYS5vJiZhLm8uZiE9MH1yZXR1cm4gbWlkKGEsYil9XG5mdW5jdGlvbiBUZGQoYSxiLGMpe3ZhciBkO2lmKGEubiYmISFiJiYhIWMpe2Q9bmV3IGtnZDtFa2IoYS5lLGQpfX1cbmZ1bmN0aW9uIGNJYyhhLGIsYyl7dmFyIGQ7ZD1hLmRbYi5wXTthLmRbYi5wXT1hLmRbYy5wXTthLmRbYy5wXT1kfVxuZnVuY3Rpb24ga3hkKGEsYixjKXt0aGlzLmQ9YTt0aGlzLmo9Yjt0aGlzLmU9Yzt0aGlzLm89LTE7dGhpcy5wPTN9XG5mdW5jdGlvbiBseGQoYSxiLGMpe3RoaXMuZD1hO3RoaXMuaz1iO3RoaXMuZj1jO3RoaXMubz0tMTt0aGlzLnA9NX1cbmZ1bmN0aW9uIHpnZShhLGIsYyl7eGZlLmNhbGwodGhpcywyNSk7dGhpcy5iPWE7dGhpcy5hPWI7dGhpcy5jPWN9XG5mdW5jdGlvbiAkZmUoYSl7d2ZlKCk7eGZlLmNhbGwodGhpcyxhKTt0aGlzLmM9ZmFsc2U7dGhpcy5hPWZhbHNlfVxuZnVuY3Rpb24gc1NkKGEsYixjLGQsZSxmKXtyU2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9XG5mdW5jdGlvbiB1U2QoYSxiLGMsZCxlLGYpe3RTZC5jYWxsKHRoaXMsYSxiLGMsZCxlKTtmJiYodGhpcy5vPS0yKX1cbmZ1bmN0aW9uIHdTZChhLGIsYyxkLGUsZil7dlNkLmNhbGwodGhpcyxhLGIsYyxkLGUpO2YmJih0aGlzLm89LTIpfVxuZnVuY3Rpb24geVNkKGEsYixjLGQsZSxmKXt4U2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9XG5mdW5jdGlvbiBBU2QoYSxiLGMsZCxlLGYpe3pTZC5jYWxsKHRoaXMsYSxiLGMsZCxlKTtmJiYodGhpcy5vPS0yKX1cbmZ1bmN0aW9uIENTZChhLGIsYyxkLGUsZil7QlNkLmNhbGwodGhpcyxhLGIsYyxkLGUpO2YmJih0aGlzLm89LTIpfVxuZnVuY3Rpb24gSFNkKGEsYixjLGQsZSxmKXtHU2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9XG5mdW5jdGlvbiBKU2QoYSxiLGMsZCxlLGYpe0lTZC5jYWxsKHRoaXMsYSxiLGMsZCxlKTtmJiYodGhpcy5vPS0yKX1cbmZ1bmN0aW9uIG5XZChhLGIsYyxkKXtWVmQuY2FsbCh0aGlzLGMpO3RoaXMuYj1hO3RoaXMuYz1iO3RoaXMuZD1kfVxuZnVuY3Rpb24geCRjKGEsYil7dGhpcy5hPW5ldyBSa2I7dGhpcy5kPW5ldyBSa2I7dGhpcy5mPWE7dGhpcy5jPWJ9XG5mdW5jdGlvbiBQVGIoKXt0aGlzLmM9bmV3IGJVYjt0aGlzLmE9bmV3IEZZYjt0aGlzLmI9bmV3IHdaYjskWWIoKX1cbmZ1bmN0aW9uIGIyYygpe1kxYygpO3RoaXMuYj1uZXcgTHFiO3RoaXMuYT1uZXcgTHFiO3RoaXMuYz1uZXcgUmtifVxuZnVuY3Rpb24gajJkKGEsYil7dGhpcy5nPWE7dGhpcy5kPShUMGQoKSxTMGQpO3RoaXMuYT1TMGQ7dGhpcy5iPWJ9XG5mdW5jdGlvbiBPMWQoYSxiKXt0aGlzLmY9YTt0aGlzLmE9KFQwZCgpLFIwZCk7dGhpcy5jPVIwZDt0aGlzLmI9Yn1cbmZ1bmN0aW9uIGg5ZChhLGIpeyFhLmMmJihhLmM9bmV3IHUzZChhLDApKTtmM2QoYS5jLChROGQoKSxJOGQpLGIpfVxuZnVuY3Rpb24gJFRjKCl7JFRjPWNjYjtaVGM9bmV3IF9UYygnREZTJywwKTtZVGM9bmV3IF9UYygnQkZTJywxKX1cbmZ1bmN0aW9uIENjKGEsYixjKXt2YXIgZDtkPUJEKGEuWmIoKS54YyhiKSwxNCk7cmV0dXJuICEhZCYmZC5IYyhjKX1cbmZ1bmN0aW9uIEdjKGEsYixjKXt2YXIgZDtkPUJEKGEuWmIoKS54YyhiKSwxNCk7cmV0dXJuICEhZCYmZC5NYyhjKX1cbmZ1bmN0aW9uIE9mYihhLGIsYyxkKXthLmErPScnK3FmYihiPT1udWxsP1hoZTpmY2IoYiksYyxkKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFhuZChhLGIsYyxkLGUsZil7WW5kKGEsYixjLGYpO2VMZChhLGQpO2ZMZChhLGUpO3JldHVybiBhfVxuZnVuY3Rpb24gWXNiKGEpe3NDYihhLmIuYiE9YS5kLmEpO2EuYz1hLmI9YS5iLmI7LS1hLmE7cmV0dXJuIGEuYy5jfVxuZnVuY3Rpb24gSmdiKGEpe3doaWxlKGEuZD4wJiZhLmFbLS1hLmRdPT0wKTthLmFbYS5kKytdPT0wJiYoYS5lPTApfVxuZnVuY3Rpb24gd3diKGEpe3JldHVybiAhYS5hP2EuYzphLmUubGVuZ3RoPT0wP2EuYS5hOmEuYS5hKygnJythLmUpfVxuZnVuY3Rpb24gUlNkKGEpe3JldHVybiAhIWEuYSYmUVNkKGEuYS5hKS5pIT0wJiYhKCEhYS5iJiZRVGQoYS5iKSl9XG5mdW5jdGlvbiBjTGQoYSl7cmV0dXJuICEhYS51JiZWS2QoYS51LmEpLmkhPTAmJiEoISFhLm4mJkZNZChhLm4pKX1cbmZ1bmN0aW9uICRpKGEpe3JldHVybiBaaihhLmUuSGQoKS5nYygpKmEuYy5IZCgpLmdjKCksMTYsbmV3IGlqKGEpKX1cbmZ1bmN0aW9uIFhBKGEsYil7cmV0dXJuIHVlYihDYmIoYS5xLmdldFRpbWUoKSksQ2JiKGIucS5nZXRUaW1lKCkpKX1cbmZ1bmN0aW9uIGtfYihhKXtyZXR1cm4gQkQoUWtiKGEsS0MoQVEsam5lLDE3LGEuYy5sZW5ndGgsMCwxKSksNDc0KX1cbmZ1bmN0aW9uIGxfYihhKXtyZXR1cm4gQkQoUWtiKGEsS0MoT1Esa25lLDEwLGEuYy5sZW5ndGgsMCwxKSksMTkzKX1cbmZ1bmN0aW9uIGNLYyhhKXtGSmMoKTtyZXR1cm4gIU9aYihhKSYmISghT1piKGEpJiZhLmMuaS5jPT1hLmQuaS5jKX1cbmZ1bmN0aW9uIGtEYihhLGIsYyl7dmFyIGQ7ZD0oUWIoYSksbmV3IFRrYihhKSk7aURiKG5ldyBqRGIoZCxiLGMpKX1cbmZ1bmN0aW9uIHJYYihhLGIsYyl7dmFyIGQ7ZD0oUWIoYSksbmV3IFRrYihhKSk7cFhiKG5ldyBxWGIoZCxiLGMpKX1cbmZ1bmN0aW9uIE53YihhLGIpe3ZhciBjO2M9MS1iO2EuYVtjXT1Pd2IoYS5hW2NdLGMpO3JldHVybiBPd2IoYSxiKX1cbmZ1bmN0aW9uIFlYYyhhLGIpe3ZhciBjO2EuZT1uZXcgUVhjO2M9Z1ZjKGIpO09rYihjLGEuYyk7WlhjKGEsYywwKX1cbmZ1bmN0aW9uIG80YyhhLGIsYyxkKXt2YXIgZTtlPW5ldyB3NGM7ZS5hPWI7ZS5iPWM7ZS5jPWQ7RHNiKGEuYSxlKX1cbmZ1bmN0aW9uIHA0YyhhLGIsYyxkKXt2YXIgZTtlPW5ldyB3NGM7ZS5hPWI7ZS5iPWM7ZS5jPWQ7RHNiKGEuYixlKX1cbmZ1bmN0aW9uIGk2ZChhKXt2YXIgYixjLGQ7Yj1uZXcgQTZkO2M9czZkKGIsYSk7ejZkKGIpO2Q9YztyZXR1cm4gZH1cbmZ1bmN0aW9uIHZaZCgpe3ZhciBhLGIsYztiPShjPShhPW5ldyBVUWQsYSksYyk7RWtiKHJaZCxiKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEgyYyhhKXthLmouYz1LQyhTSSxVaGUsMSwwLDUsMSk7QWUoYS5jKTtoM2MoYS5hKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHRnYyhhKXtxZ2MoKTtpZihKRChhLmcsMTApKXtyZXR1cm4gQkQoYS5nLDEwKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFp3KGEpe2lmKEFoKGEpLmRjKCkpe3JldHVybiBmYWxzZX1CaChhLG5ldyBieCk7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBfeShiKXtpZighKCdzdGFjaycgaW4gYikpe3RyeXt0aHJvdyBifWNhdGNoKGEpe319cmV0dXJuIGJ9XG5mdW5jdGlvbiBQYihhLGIpe2lmKGE8MHx8YT49Yil7dGhyb3cgdmJiKG5ldyBxY2IoSWIoYSxiKSkpfXJldHVybiBhfVxuZnVuY3Rpb24gVGIoYSxiLGMpe2lmKGE8MHx8YjxhfHxiPmMpe3Rocm93IHZiYihuZXcgcWNiKEtiKGEsYixjKSkpfX1cbmZ1bmN0aW9uIGVWYihhLGIpe1FxYihhLmEsYik7aWYoYi5kKXt0aHJvdyB2YmIobmV3IGh6KEhrZSkpfWIuZD1hfVxuZnVuY3Rpb24geHBiKGEsYil7aWYoYi4kbW9kQ291bnQhPWEuJG1vZENvdW50KXt0aHJvdyB2YmIobmV3IEFwYil9fVxuZnVuY3Rpb24gJHBiKGEsYil7aWYoSkQoYiw0Mikpe3JldHVybiBKZChhLmEsQkQoYiw0MikpfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGRpYihhLGIpe2lmKEpEKGIsNDIpKXtyZXR1cm4gSmQoYS5hLEJEKGIsNDIpKX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBtc2IoYSxiKXtpZihKRChiLDQyKSl7cmV0dXJuIEpkKGEuYSxCRChiLDQyKSl9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gcUFiKGEsYil7aWYoYS5hPD1hLmIpe2IudWQoYS5hKyspO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIFNiYihhKXt2YXIgYjtpZihGYmIoYSkpe2I9YTtyZXR1cm4gYj09LTAuPzA6Yn1yZXR1cm4gb0QoYSl9XG5mdW5jdGlvbiB0QWIoYSl7dmFyIGI7VHpiKGEpO2I9bmV3IGRyYjtfdWIoYS5hLG5ldyBCQWIoYikpO3JldHVybiBifVxuZnVuY3Rpb24gWXpiKGEpe3ZhciBiO1R6YihhKTtiPW5ldyBHcGI7X3ViKGEuYSxuZXcgbUFiKGIpKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEJpYihhLGIpe3RoaXMuYT1hO3ZpYi5jYWxsKHRoaXMsYSk7d0NiKGIsYS5nYygpKTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIG9yYihhKXt0aGlzLmU9YTt0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpO3RoaXMuYT1uZXcgQXJyYXl9XG5mdW5jdGlvbiBPaShhKXtyZXR1cm4gWmooYS5lLkhkKCkuZ2MoKSphLmMuSGQoKS5nYygpLDI3MyxuZXcgY2ooYSkpfVxuZnVuY3Rpb24gUXUoYSl7cmV0dXJuIG5ldyBTa2IoKFhqKGEsTWllKSxPeSh3YmIod2JiKDUsYSksYS8xMHwwKSkpKX1cbmZ1bmN0aW9uIG1fYihhKXtyZXR1cm4gQkQoUWtiKGEsS0MoYVIsbG5lLDExLGEuYy5sZW5ndGgsMCwxKSksMTk0Myl9XG5mdW5jdGlvbiBzTWIoYSxiLGMpe3JldHVybiBjLmYuYy5sZW5ndGg+MD9ITWIoYS5hLGIsYyk6SE1iKGEuYixiLGMpfVxuZnVuY3Rpb24gU1piKGEsYixjKXshIWEuZCYmTGtiKGEuZC5lLGEpO2EuZD1iOyEhYS5kJiZEa2IoYS5kLmUsYyxhKX1cbmZ1bmN0aW9uIGE1YihhLGIpe2k1YihiLGEpO2s1YihhLmQpO2s1YihCRCh2TmIoYSwoTnljKCksd3hjKSksMjA3KSl9XG5mdW5jdGlvbiBfNGIoYSxiKXtmNWIoYixhKTtoNWIoYS5kKTtoNWIoQkQodk5iKGEsKE55YygpLHd4YykpLDIwNykpfVxuZnVuY3Rpb24gWXBkKGEsYil7dmFyIGMsZDtjPWFDKGEsYik7ZD1udWxsOyEhYyYmKGQ9Yy5mZSgpKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFpwZChhLGIpe3ZhciBjLGQ7Yz10QihhLGIpO2Q9bnVsbDshIWMmJihkPWMuaWUoKSk7cmV0dXJuIGR9XG5mdW5jdGlvbiAkcGQoYSxiKXt2YXIgYyxkO2M9YUMoYSxiKTtkPW51bGw7ISFjJiYoZD1jLmllKCkpO3JldHVybiBkfVxuZnVuY3Rpb24gX3BkKGEsYil7dmFyIGMsZDtjPWFDKGEsYik7ZD1udWxsOyEhYyYmKGQ9YXFkKGMpKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFRxZChhLGIsYyl7dmFyIGQ7ZD1XcGQoYyk7cm8oYS5nLGQsYik7cm8oYS5pLGIsYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBFeihhLGIsYyl7dmFyIGQ7ZD1DeigpO3RyeXtyZXR1cm4gQnooYSxiLGMpfWZpbmFsbHl7RnooZCl9fVxuZnVuY3Rpb24gQzZkKGEpe3ZhciBiO2I9YS5XZygpO3RoaXMuYT1KRChiLDY5KT9CRChiLDY5KS5aaCgpOmIuS2MoKX1cbmZ1bmN0aW9uIGozYygpe0QyYy5jYWxsKHRoaXMpO3RoaXMuai5jPUtDKFNJLFVoZSwxLDAsNSwxKTt0aGlzLmE9LTF9XG5mdW5jdGlvbiBteGQoYSxiLGMsZCl7dGhpcy5kPWE7dGhpcy5uPWI7dGhpcy5nPWM7dGhpcy5vPWQ7dGhpcy5wPS0xfVxuZnVuY3Rpb24gamsoYSxiLGMsZCl7dGhpcy5lPWQ7dGhpcy5kPW51bGw7dGhpcy5jPWE7dGhpcy5hPWI7dGhpcy5iPWN9XG5mdW5jdGlvbiB1RWMoYSxiLGMpe3RoaXMuZD1uZXcgSEVjKHRoaXMpO3RoaXMuZT1hO3RoaXMuaT1iO3RoaXMuZj1jfVxuZnVuY3Rpb24gbXNjKCl7bXNjPWNjYjtrc2M9bmV3IG5zYyhnbGUsMCk7bHNjPW5ldyBuc2MoJ1RPUF9MRUZUJywxKX1cbmZ1bmN0aW9uIGNEYygpe2NEYz1jY2I7YkRjPWl4KG1lYigxKSxtZWIoNCkpO2FEYz1peChtZWIoMSksbWViKDIpKX1cbmZ1bmN0aW9uIHpfYygpe3pfYz1jY2I7eV9jPWFzKChzX2MoKSxPQyhHQyhPXywxKSxLaWUsNTUxLDAsW3JfY10pKSl9XG5mdW5jdGlvbiBxX2MoKXtxX2M9Y2NiO3BfYz1hcygoaV9jKCksT0MoR0MoTl8sMSksS2llLDQ4MiwwLFtoX2NdKSkpfVxuZnVuY3Rpb24gWjBjKCl7WjBjPWNjYjtZMGM9YXMoKFIwYygpLE9DKEdDKFdfLDEpLEtpZSw1MzAsMCxbUTBjXSkpKX1cbmZ1bmN0aW9uIGhQYigpe2hQYj1jY2I7Z1BiPWFzKChjUGIoKSxPQyhHQyhHTywxKSxLaWUsNDgxLDAsW2JQYl0pKSl9XG5mdW5jdGlvbiB5TGIoKXt2TGIoKTtyZXR1cm4gT0MoR0MoUE4sMSksS2llLDQwNiwwLFt1TGIsckxiLHNMYix0TGJdKX1cbmZ1bmN0aW9uIHF4Yigpe2x4YigpO3JldHVybiBPQyhHQyhpTCwxKSxLaWUsMjk3LDAsW2h4YixpeGIsanhiLGt4Yl0pfVxuZnVuY3Rpb24gVU9iKCl7Uk9iKCk7cmV0dXJuIE9DKEdDKENPLDEpLEtpZSwzOTQsMCxbT09iLE5PYixQT2IsUU9iXSl9XG5mdW5jdGlvbiBVTWIoKXtSTWIoKTtyZXR1cm4gT0MoR0Moak8sMSksS2llLDMyMywwLFtPTWIsTk1iLFBNYixRTWJdKX1cbmZ1bmN0aW9uIHNXYigpe2xXYigpO3JldHVybiBPQyhHQyhTUCwxKSxLaWUsNDA1LDAsW2hXYixrV2IsaVdiLGpXYl0pfVxuZnVuY3Rpb24ga2JjKCl7Z2JjKCk7cmV0dXJuIE9DKEdDKFZTLDEpLEtpZSwzNjAsMCxbZmJjLGRiYyxlYmMsY2JjXSl9XG5mdW5jdGlvbiBWYyhhLGIsYyxkKXtyZXR1cm4gSkQoYyw1NCk/bmV3IENnKGEsYixjLGQpOm5ldyBxZyhhLGIsYyxkKX1cbmZ1bmN0aW9uIERqYygpe0FqYygpO3JldHVybiBPQyhHQyhtViwxKSxLaWUsNDExLDAsW3dqYyx4amMseWpjLHpqY10pfVxuZnVuY3Rpb24gb2tjKGEpe3ZhciBiO3JldHVybiBhLmo9PShVY2QoKSxSY2QpJiYoYj1wa2MoYSksdXFiKGIsemNkKSl9XG5mdW5jdGlvbiBNZGMoYSxiKXt2YXIgYztjPWIuYTtRWmIoYyxiLmMuZCk7UlpiKGMsYi5kLmQpO3E3YyhjLmEsYS5uKX1cbmZ1bmN0aW9uIFNtYyhhLGIpe3JldHVybiBCRChCdGIoUUFiKEJEKFFjKGEuayxiKSwxNSkuT2MoKSxIbWMpKSwxMTMpfVxuZnVuY3Rpb24gVG1jKGEsYil7cmV0dXJuIEJEKEJ0YihSQWIoQkQoUWMoYS5rLGIpLDE1KS5PYygpLEhtYykpLDExMyl9XG5mdW5jdGlvbiBfdyhhKXtyZXR1cm4gbmV3IEt1YihybWIoQkQoYS5hLmRkKCksMTQpLmdjKCksYS5hLmNkKCkpLDE2KX1cbmZ1bmN0aW9uIFFxKGEpe2lmKEpEKGEsMTQpKXtyZXR1cm4gQkQoYSwxNCkuZGMoKX1yZXR1cm4gIWEuS2MoKS5PYigpfVxuZnVuY3Rpb24gdWdjKGEpe3FnYygpO2lmKEpEKGEuZywxNDUpKXtyZXR1cm4gQkQoYS5nLDE0NSl9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBLbyhhKXtpZihhLmUuZyE9YS5iKXt0aHJvdyB2YmIobmV3IEFwYil9cmV0dXJuICEhYS5jJiZhLmQ+MH1cbmZ1bmN0aW9uIFhzYihhKXtzQ2IoYS5iIT1hLmQuYyk7YS5jPWEuYjthLmI9YS5iLmE7KythLmE7cmV0dXJuIGEuYy5jfVxuZnVuY3Rpb24gWGpiKGEsYil7dUNiKGIpO05DKGEuYSxhLmMsYik7YS5jPWEuYysxJmEuYS5sZW5ndGgtMTtfamIoYSl9XG5mdW5jdGlvbiBXamIoYSxiKXt1Q2IoYik7YS5iPWEuYi0xJmEuYS5sZW5ndGgtMTtOQyhhLmEsYS5iLGIpO19qYihhKX1cbmZ1bmN0aW9uIEEyYyhhLGIpe3ZhciBjO2ZvcihjPWEuai5jLmxlbmd0aDtjPGI7YysrKXtFa2IoYS5qLGEucmcoKSl9fVxuZnVuY3Rpb24gZ0JjKGEsYixjLGQpe3ZhciBlO2U9ZFtiLmddW2MuZ107cmV0dXJuIEVkYihFRCh2TmIoYS5hLGUpKSl9XG5mdW5jdGlvbiBnb2MoYSxiLGMsZCxlKXt0aGlzLmk9YTt0aGlzLmE9Yjt0aGlzLmU9Yzt0aGlzLmo9ZDt0aGlzLmY9ZX1cbmZ1bmN0aW9uIERaYyhhLGIsYyxkLGUpe3RoaXMuYT1hO3RoaXMuZT1iO3RoaXMuZj1jO3RoaXMuYj1kO3RoaXMuZz1lfVxuZnVuY3Rpb24gRnooYSl7YSYmTXooKEt6KCksSnopKTstLXh6O2lmKGEpe2lmKHp6IT0tMSl7SHooenopO3p6PS0xfX19XG5mdW5jdGlvbiBOemMoKXtJemMoKTtyZXR1cm4gT0MoR0MoJFcsMSksS2llLDE5NywwLFtHemMsSHpjLEZ6YyxFemNdKX1cbmZ1bmN0aW9uIEVSYygpe3lSYygpO3JldHVybiBPQyhHQyhoJCwxKSxLaWUsMzkzLDAsW3VSYyx2UmMsd1JjLHhSY10pfVxuZnVuY3Rpb24gbVhjKCl7aVhjKCk7cmV0dXJuIE9DKEdDKGFfLDEpLEtpZSwzNDAsMCxbaFhjLGZYYyxnWGMsZVhjXSl9XG5mdW5jdGlvbiB3ZGQoKXt0ZGQoKTtyZXR1cm4gT0MoR0MoSTEsMSksS2llLDM3NCwwLFtyZGQsc2RkLHFkZCxwZGRdKX1cbmZ1bmN0aW9uIHZiZCgpe3JiZCgpO3JldHVybiBPQyhHQyhBMSwxKSxLaWUsMjg1LDAsW3FiZCxuYmQsb2JkLHBiZF0pfVxuZnVuY3Rpb24gRGFkKCl7QWFkKCk7cmV0dXJuIE9DKEdDKHYxLDEpLEtpZSwyMTgsMCxbemFkLHhhZCx3YWQseWFkXSl9XG5mdW5jdGlvbiBHZWQoKXtEZWQoKTtyZXR1cm4gT0MoR0MoTzEsMSksS2llLDMxMSwwLFtDZWQsemVkLEJlZCxBZWRdKX1cbmZ1bmN0aW9uIHNnZCgpe3BnZCgpO3JldHVybiBPQyhHQyhrMiwxKSxLaWUsMzk2LDAsW21nZCxuZ2QsbGdkLG9nZF0pfVxuZnVuY3Rpb24gZ3ZkKGEpe2V2ZCgpO3JldHVybiBNaGIoZHZkLGEpP0JEKE9oYihkdmQsYSksMzMxKS51ZygpOm51bGx9XG5mdW5jdGlvbiBjaWQoYSxiLGMpe3JldHVybiBiPDA/dGlkKGEsYyk6QkQoYyw2NikuTmooKS5TaihhLGEueWgoKSxiKX1cbmZ1bmN0aW9uIFNxZChhLGIsYyl7dmFyIGQ7ZD1XcGQoYyk7cm8oYS5kLGQsYik7UmhiKGEuZSxiLGMpO3JldHVybiBifVxuZnVuY3Rpb24gVXFkKGEsYixjKXt2YXIgZDtkPVdwZChjKTtybyhhLmosZCxiKTtSaGIoYS5rLGIsYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBkdGQoYSl7dmFyIGIsYztiPShGaGQoKSxjPW5ldyBUbGQsYyk7ISFhJiZSbGQoYixhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHd1ZChhKXt2YXIgYjtiPWEucmkoYS5pKTthLmk+MCYmJGZiKGEuZywwLGIsMCxhLmkpO3JldHVybiBifVxuZnVuY3Rpb24gcUVkKGEsYil7cEVkKCk7dmFyIGM7Yz1CRChPaGIob0VkLGEpLDU1KTtyZXR1cm4gIWN8fGMud2ooYil9XG5mdW5jdGlvbiBUd2QoYSl7aWYoYS5wIT0xKXRocm93IHZiYihuZXcgWWRiKTtyZXR1cm4gVGJiKGEuZik8PDI0Pj4yNH1cbmZ1bmN0aW9uIGF4ZChhKXtpZihhLnAhPTEpdGhyb3cgdmJiKG5ldyBZZGIpO3JldHVybiBUYmIoYS5rKTw8MjQ+PjI0fVxuZnVuY3Rpb24gZ3hkKGEpe2lmKGEucCE9Nyl0aHJvdyB2YmIobmV3IFlkYik7cmV0dXJuIFRiYihhLmspPDwxNj4+MTZ9XG5mdW5jdGlvbiBad2QoYSl7aWYoYS5wIT03KXRocm93IHZiYihuZXcgWWRiKTtyZXR1cm4gVGJiKGEuZik8PDE2Pj4xNn1cbmZ1bmN0aW9uIHNyKGEpe3ZhciBiO2I9MDt3aGlsZShhLk9iKCkpe2EuUGIoKTtiPXdiYihiLDEpfXJldHVybiBPeShiKX1cbmZ1bmN0aW9uIG54KGEsYil7dmFyIGM7Yz1uZXcgVmZiO2EueGQoYyk7Yy5hKz0nLi4nO2IueWQoYyk7cmV0dXJuIGMuYX1cbmZ1bmN0aW9uIFNnYyhhLGIsYyl7dmFyIGQ7ZD1CRChPaGIoYS5nLGMpLDU3KTtFa2IoYS5hLmMsbmV3IHZnZChiLGQpKX1cbmZ1bmN0aW9uIFZDYihhLGIsYyl7cmV0dXJuIERkYihFRChXZChpcmIoYS5mLGIpKSksRUQoV2QoaXJiKGEuZixjKSkpKX1cbmZ1bmN0aW9uIEUyZChhLGIsYyl7cmV0dXJuIEYyZChhLGIsYyxKRChiLDk5KSYmKEJEKGIsMTgpLkJiJlRqZSkhPTApfVxuZnVuY3Rpb24gTDJkKGEsYixjKXtyZXR1cm4gTTJkKGEsYixjLEpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MCl9XG5mdW5jdGlvbiBxM2QoYSxiLGMpe3JldHVybiByM2QoYSxiLGMsSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wKX1cbmZ1bmN0aW9uIEpKYyhhLGIpe3JldHVybiBhPT0oajBiKCksaDBiKSYmYj09aDBiPzQ6YT09aDBifHxiPT1oMGI/ODozMn1cbmZ1bmN0aW9uIE5kKGEsYil7cmV0dXJuIFBEKGIpPT09UEQoYSk/Jyh0aGlzIE1hcCknOmI9PW51bGw/WGhlOmZjYihiKX1cbmZ1bmN0aW9uIGtGZChhLGIpe3JldHVybiBCRChiPT1udWxsP1dkKGlyYihhLmYsbnVsbCkpOkNyYihhLmcsYiksMjgxKX1cbmZ1bmN0aW9uIFJxZChhLGIsYyl7dmFyIGQ7ZD1XcGQoYyk7UmhiKGEuYixkLGIpO1JoYihhLmMsYixjKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEJmZChhLGIpe3ZhciBjO2M9Yjt3aGlsZShjKXtPNmMoYSxjLmksYy5qKTtjPVhvZChjKX1yZXR1cm4gYX1cbmZ1bmN0aW9uIGt0KGEsYil7dmFyIGM7Yz12bWIoTnUobmV3IHd1KGEsYikpKTtpcihuZXcgd3UoYSxiKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBSNmQoYSxiKXtRNmQoKTt2YXIgYztjPUJEKGEsNjYpLk1qKCk7a1ZkKGMsYik7cmV0dXJuIGMuT2soYil9XG5mdW5jdGlvbiBUT2MoYSxiLGMsZCxlKXt2YXIgZjtmPU9PYyhlLGMsZCk7RWtiKGIsdE9jKGUsZikpO1hPYyhhLGUsYil9XG5mdW5jdGlvbiBtaWMoYSxiLGMpe2EuaT0wO2EuZT0wO2lmKGI9PWMpe3JldHVybn1saWMoYSxiLGMpO2tpYyhhLGIsYyl9XG5mdW5jdGlvbiBkQihhLGIpe3ZhciBjO2M9YS5xLmdldEhvdXJzKCk7YS5xLnNldEZ1bGxZZWFyKGIrbmplKTtZQShhLGMpfVxuZnVuY3Rpb24gZEMoZCxhLGIpe2lmKGIpe3ZhciBjPWIuZWUoKTtkLmFbYV09YyhiKX1lbHNle2RlbGV0ZSBkLmFbYV19fVxuZnVuY3Rpb24gdkIoZCxhLGIpe2lmKGIpe3ZhciBjPWIuZWUoKTtiPWMoYil9ZWxzZXtiPXVuZGVmaW5lZH1kLmFbYV09Yn1cbmZ1bmN0aW9uIHBDYihhKXtpZihhPDApe3Rocm93IHZiYihuZXcgRmViKCdOZWdhdGl2ZSBhcnJheSBzaXplOiAnK2EpKX19XG5mdW5jdGlvbiBWS2QoYSl7aWYoIWEubil7JEtkKGEpO2Eubj1uZXcgSk1kKGEsajUsYSk7X0tkKGEpfXJldHVybiBhLm59XG5mdW5jdGlvbiBGcWIoYSl7c0NiKGEuYTxhLmMuYS5sZW5ndGgpO2EuYj1hLmE7RHFiKGEpO3JldHVybiBhLmMuYlthLmJdfVxuZnVuY3Rpb24gWWpiKGEpe2lmKGEuYj09YS5jKXtyZXR1cm59YS5hPUtDKFNJLFVoZSwxLDgsNSwxKTthLmI9MDthLmM9MH1cbmZ1bmN0aW9uIEFRYihhKXt0aGlzLmI9bmV3IExxYjt0aGlzLmM9bmV3IExxYjt0aGlzLmQ9bmV3IExxYjt0aGlzLmE9YX1cbmZ1bmN0aW9uIGxnZShhLGIpe3dmZSgpO3hmZS5jYWxsKHRoaXMsYSk7dGhpcy5hPWI7dGhpcy5jPS0xO3RoaXMuYj0tMX1cbmZ1bmN0aW9uIGxTZChhLGIsYyxkKXtreGQuY2FsbCh0aGlzLDEsYyxkKTtqU2QodGhpcyk7dGhpcy5jPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBtU2QoYSxiLGMsZCl7bHhkLmNhbGwodGhpcywxLGMsZCk7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gTzdkKGEsYixjLGQsZSxmLGcpe254ZC5jYWxsKHRoaXMsYixkLGUsZixnKTt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIExWZChhLGIsYyl7dGhpcy5lPWE7dGhpcy5hPVNJO3RoaXMuYj1SNWQoYik7dGhpcy5jPWI7dGhpcy5kPWN9XG5mdW5jdGlvbiBMbyhhKXt0aGlzLmU9YTt0aGlzLmM9dGhpcy5lLmE7dGhpcy5iPXRoaXMuZS5nO3RoaXMuZD10aGlzLmUuaX1cbmZ1bmN0aW9uIG5ZZChhKXt0aGlzLmM9YTt0aGlzLmE9QkQod0lkKGEpLDE0OCk7dGhpcy5iPXRoaXMuYS5BaigpLk5oKCl9XG5mdW5jdGlvbiBJcmIoYSl7dGhpcy5kPWE7dGhpcy5iPXRoaXMuZC5hLmVudHJpZXMoKTt0aGlzLmE9dGhpcy5iLm5leHQoKX1cbmZ1bmN0aW9uICRyYigpe0xxYi5jYWxsKHRoaXMpO1RyYih0aGlzKTt0aGlzLmQuYj10aGlzLmQ7dGhpcy5kLmE9dGhpcy5kfVxuZnVuY3Rpb24gbVJiKGEsYil7X1FiLmNhbGwodGhpcyk7dGhpcy5hPWE7dGhpcy5iPWI7RWtiKHRoaXMuYS5iLHRoaXMpfVxuZnVuY3Rpb24gdUZkKGEsYil7dmFyIGM7cmV0dXJuIGM9YiE9bnVsbD9QaGIoYSxiKTpXZChpcmIoYS5mLGIpKSxSRChjKX1cbmZ1bmN0aW9uIEZGZChhLGIpe3ZhciBjO3JldHVybiBjPWIhPW51bGw/UGhiKGEsYik6V2QoaXJiKGEuZixiKSksUkQoYyl9XG5mdW5jdGlvbiBGb2IoYSxiKXt2YXIgYztmb3IoYz0wO2M8YjsrK2Mpe05DKGEsYyxuZXcgUm9iKEJEKGFbY10sNDIpKSl9fVxuZnVuY3Rpb24gTGdiKGEsYil7dmFyIGM7Zm9yKGM9YS5kLTE7Yz49MCYmYS5hW2NdPT09YltjXTtjLS0pO3JldHVybiBjPDB9XG5mdW5jdGlvbiBVY2MoYSxiKXtPY2MoKTt2YXIgYztjPWEuai5nLWIuai5nO2lmKGMhPTApe3JldHVybiBjfXJldHVybiAwfVxuZnVuY3Rpb24gRHRiKGEsYil7dUNiKGIpO2lmKGEuYSE9bnVsbCl7cmV0dXJuIEl0YihiLktiKGEuYSkpfXJldHVybiB6dGJ9XG5mdW5jdGlvbiBHeChhKXt2YXIgYjtpZihhKXtyZXR1cm4gbmV3IEJzYihhKX1iPW5ldyB6c2I7SnEoYixhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEdBYihhLGIpe3ZhciBjO3JldHVybiBiLmIuS2IoU0FiKGEsYi5jLkVlKCksKGM9bmV3IFRCYihiKSxjKSkpfVxuZnVuY3Rpb24gSHViKGEpe3p1YigpO0V1Yih0aGlzLFRiYih4YmIoT2JiKGEsMjQpLG5rZSkpLFRiYih4YmIoYSxua2UpKSl9XG5mdW5jdGlvbiBSRWIoKXtSRWI9Y2NiO1FFYj1hcygoTUViKCksT0MoR0MoYU4sMSksS2llLDQyOCwwLFtMRWIsS0ViXSkpKX1cbmZ1bmN0aW9uIFpFYigpe1pFYj1jY2I7WUViPWFzKChVRWIoKSxPQyhHQyhiTiwxKSxLaWUsNDI3LDAsW1NFYixURWJdKSkpfVxuZnVuY3Rpb24gYVNiKCl7YVNiPWNjYjtfUmI9YXMoKFhSYigpLE9DKEdDKGdQLDEpLEtpZSw0MjQsMCxbVlJiLFdSYl0pKSl9XG5mdW5jdGlvbiBENWIoKXtENWI9Y2NiO0M1Yj1hcygoeTViKCksT0MoR0MoWlIsMSksS2llLDUxMSwwLFt4NWIsdzViXSkpKX1cbmZ1bmN0aW9uIENxYygpe0NxYz1jY2I7QnFjPWFzKCh4cWMoKSxPQyhHQyhKVywxKSxLaWUsNDE5LDAsW3ZxYyx3cWNdKSkpfVxuZnVuY3Rpb24gZXJjKCl7ZXJjPWNjYjtkcmM9YXMoKF9xYygpLE9DKEdDKE1XLDEpLEtpZSw0NzksMCxbJHFjLFpxY10pKSl9XG5mdW5jdGlvbiBlQmMoKXtlQmM9Y2NiO2RCYz1hcygoX0FjKCksT0MoR0MoZlgsMSksS2llLDM3NiwwLFskQWMsWkFjXSkpKX1cbmZ1bmN0aW9uIEdBYygpe0dBYz1jY2I7RkFjPWFzKChCQWMoKSxPQyhHQyhjWCwxKSxLaWUsNDIxLDAsW3pBYyxBQWNdKSkpfVxuZnVuY3Rpb24gTnBjKCl7TnBjPWNjYjtNcGM9YXMoKElwYygpLE9DKEdDKEZXLDEpLEtpZSw0MjIsMCxbR3BjLEhwY10pKSl9XG5mdW5jdGlvbiByc2MoKXtyc2M9Y2NiO3FzYz1hcygobXNjKCksT0MoR0MoU1csMSksS2llLDQyMCwwLFtrc2MsbHNjXSkpKX1cbmZ1bmN0aW9uIE1PYygpe01PYz1jY2I7TE9jPWFzKChIT2MoKSxPQyhHQyhEWiwxKSxLaWUsNTIwLDAsW0dPYyxGT2NdKSkpfVxuZnVuY3Rpb24gWkljKCl7WkljPWNjYjtZSWM9YXMoKFVJYygpLE9DKEdDKG1ZLDEpLEtpZSw1MjMsMCxbVEljLFNJY10pKSl9XG5mdW5jdGlvbiBiTWMoKXtiTWM9Y2NiO2FNYz1hcygoWUxjKCksT0MoR0MoZlosMSksS2llLDUxNiwwLFtYTGMsV0xjXSkpKX1cbmZ1bmN0aW9uIGpNYygpe2pNYz1jY2I7aU1jPWFzKChlTWMoKSxPQyhHQyhnWiwxKSxLaWUsNTE1LDAsW2NNYyxkTWNdKSkpfVxuZnVuY3Rpb24gS1FjKCl7S1FjPWNjYjtKUWM9YXMoKEZRYygpLE9DKEdDKFlaLDEpLEtpZSw0NTUsMCxbRFFjLEVRY10pKSl9XG5mdW5jdGlvbiBkVWMoKXtkVWM9Y2NiO2NVYz1hcygoJFRjKCksT0MoR0MoRiQsMSksS2llLDQyNSwwLFtaVGMsWVRjXSkpKX1cbmZ1bmN0aW9uIFhVYygpe1hVYz1jY2I7V1VjPWFzKChQVWMoKSxPQyhHQyhLJCwxKSxLaWUsNDk1LDAsW05VYyxPVWNdKSkpfVxuZnVuY3Rpb24gWFRjKCl7WFRjPWNjYjtXVGM9YXMoKFNUYygpLE9DKEdDKEUkLDEpLEtpZSw0ODAsMCxbUVRjLFJUY10pKSl9XG5mdW5jdGlvbiBsV2MoKXtsV2M9Y2NiO2tXYz1hcygoZldjKCksT0MoR0MoWCQsMSksS2llLDQyNiwwLFtkV2MsZVdjXSkpKX1cbmZ1bmN0aW9uIGkxYygpe2kxYz1jY2I7aDFjPWFzKChhMWMoKSxPQyhHQyhYXywxKSxLaWUsNDI5LDAsW18wYywkMGNdKSkpfVxuZnVuY3Rpb24gSF9jKCl7SF9jPWNjYjtHX2M9YXMoKENfYygpLE9DKEdDKFBfLDEpLEtpZSw0MzAsMCxbQl9jLEFfY10pKSl9XG5mdW5jdGlvbiBVSWMoKXtVSWM9Y2NiO1RJYz1uZXcgVkljKCdVUFBFUicsMCk7U0ljPW5ldyBWSWMoJ0xPV0VSJywxKX1cbmZ1bmN0aW9uIExxZChhLGIpe3ZhciBjO2M9bmV3IGVDO1NwZChjLCd4JyxiLmEpO1NwZChjLCd5JyxiLmIpO1FwZChhLGMpfVxuZnVuY3Rpb24gT3FkKGEsYil7dmFyIGM7Yz1uZXcgZUM7U3BkKGMsJ3gnLGIuYSk7U3BkKGMsJ3knLGIuYik7UXBkKGEsYyl9XG5mdW5jdGlvbiBKaWMoYSxiKXt2YXIgYyxkO2Q9ZmFsc2U7ZG97Yz1NaWMoYSxiKTtkPWR8Y313aGlsZShjKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHpIYyhhLGIpe3ZhciBjLGQ7Yz1iO2Q9MDt3aGlsZShjPjApe2QrPWEuYVtjXTtjLT1jJi1jfXJldHVybiBkfVxuZnVuY3Rpb24gQ2ZkKGEsYil7dmFyIGM7Yz1iO3doaWxlKGMpe082YyhhLC1jLmksLWMuaik7Yz1Yb2QoYyl9cmV0dXJuIGF9XG5mdW5jdGlvbiByZWIoYSxiKXt2YXIgYyxkO3VDYihiKTtmb3IoZD1hLktjKCk7ZC5PYigpOyl7Yz1kLlBiKCk7Yi50ZChjKX19XG5mdW5jdGlvbiBtZShhLGIpe3ZhciBjO2M9Yi5jZCgpO3JldHVybiBuZXcgV28oYyxhLmUucGMoYyxCRChiLmRkKCksMTQpKSl9XG5mdW5jdGlvbiBHc2IoYSxiLGMsZCl7dmFyIGU7ZT1uZXcganRiO2UuYz1iO2UuYj1jO2UuYT1kO2QuYj1jLmE9ZTsrK2EuYn1cbmZ1bmN0aW9uIE5rYihhLGIsYyl7dmFyIGQ7ZD0odENiKGIsYS5jLmxlbmd0aCksYS5jW2JdKTthLmNbYl09YztyZXR1cm4gZH1cbmZ1bmN0aW9uIGxGZChhLGIsYyl7cmV0dXJuIEJEKGI9PW51bGw/anJiKGEuZixudWxsLGMpOkRyYihhLmcsYixjKSwyODEpfVxuZnVuY3Rpb24gZlJiKGEpe3JldHVybiAhIWEuYyYmISFhLmQ/b1JiKGEuYykrJy0+JytvUmIoYS5kKTonZV8nK0ZDYihhKX1cbmZ1bmN0aW9uIEZBYihhLGIpe3JldHVybiAoVXpiKGEpLFdBYihuZXcgWUFiKGEsbmV3IHFCYihiLGEuYSkpKSkuc2QoREFiKX1cbmZ1bmN0aW9uIHRVYigpe3FVYigpO3JldHVybiBPQyhHQyh6UCwxKSxLaWUsMzU2LDAsW2xVYixtVWIsblViLG9VYixwVWJdKX1cbmZ1bmN0aW9uIF9jZCgpe1VjZCgpO3JldHVybiBPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pfVxuZnVuY3Rpb24gRHooYil7QXooKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRXooYix0aGlzLGFyZ3VtZW50cyk7dmFyIGF9fVxuZnVuY3Rpb24gc3ooKXtpZihEYXRlLm5vdyl7cmV0dXJuIERhdGUubm93KCl9cmV0dXJuIChuZXcgRGF0ZSkuZ2V0VGltZSgpfVxuZnVuY3Rpb24gT1piKGEpe2lmKCFhLmN8fCFhLmQpe3JldHVybiBmYWxzZX1yZXR1cm4gISFhLmMuaSYmYS5jLmk9PWEuZC5pfVxuZnVuY3Rpb24gcHYoYSl7aWYoIWEuYy5TYigpKXt0aHJvdyB2YmIobmV3IHV0Yil9YS5hPXRydWU7cmV0dXJuIGEuYy5VYigpfVxuZnVuY3Rpb24ga28oYSl7YS5pPTA7QWxiKGEuYixudWxsKTtBbGIoYS5jLG51bGwpO2EuYT1udWxsO2EuZT1udWxsOysrYS5nfVxuZnVuY3Rpb24geWNiKGEpe3djYi5jYWxsKHRoaXMsYT09bnVsbD9YaGU6ZmNiKGEpLEpEKGEsNzgpP0JEKGEsNzgpOm51bGwpfVxuZnVuY3Rpb24gUFliKGEpe01ZYigpO3lYYih0aGlzKTt0aGlzLmE9bmV3IFBzYjtOWWIodGhpcyxhKTtEc2IodGhpcy5hLGEpfVxuZnVuY3Rpb24galliKCl7Q2tiKHRoaXMpO3RoaXMuYj1uZXcgZjdjKFBqZSxQamUpO3RoaXMuYT1uZXcgZjdjKFFqZSxRamUpfVxuZnVuY3Rpb24gckFiKGEsYil7dGhpcy5jPTA7dGhpcy5iPWI7anZiLmNhbGwodGhpcyxhLDE3NDkzKTt0aGlzLmE9dGhpcy5jfVxuZnVuY3Rpb24gd3liKGEpe295YigpO2lmKGx5Yil7cmV0dXJufXRoaXMuYz1hO3RoaXMuZT10cnVlO3RoaXMuYT1uZXcgUmtifVxuZnVuY3Rpb24gb3liKCl7b3liPWNjYjtseWI9dHJ1ZTtqeWI9ZmFsc2U7a3liPWZhbHNlO255Yj1mYWxzZTtteWI9ZmFsc2V9XG5mdW5jdGlvbiBDM2MoYSxiKXtpZihKRChiLDE0OSkpe3JldHVybiBkZmIoYS5jLEJEKGIsMTQ5KS5jKX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiB6VWMoYSxiKXt2YXIgYztjPTA7ISFhJiYoYys9YS5mLmEvMik7ISFiJiYoYys9Yi5mLmEvMik7cmV0dXJuIGN9XG5mdW5jdGlvbiBqNGMoYSxiKXt2YXIgYztjPUJEKFdyYihhLmQsYiksMjMpO3JldHVybiBjP2M6QkQoV3JiKGEuZSxiKSwyMyl9XG5mdW5jdGlvbiBMemQoYSl7dGhpcy5iPWE7RnlkLmNhbGwodGhpcyxhKTt0aGlzLmE9QkQoQWpkKHRoaXMuYi5hLDQpLDEyNil9XG5mdW5jdGlvbiBVemQoYSl7dGhpcy5iPWE7JHlkLmNhbGwodGhpcyxhKTt0aGlzLmE9QkQoQWpkKHRoaXMuYi5hLDQpLDEyNil9XG5mdW5jdGlvbiAkS2QoYSl7aWYoIWEudCl7YS50PW5ldyBZTWQoYSk7dnRkKG5ldyBjMGQoYSksMCxhLnQpfXJldHVybiBhLnR9XG5mdW5jdGlvbiBrYWQoKXtlYWQoKTtyZXR1cm4gT0MoR0ModDEsMSksS2llLDEwMywwLFtjYWQsYmFkLGFhZCxfOWMsZGFkXSl9XG5mdW5jdGlvbiBXYmQoKXtUYmQoKTtyZXR1cm4gT0MoR0MoQzEsMSksS2llLDI0OSwwLFtRYmQsU2JkLE9iZCxQYmQsUmJkXSl9XG5mdW5jdGlvbiBRNWMoKXtONWMoKTtyZXR1cm4gT0MoR0MoZTEsMSksS2llLDE3NSwwLFtMNWMsSzVjLEk1YyxNNWMsSjVjXSl9XG5mdW5jdGlvbiBRX2MoKXtOX2MoKTtyZXR1cm4gT0MoR0MoUV8sMSksS2llLDMxNiwwLFtJX2MsSl9jLE1fYyxLX2MsTF9jXSl9XG5mdW5jdGlvbiBfemMoKXtWemMoKTtyZXR1cm4gT0MoR0MoX1csMSksS2llLDMxNSwwLFtVemMsUnpjLFN6YyxRemMsVHpjXSl9XG5mdW5jdGlvbiBzcWMoKXttcWMoKTtyZXR1cm4gT0MoR0MoSVcsMSksS2llLDMzNSwwLFtpcWMsaHFjLGtxYyxscWMsanFjXSl9XG5mdW5jdGlvbiBuJGMoKXtrJGMoKTtyZXR1cm4gT0MoR0MoeV8sMSksS2llLDM1NSwwLFtnJGMsZiRjLGkkYyxoJGMsaiRjXSl9XG5mdW5jdGlvbiBfamMoKXtYamMoKTtyZXR1cm4gT0MoR0ModVYsMSksS2llLDM2MywwLFtUamMsVmpjLFdqYyxVamMsU2pjXSl9XG5mdW5jdGlvbiBGdGMoKXtDdGMoKTtyZXR1cm4gT0MoR0MoVFcsMSksS2llLDE2MywwLFtCdGMseHRjLHl0Yyx6dGMsQXRjXSl9XG5mdW5jdGlvbiBUMGQoKXtUMGQ9Y2NiO3ZhciBhLGI7UjBkPShMRmQoKSxiPW5ldyBNUGQsYik7UzBkPShhPW5ldyBPSmQsYSl9XG5mdW5jdGlvbiB5VWQoYSl7dmFyIGI7aWYoIWEuYyl7Yj1hLnI7SkQoYiw4OCkmJihhLmM9QkQoYiwyNikpfXJldHVybiBhLmN9XG5mdW5jdGlvbiB6YyhhKXthLmU9MzthLmQ9YS5ZYigpO2lmKGEuZSE9Mil7YS5lPTA7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gUkMoYSl7dmFyIGIsYyxkO2I9YSZFamU7Yz1hPj4yMiZFamU7ZD1hPDA/RmplOjA7cmV0dXJuIFRDKGIsYyxkKX1cbmZ1bmN0aW9uIHV5KGEpe3ZhciBiLGMsZCxlO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO1F6YihiKX19XG5mdW5jdGlvbiBUYyhhLGIpe3ZhciBjLGQ7Yz1CRChJdihhLmMsYiksMTQpO2lmKGMpe2Q9Yy5nYygpO2MuJGIoKTthLmQtPWR9fVxuZnVuY3Rpb24gdGpiKGEsYil7dmFyIGMsZDtjPWIuY2QoKTtkPUF3YihhLGMpO3JldHVybiAhIWQmJnd0YihkLmUsYi5kZCgpKX1cbmZ1bmN0aW9uIFFnYihhLGIpe2lmKGI9PTB8fGEuZT09MCl7cmV0dXJuIGF9cmV0dXJuIGI+MD9paGIoYSxiKTpsaGIoYSwtYil9XG5mdW5jdGlvbiBSZ2IoYSxiKXtpZihiPT0wfHxhLmU9PTApe3JldHVybiBhfXJldHVybiBiPjA/bGhiKGEsYik6aWhiKGEsLWIpfVxuZnVuY3Rpb24gUnIoYSl7aWYoUXIoYSkpe2EuYz1hLmE7cmV0dXJuIGEuYS5QYigpfWVsc2V7dGhyb3cgdmJiKG5ldyB1dGIpfX1cbmZ1bmN0aW9uIFlhYyhhKXt2YXIgYixjO2I9YS5jLmk7Yz1hLmQuaTtyZXR1cm4gYi5rPT0oajBiKCksZTBiKSYmYy5rPT1lMGJ9XG5mdW5jdGlvbiBrWmIoYSl7dmFyIGI7Yj1uZXcgVVpiO3ROYihiLGEpO3lOYihiLChOeWMoKSxqeGMpLG51bGwpO3JldHVybiBifVxuZnVuY3Rpb24gaGlkKGEsYixjKXt2YXIgZDtyZXR1cm4gZD1hLllnKGIpLGQ+PTA/YS5fZyhkLGMsdHJ1ZSk6c2lkKGEsYixjKX1cbmZ1bmN0aW9uIHVIYihhLGIsYyxkKXt2YXIgZTtmb3IoZT0wO2U8ckhiO2UrKyl7bkhiKGEuYVtiLmddW2VdLGMsZFtiLmddKX19XG5mdW5jdGlvbiB2SGIoYSxiLGMsZCl7dmFyIGU7Zm9yKGU9MDtlPHNIYjtlKyspe21IYihhLmFbZV1bYi5nXSxjLGRbYi5nXSl9fVxuZnVuY3Rpb24gdlNkKGEsYixjLGQsZSl7a3hkLmNhbGwodGhpcyxiLGQsZSk7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYT1jfVxuZnVuY3Rpb24gelNkKGEsYixjLGQsZSl7bHhkLmNhbGwodGhpcyxiLGQsZSk7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYT1jfVxuZnVuY3Rpb24gSVNkKGEsYixjLGQsZSl7b3hkLmNhbGwodGhpcyxiLGQsZSk7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYT1jfVxuZnVuY3Rpb24gcVNkKGEsYixjLGQsZSl7b3hkLmNhbGwodGhpcyxiLGQsZSk7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1jfVxuZnVuY3Rpb24gbVdkKGEsYixjKXtWVmQuY2FsbCh0aGlzLGMpO3RoaXMuYj1hO3RoaXMuYz1iO3RoaXMuZD0oQ1dkKCksQVdkKX1cbmZ1bmN0aW9uIG94ZChhLGIsYyl7dGhpcy5kPWE7dGhpcy5rPWI/MTowO3RoaXMuZj1jPzE6MDt0aGlzLm89LTE7dGhpcy5wPTB9XG5mdW5jdGlvbiBfNmQoYSxiLGMpe3ZhciBkO2Q9bmV3IGE3ZChhLmEpO0xkKGQsYS5hLmEpO2pyYihkLmYsYixjKTthLmEuYT1kfVxuZnVuY3Rpb24gbHVkKGEsYil7YS5xaShhLmkrMSk7bXVkKGEsYS5pLGEub2koYS5pLGIpKTthLmJpKGEuaSsrLGIpO2EuY2koKX1cbmZ1bmN0aW9uIG91ZChhKXt2YXIgYixjOysrYS5qO2I9YS5nO2M9YS5pO2EuZz1udWxsO2EuaT0wO2EuZGkoYyxiKTthLmNpKCl9XG5mdW5jdGlvbiBPdShhKXt2YXIgYixjO1FiKGEpO2I9SXUoYS5sZW5ndGgpO2M9bmV3IFNrYihiKTtubWIoYyxhKTtyZXR1cm4gY31cbmZ1bmN0aW9uIGttKGEpe3ZhciBiO2I9KFFiKGEpLGE/bmV3IFRrYihhKTpOdShhLktjKCkpKTtzbWIoYik7cmV0dXJuIERtKGIpfVxuZnVuY3Rpb24gS2tiKGEsYil7dmFyIGM7Yz0odENiKGIsYS5jLmxlbmd0aCksYS5jW2JdKTtjQ2IoYS5jLGIsMSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBRYyhhLGIpe3ZhciBjO2M9QkQoYS5jLnhjKGIpLDE0KTshYyYmKGM9YS5pYyhiKSk7cmV0dXJuIGEucGMoYixjKX1cbmZ1bmN0aW9uIGNmYihhLGIpe3ZhciBjLGQ7Yz0odUNiKGEpLGEpO2Q9KHVDYihiKSxiKTtyZXR1cm4gYz09ZD8wOmM8ZD8tMToxfVxuZnVuY3Rpb24gRnBiKGEpe3ZhciBiO2I9YS5lK2EuZjtpZihpc05hTihiKSYmTGRiKGEuZCkpe3JldHVybiBhLmR9cmV0dXJuIGJ9XG5mdW5jdGlvbiB1d2IoYSxiKXshYS5hPyhhLmE9bmV3IFdmYihhLmQpKTpRZmIoYS5hLGEuYik7TmZiKGEuYSxiKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFNiKGEsYil7aWYoYTwwfHxhPmIpe3Rocm93IHZiYihuZXcgcWNiKEpiKGEsYiwnaW5kZXgnKSkpfXJldHVybiBhfVxuZnVuY3Rpb24gemhiKGEsYixjLGQpe3ZhciBlO2U9S0MoV0Qsb2plLDI1LGIsMTUsMSk7QWhiKGUsYSxiLGMsZCk7cmV0dXJuIGV9XG5mdW5jdGlvbiBfQShhLGIpe3ZhciBjO2M9YS5xLmdldEhvdXJzKCkrKGIvNjB8MCk7YS5xLnNldE1pbnV0ZXMoYik7WUEoYSxjKX1cbmZ1bmN0aW9uIEEkYyhhLGIpe3JldHVybiAkd25kLk1hdGgubWluKFM2YyhiLmEsYS5kLmQuYyksUzZjKGIuYixhLmQuZC5jKSl9XG5mdW5jdGlvbiBUaGIoYSxiKXtyZXR1cm4gTkQoYik/Yj09bnVsbD9rcmIoYS5mLG51bGwpOkVyYihhLmcsYik6a3JiKGEuZixiKX1cbmZ1bmN0aW9uIGIxYihhKXt0aGlzLmM9YTt0aGlzLmE9bmV3IG9sYih0aGlzLmMuYSk7dGhpcy5iPW5ldyBvbGIodGhpcy5jLmIpfVxuZnVuY3Rpb24ga1JiKCl7dGhpcy5lPW5ldyBSa2I7dGhpcy5jPW5ldyBSa2I7dGhpcy5kPW5ldyBSa2I7dGhpcy5iPW5ldyBSa2J9XG5mdW5jdGlvbiBNRmIoKXt0aGlzLmc9bmV3IFBGYjt0aGlzLmI9bmV3IFBGYjt0aGlzLmE9bmV3IFJrYjt0aGlzLms9bmV3IFJrYn1cbmZ1bmN0aW9uIEdqYyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5kPWM7RWtiKGIuZSx0aGlzKTtFa2IoYy5iLHRoaXMpfVxuZnVuY3Rpb24gd0JiKGEsYil7ZnZiLmNhbGwodGhpcyxiLnJkKCksYi5xZCgpJi02KTt1Q2IoYSk7dGhpcy5hPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBDQmIoYSxiKXtqdmIuY2FsbCh0aGlzLGIucmQoKSxiLnFkKCkmLTYpO3VDYihhKTt0aGlzLmE9YTt0aGlzLmI9Yn1cbmZ1bmN0aW9uIElCYihhLGIpe252Yi5jYWxsKHRoaXMsYi5yZCgpLGIucWQoKSYtNik7dUNiKGEpO3RoaXMuYT1hO3RoaXMuYj1ifVxuZnVuY3Rpb24gQlFjKGEsYixjKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9YztFa2IoYS50LHRoaXMpO0VrYihiLmksdGhpcyl9XG5mdW5jdGlvbiBTUmMoKXt0aGlzLmI9bmV3IFBzYjt0aGlzLmE9bmV3IFBzYjt0aGlzLmI9bmV3IFBzYjt0aGlzLmE9bmV3IFBzYn1cbmZ1bmN0aW9uIGc2Yygpe2c2Yz1jY2I7ZjZjPW5ldyBMc2QoJ29yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyJyl9XG5mdW5jdGlvbiBWYWMoKXtWYWM9Y2NiO1VhYz1uZXcgTXNkKCdzZXBhcmF0ZUxheWVyQ29ubmVjdGlvbnMnLChnYmMoKSxmYmMpKX1cbmZ1bmN0aW9uIEhPYygpe0hPYz1jY2I7R09jPW5ldyBJT2MoJ1JFR1VMQVInLDApO0ZPYz1uZXcgSU9jKCdDUklUSUNBTCcsMSl9XG5mdW5jdGlvbiBfQWMoKXtfQWM9Y2NiOyRBYz1uZXcgYUJjKCdTVEFDS0VEJywwKTtaQWM9bmV3IGFCYygnU0VRVUVOQ0VEJywxKX1cbmZ1bmN0aW9uIENfYygpe0NfYz1jY2I7Ql9jPW5ldyBEX2MoJ0ZJWEVEJywwKTtBX2M9bmV3IERfYygnQ0VOVEVSX05PREUnLDEpfVxuZnVuY3Rpb24gUEhjKGEsYil7dmFyIGM7Yz1WSGMoYSxiKTthLmI9bmV3IEJIYyhjLmMubGVuZ3RoKTtyZXR1cm4gT0hjKGEsYyl9XG5mdW5jdGlvbiBLQWQoYSxiLGMpe3ZhciBkOysrYS5lOy0tYS5mO2Q9QkQoYS5kW2JdLiRjKGMpLDEzMyk7cmV0dXJuIGQuZGQoKX1cbmZ1bmN0aW9uIEpKZChhKXt2YXIgYjtpZighYS5hKXtiPWEucjtKRChiLDE0OCkmJihhLmE9QkQoYiwxNDgpKX1yZXR1cm4gYS5hfVxuZnVuY3Rpb24gcG9jKGEpe2lmKGEuYSl7aWYoYS5lKXtyZXR1cm4gcG9jKGEuZSl9fWVsc2V7cmV0dXJuIGF9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBPRGMoYSxiKXtpZihhLnA8Yi5wKXtyZXR1cm4gMX1lbHNlIGlmKGEucD5iLnApe3JldHVybiAtMX1yZXR1cm4gMH1cbmZ1bmN0aW9uIHB2YihhLGIpe3VDYihiKTtpZihhLmM8YS5kKXthLnplKGIsYS5jKyspO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIFFZZChhLGIpe2lmKE1oYihhLmEsYikpe1RoYihhLmEsYik7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gZmQoYSl7dmFyIGIsYztiPWEuY2QoKTtjPUJEKGEuZGQoKSwxNCk7cmV0dXJuICRqKGMuTmMoKSxuZXcgYWgoYikpfVxuZnVuY3Rpb24gc3FiKGEpe3ZhciBiO2I9QkQoWkJiKGEuYixhLmIubGVuZ3RoKSw5KTtyZXR1cm4gbmV3IHhxYihhLmEsYixhLmMpfVxuZnVuY3Rpb24gX3piKGEpe3ZhciBiO1V6YihhKTtiPW5ldyBmQWIoYSxhLmEuZSxhLmEuZHw0KTtyZXR1cm4gbmV3IGJBYihhLGIpfVxuZnVuY3Rpb24gSEFiKGEpe3ZhciBiO1R6YihhKTtiPTA7d2hpbGUoYS5hLnNkKG5ldyBSQmIpKXtiPXdiYihiLDEpfXJldHVybiBifVxuZnVuY3Rpb24gVURjKGEsYixjKXt2YXIgZCxlO2Q9MDtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXtkKz1hLiRmKGJbZV0sZCxjKX19XG5mdW5jdGlvbiBRSmIoYSxiKXt2YXIgYztpZihhLkMpe2M9QkQoTXBiKGEuYixiKSwxMjQpLm47Yy5kPWEuQy5kO2MuYT1hLkMuYX19XG5mdW5jdGlvbiBNaShhLGIsYyl7UGIoYixhLmUuSGQoKS5nYygpKTtQYihjLGEuYy5IZCgpLmdjKCkpO3JldHVybiBhLmFbYl1bY119XG5mdW5jdGlvbiBVZ2IoYSxiKXtIZ2IoKTt0aGlzLmU9YTt0aGlzLmQ9MTt0aGlzLmE9T0MoR0MoV0QsMSksb2plLDI1LDE1LFtiXSl9XG5mdW5jdGlvbiBkZyhhLGIsYyxkKXt0aGlzLmY9YTt0aGlzLmU9Yjt0aGlzLmQ9Yzt0aGlzLmI9ZDt0aGlzLmM9IWQ/bnVsbDpkLmR9XG5mdW5jdGlvbiBvNWIoYSl7dmFyIGIsYyxkLGU7ZT1hLmQ7Yj1hLmE7Yz1hLmI7ZD1hLmM7YS5kPWM7YS5hPWQ7YS5iPWU7YS5jPWJ9XG5mdW5jdGlvbiBZMmQoYSxiLGMsZCl7WDJkKGEsYixjLE0yZChhLGIsZCxKRChiLDk5KSYmKEJEKGIsMTgpLkJiJlRqZSkhPTApKX1cbmZ1bmN0aW9uIHRhYyhhLGIpe09kZChiLCdMYWJlbCBtYW5hZ2VtZW50JywxKTtSRCh2TmIoYSwoZzZjKCksZjZjKSkpO1FkZChiKX1cbmZ1bmN0aW9uIFNrYihhKXtDa2IodGhpcyk7bUNiKGE+PTAsJ0luaXRpYWwgY2FwYWNpdHkgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1cbmZ1bmN0aW9uIGxIYigpe2xIYj1jY2I7a0hiPWFzKChnSGIoKSxPQyhHQyhwTiwxKSxLaWUsMjMyLDAsW2RIYixlSGIsZkhiXSkpKX1cbmZ1bmN0aW9uIFNIYigpe1NIYj1jY2I7UkhiPWFzKChOSGIoKSxPQyhHQyhzTiwxKSxLaWUsNDYxLDAsW0xIYixLSGIsTUhiXSkpKX1cbmZ1bmN0aW9uIEpJYigpe0pJYj1jY2I7SUliPWFzKChFSWIoKSxPQyhHQyh6TiwxKSxLaWUsNDYyLDAsW0RJYixDSWIsQkliXSkpKX1cbmZ1bmN0aW9uIEt5Yigpe0t5Yj1jY2I7SnliPWFzKChGeWIoKSxPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW0N5YixEeWIsRXliXSkpKX1cbmZ1bmN0aW9uIERUYigpe0RUYj1jY2I7Q1RiPWFzKCh5VGIoKSxPQyhHQyhvUCwxKSxLaWUsMzc5LDAsW3dUYix2VGIseFRiXSkpKX1cbmZ1bmN0aW9uIFdYYigpe1dYYj1jY2I7VlhiPWFzKChSWGIoKSxPQyhHQyhoUSwxKSxLaWUsNDIzLDAsW1FYYixQWGIsT1hiXSkpKX1cbmZ1bmN0aW9uIFpwYygpe1pwYz1jY2I7WXBjPWFzKChScGMoKSxPQyhHQyhHVywxKSxLaWUsMzE0LDAsW1BwYyxPcGMsUXBjXSkpKX1cbmZ1bmN0aW9uIGdxYygpe2dxYz1jY2I7ZnFjPWFzKChicWMoKSxPQyhHQyhIVywxKSxLaWUsMzM3LDAsWyRwYyxhcWMsX3BjXSkpKX1cbmZ1bmN0aW9uIExxYygpe0xxYz1jY2I7S3FjPWFzKChHcWMoKSxPQyhHQyhLVywxKSxLaWUsNDUwLDAsW0VxYyxEcWMsRnFjXSkpKX1cbmZ1bmN0aW9uIEtrYygpe0trYz1jY2I7SmtjPWFzKChGa2MoKSxPQyhHQyh2ViwxKSxLaWUsMzYxLDAsW0VrYyxEa2MsQ2tjXSkpKX1cbmZ1bmN0aW9uIGpzYygpe2pzYz1jY2I7aXNjPWFzKChlc2MoKSxPQyhHQyhSVywxKSxLaWUsMzAzLDAsW2NzYyxkc2MsYnNjXSkpKX1cbmZ1bmN0aW9uIGFzYygpe2FzYz1jY2I7X3JjPWFzKChYcmMoKSxPQyhHQyhRVywxKSxLaWUsMjkyLDAsW1ZyYyxXcmMsVXJjXSkpKX1cbmZ1bmN0aW9uIER6Yygpe0R6Yz1jY2I7Q3pjPWFzKCh4emMoKSxPQyhHQyhaVywxKSxLaWUsMzc4LDAsW3V6Yyx2emMsd3pjXSkpKX1cbmZ1bmN0aW9uIFlBYygpe1lBYz1jY2I7WEFjPWFzKChUQWMoKSxPQyhHQyhlWCwxKSxLaWUsMzc1LDAsW1FBYyxSQWMsU0FjXSkpKX1cbmZ1bmN0aW9uIHlBYygpe3lBYz1jY2I7eEFjPWFzKCh0QWMoKSxPQyhHQyhiWCwxKSxLaWUsMzM5LDAsW3JBYyxxQWMsc0FjXSkpKX1cbmZ1bmN0aW9uIFBBYygpe1BBYz1jY2I7T0FjPWFzKChLQWMoKSxPQyhHQyhkWCwxKSxLaWUsNDUyLDAsW0pBYyxIQWMsSUFjXSkpKX1cbmZ1bmN0aW9uIFFCYygpe1FCYz1jY2I7UEJjPWFzKChMQmMoKSxPQyhHQyhqWCwxKSxLaWUsMzc3LDAsW0pCYyxLQmMsSUJjXSkpKX1cbmZ1bmN0aW9uIHlCYygpe3lCYz1jY2I7eEJjPWFzKCh0QmMoKSxPQyhHQyhoWCwxKSxLaWUsMzM2LDAsW3FCYyxyQmMsc0JjXSkpKX1cbmZ1bmN0aW9uIEhCYygpe0hCYz1jY2I7R0JjPWFzKChDQmMoKSxPQyhHQyhpWCwxKSxLaWUsMzM4LDAsW0JCYyx6QmMsQUJjXSkpKX1cbmZ1bmN0aW9uIHdHYygpe3dHYz1jY2I7dkdjPWFzKChyR2MoKSxPQyhHQyhQWCwxKSxLaWUsNDU0LDAsW29HYyxwR2MscUdjXSkpKX1cbmZ1bmN0aW9uIHpWYygpe3pWYz1jY2I7eVZjPWFzKCh0VmMoKSxPQyhHQyhPJCwxKSxLaWUsNDQyLDAsW3NWYyxxVmMsclZjXSkpKX1cbmZ1bmN0aW9uIHZXYygpe3ZXYz1jY2I7dVdjPWFzKChwV2MoKSxPQyhHQyhZJCwxKSxLaWUsMzgwLDAsW21XYyxuV2Msb1djXSkpKX1cbmZ1bmN0aW9uIEVZYygpe0VZYz1jY2I7RFljPWFzKCh6WWMoKSxPQyhHQyhxXywxKSxLaWUsMzgxLDAsW3hZYyx5WWMsd1ljXSkpKX1cbmZ1bmN0aW9uIHlYYygpe3lYYz1jY2I7eFhjPWFzKChzWGMoKSxPQyhHQyhiXywxKSxLaWUsMjkzLDAsW3FYYyxyWGMscFhjXSkpKX1cbmZ1bmN0aW9uIGJfYygpe2JfYz1jY2I7YV9jPWFzKChZJGMoKSxPQyhHQyhKXywxKSxLaWUsNDM3LDAsW1YkYyxXJGMsWCRjXSkpKX1cbmZ1bmN0aW9uIG1iZCgpe21iZD1jY2I7bGJkPWFzKChoYmQoKSxPQyhHQyh6MSwxKSxLaWUsMzM0LDAsW2ZiZCxlYmQsZ2JkXSkpKX1cbmZ1bmN0aW9uIHZhZCgpe3ZhZD1jY2I7dWFkPWFzKChxYWQoKSxPQyhHQyh1MSwxKSxLaWUsMjcyLDAsW25hZCxvYWQscGFkXSkpKX1cbmZ1bmN0aW9uIGljZCgpe2RjZCgpO3JldHVybiBPQyhHQyhEMSwxKSxLaWUsOTgsMCxbY2NkLGJjZCxhY2QsWmJkLF9iZCwkYmRdKX1cbmZ1bmN0aW9uIGlrZChhLGIpe3JldHVybiAhYS5vJiYoYS5vPW5ldyBkSWQoKFRoZCgpLFFoZCksUzIsYSwwKSkscUFkKGEubyxiKX1cbmZ1bmN0aW9uIE5BZChhKXshYS5nJiYoYS5nPW5ldyBKQ2QpOyFhLmcuZCYmKGEuZy5kPW5ldyBNQmQoYSkpO3JldHVybiBhLmcuZH1cbmZ1bmN0aW9uIHlBZChhKXshYS5nJiYoYS5nPW5ldyBKQ2QpOyFhLmcuYSYmKGEuZy5hPW5ldyBTQmQoYSkpO3JldHVybiBhLmcuYX1cbmZ1bmN0aW9uIEVBZChhKXshYS5nJiYoYS5nPW5ldyBKQ2QpOyFhLmcuYiYmKGEuZy5iPW5ldyBHQmQoYSkpO3JldHVybiBhLmcuYn1cbmZ1bmN0aW9uIEZBZChhKXshYS5nJiYoYS5nPW5ldyBKQ2QpOyFhLmcuYyYmKGEuZy5jPW5ldyBpQ2QoYSkpO3JldHVybiBhLmcuY31cbmZ1bmN0aW9uIEEyZChhLGIsYyl7dmFyIGQsZTtlPW5ldyBwNGQoYixhKTtmb3IoZD0wO2Q8YzsrK2Qpe2Q0ZChlKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIEF0ZChhLGIsYyl7dmFyIGQsZTtpZihjIT1udWxsKXtmb3IoZD0wO2Q8YjsrK2Qpe2U9Y1tkXTthLmZpKGQsZSl9fX1cbmZ1bmN0aW9uIHVoYihhLGIsYyxkKXt2YXIgZTtlPUtDKFdELG9qZSwyNSxiKzEsMTUsMSk7dmhiKGUsYSxiLGMsZCk7cmV0dXJuIGV9XG5mdW5jdGlvbiBLQyhhLGIsYyxkLGUsZil7dmFyIGc7Zz1MQyhlLGQpO2UhPTEwJiZPQyhHQyhhLGYpLGIsYyxlLGcpO3JldHVybiBnfVxuZnVuY3Rpb24gYllkKGEsYixjLGQpeyEhYyYmKGQ9Yy5naChiLGJMZChjLlRnKCksYS5jLkxqKCkpLG51bGwsZCkpO3JldHVybiBkfVxuZnVuY3Rpb24gY1lkKGEsYixjLGQpeyEhYyYmKGQ9Yy5paChiLGJMZChjLlRnKCksYS5jLkxqKCkpLG51bGwsZCkpO3JldHVybiBkfVxuZnVuY3Rpb24gS05iKGEsYixjKXtCRChhLmIsNjUpO0JEKGEuYiw2NSk7QkQoYS5iLDY1KTtIa2IoYS5hLG5ldyBUTmIoYyxiLGEpKX1cbmZ1bmN0aW9uIEFDYihhLGIsYyl7aWYoYTwwfHxiPmN8fGI8YSl7dGhyb3cgdmJiKG5ldyBYZmIoeGtlK2EremtlK2Irb2tlK2MpKX19XG5mdW5jdGlvbiB6Q2IoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgWmRiKCdVbmFibGUgdG8gYWRkIGVsZW1lbnQgdG8gcXVldWUnKSl9fVxuZnVuY3Rpb24gVnpiKGEpe2lmKCFhKXt0aGlzLmM9bnVsbDt0aGlzLmI9bmV3IFJrYn1lbHNle3RoaXMuYz1hO3RoaXMuYj1udWxsfX1cbmZ1bmN0aW9uIGV4YihhLGIpe3BqYi5jYWxsKHRoaXMsYSxiKTt0aGlzLmE9S0MoZEwsemllLDQzNiwyLDAsMSk7dGhpcy5iPXRydWV9XG5mdW5jdGlvbiBfcmIoYSl7V2hiLmNhbGwodGhpcyxhLDApO1RyYih0aGlzKTt0aGlzLmQuYj10aGlzLmQ7dGhpcy5kLmE9dGhpcy5kfVxuZnVuY3Rpb24gVlJjKGEpe3ZhciBiO2I9YS5iO2lmKGIuYj09MCl7cmV0dXJuIG51bGx9cmV0dXJuIEJEKFV0KGIsMCksMTg4KS5ifVxuZnVuY3Rpb24gS3diKGEsYil7dmFyIGM7Yz1uZXcgZnhiO2MuYz10cnVlO2MuZD1iLmRkKCk7cmV0dXJuIEx3YihhLGIuY2QoKSxjKX1cbmZ1bmN0aW9uIGJCKGEsYil7dmFyIGM7Yz1hLnEuZ2V0SG91cnMoKSsoYi8zNjAwfDApO2EucS5zZXRTZWNvbmRzKGIpO1lBKGEsYyl9XG5mdW5jdGlvbiB6R2MoYSxiLGMpe3ZhciBkO2Q9YS5iW2MuYy5wXVtjLnBdO2QuYis9Yi5iO2QuYys9Yi5jO2QuYSs9Yi5hOysrZC5hfVxuZnVuY3Rpb24gUzZjKGEsYil7dmFyIGMsZDtjPWEuYS1iLmE7ZD1hLmItYi5iO3JldHVybiAkd25kLk1hdGguc3FydChjKmMrZCpkKX1cbmZ1bmN0aW9uIElwYygpe0lwYz1jY2I7R3BjPW5ldyBKcGMoJ1FVQURSQVRJQycsMCk7SHBjPW5ldyBKcGMoJ1NDQU5MSU5FJywxKX1cbmZ1bmN0aW9uIGhDYygpe2hDYz1jY2I7Z0NjPWMzYyhlM2MobmV3IGozYywocVViKCksbFViKSwoUzhiKCksbjhiKSkscFViLEo4Yil9XG5mdW5jdGlvbiBsOGMoKXtpOGMoKTtyZXR1cm4gT0MoR0MocjEsMSksS2llLDI5MSwwLFtoOGMsZzhjLGY4YyxkOGMsYzhjLGU4Y10pfVxuZnVuY3Rpb24gSTdjKCl7RjdjKCk7cmV0dXJuIE9DKEdDKG8xLDEpLEtpZSwyNDgsMCxbejdjLEM3YyxEN2MsRTdjLEE3YyxCN2NdKX1cbmZ1bmN0aW9uIERwYygpe0FwYygpO3JldHVybiBPQyhHQyhFVywxKSxLaWUsMjI3LDAsW3dwYyx5cGMsdnBjLHhwYyx6cGMsdXBjXSl9XG5mdW5jdGlvbiBCcmMoKXt5cmMoKTtyZXR1cm4gT0MoR0MoT1csMSksS2llLDI3NSwwLFt3cmMsdHJjLHhyYyx2cmMsdXJjLHJyY10pfVxuZnVuY3Rpb24gb3JjKCl7bHJjKCk7cmV0dXJuIE9DKEdDKE5XLDEpLEtpZSwyNzQsMCxbaXJjLGhyYyxrcmMsZ3JjLGpyYyxmcmNdKX1cbmZ1bmN0aW9uIHJ6Yygpe2x6YygpO3JldHVybiBPQyhHQyhZVywxKSxLaWUsMzEzLDAsW2p6YyxoemMsZnpjLGd6YyxremMsaXpjXSl9XG5mdW5jdGlvbiBXcWMoKXtTcWMoKTtyZXR1cm4gT0MoR0MoTFcsMSksS2llLDI3NiwwLFtOcWMsTXFjLFBxYyxPcWMsUnFjLFFxY10pfVxuZnVuY3Rpb24gdVNjKCl7cVNjKCk7cmV0dXJuIE9DKEdDKHQkLDEpLEtpZSwzMjcsMCxbcFNjLGxTYyxuU2MsbVNjLG9TYyxrU2NdKX1cbmZ1bmN0aW9uIHdjZCgpe3JjZCgpO3JldHVybiBPQyhHQyhFMSwxKSxLaWUsMjczLDAsW3BjZCxuY2Qsb2NkLG1jZCxsY2QscWNkXSl9XG5mdW5jdGlvbiBQYWQoKXtNYWQoKTtyZXR1cm4gT0MoR0ModzEsMSksS2llLDMxMiwwLFtLYWQsSWFkLExhZCxHYWQsSmFkLEhhZF0pfVxuZnVuY3Rpb24gbTBiKCl7ajBiKCk7cmV0dXJuIE9DKEdDKE5RLDEpLEtpZSwyNjcsMCxbaDBiLGcwYixlMGIsaTBiLGYwYixkMGJdKX1cbmZ1bmN0aW9uIG1pYihhKXt5Q2IoISFhLmMpO3hwYihhLmUsYSk7YS5jLlFiKCk7YS5jPW51bGw7YS5iPWtpYihhKTt5cGIoYS5lLGEpfVxuZnVuY3Rpb24gdHNiKGEpe3hwYihhLmMuYS5lLGEpO3NDYihhLmIhPWEuYy5hLmQpO2EuYT1hLmI7YS5iPWEuYi5hO3JldHVybiBhLmF9XG5mdW5jdGlvbiBrU2QoYSl7dmFyIGI7aWYoIWEuYSYmYS5iIT0tMSl7Yj1hLmMuVGcoKTthLmE9WEtkKGIsYS5iKX1yZXR1cm4gYS5hfVxuZnVuY3Rpb24gd3RkKGEsYil7aWYoYS5oaSgpJiZhLkhjKGIpKXtyZXR1cm4gZmFsc2V9ZWxzZXthLlloKGIpO3JldHVybiB0cnVlfX1cbmZ1bmN0aW9uICRIYihhLGIpe3l0YihiLCdIb3Jpem9udGFsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCcpO2EuYj1iO3JldHVybiBhfVxuZnVuY3Rpb24gTGZlKGEsYixjKXt3ZmUoKTt2YXIgZDtkPUtmZShhLGIpO2MmJiEhZCYmTmZlKGEpJiYoZD1udWxsKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHZYYihhLGIsYyl7dmFyIGQsZTtmb3IoZT1hLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMzcpO3VYYihkLGIsYyl9fVxuZnVuY3Rpb24gdFhiKGEsYil7dmFyIGMsZDtmb3IoZD1iLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMzcpO3NYYihhLGMsMCwwKX19XG5mdW5jdGlvbiBvamMoYSxiLGMpe3ZhciBkO2EuZFtiLmddPWM7ZD1hLmcuYztkW2IuZ109JHduZC5NYXRoLm1heChkW2IuZ10sYysxKX1cbmZ1bmN0aW9uIEtaYyhhLGIpe3ZhciBjLGQsZTtlPWEucjtkPWEuZDtjPU1aYyhhLGIsdHJ1ZSk7cmV0dXJuIGMuYiE9ZXx8Yy5hIT1kfVxuZnVuY3Rpb24gSmpjKGEsYil7VnJiKGEuZSxiKXx8WHJiKGEuZSxiLG5ldyBQamMoYikpO3JldHVybiBCRChXcmIoYS5lLGIpLDExMyl9XG5mdW5jdGlvbiBCeWIoYSxiLGMsZCl7dUNiKGEpO3VDYihiKTt1Q2IoYyk7dUNiKGQpO3JldHVybiBuZXcgTHliKGEsYixuZXcgVnhiKX1cbmZ1bmN0aW9uIGRJZChhLGIsYyxkKXt0aGlzLnJqKCk7dGhpcy5hPWI7dGhpcy5iPWE7dGhpcy5jPW5ldyBZNWQodGhpcyxiLGMsZCl9XG5mdW5jdGlvbiBvU2QoYSxiLGMsZCxlLGYpe214ZC5jYWxsKHRoaXMsYixkLGUsZik7alNkKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1jfVxuZnVuY3Rpb24gRVNkKGEsYixjLGQsZSxmKXtteGQuY2FsbCh0aGlzLGIsZCxlLGYpO2pTZCh0aGlzKTt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIEJxZChhLGIsYyl7dmFyIGQsZSxmO2Q9YUMoYSxjKTtlPW51bGw7ISFkJiYoZT1hcWQoZCkpO2Y9ZTtWcWQoYixjLGYpfVxuZnVuY3Rpb24gQ3FkKGEsYixjKXt2YXIgZCxlLGY7ZD1hQyhhLGMpO2U9bnVsbDshIWQmJihlPWFxZChkKSk7Zj1lO1ZxZChiLGMsZil9XG5mdW5jdGlvbiB2MWQoYSxiLGMpe3ZhciBkLGU7ZT0oZD1uVWQoYS5iLGIpLGQpO3JldHVybiAhZT9udWxsOlYxZChwMWQoYSxlKSxjKX1cbmZ1bmN0aW9uIGdpZChhLGIpe3ZhciBjO3JldHVybiBjPWEuWWcoYiksYz49MD9hLl9nKGMsdHJ1ZSx0cnVlKTpzaWQoYSxiLHRydWUpfVxuZnVuY3Rpb24gczZiKGEsYil7cmV0dXJuIEtkYihFZGIoRUQodk5iKGEsKHd0YygpLGh0YykpKSksRWRiKEVEKHZOYihiLGh0YykpKSl9XG5mdW5jdGlvbiBwVWMoKXtwVWM9Y2NiO29VYz1iM2MoYjNjKGczYyhuZXcgajNjLCh5UmMoKSx2UmMpKSwocVNjKCkscFNjKSksbFNjKX1cbmZ1bmN0aW9uIElIYyhhLGIsYyl7dmFyIGQ7ZD1TSGMoYSxiLGMpO2EuYj1uZXcgQkhjKGQuYy5sZW5ndGgpO3JldHVybiBLSGMoYSxkKX1cbmZ1bmN0aW9uIHFoZShhKXtpZihhLmI8PTApdGhyb3cgdmJiKG5ldyB1dGIpOy0tYS5iO2EuYS09YS5jLmM7cmV0dXJuIG1lYihhLmEpfVxuZnVuY3Rpb24gcHRkKGEpe3ZhciBiO2lmKCFhLmEpe3Rocm93IHZiYihuZXcgdnRiKX1iPWEuYTthLmE9WG9kKGEuYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBkQmIoYSl7d2hpbGUoIWEuYSl7aWYoIUhCYihhLmMsbmV3IGhCYihhKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiB2cihhKXt2YXIgYjtRYihhKTtpZihKRChhLDE5OCkpe2I9QkQoYSwxOTgpO3JldHVybiBifXJldHVybiBuZXcgd3IoYSl9XG5mdW5jdGlvbiByM2MoYSl7cDNjKCk7QkQoYS5XZSgoWTljKCkseDljKSksMTc0KS5GYygocmNkKCksb2NkKSk7YS5ZZSh3OWMsbnVsbCl9XG5mdW5jdGlvbiBwM2MoKXtwM2M9Y2NiO20zYz1uZXcgdjNjO28zYz1uZXcgeDNjO24zYz1tbigoWTljKCksdzljKSxtM2MsYjljLG8zYyl9XG5mdW5jdGlvbiBmV2MoKXtmV2M9Y2NiO2RXYz1uZXcgaFdjKCdMRUFGX05VTUJFUicsMCk7ZVdjPW5ldyBoV2MoJ05PREVfU0laRScsMSl9XG5mdW5jdGlvbiBVTWMoYSxiLGMpe2EuYT1iO2EuYz1jO2EuYi5hLiRiKCk7T3NiKGEuZCk7YS5lLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSl9XG5mdW5jdGlvbiB5SGMoYSl7YS5hPUtDKFdELG9qZSwyNSxhLmIrMSwxNSwxKTthLmM9S0MoV0Qsb2plLDI1LGEuYiwxNSwxKTthLmQ9MH1cbmZ1bmN0aW9uIE1XYihhLGIpe2lmKGEuYS51ZShiLmQsYS5iKT4wKXtFa2IoYS5jLG5ldyBkV2IoYi5jLGIuZCxhLmQpKTthLmI9Yi5kfX1cbmZ1bmN0aW9uIG51ZChhLGIpe2lmKGEuZz09bnVsbHx8Yj49YS5pKXRocm93IHZiYihuZXcgJHpkKGIsYS5pKSk7cmV0dXJuIGEuZ1tiXX1cbmZ1bmN0aW9uIHBPZChhLGIsYyl7SXRkKGEsYyk7aWYoYyE9bnVsbCYmIWEud2ooYykpe3Rocm93IHZiYihuZXcgdGNiKX1yZXR1cm4gY31cbmZ1bmN0aW9uIEtMZChhKXt2YXIgYjtpZihhLkVrKCkpe2ZvcihiPWEuaS0xO2I+PTA7LS1iKXtxdWQoYSxiKX19cmV0dXJuIHd1ZChhKX1cbmZ1bmN0aW9uIEJ3YihhKXt2YXIgYixjO2lmKCFhLmIpe3JldHVybiBudWxsfWM9YS5iO3doaWxlKGI9Yy5hWzBdKXtjPWJ9cmV0dXJuIGN9XG5mdW5jdGlvbiB1bGIoYSxiKXt2YXIgYyxkO3BDYihiKTtyZXR1cm4gYz0oZD1hLnNsaWNlKDAsYiksUEMoZCxhKSksYy5sZW5ndGg9YixjfVxuZnVuY3Rpb24gS2xiKGEsYixjLGQpe3ZhciBlO2Q9KGlwYigpLCFkP2ZwYjpkKTtlPWEuc2xpY2UoYixjKTtMbGIoZSxhLGIsYywtYixkKX1cbmZ1bmN0aW9uIGJpZChhLGIsYyxkLGUpe3JldHVybiBiPDA/c2lkKGEsYyxkKTpCRChjLDY2KS5OaigpLlBqKGEsYS55aCgpLGIsZCxlKX1cbmZ1bmN0aW9uIGhaZChhKXtpZihKRChhLDE3Mikpe3JldHVybiAnJytCRChhLDE3MikuYX1yZXR1cm4gYT09bnVsbD9udWxsOmZjYihhKX1cbmZ1bmN0aW9uIGlaZChhKXtpZihKRChhLDE3Mikpe3JldHVybiAnJytCRChhLDE3MikuYX1yZXR1cm4gYT09bnVsbD9udWxsOmZjYihhKX1cbmZ1bmN0aW9uIG5EYihhLGIpe2lmKGIuYSl7dGhyb3cgdmJiKG5ldyBoeihIa2UpKX1RcWIoYS5hLGIpO2IuYT1hOyFhLmomJihhLmo9Yil9XG5mdW5jdGlvbiBxQmIoYSxiKXtudmIuY2FsbCh0aGlzLGIucmQoKSxiLnFkKCkmLTE2NDQ5KTt1Q2IoYSk7dGhpcy5hPWE7dGhpcy5jPWJ9XG5mdW5jdGlvbiBUaShhLGIpe3ZhciBjLGQ7ZD1iL2EuYy5IZCgpLmdjKCl8MDtjPWIlYS5jLkhkKCkuZ2MoKTtyZXR1cm4gTWkoYSxkLGMpfVxuZnVuY3Rpb24gTkhiKCl7TkhiPWNjYjtMSGI9bmV3IE9IYihqbGUsMCk7S0hiPW5ldyBPSGIoZ2xlLDEpO01IYj1uZXcgT0hiKGtsZSwyKX1cbmZ1bmN0aW9uIGx4Yigpe2x4Yj1jY2I7aHhiPW5ldyBteGIoJ0FsbCcsMCk7aXhiPW5ldyByeGI7anhiPW5ldyB0eGI7a3hiPW5ldyB3eGJ9XG5mdW5jdGlvbiB6eGIoKXt6eGI9Y2NiO3l4Yj1hcygobHhiKCksT0MoR0MoaUwsMSksS2llLDI5NywwLFtoeGIsaXhiLGp4YixreGJdKSkpfVxuZnVuY3Rpb24gdVdiKCl7dVdiPWNjYjt0V2I9YXMoKGxXYigpLE9DKEdDKFNQLDEpLEtpZSw0MDUsMCxbaFdiLGtXYixpV2IsaldiXSkpKX1cbmZ1bmN0aW9uIEFMYigpe0FMYj1jY2I7ekxiPWFzKCh2TGIoKSxPQyhHQyhQTiwxKSxLaWUsNDA2LDAsW3VMYixyTGIsc0xiLHRMYl0pKSl9XG5mdW5jdGlvbiBXTWIoKXtXTWI9Y2NiO1ZNYj1hcygoUk1iKCksT0MoR0Moak8sMSksS2llLDMyMywwLFtPTWIsTk1iLFBNYixRTWJdKSkpfVxuZnVuY3Rpb24gV09iKCl7V09iPWNjYjtWT2I9YXMoKFJPYigpLE9DKEdDKENPLDEpLEtpZSwzOTQsMCxbT09iLE5PYixQT2IsUU9iXSkpKX1cbmZ1bmN0aW9uIEdSYygpe0dSYz1jY2I7RlJjPWFzKCh5UmMoKSxPQyhHQyhoJCwxKSxLaWUsMzkzLDAsW3VSYyx2UmMsd1JjLHhSY10pKSl9XG5mdW5jdGlvbiBtYmMoKXttYmM9Y2NiO2xiYz1hcygoZ2JjKCksT0MoR0MoVlMsMSksS2llLDM2MCwwLFtmYmMsZGJjLGViYyxjYmNdKSkpfVxuZnVuY3Rpb24gb1hjKCl7b1hjPWNjYjtuWGM9YXMoKGlYYygpLE9DKEdDKGFfLDEpLEtpZSwzNDAsMCxbaFhjLGZYYyxnWGMsZVhjXSkpKX1cbmZ1bmN0aW9uIEZqYygpe0ZqYz1jY2I7RWpjPWFzKChBamMoKSxPQyhHQyhtViwxKSxLaWUsNDExLDAsW3dqYyx4amMseWpjLHpqY10pKSl9XG5mdW5jdGlvbiBQemMoKXtQemM9Y2NiO096Yz1hcygoSXpjKCksT0MoR0MoJFcsMSksS2llLDE5NywwLFtHemMsSHpjLEZ6YyxFemNdKSkpfVxuZnVuY3Rpb24gdWdkKCl7dWdkPWNjYjt0Z2Q9YXMoKHBnZCgpLE9DKEdDKGsyLDEpLEtpZSwzOTYsMCxbbWdkLG5nZCxsZ2Qsb2dkXSkpKX1cbmZ1bmN0aW9uIHhiZCgpe3hiZD1jY2I7d2JkPWFzKChyYmQoKSxPQyhHQyhBMSwxKSxLaWUsMjg1LDAsW3FiZCxuYmQsb2JkLHBiZF0pKSl9XG5mdW5jdGlvbiBGYWQoKXtGYWQ9Y2NiO0VhZD1hcygoQWFkKCksT0MoR0ModjEsMSksS2llLDIxOCwwLFt6YWQseGFkLHdhZCx5YWRdKSkpfVxuZnVuY3Rpb24gSWVkKCl7SWVkPWNjYjtIZWQ9YXMoKERlZCgpLE9DKEdDKE8xLDEpLEtpZSwzMTEsMCxbQ2VkLHplZCxCZWQsQWVkXSkpKX1cbmZ1bmN0aW9uIHlkZCgpe3lkZD1jY2I7eGRkPWFzKCh0ZGQoKSxPQyhHQyhJMSwxKSxLaWUsMzc0LDAsW3JkZCxzZGQscWRkLHBkZF0pKSl9XG5mdW5jdGlvbiBBOWQoKXtBOWQ9Y2NiO1NtZCgpO3g5ZD1QamU7dzlkPVFqZTt6OWQ9bmV3IE5kYihQamUpO3k5ZD1uZXcgTmRiKFFqZSl9XG5mdW5jdGlvbiBfcWMoKXtfcWM9Y2NiOyRxYz1uZXcgYXJjKGFuZSwwKTtacWM9bmV3IGFyYygnSU1QUk9WRV9TVFJBSUdIVE5FU1MnLDEpfVxuZnVuY3Rpb24gZUljKGEsYil7RkhjKCk7cmV0dXJuIEVrYihhLG5ldyB2Z2QoYixtZWIoYi5lLmMubGVuZ3RoK2IuZy5jLmxlbmd0aCkpKX1cbmZ1bmN0aW9uIGdJYyhhLGIpe0ZIYygpO3JldHVybiBFa2IoYSxuZXcgdmdkKGIsbWViKGIuZS5jLmxlbmd0aCtiLmcuYy5sZW5ndGgpKSl9XG5mdW5jdGlvbiBQQyhhLGIpe0hDKGIpIT0xMCYmT0MocmIoYiksYi5obSxiLl9fZWxlbWVudFR5cGVJZCQsSEMoYiksYSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBMa2IoYSxiKXt2YXIgYztjPUprYihhLGIsMCk7aWYoYz09LTEpe3JldHVybiBmYWxzZX1La2IoYSxjKTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIFpyYihhLGIpe3ZhciBjO2M9QkQoVGhiKGEuZSxiKSwzODcpO2lmKGMpe2pzYihjKTtyZXR1cm4gYy5lfXJldHVybiBudWxsfVxuZnVuY3Rpb24gSmJiKGEpe3ZhciBiO2lmKEZiYihhKSl7Yj0wLWE7aWYoIWlzTmFOKGIpKXtyZXR1cm4gYn19cmV0dXJuIHpiYihoRChhKSl9XG5mdW5jdGlvbiBKa2IoYSxiLGMpe2Zvcig7YzxhLmMubGVuZ3RoOysrYyl7aWYod3RiKGIsYS5jW2NdKSl7cmV0dXJuIGN9fXJldHVybiAtMX1cbmZ1bmN0aW9uIFNBYihhLGIsYyl7dmFyIGQ7VHpiKGEpO2Q9bmV3IE5CYjtkLmE9YjthLmEuTmIobmV3IFZCYihkLGMpKTtyZXR1cm4gZC5hfVxuZnVuY3Rpb24gYUFiKGEpe3ZhciBiO1R6YihhKTtiPUtDKFVELFZqZSwyNSwwLDE1LDEpO191YihhLmEsbmV3IGtBYihiKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBhamMoYSl7dmFyIGIsYztjPUJEKElrYihhLmosMCksMTEpO2I9QkQodk5iKGMsKHd0YygpLCRzYykpLDExKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHljKGEpe3ZhciBiO2lmKCF4YyhhKSl7dGhyb3cgdmJiKG5ldyB1dGIpfWEuZT0xO2I9YS5kO2EuZD1udWxsO3JldHVybiBifVxuZnVuY3Rpb24gd3UoYSxiKXt2YXIgYzt0aGlzLmY9YTt0aGlzLmI9YjtjPUJEKE9oYihhLmIsYiksMjgzKTt0aGlzLmM9IWM/bnVsbDpjLmJ9XG5mdW5jdGlvbiBZZ2MoKXtIZ2MoKTt0aGlzLmI9bmV3IExxYjt0aGlzLmY9bmV3IExxYjt0aGlzLmc9bmV3IExxYjt0aGlzLmU9bmV3IExxYn1cbmZ1bmN0aW9uIFRuYyhhLGIpe3RoaXMuYT1LQyhPUSxrbmUsMTAsYS5hLmMubGVuZ3RoLDAsMSk7UWtiKGEuYSx0aGlzLmEpO3RoaXMuYj1ifVxuZnVuY3Rpb24gem9jKGEpe3ZhciBiO2ZvcihiPWEucCsxO2I8YS5jLmEuYy5sZW5ndGg7KytiKXstLUJEKElrYihhLmMuYSxiKSwxMCkucH19XG5mdW5jdGlvbiBSd2QoYSl7dmFyIGI7Yj1hLkFpKCk7YiE9bnVsbCYmYS5kIT0tMSYmQkQoYiw5MikuTmcoYSk7ISFhLmkmJmEuaS5GaSgpfVxuZnVuY3Rpb24gckZkKGEpe1B5KHRoaXMpO3RoaXMuZz0hYT9udWxsOld5KGEsYS4kZCgpKTt0aGlzLmY9YTtSeSh0aGlzKTt0aGlzLl9kKCl9XG5mdW5jdGlvbiBwU2QoYSxiLGMsZCxlLGYsZyl7bnhkLmNhbGwodGhpcyxiLGQsZSxmLGcpO2pTZCh0aGlzKTt0aGlzLmM9YTt0aGlzLmI9Y31cbmZ1bmN0aW9uIEF5YihhLGIsYyxkLGUpe3VDYihhKTt1Q2IoYik7dUNiKGMpO3VDYihkKTt1Q2IoZSk7cmV0dXJuIG5ldyBMeWIoYSxiLGQpfVxuZnVuY3Rpb24gQjJjKGEsYil7aWYoYjwwKXt0aHJvdyB2YmIobmV3IHFjYihlc2UrYikpfUEyYyhhLGIrMSk7cmV0dXJuIElrYihhLmosYil9XG5mdW5jdGlvbiBPYihhLGIsYyxkKXtpZighYSl7dGhyb3cgdmJiKG5ldyBXZGIoaGMoYixPQyhHQyhTSSwxKSxVaGUsMSw1LFtjLGRdKSkpKX19XG5mdW5jdGlvbiBkRGIoYSxiKXtyZXR1cm4gd3RiKGIsSWtiKGEuZiwwKSl8fHd0YihiLElrYihhLmYsMSkpfHx3dGIoYixJa2IoYS5mLDIpKX1cbmZ1bmN0aW9uIGdoZChhLGIpe2VjZChCRChCRChhLmYsMzMpLldlKChZOWMoKSx0OWMpKSw5OCkpJiZOQ2QoWW9kKEJEKGEuZiwzMykpLGIpfVxuZnVuY3Rpb24gcDFkKGEsYil7dmFyIGMsZDtjPUJEKGIsNjc1KTtkPWMuT2goKTshZCYmYy5SaChkPW5ldyBZMWQoYSxiKSk7cmV0dXJuIGR9XG5mdW5jdGlvbiBxMWQoYSxiKXt2YXIgYyxkO2M9QkQoYiw2NzcpO2Q9Yy5waygpOyFkJiZjLnRrKGQ9bmV3IGoyZChhLGIpKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFFTZChhKXtpZighYS5iKXthLmI9bmV3IFVUZChhLGo1LGEpOyFhLmEmJihhLmE9bmV3IGZUZChhLGEpKX1yZXR1cm4gYS5ifVxuZnVuY3Rpb24geVRiKCl7eVRiPWNjYjt3VGI9bmV3IHpUYignWFknLDApO3ZUYj1uZXcgelRiKCdYJywxKTt4VGI9bmV3IHpUYignWScsMil9XG5mdW5jdGlvbiBFSWIoKXtFSWI9Y2NiO0RJYj1uZXcgRkliKCdUT1AnLDApO0NJYj1uZXcgRkliKGdsZSwxKTtCSWI9bmV3IEZJYihtbGUsMil9XG5mdW5jdGlvbiBlc2MoKXtlc2M9Y2NiO2NzYz1uZXcgZnNjKGFuZSwwKTtkc2M9bmV3IGZzYygnVE9QJywxKTtic2M9bmV3IGZzYyhtbGUsMil9XG5mdW5jdGlvbiBCQWMoKXtCQWM9Y2NiO3pBYz1uZXcgQ0FjKCdJTlBVVF9PUkRFUicsMCk7QUFjPW5ldyBDQWMoJ1BPUlRfREVHUkVFJywxKX1cbmZ1bmN0aW9uIHdEKCl7d0Q9Y2NiO3NEPVRDKEVqZSxFamUsNTI0Mjg3KTt0RD1UQygwLDAsR2plKTt1RD1SQygxKTtSQygyKTt2RD1SQygwKX1cbmZ1bmN0aW9uIFdEYyhhLGIsYyl7YS5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpOyREYyhhLGIsYyk7YS5hLmMubGVuZ3RoPT0wfHxURGMoYSxiKX1cbmZ1bmN0aW9uIHJmYihhKXt2YXIgYixjO2M9YS5sZW5ndGg7Yj1LQyhURCwkaWUsMjUsYywxNSwxKTtmZmIoYSwwLGMsYiwwKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEFpZChhKXt2YXIgYjtpZighYS5kaCgpKXtiPWFMZChhLlRnKCkpLWEuQWgoKTthLnBoKCkuYmsoYil9cmV0dXJuIGEuUGcoKX1cbmZ1bmN0aW9uIHhqZChhKXt2YXIgYjtiPUNEKEFqZChhLDMyKSk7aWYoYj09bnVsbCl7eWpkKGEpO2I9Q0QoQWpkKGEsMzIpKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGlpZChhLGIpe3ZhciBjO2M9YkxkKGEuZCxiKTtyZXR1cm4gYz49MD9maWQoYSxjLHRydWUsdHJ1ZSk6c2lkKGEsYix0cnVlKX1cbmZ1bmN0aW9uIHZnYyhhLGIpe3FnYygpO3ZhciBjLGQ7Yz11Z2MoYSk7ZD11Z2MoYik7cmV0dXJuICEhYyYmISFkJiYhb21iKGMuayxkLmspfVxuZnVuY3Rpb24gR3FkKGEsYil7ZGxkKGEsYj09bnVsbHx8TGRiKCh1Q2IoYiksYikpfHxpc05hTigodUNiKGIpLGIpKT8wOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gSHFkKGEsYil7ZWxkKGEsYj09bnVsbHx8TGRiKCh1Q2IoYiksYikpfHxpc05hTigodUNiKGIpLGIpKT8wOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gSXFkKGEsYil7Y2xkKGEsYj09bnVsbHx8TGRiKCh1Q2IoYiksYikpfHxpc05hTigodUNiKGIpLGIpKT8wOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gSnFkKGEsYil7YWxkKGEsYj09bnVsbHx8TGRiKCh1Q2IoYiksYikpfHxpc05hTigodUNiKGIpLGIpKT8wOih1Q2IoYiksYikpfVxuZnVuY3Rpb24gYWdkKGEpeyghdGhpcy5xPyhtbWIoKSxtbWIoKSxrbWIpOnRoaXMucSkuQWMoIWEucT8obW1iKCksbW1iKCksa21iKTphLnEpfVxuZnVuY3Rpb24gUzJkKGEsYil7cmV0dXJuIEpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MD9uZXcgczRkKGIsYSk6bmV3IHA0ZChiLGEpfVxuZnVuY3Rpb24gVTJkKGEsYil7cmV0dXJuIEpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MD9uZXcgczRkKGIsYSk6bmV3IHA0ZChiLGEpfVxuZnVuY3Rpb24gSU5iKGEsYil7SE5iPW5ldyB0T2I7Rk5iPWI7R05iPWE7QkQoR05iLmIsNjUpO0tOYihHTmIsSE5iLG51bGwpO0pOYihHTmIpfVxuZnVuY3Rpb24gdXVkKGEsYixjKXt2YXIgZDtkPWEuZ1tiXTttdWQoYSxiLGEub2koYixjKSk7YS5naShiLGMsZCk7YS5jaSgpO3JldHVybiBkfVxuZnVuY3Rpb24gRnRkKGEsYil7dmFyIGM7Yz1hLlhjKGIpO2lmKGM+PTApe2EuJGMoYyk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gWUlkKGEpe3ZhciBiO2lmKGEuZCE9YS5yKXtiPXdJZChhKTthLmU9ISFiJiZiLkNqKCk9PUJ2ZTthLmQ9Yn1yZXR1cm4gYS5lfVxuZnVuY3Rpb24gZnIoYSxiKXt2YXIgYztRYihhKTtRYihiKTtjPWZhbHNlO3doaWxlKGIuT2IoKSl7Yz1jfGEuRmMoYi5QYigpKX1yZXR1cm4gY31cbmZ1bmN0aW9uIFdyYihhLGIpe3ZhciBjO2M9QkQoT2hiKGEuZSxiKSwzODcpO2lmKGMpe1lyYihhLGMpO3JldHVybiBjLmV9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBVQShhKXt2YXIgYixjO2I9YS82MHwwO2M9YSU2MDtpZihjPT0wKXtyZXR1cm4gJycrYn1yZXR1cm4gJycrYisnOicrKCcnK2MpfVxuZnVuY3Rpb24gTEFiKGEsYil7dmFyIGMsZDtVemIoYSk7ZD1uZXcgSUJiKGIsYS5hKTtjPW5ldyBmQmIoZCk7cmV0dXJuIG5ldyBZQWIoYSxjKX1cbmZ1bmN0aW9uIHRCKGQsYSl7dmFyIGI9ZC5hW2FdO3ZhciBjPShyQygpLHFDKVt0eXBlb2YgYl07cmV0dXJuIGM/YyhiKTp4Qyh0eXBlb2YgYil9XG5mdW5jdGlvbiB5emMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBPaGU7Y2FzZSAxOnJldHVybiAtMTtkZWZhdWx0OnJldHVybiAwO319XG5mdW5jdGlvbiBvRChhKXtpZihlRChhLCh3RCgpLHZEKSk8MCl7cmV0dXJuIC1hRChoRChhKSl9cmV0dXJuIGEubCthLm0qSGplK2EuaCpJamV9XG5mdW5jdGlvbiBIQyhhKXtyZXR1cm4gYS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPT1udWxsPzEwOmEuX19lbGVtZW50VHlwZUNhdGVnb3J5JH1cbmZ1bmN0aW9uIGR1YihhKXt2YXIgYjtiPWEuYi5jLmxlbmd0aD09MD9udWxsOklrYihhLmIsMCk7YiE9bnVsbCYmZnViKGEsMCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiB1QShhLGIpe3doaWxlKGJbMF08YS5sZW5ndGgmJmhmYignIFxcdFxcclxcbicsd2ZiKGJmYihhLGJbMF0pKSk+PTApeysrYlswXX19XG5mdW5jdGlvbiBzZ2IoYSxiKXt0aGlzLmU9Yjt0aGlzLmE9dmdiKGEpO3RoaXMuYTw1ND8odGhpcy5mPVNiYihhKSk6KHRoaXMuYz1naGIoYSkpfVxuZnVuY3Rpb24gdmdlKGEsYixjLGQpe3dmZSgpO3hmZS5jYWxsKHRoaXMsMjYpO3RoaXMuYz1hO3RoaXMuYT1iO3RoaXMuZD1jO3RoaXMuYj1kfVxuZnVuY3Rpb24gRUEoYSxiLGMpe3ZhciBkLGU7ZD0xMDtmb3IoZT0wO2U8Yy0xO2UrKyl7YjxkJiYoYS5hKz0nMCcsYSk7ZCo9MTB9YS5hKz1ifVxuZnVuY3Rpb24gSGhlKGEsYil7dmFyIGM7Yz0wO3doaWxlKGEuZSE9YS5pLmdjKCkpe1FyZChiLER5ZChhKSxtZWIoYykpO2MhPU9oZSYmKytjfX1cbmZ1bmN0aW9uIHhIYyhhLGIpe3ZhciBjOysrYS5kOysrYS5jW2JdO2M9YisxO3doaWxlKGM8YS5hLmxlbmd0aCl7KythLmFbY107Yys9YyYtY319XG5mdW5jdGlvbiBRZ2MoYSxiKXt2YXIgYyxkLGU7ZT1iLmMuaTtjPUJEKE9oYihhLmYsZSksNTcpO2Q9Yy5kLmMtYy5lLmM7cDdjKGIuYSxkLDApfVxuZnVuY3Rpb24gU2NiKGEpe3ZhciBiLGM7Yj1hKzEyODtjPShVY2IoKSxUY2IpW2JdOyFjJiYoYz1UY2JbYl09bmV3IE1jYihhKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBlcyhhLGIpe3ZhciBjO3VDYihiKTtjPWFbJzonK2JdO25DYighIWMsT0MoR0MoU0ksMSksVWhlLDEsNSxbYl0pKTtyZXR1cm4gY31cbmZ1bmN0aW9uIE16KGEpe3ZhciBiLGM7aWYoYS5iKXtjPW51bGw7ZG97Yj1hLmI7YS5iPW51bGw7Yz1QeihiLGMpfXdoaWxlKGEuYik7YS5iPWN9fVxuZnVuY3Rpb24gTHooYSl7dmFyIGIsYztpZihhLmEpe2M9bnVsbDtkb3tiPWEuYTthLmE9bnVsbDtjPVB6KGIsYyl9d2hpbGUoYS5hKTthLmE9Y319XG5mdW5jdGlvbiBEcWIoYSl7dmFyIGI7KythLmE7Zm9yKGI9YS5jLmEubGVuZ3RoO2EuYTxiOysrYS5hKXtpZihhLmMuYlthLmFdKXtyZXR1cm59fX1cbmZ1bmN0aW9uIFM5YihhLGIpe3ZhciBjLGQ7ZD1iLmM7Zm9yKGM9ZCsxO2M8PWIuZjtjKyspe2EuYVtjXT5hLmFbZF0mJihkPWMpfXJldHVybiBkfVxuZnVuY3Rpb24gZmljKGEsYil7dmFyIGM7Yz1KeShhLmUuYyxiLmUuYyk7aWYoYz09MCl7cmV0dXJuIEtkYihhLmUuZCxiLmUuZCl9cmV0dXJuIGN9XG5mdW5jdGlvbiBPZ2IoYSxiKXtpZihiLmU9PTApe3JldHVybiBHZ2J9aWYoYS5lPT0wKXtyZXR1cm4gR2difXJldHVybiBEaGIoKSxFaGIoYSxiKX1cbmZ1bmN0aW9uIG5DYihhLGIpe2lmKCFhKXt0aHJvdyB2YmIobmV3IFdkYihEQ2IoJ0VudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAlcycsYikpKX19XG5mdW5jdGlvbiBBV2IoKXtBV2I9Y2NiO3hXYj1uZXcgWFdiO3lXYj1uZXcgX1diO3ZXYj1uZXcgZFhiO3dXYj1uZXcgaFhiO3pXYj1uZXcgbFhifVxuZnVuY3Rpb24gVUViKCl7VUViPWNjYjtTRWI9bmV3IFZFYignQllfU0laRScsMCk7VEViPW5ldyBWRWIoJ0JZX1NJWkVfQU5EX1NIQVBFJywxKX1cbmZ1bmN0aW9uIFhSYigpe1hSYj1jY2I7VlJiPW5ldyBZUmIoJ0VBREVTJywwKTtXUmI9bmV3IFlSYignRlJVQ0hURVJNQU5fUkVJTkdPTEQnLDEpfVxuZnVuY3Rpb24geHFjKCl7eHFjPWNjYjt2cWM9bmV3IHlxYygnUkVBRElOR19ESVJFQ1RJT04nLDApO3dxYz1uZXcgeXFjKCdST1RBVElPTicsMSl9XG5mdW5jdGlvbiB1cWMoKXt1cWM9Y2NiO3RxYz1hcygobXFjKCksT0MoR0MoSVcsMSksS2llLDMzNSwwLFtpcWMsaHFjLGtxYyxscWMsanFjXSkpKX1cbmZ1bmN0aW9uIGJBYygpe2JBYz1jY2I7YUFjPWFzKChWemMoKSxPQyhHQyhfVywxKSxLaWUsMzE1LDAsW1V6YyxSemMsU3pjLFF6YyxUemNdKSkpfVxuZnVuY3Rpb24gYmtjKCl7YmtjPWNjYjtha2M9YXMoKFhqYygpLE9DKEdDKHVWLDEpLEtpZSwzNjMsMCxbVGpjLFZqYyxXamMsVWpjLFNqY10pKSl9XG5mdW5jdGlvbiBIdGMoKXtIdGM9Y2NiO0d0Yz1hcygoQ3RjKCksT0MoR0MoVFcsMSksS2llLDE2MywwLFtCdGMseHRjLHl0Yyx6dGMsQXRjXSkpKX1cbmZ1bmN0aW9uIFNfYygpe1NfYz1jY2I7Ul9jPWFzKChOX2MoKSxPQyhHQyhRXywxKSxLaWUsMzE2LDAsW0lfYyxKX2MsTV9jLEtfYyxMX2NdKSkpfVxuZnVuY3Rpb24gUzVjKCl7UzVjPWNjYjtSNWM9YXMoKE41YygpLE9DKEdDKGUxLDEpLEtpZSwxNzUsMCxbTDVjLEs1YyxJNWMsTTVjLEo1Y10pKSl9XG5mdW5jdGlvbiBwJGMoKXtwJGM9Y2NiO28kYz1hcygoayRjKCksT0MoR0MoeV8sMSksS2llLDM1NSwwLFtnJGMsZiRjLGkkYyxoJGMsaiRjXSkpKX1cbmZ1bmN0aW9uIHZVYigpe3ZVYj1jY2I7dVViPWFzKChxVWIoKSxPQyhHQyh6UCwxKSxLaWUsMzU2LDAsW2xVYixtVWIsblViLG9VYixwVWJdKSkpfVxuZnVuY3Rpb24gbWFkKCl7bWFkPWNjYjtsYWQ9YXMoKGVhZCgpLE9DKEdDKHQxLDEpLEtpZSwxMDMsMCxbY2FkLGJhZCxhYWQsXzljLGRhZF0pKSl9XG5mdW5jdGlvbiBZYmQoKXtZYmQ9Y2NiO1hiZD1hcygoVGJkKCksT0MoR0MoQzEsMSksS2llLDI0OSwwLFtRYmQsU2JkLE9iZCxQYmQsUmJkXSkpKX1cbmZ1bmN0aW9uIGNkZCgpe2NkZD1jY2I7YmRkPWFzKChVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKSl9XG5mdW5jdGlvbiBfMWMoYSxiKXt2YXIgYztjPUJEKE9oYihhLmEsYiksMTM0KTtpZighYyl7Yz1uZXcgek5iO1JoYihhLmEsYixjKX1yZXR1cm4gY31cbmZ1bmN0aW9uIGhvYyhhKXt2YXIgYjtiPUJEKHZOYihhLCh3dGMoKSx1c2MpKSwzMDUpO2lmKGIpe3JldHVybiBiLmE9PWF9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gaW9jKGEpe3ZhciBiO2I9QkQodk5iKGEsKHd0YygpLHVzYykpLDMwNSk7aWYoYil7cmV0dXJuIGIuaT09YX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBKdWIoYSxiKXt1Q2IoYik7SXViKGEpO2lmKGEuZC5PYigpKXtiLnRkKGEuZC5QYigpKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBPeShhKXtpZih5YmIoYSxPaGUpPjApe3JldHVybiBPaGV9aWYoeWJiKGEsUmllKTwwKXtyZXR1cm4gUmllfXJldHVybiBUYmIoYSl9XG5mdW5jdGlvbiBDdihhKXtpZihhPDMpe1hqKGEsSGllKTtyZXR1cm4gYSsxfWlmKGE8SWllKXtyZXR1cm4gUUQoYS8wLjc1KzEpfXJldHVybiBPaGV9XG5mdW5jdGlvbiBYS2QoYSxiKXt2YXIgYztjPShhLmk9PW51bGwmJlRLZChhKSxhLmkpO3JldHVybiBiPj0wJiZiPGMubGVuZ3RoP2NbYl06bnVsbH1cbmZ1bmN0aW9uIGNDKGEsYixjKXt2YXIgZDtpZihiPT1udWxsKXt0aHJvdyB2YmIobmV3IEdlYil9ZD1hQyhhLGIpO2RDKGEsYixjKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIEVtYyhhKXthLmE+PS0wLjAxJiZhLmE8PXBsZSYmKGEuYT0wKTthLmI+PS0wLjAxJiZhLmI8PXBsZSYmKGEuYj0wKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHNmYihhLGIpe3JldHVybiBiPT0obnRiKCksbnRiKCksbXRiKT9hLnRvTG9jYWxlTG93ZXJDYXNlKCk6YS50b0xvd2VyQ2FzZSgpfVxuZnVuY3Rpb24gaWRiKGEpe3JldHVybiAoKGEuaSYyKSE9MD8naW50ZXJmYWNlICc6KGEuaSYxKSE9MD8nJzonY2xhc3MgJykrKGZkYihhKSxhLm8pfVxuZnVuY3Rpb24gUG5kKGEpe3ZhciBiLGM7Yz0oYj1uZXcgU1NkLGIpO3d0ZCgoIWEucSYmKGEucT1uZXcgY1VkKG41LGEsMTEsMTApKSxhLnEpLGMpfVxuZnVuY3Rpb24gUGRkKGEsYil7dmFyIGM7Yz1iPjA/Yi0xOmI7cmV0dXJuIFZkZChXZGQoWGRkKFlkZChuZXcgWmRkLGMpLGEubiksYS5qKSxhLmspfVxuZnVuY3Rpb24gdTJkKGEsYixjLGQpe3ZhciBlO2Euaj0tMTtReGQoYSxJMmQoYSxiLGMpLChRNmQoKSxlPUJEKGIsNjYpLk1qKCksZS5PayhkKSkpfVxuZnVuY3Rpb24gVldiKGEpe3RoaXMuZz1hO3RoaXMuZj1uZXcgUmtiO3RoaXMuYT0kd25kLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9XG5mdW5jdGlvbiBtRGIoYSl7dGhpcy5iPW5ldyBSa2I7dGhpcy5hPW5ldyBSa2I7dGhpcy5jPW5ldyBSa2I7dGhpcy5kPW5ldyBSa2I7dGhpcy5lPWF9XG5mdW5jdGlvbiBDbmMoYSxiKXt0aGlzLmE9bmV3IExxYjt0aGlzLmU9bmV3IExxYjt0aGlzLmI9KHh6YygpLHd6Yyk7dGhpcy5jPWE7dGhpcy5iPWJ9XG5mdW5jdGlvbiBiSWIoYSxiLGMpeyRHYi5jYWxsKHRoaXMpO1RIYih0aGlzKTt0aGlzLmE9YTt0aGlzLmM9Yzt0aGlzLmI9Yi5kO3RoaXMuZj1iLmV9XG5mdW5jdGlvbiB5ZChhKXt0aGlzLmQ9YTt0aGlzLmM9YS5jLnZjKCkuS2MoKTt0aGlzLmI9bnVsbDt0aGlzLmE9bnVsbDt0aGlzLmU9KGhzKCksZ3MpfVxuZnVuY3Rpb24genVkKGEpe2lmKGE8MCl7dGhyb3cgdmJiKG5ldyBXZGIoJ0lsbGVnYWwgQ2FwYWNpdHk6ICcrYSkpfXRoaXMuZz10aGlzLnJpKGEpfVxuZnVuY3Rpb24gYXZiKGEsYil7aWYoMD5hfHxhPmIpe3Rocm93IHZiYihuZXcgc2NiKCdmcm9tSW5kZXg6IDAsIHRvSW5kZXg6ICcrYStva2UrYikpfX1cbmZ1bmN0aW9uIEdzKGEpe3ZhciBiO2lmKGEuYT09YS5iLmEpe3Rocm93IHZiYihuZXcgdXRiKX1iPWEuYTthLmM9YjthLmE9YS5hLmU7cmV0dXJuIGJ9XG5mdW5jdGlvbiBac2IoYSl7dmFyIGI7eUNiKCEhYS5jKTtiPWEuYy5hO05zYihhLmQsYS5jKTthLmI9PWEuYz8oYS5iPWIpOi0tYS5hO2EuYz1udWxsfVxuZnVuY3Rpb24gVkFiKGEsYil7dmFyIGM7VXpiKGEpO2M9bmV3IGxCYihhLGEuYS5yZCgpLGEuYS5xZCgpfDQsYik7cmV0dXJuIG5ldyBZQWIoYSxjKX1cbmZ1bmN0aW9uIGtlKGEsYil7dmFyIGMsZDtjPUJEKEh2KGEuZCxiKSwxNCk7aWYoIWMpe3JldHVybiBudWxsfWQ9YjtyZXR1cm4gYS5lLnBjKGQsYyl9XG5mdW5jdGlvbiB4YWMoYSxiKXt2YXIgYyxkO2ZvcihkPWEuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSw3MCk7eU5iKGMsKHd0YygpLFNzYyksYil9fVxuZnVuY3Rpb24gdDliKGEpe3ZhciBiO2I9RWRiKEVEKHZOYihhLChOeWMoKSxad2MpKSkpO2lmKGI8MCl7Yj0wO3lOYihhLFp3YyxiKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGlmYyhhLGIsYyl7dmFyIGQ7ZD0kd25kLk1hdGgubWF4KDAsYS5iLzItMC41KTtjZmMoYyxkLDEpO0VrYihiLG5ldyByZmMoYyxkKSl9XG5mdW5jdGlvbiBOTWMoYSxiLGMpe3ZhciBkO2Q9YS5hLmVbQkQoYi5hLDEwKS5wXS1hLmEuZVtCRChjLmEsMTApLnBdO3JldHVybiBRRChFZWIoZCkpfVxuZnVuY3Rpb24gaVpiKGEsYixjLGQsZSxmKXt2YXIgZztnPWtaYihkKTtRWmIoZyxlKTtSWmIoZyxmKTtSYyhhLmEsZCxuZXcgQlpiKGcsYixjLmYpKX1cbmZ1bmN0aW9uIEJpZChhLGIpe3ZhciBjO2M9WUtkKGEuVGcoKSxiKTtpZighYyl7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2IrbHRlKSl9cmV0dXJuIGN9XG5mdW5jdGlvbiBudGQoYSxiKXt2YXIgYztjPWE7d2hpbGUoWG9kKGMpKXtjPVhvZChjKTtpZihjPT1iKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gVXcoYSxiKXt2YXIgYyxkLGU7ZD1iLmEuY2QoKTtjPUJEKGIuYS5kZCgpLDE0KS5nYygpO2ZvcihlPTA7ZTxjO2UrKyl7YS50ZChkKX19XG5mdW5jdGlvbiBIa2IoYSxiKXt2YXIgYyxkLGUsZjt1Q2IoYik7Zm9yKGQ9YS5jLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtiLnRkKGMpfX1cbmZ1bmN0aW9uIE5zYihhLGIpe3ZhciBjO2M9Yi5jO2IuYS5iPWIuYjtiLmIuYT1iLmE7Yi5hPWIuYj1udWxsO2IuYz1udWxsOy0tYS5iO3JldHVybiBjfVxuZnVuY3Rpb24gd3FiKGEsYil7aWYoISFiJiZhLmJbYi5nXT09Yil7TkMoYS5iLGIuZyxudWxsKTstLWEuYztyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBsbyhhLGIpe3JldHVybiAhIXZvKGEsYixUYmIoSWJiKEVpZSxrZWIoVGJiKEliYihiPT1udWxsPzA6dGIoYiksRmllKSksMTUpKSkpfVxuZnVuY3Rpb24gdyRiKGEsYil7ZWNkKEJEKHZOYihCRChhLmUsMTApLChOeWMoKSxWeGMpKSw5OCkpJiYobW1iKCksT2tiKEJEKGEuZSwxMCkuaixiKSl9XG5mdW5jdGlvbiBUSGIoYSl7YS5iPShOSGIoKSxLSGIpO2EuZj0oRUliKCksQ0liKTthLmQ9KFhqKDIsSmllKSxuZXcgU2tiKDIpKTthLmU9bmV3IGQ3Y31cbmZ1bmN0aW9uIGdIYigpe2dIYj1jY2I7ZEhiPW5ldyBoSGIoJ0JFR0lOJywwKTtlSGI9bmV3IGhIYihnbGUsMSk7ZkhiPW5ldyBoSGIoJ0VORCcsMil9XG5mdW5jdGlvbiBxYWQoKXtxYWQ9Y2NiO25hZD1uZXcgcmFkKGdsZSwwKTtvYWQ9bmV3IHJhZCgnSEVBRCcsMSk7cGFkPW5ldyByYWQoJ1RBSUwnLDIpfVxuZnVuY3Rpb24gRnNkKCl7Q3NkKCk7cmV0dXJuIE9DKEdDKE8zLDEpLEtpZSwyMzcsMCxbQnNkLHlzZCx6c2QseHNkLEFzZCx2c2QsdXNkLHdzZF0pfVxuZnVuY3Rpb24gYzZjKCl7XzVjKCk7cmV0dXJuIE9DKEdDKGYxLDEpLEtpZSwyNzcsMCxbJDVjLFQ1YyxYNWMsWjVjLFU1YyxWNWMsVzVjLFk1Y10pfVxuZnVuY3Rpb24gRGxjKCl7QWxjKCk7cmV0dXJuIE9DKEdDKEtWLDEpLEtpZSwyNzAsMCxbdGxjLHdsYyxzbGMsemxjLHZsYyx1bGMseWxjLHhsY10pfVxuZnVuY3Rpb24gbkFjKCl7a0FjKCk7cmV0dXJuIE9DKEdDKGFYLDEpLEtpZSwyNjAsMCxbaUFjLGRBYyxnQWMsZUFjLGZBYyxjQWMsaEFjLGpBY10pfVxuZnVuY3Rpb24ga2NkKCl7a2NkPWNjYjtqY2Q9YXMoKGRjZCgpLE9DKEdDKEQxLDEpLEtpZSw5OCwwLFtjY2QsYmNkLGFjZCxaYmQsX2JkLCRiZF0pKSl9XG5mdW5jdGlvbiB0SGIoKXt0SGI9Y2NiO3NIYj0oZ0hiKCksT0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pKS5sZW5ndGg7ckhiPXNIYn1cbmZ1bmN0aW9uIHdlZChhKXt0aGlzLmI9KFFiKGEpLG5ldyBUa2IoYSkpO3RoaXMuYT1uZXcgUmtiO3RoaXMuZD1uZXcgUmtiO3RoaXMuZT1uZXcgZDdjfVxuZnVuY3Rpb24gVzZjKGEpe3ZhciBiO2I9JHduZC5NYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKTtpZihiPjApe2EuYS89YjthLmIvPWJ9cmV0dXJuIGF9XG5mdW5jdGlvbiBiS2QoYSl7dmFyIGI7aWYoYS53KXtyZXR1cm4gYS53fWVsc2V7Yj1jS2QoYSk7ISFiJiYhYi5raCgpJiYoYS53PWIpO3JldHVybiBifX1cbmZ1bmN0aW9uIGdaZChhKXt2YXIgYjtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH1lbHNle2I9QkQoYSwxOTApO3JldHVybiBVbWQoYixiLmxlbmd0aCl9fVxuZnVuY3Rpb24gcXVkKGEsYil7aWYoYS5nPT1udWxsfHxiPj1hLmkpdGhyb3cgdmJiKG5ldyAkemQoYixhLmkpKTtyZXR1cm4gYS5saShiLGEuZ1tiXSl9XG5mdW5jdGlvbiBNbWMoYSl7dmFyIGIsYztiPWEuYS5kLmo7Yz1hLmMuZC5qO3doaWxlKGIhPWMpe3JxYihhLmIsYik7Yj1YY2QoYil9cnFiKGEuYixiKX1cbmZ1bmN0aW9uIEptYyhhKXt2YXIgYjtmb3IoYj0wO2I8YS5jLmxlbmd0aDtiKyspeyh0Q2IoYixhLmMubGVuZ3RoKSxCRChhLmNbYl0sMTEpKS5wPWJ9fVxuZnVuY3Rpb24gYkVjKGEsYixjKXt2YXIgZCxlLGY7ZT1iW2NdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe2Y9ZVtkXTthLmVbZi5jLnBdW2YucF09ZH19XG5mdW5jdGlvbiBaRWMoYSxiKXt2YXIgYyxkLGUsZjtmb3IoZD1hLmQsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO1JFYyhhLmcsYykuYT1ifX1cbmZ1bmN0aW9uIHE3YyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9SnNiKGEsMCk7ZC5iIT1kLmQuYzspe2M9QkQoWHNiKGQpLDgpO1A2YyhjLGIpfXJldHVybiBhfVxuZnVuY3Rpb24gelViKGEsYil7dmFyIGM7Yz1jN2MoUjZjKEJEKE9oYihhLmcsYiksOCkpLEU2YyhCRChPaGIoYS5mLGIpLDQ2MCkuYikpO3JldHVybiBjfVxuZnVuY3Rpb24gbGliKGEpe3ZhciBiO3hwYihhLmUsYSk7c0NiKGEuYik7YS5jPWEuYTtiPUJEKGEuYS5QYigpLDQyKTthLmI9a2liKGEpO3JldHVybiBifVxuZnVuY3Rpb24gQ0QoYSl7dmFyIGI7Q0NiKGE9PW51bGx8fEFycmF5LmlzQXJyYXkoYSkmJihiPUhDKGEpLCEoYj49MTQmJmI8PTE2KSkpO3JldHVybiBhfVxuZnVuY3Rpb24gZGNiKGEsYixjKXt2YXIgZD1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGQsYXJndW1lbnRzKX07Yi5hcHBseShkLGMpO3JldHVybiBkfVxuZnVuY3Rpb24gVExjKGEsYixjKXt2YXIgZCxlO2Q9Yjtkb3tlPUVkYihhLnBbZC5wXSkrYzthLnBbZC5wXT1lO2Q9YS5hW2QucF19d2hpbGUoZCE9Yil9XG5mdW5jdGlvbiBOUWQoYSxiKXt2YXIgYyxkO2Q9YS5hO2M9T1FkKGEsYixudWxsKTtkIT1iJiYhYS5lJiYoYz1RUWQoYSxiLGMpKTshIWMmJmMuRmkoKX1cbmZ1bmN0aW9uIEFEYihhLGIpe3JldHVybiBJeSgpLE15KFFpZSksJHduZC5NYXRoLmFicyhhLWIpPD1RaWV8fGE9PWJ8fGlzTmFOKGEpJiZpc05hTihiKX1cbmZ1bmN0aW9uIEt5KGEsYil7SXkoKTtNeShRaWUpO3JldHVybiAkd25kLk1hdGguYWJzKGEtYik8PVFpZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpfVxuZnVuY3Rpb24gQWtjKGEsYil7Z2tjKCk7cmV0dXJuIGJlYihhLmIuYy5sZW5ndGgtYS5lLmMubGVuZ3RoLGIuYi5jLmxlbmd0aC1iLmUuYy5sZW5ndGgpfVxuZnVuY3Rpb24gb28oYSxiKXtyZXR1cm4gS3YodW8oYSxiLFRiYihJYmIoRWllLGtlYihUYmIoSWJiKGI9PW51bGw/MDp0YihiKSxGaWUpKSwxNSkpKSkpfVxuZnVuY3Rpb24gbzBiKCl7bzBiPWNjYjtuMGI9YXMoKGowYigpLE9DKEdDKE5RLDEpLEtpZSwyNjcsMCxbaDBiLGcwYixlMGIsaTBiLGYwYixkMGJdKSkpfVxuZnVuY3Rpb24gbjhjKCl7bjhjPWNjYjttOGM9YXMoKGk4YygpLE9DKEdDKHIxLDEpLEtpZSwyOTEsMCxbaDhjLGc4YyxmOGMsZDhjLGM4YyxlOGNdKSkpfVxuZnVuY3Rpb24gSzdjKCl7SzdjPWNjYjtKN2M9YXMoKEY3YygpLE9DKEdDKG8xLDEpLEtpZSwyNDgsMCxbejdjLEM3YyxEN2MsRTdjLEE3YyxCN2NdKSkpfVxuZnVuY3Rpb24gRnBjKCl7RnBjPWNjYjtFcGM9YXMoKEFwYygpLE9DKEdDKEVXLDEpLEtpZSwyMjcsMCxbd3BjLHlwYyx2cGMseHBjLHpwYyx1cGNdKSkpfVxuZnVuY3Rpb24gRHJjKCl7RHJjPWNjYjtDcmM9YXMoKHlyYygpLE9DKEdDKE9XLDEpLEtpZSwyNzUsMCxbd3JjLHRyYyx4cmMsdnJjLHVyYyxycmNdKSkpfVxuZnVuY3Rpb24gcXJjKCl7cXJjPWNjYjtwcmM9YXMoKGxyYygpLE9DKEdDKE5XLDEpLEtpZSwyNzQsMCxbaXJjLGhyYyxrcmMsZ3JjLGpyYyxmcmNdKSkpfVxuZnVuY3Rpb24gdHpjKCl7dHpjPWNjYjtzemM9YXMoKGx6YygpLE9DKEdDKFlXLDEpLEtpZSwzMTMsMCxbanpjLGh6YyxmemMsZ3pjLGt6YyxpemNdKSkpfVxuZnVuY3Rpb24gWXFjKCl7WXFjPWNjYjtYcWM9YXMoKFNxYygpLE9DKEdDKExXLDEpLEtpZSwyNzYsMCxbTnFjLE1xYyxQcWMsT3FjLFJxYyxRcWNdKSkpfVxuZnVuY3Rpb24gd1NjKCl7d1NjPWNjYjt2U2M9YXMoKHFTYygpLE9DKEdDKHQkLDEpLEtpZSwzMjcsMCxbcFNjLGxTYyxuU2MsbVNjLG9TYyxrU2NdKSkpfVxuZnVuY3Rpb24geWNkKCl7eWNkPWNjYjt4Y2Q9YXMoKHJjZCgpLE9DKEdDKEUxLDEpLEtpZSwyNzMsMCxbcGNkLG5jZCxvY2QsbWNkLGxjZCxxY2RdKSkpfVxuZnVuY3Rpb24gUmFkKCl7UmFkPWNjYjtRYWQ9YXMoKE1hZCgpLE9DKEdDKHcxLDEpLEtpZSwzMTIsMCxbS2FkLElhZCxMYWQsR2FkLEphZCxIYWRdKSkpfVxuZnVuY3Rpb24gTGJkKCl7SGJkKCk7cmV0dXJuIE9DKEdDKEIxLDEpLEtpZSw5MywwLFt6YmQseWJkLEJiZCxHYmQsRmJkLEViZCxDYmQsRGJkLEFiZF0pfVxuZnVuY3Rpb24gdmtkKGEsYil7dmFyIGM7Yz1hLmE7YS5hPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMCxjLGEuYSkpfVxuZnVuY3Rpb24gd2tkKGEsYil7dmFyIGM7Yz1hLmI7YS5iPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMSxjLGEuYikpfVxuZnVuY3Rpb24gaG1kKGEsYil7dmFyIGM7Yz1hLmI7YS5iPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMyxjLGEuYikpfVxuZnVuY3Rpb24gYWxkKGEsYil7dmFyIGM7Yz1hLmY7YS5mPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMyxjLGEuZikpfVxuZnVuY3Rpb24gY2xkKGEsYil7dmFyIGM7Yz1hLmc7YS5nPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsNCxjLGEuZykpfVxuZnVuY3Rpb24gZGxkKGEsYil7dmFyIGM7Yz1hLmk7YS5pPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsNSxjLGEuaSkpfVxuZnVuY3Rpb24gZWxkKGEsYil7dmFyIGM7Yz1hLmo7YS5qPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsNixjLGEuaikpfVxuZnVuY3Rpb24gb21kKGEsYil7dmFyIGM7Yz1hLmo7YS5qPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMSxjLGEuaikpfVxuZnVuY3Rpb24gaW1kKGEsYil7dmFyIGM7Yz1hLmM7YS5jPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsNCxjLGEuYykpfVxuZnVuY3Rpb24gcG1kKGEsYil7dmFyIGM7Yz1hLms7YS5rPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbFNkKGEsMixjLGEuaykpfVxuZnVuY3Rpb24gcVFkKGEsYil7dmFyIGM7Yz1hLmQ7YS5kPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbVNkKGEsMixjLGEuZCkpfVxuZnVuY3Rpb24gQUlkKGEsYil7dmFyIGM7Yz1hLnM7YS5zPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbVNkKGEsNCxjLGEucykpfVxuZnVuY3Rpb24gRElkKGEsYil7dmFyIGM7Yz1hLnQ7YS50PWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgbVNkKGEsNSxjLGEudCkpfVxuZnVuY3Rpb24gX0pkKGEsYil7dmFyIGM7Yz1hLkY7YS5GPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw1LGMsYikpfVxuZnVuY3Rpb24gaXpkKGEsYil7dmFyIGM7Yz1CRChPaGIoKHBFZCgpLG9FZCksYSksNTUpO3JldHVybiBjP2MueGooYik6S0MoU0ksVWhlLDEsYiw1LDEpfVxuZnVuY3Rpb24gWHBkKGEsYil7dmFyIGMsZDtjPWIgaW4gYS5hO2lmKGMpe2Q9YUMoYSxiKS5oZSgpO2lmKGQpe3JldHVybiBkLmF9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gZnRkKGEsYil7dmFyIGMsZCxlO2M9KGQ9KEZoZCgpLGU9bmV3IEpvZCxlKSwhIWImJkdvZChkLGIpLGQpO0hvZChjLGEpO3JldHVybiBjfVxuZnVuY3Rpb24gTExkKGEsYixjKXtJdGQoYSxjKTtpZighYS5CaygpJiZjIT1udWxsJiYhYS53aihjKSl7dGhyb3cgdmJiKG5ldyB0Y2IpfXJldHVybiBjfVxuZnVuY3Rpb24gWGRkKGEsYil7YS5uPWI7aWYoYS5uKXthLmY9bmV3IFJrYjthLmU9bmV3IFJrYn1lbHNle2EuZj1udWxsO2EuZT1udWxsfXJldHVybiBhfVxuZnVuY3Rpb24gbmRiKGEsYixjLGQsZSxmKXt2YXIgZztnPWxkYihhLGIpO3pkYihjLGcpO2cuaT1lPzg6MDtnLmY9ZDtnLmU9ZTtnLmc9ZjtyZXR1cm4gZ31cbmZ1bmN0aW9uIHJTZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaz1kO3RoaXMuZj1lO3RoaXMubz0tMTt0aGlzLnA9MTt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIHRTZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaz1kO3RoaXMuZj1lO3RoaXMubz0tMTt0aGlzLnA9Mjt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIEJTZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaz1kO3RoaXMuZj1lO3RoaXMubz0tMTt0aGlzLnA9Njt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIEdTZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaz1kO3RoaXMuZj1lO3RoaXMubz0tMTt0aGlzLnA9Nzt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIHhTZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaj1kO3RoaXMuZT1lO3RoaXMubz0tMTt0aGlzLnA9NDt0aGlzLmM9YTt0aGlzLmE9Y31cbmZ1bmN0aW9uIHJEYihhLGIpe3ZhciBjLGQsZSxmO2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO25EYihhLmEsYyl9cmV0dXJuIGF9XG5mdW5jdGlvbiBwbChhKXt2YXIgYixjLGQsZTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtRYihiKX1yZXR1cm4gbmV3IHZsKGEpfVxuZnVuY3Rpb24gVXooYSl7dmFyIGI9L2Z1bmN0aW9uKD86XFxzKyhbXFx3JF0rKSk/XFxzKlxcKC87dmFyIGM9Yi5leGVjKGEpO3JldHVybiBjJiZjWzFdfHxYaWV9XG5mdW5jdGlvbiB6ZGIoYSxiKXt2YXIgYztpZighYSl7cmV0dXJufWIubj1hO3ZhciBkPXRkYihiKTtpZighZCl7X2JiW2FdPVtiXTtyZXR1cm59ZC5nbT1ifVxuZnVuY3Rpb24gdmxiKGEsYixjKXt2YXIgZCxlO2U9YS5sZW5ndGg7ZD0kd25kLk1hdGgubWluKGMsZSk7JEJiKGEsMCxiLDAsZCx0cnVlKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIFJQYihhLGIsYyl7dmFyIGQsZTtmb3IoZT1iLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksNzkpO1FxYihhLEJEKGMuS2IoZCksMzMpKX19XG5mdW5jdGlvbiBYYmIoKXtZYmIoKTt2YXIgYT1XYmI7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7YS5wdXNoKGFyZ3VtZW50c1tiXSl9fVxuZnVuY3Rpb24gbjdjKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGQ9YixlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07R3NiKGEsYyxhLmMuYixhLmMpfX1cbmZ1bmN0aW9uIHMkYyhhLGIpe2EuYj0kd25kLk1hdGgubWF4KGEuYixiLmQpO2EuZSs9Yi5yKyhhLmEuYy5sZW5ndGg9PTA/MDphLmMpO0VrYihhLmEsYil9XG5mdW5jdGlvbiB3a2IoYSl7eUNiKGEuYz49MCk7aWYoZWtiKGEuZCxhLmMpPDApe2EuYT1hLmEtMSZhLmQuYS5sZW5ndGgtMTthLmI9YS5kLmN9YS5jPS0xfVxuZnVuY3Rpb24gcGdiKGEpe2lmKGEuYTw1NCl7cmV0dXJuIGEuZjwwPy0xOmEuZj4wPzE6MH1yZXR1cm4gKCFhLmMmJihhLmM9ZmhiKGEuZikpLGEuYykuZX1cbmZ1bmN0aW9uIE15KGEpe2lmKCEoYT49MCkpe3Rocm93IHZiYihuZXcgV2RiKCd0b2xlcmFuY2UgKCcrYSsnKSBtdXN0IGJlID49IDAnKSl9cmV0dXJuIGF9XG5mdW5jdGlvbiBuNGMoKXtpZighZjRjKXtmNGM9bmV3IG00YztsNGMoZjRjLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IFo5Y10pKX1yZXR1cm4gZjRjfVxuZnVuY3Rpb24gS0FjKCl7S0FjPWNjYjtKQWM9bmV3IExBYyhvbGUsMCk7SEFjPW5ldyBMQWMoJ0lOUFVUJywxKTtJQWM9bmV3IExBYygnT1VUUFVUJywyKX1cbmZ1bmN0aW9uIGJxYygpe2JxYz1jY2I7JHBjPW5ldyBjcWMoJ0FSRCcsMCk7YXFjPW5ldyBjcWMoJ01TRCcsMSk7X3BjPW5ldyBjcWMoJ01BTlVBTCcsMil9XG5mdW5jdGlvbiByR2MoKXtyR2M9Y2NiO29HYz1uZXcgc0djKCdCQVJZQ0VOVEVSJywwKTtwR2M9bmV3IHNHYyhCbmUsMSk7cUdjPW5ldyBzR2MoQ25lLDIpfVxuZnVuY3Rpb24genRkKGEsYil7dmFyIGM7Yz1hLmdjKCk7aWYoYjwwfHxiPmMpdGhyb3cgdmJiKG5ldyBDeWQoYixjKSk7cmV0dXJuIG5ldyBjemQoYSxiKX1cbmZ1bmN0aW9uIEpBZChhLGIpe3ZhciBjO2lmKEpEKGIsNDIpKXtyZXR1cm4gYS5jLk1jKGIpfWVsc2V7Yz1xQWQoYSxiKTtMQWQoYSxiKTtyZXR1cm4gY319XG5mdW5jdGlvbiAkbmQoYSxiLGMpe3lJZChhLGIpO3BuZChhLGMpO0FJZChhLDApO0RJZChhLDEpO0NJZChhLHRydWUpO0JJZChhLHRydWUpO3JldHVybiBhfVxuZnVuY3Rpb24gWGooYSxiKXtpZihhPDApe3Rocm93IHZiYihuZXcgV2RiKGIrJyBjYW5ub3QgYmUgbmVnYXRpdmUgYnV0IHdhczogJythKSl9cmV0dXJuIGF9XG5mdW5jdGlvbiBCdChhLGIpe3ZhciBjLGQ7Zm9yKGM9MCxkPWEuZ2MoKTtjPGQ7KytjKXtpZih3dGIoYixhLlhiKGMpKSl7cmV0dXJuIGN9fXJldHVybiAtMX1cbmZ1bmN0aW9uIE5jKGEpe3ZhciBiLGM7Zm9yKGM9YS5jLkNjKCkuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSwxNCk7Yi4kYigpfWEuYy4kYigpO2EuZD0wfVxuZnVuY3Rpb24gUmkoYSl7dmFyIGIsYyxkLGU7Zm9yKGM9YS5hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtGbGIoYixiLmxlbmd0aCxudWxsKX19XG5mdW5jdGlvbiBpZWIoYSl7dmFyIGIsYztpZihhPT0wKXtyZXR1cm4gMzJ9ZWxzZXtjPTA7Zm9yKGI9MTsoYiZhKT09MDtiPDw9MSl7KytjfXJldHVybiBjfX1cbmZ1bmN0aW9uIE5HYihhKXt2YXIgYixjO2ZvcihjPW5ldyBvbGIoYWhkKGEpKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksNjgwKTtiLkdmKCl9fVxuZnVuY3Rpb24gQ1ViKGEpe3hVYigpO3RoaXMuZz1uZXcgTHFiO3RoaXMuZj1uZXcgTHFiO3RoaXMuYj1uZXcgTHFiO3RoaXMuYz1uZXcgSHA7dGhpcy5pPWF9XG5mdW5jdGlvbiBYWmIoKXt0aGlzLmY9bmV3IGQ3Yzt0aGlzLmQ9bmV3IHMwYjt0aGlzLmM9bmV3IGQ3Yzt0aGlzLmE9bmV3IFJrYjt0aGlzLmI9bmV3IFJrYn1cbmZ1bmN0aW9uIGM2ZChhLGIsYyxkKXt0aGlzLnJqKCk7dGhpcy5hPWI7dGhpcy5iPWE7dGhpcy5jPW51bGw7dGhpcy5jPW5ldyBkNmQodGhpcyxiLGMsZCl9XG5mdW5jdGlvbiBueGQoYSxiLGMsZCxlKXt0aGlzLmQ9YTt0aGlzLm49Yjt0aGlzLmc9Yzt0aGlzLm89ZDt0aGlzLnA9LTE7ZXx8KHRoaXMubz0tMi1kLTEpfVxuZnVuY3Rpb24gaEpkKCl7RklkLmNhbGwodGhpcyk7dGhpcy5uPS0xO3RoaXMuZz1udWxsO3RoaXMuaT1udWxsO3RoaXMuaj1udWxsO3RoaXMuQmJ8PXp0ZX1cbmZ1bmN0aW9uIExkZCgpe0lkZCgpO3JldHVybiBPQyhHQyhKMSwxKSxLaWUsMjU5LDAsW0JkZCxEZGQsQWRkLEVkZCxGZGQsSGRkLEdkZCxDZGQsemRkXSl9XG5mdW5jdGlvbiB1RmIoKXtyRmIoKTtyZXR1cm4gT0MoR0MoZE4sMSksS2llLDI1MCwwLFtxRmIsbEZiLG1GYixrRmIsb0ZiLHBGYixuRmIsakZiLGlGYl0pfVxuZnVuY3Rpb24gcWViKCl7cWViPWNjYjtwZWI9T0MoR0MoV0QsMSksb2plLDI1LDE1LFswLDgsNCwxMiwyLDEwLDYsMTQsMSw5LDUsMTMsMywxMSw3LDE1XSl9XG5mdW5jdGlvbiB2Q2MoKXt2Q2M9Y2NiO3VDYz1lM2MoZTNjKGUzYyhuZXcgajNjLChxVWIoKSxsVWIpLChTOGIoKSxaN2IpKSxtVWIsdzhiKSxuVWIsdjhiKX1cbmZ1bmN0aW9uIFZDYygpe1ZDYz1jY2I7VUNjPWUzYyhlM2MoZTNjKG5ldyBqM2MsKHFVYigpLGxVYiksKFM4YigpLFo3YikpLG1VYix3OGIpLG5VYix2OGIpfVxuZnVuY3Rpb24gckRjKCl7ckRjPWNjYjtxRGM9ZTNjKGUzYyhlM2MobmV3IGozYywocVViKCksbFViKSwoUzhiKCksWjdiKSksbVViLHc4YiksblViLHY4Yil9XG5mdW5jdGlvbiB5RmMoKXt5RmM9Y2NiO3hGYz1jM2MoZTNjKGUzYyhuZXcgajNjLChxVWIoKSxuVWIpLChTOGIoKSx6OGIpKSxvVWIscDhiKSxwVWIseThiKX1cbmZ1bmN0aW9uIFJwYygpe1JwYz1jY2I7UHBjPW5ldyBUcGMoJ0xBWUVSX1NXRUVQJywwKTtPcGM9bmV3IFRwYyhUbmUsMSk7UXBjPW5ldyBUcGMoYW5lLDIpfVxuZnVuY3Rpb24gUkxjKGEsYil7dmFyIGMsZDtjPWEuYztkPWIuZVthLnBdO2lmKGQ+MCl7cmV0dXJuIEJEKElrYihjLmEsZC0xKSwxMCl9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBMa2QoYSxiKXt2YXIgYztjPWEuazthLms9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDIsYyxhLmspKX1cbmZ1bmN0aW9uIGttZChhLGIpe3ZhciBjO2M9YS5mO2EuZj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsOCxjLGEuZikpfVxuZnVuY3Rpb24gbG1kKGEsYil7dmFyIGM7Yz1hLmk7YS5pPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw3LGMsYS5pKSl9XG5mdW5jdGlvbiBIb2QoYSxiKXt2YXIgYztjPWEuYTthLmE9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDgsYyxhLmEpKX1cbmZ1bmN0aW9uIHpwZChhLGIpe3ZhciBjO2M9YS5iO2EuYj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMCxjLGEuYikpfVxuZnVuY3Rpb24gVVVkKGEsYil7dmFyIGM7Yz1hLmI7YS5iPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSwwLGMsYS5iKSl9XG5mdW5jdGlvbiBWVWQoYSxiKXt2YXIgYztjPWEuYzthLmM9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDEsYyxhLmMpKX1cbmZ1bmN0aW9uIEFwZChhLGIpe3ZhciBjO2M9YS5jO2EuYz1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMSxjLGEuYykpfVxuZnVuY3Rpb24gcFFkKGEsYil7dmFyIGM7Yz1hLmM7YS5jPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw0LGMsYS5jKSl9XG5mdW5jdGlvbiBQSGQoYSxiKXt2YXIgYztjPWEuZDthLmQ9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDEsYyxhLmQpKX1cbmZ1bmN0aW9uIGpLZChhLGIpe3ZhciBjO2M9YS5EO2EuRD1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMixjLGEuRCkpfVxuZnVuY3Rpb24gUmRkKGEsYil7aWYoYS5yPjAmJmEuYzxhLnIpe2EuYys9YjshIWEuaSYmYS5pLmQ+MCYmYS5nIT0wJiZSZGQoYS5pLGIvYS5yKmEuaS5kKX19XG5mdW5jdGlvbiBkZ2UoYSxiLGMpe3ZhciBkO2EuYj1iO2EuYT1jO2Q9KGEuYSY1MTIpPT01MTI/bmV3IGhlZTpuZXcgdWRlO2EuYz1vZGUoZCxhLmIsYS5hKX1cbmZ1bmN0aW9uIGczZChhLGIpe3JldHVybiBUNmQoYS5lLGIpPyhRNmQoKSxZSWQoYik/bmV3IFI3ZChiLGEpOm5ldyBmN2QoYixhKSk6bmV3IGM4ZChiLGEpfVxuZnVuY3Rpb24gX28oYSxiKXtyZXR1cm4gRnYodm8oYS5hLGIsVGJiKEliYihFaWUsa2ViKFRiYihJYmIoYj09bnVsbD8wOnRiKGIpLEZpZSkpLDE1KSkpKSl9XG5mdW5jdGlvbiBOeWIoYSxiLGMpe3JldHVybiBBeWIoYSxuZXcgS3piKGIpLG5ldyBNemIsbmV3IE96YihjKSxPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW10pKX1cbmZ1bmN0aW9uIHBBYihhKXt2YXIgYixjO2lmKDA+YSl7cmV0dXJuIG5ldyB5QWJ9Yj1hKzE7Yz1uZXcgckFiKGIsYSk7cmV0dXJuIG5ldyB2QWIobnVsbCxjKX1cbmZ1bmN0aW9uIHVtYihhLGIpe21tYigpO3ZhciBjO2M9bmV3IE1xYigxKTtORChhKT9TaGIoYyxhLGIpOmpyYihjLmYsYSxiKTtyZXR1cm4gbmV3IGlvYihjKX1cbmZ1bmN0aW9uIGFNYihhLGIpe3ZhciBjLGQ7Yz1hLm8rYS5wO2Q9Yi5vK2IucDtpZihjPGQpe3JldHVybiAtMX1pZihjPT1kKXtyZXR1cm4gMH1yZXR1cm4gMX1cbmZ1bmN0aW9uIFAyYihhKXt2YXIgYjtiPXZOYihhLCh3dGMoKSwkc2MpKTtpZihKRChiLDE2MCkpe3JldHVybiBPMmIoQkQoYiwxNjApKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIEtwKGEpe3ZhciBiO2E9JHduZC5NYXRoLm1heChhLDIpO2I9Z2ViKGEpO2lmKGE+Yil7Yjw8PTE7cmV0dXJuIGI+MD9iOklpZX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHhjKGEpe1ViKGEuZSE9Myk7c3dpdGNoKGEuZSl7Y2FzZSAyOnJldHVybiBmYWxzZTtjYXNlIDA6cmV0dXJuIHRydWU7fXJldHVybiB6YyhhKX1cbmZ1bmN0aW9uIFQ2YyhhLGIpe3ZhciBjO2lmKEpEKGIsOCkpe2M9QkQoYiw4KTtyZXR1cm4gYS5hPT1jLmEmJmEuYj09Yy5ifWVsc2V7cmV0dXJuIGZhbHNlfX1cbmZ1bmN0aW9uIF9NYihhLGIsYyl7dmFyIGQsZSxmO2Y9Yj4+NTtlPWImMzE7ZD14YmIoUGJiKGEubltjXVtmXSxUYmIoTmJiKGUsMSkpKSwzKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIElBZChhLGIpe3ZhciBjLGQ7Zm9yKGQ9Yi52YygpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksNDIpO0hBZChhLGMuY2QoKSxjLmRkKCkpfX1cbmZ1bmN0aW9uIE4xYyhhLGIpe3ZhciBjO2M9bmV3IHRPYjtCRChiLmIsNjUpO0JEKGIuYiw2NSk7QkQoYi5iLDY1KTtIa2IoYi5hLG5ldyBUMWMoYSxjLGIpKX1cbmZ1bmN0aW9uIERVZChhLGIpe3ZhciBjO2M9YS5iO2EuYj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMjEsYyxhLmIpKX1cbmZ1bmN0aW9uIGptZChhLGIpe3ZhciBjO2M9YS5kO2EuZD1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMTEsYyxhLmQpKX1cbmZ1bmN0aW9uIF9JZChhLGIpe3ZhciBjO2M9YS5qO2Euaj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMTMsYyxhLmopKX1cbmZ1bmN0aW9uICRqYihhLGIsYyl7dmFyIGQsZSxmO2Y9YS5hLmxlbmd0aC0xO2ZvcihlPWEuYixkPTA7ZDxjO2U9ZSsxJmYsKytkKXtOQyhiLGQsYS5hW2VdKX19XG5mdW5jdGlvbiBycWIoYSxiKXt2YXIgYzt1Q2IoYik7Yz1iLmc7aWYoIWEuYltjXSl7TkMoYS5iLGMsYik7KythLmM7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gZXViKGEsYil7dmFyIGM7Yz1iPT1udWxsPy0xOkprYihhLmIsYiwwKTtpZihjPDApe3JldHVybiBmYWxzZX1mdWIoYSxjKTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIGZ1YihhLGIpe3ZhciBjO2M9S2tiKGEuYixhLmIuYy5sZW5ndGgtMSk7aWYoYjxhLmIuYy5sZW5ndGgpe05rYihhLmIsYixjKTtidWIoYSxiKX19XG5mdW5jdGlvbiBleWIoYSxiKXsoKG95YigpLGx5Yik/bnVsbDpiLmMpLmxlbmd0aD09MCYmcXliKGIsbmV3IHp5Yik7U2hiKGEuYSxseWI/bnVsbDpiLmMsYil9XG5mdW5jdGlvbiBNNWIoYSxiKXtPZGQoYiwnSGllcmFyY2hpY2FsIHBvcnQgY29uc3RyYWludCBwcm9jZXNzaW5nJywxKTtONWIoYSk7UDViKGEpO1FkZChiKX1cbmZ1bmN0aW9uIEdPYihhLGIpe3ZhciBjLGQ7Zm9yKGQ9Yi5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDI2Nik7YS5iPXRydWU7UXFiKGEuZSxjKTtjLmI9YX19XG5mdW5jdGlvbiBPd2IoYSxiKXt2YXIgYyxkO2M9MS1iO2Q9YS5hW2NdO2EuYVtjXT1kLmFbYl07ZC5hW2JdPWE7YS5iPXRydWU7ZC5iPWZhbHNlO3JldHVybiBkfVxuZnVuY3Rpb24gR2VjKGEsYil7dmFyIGMsZDtjPUJEKHZOYihhLChOeWMoKSxheWMpKSw4KTtkPUJEKHZOYihiLGF5YyksOCk7cmV0dXJuIEtkYihjLmIsZC5iKX1cbmZ1bmN0aW9uIGpmYyhhKXtvRWIuY2FsbCh0aGlzKTt0aGlzLmI9RWRiKEVEKHZOYihhLChOeWMoKSxseWMpKSkpO3RoaXMuYT1CRCh2TmIoYSxTd2MpLDIxOCl9XG5mdW5jdGlvbiBYR2MoYSxiLGMpe3VFYy5jYWxsKHRoaXMsYSxiLGMpO3RoaXMuYT1uZXcgTHFiO3RoaXMuYj1uZXcgTHFiO3RoaXMuZD1uZXcgJEdjKHRoaXMpfVxuZnVuY3Rpb24ga3UoYSl7dGhpcy5lPWE7dGhpcy5kPW5ldyBVcWIoQ3YoRWModGhpcy5lKS5nYygpKSk7dGhpcy5jPXRoaXMuZS5hO3RoaXMuYj10aGlzLmUuY31cbmZ1bmN0aW9uIEJIYyhhKXt0aGlzLmI9YTt0aGlzLmE9S0MoV0Qsb2plLDI1LGErMSwxNSwxKTt0aGlzLmM9S0MoV0Qsb2plLDI1LGEsMTUsMSk7dGhpcy5kPTB9XG5mdW5jdGlvbiBUSGMoYSxiLGMpe3ZhciBkO2Q9bmV3IFJrYjtVSGMoYSxiLGQsYyx0cnVlLHRydWUpO2EuYj1uZXcgQkhjKGQuYy5sZW5ndGgpO3JldHVybiBkfVxuZnVuY3Rpb24gbk1jKGEsYil7dmFyIGM7Yz1CRChPaGIoYS5jLGIpLDQ1OCk7aWYoIWMpe2M9bmV3IHVNYztjLmM9YjtSaGIoYS5jLGMuYyxjKX1yZXR1cm4gY31cbmZ1bmN0aW9uICRCKGUsYSl7dmFyIGI9ZS5hO3ZhciBjPTA7Zm9yKHZhciBkIGluIGIpe2IuaGFzT3duUHJvcGVydHkoZCkmJihhW2MrK109ZCl9cmV0dXJuIGF9XG5mdW5jdGlvbiBwUmQoYSl7dmFyIGI7aWYoYS5iPT1udWxsKXtyZXR1cm4gTFJkKCksTFJkKCksS1JkfWI9YS5MaygpP2EuS2soKTphLkprKCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiByJGMoYSl7dmFyIGIsYztmb3IoYz1uZXcgRnlkKGEpO2MuZSE9Yy5pLmdjKCk7KXtiPUJEKER5ZChjKSwzMyk7ZGxkKGIsMCk7ZWxkKGIsMCl9fVxuZnVuY3Rpb24gSFNiKCl7SFNiPWNjYjtGU2I9bmV3IExzZChJbWUpO0dTYj1uZXcgTHNkKEptZSk7RVNiPW5ldyBMc2QoS21lKTtEU2I9bmV3IExzZChMbWUpfVxuZnVuY3Rpb24geTViKCl7eTViPWNjYjt4NWI9bmV3IHo1YignVE9fSU5URVJOQUxfTFRSJywwKTt3NWI9bmV3IHo1YignVE9fSU5QVVRfRElSRUNUSU9OJywxKX1cbmZ1bmN0aW9uIFBVYygpe1BVYz1jY2I7TlVjPW5ldyBSVWMoJ1AxX05PREVfUExBQ0VNRU5UJywwKTtPVWM9bmV3IFJVYygnUDJfRURHRV9ST1VUSU5HJywxKX1cbmZ1bmN0aW9uIEZrYygpe0ZrYz1jY2I7RWtjPW5ldyBHa2MoJ1NUQVJUJywwKTtEa2M9bmV3IEdrYygnTUlERExFJywxKTtDa2M9bmV3IEdrYygnRU5EJywyKX1cbmZ1bmN0aW9uIEk5Yigpe0k5Yj1jY2I7SDliPW5ldyBNc2QoJ2VkZ2VsYWJlbGNlbnRlcmVkbmVzc2FuYWx5c2lzLmluY2x1ZGVsYWJlbCcsKEJjYigpLHpjYikpfVxuZnVuY3Rpb24gWnljKGEsYil7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihuZXcgUGliKGEuYiksMSkpLG5ldyBiZmQoYSxiKSksbmV3IGZmZChhLGIpKX1cbmZ1bmN0aW9uICRYYygpe3RoaXMuYz1uZXcgalZjKDApO3RoaXMuYj1uZXcgalZjKFRxZSk7dGhpcy5kPW5ldyBqVmMoU3FlKTt0aGlzLmE9bmV3IGpWYyhjbWUpfVxuZnVuY3Rpb24gJEZjKGEpe3ZhciBiLGM7Zm9yKGM9YS5jLmEuZWMoKS5LYygpO2MuT2IoKTspe2I9QkQoYy5QYigpLDIxNCk7ZUZjKGIsbmV3IG9IYyhiLmUpKX19XG5mdW5jdGlvbiBaRmMoYSl7dmFyIGIsYztmb3IoYz1hLmMuYS5lYygpLktjKCk7Yy5PYigpOyl7Yj1CRChjLlBiKCksMjE0KTtkRmMoYixuZXcgbkhjKGIuZikpfX1cbmZ1bmN0aW9uIHBuZChhLGIpe3ZhciBjO2M9YS56YjthLnpiPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSwxLGMsYS56YikpfVxuZnVuY3Rpb24gY29kKGEsYil7dmFyIGM7Yz1hLnhiO2EueGI9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDMsYyxhLnhiKSl9XG5mdW5jdGlvbiBkb2QoYSxiKXt2YXIgYztjPWEueWI7YS55Yj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMixjLGEueWIpKX1cbmZ1bmN0aW9uIEtuZChhLGIpe3ZhciBjLGQ7Yz0oZD1uZXcgT0pkLGQpO2Mubj1iO3d0ZCgoIWEucyYmKGEucz1uZXcgY1VkKHQ1LGEsMjEsMTcpKSxhLnMpLGMpfVxuZnVuY3Rpb24gUW5kKGEsYil7dmFyIGMsZDtkPShjPW5ldyBGVWQsYyk7ZC5uPWI7d3RkKCghYS5zJiYoYS5zPW5ldyBjVWQodDUsYSwyMSwxNykpLGEucyksZCl9XG5mdW5jdGlvbiBrdGIoYSxiKXt2YXIgYyxkO2M9YS5QYygpO0tsYihjLDAsYy5sZW5ndGgsYik7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyl7YS5fYyhkLGNbZF0pfX1cbmZ1bmN0aW9uIHllKGEsYil7dmFyIGMsZCxlO3VDYihiKTtjPWZhbHNlO2ZvcihlPWIuS2MoKTtlLk9iKCk7KXtkPWUuUGIoKTtjPWN8YS5GYyhkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIEJ4KGEpe3ZhciBiLGMsZDtiPTA7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9ZC5QYigpO2IrPWMhPW51bGw/dGIoYyk6MDtiPX5+Yn1yZXR1cm4gYn1cbmZ1bmN0aW9uIFNBKGEpe3ZhciBiO2lmKGE9PTApe3JldHVybiAnVVRDJ31pZihhPDApe2E9LWE7Yj0nVVRDKyd9ZWxzZXtiPSdVVEMtJ31yZXR1cm4gYitVQShhKX1cbmZ1bmN0aW9uIEpxKGEsYil7dmFyIGM7aWYoSkQoYiwxNCkpe2M9QkQoYiwxNCk7cmV0dXJuIGEuR2MoYyl9cmV0dXJuIGZyKGEsQkQoUWIoYiksMjApLktjKCkpfVxuZnVuY3Rpb24gQm5jKGEsYixjKXtDbmMuY2FsbCh0aGlzLGIsYyk7dGhpcy5kPUtDKE9RLGtuZSwxMCxhLmEuYy5sZW5ndGgsMCwxKTtRa2IoYS5hLHRoaXMuZCl9XG5mdW5jdGlvbiBJTWMoYSl7YS5hPW51bGw7YS5lPW51bGw7YS5iLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2EuZi5jPUtDKFNJLFVoZSwxLDAsNSwxKTthLmM9bnVsbH1cbmZ1bmN0aW9uIGdLZChhLGIpe2lmKGIpe2lmKGEuQj09bnVsbCl7YS5CPWEuRDthLkQ9bnVsbH19ZWxzZSBpZihhLkIhPW51bGwpe2EuRD1hLkI7YS5CPW51bGx9fVxuZnVuY3Rpb24gUG9jKGEsYil7cmV0dXJuIEVkYihFRChCdGIoVEFiKE5BYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmMuYiwxNikpLG5ldyBmcGMoYSkpLGIpKSkpfVxuZnVuY3Rpb24gU29jKGEsYil7cmV0dXJuIEVkYihFRChCdGIoVEFiKE5BYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmMuYiwxNikpLG5ldyBkcGMoYSkpLGIpKSkpfVxuZnVuY3Rpb24gUTJiKGEsYil7T2RkKGIsem5lLDEpO01BYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5iLDE2KSksbmV3IFUyYiksbmV3IFcyYik7UWRkKGIpfVxuZnVuY3Rpb24gU1hjKGEsYil7dmFyIGMsZDtjPUJEKGhrZChhLChaV2MoKSxTV2MpKSwxOSk7ZD1CRChoa2QoYixTV2MpLDE5KTtyZXR1cm4gYmViKGMuYSxkLmEpfVxuZnVuY3Rpb24gcDdjKGEsYixjKXt2YXIgZCxlO2ZvcihlPUpzYihhLDApO2UuYiE9ZS5kLmM7KXtkPUJEKFhzYihlKSw4KTtkLmErPWI7ZC5iKz1jfXJldHVybiBhfVxuZnVuY3Rpb24gdW8oYSxiLGMpe3ZhciBkO2ZvcihkPWEuYltjJmEuZl07ZDtkPWQuYil7aWYoYz09ZC5hJiZIYihiLGQuZykpe3JldHVybiBkfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHZvKGEsYixjKXt2YXIgZDtmb3IoZD1hLmNbYyZhLmZdO2Q7ZD1kLmQpe2lmKGM9PWQuZiYmSGIoYixkLmkpKXtyZXR1cm4gZH19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBraGIoYSxiLGMpe3ZhciBkLGUsZjtkPTA7Zm9yKGU9MDtlPGM7ZSsrKXtmPWJbZV07YVtlXT1mPDwxfGQ7ZD1mPj4+MzF9ZCE9MCYmKGFbY109ZCl9XG5mdW5jdGlvbiBybWIoYSxiKXttbWIoKTt2YXIgYyxkO2Q9bmV3IFJrYjtmb3IoYz0wO2M8YTsrK2Mpe2QuY1tkLmMubGVuZ3RoXT1ifXJldHVybiBuZXcgWW9iKGQpfVxuZnVuY3Rpb24gWnpiKGEpe3ZhciBiO2I9WXpiKGEpO2lmKEJiYihiLmEsMCkpe3JldHVybiBMdGIoKSxMdGIoKSxLdGJ9cmV0dXJuIEx0YigpLG5ldyBQdGIoYi5iKX1cbmZ1bmN0aW9uICR6YihhKXt2YXIgYjtiPVl6YihhKTtpZihCYmIoYi5hLDApKXtyZXR1cm4gTHRiKCksTHRiKCksS3RifXJldHVybiBMdGIoKSxuZXcgUHRiKGIuYyl9XG5mdW5jdGlvbiB1QWIoYSl7dmFyIGI7Yj10QWIoYSk7aWYoQmJiKGIuYSwwKSl7cmV0dXJuIFV0YigpLFV0YigpLFR0Yn1yZXR1cm4gVXRiKCksbmV3IFh0YihiLmIpfVxuZnVuY3Rpb24gelpiKGEpe2lmKGEuYi5jLmkuaz09KGowYigpLGUwYikpe3JldHVybiBCRCh2TmIoYS5iLmMuaSwod3RjKCksJHNjKSksMTEpfXJldHVybiBhLmIuY31cbmZ1bmN0aW9uIEFaYihhKXtpZihhLmIuZC5pLms9PShqMGIoKSxlMGIpKXtyZXR1cm4gQkQodk5iKGEuYi5kLmksKHd0YygpLCRzYykpLDExKX1yZXR1cm4gYS5iLmR9XG5mdW5jdGlvbiBWbmQoYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSl7YW9kKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0pO01KZChhLGZhbHNlKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHRKYihhLGIsYyxkLGUsZixnKXskci5jYWxsKHRoaXMsYSxiKTt0aGlzLmQ9Yzt0aGlzLmU9ZDt0aGlzLmM9ZTt0aGlzLmI9Zjt0aGlzLmE9T3UoZyl9XG5mdW5jdGlvbiAkYmIoYSxiKXt0eXBlb2Ygd2luZG93PT09SmhlJiZ0eXBlb2Ygd2luZG93WyckZ3d0J109PT1KaGUmJih3aW5kb3dbJyRnd3QnXVthXT1iKX1cbmZ1bmN0aW9uIHBXYihhLGIpe2xXYigpO3JldHVybiBhPT1oV2ImJmI9PWtXYnx8YT09a1diJiZiPT1oV2J8fGE9PWpXYiYmYj09aVdifHxhPT1pV2ImJmI9PWpXYn1cbmZ1bmN0aW9uIHFXYihhLGIpe2xXYigpO3JldHVybiBhPT1oV2ImJmI9PWlXYnx8YT09aFdiJiZiPT1qV2J8fGE9PWtXYiYmYj09aldifHxhPT1rV2ImJmI9PWlXYn1cbmZ1bmN0aW9uIElKYihhLGIpe3JldHVybiBJeSgpLE15KHBsZSksJHduZC5NYXRoLmFicygwLWIpPD1wbGV8fDA9PWJ8fGlzTmFOKDApJiZpc05hTihiKT8wOmEvYn1cbmZ1bmN0aW9uIFJyYygpe09yYygpO3JldHVybiBPQyhHQyhQVywxKSxLaWUsMjU2LDAsW0ZyYyxIcmMsSXJjLEpyYyxLcmMsTHJjLE5yYyxFcmMsR3JjLE1yY10pfVxuZnVuY3Rpb24gTktkKCl7TktkPWNjYjtLS2Q9bmV3IEtQZDtNS2Q9T0MoR0ModDUsMSksTXZlLDE3MCwwLFtdKTtMS2Q9T0MoR0MobjUsMSksTnZlLDU5LDAsW10pfVxuZnVuY3Rpb24gQ0JjKCl7Q0JjPWNjYjtCQmM9bmV3IERCYygnTk8nLDApO3pCYz1uZXcgREJjKCdHUkVFRFknLDEpO0FCYz1uZXcgREJjKCdMT09LX0JBQ0snLDIpfVxuZnVuY3Rpb24gejBiKCl7ejBiPWNjYjt3MGI9bmV3IG0xYjt1MGI9bmV3IGgxYjt2MGI9bmV3IHExYjt0MGI9bmV3IHUxYjt4MGI9bmV3IHkxYjt5MGI9bmV3IEMxYn1cbmZ1bmN0aW9uIEo5YihhKXt2YXIgYixjLGQ7ZD0wO2ZvcihjPW5ldyBvbGIoYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMjkpO2IucD1kOysrZH19XG5mdW5jdGlvbiBuZmQoYSxiKXt2YXIgYztjPXNmZChhKTtyZXR1cm4gbWZkKG5ldyBmN2MoYy5jLGMuZCksbmV3IGY3YyhjLmIsYy5hKSxhLnJmKCksYixhLkhmKCkpfVxuZnVuY3Rpb24gVWRkKGEsYil7dmFyIGM7aWYoYS5iKXtyZXR1cm4gbnVsbH1lbHNle2M9UGRkKGEsYS5nKTtEc2IoYS5hLGMpO2MuaT1hO2EuZD1iO3JldHVybiBjfX1cbmZ1bmN0aW9uIGtVYyhhLGIsYyl7T2RkKGMsJ0RGUyBUcmVlaWZ5aW5nIHBoYXNlJywxKTtqVWMoYSxiKTtoVWMoYSxiKTthLmE9bnVsbDthLmI9bnVsbDtRZGQoYyl9XG5mdW5jdGlvbiB6aWMoYSxiLGMpe3RoaXMuZz1hO3RoaXMuZD1iO3RoaXMuZT1jO3RoaXMuYT1uZXcgUmtiO3hpYyh0aGlzKTttbWIoKTtPa2IodGhpcy5hLG51bGwpfVxuZnVuY3Rpb24gQXVkKGEpe3RoaXMuaT1hLmdjKCk7aWYodGhpcy5pPjApe3RoaXMuZz10aGlzLnJpKHRoaXMuaSsodGhpcy5pLzh8MCkrMSk7YS5RYyh0aGlzLmcpfX1cbmZ1bmN0aW9uIHUzZChhLGIpe2syZC5jYWxsKHRoaXMsRDksYSxiKTt0aGlzLmI9dGhpczt0aGlzLmE9UzZkKGEuVGcoKSxYS2QodGhpcy5lLlRnKCksdGhpcy5jKSl9XG5mdW5jdGlvbiBMZChhLGIpe3ZhciBjLGQ7dUNiKGIpO2ZvcihkPWIudmMoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDQyKTthLnpjKGMuY2QoKSxjLmRkKCkpfX1cbmZ1bmN0aW9uIEcyZChhLGIsYyl7dmFyIGQ7Zm9yKGQ9Yy5LYygpO2QuT2IoKTspe2lmKCFFMmQoYSxiLGQuUGIoKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBzVmQoYSxiLGMsZCxlKXt2YXIgZjtpZihjKXtmPWJMZChiLlRnKCksYS5jKTtlPWMuZ2goYiwtMS0oZj09LTE/ZDpmKSxudWxsLGUpfXJldHVybiBlfVxuZnVuY3Rpb24gdFZkKGEsYixjLGQsZSl7dmFyIGY7aWYoYyl7Zj1iTGQoYi5UZygpLGEuYyk7ZT1jLmloKGIsLTEtKGY9PS0xP2Q6ZiksbnVsbCxlKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIE1nYihhKXt2YXIgYjtpZihhLmI9PS0yKXtpZihhLmU9PTApe2I9LTF9ZWxzZXtmb3IoYj0wO2EuYVtiXT09MDtiKyspO31hLmI9Yn1yZXR1cm4gYS5ifVxuZnVuY3Rpb24gWjRiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMjpyZXR1cm4gVWNkKCksVGNkO2Nhc2UgNDpyZXR1cm4gVWNkKCksemNkO2RlZmF1bHQ6cmV0dXJuIGE7fX1cbmZ1bmN0aW9uICQ0YihhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIFVjZCgpLFJjZDtjYXNlIDM6cmV0dXJuIFVjZCgpLEFjZDtkZWZhdWx0OnJldHVybiBhO319XG5mdW5jdGlvbiBua2MoYSl7dmFyIGIsYyxkO3JldHVybiBhLmo9PShVY2QoKSxBY2QpJiYoYj1wa2MoYSksYz11cWIoYix6Y2QpLGQ9dXFiKGIsVGNkKSxkfHxkJiZjKX1cbmZ1bmN0aW9uIG9xYihhKXt2YXIgYixjO2I9QkQoYS5lJiZhLmUoKSw5KTtjPUJEKFpCYihiLGIubGVuZ3RoKSw5KTtyZXR1cm4gbmV3IHhxYihiLGMsYi5sZW5ndGgpfVxuZnVuY3Rpb24gbDdiKGEsYil7T2RkKGIsem5lLDEpO1VHYihUR2IobmV3IFlHYigoYSRiKCksbmV3IGwkYihhLGZhbHNlLGZhbHNlLG5ldyBUJGIpKSkpKTtRZGQoYil9XG5mdW5jdGlvbiBGY2IoYSxiKXtCY2IoKTtyZXR1cm4gTkQoYSk/Y2ZiKGEsR0QoYikpOkxEKGEpP0RkYihhLEVEKGIpKTpLRChhKT9EY2IoYSxERChiKSk6YS53ZChiKX1cbmZ1bmN0aW9uIFdaYyhhLGIpe2IucT1hO2EuZD0kd25kLk1hdGgubWF4KGEuZCxiLnIpO2EuYis9Yi5kKyhhLmEuYy5sZW5ndGg9PTA/MDphLmMpO0VrYihhLmEsYil9XG5mdW5jdGlvbiBtNmMoYSxiKXt2YXIgYyxkLGUsZjtlPWEuYztjPWEuYythLmI7Zj1hLmQ7ZD1hLmQrYS5hO3JldHVybiBiLmE+ZSYmYi5hPGMmJmIuYj5mJiZiLmI8ZH1cbmZ1bmN0aW9uIFluZChhLGIsYyxkKXtKRChhLkNiLDE3OSkmJihCRChhLkNiLDE3OSkudGI9bnVsbCk7cG5kKGEsYyk7ISFiJiZoS2QoYSxiKTtkJiZhLnhrKHRydWUpfVxuZnVuY3Rpb24gWXFkKGEsYil7dmFyIGM7Yz1CRChiLDE4Myk7U3BkKGMsJ3gnLGEuaSk7U3BkKGMsJ3knLGEuaik7U3BkKGMsR3RlLGEuZyk7U3BkKGMsRnRlLGEuZil9XG5mdW5jdGlvbiBMRmMoKXtMRmM9Y2NiO0tGYz1iM2MoZjNjKGUzYyhlM2MobmV3IGozYywocVViKCksblViKSwoUzhiKCksejhiKSksb1ViLHA4YikscFViKSx5OGIpfVxuZnVuY3Rpb24gZEhjKCl7ZEhjPWNjYjtjSGM9YjNjKGYzYyhlM2MoZTNjKG5ldyBqM2MsKHFVYigpLG5VYiksKFM4YigpLHo4YikpLG9VYixwOGIpLHBVYikseThiKX1cbmZ1bmN0aW9uIHNYYygpe3NYYz1jY2I7cVhjPW5ldyB1WGMoYW5lLDApO3JYYz1uZXcgdVhjKCdQT0xBUl9DT09SRElOQVRFJywxKTtwWGM9bmV3IHVYYygnSUQnLDIpfVxuZnVuY3Rpb24gVEFjKCl7VEFjPWNjYjtRQWM9bmV3IFVBYygnRVFVQUxMWScsMCk7UkFjPW5ldyBVQWMoeGxlLDEpO1NBYz1uZXcgVUFjKCdOT1JUSF9TT1VUSCcsMil9XG5mdW5jdGlvbiBwQWMoKXtwQWM9Y2NiO29BYz1hcygoa0FjKCksT0MoR0MoYVgsMSksS2llLDI2MCwwLFtpQWMsZEFjLGdBYyxlQWMsZkFjLGNBYyxoQWMsakFjXSkpKX1cbmZ1bmN0aW9uIEZsYygpe0ZsYz1jY2I7RWxjPWFzKChBbGMoKSxPQyhHQyhLViwxKSxLaWUsMjcwLDAsW3RsYyx3bGMsc2xjLHpsYyx2bGMsdWxjLHlsYyx4bGNdKSkpfVxuZnVuY3Rpb24gZTZjKCl7ZTZjPWNjYjtkNmM9YXMoKF81YygpLE9DKEdDKGYxLDEpLEtpZSwyNzcsMCxbJDVjLFQ1YyxYNWMsWjVjLFU1YyxWNWMsVzVjLFk1Y10pKSl9XG5mdW5jdGlvbiBIc2QoKXtIc2Q9Y2NiO0dzZD1hcygoQ3NkKCksT0MoR0MoTzMsMSksS2llLDIzNywwLFtCc2QseXNkLHpzZCx4c2QsQXNkLHZzZCx1c2Qsd3NkXSkpKX1cbmZ1bmN0aW9uIFhOYigpe1hOYj1jY2I7Vk5iPW5ldyBNc2QoJ2RlYnVnU1ZHJywoQmNiKCksZmFsc2UpKTtXTmI9bmV3IE1zZCgnb3ZlcmxhcHNFeGlzdGVkJyx0cnVlKX1cbmZ1bmN0aW9uIFh5YihhLGIpe3JldHVybiBBeWIobmV3IHR6YihhKSxuZXcgdnpiKGIpLG5ldyB4emIoYiksbmV3IHp6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW10pKX1cbmZ1bmN0aW9uIGh5Yigpe3ZhciBhO2lmKCFkeWIpe2R5Yj1uZXcgZ3liO2E9bmV3IHd5YignJyk7dXliKGEsKCR4YigpLFp4YikpO2V5YihkeWIsYSl9cmV0dXJuIGR5Yn1cbmZ1bmN0aW9uIGhyKGEsYil7dmFyIGM7UWIoYik7d2hpbGUoYS5PYigpKXtjPWEuUGIoKTtpZighUU5jKEJEKGMsMTApKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIFQzYyhhLGIpe3ZhciBjO2M9aDRjKG40YygpLGEpO2lmKGMpe2prZChiLChZOWMoKSxGOWMpLGMpO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1cbmZ1bmN0aW9uIGQzYyhhLGIpe3ZhciBjO2ZvcihjPTA7YzxiLmouYy5sZW5ndGg7YysrKXtCRChCMmMoYSxjKSwyMSkuR2MoQkQoQjJjKGIsYyksMTQpKX1yZXR1cm4gYX1cbmZ1bmN0aW9uIE05YihhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IG9sYihiLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyOSk7YS5hW2MucF09XyRiKGMpfX1cbmZ1bmN0aW9uIHN0YihhLGIpe3ZhciBjLGQ7dUNiKGIpO2ZvcihkPWEudmMoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDQyKTtiLk9kKGMuY2QoKSxjLmRkKCkpfX1cbmZ1bmN0aW9uIGNJZChhLGIpe3ZhciBjO2lmKEpEKGIsODMpKXtCRChhLmMsNzYpLlhqKCk7Yz1CRChiLDgzKTtJQWQoYSxjKX1lbHNle0JEKGEuYyw3NikuV2IoYil9fVxuZnVuY3Rpb24gU3UoYSl7cmV0dXJuIEpEKGEsMTUyKT9rbShCRChhLDE1MikpOkpEKGEsMTMxKT9CRChhLDEzMSkuYTpKRChhLDU0KT9uZXcgb3YoYSk6bmV3IGR2KGEpfVxuZnVuY3Rpb24gZmFjKGEsYil7cmV0dXJuIGI8YS5iLmdjKCk/QkQoYS5iLlhiKGIpLDEwKTpiPT1hLmIuZ2MoKT9hLmE6QkQoSWtiKGEuZSxiLWEuYi5nYygpLTEpLDEwKX1cbmZ1bmN0aW9uIGNyYihhLGIpe2EuYT13YmIoYS5hLDEpO2EuYz0kd25kLk1hdGgubWluKGEuYyxiKTthLmI9JHduZC5NYXRoLm1heChhLmIsYik7YS5kPXdiYihhLmQsYil9XG5mdW5jdGlvbiBuM2IoYSxiKXt2YXIgYztPZGQoYiwnRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsJywxKTtjPW0zYihhKTtsM2IoYyk7UWRkKGIpfVxuZnVuY3Rpb24gdEFkKGEpe3ZhciBiO2lmKGEuZD09bnVsbCl7KythLmU7YS5mPTA7c0FkKG51bGwpfWVsc2V7KythLmU7Yj1hLmQ7YS5kPW51bGw7YS5mPTA7c0FkKGIpfX1cbmZ1bmN0aW9uIHpiYihhKXt2YXIgYjtiPWEuaDtpZihiPT0wKXtyZXR1cm4gYS5sK2EubSpIamV9aWYoYj09RmplKXtyZXR1cm4gYS5sK2EubSpIamUtSWplfXJldHVybiBhfVxuZnVuY3Rpb24gYUtiKGEpeyRKYigpO2lmKGEuQS5IYygodGRkKCkscGRkKSkpe2lmKCFhLkIuSGMoKElkZCgpLERkZCkpKXtyZXR1cm4gX0piKGEpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFpnYihhKXt1Q2IoYSk7aWYoYS5sZW5ndGg9PTApe3Rocm93IHZiYihuZXcgT2ViKCdaZXJvIGxlbmd0aCBCaWdJbnRlZ2VyJykpfWRoYih0aGlzLGEpfVxuZnVuY3Rpb24gVmIoYSl7aWYoIWEpe3Rocm93IHZiYihuZXcgWmRiKCdubyBjYWxscyB0byBuZXh0KCkgc2luY2UgdGhlIGxhc3QgY2FsbCB0byByZW1vdmUoKScpKX19XG5mdW5jdGlvbiBDYmIoYSl7aWYoS2plPGEmJmE8SWplKXtyZXR1cm4gYTwwPyR3bmQuTWF0aC5jZWlsKGEpOiR3bmQuTWF0aC5mbG9vcihhKX1yZXR1cm4gemJiKGZEKGEpKX1cbmZ1bmN0aW9uIFl5YihhLGIpe3ZhciBjLGQsZTtjPWEuYy5FZSgpO2ZvcihlPWIuS2MoKTtlLk9iKCk7KXtkPWUuUGIoKTthLmEuT2QoYyxkKX1yZXR1cm4gYS5iLktiKGMpfVxuZnVuY3Rpb24gVWhkKGEsYil7dmFyIGMsZCxlO2M9YS5KZygpO2lmKGMhPW51bGwmJmEuTWcoKSl7Zm9yKGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2NbZF0udWkoYil9fX1cbmZ1bmN0aW9uIGZfYihhLGIpe3ZhciBjLGQ7Yz1hO2Q9UV9iKGMpLmU7d2hpbGUoZCl7Yz1kO2lmKGM9PWIpe3JldHVybiB0cnVlfWQ9UV9iKGMpLmV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gbERjKGEsYixjKXt2YXIgZCxlO2Q9YS5hLmZbYi5wXTtlPWEuYS5mW2MucF07aWYoZDxlKXtyZXR1cm4gLTF9aWYoZD09ZSl7cmV0dXJuIDB9cmV0dXJuIDF9XG5mdW5jdGlvbiBTaShhLGIsYyl7dmFyIGQsZTtlPUJEKHRuKGEuZCxiKSwxOSk7ZD1CRCh0bihhLmIsYyksMTkpO3JldHVybiAhZXx8IWQ/bnVsbDpNaShhLGUuYSxkLmEpfVxuZnVuY3Rpb24gY1ljKGEsYil7dmFyIGMsZDtmb3IoZD1uZXcgRnlkKGEpO2QuZSE9ZC5pLmdjKCk7KXtjPUJEKER5ZChkKSwzMyk7YmxkKGMsYy5pK2IuYixjLmorYi5kKX19XG5mdW5jdGlvbiBxamMoYSxiKXt2YXIgYyxkO2ZvcihkPW5ldyBvbGIoYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDcwKTtFa2IoYS5kLGMpO3VqYyhhLGMpfX1cbmZ1bmN0aW9uIHBRYyhhLGIpe3ZhciBjLGQ7ZD1uZXcgUmtiO2M9Yjtkb3tkLmNbZC5jLmxlbmd0aF09YztjPUJEKE9oYihhLmssYyksMTcpfXdoaWxlKGMpO3JldHVybiBkfVxuZnVuY3Rpb24gQWpkKGEsYil7dmFyIGM7aWYoKGEuRGImYikhPTApe2M9empkKGEsYik7cmV0dXJuIGM9PS0xP2EuRWI6Q0QoYS5FYilbY119ZWxzZXtyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBMbmQoYSxiKXt2YXIgYyxkO2M9KGQ9bmV3IGhMZCxkKTtjLkc9YjshYS5yYiYmKGEucmI9bmV3IGpVZChhLGQ1LGEpKTt3dGQoYS5yYixjKTtyZXR1cm4gY31cbmZ1bmN0aW9uIE1uZChhLGIpe3ZhciBjLGQ7Yz0oZD1uZXcgTVBkLGQpO2MuRz1iOyFhLnJiJiYoYS5yYj1uZXcgalVkKGEsZDUsYSkpO3d0ZChhLnJiLGMpO3JldHVybiBjfVxuZnVuY3Rpb24gSGtkKGEsYil7c3dpdGNoKGIpe2Nhc2UgMTpyZXR1cm4gISFhLm4mJmEubi5pIT0wO2Nhc2UgMjpyZXR1cm4gYS5rIT1udWxsO31yZXR1cm4gZGtkKGEsYil9XG5mdW5jdGlvbiBnTmMoYSl7c3dpdGNoKGEuYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBOTmM7Y2FzZSAzOnJldHVybiBuZXcgdlFjO2RlZmF1bHQ6cmV0dXJuIG5ldyB3TmM7fX1cbmZ1bmN0aW9uIE1SZChhKXt2YXIgYjtpZihhLmc+MXx8YS5PYigpKXsrK2EuYTthLmc9MDtiPWEuaTthLk9iKCk7cmV0dXJuIGJ9ZWxzZXt0aHJvdyB2YmIobmV3IHV0Yil9fVxuZnVuY3Rpb24ga05jKGEpe2ZOYygpO3ZhciBiO2lmKCFMcGIoZU5jLGEpKXtiPW5ldyBoTmM7Yi5hPWE7T3BiKGVOYyxhLGIpfXJldHVybiBCRChNcGIoZU5jLGEpLDYzNSl9XG5mdW5jdGlvbiBSYmIoYSl7dmFyIGIsYyxkLGU7ZT1hO2Q9MDtpZihlPDApe2UrPUlqZTtkPUZqZX1jPVFEKGUvSGplKTtiPVFEKGUtYypIamUpO3JldHVybiBUQyhiLGMsZCl9XG5mdW5jdGlvbiBPeChhKXt2YXIgYixjLGQ7ZD0wO2ZvcihjPW5ldyBHcWIoYS5hKTtjLmE8Yy5jLmEubGVuZ3RoOyl7Yj1GcWIoYyk7YS5iLkhjKGIpJiYrK2R9cmV0dXJuIGR9XG5mdW5jdGlvbiBLdShhKXt2YXIgYixjLGQ7Yj0xO2ZvcihkPWEuS2MoKTtkLk9iKCk7KXtjPWQuUGIoKTtiPTMxKmIrKGM9PW51bGw/MDp0YihjKSk7Yj1+fmJ9cmV0dXJuIGJ9XG5mdW5jdGlvbiBad2IoYSxiKXt2YXIgYzt0aGlzLmM9YTtjPW5ldyBSa2I7RXdiKGEsYyxiLGEuYixudWxsLGZhbHNlLG51bGwsZmFsc2UpO3RoaXMuYT1uZXcgQmliKGMsMCl9XG5mdW5jdGlvbiBwNGQoYSxiKXt0aGlzLmI9YTt0aGlzLmU9Yjt0aGlzLmQ9Yi5qO3RoaXMuZj0oUTZkKCksQkQoYSw2NikuT2ooKSk7dGhpcy5rPVM2ZChiLmUuVGcoKSxhKX1cbmZ1bmN0aW9uIHh3YihhLGIsYyl7dGhpcy5iPSh1Q2IoYSksYSk7dGhpcy5kPSh1Q2IoYiksYik7dGhpcy5lPSh1Q2IoYyksYyk7dGhpcy5jPXRoaXMuZCsoJycrdGhpcy5lKX1cbmZ1bmN0aW9uIHhSYigpe3RoaXMuYT1CRChLc2QoKHdTYigpLGVTYikpLDE5KS5hO3RoaXMuYz1FZGIoRUQoS3NkKHVTYikpKTt0aGlzLmI9RWRiKEVEKEtzZChxU2IpKSl9XG5mdW5jdGlvbiBOYmQoKXtOYmQ9Y2NiO01iZD1hcygoSGJkKCksT0MoR0MoQjEsMSksS2llLDkzLDAsW3piZCx5YmQsQmJkLEdiZCxGYmQsRWJkLENiZCxEYmQsQWJkXSkpKX1cbmZ1bmN0aW9uIHdGYigpe3dGYj1jY2I7dkZiPWFzKChyRmIoKSxPQyhHQyhkTiwxKSxLaWUsMjUwLDAsW3FGYixsRmIsbUZiLGtGYixvRmIscEZiLG5GYixqRmIsaUZiXSkpKX1cbmZ1bmN0aW9uIHZMYigpe3ZMYj1jY2I7dUxiPW5ldyB3TGIoJ1VQJywwKTtyTGI9bmV3IHdMYih2bGUsMSk7c0xiPW5ldyB3TGIoamxlLDIpO3RMYj1uZXcgd0xiKGtsZSwzKX1cbmZ1bmN0aW9uIHJUYygpe3JUYz1jY2I7cVRjPShTVGMoKSxRVGMpO3BUYz1uZXcgTnNkKFpxZSxxVGMpO29UYz0oJFRjKCksWlRjKTtuVGM9bmV3IE5zZCgkcWUsb1RjKX1cbmZ1bmN0aW9uIFhyYygpe1hyYz1jY2I7VnJjPW5ldyBZcmMoJ09ORV9TSURFRCcsMCk7V3JjPW5ldyBZcmMoJ1RXT19TSURFRCcsMSk7VXJjPW5ldyBZcmMoJ09GRicsMil9XG5mdW5jdGlvbiBUUWMoYSl7YS5yPW5ldyBUcWI7YS53PW5ldyBUcWI7YS50PW5ldyBSa2I7YS5pPW5ldyBSa2I7YS5kPW5ldyBUcWI7YS5hPW5ldyBJNmM7YS5jPW5ldyBMcWJ9XG5mdW5jdGlvbiB1T2MoYSl7dGhpcy5uPW5ldyBSa2I7dGhpcy5lPW5ldyBQc2I7dGhpcy5qPW5ldyBQc2I7dGhpcy5rPW5ldyBSa2I7dGhpcy5mPW5ldyBSa2I7dGhpcy5wPWF9XG5mdW5jdGlvbiBQRWMoYSxiKXtpZihhLmMpe1FFYyhhLGIsdHJ1ZSk7TUFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIsMTYpKSxuZXcgYkZjKGEpKX1RRWMoYSxiLGZhbHNlKX1cbmZ1bmN0aW9uIHdGYyhhLGIsYyl7cmV0dXJuIGE9PShyR2MoKSxxR2MpP25ldyBwRmM6Q3ViKGIsMSkhPTA/bmV3IGlIYyhjLmxlbmd0aCk6bmV3IFJHYyhjLmxlbmd0aCl9XG5mdW5jdGlvbiB0TmIoYSxiKXt2YXIgYztpZighYil7cmV0dXJuIGF9Yz1iLlZlKCk7Yy5kYygpfHwoIWEucT8oYS5xPW5ldyBOcWIoYykpOkxkKGEucSxjKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBFcmIoYSxiKXt2YXIgYztjPWEuYS5nZXQoYik7aWYoYz09PXVuZGVmaW5lZCl7KythLmR9ZWxzZXt1cmIoYS5hLGIpOy0tYS5jO3pwYihhLmIpfXJldHVybiBjfVxuZnVuY3Rpb24gVVliKGEsYil7dmFyIGMsZCxlO2M9Yi5wLWEucDtpZihjPT0wKXtkPWEuZi5hKmEuZi5iO2U9Yi5mLmEqYi5mLmI7cmV0dXJuIEtkYihkLGUpfXJldHVybiBjfVxuZnVuY3Rpb24gWExiKGEsYil7dmFyIGMsZDtjPWEuZi5jLmxlbmd0aDtkPWIuZi5jLmxlbmd0aDtpZihjPGQpe3JldHVybiAtMX1pZihjPT1kKXtyZXR1cm4gMH1yZXR1cm4gMX1cbmZ1bmN0aW9uIEtaYihhKXtpZihhLmIuYy5sZW5ndGghPTAmJiEhQkQoSWtiKGEuYiwwKSw3MCkuYSl7cmV0dXJuIEJEKElrYihhLmIsMCksNzApLmF9cmV0dXJuIEpaYihhKX1cbmZ1bmN0aW9uIFBxKGEpe3ZhciBiO2lmKGEpe2I9YTtpZihiLmRjKCkpe3Rocm93IHZiYihuZXcgdXRiKX1yZXR1cm4gYi5YYihiLmdjKCktMSl9cmV0dXJuIG5yKGEuS2MoKSl9XG5mdW5jdGlvbiB2Z2IoYSl7dmFyIGI7eWJiKGEsMCk8MCYmKGE9TGJiKGEpKTtyZXR1cm4gYj1UYmIoT2JiKGEsMzIpKSw2NC0oYiE9MD9oZWIoYik6aGViKFRiYihhKSkrMzIpfVxuZnVuY3Rpb24gUU5jKGEpe3ZhciBiO2I9QkQodk5iKGEsKHd0YygpLEhzYykpLDYxKTtyZXR1cm4gYS5rPT0oajBiKCksZTBiKSYmKGI9PShVY2QoKSxUY2QpfHxiPT16Y2QpfVxuZnVuY3Rpb24gYlpiKGEsYixjKXt2YXIgZCxlO2U9QkQodk5iKGEsKE55YygpLGp4YykpLDc0KTtpZihlKXtkPW5ldyBzN2M7bzdjKGQsMCxlKTtxN2MoZCxjKTt5ZShiLGQpfX1cbmZ1bmN0aW9uIE1fYihhLGIsYyl7dmFyIGQsZSxmLGc7Zz1RX2IoYSk7ZD1nLmQ7ZT1nLmM7Zj1hLm47YiYmKGYuYT1mLmEtZC5iLWUuYSk7YyYmKGYuYj1mLmItZC5kLWUuYil9XG5mdW5jdGlvbiBkY2MoYSxiKXt2YXIgYyxkO2M9YS5qO2Q9Yi5qO3JldHVybiBjIT1kP2MuZy1kLmc6YS5wPT1iLnA/MDpjPT0oVWNkKCksQWNkKT9hLnAtYi5wOmIucC1hLnB9XG5mdW5jdGlvbiBkbWMoYSl7dmFyIGIsYztibWMoYSk7Zm9yKGM9bmV3IG9sYihhLmQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMDEpOyEhYi5pJiZjbWMoYil9fVxuZnVuY3Rpb24gbEJjKGEsYixjLGQsZSl7TkMoYS5jW2IuZ10sYy5nLGQpO05DKGEuY1tjLmddLGIuZyxkKTtOQyhhLmJbYi5nXSxjLmcsZSk7TkMoYS5iW2MuZ10sYi5nLGUpfVxuZnVuY3Rpb24gRzFjKGEsYixjLGQpe0JEKGMuYiw2NSk7QkQoYy5iLDY1KTtCRChkLmIsNjUpO0JEKGQuYiw2NSk7QkQoZC5iLDY1KTtIa2IoZC5hLG5ldyBMMWMoYSxiLGQpKX1cbmZ1bmN0aW9uIFdEYihhLGIpe2EuZD09KGVhZCgpLGFhZCl8fGEuZD09ZGFkP0JEKGIuYSw1NykuYy5GYyhCRChiLmIsNTcpKTpCRChiLmIsNTcpLmMuRmMoQkQoYi5hLDU3KSl9XG5mdW5jdGlvbiBHa2QoYSxiLGMsZCl7aWYoYz09MSl7cmV0dXJuICFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpLFR4ZChhLm4sYixkKX1yZXR1cm4gY2tkKGEsYixjLGQpfVxuZnVuY3Rpb24gR25kKGEsYil7dmFyIGMsZDtkPShjPW5ldyBCWWQsYyk7cG5kKGQsYik7d3RkKCghYS5BJiYoYS5BPW5ldyBLNGQodTUsYSw3KSksYS5BKSxkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFpxZChhLGIsYyl7dmFyIGQsZSxmLGc7Zj1udWxsO2c9YjtlPVlwZChnLEp0ZSk7ZD1uZXcganJkKGEsYyk7Zj0obHFkKGQuYSxkLmIsZSksZSk7cmV0dXJuIGZ9XG5mdW5jdGlvbiBLSmQoYSl7dmFyIGI7aWYoIWEuYXx8KGEuQmImMSk9PTAmJmEuYS5raCgpKXtiPXdJZChhKTtKRChiLDE0OCkmJihhLmE9QkQoYiwxNDgpKX1yZXR1cm4gYS5hfVxuZnVuY3Rpb24gQmUoYSxiKXt2YXIgYyxkO3VDYihiKTtmb3IoZD1iLktjKCk7ZC5PYigpOyl7Yz1kLlBiKCk7aWYoIWEuSGMoYykpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBjRChhLGIpe3ZhciBjLGQsZTtjPWEubCtiLmw7ZD1hLm0rYi5tKyhjPj4yMik7ZT1hLmgrYi5oKyhkPj4yMik7cmV0dXJuIFRDKGMmRWplLGQmRWplLGUmRmplKX1cbmZ1bmN0aW9uIG5EKGEsYil7dmFyIGMsZCxlO2M9YS5sLWIubDtkPWEubS1iLm0rKGM+PjIyKTtlPWEuaC1iLmgrKGQ+PjIyKTtyZXR1cm4gVEMoYyZFamUsZCZFamUsZSZGamUpfVxuZnVuY3Rpb24gYmRiKGEpe3ZhciBiO2lmKGE8MTI4KXtiPShkZGIoKSxjZGIpW2FdOyFiJiYoYj1jZGJbYV09bmV3IFhjYihhKSk7cmV0dXJuIGJ9cmV0dXJuIG5ldyBYY2IoYSl9XG5mdW5jdGlvbiB1YmIoYSl7dmFyIGI7aWYoSkQoYSw3OCkpe3JldHVybiBhfWI9YSYmYS5fX2phdmEkZXhjZXB0aW9uO2lmKCFiKXtiPW5ldyBseihhKTtTeihiKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGJ0ZChhKXtpZihKRChhLDE4Nikpe3JldHVybiBCRChhLDExOCl9ZWxzZSBpZighYSl7dGhyb3cgdmJiKG5ldyBIZWIoZ3VlKSl9ZWxzZXtyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBaamIoYSxiKXtpZihiPT1udWxsKXtyZXR1cm4gZmFsc2V9d2hpbGUoYS5hIT1hLmIpe2lmKHBiKGIsdmtiKGEpKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGtpYihhKXtpZihhLmEuT2IoKSl7cmV0dXJuIHRydWV9aWYoYS5hIT1hLmQpe3JldHVybiBmYWxzZX1hLmE9bmV3IG9yYihhLmUuZik7cmV0dXJuIGEuYS5PYigpfVxuZnVuY3Rpb24gR2tiKGEsYil7dmFyIGMsZDtjPWIuUGMoKTtkPWMubGVuZ3RoO2lmKGQ9PTApe3JldHVybiBmYWxzZX1iQ2IoYS5jLGEuYy5sZW5ndGgsYyk7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBWeWIoYSxiLGMpe3ZhciBkLGU7Zm9yKGU9Yi52YygpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksNDIpO2EueWMoZC5jZCgpLGQuZGQoKSxjKX1yZXR1cm4gYX1cbmZ1bmN0aW9uIHlhYyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IG9sYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw3MCk7eU5iKGMsKHd0YygpLFNzYyksYil9fVxuZnVuY3Rpb24gRlpjKGEsYixjKXt2YXIgZCxlO2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMzMpO2JsZChkLGQuaStiLGQuaitjKX19XG5mdW5jdGlvbiBOYihhLGIpe2lmKCFhKXt0aHJvdyB2YmIobmV3IFdkYihoYygndmFsdWUgYWxyZWFkeSBwcmVzZW50OiAlcycsT0MoR0MoU0ksMSksVWhlLDEsNSxbYl0pKSkpfX1cbmZ1bmN0aW9uIG1FYihhLGIpe2lmKCFhfHwhYnx8YT09Yil7cmV0dXJuIGZhbHNlfXJldHVybiBDRGIoYS5kLmMsYi5kLmMrYi5kLmIpJiZDRGIoYi5kLmMsYS5kLmMrYS5kLmIpfVxuZnVuY3Rpb24geHliKCl7b3liKCk7aWYobHliKXtyZXR1cm4gbmV3IHd5YihudWxsKX1yZXR1cm4gZnliKGh5YigpLCdjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlN0cmluZ3MnKX1cbmZ1bmN0aW9uIEoyYyhhLGIpe3ZhciBjO2M9UHUoYi5hLmdjKCkpO01BYihWQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYiwxKSksYS5pKSxuZXcgVzJjKGEsYykpO3JldHVybiBjfVxuZnVuY3Rpb24gSG5kKGEpe3ZhciBiLGM7Yz0oYj1uZXcgQllkLGIpO3BuZChjLCdUJyk7d3RkKCghYS5kJiYoYS5kPW5ldyBLNGQodTUsYSwxMSkpLGEuZCksYyk7cmV0dXJuIGN9XG5mdW5jdGlvbiBFdGQoYSl7dmFyIGIsYyxkLGU7Yj0xO2ZvcihjPTAsZT1hLmdjKCk7YzxlOysrYyl7ZD1hLmtpKGMpO2I9MzEqYisoZD09bnVsbD8wOnRiKGQpKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIFdpKGEsYixjLGQpe3ZhciBlO1BiKGIsYS5lLkhkKCkuZ2MoKSk7UGIoYyxhLmMuSGQoKS5nYygpKTtlPWEuYVtiXVtjXTtOQyhhLmFbYl0sYyxkKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIE9DKGEsYixjLGQsZSl7ZS5nbT1hO2UuaG09YjtlLmltPWdjYjtlLl9fZWxlbWVudFR5cGVJZCQ9YztlLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9ZDtyZXR1cm4gZX1cbmZ1bmN0aW9uIHA2YyhhLGIsYyxkLGUpe2k2YygpO3JldHVybiAkd25kLk1hdGgubWluKEE2YyhhLGIsYyxkLGUpLEE2YyhjLGQsYSxiLFY2YyhuZXcgZjdjKGUuYSxlLmIpKSkpfVxuZnVuY3Rpb24gZ2JjKCl7Z2JjPWNjYjtmYmM9bmV3IGliYyhhbmUsMCk7ZGJjPW5ldyBpYmMoR25lLDEpO2ViYz1uZXcgaWJjKEhuZSwyKTtjYmM9bmV3IGliYygnQk9USCcsMyl9XG5mdW5jdGlvbiBBamMoKXtBamM9Y2NiO3dqYz1uZXcgQmpjKGdsZSwwKTt4amM9bmV3IEJqYyhqbGUsMSk7eWpjPW5ldyBCamMoa2xlLDIpO3pqYz1uZXcgQmpjKCdUT1AnLDMpfVxuZnVuY3Rpb24gbFdiKCl7bFdiPWNjYjtoV2I9bmV3IG9XYignUTEnLDApO2tXYj1uZXcgb1diKCdRNCcsMSk7aVdiPW5ldyBvV2IoJ1EyJywyKTtqV2I9bmV3IG9XYignUTMnLDMpfVxuZnVuY3Rpb24gTEJjKCl7TEJjPWNjYjtKQmM9bmV3IE1CYygnT0ZGJywwKTtLQmM9bmV3IE1CYygnU0lOR0xFX0VER0UnLDEpO0lCYz1uZXcgTUJjKCdNVUxUSV9FREdFJywyKX1cbmZ1bmN0aW9uIGExYygpe2ExYz1jY2I7XzBjPW5ldyBjMWMoJ01JTklNVU1fU1BBTk5JTkdfVFJFRScsMCk7JDBjPW5ldyBjMWMoJ01BWElNVU1fU1BBTk5JTkdfVFJFRScsMSl9XG5mdW5jdGlvbiBZMWMoKXtZMWM9Y2NiO25ldyBMc2QoJ29yZy5lY2xpcHNlLmVsay5hZGRMYXlvdXRDb25maWcnKTtXMWM9bmV3IGsyYztWMWM9bmV3IGYyYztYMWM9bmV3IGkyY31cbmZ1bmN0aW9uIFVSYyhhKXt2YXIgYixjLGQ7Yj1uZXcgUHNiO2ZvcihkPUpzYihhLmQsMCk7ZC5iIT1kLmQuYzspe2M9QkQoWHNiKGQpLDE4OCk7RHNiKGIsYy5jKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGRWYyhhKXt2YXIgYixjLGQsZTtlPW5ldyBSa2I7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDMzKTtiPWdWYyhjKTtHa2IoZSxiKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIHhjYyhhKXt2YXIgYjtQWmIoYSx0cnVlKTtiPV9pZTt3TmIoYSwoTnljKCksY3ljKSkmJihiKz1CRCh2TmIoYSxjeWMpLDE5KS5hKTt5TmIoYSxjeWMsbWViKGIpKX1cbmZ1bmN0aW9uIHExYyhhLGIsYyl7dmFyIGQ7VWhiKGEuYSk7SGtiKGMuaSxuZXcgQjFjKGEpKTtkPW5ldyBoRGIoQkQoT2hiKGEuYSxiLmIpLDY1KSk7cDFjKGEsZCxiKTtjLmY9ZH1cbmZ1bmN0aW9uIFFMYyhhLGIpe3ZhciBjLGQ7Yz1hLmM7ZD1iLmVbYS5wXTtpZihkPGMuYS5jLmxlbmd0aC0xKXtyZXR1cm4gQkQoSWtiKGMuYSxkKzEpLDEwKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHJyKGEsYil7dmFyIGMsZDtSYihiLCdwcmVkaWNhdGUnKTtmb3IoZD0wO2EuT2IoKTtkKyspe2M9YS5QYigpO2lmKGIuTGIoYykpe3JldHVybiBkfX1yZXR1cm4gLTF9XG5mdW5jdGlvbiBaRWQoYSxiKXt2YXIgYyxkO2Q9MDtpZihhPDY0JiZhPD1iKXtiPWI8NjQ/Yjo2Mztmb3IoYz1hO2M8PWI7YysrKXtkPU1iYihkLE5iYigxLGMpKX19cmV0dXJuIGR9XG5mdW5jdGlvbiBwbWIoYSl7bW1iKCk7dmFyIGIsYyxkO2Q9MDtmb3IoYz1hLktjKCk7Yy5PYigpOyl7Yj1jLlBiKCk7ZD1kKyhiIT1udWxsP3RiKGIpOjApO2Q9ZHwwfXJldHVybiBkfVxuZnVuY3Rpb24gZXRkKGEpe3ZhciBiLGM7Yz0oRmhkKCksYj1uZXcgcm1kLGIpOyEhYSYmd3RkKCghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLGMpO3JldHVybiBjfVxuZnVuY3Rpb24gVEEoYSl7dmFyIGI7Yj1uZXcgUEE7Yi5hPWE7Yi5iPVJBKGEpO2IuYz1LQyhaSSxuaWUsMiwyLDYsMSk7Yi5jWzBdPVNBKGEpO2IuY1sxXT1TQShhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIGZrZChhLGIpe3N3aXRjaChiKXtjYXNlIDA6IWEubyYmKGEubz1uZXcgZElkKChUaGQoKSxRaGQpLFMyLGEsMCkpO2Euby5jLiRiKCk7cmV0dXJuO31DaWQoYSxiKX1cbmZ1bmN0aW9uIGpFYihhLGIsYyl7c3dpdGNoKGMuZyl7Y2FzZSAyOmEuYj1iO2JyZWFrO2Nhc2UgMTphLmM9YjticmVhaztjYXNlIDQ6YS5kPWI7YnJlYWs7Y2FzZSAzOmEuYT1iO319XG5mdW5jdGlvbiBzYmQoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBvYmQ7Y2FzZSAyOnJldHVybiBuYmQ7Y2FzZSAzOnJldHVybiBwYmQ7ZGVmYXVsdDpyZXR1cm4gcWJkO319XG5mdW5jdGlvbiBaYWMoYSl7c3dpdGNoKEJEKHZOYihhLChOeWMoKSxteGMpKSwxNjMpLmcpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX1cbmZ1bmN0aW9uIFRyYygpe1RyYz1jY2I7U3JjPWFzKChPcmMoKSxPQyhHQyhQVywxKSxLaWUsMjU2LDAsW0ZyYyxIcmMsSXJjLEpyYyxLcmMsTHJjLE5yYyxFcmMsR3JjLE1yY10pKSl9XG5mdW5jdGlvbiBOZGQoKXtOZGQ9Y2NiO01kZD1hcygoSWRkKCksT0MoR0MoSjEsMSksS2llLDI1OSwwLFtCZGQsRGRkLEFkZCxFZGQsRmRkLEhkZCxHZGQsQ2RkLHpkZF0pKSl9XG5mdW5jdGlvbiB3VWMoKXt3VWM9Y2NiO3ZVYz1lM2MoYjNjKGIzYyhnM2MoZTNjKG5ldyBqM2MsKHlSYygpLHZSYyksKHFTYygpLHBTYykpLHdSYyksbVNjKSxuU2MpLHhSYyxvU2MpfVxuZnVuY3Rpb24gR3FjKCl7R3FjPWNjYjtFcWM9bmV3IEhxYyhhbmUsMCk7RHFjPW5ldyBIcWMoJ0lOQ09NSU5HX09OTFknLDEpO0ZxYz1uZXcgSHFjKCdPVVRHT0lOR19PTkxZJywyKX1cbmZ1bmN0aW9uIHJDKCl7ckM9Y2NiO3FDPXsnYm9vbGVhbic6c0MsJ251bWJlcic6dEMsJ3N0cmluZyc6dkMsJ29iamVjdCc6dUMsJ2Z1bmN0aW9uJzp1QywndW5kZWZpbmVkJzp3Q319XG5mdW5jdGlvbiBXaGIoYSxiKXttQ2IoYT49MCwnTmVnYXRpdmUgaW5pdGlhbCBjYXBhY2l0eScpO21DYihiPj0wLCdOb24tcG9zaXRpdmUgbG9hZCBmYWN0b3InKTtVaGIodGhpcyl9XG5mdW5jdGlvbiBfRWQoYSxiLGMpe2lmKGE+PTEyOClyZXR1cm4gZmFsc2U7cmV0dXJuIGE8NjQ/S2JiKHhiYihOYmIoMSxhKSxjKSwwKTpLYmIoeGJiKE5iYigxLGEtNjQpLGIpLDApfVxuZnVuY3Rpb24gYk9iKGEsYil7aWYoIWF8fCFifHxhPT1iKXtyZXR1cm4gZmFsc2V9cmV0dXJuIEp5KGEuYi5jLGIuYi5jK2IuYi5iKTwwJiZKeShiLmIuYyxhLmIuYythLmIuYik8MH1cbmZ1bmN0aW9uIEk0YihhKXt2YXIgYixjLGQ7Yz1hLm47ZD1hLm87Yj1hLmQ7cmV0dXJuIG5ldyBKNmMoYy5hLWIuYixjLmItYi5kLGQuYSsoYi5iK2IuYyksZC5iKyhiLmQrYi5hKSl9XG5mdW5jdGlvbiAkaWMoYSl7dmFyIGIsYyxkLGU7Zm9yKGM9YS5hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtkamMoYSxiLChVY2QoKSxSY2QpKTtkamMoYSxiLEFjZCl9fVxuZnVuY3Rpb24gVXkoYSl7dmFyIGIsYyxkLGU7Zm9yKGI9KGEuaj09bnVsbCYmKGEuaj0oUnooKSxlPVF6LmNlKGEpLFR6KGUpKSksYS5qKSxjPTAsZD1iLmxlbmd0aDtjPGQ7KytjKTt9XG5mdW5jdGlvbiBoRChhKXt2YXIgYixjLGQ7Yj1+YS5sKzEmRWplO2M9fmEubSsoYj09MD8xOjApJkVqZTtkPX5hLmgrKGI9PTAmJmM9PTA/MTowKSZGamU7cmV0dXJuIFRDKGIsYyxkKX1cbmZ1bmN0aW9uIEMkYyhhLGIpe3ZhciBjLGQ7Yz1CRChCRChPaGIoYS5nLGIuYSksNDYpLmEsNjUpO2Q9QkQoQkQoT2hiKGEuZyxiLmIpLDQ2KS5hLDY1KTtyZXR1cm4gX05iKGMsZCl9XG5mdW5jdGlvbiB4dGQoYSxiLGMpe3ZhciBkO2Q9YS5nYygpO2lmKGI+ZCl0aHJvdyB2YmIobmV3IEN5ZChiLGQpKTthLmhpKCkmJihjPUR0ZChhLGMpKTtyZXR1cm4gYS5WaChiLGMpfVxuZnVuY3Rpb24geE5iKGEsYixjKXtyZXR1cm4gYz09bnVsbD8oIWEucSYmKGEucT1uZXcgTHFiKSxUaGIoYS5xLGIpKTooIWEucSYmKGEucT1uZXcgTHFiKSxSaGIoYS5xLGIsYykpLGF9XG5mdW5jdGlvbiB5TmIoYSxiLGMpe2M9PW51bGw/KCFhLnEmJihhLnE9bmV3IExxYiksVGhiKGEucSxiKSk6KCFhLnEmJihhLnE9bmV3IExxYiksUmhiKGEucSxiLGMpKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFRRYihhKXt2YXIgYixjO2M9bmV3IGtSYjt0TmIoYyxhKTt5TmIoYywoSFNiKCksRlNiKSxhKTtiPW5ldyBMcWI7VlFiKGEsYyxiKTtVUWIoYSxjLGIpO3JldHVybiBjfVxuZnVuY3Rpb24gajZjKGEpe2k2YygpO3ZhciBiLGMsZDtjPUtDKG0xLG5pZSw4LDIsMCwxKTtkPTA7Zm9yKGI9MDtiPDI7YisrKXtkKz0wLjU7Y1tiXT1yNmMoZCxhKX1yZXR1cm4gY31cbmZ1bmN0aW9uIE1pYyhhLGIpe3ZhciBjLGQsZSxmO2M9ZmFsc2U7ZD1hLmFbYl0ubGVuZ3RoO2ZvcihmPTA7ZjxkLTE7ZisrKXtlPWYrMTtjPWN8TmljKGEsYixmLGUpfXJldHVybiBjfVxuZnVuY3Rpb24gbk5iKGEsYixjLGQsZSl7dmFyIGYsZztmb3IoZz1jO2c8PWU7ZysrKXtmb3IoZj1iO2Y8PWQ7ZisrKXtZTWIoYSxmLGcpfHxhTmIoYSxmLGcsdHJ1ZSxmYWxzZSl9fX1cbmZ1bmN0aW9uIHJOZChhLGIpe3RoaXMuYj1hO25OZC5jYWxsKHRoaXMsKEJEKHF1ZChaS2QoKE5GZCgpLE1GZCkubyksMTApLDE4KSxiLmkpLGIuZyk7dGhpcy5hPShOS2QoKSxNS2QpfVxuZnVuY3Rpb24gaGooYSxiKXt0aGlzLmM9YTt0aGlzLmQ9Yjt0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLkhkKCkuZ2MoKXwwO3RoaXMuYT10aGlzLmQldGhpcy5jLmMuSGQoKS5nYygpfVxuZnVuY3Rpb24gamRiKCl7KytlZGI7dGhpcy5vPW51bGw7dGhpcy5rPW51bGw7dGhpcy5qPW51bGw7dGhpcy5kPW51bGw7dGhpcy5iPW51bGw7dGhpcy5uPW51bGw7dGhpcy5hPW51bGx9XG5mdW5jdGlvbiBmQihhLGIsYyl7dGhpcy5xPW5ldyAkd25kLkRhdGU7dGhpcy5xLnNldEZ1bGxZZWFyKGErbmplLGIsYyk7dGhpcy5xLnNldEhvdXJzKDAsMCwwLDApO1lBKHRoaXMsMCl9XG5mdW5jdGlvbiB0QWMoKXt0QWM9Y2NiO3JBYz1uZXcgdUFjKGFuZSwwKTtxQWM9bmV3IHVBYygnTk9ERVNfQU5EX0VER0VTJywxKTtzQWM9bmV3IHVBYygnUFJFRkVSX0VER0VTJywyKX1cbmZ1bmN0aW9uIFJBKGEpe3ZhciBiO2lmKGE9PTApe3JldHVybiAnRXRjL0dNVCd9aWYoYTwwKXthPS1hO2I9J0V0Yy9HTVQtJ31lbHNle2I9J0V0Yy9HTVQrJ31yZXR1cm4gYitVQShhKX1cbmZ1bmN0aW9uIGdlYihhKXt2YXIgYjtpZihhPDApe3JldHVybiBSaWV9ZWxzZSBpZihhPT0wKXtyZXR1cm4gMH1lbHNle2ZvcihiPUlpZTsoYiZhKT09MDtiPj49MSk7cmV0dXJuIGJ9fVxuZnVuY3Rpb24gJEMoYSl7dmFyIGIsYztjPWhlYihhLmgpO2lmKGM9PTMyKXtiPWhlYihhLm0pO3JldHVybiBiPT0zMj9oZWIoYS5sKSszMjpiKzIwLTEwfWVsc2V7cmV0dXJuIGMtMTJ9fVxuZnVuY3Rpb24gYmtiKGEpe3ZhciBiO2I9YS5hW2EuYl07aWYoYj09bnVsbCl7cmV0dXJuIG51bGx9TkMoYS5hLGEuYixudWxsKTthLmI9YS5iKzEmYS5hLmxlbmd0aC0xO3JldHVybiBifVxuZnVuY3Rpb24gRURjKGEpe3ZhciBiLGM7Yj1hLnQtYS5rW2Euby5wXSphLmQrYS5qW2Euby5wXT5hLmY7Yz1hLnUrYS5lW2Euby5wXSphLmQ+YS5mKmEucyphLmQ7cmV0dXJuIGJ8fGN9XG5mdW5jdGlvbiBJd2IoYSxiLGMpe3ZhciBkLGU7ZD1uZXcgZXhiKGIsYyk7ZT1uZXcgZnhiO2EuYj1Hd2IoYSxhLmIsZCxlKTtlLmJ8fCsrYS5jO2EuYi5iPWZhbHNlO3JldHVybiBlLmR9XG5mdW5jdGlvbiBkamMoYSxiLGMpe3ZhciBkLGUsZixnO2c9Q0hjKGIsYyk7Zj0wO2ZvcihlPWcuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMSk7UmhiKGEuYyxkLG1lYihmKyspKX19XG5mdW5jdGlvbiB4VmIoYSl7dmFyIGIsYztmb3IoYz1uZXcgb2xiKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksODEpO2IuZy5jPS1iLmcuYy1iLmcuYn1zVmIoYSl9XG5mdW5jdGlvbiBYRGIoYSl7dmFyIGIsYztmb3IoYz1uZXcgb2xiKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksNTcpO2IuZC5jPS1iLmQuYy1iLmQuYn1SRGIoYSl9XG5mdW5jdGlvbiBBVWQoYSl7dmFyIGI7aWYoIWEuY3x8KGEuQmImMSk9PTAmJihhLmMuRGImNjQpIT0wKXtiPXdJZChhKTtKRChiLDg4KSYmKGEuYz1CRChiLDI2KSl9cmV0dXJuIGEuY31cbmZ1bmN0aW9uIFpDKGEpe3ZhciBiLGMsZDtiPX5hLmwrMSZFamU7Yz1+YS5tKyhiPT0wPzE6MCkmRWplO2Q9fmEuaCsoYj09MCYmYz09MD8xOjApJkZqZTthLmw9YjthLm09YzthLmg9ZH1cbmZ1bmN0aW9uIGw3YyhhKXt2YXIgYixjLGQsZSxmO2I9bmV3IGQ3Yztmb3IoZD1hLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtiLmErPWMuYTtiLmIrPWMuYn1yZXR1cm4gYn1cbmZ1bmN0aW9uIG5tYihhLGIpe21tYigpO3ZhciBjLGQsZSxmLGc7Zz1mYWxzZTtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtnPWd8YS5GYyhjKX1yZXR1cm4gZ31cbmZ1bmN0aW9uIHc2YyhhKXtpNmMoKTt2YXIgYixjO2M9LTEuNzk3NjkzMTM0ODYyMzE1N0UzMDg7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7YVtiXT5jJiYoYz1hW2JdKX1yZXR1cm4gY31cbmZ1bmN0aW9uIFNIYyhhLGIsYyl7dmFyIGQ7ZD1uZXcgUmtiO1VIYyhhLGIsZCwoVWNkKCksemNkKSx0cnVlLGZhbHNlKTtVSGMoYSxjLGQsVGNkLGZhbHNlLGZhbHNlKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIGNyZChhLGIsYyl7dmFyIGQsZSxmLGc7Zj1udWxsO2c9YjtlPVlwZChnLCdsYWJlbHMnKTtkPW5ldyBIcmQoYSxjKTtmPShEcWQoZC5hLGQuYixlKSxlKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIGoxZChhLGIsYyxkKXt2YXIgZTtlPXIxZChhLGIsYyxkKTtpZighZSl7ZT1pMWQoYSxjLGQpO2lmKCEhZSYmIWUxZChhLGIsZSkpe3JldHVybiBudWxsfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIG0xZChhLGIsYyxkKXt2YXIgZTtlPXMxZChhLGIsYyxkKTtpZighZSl7ZT1sMWQoYSxjLGQpO2lmKCEhZSYmIWUxZChhLGIsZSkpe3JldHVybiBudWxsfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIFhiKGEsYil7dmFyIGM7Zm9yKGM9MDtjPGEuYS5hLmxlbmd0aDtjKyspe2lmKCFCRCgkbGIoYS5hLGMpLDE2OSkuTGIoYikpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBDYihhLGIsYyl7UWIoYik7aWYoYy5PYigpKXtNZmIoYixGYihjLlBiKCkpKTt3aGlsZShjLk9iKCkpe01mYihiLGEuYSk7TWZiKGIsRmIoYy5QYigpKSl9fXJldHVybiBifVxuZnVuY3Rpb24gcW1iKGEpe21tYigpO3ZhciBiLGMsZDtkPTE7Zm9yKGM9YS5LYygpO2MuT2IoKTspe2I9Yy5QYigpO2Q9MzEqZCsoYiE9bnVsbD90YihiKTowKTtkPWR8MH1yZXR1cm4gZH1cbmZ1bmN0aW9uIFdDKGEsYixjLGQsZSl7dmFyIGY7Zj1sRChhLGIpO2MmJlpDKGYpO2lmKGUpe2E9WUMoYSxiKTtkPyhRQz1oRChhKSk6KFFDPVRDKGEubCxhLm0sYS5oKSl9cmV0dXJuIGZ9XG5mdW5jdGlvbiBYemIoYixjKXt2YXIgZDt0cnl7Yy5WZCgpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzgpKXtkPWE7Yi5jW2IuYy5sZW5ndGhdPWR9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24galJiKGEsYixjKXt2YXIgZCxlO2lmKEpEKGIsMTQ0KSYmISFjKXtkPUJEKGIsMTQ0KTtlPWM7cmV0dXJuIGEuYVtkLmJdW2UuYl0rYS5hW2UuYl1bZC5iXX1yZXR1cm4gMH1cbmZ1bmN0aW9uIHhsZChhLGIpe3N3aXRjaChiKXtjYXNlIDc6cmV0dXJuICEhYS5lJiZhLmUuaSE9MDtjYXNlIDg6cmV0dXJuICEhYS5kJiZhLmQuaSE9MDt9cmV0dXJuIFlrZChhLGIpfVxuZnVuY3Rpb24gWVFiKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAwOkpEKGEuYiw2MzEpfHwoYS5iPW5ldyB4UmIpO2JyZWFrO2Nhc2UgMTpKRChhLmIsNjMyKXx8KGEuYj1uZXcgRFJiKTt9fVxuZnVuY3Rpb24gR2hlKGEsYil7d2hpbGUoYS5nPT1udWxsJiYhYS5jP1V1ZChhKTphLmc9PW51bGx8fGEuaSE9MCYmQkQoYS5nW2EuaS0xXSw0NykuT2IoKSl7T3JkKGIsVnVkKGEpKX19XG5mdW5jdGlvbiBraWMoYSxiLGMpe2EuZz1xaWMoYSxiLChVY2QoKSx6Y2QpLGEuYik7YS5kPXFpYyhhLGMsemNkLGEuYik7aWYoYS5nLmM9PTB8fGEuZC5jPT0wKXtyZXR1cm59bmljKGEpfVxuZnVuY3Rpb24gbGljKGEsYixjKXthLmc9cWljKGEsYiwoVWNkKCksVGNkKSxhLmopO2EuZD1xaWMoYSxjLFRjZCxhLmopO2lmKGEuZy5jPT0wfHxhLmQuYz09MCl7cmV0dXJufW5pYyhhKX1cbmZ1bmN0aW9uICR5YyhhLGIsYyl7cmV0dXJuICFXQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuYywxNikpLG5ldyBYeGIobmV3IGRmZChiLGMpKSkpLnNkKChFQWIoKSxEQWIpKX1cbmZ1bmN0aW9uIEtBYihhKXt2YXIgYjtUemIoYSk7Yj1uZXcgTkJiO2lmKGEuYS5zZChiKSl7cmV0dXJuIEF0YigpLG5ldyBGdGIodUNiKGIuYSkpfXJldHVybiBBdGIoKSxBdGIoKSx6dGJ9XG5mdW5jdGlvbiBuQShhKXt2YXIgYjtpZihhLmI8PTApe3JldHVybiBmYWxzZX1iPWhmYignTUx5ZGhIbXNTRGtLJyx3ZmIoYmZiKGEuYywwKSkpO3JldHVybiBiPjF8fGI+PTAmJmEuYjwzfVxuZnVuY3Rpb24gdzdjKGEpe3ZhciBiLGMsZDtiPW5ldyBzN2M7Zm9yKGQ9SnNiKGEsMCk7ZC5iIT1kLmQuYzspe2M9QkQoWHNiKGQpLDgpO1N0KGIsMCxuZXcgZzdjKGMpKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHFWYihhKXt2YXIgYixjO2ZvcihjPW5ldyBvbGIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw4MSk7Yi5mLiRiKCl9TFZiKGEuYixhKTtyVmIoYSl9XG5mdW5jdGlvbiB0YihhKXtyZXR1cm4gTkQoYSk/TENiKGEpOkxEKGEpP0hkYihhKTpLRChhKT8odUNiKGEpLGEpPzEyMzE6MTIzNzpJRChhKT9hLkhiKCk6TUMoYSk/RkNiKGEpOnJ6KGEpfVxuZnVuY3Rpb24gcmIoYSl7cmV0dXJuIE5EKGEpP1pJOkxEKGEpP0JJOktEKGEpP3dJOklEKGEpP2EuZ206TUMoYSk/YS5nbTphLmdtfHxBcnJheS5pc0FycmF5KGEpJiZHQyhQSCwxKXx8UEh9XG5mdW5jdGlvbiBqX2MoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgUTFjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoTXJlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fVxuZnVuY3Rpb24gUzBjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGsxYztkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKE1yZSsoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX1cbmZ1bmN0aW9uIGVrZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMDohYS5vJiYoYS5vPW5ldyBkSWQoKFRoZCgpLFFoZCksUzIsYSwwKSk7Y0lkKGEubyxjKTtyZXR1cm47fXlpZChhLGIsYyl9XG5mdW5jdGlvbiBYUmMoYSxiLGMpe3RoaXMuZz1hO3RoaXMuZT1uZXcgZDdjO3RoaXMuZj1uZXcgZDdjO3RoaXMuZD1uZXcgUHNiO3RoaXMuYj1uZXcgUHNiO3RoaXMuYT1iO3RoaXMuYz1jfVxuZnVuY3Rpb24gUFpjKGEsYixjLGQpe3RoaXMuYj1uZXcgUmtiO3RoaXMubj1uZXcgUmtiO3RoaXMuaT1kO3RoaXMuaj1jO3RoaXMucz1hO3RoaXMudD1iO3RoaXMucj0wO3RoaXMuZD0wfVxuZnVuY3Rpb24gbmliKGEpe3RoaXMuZT1hO3RoaXMuZD1uZXcgSXJiKHRoaXMuZS5nKTt0aGlzLmE9dGhpcy5kO3RoaXMuYj1raWIodGhpcyk7dGhpcy4kbW9kQ291bnQ9YS4kbW9kQ291bnR9XG5mdW5jdGlvbiBQcihhKXt3aGlsZSghYS5kfHwhYS5kLk9iKCkpe2lmKCEhYS5iJiYhYWtiKGEuYikpe2EuZD1CRChma2IoYS5iKSw0Nyl9ZWxzZXtyZXR1cm4gbnVsbH19cmV0dXJuIGEuZH1cbmZ1bmN0aW9uIFh5YyhhKXtFa2IoYS5jLChZMWMoKSxXMWMpKTtpZihLeShhLmEsRWRiKEVEKEtzZCgoZHpjKCksYnpjKSkpKSkpe3JldHVybiBuZXcgWmVkfXJldHVybiBuZXcgX2VkKGEpfVxuZnVuY3Rpb24gYlJjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4gU3FlO2RlZmF1bHQ6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gY21lO2Nhc2UgNDpyZXR1cm4gVHFlO319XG5mdW5jdGlvbiBJZmUoKXt3ZmUoKTt2YXIgYTtpZihkZmUpcmV0dXJuIGRmZTthPUFmZShLZmUoJ00nLHRydWUpKTthPUJmZShLZmUoJ00nLGZhbHNlKSxhKTtkZmU9YTtyZXR1cm4gZGZlfVxuZnVuY3Rpb24gQXdiKGEsYil7dmFyIGMsZCxlO2U9YS5iO3doaWxlKGUpe2M9YS5hLnVlKGIsZS5kKTtpZihjPT0wKXtyZXR1cm4gZX1kPWM8MD8wOjE7ZT1lLmFbZF19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBUeWIoYSxiLGMpe3ZhciBkLGU7ZD0oQmNiKCksX1BiKGMpP3RydWU6ZmFsc2UpO2U9QkQoYi54YyhkKSwxNSk7aWYoIWUpe2U9bmV3IFJrYjtiLnpjKGQsZSl9ZS5GYyhjKX1cbmZ1bmN0aW9uIGRZYyhhLGIpe3ZhciBjLGQ7Yz1CRChoa2QoYSwobFpjKCksVVljKSksMTkpLmE7ZD1CRChoa2QoYixVWWMpLDE5KS5hO3JldHVybiBjPT1kPy0xOmM8ZD8tMTpjPmQ/MTowfVxuZnVuY3Rpb24gTlliKGEsYil7aWYoT1liKGEsYikpe1JjKGEuYixCRCh2TmIoYiwod3RjKCksRXNjKSksMjEpLGIpO0RzYihhLmEsYik7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gZDNiKGEpe3ZhciBiLGM7Yj1CRCh2TmIoYSwod3RjKCksZ3RjKSksMTApO2lmKGIpe2M9Yi5jO0xrYihjLmEsYik7Yy5hLmMubGVuZ3RoPT0wJiZMa2IoUV9iKGIpLmIsYyl9fVxuZnVuY3Rpb24gc3liKGEpe2lmKGx5Yil7cmV0dXJuIEtDKHFMLHRrZSw1NzIsMCwwLDEpfXJldHVybiBCRChRa2IoYS5hLEtDKHFMLHRrZSw1NzIsYS5hLmMubGVuZ3RoLDAsMSkpLDg0Mil9XG5mdW5jdGlvbiBtbihhLGIsYyxkKXtWbSgpO3JldHVybiBuZXcgd3goT0MoR0MoQ0ssMSksemllLDQyLDAsWyhXaihhLGIpLG5ldyBXbyhhLGIpKSwoV2ooYyxkKSxuZXcgV28oYyxkKSldKSl9XG5mdW5jdGlvbiBEbmQoYSxiLGMpe3ZhciBkLGU7ZT0oZD1uZXcgU1NkLGQpOyRuZChlLGIsYyk7d3RkKCghYS5xJiYoYS5xPW5ldyBjVWQobjUsYSwxMSwxMCkpLGEucSksZSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBabWQoYSl7dmFyIGIsYyxkLGU7ZT1pY2IoUm1kLGEpO2M9ZS5sZW5ndGg7ZD1LQyhaSSxuaWUsMixjLDYsMSk7Zm9yKGI9MDtiPGM7KytiKXtkW2JdPWVbYl19cmV0dXJuIGR9XG5mdW5jdGlvbiBsNGMoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2c9bmV3IHY0YyhhKTtjLlFlKGcpO3E0YyhnKX1VaGIoYS5mKX1cbmZ1bmN0aW9uIGh3KGEsYil7dmFyIGM7aWYoYj09PWEpe3JldHVybiB0cnVlfWlmKEpEKGIsMjI0KSl7Yz1CRChiLDIyNCk7cmV0dXJuIHBiKGEuWmIoKSxjLlpiKCkpfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGF1YihhLGIpe3ZhciBjO2lmKGIqMisxPj1hLmIuYy5sZW5ndGgpe3JldHVybn1hdWIoYSwyKmIrMSk7Yz0yKmIrMjtjPGEuYi5jLmxlbmd0aCYmYXViKGEsYyk7YnViKGEsYil9XG5mdW5jdGlvbiBTcyhhLGIsYyl7dmFyIGQsZTt0aGlzLmc9YTt0aGlzLmM9Yjt0aGlzLmE9dGhpczt0aGlzLmQ9dGhpcztlPUtwKGMpO2Q9S0MoQkcsR2llLDMzMCxlLDAsMSk7dGhpcy5iPWR9XG5mdW5jdGlvbiB3aGIoYSxiLGMpe3ZhciBkO2ZvcihkPWMtMTtkPj0wJiZhW2RdPT09YltkXTtkLS0pO3JldHVybiBkPDA/MDpHYmIoeGJiKGFbZF0sWWplKSx4YmIoYltkXSxZamUpKT8tMToxfVxuZnVuY3Rpb24gVUZjKGEsYil7dmFyIGMsZDtmb3IoZD1Kc2IoYSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksMjE0KTtpZihjLmUubGVuZ3RoPjApe2IudGQoYyk7Yy5pJiZfRmMoYyl9fX1cbmZ1bmN0aW9uIG56ZChhLGIpe3ZhciBjLGQ7ZD1CRChBamQoYS5hLDQpLDEyNik7Yz1LQygkMyxodmUsNDE1LGIsMCwxKTtkIT1udWxsJiYkZmIoZCwwLGMsMCxkLmxlbmd0aCk7cmV0dXJuIGN9XG5mdW5jdGlvbiBKRWQoYSxiKXt2YXIgYztjPW5ldyBORWQoKGEuZiYyNTYpIT0wLGEuaSxhLmEsYS5kLChhLmYmMTYpIT0wLGEuaixhLmcsYik7YS5lIT1udWxsfHwoYy5jPWEpO3JldHVybiBjfVxuZnVuY3Rpb24gRGMoYSxiKXt2YXIgYyxkO2ZvcihkPWEuWmIoKS5DYygpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTQpO2lmKGMuSGMoYikpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBvTmIoYSxiLGMsZCxlKXt2YXIgZixnO2ZvcihnPWM7Zzw9ZTtnKyspe2ZvcihmPWI7Zjw9ZDtmKyspe2lmKFlNYihhLGYsZykpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gVHQoYSxiLGMpe3ZhciBkLGUsZixnO3VDYihjKTtnPWZhbHNlO2Y9YS5aYyhiKTtmb3IoZT1jLktjKCk7ZS5PYigpOyl7ZD1lLlBiKCk7Zi5SYihkKTtnPXRydWV9cmV0dXJuIGd9XG5mdW5jdGlvbiBEdihhLGIpe3ZhciBjO2lmKGE9PT1iKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKEpEKGIsODMpKXtjPUJEKGIsODMpO3JldHVybiBBeChXbShhKSxjLnZjKCkpfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIE5oYihhLGIsYyl7dmFyIGQsZTtmb3IoZT1jLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksNDIpO2lmKGEucmUoYixkLmRkKCkpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gSGljKGEsYixjKXtpZighYS5kW2IucF1bYy5wXSl7R2ljKGEsYixjKTthLmRbYi5wXVtjLnBdPXRydWU7YS5kW2MucF1bYi5wXT10cnVlfXJldHVybiBhLmFbYi5wXVtjLnBdfVxuZnVuY3Rpb24gSXRkKGEsYil7aWYoIWEuYWkoKSYmYj09bnVsbCl7dGhyb3cgdmJiKG5ldyBXZGIoXCJUaGUgJ25vIG51bGwnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWRcIikpfXJldHVybiBifVxuZnVuY3Rpb24gJEpkKGEsYil7aWYoYS5EPT1udWxsJiZhLkIhPW51bGwpe2EuRD1hLkI7YS5CPW51bGx9aktkKGEsYj09bnVsbD9udWxsOih1Q2IoYiksYikpOyEhYS5DJiZhLnlrKG51bGwpfVxuZnVuY3Rpb24gWEhjKGEsYil7dmFyIGM7aWYoIWF8fGE9PWJ8fCF3TmIoYiwod3RjKCksUHNjKSkpe3JldHVybiBmYWxzZX1jPUJEKHZOYihiLCh3dGMoKSxQc2MpKSwxMCk7cmV0dXJuIGMhPWF9XG5mdW5jdGlvbiBiNGQoYSl7c3dpdGNoKGEuaSl7Y2FzZSAyOntyZXR1cm4gdHJ1ZX1jYXNlIDE6e3JldHVybiBmYWxzZX1jYXNlIC0xOnsrK2EuY31kZWZhdWx0OntyZXR1cm4gYS5wbCgpfX19XG5mdW5jdGlvbiBjNGQoYSl7c3dpdGNoKGEuaSl7Y2FzZSAtMjp7cmV0dXJuIHRydWV9Y2FzZSAtMTp7cmV0dXJuIGZhbHNlfWNhc2UgMTp7LS1hLmN9ZGVmYXVsdDp7cmV0dXJuIGEucWwoKX19fVxuZnVuY3Rpb24gWGRiKGEpe1p5LmNhbGwodGhpcywnVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLicsYSl9XG5mdW5jdGlvbiBwZ2QoKXtwZ2Q9Y2NiO21nZD1uZXcgcWdkKCdFTEsnLDApO25nZD1uZXcgcWdkKCdKU09OJywxKTtsZ2Q9bmV3IHFnZCgnRE9UJywyKTtvZ2Q9bmV3IHFnZCgnU1ZHJywzKX1cbmZ1bmN0aW9uIHBXYygpe3BXYz1jY2I7bVdjPW5ldyByV2MoYW5lLDApO25XYz1uZXcgcldjKCdSQURJQUxfQ09NUEFDVElPTicsMSk7b1djPW5ldyByV2MoJ1dFREdFX0NPTVBBQ1RJT04nLDIpfVxuZnVuY3Rpb24gRnliKCl7RnliPWNjYjtDeWI9bmV3IEd5YignQ09OQ1VSUkVOVCcsMCk7RHliPW5ldyBHeWIoJ0lERU5USVRZX0ZJTklTSCcsMSk7RXliPW5ldyBHeWIoJ1VOT1JERVJFRCcsMil9XG5mdW5jdGlvbiBuUGIoKXtuUGI9Y2NiO2tQYj0oY1BiKCksYlBiKTtqUGI9bmV3IE5zZChUbGUsa1BiKTtpUGI9bmV3IExzZChVbGUpO2xQYj1uZXcgTHNkKFZsZSk7bVBiPW5ldyBMc2QoV2xlKX1cbmZ1bmN0aW9uIE9jYygpe09jYz1jY2I7TWNjPW5ldyBaY2M7TmNjPW5ldyBfY2M7TGNjPW5ldyBiZGM7S2NjPW5ldyBmZGM7SmNjPW5ldyBqZGM7SWNjPSh1Q2IoSmNjKSxuZXcgYnBiKX1cbmZ1bmN0aW9uIHRCYygpe3RCYz1jY2I7cUJjPW5ldyB1QmMoJ0NPTlNFUlZBVElWRScsMCk7ckJjPW5ldyB1QmMoJ0NPTlNFUlZBVElWRV9TT0ZUJywxKTtzQmM9bmV3IHVCYygnU0xPUFBZJywyKX1cbmZ1bmN0aW9uIFphZCgpe1phZD1jY2I7WGFkPW5ldyBxMGIoMTUpO1dhZD1uZXcgT3NkKChZOWMoKSxmOWMpLFhhZCk7WWFkPUM5YztTYWQ9czhjO1RhZD1ZOGM7VmFkPV84YztVYWQ9JDhjfVxuZnVuY3Rpb24gbzdjKGEsYixjKXt2YXIgZCxlLGY7ZD1uZXcgUHNiO2ZvcihmPUpzYihjLDApO2YuYiE9Zi5kLmM7KXtlPUJEKFhzYihmKSw4KTtEc2IoZCxuZXcgZzdjKGUpKX1UdChhLGIsZCl9XG5mdW5jdGlvbiByN2MoYSl7dmFyIGIsYyxkO2I9MDtkPUtDKG0xLG5pZSw4LGEuYiwwLDEpO2M9SnNiKGEsMCk7d2hpbGUoYy5iIT1jLmQuYyl7ZFtiKytdPUJEKFhzYihjKSw4KX1yZXR1cm4gZH1cbmZ1bmN0aW9uICRQZChhKXt2YXIgYjtiPSghYS5hJiYoYS5hPW5ldyBjVWQoZzUsYSw5LDUpKSxhLmEpO2lmKGIuaSE9MCl7cmV0dXJuIG5RZChCRChxdWQoYiwwKSw2NzgpKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIEx5KGEsYil7dmFyIGM7Yz13YmIoYSxiKTtpZihHYmIoVmJiKGEsYiksMCl8RWJiKFZiYihhLGMpLDApKXtyZXR1cm4gY31yZXR1cm4gd2JiKHJpZSxWYmIoUGJiKGMsNjMpLDEpKX1cbmZ1bmN0aW9uIFl5YyhhLGIpe3ZhciBjO2M9S3NkKChkemMoKSxiemMpKSE9bnVsbCYmYi53ZygpIT1udWxsP0VkYihFRChiLndnKCkpKS9FZGIoRUQoS3NkKGJ6YykpKToxO1JoYihhLmIsYixjKX1cbmZ1bmN0aW9uIGxlKGEsYil7dmFyIGMsZDtjPUJEKGEuZC5CYyhiKSwxNCk7aWYoIWMpe3JldHVybiBudWxsfWQ9YS5lLmhjKCk7ZC5HYyhjKTthLmUuZC09Yy5nYygpO2MuJGIoKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIEFIYyhhLGIpe3ZhciBjLGQ7ZD1hLmNbYl07aWYoZD09MCl7cmV0dXJufWEuY1tiXT0wO2EuZC09ZDtjPWIrMTt3aGlsZShjPGEuYS5sZW5ndGgpe2EuYVtjXS09ZDtjKz1jJi1jfX1cbmZ1bmN0aW9uIHJ3YihhKXt2YXIgYjtiPWEuYS5jLmxlbmd0aDtpZihiPjApe3JldHVybiBfdmIoYi0xLGEuYS5jLmxlbmd0aCksS2tiKGEuYSxiLTEpfWVsc2V7dGhyb3cgdmJiKG5ldyBKcGIpfX1cbmZ1bmN0aW9uIEMyYyhhLGIsYyl7aWYoYjwwKXt0aHJvdyB2YmIobmV3IHFjYihlc2UrYikpfWlmKGI8YS5qLmMubGVuZ3RoKXtOa2IoYS5qLGIsYyl9ZWxzZXtBMmMoYSxiKTtFa2IoYS5qLGMpfX1cbmZ1bmN0aW9uIG9DYihhLGIsYyl7aWYoYT5iKXt0aHJvdyB2YmIobmV3IFdkYih4a2UrYSt5a2UrYikpfWlmKGE8MHx8Yj5jKXt0aHJvdyB2YmIobmV3IHNjYih4a2UrYSt6a2UrYitva2UrYykpfX1cbmZ1bmN0aW9uIGo1YyhhKXtpZighYS5hfHwoYS5hLmkmOCk9PTApe3Rocm93IHZiYihuZXcgWmRiKCdFbnVtZXJhdGlvbiBjbGFzcyBleHBlY3RlZCBmb3IgbGF5b3V0IG9wdGlvbiAnK2EuZikpfX1cbmZ1bmN0aW9uIHZ1ZChhKXt2YXIgYjsrK2EuajtpZihhLmk9PTApe2EuZz1udWxsfWVsc2UgaWYoYS5pPGEuZy5sZW5ndGgpe2I9YS5nO2EuZz1hLnJpKGEuaSk7JGZiKGIsMCxhLmcsMCxhLmkpfX1cbmZ1bmN0aW9uIGhrYihhLGIpe3ZhciBjLGQ7Yz1hLmEubGVuZ3RoLTE7YS5jPWEuYy0xJmM7d2hpbGUoYiE9YS5jKXtkPWIrMSZjO05DKGEuYSxiLGEuYVtkXSk7Yj1kfU5DKGEuYSxhLmMsbnVsbCl9XG5mdW5jdGlvbiBpa2IoYSxiKXt2YXIgYyxkO2M9YS5hLmxlbmd0aC0xO3doaWxlKGIhPWEuYil7ZD1iLTEmYztOQyhhLmEsYixhLmFbZF0pO2I9ZH1OQyhhLmEsYS5iLG51bGwpO2EuYj1hLmIrMSZjfVxuZnVuY3Rpb24gRmtiKGEsYixjKXt2YXIgZCxlO3dDYihiLGEuYy5sZW5ndGgpO2Q9Yy5QYygpO2U9ZC5sZW5ndGg7aWYoZT09MCl7cmV0dXJuIGZhbHNlfWJDYihhLmMsYixkKTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIFZFZChhKXt2YXIgYixjO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGI9MCxjPWEubGVuZ3RoO2I8YztiKyspe2lmKCFnRmQoYVtiXSkpcmV0dXJuIGFbYl19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBncmIoYSxiLGMpe3ZhciBkLGUsZixnO2ZvcihlPWMsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO2lmKGEuYi5yZShiLGQuY2QoKSkpe3JldHVybiBkfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIEhsYihhKXt2YXIgYixjLGQsZSxmO2Y9MTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtmPTMxKmYrKGIhPW51bGw/dGIoYik6MCk7Zj1mfDB9cmV0dXJuIGZ9XG5mdW5jdGlvbiBhcyhhKXt2YXIgYixjLGQsZSxmO2I9e307Zm9yKGQ9YSxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07YlsnOicrKGMuZiE9bnVsbD9jLmY6JycrYy5nKV09Y31yZXR1cm4gYn1cbmZ1bmN0aW9uIGdyKGEpe3ZhciBiO1FiKGEpO01iKHRydWUsJ251bWJlclRvQWR2YW5jZSBtdXN0IGJlIG5vbm5lZ2F0aXZlJyk7Zm9yKGI9MDtiPDAmJlFyKGEpO2IrKyl7UnIoYSl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBlRGMoYSl7dmFyIGIsYyxkO2Q9MDtmb3IoYz1uZXcgU3IodXIoYS5hLktjKCksbmV3IFNxKSk7UXIoYyk7KXtiPUJEKFJyKGMpLDE3KTtiLmMuaT09Yi5kLml8fCsrZH1yZXR1cm4gZH1cbmZ1bmN0aW9uIEhaYihhLGIpe3ZhciBjLGQsZTtjPWE7ZT0wO2Rve2lmKGM9PWIpe3JldHVybiBlfWQ9Yy5lO2lmKCFkKXt0aHJvdyB2YmIobmV3IFZkYil9Yz1RX2IoZCk7KytlfXdoaWxlKHRydWUpfVxuZnVuY3Rpb24gdyRjKGEsYil7dmFyIGMsZCxlO2U9Yi1hLmY7Zm9yKGQ9bmV3IG9sYihhLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw0NDMpO19aYyhjLGMuZSxjLmYrZSl9YS5mPWJ9XG5mdW5jdGlvbiBhUmMoYSxiLGMpe2lmKCR3bmQuTWF0aC5hYnMoYi1hKTxScWV8fCR3bmQuTWF0aC5hYnMoYy1hKTxScWUpe3JldHVybiB0cnVlfXJldHVybiBiLWE+UnFlP2EtYz5ScWU6Yy1hPlJxZX1cbmZ1bmN0aW9uIHBIYihhLGIpe2lmKCFhKXtyZXR1cm4gMH1pZihiJiYhYS5qKXtyZXR1cm4gMH1pZihKRChhLDEyNCkpe2lmKEJEKGEsMTI0KS5hLmI9PTApe3JldHVybiAwfX1yZXR1cm4gYS5SZSgpfVxuZnVuY3Rpb24gcUhiKGEsYil7aWYoIWEpe3JldHVybiAwfWlmKGImJiFhLmspe3JldHVybiAwfWlmKEpEKGEsMTI0KSl7aWYoQkQoYSwxMjQpLmEuYT09MCl7cmV0dXJuIDB9fXJldHVybiBhLlNlKCl9XG5mdW5jdGlvbiBmaGIoYSl7SGdiKCk7aWYoYTwwKXtpZihhIT0tMSl7cmV0dXJuIG5ldyBUZ2IoLTEsLWEpfXJldHVybiBCZ2J9ZWxzZSByZXR1cm4gYTw9MTA/RGdiW1FEKGEpXTpuZXcgVGdiKDEsYSl9XG5mdW5jdGlvbiB4QyhhKXtyQygpO3Rocm93IHZiYihuZXcgTUIoXCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJ1wiK2ErXCInOyBwbGVhc2UgcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBHV1QgdGVhbVwiKSl9XG5mdW5jdGlvbiBseihhKXtqeigpO1B5KHRoaXMpO1J5KHRoaXMpO3RoaXMuZT1hO1N5KHRoaXMsYSk7dGhpcy5nPWE9PW51bGw/WGhlOmZjYihhKTt0aGlzLmE9Jyc7dGhpcy5iPWE7dGhpcy5hPScnfVxuZnVuY3Rpb24gRiRjKCl7dGhpcy5hPW5ldyBHJGM7dGhpcy5mPW5ldyBJJGModGhpcyk7dGhpcy5iPW5ldyBLJGModGhpcyk7dGhpcy5pPW5ldyBNJGModGhpcyk7dGhpcy5lPW5ldyBPJGModGhpcyl9XG5mdW5jdGlvbiBzcygpe3JzLmNhbGwodGhpcyxuZXcgX3JiKEN2KDE2KSkpO1hqKDIsbWllKTt0aGlzLmI9Mjt0aGlzLmE9bmV3IE1zKG51bGwsbnVsbCwwLG51bGwpO0FzKHRoaXMuYSx0aGlzLmEpfVxuZnVuY3Rpb24geHpjKCl7eHpjPWNjYjt1emM9bmV3IHp6YygnRFVNTVlfTk9ERV9PVkVSJywwKTt2emM9bmV3IHp6YygnRFVNTVlfTk9ERV9VTkRFUicsMSk7d3pjPW5ldyB6emMoJ0VRVUFMJywyKX1cbmZ1bmN0aW9uIExVYigpe0xVYj1jY2I7SlViPUZ4KE9DKEdDKHQxLDEpLEtpZSwxMDMsMCxbKGVhZCgpLGFhZCksYmFkXSkpO0tVYj1GeChPQyhHQyh0MSwxKSxLaWUsMTAzLDAsW2RhZCxfOWNdKSl9XG5mdW5jdGlvbiBWUWMoYSl7cmV0dXJuIChVY2QoKSxMY2QpLkhjKGEuaik/RWRiKEVEKHZOYihhLCh3dGMoKSxxdGMpKSkpOmw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFthLmkubixhLm4sYS5hXSkpLmJ9XG5mdW5jdGlvbiBET2IoYSl7dmFyIGIsYyxkLGU7ZD1hLmIuYTtmb3IoYz1kLmEuZWMoKS5LYygpO2MuT2IoKTspe2I9QkQoYy5QYigpLDU2MSk7ZT1uZXcgTVBiKGIsYS5lLGEuZik7RWtiKGEuZyxlKX19XG5mdW5jdGlvbiB5SWQoYSxiKXt2YXIgYyxkLGU7ZD1hLm5rKGIsbnVsbCk7ZT1udWxsO2lmKGIpe2U9KExGZCgpLGM9bmV3IFVRZCxjKTtOUWQoZSxhLnIpfWQ9eElkKGEsZSxkKTshIWQmJmQuRmkoKX1cbmZ1bmN0aW9uIFZGYyhhLGIpe3ZhciBjLGQ7ZD1DdWIoYS5kLDEpIT0wO2M9dHJ1ZTt3aGlsZShjKXtjPWZhbHNlO2M9Yi5jLlRmKGIuZSxkKTtjPWN8ZEdjKGEsYixkLGZhbHNlKTtkPSFkfSRGYyhhKX1cbmZ1bmN0aW9uIHdaYyhhLGIpe3ZhciBjLGQsZTtkPWZhbHNlO2M9Yi5xLmQ7aWYoYi5kPGEuYil7ZT1aWmMoYi5xLGEuYik7aWYoYi5xLmQ+ZSl7JFpjKGIucSxlKTtkPWMhPWIucS5kfX1yZXR1cm4gZH1cbmZ1bmN0aW9uIFBWYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aT1iLmk7aj1iLmo7ZD1hLmY7ZT1kLmk7Zj1kLmo7Zz1pLWU7aD1qLWY7Yz0kd25kLk1hdGguc3FydChnKmcraCpoKTtyZXR1cm4gY31cbmZ1bmN0aW9uIFJuZChhLGIpe3ZhciBjLGQ7ZD1qaWQoYSk7aWYoIWQpeyFBbmQmJihBbmQ9bmV3IGxVZCk7Yz0oSUVkKCksUEVkKGIpKTtkPW5ldyBzMGQoYyk7d3RkKGQuVmsoKSxhKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIFNjKGEsYil7dmFyIGMsZDtjPUJEKGEuYy5CYyhiKSwxNCk7aWYoIWMpe3JldHVybiBhLmpjKCl9ZD1hLmhjKCk7ZC5HYyhjKTthLmQtPWMuZ2MoKTtjLiRiKCk7cmV0dXJuIGEubWMoZCl9XG5mdW5jdGlvbiBqN2MoYSxiKXt2YXIgYztmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXtpZihhPT0oQkNiKGMsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChjKSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBFX2IoYSxiKXt2YXIgYztmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXtpZihhPT0oQkNiKGMsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChjKSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBoRmQoYSl7dmFyIGIsYztpZihhPT1udWxsKXJldHVybiBmYWxzZTtmb3IoYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl7aWYoIWdGZChhW2JdKSlyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBOZ2IoYSl7dmFyIGI7aWYoYS5jIT0wKXtyZXR1cm4gYS5jfWZvcihiPTA7YjxhLmEubGVuZ3RoO2IrKyl7YS5jPWEuYyozMysoYS5hW2JdJi0xKX1hLmM9YS5jKmEuZTtyZXR1cm4gYS5jfVxuZnVuY3Rpb24gdmtiKGEpe3ZhciBiO3NDYihhLmEhPWEuYik7Yj1hLmQuYVthLmFdO21rYihhLmI9PWEuZC5jJiZiIT1udWxsKTthLmM9YS5hO2EuYT1hLmErMSZhLmQuYS5sZW5ndGgtMTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHBoZShhKXt2YXIgYjtpZighKGEuYy5jPDA/YS5hPj1hLmMuYjphLmE8PWEuYy5iKSl7dGhyb3cgdmJiKG5ldyB1dGIpfWI9YS5hO2EuYSs9YS5jLmM7KythLmI7cmV0dXJuIG1lYihiKX1cbmZ1bmN0aW9uIEJXYihhKXt2YXIgYjtiPW5ldyBWV2IoYSk7clhiKGEuYSx6V2IsbmV3IGFtYihPQyhHQyhiUSwxKSxVaGUsMzY5LDAsW2JdKSkpOyEhYi5kJiZFa2IoYi5mLGIuZCk7cmV0dXJuIGIuZn1cbmZ1bmN0aW9uIFoxYihhKXt2YXIgYjtiPW5ldyBxX2IoYS5hKTt0TmIoYixhKTt5TmIoYiwod3RjKCksJHNjKSxhKTtiLm8uYT1hLmc7Yi5vLmI9YS5mO2Iubi5hPWEuaTtiLm4uYj1hLmo7cmV0dXJuIGJ9XG5mdW5jdGlvbiBBOWIoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZj1hLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksNzApO2Uubi5hPWIuYSsoZC5hLWUuby5hKS8yO2Uubi5iPWIuYjtiLmIrPWUuby5iK2N9fVxuZnVuY3Rpb24gVURiKGEsYixjKXt2YXIgZCxlO2ZvcihlPWIuYS5hLmVjKCkuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSw1Nyk7aWYoVkRiKGEsZCxjKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIEpEYyhhKXt2YXIgYixjO2ZvcihjPW5ldyBvbGIoYS5yKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTApO2lmKGEubltiLnBdPD0wKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBjVmMoYSl7dmFyIGIsYyxkLGU7ZT1uZXcgVHFiO2ZvcihkPW5ldyBvbGIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDMzKTtiPWZWYyhjKTt5ZShlLGIpfXJldHVybiBlfVxuZnVuY3Rpb24gekZjKGEpe3ZhciBiO2I9azNjKHhGYyk7QkQodk5iKGEsKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksS3JjKSkmJmUzYyhiLChxVWIoKSxuVWIpLChTOGIoKSxIOGIpKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHFLYihhLGIsYyl7dmFyIGQ7ZD1uZXcgQUpiKGEsYik7UmMoYS5yLGIuSGYoKSxkKTtpZihjJiYhdGNkKGEudSkpe2QuYz1uZXcgYUliKGEuZCk7SGtiKGIud2YoKSxuZXcgdEtiKGQpKX19XG5mdW5jdGlvbiB5YmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hLWI7aWYoIWlzTmFOKGMpKXtyZXR1cm4gY319cmV0dXJuIGVEKEZiYihhKT9SYmIoYSk6YSxGYmIoYik/UmJiKGIpOmIpfVxuZnVuY3Rpb24gYkZkKGEsYil7cmV0dXJuIGI8YS5sZW5ndGgmJihCQ2IoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpIT02MykmJihCQ2IoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpIT0zNSl9XG5mdW5jdGlvbiBLaWMoYSxiLGMsZCl7dmFyIGUsZjthLmE9YjtmPWQ/MDoxO2EuZj0oZT1uZXcgSWljKGEuYyxhLmEsYyxmKSxuZXcgampjKGMsYS5hLGUsYS5lLGEuYixhLmM9PShyR2MoKSxwR2MpKSl9XG5mdW5jdGlvbiBUbWQoYSxiLGMpe3ZhciBkLGU7ZT1hLmE7YS5hPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBuU2QoYSwxLDEsZSxiKTshYz8oYz1kKTpjLkVpKGQpfXJldHVybiBjfVxuZnVuY3Rpb24gR1FkKGEsYixjKXt2YXIgZCxlO2U9YS5iO2EuYj1iO2lmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgblNkKGEsMSwzLGUsYik7IWM/KGM9ZCk6Yy5FaShkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIElRZChhLGIsYyl7dmFyIGQsZTtlPWEuZjthLmY9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2Q9bmV3IG5TZChhLDEsMCxlLGIpOyFjPyhjPWQpOmMuRWkoZCl9cmV0dXJuIGN9XG5mdW5jdGlvbiB4aWQoYSxiKXt2YXIgYyxkLGUsZjtmPShlPWE/amlkKGEpOm51bGwscTZkKChkPWIsZT9lLlhrKCk6bnVsbCxkKSkpO2lmKGY9PWIpe2M9amlkKGEpOyEhYyYmYy5YaygpfXJldHVybiBmfVxuZnVuY3Rpb24geDZjKGEsYil7dmFyIGMsZCxlO2U9MTtjPWE7ZD1iPj0wP2I6LWI7d2hpbGUoZD4wKXtpZihkJTI9PTApe2MqPWM7ZD1kLzJ8MH1lbHNle2UqPWM7ZC09MX19cmV0dXJuIGI8MD8xL2U6ZX1cbmZ1bmN0aW9uIHk2YyhhLGIpe3ZhciBjLGQsZTtlPTE7Yz1hO2Q9Yj49MD9iOi1iO3doaWxlKGQ+MCl7aWYoZCUyPT0wKXtjKj1jO2Q9ZC8yfDB9ZWxzZXtlKj1jO2QtPTF9fXJldHVybiBiPDA/MS9lOmV9XG5mdW5jdGlvbiBzQWQoYSl7dmFyIGIsYyxkLGU7aWYoYSE9bnVsbCl7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyl7Yj1hW2NdO2lmKGIpe0JEKGIuZywzNjcpO2U9Yi5pO2ZvcihkPTA7ZDxlOysrZCk7fX19fVxuZnVuY3Rpb24gWVpjKGEpe3ZhciBiLGMsZDtkPTA7Zm9yKGM9bmV3IG9sYihhLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxODcpO2Q9JHduZC5NYXRoLm1heChkLGIuZyl9cmV0dXJuIGR9XG5mdW5jdGlvbiBlR2MoYSl7dmFyIGIsYyxkO2ZvcihkPW5ldyBvbGIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjE0KTtiPWMuYy5SZigpP2MuZjpjLmE7ISFiJiZtSGMoYixjLmopfX1cbmZ1bmN0aW9uIGhiZCgpe2hiZD1jY2I7ZmJkPW5ldyBpYmQoJ0lOSEVSSVQnLDApO2ViZD1uZXcgaWJkKCdJTkNMVURFX0NISUxEUkVOJywxKTtnYmQ9bmV3IGliZCgnU0VQQVJBVEVfQ0hJTERSRU4nLDIpfVxuZnVuY3Rpb24gSmtkKGEsYil7c3dpdGNoKGIpe2Nhc2UgMTohYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKTtVeGQoYS5uKTtyZXR1cm47Y2FzZSAyOkxrZChhLG51bGwpO3JldHVybjt9ZmtkKGEsYil9XG5mdW5jdGlvbiBEbShhKXt2YXIgYjtzd2l0Y2goYS5nYygpKXtjYXNlIDA6cmV0dXJuIGhtO2Nhc2UgMTpyZXR1cm4gbmV3IG15KFFiKGEuWGIoMCkpKTtkZWZhdWx0OmI9YTtyZXR1cm4gbmV3IHV4KGIpO319XG5mdW5jdGlvbiBWbihhKXtRbCgpO3N3aXRjaChhLmdjKCkpe2Nhc2UgMDpyZXR1cm4geXgoKSx4eDtjYXNlIDE6cmV0dXJuIG5ldyBveShhLktjKCkuUGIoKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHp4KGEpO319XG5mdW5jdGlvbiBVcChhKXtRbCgpO3N3aXRjaChhLmMpe2Nhc2UgMDpyZXR1cm4geXgoKSx4eDtjYXNlIDE6cmV0dXJuIG5ldyBveShxcihuZXcgR3FiKGEpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IFRwKGEpO319XG5mdW5jdGlvbiBIdihiLGMpe1FiKGIpO3RyeXtyZXR1cm4gYi54YyhjKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDIwNSl8fEpEKGEsMTczKSl7cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gSXYoYixjKXtRYihiKTt0cnl7cmV0dXJuIGIuQmMoYyl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwyMDUpfHxKRChhLDE3Mykpe3JldHVybiBudWxsfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIENrKGIsYyl7UWIoYik7dHJ5e3JldHVybiBiLkhjKGMpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMjA1KXx8SkQoYSwxNzMpKXtyZXR1cm4gZmFsc2V9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gRGsoYixjKXtRYihiKTt0cnl7cmV0dXJuIGIuTWMoYyl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwyMDUpfHxKRChhLDE3Mykpe3JldHVybiBmYWxzZX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBHdihiLGMpe1FiKGIpO3RyeXtyZXR1cm4gYi5fYihjKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDIwNSl8fEpEKGEsMTczKSl7cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIEtYYihhLGIpe3ZhciBjO2lmKGEuYS5jLmxlbmd0aD4wKXtjPUJEKElrYihhLmEsYS5hLmMubGVuZ3RoLTEpLDU3MCk7aWYoTlliKGMsYikpe3JldHVybn19RWtiKGEuYSxuZXcgUFliKGIpKX1cbmZ1bmN0aW9uICRnYyhhKXtIZ2MoKTt2YXIgYixjO2I9YS5kLmMtYS5lLmM7Yz1CRChhLmcsMTQ1KTtIa2IoYy5iLG5ldyBzaGMoYikpO0hrYihjLmMsbmV3IHVoYyhiKSk7cmViKGMuaSxuZXcgd2hjKGIpKX1cbmZ1bmN0aW9uIGdpYyhhKXt2YXIgYjtiPW5ldyBVZmI7Yi5hKz0nVmVydGljYWxTZWdtZW50ICc7UGZiKGIsYS5lKTtiLmErPScgJztRZmIoYixFYihuZXcgR2IsbmV3IG9sYihhLmspKSk7cmV0dXJuIGIuYX1cbmZ1bmN0aW9uIHU0YyhhKXt2YXIgYjtiPUJEKFdyYihhLmMuYywnJyksMjI5KTtpZighYil7Yj1uZXcgVzNjKGQ0YyhjNGMobmV3IGU0YywnJyksJ090aGVyJykpO1hyYihhLmMuYywnJyxiKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHFuZChhKXt2YXIgYjtpZigoYS5EYiY2NCkhPTApcmV0dXJuIEVpZChhKTtiPW5ldyBKZmIoRWlkKGEpKTtiLmErPScgKG5hbWU6ICc7RWZiKGIsYS56Yik7Yi5hKz0nKSc7cmV0dXJuIGIuYX1cbmZ1bmN0aW9uIEpuZChhLGIsYyl7dmFyIGQsZTtlPWEuc2I7YS5zYj1iO2lmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgblNkKGEsMSw0LGUsYik7IWM/KGM9ZCk6Yy5FaShkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIF9pYyhhLGIpe3ZhciBjLGQsZTtjPTA7Zm9yKGU9Vl9iKGEsYikuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMSk7Yys9dk5iKGQsKHd0YygpLGd0YykpIT1udWxsPzE6MH1yZXR1cm4gY31cbmZ1bmN0aW9uIHZQYyhhLGIsYyl7dmFyIGQsZSxmO2Q9MDtmb3IoZj1Kc2IoYSwwKTtmLmIhPWYuZC5jOyl7ZT1FZGIoRUQoWHNiKGYpKSk7aWYoZT5jKXticmVha31lbHNlIGU+PWImJisrZH1yZXR1cm4gZH1cbmZ1bmN0aW9uIFJUZChhLGIsYyl7dmFyIGQsZTtkPW5ldyBwU2QoYS5lLDMsMTMsbnVsbCwoZT1iLmMsZT9lOihqR2QoKSxZRmQpKSxITGQoYSxiKSxmYWxzZSk7IWM/KGM9ZCk6Yy5FaShkKTtyZXR1cm4gY31cbmZ1bmN0aW9uIFNUZChhLGIsYyl7dmFyIGQsZTtkPW5ldyBwU2QoYS5lLDQsMTMsKGU9Yi5jLGU/ZTooakdkKCksWUZkKSksbnVsbCxITGQoYSxiKSxmYWxzZSk7IWM/KGM9ZCk6Yy5FaShkKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHpJZChhLGIsYyl7dmFyIGQsZTtlPWEucjthLnI9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2Q9bmV3IG5TZChhLDEsOCxlLGEucik7IWM/KGM9ZCk6Yy5FaShkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIG8xZChhLGIpe3ZhciBjLGQ7Yz1CRChiLDY3Nik7ZD1jLnZrKCk7IWQmJmMud2soZD1KRChiLDg4KT9uZXcgQzFkKGEsQkQoYiwyNikpOm5ldyBPMWQoYSxCRChiLDE0OCkpKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIGt1ZChhLGIsYyl7dmFyIGQ7YS5xaShhLmkrMSk7ZD1hLm9pKGIsYyk7YiE9YS5pJiYkZmIoYS5nLGIsYS5nLGIrMSxhLmktYik7TkMoYS5nLGIsZCk7KythLmk7YS5iaShiLGMpO2EuY2koKX1cbmZ1bmN0aW9uIHZ3YihhLGIpe3ZhciBjO2lmKGIuYSl7Yz1iLmEuYS5sZW5ndGg7IWEuYT8oYS5hPW5ldyBXZmIoYS5kKSk6UWZiKGEuYSxhLmIpO09mYihhLmEsYi5hLGIuZC5sZW5ndGgsYyl9cmV0dXJuIGF9XG5mdW5jdGlvbiBfX2QoYSxiKXt2YXIgYyxkLGUsZjtiLnZpKGEuYSk7Zj1CRChBamQoYS5hLDgpLDE5MzYpO2lmKGYhPW51bGwpe2ZvcihjPWYsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7bnVsbC5qbSgpfX19XG5mdW5jdGlvbiBUQWIoYSxiKXt2YXIgYztjPW5ldyBOQmI7aWYoIWEuYS5zZChjKSl7VHpiKGEpO3JldHVybiBBdGIoKSxBdGIoKSx6dGJ9cmV0dXJuIEF0YigpLG5ldyBGdGIodUNiKFNBYihhLGMuYSxiKSkpfVxuZnVuY3Rpb24gQ0hjKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gVl9iKGEsYik7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gU3UoVl9iKGEsYikpO31yZXR1cm4gbW1iKCksbW1iKCksam1ifVxuZnVuY3Rpb24gcGIoYSxiKXtyZXR1cm4gTkQoYSk/ZGZiKGEsYik6TEQoYSk/RmRiKGEsYik6S0QoYSk/KHVDYihhKSxQRChhKT09PVBEKGIpKTpJRChhKT9hLkZiKGIpOk1DKGEpP21iKGEsYik6cXooYSxiKX1cbmZ1bmN0aW9uIHI2ZChhKXtyZXR1cm4gIWE/bnVsbDooYS5pJjEpIT0wP2E9PXNiYj93STphPT1XRD9KSTphPT1WRD9GSTphPT1VRD9CSTphPT1YRD9NSTphPT1yYmI/VUk6YT09U0Q/eEk6eUk6YX1cbmZ1bmN0aW9uIEZoYihhLGIsYyxkLGUpe2lmKGI9PTB8fGQ9PTApe3JldHVybn1iPT0xPyhlW2RdPUhoYihlLGMsZCxhWzBdKSk6ZD09MT8oZVtiXT1IaGIoZSxhLGIsY1swXSkpOkdoYihhLGMsZSxiLGQpfVxuZnVuY3Rpb24gYzZiKGEsYil7dmFyIGM7aWYoYS5jLmxlbmd0aD09MCl7cmV0dXJufWM9QkQoUWtiKGEsS0MoT1Esa25lLDEwLGEuYy5sZW5ndGgsMCwxKSksMTkzKTtObGIoYyxuZXcgbzZiKTtfNWIoYyxiKX1cbmZ1bmN0aW9uIGk2YihhLGIpe3ZhciBjO2lmKGEuYy5sZW5ndGg9PTApe3JldHVybn1jPUJEKFFrYihhLEtDKE9RLGtuZSwxMCxhLmMubGVuZ3RoLDAsMSkpLDE5Myk7TmxiKGMsbmV3IHQ2Yik7XzViKGMsYil9XG5mdW5jdGlvbiBFa2QoYSxiLGMsZCl7c3dpdGNoKGIpe2Nhc2UgMTpyZXR1cm4gIWEubiYmKGEubj1uZXcgY1VkKEQyLGEsMSw3KSksYS5uO2Nhc2UgMjpyZXR1cm4gYS5rO31yZXR1cm4gYmtkKGEsYixjLGQpfVxuZnVuY3Rpb24gZWFkKCl7ZWFkPWNjYjtjYWQ9bmV3IGlhZChvbGUsMCk7YmFkPW5ldyBpYWQoa2xlLDEpO2FhZD1uZXcgaWFkKGpsZSwyKTtfOWM9bmV3IGlhZCh2bGUsMyk7ZGFkPW5ldyBpYWQoJ1VQJyw0KX1cbmZ1bmN0aW9uIFJYYigpe1JYYj1jY2I7UVhiPW5ldyBTWGIoYW5lLDApO1BYYj1uZXcgU1hiKCdJTlNJREVfUE9SVF9TSURFX0dST1VQUycsMSk7T1hiPW5ldyBTWGIoJ0ZPUkNFX01PREVMX09SREVSJywyKX1cbmZ1bmN0aW9uIHhDYihhLGIsYyl7aWYoYTwwfHxiPmMpe3Rocm93IHZiYihuZXcgcWNiKHhrZSthK3prZStiKycsIHNpemU6ICcrYykpfWlmKGE+Yil7dGhyb3cgdmJiKG5ldyBXZGIoeGtlK2EreWtlK2IpKX19XG5mdW5jdGlvbiBlaWQoYSxiLGMpe2lmKGI8MCl7dmlkKGEsYyl9ZWxzZXtpZighYy5JaigpKXt0aHJvdyB2YmIobmV3IFdkYihpdGUrYy5uZSgpK2p0ZSkpfUJEKGMsNjYpLk5qKCkuVmooYSxhLnloKCksYil9fVxuZnVuY3Rpb24gSmxiKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk7aT1jO3doaWxlKGY8Zyl7aT49ZHx8YjxjJiZoLnVlKGFbYl0sYVtpXSk8PTA/TkMoZSxmKyssYVtiKytdKTpOQyhlLGYrKyxhW2krK10pfX1cbmZ1bmN0aW9uIHlaYihhLGIsYyxkLGUsZil7dGhpcy5lPW5ldyBSa2I7dGhpcy5mPShLQWMoKSxKQWMpO0VrYih0aGlzLmUsYSk7dGhpcy5kPWI7dGhpcy5hPWM7dGhpcy5iPWQ7dGhpcy5mPWU7dGhpcy5jPWZ9XG5mdW5jdGlvbiBWT2QoYSxiKXt2YXIgYyxkO2ZvcihkPW5ldyBGeWQoYSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDI2KTtpZihQRChiKT09PVBEKGMpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gdUpiKGEpe3FKYigpO3ZhciBiLGMsZCxlO2ZvcihjPXdKYigpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtpZihKa2IoYi5hLGEsMCkhPS0xKXtyZXR1cm4gYn19cmV0dXJuIHBKYn1cbmZ1bmN0aW9uIGpGZChhKXtpZihhPj02NSYmYTw9NzApe3JldHVybiBhLTY1KzEwfWlmKGE+PTk3JiZhPD0xMDIpe3JldHVybiBhLTk3KzEwfWlmKGE+PTQ4JiZhPD01Nyl7cmV0dXJuIGEtNDh9cmV0dXJuIDB9XG5mdW5jdGlvbiBRSGQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBFaWQoYSk7Yj1uZXcgSmZiKEVpZChhKSk7Yi5hKz0nIChzb3VyY2U6ICc7RWZiKGIsYS5kKTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gT1FkKGEsYixjKXt2YXIgZCxlO2U9YS5hO2EuYT1iO2lmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgblNkKGEsMSw1LGUsYS5hKTshYz8oYz1kKTpRd2QoYyxkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIEJJZChhLGIpe3ZhciBjO2M9KGEuQmImMjU2KSE9MDtiPyhhLkJifD0yNTYpOihhLkJiJj0tMjU3KTsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBxU2QoYSwxLDIsYyxiKSl9XG5mdW5jdGlvbiBlTGQoYSxiKXt2YXIgYztjPShhLkJiJjI1NikhPTA7Yj8oYS5CYnw9MjU2KTooYS5CYiY9LTI1Nyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgcVNkKGEsMSw4LGMsYikpfVxuZnVuY3Rpb24gTFBkKGEsYil7dmFyIGM7Yz0oYS5CYiYyNTYpIT0wO2I/KGEuQmJ8PTI1Nik6KGEuQmImPS0yNTcpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsOCxjLGIpKX1cbmZ1bmN0aW9uIENJZChhLGIpe3ZhciBjO2M9KGEuQmImNTEyKSE9MDtiPyhhLkJifD01MTIpOihhLkJiJj0tNTEzKTsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBxU2QoYSwxLDMsYyxiKSl9XG5mdW5jdGlvbiBmTGQoYSxiKXt2YXIgYztjPShhLkJiJjUxMikhPTA7Yj8oYS5CYnw9NTEyKTooYS5CYiY9LTUxMyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgcVNkKGEsMSw5LGMsYikpfVxuZnVuY3Rpb24gTjdkKGEsYil7dmFyIGM7aWYoYS5iPT0tMSYmISFhLmEpe2M9YS5hLkdqKCk7YS5iPSFjP2JMZChhLmMuVGcoKSxhLmEpOmEuYy5YZyhhLmEuYWooKSxjKX1yZXR1cm4gYS5jLk9nKGEuYixiKX1cbmZ1bmN0aW9uIG1lYihhKXt2YXIgYixjO2lmKGE+LTEyOSYmYTwxMjgpe2I9YSsxMjg7Yz0ob2ViKCksbmViKVtiXTshYyYmKGM9bmViW2JdPW5ldyBfZGIoYSkpO3JldHVybiBjfXJldHVybiBuZXcgX2RiKGEpfVxuZnVuY3Rpb24gV2ViKGEpe3ZhciBiLGM7aWYoYT4tMTI5JiZhPDEyOCl7Yj1hKzEyODtjPShZZWIoKSxYZWIpW2JdOyFjJiYoYz1YZWJbYl09bmV3IFFlYihhKSk7cmV0dXJuIGN9cmV0dXJuIG5ldyBRZWIoYSl9XG5mdW5jdGlvbiBMNWIoYSl7dmFyIGIsYztiPWEuaztpZihiPT0oajBiKCksZTBiKSl7Yz1CRCh2TmIoYSwod3RjKCksSHNjKSksNjEpO3JldHVybiBjPT0oVWNkKCksQWNkKXx8Yz09UmNkfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGkxZChhLGIsYyl7dmFyIGQsZSxmO2Y9KGU9blVkKGEuYixiKSxlKTtpZihmKXtkPUJEKFYxZChwMWQoYSxmKSwnJyksMjYpO2lmKGQpe3JldHVybiByMWQoYSxkLGIsYyl9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gbDFkKGEsYixjKXt2YXIgZCxlLGY7Zj0oZT1uVWQoYS5iLGIpLGUpO2lmKGYpe2Q9QkQoVjFkKHAxZChhLGYpLCcnKSwyNik7aWYoZCl7cmV0dXJuIHMxZChhLGQsYixjKX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBjVGQoYSxiKXt2YXIgYyxkO2ZvcihkPW5ldyBGeWQoYSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDEzOCk7aWYoUEQoYik9PT1QRChjKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIHZ0ZChhLGIsYyl7dmFyIGQ7ZD1hLmdjKCk7aWYoYj5kKXRocm93IHZiYihuZXcgQ3lkKGIsZCkpO2lmKGEuaGkoKSYmYS5IYyhjKSl7dGhyb3cgdmJiKG5ldyBXZGIoa3VlKSl9YS5YaChiLGMpfVxuZnVuY3Rpb24gaXFkKGEsYil7dmFyIGM7Yz1vbyhhLmksYik7aWYoYz09bnVsbCl7dGhyb3cgdmJiKG5ldyBjcWQoJ05vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4nKSl9WXFkKGIsYyk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiAkaGQoYSxiKXt2YXIgYztjPVlLZChhLGIpO2lmKEpEKGMsMzIyKSl7cmV0dXJuIEJEKGMsMzQpfXRocm93IHZiYihuZXcgV2RiKGl0ZStiK1wiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGVcIikpfVxuZnVuY3Rpb24gVjJkKGEsYixjKXt2YXIgZCxlO2U9SkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wP25ldyBzNGQoYixhKTpuZXcgcDRkKGIsYSk7Zm9yKGQ9MDtkPGM7KytkKXtkNGQoZSl9cmV0dXJuIGV9XG5mdW5jdGlvbiBlZGUoYSl7dmFyIGIsYyxkO2Q9MDtjPWEubGVuZ3RoO2ZvcihiPTA7YjxjO2IrKyl7YVtiXT09MzJ8fGFbYl09PTEzfHxhW2JdPT0xMHx8YVtiXT09OXx8KGFbZCsrXT1hW2JdKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIGxZYihhKXt2YXIgYixjLGQ7Yj1uZXcgUmtiO2ZvcihkPW5ldyBvbGIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNTk0KTtHa2IoYixCRChjLmpmKCksMTQpKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIFNTYyhhKXt2YXIgYixjLGQ7Yj1CRCh2TmIoYSwobVRjKCksZ1RjKSksMTUpO2ZvcihkPWIuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwxODgpO0RzYihjLmIuZCxjKTtEc2IoYy5jLmIsYyl9fVxuZnVuY3Rpb24gYjViKGEpe3N3aXRjaChCRCh2TmIoYSwod3RjKCksT3NjKSksMzAzKS5nKXtjYXNlIDE6eU5iKGEsT3NjLChlc2MoKSxic2MpKTticmVhaztjYXNlIDI6eU5iKGEsT3NjLChlc2MoKSxkc2MpKTt9fVxuZnVuY3Rpb24gX0ZjKGEpe3ZhciBiO2lmKGEuZyl7Yj1hLmMuUmYoKT9hLmY6YS5hO2JHYyhiLmEsYS5vLHRydWUpO2JHYyhiLmEsYS5vLGZhbHNlKTt5TmIoYS5vLChOeWMoKSxWeGMpLChkY2QoKSxaYmQpKX19XG5mdW5jdGlvbiBsb2MoYSl7dmFyIGI7aWYoIWEuYSl7dGhyb3cgdmJiKG5ldyBaZGIoJ0Nhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuJykpfWI9YS5jLWEuYjthLmIrPWI7bm9jKGEsYik7b29jKGEsYil9XG5mdW5jdGlvbiBja2IoYSl7dmFyIGI7Yj1hLmFbYS5jLTEmYS5hLmxlbmd0aC0xXTtpZihiPT1udWxsKXtyZXR1cm4gbnVsbH1hLmM9YS5jLTEmYS5hLmxlbmd0aC0xO05DKGEuYSxhLmMsbnVsbCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiB6R2IoYSl7dmFyIGIsYztmb3IoYz1hLnAuYS5lYygpLktjKCk7Yy5PYigpOyl7Yj1CRChjLlBiKCksMjEzKTtpZihiLmYmJmEuYltiLmNdPC0xLjBFLTEwKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBiTGIoYSxiKXtzd2l0Y2goYS5iLmcpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIGI7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gbmV3IEo2YyhiLmQsMCxiLmEsYi5iKTtkZWZhdWx0OnJldHVybiBudWxsO319XG5mdW5jdGlvbiBoYWQoYSl7c3dpdGNoKGEuZyl7Y2FzZSAyOnJldHVybiBiYWQ7Y2FzZSAxOnJldHVybiBhYWQ7Y2FzZSA0OnJldHVybiBfOWM7Y2FzZSAzOnJldHVybiBkYWQ7ZGVmYXVsdDpyZXR1cm4gY2FkO319XG5mdW5jdGlvbiBWY2QoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBUY2Q7Y2FzZSAyOnJldHVybiBBY2Q7Y2FzZSAzOnJldHVybiB6Y2Q7Y2FzZSA0OnJldHVybiBSY2Q7ZGVmYXVsdDpyZXR1cm4gU2NkO319XG5mdW5jdGlvbiBXY2QoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBSY2Q7Y2FzZSAyOnJldHVybiBUY2Q7Y2FzZSAzOnJldHVybiBBY2Q7Y2FzZSA0OnJldHVybiB6Y2Q7ZGVmYXVsdDpyZXR1cm4gU2NkO319XG5mdW5jdGlvbiBYY2QoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiB6Y2Q7Y2FzZSAyOnJldHVybiBSY2Q7Y2FzZSAzOnJldHVybiBUY2Q7Y2FzZSA0OnJldHVybiBBY2Q7ZGVmYXVsdDpyZXR1cm4gU2NkO319XG5mdW5jdGlvbiBEUGMoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gbmV3IE9QYztjYXNlIDE6cmV0dXJuIG5ldyBFUGM7Y2FzZSAyOnJldHVybiBuZXcgSlBjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBWZGIpO319XG5mdW5jdGlvbiBLZGIoYSxiKXtpZihhPGIpe3JldHVybiAtMX1pZihhPmIpe3JldHVybiAxfWlmKGE9PWIpe3JldHVybiBhPT0wP0tkYigxL2EsMS9iKTowfXJldHVybiBpc05hTihhKT9pc05hTihiKT8wOjE6LTF9XG5mdW5jdGlvbiBmNGIoYSxiKXtPZGQoYiwnU29ydCBlbmQgbGFiZWxzJywxKTtNQWIoSkFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmIsMTYpKSxuZXcgcTRiKSxuZXcgczRiKSxuZXcgdTRiKTtRZGQoYil9XG5mdW5jdGlvbiBXeGQoYSxiLGMpe3ZhciBkLGU7aWYoYS5laigpKXtlPWEuZmooKTtkPXN1ZChhLGIsYyk7YS4kaShhLlppKDcsbWViKGMpLGQsYixlKSk7cmV0dXJuIGR9ZWxzZXtyZXR1cm4gc3VkKGEsYixjKX19XG5mdW5jdGlvbiB2QWQoYSxiKXt2YXIgYyxkLGU7aWYoYS5kPT1udWxsKXsrK2EuZTstLWEuZn1lbHNle2U9Yi5jZCgpO2M9Yi5TaCgpO2Q9KGMmT2hlKSVhLmQubGVuZ3RoO0tBZChhLGQseEFkKGEsZCxjLGUpKX19XG5mdW5jdGlvbiBaSWQoYSxiKXt2YXIgYztjPShhLkJiJnp0ZSkhPTA7Yj8oYS5CYnw9enRlKTooYS5CYiY9LTEwMjUpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMTAsYyxiKSl9XG5mdW5jdGlvbiBkSmQoYSxiKXt2YXIgYztjPShhLkJiJlJqZSkhPTA7Yj8oYS5CYnw9UmplKTooYS5CYiY9LTQwOTcpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMTIsYyxiKSl9XG5mdW5jdGlvbiBlSmQoYSxiKXt2YXIgYztjPShhLkJiJkN2ZSkhPTA7Yj8oYS5CYnw9Q3ZlKTooYS5CYiY9LTgxOTMpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMTUsYyxiKSl9XG5mdW5jdGlvbiBmSmQoYSxiKXt2YXIgYztjPShhLkJiJkR2ZSkhPTA7Yj8oYS5CYnw9RHZlKTooYS5CYiY9LTIwNDkpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMTEsYyxiKSl9XG5mdW5jdGlvbiBqT2IoYSxiKXt2YXIgYztjPUtkYihhLmIuYyxiLmIuYyk7aWYoYyE9MCl7cmV0dXJuIGN9Yz1LZGIoYS5hLmEsYi5hLmEpO2lmKGMhPTApe3JldHVybiBjfXJldHVybiBLZGIoYS5hLmIsYi5hLmIpfVxuZnVuY3Rpb24ganFkKGEsYil7dmFyIGM7Yz1PaGIoYS5rLGIpO2lmKGM9PW51bGwpe3Rocm93IHZiYihuZXcgY3FkKCdQb3J0IGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuJykpfVlxZChiLGMpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gazZkKGEpe3ZhciBiLGM7Zm9yKGM9bDZkKGJLZChhKSkuS2MoKTtjLk9iKCk7KXtiPUdEKGMuUGIoKSk7aWYoRG1kKGEsYikpe3JldHVybiB1RmQoKHRGZCgpLHNGZCksYil9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gbjNkKGEsYil7dmFyIGMsZCxlLGYsZztnPVM2ZChhLmUuVGcoKSxiKTtmPTA7Yz1CRChhLmcsMTE5KTtmb3IoZT0wO2U8YS5pOysrZSl7ZD1jW2VdO2cucmwoZC5haygpKSYmKytmfXJldHVybiBmfVxuZnVuY3Rpb24gVnNkKGEsYixjKXt2YXIgZCxlO2Q9QkQoYi5XZShhLmEpLDM1KTtlPUJEKGMuV2UoYS5hKSwzNSk7cmV0dXJuIGQhPW51bGwmJmUhPW51bGw/RmNiKGQsZSk6ZCE9bnVsbD8tMTplIT1udWxsPzE6MH1cbmZ1bmN0aW9uIHZlZChhLGIsYyl7dmFyIGQsZTtpZihhLmMpe0VmZChhLmMsYixjKX1lbHNle2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTU3KTt2ZWQoZCxiLGMpfX19XG5mdW5jdGlvbiBSVWIoYSxiKXt2YXIgYyxkO2ZvcihkPW5ldyBvbGIoYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDQ2KTtMa2IoYS5iLmIsYy5iKTtmVmIoQkQoYy5hLDE4OSksQkQoYy5iLDgxKSl9fVxuZnVuY3Rpb24gdHIoYSl7dmFyIGIsYztjPUtmYihuZXcgVWZiLDkxKTtiPXRydWU7d2hpbGUoYS5PYigpKXtifHwoYy5hKz1TaGUsYyk7Yj1mYWxzZTtQZmIoYyxhLlBiKCkpfXJldHVybiAoYy5hKz0nXScsYykuYX1cbmZ1bmN0aW9uIGFKZChhLGIpe3ZhciBjO2M9KGEuQmImb2llKSE9MDtiPyhhLkJifD1vaWUpOihhLkJiJj0tMTYzODUpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMTYsYyxiKSl9XG5mdW5jdGlvbiBNSmQoYSxiKXt2YXIgYztjPShhLkJiJm90ZSkhPTA7Yj8oYS5CYnw9b3RlKTooYS5CYiY9LTMyNzY5KTsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBxU2QoYSwxLDE4LGMsYikpfVxuZnVuY3Rpb24gQ1VkKGEsYil7dmFyIGM7Yz0oYS5CYiZvdGUpIT0wO2I/KGEuQmJ8PW90ZSk6KGEuQmImPS0zMjc2OSk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgcVNkKGEsMSwxOCxjLGIpKX1cbmZ1bmN0aW9uIEVVZChhLGIpe3ZhciBjO2M9KGEuQmImVGplKSE9MDtiPyhhLkJifD1UamUpOihhLkJiJj0tNjU1MzcpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IHFTZChhLDEsMjAsYyxiKSl9XG5mdW5jdGlvbiBUZWUoYSl7dmFyIGI7Yj1LQyhURCwkaWUsMjUsMiwxNSwxKTthLT1UamU7YlswXT0oYT4+MTApK1VqZSZhamU7YlsxXT0oYSYxMDIzKSs1NjMyMCZhamU7cmV0dXJuIHpmYihiLDAsYi5sZW5ndGgpfVxuZnVuY3Rpb24gYV9iKGEpe3ZhciBiLGM7Yz1CRCh2TmIoYSwoTnljKCksTHdjKSksMTAzKTtpZihjPT0oZWFkKCksY2FkKSl7Yj1FZGIoRUQodk5iKGEsb3djKSkpO3JldHVybiBiPj0xP2JhZDpfOWN9cmV0dXJuIGN9XG5mdW5jdGlvbiByZWMoYSl7c3dpdGNoKEJEKHZOYihhLChOeWMoKSxTd2MpKSwyMTgpLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IEZtYztjYXNlIDM6cmV0dXJuIG5ldyB3bmM7ZGVmYXVsdDpyZXR1cm4gbmV3IHptYzt9fVxuZnVuY3Rpb24gVXpiKGEpe2lmKGEuYyl7VXpiKGEuYyl9ZWxzZSBpZihhLmQpe3Rocm93IHZiYihuZXcgWmRiKFwiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZFwiKSl9fVxuZnVuY3Rpb24gTWtkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gRWlkKGEpO2I9bmV3IEpmYihFaWQoYSkpO2IuYSs9JyAoaWRlbnRpZmllcjogJztFZmIoYixhLmspO2IuYSs9JyknO3JldHVybiBiLmF9XG5mdW5jdGlvbiBjdGQoYSxiLGMpe3ZhciBkLGU7ZD0oRmhkKCksZT1uZXcgeGtkLGUpO3ZrZChkLGIpO3drZChkLGMpOyEhYSYmd3RkKCghYS5hJiYoYS5hPW5ldyB4TWQoeTIsYSw1KSksYS5hKSxkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHR0YihhLGIsYyxkKXt2YXIgZSxmO3VDYihkKTt1Q2IoYyk7ZT1hLnhjKGIpO2Y9ZT09bnVsbD9jOk15YihCRChlLDE1KSxCRChjLDE0KSk7Zj09bnVsbD9hLkJjKGIpOmEuemMoYixmKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIHBxYihhKXt2YXIgYixjLGQsZTtjPShiPUJEKGdkYigoZD1hLmdtLGU9ZC5mLGU9PUNJP2Q6ZSkpLDkpLG5ldyB4cWIoYixCRChfQmIoYixiLmxlbmd0aCksOSksMCkpO3JxYihjLGEpO3JldHVybiBjfVxuZnVuY3Rpb24gaERjKGEsYixjKXt2YXIgZCxlO2ZvcihlPWEuYS5lYygpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTApO2lmKEJlKGMsQkQoSWtiKGIsZC5wKSwxNCkpKXtyZXR1cm4gZH19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBEYihiLGMsZCl7dmFyIGU7dHJ5e0NiKGIsYyxkKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDU5Nykpe2U9YTt0aHJvdyB2YmIobmV3IHljYihlKSl9ZWxzZSB0aHJvdyB2YmIoYSl9cmV0dXJuIGN9XG5mdW5jdGlvbiBRYmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hLWI7aWYoS2plPGMmJmM8SWplKXtyZXR1cm4gY319cmV0dXJuIHpiYihuRChGYmIoYSk/UmJiKGEpOmEsRmJiKGIpP1JiYihiKTpiKSl9XG5mdW5jdGlvbiB3YmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hK2I7aWYoS2plPGMmJmM8SWplKXtyZXR1cm4gY319cmV0dXJuIHpiYihjRChGYmIoYSk/UmJiKGEpOmEsRmJiKGIpP1JiYihiKTpiKSl9XG5mdW5jdGlvbiBJYmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hKmI7aWYoS2plPGMmJmM8SWplKXtyZXR1cm4gY319cmV0dXJuIHpiYihnRChGYmIoYSk/UmJiKGEpOmEsRmJiKGIpP1JiYihiKTpiKSl9XG5mdW5jdGlvbiBWX2IoYSxiKXt2YXIgYzthLml8fE5fYihhKTtjPUJEKE1wYihhLmcsYiksNDYpO3JldHVybiAhYz8obW1iKCksbW1iKCksam1iKTpuZXcgSmliKGEuaixCRChjLmEsMTkpLmEsQkQoYy5iLDE5KS5hKX1cbmZ1bmN0aW9uIERyYihhLGIsYyl7dmFyIGQ7ZD1hLmEuZ2V0KGIpO2EuYS5zZXQoYixjPT09dW5kZWZpbmVkP251bGw6Yyk7aWYoZD09PXVuZGVmaW5lZCl7KythLmM7enBiKGEuYil9ZWxzZXsrK2EuZH1yZXR1cm4gZH1cbmZ1bmN0aW9uIGtOYihhLGIsYyl7YS5uPUlDKFhELFtuaWUsU2plXSxbMzY0LDI1XSwxNCxbYyxRRCgkd25kLk1hdGguY2VpbChiLzMyKSldLDIpO2Eubz1iO2EucD1jO2Euaj1iLTE+PjE7YS5rPWMtMT4+MX1cbmZ1bmN0aW9uIEd1Yigpe3p1YigpO3ZhciBhLGIsYztjPXl1YisrK0RhdGUubm93KCk7YT1RRCgkd25kLk1hdGguZmxvb3IoYypsa2UpKSZua2U7Yj1RRChjLWEqbWtlKTt0aGlzLmE9YV4xNTAyO3RoaXMuYj1iXmtrZX1cbmZ1bmN0aW9uIE9fYihhKXt2YXIgYixjLGQ7Yj1uZXcgUmtiO2ZvcihkPW5ldyBvbGIoYS5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTEpO0VrYihiLGMuYil9cmV0dXJuIFFiKGIpLG5ldyBzbChiKX1cbmZ1bmN0aW9uIFJfYihhKXt2YXIgYixjLGQ7Yj1uZXcgUmtiO2ZvcihkPW5ldyBvbGIoYS5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTEpO0VrYihiLGMuZSl9cmV0dXJuIFFiKGIpLG5ldyBzbChiKX1cbmZ1bmN0aW9uIFVfYihhKXt2YXIgYixjLGQ7Yj1uZXcgUmtiO2ZvcihkPW5ldyBvbGIoYS5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTEpO0VrYihiLGMuZyl9cmV0dXJuIFFiKGIpLG5ldyBzbChiKX1cbmZ1bmN0aW9uIG42ZChhKXt2YXIgYixjO2ZvcihjPW82ZChiS2QoV0lkKGEpKSkuS2MoKTtjLk9iKCk7KXtiPUdEKGMuUGIoKSk7aWYoRG1kKGEsYikpcmV0dXJuIEZGZCgoRUZkKCksREZkKSxiKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHdtKGEpe3ZhciBiLGMsZDtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7aWYoYVtjXT09bnVsbCl7dGhyb3cgdmJiKG5ldyBIZWIoJ2F0IGluZGV4ICcrYykpfX1iPWE7cmV0dXJuIG5ldyBhbWIoYil9XG5mdW5jdGlvbiB3aWQoYSxiKXt2YXIgYztjPVlLZChhLlRnKCksYik7aWYoSkQoYyw5OSkpe3JldHVybiBCRChjLDE4KX10aHJvdyB2YmIobmV3IFdkYihpdGUrYitcIicgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlXCIpKX1cbmZ1bmN0aW9uIFRkYihhKXt2YXIgYjtiPUhjYihhKTtpZihiPjMuNDAyODIzNDY2Mzg1Mjg4NkUzOCl7cmV0dXJuIFBqZX1lbHNlIGlmKGI8LTMuNDAyODIzNDY2Mzg1Mjg4NkUzOCl7cmV0dXJuIFFqZX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGFlYihhKXthLT1hPj4xJjE0MzE2NTU3NjU7YT0oYT4+MiY4NTg5OTM0NTkpKyhhJjg1ODk5MzQ1OSk7YT0oYT4+NCkrYSYyNTI2NDUxMzU7YSs9YT4+ODthKz1hPj4xNjtyZXR1cm4gYSY2M31cbmZ1bmN0aW9uIEV2KGEpe3ZhciBiLGMsZCxlO2I9bmV3IGNxKGEuSGQoKS5nYygpKTtlPTA7Zm9yKGQ9dnIoYS5IZCgpLktjKCkpO2QuT2IoKTspe2M9ZC5QYigpO2JxKGIsYyxtZWIoZSsrKSl9cmV0dXJuIGZuKGIuYSl9XG5mdW5jdGlvbiBVeWIoYSxiKXt2YXIgYyxkLGU7ZT1uZXcgTHFiO2ZvcihkPWIudmMoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDQyKTtSaGIoZSxjLmNkKCksWXliKGEsQkQoYy5kZCgpLDE1KSkpfXJldHVybiBlfVxuZnVuY3Rpb24gRVpjKGEsYil7YS5uLmMubGVuZ3RoPT0wJiZFa2IoYS5uLG5ldyBWWmMoYS5zLGEudCxhLmkpKTtFa2IoYS5iLGIpO1FaYyhCRChJa2IoYS5uLGEubi5jLmxlbmd0aC0xKSwyMTEpLGIpO0daYyhhLGIpfVxuZnVuY3Rpb24gTEZiKGEpe2lmKGEuYyE9YS5iLmJ8fGEuaSE9YS5nLmIpe2EuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtHa2IoYS5hLGEuYik7R2tiKGEuYSxhLmcpO2EuYz1hLmIuYjthLmk9YS5nLmJ9cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIFljYyhhLGIpe3ZhciBjLGQsZTtlPTA7Zm9yKGQ9QkQoYi5LYihhKSwyMCkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwxNyk7Q2NiKEREKHZOYihjLCh3dGMoKSxsdGMpKSkpfHwrK2V9cmV0dXJuIGV9XG5mdW5jdGlvbiBlZmMoYSxiKXt2YXIgYyxkLGU7ZD10Z2MoYik7ZT1FZGIoRUQocEJjKGQsKE55YygpLGx5YykpKSk7Yz0kd25kLk1hdGgubWF4KDAsZS8yLTAuNSk7Y2ZjKGIsYywxKTtFa2IoYSxuZXcgRGZjKGIsYykpfVxuZnVuY3Rpb24gQ3RjKCl7Q3RjPWNjYjtCdGM9bmV3IER0YyhhbmUsMCk7eHRjPW5ldyBEdGMoJ0ZJUlNUJywxKTt5dGM9bmV3IER0YyhHbmUsMik7enRjPW5ldyBEdGMoJ0xBU1QnLDMpO0F0Yz1uZXcgRHRjKEhuZSw0KX1cbmZ1bmN0aW9uIEFhZCgpe0FhZD1jY2I7emFkPW5ldyBCYWQob2xlLDApO3hhZD1uZXcgQmFkKCdQT0xZTElORScsMSk7d2FkPW5ldyBCYWQoJ09SVEhPR09OQUwnLDIpO3lhZD1uZXcgQmFkKCdTUExJTkVTJywzKX1cbmZ1bmN0aW9uIHpZYygpe3pZYz1jY2I7eFljPW5ldyBBWWMoJ0FTUEVDVF9SQVRJT19EUklWRU4nLDApO3lZYz1uZXcgQVljKCdNQVhfU0NBTEVfRFJJVkVOJywxKTt3WWM9bmV3IEFZYygnQVJFQV9EUklWRU4nLDIpfVxuZnVuY3Rpb24gWSRjKCl7WSRjPWNjYjtWJGM9bmV3IFokYygnUDFfU1RSVUNUVVJFJywwKTtXJGM9bmV3IFokYygnUDJfUFJPQ0VTU0lOR19PUkRFUicsMSk7WCRjPW5ldyBaJGMoJ1AzX0VYRUNVVElPTicsMil9XG5mdW5jdGlvbiB0VmMoKXt0VmM9Y2NiO3NWYz1uZXcgdVZjKCdPVkVSTEFQX1JFTU9WQUwnLDApO3FWYz1uZXcgdVZjKCdDT01QQUNUSU9OJywxKTtyVmM9bmV3IHVWYygnR1JBUEhfU0laRV9DQUxDVUxBVElPTicsMil9XG5mdW5jdGlvbiBKeShhLGIpe0l5KCk7cmV0dXJuIE15KFFpZSksJHduZC5NYXRoLmFicyhhLWIpPD1RaWV8fGE9PWJ8fGlzTmFOKGEpJiZpc05hTihiKT8wOmE8Yj8tMTphPmI/MTpOeShpc05hTihhKSxpc05hTihiKSl9XG5mdW5jdGlvbiB5T2MoYSxiKXt2YXIgYyxkO2M9SnNiKGEsMCk7d2hpbGUoYy5iIT1jLmQuYyl7ZD1HZGIoRUQoWHNiKGMpKSk7aWYoZD09Yil7cmV0dXJufWVsc2UgaWYoZD5iKXtZc2IoYyk7YnJlYWt9fVZzYihjLGIpfVxuZnVuY3Rpb24gdDRjKGEsYil7dmFyIGMsZCxlLGYsZztjPWIuZjtYcmIoYS5jLmQsYyxiKTtpZihiLmchPW51bGwpe2ZvcihlPWIuZyxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07WHJiKGEuYy5lLGQsYil9fX1cbmZ1bmN0aW9uIElsYihhLGIsYyxkKXt2YXIgZSxmLGc7Zm9yKGU9YisxO2U8YzsrK2Upe2ZvcihmPWU7Zj5iJiZkLnVlKGFbZi0xXSxhW2ZdKT4wOy0tZil7Zz1hW2ZdO05DKGEsZixhW2YtMV0pO05DKGEsZi0xLGcpfX19XG5mdW5jdGlvbiBkaWQoYSxiLGMsZCl7aWYoYjwwKXt1aWQoYSxjLGQpfWVsc2V7aWYoIWMuSWooKSl7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2MubmUoKStqdGUpKX1CRChjLDY2KS5OaigpLlRqKGEsYS55aCgpLGIsZCl9fVxuZnVuY3Rpb24geEZiKGEsYil7aWYoYj09YS5kKXtyZXR1cm4gYS5lfWVsc2UgaWYoYj09YS5lKXtyZXR1cm4gYS5kfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoJ05vZGUgJytiKycgbm90IHBhcnQgb2YgZWRnZSAnK2EpKX19XG5mdW5jdGlvbiBpRWIoYSxiKXtzd2l0Y2goYi5nKXtjYXNlIDI6cmV0dXJuIGEuYjtjYXNlIDE6cmV0dXJuIGEuYztjYXNlIDQ6cmV0dXJuIGEuZDtjYXNlIDM6cmV0dXJuIGEuYTtkZWZhdWx0OnJldHVybiBmYWxzZTt9fVxuZnVuY3Rpb24gR1ZiKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAyOnJldHVybiBhLmI7Y2FzZSAxOnJldHVybiBhLmM7Y2FzZSA0OnJldHVybiBhLmQ7Y2FzZSAzOnJldHVybiBhLmE7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX1cbmZ1bmN0aW9uIFhrZChhLGIsYyxkKXtzd2l0Y2goYil7Y2FzZSAzOnJldHVybiBhLmY7Y2FzZSA0OnJldHVybiBhLmc7Y2FzZSA1OnJldHVybiBhLmk7Y2FzZSA2OnJldHVybiBhLmo7fXJldHVybiBFa2QoYSxiLGMsZCl9XG5mdW5jdGlvbiBMamMoYSl7aWYoYS5rIT0oajBiKCksaDBiKSl7cmV0dXJuIGZhbHNlfXJldHVybiBGQWIobmV3IFlBYihudWxsLG5ldyBMdWIobmV3IFNyKHVyKFVfYihhKS5hLktjKCksbmV3IFNxKSkpKSxuZXcgTWpjKX1cbmZ1bmN0aW9uIE1FZChhKXtpZihhLmU9PW51bGwpe3JldHVybiBhfWVsc2UgIWEuYyYmKGEuYz1uZXcgTkVkKChhLmYmMjU2KSE9MCxhLmksYS5hLGEuZCwoYS5mJjE2KSE9MCxhLmosYS5nLG51bGwpKTtyZXR1cm4gYS5jfVxuZnVuY3Rpb24gVkMoYSxiKXtpZihhLmg9PUdqZSYmYS5tPT0wJiZhLmw9PTApe2ImJihRQz1UQygwLDAsMCkpO3JldHVybiBTQygod0QoKSx1RCkpfWImJihRQz1UQyhhLmwsYS5tLGEuaCkpO3JldHVybiBUQygwLDAsMCl9XG5mdW5jdGlvbiBmY2IoYSl7dmFyIGI7aWYoQXJyYXkuaXNBcnJheShhKSYmYS5pbT09PWdjYil7cmV0dXJuIGhkYihyYihhKSkrJ0AnKyhiPXRiKGEpPj4+MCxiLnRvU3RyaW5nKDE2KSl9cmV0dXJuIGEudG9TdHJpbmcoKX1cbmZ1bmN0aW9uIFJwYihhKXt2YXIgYjt0aGlzLmE9KGI9QkQoYS5lJiZhLmUoKSw5KSxuZXcgeHFiKGIsQkQoX0JiKGIsYi5sZW5ndGgpLDkpLDApKTt0aGlzLmI9S0MoU0ksVWhlLDEsdGhpcy5hLmEubGVuZ3RoLDUsMSl9XG5mdW5jdGlvbiBfT2IoYSl7dmFyIGIsYyxkO3RoaXMuYT1uZXcgenNiO2ZvcihkPW5ldyBvbGIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE0KTtiPW5ldyBNT2I7R09iKGIsYyk7UXFiKHRoaXMuYSxiKX19XG5mdW5jdGlvbiBjS2IoYSl7JEpiKCk7dmFyIGIsYyxkLGU7Yj1hLm8uYjtmb3IoZD1CRChCRChRYyhhLnIsKFVjZCgpLFJjZCkpLDIxKSw4NCkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwxMTEpO2U9Yy5lO2UuYis9Yn19XG5mdW5jdGlvbiBhZyhhKXt2YXIgYjtpZihhLmIpe2FnKGEuYik7aWYoYS5iLmQhPWEuYyl7dGhyb3cgdmJiKG5ldyBBcGIpfX1lbHNlIGlmKGEuZC5kYygpKXtiPUJEKGEuZi5jLnhjKGEuZSksMTQpOyEhYiYmKGEuZD1iKX19XG5mdW5jdGlvbiBmRmQoYSl7dmFyIGI7aWYoYT09bnVsbClyZXR1cm4gdHJ1ZTtiPWEubGVuZ3RoO3JldHVybiBiPjAmJihCQ2IoYi0xLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoYi0xKT09NTgpJiYhT0VkKGEsQ0VkLERFZCl9XG5mdW5jdGlvbiBPRWQoYSxiLGMpe3ZhciBkLGU7Zm9yKGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe2lmKF9FZCgoQkNiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSksYixjKSlyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBKT2IoYSxiKXt2YXIgYyxkO2ZvcihkPWEuZS5hLmVjKCkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwyNjYpO2lmKHQ2YyhiLGMuZCl8fG82YyhiLGMuZCkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBROWIoYSxiKXt2YXIgYyxkLGU7ZD1OOWIoYSxiKTtlPWRbZC5sZW5ndGgtMV0vMjtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKXtpZihkW2NdPj1lKXtyZXR1cm4gYi5jK2N9fXJldHVybiBiLmMrYi5iLmdjKCl9XG5mdW5jdGlvbiBOQ2QoYSxiKXtMQ2QoKTt2YXIgYyxkLGUsZjtkPUtMZChhKTtlPWI7S2xiKGQsMCxkLmxlbmd0aCxlKTtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKXtmPU1DZChhLGRbY10sYyk7YyE9ZiYmV3hkKGEsYyxmKX19XG5mdW5jdGlvbiBFSGIoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZD0wO2M9MDtmb3IoZj1iLGc9MCxoPWYubGVuZ3RoO2c8aDsrK2cpe2U9ZltnXTtpZihlPjApe2QrPWU7KytjfX1jPjEmJihkKz1hLmQqKGMtMSkpO3JldHVybiBkfVxuZnVuY3Rpb24gSHRkKGEpe3ZhciBiLGMsZDtkPW5ldyBIZmI7ZC5hKz0nWyc7Zm9yKGI9MCxjPWEuZ2MoKTtiPGM7KXtFZmIoZCx4ZmIoYS5raShiKSkpOysrYjxjJiYoZC5hKz1TaGUsZCl9ZC5hKz0nXSc7cmV0dXJuIGQuYX1cbmZ1bmN0aW9uIGZzZChhKXt2YXIgYixjLGQsZSxmO2Y9aHNkKGEpO2M9RmhlKGEuYyk7ZD0hYztpZihkKXtlPW5ldyB3QjtjQyhmLCdrbm93bkxheW91dGVycycsZSk7Yj1uZXcgcXNkKGUpO3JlYihhLmMsYil9cmV0dXJuIGZ9XG5mdW5jdGlvbiBDZShhLGIpe3ZhciBjLGQsZTt1Q2IoYik7Yz1mYWxzZTtmb3IoZD1uZXcgb2xiKGEpO2QuYTxkLmMuYy5sZW5ndGg7KXtlPW1sYihkKTtpZih6ZShiLGUsZmFsc2UpKXtubGIoZCk7Yz10cnVlfX1yZXR1cm4gY31cbmZ1bmN0aW9uIFVHYihhKXt2YXIgYixjLGQ7ZD1FZGIoRUQoYS5hLldlKChZOWMoKSxROWMpKSkpO2ZvcihjPW5ldyBvbGIoYS5hLnhmKCkpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw2ODApO1hHYihhLGIsZCl9fVxuZnVuY3Rpb24gTVViKGEsYil7dmFyIGMsZDtmb3IoZD1uZXcgb2xiKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw0Nik7RWtiKGEuYi5iLEJEKGMuYiw4MSkpO2VWYihCRChjLmEsMTg5KSxCRChjLmIsODEpKX19XG5mdW5jdGlvbiBYQ2MoYSxiLGMpe3ZhciBkLGU7ZT1hLmEuYjtmb3IoZD1lLmMubGVuZ3RoO2Q8YztkKyspe0RrYihlLDAsbmV3IEgxYihhLmEpKX0kX2IoYixCRChJa2IoZSxlLmMubGVuZ3RoLWMpLDI5KSk7YS5iW2IucF09Y31cbmZ1bmN0aW9uIEpUYihhLGIsYyl7dmFyIGQ7ZD1jOyFkJiYoZD1ZZGQobmV3IFpkZCwwKSk7T2RkKGQsVm1lLDIpO3FaYihhLmIsYixVZGQoZCwxKSk7TFRiKGEsYixVZGQoZCwxKSk7X1liKGIsVWRkKGQsMSkpO1FkZChkKX1cbmZ1bmN0aW9uIGVLYyhhLGIsYyxkLGUpe0ZKYygpO0FGYihERmIoQ0ZiKEJGYihFRmIobmV3IEZGYiwwKSxlLmQuZS1hKSxiKSxlLmQpKTtBRmIoREZiKENGYihCRmIoRUZiKG5ldyBGRmIsMCksYy1lLmEuZSksZS5hKSxkKSl9XG5mdW5jdGlvbiBlJGMoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYz1iO3RoaXMuYj1jO3RoaXMuZj1kO3RoaXMuZD1lO3RoaXMuZT1mO3RoaXMuYz4wJiZ0aGlzLmI+MCYmcSRjKHRoaXMuYyx0aGlzLmIsdGhpcy5hKX1cbmZ1bmN0aW9uIGV6YyhhKXtkemMoKTt0aGlzLmM9T3UoT0MoR0MoaDAsMSksVWhlLDgzMSwwLFtVeWNdKSk7dGhpcy5iPW5ldyBMcWI7dGhpcy5hPWE7UmhiKHRoaXMuYixiemMsMSk7SGtiKGN6YyxuZXcgWGVkKHRoaXMpKX1cbmZ1bmN0aW9uIEkyYyhhLGIpe3ZhciBjO2lmKGEuZCl7aWYoTWhiKGEuYixiKSl7cmV0dXJuIEJEKE9oYihhLmIsYiksNTEpfWVsc2V7Yz1iLktmKCk7UmhiKGEuYixiLGMpO3JldHVybiBjfX1lbHNle3JldHVybiBiLktmKCl9fVxuZnVuY3Rpb24gS2diKGEsYil7dmFyIGM7aWYoUEQoYSk9PT1QRChiKSl7cmV0dXJuIHRydWV9aWYoSkQoYiw5MSkpe2M9QkQoYiw5MSk7cmV0dXJuIGEuZT09Yy5lJiZhLmQ9PWMuZCYmTGdiKGEsYy5hKX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBaY2QoYSl7VWNkKCk7c3dpdGNoKGEuZyl7Y2FzZSA0OnJldHVybiBBY2Q7Y2FzZSAxOnJldHVybiB6Y2Q7Y2FzZSAzOnJldHVybiBSY2Q7Y2FzZSAyOnJldHVybiBUY2Q7ZGVmYXVsdDpyZXR1cm4gU2NkO319XG5mdW5jdGlvbiBZa2QoYSxiKXtzd2l0Y2goYil7Y2FzZSAzOnJldHVybiBhLmYhPTA7Y2FzZSA0OnJldHVybiBhLmchPTA7Y2FzZSA1OnJldHVybiBhLmkhPTA7Y2FzZSA2OnJldHVybiBhLmohPTA7fXJldHVybiBIa2QoYSxiKX1cbmZ1bmN0aW9uIGdXYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBGWGM7Y2FzZSAxOnJldHVybiBuZXcgSVhjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoanJlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fVxuZnVuY3Rpb24gUVVjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IENYYztjYXNlIDE6cmV0dXJuIG5ldyBNWGM7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYihEbmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319XG5mdW5jdGlvbiBiMWMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgczFjO2Nhc2UgMTpyZXR1cm4gbmV3IHcxYztkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKE1yZSsoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX1cbmZ1bmN0aW9uIHFXYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBTVmM7Y2FzZSAyOnJldHVybiBuZXcgS1ZjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoanJlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fVxuZnVuY3Rpb24gcnliKGEpe3ZhciBiLGM7aWYoYS5iKXtyZXR1cm4gYS5ifWM9bHliP251bGw6YS5kO3doaWxlKGMpe2I9bHliP251bGw6Yy5iO2lmKGIpe3JldHVybiBifWM9bHliP251bGw6Yy5kfXJldHVybiAkeGIoKSxaeGJ9XG5mdW5jdGlvbiBoaGIoYSl7dmFyIGIsYyxkO2lmKGEuZT09MCl7cmV0dXJuIDB9Yj1hLmQ8PDU7Yz1hLmFbYS5kLTFdO2lmKGEuZTwwKXtkPU1nYihhKTtpZihkPT1hLmQtMSl7LS1jO2M9Y3wwfX1iLT1oZWIoYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBiaGIoYSl7dmFyIGIsYyxkO2lmKGE8RmdiLmxlbmd0aCl7cmV0dXJuIEZnYlthXX1jPWE+PjU7Yj1hJjMxO2Q9S0MoV0Qsb2plLDI1LGMrMSwxNSwxKTtkW2NdPTE8PGI7cmV0dXJuIG5ldyBWZ2IoMSxjKzEsZCl9XG5mdW5jdGlvbiBPMmIoYSl7dmFyIGIsYyxkO2M9YS56ZygpO2lmKGMpe2I9YS5VZygpO2lmKEpEKGIsMTYwKSl7ZD1PMmIoQkQoYiwxNjApKTtpZihkIT1udWxsKXtyZXR1cm4gZCsnLicrY319cmV0dXJuIGN9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiB6ZShhLGIsYyl7dmFyIGQsZTtmb3IoZT1hLktjKCk7ZS5PYigpOyl7ZD1lLlBiKCk7aWYoUEQoYik9PT1QRChkKXx8YiE9bnVsbCYmcGIoYixkKSl7YyYmZS5RYigpO3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiB6dmQoYSxiLGMpe3ZhciBkLGU7KythLmo7aWYoYy5kYygpKXtyZXR1cm4gZmFsc2V9ZWxzZXtmb3IoZT1jLktjKCk7ZS5PYigpOyl7ZD1lLlBiKCk7YS5IaShiLGEub2koYixkKSk7KytifXJldHVybiB0cnVlfX1cbmZ1bmN0aW9uIHlBKGEsYixjLGQpe3ZhciBlLGY7Zj1jLWI7aWYoZjwzKXt3aGlsZShmPDMpe2EqPTEwOysrZn19ZWxzZXtlPTE7d2hpbGUoZj4zKXtlKj0xMDstLWZ9YT0oYSsoZT4+MSkpL2V8MH1kLmk9YTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIFhVYihhKXtMVWIoKTtyZXR1cm4gQmNiKCksR1ZiKEJEKGEuYSw4MSkuaixCRChhLmIsMTAzKSl8fEJEKGEuYSw4MSkuZC5lIT0wJiZHVmIoQkQoYS5hLDgxKS5qLEJEKGEuYiwxMDMpKT90cnVlOmZhbHNlfVxuZnVuY3Rpb24gczNjKGEpe3AzYygpO2lmKEJEKGEuV2UoKFk5YygpLGI5YykpLDE3NCkuSGMoKElkZCgpLEdkZCkpKXtCRChhLldlKHg5YyksMTc0KS5GYygocmNkKCkscWNkKSk7QkQoYS5XZShiOWMpLDE3NCkuTWMoR2RkKX19XG5mdW5jdGlvbiBHeGQoYSxiKXt2YXIgYyxkO2lmKCFiKXtyZXR1cm4gZmFsc2V9ZWxzZXtmb3IoYz0wO2M8YS5pOysrYyl7ZD1CRChhLmdbY10sMzY2KTtpZihkLkRpKGIpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB3dGQoYSxiKX19XG5mdW5jdGlvbiBwdmQoYSl7dmFyIGIsYyxkLGU7Yj1uZXcgd0I7Zm9yKGU9bmV3IERuYihhLmIuS2MoKSk7ZS5iLk9iKCk7KXtkPUJEKGUuYi5QYigpLDY4Nik7Yz1sc2QoZCk7dUIoYixiLmEubGVuZ3RoLGMpfXJldHVybiBiLmF9XG5mdW5jdGlvbiBjTGIoYSl7dmFyIGI7IWEuYyYmKGEuYz1uZXcgVktiKTtPa2IoYS5kLG5ldyBqTGIpO19LYihhKTtiPVVLYihhKTtNQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5kLDE2KSksbmV3IENMYihhKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBtS2QoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBxbmQoYSk7Yj1uZXcgSmZiKHFuZChhKSk7Yi5hKz0nIChpbnN0YW5jZUNsYXNzTmFtZTogJztFZmIoYixhLkQpO2IuYSs9JyknO3JldHVybiBiLmF9XG5mdW5jdGlvbiBQcWQoYSxiKXt2YXIgYyxkLGUsZjtpZihiKXtlPVhwZChiLCd4Jyk7Yz1uZXcgYnNkKGEpO2htZChjLmEsKHVDYihlKSxlKSk7Zj1YcGQoYiwneScpO2Q9bmV3IGNzZChhKTtpbWQoZC5hLCh1Q2IoZiksZikpfX1cbmZ1bmN0aW9uIEVxZChhLGIpe3ZhciBjLGQsZSxmO2lmKGIpe2U9WHBkKGIsJ3gnKTtjPW5ldyBZcmQoYSk7b21kKGMuYSwodUNiKGUpLGUpKTtmPVhwZChiLCd5Jyk7ZD1uZXcgX3JkKGEpO3BtZChkLmEsKHVDYihmKSxmKSl9fVxuZnVuY3Rpb24gYkxkKGEsYil7dmFyIGMsZCxlO2M9KGEuaT09bnVsbCYmVEtkKGEpLGEuaSk7ZD1iLmFqKCk7aWYoZCE9LTEpe2ZvcihlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2lmKGNbZF09PWIpe3JldHVybiBkfX19cmV0dXJuIC0xfVxuZnVuY3Rpb24gdE5kKGEpe3ZhciBiLGMsZCxlLGY7Yz1CRChhLmcsNjc0KTtmb3IoZD1hLmktMTtkPj0wOy0tZCl7Yj1jW2RdO2ZvcihlPTA7ZTxkOysrZSl7Zj1jW2VdO2lmKHVOZChhLGIsZikpe3R1ZChhLGQpO2JyZWFrfX19fVxuZnVuY3Rpb24gakNiKGIpe3ZhciBjPWIuZTtmdW5jdGlvbiBkKGEpe2lmKCFhfHxhLmxlbmd0aD09MCl7cmV0dXJuICcnfXJldHVybiAnXFx0JythLmpvaW4oJ1xcblxcdCcpfVxucmV0dXJuIGMmJihjLnN0YWNrfHxkKGJbWWllXSkpfVxuZnVuY3Rpb24gbm0oYSl7aW0oKTt2YXIgYjtiPWEuUGMoKTtzd2l0Y2goYi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gaG07Y2FzZSAxOnJldHVybiBuZXcgbXkoUWIoYlswXSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyB1eCh3bShiKSk7fX1cbmZ1bmN0aW9uIFdfYihhLGIpe3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gTnEoYS5qLCh6MGIoKSx1MGIpKTtjYXNlIDI6cmV0dXJuIE5xKGEuaiwoejBiKCksdzBiKSk7ZGVmYXVsdDpyZXR1cm4gbW1iKCksbW1iKCksam1iO319XG5mdW5jdGlvbiAka2QoYSxiKXtzd2l0Y2goYil7Y2FzZSAzOmFsZChhLDApO3JldHVybjtjYXNlIDQ6Y2xkKGEsMCk7cmV0dXJuO2Nhc2UgNTpkbGQoYSwwKTtyZXR1cm47Y2FzZSA2OmVsZChhLDApO3JldHVybjt9SmtkKGEsYil9XG5mdW5jdGlvbiBkemMoKXtkemM9Y2NiO1Z5YygpO2J6Yz0oTnljKCksdnljKTtjemM9T3UoT0MoR0MoUTMsMSksenFlLDE0NiwwLFtreWMsbHljLG55YyxveWMscnljLHN5Yyx0eWMsdXljLHh5Yyx6eWMsbXljLHB5Yyx3eWNdKSl9XG5mdW5jdGlvbiBZOWIoYSl7dmFyIGIsYztiPWEuZD09KEFwYygpLHZwYyk7Yz1VOWIoYSk7YiYmIWN8fCFiJiZjP3lOYihhLmEsKE55YygpLG13YyksKEY3YygpLEQ3YykpOnlOYihhLmEsKE55YygpLG13YyksKEY3YygpLEM3YykpfVxuZnVuY3Rpb24gWEFiKGEsYil7dmFyIGM7Yz1CRChHQWIoYSxCeWIobmV3IGZ6YixuZXcgZHpiLG5ldyBFemIsT0MoR0MoeEwsMSksS2llLDEzMiwwLFsoRnliKCksRHliKV0pKSksMTUpO3JldHVybiBjLlFjKGFCYihjLmdjKCkpKX1cbmZ1bmN0aW9uIERlZCgpe0RlZD1jY2I7Q2VkPW5ldyBFZWQoJ1NJTVBMRScsMCk7emVkPW5ldyBFZWQoJ0dST1VQX0RFQycsMSk7QmVkPW5ldyBFZWQoJ0dST1VQX01JWEVEJywyKTtBZWQ9bmV3IEVlZCgnR1JPVVBfSU5DJywzKX1cbmZ1bmN0aW9uIENXZCgpe0NXZD1jY2I7QVdkPW5ldyBEV2Q7dFdkPW5ldyBHV2Q7dVdkPW5ldyBKV2Q7dldkPW5ldyBNV2Q7d1dkPW5ldyBQV2Q7eFdkPW5ldyBTV2Q7eVdkPW5ldyBWV2Q7eldkPW5ldyBZV2Q7QldkPW5ldyBfV2R9XG5mdW5jdGlvbiBGSGIoYSxiLGMpe3RIYigpO29IYi5jYWxsKHRoaXMpO3RoaXMuYT1JQyhvTixbbmllLGlsZV0sWzU5NSwyMTJdLDAsW3NIYixySGJdLDIpO3RoaXMuYz1uZXcgSTZjO3RoaXMuZz1hO3RoaXMuZj1iO3RoaXMuZD1jfVxuZnVuY3Rpb24gcE5iKGEsYil7dGhpcy5uPUlDKFhELFtuaWUsU2plXSxbMzY0LDI1XSwxNCxbYixRRCgkd25kLk1hdGguY2VpbChhLzMyKSldLDIpO3RoaXMubz1hO3RoaXMucD1iO3RoaXMuaj1hLTE+PjE7dGhpcy5rPWItMT4+MX1cbmZ1bmN0aW9uIHIzYihhLGIpe09kZChiLCdFbmQgbGFiZWwgcG9zdC1wcm9jZXNzaW5nJywxKTtNQWIoSkFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmIsMTYpKSxuZXcgdzNiKSxuZXcgeTNiKSxuZXcgQTNiKTtRZGQoYil9XG5mdW5jdGlvbiBOTGMoYSxiLGMpe3ZhciBkLGU7ZD1FZGIoYS5wW2IuaS5wXSkrRWRiKGEuZFtiLmkucF0pK2Iubi5iK2IuYS5iO2U9RWRiKGEucFtjLmkucF0pK0VkYihhLmRbYy5pLnBdKStjLm4uYitjLmEuYjtyZXR1cm4gZS1kfVxuZnVuY3Rpb24geGhiKGEsYixjKXt2YXIgZCxlO2Q9eGJiKGMsWWplKTtmb3IoZT0wO3liYihkLDApIT0wJiZlPGI7ZSsrKXtkPXdiYihkLHhiYihhW2VdLFlqZSkpO2FbZV09VGJiKGQpO2Q9T2JiKGQsMzIpfXJldHVybiBUYmIoZCl9XG5mdW5jdGlvbiAkRWQoYSl7dmFyIGIsYyxkLGU7ZT0wO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKXtiPShCQ2IoYyxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGMpKTtiPDY0JiYoZT1NYmIoZSxOYmIoMSxiKSkpfXJldHVybiBlfVxuZnVuY3Rpb24gUzlkKGEpe3ZhciBiO3JldHVybiBhPT1udWxsP251bGw6bmV3IFlnYigoYj1RZ2UoYSx0cnVlKSxiLmxlbmd0aD4wJiYoQkNiKDAsYi5sZW5ndGgpLGIuY2hhckNvZGVBdCgwKT09NDMpP2Iuc3Vic3RyKDEpOmIpKX1cbmZ1bmN0aW9uIFQ5ZChhKXt2YXIgYjtyZXR1cm4gYT09bnVsbD9udWxsOm5ldyBZZ2IoKGI9UWdlKGEsdHJ1ZSksYi5sZW5ndGg+MCYmKEJDYigwLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoMCk9PTQzKT9iLnN1YnN0cigxKTpiKSl9XG5mdW5jdGlvbiB4dWQoYSxiKXt2YXIgYztpZihhLmk+MCl7aWYoYi5sZW5ndGg8YS5pKXtjPWl6ZChyYihiKS5jLGEuaSk7Yj1jfSRmYihhLmcsMCxiLDAsYS5pKX1iLmxlbmd0aD5hLmkmJk5DKGIsYS5pLG51bGwpO3JldHVybiBifVxuZnVuY3Rpb24gU3hkKGEsYixjKXt2YXIgZCxlLGY7aWYoYS5laigpKXtkPWEuaTtmPWEuZmooKTtrdWQoYSxkLGIpO2U9YS5aaSgzLG51bGwsYixkLGYpOyFjPyhjPWUpOmMuRWkoZSl9ZWxzZXtrdWQoYSxhLmksYil9cmV0dXJuIGN9XG5mdW5jdGlvbiBITWQoYSxiLGMpe3ZhciBkLGU7ZD1uZXcgcFNkKGEuZSw0LDEwLChlPWIuYyxKRChlLDg4KT9CRChlLDI2KTooakdkKCksX0ZkKSksbnVsbCxITGQoYSxiKSxmYWxzZSk7IWM/KGM9ZCk6Yy5FaShkKTtyZXR1cm4gY31cbmZ1bmN0aW9uIEdNZChhLGIsYyl7dmFyIGQsZTtkPW5ldyBwU2QoYS5lLDMsMTAsbnVsbCwoZT1iLmMsSkQoZSw4OCk/QkQoZSwyNik6KGpHZCgpLF9GZCkpLEhMZChhLGIpLGZhbHNlKTshYz8oYz1kKTpjLkVpKGQpO3JldHVybiBjfVxuZnVuY3Rpb24gX0piKGEpeyRKYigpO3ZhciBiO2I9bmV3IGc3YyhCRChhLmUuV2UoKFk5YygpLF84YykpLDgpKTtpZihhLkIuSGMoKElkZCgpLEJkZCkpKXtiLmE8PTAmJihiLmE9MjApO2IuYjw9MCYmKGIuYj0yMCl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBMemMoYSl7SXpjKCk7dmFyIGI7KCFhLnE/KG1tYigpLG1tYigpLGttYik6YS5xKS5fYigoTnljKCksQ3hjKSk/KGI9QkQodk5iKGEsQ3hjKSwxOTcpKTooYj1CRCh2TmIoUV9iKGEpLER4YyksMTk3KSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBwQmMoYSxiKXt2YXIgYyxkO2Q9bnVsbDtpZih3TmIoYSwoTnljKCkscXljKSkpe2M9QkQodk5iKGEscXljKSw5NCk7Yy5YZShiKSYmKGQ9Yy5XZShiKSl9ZD09bnVsbCYmKGQ9dk5iKFFfYihhKSxiKSk7cmV0dXJuIGR9XG5mdW5jdGlvbiBaZShhLGIpe3ZhciBjLGQsZTtpZihKRChiLDQyKSl7Yz1CRChiLDQyKTtkPWMuY2QoKTtlPUh2KGEuUmMoKSxkKTtyZXR1cm4gSGIoZSxjLmRkKCkpJiYoZSE9bnVsbHx8YS5SYygpLl9iKGQpKX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBxQWQoYSxiKXt2YXIgYyxkLGU7aWYoYS5mPjApe2EucWooKTtkPWI9PW51bGw/MDp0YihiKTtlPShkJk9oZSklYS5kLmxlbmd0aDtjPXhBZChhLGUsZCxiKTtyZXR1cm4gYyE9LTF9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gQUFkKGEsYil7dmFyIGMsZCxlO2lmKGEuZj4wKXthLnFqKCk7ZD1iPT1udWxsPzA6dGIoYik7ZT0oZCZPaGUpJWEuZC5sZW5ndGg7Yz13QWQoYSxlLGQsYik7aWYoYyl7cmV0dXJuIGMuZGQoKX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBSMmQoYSxiKXt2YXIgYyxkLGUsZjtmPVM2ZChhLmUuVGcoKSxiKTtjPUJEKGEuZywxMTkpO2ZvcihlPTA7ZTxhLmk7KytlKXtkPWNbZV07aWYoZi5ybChkLmFrKCkpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfVxuZnVuY3Rpb24gQjZkKGEpe2lmKGEuYj09bnVsbCl7d2hpbGUoYS5hLk9iKCkpe2EuYj1hLmEuUGIoKTtpZighQkQoYS5iLDQ5KS5aZygpKXtyZXR1cm4gdHJ1ZX19YS5iPW51bGw7cmV0dXJuIGZhbHNlfWVsc2V7cmV0dXJuIHRydWV9fVxuZnVuY3Rpb24gTXlkKGIsYyl7Yi5taigpO3RyeXtiLmQuVmMoYi5lKyssYyk7Yi5mPWIuZC5qO2IuZz0tMX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDczKSl7dGhyb3cgdmJiKG5ldyBBcGIpfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIElBKGEsYil7R0EoKTt2YXIgYyxkO2M9TEEoKEtBKCksS0EoKSxKQSkpO2Q9bnVsbDtiPT1jJiYoZD1CRChQaGIoRkEsYSksNjE1KSk7aWYoIWQpe2Q9bmV3IEhBKGEpO2I9PWMmJlNoYihGQSxhLGQpfXJldHVybiBkfVxuZnVuY3Rpb24gRXBiKGEsYil7dmFyIGMsZDthLmE9d2JiKGEuYSwxKTthLmM9JHduZC5NYXRoLm1pbihhLmMsYik7YS5iPSR3bmQuTWF0aC5tYXgoYS5iLGIpO2EuZCs9YjtjPWItYS5mO2Q9YS5lK2M7YS5mPWQtYS5lLWM7YS5lPWR9XG5mdW5jdGlvbiBvZ2IoYSxiKXt2YXIgYzthLmM9YjthLmE9aGhiKGIpO2EuYTw1NCYmKGEuZj0oYz1iLmQ+MT9NYmIoTmJiKGIuYVsxXSwzMikseGJiKGIuYVswXSxZamUpKTp4YmIoYi5hWzBdLFlqZSksU2JiKEliYihiLmUsYykpKSl9XG5mdW5jdGlvbiBIYmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hJWI7aWYoS2plPGMmJmM8SWplKXtyZXR1cm4gY319cmV0dXJuIHpiYigoVUMoRmJiKGEpP1JiYihhKTphLEZiYihiKT9SYmIoYik6Yix0cnVlKSxRQykpfVxuZnVuY3Rpb24gcDViKGEsYil7dmFyIGM7bTViKGIpO2M9QkQodk5iKGEsKE55YygpLFJ3YykpLDI3Nik7ISFjJiZ5TmIoYSxSd2MsVHFjKGMpKTtuNWIoYS5jKTtuNWIoYS5mKTtvNWIoYS5kKTtvNWIoQkQodk5iKGEsd3hjKSwyMDcpKX1cbmZ1bmN0aW9uIHJIYyhhKXt0aGlzLmU9S0MoV0Qsb2plLDI1LGEubGVuZ3RoLDE1LDEpO3RoaXMuYz1LQyhzYmIsZGxlLDI1LGEubGVuZ3RoLDE2LDEpO3RoaXMuYj1LQyhzYmIsZGxlLDI1LGEubGVuZ3RoLDE2LDEpO3RoaXMuZj0wfVxuZnVuY3Rpb24gQkRjKGEpe3ZhciBiLGM7YS5qPUtDKFVELFZqZSwyNSxhLnAuYy5sZW5ndGgsMTUsMSk7Zm9yKGM9bmV3IG9sYihhLnApO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMCk7YS5qW2IucF09Yi5vLmIvYS5pfX1cbmZ1bmN0aW9uIHlpYyhhKXt2YXIgYjtpZihhLmM9PTApe3JldHVybn1iPUJEKElrYihhLmEsYS5iKSwyODcpO2IuYj09MT8oKythLmIsYS5iPGEuYS5jLmxlbmd0aCYmQ2ljKEJEKElrYihhLmEsYS5iKSwyODcpKSk6LS1iLmI7LS1hLmN9XG5mdW5jdGlvbiBlYWMoYSl7dmFyIGI7Yj1hLmE7ZG97Yj1CRChScihuZXcgU3IodXIoVV9iKGIpLmEuS2MoKSxuZXcgU3EpKSksMTcpLmQuaTtiLms9PShqMGIoKSxnMGIpJiZFa2IoYS5lLGIpfXdoaWxlKGIuaz09KGowYigpLGcwYikpfVxuZnVuY3Rpb24gaWRkKCl7aWRkPWNjYjtmZGQ9bmV3IHEwYigxNSk7ZWRkPW5ldyBPc2QoKFk5YygpLGY5YyksZmRkKTtoZGQ9bmV3IE9zZChUOWMsMTUpO2dkZD1uZXcgT3NkKEU5YyxtZWIoMCkpO2RkZD1uZXcgT3NkKHI4Yyx0bWUpfVxuZnVuY3Rpb24gdGRkKCl7dGRkPWNjYjtyZGQ9bmV3IHVkZCgnUE9SVFMnLDApO3NkZD1uZXcgdWRkKCdQT1JUX0xBQkVMUycsMSk7cWRkPW5ldyB1ZGQoJ05PREVfTEFCRUxTJywyKTtwZGQ9bmV3IHVkZCgnTUlOSU1VTV9TSVpFJywzKX1cbmZ1bmN0aW9uIFJlZShhLGIpe3ZhciBjLGQ7ZD1iLmxlbmd0aDtmb3IoYz0wO2M8ZDtjKz0yKVVmZShhLChCQ2IoYyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGMpKSwoQkNiKGMrMSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGMrMSkpKX1cbmZ1bmN0aW9uIF9aYyhhLGIsYyl7dmFyIGQsZSxmLGc7Zj1iLWEuZTtnPWMtYS5mO2ZvcihlPW5ldyBvbGIoYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTg3KTtPWmMoZCxkLnMrZixkLnQrZyl9YS5lPWI7YS5mPWN9XG5mdW5jdGlvbiBqVWMoYSxiKXt2YXIgYyxkLGUsZjtmPWIuYi5iO2EuYT1uZXcgUHNiO2EuYj1LQyhXRCxvamUsMjUsZiwxNSwxKTtjPTA7Zm9yKGU9SnNiKGIuYiwwKTtlLmIhPWUuZC5jOyl7ZD1CRChYc2IoZSksODYpO2QuZz1jKyt9fVxuZnVuY3Rpb24gaWhiKGEsYil7dmFyIGMsZCxlLGY7Yz1iPj41O2ImPTMxO2U9YS5kK2MrKGI9PTA/MDoxKTtkPUtDKFdELG9qZSwyNSxlLDE1LDEpO2poYihkLGEuYSxjLGIpO2Y9bmV3IFZnYihhLmUsZSxkKTtKZ2IoZik7cmV0dXJuIGZ9XG5mdW5jdGlvbiBPZmUoYSxiLGMpe3ZhciBkLGU7ZD1CRChQaGIoWmVlLGIpLDExNyk7ZT1CRChQaGIoJGVlLGIpLDExNyk7aWYoYyl7U2hiKFplZSxhLGQpO1NoYigkZWUsYSxlKX1lbHNle1NoYigkZWUsYSxkKTtTaGIoWmVlLGEsZSl9fVxuZnVuY3Rpb24gQ3diKGEsYixjKXt2YXIgZCxlLGY7ZT1udWxsO2Y9YS5iO3doaWxlKGYpe2Q9YS5hLnVlKGIsZi5kKTtpZihjJiZkPT0wKXtyZXR1cm4gZn1pZihkPj0wKXtmPWYuYVsxXX1lbHNle2U9ZjtmPWYuYVswXX19cmV0dXJuIGV9XG5mdW5jdGlvbiBEd2IoYSxiLGMpe3ZhciBkLGUsZjtlPW51bGw7Zj1hLmI7d2hpbGUoZil7ZD1hLmEudWUoYixmLmQpO2lmKGMmJmQ9PTApe3JldHVybiBmfWlmKGQ8PTApe2Y9Zi5hWzBdfWVsc2V7ZT1mO2Y9Zi5hWzFdfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIE5pYyhhLGIsYyxkKXt2YXIgZSxmLGc7ZT1mYWxzZTtpZihmamMoYS5mLGMsZCkpe2lqYyhhLmYsYS5hW2JdW2NdLGEuYVtiXVtkXSk7Zj1hLmFbYl07Zz1mW2RdO2ZbZF09ZltjXTtmW2NdPWc7ZT10cnVlfXJldHVybiBlfVxuZnVuY3Rpb24gUUhjKGEsYixjLGQsZSl7dmFyIGYsZyxoO2c9ZTt3aGlsZShiLmIhPWIuYyl7Zj1CRChma2IoYiksMTApO2g9QkQoVl9iKGYsZCkuWGIoMCksMTEpO2EuZFtoLnBdPWcrKztjLmNbYy5jLmxlbmd0aF09aH1yZXR1cm4gZ31cbmZ1bmN0aW9uIGhCYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtnPWEuaztoPWIuaztkPWNbZy5nXVtoLmddO2U9RUQocEJjKGEsZCkpO2Y9RUQocEJjKGIsZCkpO3JldHVybiAkd25kLk1hdGgubWF4KCh1Q2IoZSksZSksKHVDYihmKSxmKSl9XG5mdW5jdGlvbiB6WmMoYSxiLGMpe3ZhciBkLGUsZixnO2Q9Yy9hLmMubGVuZ3RoO2U9MDtmb3IoZz1uZXcgb2xiKGEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyMDApO3ckYyhmLGYuZitkKmUpO3QkYyhmLGIsZCk7KytlfX1cbmZ1bmN0aW9uIGhuYyhhLGIsYyl7dmFyIGQsZSxmLGc7ZT1CRChPaGIoYS5iLGMpLDE3Nyk7ZD0wO2ZvcihnPW5ldyBvbGIoYi5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTEzKTtlW2YuZC5wXSYmKytkfXJldHVybiBkfVxuZnVuY3Rpb24gbXpkKGEpe3ZhciBiLGM7Yj1CRChBamQoYS5hLDQpLDEyNik7aWYoYiE9bnVsbCl7Yz1LQygkMyxodmUsNDE1LGIubGVuZ3RoLDAsMSk7JGZiKGIsMCxjLDAsYi5sZW5ndGgpO3JldHVybiBjfWVsc2V7cmV0dXJuIGp6ZH19XG5mdW5jdGlvbiBDeigpe3ZhciBhO2lmKHh6IT0wKXthPXN6KCk7aWYoYS15ej4yMDAwKXt5ej1hO3p6PSR3bmQuc2V0VGltZW91dChJeiwxMCl9fWlmKHh6Kys9PTApe0x6KChLeigpLEp6KSk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gd0NjKGEsYil7dmFyIGMsZCxlO2ZvcihkPW5ldyBTcih1cihVX2IoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7ZT1jLmQuaTtpZihlLmM9PWIpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBFayhiLGMpe3ZhciBkLGU7aWYoSkQoYywyNDUpKXtlPUJEKGMsMjQ1KTt0cnl7ZD1iLnZkKGUpO3JldHVybiBkPT0wfWNhdGNoKGEpe2E9dWJiKGEpO2lmKCFKRChhLDIwNSkpdGhyb3cgdmJiKGEpfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBYeigpe2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD4wKXskd25kLkVycm9yLnN0YWNrVHJhY2VMaW1pdD1FcnJvci5zdGFja1RyYWNlTGltaXQ9NjQ7cmV0dXJuIHRydWV9cmV0dXJuICdzdGFjaycgaW4gbmV3IEVycm9yfVxuZnVuY3Rpb24gQkRiKGEsYil7cmV0dXJuIEl5KCksSXkoKSxNeShRaWUpLCgkd25kLk1hdGguYWJzKGEtYik8PVFpZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpPzA6YTxiPy0xOmE+Yj8xOk55KGlzTmFOKGEpLGlzTmFOKGIpKSk+MH1cbmZ1bmN0aW9uIEREYihhLGIpe3JldHVybiBJeSgpLEl5KCksTXkoUWllKSwoJHduZC5NYXRoLmFicyhhLWIpPD1RaWV8fGE9PWJ8fGlzTmFOKGEpJiZpc05hTihiKT8wOmE8Yj8tMTphPmI/MTpOeShpc05hTihhKSxpc05hTihiKSkpPDB9XG5mdW5jdGlvbiBDRGIoYSxiKXtyZXR1cm4gSXkoKSxJeSgpLE15KFFpZSksKCR3bmQuTWF0aC5hYnMoYS1iKTw9UWllfHxhPT1ifHxpc05hTihhKSYmaXNOYU4oYik/MDphPGI/LTE6YT5iPzE6TnkoaXNOYU4oYSksaXNOYU4oYikpKTw9MH1cbmZ1bmN0aW9uIHlkYihhLGIpe3ZhciBjPTA7d2hpbGUoIWJbY118fGJbY109PScnKXtjKyt9dmFyIGQ9YltjKytdO2Zvcig7YzxiLmxlbmd0aDtjKyspe2lmKCFiW2NdfHxiW2NdPT0nJyl7Y29udGludWV9ZCs9YStiW2NdfXJldHVybiBkfVxuZnVuY3Rpb24gemZiKGEsYixjKXt2YXIgZCxlLGYsZztmPWIrYztBQ2IoYixmLGEubGVuZ3RoKTtnPScnO2ZvcihlPWI7ZTxmOyl7ZD0kd25kLk1hdGgubWluKGUrMTAwMDAsZik7Zys9dmZiKGEuc2xpY2UoZSxkKSk7ZT1kfXJldHVybiBnfVxuZnVuY3Rpb24gTjlkKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtmPW5ldyBSa2I7Zm9yKGM9Wm1kKGEpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtFa2IoZixRZ2UoYix0cnVlKSl9cmV0dXJuIGZ9XG5mdW5jdGlvbiBROWQoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXJldHVybiBudWxsO2Y9bmV3IFJrYjtmb3IoYz1abWQoYSksZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO0VrYihmLFFnZShiLHRydWUpKX1yZXR1cm4gZn1cbmZ1bmN0aW9uIFI5ZChhKXt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Zj1uZXcgUmtiO2ZvcihjPVptZChhKSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07RWtiKGYsUWdlKGIsdHJ1ZSkpfXJldHVybiBmfVxuZnVuY3Rpb24gdGVkKGEsYil7dmFyIGMsZCxlO2lmKGEuYyl7Y2xkKGEuYyxiKX1lbHNle2M9Yi1yZWQoYSk7Zm9yKGU9bmV3IG9sYihhLmQpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNTcpO3RlZChkLHJlZChkKStjKX19fVxuZnVuY3Rpb24gc2VkKGEsYil7dmFyIGMsZCxlO2lmKGEuYyl7YWxkKGEuYyxiKX1lbHNle2M9Yi1xZWQoYSk7Zm9yKGU9bmV3IG9sYihhLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNTcpO3NlZChkLHFlZChkKStjKX19fVxuZnVuY3Rpb24gdDZkKGEsYil7dmFyIGMsZCxlLGY7ZT1uZXcgU2tiKGIuZ2MoKSk7Zm9yKGQ9Yi5LYygpO2QuT2IoKTspe2M9ZC5QYigpO2Y9czZkKGEsQkQoYyw1NikpOyEhZiYmKGUuY1tlLmMubGVuZ3RoXT1mLHRydWUpfXJldHVybiBlfVxuZnVuY3Rpb24gTEFkKGEsYil7dmFyIGMsZCxlO2EucWooKTtkPWI9PW51bGw/MDp0YihiKTtlPShkJk9oZSklYS5kLmxlbmd0aDtjPXdBZChhLGUsZCxiKTtpZihjKXtKQWQoYSxjKTtyZXR1cm4gYy5kZCgpfWVsc2V7cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gcmRlKGEpe3ZhciBiLGM7Yz1zZGUoYSk7Yj1udWxsO3doaWxlKGEuYz09Mil7bmRlKGEpO2lmKCFiKXtiPSh3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgTGdlKDIpKTtLZ2UoYixjKTtjPWJ9Yy4kbChzZGUoYSkpfXJldHVybiBjfVxuZnVuY3Rpb24gV3BkKGEpe3ZhciBiLGMsZDtkPW51bGw7Yj1WdGUgaW4gYS5hO2M9IWI7aWYoYyl7dGhyb3cgdmJiKG5ldyBjcWQoJ0V2ZXJ5IGVsZW1lbnQgbXVzdCBoYXZlIGFuIGlkLicpKX1kPVZwZChhQyhhLFZ0ZSkpO3JldHVybiBkfVxuZnVuY3Rpb24gamlkKGEpe3ZhciBiLGMsZDtkPWEuWmcoKTtpZighZCl7Yj0wO2ZvcihjPWEuZWgoKTtjO2M9Yy5laCgpKXtpZigrK2I+V2plKXtyZXR1cm4gYy5maCgpfWQ9Yy5aZygpO2lmKCEhZHx8Yz09YSl7YnJlYWt9fX1yZXR1cm4gZH1cbmZ1bmN0aW9uIGZ2ZChhKXtldmQoKTtpZihKRChhLDE1Nikpe3JldHVybiBCRChPaGIoY3ZkLGhLKSwyODgpLnZnKGEpfWlmKE1oYihjdmQscmIoYSkpKXtyZXR1cm4gQkQoT2hiKGN2ZCxyYihhKSksMjg4KS52ZyhhKX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGZaZChhKXtpZihlZmIoa3NlLGEpKXtyZXR1cm4gQmNiKCksQWNifWVsc2UgaWYoZWZiKGxzZSxhKSl7cmV0dXJuIEJjYigpLHpjYn1lbHNle3Rocm93IHZiYihuZXcgV2RiKCdFeHBlY3RpbmcgdHJ1ZSBvciBmYWxzZScpKX19XG5mdW5jdGlvbiB1RGMoYSxiKXtpZihiLmM9PWEpe3JldHVybiBiLmR9ZWxzZSBpZihiLmQ9PWEpe3JldHVybiBiLmN9dGhyb3cgdmJiKG5ldyBXZGIoJ0lucHV0IGVkZ2UgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgaW5wdXQgcG9ydC4nKSl9XG5mdW5jdGlvbiBJZ2IoYSxiKXtpZihhLmU+Yi5lKXtyZXR1cm4gMX1pZihhLmU8Yi5lKXtyZXR1cm4gLTF9aWYoYS5kPmIuZCl7cmV0dXJuIGEuZX1pZihhLmQ8Yi5kKXtyZXR1cm4gLWIuZX1yZXR1cm4gYS5lKndoYihhLmEsYi5hLGEuZCl9XG5mdW5jdGlvbiBaY2IoYSl7aWYoYT49NDgmJmE8NDgrJHduZC5NYXRoLm1pbigxMCwxMCkpe3JldHVybiBhLTQ4fWlmKGE+PTk3JiZhPDk3KXtyZXR1cm4gYS05NysxMH1pZihhPj02NSYmYTw2NSl7cmV0dXJuIGEtNjUrMTB9cmV0dXJuIC0xfVxuZnVuY3Rpb24gVWUoYSxiKXt2YXIgYztpZihQRChiKT09PVBEKGEpKXtyZXR1cm4gdHJ1ZX1pZighSkQoYiwyMSkpe3JldHVybiBmYWxzZX1jPUJEKGIsMjEpO2lmKGMuZ2MoKSE9YS5nYygpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGEuSWMoYyl9XG5mdW5jdGlvbiBla2IoYSxiKXt2YXIgYyxkLGUsZjtkPWEuYS5sZW5ndGgtMTtjPWItYS5iJmQ7Zj1hLmMtYiZkO2U9YS5jLWEuYiZkO21rYihjPGUpO2lmKGM+PWYpe2hrYihhLGIpO3JldHVybiAtMX1lbHNle2lrYihhLGIpO3JldHVybiAxfX1cbmZ1bmN0aW9uIGxBKGEsYil7dmFyIGMsZDtjPShCQ2IoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpKTtkPWIrMTt3aGlsZShkPGEubGVuZ3RoJiYoQkNiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKT09YykpeysrZH1yZXR1cm4gZC1ifVxuZnVuY3Rpb24gc0piKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTI6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6Y2FzZSAxOTpjYXNlIDIwOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlO319XG5mdW5jdGlvbiBiQyhmLGEpe3ZhciBiPWYuYTt2YXIgYzthPVN0cmluZyhhKTtiLmhhc093blByb3BlcnR5KGEpJiYoYz1iW2FdKTt2YXIgZD0ockMoKSxxQylbdHlwZW9mIGNdO3ZhciBlPWQ/ZChjKTp4Qyh0eXBlb2YgYyk7cmV0dXJuIGV9XG5mdW5jdGlvbiBiM2MoYSxiKXtpZihhLmE8MCl7dGhyb3cgdmJiKG5ldyBaZGIoJ0RpZCBub3QgY2FsbCBiZWZvcmUoLi4uKSBvciBhZnRlciguLi4pIGJlZm9yZSBjYWxsaW5nIGFkZCguLi4pLicpKX1pM2MoYSxhLmEsYik7cmV0dXJuIGF9XG5mdW5jdGlvbiBWT2MoYSxiLGMsZCl7dmFyIGUsZjtpZihiLmMubGVuZ3RoPT0wKXtyZXR1cm59ZT1ST2MoYyxkKTtmPVFPYyhiKTtNQWIoVkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGYsMSkpLG5ldyBjUGMpLG5ldyBnUGMoYSxjLGUsZCkpfVxuZnVuY3Rpb24gQ2pkKGEsYixjKXt2YXIgZDtpZigoYS5EYiZiKSE9MCl7aWYoYz09bnVsbCl7QmpkKGEsYil9ZWxzZXtkPXpqZChhLGIpO2Q9PS0xPyhhLkViPWMpOk5DKENEKGEuRWIpLGQsYyl9fWVsc2UgYyE9bnVsbCYmdmpkKGEsYixjKX1cbmZ1bmN0aW9uIHlqZChhKXt2YXIgYixjO2lmKChhLkRiJjMyKT09MCl7Yz0oYj1CRChBamQoYSwxNiksMjYpLGFMZCghYj9hLnpoKCk6YiktYUxkKGEuemgoKSkpO2MhPTAmJkNqZChhLDMyLEtDKFNJLFVoZSwxLGMsNSwxKSl9cmV0dXJuIGF9XG5mdW5jdGlvbiBXMWQoYSl7dmFyIGI7YS5ifHxYMWQoYSwoYj1oMWQoYS5lLGEuYSksIWJ8fCFkZmIobHNlLEFBZCgoIWIuYiYmKGIuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGIpKSxiLmIpLCdxdWFsaWZpZWQnKSkpKTtyZXR1cm4gYS5jfVxuZnVuY3Rpb24gZFRkKGEsYixjKXt2YXIgZCxlLGY7ZD1CRChxdWQoUVNkKGEuYSksYiksODcpO2Y9KGU9ZC5jLGU/ZTooakdkKCksWUZkKSk7KGYua2goKT94aWQoYS5iLEJEKGYsNDkpKTpmKT09Yz9LUWQoZCk6TlFkKGQsYyk7cmV0dXJuIGZ9XG5mdW5jdGlvbiBmQ2IoYSxiKXsoIWImJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwIT1udWxsP2NvbnNvbGUuZ3JvdXA6Y29uc29sZS5sb2cpLmNhbGwoY29uc29sZSxhKX1cbmZ1bmN0aW9uIE5OYihhLGIsYyxkKXtkPT1hPyhCRChjLmIsNjUpLEJEKGMuYiw2NSksQkQoZC5iLDY1KSxCRChkLmIsNjUpLmMuYik6KEJEKGMuYiw2NSksQkQoYy5iLDY1KSxCRChkLmIsNjUpLEJEKGQuYiw2NSkuYy5iKTtLTmIoZCxiLGEpfVxuZnVuY3Rpb24gRU9iKGEpe3ZhciBiLGMsZDtiPTA7Zm9yKGM9bmV3IG9sYihhLmcpO2MuYTxjLmMuYy5sZW5ndGg7KXtCRChtbGIoYyksNTYyKTsrK2J9ZD1uZXcgRU5iKGEuZyxFZGIoYS5hKSxhLmMpO0VMYihkKTthLmc9ZC5iO2EuZD1kLmF9XG5mdW5jdGlvbiB5bWMoYSxiLGMpe2IuYj0kd25kLk1hdGgubWF4KGIuYiwtYy5hKTtiLmM9JHduZC5NYXRoLm1heChiLmMsYy5hLWEuYSk7Yi5kPSR3bmQuTWF0aC5tYXgoYi5kLC1jLmIpO2IuYT0kd25kLk1hdGgubWF4KGIuYSxjLmItYS5iKX1cbmZ1bmN0aW9uIE1JYyhhLGIpe2lmKGEuZTxiLmUpe3JldHVybiAtMX1lbHNlIGlmKGEuZT5iLmUpe3JldHVybiAxfWVsc2UgaWYoYS5mPGIuZil7cmV0dXJuIC0xfWVsc2UgaWYoYS5mPmIuZil7cmV0dXJuIDF9cmV0dXJuIHRiKGEpLXRiKGIpfVxuZnVuY3Rpb24gZWZiKGEsYil7dUNiKGEpO2lmKGI9PW51bGwpe3JldHVybiBmYWxzZX1pZihkZmIoYSxiKSl7cmV0dXJuIHRydWV9cmV0dXJuIGEubGVuZ3RoPT1iLmxlbmd0aCYmZGZiKGEudG9Mb3dlckNhc2UoKSxiLnRvTG93ZXJDYXNlKCkpfVxuZnVuY3Rpb24geDZkKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGQ9MCxlPWIuZ2MoKTtkPGU7KytkKXtjPWIuaWwoZCk7aWYoSkQoYyw5OSkmJihCRChjLDE4KS5CYiZvdGUpIT0wKXtmPWIuamwoZCk7ZiE9bnVsbCYmczZkKGEsQkQoZiw1NikpfX19XG5mdW5jdGlvbiBwMWMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZj1uZXcgb2xiKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDIyMSk7ZD1uZXcgaERiKEJEKE9oYihhLmEsZS5iKSw2NSkpO0VrYihiLmEsZCk7cDFjKGEsZCxlKX19XG5mdW5jdGlvbiBBZWIoYSl7dmFyIGIsYztpZih5YmIoYSwtMTI5KT4wJiZ5YmIoYSwxMjgpPDApe2I9VGJiKGEpKzEyODtjPShDZWIoKSxCZWIpW2JdOyFjJiYoYz1CZWJbYl09bmV3IHRlYihhKSk7cmV0dXJuIGN9cmV0dXJuIG5ldyB0ZWIoYSl9XG5mdW5jdGlvbiBfMGQoYSxiKXt2YXIgYyxkO2M9Yi5IaChhLmEpO2lmKGMpe2Q9R0QoQUFkKCghYy5iJiYoYy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYykpLGMuYiksZnVlKSk7aWYoZCE9bnVsbCl7cmV0dXJuIGR9fXJldHVybiBiLm5lKCl9XG5mdW5jdGlvbiBhMWQoYSxiKXt2YXIgYyxkO2M9Yi5IaChhLmEpO2lmKGMpe2Q9R0QoQUFkKCghYy5iJiYoYy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYykpLGMuYiksZnVlKSk7aWYoZCE9bnVsbCl7cmV0dXJuIGR9fXJldHVybiBiLm5lKCl9XG5mdW5jdGlvbiBGTWMoYSxiKXt3TWMoKTt2YXIgYyxkO2ZvcihkPW5ldyBTcih1cihPX2IoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7aWYoYy5kLmk9PWJ8fGMuYy5pPT1iKXtyZXR1cm4gY319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBIVWIoYSxiLGMpe3RoaXMuYz1hO3RoaXMuZj1uZXcgUmtiO3RoaXMuZT1uZXcgZDdjO3RoaXMuaj1uZXcgSVZiO3RoaXMubj1uZXcgSVZiO3RoaXMuYj1iO3RoaXMuZz1uZXcgSjZjKGIuYyxiLmQsYi5iLGIuYSk7dGhpcy5hPWN9XG5mdW5jdGlvbiBnVmIoYSl7dmFyIGIsYyxkLGU7dGhpcy5hPW5ldyB6c2I7dGhpcy5kPW5ldyBUcWI7dGhpcy5lPTA7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07IXRoaXMuZiYmKHRoaXMuZj1iKTtlVmIodGhpcyxiKX19XG5mdW5jdGlvbiBYZ2IoYSl7SGdiKCk7aWYoYS5sZW5ndGg9PTApe3RoaXMuZT0wO3RoaXMuZD0xO3RoaXMuYT1PQyhHQyhXRCwxKSxvamUsMjUsMTUsWzBdKX1lbHNle3RoaXMuZT0xO3RoaXMuZD1hLmxlbmd0aDt0aGlzLmE9YTtKZ2IodGhpcyl9fVxuZnVuY3Rpb24gbUliKGEsYixjKXtvSGIuY2FsbCh0aGlzKTt0aGlzLmE9S0Mob04saWxlLDIxMiwoZ0hiKCksT0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pKS5sZW5ndGgsMCwxKTt0aGlzLmI9YTt0aGlzLmQ9Yjt0aGlzLmM9Y31cbmZ1bmN0aW9uIEtqYyhhKXt0aGlzLmQ9bmV3IFJrYjt0aGlzLmU9bmV3ICRyYjt0aGlzLmM9S0MoV0Qsb2plLDI1LChVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKS5sZW5ndGgsMTUsMSk7dGhpcy5iPWF9XG5mdW5jdGlvbiBWYmMoYSl7dmFyIGIsYyxkLGUsZixnO2c9QkQodk5iKGEsKHd0YygpLCRzYykpLDExKTt5TmIoZyxxdGMsYS5pLm4uYik7Yj1rX2IoYS5lKTtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtSWmIoYyxnKX19XG5mdW5jdGlvbiBXYmMoYSl7dmFyIGIsYyxkLGUsZixnO2M9QkQodk5iKGEsKHd0YygpLCRzYykpLDExKTt5TmIoYyxxdGMsYS5pLm4uYik7Yj1rX2IoYS5nKTtmb3IoZT1iLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtRWmIoZCxjKX19XG5mdW5jdGlvbiB2Y2MoYSl7dmFyIGIsYztpZih3TmIoYS5kLmksKE55YygpLE54YykpKXtiPUJEKHZOYihhLmMuaSxOeGMpLDE5KTtjPUJEKHZOYihhLmQuaSxOeGMpLDE5KTtyZXR1cm4gYmViKGIuYSxjLmEpPjB9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gcTJjKGEpe3ZhciBiO2lmKFBEKGhrZChhLChZOWMoKSxKOGMpKSk9PT1QRCgoaGJkKCksZmJkKSkpe2lmKCFYb2QoYSkpe2prZChhLEo4YyxnYmQpfWVsc2V7Yj1CRChoa2QoWG9kKGEpLEo4YyksMzM0KTtqa2QoYSxKOGMsYil9fX1cbmZ1bmN0aW9uIGlqYyhhLGIsYyl7dmFyIGQsZTtiSWMoYS5lLGIsYywoVWNkKCksVGNkKSk7YkljKGEuaSxiLGMsemNkKTtpZihhLmEpe2U9QkQodk5iKGIsKHd0YygpLCRzYykpLDExKTtkPUJEKHZOYihjLCRzYyksMTEpO2NJYyhhLmcsZSxkKX19XG5mdW5jdGlvbiBPRWMoYSxiLGMpe3ZhciBkLGUsZjtkPWIuYy5wO2Y9Yi5wO2EuYltkXVtmXT1uZXcgJEVjKGEsYik7aWYoYyl7YS5hW2RdW2ZdPW5ldyBGRWMoYik7ZT1CRCh2TmIoYiwod3RjKCksUHNjKSksMTApOyEhZSYmUmMoYS5kLGUsYil9fVxuZnVuY3Rpb24gVFBiKGEsYil7dmFyIGMsZCxlO0VrYihQUGIsYSk7Yi5GYyhhKTtjPUJEKE9oYihPUGIsYSksMjEpO2lmKGMpe2ZvcihlPWMuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwzMyk7SmtiKFBQYixkLDApIT0tMXx8VFBiKGQsYil9fX1cbmZ1bmN0aW9uIHR5YihhLGIsYyl7dmFyIGQ7KGp5Yj8ocnliKGEpLHRydWUpOmt5Yj8oJHhiKCksdHJ1ZSk6bnliPygkeGIoKSx0cnVlKTpteWImJigkeGIoKSxmYWxzZSkpJiYoZD1uZXcgaXliKGIpLGQuYj1jLHB5YihhLGQpLHVuZGVmaW5lZCl9XG5mdW5jdGlvbiB4S2IoYSxiKXt2YXIgYztjPSFhLkEuSGMoKHRkZCgpLHNkZCkpfHxhLnE9PShkY2QoKSwkYmQpO2EudS5IYygocmNkKCksbmNkKSk/Yz92S2IoYSxiKTp6S2IoYSxiKTphLnUuSGMocGNkKSYmKGM/d0tiKGEsYik6QUtiKGEsYikpfVxuZnVuY3Rpb24gYjBkKGEsYil7dmFyIGMsZDsrK2EuajtpZihiIT1udWxsKXtjPShkPWEuYS5DYixKRChkLDk3KT9CRChkLDk3KS5KZygpOm51bGwpO2lmKHhsYihiLGMpKXtDamQoYS5hLDQsYyk7cmV0dXJufX1DamQoYS5hLDQsQkQoYiwxMjYpKX1cbmZ1bmN0aW9uIGRZYihhLGIsYyl7cmV0dXJuIG5ldyBKNmMoJHduZC5NYXRoLm1pbihhLmEsYi5hKS1jLzIsJHduZC5NYXRoLm1pbihhLmIsYi5iKS1jLzIsJHduZC5NYXRoLmFicyhhLmEtYi5hKStjLCR3bmQuTWF0aC5hYnMoYS5iLWIuYikrYyl9XG5mdW5jdGlvbiBrNGIoYSxiKXt2YXIgYyxkO2M9YmViKGEuYS5jLnAsYi5hLmMucCk7aWYoYyE9MCl7cmV0dXJuIGN9ZD1iZWIoYS5hLmQuaS5wLGIuYS5kLmkucCk7aWYoZCE9MCl7cmV0dXJuIGR9cmV0dXJuIGJlYihiLmEuZC5wLGEuYS5kLnApfVxuZnVuY3Rpb24gX0RjKGEsYixjKXt2YXIgZCxlLGYsZztmPWIuajtnPWMuajtpZihmIT1nKXtyZXR1cm4gZi5nLWcuZ31lbHNle2Q9YS5mW2IucF07ZT1hLmZbYy5wXTtyZXR1cm4gZD09MCYmZT09MD8wOmQ9PTA/LTE6ZT09MD8xOktkYihkLGUpfX1cbmZ1bmN0aW9uIEhGYihhLGIsYyl7dmFyIGQsZSxmO2lmKGNbYi5kXSl7cmV0dXJufWNbYi5kXT10cnVlO2ZvcihlPW5ldyBvbGIoTEZiKGIpKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjEzKTtmPXhGYihkLGIpO0hGYihhLGYsYyl9fVxuZnVuY3Rpb24gdW1jKGEsYixjKXt2YXIgZDtkPWNbYS5nXVtiXTtzd2l0Y2goYS5nKXtjYXNlIDE6Y2FzZSAzOnJldHVybiBuZXcgZjdjKDAsZCk7Y2FzZSAyOmNhc2UgNDpyZXR1cm4gbmV3IGY3YyhkLDApO2RlZmF1bHQ6cmV0dXJuIG51bGw7fX1cbmZ1bmN0aW9uIHIyYyhiLGMsZCl7dmFyIGUsZjtmPUJEKGhnZChjLmYpLDIwOSk7dHJ5e2YuWmUoYixkKTtpZ2QoYy5mLGYpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTAyKSl7ZT1hO3Rocm93IHZiYihlKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBWcWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPW51bGw7aD1rNGMobjRjKCksYik7Zj1udWxsO2lmKGgpe2U9bnVsbDtpPW81YyhoLGMpO2c9bnVsbDtpIT1udWxsJiYoZz1hLlllKGgsaSkpO2U9ZztmPWV9ZD1mO3JldHVybiBkfVxuZnVuY3Rpb24gVFRkKGEsYixjLGQpe3ZhciBlLGYsZztlPW5ldyBwU2QoYS5lLDEsMTMsKGc9Yi5jLGc/ZzooakdkKCksWUZkKSksKGY9Yy5jLGY/ZjooakdkKCksWUZkKSksSExkKGEsYiksZmFsc2UpOyFkPyhkPWUpOmQuRWkoZSk7cmV0dXJuIGR9XG5mdW5jdGlvbiBVRWQoYSxiLGMsZCl7dmFyIGU7ZT1hLmxlbmd0aDtpZihiPj1lKXJldHVybiBlO2ZvcihiPWI+MD9iOjA7YjxlO2IrKyl7aWYoX0VkKChCQ2IoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpKSxjLGQpKWJyZWFrfXJldHVybiBifVxuZnVuY3Rpb24gUWtiKGEsYil7dmFyIGMsZDtkPWEuYy5sZW5ndGg7Yi5sZW5ndGg8ZCYmKGI9ZUNiKG5ldyBBcnJheShkKSxiKSk7Zm9yKGM9MDtjPGQ7KytjKXtOQyhiLGMsYS5jW2NdKX1iLmxlbmd0aD5kJiZOQyhiLGQsbnVsbCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBfbGIoYSxiKXt2YXIgYyxkO2Q9YS5hLmxlbmd0aDtiLmxlbmd0aDxkJiYoYj1lQ2IobmV3IEFycmF5KGQpLGIpKTtmb3IoYz0wO2M8ZDsrK2Mpe05DKGIsYyxhLmFbY10pfWIubGVuZ3RoPmQmJk5DKGIsZCxudWxsKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIFhyYihhLGIsYyl7dmFyIGQsZSxmO2U9QkQoT2hiKGEuZSxiKSwzODcpO2lmKCFlKXtkPW5ldyBsc2IoYSxiLGMpO1JoYihhLmUsYixkKTtpc2IoZCk7cmV0dXJuIG51bGx9ZWxzZXtmPWlqYihlLGMpO1lyYihhLGUpO3JldHVybiBmfX1cbmZ1bmN0aW9uIFA5ZChhKXt2YXIgYjtpZihhPT1udWxsKXJldHVybiBudWxsO2I9aWRlKFFnZShhLHRydWUpKTtpZihiPT1udWxsKXt0aHJvdyB2YmIobmV3IG44ZChcIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnXCIrYStcIidcIikpfXJldHVybiBifVxuZnVuY3Rpb24gZ2hiKGEpe0hnYigpO2lmKHliYihhLDApPDApe2lmKHliYihhLC0xKSE9MCl7cmV0dXJuIG5ldyBXZ2IoLTEsSmJiKGEpKX1yZXR1cm4gQmdifWVsc2UgcmV0dXJuIHliYihhLDEwKTw9MD9EZ2JbVGJiKGEpXTpuZXcgV2diKDEsYSl9XG5mdW5jdGlvbiB3SmIoKXtxSmIoKTtyZXR1cm4gT0MoR0MoRE4sMSksS2llLDE1OSwwLFtuSmIsbUpiLG9KYixlSmIsZEpiLGZKYixpSmIsaEpiLGdKYixsSmIsa0piLGpKYixiSmIsYUpiLGNKYiwkSWIsWkliLF9JYixYSWIsV0liLFlJYixwSmJdKX1cbmZ1bmN0aW9uIHZqYyhhKXt2YXIgYjt0aGlzLmQ9bmV3IFJrYjt0aGlzLmo9bmV3IGQ3Yzt0aGlzLmc9bmV3IGQ3YztiPWEuZy5iO3RoaXMuZj1CRCh2TmIoUV9iKGIpLChOeWMoKSxMd2MpKSwxMDMpO3RoaXMuZT1FZGIoRUQoY19iKGIscnljKSkpfVxuZnVuY3Rpb24gUGpjKGEpe3RoaXMuYj1uZXcgUmtiO3RoaXMuZT1uZXcgUmtiO3RoaXMuZD1hO3RoaXMuYT0hV0FiKEpBYihuZXcgWUFiKG51bGwsbmV3IEx1YihuZXcgYjFiKGEuYikpKSxuZXcgWHhiKG5ldyBRamMpKSkuc2QoKEVBYigpLERBYikpfVxuZnVuY3Rpb24gTjVjKCl7TjVjPWNjYjtMNWM9bmV3IE81YygnUEFSRU5UUycsMCk7SzVjPW5ldyBPNWMoJ05PREVTJywxKTtJNWM9bmV3IE81YygnRURHRVMnLDIpO001Yz1uZXcgTzVjKCdQT1JUUycsMyk7SjVjPW5ldyBPNWMoJ0xBQkVMUycsNCl9XG5mdW5jdGlvbiBUYmQoKXtUYmQ9Y2NiO1FiZD1uZXcgVWJkKCdESVNUUklCVVRFRCcsMCk7U2JkPW5ldyBVYmQoJ0pVU1RJRklFRCcsMSk7T2JkPW5ldyBVYmQoJ0JFR0lOJywyKTtQYmQ9bmV3IFViZChnbGUsMyk7UmJkPW5ldyBVYmQoJ0VORCcsNCl9XG5mdW5jdGlvbiBVTWQoYSl7dmFyIGI7Yj1hLnlpKG51bGwpO3N3aXRjaChiKXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDQ7fXJldHVybiAtMX1cbmZ1bmN0aW9uIGNZYihhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIGVhZCgpLGRhZDtjYXNlIDQ6cmV0dXJuIGVhZCgpLGFhZDtjYXNlIDI6cmV0dXJuIGVhZCgpLGJhZDtjYXNlIDM6cmV0dXJuIGVhZCgpLF85Yzt9cmV0dXJuIGVhZCgpLGNhZH1cbmZ1bmN0aW9uIGtBKGEsYixjKXt2YXIgZDtkPWMucS5nZXRGdWxsWWVhcigpLW5qZStuamU7ZDwwJiYoZD0tZCk7c3dpdGNoKGIpe2Nhc2UgMTphLmErPWQ7YnJlYWs7Y2FzZSAyOkVBKGEsZCUxMDAsMik7YnJlYWs7ZGVmYXVsdDpFQShhLGQsYik7fX1cbmZ1bmN0aW9uIEpzYihhLGIpe3ZhciBjLGQ7d0NiKGIsYS5iKTtpZihiPj1hLmI+PjEpe2Q9YS5jO2ZvcihjPWEuYjtjPmI7LS1jKXtkPWQuYn19ZWxzZXtkPWEuYS5hO2ZvcihjPTA7YzxiOysrYyl7ZD1kLmF9fXJldHVybiBuZXcgJHNiKGEsYixkKX1cbmZ1bmN0aW9uIE1FYigpe01FYj1jY2I7TEViPW5ldyBORWIoJ05VTV9PRl9FWFRFUk5BTF9TSURFU19USEFOX05VTV9PRl9FWFRFTlNJT05TX0xBU1QnLDApO0tFYj1uZXcgTkViKCdDT1JORVJfQ0FTRVNfVEhBTl9TSU5HTEVfU0lERV9MQVNUJywxKX1cbmZ1bmN0aW9uIGg0YihhKXt2YXIgYixjLGQsZTtkPWM0YihhKTtPa2IoZCxhNGIpO2U9YS5kO2UuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Zm9yKGM9bmV3IG9sYihkKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksNDU2KTtHa2IoZSxiLmIpfX1cbmZ1bmN0aW9uIGdrZChhKXt2YXIgYixjLGQ7ZD0oIWEubyYmKGEubz1uZXcgZElkKChUaGQoKSxRaGQpLFMyLGEsMCkpLGEubyk7Zm9yKGM9ZC5jLktjKCk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoYy5uaigpLDQyKTtiLmRkKCl9cmV0dXJuIEZBZChkKX1cbmZ1bmN0aW9uIE41YihhKXt2YXIgYjtpZighZWNkKEJEKHZOYihhLChOeWMoKSxWeGMpKSw5OCkpKXtyZXR1cm59Yj1hLmI7TzViKCh0Q2IoMCxiLmMubGVuZ3RoKSxCRChiLmNbMF0sMjkpKSk7TzViKEJEKElrYihiLGIuYy5sZW5ndGgtMSksMjkpKX1cbmZ1bmN0aW9uIFJvYyhhLGIpe3ZhciBjLGQsZSxmO2M9MDtmb3IoZT1uZXcgb2xiKGIuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEwKTtmPWQuby5hK2QuZC5jK2QuZC5iK2EuajtjPSR3bmQuTWF0aC5tYXgoYyxmKX1yZXR1cm4gY31cbmZ1bmN0aW9uIFhFZChhKXt2YXIgYixjLGQsZTtlPTA7Zm9yKGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe2I9KEJDYihjLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoYykpO2I+PTY0JiZiPDEyOCYmKGU9TWJiKGUsTmJiKDEsYi02NCkpKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIGNfYihhLGIpe3ZhciBjLGQ7ZD1udWxsO2lmKHdOYihhLChZOWMoKSxPOWMpKSl7Yz1CRCh2TmIoYSxPOWMpLDk0KTtjLlhlKGIpJiYoZD1jLldlKGIpKX1kPT1udWxsJiYhIVFfYihhKSYmKGQ9dk5iKFFfYihhKSxiKSk7cmV0dXJuIGR9XG5mdW5jdGlvbiBvUWMoYSxiKXt2YXIgYyxkLGU7ZT1iLmQuaTtkPWUuaztpZihkPT0oajBiKCksaDBiKXx8ZD09ZDBiKXtyZXR1cm59Yz1uZXcgU3IodXIoVV9iKGUpLmEuS2MoKSxuZXcgU3EpKTtRcihjKSYmUmhiKGEuayxiLEJEKFJyKGMpLDE3KSl9XG5mdW5jdGlvbiBtaWQoYSxiKXt2YXIgYyxkLGU7ZD1YS2QoYS5UZygpLGIpO2M9Yi1hLkFoKCk7cmV0dXJuIGM8MD8oZT1hLllnKGQpLGU+PTA/YS5saChlKTp0aWQoYSxkKSk6YzwwP3RpZChhLGQpOkJEKGQsNjYpLk5qKCkuU2ooYSxhLnloKCksYyl9XG5mdW5jdGlvbiBLc2QoYSl7dmFyIGI7aWYoSkQoYS5hLDQpKXtiPWZ2ZChhLmEpO2lmKGI9PW51bGwpe3Rocm93IHZiYihuZXcgWmRiKG1zZSthLmIrXCInLiBcIitpc2UrKGZkYihZMyksWTMuaykranNlKSl9cmV0dXJuIGJ9ZWxzZXtyZXR1cm4gYS5hfX1cbmZ1bmN0aW9uIEw5ZChhKXt2YXIgYjtpZihhPT1udWxsKXJldHVybiBudWxsO2I9YmRlKFFnZShhLHRydWUpKTtpZihiPT1udWxsKXt0aHJvdyB2YmIobmV3IG44ZChcIkludmFsaWQgYmFzZTY0QmluYXJ5IHZhbHVlOiAnXCIrYStcIidcIikpfXJldHVybiBifVxuZnVuY3Rpb24gRHlkKGIpe3ZhciBjO3RyeXtjPWIuaS5YYihiLmUpO2IubWooKTtiLmc9Yi5lKys7cmV0dXJuIGN9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3Mykpe2IubWooKTt0aHJvdyB2YmIobmV3IHV0Yil9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gWnlkKGIpe3ZhciBjO3RyeXtjPWIuYy5raShiLmUpO2IubWooKTtiLmc9Yi5lKys7cmV0dXJuIGN9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3Mykpe2IubWooKTt0aHJvdyB2YmIobmV3IHV0Yil9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gQ1BiKCl7Q1BiPWNjYjtCUGI9KFk5YygpLEs5Yyk7dlBiPUc4YztxUGI9cjhjO3dQYj1mOWM7elBiPShmRmIoKSxiRmIpO3lQYj1fRWI7QVBiPWRGYjt4UGI9JEViO3NQYj0oblBiKCksalBiKTtyUGI9aVBiO3RQYj1sUGI7dVBiPW1QYn1cbmZ1bmN0aW9uIE5XYihhKXtMV2IoKTt0aGlzLmM9bmV3IFJrYjt0aGlzLmQ9YTtzd2l0Y2goYS5nKXtjYXNlIDA6Y2FzZSAyOnRoaXMuYT10bWIoS1diKTt0aGlzLmI9UGplO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPUtXYjt0aGlzLmI9UWplO319XG5mdW5jdGlvbiB1ZWQoYSxiLGMpe3ZhciBkLGU7aWYoYS5jKXtkbGQoYS5jLGEuYy5pK2IpO2VsZChhLmMsYS5jLmorYyl9ZWxzZXtmb3IoZT1uZXcgb2xiKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE1Nyk7dWVkKGQsYixjKX19fVxuZnVuY3Rpb24gS0VkKGEsYil7dmFyIGMsZDtpZihhLmoubGVuZ3RoIT1iLmoubGVuZ3RoKXJldHVybiBmYWxzZTtmb3IoYz0wLGQ9YS5qLmxlbmd0aDtjPGQ7YysrKXtpZighZGZiKGEualtjXSxiLmpbY10pKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIGdBKGEsYixjKXt2YXIgZDtpZihiLmEubGVuZ3RoPjApe0VrYihhLmIsbmV3IFdBKGIuYSxjKSk7ZD1iLmEubGVuZ3RoOzA8ZD8oYi5hPWIuYS5zdWJzdHIoMCwwKSk6MD5kJiYoYi5hKz15ZmIoS0MoVEQsJGllLDI1LC1kLDE1LDEpKSl9fVxuZnVuY3Rpb24gSktiKGEsYil7dmFyIGMsZCxlO2M9YS5vO2ZvcihlPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTExKTtkLmUuYT1ES2IoZCxjLmEpO2QuZS5iPWMuYipFZGIoRUQoZC5iLldlKEJLYikpKX19XG5mdW5jdGlvbiBTNWIoYSxiKXt2YXIgYyxkLGUsZjtlPWEuaztjPUVkYihFRCh2TmIoYSwod3RjKCksaHRjKSkpKTtmPWIuaztkPUVkYihFRCh2TmIoYixodGMpKSk7cmV0dXJuIGYhPShqMGIoKSxlMGIpPy0xOmUhPWUwYj8xOmM9PWQ/MDpjPGQ/LTE6MX1cbmZ1bmN0aW9uIEIkYyhhLGIpe3ZhciBjLGQ7Yz1CRChCRChPaGIoYS5nLGIuYSksNDYpLmEsNjUpO2Q9QkQoQkQoT2hiKGEuZyxiLmIpLDQ2KS5hLDY1KTtyZXR1cm4gUzZjKGIuYSxiLmIpLVM2YyhiLmEsRTZjKGMuYikpLVM2YyhiLmIsRTZjKGQuYikpfVxuZnVuY3Rpb24gYVpiKGEsYil7dmFyIGM7Yz1CRCh2TmIoYSwoTnljKCksanhjKSksNzQpO2lmKExxKGIsWlliKSl7aWYoIWMpe2M9bmV3IHM3Yzt5TmIoYSxqeGMsYyl9ZWxzZXtPc2IoYyl9fWVsc2UgISFjJiZ5TmIoYSxqeGMsbnVsbCk7cmV0dXJuIGN9XG5mdW5jdGlvbiBhMGIoYSl7dmFyIGI7Yj1uZXcgVWZiO2IuYSs9J24nO2EuayE9KGowYigpLGgwYikmJlFmYihRZmIoKGIuYSs9JygnLGIpLFpyKGEuaykudG9Mb3dlckNhc2UoKSksJyknKTtRZmIoKGIuYSs9J18nLGIpLFBfYihhKSk7cmV0dXJuIGIuYX1cbmZ1bmN0aW9uIEtkYyhhLGIpe09kZChiLCdTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nJywxKTtNQWIoSkFiKEpBYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5iLDE2KSksbmV3IFFkYyksbmV3IFNkYyksbmV3IFVkYyksbmV3IFdkYyk7UWRkKGIpfVxuZnVuY3Rpb24ga2lkKGEsYixjLGQpe3ZhciBlO2lmKGM+PTApe3JldHVybiBhLmhoKGIsYyxkKX1lbHNleyEhYS5laCgpJiYoZD0oZT1hLlZnKCksZT49MD9hLlFnKGQpOmEuZWgoKS5paChhLC0xLWUsbnVsbCxkKSkpO3JldHVybiBhLlNnKGIsYyxkKX19XG5mdW5jdGlvbiB6bGQoYSxiKXtzd2l0Y2goYil7Y2FzZSA3OiFhLmUmJihhLmU9bmV3IHk1ZChCMixhLDcsNCkpO1V4ZChhLmUpO3JldHVybjtjYXNlIDg6IWEuZCYmKGEuZD1uZXcgeTVkKEIyLGEsOCw1KSk7VXhkKGEuZCk7cmV0dXJuO30ka2QoYSxiKX1cbmZ1bmN0aW9uIFV0KGIsYyl7dmFyIGQ7ZD1iLlpjKGMpO3RyeXtyZXR1cm4gZC5QYigpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTA5KSl7dGhyb3cgdmJiKG5ldyBxY2IoXCJDYW4ndCBnZXQgZWxlbWVudCBcIitjKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gVGdiKGEsYil7dGhpcy5lPWE7aWYoYjxaamUpe3RoaXMuZD0xO3RoaXMuYT1PQyhHQyhXRCwxKSxvamUsMjUsMTUsW2J8MF0pfWVsc2V7dGhpcy5kPTI7dGhpcy5hPU9DKEdDKFdELDEpLG9qZSwyNSwxNSxbYiVaamV8MCxiL1pqZXwwXSl9fVxuZnVuY3Rpb24gb21iKGEsYil7bW1iKCk7dmFyIGMsZCxlLGY7Yz1hO2Y9YjtpZihKRChhLDIxKSYmIUpEKGIsMjEpKXtjPWI7Zj1hfWZvcihlPWMuS2MoKTtlLk9iKCk7KXtkPWUuUGIoKTtpZihmLkhjKGQpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfVxuZnVuY3Rpb24gVHhkKGEsYixjKXt2YXIgZCxlLGYsZztkPWEuWGMoYik7aWYoZCE9LTEpe2lmKGEuZWooKSl7Zj1hLmZqKCk7Zz10dWQoYSxkKTtlPWEuWmkoNCxnLG51bGwsZCxmKTshYz8oYz1lKTpjLkVpKGUpfWVsc2V7dHVkKGEsZCl9fXJldHVybiBjfVxuZnVuY3Rpb24gdXdkKGEsYixjKXt2YXIgZCxlLGYsZztkPWEuWGMoYik7aWYoZCE9LTEpe2lmKGEuZWooKSl7Zj1hLmZqKCk7Zz1FdmQoYSxkKTtlPWEuWmkoNCxnLG51bGwsZCxmKTshYz8oYz1lKTpjLkVpKGUpfWVsc2V7RXZkKGEsZCl9fXJldHVybiBjfVxuZnVuY3Rpb24gUEpiKGEsYil7dmFyIGM7Yz1CRChNcGIoYS5iLGIpLDEyNCkubjtzd2l0Y2goYi5nKXtjYXNlIDE6YS50Pj0wJiYoYy5kPWEudCk7YnJlYWs7Y2FzZSAzOmEudD49MCYmKGMuYT1hLnQpO31pZihhLkMpe2MuYj1hLkMuYjtjLmM9YS5DLmN9fVxuZnVuY3Rpb24gUk1iKCl7Uk1iPWNjYjtPTWI9bmV3IFNNYih4bGUsMCk7Tk1iPW5ldyBTTWIoeWxlLDEpO1BNYj1uZXcgU01iKHpsZSwyKTtRTWI9bmV3IFNNYihBbGUsMyk7T01iLmE9ZmFsc2U7Tk1iLmE9dHJ1ZTtQTWIuYT1mYWxzZTtRTWIuYT10cnVlfVxuZnVuY3Rpb24gUk9iKCl7Uk9iPWNjYjtPT2I9bmV3IFNPYih4bGUsMCk7Tk9iPW5ldyBTT2IoeWxlLDEpO1BPYj1uZXcgU09iKHpsZSwyKTtRT2I9bmV3IFNPYihBbGUsMyk7T09iLmE9ZmFsc2U7Tk9iLmE9dHJ1ZTtQT2IuYT1mYWxzZTtRT2IuYT10cnVlfVxuZnVuY3Rpb24gZGFjKGEpe3ZhciBiO2I9YS5hO2Rve2I9QkQoUnIobmV3IFNyKHVyKFJfYihiKS5hLktjKCksbmV3IFNxKSkpLDE3KS5jLmk7Yi5rPT0oajBiKCksZzBiKSYmYS5iLkZjKGIpfXdoaWxlKGIuaz09KGowYigpLGcwYikpO2EuYj1TdShhLmIpfVxuZnVuY3Rpb24gQ0RjKGEpe3ZhciBiLGMsZDtkPWEuYy5hO2EucD0oUWIoZCksbmV3IFRrYihkKSk7Zm9yKGM9bmV3IG9sYihkKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTApO2IucD1HRGMoYikuYX1tbWIoKTtPa2IoYS5wLG5ldyBQRGMpfVxuZnVuY3Rpb24gZVZjKGEpe3ZhciBiLGMsZCxlO2Q9MDtlPWdWYyhhKTtpZihlLmMubGVuZ3RoPT0wKXtyZXR1cm4gMX1lbHNle2ZvcihjPW5ldyBvbGIoZSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDMzKTtkKz1lVmMoYil9fXJldHVybiBkfVxuZnVuY3Rpb24gSkpiKGEsYil7dmFyIGMsZCxlO2U9MDtkPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7d2hpbGUoZC5PYigpKXtjPUJEKGQuUGIoKSwxMTEpO2UrPWMuZC5iK2MuYi5yZigpLmErYy5kLmM7ZC5PYigpJiYoZSs9YS53KX1yZXR1cm4gZX1cbmZ1bmN0aW9uIFJLYihhLGIpe3ZhciBjLGQsZTtlPTA7ZD1CRChCRChRYyhhLnIsYiksMjEpLDg0KS5LYygpO3doaWxlKGQuT2IoKSl7Yz1CRChkLlBiKCksMTExKTtlKz1jLmQuZCtjLmIucmYoKS5iK2MuZC5hO2QuT2IoKSYmKGUrPWEudyl9cmV0dXJuIGV9XG5mdW5jdGlvbiBTT2MoYSxiLGMsZCl7aWYoYi5hPGQuYSl7cmV0dXJuIHRydWV9ZWxzZSBpZihiLmE9PWQuYSl7aWYoYi5iPGQuYil7cmV0dXJuIHRydWV9ZWxzZSBpZihiLmI9PWQuYil7aWYoYS5iPmMuYil7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBBRChhLGIpe2lmKE5EKGEpKXtyZXR1cm4gISF6RFtiXX1lbHNlIGlmKGEuaG0pe3JldHVybiAhIWEuaG1bYl19ZWxzZSBpZihMRChhKSl7cmV0dXJuICEheURbYl19ZWxzZSBpZihLRChhKSl7cmV0dXJuICEheERbYl19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gamtkKGEsYixjKXtjPT1udWxsPyghYS5vJiYoYS5vPW5ldyBkSWQoKFRoZCgpLFFoZCksUzIsYSwwKSksTEFkKGEubyxiKSk6KCFhLm8mJihhLm89bmV3IGRJZCgoVGhkKCksUWhkKSxTMixhLDApKSxIQWQoYS5vLGIsYykpO3JldHVybiBhfVxuZnVuY3Rpb24gaktiKGEsYixjLGQpe3ZhciBlLGY7Zj1iLlhlKChZOWMoKSxXOGMpKT9CRChiLldlKFc4YyksMjEpOmEuajtlPXVKYihmKTtpZihlPT0ocUpiKCkscEpiKSl7cmV0dXJufWlmKGMmJiFzSmIoZSkpe3JldHVybn1VSGIobEtiKGEsZSxkKSxiKX1cbmZ1bmN0aW9uIGZpZChhLGIsYyxkKXt2YXIgZSxmLGc7Zj1YS2QoYS5UZygpLGIpO2U9Yi1hLkFoKCk7cmV0dXJuIGU8MD8oZz1hLllnKGYpLGc+PTA/YS5fZyhnLGMsdHJ1ZSk6c2lkKGEsZixjKSk6QkQoZiw2NikuTmooKS5QaihhLGEueWgoKSxlLGMsZCl9XG5mdW5jdGlvbiB1NmQoYSxiLGMsZCl7dmFyIGUsZixnO2lmKGMubWgoYikpe1E2ZCgpO2lmKFlJZChiKSl7ZT1CRChjLmFoKGIpLDE1Myk7eDZkKGEsZSl9ZWxzZXtmPShnPWIsIWc/bnVsbDpCRChkLDQ5KS54aChnKSk7ISFmJiZ2NmQoYy5haChiKSxmKX19fVxuZnVuY3Rpb24gSDNiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4gdkxiKCksdUxiO2Nhc2UgMzpyZXR1cm4gdkxiKCksckxiO2Nhc2UgMjpyZXR1cm4gdkxiKCksdExiO2Nhc2UgNDpyZXR1cm4gdkxiKCksc0xiO2RlZmF1bHQ6cmV0dXJuIG51bGw7fX1cbmZ1bmN0aW9uIGtDYihhKXtzd2l0Y2godHlwZW9mKGEpKXtjYXNlIE1oZTpyZXR1cm4gTENiKGEpO2Nhc2UgTGhlOnJldHVybiBRRChhKTtjYXNlIEtoZTpyZXR1cm4gQmNiKCksYT8xMjMxOjEyMzc7ZGVmYXVsdDpyZXR1cm4gYT09bnVsbD8wOkZDYihhKTt9fVxuZnVuY3Rpb24gR2ljKGEsYixjKXtpZihhLmUpe3N3aXRjaChhLmIpe2Nhc2UgMTpvaWMoYS5jLGIsYyk7YnJlYWs7Y2FzZSAwOnBpYyhhLmMsYixjKTt9fWVsc2V7bWljKGEuYyxiLGMpfWEuYVtiLnBdW2MucF09YS5jLmk7YS5hW2MucF1bYi5wXT1hLmMuZX1cbmZ1bmN0aW9uIGxIYyhhKXt2YXIgYixjO2lmKGE9PW51bGwpe3JldHVybiBudWxsfWM9S0MoT1EsbmllLDE5MyxhLmxlbmd0aCwwLDIpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe2NbYl09QkQodWxiKGFbYl0sYVtiXS5sZW5ndGgpLDE5Myl9cmV0dXJuIGN9XG5mdW5jdGlvbiBkNGQoYSl7dmFyIGI7aWYoYjRkKGEpKXthNGQoYSk7aWYoYS5MaygpKXtiPWIzZChhLmUsYS5iLGEuYyxhLmEsYS5qKTthLmo9Yn1hLmc9YS5hOysrYS5hOysrYS5jO2EuaT0wO3JldHVybiBhLmp9ZWxzZXt0aHJvdyB2YmIobmV3IHV0Yil9fVxuZnVuY3Rpb24gZk1iKGEsYil7dmFyIGMsZCxlLGY7Zj1hLm87Yz1hLnA7ZjxjPyhmKj1mKTooYyo9Yyk7ZD1mK2M7Zj1iLm87Yz1iLnA7ZjxjPyhmKj1mKTooYyo9Yyk7ZT1mK2M7aWYoZDxlKXtyZXR1cm4gLTF9aWYoZD09ZSl7cmV0dXJuIDB9cmV0dXJuIDF9XG5mdW5jdGlvbiBITGQoYSxiKXt2YXIgYyxkLGU7ZT1ydWQoYSxiKTtpZihlPj0wKXJldHVybiBlO2lmKGEuRmsoKSl7Zm9yKGQ9MDtkPGEuaTsrK2Qpe2M9YS5HayhCRChhLmdbZF0sNTYpKTtpZihQRChjKT09PVBEKGIpKXtyZXR1cm4gZH19fXJldHVybiAtMX1cbmZ1bmN0aW9uIEd0ZChhLGIsYyl7dmFyIGQsZTtlPWEuZ2MoKTtpZihiPj1lKXRocm93IHZiYihuZXcgQ3lkKGIsZSkpO2lmKGEuaGkoKSl7ZD1hLlhjKGMpO2lmKGQ+PTAmJmQhPWIpe3Rocm93IHZiYihuZXcgV2RiKGt1ZSkpfX1yZXR1cm4gYS5taShiLGMpfVxuZnVuY3Rpb24gZ3goYSxiKXt0aGlzLmE9QkQoUWIoYSksMjQ1KTt0aGlzLmI9QkQoUWIoYiksMjQ1KTtpZihhLnZkKGIpPjB8fGE9PShMaygpLEtrKXx8Yj09KF9rKCksJGspKXt0aHJvdyB2YmIobmV3IFdkYignSW52YWxpZCByYW5nZTogJytueChhLGIpKSl9fVxuZnVuY3Rpb24gbVliKGEpe3ZhciBiLGM7dGhpcy5iPW5ldyBSa2I7dGhpcy5jPWE7dGhpcy5hPWZhbHNlO2ZvcihjPW5ldyBvbGIoYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTApO3RoaXMuYT10aGlzLmF8Yi5rPT0oajBiKCksaDBiKX19XG5mdW5jdGlvbiBHRmIoYSxiKXt2YXIgYyxkLGU7Yz1uR2IobmV3IHBHYixhKTtmb3IoZT1uZXcgb2xiKGIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMjEpO0FGYihERmIoQ0ZiKEVGYihCRmIobmV3IEZGYiwwKSwwKSxjKSxkKSl9cmV0dXJuIGN9XG5mdW5jdGlvbiBOYWMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZT1uZXcgU3IodXIoKGI/Ul9iKGEpOlVfYihhKSkuYS5LYygpLG5ldyBTcSkpO1FyKGUpOyl7ZD1CRChScihlKSwxNyk7Zj1iP2QuYy5pOmQuZC5pO2Yuaz09KGowYigpLGYwYikmJiRfYihmLGMpfX1cbmZ1bmN0aW9uIEl6Yygpe0l6Yz1jY2I7R3pjPW5ldyBLemMoYW5lLDApO0h6Yz1uZXcgS3pjKCdQT1JUX1BPU0lUSU9OJywxKTtGemM9bmV3IEt6YygnTk9ERV9TSVpFX1dIRVJFX1NQQUNFX1BFUk1JVFMnLDIpO0V6Yz1uZXcgS3pjKCdOT0RFX1NJWkUnLDMpfVxuZnVuY3Rpb24gRjdjKCl7RjdjPWNjYjt6N2M9bmV3IEc3YygnQVVUT01BVElDJywwKTtDN2M9bmV3IEc3YyhqbGUsMSk7RDdjPW5ldyBHN2Moa2xlLDIpO0U3Yz1uZXcgRzdjKCdUT1AnLDMpO0E3Yz1uZXcgRzdjKG1sZSw0KTtCN2M9bmV3IEc3YyhnbGUsNSl9XG5mdW5jdGlvbiBIaGIoYSxiLGMsZCl7RGhiKCk7dmFyIGUsZjtlPTA7Zm9yKGY9MDtmPGM7ZisrKXtlPXdiYihJYmIoeGJiKGJbZl0sWWplKSx4YmIoZCxZamUpKSx4YmIoVGJiKGUpLFlqZSkpO2FbZl09VGJiKGUpO2U9UGJiKGUsMzIpfXJldHVybiBUYmIoZSl9XG5mdW5jdGlvbiB6SGIoYSxiLGMpe3ZhciBkLGU7ZT0wO2ZvcihkPTA7ZDxySGI7ZCsrKXtlPSR3bmQuTWF0aC5tYXgoZSxwSGIoYS5hW2IuZ11bZF0sYykpfWI9PShnSGIoKSxlSGIpJiYhIWEuYiYmKGU9JHduZC5NYXRoLm1heChlLGEuYi5iKSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBCdWIoYSxiKXt2YXIgYyxkO2xDYihiPjApO2lmKChiJi1iKT09Yil7cmV0dXJuIFFEKGIqQ3ViKGEsMzEpKjQuNjU2NjEyODczMDc3MzkyNkUtMTApfWRve2M9Q3ViKGEsMzEpO2Q9YyVifXdoaWxlKGMtZCsoYi0xKTwwKTtyZXR1cm4gUUQoZCl9XG5mdW5jdGlvbiBMQ2IoYSl7SkNiKCk7dmFyIGIsYyxkO2M9JzonK2E7ZD1JQ2JbY107aWYoZCE9bnVsbCl7cmV0dXJuIFFEKCh1Q2IoZCksZCkpfWQ9R0NiW2NdO2I9ZD09bnVsbD9LQ2IoYSk6UUQoKHVDYihkKSxkKSk7TUNiKCk7SUNiW2NdPWI7cmV0dXJuIGJ9XG5mdW5jdGlvbiBxWmIoYSxiLGMpe09kZChjLCdDb21wb3VuZCBncmFwaCBwcmVwcm9jZXNzb3InLDEpO2EuYT1uZXcgSHA7dlpiKGEsYixudWxsKTtwWmIoYSxiKTt1WmIoYSk7eU5iKGIsKHd0YygpLHpzYyksYS5hKTthLmE9bnVsbDtVaGIoYS5iKTtRZGQoYyl9XG5mdW5jdGlvbiBYJGIoYSxiLGMpe3N3aXRjaChjLmcpe2Nhc2UgMTphLmE9Yi5hLzI7YS5iPTA7YnJlYWs7Y2FzZSAyOmEuYT1iLmE7YS5iPWIuYi8yO2JyZWFrO2Nhc2UgMzphLmE9Yi5hLzI7YS5iPWIuYjticmVhaztjYXNlIDQ6YS5hPTA7YS5iPWIuYi8yO319XG5mdW5jdGlvbiB0a2MoYSl7dmFyIGIsYyxkO2ZvcihkPUJEKFFjKGEuYSwoWGpjKCksVmpjKSksMTUpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTAxKTtiPUJrYyhjKTtra2MoYSxjLGJbMF0sKEZrYygpLENrYyksMCk7a2tjKGEsYyxiWzFdLEVrYywxKX19XG5mdW5jdGlvbiB1a2MoYSl7dmFyIGIsYyxkO2ZvcihkPUJEKFFjKGEuYSwoWGpjKCksV2pjKSksMTUpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTAxKTtiPUJrYyhjKTtra2MoYSxjLGJbMF0sKEZrYygpLENrYyksMCk7a2tjKGEsYyxiWzFdLEVrYywxKX19XG5mdW5jdGlvbiB0WGMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3ICRYYztjYXNlIDI6cmV0dXJuIG5ldyBRWGM7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYihqcmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319XG5mdW5jdGlvbiBPWmMoYSxiLGMpe3ZhciBkLGU7RlpjKGEsYi1hLnMsYy1hLnQpO2ZvcihlPW5ldyBvbGIoYS5uKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjExKTtTWmMoZCxkLmUrYi1hLnMpO1RaYyhkLGQuZitjLWEudCl9YS5zPWI7YS50PWN9XG5mdW5jdGlvbiBKRmIoYSl7dmFyIGIsYyxkLGUsZjtjPTA7Zm9yKGU9bmV3IG9sYihhLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMjEpO2QuZD1jKyt9Yj1JRmIoYSk7Zj1udWxsO2IuYy5sZW5ndGg+MSYmKGY9R0ZiKGEsYikpO3JldHVybiBmfVxuZnVuY3Rpb24gZG1kKGEpe3ZhciBiO2lmKCEhYS5mJiZhLmYua2goKSl7Yj1CRChhLmYsNDkpO2EuZj1CRCh4aWQoYSxiKSw4Mik7YS5mIT1iJiYoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSw5LDgsYixhLmYpKX1yZXR1cm4gYS5mfVxuZnVuY3Rpb24gZW1kKGEpe3ZhciBiO2lmKCEhYS5pJiZhLmkua2goKSl7Yj1CRChhLmksNDkpO2EuaT1CRCh4aWQoYSxiKSw4Mik7YS5pIT1iJiYoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSw5LDcsYixhLmkpKX1yZXR1cm4gYS5pfVxuZnVuY3Rpb24gelVkKGEpe3ZhciBiO2lmKCEhYS5iJiYoYS5iLkRiJjY0KSE9MCl7Yj1hLmI7YS5iPUJEKHhpZChhLGIpLDE4KTthLmIhPWImJihhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDksMjEsYixhLmIpKX1yZXR1cm4gYS5ifVxuZnVuY3Rpb24gdUFkKGEsYil7dmFyIGMsZCxlO2lmKGEuZD09bnVsbCl7KythLmU7KythLmZ9ZWxzZXtkPWIuU2goKTtCQWQoYSxhLmYrMSk7ZT0oZCZPaGUpJWEuZC5sZW5ndGg7Yz1hLmRbZV07IWMmJihjPWEuZFtlXT1hLnVqKCkpO2MuRmMoYik7KythLmZ9fVxuZnVuY3Rpb24gbTNkKGEsYixjKXt2YXIgZDtpZihiLktqKCkpe3JldHVybiBmYWxzZX1lbHNlIGlmKGIuWmooKSE9LTIpe2Q9Yi56aigpO3JldHVybiBkPT1udWxsP2M9PW51bGw6cGIoZCxjKX1lbHNlIHJldHVybiBiLkhqKCk9PWEuZS5UZygpJiZjPT1udWxsfVxuZnVuY3Rpb24gd28oKXt2YXIgYTtYaigxNixIaWUpO2E9S3AoMTYpO3RoaXMuYj1LQyhHRixHaWUsMzE3LGEsMCwxKTt0aGlzLmM9S0MoR0YsR2llLDMxNyxhLDAsMSk7dGhpcy5hPW51bGw7dGhpcy5lPW51bGw7dGhpcy5pPTA7dGhpcy5mPWEtMTt0aGlzLmc9MH1cbmZ1bmN0aW9uIGIwYihhKXtuX2IuY2FsbCh0aGlzKTt0aGlzLms9KGowYigpLGgwYik7dGhpcy5qPShYaig2LEppZSksbmV3IFNrYig2KSk7dGhpcy5iPShYaigyLEppZSksbmV3IFNrYigyKSk7dGhpcy5kPW5ldyBMX2I7dGhpcy5mPW5ldyBzMGI7dGhpcy5hPWF9XG5mdW5jdGlvbiBTY2MoYSl7dmFyIGIsYztpZihhLmMubGVuZ3RoPD0xKXtyZXR1cm59Yj1QY2MoYSwoVWNkKCksUmNkKSk7UmNjKGEsQkQoYi5hLDE5KS5hLEJEKGIuYiwxOSkuYSk7Yz1QY2MoYSxUY2QpO1JjYyhhLEJEKGMuYSwxOSkuYSxCRChjLmIsMTkpLmEpfVxuZnVuY3Rpb24gVnpjKCl7VnpjPWNjYjtVemM9bmV3IFh6YygnU0lNUExFJywwKTtSemM9bmV3IFh6YyhUbmUsMSk7U3pjPW5ldyBYemMoJ0xJTkVBUl9TRUdNRU5UUycsMik7UXpjPW5ldyBYemMoJ0JSQU5ERVNfS09FUEYnLDMpO1R6Yz1uZXcgWHpjKEFxZSw0KX1cbmZ1bmN0aW9uIFhEYyhhLGIsYyl7aWYoIWVjZChCRCh2TmIoYiwoTnljKCksVnhjKSksOTgpKSl7V0RjKGEsYixZX2IoYixjKSk7V0RjKGEsYixZX2IoYiwoVWNkKCksUmNkKSkpO1dEYyhhLGIsWV9iKGIsQWNkKSk7bW1iKCk7T2tiKGIuaixuZXcgakVjKGEpKX19XG5mdW5jdGlvbiBIVmMoYSxiLGMsZCl7dmFyIGUsZixnO2U9ZD9CRChRYyhhLmEsYiksMjEpOkJEKFFjKGEuYixiKSwyMSk7Zm9yKGc9ZS5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDMzKTtpZihCVmMoYSxjLGYpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gRk1kKGEpe3ZhciBiLGM7Zm9yKGM9bmV3IEZ5ZChhKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChEeWQoYyksODcpO2lmKCEhYi5lfHwoIWIuZCYmKGIuZD1uZXcgeE1kKGo1LGIsMSkpLGIuZCkuaSE9MCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIFFUZChhKXt2YXIgYixjO2ZvcihjPW5ldyBGeWQoYSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDg3KTtpZighIWIuZXx8KCFiLmQmJihiLmQ9bmV3IHhNZChqNSxiLDEpKSxiLmQpLmkhPTApe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBGRGMoYSl7dmFyIGIsYyxkO2I9MDtmb3IoZD1uZXcgb2xiKGEuYy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTApO2IrPXNyKG5ldyBTcih1cihVX2IoYykuYS5LYygpLG5ldyBTcSkpKX1yZXR1cm4gYi9hLmMuYS5jLmxlbmd0aH1cbmZ1bmN0aW9uIFVQYyhhKXt2YXIgYixjO2EuY3x8WFBjKGEpO2M9bmV3IHM3YztiPW5ldyBvbGIoYS5hKTttbGIoYik7d2hpbGUoYi5hPGIuYy5jLmxlbmd0aCl7RHNiKGMsQkQobWxiKGIpLDQwNykuYSl9c0NiKGMuYiE9MCk7TnNiKGMsYy5jLmIpO3JldHVybiBjfVxuZnVuY3Rpb24gSjBjKCl7SjBjPWNjYjtJMGM9KEEwYygpLHowYyk7RzBjPW5ldyBxMGIoOCk7bmV3IE9zZCgoWTljKCksZjljKSxHMGMpO25ldyBPc2QoVDljLDgpO0gwYz14MGM7RTBjPW4wYztGMGM9bzBjO0QwYz1uZXcgT3NkKHk4YywoQmNiKCksZmFsc2UpKX1cbmZ1bmN0aW9uIHVsZChhLGIsYyxkKXtzd2l0Y2goYil7Y2FzZSA3OnJldHVybiAhYS5lJiYoYS5lPW5ldyB5NWQoQjIsYSw3LDQpKSxhLmU7Y2FzZSA4OnJldHVybiAhYS5kJiYoYS5kPW5ldyB5NWQoQjIsYSw4LDUpKSxhLmQ7fXJldHVybiBYa2QoYSxiLGMsZCl9XG5mdW5jdGlvbiBKUWQoYSl7dmFyIGI7aWYoISFhLmEmJmEuYS5raCgpKXtiPUJEKGEuYSw0OSk7YS5hPUJEKHhpZChhLGIpLDEzOCk7YS5hIT1iJiYoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSw5LDUsYixhLmEpKX1yZXR1cm4gYS5hfVxuZnVuY3Rpb24geWRlKGEpe2lmKGE8NDgpcmV0dXJuIC0xO2lmKGE+MTAyKXJldHVybiAtMTtpZihhPD01NylyZXR1cm4gYS00ODtpZihhPDY1KXJldHVybiAtMTtpZihhPD03MClyZXR1cm4gYS02NSsxMDtpZihhPDk3KXJldHVybiAtMTtyZXR1cm4gYS05NysxMH1cbmZ1bmN0aW9uIFdqKGEsYil7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBIZWIoJ251bGwga2V5IGluIGVudHJ5OiBudWxsPScrYikpfWVsc2UgaWYoYj09bnVsbCl7dGhyb3cgdmJiKG5ldyBIZWIoJ251bGwgdmFsdWUgaW4gZW50cnk6ICcrYSsnPW51bGwnKSl9fVxuZnVuY3Rpb24ga3IoYSxiKXt2YXIgYyxkO3doaWxlKGEuT2IoKSl7aWYoIWIuT2IoKSl7cmV0dXJuIGZhbHNlfWM9YS5QYigpO2Q9Yi5QYigpO2lmKCEoUEQoYyk9PT1QRChkKXx8YyE9bnVsbCYmcGIoYyxkKSkpe3JldHVybiBmYWxzZX19cmV0dXJuICFiLk9iKCl9XG5mdW5jdGlvbiBqSWIoYSxiKXt2YXIgYztjPU9DKEdDKFVELDEpLFZqZSwyNSwxNSxbcEhiKGEuYVswXSxiKSxwSGIoYS5hWzFdLGIpLHBIYihhLmFbMl0sYildKTtpZihhLmQpe2NbMF09JHduZC5NYXRoLm1heChjWzBdLGNbMl0pO2NbMl09Y1swXX1yZXR1cm4gY31cbmZ1bmN0aW9uIGtJYihhLGIpe3ZhciBjO2M9T0MoR0MoVUQsMSksVmplLDI1LDE1LFtxSGIoYS5hWzBdLGIpLHFIYihhLmFbMV0sYikscUhiKGEuYVsyXSxiKV0pO2lmKGEuZCl7Y1swXT0kd25kLk1hdGgubWF4KGNbMF0sY1syXSk7Y1syXT1jWzBdfXJldHVybiBjfVxuZnVuY3Rpb24gbXFjKCl7bXFjPWNjYjtpcWM9bmV3IG9xYygnR1JFRURZJywwKTtocWM9bmV3IG9xYyhVbmUsMSk7a3FjPW5ldyBvcWMoVG5lLDIpO2xxYz1uZXcgb3FjKCdNT0RFTF9PUkRFUicsMyk7anFjPW5ldyBvcWMoJ0dSRUVEWV9NT0RFTF9PUkRFUicsNCl9XG5mdW5jdGlvbiBpVWMoYSxiKXt2YXIgYyxkLGU7YS5iW2IuZ109MTtmb3IoZD1Kc2IoYi5kLDApO2QuYiE9ZC5kLmM7KXtjPUJEKFhzYihkKSwxODgpO2U9Yy5jO2EuYltlLmddPT0xP0RzYihhLmEsYyk6YS5iW2UuZ109PTI/KGEuYltlLmddPTEpOmlVYyhhLGUpfX1cbmZ1bmN0aW9uIFY5YihhLGIpe3ZhciBjLGQsZTtlPW5ldyBTa2IoYi5nYygpKTtmb3IoZD1iLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjg2KTtjLmM9PWMuZj9LOWIoYSxjLGMuYyk6TDliKGEsYyl8fChlLmNbZS5jLmxlbmd0aF09Yyx0cnVlKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIElaYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtoPWEucitiO2Eucis9YjthLmQrPWM7ZD1jL2Eubi5jLmxlbmd0aDtlPTA7Zm9yKGc9bmV3IG9sYihhLm4pO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyMTEpO1JaYyhmLGgsZCxlKTsrK2V9fVxuZnVuY3Rpb24gdEViKGEpe3ZhciBiLGMsZDt6d2IoYS5iLmEpO2EuYT1LQyhQTSxVaGUsNTcsYS5jLmMuYS5iLmMubGVuZ3RoLDAsMSk7Yj0wO2ZvcihkPW5ldyBvbGIoYS5jLmMuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNTcpO2MuZj1iKyt9fVxuZnVuY3Rpb24gUlZiKGEpe3ZhciBiLGMsZDt6d2IoYS5iLmEpO2EuYT1LQyhJUCxVaGUsODEsYS5jLmEuYS5iLmMubGVuZ3RoLDAsMSk7Yj0wO2ZvcihkPW5ldyBvbGIoYS5jLmEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksODEpO2MuaT1iKyt9fVxuZnVuY3Rpb24gUDFjKGEsYixjKXt2YXIgZDtPZGQoYywnU2hyaW5raW5nIHRyZWUgY29tcGFjdGlvbicsMSk7aWYoQ2NiKEREKHZOYihiLChYTmIoKSxWTmIpKSkpKXtOMWMoYSxiLmYpO0lOYihiLmYsKGQ9Yi5jLGQpKX1lbHNle0lOYihiLmYsYi5jKX1RZGQoYyl9XG5mdW5jdGlvbiBtcihhKXt2YXIgYjtiPWdyKGEpO2lmKCFRcihhKSl7dGhyb3cgdmJiKG5ldyBxY2IoJ3Bvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCcrYisnKScpKX1yZXR1cm4gUnIoYSl9XG5mdW5jdGlvbiBoTmIoYixjLGQpe3ZhciBlO3RyeXtyZXR1cm4gWU1iKGIsYytiLmosZCtiLmspfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXtlPWE7dGhyb3cgdmJiKG5ldyBxY2IoZS5nK0dsZStjK1NoZStkKycpLicpKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBpTmIoYixjLGQpe3ZhciBlO3RyeXtyZXR1cm4gWk1iKGIsYytiLmosZCtiLmspfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXtlPWE7dGhyb3cgdmJiKG5ldyBxY2IoZS5nK0dsZStjK1NoZStkKycpLicpKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBqTmIoYixjLGQpe3ZhciBlO3RyeXtyZXR1cm4gJE1iKGIsYytiLmosZCtiLmspfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXtlPWE7dGhyb3cgdmJiKG5ldyBxY2IoZS5nK0dsZStjK1NoZStkKycpLicpKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBzNWIoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBVY2QoKSxUY2Q7Y2FzZSA0OnJldHVybiBVY2QoKSxBY2Q7Y2FzZSAzOnJldHVybiBVY2QoKSx6Y2Q7Y2FzZSAyOnJldHVybiBVY2QoKSxSY2Q7ZGVmYXVsdDpyZXR1cm4gVWNkKCksU2NkO319XG5mdW5jdGlvbiBjamMoYSxiLGMpe2lmKGIuaz09KGowYigpLGgwYikmJmMuaz09ZzBiKXthLmQ9X2ljKGIsKFVjZCgpLFJjZCkpO2EuYj1faWMoYixBY2QpfWlmKGMuaz09aDBiJiZiLms9PWcwYil7YS5kPV9pYyhjLChVY2QoKSxBY2QpKTthLmI9X2ljKGMsUmNkKX19XG5mdW5jdGlvbiBnamMoYSxiKXt2YXIgYyxkLGU7ZT1WX2IoYSxiKTtmb3IoZD1lLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTEpO2lmKHZOYihjLCh3dGMoKSxndGMpKSE9bnVsbHx8YTFiKG5ldyBiMWIoYy5iKSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBRWmMoYSxiKXtkbGQoYixhLmUrYS5kKyhhLmMuYy5sZW5ndGg9PTA/MDphLmIpKTtlbGQoYixhLmYpO2EuYT0kd25kLk1hdGgubWF4KGEuYSxiLmYpO2EuZCs9Yi5nKyhhLmMuYy5sZW5ndGg9PTA/MDphLmIpO0VrYihhLmMsYik7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBYWmMoYSxiLGMpe3ZhciBkLGUsZixnO2c9MDtkPWMvYS5hLmMubGVuZ3RoO2ZvcihmPW5ldyBvbGIoYS5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTg3KTtPWmMoZSxlLnMsZS50K2cqZCk7SVpjKGUsYS5kLWUucitiLGQpOysrZ319XG5mdW5jdGlvbiBINGIoYSl7dmFyIGIsYyxkLGUsZjtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDI5KTtiPTA7Zm9yKGY9bmV3IG9sYihjLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7ZS5wPWIrK319fVxuZnVuY3Rpb24gcjZjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2U9Yi5sZW5ndGgtMTtnPTA7aD0wO2ZvcihkPTA7ZDw9ZTtkKyspe2Y9YltkXTtjPWs2YyhlLGQpKng2YygxLWEsZS1kKSp4NmMoYSxkKTtnKz1mLmEqYztoKz1mLmIqY31yZXR1cm4gbmV3IGY3YyhnLGgpfVxuZnVuY3Rpb24ganVkKGEsYil7dmFyIGMsZCxlLGYsZztjPWIuZ2MoKTthLnFpKGEuaStjKTtmPWIuS2MoKTtnPWEuaTthLmkrPWM7Zm9yKGQ9ZztkPGEuaTsrK2Qpe2U9Zi5QYigpO211ZChhLGQsYS5vaShkLGUpKTthLmJpKGQsZSk7YS5jaSgpfXJldHVybiBjIT0wfVxuZnVuY3Rpb24gdHdkKGEsYixjKXt2YXIgZCxlLGY7aWYoYS5laigpKXtkPWEuVmkoKTtmPWEuZmooKTsrK2EuajthLkhpKGQsYS5vaShkLGIpKTtlPWEuWmkoMyxudWxsLGIsZCxmKTshYz8oYz1lKTpjLkVpKGUpfWVsc2V7QXZkKGEsYS5WaSgpLGIpfXJldHVybiBjfVxuZnVuY3Rpb24gV09kKGEsYixjKXt2YXIgZCxlLGY7ZD1CRChxdWQoVktkKGEuYSksYiksODcpO2Y9KGU9ZC5jLEpEKGUsODgpP0JEKGUsMjYpOihqR2QoKSxfRmQpKTsoKGYuRGImNjQpIT0wP3hpZChhLmIsZik6Zik9PWM/S1FkKGQpOk5RZChkLGMpO3JldHVybiBmfVxuZnVuY3Rpb24gRXdiKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksajtpZighZCl7cmV0dXJufWk9ZC5hWzBdOyEhaSYmRXdiKGEsYixjLGksZSxmLGcsaCk7RndiKGEsYyxkLmQsZSxmLGcsaCkmJmIuRmMoZCk7aj1kLmFbMV07ISFqJiZFd2IoYSxiLGMsaixlLGYsZyxoKX1cbmZ1bmN0aW9uIGVBYihhLGIpe3ZhciBjO2lmKCFhLmEpe2M9S0MoVUQsVmplLDI1LDAsMTUsMSk7X3ViKGEuYi5hLG5ldyBpQWIoYykpO2Muc29ydChkY2IoWWxiLnByb3RvdHlwZS50ZSxZbGIsW10pKTthLmE9bmV3IEF2YihjLGEuZCl9cmV0dXJuIHB2YihhLmEsYil9XG5mdW5jdGlvbiBZTWIoYixjLGQpe3RyeXtyZXR1cm4gQmJiKF9NYihiLGMsZCksMSl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwzMjApKXt0aHJvdyB2YmIobmV3IHFjYihEbGUrYi5vKycqJytiLnArRWxlK2MrU2hlK2QrRmxlKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gWk1iKGIsYyxkKXt0cnl7cmV0dXJuIEJiYihfTWIoYixjLGQpLDApfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMzIwKSl7dGhyb3cgdmJiKG5ldyBxY2IoRGxlK2IubysnKicrYi5wK0VsZStjK1NoZStkK0ZsZSkpfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uICRNYihiLGMsZCl7dHJ5e3JldHVybiBCYmIoX01iKGIsYyxkKSwyKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDMyMCkpe3Rocm93IHZiYihuZXcgcWNiKERsZStiLm8rJyonK2IucCtFbGUrYytTaGUrZCtGbGUpKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBOeWQoYixjKXtpZihiLmc9PS0xKXt0aHJvdyB2YmIobmV3IFlkYil9Yi5taigpO3RyeXtiLmQuX2MoYi5nLGMpO2IuZj1iLmQuan1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDczKSl7dGhyb3cgdmJiKG5ldyBBcGIpfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIHJKYyhhLGIsYyl7T2RkKGMsJ0xpbmVhciBzZWdtZW50cyBub2RlIHBsYWNlbWVudCcsMSk7YS5iPUJEKHZOYihiLCh3dGMoKSxvdGMpKSwzMDQpO3NKYyhhLGIpO25KYyhhLGIpO2tKYyhhLGIpO3FKYyhhKTthLmE9bnVsbDthLmI9bnVsbDtRZGQoYyl9XG5mdW5jdGlvbiBFZShhLGIpe3ZhciBjLGQsZSxmO2Y9YS5nYygpO2IubGVuZ3RoPGYmJihiPWVDYihuZXcgQXJyYXkoZiksYikpO2U9YjtkPWEuS2MoKTtmb3IoYz0wO2M8ZjsrK2Mpe05DKGUsYyxkLlBiKCkpfWIubGVuZ3RoPmYmJk5DKGIsZixudWxsKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEx1KGEsYil7dmFyIGMsZDtkPWEuZ2MoKTtpZihiPT1udWxsKXtmb3IoYz0wO2M8ZDtjKyspe2lmKGEuWGIoYyk9PW51bGwpe3JldHVybiBjfX19ZWxzZXtmb3IoYz0wO2M8ZDtjKyspe2lmKHBiKGIsYS5YYihjKSkpe3JldHVybiBjfX19cmV0dXJuIC0xfVxuZnVuY3Rpb24gSmQoYSxiKXt2YXIgYyxkLGU7Yz1iLmNkKCk7ZT1iLmRkKCk7ZD1hLnhjKGMpO2lmKCEoUEQoZSk9PT1QRChkKXx8ZSE9bnVsbCYmcGIoZSxkKSkpe3JldHVybiBmYWxzZX1pZihkPT1udWxsJiYhYS5fYihjKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gWUMoYSxiKXt2YXIgYyxkLGU7aWYoYjw9MjIpe2M9YS5sJigxPDxiKS0xO2Q9ZT0wfWVsc2UgaWYoYjw9NDQpe2M9YS5sO2Q9YS5tJigxPDxiLTIyKS0xO2U9MH1lbHNle2M9YS5sO2Q9YS5tO2U9YS5oJigxPDxiLTQ0KS0xfXJldHVybiBUQyhjLGQsZSl9XG5mdW5jdGlvbiB5S2IoYSxiKXtzd2l0Y2goYi5nKXtjYXNlIDE6cmV0dXJuIGEuZi5uLmQrYS50O2Nhc2UgMzpyZXR1cm4gYS5mLm4uYSthLnQ7Y2FzZSAyOnJldHVybiBhLmYubi5jK2EucztjYXNlIDQ6cmV0dXJuIGEuZi5uLmIrYS5zO2RlZmF1bHQ6cmV0dXJuIDA7fX1cbmZ1bmN0aW9uIGFMYihhLGIpe3ZhciBjLGQ7ZD1iLmM7Yz1iLmE7c3dpdGNoKGEuYi5nKXtjYXNlIDA6Yy5kPWEuZS1kLmEtZC5kO2JyZWFrO2Nhc2UgMTpjLmQrPWEuZTticmVhaztjYXNlIDI6Yy5jPWEuZS1kLmEtZC5kO2JyZWFrO2Nhc2UgMzpjLmM9YS5lK2QuZDt9fVxuZnVuY3Rpb24gWk9iKGEsYixjLGQpe3ZhciBlLGY7dGhpcy5hPWI7dGhpcy5jPWQ7ZT1hLmE7WU9iKHRoaXMsbmV3IGY3YygtZS5jLC1lLmQpKTtQNmModGhpcy5iLGMpO2Y9ZC8yO2IuYT9iN2ModGhpcy5iLDAsZik6YjdjKHRoaXMuYixmLDApO0VrYihhLmMsdGhpcyl9XG5mdW5jdGlvbiBpWGMoKXtpWGM9Y2NiO2hYYz1uZXcga1hjKGFuZSwwKTtmWGM9bmV3IGtYYyhWbmUsMSk7Z1hjPW5ldyBrWGMoJ0VER0VfTEVOR1RIX0JZX1BPU0lUSU9OJywyKTtlWGM9bmV3IGtYYygnQ1JPU1NJTkdfTUlOSU1JWkFUSU9OX0JZX1BPU0lUSU9OJywzKX1cbmZ1bmN0aW9uIFdxZChhLGIpe3ZhciBjLGQ7Yz1CRChvbyhhLmcsYiksMzMpO2lmKGMpe3JldHVybiBjfWQ9QkQob28oYS5qLGIpLDExOCk7aWYoZCl7cmV0dXJuIGR9dGhyb3cgdmJiKG5ldyBjcWQoJ1JlZmVyZW5jZWQgc2hhcGUgZG9lcyBub3QgZXhpc3Q6ICcrYikpfVxuZnVuY3Rpb24gclRiKGEsYil7aWYoYS5jPT1iKXtyZXR1cm4gYS5kfWVsc2UgaWYoYS5kPT1iKXtyZXR1cm4gYS5jfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoXCJOb2RlICdvbmUnIG11c3QgYmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgb2YgZWRnZSAnZWRnZScuXCIpKX19XG5mdW5jdGlvbiBUTWMoYSxiKXtpZihhLmMuaT09Yil7cmV0dXJuIGEuZC5pfWVsc2UgaWYoYS5kLmk9PWIpe3JldHVybiBhLmMuaX1lbHNle3Rocm93IHZiYihuZXcgV2RiKCdOb2RlICcrYisnIGlzIG5laXRoZXIgc291cmNlIG5vciB0YXJnZXQgb2YgZWRnZSAnK2EpKX19XG5mdW5jdGlvbiBfbGMoYSxiKXt2YXIgYztzd2l0Y2goYi5nKXtjYXNlIDI6Y2FzZSA0OmM9YS5hO2EuYy5kLm4uYjxjLmQubi5iJiYoYz1hLmMpO2FtYyhhLGIsKEFqYygpLHpqYyksYyk7YnJlYWs7Y2FzZSAxOmNhc2UgMzphbWMoYSxiLChBamMoKSx3amMpLG51bGwpO319XG5mdW5jdGlvbiBzbWMoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqLGs7Zz1xbWMoYixjLGYpO2g9Yz09KFVjZCgpLEFjZCl8fGM9PVRjZD8tMToxO2o9YVtjLmddO2ZvcihrPTA7azxqLmxlbmd0aDtrKyspe2k9altrXTtpPjAmJihpKz1lKTtqW2tdPWc7Zys9aCooaStkKX19XG5mdW5jdGlvbiBVb2MoYSl7dmFyIGIsYyxkO2Q9YS5mO2Eubj1LQyhVRCxWamUsMjUsZCwxNSwxKTthLmQ9S0MoVUQsVmplLDI1LGQsMTUsMSk7Zm9yKGI9MDtiPGQ7YisrKXtjPUJEKElrYihhLmMuYixiKSwyOSk7YS5uW2JdPVJvYyhhLGMpO2EuZFtiXT1Rb2MoYSxjKX19XG5mdW5jdGlvbiB6amQoYSxiKXt2YXIgYyxkLGU7ZT0wO2ZvcihkPTI7ZDxiO2Q8PD0xKXsoYS5EYiZkKSE9MCYmKytlfWlmKGU9PTApe2ZvcihjPWI8PD0xO2M8PTEyODtjPDw9MSl7aWYoKGEuRGImYykhPTApe3JldHVybiAwfX1yZXR1cm4gLTF9ZWxzZXtyZXR1cm4gZX19XG5mdW5jdGlvbiBzM2QoYSxiKXt2YXIgYyxkLGUsZixnO2c9UzZkKGEuZS5UZygpLGIpO2Y9bnVsbDtjPUJEKGEuZywxMTkpO2ZvcihlPTA7ZTxhLmk7KytlKXtkPWNbZV07aWYoZy5ybChkLmFrKCkpKXshZiYmKGY9bmV3IHl1ZCk7d3RkKGYsZCl9fSEhZiYmWXhkKGEsZil9XG5mdW5jdGlvbiBIOWQoYSl7dmFyIGIsYyxkO2lmKCFhKXJldHVybiBudWxsO2lmKGEuZGMoKSlyZXR1cm4gJyc7ZD1uZXcgSGZiO2ZvcihjPWEuS2MoKTtjLk9iKCk7KXtiPWMuUGIoKTtFZmIoZCxHRChiKSk7ZC5hKz0nICd9cmV0dXJuIGxjYihkLGQuYS5sZW5ndGgtMSl9XG5mdW5jdGlvbiBUeShhLGIsYyl7dmFyIGQsZSxmLGcsaDtVeShhKTtmb3IoZT0oYS5rPT1udWxsJiYoYS5rPUtDKF9JLG5pZSw3OCwwLDAsMSkpLGEuayksZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO1R5KGQsYiwnXFx0JytjKX1oPWEuZjshIWgmJlR5KGgsYixjKX1cbmZ1bmN0aW9uIExDKGEsYil7dmFyIGM9bmV3IEFycmF5KGIpO3ZhciBkO3N3aXRjaChhKXtjYXNlIDE0OmNhc2UgMTU6ZD0wO2JyZWFrO2Nhc2UgMTY6ZD1mYWxzZTticmVhaztkZWZhdWx0OnJldHVybiBjO31mb3IodmFyIGU9MDtlPGI7KytlKXtjW2VdPWR9cmV0dXJuIGN9XG5mdW5jdGlvbiBQRGIoYSl7dmFyIGIsYyxkO2ZvcihjPW5ldyBvbGIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw1Nyk7Yi5jLiRiKCl9ZmFkKGEuZCk/KGQ9YS5hLmMpOihkPWEuYS5kKTtIa2IoZCxuZXcgZEViKGEpKTthLmMuTWUoYSk7UURiKGEpfVxuZnVuY3Rpb24gc1JiKGEpe3ZhciBiLGMsZCxlO2ZvcihjPW5ldyBvbGIoYS5lLmMpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyODIpO2ZvcihlPW5ldyBvbGIoYi5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksNDQ3KTtsUmIoZCl9Y1JiKGIpfX1cbmZ1bmN0aW9uIGEkYyhhKXt2YXIgYixjLGQsZSxmO2Q9MDtmPTA7ZT0wO2ZvcihjPW5ldyBvbGIoYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTg3KTtmPSR3bmQuTWF0aC5tYXgoZixiLnIpO2QrPWIuZCsoZT4wP2EuYzowKTsrK2V9YS5iPWQ7YS5kPWZ9XG5mdW5jdGlvbiBCWmMoYSxiKXt2YXIgYyxkLGUsZixnO2Q9MDtlPTA7Yz0wO2ZvcihnPW5ldyBvbGIoYik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDIwMCk7ZD0kd25kLk1hdGgubWF4KGQsZi5lKTtlKz1mLmIrKGM+MD9hLmc6MCk7KytjfWEuYz1lO2EuZD1kfVxuZnVuY3Rpb24gQUhiKGEsYil7dmFyIGM7Yz1PQyhHQyhVRCwxKSxWamUsMjUsMTUsW3pIYihhLChnSGIoKSxkSGIpLGIpLHpIYihhLGVIYixiKSx6SGIoYSxmSGIsYildKTtpZihhLmYpe2NbMF09JHduZC5NYXRoLm1heChjWzBdLGNbMl0pO2NbMl09Y1swXX1yZXR1cm4gY31cbmZ1bmN0aW9uIGxOYihiLGMsZCl7dmFyIGU7dHJ5e2FOYihiLGMrYi5qLGQrYi5rLGZhbHNlLHRydWUpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXtlPWE7dGhyb3cgdmJiKG5ldyBxY2IoZS5nK0dsZStjK1NoZStkKycpLicpKX1lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBtTmIoYixjLGQpe3ZhciBlO3RyeXthTmIoYixjK2IuaixkK2Iuayx0cnVlLGZhbHNlKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDczKSl7ZT1hO3Rocm93IHZiYihuZXcgcWNiKGUuZytHbGUrYytTaGUrZCsnKS4nKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gZDViKGEpe3ZhciBiO2lmKCF3TmIoYSwoTnljKCkseHhjKSkpe3JldHVybn1iPUJEKHZOYihhLHh4YyksMjEpO2lmKGIuSGMoKEhiZCgpLHpiZCkpKXtiLk1jKHpiZCk7Yi5GYyhCYmQpfWVsc2UgaWYoYi5IYyhCYmQpKXtiLk1jKEJiZCk7Yi5GYyh6YmQpfX1cbmZ1bmN0aW9uIGU1YihhKXt2YXIgYjtpZighd05iKGEsKE55YygpLHh4YykpKXtyZXR1cm59Yj1CRCh2TmIoYSx4eGMpLDIxKTtpZihiLkhjKChIYmQoKSxHYmQpKSl7Yi5NYyhHYmQpO2IuRmMoRWJkKX1lbHNlIGlmKGIuSGMoRWJkKSl7Yi5NYyhFYmQpO2IuRmMoR2JkKX19XG5mdW5jdGlvbiB1ZGMoYSxiLGMpe09kZChjLCdTZWxmLUxvb3Agb3JkZXJpbmcnLDEpO01BYihOQWIoSkFiKEpBYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYi5iLDE2KSksbmV3IHlkYyksbmV3IEFkYyksbmV3IENkYyksbmV3IEVkYyksbmV3IEdkYyhhKSk7UWRkKGMpfVxuZnVuY3Rpb24gaWtjKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9YjtlPGEuYy5sZW5ndGg7ZSsrKXtmPSh0Q2IoZSxhLmMubGVuZ3RoKSxCRChhLmNbZV0sMTEpKTtpZihjLk1iKGYpKXtkLmNbZC5jLmxlbmd0aF09Zn1lbHNle3JldHVybiBlfX1yZXR1cm4gYS5jLmxlbmd0aH1cbmZ1bmN0aW9uIEttYyhhLGIsYyxkKXt2YXIgZSxmLGcsaDthLmE9PW51bGwmJk5tYyhhLGIpO2c9Yi5iLmouYy5sZW5ndGg7Zj1jLmQucDtoPWQuZC5wO2U9aC0xO2U8MCYmKGU9Zy0xKTtyZXR1cm4gZjw9ZT9hLmFbZV0tYS5hW2ZdOmEuYVtnLTFdLWEuYVtmXSthLmFbZV19XG5mdW5jdGlvbiBlaGQoYSl7dmFyIGIsYztpZighYS5iKXthLmI9UXUoQkQoYS5mLDMzKS5BZygpLmkpO2ZvcihjPW5ldyBGeWQoQkQoYS5mLDMzKS5BZygpKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChEeWQoYyksMTM3KTtFa2IoYS5iLG5ldyBkaGQoYikpfX1yZXR1cm4gYS5ifVxuZnVuY3Rpb24gZmhkKGEpe3ZhciBiLGM7aWYoIWEuZSl7YS5lPVF1KFlvZChCRChhLmYsMzMpKS5pKTtmb3IoYz1uZXcgRnlkKFlvZChCRChhLmYsMzMpKSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDExOCk7RWtiKGEuZSxuZXcgdGhkKGIpKX19cmV0dXJuIGEuZX1cbmZ1bmN0aW9uIGFoZChhKXt2YXIgYixjO2lmKCFhLmEpe2EuYT1RdShWb2QoQkQoYS5mLDMzKSkuaSk7Zm9yKGM9bmV3IEZ5ZChWb2QoQkQoYS5mLDMzKSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUJEKER5ZChjKSwzMyk7RWtiKGEuYSxuZXcgaGhkKGEsYikpfX1yZXR1cm4gYS5hfVxuZnVuY3Rpb24gZEtkKGIpe3ZhciBjO2lmKCFiLkMmJihiLkQhPW51bGx8fGIuQiE9bnVsbCkpe2M9ZUtkKGIpO2lmKGMpe2IueWsoYyl9ZWxzZXt0cnl7Yi55ayhudWxsKX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSw2MCkpdGhyb3cgdmJiKGEpfX19cmV0dXJuIGIuQ31cbmZ1bmN0aW9uIEdKYihhKXtzd2l0Y2goYS5xLmcpe2Nhc2UgNTpESmIoYSwoVWNkKCksQWNkKSk7REpiKGEsUmNkKTticmVhaztjYXNlIDQ6RUpiKGEsKFVjZCgpLEFjZCkpO0VKYihhLFJjZCk7YnJlYWs7ZGVmYXVsdDpGSmIoYSwoVWNkKCksQWNkKSk7RkpiKGEsUmNkKTt9fVxuZnVuY3Rpb24gUEtiKGEpe3N3aXRjaChhLnEuZyl7Y2FzZSA1Ok1LYihhLChVY2QoKSx6Y2QpKTtNS2IoYSxUY2QpO2JyZWFrO2Nhc2UgNDpOS2IoYSwoVWNkKCksemNkKSk7TktiKGEsVGNkKTticmVhaztkZWZhdWx0Ok9LYihhLChVY2QoKSx6Y2QpKTtPS2IoYSxUY2QpO319XG5mdW5jdGlvbiBFWGIoYSxiKXt2YXIgYyxkLGU7ZT1uZXcgZDdjO2ZvcihkPWEuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwzNyk7dVhiKGMsZS5hLDApO2UuYSs9Yy5mLmErYjtlLmI9JHduZC5NYXRoLm1heChlLmIsYy5mLmIpfWUuYj4wJiYoZS5iKz1iKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIEdYYihhLGIpe3ZhciBjLGQsZTtlPW5ldyBkN2M7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDM3KTt1WGIoYywwLGUuYik7ZS5iKz1jLmYuYitiO2UuYT0kd25kLk1hdGgubWF4KGUuYSxjLmYuYSl9ZS5hPjAmJihlLmErPWIpO3JldHVybiBlfVxuZnVuY3Rpb24gZF9iKGEpe3ZhciBiLGMsZDtkPU9oZTtmb3IoYz1uZXcgb2xiKGEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDEwKTt3TmIoYiwod3RjKCksWnNjKSkmJihkPSR3bmQuTWF0aC5taW4oZCxCRCh2TmIoYixac2MpLDE5KS5hKSl9cmV0dXJuIGR9XG5mdW5jdGlvbiBwSGMoYSxiKXt2YXIgYyxkO2lmKGIubGVuZ3RoPT0wKXtyZXR1cm4gMH1jPU5IYyhhLmEsYlswXSwoVWNkKCksVGNkKSk7Yys9TkhjKGEuYSxiW2IubGVuZ3RoLTFdLHpjZCk7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl7Yys9cUhjKGEsZCxiKX1yZXR1cm4gY31cbmZ1bmN0aW9uIHZRYygpe2hRYygpO3RoaXMuYz1uZXcgUmtiO3RoaXMuaT1uZXcgUmtiO3RoaXMuZT1uZXcgenNiO3RoaXMuZj1uZXcgenNiO3RoaXMuZz1uZXcgenNiO3RoaXMuaj1uZXcgUmtiO3RoaXMuYT1uZXcgUmtiO3RoaXMuYj1uZXcgTHFiO3RoaXMuaz1uZXcgTHFifVxuZnVuY3Rpb24gYUtkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Nil7cmV0dXJuIGEuQ2IuaWgoYSw1LG81LGIpfXJldHVybiBkPXpVZChCRChYS2QoKGM9QkQoQWpkKGEsMTYpLDI2KSwhYz9hLnpoKCk6YyksYS5EYj4+MTYpLDE4KSksYS5DYi5paChhLGQubixkLmYsYil9XG5mdW5jdGlvbiBXeihhKXtSeigpO3ZhciBiPWEuZTtpZihiJiZiLnN0YWNrKXt2YXIgYz1iLnN0YWNrO3ZhciBkPWIrJ1xcbic7Yy5zdWJzdHJpbmcoMCxkLmxlbmd0aCk9PWQmJihjPWMuc3Vic3RyaW5nKGQubGVuZ3RoKSk7cmV0dXJuIGMuc3BsaXQoJ1xcbicpfXJldHVybiBbXX1cbmZ1bmN0aW9uIGplYihhKXt2YXIgYjtiPShxZWIoKSxwZWIpO3JldHVybiBiW2E+Pj4yOF18YlthPj4yNCYxNV08PDR8YlthPj4yMCYxNV08PDh8YlthPj4xNiYxNV08PDEyfGJbYT4+MTImMTVdPDwxNnxiW2E+PjgmMTVdPDwyMHxiW2E+PjQmMTVdPDwyNHxiW2EmMTVdPDwyOH1cbmZ1bmN0aW9uIF9qYihhKXt2YXIgYixjLGQ7aWYoYS5iIT1hLmMpe3JldHVybn1kPWEuYS5sZW5ndGg7Yz1nZWIoJHduZC5NYXRoLm1heCg4LGQpKTw8MTtpZihhLmIhPTApe2I9X0JiKGEuYSxjKTskamIoYSxiLGQpO2EuYT1iO2EuYj0wfWVsc2V7ZENiKGEuYSxjKX1hLmM9ZH1cbmZ1bmN0aW9uIERLYihhLGIpe3ZhciBjO2M9YS5iO3JldHVybiBjLlhlKChZOWMoKSxzOWMpKT9jLkhmKCk9PShVY2QoKSxUY2QpPy1jLnJmKCkuYS1FZGIoRUQoYy5XZShzOWMpKSk6YitFZGIoRUQoYy5XZShzOWMpKSk6Yy5IZigpPT0oVWNkKCksVGNkKT8tYy5yZigpLmE6Yn1cbmZ1bmN0aW9uIFBfYihhKXt2YXIgYjtpZihhLmIuYy5sZW5ndGghPTAmJiEhQkQoSWtiKGEuYiwwKSw3MCkuYSl7cmV0dXJuIEJEKElrYihhLmIsMCksNzApLmF9Yj1KWmIoYSk7aWYoYiE9bnVsbCl7cmV0dXJuIGJ9cmV0dXJuICcnKyghYS5jPy0xOkprYihhLmMuYSxhLDApKX1cbmZ1bmN0aW9uIEMwYihhKXt2YXIgYjtpZihhLmYuYy5sZW5ndGghPTAmJiEhQkQoSWtiKGEuZiwwKSw3MCkuYSl7cmV0dXJuIEJEKElrYihhLmYsMCksNzApLmF9Yj1KWmIoYSk7aWYoYiE9bnVsbCl7cmV0dXJuIGJ9cmV0dXJuICcnKyghYS5pPy0xOkprYihhLmkuaixhLDApKX1cbmZ1bmN0aW9uIE9nYyhhLGIpe3ZhciBjLGQ7aWYoYjwwfHxiPj1hLmdjKCkpe3JldHVybiBudWxsfWZvcihjPWI7YzxhLmdjKCk7KytjKXtkPUJEKGEuWGIoYyksMTI4KTtpZihjPT1hLmdjKCktMXx8IWQubyl7cmV0dXJuIG5ldyB2Z2QobWViKGMpLGQpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHVvYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtmPWEuYztoPWM/YjphO2Q9Yz9hOmI7Zm9yKGU9aC5wKzE7ZTxkLnA7KytlKXtnPUJEKElrYihmLmEsZSksMTApO2lmKCEoZy5rPT0oajBiKCksZDBiKXx8dm9jKGcpKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIHUkYyhhKXt2YXIgYixjLGQsZSxmO2Y9MDtlPVFqZTtkPTA7Zm9yKGM9bmV3IG9sYihhLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxODcpO2YrPWIucisoZD4wP2EuYzowKTtlPSR3bmQuTWF0aC5tYXgoZSxiLmQpOysrZH1hLmU9ZjthLmI9ZX1cbmZ1bmN0aW9uIHNoZChhKXt2YXIgYixjO2lmKCFhLmIpe2EuYj1RdShCRChhLmYsMTE4KS5BZygpLmkpO2ZvcihjPW5ldyBGeWQoQkQoYS5mLDExOCkuQWcoKSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDEzNyk7RWtiKGEuYixuZXcgZGhkKGIpKX19cmV0dXJuIGEuYn1cbmZ1bmN0aW9uIEN0ZChhLGIpe3ZhciBjLGQsZTtpZihiLmRjKCkpe3JldHVybiBMQ2QoKSxMQ2QoKSxLQ2R9ZWxzZXtjPW5ldyB6eWQoYSxiLmdjKCkpO2ZvcihlPW5ldyBGeWQoYSk7ZS5lIT1lLmkuZ2MoKTspe2Q9RHlkKGUpO2IuSGMoZCkmJnd0ZChjLGQpfXJldHVybiBjfX1cbmZ1bmN0aW9uIGJrZChhLGIsYyxkKXtpZihiPT0wKXtyZXR1cm4gZD8oIWEubyYmKGEubz1uZXcgZElkKChUaGQoKSxRaGQpLFMyLGEsMCkpLGEubyk6KCFhLm8mJihhLm89bmV3IGRJZCgoVGhkKCksUWhkKSxTMixhLDApKSxGQWQoYS5vKSl9cmV0dXJuIGZpZChhLGIsYyxkKX1cbmZ1bmN0aW9uIFRuZChhKXt2YXIgYixjO2lmKGEucmIpe2ZvcihiPTAsYz1hLnJiLmk7YjxjOysrYil7Q21kKHF1ZChhLnJiLGIpKX19aWYoYS52Yil7Zm9yKGI9MCxjPWEudmIuaTtiPGM7KytiKXtDbWQocXVkKGEudmIsYikpfX11MWQoKE82ZCgpLE02ZCksYSk7YS5CYnw9MX1cbmZ1bmN0aW9uIF9uZChhLGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4pe2FvZChhLGIsZCxudWxsLGUsZixnLGgsaSxqLG0sdHJ1ZSxuKTtDVWQoYSxrKTtKRChhLkNiLDg4KSYmWE1kKCRLZChCRChhLkNiLDg4KSksMik7ISFjJiZEVWQoYSxjKTtFVWQoYSxsKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGpaZChiKXt2YXIgYyxkO2lmKGI9PW51bGwpe3JldHVybiBudWxsfWQ9MDt0cnl7ZD1JY2IoYixSaWUsT2hlKSZhamV9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMjcpKXtjPXJmYihiKTtkPWNbMF19ZWxzZSB0aHJvdyB2YmIoYSl9cmV0dXJuIGJkYihkKX1cbmZ1bmN0aW9uIGtaZChiKXt2YXIgYyxkO2lmKGI9PW51bGwpe3JldHVybiBudWxsfWQ9MDt0cnl7ZD1JY2IoYixSaWUsT2hlKSZhamV9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMjcpKXtjPXJmYihiKTtkPWNbMF19ZWxzZSB0aHJvdyB2YmIoYSl9cmV0dXJuIGJkYihkKX1cbmZ1bmN0aW9uIGJEKGEsYil7dmFyIGMsZCxlO2U9YS5oLWIuaDtpZihlPDApe3JldHVybiBmYWxzZX1jPWEubC1iLmw7ZD1hLm0tYi5tKyhjPj4yMik7ZSs9ZD4+MjI7aWYoZTwwKXtyZXR1cm4gZmFsc2V9YS5sPWMmRWplO2EubT1kJkVqZTthLmg9ZSZGamU7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBGd2IoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaTtpZihiLkFlKCkmJihpPWEuYS51ZShjLGQpLGk8MHx8IWUmJmk9PTApKXtyZXR1cm4gZmFsc2V9aWYoYi5CZSgpJiYoaD1hLmEudWUoYyxmKSxoPjB8fCFnJiZoPT0wKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gVmNjKGEsYil7T2NjKCk7dmFyIGM7Yz1hLmouZy1iLmouZztpZihjIT0wKXtyZXR1cm4gMH1zd2l0Y2goYS5qLmcpe2Nhc2UgMjpyZXR1cm4gWWNjKGIsTmNjKS1ZY2MoYSxOY2MpO2Nhc2UgNDpyZXR1cm4gWWNjKGEsTWNjKS1ZY2MoYixNY2MpO31yZXR1cm4gMH1cbmZ1bmN0aW9uIFRxYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIE1xYztjYXNlIDE6cmV0dXJuIE5xYztjYXNlIDI6cmV0dXJuIE9xYztjYXNlIDM6cmV0dXJuIFBxYztjYXNlIDQ6cmV0dXJuIFFxYztjYXNlIDU6cmV0dXJuIFJxYztkZWZhdWx0OnJldHVybiBudWxsO319XG5mdW5jdGlvbiBFbmQoYSxiLGMpe3ZhciBkLGU7ZD0oZT1uZXcgclVkLHlJZChlLGIpLHBuZChlLGMpLHd0ZCgoIWEuYyYmKGEuYz1uZXcgY1VkKHA1LGEsMTIsMTApKSxhLmMpLGUpLGUpO0FJZChkLDApO0RJZChkLDEpO0NJZChkLHRydWUpO0JJZChkLHRydWUpO3JldHVybiBkfVxuZnVuY3Rpb24gdHVkKGEsYil7dmFyIGMsZDtpZihiPj1hLmkpdGhyb3cgdmJiKG5ldyAkemQoYixhLmkpKTsrK2EuajtjPWEuZ1tiXTtkPWEuaS1iLTE7ZD4wJiYkZmIoYS5nLGIrMSxhLmcsYixkKTtOQyhhLmcsLS1hLmksbnVsbCk7YS5maShiLGMpO2EuY2koKTtyZXR1cm4gY31cbmZ1bmN0aW9uIFVJZChhLGIpe3ZhciBjLGQ7aWYoYS5EYj4+MTY9PTE3KXtyZXR1cm4gYS5DYi5paChhLDIxLGM1LGIpfXJldHVybiBkPXpVZChCRChYS2QoKGM9QkQoQWpkKGEsMTYpLDI2KSwhYz9hLnpoKCk6YyksYS5EYj4+MTYpLDE4KSksYS5DYi5paChhLGQubixkLmYsYil9XG5mdW5jdGlvbiBpRGIoYSl7dmFyIGIsYyxkLGU7bW1iKCk7T2tiKGEuYyxhLmEpO2ZvcihlPW5ldyBvbGIoYS5jKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1tbGIoZSk7Zm9yKGM9bmV3IG9sYihhLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw2NzkpO2IuS2UoZCl9fX1cbmZ1bmN0aW9uIHBYYihhKXt2YXIgYixjLGQsZTttbWIoKTtPa2IoYS5jLGEuYSk7Zm9yKGU9bmV3IG9sYihhLmMpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPW1sYihlKTtmb3IoYz1uZXcgb2xiKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDM2OSk7Yi5LZShkKX19fVxuZnVuY3Rpb24gQUdiKGEpe3ZhciBiLGMsZCxlLGY7ZT1PaGU7Zj1udWxsO2ZvcihkPW5ldyBvbGIoYS5kKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjEzKTtpZihjLmQual5jLmUuail7Yj1jLmUuZS1jLmQuZS1jLmE7aWYoYjxlKXtlPWI7Zj1jfX19cmV0dXJuIGZ9XG5mdW5jdGlvbiBPU2IoKXtPU2I9Y2NiO01TYj1uZXcgTnNkKE1tZSwoQmNiKCksZmFsc2UpKTtJU2I9bmV3IE5zZChObWUsMTAwKTtLU2I9KHlUYigpLHdUYik7SlNiPW5ldyBOc2QoT21lLEtTYik7TFNiPW5ldyBOc2QoUG1lLHFtZSk7TlNiPW5ldyBOc2QoUW1lLG1lYihPaGUpKX1cbmZ1bmN0aW9uIHJpYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztqPTA7Zm9yKGU9YS5hW2JdLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtrPUNIYyhkLGMpO2ZvcihpPWsuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwxMSk7UmhiKGEuZixoLG1lYihqKyspKX19fVxuZnVuY3Rpb24gdXFkKGEsYixjKXt2YXIgZCxlLGYsZztpZihjKXtlPWMuYS5sZW5ndGg7ZD1uZXcgWWdlKGUpO2ZvcihnPShkLmItZC5hKSpkLmM8MD8oWGdlKCksV2dlKTpuZXcgc2hlKGQpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDE5KTtSYyhhLGIsVnBkKHRCKGMsZi5hKSkpfX19XG5mdW5jdGlvbiB2cWQoYSxiLGMpe3ZhciBkLGUsZixnO2lmKGMpe2U9Yy5hLmxlbmd0aDtkPW5ldyBZZ2UoZSk7Zm9yKGc9KGQuYi1kLmEpKmQuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoZCk7Zy5PYigpOyl7Zj1CRChnLlBiKCksMTkpO1JjKGEsYixWcGQodEIoYyxmLmEpKSl9fX1cbmZ1bmN0aW9uIEJrYyhhKXtna2MoKTt2YXIgYjtiPUJEKEVlKEVjKGEuayksS0MoRjEsYm5lLDYxLDIsMCwxKSksMTIyKTtLbGIoYiwwLGIubGVuZ3RoLG51bGwpO2lmKGJbMF09PShVY2QoKSxBY2QpJiZiWzFdPT1UY2Qpe05DKGIsMCxUY2QpO05DKGIsMSxBY2QpfXJldHVybiBifVxuZnVuY3Rpb24gSkhjKGEsYixjKXt2YXIgZCxlLGY7ZT1ISGMoYSxiLGMpO2Y9S0hjKGEsZSk7eUhjKGEuYik7Y0ljKGEsYixjKTttbWIoKTtPa2IoZSxuZXcgaEljKGEpKTtkPUtIYyhhLGUpO3lIYyhhLmIpO2NJYyhhLGMsYik7cmV0dXJuIG5ldyB2Z2QobWViKGYpLG1lYihkKSl9XG5mdW5jdGlvbiBqSmMoKXtqSmM9Y2NiO2dKYz1lM2MobmV3IGozYywocVViKCkscFViKSwoUzhiKCksaDhiKSk7aEpjPW5ldyBNc2QoJ2xpbmVhclNlZ21lbnRzLmlucHV0UHJpbycsbWViKDApKTtpSmM9bmV3IE1zZCgnbGluZWFyU2VnbWVudHMub3V0cHV0UHJpbycsbWViKDApKX1cbmZ1bmN0aW9uIHlSYygpe3lSYz1jY2I7dVJjPW5ldyBBUmMoJ1AxX1RSRUVJRklDQVRJT04nLDApO3ZSYz1uZXcgQVJjKCdQMl9OT0RFX09SREVSSU5HJywxKTt3UmM9bmV3IEFSYygnUDNfTk9ERV9QTEFDRU1FTlQnLDIpO3hSYz1uZXcgQVJjKCdQNF9FREdFX1JPVVRJTkcnLDMpfVxuZnVuY3Rpb24gWldjKCl7WldjPWNjYjtVV2M9KFk5YygpLEM5Yyk7WFdjPVQ5YztOV2M9WThjO09XYz1fOGM7UFdjPWI5YztNV2M9VzhjO1FXYz1lOWM7VFdjPXg5YztLV2M9KEhXYygpLHdXYyk7TFdjPXhXYztSV2M9eldjO1NXYz1CV2M7VldjPUNXYztXV2M9RFdjO1lXYz1GV2N9XG5mdW5jdGlvbiByYmQoKXtyYmQ9Y2NiO3FiZD1uZXcgdGJkKCdVTktOT1dOJywwKTtuYmQ9bmV3IHRiZCgnQUJPVkUnLDEpO29iZD1uZXcgdGJkKCdCRUxPVycsMik7cGJkPW5ldyB0YmQoJ0lOTElORScsMyk7bmV3IE1zZCgnb3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZScscWJkKX1cbmZ1bmN0aW9uIHJ1ZChhLGIpe3ZhciBjO2lmKGEubmkoKSYmYiE9bnVsbCl7Zm9yKGM9MDtjPGEuaTsrK2Mpe2lmKHBiKGIsYS5nW2NdKSl7cmV0dXJuIGN9fX1lbHNle2ZvcihjPTA7YzxhLmk7KytjKXtpZihQRChhLmdbY10pPT09UEQoYikpe3JldHVybiBjfX19cmV0dXJuIC0xfVxuZnVuY3Rpb24gRFpiKGEsYixjKXt2YXIgZCxlO2lmKGIuYz09KEtBYygpLElBYykmJmMuYz09SEFjKXtyZXR1cm4gLTF9ZWxzZSBpZihiLmM9PUhBYyYmYy5jPT1JQWMpe3JldHVybiAxfWQ9SFpiKGIuYSxhLmEpO2U9SFpiKGMuYSxhLmEpO3JldHVybiBiLmM9PUlBYz9lLWQ6ZC1lfVxuZnVuY3Rpb24gWl9iKGEsYixjKXtpZighIWMmJihiPDB8fGI+Yy5hLmMubGVuZ3RoKSl7dGhyb3cgdmJiKG5ldyBXZGIoJ2luZGV4IG11c3QgYmUgPj0gMCBhbmQgPD0gbGF5ZXIgbm9kZSBjb3VudCcpKX0hIWEuYyYmTGtiKGEuYy5hLGEpO2EuYz1jOyEhYyYmRGtiKGMuYSxiLGEpfVxuZnVuY3Rpb24gcDdiKGEsYil7dmFyIGMsZCxlO2ZvcihkPW5ldyBTcih1cihPX2IoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7ZT1CRChiLktiKGMpLDEwKTtyZXR1cm4gbmV3IGNjKFFiKGUubi5iK2Uuby5iLzIpKX1yZXR1cm4gd2IoKSx3YigpLHZifVxuZnVuY3Rpb24gck1jKGEsYil7dGhpcy5jPW5ldyBMcWI7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5kPUJEKHZOYihhLCh3dGMoKSxvdGMpKSwzMDQpO1BEKHZOYihhLChOeWMoKSx5eGMpKSk9PT1QRCgoX3FjKCksWnFjKSk/KHRoaXMuZT1uZXcgYk5jKToodGhpcy5lPW5ldyBXTWMpfVxuZnVuY3Rpb24gJGRkKGEsYil7dmFyIGMsZCxlLGY7Zj0wO2ZvcihkPW5ldyBvbGIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDMzKTtmKz0kd25kLk1hdGgucG93KGMuZypjLmYtYiwyKX1lPSR3bmQuTWF0aC5zcXJ0KGYvKGEuYy5sZW5ndGgtMSkpO3JldHVybiBlfVxuZnVuY3Rpb24gYmdkKGEsYil7dmFyIGMsZDtkPW51bGw7aWYoYS5YZSgoWTljKCksTzljKSkpe2M9QkQoYS5XZShPOWMpLDk0KTtjLlhlKGIpJiYoZD1jLldlKGIpKX1kPT1udWxsJiYhIWEueWYoKSYmKGQ9YS55ZigpLldlKGIpKTtkPT1udWxsJiYoZD1Lc2QoYikpO3JldHVybiBkfVxuZnVuY3Rpb24gVnQoYixjKXt2YXIgZCxlO2Q9Yi5aYyhjKTt0cnl7ZT1kLlBiKCk7ZC5RYigpO3JldHVybiBlfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTA5KSl7dGhyb3cgdmJiKG5ldyBxY2IoXCJDYW4ndCByZW1vdmUgZWxlbWVudCBcIitjKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fVxuZnVuY3Rpb24gcUEoYSxiKXt2YXIgYyxkLGU7ZD1uZXcgZUI7ZT1uZXcgZkIoZC5xLmdldEZ1bGxZZWFyKCktbmplLGQucS5nZXRNb250aCgpLGQucS5nZXREYXRlKCkpO2M9cEEoYSxiLGUpO2lmKGM9PTB8fGM8Yi5sZW5ndGgpe3Rocm93IHZiYihuZXcgV2RiKGIpKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIF90YihhLGIpe3ZhciBjLGQsZTt1Q2IoYik7bENiKGIhPWEpO2U9YS5iLmMubGVuZ3RoO2ZvcihkPWIuS2MoKTtkLk9iKCk7KXtjPWQuUGIoKTtFa2IoYS5iLHVDYihjKSl9aWYoZSE9YS5iLmMubGVuZ3RoKXthdWIoYSwwKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBiVGIoKXtiVGI9Y2NiO1ZTYj0oWTljKCksTzhjKTtuZXcgT3NkKEI4YywoQmNiKCksdHJ1ZSkpO1lTYj1ZOGM7WlNiPV84YzskU2I9YjljO1hTYj1XOGM7X1NiPWU5YzthVGI9eDljO1VTYj0oT1NiKCksTVNiKTtTU2I9SlNiO1RTYj1MU2I7V1NiPU5TYjtSU2I9SVNifVxuZnVuY3Rpb24gTVpiKGEsYil7aWYoYj09YS5jKXtyZXR1cm4gYS5kfWVsc2UgaWYoYj09YS5kKXtyZXR1cm4gYS5jfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoXCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLlwiKSl9fVxuZnVuY3Rpb24gQzNiKGEsYixjKXt2YXIgZCxlO2U9YS5vO2Q9YS5kO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLWQuZC1jO2Nhc2UgMzpyZXR1cm4gZS5iK2QuYStjO2Nhc2UgMjpyZXR1cm4gZS5hK2QuYytjO2Nhc2UgNDpyZXR1cm4gLWQuYi1jO2RlZmF1bHQ6cmV0dXJuIDA7fX1cbmZ1bmN0aW9uIEg2YihhLGIsYyxkKXt2YXIgZSxmLGcsaDskX2IoYixCRChkLlhiKDApLDI5KSk7aD1kLmJkKDEsZC5nYygpKTtmb3IoZj1CRChjLktiKGIpLDIwKS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDE3KTtnPWUuYy5pPT1iP2UuZC5pOmUuYy5pO0g2YihhLGcsYyxoKX19XG5mdW5jdGlvbiBYZWMoYSl7dmFyIGI7Yj1uZXcgTHFiO2lmKHdOYihhLCh3dGMoKSx0dGMpKSl7cmV0dXJuIEJEKHZOYihhLHR0YyksODMpfU1BYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5qLDE2KSksbmV3IFplYyksbmV3IF9lYyhiKSk7eU5iKGEsdHRjLGIpO3JldHVybiBifVxuZnVuY3Rpb24gY21kKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Nil7cmV0dXJuIGEuQ2IuaWgoYSw2LEIyLGIpfXJldHVybiBkPXpVZChCRChYS2QoKGM9QkQoQWpkKGEsMTYpLDI2KSwhYz8oVGhkKCksTGhkKTpjKSxhLkRiPj4xNiksMTgpKSxhLkNiLmloKGEsZC5uLGQuZixiKX1cbmZ1bmN0aW9uIEVvZChhLGIpe3ZhciBjLGQ7aWYoYS5EYj4+MTY9PTcpe3JldHVybiBhLkNiLmloKGEsMSxDMixiKX1yZXR1cm4gZD16VWQoQkQoWEtkKChjPUJEKEFqZChhLDE2KSwyNiksIWM/KFRoZCgpLE5oZCk6YyksYS5EYj4+MTYpLDE4KSksYS5DYi5paChhLGQubixkLmYsYil9XG5mdW5jdGlvbiBscGQoYSxiKXt2YXIgYyxkO2lmKGEuRGI+PjE2PT05KXtyZXR1cm4gYS5DYi5paChhLDksRTIsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhUaGQoKSxQaGQpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gbVFkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09NSl7cmV0dXJuIGEuQ2IuaWgoYSw5LGg1LGIpfXJldHVybiBkPXpVZChCRChYS2QoKGM9QkQoQWpkKGEsMTYpLDI2KSwhYz8oakdkKCksVkZkKTpjKSxhLkRiPj4xNiksMTgpKSxhLkNiLmloKGEsZC5uLGQuZixiKX1cbmZ1bmN0aW9uIEtIZChhLGIpe3ZhciBjLGQ7aWYoYS5EYj4+MTY9PTMpe3JldHVybiBhLkNiLmloKGEsMCxrNSxiKX1yZXR1cm4gZD16VWQoQkQoWEtkKChjPUJEKEFqZChhLDE2KSwyNiksIWM/KGpHZCgpLE9GZCk6YyksYS5EYj4+MTYpLDE4KSksYS5DYi5paChhLGQubixkLmYsYil9XG5mdW5jdGlvbiBTbmQoYSxiKXt2YXIgYyxkO2lmKGEuRGI+PjE2PT03KXtyZXR1cm4gYS5DYi5paChhLDYsbzUsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhqR2QoKSxjR2QpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gaXJkKCl7dGhpcy5hPW5ldyBicWQ7dGhpcy5nPW5ldyB3bzt0aGlzLmo9bmV3IHdvO3RoaXMuYj1uZXcgTHFiO3RoaXMuZD1uZXcgd287dGhpcy5pPW5ldyB3bzt0aGlzLms9bmV3IExxYjt0aGlzLmM9bmV3IExxYjt0aGlzLmU9bmV3IExxYjt0aGlzLmY9bmV3IExxYn1cbmZ1bmN0aW9uIE1DZChhLGIsYyl7dmFyIGQsZSxmO2M8MCYmKGM9MCk7Zj1hLmk7Zm9yKGU9YztlPGY7ZSsrKXtkPXF1ZChhLGUpO2lmKGI9PW51bGwpe2lmKGQ9PW51bGwpe3JldHVybiBlfX1lbHNlIGlmKFBEKGIpPT09UEQoZCl8fHBiKGIsZCkpe3JldHVybiBlfX1yZXR1cm4gLTF9XG5mdW5jdGlvbiBiMWQoYSxiKXt2YXIgYyxkO2M9Yi5IaChhLmEpO2lmKCFjKXtyZXR1cm4gbnVsbH1lbHNle2Q9R0QoQUFkKCghYy5iJiYoYy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYykpLGMuYiksQXdlKSk7cmV0dXJuIGRmYihCd2UsZCk/dTFkKGEsYktkKGIuSGooKSkpOmR9fVxuZnVuY3Rpb24gcDZkKGEsYil7dmFyIGMsZDtpZihiKXtpZihiPT1hKXtyZXR1cm4gdHJ1ZX1jPTA7Zm9yKGQ9QkQoYiw0OSkuZWgoKTshIWQmJmQhPWI7ZD1kLmVoKCkpe2lmKCsrYz5XamUpe3JldHVybiBwNmQoYSxkKX1pZihkPT1hKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIEhLYihhKXtDS2IoKTtzd2l0Y2goYS5xLmcpe2Nhc2UgNTpFS2IoYSwoVWNkKCksQWNkKSk7RUtiKGEsUmNkKTticmVhaztjYXNlIDQ6RktiKGEsKFVjZCgpLEFjZCkpO0ZLYihhLFJjZCk7YnJlYWs7ZGVmYXVsdDpHS2IoYSwoVWNkKCksQWNkKSk7R0tiKGEsUmNkKTt9fVxuZnVuY3Rpb24gTEtiKGEpe0NLYigpO3N3aXRjaChhLnEuZyl7Y2FzZSA1OklLYihhLChVY2QoKSx6Y2QpKTtJS2IoYSxUY2QpO2JyZWFrO2Nhc2UgNDpKS2IoYSwoVWNkKCksemNkKSk7SktiKGEsVGNkKTticmVhaztkZWZhdWx0OktLYihhLChVY2QoKSx6Y2QpKTtLS2IoYSxUY2QpO319XG5mdW5jdGlvbiBYUWIoYSl7dmFyIGIsYztiPUJEKHZOYihhLCh3U2IoKSxwU2IpKSwxOSk7aWYoYil7Yz1iLmE7Yz09MD95TmIoYSwoSFNiKCksR1NiKSxuZXcgR3ViKTp5TmIoYSwoSFNiKCksR1NiKSxuZXcgSHViKGMpKX1lbHNle3lOYihhLChIU2IoKSxHU2IpLG5ldyBIdWIoMSkpfX1cbmZ1bmN0aW9uIFYkYihhLGIpe3ZhciBjO2M9YS5pO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLShhLm4uYithLm8uYik7Y2FzZSAyOnJldHVybiBhLm4uYS1jLm8uYTtjYXNlIDM6cmV0dXJuIGEubi5iLWMuby5iO2Nhc2UgNDpyZXR1cm4gLShhLm4uYSthLm8uYSk7fXJldHVybiAwfVxuZnVuY3Rpb24gaGJjKGEsYil7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBiPT0oQ3RjKCkseXRjKT9kYmM6ZWJjO2Nhc2UgMTpyZXR1cm4gYj09KEN0YygpLHl0Yyk/ZGJjOmNiYztjYXNlIDI6cmV0dXJuIGI9PShDdGMoKSx5dGMpP2NiYzplYmM7ZGVmYXVsdDpyZXR1cm4gY2JjO319XG5mdW5jdGlvbiB2JGMoYSxiKXt2YXIgYyxkLGU7TGtiKGEuYSxiKTthLmUtPWIucisoYS5hLmMubGVuZ3RoPT0wPzA6YS5jKTtlPWVyZTtmb3IoZD1uZXcgb2xiKGEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE4Nyk7ZT0kd25kLk1hdGgubWF4KGUsYy5kKX1hLmI9ZX1cbmZ1bmN0aW9uIExsZChhLGIpe3ZhciBjLGQ7aWYoYS5EYj4+MTY9PTMpe3JldHVybiBhLkNiLmloKGEsMTIsRTIsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhUaGQoKSxLaGQpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gVW9kKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09MTEpe3JldHVybiBhLkNiLmloKGEsMTAsRTIsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhUaGQoKSxPaGQpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gUFNkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09MTApe3JldHVybiBhLkNiLmloKGEsMTEsYzUsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhqR2QoKSxhR2QpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gcVVkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09MTApe3JldHVybiBhLkNiLmloKGEsMTIsbjUsYil9cmV0dXJuIGQ9elVkKEJEKFhLZCgoYz1CRChBamQoYSwxNiksMjYpLCFjPyhqR2QoKSxkR2QpOmMpLGEuRGI+PjE2KSwxOCkpLGEuQ2IuaWgoYSxkLm4sZC5mLGIpfVxuZnVuY3Rpb24gd0lkKGEpe3ZhciBiO2lmKChhLkJiJjEpPT0wJiYhIWEuciYmYS5yLmtoKCkpe2I9QkQoYS5yLDQ5KTthLnI9QkQoeGlkKGEsYiksMTM4KTthLnIhPWImJihhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDksOCxiLGEucikpfXJldHVybiBhLnJ9XG5mdW5jdGlvbiB5SGIoYSxiLGMpe3ZhciBkO2Q9T0MoR0MoVUQsMSksVmplLDI1LDE1LFtCSGIoYSwoZ0hiKCksZEhiKSxiLGMpLEJIYihhLGVIYixiLGMpLEJIYihhLGZIYixiLGMpXSk7aWYoYS5mKXtkWzBdPSR3bmQuTWF0aC5tYXgoZFswXSxkWzJdKTtkWzJdPWRbMF19cmV0dXJuIGR9XG5mdW5jdGlvbiBPOWIoYSxiKXt2YXIgYyxkLGU7ZT1WOWIoYSxiKTtpZihlLmMubGVuZ3RoPT0wKXtyZXR1cm59T2tiKGUsbmV3IHBhYyk7Yz1lLmMubGVuZ3RoO2ZvcihkPTA7ZDxjO2QrKyl7SzliKGEsKHRDYihkLGUuYy5sZW5ndGgpLEJEKGUuY1tkXSwyODYpKSxSOWIoYSxlLGQpKX19XG5mdW5jdGlvbiBxa2MoYSl7dmFyIGIsYyxkLGU7Zm9yKGU9QkQoUWMoYS5hLChYamMoKSxTamMpKSwxNSkuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMDEpO2ZvcihjPUVjKGQuaykuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSw2MSk7a2tjKGEsZCxiLChGa2MoKSxEa2MpLDEpfX19XG5mdW5jdGlvbiB2b2MoYSl7dmFyIGIsYztpZihhLms9PShqMGIoKSxnMGIpKXtmb3IoYz1uZXcgU3IodXIoT19iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksMTcpO2lmKCFPWmIoYikmJmEuYz09TFpiKGIsYSkuYyl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBKTmMoYSl7dmFyIGIsYztpZihhLms9PShqMGIoKSxnMGIpKXtmb3IoYz1uZXcgU3IodXIoT19iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksMTcpO2lmKCFPWmIoYikmJmIuYy5pLmM9PWIuZC5pLmMpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gSFVjKGEsYil7dmFyIGMsZCxlLGY7T2RkKGIsJ0R1bGwgZWRnZSByb3V0aW5nJywxKTtmb3IoZj1Kc2IoYS5iLDApO2YuYiE9Zi5kLmM7KXtlPUJEKFhzYihmKSw4Nik7Zm9yKGQ9SnNiKGUuZCwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksMTg4KTtPc2IoYy5hKX19fVxuZnVuY3Rpb24geHFkKGEsYil7dmFyIGMsZCxlLGYsZztpZihiKXtlPWIuYS5sZW5ndGg7Yz1uZXcgWWdlKGUpO2ZvcihnPShjLmItYy5hKSpjLmM8MD8oWGdlKCksV2dlKTpuZXcgc2hlKGMpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDE5KTtkPVpwZChiLGYuYSk7ISFkJiZhcmQoYSxkKX19fVxuZnVuY3Rpb24gRFpkKCl7dFpkKCk7dmFyIGEsYjt4WmQoKE5GZCgpLE1GZCkpO3daZChNRmQpO1RuZChNRmQpO0ZRZD0oakdkKCksWUZkKTtmb3IoYj1uZXcgb2xiKHJaZCk7Yi5hPGIuYy5jLmxlbmd0aDspe2E9QkQobWxiKGIpLDI0MSk7UVFkKGEsWUZkLG51bGwpfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gZUQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2k9YS5oPj4xOTtqPWIuaD4+MTk7aWYoaSE9ail7cmV0dXJuIGotaX1lPWEuaDtoPWIuaDtpZihlIT1oKXtyZXR1cm4gZS1ofWQ9YS5tO2c9Yi5tO2lmKGQhPWcpe3JldHVybiBkLWd9Yz1hLmw7Zj1iLmw7cmV0dXJuIGMtZn1cbmZ1bmN0aW9uIGZGYigpe2ZGYj1jY2I7ZUZiPShyRmIoKSxvRmIpO2RGYj1uZXcgTnNkKFlrZSxlRmIpO2NGYj0oVUViKCksVEViKTtiRmI9bmV3IE5zZChaa2UsY0ZiKTthRmI9KE1FYigpLExFYik7X0ViPW5ldyBOc2QoJGtlLGFGYik7JEViPW5ldyBOc2QoX2tlLChCY2IoKSx0cnVlKSl9XG5mdW5jdGlvbiBjZmMoYSxiLGMpe3ZhciBkLGU7ZD1iKmM7aWYoSkQoYS5nLDE0NSkpe2U9dWdjKGEpO2lmKGUuZi5kKXtlLmYuYXx8KGEuZC5hKz1kK3BsZSl9ZWxzZXthLmQuZC09ZCtwbGU7YS5kLmErPWQrcGxlfX1lbHNlIGlmKEpEKGEuZywxMCkpe2EuZC5kLT1kO2EuZC5hKz0yKmR9fVxuZnVuY3Rpb24gdm1jKGEsYixjKXt2YXIgZCxlLGYsZyxoO2U9YVtjLmddO2ZvcihoPW5ldyBvbGIoYi5kKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTAxKTtmPWcuaTtpZighIWYmJmYuaT09Yyl7ZD1nLmRbYy5nXTtlW2RdPSR3bmQuTWF0aC5tYXgoZVtkXSxmLmouYil9fX1cbmZ1bmN0aW9uIEFaYyhhLGIpe3ZhciBjLGQsZSxmLGc7ZD0wO2U9MDtjPTA7Zm9yKGc9bmV3IG9sYihiLmQpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSw0NDMpO2EkYyhmKTtkPSR3bmQuTWF0aC5tYXgoZCxmLmIpO2UrPWYuZCsoYz4wP2EuZzowKTsrK2N9Yi5iPWQ7Yi5lPWV9XG5mdW5jdGlvbiB0byhhKXt2YXIgYixjLGQ7ZD1hLmI7aWYoTHAoYS5pLGQubGVuZ3RoKSl7Yz1kLmxlbmd0aCoyO2EuYj1LQyhHRixHaWUsMzE3LGMsMCwxKTthLmM9S0MoR0YsR2llLDMxNyxjLDAsMSk7YS5mPWMtMTthLmk9MDtmb3IoYj1hLmE7YjtiPWIuYyl7cG8oYSxiLGIpfSsrYS5nfX1cbmZ1bmN0aW9uIGNOYihhLGIsYyxkKXt2YXIgZSxmLGcsaDtmb3IoZT0wO2U8Yi5vO2UrKyl7Zj1lLWIuaitjO2ZvcihnPTA7ZzxiLnA7ZysrKXtoPWctYi5rK2Q7WU1iKGIsZSxnKT9qTmIoYSxmLGgpfHxsTmIoYSxmLGgpOiRNYihiLGUsZykmJihoTmIoYSxmLGgpfHxtTmIoYSxmLGgpKX19fVxuZnVuY3Rpb24gT29jKGEsYixjKXt2YXIgZDtkPWIuYy5pO2lmKGQuaz09KGowYigpLGcwYikpe3lOYihhLCh3dGMoKSxWc2MpLEJEKHZOYihkLFZzYyksMTEpKTt5TmIoYSxXc2MsQkQodk5iKGQsV3NjKSwxMSkpfWVsc2V7eU5iKGEsKHd0YygpLFZzYyksYi5jKTt5TmIoYSxXc2MsYy5kKX19XG5mdW5jdGlvbiBsNmMoYSxiLGMpe2k2YygpO3ZhciBkLGUsZixnLGgsaTtnPWIvMjtmPWMvMjtkPSR3bmQuTWF0aC5hYnMoYS5hKTtlPSR3bmQuTWF0aC5hYnMoYS5iKTtoPTE7aT0xO2Q+ZyYmKGg9Zy9kKTtlPmYmJihpPWYvZSk7WTZjKGEsJHduZC5NYXRoLm1pbihoLGkpKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIG9uZCgpe1NtZCgpO3ZhciBiLGM7dHJ5e2M9QkQobVVkKCh5RmQoKSx4RmQpLHl0ZSksMjAxNCk7aWYoYyl7cmV0dXJuIGN9fWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTAyKSl7Yj1hO3V2ZCgoaDBkKCksYikpfWVsc2UgdGhyb3cgdmJiKGEpfXJldHVybiBuZXcga25kfVxuZnVuY3Rpb24gWTlkKCl7QTlkKCk7dmFyIGIsYzt0cnl7Yz1CRChtVWQoKHlGZCgpLHhGZCksRXdlKSwyMDI0KTtpZihjKXtyZXR1cm4gY319Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMDIpKXtiPWE7dXZkKChoMGQoKSxiKSl9ZWxzZSB0aHJvdyB2YmIoYSl9cmV0dXJuIG5ldyBVOWR9XG5mdW5jdGlvbiBxWmQoKXtTbWQoKTt2YXIgYixjO3RyeXtjPUJEKG1VZCgoeUZkKCkseEZkKSxfdmUpLDE5NDEpO2lmKGMpe3JldHVybiBjfX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEwMikpe2I9YTt1dmQoKGgwZCgpLGIpKX1lbHNlIHRocm93IHZiYihhKX1yZXR1cm4gbmV3IG1aZH1cbmZ1bmN0aW9uIEhRZChhLGIsYyl7dmFyIGQsZTtlPWEuZTthLmU9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2Q9bmV3IG5TZChhLDEsNCxlLGIpOyFjPyhjPWQpOmMuRWkoZCl9ZSE9YiYmKGI/KGM9UVFkKGEsTVFkKGEsYiksYykpOihjPVFRZChhLGEuYSxjKSkpO3JldHVybiBjfVxuZnVuY3Rpb24gbkIoKXtlQi5jYWxsKHRoaXMpO3RoaXMuZT0tMTt0aGlzLmE9ZmFsc2U7dGhpcy5wPVJpZTt0aGlzLms9LTE7dGhpcy5jPS0xO3RoaXMuYj0tMTt0aGlzLmc9ZmFsc2U7dGhpcy5mPS0xO3RoaXMuaj0tMTt0aGlzLm49LTE7dGhpcy5pPS0xO3RoaXMuZD0tMTt0aGlzLm89UmllfVxuZnVuY3Rpb24gcUViKGEsYil7dmFyIGMsZCxlO2Q9YS5iLmQuZDthLmF8fChkKz1hLmIuZC5hKTtlPWIuYi5kLmQ7Yi5hfHwoZSs9Yi5iLmQuYSk7Yz1LZGIoZCxlKTtpZihjPT0wKXtpZighYS5hJiZiLmEpe3JldHVybiAtMX1lbHNlIGlmKCFiLmEmJmEuYSl7cmV0dXJuIDF9fXJldHVybiBjfVxuZnVuY3Rpb24gZU9iKGEsYil7dmFyIGMsZCxlO2Q9YS5iLmIuZDthLmF8fChkKz1hLmIuYi5hKTtlPWIuYi5iLmQ7Yi5hfHwoZSs9Yi5iLmIuYSk7Yz1LZGIoZCxlKTtpZihjPT0wKXtpZighYS5hJiZiLmEpe3JldHVybiAtMX1lbHNlIGlmKCFiLmEmJmEuYSl7cmV0dXJuIDF9fXJldHVybiBjfVxuZnVuY3Rpb24gUFZiKGEsYil7dmFyIGMsZCxlO2Q9YS5iLmcuZDthLmF8fChkKz1hLmIuZy5hKTtlPWIuYi5nLmQ7Yi5hfHwoZSs9Yi5iLmcuYSk7Yz1LZGIoZCxlKTtpZihjPT0wKXtpZighYS5hJiZiLmEpe3JldHVybiAtMX1lbHNlIGlmKCFiLmEmJmEuYSl7cmV0dXJuIDF9fXJldHVybiBjfVxuZnVuY3Rpb24gWlRiKCl7WlRiPWNjYjtXVGI9YzNjKGUzYyhlM2MoZTNjKG5ldyBqM2MsKHFVYigpLG9VYiksKFM4YigpLG04YikpLG9VYixxOGIpLHBVYix4OGIpLHBVYixhOGIpO1lUYj1lM2MoZTNjKG5ldyBqM2Msb1ViLFM3Yiksb1ViLGI4Yik7WFRiPWMzYyhuZXcgajNjLHBVYixkOGIpfVxuZnVuY3Rpb24gczNiKGEpe3ZhciBiLGMsZCxlLGY7Yj1CRCh2TmIoYSwod3RjKCksQ3NjKSksODMpO2Y9YS5uO2ZvcihkPWIuQ2MoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDMwNik7ZT1jLmk7ZS5jKz1mLmE7ZS5kKz1mLmI7Yy5jP1ZIYihjKTpYSGIoYyl9eU5iKGEsQ3NjLG51bGwpfVxuZnVuY3Rpb24gcW1jKGEsYixjKXt2YXIgZCxlO2U9YS5iO2Q9ZS5kO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLWQuZC1jO2Nhc2UgMjpyZXR1cm4gZS5vLmErZC5jK2M7Y2FzZSAzOnJldHVybiBlLm8uYitkLmErYztjYXNlIDQ6cmV0dXJuIC1kLmItYztkZWZhdWx0OnJldHVybiAtMTt9fVxuZnVuY3Rpb24gQlhjKGEpe3ZhciBiLGMsZCxlLGY7ZD0wO2U9ZG1lO2lmKGEuYil7Zm9yKGI9MDtiPDM2MDtiKyspe2M9YiowLjAxNzQ1MzI5MjUxOTk0MzI5NTt6WGMoYSxhLmQsMCwwLGRyZSxjKTtmPWEuYi5pZyhhLmQpO2lmKGY8ZSl7ZD1jO2U9Zn19fXpYYyhhLGEuZCwwLDAsZHJlLGQpfVxuZnVuY3Rpb24gRSRjKGEsYil7dmFyIGMsZCxlLGY7Zj1uZXcgTHFiO2IuZT1udWxsO2IuZj1udWxsO2ZvcihkPW5ldyBvbGIoYi5pKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNjUpO2U9QkQoT2hiKGEuZyxjLmEpLDQ2KTtjLmE9RDZjKGMuYik7UmhiKGYsYy5hLGUpfWEuZz1mfVxuZnVuY3Rpb24gdCRjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1iLWEuZTtmPWUvYS5kLmMubGVuZ3RoO2c9MDtmb3IoaT1uZXcgb2xiKGEuZCk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDQ0Myk7ZD1hLmItaC5iK2M7X1pjKGgsaC5lK2cqZixoLmYpO1haYyhoLGYsZCk7KytnfX1cbmZ1bmN0aW9uIFlCZChhKXt2YXIgYjthLmYucWooKTtpZihhLmIhPS0xKXsrK2EuYjtiPWEuZi5kW2EuYV07aWYoYS5iPGIuaSl7cmV0dXJufSsrYS5hfWZvcig7YS5hPGEuZi5kLmxlbmd0aDsrK2EuYSl7Yj1hLmYuZFthLmFdO2lmKCEhYiYmYi5pIT0wKXthLmI9MDtyZXR1cm59fWEuYj0tMX1cbmZ1bmN0aW9uIGowZChhLGIpe3ZhciBjLGQsZTtlPWIuYy5sZW5ndGg7Yz1sMGQoYSxlPT0wPycnOih0Q2IoMCxiLmMubGVuZ3RoKSxHRChiLmNbMF0pKSk7Zm9yKGQ9MTtkPGUmJiEhYzsrK2Qpe2M9QkQoYyw0OSkub2goKHRDYihkLGIuYy5sZW5ndGgpLEdEKGIuY1tkXSkpKX1yZXR1cm4gY31cbmZ1bmN0aW9uIHJFYyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IG9sYihiKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTApO2EuY1tjLmMucF1bYy5wXS5hPUF1YihhLmkpO2EuY1tjLmMucF1bYy5wXS5kPUVkYihhLmNbYy5jLnBdW2MucF0uYSk7YS5jW2MuYy5wXVtjLnBdLmI9MX19XG5mdW5jdGlvbiBfZGQoYSxiKXt2YXIgYyxkLGUsZjtmPTA7Zm9yKGQ9bmV3IG9sYihhKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTU3KTtmKz0kd25kLk1hdGgucG93KHJlZChjKSpxZWQoYyktYiwyKX1lPSR3bmQuTWF0aC5zcXJ0KGYvKGEuYy5sZW5ndGgtMSkpO3JldHVybiBlfVxuZnVuY3Rpb24gTEhjKGEsYixjLGQpe3ZhciBlLGYsZztmPUdIYyhhLGIsYyxkKTtnPU1IYyhhLGYpO2JJYyhhLGIsYyxkKTt5SGMoYS5iKTttbWIoKTtPa2IoZixuZXcgbEljKGEpKTtlPU1IYyhhLGYpO2JJYyhhLGMsYixkKTt5SGMoYS5iKTtyZXR1cm4gbmV3IHZnZChtZWIoZyksbWViKGUpKX1cbmZ1bmN0aW9uIGNKYyhhLGIsYyl7dmFyIGQsZTtPZGQoYywnSW50ZXJhY3RpdmUgbm9kZSBwbGFjZW1lbnQnLDEpO2EuYT1CRCh2TmIoYiwod3RjKCksb3RjKSksMzA0KTtmb3IoZT1uZXcgb2xiKGIuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtiSmMoYSxkKX1RZGQoYyl9XG5mdW5jdGlvbiBNVmMoYSxiKXt2YXIgYztPZGQoYiwnR2VuZXJhbCBDb21wYWN0b3InLDEpO2IubiYmISFhJiZUZGQoYixpNmQoYSksKHBnZCgpLG1nZCkpO2M9cVdjKEJEKGhrZChhLChaV2MoKSxMV2MpKSwzODApKTtjLmhnKGEpO2IubiYmISFhJiZUZGQoYixpNmQoYSksKHBnZCgpLG1nZCkpfVxuZnVuY3Rpb24gRGZkKGEsYixjKXt2YXIgZCxlO25tZChhLGEuaitiLGEuaytjKTtmb3IoZT1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyB4TWQoeTIsYSw1KSksYS5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDQ2OSk7dWtkKGQsZC5hK2IsZC5iK2MpfWdtZChhLGEuYitiLGEuYytjKX1cbmZ1bmN0aW9uIHZsZChhLGIsYyxkKXtzd2l0Y2goYyl7Y2FzZSA3OnJldHVybiAhYS5lJiYoYS5lPW5ldyB5NWQoQjIsYSw3LDQpKSxTeGQoYS5lLGIsZCk7Y2FzZSA4OnJldHVybiAhYS5kJiYoYS5kPW5ldyB5NWQoQjIsYSw4LDUpKSxTeGQoYS5kLGIsZCk7fXJldHVybiBGa2QoYSxiLGMsZCl9XG5mdW5jdGlvbiB3bGQoYSxiLGMsZCl7c3dpdGNoKGMpe2Nhc2UgNzpyZXR1cm4gIWEuZSYmKGEuZT1uZXcgeTVkKEIyLGEsNyw0KSksVHhkKGEuZSxiLGQpO2Nhc2UgODpyZXR1cm4gIWEuZCYmKGEuZD1uZXcgeTVkKEIyLGEsOCw1KSksVHhkKGEuZCxiLGQpO31yZXR1cm4gR2tkKGEsYixjLGQpfVxuZnVuY3Rpb24gbHFkKGEsYixjKXt2YXIgZCxlLGYsZyxoO2lmKGMpe2Y9Yy5hLmxlbmd0aDtkPW5ldyBZZ2UoZik7Zm9yKGg9KGQuYi1kLmEpKmQuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoZCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTkpO2U9WnBkKGMsZy5hKTshIWUmJmRyZChhLGUsYil9fX1cbmZ1bmN0aW9uIEhBZChhLGIsYyl7dmFyIGQsZSxmLGcsaDthLnFqKCk7Zj1iPT1udWxsPzA6dGIoYik7aWYoYS5mPjApe2c9KGYmT2hlKSVhLmQubGVuZ3RoO2U9d0FkKGEsZyxmLGIpO2lmKGUpe2g9ZS5lZChjKTtyZXR1cm4gaH19ZD1hLnRqKGYsYixjKTthLmMuRmMoZCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiB0MWQoYSxiKXt2YXIgYyxkLGUsZjtzd2l0Y2gobzFkKGEsYikuX2soKSl7Y2FzZSAzOmNhc2UgMjp7Yz1PS2QoYik7Zm9yKGU9MCxmPWMuaTtlPGY7KytlKXtkPUJEKHF1ZChjLGUpLDM0KTtpZigkMWQocTFkKGEsZCkpPT01KXtyZXR1cm4gZH19YnJlYWt9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gUXMoYSl7dmFyIGIsYyxkLGUsZjtpZihMcChhLmYsYS5iLmxlbmd0aCkpe2Q9S0MoQkcsR2llLDMzMCxhLmIubGVuZ3RoKjIsMCwxKTthLmI9ZDtlPWQubGVuZ3RoLTE7Zm9yKGM9YS5hO2MhPWE7Yz1jLlJkKCkpe2Y9QkQoYywzMzApO2I9Zi5kJmU7Zi5hPWRbYl07ZFtiXT1mfX19XG5mdW5jdGlvbiBESmIoYSxiKXt2YXIgYyxkLGUsZjtmPTA7Zm9yKGU9QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCkuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMTEpO2Y9JHduZC5NYXRoLm1heChmLGQuZS5hK2QuYi5yZigpLmEpfWM9QkQoTXBiKGEuYixiKSwxMjQpO2Mubi5iPTA7Yy5hLmE9Zn1cbmZ1bmN0aW9uIE1LYihhLGIpe3ZhciBjLGQsZSxmO2M9MDtmb3IoZj1CRChCRChRYyhhLnIsYiksMjEpLDg0KS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDExMSk7Yz0kd25kLk1hdGgubWF4KGMsZS5lLmIrZS5iLnJmKCkuYil9ZD1CRChNcGIoYS5iLGIpLDEyNCk7ZC5uLmQ9MDtkLmEuYj1jfVxuZnVuY3Rpb24gSU5jKGEpe3ZhciBiLGM7Yz1CRCh2TmIoYSwod3RjKCksS3NjKSksMjEpO2I9azNjKHpOYyk7Yy5IYygoT3JjKCksTHJjKSkmJmQzYyhiLENOYyk7Yy5IYyhOcmMpJiZkM2MoYixFTmMpO2MuSGMoRXJjKSYmZDNjKGIsQU5jKTtjLkhjKEdyYykmJmQzYyhiLEJOYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBqMWMoYSxiKXt2YXIgYztPZGQoYiwnRGVsYXVuYXkgdHJpYW5ndWxhdGlvbicsMSk7Yz1uZXcgUmtiO0hrYihhLmksbmV3IG4xYyhjKSk7Q2NiKEREKHZOYihhLChYTmIoKSxWTmIpKSkpJiYnbnVsbDEwYncnOyFhLmU/KGEuZT1OQ2IoYykpOnllKGEuZSxOQ2IoYykpO1FkZChiKX1cbmZ1bmN0aW9uIHE2YyhhKXtpZihhPDApe3Rocm93IHZiYihuZXcgV2RiKCdUaGUgaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZScpKX1lbHNlIHJldHVybiBhPGg2Yy5sZW5ndGg/U2JiKGg2Y1thXSk6JHduZC5NYXRoLnNxcnQoZHJlKmEpKih5NmMoYSxhKS94NmMoMi43MTgyODE4Mjg0NTkwNDUsYSkpfVxuZnVuY3Rpb24gcHVkKGEsYil7dmFyIGM7aWYoYS5uaSgpJiZiIT1udWxsKXtmb3IoYz0wO2M8YS5pOysrYyl7aWYocGIoYixhLmdbY10pKXtyZXR1cm4gdHJ1ZX19fWVsc2V7Zm9yKGM9MDtjPGEuaTsrK2Mpe2lmKFBEKGEuZ1tjXSk9PT1QRChiKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBqcihhLGIpe2lmKGI9PW51bGwpe3doaWxlKGEuYS5PYigpKXtpZihCRChhLmEuUGIoKSw0MikuZGQoKT09bnVsbCl7cmV0dXJuIHRydWV9fX1lbHNle3doaWxlKGEuYS5PYigpKXtpZihwYihiLEJEKGEuYS5QYigpLDQyKS5kZCgpKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiB6eShhLGIpe3ZhciBjLGQsZTtpZihiPT09YSl7cmV0dXJuIHRydWV9ZWxzZSBpZihKRChiLDY2NCkpe2U9QkQoYiwxOTQ3KTtyZXR1cm4gVWUoKGQ9YS5nLCFkPyhhLmc9bmV3IHZpKGEpKTpkKSwoYz1lLmcsIWM/KGUuZz1uZXcgdmkoZSkpOmMpKX1lbHNle3JldHVybiBmYWxzZX19XG5mdW5jdGlvbiBUeihhKXt2YXIgYixjLGQsZTtiPSdTeic7Yz0nZXonO2U9JHduZC5NYXRoLm1pbihhLmxlbmd0aCw1KTtmb3IoZD1lLTE7ZD49MDtkLS0pe2lmKGRmYihhW2RdLmQsYil8fGRmYihhW2RdLmQsYykpe2EubGVuZ3RoPj1kKzEmJmEuc3BsaWNlKDAsZCsxKTticmVha319cmV0dXJuIGF9XG5mdW5jdGlvbiBBYmIoYSxiKXt2YXIgYztpZihGYmIoYSkmJkZiYihiKSl7Yz1hL2I7aWYoS2plPGMmJmM8SWplKXtyZXR1cm4gYzwwPyR3bmQuTWF0aC5jZWlsKGMpOiR3bmQuTWF0aC5mbG9vcihjKX19cmV0dXJuIHpiYihVQyhGYmIoYSk/UmJiKGEpOmEsRmJiKGIpP1JiYihiKTpiLGZhbHNlKSl9XG5mdW5jdGlvbiBMWmIoYSxiKXtpZihiPT1hLmMuaSl7cmV0dXJuIGEuZC5pfWVsc2UgaWYoYj09YS5kLmkpe3JldHVybiBhLmMuaX1lbHNle3Rocm93IHZiYihuZXcgV2RiKFwiJ25vZGUnIG11c3QgZWl0aGVyIGJlIHRoZSBzb3VyY2Ugbm9kZSBvciB0YXJnZXQgbm9kZSBvZiB0aGUgZWRnZS5cIikpfX1cbmZ1bmN0aW9uIEMyYihhKXt2YXIgYixjLGQsZTtlPUJEKHZOYihhLCh3dGMoKSx4c2MpKSwzNyk7aWYoZSl7ZD1uZXcgZDdjO2I9UV9iKGEuYy5pKTt3aGlsZShiIT1lKXtjPWIuZTtiPVFfYihjKTtPNmMoUDZjKFA2YyhkLGMubiksYi5jKSxiLmQuYixiLmQuZCl9cmV0dXJuIGR9cmV0dXJuIHcyYn1cbmZ1bmN0aW9uIExkYyhhKXt2YXIgYjtiPUJEKHZOYihhLCh3dGMoKSxudGMpKSw0MDMpO01BYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYi5kLDE2KSksbmV3IFlkYyksbmV3ICRkYyhhKSk7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmQsMTYpKSxuZXcgYWVjKSxuZXcgY2VjKGEpKX1cbmZ1bmN0aW9uIHdvYyhhLGIpe3ZhciBjLGQsZSxmO2U9Yj9VX2IoYSk6Ul9iKGEpO2ZvcihkPW5ldyBTcih1cihlLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2Y9TFpiKGMsYSk7aWYoZi5rPT0oajBiKCksZzBiKSYmZi5jIT1hLmMpe3JldHVybiBmfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIEhEYyhhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IG9sYihhLnApO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMCk7aWYoYi5rIT0oajBiKCksaDBiKSl7Y29udGludWV9ZD1iLm8uYjthLmk9JHduZC5NYXRoLm1pbihhLmksZCk7YS5nPSR3bmQuTWF0aC5tYXgoYS5nLGQpfX1cbmZ1bmN0aW9uIG9FYyhhLGIsYyl7dmFyIGQsZSxmO2ZvcihmPW5ldyBvbGIoYik7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGYpLDEwKTthLmNbZC5jLnBdW2QucF0uZT1mYWxzZX1mb3IoZT1uZXcgb2xiKGIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMCk7bkVjKGEsZCxjKX19XG5mdW5jdGlvbiBXT2MoYSxiLGMpe3ZhciBkLGU7ZD12UGMoYi5qLGMucyxjLmMpK3ZQYyhjLmUsYi5zLGIuYyk7ZT12UGMoYy5qLGIucyxiLmMpK3ZQYyhiLmUsYy5zLGMuYyk7aWYoZD09ZSl7aWYoZD4wKXthLmIrPTI7YS5hKz1kfX1lbHNle2EuYis9MTthLmErPSR3bmQuTWF0aC5taW4oZCxlKX19XG5mdW5jdGlvbiBScGQoYSxiKXt2YXIgYyxkO2Q9ZmFsc2U7aWYoTkQoYikpe2Q9dHJ1ZTtRcGQoYSxuZXcgeUMoR0QoYikpKX1pZighZCl7aWYoSkQoYiwyMzYpKXtkPXRydWU7UXBkKGEsKGM9S2NiKEJEKGIsMjM2KSksbmV3IFRCKGMpKSl9fWlmKCFkKXt0aHJvdyB2YmIobmV3IHZjYihVdGUpKX19XG5mdW5jdGlvbiBJTWQoYSxiLGMsZCl7dmFyIGUsZixnO2U9bmV3IHBTZChhLmUsMSwxMCwoZz1iLmMsSkQoZyw4OCk/QkQoZywyNik6KGpHZCgpLF9GZCkpLChmPWMuYyxKRChmLDg4KT9CRChmLDI2KTooakdkKCksX0ZkKSksSExkKGEsYiksZmFsc2UpOyFkPyhkPWUpOmQuRWkoZSk7cmV0dXJuIGR9XG5mdW5jdGlvbiBUX2IoYSl7dmFyIGIsYztzd2l0Y2goQkQodk5iKFFfYihhKSwoTnljKCksaXhjKSksNDIwKS5nKXtjYXNlIDA6Yj1hLm47Yz1hLm87cmV0dXJuIG5ldyBmN2MoYi5hK2MuYS8yLGIuYitjLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgZzdjKGEubik7ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fVxuZnVuY3Rpb24gbHJjKCl7bHJjPWNjYjtpcmM9bmV3IG1yYyhhbmUsMCk7aHJjPW5ldyBtcmMoJ0xFRlRVUCcsMSk7a3JjPW5ldyBtcmMoJ1JJR0hUVVAnLDIpO2dyYz1uZXcgbXJjKCdMRUZURE9XTicsMyk7anJjPW5ldyBtcmMoJ1JJR0hURE9XTicsNCk7ZnJjPW5ldyBtcmMoJ0JBTEFOQ0VEJyw1KX1cbmZ1bmN0aW9uIEZGYyhhLGIsYyl7dmFyIGQsZSxmO2Q9S2RiKGEuYVtiLnBdLGEuYVtjLnBdKTtpZihkPT0wKXtlPUJEKHZOYihiLCh3dGMoKSxRc2MpKSwxNSk7Zj1CRCh2TmIoYyxRc2MpLDE1KTtpZihlLkhjKGMpKXtyZXR1cm4gLTF9ZWxzZSBpZihmLkhjKGIpKXtyZXR1cm4gMX19cmV0dXJuIGR9XG5mdW5jdGlvbiBqWGMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBuZXcgWFZjO2Nhc2UgMjpyZXR1cm4gbmV3IFpWYztjYXNlIDM6cmV0dXJuIG5ldyBWVmM7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoanJlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fVxuZnVuY3Rpb24gSWtkKGEsYixjKXtzd2l0Y2goYil7Y2FzZSAxOiFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpO1V4ZChhLm4pOyFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpO3l0ZChhLm4sQkQoYywxNCkpO3JldHVybjtjYXNlIDI6TGtkKGEsR0QoYykpO3JldHVybjt9ZWtkKGEsYixjKX1cbmZ1bmN0aW9uIFprZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMzphbGQoYSxFZGIoRUQoYykpKTtyZXR1cm47Y2FzZSA0OmNsZChhLEVkYihFRChjKSkpO3JldHVybjtjYXNlIDU6ZGxkKGEsRWRiKEVEKGMpKSk7cmV0dXJuO2Nhc2UgNjplbGQoYSxFZGIoRUQoYykpKTtyZXR1cm47fUlrZChhLGIsYyl9XG5mdW5jdGlvbiBGbmQoYSxiLGMpe3ZhciBkLGUsZjtmPShkPW5ldyByVWQsZCk7ZT14SWQoZixiLG51bGwpOyEhZSYmZS5GaSgpO3BuZChmLGMpO3d0ZCgoIWEuYyYmKGEuYz1uZXcgY1VkKHA1LGEsMTIsMTApKSxhLmMpLGYpO0FJZChmLDApO0RJZChmLDEpO0NJZChmLHRydWUpO0JJZChmLHRydWUpfVxuZnVuY3Rpb24gbVVkKGEsYil7dmFyIGMsZCxlO2M9Q3JiKGEuZyxiKTtpZihKRChjLDIzNSkpe2U9QkQoYywyMzUpO2UuUWgoKT09bnVsbCYmdW5kZWZpbmVkO3JldHVybiBlLk5oKCl9ZWxzZSBpZihKRChjLDQ5OCkpe2Q9QkQoYywxOTM4KTtlPWQuYjtyZXR1cm4gZX1lbHNle3JldHVybiBudWxsfX1cbmZ1bmN0aW9uIFVpKGEsYixjLGQpe3ZhciBlLGY7UWIoYik7UWIoYyk7Zj1CRCh0bihhLmQsYiksMTkpO09iKCEhZiwnUm93ICVzIG5vdCBpbiAlcycsYixhLmUpO2U9QkQodG4oYS5iLGMpLDE5KTtPYighIWUsJ0NvbHVtbiAlcyBub3QgaW4gJXMnLGMsYS5jKTtyZXR1cm4gV2koYSxmLmEsZS5hLGQpfVxuZnVuY3Rpb24gSkMoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbDtrPWVbZl07aj1mPT1nLTE7aD1qP2Q6MDtsPUxDKGgsayk7ZCE9MTAmJk9DKEdDKGEsZy1mKSxiW2ZdLGNbZl0saCxsKTtpZighail7KytmO2ZvcihpPTA7aTxrOysraSl7bFtpXT1KQyhhLGIsYyxkLGUsZixnKX19cmV0dXJuIGx9XG5mdW5jdGlvbiBFeWQoYil7aWYoYi5nPT0tMSl7dGhyb3cgdmJiKG5ldyBZZGIpfWIubWooKTt0cnl7Yi5pLiRjKGIuZyk7Yi5mPWIuaS5qO2IuZzxiLmUmJi0tYi5lO2IuZz0tMX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDczKSl7dGhyb3cgdmJiKG5ldyBBcGIpfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIGhZYihhLGIpe2EuYi5hPSR3bmQuTWF0aC5taW4oYS5iLmEsYi5jKTthLmIuYj0kd25kLk1hdGgubWluKGEuYi5iLGIuZCk7YS5hLmE9JHduZC5NYXRoLm1heChhLmEuYSxiLmMpO2EuYS5iPSR3bmQuTWF0aC5tYXgoYS5hLmIsYi5kKTtyZXR1cm4gYS5jW2EuYy5sZW5ndGhdPWIsdHJ1ZX1cbmZ1bmN0aW9uIG5aYihhKXt2YXIgYixjLGQsZTtlPS0xO2Q9MDtmb3IoYz1uZXcgb2xiKGEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyNDMpO2lmKGIuYz09KEtBYygpLEhBYykpe2U9ZD09MD8wOmQtMTticmVha31lbHNlIGQ9PWEuYy5sZW5ndGgtMSYmKGU9ZCk7ZCs9MX1yZXR1cm4gZX1cbmZ1bmN0aW9uIFVaYyhhKXt2YXIgYixjLGQsZTtlPTA7Yj0wO2ZvcihkPW5ldyBvbGIoYS5jKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMzMpO2RsZChjLGEuZStlKTtlbGQoYyxhLmYpO2UrPWMuZythLmI7Yj0kd25kLk1hdGgubWF4KGIsYy5mK2EuYil9YS5kPWUtYS5iO2EuYT1iLWEuYn1cbmZ1bmN0aW9uIGJFYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IG9sYihhLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDU3KTtkPWIuZC5jO2IuZC5jPWIuZC5kO2IuZC5kPWQ7ZD1iLmQuYjtiLmQuYj1iLmQuYTtiLmQuYT1kO2Q9Yi5iLmE7Yi5iLmE9Yi5iLmI7Yi5iLmI9ZH1SRGIoYSl9XG5mdW5jdGlvbiBCVmIoYSl7dmFyIGIsYyxkO2ZvcihjPW5ldyBvbGIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw4MSk7ZD1iLmcuYztiLmcuYz1iLmcuZDtiLmcuZD1kO2Q9Yi5nLmI7Yi5nLmI9Yi5nLmE7Yi5nLmE9ZDtkPWIuZS5hO2IuZS5hPWIuZS5iO2IuZS5iPWR9c1ZiKGEpfVxuZnVuY3Rpb24gTG1jKGEpe3ZhciBiLGMsZCxlLGY7Zj1FYyhhLmspO2ZvcihjPShVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07aWYoYiE9U2NkJiYhZi5IYyhiKSl7cmV0dXJuIGJ9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gem5jKGEsYil7dmFyIGMsZDtkPUJEKEV0YihLQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuaiwxNikpLG5ldyBQbmMpKSksMTEpO2lmKGQpe2M9QkQoSWtiKGQuZSwwKSwxNyk7aWYoYyl7cmV0dXJuIEJEKHZOYihjLCh3dGMoKSxac2MpKSwxOSkuYX19cmV0dXJuIHl6YyhhLmIpfVxuZnVuY3Rpb24gQ0NjKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGY9bmV3IG9sYihiLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7QmxiKGEuZCk7Zm9yKGQ9bmV3IFNyKHVyKFVfYihlKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDE3KTt6Q2MoYSxlLGMuZC5pKX19fVxuZnVuY3Rpb24gTlpjKGEsYil7dmFyIGMsZDtMa2IoYS5iLGIpO2ZvcihkPW5ldyBvbGIoYS5uKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjExKTtpZihKa2IoYy5jLGIsMCkhPS0xKXtMa2IoYy5jLGIpO1VaYyhjKTtjLmMuYy5sZW5ndGg9PTAmJkxrYihhLm4sYyk7YnJlYWt9fUhaYyhhKX1cbmZ1bmN0aW9uICRaYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zz1hLmY7ZT0wO2Y9MDtmb3IoZD1uZXcgb2xiKGEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE4Nyk7T1pjKGMsYS5lLGcpO0taYyhjLGIpO2Y9JHduZC5NYXRoLm1heChmLGMucik7Zys9Yy5kK2EuYztlPWd9YS5kPWY7YS5iPWV9XG5mdW5jdGlvbiBoVmMoYSl7dmFyIGIsYztjPSRzZChhKTtpZihRcShjKSl7cmV0dXJuIG51bGx9ZWxzZXtiPShRYihjKSxCRChtcihuZXcgU3IodXIoYy5hLktjKCksbmV3IFNxKSkpLDc5KSk7cmV0dXJuIGF0ZChCRChxdWQoKCFiLmImJihiLmI9bmV3IHk1ZCh6MixiLDQsNykpLGIuYiksMCksODIpKX19XG5mdW5jdGlvbiBYSWQoYSl7dmFyIGI7aWYoIWEubyl7Yj1hLkxqKCk7Yj8oYS5vPW5ldyBkWWQoYSxhLG51bGwpKTphLnJrKCk/KGEubz1uZXcgdVZkKGEsbnVsbCkpOiQxZChxMWQoKE82ZCgpLE02ZCksYSkpPT0xPyhhLm89bmV3IG5ZZChhKSk6KGEubz1uZXcgc1lkKGEsbnVsbCkpfXJldHVybiBhLm99XG5mdW5jdGlvbiB3NmQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpZihjLm1oKGIpKXtlPShnPWIsIWc/bnVsbDpCRChkLDQ5KS54aChnKSk7aWYoZSl7aT1jLmFoKGIpO2g9Yi50O2lmKGg+MXx8aD09LTEpe2Y9QkQoaSwxNSk7ZS5XYih0NmQoYSxmKSl9ZWxzZXtlLldiKHM2ZChhLEJEKGksNTYpKSl9fX19XG5mdW5jdGlvbiBaYmIoYixjLGQsZSl7WWJiKCk7dmFyIGY9V2JiOyRtb2R1bGVOYW1lPWM7JG1vZHVsZUJhc2U9ZDt0YmI9ZTtmdW5jdGlvbiBnKCl7Zm9yKHZhciBhPTA7YTxmLmxlbmd0aDthKyspe2ZbYV0oKX19XG5pZihiKXt0cnl7SWhlKGcpKCl9Y2F0Y2goYSl7YihjLGEpfX1lbHNle0loZShnKSgpfX1cbmZ1bmN0aW9uIEtnYyhhKXt2YXIgYixjLGQsZSxmO2ZvcihkPW5ldyBuaWIoKG5ldyBlaWIoYS5iKSkuYSk7ZC5iOyl7Yz1saWIoZCk7Yj1CRChjLmNkKCksMTApO2Y9QkQoQkQoYy5kZCgpLDQ2KS5hLDEwKTtlPUJEKEJEKGMuZGQoKSw0NikuYiw4KTtQNmMoWDZjKGIubiksUDZjKFI2YyhmLm4pLGUpKX19XG5mdW5jdGlvbiBsbGMoYSl7c3dpdGNoKEJEKHZOYihhLmIsKE55YygpLFZ3YykpLDM3NSkuZyl7Y2FzZSAxOk1BYihOQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZCwxNikpLG5ldyBHbGMpLG5ldyBJbGMpLG5ldyBLbGMpO2JyZWFrO2Nhc2UgMjpubGMoYSk7YnJlYWs7Y2FzZSAwOm1sYyhhKTt9fVxuZnVuY3Rpb24gS1hjKGEsYixjKXt2YXIgZDtPZGQoYywnU3RyYWlnaHQgTGluZSBFZGdlIFJvdXRpbmcnLDEpO2MubiYmISFiJiZUZGQoYyxpNmQoYiksKHBnZCgpLG1nZCkpO2Q9QkQoaGtkKGIsKE1VYygpLExVYykpLDMzKTtMWGMoYSxkKTtjLm4mJiEhYiYmVGRkKGMsaTZkKGIpLChwZ2QoKSxtZ2QpKX1cbmZ1bmN0aW9uIGk4Yygpe2k4Yz1jY2I7aDhjPW5ldyBqOGMoJ1ZfVE9QJywwKTtnOGM9bmV3IGo4YygnVl9DRU5URVInLDEpO2Y4Yz1uZXcgajhjKCdWX0JPVFRPTScsMik7ZDhjPW5ldyBqOGMoJ0hfTEVGVCcsMyk7YzhjPW5ldyBqOGMoJ0hfQ0VOVEVSJyw0KTtlOGM9bmV3IGo4YygnSF9SSUdIVCcsNSl9XG5mdW5jdGlvbiBnTGQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBtS2QoYSk7Yj1uZXcgSmZiKG1LZChhKSk7Yi5hKz0nIChhYnN0cmFjdDogJztGZmIoYiwoYS5CYiYyNTYpIT0wKTtiLmErPScsIGludGVyZmFjZTogJztGZmIoYiwoYS5CYiY1MTIpIT0wKTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gbDNkKGEsYixjLGQpe3ZhciBlLGYsZyxoO2lmKG9pZChhLmUpKXtlPWIuYWsoKTtoPWIuZGQoKTtmPWMuZGQoKTtnPUgyZChhLDEsZSxoLGYsZS4kaigpP00yZChhLGUsZixKRChlLDk5KSYmKEJEKGUsMTgpLkJiJlRqZSkhPTApOi0xLHRydWUpO2Q/ZC5FaShnKTooZD1nKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIGt6KGEpe3ZhciBiO2lmKGEuYz09bnVsbCl7Yj1QRChhLmIpPT09UEQoaXopP251bGw6YS5iO2EuZD1iPT1udWxsP1hoZTpNRChiKT9ueihGRChiKSk6TkQoYik/VmllOmhkYihyYihiKSk7YS5hPWEuYSsnOiAnKyhNRChiKT9teihGRChiKSk6YisnJyk7YS5jPScoJythLmQrJykgJythLmF9fVxuZnVuY3Rpb24gV2diKGEsYil7dGhpcy5lPWE7aWYoQmJiKHhiYihiLC00Mjk0OTY3Mjk2KSwwKSl7dGhpcy5kPTE7dGhpcy5hPU9DKEdDKFdELDEpLG9qZSwyNSwxNSxbVGJiKGIpXSl9ZWxzZXt0aGlzLmQ9Mjt0aGlzLmE9T0MoR0MoV0QsMSksb2plLDI1LDE1LFtUYmIoYiksVGJiKE9iYihiLDMyKSldKX19XG5mdW5jdGlvbiB5cmIoKXtmdW5jdGlvbiBiKCl7dHJ5e3JldHVybiAobmV3IE1hcCkuZW50cmllcygpLm5leHQoKS5kb25lfWNhdGNoKGEpe3JldHVybiBmYWxzZX19XG5pZih0eXBlb2YgTWFwPT09TmhlJiZNYXAucHJvdG90eXBlLmVudHJpZXMmJmIoKSl7cmV0dXJuIE1hcH1lbHNle3JldHVybiB6cmIoKX19XG5mdW5jdGlvbiBWUGMoYSxiKXt2YXIgYyxkLGUsZjtmPW5ldyBCaWIoYS5lLDApO2M9MDt3aGlsZShmLmI8Zi5kLmdjKCkpe2Q9RWRiKChzQ2IoZi5iPGYuZC5nYygpKSxFRChmLmQuWGIoZi5jPWYuYisrKSkpKTtlPWQtYjtpZihlPk9xZSl7cmV0dXJuIGN9ZWxzZSBlPi0xLjBFLTYmJisrY31yZXR1cm4gY31cbmZ1bmN0aW9uIFBRZChhLGIpe3ZhciBjO2lmKGIhPWEuYil7Yz1udWxsOyEhYS5iJiYoYz1saWQoYS5iLGEsLTQsYykpOyEhYiYmKGM9a2lkKGIsYSwtNCxjKSk7Yz1HUWQoYSxiLGMpOyEhYyYmYy5GaSgpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSwzLGIsYikpfVxuZnVuY3Rpb24gU1FkKGEsYil7dmFyIGM7aWYoYiE9YS5mKXtjPW51bGw7ISFhLmYmJihjPWxpZChhLmYsYSwtMSxjKSk7ISFiJiYoYz1raWQoYixhLC0xLGMpKTtjPUlRZChhLGIsYyk7ISFjJiZjLkZpKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDAsYixiKSl9XG5mdW5jdGlvbiBFOWQoYSl7dmFyIGIsYyxkO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Yz1CRChhLDE1KTtpZihjLmRjKCkpcmV0dXJuICcnO2Q9bmV3IEhmYjtmb3IoYj1jLktjKCk7Yi5PYigpOyl7RWZiKGQsKFE4ZCgpLEdEKGIuUGIoKSkpKTtkLmErPScgJ31yZXR1cm4gbGNiKGQsZC5hLmxlbmd0aC0xKX1cbmZ1bmN0aW9uIEk5ZChhKXt2YXIgYixjLGQ7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtjPUJEKGEsMTUpO2lmKGMuZGMoKSlyZXR1cm4gJyc7ZD1uZXcgSGZiO2ZvcihiPWMuS2MoKTtiLk9iKCk7KXtFZmIoZCwoUThkKCksR0QoYi5QYigpKSkpO2QuYSs9JyAnfXJldHVybiBsY2IoZCxkLmEubGVuZ3RoLTEpfVxuZnVuY3Rpb24gcUVjKGEsYixjKXt2YXIgZCxlO2Q9YS5jW2IuYy5wXVtiLnBdO2U9YS5jW2MuYy5wXVtjLnBdO2lmKGQuYSE9bnVsbCYmZS5hIT1udWxsKXtyZXR1cm4gRGRiKGQuYSxlLmEpfWVsc2UgaWYoZC5hIT1udWxsKXtyZXR1cm4gLTF9ZWxzZSBpZihlLmEhPW51bGwpe3JldHVybiAxfXJldHVybiAwfVxuZnVuY3Rpb24genFkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKGIpe2Y9Yi5hLmxlbmd0aDtjPW5ldyBZZ2UoZik7Zm9yKGg9KGMuYi1jLmEpKmMuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoYyk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTkpO2U9WnBkKGIsZy5hKTtkPW5ldyBDcmQoYSk7QXFkKGQuYSxlKX19fVxuZnVuY3Rpb24gUXFkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKGIpe2Y9Yi5hLmxlbmd0aDtjPW5ldyBZZ2UoZik7Zm9yKGg9KGMuYi1jLmEpKmMuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoYyk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTkpO2U9WnBkKGIsZy5hKTtkPW5ldyBscmQoYSk7bnFkKGQuYSxlKX19fVxuZnVuY3Rpb24gZUZkKGIpe3ZhciBjO2lmKGIhPW51bGwmJmIubGVuZ3RoPjAmJmJmYihiLGIubGVuZ3RoLTEpPT0zMyl7dHJ5e2M9UEVkKHFmYihiLDAsYi5sZW5ndGgtMSkpO3JldHVybiBjLmU9PW51bGx9Y2F0Y2goYSl7YT11YmIoYSk7aWYoIUpEKGEsMzIpKXRocm93IHZiYihhKX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gaDNkKGEsYixjKXt2YXIgZCxlLGY7ZD1iLmFrKCk7Zj1iLmRkKCk7ZT1kLiRqKCk/SDJkKGEsMyxkLG51bGwsZixNMmQoYSxkLGYsSkQoZCw5OSkmJihCRChkLDE4KS5CYiZUamUpIT0wKSx0cnVlKTpIMmQoYSwxLGQsZC56aigpLGYsLTEsdHJ1ZSk7Yz9jLkVpKGUpOihjPWUpO3JldHVybiBjfVxuZnVuY3Rpb24gVmVlKCl7dmFyIGEsYixjO2I9MDtmb3IoYT0wO2E8J1gnLmxlbmd0aDthKyspe2M9VWVlKChCQ2IoYSwnWCcubGVuZ3RoKSwnWCcuY2hhckNvZGVBdChhKSkpO2lmKGM9PTApdGhyb3cgdmJiKG5ldyBtZGUoJ1Vua25vd24gT3B0aW9uOiAnKydYJy5zdWJzdHIoYSkpKTtifD1jfXJldHVybiBifVxuZnVuY3Rpb24gbVpiKGEsYixjKXt2YXIgZCxlLGY7ZD1RX2IoYik7ZT1hX2IoZCk7Zj1uZXcgSDBiO0YwYihmLGIpO3N3aXRjaChjLmcpe2Nhc2UgMTpHMGIoZixXY2QoWmNkKGUpKSk7YnJlYWs7Y2FzZSAyOkcwYihmLFpjZChlKSk7fXlOYihmLChOeWMoKSxVeGMpLEVEKHZOYihhLFV4YykpKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIFU5YihhKXt2YXIgYixjO2I9QkQoUnIobmV3IFNyKHVyKFJfYihhLmEpLmEuS2MoKSxuZXcgU3EpKSksMTcpO2M9QkQoUnIobmV3IFNyKHVyKFVfYihhLmEpLmEuS2MoKSxuZXcgU3EpKSksMTcpO3JldHVybiBDY2IoREQodk5iKGIsKHd0YygpLGx0YykpKSl8fENjYihERCh2TmIoYyxsdGMpKSl9XG5mdW5jdGlvbiBYamMoKXtYamM9Y2NiO1RqYz1uZXcgWWpjKCdPTkVfU0lERScsMCk7VmpjPW5ldyBZamMoJ1RXT19TSURFU19DT1JORVInLDEpO1dqYz1uZXcgWWpjKCdUV09fU0lERVNfT1BQT1NJTkcnLDIpO1VqYz1uZXcgWWpjKCdUSFJFRV9TSURFUycsMyk7U2pjPW5ldyBZamMoJ0ZPVVJfU0lERVMnLDQpfVxuZnVuY3Rpb24gamtjKGEsYixjLGQsZSl7dmFyIGYsZztmPUJEKEdBYihKQWIoYi5PYygpLG5ldyBfa2MpLEJ5YihuZXcgZnpiLG5ldyBkemIsbmV3IEV6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsWyhGeWIoKSxEeWIpXSkpKSwxNSk7Zz1CRChTaShhLmIsYyxkKSwxNSk7ZT09MD9nLldjKDAsZik6Zy5HYyhmKX1cbmZ1bmN0aW9uIEtEYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGY9bmV3IG9sYihiLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7Zm9yKGQ9bmV3IFNyKHVyKFJfYihlKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDE3KTtnPWMuYy5pLnA7YS5uW2ddPWEubltnXS0xfX19XG5mdW5jdGlvbiBjbmMoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihmPW5ldyBvbGIoYi5kKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTAxKTtnPUJEKE9oYihhLmMsZSksMTEyKS5vO2ZvcihkPW5ldyBHcWIoZS5iKTtkLmE8ZC5jLmEubGVuZ3RoOyl7Yz1CRChGcWIoZCksNjEpO29qYyhlLGMsZyl9fX1cbmZ1bmN0aW9uIEhKYyhhKXt2YXIgYixjO2ZvcihjPW5ldyBvbGIoYS5lLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyOSk7WUpjKGEsYil9TUFiKEpBYihMQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZS5iLDE2KSksbmV3IFlLYyksbmV3IHRMYyksbmV3IHZMYyksbmV3IHhMYyhhKSl9XG5mdW5jdGlvbiBRd2QoYSxiKXtpZighYil7cmV0dXJuIGZhbHNlfWVsc2V7aWYoYS5EaShiKSl7cmV0dXJuIGZhbHNlfWlmKCFhLmkpe2lmKEpEKGIsMTQzKSl7YS5pPUJEKGIsMTQzKTtyZXR1cm4gdHJ1ZX1lbHNle2EuaT1uZXcgSHhkO3JldHVybiBhLmkuRWkoYil9fWVsc2V7cmV0dXJuIGEuaS5FaShiKX19fVxuZnVuY3Rpb24gQjlkKGEpe2E9UWdlKGEsdHJ1ZSk7aWYoZGZiKGtzZSxhKXx8ZGZiKCcxJyxhKSl7cmV0dXJuIEJjYigpLEFjYn1lbHNlIGlmKGRmYihsc2UsYSl8fGRmYignMCcsYSkpe3JldHVybiBCY2IoKSx6Y2J9dGhyb3cgdmJiKG5ldyBuOGQoXCJJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICdcIithK1wiJ1wiKSl9XG5mdW5jdGlvbiBLZChhLGIsYyl7dmFyIGQsZSxmO2ZvcihlPWEudmMoKS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDQyKTtmPWQuY2QoKTtpZihQRChiKT09PVBEKGYpfHxiIT1udWxsJiZwYihiLGYpKXtpZihjKXtkPW5ldyBwamIoZC5jZCgpLGQuZGQoKSk7ZS5RYigpfXJldHVybiBkfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRLYihhKXskSmIoKTt2YXIgYixjLGQ7aWYoIWEuQi5IYygoSWRkKCksQWRkKSkpe3JldHVybn1kPWEuZi5pO2I9bmV3IEs2YyhhLmEuYyk7Yz1uZXcgcDBiO2MuYj1iLmMtZC5jO2MuZD1iLmQtZC5kO2MuYz1kLmMrZC5iLShiLmMrYi5iKTtjLmE9ZC5kK2QuYS0oYi5kK2IuYSk7YS5lLkZmKGMpfVxuZnVuY3Rpb24gTE5iKGEsYixjLGQpe3ZhciBlLGYsZztnPSR3bmQuTWF0aC5taW4oYyxPTmIoQkQoYS5iLDY1KSxiLGMsZCkpO2ZvcihmPW5ldyBvbGIoYS5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMjIxKTtlIT1iJiYoZz0kd25kLk1hdGgubWluKGcsTE5iKGUsYixnLGQpKSl9cmV0dXJuIGd9XG5mdW5jdGlvbiBXWmIoYSl7dmFyIGIsYyxkLGU7ZT1LQyhPUSxuaWUsMTkzLGEuYi5jLmxlbmd0aCwwLDIpO2Q9bmV3IEJpYihhLmIsMCk7d2hpbGUoZC5iPGQuZC5nYygpKXtiPShzQ2IoZC5iPGQuZC5nYygpKSxCRChkLmQuWGIoZC5jPWQuYisrKSwyOSkpO2M9ZC5iLTE7ZVtjXT1sX2IoYi5hKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIEszYihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2c9ZUxiKGRMYihpTGIoSDNiKGMpKSxkKSxDM2IoYSxjLGUpKTtmb3IoaT1ZX2IoYSxjKS5LYygpO2kuT2IoKTspe2g9QkQoaS5QYigpLDExKTtpZihiW2gucF0pe2Y9YltoLnBdLmk7RWtiKGcuZCxuZXcgQkxiKGYsYkxiKGcsZikpKX19Y0xiKGcpfVxuZnVuY3Rpb24gc2ljKGEsYil7dGhpcy5mPW5ldyBMcWI7dGhpcy5iPW5ldyBMcWI7dGhpcy5qPW5ldyBMcWI7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5jPjAmJnJpYyh0aGlzLHRoaXMuYy0xLChVY2QoKSx6Y2QpKTt0aGlzLmM8dGhpcy5hLmxlbmd0aC0xJiZyaWModGhpcyx0aGlzLmMrMSwoVWNkKCksVGNkKSl9XG5mdW5jdGlvbiBTRWMoYSl7YS5sZW5ndGg+MCYmYVswXS5sZW5ndGg+MCYmKHRoaXMuYz1DY2IoREQodk5iKFFfYihhWzBdWzBdKSwod3RjKCksUnNjKSkpKSk7dGhpcy5hPUtDKENYLG5pZSwyMDE4LGEubGVuZ3RoLDAsMik7dGhpcy5iPUtDKEZYLG5pZSwyMDE5LGEubGVuZ3RoLDAsMik7dGhpcy5kPW5ldyBzc31cbmZ1bmN0aW9uIHRLYyhhKXtpZihhLmMubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9aWYoKHRDYigwLGEuYy5sZW5ndGgpLEJEKGEuY1swXSwxNykpLmMuaS5rPT0oajBiKCksZzBiKSl7cmV0dXJuIHRydWV9cmV0dXJuIEZBYihOQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYSwxNikpLG5ldyB3S2MpLG5ldyB5S2MpfVxuZnVuY3Rpb24gclJjKGEsYixjKXtPZGQoYywnVHJlZSBsYXlvdXQnLDEpO0gyYyhhLmIpO0syYyhhLmIsKHlSYygpLHVSYyksdVJjKTtLMmMoYS5iLHZSYyx2UmMpO0syYyhhLmIsd1JjLHdSYyk7SzJjKGEuYix4UmMseFJjKTthLmE9RjJjKGEuYixiKTtzUmMoYSxiLFVkZChjLDEpKTtRZGQoYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBIWGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtoPWdWYyhiKTtmPWIuZjtpPWIuZztnPSR3bmQuTWF0aC5zcXJ0KGYqZitpKmkpO2U9MDtmb3IoZD1uZXcgb2xiKGgpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwzMyk7ZSs9SFhjKGEsYyl9cmV0dXJuICR3bmQuTWF0aC5tYXgoZSxnKX1cbmZ1bmN0aW9uIGRjZCgpe2RjZD1jY2I7Y2NkPW5ldyBnY2Qob2xlLDApO2JjZD1uZXcgZ2NkKCdGUkVFJywxKTthY2Q9bmV3IGdjZCgnRklYRURfU0lERScsMik7WmJkPW5ldyBnY2QoJ0ZJWEVEX09SREVSJywzKTtfYmQ9bmV3IGdjZCgnRklYRURfUkFUSU8nLDQpOyRiZD1uZXcgZ2NkKCdGSVhFRF9QT1MnLDUpfVxuZnVuY3Rpb24gYzFkKGEsYil7dmFyIGMsZCxlO2M9Yi5IaChhLmEpO2lmKGMpe2U9R0QoQUFkKCghYy5iJiYoYy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYykpLGMuYiksQ3dlKSk7Zm9yKGQ9MTtkPChPNmQoKSxONmQpLmxlbmd0aDsrK2Qpe2lmKGRmYihONmRbZF0sZSkpe3JldHVybiBkfX19cmV0dXJuIDB9XG5mdW5jdGlvbiBRbGIoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXtyZXR1cm4gWGhlfWY9bmV3IHh3YihTaGUsJ1snLCddJyk7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07dXdiKGYsJycrYil9cmV0dXJuICFmLmE/Zi5jOmYuZS5sZW5ndGg9PTA/Zi5hLmE6Zi5hLmErKCcnK2YuZSl9XG5mdW5jdGlvbiBXbGIoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXtyZXR1cm4gWGhlfWY9bmV3IHh3YihTaGUsJ1snLCddJyk7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07dXdiKGYsJycrYil9cmV0dXJuICFmLmE/Zi5jOmYuZS5sZW5ndGg9PTA/Zi5hLmE6Zi5hLmErKCcnK2YuZSl9XG5mdW5jdGlvbiBNZChhKXt2YXIgYixjLGQ7ZD1uZXcgeHdiKFNoZSwneycsJ30nKTtmb3IoYz1hLnZjKCkuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSw0Mik7dXdiKGQsTmQoYSxiLmNkKCkpKyc9JytOZChhLGIuZGQoKSkpfXJldHVybiAhZC5hP2QuYzpkLmUubGVuZ3RoPT0wP2QuYS5hOmQuYS5hKygnJytkLmUpfVxuZnVuY3Rpb24gRUdiKGEpe3ZhciBiLGMsZCxlO3doaWxlKCFha2IoYS5vKSl7Yz1CRChma2IoYS5vKSw0Nik7ZD1CRChjLmEsMTIxKTtiPUJEKGMuYiwyMTMpO2U9eEZiKGIsZCk7aWYoYi5lPT1kKXtORmIoZS5nLGIpO2QuZT1lLmUrYi5hfWVsc2V7TkZiKGUuYixiKTtkLmU9ZS5lLWIuYX1Fa2IoYS5lLmEsZCl9fVxuZnVuY3Rpb24gRjZiKGEsYil7dmFyIGMsZCxlO2M9bnVsbDtmb3IoZT1CRChiLktiKGEpLDIwKS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDE3KTtpZighYyl7Yz1kLmMuaT09YT9kLmQuaTpkLmMuaX1lbHNle2lmKChkLmMuaT09YT9kLmQuaTpkLmMuaSkhPWMpe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfVxuZnVuY3Rpb24gdVBjKGEsYil7dmFyIGMsZCxlLGYsZztjPVdOYyhhLGZhbHNlLGIpO2ZvcihlPW5ldyBvbGIoYyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEyOSk7ZC5kPT0wPyhCT2MoZCxudWxsKSxDT2MoZCxudWxsKSk6KGY9ZC5hLGc9ZC5iLEJPYyhkLGcpLENPYyhkLGYpLHVuZGVmaW5lZCl9fVxuZnVuY3Rpb24gcVFjKGEpe3ZhciBiLGM7Yj1uZXcgajNjO2QzYyhiLGNRYyk7Yz1CRCh2TmIoYSwod3RjKCksS3NjKSksMjEpO2MuSGMoKE9yYygpLE5yYykpJiZkM2MoYixnUWMpO2MuSGMoRXJjKSYmZDNjKGIsZFFjKTtjLkhjKExyYykmJmQzYyhiLGZRYyk7Yy5IYyhHcmMpJiZkM2MoYixlUWMpO3JldHVybiBifVxuZnVuY3Rpb24gWGFjKGEpe3ZhciBiLGMsZCxlO1dhYyhhKTtmb3IoYz1uZXcgU3IodXIoT19iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksMTcpO2Q9Yi5jLmk9PWE7ZT1kP2IuZDpiLmM7ZD9SWmIoYixudWxsKTpRWmIoYixudWxsKTt5TmIoYiwod3RjKCksY3RjKSxlKTtfYWMoYSxlLmkpfX1cbmZ1bmN0aW9uIHdtYyhhLGIsYyxkKXt2YXIgZSxmO2Y9Yi5pO2U9Y1tmLmddW2EuZFtmLmddXTtzd2l0Y2goZi5nKXtjYXNlIDE6ZS09ZCtiLmouYjtiLmcuYj1lO2JyZWFrO2Nhc2UgMzplKz1kO2IuZy5iPWU7YnJlYWs7Y2FzZSA0OmUtPWQrYi5qLmE7Yi5nLmE9ZTticmVhaztjYXNlIDI6ZSs9ZDtiLmcuYT1lO319XG5mdW5jdGlvbiBhVmMoYSl7dmFyIGIsYyxkO2ZvcihjPW5ldyBGeWQoKCFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSksYS5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDMzKTtkPSRzZChiKTtpZighUXIobmV3IFNyKHVyKGQuYS5LYygpLG5ldyBTcSkpKSl7cmV0dXJuIGJ9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gQ29kKCl7dmFyIGE7aWYoeW9kKXJldHVybiBCRChuVWQoKHlGZCgpLHhGZCkseXRlKSwyMDE2KTthPUJEKEpEKFBoYigoeUZkKCkseEZkKSx5dGUpLDU1NSk/UGhiKHhGZCx5dGUpOm5ldyBCb2QsNTU1KTt5b2Q9dHJ1ZTt6b2QoYSk7QW9kKGEpO1RuZChhKTtTaGIoeEZkLHl0ZSxhKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHQzZChhLGIsYyl7dmFyIGQsZTtpZihhLmo9PTApcmV0dXJuIGM7ZT1CRChMTGQoYSxiLGMpLDcyKTtkPWMuYWsoKTtpZighZC5JaigpfHwhYS5hLnJsKGQpKXt0aHJvdyB2YmIobmV3IGh6KFwiSW52YWxpZCBlbnRyeSBmZWF0dXJlICdcIitkLkhqKCkuemIrJy4nK2QubmUoKStcIidcIikpfXJldHVybiBlfVxuZnVuY3Rpb24gUWkoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihoPWEuYSxpPTAsaj1oLmxlbmd0aDtpPGo7KytpKXtnPWhbaV07Zm9yKGQ9ZyxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07aWYoUEQoYik9PT1QRChjKXx8YiE9bnVsbCYmcGIoYixjKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBxaGIoYSl7dmFyIGIsYyxkO2lmKHliYihhLDApPj0wKXtjPUFiYihhLEpqZSk7ZD1IYmIoYSxKamUpfWVsc2V7Yj1QYmIoYSwxKTtjPUFiYihiLDUwMDAwMDAwMCk7ZD1IYmIoYiw1MDAwMDAwMDApO2Q9d2JiKE5iYihkLDEpLHhiYihhLDEpKX1yZXR1cm4gTWJiKE5iYihkLDMyKSx4YmIoYyxZamUpKX1cbmZ1bmN0aW9uIG9RYihhLGIsYyl7dmFyIGQsZTtkPShzQ2IoYi5iIT0wKSxCRChOc2IoYixiLmEuYSksOCkpO3N3aXRjaChjLmcpe2Nhc2UgMDpkLmI9MDticmVhaztjYXNlIDI6ZC5iPWEuZjticmVhaztjYXNlIDM6ZC5hPTA7YnJlYWs7ZGVmYXVsdDpkLmE9YS5nO31lPUpzYihiLDApO1ZzYihlLGQpO3JldHVybiBifVxuZnVuY3Rpb24gcG1jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aT1hLmI7Zj1iLmQ7Zz1mLmo7aD11bWMoZyxpLmRbZy5nXSxjKTtlPVA2YyhSNmMoZi5uKSxmLmEpO3N3aXRjaChmLmouZyl7Y2FzZSAxOmNhc2UgMzpoLmErPWUuYTticmVhaztjYXNlIDI6Y2FzZSA0OmguYis9ZS5iO31Hc2IoZCxoLGQuYy5iLGQuYyl9XG5mdW5jdGlvbiB5SmMoYSxiLGMpe3ZhciBkLGUsZixnO2c9SmtiKGEuZSxiLDApO2Y9bmV3IHpKYztmLmI9YztkPW5ldyBCaWIoYS5lLGcpO3doaWxlKGQuYjxkLmQuZ2MoKSl7ZT0oc0NiKGQuYjxkLmQuZ2MoKSksQkQoZC5kLlhiKGQuYz1kLmIrKyksMTApKTtlLnA9YztFa2IoZi5lLGUpO3VpYihkKX1yZXR1cm4gZn1cbmZ1bmN0aW9uIHNZYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2U9bnVsbDtmPTA7Zm9yKGg9bmV3IG9sYihiKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMzMpO2k9Zy5pK2cuZztpZihhPGcuaitnLmYrZCl7IWU/KGU9Zyk6Yy5pLWk8Yy5pLWYmJihlPWcpO2Y9ZS5pK2UuZ319cmV0dXJuICFlPzA6ZitkfVxuZnVuY3Rpb24gdFljKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7Zj1udWxsO2U9MDtmb3IoaD1uZXcgb2xiKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwzMyk7aT1nLmorZy5mO2lmKGE8Zy5pK2cuZytkKXshZj8oZj1nKTpjLmotaTxjLmotZSYmKGY9Zyk7ZT1mLmorZi5mfX1yZXR1cm4gIWY/MDplK2R9XG5mdW5jdGlvbiBtQShhKXt2YXIgYixjLGQ7Yj1mYWxzZTtkPWEuYi5jLmxlbmd0aDtmb3IoYz0wO2M8ZDtjKyspe2lmKG5BKEJEKElrYihhLmIsYyksNDM0KSkpe2lmKCFiJiZjKzE8ZCYmbkEoQkQoSWtiKGEuYixjKzEpLDQzNCkpKXtiPXRydWU7QkQoSWtiKGEuYixjKSw0MzQpLmE9dHJ1ZX19ZWxzZXtiPWZhbHNlfX19XG5mdW5jdGlvbiBBaGIoYSxiLGMsZCxlKXt2YXIgZixnO2Y9MDtmb3IoZz0wO2c8ZTtnKyspe2Y9d2JiKGYsUWJiKHhiYihiW2ddLFlqZSkseGJiKGRbZ10sWWplKSkpO2FbZ109VGJiKGYpO2Y9T2JiKGYsMzIpfWZvcig7ZzxjO2crKyl7Zj13YmIoZix4YmIoYltnXSxZamUpKTthW2ddPVRiYihmKTtmPU9iYihmLDMyKX19XG5mdW5jdGlvbiBKaGIoYSxiKXtEaGIoKTt2YXIgYyxkO2Q9KEhnYigpLENnYik7Yz1hO2Zvcig7Yj4xO2I+Pj0xKXsoYiYxKSE9MCYmKGQ9T2diKGQsYykpO2MuZD09MT8oYz1PZ2IoYyxjKSk6KGM9bmV3IFhnYihMaGIoYy5hLGMuZCxLQyhXRCxvamUsMjUsYy5kPDwxLDE1LDEpKSkpfWQ9T2diKGQsYyk7cmV0dXJuIGR9XG5mdW5jdGlvbiB6dWIoKXt6dWI9Y2NiO3ZhciBhLGIsYyxkO3d1Yj1LQyhVRCxWamUsMjUsMjUsMTUsMSk7eHViPUtDKFVELFZqZSwyNSwzMywxNSwxKTtkPTEuNTI1ODc4OTA2MjVFLTU7Zm9yKGI9MzI7Yj49MDtiLS0pe3h1YltiXT1kO2QqPTAuNX1jPTE7Zm9yKGE9MjQ7YT49MDthLS0pe3d1YlthXT1jO2MqPTAuNX19XG5mdW5jdGlvbiBTMWIoYSl7dmFyIGIsYztpZihDY2IoREQoaGtkKGEsKE55YygpLGZ4YykpKSkpe2ZvcihjPW5ldyBTcih1cihfc2QoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGMpOyl7Yj1CRChScihjKSw3OSk7aWYoUWxkKGIpKXtpZihDY2IoREQoaGtkKGIsZ3hjKSkpKXtyZXR1cm4gdHJ1ZX19fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBramMoYSxiKXt2YXIgYyxkLGU7aWYoUXFiKGEuZixiKSl7Yi5iPWE7ZD1iLmM7SmtiKGEuaixkLDApIT0tMXx8RWtiKGEuaixkKTtlPWIuZDtKa2IoYS5qLGUsMCkhPS0xfHxFa2IoYS5qLGUpO2M9Yi5hLmI7aWYoYy5jLmxlbmd0aCE9MCl7IWEuaSYmKGEuaT1uZXcgdmpjKGEpKTtxamMoYS5pLGMpfX19XG5mdW5jdGlvbiBybWMoYSl7dmFyIGIsYyxkLGUsZjtjPWEuYy5kO2Q9Yy5qO2U9YS5kLmQ7Zj1lLmo7aWYoZD09Zil7cmV0dXJuIGMucDxlLnA/MDoxfWVsc2UgaWYoWGNkKGQpPT1mKXtyZXR1cm4gMH1lbHNlIGlmKFZjZChkKT09Zil7cmV0dXJuIDF9ZWxzZXtiPWEuYjtyZXR1cm4gdXFiKGIuYixYY2QoZCkpPzA6MX19XG5mdW5jdGlvbiBsemMoKXtsemM9Y2NiO2p6Yz1uZXcgbnpjKEFxZSwwKTtoemM9bmV3IG56YygnTE9OR0VTVF9QQVRIJywxKTtmemM9bmV3IG56YygnQ09GRk1BTl9HUkFIQU0nLDIpO2d6Yz1uZXcgbnpjKFRuZSwzKTtremM9bmV3IG56YygnU1RSRVRDSF9XSURUSCcsNCk7aXpjPW5ldyBuemMoJ01JTl9XSURUSCcsNSl9XG5mdW5jdGlvbiBFM2MoYSl7dmFyIGI7dGhpcy5kPW5ldyBMcWI7dGhpcy5jPWEuYzt0aGlzLmU9YS5kO3RoaXMuYj1hLmI7dGhpcy5mPW5ldyBqZ2QoYS5lKTt0aGlzLmE9YS5hOyFhLmY/KHRoaXMuZz0oYj1CRChnZGIoTzMpLDkpLG5ldyB4cWIoYixCRChfQmIoYixiLmxlbmd0aCksOSksMCkpKToodGhpcy5nPWEuZil9XG5mdW5jdGlvbiBncmQoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZT1hO2c9JHBkKGUsJ2xheW91dE9wdGlvbnMnKTshZyYmKGc9JHBkKGUsRHRlKSk7aWYoZyl7aD1nO2Q9bnVsbDshIWgmJihkPShmPSRCKGgsS0MoWkksbmllLDIsMCw2LDEpKSxuZXcgbUMoaCxmKSkpO2lmKGQpe2M9bmV3IERyZChoLGIpO3JlYihkLGMpfX19XG5mdW5jdGlvbiBhdGQoYSl7aWYoSkQoYSwyMzkpKXtyZXR1cm4gQkQoYSwzMyl9ZWxzZSBpZihKRChhLDE4Nikpe3JldHVybiBtcGQoQkQoYSwxMTgpKX1lbHNlIGlmKCFhKXt0aHJvdyB2YmIobmV3IEhlYihndWUpKX1lbHNle3Rocm93IHZiYihuZXcgY2diKCdPbmx5IHN1cHBvcnQgbm9kZXMgYW5kIHBvcnRzLicpKX19XG5mdW5jdGlvbiBDQShhLGIsYyxkKXtpZihiPj0wJiZkZmIoYS5zdWJzdHIoYiwnR01UJy5sZW5ndGgpLCdHTVQnKSl7Y1swXT1iKzM7cmV0dXJuIHRBKGEsYyxkKX1pZihiPj0wJiZkZmIoYS5zdWJzdHIoYiwnVVRDJy5sZW5ndGgpLCdVVEMnKSl7Y1swXT1iKzM7cmV0dXJuIHRBKGEsYyxkKX1yZXR1cm4gdEEoYSxjLGQpfVxuZnVuY3Rpb24gdGpjKGEsYil7dmFyIGMsZCxlLGYsZztmPWEuZy5hO2c9YS5nLmI7Zm9yKGQ9bmV3IG9sYihhLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw3MCk7ZT1jLm47ZS5hPWY7YS5pPT0oVWNkKCksQWNkKT8oZS5iPWcrYS5qLmItYy5vLmIpOihlLmI9Zyk7UDZjKGUsYik7Zis9Yy5vLmErYS5lfX1cbmZ1bmN0aW9uIE9kZChhLGIsYyl7aWYoYS5iKXt0aHJvdyB2YmIobmV3IFpkYignVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLicpKX1lbHNlIGlmKGEucCE9bnVsbCl7cmV0dXJuIGZhbHNlfWVsc2V7YS5wPWI7YS5yPWM7YS5rJiYoYS5vPShaZmIoKSxJYmIoQ2JiKERhdGUubm93KCkpLF9pZSkpKTtyZXR1cm4gdHJ1ZX19XG5mdW5jdGlvbiBoc2QoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1uZXcgZUM7Yz1hLnRnKCk7ZT1jIT1udWxsO2UmJlVwZChoLFZ0ZSxhLnRnKCkpO2Q9YS5uZSgpO2Y9ZCE9bnVsbDtmJiZVcGQoaCxmdWUsYS5uZSgpKTtiPWEuc2coKTtnPWIhPW51bGw7ZyYmVXBkKGgsJ2Rlc2NyaXB0aW9uJyxhLnNnKCkpO3JldHVybiBofVxuZnVuY3Rpb24gdUlkKGEsYixjKXt2YXIgZCxlLGY7Zj1hLnE7YS5xPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtlPW5ldyBuU2QoYSwxLDksZixiKTshYz8oYz1lKTpjLkVpKGUpfWlmKCFiKXshIWEuciYmKGM9YS5uayhudWxsLGMpKX1lbHNle2Q9Yi5jO2QhPWEuciYmKGM9YS5uayhkLGMpKX1yZXR1cm4gY31cbmZ1bmN0aW9uIElZZChhLGIsYyl7dmFyIGQsZSxmLGcsaDtjPShoPWIsa2lkKGgsYS5lLC0xLWEuYyxjKSk7Zz1BWWQoYS5hKTtmb3IoZj0oZD1uZXcgbmliKChuZXcgZWliKGcuYSkpLmEpLG5ldyBaWWQoZCkpO2YuYS5iOyl7ZT1CRChsaWIoZi5hKS5jZCgpLDg3KTtjPVFRZChlLE1RZChlLGEuYSksYyl9cmV0dXJuIGN9XG5mdW5jdGlvbiBKWWQoYSxiLGMpe3ZhciBkLGUsZixnLGg7Yz0oaD1iLGxpZChoLGEuZSwtMS1hLmMsYykpO2c9QVlkKGEuYSk7Zm9yKGY9KGQ9bmV3IG5pYigobmV3IGVpYihnLmEpKS5hKSxuZXcgWllkKGQpKTtmLmEuYjspe2U9QkQobGliKGYuYSkuY2QoKSw4Nyk7Yz1RUWQoZSxNUWQoZSxhLmEpLGMpfXJldHVybiBjfVxuZnVuY3Rpb24gamhiKGEsYixjLGQpe3ZhciBlLGYsZztpZihkPT0wKXskZmIoYiwwLGEsYyxhLmxlbmd0aC1jKX1lbHNle2c9MzItZDthW2EubGVuZ3RoLTFdPTA7Zm9yKGY9YS5sZW5ndGgtMTtmPmM7Zi0tKXthW2ZdfD1iW2YtYy0xXT4+Pmc7YVtmLTFdPWJbZi1jLTFdPDxkfX1mb3IoZT0wO2U8YztlKyspe2FbZV09MH19XG5mdW5jdGlvbiBMSmIoYSl7dmFyIGIsYyxkLGUsZjtiPTA7Yz0wO2ZvcihmPWEuS2MoKTtmLk9iKCk7KXtkPUJEKGYuUGIoKSwxMTEpO2I9JHduZC5NYXRoLm1heChiLGQuZC5iKTtjPSR3bmQuTWF0aC5tYXgoYyxkLmQuYyl9Zm9yKGU9YS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDExMSk7ZC5kLmI9YjtkLmQuYz1jfX1cbmZ1bmN0aW9uIFRLYihhKXt2YXIgYixjLGQsZSxmO2M9MDtiPTA7Zm9yKGY9YS5LYygpO2YuT2IoKTspe2Q9QkQoZi5QYigpLDExMSk7Yz0kd25kLk1hdGgubWF4KGMsZC5kLmQpO2I9JHduZC5NYXRoLm1heChiLGQuZC5hKX1mb3IoZT1hLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTExKTtkLmQuZD1jO2QuZC5hPWJ9fVxuZnVuY3Rpb24gcnBjKGEsYil7dmFyIGMsZCxlLGY7Zj1uZXcgUmtiO2U9MDtkPWIuS2MoKTt3aGlsZShkLk9iKCkpe2M9bWViKEJEKGQuUGIoKSwxOSkuYStlKTt3aGlsZShjLmE8YS5mJiYhVm9jKGEsYy5hKSl7Yz1tZWIoYy5hKzEpOysrZX1pZihjLmE+PWEuZil7YnJlYWt9Zi5jW2YuYy5sZW5ndGhdPWN9cmV0dXJuIGZ9XG5mdW5jdGlvbiBzZmQoYSl7dmFyIGIsYyxkLGU7Yj1udWxsO2ZvcihlPW5ldyBvbGIoYS53ZigpKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTgxKTtjPW5ldyBKNmMoZC5xZigpLmEsZC5xZigpLmIsZC5yZigpLmEsZC5yZigpLmIpOyFiPyhiPWMpOkg2YyhiLGMpfSFiJiYoYj1uZXcgSTZjKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEZrZChhLGIsYyxkKXt2YXIgZSxmO2lmKGM9PTEpe3JldHVybiAhYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKSxTeGQoYS5uLGIsZCl9cmV0dXJuIGY9QkQoWEtkKChlPUJEKEFqZChhLDE2KSwyNiksIWU/YS56aCgpOmUpLGMpLDY2KSxmLk5qKCkuUWooYSx5amQoYSksYy1hTGQoYS56aCgpKSxiLGQpfVxuZnVuY3Rpb24gaXVkKGEsYixjKXt2YXIgZCxlLGYsZyxoO2Q9Yy5nYygpO2EucWkoYS5pK2QpO2g9YS5pLWI7aD4wJiYkZmIoYS5nLGIsYS5nLGIrZCxoKTtnPWMuS2MoKTthLmkrPWQ7Zm9yKGU9MDtlPGQ7KytlKXtmPWcuUGIoKTttdWQoYSxiLGEub2koYixmKSk7YS5iaShiLGYpO2EuY2koKTsrK2J9cmV0dXJuIGQhPTB9XG5mdW5jdGlvbiB4SWQoYSxiLGMpe3ZhciBkO2lmKGIhPWEucSl7ISFhLnEmJihjPWxpZChhLnEsYSwtMTAsYykpOyEhYiYmKGM9a2lkKGIsYSwtMTAsYykpO2M9dUlkKGEsYixjKX1lbHNlIGlmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgblNkKGEsMSw5LGIsYik7IWM/KGM9ZCk6Yy5FaShkKX1yZXR1cm4gY31cbmZ1bmN0aW9uIFlqKGEsYixjLGQpe01iKChjJm9pZSk9PTAsJ2ZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTVUJTSVpFRCBjaGFyYWN0ZXJpc3RpYycpO01iKChjJjQpPT0wLCdmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU09SVEVEIGNoYXJhY3RlcmlzdGljJyk7UWIoYSk7UWIoYik7cmV0dXJuIG5ldyBqayhhLGMsZCxiKX1cbmZ1bmN0aW9uIFF5KGEsYil7dkNiKGIsJ0Nhbm5vdCBzdXBwcmVzcyBhIG51bGwgZXhjZXB0aW9uLicpO21DYihiIT1hLCdFeGNlcHRpb24gY2FuIG5vdCBzdXBwcmVzcyBpdHNlbGYuJyk7aWYoYS5pKXtyZXR1cm59YS5rPT1udWxsPyhhLms9T0MoR0MoX0ksMSksbmllLDc4LDAsW2JdKSk6KGEua1thLmsubGVuZ3RoXT1iKX1cbmZ1bmN0aW9uIG9BKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtnPWMubGVuZ3RoO2Y9MDtlPS0xO2o9c2ZiKGEuc3Vic3RyKGIpLChudGIoKSxsdGIpKTtmb3IoaD0wO2g8ZzsrK2gpe2k9Y1toXS5sZW5ndGg7aWYoaT5mJiZuZmIoaixzZmIoY1toXSxsdGIpKSl7ZT1oO2Y9aX19ZT49MCYmKGRbMF09YitmKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIE1JYihhLGIpe3ZhciBjO2M9TkliKGEuYi5IZigpLGIuYi5IZigpKTtpZihjIT0wKXtyZXR1cm4gY31zd2l0Y2goYS5iLkhmKCkuZyl7Y2FzZSAxOmNhc2UgMjpyZXR1cm4gYmViKGEuYi5zZigpLGIuYi5zZigpKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBiZWIoYi5iLnNmKCksYS5iLnNmKCkpO31yZXR1cm4gMH1cbmZ1bmN0aW9uIGlSYihhKXt2YXIgYixjLGQ7ZD1hLmUuYy5sZW5ndGg7YS5hPUlDKFdELFtuaWUsb2plXSxbNDgsMjVdLDE1LFtkLGRdLDIpO2ZvcihjPW5ldyBvbGIoYS5jKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMjgyKTthLmFbYi5jLmJdW2IuZC5iXSs9QkQodk5iKGIsKHdTYigpLG9TYikpLDE5KS5hfX1cbmZ1bmN0aW9uIEgxYyhhLGIsYyl7T2RkKGMsJ0dyb3cgVHJlZScsMSk7YS5iPWIuZjtpZihDY2IoREQodk5iKGIsKFhOYigpLFZOYikpKSkpe2EuYz1uZXcgdE9iO0QxYyhhLG51bGwpfWVsc2V7YS5jPW5ldyB0T2J9YS5hPWZhbHNlO0YxYyhhLGIuZik7eU5iKGIsV05iLChCY2IoKSxhLmE/dHJ1ZTpmYWxzZSkpO1FkZChjKX1cbmZ1bmN0aW9uIFVtZChhLGIpe3ZhciBjLGQsZSxmLGc7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9ZWxzZXtnPUtDKFRELCRpZSwyNSwyKmIsMTUsMSk7Zm9yKGQ9MCxlPTA7ZDxiOysrZCl7Yz1hW2RdPj40JjE1O2Y9YVtkXSYxNTtnW2UrK109UW1kW2NdO2dbZSsrXT1RbWRbZl19cmV0dXJuIHpmYihnLDAsZy5sZW5ndGgpfX1cbmZ1bmN0aW9uIGozZChhLGIsYyl7dmFyIGQsZSxmO2Q9Yi5haygpO2Y9Yi5kZCgpO2U9ZC4kaigpP0gyZChhLDQsZCxmLG51bGwsTTJkKGEsZCxmLEpEKGQsOTkpJiYoQkQoZCwxOCkuQmImVGplKSE9MCksdHJ1ZSk6SDJkKGEsZC5LaigpPzI6MSxkLGYsZC56aigpLC0xLHRydWUpO2M/Yy5FaShlKTooYz1lKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHdmYihhKXt2YXIgYixjO2lmKGE+PVRqZSl7Yj1VamUrKGEtVGplPj4xMCYxMDIzKSZhamU7Yz01NjMyMCsoYS1UamUmMTAyMykmYWplO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpKygnJytTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKX1lbHNle3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEmYWplKX19XG5mdW5jdGlvbiBiS2IoYSxiKXskSmIoKTt2YXIgYyxkLGUsZjtlPUJEKEJEKFFjKGEucixiKSwyMSksODQpO2lmKGUuZ2MoKT49Mil7ZD1CRChlLktjKCkuUGIoKSwxMTEpO2M9YS51LkhjKChyY2QoKSxtY2QpKTtmPWEudS5IYyhxY2QpO3JldHVybiAhZC5hJiYhYyYmKGUuZ2MoKT09Mnx8Zil9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gSVZjKGEsYixjLGQsZSl7dmFyIGYsZyxoO2Y9SlZjKGEsYixjLGQsZSk7aD1mYWxzZTt3aGlsZSghZil7QVZjKGEsZSx0cnVlKTtoPXRydWU7Zj1KVmMoYSxiLGMsZCxlKX1oJiZBVmMoYSxlLGZhbHNlKTtnPWRWYyhlKTtpZihnLmMubGVuZ3RoIT0wKXshIWEuZCYmYS5kLmxnKGcpO0lWYyhhLGUsYyxkLGcpfX1cbmZ1bmN0aW9uIE1hZCgpe01hZD1jY2I7S2FkPW5ldyBOYWQoYW5lLDApO0lhZD1uZXcgTmFkKCdESVJFQ1RFRCcsMSk7TGFkPW5ldyBOYWQoJ1VORElSRUNURUQnLDIpO0dhZD1uZXcgTmFkKCdBU1NPQ0lBVElPTicsMyk7SmFkPW5ldyBOYWQoJ0dFTkVSQUxJWkFUSU9OJyw0KTtIYWQ9bmV3IE5hZCgnREVQRU5ERU5DWScsNSl9XG5mdW5jdGlvbiBrZmQoYSxiKXt2YXIgYztpZighbXBkKGEpKXt0aHJvdyB2YmIobmV3IFpkYihTc2UpKX1jPW1wZChhKTtzd2l0Y2goYi5nKXtjYXNlIDE6cmV0dXJuIC0oYS5qK2EuZik7Y2FzZSAyOnJldHVybiBhLmktYy5nO2Nhc2UgMzpyZXR1cm4gYS5qLWMuZjtjYXNlIDQ6cmV0dXJuIC0oYS5pK2EuZyk7fXJldHVybiAwfVxuZnVuY3Rpb24gY3ViKGEsYil7dmFyIGMsZDt1Q2IoYik7ZD1hLmIuYy5sZW5ndGg7RWtiKGEuYixiKTt3aGlsZShkPjApe2M9ZDtkPShkLTEpLzJ8MDtpZihhLmEudWUoSWtiKGEuYixkKSxiKTw9MCl7TmtiKGEuYixjLGIpO3JldHVybiB0cnVlfU5rYihhLmIsYyxJa2IoYS5iLGQpKX1Oa2IoYS5iLGQsYik7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBCSGIoYSxiLGMsZCl7dmFyIGUsZjtlPTA7aWYoIWMpe2ZvcihmPTA7ZjxzSGI7ZisrKXtlPSR3bmQuTWF0aC5tYXgoZSxxSGIoYS5hW2ZdW2IuZ10sZCkpfX1lbHNle2U9cUhiKGEuYVtjLmddW2IuZ10sZCl9Yj09KGdIYigpLGVIYikmJiEhYS5iJiYoZT0kd25kLk1hdGgubWF4KGUsYS5iLmEpKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIGtuYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtlPWEuaTtmPWIuaTtpZighZXx8IWYpe3JldHVybiBmYWxzZX1pZihlLmkhPWYuaXx8ZS5pPT0oVWNkKCksemNkKXx8ZS5pPT0oVWNkKCksVGNkKSl7cmV0dXJuIGZhbHNlfWc9ZS5nLmE7Yz1nK2Uuai5hO2g9Zi5nLmE7ZD1oK2Yuai5hO3JldHVybiBnPD1kJiZjPj1ofVxuZnVuY3Rpb24gVHBkKGEsYixjLGQpe3ZhciBlO2U9ZmFsc2U7aWYoTkQoZCkpe2U9dHJ1ZTtVcGQoYixjLEdEKGQpKX1pZighZSl7aWYoS0QoZCkpe2U9dHJ1ZTtUcGQoYSxiLGMsZCl9fWlmKCFlKXtpZihKRChkLDIzNikpe2U9dHJ1ZTtTcGQoYixjLEJEKGQsMjM2KSl9fWlmKCFlKXt0aHJvdyB2YmIobmV3IHZjYihVdGUpKX19XG5mdW5jdGlvbiBXMGQoYSxiKXt2YXIgYyxkLGU7Yz1iLkhoKGEuYSk7aWYoYyl7ZT1BQWQoKCFjLmImJihjLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4NixjKSksYy5iKSxTdmUpO2lmKGUhPW51bGwpe2ZvcihkPTE7ZDwoTzZkKCksSzZkKS5sZW5ndGg7KytkKXtpZihkZmIoSzZkW2RdLGUpKXtyZXR1cm4gZH19fX1yZXR1cm4gMH1cbmZ1bmN0aW9uIFgwZChhLGIpe3ZhciBjLGQsZTtjPWIuSGgoYS5hKTtpZihjKXtlPUFBZCgoIWMuYiYmKGMuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGMpKSxjLmIpLFN2ZSk7aWYoZSE9bnVsbCl7Zm9yKGQ9MTtkPChPNmQoKSxMNmQpLmxlbmd0aDsrK2Qpe2lmKGRmYihMNmRbZF0sZSkpe3JldHVybiBkfX19fXJldHVybiAwfVxuZnVuY3Rpb24gVmUoYSxiKXt2YXIgYyxkLGUsZjt1Q2IoYik7Zj1hLmEuZ2MoKTtpZihmPGIuZ2MoKSl7Zm9yKGM9YS5hLmVjKCkuS2MoKTtjLk9iKCk7KXtkPWMuUGIoKTtiLkhjKGQpJiZjLlFiKCl9fWVsc2V7Zm9yKGU9Yi5LYygpO2UuT2IoKTspe2Q9ZS5QYigpO2EuYS5CYyhkKSE9bnVsbH19cmV0dXJuIGYhPWEuYS5nYygpfVxuZnVuY3Rpb24gYlliKGEpe3ZhciBiLGM7Yz1SNmMobDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2EuaS5uLGEubixhLmFdKSkpO2I9YS5pLmQ7c3dpdGNoKGEuai5nKXtjYXNlIDE6Yy5iLT1iLmQ7YnJlYWs7Y2FzZSAyOmMuYSs9Yi5jO2JyZWFrO2Nhc2UgMzpjLmIrPWIuYTticmVhaztjYXNlIDQ6Yy5hLT1iLmI7fXJldHVybiBjfVxuZnVuY3Rpb24gUDliKGEpe3ZhciBiO2I9KEk5YigpLEJEKFJyKG5ldyBTcih1cihSX2IoYSkuYS5LYygpLG5ldyBTcSkpKSwxNykuYy5pKTt3aGlsZShiLms9PShqMGIoKSxnMGIpKXt5TmIoYiwod3RjKCksVHNjKSwoQmNiKCksdHJ1ZSkpO2I9QkQoUnIobmV3IFNyKHVyKFJfYihiKS5hLktjKCksbmV3IFNxKSkpLDE3KS5jLml9fVxuZnVuY3Rpb24gYkljKGEsYixjLGQpe3ZhciBlLGYsZyxoO2g9Q0hjKGIsZCk7Zm9yKGc9aC5LYygpO2cuT2IoKTspe2U9QkQoZy5QYigpLDExKTthLmRbZS5wXT1hLmRbZS5wXSthLmNbYy5wXX1oPUNIYyhjLGQpO2ZvcihmPWguS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSwxMSk7YS5kW2UucF09YS5kW2UucF0tYS5jW2IucF19fVxuZnVuY3Rpb24gRWZkKGEsYixjKXt2YXIgZCxlO2ZvcihlPW5ldyBGeWQoKCFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSksYS5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDMzKTtibGQoZCxkLmkrYixkLmorYyl9cmViKCghYS5iJiYoYS5iPW5ldyBjVWQoQjIsYSwxMiwzKSksYS5iKSxuZXcgS2ZkKGIsYykpfVxuZnVuY3Rpb24gTXdiKGEsYixjLGQpe3ZhciBlLGY7Zj1iO2U9Zi5kPT1udWxsfHxhLmEudWUoYy5kLGYuZCk+MD8xOjA7d2hpbGUoZi5hW2VdIT1jKXtmPWYuYVtlXTtlPWEuYS51ZShjLmQsZi5kKT4wPzE6MH1mLmFbZV09ZDtkLmI9Yy5iO2QuYVswXT1jLmFbMF07ZC5hWzFdPWMuYVsxXTtjLmFbMF09bnVsbDtjLmFbMV09bnVsbH1cbmZ1bmN0aW9uIHVjZChhKXtyY2QoKTt2YXIgYixjO2I9cXFiKG5jZCxPQyhHQyhFMSwxKSxLaWUsMjczLDAsW3BjZF0pKTtpZihPeChDeChiLGEpKT4xKXtyZXR1cm4gZmFsc2V9Yz1xcWIobWNkLE9DKEdDKEUxLDEpLEtpZSwyNzMsMCxbbGNkLHFjZF0pKTtpZihPeChDeChjLGEpKT4xKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBmb2QoYSxiKXt2YXIgYztjPVBoYigoeUZkKCkseEZkKSxhKTtKRChjLDQ5OCk/U2hiKHhGZCxhLG5ldyBiVWQodGhpcyxiKSk6U2hiKHhGZCxhLHRoaXMpO2JvZCh0aGlzLGIpO2lmKGI9PShMRmQoKSxLRmQpKXt0aGlzLndiPUJEKHRoaXMsMTkzOSk7QkQoYiwxOTQxKX1lbHNle3RoaXMud2I9KE5GZCgpLE1GZCl9fVxuZnVuY3Rpb24gbFpkKGIpe3ZhciBjLGQsZTtpZihiPT1udWxsKXtyZXR1cm4gbnVsbH1jPW51bGw7Zm9yKGQ9MDtkPFBtZC5sZW5ndGg7KytkKXt0cnl7cmV0dXJuIERRZChQbWRbZF0sYil9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwzMikpe2U9YTtjPWV9ZWxzZSB0aHJvdyB2YmIoYSl9fXRocm93IHZiYihuZXcgckZkKGMpKX1cbmZ1bmN0aW9uIERwYigpe0RwYj1jY2I7QnBiPU9DKEdDKFpJLDEpLG5pZSwyLDYsWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXSk7Q3BiPU9DKEdDKFpJLDEpLG5pZSwyLDYsWydKYW4nLCdGZWInLCdNYXInLCdBcHInLGZqZSwnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ10pfVxuZnVuY3Rpb24geXliKGEpe3ZhciBiLGMsZDtiPWRmYih0eXBlb2YoYiksdWtlKT9udWxsOm5ldyBpQ2I7aWYoIWIpe3JldHVybn0keGIoKTtjPShkPTkwMCxkPj1faWU/J2Vycm9yJzpkPj05MDA/J3dhcm4nOmQ+PTgwMD8naW5mbyc6J2xvZycpO2dDYihjLGEuYSk7ISFhLmImJmhDYihiLGMsYS5iLCdFeGNlcHRpb246ICcsdHJ1ZSl9XG5mdW5jdGlvbiB2TmIoYSxiKXt2YXIgYyxkO2Q9KCFhLnEmJihhLnE9bmV3IExxYiksT2hiKGEucSxiKSk7aWYoZCE9bnVsbCl7cmV0dXJuIGR9Yz1iLndnKCk7SkQoYyw0KSYmKGM9PW51bGw/KCFhLnEmJihhLnE9bmV3IExxYiksVGhiKGEucSxiKSk6KCFhLnEmJihhLnE9bmV3IExxYiksUmhiKGEucSxiLGMpKSxhKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHFVYigpe3FVYj1jY2I7bFViPW5ldyByVWIoJ1AxX0NZQ0xFX0JSRUFLSU5HJywwKTttVWI9bmV3IHJVYignUDJfTEFZRVJJTkcnLDEpO25VYj1uZXcgclViKCdQM19OT0RFX09SREVSSU5HJywyKTtvVWI9bmV3IHJVYignUDRfTk9ERV9QTEFDRU1FTlQnLDMpO3BVYj1uZXcgclViKCdQNV9FREdFX1JPVVRJTkcnLDQpfVxuZnVuY3Rpb24gU1ViKGEsYil7dmFyIGMsZCxlLGYsZztlPWI9PTE/S1ViOkpVYjtmb3IoZD1lLmEuZWMoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDEwMyk7Zm9yKGc9QkQoUWMoYS5mLmMsYyksMjEpLktjKCk7Zy5PYigpOyl7Zj1CRChnLlBiKCksNDYpO0xrYihhLmIuYixmLmIpO0xrYihhLmIuYSxCRChmLmIsODEpLmQpfX19XG5mdW5jdGlvbiBJV2IoYSxiKXtBV2IoKTt2YXIgYztpZihhLmM9PWIuYyl7aWYoYS5iPT1iLmJ8fHBXYihhLmIsYi5iKSl7Yz1tV2IoYS5iKT8xOi0xO2lmKGEuYSYmIWIuYSl7cmV0dXJuIGN9ZWxzZSBpZighYS5hJiZiLmEpe3JldHVybiAtY319cmV0dXJuIGJlYihhLmIuZyxiLmIuZyl9ZWxzZXtyZXR1cm4gS2RiKGEuYyxiLmMpfX1cbmZ1bmN0aW9uIHk2YihhLGIpe3ZhciBjO09kZChiLCdIaWVyYXJjaGljYWwgcG9ydCBwb3NpdGlvbiBwcm9jZXNzaW5nJywxKTtjPWEuYjtjLmMubGVuZ3RoPjAmJng2YigodENiKDAsYy5jLmxlbmd0aCksQkQoYy5jWzBdLDI5KSksYSk7Yy5jLmxlbmd0aD4xJiZ4NmIoQkQoSWtiKGMsYy5jLmxlbmd0aC0xKSwyOSksYSk7UWRkKGIpfVxuZnVuY3Rpb24gUlZjKGEsYil7dmFyIGMsZCxlO2lmKENWYyhhLGIpKXtyZXR1cm4gdHJ1ZX1mb3IoZD1uZXcgb2xiKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwzMyk7ZT1oVmMoYyk7aWYoQlZjKGEsYyxlKSl7cmV0dXJuIHRydWV9aWYoUFZjKGEsYyktYS5nPD1hLmEpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBkMGMoKXtkMGM9Y2NiO2MwYz0oQTBjKCksejBjKTtfX2M9djBjOyRfYz10MGM7WV9jPXAwYztaX2M9cjBjO1hfYz1uZXcgcTBiKDgpO1dfYz1uZXcgT3NkKChZOWMoKSxmOWMpLFhfYyk7YTBjPW5ldyBPc2QoVDljLDgpO2IwYz14MGM7VF9jPWswYztVX2M9bTBjO1ZfYz1uZXcgT3NkKHk4YywoQmNiKCksZmFsc2UpKX1cbmZ1bmN0aW9uIFg3Yygpe1g3Yz1jY2I7VTdjPW5ldyBxMGIoMTUpO1Q3Yz1uZXcgT3NkKChZOWMoKSxmOWMpLFU3Yyk7VzdjPW5ldyBPc2QoVDljLDE1KTtWN2M9bmV3IE9zZChEOWMsbWViKDApKTtPN2M9SThjO1E3Yz1ZOGM7UzdjPWI5YztMN2M9bmV3IE9zZChyOGMscHNlKTtQN2M9TzhjO1I3Yz1fOGM7TTdjPXQ4YztON2M9dzhjfVxuZnVuY3Rpb24ganRkKGEpe2lmKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLmkhPTF8fCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLmkhPTEpe3Rocm93IHZiYihuZXcgV2RiKGl1ZSkpfXJldHVybiBhdGQoQkQocXVkKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLDApLDgyKSl9XG5mdW5jdGlvbiBrdGQoYSl7aWYoKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYikuaSE9MXx8KCFhLmMmJihhLmM9bmV3IHk1ZCh6MixhLDUsOCkpLGEuYykuaSE9MSl7dGhyb3cgdmJiKG5ldyBXZGIoaXVlKSl9cmV0dXJuIGJ0ZChCRChxdWQoKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYiksMCksODIpKX1cbmZ1bmN0aW9uIG10ZChhKXtpZigoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKS5pIT0xfHwoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKS5pIT0xKXt0aHJvdyB2YmIobmV3IFdkYihpdWUpKX1yZXR1cm4gYnRkKEJEKHF1ZCgoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKSwwKSw4MikpfVxuZnVuY3Rpb24gbHRkKGEpe2lmKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLmkhPTF8fCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLmkhPTEpe3Rocm93IHZiYihuZXcgV2RiKGl1ZSkpfXJldHVybiBhdGQoQkQocXVkKCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLDApLDgyKSl9XG5mdW5jdGlvbiBEdmQoYSxiLGMpe3ZhciBkLGUsZjsrK2EuajtlPWEuVmkoKTtpZihiPj1lfHxiPDApdGhyb3cgdmJiKG5ldyBxY2IobHVlK2IrbXVlK2UpKTtpZihjPj1lfHxjPDApdGhyb3cgdmJiKG5ldyBxY2IobnVlK2MrbXVlK2UpKTtiIT1jPyhkPShmPWEuVGkoYyksYS5IaShiLGYpLGYpKTooZD1hLk9pKGMpKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIG02ZChhKXt2YXIgYixjLGQ7ZD1hO2lmKGEpe2I9MDtmb3IoYz1hLlVnKCk7YztjPWMuVWcoKSl7aWYoKytiPldqZSl7cmV0dXJuIG02ZChjKX1kPWM7aWYoYz09YSl7dGhyb3cgdmJiKG5ldyBaZGIoJ1RoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGNvbnRhaW5tZW50IGhpZXJhcmNoeSBvZiAnK2EpKX19fXJldHVybiBkfVxuZnVuY3Rpb24gRmUoYSl7dmFyIGIsYyxkO2Q9bmV3IHh3YihTaGUsJ1snLCddJyk7Zm9yKGM9YS5LYygpO2MuT2IoKTspe2I9Yy5QYigpO3V3YihkLFBEKGIpPT09UEQoYSk/Jyh0aGlzIENvbGxlY3Rpb24pJzpiPT1udWxsP1hoZTpmY2IoYikpfXJldHVybiAhZC5hP2QuYzpkLmUubGVuZ3RoPT0wP2QuYS5hOmQuYS5hKygnJytkLmUpfVxuZnVuY3Rpb24gQ1ZjKGEsYil7dmFyIGMsZDtkPWZhbHNlO2lmKGIuZ2MoKTwyKXtyZXR1cm4gZmFsc2V9Zm9yKGM9MDtjPGIuZ2MoKTtjKyspe2M8Yi5nYygpLTE/KGQ9ZHxCVmMoYSxCRChiLlhiKGMpLDMzKSxCRChiLlhiKGMrMSksMzMpKSk6KGQ9ZHxCVmMoYSxCRChiLlhiKGMpLDMzKSxCRChiLlhiKDApLDMzKSkpfXJldHVybiBkfVxuZnVuY3Rpb24gWW1kKGEsYil7dmFyIGM7aWYoYiE9YS5hKXtjPW51bGw7ISFhLmEmJihjPUJEKGEuYSw0OSkuaWgoYSw0LG81LGMpKTshIWImJihjPUJEKGIsNDkpLmdoKGEsNCxvNSxjKSk7Yz1UbWQoYSxiLGMpOyEhYyYmYy5GaSgpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSwxLGIsYikpfVxuZnVuY3Rpb24gUlFkKGEsYil7dmFyIGM7aWYoYiE9YS5lKXshIWEuZSYmUVlkKEFZZChhLmUpLGEpOyEhYiYmKCFiLmImJihiLmI9bmV3IFJZZChuZXcgTllkKSksUFlkKGIuYixhKSk7Yz1IUWQoYSxiLG51bGwpOyEhYyYmYy5GaSgpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw0LGIsYikpfVxuZnVuY3Rpb24gdWZiKGEpe3ZhciBiLGMsZDtjPWEubGVuZ3RoO2Q9MDt3aGlsZShkPGMmJihCQ2IoZCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGQpPD0zMikpeysrZH1iPWM7d2hpbGUoYj5kJiYoQkNiKGItMSxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGItMSk8PTMyKSl7LS1ifXJldHVybiBkPjB8fGI8Yz9hLnN1YnN0cihkLGItZCk6YX1cbmZ1bmN0aW9uIHVqYyhhLGIpe3ZhciBjO2M9Yi5vO2lmKGZhZChhLmYpKXthLmouYT0kd25kLk1hdGgubWF4KGEuai5hLGMuYSk7YS5qLmIrPWMuYjthLmQuYy5sZW5ndGg+MSYmKGEuai5iKz1hLmUpfWVsc2V7YS5qLmErPWMuYTthLmouYj0kd25kLk1hdGgubWF4KGEuai5iLGMuYik7YS5kLmMubGVuZ3RoPjEmJihhLmouYSs9YS5lKX19XG5mdW5jdGlvbiBna2MoKXtna2M9Y2NiO2RrYz1PQyhHQyhGMSwxKSxibmUsNjEsMCxbKFVjZCgpLEFjZCksemNkLFJjZF0pO2NrYz1PQyhHQyhGMSwxKSxibmUsNjEsMCxbemNkLFJjZCxUY2RdKTtla2M9T0MoR0MoRjEsMSksYm5lLDYxLDAsW1JjZCxUY2QsQWNkXSk7ZmtjPU9DKEdDKEYxLDEpLGJuZSw2MSwwLFtUY2QsQWNkLHpjZF0pfVxuZnVuY3Rpb24gb21jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2c9YS5jLmQ7aD1hLmQuZDtpZihnLmo9PWguail7cmV0dXJufWs9YS5iO2U9Zy5qO2k9bnVsbDt3aGlsZShlIT1oLmope2k9Yj09MD9YY2QoZSk6VmNkKGUpO2Y9dW1jKGUsay5kW2UuZ10sYyk7aj11bWMoaSxrLmRbaS5nXSxjKTtEc2IoZCxQNmMoZixqKSk7ZT1pfX1cbmZ1bmN0aW9uIG9GYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2c9SkhjKGEuYSxiLGMpO2g9QkQoZy5hLDE5KS5hO2Y9QkQoZy5iLDE5KS5hO2lmKGQpe2k9QkQodk5iKGIsKHd0YygpLGd0YykpLDEwKTtlPUJEKHZOYihjLGd0YyksMTApO2lmKCEhaSYmISFlKXttaWMoYS5iLGksZSk7aCs9YS5iLmk7Zis9YS5iLmV9fXJldHVybiBoPmZ9XG5mdW5jdGlvbiBvSGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO3RoaXMuYT1sSGMoYSk7dGhpcy5iPW5ldyBSa2I7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07Zj1uZXcgUmtiO0VrYih0aGlzLmIsZik7Zm9yKGg9YixpPTAsaj1oLmxlbmd0aDtpPGo7KytpKXtnPWhbaV07RWtiKGYsbmV3IFRrYihnLmopKX19fVxuZnVuY3Rpb24gcUhjKGEsYixjKXt2YXIgZCxlLGY7Zj0wO2Q9Y1tiXTtpZihiPGMubGVuZ3RoLTEpe2U9Y1tiKzFdO2lmKGEuYltiXSl7Zj1LSWMoYS5kLGQsZSk7Zis9TkhjKGEuYSxkLChVY2QoKSx6Y2QpKTtmKz1OSGMoYS5hLGUsVGNkKX1lbHNle2Y9SUhjKGEuYSxkLGUpfX1hLmNbYl0mJihmKz1QSGMoYS5hLGQpKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIGpaYihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2k9bnVsbDtmb3IoaD1uZXcgb2xiKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSw0NDEpO2lmKGchPWMmJkprYihnLmUsZSwwKSE9LTEpe2k9ZzticmVha319Zj1rWmIoZSk7UVpiKGYsYy5iKTtSWmIoZixpLmIpO1JjKGEuYSxlLG5ldyBCWmIoZixiLGMuZikpfVxuZnVuY3Rpb24gbmljKGEpe3doaWxlKGEuZy5jIT0wJiZhLmQuYyE9MCl7aWYod2ljKGEuZykuYz53aWMoYS5kKS5jKXthLmkrPWEuZy5jO3lpYyhhLmQpfWVsc2UgaWYod2ljKGEuZCkuYz53aWMoYS5nKS5jKXthLmUrPWEuZC5jO3lpYyhhLmcpfWVsc2V7YS5pKz12aWMoYS5nKTthLmUrPXZpYyhhLmQpO3lpYyhhLmcpO3lpYyhhLmQpfX19XG5mdW5jdGlvbiBYT2MoYSxiLGMpe3ZhciBkLGUsZixnO2Y9Yi5xO2c9Yi5yO25ldyBET2MoKEhPYygpLEZPYyksYixmLDEpO25ldyBET2MoRk9jLGYsZywxKTtmb3IoZT1uZXcgb2xiKGMpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMTIpO2lmKGQhPWYmJmQhPWImJmQhPWcpe3BQYyhhLmEsZCxiKTtwUGMoYS5hLGQsZyl9fX1cbmZ1bmN0aW9uIFhRYyhhLGIsYyxkKXthLmEuZD0kd25kLk1hdGgubWluKGIsYyk7YS5hLmE9JHduZC5NYXRoLm1heChiLGQpLWEuYS5kO2lmKGI8Yyl7YS5iPTAuNSooYitjKTthLmc9UXFlKmEuYiswLjkqYjthLmY9UXFlKmEuYiswLjkqY31lbHNle2EuYj0wLjUqKGIrZCk7YS5nPVFxZSphLmIrMC45KmQ7YS5mPVFxZSphLmIrMC45KmJ9fVxuZnVuY3Rpb24gYWNiKCl7X2JiPXt9OyFBcnJheS5pc0FycmF5JiYoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPT09J1tvYmplY3QgQXJyYXldJ30pO2Z1bmN0aW9uIGIoKXtyZXR1cm4gKG5ldyBEYXRlKS5nZXRUaW1lKCl9XG4hRGF0ZS5ub3cmJihEYXRlLm5vdz1iKX1cbmZ1bmN0aW9uICRUYihhLGIpe3ZhciBjLGQ7ZD1CRCh2TmIoYiwoTnljKCksVnhjKSksOTgpO3lOYihiLCh3dGMoKSxkdGMpLGQpO2M9Yi5lOyEhYyYmKE1BYihuZXcgWUFiKG51bGwsbmV3IEt1YihjLmEsMTYpKSxuZXcgZFViKGEpKSxNQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGMuYiwxNikpLG5ldyBmVWIpLG5ldyBoVWIoYSkpKX1cbmZ1bmN0aW9uIF8kYihhKXt2YXIgYixjLGQsZTtpZihnYWQoQkQodk5iKGEuYiwoTnljKCksTHdjKSksMTAzKSkpe3JldHVybiAwfWI9MDtmb3IoZD1uZXcgb2xiKGEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDEwKTtpZihjLms9PShqMGIoKSxoMGIpKXtlPWMuby5hO2I9JHduZC5NYXRoLm1heChiLGUpfX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGM1YihhKXtzd2l0Y2goQkQodk5iKGEsKE55YygpLG14YykpLDE2MykuZyl7Y2FzZSAxOnlOYihhLG14YywoQ3RjKCksenRjKSk7YnJlYWs7Y2FzZSAyOnlOYihhLG14YywoQ3RjKCksQXRjKSk7YnJlYWs7Y2FzZSAzOnlOYihhLG14YywoQ3RjKCkseHRjKSk7YnJlYWs7Y2FzZSA0OnlOYihhLG14YywoQ3RjKCkseXRjKSk7fX1cbmZ1bmN0aW9uIHlyYygpe3lyYz1jY2I7d3JjPW5ldyB6cmMoYW5lLDApO3RyYz1uZXcgenJjKGpsZSwxKTt4cmM9bmV3IHpyYyhrbGUsMik7dnJjPW5ldyB6cmMoJ0xFRlRfUklHSFRfQ09OU1RSQUlOVF9MT0NLSU5HJywzKTt1cmM9bmV3IHpyYygnTEVGVF9SSUdIVF9DT05ORUNUSU9OX0xPQ0tJTkcnLDQpO3JyYz1uZXcgenJjKFZuZSw1KX1cbmZ1bmN0aW9uIHFSYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aD1jLmEvMjtmPWMuYi8yO2Q9JHduZC5NYXRoLmFicyhiLmEtYS5hKTtlPSR3bmQuTWF0aC5hYnMoYi5iLWEuYik7aT0xO2o9MTtkPmgmJihpPWgvZCk7ZT5mJiYoaj1mL2UpO2c9JHduZC5NYXRoLm1pbihpLGopO2EuYSs9ZyooYi5hLWEuYSk7YS5iKz1nKihiLmItYS5iKX1cbmZ1bmN0aW9uIHNaYyhhLGIsYyxkLGUpe3ZhciBmLGc7Zz1mYWxzZTtmPUJEKElrYihjLmIsMCksMzMpO3doaWxlKHlaYyhhLGIsZixkLGUpKXtnPXRydWU7TlpjKGMsZik7aWYoYy5iLmMubGVuZ3RoPT0wKXticmVha31mPUJEKElrYihjLmIsMCksMzMpfWMuYi5jLmxlbmd0aD09MCYmdiRjKGMuaixjKTtnJiZhJGMoYi5xKTtyZXR1cm4gZ31cbmZ1bmN0aW9uIHQ2YyhhLGIpe2k2YygpO3ZhciBjLGQsZSxmO2lmKGIuYjwyKXtyZXR1cm4gZmFsc2V9Zj1Kc2IoYiwwKTtjPUJEKFhzYihmKSw4KTtkPWM7d2hpbGUoZi5iIT1mLmQuYyl7ZT1CRChYc2IoZiksOCk7aWYoczZjKGEsZCxlKSl7cmV0dXJuIHRydWV9ZD1lfWlmKHM2YyhhLGQsYykpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGNrZChhLGIsYyxkKXt2YXIgZSxmO2lmKGM9PTApe3JldHVybiAhYS5vJiYoYS5vPW5ldyBkSWQoKFRoZCgpLFFoZCksUzIsYSwwKSksYklkKGEubyxiLGQpfXJldHVybiBmPUJEKFhLZCgoZT1CRChBamQoYSwxNiksMjYpLCFlP2EuemgoKTplKSxjKSw2NiksZi5OaigpLlJqKGEseWpkKGEpLGMtYUxkKGEuemgoKSksYixkKX1cbmZ1bmN0aW9uIGJvZChhLGIpe3ZhciBjO2lmKGIhPWEuc2Ipe2M9bnVsbDshIWEuc2ImJihjPUJEKGEuc2IsNDkpLmloKGEsMSxpNSxjKSk7ISFiJiYoYz1CRChiLDQ5KS5naChhLDEsaTUsYykpO2M9Sm5kKGEsYixjKTshIWMmJmMuRmkoKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsNCxiLGIpKX1cbmZ1bmN0aW9uIHlxZChhLGIpe3ZhciBjLGQsZSxmO2lmKGIpe2U9WHBkKGIsJ3gnKTtjPW5ldyB6cmQoYSk7aG1kKGMuYSwodUNiKGUpLGUpKTtmPVhwZChiLCd5Jyk7ZD1uZXcgQXJkKGEpO2ltZChkLmEsKHVDYihmKSxmKSl9ZWxzZXt0aHJvdyB2YmIobmV3IGNxZCgnQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhbiBlbmQgcG9pbnQuJykpfX1cbmZ1bmN0aW9uIHdxZChhLGIpe3ZhciBjLGQsZSxmO2lmKGIpe2U9WHBkKGIsJ3gnKTtjPW5ldyB3cmQoYSk7b21kKGMuYSwodUNiKGUpLGUpKTtmPVhwZChiLCd5Jyk7ZD1uZXcgeHJkKGEpO3BtZChkLmEsKHVDYihmKSxmKSl9ZWxzZXt0aHJvdyB2YmIobmV3IGNxZCgnQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhIHN0YXJ0IHBvaW50LicpKX19XG5mdW5jdGlvbiBweWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtmb3IoZD1zeWIoYSksZj0wLGg9ZC5sZW5ndGg7ZjxoOysrZil7eXliKGIpfWk9IWx5YiYmYS5lP2x5Yj9udWxsOmEuZDpudWxsO3doaWxlKGkpe2ZvcihjPXN5YihpKSxlPTAsZz1jLmxlbmd0aDtlPGc7KytlKXt5eWIoYil9aT0hbHliJiZpLmU/bHliP251bGw6aS5kOm51bGx9fVxuZnVuY3Rpb24gajBiKCl7ajBiPWNjYjtoMGI9bmV3IGswYignTk9STUFMJywwKTtnMGI9bmV3IGswYignTE9OR19FREdFJywxKTtlMGI9bmV3IGswYignRVhURVJOQUxfUE9SVCcsMik7aTBiPW5ldyBrMGIoJ05PUlRIX1NPVVRIX1BPUlQnLDMpO2YwYj1uZXcgazBiKCdMQUJFTCcsNCk7ZDBiPW5ldyBrMGIoJ0JSRUFLSU5HX1BPSU5UJyw1KX1cbmZ1bmN0aW9uIGc0YihhKXt2YXIgYixjLGQsZTtiPWZhbHNlO2lmKHdOYihhLCh3dGMoKSxDc2MpKSl7Yz1CRCh2TmIoYSxDc2MpLDgzKTtmb3IoZT1uZXcgb2xiKGEuaik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDExKTtpZihlNGIoZCkpe2lmKCFiKXtkNGIoUV9iKGEpKTtiPXRydWV9aDRiKEJEKGMueGMoZCksMzA2KSl9fX19XG5mdW5jdGlvbiBxZWMoYSxiLGMpe3ZhciBkO09kZChjLCdTZWxmLUxvb3Agcm91dGluZycsMSk7ZD1yZWMoYik7UkQodk5iKGIsKGc2YygpLGY2YykpKTtNQWIoTkFiKEpBYihKQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuYiwxNikpLG5ldyB1ZWMpLG5ldyB3ZWMpLG5ldyB5ZWMpLG5ldyBBZWMpLG5ldyBDZWMoYSxkKSk7UWRkKGMpfVxuZnVuY3Rpb24gZ3NkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtqPWhzZChhKTtjPWEuZTtmPWMhPW51bGw7ZiYmVXBkKGosZXVlLGEuZSk7aD1hLms7Zz0hIWg7ZyYmVXBkKGosJ3R5cGUnLFpyKGEuaykpO2Q9RmhlKGEuaik7ZT0hZDtpZihlKXtpPW5ldyB3QjtjQyhqLE10ZSxpKTtiPW5ldyBzc2QoaSk7cmViKGEuaixiKX1yZXR1cm4gan1cbmZ1bmN0aW9uIEp2KGEpe3ZhciBiLGMsZCxlO2U9S2ZiKChYaihhLmdjKCksJ3NpemUnKSxuZXcgVmZiKSwxMjMpO2Q9dHJ1ZTtmb3IoYz1XbShhKS5LYygpO2MuT2IoKTspe2I9QkQoYy5QYigpLDQyKTtkfHwoZS5hKz1TaGUsZSk7ZD1mYWxzZTtQZmIoS2ZiKFBmYihlLGIuY2QoKSksNjEpLGIuZGQoKSl9cmV0dXJuIChlLmErPSd9JyxlKS5hfVxuZnVuY3Rpb24ga0QoYSxiKXt2YXIgYyxkLGU7YiY9NjM7aWYoYjwyMil7Yz1hLmw8PGI7ZD1hLm08PGJ8YS5sPj4yMi1iO2U9YS5oPDxifGEubT4+MjItYn1lbHNlIGlmKGI8NDQpe2M9MDtkPWEubDw8Yi0yMjtlPWEubTw8Yi0yMnxhLmw+PjQ0LWJ9ZWxzZXtjPTA7ZD0wO2U9YS5sPDxiLTQ0fXJldHVybiBUQyhjJkVqZSxkJkVqZSxlJkZqZSl9XG5mdW5jdGlvbiBIY2IoYSl7R2NiPT1udWxsJiYoR2NiPW5ldyBSZWdFeHAoJ15cXFxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXFxcZCtcXFxcLj9cXFxcZCopfChcXFxcLlxcXFxkKykpKFtlRV1bKy1dP1xcXFxkKyk/W2REZkZdPylcXFxccyokJykpO2lmKCFHY2IudGVzdChhKSl7dGhyb3cgdmJiKG5ldyBPZWIoT2plK2ErJ1wiJykpfXJldHVybiBwYXJzZUZsb2F0KGEpfVxuZnVuY3Rpb24gSUZiKGEpe3ZhciBiLGMsZCxlO2I9bmV3IFJrYjtjPUtDKHNiYixkbGUsMjUsYS5hLmMubGVuZ3RoLDE2LDEpO0dsYihjLGMubGVuZ3RoKTtmb3IoZT1uZXcgb2xiKGEuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEyMSk7aWYoIWNbZC5kXSl7Yi5jW2IuYy5sZW5ndGhdPWQ7SEZiKGEsZCxjKX19cmV0dXJuIGJ9XG5mdW5jdGlvbiBObWMoYSxiKXt2YXIgYyxkLGUsZjtmPWIuYi5qO2EuYT1LQyhXRCxvamUsMjUsZi5jLmxlbmd0aCwxNSwxKTtlPTA7Zm9yKGQ9MDtkPGYuYy5sZW5ndGg7ZCsrKXtjPSh0Q2IoZCxmLmMubGVuZ3RoKSxCRChmLmNbZF0sMTEpKTtjLmUuYy5sZW5ndGg9PTAmJmMuZy5jLmxlbmd0aD09MD8oZSs9MSk6KGUrPTMpO2EuYVtkXT1lfX1cbmZ1bmN0aW9uIFNxYygpe1NxYz1jY2I7TnFjPW5ldyBVcWMoJ0FMV0FZU19VUCcsMCk7TXFjPW5ldyBVcWMoJ0FMV0FZU19ET1dOJywxKTtQcWM9bmV3IFVxYygnRElSRUNUSU9OX1VQJywyKTtPcWM9bmV3IFVxYygnRElSRUNUSU9OX0RPV04nLDMpO1JxYz1uZXcgVXFjKCdTTUFSVF9VUCcsNCk7UXFjPW5ldyBVcWMoJ1NNQVJUX0RPV04nLDUpfVxuZnVuY3Rpb24gazZjKGEsYil7aWYoYTwwfHxiPDApe3Rocm93IHZiYihuZXcgV2RiKCdrIGFuZCBuIG11c3QgYmUgcG9zaXRpdmUnKSl9ZWxzZSBpZihiPmEpe3Rocm93IHZiYihuZXcgV2RiKCdrIG11c3QgYmUgc21hbGxlciB0aGFuIG4nKSl9ZWxzZSByZXR1cm4gYj09MHx8Yj09YT8xOmE9PTA/MDpxNmMoYSkvKHE2YyhiKSpxNmMoYS1iKSl9XG5mdW5jdGlvbiBqZmQoYSxiKXt2YXIgYyxkLGUsZjtjPW5ldyBfdWQoYSk7d2hpbGUoYy5nPT1udWxsJiYhYy5jP1V1ZChjKTpjLmc9PW51bGx8fGMuaSE9MCYmQkQoYy5nW2MuaS0xXSw0NykuT2IoKSl7Zj1CRChWdWQoYyksNTYpO2lmKEpEKGYsMTYwKSl7ZD1CRChmLDE2MCk7Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7YltlXS5vZyhkKX19fX1cbmZ1bmN0aW9uIGZsZChhKXt2YXIgYjtpZigoYS5EYiY2NCkhPTApcmV0dXJuIE1rZChhKTtiPW5ldyBKZmIoTWtkKGEpKTtiLmErPScgKGhlaWdodDogJztCZmIoYixhLmYpO2IuYSs9Jywgd2lkdGg6ICc7QmZiKGIsYS5nKTtiLmErPScsIHg6ICc7QmZiKGIsYS5pKTtiLmErPScsIHk6ICc7QmZiKGIsYS5qKTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gdW4oYSl7dmFyIGIsYyxkLGUsZixnLGg7Yj1uZXcgJHJiO2ZvcihkPWEsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2c9UWIoYy5jZCgpKTtoPVhyYihiLGcsUWIoYy5kZCgpKSk7aWYoaCE9bnVsbCl7dGhyb3cgdmJiKG5ldyBXZGIoJ2R1cGxpY2F0ZSBrZXk6ICcrZykpfX10aGlzLmI9KG1tYigpLG5ldyBpb2IoYikpfVxuZnVuY3Rpb24gUmxiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1mPW5ldyB4d2IoU2hlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO3V3YihmLFN0cmluZy5mcm9tQ2hhckNvZGUoYikpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfVxuZnVuY3Rpb24gU1JiKCl7U1JiPWNjYjtNUmI9KFhSYigpLFdSYik7TFJiPW5ldyBOc2QobW1lLE1SYik7bWViKDEpO0tSYj1uZXcgTnNkKG5tZSxtZWIoMzAwKSk7bWViKDApO1BSYj1uZXcgTnNkKG9tZSxtZWIoMCkpO25ldyBUZmQ7UVJiPW5ldyBOc2QocG1lLHFtZSk7bmV3IFRmZDtOUmI9bmV3IE5zZChybWUsNSk7UlJiPVdSYjtPUmI9VlJifVxuZnVuY3Rpb24gTlViKGEsYil7dmFyIGMsZCxlLGYsZztlPWI9PTE/S1ViOkpVYjtmb3IoZD1lLmEuZWMoKS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDEwMyk7Zm9yKGc9QkQoUWMoYS5mLmMsYyksMjEpLktjKCk7Zy5PYigpOyl7Zj1CRChnLlBiKCksNDYpO0VrYihhLmIuYixCRChmLmIsODEpKTtFa2IoYS5iLmEsQkQoZi5iLDgxKS5kKX19fVxuZnVuY3Rpb24ga1ZkKGEsYil7dmFyIGM7aWYoYiE9bnVsbCYmIWEuYy5ZaigpLndqKGIpKXtjPUpEKGIsNTYpP0JEKGIsNTYpLlRnKCkuemI6aGRiKHJiKGIpKTt0aHJvdyB2YmIobmV3IENkYihpdGUrYS5jLm5lKCkrXCIncyB0eXBlICdcIithLmMuWWooKS5uZSgpK1wiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICdcIitjK1wiJ1wiKSl9fVxuZnVuY3Rpb24gY1piKGEsYixjKXt2YXIgZCxlO2U9bmV3IEJpYihhLmIsMCk7d2hpbGUoZS5iPGUuZC5nYygpKXtkPShzQ2IoZS5iPGUuZC5nYygpKSxCRChlLmQuWGIoZS5jPWUuYisrKSw3MCkpO2lmKFBEKHZOYihkLCh3dGMoKSxidGMpKSkhPT1QRChiKSl7Y29udGludWV9WSRiKGQubixRX2IoYS5jLmkpLGMpO3VpYihlKTtFa2IoYi5iLGQpfX1cbmZ1bmN0aW9uIHZkYyhhLGIpe2lmKGIuYSl7c3dpdGNoKEJEKHZOYihiLmIsKHd0YygpLGR0YykpLDk4KS5nKXtjYXNlIDA6Y2FzZSAxOmxsYyhiKTtjYXNlIDI6TUFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuZCwxNikpLG5ldyBJZGMpO3drYyhhLmEsYik7fX1lbHNle01BYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmQsMTYpKSxuZXcgSWRjKX19XG5mdW5jdGlvbiBabmMoYSl7dmFyIGIsYztjPSR3bmQuTWF0aC5zcXJ0KChhLms9PW51bGwmJihhLms9U29jKGEsbmV3IGJwYykpLEVkYihhLmspLyhhLmIqKGEuZz09bnVsbCYmKGEuZz1Qb2MoYSxuZXcgX29jKSksRWRiKGEuZykpKSkpO2I9VGJiKENiYigkd25kLk1hdGgucm91bmQoYykpKTtiPSR3bmQuTWF0aC5taW4oYixhLmYpO3JldHVybiBifVxuZnVuY3Rpb24gSDBiKCl7ejBiKCk7bl9iLmNhbGwodGhpcyk7dGhpcy5qPShVY2QoKSxTY2QpO3RoaXMuYT1uZXcgZDdjO25ldyBMX2I7dGhpcy5mPShYaigyLEppZSksbmV3IFNrYigyKSk7dGhpcy5lPShYaig0LEppZSksbmV3IFNrYig0KSk7dGhpcy5nPShYaig0LEppZSksbmV3IFNrYig0KSk7dGhpcy5iPW5ldyBaMGIodGhpcy5lLHRoaXMuZyl9XG5mdW5jdGlvbiBqM2IoYSxiKXt2YXIgYyxkO2lmKENjYihERCh2TmIoYiwod3RjKCksbHRjKSkpKSl7cmV0dXJuIGZhbHNlfWQ9Yi5jLmk7aWYoYT09KEN0YygpLHh0Yykpe2lmKGQuaz09KGowYigpLGYwYikpe3JldHVybiBmYWxzZX19Yz1CRCh2TmIoZCwoTnljKCksbXhjKSksMTYzKTtpZihjPT15dGMpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIGszYihhLGIpe3ZhciBjLGQ7aWYoQ2NiKEREKHZOYihiLCh3dGMoKSxsdGMpKSkpKXtyZXR1cm4gZmFsc2V9ZD1iLmQuaTtpZihhPT0oQ3RjKCksenRjKSl7aWYoZC5rPT0oajBiKCksZjBiKSl7cmV0dXJuIGZhbHNlfX1jPUJEKHZOYihkLChOeWMoKSxteGMpKSwxNjMpO2lmKGM9PUF0Yyl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gTDNiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Zz1hLmQ7aT1hLm87aD1uZXcgSjZjKC1nLmIsLWcuZCxnLmIraS5hK2cuYyxnLmQraS5iK2cuYSk7Zm9yKGQ9YixlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07ISFjJiZINmMoaCxjLmkpfWcuYj0taC5jO2cuZD0taC5kO2cuYz1oLmItZy5iLWkuYTtnLmE9aC5hLWcuZC1pLmJ9XG5mdW5jdGlvbiBOX2MoKXtOX2M9Y2NiO0lfYz1uZXcgT19jKCdDRU5URVJfRElTVEFOQ0UnLDApO0pfYz1uZXcgT19jKCdDSVJDTEVfVU5ERVJMQVAnLDEpO01fYz1uZXcgT19jKCdSRUNUQU5HTEVfVU5ERVJMQVAnLDIpO0tfYz1uZXcgT19jKCdJTlZFUlRFRF9PVkVSTEFQJywzKTtMX2M9bmV3IE9fYygnTUlOSU1VTV9ST09UX0RJU1RBTkNFJyw0KX1cbmZ1bmN0aW9uIGpkZShhKXtoZGUoKTt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7ZD1hLmxlbmd0aDtlPWQqMjtiPUtDKFRELCRpZSwyNSxlLDE1LDEpO2ZvcihjPTA7YzxkO2MrKyl7Zj1hW2NdO2Y8MCYmKGYrPTI1Nik7YltjKjJdPWdkZVtmPj40XTtiW2MqMisxXT1nZGVbZiYxNV19cmV0dXJuIHpmYihiLDAsYi5sZW5ndGgpfVxuZnVuY3Rpb24gZm4oYSl7Vm0oKTt2YXIgYixjLGQ7ZD1hLmMubGVuZ3RoO3N3aXRjaChkKXtjYXNlIDA6cmV0dXJuIFVtO2Nhc2UgMTpiPUJEKHFyKG5ldyBvbGIoYSkpLDQyKTtyZXR1cm4gbG4oYi5jZCgpLGIuZGQoKSk7ZGVmYXVsdDpjPUJEKFFrYihhLEtDKENLLHppZSw0MixhLmMubGVuZ3RoLDAsMSkpLDE2NSk7cmV0dXJuIG5ldyB3eChjKTt9fVxuZnVuY3Rpb24gSVRiKGEpe3ZhciBiLGMsZCxlLGYsZztiPW5ldyBqa2I7Yz1uZXcgamtiO1dqYihiLGEpO1dqYihjLGEpO3doaWxlKGMuYiE9Yy5jKXtlPUJEKGZrYihjKSwzNyk7Zm9yKGc9bmV3IG9sYihlLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMCk7aWYoZi5lKXtkPWYuZTtXamIoYixkKTtXamIoYyxkKX19fXJldHVybiBifVxuZnVuY3Rpb24gWV9iKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAxOnJldHVybiBOcShhLmosKHowYigpLHYwYikpO2Nhc2UgMjpyZXR1cm4gTnEoYS5qLCh6MGIoKSx0MGIpKTtjYXNlIDM6cmV0dXJuIE5xKGEuaiwoejBiKCkseDBiKSk7Y2FzZSA0OnJldHVybiBOcShhLmosKHowYigpLHkwYikpO2RlZmF1bHQ6cmV0dXJuIG1tYigpLG1tYigpLGptYjt9fVxuZnVuY3Rpb24gdGljKGEsYil7dmFyIGMsZCxlO2M9dWljKGIsYS5lKTtkPUJEKE9oYihhLmcuZixjKSwxOSkuYTtlPWEuYS5jLmxlbmd0aC0xO2lmKGEuYS5jLmxlbmd0aCE9MCYmQkQoSWtiKGEuYSxlKSwyODcpLmM9PWQpeysrQkQoSWtiKGEuYSxlKSwyODcpLmE7KytCRChJa2IoYS5hLGUpLDI4NykuYn1lbHNle0VrYihhLmEsbmV3IERpYyhkKSl9fVxuZnVuY3Rpb24gVkdjKGEsYixjKXt2YXIgZCxlO2Q9VUdjKGEsYixjKTtpZihkIT0wKXtyZXR1cm4gZH1pZih3TmIoYiwod3RjKCksWnNjKSkmJndOYihjLFpzYykpe2U9YmViKEJEKHZOYihiLFpzYyksMTkpLmEsQkQodk5iKGMsWnNjKSwxOSkuYSk7ZTwwP1dHYyhhLGIsYyk6ZT4wJiZXR2MoYSxjLGIpO3JldHVybiBlfXJldHVybiBUR2MoYSxiLGMpfVxuZnVuY3Rpb24gTVNjKGEsYixjKXt2YXIgZCxlLGYsZztpZihiLmIhPTApe2Q9bmV3IFBzYjtmb3IoZz1Kc2IoYiwwKTtnLmIhPWcuZC5jOyl7Zj1CRChYc2IoZyksODYpO3llKGQsVVJjKGYpKTtlPWYuZTtlLmE9QkQodk5iKGYsKG1UYygpLGtUYykpLDE5KS5hO2UuYj1CRCh2TmIoZixsVGMpLDE5KS5hfU1TYyhhLGQsVWRkKGMsZC5iL2EuYXwwKSl9fVxuZnVuY3Rpb24gSlpjKGEsYil7dmFyIGMsZCxlLGYsZztpZihhLmU8PWIpe3JldHVybiBhLmd9aWYoTFpjKGEsYS5nLGIpKXtyZXR1cm4gYS5nfWY9YS5yO2Q9YS5nO2c9YS5yO2U9KGYtZCkvMitkO3doaWxlKGQrMTxmKXtjPU1aYyhhLGUsZmFsc2UpO2lmKGMuYjw9ZSYmYy5hPD1iKXtnPWU7Zj1lfWVsc2V7ZD1lfWU9KGYtZCkvMitkfXJldHVybiBnfVxuZnVuY3Rpb24gdDJjKGEsYixjKXt2YXIgZDtkPW8yYyhhLGIsdHJ1ZSk7T2RkKGMsJ1JlY3Vyc2l2ZSBHcmFwaCBMYXlvdXQnLGQpO2pmZChiLE9DKEdDKGcyLDEpLFVoZSw1MjcsMCxbbmV3IHEzY10pKTtpa2QoYiwoWTljKCksRjljKSl8fGpmZChiLE9DKEdDKGcyLDEpLFVoZSw1MjcsMCxbbmV3IFUzY10pKTt1MmMoYSxiLG51bGwsYyk7UWRkKGMpfVxuZnVuY3Rpb24gUWRkKGEpe3ZhciBiO2lmKGEucD09bnVsbCl7dGhyb3cgdmJiKG5ldyBaZGIoJ1RoZSB0YXNrIGhhcyBub3QgYmVndW4geWV0LicpKX1pZighYS5iKXtpZihhLmspe2I9KFpmYigpLEliYihDYmIoRGF0ZS5ub3coKSksX2llKSk7YS5xPVNiYihRYmIoYixhLm8pKSoxLjBFLTl9YS5jPGEuciYmUmRkKGEsYS5yLWEuYyk7YS5iPXRydWV9fVxuZnVuY3Rpb24gb2ZkKGEpe3ZhciBiLGMsZDtkPW5ldyBzN2M7RHNiKGQsbmV3IGY3YyhhLmosYS5rKSk7Zm9yKGM9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgeE1kKHkyLGEsNSkpLGEuYSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUJEKER5ZChjKSw0NjkpO0RzYihkLG5ldyBmN2MoYi5hLGIuYikpfURzYihkLG5ldyBmN2MoYS5iLGEuYykpO3JldHVybiBkfVxuZnVuY3Rpb24gcXFkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrO2lmKGUpe2k9ZS5hLmxlbmd0aDtmPW5ldyBZZ2UoaSk7Zm9yKGs9KGYuYi1mLmEpKmYuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoZik7ay5PYigpOyl7aj1CRChrLlBiKCksMTkpO2g9WnBkKGUsai5hKTtnPW5ldyBwcmQoYSxiLGMsZCk7cnFkKGcuYSxnLmIsZy5jLGcuZCxoKX19fVxuZnVuY3Rpb24gQXgoYixjKXt2YXIgZDtpZihQRChiKT09PVBEKGMpKXtyZXR1cm4gdHJ1ZX1pZihKRChjLDIxKSl7ZD1CRChjLDIxKTt0cnl7cmV0dXJuIGIuZ2MoKT09ZC5nYygpJiZiLkljKGQpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTczKXx8SkQoYSwyMDUpKXtyZXR1cm4gZmFsc2V9ZWxzZSB0aHJvdyB2YmIoYSl9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIFVIYihhLGIpe3ZhciBjO0VrYihhLmQsYik7Yz1iLnJmKCk7aWYoYS5jKXthLmUuYT0kd25kLk1hdGgubWF4KGEuZS5hLGMuYSk7YS5lLmIrPWMuYjthLmQuYy5sZW5ndGg+MSYmKGEuZS5iKz1hLmEpfWVsc2V7YS5lLmErPWMuYTthLmUuYj0kd25kLk1hdGgubWF4KGEuZS5iLGMuYik7YS5kLmMubGVuZ3RoPjEmJihhLmUuYSs9YS5hKX19XG5mdW5jdGlvbiBjbWMoYSl7dmFyIGIsYyxkLGU7ZT1hLmk7Yj1lLmI7ZD1lLmo7Yz1lLmc7c3dpdGNoKGUuYS5nKXtjYXNlIDA6Yy5hPShhLmcuYi5vLmEtZC5hKS8yO2JyZWFrO2Nhc2UgMTpjLmE9Yi5kLm4uYStiLmQuYS5hO2JyZWFrO2Nhc2UgMjpjLmE9Yi5kLm4uYStiLmQuYS5hLWQuYTticmVhaztjYXNlIDM6Yy5iPWIuZC5uLmIrYi5kLmEuYjt9fVxuZnVuY3Rpb24gUTZjKGEsYixjLGQsZSl7aWYoZDxifHxlPGMpe3Rocm93IHZiYihuZXcgV2RiKCdUaGUgaGlnaHggbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d4IGFuZCB0aGUgaGlnaHkgbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d5JykpfWEuYTxiPyhhLmE9Yik6YS5hPmQmJihhLmE9ZCk7YS5iPGM/KGEuYj1jKTphLmI+ZSYmKGEuYj1lKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGxzZChhKXtpZihKRChhLDE0OSkpe3JldHVybiBlc2QoQkQoYSwxNDkpKX1lbHNlIGlmKEpEKGEsMjI5KSl7cmV0dXJuIGZzZChCRChhLDIyOSkpfWVsc2UgaWYoSkQoYSwyMykpe3JldHVybiBnc2QoQkQoYSwyMykpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoWHRlK0ZlKG5ldyBhbWIoT0MoR0MoU0ksMSksVWhlLDEsNSxbYV0pKSkpKX19XG5mdW5jdGlvbiBtaGIoYSxiLGMsZCxlKXt2YXIgZixnLGg7Zj10cnVlO2ZvcihnPTA7ZzxkO2crKyl7Zj1mJmNbZ109PTB9aWYoZT09MCl7JGZiKGMsZCxhLDAsYik7Zz1ifWVsc2V7aD0zMi1lO2Y9ZiZjW2ddPDxoPT0wO2ZvcihnPTA7ZzxiLTE7ZysrKXthW2ddPWNbZytkXT4+PmV8Y1tnK2QrMV08PGh9YVtnXT1jW2crZF0+Pj5lOysrZ31yZXR1cm4gZn1cbmZ1bmN0aW9uIHpNYyhhLGIsYyxkKXt2YXIgZSxmLGc7aWYoYi5rPT0oajBiKCksZzBiKSl7Zm9yKGY9bmV3IFNyKHVyKFJfYihiKS5hLktjKCksbmV3IFNxKSk7UXIoZik7KXtlPUJEKFJyKGYpLDE3KTtnPWUuYy5pLms7aWYoZz09ZzBiJiZhLmMuYVtlLmMuaS5jLnBdPT1kJiZhLmMuYVtiLmMucF09PWMpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gbUQoYSxiKXt2YXIgYyxkLGUsZjtiJj02MztjPWEuaCZGamU7aWYoYjwyMil7Zj1jPj4+YjtlPWEubT4+YnxjPDwyMi1iO2Q9YS5sPj5ifGEubTw8MjItYn1lbHNlIGlmKGI8NDQpe2Y9MDtlPWM+Pj5iLTIyO2Q9YS5tPj5iLTIyfGEuaDw8NDQtYn1lbHNle2Y9MDtlPTA7ZD1jPj4+Yi00NH1yZXR1cm4gVEMoZCZFamUsZSZFamUsZiZGamUpfVxuZnVuY3Rpb24gSWljKGEsYixjLGQpe3ZhciBlO3RoaXMuYj1kO3RoaXMuZT1hPT0ockdjKCkscEdjKTtlPWJbY107dGhpcy5kPUlDKHNiYixbbmllLGRsZV0sWzE3NywyNV0sMTYsW2UubGVuZ3RoLGUubGVuZ3RoXSwyKTt0aGlzLmE9SUMoV0QsW25pZSxvamVdLFs0OCwyNV0sMTUsW2UubGVuZ3RoLGUubGVuZ3RoXSwyKTt0aGlzLmM9bmV3IHNpYyhiLGMpfVxuZnVuY3Rpb24gbGpjKGEpe3ZhciBiLGMsZDthLms9bmV3IEtpKChVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKS5sZW5ndGgsYS5qLmMubGVuZ3RoKTtmb3IoZD1uZXcgb2xiKGEuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDExMyk7Yj1jLmQuajtSYyhhLmssYixjKX1hLmU9WmpjKEVjKGEuaykpfVxuZnVuY3Rpb24gVVFjKGEsYil7dmFyIGMsZCxlO1FxYihhLmQsYik7Yz1uZXcgX1FjO1JoYihhLmMsYixjKTtjLmY9VlFjKGIuYyk7Yy5hPVZRYyhiLmQpO2MuZD0oaFFjKCksZT1iLmMuaS5rLGU9PShqMGIoKSxoMGIpfHxlPT1kMGIpO2MuZT0oZD1iLmQuaS5rLGQ9PWgwYnx8ZD09ZDBiKTtjLmI9Yi5jLmo9PShVY2QoKSxUY2QpO2MuYz1iLmQuaj09emNkfVxuZnVuY3Rpb24gQkdiKGEpe3ZhciBiLGMsZCxlLGY7Zj1PaGU7ZT1PaGU7Zm9yKGQ9bmV3IG9sYihMRmIoYSkpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyMTMpO2I9Yy5lLmUtYy5kLmU7Yy5lPT1hJiZiPGU/KGU9Yik6YjxmJiYoZj1iKX1lPT1PaGUmJihlPS0xKTtmPT1PaGUmJihmPS0xKTtyZXR1cm4gbmV3IHZnZChtZWIoZSksbWViKGYpKX1cbmZ1bmN0aW9uIHpRYihhLGIpe3ZhciBjLGQsZTtlPWRtZTtkPShST2IoKSxPT2IpO2U9JHduZC5NYXRoLmFicyhhLmIpO2M9JHduZC5NYXRoLmFicyhiLmYtYS5iKTtpZihjPGUpe2U9YztkPVBPYn1jPSR3bmQuTWF0aC5hYnMoYS5hKTtpZihjPGUpe2U9YztkPVFPYn1jPSR3bmQuTWF0aC5hYnMoYi5nLWEuYSk7aWYoYzxlKXtlPWM7ZD1OT2J9cmV0dXJuIGR9XG5mdW5jdGlvbiBMOWIoYSxiKXt2YXIgYyxkLGUsZjtjPWIuYS5vLmE7Zj1uZXcgSmliKFFfYihiLmEpLmIsYi5jLGIuZisxKTtmb3IoZT1uZXcgdmliKGYpO2UuYjxlLmQuZ2MoKTspe2Q9KHNDYihlLmI8ZS5kLmdjKCkpLEJEKGUuZC5YYihlLmM9ZS5iKyspLDI5KSk7aWYoZC5jLmE+PWMpe0s5YihhLGIsZC5wKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gSW9kKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gZmxkKGEpO2I9bmV3IFdmYihkdGUpOyFhLmF8fFFmYihRZmIoKGIuYSs9JyBcIicsYiksYS5hKSwnXCInKTtRZmIoTGZiKFFmYihMZmIoUWZiKExmYihRZmIoTGZiKChiLmErPScgKCcsYiksYS5pKSwnLCcpLGEuaiksJyB8ICcpLGEuZyksJywnKSxhLmYpLCcpJyk7cmV0dXJuIGIuYX1cbmZ1bmN0aW9uIFoyZChhLGIsYyl7dmFyIGQsZSxmLGcsaDtoPVM2ZChhLmUuVGcoKSxiKTtlPUJEKGEuZywxMTkpO2Q9MDtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGgucmwoZi5haygpKSl7aWYoZD09Yyl7WHhkKGEsZyk7cmV0dXJuIFE2ZCgpLEJEKGIsNjYpLk9qKCk/ZjpmLmRkKCl9KytkfX10aHJvdyB2YmIobmV3IHFjYihndmUrYyttdWUrZCkpfVxuZnVuY3Rpb24gc2RlKGEpe3ZhciBiLGMsZDtiPWEuYztpZihiPT0yfHxiPT03fHxiPT0xKXtyZXR1cm4gd2ZlKCksd2ZlKCksZmZlfWVsc2V7ZD1xZGUoYSk7Yz1udWxsO3doaWxlKChiPWEuYykhPTImJmIhPTcmJmIhPTEpe2lmKCFjKXtjPSh3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgTGdlKDEpKTtLZ2UoYyxkKTtkPWN9S2dlKGMscWRlKGEpKX1yZXR1cm4gZH19XG5mdW5jdGlvbiBLYihhLGIsYyl7aWYoYTwwfHxhPmMpe3JldHVybiBKYihhLGMsJ3N0YXJ0IGluZGV4Jyl9aWYoYjwwfHxiPmMpe3JldHVybiBKYihiLGMsJ2VuZCBpbmRleCcpfXJldHVybiBoYygnZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcyknLE9DKEdDKFNJLDEpLFVoZSwxLDUsW21lYihiKSxtZWIoYSldKSl9XG5mdW5jdGlvbiBQeihiLGMpe3ZhciBkLGUsZixnO2ZvcihlPTAsZj1iLmxlbmd0aDtlPGY7ZSsrKXtnPWJbZV07dHJ5e2dbMV0/Z1swXS5qbSgpJiYoYz1PeihjLGcpKTpnWzBdLmptKCl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3OCkpe2Q9YTtBeigpO0d6KEpEKGQsNDc3KT9CRChkLDQ3NykuYWUoKTpkKX1lbHNlIHRocm93IHZiYihhKX19cmV0dXJuIGN9XG5mdW5jdGlvbiBLOWIoYSxiLGMpe3ZhciBkLGUsZjtjIT1iLmMrYi5iLmdjKCkmJlo5YihiLmEsZmFjKGIsYy1iLmMpKTtmPWIuYS5jLnA7YS5hW2ZdPSR3bmQuTWF0aC5tYXgoYS5hW2ZdLGIuYS5vLmEpO2ZvcihlPUJEKHZOYihiLmEsKHd0YygpLGt0YykpLDE1KS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDcwKTt5TmIoZCxIOWIsKEJjYigpLHRydWUpKX19XG5mdW5jdGlvbiBXZWMoYSxiKXt2YXIgYyxkLGU7ZT1WZWMoYik7eU5iKGIsKHd0YygpLFhzYyksZSk7aWYoZSl7ZD1PaGU7ISFpcmIoYS5mLGUpJiYoZD1CRChXZChpcmIoYS5mLGUpKSwxOSkuYSk7Yz1CRChJa2IoYi5nLDApLDE3KTtDY2IoREQodk5iKGMsbHRjKSkpfHxSaGIoYSxlLG1lYigkd25kLk1hdGgubWluKEJEKHZOYihjLFpzYyksMTkpLmEsZCkpKX19XG5mdW5jdGlvbiBpQ2MoYSxiLGMpe3ZhciBkLGUsZixnLGg7Yi5wPS0xO2ZvcihoPVdfYihiLChLQWMoKSxJQWMpKS5LYygpO2guT2IoKTspe2c9QkQoaC5QYigpLDExKTtmb3IoZT1uZXcgb2xiKGcuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE3KTtmPWQuZC5pO2IhPWYmJihmLnA8MD9jLkZjKGQpOmYucD4wJiZpQ2MoYSxmLGMpKX19Yi5wPTB9XG5mdW5jdGlvbiBwNWMoYSl7dmFyIGI7dGhpcy5jPW5ldyBQc2I7dGhpcy5mPWEuZTt0aGlzLmU9YS5kO3RoaXMuaT1hLmc7dGhpcy5kPWEuYzt0aGlzLmI9YS5iO3RoaXMuaz1hLmo7dGhpcy5hPWEuYTshYS5pPyh0aGlzLmo9KGI9QkQoZ2RiKGUxKSw5KSxuZXcgeHFiKGIsQkQoX0JiKGIsYi5sZW5ndGgpLDkpLDApKSk6KHRoaXMuaj1hLmkpO3RoaXMuZz1hLmZ9XG5mdW5jdGlvbiBXYihhKXt2YXIgYixjLGQsZTtiPUtmYihRZmIobmV3IFdmYignUHJlZGljYXRlcy4nKSwnYW5kJyksNDApO2M9dHJ1ZTtmb3IoZT1uZXcgdmliKGEpO2UuYjxlLmQuZ2MoKTspe2Q9KHNDYihlLmI8ZS5kLmdjKCkpLGUuZC5YYihlLmM9ZS5iKyspKTtjfHwoYi5hKz0nLCcsYik7Yi5hKz0nJytkO2M9ZmFsc2V9cmV0dXJuIChiLmErPScpJyxiKS5hfVxuZnVuY3Rpb24gUmNjKGEsYixjKXt2YXIgZCxlLGY7aWYoYzw9YisyKXtyZXR1cm59ZT0oYy1iKS8yfDA7Zm9yKGQ9MDtkPGU7KytkKXtmPSh0Q2IoYitkLGEuYy5sZW5ndGgpLEJEKGEuY1tiK2RdLDExKSk7TmtiKGEsYitkLCh0Q2IoYy1kLTEsYS5jLmxlbmd0aCksQkQoYS5jW2MtZC0xXSwxMSkpKTt0Q2IoYy1kLTEsYS5jLmxlbmd0aCk7YS5jW2MtZC0xXT1mfX1cbmZ1bmN0aW9uIGhqYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztmPWEuZC5wO2g9Zi5lO2k9Zi5yO2EuZz1uZXcgZEljKGkpO2c9YS5kLm8uYy5wO2Q9Zz4wP2hbZy0xXTpLQyhPUSxrbmUsMTAsMCwwLDEpO2U9aFtnXTtqPWc8aC5sZW5ndGgtMT9oW2crMV06S0MoT1Esa25lLDEwLDAsMCwxKTtrPWI9PWMtMTtrP1JIYyhhLmcsZSxqKTpSSGMoYS5nLGQsZSl9XG5mdW5jdGlvbiBwamMoYSl7dmFyIGI7dGhpcy5qPW5ldyBSa2I7dGhpcy5mPW5ldyBUcWI7dGhpcy5iPShiPUJEKGdkYihGMSksOSksbmV3IHhxYihiLEJEKF9CYihiLGIubGVuZ3RoKSw5KSwwKSk7dGhpcy5kPUtDKFdELG9qZSwyNSwoVWNkKCksT0MoR0MoRjEsMSksYm5lLDYxLDAsW1NjZCxBY2QsemNkLFJjZCxUY2RdKSkubGVuZ3RoLDE1LDEpO3RoaXMuZz1hfVxuZnVuY3Rpb24gUVZjKGEsYil7dmFyIGMsZCxlO2lmKGIuYy5sZW5ndGghPTApe2M9UlZjKGEsYik7ZT1mYWxzZTt3aGlsZSghYyl7QVZjKGEsYix0cnVlKTtlPXRydWU7Yz1SVmMoYSxiKX1lJiZBVmMoYSxiLGZhbHNlKTtkPWRWYyhiKTshIWEuYiYmYS5iLmxnKGQpO2EuYT1QVmMoYSwodENiKDAsYi5jLmxlbmd0aCksQkQoYi5jWzBdLDMzKSkpO1FWYyhhLGQpfX1cbmZ1bmN0aW9uIENpZChhLGIpe3ZhciBjLGQsZTtkPVhLZChhLlRnKCksYik7Yz1iLWEuQWgoKTtpZihjPDApe2lmKCFkKXt0aHJvdyB2YmIobmV3IFdkYihtdGUrYitudGUpKX1lbHNlIGlmKGQuSWooKSl7ZT1hLllnKGQpO2U+PTA/YS5CaChlKTp2aWQoYSxkKX1lbHNle3Rocm93IHZiYihuZXcgV2RiKGl0ZStkLm5lKCkranRlKSl9fWVsc2V7ZWlkKGEsYyxkKX19XG5mdW5jdGlvbiBhcWQoYSl7dmFyIGIsYztjPW51bGw7Yj1mYWxzZTtpZihKRChhLDIwNCkpe2I9dHJ1ZTtjPUJEKGEsMjA0KS5hfWlmKCFiKXtpZihKRChhLDI1OCkpe2I9dHJ1ZTtjPScnK0JEKGEsMjU4KS5hfX1pZighYil7aWYoSkQoYSw0ODMpKXtiPXRydWU7Yz0nJytCRChhLDQ4MykuYX19aWYoIWIpe3Rocm93IHZiYihuZXcgdmNiKFV0ZSkpfXJldHVybiBjfVxuZnVuY3Rpb24gT1JkKGEsYil7dmFyIGMsZDtpZihhLmYpe3doaWxlKGIuT2IoKSl7Yz1CRChiLlBiKCksNzIpO2Q9Yy5haygpO2lmKEpEKGQsOTkpJiYoQkQoZCwxOCkuQmImb3RlKSE9MCYmKCFhLmV8fGQuR2ooKSE9eDJ8fGQuYWooKSE9MCkmJmMuZGQoKSE9bnVsbCl7Yi5VYigpO3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZWxzZXtyZXR1cm4gYi5PYigpfX1cbmZ1bmN0aW9uIFFSZChhLGIpe3ZhciBjLGQ7aWYoYS5mKXt3aGlsZShiLlNiKCkpe2M9QkQoYi5VYigpLDcyKTtkPWMuYWsoKTtpZihKRChkLDk5KSYmKEJEKGQsMTgpLkJiJm90ZSkhPTAmJighYS5lfHxkLkdqKCkhPXgyfHxkLmFqKCkhPTApJiZjLmRkKCkhPW51bGwpe2IuUGIoKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWVsc2V7cmV0dXJuIGIuU2IoKX19XG5mdW5jdGlvbiBJMmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpPVM2ZChhLmUuVGcoKSxiKTtkPTA7aD1hLmk7ZT1CRChhLmcsMTE5KTtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkucmwoZi5haygpKSl7aWYoYz09ZCl7cmV0dXJuIGd9KytkO2g9ZysxfX1pZihjPT1kKXtyZXR1cm4gaH1lbHNle3Rocm93IHZiYihuZXcgcWNiKGd2ZStjK211ZStkKSl9fVxuZnVuY3Rpb24gZDliKGEsYil7dmFyIGMsZCxlLGY7aWYoYS5mLmMubGVuZ3RoPT0wKXtyZXR1cm4gbnVsbH1lbHNle2Y9bmV3IEk2Yztmb3IoZD1uZXcgb2xiKGEuZik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDcwKTtlPWMubztmLmI9JHduZC5NYXRoLm1heChmLmIsZS5hKTtmLmErPWUuYn1mLmErPShhLmYuYy5sZW5ndGgtMSkqYjtyZXR1cm4gZn19XG5mdW5jdGlvbiBRSmMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZT1uZXcgU3IodXIoT19iKGMpLmEuS2MoKSxuZXcgU3EpKTtRcihlKTspe2Q9QkQoUnIoZSksMTcpO2lmKCEoIU9aYihkKSYmISghT1piKGQpJiZkLmMuaS5jPT1kLmQuaS5jKSkpe2NvbnRpbnVlfWY9SUpjKGEsZCxjLG5ldyB2S2MpO2YuYy5sZW5ndGg+MSYmKGIuY1tiLmMubGVuZ3RoXT1mLHRydWUpfX1cbmZ1bmN0aW9uIFRKYyhhKXt2YXIgYixjLGQsZTtjPW5ldyBQc2I7eWUoYyxhLm8pO2Q9bmV3IHR3Yjt3aGlsZShjLmIhPTApe2I9QkQoYy5iPT0wP251bGw6KHNDYihjLmIhPTApLE5zYihjLGMuYS5hKSksNTA4KTtlPUtKYyhhLGIsdHJ1ZSk7ZSYmRWtiKGQuYSxiKX13aGlsZShkLmEuYy5sZW5ndGghPTApe2I9QkQocndiKGQpLDUwOCk7S0pjKGEsYixmYWxzZSl9fVxuZnVuY3Rpb24gXzVjKCl7XzVjPWNjYjskNWM9bmV3IGE2YyhvbGUsMCk7VDVjPW5ldyBhNmMoJ0JPT0xFQU4nLDEpO1g1Yz1uZXcgYTZjKCdJTlQnLDIpO1o1Yz1uZXcgYTZjKCdTVFJJTkcnLDMpO1U1Yz1uZXcgYTZjKCdET1VCTEUnLDQpO1Y1Yz1uZXcgYTZjKCdFTlVNJyw1KTtXNWM9bmV3IGE2YygnRU5VTVNFVCcsNik7WTVjPW5ldyBhNmMoJ09CSkVDVCcsNyl9XG5mdW5jdGlvbiBINmMoYSxiKXt2YXIgYyxkLGUsZixnO2Q9JHduZC5NYXRoLm1pbihhLmMsYi5jKTtmPSR3bmQuTWF0aC5taW4oYS5kLGIuZCk7ZT0kd25kLk1hdGgubWF4KGEuYythLmIsYi5jK2IuYik7Zz0kd25kLk1hdGgubWF4KGEuZCthLmEsYi5kK2IuYSk7aWYoZTxkKXtjPWQ7ZD1lO2U9Y31pZihnPGYpe2M9ZjtmPWc7Zz1jfUc2YyhhLGQsZixlLWQsZy1mKX1cbmZ1bmN0aW9uIE82ZCgpe082ZD1jY2I7TDZkPU9DKEdDKFpJLDEpLG5pZSwyLDYsW3N3ZSx0d2UsdXdlLHZ3ZSx3d2UseHdlLGV1ZV0pO0s2ZD1PQyhHQyhaSSwxKSxuaWUsMiw2LFtzd2UsJ2VtcHR5Jyx0d2UsUXZlLCdlbGVtZW50T25seSddKTtONmQ9T0MoR0MoWkksMSksbmllLDIsNixbc3dlLCdwcmVzZXJ2ZScsJ3JlcGxhY2UnLHl3ZV0pO002ZD1uZXcgeTFkfVxuZnVuY3Rpb24gWSRiKGEsYixjKXt2YXIgZCxlLGY7aWYoYj09Yyl7cmV0dXJufWQ9Yjtkb3tQNmMoYSxkLmMpO2U9ZC5lO2lmKGUpe2Y9ZC5kO082YyhhLGYuYixmLmQpO1A2YyhhLGUubik7ZD1RX2IoZSl9fXdoaWxlKGUpO2Q9Yztkb3tjN2MoYSxkLmMpO2U9ZC5lO2lmKGUpe2Y9ZC5kO2I3YyhhLGYuYixmLmQpO2M3YyhhLGUubik7ZD1RX2IoZSl9fXdoaWxlKGUpfVxuZnVuY3Rpb24gcWljKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoZC5mLmMrZC5nLmM9PTApe2ZvcihnPWEuYVthLmNdLGg9MCxpPWcubGVuZ3RoO2g8aTsrK2gpe2Y9Z1toXTtSaGIoZCxmLG5ldyB6aWMoYSxmLGMpKX19ZT1CRChXZChpcmIoZC5mLGIpKSw2NjMpO2UuYj0wO2UuYz1lLmY7ZS5jPT0wfHxDaWMoQkQoSWtiKGUuYSxlLmIpLDI4NykpO3JldHVybiBlfVxuZnVuY3Rpb24gQXBjKCl7QXBjPWNjYjt3cGM9bmV3IEJwYygnTUVESUFOX0xBWUVSJywwKTt5cGM9bmV3IEJwYygnVEFJTF9MQVlFUicsMSk7dnBjPW5ldyBCcGMoJ0hFQURfTEFZRVInLDIpO3hwYz1uZXcgQnBjKCdTUEFDRV9FRkZJQ0lFTlRfTEFZRVInLDMpO3pwYz1uZXcgQnBjKCdXSURFU1RfTEFZRVInLDQpO3VwYz1uZXcgQnBjKCdDRU5URVJfTEFZRVInLDUpfVxuZnVuY3Rpb24gckpiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOnJldHVybiBVY2QoKSxBY2Q7Y2FzZSAzOmNhc2UgNDpjYXNlIDU6cmV0dXJuIFVjZCgpLFJjZDtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gVWNkKCksVGNkO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6cmV0dXJuIFVjZCgpLHpjZDtkZWZhdWx0OnJldHVybiBVY2QoKSxTY2Q7fX1cbmZ1bmN0aW9uIHNLYyhhLGIpe3ZhciBjO2lmKGEuYy5sZW5ndGg9PTApe3JldHVybiBmYWxzZX1jPUx6YygodENiKDAsYS5jLmxlbmd0aCksQkQoYS5jWzBdLDE3KSkuYy5pKTtGSmMoKTtpZihjPT0oSXpjKCksRnpjKXx8Yz09RXpjKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gRkFiKE5BYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLDE2KSksbmV3IEFLYyksbmV3IENLYyhiKSl9XG5mdW5jdGlvbiBjUmMoYSxiLGMpe3ZhciBkLGUsZjtpZighYS5iW2IuZ10pe2EuYltiLmddPXRydWU7ZD1jOyFkJiYoZD1uZXcgU1JjKTtEc2IoZC5iLGIpO2ZvcihmPWEuYVtiLmddLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksMTg4KTtlLmIhPWImJmNSYyhhLGUuYixkKTtlLmMhPWImJmNSYyhhLGUuYyxkKTtEc2IoZC5hLGUpfXJldHVybiBkfXJldHVybiBudWxsfVxuZnVuY3Rpb24gcVNjKCl7cVNjPWNjYjtwU2M9bmV3IHJTYygnUk9PVF9QUk9DJywwKTtsU2M9bmV3IHJTYygnRkFOX1BST0MnLDEpO25TYz1uZXcgclNjKCdORUlHSEJPUlNfUFJPQycsMik7bVNjPW5ldyByU2MoJ0xFVkVMX0hFSUdIVCcsMyk7b1NjPW5ldyByU2MoJ05PREVfUE9TSVRJT05fUFJPQycsNCk7a1NjPW5ldyByU2MoJ0RFVFJFRUlGWUlOR19QUk9DJyw1KX1cbmZ1bmN0aW9uIGtxZChhLGIpe2lmKEpEKGIsMjM5KSl7cmV0dXJuIGVxZChhLEJEKGIsMzMpKX1lbHNlIGlmKEpEKGIsMTg2KSl7cmV0dXJuIGZxZChhLEJEKGIsMTE4KSl9ZWxzZSBpZihKRChiLDQzOSkpe3JldHVybiBkcWQoYSxCRChiLDIwMikpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoWHRlK0ZlKG5ldyBhbWIoT0MoR0MoU0ksMSksVWhlLDEsNSxbYl0pKSkpKX19XG5mdW5jdGlvbiB4dShhLGIsYyl7dmFyIGQsZTt0aGlzLmY9YTtkPUJEKE9oYihhLmIsYiksMjgzKTtlPSFkPzA6ZC5hO1NiKGMsZSk7aWYoYz49KGUvMnwwKSl7dGhpcy5lPSFkP251bGw6ZC5jO3RoaXMuZD1lO3doaWxlKGMrKzxlKXt2dSh0aGlzKX19ZWxzZXt0aGlzLmM9IWQ/bnVsbDpkLmI7d2hpbGUoYy0tPjApe3V1KHRoaXMpfX10aGlzLmI9Yjt0aGlzLmE9bnVsbH1cbmZ1bmN0aW9uIHJFYihhLGIpe3ZhciBjLGQ7Yi5hP3NFYihhLGIpOihjPUJEKEV4YihhLmIsYi5iKSw1NyksISFjJiZjPT1hLmFbYi5iLmZdJiYhIWMuYSYmYy5hIT1iLmIuYSYmYy5jLkZjKGIuYiksZD1CRChEeGIoYS5iLGIuYiksNTcpLCEhZCYmYS5hW2QuZl09PWIuYiYmISFkLmEmJmQuYSE9Yi5iLmEmJmIuYi5jLkZjKGQpLEZ4YihhLmIsYi5iKSx1bmRlZmluZWQpfVxuZnVuY3Rpb24gRkpiKGEsYil7dmFyIGMsZDtjPUJEKE1wYihhLmIsYiksMTI0KTtpZihCRChCRChRYyhhLnIsYiksMjEpLDg0KS5kYygpKXtjLm4uYj0wO2Mubi5jPTA7cmV0dXJufWMubi5iPWEuQy5iO2Mubi5jPWEuQy5jO2EuQS5IYygodGRkKCksc2RkKSkmJktKYihhLGIpO2Q9SkpiKGEsYik7S0liKGEsYik9PShUYmQoKSxRYmQpJiYoZCs9MiphLncpO2MuYS5hPWR9XG5mdW5jdGlvbiBPS2IoYSxiKXt2YXIgYyxkO2M9QkQoTXBiKGEuYixiKSwxMjQpO2lmKEJEKEJEKFFjKGEucixiKSwyMSksODQpLmRjKCkpe2Mubi5kPTA7Yy5uLmE9MDtyZXR1cm59Yy5uLmQ9YS5DLmQ7Yy5uLmE9YS5DLmE7YS5BLkhjKCh0ZGQoKSxzZGQpKSYmU0tiKGEsYik7ZD1SS2IoYSxiKTtLSWIoYSxiKT09KFRiZCgpLFFiZCkmJihkKz0yKmEudyk7Yy5hLmI9ZH1cbmZ1bmN0aW9uIGNPYihhLGIpe3ZhciBjLGQsZSxmO2Y9bmV3IFJrYjtmb3IoZD1uZXcgb2xiKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw2NSk7RWtiKGYsbmV3IG9PYihjLHRydWUpKTtFa2IoZixuZXcgb09iKGMsZmFsc2UpKX1lPW5ldyBoT2IoYSk7endiKGUuYS5hKTtrRGIoZixhLmIsbmV3IGFtYihPQyhHQyhKTSwxKSxVaGUsNjc5LDAsW2VdKSkpfVxuZnVuY3Rpb24gclFiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2k9YS5hO249YS5iO2o9Yi5hO289Yi5iO2s9Yy5hO3A9Yy5iO2w9ZC5hO3E9ZC5iO2Y9aSpvLW4qajtnPWsqcS1wKmw7ZT0oaS1qKSoocC1xKS0obi1vKSooay1sKTtoPShmKihrLWwpLWcqKGktaikpL2U7bT0oZioocC1xKS1nKihuLW8pKS9lO3JldHVybiBuZXcgZjdjKGgsbSl9XG5mdW5jdGlvbiBUQmMoYSxiKXt2YXIgYyxkLGU7aWYoYS5kW2IucF0pe3JldHVybn1hLmRbYi5wXT10cnVlO2EuYVtiLnBdPXRydWU7Zm9yKGQ9bmV3IFNyKHVyKFVfYihiKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDE3KTtpZihPWmIoYykpe2NvbnRpbnVlfWU9Yy5kLmk7YS5hW2UucF0/RWtiKGEuYixjKTpUQmMoYSxlKX1hLmFbYi5wXT1mYWxzZX1cbmZ1bmN0aW9uIHBDYyhhLGIsYyl7dmFyIGQ7ZD0wO3N3aXRjaChCRCh2TmIoYiwoTnljKCksbXhjKSksMTYzKS5nKXtjYXNlIDI6ZD0yKi1jK2EuYTsrK2EuYTticmVhaztjYXNlIDE6ZD0tYzticmVhaztjYXNlIDM6ZD1jO2JyZWFrO2Nhc2UgNDpkPTIqYythLmI7KythLmI7fXdOYihiLCh3dGMoKSxac2MpKSYmKGQrPUJEKHZOYihiLFpzYyksMTkpLmEpO3JldHVybiBkfVxuZnVuY3Rpb24gak9jKGEsYixjKXt2YXIgZCxlLGY7Yy56YyhiLGEpO0VrYihhLm4sYik7Zj1hLnAuZWcoYik7Yi5qPT1hLnAuZmcoKT95T2MoYS5lLGYpOnlPYyhhLmosZik7bE9jKGEpO2ZvcihlPXVsKHBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFtuZXcgSjBiKGIpLG5ldyBSMGIoYildKSkpO1FyKGUpOyl7ZD1CRChScihlKSwxMSk7Yy5fYihkKXx8ak9jKGEsZCxjKX19XG5mdW5jdGlvbiByZmQoYSl7dmFyIGIsYyxkO2M9QkQoaGtkKGEsKFk5YygpLFk4YykpLDIxKTtpZihjLkhjKCh0ZGQoKSxwZGQpKSl7ZD1CRChoa2QoYSxiOWMpLDIxKTtiPW5ldyBnN2MoQkQoaGtkKGEsXzhjKSw4KSk7aWYoZC5IYygoSWRkKCksQmRkKSkpe2IuYTw9MCYmKGIuYT0yMCk7Yi5iPD0wJiYoYi5iPTIwKX1yZXR1cm4gYn1lbHNle3JldHVybiBuZXcgZDdjfX1cbmZ1bmN0aW9uIFBLZChhKXt2YXIgYixjLGQ7aWYoIWEuYil7ZD1uZXcgJE5kO2ZvcihjPW5ldyAkeWQoU0tkKGEpKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChaeWQoYyksMTgpOyhiLkJiJm90ZSkhPTAmJnd0ZChkLGIpfXZ1ZChkKTthLmI9bmV3IG5OZCgoQkQocXVkKFpLZCgoTkZkKCksTUZkKS5vKSw4KSwxOCksZC5pKSxkLmcpOyRLZChhKS5iJj0tOX1yZXR1cm4gYS5ifVxuZnVuY3Rpb24gUm1jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpPUJEKEVlKEVjKGIuayksS0MoRjEsYm5lLDYxLDIsMCwxKSksMTIyKTtqPWIuZztjPVRtYyhiLGlbMF0pO2U9U21jKGIsaVsxXSk7ZD1LbWMoYSxqLGMsZSk7Zj1UbWMoYixpWzFdKTtoPVNtYyhiLGlbMF0pO2c9S21jKGEsaixmLGgpO2lmKGQ8PWcpe2IuYT1jO2IuYz1lfWVsc2V7Yi5hPWY7Yi5jPWh9fVxuZnVuY3Rpb24gRVNjKGEsYixjKXt2YXIgZCxlLGY7T2RkKGMsJ1Byb2Nlc3NvciBzZXQgbmVpZ2hib3JzJywxKTthLmE9Yi5iLmI9PTA/MTpiLmIuYjtlPW51bGw7ZD1Kc2IoYi5iLDApO3doaWxlKCFlJiZkLmIhPWQuZC5jKXtmPUJEKFhzYihkKSw4Nik7Q2NiKEREKHZOYihmLChtVGMoKSxqVGMpKSkpJiYoZT1mKX0hIWUmJkZTYyhhLG5ldyBaUmMoZSksYyk7UWRkKGMpfVxuZnVuY3Rpb24gUEVkKGEpe0lFZCgpO3ZhciBiLGMsZCxlO2Q9aGZiKGEsd2ZiKDM1KSk7Yj1kPT0tMT9hOmEuc3Vic3RyKDAsZCk7Yz1kPT0tMT9udWxsOmEuc3Vic3RyKGQrMSk7ZT1rRmQoSEVkLGIpO2lmKCFlKXtlPWFGZChiKTtsRmQoSEVkLGIsZSk7YyE9bnVsbCYmKGU9SkVkKGUsYykpfWVsc2UgYyE9bnVsbCYmKGU9SkVkKGUsKHVDYihjKSxjKSkpO3JldHVybiBlfVxuZnVuY3Rpb24gc21iKGEpe3ZhciBoO21tYigpO3ZhciBiLGMsZCxlLGYsZztpZihKRChhLDU0KSl7Zm9yKGU9MCxkPWEuZ2MoKS0xO2U8ZDsrK2UsLS1kKXtoPWEuWGIoZSk7YS5fYyhlLGEuWGIoZCkpO2EuX2MoZCxoKX19ZWxzZXtiPWEuWWMoKTtmPWEuWmMoYS5nYygpKTt3aGlsZShiLlRiKCk8Zi5WYigpKXtjPWIuUGIoKTtnPWYuVWIoKTtiLldiKGcpO2YuV2IoYyl9fX1cbmZ1bmN0aW9uIEkzYihhLGIpe3ZhciBjLGQsZTtPZGQoYiwnRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nJywxKTtjPUVkYihFRCh2TmIoYSwoTnljKCksbnljKSkpKTtkPUVkYihFRCh2TmIoYSxyeWMpKSk7ZT1nYWQoQkQodk5iKGEsTHdjKSwxMDMpKTtNQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuYiwxNikpLG5ldyBRM2IpLG5ldyBTM2IoYyxkLGUpKTtRZGQoYil9XG5mdW5jdGlvbiBORmMoYSxiKXt2YXIgYyxkLGUsZixnLGg7aD0wO2Y9bmV3IGprYjtXamIoZixiKTt3aGlsZShmLmIhPWYuYyl7Zz1CRChma2IoZiksMjE0KTtoKz1wSGMoZy5kLGcuZSk7Zm9yKGU9bmV3IG9sYihnLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwzNyk7Yz1CRChJa2IoYS5iLGQucCksMjE0KTtjLnN8fChoKz1ORmMoYSxjKSl9fXJldHVybiBofVxuZnVuY3Rpb24gWVFjKGEsYixjKXt2YXIgZCxlO1RRYyh0aGlzKTtiPT0oRlFjKCksRFFjKT9RcWIodGhpcy5yLGEuYyk6UXFiKHRoaXMudyxhLmMpO2M9PURRYz9RcWIodGhpcy5yLGEuZCk6UXFiKHRoaXMudyxhLmQpO1VRYyh0aGlzLGEpO2Q9VlFjKGEuYyk7ZT1WUWMoYS5kKTtYUWModGhpcyxkLGUsZSk7dGhpcy5vPShoUWMoKSwkd25kLk1hdGguYWJzKGQtZSk8MC4yKX1cbmZ1bmN0aW9uIGEwZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2g9QkQoQWpkKGEuYSw4KSwxOTM2KTtpZihoIT1udWxsKXtmb3IoZT1oLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype251bGwuam0oKX19ZD1jO2lmKChhLmEuRGImMSk9PTApe2k9bmV3IGYwZChhLGMsYik7ZC51aShpKX1KRChkLDY3Mik/QkQoZCw2NzIpLndpKGEuYSk6ZC50aSgpPT1hLmEmJmQudmkobnVsbCl9XG5mdW5jdGlvbiBkYWUoKXt2YXIgYTtpZihaOWQpcmV0dXJuIEJEKG5VZCgoeUZkKCkseEZkKSxFd2UpLDE5NDUpO2VhZSgpO2E9QkQoSkQoUGhiKCh5RmQoKSx4RmQpLEV3ZSksNTg2KT9QaGIoeEZkLEV3ZSk6bmV3IGNhZSw1ODYpO1o5ZD10cnVlO2FhZShhKTtiYWUoYSk7UmhiKChKRmQoKSxJRmQpLGEsbmV3IGZhZSk7VG5kKGEpO1NoYih4RmQsRXdlLGEpO3JldHVybiBhfVxuZnVuY3Rpb24geEEoYSxiLGMsZCl7dmFyIGU7ZT1vQShhLGMsT0MoR0MoWkksMSksbmllLDIsNixbcmplLHNqZSx0amUsdWplLHZqZSx3amUseGplXSksYik7ZTwwJiYoZT1vQShhLGMsT0MoR0MoWkksMSksbmllLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKSxiKSk7aWYoZTwwKXtyZXR1cm4gZmFsc2V9ZC5kPWU7cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBBQShhLGIsYyxkKXt2YXIgZTtlPW9BKGEsYyxPQyhHQyhaSSwxKSxuaWUsMiw2LFtyamUsc2plLHRqZSx1amUsdmplLHdqZSx4amVdKSxiKTtlPDAmJihlPW9BKGEsYyxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J10pLGIpKTtpZihlPDApe3JldHVybiBmYWxzZX1kLmQ9ZTtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIE5WYihhKXt2YXIgYixjLGQ7S1ZiKGEpO2Q9bmV3IFJrYjtmb3IoYz1uZXcgb2xiKGEuYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw4MSk7RWtiKGQsbmV3IFpWYihiLHRydWUpKTtFa2IoZCxuZXcgWlZiKGIsZmFsc2UpKX1SVmIoYS5jKTtyWGIoZCxhLmIsbmV3IGFtYihPQyhHQyhiUSwxKSxVaGUsMzY5LDAsW2EuY10pKSk7TVZiKGEpfVxuZnVuY3Rpb24gYzRiKGEpe3ZhciBiLGMsZCxlO2M9bmV3IExxYjtmb3IoZT1uZXcgb2xiKGEuZCk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE4MSk7Yj1CRChkLldlKCh3dGMoKSxEc2MpKSwxNyk7ISFpcmIoYy5mLGIpfHxSaGIoYyxiLG5ldyBwNGIoYikpO0VrYihCRChXZChpcmIoYy5mLGIpKSw0NTYpLmIsZCl9cmV0dXJuIG5ldyBUa2IobmV3ICRpYihjKSl9XG5mdW5jdGlvbiBHYWMoYSxiKXt2YXIgYyxkLGUsZixnO2Q9bmV3IGtrYihhLmouYy5sZW5ndGgpO2M9bnVsbDtmb3IoZj1uZXcgb2xiKGEuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDExKTtpZihlLmohPWMpe2QuYj09ZC5jfHxIYWMoZCxjLGIpO1lqYihkKTtjPWUuan1nPU4zYihlKTshIWcmJihYamIoZCxnKSx0cnVlKX1kLmI9PWQuY3x8SGFjKGQsYyxiKX1cbmZ1bmN0aW9uIHdiYyhhLGIpe3ZhciBjLGQsZTtkPW5ldyBCaWIoYS5iLDApO3doaWxlKGQuYjxkLmQuZ2MoKSl7Yz0oc0NiKGQuYjxkLmQuZ2MoKSksQkQoZC5kLlhiKGQuYz1kLmIrKyksNzApKTtlPUJEKHZOYihjLChOeWMoKSxRd2MpKSwyNzIpO2lmKGU9PShxYWQoKSxvYWQpKXt1aWIoZCk7RWtiKGIuYixjKTt3TmIoYywod3RjKCksRHNjKSl8fHlOYihjLERzYyxhKX19fVxuZnVuY3Rpb24gR0RjKGEpe3ZhciBiLGMsZCxlLGY7Yj1zcihuZXcgU3IodXIoVV9iKGEpLmEuS2MoKSxuZXcgU3EpKSk7Zm9yKGU9bmV3IFNyKHVyKFJfYihhKS5hLktjKCksbmV3IFNxKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDE3KTtjPWQuYy5pO2Y9c3IobmV3IFNyKHVyKFVfYihjKS5hLktjKCksbmV3IFNxKSkpO2I9JHduZC5NYXRoLm1heChiLGYpfXJldHVybiBtZWIoYil9XG5mdW5jdGlvbiByVWMoYSxiLGMpe3ZhciBkLGUsZixnO09kZChjLCdQcm9jZXNzb3IgYXJyYW5nZSBub2RlJywxKTtlPW51bGw7Zj1uZXcgUHNiO2Q9SnNiKGIuYiwwKTt3aGlsZSghZSYmZC5iIT1kLmQuYyl7Zz1CRChYc2IoZCksODYpO0NjYihERCh2TmIoZywobVRjKCksalRjKSkpKSYmKGU9Zyl9R3NiKGYsZSxmLmMuYixmLmMpO3FVYyhhLGYsVWRkKGMsMSkpO1FkZChjKX1cbmZ1bmN0aW9uIEZmZChhLGIsYyl7dmFyIGQsZSxmO2Q9QkQoaGtkKGEsKFk5YygpLHc4YykpLDIxKTtlPTA7Zj0wO2IuYT5jLmEmJihkLkhjKChpOGMoKSxjOGMpKT8oZT0oYi5hLWMuYSkvMik6ZC5IYyhlOGMpJiYoZT1iLmEtYy5hKSk7Yi5iPmMuYiYmKGQuSGMoKGk4YygpLGc4YykpPyhmPShiLmItYy5iKS8yKTpkLkhjKGY4YykmJihmPWIuYi1jLmIpKTtFZmQoYSxlLGYpfVxuZnVuY3Rpb24gYW9kKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0pe0pEKGEuQ2IsODgpJiZYTWQoJEtkKEJEKGEuQ2IsODgpKSw0KTtwbmQoYSxjKTthLmY9ZztkSmQoYSxoKTtmSmQoYSxpKTtaSWQoYSxqKTtlSmQoYSxrKTtDSWQoYSxsKTthSmQoYSxtKTtCSWQoYSx0cnVlKTtBSWQoYSxlKTthLm9rKGYpO3lJZChhLGIpO2QhPW51bGwmJihhLmk9bnVsbCxfSWQoYSxkKSl9XG5mdW5jdGlvbiBQUmQoYSl7dmFyIGIsYztpZihhLmYpe3doaWxlKGEubj4wKXtiPUJEKGEuay5YYihhLm4tMSksNzIpO2M9Yi5haygpO2lmKEpEKGMsOTkpJiYoQkQoYywxOCkuQmImb3RlKSE9MCYmKCFhLmV8fGMuR2ooKSE9eDJ8fGMuYWooKSE9MCkmJmIuZGQoKSE9bnVsbCl7cmV0dXJuIHRydWV9ZWxzZXstLWEubn19cmV0dXJuIGZhbHNlfWVsc2V7cmV0dXJuIGEubj4wfX1cbmZ1bmN0aW9uIEpiKGEsYixjKXtpZihhPDApe3JldHVybiBoYyhUaGUsT0MoR0MoU0ksMSksVWhlLDEsNSxbYyxtZWIoYSldKSl9ZWxzZSBpZihiPDApe3Rocm93IHZiYihuZXcgV2RiKFZoZStiKSl9ZWxzZXtyZXR1cm4gaGMoJyVzICglcykgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHNpemUgKCVzKScsT0MoR0MoU0ksMSksVWhlLDEsNSxbYyxtZWIoYSksbWViKGIpXSkpfX1cbmZ1bmN0aW9uIExsYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo7Zz1kLWM7aWYoZzw3KXtJbGIoYixjLGQsZik7cmV0dXJufWk9YytlO2g9ZCtlO2o9aSsoaC1pPj4xKTtMbGIoYixhLGksaiwtZSxmKTtMbGIoYixhLGosaCwtZSxmKTtpZihmLnVlKGFbai0xXSxhW2pdKTw9MCl7d2hpbGUoYzxkKXtOQyhiLGMrKyxhW2krK10pfXJldHVybn1KbGIoYSxpLGosaCxiLGMsZCxmKX1cbmZ1bmN0aW9uIG5FYihhLGIpe3ZhciBjLGQsZTtlPW5ldyBSa2I7Zm9yKGQ9bmV3IG9sYihhLmMuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNTcpO2lmKGIuTGIoYykpe0VrYihlLG5ldyBCRWIoYyx0cnVlKSk7RWtiKGUsbmV3IEJFYihjLGZhbHNlKSl9fXRFYihhLmUpO2tEYihlLGEuZCxuZXcgYW1iKE9DKEdDKEpNLDEpLFVoZSw2NzksMCxbYS5lXSkpKX1cbmZ1bmN0aW9uIGduYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2k9Yi5kO2U9Yi5iLmo7Zm9yKGg9bmV3IG9sYihpKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTAxKTtmPUtDKHNiYixkbGUsMjUsZS5jLmxlbmd0aCwxNiwxKTtSaGIoYS5iLGcsZik7Yz1nLmEuZC5wLTE7ZD1nLmMuZC5wO3doaWxlKGMhPWQpe2M9KGMrMSklZS5jLmxlbmd0aDtmW2NdPXRydWV9fX1cbmZ1bmN0aW9uIHRPYyhhLGIpe2Eucj1uZXcgdU9jKGEucCk7c09jKGEucixhKTt5ZShhLnIuaixhLmopO09zYihhLmopO0RzYihhLmosYik7RHNiKGEuci5lLGIpO2xPYyhhKTtsT2MoYS5yKTt3aGlsZShhLmYuYy5sZW5ndGghPTApe0FPYyhCRChJa2IoYS5mLDApLDEyOSkpfXdoaWxlKGEuay5jLmxlbmd0aCE9MCl7QU9jKEJEKElrYihhLmssMCksMTI5KSl9cmV0dXJuIGEucn1cbmZ1bmN0aW9uIHlpZChhLGIsYyl7dmFyIGQsZSxmO2U9WEtkKGEuVGcoKSxiKTtkPWItYS5BaCgpO2lmKGQ8MCl7aWYoIWUpe3Rocm93IHZiYihuZXcgV2RiKG10ZStiK250ZSkpfWVsc2UgaWYoZS5JaigpKXtmPWEuWWcoZSk7Zj49MD9hLnNoKGYsYyk6dWlkKGEsZSxjKX1lbHNle3Rocm93IHZiYihuZXcgV2RiKGl0ZStlLm5lKCkranRlKSl9fWVsc2V7ZGlkKGEsZCxlLGMpfX1cbmZ1bmN0aW9uIHE2ZChiKXt2YXIgYyxkLGUsZjtkPUJEKGIsNDkpLnFoKCk7aWYoZCl7dHJ5e2U9bnVsbDtjPW5VZCgoeUZkKCkseEZkKSxMRWQoTUVkKGQpKSk7aWYoYyl7Zj1jLnJoKCk7ISFmJiYoZT1mLldrKHRmYihkLmUpKSl9aWYoISFlJiZlIT1iKXtyZXR1cm4gcTZkKGUpfX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSw2MCkpdGhyb3cgdmJiKGEpfX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGpyYihhLGIsYyl7dmFyIGQsZSxmLGc7Zz1iPT1udWxsPzA6YS5iLnNlKGIpO2U9KGQ9YS5hLmdldChnKSxkPT1udWxsP25ldyBBcnJheTpkKTtpZihlLmxlbmd0aD09MCl7YS5hLnNldChnLGUpfWVsc2V7Zj1ncmIoYSxiLGUpO2lmKGYpe3JldHVybiBmLmVkKGMpfX1OQyhlLGUubGVuZ3RoLG5ldyBwamIoYixjKSk7KythLmM7enBiKGEuYik7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBZVWMoYSxiKXt2YXIgYyxkO0gyYyhhLmEpO0syYyhhLmEsKFBVYygpLE5VYyksTlVjKTtLMmMoYS5hLE9VYyxPVWMpO2Q9bmV3IGozYztlM2MoZCxPVWMsKHRWYygpLHNWYykpO1BEKGhrZChiLChaV2MoKSxMV2MpKSkhPT1QRCgocFdjKCksbVdjKSkmJmUzYyhkLE9VYyxxVmMpO2UzYyhkLE9VYyxyVmMpO0UyYyhhLmEsZCk7Yz1GMmMoYS5hLGIpO3JldHVybiBjfVxuZnVuY3Rpb24gdUMoYSl7aWYoIWEpe3JldHVybiBPQigpLE5CfXZhciBiPWEudmFsdWVPZj9hLnZhbHVlT2YoKTphO2lmKGIhPT1hKXt2YXIgYz1xQ1t0eXBlb2YgYl07cmV0dXJuIGM/YyhiKTp4Qyh0eXBlb2YgYil9ZWxzZSBpZihhIGluc3RhbmNlb2YgQXJyYXl8fGEgaW5zdGFuY2VvZiAkd25kLkFycmF5KXtyZXR1cm4gbmV3IHhCKGEpfWVsc2V7cmV0dXJuIG5ldyBmQyhhKX19XG5mdW5jdGlvbiBSSmIoYSxiLGMpe3ZhciBkLGUsZjtmPWEubztkPUJEKE1wYihhLnAsYyksMjQ0KTtlPWQuaTtlLmI9Z0liKGQpO2UuYT1mSWIoZCk7ZS5iPSR3bmQuTWF0aC5tYXgoZS5iLGYuYSk7ZS5iPmYuYSYmIWImJihlLmI9Zi5hKTtlLmM9LShlLmItZi5hKS8yO3N3aXRjaChjLmcpe2Nhc2UgMTplLmQ9LWUuYTticmVhaztjYXNlIDM6ZS5kPWYuYjt9aEliKGQpO2lJYihkKX1cbmZ1bmN0aW9uIFNKYihhLGIsYyl7dmFyIGQsZSxmO2Y9YS5vO2Q9QkQoTXBiKGEucCxjKSwyNDQpO2U9ZC5pO2UuYj1nSWIoZCk7ZS5hPWZJYihkKTtlLmE9JHduZC5NYXRoLm1heChlLmEsZi5iKTtlLmE+Zi5iJiYhYiYmKGUuYT1mLmIpO2UuZD0tKGUuYS1mLmIpLzI7c3dpdGNoKGMuZyl7Y2FzZSA0OmUuYz0tZS5iO2JyZWFrO2Nhc2UgMjplLmM9Zi5hO31oSWIoZCk7aUliKGQpfVxuZnVuY3Rpb24gSmdjKGEsYil7dmFyIGMsZCxlLGYsZztpZihiLmRjKCkpe3JldHVybn1lPUJEKGIuWGIoMCksMTI4KTtpZihiLmdjKCk9PTEpe0lnYyhhLGUsZSwxLDAsYik7cmV0dXJufWM9MTt3aGlsZShjPGIuZ2MoKSl7aWYoZS5qfHwhZS5vKXtmPU9nYyhiLGMpO2lmKGYpe2Q9QkQoZi5hLDE5KS5hO2c9QkQoZi5iLDEyOCk7SWdjKGEsZSxnLGMsZCxiKTtjPWQrMTtlPWd9fX19XG5mdW5jdGlvbiBtbGMoYSl7dmFyIGIsYyxkLGUsZixnO2c9bmV3IFRrYihhLmQpO09rYihnLG5ldyBRbGMpO2I9KEFsYygpLE9DKEdDKEtWLDEpLEtpZSwyNzAsMCxbdGxjLHdsYyxzbGMsemxjLHZsYyx1bGMseWxjLHhsY10pKTtjPTA7Zm9yKGY9bmV3IG9sYihnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTAxKTtkPWJbYyViLmxlbmd0aF07b2xjKGUsZCk7KytjfX1cbmZ1bmN0aW9uIG82YyhhLGIpe2k2YygpO3ZhciBjLGQsZSxmO2lmKGIuYjwyKXtyZXR1cm4gZmFsc2V9Zj1Kc2IoYiwwKTtjPUJEKFhzYihmKSw4KTtkPWM7d2hpbGUoZi5iIT1mLmQuYyl7ZT1CRChYc2IoZiksOCk7aWYoIShtNmMoYSxkKSYmbTZjKGEsZSkpKXtyZXR1cm4gZmFsc2V9ZD1lfWlmKCEobTZjKGEsZCkmJm02YyhhLGMpKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gaHJkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7az1udWxsO2w9YTtnPVhwZChsLCd4Jyk7Yz1uZXcgS3JkKGIpO0dxZChjLmEsZyk7aD1YcGQobCwneScpO2Q9bmV3IExyZChiKTtIcWQoZC5hLGgpO2k9WHBkKGwsR3RlKTtlPW5ldyBNcmQoYik7SXFkKGUuYSxpKTtqPVhwZChsLEZ0ZSk7Zj1uZXcgTnJkKGIpO2s9KEpxZChmLmEsaiksaik7cmV0dXJuIGt9XG5mdW5jdGlvbiBYTWQoYSxiKXtUTWQoYSxiKTsoYS5iJjEpIT0wJiYoYS5hLmE9bnVsbCk7KGEuYiYyKSE9MCYmKGEuYS5mPW51bGwpO2lmKChhLmImNCkhPTApe2EuYS5nPW51bGw7YS5hLmk9bnVsbH1pZigoYS5iJjE2KSE9MCl7YS5hLmQ9bnVsbDthLmEuZT1udWxsfShhLmImOCkhPTAmJihhLmEuYj1udWxsKTtpZigoYS5iJjMyKSE9MCl7YS5hLmo9bnVsbDthLmEuYz1udWxsfX1cbmZ1bmN0aW9uIGwwZChiLGMpe3ZhciBkLGUsZjtmPTA7aWYoYy5sZW5ndGg+MCl7dHJ5e2Y9SWNiKGMsUmllLE9oZSl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMjcpKXtlPWE7dGhyb3cgdmJiKG5ldyByRmQoZSkpfWVsc2UgdGhyb3cgdmJiKGEpfX1kPSghYi5hJiYoYi5hPW5ldyB6MGQoYikpLGIuYSk7cmV0dXJuIGY8ZC5pJiZmPj0wP0JEKHF1ZChkLGYpLDU2KTpudWxsfVxuZnVuY3Rpb24gSWIoYSxiKXtpZihhPDApe3JldHVybiBoYyhUaGUsT0MoR0MoU0ksMSksVWhlLDEsNSxbJ2luZGV4JyxtZWIoYSldKSl9ZWxzZSBpZihiPDApe3Rocm93IHZiYihuZXcgV2RiKFZoZStiKSl9ZWxzZXtyZXR1cm4gaGMoJyVzICglcykgbXVzdCBiZSBsZXNzIHRoYW4gc2l6ZSAoJXMpJyxPQyhHQyhTSSwxKSxVaGUsMSw1LFsnaW5kZXgnLG1lYihhKSxtZWIoYildKSl9fVxuZnVuY3Rpb24gU2xiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1mPW5ldyB4d2IoU2hlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2ZiKGYuZCkpOlFmYihmLmEsZi5iKTtOZmIoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfVxuZnVuY3Rpb24gVGxiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1mPW5ldyB4d2IoU2hlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2ZiKGYuZCkpOlFmYihmLmEsZi5iKTtOZmIoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfVxuZnVuY3Rpb24gVWxiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1mPW5ldyB4d2IoU2hlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2ZiKGYuZCkpOlFmYihmLmEsZi5iKTtOZmIoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfVxuZnVuY3Rpb24gWGxiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1mPW5ldyB4d2IoU2hlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2ZiKGYuZCkpOlFmYihmLmEsZi5iKTtOZmIoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfVxuZnVuY3Rpb24gYnViKGEsYil7dmFyIGMsZCxlLGYsZyxoO2M9YS5iLmMubGVuZ3RoO2U9SWtiKGEuYixiKTt3aGlsZShiKjIrMTxjKXtkPShmPTIqYisxLGc9ZisxLGg9ZixnPGMmJmEuYS51ZShJa2IoYS5iLGcpLElrYihhLmIsZikpPDAmJihoPWcpLGgpO2lmKGEuYS51ZShlLElrYihhLmIsZCkpPDApe2JyZWFrfU5rYihhLmIsYixJa2IoYS5iLGQpKTtiPWR9TmtiKGEuYixiLGUpfVxuZnVuY3Rpb24gJEJiKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrO2lmKFBEKGEpPT09UEQoYykpe2E9YS5zbGljZShiLGIrZSk7Yj0wfWk9Yztmb3IoaD1iLGo9YitlO2g8ajspe2c9JHduZC5NYXRoLm1pbihoKzEwMDAwLGopO2U9Zy1oO2s9YS5zbGljZShoLGcpO2suc3BsaWNlKDAsMCxkLGY/ZTowKTtBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGksayk7aD1nO2QrPWV9fVxuZnVuY3Rpb24geEdiKGEsYixjKXt2YXIgZCxlO2Q9Yy5kO2U9Yy5lO2lmKGEuZ1tkLmRdPD1hLmlbYi5kXSYmYS5pW2IuZF08PWEuaVtkLmRdJiZhLmdbZS5kXTw9YS5pW2IuZF0mJmEuaVtiLmRdPD1hLmlbZS5kXSl7aWYoYS5pW2QuZF08YS5pW2UuZF0pe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1pZihhLmlbZC5kXTxhLmlbZS5kXSl7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gY1JiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2Q9YS5hLmMubGVuZ3RoO2lmKGQ+MCl7Zz1hLmMuZDtoPWEuZC5kO2U9WTZjKGM3YyhuZXcgZjdjKGguYSxoLmIpLGcpLDEvKGQrMSkpO2Y9bmV3IGY3YyhnLmEsZy5iKTtmb3IoYz1uZXcgb2xiKGEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDU1OSk7Yi5kLmE9Zi5hO2IuZC5iPWYuYjtQNmMoZixlKX19fVxuZnVuY3Rpb24gWU5iKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aT1QamU7Zm9yKGY9bmV3IG9sYih3T2IoYS5iKSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDE2OCk7Zm9yKGg9bmV3IG9sYih3T2IoYi5iKSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDE2OCk7ZD1wNmMoZS5hLGUuYixnLmEsZy5iLGMpO2k9JHduZC5NYXRoLm1pbihpLGQpfX1yZXR1cm4gaX1cbmZ1bmN0aW9uIEcwYihhLGIpe2lmKCFiKXt0aHJvdyB2YmIobmV3IEdlYil9YS5qPWI7aWYoIWEuZCl7c3dpdGNoKGEuai5nKXtjYXNlIDE6YS5hLmE9YS5vLmEvMjthLmEuYj0wO2JyZWFrO2Nhc2UgMjphLmEuYT1hLm8uYTthLmEuYj1hLm8uYi8yO2JyZWFrO2Nhc2UgMzphLmEuYT1hLm8uYS8yO2EuYS5iPWEuby5iO2JyZWFrO2Nhc2UgNDphLmEuYT0wO2EuYS5iPWEuby5iLzI7fX19XG5mdW5jdGlvbiBkZmMoYSxiKXt2YXIgYyxkLGU7aWYoSkQoYi5nLDEwKSYmQkQoYi5nLDEwKS5rPT0oajBiKCksZTBiKSl7cmV0dXJuIFBqZX1lPXVnYyhiKTtpZihlKXtyZXR1cm4gJHduZC5NYXRoLm1heCgwLGEuYi8yLTAuNSl9Yz10Z2MoYik7aWYoYyl7ZD1FZGIoRUQocEJjKGMsKE55YygpLHZ5YykpKSk7cmV0dXJuICR3bmQuTWF0aC5tYXgoMCxkLzItMC41KX1yZXR1cm4gUGplfVxuZnVuY3Rpb24gZmZjKGEsYil7dmFyIGMsZCxlO2lmKEpEKGIuZywxMCkmJkJEKGIuZywxMCkuaz09KGowYigpLGUwYikpe3JldHVybiBQamV9ZT11Z2MoYik7aWYoZSl7cmV0dXJuICR3bmQuTWF0aC5tYXgoMCxhLmIvMi0wLjUpfWM9dGdjKGIpO2lmKGMpe2Q9RWRiKEVEKHBCYyhjLChOeWMoKSx2eWMpKSkpO3JldHVybiAkd25kLk1hdGgubWF4KDAsZC8yLTAuNSl9cmV0dXJuIFBqZX1cbmZ1bmN0aW9uIHhpYyhhKXt2YXIgYixjLGQsZSxmLGc7Zz1DSGMoYS5kLGEuZSk7Zm9yKGY9Zy5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDExKTtkPWEuZT09KFVjZCgpLFRjZCk/ZS5lOmUuZztmb3IoYz1uZXcgb2xiKGQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxNyk7aWYoIU9aYihiKSYmYi5jLmkuYyE9Yi5kLmkuYyl7dGljKGEsYik7KythLmY7KythLmN9fX19XG5mdW5jdGlvbiB0cGMoYSxiKXt2YXIgYyxkO2lmKGIuZGMoKSl7cmV0dXJuIG1tYigpLG1tYigpLGptYn1kPW5ldyBSa2I7RWtiKGQsbWViKFJpZSkpO2ZvcihjPTE7YzxhLmY7KytjKXthLmE9PW51bGwmJlRvYyhhKTthLmFbY10mJkVrYihkLG1lYihjKSl9aWYoZC5jLmxlbmd0aD09MSl7cmV0dXJuIG1tYigpLG1tYigpLGptYn1Fa2IoZCxtZWIoT2hlKSk7cmV0dXJuIHNwYyhiLGQpfVxuZnVuY3Rpb24gTUpjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Zz1iLmMuaS5rIT0oajBiKCksaDBiKTtpPWc/Yi5kOmIuYztjPU1aYihiLGkpLmk7ZT1CRChPaGIoYS5rLGkpLDEyMSk7ZD1hLmlbYy5wXS5hO2lmKFNfYihpLmkpPCghYy5jPy0xOkprYihjLmMuYSxjLDApKSl7Zj1lO2g9ZH1lbHNle2Y9ZDtoPWV9QUZiKERGYihDRmIoRUZiKEJGYihuZXcgRkZiLDApLDQpLGYpLGgpKX1cbmZ1bmN0aW9uIG9xZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKGMpe2U9Yy5hLmxlbmd0aDtkPW5ldyBZZ2UoZSk7Zm9yKGg9KGQuYi1kLmEpKmQuYzwwPyhYZ2UoKSxXZ2UpOm5ldyBzaGUoZCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTkpO2k9V3FkKGEsVnBkKHRCKGMsZy5hKSkpO2lmKGkpe2Y9KCFiLmImJihiLmI9bmV3IHk1ZCh6MixiLDQsNykpLGIuYik7d3RkKGYsaSl9fX19XG5mdW5jdGlvbiBwcWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpZihjKXtlPWMuYS5sZW5ndGg7ZD1uZXcgWWdlKGUpO2ZvcihoPShkLmItZC5hKSpkLmM8MD8oWGdlKCksV2dlKTpuZXcgc2hlKGQpO2guT2IoKTspe2c9QkQoaC5QYigpLDE5KTtpPVdxZChhLFZwZCh0QihjLGcuYSkpKTtpZihpKXtmPSghYi5jJiYoYi5jPW5ldyB5NWQoejIsYiw1LDgpKSxiLmMpO3d0ZChmLGkpfX19fVxuZnVuY3Rpb24gcG8oYSxiLGMpe3ZhciBkLGU7ZD1iLmEmYS5mO2IuYj1hLmJbZF07YS5iW2RdPWI7ZT1iLmYmYS5mO2IuZD1hLmNbZV07YS5jW2VdPWI7aWYoIWMpe2IuZT1hLmU7Yi5jPW51bGw7IWEuZT8oYS5hPWIpOihhLmUuYz1iKTthLmU9Yn1lbHNle2IuZT1jLmU7IWIuZT8oYS5hPWIpOihiLmUuYz1iKTtiLmM9Yy5jOyFiLmM/KGEuZT1iKTooYi5jLmU9Yil9KythLmk7KythLmd9XG5mdW5jdGlvbiBxcihhKXt2YXIgYixjLGQ7Yj1hLlBiKCk7aWYoIWEuT2IoKSl7cmV0dXJuIGJ9ZD1QZmIoUWZiKG5ldyBVZmIsJ2V4cGVjdGVkIG9uZSBlbGVtZW50IGJ1dCB3YXM6IDwnKSxiKTtmb3IoYz0wO2M8NCYmYS5PYigpO2MrKyl7UGZiKChkLmErPVNoZSxkKSxhLlBiKCkpfWEuT2IoKSYmKGQuYSs9JywgLi4uJyxkKTtkLmErPSc+Jzt0aHJvdyB2YmIobmV3IFdkYihkLmEpKX1cbmZ1bmN0aW9uIGx0KGEsYil7dmFyIGM7Yi5kPyhiLmQuYj1iLmIpOihhLmE9Yi5iKTtiLmI/KGIuYi5kPWIuZCk6KGEuZT1iLmQpO2lmKCFiLmUmJiFiLmMpe2M9QkQoVGhiKGEuYixiLmEpLDI4Myk7Yy5hPTA7KythLmN9ZWxzZXtjPUJEKE9oYihhLmIsYi5hKSwyODMpOy0tYy5hOyFiLmU/KGMuYj1iLmMpOihiLmUuYz1iLmMpOyFiLmM/KGMuYz1iLmUpOihiLmMuZT1iLmUpfS0tYS5kfVxuZnVuY3Rpb24gT0EoYSl7dmFyIGIsYztjPS1hLmE7Yj1PQyhHQyhURCwxKSwkaWUsMjUsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSk7aWYoYzwwKXtiWzBdPTQ1O2M9LWN9YlsxXT1iWzFdKygoYy82MHwwKS8xMHwwKSZhamU7YlsyXT1iWzJdKyhjLzYwfDApJTEwJmFqZTtiWzNdPWJbM10rKGMlNjAvMTB8MCkmYWplO2JbNF09Yls0XStjJTEwJmFqZTtyZXR1cm4gemZiKGIsMCxiLmxlbmd0aCl9XG5mdW5jdGlvbiB1UmIoYSxiLGMpe3ZhciBkLGU7ZD1iLmQ7ZT1jLmQ7d2hpbGUoZC5hLWUuYT09MCYmZC5iLWUuYj09MCl7ZC5hKz1DdWIoYSwyNikqaWtlK0N1YihhLDI3KSpqa2UtMC41O2QuYis9Q3ViKGEsMjYpKmlrZStDdWIoYSwyNykqamtlLTAuNTtlLmErPUN1YihhLDI2KSppa2UrQ3ViKGEsMjcpKmprZS0wLjU7ZS5iKz1DdWIoYSwyNikqaWtlK0N1YihhLDI3KSpqa2UtMC41fX1cbmZ1bmN0aW9uIE5fYihhKXt2YXIgYixjLGQsZTthLmc9bmV3IFJwYihCRChRYihGMSksMjkwKSk7ZD0wO2M9KFVjZCgpLEFjZCk7Yj0wO2Zvcig7YjxhLmouYy5sZW5ndGg7YisrKXtlPUJEKElrYihhLmosYiksMTEpO2lmKGUuaiE9Yyl7ZCE9YiYmTnBiKGEuZyxjLG5ldyB2Z2QobWViKGQpLG1lYihiKSkpO2M9ZS5qO2Q9Yn19TnBiKGEuZyxjLG5ldyB2Z2QobWViKGQpLG1lYihiKSkpfVxuZnVuY3Rpb24gZDRiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2Q9MDtmb3IoYz1uZXcgb2xiKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDI5KTtmb3IoZj1uZXcgb2xiKGIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEwKTtlLnA9ZCsrO2ZvcihoPW5ldyBvbGIoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTEpO2cucD1kKyt9fX19XG5mdW5jdGlvbiBxUGMoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqO2lmKGIpe2ZvcihoPWIuS2MoKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwxMCk7Zm9yKGo9WF9iKGcsKEtBYygpLElBYyksYykuS2MoKTtqLk9iKCk7KXtpPUJEKGouUGIoKSwxMSk7Zj1CRChXZChpcmIoZS5mLGkpKSwxMTIpO2lmKCFmKXtmPW5ldyB1T2MoYS5kKTtkLmNbZC5jLmxlbmd0aF09ZjtqT2MoZixpLGUpfX19fX1cbmZ1bmN0aW9uIHZpZChhLGIpe3ZhciBjLGQsZTtlPWUxZCgoTzZkKCksTTZkKSxhLlRnKCksYik7aWYoZSl7UTZkKCk7QkQoZSw2NikuT2ooKXx8KGU9XzFkKHExZChNNmQsZSkpKTtkPShjPWEuWWcoZSksQkQoYz49MD9hLl9nKGMsdHJ1ZSx0cnVlKTpzaWQoYSxlLHRydWUpLDE1MykpO0JEKGQsMjE1KS5vbChiKX1lbHNle3Rocm93IHZiYihuZXcgV2RiKGl0ZStiLm5lKCkranRlKSl9fVxuZnVuY3Rpb24gdWdiKGEpe3ZhciBiLGM7aWYoYT4tMTQwNzM3NDg4MzU1MzI4JiZhPDE0MDczNzQ4ODM1NTMyOCl7aWYoYT09MCl7cmV0dXJuIDB9Yj1hPDA7YiYmKGE9LWEpO2M9UUQoJHduZC5NYXRoLmZsb29yKCR3bmQuTWF0aC5sb2coYSkvMC42OTMxNDcxODA1NTk5NDUzKSk7KCFifHxhIT0kd25kLk1hdGgucG93KDIsYykpJiYrK2M7cmV0dXJuIGN9cmV0dXJuIHZnYihDYmIoYSkpfVxuZnVuY3Rpb24gUU9jKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2Y9bmV3IHpzYjtmb3IoYz1uZXcgb2xiKGEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMjkpO2c9Yi5hO2g9Yi5iO2lmKGYuYS5fYihnKXx8Zi5hLl9iKGgpKXtjb250aW51ZX1lPWc7ZD1oO2lmKGcuZS5iK2cuai5iPjImJmguZS5iK2guai5iPD0yKXtlPWg7ZD1nfWYuYS56YyhlLGYpO2UucT1kfXJldHVybiBmfVxuZnVuY3Rpb24gSzViKGEsYil7dmFyIGMsZCxlO2Q9bmV3IGIwYihhKTt0TmIoZCxiKTt5TmIoZCwod3RjKCksR3NjKSxiKTt5TmIoZCwoTnljKCksVnhjKSwoZGNkKCksJGJkKSk7eU5iKGQsbXdjLChGN2MoKSxCN2MpKTtfX2IoZCwoajBiKCksZTBiKSk7Yz1uZXcgSDBiO0YwYihjLGQpO0cwYihjLChVY2QoKSxUY2QpKTtlPW5ldyBIMGI7RjBiKGUsZCk7RzBiKGUsemNkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFNwYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBmR2MoKHJHYygpLG9HYykpO2Nhc2UgMTpyZXR1cm4gbmV3IENGYztjYXNlIDI6cmV0dXJuIG5ldyBmSGM7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYignTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3Jvc3NpbmcgbWluaW1pemVyICcrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319XG5mdW5jdGlvbiB0RGMoYSxiKXt2YXIgYyxkLGUsZixnO2EuY1tiLnBdPXRydWU7RWtiKGEuYSxiKTtmb3IoZz1uZXcgb2xiKGIuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDExKTtmb3IoZD1uZXcgYjFiKGYuYik7bGxiKGQuYSl8fGxsYihkLmIpOyl7Yz1CRChsbGIoZC5hKT9tbGIoZC5hKTptbGIoZC5iKSwxNyk7ZT11RGMoZixjKS5pO2EuY1tlLnBdfHx0RGMoYSxlKX19fVxuZnVuY3Rpb24gX1VjKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2c9MDtmb3IoYz1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUJEKER5ZChjKSwzMyk7aD1iLmc7ZT1iLmY7ZD0kd25kLk1hdGguc3FydChoKmgrZSplKTtnPSR3bmQuTWF0aC5tYXgoZCxnKTtmPV9VYyhiKTtnPSR3bmQuTWF0aC5tYXgoZixnKX1yZXR1cm4gZ31cbmZ1bmN0aW9uIHJjZCgpe3JjZD1jY2I7cGNkPW5ldyBzY2QoJ09VVFNJREUnLDApO25jZD1uZXcgc2NkKCdJTlNJREUnLDEpO29jZD1uZXcgc2NkKCdORVhUX1RPX1BPUlRfSUZfUE9TU0lCTEUnLDIpO21jZD1uZXcgc2NkKCdBTFdBWVNfU0FNRV9TSURFJywzKTtsY2Q9bmV3IHNjZCgnQUxXQVlTX09USEVSX1NBTUVfU0lERScsNCk7cWNkPW5ldyBzY2QoJ1NQQUNFX0VGRklDSUVOVCcsNSl9XG5mdW5jdGlvbiBkcmQoYSxiLGMpe3ZhciBkLGUsZixoLGksajtkPVRxZChhLChlPShGaGQoKSxmPW5ldyBhcGQsZiksISFjJiYkb2QoZSxjKSxlKSxiKTtMa2QoZCxfcGQoYixWdGUpKTtncmQoYixkKTticmQoYixkKTtocmQoYixkKTtnPW51bGw7aD1iO2k9WXBkKGgsJ3BvcnRzJyk7aj1uZXcgSnJkKGEsZCk7RnFkKGouYSxqLmIsaSk7Y3JkKGEsYixkKTtacWQoYSxiLGQpO3JldHVybiBkfVxuZnVuY3Rpb24gTkEoYSl7dmFyIGIsYztjPS1hLmE7Yj1PQyhHQyhURCwxKSwkaWUsMjUsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSk7aWYoYzwwKXtiWzBdPTQ1O2M9LWN9YlsxXT1iWzFdKygoYy82MHwwKS8xMHwwKSZhamU7YlsyXT1iWzJdKyhjLzYwfDApJTEwJmFqZTtiWzRdPWJbNF0rKGMlNjAvMTB8MCkmYWplO2JbNV09Yls1XStjJTEwJmFqZTtyZXR1cm4gemZiKGIsMCxiLmxlbmd0aCl9XG5mdW5jdGlvbiBRQShhKXt2YXIgYjtiPU9DKEdDKFRELDEpLCRpZSwyNSwxNSxbNzEsNzcsODQsNDUsNDgsNDgsNTgsNDgsNDhdKTtpZihhPD0wKXtiWzNdPTQzO2E9LWF9Yls0XT1iWzRdKygoYS82MHwwKS8xMHwwKSZhamU7Yls1XT1iWzVdKyhhLzYwfDApJTEwJmFqZTtiWzddPWJbN10rKGElNjAvMTB8MCkmYWplO2JbOF09Yls4XSthJTEwJmFqZTtyZXR1cm4gemZiKGIsMCxiLmxlbmd0aCl9XG5mdW5jdGlvbiBWbGIoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXtyZXR1cm4gWGhlfWY9bmV3IHh3YihTaGUsJ1snLCddJyk7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07IWYuYT8oZi5hPW5ldyBXZmIoZi5kKSk6UWZiKGYuYSxmLmIpO05mYihmLmEsJycrVWJiKGIpKX1yZXR1cm4gIWYuYT9mLmM6Zi5lLmxlbmd0aD09MD9mLmEuYTpmLmEuYSsoJycrZi5lKX1cbmZ1bmN0aW9uIERHYihhLGIpe3ZhciBjLGQsZTtlPU9oZTtmb3IoZD1uZXcgb2xiKExGYihiKSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDIxMyk7aWYoYy5mJiYhYS5jW2MuY10pe2EuY1tjLmNdPXRydWU7ZT0kd25kLk1hdGgubWluKGUsREdiKGEseEZiKGMsYikpKX19YS5pW2IuZF09YS5qO2EuZ1tiLmRdPSR3bmQuTWF0aC5taW4oZSxhLmorKyk7cmV0dXJuIGEuZ1tiLmRdfVxuZnVuY3Rpb24gRUtiKGEsYil7dmFyIGMsZCxlO2ZvcihlPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTExKTtkLmUuYj0oYz1kLmIsYy5YZSgoWTljKCksczljKSk/Yy5IZigpPT0oVWNkKCksQWNkKT8tYy5yZigpLmItRWRiKEVEKGMuV2UoczljKSkpOkVkYihFRChjLldlKHM5YykpKTpjLkhmKCk9PShVY2QoKSxBY2QpPy1jLnJmKCkuYjowKX19XG5mdW5jdGlvbiBMUGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yz1JT2IoYS5lKTtmPVk2YyhiN2MoUjZjKEhPYihhLmUpKSxhLmQqYS5hLGEuYyphLmIpLC0wLjUpO2I9Yy5hLWYuYTtlPWMuYi1mLmI7Zm9yKGg9MDtoPGEuYztoKyspe2Q9Yjtmb3IoZz0wO2c8YS5kO2crKyl7Sk9iKGEuZSxuZXcgSjZjKGQsZSxhLmEsYS5iKSkmJmFOYihhLGcsaCxmYWxzZSx0cnVlKTtkKz1hLmF9ZSs9YS5ifX1cbmZ1bmN0aW9uIHMyYyhhKXt2YXIgYixjLGQ7aWYoQ2NiKEREKGhrZChhLChZOWMoKSxNOGMpKSkpKXtkPW5ldyBSa2I7Zm9yKGM9bmV3IFNyKHVyKF9zZChhKS5hLktjKCksbmV3IFNxKSk7UXIoYyk7KXtiPUJEKFJyKGMpLDc5KTtRbGQoYikmJkNjYihERChoa2QoYixOOGMpKSkmJihkLmNbZC5jLmxlbmd0aF09Yix0cnVlKX1yZXR1cm4gZH1lbHNle3JldHVybiBtbWIoKSxtbWIoKSxqbWJ9fVxuZnVuY3Rpb24gVnBkKGEpe3ZhciBiLGM7Yz1mYWxzZTtpZihKRChhLDIwNCkpe2M9dHJ1ZTtyZXR1cm4gQkQoYSwyMDQpLmF9aWYoIWMpe2lmKEpEKGEsMjU4KSl7Yj1CRChhLDI1OCkuYSUxPT0wO2lmKGIpe2M9dHJ1ZTtyZXR1cm4gbWViKElkYihCRChhLDI1OCkuYSkpfX19dGhyb3cgdmJiKG5ldyBjcWQoXCJJZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGludGVnZXI6ICdcIithK1wiJy5cIikpfVxuZnVuY3Rpb24gazBkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Y9bnVsbDtmb3IoZT1uZXcgeDBkKCghYS5hJiYoYS5hPW5ldyB6MGQoYSkpLGEuYSkpO3UwZChlKTspe2M9QkQoVnVkKGUpLDU2KTtkPShnPWMuVGcoKSxoPShPS2QoZyksZy5vKSwhaHx8IWMubWgoaCk/bnVsbDpoNmQoS0pkKGgpLGMuYWgoaCkpKTtpZihkIT1udWxsKXtpZihkZmIoZCxiKSl7Zj1jO2JyZWFrfX19cmV0dXJuIGZ9XG5mdW5jdGlvbiBCdyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtYaihjLCdvY2N1cnJlbmNlcycpO2lmKGM9PTApe3JldHVybiBoPUJEKEh2KG5kKGEuYSksYiksMTQpLCFoPzA6aC5nYygpfWc9QkQoSHYobmQoYS5hKSxiKSwxNCk7aWYoIWcpe3JldHVybiAwfWY9Zy5nYygpO2lmKGM+PWYpe2cuJGIoKX1lbHNle2U9Zy5LYygpO2ZvcihkPTA7ZDxjO2QrKyl7ZS5QYigpO2UuUWIoKX19cmV0dXJuIGZ9XG5mdW5jdGlvbiBheChhLGIsYyl7dmFyIGQsZSxmLGc7WGooYywnb2xkQ291bnQnKTtYaigwLCduZXdDb3VudCcpO2Q9QkQoSHYobmQoYS5hKSxiKSwxNCk7aWYoKCFkPzA6ZC5nYygpKT09Yyl7WGooMCwnY291bnQnKTtlPShmPUJEKEh2KG5kKGEuYSksYiksMTQpLCFmPzA6Zi5nYygpKTtnPS1lO2c+MD96aCgpOmc8MCYmQncoYSxiLC1nKTtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19XG5mdW5jdGlvbiBmSWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD0wO2lmKGEuYj09MCl7Zz1qSWIoYSx0cnVlKTtiPTA7Zm9yKGQ9ZyxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07aWYoYz4wKXtoKz1jOysrYn19Yj4xJiYoaCs9YS5jKihiLTEpKX1lbHNle2g9TXRiKFp6YihPQWIoSkFiKFBsYihhLmEpLG5ldyB4SWIpLG5ldyB6SWIpKSl9cmV0dXJuIGg+MD9oK2Eubi5kK2Eubi5hOjB9XG5mdW5jdGlvbiBnSWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD0wO2lmKGEuYj09MCl7aD1NdGIoWnpiKE9BYihKQWIoUGxiKGEuYSksbmV3IHRJYiksbmV3IHZJYikpKX1lbHNle2c9a0liKGEsdHJ1ZSk7Yj0wO2ZvcihkPWcsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKGM+MCl7aCs9YzsrK2J9fWI+MSYmKGgrPWEuYyooYi0xKSl9cmV0dXJuIGg+MD9oK2Eubi5iK2Eubi5jOjB9XG5mdW5jdGlvbiBNSmIoYSxiKXt2YXIgYyxkLGUsZjtmPUJEKE1wYihhLmIsYiksMTI0KTtjPWYuYTtmb3IoZT1CRChCRChRYyhhLnIsYiksMjEpLDg0KS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDExMSk7ISFkLmMmJihjLmE9JHduZC5NYXRoLm1heChjLmEsWkhiKGQuYykpKX1pZihjLmE+MCl7c3dpdGNoKGIuZyl7Y2FzZSAyOmYubi5jPWEuczticmVhaztjYXNlIDQ6Zi5uLmI9YS5zO319fVxuZnVuY3Rpb24gTlFiKGEsYil7dmFyIGMsZCxlO2M9QkQodk5iKGIsKHdTYigpLG9TYikpLDE5KS5hLUJEKHZOYihhLG9TYiksMTkpLmE7aWYoYz09MCl7ZD1jN2MoUjZjKEJEKHZOYihhLChIU2IoKSxEU2IpKSw4KSksQkQodk5iKGEsRVNiKSw4KSk7ZT1jN2MoUjZjKEJEKHZOYihiLERTYiksOCkpLEJEKHZOYihiLEVTYiksOCkpO3JldHVybiBLZGIoZC5hKmQuYixlLmEqZS5iKX1yZXR1cm4gY31cbmZ1bmN0aW9uIGlSYyhhLGIpe3ZhciBjLGQsZTtjPUJEKHZOYihiLChKVGMoKSxFVGMpKSwxOSkuYS1CRCh2TmIoYSxFVGMpLDE5KS5hO2lmKGM9PTApe2Q9YzdjKFI2YyhCRCh2TmIoYSwobVRjKCksVlNjKSksOCkpLEJEKHZOYihhLFdTYyksOCkpO2U9YzdjKFI2YyhCRCh2TmIoYixWU2MpLDgpKSxCRCh2TmIoYixXU2MpLDgpKTtyZXR1cm4gS2RiKGQuYSpkLmIsZS5hKmUuYil9cmV0dXJuIGN9XG5mdW5jdGlvbiBUWmIoYSl7dmFyIGIsYztjPW5ldyBVZmI7Yy5hKz0nZV8nO2I9S1piKGEpO2IhPW51bGwmJihjLmErPScnK2IsYyk7aWYoISFhLmMmJiEhYS5kKXtRZmIoKGMuYSs9JyAnLGMpLEMwYihhLmMpKTtRZmIoUGZiKChjLmErPSdbJyxjKSxhLmMuaSksJ10nKTtRZmIoKGMuYSs9Z25lLGMpLEMwYihhLmQpKTtRZmIoUGZiKChjLmErPSdbJyxjKSxhLmQuaSksJ10nKX1yZXR1cm4gYy5hfVxuZnVuY3Rpb24gelJjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGxVYztjYXNlIDE6cmV0dXJuIG5ldyBzVWM7Y2FzZSAyOnJldHVybiBuZXcgQ1VjO2Nhc2UgMzpyZXR1cm4gbmV3IElVYztkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKCdObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBsYXlvdXQgcGhhc2UgJysoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX1cbmZ1bmN0aW9uIG1mZChhLGIsYyxkLGUpe3ZhciBmO2Y9MDtzd2l0Y2goZS5nKXtjYXNlIDE6Zj0kd25kLk1hdGgubWF4KDAsYi5iK2EuYi0oYy5iK2QpKTticmVhaztjYXNlIDM6Zj0kd25kLk1hdGgubWF4KDAsLWEuYi1kKTticmVhaztjYXNlIDI6Zj0kd25kLk1hdGgubWF4KDAsLWEuYS1kKTticmVhaztjYXNlIDQ6Zj0kd25kLk1hdGgubWF4KDAsYi5hK2EuYS0oYy5hK2QpKTt9cmV0dXJuIGZ9XG5mdW5jdGlvbiBtcWQoYSxiLGMpe3ZhciBkLGUsZixnLGg7aWYoYyl7ZT1jLmEubGVuZ3RoO2Q9bmV3IFlnZShlKTtmb3IoaD0oZC5iLWQuYSkqZC5jPDA/KFhnZSgpLFdnZSk6bmV3IHNoZShkKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwxOSk7Zj1acGQoYyxnLmEpO0x0ZSBpbiBmLmF8fE10ZSBpbiBmLmE/JHFkKGEsZixiKTplcmQoYSxmLGIpO290ZChCRChPaGIoYS5iLFdwZChmKSksNzkpKX19fVxuZnVuY3Rpb24gTEpkKGEpe3ZhciBiLGM7c3dpdGNoKGEuYil7Y2FzZSAtMTp7cmV0dXJuIHRydWV9Y2FzZSAwOntjPWEudDtpZihjPjF8fGM9PS0xKXthLmI9LTE7cmV0dXJuIHRydWV9ZWxzZXtiPXdJZChhKTtpZighIWImJihRNmQoKSxiLkNqKCk9PUJ2ZSkpe2EuYj0tMTtyZXR1cm4gdHJ1ZX1lbHNle2EuYj0xO3JldHVybiBmYWxzZX19fWRlZmF1bHQ6Y2FzZSAxOntyZXR1cm4gZmFsc2V9fX1cbmZ1bmN0aW9uIGsxZChhLGIpe3ZhciBjLGQsZSxmLGc7ZD0oIWIucyYmKGIucz1uZXcgY1VkKHQ1LGIsMjEsMTcpKSxiLnMpO2Y9bnVsbDtmb3IoZT0wLGc9ZC5pO2U8ZzsrK2Upe2M9QkQocXVkKGQsZSksMTcwKTtzd2l0Y2goJDFkKHExZChhLGMpKSl7Y2FzZSAyOmNhc2UgMzp7IWYmJihmPW5ldyBSa2IpO2YuY1tmLmMubGVuZ3RoXT1jfX19cmV0dXJuICFmPyhtbWIoKSxtbWIoKSxqbWIpOmZ9XG5mdW5jdGlvbiB0ZGUoYSxiKXt2YXIgYyxkLGUsZjtuZGUoYSk7aWYoYS5jIT0wfHxhLmEhPTEyMyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEZ1ZSkpKSk7Zj1iPT0xMTI7ZD1hLmQ7Yz1nZmIoYS5pLDEyNSxkKTtpZihjPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxHdWUpKSkpO2U9cWZiKGEuaSxkLGMpO2EuZD1jKzE7cmV0dXJuIExmZShlLGYsKGEuZSY1MTIpPT01MTIpfVxuZnVuY3Rpb24gUVRiKGEpe3ZhciBiO2I9QkQodk5iKGEsKE55YygpLEl3YykpLDMxNCk7aWYoYj09KFJwYygpLFBwYykpe3Rocm93IHZiYihuZXcgejJjKCdUaGUgaGllcmFyY2h5IGF3YXJlIHByb2Nlc3NvciAnK2IrJyBpbiBjaGlsZCBub2RlICcrYSsnIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgcm9vdCBub2RlIHNwZWNpZmllcyB0aGUgc2FtZSBoaWVyYXJjaGljYWwgcHJvY2Vzc29yLicpKX19XG5mdW5jdGlvbiBkaGMoYSxiKXtIZ2MoKTt2YXIgYyxkLGUsZixnLGg7Yz1udWxsO2ZvcihnPWIuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxMjgpO2lmKGYubyl7Y29udGludWV9ZD1GNmMoZi5hKTtlPUM2YyhmLmEpO2g9bmV3IGhpYyhkLGUsbnVsbCxCRChmLmQuYS5lYygpLktjKCkuUGIoKSwxNykpO0VrYihoLmMsZi5hKTthLmNbYS5jLmxlbmd0aF09aDshIWMmJkVrYihjLmQsaCk7Yz1ofX1cbmZ1bmN0aW9uIGhLZChhLGIpe3ZhciBjLGQsZTtpZighYil7aktkKGEsbnVsbCk7X0pkKGEsbnVsbCl9ZWxzZSBpZigoYi5pJjQpIT0wKXtkPSdbXSc7Zm9yKGM9Yi5jOztjPWMuYyl7aWYoKGMuaSY0KT09MCl7ZT1qZmIoKGZkYihjKSxjLm8rZCkpO2pLZChhLGUpO19KZChhLGUpO2JyZWFrfWQrPSdbXSd9fWVsc2V7ZT1qZmIoKGZkYihiKSxiLm8pKTtqS2QoYSxlKTtfSmQoYSxlKX1hLnlrKGIpfVxuZnVuY3Rpb24gYjNkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGk7aT1hM2QoYSxCRChlLDU2KSk7aWYoUEQoaSkhPT1QRChlKSl7aD1CRChhLmdbY10sNzIpO2Y9UjZkKGIsaSk7bXVkKGEsYyx0M2QoYSxjLGYpKTtpZihvaWQoYS5lKSl7Zz1IMmQoYSw5LGYuYWsoKSxlLGksZCxmYWxzZSk7UXdkKGcsbmV3IHBTZChhLmUsOSxhLmMsaCxmLGQsZmFsc2UpKTtSd2QoZyl9cmV0dXJuIGl9cmV0dXJuIGV9XG5mdW5jdGlvbiB4Q2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPUJEKFFjKGEuYyxiKSwxNSk7ZT1CRChRYyhhLmMsYyksMTUpO2Y9ZC5aYyhkLmdjKCkpO2c9ZS5aYyhlLmdjKCkpO3doaWxlKGYuU2IoKSYmZy5TYigpKXtoPUJEKGYuVWIoKSwxOSk7aT1CRChnLlViKCksMTkpO2lmKGghPWkpe3JldHVybiBiZWIoaC5hLGkuYSl9fXJldHVybiAhZi5PYigpJiYhZy5PYigpPzA6Zi5PYigpPzE6LTF9XG5mdW5jdGlvbiBtNWMoYyxkKXt2YXIgZSxmLGc7dHJ5e2c9ZnMoYy5hLGQpO3JldHVybiBnfWNhdGNoKGIpe2I9dWJiKGIpO2lmKEpEKGIsMzIpKXt0cnl7Zj1JY2IoZCxSaWUsT2hlKTtlPWdkYihjLmEpO2lmKGY+PTAmJmY8ZS5sZW5ndGgpe3JldHVybiBlW2ZdfX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSwxMjcpKXRocm93IHZiYihhKX1yZXR1cm4gbnVsbH1lbHNlIHRocm93IHZiYihiKX19XG5mdW5jdGlvbiB0aWQoYSxiKXt2YXIgYyxkLGU7ZT1lMWQoKE82ZCgpLE02ZCksYS5UZygpLGIpO2lmKGUpe1E2ZCgpO0JEKGUsNjYpLk9qKCl8fChlPV8xZChxMWQoTTZkLGUpKSk7ZD0oYz1hLllnKGUpLEJEKGM+PTA/YS5fZyhjLHRydWUsdHJ1ZSk6c2lkKGEsZSx0cnVlKSwxNTMpKTtyZXR1cm4gQkQoZCwyMTUpLmxsKGIpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2IubmUoKStsdGUpKX19XG5mdW5jdGlvbiBCWmQoKXt0WmQoKTt2YXIgYTtpZihzWmQpcmV0dXJuIEJEKG5VZCgoeUZkKCkseEZkKSxfdmUpLDE5MzkpO3JFZChDSyxuZXcgSl9kKTtDWmQoKTthPUJEKEpEKFBoYigoeUZkKCkseEZkKSxfdmUpLDU0Nyk/UGhiKHhGZCxfdmUpOm5ldyBBWmQsNTQ3KTtzWmQ9dHJ1ZTt5WmQoYSk7elpkKGEpO1JoYigoSkZkKCksSUZkKSxhLG5ldyBFWmQpO1NoYih4RmQsX3ZlLGEpO3JldHVybiBhfVxuZnVuY3Rpb24gdjJkKGEsYil7dmFyIGMsZCxlLGY7YS5qPS0xO2lmKG9pZChhLmUpKXtjPWEuaTtmPWEuaSE9MDtsdWQoYSxiKTtkPW5ldyBwU2QoYS5lLDMsYS5jLG51bGwsYixjLGYpO2U9Yi5RayhhLmUsYS5jLG51bGwpO2U9aDNkKGEsYixlKTtpZighZSl7VWhkKGEuZSxkKX1lbHNle2UuRWkoZCk7ZS5GaSgpfX1lbHNle2x1ZChhLGIpO2U9Yi5RayhhLmUsYS5jLG51bGwpOyEhZSYmZS5GaSgpfX1cbmZ1bmN0aW9uIHJBKGEsYil7dmFyIGMsZCxlO2U9MDtkPWJbMF07aWYoZD49YS5sZW5ndGgpe3JldHVybiAtMX1jPShCQ2IoZCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGQpKTt3aGlsZShjPj00OCYmYzw9NTcpe2U9ZSoxMCsoYy00OCk7KytkO2lmKGQ+PWEubGVuZ3RoKXticmVha31jPShCQ2IoZCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGQpKX1kPmJbMF0/KGJbMF09ZCk6KGU9LTEpO3JldHVybiBlfVxuZnVuY3Rpb24gdk1iKGEpe3ZhciBiLGMsZCxlLGY7ZT1CRChhLmEsMTkpLmE7Zj1CRChhLmIsMTkpLmE7Yz1lO2Q9ZjtiPSR3bmQuTWF0aC5tYXgoJHduZC5NYXRoLmFicyhlKSwkd25kLk1hdGguYWJzKGYpKTtpZihlPD0wJiZlPT1mKXtjPTA7ZD1mLTF9ZWxzZXtpZihlPT0tYiYmZiE9Yil7Yz1mO2Q9ZTtmPj0wJiYrK2N9ZWxzZXtjPS1mO2Q9ZX19cmV0dXJuIG5ldyB2Z2QobWViKGMpLG1lYihkKSl9XG5mdW5jdGlvbiBmTmIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2ZvcihlPTA7ZTxiLm87ZSsrKXtmPWUtYi5qK2M7Zm9yKGc9MDtnPGIucDtnKyspe2g9Zy1iLmsrZDtpZigoaT1mLGo9aCxpKz1hLmosais9YS5rLGk+PTAmJmo+PTAmJmk8YS5vJiZqPGEucCkmJighWk1iKGIsZSxnKSYmaE5iKGEsZixoKXx8WU1iKGIsZSxnKSYmIWlOYihhLGYsaCkpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIExOYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtnPWEuYztoPWEuZDtmPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtnLmkubixnLm4sZy5hXSkpLmI7ZT0oZitsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbaC5pLm4saC5uLGguYV0pKS5iKS8yO2Q9bnVsbDtnLmo9PShVY2QoKSx6Y2QpPyhkPW5ldyBmN2MoYitnLmkuYy5jLmErYyxlKSk6KGQ9bmV3IGY3YyhiLWMsZSkpO1N0KGEuYSwwLGQpfVxuZnVuY3Rpb24gUWxkKGEpe3ZhciBiLGMsZCxlO2I9bnVsbDtmb3IoZD11bChwbChPQyhHQyhLSSwxKSxVaGUsMjAsMCxbKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYiksKCFhLmMmJihhLmM9bmV3IHk1ZCh6MixhLDUsOCkpLGEuYyldKSkpO1FyKGQpOyl7Yz1CRChScihkKSw4Mik7ZT1hdGQoYyk7aWYoIWIpe2I9ZX1lbHNlIGlmKGIhPWUpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBzdWQoYSxiLGMpe3ZhciBkOysrYS5qO2lmKGI+PWEuaSl0aHJvdyB2YmIobmV3IHFjYihsdWUrYittdWUrYS5pKSk7aWYoYz49YS5pKXRocm93IHZiYihuZXcgcWNiKG51ZStjK211ZSthLmkpKTtkPWEuZ1tjXTtpZihiIT1jKXtiPGM/JGZiKGEuZyxiLGEuZyxiKzEsYy1iKTokZmIoYS5nLGMrMSxhLmcsYyxiLWMpO05DKGEuZyxiLGQpO2EuZWkoYixkLGMpO2EuY2koKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIFJjKGEsYixjKXt2YXIgZDtkPUJEKGEuYy54YyhiKSwxNCk7aWYoIWQpe2Q9YS5pYyhiKTtpZihkLkZjKGMpKXsrK2EuZDthLmMuemMoYixkKTtyZXR1cm4gdHJ1ZX1lbHNle3Rocm93IHZiYihuZXcgeWNiKCdOZXcgQ29sbGVjdGlvbiB2aW9sYXRlZCB0aGUgQ29sbGVjdGlvbiBzcGVjJykpfX1lbHNlIGlmKGQuRmMoYykpeysrYS5kO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1cbmZ1bmN0aW9uIGhlYihhKXt2YXIgYixjLGQ7aWYoYTwwKXtyZXR1cm4gMH1lbHNlIGlmKGE9PTApe3JldHVybiAzMn1lbHNle2Q9LShhPj4xNik7Yj1kPj4xNiYxNjtjPTE2LWI7YT1hPj5iO2Q9YS0yNTY7Yj1kPj4xNiY4O2MrPWI7YTw8PWI7ZD1hLVJqZTtiPWQ+PjE2JjQ7Yys9YjthPDw9YjtkPWEtb2llO2I9ZD4+MTYmMjtjKz1iO2E8PD1iO2Q9YT4+MTQ7Yj1kJn4oZD4+MSk7cmV0dXJuIGMrMi1ifX1cbmZ1bmN0aW9uICRQYihhKXtRUGIoKTt2YXIgYixjLGQsZTtQUGI9bmV3IFJrYjtPUGI9bmV3IExxYjtOUGI9bmV3IFJrYjtiPSghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSk7U1BiKGIpO2ZvcihlPW5ldyBGeWQoYik7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDMzKTtpZihKa2IoUFBiLGQsMCk9PS0xKXtjPW5ldyBSa2I7RWtiKE5QYixjKTtUUGIoZCxjKX19cmV0dXJuIE5QYn1cbmZ1bmN0aW9uIEJRYihhLGIsYyl7dmFyIGQsZSxmLGc7YS5hPWMuYi5kO2lmKEpEKGIsMzUyKSl7ZT1pdGQoQkQoYiw3OSksZmFsc2UsZmFsc2UpO2Y9b2ZkKGUpO2Q9bmV3IEZRYihhKTtyZWIoZixkKTtpZmQoZixlKTtiLldlKChZOWMoKSxROGMpKSE9bnVsbCYmcmViKEJEKGIuV2UoUThjKSw3NCksZCl9ZWxzZXtnPUJEKGIsNDcwKTtnLkhnKGcuRGcoKSthLmEuYSk7Zy5JZyhnLkVnKCkrYS5hLmIpfX1cbmZ1bmN0aW9uIF81YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aj1FZGIoRUQodk5iKGIsKE55YygpLHp5YykpKSk7aT1hWzBdLm4uYSthWzBdLm8uYSthWzBdLmQuYytqO2ZvcihoPTE7aDxhLmxlbmd0aDtoKyspe2Q9YVtoXS5uO2U9YVtoXS5vO2M9YVtoXS5kO2Y9ZC5hLWMuYi1pO2Y8MCYmKGQuYS09Zik7Zz1iLmY7Zy5hPSR3bmQuTWF0aC5tYXgoZy5hLGQuYStlLmEpO2k9ZC5hK2UuYStjLmMran19XG5mdW5jdGlvbiBEJGMoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZD1CRChCRChPaGIoYS5nLGIuYSksNDYpLmEsNjUpO2U9QkQoQkQoT2hiKGEuZyxiLmIpLDQ2KS5hLDY1KTtmPWQuYjtnPWUuYjtjPXo2YyhmLGcpO2lmKGM+PTApe3JldHVybiBjfWg9VTZjKGM3YyhuZXcgZjdjKGcuYytnLmIvMixnLmQrZy5hLzIpLG5ldyBmN2MoZi5jK2YuYi8yLGYuZCtmLmEvMikpKTtyZXR1cm4gLSh4T2IoZixnKS0xKSpofVxuZnVuY3Rpb24gdWZkKGEsYixjKXt2YXIgZDtNQWIobmV3IFlBYihudWxsLCghYy5hJiYoYy5hPW5ldyBjVWQoQTIsYyw2LDYpKSxuZXcgS3ViKGMuYSwxNikpKSxuZXcgTWZkKGEsYikpO01BYihuZXcgWUFiKG51bGwsKCFjLm4mJihjLm49bmV3IGNVZChEMixjLDEsNykpLG5ldyBLdWIoYy5uLDE2KSkpLG5ldyBPZmQoYSxiKSk7ZD1CRChoa2QoYywoWTljKCksUThjKSksNzQpOyEhZCYmcDdjKGQsYSxiKX1cbmZ1bmN0aW9uIHNpZChhLGIsYyl7dmFyIGQsZSxmO2Y9ZTFkKChPNmQoKSxNNmQpLGEuVGcoKSxiKTtpZihmKXtRNmQoKTtCRChmLDY2KS5PaigpfHwoZj1fMWQocTFkKE02ZCxmKSkpO2U9KGQ9YS5ZZyhmKSxCRChkPj0wP2EuX2coZCx0cnVlLHRydWUpOnNpZChhLGYsdHJ1ZSksMTUzKSk7cmV0dXJuIEJEKGUsMjE1KS5obChiLGMpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2IubmUoKStsdGUpKX19XG5mdW5jdGlvbiB3QWQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtlPWEuZFtiXTtpZihlKXtmPWUuZztpPWUuaTtpZihkIT1udWxsKXtmb3IoaD0wO2g8aTsrK2gpe2c9QkQoZltoXSwxMzMpO2lmKGcuU2goKT09YyYmcGIoZCxnLmNkKCkpKXtyZXR1cm4gZ319fWVsc2V7Zm9yKGg9MDtoPGk7KytoKXtnPUJEKGZbaF0sMTMzKTtpZihQRChnLmNkKCkpPT09UEQoZCkpe3JldHVybiBnfX19fXJldHVybiBudWxsfVxuZnVuY3Rpb24gUGdiKGEsYil7dmFyIGM7aWYoYjwwKXt0aHJvdyB2YmIobmV3IG9jYignTmVnYXRpdmUgZXhwb25lbnQnKSl9aWYoYj09MCl7cmV0dXJuIENnYn1lbHNlIGlmKGI9PTF8fEtnYihhLENnYil8fEtnYihhLEdnYikpe3JldHVybiBhfWlmKCFTZ2IoYSwwKSl7Yz0xO3doaWxlKCFTZ2IoYSxjKSl7KytjfXJldHVybiBPZ2IoYmhiKGMqYiksUGdiKFJnYihhLGMpLGIpKX1yZXR1cm4gSmhiKGEsYil9XG5mdW5jdGlvbiB4bGIoYSxiKXt2YXIgYyxkLGU7aWYoUEQoYSk9PT1QRChiKSl7cmV0dXJuIHRydWV9aWYoYT09bnVsbHx8Yj09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKGEubGVuZ3RoIT1iLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihjPTA7YzxhLmxlbmd0aDsrK2Mpe2Q9YVtjXTtlPWJbY107aWYoIShQRChkKT09PVBEKGUpfHxkIT1udWxsJiZwYihkLGUpKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIENWYihhKXtuVmIoKTt2YXIgYixjLGQ7dGhpcy5iPW1WYjt0aGlzLmM9KGVhZCgpLGNhZCk7dGhpcy5mPShpVmIoKSxoVmIpO3RoaXMuYT1hO3pWYih0aGlzLG5ldyBEVmIpO3NWYih0aGlzKTtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDgxKTtpZighYy5kKXtiPW5ldyBnVmIoT0MoR0MoSVAsMSksVWhlLDgxLDAsW2NdKSk7RWtiKGEuYSxiKX19fVxuZnVuY3Rpb24gRDNiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWF8fGEuYy5sZW5ndGg9PTApe3JldHVybiBudWxsfWY9bmV3IGNJYihiLCFjKTtmb3IoZT1uZXcgb2xiKGEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSw3MCk7VUhiKGYsKGEkYigpLG5ldyB2JGIoZCkpKX1nPWYuaTtnLmE9KGk9Zi5uLGYuZS5iK2kuZCtpLmEpO2cuYj0oaD1mLm4sZi5lLmEraC5iK2guYyk7cmV0dXJuIGZ9XG5mdW5jdGlvbiBPNWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1sX2IoYS5hKTtObGIoaCxuZXcgVDViKTtjPW51bGw7Zm9yKGU9aCxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07aWYoZC5rIT0oajBiKCksZTBiKSl7YnJlYWt9Yj1CRCh2TmIoZCwod3RjKCksSHNjKSksNjEpO2lmKGIhPShVY2QoKSxUY2QpJiZiIT16Y2Qpe2NvbnRpbnVlfSEhYyYmQkQodk5iKGMsUXNjKSwxNSkuRmMoZCk7Yz1kfX1cbmZ1bmN0aW9uIFlPYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aT0odENiKGIsYS5jLmxlbmd0aCksQkQoYS5jW2JdLDMyOSkpO0trYihhLGIpO2lmKGkuYi8yPj1jKXtkPWI7aj0oaS5jK2kuYSkvMjtnPWotYztpZihpLmM8PWotYyl7ZT1uZXcgYlBjKGkuYyxnKTtEa2IoYSxkKyssZSl9aD1qK2M7aWYoaDw9aS5hKXtmPW5ldyBiUGMoaCxpLmEpO3dDYihkLGEuYy5sZW5ndGgpO2FDYihhLmMsZCxmKX19fVxuZnVuY3Rpb24gdTBkKGEpe3ZhciBiO2lmKCFhLmMmJmEuZz09bnVsbCl7YS5kPWEuc2koYS5mKTt3dGQoYSxhLmQpO2I9YS5kfWVsc2V7aWYoYS5nPT1udWxsKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGEuaT09MCl7cmV0dXJuIGZhbHNlfWVsc2V7Yj1CRChhLmdbYS5pLTFdLDQ3KX19aWYoYj09YS5iJiZudWxsLmttPj1udWxsLmptKCkpe1Z1ZChhKTtyZXR1cm4gdTBkKGEpfWVsc2V7cmV0dXJuIGIuT2IoKX19XG5mdW5jdGlvbiBLVGIoYSxiLGMpe3ZhciBkLGUsZixnLGg7aD1jOyFoJiYoaD1ZZGQobmV3IFpkZCwwKSk7T2RkKGgsVm1lLDEpO2FVYihhLmMsYik7Zz1FWWIoYS5hLGIpO2lmKGcuZ2MoKT09MSl7TVRiKEJEKGcuWGIoMCksMzcpLGgpfWVsc2V7Zj0xL2cuZ2MoKTtmb3IoZT1nLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMzcpO01UYihkLFVkZChoLGYpKX19Q1liKGEuYSxnLGIpO05UYihiKTtRZGQoaCl9XG5mdW5jdGlvbiBxWWIoYSl7dGhpcy5hPWE7aWYoYS5jLmkuaz09KGowYigpLGUwYikpe3RoaXMuYz1hLmM7dGhpcy5kPUJEKHZOYihhLmMuaSwod3RjKCksSHNjKSksNjEpfWVsc2UgaWYoYS5kLmkuaz09ZTBiKXt0aGlzLmM9YS5kO3RoaXMuZD1CRCh2TmIoYS5kLmksKHd0YygpLEhzYykpLDYxKX1lbHNle3Rocm93IHZiYihuZXcgV2RiKCdFZGdlICcrYSsnIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLicpKX19XG5mdW5jdGlvbiBvUWQoYSxiKXt2YXIgYyxkLGU7ZT1hLmI7YS5iPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSwzLGUsYS5iKSk7aWYoIWIpe3BuZChhLG51bGwpO3FRZChhLDApO3BRZChhLG51bGwpfWVsc2UgaWYoYiE9YSl7cG5kKGEsYi56Yik7cVFkKGEsYi5kKTtjPShkPWIuYyxkPT1udWxsP2IuemI6ZCk7cFFkKGEsYz09bnVsbHx8ZGZiKGMsYi56Yik/bnVsbDpjKX19XG5mdW5jdGlvbiBOUmQoYSl7dmFyIGIsYztpZihhLmYpe3doaWxlKGEubjxhLm8pe2I9QkQoIWEuaj9hLmsuWGIoYS5uKTphLmoucGkoYS5uKSw3Mik7Yz1iLmFrKCk7aWYoSkQoYyw5OSkmJihCRChjLDE4KS5CYiZvdGUpIT0wJiYoIWEuZXx8Yy5HaigpIT14Mnx8Yy5haigpIT0wKSYmYi5kZCgpIT1udWxsKXtyZXR1cm4gdHJ1ZX1lbHNleysrYS5ufX1yZXR1cm4gZmFsc2V9ZWxzZXtyZXR1cm4gYS5uPGEub319XG5mdW5jdGlvbiBfaShhLGIpe3ZhciBjO3RoaXMuZT0oaW0oKSxRYihhKSxpbSgpLG5tKGEpKTt0aGlzLmM9KFFiKGIpLG5tKGIpKTtMYih0aGlzLmUuSGQoKS5kYygpPT10aGlzLmMuSGQoKS5kYygpKTt0aGlzLmQ9RXYodGhpcy5lKTt0aGlzLmI9RXYodGhpcy5jKTtjPUlDKFNJLFtuaWUsVWhlXSxbNSwxXSw1LFt0aGlzLmUuSGQoKS5nYygpLHRoaXMuYy5IZCgpLmdjKCldLDIpO3RoaXMuYT1jO1JpKHRoaXMpfVxuZnVuY3Rpb24gdnooYil7dmFyIGM9KCF0eiYmKHR6PXd6KCkpLHR6KTt2YXIgZD1iLnJlcGxhY2UoL1tcXHgwMC1cXHgxZlxceGFkXFx1MDYwMC1cXHUwNjAzXFx1MDZkZFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGItXFx1MjAwZlxcdTIwMjgtXFx1MjAyZVxcdTIwNjAtXFx1MjA2NFxcdTIwNmEtXFx1MjA2ZlxcdWZlZmZcXHVmZmY5LVxcdWZmZmJcIlxcXFxdL2csZnVuY3Rpb24oYSl7cmV0dXJuIHV6KGEsYyl9KTtyZXR1cm4gJ1wiJytkKydcIid9XG5mdW5jdGlvbiBjRWIoYSl7T0RiKCk7dmFyIGIsYzt0aGlzLmI9TERiO3RoaXMuYz1ORGI7dGhpcy5nPShGRGIoKSxFRGIpO3RoaXMuZD0oZWFkKCksY2FkKTt0aGlzLmE9YTtSRGIodGhpcyk7Zm9yKGM9bmV3IG9sYihhLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw1Nyk7IWIuYSYmcERiKHJEYihuZXcgc0RiLE9DKEdDKFBNLDEpLFVoZSw1NywwLFtiXSkpLGEpO2IuZT1uZXcgSzZjKGIuZCl9fVxuZnVuY3Rpb24gSFFiKGEpe3ZhciBiLGMsZCxlLGYsZztlPWEuZS5jLmxlbmd0aDtkPUtDKHlLLGVtZSwxNSxlLDAsMSk7Zm9yKGc9bmV3IG9sYihhLmUpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxNDQpO2RbZi5iXT1uZXcgUHNifWZvcihjPW5ldyBvbGIoYS5jKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMjgyKTtkW2IuYy5iXS5GYyhiKTtkW2IuZC5iXS5GYyhiKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIGZEYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtoPVB1KGEuYy5sZW5ndGgpO2ZvcihlPW5ldyBvbGIoYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEwKTtnPW5ldyBUcWI7Zj1VX2IoZCk7Zm9yKGM9bmV3IFNyKHVyKGYuYS5LYygpLG5ldyBTcSkpO1FyKGMpOyl7Yj1CRChScihjKSwxNyk7Yi5jLmk9PWIuZC5pfHxRcWIoZyxiLmQuaSl9aC5jW2guYy5sZW5ndGhdPWd9cmV0dXJuIGh9XG5mdW5jdGlvbiBvemQoYSxiKXt2YXIgYyxkLGUsZixnO2M9QkQoQWpkKGEuYSw0KSwxMjYpO2c9Yz09bnVsbD8wOmMubGVuZ3RoO2lmKGI+PWcpdGhyb3cgdmJiKG5ldyBDeWQoYixnKSk7ZT1jW2JdO2lmKGc9PTEpe2Q9bnVsbH1lbHNle2Q9S0MoJDMsaHZlLDQxNSxnLTEsMCwxKTskZmIoYywwLGQsMCxiKTtmPWctYi0xO2Y+MCYmJGZiKGMsYisxLGQsYixmKX1iMGQoYSxkKTthMGQoYSxiLGUpO3JldHVybiBlfVxuZnVuY3Rpb24gbThkKCl7bThkPWNjYjtrOGQ9QkQocXVkKFpLZCgocjhkKCkscThkKS5xYiksNiksMzQpO2g4ZD1CRChxdWQoWktkKHE4ZC5xYiksMyksMzQpO2k4ZD1CRChxdWQoWktkKHE4ZC5xYiksNCksMzQpO2o4ZD1CRChxdWQoWktkKHE4ZC5xYiksNSksMTgpO1hJZChrOGQpO1hJZChoOGQpO1hJZChpOGQpO1hJZChqOGQpO2w4ZD1uZXcgYW1iKE9DKEdDKHQ1LDEpLE12ZSwxNzAsMCxbazhkLGg4ZF0pKX1cbmZ1bmN0aW9uIEFKYihhLGIpe3ZhciBjO3RoaXMuZD1uZXcgSF9iO3RoaXMuYj1iO3RoaXMuZT1uZXcgZzdjKGIucWYoKSk7Yz1hLnUuSGMoKHJjZCgpLG9jZCkpO2EudS5IYyhuY2QpP2EuRD8odGhpcy5hPWMmJiFiLklmKCkpOih0aGlzLmE9dHJ1ZSk6YS51LkhjKHBjZCk/Yz8odGhpcy5hPSEoYi56ZigpLktjKCkuT2IoKXx8Yi5CZigpLktjKCkuT2IoKSkpOih0aGlzLmE9ZmFsc2UpOih0aGlzLmE9ZmFsc2UpfVxuZnVuY3Rpb24gSUtiKGEsYil7dmFyIGMsZCxlLGY7Yz1hLm8uYTtmb3IoZj1CRChCRChRYyhhLnIsYiksMjEpLDg0KS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDExMSk7ZS5lLmE9KGQ9ZS5iLGQuWGUoKFk5YygpLHM5YykpP2QuSGYoKT09KFVjZCgpLFRjZCk/LWQucmYoKS5hLUVkYihFRChkLldlKHM5YykpKTpjK0VkYihFRChkLldlKHM5YykpKTpkLkhmKCk9PShVY2QoKSxUY2QpPy1kLnJmKCkuYTpjKX19XG5mdW5jdGlvbiBRMWIoYSxiKXt2YXIgYyxkLGUsZjtjPUJEKHZOYihhLChOeWMoKSxMd2MpKSwxMDMpO2Y9QkQoaGtkKGIsJHhjKSw2MSk7ZT1CRCh2TmIoYSxWeGMpLDk4KTtpZihlIT0oZGNkKCksYmNkKSYmZSE9Y2NkKXtpZihmPT0oVWNkKCksU2NkKSl7Zj1sZmQoYixjKTtmPT1TY2QmJihmPVpjZChjKSl9fWVsc2V7ZD1NMWIoYik7ZD4wPyhmPVpjZChjKSk6KGY9V2NkKFpjZChjKSkpfWprZChiLCR4YyxmKX1cbmZ1bmN0aW9uIG9sYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zz1hLmo7Yi5hIT1iLmImJk9rYihnLG5ldyBVbGMpO2U9Zy5jLmxlbmd0aC8yfDA7Zm9yKGQ9MDtkPGU7ZCsrKXtmPSh0Q2IoZCxnLmMubGVuZ3RoKSxCRChnLmNbZF0sMTEzKSk7Zi5jJiZHMGIoZi5kLGIuYSl9Zm9yKGM9ZTtjPGcuYy5sZW5ndGg7YysrKXtmPSh0Q2IoYyxnLmMubGVuZ3RoKSxCRChnLmNbY10sMTEzKSk7Zi5jJiZHMGIoZi5kLGIuYil9fVxuZnVuY3Rpb24gVEdjKGEsYixjKXt2YXIgZCxlLGY7ZD1hLmNbYi5jLnBdW2IucF07ZT1hLmNbYy5jLnBdW2MucF07aWYoZC5hIT1udWxsJiZlLmEhPW51bGwpe2Y9RGRiKGQuYSxlLmEpO2Y8MD9XR2MoYSxiLGMpOmY+MCYmV0djKGEsYyxiKTtyZXR1cm4gZn1lbHNlIGlmKGQuYSE9bnVsbCl7V0djKGEsYixjKTtyZXR1cm4gLTF9ZWxzZSBpZihlLmEhPW51bGwpe1dHYyhhLGMsYik7cmV0dXJuIDF9cmV0dXJuIDB9XG5mdW5jdGlvbiBzd2QoYSxiKXt2YXIgYyxkLGUsZjtpZihhLmVqKCkpe2M9YS5WaSgpO2Y9YS5maigpOysrYS5qO2EuSGkoYyxhLm9pKGMsYikpO2Q9YS5aaSgzLG51bGwsYixjLGYpO2lmKGEuYmooKSl7ZT1hLmNqKGIsbnVsbCk7aWYoIWUpe2EuJGkoZCl9ZWxzZXtlLkVpKGQpO2UuRmkoKX19ZWxzZXthLiRpKGQpfX1lbHNle0J2ZChhLGIpO2lmKGEuYmooKSl7ZT1hLmNqKGIsbnVsbCk7ISFlJiZlLkZpKCl9fX1cbmZ1bmN0aW9uIEQyZChhLGIpe3ZhciBjLGQsZSxmLGc7Zz1TNmQoYS5lLlRnKCksYik7ZT1uZXcgeXVkO2M9QkQoYS5nLDExOSk7Zm9yKGY9YS5pOy0tZj49MDspe2Q9Y1tmXTtnLnJsKGQuYWsoKSkmJnd0ZChlLGQpfSFZeGQoYSxlKSYmb2lkKGEuZSkmJkdMZChhLGIuJGooKT9IMmQoYSw2LGIsKG1tYigpLGptYiksbnVsbCwtMSxmYWxzZSk6SDJkKGEsYi5LaigpPzI6MSxiLG51bGwsbnVsbCwtMSxmYWxzZSkpfVxuZnVuY3Rpb24gRGhiKCl7RGhiPWNjYjt2YXIgYSxiO0JoYj1LQyhjSixuaWUsOTEsMzIsMCwxKTtDaGI9S0MoY0osbmllLDkxLDMyLDAsMSk7YT0xO2ZvcihiPTA7Yjw9MTg7YisrKXtCaGJbYl09Z2hiKGEpO0NoYltiXT1naGIoTmJiKGEsYikpO2E9SWJiKGEsNSl9Zm9yKDtiPENoYi5sZW5ndGg7YisrKXtCaGJbYl09T2diKEJoYltiLTFdLEJoYlsxXSk7Q2hiW2JdPU9nYihDaGJbYi0xXSwoSGdiKCksRWdiKSl9fVxuZnVuY3Rpb24gSzRiKGEsYil7dmFyIGMsZCxlLGYsZztpZihhLmE9PSh5cmMoKSx3cmMpKXtyZXR1cm4gdHJ1ZX1mPWIuYS5jO2M9Yi5hLmMrYi5hLmI7aWYoYi5qKXtkPWIuQTtnPWQuYy5jLmEtZC5vLmEvMjtlPWYtKGQubi5hK2Quby5hKTtpZihlPmcpe3JldHVybiBmYWxzZX19aWYoYi5xKXtkPWIuQztnPWQuYy5jLmEtZC5vLmEvMjtlPWQubi5hLWM7aWYoZT5nKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfVxuZnVuY3Rpb24gd2NjKGEsYil7dmFyIGM7T2RkKGIsJ1BhcnRpdGlvbiBwcmVwcm9jZXNzaW5nJywxKTtjPUJEKEdBYihKQWIoTEFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmEsMTYpKSxuZXcgQWNjKSxuZXcgQ2NjKSxuZXcgRWNjKSxCeWIobmV3IGZ6YixuZXcgZHpiLG5ldyBFemIsT0MoR0MoeEwsMSksS2llLDEzMiwwLFsoRnliKCksRHliKV0pKSksMTUpO01BYihjLk9jKCksbmV3IEdjYyk7UWRkKGIpfVxuZnVuY3Rpb24gRE1jKGEpe3dNYygpO3ZhciBiLGMsZCxlLGYsZyxoO2M9bmV3ICRyYjtmb3IoZT1uZXcgb2xiKGEuZS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2ZvcihnPW5ldyBvbGIoZC5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTApO2g9YS5nW2YucF07Yj1CRChXcmIoYyxoKSwxNSk7aWYoIWIpe2I9bmV3IFJrYjtYcmIoYyxoLGIpfWIuRmMoZil9fXJldHVybiBjfVxuZnVuY3Rpb24gZFJjKGEsYil7dmFyIGMsZCxlLGYsZztlPWIuYi5iO2EuYT1LQyh5SyxlbWUsMTUsZSwwLDEpO2EuYj1LQyhzYmIsZGxlLDI1LGUsMTYsMSk7Zm9yKGc9SnNiKGIuYiwwKTtnLmIhPWcuZC5jOyl7Zj1CRChYc2IoZyksODYpO2EuYVtmLmddPW5ldyBQc2J9Zm9yKGQ9SnNiKGIuYSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksMTg4KTthLmFbYy5iLmddLkZjKGMpO2EuYVtjLmMuZ10uRmMoYyl9fVxuZnVuY3Rpb24gcW1kKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gRWlkKGEpO2I9bmV3IEpmYihFaWQoYSkpO2IuYSs9JyAoc3RhcnRYOiAnO0JmYihiLGEuaik7Yi5hKz0nLCBzdGFydFk6ICc7QmZiKGIsYS5rKTtiLmErPScsIGVuZFg6ICc7QmZiKGIsYS5iKTtiLmErPScsIGVuZFk6ICc7QmZiKGIsYS5jKTtiLmErPScsIGlkZW50aWZpZXI6ICc7RWZiKGIsYS5kKTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gRUlkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gcW5kKGEpO2I9bmV3IEpmYihxbmQoYSkpO2IuYSs9JyAob3JkZXJlZDogJztGZmIoYiwoYS5CYiYyNTYpIT0wKTtiLmErPScsIHVuaXF1ZTogJztGZmIoYiwoYS5CYiY1MTIpIT0wKTtiLmErPScsIGxvd2VyQm91bmQ6ICc7Q2ZiKGIsYS5zKTtiLmErPScsIHVwcGVyQm91bmQ6ICc7Q2ZiKGIsYS50KTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gV25kKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk7SkQoYS5DYiw4OCkmJlhNZCgkS2QoQkQoYS5DYiw4OCkpLDQpO3BuZChhLGMpO2EuZj1kO2RKZChhLGUpO2ZKZChhLGYpO1pJZChhLGcpO2VKZChhLGZhbHNlKTtDSWQoYSx0cnVlKTthSmQoYSxoKTtCSWQoYSx0cnVlKTtBSWQoYSwwKTthLmI9MDtESWQoYSwxKTtpPXhJZChhLGIsbnVsbCk7ISFpJiZpLkZpKCk7TUpkKGEsZmFsc2UpO3JldHVybiBhfVxuZnVuY3Rpb24gZnliKGEsYil7dmFyIGMsZCxlLGY7Yz1CRChQaGIoYS5hLGIpLDUxMik7aWYoIWMpe2Q9bmV3IHd5YihiKTtlPShveWIoKSxseWIpP251bGw6ZC5jO2Y9cWZiKGUsMCwkd25kLk1hdGgubWF4KDAsa2ZiKGUsd2ZiKDQ2KSkpKTt2eWIoZCxmeWIoYSxmKSk7KGx5Yj9udWxsOmQuYykubGVuZ3RoPT0wJiZxeWIoZCxuZXcgenliKTtTaGIoYS5hLGx5Yj9udWxsOmQuYyxkKTtyZXR1cm4gZH1yZXR1cm4gY31cbmZ1bmN0aW9uIEJPYihhLGIpe3ZhciBjO2EuYj1iO2EuZz1uZXcgUmtiO2M9Q09iKGEuYik7YS5lPWM7YS5mPWM7YS5jPUNjYihERCh2TmIoYS5iLChmRmIoKSwkRWIpKSkpO2EuYT1FRCh2TmIoYS5iLChZOWMoKSxyOGMpKSk7YS5hPT1udWxsJiYoYS5hPTEpO0VkYihhLmEpPjE/KGEuZSo9RWRiKGEuYSkpOihhLmYvPUVkYihhLmEpKTtET2IoYSk7RU9iKGEpO0FPYihhKTt5TmIoYS5iLChDUGIoKSx1UGIpLGEuZyl9XG5mdW5jdGlvbiBZNWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPTA7aT1jO2lmKCFiKXtkPWMqKGEuYy5sZW5ndGgtMSk7aSo9LTF9Zm9yKGY9bmV3IG9sYihhKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTApO3lOYihlLChOeWMoKSxtd2MpLChGN2MoKSxCN2MpKTtlLm8uYT1kO2ZvcihoPVlfYihlLChVY2QoKSx6Y2QpKS5LYygpO2guT2IoKTspe2c9QkQoaC5QYigpLDExKTtnLm4uYT1kfWQrPWl9fVxuZnVuY3Rpb24gUXhkKGEsYixjKXt2YXIgZCxlLGY7aWYoYS5laigpKXtmPWEuZmooKTtrdWQoYSxiLGMpO2Q9YS5aaSgzLG51bGwsYyxiLGYpO2lmKGEuYmooKSl7ZT1hLmNqKGMsbnVsbCk7YS5paigpJiYoZT1hLmpqKGMsZSkpO2lmKCFlKXthLiRpKGQpfWVsc2V7ZS5FaShkKTtlLkZpKCl9fWVsc2V7YS4kaShkKX19ZWxzZXtrdWQoYSxiLGMpO2lmKGEuYmooKSl7ZT1hLmNqKGMsbnVsbCk7ISFlJiZlLkZpKCl9fX1cbmZ1bmN0aW9uIElMZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2g9YS5HayhjKTtpZihoIT1jKXtnPWEuZ1tiXTtpPWg7bXVkKGEsYixhLm9pKGIsaSkpO2Y9ZzthLmdpKGIsaSxmKTtpZihhLnJrKCkpe2Q9YztlPWEuZGooZCxudWxsKTshQkQoaCw0OSkuZWgoKSYmKGU9YS5jaihpLGUpKTshIWUmJmUuRmkoKX1vaWQoYS5lKSYmR0xkKGEsYS5aaSg5LGMsaCxiLGZhbHNlKSk7cmV0dXJuIGh9ZWxzZXtyZXR1cm4gY319XG5mdW5jdGlvbiBwVmIoYSxiKXt2YXIgYyxkLGUsZjtmb3IoZD1uZXcgb2xiKGEuYS5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTg5KTtjLmc9dHJ1ZX1mb3IoZj1uZXcgb2xiKGEuYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksODEpO2Uuaz1DY2IoREQoYS5lLktiKG5ldyB2Z2QoZSxiKSkpKTtlLmQuZz1lLmQuZyZDY2IoREQoYS5lLktiKG5ldyB2Z2QoZSxiKSkpKX1yZXR1cm4gYX1cbmZ1bmN0aW9uIHBrYyhhKXt2YXIgYixjLGQsZSxmO2M9KGI9QkQoZ2RiKEYxKSw5KSxuZXcgeHFiKGIsQkQoX0JiKGIsYi5sZW5ndGgpLDkpLDApKTtmPUJEKHZOYihhLCh3dGMoKSxndGMpKSwxMCk7aWYoZil7Zm9yKGU9bmV3IG9sYihmLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMSk7UEQodk5iKGQsJHNjKSk9PT1QRChhKSYmYTFiKG5ldyBiMWIoZC5iKSkmJnJxYihjLGQuail9fXJldHVybiBjfVxuZnVuY3Rpb24gekNjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2lmKGEuZFtjLnBdKXtyZXR1cm59Zm9yKGU9bmV3IFNyKHVyKFVfYihjKS5hLktjKCksbmV3IFNxKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDE3KTtoPWQuZC5pO2ZvcihnPW5ldyBTcih1cihSX2IoaCkuYS5LYygpLG5ldyBTcSkpO1FyKGcpOyl7Zj1CRChScihnKSwxNyk7Zi5jLmk9PWImJihhLmFbZi5wXT10cnVlKX16Q2MoYSxiLGgpfWEuZFtjLnBdPXRydWV9XG5mdW5jdGlvbiBCamQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtkPWFlYihhLkRiJjI1NCk7aWYoZD09MSl7YS5FYj1udWxsfWVsc2V7Zj1DRChhLkViKTtpZihkPT0yKXtlPXpqZChhLGIpO2EuRWI9ZltlPT0wPzE6MF19ZWxzZXtnPUtDKFNJLFVoZSwxLGQtMSw1LDEpO2ZvcihjPTIsaD0wLGk9MDtjPD0xMjg7Yzw8PTEpe2M9PWI/KytoOihhLkRiJmMpIT0wJiYoZ1tpKytdPWZbaCsrXSl9YS5FYj1nfX1hLkRiJj1+Yn1cbmZ1bmN0aW9uIG4xZChhLGIpe3ZhciBjLGQsZSxmLGc7ZD0oIWIucyYmKGIucz1uZXcgY1VkKHQ1LGIsMjEsMTcpKSxiLnMpO2Y9bnVsbDtmb3IoZT0wLGc9ZC5pO2U8ZzsrK2Upe2M9QkQocXVkKGQsZSksMTcwKTtzd2l0Y2goJDFkKHExZChhLGMpKSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6eyFmJiYoZj1uZXcgUmtiKTtmLmNbZi5jLmxlbmd0aF09YzticmVha319fXJldHVybiAhZj8obW1iKCksbW1iKCksam1iKTpmfVxuZnVuY3Rpb24gVWVlKGEpe3ZhciBiO2I9MDtzd2l0Y2goYSl7Y2FzZSAxMDU6Yj0yO2JyZWFrO2Nhc2UgMTA5OmI9ODticmVhaztjYXNlIDExNTpiPTQ7YnJlYWs7Y2FzZSAxMjA6Yj0xNjticmVhaztjYXNlIDExNzpiPTMyO2JyZWFrO2Nhc2UgMTE5OmI9NjQ7YnJlYWs7Y2FzZSA3MDpiPTI1NjticmVhaztjYXNlIDcyOmI9MTI4O2JyZWFrO2Nhc2UgODg6Yj01MTI7YnJlYWs7Y2FzZSA0NDpiPXp0ZTt9cmV0dXJuIGJ9XG5mdW5jdGlvbiBHaGIoYSxiLGMsZCxlKXt2YXIgZixnLGgsaTtpZihQRChhKT09PVBEKGIpJiZkPT1lKXtMaGIoYSxkLGMpO3JldHVybn1mb3IoaD0wO2g8ZDtoKyspe2c9MDtmPWFbaF07Zm9yKGk9MDtpPGU7aSsrKXtnPXdiYih3YmIoSWJiKHhiYihmLFlqZSkseGJiKGJbaV0sWWplKSkseGJiKGNbaCtpXSxZamUpKSx4YmIoVGJiKGcpLFlqZSkpO2NbaCtpXT1UYmIoZyk7Zz1QYmIoZywzMil9Y1toK2VdPVRiYihnKX19XG5mdW5jdGlvbiBDT2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtrPTA7aj0wO2U9YS5hO2g9ZS5hLmdjKCk7Zm9yKGQ9ZS5hLmVjKCkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSw1NjEpO2I9KGMuYiYmTE9iKGMpLGMuYSk7bD1iLmE7Zz1iLmI7ays9bCtnO2orPWwqZ31pPSR3bmQuTWF0aC5zcXJ0KDQwMCpoKmotNCpqK2sqaykraztmPTIqKDEwMCpoLTEpO2lmKGY9PTApe3JldHVybiBpfXJldHVybiBpL2Z9XG5mdW5jdGlvbiBtT2MoYSxiKXtpZihiLmIhPTApe2lzTmFOKGEucyk/KGEucz1FZGIoKHNDYihiLmIhPTApLEVEKGIuYS5hLmMpKSkpOihhLnM9JHduZC5NYXRoLm1pbihhLnMsRWRiKChzQ2IoYi5iIT0wKSxFRChiLmEuYS5jKSkpKSk7aXNOYU4oYS5jKT8oYS5jPUVkYigoc0NiKGIuYiE9MCksRUQoYi5jLmIuYykpKSk6KGEuYz0kd25kLk1hdGgubWF4KGEuYyxFZGIoKHNDYihiLmIhPTApLEVEKGIuYy5iLmMpKSkpKX19XG5mdW5jdGlvbiBQbGQoYSl7dmFyIGIsYyxkLGU7Yj1udWxsO2ZvcihkPXVsKHBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFsoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKSwoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKV0pKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDgyKTtlPWF0ZChjKTtpZighYil7Yj1Yb2QoZSl9ZWxzZSBpZihiIT1Yb2QoZSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBSeGQoYSxiKXt2YXIgYyxkLGUsZjtpZihhLmVqKCkpe2M9YS5pO2Y9YS5maigpO2x1ZChhLGIpO2Q9YS5aaSgzLG51bGwsYixjLGYpO2lmKGEuYmooKSl7ZT1hLmNqKGIsbnVsbCk7YS5paigpJiYoZT1hLmpqKGIsZSkpO2lmKCFlKXthLiRpKGQpfWVsc2V7ZS5FaShkKTtlLkZpKCl9fWVsc2V7YS4kaShkKX19ZWxzZXtsdWQoYSxiKTtpZihhLmJqKCkpe2U9YS5jaihiLG51bGwpOyEhZSYmZS5GaSgpfX19XG5mdW5jdGlvbiByd2QoYSxiLGMpe3ZhciBkLGUsZjtpZihhLmVqKCkpe2Y9YS5maigpOysrYS5qO2EuSGkoYixhLm9pKGIsYykpO2Q9YS5aaSgzLG51bGwsYyxiLGYpO2lmKGEuYmooKSl7ZT1hLmNqKGMsbnVsbCk7aWYoIWUpe2EuJGkoZCl9ZWxzZXtlLkVpKGQpO2UuRmkoKX19ZWxzZXthLiRpKGQpfX1lbHNleysrYS5qO2EuSGkoYixhLm9pKGIsYykpO2lmKGEuYmooKSl7ZT1hLmNqKGMsbnVsbCk7ISFlJiZlLkZpKCl9fX1cbmZ1bmN0aW9uIFdlZShhKXt2YXIgYixjLGQsZTtlPWEubGVuZ3RoO2I9bnVsbDtmb3IoZD0wO2Q8ZTtkKyspe2M9KEJDYihkLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoZCkpO2lmKGhmYignLiorP3tbKCl8XFxcXF4kJyx3ZmIoYykpPj0wKXtpZighYil7Yj1uZXcgSWZiO2Q+MCYmRWZiKGIsYS5zdWJzdHIoMCxkKSl9Yi5hKz0nXFxcXCc7QWZiKGIsYyZhamUpfWVsc2UgISFiJiZBZmIoYixjJmFqZSl9cmV0dXJuIGI/Yi5hOmF9XG5mdW5jdGlvbiBsNWMoYSl7dmFyIGI7aWYoIWEuYSl7dGhyb3cgdmJiKG5ldyBaZGIoJ0lEYXRhVHlwZSBjbGFzcyBleHBlY3RlZCBmb3IgbGF5b3V0IG9wdGlvbiAnK2EuZikpfWI9Z3ZkKGEuYSk7aWYoYj09bnVsbCl7dGhyb3cgdmJiKG5ldyBaZGIoXCJDb3VsZG4ndCBjcmVhdGUgbmV3IGluc3RhbmNlIG9mIHByb3BlcnR5ICdcIithLmYrXCInLiBcIitpc2UrKGZkYihZMyksWTMuaykranNlKSl9cmV0dXJuIEJEKGIsNDE0KX1cbmZ1bmN0aW9uIGFpZChhKXt2YXIgYixjLGQsZSxmO2Y9YS5laCgpO2lmKGYpe2lmKGYua2goKSl7ZT14aWQoYSxmKTtpZihlIT1mKXtjPWEuVmcoKTtkPShiPWEuVmcoKSxiPj0wP2EuUWcobnVsbCk6YS5laCgpLmloKGEsLTEtYixudWxsLG51bGwpKTthLlJnKEJEKGUsNDkpLGMpOyEhZCYmZC5GaSgpO2EuTGcoKSYmYS5NZygpJiZjPi0xJiZVaGQoYSxuZXcgblNkKGEsOSxjLGYsZSkpO3JldHVybiBlfX19cmV0dXJuIGZ9XG5mdW5jdGlvbiBuVGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtnPTA7Zj1hLmYuZTtmb3IoZD0wO2Q8Zi5jLmxlbmd0aDsrK2Qpe2g9KHRDYihkLGYuYy5sZW5ndGgpLEJEKGYuY1tkXSwxNDQpKTtmb3IoZT1kKzE7ZTxmLmMubGVuZ3RoOysrZSl7aT0odENiKGUsZi5jLmxlbmd0aCksQkQoZi5jW2VdLDE0NCkpO2M9UzZjKGguZCxpLmQpO2I9Yy1hLmFbaC5iXVtpLmJdO2crPWEuaVtoLmJdW2kuYl0qYipifX1yZXR1cm4gZ31cbmZ1bmN0aW9uIF9hYyhhLGIpe3ZhciBjO2lmKHdOYihiLChOeWMoKSxteGMpKSl7cmV0dXJufWM9aGJjKEJEKHZOYihiLFVhYyksMzYwKSxCRCh2TmIoYSxteGMpLDE2MykpO3lOYihiLFVhYyxjKTtpZihRcihuZXcgU3IodXIoT19iKGIpLmEuS2MoKSxuZXcgU3EpKSkpe3JldHVybn1zd2l0Y2goYy5nKXtjYXNlIDE6eU5iKGIsbXhjLChDdGMoKSx4dGMpKTticmVhaztjYXNlIDI6eU5iKGIsbXhjLChDdGMoKSx6dGMpKTt9fVxuZnVuY3Rpb24gd2tjKGEsYil7dmFyIGM7bWtjKGEpO2EuYT0oYz1uZXcgSmksTUFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuZCwxNikpLG5ldyBWa2MoYykpLGMpO3JrYyhhLEJEKHZOYihiLmIsKE55YygpLFd3YykpLDM3NikpO3RrYyhhKTtza2MoYSk7cWtjKGEpO3VrYyhhKTt2a2MoYSxiKTtNQWIoTEFiKG5ldyBZQWIobnVsbCwkaShZaShhLmIpLmEpKSxuZXcgTGtjKSxuZXcgTmtjKTtiLmE9ZmFsc2U7YS5hPW51bGx9XG5mdW5jdGlvbiBCb2QoKXtmb2QuY2FsbCh0aGlzLHl0ZSwoRmhkKCksRWhkKSk7dGhpcy5wPW51bGw7dGhpcy5hPW51bGw7dGhpcy5mPW51bGw7dGhpcy5uPW51bGw7dGhpcy5nPW51bGw7dGhpcy5jPW51bGw7dGhpcy5pPW51bGw7dGhpcy5qPW51bGw7dGhpcy5kPW51bGw7dGhpcy5iPW51bGw7dGhpcy5lPW51bGw7dGhpcy5rPW51bGw7dGhpcy5vPW51bGw7dGhpcy5zPW51bGw7dGhpcy5xPWZhbHNlO3RoaXMucj1mYWxzZX1cbmZ1bmN0aW9uIENzZCgpe0NzZD1jY2I7QnNkPW5ldyBEc2QoV25lLDApO3lzZD1uZXcgRHNkKCdJTlNJREVfU0VMRl9MT09QUycsMSk7enNkPW5ldyBEc2QoJ01VTFRJX0VER0VTJywyKTt4c2Q9bmV3IERzZCgnRURHRV9MQUJFTFMnLDMpO0FzZD1uZXcgRHNkKCdQT1JUUycsNCk7dnNkPW5ldyBEc2QoJ0NPTVBPVU5EJyw1KTt1c2Q9bmV3IERzZCgnQ0xVU1RFUlMnLDYpO3dzZD1uZXcgRHNkKCdESVNDT05ORUNURUQnLDcpfVxuZnVuY3Rpb24gU2diKGEsYil7dmFyIGMsZCxlO2lmKGI9PTApe3JldHVybiAoYS5hWzBdJjEpIT0wfWlmKGI8MCl7dGhyb3cgdmJiKG5ldyBvY2IoJ05lZ2F0aXZlIGJpdCBhZGRyZXNzJykpfWU9Yj4+NTtpZihlPj1hLmQpe3JldHVybiBhLmU8MH1jPWEuYVtlXTtiPTE8PChiJjMxKTtpZihhLmU8MCl7ZD1NZ2IoYSk7aWYoZTxkKXtyZXR1cm4gZmFsc2V9ZWxzZSBkPT1lPyhjPS1jKTooYz1+Yyl9cmV0dXJuIChjJmIpIT0wfVxuZnVuY3Rpb24gTzFjKGEsYixjLGQpe3ZhciBlO0JEKGMuYiw2NSk7QkQoYy5iLDY1KTtCRChkLmIsNjUpO0JEKGQuYiw2NSk7ZT1jN2MoUjZjKEJEKGMuYiw2NSkuYyksQkQoZC5iLDY1KS5jKTskNmMoZSxZTmIoQkQoYy5iLDY1KSxCRChkLmIsNjUpLGUpKTtCRChkLmIsNjUpO0JEKGQuYiw2NSk7QkQoZC5iLDY1KS5jLmErZS5hO0JEKGQuYiw2NSkuYy5iK2UuYjtCRChkLmIsNjUpO0hrYihkLmEsbmV3IFQxYyhhLGIsZCkpfVxuZnVuY3Rpb24gdk5kKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Zj1iLmU7aWYoZil7Yz1haWQoZik7ZD1CRChhLmcsNjc0KTtmb3IoZz0wO2c8YS5pOysrZyl7aT1kW2ddO2lmKEpRZChpKT09Yyl7ZT0oIWkuZCYmKGkuZD1uZXcgeE1kKGo1LGksMSkpLGkuZCk7aD1CRChjLmFoKE5pZChmLGYuQ2IsZi5EYj4+MTYpKSwxNSkuWGMoZik7aWYoaDxlLmkpe3JldHVybiB2TmQoYSxCRChxdWQoZSxoKSw4NykpfX19fXJldHVybiBifVxuZnVuY3Rpb24gYmNiKGEsYixjKXt2YXIgZD1fYmIsaDt2YXIgZT1kW2FdO3ZhciBmPWUgaW5zdGFuY2VvZiBBcnJheT9lWzBdOm51bGw7aWYoZSYmIWYpe189ZX1lbHNle189KGg9YiYmYi5wcm90b3R5cGUsIWgmJihoPV9iYltiXSksZWNiKGgpKTtfLmhtPWM7IWImJihfLmltPWdjYik7ZFthXT1ffWZvcih2YXIgZz0zO2c8YXJndW1lbnRzLmxlbmd0aDsrK2cpe2FyZ3VtZW50c1tnXS5wcm90b3R5cGU9X31mJiYoXy5nbT1mKX1cbmZ1bmN0aW9uIFFyKGEpe3ZhciBiO3doaWxlKCFCRChRYihhLmEpLDQ3KS5PYigpKXthLmQ9UHIoYSk7aWYoIWEuZCl7cmV0dXJuIGZhbHNlfWEuYT1CRChhLmQuUGIoKSw0Nyk7aWYoSkQoYS5hLDM5KSl7Yj1CRChhLmEsMzkpO2EuYT1iLmE7IWEuYiYmKGEuYj1uZXcgamtiKTtXamIoYS5iLGEuZCk7aWYoYi5iKXt3aGlsZSghYWtiKGIuYikpe1dqYihhLmIsQkQoZ2tiKGIuYiksNDcpKX19YS5kPWIuZH19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBrcmIoYSxiKXt2YXIgYyxkLGUsZixnO2Y9Yj09bnVsbD8wOmEuYi5zZShiKTtkPShjPWEuYS5nZXQoZiksYz09bnVsbD9uZXcgQXJyYXk6Yyk7Zm9yKGc9MDtnPGQubGVuZ3RoO2crKyl7ZT1kW2ddO2lmKGEuYi5yZShiLGUuY2QoKSkpe2lmKGQubGVuZ3RoPT0xKXtkLmxlbmd0aD0wO3RyYihhLmEsZil9ZWxzZXtkLnNwbGljZShnLDEpfS0tYS5jO3pwYihhLmIpO3JldHVybiBlLmRkKCl9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gR0diKGEsYil7dmFyIGMsZCxlLGY7ZT0xO2Iuaj10cnVlO2Y9bnVsbDtmb3IoZD1uZXcgb2xiKExGYihiKSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDIxMyk7aWYoIWEuY1tjLmNdKXthLmNbYy5jXT10cnVlO2Y9eEZiKGMsYik7aWYoYy5mKXtlKz1HR2IoYSxmKX1lbHNlIGlmKCFmLmomJmMuYT09Yy5lLmUtYy5kLmUpe2MuZj10cnVlO1FxYihhLnAsYyk7ZSs9R0diKGEsZil9fX1yZXR1cm4gZX1cbmZ1bmN0aW9uIE1WYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IG9sYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksODEpO2Q9KHVDYigwKSwwKTtpZihkPjApeyEoZmFkKGEuYS5jKSYmYi5uLmQpJiYhKGdhZChhLmEuYykmJmIubi5iKSYmKGIuZy5kKz0kd25kLk1hdGgubWF4KDAsZC8yLTAuNSkpOyEoZmFkKGEuYS5jKSYmYi5uLmEpJiYhKGdhZChhLmEuYykmJmIubi5jKSYmKGIuZy5hLT1kLTEpfX19XG5mdW5jdGlvbiBOM2IoYSl7dmFyIGIsYyxkLGUsZjtlPW5ldyBSa2I7Zj1PM2IoYSxlKTtiPUJEKHZOYihhLCh3dGMoKSxndGMpKSwxMCk7aWYoYil7Zm9yKGQ9bmV3IG9sYihiLmopO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxMSk7UEQodk5iKGMsJHNjKSk9PT1QRChhKSYmKGY9JHduZC5NYXRoLm1heChmLE8zYihjLGUpKSl9fWUuYy5sZW5ndGg9PTB8fHlOYihhLFlzYyxmKTtyZXR1cm4gZiE9LTE/ZTpudWxsfVxuZnVuY3Rpb24gYTliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7Zj1CRChJa2IoYi5lLDApLDE3KS5jO2Q9Zi5pO2U9ZC5rO2k9QkQoSWtiKGMuZywwKSwxNykuZDtnPWkuaTtoPWcuaztlPT0oajBiKCksZzBiKT95TmIoYSwod3RjKCksVnNjKSxCRCh2TmIoZCxWc2MpLDExKSk6eU5iKGEsKHd0YygpLFZzYyksZik7aD09ZzBiP3lOYihhLCh3dGMoKSxXc2MpLEJEKHZOYihnLFdzYyksMTEpKTp5TmIoYSwod3RjKCksV3NjKSxpKX1cbmZ1bmN0aW9uIFJzKGEsYil7dmFyIGMsZCxlLGY7Zj1UYmIoSWJiKEVpZSxrZWIoVGJiKEliYihiPT1udWxsPzA6dGIoYiksRmllKSksMTUpKSk7Yz1mJmEuYi5sZW5ndGgtMTtlPW51bGw7Zm9yKGQ9YS5iW2NdO2Q7ZT1kLGQ9ZC5hKXtpZihkLmQ9PWYmJkhiKGQuaSxiKSl7IWU/KGEuYltjXT1kLmEpOihlLmE9ZC5hKTtCcyhkLmMsZC5mKTtBcyhkLmIsZC5lKTstLWEuZjsrK2EuZTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gbEQoYSxiKXt2YXIgYyxkLGUsZixnO2ImPTYzO2M9YS5oO2Q9KGMmR2plKSE9MDtkJiYoY3w9LTEwNDg1NzYpO2lmKGI8MjIpe2c9Yz4+YjtmPWEubT4+YnxjPDwyMi1iO2U9YS5sPj5ifGEubTw8MjItYn1lbHNlIGlmKGI8NDQpe2c9ZD9GamU6MDtmPWM+PmItMjI7ZT1hLm0+PmItMjJ8Yzw8NDQtYn1lbHNle2c9ZD9GamU6MDtmPWQ/RWplOjA7ZT1jPj5iLTQ0fXJldHVybiBUQyhlJkVqZSxmJkVqZSxnJkZqZSl9XG5mdW5jdGlvbiBYT2IoYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMuYz1uZXcgUmtiO3RoaXMuZD1hO2Q9UGplO2U9UGplO2I9UWplO2M9UWplO2ZvcihnPUpzYihhLDApO2cuYiE9Zy5kLmM7KXtmPUJEKFhzYihnKSw4KTtkPSR3bmQuTWF0aC5taW4oZCxmLmEpO2U9JHduZC5NYXRoLm1pbihlLGYuYik7Yj0kd25kLk1hdGgubWF4KGIsZi5hKTtjPSR3bmQuTWF0aC5tYXgoYyxmLmIpfXRoaXMuYT1uZXcgSjZjKGQsZSxiLWQsYy1lKX1cbmZ1bmN0aW9uIERhYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtmb3IoZj1uZXcgb2xiKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDI5KTtmb3IoaD1uZXcgb2xiKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTtnLms9PShqMGIoKSxmMGIpJiZ6YWMoZyxiKTtmb3IoZD1uZXcgU3IodXIoVV9iKGcpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO3lhYyhjLGIpfX19fVxuZnVuY3Rpb24gWG9jKGEpe3ZhciBiLGMsZDt0aGlzLmM9YTtkPUJEKHZOYihhLChOeWMoKSxMd2MpKSwxMDMpO2I9RWRiKEVEKHZOYihhLG93YykpKTtjPUVkYihFRCh2TmIoYSxEeWMpKSk7ZD09KGVhZCgpLGFhZCl8fGQ9PWJhZHx8ZD09Y2FkPyh0aGlzLmI9YipjKToodGhpcy5iPTEvKGIqYykpO3RoaXMuaj1FZGIoRUQodk5iKGEsd3ljKSkpO3RoaXMuZT1FZGIoRUQodk5iKGEsdnljKSkpO3RoaXMuZj1hLmIuYy5sZW5ndGh9XG5mdW5jdGlvbiBBRGMoYSl7dmFyIGIsYzthLmU9S0MoV0Qsb2plLDI1LGEucC5jLmxlbmd0aCwxNSwxKTthLms9S0MoV0Qsb2plLDI1LGEucC5jLmxlbmd0aCwxNSwxKTtmb3IoYz1uZXcgb2xiKGEucCk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDEwKTthLmVbYi5wXT1zcihuZXcgU3IodXIoUl9iKGIpLmEuS2MoKSxuZXcgU3EpKSk7YS5rW2IucF09c3IobmV3IFNyKHVyKFVfYihiKS5hLktjKCksbmV3IFNxKSkpfX1cbmZ1bmN0aW9uIEREYyhhKXt2YXIgYixjLGQsZSxmLGc7ZT0wO2EucT1uZXcgUmtiO2I9bmV3IFRxYjtmb3IoZz1uZXcgb2xiKGEucCk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtmLnA9ZTtmb3IoZD1uZXcgU3IodXIoVV9iKGYpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO1FxYihiLGMuZC5pKX1iLmEuQmMoZikhPW51bGw7RWtiKGEucSxuZXcgVnFiKGIpKTtiLmEuJGIoKTsrK2V9fVxuZnVuY3Rpb24gSlRjKCl7SlRjPWNjYjtDVGM9bmV3IHEwYigyMCk7QlRjPW5ldyBPc2QoKFk5YygpLGY5YyksQ1RjKTtIVGM9bmV3IE9zZChUOWMsMjApO3VUYz1uZXcgT3NkKHI4Yyx0bWUpO0VUYz1uZXcgT3NkKEQ5YyxtZWIoMSkpO0dUYz1uZXcgT3NkKEg5YywoQmNiKCksdHJ1ZSkpO3ZUYz15OGM7eFRjPVk4Yzt5VGM9XzhjO3pUYz1iOWM7d1RjPVc4YztBVGM9ZTljO0RUYz14OWM7SVRjPShyVGMoKSxwVGMpO0ZUYz1uVGN9XG5mdW5jdGlvbiBSQmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5hLmY+MCYmSkQoYiw0Mikpe2EuYS5xaigpO2o9QkQoYiw0Mik7aT1qLmNkKCk7Zj1pPT1udWxsPzA6dGIoaSk7Zz1EQWQoYS5hLGYpO2M9YS5hLmRbZ107aWYoYyl7ZD1CRChjLmcsMzY3KTtrPWMuaTtmb3IoaD0wO2g8azsrK2gpe2U9ZFtoXTtpZihlLlNoKCk9PWYmJmUuRmIoaikpe1JCZChhLGopO3JldHVybiB0cnVlfX19fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIHNrYyhhKXt2YXIgYixjLGQsZTtmb3IoZT1CRChRYyhhLmEsKFhqYygpLFVqYykpLDE1KS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDEwMSk7Yz0oYj1FYyhkLmspLGIuSGMoKFVjZCgpLEFjZCkpP2IuSGMoemNkKT9iLkhjKFJjZCk/Yi5IYyhUY2QpP251bGw6ZGtjOmZrYzpla2M6Y2tjKTtra2MoYSxkLGNbMF0sKEZrYygpLENrYyksMCk7a2tjKGEsZCxjWzFdLERrYywxKTtra2MoYSxkLGNbMl0sRWtjLDEpfX1cbmZ1bmN0aW9uIGVuYyhhLGIpe3ZhciBjLGQ7Yz1mbmMoYik7aW5jKGEsYixjKTt1UGMoYS5hLEJEKHZOYihRX2IoYi5iKSwod3RjKCksanRjKSksMjMwKSk7ZG5jKGEpO2NuYyhhLGIpO2Q9S0MoV0Qsb2plLDI1LGIuYi5qLmMubGVuZ3RoLDE1LDEpO2xuYyhhLGIsKFVjZCgpLEFjZCksZCxjKTtsbmMoYSxiLHpjZCxkLGMpO2xuYyhhLGIsUmNkLGQsYyk7bG5jKGEsYixUY2QsZCxjKTthLmE9bnVsbDthLmM9bnVsbDthLmI9bnVsbH1cbmZ1bmN0aW9uIE9ZYygpe09ZYz1jY2I7TFljPSh6WWMoKSx5WWMpO0tZYz1uZXcgTnNkKEJyZSxMWWMpO0lZYz1uZXcgTnNkKENyZSwoQmNiKCksdHJ1ZSkpO21lYigtMSk7RlljPW5ldyBOc2QoRHJlLG1lYigtMSkpO21lYigtMSk7R1ljPW5ldyBOc2QoRXJlLG1lYigtMSkpO0pZYz1uZXcgTnNkKEZyZSxmYWxzZSk7TVljPW5ldyBOc2QoR3JlLHRydWUpO0hZYz1uZXcgTnNkKEhyZSxmYWxzZSk7TlljPW5ldyBOc2QoSXJlLC0xKX1cbmZ1bmN0aW9uIHlsZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgNzohYS5lJiYoYS5lPW5ldyB5NWQoQjIsYSw3LDQpKTtVeGQoYS5lKTshYS5lJiYoYS5lPW5ldyB5NWQoQjIsYSw3LDQpKTt5dGQoYS5lLEJEKGMsMTQpKTtyZXR1cm47Y2FzZSA4OiFhLmQmJihhLmQ9bmV3IHk1ZChCMixhLDgsNSkpO1V4ZChhLmQpOyFhLmQmJihhLmQ9bmV3IHk1ZChCMixhLDgsNSkpO3l0ZChhLmQsQkQoYywxNCkpO3JldHVybjt9WmtkKGEsYixjKX1cbmZ1bmN0aW9uIEF0KGEsYil7dmFyIGMsZCxlLGYsZztpZihQRChiKT09PVBEKGEpKXtyZXR1cm4gdHJ1ZX1pZighSkQoYiwxNSkpe3JldHVybiBmYWxzZX1nPUJEKGIsMTUpO2lmKGEuZ2MoKSE9Zy5nYygpKXtyZXR1cm4gZmFsc2V9Zj1nLktjKCk7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9ZC5QYigpO2U9Zi5QYigpO2lmKCEoUEQoYyk9PT1QRChlKXx8YyE9bnVsbCYmcGIoYyxlKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBVNmIoYSxiKXt2YXIgYyxkLGUsZjtmPUJEKEdBYihMQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuYiwxNikpLG5ldyAkNmIpLG5ldyBhN2IpLEJ5YihuZXcgZnpiLG5ldyBkemIsbmV3IEV6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsWyhGeWIoKSxEeWIpXSkpKSwxNSk7Zi5KYyhuZXcgYzdiKTtjPTA7Zm9yKGU9Zi5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDExKTtkLnA9PS0xJiZUNmIoYSxkLGMrKyl9fVxuZnVuY3Rpb24gV3pjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEtMYztjYXNlIDE6cmV0dXJuIG5ldyBkSmM7Y2FzZSAyOnJldHVybiBuZXcgdEpjO2Nhc2UgMzpyZXR1cm4gbmV3IENNYztjYXNlIDQ6cmV0dXJuIG5ldyAkSmM7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYignTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbm9kZSBwbGFjZXIgJysoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX1cbmZ1bmN0aW9uIG5xYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBhQ2M7Y2FzZSAxOnJldHVybiBuZXcgVkJjO2Nhc2UgMjpyZXR1cm4gbmV3IGtDYztjYXNlIDM6cmV0dXJuIG5ldyByQ2M7Y2FzZSA0OnJldHVybiBuZXcgZUNjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgJysoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX1cbmZ1bmN0aW9uIEhXYygpe0hXYz1jY2I7QldjPW5ldyBOc2QobHJlLG1lYigwKSk7Q1djPW5ldyBOc2QobXJlLDApO3lXYz0ocFdjKCksbVdjKTt4V2M9bmV3IE5zZChucmUseVdjKTttZWIoMCk7d1djPW5ldyBOc2Qob3JlLG1lYigxKSk7RVdjPShzWGMoKSxxWGMpO0RXYz1uZXcgTnNkKHByZSxFV2MpO0dXYz0oZldjKCksZVdjKTtGV2M9bmV3IE5zZChxcmUsR1djKTtBV2M9KGlYYygpLGhYYyk7eldjPW5ldyBOc2QocnJlLEFXYyl9XG5mdW5jdGlvbiBYWGIoYSxiLGMpe3ZhciBkO2Q9bnVsbDshIWImJihkPWIuZCk7aFliKGEsbmV3IGNXYihiLm4uYS1kLmIrYy5hLGIubi5iLWQuZCtjLmIpKTtoWWIoYSxuZXcgY1diKGIubi5hLWQuYitjLmEsYi5uLmIrYi5vLmIrZC5hK2MuYikpO2hZYihhLG5ldyBjV2IoYi5uLmErYi5vLmErZC5jK2MuYSxiLm4uYi1kLmQrYy5iKSk7aFliKGEsbmV3IGNXYihiLm4uYStiLm8uYStkLmMrYy5hLGIubi5iK2Iuby5iK2QuYStjLmIpKX1cbmZ1bmN0aW9uIFQ2YihhLGIsYyl7dmFyIGQsZSxmO2IucD1jO2ZvcihmPXVsKHBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFtuZXcgSjBiKGIpLG5ldyBSMGIoYildKSkpO1FyKGYpOyl7ZD1CRChScihmKSwxMSk7ZC5wPT0tMSYmVDZiKGEsZCxjKX1pZihiLmkuaz09KGowYigpLGcwYikpe2ZvcihlPW5ldyBvbGIoYi5pLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMSk7ZCE9YiYmZC5wPT0tMSYmVDZiKGEsZCxjKX19fVxuZnVuY3Rpb24gclBjKGEpe3ZhciBiLGMsZCxlLGY7ZT1CRChHQWIoSUFiKFVBYihhKSksQnliKG5ldyBmemIsbmV3IGR6YixuZXcgRXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLER5YildKSkpLDE1KTtkPWRtZTtpZihlLmdjKCk+PTIpe2M9ZS5LYygpO2I9RUQoYy5QYigpKTt3aGlsZShjLk9iKCkpe2Y9YjtiPUVEKGMuUGIoKSk7ZD0kd25kLk1hdGgubWluKGQsKHVDYihiKSxiKS0odUNiKGYpLGYpKX19cmV0dXJuIGR9XG5mdW5jdGlvbiBnVWMoYSxiKXt2YXIgYyxkLGUsZixnO2Q9bmV3IFBzYjtHc2IoZCxiLGQuYy5iLGQuYyk7ZG97Yz0oc0NiKGQuYiE9MCksQkQoTnNiKGQsZC5hLmEpLDg2KSk7YS5iW2MuZ109MTtmb3IoZj1Kc2IoYy5kLDApO2YuYiE9Zi5kLmM7KXtlPUJEKFhzYihmKSwxODgpO2c9ZS5jO2EuYltnLmddPT0xP0RzYihhLmEsZSk6YS5iW2cuZ109PTI/KGEuYltnLmddPTEpOkdzYihkLGcsZC5jLmIsZC5jKX19d2hpbGUoZC5iIT0wKX1cbmZ1bmN0aW9uIEp1KGEsYil7dmFyIGMsZCxlO2lmKFBEKGIpPT09UEQoUWIoYSkpKXtyZXR1cm4gdHJ1ZX1pZighSkQoYiwxNSkpe3JldHVybiBmYWxzZX1kPUJEKGIsMTUpO2U9YS5nYygpO2lmKGUhPWQuZ2MoKSl7cmV0dXJuIGZhbHNlfWlmKEpEKGQsNTQpKXtmb3IoYz0wO2M8ZTtjKyspe2lmKCFIYihhLlhiKGMpLGQuWGIoYykpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWVsc2V7cmV0dXJuIGtyKGEuS2MoKSxkLktjKCkpfX1cbmZ1bmN0aW9uIEFhYyhhLGIpe3ZhciBjLGQ7aWYoYS5jLmxlbmd0aCE9MCl7aWYoYS5jLmxlbmd0aD09Mil7emFjKCh0Q2IoMCxhLmMubGVuZ3RoKSxCRChhLmNbMF0sMTApKSwocmJkKCksbmJkKSk7emFjKCh0Q2IoMSxhLmMubGVuZ3RoKSxCRChhLmNbMV0sMTApKSxvYmQpfWVsc2V7Zm9yKGQ9bmV3IG9sYihhKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTApO3phYyhjLGIpfX1hLmM9S0MoU0ksVWhlLDEsMCw1LDEpfX1cbmZ1bmN0aW9uIHVLYyhhKXt2YXIgYixjO2lmKGEuYy5sZW5ndGghPTIpe3Rocm93IHZiYihuZXcgWmRiKCdPcmRlciBvbmx5IGFsbG93ZWQgZm9yIHR3byBwYXRocy4nKSl9Yj0odENiKDAsYS5jLmxlbmd0aCksQkQoYS5jWzBdLDE3KSk7Yz0odENiKDEsYS5jLmxlbmd0aCksQkQoYS5jWzFdLDE3KSk7aWYoYi5kLmkhPWMuYy5pKXthLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2EuY1thLmMubGVuZ3RoXT1jO2EuY1thLmMubGVuZ3RoXT1ifX1cbmZ1bmN0aW9uIEVNYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtkPW5ldyAkcmI7Zz1HeChuZXcgYW1iKGEuZykpO2ZvcihmPWcuYS5lYygpLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksMTApO2lmKCFlKXtTZGQoYiwnVGhlcmUgYXJlIG5vIGNsYXNzZXMgaW4gYSBiYWxhbmNlZCBsYXlvdXQuJyk7YnJlYWt9aD1hLmpbZS5wXTtjPUJEKFdyYihkLGgpLDE1KTtpZighYyl7Yz1uZXcgUmtiO1hyYihkLGgsYyl9Yy5GYyhlKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIERxZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aWYoYyl7Zj1jLmEubGVuZ3RoO2Q9bmV3IFlnZShmKTtmb3IoaD0oZC5iLWQuYSkqZC5jPDA/KFhnZSgpLFdnZSk6bmV3IHNoZShkKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwxOSk7aT1acGQoYyxnLmEpO2lmKGkpe2o9ZnRkKF9wZChpLEl0ZSksYik7UmhiKGEuZixqLGkpO2U9VnRlIGluIGkuYTtlJiZMa2QoaixfcGQoaSxWdGUpKTtncmQoaSxqKTtocmQoaSxqKX19fX1cbmZ1bmN0aW9uIG5kYyhhLGIpe3ZhciBjLGQsZSxmLGc7T2RkKGIsJ1BvcnQgc2lkZSBwcm9jZXNzaW5nJywxKTtmb3IoZz1uZXcgb2xiKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2U9QkQobWxiKGcpLDEwKTtvZGMoZSl9Zm9yKGQ9bmV3IG9sYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyOSk7Zm9yKGY9bmV3IG9sYihjLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7b2RjKGUpfX1RZGQoYil9XG5mdW5jdGlvbiBiZmMoYSxiLGMpe3ZhciBkLGUsZixnLGg7ZT1hLmY7IWUmJihlPUJEKGEuYS5hLmVjKCkuS2MoKS5QYigpLDU3KSk7Y2ZjKGUsYixjKTtpZihhLmEuYS5nYygpPT0xKXtyZXR1cm59ZD1iKmM7Zm9yKGc9YS5hLmEuZWMoKS5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDU3KTtpZihmIT1lKXtoPXVnYyhmKTtpZihoLmYuZCl7Zi5kLmQrPWQrcGxlO2YuZC5hLT1kK3BsZX1lbHNlIGguZi5hJiYoZi5kLmEtPWQrcGxlKX19fVxuZnVuY3Rpb24gdFFiKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuO2c9Yy1hO2g9ZC1iO2Y9JHduZC5NYXRoLmF0YW4yKGcsaCk7aT1mK2NtZTtqPWYtY21lO2s9ZSokd25kLk1hdGguc2luKGkpK2E7bT1lKiR3bmQuTWF0aC5jb3MoaSkrYjtsPWUqJHduZC5NYXRoLnNpbihqKSthO249ZSokd25kLk1hdGguY29zKGopK2I7cmV0dXJuIE91KE9DKEdDKG0xLDEpLG5pZSw4LDAsW25ldyBmN2MoayxtKSxuZXcgZjdjKGwsbildKSl9XG5mdW5jdGlvbiBPTGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtlPWM7az1iO2Y9aztkb3tmPWEuYVtmLnBdO2g9KGw9YS5nW2YucF0sRWRiKGEucFtsLnBdKStFZGIoYS5kW2YucF0pLWYuZC5kKTtpPVJMYyhmLGQpO2lmKGkpe2c9KGo9YS5nW2kucF0sRWRiKGEucFtqLnBdKStFZGIoYS5kW2kucF0pK2kuby5iK2kuZC5hKTtlPSR3bmQuTWF0aC5taW4oZSxoLShnK2pCYyhhLmssZixpKSkpfX13aGlsZShrIT1mKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIFBMYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsO2U9YztrPWI7Zj1rO2Rve2Y9YS5hW2YucF07Zz0obD1hLmdbZi5wXSxFZGIoYS5wW2wucF0pK0VkYihhLmRbZi5wXSkrZi5vLmIrZi5kLmEpO2k9UUxjKGYsZCk7aWYoaSl7aD0oaj1hLmdbaS5wXSxFZGIoYS5wW2oucF0pK0VkYihhLmRbaS5wXSktaS5kLmQpO2U9JHduZC5NYXRoLm1pbihlLGgtKGcrakJjKGEuayxmLGkpKSl9fXdoaWxlKGshPWYpO3JldHVybiBlfVxuZnVuY3Rpb24gaGtkKGEsYil7dmFyIGMsZDtkPSghYS5vJiYoYS5vPW5ldyBkSWQoKFRoZCgpLFFoZCksUzIsYSwwKSksQUFkKGEubyxiKSk7aWYoZCE9bnVsbCl7cmV0dXJuIGR9Yz1iLndnKCk7SkQoYyw0KSYmKGM9PW51bGw/KCFhLm8mJihhLm89bmV3IGRJZCgoVGhkKCksUWhkKSxTMixhLDApKSxMQWQoYS5vLGIpKTooIWEubyYmKGEubz1uZXcgZElkKChUaGQoKSxRaGQpLFMyLGEsMCkpLEhBZChhLm8sYixjKSksYSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBIYmQoKXtIYmQ9Y2NiO3piZD1uZXcgSWJkKCdIX0xFRlQnLDApO3liZD1uZXcgSWJkKCdIX0NFTlRFUicsMSk7QmJkPW5ldyBJYmQoJ0hfUklHSFQnLDIpO0diZD1uZXcgSWJkKCdWX1RPUCcsMyk7RmJkPW5ldyBJYmQoJ1ZfQ0VOVEVSJyw0KTtFYmQ9bmV3IEliZCgnVl9CT1RUT00nLDUpO0NiZD1uZXcgSWJkKCdJTlNJREUnLDYpO0RiZD1uZXcgSWJkKCdPVVRTSURFJyw3KTtBYmQ9bmV3IEliZCgnSF9QUklPUklUWScsOCl9XG5mdW5jdGlvbiBvNmQoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yj1hLkhoKF92ZSk7aWYoYil7aD1HRChBQWQoKCFiLmImJihiLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4NixiKSksYi5iKSwnc2V0dGluZ0RlbGVnYXRlcycpKTtpZihoIT1udWxsKXtjPW5ldyBSa2I7Zm9yKGU9bWZiKGgsJ1xcXFx3KycpLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtjLmNbYy5jLmxlbmd0aF09ZH1yZXR1cm4gY319cmV0dXJuIG1tYigpLG1tYigpLGptYn1cbmZ1bmN0aW9uIHNHYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKCFiLmYpe3Rocm93IHZiYihuZXcgV2RiKCdUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuJykpfWY9bnVsbDtlPU9oZTtmb3IoZD1uZXcgb2xiKGEuZCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDIxMyk7aD1jLmQ7aT1jLmU7aWYoeEdiKGEsaCxiKSYmIXhHYihhLGksYikpe2c9aS5lLWguZS1jLmE7aWYoZzxlKXtlPWc7Zj1jfX19cmV0dXJuIGZ9XG5mdW5jdGlvbiBxVGIoYSl7dmFyIGIsYyxkLGUsZixnO2lmKGEuZi5lLmMubGVuZ3RoPD0xKXtyZXR1cm59Yj0wO2U9blRiKGEpO2M9UGplO2Rve2I+MCYmKGU9Yyk7Zm9yKGc9bmV3IG9sYihhLmYuZSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDE0NCk7aWYoQ2NiKEREKHZOYihmLChiVGIoKSxVU2IpKSkpKXtjb250aW51ZX1kPW1UYihhLGYpO1A2YyhYNmMoZi5kKSxkKX1jPW5UYihhKX13aGlsZSghcFRiKGEsYisrLGUsYykpfVxuZnVuY3Rpb24gJGFjKGEsYil7dmFyIGMsZCxlO09kZChiLCdMYXllciBjb25zdHJhaW50IHByZXByb2Nlc3NpbmcnLDEpO2M9bmV3IFJrYjtlPW5ldyBCaWIoYS5hLDApO3doaWxlKGUuYjxlLmQuZ2MoKSl7ZD0oc0NiKGUuYjxlLmQuZ2MoKSksQkQoZS5kLlhiKGUuYz1lLmIrKyksMTApKTtpZihaYWMoZCkpe1hhYyhkKTtjLmNbYy5jLmxlbmd0aF09ZDt1aWIoZSl9fWMuYy5sZW5ndGg9PTB8fHlOYihhLCh3dGMoKSxMc2MpLGMpO1FkZChiKX1cbmZ1bmN0aW9uIHNqYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zj1hLmcuYTtnPWEuZy5iO2ZvcihkPW5ldyBvbGIoYS5kKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNzApO2U9Yy5uO2EuYT09KEFqYygpLHhqYyl8fGEuaT09KFVjZCgpLHpjZCk/KGUuYT1mKTphLmE9PXlqY3x8YS5pPT0oVWNkKCksVGNkKT8oZS5hPWYrYS5qLmEtYy5vLmEpOihlLmE9ZisoYS5qLmEtYy5vLmEpLzIpO2UuYj1nO1A2YyhlLGIpO2crPWMuby5iK2EuZX19XG5mdW5jdGlvbiBMU2MoYSxiLGMpe3ZhciBkLGUsZixnO09kZChjLCdQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzJywxKTthLmE9Yi5iLmI9PTA/MTpiLmIuYjtmPW51bGw7ZD1Kc2IoYi5iLDApO3doaWxlKCFmJiZkLmIhPWQuZC5jKXtnPUJEKFhzYihkKSw4Nik7aWYoQ2NiKEREKHZOYihnLChtVGMoKSxqVGMpKSkpKXtmPWc7ZT1nLmU7ZS5hPUJEKHZOYihnLGtUYyksMTkpLmE7ZS5iPTB9fU1TYyhhLFVSYyhmKSxVZGQoYywxKSk7UWRkKGMpfVxuZnVuY3Rpb24geFNjKGEsYixjKXt2YXIgZCxlLGY7T2RkKGMsJ1Byb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCcsMSk7YS5hPWIuYi5iPT0wPzE6Yi5iLmI7ZT1udWxsO2Q9SnNiKGIuYiwwKTt3aGlsZSghZSYmZC5iIT1kLmQuYyl7Zj1CRChYc2IoZCksODYpO0NjYihERCh2TmIoZiwobVRjKCksalRjKSkpKSYmKGU9Zil9ISFlJiZ5U2MoYSxPdShPQyhHQyhxJCwxKSxmbWUsODYsMCxbZV0pKSxjKTtRZGQoYyl9XG5mdW5jdGlvbiBicmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtqPWE7aT0kcGQoaiwnaW5kaXZpZHVhbFNwYWNpbmdzJyk7aWYoaSl7ZD1pa2QoYiwoWTljKCksTzljKSk7Zz0hZDtpZihnKXtlPW5ldyBfZmQ7amtkKGIsTzljLGUpfWg9QkQoaGtkKGIsTzljKSwzNzMpO2w9aTtmPW51bGw7ISFsJiYoZj0oaz0kQihsLEtDKFpJLG5pZSwyLDAsNiwxKSksbmV3IG1DKGwsaykpKTtpZihmKXtjPW5ldyBGcmQobCxoKTtyZWIoZixjKX19fVxuZnVuY3Rpb24gZnJkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtpPW51bGw7bD1hO2s9bnVsbDtpZihjdWUgaW4gbC5hfHxkdWUgaW4gbC5hfHxPdGUgaW4gbC5hKXtqPW51bGw7bT1ldGQoYik7Zz0kcGQobCxjdWUpO2M9bmV3IElyZChtKTtFcWQoYy5hLGcpO2g9JHBkKGwsZHVlKTtkPW5ldyBhc2QobSk7UHFkKGQuYSxoKTtmPVlwZChsLE90ZSk7ZT1uZXcgZHNkKG0pO2o9KFFxZChlLmEsZiksZik7az1qfWk9aztyZXR1cm4gaX1cbmZ1bmN0aW9uICR3KGEsYil7dmFyIGMsZCxlO2lmKGI9PT1hKXtyZXR1cm4gdHJ1ZX1pZihKRChiLDU0Mykpe2U9QkQoYiw4MzUpO2lmKGEuYS5kIT1lLmEuZHx8QWgoYSkuZ2MoKSE9QWgoZSkuZ2MoKSl7cmV0dXJuIGZhbHNlfWZvcihkPUFoKGUpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksNDE2KTtpZihBdyhhLGMuYS5jZCgpKSE9QkQoYy5hLmRkKCksMTQpLmdjKCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gQk1iKGEpe3ZhciBiLGMsZCxlO2Q9QkQoYS5hLDE5KS5hO2U9QkQoYS5iLDE5KS5hO2I9ZDtjPWU7aWYoZD09MCYmZT09MCl7Yy09MX1lbHNle2lmKGQ9PS0xJiZlPD0wKXtiPTA7Yy09Mn1lbHNle2lmKGQ8PTAmJmU+MCl7Yi09MTtjLT0xfWVsc2V7aWYoZD49MCYmZTwwKXtiKz0xO2MrPTF9ZWxzZXtpZihkPjAmJmU+PTApe2ItPTE7Yys9MX1lbHNle2IrPTE7Yy09MX19fX19cmV0dXJuIG5ldyB2Z2QobWViKGIpLG1lYihjKSl9XG5mdW5jdGlvbiBQSWMoYSxiKXtpZihhLmM8Yi5jKXtyZXR1cm4gLTF9ZWxzZSBpZihhLmM+Yi5jKXtyZXR1cm4gMX1lbHNlIGlmKGEuYjxiLmIpe3JldHVybiAtMX1lbHNlIGlmKGEuYj5iLmIpe3JldHVybiAxfWVsc2UgaWYoYS5hIT1iLmEpe3JldHVybiB0YihhLmEpLXRiKGIuYSl9ZWxzZSBpZihhLmQ9PShVSWMoKSxUSWMpJiZiLmQ9PVNJYyl7cmV0dXJuIC0xfWVsc2UgaWYoYS5kPT1TSWMmJmIuZD09VEljKXtyZXR1cm4gMX1yZXR1cm4gMH1cbmZ1bmN0aW9uIGFOYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zj1iLmE7Zi5jLmk9PWIuYj8oZz1mLmQpOihnPWYuYyk7Zi5jLmk9PWIuYj8oZD1mLmMpOihkPWYuZCk7ZT1OTGMoYS5hLGcsZCk7aWYoZT4wJiZlPGRtZSl7Yz1PTGMoYS5hLGQuaSxlLGEuYyk7VExjKGEuYSxkLmksLWMpO3JldHVybiBjPjB9ZWxzZSBpZihlPDAmJi1lPGRtZSl7Yz1QTGMoYS5hLGQuaSwtZSxhLmMpO1RMYyhhLmEsZC5pLGMpO3JldHVybiBjPjB9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gUlpjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7ZT0oYi1hLmQpL2EuYy5jLmxlbmd0aDtmPTA7YS5hKz1jO2EuZD1iO2ZvcihsPW5ldyBvbGIoYS5jKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMzMpO2o9ay5nO2k9ay5mO2RsZChrLGsuaStmKmUpO2VsZChrLGsuaitkKmMpO2NsZChrLGsuZytlKTthbGQoayxhLmEpOysrZjtoPWsuZztnPWsuZjtGZmQoayxuZXcgZjdjKGgsZyksbmV3IGY3YyhqLGkpKX19XG5mdW5jdGlvbiBYbWQoYSl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9aD1hLmxlbmd0aDtlPShoKzEpLzJ8MDtnPUtDKFNELHd0ZSwyNSxlLDE1LDEpO2glMiE9MCYmKGdbLS1lXT1qbmQoKEJDYihoLTEsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoLTEpKSkpO2ZvcihjPTAsZD0wO2M8ZTsrK2Mpe2I9am5kKGJmYihhLGQrKykpO2Y9am5kKGJmYihhLGQrKykpO2dbY109KGI8PDR8Zik8PDI0Pj4yNH1yZXR1cm4gZ31cbmZ1bmN0aW9uIHZkYihhKXtpZihhLnBlKCkpe3ZhciBiPWEuYztiLnFlKCk/KGEubz0nWycrYi5uKTohYi5wZSgpPyhhLm89J1tMJytiLm5lKCkrJzsnKTooYS5vPSdbJytiLm5lKCkpO2EuYj1iLm1lKCkrJ1tdJzthLms9Yi5vZSgpKydbXSc7cmV0dXJufXZhciBjPWEuajt2YXIgZD1hLmQ7ZD1kLnNwbGl0KCcvJyk7YS5vPXlkYignLicsW2MseWRiKCckJyxkKV0pO2EuYj15ZGIoJy4nLFtjLHlkYignLicsZCldKTthLms9ZFtkLmxlbmd0aC0xXX1cbmZ1bmN0aW9uIHFHYihhLGIpe3ZhciBjLGQsZSxmLGc7Zz1udWxsO2ZvcihmPW5ldyBvbGIoYS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMjEpO2lmKGUuYi5hLmMubGVuZ3RoPT1lLmcuYS5jLmxlbmd0aCl7ZD1lLmU7Zz1CR2IoZSk7Zm9yKGM9ZS5lLUJEKGcuYSwxOSkuYSsxO2M8ZS5lK0JEKGcuYiwxOSkuYTtjKyspe2JbY108YltkXSYmKGQ9Yyl9aWYoYltkXTxiW2UuZV0pey0tYltlLmVdOysrYltkXTtlLmU9ZH19fX1cbmZ1bmN0aW9uIFNMYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2U9UGplO2Q9UWplO2ZvcihjPW5ldyBvbGIoYS5lLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyOSk7Zm9yKGc9bmV3IG9sYihiLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMCk7aT1FZGIoYS5wW2YucF0pO2g9aStFZGIoYS5iW2EuZ1tmLnBdLnBdKTtlPSR3bmQuTWF0aC5taW4oZSxpKTtkPSR3bmQuTWF0aC5tYXgoZCxoKX19cmV0dXJuIGQtZX1cbmZ1bmN0aW9uIHIxZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7aT1udWxsO2U9ZjFkKGEsYik7Zm9yKGg9MCxqPWUuZ2MoKTtoPGo7KytoKXtmPUJEKGUuWGIoaCksMTcwKTtpZihkZmIoZCxhMmQocTFkKGEsZikpKSl7Zz1iMmQocTFkKGEsZikpO2lmKGM9PW51bGwpe2lmKGc9PW51bGwpe3JldHVybiBmfWVsc2UgIWkmJihpPWYpfWVsc2UgaWYoZGZiKGMsZykpe3JldHVybiBmfWVsc2UgZz09bnVsbCYmIWkmJihpPWYpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHMxZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7aT1udWxsO2U9ZzFkKGEsYik7Zm9yKGg9MCxqPWUuZ2MoKTtoPGo7KytoKXtmPUJEKGUuWGIoaCksMTcwKTtpZihkZmIoZCxhMmQocTFkKGEsZikpKSl7Zz1iMmQocTFkKGEsZikpO2lmKGM9PW51bGwpe2lmKGc9PW51bGwpe3JldHVybiBmfWVsc2UgIWkmJihpPWYpfWVsc2UgaWYoZGZiKGMsZykpe3JldHVybiBmfWVsc2UgZz09bnVsbCYmIWkmJihpPWYpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHAzZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2c9bmV3IHl1ZDtoPVM2ZChhLmUuVGcoKSxiKTtkPUJEKGEuZywxMTkpO1E2ZCgpO2lmKEJEKGIsNjYpLk9qKCkpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aC5ybChlLmFrKCkpJiZ3dGQoZyxlKX19ZWxzZXtmb3IoZj0wO2Y8YS5pOysrZil7ZT1kW2ZdO2lmKGgucmwoZS5haygpKSl7aT1lLmRkKCk7d3RkKGcsYz9iM2QoYSxiLGYsZy5pLGkpOmkpfX19cmV0dXJuIHd1ZChnKX1cbmZ1bmN0aW9uIFQ5YihhLGIpe3ZhciBjLGQsZSxmLGc7Yz1uZXcgUnBiKEVXKTtmb3IoZT0oQXBjKCksT0MoR0MoRVcsMSksS2llLDIyNywwLFt3cGMseXBjLHZwYyx4cGMsenBjLHVwY10pKSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07T3BiKGMsZCxuZXcgUmtiKX1NQWIoTkFiKEpBYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5iLDE2KSksbmV3IGhhYyksbmV3IGphYyksbmV3IGxhYyhiKSksbmV3IG5hYyhjKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiBBVmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2ZvcihmPWIuS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSwzMyk7az1lLmkrZS5nLzI7bT1lLmorZS5mLzI7aT1hLmY7Zz1pLmkraS5nLzI7aD1pLmoraS5mLzI7aj1rLWc7bD1tLWg7ZD0kd25kLk1hdGguc3FydChqKmorbCpsKTtqKj1hLmUvZDtsKj1hLmUvZDtpZihjKXtrLT1qO20tPWx9ZWxzZXtrKz1qO20rPWx9ZGxkKGUsay1lLmcvMik7ZWxkKGUsbS1lLmYvMil9fVxuZnVuY3Rpb24gWWZlKGEpe3ZhciBiLGMsZDtpZihhLmMpcmV0dXJuO2lmKGEuYj09bnVsbClyZXR1cm47Zm9yKGI9YS5iLmxlbmd0aC00O2I+PTA7Yi09Mil7Zm9yKGM9MDtjPD1iO2MrPTIpe2lmKGEuYltjXT5hLmJbYysyXXx8YS5iW2NdPT09YS5iW2MrMl0mJmEuYltjKzFdPmEuYltjKzNdKXtkPWEuYltjKzJdO2EuYltjKzJdPWEuYltjXTthLmJbY109ZDtkPWEuYltjKzNdO2EuYltjKzNdPWEuYltjKzFdO2EuYltjKzFdPWR9fX1hLmM9dHJ1ZX1cbmZ1bmN0aW9uIFVVYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Zz1iPT0xP0tVYjpKVWI7Zm9yKGY9Zy5hLmVjKCkuS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSwxMDMpO2ZvcihpPUJEKFFjKGEuZi5jLGUpLDIxKS5LYygpO2kuT2IoKTspe2g9QkQoaS5QYigpLDQ2KTtkPUJEKGguYiw4MSk7aj1CRChoLmEsMTg5KTtjPWouYztzd2l0Y2goZS5nKXtjYXNlIDI6Y2FzZSAxOmQuZy5kKz1jO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ZC5nLmMrPWM7fX19fVxuZnVuY3Rpb24gUEZjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2o9LTE7az0wO2ZvcihnPWEsaD0wLGk9Zy5sZW5ndGg7aDxpOysraCl7Zj1nW2hdO2M9bmV3IERuYyhqPT0tMT9hWzBdOmFbal0sYiwoeHpjKCksd3pjKSk7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKyl7Zm9yKGU9ZCsxO2U8Zi5sZW5ndGg7ZSsrKXt3TmIoZltkXSwod3RjKCksWnNjKSkmJndOYihmW2VdLFpzYykmJnluYyhjLGZbZF0sZltlXSk+MCYmKytrfX0rK2p9cmV0dXJuIGt9XG5mdW5jdGlvbiBFaWQoYSl7dmFyIGIsYztjPW5ldyBXZmIoaGRiKGEuZ20pKTtjLmErPSdAJztRZmIoYywoYj10YihhKT4+PjAsYi50b1N0cmluZygxNikpKTtpZihhLmtoKCkpe2MuYSs9JyAoZVByb3h5VVJJOiAnO1BmYihjLGEucWgoKSk7aWYoYS4kZygpKXtjLmErPScgZUNsYXNzOiAnO1BmYihjLGEuJGcoKSl9Yy5hKz0nKSd9ZWxzZSBpZihhLiRnKCkpe2MuYSs9JyAoZUNsYXNzOiAnO1BmYihjLGEuJGcoKSk7Yy5hKz0nKSd9cmV0dXJuIGMuYX1cbmZ1bmN0aW9uIFREYihhKXt2YXIgYixjLGQsZTtpZihhLmUpe3Rocm93IHZiYihuZXcgWmRiKChmZGIoVE0pLEprZStUTS5rK0trZSkpKX1hLmQ9PShlYWQoKSxjYWQpJiZTRGIoYSxhYWQpO2ZvcihjPW5ldyBvbGIoYS5hLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwzMDcpO2IuZz1iLml9Zm9yKGU9bmV3IG9sYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDU3KTtkLmk9UWplfWEuYi5MZShhKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFRQYyhhLGIpe3ZhciBjLGQsZSxmLGc7aWYoYjwyKmEuYil7dGhyb3cgdmJiKG5ldyBXZGIoJ1RoZSBrbm90IHZlY3RvciBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHRpbWUgdGhlIGRpbWVuc2lvbiBlbGVtZW50cy4nKSl9YS5mPTE7Zm9yKGU9MDtlPGEuYjtlKyspe0VrYihhLmUsMCl9Zz1iKzEtMiphLmI7Yz1nO2ZvcihmPTE7ZjxnO2YrKyl7RWtiKGEuZSxmL2MpfWlmKGEuZCl7Zm9yKGQ9MDtkPGEuYjtkKyspe0VrYihhLmUsMSl9fX1cbmZ1bmN0aW9uIGFyZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztqPWI7az1CRChfbyhxbyhhLmkpLGopLDMzKTtpZighayl7ZT1fcGQoaixWdGUpO2g9XCJVbmFibGUgdG8gZmluZCBlbGsgbm9kZSBmb3IganNvbiBvYmplY3QgJ1wiK2U7aT1oK1wiJyBQYW5pYyFcIjt0aHJvdyB2YmIobmV3IGNxZChpKSl9Zj1ZcGQoaiwnZWRnZXMnKTtjPW5ldyBrcmQoYSxrKTttcWQoYy5hLGMuYixmKTtnPVlwZChqLEp0ZSk7ZD1uZXcgdnJkKGEpO3hxZChkLmEsZyl9XG5mdW5jdGlvbiB4QWQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpZihkIT1udWxsKXtlPWEuZFtiXTtpZihlKXtmPWUuZztpPWUuaTtmb3IoaD0wO2g8aTsrK2gpe2c9QkQoZltoXSwxMzMpO2lmKGcuU2goKT09YyYmcGIoZCxnLmNkKCkpKXtyZXR1cm4gaH19fX1lbHNle2U9YS5kW2JdO2lmKGUpe2Y9ZS5nO2k9ZS5pO2ZvcihoPTA7aDxpOysraCl7Zz1CRChmW2hdLDEzMyk7aWYoUEQoZy5jZCgpKT09PVBEKGQpKXtyZXR1cm4gaH19fX1yZXR1cm4gLTF9XG5mdW5jdGlvbiBuVWQoYSxiKXt2YXIgYyxkLGU7Yz1iPT1udWxsP1dkKGlyYihhLmYsbnVsbCkpOkNyYihhLmcsYik7aWYoSkQoYywyMzUpKXtlPUJEKGMsMjM1KTtlLlFoKCk9PW51bGwmJnVuZGVmaW5lZDtyZXR1cm4gZX1lbHNlIGlmKEpEKGMsNDk4KSl7ZD1CRChjLDE5MzgpO2U9ZC5hOyEhZSYmKGUueWI9PW51bGw/dW5kZWZpbmVkOmI9PW51bGw/anJiKGEuZixudWxsLGUpOkRyYihhLmcsYixlKSk7cmV0dXJuIGV9ZWxzZXtyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBpZGUoYSl7aGRlKCk7dmFyIGIsYyxkLGUsZixnLGg7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtlPWEubGVuZ3RoO2lmKGUlMiE9MClyZXR1cm4gbnVsbDtiPXJmYihhKTtmPWUvMnwwO2M9S0MoU0Qsd3RlLDI1LGYsMTUsMSk7Zm9yKGQ9MDtkPGY7ZCsrKXtnPWZkZVtiW2QqMl1dO2lmKGc9PS0xKXJldHVybiBudWxsO2g9ZmRlW2JbZCoyKzFdXTtpZihoPT0tMSlyZXR1cm4gbnVsbDtjW2RdPShnPDw0fGgpPDwyND4+MjR9cmV0dXJuIGN9XG5mdW5jdGlvbiBsS2IoYSxiLGMpe3ZhciBkLGUsZjtlPUJEKE1wYihhLmksYiksMzA2KTtpZighZSl7ZT1uZXcgYkliKGEuZCxiLGMpO05wYihhLmksYixlKTtpZihzSmIoYikpe0NIYihhLmEsYi5jLGIuYixlKX1lbHNle2Y9ckpiKGIpO2Q9QkQoTXBiKGEucCxmKSwyNDQpO3N3aXRjaChmLmcpe2Nhc2UgMTpjYXNlIDM6ZS5qPXRydWU7bEliKGQsYi5iLGUpO2JyZWFrO2Nhc2UgNDpjYXNlIDI6ZS5rPXRydWU7bEliKGQsYi5jLGUpO319fXJldHVybiBlfVxuZnVuY3Rpb24gcjNkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtoPW5ldyB5dWQ7aT1TNmQoYS5lLlRnKCksYik7ZT1CRChhLmcsMTE5KTtRNmQoKTtpZihCRChiLDY2KS5PaigpKXtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2kucmwoZi5haygpKSYmd3RkKGgsZil9fWVsc2V7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihpLnJsKGYuYWsoKSkpe2o9Zi5kZCgpO3d0ZChoLGQ/YjNkKGEsYixnLGguaSxqKTpqKX19fXJldHVybiB4dWQoaCxjKX1cbmZ1bmN0aW9uIFlDYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7ZT1hLmJbYi5wXTtpZihlPj0wKXtyZXR1cm4gZX1lbHNle2Y9MTtmb3IoaD1uZXcgb2xiKGIuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDExKTtmb3IoZD1uZXcgb2xiKGcuZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE3KTtqPWMuZC5pO2lmKGIhPWope2k9WUNjKGEsaik7Zj0kd25kLk1hdGgubWF4KGYsaSsxKX19fVhDYyhhLGIsZik7cmV0dXJuIGZ9fVxuZnVuY3Rpb24gWUdjKGEsYixjKXt2YXIgZCxlLGY7Zm9yKGQ9MTtkPGEuYy5sZW5ndGg7ZCsrKXtmPSh0Q2IoZCxhLmMubGVuZ3RoKSxCRChhLmNbZF0sMTApKTtlPWQ7d2hpbGUoZT4wJiZiLnVlKCh0Q2IoZS0xLGEuYy5sZW5ndGgpLEJEKGEuY1tlLTFdLDEwKSksZik+MCl7TmtiKGEsZSwodENiKGUtMSxhLmMubGVuZ3RoKSxCRChhLmNbZS0xXSwxMCkpKTstLWV9dENiKGUsYS5jLmxlbmd0aCk7YS5jW2VdPWZ9Yy5hPW5ldyBMcWI7Yy5iPW5ldyBMcWJ9XG5mdW5jdGlvbiBuNWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7az0oZD1CRChiLmUmJmIuZSgpLDkpLG5ldyB4cWIoZCxCRChfQmIoZCxkLmxlbmd0aCksOSksMCkpO2k9bWZiKGMsJ1tcXFxcW1xcXFxdXFxcXHMsXSsnKTtmb3IoZj1pLGc9MCxoPWYubGVuZ3RoO2c8aDsrK2cpe2U9ZltnXTtpZih1ZmIoZSkubGVuZ3RoPT0wKXtjb250aW51ZX1qPW01YyhhLGUpO2lmKGo9PW51bGwpe3JldHVybiBudWxsfWVsc2V7cnFiKGssQkQoaiwyMikpfX1yZXR1cm4ga31cbmZ1bmN0aW9uIEtWYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IG9sYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksODEpO2Q9KHVDYigwKSwwKTtpZihkPjApeyEoZmFkKGEuYS5jKSYmYi5uLmQpJiYhKGdhZChhLmEuYykmJmIubi5iKSYmKGIuZy5kLT0kd25kLk1hdGgubWF4KDAsZC8yLTAuNSkpOyEoZmFkKGEuYS5jKSYmYi5uLmEpJiYhKGdhZChhLmEuYykmJmIubi5jKSYmKGIuZy5hKz0kd25kLk1hdGgubWF4KDAsZC0xKSl9fX1cbmZ1bmN0aW9uIEhhYyhhLGIsYyl7dmFyIGQsZTtpZigoYS5jLWEuYiZhLmEubGVuZ3RoLTEpPT0yKXtpZihiPT0oVWNkKCksQWNkKXx8Yj09emNkKXt4YWMoQkQoYmtiKGEpLDE1KSwocmJkKCksbmJkKSk7eGFjKEJEKGJrYihhKSwxNSksb2JkKX1lbHNle3hhYyhCRChia2IoYSksMTUpLChyYmQoKSxvYmQpKTt4YWMoQkQoYmtiKGEpLDE1KSxuYmQpfX1lbHNle2ZvcihlPW5ldyB4a2IoYSk7ZS5hIT1lLmI7KXtkPUJEKHZrYihlKSwxNSk7eGFjKGQsYyl9fX1cbmZ1bmN0aW9uIGh0ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2U9TnUobmV3IHF0ZChhKSk7aD1uZXcgQmliKGUsZS5jLmxlbmd0aCk7Zj1OdShuZXcgcXRkKGIpKTtpPW5ldyBCaWIoZixmLmMubGVuZ3RoKTtnPW51bGw7d2hpbGUoaC5iPjAmJmkuYj4wKXtjPShzQ2IoaC5iPjApLEJEKGguYS5YYihoLmM9LS1oLmIpLDMzKSk7ZD0oc0NiKGkuYj4wKSxCRChpLmEuWGIoaS5jPS0taS5iKSwzMykpO2lmKGM9PWQpe2c9Y31lbHNle2JyZWFrfX1yZXR1cm4gZ31cbmZ1bmN0aW9uIEN1YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtmPWEuYSpra2UrYS5iKjE1MDI7aD1hLmIqa2tlKzExO2M9JHduZC5NYXRoLmZsb29yKGgqbGtlKTtmKz1jO2gtPWMqbWtlO2YlPW1rZTthLmE9ZjthLmI9aDtpZihiPD0yNCl7cmV0dXJuICR3bmQuTWF0aC5mbG9vcihhLmEqd3ViW2JdKX1lbHNle2U9YS5hKigxPDxiLTI0KTtnPSR3bmQuTWF0aC5mbG9vcihhLmIqeHViW2JdKTtkPWUrZztkPj0yMTQ3NDgzNjQ4JiYoZC09WmplKTtyZXR1cm4gZH19XG5mdW5jdGlvbiBaaWMoYSxiLGMpe3ZhciBkLGUsZixnO2lmKGJqYyhhLGIpPmJqYyhhLGMpKXtkPVZfYihjLChVY2QoKSx6Y2QpKTthLmQ9ZC5kYygpPzA6QjBiKEJEKGQuWGIoMCksMTEpKTtnPVZfYihiLFRjZCk7YS5iPWcuZGMoKT8wOkIwYihCRChnLlhiKDApLDExKSl9ZWxzZXtlPVZfYihjLChVY2QoKSxUY2QpKTthLmQ9ZS5kYygpPzA6QjBiKEJEKGUuWGIoMCksMTEpKTtmPVZfYihiLHpjZCk7YS5iPWYuZGMoKT8wOkIwYihCRChmLlhiKDApLDExKSl9fVxuZnVuY3Rpb24gbDZkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGEpe2I9YS5IaChfdmUpO2lmKGIpe2c9R0QoQUFkKCghYi5iJiYoYi5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYikpLGIuYiksJ2NvbnZlcnNpb25EZWxlZ2F0ZXMnKSk7aWYoZyE9bnVsbCl7aD1uZXcgUmtiO2ZvcihkPW1mYihnLCdcXFxcdysnKSxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07aC5jW2guYy5sZW5ndGhdPWN9cmV0dXJuIGh9fX1yZXR1cm4gbW1iKCksbW1iKCksam1ifVxuZnVuY3Rpb24gRktiKGEsYil7dmFyIGMsZCxlLGY7Yz1hLm8uYTtmb3IoZj1CRChCRChRYyhhLnIsYiksMjEpLDg0KS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDExMSk7ZS5lLmE9YypFZGIoRUQoZS5iLldlKEJLYikpKTtlLmUuYj0oZD1lLmIsZC5YZSgoWTljKCksczljKSk/ZC5IZigpPT0oVWNkKCksQWNkKT8tZC5yZigpLmItRWRiKEVEKGQuV2UoczljKSkpOkVkYihFRChkLldlKHM5YykpKTpkLkhmKCk9PShVY2QoKSxBY2QpPy1kLnJmKCkuYjowKX19XG5mdW5jdGlvbiBXb2MoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtiPXRydWU7ZT1udWxsO2Y9bnVsbDtqOmZvcihpPW5ldyBvbGIoYS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTApO2ZvcihkPW5ldyBTcih1cihSX2IoaCkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7aWYoISFlJiZlIT1oKXtiPWZhbHNlO2JyZWFrIGp9ZT1oO2c9Yy5jLmk7aWYoISFmJiZmIT1nKXtiPWZhbHNlO2JyZWFrIGp9Zj1nfX1yZXR1cm4gYn1cbmZ1bmN0aW9uIE9PYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2Y9LTE7aD0tMTtmb3IoZz0wO2c8Yi5jLmxlbmd0aDtnKyspe2U9KHRDYihnLGIuYy5sZW5ndGgpLEJEKGIuY1tnXSwzMjkpKTtpZihlLmM+YS5jKXticmVha31lbHNlIGlmKGUuYT49YS5zKXtmPDAmJihmPWcpO2g9Z319aT0oYS5zK2EuYykvMjtpZihmPj0wKXtkPU5PYyhhLGIsZixoKTtpPSRPYygodENiKGQsYi5jLmxlbmd0aCksQkQoYi5jW2RdLDMyOSkpKTtZT2MoYixkLGMpfXJldHVybiBpfVxuZnVuY3Rpb24gbFpjKCl7bFpjPWNjYjtSWWM9bmV3IE9zZCgoWTljKCkscjhjKSwxLjMpO1ZZYz1JOGM7Z1pjPW5ldyBxMGIoMTUpO2ZaYz1uZXcgT3NkKGY5YyxnWmMpO2paYz1uZXcgT3NkKFQ5YywxNSk7U1ljPXc4YztfWWM9WThjO2FaYz1fOGM7YlpjPWI5YzskWWM9VzhjO2NaYz1lOWM7aFpjPXg5YztlWmM9KE9ZYygpLEtZYyk7WlljPUlZYztkWmM9SlljO2laYz1NWWM7V1ljPUhZYztYWWM9TzhjO1lZYz1QOGM7VVljPUdZYztUWWM9RlljO2taYz1OWWN9XG5mdW5jdGlvbiBCbmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqO2c9KGY9bmV3IFJIZCxmKTtQSGQoZywodUNiKGIpLGIpKTtqPSghZy5iJiYoZy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsZykpLGcuYik7Zm9yKGk9MTtpPGMubGVuZ3RoO2krPTIpe0hBZChqLGNbaS0xXSxjW2ldKX1kPSghYS5BYiYmKGEuQWI9bmV3IGNVZChhNSxhLDAsMykpLGEuQWIpO2ZvcihoPTA7aDwwOysraCl7ZT1MSGQoQkQocXVkKGQsZC5pLTEpLDU5MCkpO2Q9ZX13dGQoZCxnKX1cbmZ1bmN0aW9uIE1QYihhLGIsYyl7dmFyIGQsZSxmO3NOYi5jYWxsKHRoaXMsbmV3IFJrYik7dGhpcy5hPWI7dGhpcy5iPWM7dGhpcy5lPWE7ZD0oYS5iJiZMT2IoYSksYS5hKTt0aGlzLmQ9S1BiKGQuYSx0aGlzLmEpO3RoaXMuYz1LUGIoZC5iLHRoaXMuYik7a05iKHRoaXMsdGhpcy5kLHRoaXMuYyk7TFBiKHRoaXMpO2ZvcihmPXRoaXMuZS5lLmEuZWMoKS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDI2Nik7ZS5jLmMubGVuZ3RoPjAmJkpQYih0aGlzLGUpfX1cbmZ1bmN0aW9uIElRYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpO2lmKCFlW2IuYl0pe2VbYi5iXT10cnVlO2c9ZDshZyYmKGc9bmV3IGtSYik7RWtiKGcuZSxiKTtmb3IoaT1mW2IuYl0uS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwyODIpO2lmKGguZD09Y3x8aC5jPT1jKXtjb250aW51ZX1oLmMhPWImJklRYihhLGguYyxiLGcsZSxmKTtoLmQhPWImJklRYihhLGguZCxiLGcsZSxmKTtFa2IoZy5jLGgpO0drYihnLmQsaC5iKX1yZXR1cm4gZ31yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGU0YihhKXt2YXIgYixjLGQsZSxmLGcsaDtiPTA7Zm9yKGU9bmV3IG9sYihhLmUpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7Yz1GQWIobmV3IFlBYihudWxsLG5ldyBLdWIoZC5iLDE2KSksbmV3IHc0Yik7YyYmKytifWZvcihnPW5ldyBvbGIoYS5nKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTcpO2g9RkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGYuYiwxNikpLG5ldyB5NGIpO2gmJisrYn1yZXR1cm4gYj49Mn1cbmZ1bmN0aW9uIGdlYyhhLGIpe3ZhciBjLGQsZSxmO09kZChiLCdTZWxmLUxvb3AgcHJlLXByb2Nlc3NpbmcnLDEpO2ZvcihkPW5ldyBvbGIoYS5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTApO2lmKExqYyhjKSl7ZT0oZj1uZXcgS2pjKGMpLHlOYihjLCh3dGMoKSxudGMpLGYpLEhqYyhmKSxmKTtNQWIoTkFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihlLmQsMTYpKSxuZXcgamVjKSxuZXcgbGVjKSxuZXcgbmVjKTtlZWMoZSl9fVFkZChiKX1cbmZ1bmN0aW9uIHZuYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosaztmPWEuYy5kLmo7Zz1CRChVdChjLDApLDgpO2ZvcihrPTE7azxjLmI7aysrKXtqPUJEKFV0KGMsayksOCk7R3NiKGQsZyxkLmMuYixkLmMpO2g9WTZjKFA2YyhuZXcgZzdjKGcpLGopLDAuNSk7aT1ZNmMobmV3IGU3YyhiUmMoZikpLGUpO1A2YyhoLGkpO0dzYihkLGgsZC5jLmIsZC5jKTtnPWo7Zj1iPT0wP1hjZChmKTpWY2QoZil9RHNiKGQsKHNDYihjLmIhPTApLEJEKGMuYy5iLmMsOCkpKX1cbmZ1bmN0aW9uIEpiZChhKXtIYmQoKTt2YXIgYixjLGQ7Yz1xcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtEYmRdKSk7aWYoT3goQ3goYyxhKSk+MSl7cmV0dXJuIGZhbHNlfWI9cXFiKHpiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbeWJkLEJiZF0pKTtpZihPeChDeChiLGEpKT4xKXtyZXR1cm4gZmFsc2V9ZD1xcWIoR2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtGYmQsRWJkXSkpO2lmKE94KEN4KGQsYSkpPjEpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIFUwZChhLGIpe3ZhciBjLGQsZTtjPWIuSGgoYS5hKTtpZihjKXtlPUdEKEFBZCgoIWMuYiYmKGMuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGMpKSxjLmIpLCdhZmZpbGlhdGlvbicpKTtpZihlIT1udWxsKXtkPWtmYihlLHdmYigzNSkpO3JldHVybiBkPT0tMT9sMWQoYSx1MWQoYSxiS2QoYi5IaigpKSksZSk6ZD09MD9sMWQoYSxudWxsLGUuc3Vic3RyKDEpKTpsMWQoYSxlLnN1YnN0cigwLGQpLGUuc3Vic3RyKGQrMSkpfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGljKGIpe3ZhciBjLGQsZTt0cnl7cmV0dXJuIGI9PW51bGw/WGhlOmZjYihiKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEwMikpe2M9YTtlPWhkYihyYihiKSkrJ0AnKyhkPShaZmIoKSxrQ2IoYikpPj4+MCxkLnRvU3RyaW5nKDE2KSk7dHliKHh5YigpLCgkeGIoKSwnRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAnK2UpLGMpO3JldHVybiAnPCcrZSsnIHRocmV3ICcraGRiKGMuZ20pKyc+J31lbHNlIHRocm93IHZiYihhKX19XG5mdW5jdGlvbiBtemMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgeERjO2Nhc2UgMTpyZXR1cm4gbmV3IFpDYztjYXNlIDI6cmV0dXJuIG5ldyBEQ2M7Y2FzZSAzOnJldHVybiBuZXcgUUNjO2Nhc2UgNDpyZXR1cm4gbmV3IExEYztjYXNlIDU6cmV0dXJuIG5ldyBpRGM7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYignTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAnKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fVxuZnVuY3Rpb24gQVFjKGEsYixjKXt2YXIgZCxlLGY7Zm9yKGY9bmV3IG9sYihhLnQpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihmKSwyNjgpO2lmKGQuYi5zPDAmJmQuYz4wKXtkLmIubi09ZC5jO2QuYi5uPD0wJiZkLmIudT4wJiZEc2IoYixkLmIpfX1mb3IoZT1uZXcgb2xiKGEuaSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI2OCk7aWYoZC5hLnM8MCYmZC5jPjApe2QuYS51LT1kLmM7ZC5hLnU8PTAmJmQuYS5uPjAmJkRzYihjLGQuYSl9fX1cbmZ1bmN0aW9uIFZ1ZChhKXt2YXIgYixjLGQsZSxmO2lmKGEuZz09bnVsbCl7YS5kPWEuc2koYS5mKTt3dGQoYSxhLmQpO2lmKGEuYyl7Zj1hLmY7cmV0dXJuIGZ9fWI9QkQoYS5nW2EuaS0xXSw0Nyk7ZT1iLlBiKCk7YS5lPWI7Yz1hLnNpKGUpO2lmKGMuT2IoKSl7YS5kPWM7d3RkKGEsYyl9ZWxzZXthLmQ9bnVsbDt3aGlsZSghYi5PYigpKXtOQyhhLmcsLS1hLmksbnVsbCk7aWYoYS5pPT0wKXticmVha31kPUJEKGEuZ1thLmktMV0sNDcpO2I9ZH19cmV0dXJuIGV9XG5mdW5jdGlvbiByMmQoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZD1iO2U9ZC5haygpO2lmKFQ2ZChhLmUsZSkpe2lmKGUuaGkoKSYmRTJkKGEsZSxkLmRkKCkpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aD1TNmQoYS5lLlRnKCksZSk7Yz1CRChhLmcsMTE5KTtmb3IoZj0wO2Y8YS5pOysrZil7Zz1jW2ZdO2lmKGgucmwoZy5haygpKSl7aWYocGIoZyxkKSl7cmV0dXJuIGZhbHNlfWVsc2V7QkQoR3RkKGEsZixiKSw3Mik7cmV0dXJuIHRydWV9fX19cmV0dXJuIHd0ZChhLGIpfVxuZnVuY3Rpb24gcjliKGEsYixjLGQpe3ZhciBlLGYsZyxoO2U9bmV3IGIwYihhKTtfX2IoZSwoajBiKCksZjBiKSk7eU5iKGUsKHd0YygpLCRzYyksYik7eU5iKGUsa3RjLGQpO3lOYihlLChOeWMoKSxWeGMpLChkY2QoKSwkYmQpKTt5TmIoZSxWc2MsYi5jKTt5TmIoZSxXc2MsYi5kKTt6YmMoYixlKTtoPSR3bmQuTWF0aC5mbG9vcihjLzIpO2ZvcihnPW5ldyBvbGIoZS5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTEpO2Yubi5iPWh9cmV0dXJuIGV9XG5mdW5jdGlvbiB3YWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aT1QdShhLmMtYS5iJmEuYS5sZW5ndGgtMSk7aj1udWxsO2s9bnVsbDtmb3IoZj1uZXcgeGtiKGEpO2YuYSE9Zi5iOyl7ZT1CRCh2a2IoZiksMTApO2M9KGg9QkQodk5iKGUsKHd0YygpLFZzYykpLDExKSwhaD9udWxsOmguaSk7ZD0oZz1CRCh2TmIoZSxXc2MpLDExKSwhZz9udWxsOmcuaSk7aWYoaiE9Y3x8ayE9ZCl7QWFjKGksYik7aj1jO2s9ZH1pLmNbaS5jLmxlbmd0aF09ZX1BYWMoaSxiKX1cbmZ1bmN0aW9uIEhOYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtiPTA7Zm9yKGQ9bmV3IG9sYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxMCk7Zm9yKGY9bmV3IFNyKHVyKFVfYihjKS5hLktjKCksbmV3IFNxKSk7UXIoZik7KXtlPUJEKFJyKGYpLDE3KTtpZihhPT1lLmQuaS5jJiZlLmMuaj09KFVjZCgpLFRjZCkpe2c9QTBiKGUuYykuYjtoPUEwYihlLmQpLmI7Yj0kd25kLk1hdGgubWF4KGIsJHduZC5NYXRoLmFicyhoLWcpKX19fXJldHVybiBifVxuZnVuY3Rpb24gYVdjKGEsYixjKXt2YXIgZCxlLGY7T2RkKGMsJ1JlbW92ZSBvdmVybGFwcycsMSk7Yy5uJiYhIWImJlRkZChjLGk2ZChiKSwocGdkKCksbWdkKSk7ZD1CRChoa2QoYiwoTVVjKCksTFVjKSksMzMpO2EuZj1kO2EuYT10WGMoQkQoaGtkKGIsKFpXYygpLFdXYykpLDI5MykpO2U9RUQoaGtkKGIsKFk5YygpLFQ5YykpKTtGVmMoYSwodUNiKGUpLGUpKTtmPWdWYyhkKTtfVmMoYSxiLGYsYyk7Yy5uJiYhIWImJlRkZChjLGk2ZChiKSwocGdkKCksbWdkKSl9XG5mdW5jdGlvbiBhWWIoYSxiLGMpe3N3aXRjaChjLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IGY3YyhiLmEsJHduZC5NYXRoLm1pbihhLmQuYixiLmIpKTtjYXNlIDI6cmV0dXJuIG5ldyBmN2MoJHduZC5NYXRoLm1heChhLmMuYSxiLmEpLGIuYik7Y2FzZSAzOnJldHVybiBuZXcgZjdjKGIuYSwkd25kLk1hdGgubWF4KGEuYy5iLGIuYikpO2Nhc2UgNDpyZXR1cm4gbmV3IGY3Yygkd25kLk1hdGgubWluKGIuYSxhLmQuYSksYi5iKTt9cmV0dXJuIG5ldyBmN2MoYi5hLGIuYil9XG5mdW5jdGlvbiBtRmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO2w9ZD8oVWNkKCksVGNkKTooVWNkKCksemNkKTtlPWZhbHNlO2ZvcihpPWJbY10saj0wLGs9aS5sZW5ndGg7ajxrOysrail7aD1pW2pdO2lmKGVjZChCRCh2TmIoaCwoTnljKCksVnhjKSksOTgpKSl7Y29udGludWV9Zz1oLmU7bT0hVl9iKGgsbCkuZGMoKSYmISFnO2lmKG0pe2Y9V1piKGcpO2EuYj1uZXcgc2ljKGYsZD8wOmYubGVuZ3RoLTEpfWU9ZXxuRmMoYSxoLGwsbSl9cmV0dXJuIGV9XG5mdW5jdGlvbiAkc2QoYSl7dmFyIGIsYyxkO2I9UHUoMSsoIWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSksYS5jKS5pKTtFa2IoYiwoIWEuZCYmKGEuZD1uZXcgeTVkKEIyLGEsOCw1KSksYS5kKSk7Zm9yKGQ9bmV3IEZ5ZCgoIWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSksYS5jKSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDExOCk7RWtiKGIsKCFjLmQmJihjLmQ9bmV3IHk1ZChCMixjLDgsNSkpLGMuZCkpfXJldHVybiBRYihiKSxuZXcgc2woYil9XG5mdW5jdGlvbiBfc2QoYSl7dmFyIGIsYyxkO2I9UHUoMSsoIWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSksYS5jKS5pKTtFa2IoYiwoIWEuZSYmKGEuZT1uZXcgeTVkKEIyLGEsNyw0KSksYS5lKSk7Zm9yKGQ9bmV3IEZ5ZCgoIWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSksYS5jKSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDExOCk7RWtiKGIsKCFjLmUmJihjLmU9bmV3IHk1ZChCMixjLDcsNCkpLGMuZSkpfXJldHVybiBRYihiKSxuZXcgc2woYil9XG5mdW5jdGlvbiBNOWQoYSl7dmFyIGIsYyxkLGU7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9ZWxzZXtkPVFnZShhLHRydWUpO2U9TndlLmxlbmd0aDtpZihkZmIoZC5zdWJzdHIoZC5sZW5ndGgtZSxlKSxOd2UpKXtjPWQubGVuZ3RoO2lmKGM9PTQpe2I9KEJDYigwLGQubGVuZ3RoKSxkLmNoYXJDb2RlQXQoMCkpO2lmKGI9PTQzKXtyZXR1cm4geDlkfWVsc2UgaWYoYj09NDUpe3JldHVybiB3OWR9fWVsc2UgaWYoYz09Myl7cmV0dXJuIHg5ZH19cmV0dXJuIEhjYihkKX19XG5mdW5jdGlvbiBhS2MoYSl7dmFyIGIsYyxkLGU7Yj0wO2M9MDtmb3IoZT1uZXcgb2xiKGEuaik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDExKTtiPVRiYih3YmIoYixIQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGQuZSwxNikpLG5ldyBuTGMpKSkpO2M9VGJiKHdiYihjLEhBYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIoZC5nLDE2KSksbmV3IHBMYykpKSk7aWYoYj4xfHxjPjEpe3JldHVybiAyfX1pZihiK2M9PTEpe3JldHVybiAyfXJldHVybiAwfVxuZnVuY3Rpb24gV1FiKGEsYixjKXt2YXIgZCxlLGYsZyxoO09kZChjLCdFTEsgRm9yY2UnLDEpO0NjYihERChoa2QoYiwod1NiKCksalNiKSkpKXx8JENiKChkPW5ldyBfQ2IoKFBnZCgpLG5ldyBiaGQoYikpKSxkKSk7aD1UUWIoYik7WFFiKGgpO1lRYihhLEJEKHZOYihoLGZTYiksNDI0KSk7Zz1MUWIoYS5hLGgpO2ZvcihmPWcuS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSwyMzEpO3RSYihhLmIsZSxVZGQoYywxL2cuZ2MoKSkpfWg9S1FiKGcpO1NRYihoKTtRZGQoYyl9XG5mdW5jdGlvbiB5b2MoYSxiKXt2YXIgYyxkLGUsZixnO09kZChiLCdCcmVha2luZyBQb2ludCBQcm9jZXNzb3InLDEpO3hvYyhhKTtpZihDY2IoREQodk5iKGEsKE55YygpLEp5YykpKSkpe2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2M9MDtmb3IoZz1uZXcgb2xiKGQuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtmLnA9YysrfX1zb2MoYSk7dG9jKGEsdHJ1ZSk7dG9jKGEsZmFsc2UpfVFkZChiKX1cbmZ1bmN0aW9uICQxYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2g9YS5jO2ZvcihnPSghYy5xPyhtbWIoKSxtbWIoKSxrbWIpOmMucSkudmMoKS5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDQyKTtkPSFXQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGgsMTYpKSxuZXcgWHhiKG5ldyBtMmMoYixmKSkpKS5zZCgoRUFiKCksREFiKSk7aWYoZCl7aT1mLmRkKCk7aWYoSkQoaSw0KSl7ZT1mdmQoaSk7ZSE9bnVsbCYmKGk9ZSl9Yi5ZZShCRChmLmNkKCksMTQ2KSxpKX19fVxuZnVuY3Rpb24gTVFkKGEsYil7dmFyIGMsZCxlLGYsZztpZighYil7cmV0dXJuIG51bGx9ZWxzZXtmPUpEKGEuQ2IsODgpfHxKRChhLkNiLDk5KTtnPSFmJiZKRChhLkNiLDMyMik7Zm9yKGQ9bmV3IEZ5ZCgoIWIuYSYmKGIuYT1uZXcgS1lkKGIsajUsYikpLGIuYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUJEKER5ZChkKSw4Nyk7ZT1LUWQoYyk7aWYoZj9KRChlLDg4KTpnP0pEKGUsMTQ4KTohIWUpe3JldHVybiBlfX1yZXR1cm4gZj8oakdkKCksX0ZkKTooakdkKCksWUZkKX19XG5mdW5jdGlvbiBnM2IoYSxiKXt2YXIgYyxkLGUsZixnLGg7T2RkKGIsJ0NvbnN0cmFpbnRzIFBvc3Rwcm9jZXNzb3InLDEpO2c9MDtmb3IoZj1uZXcgb2xiKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDI5KTtoPTA7Zm9yKGQ9bmV3IG9sYihlLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxMCk7aWYoYy5rPT0oajBiKCksaDBiKSl7eU5iKGMsKE55YygpLG54YyksbWViKGcpKTt5TmIoYyxHd2MsbWViKGgpKTsrK2h9fSsrZ31RZGQoYil9XG5mdW5jdGlvbiBlUmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aT1uZXcgZjdjKGMsZCk7YzdjKGksQkQodk5iKGIsKG1UYygpLFdTYykpLDgpKTtmb3Ioaz1Kc2IoYi5iLDApO2suYiE9ay5kLmM7KXtqPUJEKFhzYihrKSw4Nik7UDZjKGouZSxpKTtEc2IoYS5iLGopfWZvcihoPUpzYihiLmEsMCk7aC5iIT1oLmQuYzspe2c9QkQoWHNiKGgpLDE4OCk7Zm9yKGY9SnNiKGcuYSwwKTtmLmIhPWYuZC5jOyl7ZT1CRChYc2IoZiksOCk7UDZjKGUsaSl9RHNiKGEuYSxnKX19XG5mdW5jdGlvbiB1aWQoYSxiLGMpe3ZhciBkLGUsZjtmPWUxZCgoTzZkKCksTTZkKSxhLlRnKCksYik7aWYoZil7UTZkKCk7aWYoIUJEKGYsNjYpLk9qKCkpe2Y9XzFkKHExZChNNmQsZikpO2lmKCFmKXt0aHJvdyB2YmIobmV3IFdkYihpdGUrYi5uZSgpK2p0ZSkpfX1lPShkPWEuWWcoZiksQkQoZD49MD9hLl9nKGQsdHJ1ZSx0cnVlKTpzaWQoYSxmLHRydWUpLDE1MykpO0JEKGUsMjE1KS5tbChiLGMpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2IubmUoKStqdGUpKX19XG5mdW5jdGlvbiBST2MoYSxiKXt2YXIgYyxkLGUsZixnO2M9bmV3IFJrYjtlPUxBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLDE2KSksbmV3IGlQYyk7Zj1MQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYSwxNikpLG5ldyBrUGMpO2c9YUFiKF96YihPQWIodHkoT0MoR0MoeE0sMSksVWhlLDgzMywwLFtlLGZdKSksbmV3IG1QYykpKTtmb3IoZD0xO2Q8Zy5sZW5ndGg7ZCsrKXtnW2RdLWdbZC0xXT49MipiJiZFa2IoYyxuZXcgYlBjKGdbZC0xXStiLGdbZF0tYikpfXJldHVybiBjfVxuZnVuY3Rpb24gQVhjKGEsYixjKXtPZGQoYywnRWFkZXMgcmFkaWFsJywxKTtjLm4mJiEhYiYmVGRkKGMsaTZkKGIpLChwZ2QoKSxtZ2QpKTthLmQ9QkQoaGtkKGIsKE1VYygpLExVYykpLDMzKTthLmM9RWRiKEVEKGhrZChiLChaV2MoKSxWV2MpKSkpO2EuZT10WGMoQkQoaGtkKGIsV1djKSwyOTMpKTthLmE9Z1djKEJEKGhrZChiLFlXYyksNDI2KSk7YS5iPWpYYyhCRChoa2QoYixSV2MpLDM0MCkpO0JYYyhhKTtjLm4mJiEhYiYmVGRkKGMsaTZkKGIpLChwZ2QoKSxtZ2QpKX1cbmZ1bmN0aW9uIEZxZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxqLGssbDtpZihjKXtmPWMuYS5sZW5ndGg7ZD1uZXcgWWdlKGYpO2ZvcihoPShkLmItZC5hKSpkLmM8MD8oWGdlKCksV2dlKTpuZXcgc2hlKGQpO2guT2IoKTspe2c9QkQoaC5QYigpLDE5KTtlPVpwZChjLGcuYSk7ISFlJiYoaT1udWxsLGo9VXFkKGEsKGs9KEZoZCgpLGw9bmV3IHBwZCxsKSwhIWImJm5wZChrLGIpLGspLGUpLExrZChqLF9wZChlLFZ0ZSkpLGdyZChlLGopLGhyZChlLGopLGNyZChhLGUsaikpfX19XG5mdW5jdGlvbiBVS2QoYSl7dmFyIGIsYyxkLGUsZixnO2lmKCFhLmope2c9bmV3IEhQZDtiPUtLZDtmPWIuYS56YyhhLGIpO2lmKGY9PW51bGwpe2ZvcihkPW5ldyBGeWQoX0tkKGEpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksMjYpO2U9VUtkKGMpO3l0ZChnLGUpO3d0ZChnLGMpfWIuYS5CYyhhKSE9bnVsbH12dWQoZyk7YS5qPW5ldyBuTmQoKEJEKHF1ZChaS2QoKE5GZCgpLE1GZCkubyksMTEpLDE4KSxnLmkpLGcuZyk7JEtkKGEpLmImPS0zM31yZXR1cm4gYS5qfVxuZnVuY3Rpb24gTzlkKGEpe3ZhciBiLGMsZCxlO2lmKGE9PW51bGwpe3JldHVybiBudWxsfWVsc2V7ZD1RZ2UoYSx0cnVlKTtlPU53ZS5sZW5ndGg7aWYoZGZiKGQuc3Vic3RyKGQubGVuZ3RoLWUsZSksTndlKSl7Yz1kLmxlbmd0aDtpZihjPT00KXtiPShCQ2IoMCxkLmxlbmd0aCksZC5jaGFyQ29kZUF0KDApKTtpZihiPT00Myl7cmV0dXJuIHo5ZH1lbHNlIGlmKGI9PTQ1KXtyZXR1cm4geTlkfX1lbHNlIGlmKGM9PTMpe3JldHVybiB6OWR9fXJldHVybiBuZXcgT2RiKGQpfX1cbmZ1bmN0aW9uIF9DKGEpe3ZhciBiLGMsZDtjPWEubDtpZigoYyZjLTEpIT0wKXtyZXR1cm4gLTF9ZD1hLm07aWYoKGQmZC0xKSE9MCl7cmV0dXJuIC0xfWI9YS5oO2lmKChiJmItMSkhPTApe3JldHVybiAtMX1pZihiPT0wJiZkPT0wJiZjPT0wKXtyZXR1cm4gLTF9aWYoYj09MCYmZD09MCYmYyE9MCl7cmV0dXJuIGllYihjKX1pZihiPT0wJiZkIT0wJiZjPT0wKXtyZXR1cm4gaWViKGQpKzIyfWlmKGIhPTAmJmQ9PTAmJmM9PTApe3JldHVybiBpZWIoYikrNDR9cmV0dXJuIC0xfVxuZnVuY3Rpb24gcWJjKGEsYil7dmFyIGMsZCxlLGYsZztPZGQoYiwnRWRnZSBqb2luaW5nJywxKTtjPUNjYihERCh2TmIoYSwoTnljKCksQnljKSkpKTtmb3IoZT1uZXcgb2xiKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtnPW5ldyBCaWIoZC5hLDApO3doaWxlKGcuYjxnLmQuZ2MoKSl7Zj0oc0NiKGcuYjxnLmQuZ2MoKSksQkQoZy5kLlhiKGcuYz1nLmIrKyksMTApKTtpZihmLms9PShqMGIoKSxnMGIpKXtzYmMoZixjKTt1aWIoZyl9fX1RZGQoYil9XG5mdW5jdGlvbiBjX2MoYSxiLGMpe3ZhciBkLGU7SDJjKGEuYik7SzJjKGEuYiwoWSRjKCksViRjKSwoUjBjKCksUTBjKSk7SzJjKGEuYixXJGMsYi5nKTtLMmMoYS5iLFgkYyxiLmEpO2EuYT1GMmMoYS5iLGIpO09kZChjLCdDb21wYWN0aW9uIGJ5IHNocmlua2luZyBhIHRyZWUnLGEuYS5jLmxlbmd0aCk7aWYoYi5pLmMubGVuZ3RoPjEpe2ZvcihlPW5ldyBvbGIoYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksNTEpO2QucGYoYixVZGQoYywxKSl9fVFkZChjKX1cbmZ1bmN0aW9uIG1vKGEsYil7dmFyIGMsZCxlLGYsZztlPWIuYSZhLmY7Zj1udWxsO2ZvcihkPWEuYltlXTt0cnVlO2Q9ZC5iKXtpZihkPT1iKXshZj8oYS5iW2VdPWIuYik6KGYuYj1iLmIpO2JyZWFrfWY9ZH1nPWIuZiZhLmY7Zj1udWxsO2ZvcihjPWEuY1tnXTt0cnVlO2M9Yy5kKXtpZihjPT1iKXshZj8oYS5jW2ddPWIuZCk6KGYuZD1iLmQpO2JyZWFrfWY9Y30hYi5lPyhhLmE9Yi5jKTooYi5lLmM9Yi5jKTshYi5jPyhhLmU9Yi5lKTooYi5jLmU9Yi5lKTstLWEuaTsrK2EuZ31cbmZ1bmN0aW9uIGVOYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztjPWEubztiPWEucDtnPU9oZTtlPVJpZTtoPU9oZTtmPVJpZTtmb3Ioaj0wO2o8YzsrK2ope2ZvcihrPTA7azxiOysrayl7aWYoWU1iKGEsaixrKSl7Zz0kd25kLk1hdGgubWluKGcsaik7ZT0kd25kLk1hdGgubWF4KGUsaik7aD0kd25kLk1hdGgubWluKGgsayk7Zj0kd25kLk1hdGgubWF4KGYsayl9fX1pPWUtZysxO2Q9Zi1oKzE7cmV0dXJuIG5ldyBHZ2QobWViKGcpLG1lYihoKSxtZWIoaSksbWViKGQpKX1cbmZ1bmN0aW9uIERXYihhLGIpe3ZhciBjLGQsZSxmO2Y9bmV3IEJpYihhLDApO2M9KHNDYihmLmI8Zi5kLmdjKCkpLEJEKGYuZC5YYihmLmM9Zi5iKyspLDE0MCkpO3doaWxlKGYuYjxmLmQuZ2MoKSl7ZD0oc0NiKGYuYjxmLmQuZ2MoKSksQkQoZi5kLlhiKGYuYz1mLmIrKyksMTQwKSk7ZT1uZXcgZFdiKGQuYyxjLmQsYik7c0NiKGYuYj4wKTtmLmEuWGIoZi5jPS0tZi5iKTtBaWIoZixlKTtzQ2IoZi5iPGYuZC5nYygpKTtmLmQuWGIoZi5jPWYuYisrKTtlLmE9ZmFsc2U7Yz1kfX1cbmZ1bmN0aW9uIFkyYihhKXt2YXIgYixjLGQsZSxmLGc7ZT1CRCh2TmIoYSwod3RjKCksdnNjKSksMTEpO2ZvcihnPW5ldyBvbGIoYS5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTEpO2ZvcihkPW5ldyBvbGIoZi5nKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoZCksMTcpO1JaYihiLGUpO3JldHVybiBmfWZvcihjPW5ldyBvbGIoZi5lKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTcpO1FaYihiLGUpO3JldHVybiBmfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGlBKGEsYixjKXt2YXIgZCxlO2Q9Q2JiKGMucS5nZXRUaW1lKCkpO2lmKHliYihkLDApPDApe2U9X2llLVRiYihIYmIoSmJiKGQpLF9pZSkpO2U9PV9pZSYmKGU9MCl9ZWxzZXtlPVRiYihIYmIoZCxfaWUpKX1pZihiPT0xKXtlPSR3bmQuTWF0aC5taW4oKGUrNTApLzEwMHwwLDkpO0tmYihhLDQ4K2UmYWplKX1lbHNlIGlmKGI9PTIpe2U9JHduZC5NYXRoLm1pbigoZSs1KS8xMHwwLDk5KTtFQShhLGUsMil9ZWxzZXtFQShhLGUsMyk7Yj4zJiZFQShhLDAsYi0zKX19XG5mdW5jdGlvbiBjVWIoYSl7dmFyIGIsYyxkLGU7aWYoUEQodk5iKGEsKE55YygpLGF4YykpKT09PVBEKChoYmQoKSxlYmQpKSl7cmV0dXJuICFhLmUmJlBEKHZOYihhLEN3YykpIT09UEQoKFhyYygpLFVyYykpfWQ9QkQodk5iKGEsRHdjKSwyOTIpO2U9Q2NiKEREKHZOYihhLEh3YykpKXx8UEQodk5iKGEsSXdjKSk9PT1QRCgoUnBjKCksT3BjKSk7Yj1CRCh2TmIoYSxCd2MpLDE5KS5hO2M9YS5hLmMubGVuZ3RoO3JldHVybiAhZSYmZCE9KFhyYygpLFVyYykmJihiPT0wfHxiPmMpfVxuZnVuY3Rpb24gbGtjKGEpe3ZhciBiLGM7Yz0wO2Zvcig7YzxhLmMubGVuZ3RoO2MrKyl7aWYoT2pjKCh0Q2IoYyxhLmMubGVuZ3RoKSxCRChhLmNbY10sMTEzKSkpPjApe2JyZWFrfX1pZihjPjAmJmM8YS5jLmxlbmd0aC0xKXtyZXR1cm4gY31iPTA7Zm9yKDtiPGEuYy5sZW5ndGg7YisrKXtpZihPamMoKHRDYihiLGEuYy5sZW5ndGgpLEJEKGEuY1tiXSwxMTMpKSk+MCl7YnJlYWt9fWlmKGI+MCYmYzxhLmMubGVuZ3RoLTEpe3JldHVybiBifXJldHVybiBhLmMubGVuZ3RoLzJ8MH1cbmZ1bmN0aW9uIG1tZChhLGIpe3ZhciBjLGQ7aWYoYiE9YS5DYnx8YS5EYj4+MTYhPTYmJiEhYil7aWYocDZkKGEsYikpdGhyb3cgdmJiKG5ldyBXZGIoc3RlK3FtZChhKSkpO2Q9bnVsbDshIWEuQ2ImJihkPShjPWEuRGI+PjE2LGM+PTA/Y21kKGEsZCk6YS5DYi5paChhLC0xLWMsbnVsbCxkKSkpOyEhYiYmKGQ9a2lkKGIsYSw2LGQpKTtkPWJtZChhLGIsZCk7ISFkJiZkLkZpKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDYsYixiKSl9XG5mdW5jdGlvbiBucGQoYSxiKXt2YXIgYyxkO2lmKGIhPWEuQ2J8fGEuRGI+PjE2IT05JiYhIWIpe2lmKHA2ZChhLGIpKXRocm93IHZiYihuZXcgV2RiKHN0ZStvcGQoYSkpKTtkPW51bGw7ISFhLkNiJiYoZD0oYz1hLkRiPj4xNixjPj0wP2xwZChhLGQpOmEuQ2IuaWgoYSwtMS1jLG51bGwsZCkpKTshIWImJihkPWtpZChiLGEsOSxkKSk7ZD1rcGQoYSxiLGQpOyEhZCYmZC5GaSgpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw5LGIsYikpfVxuZnVuY3Rpb24gUmxkKGEsYil7dmFyIGMsZDtpZihiIT1hLkNifHxhLkRiPj4xNiE9MyYmISFiKXtpZihwNmQoYSxiKSl0aHJvdyB2YmIobmV3IFdkYihzdGUrU2xkKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9MbGQoYSxkKTphLkNiLmloKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1raWQoYixhLDEyLGQpKTtkPUtsZChhLGIsZCk7ISFkJiZkLkZpKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDMsYixiKSl9XG5mdW5jdGlvbiBWSWQoYil7dmFyIGMsZCxlLGYsZztlPXdJZChiKTtnPWIuajtpZihnPT1udWxsJiYhIWUpe3JldHVybiBiLiRqKCk/bnVsbDplLnpqKCl9ZWxzZSBpZihKRChlLDE0OCkpe2Q9ZS5BaigpO2lmKGQpe2Y9ZC5OaCgpO2lmKGYhPWIuaSl7Yz1CRChlLDE0OCk7aWYoYy5FaigpKXt0cnl7Yi5nPWYuS2goYyxnKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDc4KSl7Yi5nPW51bGx9ZWxzZSB0aHJvdyB2YmIoYSl9fWIuaT1mfX1yZXR1cm4gYi5nfXJldHVybiBudWxsfVxuZnVuY3Rpb24gd09iKGEpe3ZhciBiO2I9bmV3IFJrYjtFa2IoYixuZXcgYURiKG5ldyBmN2MoYS5jLGEuZCksbmV3IGY3YyhhLmMrYS5iLGEuZCkpKTtFa2IoYixuZXcgYURiKG5ldyBmN2MoYS5jLGEuZCksbmV3IGY3YyhhLmMsYS5kK2EuYSkpKTtFa2IoYixuZXcgYURiKG5ldyBmN2MoYS5jK2EuYixhLmQrYS5hKSxuZXcgZjdjKGEuYythLmIsYS5kKSkpO0VrYihiLG5ldyBhRGIobmV3IGY3YyhhLmMrYS5iLGEuZCthLmEpLG5ldyBmN2MoYS5jLGEuZCthLmEpKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBJSmMoYSxiLGMsZCl7dmFyIGUsZixnO2c9TFpiKGIsYyk7ZC5jW2QuYy5sZW5ndGhdPWI7aWYoYS5qW2cucF09PS0xfHxhLmpbZy5wXT09Mnx8YS5hW2IucF0pe3JldHVybiBkfWEualtnLnBdPS0xO2ZvcihmPW5ldyBTcih1cihPX2IoZykuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7aWYoISghT1piKGUpJiYhKCFPWmIoZSkmJmUuYy5pLmM9PWUuZC5pLmMpKXx8ZT09Yil7Y29udGludWV9cmV0dXJuIElKYyhhLGUsZyxkKX1yZXR1cm4gZH1cbmZ1bmN0aW9uIHZRYihhLGIsYyl7dmFyIGQsZSxmO2ZvcihmPWIuYS5lYygpLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksNzkpO2Q9QkQoT2hiKGEuYixlKSwyNjYpOyFkJiYoWG9kKGp0ZChlKSk9PVhvZChsdGQoZSkpP3VRYihhLGUsYyk6anRkKGUpPT1Yb2QobHRkKGUpKT9PaGIoYS5jLGUpPT1udWxsJiZPaGIoYS5iLGx0ZChlKSkhPW51bGwmJnhRYihhLGUsYyxmYWxzZSk6T2hiKGEuZCxlKT09bnVsbCYmT2hiKGEuYixqdGQoZSkpIT1udWxsJiZ4UWIoYSxlLGMsdHJ1ZSkpfX1cbmZ1bmN0aW9uIGpjYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2ZvcihlPWEuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMCk7aD1uZXcgSDBiO0YwYihoLGQpO0cwYihoLChVY2QoKSx6Y2QpKTt5TmIoaCwod3RjKCksZnRjKSwoQmNiKCksdHJ1ZSkpO2ZvcihnPWIuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxMCk7aT1uZXcgSDBiO0YwYihpLGYpO0cwYihpLFRjZCk7eU5iKGksZnRjLHRydWUpO2M9bmV3IFVaYjt5TmIoYyxmdGMsdHJ1ZSk7UVpiKGMsaCk7UlpiKGMsaSl9fX1cbmZ1bmN0aW9uIGpuYyhhLGIsYyxkKXt2YXIgZSxmLGcsaDtlPWhuYyhhLGIsYyk7Zj1obmMoYSxjLGIpO2c9QkQoT2hiKGEuYyxiKSwxMTIpO2g9QkQoT2hiKGEuYyxjKSwxMTIpO2lmKGU8Zil7bmV3IERPYygoSE9jKCksR09jKSxnLGgsZi1lKX1lbHNlIGlmKGY8ZSl7bmV3IERPYygoSE9jKCksR09jKSxoLGcsZS1mKX1lbHNlIGlmKGUhPTB8fCEoIWIuaXx8IWMuaSkmJmRbYi5pLmNdW2MuaS5jXSl7bmV3IERPYygoSE9jKCksR09jKSxnLGgsMCk7bmV3IERPYyhHT2MsaCxnLDApfX1cbmZ1bmN0aW9uIFFvYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2U9MDtmb3IoZz1uZXcgb2xiKGIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtlKz1mLm8uYitmLmQuYStmLmQuZCthLmU7Zm9yKGQ9bmV3IFNyKHVyKFJfYihmKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDE3KTtpZihjLmMuaS5rPT0oajBiKCksaTBiKSl7aT1jLmMuaTtoPUJEKHZOYihpLCh3dGMoKSwkc2MpKSwxMCk7ZSs9aC5vLmIraC5kLmEraC5kLmR9fX1yZXR1cm4gZX1cbmZ1bmN0aW9uIFdOYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7Zj1uZXcgUmtiO2o9bmV3IFBzYjtnPW5ldyBQc2I7WE5jKGEsaixnLGIpO1ZOYyhhLGosZyxiLGMpO2ZvcihpPW5ldyBvbGIoYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDExMik7Zm9yKGU9bmV3IG9sYihoLmspO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMjkpOyghYnx8ZC5jPT0oSE9jKCksRk9jKSkmJmguZz5kLmIuZyYmKGYuY1tmLmMubGVuZ3RoXT1kLHRydWUpfX1yZXR1cm4gZn1cbmZ1bmN0aW9uIGskYygpe2skYz1jY2I7ZyRjPW5ldyBsJGMoJ0NBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9SSUdIVCcsMCk7ZiRjPW5ldyBsJGMoJ0NBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVycsMSk7aSRjPW5ldyBsJGMoJ0NBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX1JJR0hUJywyKTtoJGM9bmV3IGwkYygnQ0FORElEQVRFX1BPU0lUSU9OX1dIT0xFX0RSQVdJTkdfQkVMT1cnLDMpO2okYz1uZXcgbCRjKCdXSE9MRV9EUkFXSU5HJyw0KX1cbmZ1bmN0aW9uIFhxZChhLGIpe2lmKEpEKGIsMjM5KSl7cmV0dXJuIGlxZChhLEJEKGIsMzMpKX1lbHNlIGlmKEpEKGIsMTg2KSl7cmV0dXJuIGpxZChhLEJEKGIsMTE4KSl9ZWxzZSBpZihKRChiLDM1NCkpe3JldHVybiBocWQoYSxCRChiLDEzNykpfWVsc2UgaWYoSkQoYiwzNTIpKXtyZXR1cm4gZ3FkKGEsQkQoYiw3OSkpfWVsc2UgaWYoYil7cmV0dXJuIG51bGx9ZWxzZXt0aHJvdyB2YmIobmV3IFdkYihYdGUrRmUobmV3IGFtYihPQyhHQyhTSSwxKSxVaGUsMSw1LFtiXSkpKSkpfX1cbmZ1bmN0aW9uIGFpYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtmPW5ldyBQc2I7Zm9yKGU9bmV3IG9sYihhLmQuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEyMSk7ZC5iLmEuYy5sZW5ndGg9PTAmJihHc2IoZixkLGYuYy5iLGYuYyksdHJ1ZSl9aWYoZi5iPjEpe2I9bkdiKChjPW5ldyBwR2IsKythLmIsYyksYS5kKTtmb3IoaD1Kc2IoZiwwKTtoLmIhPWguZC5jOyl7Zz1CRChYc2IoaCksMTIxKTtBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsMSksMCksYiksZykpfX19XG5mdW5jdGlvbiAkb2QoYSxiKXt2YXIgYyxkO2lmKGIhPWEuQ2J8fGEuRGI+PjE2IT0xMSYmISFiKXtpZihwNmQoYSxiKSl0aHJvdyB2YmIobmV3IFdkYihzdGUrX29kKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9Vb2QoYSxkKTphLkNiLmloKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1raWQoYixhLDEwLGQpKTtkPVRvZChhLGIsZCk7ISFkJiZkLkZpKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSwxLDExLGIsYikpfVxuZnVuY3Rpb24gdVpiKGEpe3ZhciBiLGMsZCxlO2ZvcihkPW5ldyBuaWIoKG5ldyBlaWIoYS5iKSkuYSk7ZC5iOyl7Yz1saWIoZCk7ZT1CRChjLmNkKCksMTEpO2I9QkQoYy5kZCgpLDEwKTt5TmIoYiwod3RjKCksJHNjKSxlKTt5TmIoZSxndGMsYik7eU5iKGUsTnNjLChCY2IoKSx0cnVlKSk7RzBiKGUsQkQodk5iKGIsSHNjKSw2MSkpO3ZOYihiLEhzYyk7eU5iKGUuaSwoTnljKCksVnhjKSwoZGNkKCksYWNkKSk7QkQodk5iKFFfYihlLmkpLEtzYyksMjEpLkZjKChPcmMoKSxLcmMpKX19XG5mdW5jdGlvbiBHNGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtmPTA7Zz0wO2lmKGEuYyl7Zm9yKGk9bmV3IG9sYihhLmQuaS5qKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTEpO2YrPWguZS5jLmxlbmd0aH19ZWxzZXtmPTF9aWYoYS5kKXtmb3IoaT1uZXcgb2xiKGEuYy5pLmopO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMSk7Zys9aC5nLmMubGVuZ3RofX1lbHNle2c9MX1lPVFEKEVlYihnLWYpKTtkPShjK2IpLzIrKGMtYikqKDAuNCplKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFpqYyhhKXtYamMoKTt2YXIgYixjO2lmKGEuSGMoKFVjZCgpLFNjZCkpKXt0aHJvdyB2YmIobmV3IFdkYignUG9ydCBzaWRlcyBtdXN0IG5vdCBjb250YWluIFVOREVGSU5FRCcpKX1zd2l0Y2goYS5nYygpKXtjYXNlIDE6cmV0dXJuIFRqYztjYXNlIDI6Yj1hLkhjKHpjZCkmJmEuSGMoVGNkKTtjPWEuSGMoQWNkKSYmYS5IYyhSY2QpO3JldHVybiBifHxjP1dqYzpWamM7Y2FzZSAzOnJldHVybiBVamM7Y2FzZSA0OnJldHVybiBTamM7ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fVxuZnVuY3Rpb24gSG9jKGEsYixjKXt2YXIgZCxlLGYsZyxoO09kZChjLCdCcmVha2luZyBQb2ludCBSZW1vdmluZycsMSk7YS5hPUJEKHZOYihiLChOeWMoKSxTd2MpKSwyMTgpO2ZvcihmPW5ldyBvbGIoYi5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMjkpO2ZvcihoPW5ldyBvbGIoTXUoZS5hKSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTtpZihob2MoZykpe2Q9QkQodk5iKGcsKHd0YygpLHVzYykpLDMwNSk7IWQuZCYmSW9jKGEsZCl9fX1RZGQoYyl9XG5mdW5jdGlvbiBzNmMoYSxiLGMpe2k2YygpO2lmKG02YyhhLGIpJiZtNmMoYSxjKSl7cmV0dXJuIGZhbHNlfXJldHVybiB1NmMobmV3IGY3YyhhLmMsYS5kKSxuZXcgZjdjKGEuYythLmIsYS5kKSxiLGMpfHx1NmMobmV3IGY3YyhhLmMrYS5iLGEuZCksbmV3IGY3YyhhLmMrYS5iLGEuZCthLmEpLGIsYyl8fHU2YyhuZXcgZjdjKGEuYythLmIsYS5kK2EuYSksbmV3IGY3YyhhLmMsYS5kK2EuYSksYixjKXx8dTZjKG5ldyBmN2MoYS5jLGEuZCthLmEpLG5ldyBmN2MoYS5jLGEuZCksYixjKX1cbmZ1bmN0aW9uIHgxZChhLGIpe3ZhciBjLGQsZSxmO2lmKCFhLmRjKCkpe2ZvcihjPTAsZD1hLmdjKCk7YzxkOysrYyl7Zj1HRChhLlhiKGMpKTtpZihmPT1udWxsP2I9PW51bGw6ZGZiKGYuc3Vic3RyKDAsMyksJyEjIycpP2IhPW51bGwmJihlPWIubGVuZ3RoLCFkZmIoZi5zdWJzdHIoZi5sZW5ndGgtZSxlKSxiKXx8Zi5sZW5ndGghPWIubGVuZ3RoKzMpJiYhZGZiKEV3ZSxiKTpkZmIoZixGd2UpJiYhZGZiKEV3ZSxiKXx8ZGZiKGYsYikpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gSjNiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtnPWEuai5jLmxlbmd0aDtpPUtDKHROLGlsZSwzMDYsZywwLDEpO2ZvcihoPTA7aDxnO2grKyl7Zj1CRChJa2IoYS5qLGgpLDExKTtmLnA9aDtpW2hdPUQzYihOM2IoZiksYyxkKX1GM2IoYSxpLGMsYixkKTtqPW5ldyBMcWI7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7ISFpW2VdJiZSaGIoaixCRChJa2IoYS5qLGUpLDExKSxpW2VdKX1pZihqLmYuYytqLmcuYyE9MCl7eU5iKGEsKHd0YygpLENzYyksaik7TDNiKGEsaSl9fVxuZnVuY3Rpb24gTGdjKGEsYixjKXt2YXIgZCxlLGY7Zm9yKGU9bmV3IG9sYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDU3KTtmPXRnYyhkKTtpZihmKXtpZihmLms9PShqMGIoKSxlMGIpKXtzd2l0Y2goQkQodk5iKGYsKHd0YygpLEhzYykpLDYxKS5nKXtjYXNlIDQ6Zi5uLmE9Yi5hO2JyZWFrO2Nhc2UgMjpmLm4uYT1jLmEtKGYuby5hK2YuZC5jKTticmVhaztjYXNlIDE6Zi5uLmI9Yi5iO2JyZWFrO2Nhc2UgMzpmLm4uYj1jLmItKGYuby5iK2YuZC5hKTt9fX19fVxuZnVuY3Rpb24ga0FjKCl7a0FjPWNjYjtpQWM9bmV3IGxBYyhhbmUsMCk7ZEFjPW5ldyBsQWMoJ05JS09MT1YnLDEpO2dBYz1uZXcgbEFjKCdOSUtPTE9WX1BJWEVMJywyKTtlQWM9bmV3IGxBYygnTklLT0xPVl9JTVBST1ZFRCcsMyk7ZkFjPW5ldyBsQWMoJ05JS09MT1ZfSU1QUk9WRURfUElYRUwnLDQpO2NBYz1uZXcgbEFjKCdEVU1NWU5PREVfUEVSQ0VOVEFHRScsNSk7aEFjPW5ldyBsQWMoJ05PREVDT1VOVF9QRVJDRU5UQUdFJyw2KTtqQWM9bmV3IGxBYygnTk9fQk9VTkRBUlknLDcpfVxuZnVuY3Rpb24gbGVkKGEsYixjKXt2YXIgZCxlLGYsZyxoO2U9QkQoaGtkKGIsKFg3YygpLFY3YykpLDE5KTshZSYmKGU9bWViKDApKTtmPUJEKGhrZChjLFY3YyksMTkpOyFmJiYoZj1tZWIoMCkpO2lmKGUuYT5mLmEpe3JldHVybiAtMX1lbHNlIGlmKGUuYTxmLmEpe3JldHVybiAxfWVsc2V7aWYoYS5hKXtkPUtkYihiLmosYy5qKTtpZihkIT0wKXtyZXR1cm4gZH1kPUtkYihiLmksYy5pKTtpZihkIT0wKXtyZXR1cm4gZH19Zz1iLmcqYi5mO2g9Yy5nKmMuZjtyZXR1cm4gS2RiKGcsaCl9fVxuZnVuY3Rpb24gQkFkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7KythLmU7aT1hLmQ9PW51bGw/MDphLmQubGVuZ3RoO2lmKGI+aSl7az1hLmQ7YS5kPUtDKHk0LGp2ZSw2MywyKmkrNCwwLDEpO2ZvcihmPTA7ZjxpOysrZil7aj1rW2ZdO2lmKGope2Q9ai5nO2w9ai5pO2ZvcihoPTA7aDxsOysraCl7ZT1CRChkW2hdLDEzMyk7Zz1EQWQoYSxlLlNoKCkpO2M9YS5kW2ddOyFjJiYoYz1hLmRbZ109YS51aigpKTtjLkZjKGUpfX19cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fVxuZnVuY3Rpb24gbzJkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1jO2Y9ZS5haygpO2lmKFQ2ZChhLmUsZikpe2lmKGYuaGkoKSl7ZD1CRChhLmcsMTE5KTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKHBiKGgsZSkmJmchPWIpe3Rocm93IHZiYihuZXcgV2RiKGt1ZSkpfX19fWVsc2V7aT1TNmQoYS5lLlRnKCksZik7ZD1CRChhLmcsMTE5KTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKGkucmwoaC5haygpKSl7dGhyb3cgdmJiKG5ldyBXZGIoSHdlKSl9fX12dGQoYSxiLGMpfVxuZnVuY3Rpb24gT1liKGEsYil7dmFyIGMsZCxlLGYsZyxoO2M9QkQodk5iKGIsKHd0YygpLEVzYykpLDIxKTtnPUJEKFFjKCh4WGIoKSx3WGIpLGMpLDIxKTtoPUJEKFFjKExZYixjKSwyMSk7Zm9yKGY9Zy5LYygpO2YuT2IoKTspe2Q9QkQoZi5QYigpLDIxKTtpZighQkQoUWMoYS5iLGQpLDE1KS5kYygpKXtyZXR1cm4gZmFsc2V9fWZvcihlPWguS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwyMSk7aWYoIUJEKFFjKGEuYixkKSwxNSkuZGMoKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIHNjYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtPZGQoYiwnUGFydGl0aW9uIHBvc3Rwcm9jZXNzaW5nJywxKTtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDI5KTtmb3IoZj1uZXcgb2xiKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEwKTtoPW5ldyBvbGIoZS5qKTt3aGlsZShoLmE8aC5jLmMubGVuZ3RoKXtnPUJEKG1sYihoKSwxMSk7Q2NiKEREKHZOYihnLCh3dGMoKSxmdGMpKSkpJiZubGIoaCl9fX1RZGQoYil9XG5mdW5jdGlvbiBaWmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5hLmMubGVuZ3RoPT0xKXtyZXR1cm4gSlpjKEJEKElrYihhLmEsMCksMTg3KSxiKX1nPVlaYyhhKTtpPTA7aj1hLmQ7Zj1nO2s9YS5kO2g9KGotZikvMitmO3doaWxlKGYrMTxqKXtpPTA7Zm9yKGQ9bmV3IG9sYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxODcpO2krPShlPU1aYyhjLGgsZmFsc2UpLGUuYSl9aWYoaTxiKXtrPWg7aj1ofWVsc2V7Zj1ofWg9KGotZikvMitmfXJldHVybiBrfVxuZnVuY3Rpb24gZkQoYSl7dmFyIGIsYyxkLGUsZjtpZihpc05hTihhKSl7cmV0dXJuIHdEKCksdkR9aWYoYTwtOTIyMzM3MjAzNjg1NDc3NTgwOCl7cmV0dXJuIHdEKCksdER9aWYoYT49OTIyMzM3MjAzNjg1NDc3NTgwNyl7cmV0dXJuIHdEKCksc0R9ZT1mYWxzZTtpZihhPDApe2U9dHJ1ZTthPS1hfWQ9MDtpZihhPj1JamUpe2Q9UUQoYS9JamUpO2EtPWQqSWplfWM9MDtpZihhPj1IamUpe2M9UUQoYS9IamUpO2EtPWMqSGplfWI9UUQoYSk7Zj1UQyhiLGMsZCk7ZSYmWkMoZik7cmV0dXJuIGZ9XG5mdW5jdGlvbiByS2IoYSxiKXt2YXIgYyxkLGUsZjtjPSFifHwhYS51LkhjKChyY2QoKSxuY2QpKTtmPTA7Zm9yKGU9bmV3IG9sYihhLmUuQ2YoKSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDgzOCk7aWYoZC5IZigpPT0oVWNkKCksU2NkKSl7dGhyb3cgdmJiKG5ldyBXZGIoJ0xhYmVsIGFuZCBub2RlIHNpemUgY2FsY3VsYXRvciBjYW4gb25seSBiZSB1c2VkIHdpdGggcG9ydHMgdGhhdCBoYXZlIHBvcnQgc2lkZXMgYXNzaWduZWQuJykpfWQudmYoZisrKTtxS2IoYSxkLGMpfX1cbmZ1bmN0aW9uIFYwZChhLGIpe3ZhciBjLGQsZSxmLGc7ZT1iLkhoKGEuYSk7aWYoZSl7ZD0oIWUuYiYmKGUuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGUpKSxlLmIpO2M9R0QoQUFkKGQsY3dlKSk7aWYoYyE9bnVsbCl7Zj1jLmxhc3RJbmRleE9mKCcjJyk7Zz1mPT0tMT93MWQoYSxiLkFqKCksYyk6Zj09MD92MWQoYSxudWxsLGMuc3Vic3RyKDEpKTp2MWQoYSxjLnN1YnN0cigwLGYpLGMuc3Vic3RyKGYrMSkpO2lmKEpEKGcsMTQ4KSl7cmV0dXJuIEJEKGcsMTQ4KX19fXJldHVybiBudWxsfVxuZnVuY3Rpb24gWjBkKGEsYil7dmFyIGMsZCxlLGYsZztkPWIuSGgoYS5hKTtpZihkKXtjPSghZC5iJiYoZC5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsZCkpLGQuYik7Zj1HRChBQWQoYyx6d2UpKTtpZihmIT1udWxsKXtlPWYubGFzdEluZGV4T2YoJyMnKTtnPWU9PS0xP3cxZChhLGIuQWooKSxmKTplPT0wP3YxZChhLG51bGwsZi5zdWJzdHIoMSkpOnYxZChhLGYuc3Vic3RyKDAsZSksZi5zdWJzdHIoZSsxKSk7aWYoSkQoZywxNDgpKXtyZXR1cm4gQkQoZywxNDgpfX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBSRGIoYSl7dmFyIGIsYyxkLGUsZjtmb3IoYz1uZXcgb2xiKGEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMzA3KTtiLmo9bnVsbDtmb3IoZj1iLmEuYS5lYygpLktjKCk7Zi5PYigpOyl7ZD1CRChmLlBiKCksNTcpO1g2YyhkLmIpOyghYi5qfHxkLmQuYzxiLmouZC5jKSYmKGIuaj1kKX1mb3IoZT1iLmEuYS5lYygpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksNTcpO2QuYi5hPWQuZC5jLWIuai5kLmM7ZC5iLmI9ZC5kLmQtYi5qLmQuZH19cmV0dXJuIGF9XG5mdW5jdGlvbiBzVmIoYSl7dmFyIGIsYyxkLGUsZjtmb3IoYz1uZXcgb2xiKGEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTg5KTtiLmY9bnVsbDtmb3IoZj1iLmEuYS5lYygpLktjKCk7Zi5PYigpOyl7ZD1CRChmLlBiKCksODEpO1g2YyhkLmUpOyghYi5mfHxkLmcuYzxiLmYuZy5jKSYmKGIuZj1kKX1mb3IoZT1iLmEuYS5lYygpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksODEpO2QuZS5hPWQuZy5jLWIuZi5nLmM7ZC5lLmI9ZC5nLmQtYi5mLmcuZH19cmV0dXJuIGF9XG5mdW5jdGlvbiBFTWIoYSl7dmFyIGIsYyxkO2M9QkQoYS5hLDE5KS5hO2Q9QkQoYS5iLDE5KS5hO2I9JHduZC5NYXRoLm1heCgkd25kLk1hdGguYWJzKGMpLCR3bmQuTWF0aC5hYnMoZCkpO2lmKGM8YiYmZD09LWIpe3JldHVybiBuZXcgdmdkKG1lYihjKzEpLG1lYihkKSl9aWYoYz09YiYmZDxiKXtyZXR1cm4gbmV3IHZnZChtZWIoYyksbWViKGQrMSkpfWlmKGM+PS1iJiZkPT1iKXtyZXR1cm4gbmV3IHZnZChtZWIoYy0xKSxtZWIoZCkpfXJldHVybiBuZXcgdmdkKG1lYihjKSxtZWIoZC0xKSl9XG5mdW5jdGlvbiBXOGIoKXtTOGIoKTtyZXR1cm4gT0MoR0MoQVMsMSksS2llLDc3LDAsW1k3YixWN2IsWjdiLG44YixHOGIscjhiLE04Yix3OGIsRThiLGk4YixBOGIsdjhiLEY4YixlOGIsTzhiLFA3Yix6OGIsSThiLG84YixIOGIsUThiLEM4YixRN2IsRDhiLFI4YixLOGIsUDhiLHA4YixiOGIscThiLG04YixOOGIsVDdiLF83Yix0OGIsUzdiLHU4YixrOGIsZjhiLHg4YixoOGIsVzdiLFU3YixsOGIsZzhiLHk4YixMOGIsUjdiLEI4YixqOGIsczhiLGM4YixhOGIsSjhiLCQ3YixkOGIsWDdiXSl9XG5mdW5jdGlvbiBZaWMoYSxiLGMpe2EuZD0wO2EuYj0wO2Iuaz09KGowYigpLGkwYikmJmMuaz09aTBiJiZCRCh2TmIoYiwod3RjKCksJHNjKSksMTApPT1CRCh2TmIoYywkc2MpLDEwKSYmKGFqYyhiKS5qPT0oVWNkKCksQWNkKT9aaWMoYSxiLGMpOlppYyhhLGMsYikpO2Iuaz09aTBiJiZjLms9PWcwYj9hamMoYikuaj09KFVjZCgpLEFjZCk/KGEuZD0xKTooYS5iPTEpOmMuaz09aTBiJiZiLms9PWcwYiYmKGFqYyhjKS5qPT0oVWNkKCksQWNkKT8oYS5iPTEpOihhLmQ9MSkpO2NqYyhhLGIsYyl9XG5mdW5jdGlvbiBlc2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtsPWhzZChhKTtiPWEuYTtpPWIhPW51bGw7aSYmVXBkKGwsJ2NhdGVnb3J5JyxhLmEpO2U9RmhlKG5ldyBQaWIoYS5kKSk7Zz0hZTtpZihnKXtqPW5ldyB3QjtjQyhsLCdrbm93bk9wdGlvbnMnLGopO2M9bmV3IG1zZChqKTtyZWIobmV3IFBpYihhLmQpLGMpfWY9RmhlKGEuZyk7aD0hZjtpZihoKXtrPW5ldyB3QjtjQyhsLCdzdXBwb3J0ZWRGZWF0dXJlcycsayk7ZD1uZXcgb3NkKGspO3JlYihhLmcsZCl9cmV0dXJuIGx9XG5mdW5jdGlvbiB0eShhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7ZD1mYWxzZTtiPTMzNjtjPTA7Zj1uZXcgWHAoYS5sZW5ndGgpO2ZvcihoPWEsaT0wLGo9aC5sZW5ndGg7aTxqOysraSl7Zz1oW2ldO2Q9ZHwoVXpiKGcpLGZhbHNlKTtlPShUemIoZyksZy5hKTtFa2IoZi5hLFFiKGUpKTtiJj1lLnFkKCk7Yz1MeShjLGUucmQoKSl9cmV0dXJuIEJEKEJEKFJ6YihuZXcgWUFiKG51bGwsWWoobmV3IEt1YigoaW0oKSxubShmLmEpKSwxNiksbmV3IHZ5LGIsYykpLG5ldyB4eShhKSksNjcwKSw4MzMpfVxuZnVuY3Rpb24gVVdiKGEsYil7dmFyIGM7aWYoISFhLmQmJihiLmMhPWEuZS5jfHxxV2IoYS5lLmIsYi5iKSkpe0VrYihhLmYsYS5kKTthLmE9YS5kLmMrYS5kLmI7YS5kPW51bGw7YS5lPW51bGx9bldiKGIuYik/KGEuYz1iKTooYS5iPWIpO2lmKGIuYj09KGxXYigpLGhXYikmJiFiLmF8fGIuYj09aVdiJiZiLmF8fGIuYj09aldiJiZiLmF8fGIuYj09a1diJiYhYi5hKXtpZighIWEuYyYmISFhLmIpe2M9bmV3IEo2YyhhLmEsYS5jLmQsYi5jLWEuYSxhLmIuZC1hLmMuZCk7YS5kPWM7YS5lPWJ9fX1cbmZ1bmN0aW9uIEwyYyhhKXt2YXIgYjtEMmMuY2FsbCh0aGlzKTt0aGlzLmk9bmV3IFoyYzt0aGlzLmc9YTt0aGlzLmY9QkQoYS5lJiZhLmUoKSw5KS5sZW5ndGg7aWYodGhpcy5mPT0wKXt0aHJvdyB2YmIobmV3IFdkYignVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgcGhhc2UgaW4gdGhlIHBoYXNlIGVudW1lcmF0aW9uLicpKX10aGlzLmM9KGI9QkQoZ2RiKHRoaXMuZyksOSksbmV3IHhxYihiLEJEKF9CYihiLGIubGVuZ3RoKSw5KSwwKSk7dGhpcy5hPW5ldyBqM2M7dGhpcy5iPW5ldyBMcWJ9XG5mdW5jdGlvbiBHb2QoYSxiKXt2YXIgYyxkO2lmKGIhPWEuQ2J8fGEuRGI+PjE2IT03JiYhIWIpe2lmKHA2ZChhLGIpKXRocm93IHZiYihuZXcgV2RiKHN0ZStJb2QoYSkpKTtkPW51bGw7ISFhLkNiJiYoZD0oYz1hLkRiPj4xNixjPj0wP0VvZChhLGQpOmEuQ2IuaWgoYSwtMS1jLG51bGwsZCkpKTshIWImJihkPUJEKGIsNDkpLmdoKGEsMSxDMixkKSk7ZD1Eb2QoYSxiLGQpOyEhZCYmZC5GaSgpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw3LGIsYikpfVxuZnVuY3Rpb24gTkhkKGEsYil7dmFyIGMsZDtpZihiIT1hLkNifHxhLkRiPj4xNiE9MyYmISFiKXtpZihwNmQoYSxiKSl0aHJvdyB2YmIobmV3IFdkYihzdGUrUUhkKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9LSGQoYSxkKTphLkNiLmloKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1CRChiLDQ5KS5naChhLDAsazUsZCkpO2Q9SkhkKGEsYixkKTshIWQmJmQuRmkoKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmVWhkKGEsbmV3IG5TZChhLDEsMyxiLGIpKX1cbmZ1bmN0aW9uIEVoYihhLGIpe0RoYigpO3ZhciBjLGQsZSxmLGcsaCxpLGosaztpZihiLmQ+YS5kKXtoPWE7YT1iO2I9aH1pZihiLmQ8NjMpe3JldHVybiBJaGIoYSxiKX1nPShhLmQmLTIpPDw0O2o9UmdiKGEsZyk7az1SZ2IoYixnKTtkPXloYihhLFFnYihqLGcpKTtlPXloYihiLFFnYihrLGcpKTtpPUVoYihqLGspO2M9RWhiKGQsZSk7Zj1FaGIoeWhiKGosZCkseWhiKGUsaykpO2Y9dGhiKHRoYihmLGkpLGMpO2Y9UWdiKGYsZyk7aT1RZ2IoaSxnPDwxKTtyZXR1cm4gdGhiKHRoYihpLGYpLGMpfVxuZnVuY3Rpb24gYUdjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2c9Q0hjKGEsYyk7aD1LQyhPUSxrbmUsMTAsYi5sZW5ndGgsMCwxKTtkPTA7Zm9yKGY9Zy5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDExKTtDY2IoREQodk5iKGUsKHd0YygpLE5zYykpKSkmJihoW2QrK109QkQodk5iKGUsZ3RjKSwxMCkpfWlmKGQ8Yi5sZW5ndGgpe3Rocm93IHZiYihuZXcgWmRiKCdFeHBlY3RlZCAnK2IubGVuZ3RoKycgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAnK2QrJy4nKSl9cmV0dXJuIGh9XG5mdW5jdGlvbiBVbmQoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoIWEudGIpe2Y9KCFhLnJiJiYoYS5yYj1uZXcgalVkKGEsZDUsYSkpLGEucmIpO2g9bmV3IE1xYihmLmkpO2ZvcihlPW5ldyBGeWQoZik7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDEzOCk7Zz1kLm5lKCk7Yz1CRChnPT1udWxsP2pyYihoLmYsbnVsbCxkKTpEcmIoaC5nLGcsZCksMTM4KTshIWMmJihnPT1udWxsP2pyYihoLmYsbnVsbCxjKTpEcmIoaC5nLGcsYykpfWEudGI9aH1yZXR1cm4gQkQoUGhiKGEudGIsYiksMTM4KX1cbmZ1bmN0aW9uIFlLZChhLGIpe3ZhciBjLGQsZSxmLGc7KGEuaT09bnVsbCYmVEtkKGEpLGEuaSkubGVuZ3RoO2lmKCFhLnApe2c9bmV3IE1xYigoMyphLmcuaS8yfDApKzEpO2ZvcihlPW5ldyAkeWQoYS5nKTtlLmUhPWUuaS5nYygpOyl7ZD1CRChaeWQoZSksMTcwKTtmPWQubmUoKTtjPUJEKGY9PW51bGw/anJiKGcuZixudWxsLGQpOkRyYihnLmcsZixkKSwxNzApOyEhYyYmKGY9PW51bGw/anJiKGcuZixudWxsLGMpOkRyYihnLmcsZixjKSl9YS5wPWd9cmV0dXJuIEJEKFBoYihhLnAsYiksMTcwKX1cbmZ1bmN0aW9uIGhDYihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGo7ZkNiKGQrV3koYyxjLiRkKCkpLGUpO2dDYihiLGpDYihjKSk7Zj1jLmY7ISFmJiZoQ2IoYSxiLGYsJ0NhdXNlZCBieTogJyxmYWxzZSk7Zm9yKGg9KGMuaz09bnVsbCYmKGMuaz1LQyhfSSxuaWUsNzgsMCwwLDEpKSxjLmspLGk9MCxqPWgubGVuZ3RoO2k8ajsrK2kpe2c9aFtpXTtoQ2IoYSxiLGcsJ1N1cHByZXNzZWQ6ICcsZmFsc2UpfWNvbnNvbGUuZ3JvdXBFbmQhPW51bGwmJmNvbnNvbGUuZ3JvdXBFbmQuY2FsbChjb25zb2xlKX1cbmZ1bmN0aW9uIGRHYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2k9Yi5lO2g9aS5sZW5ndGg7Zz1iLnEuX2YoaSxjPzA6aC0xLGMpO2U9aVtjPzA6aC0xXTtnPWd8Y0djKGEsZSxjLGQpO2ZvcihmPWM/MTpoLTI7Yz9mPGg6Zj49MDtmKz1jPzE6LTEpe2c9Z3xiLmMuU2YoaSxmLGMsZCYmIUNjYihERCh2TmIoYi5qLCh3dGMoKSxKc2MpKSkpJiYhQ2NiKEREKHZOYihiLmosKHd0YygpLG10YykpKSkpO2c9Z3xiLnEuX2YoaSxmLGMpO2c9Z3xjR2MoYSxpW2ZdLGMsZCl9UXFiKGEuYyxiKTtyZXR1cm4gZ31cbmZ1bmN0aW9uIG8zYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGs9bV9iKGEuaiksbD0wLG09ay5sZW5ndGg7bDxtOysrbCl7aj1rW2xdO2lmKGM9PShLQWMoKSxIQWMpfHxjPT1KQWMpe2k9a19iKGouZyk7Zm9yKGU9aSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07azNiKGIsZCkmJlBaYihkLHRydWUpfX1pZihjPT1JQWN8fGM9PUpBYyl7aD1rX2Ioai5lKTtmb3IoZT1oLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtqM2IoYixkKSYmUFpiKGQsdHJ1ZSl9fX19XG5mdW5jdGlvbiBRbWMoYSl7dmFyIGIsYztiPW51bGw7Yz1udWxsO3N3aXRjaChMbWMoYSkuZyl7Y2FzZSAxOmI9KFVjZCgpLHpjZCk7Yz1UY2Q7YnJlYWs7Y2FzZSAyOmI9KFVjZCgpLFJjZCk7Yz1BY2Q7YnJlYWs7Y2FzZSAzOmI9KFVjZCgpLFRjZCk7Yz16Y2Q7YnJlYWs7Y2FzZSA0OmI9KFVjZCgpLEFjZCk7Yz1SY2Q7fW1qYyhhLEJEKEJ0YihSQWIoQkQoUWMoYS5rLGIpLDE1KS5PYygpLEhtYykpLDExMykpO25qYyhhLEJEKEJ0YihRQWIoQkQoUWMoYS5rLGMpLDE1KS5PYygpLEhtYykpLDExMykpfVxuZnVuY3Rpb24gYTZiKGEpe3ZhciBiLGMsZCxlLGYsZztlPUJEKElrYihhLmosMCksMTEpO2lmKGUuZS5jLmxlbmd0aCtlLmcuYy5sZW5ndGg9PTApe2Eubi5hPTB9ZWxzZXtnPTA7Zm9yKGQ9dWwocGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW25ldyBKMGIoZSksbmV3IFIwYihlKV0pKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDExKTtnKz1jLmkubi5hK2Mubi5hK2MuYS5hfWI9QkQodk5iKGEsKE55YygpLFR4YykpLDgpO2Y9IWI/MDpiLmE7YS5uLmE9Zy8oZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aCktZn19XG5mdW5jdGlvbiBGMWMoYSxiKXt2YXIgYyxkLGU7Zm9yKGQ9bmV3IG9sYihiLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyMjEpOyROYihCRChjLmIsNjUpLGM3YyhSNmMoQkQoYi5iLDY1KS5jKSxCRChiLmIsNjUpLmEpKTtlPXhPYihCRChiLmIsNjUpLmIsQkQoYy5iLDY1KS5iKTtlPjEmJihhLmE9dHJ1ZSk7Wk5iKEJEKGMuYiw2NSksUDZjKFI2YyhCRChiLmIsNjUpLmMpLFk2YyhjN2MoUjZjKEJEKGMuYiw2NSkuYSksQkQoYi5iLDY1KS5hKSxlKSkpO0QxYyhhLGIpO0YxYyhhLGMpfX1cbmZ1bmN0aW9uIHJWYihhKXt2YXIgYixjLGQsZSxmLGcsaDtmb3IoZj1uZXcgb2xiKGEuYS5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMTg5KTtkLmU9MDtkLmQuYS4kYigpfWZvcihlPW5ldyBvbGIoYS5hLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxODkpO2ZvcihjPWQuYS5hLmVjKCkuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSw4MSk7Zm9yKGg9Yi5mLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksODEpO2lmKGcuZCE9ZCl7UXFiKGQuZCxnKTsrK2cuZC5lfX19fX1cbmZ1bmN0aW9uIGJjYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2k9YS5qLmMubGVuZ3RoO2M9MDtiPWk7ZT0yKmk7Zm9yKGg9bmV3IG9sYihhLmopO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMSk7c3dpdGNoKGcuai5nKXtjYXNlIDI6Y2FzZSA0OmcucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOmQ9Zy5lLmMubGVuZ3RoO2Y9Zy5nLmMubGVuZ3RoO2Q+MCYmZj4wPyhnLnA9YisrKTpkPjA/KGcucD1jKyspOmY+MD8oZy5wPWUrKyk6KGcucD1jKyspO319bW1iKCk7T2tiKGEuaixuZXcgZmNjKX1cbmZ1bmN0aW9uIFZlYyhhKXt2YXIgYixjO2M9bnVsbDtiPUJEKElrYihhLmcsMCksMTcpO2Rve2M9Yi5kLmk7aWYod05iKGMsKHd0YygpLFdzYykpKXtyZXR1cm4gQkQodk5iKGMsV3NjKSwxMSkuaX1pZihjLmshPShqMGIoKSxoMGIpJiZRcihuZXcgU3IodXIoVV9iKGMpLmEuS2MoKSxuZXcgU3EpKSkpe2I9QkQoUnIobmV3IFNyKHVyKFVfYihjKS5hLktjKCksbmV3IFNxKSkpLDE3KX1lbHNlIGlmKGMuayE9aDBiKXtyZXR1cm4gbnVsbH19d2hpbGUoISFjJiZjLmshPShqMGIoKSxoMGIpKTtyZXR1cm4gY31cbmZ1bmN0aW9uIE9tYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztoPWIuajtnPWIuZztpPUJEKElrYihoLGguYy5sZW5ndGgtMSksMTEzKTtrPSh0Q2IoMCxoLmMubGVuZ3RoKSxCRChoLmNbMF0sMTEzKSk7aj1LbWMoYSxnLGksayk7Zm9yKGY9MTtmPGguYy5sZW5ndGg7ZisrKXtjPSh0Q2IoZi0xLGguYy5sZW5ndGgpLEJEKGguY1tmLTFdLDExMykpO2U9KHRDYihmLGguYy5sZW5ndGgpLEJEKGguY1tmXSwxMTMpKTtkPUttYyhhLGcsYyxlKTtpZihkPmope2k9YztrPWU7aj1kfX1iLmE9aztiLmM9aX1cbmZ1bmN0aW9uIHNFYihhLGIpe3ZhciBjLGQ7ZD1BeGIoYS5iLGIuYik7aWYoIWQpe3Rocm93IHZiYihuZXcgWmRiKCdJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBjb25zdHJhaW50IGNhbGN1bGF0aW9uLicpKX0obUViKGIuYixCRChDeGIoYS5iLGIuYiksNTcpKXx8bUViKGIuYixCRChCeGIoYS5iLGIuYiksNTcpKSkmJihaZmIoKSxiLmIrJyBoYXMgb3ZlcmxhcC4nKTthLmFbYi5iLmZdPUJEKEV4YihhLmIsYi5iKSw1Nyk7Yz1CRChEeGIoYS5iLGIuYiksNTcpOyEhYyYmKGEuYVtjLmZdPWIuYil9XG5mdW5jdGlvbiBBRmIoYSl7aWYoIWEuYS5kfHwhYS5hLmUpe3Rocm93IHZiYihuZXcgWmRiKChmZGIoZk4pLGZOLmsrJyBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAnKyhmZGIoak4pLGpOLmspKycgc3BlY2lmaWVkLicpKSl9aWYoYS5hLmQ9PWEuYS5lKXt0aHJvdyB2YmIobmV3IFpkYignTmV0d29yayBzaW1wbGV4IGRvZXMgbm90IHN1cHBvcnQgc2VsZi1sb29wczogJythLmErJyAnK2EuYS5kKycgJythLmEuZSkpfU5GYihhLmEuZC5nLGEuYSk7TkZiKGEuYS5lLmIsYS5hKTtyZXR1cm4gYS5hfVxuZnVuY3Rpb24gSEhjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtqPW5ldyBIeGIobmV3IHRJYyhhKSk7Zm9yKGc9T0MoR0MoYVIsMSksbG5lLDExLDAsW2IsY10pLGg9MCxpPWcubGVuZ3RoO2g8aTsrK2gpe2Y9Z1toXTtJd2Ioai5hLGYsKEJjYigpLHpjYikpPT1udWxsO2ZvcihlPW5ldyBiMWIoZi5iKTtsbGIoZS5hKXx8bGxiKGUuYik7KXtkPUJEKGxsYihlLmEpP21sYihlLmEpOm1sYihlLmIpLDE3KTtkLmM9PWQuZHx8QXhiKGosZj09ZC5jP2QuZDpkLmMpfX1yZXR1cm4gUWIoaiksbmV3IFRrYihqKX1cbmZ1bmN0aW9uIG9QYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2Q9MDtpZihiLmIhPTAmJmMuYiE9MCl7Zj1Kc2IoYiwwKTtnPUpzYihjLDApO2g9RWRiKEVEKFhzYihmKSkpO2k9RWRiKEVEKFhzYihnKSkpO2U9dHJ1ZTtkb3tpZihoPmktYS5iJiZoPGkrYS5iKXtyZXR1cm4gLTF9ZWxzZSBoPmktYS5hJiZoPGkrYS5hJiYrK2Q7aDw9aSYmZi5iIT1mLmQuYz8oaD1FZGIoRUQoWHNiKGYpKSkpOmk8PWgmJmcuYiE9Zy5kLmM/KGk9RWRiKEVEKFhzYihnKSkpKTooZT1mYWxzZSl9d2hpbGUoZSl9cmV0dXJuIGR9XG5mdW5jdGlvbiBGM2IoYSxiLGMsZCxlKXt2YXIgZixnLGgsaTtpPShmPUJEKGdkYihGMSksOSksbmV3IHhxYihmLEJEKF9CYihmLGYubGVuZ3RoKSw5KSwwKSk7Zm9yKGg9bmV3IG9sYihhLmopO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMSk7aWYoYltnLnBdKXtHM2IoZyxiW2cucF0sZCk7cnFiKGksZy5qKX19aWYoZSl7SzNiKGEsYiwoVWNkKCksemNkKSwyKmMsZCk7SzNiKGEsYixUY2QsMipjLGQpfWVsc2V7SzNiKGEsYiwoVWNkKCksQWNkKSwyKmMsZCk7SzNiKGEsYixSY2QsMipjLGQpfX1cbmZ1bmN0aW9uIFN6YihhKXt2YXIgYixjLGQsZSxmO2Y9bmV3IFJrYjtIa2IoYS5iLG5ldyBYQmIoZikpO2EuYi5jPUtDKFNJLFVoZSwxLDAsNSwxKTtpZihmLmMubGVuZ3RoIT0wKXtiPSh0Q2IoMCxmLmMubGVuZ3RoKSxCRChmLmNbMF0sNzgpKTtmb3IoYz0xLGQ9Zi5jLmxlbmd0aDtjPGQ7KytjKXtlPSh0Q2IoYyxmLmMubGVuZ3RoKSxCRChmLmNbY10sNzgpKTtlIT1iJiZReShiLGUpfWlmKEpEKGIsNjApKXt0aHJvdyB2YmIoQkQoYiw2MCkpfWlmKEpEKGIsMjg5KSl7dGhyb3cgdmJiKEJEKGIsMjg5KSl9fX1cbmZ1bmN0aW9uIERDYihhLGIpe3ZhciBjLGQsZSxmO2E9YT09bnVsbD9YaGU6KHVDYihhKSxhKTtjPW5ldyBWZmI7Zj0wO2Q9MDt3aGlsZShkPGIubGVuZ3RoKXtlPWEuaW5kZXhPZignJXMnLGYpO2lmKGU9PS0xKXticmVha31RZmIoYyxhLnN1YnN0cihmLGUtZikpO1BmYihjLGJbZCsrXSk7Zj1lKzJ9UWZiKGMsYS5zdWJzdHIoZikpO2lmKGQ8Yi5sZW5ndGgpe2MuYSs9JyBbJztQZmIoYyxiW2QrK10pO3doaWxlKGQ8Yi5sZW5ndGgpe2MuYSs9U2hlO1BmYihjLGJbZCsrXSl9Yy5hKz0nXSd9cmV0dXJuIGMuYX1cbmZ1bmN0aW9uIEtDYihhKXt2YXIgYixjLGQsZTtiPTA7ZD1hLmxlbmd0aDtlPWQtNDtjPTA7d2hpbGUoYzxlKXtiPShCQ2IoYyszLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoYyszKSsoQkNiKGMrMixhLmxlbmd0aCksMzEqKGEuY2hhckNvZGVBdChjKzIpKyhCQ2IoYysxLGEubGVuZ3RoKSwzMSooYS5jaGFyQ29kZUF0KGMrMSkrKEJDYihjLGEubGVuZ3RoKSwzMSooYS5jaGFyQ29kZUF0KGMpKzMxKmIpKSkpKSkpO2I9YnwwO2MrPTR9d2hpbGUoYzxkKXtiPWIqMzErYmZiKGEsYysrKX1iPWJ8MDtyZXR1cm4gYn1cbmZ1bmN0aW9uIFJhYyhhKXt2YXIgYixjO2ZvcihjPW5ldyBTcih1cihVX2IoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGMpOyl7Yj1CRChScihjKSwxNyk7aWYoYi5kLmkuayE9KGowYigpLGYwYikpe3Rocm93IHZiYihuZXcgeTJjKEZuZStQX2IoYSkrXCInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVCwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZSB0aGF0IFwiKycgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLicpKX19fVxuZnVuY3Rpb24galFjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbTtpPTA7Zm9yKGs9bmV3IG9sYihhLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMCk7aD0wO2ZvcihmPW5ldyBTcih1cihSX2IoaikuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7bD1BMGIoZS5jKS5iO209QTBiKGUuZCkuYjtoPSR3bmQuTWF0aC5tYXgoaCwkd25kLk1hdGguYWJzKG0tbCkpfWk9JHduZC5NYXRoLm1heChpLGgpfWc9ZCokd25kLk1hdGgubWluKDEsYi9jKSppO3JldHVybiBnfVxuZnVuY3Rpb24gU2VlKGEpe3ZhciBiO2I9bmV3IElmYjsoYSYyNTYpIT0wJiYoYi5hKz0nRicsYik7KGEmMTI4KSE9MCYmKGIuYSs9J0gnLGIpOyhhJjUxMikhPTAmJihiLmErPSdYJyxiKTsoYSYyKSE9MCYmKGIuYSs9J2knLGIpOyhhJjgpIT0wJiYoYi5hKz0nbScsYik7KGEmNCkhPTAmJihiLmErPSdzJyxiKTsoYSYzMikhPTAmJihiLmErPSd1JyxiKTsoYSY2NCkhPTAmJihiLmErPSd3JyxiKTsoYSYxNikhPTAmJihiLmErPSd4JyxiKTsoYSZ6dGUpIT0wJiYoYi5hKz0nLCcsYik7cmV0dXJuIGpmYihiLmEpfVxuZnVuY3Rpb24gRjViKGEsYil7dmFyIGMsZCxlLGY7T2RkKGIsJ1Jlc2l6ZSBjaGlsZCBncmFwaCB0byBmaXQgcGFyZW50LicsMSk7Zm9yKGQ9bmV3IG9sYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyOSk7R2tiKGEuYSxjLmEpO2MuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKX1mb3IoZj1uZXcgb2xiKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEwKTskX2IoZSxudWxsKX1hLmIuYz1LQyhTSSxVaGUsMSwwLDUsMSk7RzViKGEpOyEhYS5lJiZFNWIoYS5lLGEpO1FkZChiKX1cbmZ1bmN0aW9uIGVlYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7ZD1hLmI7Zj1kLmU7Zz1lY2QoQkQodk5iKGQsKE55YygpLFZ4YykpLDk4KSk7Yz0hIWYmJkJEKHZOYihmLCh3dGMoKSxLc2MpKSwyMSkuSGMoKE9yYygpLEhyYykpO2lmKGd8fGMpe3JldHVybn1mb3Ioaj0oaD0obmV3ICRpYihhLmUpKS5hLnZjKCkuS2MoKSxuZXcgZGpiKGgpKTtqLmEuT2IoKTspe2k9KGI9QkQoai5hLlBiKCksNDIpLEJEKGIuZGQoKSwxMTMpKTtpZihpLmEpe2U9aS5kO0YwYihlLG51bGwpO2kuYz10cnVlO2EuYT10cnVlfX19XG5mdW5jdGlvbiBRRmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47bT0tMTtuPTA7Zm9yKGo9YSxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107Zm9yKGY9aSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107Yj1uZXcgVW5jKG09PS0xP2FbMF06YVttXSxYZWMoZSkpO2ZvcihjPTA7YzxlLmouYy5sZW5ndGg7YysrKXtmb3IoZD1jKzE7ZDxlLmouYy5sZW5ndGg7ZCsrKXtSbmMoYixCRChJa2IoZS5qLGMpLDExKSxCRChJa2IoZS5qLGQpLDExKSk+MCYmKytufX19KyttfXJldHVybiBufVxuZnVuY3Rpb24gaFVjKGEsYil7dmFyIGMsZCxlLGYsZztnPUJEKHZOYihiLChKVGMoKSxGVGMpKSw0MjUpO2ZvcihmPUpzYihiLmIsMCk7Zi5iIT1mLmQuYzspe2U9QkQoWHNiKGYpLDg2KTtpZihhLmJbZS5nXT09MCl7c3dpdGNoKGcuZyl7Y2FzZSAwOmlVYyhhLGUpO2JyZWFrO2Nhc2UgMTpnVWMoYSxlKTt9YS5iW2UuZ109Mn19Zm9yKGQ9SnNiKGEuYSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksMTg4KTt6ZShjLmIuZCxjLHRydWUpO3plKGMuYy5iLGMsdHJ1ZSl9eU5iKGIsKG1UYygpLGdUYyksYS5hKX1cbmZ1bmN0aW9uIFM2ZChhLGIpe1E2ZCgpO3ZhciBjLGQsZSxmO2lmKCFiKXtyZXR1cm4gUDZkfWVsc2UgaWYoYj09KFE4ZCgpLE44ZCl8fChiPT12OGR8fGI9PXQ4ZHx8Yj09dThkKSYmYSE9czhkKXtyZXR1cm4gbmV3IFo2ZChhLGIpfWVsc2V7ZD1CRChiLDY3Nyk7Yz1kLnBrKCk7aWYoIWMpe2EyZChxMWQoKE82ZCgpLE02ZCksYikpO2M9ZC5waygpfWY9KCFjLmkmJihjLmk9bmV3IExxYiksYy5pKTtlPUJEKFdkKGlyYihmLmYsYSkpLDE5NDIpOyFlJiZSaGIoZixhLGU9bmV3IFo2ZChhLGIpKTtyZXR1cm4gZX19XG5mdW5jdGlvbiBUYmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aT1CRCh2TmIoYSwod3RjKCksJHNjKSksMTEpO2o9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2kuaS5uLGkubixpLmFdKSkuYTtrPWEuaS5uLmI7Yz1rX2IoYS5lKTtmb3IoZT1jLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtSWmIoZCxpKTtGc2IoZC5hLG5ldyBmN2MoaixrKSk7aWYoYil7aD1CRCh2TmIoZCwoTnljKCksanhjKSksNzQpO2lmKCFoKXtoPW5ldyBzN2M7eU5iKGQsanhjLGgpfURzYihoLG5ldyBmN2MoaixrKSl9fX1cbmZ1bmN0aW9uIFViYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztlPUJEKHZOYihhLCh3dGMoKSwkc2MpKSwxMSk7aj1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5hO2s9YS5pLm4uYjtjPWtfYihhLmcpO2ZvcihnPWMsaD0wLGk9Zy5sZW5ndGg7aDxpOysraCl7Zj1nW2hdO1FaYihmLGUpO0VzYihmLmEsbmV3IGY3YyhqLGspKTtpZihiKXtkPUJEKHZOYihmLChOeWMoKSxqeGMpKSw3NCk7aWYoIWQpe2Q9bmV3IHM3Yzt5TmIoZixqeGMsZCl9RHNiKGQsbmV3IGY3YyhqLGspKX19fVxuZnVuY3Rpb24gVEZjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2EuYj1uZXcgUmtiO2EuZD1CRCh2TmIoYiwod3RjKCksanRjKSksMjMwKTthLmU9RHViKGEuZCk7Zj1uZXcgUHNiO2U9T3UoT0MoR0MoS1EsMSksY25lLDM3LDAsW2JdKSk7Zz0wO3doaWxlKGc8ZS5jLmxlbmd0aCl7ZD0odENiKGcsZS5jLmxlbmd0aCksQkQoZS5jW2ddLDM3KSk7ZC5wPWcrKztjPW5ldyBmRmMoZCxhLmEsYS5iKTtHa2IoZSxjLmIpO0VrYihhLmIsYyk7Yy5zJiYoaD1Kc2IoZiwwKSxWc2IoaCxjKSl9YS5jPW5ldyBUcWI7cmV0dXJuIGZ9XG5mdW5jdGlvbiBISmIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Zm9yKGc9QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCkuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxMTEpO2M9Zi5jP1pIYihmLmMpOjA7aWYoYz4wKXtpZihmLmEpe2g9Zi5iLnJmKCkuYTtpZihjPmgpe2U9KGMtaCkvMjtmLmQuYj1lO2YuZC5jPWV9fWVsc2V7Zi5kLmM9YS5zK2N9fWVsc2UgaWYodGNkKGEudSkpe2Q9c2ZkKGYuYik7ZC5jPDAmJihmLmQuYj0tZC5jKTtkLmMrZC5iPmYuYi5yZigpLmEmJihmLmQuYz1kLmMrZC5iLWYuYi5yZigpLmEpfX19XG5mdW5jdGlvbiBFZWMoYSxiKXt2YXIgYyxkLGUsZjtPZGQoYiwnU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24gUHJvY2Vzc29yJywxKTtjPWZhbHNlO2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2Y9VEFiKFZBYihKQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGQuYSwxNikpLG5ldyBKZWMpLG5ldyBMZWMpLG5ldyBOZWMpLG5ldyBSZWMpO2M9Y3xmLmEhPW51bGx9YyYmeU5iKGEsKHd0YygpLFJzYyksKEJjYigpLHRydWUpKTtRZGQoYil9XG5mdW5jdGlvbiBzUmMoYSxiLGMpe3ZhciBkLGUsZixnLGg7ZT1jOyFlJiYoZT1uZXcgWmRkKTtPZGQoZSwnTGF5b3V0JyxhLmEuYy5sZW5ndGgpO2lmKENjYihERCh2TmIoYiwoSlRjKCksdlRjKSkpKSl7WmZiKCk7Zm9yKGQ9MDtkPGEuYS5jLmxlbmd0aDtkKyspe2g9KGQ8MTA/JzAnOicnKStkKys7JyAgIFNsb3QgJytoKyc6ICcraGRiKHJiKEJEKElrYihhLmEsZCksNTEpKSl9fWZvcihnPW5ldyBvbGIoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksNTEpO2YucGYoYixVZGQoZSwxKSl9UWRkKGUpfVxuZnVuY3Rpb24geU1iKGEpe3ZhciBiLGM7Yj1CRChhLmEsMTkpLmE7Yz1CRChhLmIsMTkpLmE7aWYoYj49MCl7aWYoYj09Yyl7cmV0dXJuIG5ldyB2Z2QobWViKC1iLTEpLG1lYigtYi0xKSl9aWYoYj09LWMpe3JldHVybiBuZXcgdmdkKG1lYigtYiksbWViKGMrMSkpfX1pZigkd25kLk1hdGguYWJzKGIpPiR3bmQuTWF0aC5hYnMoYykpe2lmKGI8MCl7cmV0dXJuIG5ldyB2Z2QobWViKC1iKSxtZWIoYykpfXJldHVybiBuZXcgdmdkKG1lYigtYiksbWViKGMrMSkpfXJldHVybiBuZXcgdmdkKG1lYihiKzEpLG1lYihjKSl9XG5mdW5jdGlvbiBxNWIoYSl7dmFyIGIsYztjPUJEKHZOYihhLChOeWMoKSxteGMpKSwxNjMpO2I9QkQodk5iKGEsKHd0YygpLE9zYykpLDMwMyk7aWYoYz09KEN0YygpLHl0Yykpe3lOYihhLG14YyxCdGMpO3lOYihhLE9zYywoZXNjKCksZHNjKSl9ZWxzZSBpZihjPT1BdGMpe3lOYihhLG14YyxCdGMpO3lOYihhLE9zYywoZXNjKCksYnNjKSl9ZWxzZSBpZihiPT0oZXNjKCksZHNjKSl7eU5iKGEsbXhjLHl0Yyk7eU5iKGEsT3NjLGNzYyl9ZWxzZSBpZihiPT1ic2Mpe3lOYihhLG14YyxBdGMpO3lOYihhLE9zYyxjc2MpfX1cbmZ1bmN0aW9uIEZOYygpe0ZOYz1jY2I7RE5jPW5ldyBSTmM7ek5jPWUzYyhuZXcgajNjLChxVWIoKSxuVWIpLChTOGIoKSxvOGIpKTtDTmM9YzNjKGUzYyhuZXcgajNjLG5VYixDOGIpLHBVYixCOGIpO0VOYz1iM2MoYjNjKGczYyhjM2MoZTNjKG5ldyBqM2MsbFViLE04YikscFViLEw4Yiksb1ViKSxLOGIpLE44Yik7QU5jPWMzYyhlM2MoZTNjKGUzYyhuZXcgajNjLG1VYixyOGIpLG9VYix0OGIpLG9VYix1OGIpLHBVYixzOGIpO0JOYz1jM2MoZTNjKGUzYyhuZXcgajNjLG9VYix1OGIpLG9VYixfN2IpLHBVYiwkN2IpfVxuZnVuY3Rpb24gaFFjKCl7aFFjPWNjYjtjUWM9ZTNjKGMzYyhuZXcgajNjLChxVWIoKSxwVWIpLChTOGIoKSxjOGIpKSxuVWIsbzhiKTtnUWM9YjNjKGIzYyhnM2MoYzNjKGUzYyhuZXcgajNjLGxVYixNOGIpLHBVYixMOGIpLG9VYiksSzhiKSxOOGIpO2RRYz1jM2MoZTNjKGUzYyhlM2MobmV3IGozYyxtVWIscjhiKSxvVWIsdDhiKSxvVWIsdThiKSxwVWIsczhiKTtmUWM9ZTNjKGUzYyhuZXcgajNjLG5VYixDOGIpLHBVYixCOGIpO2VRYz1jM2MoZTNjKGUzYyhuZXcgajNjLG9VYix1OGIpLG9VYixfN2IpLHBVYiwkN2IpfVxuZnVuY3Rpb24gR05jKGEsYixjLGQsZSl7dmFyIGYsZztpZigoIU9aYihiKSYmYi5jLmkuYz09Yi5kLmkuY3x8IVQ2YyhsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbZS5pLm4sZS5uLGUuYV0pKSxjKSkmJiFPWmIoYikpe2IuYz09ZT9TdChiLmEsMCxuZXcgZzdjKGMpKTpEc2IoYi5hLG5ldyBnN2MoYykpO2lmKGQmJiFScWIoYS5hLGMpKXtnPUJEKHZOYihiLChOeWMoKSxqeGMpKSw3NCk7aWYoIWcpe2c9bmV3IHM3Yzt5TmIoYixqeGMsZyl9Zj1uZXcgZzdjKGMpO0dzYihnLGYsZy5jLmIsZy5jKTtRcWIoYS5hLGYpfX19XG5mdW5jdGlvbiBRYWMoYSl7dmFyIGIsYztmb3IoYz1uZXcgU3IodXIoUl9iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksMTcpO2lmKGIuYy5pLmshPShqMGIoKSxmMGIpKXt0aHJvdyB2YmIobmV3IHkyYyhGbmUrUF9iKGEpK1wiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlIHRoYXQgXCIrJyBkb2VzIG5vdCBjb21lIGZyb20gYSBGSVJTVF9TRVBBUkFURSBub2RlLiBUaGF0IG11c3Qgbm90IGhhcHBlbi4nKSl9fX1cbmZ1bmN0aW9uIHZqZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7ZT1hZWIoYS5EYiYyNTQpO2lmKGU9PTApe2EuRWI9Y31lbHNle2lmKGU9PTEpe2g9S0MoU0ksVWhlLDEsMiw1LDEpO2Y9empkKGEsYik7aWYoZj09MCl7aFswXT1jO2hbMV09YS5FYn1lbHNle2hbMF09YS5FYjtoWzFdPWN9fWVsc2V7aD1LQyhTSSxVaGUsMSxlKzEsNSwxKTtnPUNEKGEuRWIpO2ZvcihkPTIsaT0wLGo9MDtkPD0xMjg7ZDw8PTEpe2Q9PWI/KGhbaisrXT1jKTooYS5EYiZkKSE9MCYmKGhbaisrXT1nW2krK10pfX1hLkViPWh9YS5EYnw9Yn1cbmZ1bmN0aW9uIEVOYihhLGIsYyl7dmFyIGQsZSxmLGc7dGhpcy5iPW5ldyBSa2I7ZT0wO2Q9MDtmb3IoZz1uZXcgb2xiKGEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxNjcpO2MmJnJNYihmKTtFa2IodGhpcy5iLGYpO2UrPWYubztkKz1mLnB9aWYodGhpcy5iLmMubGVuZ3RoPjApe2Y9QkQoSWtiKHRoaXMuYiwwKSwxNjcpO2UrPWYubztkKz1mLnB9ZSo9MjtkKj0yO2I+MT8oZT1RRCgkd25kLk1hdGguY2VpbChlKmIpKSk6KGQ9UUQoJHduZC5NYXRoLmNlaWwoZC9iKSkpO3RoaXMuYT1uZXcgcE5iKGUsZCl9XG5mdW5jdGlvbiBJZ2MoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtrPWQ7aWYoYi5qJiZiLm8pe249QkQoT2hiKGEuZixiLkEpLDU3KTtwPW4uZC5jK24uZC5iOy0ta31lbHNle3A9Yi5hLmMrYi5hLmJ9bD1lO2lmKGMucSYmYy5vKXtuPUJEKE9oYihhLmYsYy5DKSw1Nyk7aj1uLmQuYzsrK2x9ZWxzZXtqPWMuYS5jfXE9ai1wO2k9JHduZC5NYXRoLm1heCgyLGwtayk7aD1xL2k7bz1wK2g7Zm9yKG09azttPGw7KyttKXtnPUJEKGYuWGIobSksMTI4KTtyPWcuYS5iO2cuYS5jPW8tci8yO28rPWh9fVxuZnVuY3Rpb24gVUhjKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGw7aj1jLmMubGVuZ3RoO2YmJihhLmM9S0MoV0Qsb2plLDI1LGIubGVuZ3RoLDE1LDEpKTtmb3IoZz1lPzA6Yi5sZW5ndGgtMTtlP2c8Yi5sZW5ndGg6Zz49MDtnKz1lPzE6LTEpe2g9YltnXTtpPWQ9PShVY2QoKSx6Y2QpP2U/Vl9iKGgsZCk6U3UoVl9iKGgsZCkpOmU/U3UoVl9iKGgsZCkpOlZfYihoLGQpO2YmJihhLmNbaC5wXT1pLmdjKCkpO2ZvcihsPWkuS2MoKTtsLk9iKCk7KXtrPUJEKGwuUGIoKSwxMSk7YS5kW2sucF09aisrfUdrYihjLGkpfX1cbmZ1bmN0aW9uIGFRYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztmPUVkYihFRChhLmIuS2MoKS5QYigpKSk7aj1FZGIoRUQoUHEoYi5iKSkpO2Q9WTZjKFI2YyhhLmEpLGotYyk7ZT1ZNmMoUjZjKGIuYSksYy1mKTtrPVA2YyhkLGUpO1k2YyhrLDEvKGotZikpO3RoaXMuYT1rO3RoaXMuYj1uZXcgUmtiO2g9dHJ1ZTtnPWEuYi5LYygpO2cuUGIoKTt3aGlsZShnLk9iKCkpe2k9RWRiKEVEKGcuUGIoKSkpO2lmKGgmJmktYz5PcWUpe3RoaXMuYi5GYyhjKTtoPWZhbHNlfXRoaXMuYi5GYyhpKX1oJiZ0aGlzLmIuRmMoYyl9XG5mdW5jdGlvbiB2R2IoYSl7dmFyIGIsYyxkLGU7eUdiKGEsYS5uKTtpZihhLmQuYy5sZW5ndGg+MCl7QmxiKGEuYyk7d2hpbGUoR0diKGEsQkQobWxiKG5ldyBvbGIoYS5lLmEpKSwxMjEpKTxhLmUuYS5jLmxlbmd0aCl7Yj1BR2IoYSk7ZT1iLmUuZS1iLmQuZS1iLmE7Yi5lLmomJihlPS1lKTtmb3IoZD1uZXcgb2xiKGEuZS5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTIxKTtjLmomJihjLmUrPWUpfUJsYihhLmMpfUJsYihhLmMpO0RHYihhLEJEKG1sYihuZXcgb2xiKGEuZS5hKSksMTIxKSk7ckdiKGEpfX1cbmZ1bmN0aW9uIHJrYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGU9QkQoUWMoYS5hLChYamMoKSxUamMpKSwxNSkuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxMDEpO2M9QkQoSWtiKGQuaiwwKSwxMTMpLmQuajtmPW5ldyBUa2IoZC5qKTtPa2IoZixuZXcgWGtjKTtzd2l0Y2goYi5nKXtjYXNlIDE6amtjKGEsZixjLChGa2MoKSxEa2MpLDEpO2JyZWFrO2Nhc2UgMDpnPWxrYyhmKTtqa2MoYSxuZXcgSmliKGYsMCxnKSxjLChGa2MoKSxEa2MpLDApO2prYyhhLG5ldyBKaWIoZixnLGYuYy5sZW5ndGgpLGMsRGtjLDEpO319fVxuZnVuY3Rpb24gYzJjKGEsYil7WTFjKCk7dmFyIGMsZDtjPWo0YyhuNGMoKSxiLnRnKCkpO2lmKGMpe2Q9Yy5qO2lmKEpEKGEsMjM5KSl7cmV0dXJuIFpvZChCRChhLDMzKSk/dXFiKGQsKE41YygpLEs1YykpfHx1cWIoZCxMNWMpOnVxYihkLChONWMoKSxLNWMpKX1lbHNlIGlmKEpEKGEsMzUyKSl7cmV0dXJuIHVxYihkLChONWMoKSxJNWMpKX1lbHNlIGlmKEpEKGEsMTg2KSl7cmV0dXJuIHVxYihkLChONWMoKSxNNWMpKX1lbHNlIGlmKEpEKGEsMzU0KSl7cmV0dXJuIHVxYihkLChONWMoKSxKNWMpKX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBjM2QoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtlPWM7Zj1lLmFrKCk7aWYoVDZkKGEuZSxmKSl7aWYoZi5oaSgpKXtkPUJEKGEuZywxMTkpO2ZvcihnPTA7ZzxhLmk7KytnKXtoPWRbZ107aWYocGIoaCxlKSYmZyE9Yil7dGhyb3cgdmJiKG5ldyBXZGIoa3VlKSl9fX19ZWxzZXtpPVM2ZChhLmUuVGcoKSxmKTtkPUJEKGEuZywxMTkpO2ZvcihnPTA7ZzxhLmk7KytnKXtoPWRbZ107aWYoaS5ybChoLmFrKCkpJiZnIT1iKXt0aHJvdyB2YmIobmV3IFdkYihId2UpKX19fXJldHVybiBCRChHdGQoYSxiLGMpLDcyKX1cbmZ1bmN0aW9uIFN5KGQsYil7aWYoYiBpbnN0YW5jZW9mIE9iamVjdCl7dHJ5e2IuX19qYXZhJGV4Y2VwdGlvbj1kO2lmKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtc2llJykhPS0xJiYkZG9jLmRvY3VtZW50TW9kZTw5KXtyZXR1cm59dmFyIGM9ZDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtjYXVzZTp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9Yy5aZCgpO3JldHVybiBhJiZhLlhkKCl9fSxzdXBwcmVzc2VkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5ZZCgpfX19KX1jYXRjaChhKXt9fX1cbmZ1bmN0aW9uIGxoYihhLGIpe3ZhciBjLGQsZSxmLGc7ZD1iPj41O2ImPTMxO2lmKGQ+PWEuZCl7cmV0dXJuIGEuZTwwPyhIZ2IoKSxCZ2IpOihIZ2IoKSxHZ2IpfWY9YS5kLWQ7ZT1LQyhXRCxvamUsMjUsZisxLDE1LDEpO21oYihlLGYsYS5hLGQsYik7aWYoYS5lPDApe2ZvcihjPTA7YzxkJiZhLmFbY109PTA7YysrKTtpZihjPGR8fGI+MCYmYS5hW2NdPDwzMi1iIT0wKXtmb3IoYz0wO2M8ZiYmZVtjXT09LTE7YysrKXtlW2NdPTB9Yz09ZiYmKytmOysrZVtjXX19Zz1uZXcgVmdiKGEuZSxmLGUpO0pnYihnKTtyZXR1cm4gZ31cbmZ1bmN0aW9uIFVQYihhKXt2YXIgYixjLGQsZTtlPW1wZChhKTtjPW5ldyBrUWIoZSk7ZD1uZXcgbVFiKGUpO2I9bmV3IFJrYjtHa2IoYiwoIWEuZCYmKGEuZD1uZXcgeTVkKEIyLGEsOCw1KSksYS5kKSk7R2tiKGIsKCFhLmUmJihhLmU9bmV3IHk1ZChCMixhLDcsNCkpLGEuZSkpO3JldHVybiBCRChHQWIoTkFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLDE2KSksYyksZCksQXliKG5ldyBoemIsbmV3IGp6YixuZXcgR3piLG5ldyBJemIsT0MoR0MoeEwsMSksS2llLDEzMiwwLFsoRnliKCksRXliKSxEeWJdKSkpLDIxKX1cbmZ1bmN0aW9uIHAyZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2g9KFE2ZCgpLEJEKGIsNjYpLk9qKCkpO2lmKFQ2ZChhLmUsYikpe2lmKGIuaGkoKSYmRjJkKGEsYixkLEpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MCkpe3Rocm93IHZiYihuZXcgV2RiKGt1ZSkpfX1lbHNle2k9UzZkKGEuZS5UZygpLGIpO2U9QkQoYS5nLDExOSk7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihpLnJsKGYuYWsoKSkpe3Rocm93IHZiYihuZXcgV2RiKEh3ZSkpfX19dnRkKGEsSTJkKGEsYixjKSxoP0JEKGQsNzIpOlI2ZChiLGQpKX1cbmZ1bmN0aW9uIFQ2ZChhLGIpe1E2ZCgpO3ZhciBjLGQsZTtpZihiLiRqKCkpe3JldHVybiB0cnVlfWVsc2UgaWYoYi5aaigpPT0tMil7aWYoYj09KG04ZCgpLGs4ZCl8fGI9PWg4ZHx8Yj09aThkfHxiPT1qOGQpe3JldHVybiB0cnVlfWVsc2V7ZT1hLlRnKCk7aWYoYkxkKGUsYik+PTApe3JldHVybiBmYWxzZX1lbHNle2M9ZTFkKChPNmQoKSxNNmQpLGUsYik7aWYoIWMpe3JldHVybiB0cnVlfWVsc2V7ZD1jLlpqKCk7cmV0dXJuIChkPjF8fGQ9PS0xKSYmJDFkKHExZChNNmQsYykpIT0zfX19fWVsc2V7cmV0dXJuIGZhbHNlfX1cbmZ1bmN0aW9uIFIxYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2g9YXRkKEJEKHF1ZCgoIWIuYiYmKGIuYj1uZXcgeTVkKHoyLGIsNCw3KSksYi5iKSwwKSw4MikpO2k9YXRkKEJEKHF1ZCgoIWIuYyYmKGIuYz1uZXcgeTVkKHoyLGIsNSw4KSksYi5jKSwwKSw4MikpO2lmKFhvZChoKT09WG9kKGkpKXtyZXR1cm4gbnVsbH1pZihudGQoaSxoKSl7cmV0dXJuIG51bGx9Zz1NbGQoYik7aWYoZz09Yyl7cmV0dXJuIGR9ZWxzZXtmPUJEKE9oYihhLmEsZyksMTApO2lmKGYpe2U9Zi5lO2lmKGUpe3JldHVybiBlfX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBDYWMoYSxiKXt2YXIgYztjPUJEKHZOYihhLChOeWMoKSxSd2MpKSwyNzYpO09kZChiLCdMYWJlbCBzaWRlIHNlbGVjdGlvbiAoJytjKycpJywxKTtzd2l0Y2goYy5nKXtjYXNlIDA6RGFjKGEsKHJiZCgpLG5iZCkpO2JyZWFrO2Nhc2UgMTpEYWMoYSwocmJkKCksb2JkKSk7YnJlYWs7Y2FzZSAyOkJhYyhhLChyYmQoKSxuYmQpKTticmVhaztjYXNlIDM6QmFjKGEsKHJiZCgpLG9iZCkpO2JyZWFrO2Nhc2UgNDpFYWMoYSwocmJkKCksbmJkKSk7YnJlYWs7Y2FzZSA1OkVhYyhhLChyYmQoKSxvYmQpKTt9UWRkKGIpfVxuZnVuY3Rpb24gYkdjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZD1SRmMoYyxhLmxlbmd0aCk7Zz1hW2RdO2lmKGdbMF0uayE9KGowYigpLGUwYikpe3JldHVybn1mPVNGYyhjLGcubGVuZ3RoKTtpPWIuajtmb3IoZT0wO2U8aS5jLmxlbmd0aDtlKyspe2g9KHRDYihlLGkuYy5sZW5ndGgpLEJEKGkuY1tlXSwxMSkpO2lmKChjP2guaj09KFVjZCgpLHpjZCk6aC5qPT0oVWNkKCksVGNkKSkmJkNjYihERCh2TmIoaCwod3RjKCksTnNjKSkpKSl7TmtiKGksZSxCRCh2TmIoZ1tmXSwod3RjKCksJHNjKSksMTEpKTtmKz1jPzE6LTF9fX1cbmZ1bmN0aW9uIHJRYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zz1uZXcgUmtiO2M9Yjtkb3tmPUJEKE9oYihhLmIsYyksMTI4KTtmLkI9Yy5jO2YuRD1jLmQ7Zy5jW2cuYy5sZW5ndGhdPWY7Yz1CRChPaGIoYS5rLGMpLDE3KX13aGlsZShjKTtkPSh0Q2IoMCxnLmMubGVuZ3RoKSxCRChnLmNbMF0sMTI4KSk7ZC5qPXRydWU7ZC5BPUJEKGQuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5jLmk7ZT1CRChJa2IoZyxnLmMubGVuZ3RoLTEpLDEyOCk7ZS5xPXRydWU7ZS5DPUJEKGUuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5kLmk7cmV0dXJuIGd9XG5mdW5jdGlvbiAkd2QoYSl7aWYoYS5nPT1udWxsKXtzd2l0Y2goYS5wKXtjYXNlIDA6YS5nPVN3ZChhKT8oQmNiKCksQWNiKTooQmNiKCksemNiKTticmVhaztjYXNlIDE6YS5nPVNjYihUd2QoYSkpO2JyZWFrO2Nhc2UgMjphLmc9YmRiKFV3ZChhKSk7YnJlYWs7Y2FzZSAzOmEuZz1Wd2QoYSk7YnJlYWs7Y2FzZSA0OmEuZz1uZXcgTmRiKFd3ZChhKSk7YnJlYWs7Y2FzZSA2OmEuZz1BZWIoWXdkKGEpKTticmVhaztjYXNlIDU6YS5nPW1lYihYd2QoYSkpO2JyZWFrO2Nhc2UgNzphLmc9V2ViKFp3ZChhKSk7fX1yZXR1cm4gYS5nfVxuZnVuY3Rpb24gaHhkKGEpe2lmKGEubj09bnVsbCl7c3dpdGNoKGEucCl7Y2FzZSAwOmEubj1fd2QoYSk/KEJjYigpLEFjYik6KEJjYigpLHpjYik7YnJlYWs7Y2FzZSAxOmEubj1TY2IoYXhkKGEpKTticmVhaztjYXNlIDI6YS5uPWJkYihieGQoYSkpO2JyZWFrO2Nhc2UgMzphLm49Y3hkKGEpO2JyZWFrO2Nhc2UgNDphLm49bmV3IE5kYihkeGQoYSkpO2JyZWFrO2Nhc2UgNjphLm49QWViKGZ4ZChhKSk7YnJlYWs7Y2FzZSA1OmEubj1tZWIoZXhkKGEpKTticmVhaztjYXNlIDc6YS5uPVdlYihneGQoYSkpO319cmV0dXJuIGEubn1cbmZ1bmN0aW9uIFFEYihhKXt2YXIgYixjLGQsZSxmLGcsaDtmb3IoZj1uZXcgb2xiKGEuYS5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMzA3KTtkLmc9MDtkLmk9MDtkLmUuYS4kYigpfWZvcihlPW5ldyBvbGIoYS5hLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwzMDcpO2ZvcihjPWQuYS5hLmVjKCkuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSw1Nyk7Zm9yKGg9Yi5jLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksNTcpO2lmKGcuYSE9ZCl7UXFiKGQuZSxnKTsrK2cuYS5nOysrZy5hLml9fX19fVxuZnVuY3Rpb24gZ09iKGEsYil7dmFyIGMsZCxlLGYsZyxoO2g9QXhiKGEuYSxiLmIpO2lmKCFoKXt0aHJvdyB2YmIobmV3IFpkYignSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgb3ZlcmxhcCBjYWxjdWxhdGlvbi4nKSl9Zz1mYWxzZTtmb3IoZj0oZD1uZXcgWXdiKChuZXcgY3hiKChuZXcgR2piKGEuYS5hKSkuYSkpLmIpLG5ldyBOamIoZCkpO3NpYihmLmEuYSk7KXtlPShjPVd3YihmLmEpLEJEKGMuY2QoKSw2NSkpO2lmKGJPYihiLmIsZSkpe1QkYyhhLmIuYSxiLmIsZSk7Zz10cnVlfWVsc2V7aWYoZyl7YnJlYWt9fX19XG5mdW5jdGlvbiBHNWIoYSl7dmFyIGIsYyxkLGUsZjtlPUJEKHZOYihhLChOeWMoKSxGeGMpKSwyMSk7Zj1CRCh2TmIoYSxJeGMpLDIxKTtjPW5ldyBmN2MoYS5mLmErYS5kLmIrYS5kLmMsYS5mLmIrYS5kLmQrYS5kLmEpO2I9bmV3IGc3YyhjKTtpZihlLkhjKCh0ZGQoKSxwZGQpKSl7ZD1CRCh2TmIoYSxIeGMpLDgpO2lmKGYuSGMoKElkZCgpLEJkZCkpKXtkLmE8PTAmJihkLmE9MjApO2QuYjw9MCYmKGQuYj0yMCl9Yi5hPSR3bmQuTWF0aC5tYXgoYy5hLGQuYSk7Yi5iPSR3bmQuTWF0aC5tYXgoYy5iLGQuYil9SDViKGEsYyxiKX1cbmZ1bmN0aW9uIHRvYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07ZT1iP25ldyBDb2M6bmV3IEVvYztmPWZhbHNlO2Rve2Y9ZmFsc2U7aj1iP1N1KGEuYik6YS5iO2ZvcihpPWouS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwyOSk7bT1NdShoLmEpO2J8fG5ldyBvdihtKTtmb3IobD1uZXcgb2xiKG0pO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxMCk7aWYoZS5NYihrKSl7ZD1rO2M9QkQodk5iKGssKHd0YygpLHVzYykpLDMwNSk7Zz1iP2MuYjpjLms7Zj1yb2MoZCxnLGIsZmFsc2UpfX19fXdoaWxlKGYpfVxuZnVuY3Rpb24gV0NjKGEsYixjKXt2YXIgZCxlLGYsZyxoO09kZChjLCdMb25nZXN0IHBhdGggbGF5ZXJpbmcnLDEpO2EuYT1iO2g9YS5hLmE7YS5iPUtDKFdELG9qZSwyNSxoLmMubGVuZ3RoLDE1LDEpO2Q9MDtmb3IoZz1uZXcgb2xiKGgpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihnKSwxMCk7ZS5wPWQ7YS5iW2RdPS0xOysrZH1mb3IoZj1uZXcgb2xiKGgpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7WUNjKGEsZSl9aC5jPUtDKFNJLFVoZSwxLDAsNSwxKTthLmE9bnVsbDthLmI9bnVsbDtRZGQoYyl9XG5mdW5jdGlvbiBRVmIoYSxiKXt2YXIgYyxkLGU7Yi5hPyhBeGIoYS5iLGIuYiksYS5hW2IuYi5pXT1CRChFeGIoYS5iLGIuYiksODEpLGM9QkQoRHhiKGEuYixiLmIpLDgxKSwhIWMmJihhLmFbYy5pXT1iLmIpLHVuZGVmaW5lZCk6KGQ9QkQoRXhiKGEuYixiLmIpLDgxKSwhIWQmJmQ9PWEuYVtiLmIuaV0mJiEhZC5kJiZkLmQhPWIuYi5kJiZkLmYuRmMoYi5iKSxlPUJEKER4YihhLmIsYi5iKSw4MSksISFlJiZhLmFbZS5pXT09Yi5iJiYhIWUuZCYmZS5kIT1iLmIuZCYmYi5iLmYuRmMoZSksRnhiKGEuYixiLmIpLHVuZGVmaW5lZCl9XG5mdW5jdGlvbiB6YmMoYSxiKXt2YXIgYyxkLGUsZixnLGg7Zj1hLmQ7aD1FZGIoRUQodk5iKGEsKE55YygpLFp3YykpKSk7aWYoaDwwKXtoPTA7eU5iKGEsWndjLGgpfWIuby5iPWg7Zz0kd25kLk1hdGguZmxvb3IoaC8yKTtkPW5ldyBIMGI7RzBiKGQsKFVjZCgpLFRjZCkpO0YwYihkLGIpO2Qubi5iPWc7ZT1uZXcgSDBiO0cwYihlLHpjZCk7RjBiKGUsYik7ZS5uLmI9ZztSWmIoYSxkKTtjPW5ldyBVWmI7dE5iKGMsYSk7eU5iKGMsanhjLG51bGwpO1FaYihjLGUpO1JaYihjLGYpO3liYyhiLGEsYyk7d2JjKGEsYyk7cmV0dXJuIGN9XG5mdW5jdGlvbiB1TmMoYSl7dmFyIGIsYztjPUJEKHZOYihhLCh3dGMoKSxLc2MpKSwyMSk7Yj1uZXcgajNjO2lmKGMuSGMoKE9yYygpLElyYykpKXtkM2MoYixvTmMpO2QzYyhiLHFOYyl9aWYoYy5IYyhLcmMpfHxDY2IoREQodk5iKGEsKE55YygpLCR3YykpKSkpe2QzYyhiLHFOYyk7Yy5IYyhMcmMpJiZkM2MoYixyTmMpfWMuSGMoSHJjKSYmZDNjKGIsbk5jKTtjLkhjKE5yYykmJmQzYyhiLHNOYyk7Yy5IYyhKcmMpJiZkM2MoYixwTmMpO2MuSGMoRXJjKSYmZDNjKGIsbE5jKTtjLkhjKEdyYykmJmQzYyhiLG1OYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBJaGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2Q9YS5kO2Y9Yi5kO2g9ZCtmO2k9YS5lIT1iLmU/LTE6MTtpZihoPT0yKXtrPUliYih4YmIoYS5hWzBdLFlqZSkseGJiKGIuYVswXSxZamUpKTttPVRiYihrKTtsPVRiYihQYmIoaywzMikpO3JldHVybiBsPT0wP25ldyBVZ2IoaSxtKTpuZXcgVmdiKGksMixPQyhHQyhXRCwxKSxvamUsMjUsMTUsW20sbF0pKX1jPWEuYTtlPWIuYTtnPUtDKFdELG9qZSwyNSxoLDE1LDEpO0ZoYihjLGQsZSxmLGcpO2o9bmV3IFZnYihpLGgsZyk7SmdiKGopO3JldHVybiBqfVxuZnVuY3Rpb24gR3diKGEsYixjLGQpe3ZhciBlLGY7aWYoIWIpe3JldHVybiBjfWVsc2V7ZT1hLmEudWUoYy5kLGIuZCk7aWYoZT09MCl7ZC5kPWlqYihiLGMuZSk7ZC5iPXRydWU7cmV0dXJuIGJ9Zj1lPDA/MDoxO2IuYVtmXT1Hd2IoYSxiLmFbZl0sYyxkKTtpZihId2IoYi5hW2ZdKSl7aWYoSHdiKGIuYVsxLWZdKSl7Yi5iPXRydWU7Yi5hWzBdLmI9ZmFsc2U7Yi5hWzFdLmI9ZmFsc2V9ZWxzZXtId2IoYi5hW2ZdLmFbZl0pPyhiPU93YihiLDEtZikpOkh3YihiLmFbZl0uYVsxLWZdKSYmKGI9TndiKGIsMS1mKSl9fX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHdIYihhLGIsYyl7dmFyIGQsZSxmLGc7ZT1hLmk7ZD1hLm47dkhiKGEsKGdIYigpLGRIYiksZS5jK2QuYixjKTt2SGIoYSxmSGIsZS5jK2UuYi1kLmMtY1syXSxjKTtnPWUuYi1kLmItZC5jO2lmKGNbMF0+MCl7Y1swXSs9YS5kO2ctPWNbMF19aWYoY1syXT4wKXtjWzJdKz1hLmQ7Zy09Y1syXX1mPSR3bmQuTWF0aC5tYXgoMCxnKTtjWzFdPSR3bmQuTWF0aC5tYXgoY1sxXSxnKTt2SGIoYSxlSGIsZS5jK2QuYitjWzBdLShjWzFdLWcpLzIsYyk7aWYoYj09ZUhiKXthLmMuYj1mO2EuYy5jPWUuYytkLmIrKGYtZykvMn19XG5mdW5jdGlvbiBBWWIoKXt0aGlzLmM9S0MoVUQsVmplLDI1LChVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKS5sZW5ndGgsMTUsMSk7dGhpcy5iPUtDKFVELFZqZSwyNSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pLmxlbmd0aCwxNSwxKTt0aGlzLmE9S0MoVUQsVmplLDI1LE9DKEdDKEYxLDEpLGJuZSw2MSwwLFtTY2QsQWNkLHpjZCxSY2QsVGNkXSkubGVuZ3RoLDE1LDEpO3psYih0aGlzLmMsUGplKTt6bGIodGhpcy5iLFFqZSk7emxiKHRoaXMuYSxRamUpfVxuZnVuY3Rpb24gVWZlKGEsYixjKXt2YXIgZCxlLGYsZztpZihiPD1jKXtlPWI7Zj1jfWVsc2V7ZT1jO2Y9Yn1kPTA7aWYoYS5iPT1udWxsKXthLmI9S0MoV0Qsb2plLDI1LDIsMTUsMSk7YS5iWzBdPWU7YS5iWzFdPWY7YS5jPXRydWV9ZWxzZXtkPWEuYi5sZW5ndGg7aWYoYS5iW2QtMV0rMT09ZSl7YS5iW2QtMV09ZjtyZXR1cm59Zz1LQyhXRCxvamUsMjUsZCsyLDE1LDEpOyRmYihhLmIsMCxnLDAsZCk7YS5iPWc7YS5iW2QtMV0+PWUmJihhLmM9ZmFsc2UsYS5hPWZhbHNlKTthLmJbZCsrXT1lO2EuYltkXT1mO2EuY3x8WWZlKGEpfX1cbmZ1bmN0aW9uIGluYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aj1iLmQ7YS5hPW5ldyBTa2Ioai5jLmxlbmd0aCk7YS5jPW5ldyBMcWI7Zm9yKGg9bmV3IG9sYihqKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTAxKTtmPW5ldyB1T2MobnVsbCk7RWtiKGEuYSxmKTtSaGIoYS5jLGcsZil9YS5iPW5ldyBMcWI7Z25jKGEsYik7Zm9yKGQ9MDtkPGouYy5sZW5ndGgtMTtkKyspe2k9QkQoSWtiKGIuZCxkKSwxMDEpO2ZvcihlPWQrMTtlPGouYy5sZW5ndGg7ZSsrKXtqbmMoYSxpLEJEKElrYihiLmQsZSksMTAxKSxjKX19fVxuZnVuY3Rpb24geVNjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIVFxKGIpKXtpPVVkZChjLChKRChiLDE0KT9CRChiLDE0KS5nYygpOnNyKGIuS2MoKSkpL2EuYXwwKTtPZGQoaSxYcWUsMSk7aD1uZXcgQlNjO2c9MDtmb3IoZj1iLktjKCk7Zi5PYigpOyl7ZD1CRChmLlBiKCksODYpO2g9cGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW2gsbmV3IFpSYyhkKV0pKTtnPGQuZi5iJiYoZz1kLmYuYil9Zm9yKGU9Yi5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDg2KTt5TmIoZCwobVRjKCksYlRjKSxnKX1RZGQoaSk7eVNjKGEsaCxjKX19XG5mdW5jdGlvbiBiSmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPVFqZTtoPShqMGIoKSxoMGIpO2ZvcihlPW5ldyBvbGIoYi5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTApO2Y9ZC5rO2lmKGYhPWgwYil7Zz1FRCh2TmIoZCwod3RjKCksYXRjKSkpO2lmKGc9PW51bGwpe2M9JHduZC5NYXRoLm1heChjLDApO2Qubi5iPWMraUJjKGEuYSxmLGgpfWVsc2V7ZC5uLmI9KHVDYihnKSxnKX19aT1pQmMoYS5hLGYsaCk7ZC5uLmI8YytpK2QuZC5kJiYoZC5uLmI9YytpK2QuZC5kKTtjPWQubi5iK2Quby5iK2QuZC5hO2g9Zn19XG5mdW5jdGlvbiB1UWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtmPWl0ZChiLGZhbHNlLGZhbHNlKTtqPW9mZChmKTtsPUVkYihFRChoa2QoYiwoQ1BiKCksdlBiKSkpKTtlPXNRYihqLGwrYS5hKTtrPW5ldyBYT2IoZSk7dE5iKGssYik7UmhiKGEuYixiLGspO2MuY1tjLmMubGVuZ3RoXT1rO2k9KCFiLm4mJihiLm49bmV3IGNVZChEMixiLDEsNykpLGIubik7Zm9yKGg9bmV3IEZ5ZChpKTtoLmUhPWguaS5nYygpOyl7Zz1CRChEeWQoaCksMTM3KTtkPXdRYihhLGcsdHJ1ZSwwLDApO2MuY1tjLmMubGVuZ3RoXT1kfXJldHVybiBrfVxuZnVuY3Rpb24gSlZjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrOyEhYS5kJiZhLmQubGcoZSk7Zj1CRChlLlhiKDApLDMzKTtpZihIVmMoYSxjLGYsZmFsc2UpKXtyZXR1cm4gdHJ1ZX1nPUJEKGUuWGIoZS5nYygpLTEpLDMzKTtpZihIVmMoYSxkLGcsdHJ1ZSkpe3JldHVybiB0cnVlfWlmKENWYyhhLGUpKXtyZXR1cm4gdHJ1ZX1mb3Ioaz1lLktjKCk7ay5PYigpOyl7aj1CRChrLlBiKCksMzMpO2ZvcihpPWIuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwzMyk7aWYoQlZjKGEsaixoKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBxaWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO209Yi5jLmxlbmd0aDtsPShqPWEuWWcoYyksQkQoaj49MD9hLl9nKGosZmFsc2UsdHJ1ZSk6c2lkKGEsYyxmYWxzZSksNTgpKTtuOmZvcihmPWwuS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSw1Nik7Zm9yKGs9MDtrPG07KytrKXtnPSh0Q2IoayxiLmMubGVuZ3RoKSxCRChiLmNba10sNzIpKTtpPWcuZGQoKTtoPWcuYWsoKTtkPWUuYmgoaCxmYWxzZSk7aWYoaT09bnVsbD9kIT1udWxsOiFwYihpLGQpKXtjb250aW51ZSBufX1yZXR1cm4gZX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFY2YihhLGIsYyxkKXt2YXIgZSxmLGcsaDtlPUJEKFlfYihiLChVY2QoKSxUY2QpKS5LYygpLlBiKCksMTEpO2Y9QkQoWV9iKGIsemNkKS5LYygpLlBiKCksMTEpO2ZvcihoPW5ldyBvbGIoYS5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTEpO3doaWxlKGcuZS5jLmxlbmd0aCE9MCl7UlpiKEJEKElrYihnLmUsMCksMTcpLGUpfXdoaWxlKGcuZy5jLmxlbmd0aCE9MCl7UVpiKEJEKElrYihnLmcsMCksMTcpLGYpfX1jfHx5TmIoYiwod3RjKCksVnNjKSxudWxsKTtkfHx5TmIoYiwod3RjKCksV3NjKSxudWxsKX1cbmZ1bmN0aW9uIGl0ZChhLGIsYyl7dmFyIGQsZTtpZigoIWEuYSYmKGEuYT1uZXcgY1VkKEEyLGEsNiw2KSksYS5hKS5pPT0wKXtyZXR1cm4gZXRkKGEpfWVsc2V7ZD1CRChxdWQoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSksMCksMjAyKTtpZihiKXtVeGQoKCFkLmEmJihkLmE9bmV3IHhNZCh5MixkLDUpKSxkLmEpKTtvbWQoZCwwKTtwbWQoZCwwKTtobWQoZCwwKTtpbWQoZCwwKX1pZihjKXtlPSghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpO3doaWxlKGUuaT4xKXtYeGQoZSxlLmktMSl9fXJldHVybiBkfX1cbmZ1bmN0aW9uIFoyYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO09kZChiLCdDb21tZW50IHBvc3QtcHJvY2Vzc2luZycsMSk7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyOSk7ZD1uZXcgUmtiO2ZvcihoPW5ldyBvbGIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTApO2k9QkQodk5iKGcsKHd0YygpLHZ0YykpLDE1KTtjPUJEKHZOYihnLHRzYyksMTUpO2lmKCEhaXx8ISFjKXskMmIoZyxpLGMpOyEhaSYmR2tiKGQsaSk7ISFjJiZHa2IoZCxjKX19R2tiKGUuYSxkKX1RZGQoYil9XG5mdW5jdGlvbiBFYWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPW5ldyBqa2I7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyOSk7aT10cnVlO2Q9MDtmb3IoaD1uZXcgb2xiKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTtzd2l0Y2goZy5rLmcpe2Nhc2UgNDorK2Q7Y2FzZSAxOlhqYihjLGcpO2JyZWFrO2Nhc2UgMDpHYWMoZyxiKTtkZWZhdWx0OmMuYj09Yy5jfHxGYWMoYyxkLGksZmFsc2UsYik7aT1mYWxzZTtkPTA7fX1jLmI9PWMuY3x8RmFjKGMsZCxpLHRydWUsYil9fVxuZnVuY3Rpb24gRWJjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7ZT1uZXcgUmtiO2ZvcihjPTA7Yzw9YS5pO2MrKyl7ZD1uZXcgSDFiKGIpO2QucD1hLmktYztlLmNbZS5jLmxlbmd0aF09ZH1mb3IoaD1uZXcgb2xiKGEubyk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTskX2IoZyxCRChJa2IoZSxhLmktYS5mW2cucF0pLDI5KSl9Zj1uZXcgb2xiKGUpO3doaWxlKGYuYTxmLmMuYy5sZW5ndGgpe2k9QkQobWxiKGYpLDI5KTtpLmEuYy5sZW5ndGg9PTAmJm5sYihmKX1iLmIuYz1LQyhTSSxVaGUsMSwwLDUsMSk7R2tiKGIuYixlKX1cbmZ1bmN0aW9uIEtIYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtjPTA7Zm9yKGg9bmV3IG9sYihiKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTEpO0FIYyhhLmIsYS5kW2cucF0pO2ZvcihlPW5ldyBiMWIoZy5iKTtsbGIoZS5hKXx8bGxiKGUuYik7KXtkPUJEKGxsYihlLmEpP21sYihlLmEpOm1sYihlLmIpLDE3KTtmPWFJYyhhLGc9PWQuYz9kLmQ6ZC5jKTtpZihmPmEuZFtnLnBdKXtjKz16SGMoYS5iLGYpO1dqYihhLmEsbWViKGYpKX19d2hpbGUoIWFrYihhLmEpKXt4SGMoYS5iLEJEKGZrYihhLmEpLDE5KS5hKX19cmV0dXJuIGN9XG5mdW5jdGlvbiBvMmMoYSxiLGMpe3ZhciBkLGUsZixnO2Y9KCFiLmEmJihiLmE9bmV3IGNVZChFMixiLDEwLDExKSksYi5hKS5pO2ZvcihlPW5ldyBGeWQoKCFiLmEmJihiLmE9bmV3IGNVZChFMixiLDEwLDExKSksYi5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDMzKTsoIWQuYSYmKGQuYT1uZXcgY1VkKEUyLGQsMTAsMTEpKSxkLmEpLmk9PTB8fChmKz1vMmMoYSxkLGZhbHNlKSl9aWYoYyl7Zz1Yb2QoYik7d2hpbGUoZyl7Zis9KCFnLmEmJihnLmE9bmV3IGNVZChFMixnLDEwLDExKSksZy5hKS5pO2c9WG9kKGcpfX1yZXR1cm4gZn1cbmZ1bmN0aW9uIFh4ZChhLGIpe3ZhciBjLGQsZSxmO2lmKGEuZWooKSl7ZD1udWxsO2U9YS5maigpO2EuaWooKSYmKGQ9YS5raihhLnBpKGIpLG51bGwpKTtjPWEuWmkoNCxmPXR1ZChhLGIpLG51bGwsYixlKTtpZihhLmJqKCkmJmYhPW51bGwpe2Q9YS5kaihmLGQpO2lmKCFkKXthLiRpKGMpfWVsc2V7ZC5FaShjKTtkLkZpKCl9fWVsc2V7aWYoIWQpe2EuJGkoYyl9ZWxzZXtkLkVpKGMpO2QuRmkoKX19cmV0dXJuIGZ9ZWxzZXtmPXR1ZChhLGIpO2lmKGEuYmooKSYmZiE9bnVsbCl7ZD1hLmRqKGYsbnVsbCk7ISFkJiZkLkZpKCl9cmV0dXJuIGZ9fVxuZnVuY3Rpb24gVUtiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2o9YS5hO2I9bmV3IFRxYjtpPTA7Zm9yKGQ9bmV3IG9sYihhLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyMjIpO2s9MDtrdGIoYy5iLG5ldyBYS2IpO2ZvcihnPUpzYihjLmIsMCk7Zy5iIT1nLmQuYzspe2Y9QkQoWHNiKGcpLDIyMik7aWYoYi5hLl9iKGYpKXtlPWMuYztoPWYuYztrPGguZCtoLmEraiYmaytlLmEraj5oLmQmJihrPWguZCtoLmErail9fWMuYy5kPWs7Yi5hLnpjKGMsYik7aT0kd25kLk1hdGgubWF4KGksYy5jLmQrYy5jLmEpfXJldHVybiBpfVxuZnVuY3Rpb24gT3JjKCl7T3JjPWNjYjtGcmM9bmV3IFByYygnQ09NTUVOVFMnLDApO0hyYz1uZXcgUHJjKCdFWFRFUk5BTF9QT1JUUycsMSk7SXJjPW5ldyBQcmMoJ0hZUEVSRURHRVMnLDIpO0pyYz1uZXcgUHJjKCdIWVBFUk5PREVTJywzKTtLcmM9bmV3IFByYygnTk9OX0ZSRUVfUE9SVFMnLDQpO0xyYz1uZXcgUHJjKCdOT1JUSF9TT1VUSF9QT1JUUycsNSk7TnJjPW5ldyBQcmMoV25lLDYpO0VyYz1uZXcgUHJjKCdDRU5URVJfTEFCRUxTJyw3KTtHcmM9bmV3IFByYygnRU5EX0xBQkVMUycsOCk7TXJjPW5ldyBQcmMoJ1BBUlRJVElPTlMnLDkpfVxuZnVuY3Rpb24gZ1ZjKGEpe3ZhciBiLGMsZCxlLGY7ZT1uZXcgUmtiO2I9bmV3IFZxYigoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtmb3IoZD1uZXcgU3IodXIoX3NkKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksNzkpO2lmKCFKRChxdWQoKCFjLmImJihjLmI9bmV3IHk1ZCh6MixjLDQsNykpLGMuYiksMCksMTg2KSl7Zj1hdGQoQkQocXVkKCghYy5jJiYoYy5jPW5ldyB5NWQoejIsYyw1LDgpKSxjLmMpLDApLDgyKSk7Yi5hLl9iKGYpfHwoZS5jW2UuYy5sZW5ndGhdPWYsdHJ1ZSl9fXJldHVybiBlfVxuZnVuY3Rpb24gZlZjKGEpe3ZhciBiLGMsZCxlLGYsZztmPW5ldyBUcWI7Yj1uZXcgVnFiKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO2ZvcihlPW5ldyBTcih1cihfc2QoYSkuYS5LYygpLG5ldyBTcSkpO1FyKGUpOyl7ZD1CRChScihlKSw3OSk7aWYoIUpEKHF1ZCgoIWQuYiYmKGQuYj1uZXcgeTVkKHoyLGQsNCw3KSksZC5iKSwwKSwxODYpKXtnPWF0ZChCRChxdWQoKCFkLmMmJihkLmM9bmV3IHk1ZCh6MixkLDUsOCkpLGQuYyksMCksODIpKTtiLmEuX2IoZyl8fChjPWYuYS56YyhnLGYpLGM9PW51bGwpfX1yZXR1cm4gZn1cbmZ1bmN0aW9uIHpBKGEsYixjLGQsZSl7aWYoZDwwKXtkPW9BKGEsZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtiamUsY2plLGRqZSxlamUsZmplLGdqZSxoamUsaWplLGpqZSxramUsbGplLG1qZV0pLGIpO2Q8MCYmKGQ9b0EoYSxlLE9DKEdDKFpJLDEpLG5pZSwyLDYsWydKYW4nLCdGZWInLCdNYXInLCdBcHInLGZqZSwnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ10pLGIpKTtpZihkPDApe3JldHVybiBmYWxzZX1jLms9ZDtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGQ+MCl7Yy5rPWQtMTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBCQShhLGIsYyxkLGUpe2lmKGQ8MCl7ZD1vQShhLGUsT0MoR0MoWkksMSksbmllLDIsNixbYmplLGNqZSxkamUsZWplLGZqZSxnamUsaGplLGlqZSxqamUsa2plLGxqZSxtamVdKSxiKTtkPDAmJihkPW9BKGEsZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxmamUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKSxiKSk7aWYoZDwwKXtyZXR1cm4gZmFsc2V9Yy5rPWQ7cmV0dXJuIHRydWV9ZWxzZSBpZihkPjApe2Muaz1kLTE7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gREEoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqO2g9MzI7aWYoZDwwKXtpZihiWzBdPj1hLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWg9YmZiKGEsYlswXSk7aWYoaCE9NDMmJmghPTQ1KXtyZXR1cm4gZmFsc2V9KytiWzBdO2Q9ckEoYSxiKTtpZihkPDApe3JldHVybiBmYWxzZX1oPT00NSYmKGQ9LWQpfWlmKGg9PTMyJiZiWzBdLWM9PTImJmUuYj09Mil7aT1uZXcgZUI7aj1pLnEuZ2V0RnVsbFllYXIoKS1uamUrbmplLTgwO2c9aiUxMDA7Zi5hPWQ9PWc7ZCs9KGovMTAwfDApKjEwMCsoZDxnPzEwMDowKX1mLnA9ZDtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIEwxYihhLGIpe3ZhciBjLGQsZSxmLGc7aWYoIVhvZChhKSl7cmV0dXJufWc9QkQodk5iKGIsKE55YygpLEZ4YykpLDE3NCk7UEQoaGtkKGEsVnhjKSk9PT1QRCgoZGNkKCksY2NkKSkmJmprZChhLFZ4YyxiY2QpO2Q9KFBnZCgpLG5ldyBiaGQoWG9kKGEpKSk7Zj1uZXcgaGhkKCFYb2QoYSk/bnVsbDpuZXcgYmhkKFhvZChhKSksYSk7ZT1QR2IoZCxmLGZhbHNlLHRydWUpO3JxYihnLCh0ZGQoKSxwZGQpKTtjPUJEKHZOYihiLEh4YyksOCk7Yy5hPSR3bmQuTWF0aC5tYXgoZS5hLGMuYSk7Yy5iPSR3bmQuTWF0aC5tYXgoZS5iLGMuYil9XG5mdW5jdGlvbiBQYWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtmb3IoZz1CRCh2TmIoYSwod3RjKCksTHNjKSksMTUpLktjKCk7Zy5PYigpOyl7Zj1CRChnLlBiKCksMTApO3N3aXRjaChCRCh2TmIoZiwoTnljKCksbXhjKSksMTYzKS5nKXtjYXNlIDI6JF9iKGYsYik7YnJlYWs7Y2FzZSA0OiRfYihmLGMpO31mb3IoZT1uZXcgU3IodXIoT19iKGYpLmEuS2MoKSxuZXcgU3EpKTtRcihlKTspe2Q9QkQoUnIoZSksMTcpO2lmKCEhZC5jJiYhIWQuZCl7Y29udGludWV9aD0hZC5kO2k9QkQodk5iKGQsY3RjKSwxMSk7aD9SWmIoZCxpKTpRWmIoZCxpKX19fVxuZnVuY3Rpb24gQWxjKCl7QWxjPWNjYjt0bGM9bmV3IEJsYyh4bGUsMCwoVWNkKCksQWNkKSxBY2QpO3dsYz1uZXcgQmxjKHpsZSwxLFJjZCxSY2QpO3NsYz1uZXcgQmxjKHlsZSwyLHpjZCx6Y2QpO3psYz1uZXcgQmxjKEFsZSwzLFRjZCxUY2QpO3ZsYz1uZXcgQmxjKCdOT1JUSF9XRVNUX0NPUk5FUicsNCxUY2QsQWNkKTt1bGM9bmV3IEJsYygnTk9SVEhfRUFTVF9DT1JORVInLDUsQWNkLHpjZCk7eWxjPW5ldyBCbGMoJ1NPVVRIX1dFU1RfQ09STkVSJyw2LFJjZCxUY2QpO3hsYz1uZXcgQmxjKCdTT1VUSF9FQVNUX0NPUk5FUicsNyx6Y2QsUmNkKX1cbmZ1bmN0aW9uIGk2Yygpe2k2Yz1jY2I7aDZjPU9DKEdDKFhELDEpLFNqZSwyNSwxNCxbMSwxLDIsNiwyNCwxMjAsNzIwLDUwNDAsNDAzMjAsMzYyODgwLDM2Mjg4MDAsMzk5MTY4MDAsNDc5MDAxNjAwLDYyMjcwMjA4MDAsODcxNzgyOTEyMDAsMTMwNzY3NDM2ODAwMCx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSk7JHduZC5NYXRoLnBvdygyLC02NSl9XG5mdW5jdGlvbiBQY2MoYSxiKXt2YXIgYyxkLGUsZixnO2lmKGEuYy5sZW5ndGg9PTApe3JldHVybiBuZXcgdmdkKG1lYigwKSxtZWIoMCkpfWM9KHRDYigwLGEuYy5sZW5ndGgpLEJEKGEuY1swXSwxMSkpLmo7Zz0wO2Y9Yi5nO2Q9Yi5nKzE7d2hpbGUoZzxhLmMubGVuZ3RoLTEmJmMuZzxmKXsrK2c7Yz0odENiKGcsYS5jLmxlbmd0aCksQkQoYS5jW2ddLDExKSkuan1lPWc7d2hpbGUoZTxhLmMubGVuZ3RoLTEmJmMuZzxkKXsrK2U7Yz0odENiKGcsYS5jLmxlbmd0aCksQkQoYS5jW2ddLDExKSkuan1yZXR1cm4gbmV3IHZnZChtZWIoZyksbWViKGUpKX1cbmZ1bmN0aW9uIFI5YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zj1iLmMubGVuZ3RoO2c9KHRDYihjLGIuYy5sZW5ndGgpLEJEKGIuY1tjXSwyODYpKTtoPWcuYS5vLmE7bD1nLmM7bT0wO2ZvcihqPWcuYztqPD1nLmY7aisrKXtpZihoPD1hLmFbal0pe3JldHVybiBqfWs9YS5hW2pdO2k9bnVsbDtmb3IoZT1jKzE7ZTxmO2UrKyl7ZD0odENiKGUsYi5jLmxlbmd0aCksQkQoYi5jW2VdLDI4NikpO2QuYzw9aiYmZC5mPj1qJiYoaT1kKX0hIWkmJihrPSR3bmQuTWF0aC5tYXgoayxpLmEuby5hKSk7aWYoaz5tKXtsPWo7bT1rfX1yZXR1cm4gbH1cbmZ1bmN0aW9uIG9kZShhLGIsYyl7dmFyIGQsZSxmO2EuZT1jO2EuZD0wO2EuYj0wO2EuZj0xO2EuaT1iOyhhLmUmMTYpPT0xNiYmKGEuaT1YZWUoYS5pKSk7YS5qPWEuaS5sZW5ndGg7bmRlKGEpO2Y9cmRlKGEpO2lmKGEuZCE9YS5qKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksc3VlKSkpKTtpZihhLmcpe2ZvcihkPTA7ZDxhLmcuYS5jLmxlbmd0aDtkKyspe2U9QkQoVXZiKGEuZyxkKSw1ODQpO2lmKGEuZjw9ZS5hKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksdHVlKSkpKX1hLmcuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKX1yZXR1cm4gZn1cbmZ1bmN0aW9uIF9QZChhLGIpe3ZhciBjLGQsZTtpZihiPT1udWxsKXtmb3IoZD0oIWEuYSYmKGEuYT1uZXcgY1VkKGc1LGEsOSw1KSksbmV3IEZ5ZChhLmEpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksNjc4KTtlPWMuYztpZigoZT09bnVsbD9jLnpiOmUpPT1udWxsKXtyZXR1cm4gY319fWVsc2V7Zm9yKGQ9KCFhLmEmJihhLmE9bmV3IGNVZChnNSxhLDksNSkpLG5ldyBGeWQoYS5hKSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDY3OCk7aWYoZGZiKGIsKGU9Yy5jLGU9PW51bGw/Yy56YjplKSkpe3JldHVybiBjfX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBLSWIoYSxiKXt2YXIgYztjPW51bGw7c3dpdGNoKGIuZyl7Y2FzZSAxOmEuZS5YZSgoWTljKCksbzljKSkmJihjPUJEKGEuZS5XZShvOWMpLDI0OSkpO2JyZWFrO2Nhc2UgMzphLmUuWGUoKFk5YygpLHA5YykpJiYoYz1CRChhLmUuV2UocDljKSwyNDkpKTticmVhaztjYXNlIDI6YS5lLlhlKChZOWMoKSxuOWMpKSYmKGM9QkQoYS5lLldlKG45YyksMjQ5KSk7YnJlYWs7Y2FzZSA0OmEuZS5YZSgoWTljKCkscTljKSkmJihjPUJEKGEuZS5XZShxOWMpLDI0OSkpO30hYyYmKGM9QkQoYS5lLldlKChZOWMoKSxsOWMpKSwyNDkpKTtyZXR1cm4gY31cbmZ1bmN0aW9uIE9DYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO2IucD0xO2Y9Yi5jO2ZvcihsPVdfYihiLChLQWMoKSxJQWMpKS5LYygpO2wuT2IoKTspe2s9QkQobC5QYigpLDExKTtmb3IoZT1uZXcgb2xiKGsuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE3KTtqPWQuZC5pO2lmKGIhPWope2c9ai5jO2lmKGcucDw9Zi5wKXtoPWYucCsxO2lmKGg9PWMuYi5jLmxlbmd0aCl7aT1uZXcgSDFiKGMpO2kucD1oO0VrYihjLmIsaSk7JF9iKGosaSl9ZWxzZXtpPUJEKElrYihjLmIsaCksMjkpOyRfYihqLGkpfU9DYyhhLGosYyl9fX19fVxuZnVuY3Rpb24gWlhjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1jO2Y9MDtmb3IoaD1uZXcgb2xiKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwzMyk7amtkKGcsKFpXYygpLFNXYyksbWViKGUrKykpO2k9Z1ZjKGcpO2Q9JHduZC5NYXRoLmF0YW4yKGcuaitnLmYvMixnLmkrZy5nLzIpO2QrPWQ8MD9kcmU6MDtkPDAuNzg1Mzk4MTYzMzk3NDQ4M3x8ZD52cmU/T2tiKGksYS5iKTpkPD12cmUmJmQ+d3JlP09rYihpLGEuZCk6ZDw9d3JlJiZkPnhyZT9Pa2IoaSxhLmMpOmQ8PXhyZSYmT2tiKGksYS5hKTtmPVpYYyhhLGksZil9cmV0dXJuIGV9XG5mdW5jdGlvbiBIZ2IoKXtIZ2I9Y2NiO3ZhciBhO0NnYj1uZXcgVWdiKDEsMSk7RWdiPW5ldyBVZ2IoMSwxMCk7R2diPW5ldyBVZ2IoMCwwKTtCZ2I9bmV3IFVnYigtMSwxKTtEZ2I9T0MoR0MoY0osMSksbmllLDkxLDAsW0dnYixDZ2IsbmV3IFVnYigxLDIpLG5ldyBVZ2IoMSwzKSxuZXcgVWdiKDEsNCksbmV3IFVnYigxLDUpLG5ldyBVZ2IoMSw2KSxuZXcgVWdiKDEsNyksbmV3IFVnYigxLDgpLG5ldyBVZ2IoMSw5KSxFZ2JdKTtGZ2I9S0MoY0osbmllLDkxLDMyLDAsMSk7Zm9yKGE9MDthPEZnYi5sZW5ndGg7YSsrKXtGZ2JbYV09Z2hiKE5iYigxLGEpKX19XG5mdW5jdGlvbiBCOWIoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqO2g9IVdBYihKQWIoYS5PYygpLG5ldyBYeGIobmV3IEY5YikpKS5zZCgoRUFiKCksREFiKSk7Zz1hO2Y9PShlYWQoKSxkYWQpJiYoZz1KRChnLDE1Mik/a20oQkQoZywxNTIpKTpKRChnLDEzMSk/QkQoZywxMzEpLmE6SkQoZyw1NCk/bmV3IG92KGcpOm5ldyBkdihnKSk7Zm9yKGo9Zy5LYygpO2ouT2IoKTspe2k9QkQoai5QYigpLDcwKTtpLm4uYT1iLmE7aD8oaS5uLmI9Yi5iKyhkLmItaS5vLmIpLzIpOmU/KGkubi5iPWIuYik6KGkubi5iPWIuYitkLmItaS5vLmIpO2IuYSs9aS5vLmErY319XG5mdW5jdGlvbiBVT2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2U9KGQuYytkLmEpLzI7T3NiKGIuaik7RHNiKGIuaixlKTtPc2IoYy5lKTtEc2IoYy5lLGUpO2o9bmV3IGFQYztmb3IoaD1uZXcgb2xiKGEuZik7aC5hPGguYy5jLmxlbmd0aDspe2Y9QkQobWxiKGgpLDEyOSk7aT1mLmE7V09jKGosYixpKTtXT2MoaixjLGkpfWZvcihnPW5ldyBvbGIoYS5rKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTI5KTtpPWYuYjtXT2MoaixiLGkpO1dPYyhqLGMsaSl9ai5iKz0yO2ouYSs9UE9jKGIsYS5xKTtqLmErPVBPYyhhLnEsYyk7cmV0dXJuIGp9XG5mdW5jdGlvbiBGU2MoYSxiLGMpe3ZhciBkLGUsZixnLGg7aWYoIVFxKGIpKXtoPVVkZChjLChKRChiLDE0KT9CRChiLDE0KS5nYygpOnNyKGIuS2MoKSkpL2EuYXwwKTtPZGQoaCxYcWUsMSk7Zz1uZXcgSVNjO2Y9bnVsbDtmb3IoZT1iLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksODYpO2c9cGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW2csbmV3IFpSYyhkKV0pKTtpZihmKXt5TmIoZiwobVRjKCksaFRjKSxkKTt5TmIoZCxfU2MsZik7aWYoVlJjKGQpPT1WUmMoZikpe3lOYihmLGlUYyxkKTt5TmIoZCxhVGMsZil9fWY9ZH1RZGQoaCk7RlNjKGEsZyxjKX19XG5mdW5jdGlvbiBWSGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yz1hLmk7Yj1hLm47aD1jLmQ7YS5mPT0oRUliKCksQ0liKT8oaCs9KGMuYS1hLmUuYikvMik6YS5mPT1CSWImJihoKz1jLmEtYS5lLmIpO2ZvcihlPW5ldyBvbGIoYS5kKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTgxKTtnPWQucmYoKTtmPW5ldyBkN2M7Zi5iPWg7aCs9Zy5iK2EuYTtzd2l0Y2goYS5iLmcpe2Nhc2UgMDpmLmE9Yy5jK2IuYjticmVhaztjYXNlIDE6Zi5hPWMuYytiLmIrKGMuYi1nLmEpLzI7YnJlYWs7Y2FzZSAyOmYuYT1jLmMrYy5iLWIuYy1nLmE7fWQudGYoZil9fVxuZnVuY3Rpb24gWEhiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2M9YS5pO2I9YS5uO2g9Yy5jO2EuYj09KE5IYigpLEtIYik/KGgrPShjLmItYS5lLmEpLzIpOmEuYj09TUhiJiYoaCs9Yy5iLWEuZS5hKTtmb3IoZT1uZXcgb2xiKGEuZCk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE4MSk7Zz1kLnJmKCk7Zj1uZXcgZDdjO2YuYT1oO2grPWcuYSthLmE7c3dpdGNoKGEuZi5nKXtjYXNlIDA6Zi5iPWMuZCtiLmQ7YnJlYWs7Y2FzZSAxOmYuYj1jLmQrYi5kKyhjLmEtZy5iKS8yO2JyZWFrO2Nhc2UgMjpmLmI9Yy5kK2MuYS1iLmEtZy5iO31kLnRmKGYpfX1cbmZ1bmN0aW9uIEQ0YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2s9Yy5hLmM7Zz1jLmEuYytjLmEuYjtmPUJEKE9oYihjLmMsYiksNDU5KTtuPWYuZjtvPWYuYTtpPW5ldyBmN2MoayxuKTtsPW5ldyBmN2MoZyxvKTtlPWs7Yy5wfHwoZSs9YS5jKTtlKz1jLkYrYy52KmEuYjtqPW5ldyBmN2MoZSxuKTttPW5ldyBmN2MoZSxvKTtuN2MoYi5hLE9DKEdDKG0xLDEpLG5pZSw4LDAsW2ksal0pKTtoPWMuZC5hLmdjKCk+MTtpZihoKXtkPW5ldyBmN2MoZSxjLmIpO0RzYihiLmEsZCl9bjdjKGIuYSxPQyhHQyhtMSwxKSxuaWUsOCwwLFttLGxdKSl9XG5mdW5jdGlvbiBqZGQoYSl7cjRjKGEsbmV3IEUzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyxSc2UpLCdFTEsgUmFuZG9taXplcicpLCdEaXN0cmlidXRlcyB0aGUgbm9kZXMgcmFuZG9tbHkgb24gdGhlIHBsYW5lLCBsZWFkaW5nIHRvIHZlcnkgb2JmdXNjYXRpbmcgbGF5b3V0cy4gQ2FuIGJlIHVzZWZ1bCB0byBkZW1vbnN0cmF0ZSB0aGUgcG93ZXIgb2YgXCJyZWFsXCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IG1kZCkpKTtwNGMoYSxSc2UsYW1lLGZkZCk7cDRjKGEsUnNlLHdtZSwxNSk7cDRjKGEsUnNlLHltZSxtZWIoMCkpO3A0YyhhLFJzZSxfbGUsdG1lKX1cbmZ1bmN0aW9uIGhkZSgpe2hkZT1jY2I7dmFyIGEsYixjLGQsZSxmO2ZkZT1LQyhTRCx3dGUsMjUsMjU1LDE1LDEpO2dkZT1LQyhURCwkaWUsMjUsMTYsMTUsMSk7Zm9yKGI9MDtiPDI1NTtiKyspe2ZkZVtiXT0tMX1mb3IoYz01NztjPj00ODtjLS0pe2ZkZVtjXT1jLTQ4PDwyND4+MjR9Zm9yKGQ9NzA7ZD49NjU7ZC0tKXtmZGVbZF09ZC02NSsxMDw8MjQ+PjI0fWZvcihlPTEwMjtlPj05NztlLS0pe2ZkZVtlXT1lLTk3KzEwPDwyND4+MjR9Zm9yKGY9MDtmPDEwO2YrKylnZGVbZl09NDgrZiZhamU7Zm9yKGE9MTA7YTw9MTU7YSsrKWdkZVthXT02NSthLTEwJmFqZX1cbmZ1bmN0aW9uIEJWYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztoPWIuaS1hLmcvMjtpPWMuaS1hLmcvMjtqPWIuai1hLmcvMjtrPWMuai1hLmcvMjtmPWIuZythLmcvMjtnPWMuZythLmcvMjtkPWIuZithLmcvMjtlPWMuZithLmcvMjtpZihoPGkrZyYmaTxoJiZqPGsrZSYmazxqKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGk8aCtmJiZoPGkmJms8aitkJiZqPGspe3JldHVybiB0cnVlfWVsc2UgaWYoaDxpK2cmJmk8aCYmajxrJiZrPGorZCl7cmV0dXJuIHRydWV9ZWxzZSBpZihpPGgrZiYmaDxpJiZqPGsrZSYmazxqKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBOVGIoYSl7dmFyIGIsYyxkLGUsZjtlPUJEKHZOYihhLChOeWMoKSxGeGMpKSwyMSk7Zj1CRCh2TmIoYSxJeGMpLDIxKTtjPW5ldyBmN2MoYS5mLmErYS5kLmIrYS5kLmMsYS5mLmIrYS5kLmQrYS5kLmEpO2I9bmV3IGc3YyhjKTtpZihlLkhjKCh0ZGQoKSxwZGQpKSl7ZD1CRCh2TmIoYSxIeGMpLDgpO2lmKGYuSGMoKElkZCgpLEJkZCkpKXtkLmE8PTAmJihkLmE9MjApO2QuYjw9MCYmKGQuYj0yMCl9Yi5hPSR3bmQuTWF0aC5tYXgoYy5hLGQuYSk7Yi5iPSR3bmQuTWF0aC5tYXgoYy5iLGQuYil9Q2NiKEREKHZOYihhLEd4YykpKXx8T1RiKGEsYyxiKX1cbmZ1bmN0aW9uIE5KYyhhLGIpe3ZhciBjLGQsZSxmO2ZvcihmPVZfYihiLChVY2QoKSxSY2QpKS5LYygpO2YuT2IoKTspe2Q9QkQoZi5QYigpLDExKTtjPUJEKHZOYihkLCh3dGMoKSxndGMpKSwxMCk7ISFjJiZBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsMCksMC4xKSxhLmlbYi5wXS5kKSxhLmlbYy5wXS5hKSl9Zm9yKGU9Vl9iKGIsQWNkKS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDExKTtjPUJEKHZOYihkLCh3dGMoKSxndGMpKSwxMCk7ISFjJiZBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsMCksMC4xKSxhLmlbYy5wXS5kKSxhLmlbYi5wXS5hKSl9fVxuZnVuY3Rpb24gUUtkKGEpe3ZhciBiLGMsZCxlLGYsZztpZighYS5jKXtnPW5ldyB3TmQ7Yj1LS2Q7Zj1iLmEuemMoYSxiKTtpZihmPT1udWxsKXtmb3IoZD1uZXcgRnlkKFZLZChhKSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDg3KTtlPUtRZChjKTtKRChlLDg4KSYmeXRkKGcsUUtkKEJEKGUsMjYpKSk7d3RkKGcsYyl9Yi5hLkJjKGEpIT1udWxsO2IuYS5nYygpPT0wJiZ1bmRlZmluZWR9dE5kKGcpO3Z1ZChnKTthLmM9bmV3IG5OZCgoQkQocXVkKFpLZCgoTkZkKCksTUZkKS5vKSwxNSksMTgpLGcuaSksZy5nKTskS2QoYSkuYiY9LTMzfXJldHVybiBhLmN9XG5mdW5jdGlvbiBlZWUoYSl7dmFyIGI7aWYoYS5jIT0xMCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHV1ZSkpKSk7Yj1hLmE7c3dpdGNoKGIpe2Nhc2UgMTEwOmI9MTA7YnJlYWs7Y2FzZSAxMTQ6Yj0xMzticmVhaztjYXNlIDExNjpiPTk7YnJlYWs7Y2FzZSA5MjpjYXNlIDEyNDpjYXNlIDQ2OmNhc2UgOTQ6Y2FzZSA0NTpjYXNlIDYzOmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDEyMzpjYXNlIDEyNTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA5MTpjYXNlIDkzOmJyZWFrO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpO31yZXR1cm4gYn1cbmZ1bmN0aW9uIHFEKGEpe3ZhciBiLGMsZCxlLGY7aWYoYS5sPT0wJiZhLm09PTAmJmEuaD09MCl7cmV0dXJuICcwJ31pZihhLmg9PUdqZSYmYS5tPT0wJiZhLmw9PTApe3JldHVybiAnLTkyMjMzNzIwMzY4NTQ3NzU4MDgnfWlmKGEuaD4+MTkhPTApe3JldHVybiAnLScrcUQoaEQoYSkpfWM9YTtkPScnO3doaWxlKCEoYy5sPT0wJiZjLm09PTAmJmMuaD09MCkpe2U9UkMoSmplKTtjPVVDKGMsZSx0cnVlKTtiPScnK3BEKFFDKTtpZighKGMubD09MCYmYy5tPT0wJiZjLmg9PTApKXtmPTktYi5sZW5ndGg7Zm9yKDtmPjA7Zi0tKXtiPScwJytifX1kPWIrZH1yZXR1cm4gZH1cbmZ1bmN0aW9uIHhyYigpe2lmKCFPYmplY3QuY3JlYXRlfHwhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpe3JldHVybiBmYWxzZX12YXIgYT0nX19wcm90b19fJzt2YXIgYj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGJbYV0hPT11bmRlZmluZWQpe3JldHVybiBmYWxzZX12YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtpZihjLmxlbmd0aCE9MCl7cmV0dXJuIGZhbHNlfWJbYV09NDI7aWYoYlthXSE9PTQyKXtyZXR1cm4gZmFsc2V9aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBQZ2MoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yj1mYWxzZTtjPTA7Zm9yKGU9bmV3IG9sYihhLmQuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtkLnA9YysrO2ZvcihnPW5ldyBvbGIoZC5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTApOyFiJiYhUXEoT19iKGYpKSYmKGI9dHJ1ZSl9fWg9cXFiKChlYWQoKSxjYWQpLE9DKEdDKHQxLDEpLEtpZSwxMDMsMCxbYWFkLGJhZF0pKTtpZighYil7cnFiKGgsZGFkKTtycWIoaCxfOWMpfWEuYT1uZXcgbURiKGgpO1VoYihhLmYpO1VoYihhLmIpO1VoYihhLmUpO1VoYihhLmcpfVxuZnVuY3Rpb24gX1hiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7ZD1jLmM7ZT1jLmQ7aD1BMGIoYi5jKTtpPUEwYihiLmQpO2lmKGQ9PWIuYyl7aD1hWWIoYSxoLGUpO2k9YlliKGIuZCl9ZWxzZXtoPWJZYihiLmMpO2k9YVliKGEsaSxlKX1qPW5ldyB0N2MoYi5hKTtHc2IoaixoLGouYSxqLmEuYSk7R3NiKGosaSxqLmMuYixqLmMpO2c9Yi5jPT1kO2w9bmV3IEJZYjtmb3IoZj0wO2Y8ai5iLTE7KytmKXtrPW5ldyB2Z2QoQkQoVXQoaixmKSw4KSxCRChVdChqLGYrMSksOCkpO2cmJmY9PTB8fCFnJiZmPT1qLmItMj8obC5iPWspOkVrYihsLmEsayl9cmV0dXJuIGx9XG5mdW5jdGlvbiBPJGIoYSxiKXt2YXIgYyxkLGUsZjtmPWEuai5nLWIuai5nO2lmKGYhPTApe3JldHVybiBmfWM9QkQodk5iKGEsKE55YygpLFd4YykpLDE5KTtkPUJEKHZOYihiLFd4YyksMTkpO2lmKCEhYyYmISFkKXtlPWMuYS1kLmE7aWYoZSE9MCl7cmV0dXJuIGV9fXN3aXRjaChhLmouZyl7Y2FzZSAxOnJldHVybiBLZGIoYS5uLmEsYi5uLmEpO2Nhc2UgMjpyZXR1cm4gS2RiKGEubi5iLGIubi5iKTtjYXNlIDM6cmV0dXJuIEtkYihiLm4uYSxhLm4uYSk7Y2FzZSA0OnJldHVybiBLZGIoYi5uLmIsYS5uLmIpO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBaZGIoaW5lKSk7fX1cbmZ1bmN0aW9uIEc2YihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2lmKHNyKChENmIoKSxuZXcgU3IodXIoT19iKGIpLmEuS2MoKSxuZXcgU3EpKSkpPj1hLmEpe3JldHVybiAtMX1pZighRjZiKGIsYykpe3JldHVybiAtMX1pZihRcShCRChkLktiKGIpLDIwKSkpe3JldHVybiAxfWU9MDtmb3IoZz1CRChkLktiKGIpLDIwKS5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDE3KTtpPWYuYy5pPT1iP2YuZC5pOmYuYy5pO2g9RzZiKGEsaSxjLGQpO2lmKGg9PS0xKXtyZXR1cm4gLTF9ZT0kd25kLk1hdGgubWF4KGUsaCk7aWYoZT5hLmMtMSl7cmV0dXJuIC0xfX1yZXR1cm4gZSsxfVxuZnVuY3Rpb24gQnRkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKFBEKGIpPT09UEQoYSkpe3JldHVybiB0cnVlfWlmKCFKRChiLDE1KSl7cmV0dXJuIGZhbHNlfWQ9QkQoYiwxNSk7aD1hLmdjKCk7aWYoZC5nYygpIT1oKXtyZXR1cm4gZmFsc2V9Zz1kLktjKCk7aWYoYS5uaSgpKXtmb3IoYz0wO2M8aDsrK2Mpe2U9YS5raShjKTtmPWcuUGIoKTtpZihlPT1udWxsP2YhPW51bGw6IXBiKGUsZikpe3JldHVybiBmYWxzZX19fWVsc2V7Zm9yKGM9MDtjPGg7KytjKXtlPWEua2koYyk7Zj1nLlBiKCk7aWYoUEQoZSkhPT1QRChmKSl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiByQWQoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoYS5mPjApe2EucWooKTtpZihiIT1udWxsKXtmb3IoZj0wO2Y8YS5kLmxlbmd0aDsrK2Ype2M9YS5kW2ZdO2lmKGMpe2Q9QkQoYy5nLDM2Nyk7aD1jLmk7Zm9yKGc9MDtnPGg7KytnKXtlPWRbZ107aWYocGIoYixlLmRkKCkpKXtyZXR1cm4gdHJ1ZX19fX19ZWxzZXtmb3IoZj0wO2Y8YS5kLmxlbmd0aDsrK2Ype2M9YS5kW2ZdO2lmKGMpe2Q9QkQoYy5nLDM2Nyk7aD1jLmk7Zm9yKGc9MDtnPGg7KytnKXtlPWRbZ107aWYoUEQoYik9PT1QRChlLmRkKCkpKXtyZXR1cm4gdHJ1ZX19fX19fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGU2YihhLGIsYyl7dmFyIGQsZSxmLGc7T2RkKGMsJ09ydGhvZ29uYWxseSByb3V0aW5nIGhpZXJhcmNoaWNhbCBwb3J0IGVkZ2VzJywxKTthLmE9MDtkPWg2YihiKTtrNmIoYixkKTtqNmIoYSxiLGQpO2Y2YihiKTtlPUJEKHZOYihiLChOeWMoKSxWeGMpKSw5OCk7Zj1iLmI7ZDZiKCh0Q2IoMCxmLmMubGVuZ3RoKSxCRChmLmNbMF0sMjkpKSxlLGIpO2Q2YihCRChJa2IoZixmLmMubGVuZ3RoLTEpLDI5KSxlLGIpO2c9Yi5iO2I2YigodENiKDAsZy5jLmxlbmd0aCksQkQoZy5jWzBdLDI5KSkpO2I2YihCRChJa2IoZyxnLmMubGVuZ3RoLTEpLDI5KSk7UWRkKGMpfVxuZnVuY3Rpb24gam5kKGEpe3N3aXRjaChhKXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OntyZXR1cm4gYS00ODw8MjQ+PjI0fWNhc2UgOTc6Y2FzZSA5ODpjYXNlIDk5OmNhc2UgMTAwOmNhc2UgMTAxOmNhc2UgMTAyOntyZXR1cm4gYS05NysxMDw8MjQ+PjI0fWNhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOntyZXR1cm4gYS02NSsxMDw8MjQ+PjI0fWRlZmF1bHQ6e3Rocm93IHZiYihuZXcgT2ViKCdJbnZhbGlkIGhleGFkZWNpbWFsJykpfX19XG5mdW5jdGlvbiBBVWMoYSxiLGMpe3ZhciBkLGUsZixnO09kZChjLCdQcm9jZXNzb3Igb3JkZXIgbm9kZXMnLDIpO2EuYT1FZGIoRUQodk5iKGIsKEpUYygpLEhUYykpKSk7ZT1uZXcgUHNiO2ZvcihnPUpzYihiLmIsMCk7Zy5iIT1nLmQuYzspe2Y9QkQoWHNiKGcpLDg2KTtDY2IoREQodk5iKGYsKG1UYygpLGpUYykpKSkmJihHc2IoZSxmLGUuYy5iLGUuYyksdHJ1ZSl9ZD0oc0NiKGUuYiE9MCksQkQoZS5hLmEuYyw4NikpO3lVYyhhLGQpOyFjLmImJlJkZChjLDEpO0JVYyhhLGQsMC1FZGIoRUQodk5iKGQsKG1UYygpLGJUYykpKSkvMiwwKTshYy5iJiZSZGQoYywxKTtRZGQoYyl9XG5mdW5jdGlvbiByRmIoKXtyRmI9Y2NiO3FGYj1uZXcgc0ZiKCdTUElSQUwnLDApO2xGYj1uZXcgc0ZiKCdMSU5FX0JZX0xJTkUnLDEpO21GYj1uZXcgc0ZiKCdNQU5IQVRUQU4nLDIpO2tGYj1uZXcgc0ZiKCdKSVRURVInLDMpO29GYj1uZXcgc0ZiKCdRVUFEUkFOVFNfTElORV9CWV9MSU5FJyw0KTtwRmI9bmV3IHNGYignUVVBRFJBTlRTX01BTkhBVFRBTicsNSk7bkZiPW5ldyBzRmIoJ1FVQURSQU5UU19KSVRURVInLDYpO2pGYj1uZXcgc0ZiKCdDT01CSU5FX0xJTkVfQllfTElORV9NQU5IQVRUQU4nLDcpO2lGYj1uZXcgc0ZiKCdDT01CSU5FX0pJVFRFUl9NQU5IQVRUQU4nLDgpfVxuZnVuY3Rpb24gcm9jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtpPXdvYyhhLGMpO2o9d29jKGIsYyk7ZT1mYWxzZTt3aGlsZSghIWkmJiEhail7aWYoZHx8dW9jKGksaixjKSl7Zz13b2MoaSxjKTtoPXdvYyhqLGMpO3pvYyhiKTt6b2MoYSk7Zj1pLmM7c2JjKGksZmFsc2UpO3NiYyhqLGZhbHNlKTtpZihjKXtaX2IoYixqLnAsZik7Yi5wPWoucDtaX2IoYSxpLnArMSxmKTthLnA9aS5wfWVsc2V7Wl9iKGEsaS5wLGYpO2EucD1pLnA7Wl9iKGIsai5wKzEsZik7Yi5wPWoucH0kX2IoaSxudWxsKTskX2IoaixudWxsKTtpPWc7aj1oO2U9dHJ1ZX1lbHNle2JyZWFrfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIFZEYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2U9ZmFsc2U7Zj1mYWxzZTtmb3IoaD1uZXcgb2xiKGQuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDExKTtQRCh2TmIoZywod3RjKCksJHNjKSkpPT09UEQoYykmJihnLmcuYy5sZW5ndGg9PTA/Zy5lLmMubGVuZ3RoPT0wfHwoZT10cnVlKTooZj10cnVlKSl9aT0wO2UmJmVeZj8oaT1jLmo9PShVY2QoKSxBY2QpPy1hLmVbZC5jLnBdW2QucF06Yi1hLmVbZC5jLnBdW2QucF0pOmYmJmVeZj8oaT1hLmVbZC5jLnBdW2QucF0rMSk6ZSYmZiYmKGk9Yy5qPT0oVWNkKCksQWNkKT8wOmIvMik7cmV0dXJuIGl9XG5mdW5jdGlvbiBORWQoYSxiLGMsZCxlLGYsZyxoKXt2YXIgaSxqLGs7aT0wO2IhPW51bGwmJihpXj1MQ2IoYi50b0xvd2VyQ2FzZSgpKSk7YyE9bnVsbCYmKGlePUxDYihjKSk7ZCE9bnVsbCYmKGlePUxDYihkKSk7ZyE9bnVsbCYmKGlePUxDYihnKSk7aCE9bnVsbCYmKGlePUxDYihoKSk7Zm9yKGo9MCxrPWYubGVuZ3RoO2o8aztqKyspe2lePUxDYihmW2pdKX1hPyhpfD0yNTYpOihpJj0tMjU3KTtlPyhpfD0xNik6KGkmPS0xNyk7dGhpcy5mPWk7dGhpcy5pPWI9PW51bGw/bnVsbDoodUNiKGIpLGIpO3RoaXMuYT1jO3RoaXMuZD1kO3RoaXMuaj1mO3RoaXMuZz1nO3RoaXMuZT1ofVxuZnVuY3Rpb24gWF9iKGEsYixjKXt2YXIgZCxlO2U9bnVsbDtzd2l0Y2goYi5nKXtjYXNlIDE6ZT0oejBiKCksdTBiKTticmVhaztjYXNlIDI6ZT0oejBiKCksdzBiKTt9ZD1udWxsO3N3aXRjaChjLmcpe2Nhc2UgMTpkPSh6MGIoKSx2MGIpO2JyZWFrO2Nhc2UgMjpkPSh6MGIoKSx0MGIpO2JyZWFrO2Nhc2UgMzpkPSh6MGIoKSx4MGIpO2JyZWFrO2Nhc2UgNDpkPSh6MGIoKSx5MGIpO31yZXR1cm4gISFlJiYhIWQ/TnEoYS5qLG5ldyBZYihuZXcgYW1iKE9DKEdDKF9ELDEpLFVoZSwxNjksMCxbQkQoUWIoZSksMTY5KSxCRChRYihkKSwxNjkpXSkpKSk6KG1tYigpLG1tYigpLGptYil9XG5mdW5jdGlvbiB0NWIoYSl7dmFyIGIsYyxkO2I9QkQodk5iKGEsKE55YygpLEh4YykpLDgpO3lOYihhLEh4YyxuZXcgZjdjKGIuYixiLmEpKTtzd2l0Y2goQkQodk5iKGEsbXdjKSwyNDgpLmcpe2Nhc2UgMTp5TmIoYSxtd2MsKEY3YygpLEU3YykpO2JyZWFrO2Nhc2UgMjp5TmIoYSxtd2MsKEY3YygpLEE3YykpO2JyZWFrO2Nhc2UgMzp5TmIoYSxtd2MsKEY3YygpLEM3YykpO2JyZWFrO2Nhc2UgNDp5TmIoYSxtd2MsKEY3YygpLEQ3YykpO31pZigoIWEucT8obW1iKCksbW1iKCksa21iKTphLnEpLl9iKGF5Yykpe2M9QkQodk5iKGEsYXljKSw4KTtkPWMuYTtjLmE9Yy5iO2MuYj1kfX1cbmZ1bmN0aW9uIGpqYyhhLGIsYyxkLGUsZil7dGhpcy5iPWM7dGhpcy5kPWU7aWYoYT49Yi5sZW5ndGgpe3Rocm93IHZiYihuZXcgcWNiKCdHcmVlZHkgU3dpdGNoRGVjaWRlcjogRnJlZSBsYXllciBub3QgaW4gZ3JhcGguJykpfXRoaXMuYz1iW2FdO3RoaXMuZT1uZXcgZEljKGQpO1RIYyh0aGlzLmUsdGhpcy5jLChVY2QoKSxUY2QpKTt0aGlzLmk9bmV3IGRJYyhkKTtUSGModGhpcy5pLHRoaXMuYyx6Y2QpO3RoaXMuZj1uZXcgZWpjKHRoaXMuYyk7dGhpcy5hPSFmJiZlLmkmJiFlLnMmJnRoaXMuY1swXS5rPT0oajBiKCksZTBiKTt0aGlzLmEmJmhqYyh0aGlzLGEsYi5sZW5ndGgpfVxuZnVuY3Rpb24gaEtiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Y9IWEuQi5IYygoSWRkKCksemRkKSk7Zz1hLkIuSGMoQ2RkKTthLmE9bmV3IEZIYihnLGYsYS5jKTshIWEubiYmdV9iKGEuYS5uLGEubik7bEliKGEuZywoZ0hiKCksZUhiKSxhLmEpO2lmKCFiKXtkPW5ldyBtSWIoMSxmLGEuYyk7ZC5uLmE9YS5rO05wYihhLnAsKFVjZCgpLEFjZCksZCk7ZT1uZXcgbUliKDEsZixhLmMpO2Uubi5kPWEuaztOcGIoYS5wLFJjZCxlKTtoPW5ldyBtSWIoMCxmLGEuYyk7aC5uLmM9YS5rO05wYihhLnAsVGNkLGgpO2M9bmV3IG1JYigwLGYsYS5jKTtjLm4uYj1hLms7TnBiKGEucCx6Y2QsYyl9fVxuZnVuY3Rpb24gVmdjKGEpe3ZhciBiLGMsZDtiPUJEKHZOYihhLmQsKE55YygpLFN3YykpLDIxOCk7c3dpdGNoKGIuZyl7Y2FzZSAyOmM9TmdjKGEpO2JyZWFrO2Nhc2UgMzpjPShkPW5ldyBSa2IsTUFiKEpBYihOQWIoTEFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmQuYiwxNikpLG5ldyBTaGMpLG5ldyBVaGMpLG5ldyBXaGMpLG5ldyBlaGMpLG5ldyBZaGMoZCkpLGQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBaZGIoJ0NvbXBhY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgJytiKycgZWRnZXMuJykpO31VZ2MoYSxjKTtyZWIobmV3IFBpYihhLmcpLG5ldyBFaGMoYSkpfVxuZnVuY3Rpb24gYTJjKGEsYil7dmFyIGM7Yz1uZXcgek5iOyEhYiYmdE5iKGMsQkQoT2hiKGEuYSxDMiksOTQpKTtKRChiLDQ3MCkmJnROYihjLEJEKE9oYihhLmEsRzIpLDk0KSk7aWYoSkQoYiwzNTQpKXt0TmIoYyxCRChPaGIoYS5hLEQyKSw5NCkpO3JldHVybiBjfUpEKGIsODIpJiZ0TmIoYyxCRChPaGIoYS5hLHoyKSw5NCkpO2lmKEpEKGIsMjM5KSl7dE5iKGMsQkQoT2hiKGEuYSxFMiksOTQpKTtyZXR1cm4gY31pZihKRChiLDE4Nikpe3ROYihjLEJEKE9oYihhLmEsRjIpLDk0KSk7cmV0dXJuIGN9SkQoYiwzNTIpJiZ0TmIoYyxCRChPaGIoYS5hLEIyKSw5NCkpO3JldHVybiBjfVxuZnVuY3Rpb24gd1NiKCl7d1NiPWNjYjtvU2I9bmV3IE9zZCgoWTljKCksRDljKSxtZWIoMSkpO3VTYj1uZXcgT3NkKFQ5Yyw4MCk7dFNiPW5ldyBPc2QoTTljLDUpO2JTYj1uZXcgT3NkKHI4Yyx0bWUpO3BTYj1uZXcgT3NkKEU5YyxtZWIoMSkpO3NTYj1uZXcgT3NkKEg5YywoQmNiKCksdHJ1ZSkpO2xTYj1uZXcgcTBiKDUwKTtrU2I9bmV3IE9zZChmOWMsbFNiKTtkU2I9TzhjO21TYj10OWM7Y1NiPW5ldyBPc2QoQjhjLGZhbHNlKTtqU2I9ZTljO2lTYj1iOWM7aFNiPVk4YztnU2I9VzhjO25TYj14OWM7ZlNiPShTUmIoKSxMUmIpO3ZTYj1RUmI7ZVNiPUtSYjtxU2I9TlJiO3JTYj1QUmJ9XG5mdW5jdGlvbiBaWGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtpPW5ldyBqWWI7Zm9yKGg9bmV3IG9sYihhLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMCk7aWYoZy5rPT0oajBiKCksZTBiKSl7Y29udGludWV9WFhiKGksZyxuZXcgZDdjKTtmb3IoZj1uZXcgU3IodXIoVV9iKGcpLmEuS2MoKSxuZXcgU3EpKTtRcihmKTspe2U9QkQoUnIoZiksMTcpO2lmKGUuYy5pLms9PWUwYnx8ZS5kLmkuaz09ZTBiKXtjb250aW51ZX1mb3IoZD1Kc2IoZS5hLDApO2QuYiE9ZC5kLmM7KXtjPUJEKFhzYihkKSw4KTtiPWM7aFliKGksbmV3IGNXYihiLmEsYi5iKSl9fX1yZXR1cm4gaX1cbmZ1bmN0aW9uIEEwYygpe0EwYz1jY2I7ejBjPW5ldyBMc2QoUXJlKTt5MGM9KFIwYygpLFEwYyk7eDBjPW5ldyBOc2QoVnJlLHkwYyk7dzBjPShhMWMoKSxfMGMpO3YwYz1uZXcgTnNkKFJyZSx3MGMpO3UwYz0oTl9jKCksSl9jKTt0MGM9bmV3IE5zZChTcmUsdTBjKTtwMGM9bmV3IE5zZChUcmUsbnVsbCk7czBjPShDX2MoKSxBX2MpO3IwYz1uZXcgTnNkKFVyZSxzMGMpO2wwYz0oaV9jKCksaF9jKTtrMGM9bmV3IE5zZChXcmUsbDBjKTttMGM9bmV3IE5zZChYcmUsKEJjYigpLGZhbHNlKSk7bjBjPW5ldyBOc2QoWXJlLG1lYig2NCkpO28wYz1uZXcgTnNkKFpyZSx0cnVlKTtxMGM9Ql9jfVxuZnVuY3Rpb24gVG9jKGEpe3ZhciBiLGMsZCxlLGYsZztpZihhLmEhPW51bGwpe3JldHVybn1hLmE9S0Moc2JiLGRsZSwyNSxhLmMuYi5jLmxlbmd0aCwxNiwxKTthLmFbMF09ZmFsc2U7aWYod05iKGEuYywoTnljKCksTHljKSkpe2Q9QkQodk5iKGEuYyxMeWMpLDE1KTtmb3IoYz1kLktjKCk7Yy5PYigpOyl7Yj1CRChjLlBiKCksMTkpLmE7Yj4wJiZiPGEuYS5sZW5ndGgmJihhLmFbYl09ZmFsc2UpfX1lbHNle2c9bmV3IG9sYihhLmMuYik7Zy5hPGcuYy5jLmxlbmd0aCYmbWxiKGcpO2U9MTt3aGlsZShnLmE8Zy5jLmMubGVuZ3RoKXtmPUJEKG1sYihnKSwyOSk7YS5hW2UrK109V29jKGYpfX19XG5mdW5jdGlvbiBUTWQoYSxiKXt2YXIgYyxkLGUsZjtlPWEuYjtzd2l0Y2goYil7Y2FzZSAxOnthLmJ8PTE7YS5ifD00O2EuYnw9ODticmVha31jYXNlIDI6e2EuYnw9MjthLmJ8PTQ7YS5ifD04O2JyZWFrfWNhc2UgNDp7YS5ifD0xO2EuYnw9MjthLmJ8PTQ7YS5ifD04O2JyZWFrfWNhc2UgMzp7YS5ifD0xNjthLmJ8PTg7YnJlYWt9Y2FzZSAwOnthLmJ8PTMyO2EuYnw9MTY7YS5ifD04O2EuYnw9MTthLmJ8PTI7YS5ifD00O2JyZWFrfX1pZihhLmIhPWUmJiEhYS5jKXtmb3IoZD1uZXcgRnlkKGEuYyk7ZC5lIT1kLmkuZ2MoKTspe2Y9QkQoRHlkKGQpLDQ3Myk7Yz0kS2QoZik7WE1kKGMsYil9fX1cbmZ1bmN0aW9uIGNHYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvO2U9ZmFsc2U7Zm9yKGc9YixoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07Q2NiKChCY2IoKSxmLmU/dHJ1ZTpmYWxzZSkpJiYhQkQoSWtiKGEuYixmLmUucCksMjE0KS5zJiYoZT1lfChqPWYuZSxrPUJEKElrYihhLmIsai5wKSwyMTQpLGw9ay5lLG09U0ZjKGMsbC5sZW5ndGgpLG49bFttXVswXSxuLms9PShqMGIoKSxlMGIpPyhsW21dPWFHYyhmLGxbbV0sYz8oVWNkKCksVGNkKTooVWNkKCksemNkKSkpOmsuYy5UZihsLGMpLG89ZEdjKGEsayxjLGQpLGJHYyhrLmUsay5vLGMpLG8pKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIHAyYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zj0oIWIuYSYmKGIuYT1uZXcgY1VkKEUyLGIsMTAsMTEpKSxiLmEpLmk7Zm9yKGU9bmV3IEZ5ZCgoIWIuYSYmKGIuYT1uZXcgY1VkKEUyLGIsMTAsMTEpKSxiLmEpKTtlLmUhPWUuaS5nYygpOyl7ZD1CRChEeWQoZSksMzMpO2lmKFBEKGhrZChkLChZOWMoKSxKOGMpKSkhPT1QRCgoaGJkKCksZ2JkKSkpe2c9QkQoaGtkKGIsRjljKSwxNDkpO2M9QkQoaGtkKGQsRjljKSwxNDkpOyhnPT1jfHwhIWcmJkMzYyhnLGMpKSYmKCFkLmEmJihkLmE9bmV3IGNVZChFMixkLDEwLDExKSksZC5hKS5pIT0wJiYoZis9cDJjKGEsZCkpfX1yZXR1cm4gZn1cbmZ1bmN0aW9uIG5sYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtkPTA7aD0wO2ZvcihnPW5ldyBvbGIoYS5kKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTAxKTtlPUJEKEdBYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIoZi5qLDE2KSksbmV3IFlsYyksQnliKG5ldyBmemIsbmV3IGR6YixuZXcgRXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLER5YildKSkpLDE1KTtjPW51bGw7aWYoZDw9aCl7Yz0oVWNkKCksQWNkKTtkKz1lLmdjKCl9ZWxzZSBpZihoPGQpe2M9KFVjZCgpLFJjZCk7aCs9ZS5nYygpfWI9YztNQWIoTkFiKGUuT2MoKSxuZXcgTWxjKSxuZXcgT2xjKGIpKX19XG5mdW5jdGlvbiBta2MoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTthLmI9bmV3IF9pKG5ldyBhbWIoKFVjZCgpLE9DKEdDKEYxLDEpLGJuZSw2MSwwLFtTY2QsQWNkLHpjZCxSY2QsVGNkXSkpKSxuZXcgYW1iKChGa2MoKSxPQyhHQyh2ViwxKSxLaWUsMzYxLDAsW0VrYyxEa2MsQ2tjXSkpKSk7Zm9yKGc9T0MoR0MoRjEsMSksYm5lLDYxLDAsW1NjZCxBY2QsemNkLFJjZCxUY2RdKSxoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07Zm9yKGM9T0MoR0ModlYsMSksS2llLDM2MSwwLFtFa2MsRGtjLENrY10pLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtVaShhLmIsZixiLG5ldyBSa2IpfX19XG5mdW5jdGlvbiBLSmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtnPUJEKEJEKFFjKGEucixiKSwyMSksODQpO2g9YS51LkhjKChyY2QoKSxwY2QpKTtjPWEudS5IYyhtY2QpO2Q9YS51LkhjKGxjZCk7aj1hLnUuSGMocWNkKTtsPWEuQi5IYygoSWRkKCksSGRkKSk7az0hYyYmIWQmJihqfHxnLmdjKCk9PTIpO0hKYihhLGIpO2U9bnVsbDtpPW51bGw7aWYoaCl7Zj1nLktjKCk7ZT1CRChmLlBiKCksMTExKTtpPWU7d2hpbGUoZi5PYigpKXtpPUJEKGYuUGIoKSwxMTEpfWUuZC5iPTA7aS5kLmM9MDtrJiYhZS5hJiYoZS5kLmM9MCl9aWYobCl7TEpiKGcpO2lmKGgpe2UuZC5iPTA7aS5kLmM9MH19fVxuZnVuY3Rpb24gU0tiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7Zz1CRChCRChRYyhhLnIsYiksMjEpLDg0KTtoPWEudS5IYygocmNkKCkscGNkKSk7Yz1hLnUuSGMobWNkKTtkPWEudS5IYyhsY2QpO2k9YS51LkhjKHFjZCk7bD1hLkIuSGMoKElkZCgpLEhkZCkpO2o9IWMmJiFkJiYoaXx8Zy5nYygpPT0yKTtRS2IoYSxiKTtrPW51bGw7ZT1udWxsO2lmKGgpe2Y9Zy5LYygpO2s9QkQoZi5QYigpLDExMSk7ZT1rO3doaWxlKGYuT2IoKSl7ZT1CRChmLlBiKCksMTExKX1rLmQuZD0wO2UuZC5hPTA7aiYmIWsuYSYmKGsuZC5hPTApfWlmKGwpe1RLYihnKTtpZihoKXtrLmQuZD0wO2UuZC5hPTB9fX1cbmZ1bmN0aW9uIG9KYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztlPWIuaztpZihiLnA+PTApe3JldHVybiBmYWxzZX1lbHNle2IucD1jLmI7RWtiKGMuZSxiKX1pZihlPT0oajBiKCksZzBiKXx8ZT09aTBiKXtmb3IoZz1uZXcgb2xiKGIuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDExKTtmb3Ioaz0oZD1uZXcgb2xiKChuZXcgUjBiKGYpKS5hLmcpLG5ldyBVMGIoZCkpO2xsYihrLmEpOyl7aj1CRChtbGIoay5hKSwxNykuZDtoPWouaTtpPWguaztpZihiLmMhPWguYyl7aWYoaT09ZzBifHxpPT1pMGIpe2lmKG9KYyhhLGgsYykpe3JldHVybiB0cnVlfX19fX19cmV0dXJuIHRydWV9XG5mdW5jdGlvbiBnSmQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBFSWQoYSk7Yj1uZXcgSmZiKEVJZChhKSk7Yi5hKz0nIChjaGFuZ2VhYmxlOiAnO0ZmYihiLChhLkJiJnp0ZSkhPTApO2IuYSs9Jywgdm9sYXRpbGU6ICc7RmZiKGIsKGEuQmImRHZlKSE9MCk7Yi5hKz0nLCB0cmFuc2llbnQ6ICc7RmZiKGIsKGEuQmImUmplKSE9MCk7Yi5hKz0nLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiAnO0VmYihiLGEuaik7Yi5hKz0nLCB1bnNldHRhYmxlOiAnO0ZmYihiLChhLkJiJkN2ZSkhPTApO2IuYSs9JywgZGVyaXZlZDogJztGZmIoYiwoYS5CYiZvaWUpIT0wKTtiLmErPScpJztyZXR1cm4gYi5hfVxuZnVuY3Rpb24gQU9iKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtlPWVOYihhLmQpO2c9QkQodk5iKGEuYiwoQ1BiKCksd1BiKSksMTE2KTtoPWcuYitnLmM7aT1nLmQrZy5hO2s9ZS5kLmEqYS5lK2g7aj1lLmIuYSphLmYraTskT2IoYS5iLG5ldyBmN2MoayxqKSk7Zm9yKG09bmV3IG9sYihhLmcpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSw1NjIpO2I9bC5nLWUuYS5hO2M9bC5pLWUuYy5hO2Q9UDZjKFo2YyhuZXcgZjdjKGIsYyksbC5hLGwuYiksWTZjKGI3YyhSNmMoSE9iKGwuZSkpLGwuZCpsLmEsbC5jKmwuYiksLTAuNSkpO2Y9SU9iKGwuZSk7S09iKGwuZSxjN2MoZCxmKSl9fVxuZnVuY3Rpb24gdG1jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aT1LQyhVRCxuaWUsMTA0LChVY2QoKSxPQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pKS5sZW5ndGgsMCwyKTtmb3IoZj1PQyhHQyhGMSwxKSxibmUsNjEsMCxbU2NkLEFjZCx6Y2QsUmNkLFRjZF0pLGc9MCxoPWYubGVuZ3RoO2c8aDsrK2cpe2U9ZltnXTtpW2UuZ109S0MoVUQsVmplLDI1LGEuY1tlLmddLDE1LDEpfXZtYyhpLGEsQWNkKTt2bWMoaSxhLFJjZCk7c21jKGksYSxBY2QsYixjLGQpO3NtYyhpLGEsemNkLGIsYyxkKTtzbWMoaSxhLFJjZCxiLGMsZCk7c21jKGksYSxUY2QsYixjLGQpO3JldHVybiBpfVxuZnVuY3Rpb24gVUdjKGEsYixjKXtpZihNaGIoYS5hLGIpKXtpZihScWIoQkQoT2hiKGEuYSxiKSw1MyksYykpe3JldHVybiAxfX1lbHNle1JoYihhLmEsYixuZXcgVHFiKX1pZihNaGIoYS5hLGMpKXtpZihScWIoQkQoT2hiKGEuYSxjKSw1MyksYikpe3JldHVybiAtMX19ZWxzZXtSaGIoYS5hLGMsbmV3IFRxYil9aWYoTWhiKGEuYixiKSl7aWYoUnFiKEJEKE9oYihhLmIsYiksNTMpLGMpKXtyZXR1cm4gLTF9fWVsc2V7UmhiKGEuYixiLG5ldyBUcWIpfWlmKE1oYihhLmIsYykpe2lmKFJxYihCRChPaGIoYS5iLGMpLDUzKSxiKSl7cmV0dXJuIDF9fWVsc2V7UmhiKGEuYixjLG5ldyBUcWIpfXJldHVybiAwfVxuZnVuY3Rpb24geDJkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtpZihjPT1udWxsKXtlPUJEKGEuZywxMTkpO2ZvcihoPTA7aDxhLmk7KytoKXtnPWVbaF07aWYoZy5haygpPT1iKXtyZXR1cm4gVHhkKGEsZyxkKX19fWY9KFE2ZCgpLEJEKGIsNjYpLk9qKCk/QkQoYyw3Mik6UjZkKGIsYykpO2lmKG9pZChhLmUpKXtqPSFSMmQoYSxiKTtkPVN4ZChhLGYsZCk7aT1iLiRqKCk/SDJkKGEsMyxiLG51bGwsYyxNMmQoYSxiLGMsSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wKSxqKTpIMmQoYSwxLGIsYi56aigpLGMsLTEsaik7ZD9kLkVpKGkpOihkPWkpfWVsc2V7ZD1TeGQoYSxmLGQpfXJldHVybiBkfVxuZnVuY3Rpb24gQ0piKGEpe3ZhciBiLGMsZCxlLGYsZztpZihhLnE9PShkY2QoKSxfYmQpfHxhLnE9PSRiZCl7cmV0dXJufWU9YS5mLm4uZCtfR2IoQkQoTXBiKGEuYiwoVWNkKCksQWNkKSksMTI0KSkrYS5jO2I9YS5mLm4uYStfR2IoQkQoTXBiKGEuYixSY2QpLDEyNCkpK2EuYztkPUJEKE1wYihhLmIsemNkKSwxMjQpO2c9QkQoTXBiKGEuYixUY2QpLDEyNCk7Zj0kd25kLk1hdGgubWF4KDAsZC5uLmQtZSk7Zj0kd25kLk1hdGgubWF4KGYsZy5uLmQtZSk7Yz0kd25kLk1hdGgubWF4KDAsZC5uLmEtYik7Yz0kd25kLk1hdGgubWF4KGMsZy5uLmEtYik7ZC5uLmQ9ZjtnLm4uZD1mO2Qubi5hPWM7Zy5uLmE9Y31cbmZ1bmN0aW9uIHJkYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07T2RkKGIsJ1Jlc3RvcmluZyByZXZlcnNlZCBlZGdlcycsMSk7Zm9yKGk9bmV3IG9sYihhLmIpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwyOSk7Zm9yKGs9bmV3IG9sYihoLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMCk7Zm9yKG09bmV3IG9sYihqLmopO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSwxMSk7Zz1rX2IobC5nKTtmb3IoZD1nLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtDY2IoREQodk5iKGMsKHd0YygpLGx0YykpKSkmJlBaYihjLGZhbHNlKX19fX1RZGQoYil9XG5mdW5jdGlvbiBtNGMoKXt0aGlzLmI9bmV3ICRyYjt0aGlzLmQ9bmV3ICRyYjt0aGlzLmU9bmV3ICRyYjt0aGlzLmM9bmV3ICRyYjt0aGlzLmE9bmV3IExxYjt0aGlzLmY9bmV3IExxYjtodmQobTEsbmV3IHg0YyxuZXcgejRjKTtodmQobDEsbmV3IFY0YyxuZXcgWDRjKTtodmQoaTEsbmV3IFo0YyxuZXcgXzRjKTtodmQoajEsbmV3IGI1YyxuZXcgZDVjKTtodmQoaTIsbmV3IGY1YyxuZXcgaDVjKTtodmQoREosbmV3IEI0YyxuZXcgRDRjKTtodmQoeEssbmV3IEY0YyxuZXcgSDRjKTtodmQoakssbmV3IEo0YyxuZXcgTDRjKTtodmQodUssbmV3IE40YyxuZXcgUDRjKTtodmQoa0wsbmV3IFI0YyxuZXcgVDRjKX1cbmZ1bmN0aW9uIFI1ZChhKXt2YXIgYixjLGQsZSxmLGc7Zj0wO2I9d0lkKGEpOyEhYi5CaigpJiYoZnw9NCk7KGEuQmImQ3ZlKSE9MCYmKGZ8PTIpO2lmKEpEKGEsOTkpKXtjPUJEKGEsMTgpO2U9elVkKGMpOyhjLkJiJm90ZSkhPTAmJihmfD0zMik7aWYoZSl7YUxkKFdJZChlKSk7Znw9ODtnPWUudDsoZz4xfHxnPT0tMSkmJihmfD0xNik7KGUuQmImb3RlKSE9MCYmKGZ8PTY0KX0oYy5CYiZUamUpIT0wJiYoZnw9RHZlKTtmfD16dGV9ZWxzZXtpZihKRChiLDQ1Nykpe2Z8PTUxMn1lbHNle2Q9Yi5CaigpOyEhZCYmKGQuaSYxKSE9MCYmKGZ8PTI1Nil9fShhLkJiJjUxMikhPTAmJihmfD0xMjgpO3JldHVybiBmfVxuZnVuY3Rpb24gaGMoYSxiKXt2YXIgYyxkLGUsZixnO2E9YT09bnVsbD9YaGU6KHVDYihhKSxhKTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXtiW2VdPWljKGJbZV0pfWM9bmV3IFZmYjtnPTA7ZD0wO3doaWxlKGQ8Yi5sZW5ndGgpe2Y9YS5pbmRleE9mKCclcycsZyk7aWYoZj09LTEpe2JyZWFrfWMuYSs9JycrcWZiKGE9PW51bGw/WGhlOih1Q2IoYSksYSksZyxmKTtQZmIoYyxiW2QrK10pO2c9ZisyfU9mYihjLGEsZyxhLmxlbmd0aCk7aWYoZDxiLmxlbmd0aCl7Yy5hKz0nIFsnO1BmYihjLGJbZCsrXSk7d2hpbGUoZDxiLmxlbmd0aCl7Yy5hKz1TaGU7UGZiKGMsYltkKytdKX1jLmErPSddJ31yZXR1cm4gYy5hfVxuZnVuY3Rpb24gbTNiKGEpe3ZhciBiLGMsZCxlLGY7Zj1uZXcgU2tiKGEuYS5jLmxlbmd0aCk7Zm9yKGU9bmV3IG9sYihhLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMCk7Yz1CRCh2TmIoZCwoTnljKCksbXhjKSksMTYzKTtiPW51bGw7c3dpdGNoKGMuZyl7Y2FzZSAxOmNhc2UgMjpiPShHcWMoKSxGcWMpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Yj0oR3FjKCksRHFjKTt9aWYoYil7eU5iKGQsKHd0YygpLEJzYyksKEdxYygpLEZxYykpO2I9PURxYz9vM2IoZCxjLChLQWMoKSxIQWMpKTpiPT1GcWMmJm8zYihkLGMsKEtBYygpLElBYykpfWVsc2V7Zi5jW2YuYy5sZW5ndGhdPWR9fXJldHVybiBmfVxuZnVuY3Rpb24gTUhjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Yz0wO2ZvcihpPW5ldyBvbGIoYik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDExKTtBSGMoYS5iLGEuZFtoLnBdKTtnPTA7Zm9yKGU9bmV3IGIxYihoLmIpO2xsYihlLmEpfHxsbGIoZS5iKTspe2Q9QkQobGxiKGUuYSk/bWxiKGUuYSk6bWxiKGUuYiksMTcpO2lmKFdIYyhkKSl7Zj1hSWMoYSxoPT1kLmM/ZC5kOmQuYyk7aWYoZj5hLmRbaC5wXSl7Yys9ekhjKGEuYixmKTtXamIoYS5hLG1lYihmKSl9fWVsc2V7KytnfX1jKz1hLmIuZCpnO3doaWxlKCFha2IoYS5hKSl7eEhjKGEuYixCRChma2IoYS5hKSwxOSkuYSl9fXJldHVybiBjfVxuZnVuY3Rpb24gWTZkKGEsYil7dmFyIGM7aWYoYS5mPT1XNmQpe2M9JDFkKHExZCgoTzZkKCksTTZkKSxiKSk7cmV0dXJuIGEuZT9jPT00JiZiIT0obThkKCksazhkKSYmYiE9KG04ZCgpLGg4ZCkmJmIhPShtOGQoKSxpOGQpJiZiIT0obThkKCksajhkKTpjPT0yfWlmKCEhYS5kJiYoYS5kLkhjKGIpfHxhLmQuSGMoXzFkKHExZCgoTzZkKCksTTZkKSxiKSkpfHxhLmQuSGMoZTFkKChPNmQoKSxNNmQpLGEuYixiKSkpKXtyZXR1cm4gdHJ1ZX1pZihhLmYpe2lmKHgxZCgoTzZkKCksYS5mKSxiMmQocTFkKE02ZCxiKSkpKXtjPSQxZChxMWQoTTZkLGIpKTtyZXR1cm4gYS5lP2M9PTQ6Yz09Mn19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gaVZjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7Zz1CRChoa2QoYywoWTljKCksQzljKSksOCk7aT1nLmE7az1nLmIrYTtlPSR3bmQuTWF0aC5hdGFuMihrLGkpO2U8MCYmKGUrPWRyZSk7ZSs9YjtlPmRyZSYmKGUtPWRyZSk7aD1CRChoa2QoZCxDOWMpLDgpO2o9aC5hO2w9aC5iK2E7Zj0kd25kLk1hdGguYXRhbjIobCxqKTtmPDAmJihmKz1kcmUpO2YrPWI7Zj5kcmUmJihmLT1kcmUpO3JldHVybiBJeSgpLE15KDEuMEUtMTApLCR3bmQuTWF0aC5hYnMoZS1mKTw9MS4wRS0xMHx8ZT09Znx8aXNOYU4oZSkmJmlzTmFOKGYpPzA6ZTxmPy0xOmU+Zj8xOk55KGlzTmFOKGUpLGlzTmFOKGYpKX1cbmZ1bmN0aW9uIFlEYihhKXt2YXIgYixjLGQsZSxmLGcsaDtoPW5ldyBMcWI7Zm9yKGQ9bmV3IG9sYihhLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2I9QkQobWxiKGQpLDU3KTtSaGIoaCxiLG5ldyBSa2IpfWZvcihlPW5ldyBvbGIoYS5hLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihlKSw1Nyk7Yi5pPVFqZTtmb3IoZz1iLmMuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSw1Nyk7QkQoV2QoaXJiKGguZixmKSksMTUpLkZjKGIpfX1mb3IoYz1uZXcgb2xiKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksNTcpO2IuYy4kYigpO2IuYz1CRChXZChpcmIoaC5mLGIpKSwxNSl9UURiKGEpfVxuZnVuY3Rpb24geVZiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2g9bmV3IExxYjtmb3IoZD1uZXcgb2xiKGEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoZCksODEpO1JoYihoLGIsbmV3IFJrYil9Zm9yKGU9bmV3IG9sYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2I9QkQobWxiKGUpLDgxKTtiLm89UWplO2ZvcihnPWIuZi5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDgxKTtCRChXZChpcmIoaC5mLGYpKSwxNSkuRmMoYil9fWZvcihjPW5ldyBvbGIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw4MSk7Yi5mLiRiKCk7Yi5mPUJEKFdkKGlyYihoLmYsYikpLDE1KX1yVmIoYSl9XG5mdW5jdGlvbiBkTmIoYSxiLGMsZCl7dmFyIGUsZjtjTmIoYSxiLGMsZCk7cU5iKGIsYS5qLWIuaitjKTtyTmIoYixhLmstYi5rK2QpO2ZvcihmPW5ldyBvbGIoYi5mKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMzI0KTtzd2l0Y2goZS5hLmcpe2Nhc2UgMDpuTmIoYSxiLmcrZS5iLmEsMCxiLmcrZS5jLmEsYi5pLTEpO2JyZWFrO2Nhc2UgMTpuTmIoYSxiLmcrYi5vLGIuaStlLmIuYSxhLm8tMSxiLmkrZS5jLmEpO2JyZWFrO2Nhc2UgMjpuTmIoYSxiLmcrZS5iLmEsYi5pK2IucCxiLmcrZS5jLmEsYS5wLTEpO2JyZWFrO2RlZmF1bHQ6bk5iKGEsMCxiLmkrZS5iLmEsYi5nLTEsYi5pK2UuYy5hKTt9fX1cbmZ1bmN0aW9uIGFOYihiLGMsZCxlLGYpe3ZhciBnLGgsaTt0cnl7aWYoYz49Yi5vKXt0aHJvdyB2YmIobmV3IHJjYil9aT1jPj41O2g9YyYzMTtnPU5iYigxLFRiYihOYmIoaCwxKSkpO2Y/KGIubltkXVtpXT1NYmIoYi5uW2RdW2ldLGcpKTooYi5uW2RdW2ldPXhiYihiLm5bZF1baV0sTGJiKGcpKSk7Zz1OYmIoZywxKTtlPyhiLm5bZF1baV09TWJiKGIubltkXVtpXSxnKSk6KGIubltkXVtpXT14YmIoYi5uW2RdW2ldLExiYihnKSkpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMzIwKSl7dGhyb3cgdmJiKG5ldyBxY2IoRGxlK2IubysnKicrYi5wK0VsZStjK1NoZStkK0ZsZSkpfWVsc2UgdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIEJVYyhhLGIsYyxkKXt2YXIgZSxmLGc7aWYoYil7Zj1FZGIoRUQodk5iKGIsKG1UYygpLGZUYykpKSkrZDtnPWMrRWRiKEVEKHZOYihiLGJUYykpKS8yO3lOYihiLGtUYyxtZWIoVGJiKENiYigkd25kLk1hdGgucm91bmQoZikpKSkpO3lOYihiLGxUYyxtZWIoVGJiKENiYigkd25kLk1hdGgucm91bmQoZykpKSkpO2IuZC5iPT0wfHxCVWMoYSxCRChwcigoZT1Kc2IoKG5ldyBaUmMoYikpLmEuZCwwKSxuZXcgYVNjKGUpKSksODYpLGMrRWRiKEVEKHZOYihiLGJUYykpKSthLmEsZCtFZGIoRUQodk5iKGIsY1RjKSkpKTt2TmIoYixpVGMpIT1udWxsJiZCVWMoYSxCRCh2TmIoYixpVGMpLDg2KSxjLGQpfX1cbmZ1bmN0aW9uIE45YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07aT1RX2IoYi5hKTtlPUVkYihFRCh2TmIoaSwoTnljKCkscHljKSkpKSoyO2s9RWRiKEVEKHZOYihpLHd5YykpKTtqPSR3bmQuTWF0aC5tYXgoZSxrKTtmPUtDKFVELFZqZSwyNSxiLmYtYi5jKzEsMTUsMSk7ZD0tajtjPTA7Zm9yKGg9Yi5iLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTApO2QrPWEuYVtnLmMucF0rajtmW2MrK109ZH1kKz1hLmFbYi5hLmMucF0rajtmW2MrK109ZDtmb3IobT1uZXcgb2xiKGIuZSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDEwKTtkKz1hLmFbbC5jLnBdK2o7ZltjKytdPWR9cmV0dXJuIGZ9XG5mdW5jdGlvbiBHSGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO209bmV3IEh4YihuZXcgcEljKGEpKTtmb3IoaD1PQyhHQyhPUSwxKSxrbmUsMTAsMCxbYixjXSksaT0wLGo9aC5sZW5ndGg7aTxqOysraSl7Zz1oW2ldO2ZvcihsPUNIYyhnLGQpLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMTEpO2ZvcihmPW5ldyBiMWIoay5iKTtsbGIoZi5hKXx8bGxiKGYuYik7KXtlPUJEKGxsYihmLmEpP21sYihmLmEpOm1sYihmLmIpLDE3KTtpZighT1piKGUpKXtJd2IobS5hLGssKEJjYigpLHpjYikpPT1udWxsO1dIYyhlKSYmQXhiKG0saz09ZS5jP2UuZDplLmMpfX19fXJldHVybiBRYihtKSxuZXcgVGtiKG0pfVxuZnVuY3Rpb24gemhkKGEsYil7dmFyIGMsZCxlLGY7Zj1CRChoa2QoYSwoWTljKCksQTljKSksNjEpLmctQkQoaGtkKGIsQTljKSw2MSkuZztpZihmIT0wKXtyZXR1cm4gZn1jPUJEKGhrZChhLHY5YyksMTkpO2Q9QkQoaGtkKGIsdjljKSwxOSk7aWYoISFjJiYhIWQpe2U9Yy5hLWQuYTtpZihlIT0wKXtyZXR1cm4gZX19c3dpdGNoKEJEKGhrZChhLEE5YyksNjEpLmcpe2Nhc2UgMTpyZXR1cm4gS2RiKGEuaSxiLmkpO2Nhc2UgMjpyZXR1cm4gS2RiKGEuaixiLmopO2Nhc2UgMzpyZXR1cm4gS2RiKGIuaSxhLmkpO2Nhc2UgNDpyZXR1cm4gS2RiKGIuaixhLmopO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBaZGIoaW5lKSk7fX1cbmZ1bmN0aW9uIF9vZChhKXt2YXIgYixjLGQ7aWYoKGEuRGImNjQpIT0wKXJldHVybiBmbGQoYSk7Yj1uZXcgV2ZiKGV0ZSk7Yz1hLms7aWYoIWMpeyFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpO2lmKGEubi5pPjApe2Q9KCFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpLEJEKHF1ZChhLm4sMCksMTM3KSkuYTshZHx8UWZiKFFmYigoYi5hKz0nIFwiJyxiKSxkKSwnXCInKX19ZWxzZXtRZmIoUWZiKChiLmErPScgXCInLGIpLGMpLCdcIicpfVFmYihMZmIoUWZiKExmYihRZmIoTGZiKFFmYihMZmIoKGIuYSs9JyAoJyxiKSxhLmkpLCcsJyksYS5qKSwnIHwgJyksYS5nKSwnLCcpLGEuZiksJyknKTtyZXR1cm4gYi5hfVxuZnVuY3Rpb24gb3BkKGEpe3ZhciBiLGMsZDtpZigoYS5EYiY2NCkhPTApcmV0dXJuIGZsZChhKTtiPW5ldyBXZmIoZnRlKTtjPWEuaztpZighYyl7IWEubiYmKGEubj1uZXcgY1VkKEQyLGEsMSw3KSk7aWYoYS5uLmk+MCl7ZD0oIWEubiYmKGEubj1uZXcgY1VkKEQyLGEsMSw3KSksQkQocXVkKGEubiwwKSwxMzcpKS5hOyFkfHxRZmIoUWZiKChiLmErPScgXCInLGIpLGQpLCdcIicpfX1lbHNle1FmYihRZmIoKGIuYSs9JyBcIicsYiksYyksJ1wiJyl9UWZiKExmYihRZmIoTGZiKFFmYihMZmIoUWZiKExmYigoYi5hKz0nICgnLGIpLGEuaSksJywnKSxhLmopLCcgfCAnKSxhLmcpLCcsJyksYS5mKSwnKScpO3JldHVybiBiLmF9XG5mdW5jdGlvbiBoNGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihiPT1udWxsfHxiLmxlbmd0aD09MCl7cmV0dXJuIG51bGx9ZT1CRChQaGIoYS5hLGIpLDE0OSk7aWYoIWUpe2ZvcihkPShoPShuZXcgJGliKGEuYikpLmEudmMoKS5LYygpLG5ldyBkamIoaCkpO2QuYS5PYigpOyl7Yz0oZj1CRChkLmEuUGIoKSw0MiksQkQoZi5kZCgpLDE0OSkpO2c9Yy5jO2k9Yi5sZW5ndGg7aWYoZGZiKGcuc3Vic3RyKGcubGVuZ3RoLWksaSksYikmJihiLmxlbmd0aD09Zy5sZW5ndGh8fGJmYihnLGcubGVuZ3RoLWIubGVuZ3RoLTEpPT00Nikpe2lmKGUpe3JldHVybiBudWxsfWU9Y319ISFlJiZTaGIoYS5hLGIsZSl9cmV0dXJuIGV9XG5mdW5jdGlvbiBRTGIoYSxiKXt2YXIgYyxkLGUsZjtjPW5ldyBWTGI7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLEV5YiksRHliXSkpKSwyMSk7ZT1kLmdjKCk7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbRXliLER5Yl0pKSksMjEpO2Y9ZC5nYygpO2lmKGU8Zil7cmV0dXJuIC0xfWlmKGU9PWYpe3JldHVybiAwfXJldHVybiAxfVxuZnVuY3Rpb24gcjViKGEpe3ZhciBiLGMsZDtpZighd05iKGEsKE55YygpLHh4YykpKXtyZXR1cm59ZD1CRCh2TmIoYSx4eGMpLDIxKTtpZihkLmRjKCkpe3JldHVybn1jPShiPUJEKGdkYihCMSksOSksbmV3IHhxYihiLEJEKF9CYihiLGIubGVuZ3RoKSw5KSwwKSk7ZC5IYygoSGJkKCksQ2JkKSk/cnFiKGMsQ2JkKTpycWIoYyxEYmQpO2QuSGMoQWJkKXx8cnFiKGMsQWJkKTtkLkhjKHpiZCk/cnFiKGMsR2JkKTpkLkhjKHliZCk/cnFiKGMsRmJkKTpkLkhjKEJiZCkmJnJxYihjLEViZCk7ZC5IYyhHYmQpP3JxYihjLHpiZCk6ZC5IYyhGYmQpP3JxYihjLHliZCk6ZC5IYyhFYmQpJiZycWIoYyxCYmQpO3lOYihhLHh4YyxjKX1cbmZ1bmN0aW9uIGtIYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtlPUJEKHZOYihhLCh3dGMoKSxQc2MpKSwxMCk7ZD1hLmo7Yz0odENiKDAsZC5jLmxlbmd0aCksQkQoZC5jWzBdLDExKSk7Zm9yKGc9bmV3IG9sYihlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMSk7aWYoUEQoZik9PT1QRCh2TmIoYywkc2MpKSl7aWYoZi5qPT0oVWNkKCksQWNkKSYmYS5wPmUucCl7RzBiKGYsUmNkKTtpZihmLmQpe2g9Zi5vLmI7Yj1mLmEuYjtmLmEuYj1oLWJ9fWVsc2UgaWYoZi5qPT1SY2QmJmUucD5hLnApe0cwYihmLEFjZCk7aWYoZi5kKXtoPWYuby5iO2I9Zi5hLmI7Zi5hLmI9LShoLWIpfX1icmVha319cmV0dXJuIGV9XG5mdW5jdGlvbiBOT2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbztmPWM7aWYoYzxkKXttPShuPW5ldyB1T2MoYS5wKSxvPW5ldyB1T2MoYS5wKSx5ZShuLmUsYS5lKSxuLnE9YS5xLG4ucj1vLGxPYyhuKSx5ZShvLmosYS5qKSxvLnI9bixsT2MobyksbmV3IHZnZChuLG8pKTtsPUJEKG0uYSwxMTIpO2s9QkQobS5iLDExMik7ZT0odENiKGYsYi5jLmxlbmd0aCksQkQoYi5jW2ZdLDMyOSkpO2c9VU9jKGEsbCxrLGUpO2ZvcihqPWMrMTtqPD1kO2orKyl7aD0odENiKGosYi5jLmxlbmd0aCksQkQoYi5jW2pdLDMyOSkpO2k9VU9jKGEsbCxrLGgpO2lmKFNPYyhoLGksZSxnKSl7ZT1oO2c9aX19fXJldHVybiBmfVxuZnVuY3Rpb24gd1FiKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGw7aWYoIShKRChiLDIzOSl8fEpEKGIsMzU0KXx8SkQoYiwxODYpKSl7dGhyb3cgdmJiKG5ldyBXZGIoJ01ldGhvZCBvbmx5IHdvcmtzIGZvciBFbGtOb2RlLSwgRWxrTGFiZWwgYW5kIEVsa1BvcnQtb2JqZWN0cy4nKSl9Zz1hLmEvMjtpPWIuaStkLWc7az1iLmorZS1nO2o9aStiLmcrYS5hO2w9aytiLmYrYS5hO2Y9bmV3IHM3YztEc2IoZixuZXcgZjdjKGksaykpO0RzYihmLG5ldyBmN2MoaSxsKSk7RHNiKGYsbmV3IGY3YyhqLGwpKTtEc2IoZixuZXcgZjdjKGosaykpO2g9bmV3IFhPYihmKTt0TmIoaCxiKTtjJiZSaGIoYS5iLGIsaCk7cmV0dXJuIGh9XG5mdW5jdGlvbiB1WGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2Y9bmV3IGY3YyhiLGMpO2ZvcihrPW5ldyBvbGIoYS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksMTApO1A2YyhqLm4sZik7Zm9yKG09bmV3IG9sYihqLmopO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSwxMSk7Zm9yKGU9bmV3IG9sYihsLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7cTdjKGQuYSxmKTtnPUJEKHZOYihkLChOeWMoKSxqeGMpKSw3NCk7ISFnJiZxN2MoZyxmKTtmb3IoaT1uZXcgb2xiKGQuYik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDcwKTtQNmMoaC5uLGYpfX19fX1cbmZ1bmN0aW9uIGdfYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zj1uZXcgZjdjKGIsYyk7Zm9yKGs9bmV3IG9sYihhLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMCk7UDZjKGoubixmKTtmb3IobT1uZXcgb2xiKGouaik7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDExKTtmb3IoZT1uZXcgb2xiKGwuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE3KTtxN2MoZC5hLGYpO2c9QkQodk5iKGQsKE55YygpLGp4YykpLDc0KTshIWcmJnE3YyhnLGYpO2ZvcihpPW5ldyBvbGIoZC5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksNzApO1A2YyhoLm4sZil9fX19fVxuZnVuY3Rpb24gTjFiKGEpe2lmKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLmk9PTApe3Rocm93IHZiYihuZXcgejJjKCdFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuJykpfWVsc2UgaWYoKCFhLmMmJihhLmM9bmV3IHk1ZCh6MixhLDUsOCkpLGEuYykuaT09MCl7dGhyb3cgdmJiKG5ldyB6MmMoJ0VkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4nKSl9ZWxzZXshYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKTtpZighKGEuYi5pPD0xJiYoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jLmk8PTEpKSl7dGhyb3cgdmJiKG5ldyB6MmMoJ0h5cGVyZWRnZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpfX19XG5mdW5jdGlvbiBPRmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtsPTA7Zj1uZXcgamtiO1dqYihmLGIpO3doaWxlKGYuYiE9Zi5jKXtpPUJEKGZrYihmKSwyMTQpO2o9MDtrPUJEKHZOYihiLmosKE55YygpLHl3YykpLDMzOSk7Zz1FZGIoRUQodk5iKGIuaix1d2MpKSk7aD1FZGIoRUQodk5iKGIuaix2d2MpKSk7aWYoayE9KHRBYygpLHJBYykpe2orPWcqUEZjKGkuZSxrKTtqKz1oKlFGYyhpLmUpfWwrPXBIYyhpLmQsaS5lKStqO2ZvcihlPW5ldyBvbGIoaS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMzcpO2M9QkQoSWtiKGEuYixkLnApLDIxNCk7Yy5zfHwobCs9TkZjKGEsYykpfX1yZXR1cm4gbH1cbmZ1bmN0aW9uIGRoYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtuPWIubGVuZ3RoO2k9bjtCQ2IoMCxiLmxlbmd0aCk7aWYoYi5jaGFyQ29kZUF0KDApPT00NSl7bD0tMTttPTE7LS1ufWVsc2V7bD0xO209MH1mPShwaGIoKSxvaGIpWzEwXTtlPW4vZnwwO3E9biVmO3EhPTAmJisrZTtoPUtDKFdELG9qZSwyNSxlLDE1LDEpO2M9bmhiWzhdO2c9MDtvPW0rKHE9PTA/ZjpxKTtmb3IocD1tO3A8aTtwPW8sbz1wK2Ype2Q9SWNiKGIuc3Vic3RyKHAsby1wKSxSaWUsT2hlKTtqPShEaGIoKSxIaGIoaCxoLGcsYykpO2orPXhoYihoLGcsZCk7aFtnKytdPWp9az1nO2EuZT1sO2EuZD1rO2EuYT1oO0pnYihhKX1cbmZ1bmN0aW9uIFNHYihhLGIsYyxkLGUsZixnKXthLmM9ZC5xZigpLmE7YS5kPWQucWYoKS5iO2lmKGUpe2EuYys9ZS5xZigpLmE7YS5kKz1lLnFmKCkuYn1hLmI9Yi5yZigpLmE7YS5hPWIucmYoKS5iO2lmKCFlKXtjPyhhLmMtPWcrYi5yZigpLmEpOihhLmMrPWQucmYoKS5hK2cpfWVsc2V7c3dpdGNoKGUuSGYoKS5nKXtjYXNlIDA6Y2FzZSAyOmEuYys9ZS5yZigpLmErZytmLmErZzticmVhaztjYXNlIDQ6YS5jLT1nK2YuYStnK2IucmYoKS5hO2JyZWFrO2Nhc2UgMTphLmMrPWUucmYoKS5hK2c7YS5kLT1nK2YuYitnK2IucmYoKS5iO2JyZWFrO2Nhc2UgMzphLmMrPWUucmYoKS5hK2c7YS5kKz1lLnJmKCkuYitnK2YuYitnO319fVxuZnVuY3Rpb24gZ2FjKGEsYil7dmFyIGMsZDt0aGlzLmI9bmV3IFJrYjt0aGlzLmU9bmV3IFJrYjt0aGlzLmE9YTt0aGlzLmQ9YjtkYWModGhpcyk7ZWFjKHRoaXMpO3RoaXMuYi5kYygpPyh0aGlzLmM9YS5jLnApOih0aGlzLmM9QkQodGhpcy5iLlhiKDApLDEwKS5jLnApO3RoaXMuZS5jLmxlbmd0aD09MD8odGhpcy5mPWEuYy5wKToodGhpcy5mPUJEKElrYih0aGlzLmUsdGhpcy5lLmMubGVuZ3RoLTEpLDEwKS5jLnApO2ZvcihkPUJEKHZOYihhLCh3dGMoKSxrdGMpKSwxNSkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSw3MCk7aWYod05iKGMsKE55YygpLE93YykpKXt0aGlzLmQ9QkQodk5iKGMsT3djKSwyMjcpO2JyZWFrfX19XG5mdW5jdGlvbiBBbmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7ZD1CRChPaGIoYS5hLGIpLDUzKTtmPUJEKE9oYihhLmEsYyksNTMpO2U9QkQoT2hiKGEuZSxiKSw1Myk7Zz1CRChPaGIoYS5lLGMpLDUzKTtkLmEuemMoYyxkKTtnLmEuemMoYixnKTtmb3Ioaz1mLmEuZWMoKS5LYygpO2suT2IoKTspe2o9QkQoay5QYigpLDEwKTtkLmEuemMoaixkKTtRcWIoQkQoT2hiKGEuZSxqKSw1MyksYik7eWUoQkQoT2hiKGEuZSxqKSw1MyksZSl9Zm9yKGk9ZS5hLmVjKCkuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwxMCk7Zy5hLnpjKGgsZyk7UXFiKEJEKE9oYihhLmEsaCksNTMpLGMpO3llKEJEKE9oYihhLmEsaCksNTMpLGYpfX1cbmZ1bmN0aW9uIFdHYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztkPUJEKE9oYihhLmEsYiksNTMpO2Y9QkQoT2hiKGEuYSxjKSw1Myk7ZT1CRChPaGIoYS5iLGIpLDUzKTtnPUJEKE9oYihhLmIsYyksNTMpO2QuYS56YyhjLGQpO2cuYS56YyhiLGcpO2ZvcihrPWYuYS5lYygpLktjKCk7ay5PYigpOyl7aj1CRChrLlBiKCksMTApO2QuYS56YyhqLGQpO1FxYihCRChPaGIoYS5iLGopLDUzKSxiKTt5ZShCRChPaGIoYS5iLGopLDUzKSxlKX1mb3IoaT1lLmEuZWMoKS5LYygpO2kuT2IoKTspe2g9QkQoaS5QYigpLDEwKTtnLmEuemMoaCxnKTtRcWIoQkQoT2hiKGEuYSxoKSw1MyksYyk7eWUoQkQoT2hiKGEuYSxoKSw1MyksZil9fVxuZnVuY3Rpb24gZG9jKGEsYil7dmFyIGMsZCxlO09kZChiLCdCcmVha2luZyBQb2ludCBJbnNlcnRpb24nLDEpO2Q9bmV3IFhvYyhhKTtzd2l0Y2goQkQodk5iKGEsKE55YygpLEd5YykpLDMzNykuZyl7Y2FzZSAyOmU9bmV3IGhwYztjYXNlIDA6ZT1uZXcgWW5jO2JyZWFrO2RlZmF1bHQ6ZT1uZXcga3BjO31jPWUuVmYoYSxkKTtDY2IoREQodk5iKGEsSXljKSkpJiYoYz1jb2MoYSxjKSk7aWYoIWUuV2YoKSYmd05iKGEsTXljKSl7c3dpdGNoKEJEKHZOYihhLE15YyksMzM4KS5nKXtjYXNlIDI6Yz10cGMoZCxjKTticmVhaztjYXNlIDE6Yz1ycGMoZCxjKTt9fWlmKGMuZGMoKSl7UWRkKGIpO3JldHVybn1hb2MoYSxjKTtRZGQoYil9XG5mdW5jdGlvbiAkcWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2s9bnVsbDttPWI7bD1ScWQoYSxkdGQoYyksbSk7TGtkKGwsX3BkKG0sVnRlKSk7Zz1ZcGQobSxMdGUpO2Q9bmV3IG1yZChhLGwpO29xZChkLmEsZC5iLGcpO2g9WXBkKG0sTXRlKTtlPW5ldyBucmQoYSxsKTtwcWQoZS5hLGUuYixoKTtpZigoIWwuYiYmKGwuYj1uZXcgeTVkKHoyLGwsNCw3KSksbC5iKS5pPT0wfHwoIWwuYyYmKGwuYz1uZXcgeTVkKHoyLGwsNSw4KSksbC5jKS5pPT0wKXtmPV9wZChtLFZ0ZSk7aT1adGUrZjtqPWkrJHRlO3Rocm93IHZiYihuZXcgY3FkKGopKX1ncmQobSxsKTtfcWQoYSxtLGwpO2s9Y3JkKGEsbSxsKTtyZXR1cm4ga31cbmZ1bmN0aW9uIHlHYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2U9S0MoV0Qsb2plLDI1LGEuZS5hLmMubGVuZ3RoLDE1LDEpO2ZvcihnPW5ldyBvbGIoYS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMjEpO2VbZi5kXSs9Zi5iLmEuYy5sZW5ndGh9aD1SdShiKTt3aGlsZShoLmIhPTApe2Y9QkQoaC5iPT0wP251bGw6KHNDYihoLmIhPTApLE5zYihoLGguYS5hKSksMTIxKTtmb3IoZD12cihuZXcgb2xiKGYuZy5hKSk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjEzKTtpPWMuZTtpLmU9JHduZC5NYXRoLm1heChpLmUsZi5lK2MuYSk7LS1lW2kuZF07ZVtpLmRdPT0wJiYoR3NiKGgsaSxoLmMuYixoLmMpLHRydWUpfX19XG5mdW5jdGlvbiBDR2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtjPVJpZTtlPU9oZTtmb3IoaD1uZXcgb2xiKGEuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoaCksMTIxKTtlPSR3bmQuTWF0aC5taW4oZSxmLmUpO2M9JHduZC5NYXRoLm1heChjLGYuZSl9Yj1LQyhXRCxvamUsMjUsYy1lKzEsMTUsMSk7Zm9yKGc9bmV3IG9sYihhLmUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEyMSk7Zi5lLT1lOysrYltmLmVdfWQ9MDtpZihhLmshPW51bGwpe2ZvcihqPWEuayxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107YltkKytdKz1pO2lmKGIubGVuZ3RoPT1kKXticmVha319fXJldHVybiBifVxuZnVuY3Rpb24gaXhkKGEpe3N3aXRjaChhLmQpe2Nhc2UgOTpjYXNlIDg6e3JldHVybiB0cnVlfWNhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjp7cmV0dXJuIGZhbHNlfWNhc2UgNzp7cmV0dXJuIEJEKGh4ZChhKSwxOSkuYT09YS5vfWNhc2UgMTpjYXNlIDI6e2lmKGEubz09LTIpe3JldHVybiBmYWxzZX1lbHNle3N3aXRjaChhLnApe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDU6Y2FzZSA3OntyZXR1cm4gQmJiKGEuayxhLmYpfWNhc2UgMzpjYXNlIDQ6e3JldHVybiBhLmo9PWEuZX1kZWZhdWx0OntyZXR1cm4gYS5uPT1udWxsP2EuZz09bnVsbDpwYihhLm4sYS5nKX19fX1kZWZhdWx0OntyZXR1cm4gZmFsc2V9fX1cbmZ1bmN0aW9uICRhZChhKXtyNGMoYSxuZXcgRTNjKFAzYyhNM2MoTzNjKE4zYyhuZXcgUjNjLFFzZSksJ0VMSyBGaXhlZCcpLCdLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuJyksbmV3IGJiZCkpKTtwNGMoYSxRc2UsYW1lLFhhZCk7cDRjKGEsUXNlLHVxZSxLc2QoWWFkKSk7cDRjKGEsUXNlLHVzZSxLc2QoU2FkKSk7cDRjKGEsUXNlLEZtZSxLc2QoVGFkKSk7cDRjKGEsUXNlLFRtZSxLc2QoVmFkKSk7cDRjKGEsUXNlLGJxZSxLc2QoVWFkKSl9XG5mdW5jdGlvbiBybyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtkPVRiYihJYmIoRWllLGtlYihUYmIoSWJiKGI9PW51bGw/MDp0YihiKSxGaWUpKSwxNSkpKTtoPVRiYihJYmIoRWllLGtlYihUYmIoSWJiKGM9PW51bGw/MDp0YihjKSxGaWUpKSwxNSkpKTtmPXVvKGEsYixkKTtpZighIWYmJmg9PWYuZiYmSGIoYyxmLmkpKXtyZXR1cm4gY31nPXZvKGEsYyxoKTtpZihnKXt0aHJvdyB2YmIobmV3IFdkYigndmFsdWUgYWxyZWFkeSBwcmVzZW50OiAnK2MpKX1lPW5ldyAkbyhiLGQsYyxoKTtpZihmKXttbyhhLGYpO3BvKGEsZSxmKTtmLmU9bnVsbDtmLmM9bnVsbDtyZXR1cm4gZi5pfWVsc2V7cG8oYSxlLG51bGwpO3RvKGEpO3JldHVybiBudWxsfX1cbmZ1bmN0aW9uIEU0YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2s9Yy5hLmM7Zz1jLmEuYytjLmEuYjtmPUJEKE9oYihjLmMsYiksNDU5KTtuPWYuZjtvPWYuYTtmLmI/KGk9bmV3IGY3YyhnLG4pKTooaT1uZXcgZjdjKGssbikpO2YuYz8obD1uZXcgZjdjKGssbykpOihsPW5ldyBmN2MoZyxvKSk7ZT1rO2MucHx8KGUrPWEuYyk7ZSs9Yy5GK2MudiphLmI7aj1uZXcgZjdjKGUsbik7bT1uZXcgZjdjKGUsbyk7bjdjKGIuYSxPQyhHQyhtMSwxKSxuaWUsOCwwLFtpLGpdKSk7aD1jLmQuYS5nYygpPjE7aWYoaCl7ZD1uZXcgZjdjKGUsYy5iKTtEc2IoYi5hLGQpfW43YyhiLmEsT0MoR0MobTEsMSksbmllLDgsMCxbbSxsXSkpfVxuZnVuY3Rpb24gTmlkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWIpe3JldHVybiBudWxsfWVsc2V7aWYoYzw9LTEpe2Q9WEtkKGIuVGcoKSwtMS1jKTtpZihKRChkLDk5KSl7cmV0dXJuIEJEKGQsMTgpfWVsc2V7Zz1CRChiLmFoKGQpLDE1Myk7Zm9yKGg9MCxpPWcuZ2MoKTtoPGk7KytoKXtpZihQRChnLmpsKGgpKT09PVBEKGEpKXtlPWcuaWwoaCk7aWYoSkQoZSw5OSkpe2Y9QkQoZSwxOCk7aWYoKGYuQmImb3RlKSE9MCl7cmV0dXJuIGZ9fX19dGhyb3cgdmJiKG5ldyBaZGIoJ1RoZSBjb250YWlubWVudCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBsb2NhdGVkJykpfX1lbHNle3JldHVybiB6VWQoQkQoWEtkKGEuVGcoKSxjKSwxOCkpfX19XG5mdW5jdGlvbiBYZWUoYSl7dmFyIGIsYyxkLGUsZjtkPWEubGVuZ3RoO2I9bmV3IElmYjtmPTA7d2hpbGUoZjxkKXtjPWJmYihhLGYrKyk7aWYoYz09OXx8Yz09MTB8fGM9PTEyfHxjPT0xM3x8Yz09MzIpY29udGludWU7aWYoYz09MzUpe3doaWxlKGY8ZCl7Yz1iZmIoYSxmKyspO2lmKGM9PTEzfHxjPT0xMClicmVha31jb250aW51ZX1pZihjPT05MiYmZjxkKXtpZigoZT0oQkNiKGYsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChmKSkpPT0zNXx8ZT09OXx8ZT09MTB8fGU9PTEyfHxlPT0xM3x8ZT09MzIpe0FmYihiLGUmYWplKTsrK2Z9ZWxzZXtiLmErPSdcXFxcJztBZmIoYixlJmFqZSk7KytmfX1lbHNlIEFmYihiLGMmYWplKX1yZXR1cm4gYi5hfVxuZnVuY3Rpb24gR1ZjKGEsYil7dmFyIGMsZCxlO2ZvcihkPW5ldyBvbGIoYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDMzKTtSYyhhLmEsYyxjKTtSYyhhLmIsYyxjKTtlPWdWYyhjKTtpZihlLmMubGVuZ3RoIT0wKXshIWEuZCYmYS5kLmxnKGUpO1JjKGEuYSxjLCh0Q2IoMCxlLmMubGVuZ3RoKSxCRChlLmNbMF0sMzMpKSk7UmMoYS5iLGMsQkQoSWtiKGUsZS5jLmxlbmd0aC0xKSwzMykpO3doaWxlKGRWYyhlKS5jLmxlbmd0aCE9MCl7ZT1kVmMoZSk7ISFhLmQmJmEuZC5sZyhlKTtSYyhhLmEsYywodENiKDAsZS5jLmxlbmd0aCksQkQoZS5jWzBdLDMzKSkpO1JjKGEuYixjLEJEKElrYihlLGUuYy5sZW5ndGgtMSksMzMpKX19fX1cbmZ1bmN0aW9uIGZuYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztjPTA7Zm9yKGg9bmV3IG9sYihhLmQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMDEpOyEhZy5pJiYoZy5pLmM9YysrKX1iPUlDKHNiYixbbmllLGRsZV0sWzE3NywyNV0sMTYsW2MsY10sMik7az1hLmQ7Zm9yKGU9MDtlPGsuYy5sZW5ndGg7ZSsrKXtpPSh0Q2IoZSxrLmMubGVuZ3RoKSxCRChrLmNbZV0sMTAxKSk7aWYoaS5pKXtmb3IoZj1lKzE7ZjxrLmMubGVuZ3RoO2YrKyl7aj0odENiKGYsay5jLmxlbmd0aCksQkQoay5jW2ZdLDEwMSkpO2lmKGouaSl7ZD1rbmMoaSxqKTtiW2kuaS5jXVtqLmkuY109ZDtiW2ouaS5jXVtpLmkuY109ZH19fX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGh0KGEsYixjLGQpe3ZhciBlLGYsZztnPW5ldyBxdShiLGMpO2lmKCFhLmEpe2EuYT1hLmU9ZztSaGIoYS5iLGIsbmV3IHB1KGcpKTsrK2EuY31lbHNlIGlmKCFkKXthLmUuYj1nO2cuZD1hLmU7YS5lPWc7ZT1CRChPaGIoYS5iLGIpLDI4Myk7aWYoIWUpe1JoYihhLmIsYixlPW5ldyBwdShnKSk7KythLmN9ZWxzZXsrK2UuYTtmPWUuYztmLmM9ZztnLmU9ZjtlLmM9Z319ZWxzZXtlPUJEKE9oYihhLmIsYiksMjgzKTsrK2UuYTtnLmQ9ZC5kO2cuZT1kLmU7Zy5iPWQ7Zy5jPWQ7IWQuZT8oQkQoT2hiKGEuYixiKSwyODMpLmI9Zyk6KGQuZS5jPWcpOyFkLmQ/KGEuYT1nKTooZC5kLmI9Zyk7ZC5kPWc7ZC5lPWd9KythLmQ7cmV0dXJuIGd9XG5mdW5jdGlvbiBtZmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2M9bmV3IFJlZ0V4cChiLCdnJyk7aT1LQyhaSSxuaWUsMiwwLDYsMSk7ZD0wO2o9YTtmPW51bGw7d2hpbGUodHJ1ZSl7aD1jLmV4ZWMoaik7aWYoaD09bnVsbHx8aj09Jycpe2lbZF09ajticmVha31lbHNle2c9aC5pbmRleDtpW2RdPWouc3Vic3RyKDAsZyk7aj1xZmIoaixnK2hbMF0ubGVuZ3RoLGoubGVuZ3RoKTtjLmxhc3RJbmRleD0wO2lmKGY9PWope2lbZF09ai5zdWJzdHIoMCwxKTtqPWouc3Vic3RyKDEpfWY9ajsrK2R9fWlmKGEubGVuZ3RoPjApe2U9aS5sZW5ndGg7d2hpbGUoZT4wJiZpW2UtMV09PScnKXstLWV9ZTxpLmxlbmd0aCYmKGkubGVuZ3RoPWUpfXJldHVybiBpfVxuZnVuY3Rpb24gZjFkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7bD1fS2QoYik7aj1udWxsO2U9ZmFsc2U7Zm9yKGg9MCxrPVZLZChsLmEpLmk7aDxrOysraCl7Zz1CRChuT2QobCxoLChmPUJEKHF1ZChWS2QobC5hKSxoKSw4NyksaT1mLmMsSkQoaSw4OCk/QkQoaSwyNik6KGpHZCgpLF9GZCkpKSwyNik7Yz1mMWQoYSxnKTtpZighYy5kYygpKXtpZighail7aj1jfWVsc2V7aWYoIWUpe2U9dHJ1ZTtqPW5ldyBwRmQoail9ai5HYyhjKX19fWQ9azFkKGEsYik7aWYoZC5kYygpKXtyZXR1cm4gIWo/KG1tYigpLG1tYigpLGptYik6an1lbHNle2lmKCFqKXtyZXR1cm4gZH1lbHNle2V8fChqPW5ldyBwRmQoaikpO2ouR2MoZCk7cmV0dXJuIGp9fX1cbmZ1bmN0aW9uIGcxZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2w9X0tkKGIpO2o9bnVsbDtkPWZhbHNlO2ZvcihoPTAsaz1WS2QobC5hKS5pO2g8azsrK2gpe2Y9QkQobk9kKGwsaCwoZT1CRChxdWQoVktkKGwuYSksaCksODcpLGk9ZS5jLEpEKGksODgpP0JEKGksMjYpOihqR2QoKSxfRmQpKSksMjYpO2M9ZzFkKGEsZik7aWYoIWMuZGMoKSl7aWYoIWope2o9Y31lbHNle2lmKCFkKXtkPXRydWU7aj1uZXcgcEZkKGopfWouR2MoYyl9fX1nPW4xZChhLGIpO2lmKGcuZGMoKSl7cmV0dXJuICFqPyhtbWIoKSxtbWIoKSxqbWIpOmp9ZWxzZXtpZighail7cmV0dXJuIGd9ZWxzZXtkfHwoaj1uZXcgcEZkKGopKTtqLkdjKGcpO3JldHVybiBqfX19XG5mdW5jdGlvbiBCMmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpZihKRChiLDcyKSl7cmV0dXJuIFR4ZChhLGIsYyl9ZWxzZXtoPW51bGw7Zj1udWxsO2Q9QkQoYS5nLDExOSk7Zm9yKGc9MDtnPGEuaTsrK2cpe2U9ZFtnXTtpZihwYihiLGUuZGQoKSkpe2Y9ZS5haygpO2lmKEpEKGYsOTkpJiYoQkQoZiwxOCkuQmImb3RlKSE9MCl7aD1lO2JyZWFrfX19aWYoaCl7aWYob2lkKGEuZSkpe2k9Zi4kaigpP0gyZChhLDQsZixiLG51bGwsTTJkKGEsZixiLEpEKGYsOTkpJiYoQkQoZiwxOCkuQmImVGplKSE9MCksdHJ1ZSk6SDJkKGEsZi5LaigpPzI6MSxmLGIsZi56aigpLC0xLHRydWUpO2M/Yy5FaShpKTooYz1pKX1jPUIyZChhLGgsYyl9cmV0dXJuIGN9fVxuZnVuY3Rpb24gcEtiKGEpe3ZhciBiLGMsZCxlO2Q9YS5vOyRKYigpO2lmKGEuQS5kYygpfHxwYihhLkEsWkpiKSl7ZT1kLmF9ZWxzZXtlPWdJYihhLmYpO2lmKGEuQS5IYygodGRkKCkscWRkKSkmJiFhLkIuSGMoKElkZCgpLEVkZCkpKXtlPSR3bmQuTWF0aC5tYXgoZSxnSWIoQkQoTXBiKGEucCwoVWNkKCksQWNkKSksMjQ0KSkpO2U9JHduZC5NYXRoLm1heChlLGdJYihCRChNcGIoYS5wLFJjZCksMjQ0KSkpfWI9YUtiKGEpOyEhYiYmKGU9JHduZC5NYXRoLm1heChlLGIuYSkpfUNjYihERChhLmUueWYoKS5XZSgoWTljKCksJDhjKSkpKT8oZC5hPSR3bmQuTWF0aC5tYXgoZC5hLGUpKTooZC5hPWUpO2M9YS5mLmk7Yy5jPTA7Yy5iPWU7aEliKGEuZil9XG5mdW5jdGlvbiAkMGQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yz1iLkhoKGEuYSk7aWYoYyl7aT1HRChBQWQoKCFjLmImJihjLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4NixjKSksYy5iKSwnbWVtYmVyVHlwZXMnKSk7aWYoaSE9bnVsbCl7aj1uZXcgUmtiO2ZvcihmPW1mYihpLCdcXFxcdycpLGc9MCxoPWYubGVuZ3RoO2c8aDsrK2cpe2U9ZltnXTtkPWUubGFzdEluZGV4T2YoJyMnKTtrPWQ9PS0xP3cxZChhLGIuQWooKSxlKTpkPT0wP3YxZChhLG51bGwsZS5zdWJzdHIoMSkpOnYxZChhLGUuc3Vic3RyKDAsZCksZS5zdWJzdHIoZCsxKSk7SkQoaywxNDgpJiZFa2IoaixCRChrLDE0OCkpfXJldHVybiBqfX1yZXR1cm4gbW1iKCksbW1iKCksam1ifVxuZnVuY3Rpb24gdFJiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO09kZChjLGttZSwxKTthLmJmKGIpO2Y9MDt3aGlsZShhLmRmKGYpKXtmb3Ioaz1uZXcgb2xiKGIuZSk7ay5hPGsuYy5jLmxlbmd0aDspe2k9QkQobWxiKGspLDE0NCk7Zm9yKGg9dWwocGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW2IuZSxiLmQsYi5iXSkpKTtRcihoKTspe2c9QkQoUnIoaCksMzU3KTtpZihnIT1pKXtlPWEuYWYoZyxpKTshIWUmJlA2YyhpLmEsZSl9fX1mb3Ioaj1uZXcgb2xiKGIuZSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDE0NCk7ZD1pLmE7UTZjKGQsLWEuZCwtYS5kLGEuZCxhLmQpO1A2YyhpLmQsZCk7WDZjKGQpfWEuY2YoKTsrK2Z9UWRkKGMpfVxuZnVuY3Rpb24gJDJkKGEsYixjKXt2YXIgZCxlLGYsZztnPVM2ZChhLmUuVGcoKSxiKTtkPUJEKGEuZywxMTkpO1E2ZCgpO2lmKEJEKGIsNjYpLk9qKCkpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aWYoZy5ybChlLmFrKCkpKXtpZihwYihlLGMpKXtYeGQoYSxmKTtyZXR1cm4gdHJ1ZX19fX1lbHNlIGlmKGMhPW51bGwpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aWYoZy5ybChlLmFrKCkpKXtpZihwYihjLGUuZGQoKSkpe1h4ZChhLGYpO3JldHVybiB0cnVlfX19fWVsc2V7Zm9yKGY9MDtmPGEuaTsrK2Ype2U9ZFtmXTtpZihnLnJsKGUuYWsoKSkpe2lmKGUuZGQoKT09bnVsbCl7WHhkKGEsZik7cmV0dXJuIHRydWV9fX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gc0RjKGEsYil7dmFyIGMsZCxlLGYsZzthLmM9PW51bGx8fGEuYy5sZW5ndGg8Yi5jLmxlbmd0aD8oYS5jPUtDKHNiYixkbGUsMjUsYi5jLmxlbmd0aCwxNiwxKSk6QmxiKGEuYyk7YS5hPW5ldyBSa2I7ZD0wO2ZvcihnPW5ldyBvbGIoYik7Zy5hPGcuYy5jLmxlbmd0aDspe2U9QkQobWxiKGcpLDEwKTtlLnA9ZCsrfWM9bmV3IFBzYjtmb3IoZj1uZXcgb2xiKGIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7aWYoIWEuY1tlLnBdKXt0RGMoYSxlKTtjLmI9PTB8fChzQ2IoYy5iIT0wKSxCRChjLmEuYS5jLDE1KSkuZ2MoKTxhLmEuYy5sZW5ndGg/RXNiKGMsYS5hKTpGc2IoYyxhLmEpO2EuYT1uZXcgUmtifX1yZXR1cm4gY31cbmZ1bmN0aW9uIGpZYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvO2c9QkQocXVkKGIsMCksMzMpO2RsZChnLDApO2VsZChnLDApO209bmV3IFJrYjttLmNbbS5jLmxlbmd0aF09ZztoPWc7Zj1uZXcgZCRjKGEuYSxnLmcsZy5mLChrJGMoKSxqJGMpKTtmb3Iobj0xO248Yi5pO24rKyl7bz1CRChxdWQoYixuKSwzMyk7aT1rWWMoYSxnJGMsbyxoLGYsbSxjKTtqPWtZYyhhLGYkYyxvLGgsZixtLGMpO2s9a1ljKGEsaSRjLG8saCxmLG0sYyk7bD1rWWMoYSxoJGMsbyxoLGYsbSxjKTtlPW1ZYyhhLGksaixrLGwsbyxoLGQpO2RsZChvLGUuZCk7ZWxkKG8sZS5lKTtjJGMoZSxqJGMpO2Y9ZTtoPW87bS5jW20uYy5sZW5ndGhdPW99cmV0dXJuIGZ9XG5mdW5jdGlvbiBLMGMoYSl7cjRjKGEsbmV3IEUzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyxhc2UpLCdFTEsgU1BPckUgT3ZlcmxhcCBSZW1vdmFsJyksJ0Egbm9kZSBvdmVybGFwIHJlbW92YWwgYWxnb3JpdGhtIHByb3Bvc2VkIGJ5IE5hY2htYW5zb24gZXQgYWwuIGluIFwiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWVcIi4nKSxuZXcgTjBjKSkpO3A0YyhhLGFzZSxRcmUsS3NkKEkwYykpO3A0YyhhLGFzZSxhbWUsRzBjKTtwNGMoYSxhc2Usd21lLDgpO3A0YyhhLGFzZSxWcmUsS3NkKEgwYykpO3A0YyhhLGFzZSxZcmUsS3NkKEUwYykpO3A0YyhhLGFzZSxacmUsS3NkKEYwYykpO3A0YyhhLGFzZSxacGUsKEJjYigpLGZhbHNlKSl9XG5mdW5jdGlvbiBzWGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG47Zz1PNmMoYi5jLGMsZCk7Zm9yKGw9bmV3IG9sYihiLmEpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxMCk7UDZjKGsubixnKTtmb3Iobj1uZXcgb2xiKGsuaik7bi5hPG4uYy5jLmxlbmd0aDspe209QkQobWxiKG4pLDExKTtmb3IoZj1uZXcgb2xiKG0uZyk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDE3KTtxN2MoZS5hLGcpO2g9QkQodk5iKGUsKE55YygpLGp4YykpLDc0KTshIWgmJnE3YyhoLGcpO2ZvcihqPW5ldyBvbGIoZS5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksNzApO1A2YyhpLm4sZyl9fX1Fa2IoYS5hLGspO2suYT1hfX1cbmZ1bmN0aW9uIGc5YihhLGIpe3ZhciBjLGQsZSxmLGc7T2RkKGIsJ05vZGUgYW5kIFBvcnQgTGFiZWwgUGxhY2VtZW50IGFuZCBOb2RlIFNpemluZycsMSk7TUdiKChhJGIoKSxuZXcgbCRiKGEsdHJ1ZSx0cnVlLG5ldyBqOWIpKSk7aWYoQkQodk5iKGEsKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSkpe2Y9QkQodk5iKGEsKE55YygpLFl4YykpLDIxKTtlPWYuSGMoKHJjZCgpLG9jZCkpO2c9Q2NiKEREKHZOYihhLFp4YykpKTtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDI5KTtNQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGMuYSwxNikpLG5ldyBsOWIpLG5ldyBuOWIoZixlLGcpKX19UWRkKGIpfVxuZnVuY3Rpb24gWTBkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2M9Yi5IaChhLmEpO2lmKGMpe2g9R0QoQUFkKCghYy5iJiYoYy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsYykpLGMuYiksZXVlKSk7aWYoaCE9bnVsbCl7ZT1rZmIoaCx3ZmIoMzUpKTtkPWIuSGooKTtpZihlPT0tMSl7Zz11MWQoYSxiS2QoZCkpO2Y9aH1lbHNlIGlmKGU9PTApe2c9bnVsbDtmPWguc3Vic3RyKDEpfWVsc2V7Zz1oLnN1YnN0cigwLGUpO2Y9aC5zdWJzdHIoZSsxKX1zd2l0Y2goJDFkKHExZChhLGIpKSl7Y2FzZSAyOmNhc2UgMzp7cmV0dXJuIGoxZChhLGQsZyxmKX1jYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6e3JldHVybiBtMWQoYSxkLGcsZil9fX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBxMmQoYSxiLGMpe3ZhciBkLGUsZixnLGg7Zz0oUTZkKCksQkQoYiw2NikuT2ooKSk7aWYoVDZkKGEuZSxiKSl7aWYoYi5oaSgpJiZGMmQoYSxiLGMsSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wKSl7cmV0dXJuIGZhbHNlfX1lbHNle2g9UzZkKGEuZS5UZygpLGIpO2Q9QkQoYS5nLDExOSk7Zm9yKGY9MDtmPGEuaTsrK2Ype2U9ZFtmXTtpZihoLnJsKGUuYWsoKSkpe2lmKGc/cGIoZSxjKTpjPT1udWxsP2UuZGQoKT09bnVsbDpwYihjLGUuZGQoKSkpe3JldHVybiBmYWxzZX1lbHNle0JEKEd0ZChhLGYsZz9CRChjLDcyKTpSNmQoYixjKSksNzIpO3JldHVybiB0cnVlfX19fXJldHVybiB3dGQoYSxnP0JEKGMsNzIpOlI2ZChiLGMpKX1cbmZ1bmN0aW9uIHVWYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2lmKGEuZCl7dGhyb3cgdmJiKG5ldyBaZGIoKGZkYihMUCksSmtlK0xQLmsrS2tlKSkpfWEuYz09KGVhZCgpLGNhZCkmJnRWYihhLGFhZCk7Zm9yKGM9bmV3IG9sYihhLmEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDE4OSk7Yi5lPTB9Zm9yKGc9bmV3IG9sYihhLmEuYik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDgxKTtmLm89UWplO2ZvcihlPWYuZi5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDgxKTsrK2QuZC5lfX1KVmIoYSk7Zm9yKGk9bmV3IG9sYihhLmEuYik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDgxKTtoLms9dHJ1ZX1yZXR1cm4gYX1cbmZ1bmN0aW9uIElqYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aD1uZXcgcGpjKGEpO2M9bmV3IFBzYjtHc2IoYyxiLGMuYy5iLGMuYyk7d2hpbGUoYy5iIT0wKXtkPUJEKGMuYj09MD9udWxsOihzQ2IoYy5iIT0wKSxOc2IoYyxjLmEuYSkpLDExMyk7ZC5kLnA9MTtmb3IoZz1uZXcgb2xiKGQuZSk7Zy5hPGcuYy5jLmxlbmd0aDspe2U9QkQobWxiKGcpLDQwOSk7a2pjKGgsZSk7aj1lLmQ7ai5kLnA9PTAmJihHc2IoYyxqLGMuYy5iLGMuYyksdHJ1ZSl9Zm9yKGY9bmV3IG9sYihkLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSw0MDkpO2tqYyhoLGUpO2k9ZS5jO2kuZC5wPT0wJiYoR3NiKGMsaSxjLmMuYixjLmMpLHRydWUpfX1yZXR1cm4gaH1cbmZ1bmN0aW9uIGhmZChhKXt2YXIgYixjLGQsZSxmO2Q9RWRiKEVEKGhrZChhLChZOWMoKSxHOWMpKSkpO2lmKGQ9PTEpe3JldHVybn1fa2QoYSxkKmEuZyxkKmEuZik7Yz1NcShScSgoIWEuYyYmKGEuYz1uZXcgY1VkKEYyLGEsOSw5KSksYS5jKSxuZXcgSGZkKSk7Zm9yKGY9dWwocGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsWyghYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKSxhLm4pLCghYS5jJiYoYS5jPW5ldyBjVWQoRjIsYSw5LDkpKSxhLmMpLGNdKSkpO1FyKGYpOyl7ZT1CRChScihmKSw0NzApO2UuR2coZCplLkRnKCksZCplLkVnKCkpO2UuRmcoZCplLkNnKCksZCplLkJnKCkpO2I9QkQoZS5XZShyOWMpLDgpO2lmKGIpe2IuYSo9ZDtiLmIqPWR9fX1cbmZ1bmN0aW9uIE1hYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG07Zm9yKGc9bmV3IG9sYihhLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7bT1sX2IoZi5hKTtmb3Ioaj1tLGs9MCxsPWoubGVuZ3RoO2s8bDsrK2spe2k9altrXTtzd2l0Y2goQkQodk5iKGksKE55YygpLG14YykpLDE2MykuZyl7Y2FzZSAxOlFhYyhpKTskX2IoaSxiKTtOYWMoaSx0cnVlLGQpO2JyZWFrO2Nhc2UgMzpSYWMoaSk7JF9iKGksYyk7TmFjKGksZmFsc2UsZSk7fX19aD1uZXcgQmliKGEuYiwwKTt3aGlsZShoLmI8aC5kLmdjKCkpeyhzQ2IoaC5iPGguZC5nYygpKSxCRChoLmQuWGIoaC5jPWguYisrKSwyOSkpLmEuYy5sZW5ndGg9PTAmJnVpYihoKX19XG5mdW5jdGlvbiBkMWQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPWIuSGgoYS5hKTtpZihjKXtpPUdEKEFBZCgoIWMuYiYmKGMuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGMpKSxjLmIpLER3ZSkpO2lmKGkhPW51bGwpe2Q9bmV3IFJrYjtmb3IoZj1tZmIoaSwnXFxcXHcnKSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107ZGZiKGUsJyMjb3RoZXInKT9Fa2IoZCwnISMjJyt1MWQoYSxiS2QoYi5IaigpKSkpOmRmYihlLCcjI2xvY2FsJyk/KGQuY1tkLmMubGVuZ3RoXT1udWxsLHRydWUpOmRmYihlLEJ3ZSk/RWtiKGQsdTFkKGEsYktkKGIuSGooKSkpKTooZC5jW2QuYy5sZW5ndGhdPWUsdHJ1ZSl9cmV0dXJuIGR9fXJldHVybiBtbWIoKSxtbWIoKSxqbWJ9XG5mdW5jdGlvbiBrTWIoYSxiKXt2YXIgYyxkLGUsZjtjPW5ldyBwTWI7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLEV5YiksRHliXSkpKSwyMSk7ZT1kLmdjKCk7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbRXliLER5Yl0pKSksMjEpO2Y9ZC5nYygpO2U9ZT09MT8xOjA7Zj1mPT0xPzE6MDtpZihlPGYpe3JldHVybiAtMX1pZihlPT1mKXtyZXR1cm4gMH1yZXR1cm4gMX1cbmZ1bmN0aW9uIGhaYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07aD1hLmk7ZT1DY2IoREQodk5iKGgsKE55YygpLGZ4YykpKSk7az0wO2Q9MDtmb3Ioaj1uZXcgb2xiKGEuZyk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDE3KTtnPU9aYihpKTtmPWcmJmUmJkNjYihERCh2TmIoaSxneGMpKSk7bT1pLmQuaTtnJiZmPysrZDpnJiYhZj8rK2s6UV9iKG0pLmU9PWg/KytkOisra31mb3IoYz1uZXcgb2xiKGEuZSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDE3KTtnPU9aYihiKTtmPWcmJmUmJkNjYihERCh2TmIoYixneGMpKSk7bD1iLmMuaTtnJiZmPysrazpnJiYhZj8rK2Q6UV9iKGwpLmU9PWg/KytrOisrZH1yZXR1cm4gay1kfVxuZnVuY3Rpb24gVUxjKGEsYixjLGQpe3RoaXMuZT1hO3RoaXMuaz1CRCh2TmIoYSwod3RjKCksb3RjKSksMzA0KTt0aGlzLmc9S0MoT1Esa25lLDEwLGIsMCwxKTt0aGlzLmI9S0MoQkksbmllLDMzMyxiLDcsMSk7dGhpcy5hPUtDKE9RLGtuZSwxMCxiLDAsMSk7dGhpcy5kPUtDKEJJLG5pZSwzMzMsYiw3LDEpO3RoaXMuaj1LQyhPUSxrbmUsMTAsYiwwLDEpO3RoaXMuaT1LQyhCSSxuaWUsMzMzLGIsNywxKTt0aGlzLnA9S0MoQkksbmllLDMzMyxiLDcsMSk7dGhpcy5uPUtDKHdJLG5pZSw0NzYsYiw4LDEpO0FsYih0aGlzLm4sKEJjYigpLGZhbHNlKSk7dGhpcy5mPUtDKHdJLG5pZSw0NzYsYiw4LDEpO0FsYih0aGlzLmYsdHJ1ZSk7dGhpcy5vPWM7dGhpcy5jPWR9XG5mdW5jdGlvbiBYOWIoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoYi5kYygpKXtyZXR1cm59aWYoQkQoYi5YYigwKSwyODYpLmQ9PShBcGMoKSx4cGMpKXtPOWIoYSxiKX1lbHNle2ZvcihkPWIuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSwyODYpO3N3aXRjaChjLmQuZyl7Y2FzZSA1Oks5YihhLGMsUTliKGEsYykpO2JyZWFrO2Nhc2UgMDpLOWIoYSxjLChnPWMuZi1jLmMrMSxoPShnLTEpLzJ8MCxjLmMraCkpO2JyZWFrO2Nhc2UgNDpLOWIoYSxjLFM5YihhLGMpKTticmVhaztjYXNlIDI6WTliKGMpO0s5YihhLGMsKGY9VTliKGMpLGY/Yy5jOmMuZikpO2JyZWFrO2Nhc2UgMTpZOWIoYyk7SzliKGEsYywoZT1VOWIoYyksZT9jLmY6Yy5jKSk7fVA5YihjLmEpfX19XG5mdW5jdGlvbiBDNGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihiLmUpe3JldHVybn1iLmU9dHJ1ZTtmb3IoZD1iLmQuYS5lYygpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTcpO2lmKGIubyYmYi5kLmEuZ2MoKTw9MSl7Zz1iLmEuYztoPWIuYS5jK2IuYS5iO2k9bmV3IGY3YyhnKyhoLWcpLzIsYi5iKTtEc2IoQkQoYi5kLmEuZWMoKS5LYygpLlBiKCksMTcpLmEsaSk7Y29udGludWV9ZT1CRChPaGIoYi5jLGMpLDQ1OSk7aWYoZS5ifHxlLmMpe0U0YihhLGMsYik7Y29udGludWV9Zj1hLmQ9PSh0QmMoKSxzQmMpJiYoZS5kfHxlLmUpJiZLNGIoYSxiKSYmYi5kLmEuZ2MoKTw9MTtmP0Y0YihjLGIpOkQ0YihhLGMsYil9Yi5rJiZyZWIoYi5kLG5ldyBYNGIpfVxuZnVuY3Rpb24gelhjKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O209ZjtoPShkK2UpLzIrbTtxPWMqJHduZC5NYXRoLmNvcyhoKTtyPWMqJHduZC5NYXRoLnNpbihoKTtzPXEtYi5nLzI7dD1yLWIuZi8yO2RsZChiLHMpO2VsZChiLHQpO2w9YS5hLmpnKGIpO3A9Miokd25kLk1hdGguYWNvcyhjL2MrYS5jKTtpZihwPGUtZCl7bj1wL2w7Zz0oZCtlLXApLzJ9ZWxzZXtuPShlLWQpL2w7Zz1kfW89Z1ZjKGIpO2lmKGEuZSl7YS5lLmtnKGEuZCk7YS5lLmxnKG8pfWZvcihqPW5ldyBvbGIobyk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDMzKTtrPWEuYS5qZyhpKTt6WGMoYSxpLGMrYS5jLGcsZytuKmssZik7Zys9biprfX1cbmZ1bmN0aW9uIGpBKGEsYixjKXt2YXIgZDtkPWMucS5nZXRNb250aCgpO3N3aXRjaChiKXtjYXNlIDU6UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbJ0onLCdGJywnTScsJ0EnLCdNJywnSicsJ0onLCdBJywnUycsJ08nLCdOJywnRCddKVtkXSk7YnJlYWs7Y2FzZSA0OlFmYihhLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2JqZSxjamUsZGplLGVqZSxmamUsZ2plLGhqZSxpamUsamplLGtqZSxsamUsbWplXSlbZF0pO2JyZWFrO2Nhc2UgMzpRZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxmamUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKVtkXSk7YnJlYWs7ZGVmYXVsdDpFQShhLGQrMSxiKTt9fVxuZnVuY3Rpb24gdUdiKGEsYil7dmFyIGMsZCxlLGYsZztPZGQoYiwnTmV0d29yayBzaW1wbGV4JywxKTtpZihhLmUuYS5jLmxlbmd0aDwxKXtRZGQoYik7cmV0dXJufWZvcihmPW5ldyBvbGIoYS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMjEpO2UuZT0wfWc9YS5lLmEuYy5sZW5ndGg+PTQwO2cmJkZHYihhKTt3R2IoYSk7dkdiKGEpO2M9ekdiKGEpO2Q9MDt3aGlsZSghIWMmJmQ8YS5mKXt0R2IoYSxjLHNHYihhLGMpKTtjPXpHYihhKTsrK2R9ZyYmRUdiKGEpO2EuYT9xR2IoYSxDR2IoYSkpOkNHYihhKTthLmI9bnVsbDthLmQ9bnVsbDthLnA9bnVsbDthLmM9bnVsbDthLmc9bnVsbDthLmk9bnVsbDthLm49bnVsbDthLm89bnVsbDtRZGQoYil9XG5mdW5jdGlvbiBKUWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO2k9bmV3IGY3YyhjLGQpO2M3YyhpLEJEKHZOYihiLChIU2IoKSxFU2IpKSw4KSk7Zm9yKG09bmV3IG9sYihiLmUpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSwxNDQpO1A2YyhsLmQsaSk7RWtiKGEuZSxsKX1mb3IoaD1uZXcgb2xiKGIuYyk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDI4Mik7Zm9yKGY9bmV3IG9sYihnLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSw1NTkpO1A2YyhlLmQsaSl9RWtiKGEuYyxnKX1mb3Ioaz1uZXcgb2xiKGIuZCk7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDQ0Nyk7UDZjKGouZCxpKTtFa2IoYS5kLGopfX1cbmZ1bmN0aW9uIF9CYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Zm9yKGk9bmV3IG9sYihiLmopO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMSk7Zm9yKGU9bmV3IGIxYihoLmIpO2xsYihlLmEpfHxsbGIoZS5iKTspe2Q9QkQobGxiKGUuYSk/bWxiKGUuYSk6bWxiKGUuYiksMTcpO2M9ZC5jPT1oP2QuZDpkLmM7Zj1jLmk7aWYoYj09Zil7Y29udGludWV9aj1CRCh2TmIoZCwoTnljKCksY3ljKSksMTkpLmE7ajwwJiYoaj0wKTtnPWYucDtpZihhLmJbZ109PTApe2lmKGQuZD09Yyl7YS5hW2ddLT1qKzE7YS5hW2ddPD0wJiZhLmNbZ10+MCYmRHNiKGEuZixmKX1lbHNle2EuY1tnXS09aisxO2EuY1tnXTw9MCYmYS5hW2ddPjAmJkRzYihhLmUsZil9fX19fVxuZnVuY3Rpb24gX0tiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtoPW5ldyBIeGIoQkQoUWIobmV3IG5MYiksNjIpKTtqPVFqZTtmb3IoYz1uZXcgb2xiKGEuZCk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDIyMik7aj1iLmMuYzt3aGlsZShoLmEuYyE9MCl7aT1CRCh6amIoQndiKGguYSkpLDIyMik7aWYoaS5jLmMraS5jLmI8ail7SndiKGguYSxpKSE9bnVsbH1lbHNle2JyZWFrfX1mb3IoZz0oZT1uZXcgWXdiKChuZXcgY3hiKChuZXcgR2piKGguYSkpLmEpKS5iKSxuZXcgTmpiKGUpKTtzaWIoZy5hLmEpOyl7Zj0oZD1Xd2IoZy5hKSxCRChkLmNkKCksMjIyKSk7RHNiKGYuYixiKTtEc2IoYi5iLGYpfUl3YihoLmEsYiwoQmNiKCksemNiKSk9PW51bGx9fVxuZnVuY3Rpb24gUUVjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7Zj1uZXcgU2tiKGIuYy5sZW5ndGgpO2ZvcihqPW5ldyBvbGIoYik7ai5hPGouYy5jLmxlbmd0aDspe2c9QkQobWxiKGopLDEwKTtFa2IoZixhLmJbZy5jLnBdW2cucF0pfUxFYyhhLGYsYyk7bD1udWxsO3doaWxlKGw9TUVjKGYpKXtORWMoYSxCRChsLmEsMjMzKSxCRChsLmIsMjMzKSxmKX1iLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2ZvcihlPW5ldyBvbGIoZik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDIzMyk7Zm9yKGg9ZC5kLGk9MCxrPWgubGVuZ3RoO2k8azsrK2kpe2c9aFtpXTtiLmNbYi5jLmxlbmd0aF09ZzthLmFbZy5jLnBdW2cucF0uYT1SRWMoZC5nLGQuZFswXSkuYX19fVxuZnVuY3Rpb24gSlJjKGEsYil7dmFyIGMsZCxlLGY7aWYoMDwoSkQoYSwxNCk/QkQoYSwxNCkuZ2MoKTpzcihhLktjKCkpKSl7ZT1iO2lmKDE8ZSl7LS1lO2Y9bmV3IEtSYztmb3IoZD1hLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksODYpO2Y9cGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW2YsbmV3IFpSYyhjKV0pKX1yZXR1cm4gSlJjKGYsZSl9aWYoZTwwKXtmPW5ldyBOUmM7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9QkQoZC5QYigpLDg2KTtmPXBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFtmLG5ldyBaUmMoYyldKSl9aWYoMDwoSkQoZiwxNCk/QkQoZiwxNCkuZ2MoKTpzcihmLktjKCkpKSl7cmV0dXJuIEpSYyhmLGUpfX19cmV0dXJuIEJEKHByKGEuS2MoKSksODYpfVxuZnVuY3Rpb24gSWRkKCl7SWRkPWNjYjtCZGQ9bmV3IEpkZCgnREVGQVVMVF9NSU5JTVVNX1NJWkUnLDApO0RkZD1uZXcgSmRkKCdNSU5JTVVNX1NJWkVfQUNDT1VOVFNfRk9SX1BBRERJTkcnLDEpO0FkZD1uZXcgSmRkKCdDT01QVVRFX1BBRERJTkcnLDIpO0VkZD1uZXcgSmRkKCdPVVRTSURFX05PREVfTEFCRUxTX09WRVJIQU5HJywzKTtGZGQ9bmV3IEpkZCgnUE9SVFNfT1ZFUkhBTkcnLDQpO0hkZD1uZXcgSmRkKCdVTklGT1JNX1BPUlRfU1BBQ0lORycsNSk7R2RkPW5ldyBKZGQoJ1NQQUNFX0VGRklDSUVOVF9QT1JUX0xBQkVMUycsNik7Q2RkPW5ldyBKZGQoJ0ZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMnLDcpO3pkZD1uZXcgSmRkKCdBU1lNTUVUUklDQUwnLDgpfVxuZnVuY3Rpb24gczZkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZighYil7cmV0dXJuIG51bGx9ZWxzZXtjPShmPWIuVGcoKSwhZj9udWxsOmJLZChmKS5OaCgpLkpoKGYpKTtpZihjKXtYcmIoYSxiLGMpO2U9Yi5UZygpO2ZvcihpPTAsaj0oZS5pPT1udWxsJiZUS2QoZSksZS5pKS5sZW5ndGg7aTxqOysraSl7aD0oZD0oZS5pPT1udWxsJiZUS2QoZSksZS5pKSxpPj0wJiZpPGQubGVuZ3RoP2RbaV06bnVsbCk7aWYoaC5JaigpJiYhaC5KaigpKXtpZihKRChoLDMyMikpe3U2ZChhLEJEKGgsMzQpLGIsYyl9ZWxzZXtnPUJEKGgsMTgpOyhnLkJiJm90ZSkhPTAmJnc2ZChhLGcsYixjKX19fWIua2goKSYmQkQoYyw0OSkudmgoQkQoYiw0OSkucWgoKSl9cmV0dXJuIGN9fVxuZnVuY3Rpb24gdEdiKGEsYixjKXt2YXIgZCxlLGY7aWYoIWIuZil7dGhyb3cgdmJiKG5ldyBXZGIoJ0dpdmVuIGxlYXZlIGVkZ2UgaXMgbm8gdHJlZSBlZGdlLicpKX1pZihjLmYpe3Rocm93IHZiYihuZXcgV2RiKCdHaXZlbiBlbnRlciBlZGdlIGlzIGEgdHJlZSBlZGdlIGFscmVhZHkuJykpfWIuZj1mYWxzZTtTcWIoYS5wLGIpO2MuZj10cnVlO1FxYihhLnAsYyk7ZD1jLmUuZS1jLmQuZS1jLmE7eEdiKGEsYy5lLGIpfHwoZD0tZCk7Zm9yKGY9bmV3IG9sYihhLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEyMSk7eEdiKGEsZSxiKXx8KGUuZSs9ZCl9YS5qPTE7QmxiKGEuYyk7REdiKGEsQkQobWxiKG5ldyBvbGIoYS5lLmEpKSwxMjEpKTtyR2IoYSl9XG5mdW5jdGlvbiB4NmIoYSxiKXt2YXIgYyxkLGUsZixnLGg7aD1CRCh2TmIoYiwoTnljKCksVnhjKSksOTgpO2lmKCEoaD09KGRjZCgpLF9iZCl8fGg9PSRiZCkpe3JldHVybn1lPShuZXcgZjdjKGIuZi5hK2IuZC5iK2IuZC5jLGIuZi5iK2IuZC5kK2IuZC5hKSkuYjtmb3IoZz1uZXcgb2xiKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtpZihmLmshPShqMGIoKSxlMGIpKXtjb250aW51ZX1jPUJEKHZOYihmLCh3dGMoKSxIc2MpKSw2MSk7aWYoYyE9KFVjZCgpLHpjZCkmJmMhPVRjZCl7Y29udGludWV9ZD1FZGIoRUQodk5iKGYsaHRjKSkpO2g9PV9iZCYmKGQqPWUpO2Yubi5iPWQtQkQodk5iKGYsVHhjKSw4KS5iO01fYihmLGZhbHNlLHRydWUpfX1cbmZ1bmN0aW9uIFlEYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbjtiRWMoYSxiLGMpO2Y9YltjXTtuPWQ/KFVjZCgpLFRjZCk6KFVjZCgpLHpjZCk7aWYoWkRjKGIubGVuZ3RoLGMsZCkpe2U9YltkP2MtMTpjKzFdO1VEYyhhLGUsZD8oS0FjKCksSUFjKTooS0FjKCksSEFjKSk7Zm9yKGk9ZixrPTAsbT1pLmxlbmd0aDtrPG07KytrKXtnPWlba107WERjKGEsZyxuKX1VRGMoYSxmLGQ/KEtBYygpLEhBYyk6KEtBYygpLElBYykpO2ZvcihoPWUsaj0wLGw9aC5sZW5ndGg7ajxsOysrail7Zz1oW2pdOyEhZy5lfHxYRGMoYSxnLFdjZChuKSl9fWVsc2V7Zm9yKGg9ZixqPTAsbD1oLmxlbmd0aDtqPGw7KytqKXtnPWhbal07WERjKGEsZyxuKX19cmV0dXJuIGZhbHNlfVxuZnVuY3Rpb24gbkZjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2k9Vl9iKGIsYyk7KGM9PShVY2QoKSxSY2QpfHxjPT1UY2QpJiYoaT1KRChpLDE1Mik/a20oQkQoaSwxNTIpKTpKRChpLDEzMSk/QkQoaSwxMzEpLmE6SkQoaSw1NCk/bmV3IG92KGkpOm5ldyBkdihpKSk7Zz1mYWxzZTtkb3tlPWZhbHNlO2ZvcihmPTA7ZjxpLmdjKCktMTtmKyspe2o9QkQoaS5YYihmKSwxMSk7aD1CRChpLlhiKGYrMSksMTEpO2lmKG9GYyhhLGosaCxkKSl7Zz10cnVlO2NJYyhhLmEsQkQoaS5YYihmKSwxMSksQkQoaS5YYihmKzEpLDExKSk7az1CRChpLlhiKGYrMSksMTEpO2kuX2MoZisxLEJEKGkuWGIoZiksMTEpKTtpLl9jKGYsayk7ZT10cnVlfX19d2hpbGUoZSk7cmV0dXJuIGd9XG5mdW5jdGlvbiBXMmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbztpZihvaWQoYS5lKSl7aWYoYiE9Yyl7ZT1CRChhLmcsMTE5KTtuPWVbY107Zz1uLmFrKCk7aWYoVDZkKGEuZSxnKSl7bz1TNmQoYS5lLlRnKCksZyk7aT0tMTtoPS0xO2Q9MDtmb3Ioaj0wLGw9Yj5jP2I6YztqPD1sOysrail7aWYoaj09Yyl7aD1kKyt9ZWxzZXtmPWVbal07az1vLnJsKGYuYWsoKSk7aj09YiYmKGk9aj09bCYmIWs/ZC0xOmQpO2smJisrZH19bT1CRChXeGQoYSxiLGMpLDcyKTtoIT1pJiZHTGQoYSxuZXcgRVNkKGEuZSw3LGcsbWViKGgpLG4uZGQoKSxpKSk7cmV0dXJuIG19fX1lbHNle3JldHVybiBCRChzdWQoYSxiLGMpLDcyKX1yZXR1cm4gQkQoV3hkKGEsYixjKSw3Mil9XG5mdW5jdGlvbiBRY2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtPZGQoYiwnUG9ydCBvcmRlciBwcm9jZXNzaW5nJywxKTtpPUJEKHZOYihhLChOeWMoKSxfeGMpKSw0MjEpO2ZvcihkPW5ldyBvbGIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjkpO2ZvcihmPW5ldyBvbGIoYy5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTApO2c9QkQodk5iKGUsVnhjKSw5OCk7aD1lLmo7aWYoZz09KGRjZCgpLFpiZCl8fGc9PV9iZHx8Zz09JGJkKXttbWIoKTtPa2IoaCxJY2MpfWVsc2UgaWYoZyE9YmNkJiZnIT1jY2Qpe21tYigpO09rYihoLExjYyk7U2NjKGgpO2k9PShCQWMoKSxBQWMpJiZPa2IoaCxLY2MpfWUuaT10cnVlO05fYihlKX19UWRkKGIpfVxuZnVuY3Rpb24gdkRjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7aT1uZXcgTHFiO2I9bmV3IEtGYjtmb3IoZz1hLktjKCk7Zy5PYigpOyl7ZT1CRChnLlBiKCksMTApO2g9bkdiKG9HYihuZXcgcEdiLGUpLGIpO2pyYihpLmYsZSxoKX1mb3IoZj1hLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksMTApO2ZvcihkPW5ldyBTcih1cihVX2IoZSkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7aWYoT1piKGMpKXtjb250aW51ZX1BRmIoREZiKENGYihCRmIoRUZiKG5ldyBGRmIsJHduZC5NYXRoLm1heCgxLEJEKHZOYihjLChOeWMoKSxkeWMpKSwxOSkuYSkpLDEpLEJEKE9oYihpLGMuYy5pKSwxMjEpKSxCRChPaGIoaSxjLmQuaSksMTIxKSkpfX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHROYygpe3ROYz1jY2I7b05jPWUzYyhuZXcgajNjLChxVWIoKSxvVWIpLChTOGIoKSxrOGIpKTtxTmM9ZTNjKG5ldyBqM2MsblViLG84Yik7ck5jPWMzYyhlM2MobmV3IGozYyxuVWIsQzhiKSxwVWIsQjhiKTtuTmM9YzNjKGUzYyhlM2MobmV3IGozYyxuVWIsZThiKSxvVWIsZjhiKSxwVWIsZzhiKTtzTmM9YjNjKGIzYyhnM2MoYzNjKGUzYyhuZXcgajNjLGxVYixNOGIpLHBVYixMOGIpLG9VYiksSzhiKSxOOGIpO3BOYz1jM2MobmV3IGozYyxwVWIsbDhiKTtsTmM9YzNjKGUzYyhlM2MoZTNjKG5ldyBqM2MsbVViLHI4Yiksb1ViLHQ4Yiksb1ViLHU4YikscFViLHM4Yik7bU5jPWMzYyhlM2MoZTNjKG5ldyBqM2Msb1ViLHU4Yiksb1ViLF83YikscFViLCQ3Yil9XG5mdW5jdGlvbiBYQyhhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsLG07aj0kQyhiKS0kQyhhKTtnPWtEKGIsaik7aT1UQygwLDAsMCk7d2hpbGUoaj49MCl7aD1iRChhLGcpO2lmKGgpe2o8MjI/KGkubHw9MTw8aix1bmRlZmluZWQpOmo8NDQ/KGkubXw9MTw8ai0yMix1bmRlZmluZWQpOihpLmh8PTE8PGotNDQsdW5kZWZpbmVkKTtpZihhLmw9PTAmJmEubT09MCYmYS5oPT0wKXticmVha319az1nLm07bD1nLmg7bT1nLmw7Zy5oPWw+Pj4xO2cubT1rPj4+MXwobCYxKTw8MjE7Zy5sPW0+Pj4xfChrJjEpPDwyMTstLWp9YyYmWkMoaSk7aWYoZil7aWYoZCl7UUM9aEQoYSk7ZSYmKFFDPW5EKFFDLCh3RCgpLHVEKSkpfWVsc2V7UUM9VEMoYS5sLGEubSxhLmgpfX1yZXR1cm4gaX1cbmZ1bmN0aW9uIFREYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2o9YS5lW2IuYy5wXVtiLnBdKzE7aT1iLmMuYS5jLmxlbmd0aCsxO2ZvcihoPW5ldyBvbGIoYS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTEpO2w9MDtmPTA7Zm9yKGU9dWwocGwoT0MoR0MoS0ksMSksVWhlLDIwLDAsW25ldyBKMGIoZyksbmV3IFIwYihnKV0pKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDExKTtpZihkLmkuYz09Yi5jKXtsKz1hRWMoYSxkLmkpKzE7KytmfX1jPWwvZjtrPWcuajtrPT0oVWNkKCksemNkKT9jPGo/KGEuZltnLnBdPWEuYy1jKTooYS5mW2cucF09YS5iKyhpLWMpKTprPT1UY2QmJihjPGo/KGEuZltnLnBdPWEuYitjKTooYS5mW2cucF09YS5jLShpLWMpKSl9fVxuZnVuY3Rpb24gSWNiKGEsYixjKXt2YXIgZCxlLGYsZyxoO2lmKGE9PW51bGwpe3Rocm93IHZiYihuZXcgT2ViKFhoZSkpfWY9YS5sZW5ndGg7Zz1mPjAmJihCQ2IoMCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KDApPT00NXx8KEJDYigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCk9PTQzKSk/MTowO2ZvcihkPWc7ZDxmO2QrKyl7aWYoWmNiKChCQ2IoZCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGQpKSk9PS0xKXt0aHJvdyB2YmIobmV3IE9lYihPamUrYSsnXCInKSl9fWg9cGFyc2VJbnQoYSwxMCk7ZT1oPGI7aWYoaXNOYU4oaCkpe3Rocm93IHZiYihuZXcgT2ViKE9qZSthKydcIicpKX1lbHNlIGlmKGV8fGg+Yyl7dGhyb3cgdmJiKG5ldyBPZWIoT2plK2ErJ1wiJykpfXJldHVybiBofVxuZnVuY3Rpb24gZG5jKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2c9bmV3IFBzYjtmb3IoZj1uZXcgb2xiKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDExMik7cE9jKGUsZS5mLmMubGVuZ3RoKTtxT2MoZSxlLmsuYy5sZW5ndGgpO2lmKGUuaT09MCl7ZS5vPTA7R3NiKGcsZSxnLmMuYixnLmMpfX13aGlsZShnLmIhPTApe2U9QkQoZy5iPT0wP251bGw6KHNDYihnLmIhPTApLE5zYihnLGcuYS5hKSksMTEyKTtkPWUubysxO2ZvcihjPW5ldyBvbGIoZS5mKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTI5KTtoPWIuYTtyT2MoaCwkd25kLk1hdGgubWF4KGgubyxkKSk7cU9jKGgsaC5pLTEpO2guaT09MCYmKEdzYihnLGgsZy5jLmIsZy5jKSx0cnVlKX19fVxuZnVuY3Rpb24gdjJjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7Zm9yKGc9bmV3IG9sYihhKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksNzkpO2Q9YXRkKEJEKHF1ZCgoIWYuYiYmKGYuYj1uZXcgeTVkKHoyLGYsNCw3KSksZi5iKSwwKSw4MikpO2g9ZC5pO2k9ZC5qO2U9QkQocXVkKCghZi5hJiYoZi5hPW5ldyBjVWQoQTIsZiw2LDYpKSxmLmEpLDApLDIwMik7bm1kKGUsZS5qK2gsZS5rK2kpO2dtZChlLGUuYitoLGUuYytpKTtmb3IoYz1uZXcgRnlkKCghZS5hJiYoZS5hPW5ldyB4TWQoeTIsZSw1KSksZS5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDQ2OSk7dWtkKGIsYi5hK2gsYi5iK2kpfXA3YyhCRChoa2QoZiwoWTljKCksUThjKSksNzQpLGgsaSl9fVxuZnVuY3Rpb24gZmVlKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDEwMDpyZXR1cm4ga2VlKG54ZSx0cnVlKTtjYXNlIDY4OnJldHVybiBrZWUobnhlLGZhbHNlKTtjYXNlIDExOTpyZXR1cm4ga2VlKG94ZSx0cnVlKTtjYXNlIDg3OnJldHVybiBrZWUob3hlLGZhbHNlKTtjYXNlIDExNTpyZXR1cm4ga2VlKHB4ZSx0cnVlKTtjYXNlIDgzOnJldHVybiBrZWUocHhlLGZhbHNlKTtjYXNlIDk5OnJldHVybiBrZWUocXhlLHRydWUpO2Nhc2UgNjc6cmV0dXJuIGtlZShxeGUsZmFsc2UpO2Nhc2UgMTA1OnJldHVybiBrZWUocnhlLHRydWUpO2Nhc2UgNzM6cmV0dXJuIGtlZShyeGUsZmFsc2UpO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBoeigoYj1hLG14ZStiLnRvU3RyaW5nKDE2KSkpKTt9fVxuZnVuY3Rpb24gJFhiKGEpe3ZhciBiLGMsZCxlLGY7ZT1CRChJa2IoYS5hLDApLDEwKTtiPW5ldyBiMGIoYSk7RWtiKGEuYSxiKTtiLm8uYT0kd25kLk1hdGgubWF4KDEsZS5vLmEpO2Iuby5iPSR3bmQuTWF0aC5tYXgoMSxlLm8uYik7Yi5uLmE9ZS5uLmE7Yi5uLmI9ZS5uLmI7c3dpdGNoKEJEKHZOYihlLCh3dGMoKSxIc2MpKSw2MSkuZyl7Y2FzZSA0OmIubi5hKz0yO2JyZWFrO2Nhc2UgMTpiLm4uYis9MjticmVhaztjYXNlIDI6Yi5uLmEtPTI7YnJlYWs7Y2FzZSAzOmIubi5iLT0yO31kPW5ldyBIMGI7RjBiKGQsYik7Yz1uZXcgVVpiO2Y9QkQoSWtiKGUuaiwwKSwxMSk7UVpiKGMsZik7UlpiKGMsZCk7UDZjKFg2YyhkLm4pLGYubik7UDZjKFg2YyhkLmEpLGYuYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBGYWMoYSxiLGMsZCxlKXtpZihjJiYoIWR8fChhLmMtYS5iJmEuYS5sZW5ndGgtMSk+MSkmJmI9PTEmJkJEKGEuYVthLmJdLDEwKS5rPT0oajBiKCksZjBiKSl7emFjKEJEKGEuYVthLmJdLDEwKSwocmJkKCksbmJkKSl9ZWxzZSBpZihkJiYoIWN8fChhLmMtYS5iJmEuYS5sZW5ndGgtMSk+MSkmJmI9PTEmJkJEKGEuYVthLmMtMSZhLmEubGVuZ3RoLTFdLDEwKS5rPT0oajBiKCksZjBiKSl7emFjKEJEKGEuYVthLmMtMSZhLmEubGVuZ3RoLTFdLDEwKSwocmJkKCksb2JkKSl9ZWxzZSBpZigoYS5jLWEuYiZhLmEubGVuZ3RoLTEpPT0yKXt6YWMoQkQoYmtiKGEpLDEwKSwocmJkKCksbmJkKSk7emFjKEJEKGJrYihhKSwxMCksb2JkKX1lbHNle3dhYyhhLGUpfVlqYihhKX1cbmZ1bmN0aW9uIHBSYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtmPTA7Zm9yKGU9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtlLmUhPWUuaS5nYygpOyl7ZD1CRChEeWQoZSksMzMpO2c9Jyc7KCFkLm4mJihkLm49bmV3IGNVZChEMixkLDEsNykpLGQubikuaT09MHx8KGc9QkQocXVkKCghZC5uJiYoZC5uPW5ldyBjVWQoRDIsZCwxLDcpKSxkLm4pLDApLDEzNykuYSk7aD1uZXcgWFJjKGYrKyxiLGcpO3ROYihoLGQpO3lOYihoLChtVGMoKSxkVGMpLGQpO2guZS5iPWQuaitkLmYvMjtoLmYuYT0kd25kLk1hdGgubWF4KGQuZywxKTtoLmUuYT1kLmkrZC5nLzI7aC5mLmI9JHduZC5NYXRoLm1heChkLmYsMSk7RHNiKGIuYixoKTtqcmIoYy5mLGQsaCl9fVxuZnVuY3Rpb24gQjJiKGEpe3ZhciBiLGMsZCxlLGY7ZD1CRCh2TmIoYSwod3RjKCksJHNjKSksMzMpO2Y9QkQoaGtkKGQsKE55YygpLEZ4YykpLDE3NCkuSGMoKHRkZCgpLHNkZCkpO2lmKCFhLmUpe2U9QkQodk5iKGEsS3NjKSwyMSk7Yj1uZXcgZjdjKGEuZi5hK2EuZC5iK2EuZC5jLGEuZi5iK2EuZC5kK2EuZC5hKTtpZihlLkhjKChPcmMoKSxIcmMpKSl7amtkKGQsVnhjLChkY2QoKSwkYmQpKTtBZmQoZCxiLmEsYi5iLGZhbHNlLHRydWUpfWVsc2V7Q2NiKEREKGhrZChkLEd4YykpKXx8QWZkKGQsYi5hLGIuYix0cnVlLHRydWUpfX1mP2prZChkLEZ4YyxwcWIoc2RkKSk6amtkKGQsRnhjLChjPUJEKGdkYihJMSksOSksbmV3IHhxYihjLEJEKF9CYihjLGMubGVuZ3RoKSw5KSwwKSkpfVxuZnVuY3Rpb24gdEEoYSxiLGMpe3ZhciBkLGUsZixnO2lmKGJbMF0+PWEubGVuZ3RoKXtjLm89MDtyZXR1cm4gdHJ1ZX1zd2l0Y2goYmZiKGEsYlswXSkpe2Nhc2UgNDM6ZT0xO2JyZWFrO2Nhc2UgNDU6ZT0tMTticmVhaztkZWZhdWx0OmMubz0wO3JldHVybiB0cnVlO30rK2JbMF07Zj1iWzBdO2c9ckEoYSxiKTtpZihnPT0wJiZiWzBdPT1mKXtyZXR1cm4gZmFsc2V9aWYoYlswXTxhLmxlbmd0aCYmYmZiKGEsYlswXSk9PTU4KXtkPWcqNjA7KytiWzBdO2Y9YlswXTtnPXJBKGEsYik7aWYoZz09MCYmYlswXT09Zil7cmV0dXJuIGZhbHNlfWQrPWd9ZWxzZXtkPWc7ZDwyNCYmYlswXS1mPD0yPyhkKj02MCk6KGQ9ZCUxMDArKGQvMTAwfDApKjYwKX1kKj1lO2Mubz0tZDtyZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIEhqYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7Zz1uZXcgUmtiO2ZvcihkPW5ldyBTcih1cihVX2IoYS5iKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDE3KTtPWmIoYykmJkVrYihnLG5ldyBHamMoYyxKamMoYSxjLmMpLEpqYyhhLGMuZCkpKX1mb3Ioaj0oZj0obmV3ICRpYihhLmUpKS5hLnZjKCkuS2MoKSxuZXcgZGpiKGYpKTtqLmEuT2IoKTspe2g9KGI9QkQoai5hLlBiKCksNDIpLEJEKGIuZGQoKSwxMTMpKTtoLmQucD0wfWZvcihpPShlPShuZXcgJGliKGEuZSkpLmEudmMoKS5LYygpLG5ldyBkamIoZSkpO2kuYS5PYigpOyl7aD0oYj1CRChpLmEuUGIoKSw0MiksQkQoYi5kZCgpLDExMykpO2guZC5wPT0wJiZFa2IoYS5kLElqYyhhLGgpKX19XG5mdW5jdGlvbiBXMWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zj1tcGQoYSk7Zm9yKGU9bmV3IEZ5ZCgoIWEuZSYmKGEuZT1uZXcgeTVkKEIyLGEsNyw0KSksYS5lKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDc5KTtoPWF0ZChCRChxdWQoKCFkLmMmJihkLmM9bmV3IHk1ZCh6MixkLDUsOCkpLGQuYyksMCksODIpKTtpZighbnRkKGgsZikpe3JldHVybiB0cnVlfX1mb3IoYz1uZXcgRnlkKCghYS5kJiYoYS5kPW5ldyB5NWQoQjIsYSw4LDUpKSxhLmQpKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChEeWQoYyksNzkpO2c9YXRkKEJEKHF1ZCgoIWIuYiYmKGIuYj1uZXcgeTVkKHoyLGIsNCw3KSksYi5iKSwwKSw4MikpO2lmKCFudGQoZyxmKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIERtYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2k9bmV3IHM3YztiPUpzYihhLDApO2g9bnVsbDtjPUJEKFhzYihiKSw4KTtlPUJEKFhzYihiKSw4KTt3aGlsZShiLmIhPWIuZC5jKXtoPWM7Yz1lO2U9QkQoWHNiKGIpLDgpO2Y9RW1jKGM3YyhuZXcgZjdjKGguYSxoLmIpLGMpKTtnPUVtYyhjN2MobmV3IGY3YyhlLmEsZS5iKSxjKSk7ZD0xMDtkPSR3bmQuTWF0aC5taW4oZCwkd25kLk1hdGguYWJzKGYuYStmLmIpLzIpO2Q9JHduZC5NYXRoLm1pbihkLCR3bmQuTWF0aC5hYnMoZy5hK2cuYikvMik7Zi5hPUVlYihmLmEpKmQ7Zi5iPUVlYihmLmIpKmQ7Zy5hPUVlYihnLmEpKmQ7Zy5iPUVlYihnLmIpKmQ7RHNiKGksUDZjKGYsYykpO0RzYihpLFA2YyhnLGMpKX1yZXR1cm4gaX1cbmZ1bmN0aW9uIF9oZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2c9YS5laCgpO2k9YS5aZygpO2U9bnVsbDtpZihpKXtpZighIWImJihOaWQoYSxiLGMpLkJiJlRqZSk9PTApe2Q9VHhkKGkuVmsoKSxhLGQpO2EudWgobnVsbCk7ZT1iLmZoKCl9ZWxzZXtpPW51bGx9fWVsc2V7ISFnJiYoaT1nLmZoKCkpOyEhYiYmKGU9Yi5maCgpKX1pIT1lJiYhIWkmJmkuWmsoYSk7aD1hLlZnKCk7YS5SZyhiLGMpO2khPWUmJiEhZSYmZS5ZayhhKTtpZihhLkxnKCkmJmEuTWcoKSl7aWYoISFnJiZoPj0wJiZoIT1jKXtmPW5ldyBuU2QoYSwxLGgsZyxudWxsKTshZD8oZD1mKTpkLkVpKGYpfWlmKGM+PTApe2Y9bmV3IG5TZChhLDEsYyxoPT1jP2c6bnVsbCxiKTshZD8oZD1mKTpkLkVpKGYpfX1yZXR1cm4gZH1cbmZ1bmN0aW9uIExFZChhKXt2YXIgYixjLGQ7aWYoYS5iPT1udWxsKXtkPW5ldyBIZmI7aWYoYS5pIT1udWxsKXtFZmIoZCxhLmkpO2QuYSs9JzonfWlmKChhLmYmMjU2KSE9MCl7aWYoKGEuZiYyNTYpIT0wJiZhLmEhPW51bGwpe1lFZChhLmkpfHwoZC5hKz0nLy8nLGQpO0VmYihkLGEuYSl9aWYoYS5kIT1udWxsKXtkLmErPScvJztFZmIoZCxhLmQpfShhLmYmMTYpIT0wJiYoZC5hKz0nLycsZCk7Zm9yKGI9MCxjPWEuai5sZW5ndGg7YjxjO2IrKyl7YiE9MCYmKGQuYSs9Jy8nLGQpO0VmYihkLGEualtiXSl9aWYoYS5nIT1udWxsKXtkLmErPSc/JztFZmIoZCxhLmcpfX1lbHNle0VmYihkLGEuYSl9aWYoYS5lIT1udWxsKXtkLmErPScjJztFZmIoZCxhLmUpfWEuYj1kLmF9cmV0dXJuIGEuYn1cbmZ1bmN0aW9uIEU1YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtmb3IoZT1uZXcgb2xiKGIuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEwKTtmPXZOYihkLCh3dGMoKSwkc2MpKTtpZihKRChmLDExKSl7Zz1CRChmLDExKTtoPWJfYihiLGQsZy5vLmEsZy5vLmIpO2cubi5hPWguYTtnLm4uYj1oLmI7RzBiKGcsQkQodk5iKGQsSHNjKSw2MSkpfX1jPW5ldyBmN2MoYi5mLmErYi5kLmIrYi5kLmMsYi5mLmIrYi5kLmQrYi5kLmEpO2lmKEJEKHZOYihiLCh3dGMoKSxLc2MpKSwyMSkuSGMoKE9yYygpLEhyYykpKXt5TmIoYSwoTnljKCksVnhjKSwoZGNkKCksJGJkKSk7QkQodk5iKFFfYihhKSxLc2MpLDIxKS5GYyhLcmMpO2pfYihhLGMsZmFsc2UpfWVsc2V7al9iKGEsYyx0cnVlKX19XG5mdW5jdGlvbiBZRmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtPZGQoYywnTWluaW1pemUgQ3Jvc3NpbmdzICcrYS5hLDEpO2Q9Yi5iLmMubGVuZ3RoPT0wfHwhV0FiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmIsMTYpKSxuZXcgWHhiKG5ldyB4R2MpKSkuc2QoKEVBYigpLERBYikpO2k9Yi5iLmMubGVuZ3RoPT0xJiZCRChJa2IoYi5iLDApLDI5KS5hLmMubGVuZ3RoPT0xO2Y9UEQodk5iKGIsKE55YygpLGF4YykpKT09PVBEKChoYmQoKSxlYmQpKTtpZihkfHxpJiYhZil7UWRkKGMpO3JldHVybn1lPVRGYyhhLGIpO2c9KGg9QkQoVXQoZSwwKSwyMTQpLGguYy5SZigpP2guYy5MZigpP25ldyBrR2MoYSk6bmV3IG1HYyhhKTpuZXcgaUdjKGEpKTtVRmMoZSxnKTtlR2MoYSk7UWRkKGMpfVxuZnVuY3Rpb24gc28oYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpPVRiYihJYmIoRWllLGtlYihUYmIoSWJiKGI9PW51bGw/MDp0YihiKSxGaWUpKSwxNSkpKTtlPVRiYihJYmIoRWllLGtlYihUYmIoSWJiKGM9PW51bGw/MDp0YihjKSxGaWUpKSwxNSkpKTtoPXZvKGEsYixpKTtnPXVvKGEsYyxlKTtpZighIWgmJmU9PWguYSYmSGIoYyxoLmcpKXtyZXR1cm4gY31lbHNlIGlmKCEhZyYmIWQpe3Rocm93IHZiYihuZXcgV2RiKCdrZXkgYWxyZWFkeSBwcmVzZW50OiAnK2MpKX0hIWgmJm1vKGEsaCk7ISFnJiZtbyhhLGcpO2Y9bmV3ICRvKGMsZSxiLGkpO3BvKGEsZixnKTtpZihnKXtnLmU9bnVsbDtnLmM9bnVsbH1pZihoKXtoLmU9bnVsbDtoLmM9bnVsbH10byhhKTtyZXR1cm4gIWg/bnVsbDpoLmd9XG5mdW5jdGlvbiBMaGIoYSxiLGMpe3ZhciBkLGUsZixnLGg7Zm9yKGY9MDtmPGI7ZisrKXtkPTA7Zm9yKGg9ZisxO2g8YjtoKyspe2Q9d2JiKHdiYihJYmIoeGJiKGFbZl0sWWplKSx4YmIoYVtoXSxZamUpKSx4YmIoY1tmK2hdLFlqZSkpLHhiYihUYmIoZCksWWplKSk7Y1tmK2hdPVRiYihkKTtkPVBiYihkLDMyKX1jW2YrYl09VGJiKGQpfWtoYihjLGMsYjw8MSk7ZD0wO2ZvcihlPTAsZz0wO2U8YjsrK2UsZysrKXtkPXdiYih3YmIoSWJiKHhiYihhW2VdLFlqZSkseGJiKGFbZV0sWWplKSkseGJiKGNbZ10sWWplKSkseGJiKFRiYihkKSxZamUpKTtjW2ddPVRiYihkKTtkPVBiYihkLDMyKTsrK2c7ZD13YmIoZCx4YmIoY1tnXSxZamUpKTtjW2ddPVRiYihkKTtkPVBiYihkLDMyKX1yZXR1cm4gY31cbmZ1bmN0aW9uIFpKYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztpZihRcShiKSl7cmV0dXJufWk9RWRiKEVEKHBCYyhjLmMsKE55YygpLHp5YykpKSk7aj1CRChwQmMoYy5jLHl5YyksMTQyKTshaiYmKGo9bmV3IEhfYik7ZD1jLmE7ZT1udWxsO2ZvcihoPWIuS2MoKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwxMSk7az0wO2lmKCFlKXtrPWouZH1lbHNle2s9aTtrKz1lLm8uYn1mPW5HYihvR2IobmV3IHBHYixnKSxhLmYpO1JoYihhLmssZyxmKTtBRmIoREZiKENGYihCRmIoRUZiKG5ldyBGRmIsMCksUUQoJHduZC5NYXRoLmNlaWwoaykpKSxkKSxmKSk7ZT1nO2Q9Zn1BRmIoREZiKENGYihCRmIoRUZiKG5ldyBGRmIsMCksUUQoJHduZC5NYXRoLmNlaWwoai5hK2Uuby5iKSkpLGQpLGMuZCkpfVxuZnVuY3Rpb24gdVpjKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksaixrLGwsbSxuO249ZmFsc2U7bT1mLWMucztrPWMudC1iLmYrKGo9TVpjKGMsbSxmYWxzZSksai5hKTtpZihkLmcraD5tKXtyZXR1cm4gZmFsc2V9bD0oaT1NWmMoZCxtLGZhbHNlKSxpLmEpO2lmKGsraCtsPD1iLmIpe0taYyhjLGYtYy5zKTtjLmM9dHJ1ZTtLWmMoZCxmLWMucyk7T1pjKGQsYy5zLGMudCtjLmQraCk7ZC5rPXRydWU7V1pjKGMucSxkKTtuPXRydWU7aWYoZSl7cyRjKGIsZCk7ZC5qPWI7aWYoYS5jLmxlbmd0aD5nKXt2JGMoKHRDYihnLGEuYy5sZW5ndGgpLEJEKGEuY1tnXSwyMDApKSxkKTsodENiKGcsYS5jLmxlbmd0aCksQkQoYS5jW2ddLDIwMCkpLmEuYy5sZW5ndGg9PTAmJktrYihhLGcpfX19cmV0dXJuIG59XG5mdW5jdGlvbiBrY2MoYSxiKXt2YXIgYyxkLGUsZixnLGg7T2RkKGIsJ1BhcnRpdGlvbiBtaWRwcm9jZXNzaW5nJywxKTtlPW5ldyBIcDtNQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuYSwxNikpLG5ldyBvY2MpLG5ldyBxY2MoZSkpO2lmKGUuZD09MCl7cmV0dXJufWg9QkQoR0FiKFVBYigoZj1lLmksbmV3IFlBYihudWxsLCghZj8oZS5pPW5ldyB6ZihlLGUuYykpOmYpLk5jKCkpKSksQnliKG5ldyBmemIsbmV3IGR6YixuZXcgRXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLER5YildKSkpLDE1KTtkPWguS2MoKTtjPUJEKGQuUGIoKSwxOSk7d2hpbGUoZC5PYigpKXtnPUJEKGQuUGIoKSwxOSk7amNjKEJEKFFjKGUsYyksMjEpLEJEKFFjKGUsZyksMjEpKTtjPWd9UWRkKGIpfVxuZnVuY3Rpb24gRFliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2lmKGIucD09MCl7Yi5wPTE7Zz1jO2lmKCFnKXtlPW5ldyBSa2I7Zj0oZD1CRChnZGIoRjEpLDkpLG5ldyB4cWIoZCxCRChfQmIoZCxkLmxlbmd0aCksOSksMCkpO2c9bmV3IHZnZChlLGYpfUJEKGcuYSwxNSkuRmMoYik7Yi5rPT0oajBiKCksZTBiKSYmQkQoZy5iLDIxKS5GYyhCRCh2TmIoYiwod3RjKCksSHNjKSksNjEpKTtmb3IoaT1uZXcgb2xiKGIuaik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDExKTtmb3Ioaz11bChwbChPQyhHQyhLSSwxKSxVaGUsMjAsMCxbbmV3IEowYihoKSxuZXcgUjBiKGgpXSkpKTtRcihrKTspe2o9QkQoUnIoayksMTEpO0RZYihhLGouaSxnKX19cmV0dXJuIGd9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBEbWQoYSxiKXt2YXIgYyxkLGUsZixnO2lmKGEuQWIpe2lmKGEuQWIpe2c9YS5BYi5pO2lmKGc+MCl7ZT1CRChhLkFiLmcsMTkzNCk7aWYoYj09bnVsbCl7Zm9yKGY9MDtmPGc7KytmKXtjPWVbZl07aWYoYy5kPT1udWxsKXtyZXR1cm4gY319fWVsc2V7Zm9yKGY9MDtmPGc7KytmKXtjPWVbZl07aWYoZGZiKGIsYy5kKSl7cmV0dXJuIGN9fX19fWVsc2V7aWYoYj09bnVsbCl7Zm9yKGQ9bmV3IEZ5ZChhLkFiKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksNTkwKTtpZihjLmQ9PW51bGwpe3JldHVybiBjfX19ZWxzZXtmb3IoZD1uZXcgRnlkKGEuQWIpO2QuZSE9ZC5pLmdjKCk7KXtjPUJEKER5ZChkKSw1OTApO2lmKGRmYihiLGMuZCkpe3JldHVybiBjfX19fX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGdSYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aj1ERCh2TmIoYiwoSlRjKCksR1RjKSkpO2lmKGo9PW51bGx8fCh1Q2Ioaiksaikpe2RSYyhhLGIpO2U9bmV3IFJrYjtmb3IoaT1Kc2IoYi5iLDApO2kuYiE9aS5kLmM7KXtnPUJEKFhzYihpKSw4Nik7Yz1jUmMoYSxnLG51bGwpO2lmKGMpe3ROYihjLGIpO2UuY1tlLmMubGVuZ3RoXT1jfX1hLmE9bnVsbDthLmI9bnVsbDtpZihlLmMubGVuZ3RoPjEpe2ZvcihkPW5ldyBvbGIoZSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDEzNSk7Zj0wO2ZvcihoPUpzYihjLmIsMCk7aC5iIT1oLmQuYzspe2c9QkQoWHNiKGgpLDg2KTtnLmc9ZisrfX19cmV0dXJuIGV9cmV0dXJuIE91KE9DKEdDKG4kLDEpLGZtZSwxMzUsMCxbYl0pKX1cbmZ1bmN0aW9uIHJxZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixwLHEscixzLHQsdSx2O249U3FkKGEsZXRkKGIpLGUpO2ptZChuLF9wZChlLFZ0ZSkpO289bnVsbDtwPWU7cT0kcGQocCxZdGUpO3I9bmV3IHVyZChuKTt3cWQoci5hLHEpO3M9JHBkKHAsJ2VuZFBvaW50Jyk7dD1uZXcgeXJkKG4pO3lxZCh0LmEscyk7dT1ZcGQocCxPdGUpO3Y9bmV3IEJyZChuKTt6cWQodi5hLHUpO2w9X3BkKGUsUXRlKTtmPW5ldyBxcmQoYSxuKTtzcWQoZi5hLGYuYixsKTttPV9wZChlLFB0ZSk7Zz1uZXcgcnJkKGEsbik7dHFkKGcuYSxnLmIsbSk7aj1ZcGQoZSxTdGUpO2g9bmV3IHNyZChjLG4pO3VxZChoLmIsaC5hLGopO2s9WXBkKGUsUnRlKTtpPW5ldyB0cmQoZCxuKTt2cWQoaS5iLGkuYSxrKX1cbmZ1bmN0aW9uIGlfYihhLGIsYyl7dmFyIGQsZSxmLGcsaDtoPW51bGw7c3dpdGNoKGIuZyl7Y2FzZSAxOmZvcihlPW5ldyBvbGIoYS5qKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTEpO2lmKENjYihERCh2TmIoZCwod3RjKCksTXNjKSkpKSl7cmV0dXJuIGR9fWg9bmV3IEgwYjt5TmIoaCwod3RjKCksTXNjKSwoQmNiKCksdHJ1ZSkpO2JyZWFrO2Nhc2UgMjpmb3IoZz1uZXcgb2xiKGEuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDExKTtpZihDY2IoREQodk5iKGYsKHd0YygpLGV0YykpKSkpe3JldHVybiBmfX1oPW5ldyBIMGI7eU5iKGgsKHd0YygpLGV0YyksKEJjYigpLHRydWUpKTt9aWYoaCl7RjBiKGgsYSk7RzBiKGgsYyk7WCRiKGgubixhLm8sYyl9cmV0dXJuIGh9XG5mdW5jdGlvbiBPM2IoYSxiKXt2YXIgYyxkLGUsZixnLGg7aD0tMTtnPW5ldyBQc2I7Zm9yKGQ9bmV3IGIxYihhLmIpO2xsYihkLmEpfHxsbGIoZC5iKTspe2M9QkQobGxiKGQuYSk/bWxiKGQuYSk6bWxiKGQuYiksMTcpO2g9JHduZC5NYXRoLm1heChoLEVkYihFRCh2TmIoYywoTnljKCksWndjKSkpKSk7Yy5jPT1hP01BYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYy5iLDE2KSksbmV3IFUzYiksbmV3IFczYihnKSk6TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihjLmIsMTYpKSxuZXcgWTNiKSxuZXcgJDNiKGcpKTtmb3IoZj1Kc2IoZywwKTtmLmIhPWYuZC5jOyl7ZT1CRChYc2IoZiksNzApO3dOYihlLCh3dGMoKSxEc2MpKXx8eU5iKGUsRHNjLGMpfUdrYihiLGcpO09zYihnKX1yZXR1cm4gaH1cbmZ1bmN0aW9uIF9iYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2Y9bmV3IGIwYihhKTtfX2IoZiwoajBiKCksaTBiKSk7eU5iKGYsKE55YygpLFZ4YyksKGRjZCgpLCRiZCkpO3lOYihmLCh3dGMoKSwkc2MpLGIuYy5pKTtnPW5ldyBIMGI7eU5iKGcsJHNjLGIuYyk7RzBiKGcsZSk7RjBiKGcsZik7eU5iKGIuYyxndGMsZik7aD1uZXcgYjBiKGEpO19fYihoLGkwYik7eU5iKGgsVnhjLCRiZCk7eU5iKGgsJHNjLGIuZC5pKTtpPW5ldyBIMGI7eU5iKGksJHNjLGIuZCk7RzBiKGksZSk7RjBiKGksaCk7eU5iKGIuZCxndGMsaCk7UVpiKGIsZyk7UlpiKGIsaSk7d0NiKDAsYy5jLmxlbmd0aCk7YUNiKGMuYywwLGYpO2QuY1tkLmMubGVuZ3RoXT1oO3lOYihmLHlzYyxtZWIoMSkpO3lOYihoLHlzYyxtZWIoMSkpfVxuZnVuY3Rpb24gQlBjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksajtoPWU/ZC5iOmQuYTtpZihScWIoYS5hLGQpKXtyZXR1cm59aj1oPmMucyYmaDxjLmM7aT1mYWxzZTtpZihjLmUuYiE9MCYmYy5qLmIhPTApe2k9aXwoJHduZC5NYXRoLmFicyhoLUVkYihFRChIc2IoYy5lKSkpKTxxbWUmJiR3bmQuTWF0aC5hYnMoaC1FZGIoRUQoSHNiKGMuaikpKSk8cW1lKTtpPWl8KCR3bmQuTWF0aC5hYnMoaC1FZGIoRUQoSXNiKGMuZSkpKSk8cW1lJiYkd25kLk1hdGguYWJzKGgtRWRiKEVEKElzYihjLmopKSkpPHFtZSl9aWYoanx8aSl7Zz1CRCh2TmIoYiwoTnljKCksanhjKSksNzQpO2lmKCFnKXtnPW5ldyBzN2M7eU5iKGIsanhjLGcpfWY9bmV3IGc3YyhkKTtHc2IoZyxmLGcuYy5iLGcuYyk7UXFiKGEuYSxmKX19XG5mdW5jdGlvbiBnTmIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoZk5iKGEsYixjLGQpKXtyZXR1cm4gdHJ1ZX1lbHNle2ZvcihnPW5ldyBvbGIoYi5mKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMzI0KTtoPWZhbHNlO2k9YS5qLWIuaitjO2o9aStiLm87az1hLmstYi5rK2Q7ZT1rK2IucDtzd2l0Y2goZi5hLmcpe2Nhc2UgMDpoPW9OYihhLGkrZi5iLmEsMCxpK2YuYy5hLGstMSk7YnJlYWs7Y2FzZSAxOmg9b05iKGEsaixrK2YuYi5hLGEuby0xLGsrZi5jLmEpO2JyZWFrO2Nhc2UgMjpoPW9OYihhLGkrZi5iLmEsZSxpK2YuYy5hLGEucC0xKTticmVhaztkZWZhdWx0Omg9b05iKGEsMCxrK2YuYi5hLGktMSxrK2YuYy5hKTt9aWYoaCl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBMTWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Zm9yKGc9bmV3IG9sYihiLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7Zm9yKGo9bmV3IG9sYihmLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMCk7az1uZXcgUmtiO2g9MDtmb3IoZD1uZXcgU3IodXIoUl9iKGkpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2lmKE9aYihjKXx8IU9aYihjKSYmYy5jLmkuYz09Yy5kLmkuYyl7Y29udGludWV9ZT1CRCh2TmIoYywoTnljKCksZXljKSksMTkpLmE7aWYoZT5oKXtoPWU7ay5jPUtDKFNJLFVoZSwxLDAsNSwxKX1lPT1oJiZFa2IoayxuZXcgdmdkKGMuYy5pLGMpKX1tbWIoKTtPa2IoayxhLmMpO0RrYihhLmIsaS5wLGspfX19XG5mdW5jdGlvbiBNTWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Zm9yKGc9bmV3IG9sYihiLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7Zm9yKGo9bmV3IG9sYihmLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMCk7az1uZXcgUmtiO2g9MDtmb3IoZD1uZXcgU3IodXIoVV9iKGkpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2lmKE9aYihjKXx8IU9aYihjKSYmYy5jLmkuYz09Yy5kLmkuYyl7Y29udGludWV9ZT1CRCh2TmIoYywoTnljKCksZXljKSksMTkpLmE7aWYoZT5oKXtoPWU7ay5jPUtDKFNJLFVoZSwxLDAsNSwxKX1lPT1oJiZFa2IoayxuZXcgdmdkKGMuZC5pLGMpKX1tbWIoKTtPa2IoayxhLmMpO0RrYihhLmYsaS5wLGspfX19XG5mdW5jdGlvbiBZN2MoYSl7cjRjKGEsbmV3IEUzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyxxc2UpLCdFTEsgQm94JyksJ0FsZ29yaXRobSBmb3IgcGFja2luZyBvZiB1bmNvbm5lY3RlZCBib3hlcywgaS5lLiBncmFwaHMgd2l0aG91dCBlZGdlcy4nKSxuZXcgXzdjKSkpO3A0YyhhLHFzZSxhbWUsVTdjKTtwNGMoYSxxc2Usd21lLDE1KTtwNGMoYSxxc2Usdm1lLG1lYigwKSk7cDRjKGEscXNlLEpyZSxLc2QoTzdjKSk7cDRjKGEscXNlLEZtZSxLc2QoUTdjKSk7cDRjKGEscXNlLEVtZSxLc2QoUzdjKSk7cDRjKGEscXNlLF9sZSxwc2UpO3A0YyhhLHFzZSxBbWUsS3NkKFA3YykpO3A0YyhhLHFzZSxUbWUsS3NkKFI3YykpO3A0YyhhLHFzZSxyc2UsS3NkKE03YykpO3A0YyhhLHFzZSxscWUsS3NkKE43YykpfVxuZnVuY3Rpb24gVyRiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2U9YS5pO2c9ZS5vLmE7Zj1lLm8uYjtpZihnPD0wJiZmPD0wKXtyZXR1cm4gVWNkKCksU2NkfWo9YS5uLmE7az1hLm4uYjtoPWEuby5hO2M9YS5vLmI7c3dpdGNoKGIuZyl7Y2FzZSAyOmNhc2UgMTppZihqPDApe3JldHVybiBVY2QoKSxUY2R9ZWxzZSBpZihqK2g+Zyl7cmV0dXJuIFVjZCgpLHpjZH1icmVhaztjYXNlIDQ6Y2FzZSAzOmlmKGs8MCl7cmV0dXJuIFVjZCgpLEFjZH1lbHNlIGlmKGsrYz5mKXtyZXR1cm4gVWNkKCksUmNkfX1pPShqK2gvMikvZztkPShrK2MvMikvZjtyZXR1cm4gaStkPD0xJiZpLWQ8PTA/KFVjZCgpLFRjZCk6aStkPj0xJiZpLWQ+PTA/KFVjZCgpLHpjZCk6ZDwwLjU/KFVjZCgpLEFjZCk6KFVjZCgpLFJjZCl9XG5mdW5jdGlvbiBwSmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2M9ZmFsc2U7az1FZGIoRUQodk5iKGIsKE55YygpLHZ5YykpKSk7bz1RaWUqaztmb3IoZT1uZXcgb2xiKGIuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtqPW5ldyBvbGIoZC5hKTtmPUJEKG1sYihqKSwxMCk7bD14SmMoYS5hW2YucF0pO3doaWxlKGouYTxqLmMuYy5sZW5ndGgpe2g9QkQobWxiKGopLDEwKTttPXhKYyhhLmFbaC5wXSk7aWYobCE9bSl7bj1qQmMoYS5iLGYsaCk7Zz1mLm4uYitmLm8uYitmLmQuYStsLmErbjtpPWgubi5iLWguZC5kK20uYTtpZihnPmkrbyl7cD1sLmcrbS5nO20uYT0obS5nKm0uYStsLmcqbC5hKS9wO20uZz1wO2wuZj1tO2M9dHJ1ZX19Zj1oO2w9bX19cmV0dXJuIGN9XG5mdW5jdGlvbiBWR2IoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtO209bmV3IEk2Yztmb3Ioaj1iLktjKCk7ai5PYigpOyl7aD1CRChqLlBiKCksODM5KTtmb3IobD1uZXcgb2xiKGgud2YoKSk7bC5hPGwuYy5jLmxlbmd0aDspe2s9QkQobWxiKGwpLDE4MSk7aWYoUEQoay5XZSgoWTljKCksQzhjKSkpPT09UEQoKHFhZCgpLHBhZCkpKXtTR2IobSxrLGZhbHNlLGQsZSxmLGcpO0g2YyhhLG0pfX19Zm9yKGk9Yy5LYygpO2kuT2IoKTspe2g9QkQoaS5QYigpLDgzOSk7Zm9yKGw9bmV3IG9sYihoLndmKCkpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxODEpO2lmKFBEKGsuV2UoKFk5YygpLEM4YykpKT09PVBEKChxYWQoKSxvYWQpKSl7U0diKG0sayx0cnVlLGQsZSxmLGcpO0g2YyhhLG0pfX19fVxuZnVuY3Rpb24gb1JjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtmb3IoZz1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwzMyk7Zm9yKGU9bmV3IFNyKHVyKF9zZChmKS5hLktjKCksbmV3IFNxKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDc5KTtpZighUGxkKGQpJiYhUGxkKGQpJiYhUWxkKGQpKXtpPUJEKFdkKGlyYihjLmYsZikpLDg2KTtqPUJEKE9oYihjLGF0ZChCRChxdWQoKCFkLmMmJihkLmM9bmV3IHk1ZCh6MixkLDUsOCkpLGQuYyksMCksODIpKSksODYpO2lmKCEhaSYmISFqKXtoPW5ldyBRUmMoaSxqKTt5TmIoaCwobVRjKCksZFRjKSxkKTt0TmIoaCxkKTtEc2IoaS5kLGgpO0RzYihqLmIsaCk7RHNiKGIuYSxoKX19fX19XG5mdW5jdGlvbiBRS2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihpPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7aS5PYigpOyl7aD1CRChpLlBiKCksMTExKTtlPWguYz9ZSGIoaC5jKTowO2lmKGU+MCl7aWYoaC5hKXtqPWguYi5yZigpLmI7aWYoZT5qKXtpZihhLnZ8fGguYy5kLmMubGVuZ3RoPT0xKXtnPShlLWopLzI7aC5kLmQ9ZztoLmQuYT1nfWVsc2V7Yz1CRChJa2IoaC5jLmQsMCksMTgxKS5yZigpLmI7ZD0oYy1qKS8yO2guZC5kPSR3bmQuTWF0aC5tYXgoMCxkKTtoLmQuYT1lLWQtan19fWVsc2V7aC5kLmE9YS50K2V9fWVsc2UgaWYodGNkKGEudSkpe2Y9c2ZkKGguYik7Zi5kPDAmJihoLmQuZD0tZi5kKTtmLmQrZi5hPmguYi5yZigpLmImJihoLmQuYT1mLmQrZi5hLWguYi5yZigpLmIpfX19XG5mdW5jdGlvbiBGQyhhLGIpe3ZhciBjO3N3aXRjaChIQyhhKSl7Y2FzZSA2OnJldHVybiBORChiKTtjYXNlIDc6cmV0dXJuIExEKGIpO2Nhc2UgODpyZXR1cm4gS0QoYik7Y2FzZSAzOnJldHVybiBBcnJheS5pc0FycmF5KGIpJiYoYz1IQyhiKSwhKGM+PTE0JiZjPD0xNikpO2Nhc2UgMTE6cmV0dXJuIGIhPW51bGwmJnR5cGVvZiBiPT09TmhlO2Nhc2UgMTI6cmV0dXJuIGIhPW51bGwmJih0eXBlb2YgYj09PUpoZXx8dHlwZW9mIGI9PU5oZSk7Y2FzZSAwOnJldHVybiBBRChiLGEuX19lbGVtZW50VHlwZUlkJCk7Y2FzZSAyOnJldHVybiBPRChiKSYmIShiLmltPT09Z2NiKTtjYXNlIDE6cmV0dXJuIE9EKGIpJiYhKGIuaW09PT1nY2IpfHxBRChiLGEuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4gdHJ1ZTt9fVxuZnVuY3Rpb24geE9iKGEsYil7dmFyIGMsZCxlLGY7ZD0kd25kLk1hdGgubWluKCR3bmQuTWF0aC5hYnMoYS5jLShiLmMrYi5iKSksJHduZC5NYXRoLmFicyhhLmMrYS5iLWIuYykpO2Y9JHduZC5NYXRoLm1pbigkd25kLk1hdGguYWJzKGEuZC0oYi5kK2IuYSkpLCR3bmQuTWF0aC5hYnMoYS5kK2EuYS1iLmQpKTtjPSR3bmQuTWF0aC5hYnMoYS5jK2EuYi8yLShiLmMrYi5iLzIpKTtpZihjPmEuYi8yK2IuYi8yKXtyZXR1cm4gMX1lPSR3bmQuTWF0aC5hYnMoYS5kK2EuYS8yLShiLmQrYi5hLzIpKTtpZihlPmEuYS8yK2IuYS8yKXtyZXR1cm4gMX1pZihjPT0wJiZlPT0wKXtyZXR1cm4gMH1pZihjPT0wKXtyZXR1cm4gZi9lKzF9aWYoZT09MCl7cmV0dXJuIGQvYysxfXJldHVybiAkd25kLk1hdGgubWluKGQvYyxmL2UpKzF9XG5mdW5jdGlvbiBtZ2IoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZT1wZ2IoYSk7aD1wZ2IoYik7aWYoZT09aCl7aWYoYS5lPT1iLmUmJmEuYTw1NCYmYi5hPDU0KXtyZXR1cm4gYS5mPGIuZj8tMTphLmY+Yi5mPzE6MH1kPWEuZS1iLmU7Yz0oYS5kPjA/YS5kOiR3bmQuTWF0aC5mbG9vcigoYS5hLTEpKlhqZSkrMSktKGIuZD4wP2IuZDokd25kLk1hdGguZmxvb3IoKGIuYS0xKSpYamUpKzEpO2lmKGM+ZCsxKXtyZXR1cm4gZX1lbHNlIGlmKGM8ZC0xKXtyZXR1cm4gLWV9ZWxzZXtmPSghYS5jJiYoYS5jPWZoYihhLmYpKSxhLmMpO2c9KCFiLmMmJihiLmM9ZmhiKGIuZikpLGIuYyk7ZDwwPyhmPU9nYihmLEtoYigtZCkpKTpkPjAmJihnPU9nYihnLEtoYihkKSkpO3JldHVybiBJZ2IoZixnKX19ZWxzZSByZXR1cm4gZTxoPy0xOjF9XG5mdW5jdGlvbiBtVGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtmPTA7aD0wO2k9MDtmb3IoZT1uZXcgb2xiKGEuZi5lKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTQ0KTtpZihiPT1kKXtjb250aW51ZX1nPWEuaVtiLmJdW2QuYl07Zis9ZztjPVM2YyhiLmQsZC5kKTtjPjAmJmEuZCE9KHlUYigpLHhUYikmJihoKz1nKihkLmQuYSthLmFbYi5iXVtkLmJdKihiLmQuYS1kLmQuYSkvYykpO2M+MCYmYS5kIT0oeVRiKCksdlRiKSYmKGkrPWcqKGQuZC5iK2EuYVtiLmJdW2QuYl0qKGIuZC5iLWQuZC5iKS9jKSl9c3dpdGNoKGEuZC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBmN2MoaC9mLGIuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBmN2MoYi5kLmEsaS9mKTtkZWZhdWx0OnJldHVybiBuZXcgZjdjKGgvZixpL2YpO319XG5mdW5jdGlvbiBXY2MoYSxiKXtPY2MoKTt2YXIgYyxkLGUsZixnO2c9QkQodk5iKGEuaSwoTnljKCksVnhjKSksOTgpO2Y9YS5qLmctYi5qLmc7aWYoZiE9MHx8IShnPT0oZGNkKCksWmJkKXx8Zz09X2JkfHxnPT0kYmQpKXtyZXR1cm4gMH1pZihnPT0oZGNkKCksWmJkKSl7Yz1CRCh2TmIoYSxXeGMpLDE5KTtkPUJEKHZOYihiLFd4YyksMTkpO2lmKCEhYyYmISFkKXtlPWMuYS1kLmE7aWYoZSE9MCl7cmV0dXJuIGV9fX1zd2l0Y2goYS5qLmcpe2Nhc2UgMTpyZXR1cm4gS2RiKGEubi5hLGIubi5hKTtjYXNlIDI6cmV0dXJuIEtkYihhLm4uYixiLm4uYik7Y2FzZSAzOnJldHVybiBLZGIoYi5uLmEsYS5uLmEpO2Nhc2UgNDpyZXR1cm4gS2RiKGIubi5iLGEubi5iKTtkZWZhdWx0OnRocm93IHZiYihuZXcgWmRiKGluZSkpO319XG5mdW5jdGlvbiB0ZmQoYSl7dmFyIGIsYyxkLGUsZixnO2M9KCFhLmEmJihhLmE9bmV3IHhNZCh5MixhLDUpKSxhLmEpLmkrMjtnPW5ldyBTa2IoYyk7RWtiKGcsbmV3IGY3YyhhLmosYS5rKSk7TUFiKG5ldyBZQWIobnVsbCwoIWEuYSYmKGEuYT1uZXcgeE1kKHkyLGEsNSkpLG5ldyBLdWIoYS5hLDE2KSkpLG5ldyBRZmQoZykpO0VrYihnLG5ldyBmN2MoYS5iLGEuYykpO2I9MTt3aGlsZShiPGcuYy5sZW5ndGgtMSl7ZD0odENiKGItMSxnLmMubGVuZ3RoKSxCRChnLmNbYi0xXSw4KSk7ZT0odENiKGIsZy5jLmxlbmd0aCksQkQoZy5jW2JdLDgpKTtmPSh0Q2IoYisxLGcuYy5sZW5ndGgpLEJEKGcuY1tiKzFdLDgpKTtkLmE9PWUuYSYmZS5hPT1mLmF8fGQuYj09ZS5iJiZlLmI9PWYuYj9La2IoZyxiKTorK2J9cmV0dXJuIGd9XG5mdW5jdGlvbiBYZ2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPXZEYih5RGIod0RiKHhEYihuZXcgekRiLGIpLG5ldyBLNmMoYi5lKSksR2djKSxhLmEpO2Iuai5jLmxlbmd0aD09MHx8bkRiKEJEKElrYihiLmosMCksNTcpLmEsYyk7aT1uZXcgbEViO1JoYihhLmUsYyxpKTtnPW5ldyBUcWI7aD1uZXcgVHFiO2ZvcihmPW5ldyBvbGIoYi5rKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTcpO1FxYihnLGUuYyk7UXFiKGgsZS5kKX1kPWcuYS5nYygpLWguYS5nYygpO2lmKGQ8MCl7akViKGksdHJ1ZSwoZWFkKCksYWFkKSk7akViKGksZmFsc2UsYmFkKX1lbHNlIGlmKGQ+MCl7akViKGksZmFsc2UsKGVhZCgpLGFhZCkpO2pFYihpLHRydWUsYmFkKX1Ia2IoYi5nLG5ldyAkaGMoYSxjKSk7UmhiKGEuZyxiLGMpfVxuZnVuY3Rpb24gTmViKCl7TmViPWNjYjt2YXIgYTtKZWI9T0MoR0MoV0QsMSksb2plLDI1LDE1LFstMSwtMSwzMCwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSk7S2ViPUtDKFdELG9qZSwyNSwzNywxNSwxKTtMZWI9T0MoR0MoV0QsMSksb2plLDI1LDE1LFstMSwtMSw2Myw0MCwzMiwyOCwyNSwyMywyMSwyMCwxOSwxOSwxOCwxOCwxNywxNywxNiwxNiwxNiwxNSwxNSwxNSwxNSwxNCwxNCwxNCwxNCwxNCwxNCwxMywxMywxMywxMywxMywxMywxMywxM10pO01lYj1LQyhYRCxTamUsMjUsMzcsMTQsMSk7Zm9yKGE9MjthPD0zNjthKyspe0tlYlthXT1RRCgkd25kLk1hdGgucG93KGEsSmViW2FdKSk7TWViW2FdPUFiYihyaWUsS2ViW2FdKX19XG5mdW5jdGlvbiBwZmQoYSl7dmFyIGI7aWYoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkuaSE9MSl7dGhyb3cgdmJiKG5ldyBXZGIoVHNlKyghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLmkpKX1iPW5ldyBzN2M7ISFidGQoQkQocXVkKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLDApLDgyKSkmJnllKGIscWZkKGEsYnRkKEJEKHF1ZCgoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKSwwKSw4MikpLGZhbHNlKSk7ISFidGQoQkQocXVkKCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLDApLDgyKSkmJnllKGIscWZkKGEsYnRkKEJEKHF1ZCgoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKSwwKSw4MikpLHRydWUpKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIF9NYyhhLGIpe3ZhciBjLGQsZSxmLGc7Yi5kPyhlPWEuYS5jPT0oWUxjKCksWExjKT9SX2IoYi5iKTpVX2IoYi5iKSk6KGU9YS5hLmM9PShZTGMoKSxXTGMpP1JfYihiLmIpOlVfYihiLmIpKTtmPWZhbHNlO2ZvcihkPW5ldyBTcih1cihlLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2c9Q2NiKGEuYS5mW2EuYS5nW2IuYi5wXS5wXSk7aWYoIWcmJiFPWmIoYykmJmMuYy5pLmM9PWMuZC5pLmMpe2NvbnRpbnVlfWlmKENjYihhLmEublthLmEuZ1tiLmIucF0ucF0pfHxDY2IoYS5hLm5bYS5hLmdbYi5iLnBdLnBdKSl7Y29udGludWV9Zj10cnVlO2lmKFJxYihhLmIsYS5hLmdbVE1jKGMsYi5iKS5wXSkpe2IuYz10cnVlO2IuYT1jO3JldHVybiBifX1iLmM9ZjtiLmE9bnVsbDtyZXR1cm4gYn1cbmZ1bmN0aW9uIGJlZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsO21tYigpO09rYihhLG5ldyBSZWQpO2g9bmV3IEJpYihhLDApO2w9bmV3IFJrYjtmPTA7d2hpbGUoaC5iPGguZC5nYygpKXtnPShzQ2IoaC5iPGguZC5nYygpKSxCRChoLmQuWGIoaC5jPWguYisrKSwxNTcpKTtpZihsLmMubGVuZ3RoIT0wJiZyZWQoZykqcWVkKGcpPmYqMil7az1uZXcgd2VkKGwpO2o9cmVkKGcpL3FlZChnKTtpPWZlZChrLGIsbmV3IHAwYixjLGQsZSxqKTtQNmMoWDZjKGsuZSksaSk7bC5jPUtDKFNJLFVoZSwxLDAsNSwxKTtmPTA7bC5jW2wuYy5sZW5ndGhdPWs7bC5jW2wuYy5sZW5ndGhdPWc7Zj1yZWQoaykqcWVkKGspK3JlZChnKSpxZWQoZyl9ZWxzZXtsLmNbbC5jLmxlbmd0aF09ZztmKz1yZWQoZykqcWVkKGcpfX1yZXR1cm4gbH1cbmZ1bmN0aW9uIHF3ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7ZD1jLmdjKCk7aWYoZD09MCl7cmV0dXJuIGZhbHNlfWVsc2V7aWYoYS5laigpKXtpPWEuZmooKTt6dmQoYSxiLGMpO2c9ZD09MT9hLlppKDMsbnVsbCxjLktjKCkuUGIoKSxiLGkpOmEuWmkoNSxudWxsLGMsYixpKTtpZihhLmJqKCkpe2g9ZDwxMDA/bnVsbDpuZXcgSXhkKGQpO2Y9YitkO2ZvcihlPWI7ZTxmOysrZSl7aj1hLk9pKGUpO2g9YS5jaihqLGgpO2g9aH1pZighaCl7YS4kaShnKX1lbHNle2guRWkoZyk7aC5GaSgpfX1lbHNle2EuJGkoZyl9fWVsc2V7enZkKGEsYixjKTtpZihhLmJqKCkpe2g9ZDwxMDA/bnVsbDpuZXcgSXhkKGQpO2Y9YitkO2ZvcihlPWI7ZTxmOysrZSl7aD1hLmNqKGEuT2koZSksaCl9ISFoJiZoLkZpKCl9fXJldHVybiB0cnVlfX1cbmZ1bmN0aW9uIHd3ZChhLGIsYyl7dmFyIGQsZSxmLGcsaDtpZihhLmVqKCkpe2U9bnVsbDtmPWEuZmooKTtkPWEuWmkoMSxoPShnPWEuVWkoYixhLm9pKGIsYykpLGcpLGMsYixmKTtpZihhLmJqKCkmJiEoYS5uaSgpJiYhIWg/cGIoaCxjKTpQRChoKT09PVBEKGMpKSl7ISFoJiYoZT1hLmRqKGgsZSkpO2U9YS5jaihjLGUpO2lmKCFlKXthLiRpKGQpfWVsc2V7ZS5FaShkKTtlLkZpKCl9fWVsc2V7aWYoIWUpe2EuJGkoZCl9ZWxzZXtlLkVpKGQpO2UuRmkoKX19cmV0dXJuIGh9ZWxzZXtoPShnPWEuVWkoYixhLm9pKGIsYykpLGcpO2lmKGEuYmooKSYmIShhLm5pKCkmJiEhaD9wYihoLGMpOlBEKGgpPT09UEQoYykpKXtlPW51bGw7ISFoJiYoZT1hLmRqKGgsbnVsbCkpO2U9YS5jaihjLGUpOyEhZSYmZS5GaSgpfXJldHVybiBofX1cbmZ1bmN0aW9uIHJSYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosazthLmU9YjthLmY9QkQodk5iKGIsKEhTYigpLEdTYikpLDIzMCk7aVJiKGIpO2EuZD0kd25kLk1hdGgubWF4KGIuZS5jLmxlbmd0aCoxNitiLmMuYy5sZW5ndGgsMjU2KTtpZighQ2NiKEREKHZOYihiLCh3U2IoKSxkU2IpKSkpKXtrPWEuZS5lLmMubGVuZ3RoO2ZvcihpPW5ldyBvbGIoYi5lKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTQ0KTtqPWguZDtqLmE9QXViKGEuZikqaztqLmI9QXViKGEuZikqa319Yz1iLmI7Zm9yKGY9bmV3IG9sYihiLmMpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyODIpO2Q9QkQodk5iKGUsclNiKSwxOSkuYTtpZihkPjApe2ZvcihnPTA7ZzxkO2crKyl7RWtiKGMsbmV3IGFSYihlKSl9Y1JiKGUpfX19XG5mdW5jdGlvbiB6YWMoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoYS5rPT0oajBiKCksZjBiKSl7Yz1XQWIoSkFiKEJEKHZOYihhLCh3dGMoKSxrdGMpKSwxNSkuT2MoKSxuZXcgWHhiKG5ldyBLYWMpKSkuc2QoKEVBYigpLERBYikpP2I6KHJiZCgpLHBiZCk7eU5iKGEsU3NjLGMpO2lmKGMhPShyYmQoKSxvYmQpKXtkPUJEKHZOYihhLCRzYyksMTcpO2g9RWRiKEVEKHZOYihkLChOeWMoKSxad2MpKSkpO2c9MDtpZihjPT1uYmQpe2c9YS5vLmItJHduZC5NYXRoLmNlaWwoaC8yKX1lbHNlIGlmKGM9PXBiZCl7YS5vLmItPUVkYihFRCh2TmIoUV9iKGEpLG55YykpKTtnPShhLm8uYi0kd25kLk1hdGguY2VpbChoKSkvMn1mb3IoZj1uZXcgb2xiKGEuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDExKTtlLm4uYj1nfX19fVxuZnVuY3Rpb24gVWdlKCl7VWdlPWNjYjtnNWQoKTtUZ2U9bmV3IFZnZTtPQyhHQyh3NSwyKSxuaWUsMzY4LDAsW09DKEdDKHc1LDEpLEF4ZSw1OTIsMCxbbmV3IFJnZShYd2UpXSldKTtPQyhHQyh3NSwyKSxuaWUsMzY4LDAsW09DKEdDKHc1LDEpLEF4ZSw1OTIsMCxbbmV3IFJnZShZd2UpXSldKTtPQyhHQyh3NSwyKSxuaWUsMzY4LDAsW09DKEdDKHc1LDEpLEF4ZSw1OTIsMCxbbmV3IFJnZShad2UpXSksT0MoR0ModzUsMSksQXhlLDU5MiwwLFtuZXcgUmdlKFl3ZSldKV0pO25ldyBZZ2IoJy0xJyk7T0MoR0ModzUsMiksbmllLDM2OCwwLFtPQyhHQyh3NSwxKSxBeGUsNTkyLDAsW25ldyBSZ2UoJ1xcXFxjKycpXSldKTtuZXcgWWdiKCcwJyk7bmV3IFlnYignMCcpO25ldyBZZ2IoJzEnKTtuZXcgWWdiKCcwJyk7bmV3IFlnYihoeGUpfVxuZnVuY3Rpb24gS1FkKGEpe3ZhciBiLGM7aWYoISFhLmMmJmEuYy5raCgpKXtjPUJEKGEuYyw0OSk7YS5jPUJEKHhpZChhLGMpLDEzOCk7aWYoYS5jIT1jKXsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJlVoZChhLG5ldyBuU2QoYSw5LDIsYyxhLmMpKTtpZihKRChhLkNiLDM5OSkpe2EuRGI+PjE2PT0tMTUmJmEuQ2IubmgoKSYmUndkKG5ldyBvU2QoYS5DYiw5LDEzLGMsYS5jLEhMZChRU2QoQkQoYS5DYiw1OSkpLGEpKSl9ZWxzZSBpZihKRChhLkNiLDg4KSl7aWYoYS5EYj4+MTY9PS0yMyYmYS5DYi5uaCgpKXtiPWEuYztKRChiLDg4KXx8KGI9KGpHZCgpLF9GZCkpO0pEKGMsODgpfHwoYz0oakdkKCksX0ZkKSk7UndkKG5ldyBvU2QoYS5DYiw5LDEwLGMsYixITGQoVktkKEJEKGEuQ2IsMjYpKSxhKSkpfX19fXJldHVybiBhLmN9XG5mdW5jdGlvbiBmN2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtPZGQoYiwnSHlwZXJub2RlcyBwcm9jZXNzaW5nJywxKTtmb3IoZT1uZXcgb2xiKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtmb3IoaD1uZXcgb2xiKGQuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTtpZihDY2IoREQodk5iKGcsKE55YygpLGV4YykpKSkmJmcuai5jLmxlbmd0aDw9Mil7bD0wO2s9MDtjPTA7Zj0wO2ZvcihqPW5ldyBvbGIoZy5qKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTEpO3N3aXRjaChpLmouZyl7Y2FzZSAxOisrbDticmVhaztjYXNlIDI6KytrO2JyZWFrO2Nhc2UgMzorK2M7YnJlYWs7Y2FzZSA0OisrZjt9fWw9PTAmJmM9PTAmJmU3YihhLGcsZjw9ayl9fX1RZGQoYil9XG5mdW5jdGlvbiBpN2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7T2RkKGIsJ0xheWVyIGNvbnN0cmFpbnQgZWRnZSByZXZlcnNhbCcsMSk7Zm9yKGc9bmV3IG9sYihhLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7az0tMTtjPW5ldyBSa2I7aj1sX2IoZi5hKTtmb3IoZT0wO2U8ai5sZW5ndGg7ZSsrKXtkPUJEKHZOYihqW2VdLCh3dGMoKSxPc2MpKSwzMDMpO2lmKGs9PS0xKXtkIT0oZXNjKCksZHNjKSYmKGs9ZSl9ZWxzZXtpZihkPT0oZXNjKCksZHNjKSl7JF9iKGpbZV0sbnVsbCk7Wl9iKGpbZV0saysrLGYpfX1kPT0oZXNjKCksYnNjKSYmRWtiKGMsaltlXSl9Zm9yKGk9bmV3IG9sYihjKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTApOyRfYihoLG51bGwpOyRfYihoLGYpfX1RZGQoYil9XG5mdW5jdGlvbiBXNmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtPZGQoYywnSHlwZXJlZGdlIG1lcmdpbmcnLDEpO1U2YihhLGIpO2k9bmV3IEJpYihiLmIsMCk7d2hpbGUoaS5iPGkuZC5nYygpKXtoPShzQ2IoaS5iPGkuZC5nYygpKSxCRChpLmQuWGIoaS5jPWkuYisrKSwyOSkpO2s9aC5hO2lmKGsuYy5sZW5ndGg9PTApe2NvbnRpbnVlfWQ9bnVsbDtlPW51bGw7Zj1udWxsO2c9bnVsbDtmb3Ioaj0wO2o8ay5jLmxlbmd0aDtqKyspe2Q9KHRDYihqLGsuYy5sZW5ndGgpLEJEKGsuY1tqXSwxMCkpO2U9ZC5rO2lmKGU9PShqMGIoKSxnMGIpJiZnPT1nMGIpe2w9UzZiKGQsZik7aWYobC5hKXtWNmIoZCxmLGwuYixsLmMpO3RDYihqLGsuYy5sZW5ndGgpO2NDYihrLmMsaiwxKTstLWo7ZD1mO2U9Z319Zj1kO2c9ZX19UWRkKGMpfVxuZnVuY3Rpb24gV0ZjKGEsYil7dmFyIGMsZCxlO2Q9Q3ViKGEuZCwxKSE9MDshQ2NiKEREKHZOYihiLmosKHd0YygpLEpzYykpKSkmJiFDY2IoREQodk5iKGIuaixtdGMpKSl8fFBEKHZOYihiLmosKE55YygpLHl3YykpKT09PVBEKCh0QWMoKSxyQWMpKT9iLmMuVGYoYi5lLGQpOihkPUNjYihERCh2TmIoYi5qLEpzYykpKSk7ZEdjKGEsYixkLHRydWUpO0NjYihERCh2TmIoYi5qLG10YykpKSYmeU5iKGIuaixtdGMsKEJjYigpLGZhbHNlKSk7aWYoQ2NiKEREKHZOYihiLmosSnNjKSkpKXt5TmIoYi5qLEpzYywoQmNiKCksZmFsc2UpKTt5TmIoYi5qLG10Yyx0cnVlKX1jPU9GYyhhLGIpO2RveyRGYyhhKTtpZihjPT0wKXtyZXR1cm4gMH1kPSFkO2U9YztkR2MoYSxiLGQsZmFsc2UpO2M9T0ZjKGEsYil9d2hpbGUoZT5jKTtyZXR1cm4gZX1cbmZ1bmN0aW9uIFhGYyhhLGIpe3ZhciBjLGQsZTtkPUN1YihhLmQsMSkhPTA7IUNjYihERCh2TmIoYi5qLCh3dGMoKSxKc2MpKSkpJiYhQ2NiKEREKHZOYihiLmosbXRjKSkpfHxQRCh2TmIoYi5qLChOeWMoKSx5d2MpKSk9PT1QRCgodEFjKCksckFjKSk/Yi5jLlRmKGIuZSxkKTooZD1DY2IoREQodk5iKGIuaixKc2MpKSkpO2RHYyhhLGIsZCx0cnVlKTtDY2IoREQodk5iKGIuaixtdGMpKSkmJnlOYihiLmosbXRjLChCY2IoKSxmYWxzZSkpO2lmKENjYihERCh2TmIoYi5qLEpzYykpKSl7eU5iKGIuaixKc2MsKEJjYigpLGZhbHNlKSk7eU5iKGIuaixtdGMsdHJ1ZSl9Yz1ORmMoYSxiKTtkb3skRmMoYSk7aWYoYz09MCl7cmV0dXJuIDB9ZD0hZDtlPWM7ZEdjKGEsYixkLGZhbHNlKTtjPU5GYyhhLGIpfXdoaWxlKGU+Yyk7cmV0dXJuIGV9XG5mdW5jdGlvbiB1TmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbztpZihiPT1jKXtyZXR1cm4gdHJ1ZX1lbHNle2I9dk5kKGEsYik7Yz12TmQoYSxjKTtkPUpRZChiKTtpZihkKXtrPUpRZChjKTtpZihrIT1kKXtpZighayl7cmV0dXJuIGZhbHNlfWVsc2V7aT1kLkRqKCk7bz1rLkRqKCk7cmV0dXJuIGk9PW8mJmkhPW51bGx9fWVsc2V7Zz0oIWIuZCYmKGIuZD1uZXcgeE1kKGo1LGIsMSkpLGIuZCk7Zj1nLmk7bT0oIWMuZCYmKGMuZD1uZXcgeE1kKGo1LGMsMSkpLGMuZCk7aWYoZj09bS5pKXtmb3Ioaj0wO2o8ZjsrK2ope2U9QkQocXVkKGcsaiksODcpO2w9QkQocXVkKG0saiksODcpO2lmKCF1TmQoYSxlLGwpKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX19ZWxzZXtoPWIuZTtuPWMuZTtyZXR1cm4gaD09bn19fVxuZnVuY3Rpb24gWDJkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7aWYoVDZkKGEuZSxiKSl7bD1TNmQoYS5lLlRnKCksYik7Zj1CRChhLmcsMTE5KTtrPW51bGw7aT0tMTtoPS0xO2U9MDtmb3Ioaj0wO2o8YS5pOysrail7Zz1mW2pdO2lmKGwucmwoZy5haygpKSl7ZT09YyYmKGk9aik7aWYoZT09ZCl7aD1qO2s9Zy5kZCgpfSsrZX19aWYoaT09LTEpe3Rocm93IHZiYihuZXcgcWNiKGx1ZStjK211ZStlKSl9aWYoaD09LTEpe3Rocm93IHZiYihuZXcgcWNiKG51ZStkK211ZStlKSl9V3hkKGEsaSxoKTtvaWQoYS5lKSYmR0xkKGEsSDJkKGEsNyxiLG1lYihkKSxrLGMsdHJ1ZSkpO3JldHVybiBrfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoJ1RoZSBmZWF0dXJlIG11c3QgYmUgbWFueS12YWx1ZWQgdG8gc3VwcG9ydCBtb3ZlJykpfX1cbmZ1bmN0aW9uIGJfYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2k9bmV3IGc3YyhiLm4pO2kuYSs9Yi5vLmEvMjtpLmIrPWIuby5iLzI7aD1FZGIoRUQodk5iKGIsKE55YygpLFV4YykpKSk7Zj1hLmY7Zz1hLmQ7ZT1hLmM7c3dpdGNoKEJEKHZOYihiLCh3dGMoKSxIc2MpKSw2MSkuZyl7Y2FzZSAxOmkuYSs9Zy5iK2UuYS1jLzI7aS5iPS1kLWg7Yi5uLmI9LShnLmQraCtlLmIpO2JyZWFrO2Nhc2UgMjppLmE9Zi5hK2cuYitnLmMraDtpLmIrPWcuZCtlLmItZC8yO2Iubi5hPWYuYStnLmMraC1lLmE7YnJlYWs7Y2FzZSAzOmkuYSs9Zy5iK2UuYS1jLzI7aS5iPWYuYitnLmQrZy5hK2g7Yi5uLmI9Zi5iK2cuYStoLWUuYjticmVhaztjYXNlIDQ6aS5hPS1jLWg7aS5iKz1nLmQrZS5iLWQvMjtiLm4uYT0tKGcuYitoK2UuYSk7fXJldHVybiBpfVxuZnVuY3Rpb24gUDFiKGEpe3ZhciBiLGMsZCxlLGYsZztkPW5ldyBYWmI7dE5iKGQsYSk7UEQodk5iKGQsKE55YygpLEx3YykpKT09PVBEKChlYWQoKSxjYWQpKSYmeU5iKGQsTHdjLGFfYihkKSk7aWYodk5iKGQsKGc2YygpLGY2YykpPT1udWxsKXtnPUJEKG02ZChhKSwxNjApO3lOYihkLGY2YyxSRChnLldlKGY2YykpKX15TmIoZCwod3RjKCksJHNjKSxhKTt5TmIoZCxLc2MsKGI9QkQoZ2RiKFBXKSw5KSxuZXcgeHFiKGIsQkQoX0JiKGIsYi5sZW5ndGgpLDkpLDApKSk7ZT1PR2IoKCFYb2QoYSk/bnVsbDooUGdkKCksbmV3IGJoZChYb2QoYSkpKSxQZ2QoKSxuZXcgaGhkKCFYb2QoYSk/bnVsbDpuZXcgYmhkKFhvZChhKSksYSkpLGJhZCk7Zj1CRCh2TmIoZCxLeGMpLDExNik7Yz1kLmQ7dF9iKGMsZik7dF9iKGMsZSk7cmV0dXJuIGR9XG5mdW5jdGlvbiB5YmMoYSxiLGMpe3ZhciBkLGU7ZD1iLmMuaTtlPWMuZC5pO2lmKGQuaz09KGowYigpLGcwYikpe3lOYihhLCh3dGMoKSxWc2MpLEJEKHZOYihkLFZzYyksMTEpKTt5TmIoYSxXc2MsQkQodk5iKGQsV3NjKSwxMSkpO3lOYihhLFVzYyxERCh2TmIoZCxVc2MpKSl9ZWxzZSBpZihkLms9PWYwYil7eU5iKGEsKHd0YygpLFZzYyksQkQodk5iKGQsVnNjKSwxMSkpO3lOYihhLFdzYyxCRCh2TmIoZCxXc2MpLDExKSk7eU5iKGEsVXNjLChCY2IoKSx0cnVlKSl9ZWxzZSBpZihlLms9PWYwYil7eU5iKGEsKHd0YygpLFZzYyksQkQodk5iKGUsVnNjKSwxMSkpO3lOYihhLFdzYyxCRCh2TmIoZSxXc2MpLDExKSk7eU5iKGEsVXNjLChCY2IoKSx0cnVlKSl9ZWxzZXt5TmIoYSwod3RjKCksVnNjKSxiLmMpO3lOYihhLFdzYyxjLmQpfX1cbmZ1bmN0aW9uIEZHYihhKXt2YXIgYixjLGQsZSxmLGcsaDthLm89bmV3IGprYjtkPW5ldyBQc2I7Zm9yKGc9bmV3IG9sYihhLmUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEyMSk7TEZiKGYpLmMubGVuZ3RoPT0xJiYoR3NiKGQsZixkLmMuYixkLmMpLHRydWUpfXdoaWxlKGQuYiE9MCl7Zj1CRChkLmI9PTA/bnVsbDooc0NiKGQuYiE9MCksTnNiKGQsZC5hLmEpKSwxMjEpO2lmKExGYihmKS5jLmxlbmd0aD09MCl7Y29udGludWV9Yj1CRChJa2IoTEZiKGYpLDApLDIxMyk7Yz1mLmcuYS5jLmxlbmd0aD4wO2g9eEZiKGIsZik7Yz9PRmIoaC5iLGIpOk9GYihoLmcsYik7TEZiKGgpLmMubGVuZ3RoPT0xJiYoR3NiKGQsaCxkLmMuYixkLmMpLHRydWUpO2U9bmV3IHZnZChmLGIpO1dqYihhLm8sZSk7TGtiKGEuZS5hLGYpfX1cbmZ1bmN0aW9uIF9OYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2Q9JHduZC5NYXRoLmFicyhENmMoYS5iKS5hLUQ2YyhiLmIpLmEpO2g9JHduZC5NYXRoLmFicyhENmMoYS5iKS5iLUQ2YyhiLmIpLmIpO2U9MDtpPTA7Yz0xO2c9MTtpZihkPmEuYi5iLzIrYi5iLmIvMil7ZT0kd25kLk1hdGgubWluKCR3bmQuTWF0aC5hYnMoYS5iLmMtKGIuYi5jK2IuYi5iKSksJHduZC5NYXRoLmFicyhhLmIuYythLmIuYi1iLmIuYykpO2M9MS1lL2R9aWYoaD5hLmIuYS8yK2IuYi5hLzIpe2k9JHduZC5NYXRoLm1pbigkd25kLk1hdGguYWJzKGEuYi5kLShiLmIuZCtiLmIuYSkpLCR3bmQuTWF0aC5hYnMoYS5iLmQrYS5iLmEtYi5iLmQpKTtnPTEtaS9ofWY9JHduZC5NYXRoLm1pbihjLGcpO3JldHVybiAoMS1mKSokd25kLk1hdGguc3FydChkKmQraCpoKX1cbmZ1bmN0aW9uIGxRYyhhKXt2YXIgYixjLGQsZTtuUWMoYSxhLmUsYS5mLChGUWMoKSxEUWMpLHRydWUsYS5jLGEuaSk7blFjKGEsYS5lLGEuZixEUWMsZmFsc2UsYS5jLGEuaSk7blFjKGEsYS5lLGEuZixFUWMsdHJ1ZSxhLmMsYS5pKTtuUWMoYSxhLmUsYS5mLEVRYyxmYWxzZSxhLmMsYS5pKTttUWMoYSxhLmMsYS5lLGEuZixhLmkpO2Q9bmV3IEJpYihhLmksMCk7d2hpbGUoZC5iPGQuZC5nYygpKXtiPShzQ2IoZC5iPGQuZC5nYygpKSxCRChkLmQuWGIoZC5jPWQuYisrKSwxMjgpKTtlPW5ldyBCaWIoYS5pLGQuYik7d2hpbGUoZS5iPGUuZC5nYygpKXtjPShzQ2IoZS5iPGUuZC5nYygpKSxCRChlLmQuWGIoZS5jPWUuYisrKSwxMjgpKTtrUWMoYixjKX19d1FjKGEuaSxCRCh2TmIoYS5kLCh3dGMoKSxqdGMpKSwyMzApKTt6UWMoYS5pKX1cbmZ1bmN0aW9uIGZLZChhLGIpe3ZhciBjLGQ7aWYoYiE9bnVsbCl7ZD1kS2QoYSk7aWYoZCl7aWYoKGQuaSYxKSE9MCl7aWYoZD09c2JiKXtyZXR1cm4gS0QoYil9ZWxzZSBpZihkPT1XRCl7cmV0dXJuIEpEKGIsMTkpfWVsc2UgaWYoZD09VkQpe3JldHVybiBKRChiLDE1NSl9ZWxzZSBpZihkPT1TRCl7cmV0dXJuIEpEKGIsMjE3KX1lbHNlIGlmKGQ9PVREKXtyZXR1cm4gSkQoYiwxNzIpfWVsc2UgaWYoZD09VUQpe3JldHVybiBMRChiKX1lbHNlIGlmKGQ9PXJiYil7cmV0dXJuIEpEKGIsMTg0KX1lbHNlIGlmKGQ9PVhEKXtyZXR1cm4gSkQoYiwxNjIpfX1lbHNle3JldHVybiBwRWQoKSxjPUJEKE9oYihvRWQsZCksNTUpLCFjfHxjLndqKGIpfX1lbHNlIGlmKEpEKGIsNTYpKXtyZXR1cm4gYS51ayhCRChiLDU2KSl9fXJldHVybiBmYWxzZX1cbmZ1bmN0aW9uIGFkZSgpe2FkZT1jY2I7dmFyIGEsYixjLGQsZSxmLGcsaCxpOyRjZT1LQyhTRCx3dGUsMjUsMjU1LDE1LDEpO19jZT1LQyhURCwkaWUsMjUsNjQsMTUsMSk7Zm9yKGI9MDtiPDI1NTtiKyspeyRjZVtiXT0tMX1mb3IoYz05MDtjPj02NTtjLS0peyRjZVtjXT1jLTY1PDwyND4+MjR9Zm9yKGQ9MTIyO2Q+PTk3O2QtLSl7JGNlW2RdPWQtOTcrMjY8PDI0Pj4yNH1mb3IoZT01NztlPj00ODtlLS0peyRjZVtlXT1lLTQ4KzUyPDwyND4+MjR9JGNlWzQzXT02MjskY2VbNDddPTYzO2ZvcihmPTA7Zjw9MjU7ZisrKV9jZVtmXT02NStmJmFqZTtmb3IoZz0yNixpPTA7Zzw9NTE7KytnLGkrKylfY2VbZ109OTcraSZhamU7Zm9yKGE9NTIsaD0wO2E8PTYxOysrYSxoKyspX2NlW2FdPTQ4K2gmYWplO19jZVs2Ml09NDM7X2NlWzYzXT00N31cbmZ1bmN0aW9uIEZYYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtpZihhLmRjKCkpe3JldHVybiBuZXcgZDdjfWo9MDtsPTA7Zm9yKGU9YS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDM3KTtmPWQuZjtqPSR3bmQuTWF0aC5tYXgoaixmLmEpO2wrPWYuYSpmLmJ9aj0kd25kLk1hdGgubWF4KGosJHduZC5NYXRoLnNxcnQobCkqRWRiKEVEKHZOYihCRChhLktjKCkuUGIoKSwzNyksKE55YygpLG93YykpKSkpO209MDtuPTA7aT0wO2M9Yjtmb3IoaD1hLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMzcpO2s9Zy5mO2lmKG0ray5hPmope209MDtuKz1pK2I7aT0wfXVYYihnLG0sbik7Yz0kd25kLk1hdGgubWF4KGMsbStrLmEpO2k9JHduZC5NYXRoLm1heChpLGsuYik7bSs9ay5hK2J9cmV0dXJuIG5ldyBmN2MoYytiLG4raStiKX1cbmZ1bmN0aW9uIG1RYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsO2ZvcihnPW5ldyBvbGIoYik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDE3KTtpPWYuYztpZihjLmEuX2IoaSkpe2o9KEZRYygpLERRYyl9ZWxzZSBpZihkLmEuX2IoaSkpe2o9KEZRYygpLEVRYyl9ZWxzZXt0aHJvdyB2YmIobmV3IFdkYignU291cmNlIHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4nKSl9az1mLmQ7aWYoYy5hLl9iKGspKXtsPShGUWMoKSxEUWMpfWVsc2UgaWYoZC5hLl9iKGspKXtsPShGUWMoKSxFUWMpfWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoJ1RhcmdldCBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuJykpfWg9bmV3IFlRYyhmLGosbCk7UmhiKGEuYixmLGgpO2UuY1tlLmMubGVuZ3RoXT1ofX1cbmZ1bmN0aW9uIGxmZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKCFtcGQoYSkpe3Rocm93IHZiYihuZXcgWmRiKFNzZSkpfWQ9bXBkKGEpO2Y9ZC5nO2U9ZC5mO2lmKGY8PTAmJmU8PTApe3JldHVybiBVY2QoKSxTY2R9aD1hLmk7aT1hLmo7c3dpdGNoKGIuZyl7Y2FzZSAyOmNhc2UgMTppZihoPDApe3JldHVybiBVY2QoKSxUY2R9ZWxzZSBpZihoK2EuZz5mKXtyZXR1cm4gVWNkKCksemNkfWJyZWFrO2Nhc2UgNDpjYXNlIDM6aWYoaTwwKXtyZXR1cm4gVWNkKCksQWNkfWVsc2UgaWYoaSthLmY+ZSl7cmV0dXJuIFVjZCgpLFJjZH19Zz0oaCthLmcvMikvZjtjPShpK2EuZi8yKS9lO3JldHVybiBnK2M8PTEmJmctYzw9MD8oVWNkKCksVGNkKTpnK2M+PTEmJmctYz49MD8oVWNkKCksemNkKTpjPDAuNT8oVWNkKCksQWNkKTooVWNkKCksUmNkKX1cbmZ1bmN0aW9uIHZoYihhLGIsYyxkLGUpe3ZhciBmLGc7Zj13YmIoeGJiKGJbMF0sWWplKSx4YmIoZFswXSxZamUpKTthWzBdPVRiYihmKTtmPU9iYihmLDMyKTtpZihjPj1lKXtmb3IoZz0xO2c8ZTtnKyspe2Y9d2JiKGYsd2JiKHhiYihiW2ddLFlqZSkseGJiKGRbZ10sWWplKSkpO2FbZ109VGJiKGYpO2Y9T2JiKGYsMzIpfWZvcig7ZzxjO2crKyl7Zj13YmIoZix4YmIoYltnXSxZamUpKTthW2ddPVRiYihmKTtmPU9iYihmLDMyKX19ZWxzZXtmb3IoZz0xO2c8YztnKyspe2Y9d2JiKGYsd2JiKHhiYihiW2ddLFlqZSkseGJiKGRbZ10sWWplKSkpO2FbZ109VGJiKGYpO2Y9T2JiKGYsMzIpfWZvcig7ZzxlO2crKyl7Zj13YmIoZix4YmIoZFtnXSxZamUpKTthW2ddPVRiYihmKTtmPU9iYihmLDMyKX19eWJiKGYsMCkhPTAmJihhW2ddPVRiYihmKSl9XG5mdW5jdGlvbiBfZmUoYSl7d2ZlKCk7dmFyIGIsYyxkLGUsZixnO2lmKGEuZSE9NCYmYS5lIT01KXRocm93IHZiYihuZXcgV2RiKCdUb2tlbiNjb21wbGVtZW50UmFuZ2VzKCk6IG11c3QgYmUgUkFOR0U6ICcrYS5lKSk7Zj1hO1lmZShmKTtWZmUoZik7ZD1mLmIubGVuZ3RoKzI7Zi5iWzBdPT0wJiYoZC09Mik7Yz1mLmJbZi5iLmxlbmd0aC0xXTtjPT1seGUmJihkLT0yKTtlPSgrK3ZmZSxuZXcgJGZlKDQpKTtlLmI9S0MoV0Qsb2plLDI1LGQsMTUsMSk7Zz0wO2lmKGYuYlswXT4wKXtlLmJbZysrXT0wO2UuYltnKytdPWYuYlswXS0xfWZvcihiPTE7YjxmLmIubGVuZ3RoLTI7Yis9Mil7ZS5iW2crK109Zi5iW2JdKzE7ZS5iW2crK109Zi5iW2IrMV0tMX1pZihjIT1seGUpe2UuYltnKytdPWMrMTtlLmJbZ109bHhlfWUuYT10cnVlO3JldHVybiBlfVxuZnVuY3Rpb24gUHhkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2Q9Yy5nYygpO2lmKGQ9PTApe3JldHVybiBmYWxzZX1lbHNle2lmKGEuZWooKSl7aj1hLmZqKCk7aXVkKGEsYixjKTtnPWQ9PTE/YS5aaSgzLG51bGwsYy5LYygpLlBiKCksYixqKTphLlppKDUsbnVsbCxjLGIsaik7aWYoYS5iaigpKXtoPWQ8MTAwP251bGw6bmV3IEl4ZChkKTtmPWIrZDtmb3IoZT1iO2U8ZjsrK2Upe2s9YS5nW2VdO2g9YS5jaihrLGgpO2g9YS5qaihrLGgpfWlmKCFoKXthLiRpKGcpfWVsc2V7aC5FaShnKTtoLkZpKCl9fWVsc2V7YS4kaShnKX19ZWxzZXtpdWQoYSxiLGMpO2lmKGEuYmooKSl7aD1kPDEwMD9udWxsOm5ldyBJeGQoZCk7Zj1iK2Q7Zm9yKGU9YjtlPGY7KytlKXtpPWEuZ1tlXTtoPWEuY2ooaSxoKX0hIWgmJmguRmkoKX19cmV0dXJuIHRydWV9fVxuZnVuY3Rpb24gWU5jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7Zm9yKGc9bmV3IG9sYihhLmspO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihnKSwxMjkpO2lmKCFkfHxlLmM9PShIT2MoKSxGT2MpKXtpPWUuYjtpZihpLmc8MCYmZS5kPjApe3BPYyhpLGkuZC1lLmQpO2UuYz09KEhPYygpLEZPYykmJm5PYyhpLGkuYS1lLmQpO2kuZDw9MCYmaS5pPjAmJihHc2IoYixpLGIuYy5iLGIuYyksdHJ1ZSl9fX1mb3IoZj1uZXcgb2xiKGEuZik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEyOSk7aWYoIWR8fGUuYz09KEhPYygpLEZPYykpe2g9ZS5hO2lmKGguZzwwJiZlLmQ+MCl7cU9jKGgsaC5pLWUuZCk7ZS5jPT0oSE9jKCksRk9jKSYmb09jKGgsaC5iLWUuZCk7aC5pPD0wJiZoLmQ+MCYmKEdzYihjLGgsYy5jLmIsYy5jKSx0cnVlKX19fX1cbmZ1bmN0aW9uIGdTYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztPZGQoYywnUHJvY2Vzc29yIGNvbXB1dGUgZmFub3V0JywxKTtVaGIoYS5iKTtVaGIoYS5hKTtoPW51bGw7Zj1Kc2IoYi5iLDApO3doaWxlKCFoJiZmLmIhPWYuZC5jKXtqPUJEKFhzYihmKSw4Nik7Q2NiKEREKHZOYihqLChtVGMoKSxqVGMpKSkpJiYoaD1qKX1pPW5ldyBQc2I7R3NiKGksaCxpLmMuYixpLmMpO2ZTYyhhLGkpO2ZvcihrPUpzYihiLmIsMCk7ay5iIT1rLmQuYzspe2o9QkQoWHNiKGspLDg2KTtnPUdEKHZOYihqLChtVGMoKSwkU2MpKSk7ZT1QaGIoYS5iLGcpIT1udWxsP0JEKFBoYihhLmIsZyksMTkpLmE6MDt5TmIoaixaU2MsbWViKGUpKTtkPTErKFBoYihhLmEsZykhPW51bGw/QkQoUGhiKGEuYSxnKSwxOSkuYTowKTt5TmIoaixYU2MsbWViKGQpKX1RZGQoYyl9XG5mdW5jdGlvbiBXUGMoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbzttPVZQYyhhLGMpO2ZvcihpPTA7aTxiO2krKyl7QWliKGUsYyk7bj1uZXcgUmtiO289KHNDYihkLmI8ZC5kLmdjKCkpLEJEKGQuZC5YYihkLmM9ZC5iKyspLDQwNykpO2ZvcihrPW0raTtrPGEuYjtrKyspe2g9bztvPShzQ2IoZC5iPGQuZC5nYygpKSxCRChkLmQuWGIoZC5jPWQuYisrKSw0MDcpKTtFa2IobixuZXcgYVFjKGgsbyxjKSl9Zm9yKGw9bStpO2w8YS5iO2wrKyl7c0NiKGQuYj4wKTtkLmEuWGIoZC5jPS0tZC5iKTtsPm0raSYmdWliKGQpfWZvcihnPW5ldyBvbGIobik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDQwNyk7QWliKGQsZil9aWYoaTxiLTEpe2ZvcihqPW0raTtqPGEuYjtqKyspe3NDYihkLmI+MCk7ZC5hLlhiKGQuYz0tLWQuYil9fX19XG5mdW5jdGlvbiBKZmUoKXt3ZmUoKTt2YXIgYSxiLGMsZCxlLGY7aWYoZ2ZlKXJldHVybiBnZmU7YT0oKyt2ZmUsbmV3ICRmZSg0KSk7WGZlKGEsS2ZlKHZ4ZSx0cnVlKSk7WmZlKGEsS2ZlKCdNJyx0cnVlKSk7WmZlKGEsS2ZlKCdDJyx0cnVlKSk7Zj0oKyt2ZmUsbmV3ICRmZSg0KSk7Zm9yKGQ9MDtkPDExO2QrKyl7VWZlKGYsZCxkKX1iPSgrK3ZmZSxuZXcgJGZlKDQpKTtYZmUoYixLZmUoJ00nLHRydWUpKTtVZmUoYiw0NDQ4LDQ2MDcpO1VmZShiLDY1NDM4LDY1NDM5KTtlPSgrK3ZmZSxuZXcgTGdlKDIpKTtLZ2UoZSxhKTtLZ2UoZSxmZmUpO2M9KCsrdmZlLG5ldyBMZ2UoMikpO2MuJGwoQmZlKGYsS2ZlKCdMJyx0cnVlKSkpO2MuJGwoYik7Yz0oKyt2ZmUsbmV3IGxnZSgzLGMpKTtjPSgrK3ZmZSxuZXcgcmdlKGUsYykpO2dmZT1jO3JldHVybiBnZmV9XG5mdW5jdGlvbiBTM2MoYSl7dmFyIGIsYztiPUdEKGhrZChhLChZOWMoKSxvOGMpKSk7aWYoVDNjKGIsYSkpe3JldHVybn1pZighaWtkKGEsRjljKSYmKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkuaSE9MHx8Q2NiKEREKGhrZChhLE04YykpKSkpe2lmKGI9PW51bGx8fHVmYihiKS5sZW5ndGg9PTApe2lmKCFUM2Moc25lLGEpKXtjPVFmYihRZmIobmV3IFdmYignVW5hYmxlIHRvIGxvYWQgZGVmYXVsdCBsYXlvdXQgYWxnb3JpdGhtICcpLHNuZSksJyBmb3IgdW5jb25maWd1cmVkIG5vZGUgJyk7eWZkKGEsYyk7dGhyb3cgdmJiKG5ldyB5MmMoYy5hKSl9fWVsc2V7Yz1RZmIoUWZiKG5ldyBXZmIoXCJMYXlvdXQgYWxnb3JpdGhtICdcIiksYiksXCInIG5vdCBmb3VuZCBmb3IgXCIpO3lmZChhLGMpO3Rocm93IHZiYihuZXcgeTJjKGMuYSkpfX19XG5mdW5jdGlvbiBoSWIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47Yz1hLmk7Yj1hLm47aWYoYS5iPT0wKXtuPWMuYytiLmI7bT1jLmItYi5iLWIuYztmb3IoZz1hLmEsaT0wLGs9Zy5sZW5ndGg7aTxrOysraSl7ZT1nW2ldO21IYihlLG4sbSl9fWVsc2V7ZD1rSWIoYSxmYWxzZSk7bUhiKGEuYVswXSxjLmMrYi5iLGRbMF0pO21IYihhLmFbMl0sYy5jK2MuYi1iLmMtZFsyXSxkWzJdKTtsPWMuYi1iLmItYi5jO2lmKGRbMF0+MCl7bC09ZFswXSthLmM7ZFswXSs9YS5jfWRbMl0+MCYmKGwtPWRbMl0rYS5jKTtkWzFdPSR3bmQuTWF0aC5tYXgoZFsxXSxsKTttSGIoYS5hWzFdLGMuYytiLmIrZFswXS0oZFsxXS1sKS8yLGRbMV0pfWZvcihmPWEuYSxoPTAsaj1mLmxlbmd0aDtoPGo7KytoKXtlPWZbaF07SkQoZSwzMjYpJiZCRChlLDMyNikuVGUoKX19XG5mdW5jdGlvbiBLTWMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtsPW5ldyBKTWM7bC5kPTA7Zm9yKGc9bmV3IG9sYihhLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7bC5kKz1mLmEuYy5sZW5ndGh9ZD0wO2U9MDtsLmE9S0MoV0Qsb2plLDI1LGEuYi5jLmxlbmd0aCwxNSwxKTtqPTA7az0wO2wuZT1LQyhXRCxvamUsMjUsbC5kLDE1LDEpO2ZvcihjPW5ldyBvbGIoYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMjkpO2IucD1kKys7bC5hW2IucF09ZSsrO2s9MDtmb3IoaT1uZXcgb2xiKGIuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtoLnA9aisrO2wuZVtoLnBdPWsrK319bC5jPW5ldyBPTWMobCk7bC5iPVB1KGwuZCk7TE1jKGwsYSk7bC5mPVB1KGwuZCk7TU1jKGwsYSk7cmV0dXJuIGx9XG5mdW5jdGlvbiBHWmMoYSxiKXt2YXIgYyxkLGUsZjtmPUJEKElrYihhLm4sYS5uLmMubGVuZ3RoLTEpLDIxMSkuZDthLnA9JHduZC5NYXRoLm1pbihhLnAsYi5nKTthLnI9JHduZC5NYXRoLm1heChhLnIsZik7YS5nPSR3bmQuTWF0aC5tYXgoYS5nLGIuZysoYS5iLmMubGVuZ3RoPT0xPzA6YS5pKSk7YS5vPSR3bmQuTWF0aC5taW4oYS5vLGIuZik7YS5lKz1iLmYrKGEuYi5jLmxlbmd0aD09MT8wOmEuaSk7YS5mPSR3bmQuTWF0aC5tYXgoYS5mLGIuZik7ZT1hLm4uYy5sZW5ndGg+MD8oYS5uLmMubGVuZ3RoLTEpKmEuaTowO2ZvcihkPW5ldyBvbGIoYS5uKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjExKTtlKz1jLmF9YS5kPWU7YS5hPWEuZS9hLmIuYy5sZW5ndGgtYS5pKigoYS5iLmMubGVuZ3RoLTEpL2EuYi5jLmxlbmd0aCk7dSRjKGEuail9XG5mdW5jdGlvbiBMUWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtrPUREKHZOYihiLCh3U2IoKSxzU2IpKSk7aWYoaz09bnVsbHx8KHVDYihrKSxrKSl7bD1LQyhzYmIsZGxlLDI1LGIuZS5jLmxlbmd0aCwxNiwxKTtnPUhRYihiKTtlPW5ldyBQc2I7Zm9yKGo9bmV3IG9sYihiLmUpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihqKSwxNDQpO2M9SVFiKGEsaCxudWxsLG51bGwsbCxnKTtpZihjKXt0TmIoYyxiKTtHc2IoZSxjLGUuYy5iLGUuYyl9fWlmKGUuYj4xKXtmb3IoZD1Kc2IoZSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksMjMxKTtmPTA7Zm9yKGk9bmV3IG9sYihjLmUpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxNDQpO2guYj1mKyt9fX1yZXR1cm4gZX1yZXR1cm4gT3UoT0MoR0MoJE8sMSksZm1lLDIzMSwwLFtiXSkpfVxuZnVuY3Rpb24gVEtkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKCFhLmcpe2g9bmV3IHpOZDtiPUtLZDtnPWIuYS56YyhhLGIpO2lmKGc9PW51bGwpe2ZvcihkPW5ldyBGeWQoX0tkKGEpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksMjYpO3l0ZChoLFRLZChjKSl9Yi5hLkJjKGEpIT1udWxsO2IuYS5nYygpPT0wJiZ1bmRlZmluZWR9ZT1oLmk7Zm9yKGY9KCFhLnMmJihhLnM9bmV3IGNVZCh0NSxhLDIxLDE3KSksbmV3IEZ5ZChhLnMpKTtmLmUhPWYuaS5nYygpOysrZSl7YkpkKEJEKER5ZChmKSw0NDkpLGUpfXl0ZChoLCghYS5zJiYoYS5zPW5ldyBjVWQodDUsYSwyMSwxNykpLGEucykpO3Z1ZChoKTthLmc9bmV3IHJOZChhLGgpO2EuaT1CRChoLmcsMjQ3KTthLmk9PW51bGwmJihhLmk9TUtkKTthLnA9bnVsbDskS2QoYSkuYiY9LTV9cmV0dXJuIGEuZ31cbmZ1bmN0aW9uIGlJYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2Q9YS5pO2M9YS5uO2lmKGEuYj09MCl7Yj1qSWIoYSxmYWxzZSk7bkhiKGEuYVswXSxkLmQrYy5kLGJbMF0pO25IYihhLmFbMl0sZC5kK2QuYS1jLmEtYlsyXSxiWzJdKTttPWQuYS1jLmQtYy5hO2w9bTtpZihiWzBdPjApe2JbMF0rPWEuYztsLT1iWzBdfWJbMl0+MCYmKGwtPWJbMl0rYS5jKTtiWzFdPSR3bmQuTWF0aC5tYXgoYlsxXSxsKTtuSGIoYS5hWzFdLGQuZCtjLmQrYlswXS0oYlsxXS1sKS8yLGJbMV0pfWVsc2V7bz1kLmQrYy5kO249ZC5hLWMuZC1jLmE7Zm9yKGc9YS5hLGk9MCxrPWcubGVuZ3RoO2k8azsrK2kpe2U9Z1tpXTtuSGIoZSxvLG4pfX1mb3IoZj1hLmEsaD0wLGo9Zi5sZW5ndGg7aDxqOysraCl7ZT1mW2hdO0pEKGUsMzI2KSYmQkQoZSwzMjYpLlVlKCl9fVxuZnVuY3Rpb24gYm9jKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2s9S0MoV0Qsb2plLDI1LGEuYi5jLmxlbmd0aCsxLDE1LDEpO2o9bmV3IFRxYjtkPTA7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyOSk7a1tkKytdPWouYS5nYygpO2ZvcihpPW5ldyBvbGIoZS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaSksMTApO2ZvcihjPW5ldyBTcih1cihVX2IoZykuYS5LYygpLG5ldyBTcSkpO1FyKGMpOyl7Yj1CRChScihjKSwxNyk7ai5hLnpjKGIsail9fWZvcihoPW5ldyBvbGIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTApO2ZvcihjPW5ldyBTcih1cihSX2IoZykuYS5LYygpLG5ldyBTcSkpO1FyKGMpOyl7Yj1CRChScihjKSwxNyk7ai5hLkJjKGIpIT1udWxsfX19cmV0dXJuIGt9XG5mdW5jdGlvbiBGMmQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpPVM2ZChhLmUuVGcoKSxiKTtlPUJEKGEuZywxMTkpO1E2ZCgpO2lmKEJEKGIsNjYpLk9qKCkpe2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoaS5ybChmLmFrKCkpJiZwYihmLGMpKXtyZXR1cm4gdHJ1ZX19fWVsc2UgaWYoYyE9bnVsbCl7Zm9yKGg9MDtoPGEuaTsrK2gpe2Y9ZVtoXTtpZihpLnJsKGYuYWsoKSkmJnBiKGMsZi5kZCgpKSl7cmV0dXJuIHRydWV9fWlmKGQpe2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoaS5ybChmLmFrKCkpJiZQRChjKT09PVBEKGEzZChhLEJEKGYuZGQoKSw1NikpKSl7cmV0dXJuIHRydWV9fX19ZWxzZXtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkucmwoZi5haygpKSYmZi5kZCgpPT1udWxsKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBlM2QoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2o9UzZkKGEuZS5UZygpLGIpO2c9QkQoYS5nLDExOSk7aWYoVDZkKGEuZSxiKSl7aWYoYi5oaSgpKXtmPU0yZChhLGIsZCxKRChiLDk5KSYmKEJEKGIsMTgpLkJiJlRqZSkhPTApO2lmKGY+PTAmJmYhPWMpe3Rocm93IHZiYihuZXcgV2RiKGt1ZSkpfX1lPTA7Zm9yKGk9MDtpPGEuaTsrK2kpe2g9Z1tpXTtpZihqLnJsKGguYWsoKSkpe2lmKGU9PWMpe3JldHVybiBCRChHdGQoYSxpLChRNmQoKSxCRChiLDY2KS5PaigpP0JEKGQsNzIpOlI2ZChiLGQpKSksNzIpfSsrZX19dGhyb3cgdmJiKG5ldyBxY2IoZ3ZlK2MrbXVlK2UpKX1lbHNle2ZvcihpPTA7aTxhLmk7KytpKXtoPWdbaV07aWYoai5ybChoLmFrKCkpKXtyZXR1cm4gUTZkKCksQkQoYiw2NikuT2ooKT9oOmguZGQoKX19cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gT05iKGEsYixjLGQpe3ZhciBlLGYsZyxoO2g9Yztmb3IoZz1uZXcgb2xiKGIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDIyMSk7ZT1CRChmLmIsNjUpO2lmKEp5KGEuYi5jLGUuYi5jK2UuYi5iKTw9MCYmSnkoZS5iLmMsYS5iLmMrYS5iLmIpPD0wJiZKeShhLmIuZCxlLmIuZCtlLmIuYSk8PTAmJkp5KGUuYi5kLGEuYi5kK2EuYi5hKTw9MCl7aWYoSnkoZS5iLmMsYS5iLmMrYS5iLmIpPT0wJiZkLmE8MHx8SnkoZS5iLmMrZS5iLmIsYS5iLmMpPT0wJiZkLmE+MHx8SnkoZS5iLmQsYS5iLmQrYS5iLmEpPT0wJiZkLmI8MHx8SnkoZS5iLmQrZS5iLmEsYS5iLmQpPT0wJiZkLmI+MCl7aD0wO2JyZWFrfX1lbHNle2g9JHduZC5NYXRoLm1pbihoLFlOYihhLGUsZCkpfWg9JHduZC5NYXRoLm1pbihoLE9OYihhLGYsaCxkKSl9cmV0dXJuIGh9XG5mdW5jdGlvbiBpZmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhLmI8Mil7dGhyb3cgdmJiKG5ldyBXZGIoJ1RoZSB2ZWN0b3IgY2hhaW4gbXVzdCBjb250YWluIGF0IGxlYXN0IGEgc291cmNlIGFuZCBhIHRhcmdldCBwb2ludC4nKSl9ZT0oc0NiKGEuYiE9MCksQkQoYS5hLmEuYyw4KSk7bm1kKGIsZS5hLGUuYik7aT1uZXcgT3lkKCghYi5hJiYoYi5hPW5ldyB4TWQoeTIsYiw1KSksYi5hKSk7Zz1Kc2IoYSwxKTt3aGlsZShnLmE8YS5iLTEpe2g9QkQoWHNiKGcpLDgpO2lmKGkuZSE9aS5pLmdjKCkpe2M9QkQoRHlkKGkpLDQ2OSl9ZWxzZXtjPShGaGQoKSxkPW5ldyB4a2QsZCk7TXlkKGksYyl9dWtkKGMsaC5hLGguYil9d2hpbGUoaS5lIT1pLmkuZ2MoKSl7RHlkKGkpO0V5ZChpKX1mPShzQ2IoYS5iIT0wKSxCRChhLmMuYi5jLDgpKTtnbWQoYixmLmEsZi5iKX1cbmZ1bmN0aW9uICRsYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztjPTA7Zm9yKGU9bmV3IG9sYigodENiKDAsYS5jLmxlbmd0aCksQkQoYS5jWzBdLDEwMSkpLmcuYi5qKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTEpO2QucD1jKyt9Yj09KFVjZCgpLEFjZCk/T2tiKGEsbmV3IGdtYyk6T2tiKGEsbmV3IGttYyk7aD0wO2s9YS5jLmxlbmd0aC0xO3doaWxlKGg8ayl7Zz0odENiKGgsYS5jLmxlbmd0aCksQkQoYS5jW2hdLDEwMSkpO2o9KHRDYihrLGEuYy5sZW5ndGgpLEJEKGEuY1trXSwxMDEpKTtmPWI9PUFjZD9nLmM6Zy5hO2k9Yj09QWNkP2ouYTpqLmM7YW1jKGcsYiwoQWpjKCkseWpjKSxmKTthbWMoaixiLHhqYyxpKTsrK2g7LS1rfWg9PWsmJmFtYygodENiKGgsYS5jLmxlbmd0aCksQkQoYS5jW2hdLDEwMSkpLGIsKEFqYygpLHdqYyksbnVsbCl9XG5mdW5jdGlvbiBVVmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtsPWEuYS5pK2EuYS5nLzI7bT1hLmEuaSthLmEuZy8yO289Yi5pK2IuZy8yO3E9Yi5qK2IuZi8yO2g9bmV3IGY3YyhvLHEpO2o9QkQoaGtkKGIsKFk5YygpLEM5YykpLDgpO2ouYT1qLmErbDtqLmI9ai5iK207Zj0oaC5iLWouYikvKGguYS1qLmEpO2Q9aC5iLWYqaC5hO3A9Yy5pK2MuZy8yO3I9Yy5qK2MuZi8yO2k9bmV3IGY3YyhwLHIpO2s9QkQoaGtkKGMsQzljKSw4KTtrLmE9ay5hK2w7ay5iPWsuYittO2c9KGkuYi1rLmIpLyhpLmEtay5hKTtlPWkuYi1nKmkuYTtuPShkLWUpLyhnLWYpO2lmKGouYTxuJiZoLmE8bnx8bjxqLmEmJm48aC5hKXtyZXR1cm4gZmFsc2V9ZWxzZSBpZihrLmE8biYmaS5hPG58fG48ay5hJiZuPGkuYSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gZ3FkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO209QkQoT2hiKGEuYyxiKSwxODMpO2lmKCFtKXt0aHJvdyB2YmIobmV3IGNxZCgnRWRnZSBkaWQgbm90IGV4aXN0IGluIGlucHV0LicpKX1qPVdwZChtKTtmPUZoZSgoIWIuYSYmKGIuYT1uZXcgY1VkKEEyLGIsNiw2KSksYi5hKSk7aD0hZjtpZihoKXtuPW5ldyB3QjtjPW5ldyBScmQoYSxqLG4pO0RoZSgoIWIuYSYmKGIuYT1uZXcgY1VkKEEyLGIsNiw2KSksYi5hKSxjKTtjQyhtLE50ZSxuKX1lPWlrZChiLChZOWMoKSxROGMpKTtpZihlKXtrPUJEKGhrZChiLFE4YyksNzQpO2c9IWt8fEVoZShrKTtpPSFnO2lmKGkpe2w9bmV3IHdCO2Q9bmV3IFpyZChsKTtyZWIoayxkKTtjQyhtLCdqdW5jdGlvblBvaW50cycsbCl9fVVwZChtLCdjb250YWluZXInLE1sZChiKS5rKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGVEYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosazt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Yzt0aGlzLmU9T3UoT0MoR0MoR00sMSksVWhlLDE2OCwwLFtuZXcgYURiKGEsYiksbmV3IGFEYihiLGMpLG5ldyBhRGIoYyxhKV0pKTt0aGlzLmY9T3UoT0MoR0MobTEsMSksbmllLDgsMCxbYSxiLGNdKSk7dGhpcy5kPShkPWM3YyhSNmModGhpcy5iKSx0aGlzLmEpLGU9YzdjKFI2Yyh0aGlzLmMpLHRoaXMuYSksZj1jN2MoUjZjKHRoaXMuYyksdGhpcy5iKSxnPWQuYSoodGhpcy5hLmErdGhpcy5iLmEpK2QuYioodGhpcy5hLmIrdGhpcy5iLmIpLGg9ZS5hKih0aGlzLmEuYSt0aGlzLmMuYSkrZS5iKih0aGlzLmEuYit0aGlzLmMuYiksaT0yKihkLmEqZi5iLWQuYipmLmEpLGo9KGUuYipnLWQuYipoKS9pLGs9KGQuYSpoLWUuYSpnKS9pLG5ldyBmN2MoaixrKSl9XG5mdW5jdGlvbiBudmQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbzttPW5ldyB5QyhhLnApO2NDKGIsZnVlLG0pO2lmKGMmJiEoIWEuZj9udWxsOnZtYihhLmYpKS5hLmRjKCkpe2s9bmV3IHdCO2NDKGIsJ2xvZ3MnLGspO2g9MDtmb3Iobz1uZXcgRG5iKCghYS5mP251bGw6dm1iKGEuZikpLmIuS2MoKSk7by5iLk9iKCk7KXtuPUdEKG8uYi5QYigpKTtsPW5ldyB5QyhuKTt0QihrLGgpO3ZCKGssaCxsKTsrK2h9fWlmKGQpe2o9bmV3IFRCKGEucSk7Y0MoYiwnZXhlY3V0aW9uVGltZScsail9aWYoIXZtYihhLmEpLmEuZGMoKSl7Zz1uZXcgd0I7Y0MoYixKdGUsZyk7aD0wO2ZvcihmPW5ldyBEbmIodm1iKGEuYSkuYi5LYygpKTtmLmIuT2IoKTspe2U9QkQoZi5iLlBiKCksMTk0OSk7aT1uZXcgZUM7dEIoZyxoKTt2QihnLGgsaSk7bnZkKGUsaSxjLGQpOysraH19fVxuZnVuY3Rpb24gUFpiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Y9YS5jO2c9YS5kO1FaYihhLG51bGwpO1JaYihhLG51bGwpO2ImJkNjYihERCh2TmIoZywod3RjKCksTXNjKSkpKT9RWmIoYSxpX2IoZy5pLChLQWMoKSxJQWMpLChVY2QoKSx6Y2QpKSk6UVpiKGEsZyk7YiYmQ2NiKEREKHZOYihmLCh3dGMoKSxldGMpKSkpP1JaYihhLGlfYihmLmksKEtBYygpLEhBYyksKFVjZCgpLFRjZCkpKTpSWmIoYSxmKTtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDcwKTtlPUJEKHZOYihjLChOeWMoKSxRd2MpKSwyNzIpO2U9PShxYWQoKSxwYWQpP3lOYihjLFF3YyxvYWQpOmU9PW9hZCYmeU5iKGMsUXdjLHBhZCl9aD1DY2IoREQodk5iKGEsKHd0YygpLGx0YykpKSk7eU5iKGEsbHRjLChCY2IoKSxoP2ZhbHNlOnRydWUpKTthLmE9dzdjKGEuYSl9XG5mdW5jdGlvbiBWUWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPTA7Zm9yKGY9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtmLmUhPWYuaS5nYygpOyl7ZT1CRChEeWQoZiksMzMpO2c9Jyc7KCFlLm4mJihlLm49bmV3IGNVZChEMixlLDEsNykpLGUubikuaT09MHx8KGc9QkQocXVkKCghZS5uJiYoZS5uPW5ldyBjVWQoRDIsZSwxLDcpKSxlLm4pLDApLDEzNykuYSk7aD1uZXcgcFJiKGcpO3ROYihoLGUpO3lOYihoLChIU2IoKSxGU2IpLGUpO2guYj1kKys7aC5kLmE9ZS5pK2UuZy8yO2guZC5iPWUuaitlLmYvMjtoLmUuYT0kd25kLk1hdGgubWF4KGUuZywxKTtoLmUuYj0kd25kLk1hdGgubWF4KGUuZiwxKTtFa2IoYi5lLGgpO2pyYihjLmYsZSxoKTtpPUJEKGhrZChlLCh3U2IoKSxtU2IpKSw5OCk7aT09KGRjZCgpLGNjZCkmJihpPWJjZCl9fVxuZnVuY3Rpb24gWEpjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2M9bkdiKG5ldyBwR2IsYS5mKTtqPWEuaVtiLmMuaS5wXTtuPWEuaVtiLmQuaS5wXTtpPWIuYzttPWIuZDtoPWkuYS5iO2w9bS5hLmI7ai5ifHwoaCs9aS5uLmIpO24uYnx8KGwrPW0ubi5iKTtrPVFEKCR3bmQuTWF0aC5tYXgoMCxoLWwpKTtnPVFEKCR3bmQuTWF0aC5tYXgoMCxsLWgpKTtvPShwPSR3bmQuTWF0aC5tYXgoMSxCRCh2TmIoYiwoTnljKCksZXljKSksMTkpLmEpLHE9SkpjKGIuYy5pLmssYi5kLmkuaykscCpxKTtlPUFGYihERmIoQ0ZiKEJGYihFRmIobmV3IEZGYixvKSxnKSxjKSxCRChPaGIoYS5rLGIuYyksMTIxKSkpO2Y9QUZiKERGYihDRmIoQkZiKEVGYihuZXcgRkZiLG8pLGspLGMpLEJEKE9oYihhLmssYi5kKSwxMjEpKSk7ZD1uZXcgcUtjKGUsZik7YS5jW2IucF09ZH1cbmZ1bmN0aW9uIE5FYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7Zz1uZXcgX0VjKGEsYixjKTtpPW5ldyBCaWIoZCwwKTtlPWZhbHNlO3doaWxlKGkuYjxpLmQuZ2MoKSl7aD0oc0NiKGkuYjxpLmQuZ2MoKSksQkQoaS5kLlhiKGkuYz1pLmIrKyksMjMzKSk7aWYoaD09Ynx8aD09Yyl7dWliKGkpfWVsc2UgaWYoIWUmJkVkYihSRWMoaC5nLGguZFswXSkuYSk+RWRiKFJFYyhnLmcsZy5kWzBdKS5hKSl7c0NiKGkuYj4wKTtpLmEuWGIoaS5jPS0taS5iKTtBaWIoaSxnKTtlPXRydWV9ZWxzZSBpZighIWguZSYmaC5lLmdjKCk+MCl7Zj0oIWguZSYmKGguZT1uZXcgUmtiKSxoLmUpLk1jKGIpO2o9KCFoLmUmJihoLmU9bmV3IFJrYiksaC5lKS5NYyhjKTtpZihmfHxqKXsoIWguZSYmKGguZT1uZXcgUmtiKSxoLmUpLkZjKGcpOysrZy5jfX19ZXx8KGQuY1tkLmMubGVuZ3RoXT1nLHRydWUpfVxuZnVuY3Rpb24gb2RjKGEpe3ZhciBiLGMsZDtpZihmY2QoQkQodk5iKGEsKE55YygpLFZ4YykpLDk4KSkpe2ZvcihjPW5ldyBvbGIoYS5qKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTEpO2Iuaj09KFVjZCgpLFNjZCkmJihkPUJEKHZOYihiLCh3dGMoKSxndGMpKSwxMCksZD9HMGIoYixCRCh2TmIoZCxIc2MpLDYxKSk6Yi5lLmMubGVuZ3RoLWIuZy5jLmxlbmd0aDwwP0cwYihiLHpjZCk6RzBiKGIsVGNkKSl9fWVsc2V7Zm9yKGM9bmV3IG9sYihhLmopO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMSk7ZD1CRCh2TmIoYiwod3RjKCksZ3RjKSksMTApO2Q/RzBiKGIsQkQodk5iKGQsSHNjKSw2MSkpOmIuZS5jLmxlbmd0aC1iLmcuYy5sZW5ndGg8MD9HMGIoYiwoVWNkKCksemNkKSk6RzBiKGIsKFVjZCgpLFRjZCkpfXlOYihhLFZ4YywoZGNkKCksYWNkKSl9fVxuZnVuY3Rpb24gYWdlKGEpe3ZhciBiLGMsZDtzd2l0Y2goYSl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6ZD0nXFxcXCcrU3RyaW5nLmZyb21DaGFyQ29kZShhJmFqZSk7YnJlYWs7Y2FzZSAxMjpkPSdcXFxcZic7YnJlYWs7Y2FzZSAxMDpkPSdcXFxcbic7YnJlYWs7Y2FzZSAxMzpkPSdcXFxccic7YnJlYWs7Y2FzZSA5OmQ9J1xcXFx0JzticmVhaztjYXNlIDI3OmQ9J1xcXFxlJzticmVhaztkZWZhdWx0OmlmKGE8MzIpe2M9KGI9YT4+PjAsJzAnK2IudG9TdHJpbmcoMTYpKTtkPSdcXFxceCcrcWZiKGMsYy5sZW5ndGgtMixjLmxlbmd0aCl9ZWxzZSBpZihhPj1UamUpe2M9KGI9YT4+PjAsJzAnK2IudG9TdHJpbmcoMTYpKTtkPSdcXFxcdicrcWZiKGMsYy5sZW5ndGgtNixjLmxlbmd0aCl9ZWxzZSBkPScnK1N0cmluZy5mcm9tQ2hhckNvZGUoYSZhamUpO31yZXR1cm4gZH1cbmZ1bmN0aW9uIHloYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2c9YS5lO2k9Yi5lO2lmKGk9PTApe3JldHVybiBhfWlmKGc9PTApe3JldHVybiBiLmU9PTA/YjpuZXcgVmdiKC1iLmUsYi5kLGIuYSl9Zj1hLmQ7aD1iLmQ7aWYoZitoPT0yKXtjPXhiYihhLmFbMF0sWWplKTtkPXhiYihiLmFbMF0sWWplKTtnPDAmJihjPUpiYihjKSk7aTwwJiYoZD1KYmIoZCkpO3JldHVybiBnaGIoUWJiKGMsZCkpfWU9ZiE9aD9mPmg/MTotMTp3aGIoYS5hLGIuYSxmKTtpZihlPT0tMSl7bD0taTtrPWc9PWk/emhiKGIuYSxoLGEuYSxmKTp1aGIoYi5hLGgsYS5hLGYpfWVsc2V7bD1nO2lmKGc9PWkpe2lmKGU9PTApe3JldHVybiBIZ2IoKSxHZ2J9az16aGIoYS5hLGYsYi5hLGgpfWVsc2V7az11aGIoYS5hLGYsYi5hLGgpfX1qPW5ldyBWZ2IobCxrLmxlbmd0aCxrKTtKZ2Ioaik7cmV0dXJuIGp9XG5mdW5jdGlvbiBZUGMoYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMuZT1uZXcgUmtiO3RoaXMuYT1uZXcgUmtiO2ZvcihjPWEuYi0xO2M8MztjKyspe1N0KGEsMCxCRChVdChhLDApLDgpKX1pZihhLmI8NCl7dGhyb3cgdmJiKG5ldyBXZGIoJ0F0IChsZWFzdCBkaW1lbnNpb24gKyAxKSBjb250cm9sIHBvaW50cyBhcmUgbmVjZXNzYXJ5IScpKX1lbHNle3RoaXMuYj0zO3RoaXMuZD10cnVlO3RoaXMuYz1mYWxzZTtUUGModGhpcyxhLmIrdGhpcy5iLTEpO2c9bmV3IFJrYjtmPW5ldyBvbGIodGhpcy5lKTtmb3IoYj0wO2I8dGhpcy5iLTE7YisrKXtFa2IoZyxFRChtbGIoZikpKX1mb3IoZT1Kc2IoYSwwKTtlLmIhPWUuZC5jOyl7ZD1CRChYc2IoZSksOCk7RWtiKGcsRUQobWxiKGYpKSk7RWtiKHRoaXMuYSxuZXcgYlFjKGQsZykpO3RDYigwLGcuYy5sZW5ndGgpO2cuYy5zcGxpY2UoMCwxKX19fVxuZnVuY3Rpb24gQmFjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2ZvcihmPW5ldyBvbGIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMjkpO2ZvcihoPW5ldyBvbGIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTApO2lmKGcuaz09KGowYigpLGYwYikpe2k9KGo9QkQoUnIobmV3IFNyKHVyKFJfYihnKS5hLktjKCksbmV3IFNxKSkpLDE3KSxrPUJEKFJyKG5ldyBTcih1cihVX2IoZykuYS5LYygpLG5ldyBTcSkpKSwxNyksIUNjYihERCh2TmIoaiwod3RjKCksbHRjKSkpKXx8IUNjYihERCh2TmIoayxsdGMpKSkpP2I6c2JkKGIpO3phYyhnLGkpfWZvcihkPW5ldyBTcih1cihVX2IoZykuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSwxNyk7aT1DY2IoREQodk5iKGMsKHd0YygpLGx0YykpKSk/c2JkKGIpOmI7eWFjKGMsaSl9fX19XG5mdW5jdGlvbiB5WmMoYSxiLGMsZCxlKXt2YXIgZixnLGg7aWYoYy5mPj1iLm8mJmMuZjw9Yi5mfHxiLmEqMC41PD1jLmYmJmIuYSoxLjU+PWMuZil7Zz1CRChJa2IoYi5uLGIubi5jLmxlbmd0aC0xKSwyMTEpO2lmKGcuZStnLmQrYy5nK2U8PWQmJihmPUJEKElrYihiLm4sYi5uLmMubGVuZ3RoLTEpLDIxMSksZi5mLWEuZitjLmY8PWEuYnx8YS5hLmMubGVuZ3RoPT0xKSl7RVpjKGIsYyk7cmV0dXJuIHRydWV9ZWxzZSBpZihiLnMrYy5nPD1kJiYoYi50K2IuZCtjLmYrZTw9YS5ifHxhLmEuYy5sZW5ndGg9PTEpKXtFa2IoYi5iLGMpO2g9QkQoSWtiKGIubixiLm4uYy5sZW5ndGgtMSksMjExKTtFa2IoYi5uLG5ldyBWWmMoYi5zLGguZitoLmErYi5pLGIuaSkpO1FaYyhCRChJa2IoYi5uLGIubi5jLmxlbmd0aC0xKSwyMTEpLGMpO0daYyhiLGMpO3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9XG5mdW5jdGlvbiBaeGQoYSxiLGMpe3ZhciBkLGUsZixnO2lmKGEuZWooKSl7ZT1udWxsO2Y9YS5maigpO2Q9YS5aaSgxLGc9dXVkKGEsYixjKSxjLGIsZik7aWYoYS5iaigpJiYhKGEubmkoKSYmZyE9bnVsbD9wYihnLGMpOlBEKGcpPT09UEQoYykpKXtnIT1udWxsJiYoZT1hLmRqKGcsZSkpO2U9YS5jaihjLGUpO2EuaWooKSYmKGU9YS5saihnLGMsZSkpO2lmKCFlKXthLiRpKGQpfWVsc2V7ZS5FaShkKTtlLkZpKCl9fWVsc2V7YS5paigpJiYoZT1hLmxqKGcsYyxlKSk7aWYoIWUpe2EuJGkoZCl9ZWxzZXtlLkVpKGQpO2UuRmkoKX19cmV0dXJuIGd9ZWxzZXtnPXV1ZChhLGIsYyk7aWYoYS5iaigpJiYhKGEubmkoKSYmZyE9bnVsbD9wYihnLGMpOlBEKGcpPT09UEQoYykpKXtlPW51bGw7ZyE9bnVsbCYmKGU9YS5kaihnLG51bGwpKTtlPWEuY2ooYyxlKTshIWUmJmUuRmkoKX1yZXR1cm4gZ319XG5mdW5jdGlvbiBZQShhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7YiU9MjQ7aWYoYS5xLmdldEhvdXJzKCkhPWIpe2Q9bmV3ICR3bmQuRGF0ZShhLnEuZ2V0VGltZSgpKTtkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7aD1hLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1kLmdldFRpbWV6b25lT2Zmc2V0KCk7aWYoaD4wKXtpPWgvNjB8MDtqPWglNjA7ZT1hLnEuZ2V0RGF0ZSgpO2M9YS5xLmdldEhvdXJzKCk7YytpPj0yNCYmKytlO2Y9bmV3ICR3bmQuRGF0ZShhLnEuZ2V0RnVsbFllYXIoKSxhLnEuZ2V0TW9udGgoKSxlLGIraSxhLnEuZ2V0TWludXRlcygpK2osYS5xLmdldFNlY29uZHMoKSxhLnEuZ2V0TWlsbGlzZWNvbmRzKCkpO2EucS5zZXRUaW1lKGYuZ2V0VGltZSgpKX19Zz1hLnEuZ2V0VGltZSgpO2EucS5zZXRUaW1lKGcrMzYwMDAwMCk7YS5xLmdldEhvdXJzKCkhPWImJmEucS5zZXRUaW1lKGcpfVxuZnVuY3Rpb24gb3BjKGEsYil7dmFyIGMsZCxlLGYsZztPZGQoYiwnUGF0aC1MaWtlIEdyYXBoIFdyYXBwaW5nJywxKTtpZihhLmIuYy5sZW5ndGg9PTApe1FkZChiKTtyZXR1cm59ZT1uZXcgWG9jKGEpO2c9KGUuaT09bnVsbCYmKGUuaT1Tb2MoZSxuZXcgWm9jKSksRWRiKGUuaSkqZS5mKTtjPWcvKGUuaT09bnVsbCYmKGUuaT1Tb2MoZSxuZXcgWm9jKSksRWRiKGUuaSkpO2lmKGUuYj5jKXtRZGQoYik7cmV0dXJufXN3aXRjaChCRCh2TmIoYSwoTnljKCksR3ljKSksMzM3KS5nKXtjYXNlIDI6Zj1uZXcgaHBjO2JyZWFrO2Nhc2UgMDpmPW5ldyBZbmM7YnJlYWs7ZGVmYXVsdDpmPW5ldyBrcGM7fWQ9Zi5WZihhLGUpO2lmKCFmLldmKCkpe3N3aXRjaChCRCh2TmIoYSxNeWMpLDMzOCkuZyl7Y2FzZSAyOmQ9dHBjKGUsZCk7YnJlYWs7Y2FzZSAxOmQ9cnBjKGUsZCk7fX1ucGMoYSxlLGQpO1FkZChiKX1cbmZ1bmN0aW9uIE1GYyhhLGIpe3ZhciBjLGQsZSxmO0Z1YihhLmQsYS5lKTthLmMuYS4kYigpO2lmKEVkYihFRCh2TmIoYi5qLChOeWMoKSx1d2MpKSkpIT0wfHxFZGIoRUQodk5iKGIuaix1d2MpKSkhPTApe2M9ZG1lO1BEKHZOYihiLmoseXdjKSkhPT1QRCgodEFjKCksckFjKSkmJnlOYihiLmosKHd0YygpLEpzYyksKEJjYigpLHRydWUpKTtmPUJEKHZOYihiLmosQXljKSwxOSkuYTtmb3IoZT0wO2U8ZjtlKyspe2Q9V0ZjKGEsYik7aWYoZDxjKXtjPWQ7WkZjKGEpO2lmKGM9PTApe2JyZWFrfX19fWVsc2V7Yz1PaGU7UEQodk5iKGIuaix5d2MpKSE9PVBEKCh0QWMoKSxyQWMpKSYmeU5iKGIuaiwod3RjKCksSnNjKSwoQmNiKCksdHJ1ZSkpO2Y9QkQodk5iKGIuaixBeWMpLDE5KS5hO2ZvcihlPTA7ZTxmO2UrKyl7ZD1YRmMoYSxiKTtpZihkPGMpe2M9ZDtaRmMoYSk7aWYoYz09MCl7YnJlYWt9fX19fVxuZnVuY3Rpb24gc3BjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtnPW5ldyBSa2I7aD0wO2M9MDtpPTA7d2hpbGUoaDxiLmMubGVuZ3RoLTEmJmM8YS5nYygpKXtkPUJEKGEuWGIoYyksMTkpLmEraTt3aGlsZSgodENiKGgrMSxiLmMubGVuZ3RoKSxCRChiLmNbaCsxXSwxOSkpLmE8ZCl7KytofWo9MDtmPWQtKHRDYihoLGIuYy5sZW5ndGgpLEJEKGIuY1toXSwxOSkpLmE7ZT0odENiKGgrMSxiLmMubGVuZ3RoKSxCRChiLmNbaCsxXSwxOSkpLmEtZDtmPmUmJisrajtFa2IoZywodENiKGgraixiLmMubGVuZ3RoKSxCRChiLmNbaCtqXSwxOSkpKTtpKz0odENiKGgraixiLmMubGVuZ3RoKSxCRChiLmNbaCtqXSwxOSkpLmEtZDsrK2M7d2hpbGUoYzxhLmdjKCkmJkJEKGEuWGIoYyksMTkpLmEraTw9KHRDYihoK2osYi5jLmxlbmd0aCksQkQoYi5jW2gral0sMTkpKS5hKXsrK2N9aCs9MStqfXJldHVybiBnfVxuZnVuY3Rpb24gUktkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKCFhLmQpe2g9bmV3IFhOZDtiPUtLZDtmPWIuYS56YyhhLGIpO2lmKGY9PW51bGwpe2ZvcihkPW5ldyBGeWQoX0tkKGEpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksMjYpO3l0ZChoLFJLZChjKSl9Yi5hLkJjKGEpIT1udWxsO2IuYS5nYygpPT0wJiZ1bmRlZmluZWR9Zz1oLmk7Zm9yKGU9KCFhLnEmJihhLnE9bmV3IGNVZChuNSxhLDExLDEwKSksbmV3IEZ5ZChhLnEpKTtlLmUhPWUuaS5nYygpOysrZyl7QkQoRHlkKGUpLDM5OSl9eXRkKGgsKCFhLnEmJihhLnE9bmV3IGNVZChuNSxhLDExLDEwKSksYS5xKSk7dnVkKGgpO2EuZD1uZXcgbk5kKChCRChxdWQoWktkKChORmQoKSxNRmQpLm8pLDkpLDE4KSxoLmkpLGguZyk7YS5lPUJEKGguZyw2NzMpO2EuZT09bnVsbCYmKGEuZT1MS2QpOyRLZChhKS5iJj0tMTd9cmV0dXJuIGEuZH1cbmZ1bmN0aW9uIE0yZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7aj1TNmQoYS5lLlRnKCksYik7aT0wO2U9QkQoYS5nLDExOSk7UTZkKCk7aWYoQkQoYiw2NikuT2ooKSl7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihqLnJsKGYuYWsoKSkpe2lmKHBiKGYsYykpe3JldHVybiBpfSsraX19fWVsc2UgaWYoYyE9bnVsbCl7Zm9yKGg9MDtoPGEuaTsrK2gpe2Y9ZVtoXTtpZihqLnJsKGYuYWsoKSkpe2lmKHBiKGMsZi5kZCgpKSl7cmV0dXJuIGl9KytpfX1pZihkKXtpPTA7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihqLnJsKGYuYWsoKSkpe2lmKFBEKGMpPT09UEQoYTNkKGEsQkQoZi5kZCgpLDU2KSkpKXtyZXR1cm4gaX0rK2l9fX19ZWxzZXtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGoucmwoZi5haygpKSl7aWYoZi5kZCgpPT1udWxsKXtyZXR1cm4gaX0rK2l9fX1yZXR1cm4gLTF9XG5mdW5jdGlvbiBhZWQoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG47bW1iKCk7T2tiKGEsbmV3IEplZCk7Zz1SdShhKTtuPW5ldyBSa2I7bT1uZXcgUmtiO2g9bnVsbDtpPTA7d2hpbGUoZy5iIT0wKXtmPUJEKGcuYj09MD9udWxsOihzQ2IoZy5iIT0wKSxOc2IoZyxnLmEuYSkpLDE1Nyk7aWYoIWh8fHJlZChoKSpxZWQoaCkvMjxyZWQoZikqcWVkKGYpKXtoPWY7bi5jW24uYy5sZW5ndGhdPWZ9ZWxzZXtpKz1yZWQoZikqcWVkKGYpO20uY1ttLmMubGVuZ3RoXT1mO2lmKG0uYy5sZW5ndGg+MSYmKGk+cmVkKGgpKnFlZChoKS8yfHxnLmI9PTApKXtsPW5ldyB3ZWQobSk7az1yZWQoaCkvcWVkKGgpO2o9ZmVkKGwsYixuZXcgcDBiLGMsZCxlLGspO1A2YyhYNmMobC5lKSxqKTtoPWw7bi5jW24uYy5sZW5ndGhdPWw7aT0wO20uYz1LQyhTSSxVaGUsMSwwLDUsMSl9fX1Ha2IobixtKTtyZXR1cm4gbn1cbmZ1bmN0aW9uIHk2ZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aWYoYy5taChiKSl7az0obj1iLCFuP251bGw6QkQoZCw0OSkueGgobikpO2lmKGspe3A9Yy5iaChiLGEuYSk7bz1iLnQ7aWYobz4xfHxvPT0tMSl7bD1CRChwLDY5KTttPUJEKGssNjkpO2lmKGwuZGMoKSl7bS4kYigpfWVsc2V7Zz0hIXpVZChiKTtmPTA7Zm9yKGg9YS5hP2wuS2MoKTpsLlpoKCk7aC5PYigpOyl7aj1CRChoLlBiKCksNTYpO2U9QkQoV3JiKGEsaiksNTYpO2lmKCFlKXtpZihhLmImJiFnKXttLlhoKGYsaik7KytmfX1lbHNle2lmKGcpe2k9bS5YYyhlKTtpPT0tMT9tLlhoKGYsZSk6ZiE9aSYmbS5qaShmLGUpfWVsc2V7bS5YaChmLGUpfSsrZn19fX1lbHNle2lmKHA9PW51bGwpe2suV2IobnVsbCl9ZWxzZXtlPVdyYihhLHApO2U9PW51bGw/YS5iJiYhelVkKGIpJiZrLldiKHApOmsuV2IoZSl9fX19fVxuZnVuY3Rpb24gRTZiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtjPW5ldyBMNmI7Zm9yKGU9bmV3IFNyKHVyKFJfYihiKS5hLktjKCksbmV3IFNxKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDE3KTtpZihPWmIoZCkpe2NvbnRpbnVlfWg9ZC5jLmk7aWYoRjZiKGgsQzZiKSl7aj1HNmIoYSxoLEM2YixCNmIpO2lmKGo9PS0xKXtjb250aW51ZX1jLmI9JHduZC5NYXRoLm1heChjLmIsaik7IWMuYSYmKGMuYT1uZXcgUmtiKTtFa2IoYy5hLGgpfX1mb3IoZz1uZXcgU3IodXIoVV9iKGIpLmEuS2MoKSxuZXcgU3EpKTtRcihnKTspe2Y9QkQoUnIoZyksMTcpO2lmKE9aYihmKSl7Y29udGludWV9aT1mLmQuaTtpZihGNmIoaSxCNmIpKXtqPUc2YihhLGksQjZiLEM2Yik7aWYoaj09LTEpe2NvbnRpbnVlfWMuZD0kd25kLk1hdGgubWF4KGMuZCxqKTshYy5jJiYoYy5jPW5ldyBSa2IpO0VrYihjLmMsaSl9fXJldHVybiBjfVxuZnVuY3Rpb24gS2hiKGEpe0RoYigpO3ZhciBiLGMsZCxlO2I9UUQoYSk7aWYoYTxDaGIubGVuZ3RoKXtyZXR1cm4gQ2hiW2JdfWVsc2UgaWYoYTw9NTApe3JldHVybiBQZ2IoKEhnYigpLEVnYiksYil9ZWxzZSBpZihhPD1faWUpe3JldHVybiBRZ2IoUGdiKEJoYlsxXSxiKSxiKX1pZihhPjEwMDAwMDApe3Rocm93IHZiYihuZXcgb2NiKCdwb3dlciBvZiB0ZW4gdG9vIGJpZycpKX1pZihhPD1PaGUpe3JldHVybiBRZ2IoUGdiKEJoYlsxXSxiKSxiKX1kPVBnYihCaGJbMV0sT2hlKTtlPWQ7Yz1DYmIoYS1PaGUpO2I9UUQoYSVPaGUpO3doaWxlKHliYihjLE9oZSk+MCl7ZT1PZ2IoZSxkKTtjPVFiYihjLE9oZSl9ZT1PZ2IoZSxQZ2IoQmhiWzFdLGIpKTtlPVFnYihlLE9oZSk7Yz1DYmIoYS1PaGUpO3doaWxlKHliYihjLE9oZSk+MCl7ZT1RZ2IoZSxPaGUpO2M9UWJiKGMsT2hlKX1lPVFnYihlLGIpO3JldHVybiBlfVxuZnVuY3Rpb24gWDViKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO09kZChiLCdIaWVyYXJjaGljYWwgcG9ydCBkdW1teSBzaXplIHByb2Nlc3NpbmcnLDEpO2k9bmV3IFJrYjtrPW5ldyBSa2I7ZD1FZGIoRUQodk5iKGEsKE55YygpLG15YykpKSk7Yz1kKjI7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyOSk7aS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtrLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2ZvcihoPW5ldyBvbGIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTApO2lmKGcuaz09KGowYigpLGUwYikpe2o9QkQodk5iKGcsKHd0YygpLEhzYykpLDYxKTtqPT0oVWNkKCksQWNkKT8oaS5jW2kuYy5sZW5ndGhdPWcsdHJ1ZSk6aj09UmNkJiYoay5jW2suYy5sZW5ndGhdPWcsdHJ1ZSl9fVk1YihpLHRydWUsYyk7WTViKGssZmFsc2UsYyl9UWRkKGIpfVxuZnVuY3Rpb24gT2FjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7T2RkKGIsJ0xheWVyIGNvbnN0cmFpbnQgcG9zdHByb2Nlc3NpbmcnLDEpO2k9YS5iO2lmKGkuYy5sZW5ndGghPTApe2Q9KHRDYigwLGkuYy5sZW5ndGgpLEJEKGkuY1swXSwyOSkpO2c9QkQoSWtiKGksaS5jLmxlbmd0aC0xKSwyOSk7Yz1uZXcgSDFiKGEpO2Y9bmV3IEgxYihhKTtNYWMoYSxkLGcsYyxmKTtjLmEuYy5sZW5ndGg9PTB8fCh3Q2IoMCxpLmMubGVuZ3RoKSxhQ2IoaS5jLDAsYykpO2YuYS5jLmxlbmd0aD09MHx8KGkuY1tpLmMubGVuZ3RoXT1mLHRydWUpfWlmKHdOYihhLCh3dGMoKSxMc2MpKSl7ZT1uZXcgSDFiKGEpO2g9bmV3IEgxYihhKTtQYWMoYSxlLGgpO2UuYS5jLmxlbmd0aD09MHx8KHdDYigwLGkuYy5sZW5ndGgpLGFDYihpLmMsMCxlKSk7aC5hLmMubGVuZ3RoPT0wfHwoaS5jW2kuYy5sZW5ndGhdPWgsdHJ1ZSl9UWRkKGIpfVxuZnVuY3Rpb24gYjZiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2ZvcihpPW5ldyBvbGIoYS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTApO2lmKGguayE9KGowYigpLGUwYikpe2NvbnRpbnVlfWU9QkQodk5iKGgsKHd0YygpLEhzYykpLDYxKTtpZihlPT0oVWNkKCksemNkKXx8ZT09VGNkKXtmb3IoZD1uZXcgU3IodXIoT19iKGgpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2I9Yy5hO2lmKGIuYj09MCl7Y29udGludWV9aj1jLmM7aWYoai5pPT1oKXtmPShzQ2IoYi5iIT0wKSxCRChiLmEuYS5jLDgpKTtmLmI9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2ouaS5uLGoubixqLmFdKSkuYn1rPWMuZDtpZihrLmk9PWgpe2c9KHNDYihiLmIhPTApLEJEKGIuYy5iLmMsOCkpO2cuYj1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbay5pLm4say5uLGsuYV0pKS5ifX19fX1cbmZ1bmN0aW9uIFRlYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO09kZChiLCdTb3J0IEJ5IElucHV0IE1vZGVsICcrdk5iKGEsKE55YygpLHl3YykpLDEpO2U9MDtmb3IoZD1uZXcgb2xiKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDI5KTtpPWU9PTA/MDplLTE7aD1CRChJa2IoYS5iLGkpLDI5KTtmb3IoZz1uZXcgb2xiKGMuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtpZihQRCh2TmIoZixWeGMpKSE9PVBEKChkY2QoKSxaYmQpKSYmUEQodk5iKGYsVnhjKSkhPT1QRCgkYmQpKXttbWIoKTtPa2IoZi5qLG5ldyBUbmMoaCxYZWMoZikpKTtTZGQoYiwnTm9kZSAnK2YrJyBwb3J0czogJytmLmopfX1tbWIoKTtPa2IoYy5hLG5ldyBCbmMoaCxCRCh2TmIoYSx5d2MpLDMzOSksQkQodk5iKGEsd3djKSwzNzgpKSk7U2RkKGIsJ0xheWVyICcrZSsnOiAnK2MpOysrZX1RZGQoYil9XG5mdW5jdGlvbiBVMWIoYSxiKXt2YXIgYyxkLGUsZjtmPVAxYihiKTtNQWIobmV3IFlBYihudWxsLCghYi5jJiYoYi5jPW5ldyBjVWQoRjIsYiw5LDkpKSxuZXcgS3ViKGIuYywxNikpKSxuZXcgaTJiKGYpKTtlPUJEKHZOYihmLCh3dGMoKSxLc2MpKSwyMSk7TzFiKGIsZSk7aWYoZS5IYygoT3JjKCksSHJjKSkpe2ZvcihkPW5ldyBGeWQoKCFiLmMmJihiLmM9bmV3IGNVZChGMixiLDksOSkpLGIuYykpO2QuZSE9ZC5pLmdjKCk7KXtjPUJEKER5ZChkKSwxMTgpO1kxYihhLGIsZixjKX19QkQoaGtkKGIsKE55YygpLEZ4YykpLDE3NCkuZ2MoKSE9MCYmTDFiKGIsZik7Q2NiKEREKHZOYihmLE14YykpKSYmZS5GYyhNcmMpO3dOYihmLGh5YykmJld5YyhuZXcgZXpjKEVkYihFRCh2TmIoZixoeWMpKSkpLGYpO1BEKGhrZChiLGF4YykpPT09UEQoKGhiZCgpLGViZCkpP1YxYihhLGIsZik6VDFiKGEsYixmKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIGhpYyhhLGIsYyxkKXt2YXIgZSxmLGc7dGhpcy5qPW5ldyBSa2I7dGhpcy5rPW5ldyBSa2I7dGhpcy5iPW5ldyBSa2I7dGhpcy5jPW5ldyBSa2I7dGhpcy5lPW5ldyBJNmM7dGhpcy5pPW5ldyBzN2M7dGhpcy5mPW5ldyBsRWI7dGhpcy5kPW5ldyBSa2I7dGhpcy5nPW5ldyBSa2I7RWtiKHRoaXMuYixhKTtFa2IodGhpcy5iLGIpO3RoaXMuZS5jPSR3bmQuTWF0aC5taW4oYS5hLGIuYSk7dGhpcy5lLmQ9JHduZC5NYXRoLm1pbihhLmIsYi5iKTt0aGlzLmUuYj0kd25kLk1hdGguYWJzKGEuYS1iLmEpO3RoaXMuZS5hPSR3bmQuTWF0aC5hYnMoYS5iLWIuYik7ZT1CRCh2TmIoZCwoTnljKCksanhjKSksNzQpO2lmKGUpe2ZvcihnPUpzYihlLDApO2cuYiE9Zy5kLmM7KXtmPUJEKFhzYihnKSw4KTtBRGIoZi5hLGEuYSkmJkRzYih0aGlzLmksZil9fSEhYyYmRWtiKHRoaXMuaixjKTtFa2IodGhpcy5rLGQpfVxuZnVuY3Rpb24gb1RiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtrPW5ldyBndWIobmV3IEVUYihjKSk7aD1LQyhzYmIsZGxlLDI1LGEuZi5lLmMubGVuZ3RoLDE2LDEpO0dsYihoLGgubGVuZ3RoKTtjW2IuYl09MDtmb3Ioaj1uZXcgb2xiKGEuZi5lKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTQ0KTtpLmIhPWIuYiYmKGNbaS5iXT1PaGUpO3pDYihjdWIoayxpKSl9d2hpbGUoay5iLmMubGVuZ3RoIT0wKXtsPUJEKGR1YihrKSwxNDQpO2hbbC5iXT10cnVlO2ZvcihmPWF1KG5ldyBidShhLmIsbCksMCk7Zi5jOyl7ZT1CRCh1dShmKSwyODIpO209clRiKGUsbCk7aWYoaFttLmJdKXtjb250aW51ZX13TmIoZSwoYlRiKCksUlNiKSk/KGc9RWRiKEVEKHZOYihlLFJTYikpKSk6KGc9YS5jKTtkPWNbbC5iXStnO2lmKGQ8Y1ttLmJdKXtjW20uYl09ZDtldWIoayxtKTt6Q2IoY3ViKGssbSkpfX19fVxuZnVuY3Rpb24geE1jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7ZT10cnVlO2ZvcihnPW5ldyBvbGIoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMjkpO2o9UWplO2s9bnVsbDtmb3IoaT1uZXcgb2xiKGYuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtsPUVkYihiLnBbaC5wXSkrRWRiKGIuZFtoLnBdKS1oLmQuZDtkPUVkYihiLnBbaC5wXSkrRWRiKGIuZFtoLnBdKStoLm8uYitoLmQuYTtpZihsPmomJmQ+ail7az1oO2o9RWRiKGIucFtoLnBdKStFZGIoYi5kW2gucF0pK2guby5iK2guZC5hfWVsc2V7ZT1mYWxzZTtjLm4mJlNkZChjLCdiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gJytoKycgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAnK2spO2JyZWFrfX1pZighZSl7YnJlYWt9fWMubiYmU2RkKGMsYisnIGlzIGZlYXNpYmxlOiAnK2UpO3JldHVybiBlfVxuZnVuY3Rpb24gWE5jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2g9LTE7Zm9yKGs9bmV3IG9sYihhKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksMTEyKTtqLmc9aC0tO2U9VGJiKHRBYihQQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGouZiwxNikpLG5ldyBaTmMpLG5ldyBfTmMpKS5kKTtmPVRiYih0QWIoUEFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihqLmssMTYpKSxuZXcgYk9jKSxuZXcgZE9jKSkuZCk7Zz1lO2k9ZjtpZighZCl7Zz1UYmIodEFiKFBBYihuZXcgWUFiKG51bGwsbmV3IEt1YihqLmYsMTYpKSxuZXcgZk9jKSkuZCk7aT1UYmIodEFiKFBBYihuZXcgWUFiKG51bGwsbmV3IEt1YihqLmssMTYpKSxuZXcgaE9jKSkuZCl9ai5kPWc7ai5hPWU7ai5pPWk7ai5iPWY7aT09MD8oR3NiKGMsaixjLmMuYixjLmMpLHRydWUpOmc9PTAmJihHc2IoYixqLGIuYy5iLGIuYyksdHJ1ZSl9fVxuZnVuY3Rpb24gJDhiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2lmKGMuZC5pPT1iLmkpe3JldHVybn1lPW5ldyBiMGIoYSk7X19iKGUsKGowYigpLGcwYikpO3lOYihlLCh3dGMoKSwkc2MpLGMpO3lOYihlLChOeWMoKSxWeGMpLChkY2QoKSwkYmQpKTtkLmNbZC5jLmxlbmd0aF09ZTtnPW5ldyBIMGI7RjBiKGcsZSk7RzBiKGcsKFVjZCgpLFRjZCkpO2g9bmV3IEgwYjtGMGIoaCxlKTtHMGIoaCx6Y2QpO2s9Yy5kO1JaYihjLGcpO2Y9bmV3IFVaYjt0TmIoZixjKTt5TmIoZixqeGMsbnVsbCk7UVpiKGYsaCk7UlpiKGYsayk7aj1uZXcgQmliKGMuYiwwKTt3aGlsZShqLmI8ai5kLmdjKCkpe2k9KHNDYihqLmI8ai5kLmdjKCkpLEJEKGouZC5YYihqLmM9ai5iKyspLDcwKSk7aWYoUEQodk5iKGksUXdjKSk9PT1QRCgocWFkKCksb2FkKSkpe3lOYihpLERzYyxjKTt1aWIoaik7RWtiKGYuYixpKX19YTliKGUsZyxoKX1cbmZ1bmN0aW9uIFo4YihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpZihjLmMuaT09Yi5pKXtyZXR1cm59ZT1uZXcgYjBiKGEpO19fYihlLChqMGIoKSxnMGIpKTt5TmIoZSwod3RjKCksJHNjKSxjKTt5TmIoZSwoTnljKCksVnhjKSwoZGNkKCksJGJkKSk7ZC5jW2QuYy5sZW5ndGhdPWU7Zz1uZXcgSDBiO0YwYihnLGUpO0cwYihnLChVY2QoKSxUY2QpKTtoPW5ldyBIMGI7RjBiKGgsZSk7RzBiKGgsemNkKTtSWmIoYyxnKTtmPW5ldyBVWmI7dE5iKGYsYyk7eU5iKGYsanhjLG51bGwpO1FaYihmLGgpO1JaYihmLGIpO2E5YihlLGcsaCk7aj1uZXcgQmliKGMuYiwwKTt3aGlsZShqLmI8ai5kLmdjKCkpe2k9KHNDYihqLmI8ai5kLmdjKCkpLEJEKGouZC5YYihqLmM9ai5iKyspLDcwKSk7az1CRCh2TmIoaSxRd2MpLDI3Mik7aWYoaz09KHFhZCgpLG9hZCkpe3dOYihpLERzYyl8fHlOYihpLERzYyxjKTt1aWIoaik7RWtiKGYuYixpKX19fVxuZnVuY3Rpb24gZERjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O209bmV3IFJrYjtyPUd4KGQpO3E9YiphLmE7bD0wO289MDtmPW5ldyBUcWI7Zz1uZXcgVHFiO2g9bmV3IFJrYjtzPTA7dD0wO249MDtwPTA7aj0wO2s9MDt3aGlsZShyLmEuZ2MoKSE9MCl7aT1oRGMocixlLGcpO2lmKGkpe3IuYS5CYyhpKSE9bnVsbDtoLmNbaC5jLmxlbmd0aF09aTtmLmEuemMoaSxmKTtvPWEuZltpLnBdO3MrPWEuZVtpLnBdLW8qYS5iO2w9YS5jW2kucF07dCs9bCphLmI7ays9byphLmI7cCs9YS5lW2kucF19aWYoIWl8fHIuYS5nYygpPT0wfHxzPj1xJiZhLmVbaS5wXT5vKmEuYnx8dD49YypxKXttLmNbbS5jLmxlbmd0aF09aDtoPW5ldyBSa2I7eWUoZyxmKTtmLmEuJGIoKTtqLT1rO249JHduZC5NYXRoLm1heChuLGoqYS5iK3ApO2orPXQ7cz10O3Q9MDtrPTA7cD0wfX1yZXR1cm4gbmV3IHZnZChuLG0pfVxuZnVuY3Rpb24gcTRjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2ZvcihjPShqPShuZXcgJGliKGEuYy5iKSkuYS52YygpLktjKCksbmV3IGRqYihqKSk7Yy5hLk9iKCk7KXtiPShoPUJEKGMuYS5QYigpLDQyKSxCRChoLmRkKCksMTQ5KSk7ZT1iLmE7ZT09bnVsbCYmKGU9JycpO2Q9aTRjKGEuYyxlKTshZCYmZS5sZW5ndGg9PTAmJihkPXU0YyhhKSk7ISFkJiYhemUoZC5jLGIsZmFsc2UpJiZEc2IoZC5jLGIpfWZvcihnPUpzYihhLmEsMCk7Zy5iIT1nLmQuYzspe2Y9QkQoWHNiKGcpLDQ3OCk7az1qNGMoYS5jLGYuYSk7bj1qNGMoYS5jLGYuYik7ISFrJiYhIW4mJkRzYihrLmMsbmV3IHZnZChuLGYuYykpfU9zYihhLmEpO2ZvcihtPUpzYihhLmIsMCk7bS5iIT1tLmQuYzspe2w9QkQoWHNiKG0pLDQ3OCk7Yj1nNGMoYS5jLGwuYSk7aT1qNGMoYS5jLGwuYik7ISFiJiYhIWkmJkIzYyhiLGksbC5jKX1Pc2IoYS5iKX1cbmZ1bmN0aW9uIHF2ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbjtmPW5ldyBmQyhhKTtnPW5ldyBpcmQ7ZT0oa28oZy5nKSxrbyhnLmopLFVoYihnLmIpLGtvKGcuZCksa28oZy5pKSxVaGIoZy5rKSxVaGIoZy5jKSxVaGIoZy5lKSxuPWRyZChnLGYsbnVsbCksYXJkKGcsZiksbik7aWYoYil7aj1uZXcgZkMoYik7aD1ydmQoaik7amZkKGUsT0MoR0MoZzIsMSksVWhlLDUyNywwLFtoXSkpfW09ZmFsc2U7bD1mYWxzZTtpZihjKXtqPW5ldyBmQyhjKTtxdWUgaW4gai5hJiYobT1hQyhqLHF1ZSkuZ2UoKS5hKTtydWUgaW4gai5hJiYobD1hQyhqLHJ1ZSkuZ2UoKS5hKX1rPVZkZChYZGQobmV3IFpkZCxtKSxsKTt0MmMobmV3IHcyYyxlLGspO3F1ZSBpbiBmLmEmJmNDKGYscXVlLG51bGwpO2lmKG18fGwpe2k9bmV3IGVDO252ZChrLGksbSxsKTtjQyhmLHF1ZSxpKX1kPW5ldyBQcmQoZyk7R2hlKG5ldyBfdWQoZSksZCl9XG5mdW5jdGlvbiBwQShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO2c9bmV3IG5CO2o9T0MoR0MoV0QsMSksb2plLDI1LDE1LFswXSk7ZT0tMTtmPTA7ZD0wO2ZvcihpPTA7aTxhLmIuYy5sZW5ndGg7KytpKXtrPUJEKElrYihhLmIsaSksNDM0KTtpZihrLmI+MCl7aWYoZTwwJiZrLmEpe2U9aTtmPWpbMF07ZD0wfWlmKGU+PTApe2g9ay5iO2lmKGk9PWUpe2gtPWQrKztpZihoPT0wKXtyZXR1cm4gMH19aWYoIXdBKGIsaixrLGgsZykpe2k9ZS0xO2pbMF09Zjtjb250aW51ZX19ZWxzZXtlPS0xO2lmKCF3QShiLGosaywwLGcpKXtyZXR1cm4gMH19fWVsc2V7ZT0tMTtpZihiZmIoay5jLDApPT0zMil7bD1qWzBdO3VBKGIsaik7aWYoalswXT5sKXtjb250aW51ZX19ZWxzZSBpZihvZmIoYixrLmMsalswXSkpe2pbMF0rPWsuYy5sZW5ndGg7Y29udGludWV9cmV0dXJuIDB9fWlmKCFtQihnLGMpKXtyZXR1cm4gMH1yZXR1cm4galswXX1cbmZ1bmN0aW9uIFNLZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2lmKCFhLmYpe2k9bmV3IENOZDtoPW5ldyBDTmQ7Yj1LS2Q7Zz1iLmEuemMoYSxiKTtpZihnPT1udWxsKXtmb3IoZj1uZXcgRnlkKF9LZChhKSk7Zi5lIT1mLmkuZ2MoKTspe2U9QkQoRHlkKGYpLDI2KTt5dGQoaSxTS2QoZSkpfWIuYS5CYyhhKSE9bnVsbDtiLmEuZ2MoKT09MCYmdW5kZWZpbmVkfWZvcihkPSghYS5zJiYoYS5zPW5ldyBjVWQodDUsYSwyMSwxNykpLG5ldyBGeWQoYS5zKSk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDE3MCk7SkQoYyw5OSkmJnd0ZChoLEJEKGMsMTgpKX12dWQoaCk7YS5yPW5ldyBVTmQoYSwoQkQocXVkKFpLZCgoTkZkKCksTUZkKS5vKSw2KSwxOCksaC5pKSxoLmcpO3l0ZChpLGEucik7dnVkKGkpO2EuZj1uZXcgbk5kKChCRChxdWQoWktkKE1GZC5vKSw1KSwxOCksaS5pKSxpLmcpOyRLZChhKS5iJj0tM31yZXR1cm4gYS5mfVxuZnVuY3Rpb24gck1iKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87Zz1hLm87ZD1LQyhXRCxvamUsMjUsZywxNSwxKTtlPUtDKFdELG9qZSwyNSxnLDE1LDEpO2M9YS5wO2I9S0MoV0Qsb2plLDI1LGMsMTUsMSk7Zj1LQyhXRCxvamUsMjUsYywxNSwxKTtmb3Ioaj0wO2o8ZztqKyspe2w9MDt3aGlsZShsPGMmJiFZTWIoYSxqLGwpKXsrK2x9ZFtqXT1sfWZvcihrPTA7azxnO2srKyl7bD1jLTE7d2hpbGUobD49MCYmIVlNYihhLGssbCkpey0tbH1lW2tdPWx9Zm9yKG49MDtuPGM7bisrKXtoPTA7d2hpbGUoaDxnJiYhWU1iKGEsaCxuKSl7KytofWJbbl09aH1mb3Iobz0wO288YztvKyspe2g9Zy0xO3doaWxlKGg+PTAmJiFZTWIoYSxoLG8pKXstLWh9ZltvXT1ofWZvcihpPTA7aTxnO2krKyl7Zm9yKG09MDttPGM7bSsrKXtpPGZbbV0mJmk+YlttXSYmbTxlW2ldJiZtPmRbaV0mJmFOYihhLGksbSxmYWxzZSx0cnVlKX19fVxuZnVuY3Rpb24gbFJiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7Yz1DY2IoREQodk5iKGEsKHdTYigpLGNTYikpKSk7Zj1hLmEuYy5kO2g9YS5hLmQuZDtpZihjKXtnPVk2YyhjN2MobmV3IGY3YyhoLmEsaC5iKSxmKSwwLjUpO2k9WTZjKFI2YyhhLmUpLDAuNSk7Yj1jN2MoUDZjKG5ldyBmN2MoZi5hLGYuYiksZyksaSk7YTdjKGEuZCxiKX1lbHNle2U9RWRiKEVEKHZOYihhLmEsdFNiKSkpO2Q9YS5kO2lmKGYuYT49aC5hKXtpZihmLmI+PWguYil7ZC5hPWguYSsoZi5hLWguYSkvMitlO2QuYj1oLmIrKGYuYi1oLmIpLzItZS1hLmUuYn1lbHNle2QuYT1oLmErKGYuYS1oLmEpLzIrZTtkLmI9Zi5iKyhoLmItZi5iKS8yK2V9fWVsc2V7aWYoZi5iPj1oLmIpe2QuYT1mLmErKGguYS1mLmEpLzIrZTtkLmI9aC5iKyhmLmItaC5iKS8yK2V9ZWxzZXtkLmE9Zi5hKyhoLmEtZi5hKS8yK2U7ZC5iPWYuYisoaC5iLWYuYikvMi1lLWEuZS5ifX19fVxuZnVuY3Rpb24gUWdlKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9Zj1hLmxlbmd0aDtpZihmPT0wKXtyZXR1cm4gJyd9aT1LQyhURCwkaWUsMjUsZiwxNSwxKTtBQ2IoMCxmLGEubGVuZ3RoKTtBQ2IoMCxmLGkubGVuZ3RoKTtmZmIoYSwwLGYsaSwwKTtjPW51bGw7aD1iO2ZvcihlPTAsZz0wO2U8ZjtlKyspe2Q9aVtlXTtsZGUoKTtpZihkPD0zMiYmKGtkZVtkXSYyKSE9MCl7aWYoaCl7IWMmJihjPW5ldyBKZmIoYSkpO0dmYihjLGUtZysrKX1lbHNle2g9YjtpZihkIT0zMil7IWMmJihjPW5ldyBKZmIoYSkpO2tjYihjLGUtZyxlLWcrMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSl9fX1lbHNle2g9ZmFsc2V9fWlmKGgpe2lmKCFjKXtyZXR1cm4gYS5zdWJzdHIoMCxmLTEpfWVsc2V7Zj1jLmEubGVuZ3RoO3JldHVybiBmPjA/cWZiKGMuYSwwLGYtMSk6Jyd9fWVsc2V7cmV0dXJuICFjP2E6Yy5hfX1cbmZ1bmN0aW9uIERQYihhKXtyNGMoYSxuZXcgRTNjKFAzYyhNM2MoTzNjKE4zYyhuZXcgUjNjLFlsZSksJ0VMSyBEaXNDbycpLCdMYXlvdXRlciBmb3IgYXJyYW5naW5nIHVuY29ubmVjdGVkIHN1YmdyYXBocy4gVGhlIHN1YmdyYXBocyB0aGVtc2VsdmVzIGFyZSwgYnkgZGVmYXVsdCwgbm90IGxhaWQgb3V0LicpLG5ldyBHUGIpKSk7cDRjKGEsWWxlLFpsZSxLc2QoQlBiKSk7cDRjKGEsWWxlLCRsZSxLc2QodlBiKSk7cDRjKGEsWWxlLF9sZSxLc2QocVBiKSk7cDRjKGEsWWxlLGFtZSxLc2Qod1BiKSk7cDRjKGEsWWxlLFprZSxLc2QoelBiKSk7cDRjKGEsWWxlLCRrZSxLc2QoeVBiKSk7cDRjKGEsWWxlLFlrZSxLc2QoQVBiKSk7cDRjKGEsWWxlLF9rZSxLc2QoeFBiKSk7cDRjKGEsWWxlLFRsZSxLc2Qoc1BiKSk7cDRjKGEsWWxlLFVsZSxLc2QoclBiKSk7cDRjKGEsWWxlLFZsZSxLc2QodFBiKSk7cDRjKGEsWWxlLFdsZSxLc2QodVBiKSl9XG5mdW5jdGlvbiBaYmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO2Y9bmV3IGIwYihhKTtfX2IoZiwoajBiKCksaTBiKSk7eU5iKGYsKE55YygpLFZ4YyksKGRjZCgpLCRiZCkpO2U9MDtpZihiKXtnPW5ldyBIMGI7eU5iKGcsKHd0YygpLCRzYyksYik7eU5iKGYsJHNjLGIuaSk7RzBiKGcsKFVjZCgpLFRjZCkpO0YwYihnLGYpO209a19iKGIuZSk7Zm9yKGo9bSxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107UlpiKGksZyl9eU5iKGIsZ3RjLGYpOysrZX1pZihjKXtoPW5ldyBIMGI7eU5iKGYsKHd0YygpLCRzYyksYy5pKTt5TmIoaCwkc2MsYyk7RzBiKGgsKFVjZCgpLHpjZCkpO0YwYihoLGYpO209a19iKGMuZyk7Zm9yKGo9bSxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107UVpiKGksaCl9eU5iKGMsZ3RjLGYpOysrZX15TmIoZiwod3RjKCkseXNjKSxtZWIoZSkpO2QuY1tkLmMubGVuZ3RoXT1mO3JldHVybiBmfVxuZnVuY3Rpb24gU21kKCl7U21kPWNjYjtRbWQ9T0MoR0MoVEQsMSksJGllLDI1LDE1LFs0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2NSw2Niw2Nyw2OCw2OSw3MF0pO1JtZD1uZXcgUmVnRXhwKCdbIFxcdFxcblxcclxcZl0rJyk7dHJ5e1BtZD1PQyhHQyhjNiwxKSxVaGUsMjAxNSwwLFtuZXcgRVFkKChHQSgpLElBKFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTWlwiLExBKChLQSgpLEtBKCksSkEpKSkpKSxuZXcgRVFkKElBKFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTXCIsTEEoKG51bGwsSkEpKSkpLG5ldyBFUWQoSUEoXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIixMQSgobnVsbCxKQSkpKSksbmV3IEVRZChJQShcInl5eXktTU0tZGQnVCdISDptbVwiLExBKChudWxsLEpBKSkpKSxuZXcgRVFkKElBKCd5eXl5LU1NLWRkJyxMQSgobnVsbCxKQSkpKSldKX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSw3OCkpdGhyb3cgdmJiKGEpfX1cbmZ1bmN0aW9uIHFnYihhKXt2YXIgYixjLGQsZTtkPXNoYigoIWEuYyYmKGEuYz1maGIoYS5mKSksYS5jKSwwKTtpZihhLmU9PTB8fGEuYT09MCYmYS5mIT0tMSYmYS5lPDApe3JldHVybiBkfWI9cGdiKGEpPDA/MTowO2M9YS5lO2U9KGQubGVuZ3RoKzErJHduZC5NYXRoLmFicyhRRChhLmUpKSxuZXcgVmZiKTtiPT0xJiYoZS5hKz0nLScsZSk7aWYoYS5lPjApe2MtPWQubGVuZ3RoLWI7aWYoYz49MCl7ZS5hKz0nMC4nO2Zvcig7Yz5lZ2IubGVuZ3RoO2MtPWVnYi5sZW5ndGgpe1JmYihlLGVnYil9U2ZiKGUsZWdiLFFEKGMpKTtRZmIoZSxkLnN1YnN0cihiKSl9ZWxzZXtjPWItYztRZmIoZSxxZmIoZCxiLFFEKGMpKSk7ZS5hKz0nLic7UWZiKGUscGZiKGQsUUQoYykpKX19ZWxzZXtRZmIoZSxkLnN1YnN0cihiKSk7Zm9yKDtjPC1lZ2IubGVuZ3RoO2MrPWVnYi5sZW5ndGgpe1JmYihlLGVnYil9U2ZiKGUsZWdiLFFEKC1jKSl9cmV0dXJuIGUuYX1cbmZ1bmN0aW9uIHY2YyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG07aT1jN2MobmV3IGY3YyhjLmEsYy5iKSxhKTtqPWkuYSpiLmItaS5iKmIuYTtrPWIuYSpkLmItYi5iKmQuYTtsPShpLmEqZC5iLWkuYipkLmEpL2s7bT1qL2s7aWYoaz09MCl7aWYoaj09MCl7ZT1QNmMobmV3IGY3YyhjLmEsYy5iKSxZNmMobmV3IGY3YyhkLmEsZC5iKSwwLjUpKTtmPVM2YyhhLGUpO2c9UzZjKFA2YyhuZXcgZjdjKGEuYSxhLmIpLGIpLGUpO2g9JHduZC5NYXRoLnNxcnQoZC5hKmQuYStkLmIqZC5iKSowLjU7aWYoZjxnJiZmPD1oKXtyZXR1cm4gbmV3IGY3YyhhLmEsYS5iKX1pZihnPD1oKXtyZXR1cm4gUDZjKG5ldyBmN2MoYS5hLGEuYiksYil9cmV0dXJuIG51bGx9ZWxzZXtyZXR1cm4gbnVsbH19ZWxzZXtyZXR1cm4gbD49MCYmbDw9MSYmbT49MCYmbTw9MT9QNmMobmV3IGY3YyhhLmEsYS5iKSxZNmMobmV3IGY3YyhiLmEsYi5iKSxsKSk6bnVsbH19XG5mdW5jdGlvbiBPVGIoYSxiLGMpe3ZhciBkLGUsZixnLGg7ZD1CRCh2TmIoYSwoTnljKCksendjKSksMjEpO2MuYT5iLmEmJihkLkhjKChpOGMoKSxjOGMpKT8oYS5jLmErPShjLmEtYi5hKS8yKTpkLkhjKGU4YykmJihhLmMuYSs9Yy5hLWIuYSkpO2MuYj5iLmImJihkLkhjKChpOGMoKSxnOGMpKT8oYS5jLmIrPShjLmItYi5iKS8yKTpkLkhjKGY4YykmJihhLmMuYis9Yy5iLWIuYikpO2lmKEJEKHZOYihhLCh3dGMoKSxLc2MpKSwyMSkuSGMoKE9yYygpLEhyYykpJiYoYy5hPmIuYXx8Yy5iPmIuYikpe2ZvcihoPW5ldyBvbGIoYS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTApO2lmKGcuaz09KGowYigpLGUwYikpe2U9QkQodk5iKGcsSHNjKSw2MSk7ZT09KFVjZCgpLHpjZCk/KGcubi5hKz1jLmEtYi5hKTplPT1SY2QmJihnLm4uYis9Yy5iLWIuYil9fX1mPWEuZDthLmYuYT1jLmEtZi5iLWYuYzthLmYuYj1jLmItZi5kLWYuYX1cbmZ1bmN0aW9uIEg1YihhLGIsYyl7dmFyIGQsZSxmLGcsaDtkPUJEKHZOYihhLChOeWMoKSx6d2MpKSwyMSk7Yy5hPmIuYSYmKGQuSGMoKGk4YygpLGM4YykpPyhhLmMuYSs9KGMuYS1iLmEpLzIpOmQuSGMoZThjKSYmKGEuYy5hKz1jLmEtYi5hKSk7Yy5iPmIuYiYmKGQuSGMoKGk4YygpLGc4YykpPyhhLmMuYis9KGMuYi1iLmIpLzIpOmQuSGMoZjhjKSYmKGEuYy5iKz1jLmItYi5iKSk7aWYoQkQodk5iKGEsKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSkmJihjLmE+Yi5hfHxjLmI+Yi5iKSl7Zm9yKGc9bmV3IG9sYihhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMCk7aWYoZi5rPT0oajBiKCksZTBiKSl7ZT1CRCh2TmIoZixIc2MpLDYxKTtlPT0oVWNkKCksemNkKT8oZi5uLmErPWMuYS1iLmEpOmU9PVJjZCYmKGYubi5iKz1jLmItYi5iKX19fWg9YS5kO2EuZi5hPWMuYS1oLmItaC5jO2EuZi5iPWMuYi1oLmQtaC5hfVxuZnVuY3Rpb24ga01jKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtiPURNYyhhKTtmb3Ioaz0oaD0obmV3IFBpYihiKSkuYS52YygpLktjKCksbmV3IFZpYihoKSk7ay5hLk9iKCk7KXtqPShlPUJEKGsuYS5QYigpLDQyKSxCRChlLmNkKCksMTApKTtsPTA7bT0wO2w9ai5kLmQ7bT1qLm8uYitqLmQuYTthLmRbai5wXT0wO2M9ajt3aGlsZSgoZj1hLmFbYy5wXSkhPWope2Q9Rk1jKGMsZik7aT0wO2EuYz09KFlMYygpLFdMYyk/KGk9ZC5kLm4uYitkLmQuYS5iLWQuYy5uLmItZC5jLmEuYik6KGk9ZC5jLm4uYitkLmMuYS5iLWQuZC5uLmItZC5kLmEuYik7Zz1FZGIoYS5kW2MucF0pK2k7YS5kW2YucF09ZztsPSR3bmQuTWF0aC5tYXgobCxmLmQuZC1nKTttPSR3bmQuTWF0aC5tYXgobSxnK2Yuby5iK2YuZC5hKTtjPWZ9Yz1qO2Rve2EuZFtjLnBdPUVkYihhLmRbYy5wXSkrbDtjPWEuYVtjLnBdfXdoaWxlKGMhPWopO2EuYltqLnBdPWwrbX19XG5mdW5jdGlvbiBMT2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtO2EuYj1mYWxzZTtsPVBqZTtpPVFqZTttPVBqZTtqPVFqZTtmb3IoZD1hLmUuYS5lYygpLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjY2KTtlPWMuYTtsPSR3bmQuTWF0aC5taW4obCxlLmMpO2k9JHduZC5NYXRoLm1heChpLGUuYytlLmIpO209JHduZC5NYXRoLm1pbihtLGUuZCk7aj0kd25kLk1hdGgubWF4KGosZS5kK2UuYSk7Zm9yKGc9bmV3IG9sYihjLmMpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwzOTUpO2I9Zi5hO2lmKGIuYSl7az1lLmQrZi5iLmI7aD1rK2YuYzttPSR3bmQuTWF0aC5taW4obSxrKTtqPSR3bmQuTWF0aC5tYXgoaixoKX1lbHNle2s9ZS5jK2YuYi5hO2g9aytmLmM7bD0kd25kLk1hdGgubWluKGwsayk7aT0kd25kLk1hdGgubWF4KGksaCl9fX1hLmE9bmV3IGY3YyhpLWwsai1tKTthLmM9bmV3IGY3YyhsK2EuZC5hLG0rYS5kLmIpfVxuZnVuY3Rpb24geFpjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7bD1uZXcgUmtiO2s9bmV3IHgkYygwLGMpO2Y9MDtzJGMoayxuZXcgUFpjKDAsMCxrLGMpKTtlPTA7Zm9yKGo9bmV3IEZ5ZChhKTtqLmUhPWouaS5nYygpOyl7aT1CRChEeWQoaiksMzMpO2Q9QkQoSWtiKGsuYSxrLmEuYy5sZW5ndGgtMSksMTg3KTtoPWUraS5nKyhCRChJa2Ioay5hLDApLDE4NykuYi5jLmxlbmd0aD09MD8wOmMpO2lmKGg+Yil7ZT0wO2YrPWsuYitjO2wuY1tsLmMubGVuZ3RoXT1rO2s9bmV3IHgkYyhmLGMpO2Q9bmV3IFBaYygwLGsuZixrLGMpO3MkYyhrLGQpO2U9MH1pZihkLmIuYy5sZW5ndGg9PTB8fGkuZj49ZC5vJiZpLmY8PWQuZnx8ZC5hKjAuNTw9aS5mJiZkLmEqMS41Pj1pLmYpe0VaYyhkLGkpfWVsc2V7Zz1uZXcgUFpjKGQucytkLnIrYyxrLmYsayxjKTtzJGMoayxnKTtFWmMoZyxpKX1lPWkuaStpLmd9bC5jW2wuYy5sZW5ndGhdPWs7cmV0dXJuIGx9XG5mdW5jdGlvbiBPS2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtpZighYS5hKXthLm89bnVsbDtpPW5ldyBHTmQoYSk7Yj1uZXcgS05kO2M9S0tkO2g9Yy5hLnpjKGEsYyk7aWYoaD09bnVsbCl7Zm9yKGc9bmV3IEZ5ZChfS2QoYSkpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwyNik7eXRkKGksT0tkKGYpKX1jLmEuQmMoYSkhPW51bGw7Yy5hLmdjKCk9PTAmJnVuZGVmaW5lZH1mb3IoZT0oIWEucyYmKGEucz1uZXcgY1VkKHQ1LGEsMjEsMTcpKSxuZXcgRnlkKGEucykpO2UuZSE9ZS5pLmdjKCk7KXtkPUJEKER5ZChlKSwxNzApO0pEKGQsMzIyKSYmd3RkKGIsQkQoZCwzNCkpfXZ1ZChiKTthLms9bmV3IFBOZChhLChCRChxdWQoWktkKChORmQoKSxNRmQpLm8pLDcpLDE4KSxiLmkpLGIuZyk7eXRkKGksYS5rKTt2dWQoaSk7YS5hPW5ldyBuTmQoKEJEKHF1ZChaS2QoTUZkLm8pLDQpLDE4KSxpLmkpLGkuZyk7JEtkKGEpLmImPS0yfXJldHVybiBhLmF9XG5mdW5jdGlvbiB2WmMoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtO2w9ZmFsc2U7aT1aWmMoYy5xLGIuZitiLmItYy5xLmYpO209ZS0oYy5xLmUraS1nKTtpZihtPGQuZyl7cmV0dXJuIGZhbHNlfWo9Zj09YS5jLmxlbmd0aC0xJiZtPj0odENiKGYsYS5jLmxlbmd0aCksQkQoYS5jW2ZdLDIwMCkpLmU7az0oaD1NWmMoZCxtLGZhbHNlKSxoLmEpO2lmKGs+Yi5iJiYhail7cmV0dXJuIGZhbHNlfWlmKGp8fGs8PWIuYil7aWYoaiYmaz5iLmIpe2MuZD1rO0taYyhjLEpaYyhjLGspKX1lbHNleyRaYyhjLnEsaSk7Yy5jPXRydWV9S1pjKGQsZS0oYy5zK2MucikpO09aYyhkLGMucS5lK2MucS5kLGIuZik7cyRjKGIsZCk7aWYoYS5jLmxlbmd0aD5mKXt2JGMoKHRDYihmLGEuYy5sZW5ndGgpLEJEKGEuY1tmXSwyMDApKSxkKTsodENiKGYsYS5jLmxlbmd0aCksQkQoYS5jW2ZdLDIwMCkpLmEuYy5sZW5ndGg9PTAmJktrYihhLGYpfWw9dHJ1ZX1yZXR1cm4gbH1cbmZ1bmN0aW9uIEMyZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztrPVM2ZChhLmUuVGcoKSxiKTtlPTA7Zj1CRChhLmcsMTE5KTtpPW51bGw7UTZkKCk7aWYoQkQoYiw2NikuT2ooKSl7Zm9yKGg9MDtoPGEuaTsrK2gpe2c9ZltoXTtpZihrLnJsKGcuYWsoKSkpe2lmKHBiKGcsYykpe2k9ZzticmVha30rK2V9fX1lbHNlIGlmKGMhPW51bGwpe2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoay5ybChnLmFrKCkpKXtpZihwYihjLGcuZGQoKSkpe2k9ZzticmVha30rK2V9fX1lbHNle2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoay5ybChnLmFrKCkpKXtpZihnLmRkKCk9PW51bGwpe2k9ZzticmVha30rK2V9fX1pZihpKXtpZihvaWQoYS5lKSl7aj1iLiRqKCk/bmV3IE83ZChhLmUsNCxiLGMsbnVsbCxlLHRydWUpOkgyZChhLGIuS2ooKT8yOjEsYixjLGIuemooKSwtMSx0cnVlKTtkP2QuRWkoaik6KGQ9ail9ZD1CMmQoYSxpLGQpfXJldHVybiBkfVxuZnVuY3Rpb24ga1ljKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scDtvPTA7cD0wO2k9ZS5jO2g9ZS5iO2s9Yy5mO249Yy5nO3N3aXRjaChiLmcpe2Nhc2UgMDpvPWQuaStkLmcrZzthLmM/KHA9dFljKG8sZixkLGcpKToocD1kLmopO209JHduZC5NYXRoLm1heChpLG8rbik7aj0kd25kLk1hdGgubWF4KGgscCtrKTticmVhaztjYXNlIDE6cD1kLmorZC5mK2c7YS5jPyhvPXNZYyhwLGYsZCxnKSk6KG89ZC5pKTttPSR3bmQuTWF0aC5tYXgoaSxvK24pO2o9JHduZC5NYXRoLm1heChoLHArayk7YnJlYWs7Y2FzZSAyOm89aStnO3A9MDttPWkrZytuO2o9JHduZC5NYXRoLm1heChoLGspO2JyZWFrO2Nhc2UgMzpvPTA7cD1oK2c7bT0kd25kLk1hdGgubWF4KGksbik7aj1oK2crazticmVhaztkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKCdJbGxlZ2FsUGxhY2VtZW50T3B0aW9uLicpKTt9bD1uZXcgZSRjKGEuYSxtLGosYixvLHApO3JldHVybiBsfVxuZnVuY3Rpb24gUjJiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtoPWEuZDtsPUJEKHZOYihhLCh3dGMoKSx2dGMpKSwxNSk7Yj1CRCh2TmIoYSx0c2MpLDE1KTtpZighbCYmIWIpe3JldHVybn1mPUVkYihFRChwQmMoYSwoTnljKCksaXljKSkpKTtnPUVkYihFRChwQmMoYSxqeWMpKSk7bT0wO2lmKGwpe2o9MDtmb3IoZT1sLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTApO2o9JHduZC5NYXRoLm1heChqLGQuby5iKTttKz1kLm8uYX1tKz1mKihsLmdjKCktMSk7aC5kKz1qK2d9Yz0wO2lmKGIpe2o9MDtmb3IoZT1iLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTApO2o9JHduZC5NYXRoLm1heChqLGQuby5iKTtjKz1kLm8uYX1jKz1mKihiLmdjKCktMSk7aC5hKz1qK2d9aT0kd25kLk1hdGgubWF4KG0sYyk7aWYoaT5hLm8uYSl7az0oaS1hLm8uYSkvMjtoLmI9JHduZC5NYXRoLm1heChoLmIsayk7aC5jPSR3bmQuTWF0aC5tYXgoaC5jLGspfX1cbmZ1bmN0aW9uIHJ2ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2Y9bmV3IGIyYztaMWMoZiwoWTFjKCksVjFjKSk7Zm9yKGQ9KGU9JEIoYSxLQyhaSSxuaWUsMiwwLDYsMSkpLG5ldyB2aWIobmV3IGFtYigobmV3IG1DKGEsZSkpLmIpKSk7ZC5iPGQuZC5nYygpOyl7Yz0oc0NiKGQuYjxkLmQuZ2MoKSksR0QoZC5kLlhiKGQuYz1kLmIrKykpKTtnPWs0YyhsdmQsYyk7aWYoZyl7Yj1hQyhhLGMpO2IuamUoKT8oaD1iLmplKCkuYSk6Yi5nZSgpPyhoPScnK2IuZ2UoKS5hKTpiLmhlKCk/KGg9JycrYi5oZSgpLmEpOihoPWIuSWIoKSk7aT1vNWMoZyxoKTtpZihpIT1udWxsKXsodXFiKGcuaiwoTjVjKCksSzVjKSl8fHVxYihnLmosTDVjKSkmJnhOYihfMWMoZixFMiksZyxpKTt1cWIoZy5qLEk1YykmJnhOYihfMWMoZixCMiksZyxpKTt1cWIoZy5qLE01YykmJnhOYihfMWMoZixGMiksZyxpKTt1cWIoZy5qLEo1YykmJnhOYihfMWMoZixEMiksZyxpKX19fXJldHVybiBmfVxuZnVuY3Rpb24gSjJkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtpPVM2ZChhLmUuVGcoKSxiKTtmPUJEKGEuZywxMTkpO2lmKFQ2ZChhLmUsYikpe2U9MDtmb3IoaD0wO2g8YS5pOysraCl7Zz1mW2hdO2lmKGkucmwoZy5haygpKSl7aWYoZT09Yyl7UTZkKCk7aWYoQkQoYiw2NikuT2ooKSl7cmV0dXJuIGd9ZWxzZXtqPWcuZGQoKTtqIT1udWxsJiZkJiZKRChiLDk5KSYmKEJEKGIsMTgpLkJiJlRqZSkhPTAmJihqPWIzZChhLGIsaCxlLGopKTtyZXR1cm4gan19KytlfX10aHJvdyB2YmIobmV3IHFjYihndmUrYyttdWUrZSkpfWVsc2V7ZT0wO2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoaS5ybChnLmFrKCkpKXtRNmQoKTtpZihCRChiLDY2KS5PaigpKXtyZXR1cm4gZ31lbHNle2o9Zy5kZCgpO2ohPW51bGwmJmQmJkpEKGIsOTkpJiYoQkQoYiwxOCkuQmImVGplKSE9MCYmKGo9YjNkKGEsYixoLGUsaikpO3JldHVybiBqfX0rK2V9cmV0dXJuIGIuemooKX19XG5mdW5jdGlvbiBLMmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7ZT1CRChhLmcsMTE5KTtpZihUNmQoYS5lLGIpKXtyZXR1cm4gUTZkKCksQkQoYiw2NikuT2ooKT9uZXcgUjdkKGIsYSk6bmV3IGY3ZChiLGEpfWVsc2V7aj1TNmQoYS5lLlRnKCksYik7ZD0wO2ZvcihoPTA7aDxhLmk7KytoKXtmPWVbaF07Zz1mLmFrKCk7aWYoai5ybChnKSl7UTZkKCk7aWYoQkQoYiw2NikuT2ooKSl7cmV0dXJuIGZ9ZWxzZSBpZihnPT0obThkKCksazhkKXx8Zz09aDhkKXtpPW5ldyBXZmIoZmNiKGYuZGQoKSkpO3doaWxlKCsraDxhLmkpe2Y9ZVtoXTtnPWYuYWsoKTsoZz09azhkfHxnPT1oOGQpJiZRZmIoaSxmY2IoZi5kZCgpKSl9cmV0dXJuIGo2ZChCRChiLllqKCksMTQ4KSxpLmEpfWVsc2V7az1mLmRkKCk7ayE9bnVsbCYmYyYmSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wJiYoaz1iM2QoYSxiLGgsZCxrKSk7cmV0dXJuIGt9fSsrZH1yZXR1cm4gYi56aigpfX1cbmZ1bmN0aW9uIE1aYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zj0wO2c9YS50O2U9MDtkPTA7aT0wO209MDtsPTA7aWYoYyl7YS5uLmM9S0MoU0ksVWhlLDEsMCw1LDEpO0VrYihhLm4sbmV3IFZaYyhhLnMsYS50LGEuaSkpfWg9MDtmb3Ioaz1uZXcgb2xiKGEuYik7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDMzKTtpZihmK2ouZysoaD4wP2EuaTowKT5iJiZpPjApe2Y9MDtnKz1pK2EuaTtlPSR3bmQuTWF0aC5tYXgoZSxtKTtkKz1pK2EuaTtpPTA7bT0wO2lmKGMpeysrbDtFa2IoYS5uLG5ldyBWWmMoYS5zLGcsYS5pKSl9aD0wfW0rPWouZysoaD4wP2EuaTowKTtpPSR3bmQuTWF0aC5tYXgoaSxqLmYpO2MmJlFaYyhCRChJa2IoYS5uLGwpLDIxMSksaik7Zis9ai5nKyhoPjA/YS5pOjApOysraH1lPSR3bmQuTWF0aC5tYXgoZSxtKTtkKz1pO2lmKGMpe2Eucj1lO2EuZD1kO3UkYyhhLmopfXJldHVybiBuZXcgSjZjKGEucyxhLnQsZSxkKX1cbmZ1bmN0aW9uICRmYihhLGIsYyxkLGUpe1pmYigpO3ZhciBmLGcsaCxpLGosayxsLG0sbjt2Q2IoYSwnc3JjJyk7dkNiKGMsJ2Rlc3QnKTttPXJiKGEpO2k9cmIoYyk7ckNiKChtLmkmNCkhPTAsJ3NyY1R5cGUgaXMgbm90IGFuIGFycmF5Jyk7ckNiKChpLmkmNCkhPTAsJ2Rlc3RUeXBlIGlzIG5vdCBhbiBhcnJheScpO2w9bS5jO2c9aS5jO3JDYigobC5pJjEpIT0wP2w9PWc6KGcuaSYxKT09MCxcIkFycmF5IHR5cGVzIGRvbid0IG1hdGNoXCIpO249YS5sZW5ndGg7aj1jLmxlbmd0aDtpZihiPDB8fGQ8MHx8ZTwwfHxiK2U+bnx8ZCtlPmope3Rocm93IHZiYihuZXcgcGNiKX1pZigobC5pJjEpPT0wJiZtIT1pKXtrPUNEKGEpO2Y9Q0QoYyk7aWYoUEQoYSk9PT1QRChjKSYmYjxkKXtiKz1lO2ZvcihoPWQrZTtoLS0+ZDspe05DKGYsaCxrWy0tYl0pfX1lbHNle2ZvcihoPWQrZTtkPGg7KXtOQyhmLGQrKyxrW2IrK10pfX19ZWxzZSBlPjAmJiRCYihhLGIsYyxkLGUsdHJ1ZSl9XG5mdW5jdGlvbiBwaGIoKXtwaGI9Y2NiO25oYj1PQyhHQyhXRCwxKSxvamUsMjUsMTUsW1JpZSwxMTYyMjYxNDY3LElpZSwxMjIwNzAzMTI1LDM2Mjc5NzA1NiwxOTc3MzI2NzQzLElpZSwzODc0MjA0ODksSmplLDIxNDM1ODg4MSw0Mjk5ODE2OTYsODE1NzMwNzIxLDE0NzU3ODkwNTYsMTcwODU5Mzc1LDI2ODQzNTQ1Niw0MTAzMzg2NzMsNjEyMjIwMDMyLDg5Mzg3MTczOSwxMjgwMDAwMDAwLDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjkwMDAwMDAsODg3NTAzNjgxLElpZSwxMjkxNDY3OTY5LDE1NDQ4MDQ0MTYsMTgzODI2NTYyNSw2MDQ2NjE3Nl0pO29oYj1PQyhHQyhXRCwxKSxvamUsMjUsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX1cbmZ1bmN0aW9uIHNvYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2ZvcihnPW5ldyBvbGIoTXUoZC5hKSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtpZihpb2MoZikpe2M9QkQodk5iKGYsKHd0YygpLHVzYykpLDMwNSk7aWYoIWMuZyYmISFjLmQpe2I9YztpPWMuZDt3aGlsZShpKXtyb2MoaS5pLGkuayxmYWxzZSx0cnVlKTt6b2MoYi5hKTt6b2MoaS5pKTt6b2MoaS5rKTt6b2MoaS5iKTtSWmIoaS5jLGIuYy5kKTtSWmIoYi5jLG51bGwpOyRfYihiLmEsbnVsbCk7JF9iKGkuaSxudWxsKTskX2IoaS5rLG51bGwpOyRfYihpLmIsbnVsbCk7aD1uZXcgZ29jKGIuaSxpLmEsYi5lLGkuaixpLmYpO2guaz1iLms7aC5uPWIubjtoLmI9Yi5iO2guYz1pLmM7aC5nPWIuZztoLmQ9aS5kO3lOYihiLmksdXNjLGgpO3lOYihpLmEsdXNjLGgpO2k9aS5kO2I9aH19fX19fVxuZnVuY3Rpb24gWGZlKGEsYil7dmFyIGMsZCxlLGYsZztnPUJEKGIsMTM2KTtZZmUoYSk7WWZlKGcpO2lmKGcuYj09bnVsbClyZXR1cm47YS5jPXRydWU7aWYoYS5iPT1udWxsKXthLmI9S0MoV0Qsb2plLDI1LGcuYi5sZW5ndGgsMTUsMSk7JGZiKGcuYiwwLGEuYiwwLGcuYi5sZW5ndGgpO3JldHVybn1mPUtDKFdELG9qZSwyNSxhLmIubGVuZ3RoK2cuYi5sZW5ndGgsMTUsMSk7Zm9yKGM9MCxkPTAsZT0wO2M8YS5iLmxlbmd0aHx8ZDxnLmIubGVuZ3RoOyl7aWYoYz49YS5iLmxlbmd0aCl7ZltlKytdPWcuYltkKytdO2ZbZSsrXT1nLmJbZCsrXX1lbHNlIGlmKGQ+PWcuYi5sZW5ndGgpe2ZbZSsrXT1hLmJbYysrXTtmW2UrK109YS5iW2MrK119ZWxzZSBpZihnLmJbZF08YS5iW2NdfHxnLmJbZF09PT1hLmJbY10mJmcuYltkKzFdPGEuYltjKzFdKXtmW2UrK109Zy5iW2QrK107ZltlKytdPWcuYltkKytdfWVsc2V7ZltlKytdPWEuYltjKytdO2ZbZSsrXT1hLmJbYysrXX19YS5iPWZ9XG5mdW5jdGlvbiBTNmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtjPUNjYihERCh2TmIoYSwod3RjKCksVXNjKSkpKTtoPUNjYihERCh2TmIoYixVc2MpKSk7ZD1CRCh2TmIoYSxWc2MpLDExKTtpPUJEKHZOYihiLFZzYyksMTEpO2U9QkQodk5iKGEsV3NjKSwxMSk7aj1CRCh2TmIoYixXc2MpLDExKTtrPSEhZCYmZD09aTtsPSEhZSYmZT09ajtpZighYyYmIWgpe3JldHVybiBuZXcgWjZiKEJEKG1sYihuZXcgb2xiKGEuaikpLDExKS5wPT1CRChtbGIobmV3IG9sYihiLmopKSwxMSkucCxrLGwpfWY9KCFDY2IoREQodk5iKGEsVXNjKSkpfHxDY2IoREQodk5iKGEsVHNjKSkpKSYmKCFDY2IoREQodk5iKGIsVXNjKSkpfHxDY2IoREQodk5iKGIsVHNjKSkpKTtnPSghQ2NiKEREKHZOYihhLFVzYykpKXx8IUNjYihERCh2TmIoYSxUc2MpKSkpJiYoIUNjYihERCh2TmIoYixVc2MpKSl8fCFDY2IoREQodk5iKGIsVHNjKSkpKTtyZXR1cm4gbmV3IFo2YihrJiZmfHxsJiZnLGssbCl9XG5mdW5jdGlvbiBIWmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtkPTA7Yz0wO2k9bmV3IFBzYjtiPTA7Zm9yKGg9bmV3IG9sYihhLm4pO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwyMTEpO2lmKGcuYy5jLmxlbmd0aD09MCl7R3NiKGksZyxpLmMuYixpLmMpfWVsc2V7ZD0kd25kLk1hdGgubWF4KGQsZy5kKTtjKz1nLmErKGI+MD9hLmk6MCl9KytifUNlKGEubixpKTthLmQ9YzthLnI9ZDthLmc9MDthLmY9MDthLmU9MDthLm89UGplO2EucD1QamU7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwzMyk7YS5wPSR3bmQuTWF0aC5taW4oYS5wLGUuZyk7YS5nPSR3bmQuTWF0aC5tYXgoYS5nLGUuZyk7YS5mPSR3bmQuTWF0aC5tYXgoYS5mLGUuZik7YS5vPSR3bmQuTWF0aC5taW4oYS5vLGUuZik7YS5lKz1lLmYrYS5pfWEuYT1hLmUvYS5iLmMubGVuZ3RoLWEuaSooKGEuYi5jLmxlbmd0aC0xKS9hLmIuYy5sZW5ndGgpO3UkYyhhLmopfVxuZnVuY3Rpb24gU2xkKGEpe3ZhciBiLGMsZCxlO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gTWtkKGEpO2I9bmV3IFdmYihfc2UpO2Q9YS5rO2lmKCFkKXshYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKTtpZihhLm4uaT4wKXtlPSghYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKSxCRChxdWQoYS5uLDApLDEzNykpLmE7IWV8fFFmYihRZmIoKGIuYSs9JyBcIicsYiksZSksJ1wiJyl9fWVsc2V7UWZiKFFmYigoYi5hKz0nIFwiJyxiKSxkKSwnXCInKX1jPSghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSwhKGEuYi5pPD0xJiYoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jLmk8PTEpKSk7Yz8oYi5hKz0nIFsnLGIpOihiLmErPScgJyxiKTtRZmIoYixFYihuZXcgR2IsbmV3IEZ5ZChhLmIpKSk7YyYmKGIuYSs9J10nLGIpO2IuYSs9Z25lO2MmJihiLmErPSdbJyxiKTtRZmIoYixFYihuZXcgR2IsbmV3IEZ5ZChhLmMpKSk7YyYmKGIuYSs9J10nLGIpO3JldHVybiBiLmF9XG5mdW5jdGlvbiBUUWQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhLmEpe2g9YS5hLm5lKCk7aT1udWxsO2lmKGghPW51bGwpe2IuYSs9JycraH1lbHNle2c9YS5hLkRqKCk7aWYoZyE9bnVsbCl7Zj1oZmIoZyx3ZmIoOTEpKTtpZihmIT0tMSl7aT1nLnN1YnN0cihmKTtiLmErPScnK3FmYihnPT1udWxsP1hoZToodUNiKGcpLGcpLDAsZil9ZWxzZXtiLmErPScnK2d9fX1pZighIWEuZCYmYS5kLmkhPTApe2U9dHJ1ZTtiLmErPSc8Jztmb3IoZD1uZXcgRnlkKGEuZCk7ZC5lIT1kLmkuZ2MoKTspe2M9QkQoRHlkKGQpLDg3KTtlPyhlPWZhbHNlKTooYi5hKz1TaGUsYik7VFFkKGMsYil9Yi5hKz0nPid9aSE9bnVsbCYmKGIuYSs9JycraSxiKX1lbHNlIGlmKGEuZSl7aD1hLmUuemI7aCE9bnVsbCYmKGIuYSs9JycraCxiKX1lbHNle2IuYSs9Jz8nO2lmKGEuYil7Yi5hKz0nIHN1cGVyICc7VFFkKGEuYixiKX1lbHNle2lmKGEuZil7Yi5hKz0nIGV4dGVuZHMgJztUUWQoYS5mLGIpfX19fVxuZnVuY3Rpb24gWjliKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7dj1hLmM7dz1iLmM7Yz1Ka2Iodi5hLGEsMCk7ZD1Ka2Iody5hLGIsMCk7dD1CRChXX2IoYSwoS0FjKCksSEFjKSkuS2MoKS5QYigpLDExKTtDPUJEKFdfYihhLElBYykuS2MoKS5QYigpLDExKTt1PUJEKFdfYihiLEhBYykuS2MoKS5QYigpLDExKTtEPUJEKFdfYihiLElBYykuS2MoKS5QYigpLDExKTtyPWtfYih0LmUpO0E9a19iKEMuZyk7cz1rX2IodS5lKTtCPWtfYihELmcpO1pfYihhLGQsdyk7Zm9yKGc9cyxrPTAsbz1nLmxlbmd0aDtrPG87KytrKXtlPWdba107UlpiKGUsdCl9Zm9yKGg9QixsPTAscD1oLmxlbmd0aDtsPHA7KytsKXtlPWhbbF07UVpiKGUsQyl9Wl9iKGIsYyx2KTtmb3IoaT1yLG09MCxxPWkubGVuZ3RoO208cTsrK20pe2U9aVttXTtSWmIoZSx1KX1mb3IoZj1BLGo9MCxuPWYubGVuZ3RoO2o8bjsrK2ope2U9ZltqXTtRWmIoZSxEKX19XG5mdW5jdGlvbiAkJGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7Zj1hX2IoZCk7aD1DY2IoREQodk5iKGQsKE55YygpLHV4YykpKSk7aWYoKGh8fENjYihERCh2TmIoYSxleGMpKSkpJiYhZmNkKEJEKHZOYihhLFZ4YyksOTgpKSl7ZT1aY2QoZik7aT1pX2IoYSxjLGM9PShLQWMoKSxJQWMpP2U6V2NkKGUpKX1lbHNle2k9bmV3IEgwYjtGMGIoaSxhKTtpZihiKXtrPWkubjtrLmE9Yi5hLWEubi5hO2suYj1iLmItYS5uLmI7UTZjKGssMCwwLGEuby5hLGEuby5iKTtHMGIoaSxXJGIoaSxmKSl9ZWxzZXtlPVpjZChmKTtHMGIoaSxjPT0oS0FjKCksSUFjKT9lOldjZChlKSl9Zz1CRCh2TmIoZCwod3RjKCksS3NjKSksMjEpO2o9aS5qO3N3aXRjaChmLmcpe2Nhc2UgMjpjYXNlIDE6KGo9PShVY2QoKSxBY2QpfHxqPT1SY2QpJiZnLkZjKChPcmMoKSxMcmMpKTticmVhaztjYXNlIDQ6Y2FzZSAzOihqPT0oVWNkKCksemNkKXx8aj09VGNkKSYmZy5GYygoT3JjKCksTHJjKSk7fX1yZXR1cm4gaX1cbmZ1bmN0aW9uIHBQYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztpZigkd25kLk1hdGguYWJzKGIucy1iLmMpPHFtZXx8JHduZC5NYXRoLmFicyhjLnMtYy5jKTxxbWUpe3JldHVybiAwfWQ9b1BjKGEsYi5qLGMuZSk7ZT1vUGMoYSxjLmosYi5lKTtmPWQ9PS0xfHxlPT0tMTtnPTA7aWYoZil7aWYoZD09LTEpe25ldyBET2MoKEhPYygpLEZPYyksYyxiLDEpOysrZ31pZihlPT0tMSl7bmV3IERPYygoSE9jKCksRk9jKSxiLGMsMSk7KytnfX1lbHNle2g9dlBjKGIuaixjLnMsYy5jKTtoKz12UGMoYy5lLGIucyxiLmMpO2k9dlBjKGMuaixiLnMsYi5jKTtpKz12UGMoYi5lLGMucyxjLmMpO2o9ZCsxNipoO2s9ZSsxNippO2lmKGo8ayl7bmV3IERPYygoSE9jKCksR09jKSxiLGMsay1qKX1lbHNlIGlmKGo+ayl7bmV3IERPYygoSE9jKCksR09jKSxjLGIsai1rKX1lbHNlIGlmKGo+MCYmaz4wKXtuZXcgRE9jKChIT2MoKSxHT2MpLGIsYywwKTtuZXcgRE9jKEdPYyxjLGIsMCl9fXJldHVybiBnfVxuZnVuY3Rpb24gVFViKGEsYil7dmFyIGMsZCxlLGYsZyxoO2ZvcihnPW5ldyBuaWIoKG5ldyBlaWIoYS5mLmIpKS5hKTtnLmI7KXtmPWxpYihnKTtlPUJEKGYuY2QoKSw1OTQpO2lmKGI9PTEpe2lmKGUuZ2YoKSE9KGVhZCgpLGRhZCkmJmUuZ2YoKSE9XzljKXtjb250aW51ZX19ZWxzZXtpZihlLmdmKCkhPShlYWQoKSxhYWQpJiZlLmdmKCkhPWJhZCl7Y29udGludWV9fWQ9QkQoQkQoZi5kZCgpLDQ2KS5iLDgxKTtoPUJEKEJEKGYuZGQoKSw0NikuYSwxODkpO2M9aC5jO3N3aXRjaChlLmdmKCkuZyl7Y2FzZSAyOmQuZy5jPWEuZS5hO2QuZy5iPSR3bmQuTWF0aC5tYXgoMSxkLmcuYitjKTticmVhaztjYXNlIDE6ZC5nLmM9ZC5nLmMrYztkLmcuYj0kd25kLk1hdGgubWF4KDEsZC5nLmItYyk7YnJlYWs7Y2FzZSA0OmQuZy5kPWEuZS5iO2QuZy5hPSR3bmQuTWF0aC5tYXgoMSxkLmcuYStjKTticmVhaztjYXNlIDM6ZC5nLmQ9ZC5nLmQrYztkLmcuYT0kd25kLk1hdGgubWF4KDEsZC5nLmEtYyk7fX19XG5mdW5jdGlvbiBuSmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2g9S0MoV0Qsb2plLDI1LGIuYi5jLmxlbmd0aCwxNSwxKTtqPUtDKE5RLEtpZSwyNjcsYi5iLmMubGVuZ3RoLDAsMSk7aT1LQyhPUSxrbmUsMTAsYi5iLmMubGVuZ3RoLDAsMSk7Zm9yKGw9YS5hLG09MCxuPWwubGVuZ3RoO208bjsrK20pe2s9bFttXTtwPTA7Zm9yKGc9bmV3IG9sYihrLmUpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihnKSwxMCk7ZD1HMWIoZS5jKTsrK2hbZF07bz1FZGIoRUQodk5iKGIsKE55YygpLGx5YykpKSk7aFtkXT4wJiYhIWlbZF0mJihvPWpCYyhhLmIsaVtkXSxlKSk7cD0kd25kLk1hdGgubWF4KHAsZS5jLmMuYitvKX1mb3IoZj1uZXcgb2xiKGsuZSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEwKTtlLm4uYj1wK2UuZC5kO2M9ZS5jO2MuYy5iPXArZS5kLmQrZS5vLmIrZS5kLmE7altKa2IoYy5iLmIsYywwKV09ZS5rO2lbSmtiKGMuYi5iLGMsMCldPWV9fX1cbmZ1bmN0aW9uIExYYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGQ9bmV3IFNyKHVyKF9zZChiKS5hLktjKCksbmV3IFNxKSk7UXIoZCk7KXtjPUJEKFJyKGQpLDc5KTtpZighSkQocXVkKCghYy5iJiYoYy5iPW5ldyB5NWQoejIsYyw0LDcpKSxjLmIpLDApLDE4Nikpe2k9YXRkKEJEKHF1ZCgoIWMuYyYmKGMuYz1uZXcgeTVkKHoyLGMsNSw4KSksYy5jKSwwKSw4MikpO2lmKCFQbGQoYykpe2c9Yi5pK2IuZy8yO2g9Yi5qK2IuZi8yO2s9aS5pK2kuZy8yO2w9aS5qK2kuZi8yO209bmV3IGQ3YzttLmE9ay1nO20uYj1sLWg7Zj1uZXcgZjdjKG0uYSxtLmIpO2w2YyhmLGIuZyxiLmYpO20uYS09Zi5hO20uYi09Zi5iO2c9ay1tLmE7aD1sLW0uYjtqPW5ldyBmN2MobS5hLG0uYik7bDZjKGosaS5nLGkuZik7bS5hLT1qLmE7bS5iLT1qLmI7az1nK20uYTtsPWgrbS5iO2U9aXRkKGMsdHJ1ZSx0cnVlKTtvbWQoZSxnKTtwbWQoZSxoKTtobWQoZSxrKTtpbWQoZSxsKTtMWGMoYSxpKX19fX1cbmZ1bmN0aW9uIGUwYyhhKXtyNGMoYSxuZXcgRTNjKFAzYyhNM2MoTzNjKE4zYyhuZXcgUjNjLFByZSksJ0VMSyBTUE9yRSBDb21wYWN0aW9uJyksJ1Nocmlua1RyZWUgaXMgYSBjb21wYWN0aW9uIGFsZ29yaXRobSB0aGF0IG1haW50YWlucyB0aGUgdG9wb2xvZ3kgb2YgYSBsYXlvdXQuIFRoZSByZWxvY2F0aW9uIG9mIGRpYWdyYW0gZWxlbWVudHMgaXMgYmFzZWQgb24gY29udHJhY3RpbmcgYSBzcGFubmluZyB0cmVlLicpLG5ldyBoMGMpKSk7cDRjKGEsUHJlLFFyZSxLc2QoYzBjKSk7cDRjKGEsUHJlLFJyZSxLc2QoX19jKSk7cDRjKGEsUHJlLFNyZSxLc2QoJF9jKSk7cDRjKGEsUHJlLFRyZSxLc2QoWV9jKSk7cDRjKGEsUHJlLFVyZSxLc2QoWl9jKSk7cDRjKGEsUHJlLGFtZSxYX2MpO3A0YyhhLFByZSx3bWUsOCk7cDRjKGEsUHJlLFZyZSxLc2QoYjBjKSk7cDRjKGEsUHJlLFdyZSxLc2QoVF9jKSk7cDRjKGEsUHJlLFhyZSxLc2QoVV9jKSk7cDRjKGEsUHJlLFpwZSwoQmNiKCksZmFsc2UpKX1cbmZ1bmN0aW9uIEpMYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO09kZChiLCdTaW1wbGUgbm9kZSBwbGFjZW1lbnQnLDEpO2w9QkQodk5iKGEsKHd0YygpLG90YykpLDMwNCk7aD0wO2ZvcihmPW5ldyBvbGIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMjkpO2c9ZC5jO2cuYj0wO2M9bnVsbDtmb3Ioaj1uZXcgb2xiKGQuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDEwKTshIWMmJihnLmIrPWhCYyhpLGMsbC5jKSk7Zy5iKz1pLmQuZCtpLm8uYitpLmQuYTtjPWl9aD0kd25kLk1hdGgubWF4KGgsZy5iKX1mb3IoZT1uZXcgb2xiKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI5KTtnPWQuYztrPShoLWcuYikvMjtjPW51bGw7Zm9yKGo9bmV3IG9sYihkLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMCk7ISFjJiYoays9aEJjKGksYyxsLmMpKTtrKz1pLmQuZDtpLm4uYj1rO2srPWkuby5iK2kuZC5hO2M9aX19UWRkKGIpfVxuZnVuY3Rpb24gczJkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7aWYoZC5nYygpPT0wKXtyZXR1cm4gZmFsc2V9aT0oUTZkKCksQkQoYiw2NikuT2ooKSk7Zz1pP2Q6bmV3IHp1ZChkLmdjKCkpO2lmKFQ2ZChhLmUsYikpe2lmKGIuaGkoKSl7Zm9yKGs9ZC5LYygpO2suT2IoKTspe2o9ay5QYigpO2lmKCFGMmQoYSxiLGosSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wKSl7Zj1SNmQoYixqKTtnLkZjKGYpfX19ZWxzZSBpZighaSl7Zm9yKGs9ZC5LYygpO2suT2IoKTspe2o9ay5QYigpO2Y9UjZkKGIsaik7Zy5GYyhmKX19fWVsc2V7bD1TNmQoYS5lLlRnKCksYik7ZT1CRChhLmcsMTE5KTtmb3IoaD0wO2g8YS5pOysraCl7Zj1lW2hdO2lmKGwucmwoZi5haygpKSl7dGhyb3cgdmJiKG5ldyBXZGIoSHdlKSl9fWlmKGQuZ2MoKT4xKXt0aHJvdyB2YmIobmV3IFdkYihId2UpKX1pZighaSl7Zj1SNmQoYixkLktjKCkuUGIoKSk7Zy5GYyhmKX19cmV0dXJuIHh0ZChhLEkyZChhLGIsYyksZyl9XG5mdW5jdGlvbiBQbWMoYSxiKXt2YXIgYyxkLGUsZjtKbWMoYi5iLmopO01BYihOQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYi5kLDE2KSksbmV3ICRtYyksbmV3IGFuYyk7Zm9yKGY9bmV3IG9sYihiLmQpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMDEpO3N3aXRjaChlLmUuZyl7Y2FzZSAwOmM9QkQoSWtiKGUuaiwwKSwxMTMpLmQuajttamMoZSxCRChCdGIoUkFiKEJEKFFjKGUuayxjKSwxNSkuT2MoKSxIbWMpKSwxMTMpKTtuamMoZSxCRChCdGIoUUFiKEJEKFFjKGUuayxjKSwxNSkuT2MoKSxIbWMpKSwxMTMpKTticmVhaztjYXNlIDE6ZD1Ca2MoZSk7bWpjKGUsQkQoQnRiKFJBYihCRChRYyhlLmssZFswXSksMTUpLk9jKCksSG1jKSksMTEzKSk7bmpjKGUsQkQoQnRiKFFBYihCRChRYyhlLmssZFsxXSksMTUpLk9jKCksSG1jKSksMTEzKSk7YnJlYWs7Y2FzZSAyOlJtYyhhLGUpO2JyZWFrO2Nhc2UgMzpRbWMoZSk7YnJlYWs7Y2FzZSA0Ok9tYyhhLGUpO31NbWMoZSl9YS5hPW51bGx9XG5mdW5jdGlvbiAkTWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7ZD1hLmEubz09KGVNYygpLGRNYyk/UGplOlFqZTtoPV9NYyhhLG5ldyBaTWMoYixjKSk7aWYoIWguYSYmaC5jKXtEc2IoYS5kLGgpO3JldHVybiBkfWVsc2UgaWYoaC5hKXtlPWguYS5jO2k9aC5hLmQ7aWYoYyl7aj1hLmEuYz09KFlMYygpLFhMYyk/aTplO2Y9YS5hLmM9PVhMYz9lOmk7Zz1hLmEuZ1tmLmkucF07az1FZGIoYS5hLnBbZy5wXSkrRWRiKGEuYS5kW2YuaS5wXSkrZi5uLmIrZi5hLmItRWRiKGEuYS5kW2ouaS5wXSktai5uLmItai5hLmJ9ZWxzZXtqPWEuYS5jPT0oWUxjKCksV0xjKT9pOmU7Zj1hLmEuYz09V0xjP2U6aTtrPUVkYihhLmEucFthLmEuZ1tmLmkucF0ucF0pK0VkYihhLmEuZFtmLmkucF0pK2Yubi5iK2YuYS5iLUVkYihhLmEuZFtqLmkucF0pLWoubi5iLWouYS5ifWEuYS5uW2EuYS5nW2UuaS5wXS5wXT0oQmNiKCksdHJ1ZSk7YS5hLm5bYS5hLmdbaS5pLnBdLnBdPXRydWU7cmV0dXJuIGt9cmV0dXJuIGR9XG5mdW5jdGlvbiBmM2QoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aWYoVDZkKGEuZSxiKSl7aT0oUTZkKCksQkQoYiw2NikuT2ooKT9uZXcgUjdkKGIsYSk6bmV3IGY3ZChiLGEpKTtEMmQoaS5jLGkuYik7YjdkKGksQkQoYywxNCkpfWVsc2V7az1TNmQoYS5lLlRnKCksYik7ZD1CRChhLmcsMTE5KTtmb3IoZz0wO2c8YS5pOysrZyl7ZT1kW2ddO2Y9ZS5haygpO2lmKGsucmwoZikpe2lmKGY9PShtOGQoKSxrOGQpfHxmPT1oOGQpe2o9bTNkKGEsYixjKTtoPWc7aj9YeGQoYSxnKTorK2c7d2hpbGUoZzxhLmkpe2U9ZFtnXTtmPWUuYWsoKTtmPT1rOGR8fGY9PWg4ZD9YeGQoYSxnKTorK2d9anx8QkQoR3RkKGEsaCxSNmQoYixjKSksNzIpfWVsc2UgbTNkKGEsYixjKT9YeGQoYSxnKTpCRChHdGQoYSxnLChRNmQoKSxCRChiLDY2KS5PaigpP0JEKGMsNzIpOlI2ZChiLGMpKSksNzIpO3JldHVybn19bTNkKGEsYixjKXx8d3RkKGEsKFE2ZCgpLEJEKGIsNjYpLk9qKCk/QkQoYyw3Mik6UjZkKGIsYykpKX19XG5mdW5jdGlvbiBJTWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aWYoIXBiKGMsYS5iKSl7YS5iPWM7Zj1uZXcgTE1iO2c9QkQoR0FiKE5BYihuZXcgWUFiKG51bGwsbmV3IEt1YihjLmYsMTYpKSxmKSxBeWIobmV3IGh6YixuZXcganpiLG5ldyBHemIsbmV3IEl6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsWyhGeWIoKSxFeWIpLER5Yl0pKSksMjEpO2EuZT10cnVlO2EuZj10cnVlO2EuYz10cnVlO2EuZD10cnVlO2U9Zy5IYygoUk1iKCksT01iKSk7ZD1nLkhjKFBNYik7ZSYmIWQmJihhLmY9ZmFsc2UpOyFlJiZkJiYoYS5kPWZhbHNlKTtlPWcuSGMoTk1iKTtkPWcuSGMoUU1iKTtlJiYhZCYmKGEuYz1mYWxzZSk7IWUmJmQmJihhLmU9ZmFsc2UpfWs9QkQoYS5hLkNlKGIsYyksNDYpO2k9QkQoay5hLDE5KS5hO2o9QkQoay5iLDE5KS5hO2g9ZmFsc2U7aTwwP2EuY3x8KGg9dHJ1ZSk6YS5lfHwoaD10cnVlKTtqPDA/YS5kfHwoaD10cnVlKTphLmZ8fChoPXRydWUpO3JldHVybiBoP0lNYihhLGssYyk6a31cbmZ1bmN0aW9uIG9LYihhKXt2YXIgYixjLGQsZTtlPWEubzskSmIoKTtpZihhLkEuZGMoKXx8cGIoYS5BLFpKYikpe2I9ZS5ifWVsc2V7Yj1mSWIoYS5mKTtpZihhLkEuSGMoKHRkZCgpLHFkZCkpJiYhYS5CLkhjKChJZGQoKSxFZGQpKSl7Yj0kd25kLk1hdGgubWF4KGIsZkliKEJEKE1wYihhLnAsKFVjZCgpLHpjZCkpLDI0NCkpKTtiPSR3bmQuTWF0aC5tYXgoYixmSWIoQkQoTXBiKGEucCxUY2QpLDI0NCkpKX1jPWFLYihhKTshIWMmJihiPSR3bmQuTWF0aC5tYXgoYixjLmIpKTtpZihhLkEuSGMocmRkKSl7aWYoYS5xPT0oZGNkKCksX2JkKXx8YS5xPT0kYmQpe2I9JHduZC5NYXRoLm1heChiLF9HYihCRChNcGIoYS5iLChVY2QoKSx6Y2QpKSwxMjQpKSk7Yj0kd25kLk1hdGgubWF4KGIsX0diKEJEKE1wYihhLmIsVGNkKSwxMjQpKSl9fX1DY2IoREQoYS5lLnlmKCkuV2UoKFk5YygpLCQ4YykpKSk/KGUuYj0kd25kLk1hdGgubWF4KGUuYixiKSk6KGUuYj1iKTtkPWEuZi5pO2QuZD0wO2QuYT1iO2lJYihhLmYpfVxuZnVuY3Rpb24gJEljKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtmb3IobD0wO2w8Yi5sZW5ndGg7bCsrKXtmb3IoaD1hLktjKCk7aC5PYigpOyl7Zj1CRChoLlBiKCksMjI1KTtmLk9mKGwsYil9Zm9yKG09MDttPGJbbF0ubGVuZ3RoO20rKyl7Zm9yKGk9YS5LYygpO2kuT2IoKTspe2Y9QkQoaS5QYigpLDIyNSk7Zi5QZihsLG0sYil9cD1iW2xdW21dLmo7Zm9yKG49MDtuPHAuYy5sZW5ndGg7bisrKXtmb3Ioaj1hLktjKCk7ai5PYigpOyl7Zj1CRChqLlBiKCksMjI1KTtmLlFmKGwsbSxuLGIpfW89KHRDYihuLHAuYy5sZW5ndGgpLEJEKHAuY1tuXSwxMSkpO2M9MDtmb3IoZT1uZXcgYjFiKG8uYik7bGxiKGUuYSl8fGxsYihlLmIpOyl7ZD1CRChsbGIoZS5hKT9tbGIoZS5hKTptbGIoZS5iKSwxNyk7Zm9yKGs9YS5LYygpO2suT2IoKTspe2Y9QkQoay5QYigpLDIyNSk7Zi5OZihsLG0sbixjKyssZCxiKX19fX19Zm9yKGc9YS5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDIyNSk7Zi5NZigpfX1cbmZ1bmN0aW9uIEo0YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2EuYj1FZGIoRUQodk5iKGIsKE55YygpLG15YykpKSk7YS5jPUVkYihFRCh2TmIoYixweWMpKSk7YS5kPUJEKHZOYihiLFh3YyksMzM2KTthLmE9QkQodk5iKGIsc3djKSwyNzUpO0g0YihiKTtoPUJEKEdBYihKQWIoSkFiKExBYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYi5iLDE2KSksbmV3IE40YiksbmV3IFA0YiksbmV3IFI0YiksbmV3IFQ0YiksQnliKG5ldyBmemIsbmV3IGR6YixuZXcgRXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLER5YildKSkpLDE1KTtmb3IoZT1oLktjKCk7ZS5PYigpOyl7Yz1CRChlLlBiKCksMTcpO2c9QkQodk5iKGMsKHd0YygpLHJ0YykpLDE1KTtnLkpjKG5ldyBWNGIoYSkpO3lOYihjLHJ0YyxudWxsKX1mb3IoZD1oLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMTcpO2k9QkQodk5iKGMsKHd0YygpLHN0YykpLDE3KTtmPUJEKHZOYihjLHB0YyksMTUpO0I0YihhLGYsaSk7eU5iKGMscHRjLG51bGwpfX1cbmZ1bmN0aW9uIHVaZChhKXthLmI9bnVsbDthLmE9bnVsbDthLm89bnVsbDthLnE9bnVsbDthLnY9bnVsbDthLnc9bnVsbDthLkI9bnVsbDthLnA9bnVsbDthLlE9bnVsbDthLlI9bnVsbDthLlM9bnVsbDthLlQ9bnVsbDthLlU9bnVsbDthLlY9bnVsbDthLlc9bnVsbDthLmJiPW51bGw7YS5lYj1udWxsO2EuYWI9bnVsbDthLkg9bnVsbDthLmRiPW51bGw7YS5jPW51bGw7YS5kPW51bGw7YS5mPW51bGw7YS5uPW51bGw7YS5yPW51bGw7YS5zPW51bGw7YS51PW51bGw7YS5HPW51bGw7YS5KPW51bGw7YS5lPW51bGw7YS5qPW51bGw7YS5pPW51bGw7YS5nPW51bGw7YS5rPW51bGw7YS50PW51bGw7YS5GPW51bGw7YS5JPW51bGw7YS5MPW51bGw7YS5NPW51bGw7YS5PPW51bGw7YS5QPW51bGw7YS4kPW51bGw7YS5OPW51bGw7YS5aPW51bGw7YS5jYj1udWxsO2EuSz1udWxsO2EuRD1udWxsO2EuQT1udWxsO2EuQz1udWxsO2EuXz1udWxsO2EuZmI9bnVsbDthLlg9bnVsbDthLlk9bnVsbDthLmdiPWZhbHNlO2EuaGI9ZmFsc2V9XG5mdW5jdGlvbiBiS2MoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO2lmKGEuayE9KGowYigpLGgwYikpe3JldHVybiBmYWxzZX1pZihhLmouYy5sZW5ndGg8PTEpe3JldHVybiBmYWxzZX1mPUJEKHZOYihhLChOeWMoKSxWeGMpKSw5OCk7aWYoZj09KGRjZCgpLCRiZCkpe3JldHVybiBmYWxzZX1lPShJemMoKSwoIWEucT8obW1iKCksbW1iKCksa21iKTphLnEpLl9iKEN4Yyk/KGQ9QkQodk5iKGEsQ3hjKSwxOTcpKTooZD1CRCh2TmIoUV9iKGEpLER4YyksMTk3KSksZCk7aWYoZT09R3pjKXtyZXR1cm4gZmFsc2V9aWYoIShlPT1GemN8fGU9PUV6Yykpe2c9RWRiKEVEKHBCYyhhLHp5YykpKTtiPUJEKHZOYihhLHl5YyksMTQyKTshYiYmKGI9bmV3IEpfYihnLGcsZyxnKSk7aj1WX2IoYSwoVWNkKCksVGNkKSk7aT1iLmQrYi5hKyhqLmdjKCktMSkqZztpZihpPmEuby5iKXtyZXR1cm4gZmFsc2V9Yz1WX2IoYSx6Y2QpO2g9Yi5kK2IuYSsoYy5nYygpLTEpKmc7aWYoaD5hLm8uYil7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1cbmZ1bmN0aW9uIHRoYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2c9YS5lO2k9Yi5lO2lmKGc9PTApe3JldHVybiBifWlmKGk9PTApe3JldHVybiBhfWY9YS5kO2g9Yi5kO2lmKGYraD09Mil7Yz14YmIoYS5hWzBdLFlqZSk7ZD14YmIoYi5hWzBdLFlqZSk7aWYoZz09aSl7az13YmIoYyxkKTtvPVRiYihrKTtuPVRiYihQYmIoaywzMikpO3JldHVybiBuPT0wP25ldyBVZ2IoZyxvKTpuZXcgVmdiKGcsMixPQyhHQyhXRCwxKSxvamUsMjUsMTUsW28sbl0pKX1yZXR1cm4gZ2hiKGc8MD9RYmIoZCxjKTpRYmIoYyxkKSl9ZWxzZSBpZihnPT1pKXttPWc7bD1mPj1oP3VoYihhLmEsZixiLmEsaCk6dWhiKGIuYSxoLGEuYSxmKX1lbHNle2U9ZiE9aD9mPmg/MTotMTp3aGIoYS5hLGIuYSxmKTtpZihlPT0wKXtyZXR1cm4gSGdiKCksR2difWlmKGU9PTEpe209ZztsPXpoYihhLmEsZixiLmEsaCl9ZWxzZXttPWk7bD16aGIoYi5hLGgsYS5hLGYpfX1qPW5ldyBWZ2IobSxsLmxlbmd0aCxsKTtKZ2Ioaik7cmV0dXJuIGp9XG5mdW5jdGlvbiBvWmIoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtLG47bD1DY2IoREQodk5iKGIsKE55YygpLHZ4YykpKSk7bT1udWxsO2Y9PShLQWMoKSxIQWMpJiZkLmMuaT09Yz8obT1kLmMpOmY9PUlBYyYmZC5kLmk9PWMmJihtPWQuZCk7aj1nO2lmKCFqfHwhbHx8ISFtKXtrPShVY2QoKSxTY2QpO20/KGs9bS5qKTpmY2QoQkQodk5iKGMsVnhjKSw5OCkpJiYoaz1mPT1IQWM/VGNkOnpjZCk7aT1sWmIoYSxiLGMsZixrLGQpO2g9a1piKChRX2IoYyksZCkpO2lmKGY9PUhBYyl7UVpiKGgsQkQoSWtiKGkuaiwwKSwxMSkpO1JaYihoLGUpfWVsc2V7UVpiKGgsZSk7UlpiKGgsQkQoSWtiKGkuaiwwKSwxMSkpfWo9bmV3IHlaYihkLGgsaSxCRCh2TmIoaSwod3RjKCksJHNjKSksMTEpLGYsIW0pfWVsc2V7RWtiKGouZSxkKTtuPSR3bmQuTWF0aC5tYXgoRWRiKEVEKHZOYihqLmQsWndjKSkpLEVkYihFRCh2TmIoZCxad2MpKSkpO3lOYihqLmQsWndjLG4pfVJjKGEuYSxkLG5ldyBCWmIoai5kLGIsZikpO3JldHVybiBqfVxuZnVuY3Rpb24gVjFkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7az1udWxsOyEhYS5kJiYoaz1CRChQaGIoYS5kLGIpLDEzOCkpO2lmKCFrKXtmPWEuYS5NaCgpO2w9Zi5pO2lmKCFhLmR8fFZoYihhLmQpIT1sKXtpPW5ldyBMcWI7ISFhLmQmJkxkKGksYS5kKTtqPWkuZi5jK2kuZy5jO2ZvcihoPWo7aDxsOysraCl7ZD1CRChxdWQoZixoKSwxMzgpO2U9bzFkKGEuZSxkKS5uZSgpO2M9QkQoZT09bnVsbD9qcmIoaS5mLG51bGwsZCk6RHJiKGkuZyxlLGQpLDEzOCk7ISFjJiZjIT1kJiYoZT09bnVsbD9qcmIoaS5mLG51bGwsYyk6RHJiKGkuZyxlLGMpKX1pZihpLmYuYytpLmcuYyE9bCl7Zm9yKGc9MDtnPGo7KytnKXtkPUJEKHF1ZChmLGcpLDEzOCk7ZT1vMWQoYS5lLGQpLm5lKCk7Yz1CRChlPT1udWxsP2pyYihpLmYsbnVsbCxkKTpEcmIoaS5nLGUsZCksMTM4KTshIWMmJmMhPWQmJihlPT1udWxsP2pyYihpLmYsbnVsbCxjKTpEcmIoaS5nLGUsYykpfX1hLmQ9aX1rPUJEKFBoYihhLmQsYiksMTM4KX1yZXR1cm4ga31cbmZ1bmN0aW9uIGxaYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsO2c9bnVsbDtqPWQ9PShLQWMoKSxIQWMpP2YuYzpmLmQ7aT1hX2IoYik7aWYoai5pPT1jKXtnPUJEKE9oYihhLmIsaiksMTApO2lmKCFnKXtnPVokYihqLEJEKHZOYihjLChOeWMoKSxWeGMpKSw5OCksZSxoWmIoaiksbnVsbCxqLm4sai5vLGksYik7eU5iKGcsKHd0YygpLCRzYyksaik7UmhiKGEuYixqLGcpfX1lbHNle2c9WiRiKChrPW5ldyB6TmIsbD1FZGIoRUQodk5iKGIsKE55YygpLGx5YykpKSkvMix4TmIoayxVeGMsbCksayksQkQodk5iKGMsVnhjKSw5OCksZSxkPT1IQWM/LTE6MSxudWxsLG5ldyBkN2MsbmV3IGY3YygwLDApLGksYik7aD1tWmIoZyxjLGQpO3lOYihnLCh3dGMoKSwkc2MpLGgpO1JoYihhLmIsaCxnKX1CRCh2TmIoYiwod3RjKCksS3NjKSksMjEpLkZjKChPcmMoKSxIcmMpKTtmY2QoQkQodk5iKGIsKE55YygpLFZ4YykpLDk4KSk/eU5iKGIsVnhjLChkY2QoKSxhY2QpKTp5TmIoYixWeGMsKGRjZCgpLGJjZCkpO3JldHVybiBnfVxuZnVuY3Rpb24gdk5jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO09kZChiLCdPcnRob2dvbmFsIGVkZ2Ugcm91dGluZycsMSk7aj1FZGIoRUQodk5iKGEsKE55YygpLHd5YykpKSk7Yz1FZGIoRUQodk5iKGEsbXljKSkpO2Q9RWRiKEVEKHZOYihhLHB5YykpKTttPW5ldyB0UGMoMCxjKTtxPTA7Zz1uZXcgQmliKGEuYiwwKTtoPW51bGw7az1udWxsO2k9bnVsbDtsPW51bGw7ZG97az1nLmI8Zy5kLmdjKCk/KHNDYihnLmI8Zy5kLmdjKCkpLEJEKGcuZC5YYihnLmM9Zy5iKyspLDI5KSk6bnVsbDtsPSFrP251bGw6ay5hO2lmKGgpe2hfYihoLHEpO3ErPWguYy5hfXA9IWg/cTpxK2Q7bz1zUGMobSxhLGksbCxwKTtlPSFofHxLcShpLChGTmMoKSxETmMpKTtmPSFrfHxLcShsLChGTmMoKSxETmMpKTtpZihvPjApe249KG8tMSkqYzshIWgmJihuKz1kKTshIWsmJihuKz1kKTtuPGomJiFlJiYhZiYmKG49aik7cSs9bn1lbHNlICFlJiYhZiYmKHErPWopO2g9aztpPWx9d2hpbGUoayk7YS5mLmE9cTtRZGQoYil9XG5mdW5jdGlvbiBJRWQoKXtJRWQ9Y2NiO3ZhciBhO0hFZD1uZXcgbUZkO0JFZD1LQyhaSSxuaWUsMiwwLDYsMSk7dUVkPU1iYihaRWQoMzMsNTgpLFpFZCgxLDI2KSk7dkVkPU1iYihaRWQoOTcsMTIyKSxaRWQoNjUsOTApKTt3RWQ9WkVkKDQ4LDU3KTtzRWQ9TWJiKHVFZCwwKTt0RWQ9TWJiKHZFZCx3RWQpO3hFZD1NYmIoTWJiKDAsWkVkKDEsNikpLFpFZCgzMywzOCkpO3lFZD1NYmIoTWJiKHdFZCxaRWQoNjUsNzApKSxaRWQoOTcsMTAyKSk7RUVkPU1iYihzRWQsWEVkKFwiLV8uIX4qJygpXCIpKTtGRWQ9TWJiKHRFZCwkRWQoXCItXy4hfionKClcIikpO1hFZChsdmUpOyRFZChsdmUpO01iYihFRWQsWEVkKCc7OkAmPSskLCcpKTtNYmIoRkVkLCRFZCgnOzpAJj0rJCwnKSk7ekVkPVhFZCgnOi8/IycpO0FFZD0kRWQoJzovPyMnKTtDRWQ9WEVkKCcvPyMnKTtERWQ9JEVkKCcvPyMnKTthPW5ldyBUcWI7YS5hLnpjKCdqYXInLGEpO2EuYS56YygnemlwJyxhKTthLmEuemMoJ2FyY2hpdmUnLGEpO0dFZD0obW1iKCksbmV3IHpvYihhKSl9XG5mdW5jdGlvbiB5VWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDt5TmIoYiwobVRjKCksY1RjKSwwKTtpPUJEKHZOYihiLGFUYyksODYpO2lmKGIuZC5iPT0wKXtpZihpKXtrPUVkYihFRCh2TmIoaSxmVGMpKSkrYS5hK3pVYyhpLGIpO3lOYihiLGZUYyxrKX1lbHNle3lOYihiLGZUYywwKX19ZWxzZXtmb3IoZD0oZj1Kc2IoKG5ldyBaUmMoYikpLmEuZCwwKSxuZXcgYVNjKGYpKTtXc2IoZC5hKTspe2M9QkQoWHNiKGQuYSksMTg4KS5jO3lVYyhhLGMpfWg9QkQocHIoKGc9SnNiKChuZXcgWlJjKGIpKS5hLmQsMCksbmV3IGFTYyhnKSkpLDg2KTtsPUJEKG9yKChlPUpzYigobmV3IFpSYyhiKSkuYS5kLDApLG5ldyBhU2MoZSkpKSw4Nik7aj0oRWRiKEVEKHZOYihsLGZUYykpKStFZGIoRUQodk5iKGgsZlRjKSkpKS8yO2lmKGkpe2s9RWRiKEVEKHZOYihpLGZUYykpKSthLmErelVjKGksYik7eU5iKGIsZlRjLGspO3lOYihiLGNUYyxFZGIoRUQodk5iKGIsZlRjKSkpLWopO3hVYyhhLGIpfWVsc2V7eU5iKGIsZlRjLGopfX19XG5mdW5jdGlvbiBEYmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztoPTA7bz0wO2k9dGxiKGEuZixhLmYubGVuZ3RoKTtmPWEuZDtnPWEuaTtkPWEuYTtlPWEuYjtkb3tuPTA7Zm9yKGs9bmV3IG9sYihhLnApO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMCk7bT1DYmMoYSxqKTtjPXRydWU7KGEucT09KGtBYygpLGRBYyl8fGEucT09Z0FjKSYmKGM9Q2NiKEREKG0uYikpKTtpZihCRChtLmEsMTkpLmE8MCYmYyl7KytuO2k9dGxiKGEuZixhLmYubGVuZ3RoKTthLmQ9YS5kK0JEKG0uYSwxOSkuYTtvKz1mLWEuZDtmPWEuZCtCRChtLmEsMTkpLmE7Zz1hLmk7ZD1NdShhLmEpO2U9TXUoYS5iKX1lbHNle2EuZj10bGIoaSxpLmxlbmd0aCk7YS5kPWY7YS5hPShRYihkKSxkP25ldyBUa2IoZCk6TnUobmV3IG9sYihkKSkpO2EuYj0oUWIoZSksZT9uZXcgVGtiKGUpOk51KG5ldyBvbGIoZSkpKTthLmk9Z319KytoO2w9biE9MCYmQ2NiKEREKGIuS2IobmV3IHZnZChtZWIobyksbWViKGgpKSkpKX13aGlsZShsKX1cbmZ1bmN0aW9uIGxZYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQztnPWEuZjttPWIuZjtoPWc9PShrJGMoKSxmJGMpfHxnPT1oJGM7bj1tPT1mJGN8fG09PWgkYztpPWc9PWckY3x8Zz09aSRjO289bT09ZyRjfHxtPT1pJGM7aj1nPT1nJGN8fGc9PWYkYztwPW09PWckY3x8bT09ZiRjO2lmKGgmJm4pe3JldHVybiBhLmY9PWgkYz9hOmJ9ZWxzZSBpZihpJiZvKXtyZXR1cm4gYS5mPT1pJGM/YTpifWVsc2UgaWYoaiYmcCl7aWYoZz09ZyRjKXtsPWE7az1ifWVsc2V7bD1iO2s9YX1mPShxPWMuaitjLmYscj1sLmUrZC5mLHM9JHduZC5NYXRoLm1heChxLHIpLHQ9cy0kd25kLk1hdGgubWluKGMuaixsLmUpLHU9bC5kK2QuZy1jLmksdSp0KTtlPSh2PWMuaStjLmcsdz1rLmQrZC5nLEE9JHduZC5NYXRoLm1heCh2LHcpLEI9QS0kd25kLk1hdGgubWluKGMuaSxrLmQpLEM9ay5lK2QuZi1jLmosQipDKTtyZXR1cm4gZjw9ZT9hLmY9PWckYz9hOmI6YS5mPT1mJGM/YTpifXJldHVybiBhfVxuZnVuY3Rpb24gd0diKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7az1hLmUuYS5jLmxlbmd0aDtmb3IoZz1uZXcgb2xiKGEuZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTIxKTtmLmo9ZmFsc2V9YS5pPUtDKFdELG9qZSwyNSxrLDE1LDEpO2EuZz1LQyhXRCxvamUsMjUsaywxNSwxKTthLm49bmV3IFJrYjtlPTA7bD1uZXcgUmtiO2ZvcihpPW5ldyBvbGIoYS5lLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMjEpO2guZD1lKys7aC5iLmEuYy5sZW5ndGg9PTAmJkVrYihhLm4saCk7R2tiKGwsaC5nKX1iPTA7Zm9yKGQ9bmV3IG9sYihsKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjEzKTtjLmM9YisrO2MuZj1mYWxzZX1qPWwuYy5sZW5ndGg7aWYoYS5iPT1udWxsfHxhLmIubGVuZ3RoPGope2EuYj1LQyhVRCxWamUsMjUsaiwxNSwxKTthLmM9S0Moc2JiLGRsZSwyNSxqLDE2LDEpfWVsc2V7QmxiKGEuYyl9YS5kPWw7YS5wPW5ldyBBc2IoQ3YoYS5kLmMubGVuZ3RoKSk7YS5qPTF9XG5mdW5jdGlvbiBzVGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYi5lLmMubGVuZ3RoPD0xKXtyZXR1cm59YS5mPWI7YS5kPUJEKHZOYihhLmYsKGJUYigpLFNTYikpLDM3OSk7YS5nPUJEKHZOYihhLmYsV1NiKSwxOSkuYTthLmU9RWRiKEVEKHZOYihhLmYsVFNiKSkpO2EuYz1FZGIoRUQodk5iKGEuZixSU2IpKSk7aXQoYS5iKTtmb3IoZT1uZXcgb2xiKGEuZi5jKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjgyKTtodChhLmIsZC5jLGQsbnVsbCk7aHQoYS5iLGQuZCxkLG51bGwpfWg9YS5mLmUuYy5sZW5ndGg7YS5hPUlDKFVELFtuaWUsVmplXSxbMTA0LDI1XSwxNSxbaCxoXSwyKTtmb3Ioaj1uZXcgb2xiKGEuZi5lKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTQ0KTtvVGIoYSxpLGEuYVtpLmJdKX1hLmk9SUMoVUQsW25pZSxWamVdLFsxMDQsMjVdLDE1LFtoLGhdLDIpO2ZvcihmPTA7ZjxoOysrZil7Zm9yKGc9MDtnPGg7KytnKXtjPWEuYVtmXVtnXTtrPTEvKGMqYyk7YS5pW2ZdW2ddPWt9fX1cbmZ1bmN0aW9uIFZmZShhKXt2YXIgYixjLGQsZTtpZihhLmI9PW51bGx8fGEuYi5sZW5ndGg8PTIpcmV0dXJuO2lmKGEuYSlyZXR1cm47Yj0wO2U9MDt3aGlsZShlPGEuYi5sZW5ndGgpe2lmKGIhPWUpe2EuYltiXT1hLmJbZSsrXTthLmJbYisxXT1hLmJbZSsrXX1lbHNlIGUrPTI7Yz1hLmJbYisxXTt3aGlsZShlPGEuYi5sZW5ndGgpe2lmKGMrMTxhLmJbZV0pYnJlYWs7aWYoYysxPT1hLmJbZV0pe2EuYltiKzFdPWEuYltlKzFdO2M9YS5iW2IrMV07ZSs9Mn1lbHNlIGlmKGM+PWEuYltlKzFdKXtlKz0yfWVsc2UgaWYoYzxhLmJbZSsxXSl7YS5iW2IrMV09YS5iW2UrMV07Yz1hLmJbYisxXTtlKz0yfWVsc2V7dGhyb3cgdmJiKG5ldyBoeignVG9rZW4jY29tcGFjdFJhbmdlcygpOiBJbnRlcm5lbCBFcnJvcjogWycrYS5iW2JdKycsJythLmJbYisxXSsnXSBbJythLmJbZV0rJywnK2EuYltlKzFdKyddJykpfX1iKz0yfWlmKGIhPWEuYi5sZW5ndGgpe2Q9S0MoV0Qsb2plLDI1LGIsMTUsMSk7JGZiKGEuYiwwLGQsMCxiKTthLmI9ZH1hLmE9dHJ1ZX1cbmZ1bmN0aW9uIHBaYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2ZvcihnPUVjKGEuYSkuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxNyk7aWYoZi5iLmMubGVuZ3RoPjApe2Q9bmV3IFRrYihCRChRYyhhLmEsZiksMjEpKTttbWIoKTtPa2IoZCxuZXcgRVpiKGIpKTtlPW5ldyBCaWIoZi5iLDApO3doaWxlKGUuYjxlLmQuZ2MoKSl7Yz0oc0NiKGUuYjxlLmQuZ2MoKSksQkQoZS5kLlhiKGUuYz1lLmIrKyksNzApKTtoPS0xO3N3aXRjaChCRCh2TmIoYywoTnljKCksUXdjKSksMjcyKS5nKXtjYXNlIDE6aD1kLmMubGVuZ3RoLTE7YnJlYWs7Y2FzZSAwOmg9blpiKGQpO2JyZWFrO2Nhc2UgMjpoPTA7fWlmKGghPS0xKXtpPSh0Q2IoaCxkLmMubGVuZ3RoKSxCRChkLmNbaF0sMjQzKSk7RWtiKGkuYi5iLGMpO0JEKHZOYihRX2IoaS5iLmMuaSksKHd0YygpLEtzYykpLDIxKS5GYygoT3JjKCksR3JjKSk7QkQodk5iKFFfYihpLmIuYy5pKSxLc2MpLDIxKS5GYyhFcmMpO3VpYihlKTt5TmIoYyxidGMsZil9fX1RWmIoZixudWxsKTtSWmIoZixudWxsKX19XG5mdW5jdGlvbiBGTGIoYSxiKXt2YXIgYyxkLGUsZjtjPW5ldyBLTGI7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbKEZ5YigpLEV5YiksRHliXSkpKSwyMSk7ZT1kLmdjKCk7ZT1lPT0yPzE6MDtlPT0xJiZCYmIoSGJiKEJEKEdBYihKQWIoZC5MYygpLG5ldyBNTGIpLFh5YihBZWIoMCksbmV3IEN6YikpLDE2MikuYSwyKSwwKSYmKGU9MCk7ZD1CRChHQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGIuZiwxNikpLGMpLEF5YihuZXcgaHpiLG5ldyBqemIsbmV3IEd6YixuZXcgSXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbRXliLER5Yl0pKSksMjEpO2Y9ZC5nYygpO2Y9Zj09Mj8xOjA7Zj09MSYmQmJiKEhiYihCRChHQWIoSkFiKGQuTGMoKSxuZXcgT0xiKSxYeWIoQWViKDApLG5ldyBDemIpKSwxNjIpLmEsMiksMCkmJihmPTApO2lmKGU8Zil7cmV0dXJuIC0xfWlmKGU9PWYpe3JldHVybiAwfXJldHVybiAxfVxuZnVuY3Rpb24gaDZiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2o9bmV3IFJrYjtpZighd05iKGEsKHd0YygpLEZzYykpKXtyZXR1cm4gan1mb3IoZD1CRCh2TmIoYSxGc2MpLDE1KS5LYygpO2QuT2IoKTspe2I9QkQoZC5QYigpLDEwKTtnNmIoYixhKTtqLmNbai5jLmxlbmd0aF09Yn1mb3IoZj1uZXcgb2xiKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDI5KTtmb3IoaD1uZXcgb2xiKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEwKTtpZihnLmshPShqMGIoKSxlMGIpKXtjb250aW51ZX1pPUJEKHZOYihnLEdzYyksMTApOyEhaSYmKGs9bmV3IEgwYixGMGIoayxnKSxsPUJEKHZOYihnLEhzYyksNjEpLEcwYihrLGwpLG09QkQoSWtiKGkuaiwwKSwxMSksbj1uZXcgVVpiLFFaYihuLGspLFJaYihuLG0pLHVuZGVmaW5lZCl9fWZvcihjPW5ldyBvbGIoaik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDEwKTskX2IoYixCRChJa2IoYS5iLGEuYi5jLmxlbmd0aC0xKSwyOSkpfXJldHVybiBqfVxuZnVuY3Rpb24gTTFiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtiPW1wZChhKTtmPUNjYihERChoa2QoYiwoTnljKCksZnhjKSkpKTtrPTA7ZT0wO2ZvcihqPW5ldyBGeWQoKCFhLmUmJihhLmU9bmV3IHk1ZChCMixhLDcsNCkpLGEuZSkpO2ouZSE9ai5pLmdjKCk7KXtpPUJEKER5ZChqKSw3OSk7aD1RbGQoaSk7Zz1oJiZmJiZDY2IoREQoaGtkKGksZ3hjKSkpO209YXRkKEJEKHF1ZCgoIWkuYyYmKGkuYz1uZXcgeTVkKHoyLGksNSw4KSksaS5jKSwwKSw4MikpO2gmJmc/KytlOmgmJiFnPysrazpYb2QobSk9PWJ8fG09PWI/KytlOisra31mb3IoZD1uZXcgRnlkKCghYS5kJiYoYS5kPW5ldyB5NWQoQjIsYSw4LDUpKSxhLmQpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksNzkpO2g9UWxkKGMpO2c9aCYmZiYmQ2NiKEREKGhrZChjLGd4YykpKTtsPWF0ZChCRChxdWQoKCFjLmImJihjLmI9bmV3IHk1ZCh6MixjLDQsNykpLGMuYiksMCksODIpKTtoJiZnPysrazpoJiYhZz8rK2U6WG9kKGwpPT1ifHxsPT1iPysrazorK2V9cmV0dXJuIGstZX1cbmZ1bmN0aW9uIHViYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtPZGQoYiwnRWRnZSBzcGxpdHRpbmcnLDEpO2lmKGEuYi5jLmxlbmd0aDw9Mil7UWRkKGIpO3JldHVybn1mPW5ldyBCaWIoYS5iLDApO2c9KHNDYihmLmI8Zi5kLmdjKCkpLEJEKGYuZC5YYihmLmM9Zi5iKyspLDI5KSk7d2hpbGUoZi5iPGYuZC5nYygpKXtlPWc7Zz0oc0NiKGYuYjxmLmQuZ2MoKSksQkQoZi5kLlhiKGYuYz1mLmIrKyksMjkpKTtmb3IoaT1uZXcgb2xiKGUuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtmb3Ioaz1uZXcgb2xiKGguaik7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDExKTtmb3IoZD1uZXcgb2xiKGouZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE3KTttPWMuZDtsPW0uaS5jO2whPWUmJmwhPWcmJnpiYyhjLChuPW5ldyBiMGIoYSksX19iKG4sKGowYigpLGcwYikpLHlOYihuLCh3dGMoKSwkc2MpLGMpLHlOYihuLChOeWMoKSxWeGMpLChkY2QoKSwkYmQpKSwkX2IobixnKSxuKSl9fX19UWRkKGIpfVxuZnVuY3Rpb24gTVRiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aD1iLnAhPW51bGwmJiFiLmI7aHx8T2RkKGIsa21lLDEpO2M9QkQodk5iKGEsKHd0YygpLGl0YykpLDE1KTtnPTEvYy5nYygpO2lmKGIubil7U2RkKGIsJ0VMSyBMYXllcmVkIHVzZXMgdGhlIGZvbGxvd2luZyAnK2MuZ2MoKSsnIG1vZHVsZXM6Jyk7bj0wO2ZvcihtPWMuS2MoKTttLk9iKCk7KXtrPUJEKG0uUGIoKSw1MSk7ZD0objwxMD8nMCc6JycpK24rKztTZGQoYiwnICAgU2xvdCAnK2QrJzogJytoZGIocmIoaykpKX19bz0wO2ZvcihsPWMuS2MoKTtsLk9iKCk7KXtrPUJEKGwuUGIoKSw1MSk7ay5wZihhLFVkZChiLGcpKTsrK299Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyOSk7R2tiKGEuYSxlLmEpO2UuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKX1mb3Ioaj1uZXcgb2xiKGEuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDEwKTskX2IoaSxudWxsKX1hLmIuYz1LQyhTSSxVaGUsMSwwLDUsMSk7aHx8UWRkKGIpfVxuZnVuY3Rpb24ga0pjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEE7ZD1FZGIoRUQodk5iKGIsKE55YygpLEJ4YykpKSk7dj1CRCh2TmIoYixBeWMpLDE5KS5hO209NDtlPTM7dz0yMC92O249ZmFsc2U7aT0wO2c9T2hlO2Rve2Y9aSE9MTtsPWkhPTA7QT0wO2ZvcihxPWEuYSxzPTAsdT1xLmxlbmd0aDtzPHU7KytzKXtvPXFbc107by5mPW51bGw7bEpjKGEsbyxmLGwsZCk7QSs9JHduZC5NYXRoLmFicyhvLmEpfWRve2g9cEpjKGEsYil9d2hpbGUoaCk7Zm9yKHA9YS5hLHI9MCx0PXAubGVuZ3RoO3I8dDsrK3Ipe289cFtyXTtjPXhKYyhvKS5hO2lmKGMhPTApe2ZvcihrPW5ldyBvbGIoby5lKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksMTApO2oubi5iKz1jfX19aWYoaT09MHx8aT09MSl7LS1tO2lmKG08PTAmJihBPGd8fC1tPnYpKXtpPTI7Zz1PaGV9ZWxzZSBpZihpPT0wKXtpPTE7Zz1BfWVsc2V7aT0wO2c9QX19ZWxzZXtuPUE+PWd8fGctQTx3O2c9QTtuJiYtLWV9fXdoaWxlKCEobiYmZTw9MCkpfVxuZnVuY3Rpb24gVUNiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG87bz1uZXcgTHFiO2ZvcihmPWEuYS5lYygpLktjKCk7Zi5PYigpOyl7ZD1CRChmLlBiKCksMTY4KTtSaGIobyxkLGMuSmUoZCkpfWc9KFFiKGEpLGE/bmV3IFRrYihhKTpOdShhLmEuZWMoKS5LYygpKSk7T2tiKGcsbmV3IFdDYihvKSk7aD1HeChnKTtpPW5ldyBoRGIoYik7bj1uZXcgTHFiO2pyYihuLmYsYixpKTt3aGlsZShoLmEuZ2MoKSE9MCl7aj1udWxsO2s9bnVsbDtsPW51bGw7Zm9yKGU9aC5hLmVjKCkuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwxNjgpO2lmKEVkYihFRChXZChpcmIoby5mLGQpKSkpPD1QamUpe2lmKE1oYihuLGQuYSkmJiFNaGIobixkLmIpKXtrPWQuYjtsPWQuYTtqPWQ7YnJlYWt9aWYoTWhiKG4sZC5iKSl7aWYoIU1oYihuLGQuYSkpe2s9ZC5hO2w9ZC5iO2o9ZDticmVha319fX1pZighail7YnJlYWt9bT1uZXcgaERiKGspO0VrYihCRChXZChpcmIobi5mLGwpKSwyMjEpLmEsbSk7anJiKG4uZixrLG0pO2guYS5CYyhqKSE9bnVsbH1yZXR1cm4gaX1cbmZ1bmN0aW9uIFVCYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbjtPZGQoYywnRGVwdGgtZmlyc3QgY3ljbGUgcmVtb3ZhbCcsMSk7bD1iLmE7az1sLmMubGVuZ3RoO2EuYz1uZXcgUmtiO2EuZD1LQyhzYmIsZGxlLDI1LGssMTYsMSk7YS5hPUtDKHNiYixkbGUsMjUsaywxNiwxKTthLmI9bmV3IFJrYjtnPTA7Zm9yKGo9bmV3IG9sYihsKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTApO2kucD1nO1FxKFJfYihpKSkmJkVrYihhLmMsaSk7KytnfWZvcihuPW5ldyBvbGIoYS5jKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTApO1RCYyhhLG0pfWZvcihmPTA7ZjxrO2YrKyl7aWYoIWEuZFtmXSl7aD0odENiKGYsbC5jLmxlbmd0aCksQkQobC5jW2ZdLDEwKSk7VEJjKGEsaCl9fWZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTcpO1BaYihkLHRydWUpO3lOYihiLCh3dGMoKSxBc2MpLChCY2IoKSx0cnVlKSl9YS5jPW51bGw7YS5kPW51bGw7YS5hPW51bGw7YS5iPW51bGw7UWRkKGMpfVxuZnVuY3Rpb24gUFNjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7YS5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2ZvcihkPUpzYihiLmIsMCk7ZC5iIT1kLmQuYzspe2M9QkQoWHNiKGQpLDg2KTtpZihjLmIuYj09MCl7eU5iKGMsKG1UYygpLGpUYyksKEJjYigpLHRydWUpKTtFa2IoYS5hLGMpfX1zd2l0Y2goYS5hLmMubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgWFJjKDAsYiwnRFVNTVlfUk9PVCcpO3lOYihlLChtVGMoKSxqVGMpLChCY2IoKSx0cnVlKSk7eU5iKGUsWVNjLHRydWUpO0RzYihiLmIsZSk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zj1uZXcgWFJjKDAsYiwnU1VQRVJfUk9PVCcpO2ZvcihoPW5ldyBvbGIoYS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksODYpO2k9bmV3IFFSYyhmLGcpO3lOYihpLChtVGMoKSxZU2MpLChCY2IoKSx0cnVlKSk7RHNiKGYuYS5hLGkpO0RzYihmLmQsaSk7RHNiKGcuYixpKTt5TmIoZyxqVGMsZmFsc2UpfXlOYihmLChtVGMoKSxqVGMpLChCY2IoKSx0cnVlKSk7eU5iKGYsWVNjLHRydWUpO0RzYihiLmIsZik7fX1cbmZ1bmN0aW9uIHo2YyhhLGIpe2k2YygpO3ZhciBjLGQsZSxmLGcsaDtmPWIuYy0oYS5jK2EuYik7ZT1hLmMtKGIuYytiLmIpO2c9YS5kLShiLmQrYi5hKTtjPWIuZC0oYS5kK2EuYSk7ZD0kd25kLk1hdGgubWF4KGUsZik7aD0kd25kLk1hdGgubWF4KGcsYyk7SXkoKTtNeShKcWUpO2lmKCgkd25kLk1hdGguYWJzKGQpPD1KcWV8fGQ9PTB8fGlzTmFOKGQpJiZpc05hTigwKT8wOmQ8MD8tMTpkPjA/MTpOeShpc05hTihkKSxpc05hTigwKSkpPj0wXihudWxsLE15KEpxZSksKCR3bmQuTWF0aC5hYnMoaCk8PUpxZXx8aD09MHx8aXNOYU4oaCkmJmlzTmFOKDApPzA6aDwwPy0xOmg+MD8xOk55KGlzTmFOKGgpLGlzTmFOKDApKSk+PTApKXtyZXR1cm4gJHduZC5NYXRoLm1heChoLGQpfU15KEpxZSk7aWYoKCR3bmQuTWF0aC5hYnMoZCk8PUpxZXx8ZD09MHx8aXNOYU4oZCkmJmlzTmFOKDApPzA6ZDwwPy0xOmQ+MD8xOk55KGlzTmFOKGQpLGlzTmFOKDApKSk+MCl7cmV0dXJuICR3bmQuTWF0aC5zcXJ0KGgqaCtkKmQpfXJldHVybiAtJHduZC5NYXRoLnNxcnQoaCpoK2QqZCl9XG5mdW5jdGlvbiBLZ2UoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoIWIpcmV0dXJuOyFhLmEmJihhLmE9bmV3IFd2Yik7aWYoYS5lPT0yKXtUdmIoYS5hLGIpO3JldHVybn1pZihiLmU9PTEpe2ZvcihlPTA7ZTxiLmVtKCk7ZSsrKUtnZShhLGIuYW0oZSkpO3JldHVybn1oPWEuYS5hLmMubGVuZ3RoO2lmKGg9PTApe1R2YihhLmEsYik7cmV0dXJufWc9QkQoVXZiKGEuYSxoLTEpLDExNyk7aWYoISgoZy5lPT0wfHxnLmU9PTEwKSYmKGIuZT09MHx8Yi5lPT0xMCkpKXtUdmIoYS5hLGIpO3JldHVybn1mPWIuZT09MD8yOmIuYm0oKS5sZW5ndGg7aWYoZy5lPT0wKXtjPW5ldyBJZmI7ZD1nLl9sKCk7ZD49VGplP0VmYihjLFRlZShkKSk6QWZiKGMsZCZhamUpO2c9KCsrdmZlLG5ldyBIZ2UoMTAsbnVsbCwwKSk7VnZiKGEuYSxnLGgtMSl9ZWxzZXtjPShnLmJtKCkubGVuZ3RoK2YsbmV3IElmYik7RWZiKGMsZy5ibSgpKX1pZihiLmU9PTApe2Q9Yi5fbCgpO2Q+PVRqZT9FZmIoYyxUZWUoZCkpOkFmYihjLGQmYWplKX1lbHNle0VmYihjLGIuYm0oKSl9QkQoZyw1MjEpLmI9Yy5hfVxuZnVuY3Rpb24gcmdiKGEpe3ZhciBiLGMsZCxlLGY7aWYoYS5nIT1udWxsKXtyZXR1cm4gYS5nfWlmKGEuYTwzMil7YS5nPXJoYihDYmIoYS5mKSxRRChhLmUpKTtyZXR1cm4gYS5nfWU9c2hiKCghYS5jJiYoYS5jPWZoYihhLmYpKSxhLmMpLDApO2lmKGEuZT09MCl7cmV0dXJuIGV9Yj0oIWEuYyYmKGEuYz1maGIoYS5mKSksYS5jKS5lPDA/MjoxO2M9ZS5sZW5ndGg7ZD0tYS5lK2MtYjtmPW5ldyBVZmI7Zi5hKz0nJytlO2lmKGEuZT4wJiZkPj0tNil7aWYoZD49MCl7VGZiKGYsYy1RRChhLmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKX1lbHNle2YuYT1xZmIoZi5hLDAsYi0xKSsnMC4nK3BmYihmLmEsYi0xKTtUZmIoZixiKzEsemZiKGVnYiwwLC1RRChkKS0xKSl9fWVsc2V7aWYoYy1iPj0xKXtUZmIoZixiLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTsrK2N9VGZiKGYsYyxTdHJpbmcuZnJvbUNoYXJDb2RlKDY5KSk7ZD4wJiZUZmIoZiwrK2MsU3RyaW5nLmZyb21DaGFyQ29kZSg0MykpO1RmYihmLCsrYywnJytVYmIoQ2JiKGQpKSl9YS5nPWYuYTtyZXR1cm4gYS5nfVxuZnVuY3Rpb24gbnBjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2lmKGMuZGMoKSl7cmV0dXJufWg9MDttPTA7ZD1jLktjKCk7bz1CRChkLlBiKCksMTkpLmE7d2hpbGUoaDxiLmYpe2lmKGg9PW8pe209MDtkLk9iKCk/KG89QkQoZC5QYigpLDE5KS5hKToobz1iLmYrMSl9aWYoaCE9bSl7cT1CRChJa2IoYS5iLGgpLDI5KTtuPUJEKElrYihhLmIsbSksMjkpO3A9TXUocS5hKTtmb3IobD1uZXcgb2xiKHApO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxMCk7Wl9iKGssbi5hLmMubGVuZ3RoLG4pO2lmKG09PTApe2c9TXUoUl9iKGspKTtmb3IoZj1uZXcgb2xiKGcpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxNyk7UFpiKGUsdHJ1ZSk7eU5iKGEsKHd0YygpLEFzYyksKEJjYigpLHRydWUpKTtOb2MoYSxlLDEpfX19fSsrbTsrK2h9aT1uZXcgQmliKGEuYiwwKTt3aGlsZShpLmI8aS5kLmdjKCkpe2o9KHNDYihpLmI8aS5kLmdjKCkpLEJEKGkuZC5YYihpLmM9aS5iKyspLDI5KSk7ai5hLmMubGVuZ3RoPT0wJiZ1aWIoaSl9fVxuZnVuY3Rpb24geG1jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2c9Yi5iO2s9Zy5vO2k9Zy5kO2Q9RWRiKEVEKGNfYihnLChOeWMoKSxseWMpKSkpO2U9RWRiKEVEKGNfYihnLG55YykpKTtqPUVkYihFRChjX2IoZyx4eWMpKSk7aD1uZXcgTF9iO3ZfYihoLGkuZCxpLmMsaS5hLGkuYik7bT10bWMoYixkLGUsaik7Zm9yKHI9bmV3IG9sYihiLmQpO3IuYTxyLmMuYy5sZW5ndGg7KXtxPUJEKG1sYihyKSwxMDEpO2ZvcihvPXEuZi5hLmVjKCkuS2MoKTtvLk9iKCk7KXtuPUJEKG8uUGIoKSw0MDkpO2Y9bi5hO2w9cm1jKG4pO2M9KHM9bmV3IHM3YyxwbWMobixuLmMsbSxzKSxvbWMobixsLG0scykscG1jKG4sbi5kLG0scykscyk7Yz1hLlVmKG4sbCxjKTtPc2IoZi5hKTt5ZShmLmEsYyk7TUFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGMsMTYpKSxuZXcgQm1jKGssaCkpfXA9cS5pO2lmKHApe3dtYyhxLHAsbSxlKTt0PW5ldyBnN2MocC5nKTt5bWMoayxoLHQpO1A2Yyh0LHAuaik7eW1jKGssaCx0KX19dl9iKGksaC5kLGguYyxoLmEsaC5iKX1cbmZ1bmN0aW9uIHJnYyhhLGIsYyl7dmFyIGQsZSxmO2U9QkQodk5iKGIsKE55YygpLHN3YykpLDI3NSk7aWYoZT09KHlyYygpLHdyYykpe3JldHVybn1PZGQoYywnSG9yaXpvbnRhbCBDb21wYWN0aW9uJywxKTthLmE9YjtmPW5ldyBZZ2M7ZD1uZXcgY0ViKChmLmQ9YixmLmM9QkQodk5iKGYuZCxTd2MpLDIxOCksUGdjKGYpLFdnYyhmKSxWZ2MoZiksZi5hKSk7YUViKGQsYS5iKTtzd2l0Y2goQkQodk5iKGIscndjKSw0MjIpLmcpe2Nhc2UgMTokRGIoZCxuZXcgamZjKGEuYSkpO2JyZWFrO2RlZmF1bHQ6JERiKGQsKE9EYigpLE1EYikpO31zd2l0Y2goZS5nKXtjYXNlIDE6VERiKGQpO2JyZWFrO2Nhc2UgMjpURGIoU0RiKGQsKGVhZCgpLGJhZCkpKTticmVhaztjYXNlIDM6VERiKF9EYihTRGIoVERiKGQpLChlYWQoKSxiYWQpKSxuZXcgQmdjKSk7YnJlYWs7Y2FzZSA0OlREYihfRGIoU0RiKFREYihkKSwoZWFkKCksYmFkKSksbmV3IERnYyhmKSkpO2JyZWFrO2Nhc2UgNTpURGIoWkRiKGQscGdjKSk7fVNEYihkLChlYWQoKSxhYWQpKTtkLmU9dHJ1ZTtNZ2MoZik7UWRkKGMpfVxuZnVuY3Rpb24gbVljKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksaixrLGw7aT1PdShPQyhHQyh6XywxKSxVaGUsMjIwLDAsW2IsYyxkLGVdKSk7bD1udWxsO3N3aXRjaChhLmIuZyl7Y2FzZSAxOmw9T3UoT0MoR0Mob18sMSksVWhlLDUyNiwwLFtuZXcgdVljLG5ldyBvWWMsbmV3IHFZY10pKTticmVhaztjYXNlIDA6bD1PdShPQyhHQyhvXywxKSxVaGUsNTI2LDAsW25ldyBxWWMsbmV3IG9ZYyxuZXcgdVljXSkpO2JyZWFrO2Nhc2UgMjpsPU91KE9DKEdDKG9fLDEpLFVoZSw1MjYsMCxbbmV3IG9ZYyxuZXcgdVljLG5ldyBxWWNdKSk7fWZvcihrPW5ldyBvbGIobCk7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDUyNik7aS5jLmxlbmd0aD4xJiYoaT1qLm1nKGksYS5hLGgpKX1pZihpLmMubGVuZ3RoPT0xKXtyZXR1cm4gQkQoSWtiKGksaS5jLmxlbmd0aC0xKSwyMjApfWlmKGkuYy5sZW5ndGg9PTIpe3JldHVybiBsWWMoKHRDYigwLGkuYy5sZW5ndGgpLEJEKGkuY1swXSwyMjApKSwodENiKDEsaS5jLmxlbmd0aCksQkQoaS5jWzFdLDIyMCkpLGcsZil9cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBKTmIoYSl7dmFyIGIsYyxkLGUsZixnO0hrYihhLmEsbmV3IFBOYik7Zm9yKGM9bmV3IG9sYihhLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyMjEpO2Q9YzdjKFI2YyhCRChhLmIsNjUpLmMpLEJEKGIuYiw2NSkuYyk7aWYoRk5iKXtnPUJEKGEuYiw2NSkuYjtmPUJEKGIuYiw2NSkuYjtpZigkd25kLk1hdGguYWJzKGQuYSk+PSR3bmQuTWF0aC5hYnMoZC5iKSl7ZC5iPTA7Zi5kK2YuYT5nLmQmJmYuZDxnLmQrZy5hJiYkNmMoZCwkd25kLk1hdGgubWF4KGcuYy0oZi5jK2YuYiksZi5jLShnLmMrZy5iKSkpfWVsc2V7ZC5hPTA7Zi5jK2YuYj5nLmMmJmYuYzxnLmMrZy5iJiYkNmMoZCwkd25kLk1hdGgubWF4KGcuZC0oZi5kK2YuYSksZi5kLShnLmQrZy5hKSkpfX1lbHNleyQ2YyhkLF9OYihCRChhLmIsNjUpLEJEKGIuYiw2NSkpKX1lPSR3bmQuTWF0aC5zcXJ0KGQuYSpkLmErZC5iKmQuYik7ZT1MTmIoR05iLGIsZSxkKTskNmMoZCxlKTskTmIoQkQoYi5iLDY1KSxkKTtIa2IoYi5hLG5ldyBSTmIoZCkpO0JEKEdOYi5iLDY1KTtLTmIoR05iLEhOYixiKX19XG5mdW5jdGlvbiBWSmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbzthLmY9bmV3IEtGYjtqPTA7ZT0wO2ZvcihnPW5ldyBvbGIoYS5lLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwyOSk7Zm9yKGk9bmV3IG9sYihmLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMCk7aC5wPWorKztmb3IoZD1uZXcgU3IodXIoVV9iKGgpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksMTcpO2MucD1lKyt9Yj1iS2MoaCk7Zm9yKG09bmV3IG9sYihoLmopO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSwxMSk7aWYoYil7bz1sLmEuYjtpZihvIT0kd25kLk1hdGguZmxvb3Iobykpe2s9by1TYmIoQ2JiKCR3bmQuTWF0aC5yb3VuZChvKSkpO2wuYS5iLT1rfX1uPWwubi5iK2wuYS5iO2lmKG4hPSR3bmQuTWF0aC5mbG9vcihuKSl7az1uLVNiYihDYmIoJHduZC5NYXRoLnJvdW5kKG4pKSk7bC5uLmItPWt9fX19YS5nPWo7YS5iPWU7YS5pPUtDKHhZLFVoZSw0MDEsaiwwLDEpO2EuYz1LQyh3WSxVaGUsNjQ5LGUsMCwxKTthLmQuYS4kYigpfVxuZnVuY3Rpb24gVXhkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtpZihhLmVqKCkpe2k9YS5maigpO2lmKGEuaT4wKXtiPW5ldyBfemQoYS5pLGEuZyk7Yz1hLmk7Zj1jPDEwMD9udWxsOm5ldyBJeGQoYyk7aWYoYS5paigpKXtmb3IoZD0wO2Q8YS5pOysrZCl7Zz1hLmdbZF07Zj1hLmtqKGcsZil9fW91ZChhKTtlPWM9PTE/YS5aaSg0LHF1ZChiLDApLG51bGwsMCxpKTphLlppKDYsYixudWxsLC0xLGkpO2lmKGEuYmooKSl7Zm9yKGQ9bmV3ICR5ZChiKTtkLmUhPWQuaS5nYygpOyl7Zj1hLmRqKFp5ZChkKSxmKX1pZighZil7YS4kaShlKX1lbHNle2YuRWkoZSk7Zi5GaSgpfX1lbHNle2lmKCFmKXthLiRpKGUpfWVsc2V7Zi5FaShlKTtmLkZpKCl9fX1lbHNle291ZChhKTthLiRpKGEuWmkoNiwobW1iKCksam1iKSxudWxsLC0xLGkpKX19ZWxzZSBpZihhLmJqKCkpe2lmKGEuaT4wKXtoPWEuZztqPWEuaTtvdWQoYSk7Zj1qPDEwMD9udWxsOm5ldyBJeGQoaik7Zm9yKGQ9MDtkPGo7KytkKXtnPWhbZF07Zj1hLmRqKGcsZil9ISFmJiZmLkZpKCl9ZWxzZXtvdWQoYSl9fWVsc2V7b3VkKGEpfX1cbmZ1bmN0aW9uIFpRYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07VFFjKHRoaXMpO2M9PShGUWMoKSxEUWMpP1FxYih0aGlzLnIsYSk6UXFiKHRoaXMudyxhKTtrPVBqZTtqPVFqZTtmb3IoZz1iLmEuZWMoKS5LYygpO2cuT2IoKTspe2U9QkQoZy5QYigpLDQ2KTtoPUJEKGUuYSw0NTUpO2Q9QkQoZS5iLDE3KTtpPWQuYztpPT1hJiYoaT1kLmQpO2g9PURRYz9RcWIodGhpcy5yLGkpOlFxYih0aGlzLncsaSk7bT0oVWNkKCksTGNkKS5IYyhpLmopP0VkYihFRCh2TmIoaSwod3RjKCkscXRjKSkpKTpsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbaS5pLm4saS5uLGkuYV0pKS5iO2s9JHduZC5NYXRoLm1pbihrLG0pO2o9JHduZC5NYXRoLm1heChqLG0pfWw9KFVjZCgpLExjZCkuSGMoYS5qKT9FZGIoRUQodk5iKGEsKHd0YygpLHF0YykpKSk6bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2EuaS5uLGEubixhLmFdKSkuYjtYUWModGhpcyxsLGssaik7Zm9yKGY9Yi5hLmVjKCkuS2MoKTtmLk9iKCk7KXtlPUJEKGYuUGIoKSw0Nik7VVFjKHRoaXMsQkQoZS5iLDE3KSl9dGhpcy5vPWZhbHNlfVxuZnVuY3Rpb24gZ0QoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEc7Yz1hLmwmODE5MTtkPWEubD4+MTN8KGEubSYxNSk8PDk7ZT1hLm0+PjQmODE5MTtmPWEubT4+MTd8KGEuaCYyNTUpPDw1O2c9KGEuaCYxMDQ4MzIwKT4+ODtoPWIubCY4MTkxO2k9Yi5sPj4xM3woYi5tJjE1KTw8OTtqPWIubT4+NCY4MTkxO2s9Yi5tPj4xN3woYi5oJjI1NSk8PDU7bD0oYi5oJjEwNDgzMjApPj44O0I9YypoO0M9ZCpoO0Q9ZSpoO0Y9ZipoO0c9ZypoO2lmKGkhPTApe0MrPWMqaTtEKz1kKmk7Ris9ZSppO0crPWYqaX1pZihqIT0wKXtEKz1jKmo7Ris9ZCpqO0crPWUqan1pZihrIT0wKXtGKz1jKms7Rys9ZCprfWwhPTAmJihHKz1jKmwpO249QiZFamU7bz0oQyY1MTEpPDwxMzttPW4rbztxPUI+PjIyO3I9Qz4+OTtzPShEJjI2MjE0Myk8PDQ7dD0oRiYzMSk8PDE3O3A9cStyK3MrdDt2PUQ+PjE4O3c9Rj4+NTtBPShHJjQwOTUpPDw4O3U9dit3K0E7cCs9bT4+MjI7bSY9RWplO3UrPXA+PjIyO3AmPUVqZTt1Jj1GamU7cmV0dXJuIFRDKG0scCx1KX1cbmZ1bmN0aW9uIG83YihhKXt2YXIgYixjLGQsZSxmLGcsaDtoPUJEKElrYihhLmosMCksMTEpO2lmKGguZy5jLmxlbmd0aCE9MCYmaC5lLmMubGVuZ3RoIT0wKXt0aHJvdyB2YmIobmV3IFpkYignSW50ZXJhY3RpdmUgbGF5b3V0IGRvZXMgbm90IHN1cHBvcnQgTk9SVEgvU09VVEggcG9ydHMgd2l0aCBpbmNvbWluZyBfYW5kXyBvdXRnb2luZyBlZGdlcy4nKSl9aWYoaC5nLmMubGVuZ3RoIT0wKXtmPVBqZTtmb3IoYz1uZXcgb2xiKGguZyk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDE3KTtnPWIuZC5pO2Q9QkQodk5iKGcsKE55YygpLHR4YykpLDE0Mik7Zj0kd25kLk1hdGgubWluKGYsZy5uLmEtZC5iKX1yZXR1cm4gbmV3IGNjKFFiKGYpKX1pZihoLmUuYy5sZW5ndGghPTApe2U9UWplO2ZvcihjPW5ldyBvbGIoaC5lKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTcpO2c9Yi5jLmk7ZD1CRCh2TmIoZywoTnljKCksdHhjKSksMTQyKTtlPSR3bmQuTWF0aC5tYXgoZSxnLm4uYStnLm8uYStkLmMpfXJldHVybiBuZXcgY2MoUWIoZSkpfXJldHVybiB3YigpLHdiKCksdmJ9XG5mdW5jdGlvbiBFTGQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhLkZrKCkpe2lmKGEuaT40KXtpZihhLndqKGIpKXtpZihhLnJrKCkpe2U9QkQoYiw0OSk7ZD1lLlVnKCk7aT1kPT1hLmUmJihhLkRrKCk/ZS5PZyhlLlZnKCksYS56aygpKT09YS5BaygpOi0xLWUuVmcoKT09YS5haigpKTtpZihhLkVrKCkmJiFpJiYhZCYmISFlLlpnKCkpe2ZvcihmPTA7ZjxhLmk7KytmKXtjPWEuR2soQkQoYS5nW2ZdLDU2KSk7aWYoUEQoYyk9PT1QRChiKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gaX1lbHNlIGlmKGEuRGsoKSYmIWEuQ2soKSl7Zz1CRChiLDU2KS5haCh6VWQoQkQoYS5haygpLDE4KSkpO2lmKFBEKGcpPT09UEQoYS5lKSl7cmV0dXJuIHRydWV9ZWxzZSBpZihnPT1udWxsfHwhQkQoZyw1Nikua2goKSl7cmV0dXJuIGZhbHNlfX19ZWxzZXtyZXR1cm4gZmFsc2V9fWg9cHVkKGEsYik7aWYoYS5FaygpJiYhaCl7Zm9yKGY9MDtmPGEuaTsrK2Ype2U9YS5HayhCRChhLmdbZl0sNTYpKTtpZihQRChlKT09PVBEKGIpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBofWVsc2V7cmV0dXJuIHB1ZChhLGIpfX1cbmZ1bmN0aW9uIG1IYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07az1uZXcgUmtiO209bmV3IFRxYjtnPWIuYjtmb3IoZT0wO2U8Zy5jLmxlbmd0aDtlKyspe2o9KHRDYihlLGcuYy5sZW5ndGgpLEJEKGcuY1tlXSwyOSkpLmE7ay5jPUtDKFNJLFVoZSwxLDAsNSwxKTtmb3IoZj0wO2Y8ai5jLmxlbmd0aDtmKyspe2g9YS5hW2VdW2ZdO2gucD1mO2guaz09KGowYigpLGkwYikmJihrLmNbay5jLmxlbmd0aF09aCx0cnVlKTtOa2IoQkQoSWtiKGIuYixlKSwyOSkuYSxmLGgpO2guai5jPUtDKFNJLFVoZSwxLDAsNSwxKTtHa2IoaC5qLEJEKEJEKElrYihhLmIsZSksMTUpLlhiKGYpLDE0KSk7ZWNkKEJEKHZOYihoLChOeWMoKSxWeGMpKSw5OCkpfHx5TmIoaCxWeGMsKGRjZCgpLFpiZCkpfWZvcihkPW5ldyBvbGIoayk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDEwKTtsPWtIYyhjKTttLmEuemMobCxtKTttLmEuemMoYyxtKX19Zm9yKGk9bS5hLmVjKCkuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwxMCk7bW1iKCk7T2tiKGguaiwoT2NjKCksSWNjKSk7aC5pPXRydWU7Tl9iKGgpfX1cbmZ1bmN0aW9uIGc2YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2s9QkQodk5iKGEsKHd0YygpLEhzYykpLDYxKTtkPUJEKElrYihhLmosMCksMTEpO2s9PShVY2QoKSxBY2QpP0cwYihkLFJjZCk6az09UmNkJiZHMGIoZCxBY2QpO2lmKEJEKHZOYihiLChOeWMoKSxGeGMpKSwxNzQpLkhjKCh0ZGQoKSxzZGQpKSl7aT1FZGIoRUQodk5iKGEsdHljKSkpO2o9RWRiKEVEKHZOYihhLHV5YykpKTtnPUVkYihFRCh2TmIoYSxyeWMpKSk7aD1CRCh2TmIoYixZeGMpLDIxKTtpZihoLkhjKChyY2QoKSxuY2QpKSl7Yz1qO2w9YS5vLmEvMi1kLm4uYTtmb3IoZj1uZXcgb2xiKGQuZik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDcwKTtlLm4uYj1jO2Uubi5hPWwtZS5vLmEvMjtjKz1lLm8uYitnfX1lbHNlIGlmKGguSGMocGNkKSl7Zm9yKGY9bmV3IG9sYihkLmYpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSw3MCk7ZS5uLmE9aSthLm8uYS1kLm4uYX19V0diKG5ldyBZR2IoKGEkYigpLG5ldyBsJGIoYixmYWxzZSxmYWxzZSxuZXcgVCRiKSkpLG5ldyB4JGIobnVsbCxhLGZhbHNlKSl9fVxuZnVuY3Rpb24gVWdjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2lmKGIuYy5sZW5ndGg9PTApe3JldHVybn1tbWIoKTtNbGIoYi5jLGIuYy5sZW5ndGgsbnVsbCk7ZT1uZXcgb2xiKGIpO2Q9QkQobWxiKGUpLDE0NSk7d2hpbGUoZS5hPGUuYy5jLmxlbmd0aCl7Yz1CRChtbGIoZSksMTQ1KTtpZihBRGIoZC5lLmMsYy5lLmMpJiYhKEREYihCNmMoZC5lKS5iLGMuZS5kKXx8RERiKEI2YyhjLmUpLmIsZC5lLmQpKSl7ZD0oR2tiKGQuayxjLmspLEdrYihkLmIsYy5iKSxHa2IoZC5jLGMuYykseWUoZC5pLGMuaSksR2tiKGQuZCxjLmQpLEdrYihkLmosYy5qKSxmPSR3bmQuTWF0aC5taW4oZC5lLmMsYy5lLmMpLGc9JHduZC5NYXRoLm1pbihkLmUuZCxjLmUuZCksaD0kd25kLk1hdGgubWF4KGQuZS5jK2QuZS5iLGMuZS5jK2MuZS5iKSxpPWgtZixqPSR3bmQuTWF0aC5tYXgoZC5lLmQrZC5lLmEsYy5lLmQrYy5lLmEpLGs9ai1nLEc2YyhkLmUsZixnLGksayksaEViKGQuZixjLmYpLCFkLmEmJihkLmE9Yy5hKSxHa2IoZC5nLGMuZyksRWtiKGQuZyxjKSxkKX1lbHNle1hnYyhhLGQpO2Q9Y319WGdjKGEsZCl9XG5mdW5jdGlvbiBlX2IoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2g9YS5qO2lmKGg9PShVY2QoKSxTY2QpJiZiIT0oZGNkKCksYmNkKSYmYiE9KGRjZCgpLGNjZCkpe2g9VyRiKGEsYyk7RzBiKGEsaCk7ISghYS5xPyhtbWIoKSxtbWIoKSxrbWIpOmEucSkuX2IoKE55YygpLFV4YykpJiZoIT1TY2QmJihhLm4uYSE9MHx8YS5uLmIhPTApJiZ5TmIoYSxVeGMsViRiKGEsaCkpfWlmKGI9PShkY2QoKSxfYmQpKXtqPTA7c3dpdGNoKGguZyl7Y2FzZSAxOmNhc2UgMzpmPWEuaS5vLmE7Zj4wJiYoaj1hLm4uYS9mKTticmVhaztjYXNlIDI6Y2FzZSA0OmU9YS5pLm8uYjtlPjAmJihqPWEubi5iL2UpO315TmIoYSwod3RjKCksaHRjKSxqKX1pPWEubztnPWEuYTtpZihkKXtnLmE9ZC5hO2cuYj1kLmI7YS5kPXRydWV9ZWxzZSBpZihiIT1iY2QmJmIhPWNjZCYmaCE9U2NkKXtzd2l0Y2goaC5nKXtjYXNlIDE6Zy5hPWkuYS8yO2JyZWFrO2Nhc2UgMjpnLmE9aS5hO2cuYj1pLmIvMjticmVhaztjYXNlIDM6Zy5hPWkuYS8yO2cuYj1pLmI7YnJlYWs7Y2FzZSA0OmcuYj1pLmIvMjt9fWVsc2V7Zy5hPWkuYS8yO2cuYj1pLmIvMn19XG5mdW5jdGlvbiB2d2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5laigpKXtrPWEuVmkoKTtpPWEuZmooKTtpZihrPjApe2I9bmV3IEF1ZChhLkdpKCkpO2M9aztmPWM8MTAwP251bGw6bmV3IEl4ZChjKTtDdmQoYSxjLGIuZyk7ZT1jPT0xP2EuWmkoNCxxdWQoYiwwKSxudWxsLDAsaSk6YS5aaSg2LGIsbnVsbCwtMSxpKTtpZihhLmJqKCkpe2ZvcihkPW5ldyBGeWQoYik7ZC5lIT1kLmkuZ2MoKTspe2Y9YS5kaihEeWQoZCksZil9aWYoIWYpe2EuJGkoZSl9ZWxzZXtmLkVpKGUpO2YuRmkoKX19ZWxzZXtpZighZil7YS4kaShlKX1lbHNle2YuRWkoZSk7Zi5GaSgpfX19ZWxzZXtDdmQoYSxhLlZpKCksYS5XaSgpKTthLiRpKGEuWmkoNiwobW1iKCksam1iKSxudWxsLC0xLGkpKX19ZWxzZSBpZihhLmJqKCkpe2s9YS5WaSgpO2lmKGs+MCl7aD1hLldpKCk7aj1rO0N2ZChhLGssaCk7Zj1qPDEwMD9udWxsOm5ldyBJeGQoaik7Zm9yKGQ9MDtkPGo7KytkKXtnPWhbZF07Zj1hLmRqKGcsZil9ISFmJiZmLkZpKCl9ZWxzZXtDdmQoYSxhLlZpKCksYS5XaSgpKX19ZWxzZXtDdmQoYSxhLlZpKCksYS5XaSgpKX19XG5mdW5jdGlvbiBMRWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47Zm9yKGg9bmV3IG9sYihiKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoaCksMjMzKTtmLmU9bnVsbDtmLmM9MH1pPW51bGw7Zm9yKGc9bmV3IG9sYihiKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMjMzKTtsPWYuZFswXTtpZihjJiZsLmshPShqMGIoKSxoMGIpKXtjb250aW51ZX1mb3Iobj1CRCh2TmIobCwod3RjKCksUXNjKSksMTUpLktjKCk7bi5PYigpOyl7bT1CRChuLlBiKCksMTApO2lmKCFjfHxtLms9PShqMGIoKSxoMGIpKXsoIWYuZSYmKGYuZT1uZXcgUmtiKSxmLmUpLkZjKGEuYlttLmMucF1bbS5wXSk7KythLmJbbS5jLnBdW20ucF0uY319aWYoIWMmJmwuaz09KGowYigpLGgwYikpe2lmKGkpe2ZvcihrPUJEKFFjKGEuZCxpKSwyMSkuS2MoKTtrLk9iKCk7KXtqPUJEKGsuUGIoKSwxMCk7Zm9yKGU9QkQoUWMoYS5kLGwpLDIxKS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDEwKTtZRWMoYS5iW2ouYy5wXVtqLnBdKS5GYyhhLmJbZC5jLnBdW2QucF0pOysrYS5iW2QuYy5wXVtkLnBdLmN9fX1pPWx9fX1cbmZ1bmN0aW9uIE9IYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztjPTA7az1uZXcgUmtiO2ZvcihoPW5ldyBvbGIoYik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDExKTtBSGMoYS5iLGEuZFtnLnBdKTtrLmM9S0MoU0ksVWhlLDEsMCw1LDEpO3N3aXRjaChnLmkuay5nKXtjYXNlIDA6ZD1CRCh2TmIoZywod3RjKCksZ3RjKSksMTApO0hrYihkLmosbmV3IHhJYyhrKSk7YnJlYWs7Y2FzZSAxOkN0YihLQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGcuaS5qLDE2KSksbmV3IHpJYyhnKSkpLG5ldyBDSWMoaykpO2JyZWFrO2Nhc2UgMzplPUJEKHZOYihnLCh3dGMoKSwkc2MpKSwxMSk7RWtiKGssbmV3IHZnZChlLG1lYihnLmUuYy5sZW5ndGgrZy5nLmMubGVuZ3RoKSkpO31mb3Ioaj1uZXcgb2xiKGspO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSw0Nik7Zj1hSWMoYSxCRChpLmEsMTEpKTtpZihmPmEuZFtnLnBdKXtjKz16SGMoYS5iLGYpKkJEKGkuYiwxOSkuYTtXamIoYS5hLG1lYihmKSl9fXdoaWxlKCFha2IoYS5hKSl7eEhjKGEuYixCRChma2IoYS5hKSwxOSkuYSl9fXJldHVybiBjfVxuZnVuY3Rpb24gZWVkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2w9bmV3IGc3YyhCRChoa2QoYSwoWDdjKCksUjdjKSksOCkpO2wuYT0kd25kLk1hdGgubWF4KGwuYS1jLmItYy5jLDApO2wuYj0kd25kLk1hdGgubWF4KGwuYi1jLmQtYy5hLDApO2U9RUQoaGtkKGEsTDdjKSk7KGU9PW51bGx8fCh1Q2IoZSksZSk8PTApJiYoZT0xLjMpO2g9bmV3IFJrYjtmb3Iobz1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO28uZSE9by5pLmdjKCk7KXtuPUJEKER5ZChvKSwzMyk7Zz1uZXcgeGVkKG4pO2guY1toLmMubGVuZ3RoXT1nfW09QkQoaGtkKGEsTTdjKSwzMTEpO3N3aXRjaChtLmcpe2Nhc2UgMzpxPWJlZChoLGIsbC5hLGwuYiwoaj1kLHVDYihlKSxlLGopKTticmVhaztjYXNlIDE6cT1hZWQoaCxiLGwuYSxsLmIsKGs9ZCx1Q2IoZSksZSxrKSk7YnJlYWs7ZGVmYXVsdDpxPWNlZChoLGIsbC5hLGwuYiwoaT1kLHVDYihlKSxlLGkpKTt9Zj1uZXcgd2VkKHEpO3A9ZmVkKGYsYixjLGwuYSxsLmIsZCwodUNiKGUpLGUpKTtBZmQoYSxwLmEscC5iLGZhbHNlLHRydWUpfVxuZnVuY3Rpb24gdmtjKGEsYil7dmFyIGMsZCxlLGY7Yz1iLmI7Zj1uZXcgVGtiKGMuaik7ZT0wO2Q9Yy5qO2QuYz1LQyhTSSxVaGUsMSwwLDUsMSk7aGtjKEJEKFNpKGEuYiwoVWNkKCksQWNkKSwoRmtjKCksRWtjKSksMTUpLGMpO2U9aWtjKGYsZSxuZXcgYmxjLGQpO2hrYyhCRChTaShhLmIsQWNkLERrYyksMTUpLGMpO2U9aWtjKGYsZSxuZXcgZGxjLGQpO2hrYyhCRChTaShhLmIsQWNkLENrYyksMTUpLGMpO2hrYyhCRChTaShhLmIsemNkLEVrYyksMTUpLGMpO2hrYyhCRChTaShhLmIsemNkLERrYyksMTUpLGMpO2U9aWtjKGYsZSxuZXcgZmxjLGQpO2hrYyhCRChTaShhLmIsemNkLENrYyksMTUpLGMpO2hrYyhCRChTaShhLmIsUmNkLEVrYyksMTUpLGMpO2U9aWtjKGYsZSxuZXcgaGxjLGQpO2hrYyhCRChTaShhLmIsUmNkLERrYyksMTUpLGMpO2U9aWtjKGYsZSxuZXcgamxjLGQpO2hrYyhCRChTaShhLmIsUmNkLENrYyksMTUpLGMpO2hrYyhCRChTaShhLmIsVGNkLEVrYyksMTUpLGMpO2U9aWtjKGYsZSxuZXcgUGtjLGQpO2hrYyhCRChTaShhLmIsVGNkLERrYyksMTUpLGMpO2hrYyhCRChTaShhLmIsVGNkLENrYyksMTUpLGMpfVxuZnVuY3Rpb24gbmJjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtPZGQoYiwnTGF5ZXIgc2l6ZSBjYWxjdWxhdGlvbicsMSk7az1QamU7aj1RamU7ZT1mYWxzZTtmb3IoaD1uZXcgb2xiKGEuYik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDI5KTtpPWcuYztpLmE9MDtpLmI9MDtpZihnLmEuYy5sZW5ndGg9PTApe2NvbnRpbnVlfWU9dHJ1ZTtmb3IobT1uZXcgb2xiKGcuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDEwKTtvPWwubztuPWwuZDtpLmE9JHduZC5NYXRoLm1heChpLmEsby5hK24uYituLmMpfWQ9QkQoSWtiKGcuYSwwKSwxMCk7cD1kLm4uYi1kLmQuZDtkLms9PShqMGIoKSxlMGIpJiYocC09QkQodk5iKGEsKE55YygpLHl5YykpLDE0MikuZCk7Zj1CRChJa2IoZy5hLGcuYS5jLmxlbmd0aC0xKSwxMCk7Yz1mLm4uYitmLm8uYitmLmQuYTtmLms9PWUwYiYmKGMrPUJEKHZOYihhLChOeWMoKSx5eWMpKSwxNDIpLmEpO2kuYj1jLXA7az0kd25kLk1hdGgubWluKGsscCk7aj0kd25kLk1hdGgubWF4KGosYyl9aWYoIWUpe2s9MDtqPTB9YS5mLmI9ai1rO2EuYy5iLT1rO1FkZChiKX1cbmZ1bmN0aW9uIGhfYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2Y9MDtnPTA7Zm9yKGo9bmV3IG9sYihhLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihqKSwxMCk7Zj0kd25kLk1hdGgubWF4KGYsaC5kLmIpO2c9JHduZC5NYXRoLm1heChnLGguZC5jKX1mb3IoaT1uZXcgb2xiKGEuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtjPUJEKHZOYihoLChOeWMoKSxtd2MpKSwyNDgpO3N3aXRjaChjLmcpe2Nhc2UgMTpvPTA7YnJlYWs7Y2FzZSAyOm89MTticmVhaztjYXNlIDU6bz0wLjU7YnJlYWs7ZGVmYXVsdDpkPTA7bD0wO2ZvcihuPW5ldyBvbGIoaC5qKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTEpO20uZS5jLmxlbmd0aD09MHx8KytkO20uZy5jLmxlbmd0aD09MHx8KytsfWQrbD09MD8obz0wLjUpOihvPWwvKGQrbCkpO31xPWEuYztrPWguby5hO3I9KHEuYS1rKSpvO28+MC41PyhyLT1nKjIqKG8tMC41KSk6bzwwLjUmJihyKz1mKjIqKDAuNS1vKSk7ZT1oLmQuYjtyPGUmJihyPWUpO3A9aC5kLmM7cj5xLmEtcC1rJiYocj1xLmEtcC1rKTtoLm4uYT1iK3J9fVxuZnVuY3Rpb24gY2VkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2g9S0MoVUQsVmplLDI1LGEuYy5sZW5ndGgsMTUsMSk7bT1uZXcgZ3ViKG5ldyBOZWQpO190YihtLGEpO2o9MDtwPW5ldyBSa2I7d2hpbGUobS5iLmMubGVuZ3RoIT0wKXtnPUJEKG0uYi5jLmxlbmd0aD09MD9udWxsOklrYihtLmIsMCksMTU3KTtpZihqPjEmJnJlZChnKSpxZWQoZykvMj5oWzBdKXtmPTA7d2hpbGUoZjxwLmMubGVuZ3RoLTEmJnJlZChnKSpxZWQoZykvMj5oW2ZdKXsrK2Z9bz1uZXcgSmliKHAsMCxmKzEpO2w9bmV3IHdlZChvKTtrPXJlZChnKS9xZWQoZyk7aT1mZWQobCxiLG5ldyBwMGIsYyxkLGUsayk7UDZjKFg2YyhsLmUpLGkpO3pDYihjdWIobSxsKSk7bj1uZXcgSmliKHAsZisxLHAuYy5sZW5ndGgpO190YihtLG4pO3AuYz1LQyhTSSxVaGUsMSwwLDUsMSk7aj0wO0RsYihoLGgubGVuZ3RoLDApfWVsc2V7cT1tLmIuYy5sZW5ndGg9PTA/bnVsbDpJa2IobS5iLDApO3EhPW51bGwmJmZ1YihtLDApO2o+MCYmKGhbal09aFtqLTFdKTtoW2pdKz1yZWQoZykqcWVkKGcpOysrajtwLmNbcC5jLmxlbmd0aF09Z319cmV0dXJuIHB9XG5mdW5jdGlvbiBXYWMoYSl7dmFyIGIsYyxkLGUsZjtkPUJEKHZOYihhLChOeWMoKSxteGMpKSwxNjMpO2lmKGQ9PShDdGMoKSx5dGMpKXtmb3IoYz1uZXcgU3IodXIoUl9iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksMTcpO2lmKCFZYWMoYikpe3Rocm93IHZiYihuZXcgeTJjKEZuZStQX2IoYSkrXCInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UuIFwiKydGSVJTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIGluY29taW5nIGVkZ2VzLicpKX19fWVsc2UgaWYoZD09QXRjKXtmb3IoZj1uZXcgU3IodXIoVV9iKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihmKTspe2U9QkQoUnIoZiksMTcpO2lmKCFZYWMoZSkpe3Rocm93IHZiYihuZXcgeTJjKEZuZStQX2IoYSkrXCInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZS4gXCIrJ0xBU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBvdXRnb2luZyBlZGdlcy4nKSl9fX19XG5mdW5jdGlvbiBDOWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztPZGQoYiwnTGFiZWwgZHVtbXkgcmVtb3ZhbCcsMSk7ZD1FZGIoRUQodk5iKGEsKE55YygpLG55YykpKSk7ZT1FZGIoRUQodk5iKGEscnljKSkpO2o9QkQodk5iKGEsTHdjKSwxMDMpO2ZvcihpPW5ldyBvbGIoYS5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMjkpO2w9bmV3IEJpYihoLmEsMCk7d2hpbGUobC5iPGwuZC5nYygpKXtrPShzQ2IobC5iPGwuZC5nYygpKSxCRChsLmQuWGIobC5jPWwuYisrKSwxMCkpO2lmKGsuaz09KGowYigpLGYwYikpe209QkQodk5iKGssKHd0YygpLCRzYykpLDE3KTtvPUVkYihFRCh2TmIobSxad2MpKSk7Zz1QRCh2TmIoayxTc2MpKT09PVBEKChyYmQoKSxvYmQpKTtjPW5ldyBnN2Moay5uKTtnJiYoYy5iKz1vK2QpO2Y9bmV3IGY3YyhrLm8uYSxrLm8uYi1vLWQpO249QkQodk5iKGssa3RjKSwxNSk7aj09KGVhZCgpLGRhZCl8fGo9PV85Yz9COWIobixjLGUsZixnLGopOkE5YihuLGMsZSxmKTtHa2IobS5iLG4pO3NiYyhrLFBEKHZOYihhLFN3YykpPT09UEQoKEFhZCgpLHhhZCkpKTt1aWIobCl9fX1RZGQoYil9XG5mdW5jdGlvbiB0WmIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2O2k9bmV3IFJrYjtmb3IoZj1uZXcgb2xiKGIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDEwKTtmb3IoaD1uZXcgb2xiKGUuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDExKTtrPW51bGw7Zm9yKHQ9a19iKGcuZyksdT0wLHY9dC5sZW5ndGg7dTx2OysrdSl7cz10W3VdO2lmKCFmX2Iocy5kLmksYykpe3I9b1piKGEsYixjLHMscy5jLChLQWMoKSxJQWMpLGspO3IhPWsmJihpLmNbaS5jLmxlbmd0aF09cix0cnVlKTtyLmMmJihrPXIpfX1qPW51bGw7Zm9yKG89a19iKGcuZSkscD0wLHE9by5sZW5ndGg7cDxxOysrcCl7bj1vW3BdO2lmKCFmX2Iobi5jLmksYykpe3I9b1piKGEsYixjLG4sbi5kLChLQWMoKSxIQWMpLGopO3IhPWomJihpLmNbaS5jLmxlbmd0aF09cix0cnVlKTtyLmMmJihqPXIpfX19fWZvcihtPW5ldyBvbGIoaSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDQ0MSk7SmtiKGIuYSxsLmEsMCkhPS0xfHxFa2IoYi5hLGwuYSk7bC5jJiYoZC5jW2QuYy5sZW5ndGhdPWwsdHJ1ZSl9fVxuZnVuY3Rpb24gakNjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO09kZChjLCdJbnRlcmFjdGl2ZSBjeWNsZSBicmVha2luZycsMSk7bD1uZXcgUmtiO2ZvcihuPW5ldyBvbGIoYi5hKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTApO20ucD0xO289VF9iKG0pLmE7Zm9yKGs9V19iKG0sKEtBYygpLElBYykpLktjKCk7ay5PYigpOyl7aj1CRChrLlBiKCksMTEpO2ZvcihmPW5ldyBvbGIoai5nKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMTcpO3A9ZC5kLmk7aWYocCE9bSl7cT1UX2IocCkuYTtxPG8mJihsLmNbbC5jLmxlbmd0aF09ZCx0cnVlKX19fX1mb3IoZz1uZXcgb2xiKGwpO2cuYTxnLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihnKSwxNyk7UFpiKGQsdHJ1ZSl9bC5jPUtDKFNJLFVoZSwxLDAsNSwxKTtmb3IoaT1uZXcgb2xiKGIuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtoLnA+MCYmaUNjKGEsaCxsKX1mb3IoZT1uZXcgb2xiKGwpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7UFpiKGQsdHJ1ZSl9bC5jPUtDKFNJLFVoZSwxLDAsNSwxKTtRZGQoYyl9XG5mdW5jdGlvbiBfeihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztqPScnO2lmKGIubGVuZ3RoPT0wKXtyZXR1cm4gYS5kZShaaWUsWGllLC0xLC0xKX1rPXVmYihiKTtkZmIoay5zdWJzdHIoMCwzKSwnYXQgJykmJihrPWsuc3Vic3RyKDMpKTtrPWsucmVwbGFjZSgvXFxbLio/XFxdL2csJycpO2c9ay5pbmRleE9mKCcoJyk7aWYoZz09LTEpe2c9ay5pbmRleE9mKCdAJyk7aWYoZz09LTEpe2o9aztrPScnfWVsc2V7aj11ZmIoay5zdWJzdHIoZysxKSk7az11ZmIoay5zdWJzdHIoMCxnKSl9fWVsc2V7Yz1rLmluZGV4T2YoJyknLGcpO2o9ay5zdWJzdHIoZysxLGMtKGcrMSkpO2s9dWZiKGsuc3Vic3RyKDAsZykpfWc9aGZiKGssd2ZiKDQ2KSk7ZyE9LTEmJihrPWsuc3Vic3RyKGcrMSkpOyhrLmxlbmd0aD09MHx8ZGZiKGssJ0Fub255bW91cyBmdW5jdGlvbicpKSYmKGs9WGllKTtoPWtmYihqLHdmYig1OCkpO2U9bGZiKGosd2ZiKDU4KSxoLTEpO2k9LTE7ZD0tMTtmPVppZTtpZihoIT0tMSYmZSE9LTEpe2Y9ai5zdWJzdHIoMCxlKTtpPVZ6KGouc3Vic3RyKGUrMSxoLShlKzEpKSk7ZD1WeihqLnN1YnN0cihoKzEpKX1yZXR1cm4gYS5kZShmLGssaSxkKX1cbmZ1bmN0aW9uIFVDKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoYi5sPT0wJiZiLm09PTAmJmIuaD09MCl7dGhyb3cgdmJiKG5ldyBvY2IoJ2RpdmlkZSBieSB6ZXJvJykpfWlmKGEubD09MCYmYS5tPT0wJiZhLmg9PTApe2MmJihRQz1UQygwLDAsMCkpO3JldHVybiBUQygwLDAsMCl9aWYoYi5oPT1HamUmJmIubT09MCYmYi5sPT0wKXtyZXR1cm4gVkMoYSxjKX1pPWZhbHNlO2lmKGIuaD4+MTkhPTApe2I9aEQoYik7aT0haX1nPV9DKGIpO2Y9ZmFsc2U7ZT1mYWxzZTtkPWZhbHNlO2lmKGEuaD09R2plJiZhLm09PTAmJmEubD09MCl7ZT10cnVlO2Y9dHJ1ZTtpZihnPT0tMSl7YT1TQygod0QoKSxzRCkpO2Q9dHJ1ZTtpPSFpfWVsc2V7aD1sRChhLGcpO2kmJlpDKGgpO2MmJihRQz1UQygwLDAsMCkpO3JldHVybiBofX1lbHNlIGlmKGEuaD4+MTkhPTApe2Y9dHJ1ZTthPWhEKGEpO2Q9dHJ1ZTtpPSFpfWlmKGchPS0xKXtyZXR1cm4gV0MoYSxnLGksZixjKX1pZihlRChhLGIpPDApe2MmJihmPyhRQz1oRChhKSk6KFFDPVRDKGEubCxhLm0sYS5oKSkpO3JldHVybiBUQygwLDAsMCl9cmV0dXJuIFhDKGQ/YTpUQyhhLmwsYS5tLGEuaCksYixpLGYsZSxjKX1cbmZ1bmN0aW9uIEYyYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2lmKGEuZSYmYS5jLmM8YS5mKXt0aHJvdyB2YmIobmV3IFpkYignRXhwZWN0ZWQgJythLmYrJyBwaGFzZXMgdG8gYmUgY29uZmlndXJlZDsgJysnb25seSBmb3VuZCAnK2EuYy5jKSl9az1CRChnZGIoYS5nKSw5KTtuPVB1KGEuZik7Zm9yKGY9ayxoPTAsaj1mLmxlbmd0aDtoPGo7KytoKXtkPWZbaF07bD1CRChCMmMoYSxkLmcpLDI0Nik7bD9Fa2IobixCRChJMmMoYSxsKSwxMjMpKToobi5jW24uYy5sZW5ndGhdPW51bGwsdHJ1ZSl9bz1uZXcgajNjO01BYihKQWIoTkFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihuLDE2KSksbmV3IE8yYyksbmV3IFEyYyhiKSksbmV3IFMyYyksbmV3IFUyYyhvKSk7ZDNjKG8sYS5hKTtjPW5ldyBSa2I7Zm9yKGU9ayxnPTAsaT1lLmxlbmd0aDtnPGk7KytnKXtkPWVbZ107R2tiKGMsSjJjKGEsRHgoQkQoQjJjKG8sZC5nKSwyMCkpKSk7bT1CRChJa2IobixkLmcpLDEyMyk7ISFtJiYoYy5jW2MuYy5sZW5ndGhdPW0sdHJ1ZSl9R2tiKGMsSjJjKGEsRHgoQkQoQjJjKG8sa1trLmxlbmd0aC0xXS5nKzEpLDIwKSkpKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHFDYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtPZGQoYywnTW9kZWwgb3JkZXIgY3ljbGUgYnJlYWtpbmcnLDEpO2EuYT0wO2EuYj0wO249bmV3IFJrYjtrPWIuYS5jLmxlbmd0aDtmb3Ioaj1uZXcgb2xiKGIuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDEwKTt3TmIoaSwod3RjKCksWnNjKSkmJihrPSR3bmQuTWF0aC5tYXgoayxCRCh2TmIoaSxac2MpLDE5KS5hKzEpKX1mb3IocD1uZXcgb2xiKGIuYSk7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDEwKTtnPXBDYyhhLG8sayk7Zm9yKG09V19iKG8sKEtBYygpLElBYykpLktjKCk7bS5PYigpOyl7bD1CRChtLlBiKCksMTEpO2ZvcihmPW5ldyBvbGIobC5nKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMTcpO3E9ZC5kLmk7aD1wQ2MoYSxxLGspO2g8ZyYmKG4uY1tuLmMubGVuZ3RoXT1kLHRydWUpfX19Zm9yKGU9bmV3IG9sYihuKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTcpO1BaYihkLHRydWUpO3lOYihiLCh3dGMoKSxBc2MpLChCY2IoKSx0cnVlKSl9bi5jPUtDKFNJLFVoZSwxLDAsNSwxKTtRZGQoYyl9XG5mdW5jdGlvbiBrUWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhLmc+Yi5mfHxiLmc+YS5mKXtyZXR1cm59Yz0wO2Q9MDtmb3IoZz1hLncuYS5lYygpLktjKCk7Zy5PYigpOyl7ZT1CRChnLlBiKCksMTEpO2FSYyhsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLGIuZyxiLmYpJiYrK2N9Zm9yKGg9YS5yLmEuZWMoKS5LYygpO2guT2IoKTspe2U9QkQoaC5QYigpLDExKTthUmMobDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2UuaS5uLGUubixlLmFdKSkuYixiLmcsYi5mKSYmLS1jfWZvcihpPWIudy5hLmVjKCkuS2MoKTtpLk9iKCk7KXtlPUJEKGkuUGIoKSwxMSk7YVJjKGw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtlLmkubixlLm4sZS5hXSkpLmIsYS5nLGEuZikmJisrZH1mb3IoZj1iLnIuYS5lYygpLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksMTEpO2FSYyhsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLGEuZyxhLmYpJiYtLWR9aWYoYzxkKXtuZXcgQlFjKGEsYixkLWMpfWVsc2UgaWYoZDxjKXtuZXcgQlFjKGIsYSxjLWQpfWVsc2V7bmV3IEJRYyhiLGEsMCk7bmV3IEJRYyhhLGIsMCl9fVxuZnVuY3Rpb24gSlBiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscztqPWIuYztlPUlPYihhLmUpO2w9WTZjKGI3YyhSNmMoSE9iKGEuZSkpLGEuZCphLmEsYS5jKmEuYiksLTAuNSk7Yz1lLmEtbC5hO2Q9ZS5iLWwuYjtnPWIuYTtjPWcuYy1jO2Q9Zy5kLWQ7Zm9yKGk9bmV3IG9sYihqKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMzk1KTttPWguYjtuPWMrbS5hO3E9ZCttLmI7bz1RRChuL2EuYSk7cj1RRChxL2EuYik7Zj1oLmE7c3dpdGNoKGYuZyl7Y2FzZSAwOms9KFJNYigpLE9NYik7YnJlYWs7Y2FzZSAxOms9KFJNYigpLE5NYik7YnJlYWs7Y2FzZSAyOms9KFJNYigpLFBNYik7YnJlYWs7ZGVmYXVsdDprPShSTWIoKSxRTWIpO31pZihmLmEpe3M9UUQoKHEraC5jKS9hLmIpO0VrYihhLmYsbmV3IHVPYihrLG1lYihyKSxtZWIocykpKTtmPT0oUk9iKCksUU9iKT9uTmIoYSwwLHIsbyxzKTpuTmIoYSxvLHIsYS5kLTEscyl9ZWxzZXtwPVFEKChuK2guYykvYS5hKTtFa2IoYS5mLG5ldyB1T2IoayxtZWIobyksbWViKHApKSk7Zj09KFJPYigpLE9PYik/bk5iKGEsbywwLHAscik6bk5iKGEsbyxyLHAsYS5jLTEpfX19XG5mdW5jdGlvbiBjb2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTttPW5ldyBSa2I7ZT1uZXcgUmtiO3A9bnVsbDtmb3IoaD1iLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTkpO2Y9bmV3IHFvYyhnLmEpO2UuY1tlLmMubGVuZ3RoXT1mO2lmKHApe2YuZD1wO3AuZT1mfXA9Zn10PWJvYyhhKTtmb3Ioaz0wO2s8ZS5jLmxlbmd0aDsrK2spe249bnVsbDtxPXBvYygodENiKDAsZS5jLmxlbmd0aCksQkQoZS5jWzBdLDY1MikpKTtjPW51bGw7ZD1QamU7Zm9yKGw9MTtsPGEuYi5jLmxlbmd0aDsrK2wpe3I9cT8kd25kLk1hdGguYWJzKHEuYi1sKTokd25kLk1hdGguYWJzKGwtbi5iKSsxO289bj8kd25kLk1hdGguYWJzKGwtbi5iKTpyKzE7aWYobzxyKXtqPW47aT1vfWVsc2V7aj1xO2k9cn1zPSh1PUVkYihFRCh2TmIoYSwoTnljKCksSHljKSkpKSx0W2xdKyR3bmQuTWF0aC5wb3coaSx1KSk7aWYoczxkKXtkPXM7Yz1qO2MuYz1sfWlmKCEhcSYmbD09cS5iKXtuPXE7cT1rb2MocSl9fWlmKGMpe0VrYihtLG1lYihjLmMpKTtjLmE9dHJ1ZTtsb2MoYyl9fW1tYigpO01sYihtLmMsbS5jLmxlbmd0aCxudWxsKTtyZXR1cm4gbX1cbmZ1bmN0aW9uIHFOZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztiPW5ldyB6TmQ7Yz1uZXcgek5kO2o9ZGZiKFF2ZSwoZT1EbWQoYS5iLFJ2ZSksIWU/bnVsbDpHRChBQWQoKCFlLmImJihlLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4NixlKSksZS5iKSxTdmUpKSkpO2ZvcihpPTA7aTxhLmk7KytpKXtoPUJEKGEuZ1tpXSwxNzApO2lmKEpEKGgsOTkpKXtnPUJEKGgsMTgpOyhnLkJiJm90ZSkhPTA/KChnLkJiJm9pZSk9PTB8fCFqJiYoZj1EbWQoZyxSdmUpLCghZj9udWxsOkdEKEFBZCgoIWYuYiYmKGYuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LGYpKSxmLmIpLGV1ZSkpKT09bnVsbCkpJiZ3dGQoYixnKTooaz16VWQoZyksISFrJiYoay5CYiZvdGUpIT0wfHwoKGcuQmImb2llKT09MHx8IWomJihkPURtZChnLFJ2ZSksKCFkP251bGw6R0QoQUFkKCghZC5iJiYoZC5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsZCkpLGQuYiksZXVlKSkpPT1udWxsKSkmJnd0ZChjLGcpKX1lbHNle1E2ZCgpO2lmKEJEKGgsNjYpLk9qKCkpe2lmKCFoLkpqKCkpe3d0ZChiLGgpO3d0ZChjLGgpfX19fXZ1ZChiKTt2dWQoYyk7YS5hPUJEKGIuZywyNDcpO0JEKGMuZywyNDcpfVxuZnVuY3Rpb24gTFRiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7aj1JVGIoYik7cT1CRCh2TmIoYiwoTnljKCksSXdjKSksMzE0KTtxIT0oUnBjKCksUHBjKSYmcmViKGosbmV3IFNUYik7cj1CRCh2TmIoYixDd2MpLDI5Mik7cmViKGosbmV3IFVUYihyKSk7cD0wO2s9bmV3IFJrYjtmb3IoZj1uZXcgeGtiKGopO2YuYSE9Zi5iOyl7ZT1CRCh2a2IoZiksMzcpO2FVYihhLmMsZSk7bT1CRCh2TmIoZSwod3RjKCksaXRjKSksMTUpO3ArPW0uZ2MoKTtkPW0uS2MoKTtFa2IoayxuZXcgdmdkKGUsZCkpfU9kZChjLCdSZWN1cnNpdmUgaGllcmFyY2hpY2FsIGxheW91dCcscCk7bz0wO249QkQoQkQoSWtiKGssay5jLmxlbmd0aC0xKSw0NikuYiw0Nyk7d2hpbGUobi5PYigpKXtmb3IoaT1uZXcgb2xiKGspO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSw0Nik7bT1CRChoLmIsNDcpO2c9QkQoaC5hLDM3KTt3aGlsZShtLk9iKCkpe2w9QkQobS5QYigpLDUxKTtpZihKRChsLDUwNykpe2lmKCFnLmUpe2wucGYoZyxVZGQoYywxKSk7KytvO2JyZWFrfWVsc2V7YnJlYWt9fWVsc2V7bC5wZihnLFVkZChjLDEpKTsrK299fX19UWRkKGMpfVxuZnVuY3Rpb24gcmlkKGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07aj1jLmxlbmd0aC0xO2k9KEJDYihqLGMubGVuZ3RoKSxjLmNoYXJDb2RlQXQoaikpO2lmKGk9PTkzKXtoPWhmYihjLHdmYig5MSkpO2lmKGg+PTApe2Y9d2lkKGIsYy5zdWJzdHIoMSxoLTEpKTtsPWMuc3Vic3RyKGgrMSxqLShoKzEpKTtyZXR1cm4gcGlkKGIsbCxmKX19ZWxzZXtkPS0xO1ZjYj09bnVsbCYmKFZjYj1uZXcgUmVnRXhwKCdcXFxcZCcpKTtpZihWY2IudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKSl7ZD1sZmIoYyx3ZmIoNDYpLGotMSk7aWYoZD49MCl7ZT1CRChoaWQoYixCaWQoYixjLnN1YnN0cigxLGQtMSkpLGZhbHNlKSw1OCk7az0wO3RyeXtrPUljYihjLnN1YnN0cihkKzEpLFJpZSxPaGUpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTI3KSl7Zz1hO3Rocm93IHZiYihuZXcgckZkKGcpKX1lbHNlIHRocm93IHZiYihhKX1pZihrPGUuZ2MoKSl7bT1lLlhiKGspO0pEKG0sNzIpJiYobT1CRChtLDcyKS5kZCgpKTtyZXR1cm4gQkQobSw1Nil9fX1pZihkPDApe3JldHVybiBCRChoaWQoYixCaWQoYixjLnN1YnN0cigxKSksZmFsc2UpLDU2KX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBlMWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtpZihiTGQoYixjKT49MCl7cmV0dXJuIGN9c3dpdGNoKCQxZChxMWQoYSxjKSkpe2Nhc2UgMjp7aWYoZGZiKCcnLG8xZChhLGMuSGooKSkubmUoKSkpe2k9YjJkKHExZChhLGMpKTtoPWEyZChxMWQoYSxjKSk7az1yMWQoYSxiLGksaCk7aWYoayl7cmV0dXJuIGt9ZT1mMWQoYSxiKTtmb3IoZz0wLGw9ZS5nYygpO2c8bDsrK2cpe2s9QkQoZS5YYihnKSwxNzApO2lmKHgxZChjMmQocTFkKGEsaykpLGkpKXtyZXR1cm4ga319fXJldHVybiBudWxsfWNhc2UgNDp7aWYoZGZiKCcnLG8xZChhLGMuSGooKSkubmUoKSkpe2ZvcihkPWM7ZDtkPVoxZChxMWQoYSxkKSkpe2o9YjJkKHExZChhLGQpKTtoPWEyZChxMWQoYSxkKSk7az1zMWQoYSxiLGosaCk7aWYoayl7cmV0dXJuIGt9fWk9YjJkKHExZChhLGMpKTtpZihkZmIoRXdlLGkpKXtyZXR1cm4gdDFkKGEsYil9ZWxzZXtmPWcxZChhLGIpO2ZvcihnPTAsbD1mLmdjKCk7ZzxsOysrZyl7az1CRChmLlhiKGcpLDE3MCk7aWYoeDFkKGMyZChxMWQoYSxrKSksaSkpe3JldHVybiBrfX19fXJldHVybiBudWxsfWRlZmF1bHQ6e3JldHVybiBudWxsfX19XG5mdW5jdGlvbiB0MmQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aWYoYy5nYygpPT0wKXtyZXR1cm4gZmFsc2V9aD0oUTZkKCksQkQoYiw2NikuT2ooKSk7Zj1oP2M6bmV3IHp1ZChjLmdjKCkpO2lmKFQ2ZChhLmUsYikpe2lmKGIuaGkoKSl7Zm9yKGo9Yy5LYygpO2ouT2IoKTspe2k9ai5QYigpO2lmKCFGMmQoYSxiLGksSkQoYiw5OSkmJihCRChiLDE4KS5CYiZUamUpIT0wKSl7ZT1SNmQoYixpKTtmLkhjKGUpfHxmLkZjKGUpfX19ZWxzZSBpZighaCl7Zm9yKGo9Yy5LYygpO2ouT2IoKTspe2k9ai5QYigpO2U9UjZkKGIsaSk7Zi5GYyhlKX19fWVsc2V7aWYoYy5nYygpPjEpe3Rocm93IHZiYihuZXcgV2RiKEh3ZSkpfWs9UzZkKGEuZS5UZygpLGIpO2Q9QkQoYS5nLDExOSk7Zm9yKGc9MDtnPGEuaTsrK2cpe2U9ZFtnXTtpZihrLnJsKGUuYWsoKSkpe2lmKGMuSGMoaD9lOmUuZGQoKSkpe3JldHVybiBmYWxzZX1lbHNle2ZvcihqPWMuS2MoKTtqLk9iKCk7KXtpPWouUGIoKTtCRChHdGQoYSxnLGg/QkQoaSw3Mik6UjZkKGIsaSkpLDcyKX1yZXR1cm4gdHJ1ZX19fWlmKCFoKXtlPVI2ZChiLGMuS2MoKS5QYigpKTtmLkZjKGUpfX1yZXR1cm4geXRkKGEsZil9XG5mdW5jdGlvbiBxTWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7az1uZXcgUHNiO2ZvcihoPShqPShuZXcgJGliKGEuYykpLmEudmMoKS5LYygpLG5ldyBkamIoaikpO2guYS5PYigpOyl7Zj0oZT1CRChoLmEuUGIoKSw0MiksQkQoZS5kZCgpLDQ1OCkpO2YuYj09MCYmKEdzYihrLGYsay5jLmIsay5jKSx0cnVlKX13aGlsZShrLmIhPTApe2Y9QkQoay5iPT0wP251bGw6KHNDYihrLmIhPTApLE5zYihrLGsuYS5hKSksNDU4KTtmLmE9PW51bGwmJihmLmE9MCk7Zm9yKGQ9bmV3IG9sYihmLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSw2NTQpO2MuYi5hPT1udWxsPyhjLmIuYT1FZGIoZi5hKStjLmEpOmIubz09KGVNYygpLGNNYyk/KGMuYi5hPSR3bmQuTWF0aC5taW4oRWRiKGMuYi5hKSxFZGIoZi5hKStjLmEpKTooYy5iLmE9JHduZC5NYXRoLm1heChFZGIoYy5iLmEpLEVkYihmLmEpK2MuYSkpOy0tYy5iLmI7Yy5iLmI9PTAmJkRzYihrLGMuYil9fWZvcihnPShpPShuZXcgJGliKGEuYykpLmEudmMoKS5LYygpLG5ldyBkamIoaSkpO2cuYS5PYigpOyl7Zj0oZT1CRChnLmEuUGIoKSw0MiksQkQoZS5kZCgpLDQ1OCkpO2IuaVtmLmMucF09Zi5hfX1cbmZ1bmN0aW9uIG1UYygpe21UYz1jY2I7ZFRjPW5ldyBMc2QoSW1lKTtuZXcgTHNkKEptZSk7bmV3IE1zZCgnREVQVEgnLG1lYigwKSk7WlNjPW5ldyBNc2QoJ0ZBTicsbWViKDApKTtYU2M9bmV3IE1zZChZcWUsbWViKDApKTtqVGM9bmV3IE1zZCgnUk9PVCcsKEJjYigpLGZhbHNlKSk7X1NjPW5ldyBNc2QoJ0xFRlRORUlHSEJPUicsbnVsbCk7aFRjPW5ldyBNc2QoJ1JJR0hUTkVJR0hCT1InLG51bGwpO2FUYz1uZXcgTXNkKCdMRUZUU0lCTElORycsbnVsbCk7aVRjPW5ldyBNc2QoJ1JJR0hUU0lCTElORycsbnVsbCk7WVNjPW5ldyBNc2QoJ0RVTU1ZJyxmYWxzZSk7bmV3IE1zZCgnTEVWRUwnLG1lYigwKSk7Z1RjPW5ldyBNc2QoJ1JFTU9WQUJMRV9FREdFUycsbmV3IFBzYik7a1RjPW5ldyBNc2QoJ1hDT09SJyxtZWIoMCkpO2xUYz1uZXcgTXNkKCdZQ09PUicsbWViKDApKTtiVGM9bmV3IE1zZCgnTEVWRUxIRUlHSFQnLDApOyRTYz1uZXcgTXNkKCdJRCcsJycpO2VUYz1uZXcgTXNkKCdQT1NJVElPTicsbWViKDApKTtmVGM9bmV3IE1zZCgnUFJFTElNJywwKTtjVGM9bmV3IE1zZCgnTU9ESUZJRVInLDApO1dTYz1uZXcgTHNkKEttZSk7VlNjPW5ldyBMc2QoTG1lKX1cbmZ1bmN0aW9uIE1OYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvO2s9YytiLmMuYy5hO2ZvcihuPW5ldyBvbGIoYi5qKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTEpO2U9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW20uaS5uLG0ubixtLmFdKSk7aWYoYi5rPT0oajBiKCksaTBiKSl7aD1CRCh2TmIobSwod3RjKCksJHNjKSksMTEpO2UuYT1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbaC5pLm4saC5uLGguYV0pKS5hO2Iubi5hPWUuYX1nPW5ldyBmN2MoMCxlLmIpO2lmKG0uaj09KFVjZCgpLHpjZCkpe2cuYT1rfWVsc2UgaWYobS5qPT1UY2Qpe2cuYT1jfWVsc2V7Y29udGludWV9bz0kd25kLk1hdGguYWJzKGUuYS1nLmEpO2lmKG88PWQmJiFKTmMoYikpe2NvbnRpbnVlfWY9bS5nLmMubGVuZ3RoK20uZS5jLmxlbmd0aD4xO2ZvcihqPW5ldyBiMWIobS5iKTtsbGIoai5hKXx8bGxiKGouYik7KXtpPUJEKGxsYihqLmEpP21sYihqLmEpOm1sYihqLmIpLDE3KTtsPWkuYz09bT9pLmQ6aS5jOyR3bmQuTWF0aC5hYnMobDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2wuaS5uLGwubixsLmFdKSkuYi1nLmIpPjEmJkdOYyhhLGksZyxmLG0pfX19XG5mdW5jdGlvbiBYUGMoYSl7dmFyIGIsYyxkLGUsZixnO2U9bmV3IEJpYihhLmUsMCk7ZD1uZXcgQmliKGEuYSwwKTtpZihhLmQpe2ZvcihjPTA7YzxhLmI7YysrKXtzQ2IoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKX19ZWxzZXtmb3IoYz0wO2M8YS5iLTE7YysrKXtzQ2IoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKTt1aWIoZSl9fWI9RWRiKChzQ2IoZS5iPGUuZC5nYygpKSxFRChlLmQuWGIoZS5jPWUuYisrKSkpKTt3aGlsZShhLmYtYj5PcWUpe2Y9YjtnPTA7d2hpbGUoJHduZC5NYXRoLmFicyhiLWYpPE9xZSl7KytnO2I9RWRiKChzQ2IoZS5iPGUuZC5nYygpKSxFRChlLmQuWGIoZS5jPWUuYisrKSkpKTtzQ2IoZC5iPGQuZC5nYygpKTtkLmQuWGIoZC5jPWQuYisrKX1pZihnPGEuYil7c0NiKGUuYj4wKTtlLmEuWGIoZS5jPS0tZS5iKTtXUGMoYSxhLmItZyxmLGQsZSk7c0NiKGUuYjxlLmQuZ2MoKSk7ZS5kLlhiKGUuYz1lLmIrKyl9c0NiKGQuYj4wKTtkLmEuWGIoZC5jPS0tZC5iKX1pZighYS5kKXtmb3IoYz0wO2M8YS5iLTE7YysrKXtzQ2IoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKTt1aWIoZSl9fWEuZD10cnVlO2EuYz10cnVlfVxuZnVuY3Rpb24gUThkKCl7UThkPWNjYjtzOGQ9KHI4ZCgpLHE4ZCkuYjt2OGQ9QkQocXVkKFpLZChxOGQuYiksMCksMzQpO3Q4ZD1CRChxdWQoWktkKHE4ZC5iKSwxKSwzNCk7dThkPUJEKHF1ZChaS2QocThkLmIpLDIpLDM0KTtGOGQ9cThkLmJiO0JEKHF1ZChaS2QocThkLmJiKSwwKSwzNCk7QkQocXVkKFpLZChxOGQuYmIpLDEpLDM0KTtIOGQ9cThkLmZiO0k4ZD1CRChxdWQoWktkKHE4ZC5mYiksMCksMzQpO0JEKHF1ZChaS2QocThkLmZiKSwxKSwzNCk7QkQocXVkKFpLZChxOGQuZmIpLDIpLDE4KTtLOGQ9cThkLnFiO044ZD1CRChxdWQoWktkKHE4ZC5xYiksMCksMzQpO0JEKHF1ZChaS2QocThkLnFiKSwxKSwxOCk7QkQocXVkKFpLZChxOGQucWIpLDIpLDE4KTtMOGQ9QkQocXVkKFpLZChxOGQucWIpLDMpLDM0KTtNOGQ9QkQocXVkKFpLZChxOGQucWIpLDQpLDM0KTtQOGQ9QkQocXVkKFpLZChxOGQucWIpLDYpLDM0KTtPOGQ9QkQocXVkKFpLZChxOGQucWIpLDUpLDE4KTt3OGQ9cThkLmo7eDhkPXE4ZC5rO3k4ZD1xOGQucTt6OGQ9cThkLnc7QThkPXE4ZC5CO0I4ZD1xOGQuQTtDOGQ9cThkLkM7RDhkPXE4ZC5EO0U4ZD1xOGQuXztHOGQ9cThkLmNiO0o4ZD1xOGQuaGJ9XG5mdW5jdGlvbiAkRGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47YS5jPTA7YS5iPTA7ZD0yKmIuYy5hLmMubGVuZ3RoKzE7bzpmb3IobD1jLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMTEpO2g9ay5qPT0oVWNkKCksQWNkKXx8ay5qPT1SY2Q7bj0wO2lmKGgpe209QkQodk5iKGssKHd0YygpLGd0YykpLDEwKTtpZighbSl7Y29udGludWV9bis9VkRjKGEsZCxrLG0pfWVsc2V7Zm9yKGo9bmV3IG9sYihrLmcpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxNyk7ZT1pLmQ7aWYoZS5pLmM9PWIuYyl7RWtiKGEuYSxrKTtjb250aW51ZSBvfWVsc2V7bis9YS5nW2UucF19fWZvcihnPW5ldyBvbGIoay5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTcpO2U9Zi5jO2lmKGUuaS5jPT1iLmMpe0VrYihhLmEsayk7Y29udGludWUgb31lbHNle24tPWEuZ1tlLnBdfX19aWYoay5lLmMubGVuZ3RoK2suZy5jLmxlbmd0aD4wKXthLmZbay5wXT1uLyhrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoKTthLmM9JHduZC5NYXRoLm1pbihhLmMsYS5mW2sucF0pO2EuYj0kd25kLk1hdGgubWF4KGEuYixhLmZbay5wXSl9ZWxzZSBoJiYoYS5mW2sucF09bil9fVxuZnVuY3Rpb24gJDlkKGEpe2EuYj1udWxsO2EuYmI9bnVsbDthLmZiPW51bGw7YS5xYj1udWxsO2EuYT1udWxsO2EuYz1udWxsO2EuZD1udWxsO2EuZT1udWxsO2EuZj1udWxsO2Eubj1udWxsO2EuTT1udWxsO2EuTD1udWxsO2EuUT1udWxsO2EuUj1udWxsO2EuSz1udWxsO2EuZGI9bnVsbDthLmViPW51bGw7YS5nPW51bGw7YS5pPW51bGw7YS5qPW51bGw7YS5rPW51bGw7YS5nYj1udWxsO2Eubz1udWxsO2EucD1udWxsO2EucT1udWxsO2Eucj1udWxsO2EuJD1udWxsO2EuaWI9bnVsbDthLlM9bnVsbDthLlQ9bnVsbDthLnQ9bnVsbDthLnM9bnVsbDthLnU9bnVsbDthLnY9bnVsbDthLnc9bnVsbDthLkI9bnVsbDthLkE9bnVsbDthLkM9bnVsbDthLkQ9bnVsbDthLkY9bnVsbDthLkc9bnVsbDthLkg9bnVsbDthLkk9bnVsbDthLko9bnVsbDthLlA9bnVsbDthLlo9bnVsbDthLlU9bnVsbDthLlY9bnVsbDthLlc9bnVsbDthLlg9bnVsbDthLlk9bnVsbDthLl89bnVsbDthLmFiPW51bGw7YS5jYj1udWxsO2EuaGI9bnVsbDthLm5iPW51bGw7YS5sYj1udWxsO2EubWI9bnVsbDthLm9iPW51bGw7YS5wYj1udWxsO2EuamI9bnVsbDthLmtiPW51bGw7YS5OPWZhbHNlO2EuTz1mYWxzZX1cbmZ1bmN0aW9uIGw1YihhLGIsYyl7dmFyIGQsZSxmLGc7T2RkKGMsJ0dyYXBoIHRyYW5zZm9ybWF0aW9uICgnK2EuYSsnKScsMSk7Zz1NdShiLmEpO2ZvcihmPW5ldyBvbGIoYi5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMjkpO0drYihnLGUuYSl9ZD1CRCh2TmIoYiwoTnljKCksTXdjKSksNDE5KTtpZihkPT0oeHFjKCksdnFjKSl7c3dpdGNoKEJEKHZOYihiLEx3YyksMTAzKS5nKXtjYXNlIDI6XzRiKGIsZyk7YnJlYWs7Y2FzZSAzOnA1YihiLGcpO2JyZWFrO2Nhc2UgNDppZihhLmE9PSh5NWIoKSx4NWIpKXtwNWIoYixnKTthNWIoYixnKX1lbHNle2E1YihiLGcpO3A1YihiLGcpfX19ZWxzZXtpZihhLmE9PSh5NWIoKSx4NWIpKXtzd2l0Y2goQkQodk5iKGIsTHdjKSwxMDMpLmcpe2Nhc2UgMjpfNGIoYixnKTthNWIoYixnKTticmVhaztjYXNlIDM6cDViKGIsZyk7XzRiKGIsZyk7YnJlYWs7Y2FzZSA0Ol80YihiLGcpO3A1YihiLGcpO319ZWxzZXtzd2l0Y2goQkQodk5iKGIsTHdjKSwxMDMpLmcpe2Nhc2UgMjpfNGIoYixnKTthNWIoYixnKTticmVhaztjYXNlIDM6XzRiKGIsZyk7cDViKGIsZyk7YnJlYWs7Y2FzZSA0OnA1YihiLGcpO180YihiLGcpO319fVFkZChjKX1cbmZ1bmN0aW9uIGo2YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aj1uZXcgenNiO2s9bmV3IHpzYjtvPW5ldyB6c2I7cD1uZXcgenNiO2k9RWRiKEVEKHZOYihiLChOeWMoKSx2eWMpKSkpO2Y9RWRiKEVEKHZOYihiLGx5YykpKTtmb3IoaD1uZXcgb2xiKGMpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMCk7bD1CRCh2TmIoZywod3RjKCksSHNjKSksNjEpO2lmKGw9PShVY2QoKSxBY2QpKXtrLmEuemMoZyxrKTtmb3IoZT1uZXcgU3IodXIoUl9iKGcpLmEuS2MoKSxuZXcgU3EpKTtRcihlKTspe2Q9QkQoUnIoZSksMTcpO1FxYihqLGQuYy5pKX19ZWxzZSBpZihsPT1SY2Qpe3AuYS56YyhnLHApO2ZvcihlPW5ldyBTcih1cihSX2IoZykuYS5LYygpLG5ldyBTcSkpO1FyKGUpOyl7ZD1CRChScihlKSwxNyk7UXFiKG8sZC5jLmkpfX19aWYoai5hLmdjKCkhPTApe209bmV3IHRQYygyLGYpO249c1BjKG0sYixqLGssLWktYi5jLmIpO2lmKG4+MCl7YS5hPWkrKG4tMSkqZjtiLmMuYis9YS5hO2IuZi5iKz1hLmF9fWlmKG8uYS5nYygpIT0wKXttPW5ldyB0UGMoMSxmKTtuPXNQYyhtLGIsbyxwLGIuZi5iK2ktYi5jLmIpO24+MCYmKGIuZi5iKz1pKyhuLTEpKmYpfX1cbmZ1bmN0aW9uIGtLZChhLGIpe3ZhciBjLGQsZSxmO2Y9YS5GO2lmKGI9PW51bGwpe2EuRj1udWxsOyRKZChhLG51bGwpfWVsc2V7YS5GPSh1Q2IoYiksYik7ZD1oZmIoYix3ZmIoNjApKTtpZihkIT0tMSl7ZT1iLnN1YnN0cigwLGQpO2hmYihiLHdmYig0NikpPT0tMSYmIWRmYihlLEtoZSkmJiFkZmIoZSxFdmUpJiYhZGZiKGUsRnZlKSYmIWRmYihlLEd2ZSkmJiFkZmIoZSxIdmUpJiYhZGZiKGUsSXZlKSYmIWRmYihlLEp2ZSkmJiFkZmIoZSxLdmUpJiYoZT1MdmUpO2M9a2ZiKGIsd2ZiKDYyKSk7YyE9LTEmJihlKz0nJytiLnN1YnN0cihjKzEpKTskSmQoYSxlKX1lbHNle2U9YjtpZihoZmIoYix3ZmIoNDYpKT09LTEpe2Q9aGZiKGIsd2ZiKDkxKSk7ZCE9LTEmJihlPWIuc3Vic3RyKDAsZCkpO2lmKCFkZmIoZSxLaGUpJiYhZGZiKGUsRXZlKSYmIWRmYihlLEZ2ZSkmJiFkZmIoZSxHdmUpJiYhZGZiKGUsSHZlKSYmIWRmYihlLEl2ZSkmJiFkZmIoZSxKdmUpJiYhZGZiKGUsS3ZlKSl7ZT1MdmU7ZCE9LTEmJihlKz0nJytiLnN1YnN0cihkKSl9ZWxzZXtlPWJ9fSRKZChhLGUpO2U9PWImJihhLkY9YS5EKX19KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZVaGQoYSxuZXcgblNkKGEsMSw1LGYsYikpfVxuZnVuY3Rpb24gQU1jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O3A9Yi5iLmMubGVuZ3RoO2lmKHA8Myl7cmV0dXJufW49S0MoV0Qsb2plLDI1LHAsMTUsMSk7bD0wO2ZvcihrPW5ldyBvbGIoYi5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksMjkpO25bbCsrXT1qLmEuYy5sZW5ndGh9bT1uZXcgQmliKGIuYiwyKTtmb3IoZD0xO2Q8cC0xO2QrKyl7Yz0oc0NiKG0uYjxtLmQuZ2MoKSksQkQobS5kLlhiKG0uYz1tLmIrKyksMjkpKTtvPW5ldyBvbGIoYy5hKTtmPTA7aD0wO2ZvcihpPTA7aTxuW2QrMV07aSsrKXt0PUJEKG1sYihvKSwxMCk7aWYoaT09bltkKzFdLTF8fHpNYyhhLHQsZCsxLGQpKXtnPW5bZF0tMTt6TWMoYSx0LGQrMSxkKSYmKGc9YS5jLmVbQkQoQkQoQkQoSWtiKGEuYy5iLHQucCksMTUpLlhiKDApLDQ2KS5hLDEwKS5wXSk7d2hpbGUoaDw9aSl7cz1CRChJa2IoYy5hLGgpLDEwKTtpZighek1jKGEscyxkKzEsZCkpe2ZvcihyPUJEKElrYihhLmMuYixzLnApLDE1KS5LYygpO3IuT2IoKTspe3E9QkQoci5QYigpLDQ2KTtlPWEuYy5lW0JEKHEuYSwxMCkucF07KGU8Znx8ZT5nKSYmUXFiKGEuYixCRChxLmIsMTcpKX19KytofWY9Z319fX1cbmZ1bmN0aW9uIG81YyhiLGMpe3ZhciBkO2lmKGM9PW51bGx8fGRmYihjLFhoZSkpe3JldHVybiBudWxsfWlmKGMubGVuZ3RoPT0wJiZiLmshPShfNWMoKSxXNWMpKXtyZXR1cm4gbnVsbH1zd2l0Y2goYi5rLmcpe2Nhc2UgMTpyZXR1cm4gZWZiKGMsa3NlKT8oQmNiKCksQWNiKTplZmIoYyxsc2UpPyhCY2IoKSx6Y2IpOm51bGw7Y2FzZSAyOnRyeXtyZXR1cm4gbWViKEljYihjLFJpZSxPaGUpKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEyNykpe3JldHVybiBudWxsfWVsc2UgdGhyb3cgdmJiKGEpfWNhc2UgNDp0cnl7cmV0dXJuIEhjYihjKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEyNykpe3JldHVybiBudWxsfWVsc2UgdGhyb3cgdmJiKGEpfWNhc2UgMzpyZXR1cm4gYztjYXNlIDU6ajVjKGIpO3JldHVybiBtNWMoYixjKTtjYXNlIDY6ajVjKGIpO3JldHVybiBuNWMoYixiLmEsYyk7Y2FzZSA3OnRyeXtkPWw1YyhiKTtkLkpmKGMpO3JldHVybiBkfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMzIpKXtyZXR1cm4gbnVsbH1lbHNlIHRocm93IHZiYihhKX1kZWZhdWx0OnRocm93IHZiYihuZXcgWmRiKCdJbnZhbGlkIHR5cGUgc2V0IGZvciB0aGlzIGxheW91dCBvcHRpb24uJykpO319XG5mdW5jdGlvbiBKV2IoYSl7QVdiKCk7dmFyIGIsYyxkLGUsZixnLGg7aD1uZXcgQ1diO2ZvcihjPW5ldyBvbGIoYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDE0MCk7KCFoLmJ8fGIuYz49aC5iLmMpJiYoaC5iPWIpO2lmKCFoLmN8fGIuYzw9aC5jLmMpe2guZD1oLmM7aC5jPWJ9KCFoLmV8fGIuZD49aC5lLmQpJiYoaC5lPWIpOyghaC5mfHxiLmQ8PWguZi5kKSYmKGguZj1iKX1kPW5ldyBOV2IoKGxXYigpLGhXYikpO3JYYihhLHlXYixuZXcgYW1iKE9DKEdDKGJRLDEpLFVoZSwzNjksMCxbZF0pKSk7Zz1uZXcgTldiKGtXYik7clhiKGEseFdiLG5ldyBhbWIoT0MoR0MoYlEsMSksVWhlLDM2OSwwLFtnXSkpKTtlPW5ldyBOV2IoaVdiKTtyWGIoYSx3V2IsbmV3IGFtYihPQyhHQyhiUSwxKSxVaGUsMzY5LDAsW2VdKSkpO2Y9bmV3IE5XYihqV2IpO3JYYihhLHZXYixuZXcgYW1iKE9DKEdDKGJRLDEpLFVoZSwzNjksMCxbZl0pKSk7RFdiKGQuYyxoV2IpO0RXYihlLmMsaVdiKTtEV2IoZi5jLGpXYik7RFdiKGcuYyxrV2IpO2guYS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtHa2IoaC5hLGQuYyk7R2tiKGguYSxTdShlLmMpKTtHa2IoaC5hLGYuYyk7R2tiKGguYSxTdShnLmMpKTtyZXR1cm4gaH1cbmZ1bmN0aW9uIGp4ZChhKXt2YXIgYjtzd2l0Y2goYS5kKXtjYXNlIDE6e2lmKGEuaGooKSl7cmV0dXJuIGEubyE9LTJ9YnJlYWt9Y2FzZSAyOntpZihhLmhqKCkpe3JldHVybiBhLm89PS0yfWJyZWFrfWNhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6e3JldHVybiBhLm8+LTJ9ZGVmYXVsdDp7cmV0dXJuIGZhbHNlfX1iPWEuZ2ooKTtzd2l0Y2goYS5wKXtjYXNlIDA6cmV0dXJuIGIhPW51bGwmJkNjYihERChiKSkhPUtiYihhLmssMCk7Y2FzZSAxOnJldHVybiBiIT1udWxsJiZCRChiLDIxNykuYSE9VGJiKGEuayk8PDI0Pj4yNDtjYXNlIDI6cmV0dXJuIGIhPW51bGwmJkJEKGIsMTcyKS5hIT0oVGJiKGEuaykmYWplKTtjYXNlIDY6cmV0dXJuIGIhPW51bGwmJktiYihCRChiLDE2MikuYSxhLmspO2Nhc2UgNTpyZXR1cm4gYiE9bnVsbCYmQkQoYiwxOSkuYSE9VGJiKGEuayk7Y2FzZSA3OnJldHVybiBiIT1udWxsJiZCRChiLDE4NCkuYSE9VGJiKGEuayk8PDE2Pj4xNjtjYXNlIDM6cmV0dXJuIGIhPW51bGwmJkVkYihFRChiKSkhPWEuajtjYXNlIDQ6cmV0dXJuIGIhPW51bGwmJkJEKGIsMTU1KS5hIT1hLmo7ZGVmYXVsdDpyZXR1cm4gYj09bnVsbD9hLm4hPW51bGw6IXBiKGIsYS5uKTt9fVxuZnVuY3Rpb24gbk9kKGEsYixjKXt2YXIgZCxlLGYsZztpZihhLkZrKCkmJmEuRWsoKSl7Zz1vT2QoYSxCRChjLDU2KSk7aWYoUEQoZykhPT1QRChjKSl7YS5PaShiKTthLlVpKGIscE9kKGEsYixnKSk7aWYoYS5yaygpKXtmPShlPUJEKGMsNDkpLGEuRGsoKT9hLkJrKCk/ZS5paChhLmIselVkKEJEKFhLZCh3amQoYS5iKSxhLmFqKCkpLDE4KSkubixCRChYS2Qod2pkKGEuYiksYS5haigpKS5ZaigpLDI2KS5CaigpLG51bGwpOmUuaWgoYS5iLGJMZChlLlRnKCkselVkKEJEKFhLZCh3amQoYS5iKSxhLmFqKCkpLDE4KSkpLG51bGwsbnVsbCk6ZS5paChhLmIsLTEtYS5haigpLG51bGwsbnVsbCkpOyFCRChnLDQ5KS5laCgpJiYoZj0oZD1CRChnLDQ5KSxhLkRrKCk/YS5CaygpP2QuZ2goYS5iLHpVZChCRChYS2Qod2pkKGEuYiksYS5haigpKSwxOCkpLm4sQkQoWEtkKHdqZChhLmIpLGEuYWooKSkuWWooKSwyNikuQmooKSxmKTpkLmdoKGEuYixiTGQoZC5UZygpLHpVZChCRChYS2Qod2pkKGEuYiksYS5haigpKSwxOCkpKSxudWxsLGYpOmQuZ2goYS5iLC0xLWEuYWooKSxudWxsLGYpKSk7ISFmJiZmLkZpKCl9b2lkKGEuYikmJmEuJGkoYS5aaSg5LGMsZyxiLGZhbHNlKSk7cmV0dXJuIGd9fXJldHVybiBjfVxuZnVuY3Rpb24gTm9jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7az1FZGIoRUQodk5iKGEsKE55YygpLG95YykpKSk7ZD1FZGIoRUQodk5iKGEsQ3ljKSkpO209bmV3IF9mZDt5TmIobSxveWMsaytkKTtqPWI7cj1qLmQ7cD1qLmMuaTtzPWouZC5pO3E9RzFiKHAuYyk7dD1HMWIocy5jKTtlPW5ldyBSa2I7Zm9yKGw9cTtsPD10O2wrKyl7aD1uZXcgYjBiKGEpO19fYihoLChqMGIoKSxnMGIpKTt5TmIoaCwod3RjKCksJHNjKSxqKTt5TmIoaCxWeGMsKGRjZCgpLCRiZCkpO3lOYihoLHF5YyxtKTtuPUJEKElrYihhLmIsbCksMjkpO2w9PXE/Wl9iKGgsbi5hLmMubGVuZ3RoLWMsbik6JF9iKGgsbik7dT1FZGIoRUQodk5iKGosWndjKSkpO2lmKHU8MCl7dT0wO3lOYihqLFp3Yyx1KX1oLm8uYj11O289JHduZC5NYXRoLmZsb29yKHUvMik7Zz1uZXcgSDBiO0cwYihnLChVY2QoKSxUY2QpKTtGMGIoZyxoKTtnLm4uYj1vO2k9bmV3IEgwYjtHMGIoaSx6Y2QpO0YwYihpLGgpO2kubi5iPW87UlpiKGosZyk7Zj1uZXcgVVpiO3ROYihmLGopO3lOYihmLGp4YyxudWxsKTtRWmIoZixpKTtSWmIoZixyKTtPb2MoaCxqLGYpO2UuY1tlLmMubGVuZ3RoXT1mO2o9Zn1yZXR1cm4gZX1cbmZ1bmN0aW9uIHNiYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtpPUJEKFlfYihhLChVY2QoKSxUY2QpKS5LYygpLlBiKCksMTEpLmU7bj1CRChZX2IoYSx6Y2QpLktjKCkuUGIoKSwxMSkuZztoPWkuYy5sZW5ndGg7dD1BMGIoQkQoSWtiKGEuaiwwKSwxMSkpO3doaWxlKGgtLT4wKXtwPSh0Q2IoMCxpLmMubGVuZ3RoKSxCRChpLmNbMF0sMTcpKTtlPSh0Q2IoMCxuLmMubGVuZ3RoKSxCRChuLmNbMF0sMTcpKTtzPWUuZC5lO2Y9SmtiKHMsZSwwKTtTWmIocCxlLmQsZik7UVpiKGUsbnVsbCk7UlpiKGUsbnVsbCk7bz1wLmE7YiYmRHNiKG8sbmV3IGc3Yyh0KSk7Zm9yKGQ9SnNiKGUuYSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksOCk7RHNiKG8sbmV3IGc3YyhjKSl9cj1wLmI7Zm9yKG09bmV3IG9sYihlLmIpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSw3MCk7ci5jW3IuYy5sZW5ndGhdPWx9cT1CRCh2TmIocCwoTnljKCksanhjKSksNzQpO2c9QkQodk5iKGUsanhjKSw3NCk7aWYoZyl7aWYoIXEpe3E9bmV3IHM3Yzt5TmIocCxqeGMscSl9Zm9yKGs9SnNiKGcsMCk7ay5iIT1rLmQuYzspe2o9QkQoWHNiKGspLDgpO0RzYihxLG5ldyBnN2MoaikpfX19fVxuZnVuY3Rpb24gRUpiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2M9QkQoTXBiKGEuYixiKSwxMjQpO2k9QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCk7aWYoaS5kYygpKXtjLm4uYj0wO2Mubi5jPTA7cmV0dXJufWo9YS51LkhjKChyY2QoKSxuY2QpKTtnPTA7aD1pLktjKCk7az1udWxsO2w9MDttPTA7d2hpbGUoaC5PYigpKXtkPUJEKGguUGIoKSwxMTEpO2U9RWRiKEVEKGQuYi5XZSgoQ0tiKCksQktiKSkpKTtmPWQuYi5yZigpLmE7YS5BLkhjKCh0ZGQoKSxzZGQpKSYmS0piKGEsYik7aWYoIWspeyEhYS5DJiZhLkMuYj4wJiYoZz0kd25kLk1hdGgubWF4KGcsSUpiKGEuQy5iK2QuZC5iLGUpKSl9ZWxzZXtuPW0ray5kLmMrYS53K2QuZC5iO2c9JHduZC5NYXRoLm1heChnLChJeSgpLE15KHBsZSksJHduZC5NYXRoLmFicyhsLWUpPD1wbGV8fGw9PWV8fGlzTmFOKGwpJiZpc05hTihlKT8wOm4vKGUtbCkpKX1rPWQ7bD1lO209Zn1pZighIWEuQyYmYS5DLmM+MCl7bj1tK2EuQy5jO2omJihuKz1rLmQuYyk7Zz0kd25kLk1hdGgubWF4KGcsKEl5KCksTXkocGxlKSwkd25kLk1hdGguYWJzKGwtMSk8PXBsZXx8bD09MXx8aXNOYU4obCkmJmlzTmFOKDEpPzA6bi8oMS1sKSkpfWMubi5iPTA7Yy5hLmE9Z31cbmZ1bmN0aW9uIE5LYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtjPUJEKE1wYihhLmIsYiksMTI0KTtpPUJEKEJEKFFjKGEucixiKSwyMSksODQpO2lmKGkuZGMoKSl7Yy5uLmQ9MDtjLm4uYT0wO3JldHVybn1qPWEudS5IYygocmNkKCksbmNkKSk7Zz0wO2EuQS5IYygodGRkKCksc2RkKSkmJlNLYihhLGIpO2g9aS5LYygpO2s9bnVsbDttPTA7bD0wO3doaWxlKGguT2IoKSl7ZD1CRChoLlBiKCksMTExKTtmPUVkYihFRChkLmIuV2UoKENLYigpLEJLYikpKSk7ZT1kLmIucmYoKS5iO2lmKCFrKXshIWEuQyYmYS5DLmQ+MCYmKGc9JHduZC5NYXRoLm1heChnLElKYihhLkMuZCtkLmQuZCxmKSkpfWVsc2V7bj1sK2suZC5hK2EudytkLmQuZDtnPSR3bmQuTWF0aC5tYXgoZywoSXkoKSxNeShwbGUpLCR3bmQuTWF0aC5hYnMobS1mKTw9cGxlfHxtPT1mfHxpc05hTihtKSYmaXNOYU4oZik/MDpuLyhmLW0pKSl9az1kO209ZjtsPWV9aWYoISFhLkMmJmEuQy5hPjApe249bCthLkMuYTtqJiYobis9ay5kLmEpO2c9JHduZC5NYXRoLm1heChnLChJeSgpLE15KHBsZSksJHduZC5NYXRoLmFicyhtLTEpPD1wbGV8fG09PTF8fGlzTmFOKG0pJiZpc05hTigxKT8wOm4vKDEtbSkpKX1jLm4uZD0wO2MuYS5iPWd9XG5mdW5jdGlvbiBfRWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTt0aGlzLmc9YTtoPWIuZC5sZW5ndGg7aT1jLmQubGVuZ3RoO3RoaXMuZD1LQyhPUSxrbmUsMTAsaCtpLDAsMSk7Zm9yKGc9MDtnPGg7ZysrKXt0aGlzLmRbZ109Yi5kW2ddfWZvcihmPTA7ZjxpO2YrKyl7dGhpcy5kW2grZl09Yy5kW2ZdfWlmKGIuZSl7dGhpcy5lPVJ1KGIuZSk7dGhpcy5lLk1jKGMpO2lmKGMuZSl7Zm9yKGU9Yy5lLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMjMzKTtpZihkPT1iKXtjb250aW51ZX1lbHNlIHRoaXMuZS5IYyhkKT8tLWQuYzp0aGlzLmUuRmMoZCl9fX1lbHNlIGlmKGMuZSl7dGhpcy5lPVJ1KGMuZSk7dGhpcy5lLk1jKGIpfXRoaXMuZj1iLmYrYy5mO3RoaXMuYT1iLmErYy5hO3RoaXMuYT4wP1pFYyh0aGlzLHRoaXMuZi90aGlzLmEpOlJFYyhiLmcsYi5kWzBdKS5hIT1udWxsJiZSRWMoYy5nLGMuZFswXSkuYSE9bnVsbD9aRWModGhpcywoRWRiKFJFYyhiLmcsYi5kWzBdKS5hKStFZGIoUkVjKGMuZyxjLmRbMF0pLmEpKS8yKTpSRWMoYi5nLGIuZFswXSkuYSE9bnVsbD9aRWModGhpcyxSRWMoYi5nLGIuZFswXSkuYSk6UkVjKGMuZyxjLmRbMF0pLmEhPW51bGwmJlpFYyh0aGlzLFJFYyhjLmcsYy5kWzBdKS5hKX1cbmZ1bmN0aW9uIEJVYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2EuYT1uZXcgZFZiKG9xYih0MSkpO2ZvcihkPW5ldyBvbGIoYi5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksODQxKTtoPW5ldyBnVmIoT0MoR0MoSVAsMSksVWhlLDgxLDAsW10pKTtFa2IoYS5hLmEsaCk7Zm9yKGo9bmV3IG9sYihjLmQpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMTApO2s9bmV3IEdVYihhLGkpO0FVYihrLEJEKHZOYihjLmMsKHd0YygpLEVzYykpLDIxKSk7aWYoIU1oYihhLmcsYykpe1JoYihhLmcsYyxuZXcgZjdjKGkuYyxpLmQpKTtSaGIoYS5mLGMsayl9RWtiKGEuYS5iLGspO2VWYihoLGspfWZvcihnPW5ldyBvbGIoYy5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksNTk0KTtrPW5ldyBHVWIoYSxmLmtmKCkpO1JoYihhLmIsZixuZXcgdmdkKGgsaykpO0FVYihrLEJEKHZOYihjLmMsKHd0YygpLEVzYykpLDIxKSk7aWYoZi5oZigpKXtsPW5ldyBIVWIoYSxmLmhmKCksMSk7QVViKGwsQkQodk5iKGMuYyxFc2MpLDIxKSk7ZT1uZXcgZ1ZiKE9DKEdDKElQLDEpLFVoZSw4MSwwLFtdKSk7ZVZiKGUsbCk7UmMoYS5jLGYuZ2YoKSxuZXcgdmdkKGgsbCkpfX19cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIG9CYyhhKXt2YXIgYjt0aGlzLmE9YTtiPShqMGIoKSxPQyhHQyhOUSwxKSxLaWUsMjY3LDAsW2gwYixnMGIsZTBiLGkwYixmMGIsZDBiXSkpLmxlbmd0aDt0aGlzLmI9SUMoUTMsW25pZSx6cWVdLFs1OTMsMTQ2XSwwLFtiLGJdLDIpO3RoaXMuYz1JQyhRMyxbbmllLHpxZV0sWzU5MywxNDZdLDAsW2IsYl0sMik7bkJjKHRoaXMsaDBiLChOeWMoKSx2eWMpLHd5Yyk7bEJjKHRoaXMsaDBiLGcwYixveWMscHljKTtrQmModGhpcyxoMGIsaTBiLG95Yyk7a0JjKHRoaXMsaDBiLGUwYixveWMpO2xCYyh0aGlzLGgwYixmMGIsdnljLHd5Yyk7bkJjKHRoaXMsZzBiLGx5YyxteWMpO2tCYyh0aGlzLGcwYixpMGIsbHljKTtrQmModGhpcyxnMGIsZTBiLGx5Yyk7bEJjKHRoaXMsZzBiLGYwYixveWMscHljKTttQmModGhpcyxpMGIsbHljKTtrQmModGhpcyxpMGIsZTBiLGx5Yyk7a0JjKHRoaXMsaTBiLGYwYixzeWMpO21CYyh0aGlzLGUwYix6eWMpO2xCYyh0aGlzLGUwYixmMGIsdXljLHR5Yyk7bkJjKHRoaXMsZjBiLGx5YyxseWMpO25CYyh0aGlzLGQwYixseWMsbXljKTtsQmModGhpcyxkMGIsaDBiLG95YyxweWMpO2xCYyh0aGlzLGQwYixmMGIsb3ljLHB5Yyk7bEJjKHRoaXMsZDBiLGcwYixveWMscHljKX1cbmZ1bmN0aW9uIF8yZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtnPWMuYWsoKTtpZihKRChnLDk5KSYmKEJEKGcsMTgpLkJiJlRqZSkhPTApe209QkQoYy5kZCgpLDQ5KTtwPXhpZChhLmUsbSk7aWYocCE9bSl7az1SNmQoZyxwKTttdWQoYSxiLHQzZChhLGIsaykpO2w9bnVsbDtpZihvaWQoYS5lKSl7ZD1lMWQoKE82ZCgpLE02ZCksYS5lLlRnKCksZyk7aWYoZCE9WEtkKGEuZS5UZygpLGEuYykpe3E9UzZkKGEuZS5UZygpLGcpO2g9MDtmPUJEKGEuZywxMTkpO2ZvcihpPTA7aTxiOysraSl7ZT1mW2ldO3EucmwoZS5haygpKSYmKytofWw9bmV3IE83ZChhLmUsOSxkLG0scCxoLGZhbHNlKTtsLkVpKG5ldyBwU2QoYS5lLDksYS5jLGMsayxiLGZhbHNlKSl9fW89QkQoZywxOCk7bj16VWQobyk7aWYobil7bD1tLmloKGEuZSxiTGQobS5UZygpLG4pLG51bGwsbCk7bD1CRChwLDQ5KS5naChhLmUsYkxkKHAuVGcoKSxuKSxudWxsLGwpfWVsc2UgaWYoKG8uQmImb3RlKSE9MCl7aj0tMS1iTGQoYS5lLlRnKCksbyk7bD1tLmloKGEuZSxqLG51bGwsbnVsbCk7IUJEKHAsNDkpLmVoKCkmJihsPUJEKHAsNDkpLmdoKGEuZSxqLG51bGwsbCkpfSEhbCYmbC5GaSgpO3JldHVybiBrfX1yZXR1cm4gY31cbmZ1bmN0aW9uIHlVYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2ZvcihmPW5ldyBvbGIoYS5hLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSw4MSk7ZS5iLmM9ZS5nLmM7ZS5iLmQ9ZS5nLmR9aT1uZXcgZjdjKFBqZSxQamUpO2I9bmV3IGY3YyhRamUsUWplKTtmb3IoZD1uZXcgb2xiKGEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksODEpO2kuYT0kd25kLk1hdGgubWluKGkuYSxjLmcuYyk7aS5iPSR3bmQuTWF0aC5taW4oaS5iLGMuZy5kKTtiLmE9JHduZC5NYXRoLm1heChiLmEsYy5nLmMrYy5nLmIpO2IuYj0kd25kLk1hdGgubWF4KGIuYixjLmcuZCtjLmcuYSl9Zm9yKGg9VWMoYS5jKS5hLm5jKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksNDYpO2M9QkQoZy5iLDgxKTtpLmE9JHduZC5NYXRoLm1pbihpLmEsYy5nLmMpO2kuYj0kd25kLk1hdGgubWluKGkuYixjLmcuZCk7Yi5hPSR3bmQuTWF0aC5tYXgoYi5hLGMuZy5jK2MuZy5iKTtiLmI9JHduZC5NYXRoLm1heChiLmIsYy5nLmQrYy5nLmEpfWEuZD1WNmMobmV3IGY3YyhpLmEsaS5iKSk7YS5lPWM3YyhuZXcgZjdjKGIuYSxiLmIpLGkpO2EuYS5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2EuYS5iLmM9S0MoU0ksVWhlLDEsMCw1LDEpfVxuZnVuY3Rpb24gc3ZkKGEpe3ZhciBiLGMsZDtsNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IFo5Y10pKTtjPW5ldyB4QihhKTtmb3IoZD0wO2Q8Yy5hLmxlbmd0aDsrK2Qpe2I9dEIoYyxkKS5qZSgpLmE7ZGZiKGIsJ2xheWVyZWQnKT9sNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IGt3Y10pKTpkZmIoYiwnZm9yY2UnKT9sNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IFRSYl0pKTpkZmIoYiwnc3RyZXNzJyk/bDRjKGx2ZCxPQyhHQyhDMCwxKSxVaGUsMTMwLDAsW25ldyBQU2JdKSk6ZGZiKGIsJ21ydHJlZScpP2w0YyhsdmQsT0MoR0MoQzAsMSksVWhlLDEzMCwwLFtuZXcgc1RjXSkpOmRmYihiLCdyYWRpYWwnKT9sNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IElXY10pKTpkZmIoYiwnZGlzY28nKT9sNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IGdGYixuZXcgb1BiXSkpOmRmYihiLCdzcG9yZU92ZXJsYXAnKXx8ZGZiKGIsJ3Nwb3JlQ29tcGFjdGlvbicpP2w0YyhsdmQsT0MoR0MoQzAsMSksVWhlLDEzMCwwLFtuZXcgQjBjXSkpOmRmYihiLCdyZWN0cGFja2luZycpJiZsNGMobHZkLE9DKEdDKEMwLDEpLFVoZSwxMzAsMCxbbmV3IFBZY10pKX19XG5mdW5jdGlvbiBqX2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjttPW5ldyBnN2MoYS5vKTtyPWIuYS9tLmE7aD1iLmIvbS5iO3A9Yi5hLW0uYTtmPWIuYi1tLmI7aWYoYyl7ZT1QRCh2TmIoYSwoTnljKCksVnhjKSkpPT09UEQoKGRjZCgpLCRiZCkpO2ZvcihvPW5ldyBvbGIoYS5qKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1CRChtbGIobyksMTEpO3N3aXRjaChuLmouZyl7Y2FzZSAxOmV8fChuLm4uYSo9cik7YnJlYWs7Y2FzZSAyOm4ubi5hKz1wO2V8fChuLm4uYio9aCk7YnJlYWs7Y2FzZSAzOmV8fChuLm4uYSo9cik7bi5uLmIrPWY7YnJlYWs7Y2FzZSA0OmV8fChuLm4uYio9aCk7fX19Zm9yKGo9bmV3IG9sYihhLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSw3MCk7az1pLm4uYStpLm8uYS8yO2w9aS5uLmIraS5vLmIvMjtxPWsvbS5hO2c9bC9tLmI7aWYocStnPj0xKXtpZihxLWc+MCYmbD49MCl7aS5uLmErPXA7aS5uLmIrPWYqZ31lbHNlIGlmKHEtZzwwJiZrPj0wKXtpLm4uYSs9cCpxO2kubi5iKz1mfX19YS5vLmE9Yi5hO2Euby5iPWIuYjt5TmIoYSwoTnljKCksRnhjKSwodGRkKCksZD1CRChnZGIoSTEpLDkpLG5ldyB4cWIoZCxCRChfQmIoZCxkLmxlbmd0aCksOSksMCkpKX1cbmZ1bmN0aW9uIGlGZChhLGIsYyxkLGUsZil7dmFyIGc7aWYoIShiPT1udWxsfHwhT0VkKGIsekVkLEFFZCkpKXt0aHJvdyB2YmIobmV3IFdkYignaW52YWxpZCBzY2hlbWU6ICcrYikpfWlmKCFhJiYhKGMhPW51bGwmJmhmYihjLHdmYigzNSkpPT0tMSYmYy5sZW5ndGg+MCYmKEJDYigwLGMubGVuZ3RoKSxjLmNoYXJDb2RlQXQoMCkhPTQ3KSkpe3Rocm93IHZiYihuZXcgV2RiKCdpbnZhbGlkIG9wYXF1ZVBhcnQ6ICcrYykpfWlmKGEmJiEoYiE9bnVsbCYmaG5iKEdFZCxiLnRvTG93ZXJDYXNlKCkpKSYmIShjPT1udWxsfHwhT0VkKGMsQ0VkLERFZCkpKXt0aHJvdyB2YmIobmV3IFdkYihtdmUrYykpfWlmKGEmJmIhPW51bGwmJmhuYihHRWQsYi50b0xvd2VyQ2FzZSgpKSYmIWVGZChjKSl7dGhyb3cgdmJiKG5ldyBXZGIobXZlK2MpKX1pZighZkZkKGQpKXt0aHJvdyB2YmIobmV3IFdkYignaW52YWxpZCBkZXZpY2U6ICcrZCkpfWlmKCFoRmQoZSkpe2c9ZT09bnVsbD8naW52YWxpZCBzZWdtZW50czogbnVsbCc6J2ludmFsaWQgc2VnbWVudDogJytWRWQoZSk7dGhyb3cgdmJiKG5ldyBXZGIoZykpfWlmKCEoZj09bnVsbHx8aGZiKGYsd2ZiKDM1KSk9PS0xKSl7dGhyb3cgdmJiKG5ldyBXZGIoJ2ludmFsaWQgcXVlcnk6ICcrZikpfX1cbmZ1bmN0aW9uIG5WYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO09kZChiLCdDYWxjdWxhdGUgR3JhcGggU2l6ZScsMSk7Yi5uJiYhIWEmJlRkZChiLGk2ZChhKSwocGdkKCksbWdkKSk7aD1kbWU7aT1kbWU7Zj1lcmU7Zz1lcmU7Zm9yKGw9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtsLmUhPWwuaS5nYygpOyl7aj1CRChEeWQobCksMzMpO289ai5pO3A9ai5qO3I9ai5nO2Q9ai5mO2U9QkQoaGtkKGosKFk5YygpLFM4YykpLDE0Mik7aD0kd25kLk1hdGgubWluKGgsby1lLmIpO2k9JHduZC5NYXRoLm1pbihpLHAtZS5kKTtmPSR3bmQuTWF0aC5tYXgoZixvK3IrZS5jKTtnPSR3bmQuTWF0aC5tYXgoZyxwK2QrZS5hKX1uPUJEKGhrZChhLChZOWMoKSxmOWMpKSwxMTYpO209bmV3IGY3YyhoLW4uYixpLW4uZCk7Zm9yKGs9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtrLmUhPWsuaS5nYygpOyl7aj1CRChEeWQoayksMzMpO2RsZChqLGouaS1tLmEpO2VsZChqLGouai1tLmIpfXE9Zi1oKyhuLmIrbi5jKTtjPWctaSsobi5kK24uYSk7Y2xkKGEscSk7YWxkKGEsYyk7Yi5uJiYhIWEmJlRkZChiLGk2ZChhKSwocGdkKCksbWdkKSl9XG5mdW5jdGlvbiByR2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7ZD1uZXcgUmtiO2ZvcihnPW5ldyBvbGIoYS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihnKSwxMjEpO2s9MDtlLmsuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Zm9yKGM9bmV3IG9sYihMRmIoZSkpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyMTMpO2lmKGIuZil7RWtiKGUuayxiKTsrK2t9fWs9PTEmJihkLmNbZC5jLmxlbmd0aF09ZSx0cnVlKX1mb3IoZj1uZXcgb2xiKGQpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMjEpO3doaWxlKGUuay5jLmxlbmd0aD09MSl7aj1CRChtbGIobmV3IG9sYihlLmspKSwyMTMpO2EuYltqLmNdPWouZztoPWouZDtpPWouZTtmb3IoYz1uZXcgb2xiKExGYihlKSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDIxMyk7cGIoYixqKXx8KGIuZj9oPT1iLmR8fGk9PWIuZT8oYS5iW2ouY10tPWEuYltiLmNdLWIuZyk6KGEuYltqLmNdKz1hLmJbYi5jXS1iLmcpOmU9PWg/Yi5kPT1lPyhhLmJbai5jXSs9Yi5nKTooYS5iW2ouY10tPWIuZyk6Yi5kPT1lPyhhLmJbai5jXS09Yi5nKTooYS5iW2ouY10rPWIuZykpfUxrYihoLmssaik7TGtiKGkuayxqKTtoPT1lPyhlPWouZSk6KGU9ai5kKX19fVxuZnVuY3Rpb24gazRjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aWYoYj09bnVsbHx8Yi5sZW5ndGg9PTApe3JldHVybiBudWxsfWY9QkQoUGhiKGEuZixiKSwyMyk7aWYoIWYpe2ZvcihlPShuPShuZXcgJGliKGEuZCkpLmEudmMoKS5LYygpLG5ldyBkamIobikpO2UuYS5PYigpOyl7Yz0oZz1CRChlLmEuUGIoKSw0MiksQkQoZy5kZCgpLDIzKSk7aD1jLmY7bz1iLmxlbmd0aDtpZihkZmIoaC5zdWJzdHIoaC5sZW5ndGgtbyxvKSxiKSYmKGIubGVuZ3RoPT1oLmxlbmd0aHx8YmZiKGgsaC5sZW5ndGgtYi5sZW5ndGgtMSk9PTQ2KSl7aWYoZil7cmV0dXJuIG51bGx9Zj1jfX1pZighZil7Zm9yKGQ9KG09KG5ldyAkaWIoYS5kKSkuYS52YygpLktjKCksbmV3IGRqYihtKSk7ZC5hLk9iKCk7KXtjPShnPUJEKGQuYS5QYigpLDQyKSxCRChnLmRkKCksMjMpKTtsPWMuZztpZihsIT1udWxsKXtmb3IoaT1sLGo9MCxrPWkubGVuZ3RoO2o8azsrK2ope2g9aVtqXTtvPWIubGVuZ3RoO2lmKGRmYihoLnN1YnN0cihoLmxlbmd0aC1vLG8pLGIpJiYoYi5sZW5ndGg9PWgubGVuZ3RofHxiZmIoaCxoLmxlbmd0aC1iLmxlbmd0aC0xKT09NDYpKXtpZihmKXtyZXR1cm4gbnVsbH1mPWN9fX19fSEhZiYmU2hiKGEuZixiLGYpfXJldHVybiBmfVxuZnVuY3Rpb24gc0EoYSxiKXt2YXIgYyxkLGUsZixnO2M9bmV3IFZmYjtnPWZhbHNlO2ZvcihmPTA7ZjxiLmxlbmd0aDtmKyspe2Q9KEJDYihmLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZikpO2lmKGQ9PTMyKXtnQShhLGMsMCk7Yy5hKz0nICc7Z0EoYSxjLDApO3doaWxlKGYrMTxiLmxlbmd0aCYmKEJDYihmKzEsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChmKzEpPT0zMikpeysrZn1jb250aW51ZX1pZihnKXtpZihkPT0zOSl7aWYoZisxPGIubGVuZ3RoJiYoQkNiKGYrMSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGYrMSk9PTM5KSl7Yy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpOysrZn1lbHNle2c9ZmFsc2V9fWVsc2V7Yy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpfWNvbnRpbnVlfWlmKGhmYignR3lNTGRrSG1zU0VjRGFoS3padicsd2ZiKGQpKT4wKXtnQShhLGMsMCk7Yy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpO2U9bEEoYixmKTtnQShhLGMsZSk7Zis9ZS0xO2NvbnRpbnVlfWlmKGQ9PTM5KXtpZihmKzE8Yi5sZW5ndGgmJihCQ2IoZisxLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZisxKT09MzkpKXtjLmErPVwiJ1wiOysrZn1lbHNle2c9dHJ1ZX19ZWxzZXtjLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fWdBKGEsYywwKTttQShhKX1cbmZ1bmN0aW9uIHdEYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO09kZChjLCdOZXR3b3JrIHNpbXBsZXggbGF5ZXJpbmcnLDEpO2EuYj1iO3I9QkQodk5iKGIsKE55YygpLEF5YykpLDE5KS5hKjQ7cT1hLmIuYTtpZihxLmMubGVuZ3RoPDEpe1FkZChjKTtyZXR1cm59Zj1zRGMoYSxxKTtwPW51bGw7Zm9yKGU9SnNiKGYsMCk7ZS5iIT1lLmQuYzspe2Q9QkQoWHNiKGUpLDE1KTtoPXIqUUQoJHduZC5NYXRoLnNxcnQoZC5nYygpKSk7Zz12RGMoZCk7dUdiKEhHYihKR2IoSUdiKExHYihnKSxoKSxwKSx0cnVlKSxVZGQoYywxKSk7bT1hLmIuYjtmb3Iobz1uZXcgb2xiKGcuYSk7by5hPG8uYy5jLmxlbmd0aDspe249QkQobWxiKG8pLDEyMSk7d2hpbGUobS5jLmxlbmd0aDw9bi5lKXtEa2IobSxtLmMubGVuZ3RoLG5ldyBIMWIoYS5iKSl9az1CRChuLmYsMTApOyRfYihrLEJEKElrYihtLG4uZSksMjkpKX1pZihmLmI+MSl7cD1LQyhXRCxvamUsMjUsYS5iLmIuYy5sZW5ndGgsMTUsMSk7bD0wO2ZvcihqPW5ldyBvbGIoYS5iLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwyOSk7cFtsKytdPWkuYS5jLmxlbmd0aH19fXEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7YS5hPW51bGw7YS5iPW51bGw7YS5jPW51bGw7UWRkKGMpfVxuZnVuY3Rpb24gT1ViKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9MDtmb3IoZj1uZXcgb2xiKGEuYi5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMTg5KTtkLmI9MDtkLmM9MH1OVWIoYSwwKTtNVWIoYSxhLmcpO3NWYihhLmMpO3dWYihhLmMpO2M9KGVhZCgpLGFhZCk7dVZiKG9WYih0VmIodVZiKG9WYih0VmIodVZiKHRWYihhLmMsYykpLGhhZChjKSkpKSxjKSkpO3RWYihhLmMsYWFkKTtSVWIoYSxhLmcpO1NVYihhLDApO1RVYihhLDApO1VVYihhLDEpO05VYihhLDEpO01VYihhLGEuZCk7c1ZiKGEuYyk7Zm9yKGc9bmV3IG9sYihhLmIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGcpLDE4OSk7Yis9JHduZC5NYXRoLmFicyhkLmMpfWZvcihoPW5ldyBvbGIoYS5iLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihoKSwxODkpO2QuYj0wO2QuYz0wfWM9ZGFkO3VWYihvVmIodFZiKHVWYihvVmIodFZiKHVWYih3VmIodFZiKGEuYyxjKSkpLGhhZChjKSkpKSxjKSkpO3RWYihhLmMsYWFkKTtSVWIoYSxhLmQpO1NVYihhLDEpO1RVYihhLDEpO1VVYihhLDApO3dWYihhLmMpO2ZvcihlPW5ldyBvbGIoYS5iLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxODkpO2IrPSR3bmQuTWF0aC5hYnMoZC5jKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIFdmZShhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztqPWI7aWYoai5iPT1udWxsfHxhLmI9PW51bGwpcmV0dXJuO1lmZShhKTtWZmUoYSk7WWZlKGopO1ZmZShqKTtjPUtDKFdELG9qZSwyNSxhLmIubGVuZ3RoK2ouYi5sZW5ndGgsMTUsMSk7az0wO2Q9MDtnPTA7d2hpbGUoZDxhLmIubGVuZ3RoJiZnPGouYi5sZW5ndGgpe2U9YS5iW2RdO2Y9YS5iW2QrMV07aD1qLmJbZ107aT1qLmJbZysxXTtpZihmPGgpe2QrPTJ9ZWxzZSBpZihmPj1oJiZlPD1pKXtpZihoPD1lJiZmPD1pKXtjW2srK109ZTtjW2srK109ZjtkKz0yfWVsc2UgaWYoaDw9ZSl7Y1trKytdPWU7Y1trKytdPWk7YS5iW2RdPWkrMTtnKz0yfWVsc2UgaWYoZjw9aSl7Y1trKytdPWg7Y1trKytdPWY7ZCs9Mn1lbHNle2NbaysrXT1oO2NbaysrXT1pO2EuYltkXT1pKzF9fWVsc2UgaWYoaTxlKXtnKz0yfWVsc2V7dGhyb3cgdmJiKG5ldyBoeignVG9rZW4jaW50ZXJzZWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbJythLmJbZF0rJywnK2EuYltkKzFdKyddICYgWycrai5iW2ddKycsJytqLmJbZysxXSsnXScpKX19d2hpbGUoZDxhLmIubGVuZ3RoKXtjW2srK109YS5iW2QrK107Y1trKytdPWEuYltkKytdfWEuYj1LQyhXRCxvamUsMjUsaywxNSwxKTskZmIoYywwLGEuYiwwLGspfVxuZnVuY3Rpb24gUFViKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9bmV3IFJrYjthLmc9bmV3IFJrYjthLmQ9bmV3IFJrYjtmb3IoZz1uZXcgbmliKChuZXcgZWliKGEuZi5iKSkuYSk7Zy5iOyl7Zj1saWIoZyk7RWtiKGIsQkQoQkQoZi5kZCgpLDQ2KS5iLDgxKSk7ZmFkKEJEKGYuY2QoKSw1OTQpLmdmKCkpP0VrYihhLmQsQkQoZi5kZCgpLDQ2KSk6RWtiKGEuZyxCRChmLmRkKCksNDYpKX1NVWIoYSxhLmQpO01VYihhLGEuZyk7YS5jPW5ldyBDVmIoYS5iKTtBVmIoYS5jLCh4VWIoKSx3VWIpKTtSVWIoYSxhLmQpO1JVYihhLGEuZyk7R2tiKGIsYS5jLmEuYik7YS5lPW5ldyBmN2MoUGplLFBqZSk7YS5hPW5ldyBmN2MoUWplLFFqZSk7Zm9yKGQ9bmV3IG9sYihiKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksODEpO2EuZS5hPSR3bmQuTWF0aC5taW4oYS5lLmEsYy5nLmMpO2EuZS5iPSR3bmQuTWF0aC5taW4oYS5lLmIsYy5nLmQpO2EuYS5hPSR3bmQuTWF0aC5tYXgoYS5hLmEsYy5nLmMrYy5nLmIpO2EuYS5iPSR3bmQuTWF0aC5tYXgoYS5hLmIsYy5nLmQrYy5nLmEpfXpWYihhLmMsbmV3IFlVYik7aD0wO2Rve2U9T1ViKGEpOysraH13aGlsZSgoaDwyfHxlPlFpZSkmJmg8MTApO3pWYihhLmMsbmV3IF9VYik7T1ViKGEpO3ZWYihhLmMpO3lVYihhLmYpfVxuZnVuY3Rpb24gc1piKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2lmKCFDY2IoREQodk5iKGMsKE55YygpLGZ4YykpKSkpe3JldHVybn1mb3IoaD1uZXcgb2xiKGMuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDExKTttPWtfYihnLmcpO2ZvcihqPW0saz0wLGw9ai5sZW5ndGg7azxsOysrayl7aT1qW2tdO2Y9aS5kLmk9PWM7ZT1mJiZDY2IoREQodk5iKGksZ3hjKSkpO2lmKGUpe289aS5jO249QkQoT2hiKGEuYixvKSwxMCk7aWYoIW4pe249WiRiKG8sKGRjZCgpLGJjZCksby5qLC0xLG51bGwsbnVsbCxvLm8sQkQodk5iKGIsTHdjKSwxMDMpLGIpO3lOYihuLCh3dGMoKSwkc2MpLG8pO1JoYihhLmIsbyxuKTtFa2IoYi5hLG4pfXE9aS5kO3A9QkQoT2hiKGEuYixxKSwxMCk7aWYoIXApe3A9WiRiKHEsKGRjZCgpLGJjZCkscS5qLDEsbnVsbCxudWxsLHEubyxCRCh2TmIoYixMd2MpLDEwMyksYik7eU5iKHAsKHd0YygpLCRzYykscSk7UmhiKGEuYixxLHApO0VrYihiLmEscCl9ZD1rWmIoaSk7UVpiKGQsQkQoSWtiKG4uaiwwKSwxMSkpO1JaYihkLEJEKElrYihwLmosMCksMTEpKTtSYyhhLmEsaSxuZXcgQlpiKGQsYiwoS0FjKCksSUFjKSkpO0JEKHZOYihiLCh3dGMoKSxLc2MpKSwyMSkuRmMoKE9yYygpLEhyYykpfX19fVxuZnVuY3Rpb24gVzliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG87T2RkKGMsJ0xhYmVsIGR1bW15IHN3aXRjaGluZycsMSk7ZD1CRCh2TmIoYiwoTnljKCksT3djKSksMjI3KTtKOWIoYik7ZT1UOWIoYixkKTthLmE9S0MoVUQsVmplLDI1LGIuYi5jLmxlbmd0aCwxNSwxKTtmb3IoaD0oQXBjKCksT0MoR0MoRVcsMSksS2llLDIyNywwLFt3cGMseXBjLHZwYyx4cGMsenBjLHVwY10pKSxrPTAsbj1oLmxlbmd0aDtrPG47KytrKXtmPWhba107aWYoKGY9PXpwY3x8Zj09dXBjfHxmPT14cGMpJiYhQkQodXFiKGUuYSxmKT9lLmJbZi5nXTpudWxsLDE1KS5kYygpKXtNOWIoYSxiKTticmVha319Zm9yKGk9T0MoR0MoRVcsMSksS2llLDIyNywwLFt3cGMseXBjLHZwYyx4cGMsenBjLHVwY10pLGw9MCxvPWkubGVuZ3RoO2w8bzsrK2wpe2Y9aVtsXTtmPT16cGN8fGY9PXVwY3x8Zj09eHBjfHxYOWIoYSxCRCh1cWIoZS5hLGYpP2UuYltmLmddOm51bGwsMTUpKX1mb3IoZz1PQyhHQyhFVywxKSxLaWUsMjI3LDAsW3dwYyx5cGMsdnBjLHhwYyx6cGMsdXBjXSksaj0wLG09Zy5sZW5ndGg7ajxtOysrail7Zj1nW2pdOyhmPT16cGN8fGY9PXVwY3x8Zj09eHBjKSYmWDliKGEsQkQodXFiKGUuYSxmKT9lLmJbZi5nXTpudWxsLDE1KSl9YS5hPW51bGw7UWRkKGMpfVxuZnVuY3Rpb24gQUZjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtzd2l0Y2goYS5rLmcpe2Nhc2UgMTpkPUJEKHZOYihhLCh3dGMoKSwkc2MpKSwxNyk7Yz1CRCh2TmIoZCxfc2MpLDc0KTshYz8oYz1uZXcgczdjKTpDY2IoREQodk5iKGQsbHRjKSkpJiYoYz13N2MoYykpO2o9QkQodk5iKGEsVnNjKSwxMSk7aWYoail7az1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbai5pLm4sai5uLGouYV0pKTtpZihiPD1rLmEpe3JldHVybiBrLmJ9R3NiKGMsayxjLmEsYy5hLmEpfWw9QkQodk5iKGEsV3NjKSwxMSk7aWYobCl7bT1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbbC5pLm4sbC5uLGwuYV0pKTtpZihtLmE8PWIpe3JldHVybiBtLmJ9R3NiKGMsbSxjLmMuYixjLmMpfWlmKGMuYj49Mil7aT1Kc2IoYywwKTtnPUJEKFhzYihpKSw4KTtoPUJEKFhzYihpKSw4KTt3aGlsZShoLmE8YiYmaS5iIT1pLmQuYyl7Zz1oO2g9QkQoWHNiKGkpLDgpfXJldHVybiBnLmIrKGItZy5hKS8oaC5hLWcuYSkqKGguYi1nLmIpfWJyZWFrO2Nhc2UgMzpmPUJEKHZOYihCRChJa2IoYS5qLDApLDExKSwod3RjKCksJHNjKSksMTEpO2U9Zi5pO3N3aXRjaChmLmouZyl7Y2FzZSAxOnJldHVybiBlLm4uYjtjYXNlIDM6cmV0dXJuIGUubi5iK2Uuby5iO319cmV0dXJuIFRfYihhKS5ifVxuZnVuY3Rpb24gV2djKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7Zm9yKGc9bmV3IG9sYihhLmQuYik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDI5KTtmb3IoaT1uZXcgb2xiKGYuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtpZihDY2IoREQodk5iKGgsKE55YygpLHB3YykpKSkpe2lmKCFRcShPX2IoaCkpKXtkPUJEKE9xKE9fYihoKSksMTcpO2s9ZC5jLmk7az09aCYmKGs9ZC5kLmkpO2w9bmV3IHZnZChrLGM3YyhSNmMoaC5uKSxrLm4pKTtSaGIoYS5iLGgsbCk7Y29udGludWV9fWU9bmV3IEo2YyhoLm4uYS1oLmQuYixoLm4uYi1oLmQuZCxoLm8uYStoLmQuYitoLmQuYyxoLm8uYitoLmQuZCtoLmQuYSk7Yj12RGIoeURiKHdEYih4RGIobmV3IHpEYixoKSxlKSxGZ2MpLGEuYSk7cERiKHFEYihyRGIobmV3IHNEYixPQyhHQyhQTSwxKSxVaGUsNTcsMCxbYl0pKSxiKSxhLmEpO2o9bmV3IGxFYjtSaGIoYS5lLGIsaik7Yz1zcihuZXcgU3IodXIoUl9iKGgpLmEuS2MoKSxuZXcgU3EpKSktc3IobmV3IFNyKHVyKFVfYihoKS5hLktjKCksbmV3IFNxKSkpO2M8MD9qRWIoaix0cnVlLChlYWQoKSxhYWQpKTpjPjAmJmpFYihqLHRydWUsKGVhZCgpLGJhZCkpO2guaz09KGowYigpLGUwYikmJmtFYihqKTtSaGIoYS5mLGgsYil9fX1cbmZ1bmN0aW9uIEJiYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07T2RkKGMsJ05vZGUgcHJvbW90aW9uIGhldXJpc3RpYycsMSk7YS5nPWI7QWJjKGEpO2EucT1CRCh2TmIoYiwoTnljKCkscnhjKSksMjYwKTtrPUJEKHZOYihhLmcscXhjKSwxOSkuYTtmPW5ldyBKYmM7c3dpdGNoKGEucS5nKXtjYXNlIDI6Y2FzZSAxOkRiYyhhLGYpO2JyZWFrO2Nhc2UgMzphLnE9KGtBYygpLGpBYyk7RGJjKGEsZik7aT0wO2ZvcihoPW5ldyBvbGIoYS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTkpO2k9JHduZC5NYXRoLm1heChpLGcuYSl9aWYoaT5hLmope2EucT1kQWM7RGJjKGEsZil9YnJlYWs7Y2FzZSA0OmEucT0oa0FjKCksakFjKTtEYmMoYSxmKTtqPTA7Zm9yKGU9bmV3IG9sYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUVEKG1sYihlKSk7aj0kd25kLk1hdGgubWF4KGosKHVDYihkKSxkKSl9aWYoaj5hLmspe2EucT1nQWM7RGJjKGEsZil9YnJlYWs7Y2FzZSA2Om09UUQoJHduZC5NYXRoLmNlaWwoYS5mLmxlbmd0aCprLzEwMCkpO0RiYyhhLG5ldyBNYmMobSkpO2JyZWFrO2Nhc2UgNTpsPVFEKCR3bmQuTWF0aC5jZWlsKGEuZCprLzEwMCkpO0RiYyhhLG5ldyBQYmMobCkpO2JyZWFrO2RlZmF1bHQ6RGJjKGEsZik7fUViYyhhLGIpO1FkZChjKX1cbmZ1bmN0aW9uIGZGYyhhLGIsYyl7dmFyIGQsZSxmLGc7dGhpcy5qPWE7dGhpcy5lPVdaYihhKTt0aGlzLm89dGhpcy5qLmU7dGhpcy5pPSEhdGhpcy5vO3RoaXMucD10aGlzLmk/QkQoSWtiKGMsUV9iKHRoaXMubykucCksMjE0KTpudWxsO2U9QkQodk5iKGEsKHd0YygpLEtzYykpLDIxKTt0aGlzLmc9ZS5IYygoT3JjKCksSHJjKSk7dGhpcy5iPW5ldyBSa2I7dGhpcy5kPW5ldyBySGModGhpcy5lKTtnPUJEKHZOYih0aGlzLmosanRjKSwyMzApO3RoaXMucT13RmMoYixnLHRoaXMuZSk7dGhpcy5rPW5ldyBCR2ModGhpcyk7Zj1PdShPQyhHQyhxWSwxKSxVaGUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSk7aWYoYj09KHJHYygpLG9HYykmJiFDY2IoREQodk5iKGEsKE55YygpLEF3YykpKSkpe2Q9bmV3IFNFYyh0aGlzLmUpO2YuY1tmLmMubGVuZ3RoXT1kO3RoaXMuYz1uZXcgdUVjKGQsZyxCRCh0aGlzLnEsNDAyKSl9ZWxzZSBpZihiPT1vR2MmJkNjYihERCh2TmIoYSwoTnljKCksQXdjKSkpKSl7ZD1uZXcgU0VjKHRoaXMuZSk7Zi5jW2YuYy5sZW5ndGhdPWQ7dGhpcy5jPW5ldyBYR2MoZCxnLEJEKHRoaXMucSw0MDIpKX1lbHNle3RoaXMuYz1uZXcgT2ljKGIsdGhpcyl9RWtiKGYsdGhpcy5jKTskSWMoZix0aGlzLmUpO3RoaXMucz1BR2ModGhpcy5rKX1cbmZ1bmN0aW9uIHhVYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O2w9QkQocHIoKGc9SnNiKChuZXcgWlJjKGIpKS5hLmQsMCksbmV3IGFTYyhnKSkpLDg2KTtvPWw/QkQodk5iKGwsKG1UYygpLF9TYykpLDg2KTpudWxsO2U9MTt3aGlsZSghIWwmJiEhbyl7aT0wO3U9MDtjPWw7ZD1vO2ZvcihoPTA7aDxlO2grKyl7Yz1WUmMoYyk7ZD1WUmMoZCk7dSs9RWRiKEVEKHZOYihjLChtVGMoKSxjVGMpKSkpO2krPUVkYihFRCh2TmIoZCxjVGMpKSl9dD1FZGIoRUQodk5iKG8sKG1UYygpLGZUYykpKSk7cz1FZGIoRUQodk5iKGwsZlRjKSkpO209elVjKGwsbyk7bj10K2krYS5hK20tcy11O2lmKDA8bil7aj1iO2s9MDt3aGlsZSghIWomJmohPWQpeysraztqPUJEKHZOYihqLGFUYyksODYpfWlmKGope3I9bi9rO2o9Yjt3aGlsZShqIT1kKXtxPUVkYihFRCh2TmIoaixmVGMpKSkrbjt5TmIoaixmVGMscSk7cD1FZGIoRUQodk5iKGosY1RjKSkpK247eU5iKGosY1RjLHApO24tPXI7aj1CRCh2TmIoaixhVGMpLDg2KX19ZWxzZXtyZXR1cm59fSsrZTtsLmQuYj09MD8obD1KUmMobmV3IFpSYyhiKSxlKSk6KGw9QkQocHIoKGY9SnNiKChuZXcgWlJjKGwpKS5hLmQsMCksbmV3IGFTYyhmKSkpLDg2KSk7bz1sP0JEKHZOYihsLF9TYyksODYpOm51bGx9fVxuZnVuY3Rpb24gQ2JjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7aT10cnVlO2U9MDtqPWEuZltiLnBdO2s9Yi5vLmIrYS5uO2M9YS5jW2IucF1bMl07TmtiKGEuYSxqLG1lYihCRChJa2IoYS5hLGopLDE5KS5hLTErYykpO05rYihhLmIsaixFZGIoRUQoSWtiKGEuYixqKSkpLWsrYyphLmUpOysrajtpZihqPj1hLmkpeysrYS5pO0VrYihhLmEsbWViKDEpKTtFa2IoYS5iLGspfWVsc2V7ZD1hLmNbYi5wXVsxXTtOa2IoYS5hLGosbWViKEJEKElrYihhLmEsaiksMTkpLmErMS1kKSk7TmtiKGEuYixqLEVkYihFRChJa2IoYS5iLGopKSkray1kKmEuZSl9KGEucT09KGtBYygpLGRBYykmJihCRChJa2IoYS5hLGopLDE5KS5hPmEuanx8QkQoSWtiKGEuYSxqLTEpLDE5KS5hPmEuail8fGEucT09Z0FjJiYoRWRiKEVEKElrYihhLmIsaikpKT5hLmt8fEVkYihFRChJa2IoYS5iLGotMSkpKT5hLmspKSYmKGk9ZmFsc2UpO2ZvcihnPW5ldyBTcih1cihSX2IoYikuYS5LYygpLG5ldyBTcSkpO1FyKGcpOyl7Zj1CRChScihnKSwxNyk7aD1mLmMuaTtpZihhLmZbaC5wXT09ail7bD1DYmMoYSxoKTtlPWUrQkQobC5hLDE5KS5hO2k9aSYmQ2NiKEREKGwuYikpfX1hLmZbYi5wXT1qO2U9ZSthLmNbYi5wXVswXTtyZXR1cm4gbmV3IHZnZChtZWIoZSksKEJjYigpLGk/dHJ1ZTpmYWxzZSkpfVxuZnVuY3Rpb24gc1BjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7bD1uZXcgTHFiO2c9bmV3IFJrYjtxUGMoYSxjLGEuZC5mZygpLGcsbCk7cVBjKGEsZCxhLmQuZ2coKSxnLGwpO2EuYj0wLjIqKHA9clBjKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihnLDE2KSksbmV3IHhQYykpLHE9clBjKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihnLDE2KSksbmV3IHpQYykpLCR3bmQuTWF0aC5taW4ocCxxKSk7Zj0wO2ZvcihoPTA7aDxnLmMubGVuZ3RoLTE7aCsrKXtpPSh0Q2IoaCxnLmMubGVuZ3RoKSxCRChnLmNbaF0sMTEyKSk7Zm9yKG89aCsxO288Zy5jLmxlbmd0aDtvKyspe2YrPXBQYyhhLGksKHRDYihvLGcuYy5sZW5ndGgpLEJEKGcuY1tvXSwxMTIpKSl9fW09QkQodk5iKGIsKHd0YygpLGp0YykpLDIzMCk7Zj49MiYmKHI9V05jKGcsdHJ1ZSxtKSwhYS5lJiYoYS5lPW5ldyBaT2MoYSkpLFZPYyhhLmUscixnLGEuYiksdW5kZWZpbmVkKTt1UGMoZyxtKTt3UGMoZyk7bj0tMTtmb3Ioaz1uZXcgb2xiKGcpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMTIpO2lmKCR3bmQuTWF0aC5hYnMoai5zLWouYyk8cW1lKXtjb250aW51ZX1uPSR3bmQuTWF0aC5tYXgobixqLm8pO2EuZC5kZyhqLGUsYS5jKX1hLmQuYS5hLiRiKCk7cmV0dXJuIG4rMX1cbmZ1bmN0aW9uIGFVYihhLGIpe3ZhciBjLGQsZSxmLGc7Yz1FZGIoRUQodk5iKGIsKE55YygpLGx5YykpKSk7YzwyJiZ5TmIoYixseWMsMik7ZD1CRCh2TmIoYixMd2MpLDEwMyk7ZD09KGVhZCgpLGNhZCkmJnlOYihiLEx3YyxhX2IoYikpO2U9QkQodk5iKGIsZnljKSwxOSk7ZS5hPT0wP3lOYihiLCh3dGMoKSxqdGMpLG5ldyBHdWIpOnlOYihiLCh3dGMoKSxqdGMpLG5ldyBIdWIoZS5hKSk7Zj1ERCh2TmIoYixBeGMpKTtmPT1udWxsJiZ5TmIoYixBeGMsKEJjYigpLFBEKHZOYihiLFN3YykpPT09UEQoKEFhZCgpLHdhZCkpP3RydWU6ZmFsc2UpKTtNQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYi5hLDE2KSksbmV3IGRVYihhKSk7TUFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmIsMTYpKSxuZXcgZlViKSxuZXcgaFViKGEpKTtnPW5ldyBvQmMoYik7eU5iKGIsKHd0YygpLG90YyksZyk7SDJjKGEuYSk7SzJjKGEuYSwocVViKCksbFViKSxCRCh2TmIoYixKd2MpLDI0NikpO0syYyhhLmEsbVViLEJEKHZOYihiLHN4YyksMjQ2KSk7SzJjKGEuYSxuVWIsQkQodk5iKGIsSXdjKSwyNDYpKTtLMmMoYS5hLG9VYixCRCh2TmIoYixFeGMpLDI0NikpO0syYyhhLmEscFViLGtOYyhCRCh2TmIoYixTd2MpLDIxOCkpKTtFMmMoYS5hLF9UYihiKSk7eU5iKGIsaXRjLEYyYyhhLmEsYikpfVxuZnVuY3Rpb24gZmpjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O2lmKG09YS5jW2JdLG49YS5jW2NdLChvPUJEKHZOYihtLCh3dGMoKSxRc2MpKSwxNSksISFvJiZvLmdjKCkhPTAmJm8uSGMobikpfHwocD1tLmshPShqMGIoKSxnMGIpJiZuLmshPWcwYixxPUJEKHZOYihtLFBzYyksMTApLHI9QkQodk5iKG4sUHNjKSwxMCkscz1xIT1yLHQ9ISFxJiZxIT1tfHwhIXImJnIhPW4sdT1namMobSwoVWNkKCksQWNkKSksdj1namMobixSY2QpLHQ9dHwoZ2pjKG0sUmNkKXx8Z2pjKG4sQWNkKSksdz10JiZzfHx1fHx2LHAmJncpfHxtLms9PShqMGIoKSxpMGIpJiZuLms9PWgwYnx8bi5rPT0oajBiKCksaTBiKSYmbS5rPT1oMGIpe3JldHVybiBmYWxzZX1rPWEuY1tiXTtmPWEuY1tjXTtlPUxIYyhhLmUsayxmLChVY2QoKSxUY2QpKTtpPUxIYyhhLmksayxmLHpjZCk7WWljKGEuZixrLGYpO2o9SGljKGEuYixrLGYpK0JEKGUuYSwxOSkuYStCRChpLmEsMTkpLmErYS5mLmQ7aD1IaWMoYS5iLGYsaykrQkQoZS5iLDE5KS5hK0JEKGkuYiwxOSkuYSthLmYuYjtpZihhLmEpe2w9QkQodk5iKGssJHNjKSwxMSk7Zz1CRCh2TmIoZiwkc2MpLDExKTtkPUpIYyhhLmcsbCxnKTtqKz1CRChkLmEsMTkpLmE7aCs9QkQoZC5iLDE5KS5hfXJldHVybiBqPmh9XG5mdW5jdGlvbiBrNmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2M9QkQodk5iKGEsKE55YygpLFZ4YykpLDk4KTtnPWEuZjtmPWEuZDtoPWcuYStmLmIrZi5jO2k9MC1mLmQtYS5jLmI7az1nLmIrZi5kK2YuYS1hLmMuYjtqPW5ldyBSa2I7bD1uZXcgUmtiO2ZvcihlPW5ldyBvbGIoYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEwKTtzd2l0Y2goYy5nKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzphNmIoZCk7YnJlYWs7Y2FzZSA0Om09QkQodk5iKGQsVHhjKSw4KTtuPSFtPzA6bS5hO2Qubi5hPWgqRWRiKEVEKHZOYihkLCh3dGMoKSxodGMpKSkpLW47TV9iKGQsdHJ1ZSxmYWxzZSk7YnJlYWs7Y2FzZSA1Om89QkQodk5iKGQsVHhjKSw4KTtwPSFvPzA6by5hO2Qubi5hPUVkYihFRCh2TmIoZCwod3RjKCksaHRjKSkpKS1wO01fYihkLHRydWUsZmFsc2UpO2cuYT0kd25kLk1hdGgubWF4KGcuYSxkLm4uYStkLm8uYS8yKTt9c3dpdGNoKEJEKHZOYihkLCh3dGMoKSxIc2MpKSw2MSkuZyl7Y2FzZSAxOmQubi5iPWk7ai5jW2ouYy5sZW5ndGhdPWQ7YnJlYWs7Y2FzZSAzOmQubi5iPWs7bC5jW2wuYy5sZW5ndGhdPWQ7fX1zd2l0Y2goYy5nKXtjYXNlIDE6Y2FzZSAyOmM2YihqLGEpO2M2YihsLGEpO2JyZWFrO2Nhc2UgMzppNmIoaixhKTtpNmIobCxhKTt9fVxuZnVuY3Rpb24gVkhjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7az1uZXcgUmtiO2w9bmV3IGprYjtmPW51bGw7ZT0wO2ZvcihkPTA7ZDxiLmxlbmd0aDsrK2Qpe2M9YltkXTtYSGMoZixjKSYmKGU9UUhjKGEsbCxrLEVIYyxlKSk7d05iKGMsKHd0YygpLFBzYykpJiYoZj1CRCh2TmIoYyxQc2MpLDEwKSk7c3dpdGNoKGMuay5nKXtjYXNlIDA6Zm9yKGk9VnEoTnEoVl9iKGMsKFVjZCgpLEFjZCkpLG5ldyBHSWMpKTt4YyhpKTspe2c9QkQoeWMoaSksMTEpO2EuZFtnLnBdPWUrKztrLmNbay5jLmxlbmd0aF09Z31lPVFIYyhhLGwsayxFSGMsZSk7Zm9yKGo9VnEoTnEoVl9iKGMsUmNkKSxuZXcgR0ljKSk7eGMoaik7KXtnPUJEKHljKGopLDExKTthLmRbZy5wXT1lKys7ay5jW2suYy5sZW5ndGhdPWd9YnJlYWs7Y2FzZSAzOmlmKCFWX2IoYyxESGMpLmRjKCkpe2c9QkQoVl9iKGMsREhjKS5YYigwKSwxMSk7YS5kW2cucF09ZSsrO2suY1trLmMubGVuZ3RoXT1nfVZfYihjLEVIYykuZGMoKXx8V2piKGwsYyk7YnJlYWs7Y2FzZSAxOmZvcihoPVZfYihjLChVY2QoKSxUY2QpKS5LYygpO2guT2IoKTspe2c9QkQoaC5QYigpLDExKTthLmRbZy5wXT1lKys7ay5jW2suYy5sZW5ndGhdPWd9Vl9iKGMsemNkKS5KYyhuZXcgRUljKGwsYykpO319UUhjKGEsbCxrLEVIYyxlKTtyZXR1cm4ga31cbmZ1bmN0aW9uIHkkYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7aj1QamU7az1QamU7aD1RamU7aT1RamU7Zm9yKG09bmV3IG9sYihiLmkpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSw2NSk7ZT1CRChCRChPaGIoYS5nLGwuYSksNDYpLmIsMzMpO2JsZChlLGwuYi5jLGwuYi5kKTtqPSR3bmQuTWF0aC5taW4oaixlLmkpO2s9JHduZC5NYXRoLm1pbihrLGUuaik7aD0kd25kLk1hdGgubWF4KGgsZS5pK2UuZyk7aT0kd25kLk1hdGgubWF4KGksZS5qK2UuZil9bj1CRChoa2QoYS5jLChkMGMoKSxXX2MpKSwxMTYpO0FmZChhLmMsaC1qKyhuLmIrbi5jKSxpLWsrKG4uZCtuLmEpLHRydWUsdHJ1ZSk7RWZkKGEuYywtaituLmIsLWsrbi5kKTtmb3IoZD1uZXcgRnlkKFdvZChhLmMpKTtkLmUhPWQuaS5nYygpOyl7Yz1CRChEeWQoZCksNzkpO2c9aXRkKGMsdHJ1ZSx0cnVlKTtvPWp0ZChjKTtxPWx0ZChjKTtwPW5ldyBmN2Moby5pK28uZy8yLG8uaitvLmYvMik7Zj1uZXcgZjdjKHEuaStxLmcvMixxLmorcS5mLzIpO3I9YzdjKG5ldyBmN2MoZi5hLGYuYikscCk7bDZjKHIsby5nLG8uZik7UDZjKHAscik7cz1jN2MobmV3IGY3YyhwLmEscC5iKSxmKTtsNmMocyxxLmcscS5mKTtQNmMoZixzKTtubWQoZyxwLmEscC5iKTtnbWQoZyxmLmEsZi5iKX19XG5mdW5jdGlvbiBFWWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbzthLmM9YS5kO289REQodk5iKGIsKE55YygpLGd5YykpKTtuPW89PW51bGx8fCh1Q2Iobyksbyk7Zj1CRCh2TmIoYiwod3RjKCksS3NjKSksMjEpLkhjKChPcmMoKSxIcmMpKTtlPUJEKHZOYihiLFZ4YyksOTgpO2M9IShlPT0oZGNkKCksWmJkKXx8ZT09X2JkfHxlPT0kYmQpO2lmKG4mJihjfHwhZikpe2ZvcihsPW5ldyBvbGIoYi5hKTtsLmE8bC5jLmMubGVuZ3RoOyl7aj1CRChtbGIobCksMTApO2oucD0wfW09bmV3IFJrYjtmb3Ioaz1uZXcgb2xiKGIuYSk7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDEwKTtkPURZYihhLGosbnVsbCk7aWYoZCl7aT1uZXcgWFpiO3ROYihpLGIpO3lOYihpLEVzYyxCRChkLmIsMjEpKTt1X2IoaS5kLGIuZCk7eU5iKGksSHhjLG51bGwpO2ZvcihoPUJEKGQuYSwxNSkuS2MoKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwxMCk7RWtiKGkuYSxnKTtnLmE9aX1tLkZjKGkpfX1mJiYoUEQodk5iKGIsdHdjKSk9PT1QRCgoUlhiKCksT1hiKSk/KGEuYz1hLmIpOihhLmM9YS5hKSl9ZWxzZXttPW5ldyBhbWIoT0MoR0MoS1EsMSksY25lLDM3LDAsW2JdKSl9UEQodk5iKGIsdHdjKSkhPT1QRCgoUlhiKCksUVhiKSkmJihtbWIoKSxtLmFkKG5ldyBIWWIpKTtyZXR1cm4gbX1cbmZ1bmN0aW9uIEtUYyhhKXtyNGMoYSxuZXcgRTNjKFEzYyhMM2MoUDNjKE0zYyhPM2MoTjNjKG5ldyBSM2MsYXJlKSwnRUxLIE1yLiBUcmVlJyksXCJUcmVlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBDb21wdXRlcyBhIHNwYW5uaW5nIHRyZWUgb2YgdGhlIGlucHV0IGdyYXBoIGFuZCBhcnJhbmdlcyBhbGwgbm9kZXMgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRpbmcgcGFyZW50LWNoaWxkcmVuIGhpZXJhcmNoeS4gSSBwaXR5IHRoZSBmb29sIHdobyBkb2Vzbid0IHVzZSBNci4gVHJlZSBMYXlvdXQuXCIpLG5ldyBOVGMpLGJyZSkscHFiKChDc2QoKSx3c2QpKSkpKTtwNGMoYSxhcmUsYW1lLENUYyk7cDRjKGEsYXJlLHdtZSwyMCk7cDRjKGEsYXJlLF9sZSx0bWUpO3A0YyhhLGFyZSx2bWUsbWViKDEpKTtwNGMoYSxhcmUsem1lLChCY2IoKSx0cnVlKSk7cDRjKGEsYXJlLFpwZSxLc2QodlRjKSk7cDRjKGEsYXJlLEZtZSxLc2QoeFRjKSk7cDRjKGEsYXJlLFRtZSxLc2QoeVRjKSk7cDRjKGEsYXJlLEVtZSxLc2QoelRjKSk7cDRjKGEsYXJlLEdtZSxLc2Qod1RjKSk7cDRjKGEsYXJlLERtZSxLc2QoQVRjKSk7cDRjKGEsYXJlLEhtZSxLc2QoRFRjKSk7cDRjKGEsYXJlLFpxZSxLc2QoSVRjKSk7cDRjKGEsYXJlLCRxZSxLc2QoRlRjKSl9XG5mdW5jdGlvbiB6b2QoYSl7aWYoYS5xKXJldHVybjthLnE9dHJ1ZTthLnA9TG5kKGEsMCk7YS5hPUxuZChhLDEpO1FuZChhLmEsMCk7YS5mPUxuZChhLDIpO1FuZChhLmYsMSk7S25kKGEuZiwyKTthLm49TG5kKGEsMyk7S25kKGEubiwzKTtLbmQoYS5uLDQpO0tuZChhLm4sNSk7S25kKGEubiw2KTthLmc9TG5kKGEsNCk7UW5kKGEuZyw3KTtLbmQoYS5nLDgpO2EuYz1MbmQoYSw1KTtRbmQoYS5jLDcpO1FuZChhLmMsOCk7YS5pPUxuZChhLDYpO1FuZChhLmksOSk7UW5kKGEuaSwxMCk7UW5kKGEuaSwxMSk7UW5kKGEuaSwxMik7S25kKGEuaSwxMyk7YS5qPUxuZChhLDcpO1FuZChhLmosOSk7YS5kPUxuZChhLDgpO1FuZChhLmQsMyk7UW5kKGEuZCw0KTtRbmQoYS5kLDUpO1FuZChhLmQsNik7S25kKGEuZCw3KTtLbmQoYS5kLDgpO0tuZChhLmQsOSk7S25kKGEuZCwxMCk7YS5iPUxuZChhLDkpO0tuZChhLmIsMCk7S25kKGEuYiwxKTthLmU9TG5kKGEsMTApO0tuZChhLmUsMSk7S25kKGEuZSwyKTtLbmQoYS5lLDMpO0tuZChhLmUsNCk7UW5kKGEuZSw1KTtRbmQoYS5lLDYpO1FuZChhLmUsNyk7UW5kKGEuZSw4KTtRbmQoYS5lLDkpO1FuZChhLmUsMTApO0tuZChhLmUsMTEpO2Euaz1MbmQoYSwxMSk7S25kKGEuaywwKTtLbmQoYS5rLDEpO2Eubz1NbmQoYSwxMik7YS5zPU1uZChhLDEzKX1cbmZ1bmN0aW9uIEFVYihhLGIpe2IuZGMoKSYmSFZiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLChVY2QoKSxHY2QpKSYmSFZiKGEuaix0cnVlLHRydWUsdHJ1ZSxmYWxzZSk7cGIoYixCY2QpJiZIVmIoYS5qLGZhbHNlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLE9jZCkmJkhWYihhLmosdHJ1ZSx0cnVlLGZhbHNlLHRydWUpO3BiKGIsUWNkKSYmSFZiKGEuaix0cnVlLGZhbHNlLHRydWUsdHJ1ZSk7cGIoYixIY2QpJiZIVmIoYS5qLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSk7cGIoYixDY2QpJiZIVmIoYS5qLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7cGIoYixQY2QpJiZIVmIoYS5qLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7cGIoYixOY2QpJiZIVmIoYS5qLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7cGIoYixMY2QpJiZIVmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpO3BiKGIsRWNkKSYmSFZiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLExjZCkmJkhWYihhLmosdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7cGIoYixEY2QpJiZIVmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpO3BiKGIsTWNkKSYmSFZiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLEtjZCkmJkhWYihhLmosdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7cGIoYixKY2QpJiZIVmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpfVxuZnVuY3Rpb24gclpiKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2Y9bmV3IFJrYjtmb3Ioaj1uZXcgb2xiKGQpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihqKSw0NDEpO2c9bnVsbDtpZihoLmY9PShLQWMoKSxJQWMpKXtmb3Iobz1uZXcgb2xiKGguZSk7by5hPG8uYy5jLmxlbmd0aDspe249QkQobWxiKG8pLDE3KTtxPW4uZC5pO2lmKFFfYihxKT09Yil7aVpiKGEsYixoLG4saC5iLG4uZCl9ZWxzZSBpZighY3x8Zl9iKHEsYykpe2paYihhLGIsaCxkLG4pfWVsc2V7bT1vWmIoYSxiLGMsbixoLmIsSUFjLGcpO20hPWcmJihmLmNbZi5jLmxlbmd0aF09bSx0cnVlKTttLmMmJihnPW0pfX19ZWxzZXtmb3IobD1uZXcgb2xiKGguZSk7bC5hPGwuYy5jLmxlbmd0aDspe2s9QkQobWxiKGwpLDE3KTtwPWsuYy5pO2lmKFFfYihwKT09Yil7aVpiKGEsYixoLGssay5jLGguYil9ZWxzZSBpZighY3x8Zl9iKHAsYykpe2NvbnRpbnVlfWVsc2V7bT1vWmIoYSxiLGMsayxoLmIsSEFjLGcpO20hPWcmJihmLmNbZi5jLmxlbmd0aF09bSx0cnVlKTttLmMmJihnPW0pfX19fWZvcihpPW5ldyBvbGIoZik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDQ0MSk7SmtiKGIuYSxoLmEsMCkhPS0xfHxFa2IoYi5hLGguYSk7aC5jJiYoZS5jW2UuYy5sZW5ndGhdPWgsdHJ1ZSl9fVxuZnVuY3Rpb24gU0pjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtqPW5ldyBSa2I7Zm9yKGk9bmV3IG9sYihiLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihpKSwxMCk7Zm9yKG09Vl9iKGcsKFVjZCgpLHpjZCkpLktjKCk7bS5PYigpOyl7bD1CRChtLlBiKCksMTEpO2ZvcihlPW5ldyBvbGIobC5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTcpO2lmKCFPWmIoZCkmJmQuYy5pLmM9PWQuZC5pLmN8fE9aYihkKXx8ZC5kLmkuYyE9Yyl7Y29udGludWV9ai5jW2ouYy5sZW5ndGhdPWR9fX1mb3IoaD1TdShjLmEpLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTApO2ZvcihtPVZfYihnLChVY2QoKSxUY2QpKS5LYygpO20uT2IoKTspe2w9QkQobS5QYigpLDExKTtmb3IoZT1uZXcgb2xiKGwuZSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE3KTtpZighT1piKGQpJiZkLmMuaS5jPT1kLmQuaS5jfHxPWmIoZCl8fGQuYy5pLmMhPWIpe2NvbnRpbnVlfWs9bmV3IEJpYihqLGouYy5sZW5ndGgpO2Y9KHNDYihrLmI+MCksQkQoay5hLlhiKGsuYz0tLWsuYiksMTcpKTt3aGlsZShmIT1kJiZrLmI+MCl7YS5hW2YucF09dHJ1ZTthLmFbZC5wXT10cnVlO2Y9KHNDYihrLmI+MCksQkQoay5hLlhiKGsuYz0tLWsuYiksMTcpKX1rLmI+MCYmdWliKGspfX19fVxuZnVuY3Rpb24gVm1kKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG07aWYoYi5hIT1jLkFqKCkpe3Rocm93IHZiYihuZXcgV2RiKHR0ZStjLm5lKCkrdXRlKSl9ZT1vMWQoKE82ZCgpLE02ZCksYykuJGsoKTtpZihlKXtyZXR1cm4gZS5BaigpLk5oKCkuSWgoZSxkKX1oPW8xZChNNmQsYykuYWwoKTtpZihoKXtpZihkPT1udWxsKXtyZXR1cm4gbnVsbH1pPUJEKGQsMTUpO2lmKGkuZGMoKSl7cmV0dXJuICcnfW09bmV3IEhmYjtmb3IoZz1pLktjKCk7Zy5PYigpOyl7Zj1nLlBiKCk7RWZiKG0saC5BaigpLk5oKCkuSWgoaCxmKSk7bS5hKz0nICd9cmV0dXJuIGxjYihtLG0uYS5sZW5ndGgtMSl9bD1vMWQoTTZkLGMpLmJsKCk7aWYoIWwuZGMoKSl7Zm9yKGs9bC5LYygpO2suT2IoKTspe2o9QkQoay5QYigpLDE0OCk7aWYoai53aihkKSl7dHJ5e209ai5BaigpLk5oKCkuSWgoaixkKTtpZihtIT1udWxsKXtyZXR1cm4gbX19Y2F0Y2goYSl7YT11YmIoYSk7aWYoIUpEKGEsMTAyKSl0aHJvdyB2YmIoYSl9fX10aHJvdyB2YmIobmV3IFdkYihcIkludmFsaWQgdmFsdWU6ICdcIitkK1wiJyBmb3IgZGF0YXR5cGUgOlwiK2MubmUoKSkpfUJEKGMsODM0KS5GaigpO3JldHVybiBkPT1udWxsP251bGw6SkQoZCwxNzIpPycnK0JEKGQsMTcyKS5hOnJiKGQpPT0kSj9DUWQoUG1kWzBdLEJEKGQsMTk5KSk6ZmNiKGQpfVxuZnVuY3Rpb24gelFjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2o9bmV3IFBzYjtoPW5ldyBQc2I7Zm9yKGY9bmV3IG9sYihhKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZiksMTI4KTtkLnY9MDtkLm49ZC5pLmMubGVuZ3RoO2QudT1kLnQuYy5sZW5ndGg7ZC5uPT0wJiYoR3NiKGosZCxqLmMuYixqLmMpLHRydWUpO2QudT09MCYmZC5yLmEuZ2MoKT09MCYmKEdzYihoLGQsaC5jLmIsaC5jKSx0cnVlKX1nPS0xO3doaWxlKGouYiE9MCl7ZD1CRChWdChqLDApLDEyOCk7Zm9yKGM9bmV3IG9sYihkLnQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyNjgpO2s9Yi5iO2sudj0kd25kLk1hdGgubWF4KGsudixkLnYrMSk7Zz0kd25kLk1hdGgubWF4KGcsay52KTstLWsubjtrLm49PTAmJihHc2IoaixrLGouYy5iLGouYyksdHJ1ZSl9fWlmKGc+LTEpe2ZvcihlPUpzYihoLDApO2UuYiE9ZS5kLmM7KXtkPUJEKFhzYihlKSwxMjgpO2Qudj1nfXdoaWxlKGguYiE9MCl7ZD1CRChWdChoLDApLDEyOCk7Zm9yKGM9bmV3IG9sYihkLmkpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwyNjgpO2k9Yi5hO2lmKGkuci5hLmdjKCkhPTApe2NvbnRpbnVlfWkudj0kd25kLk1hdGgubWluKGkudixkLnYtMSk7LS1pLnU7aS51PT0wJiYoR3NiKGgsaSxoLmMuYixoLmMpLHRydWUpfX19fVxuZnVuY3Rpb24gQTZjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGk7aT1QamU7Zz1mYWxzZTtoPXY2YyhhLGM3YyhuZXcgZjdjKGIuYSxiLmIpLGEpLFA2YyhuZXcgZjdjKGMuYSxjLmIpLGUpLGM3YyhuZXcgZjdjKGQuYSxkLmIpLGMpKTtmPSEhaCYmISgkd25kLk1hdGguYWJzKGguYS1hLmEpPD1uc2UmJiR3bmQuTWF0aC5hYnMoaC5iLWEuYik8PW5zZXx8JHduZC5NYXRoLmFicyhoLmEtYi5hKTw9bnNlJiYkd25kLk1hdGguYWJzKGguYi1iLmIpPD1uc2UpO2g9djZjKGEsYzdjKG5ldyBmN2MoYi5hLGIuYiksYSksYyxlKTshIWgmJigoJHduZC5NYXRoLmFicyhoLmEtYS5hKTw9bnNlJiYkd25kLk1hdGguYWJzKGguYi1hLmIpPD1uc2UpPT0oJHduZC5NYXRoLmFicyhoLmEtYi5hKTw9bnNlJiYkd25kLk1hdGguYWJzKGguYi1iLmIpPD1uc2UpfHxmPyhpPSR3bmQuTWF0aC5taW4oaSxVNmMoYzdjKGgsYykpKSk6KGc9dHJ1ZSkpO2g9djZjKGEsYzdjKG5ldyBmN2MoYi5hLGIuYiksYSksZCxlKTshIWgmJihnfHwoJHduZC5NYXRoLmFicyhoLmEtYS5hKTw9bnNlJiYkd25kLk1hdGguYWJzKGguYi1hLmIpPD1uc2UpPT0oJHduZC5NYXRoLmFicyhoLmEtYi5hKTw9bnNlJiYkd25kLk1hdGguYWJzKGguYi1iLmIpPD1uc2UpfHxmKSYmKGk9JHduZC5NYXRoLm1pbihpLFU2YyhjN2MoaCxkKSkpKTtyZXR1cm4gaX1cbmZ1bmN0aW9uIGNUYihhKXtyNGMoYSxuZXcgRTNjKEwzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyxSbWUpLFNtZSksXCJNaW5pbWl6ZXMgdGhlIHN0cmVzcyB3aXRoaW4gYSBsYXlvdXQgdXNpbmcgc3RyZXNzIG1ham9yaXphdGlvbi4gU3RyZXNzIGV4aXN0cyBpZiB0aGUgZXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzIGRvZXNuJ3QgbWF0Y2ggdGhlaXIgZ3JhcGggdGhlb3JldGljIGRpc3RhbmNlLCB0aGF0IGlzLCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHRoZSB0d28gbm9kZXMuIFRoZSBtZXRob2QgYWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBlZGdlIGxlbmd0aHMuXCIpLG5ldyBmVGIpLHVtZSkpKTtwNGMoYSxSbWUsQW1lLEtzZChWU2IpKTtwNGMoYSxSbWUsQ21lLChCY2IoKSx0cnVlKSk7cDRjKGEsUm1lLEZtZSxLc2QoWVNiKSk7cDRjKGEsUm1lLFRtZSxLc2QoWlNiKSk7cDRjKGEsUm1lLEVtZSxLc2QoJFNiKSk7cDRjKGEsUm1lLEdtZSxLc2QoWFNiKSk7cDRjKGEsUm1lLERtZSxLc2QoX1NiKSk7cDRjKGEsUm1lLEhtZSxLc2QoYVRiKSk7cDRjKGEsUm1lLE1tZSxLc2QoVVNiKSk7cDRjKGEsUm1lLE9tZSxLc2QoU1NiKSk7cDRjKGEsUm1lLFBtZSxLc2QoVFNiKSk7cDRjKGEsUm1lLFFtZSxLc2QoV1NiKSk7cDRjKGEsUm1lLE5tZSxLc2QoUlNiKSl9XG5mdW5jdGlvbiBCRmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtPZGQoYiwnSW50ZXJhY3RpdmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uJywxKTtnPTA7Zm9yKGY9bmV3IG9sYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihmKSwyOSk7ZC5wPWcrK31tPVdaYihhKTtxPW5ldyBpSGMobS5sZW5ndGgpOyRJYyhuZXcgYW1iKE9DKEdDKHFZLDEpLFVoZSwyMjUsMCxbcV0pKSxtKTtwPTA7Zz0wO2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2M9MDtsPTA7Zm9yKGs9bmV3IG9sYihkLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihrKSwxMCk7aWYoaS5uLmE+MCl7Yys9aS5uLmEraS5vLmEvMjsrK2x9Zm9yKG89bmV3IG9sYihpLmopO28uYTxvLmMuYy5sZW5ndGg7KXtuPUJEKG1sYihvKSwxMSk7bi5wPXArK319bD4wJiYoYy89bCk7cj1LQyhVRCxWamUsMjUsZC5hLmMubGVuZ3RoLDE1LDEpO2g9MDtmb3Ioaj1uZXcgb2xiKGQuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDEwKTtpLnA9aCsrO3JbaS5wXT1BRmMoaSxjKTtpLms9PShqMGIoKSxnMGIpJiZ5TmIoaSwod3RjKCksYXRjKSxyW2kucF0pfW1tYigpO09rYihkLmEsbmV3IEdGYyhyKSk7WURjKHEsbSxnLHRydWUpOysrZ31RZGQoYil9XG5mdW5jdGlvbiBaZmUoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYi5lPT01KXtXZmUoYSxiKTtyZXR1cm59aj1iO2lmKGouYj09bnVsbHx8YS5iPT1udWxsKXJldHVybjtZZmUoYSk7VmZlKGEpO1lmZShqKTtWZmUoaik7Yz1LQyhXRCxvamUsMjUsYS5iLmxlbmd0aCtqLmIubGVuZ3RoLDE1LDEpO2s9MDtkPTA7Zz0wO3doaWxlKGQ8YS5iLmxlbmd0aCYmZzxqLmIubGVuZ3RoKXtlPWEuYltkXTtmPWEuYltkKzFdO2g9ai5iW2ddO2k9ai5iW2crMV07aWYoZjxoKXtjW2srK109YS5iW2QrK107Y1trKytdPWEuYltkKytdfWVsc2UgaWYoZj49aCYmZTw9aSl7aWYoaDw9ZSYmZjw9aSl7ZCs9Mn1lbHNlIGlmKGg8PWUpe2EuYltkXT1pKzE7Zys9Mn1lbHNlIGlmKGY8PWkpe2NbaysrXT1lO2NbaysrXT1oLTE7ZCs9Mn1lbHNle2NbaysrXT1lO2NbaysrXT1oLTE7YS5iW2RdPWkrMTtnKz0yfX1lbHNlIGlmKGk8ZSl7Zys9Mn1lbHNle3Rocm93IHZiYihuZXcgaHooJ1Rva2VuI3N1YnRyYWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbJythLmJbZF0rJywnK2EuYltkKzFdKyddIC0gWycrai5iW2ddKycsJytqLmJbZysxXSsnXScpKX19d2hpbGUoZDxhLmIubGVuZ3RoKXtjW2srK109YS5iW2QrK107Y1trKytdPWEuYltkKytdfWEuYj1LQyhXRCxvamUsMjUsaywxNSwxKTskZmIoYywwLGEuYiwwLGspfVxuZnVuY3Rpb24gQkpiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGEuQS5kYygpKXtyZXR1cm59aWYoYS5BLkhjKCh0ZGQoKSxyZGQpKSl7QkQoTXBiKGEuYiwoVWNkKCksQWNkKSksMTI0KS5rPXRydWU7QkQoTXBiKGEuYixSY2QpLDEyNCkuaz10cnVlO2I9YS5xIT0oZGNkKCksX2JkKSYmYS5xIT0kYmQ7WkdiKEJEKE1wYihhLmIsemNkKSwxMjQpLGIpO1pHYihCRChNcGIoYS5iLFRjZCksMTI0KSxiKTtaR2IoYS5nLGIpO2lmKGEuQS5IYyhzZGQpKXtCRChNcGIoYS5iLEFjZCksMTI0KS5qPXRydWU7QkQoTXBiKGEuYixSY2QpLDEyNCkuaj10cnVlO0JEKE1wYihhLmIsemNkKSwxMjQpLms9dHJ1ZTtCRChNcGIoYS5iLFRjZCksMTI0KS5rPXRydWU7YS5nLms9dHJ1ZX19aWYoYS5BLkhjKHFkZCkpe2EuYS5qPXRydWU7YS5hLms9dHJ1ZTthLmcuaj10cnVlO2EuZy5rPXRydWU7aD1hLkIuSGMoKElkZCgpLEVkZCkpO2ZvcihlPXdKYigpLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtjPUJEKE1wYihhLmksZCksMzA2KTtpZihjKXtpZihzSmIoZCkpe2Muaj10cnVlO2Muaz10cnVlfWVsc2V7Yy5qPSFoO2Muaz0haH19fX1pZihhLkEuSGMocGRkKSYmYS5CLkhjKChJZGQoKSxEZGQpKSl7YS5nLmo9dHJ1ZTthLmcuaj10cnVlO2lmKCFhLmEuail7YS5hLmo9dHJ1ZTthLmEuaz10cnVlO2EuYS5lPXRydWV9fX1cbmZ1bmN0aW9uIEdKYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2ZvcihkPW5ldyBvbGIoYS5lLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyOSk7Zm9yKGY9bmV3IG9sYihjLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxMCk7bj1hLmlbZS5wXTtqPW4uYS5lO2k9bi5kLmU7ZS5uLmI9ajtyPWktai1lLm8uYjtiPWJLYyhlKTttPShJemMoKSwoIWUucT8obW1iKCksbW1iKCksa21iKTplLnEpLl9iKChOeWMoKSxDeGMpKT8obD1CRCh2TmIoZSxDeGMpLDE5NykpOihsPUJEKHZOYihRX2IoZSksRHhjKSwxOTcpKSxsKTtiJiYobT09RnpjfHxtPT1FemMpJiYoZS5vLmIrPXIpO2lmKGImJihtPT1IemN8fG09PUZ6Y3x8bT09RXpjKSl7Zm9yKHA9bmV3IG9sYihlLmopO3AuYTxwLmMuYy5sZW5ndGg7KXtvPUJEKG1sYihwKSwxMSk7aWYoKFVjZCgpLEVjZCkuSGMoby5qKSl7az1CRChPaGIoYS5rLG8pLDEyMSk7by5uLmI9ay5lLWp9fWZvcihoPW5ldyBvbGIoZS5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksNzApO3E9QkQodk5iKGUseHhjKSwyMSk7cS5IYygoSGJkKCksRWJkKSk/KGcubi5iKz1yKTpxLkhjKEZiZCkmJihnLm4uYis9ci8yKX0obT09RnpjfHxtPT1FemMpJiZWX2IoZSwoVWNkKCksUmNkKSkuSmMobmV3ICRLYyhyKSl9fX19XG5mdW5jdGlvbiBMd2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47aWYoIWEuYil7cmV0dXJuIGZhbHNlfWc9bnVsbDttPW51bGw7aT1uZXcgZXhiKG51bGwsbnVsbCk7ZT0xO2kuYVsxXT1hLmI7bD1pO3doaWxlKGwuYVtlXSl7aj1lO2g9bTttPWw7bD1sLmFbZV07ZD1hLmEudWUoYixsLmQpO2U9ZDwwPzA6MTtkPT0wJiYoIWMuY3x8d3RiKGwuZSxjLmQpKSYmKGc9bCk7aWYoISghIWwmJmwuYikmJiFId2IobC5hW2VdKSl7aWYoSHdiKGwuYVsxLWVdKSl7bT1tLmFbal09T3diKGwsZSl9ZWxzZSBpZighSHdiKGwuYVsxLWVdKSl7bj1tLmFbMS1qXTtpZihuKXtpZighSHdiKG4uYVsxLWpdKSYmIUh3YihuLmFbal0pKXttLmI9ZmFsc2U7bi5iPXRydWU7bC5iPXRydWV9ZWxzZXtmPWguYVsxXT09bT8xOjA7SHdiKG4uYVtqXSk/KGguYVtmXT1Od2IobSxqKSk6SHdiKG4uYVsxLWpdKSYmKGguYVtmXT1Pd2IobSxqKSk7bC5iPWguYVtmXS5iPXRydWU7aC5hW2ZdLmFbMF0uYj1mYWxzZTtoLmFbZl0uYVsxXS5iPWZhbHNlfX19fX1pZihnKXtjLmI9dHJ1ZTtjLmQ9Zy5lO2lmKGwhPWcpe2s9bmV3IGV4YihsLmQsbC5lKTtNd2IoYSxpLGcsayk7bT09ZyYmKG09ayl9bS5hW20uYVsxXT09bD8xOjBdPWwuYVshbC5hWzBdPzE6MF07LS1hLmN9YS5iPWkuYVsxXTshIWEuYiYmKGEuYi5iPWZhbHNlKTtyZXR1cm4gYy5ifVxuZnVuY3Rpb24gY2ljKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtmb3IoZT1uZXcgb2xiKGEuYS5hLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSw1Nyk7Zm9yKGk9ZC5jLktjKCk7aS5PYigpOyl7aD1CRChpLlBiKCksNTcpO2lmKGQuYT09aC5hKXtjb250aW51ZX1mYWQoYS5hLmQpPyhsPWEuYS5nLk9lKGQsaCkpOihsPWEuYS5nLlBlKGQsaCkpO2Y9ZC5iLmErZC5kLmIrbC1oLmIuYTtmPSR3bmQuTWF0aC5jZWlsKGYpO2Y9JHduZC5NYXRoLm1heCgwLGYpO2lmKHZnYyhkLGgpKXtnPW5HYihuZXcgcEdiLGEuZCk7aj1RRCgkd25kLk1hdGguY2VpbChoLmIuYS1kLmIuYSkpO2I9ai0oaC5iLmEtZC5iLmEpO2s9dWdjKGQpLmE7Yz1kO2lmKCFrKXtrPXVnYyhoKS5hO2I9LWI7Yz1ofWlmKGspe2MuYi5hLT1iO2subi5hLT1ifUFGYihERmIoQ0ZiKEVGYihCRmIobmV3IEZGYiwkd25kLk1hdGgubWF4KDAsaikpLDEpLGcpLGEuY1tkLmEuZF0pKTtBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsJHduZC5NYXRoLm1heCgwLC1qKSksMSksZyksYS5jW2guYS5kXSkpfWVsc2V7bT0xOyhKRChkLmcsMTQ1KSYmSkQoaC5nLDEwKXx8SkQoaC5nLDE0NSkmJkpEKGQuZywxMCkpJiYobT0yKTtBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsUUQoZikpLG0pLGEuY1tkLmEuZF0pLGEuY1toLmEuZF0pKX19fX1cbmZ1bmN0aW9uIHBFYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07aWYoYyl7ZD0tMTtrPW5ldyBCaWIoYiwwKTt3aGlsZShrLmI8ay5kLmdjKCkpe2g9KHNDYihrLmI8ay5kLmdjKCkpLEJEKGsuZC5YYihrLmM9ay5iKyspLDEwKSk7bD1hLmNbaC5jLnBdW2gucF0uYTtpZihsPT1udWxsKXtnPWQrMTtmPW5ldyBCaWIoYixrLmIpO3doaWxlKGYuYjxmLmQuZ2MoKSl7bT10RWMoYSwoc0NiKGYuYjxmLmQuZ2MoKSksQkQoZi5kLlhiKGYuYz1mLmIrKyksMTApKSkuYTtpZihtIT1udWxsKXtnPSh1Q2IobSksbSk7YnJlYWt9fWw9KGQrZykvMjthLmNbaC5jLnBdW2gucF0uYT1sO2EuY1toLmMucF1baC5wXS5kPSh1Q2IobCksbCk7YS5jW2guYy5wXVtoLnBdLmI9MX1kPSh1Q2IobCksbCl9fWVsc2V7ZT0wO2ZvcihqPW5ldyBvbGIoYik7ai5hPGouYy5jLmxlbmd0aDspe2g9QkQobWxiKGopLDEwKTthLmNbaC5jLnBdW2gucF0uYSE9bnVsbCYmKGU9JHduZC5NYXRoLm1heChlLEVkYihhLmNbaC5jLnBdW2gucF0uYSkpKX1lKz0yO2ZvcihpPW5ldyBvbGIoYik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtpZihhLmNbaC5jLnBdW2gucF0uYT09bnVsbCl7bD1DdWIoYS5pLDI0KSpsa2UqZS0xO2EuY1toLmMucF1baC5wXS5hPWw7YS5jW2guYy5wXVtoLnBdLmQ9bDthLmNbaC5jLnBdW2gucF0uYj0xfX19fVxuZnVuY3Rpb24gQ1pkKCl7ckVkKGI1LG5ldyBpJGQpO3JFZChhNSxuZXcgUCRkKTtyRWQoYzUsbmV3IHVfZCk7ckVkKGQ1LG5ldyBNX2QpO3JFZChmNSxuZXcgUF9kKTtyRWQoaDUsbmV3IFNfZCk7ckVkKGc1LG5ldyBWX2QpO3JFZChpNSxuZXcgWV9kKTtyRWQoazUsbmV3IEdaZCk7ckVkKGw1LG5ldyBKWmQpO3JFZChtNSxuZXcgTVpkKTtyRWQobjUsbmV3IFBaZCk7ckVkKG81LG5ldyBTWmQpO3JFZChwNSxuZXcgVlpkKTtyRWQocTUsbmV3IFlaZCk7ckVkKHQ1LG5ldyBfWmQpO3JFZCh2NSxuZXcgYyRkKTtyRWQoeDYsbmV3IGYkZCk7ckVkKGo1LG5ldyBsJGQpO3JFZCh1NSxuZXcgbyRkKTtyRWQod0ksbmV3IHIkZCk7ckVkKEdDKFNELDEpLG5ldyB1JGQpO3JFZCh4SSxuZXcgeCRkKTtyRWQoeUksbmV3IEEkZCk7ckVkKCRKLG5ldyBEJGQpO3JFZChPNCxuZXcgRyRkKTtyRWQoQkksbmV3IEokZCk7ckVkKFQ0LG5ldyBNJGQpO3JFZChVNCxuZXcgUyRkKTtyRWQoTzksbmV3IFYkZCk7ckVkKEU5LG5ldyBZJGQpO3JFZChGSSxuZXcgXyRkKTtyRWQoSkksbmV3IGNfZCk7ckVkKEFJLG5ldyBmX2QpO3JFZChNSSxuZXcgaV9kKTtyRWQoREssbmV3IGxfZCk7ckVkKHY4LG5ldyBvX2QpO3JFZCh1OCxuZXcgcl9kKTtyRWQoVUksbmV3IHhfZCk7ckVkKFpJLG5ldyBBX2QpO3JFZChYNCxuZXcgRF9kKTtyRWQoVjQsbmV3IEdfZCl9XG5mdW5jdGlvbiBoQShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsOyFjJiYoYz1UQShiLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSkpO2U9KGIucS5nZXRUaW1lem9uZU9mZnNldCgpLWMuYSkqNjAwMDA7aD1uZXcgZ0Iod2JiKENiYihiLnEuZ2V0VGltZSgpKSxlKSk7aT1oO2lmKGgucS5nZXRUaW1lem9uZU9mZnNldCgpIT1iLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSl7ZT4wPyhlLT04NjQwMDAwMCk6KGUrPTg2NDAwMDAwKTtpPW5ldyBnQih3YmIoQ2JiKGIucS5nZXRUaW1lKCkpLGUpKX1rPW5ldyBWZmI7aj1hLmEubGVuZ3RoO2ZvcihmPTA7ZjxqOyl7ZD1iZmIoYS5hLGYpO2lmKGQ+PTk3JiZkPD0xMjJ8fGQ+PTY1JiZkPD05MCl7Zm9yKGc9ZisxO2c8aiYmYmZiKGEuYSxnKT09ZDsrK2cpO3ZBKGssZCxnLWYsaCxpLGMpO2Y9Z31lbHNlIGlmKGQ9PTM5KXsrK2Y7aWYoZjxqJiZiZmIoYS5hLGYpPT0zOSl7ay5hKz1cIidcIjsrK2Y7Y29udGludWV9bD1mYWxzZTt3aGlsZSghbCl7Zz1mO3doaWxlKGc8aiYmYmZiKGEuYSxnKSE9MzkpeysrZ31pZihnPj1qKXt0aHJvdyB2YmIobmV3IFdkYihcIk1pc3NpbmcgdHJhaWxpbmcgJ1wiKSl9ZysxPGomJmJmYihhLmEsZysxKT09Mzk/KytnOihsPXRydWUpO1FmYihrLHFmYihhLmEsZixnKSk7Zj1nKzF9fWVsc2V7ay5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpOysrZn19cmV0dXJuIGsuYX1cbmZ1bmN0aW9uIE1FYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2I9bnVsbDtmb3IoZD1uZXcgb2xiKGEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyMzMpO0VkYihSRWMoYy5nLGMuZFswXSkuYSk7Yy5iPW51bGw7aWYoISFjLmUmJmMuZS5nYygpPjAmJmMuYz09MCl7IWImJihiPW5ldyBSa2IpO2IuY1tiLmMubGVuZ3RoXT1jfX1pZihiKXt3aGlsZShiLmMubGVuZ3RoIT0wKXtjPUJEKEtrYihiLDApLDIzMyk7aWYoISFjLmImJmMuYi5jLmxlbmd0aD4wKXtmb3IoZj0oIWMuYiYmKGMuYj1uZXcgUmtiKSxuZXcgb2xiKGMuYikpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwyMzMpO2lmKEdkYihSRWMoZS5nLGUuZFswXSkuYSk9PUdkYihSRWMoYy5nLGMuZFswXSkuYSkpe2lmKEprYihhLGUsMCk+SmtiKGEsYywwKSl7cmV0dXJuIG5ldyB2Z2QoZSxjKX19ZWxzZSBpZihFZGIoUkVjKGUuZyxlLmRbMF0pLmEpPkVkYihSRWMoYy5nLGMuZFswXSkuYSkpe3JldHVybiBuZXcgdmdkKGUsYyl9fX1mb3IoaD0oIWMuZSYmKGMuZT1uZXcgUmtiKSxjLmUpLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMjMzKTtpPSghZy5iJiYoZy5iPW5ldyBSa2IpLGcuYik7d0NiKDAsaS5jLmxlbmd0aCk7YUNiKGkuYywwLGMpO2cuYz09aS5jLmxlbmd0aCYmKGIuY1tiLmMubGVuZ3RoXT1nLHRydWUpfX19cmV0dXJuIG51bGx9XG5mdW5jdGlvbiB3bGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYT09bnVsbCl7cmV0dXJuIFhoZX1pPWIuYS56YyhhLGIpO2lmKGkhPW51bGwpe3JldHVybiAnWy4uLl0nfWM9bmV3IHh3YihTaGUsJ1snLCddJyk7Zm9yKGU9YSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07aWYoZCE9bnVsbCYmKHJiKGQpLmkmNCkhPTApe2lmKEFycmF5LmlzQXJyYXkoZCkmJihrPUhDKGQpLCEoaz49MTQmJms8PTE2KSkpe2lmKGIuYS5fYihkKSl7IWMuYT8oYy5hPW5ldyBXZmIoYy5kKSk6UWZiKGMuYSxjLmIpO05mYihjLmEsJ1suLi5dJyl9ZWxzZXtoPUNEKGQpO2o9bmV3IFZxYihiKTt1d2IoYyx3bGIoaCxqKSl9fWVsc2UgSkQoZCwxNzcpP3V3YihjLFhsYihCRChkLDE3NykpKTpKRChkLDE5MCk/dXdiKGMsUWxiKEJEKGQsMTkwKSkpOkpEKGQsMTk1KT91d2IoYyxSbGIoQkQoZCwxOTUpKSk6SkQoZCwyMDEyKT91d2IoYyxXbGIoQkQoZCwyMDEyKSkpOkpEKGQsNDgpP3V3YihjLFVsYihCRChkLDQ4KSkpOkpEKGQsMzY0KT91d2IoYyxWbGIoQkQoZCwzNjQpKSk6SkQoZCw4MzIpP3V3YihjLFRsYihCRChkLDgzMikpKTpKRChkLDEwNCkmJnV3YihjLFNsYihCRChkLDEwNCkpKX1lbHNle3V3YihjLGQ9PW51bGw/WGhlOmZjYihkKSl9fXJldHVybiAhYy5hP2MuYzpjLmUubGVuZ3RoPT0wP2MuYS5hOmMuYS5hKygnJytjLmUpfVxuZnVuY3Rpb24geFFiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2g9aXRkKGIsZmFsc2UsZmFsc2UpO3I9b2ZkKGgpO2QmJihyPXc3YyhyKSk7dD1FZGIoRUQoaGtkKGIsKENQYigpLHZQYikpKSk7cT0oc0NiKHIuYiE9MCksQkQoci5hLmEuYyw4KSk7bD1CRChVdChyLDEpLDgpO2lmKHIuYj4yKXtrPW5ldyBSa2I7R2tiKGssbmV3IEppYihyLDEsci5iKSk7Zj1zUWIoayx0K2EuYSk7cz1uZXcgWE9iKGYpO3ROYihzLGIpO2MuY1tjLmMubGVuZ3RoXT1zfWVsc2V7ZD8ocz1CRChPaGIoYS5iLGp0ZChiKSksMjY2KSk6KHM9QkQoT2hiKGEuYixsdGQoYikpLDI2NikpfWk9anRkKGIpO2QmJihpPWx0ZChiKSk7Zz16UWIocSxpKTtqPXQrYS5hO2lmKGcuYSl7ais9JHduZC5NYXRoLmFicyhxLmItbC5iKTtwPW5ldyBmN2MobC5hLChsLmIrcS5iKS8yKX1lbHNle2orPSR3bmQuTWF0aC5hYnMocS5hLWwuYSk7cD1uZXcgZjdjKChsLmErcS5hKS8yLGwuYil9ZD9SaGIoYS5kLGIsbmV3IFpPYihzLGcscCxqKSk6UmhiKGEuYyxiLG5ldyBaT2IocyxnLHAsaikpO1JoYihhLmIsYixzKTtvPSghYi5uJiYoYi5uPW5ldyBjVWQoRDIsYiwxLDcpKSxiLm4pO2ZvcihuPW5ldyBGeWQobyk7bi5lIT1uLmkuZ2MoKTspe209QkQoRHlkKG4pLDEzNyk7ZT13UWIoYSxtLHRydWUsMCwwKTtjLmNbYy5jLmxlbmd0aF09ZX19XG5mdW5jdGlvbiB3UGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7aj1uZXcgUmtiO2g9bmV3IFJrYjtmb3IoZz1uZXcgb2xiKGEpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihnKSwxMTIpO3BPYyhlLGUuZi5jLmxlbmd0aCk7cU9jKGUsZS5rLmMubGVuZ3RoKTtlLmQ9PTAmJihqLmNbai5jLmxlbmd0aF09ZSx0cnVlKTtlLmk9PTAmJmUuZS5iPT0wJiYoaC5jW2guYy5sZW5ndGhdPWUsdHJ1ZSl9ZD0tMTt3aGlsZShqLmMubGVuZ3RoIT0wKXtlPUJEKEtrYihqLDApLDExMik7Zm9yKGM9bmV3IG9sYihlLmspO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwxMjkpO2s9Yi5iO3JPYyhrLCR3bmQuTWF0aC5tYXgoay5vLGUubysxKSk7ZD0kd25kLk1hdGgubWF4KGQsay5vKTtwT2MoayxrLmQtMSk7ay5kPT0wJiYoai5jW2ouYy5sZW5ndGhdPWssdHJ1ZSl9fWlmKGQ+LTEpe2ZvcihmPW5ldyBvbGIoaCk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDExMik7ZS5vPWR9d2hpbGUoaC5jLmxlbmd0aCE9MCl7ZT1CRChLa2IoaCwwKSwxMTIpO2ZvcihjPW5ldyBvbGIoZS5mKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMTI5KTtpPWIuYTtpZihpLmUuYj4wKXtjb250aW51ZX1yT2MoaSwkd25kLk1hdGgubWluKGkubyxlLm8tMSkpO3FPYyhpLGkuaS0xKTtpLmk9PTAmJihoLmNbaC5jLmxlbmd0aF09aSx0cnVlKX19fX1cbmZ1bmN0aW9uIFFRZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aj1hLmM7IWImJihiPUZRZCk7YS5jPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtpPW5ldyBuU2QoYSwxLDIsaixhLmMpOyFjPyhjPWkpOmMuRWkoaSl9aWYoaiE9Yil7aWYoSkQoYS5DYiwyODQpKXtpZihhLkRiPj4xNj09LTEwKXtjPUJEKGEuQ2IsMjg0KS5uayhiLGMpfWVsc2UgaWYoYS5EYj4+MTY9PS0xNSl7IWImJihiPShqR2QoKSxZRmQpKTshaiYmKGo9KGpHZCgpLFlGZCkpO2lmKGEuQ2IubmgoKSl7aT1uZXcgcFNkKGEuQ2IsMSwxMyxqLGIsSExkKFFTZChCRChhLkNiLDU5KSksYSksZmFsc2UpOyFjPyhjPWkpOmMuRWkoaSl9fX1lbHNlIGlmKEpEKGEuQ2IsODgpKXtpZihhLkRiPj4xNj09LTIzKXtKRChiLDg4KXx8KGI9KGpHZCgpLF9GZCkpO0pEKGosODgpfHwoaj0oakdkKCksX0ZkKSk7aWYoYS5DYi5uaCgpKXtpPW5ldyBwU2QoYS5DYiwxLDEwLGosYixITGQoVktkKEJEKGEuQ2IsMjYpKSxhKSxmYWxzZSk7IWM/KGM9aSk6Yy5FaShpKX19fWVsc2UgaWYoSkQoYS5DYiw0NDQpKXtoPUJEKGEuQ2IsODM2KTtnPSghaC5iJiYoaC5iPW5ldyBSWWQobmV3IE5ZZCkpLGguYik7Zm9yKGY9KGQ9bmV3IG5pYigobmV3IGVpYihnLmEpKS5hKSxuZXcgWllkKGQpKTtmLmEuYjspe2U9QkQobGliKGYuYSkuY2QoKSw4Nyk7Yz1RUWQoZSxNUWQoZSxoKSxjKX19fXJldHVybiBjfVxuZnVuY3Rpb24gTzFiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtnPUNjYihERChoa2QoYSwoTnljKCksZnhjKSkpKTttPUJEKGhrZChhLFl4YyksMjEpO2k9ZmFsc2U7aj1mYWxzZTtsPW5ldyBGeWQoKCFhLmMmJihhLmM9bmV3IGNVZChGMixhLDksOSkpLGEuYykpO3doaWxlKGwuZSE9bC5pLmdjKCkmJighaXx8IWopKXtmPUJEKER5ZChsKSwxMTgpO2g9MDtmb3IoZT11bChwbChPQyhHQyhLSSwxKSxVaGUsMjAsMCxbKCFmLmQmJihmLmQ9bmV3IHk1ZChCMixmLDgsNSkpLGYuZCksKCFmLmUmJihmLmU9bmV3IHk1ZChCMixmLDcsNCkpLGYuZSldKSkpO1FyKGUpOyl7ZD1CRChScihlKSw3OSk7az1nJiZRbGQoZCkmJkNjYihERChoa2QoZCxneGMpKSk7Yz1FTGQoKCFkLmImJihkLmI9bmV3IHk1ZCh6MixkLDQsNykpLGQuYiksZik/YT09WG9kKGF0ZChCRChxdWQoKCFkLmMmJihkLmM9bmV3IHk1ZCh6MixkLDUsOCkpLGQuYyksMCksODIpKSk6YT09WG9kKGF0ZChCRChxdWQoKCFkLmImJihkLmI9bmV3IHk1ZCh6MixkLDQsNykpLGQuYiksMCksODIpKSk7aWYoa3x8Yyl7KytoO2lmKGg+MSl7YnJlYWt9fX1oPjA/KGk9dHJ1ZSk6bS5IYygocmNkKCksbmNkKSkmJighZi5uJiYoZi5uPW5ldyBjVWQoRDIsZiwxLDcpKSxmLm4pLmk+MCYmKGk9dHJ1ZSk7aD4xJiYoaj10cnVlKX1pJiZiLkZjKChPcmMoKSxIcmMpKTtqJiZiLkZjKChPcmMoKSxJcmMpKX1cbmZ1bmN0aW9uIHpmZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07bT1CRChoa2QoYSwoWTljKCksWThjKSksMjEpO2lmKG0uZGMoKSl7cmV0dXJuIG51bGx9aD0wO2c9MDtpZihtLkhjKCh0ZGQoKSxyZGQpKSl7az1CRChoa2QoYSx0OWMpLDk4KTtkPTI7Yz0yO2U9MjtmPTI7Yj0hWG9kKGEpP0JEKGhrZChhLHo4YyksMTAzKTpCRChoa2QoWG9kKGEpLHo4YyksMTAzKTtmb3Ioaj1uZXcgRnlkKCghYS5jJiYoYS5jPW5ldyBjVWQoRjIsYSw5LDkpKSxhLmMpKTtqLmUhPWouaS5nYygpOyl7aT1CRChEeWQoaiksMTE4KTtsPUJEKGhrZChpLEE5YyksNjEpO2lmKGw9PShVY2QoKSxTY2QpKXtsPWxmZChpLGIpO2prZChpLEE5YyxsKX1pZihrPT0oZGNkKCksJGJkKSl7c3dpdGNoKGwuZyl7Y2FzZSAxOmQ9JHduZC5NYXRoLm1heChkLGkuaStpLmcpO2JyZWFrO2Nhc2UgMjpjPSR3bmQuTWF0aC5tYXgoYyxpLmoraS5mKTticmVhaztjYXNlIDM6ZT0kd25kLk1hdGgubWF4KGUsaS5pK2kuZyk7YnJlYWs7Y2FzZSA0OmY9JHduZC5NYXRoLm1heChmLGkuaitpLmYpO319ZWxzZXtzd2l0Y2gobC5nKXtjYXNlIDE6ZCs9aS5nKzI7YnJlYWs7Y2FzZSAyOmMrPWkuZisyO2JyZWFrO2Nhc2UgMzplKz1pLmcrMjticmVhaztjYXNlIDQ6Zis9aS5mKzI7fX19aD0kd25kLk1hdGgubWF4KGQsZSk7Zz0kd25kLk1hdGgubWF4KGMsZil9cmV0dXJuIEFmZChhLGgsZyx0cnVlLHRydWUpfVxuZnVuY3Rpb24gbG5jKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7cz1CRChHQWIoVkFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmQsMTYpKSxuZXcgcG5jKGMpKSxuZXcgcm5jKGMpKSxCeWIobmV3IGZ6YixuZXcgZHpiLG5ldyBFemIsT0MoR0MoeEwsMSksS2llLDEzMiwwLFsoRnliKCksRHliKV0pKSksMTUpO2w9T2hlO2s9UmllO2ZvcihpPW5ldyBvbGIoYi5iLmopO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMSk7aWYoaC5qPT1jKXtsPSR3bmQuTWF0aC5taW4obCxoLnApO2s9JHduZC5NYXRoLm1heChrLGgucCl9fWlmKGw9PU9oZSl7Zm9yKGc9MDtnPHMuZ2MoKTtnKyspe29qYyhCRChzLlhiKGcpLDEwMSksYyxnKX19ZWxzZXt0PUtDKFdELG9qZSwyNSxlLmxlbmd0aCwxNSwxKTtFbGIodCx0Lmxlbmd0aCk7Zm9yKHI9cy5LYygpO3IuT2IoKTspe3E9QkQoci5QYigpLDEwMSk7Zj1CRChPaGIoYS5iLHEpLDE3Nyk7aj0wO2ZvcihwPWw7cDw9aztwKyspe2ZbcF0mJihqPSR3bmQuTWF0aC5tYXgoaixkW3BdKSl9aWYocS5pKXtuPXEuaS5jO3U9bmV3IFRxYjtmb3IobT0wO208ZS5sZW5ndGg7bSsrKXtlW25dW21dJiZRcWIodSxtZWIodFttXSkpfXdoaWxlKFJxYih1LG1lYihqKSkpeysran19b2pjKHEsYyxqKTtmb3Iobz1sO288PWs7bysrKXtmW29dJiYoZFtvXT1qKzEpfSEhcS5pJiYodFtxLmkuY109ail9fX1cbmZ1bmN0aW9uIFlKYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7ZT1udWxsO2ZvcihkPW5ldyBvbGIoYi5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMTApO2JLYyhjKT8oZj0oaD1uR2Iob0diKG5ldyBwR2IsYyksYS5mKSxpPW5HYihvR2IobmV3IHBHYixjKSxhLmYpLGo9bmV3IHJLYyhjLHRydWUsaCxpKSxrPWMuby5iLGw9KEl6YygpLCghYy5xPyhtbWIoKSxtbWIoKSxrbWIpOmMucSkuX2IoKE55YygpLEN4YykpPyhtPUJEKHZOYihjLEN4YyksMTk3KSk6KG09QkQodk5iKFFfYihjKSxEeGMpLDE5NykpLG0pLG49MTAwMDAsbD09RXpjJiYobj0xKSxvPUFGYihERmIoQ0ZiKEJGYihFRmIobmV3IEZGYixuKSxRRCgkd25kLk1hdGguY2VpbChrKSkpLGgpLGkpKSxsPT1GemMmJlFxYihhLmQsbyksWkpjKGEsU3UoVl9iKGMsKFVjZCgpLFRjZCkpKSxqKSxaSmMoYSxWX2IoYyx6Y2QpLGopLGopKTooZj0ocD1uR2Iob0diKG5ldyBwR2IsYyksYS5mKSxNQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGMuaiwxNikpLG5ldyBFS2MpLG5ldyBHS2MoYSxwKSksbmV3IHJLYyhjLGZhbHNlLHAscCkpKTthLmlbYy5wXT1mO2lmKGUpe2c9ZS5jLmQuYStqQmMoYS5uLGUuYyxjKStjLmQuZDtlLmJ8fChnKz1lLmMuby5iKTtBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsUUQoJHduZC5NYXRoLmNlaWwoZykpKSwwKSxlLmQpLGYuYSkpfWU9Zn19XG5mdW5jdGlvbiBzOWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO09kZChiLCdMYWJlbCBkdW1teSBpbnNlcnRpb25zJywxKTtsPW5ldyBSa2I7Zz1FZGIoRUQodk5iKGEsKE55YygpLG55YykpKSk7aj1FZGIoRUQodk5iKGEscnljKSkpO2s9QkQodk5iKGEsTHdjKSwxMDMpO2ZvcihuPW5ldyBvbGIoYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTApO2ZvcihmPW5ldyBTcih1cihVX2IobSkuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7aWYoZS5jLmkhPWUuZC5pJiZMcShlLmIscDliKSl7cD10OWIoZSk7bz1QdShlLmIuYy5sZW5ndGgpO2M9cjliKGEsZSxwLG8pO2wuY1tsLmMubGVuZ3RoXT1jO2Q9Yy5vO2g9bmV3IEJpYihlLmIsMCk7d2hpbGUoaC5iPGguZC5nYygpKXtpPShzQ2IoaC5iPGguZC5nYygpKSxCRChoLmQuWGIoaC5jPWguYisrKSw3MCkpO2lmKFBEKHZOYihpLFF3YykpPT09UEQoKHFhZCgpLG5hZCkpKXtpZihrPT0oZWFkKCksZGFkKXx8az09XzljKXtkLmErPWkuby5hK2o7ZC5iPSR3bmQuTWF0aC5tYXgoZC5iLGkuby5iKX1lbHNle2QuYT0kd25kLk1hdGgubWF4KGQuYSxpLm8uYSk7ZC5iKz1pLm8uYitqfW8uY1tvLmMubGVuZ3RoXT1pO3VpYihoKX19aWYoaz09KGVhZCgpLGRhZCl8fGs9PV85Yyl7ZC5hLT1qO2QuYis9ZytwfWVsc2V7ZC5iKz1nLWorcH19fX1Ha2IoYS5hLGwpO1FkZChiKX1cbmZ1bmN0aW9uIGVZYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbjtmPW5ldyBxWWIoYik7bD1fWGIoYSxiLGYpO249JHduZC5NYXRoLm1heChFZGIoRUQodk5iKGIsKE55YygpLFp3YykpKSksMSk7Zm9yKGs9bmV3IG9sYihsLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSw0Nik7aT1kWWIoQkQoai5hLDgpLEJEKGouYiw4KSxuKTtvPXRydWU7bz1vJmlZYihjLG5ldyBmN2MoaS5jLGkuZCkpO289byZpWWIoYyxPNmMobmV3IGY3YyhpLmMsaS5kKSxpLmIsMCkpO289byZpWWIoYyxPNmMobmV3IGY3YyhpLmMsaS5kKSwwLGkuYSkpO28maVliKGMsTzZjKG5ldyBmN2MoaS5jLGkuZCksaS5iLGkuYSkpfW09Zi5kO2g9ZFliKEJEKGwuYi5hLDgpLEJEKGwuYi5iLDgpLG4pO2lmKG09PShVY2QoKSxUY2QpfHxtPT16Y2Qpe2QuY1ttLmddPSR3bmQuTWF0aC5taW4oZC5jW20uZ10saC5kKTtkLmJbbS5nXT0kd25kLk1hdGgubWF4KGQuYlttLmddLGguZCtoLmEpfWVsc2V7ZC5jW20uZ109JHduZC5NYXRoLm1pbihkLmNbbS5nXSxoLmMpO2QuYlttLmddPSR3bmQuTWF0aC5tYXgoZC5iW20uZ10saC5jK2guYil9ZT1RamU7Zz1mLmMuaS5kO3N3aXRjaChtLmcpe2Nhc2UgNDplPWcuYzticmVhaztjYXNlIDI6ZT1nLmI7YnJlYWs7Y2FzZSAxOmU9Zy5hO2JyZWFrO2Nhc2UgMzplPWcuZDt9ZC5hW20uZ109JHduZC5NYXRoLm1heChkLmFbbS5nXSxlKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIGVLZChiKXt2YXIgYyxkLGUsZjtkPWIuRCE9bnVsbD9iLkQ6Yi5CO2M9aGZiKGQsd2ZiKDkxKSk7aWYoYyE9LTEpe2U9ZC5zdWJzdHIoMCxjKTtmPW5ldyBIZmI7ZG8gZi5hKz0nWyc7d2hpbGUoKGM9Z2ZiKGQsOTEsKytjKSkhPS0xKTtpZihkZmIoZSxLaGUpKWYuYSs9J1onO2Vsc2UgaWYoZGZiKGUsRXZlKSlmLmErPSdCJztlbHNlIGlmKGRmYihlLEZ2ZSkpZi5hKz0nQyc7ZWxzZSBpZihkZmIoZSxHdmUpKWYuYSs9J0QnO2Vsc2UgaWYoZGZiKGUsSHZlKSlmLmErPSdGJztlbHNlIGlmKGRmYihlLEl2ZSkpZi5hKz0nSSc7ZWxzZSBpZihkZmIoZSxKdmUpKWYuYSs9J0onO2Vsc2UgaWYoZGZiKGUsS3ZlKSlmLmErPSdTJztlbHNle2YuYSs9J0wnO2YuYSs9JycrZTtmLmErPSc7J310cnl7cmV0dXJuIG51bGx9Y2F0Y2goYSl7YT11YmIoYSk7aWYoIUpEKGEsNjApKXRocm93IHZiYihhKX19ZWxzZSBpZihoZmIoZCx3ZmIoNDYpKT09LTEpe2lmKGRmYihkLEtoZSkpcmV0dXJuIHNiYjtlbHNlIGlmKGRmYihkLEV2ZSkpcmV0dXJuIFNEO2Vsc2UgaWYoZGZiKGQsRnZlKSlyZXR1cm4gVEQ7ZWxzZSBpZihkZmIoZCxHdmUpKXJldHVybiBVRDtlbHNlIGlmKGRmYihkLEh2ZSkpcmV0dXJuIFZEO2Vsc2UgaWYoZGZiKGQsSXZlKSlyZXR1cm4gV0Q7ZWxzZSBpZihkZmIoZCxKdmUpKXJldHVybiBYRDtlbHNlIGlmKGRmYihkLEt2ZSkpcmV0dXJuIHJiYn1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uICQxYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztqPW5ldyBiMGIoYyk7dE5iKGosYik7eU5iKGosKHd0YygpLCRzYyksYik7ai5vLmE9Yi5nO2ouby5iPWIuZjtqLm4uYT1iLmk7ai5uLmI9Yi5qO0VrYihjLmEsaik7UmhiKGEuYSxiLGopOygoIWIuYSYmKGIuYT1uZXcgY1VkKEUyLGIsMTAsMTEpKSxiLmEpLmkhPTB8fENjYihERChoa2QoYiwoTnljKCksZnhjKSkpKSkmJnlOYihqLHdzYywoQmNiKCksdHJ1ZSkpO2k9QkQodk5iKGMsS3NjKSwyMSk7az1CRCh2TmIoaiwoTnljKCksVnhjKSksOTgpO2s9PShkY2QoKSxjY2QpP3lOYihqLFZ4YyxiY2QpOmshPWJjZCYmaS5GYygoT3JjKCksS3JjKSk7ZD1CRCh2TmIoYyxMd2MpLDEwMyk7Zm9yKGg9bmV3IEZ5ZCgoIWIuYyYmKGIuYz1uZXcgY1VkKEYyLGIsOSw5KSksYi5jKSk7aC5lIT1oLmkuZ2MoKTspe2c9QkQoRHlkKGgpLDExOCk7Q2NiKEREKGhrZChnLEp4YykpKXx8XzFiKGEsZyxqLGksZCxrKX1mb3IoZj1uZXcgRnlkKCghYi5uJiYoYi5uPW5ldyBjVWQoRDIsYiwxLDcpKSxiLm4pKTtmLmUhPWYuaS5nYygpOyl7ZT1CRChEeWQoZiksMTM3KTshQ2NiKEREKGhrZChlLEp4YykpKSYmISFlLmEmJkVrYihqLmIsWjFiKGUpKX1DY2IoREQodk5iKGoscHdjKSkpJiZpLkZjKChPcmMoKSxGcmMpKTtpZihDY2IoREQodk5iKGosZXhjKSkpKXtpLkZjKChPcmMoKSxKcmMpKTtpLkZjKElyYyk7eU5iKGosVnhjLGJjZCl9cmV0dXJuIGp9XG5mdW5jdGlvbiBGNGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDtoPUJEKE9oYihiLmMsYSksNDU5KTtzPWIuYS5jO2k9Yi5hLmMrYi5hLmI7Qz1oLmY7RD1oLmE7Zz1DPEQ7cD1uZXcgZjdjKHMsQyk7dD1uZXcgZjdjKGksRCk7ZT0ocytpKS8yO3E9bmV3IGY3YyhlLEMpO3U9bmV3IGY3YyhlLEQpO2Y9RzRiKGEsQyxEKTt3PUEwYihiLkIpO0E9bmV3IGY3YyhlLGYpO0I9QTBiKGIuRCk7Yz1qNmMoT0MoR0MobTEsMSksbmllLDgsMCxbdyxBLEJdKSk7bj1mYWxzZTtyPWIuQi5pO2lmKCEhciYmISFyLmMmJmguZCl7aj1nJiZyLnA8ci5jLmEuYy5sZW5ndGgtMXx8IWcmJnIucD4wO2lmKGope2lmKGope209ci5wO2c/KyttOi0tbTtsPUJEKElrYihyLmMuYSxtKSwxMCk7ZD1JNGIobCk7bj0hKHM2YyhkLHcsY1swXSl8fG42YyhkLHcsY1swXSkpfX1lbHNle249dHJ1ZX19bz1mYWxzZTt2PWIuRC5pO2lmKCEhdiYmISF2LmMmJmguZSl7az1nJiZ2LnA+MHx8IWcmJnYucDx2LmMuYS5jLmxlbmd0aC0xO2lmKGspe209di5wO2c/LS1tOisrbTtsPUJEKElrYih2LmMuYSxtKSwxMCk7ZD1JNGIobCk7bz0hKHM2YyhkLGNbMF0sQil8fG42YyhkLGNbMF0sQikpfWVsc2V7bz10cnVlfX1uJiZvJiZEc2IoYS5hLEEpO258fG43YyhhLmEsT0MoR0MobTEsMSksbmllLDgsMCxbcCxxXSkpO298fG43YyhhLmEsT0MoR0MobTEsMSksbmllLDgsMCxbdSx0XSkpfVxuZnVuY3Rpb24geWZkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZihKRChhLlVnKCksMTYwKSl7eWZkKEJEKGEuVWcoKSwxNjApLGIpO2IuYSs9JyA+ICd9ZWxzZXtiLmErPSdSb290ICd9Yz1hLlRnKCkuemI7ZGZiKGMuc3Vic3RyKDAsMyksJ0VsaycpP1FmYihiLGMuc3Vic3RyKDMpKTooYi5hKz0nJytjLGIpO2U9YS56ZygpO2lmKGUpe1FmYigoYi5hKz0nICcsYiksZSk7cmV0dXJufWlmKEpEKGEsMzU0KSl7aj1CRChhLDEzNykuYTtpZihqKXtRZmIoKGIuYSs9JyAnLGIpLGopO3JldHVybn19Zm9yKGc9bmV3IEZ5ZChhLkFnKCkpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwxMzcpO2o9Zi5hO2lmKGope1FmYigoYi5hKz0nICcsYiksaik7cmV0dXJufX1pZihKRChhLDM1Mikpe2Q9QkQoYSw3OSk7IWQuYiYmKGQuYj1uZXcgeTVkKHoyLGQsNCw3KSk7aWYoZC5iLmkhPTAmJighZC5jJiYoZC5jPW5ldyB5NWQoejIsZCw1LDgpKSxkLmMuaSE9MCkpe2IuYSs9JyAoJztoPW5ldyBPeWQoKCFkLmImJihkLmI9bmV3IHk1ZCh6MixkLDQsNykpLGQuYikpO3doaWxlKGguZSE9aC5pLmdjKCkpe2guZT4wJiYoYi5hKz1TaGUsYik7eWZkKEJEKER5ZChoKSwxNjApLGIpfWIuYSs9Z25lO2k9bmV3IE95ZCgoIWQuYyYmKGQuYz1uZXcgeTVkKHoyLGQsNSw4KSksZC5jKSk7d2hpbGUoaS5lIT1pLmkuZ2MoKSl7aS5lPjAmJihiLmErPVNoZSxiKTt5ZmQoQkQoRHlkKGkpLDE2MCksYil9Yi5hKz0nKSd9fX1cbmZ1bmN0aW9uIHkyYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbjtmPUJEKHZOYihhLCh3dGMoKSwkc2MpKSw3OSk7aWYoIWYpe3JldHVybn1kPWEuYTtlPW5ldyBnN2MoYyk7UDZjKGUsQzJiKGEpKTtpZihmX2IoYS5kLmksYS5jLmkpKXttPWEuYztsPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFttLm4sbS5hXSkpO2M3YyhsLGMpfWVsc2V7bD1BMGIoYS5jKX1Hc2IoZCxsLGQuYSxkLmEuYSk7bj1BMGIoYS5kKTt2TmIoYSx1dGMpIT1udWxsJiZQNmMobixCRCh2TmIoYSx1dGMpLDgpKTtHc2IoZCxuLGQuYy5iLGQuYyk7cTdjKGQsZSk7Zz1pdGQoZix0cnVlLHRydWUpO2ttZChnLEJEKHF1ZCgoIWYuYiYmKGYuYj1uZXcgeTVkKHoyLGYsNCw3KSksZi5iKSwwKSw4MikpO2xtZChnLEJEKHF1ZCgoIWYuYyYmKGYuYz1uZXcgeTVkKHoyLGYsNSw4KSksZi5jKSwwKSw4MikpO2lmZChkLGcpO2ZvcihrPW5ldyBvbGIoYS5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksNzApO2g9QkQodk5iKGosJHNjKSwxMzcpO2NsZChoLGouby5hKTthbGQoaCxqLm8uYik7YmxkKGgsai5uLmErZS5hLGoubi5iK2UuYik7amtkKGgsKEk5YigpLEg5YiksREQodk5iKGosSDliKSkpfWk9QkQodk5iKGEsKE55YygpLGp4YykpLDc0KTtpZihpKXtxN2MoaSxlKTtqa2QoZixqeGMsaSl9ZWxzZXtqa2QoZixqeGMsbnVsbCl9Yj09KEFhZCgpLHlhZCk/amtkKGYsU3djLHlhZCk6amtkKGYsU3djLG51bGwpfVxuZnVuY3Rpb24gbUpjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscztuPWIuYy5sZW5ndGg7bT0wO2ZvcihsPW5ldyBvbGIoYS5iKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMjkpO3I9ay5hO2lmKHIuYy5sZW5ndGg9PTApe2NvbnRpbnVlfXE9bmV3IG9sYihyKTtqPTA7cz1udWxsO2U9QkQobWxiKHEpLDEwKTtmPW51bGw7d2hpbGUoZSl7Zj1CRChJa2IoYixlLnApLDI1Nyk7aWYoZi5jPj0wKXtpPW51bGw7aD1uZXcgQmliKGsuYSxqKzEpO3doaWxlKGguYjxoLmQuZ2MoKSl7Zz0oc0NiKGguYjxoLmQuZ2MoKSksQkQoaC5kLlhiKGguYz1oLmIrKyksMTApKTtpPUJEKElrYihiLGcucCksMjU3KTtpZihpLmQ9PWYuZCYmaS5jPGYuYyl7YnJlYWt9ZWxzZXtpPW51bGx9fWlmKGkpe2lmKHMpe05rYihkLGUucCxtZWIoQkQoSWtiKGQsZS5wKSwxOSkuYS0xKSk7QkQoSWtiKGMscy5wKSwxNSkuTWMoZil9Zj15SmMoZixlLG4rKyk7Yi5jW2IuYy5sZW5ndGhdPWY7RWtiKGMsbmV3IFJrYik7aWYocyl7QkQoSWtiKGMscy5wKSwxNSkuRmMoZik7RWtiKGQsbWViKDEpKX1lbHNle0VrYihkLG1lYigwKSl9fX1vPW51bGw7aWYocS5hPHEuYy5jLmxlbmd0aCl7bz1CRChtbGIocSksMTApO3A9QkQoSWtiKGIsby5wKSwyNTcpO0JEKElrYihjLGUucCksMTUpLkZjKHApO05rYihkLG8ucCxtZWIoQkQoSWtiKGQsby5wKSwxOSkuYSsxKSl9Zi5kPW07Zi5jPWorKztzPWU7ZT1vfSsrbX19XG5mdW5jdGlvbiB1NmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7aT1hO2s9YzdjKG5ldyBmN2MoYi5hLGIuYiksYSk7aj1jO2w9YzdjKG5ldyBmN2MoZC5hLGQuYiksYyk7bT1pLmE7cT1pLmI7bz1qLmE7cz1qLmI7bj1rLmE7cj1rLmI7cD1sLmE7dD1sLmI7ZT1wKnItbip0O0l5KCk7TXkoSnFlKTtpZigkd25kLk1hdGguYWJzKDAtZSk8PUpxZXx8MD09ZXx8aXNOYU4oMCkmJmlzTmFOKGUpKXtyZXR1cm4gZmFsc2V9Zz0xL2UqKChtLW8pKnItKHEtcykqbik7aD0xL2UqLSgtKG0tbykqdCsocS1zKSpwKTtmPShudWxsLE15KEpxZSksKCR3bmQuTWF0aC5hYnMoMC1nKTw9SnFlfHwwPT1nfHxpc05hTigwKSYmaXNOYU4oZyk/MDowPGc/LTE6MD5nPzE6TnkoaXNOYU4oMCksaXNOYU4oZykpKTwwJiYobnVsbCxNeShKcWUpLCgkd25kLk1hdGguYWJzKGctMSk8PUpxZXx8Zz09MXx8aXNOYU4oZykmJmlzTmFOKDEpPzA6ZzwxPy0xOmc+MT8xOk55KGlzTmFOKGcpLGlzTmFOKDEpKSk8MCkmJihudWxsLE15KEpxZSksKCR3bmQuTWF0aC5hYnMoMC1oKTw9SnFlfHwwPT1ofHxpc05hTigwKSYmaXNOYU4oaCk/MDowPGg/LTE6MD5oPzE6TnkoaXNOYU4oMCksaXNOYU4oaCkpKTwwKSYmKG51bGwsTXkoSnFlKSwoJHduZC5NYXRoLmFicyhoLTEpPD1KcWV8fGg9PTF8fGlzTmFOKGgpJiZpc05hTigxKT8wOmg8MT8tMTpoPjE/MTpOeShpc05hTihoKSxpc05hTigxKSkpPDApKTtyZXR1cm4gZn1cbmZ1bmN0aW9uIHo2ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdztmb3IobD1uZXcgdXNiKG5ldyBuc2IoYSkpO2wuYiE9bC5jLmEuZDspe2s9dHNiKGwpO2g9QkQoay5kLDU2KTtiPUJEKGsuZSw1Nik7Zz1oLlRnKCk7Zm9yKHA9MCx1PShnLmk9PW51bGwmJlRLZChnKSxnLmkpLmxlbmd0aDtwPHU7KytwKXtqPShmPShnLmk9PW51bGwmJlRLZChnKSxnLmkpLHA+PTAmJnA8Zi5sZW5ndGg/ZltwXTpudWxsKTtpZihqLklqKCkmJiFqLkpqKCkpe2lmKEpEKGosOTkpKXtpPUJEKGosMTgpOyhpLkJiJm90ZSk9PTAmJih3PXpVZChpKSwhKCEhdyYmKHcuQmImb3RlKSE9MCkpJiZ5NmQoYSxpLGgsYil9ZWxzZXtRNmQoKTtpZihCRChqLDY2KS5PaigpKXtjPSh2PWosQkQoIXY/bnVsbDpCRChiLDQ5KS54aCh2KSwxNTMpKTtpZihjKXtuPUJEKGguYWgoaiksMTUzKTtkPWMuZ2MoKTtmb3IocT0wLG89bi5nYygpO3E8bzsrK3Epe209bi5pbChxKTtpZihKRChtLDk5KSl7dD1uLmpsKHEpO2U9V3JiKGEsdCk7aWYoZT09bnVsbCYmdCE9bnVsbCl7cz1CRChtLDE4KTtpZighYS5ifHwocy5CYiZvdGUpIT0wfHwhIXpVZChzKSl7Y29udGludWV9ZT10fWlmKCFjLmRsKG0sZSkpe2ZvcihyPTA7cjxkOysrcil7aWYoYy5pbChyKT09bSYmUEQoYy5qbChyKSk9PT1QRChlKSl7Yy5paShjLmdjKCktMSxyKTstLWQ7YnJlYWt9fX19ZWxzZXtjLmRsKG4uaWwocSksbi5qbChxKSl9fX19fX19fX1cbmZ1bmN0aW9uIENaYyhhLGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtyPXhaYyhiLGMsYS5nKTtlLm4mJmUubiYmISFmJiZUZGQoZSxpNmQoZiksKHBnZCgpLG1nZCkpO2lmKGEuYil7Zm9yKHE9MDtxPHIuYy5sZW5ndGg7cSsrKXtsPSh0Q2IocSxyLmMubGVuZ3RoKSxCRChyLmNbcV0sMjAwKSk7aWYocSE9MCl7bj0odENiKHEtMSxyLmMubGVuZ3RoKSxCRChyLmNbcS0xXSwyMDApKTt3JGMobCxuLmYrbi5iK2EuZyl9dFpjKHEscixjLGEuZyk7QVpjKGEsbCk7ZS5uJiYhIWYmJlRkZChlLGk2ZChmKSwocGdkKCksbWdkKSl9fWVsc2V7Zm9yKHA9bmV3IG9sYihyKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1CRChtbGIocCksMjAwKTtmb3Ioaz1uZXcgb2xiKG8uYSk7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDE4Nyk7cz1uZXcgYiRjKGoucyxqLnQsYS5nKTtXWmMocyxqKTtFa2Ioby5kLHMpfX19QlpjKGEscik7ZS5uJiZlLm4mJiEhZiYmVGRkKGUsaTZkKGYpLChwZ2QoKSxtZ2QpKTt0PSR3bmQuTWF0aC5tYXgoYS5kLGQuYS0oZy5iK2cuYykpO209JHduZC5NYXRoLm1heChhLmMsZC5iLShnLmQrZy5hKSk7aD1tLWEuYztpZihhLmUmJmEuZil7aT10L207aTxhLmE/KHQ9bSphLmEpOihoKz10L2EuYS1tKX1hLmUmJnpaYyhyLHQsaCk7ZS5uJiZlLm4mJiEhZiYmVGRkKGUsaTZkKGYpLChwZ2QoKSxtZ2QpKTtyZXR1cm4gbmV3IGQkYyhhLmEsdCxhLmMraCwoayRjKCksaiRjKSl9XG5mdW5jdGlvbiBVSmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDthLmo9S0MoV0Qsb2plLDI1LGEuZywxNSwxKTthLm89bmV3IFJrYjtNQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZS5iLDE2KSksbmV3IGFMYyksbmV3IGNMYyhhKSk7YS5hPUtDKHNiYixkbGUsMjUsYS5iLDE2LDEpO1RBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmUuYiwxNikpLG5ldyByTGMoYSkpO2Q9KGw9bmV3IFJrYixNQWIoSkFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmUuYiwxNikpLG5ldyBoTGMpLG5ldyBqTGMoYSkpLG5ldyBsTGMoYSxsKSksbCk7Zm9yKGk9bmV3IG9sYihkKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksNTA4KTtpZihoLmMubGVuZ3RoPD0xKXtjb250aW51ZX1pZihoLmMubGVuZ3RoPT0yKXt1S2MoaCk7YktjKCh0Q2IoMCxoLmMubGVuZ3RoKSxCRChoLmNbMF0sMTcpKS5kLmkpfHxFa2IoYS5vLGgpO2NvbnRpbnVlfWlmKHRLYyhoKXx8c0tjKGgsbmV3IGZMYykpe2NvbnRpbnVlfWo9bmV3IG9sYihoKTtlPW51bGw7d2hpbGUoai5hPGouYy5jLmxlbmd0aCl7Yj1CRChtbGIoaiksMTcpO2M9YS5jW2IucF07IWV8fGouYT49ai5jLmMubGVuZ3RoPyhrPUpKYygoajBiKCksaDBiKSxnMGIpKTooaz1KSmMoKGowYigpLGcwYiksZzBiKSk7ayo9MjtmPWMuYS5nO2MuYS5nPSR3bmQuTWF0aC5tYXgoZixmKyhrLWYpKTtnPWMuYi5nO2MuYi5nPSR3bmQuTWF0aC5tYXgoZyxnKyhrLWcpKTtlPWJ9fX1cbmZ1bmN0aW9uIFZOYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHY7dj1IeChhKTtrPW5ldyBSa2I7aD1hLmMubGVuZ3RoO2w9aC0xO209aCsxO3doaWxlKHYuYS5jIT0wKXt3aGlsZShjLmIhPTApe3Q9KHNDYihjLmIhPTApLEJEKE5zYihjLGMuYS5hKSwxMTIpKTtKd2Iodi5hLHQpIT1udWxsO3QuZz1sLS07WU5jKHQsYixjLGQpfXdoaWxlKGIuYiE9MCl7dT0oc0NiKGIuYiE9MCksQkQoTnNiKGIsYi5hLmEpLDExMikpO0p3Yih2LmEsdSkhPW51bGw7dS5nPW0rKztZTmModSxiLGMsZCl9aj1SaWU7Zm9yKHI9KGc9bmV3IFl3YigobmV3IGN4YigobmV3IEdqYih2LmEpKS5hKSkuYiksbmV3IE5qYihnKSk7c2liKHIuYS5hKTspe3E9KGY9V3diKHIuYSksQkQoZi5jZCgpLDExMikpO2lmKCFkJiZxLmI+MCYmcS5hPD0wKXtrLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2suY1trLmMubGVuZ3RoXT1xO2JyZWFrfXA9cS5pLXEuZDtpZihwPj1qKXtpZihwPmope2suYz1LQyhTSSxVaGUsMSwwLDUsMSk7aj1wfWsuY1trLmMubGVuZ3RoXT1xfX1pZihrLmMubGVuZ3RoIT0wKXtpPUJEKElrYihrLEJ1YihlLGsuYy5sZW5ndGgpKSwxMTIpO0p3Yih2LmEsaSkhPW51bGw7aS5nPW0rKztZTmMoaSxiLGMsZCk7ay5jPUtDKFNJLFVoZSwxLDAsNSwxKX19cz1hLmMubGVuZ3RoKzE7Zm9yKG89bmV3IG9sYihhKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1CRChtbGIobyksMTEyKTtuLmc8aCYmKG4uZz1uLmcrcyl9fVxuZnVuY3Rpb24gU0RiKGEsYil7dmFyIGM7aWYoYS5lKXt0aHJvdyB2YmIobmV3IFpkYigoZmRiKFRNKSxKa2UrVE0uaytLa2UpKSl9aWYoIWxEYihhLmEsYikpe3Rocm93IHZiYihuZXcgaHooTGtlK2IrTWtlKSl9aWYoYj09YS5kKXtyZXR1cm4gYX1jPWEuZDthLmQ9Yjtzd2l0Y2goYy5nKXtjYXNlIDA6c3dpdGNoKGIuZyl7Y2FzZSAyOlBEYihhKTticmVhaztjYXNlIDE6WERiKGEpO1BEYihhKTticmVhaztjYXNlIDQ6YkViKGEpO1BEYihhKTticmVhaztjYXNlIDM6YkViKGEpO1hEYihhKTtQRGIoYSk7fWJyZWFrO2Nhc2UgMjpzd2l0Y2goYi5nKXtjYXNlIDE6WERiKGEpO1lEYihhKTticmVhaztjYXNlIDQ6YkViKGEpO1BEYihhKTticmVhaztjYXNlIDM6YkViKGEpO1hEYihhKTtQRGIoYSk7fWJyZWFrO2Nhc2UgMTpzd2l0Y2goYi5nKXtjYXNlIDI6WERiKGEpO1lEYihhKTticmVhaztjYXNlIDQ6WERiKGEpO2JFYihhKTtQRGIoYSk7YnJlYWs7Y2FzZSAzOlhEYihhKTtiRWIoYSk7WERiKGEpO1BEYihhKTt9YnJlYWs7Y2FzZSA0OnN3aXRjaChiLmcpe2Nhc2UgMjpiRWIoYSk7UERiKGEpO2JyZWFrO2Nhc2UgMTpiRWIoYSk7WERiKGEpO1BEYihhKTticmVhaztjYXNlIDM6WERiKGEpO1lEYihhKTt9YnJlYWs7Y2FzZSAzOnN3aXRjaChiLmcpe2Nhc2UgMjpYRGIoYSk7YkViKGEpO1BEYihhKTticmVhaztjYXNlIDE6WERiKGEpO2JFYihhKTtYRGIoYSk7UERiKGEpO2JyZWFrO2Nhc2UgNDpYRGIoYSk7WURiKGEpO319cmV0dXJuIGF9XG5mdW5jdGlvbiB0VmIoYSxiKXt2YXIgYztpZihhLmQpe3Rocm93IHZiYihuZXcgWmRiKChmZGIoTFApLEprZStMUC5rK0trZSkpKX1pZighY1ZiKGEuYSxiKSl7dGhyb3cgdmJiKG5ldyBoeihMa2UrYitNa2UpKX1pZihiPT1hLmMpe3JldHVybiBhfWM9YS5jO2EuYz1iO3N3aXRjaChjLmcpe2Nhc2UgMDpzd2l0Y2goYi5nKXtjYXNlIDI6cVZiKGEpO2JyZWFrO2Nhc2UgMTp4VmIoYSk7cVZiKGEpO2JyZWFrO2Nhc2UgNDpCVmIoYSk7cVZiKGEpO2JyZWFrO2Nhc2UgMzpCVmIoYSk7eFZiKGEpO3FWYihhKTt9YnJlYWs7Y2FzZSAyOnN3aXRjaChiLmcpe2Nhc2UgMTp4VmIoYSk7eVZiKGEpO2JyZWFrO2Nhc2UgNDpCVmIoYSk7cVZiKGEpO2JyZWFrO2Nhc2UgMzpCVmIoYSk7eFZiKGEpO3FWYihhKTt9YnJlYWs7Y2FzZSAxOnN3aXRjaChiLmcpe2Nhc2UgMjp4VmIoYSk7eVZiKGEpO2JyZWFrO2Nhc2UgNDp4VmIoYSk7QlZiKGEpO3FWYihhKTticmVhaztjYXNlIDM6eFZiKGEpO0JWYihhKTt4VmIoYSk7cVZiKGEpO31icmVhaztjYXNlIDQ6c3dpdGNoKGIuZyl7Y2FzZSAyOkJWYihhKTtxVmIoYSk7YnJlYWs7Y2FzZSAxOkJWYihhKTt4VmIoYSk7cVZiKGEpO2JyZWFrO2Nhc2UgMzp4VmIoYSk7eVZiKGEpO31icmVhaztjYXNlIDM6c3dpdGNoKGIuZyl7Y2FzZSAyOnhWYihhKTtCVmIoYSk7cVZiKGEpO2JyZWFrO2Nhc2UgMTp4VmIoYSk7QlZiKGEpO3hWYihhKTtxVmIoYSk7YnJlYWs7Y2FzZSA0OnhWYihhKTt5VmIoYSk7fX1yZXR1cm4gYX1cbmZ1bmN0aW9uIFVRYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztmb3IoaT1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO2kuZSE9aS5pLmdjKCk7KXtoPUJEKER5ZChpKSwzMyk7Zm9yKGU9bmV3IFNyKHVyKF9zZChoKS5hLktjKCksbmV3IFNxKSk7UXIoZSk7KXtkPUJEKFJyKGUpLDc5KTshZC5iJiYoZC5iPW5ldyB5NWQoejIsZCw0LDcpKTtpZighKGQuYi5pPD0xJiYoIWQuYyYmKGQuYz1uZXcgeTVkKHoyLGQsNSw4KSksZC5jLmk8PTEpKSl7dGhyb3cgdmJiKG5ldyB6MmMoJ0dyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4nKSl9aWYoIVBsZChkKSYmaCE9YXRkKEJEKHF1ZCgoIWQuYyYmKGQuYz1uZXcgeTVkKHoyLGQsNSw4KSksZC5jKSwwKSw4MikpKXtqPW5ldyBnUmI7dE5iKGosZCk7eU5iKGosKEhTYigpLEZTYiksZCk7ZFJiKGosQkQoV2QoaXJiKGMuZixoKSksMTQ0KSk7ZVJiKGosQkQoT2hiKGMsYXRkKEJEKHF1ZCgoIWQuYyYmKGQuYz1uZXcgeTVkKHoyLGQsNSw4KSksZC5jKSwwKSw4MikpKSwxNDQpKTtFa2IoYi5jLGopO2ZvcihnPW5ldyBGeWQoKCFkLm4mJihkLm49bmV3IGNVZChEMixkLDEsNykpLGQubikpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwxMzcpO2s9bmV3IG1SYihqLGYuYSk7dE5iKGssZik7eU5iKGssRlNiLGYpO2suZS5hPSR3bmQuTWF0aC5tYXgoZi5nLDEpO2suZS5iPSR3bmQuTWF0aC5tYXgoZi5mLDEpO2xSYihrKTtFa2IoYi5kLGspfX19fX1cbmZ1bmN0aW9uIE9HYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtsPW5ldyBMSWIoYSk7aUtiKGwsIShiPT0oZWFkKCksZGFkKXx8Yj09XzljKSk7az1sLmE7bT1uZXcgcDBiO2ZvcihlPShnSGIoKSxPQyhHQyhwTiwxKSxLaWUsMjMyLDAsW2RIYixlSGIsZkhiXSkpLGc9MCxpPWUubGVuZ3RoO2c8aTsrK2cpe2M9ZVtnXTtqPXhIYihrLGRIYixjKTshIWomJihtLmQ9JHduZC5NYXRoLm1heChtLmQsai5SZSgpKSl9Zm9yKGQ9T0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pLGY9MCxoPWQubGVuZ3RoO2Y8aDsrK2Ype2M9ZFtmXTtqPXhIYihrLGZIYixjKTshIWomJihtLmE9JHduZC5NYXRoLm1heChtLmEsai5SZSgpKSl9Zm9yKHA9T0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pLHI9MCx0PXAubGVuZ3RoO3I8dDsrK3Ipe249cFtyXTtqPXhIYihrLG4sZEhiKTshIWomJihtLmI9JHduZC5NYXRoLm1heChtLmIsai5TZSgpKSl9Zm9yKG89T0MoR0MocE4sMSksS2llLDIzMiwwLFtkSGIsZUhiLGZIYl0pLHE9MCxzPW8ubGVuZ3RoO3E8czsrK3Epe249b1txXTtqPXhIYihrLG4sZkhiKTshIWomJihtLmM9JHduZC5NYXRoLm1heChtLmMsai5TZSgpKSl9aWYobS5kPjApe20uZCs9ay5uLmQ7bS5kKz1rLmR9aWYobS5hPjApe20uYSs9ay5uLmE7bS5hKz1rLmR9aWYobS5iPjApe20uYis9ay5uLmI7bS5iKz1rLmR9aWYobS5jPjApe20uYys9ay5uLmM7bS5jKz1rLmR9cmV0dXJuIG19XG5mdW5jdGlvbiBkNmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbzttPWMuZDtsPWMuYztmPW5ldyBmN2MoYy5mLmErYy5kLmIrYy5kLmMsYy5mLmIrYy5kLmQrYy5kLmEpO2c9Zi5iO2ZvcihqPW5ldyBvbGIoYS5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaiksMTApO2lmKGguayE9KGowYigpLGUwYikpe2NvbnRpbnVlfWQ9QkQodk5iKGgsKHd0YygpLEhzYykpLDYxKTtlPUJEKHZOYihoLElzYyksOCk7az1oLm47c3dpdGNoKGQuZyl7Y2FzZSAyOmsuYT1jLmYuYSttLmMtbC5hO2JyZWFrO2Nhc2UgNDprLmE9LWwuYS1tLmI7fW89MDtzd2l0Y2goZC5nKXtjYXNlIDI6Y2FzZSA0OmlmKGI9PShkY2QoKSxfYmQpKXtuPUVkYihFRCh2TmIoaCxodGMpKSk7ay5iPWYuYipuLUJEKHZOYihoLChOeWMoKSxUeGMpKSw4KS5iO289ay5iK2UuYjtNX2IoaCxmYWxzZSx0cnVlKX1lbHNlIGlmKGI9PSRiZCl7ay5iPUVkYihFRCh2TmIoaCxodGMpKSktQkQodk5iKGgsKE55YygpLFR4YykpLDgpLmI7bz1rLmIrZS5iO01fYihoLGZhbHNlLHRydWUpfX1nPSR3bmQuTWF0aC5tYXgoZyxvKX1jLmYuYis9Zy1mLmI7Zm9yKGk9bmV3IG9sYihhLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxMCk7aWYoaC5rIT0oajBiKCksZTBiKSl7Y29udGludWV9ZD1CRCh2TmIoaCwod3RjKCksSHNjKSksNjEpO2s9aC5uO3N3aXRjaChkLmcpe2Nhc2UgMTprLmI9LWwuYi1tLmQ7YnJlYWs7Y2FzZSAzOmsuYj1jLmYuYittLmEtbC5iO319fVxuZnVuY3Rpb24gblJjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjtlPUJEKHZOYihhLChtVGMoKSxkVGMpKSwzMyk7aj1PaGU7az1PaGU7aD1SaWU7aT1SaWU7Zm9yKHc9SnNiKGEuYiwwKTt3LmIhPXcuZC5jOyl7dT1CRChYc2IodyksODYpO3A9dS5lO3E9dS5mO2o9JHduZC5NYXRoLm1pbihqLHAuYS1xLmEvMik7az0kd25kLk1hdGgubWluKGsscC5iLXEuYi8yKTtoPSR3bmQuTWF0aC5tYXgoaCxwLmErcS5hLzIpO2k9JHduZC5NYXRoLm1heChpLHAuYitxLmIvMil9bz1CRChoa2QoZSwoSlRjKCksQlRjKSksMTE2KTtuPW5ldyBmN2Moby5iLWosby5kLWspO2Zvcih2PUpzYihhLmIsMCk7di5iIT12LmQuYzspe3U9QkQoWHNiKHYpLDg2KTttPXZOYih1LGRUYyk7aWYoSkQobSwyMzkpKXtmPUJEKG0sMzMpO2w9UDZjKHUuZSxuKTtibGQoZixsLmEtZi5nLzIsbC5iLWYuZi8yKX19Zm9yKHQ9SnNiKGEuYSwwKTt0LmIhPXQuZC5jOyl7cz1CRChYc2IodCksMTg4KTtkPUJEKHZOYihzLGRUYyksNzkpO2lmKGQpe2I9cy5hO3I9bmV3IGc3YyhzLmIuZSk7R3NiKGIscixiLmEsYi5hLmEpO0E9bmV3IGc3YyhzLmMuZSk7R3NiKGIsQSxiLmMuYixiLmMpO3FSYyhyLEJEKFV0KGIsMSksOCkscy5iLmYpO3FSYyhBLEJEKFV0KGIsYi5iLTIpLDgpLHMuYy5mKTtjPWl0ZChkLHRydWUsdHJ1ZSk7aWZkKGIsYyl9fUI9aC1qKyhvLmIrby5jKTtnPWktaysoby5kK28uYSk7QWZkKGUsQixnLGZhbHNlLGZhbHNlKX1cbmZ1bmN0aW9uIHhvYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtsPWEuYjtrPW5ldyBCaWIobCwwKTtBaWIoayxuZXcgSDFiKGEpKTtzPWZhbHNlO2c9MTt3aGlsZShrLmI8ay5kLmdjKCkpe2o9KHNDYihrLmI8ay5kLmdjKCkpLEJEKGsuZC5YYihrLmM9ay5iKyspLDI5KSk7cD0odENiKGcsbC5jLmxlbmd0aCksQkQobC5jW2ddLDI5KSk7cT1NdShqLmEpO3I9cS5jLmxlbmd0aDtmb3Iobz1uZXcgb2xiKHEpO28uYTxvLmMuYy5sZW5ndGg7KXttPUJEKG1sYihvKSwxMCk7JF9iKG0scCl9aWYocyl7Zm9yKG49YXYobmV3IG92KHEpLDApO24uYy5TYigpOyl7bT1CRChwdihuKSwxMCk7Zm9yKGY9bmV3IG9sYihNdShSX2IobSkpKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTcpO1BaYihlLHRydWUpO3lOYihhLCh3dGMoKSxBc2MpLChCY2IoKSx0cnVlKSk7ZD1Ob2MoYSxlLHIpO2M9QkQodk5iKG0sdXNjKSwzMDUpO3Q9QkQoSWtiKGQsZC5jLmxlbmd0aC0xKSwxNyk7Yy5rPXQuYy5pO2Mubj10O2MuYj1lLmQuaTtjLmM9ZX19cz1mYWxzZX1lbHNle2lmKHEuYy5sZW5ndGghPTApe2I9KHRDYigwLHEuYy5sZW5ndGgpLEJEKHEuY1swXSwxMCkpO2lmKGIuaz09KGowYigpLGQwYikpe3M9dHJ1ZTtnPS0xfX19KytnfWg9bmV3IEJpYihhLmIsMCk7d2hpbGUoaC5iPGguZC5nYygpKXtpPShzQ2IoaC5iPGguZC5nYygpKSxCRChoLmQuWGIoaC5jPWguYisrKSwyOSkpO2kuYS5jLmxlbmd0aD09MCYmdWliKGgpfX1cbmZ1bmN0aW9uIHdLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2s9QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCk7aWYoay5nYygpPD0yfHxiPT0oVWNkKCksemNkKXx8Yj09KFVjZCgpLFRjZCkpe0FLYihhLGIpO3JldHVybn1wPWEudS5IYygocmNkKCkscWNkKSk7Yz1iPT0oVWNkKCksQWNkKT8odkxiKCksdUxiKToodkxiKCksckxiKTtyPWI9PUFjZD8oRUliKCksQkliKTooRUliKCksREliKTtkPWRMYihpTGIoYyksYS5zKTtxPWI9PUFjZD9QamU6UWplO2ZvcihqPWsuS2MoKTtqLk9iKCk7KXtoPUJEKGouUGIoKSwxMTEpO2lmKCFoLmN8fGguYy5kLmMubGVuZ3RoPD0wKXtjb250aW51ZX1vPWguYi5yZigpO249aC5lO2w9aC5jO209bC5pO20uYj0oZj1sLm4sbC5lLmErZi5iK2YuYyk7bS5hPShnPWwubixsLmUuYitnLmQrZy5hKTtpZihwKXttLmM9bi5hLShlPWwubixsLmUuYStlLmIrZS5jKS1hLnM7cD1mYWxzZX1lbHNle20uYz1uLmErby5hK2Euc315dGIocixsbGUpO2wuZj1yOyRIYihsLChOSGIoKSxNSGIpKTtFa2IoZC5kLG5ldyBCTGIobSxiTGIoZCxtKSkpO3E9Yj09QWNkPyR3bmQuTWF0aC5taW4ocSxuLmIpOiR3bmQuTWF0aC5tYXgocSxuLmIraC5iLnJmKCkuYil9cSs9Yj09QWNkPy1hLnQ6YS50O2NMYigoZC5lPXEsZCkpO2ZvcihpPWsuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSwxMTEpO2lmKCFoLmN8fGguYy5kLmMubGVuZ3RoPD0wKXtjb250aW51ZX1tPWguYy5pO20uYy09aC5lLmE7bS5kLT1oLmUuYn19XG5mdW5jdGlvbiBJRGMoYSxiLGMpe3ZhciBkO09kZChjLCdTdHJldGNoV2lkdGggbGF5ZXJpbmcnLDEpO2lmKGIuYS5jLmxlbmd0aD09MCl7UWRkKGMpO3JldHVybn1hLmM9YjthLnQ9MDthLnU9MDthLmk9UGplO2EuZz1RamU7YS5kPUVkYihFRCh2TmIoYiwoTnljKCksbHljKSkpKTtDRGMoYSk7RERjKGEpO0FEYyhhKTtIRGMoYSk7QkRjKGEpO2EuaT0kd25kLk1hdGgubWF4KDEsYS5pKTthLmc9JHduZC5NYXRoLm1heCgxLGEuZyk7YS5kPWEuZC9hLmk7YS5mPWEuZy9hLmk7YS5zPUZEYyhhKTtkPW5ldyBIMWIoYS5jKTtFa2IoYS5jLmIsZCk7YS5yPU11KGEucCk7YS5uPXRsYihhLmssYS5rLmxlbmd0aCk7d2hpbGUoYS5yLmMubGVuZ3RoIT0wKXthLm89SkRjKGEpO2lmKCFhLm98fEVEYyhhKSYmYS5iLmEuZ2MoKSE9MCl7S0RjKGEsZCk7ZD1uZXcgSDFiKGEuYyk7RWtiKGEuYy5iLGQpO3llKGEuYSxhLmIpO2EuYi5hLiRiKCk7YS50PWEudTthLnU9MH1lbHNle2lmKEVEYyhhKSl7YS5jLmIuYz1LQyhTSSxVaGUsMSwwLDUsMSk7ZD1uZXcgSDFiKGEuYyk7RWtiKGEuYy5iLGQpO2EudD0wO2EudT0wO2EuYi5hLiRiKCk7YS5hLmEuJGIoKTsrK2EuZjthLnI9TXUoYS5wKTthLm49dGxiKGEuayxhLmsubGVuZ3RoKX1lbHNleyRfYihhLm8sZCk7TGtiKGEucixhLm8pO1FxYihhLmIsYS5vKTthLnQ9YS50LWEua1thLm8ucF0qYS5kK2EualthLm8ucF07YS51Kz1hLmVbYS5vLnBdKmEuZH19fWIuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtzbWIoYi5iKTtRZGQoYyl9XG5mdW5jdGlvbiBNZ2MoYSl7dmFyIGIsYyxkLGU7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmEuYiwxNikpLG5ldyBraGMpLG5ldyBtaGMpO0tnYyhhKTtNQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuYS5iLDE2KSksbmV3IG9oYyksbmV3IHFoYyk7aWYoYS5jPT0oQWFkKCkseWFkKSl7TUFiKEpBYihMQWIobmV3IFlBYihudWxsLG5ldyBLdWIobmV3IFBpYihhLmYpLDEpKSxuZXcgeWhjKSxuZXcgQWhjKSxuZXcgQ2hjKGEpKTtNQWIoSkFiKE5BYihMQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZC5iLDE2KSksbmV3IEdoYyksbmV3IEloYyksbmV3IEtoYyksbmV3IE1oYyksbmV3IE9oYyhhKSl9ZT1uZXcgZjdjKFBqZSxQamUpO2I9bmV3IGY3YyhRamUsUWplKTtmb3IoZD1uZXcgb2xiKGEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksNTcpO2UuYT0kd25kLk1hdGgubWluKGUuYSxjLmQuYyk7ZS5iPSR3bmQuTWF0aC5taW4oZS5iLGMuZC5kKTtiLmE9JHduZC5NYXRoLm1heChiLmEsYy5kLmMrYy5kLmIpO2IuYj0kd25kLk1hdGgubWF4KGIuYixjLmQuZCtjLmQuYSl9UDZjKFg2YyhhLmQuYyksVjZjKG5ldyBmN2MoZS5hLGUuYikpKTtQNmMoWDZjKGEuZC5mKSxjN2MobmV3IGY3YyhiLmEsYi5iKSxlKSk7TGdjKGEsZSxiKTtVaGIoYS5mKTtVaGIoYS5iKTtVaGIoYS5nKTtVaGIoYS5lKTthLmEuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKTthLmEuYi5jPUtDKFNJLFVoZSwxLDAsNSwxKTthLmE9bnVsbDthLmQ9bnVsbH1cbmZ1bmN0aW9uIHZaYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtlPW5ldyBSa2I7Zm9yKHA9bmV3IG9sYihiLmEpO3AuYTxwLmMuYy5sZW5ndGg7KXtvPUJEKG1sYihwKSwxMCk7bj1vLmU7aWYobil7ZD12WmIoYSxuLG8pO0drYihlLGQpO3NaYihhLG4sbyk7aWYoQkQodk5iKG4sKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSkpe3M9QkQodk5iKG8sKE55YygpLFZ4YykpLDk4KTttPUJEKHZOYihvLFl4YyksMTc0KS5IYygocmNkKCksbmNkKSk7Zm9yKHI9bmV3IG9sYihvLmopO3IuYTxyLmMuYy5sZW5ndGg7KXtxPUJEKG1sYihyKSwxMSk7Zj1CRChPaGIoYS5iLHEpLDEwKTtpZighZil7Zj1aJGIocSxzLHEuaiwtKHEuZS5jLmxlbmd0aC1xLmcuYy5sZW5ndGgpLG51bGwsbmV3IGQ3YyxxLm8sQkQodk5iKG4sTHdjKSwxMDMpLG4pO3lOYihmLCRzYyxxKTtSaGIoYS5iLHEsZik7RWtiKG4uYSxmKX1nPUJEKElrYihmLmosMCksMTEpO2ZvcihrPW5ldyBvbGIocS5mKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksNzApO2g9bmV3IHBfYjtoLm8uYT1qLm8uYTtoLm8uYj1qLm8uYjtFa2IoZy5mLGgpO2lmKCFtKXt0PXEuajtsPTA7dGNkKEJEKHZOYihvLFl4YyksMjEpKSYmKGw9bWZkKGoubixqLm8scS5vLDAsdCkpO3M9PShkY2QoKSxiY2QpfHwoVWNkKCksRWNkKS5IYyh0KT8oaC5vLmE9bCk6KGguby5iPWwpfX19fX19aT1uZXcgUmtiO3JaYihhLGIsYyxlLGkpOyEhYyYmdFpiKGEsYixjLGkpO3JldHVybiBpfVxuZnVuY3Rpb24gbkVjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7aWYoYS5jW2IuYy5wXVtiLnBdLmUpe3JldHVybn1lbHNle2EuY1tiLmMucF1bYi5wXS5lPXRydWV9YS5jW2IuYy5wXVtiLnBdLmI9MDthLmNbYi5jLnBdW2IucF0uZD0wO2EuY1tiLmMucF1bYi5wXS5hPW51bGw7Zm9yKGs9bmV3IG9sYihiLmopO2suYTxrLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihrKSwxMSk7bD1jP25ldyBKMGIoaik6bmV3IFIwYihqKTtmb3IoaT1sLktjKCk7aS5PYigpOyl7aD1CRChpLlBiKCksMTEpO2c9aC5pO2lmKGcuYz09Yi5jKXtpZihnIT1iKXtuRWMoYSxnLGMpO2EuY1tiLmMucF1bYi5wXS5iKz1hLmNbZy5jLnBdW2cucF0uYjthLmNbYi5jLnBdW2IucF0uZCs9YS5jW2cuYy5wXVtnLnBdLmR9fWVsc2V7YS5jW2IuYy5wXVtiLnBdLmQrPWEuZ1toLnBdOysrYS5jW2IuYy5wXVtiLnBdLmJ9fX1mPUJEKHZOYihiLCh3dGMoKSxzc2MpKSwxNSk7aWYoZil7Zm9yKGU9Zi5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDEwKTtpZihiLmM9PWQuYyl7bkVjKGEsZCxjKTthLmNbYi5jLnBdW2IucF0uYis9YS5jW2QuYy5wXVtkLnBdLmI7YS5jW2IuYy5wXVtiLnBdLmQrPWEuY1tkLmMucF1bZC5wXS5kfX19aWYoYS5jW2IuYy5wXVtiLnBdLmI+MCl7YS5jW2IuYy5wXVtiLnBdLmQrPUN1YihhLmksMjQpKmxrZSowLjA3MDAwMDAwMDI5ODAyMzIyLTAuMDM1MDAwMDAwMTQ5MDExNjE7YS5jW2IuYy5wXVtiLnBdLmE9YS5jW2IuYy5wXVtiLnBdLmQvYS5jW2IuYy5wXVtiLnBdLmJ9fVxuZnVuY3Rpb24gbTViKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2ZvcihvPW5ldyBvbGIoYSk7by5hPG8uYy5jLmxlbmd0aDspe249QkQobWxiKG8pLDEwKTtuNWIobi5uKTtuNWIobi5vKTtvNWIobi5mKTtyNWIobik7dDViKG4pO2ZvcihxPW5ldyBvbGIobi5qKTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1CRChtbGIocSksMTEpO241YihwLm4pO241YihwLmEpO241YihwLm8pO0cwYihwLHM1YihwLmopKTtmPUJEKHZOYihwLChOeWMoKSxXeGMpKSwxOSk7ISFmJiZ5TmIocCxXeGMsbWViKC1mLmEpKTtmb3IoZT1uZXcgb2xiKHAuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDE3KTtmb3IoYz1Kc2IoZC5hLDApO2MuYiE9Yy5kLmM7KXtiPUJEKFhzYihjKSw4KTtuNWIoYil9aT1CRCh2TmIoZCxqeGMpLDc0KTtpZihpKXtmb3IoaD1Kc2IoaSwwKTtoLmIhPWguZC5jOyl7Zz1CRChYc2IoaCksOCk7bjViKGcpfX1mb3IobD1uZXcgb2xiKGQuYik7bC5hPGwuYy5jLmxlbmd0aDspe2o9QkQobWxiKGwpLDcwKTtuNWIoai5uKTtuNWIoai5vKX19Zm9yKG09bmV3IG9sYihwLmYpO20uYTxtLmMuYy5sZW5ndGg7KXtqPUJEKG1sYihtKSw3MCk7bjViKGoubik7bjViKGoubyl9fWlmKG4uaz09KGowYigpLGUwYikpe3lOYihuLCh3dGMoKSxIc2MpLHM1YihCRCh2TmIobixIc2MpLDYxKSkpO3E1YihuKX1mb3Ioaz1uZXcgb2xiKG4uYik7ay5hPGsuYy5jLmxlbmd0aDspe2o9QkQobWxiKGspLDcwKTtyNWIoaik7bjViKGoubyk7bjViKGoubil9fX1cbmZ1bmN0aW9uIHlRYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBO2EuZT1iO2g9JFBiKGIpO3c9bmV3IFJrYjtmb3IoZD1uZXcgb2xiKGgpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxNSk7QT1uZXcgUmtiO3cuY1t3LmMubGVuZ3RoXT1BO2k9bmV3IFRxYjtmb3Iobz1jLktjKCk7by5PYigpOyl7bj1CRChvLlBiKCksMzMpO2Y9d1FiKGEsbix0cnVlLDAsMCk7QS5jW0EuYy5sZW5ndGhdPWY7cD1uLmk7cT1uLmo7bmV3IGY3YyhwLHEpO209KCFuLm4mJihuLm49bmV3IGNVZChEMixuLDEsNykpLG4ubik7Zm9yKGw9bmV3IEZ5ZChtKTtsLmUhPWwuaS5nYygpOyl7aj1CRChEeWQobCksMTM3KTtlPXdRYihhLGosZmFsc2UscCxxKTtBLmNbQS5jLmxlbmd0aF09ZX12PSghbi5jJiYobi5jPW5ldyBjVWQoRjIsbiw5LDkpKSxuLmMpO2ZvcihzPW5ldyBGeWQodik7cy5lIT1zLmkuZ2MoKTspe3I9QkQoRHlkKHMpLDExOCk7Zz13UWIoYSxyLGZhbHNlLHAscSk7QS5jW0EuYy5sZW5ndGhdPWc7dD1yLmkrcDt1PXIuaitxO209KCFyLm4mJihyLm49bmV3IGNVZChEMixyLDEsNykpLHIubik7Zm9yKGs9bmV3IEZ5ZChtKTtrLmUhPWsuaS5nYygpOyl7aj1CRChEeWQoayksMTM3KTtlPXdRYihhLGosZmFsc2UsdCx1KTtBLmNbQS5jLmxlbmd0aF09ZX19eWUoaSxEeChwbChPQyhHQyhLSSwxKSxVaGUsMjAsMCxbX3NkKG4pLCRzZChuKV0pKSkpfXZRYihhLGksQSl9YS5mPW5ldyBhUGIodyk7dE5iKGEuZixiKTtyZXR1cm4gYS5mfVxuZnVuY3Rpb24gS3FkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHO0Q9T2hiKGEuZSxkKTtpZihEPT1udWxsKXtEPW5ldyBlQztuPUJEKEQsMTgzKTtzPWIrJ19zJzt0PXMrZTttPW5ldyB5Qyh0KTtjQyhuLFZ0ZSxtKX1DPUJEKEQsMTgzKTtRcGQoYyxDKTtHPW5ldyBlQztTcGQoRywneCcsZC5qKTtTcGQoRywneScsZC5rKTtjQyhDLFl0ZSxHKTtBPW5ldyBlQztTcGQoQSwneCcsZC5iKTtTcGQoQSwneScsZC5jKTtjQyhDLCdlbmRQb2ludCcsQSk7bD1GaGUoKCFkLmEmJihkLmE9bmV3IHhNZCh5MixkLDUpKSxkLmEpKTtvPSFsO2lmKG8pe3c9bmV3IHdCO2Y9bmV3IFNyZCh3KTtyZWIoKCFkLmEmJihkLmE9bmV3IHhNZCh5MixkLDUpKSxkLmEpLGYpO2NDKEMsT3RlLHcpfWk9ZG1kKGQpO3U9ISFpO3UmJlRwZChhLmEsQyxRdGUsa3FkKGEsZG1kKGQpKSk7cj1lbWQoZCk7dj0hIXI7diYmVHBkKGEuYSxDLFB0ZSxrcWQoYSxlbWQoZCkpKTtqPSghZC5lJiYoZC5lPW5ldyB5NWQoQTIsZCwxMCw5KSksZC5lKS5pPT0wO3A9IWo7aWYocCl7Qj1uZXcgd0I7Zz1uZXcgVXJkKGEsQik7cmViKCghZC5lJiYoZC5lPW5ldyB5NWQoQTIsZCwxMCw5KSksZC5lKSxnKTtjQyhDLFN0ZSxCKX1rPSghZC5nJiYoZC5nPW5ldyB5NWQoQTIsZCw5LDEwKSksZC5nKS5pPT0wO3E9IWs7aWYocSl7Rj1uZXcgd0I7aD1uZXcgV3JkKGEsRik7cmViKCghZC5nJiYoZC5nPW5ldyB5NWQoQTIsZCw5LDEwKSksZC5nKSxoKTtjQyhDLFJ0ZSxGKX19XG5mdW5jdGlvbiBlS2IoYSl7JEpiKCk7dmFyIGIsYyxkLGUsZixnLGg7ZD1hLmYubjtmb3IoZz1jaShhLnIpLmEubmMoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxMTEpO2U9MDtpZihmLmIuWGUoKFk5YygpLHM5YykpKXtlPUVkYihFRChmLmIuV2UoczljKSkpO2lmKGU8MCl7c3dpdGNoKGYuYi5IZigpLmcpe2Nhc2UgMTpkLmQ9JHduZC5NYXRoLm1heChkLmQsLWUpO2JyZWFrO2Nhc2UgMzpkLmE9JHduZC5NYXRoLm1heChkLmEsLWUpO2JyZWFrO2Nhc2UgMjpkLmM9JHduZC5NYXRoLm1heChkLmMsLWUpO2JyZWFrO2Nhc2UgNDpkLmI9JHduZC5NYXRoLm1heChkLmIsLWUpO319fWlmKHRjZChhLnUpKXtiPW5mZChmLmIsZSk7aD0hQkQoYS5lLldlKGI5YyksMTc0KS5IYygoSWRkKCksemRkKSk7Yz1mYWxzZTtzd2l0Y2goZi5iLkhmKCkuZyl7Y2FzZSAxOmM9Yj5kLmQ7ZC5kPSR3bmQuTWF0aC5tYXgoZC5kLGIpO2lmKGgmJmMpe2QuZD0kd25kLk1hdGgubWF4KGQuZCxkLmEpO2QuYT1kLmQrZX1icmVhaztjYXNlIDM6Yz1iPmQuYTtkLmE9JHduZC5NYXRoLm1heChkLmEsYik7aWYoaCYmYyl7ZC5hPSR3bmQuTWF0aC5tYXgoZC5hLGQuZCk7ZC5kPWQuYStlfWJyZWFrO2Nhc2UgMjpjPWI+ZC5jO2QuYz0kd25kLk1hdGgubWF4KGQuYyxiKTtpZihoJiZjKXtkLmM9JHduZC5NYXRoLm1heChkLmIsZC5jKTtkLmI9ZC5jK2V9YnJlYWs7Y2FzZSA0OmM9Yj5kLmI7ZC5iPSR3bmQuTWF0aC5tYXgoZC5iLGIpO2lmKGgmJmMpe2QuYj0kd25kLk1hdGgubWF4KGQuYixkLmMpO2QuYz1kLmIrZX19fX19XG5mdW5jdGlvbiBsM2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtmb3Ioaj1uZXcgb2xiKGEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMCk7Zz1CRCh2TmIoaSwoTnljKCksbXhjKSksMTYzKTtmPW51bGw7c3dpdGNoKGcuZyl7Y2FzZSAxOmNhc2UgMjpmPShHcWMoKSxGcWMpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Zj0oR3FjKCksRHFjKTt9aWYoZil7eU5iKGksKHd0YygpLEJzYyksKEdxYygpLEZxYykpO2Y9PURxYz9vM2IoaSxnLChLQWMoKSxIQWMpKTpmPT1GcWMmJm8zYihpLGcsKEtBYygpLElBYykpfWVsc2V7aWYoZmNkKEJEKHZOYihpLFZ4YyksOTgpKSYmaS5qLmMubGVuZ3RoIT0wKXtiPXRydWU7Zm9yKGw9bmV3IG9sYihpLmopO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxMSk7aWYoIShrLmo9PShVY2QoKSx6Y2QpJiZrLmUuYy5sZW5ndGgtay5nLmMubGVuZ3RoPjB8fGsuaj09VGNkJiZrLmUuYy5sZW5ndGgtay5nLmMubGVuZ3RoPDApKXtiPWZhbHNlO2JyZWFrfWZvcihlPW5ldyBvbGIoay5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZSksMTcpO2g9QkQodk5iKGMuZC5pLG14YyksMTYzKTtpZihoPT0oQ3RjKCksenRjKXx8aD09QXRjKXtiPWZhbHNlO2JyZWFrfX1mb3IoZD1uZXcgb2xiKGsuZSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE3KTtoPUJEKHZOYihjLmMuaSxteGMpLDE2Myk7aWYoaD09KEN0YygpLHh0Yyl8fGg9PXl0Yyl7Yj1mYWxzZTticmVha319fWImJm8zYihpLGcsKEtBYygpLEpBYykpfX19fVxuZnVuY3Rpb24gbEpjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O3c9MDtuPTA7Zm9yKGw9bmV3IG9sYihiLmUpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSwxMCk7bT0wO2g9MDtpPWM/QkQodk5iKGssaEpjKSwxOSkuYTpSaWU7cj1kP0JEKHZOYihrLGlKYyksMTkpLmE6UmllO2o9JHduZC5NYXRoLm1heChpLHIpO2Zvcih0PW5ldyBvbGIoay5qKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1CRChtbGIodCksMTEpO3U9ay5uLmIrcy5uLmIrcy5hLmI7aWYoZCl7Zm9yKGc9bmV3IG9sYihzLmcpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxNyk7cD1mLmQ7bz1wLmk7aWYoYiE9YS5hW28ucF0pe3E9JHduZC5NYXRoLm1heChCRCh2TmIobyxoSmMpLDE5KS5hLEJEKHZOYihvLGlKYyksMTkpLmEpO3Y9QkQodk5iKGYsKE55YygpLGV5YykpLDE5KS5hO2lmKHY+PWomJnY+PXEpe20rPW8ubi5iK3Aubi5iK3AuYS5iLXU7KytofX19fWlmKGMpe2ZvcihnPW5ldyBvbGIocy5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTcpO3A9Zi5jO289cC5pO2lmKGIhPWEuYVtvLnBdKXtxPSR3bmQuTWF0aC5tYXgoQkQodk5iKG8saEpjKSwxOSkuYSxCRCh2TmIobyxpSmMpLDE5KS5hKTt2PUJEKHZOYihmLChOeWMoKSxleWMpKSwxOSkuYTtpZih2Pj1qJiZ2Pj1xKXttKz1vLm4uYitwLm4uYitwLmEuYi11OysraH19fX19aWYoaD4wKXt3Kz1tL2g7KytufX1pZihuPjApe2IuYT1lKncvbjtiLmc9bn1lbHNle2IuYT0wO2IuZz0wfX1cbmZ1bmN0aW9uIG9NYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGU9bmV3IG9sYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2M9QkQobWxiKGUpLDI5KTtmb3IoaT1uZXcgb2xiKGMuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDEwKTtiLmpbaC5wXT1oO2IuaVtoLnBdPWIubz09KGVNYygpLGRNYyk/UWplOlBqZX19VWhiKGEuYyk7Zz1hLmEuYjtiLmM9PShZTGMoKSxXTGMpJiYoZz1KRChnLDE1Mik/a20oQkQoZywxNTIpKTpKRChnLDEzMSk/QkQoZywxMzEpLmE6SkQoZyw1NCk/bmV3IG92KGcpOm5ldyBkdihnKSk7VU1jKGEuZSxiLGEuYik7QWxiKGIucCxudWxsKTtmb3IoZj1nLktjKCk7Zi5PYigpOyl7Yz1CRChmLlBiKCksMjkpO2o9Yy5hO2Iubz09KGVNYygpLGRNYykmJihqPUpEKGosMTUyKT9rbShCRChqLDE1MikpOkpEKGosMTMxKT9CRChqLDEzMSkuYTpKRChqLDU0KT9uZXcgb3Yoaik6bmV3IGR2KGopKTtmb3IobT1qLktjKCk7bS5PYigpOyl7bD1CRChtLlBiKCksMTApO2IuZ1tsLnBdPT1sJiZwTWMoYSxsLGIpfX1xTWMoYSxiKTtmb3IoZD1nLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjkpO2ZvcihtPW5ldyBvbGIoYy5hKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1CRChtbGIobSksMTApO2IucFtsLnBdPWIucFtiLmdbbC5wXS5wXTtpZihsPT1iLmdbbC5wXSl7az1FZGIoYi5pW2IualtsLnBdLnBdKTsoYi5vPT0oZU1jKCksZE1jKSYmaz5RamV8fGIubz09Y01jJiZrPFBqZSkmJihiLnBbbC5wXT1FZGIoYi5wW2wucF0pK2spfX19YS5lLmNnKCl9XG5mdW5jdGlvbiBQR2IoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtoPW5ldyBMSWIoYik7cktiKGgsZCk7ZT10cnVlO2lmKCEhYSYmYS5YZSgoWTljKCksejhjKSkpe2Y9QkQoYS5XZSgoWTljKCksejhjKSksMTAzKTtlPWY9PShlYWQoKSxjYWQpfHxmPT1hYWR8fGY9PWJhZH1oS2IoaCxmYWxzZSk7SGtiKGguZS53ZigpLG5ldyBtS2IoaCxmYWxzZSxlKSk7TkpiKGgsaC5mLChnSGIoKSxkSGIpLChVY2QoKSxBY2QpKTtOSmIoaCxoLmYsZkhiLFJjZCk7TkpiKGgsaC5nLGRIYixUY2QpO05KYihoLGguZyxmSGIsemNkKTtQSmIoaCxBY2QpO1BKYihoLFJjZCk7T0piKGgsemNkKTtPSmIoaCxUY2QpOyRKYigpO2c9aC5BLkhjKCh0ZGQoKSxwZGQpKSYmaC5CLkhjKChJZGQoKSxEZGQpKT9fSmIoaCk6bnVsbDshIWcmJkRIYihoLmEsZyk7ZUtiKGgpO0dKYihoKTtQS2IoaCk7QkpiKGgpO3BLYihoKTtIS2IoaCk7eEtiKGgsQWNkKTt4S2IoaCxSY2QpO0NKYihoKTtvS2IoaCk7aWYoIWMpe3JldHVybiBoLm99Y0tiKGgpO0xLYihoKTt4S2IoaCx6Y2QpO3hLYihoLFRjZCk7aT1oLkIuSGMoKElkZCgpLEVkZCkpO1JKYihoLGksQWNkKTtSSmIoaCxpLFJjZCk7U0piKGgsaSx6Y2QpO1NKYihoLGksVGNkKTtNQWIobmV3IFlBYihudWxsLG5ldyBLdWIobmV3ICRpYihoLmkpLDApKSxuZXcgVEpiKTtNQWIoSkFiKG5ldyBZQWIobnVsbCxjaShoLnIpLmEub2MoKSksbmV3IFZKYiksbmV3IFhKYik7ZEtiKGgpO2guZS51ZihoLm8pO01BYihuZXcgWUFiKG51bGwsY2koaC5yKS5hLm9jKCkpLG5ldyBmS2IpO3JldHVybiBoLm99XG5mdW5jdGlvbiBKVmIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2o9UGplO2ZvcihkPW5ldyBvbGIoYS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihkKSw4MSk7aj0kd25kLk1hdGgubWluKGosYi5kLmYuZy5jK2IuZS5hKX1uPW5ldyBQc2I7Zm9yKGc9bmV3IG9sYihhLmEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDE4OSk7Zi5pPWo7Zi5lPT0wJiYoR3NiKG4sZixuLmMuYixuLmMpLHRydWUpfXdoaWxlKG4uYiE9MCl7Zj1CRChuLmI9PTA/bnVsbDooc0NiKG4uYiE9MCksTnNiKG4sbi5hLmEpKSwxODkpO2U9Zi5mLmcuYztmb3IobT1mLmEuYS5lYygpLktjKCk7bS5PYigpOyl7az1CRChtLlBiKCksODEpO3A9Zi5pK2suZS5hO2suZC5nfHxrLmcuYzxwPyhrLm89cCk6KGsubz1rLmcuYyl9ZS09Zi5mLm87Zi5iKz1lO2EuYz09KGVhZCgpLGJhZCl8fGEuYz09XzljPyhmLmMrPWUpOihmLmMtPWUpO2ZvcihsPWYuYS5hLmVjKCkuS2MoKTtsLk9iKCk7KXtrPUJEKGwuUGIoKSw4MSk7Zm9yKGk9ay5mLktjKCk7aS5PYigpOyl7aD1CRChpLlBiKCksODEpO2ZhZChhLmMpPyhvPWEuZi5lZihrLGgpKToobz1hLmYuZmYoayxoKSk7aC5kLmk9JHduZC5NYXRoLm1heChoLmQuaSxrLm8ray5nLmIrby1oLmUuYSk7aC5rfHwoaC5kLmk9JHduZC5NYXRoLm1heChoLmQuaSxoLmcuYy1oLmUuYSkpOy0taC5kLmU7aC5kLmU9PTAmJkRzYihuLGguZCl9fX1mb3IoYz1uZXcgb2xiKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksODEpO2IuZy5jPWIub319XG5mdW5jdGlvbiBFTGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtoPWEuYjtiPWEuYTtzd2l0Y2goQkQodk5iKGEsKGZGYigpLGJGYikpLDQyNykuZyl7Y2FzZSAwOk9rYihoLG5ldyB0cGIobmV3IGJNYikpO2JyZWFrO2Nhc2UgMTpkZWZhdWx0Ok9rYihoLG5ldyB0cGIobmV3IGdNYikpO31zd2l0Y2goQkQodk5iKGEsX0ViKSw0MjgpLmcpe2Nhc2UgMTpPa2IoaCxuZXcgWUxiKTtPa2IoaCxuZXcgbE1iKTtPa2IoaCxuZXcgR0xiKTticmVhaztjYXNlIDA6ZGVmYXVsdDpPa2IoaCxuZXcgWUxiKTtPa2IoaCxuZXcgUkxiKTt9c3dpdGNoKEJEKHZOYihhLGRGYiksMjUwKS5nKXtjYXNlIDA6aT1uZXcgRk1iO2JyZWFrO2Nhc2UgMTppPW5ldyB6TWI7YnJlYWs7Y2FzZSAyOmk9bmV3IENNYjticmVhaztjYXNlIDM6aT1uZXcgd01iO2JyZWFrO2Nhc2UgNTppPW5ldyBKTWIobmV3IENNYik7YnJlYWs7Y2FzZSA0Omk9bmV3IEpNYihuZXcgek1iKTticmVhaztjYXNlIDc6aT1uZXcgdE1iKG5ldyBKTWIobmV3IHpNYiksbmV3IEpNYihuZXcgQ01iKSk7YnJlYWs7Y2FzZSA4Omk9bmV3IHRNYihuZXcgSk1iKG5ldyB3TWIpLG5ldyBKTWIobmV3IENNYikpO2JyZWFrO2Nhc2UgNjpkZWZhdWx0Omk9bmV3IEpNYihuZXcgd01iKTt9Zm9yKGc9bmV3IG9sYihoKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTY3KTtkPTA7ZT0wO2M9bmV3IHZnZChtZWIoZCksbWViKGUpKTt3aGlsZShnTmIoYixmLGQsZSkpe2M9QkQoaS5DZShjLGYpLDQ2KTtkPUJEKGMuYSwxOSkuYTtlPUJEKGMuYiwxOSkuYX1kTmIoYixmLGQsZSl9fVxuZnVuY3Rpb24gcVFiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEE7Zj1hLmYuYjttPWYuYTtrPWYuYjtvPWEuZS5nO249YS5lLmY7X2tkKGEuZSxmLmEsZi5iKTt3PW0vbztBPWsvbjtmb3Ioaj1uZXcgRnlkKEtrZChhLmUpKTtqLmUhPWouaS5nYygpOyl7aT1CRChEeWQoaiksMTM3KTtkbGQoaSxpLmkqdyk7ZWxkKGksaS5qKkEpfWZvcihzPW5ldyBGeWQoWW9kKGEuZSkpO3MuZSE9cy5pLmdjKCk7KXtyPUJEKER5ZChzKSwxMTgpO3U9ci5pO3Y9ci5qO3U+MCYmZGxkKHIsdSp3KTt2PjAmJmVsZChyLHYqQSl9c3RiKGEuYixuZXcgQ1FiKTtiPW5ldyBSa2I7Zm9yKGg9bmV3IG5pYigobmV3IGVpYihhLmMpKS5hKTtoLmI7KXtnPWxpYihoKTtkPUJEKGcuY2QoKSw3OSk7Yz1CRChnLmRkKCksMzk1KS5hO2U9aXRkKGQsZmFsc2UsZmFsc2UpO2w9b1FiKGp0ZChkKSxvZmQoZSksYyk7aWZkKGwsZSk7dD1rdGQoZCk7aWYoISF0JiZKa2IoYix0LDApPT0tMSl7Yi5jW2IuYy5sZW5ndGhdPXQ7cFFiKHQsKHNDYihsLmIhPTApLEJEKGwuYS5hLmMsOCkpLGMpfX1mb3IocT1uZXcgbmliKChuZXcgZWliKGEuZCkpLmEpO3EuYjspe3A9bGliKHEpO2Q9QkQocC5jZCgpLDc5KTtjPUJEKHAuZGQoKSwzOTUpLmE7ZT1pdGQoZCxmYWxzZSxmYWxzZSk7bD1vUWIobHRkKGQpLHc3YyhvZmQoZSkpLGMpO2w9dzdjKGwpO2lmZChsLGUpO3Q9bXRkKGQpO2lmKCEhdCYmSmtiKGIsdCwwKT09LTEpe2IuY1tiLmMubGVuZ3RoXT10O3BRYih0LChzQ2IobC5iIT0wKSxCRChsLmMuYi5jLDgpKSxjKX19fVxuZnVuY3Rpb24gX1ZjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjtpZihjLmMubGVuZ3RoIT0wKXtvPW5ldyBSa2I7Zm9yKG49bmV3IG9sYihjKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMzMpO0VrYihvLG5ldyBmN2MobS5pLG0uaikpfWQubiYmISFiJiZUZGQoZCxpNmQoYiksKHBnZCgpLG1nZCkpO3doaWxlKENWYyhhLGMpKXtBVmMoYSxjLGZhbHNlKX1kLm4mJiEhYiYmVGRkKGQsaTZkKGIpLChwZ2QoKSxtZ2QpKTtoPTA7aT0wO2U9bnVsbDtpZihjLmMubGVuZ3RoIT0wKXtlPSh0Q2IoMCxjLmMubGVuZ3RoKSxCRChjLmNbMF0sMzMpKTtoPWUuaS0odENiKDAsby5jLmxlbmd0aCksQkQoby5jWzBdLDgpKS5hO2k9ZS5qLSh0Q2IoMCxvLmMubGVuZ3RoKSxCRChvLmNbMF0sOCkpLmJ9Zz0kd25kLk1hdGguc3FydChoKmgraSppKTtsPWNWYyhjKTtmPTE7d2hpbGUobC5hLmdjKCkhPTApe2ZvcihrPWwuYS5lYygpLktjKCk7ay5PYigpOyl7aj1CRChrLlBiKCksMzMpO3A9YS5mO3E9cC5pK3AuZy8yO3I9cC5qK3AuZi8yO3M9ai5pK2ouZy8yO3Q9ai5qK2ouZi8yO3U9cy1xO3Y9dC1yO3c9JHduZC5NYXRoLnNxcnQodSp1K3Yqdik7QT11L3c7Qj12L3c7ZGxkKGosai5pK0EqZyk7ZWxkKGosai5qK0IqZyl9ZC5uJiYhIWImJlRkZChkLGk2ZChiKSwocGdkKCksbWdkKSk7bD1jVmMobmV3IFRrYihsKSk7KytmfSEhYS5hJiZhLmEubGcobmV3IFRrYihsKSk7ZC5uJiYhIWImJlRkZChkLGk2ZChiKSwocGdkKCksbWdkKSk7X1ZjKGEsYixuZXcgVGtiKGwpLGQpfX1cbmZ1bmN0aW9uICQyYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO3A9YS5uO3E9YS5vO209YS5kO2w9RWRiKEVEKHBCYyhhLChOeWMoKSxpeWMpKSkpO2lmKGIpe2s9bCooYi5nYygpLTEpO249MDtmb3IoaT1iLktjKCk7aS5PYigpOyl7Zz1CRChpLlBiKCksMTApO2srPWcuby5hO249JHduZC5NYXRoLm1heChuLGcuby5iKX1yPXAuYS0oay1xLmEpLzI7Zj1wLmItbS5kK247ZD1xLmEvKGIuZ2MoKSsxKTtlPWQ7Zm9yKGg9Yi5LYygpO2guT2IoKTspe2c9QkQoaC5QYigpLDEwKTtnLm4uYT1yO2cubi5iPWYtZy5vLmI7cis9Zy5vLmErbDtqPVkyYihnKTtqLm4uYT1nLm8uYS8yLWouYS5hO2oubi5iPWcuby5iO289QkQodk5iKGcsKHd0YygpLHZzYykpLDExKTtpZihvLmUuYy5sZW5ndGgrby5nLmMubGVuZ3RoPT0xKXtvLm4uYT1lLW8uYS5hO28ubi5iPTA7RjBiKG8sYSl9ZSs9ZH19aWYoYyl7az1sKihjLmdjKCktMSk7bj0wO2ZvcihpPWMuS2MoKTtpLk9iKCk7KXtnPUJEKGkuUGIoKSwxMCk7ays9Zy5vLmE7bj0kd25kLk1hdGgubWF4KG4sZy5vLmIpfXI9cC5hLShrLXEuYSkvMjtmPXAuYitxLmIrbS5hLW47ZD1xLmEvKGMuZ2MoKSsxKTtlPWQ7Zm9yKGg9Yy5LYygpO2guT2IoKTspe2c9QkQoaC5QYigpLDEwKTtnLm4uYT1yO2cubi5iPWY7cis9Zy5vLmErbDtqPVkyYihnKTtqLm4uYT1nLm8uYS8yLWouYS5hO2oubi5iPTA7bz1CRCh2TmIoZywod3RjKCksdnNjKSksMTEpO2lmKG8uZS5jLmxlbmd0aCtvLmcuYy5sZW5ndGg9PTEpe28ubi5hPWUtby5hLmE7by5uLmI9cS5iO0YwYihvLGEpfWUrPWR9fX1cbmZ1bmN0aW9uIHE3YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtpZighQkQodk5iKGIsKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSkpe3JldHVybn1mb3IoaD1uZXcgb2xiKGIuYSk7aC5hPGguYy5jLmxlbmd0aDspe2Y9QkQobWxiKGgpLDEwKTtpZihmLms9PShqMGIoKSxoMGIpKXtlPUJEKHZOYihmLChOeWMoKSx0eGMpKSwxNDIpO2EuYz0kd25kLk1hdGgubWluKGEuYyxmLm4uYS1lLmIpO2EuYT0kd25kLk1hdGgubWF4KGEuYSxmLm4uYStmLm8uYStlLmMpO2EuZD0kd25kLk1hdGgubWluKGEuZCxmLm4uYi1lLmQpO2EuYj0kd25kLk1hdGgubWF4KGEuYixmLm4uYitmLm8uYitlLmEpfX1mb3IoZz1uZXcgb2xiKGIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDEwKTtpZihmLmshPShqMGIoKSxoMGIpKXtzd2l0Y2goZi5rLmcpe2Nhc2UgMjpkPUJEKHZOYihmLChOeWMoKSxteGMpKSwxNjMpO2lmKGQ9PShDdGMoKSx5dGMpKXtmLm4uYT1hLmMtMTA7cDdiKGYsbmV3IHg3YikuSmIobmV3IEE3YihmKSk7YnJlYWt9aWYoZD09QXRjKXtmLm4uYT1hLmErMTA7cDdiKGYsbmV3IEQ3YikuSmIobmV3IEc3YihmKSk7YnJlYWt9Yz1CRCh2TmIoZixPc2MpLDMwMyk7aWYoYz09KGVzYygpLGRzYykpe283YihmKS5KYihuZXcgSjdiKGYpKTtmLm4uYj1hLmQtMTA7YnJlYWt9aWYoYz09YnNjKXtvN2IoZikuSmIobmV3IE03YihmKSk7Zi5uLmI9YS5iKzEwO2JyZWFrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoJ1RoZSBub2RlIHR5cGUgJytmLmsrJyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAnK3pTKSk7fX19fVxuZnVuY3Rpb24gWTFiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2k9bmV3IGY3YyhkLmkrZC5nLzIsZC5qK2QuZi8yKTtuPU0xYihkKTtvPUJEKGhrZChiLChOeWMoKSxWeGMpKSw5OCk7cT1CRChoa2QoZCwkeGMpLDYxKTtpZighaENkKGdrZChkKSxVeGMpKXtkLmk9PTAmJmQuaj09MD8ocD0wKToocD1rZmQoZCxxKSk7amtkKGQsVXhjLHApfWo9bmV3IGY3YyhiLmcsYi5mKTtlPVokYihkLG8scSxuLGosaSxuZXcgZjdjKGQuZyxkLmYpLEJEKHZOYihjLEx3YyksMTAzKSxjKTt5TmIoZSwod3RjKCksJHNjKSxkKTtmPUJEKElrYihlLmosMCksMTEpO0UwYihmLFcxYihkKSk7eU5iKGUsWXhjLChyY2QoKSxwcWIocGNkKSkpO2w9QkQoaGtkKGIsWXhjKSwxNzQpLkhjKG5jZCk7Zm9yKGg9bmV3IEZ5ZCgoIWQubiYmKGQubj1uZXcgY1VkKEQyLGQsMSw3KSksZC5uKSk7aC5lIT1oLmkuZ2MoKTspe2c9QkQoRHlkKGgpLDEzNyk7aWYoIUNjYihERChoa2QoZyxKeGMpKSkmJiEhZy5hKXttPVoxYihnKTtFa2IoZi5mLG0pO2lmKCFsKXtrPTA7dGNkKEJEKGhrZChiLFl4YyksMjEpKSYmKGs9bWZkKG5ldyBmN2MoZy5pLGcuaiksbmV3IGY3YyhnLmcsZy5mKSxuZXcgZjdjKGQuZyxkLmYpLDAscSkpO3N3aXRjaChxLmcpe2Nhc2UgMjpjYXNlIDQ6bS5vLmE9azticmVhaztjYXNlIDE6Y2FzZSAzOm0uby5iPWs7fX19fXlOYihlLHR5YyxFRChoa2QoWG9kKGIpLHR5YykpKTt5TmIoZSx1eWMsRUQoaGtkKFhvZChiKSx1eWMpKSk7eU5iKGUscnljLEVEKGhrZChYb2QoYikscnljKSkpO0VrYihjLmEsZSk7UmhiKGEuYSxkLGUpfVxuZnVuY3Rpb24gcVVjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdjtPZGQoYywnUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwnLDEpO2s9MDttbWIoKTtrdGIoYixuZXcgV3NkKChtVGMoKSxaU2MpKSk7Zj1iLmI7aD1Kc2IoYixiLmIpO2o9dHJ1ZTt3aGlsZShqJiZoLmIuYiE9aC5kLmEpe3I9QkQoWXNiKGgpLDg2KTtCRCh2TmIocixaU2MpLDE5KS5hPT0wPy0tZjooaj1mYWxzZSl9dj1uZXcgSmliKGIsMCxmKTtnPW5ldyBRc2Iodik7dj1uZXcgSmliKGIsZixiLmIpO2k9bmV3IFFzYih2KTtpZihnLmI9PTApe2ZvcihvPUpzYihpLDApO28uYiE9by5kLmM7KXtuPUJEKFhzYihvKSw4Nik7eU5iKG4sZVRjLG1lYihrKyspKX19ZWxzZXtsPWcuYjtmb3IodT1Kc2IoZywwKTt1LmIhPXUuZC5jOyl7dD1CRChYc2IodSksODYpO3lOYih0LGVUYyxtZWIoaysrKSk7ZD1VUmModCk7cVVjKGEsZCxVZGQoYywxL2x8MCkpO2t0YihkLHRtYihuZXcgV3NkKGVUYykpKTttPW5ldyBQc2I7Zm9yKHM9SnNiKGQsMCk7cy5iIT1zLmQuYzspe3I9QkQoWHNiKHMpLDg2KTtmb3IocT1Kc2IodC5kLDApO3EuYiE9cS5kLmM7KXtwPUJEKFhzYihxKSwxODgpO3AuYz09ciYmKEdzYihtLHAsbS5jLmIsbS5jKSx0cnVlKX19T3NiKHQuZCk7eWUodC5kLG0pO2g9SnNiKGksaS5iKTtlPXQuZC5iO2o9dHJ1ZTt3aGlsZSgwPGUmJmomJmguYi5iIT1oLmQuYSl7cj1CRChZc2IoaCksODYpO2lmKEJEKHZOYihyLFpTYyksMTkpLmE9PTApe3lOYihyLGVUYyxtZWIoaysrKSk7LS1lO1pzYihoKX1lbHNle2o9ZmFsc2V9fX19UWRkKGMpfVxuZnVuY3Rpb24gXzhiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O09kZChiLCdJbnZlcnRlZCBwb3J0IHByZXByb2Nlc3NpbmcnLDEpO2s9YS5iO2o9bmV3IEJpYihrLDApO2M9bnVsbDt0PW5ldyBSa2I7d2hpbGUoai5iPGouZC5nYygpKXtzPWM7Yz0oc0NiKGouYjxqLmQuZ2MoKSksQkQoai5kLlhiKGouYz1qLmIrKyksMjkpKTtmb3Iobj1uZXcgb2xiKHQpO24uYTxuLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihuKSwxMCk7JF9iKGwscyl9dC5jPUtDKFNJLFVoZSwxLDAsNSwxKTtmb3Iobz1uZXcgb2xiKGMuYSk7by5hPG8uYy5jLmxlbmd0aDspe2w9QkQobWxiKG8pLDEwKTtpZihsLmshPShqMGIoKSxoMGIpKXtjb250aW51ZX1pZighZmNkKEJEKHZOYihsLChOeWMoKSxWeGMpKSw5OCkpKXtjb250aW51ZX1mb3Iocj1YX2IobCwoS0FjKCksSEFjKSwoVWNkKCksemNkKSkuS2MoKTtyLk9iKCk7KXtwPUJEKHIuUGIoKSwxMSk7aT1wLmU7aD1CRChRa2IoaSxLQyhBUSxqbmUsMTcsaS5jLmxlbmd0aCwwLDEpKSw0NzQpO2ZvcihlPWgsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO1o4YihhLHAsZCx0KX19Zm9yKHE9WF9iKGwsSUFjLFRjZCkuS2MoKTtxLk9iKCk7KXtwPUJEKHEuUGIoKSwxMSk7aT1wLmc7aD1CRChRa2IoaSxLQyhBUSxqbmUsMTcsaS5jLmxlbmd0aCwwLDEpKSw0NzQpO2ZvcihlPWgsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdOyQ4YihhLHAsZCx0KX19fX1mb3IobT1uZXcgb2xiKHQpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUJEKG1sYihtKSwxMCk7JF9iKGwsYyl9UWRkKGIpfVxuZnVuY3Rpb24gXzFiKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGw7aj1uZXcgSDBiO3ROYihqLGIpO0cwYihqLEJEKGhrZChiLChOeWMoKSwkeGMpKSw2MSkpO3lOYihqLCh3dGMoKSwkc2MpLGIpO0YwYihqLGMpO2w9ai5vO2wuYT1iLmc7bC5iPWIuZjtrPWoubjtrLmE9Yi5pO2suYj1iLmo7UmhiKGEuYSxiLGopO2c9RkFiKE5BYihMQWIobmV3IFlBYihudWxsLCghYi5lJiYoYi5lPW5ldyB5NWQoQjIsYiw3LDQpKSxuZXcgS3ViKGIuZSwxNikpKSxuZXcgbTJiKSxuZXcgZTJiKSxuZXcgbzJiKGIpKTtnfHwoZz1GQWIoTkFiKExBYihuZXcgWUFiKG51bGwsKCFiLmQmJihiLmQ9bmV3IHk1ZChCMixiLDgsNSkpLG5ldyBLdWIoYi5kLDE2KSkpLG5ldyBxMmIpLG5ldyBnMmIpLG5ldyBzMmIoYikpKTtnfHwoZz1GQWIobmV3IFlBYihudWxsLCghYi5lJiYoYi5lPW5ldyB5NWQoQjIsYiw3LDQpKSxuZXcgS3ViKGIuZSwxNikpKSxuZXcgdTJiKSk7eU5iKGosTnNjLChCY2IoKSxnP3RydWU6ZmFsc2UpKTtlX2IoaixmLGUsQkQoaGtkKGIsVHhjKSw4KSk7Zm9yKGk9bmV3IEZ5ZCgoIWIubiYmKGIubj1uZXcgY1VkKEQyLGIsMSw3KSksYi5uKSk7aS5lIT1pLmkuZ2MoKTspe2g9QkQoRHlkKGkpLDEzNyk7IUNjYihERChoa2QoaCxKeGMpKSkmJiEhaC5hJiZFa2Ioai5mLFoxYihoKSl9c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgMTooai5qPT0oVWNkKCksQWNkKXx8ai5qPT1SY2QpJiZkLkZjKChPcmMoKSxMcmMpKTticmVhaztjYXNlIDQ6Y2FzZSAzOihqLmo9PShVY2QoKSx6Y2QpfHxqLmo9PVRjZCkmJmQuRmMoKE9yYygpLExyYykpO31yZXR1cm4gan1cbmZ1bmN0aW9uIG5RYyhhLGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDttPW51bGw7ZD09KEZRYygpLERRYyk/KG09Yik6ZD09RVFjJiYobT1jKTtmb3IocD1tLmEuZWMoKS5LYygpO3AuT2IoKTspe289QkQocC5QYigpLDExKTtxPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtvLmkubixvLm4sby5hXSkpLmI7dD1uZXcgVHFiO2g9bmV3IFRxYjtmb3Ioaj1uZXcgYjFiKG8uYik7bGxiKGouYSl8fGxsYihqLmIpOyl7aT1CRChsbGIoai5hKT9tbGIoai5hKTptbGIoai5iKSwxNyk7aWYoQ2NiKEREKHZOYihpLCh3dGMoKSxsdGMpKSkpIT1lKXtjb250aW51ZX1pZihKa2IoZixpLDApIT0tMSl7aS5kPT1vPyhyPWkuYyk6KHI9aS5kKTtzPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtyLmkubixyLm4sci5hXSkpLmI7aWYoJHduZC5NYXRoLmFicyhzLXEpPDAuMil7Y29udGludWV9czxxP2IuYS5fYihyKT9RcWIodCxuZXcgdmdkKERRYyxpKSk6UXFiKHQsbmV3IHZnZChFUWMsaSkpOmIuYS5fYihyKT9RcWIoaCxuZXcgdmdkKERRYyxpKSk6UXFiKGgsbmV3IHZnZChFUWMsaSkpfX1pZih0LmEuZ2MoKT4xKXtuPW5ldyBaUWMobyx0LGQpO3JlYih0LG5ldyBQUWMoYSxuKSk7Zy5jW2cuYy5sZW5ndGhdPW47Zm9yKGw9dC5hLmVjKCkuS2MoKTtsLk9iKCk7KXtrPUJEKGwuUGIoKSw0Nik7TGtiKGYsay5iKX19aWYoaC5hLmdjKCk+MSl7bj1uZXcgWlFjKG8saCxkKTtyZWIoaCxuZXcgUlFjKGEsbikpO2cuY1tnLmMubGVuZ3RoXT1uO2ZvcihsPWguYS5lYygpLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksNDYpO0xrYihmLGsuYil9fX19XG5mdW5jdGlvbiAkV2MoYSl7cjRjKGEsbmV3IEUzYyhMM2MoUDNjKE0zYyhPM2MoTjNjKG5ldyBSM2Msc3JlKSwnRUxLIFJhZGlhbCcpLCdBIHJhZGlhbCBsYXlvdXQgcHJvdmlkZXIgd2hpY2ggaXMgYmFzZWQgb24gdGhlIGFsZ29yaXRobSBvZiBQZXRlciBFYWRlcyBwdWJsaXNoZWQgaW4gXCJEcmF3aW5nIGZyZWUgdHJlZXMuXCIsIHB1Ymxpc2hlZCBieSBJbnRlcm5hdGlvbmFsIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU3R1ZHkgb2YgU29jaWFsIEluZm9ybWF0aW9uIFNjaWVuY2UsIEZ1aml0c3UgTGltaXRlZCBpbiAxOTkxLiBUaGUgcmFkaWFsIGxheW91dGVyIHRha2VzIGEgdHJlZSBhbmQgcGxhY2VzIHRoZSBub2RlcyBpbiByYWRpYWwgb3JkZXIgYXJvdW5kIHRoZSByb290LiBUaGUgbm9kZXMgb2YgdGhlIHNhbWUgdHJlZSBsZXZlbCBhcmUgcGxhY2VkIG9uIHRoZSBzYW1lIHJhZGl1cy4nKSxuZXcgYlhjKSxzcmUpKSk7cDRjKGEsc3JlLHVxZSxLc2QoVVdjKSk7cDRjKGEsc3JlLHdtZSxLc2QoWFdjKSk7cDRjKGEsc3JlLEZtZSxLc2QoTldjKSk7cDRjKGEsc3JlLFRtZSxLc2QoT1djKSk7cDRjKGEsc3JlLEVtZSxLc2QoUFdjKSk7cDRjKGEsc3JlLEdtZSxLc2QoTVdjKSk7cDRjKGEsc3JlLERtZSxLc2QoUVdjKSk7cDRjKGEsc3JlLEhtZSxLc2QoVFdjKSk7cDRjKGEsc3JlLG9yZSxLc2QoS1djKSk7cDRjKGEsc3JlLG5yZSxLc2QoTFdjKSk7cDRjKGEsc3JlLHJyZSxLc2QoUldjKSk7cDRjKGEsc3JlLGxyZSxLc2QoU1djKSk7cDRjKGEsc3JlLG1yZSxLc2QoVldjKSk7cDRjKGEsc3JlLHByZSxLc2QoV1djKSk7cDRjKGEsc3JlLHFyZSxLc2QoWVdjKSl9XG5mdW5jdGlvbiBMSWIoYSl7dmFyIGI7dGhpcy5yPUN5KG5ldyBPSWIsbmV3IFNJYik7dGhpcy5iPW5ldyBScGIoQkQoUWIoRjEpLDI5MCkpO3RoaXMucD1uZXcgUnBiKEJEKFFiKEYxKSwyOTApKTt0aGlzLmk9bmV3IFJwYihCRChRYihETiksMjkwKSk7dGhpcy5lPWE7dGhpcy5vPW5ldyBnN2MoYS5yZigpKTt0aGlzLkQ9YS5EZigpfHxDY2IoREQoYS5XZSgoWTljKCksTThjKSkpKTt0aGlzLkE9QkQoYS5XZSgoWTljKCksWThjKSksMjEpO3RoaXMuQj1CRChhLldlKGI5YyksMjEpO3RoaXMucT1CRChhLldlKHQ5YyksOTgpO3RoaXMudT1CRChhLldlKHg5YyksMjEpO2lmKCF1Y2QodGhpcy51KSl7dGhyb3cgdmJiKG5ldyB5MmMoJ0ludmFsaWQgcG9ydCBsYWJlbCBwbGFjZW1lbnQ6ICcrdGhpcy51KSl9dGhpcy52PUNjYihERChhLldlKHo5YykpKTt0aGlzLmo9QkQoYS5XZShXOGMpLDIxKTtpZighSmJkKHRoaXMuaikpe3Rocm93IHZiYihuZXcgeTJjKCdJbnZhbGlkIG5vZGUgbGFiZWwgcGxhY2VtZW50OiAnK3RoaXMuaikpfXRoaXMubj1CRChiZ2QoYSxVOGMpLDExNik7dGhpcy5rPUVkYihFRChiZ2QoYSxROWMpKSk7dGhpcy5kPUVkYihFRChiZ2QoYSxQOWMpKSk7dGhpcy53PUVkYihFRChiZ2QoYSxYOWMpKSk7dGhpcy5zPUVkYihFRChiZ2QoYSxSOWMpKSk7dGhpcy50PUVkYihFRChiZ2QoYSxTOWMpKSk7dGhpcy5DPUJEKGJnZChhLFY5YyksMTQyKTt0aGlzLmM9Mip0aGlzLmQ7Yj0hdGhpcy5CLkhjKChJZGQoKSx6ZGQpKTt0aGlzLmY9bmV3IG1JYigwLGIsMCk7dGhpcy5nPW5ldyBtSWIoMSxiLDApO2xJYih0aGlzLmYsKGdIYigpLGVIYiksdGhpcy5nKX1cbmZ1bmN0aW9uIExnZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxEO3Q9MDtvPTA7bj0wO209MTtmb3Iocz1uZXcgRnlkKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkpO3MuZSE9cy5pLmdjKCk7KXtxPUJEKER5ZChzKSwzMyk7bSs9c3IobmV3IFNyKHVyKF9zZChxKS5hLktjKCksbmV3IFNxKSkpO0I9cS5nO289JHduZC5NYXRoLm1heChvLEIpO2w9cS5mO249JHduZC5NYXRoLm1heChuLGwpO3QrPUIqbH1wPSghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkuaTtnPXQrMipkKmQqbSpwO2Y9JHduZC5NYXRoLnNxcnQoZyk7aT0kd25kLk1hdGgubWF4KGYqYyxvKTtoPSR3bmQuTWF0aC5tYXgoZi9jLG4pO2ZvcihyPW5ldyBGeWQoKCFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSksYS5hKSk7ci5lIT1yLmkuZ2MoKTspe3E9QkQoRHlkKHIpLDMzKTtDPWUuYisoQ3ViKGIsMjYpKmlrZStDdWIoYiwyNykqamtlKSooaS1xLmcpO0Q9ZS5iKyhDdWIoYiwyNikqaWtlK0N1YihiLDI3KSpqa2UpKihoLXEuZik7ZGxkKHEsQyk7ZWxkKHEsRCl9QT1pKyhlLmIrZS5jKTt3PWgrKGUuZCtlLmEpO2Zvcih2PW5ldyBGeWQoKCFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSksYS5hKSk7di5lIT12LmkuZ2MoKTspe3U9QkQoRHlkKHYpLDMzKTtmb3Ioaz1uZXcgU3IodXIoX3NkKHUpLmEuS2MoKSxuZXcgU3EpKTtRcihrKTspe2o9QkQoUnIoayksNzkpO1BsZChqKXx8S2dkKGosYixBLHcpfX1BKz1lLmIrZS5jO3crPWUuZCtlLmE7QWZkKGEsQSx3LGZhbHNlLHRydWUpfVxuZnVuY3Rpb24gSmNiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBPZWIoWGhlKSl9aj1hO2Y9YS5sZW5ndGg7aT1mYWxzZTtpZihmPjApe2I9KEJDYigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCkpO2lmKGI9PTQ1fHxiPT00Myl7YT1hLnN1YnN0cigxKTstLWY7aT1iPT00NX19aWYoZj09MCl7dGhyb3cgdmJiKG5ldyBPZWIoT2plK2orJ1wiJykpfXdoaWxlKGEubGVuZ3RoPjAmJihCQ2IoMCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KDApPT00OCkpe2E9YS5zdWJzdHIoMSk7LS1mfWlmKGY+KE5lYigpLExlYilbMTBdKXt0aHJvdyB2YmIobmV3IE9lYihPamUraisnXCInKSl9Zm9yKGU9MDtlPGY7ZSsrKXtpZihaY2IoKEJDYihlLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoZSkpKT09LTEpe3Rocm93IHZiYihuZXcgT2ViKE9qZStqKydcIicpKX19bD0wO2c9SmViWzEwXTtrPUtlYlsxMF07aD1KYmIoTWViWzEwXSk7Yz10cnVlO2Q9ZiVnO2lmKGQ+MCl7bD0tcGFyc2VJbnQoYS5zdWJzdHIoMCxkKSwxMCk7YT1hLnN1YnN0cihkKTtmLT1kO2M9ZmFsc2V9d2hpbGUoZj49Zyl7ZD1wYXJzZUludChhLnN1YnN0cigwLGcpLDEwKTthPWEuc3Vic3RyKGcpO2YtPWc7aWYoYyl7Yz1mYWxzZX1lbHNle2lmKHliYihsLGgpPDApe3Rocm93IHZiYihuZXcgT2ViKE9qZStqKydcIicpKX1sPUliYihsLGspfWw9UWJiKGwsZCl9aWYoeWJiKGwsMCk+MCl7dGhyb3cgdmJiKG5ldyBPZWIoT2plK2orJ1wiJykpfWlmKCFpKXtsPUpiYihsKTtpZih5YmIobCwwKTwwKXt0aHJvdyB2YmIobmV3IE9lYihPamUraisnXCInKSl9fXJldHVybiBsfVxuZnVuY3Rpb24gWjZkKGEsYil7WDZkKCk7dmFyIGMsZCxlLGYsZyxoLGk7dGhpcy5hPW5ldyBhN2QodGhpcyk7dGhpcy5iPWE7dGhpcy5jPWI7dGhpcy5mPWMyZChxMWQoKE82ZCgpLE02ZCksYikpO2lmKHRoaXMuZi5kYygpKXtpZigoaD10MWQoTTZkLGEpKT09Yil7dGhpcy5lPXRydWU7dGhpcy5kPW5ldyBSa2I7dGhpcy5mPW5ldyBvRmQ7dGhpcy5mLkZjKEV3ZSk7QkQoVjFkKHAxZChNNmQsYktkKGEpKSwnJyksMjYpPT1hJiZ0aGlzLmYuRmModTFkKE02ZCxiS2QoYSkpKTtmb3IoZT1nMWQoTTZkLGEpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMTcwKTtzd2l0Y2goJDFkKHExZChNNmQsZCkpKXtjYXNlIDQ6e3RoaXMuZC5GYyhkKTticmVha31jYXNlIDU6e3RoaXMuZi5HYyhjMmQocTFkKE02ZCxkKSkpO2JyZWFrfX19fWVsc2V7UTZkKCk7aWYoQkQoYiw2NikuT2ooKSl7dGhpcy5lPXRydWU7dGhpcy5mPW51bGw7dGhpcy5kPW5ldyBSa2I7Zm9yKGc9MCxpPShhLmk9PW51bGwmJlRLZChhKSxhLmkpLmxlbmd0aDtnPGk7KytnKXtkPShjPShhLmk9PW51bGwmJlRLZChhKSxhLmkpLGc+PTAmJmc8Yy5sZW5ndGg/Y1tnXTpudWxsKTtmb3IoZj1fMWQocTFkKE02ZCxkKSk7ZjtmPV8xZChxMWQoTTZkLGYpKSl7Zj09YiYmdGhpcy5kLkZjKGQpfX19ZWxzZSBpZigkMWQocTFkKE02ZCxiKSk9PTEmJiEhaCl7dGhpcy5mPW51bGw7dGhpcy5kPShtOGQoKSxsOGQpfWVsc2V7dGhpcy5mPW51bGw7dGhpcy5lPXRydWU7dGhpcy5kPShtbWIoKSxuZXcgYW5iKGIpKX19fWVsc2V7dGhpcy5lPSQxZChxMWQoTTZkLGIpKT09NTt0aGlzLmYuRmIoVzZkKSYmKHRoaXMuZj1XNmQpfX1cbmZ1bmN0aW9uIHpLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2M9MDtkPXlLYihhLGIpO209YS5zO249YS50O2ZvcihqPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7ai5PYigpOyl7aT1CRChqLlBiKCksMTExKTtpZighaS5jfHxpLmMuZC5jLmxlbmd0aDw9MCl7Y29udGludWV9bz1pLmIucmYoKTtoPWkuYi5YZSgoWTljKCksczljKSk/RWRiKEVEKGkuYi5XZShzOWMpKSk6MDtrPWkuYztsPWsuaTtsLmI9KGc9ay5uLGsuZS5hK2cuYitnLmMpO2wuYT0oZj1rLm4say5lLmIrZi5kK2YuYSk7c3dpdGNoKGIuZyl7Y2FzZSAxOmwuYz1pLmE/KG8uYS1sLmIpLzI6by5hK207bC5kPW8uYitoK2Q7JEhiKGssKE5IYigpLEtIYikpO19IYihrLChFSWIoKSxESWIpKTticmVhaztjYXNlIDM6bC5jPWkuYT8oby5hLWwuYikvMjpvLmErbTtsLmQ9LWgtZC1sLmE7JEhiKGssKE5IYigpLEtIYikpO19IYihrLChFSWIoKSxCSWIpKTticmVhaztjYXNlIDI6bC5jPS1oLWQtbC5iO2lmKGkuYSl7ZT1hLnY/bC5hOkJEKElrYihrLmQsMCksMTgxKS5yZigpLmI7bC5kPShvLmItZSkvMn1lbHNle2wuZD1vLmIrbn0kSGIoaywoTkhiKCksTUhiKSk7X0hiKGssKEVJYigpLENJYikpO2JyZWFrO2Nhc2UgNDpsLmM9by5hK2grZDtpZihpLmEpe2U9YS52P2wuYTpCRChJa2Ioay5kLDApLDE4MSkucmYoKS5iO2wuZD0oby5iLWUpLzJ9ZWxzZXtsLmQ9by5iK259JEhiKGssKE5IYigpLExIYikpO19IYihrLChFSWIoKSxDSWIpKTt9KGI9PShVY2QoKSxBY2QpfHxiPT1SY2QpJiYoYz0kd25kLk1hdGgubWF4KGMsbC5hKSl9Yz4wJiYoQkQoTXBiKGEuYixiKSwxMjQpLmEuYj1jKX1cbmZ1bmN0aW9uIGIzYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO09kZChiLCdDb21tZW50IHByZS1wcm9jZXNzaW5nJywxKTtjPTA7aT1uZXcgb2xiKGEuYSk7d2hpbGUoaS5hPGkuYy5jLmxlbmd0aCl7aD1CRChtbGIoaSksMTApO2lmKENjYihERCh2TmIoaCwoTnljKCkscHdjKSkpKSl7KytjO2U9MDtkPW51bGw7aj1udWxsO2ZvcihvPW5ldyBvbGIoaC5qKTtvLmE8by5jLmMubGVuZ3RoOyl7bT1CRChtbGIobyksMTEpO2UrPW0uZS5jLmxlbmd0aCttLmcuYy5sZW5ndGg7aWYobS5lLmMubGVuZ3RoPT0xKXtkPUJEKElrYihtLmUsMCksMTcpO2o9ZC5jfWlmKG0uZy5jLmxlbmd0aD09MSl7ZD1CRChJa2IobS5nLDApLDE3KTtqPWQuZH19aWYoZT09MSYmai5lLmMubGVuZ3RoK2ouZy5jLmxlbmd0aD09MSYmIUNjYihERCh2TmIoai5pLHB3YykpKSl7YzNiKGgsZCxqLGouaSk7bmxiKGkpfWVsc2V7cj1uZXcgUmtiO2ZvcihuPW5ldyBvbGIoaC5qKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1CRChtbGIobiksMTEpO2ZvcihsPW5ldyBvbGIobS5nKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMTcpO2suZC5nLmMubGVuZ3RoPT0wfHwoci5jW3IuYy5sZW5ndGhdPWssdHJ1ZSl9Zm9yKGc9bmV3IG9sYihtLmUpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxNyk7Zi5jLmUuYy5sZW5ndGg9PTB8fChyLmNbci5jLmxlbmd0aF09Zix0cnVlKX19Zm9yKHE9bmV3IG9sYihyKTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1CRChtbGIocSksMTcpO1BaYihwLHRydWUpfX19fWIubiYmU2RkKGIsJ0ZvdW5kICcrYysnIGNvbW1lbnQgYm94ZXMnKTtRZGQoYil9XG5mdW5jdGlvbiBmOWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO209RWRiKEVEKHZOYihhLChOeWMoKSx0eWMpKSkpO249RWRiKEVEKHZOYihhLHV5YykpKTtsPUVkYihFRCh2TmIoYSxyeWMpKSk7aD1hLm87Zj1CRChJa2IoYS5qLDApLDExKTtnPWYubjtwPWQ5YihmLGwpO2lmKCFwKXtyZXR1cm59aWYoYi5IYygocmNkKCksbmNkKSkpe3N3aXRjaChCRCh2TmIoYSwod3RjKCksSHNjKSksNjEpLmcpe2Nhc2UgMTpwLmM9KGguYS1wLmIpLzItZy5hO3AuZD1uO2JyZWFrO2Nhc2UgMzpwLmM9KGguYS1wLmIpLzItZy5hO3AuZD0tbi1wLmE7YnJlYWs7Y2FzZSAyOmlmKGMmJmYuZS5jLmxlbmd0aD09MCYmZi5nLmMubGVuZ3RoPT0wKXtrPWQ/cC5hOkJEKElrYihmLmYsMCksNzApLm8uYjtwLmQ9KGguYi1rKS8yLWcuYn1lbHNle3AuZD1oLmIrbi1nLmJ9cC5jPS1tLXAuYjticmVhaztjYXNlIDQ6aWYoYyYmZi5lLmMubGVuZ3RoPT0wJiZmLmcuYy5sZW5ndGg9PTApe2s9ZD9wLmE6QkQoSWtiKGYuZiwwKSw3MCkuby5iO3AuZD0oaC5iLWspLzItZy5ifWVsc2V7cC5kPWguYituLWcuYn1wLmM9bTt9fWVsc2UgaWYoYi5IYyhwY2QpKXtzd2l0Y2goQkQodk5iKGEsKHd0YygpLEhzYykpLDYxKS5nKXtjYXNlIDE6Y2FzZSAzOnAuYz1nLmErbTticmVhaztjYXNlIDI6Y2FzZSA0OmlmKGMmJiFmLmMpe2s9ZD9wLmE6QkQoSWtiKGYuZiwwKSw3MCkuby5iO3AuZD0oaC5iLWspLzItZy5ifWVsc2V7cC5kPWcuYitufX19ZT1wLmQ7Zm9yKGo9bmV3IG9sYihmLmYpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSw3MCk7bz1pLm47by5hPXAuYztvLmI9ZTtlKz1pLm8uYitsfX1cbmZ1bmN0aW9uIGVhZSgpe3JFZChROSxuZXcgTGFlKTtyRWQoUzksbmV3IHFiZSk7ckVkKFQ5LG5ldyBYYmUpO3JFZChVOSxuZXcgQ2NlKTtyRWQoWkksbmV3IE9jZSk7ckVkKEdDKFNELDEpLG5ldyBSY2UpO3JFZCh3SSxuZXcgVWNlKTtyRWQoeEksbmV3IFhjZSk7ckVkKFpJLG5ldyBoYWUpO3JFZChaSSxuZXcga2FlKTtyRWQoWkksbmV3IG5hZSk7ckVkKEJJLG5ldyBxYWUpO3JFZChaSSxuZXcgdGFlKTtyRWQoeUssbmV3IHdhZSk7ckVkKHlLLG5ldyB6YWUpO3JFZChaSSxuZXcgQ2FlKTtyRWQoRkksbmV3IEZhZSk7ckVkKFpJLG5ldyBJYWUpO3JFZChaSSxuZXcgT2FlKTtyRWQoWkksbmV3IFJhZSk7ckVkKFpJLG5ldyBVYWUpO3JFZChaSSxuZXcgWGFlKTtyRWQoR0MoU0QsMSksbmV3ICRhZSk7ckVkKFpJLG5ldyBiYmUpO3JFZChaSSxuZXcgZWJlKTtyRWQoeUssbmV3IGhiZSk7ckVkKHlLLG5ldyBrYmUpO3JFZChaSSxuZXcgbmJlKTtyRWQoSkksbmV3IHRiZSk7ckVkKFpJLG5ldyB3YmUpO3JFZChNSSxuZXcgemJlKTtyRWQoWkksbmV3IENiZSk7ckVkKFpJLG5ldyBGYmUpO3JFZChaSSxuZXcgSWJlKTtyRWQoWkksbmV3IExiZSk7ckVkKHlLLG5ldyBPYmUpO3JFZCh5SyxuZXcgUmJlKTtyRWQoWkksbmV3IFViZSk7ckVkKFpJLG5ldyAkYmUpO3JFZChaSSxuZXcgYmNlKTtyRWQoWkksbmV3IGVjZSk7ckVkKFpJLG5ldyBoY2UpO3JFZChaSSxuZXcga2NlKTtyRWQoVUksbmV3IG5jZSk7ckVkKFpJLG5ldyBxY2UpO3JFZChaSSxuZXcgdGNlKTtyRWQoWkksbmV3IHdjZSk7ckVkKFVJLG5ldyB6Y2UpO3JFZChNSSxuZXcgRmNlKTtyRWQoWkksbmV3IEljZSk7ckVkKEpJLG5ldyBMY2UpfVxuZnVuY3Rpb24gQm1kKGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O249Yy5sZW5ndGg7aWYobj4wKXtqPShCQ2IoMCxjLmxlbmd0aCksYy5jaGFyQ29kZUF0KDApKTtpZihqIT02NCl7aWYoaj09Mzcpe209Yy5sYXN0SW5kZXhPZignJScpO2s9ZmFsc2U7aWYobSE9MCYmKG09PW4tMXx8KGs9KEJDYihtKzEsYy5sZW5ndGgpLGMuY2hhckNvZGVBdChtKzEpPT00NikpKSl7aD1jLnN1YnN0cigxLG0tMSk7dT1kZmIoJyUnLGgpP251bGw6UUVkKGgpO2U9MDtpZihrKXt0cnl7ZT1JY2IoYy5zdWJzdHIobSsyKSxSaWUsT2hlKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEyNykpe2k9YTt0aHJvdyB2YmIobmV3IHJGZChpKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fWZvcihyPXBSZChiLldnKCkpO3IuT2IoKTspe3A9TVJkKHIpO2lmKEpEKHAsNTEwKSl7Zj1CRChwLDU5MCk7dD1mLmQ7aWYoKHU9PW51bGw/dD09bnVsbDpkZmIodSx0KSkmJmUtLT09MCl7cmV0dXJuIGZ9fX1yZXR1cm4gbnVsbH19bD1jLmxhc3RJbmRleE9mKCcuJyk7bz1sPT0tMT9jOmMuc3Vic3RyKDAsbCk7ZD0wO2lmKGwhPS0xKXt0cnl7ZD1JY2IoYy5zdWJzdHIobCsxKSxSaWUsT2hlKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDEyNykpe289Y31lbHNlIHRocm93IHZiYihhKX19bz1kZmIoJyUnLG8pP251bGw6UUVkKG8pO2ZvcihxPXBSZChiLldnKCkpO3EuT2IoKTspe3A9TVJkKHEpO2lmKEpEKHAsMTkxKSl7Zz1CRChwLDE5MSk7cz1nLm5lKCk7aWYoKG89PW51bGw/cz09bnVsbDpkZmIobyxzKSkmJmQtLT09MCl7cmV0dXJuIGd9fX1yZXR1cm4gbnVsbH19cmV0dXJuIHJpZChiLGMpfVxuZnVuY3Rpb24gZjZiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRjt3PW5ldyBSa2I7Zm9yKG89bmV3IG9sYihhLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtuPUJEKG1sYihvKSwyOSk7Zm9yKHI9bmV3IG9sYihuLmEpO3IuYTxyLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihyKSwxMCk7aWYocC5rIT0oajBiKCksZTBiKSl7Y29udGludWV9aWYoIXdOYihwLCh3dGMoKSxHc2MpKSl7Y29udGludWV9cz1udWxsO3U9bnVsbDt0PW51bGw7Zm9yKEM9bmV3IG9sYihwLmopO0MuYTxDLmMuYy5sZW5ndGg7KXtCPUJEKG1sYihDKSwxMSk7c3dpdGNoKEIuai5nKXtjYXNlIDQ6cz1CO2JyZWFrO2Nhc2UgMjp1PUI7YnJlYWs7ZGVmYXVsdDp0PUI7fX12PUJEKElrYih0LmcsMCksMTcpO2s9bmV3IHQ3Yyh2LmEpO2o9bmV3IGc3Yyh0Lm4pO1A2YyhqLHAubik7bD1Kc2IoaywwKTtWc2IobCxqKTtBPXc3Yyh2LmEpO209bmV3IGc3Yyh0Lm4pO1A2YyhtLHAubik7R3NiKEEsbSxBLmMuYixBLmMpO0Q9QkQodk5iKHAsR3NjKSwxMCk7Rj1CRChJa2IoRC5qLDApLDExKTtpPUJEKFFrYihzLmUsS0MoQVEsam5lLDE3LDAsMCwxKSksNDc0KTtmb3IoZD1pLGY9MCxoPWQubGVuZ3RoO2Y8aDsrK2Ype2I9ZFtmXTtSWmIoYixGKTtvN2MoYi5hLGIuYS5iLGspfWk9a19iKHUuZyk7Zm9yKGM9aSxlPTAsZz1jLmxlbmd0aDtlPGc7KytlKXtiPWNbZV07UVpiKGIsRik7bzdjKGIuYSwwLEEpfVFaYih2LG51bGwpO1JaYih2LG51bGwpO3cuY1t3LmMubGVuZ3RoXT1wfX1mb3IocT1uZXcgb2xiKHcpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihxKSwxMCk7JF9iKHAsbnVsbCl9fVxuZnVuY3Rpb24gbGdiKCl7bGdiPWNjYjt2YXIgYSxiLGM7bmV3IHNnYigxLDApO25ldyBzZ2IoMTAsMCk7bmV3IHNnYigwLDApO2RnYj1LQyhiSixuaWUsMjQwLDExLDAsMSk7ZWdiPUtDKFRELCRpZSwyNSwxMDAsMTUsMSk7ZmdiPU9DKEdDKFVELDEpLFZqZSwyNSwxNSxbMSw1LDI1LDEyNSw2MjUsMzEyNSwxNTYyNSw3ODEyNSwzOTA2MjUsMTk1MzEyNSw5NzY1NjI1LDQ4ODI4MTI1LDI0NDE0MDYyNSwxMjIwNzAzMTI1LDYxMDM1MTU2MjUsMzA1MTc1NzgxMjUsMTUyNTg3ODkwNjI1LDc2MjkzOTQ1MzEyNSwzODE0Njk3MjY1NjI1LDE5MDczNDg2MzI4MTI1LDk1MzY3NDMxNjQwNjI1LDQ3NjgzNzE1ODIwMzEyNSwyMzg0MTg1NzkxMDE1NjI1XSk7Z2diPUtDKFdELG9qZSwyNSxmZ2IubGVuZ3RoLDE1LDEpO2hnYj1PQyhHQyhVRCwxKSxWamUsMjUsMTUsWzEsMTAsMTAwLF9pZSwxMDAwMCxXamUsMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDAsSmplLDEwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMCwxMDAwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMDAwMCwxMDAwMDAwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMDAwMDAwXSk7aWdiPUtDKFdELG9qZSwyNSxoZ2IubGVuZ3RoLDE1LDEpO2pnYj1LQyhiSixuaWUsMjQwLDExLDAsMSk7YT0wO2Zvcig7YTxqZ2IubGVuZ3RoO2ErKyl7ZGdiW2FdPW5ldyBzZ2IoYSwwKTtqZ2JbYV09bmV3IHNnYigwLGEpO2VnYlthXT00OH1mb3IoO2E8ZWdiLmxlbmd0aDthKyspe2VnYlthXT00OH1mb3IoYz0wO2M8Z2diLmxlbmd0aDtjKyspe2dnYltjXT11Z2IoZmdiW2NdKX1mb3IoYj0wO2I8aWdiLmxlbmd0aDtiKyspe2lnYltiXT11Z2IoaGdiW2JdKX1EaGIoKX1cbmZ1bmN0aW9uIHpyYigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9iaj10aGlzLmNyZWF0ZU9iamVjdCgpfVxuO2UucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKX07ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9ialthXX07ZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5vYmpbYV09Yn07ZS5wcm90b3R5cGVbaGtlXT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5vYmpbYV19O2UucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vYmopfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5rZXlzKCk7dmFyIGM9dGhpczt2YXIgZD0wO3JldHVybiB7bmV4dDpmdW5jdGlvbigpe2lmKGQ+PWIubGVuZ3RoKXJldHVybiB7ZG9uZTp0cnVlfTt2YXIgYT1iW2QrK107cmV0dXJuIHt2YWx1ZTpbYSxjLmdldChhKV0sZG9uZTpmYWxzZX19fX07aWYoIXhyYigpKXtlLnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4ge319O2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vYmpbJzonK2FdfTtlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLm9ialsnOicrYV09Yn07ZS5wcm90b3R5cGVbaGtlXT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5vYmpbJzonK2FdfTtlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107Zm9yKHZhciBiIGluIHRoaXMub2JqKXtiLmNoYXJDb2RlQXQoMCk9PTU4JiZhLnB1c2goYi5zdWJzdHJpbmcoMSkpfXJldHVybiBhfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIGNkZShhKXthZGUoKTt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtpZihhPT1udWxsKXJldHVybiBudWxsO2w9YS5sZW5ndGgqODtpZihsPT0wKXtyZXR1cm4gJyd9aD1sJTI0O249bC8yNHwwO209aCE9MD9uKzE6bjtmPW51bGw7Zj1LQyhURCwkaWUsMjUsbSo0LDE1LDEpO2o9MDtrPTA7Yj0wO2M9MDtkPTA7Zz0wO2U9MDtmb3IoaT0wO2k8bjtpKyspe2I9YVtlKytdO2M9YVtlKytdO2Q9YVtlKytdO2s9KGMmMTUpPDwyND4+MjQ7aj0oYiYzKTw8MjQ+PjI0O289KGImLTEyOCk9PTA/Yj4+Mjw8MjQ+PjI0OihiPj4yXjE5Mik8PDI0Pj4yNDtwPShjJi0xMjgpPT0wP2M+PjQ8PDI0Pj4yNDooYz4+NF4yNDApPDwyND4+MjQ7cT0oZCYtMTI4KT09MD9kPj42PDwyND4+MjQ6KGQ+PjZeMjUyKTw8MjQ+PjI0O2ZbZysrXT1fY2Vbb107ZltnKytdPV9jZVtwfGo8PDRdO2ZbZysrXT1fY2Vbazw8MnxxXTtmW2crK109X2NlW2QmNjNdfWlmKGg9PTgpe2I9YVtlXTtqPShiJjMpPDwyND4+MjQ7bz0oYiYtMTI4KT09MD9iPj4yPDwyND4+MjQ6KGI+PjJeMTkyKTw8MjQ+PjI0O2ZbZysrXT1fY2Vbb107ZltnKytdPV9jZVtqPDw0XTtmW2crK109NjE7ZltnKytdPTYxfWVsc2UgaWYoaD09MTYpe2I9YVtlXTtjPWFbZSsxXTtrPShjJjE1KTw8MjQ+PjI0O2o9KGImMyk8PDI0Pj4yNDtvPShiJi0xMjgpPT0wP2I+PjI8PDI0Pj4yNDooYj4+Ml4xOTIpPDwyND4+MjQ7cD0oYyYtMTI4KT09MD9jPj40PDwyND4+MjQ6KGM+PjReMjQwKTw8MjQ+PjI0O2ZbZysrXT1fY2Vbb107ZltnKytdPV9jZVtwfGo8PDRdO2ZbZysrXT1fY2Vbazw8Ml07ZltnKytdPTYxfXJldHVybiB6ZmIoZiwwLGYubGVuZ3RoKX1cbmZ1bmN0aW9uIG1CKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7YS5lPT0wJiZhLnA+MCYmKGEucD0tKGEucC0xKSk7YS5wPlJpZSYmZEIoYixhLnAtbmplKTtnPWIucS5nZXREYXRlKCk7WkEoYiwxKTthLms+PTAmJmFCKGIsYS5rKTtpZihhLmM+PTApe1pBKGIsYS5jKX1lbHNlIGlmKGEuaz49MCl7aT1uZXcgZkIoYi5xLmdldEZ1bGxZZWFyKCktbmplLGIucS5nZXRNb250aCgpLDM1KTtkPTM1LWkucS5nZXREYXRlKCk7WkEoYiwkd25kLk1hdGgubWluKGQsZykpfWVsc2V7WkEoYixnKX1hLmY8MCYmKGEuZj1iLnEuZ2V0SG91cnMoKSk7YS5iPjAmJmEuZjwxMiYmKGEuZis9MTIpOyRBKGIsYS5mPT0yNCYmYS5nPzA6YS5mKTthLmo+PTAmJl9BKGIsYS5qKTthLm4+PTAmJmJCKGIsYS5uKTthLmk+PTAmJmNCKGIsd2JiKEliYihBYmIoQ2JiKGIucS5nZXRUaW1lKCkpLF9pZSksX2llKSxhLmkpKTtpZihhLmEpe2U9bmV3IGVCO2RCKGUsZS5xLmdldEZ1bGxZZWFyKCktbmplLTgwKTtHYmIoQ2JiKGIucS5nZXRUaW1lKCkpLENiYihlLnEuZ2V0VGltZSgpKSkmJmRCKGIsZS5xLmdldEZ1bGxZZWFyKCktbmplKzEwMCl9aWYoYS5kPj0wKXtpZihhLmM9PS0xKXtjPSg3K2EuZC1iLnEuZ2V0RGF5KCkpJTc7Yz4zJiYoYy09Nyk7aD1iLnEuZ2V0TW9udGgoKTtaQShiLGIucS5nZXREYXRlKCkrYyk7Yi5xLmdldE1vbnRoKCkhPWgmJlpBKGIsYi5xLmdldERhdGUoKSsoYz4wPy03OjcpKX1lbHNle2lmKGIucS5nZXREYXkoKSE9YS5kKXtyZXR1cm4gZmFsc2V9fX1pZihhLm8+UmllKXtmPWIucS5nZXRUaW1lem9uZU9mZnNldCgpO2NCKGIsd2JiKENiYihiLnEuZ2V0VGltZSgpKSwoYS5vLWYpKjYwKl9pZSkpfXJldHVybiB0cnVlfVxuZnVuY3Rpb24gejJiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7ZT12TmIoYiwod3RjKCksJHNjKSk7aWYoIUpEKGUsMjM5KSl7cmV0dXJufW89QkQoZSwzMyk7cD1iLmU7bT1uZXcgZzdjKGIuYyk7Zj1iLmQ7bS5hKz1mLmI7bS5iKz1mLmQ7dT1CRChoa2QobywoTnljKCksSXhjKSksMTc0KTtpZih1cWIodSwoSWRkKCksQWRkKSkpe249QkQoaGtkKG8sS3hjKSwxMTYpO3dfYihuLGYuYSk7el9iKG4sZi5kKTt4X2IobixmLmIpO3lfYihuLGYuYyl9Yz1uZXcgUmtiO2ZvcihrPW5ldyBvbGIoYi5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7aT1CRChtbGIoayksMTApO2lmKEpEKHZOYihpLCRzYyksMjM5KSl7QTJiKGksbSl9ZWxzZSBpZihKRCh2TmIoaSwkc2MpLDE4NikmJiFwKXtkPUJEKHZOYihpLCRzYyksMTE4KTtzPWJfYihiLGksZC5nLGQuZik7YmxkKGQscy5hLHMuYil9Zm9yKHI9bmV3IG9sYihpLmopO3IuYTxyLmMuYy5sZW5ndGg7KXtxPUJEKG1sYihyKSwxMSk7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihxLmcsMTYpKSxuZXcgRzJiKGkpKSxuZXcgSTJiKGMpKX19aWYocCl7Zm9yKHI9bmV3IG9sYihwLmopO3IuYTxyLmMuYy5sZW5ndGg7KXtxPUJEKG1sYihyKSwxMSk7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihxLmcsMTYpKSxuZXcgSzJiKHApKSxuZXcgTTJiKGMpKX19dD1CRChoa2QobyxTd2MpLDIxOCk7Zm9yKGg9bmV3IG9sYihjKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTcpO3kyYihnLHQsbSl9QjJiKGIpO2ZvcihqPW5ldyBvbGIoYi5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTApO2w9aS5lOyEhbCYmejJiKGEsbCl9fVxuZnVuY3Rpb24geFNiKGEpe3I0YyhhLG5ldyBFM2MoUTNjKEwzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyx1bWUpLCdFTEsgRm9yY2UnKSwnRm9yY2UtYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIEltcGxlbWVudHMgbWV0aG9kcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBmb3JjZXMgdGhhdCBtb3ZlIHRoZSBub2RlcyBpbnRvIGEgYmFsYW5jZWQgZGlzdHJpYnV0aW9uLiBDdXJyZW50bHkgdGhlIG9yaWdpbmFsIEVhZGVzIG1vZGVsIGFuZCB0aGUgRnJ1Y2h0ZXJtYW4gLSBSZWluZ29sZCBtb2RlbCBhcmUgc3VwcG9ydGVkLicpLG5ldyBBU2IpLHVtZSkscXFiKChDc2QoKSx6c2QpLE9DKEdDKE8zLDEpLEtpZSwyMzcsMCxbeHNkXSkpKSkpO3A0YyhhLHVtZSx2bWUsbWViKDEpKTtwNGMoYSx1bWUsd21lLDgwKTtwNGMoYSx1bWUseG1lLDUpO3A0YyhhLHVtZSxfbGUsdG1lKTtwNGMoYSx1bWUseW1lLG1lYigxKSk7cDRjKGEsdW1lLHptZSwoQmNiKCksdHJ1ZSkpO3A0YyhhLHVtZSxhbWUsbFNiKTtwNGMoYSx1bWUsQW1lLEtzZChkU2IpKTtwNGMoYSx1bWUsQm1lLEtzZChtU2IpKTtwNGMoYSx1bWUsQ21lLGZhbHNlKTtwNGMoYSx1bWUsRG1lLEtzZChqU2IpKTtwNGMoYSx1bWUsRW1lLEtzZChpU2IpKTtwNGMoYSx1bWUsRm1lLEtzZChoU2IpKTtwNGMoYSx1bWUsR21lLEtzZChnU2IpKTtwNGMoYSx1bWUsSG1lLEtzZChuU2IpKTtwNGMoYSx1bWUsbW1lLEtzZChmU2IpKTtwNGMoYSx1bWUscG1lLEtzZCh2U2IpKTtwNGMoYSx1bWUsbm1lLEtzZChlU2IpKTtwNGMoYSx1bWUscm1lLEtzZChxU2IpKTtwNGMoYSx1bWUsb21lLEtzZChyU2IpKX1cbmZ1bmN0aW9uIEdLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtpZihCRChCRChRYyhhLnIsYiksMjEpLDg0KS5kYygpKXtyZXR1cm59Zz1CRChNcGIoYS5iLGIpLDEyNCk7aT1nLmk7aD1nLm47az1LSWIoYSxiKTtkPWkuYi1oLmItaC5jO2U9Zy5hLmE7Zj1pLmMraC5iO249YS53O2lmKChrPT0oVGJkKCksUWJkKXx8az09U2JkKSYmQkQoQkQoUWMoYS5yLGIpLDIxKSw4NCkuZ2MoKT09MSl7ZT1rPT1RYmQ/ZS0yKmEudzplO2s9UGJkfWlmKGQ8ZSYmIWEuQi5IYygoSWRkKCksRmRkKSkpe2lmKGs9PVFiZCl7bis9KGQtZSkvKEJEKEJEKFFjKGEucixiKSwyMSksODQpLmdjKCkrMSk7Zis9bn1lbHNle24rPShkLWUpLyhCRChCRChRYyhhLnIsYiksMjEpLDg0KS5nYygpLTEpfX1lbHNle2lmKGQ8ZSl7ZT1rPT1RYmQ/ZS0yKmEudzplO2s9UGJkfXN3aXRjaChrLmcpe2Nhc2UgMzpmKz0oZC1lKS8yO2JyZWFrO2Nhc2UgNDpmKz1kLWU7YnJlYWs7Y2FzZSAwOmM9KGQtZSkvKEJEKEJEKFFjKGEucixiKSwyMSksODQpLmdjKCkrMSk7bis9JHduZC5NYXRoLm1heCgwLGMpO2YrPW47YnJlYWs7Y2FzZSAxOmM9KGQtZSkvKEJEKEJEKFFjKGEucixiKSwyMSksODQpLmdjKCktMSk7bis9JHduZC5NYXRoLm1heCgwLGMpO319Zm9yKG09QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCkuS2MoKTttLk9iKCk7KXtsPUJEKG0uUGIoKSwxMTEpO2wuZS5hPWYrbC5kLmI7bC5lLmI9KGo9bC5iLGouWGUoKFk5YygpLHM5YykpP2ouSGYoKT09KFVjZCgpLEFjZCk/LWoucmYoKS5iLUVkYihFRChqLldlKHM5YykpKTpFZGIoRUQoai5XZShzOWMpKSk6ai5IZigpPT0oVWNkKCksQWNkKT8tai5yZigpLmI6MCk7Zis9bC5kLmIrbC5iLnJmKCkuYStsLmQuYytufX1cbmZ1bmN0aW9uIEtLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2lmKEJEKEJEKFFjKGEucixiKSwyMSksODQpLmRjKCkpe3JldHVybn1nPUJEKE1wYihhLmIsYiksMTI0KTtpPWcuaTtoPWcubjtsPUtJYihhLGIpO2Q9aS5hLWguZC1oLmE7ZT1nLmEuYjtmPWkuZCtoLmQ7bz1hLnc7aj1hLm8uYTtpZigobD09KFRiZCgpLFFiZCl8fGw9PVNiZCkmJkJEKEJEKFFjKGEucixiKSwyMSksODQpLmdjKCk9PTEpe2U9bD09UWJkP2UtMiphLnc6ZTtsPVBiZH1pZihkPGUmJiFhLkIuSGMoKElkZCgpLEZkZCkpKXtpZihsPT1RYmQpe28rPShkLWUpLyhCRChCRChRYyhhLnIsYiksMjEpLDg0KS5nYygpKzEpO2YrPW99ZWxzZXtvKz0oZC1lKS8oQkQoQkQoUWMoYS5yLGIpLDIxKSw4NCkuZ2MoKS0xKX19ZWxzZXtpZihkPGUpe2U9bD09UWJkP2UtMiphLnc6ZTtsPVBiZH1zd2l0Y2gobC5nKXtjYXNlIDM6Zis9KGQtZSkvMjticmVhaztjYXNlIDQ6Zis9ZC1lO2JyZWFrO2Nhc2UgMDpjPShkLWUpLyhCRChCRChRYyhhLnIsYiksMjEpLDg0KS5nYygpKzEpO28rPSR3bmQuTWF0aC5tYXgoMCxjKTtmKz1vO2JyZWFrO2Nhc2UgMTpjPShkLWUpLyhCRChCRChRYyhhLnIsYiksMjEpLDg0KS5nYygpLTEpO28rPSR3bmQuTWF0aC5tYXgoMCxjKTt9fWZvcihuPUJEKEJEKFFjKGEucixiKSwyMSksODQpLktjKCk7bi5PYigpOyl7bT1CRChuLlBiKCksMTExKTttLmUuYT0oaz1tLmIsay5YZSgoWTljKCksczljKSk/ay5IZigpPT0oVWNkKCksVGNkKT8tay5yZigpLmEtRWRiKEVEKGsuV2UoczljKSkpOmorRWRiKEVEKGsuV2UoczljKSkpOmsuSGYoKT09KFVjZCgpLFRjZCk/LWsucmYoKS5hOmopO20uZS5iPWYrbS5kLmQ7Zis9bS5kLmQrbS5iLnJmKCkuYittLmQuYStvfX1cbmZ1bmN0aW9uIEFiYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7YS5uPUVkYihFRCh2TmIoYS5nLChOeWMoKSx2eWMpKSkpO2EuZT1FZGIoRUQodk5iKGEuZyxweWMpKSk7YS5pPWEuZy5iLmMubGVuZ3RoO2g9YS5pLTE7bT0wO2Euaj0wO2Euaz0wO2EuYT1PdShLQyhKSSxuaWUsMTksYS5pLDAsMSkpO2EuYj1PdShLQyhCSSxuaWUsMzMzLGEuaSw3LDEpKTtmb3IoZz1uZXcgb2xiKGEuZy5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZyksMjkpO2UucD1oO2ZvcihsPW5ldyBvbGIoZS5hKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMTApO2sucD1tOysrbX0tLWh9YS5mPUtDKFdELG9qZSwyNSxtLDE1LDEpO2EuYz1JQyhXRCxbbmllLG9qZV0sWzQ4LDI1XSwxNSxbbSwzXSwyKTthLm89bmV3IFJrYjthLnA9bmV3IFJrYjtiPTA7YS5kPTA7Zm9yKGY9bmV3IG9sYihhLmcuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDI5KTtoPWUucDtkPTA7cD0wO2k9ZS5hLmMubGVuZ3RoO2o9MDtmb3IobD1uZXcgb2xiKGUuYSk7bC5hPGwuYy5jLmxlbmd0aDspe2s9QkQobWxiKGwpLDEwKTttPWsucDthLmZbbV09ay5jLnA7ais9ay5vLmIrYS5uO2M9c3IobmV3IFNyKHVyKFJfYihrKS5hLktjKCksbmV3IFNxKSkpO289c3IobmV3IFNyKHVyKFVfYihrKS5hLktjKCksbmV3IFNxKSkpO2EuY1ttXVswXT1vLWM7YS5jW21dWzFdPWM7YS5jW21dWzJdPW87ZCs9YztwKz1vO2M+MCYmRWtiKGEucCxrKTtFa2IoYS5vLGspfWItPWQ7bj1pK2I7ais9YiphLmU7TmtiKGEuYSxoLG1lYihuKSk7TmtiKGEuYixoLGopO2Euaj0kd25kLk1hdGgubWF4KGEuaixuKTthLms9JHduZC5NYXRoLm1heChhLmssaik7YS5kKz1iO2IrPXB9fVxuZnVuY3Rpb24gVWNkKCl7VWNkPWNjYjt2YXIgYTtTY2Q9bmV3IFljZChvbGUsMCk7QWNkPW5ldyBZY2QoeGxlLDEpO3pjZD1uZXcgWWNkKHlsZSwyKTtSY2Q9bmV3IFljZCh6bGUsMyk7VGNkPW5ldyBZY2QoQWxlLDQpO0ZjZD0obW1iKCksbmV3IHpvYigoYT1CRChnZGIoRjEpLDkpLG5ldyB4cWIoYSxCRChfQmIoYSxhLmxlbmd0aCksOSksMCkpKSk7R2NkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW10pKSk7QmNkPVVwKHFxYih6Y2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW10pKSk7T2NkPVVwKHFxYihSY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW10pKSk7UWNkPVVwKHFxYihUY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW10pKSk7TGNkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW1JjZF0pKSk7RWNkPVVwKHFxYih6Y2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW1RjZF0pKSk7TmNkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW1RjZF0pKSk7SGNkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW3pjZF0pKSk7UGNkPVVwKHFxYihSY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW1RjZF0pKSk7Q2NkPVVwKHFxYih6Y2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW1JjZF0pKSk7S2NkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW3pjZCxUY2RdKSkpO0RjZD1VcChxcWIoemNkLE9DKEdDKEYxLDEpLGJuZSw2MSwwLFtSY2QsVGNkXSkpKTtNY2Q9VXAocXFiKEFjZCxPQyhHQyhGMSwxKSxibmUsNjEsMCxbUmNkLFRjZF0pKSk7SWNkPVVwKHFxYihBY2QsT0MoR0MoRjEsMSksYm5lLDYxLDAsW3pjZCxSY2RdKSkpO0pjZD1VcChxcWIoQWNkLE9DKEdDKEYxLDEpLGJuZSw2MSwwLFt6Y2QsUmNkLFRjZF0pKSl9XG5mdW5jdGlvbiBmU2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7aWYoYi5iIT0wKXtuPW5ldyBQc2I7aD1udWxsO289bnVsbDtkPVFEKCR3bmQuTWF0aC5mbG9vcigkd25kLk1hdGgubG9nKGIuYikqJHduZC5NYXRoLkxPRzEwRSkrMSk7aT0wO2Zvcih0PUpzYihiLDApO3QuYiE9dC5kLmM7KXtyPUJEKFhzYih0KSw4Nik7aWYoUEQobykhPT1QRCh2TmIociwobVRjKCksJFNjKSkpKXtvPUdEKHZOYihyLCRTYykpO2k9MH1vIT1udWxsPyhoPW8raVNjKGkrKyxkKSk6KGg9aVNjKGkrKyxkKSk7eU5iKHIsJFNjLGgpO2ZvcihxPShlPUpzYigobmV3IFpSYyhyKSkuYS5kLDApLG5ldyBhU2MoZSkpO1dzYihxLmEpOyl7cD1CRChYc2IocS5hKSwxODgpLmM7R3NiKG4scCxuLmMuYixuLmMpO3lOYihwLCRTYyxoKX19bT1uZXcgTHFiO2ZvcihnPTA7ZzxoLmxlbmd0aC1kO2crKyl7Zm9yKHM9SnNiKGIsMCk7cy5iIT1zLmQuYzspe3I9QkQoWHNiKHMpLDg2KTtqPXFmYihHRCh2TmIociwobVRjKCksJFNjKSkpLDAsZysxKTtjPShqPT1udWxsP1dkKGlyYihtLmYsbnVsbCkpOkNyYihtLmcsaikpIT1udWxsP0JEKGo9PW51bGw/V2QoaXJiKG0uZixudWxsKSk6Q3JiKG0uZyxqKSwxOSkuYSsxOjE7U2hiKG0saixtZWIoYykpfX1mb3IobD1uZXcgbmliKChuZXcgZWliKG0pKS5hKTtsLmI7KXtrPWxpYihsKTtmPW1lYihPaGIoYS5hLGsuY2QoKSkhPW51bGw/QkQoT2hiKGEuYSxrLmNkKCkpLDE5KS5hOjApO1NoYihhLmEsR0Qoay5jZCgpKSxtZWIoQkQoay5kZCgpLDE5KS5hK2YuYSkpO2Y9QkQoT2hiKGEuYixrLmNkKCkpLDE5KTsoIWZ8fGYuYTxCRChrLmRkKCksMTkpLmEpJiZTaGIoYS5iLEdEKGsuY2QoKSksQkQoay5kZCgpLDE5KSl9ZlNjKGEsbil9fVxuZnVuY3Rpb24gUENjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7T2RkKGMsJ0ludGVyYWN0aXZlIG5vZGUgbGF5ZXJpbmcnLDEpO2Q9bmV3IFJrYjtmb3Iobj1uZXcgb2xiKGIuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2w9QkQobWxiKG4pLDEwKTtqPWwubi5hO2k9aitsLm8uYTtpPSR3bmQuTWF0aC5tYXgoaisxLGkpO3I9bmV3IEJpYihkLDApO2U9bnVsbDt3aGlsZShyLmI8ci5kLmdjKCkpe3A9KHNDYihyLmI8ci5kLmdjKCkpLEJEKHIuZC5YYihyLmM9ci5iKyspLDU2OSkpO2lmKHAuYz49aSl7c0NiKHIuYj4wKTtyLmEuWGIoci5jPS0tci5iKTticmVha31lbHNlIGlmKHAuYT5qKXtpZighZSl7RWtiKHAuYixsKTtwLmM9JHduZC5NYXRoLm1pbihwLmMsaik7cC5hPSR3bmQuTWF0aC5tYXgocC5hLGkpO2U9cH1lbHNle0drYihlLmIscC5iKTtlLmE9JHduZC5NYXRoLm1heChlLmEscC5hKTt1aWIocil9fX1pZighZSl7ZT1uZXcgVENjO2UuYz1qO2UuYT1pO0FpYihyLGUpO0VrYihlLmIsbCl9fWg9Yi5iO2s9MDtmb3IocT1uZXcgb2xiKGQpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihxKSw1NjkpO2Y9bmV3IEgxYihiKTtmLnA9aysrO2guY1toLmMubGVuZ3RoXT1mO2ZvcihvPW5ldyBvbGIocC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7bD1CRChtbGIobyksMTApOyRfYihsLGYpO2wucD0wfX1mb3IobT1uZXcgb2xiKGIuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDEwKTtsLnA9PTAmJk9DYyhhLGwsYil9Zz1uZXcgQmliKGgsMCk7d2hpbGUoZy5iPGcuZC5nYygpKXsoc0NiKGcuYjxnLmQuZ2MoKSksQkQoZy5kLlhiKGcuYz1nLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZ1aWIoZyl9Yi5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO1FkZChjKX1cbmZ1bmN0aW9uIFNuYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07aWYoYi5lLmMubGVuZ3RoIT0wJiZjLmUuYy5sZW5ndGghPTApe2Q9QkQoSWtiKGIuZSwwKSwxNykuYy5pO2c9QkQoSWtiKGMuZSwwKSwxNykuYy5pO2lmKGQ9PWcpe3JldHVybiBiZWIoQkQodk5iKEJEKElrYihiLmUsMCksMTcpLCh3dGMoKSxac2MpKSwxOSkuYSxCRCh2TmIoQkQoSWtiKGMuZSwwKSwxNyksWnNjKSwxOSkuYSl9Zm9yKGs9YS5hLGw9MCxtPWsubGVuZ3RoO2w8bTsrK2wpe2o9a1tsXTtpZihqPT1kKXtyZXR1cm4gMX1lbHNlIGlmKGo9PWcpe3JldHVybiAtMX19fWlmKGIuZy5jLmxlbmd0aCE9MCYmYy5nLmMubGVuZ3RoIT0wKXtmPUJEKHZOYihiLCh3dGMoKSxYc2MpKSwxMCk7aT1CRCh2TmIoYyxYc2MpLDEwKTtlPTA7aD0wO3dOYihCRChJa2IoYi5nLDApLDE3KSxac2MpJiYoZT1CRCh2TmIoQkQoSWtiKGIuZywwKSwxNyksWnNjKSwxOSkuYSk7d05iKEJEKElrYihjLmcsMCksMTcpLFpzYykmJihoPUJEKHZOYihCRChJa2IoYi5nLDApLDE3KSxac2MpLDE5KS5hKTtpZighIWYmJmY9PWkpe2lmKENjYihERCh2TmIoQkQoSWtiKGIuZywwKSwxNyksbHRjKSkpJiYhQ2NiKEREKHZOYihCRChJa2IoYy5nLDApLDE3KSxsdGMpKSkpe3JldHVybiAxfWVsc2UgaWYoIUNjYihERCh2TmIoQkQoSWtiKGIuZywwKSwxNyksbHRjKSkpJiZDY2IoREQodk5iKEJEKElrYihjLmcsMCksMTcpLGx0YykpKSl7cmV0dXJuIC0xfXJldHVybiBlPGg/LTE6ZT5oPzE6MH1pZihhLmIpe2EuYi5fYihmKSYmKGU9QkQoYS5iLnhjKGYpLDE5KS5hKTthLmIuX2IoaSkmJihoPUJEKGEuYi54YyhpKSwxOSkuYSl9cmV0dXJuIGU8aD8tMTplPmg/MTowfXJldHVybiBiLmUuYy5sZW5ndGghPTAmJmMuZy5jLmxlbmd0aCE9MD8xOi0xfVxuZnVuY3Rpb24gYWNjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEE7T2RkKGIsSW5lLDEpO3A9bmV3IFJrYjt3PW5ldyBSa2I7Zm9yKGo9bmV3IG9sYihhLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwyOSk7cj0tMTtvPWxfYihpLmEpO2ZvcihsPW8sbT0wLG49bC5sZW5ndGg7bTxuOysrbSl7az1sW21dOysrcjtpZighKGsuaz09KGowYigpLGgwYikmJmZjZChCRCh2TmIoaywoTnljKCksVnhjKSksOTgpKSkpe2NvbnRpbnVlfWVjZChCRCh2TmIoaywoTnljKCksVnhjKSksOTgpKXx8YmNjKGspO3lOYihrLCh3dGMoKSxQc2MpLGspO3AuYz1LQyhTSSxVaGUsMSwwLDUsMSk7dy5jPUtDKFNJLFVoZSwxLDAsNSwxKTtjPW5ldyBSa2I7dT1uZXcgUHNiO0pxKHUsWV9iKGssKFVjZCgpLEFjZCkpKTskYmMoYSx1LHAsdyxjKTtoPXI7QT1rO2ZvcihmPW5ldyBvbGIocCk7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGYpLDEwKTtaX2IoZCxoLGkpOysrcjt5TmIoZCxQc2Msayk7Zz1CRChJa2IoZC5qLDApLDExKTtxPUJEKHZOYihnLCRzYyksMTEpO0NjYihERCh2TmIocSxud2MpKSl8fEJEKHZOYihkLFFzYyksMTUpLkZjKEEpfU9zYih1KTtmb3IodD1ZX2IoayxSY2QpLktjKCk7dC5PYigpOyl7cz1CRCh0LlBiKCksMTEpO0dzYih1LHMsdS5hLHUuYS5hKX0kYmMoYSx1LHcsbnVsbCxjKTt2PWs7Zm9yKGU9bmV3IG9sYih3KTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTApO1pfYihkLCsrcixpKTt5TmIoZCxQc2Msayk7Zz1CRChJa2IoZC5qLDApLDExKTtxPUJEKHZOYihnLCRzYyksMTEpO0NjYihERCh2TmIocSxud2MpKSl8fEJEKHZOYih2LFFzYyksMTUpLkZjKGQpfWMuYy5sZW5ndGg9PTB8fHlOYihrLHNzYyxjKX19UWRkKGIpfVxuZnVuY3Rpb24gU1FiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSTtsPUJEKHZOYihhLChIU2IoKSxGU2IpKSwzMyk7cj1PaGU7cz1PaGU7cD1SaWU7cT1SaWU7Zm9yKHU9bmV3IG9sYihhLmUpO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUJEKG1sYih1KSwxNDQpO0M9dC5kO0Q9dC5lO3I9JHduZC5NYXRoLm1pbihyLEMuYS1ELmEvMik7cz0kd25kLk1hdGgubWluKHMsQy5iLUQuYi8yKTtwPSR3bmQuTWF0aC5tYXgocCxDLmErRC5hLzIpO3E9JHduZC5NYXRoLm1heChxLEMuYitELmIvMil9Qj1CRChoa2QobCwod1NiKCksa1NiKSksMTE2KTtBPW5ldyBmN2MoQi5iLXIsQi5kLXMpO2ZvcihoPW5ldyBvbGIoYS5lKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTQ0KTt3PXZOYihnLEZTYik7aWYoSkQodywyMzkpKXtuPUJEKHcsMzMpO3Y9UDZjKGcuZCxBKTtibGQobix2LmEtbi5nLzIsdi5iLW4uZi8yKX19Zm9yKGQ9bmV3IG9sYihhLmMpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwyODIpO2o9QkQodk5iKGMsRlNiKSw3OSk7az1pdGQoaix0cnVlLHRydWUpO0Y9KEg9YzdjKFI2YyhjLmQuZCksYy5jLmQpLGw2YyhILGMuYy5lLmEsYy5jLmUuYiksUDZjKEgsYy5jLmQpKTtubWQoayxGLmEsRi5iKTtiPShJPWM3YyhSNmMoYy5jLmQpLGMuZC5kKSxsNmMoSSxjLmQuZS5hLGMuZC5lLmIpLFA2YyhJLGMuZC5kKSk7Z21kKGssYi5hLGIuYil9Zm9yKGY9bmV3IG9sYihhLmQpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSw0NDcpO209QkQodk5iKGUsRlNiKSwxMzcpO289UDZjKGUuZCxBKTtibGQobSxvLmEsby5iKX1HPXAtcisoQi5iK0IuYyk7aT1xLXMrKEIuZCtCLmEpO0FmZChsLEcsaSxmYWxzZSx0cnVlKX1cbmZ1bmN0aW9uIGJtYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07Yz1udWxsO2k9bnVsbDtlPUJEKHZOYihhLmIsKE55YygpLFd3YykpLDM3Nik7aWYoZT09KF9BYygpLFpBYykpe2M9bmV3IFJrYjtpPW5ldyBSa2J9Zm9yKGg9bmV3IG9sYihhLmQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxMDEpO2Y9Zy5pO2lmKCFmKXtjb250aW51ZX1zd2l0Y2goZy5lLmcpe2Nhc2UgMDpiPUJEKEZxYihuZXcgR3FiKGcuYikpLDYxKTtlPT1aQWMmJmI9PShVY2QoKSxBY2QpPyhjLmNbYy5jLmxlbmd0aF09Zyx0cnVlKTplPT1aQWMmJmI9PShVY2QoKSxSY2QpPyhpLmNbaS5jLmxlbmd0aF09Zyx0cnVlKTpfbGMoZyxiKTticmVhaztjYXNlIDE6aj1nLmEuZC5qO2s9Zy5jLmQuajtqPT0oVWNkKCksQWNkKT9hbWMoZyxBY2QsKEFqYygpLHhqYyksZy5hKTprPT1BY2Q/YW1jKGcsQWNkLChBamMoKSx5amMpLGcuYyk6aj09UmNkP2FtYyhnLFJjZCwoQWpjKCkseWpjKSxnLmEpOms9PVJjZCYmYW1jKGcsUmNkLChBamMoKSx4amMpLGcuYyk7YnJlYWs7Y2FzZSAyOmNhc2UgMzpkPWcuYjt1cWIoZCwoVWNkKCksQWNkKSk/dXFiKGQsUmNkKT91cWIoZCxUY2QpP3VxYihkLHpjZCl8fGFtYyhnLEFjZCwoQWpjKCkseWpjKSxnLmMpOmFtYyhnLEFjZCwoQWpjKCkseGpjKSxnLmEpOmFtYyhnLEFjZCwoQWpjKCksd2pjKSxudWxsKTphbWMoZyxSY2QsKEFqYygpLHdqYyksbnVsbCk7YnJlYWs7Y2FzZSA0Omw9Zy5hLmQuajttPWcuYS5kLmo7bD09KFVjZCgpLEFjZCl8fG09PUFjZD9hbWMoZyxSY2QsKEFqYygpLHdqYyksbnVsbCk6YW1jKGcsQWNkLChBamMoKSx3amMpLG51bGwpO319aWYoYyl7Yy5jLmxlbmd0aD09MHx8JGxjKGMsKFVjZCgpLEFjZCkpO2kuYy5sZW5ndGg9PTB8fCRsYyhpLChVY2QoKSxSY2QpKX19XG5mdW5jdGlvbiBBMmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2Q9QkQodk5iKGEsKHd0YygpLCRzYykpLDMzKTtvPUJEKHZOYihhLChOeWMoKSxHd2MpKSwxOSkuYTtmPUJEKHZOYihhLG54YyksMTkpLmE7amtkKGQsR3djLG1lYihvKSk7amtkKGQsbnhjLG1lYihmKSk7ZGxkKGQsYS5uLmErYi5hKTtlbGQoZCxhLm4uYitiLmIpO2lmKEJEKGhrZChkLEZ4YyksMTc0KS5nYygpIT0wfHwhIWEuZXx8UEQodk5iKFFfYihhKSxFeGMpKT09PVBEKChWemMoKSxUemMpKSYmSnpjKChJemMoKSwoIWEucT8obW1iKCksbW1iKCksa21iKTphLnEpLl9iKEN4Yyk/KG09QkQodk5iKGEsQ3hjKSwxOTcpKToobT1CRCh2TmIoUV9iKGEpLER4YyksMTk3KSksbSkpKXtjbGQoZCxhLm8uYSk7YWxkKGQsYS5vLmIpfWZvcihsPW5ldyBvbGIoYS5qKTtsLmE8bC5jLmMubGVuZ3RoOyl7aj1CRChtbGIobCksMTEpO3A9dk5iKGosJHNjKTtpZihKRChwLDE4Nikpe2U9QkQocCwxMTgpO2JsZChlLGoubi5hLGoubi5iKTtqa2QoZSwkeGMsai5qKX19bj1CRCh2TmIoYSx4eGMpLDE3NCkuZ2MoKSE9MDtmb3IoaT1uZXcgb2xiKGEuYik7aS5hPGkuYy5jLmxlbmd0aDspe2c9QkQobWxiKGkpLDcwKTtpZihufHxCRCh2TmIoZyx4eGMpLDE3NCkuZ2MoKSE9MCl7Yz1CRCh2TmIoZywkc2MpLDEzNyk7X2tkKGMsZy5vLmEsZy5vLmIpO2JsZChjLGcubi5hLGcubi5iKX19aWYoIXRjZChCRCh2TmIoYSxZeGMpLDIxKSkpe2ZvcihrPW5ldyBvbGIoYS5qKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1CRChtbGIoayksMTEpO2ZvcihoPW5ldyBvbGIoai5mKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksNzApO2M9QkQodk5iKGcsJHNjKSwxMzcpO2NsZChjLGcuby5hKTthbGQoYyxnLm8uYik7YmxkKGMsZy5uLmEsZy5uLmIpfX19fVxuZnVuY3Rpb24gZ3RkKGEpe3ZhciBiLGMsZCxlLGY7eXRiKGEsaHVlKTtzd2l0Y2goKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYikuaSsoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKS5pKXtjYXNlIDA6dGhyb3cgdmJiKG5ldyBXZGIoJ1RoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4nKSk7Y2FzZSAxOnJldHVybiAoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKS5pPT0wP1hvZChhdGQoQkQocXVkKCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLDApLDgyKSkpOlhvZChhdGQoQkQocXVkKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLDApLDgyKSkpO31pZigoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKS5pPT0xJiYoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKS5pPT0xKXtlPWF0ZChCRChxdWQoKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYiksMCksODIpKTtmPWF0ZChCRChxdWQoKCFhLmMmJihhLmM9bmV3IHk1ZCh6MixhLDUsOCkpLGEuYyksMCksODIpKTtpZihYb2QoZSk9PVhvZChmKSl7cmV0dXJuIFhvZChlKX1lbHNlIGlmKGU9PVhvZChmKSl7cmV0dXJuIGV9ZWxzZSBpZihmPT1Yb2QoZSkpe3JldHVybiBmfX1kPXVsKHBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFsoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKSwoIWEuYyYmKGEuYz1uZXcgeTVkKHoyLGEsNSw4KSksYS5jKV0pKSk7Yj1hdGQoQkQoUnIoZCksODIpKTt3aGlsZShRcihkKSl7Yz1hdGQoQkQoUnIoZCksODIpKTtpZihjIT1iJiYhbnRkKGMsYikpe2lmKFhvZChjKT09WG9kKGIpKXtiPVhvZChjKX1lbHNle2I9aHRkKGIsYyk7aWYoIWIpe3JldHVybiBudWxsfX19fXJldHVybiBifVxuZnVuY3Rpb24gS05jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7T2RkKGMsJ1BvbHlsaW5lIGVkZ2Ugcm91dGluZycsMSk7cT1FZGIoRUQodk5iKGIsKE55YygpLFV3YykpKSk7bj1FZGIoRUQodk5iKGIsd3ljKSkpO2U9RWRiKEVEKHZOYihiLG15YykpKTtkPSR3bmQuTWF0aC5taW4oMSxlL24pO3Q9MDtpPTA7aWYoYi5iLmMubGVuZ3RoIT0wKXt1PUhOYyhCRChJa2IoYi5iLDApLDI5KSk7dD0wLjQqZCp1fWg9bmV3IEJpYihiLmIsMCk7d2hpbGUoaC5iPGguZC5nYygpKXtnPShzQ2IoaC5iPGguZC5nYygpKSxCRChoLmQuWGIoaC5jPWguYisrKSwyOSkpO2Y9S3EoZyxETmMpO2YmJnQ+MCYmKHQtPW4pO2hfYihnLHQpO2s9MDtmb3IobT1uZXcgb2xiKGcuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDEwKTtqPTA7Zm9yKHA9bmV3IFNyKHVyKFVfYihsKS5hLktjKCksbmV3IFNxKSk7UXIocCk7KXtvPUJEKFJyKHApLDE3KTtyPUEwYihvLmMpLmI7cz1BMGIoby5kKS5iO2lmKGc9PW8uZC5pLmMmJiFPWmIobykpe0xOYyhvLHQsMC40KmQqJHduZC5NYXRoLmFicyhyLXMpKTtpZihvLmMuaj09KFVjZCgpLFRjZCkpe3I9MDtzPTB9fWo9JHduZC5NYXRoLm1heChqLCR3bmQuTWF0aC5hYnMocy1yKSl9c3dpdGNoKGwuay5nKXtjYXNlIDA6Y2FzZSA0OmNhc2UgMTpjYXNlIDM6Y2FzZSA1Ok1OYyhhLGwsdCxxKTt9az0kd25kLk1hdGgubWF4KGssail9aWYoaC5iPGguZC5nYygpKXt1PUhOYygoc0NiKGguYjxoLmQuZ2MoKSksQkQoaC5kLlhiKGguYz1oLmIrKyksMjkpKSk7az0kd25kLk1hdGgubWF4KGssdSk7c0NiKGguYj4wKTtoLmEuWGIoaC5jPS0taC5iKX1pPTAuNCpkKms7IWYmJmguYjxoLmQuZ2MoKSYmKGkrPW4pO3QrPWcuYy5hK2l9YS5hLmEuJGIoKTtiLmYuYT10O1FkZChjKX1cbmZ1bmN0aW9uIGJpYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7az1uZXcgTHFiO2k9bmV3IEhwO2ZvcihkPW5ldyBvbGIoYS5hLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2I9QkQobWxiKGQpLDU3KTtqPXRnYyhiKTtpZihqKXtqcmIoay5mLGosYil9ZWxzZXtzPXVnYyhiKTtpZihzKXtmb3IoZj1uZXcgb2xiKHMuayk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDE3KTtSYyhpLGUsYil9fX19Zm9yKGM9bmV3IG9sYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksNTcpO2o9dGdjKGIpO2lmKGope2ZvcihoPW5ldyBTcih1cihVX2IoaikuYS5LYygpLG5ldyBTcSkpO1FyKGgpOyl7Zz1CRChScihoKSwxNyk7aWYoT1piKGcpKXtjb250aW51ZX1vPWcuYztyPWcuZDtpZigoVWNkKCksTGNkKS5IYyhnLmMuaikmJkxjZC5IYyhnLmQuaikpe2NvbnRpbnVlfXA9QkQoT2hiKGssZy5kLmkpLDU3KTtBRmIoREZiKENGYihFRmIoQkZiKG5ldyBGRmIsMCksMTAwKSxhLmNbYi5hLmRdKSxhLmNbcC5hLmRdKSk7aWYoby5qPT1UY2QmJmwxYigoejBiKCksdzBiLG8pKSl7Zm9yKG09QkQoUWMoaSxnKSwyMSkuS2MoKTttLk9iKCk7KXtsPUJEKG0uUGIoKSw1Nyk7aWYobC5kLmM8Yi5kLmMpe249YS5jW2wuYS5kXTtxPWEuY1tiLmEuZF07aWYobj09cSl7Y29udGludWV9QUZiKERGYihDRmIoRUZiKEJGYihuZXcgRkZiLDEpLDEwMCksbikscSkpfX19aWYoci5qPT16Y2QmJmcxYigoejBiKCksdTBiLHIpKSl7Zm9yKG09QkQoUWMoaSxnKSwyMSkuS2MoKTttLk9iKCk7KXtsPUJEKG0uUGIoKSw1Nyk7aWYobC5kLmM+Yi5kLmMpe249YS5jW2IuYS5kXTtxPWEuY1tsLmEuZF07aWYobj09cSl7Y29udGludWV9QUZiKERGYihDRmIoRUZiKEJGYihuZXcgRkZiLDEpLDEwMCksbikscSkpfX19fX19fVxuZnVuY3Rpb24gUUVkKGEpe0lFZCgpO3ZhciBiLGMsZCxlLGYsZyxoLGk7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtlPWhmYihhLHdmYigzNykpO2lmKGU8MCl7cmV0dXJuIGF9ZWxzZXtpPW5ldyBXZmIoYS5zdWJzdHIoMCxlKSk7Yj1LQyhTRCx3dGUsMjUsNCwxNSwxKTtoPTA7ZD0wO2ZvcihnPWEubGVuZ3RoO2U8ZztlKyspe0JDYihlLGEubGVuZ3RoKTtpZihhLmNoYXJDb2RlQXQoZSk9PTM3JiZhLmxlbmd0aD5lKzImJl9FZCgoQkNiKGUrMSxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGUrMSkpLHhFZCx5RWQpJiZfRWQoKEJDYihlKzIsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKzIpKSx4RWQseUVkKSl7Yz1kRmQoKEJDYihlKzEsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKzEpKSwoQkNiKGUrMixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGUrMikpKTtlKz0yO2lmKGQ+MCl7KGMmMTkyKT09MTI4PyhiW2grK109Yzw8MjQ+PjI0KTooZD0wKX1lbHNlIGlmKGM+PTEyOCl7aWYoKGMmMjI0KT09MTkyKXtiW2grK109Yzw8MjQ+PjI0O2Q9Mn1lbHNlIGlmKChjJjI0MCk9PTIyNCl7YltoKytdPWM8PDI0Pj4yNDtkPTN9ZWxzZSBpZigoYyYyNDgpPT0yNDApe2JbaCsrXT1jPDwyND4+MjQ7ZD00fX1pZihkPjApe2lmKGg9PWQpe3N3aXRjaChoKXtjYXNlIDI6e0tmYihpLCgoYlswXSYzMSk8PDZ8YlsxXSY2MykmYWplKTticmVha31jYXNlIDM6e0tmYihpLCgoYlswXSYxNSk8PDEyfChiWzFdJjYzKTw8NnxiWzJdJjYzKSZhamUpO2JyZWFrfX1oPTA7ZD0wfX1lbHNle2ZvcihmPTA7ZjxoOysrZil7S2ZiKGksYltmXSZhamUpfWg9MDtpLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoYyl9fWVsc2V7Zm9yKGY9MDtmPGg7KytmKXtLZmIoaSxiW2ZdJmFqZSl9aD0wO0tmYihpLChCQ2IoZSxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGUpKSl9fXJldHVybiBpLmF9fVxuZnVuY3Rpb24gd0EoYSxiLGMsZCxlKXt2YXIgZixnLGg7dUEoYSxiKTtnPWJbMF07Zj1iZmIoYy5jLDApO2g9LTE7aWYobkEoYykpe2lmKGQ+MCl7aWYoZytkPmEubGVuZ3RoKXtyZXR1cm4gZmFsc2V9aD1yQShhLnN1YnN0cigwLGcrZCksYil9ZWxzZXtoPXJBKGEsYil9fXN3aXRjaChmKXtjYXNlIDcxOmg9b0EoYSxnLE9DKEdDKFpJLDEpLG5pZSwyLDYsW3BqZSxxamVdKSxiKTtlLmU9aDtyZXR1cm4gdHJ1ZTtjYXNlIDc3OnJldHVybiB6QShhLGIsZSxoLGcpO2Nhc2UgNzY6cmV0dXJuIEJBKGEsYixlLGgsZyk7Y2FzZSA2OTpyZXR1cm4geEEoYSxiLGcsZSk7Y2FzZSA5OTpyZXR1cm4gQUEoYSxiLGcsZSk7Y2FzZSA5NzpoPW9BKGEsZyxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnQU0nLCdQTSddKSxiKTtlLmI9aDtyZXR1cm4gdHJ1ZTtjYXNlIDEyMTpyZXR1cm4gREEoYSxiLGcsaCxjLGUpO2Nhc2UgMTAwOmlmKGg8PTApe3JldHVybiBmYWxzZX1lLmM9aDtyZXR1cm4gdHJ1ZTtjYXNlIDgzOmlmKGg8MCl7cmV0dXJuIGZhbHNlfXJldHVybiB5QShoLGcsYlswXSxlKTtjYXNlIDEwNDpoPT0xMiYmKGg9MCk7Y2FzZSA3NTpjYXNlIDcyOmlmKGg8MCl7cmV0dXJuIGZhbHNlfWUuZj1oO2UuZz1mYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlIDEwNzppZihoPDApe3JldHVybiBmYWxzZX1lLmY9aDtlLmc9dHJ1ZTtyZXR1cm4gdHJ1ZTtjYXNlIDEwOTppZihoPDApe3JldHVybiBmYWxzZX1lLmo9aDtyZXR1cm4gdHJ1ZTtjYXNlIDExNTppZihoPDApe3JldHVybiBmYWxzZX1lLm49aDtyZXR1cm4gdHJ1ZTtjYXNlIDkwOmlmKGc8YS5sZW5ndGgmJihCQ2IoZyxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGcpPT05MCkpeysrYlswXTtlLm89MDtyZXR1cm4gdHJ1ZX1jYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gQ0EoYSxnLGIsZSk7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX1cbmZ1bmN0aW9uIHZLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdzttPUJEKEJEKFFjKGEucixiKSwyMSksODQpO2lmKGI9PShVY2QoKSx6Y2QpfHxiPT1UY2Qpe3pLYihhLGIpO3JldHVybn1mPWI9PUFjZD8odkxiKCksckxiKToodkxiKCksdUxiKTt1PWI9PUFjZD8oRUliKCksREliKTooRUliKCksQkliKTtjPUJEKE1wYihhLmIsYiksMTI0KTtkPWMuaTtlPWQuYyt3NmMoT0MoR0MoVUQsMSksVmplLDI1LDE1LFtjLm4uYixhLkMuYixhLmtdKSk7cj1kLmMrZC5iLXc2YyhPQyhHQyhVRCwxKSxWamUsMjUsMTUsW2Mubi5jLGEuQy5jLGEua10pKTtnPWRMYihpTGIoZiksYS50KTtzPWI9PUFjZD9RamU6UGplO2ZvcihsPW0uS2MoKTtsLk9iKCk7KXtqPUJEKGwuUGIoKSwxMTEpO2lmKCFqLmN8fGouYy5kLmMubGVuZ3RoPD0wKXtjb250aW51ZX1xPWouYi5yZigpO3A9ai5lO249ai5jO289bi5pO28uYj0oaT1uLm4sbi5lLmEraS5iK2kuYyk7by5hPShoPW4ubixuLmUuYitoLmQraC5hKTt5dGIodSxsbGUpO24uZj11OyRIYihuLChOSGIoKSxNSGIpKTtvLmM9cC5hLShvLmItcS5hKS8yO3Y9JHduZC5NYXRoLm1pbihlLHAuYSk7dz0kd25kLk1hdGgubWF4KHIscC5hK3EuYSk7by5jPHY/KG8uYz12KTpvLmMrby5iPncmJihvLmM9dy1vLmIpO0VrYihnLmQsbmV3IEJMYihvLGJMYihnLG8pKSk7cz1iPT1BY2Q/JHduZC5NYXRoLm1heChzLHAuYitqLmIucmYoKS5iKTokd25kLk1hdGgubWluKHMscC5iKX1zKz1iPT1BY2Q/YS50Oi1hLnQ7dD1jTGIoKGcuZT1zLGcpKTt0PjAmJihCRChNcGIoYS5iLGIpLDEyNCkuYS5iPXQpO2ZvcihrPW0uS2MoKTtrLk9iKCk7KXtqPUJEKGsuUGIoKSwxMTEpO2lmKCFqLmN8fGouYy5kLmMubGVuZ3RoPD0wKXtjb250aW51ZX1vPWouYy5pO28uYy09ai5lLmE7by5kLT1qLmUuYn19XG5mdW5jdGlvbiBTUGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47Yj1uZXcgTHFiO2ZvcihpPW5ldyBGeWQoYSk7aS5lIT1pLmkuZ2MoKTspe2g9QkQoRHlkKGkpLDMzKTtjPW5ldyBUcWI7UmhiKE9QYixoLGMpO249bmV3IGFRYjtlPUJEKEdBYihuZXcgWUFiKG51bGwsbmV3IEx1YihuZXcgU3IodXIoJHNkKGgpLmEuS2MoKSxuZXcgU3EpKSkpLFd5YihuLEJ5YihuZXcgZnpiLG5ldyBkemIsbmV3IEV6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsWyhGeWIoKSxEeWIpXSkpKSksODMpO1JQYihjLEJEKGUueGMoKEJjYigpLHRydWUpKSwxNCksbmV3IGNRYik7ZD1CRChHQWIoSkFiKEJEKGUueGMoZmFsc2UpLDE1KS5MYygpLG5ldyBlUWIpLEJ5YihuZXcgZnpiLG5ldyBkemIsbmV3IEV6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW0R5Yl0pKSksMTUpO2ZvcihnPWQuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSw3OSk7bT1rdGQoZik7aWYobSl7aj1CRChXZChpcmIoYi5mLG0pKSwyMSk7aWYoIWope2o9VVBiKG0pO2pyYihiLmYsbSxqKX15ZShjLGopfX1lPUJEKEdBYihuZXcgWUFiKG51bGwsbmV3IEx1YihuZXcgU3IodXIoX3NkKGgpLmEuS2MoKSxuZXcgU3EpKSkpLFd5YihuLEJ5YihuZXcgZnpiLG5ldyBkemIsbmV3IEV6YixPQyhHQyh4TCwxKSxLaWUsMTMyLDAsW0R5Yl0pKSkpLDgzKTtSUGIoYyxCRChlLnhjKHRydWUpLDE0KSxuZXcgZ1FiKTtkPUJEKEdBYihKQWIoQkQoZS54YyhmYWxzZSksMTUpLkxjKCksbmV3IGlRYiksQnliKG5ldyBmemIsbmV3IGR6YixuZXcgRXpiLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbRHliXSkpKSwxNSk7Zm9yKGw9ZC5LYygpO2wuT2IoKTspe2s9QkQobC5QYigpLDc5KTttPW10ZChrKTtpZihtKXtqPUJEKFdkKGlyYihiLmYsbSkpLDIxKTtpZighail7aj1VUGIobSk7anJiKGIuZixtLGopfXllKGMsail9fX19XG5mdW5jdGlvbiByaGIoYSxiKXtwaGIoKTt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2k9eWJiKGEsMCk8MDtpJiYoYT1KYmIoYSkpO2lmKHliYihhLDApPT0wKXtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAnMCc7Y2FzZSAxOnJldHVybiAkamU7Y2FzZSAyOnJldHVybiAnMC4wMCc7Y2FzZSAzOnJldHVybiAnMC4wMDAnO2Nhc2UgNDpyZXR1cm4gJzAuMDAwMCc7Y2FzZSA1OnJldHVybiAnMC4wMDAwMCc7Y2FzZSA2OnJldHVybiAnMC4wMDAwMDAnO2RlZmF1bHQ6bj1uZXcgVWZiO2I8MD8obi5hKz0nMEUrJyxuKToobi5hKz0nMEUnLG4pO24uYSs9Yj09UmllPycyMTQ3NDgzNjQ4JzonJystYjtyZXR1cm4gbi5hO319az0xODtsPUtDKFRELCRpZSwyNSxrKzEsMTUsMSk7Yz1rO3A9YTtkb3tqPXA7cD1BYmIocCwxMCk7bFstLWNdPVRiYih3YmIoNDgsUWJiKGosSWJiKHAsMTApKSkpJmFqZX13aGlsZSh5YmIocCwwKSE9MCk7ZT1RYmIoUWJiKFFiYihrLGMpLGIpLDEpO2lmKGI9PTApe2kmJihsWy0tY109NDUpO3JldHVybiB6ZmIobCxjLGstYyl9aWYoYj4wJiZ5YmIoZSwtNik+PTApe2lmKHliYihlLDApPj0wKXtmPWMrVGJiKGUpO2ZvcihoPWstMTtoPj1mO2gtLSl7bFtoKzFdPWxbaF19bFsrK2ZdPTQ2O2kmJihsWy0tY109NDUpO3JldHVybiB6ZmIobCxjLGstYysxKX1mb3IoZz0yO0diYihnLHdiYihKYmIoZSksMSkpO2crKyl7bFstLWNdPTQ4fWxbLS1jXT00NjtsWy0tY109NDg7aSYmKGxbLS1jXT00NSk7cmV0dXJuIHpmYihsLGMsay1jKX1vPWMrMTtkPWs7bT1uZXcgVmZiO2kmJihtLmErPSctJyxtKTtpZihkLW8+PTEpe0tmYihtLGxbY10pO20uYSs9Jy4nO20uYSs9emZiKGwsYysxLGstYy0xKX1lbHNle20uYSs9emZiKGwsYyxrLWMpfW0uYSs9J0UnO3liYihlLDApPjAmJihtLmErPScrJyxtKTttLmErPScnK1ViYihlKTtyZXR1cm4gbS5hfVxuZnVuY3Rpb24gaVFjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuO2EuZS5hLiRiKCk7YS5mLmEuJGIoKTthLmMuYz1LQyhTSSxVaGUsMSwwLDUsMSk7YS5pLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2EuZy5hLiRiKCk7aWYoYil7Zm9yKGc9bmV3IG9sYihiLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxMCk7Zm9yKGw9WV9iKGYsKFVjZCgpLHpjZCkpLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMTEpO1FxYihhLmUsayk7Zm9yKGU9bmV3IG9sYihrLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7aWYoT1piKGQpKXtjb250aW51ZX1Fa2IoYS5jLGQpO29RYyhhLGQpO2g9ZC5jLmkuazsoaD09KGowYigpLGgwYil8fGg9PWkwYnx8aD09ZTBifHxoPT1kMGIpJiZFa2IoYS5qLGQpO249ZC5kO209bi5pLmM7bT09Yz9RcWIoYS5mLG4pOm09PWI/UXFiKGEuZSxuKTpMa2IoYS5jLGQpfX19fWlmKGMpe2ZvcihnPW5ldyBvbGIoYy5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTApO2ZvcihqPW5ldyBvbGIoZi5qKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTEpO2ZvcihlPW5ldyBvbGIoaS5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMTcpO09aYihkKSYmUXFiKGEuZyxkKX19Zm9yKGw9WV9iKGYsKFVjZCgpLFRjZCkpLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMTEpO1FxYihhLmYsayk7Zm9yKGU9bmV3IG9sYihrLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7aWYoT1piKGQpKXtjb250aW51ZX1Fa2IoYS5jLGQpO29RYyhhLGQpO2g9ZC5jLmkuazsoaD09KGowYigpLGgwYil8fGg9PWkwYnx8aD09ZTBifHxoPT1kMGIpJiZFa2IoYS5qLGQpO249ZC5kO209bi5pLmM7bT09Yz9RcWIoYS5mLG4pOm09PWI/UXFiKGEuZSxuKTpMa2IoYS5jLGQpfX19fX1cbmZ1bmN0aW9uIEFmZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdztxPW5ldyBmN2MoYS5nLGEuZik7cD1yZmQoYSk7cC5hPSR3bmQuTWF0aC5tYXgocC5hLGIpO3AuYj0kd25kLk1hdGgubWF4KHAuYixjKTt3PXAuYS9xLmE7az1wLmIvcS5iO3U9cC5hLXEuYTtpPXAuYi1xLmI7aWYoZCl7Zz0hWG9kKGEpP0JEKGhrZChhLChZOWMoKSx6OGMpKSwxMDMpOkJEKGhrZChYb2QoYSksKFk5YygpLHo4YykpLDEwMyk7aD1QRChoa2QoYSwoWTljKCksdDljKSkpPT09UEQoKGRjZCgpLCRiZCkpO2ZvcihzPW5ldyBGeWQoKCFhLmMmJihhLmM9bmV3IGNVZChGMixhLDksOSkpLGEuYykpO3MuZSE9cy5pLmdjKCk7KXtyPUJEKER5ZChzKSwxMTgpO3Q9QkQoaGtkKHIsQTljKSw2MSk7aWYodD09KFVjZCgpLFNjZCkpe3Q9bGZkKHIsZyk7amtkKHIsQTljLHQpfXN3aXRjaCh0Lmcpe2Nhc2UgMTpofHxkbGQocixyLmkqdyk7YnJlYWs7Y2FzZSAyOmRsZChyLHIuaSt1KTtofHxlbGQocixyLmoqayk7YnJlYWs7Y2FzZSAzOmh8fGRsZChyLHIuaSp3KTtlbGQocixyLmoraSk7YnJlYWs7Y2FzZSA0Omh8fGVsZChyLHIuaiprKTt9fX1fa2QoYSxwLmEscC5iKTtpZihlKXtmb3IobT1uZXcgRnlkKCghYS5uJiYoYS5uPW5ldyBjVWQoRDIsYSwxLDcpKSxhLm4pKTttLmUhPW0uaS5nYygpOyl7bD1CRChEeWQobSksMTM3KTtuPWwuaStsLmcvMjtvPWwuaitsLmYvMjt2PW4vcS5hO2o9by9xLmI7aWYoditqPj0xKXtpZih2LWo+MCYmbz49MCl7ZGxkKGwsbC5pK3UpO2VsZChsLGwuaitpKmopfWVsc2UgaWYodi1qPDAmJm4+PTApe2RsZChsLGwuaSt1KnYpO2VsZChsLGwuaitpKX19fX1qa2QoYSwoWTljKCksWThjKSwodGRkKCksZj1CRChnZGIoSTEpLDkpLG5ldyB4cWIoZixCRChfQmIoZixmLmxlbmd0aCksOSksMCkpKTtyZXR1cm4gbmV3IGY3Yyh3LGspfVxuZnVuY3Rpb24gWWZkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87bj1Yb2QoYXRkKEJEKHF1ZCgoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKSwwKSw4MikpKTtvPVhvZChhdGQoQkQocXVkKCghYS5jJiYoYS5jPW5ldyB5NWQoejIsYSw1LDgpKSxhLmMpLDApLDgyKSkpO2w9bj09bztoPW5ldyBkN2M7Yj1CRChoa2QoYSwoWmFkKCksU2FkKSksNzQpO2lmKCEhYiYmYi5iPj0yKXtpZigoIWEuYSYmKGEuYT1uZXcgY1VkKEEyLGEsNiw2KSksYS5hKS5pPT0wKXtjPShGaGQoKSxlPW5ldyBybWQsZSk7d3RkKCghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLGMpfWVsc2UgaWYoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkuaT4xKXttPW5ldyBPeWQoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkpO3doaWxlKG0uZSE9bS5pLmdjKCkpe0V5ZChtKX19aWZkKGIsQkQocXVkKCghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLDApLDIwMikpfWlmKGwpe2ZvcihkPW5ldyBGeWQoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUJEKER5ZChkKSwyMDIpO2ZvcihqPW5ldyBGeWQoKCFjLmEmJihjLmE9bmV3IHhNZCh5MixjLDUpKSxjLmEpKTtqLmUhPWouaS5nYygpOyl7aT1CRChEeWQoaiksNDY5KTtoLmE9JHduZC5NYXRoLm1heChoLmEsaS5hKTtoLmI9JHduZC5NYXRoLm1heChoLmIsaS5iKX19fWZvcihnPW5ldyBGeWQoKCFhLm4mJihhLm49bmV3IGNVZChEMixhLDEsNykpLGEubikpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwxMzcpO2s9QkQoaGtkKGYsWWFkKSw4KTshIWsmJmJsZChmLGsuYSxrLmIpO2lmKGwpe2guYT0kd25kLk1hdGgubWF4KGguYSxmLmkrZi5nKTtoLmI9JHduZC5NYXRoLm1heChoLmIsZi5qK2YuZil9fXJldHVybiBofVxuZnVuY3Rpb24geU1jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjt0PWIuYy5sZW5ndGg7ZT1uZXcgVUxjKGEuYSxjLG51bGwsbnVsbCk7Qj1LQyhVRCxWamUsMjUsdCwxNSwxKTtwPUtDKFVELFZqZSwyNSx0LDE1LDEpO289S0MoVUQsVmplLDI1LHQsMTUsMSk7cT0wO2ZvcihoPTA7aDx0O2grKyl7cFtoXT1PaGU7b1toXT1SaWV9Zm9yKGk9MDtpPHQ7aSsrKXtkPSh0Q2IoaSxiLmMubGVuZ3RoKSxCRChiLmNbaV0sMTgwKSk7QltpXT1TTGMoZCk7QltxXT5CW2ldJiYocT1pKTtmb3IobD1uZXcgb2xiKGEuYS5iKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMjkpO2ZvcihzPW5ldyBvbGIoay5hKTtzLmE8cy5jLmMubGVuZ3RoOyl7cj1CRChtbGIocyksMTApO3c9RWRiKGQucFtyLnBdKStFZGIoZC5kW3IucF0pO3BbaV09JHduZC5NYXRoLm1pbihwW2ldLHcpO29baV09JHduZC5NYXRoLm1heChvW2ldLHcrci5vLmIpfX19QT1LQyhVRCxWamUsMjUsdCwxNSwxKTtmb3Ioaj0wO2o8dDtqKyspeyh0Q2IoaixiLmMubGVuZ3RoKSxCRChiLmNbal0sMTgwKSkubz09KGVNYygpLGNNYyk/KEFbal09cFtxXS1wW2pdKTooQVtqXT1vW3FdLW9bal0pfWY9S0MoVUQsVmplLDI1LHQsMTUsMSk7Zm9yKG49bmV3IG9sYihhLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspe209QkQobWxiKG4pLDI5KTtmb3Iodj1uZXcgb2xiKG0uYSk7di5hPHYuYy5jLmxlbmd0aDspe3U9QkQobWxiKHYpLDEwKTtmb3IoZz0wO2c8dDtnKyspe2ZbZ109RWRiKCh0Q2IoZyxiLmMubGVuZ3RoKSxCRChiLmNbZ10sMTgwKSkucFt1LnBdKStFZGIoKHRDYihnLGIuYy5sZW5ndGgpLEJEKGIuY1tnXSwxODApKS5kW3UucF0pK0FbZ119Zi5zb3J0KGRjYihZbGIucHJvdG90eXBlLnRlLFlsYixbXSkpO2UucFt1LnBdPShmWzFdK2ZbMl0pLzI7ZS5kW3UucF09MH19cmV0dXJuIGV9XG5mdW5jdGlvbiBHM2IoYSxiLGMpe3ZhciBkLGUsZixnLGg7ZD1iLmk7Zj1hLmkubztlPWEuaS5kO2g9YS5uO2c9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2gsYS5hXSkpO3N3aXRjaChhLmouZyl7Y2FzZSAxOl9IYihiLChFSWIoKSxCSWIpKTtkLmQ9LWUuZC1jLWQuYTtpZihCRChCRChJa2IoYi5kLDApLDE4MSkuV2UoKHd0YygpLFNzYykpLDI4NSk9PShyYmQoKSxuYmQpKXskSGIoYiwoTkhiKCksTUhiKSk7ZC5jPWcuYS1FZGIoRUQodk5iKGEsWXNjKSkpLWMtZC5ifWVsc2V7JEhiKGIsKE5IYigpLExIYikpO2QuYz1nLmErRWRiKEVEKHZOYihhLFlzYykpKStjfWJyZWFrO2Nhc2UgMjokSGIoYiwoTkhiKCksTEhiKSk7ZC5jPWYuYStlLmMrYztpZihCRChCRChJa2IoYi5kLDApLDE4MSkuV2UoKHd0YygpLFNzYykpLDI4NSk9PShyYmQoKSxuYmQpKXtfSGIoYiwoRUliKCksQkliKSk7ZC5kPWcuYi1FZGIoRUQodk5iKGEsWXNjKSkpLWMtZC5hfWVsc2V7X0hiKGIsKEVJYigpLERJYikpO2QuZD1nLmIrRWRiKEVEKHZOYihhLFlzYykpKStjfWJyZWFrO2Nhc2UgMzpfSGIoYiwoRUliKCksREliKSk7ZC5kPWYuYitlLmErYztpZihCRChCRChJa2IoYi5kLDApLDE4MSkuV2UoKHd0YygpLFNzYykpLDI4NSk9PShyYmQoKSxuYmQpKXskSGIoYiwoTkhiKCksTUhiKSk7ZC5jPWcuYS1FZGIoRUQodk5iKGEsWXNjKSkpLWMtZC5ifWVsc2V7JEhiKGIsKE5IYigpLExIYikpO2QuYz1nLmErRWRiKEVEKHZOYihhLFlzYykpKStjfWJyZWFrO2Nhc2UgNDokSGIoYiwoTkhiKCksTUhiKSk7ZC5jPS1lLmItYy1kLmI7aWYoQkQoQkQoSWtiKGIuZCwwKSwxODEpLldlKCh3dGMoKSxTc2MpKSwyODUpPT0ocmJkKCksbmJkKSl7X0hiKGIsKEVJYigpLEJJYikpO2QuZD1nLmItRWRiKEVEKHZOYihhLFlzYykpKS1jLWQuYX1lbHNle19IYihiLChFSWIoKSxESWIpKTtkLmQ9Zy5iK0VkYihFRCh2TmIoYSxZc2MpKSkrY319fVxuZnVuY3Rpb24gZGVkKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSTtuPTA7RD0wO2ZvcihpPW5ldyBvbGIoYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDMzKTt6ZmQoaCk7bj0kd25kLk1hdGgubWF4KG4saC5nKTtEKz1oLmcqaC5mfW89RC9hLmMubGVuZ3RoO0M9JGRkKGEsbyk7RCs9YS5jLmxlbmd0aCpDO249JHduZC5NYXRoLm1heChuLCR3bmQuTWF0aC5zcXJ0KEQqZykpK2MuYjtIPWMuYjtJPWMuZDttPTA7az1jLmIrYy5jO0I9bmV3IFBzYjtEc2IoQixtZWIoMCkpO3c9bmV3IFBzYjtqPW5ldyBCaWIoYSwwKTt3aGlsZShqLmI8ai5kLmdjKCkpe2g9KHNDYihqLmI8ai5kLmdjKCkpLEJEKGouZC5YYihqLmM9ai5iKyspLDMzKSk7Rz1oLmc7bD1oLmY7aWYoSCtHPm4pe2lmKGYpe0ZzYih3LG0pO0ZzYihCLG1lYihqLmItMSkpfUg9Yy5iO0krPW0rYjttPTA7az0kd25kLk1hdGgubWF4KGssYy5iK2MuYytHKX1kbGQoaCxIKTtlbGQoaCxJKTtrPSR3bmQuTWF0aC5tYXgoayxIK0crYy5jKTttPSR3bmQuTWF0aC5tYXgobSxsKTtIKz1HK2J9az0kd25kLk1hdGgubWF4KGssZCk7Rj1JK20rYy5hO2lmKEY8ZSl7bSs9ZS1GO0Y9ZX1pZihmKXtIPWMuYjtqPW5ldyBCaWIoYSwwKTtGc2IoQixtZWIoYS5jLmxlbmd0aCkpO0E9SnNiKEIsMCk7cj1CRChYc2IoQSksMTkpLmE7RnNiKHcsbSk7dj1Kc2IodywwKTt1PTA7d2hpbGUoai5iPGouZC5nYygpKXtpZihqLmI9PXIpe0g9Yy5iO3U9RWRiKEVEKFhzYih2KSkpO3I9QkQoWHNiKEEpLDE5KS5hfWg9KHNDYihqLmI8ai5kLmdjKCkpLEJEKGouZC5YYihqLmM9ai5iKyspLDMzKSk7cz1oLmY7YWxkKGgsdSk7cD11O2lmKGouYj09cil7cT1rLUgtYy5jO3Q9aC5nO2NsZChoLHEpO0ZmZChoLG5ldyBmN2MocSxwKSxuZXcgZjdjKHQscykpfUgrPWguZytifX1yZXR1cm4gbmV3IGY3YyhrLEYpfVxuZnVuY3Rpb24gX1liKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDO09kZChiLCdDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yJywxKTtjPUNjYihERCh2TmIoYSwoTnljKCksQnljKSkpKTtoPUJEKHZOYihhLCh3dGMoKSx6c2MpKSwyMjQpO2s9bmV3IFRxYjtmb3Iocj1oLmVjKCkuS2MoKTtyLk9iKCk7KXtxPUJEKHIuUGIoKSwxNyk7Zz1uZXcgVGtiKGguY2MocSkpO21tYigpO09rYihnLG5ldyBFWmIoYSkpO3Y9elpiKCh0Q2IoMCxnLmMubGVuZ3RoKSxCRChnLmNbMF0sMjQzKSkpO0E9QVpiKEJEKElrYihnLGcuYy5sZW5ndGgtMSksMjQzKSk7dD12Lmk7Zl9iKEEuaSx0KT8ocz10LmUpOihzPVFfYih0KSk7bD1hWmIocSxnKTtPc2IocS5hKTttPW51bGw7Zm9yKGY9bmV3IG9sYihnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMjQzKTtwPW5ldyBkN2M7WSRiKHAsZS5hLHMpO249ZS5iO2Q9bmV3IHM3YztvN2MoZCwwLG4uYSk7cTdjKGQscCk7dT1uZXcgZzdjKEEwYihuLmMpKTt3PW5ldyBnN2MoQTBiKG4uZCkpO1A2Yyh1LHApO1A2Yyh3LHApO2lmKG0pe2QuYj09MD8obz13KToobz0oc0NiKGQuYiE9MCksQkQoZC5hLmEuYyw4KSkpO0I9JHduZC5NYXRoLmFicyhtLmEtby5hKT5xbWU7Qz0kd25kLk1hdGguYWJzKG0uYi1vLmIpPnFtZTsoIWMmJkImJkN8fGMmJihCfHxDKSkmJkRzYihxLmEsdSl9eWUocS5hLGQpO2QuYj09MD8obT11KToobT0oc0NiKGQuYiE9MCksQkQoZC5jLmIuYyw4KSkpO2JaYihuLGwscCk7aWYoQVpiKGUpPT1BKXtpZihRX2IoQS5pKSE9ZS5hKXtwPW5ldyBkN2M7WSRiKHAsUV9iKEEuaSkscyl9eU5iKHEsdXRjLHApfWNaYihuLHEscyk7ay5hLnpjKG4sayl9UVpiKHEsdik7UlpiKHEsQSl9Zm9yKGo9ay5hLmVjKCkuS2MoKTtqLk9iKCk7KXtpPUJEKGouUGIoKSwxNyk7UVpiKGksbnVsbCk7UlpiKGksbnVsbCl9UWRkKGIpfVxuZnVuY3Rpb24gS1FiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7aWYoYS5nYygpPT0xKXtyZXR1cm4gQkQoYS5YYigwKSwyMzEpfWVsc2UgaWYoYS5nYygpPD0wKXtyZXR1cm4gbmV3IGtSYn1mb3IoZT1hLktjKCk7ZS5PYigpOyl7Yz1CRChlLlBiKCksMjMxKTtvPTA7az1PaGU7bD1PaGU7aT1SaWU7aj1SaWU7Zm9yKG49bmV3IG9sYihjLmUpO24uYTxuLmMuYy5sZW5ndGg7KXttPUJEKG1sYihuKSwxNDQpO28rPUJEKHZOYihtLCh3U2IoKSxvU2IpKSwxOSkuYTtrPSR3bmQuTWF0aC5taW4oayxtLmQuYS1tLmUuYS8yKTtsPSR3bmQuTWF0aC5taW4obCxtLmQuYi1tLmUuYi8yKTtpPSR3bmQuTWF0aC5tYXgoaSxtLmQuYSttLmUuYS8yKTtqPSR3bmQuTWF0aC5tYXgoaixtLmQuYittLmUuYi8yKX15TmIoYywod1NiKCksb1NiKSxtZWIobykpO3lOYihjLChIU2IoKSxFU2IpLG5ldyBmN2MoayxsKSk7eU5iKGMsRFNiLG5ldyBmN2MoaSxqKSl9bW1iKCk7YS5hZChuZXcgT1FiKTtwPW5ldyBrUmI7dE5iKHAsQkQoYS5YYigwKSw5NCkpO2g9MDtzPTA7Zm9yKGY9YS5LYygpO2YuT2IoKTspe2M9QkQoZi5QYigpLDIzMSk7cT1jN2MoUjZjKEJEKHZOYihjLChIU2IoKSxEU2IpKSw4KSksQkQodk5iKGMsRVNiKSw4KSk7aD0kd25kLk1hdGgubWF4KGgscS5hKTtzKz1xLmEqcS5ifWg9JHduZC5NYXRoLm1heChoLCR3bmQuTWF0aC5zcXJ0KHMpKkVkYihFRCh2TmIocCwod1NiKCksYlNiKSkpKSk7cj1FZGIoRUQodk5iKHAsdVNiKSkpO3Q9MDt1PTA7Zz0wO2I9cjtmb3IoZD1hLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjMxKTtxPWM3YyhSNmMoQkQodk5iKGMsKEhTYigpLERTYikpLDgpKSxCRCh2TmIoYyxFU2IpLDgpKTtpZih0K3EuYT5oKXt0PTA7dSs9ZytyO2c9MH1KUWIocCxjLHQsdSk7Yj0kd25kLk1hdGgubWF4KGIsdCtxLmEpO2c9JHduZC5NYXRoLm1heChnLHEuYik7dCs9cS5hK3J9cmV0dXJuIHB9XG5mdW5jdGlvbiBJb2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztrPW5ldyBzN2M7c3dpdGNoKGEuYS5nKXtjYXNlIDM6bT1CRCh2TmIoYi5lLCh3dGMoKSxydGMpKSwxNSk7bj1CRCh2TmIoYi5qLHJ0YyksMTUpO289QkQodk5iKGIuZixydGMpLDE1KTtjPUJEKHZOYihiLmUscHRjKSwxNSk7ZD1CRCh2TmIoYi5qLHB0YyksMTUpO2U9QkQodk5iKGIuZixwdGMpLDE1KTtnPW5ldyBSa2I7R2tiKGcsbSk7bi5KYyhuZXcgTG9jKTtHa2IoZyxKRChuLDE1Mik/a20oQkQobiwxNTIpKTpKRChuLDEzMSk/QkQobiwxMzEpLmE6SkQobiw1NCk/bmV3IG92KG4pOm5ldyBkdihuKSk7R2tiKGcsbyk7Zj1uZXcgUmtiO0drYihmLGMpO0drYihmLEpEKGQsMTUyKT9rbShCRChkLDE1MikpOkpEKGQsMTMxKT9CRChkLDEzMSkuYTpKRChkLDU0KT9uZXcgb3YoZCk6bmV3IGR2KGQpKTtHa2IoZixlKTt5TmIoYi5mLHJ0YyxnKTt5TmIoYi5mLHB0YyxmKTt5TmIoYi5mLHN0YyxiLmYpO3lOYihiLmUscnRjLG51bGwpO3lOYihiLmUscHRjLG51bGwpO3lOYihiLmoscnRjLG51bGwpO3lOYihiLmoscHRjLG51bGwpO2JyZWFrO2Nhc2UgMTp5ZShrLGIuZS5hKTtEc2IoayxiLmkubik7eWUoayxTdShiLmouYSkpO0RzYihrLGIuYS5uKTt5ZShrLGIuZi5hKTticmVhaztkZWZhdWx0OnllKGssYi5lLmEpO3llKGssU3UoYi5qLmEpKTt5ZShrLGIuZi5hKTt9T3NiKGIuZi5hKTt5ZShiLmYuYSxrKTtRWmIoYi5mLGIuZS5jKTtoPUJEKHZOYihiLmUsKE55YygpLGp4YykpLDc0KTtqPUJEKHZOYihiLmosanhjKSw3NCk7aT1CRCh2TmIoYi5mLGp4YyksNzQpO2lmKCEhaHx8ISFqfHwhIWkpe2w9bmV3IHM3YztHb2MobCxpKTtHb2MobCxqKTtHb2MobCxoKTt5TmIoYi5mLGp4YyxsKX1RWmIoYi5qLG51bGwpO1JaYihiLmosbnVsbCk7UVpiKGIuZSxudWxsKTtSWmIoYi5lLG51bGwpOyRfYihiLmEsbnVsbCk7JF9iKGIuaSxudWxsKTshIWIuZyYmSW9jKGEsYi5nKX1cbmZ1bmN0aW9uIGJkZShhKXthZGUoKTt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtpZihhPT1udWxsKXJldHVybiBudWxsO2Y9cmZiKGEpO289ZWRlKGYpO2lmKG8lNCE9MCl7cmV0dXJuIG51bGx9cD1vLzR8MDtpZihwPT0wKXJldHVybiBLQyhTRCx3dGUsMjUsMCwxNSwxKTtsPW51bGw7Yj0wO2M9MDtkPTA7ZT0wO2c9MDtoPTA7aT0wO2o9MDtuPTA7bT0wO2s9MDtsPUtDKFNELHd0ZSwyNSxwKjMsMTUsMSk7Zm9yKDtuPHAtMTtuKyspe2lmKCFkZGUoZz1mW2srK10pfHwhZGRlKGg9ZltrKytdKXx8IWRkZShpPWZbaysrXSl8fCFkZGUoaj1mW2srK10pKXJldHVybiBudWxsO2I9JGNlW2ddO2M9JGNlW2hdO2Q9JGNlW2ldO2U9JGNlW2pdO2xbbSsrXT0oYjw8MnxjPj40KTw8MjQ+PjI0O2xbbSsrXT0oKGMmMTUpPDw0fGQ+PjImMTUpPDwyND4+MjQ7bFttKytdPShkPDw2fGUpPDwyND4+MjR9aWYoIWRkZShnPWZbaysrXSl8fCFkZGUoaD1mW2srK10pKXtyZXR1cm4gbnVsbH1iPSRjZVtnXTtjPSRjZVtoXTtpPWZbaysrXTtqPWZbaysrXTtpZigkY2VbaV09PS0xfHwkY2Vbal09PS0xKXtpZihpPT02MSYmaj09NjEpe2lmKChjJjE1KSE9MClyZXR1cm4gbnVsbDtxPUtDKFNELHd0ZSwyNSxuKjMrMSwxNSwxKTskZmIobCwwLHEsMCxuKjMpO3FbbV09KGI8PDJ8Yz4+NCk8PDI0Pj4yNDtyZXR1cm4gcX1lbHNlIGlmKGkhPTYxJiZqPT02MSl7ZD0kY2VbaV07aWYoKGQmMykhPTApcmV0dXJuIG51bGw7cT1LQyhTRCx3dGUsMjUsbiozKzIsMTUsMSk7JGZiKGwsMCxxLDAsbiozKTtxW20rK109KGI8PDJ8Yz4+NCk8PDI0Pj4yNDtxW21dPSgoYyYxNSk8PDR8ZD4+MiYxNSk8PDI0Pj4yNDtyZXR1cm4gcX1lbHNle3JldHVybiBudWxsfX1lbHNle2Q9JGNlW2ldO2U9JGNlW2pdO2xbbSsrXT0oYjw8MnxjPj40KTw8MjQ+PjI0O2xbbSsrXT0oKGMmMTUpPDw0fGQ+PjImMTUpPDwyND4+MjQ7bFttKytdPShkPDw2fGUpPDwyND4+MjR9cmV0dXJuIGx9XG5mdW5jdGlvbiBTYmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2O09kZChiLEluZSwxKTtvPUJEKHZOYihhLChOeWMoKSxTd2MpKSwyMTgpO2ZvcihlPW5ldyBvbGIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjkpO2o9bF9iKGQuYSk7Zm9yKGc9aixoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07aWYoZi5rIT0oajBiKCksaTBiKSl7Y29udGludWV9aWYobz09KEFhZCgpLHlhZCkpe2ZvcihsPW5ldyBvbGIoZi5qKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMTEpO2suZS5jLmxlbmd0aD09MHx8VmJjKGspO2suZy5jLmxlbmd0aD09MHx8V2JjKGspfX1lbHNlIGlmKEpEKHZOYihmLCh3dGMoKSwkc2MpKSwxNykpe3E9QkQodk5iKGYsJHNjKSwxNyk7cj1CRChZX2IoZiwoVWNkKCksVGNkKSkuS2MoKS5QYigpLDExKTtzPUJEKFlfYihmLHpjZCkuS2MoKS5QYigpLDExKTt0PUJEKHZOYihyLCRzYyksMTEpO3U9QkQodk5iKHMsJHNjKSwxMSk7UVpiKHEsdSk7UlpiKHEsdCk7dj1uZXcgZzdjKHMuaS5uKTt2LmE9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW3UuaS5uLHUubix1LmFdKSkuYTtEc2IocS5hLHYpO3Y9bmV3IGc3YyhyLmkubik7di5hPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmE7RHNiKHEuYSx2KX1lbHNle2lmKGYuai5jLmxlbmd0aD49Mil7cD10cnVlO209bmV3IG9sYihmLmopO2M9QkQobWxiKG0pLDExKTtuPW51bGw7d2hpbGUobS5hPG0uYy5jLmxlbmd0aCl7bj1jO2M9QkQobWxiKG0pLDExKTtpZighcGIodk5iKG4sJHNjKSx2TmIoYywkc2MpKSl7cD1mYWxzZTticmVha319fWVsc2V7cD1mYWxzZX1mb3IobD1uZXcgb2xiKGYuaik7bC5hPGwuYy5jLmxlbmd0aDspe2s9QkQobWxiKGwpLDExKTtrLmUuYy5sZW5ndGg9PTB8fFRiYyhrLHApO2suZy5jLmxlbmd0aD09MHx8VWJjKGsscCl9fSRfYihmLG51bGwpfX1RZGQoYil9XG5mdW5jdGlvbiBLSmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCO3Q9YS5jWyh0Q2IoMCxiLmMubGVuZ3RoKSxCRChiLmNbMF0sMTcpKS5wXTtBPWEuY1sodENiKDEsYi5jLmxlbmd0aCksQkQoYi5jWzFdLDE3KSkucF07aWYodC5hLmUuZS10LmEuYS0odC5iLmUuZS10LmIuYSk9PTAmJkEuYS5lLmUtQS5hLmEtKEEuYi5lLmUtQS5iLmEpPT0wKXtyZXR1cm4gZmFsc2V9cj10LmIuZS5mO2lmKCFKRChyLDEwKSl7cmV0dXJuIGZhbHNlfXE9QkQociwxMCk7dj1hLmlbcS5wXTt3PSFxLmM/LTE6SmtiKHEuYy5hLHEsMCk7Zj1QamU7aWYodz4wKXtlPUJEKElrYihxLmMuYSx3LTEpLDEwKTtnPWEuaVtlLnBdO0I9JHduZC5NYXRoLmNlaWwoakJjKGEubixlLHEpKTtmPXYuYS5lLXEuZC5kLShnLmEuZStlLm8uYitlLmQuYSktQn1qPVBqZTtpZih3PHEuYy5hLmMubGVuZ3RoLTEpe2k9QkQoSWtiKHEuYy5hLHcrMSksMTApO2s9YS5pW2kucF07Qj0kd25kLk1hdGguY2VpbChqQmMoYS5uLGkscSkpO2o9ay5hLmUtaS5kLmQtKHYuYS5lK3Euby5iK3EuZC5hKS1CfWlmKGMmJihJeSgpLE15KEpxZSksJHduZC5NYXRoLmFicyhmLWopPD1KcWV8fGY9PWp8fGlzTmFOKGYpJiZpc05hTihqKSkpe3JldHVybiB0cnVlfWQ9Z0tjKHQuYSk7aD0tZ0tjKHQuYik7bD0tZ0tjKEEuYSk7cz1nS2MoQS5iKTtwPXQuYS5lLmUtdC5hLmEtKHQuYi5lLmUtdC5iLmEpPjAmJkEuYS5lLmUtQS5hLmEtKEEuYi5lLmUtQS5iLmEpPDA7bz10LmEuZS5lLXQuYS5hLSh0LmIuZS5lLXQuYi5hKTwwJiZBLmEuZS5lLUEuYS5hLShBLmIuZS5lLUEuYi5hKT4wO249dC5hLmUuZSt0LmIuYTxBLmIuZS5lK0EuYS5hO209dC5hLmUuZSt0LmIuYT5BLmIuZS5lK0EuYS5hO3U9MDshcCYmIW8mJihtP2YrbD4wPyh1PWwpOmotZD4wJiYodT1kKTpuJiYoZitoPjA/KHU9aCk6ai1zPjAmJih1PXMpKSk7di5hLmUrPXU7di5iJiYodi5kLmUrPXUpO3JldHVybiBmYWxzZX1cbmZ1bmN0aW9uIFhHYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07ZD1uZXcgSjZjKGIucWYoKS5hLGIucWYoKS5iLGIucmYoKS5hLGIucmYoKS5iKTtlPW5ldyBJNmM7aWYoYS5jKXtmb3IoZz1uZXcgb2xiKGIud2YoKSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDE4MSk7ZS5jPWYucWYoKS5hK2IucWYoKS5hO2UuZD1mLnFmKCkuYitiLnFmKCkuYjtlLmI9Zi5yZigpLmE7ZS5hPWYucmYoKS5iO0g2YyhkLGUpfX1mb3Ioaj1uZXcgb2xiKGIuQ2YoKSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDgzOCk7az1pLnFmKCkuYStiLnFmKCkuYTtsPWkucWYoKS5iK2IucWYoKS5iO2lmKGEuZSl7ZS5jPWs7ZS5kPWw7ZS5iPWkucmYoKS5hO2UuYT1pLnJmKCkuYjtINmMoZCxlKX1pZihhLmQpe2ZvcihnPW5ldyBvbGIoaS53ZigpKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTgxKTtlLmM9Zi5xZigpLmEraztlLmQ9Zi5xZigpLmIrbDtlLmI9Zi5yZigpLmE7ZS5hPWYucmYoKS5iO0g2YyhkLGUpfX1pZihhLmIpe209bmV3IGY3YygtYywtYyk7aWYoQkQoYi5XZSgoWTljKCkseDljKSksMTc0KS5IYygocmNkKCkscGNkKSkpe2ZvcihnPW5ldyBvbGIoaS53ZigpKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoZyksMTgxKTttLmErPWYucmYoKS5hK2M7bS5iKz1mLnJmKCkuYitjfX1tLmE9JHduZC5NYXRoLm1heChtLmEsMCk7bS5iPSR3bmQuTWF0aC5tYXgobS5iLDApO1ZHYihkLGkuQmYoKSxpLnpmKCksYixpLG0sYyl9fWEuYiYmVkdiKGQsYi5CZigpLGIuemYoKSxiLG51bGwsbnVsbCxjKTtoPW5ldyBLX2IoYi5BZigpKTtoLmQ9JHduZC5NYXRoLm1heCgwLGIucWYoKS5iLWQuZCk7aC5hPSR3bmQuTWF0aC5tYXgoMCxkLmQrZC5hLShiLnFmKCkuYitiLnJmKCkuYikpO2guYj0kd25kLk1hdGgubWF4KDAsYi5xZigpLmEtZC5jKTtoLmM9JHduZC5NYXRoLm1heCgwLGQuYytkLmItKGIucWYoKS5hK2IucmYoKS5hKSk7Yi5FZihoKX1cbmZ1bmN0aW9uIHd6KCl7dmFyIGE9WydcXFxcdTAwMDAnLCdcXFxcdTAwMDEnLCdcXFxcdTAwMDInLCdcXFxcdTAwMDMnLCdcXFxcdTAwMDQnLCdcXFxcdTAwMDUnLCdcXFxcdTAwMDYnLCdcXFxcdTAwMDcnLCdcXFxcYicsJ1xcXFx0JywnXFxcXG4nLCdcXFxcdTAwMEInLCdcXFxcZicsJ1xcXFxyJywnXFxcXHUwMDBFJywnXFxcXHUwMDBGJywnXFxcXHUwMDEwJywnXFxcXHUwMDExJywnXFxcXHUwMDEyJywnXFxcXHUwMDEzJywnXFxcXHUwMDE0JywnXFxcXHUwMDE1JywnXFxcXHUwMDE2JywnXFxcXHUwMDE3JywnXFxcXHUwMDE4JywnXFxcXHUwMDE5JywnXFxcXHUwMDFBJywnXFxcXHUwMDFCJywnXFxcXHUwMDFDJywnXFxcXHUwMDFEJywnXFxcXHUwMDFFJywnXFxcXHUwMDFGJ107YVszNF09J1xcXFxcIic7YVs5Ml09J1xcXFxcXFxcJzthWzE3M109J1xcXFx1MDBhZCc7YVsxNTM2XT0nXFxcXHUwNjAwJzthWzE1MzddPSdcXFxcdTA2MDEnO2FbMTUzOF09J1xcXFx1MDYwMic7YVsxNTM5XT0nXFxcXHUwNjAzJzthWzE3NTddPSdcXFxcdTA2ZGQnO2FbMTgwN109J1xcXFx1MDcwZic7YVs2MDY4XT0nXFxcXHUxN2I0JzthWzYwNjldPSdcXFxcdTE3YjUnO2FbODIwM109J1xcXFx1MjAwYic7YVs4MjA0XT0nXFxcXHUyMDBjJzthWzgyMDVdPSdcXFxcdTIwMGQnO2FbODIwNl09J1xcXFx1MjAwZSc7YVs4MjA3XT0nXFxcXHUyMDBmJzthWzgyMzJdPSdcXFxcdTIwMjgnO2FbODIzM109J1xcXFx1MjAyOSc7YVs4MjM0XT0nXFxcXHUyMDJhJzthWzgyMzVdPSdcXFxcdTIwMmInO2FbODIzNl09J1xcXFx1MjAyYyc7YVs4MjM3XT0nXFxcXHUyMDJkJzthWzgyMzhdPSdcXFxcdTIwMmUnO2FbODI4OF09J1xcXFx1MjA2MCc7YVs4Mjg5XT0nXFxcXHUyMDYxJzthWzgyOTBdPSdcXFxcdTIwNjInO2FbODI5MV09J1xcXFx1MjA2Myc7YVs4MjkyXT0nXFxcXHUyMDY0JzthWzgyOThdPSdcXFxcdTIwNmEnO2FbODI5OV09J1xcXFx1MjA2Yic7YVs4MzAwXT0nXFxcXHUyMDZjJzthWzgzMDFdPSdcXFxcdTIwNmQnO2FbODMwMl09J1xcXFx1MjA2ZSc7YVs4MzAzXT0nXFxcXHUyMDZmJzthWzY1Mjc5XT0nXFxcXHVmZWZmJzthWzY1NTI5XT0nXFxcXHVmZmY5JzthWzY1NTMwXT0nXFxcXHVmZmZhJzthWzY1NTMxXT0nXFxcXHVmZmZiJztyZXR1cm4gYX1cbmZ1bmN0aW9uIHBpZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07aT1uZXcgUmtiO2w9Yi5sZW5ndGg7Zz1BVWQoYyk7Zm9yKGo9MDtqPGw7KytqKXtrPWlmYihiLHdmYig2MSksaik7ZD0kaGQoZyxiLnN1YnN0cihqLGstaikpO2U9S0pkKGQpO2Y9ZS5BaigpLk5oKCk7c3dpdGNoKGJmYihiLCsraykpe2Nhc2UgMzk6e2g9Z2ZiKGIsMzksKytrKTtFa2IoaSxuZXcga0dkKGQsUGlkKGIuc3Vic3RyKGssaC1rKSxmLGUpKSk7aj1oKzE7YnJlYWt9Y2FzZSAzNDp7aD1nZmIoYiwzNCwrK2spO0VrYihpLG5ldyBrR2QoZCxQaWQoYi5zdWJzdHIoayxoLWspLGYsZSkpKTtqPWgrMTticmVha31jYXNlIDkxOnttPW5ldyBSa2I7RWtiKGksbmV3IGtHZChkLG0pKTtuOmZvcig7Oyl7c3dpdGNoKGJmYihiLCsraykpe2Nhc2UgMzk6e2g9Z2ZiKGIsMzksKytrKTtFa2IobSxQaWQoYi5zdWJzdHIoayxoLWspLGYsZSkpO2s9aCsxO2JyZWFrfWNhc2UgMzQ6e2g9Z2ZiKGIsMzQsKytrKTtFa2IobSxQaWQoYi5zdWJzdHIoayxoLWspLGYsZSkpO2s9aCsxO2JyZWFrfWNhc2UgMTEwOnsrK2s7aWYoYi5pbmRleE9mKCd1bGwnLGspPT1rKXttLmNbbS5jLmxlbmd0aF09bnVsbH1lbHNle3Rocm93IHZiYihuZXcgaHooa3RlKSl9ays9MzticmVha319aWYoazxsKXtzd2l0Y2goQkNiKGssYi5sZW5ndGgpLGIuY2hhckNvZGVBdChrKSl7Y2FzZSA0NDp7YnJlYWt9Y2FzZSA5Mzp7YnJlYWsgbn1kZWZhdWx0Ont0aHJvdyB2YmIobmV3IGh6KCdFeHBlY3RpbmcgLCBvciBdJykpfX19ZWxzZXticmVha319aj1rKzE7YnJlYWt9Y2FzZSAxMTA6eysraztpZihiLmluZGV4T2YoJ3VsbCcsayk9PWspe0VrYihpLG5ldyBrR2QoZCxudWxsKSl9ZWxzZXt0aHJvdyB2YmIobmV3IGh6KGt0ZSkpfWo9ayszO2JyZWFrfX1pZihqPGwpe0JDYihqLGIubGVuZ3RoKTtpZihiLmNoYXJDb2RlQXQoaikhPTQ0KXt0aHJvdyB2YmIobmV3IGh6KCdFeHBlY3RpbmcgLCcpKX19ZWxzZXticmVha319cmV0dXJuIHFpZChhLGksYyl9XG5mdW5jdGlvbiBBS2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2o9QkQoQkQoUWMoYS5yLGIpLDIxKSw4NCk7Zz1iS2IoYSxiKTtjPWEudS5IYygocmNkKCksbGNkKSk7Zm9yKGk9ai5LYygpO2kuT2IoKTspe2g9QkQoaS5QYigpLDExMSk7aWYoIWguY3x8aC5jLmQuYy5sZW5ndGg8PTApe2NvbnRpbnVlfW09aC5iLnJmKCk7az1oLmM7bD1rLmk7bC5iPShmPWsubixrLmUuYStmLmIrZi5jKTtsLmE9KGU9ay5uLGsuZS5iK2UuZCtlLmEpO3N3aXRjaChiLmcpe2Nhc2UgMTppZihoLmEpe2wuYz0obS5hLWwuYikvMjskSGIoaywoTkhiKCksS0hiKSl9ZWxzZSBpZihnfHxjKXtsLmM9LWwuYi1hLnM7JEhiKGssKE5IYigpLE1IYikpfWVsc2V7bC5jPW0uYSthLnM7JEhiKGssKE5IYigpLExIYikpfWwuZD0tbC5hLWEudDtfSGIoaywoRUliKCksQkliKSk7YnJlYWs7Y2FzZSAzOmlmKGguYSl7bC5jPShtLmEtbC5iKS8yOyRIYihrLChOSGIoKSxLSGIpKX1lbHNlIGlmKGd8fGMpe2wuYz0tbC5iLWEuczskSGIoaywoTkhiKCksTUhiKSl9ZWxzZXtsLmM9bS5hK2EuczskSGIoaywoTkhiKCksTEhiKSl9bC5kPW0uYithLnQ7X0hiKGssKEVJYigpLERJYikpO2JyZWFrO2Nhc2UgMjppZihoLmEpe2Q9YS52P2wuYTpCRChJa2Ioay5kLDApLDE4MSkucmYoKS5iO2wuZD0obS5iLWQpLzI7X0hiKGssKEVJYigpLENJYikpfWVsc2UgaWYoZ3x8Yyl7bC5kPS1sLmEtYS50O19IYihrLChFSWIoKSxCSWIpKX1lbHNle2wuZD1tLmIrYS50O19IYihrLChFSWIoKSxESWIpKX1sLmM9bS5hK2EuczskSGIoaywoTkhiKCksTEhiKSk7YnJlYWs7Y2FzZSA0OmlmKGguYSl7ZD1hLnY/bC5hOkJEKElrYihrLmQsMCksMTgxKS5yZigpLmI7bC5kPShtLmItZCkvMjtfSGIoaywoRUliKCksQ0liKSl9ZWxzZSBpZihnfHxjKXtsLmQ9LWwuYS1hLnQ7X0hiKGssKEVJYigpLEJJYikpfWVsc2V7bC5kPW0uYithLnQ7X0hiKGssKEVJYigpLERJYikpfWwuYz0tbC5iLWEuczskSGIoaywoTkhiKCksTUhiKSk7fWc9ZmFsc2V9fVxuZnVuY3Rpb24gS2ZlKGEsYil7d2ZlKCk7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aWYoVmhiKFplZSk9PTApe2w9S0MobGJiLG5pZSwxMTcsX2VlLmxlbmd0aCwwLDEpO2ZvcihnPTA7ZzxsLmxlbmd0aDtnKyspe2xbZ109KCsrdmZlLG5ldyAkZmUoNCkpfWQ9bmV3IElmYjtmb3IoZj0wO2Y8WWVlLmxlbmd0aDtmKyspe2s9KCsrdmZlLG5ldyAkZmUoNCkpO2lmKGY8ODQpe2g9ZioyO249KEJDYihoLHd4ZS5sZW5ndGgpLHd4ZS5jaGFyQ29kZUF0KGgpKTttPShCQ2IoaCsxLHd4ZS5sZW5ndGgpLHd4ZS5jaGFyQ29kZUF0KGgrMSkpO1VmZShrLG4sbSl9ZWxzZXtoPShmLTg0KSoyO1VmZShrLGFmZVtoXSxhZmVbaCsxXSl9aT1ZZWVbZl07ZGZiKGksJ1NwZWNpYWxzJykmJlVmZShrLDY1NTIwLDY1NTMzKTtpZihkZmIoaSx1eGUpKXtVZmUoayw5ODMwNDAsMTA0ODU3Myk7VWZlKGssMTA0ODU3NiwxMTE0MTA5KX1TaGIoWmVlLGksayk7U2hiKCRlZSxpLF9mZShrKSk7aj1kLmEubGVuZ3RoOzA8aj8oZC5hPWQuYS5zdWJzdHIoMCwwKSk6MD5qJiYoZC5hKz15ZmIoS0MoVEQsJGllLDI1LC1qLDE1LDEpKSk7ZC5hKz0nSXMnO2lmKGhmYihpLHdmYigzMikpPj0wKXtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKXtCQ2IoZSxpLmxlbmd0aCk7aS5jaGFyQ29kZUF0KGUpIT0zMiYmQWZiKGQsKEJDYihlLGkubGVuZ3RoKSxpLmNoYXJDb2RlQXQoZSkpKX19ZWxzZXtkLmErPScnK2l9T2ZlKGQuYSxpLHRydWUpfU9mZSh2eGUsJ0NuJyxmYWxzZSk7T2ZlKHh4ZSwnQ24nLHRydWUpO2M9KCsrdmZlLG5ldyAkZmUoNCkpO1VmZShjLDAsbHhlKTtTaGIoWmVlLCdBTEwnLGMpO1NoYigkZWUsJ0FMTCcsX2ZlKGMpKTshYmZlJiYoYmZlPW5ldyBMcWIpO1NoYihiZmUsdnhlLHZ4ZSk7IWJmZSYmKGJmZT1uZXcgTHFiKTtTaGIoYmZlLHh4ZSx4eGUpOyFiZmUmJihiZmU9bmV3IExxYik7U2hiKGJmZSwnQUxMJywnQUxMJyl9bz1iP0JEKFBoYihaZWUsYSksMTM2KTpCRChQaGIoJGVlLGEpLDEzNik7cmV0dXJuIG99XG5mdW5jdGlvbiBjM2IoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzO209ZmFsc2U7bD1mYWxzZTtpZihmY2QoQkQodk5iKGQsKE55YygpLFZ4YykpLDk4KSkpe2c9ZmFsc2U7aD1mYWxzZTt0OmZvcihvPW5ldyBvbGIoZC5qKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1CRChtbGIobyksMTEpO2ZvcihxPXVsKHBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFtuZXcgSjBiKG4pLG5ldyBSMGIobildKSkpO1FyKHEpOyl7cD1CRChScihxKSwxMSk7aWYoIUNjYihERCh2TmIocC5pLHB3YykpKSl7aWYobi5qPT0oVWNkKCksQWNkKSl7Zz10cnVlO2JyZWFrIHR9aWYobi5qPT1SY2Qpe2g9dHJ1ZTticmVhayB0fX19fW09aCYmIWc7bD1nJiYhaH1pZighbSYmIWwmJmQuYi5jLmxlbmd0aCE9MCl7az0wO2ZvcihqPW5ldyBvbGIoZC5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksNzApO2srPWkubi5iK2kuby5iLzJ9ay89ZC5iLmMubGVuZ3RoO3M9az49ZC5vLmIvMn1lbHNle3M9IWx9aWYocyl7cj1CRCh2TmIoZCwod3RjKCksdnRjKSksMTUpO2lmKCFyKXtmPW5ldyBSa2I7eU5iKGQsdnRjLGYpfWVsc2UgaWYobSl7Zj1yfWVsc2V7ZT1CRCh2TmIoZCx0c2MpLDE1KTtpZighZSl7Zj1uZXcgUmtiO3lOYihkLHRzYyxmKX1lbHNle3IuZ2MoKTw9ZS5nYygpPyhmPXIpOihmPWUpfX19ZWxzZXtlPUJEKHZOYihkLCh3dGMoKSx0c2MpKSwxNSk7aWYoIWUpe2Y9bmV3IFJrYjt5TmIoZCx0c2MsZil9ZWxzZSBpZihsKXtmPWV9ZWxzZXtyPUJEKHZOYihkLHZ0YyksMTUpO2lmKCFyKXtmPW5ldyBSa2I7eU5iKGQsdnRjLGYpfWVsc2V7ZS5nYygpPD1yLmdjKCk/KGY9ZSk6KGY9cil9fX1mLkZjKGEpO3lOYihhLCh3dGMoKSx2c2MpLGMpO2lmKGIuZD09Yyl7UlpiKGIsbnVsbCk7Yy5lLmMubGVuZ3RoK2MuZy5jLmxlbmd0aD09MCYmRjBiKGMsbnVsbCk7ZDNiKGMpfWVsc2V7UVpiKGIsbnVsbCk7Yy5lLmMubGVuZ3RoK2MuZy5jLmxlbmd0aD09MCYmRjBiKGMsbnVsbCl9T3NiKGIuYSl9XG5mdW5jdGlvbiBhb2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSDtzPW5ldyBCaWIoYS5iLDApO2s9Yi5LYygpO289MDtqPUJEKGsuUGIoKSwxOSkuYTt2PTA7Yz1uZXcgVHFiO0E9bmV3IHpzYjt3aGlsZShzLmI8cy5kLmdjKCkpe3I9KHNDYihzLmI8cy5kLmdjKCkpLEJEKHMuZC5YYihzLmM9cy5iKyspLDI5KSk7Zm9yKHU9bmV3IG9sYihyLmEpO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUJEKG1sYih1KSwxMCk7Zm9yKG49bmV3IFNyKHVyKFVfYih0KS5hLktjKCksbmV3IFNxKSk7UXIobik7KXtsPUJEKFJyKG4pLDE3KTtBLmEuemMobCxBKX1mb3IobT1uZXcgU3IodXIoUl9iKHQpLmEuS2MoKSxuZXcgU3EpKTtRcihtKTspe2w9QkQoUnIobSksMTcpO0EuYS5CYyhsKSE9bnVsbH19aWYobysxPT1qKXtlPW5ldyBIMWIoYSk7QWliKHMsZSk7Zj1uZXcgSDFiKGEpO0FpYihzLGYpO2ZvcihDPUEuYS5lYygpLktjKCk7Qy5PYigpOyl7Qj1CRChDLlBiKCksMTcpO2lmKCFjLmEuX2IoQikpeysrdjtjLmEuemMoQixjKX1nPW5ldyBiMGIoYSk7eU5iKGcsKE55YygpLFZ4YyksKGRjZCgpLGFjZCkpOyRfYihnLGUpO19fYihnLChqMGIoKSxkMGIpKTtwPW5ldyBIMGI7RjBiKHAsZyk7RzBiKHAsKFVjZCgpLFRjZCkpO0Q9bmV3IEgwYjtGMGIoRCxnKTtHMGIoRCx6Y2QpO2Q9bmV3IGIwYihhKTt5TmIoZCxWeGMsYWNkKTskX2IoZCxmKTtfX2IoZCxkMGIpO3E9bmV3IEgwYjtGMGIocSxkKTtHMGIocSxUY2QpO0Y9bmV3IEgwYjtGMGIoRixkKTtHMGIoRix6Y2QpO3c9bmV3IFVaYjtRWmIodyxCLmMpO1JaYih3LHApO0g9bmV3IFVaYjtRWmIoSCxEKTtSWmIoSCxxKTtRWmIoQixGKTtoPW5ldyBnb2MoZyxkLHcsSCxCKTt5TmIoZywod3RjKCksdXNjKSxoKTt5TmIoZCx1c2MsaCk7Rz13LmMuaTtpZihHLms9PWQwYil7aT1CRCh2TmIoRyx1c2MpLDMwNSk7aS5kPWg7aC5nPWl9fWlmKGsuT2IoKSl7aj1CRChrLlBiKCksMTkpLmF9ZWxzZXticmVha319KytvfXJldHVybiBtZWIodil9XG5mdW5jdGlvbiBUMWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2w9MDtmb3IoZT1uZXcgRnlkKCghYi5hJiYoYi5hPW5ldyBjVWQoRTIsYiwxMCwxMSkpLGIuYSkpO2UuZSE9ZS5pLmdjKCk7KXtkPUJEKER5ZChlKSwzMyk7aWYoIUNjYihERChoa2QoZCwoTnljKCksSnhjKSkpKSl7aWYoKFBEKGhrZChiLHl3YykpIT09UEQoKHRBYygpLHJBYykpfHxQRChoa2QoYixKd2MpKT09PVBEKChtcWMoKSxscWMpKXx8UEQoaGtkKGIsSndjKSk9PT1QRCgobXFjKCksanFjKSl8fENjYihERChoa2QoYixBd2MpKSl8fFBEKGhrZChiLHR3YykpIT09UEQoKFJYYigpLFFYYikpKSYmIUNjYihERChoa2QoZCx4d2MpKSkpe2prZChkLCh3dGMoKSxac2MpLG1lYihsKSk7KytsfSQxYihhLGQsYyl9fWw9MDtmb3Ioaj1uZXcgRnlkKCghYi5iJiYoYi5iPW5ldyBjVWQoQjIsYiwxMiwzKSksYi5iKSk7ai5lIT1qLmkuZ2MoKTspe2g9QkQoRHlkKGopLDc5KTtpZihQRChoa2QoYiwoTnljKCkseXdjKSkpIT09UEQoKHRBYygpLHJBYykpfHxQRChoa2QoYixKd2MpKT09PVBEKChtcWMoKSxscWMpKXx8UEQoaGtkKGIsSndjKSk9PT1QRCgobXFjKCksanFjKSl8fENjYihERChoa2QoYixBd2MpKSl8fFBEKGhrZChiLHR3YykpIT09UEQoKFJYYigpLFFYYikpKXtqa2QoaCwod3RjKCksWnNjKSxtZWIobCkpOysrbH1vPWp0ZChoKTtwPWx0ZChoKTtrPUNjYihERChoa2QobyxmeGMpKSk7bj0hQ2NiKEREKGhrZChoLEp4YykpKTttPWsmJlFsZChoKSYmQ2NiKEREKGhrZChoLGd4YykpKTtmPVhvZChvKT09YiYmWG9kKG8pPT1Yb2QocCk7Zz0oWG9kKG8pPT1iJiZwPT1iKV4oWG9kKHApPT1iJiZvPT1iKTtuJiYhbSYmKGd8fGYpJiZYMWIoYSxoLGIsYyl9aWYoWG9kKGIpKXtmb3IoaT1uZXcgRnlkKFdvZChYb2QoYikpKTtpLmUhPWkuaS5nYygpOyl7aD1CRChEeWQoaSksNzkpO289anRkKGgpO2lmKG89PWImJlFsZChoKSl7bT1DY2IoREQoaGtkKG8sKE55YygpLGZ4YykpKSkmJkNjYihERChoa2QoaCxneGMpKSk7bSYmWDFiKGEsaCxiLGMpfX19fVxuZnVuY3Rpb24gZ0RjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSTtPZGQoYywnTWluV2lkdGggbGF5ZXJpbmcnLDEpO249Yi5iO0E9Yi5hO0k9QkQodk5iKGIsKE55YygpLG94YykpLDE5KS5hO2g9QkQodk5iKGIscHhjKSwxOSkuYTthLmI9RWRiKEVEKHZOYihiLGx5YykpKTthLmQ9UGplO2Zvcih1PW5ldyBvbGIoQSk7dS5hPHUuYy5jLmxlbmd0aDspe3M9QkQobWxiKHUpLDEwKTtpZihzLmshPShqMGIoKSxoMGIpKXtjb250aW51ZX1EPXMuby5iO2EuZD0kd25kLk1hdGgubWluKGEuZCxEKX1hLmQ9JHduZC5NYXRoLm1heCgxLGEuZCk7Qj1BLmMubGVuZ3RoO2EuYz1LQyhXRCxvamUsMjUsQiwxNSwxKTthLmY9S0MoV0Qsb2plLDI1LEIsMTUsMSk7YS5lPUtDKFVELFZqZSwyNSxCLDE1LDEpO2o9MDthLmE9MDtmb3Iodj1uZXcgb2xiKEEpO3YuYTx2LmMuYy5sZW5ndGg7KXtzPUJEKG1sYih2KSwxMCk7cy5wPWorKzthLmNbcy5wXT1lRGMoUl9iKHMpKTthLmZbcy5wXT1lRGMoVV9iKHMpKTthLmVbcy5wXT1zLm8uYi9hLmQ7YS5hKz1hLmVbcy5wXX1hLmIvPWEuZDthLmEvPUI7dz1mRGMoQSk7T2tiKEEsdG1iKG5ldyBtRGMoYSkpKTtwPVBqZTtvPU9oZTtnPW51bGw7SD1JO0c9STtmPWg7ZT1oO2lmKEk8MCl7SD1CRChiRGMuYS56ZCgpLDE5KS5hO0c9QkQoYkRjLmIuemQoKSwxOSkuYX1pZihoPDApe2Y9QkQoYURjLmEuemQoKSwxOSkuYTtlPUJEKGFEYy5iLnpkKCksMTkpLmF9Zm9yKEY9SDtGPD1HO0YrKyl7Zm9yKGQ9ZjtkPD1lO2QrKyl7Qz1kRGMoYSxGLGQsQSx3KTtyPUVkYihFRChDLmEpKTttPUJEKEMuYiwxNSk7cT1tLmdjKCk7aWYocjxwfHxyPT1wJiZxPG8pe3A9cjtvPXE7Zz1tfX19Zm9yKGw9Zy5LYygpO2wuT2IoKTspe2s9QkQobC5QYigpLDE1KTtpPW5ldyBIMWIoYik7Zm9yKHQ9ay5LYygpO3QuT2IoKTspe3M9QkQodC5QYigpLDEwKTskX2IocyxpKX1uLmNbbi5jLmxlbmd0aF09aX1zbWIobik7QS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtRZGQoYyl9XG5mdW5jdGlvbiBJNmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDthLmI9YjthLmE9QkQodk5iKGIsKE55YygpLGJ4YykpLDE5KS5hO2EuYz1CRCh2TmIoYixkeGMpLDE5KS5hO2EuYz09MCYmKGEuYz1PaGUpO3E9bmV3IEJpYihiLmIsMCk7d2hpbGUocS5iPHEuZC5nYygpKXtwPShzQ2IocS5iPHEuZC5nYygpKSxCRChxLmQuWGIocS5jPXEuYisrKSwyOSkpO2g9bmV3IFJrYjtrPS0xO3U9LTE7Zm9yKHQ9bmV3IG9sYihwLmEpO3QuYTx0LmMuYy5sZW5ndGg7KXtzPUJEKG1sYih0KSwxMCk7aWYoc3IoKEQ2YigpLG5ldyBTcih1cihPX2IocykuYS5LYygpLG5ldyBTcSkpKSk+PWEuYSl7ZD1FNmIoYSxzKTtrPSR3bmQuTWF0aC5tYXgoayxkLmIpO3U9JHduZC5NYXRoLm1heCh1LGQuZCk7RWtiKGgsbmV3IHZnZChzLGQpKX19Qj1uZXcgUmtiO2ZvcihqPTA7ajxrOysrail7RGtiKEIsMCwoc0NiKHEuYj4wKSxxLmEuWGIocS5jPS0tcS5iKSxDPW5ldyBIMWIoYS5iKSxBaWIocSxDKSxzQ2IocS5iPHEuZC5nYygpKSxxLmQuWGIocS5jPXEuYisrKSxDKSl9Zm9yKGc9bmV3IG9sYihoKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZyksNDYpO249QkQoZS5iLDU3MSkuYTtpZighbil7Y29udGludWV9Zm9yKG09bmV3IG9sYihuKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1CRChtbGIobSksMTApO0g2YihhLGwsQjZiLEIpfX1jPW5ldyBSa2I7Zm9yKGk9MDtpPHU7KytpKXtFa2IoYywoRD1uZXcgSDFiKGEuYiksQWliKHEsRCksRCkpfWZvcihmPW5ldyBvbGIoaCk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9QkQobWxiKGYpLDQ2KTtBPUJEKGUuYiw1NzEpLmM7aWYoIUEpe2NvbnRpbnVlfWZvcih3PW5ldyBvbGIoQSk7dy5hPHcuYy5jLmxlbmd0aDspe3Y9QkQobWxiKHcpLDEwKTtINmIoYSx2LEM2YixjKX19fXI9bmV3IEJpYihiLmIsMCk7d2hpbGUoci5iPHIuZC5nYygpKXtvPShzQ2Ioci5iPHIuZC5nYygpKSxCRChyLmQuWGIoci5jPXIuYisrKSwyOSkpO28uYS5jLmxlbmd0aD09MCYmdWliKHIpfX1cbmZ1bmN0aW9uIHVRYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRztPZGQoYywnU3BsaW5lIGVkZ2Ugcm91dGluZycsMSk7aWYoYi5iLmMubGVuZ3RoPT0wKXtiLmYuYT0wO1FkZChjKTtyZXR1cm59cz1FZGIoRUQodk5iKGIsKE55YygpLHd5YykpKSk7aD1FZGIoRUQodk5iKGIscHljKSkpO2c9RWRiKEVEKHZOYihiLG15YykpKTtyPUJEKHZOYihiLFh3YyksMzM2KTtCPXI9PSh0QmMoKSxzQmMpO0E9RWRiKEVEKHZOYihiLFl3YykpKTthLmQ9YjthLmouYz1LQyhTSSxVaGUsMSwwLDUsMSk7YS5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO1VoYihhLmspO2k9QkQoSWtiKGIuYiwwKSwyOSk7az1LcShpLmEsKEZOYygpLEROYykpO289QkQoSWtiKGIuYixiLmIuYy5sZW5ndGgtMSksMjkpO2w9S3Eoby5hLEROYyk7cD1uZXcgb2xiKGIuYik7cT1udWxsO0c9MDtkb3t0PXAuYTxwLmMuYy5sZW5ndGg/QkQobWxiKHApLDI5KTpudWxsO2lRYyhhLHEsdCk7bFFjKGEpO0M9VnRiKHVBYihQQWIoSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuaSwxNikpLG5ldyBMUWMpLG5ldyBOUWMpKSk7Rj0wO3U9RzttPSFxfHxrJiZxPT1pO249IXR8fGwmJnQ9PW87aWYoQz4wKXtqPTA7ISFxJiYoais9aCk7ais9KEMtMSkqZzshIXQmJihqKz1oKTtCJiYhIXQmJihqPSR3bmQuTWF0aC5tYXgoaixqUWModCxnLHMsQSkpKTtpZihqPHMmJiFtJiYhbil7Rj0ocy1qKS8yO2o9c311Kz1qfWVsc2UgIW0mJiFuJiYodSs9cyk7ISF0JiZoX2IodCx1KTtmb3Iodz1uZXcgb2xiKGEuaSk7dy5hPHcuYy5jLmxlbmd0aDspe3Y9QkQobWxiKHcpLDEyOCk7di5hLmM9Rzt2LmEuYj11LUc7di5GPUY7di5wPSFxfUdrYihhLmEsYS5pKTtHPXU7ISF0JiYoRys9dC5jLmEpO3E9dDttPW59d2hpbGUodCk7Zm9yKGU9bmV3IG9sYihhLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxNyk7Zj1wUWMoYSxkKTt5TmIoZCwod3RjKCkscHRjKSxmKTtEPXJRYyhhLGQpO3lOYihkLHJ0YyxEKX1iLmYuYT1HO2EuZD1udWxsO1FkZChjKX1cbmZ1bmN0aW9uIFl4ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O3A9YS5pIT0wO3Q9ZmFsc2U7cj1udWxsO2lmKG9pZChhLmUpKXtrPWIuZ2MoKTtpZihrPjApe209azwxMDA/bnVsbDpuZXcgSXhkKGspO2o9bmV3IEF1ZChiKTtvPWouZztyPUtDKFdELG9qZSwyNSxrLDE1LDEpO2Q9MDt1PW5ldyB6dWQoayk7Zm9yKGU9MDtlPGEuaTsrK2Upe2g9YS5nW2VdO249aDt2OmZvcihzPTA7czwyOysrcyl7Zm9yKGk9azstLWk+PTA7KXtpZihuIT1udWxsP3BiKG4sb1tpXSk6UEQobik9PT1QRChvW2ldKSl7aWYoci5sZW5ndGg8PWQpe3E9cjtyPUtDKFdELG9qZSwyNSwyKnIubGVuZ3RoLDE1LDEpOyRmYihxLDAsciwwLGQpfXJbZCsrXT1lO3d0ZCh1LG9baV0pO2JyZWFrIHZ9fW49bjtpZihQRChuKT09PVBEKGgpKXticmVha319fWo9dTtvPXUuZztrPWQ7aWYoZD5yLmxlbmd0aCl7cT1yO3I9S0MoV0Qsb2plLDI1LGQsMTUsMSk7JGZiKHEsMCxyLDAsZCl9aWYoZD4wKXt0PXRydWU7Zm9yKGY9MDtmPGQ7KytmKXtuPW9bZl07bT1rM2QoYSxCRChuLDcyKSxtKX1mb3IoZz1kOy0tZz49MDspe3R1ZChhLHJbZ10pfWlmKGQhPWspe2ZvcihlPWs7LS1lPj1kOyl7dHVkKGosZSl9cT1yO3I9S0MoV0Qsb2plLDI1LGQsMTUsMSk7JGZiKHEsMCxyLDAsZCl9Yj1qfX19ZWxzZXtiPUN0ZChhLGIpO2ZvcihlPWEuaTstLWU+PTA7KXtpZihiLkhjKGEuZ1tlXSkpe3R1ZChhLGUpO3Q9dHJ1ZX19fWlmKHQpe2lmKHIhPW51bGwpe2M9Yi5nYygpO2w9Yz09MT9GTGQoYSw0LGIuS2MoKS5QYigpLG51bGwsclswXSxwKTpGTGQoYSw2LGIscixyWzBdLHApO209YzwxMDA/bnVsbDpuZXcgSXhkKGMpO2ZvcihlPWIuS2MoKTtlLk9iKCk7KXtuPWUuUGIoKTttPVEyZChhLEJEKG4sNzIpLG0pfWlmKCFtKXtVaGQoYS5lLGwpfWVsc2V7bS5FaShsKTttLkZpKCl9fWVsc2V7bT1WeGQoYi5nYygpKTtmb3IoZT1iLktjKCk7ZS5PYigpOyl7bj1lLlBiKCk7bT1RMmQoYSxCRChuLDcyKSxtKX0hIW0mJm0uRmkoKX1yZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19XG5mdW5jdGlvbiBmWWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7Yz1uZXcgbVliKGIpO2MuYXx8JFhiKGIpO2o9WlhiKGIpO2k9bmV3IEhwO3E9bmV3IEFZYjtmb3IocD1uZXcgb2xiKGIuYSk7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDEwKTtmb3IoZT1uZXcgU3IodXIoVV9iKG8pLmEuS2MoKSxuZXcgU3EpKTtRcihlKTspe2Q9QkQoUnIoZSksMTcpO2lmKGQuYy5pLms9PShqMGIoKSxlMGIpfHxkLmQuaS5rPT1lMGIpe2s9ZVliKGEsZCxqLHEpO1JjKGksY1liKGsuZCksay5hKX19fWc9bmV3IFJrYjtmb3IodD1CRCh2TmIoYy5jLCh3dGMoKSxFc2MpKSwyMSkuS2MoKTt0Lk9iKCk7KXtzPUJEKHQuUGIoKSw2MSk7bj1xLmNbcy5nXTttPXEuYltzLmddO2g9cS5hW3MuZ107Zj1udWxsO3I9bnVsbDtzd2l0Y2gocy5nKXtjYXNlIDQ6Zj1uZXcgSjZjKGEuZC5hLG4sai5iLmEtYS5kLmEsbS1uKTtyPW5ldyBKNmMoYS5kLmEsbixoLG0tbik7aVliKGosbmV3IGY3YyhmLmMrZi5iLGYuZCkpO2lZYihqLG5ldyBmN2MoZi5jK2YuYixmLmQrZi5hKSk7YnJlYWs7Y2FzZSAyOmY9bmV3IEo2YyhqLmEuYSxuLGEuYy5hLWouYS5hLG0tbik7cj1uZXcgSjZjKGEuYy5hLWgsbixoLG0tbik7aVliKGosbmV3IGY3YyhmLmMsZi5kKSk7aVliKGosbmV3IGY3YyhmLmMsZi5kK2YuYSkpO2JyZWFrO2Nhc2UgMTpmPW5ldyBKNmMobixhLmQuYixtLW4sai5iLmItYS5kLmIpO3I9bmV3IEo2YyhuLGEuZC5iLG0tbixoKTtpWWIoaixuZXcgZjdjKGYuYyxmLmQrZi5hKSk7aVliKGosbmV3IGY3YyhmLmMrZi5iLGYuZCtmLmEpKTticmVhaztjYXNlIDM6Zj1uZXcgSjZjKG4sai5hLmIsbS1uLGEuYy5iLWouYS5iKTtyPW5ldyBKNmMobixhLmMuYi1oLG0tbixoKTtpWWIoaixuZXcgZjdjKGYuYyxmLmQpKTtpWWIoaixuZXcgZjdjKGYuYytmLmIsZi5kKSk7fWlmKGYpe2w9bmV3IHZZYjtsLmQ9cztsLmI9ZjtsLmM9cjtsLmE9RHgoQkQoUWMoaSxjWWIocykpLDIxKSk7Zy5jW2cuYy5sZW5ndGhdPWx9fUdrYihjLmIsZyk7Yy5kPUJXYihKV2IoaikpO3JldHVybiBjfVxuZnVuY3Rpb24gcE1jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtpZihjLnBbYi5wXSE9bnVsbCl7cmV0dXJufWg9dHJ1ZTtjLnBbYi5wXT0wO2c9YjtwPWMubz09KGVNYygpLGNNYyk/UWplOlBqZTtkb3tlPWEuYi5lW2cucF07Zj1nLmMuYS5jLmxlbmd0aDtpZihjLm89PWNNYyYmZT4wfHxjLm89PWRNYyYmZTxmLTEpe2k9bnVsbDtqPW51bGw7Yy5vPT1kTWM/KGk9QkQoSWtiKGcuYy5hLGUrMSksMTApKTooaT1CRChJa2IoZy5jLmEsZS0xKSwxMCkpO2o9Yy5nW2kucF07cE1jKGEsaixjKTtwPWEuZS5iZyhwLGIsZyk7Yy5qW2IucF09PWImJihjLmpbYi5wXT1jLmpbai5wXSk7aWYoYy5qW2IucF09PWMualtqLnBdKXtvPWpCYyhhLmQsZyxpKTtpZihjLm89PWRNYyl7ZD1FZGIoYy5wW2IucF0pO2w9RWRiKGMucFtqLnBdKStFZGIoYy5kW2kucF0pLWkuZC5kLW8tZy5kLmEtZy5vLmItRWRiKGMuZFtnLnBdKTtpZihoKXtoPWZhbHNlO2MucFtiLnBdPSR3bmQuTWF0aC5taW4obCxwKX1lbHNle2MucFtiLnBdPSR3bmQuTWF0aC5taW4oZCwkd25kLk1hdGgubWluKGwscCkpfX1lbHNle2Q9RWRiKGMucFtiLnBdKTtsPUVkYihjLnBbai5wXSkrRWRiKGMuZFtpLnBdKStpLm8uYitpLmQuYStvK2cuZC5kLUVkYihjLmRbZy5wXSk7aWYoaCl7aD1mYWxzZTtjLnBbYi5wXT0kd25kLk1hdGgubWF4KGwscCl9ZWxzZXtjLnBbYi5wXT0kd25kLk1hdGgubWF4KGQsJHduZC5NYXRoLm1heChsLHApKX19fWVsc2V7bz1FZGIoRUQodk5iKGEuYSwoTnljKCksdnljKSkpKTtuPW5NYyhhLGMualtiLnBdKTtrPW5NYyhhLGMualtqLnBdKTtpZihjLm89PWRNYyl7bT1FZGIoYy5wW2IucF0pK0VkYihjLmRbZy5wXSkrZy5vLmIrZy5kLmErby0oRWRiKGMucFtqLnBdKStFZGIoYy5kW2kucF0pLWkuZC5kKTt0TWMobixrLG0pfWVsc2V7bT1FZGIoYy5wW2IucF0pK0VkYihjLmRbZy5wXSktZy5kLmQtRWRiKGMucFtqLnBdKS1FZGIoYy5kW2kucF0pLWkuby5iLWkuZC5hLW87dE1jKG4sayxtKX19fWVsc2V7cD1hLmUuYmcocCxiLGcpfWc9Yy5hW2cucF19d2hpbGUoZyE9Yik7U01jKGEuZSxiKX1cbmZ1bmN0aW9uIF9xZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRzt0PWI7cz1uZXcgSHA7dT1uZXcgSHA7az1ZcGQodCxOdGUpO2Q9bmV3IG9yZChhLGMscyx1KTtxcWQoZC5hLGQuYixkLmMsZC5kLGspO2k9KEE9cy5pLCFBPyhzLmk9bmV3IHpmKHMscy5jKSk6QSk7Zm9yKEM9aS5LYygpO0MuT2IoKTspe0I9QkQoQy5QYigpLDIwMik7ZT1CRChRYyhzLEIpLDIxKTtmb3IocD1lLktjKCk7cC5PYigpOyl7bz1wLlBiKCk7dj1CRChvbyhhLmQsbyksMjAyKTtpZih2KXtoPSghQi5lJiYoQi5lPW5ldyB5NWQoQTIsQiwxMCw5KSksQi5lKTt3dGQoaCx2KX1lbHNle2c9X3BkKHQsVnRlKTttPV90ZStvK2F1ZStnO249bSskdGU7dGhyb3cgdmJiKG5ldyBjcWQobikpfX19aj0odz11LmksIXc/KHUuaT1uZXcgemYodSx1LmMpKTp3KTtmb3IoRj1qLktjKCk7Ri5PYigpOyl7RD1CRChGLlBiKCksMjAyKTtmPUJEKFFjKHUsRCksMjEpO2ZvcihyPWYuS2MoKTtyLk9iKCk7KXtxPXIuUGIoKTt2PUJEKG9vKGEuZCxxKSwyMDIpO2lmKHYpe2w9KCFELmcmJihELmc9bmV3IHk1ZChBMixELDksMTApKSxELmcpO3d0ZChsLHYpfWVsc2V7Zz1fcGQodCxWdGUpO209X3RlK3ErYXVlK2c7bj1tKyR0ZTt0aHJvdyB2YmIobmV3IGNxZChuKSl9fX0hYy5iJiYoYy5iPW5ldyB5NWQoejIsYyw0LDcpKTtpZihjLmIuaSE9MCYmKCFjLmMmJihjLmM9bmV3IHk1ZCh6MixjLDUsOCkpLGMuYy5pIT0wKSYmKCFjLmImJihjLmI9bmV3IHk1ZCh6MixjLDQsNykpLGMuYi5pPD0xJiYoIWMuYyYmKGMuYz1uZXcgeTVkKHoyLGMsNSw4KSksYy5jLmk8PTEpKSYmKCFjLmEmJihjLmE9bmV3IGNVZChBMixjLDYsNikpLGMuYSkuaT09MSl7Rz1CRChxdWQoKCFjLmEmJihjLmE9bmV3IGNVZChBMixjLDYsNikpLGMuYSksMCksMjAyKTtpZighZG1kKEcpJiYhZW1kKEcpKXtrbWQoRyxCRChxdWQoKCFjLmImJihjLmI9bmV3IHk1ZCh6MixjLDQsNykpLGMuYiksMCksODIpKTtsbWQoRyxCRChxdWQoKCFjLmMmJihjLmM9bmV3IHk1ZCh6MixjLDUsOCkpLGMuYyksMCksODIpKX19fVxuZnVuY3Rpb24gcUpjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7Zm9yKHQ9YS5hLHU9MCx2PXQubGVuZ3RoO3U8djsrK3Upe3M9dFt1XTtqPU9oZTtrPU9oZTtmb3Iobz1uZXcgb2xiKHMuZSk7by5hPG8uYy5jLmxlbmd0aDspe209QkQobWxiKG8pLDEwKTtnPSFtLmM/LTE6SmtiKG0uYy5hLG0sMCk7aWYoZz4wKXtsPUJEKElrYihtLmMuYSxnLTEpLDEwKTtCPWpCYyhhLmIsbSxsKTtxPW0ubi5iLW0uZC5kLShsLm4uYitsLm8uYitsLmQuYStCKX1lbHNle3E9bS5uLmItbS5kLmR9aj0kd25kLk1hdGgubWluKHEsaik7aWYoZzxtLmMuYS5jLmxlbmd0aC0xKXtsPUJEKElrYihtLmMuYSxnKzEpLDEwKTtCPWpCYyhhLmIsbSxsKTtyPWwubi5iLWwuZC5kLShtLm4uYittLm8uYittLmQuYStCKX1lbHNle3I9MiptLm4uYn1rPSR3bmQuTWF0aC5taW4ocixrKX1pPU9oZTtmPWZhbHNlO2U9QkQoSWtiKHMuZSwwKSwxMCk7Zm9yKEQ9bmV3IG9sYihlLmopO0QuYTxELmMuYy5sZW5ndGg7KXtDPUJEKG1sYihEKSwxMSk7cD1lLm4uYitDLm4uYitDLmEuYjtmb3IoZD1uZXcgb2xiKEMuZSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE3KTt3PWMuYztiPXcuaS5uLmIrdy5uLmIrdy5hLmItcDtpZigkd25kLk1hdGguYWJzKGIpPCR3bmQuTWF0aC5hYnMoaSkmJiR3bmQuTWF0aC5hYnMoYik8KGI8MD9qOmspKXtpPWI7Zj10cnVlfX19aD1CRChJa2Iocy5lLHMuZS5jLmxlbmd0aC0xKSwxMCk7Zm9yKEE9bmV3IG9sYihoLmopO0EuYTxBLmMuYy5sZW5ndGg7KXt3PUJEKG1sYihBKSwxMSk7cD1oLm4uYit3Lm4uYit3LmEuYjtmb3IoZD1uZXcgb2xiKHcuZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9QkQobWxiKGQpLDE3KTtDPWMuZDtiPUMuaS5uLmIrQy5uLmIrQy5hLmItcDtpZigkd25kLk1hdGguYWJzKGIpPCR3bmQuTWF0aC5hYnMoaSkmJiR3bmQuTWF0aC5hYnMoYik8KGI8MD9qOmspKXtpPWI7Zj10cnVlfX19aWYoZiYmaSE9MCl7Zm9yKG49bmV3IG9sYihzLmUpO24uYTxuLmMuYy5sZW5ndGg7KXttPUJEKG1sYihuKSwxMCk7bS5uLmIrPWl9fX19XG5mdW5jdGlvbiB5bmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoTWhiKGEuYSxiKSl7aWYoUnFiKEJEKE9oYihhLmEsYiksNTMpLGMpKXtyZXR1cm4gMX19ZWxzZXtSaGIoYS5hLGIsbmV3IFRxYil9aWYoTWhiKGEuYSxjKSl7aWYoUnFiKEJEKE9oYihhLmEsYyksNTMpLGIpKXtyZXR1cm4gLTF9fWVsc2V7UmhiKGEuYSxjLG5ldyBUcWIpfWlmKE1oYihhLmUsYikpe2lmKFJxYihCRChPaGIoYS5lLGIpLDUzKSxjKSl7cmV0dXJuIC0xfX1lbHNle1JoYihhLmUsYixuZXcgVHFiKX1pZihNaGIoYS5lLGMpKXtpZihScWIoQkQoT2hiKGEuYSxjKSw1MyksYikpe3JldHVybiAxfX1lbHNle1JoYihhLmUsYyxuZXcgVHFiKX1pZihhLmM9PSh0QWMoKSxzQWMpfHwhd05iKGIsKHd0YygpLFpzYykpfHwhd05iKGMsKHd0YygpLFpzYykpKXtpPUJEKEV0YihEdGIoS0FiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihiLmosMTYpKSxuZXcgSG5jKSksbmV3IEpuYykpLDExKTtrPUJEKEV0YihEdGIoS0FiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1YihjLmosMTYpKSxuZXcgTG5jKSksbmV3IE5uYykpLDExKTtpZighIWkmJiEhayl7aD1pLmk7aj1rLmk7aWYoISFoJiZoPT1qKXtmb3IobT1uZXcgb2xiKGguaik7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDExKTtpZihsPT1pKXtBbmMoYSxjLGIpO3JldHVybiAtMX1lbHNlIGlmKGw9PWspe0FuYyhhLGIsYyk7cmV0dXJuIDF9fXJldHVybiBiZWIoem5jKGEsYiksem5jKGEsYykpfWZvcihvPWEuZCxwPTAscT1vLmxlbmd0aDtwPHE7KytwKXtuPW9bcF07aWYobj09aCl7QW5jKGEsYyxiKTtyZXR1cm4gLTF9ZWxzZSBpZihuPT1qKXtBbmMoYSxiLGMpO3JldHVybiAxfX19aWYoIXdOYihiLCh3dGMoKSxac2MpKXx8IXdOYihjLFpzYykpe2U9em5jKGEsYik7Zz16bmMoYSxjKTtlPmc/QW5jKGEsYixjKTpBbmMoYSxjLGIpO3JldHVybiBlPGc/LTE6ZT5nPzE6MH19ZD1CRCh2TmIoYiwod3RjKCksWnNjKSksMTkpLmE7Zj1CRCh2TmIoYyxac2MpLDE5KS5hO2Q+Zj9BbmMoYSxiLGMpOkFuYyhhLGMsYik7cmV0dXJuIGQ8Zj8tMTpkPmY/MTowfVxuZnVuY3Rpb24gdTJjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscztpZihDY2IoREQoaGtkKGIsKFk5YygpLGQ5YykpKSkpe3JldHVybiBtbWIoKSxtbWIoKSxqbWJ9aj0oIWIuYSYmKGIuYT1uZXcgY1VkKEUyLGIsMTAsMTEpKSxiLmEpLmkhPTA7bD1zMmMoYik7az0hbC5kYygpO2lmKGp8fGspe2U9QkQoaGtkKGIsRjljKSwxNDkpO2lmKCFlKXt0aHJvdyB2YmIobmV3IHkyYygnUmVzb2x2ZWQgYWxnb3JpdGhtIGlzIG5vdCBzZXQ7IGFwcGx5IGEgTGF5b3V0QWxnb3JpdGhtUmVzb2x2ZXIgYmVmb3JlIGNvbXB1dGluZyBsYXlvdXQuJykpfXM9RDNjKGUsKENzZCgpLHlzZCkpO3EyYyhiKTtpZighaiYmayYmIXMpe3JldHVybiBtbWIoKSxtbWIoKSxqbWJ9aT1uZXcgUmtiO2lmKFBEKGhrZChiLEo4YykpPT09UEQoKGhiZCgpLGViZCkpJiYoRDNjKGUsdnNkKXx8RDNjKGUsdXNkKSkpe249cDJjKGEsYik7bz1uZXcgUHNiO3llKG8sKCFiLmEmJihiLmE9bmV3IGNVZChFMixiLDEwLDExKSksYi5hKSk7d2hpbGUoby5iIT0wKXttPUJEKG8uYj09MD9udWxsOihzQ2Ioby5iIT0wKSxOc2IobyxvLmEuYSkpLDMzKTtxMmMobSk7cj1QRChoa2QobSxKOGMpKT09PVBEKGdiZCk7aWYocnx8aWtkKG0sbzhjKSYmIUMzYyhlLGhrZChtLEY5YykpKXtoPXUyYyhhLG0sYyxkKTtHa2IoaSxoKTtqa2QobSxKOGMsZ2JkKTtoZmQobSl9ZWxzZXt5ZShvLCghbS5hJiYobS5hPW5ldyBjVWQoRTIsbSwxMCwxMSkpLG0uYSkpfX19ZWxzZXtuPSghYi5hJiYoYi5hPW5ldyBjVWQoRTIsYiwxMCwxMSkpLGIuYSkuaTtmb3IoZz1uZXcgRnlkKCghYi5hJiYoYi5hPW5ldyBjVWQoRTIsYiwxMCwxMSkpLGIuYSkpO2cuZSE9Zy5pLmdjKCk7KXtmPUJEKER5ZChnKSwzMyk7aD11MmMoYSxmLGMsZCk7R2tiKGksaCk7aGZkKGYpfX1mb3IocT1uZXcgb2xiKGkpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihxKSw3OSk7amtkKHAsZDljLChCY2IoKSx0cnVlKSl9cjJjKGIsZSxVZGQoZCxuKSk7djJjKGkpO3JldHVybiBrJiZzP2w6KG1tYigpLG1tYigpLGptYil9ZWxzZXtyZXR1cm4gbW1iKCksbW1iKCksam1ifX1cbmZ1bmN0aW9uIFokYihhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGosayxsLG0sbixvLHA7bj1jO2s9bmV3IGIwYihpKTtfX2IoaywoajBiKCksZTBiKSk7eU5iKGssKHd0YygpLElzYyksZyk7eU5iKGssKE55YygpLFZ4YyksKGRjZCgpLCRiZCkpO3A9RWRiKEVEKGEuV2UoVXhjKSkpO3lOYihrLFV4YyxwKTtsPW5ldyBIMGI7RjBiKGwsayk7aWYoIShiIT1iY2QmJmIhPWNjZCkpe2Q+PTA/KG49WmNkKGgpKToobj1XY2QoWmNkKGgpKSk7YS5ZZSgkeGMsbil9aj1uZXcgZDdjO209ZmFsc2U7aWYoYS5YZShUeGMpKXthN2MoaixCRChhLldlKFR4YyksOCkpO209dHJ1ZX1lbHNle182YyhqLGcuYS8yLGcuYi8yKX1zd2l0Y2gobi5nKXtjYXNlIDQ6eU5iKGssbXhjLChDdGMoKSx5dGMpKTt5TmIoayxCc2MsKEdxYygpLEZxYykpO2suby5iPWcuYjtwPDAmJihrLm8uYT0tcCk7RzBiKGwsKFVjZCgpLHpjZCkpO218fChqLmE9Zy5hKTtqLmEtPWcuYTticmVhaztjYXNlIDI6eU5iKGssbXhjLChDdGMoKSxBdGMpKTt5TmIoayxCc2MsKEdxYygpLERxYykpO2suby5iPWcuYjtwPDAmJihrLm8uYT0tcCk7RzBiKGwsKFVjZCgpLFRjZCkpO218fChqLmE9MCk7YnJlYWs7Y2FzZSAxOnlOYihrLE9zYywoZXNjKCksZHNjKSk7ay5vLmE9Zy5hO3A8MCYmKGsuby5iPS1wKTtHMGIobCwoVWNkKCksUmNkKSk7bXx8KGouYj1nLmIpO2ouYi09Zy5iO2JyZWFrO2Nhc2UgMzp5TmIoayxPc2MsKGVzYygpLGJzYykpO2suby5hPWcuYTtwPDAmJihrLm8uYj0tcCk7RzBiKGwsKFVjZCgpLEFjZCkpO218fChqLmI9MCk7fWE3YyhsLm4saik7eU5iKGssVHhjLGopO2lmKGI9PVpiZHx8Yj09X2JkfHxiPT0kYmQpe289MDtpZihiPT1aYmQmJmEuWGUoV3hjKSl7c3dpdGNoKG4uZyl7Y2FzZSAxOmNhc2UgMjpvPUJEKGEuV2UoV3hjKSwxOSkuYTticmVhaztjYXNlIDM6Y2FzZSA0Om89LUJEKGEuV2UoV3hjKSwxOSkuYTt9fWVsc2V7c3dpdGNoKG4uZyl7Y2FzZSA0OmNhc2UgMjpvPWYuYjtiPT1fYmQmJihvLz1lLmIpO2JyZWFrO2Nhc2UgMTpjYXNlIDM6bz1mLmE7Yj09X2JkJiYoby89ZS5hKTt9fXlOYihrLGh0YyxvKX15TmIoayxIc2Msbik7cmV0dXJuIGt9XG5mdW5jdGlvbiBBR2MoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEM7Yz1FZGIoRUQodk5iKGEuYS5qLChOeWMoKSxFd2MpKSkpO2lmKGM8LTF8fCFhLmEuaXx8ZWNkKEJEKHZOYihhLmEubyxWeGMpLDk4KSl8fFZfYihhLmEubywoVWNkKCksemNkKSkuZ2MoKTwyJiZWX2IoYS5hLm8sVGNkKS5nYygpPDIpe3JldHVybiB0cnVlfWlmKGEuYS5jLlJmKCkpe3JldHVybiBmYWxzZX12PTA7dT0wO3Q9bmV3IFJrYjtmb3IoaT1hLmEuZSxqPTAsaz1pLmxlbmd0aDtqPGs7KytqKXtoPWlbal07Zm9yKG09aCxuPTAscD1tLmxlbmd0aDtuPHA7KytuKXtsPW1bbl07aWYobC5rPT0oajBiKCksaTBiKSl7dC5jW3QuYy5sZW5ndGhdPWw7Y29udGludWV9ZD1hLmJbbC5jLnBdW2wucF07aWYobC5rPT1lMGIpe2QuYj0xO0JEKHZOYihsLCh3dGMoKSwkc2MpKSwxMSkuaj09KFVjZCgpLHpjZCkmJih1Kz1kLmEpfWVsc2V7Qz1WX2IobCwoVWNkKCksVGNkKSk7Qy5kYygpfHwhTHEoQyxuZXcgTkdjKT8oZC5jPTEpOihlPVZfYihsLHpjZCksKGUuZGMoKXx8IUxxKGUsbmV3IEpHYykpJiYodis9ZC5hKSl9Zm9yKGc9bmV3IFNyKHVyKFVfYihsKS5hLktjKCksbmV3IFNxKSk7UXIoZyk7KXtmPUJEKFJyKGcpLDE3KTt2Kz1kLmM7dSs9ZC5iO0I9Zi5kLmk7ekdjKGEsZCxCKX1yPXBsKE9DKEdDKEtJLDEpLFVoZSwyMCwwLFtWX2IobCwoVWNkKCksQWNkKSksVl9iKGwsUmNkKV0pKTtmb3IoQT1uZXcgU3IobmV3IHhsKHIuYS5sZW5ndGgsci5hKSk7UXIoQSk7KXt3PUJEKFJyKEEpLDExKTtzPUJEKHZOYih3LCh3dGMoKSxndGMpKSwxMCk7aWYocyl7dis9ZC5jO3UrPWQuYjt6R2MoYSxkLHMpfX19Zm9yKG89bmV3IG9sYih0KTtvLmE8by5jLmMubGVuZ3RoOyl7bD1CRChtbGIobyksMTApO2Q9YS5iW2wuYy5wXVtsLnBdO2ZvcihnPW5ldyBTcih1cihVX2IobCkuYS5LYygpLG5ldyBTcSkpO1FyKGcpOyl7Zj1CRChScihnKSwxNyk7dis9ZC5jO3UrPWQuYjtCPWYuZC5pO3pHYyhhLGQsQil9fXQuYz1LQyhTSSxVaGUsMSwwLDUsMSl9Yj12K3U7cT1iPT0wP1BqZToodi11KS9iO3JldHVybiBxPj1jfVxuZnVuY3Rpb24gb3ZkKCl7bXZkKCk7ZnVuY3Rpb24gaChmKXt2YXIgZz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLmNtZCl7Y2FzZSAnYWxnb3JpdGhtcyc6dmFyIGM9cHZkKChtbWIoKSxuZXcgbG5iKG5ldyAkaWIobHZkLmIpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTpjfSk7YnJlYWs7Y2FzZSAnY2F0ZWdvcmllcyc6dmFyIGQ9cHZkKChtbWIoKSxuZXcgbG5iKG5ldyAkaWIobHZkLmMpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSAnb3B0aW9ucyc6dmFyIGU9cHZkKChtbWIoKSxuZXcgbG5iKG5ldyAkaWIobHZkLmQpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTplfSk7YnJlYWs7Y2FzZSAncmVnaXN0ZXInOnN2ZChiLmFsZ29yaXRobXMpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWR9KTticmVhaztjYXNlICdsYXlvdXQnOnF2ZChiLmdyYXBoLGIubGF5b3V0T3B0aW9uc3x8e30sYi5vcHRpb25zfHx7fSk7Zi5wb3N0TWVzc2FnZSh7aWQ6Yi5pZCxkYXRhOmIuZ3JhcGh9KTticmVhazt9fTt0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihiKXt0cnl7Zy5kaXNwYXRjaChiKX1jYXRjaChhKXtmLnBvc3RNZXNzYWdlKHtpZDpiLmRhdGEuaWQsZXJyb3I6YX0pfX19XG5mdW5jdGlvbiBqKGIpe3ZhciBjPXRoaXM7dGhpcy5kaXNwYXRjaGVyPW5ldyBoKHtwb3N0TWVzc2FnZTpmdW5jdGlvbihhKXtjLm9ubWVzc2FnZSh7ZGF0YTphfSl9fSk7dGhpcy5wb3N0TWVzc2FnZT1mdW5jdGlvbihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5kaXNwYXRjaGVyLnNhdmVEaXNwYXRjaCh7ZGF0YTphfSl9LDApfX1cbmlmKHR5cGVvZiBkb2N1bWVudD09PXVrZSYmdHlwZW9mIHNlbGYhPT11a2Upe3ZhciBpPW5ldyBoKHNlbGYpO3NlbGYub25tZXNzYWdlPWkuc2F2ZURpc3BhdGNofWVsc2UgaWYodHlwZW9mIG1vZHVsZSE9PXVrZSYmbW9kdWxlLmV4cG9ydHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCdfX2VzTW9kdWxlJyx7dmFsdWU6dHJ1ZX0pO21vZHVsZS5leHBvcnRzPXsnZGVmYXVsdCc6aixXb3JrZXI6an19fVxuZnVuY3Rpb24gYWFlKGEpe2lmKGEuTilyZXR1cm47YS5OPXRydWU7YS5iPUxuZChhLDApO0tuZChhLmIsMCk7S25kKGEuYiwxKTtLbmQoYS5iLDIpO2EuYmI9TG5kKGEsMSk7S25kKGEuYmIsMCk7S25kKGEuYmIsMSk7YS5mYj1MbmQoYSwyKTtLbmQoYS5mYiwzKTtLbmQoYS5mYiw0KTtRbmQoYS5mYiw1KTthLnFiPUxuZChhLDMpO0tuZChhLnFiLDApO1FuZChhLnFiLDEpO1FuZChhLnFiLDIpO0tuZChhLnFiLDMpO0tuZChhLnFiLDQpO1FuZChhLnFiLDUpO0tuZChhLnFiLDYpO2EuYT1NbmQoYSw0KTthLmM9TW5kKGEsNSk7YS5kPU1uZChhLDYpO2EuZT1NbmQoYSw3KTthLmY9TW5kKGEsOCk7YS5nPU1uZChhLDkpO2EuaT1NbmQoYSwxMCk7YS5qPU1uZChhLDExKTthLms9TW5kKGEsMTIpO2Eubj1NbmQoYSwxMyk7YS5vPU1uZChhLDE0KTthLnA9TW5kKGEsMTUpO2EucT1NbmQoYSwxNik7YS5zPU1uZChhLDE3KTthLnI9TW5kKGEsMTgpO2EudD1NbmQoYSwxOSk7YS51PU1uZChhLDIwKTthLnY9TW5kKGEsMjEpO2Eudz1NbmQoYSwyMik7YS5CPU1uZChhLDIzKTthLkE9TW5kKGEsMjQpO2EuQz1NbmQoYSwyNSk7YS5EPU1uZChhLDI2KTthLkY9TW5kKGEsMjcpO2EuRz1NbmQoYSwyOCk7YS5IPU1uZChhLDI5KTthLko9TW5kKGEsMzApO2EuST1NbmQoYSwzMSk7YS5LPU1uZChhLDMyKTthLk09TW5kKGEsMzMpO2EuTD1NbmQoYSwzNCk7YS5QPU1uZChhLDM1KTthLlE9TW5kKGEsMzYpO2EuUj1NbmQoYSwzNyk7YS5TPU1uZChhLDM4KTthLlQ9TW5kKGEsMzkpO2EuVT1NbmQoYSw0MCk7YS5WPU1uZChhLDQxKTthLlg9TW5kKGEsNDIpO2EuVz1NbmQoYSw0Myk7YS5ZPU1uZChhLDQ0KTthLlo9TW5kKGEsNDUpO2EuJD1NbmQoYSw0Nik7YS5fPU1uZChhLDQ3KTthLmFiPU1uZChhLDQ4KTthLmNiPU1uZChhLDQ5KTthLmRiPU1uZChhLDUwKTthLmViPU1uZChhLDUxKTthLmdiPU1uZChhLDUyKTthLmhiPU1uZChhLDUzKTthLmliPU1uZChhLDU0KTthLmpiPU1uZChhLDU1KTthLmtiPU1uZChhLDU2KTthLmxiPU1uZChhLDU3KTthLm1iPU1uZChhLDU4KTthLm5iPU1uZChhLDU5KTthLm9iPU1uZChhLDYwKTthLnBiPU1uZChhLDYxKX1cbmZ1bmN0aW9uIGY1YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O3M9MDtpZihiLmYuYT09MCl7Zm9yKHE9bmV3IG9sYihhKTtxLmE8cS5jLmMubGVuZ3RoOyl7bz1CRChtbGIocSksMTApO3M9JHduZC5NYXRoLm1heChzLG8ubi5hK28uby5hK28uZC5jKX19ZWxzZXtzPWIuZi5hLWIuYy5hfXMtPWIuYy5hO2ZvcihwPW5ldyBvbGIoYSk7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDEwKTtnNWIoby5uLHMtby5vLmEpO2g1YihvLmYpO2Q1YihvKTsoIW8ucT8obW1iKCksbW1iKCksa21iKTpvLnEpLl9iKChOeWMoKSxheWMpKSYmZzViKEJEKHZOYihvLGF5YyksOCkscy1vLm8uYSk7c3dpdGNoKEJEKHZOYihvLG13YyksMjQ4KS5nKXtjYXNlIDE6eU5iKG8sbXdjLChGN2MoKSxEN2MpKTticmVhaztjYXNlIDI6eU5iKG8sbXdjLChGN2MoKSxDN2MpKTt9cj1vLm87Zm9yKHU9bmV3IG9sYihvLmopO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUJEKG1sYih1KSwxMSk7ZzViKHQubixyLmEtdC5vLmEpO2c1Yih0LmEsdC5vLmEpO0cwYih0LFo0Yih0LmopKTtnPUJEKHZOYih0LFd4YyksMTkpOyEhZyYmeU5iKHQsV3hjLG1lYigtZy5hKSk7Zm9yKGY9bmV3IG9sYih0LmcpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUJEKG1sYihmKSwxNyk7Zm9yKGQ9SnNiKGUuYSwwKTtkLmIhPWQuZC5jOyl7Yz1CRChYc2IoZCksOCk7Yy5hPXMtYy5hfWo9QkQodk5iKGUsanhjKSw3NCk7aWYoail7Zm9yKGk9SnNiKGosMCk7aS5iIT1pLmQuYzspe2g9QkQoWHNiKGkpLDgpO2guYT1zLWguYX19Zm9yKG09bmV3IG9sYihlLmIpO20uYTxtLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihtKSw3MCk7ZzViKGsubixzLWsuby5hKX19Zm9yKG49bmV3IG9sYih0LmYpO24uYTxuLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihuKSw3MCk7ZzViKGsubix0Lm8uYS1rLm8uYSl9fWlmKG8uaz09KGowYigpLGUwYikpe3lOYihvLCh3dGMoKSxIc2MpLFo0YihCRCh2TmIobyxIc2MpLDYxKSkpO2M1YihvKX1mb3IobD1uZXcgb2xiKG8uYik7bC5hPGwuYy5jLmxlbmd0aDspe2s9QkQobWxiKGwpLDcwKTtkNWIoayk7ZzViKGsubixyLmEtay5vLmEpfX19XG5mdW5jdGlvbiBpNWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTtzPTA7aWYoYi5mLmI9PTApe2ZvcihxPW5ldyBvbGIoYSk7cS5hPHEuYy5jLmxlbmd0aDspe289QkQobWxiKHEpLDEwKTtzPSR3bmQuTWF0aC5tYXgocyxvLm4uYitvLm8uYitvLmQuYSl9fWVsc2V7cz1iLmYuYi1iLmMuYn1zLT1iLmMuYjtmb3IocD1uZXcgb2xiKGEpO3AuYTxwLmMuYy5sZW5ndGg7KXtvPUJEKG1sYihwKSwxMCk7ajViKG8ubixzLW8uby5iKTtrNWIoby5mKTtlNWIobyk7KCFvLnE/KG1tYigpLG1tYigpLGttYik6by5xKS5fYigoTnljKCksYXljKSkmJmo1YihCRCh2TmIobyxheWMpLDgpLHMtby5vLmIpO3N3aXRjaChCRCh2TmIobyxtd2MpLDI0OCkuZyl7Y2FzZSAzOnlOYihvLG13YywoRjdjKCksQTdjKSk7YnJlYWs7Y2FzZSA0OnlOYihvLG13YywoRjdjKCksRTdjKSk7fXI9by5vO2Zvcih1PW5ldyBvbGIoby5qKTt1LmE8dS5jLmMubGVuZ3RoOyl7dD1CRChtbGIodSksMTEpO2o1Yih0Lm4sci5iLXQuby5iKTtqNWIodC5hLHQuby5iKTtHMGIodCwkNGIodC5qKSk7Zz1CRCh2TmIodCxXeGMpLDE5KTshIWcmJnlOYih0LFd4YyxtZWIoLWcuYSkpO2ZvcihmPW5ldyBvbGIodC5nKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTcpO2ZvcihkPUpzYihlLmEsMCk7ZC5iIT1kLmQuYzspe2M9QkQoWHNiKGQpLDgpO2MuYj1zLWMuYn1qPUJEKHZOYihlLGp4YyksNzQpO2lmKGope2ZvcihpPUpzYihqLDApO2kuYiE9aS5kLmM7KXtoPUJEKFhzYihpKSw4KTtoLmI9cy1oLmJ9fWZvcihtPW5ldyBvbGIoZS5iKTttLmE8bS5jLmMubGVuZ3RoOyl7az1CRChtbGIobSksNzApO2o1YihrLm4scy1rLm8uYil9fWZvcihuPW5ldyBvbGIodC5mKTtuLmE8bi5jLmMubGVuZ3RoOyl7az1CRChtbGIobiksNzApO2o1YihrLm4sdC5vLmItay5vLmIpfX1pZihvLms9PShqMGIoKSxlMGIpKXt5TmIobywod3RjKCksSHNjKSwkNGIoQkQodk5iKG8sSHNjKSw2MSkpKTtiNWIobyl9Zm9yKGw9bmV3IG9sYihvLmIpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUJEKG1sYihsKSw3MCk7ZTViKGspO2o1YihrLm4sci5iLWsuby5iKX19fVxuZnVuY3Rpb24gdFpjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuO2w9ZmFsc2U7aj1hKzE7az0odENiKGEsYi5jLmxlbmd0aCksQkQoYi5jW2FdLDIwMCkpO2c9ay5hO2g9bnVsbDtmb3IoZj0wO2Y8ay5hLmMubGVuZ3RoO2YrKyl7ZT0odENiKGYsZy5jLmxlbmd0aCksQkQoZy5jW2ZdLDE4NykpO2lmKGUuYyl7Y29udGludWV9aWYoZS5iLmMubGVuZ3RoPT0wKXtaZmIoKTt2JGMoayxlKTstLWY7bD10cnVlO2NvbnRpbnVlfWlmKCFlLmspeyEhaCYmYSRjKGgpO2g9bmV3IGIkYyghaD8wOmguZStoLmQrZCxrLmYsZCk7T1pjKGUsaC5lK2guZCxrLmYpO0VrYihrLmQsaCk7V1pjKGgsZSk7ZS5rPXRydWV9aT1udWxsO2k9KG49bnVsbCxmPGsuYS5jLmxlbmd0aC0xPyhuPUJEKElrYihrLmEsZisxKSwxODcpKTpqPGIuYy5sZW5ndGgmJih0Q2IoaixiLmMubGVuZ3RoKSxCRChiLmNbal0sMjAwKSkuYS5jLmxlbmd0aCE9MCYmKG49QkQoSWtiKCh0Q2IoaixiLmMubGVuZ3RoKSxCRChiLmNbal0sMjAwKSkuYSwwKSwxODcpKSxuKTttPWZhbHNlOyEhaSYmKG09IXBiKGkuaixrKSk7aWYoaSl7aWYoaS5iLmMubGVuZ3RoPT0wKXt2JGMoayxpKTticmVha31lbHNle0taYyhlLGMtZS5zKTthJGMoZS5xKTtsPWx8c1pjKGssZSxpLGMsZCl9aWYoaS5iLmMubGVuZ3RoPT0wKXt2JGMoKHRDYihqLGIuYy5sZW5ndGgpLEJEKGIuY1tqXSwyMDApKSxpKTtpPW51bGw7d2hpbGUoYi5jLmxlbmd0aD5qJiYodENiKGosYi5jLmxlbmd0aCksQkQoYi5jW2pdLDIwMCkpLmEuYy5sZW5ndGg9PTApe0xrYihiLCh0Q2IoaixiLmMubGVuZ3RoKSxiLmNbal0pKX19aWYoIWkpey0tZjtjb250aW51ZX1pZih1WmMoYixrLGUsaSxtLGMsaixkKSl7bD10cnVlO2NvbnRpbnVlfWlmKG0pe2lmKHZaYyhiLGssZSxpLGMsaixkKSl7bD10cnVlO2NvbnRpbnVlfWVsc2UgaWYod1pjKGssZSkpe2UuYz10cnVlO2w9dHJ1ZTtjb250aW51ZX19ZWxzZSBpZih3WmMoayxlKSl7ZS5jPXRydWU7bD10cnVlO2NvbnRpbnVlfWlmKGwpe2NvbnRpbnVlfX1pZih3WmMoayxlKSl7ZS5jPXRydWU7bD10cnVlOyEhaSYmKGkuaz1mYWxzZSk7Y29udGludWV9ZWxzZXthJGMoZS5xKX19cmV0dXJuIGx9XG5mdW5jdGlvbiBmZWQoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSCxJO3A9MDtEPTA7Zm9yKGo9bmV3IG9sYihhLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxNTcpOyEhaS5jJiZ6ZmQoaS5jKTtwPSR3bmQuTWF0aC5tYXgocCxyZWQoaSkpO0QrPXJlZChpKSpxZWQoaSl9cT1EL2EuYi5jLmxlbmd0aDtDPV9kZChhLmIscSk7RCs9YS5iLmMubGVuZ3RoKkM7cD0kd25kLk1hdGgubWF4KHAsJHduZC5NYXRoLnNxcnQoRCpnKSkrYy5iO0g9Yy5iO0k9Yy5kO249MDtsPWMuYitjLmM7Qj1uZXcgUHNiO0RzYihCLG1lYigwKSk7dz1uZXcgUHNiO2s9bmV3IEJpYihhLmIsMCk7bz1udWxsO2g9bmV3IFJrYjt3aGlsZShrLmI8ay5kLmdjKCkpe2k9KHNDYihrLmI8ay5kLmdjKCkpLEJEKGsuZC5YYihrLmM9ay5iKyspLDE1NykpO0c9cmVkKGkpO209cWVkKGkpO2lmKEgrRz5wKXtpZihmKXtGc2IodyxuKTtGc2IoQixtZWIoay5iLTEpKTtFa2IoYS5kLG8pO2guYz1LQyhTSSxVaGUsMSwwLDUsMSl9SD1jLmI7SSs9bitiO249MDtsPSR3bmQuTWF0aC5tYXgobCxjLmIrYy5jK0cpfWguY1toLmMubGVuZ3RoXT1pO3VlZChpLEgsSSk7bD0kd25kLk1hdGgubWF4KGwsSCtHK2MuYyk7bj0kd25kLk1hdGgubWF4KG4sbSk7SCs9RytiO289aX1Ha2IoYS5hLGgpO0VrYihhLmQsQkQoSWtiKGgsaC5jLmxlbmd0aC0xKSwxNTcpKTtsPSR3bmQuTWF0aC5tYXgobCxkKTtGPUkrbitjLmE7aWYoRjxlKXtuKz1lLUY7Rj1lfWlmKGYpe0g9Yy5iO2s9bmV3IEJpYihhLmIsMCk7RnNiKEIsbWViKGEuYi5jLmxlbmd0aCkpO0E9SnNiKEIsMCk7cz1CRChYc2IoQSksMTkpLmE7RnNiKHcsbik7dj1Kc2IodywwKTt1PTA7d2hpbGUoay5iPGsuZC5nYygpKXtpZihrLmI9PXMpe0g9Yy5iO3U9RWRiKEVEKFhzYih2KSkpO3M9QkQoWHNiKEEpLDE5KS5hfWk9KHNDYihrLmI8ay5kLmdjKCkpLEJEKGsuZC5YYihrLmM9ay5iKyspLDE1NykpO3NlZChpLHUpO2lmKGsuYj09cyl7cj1sLUgtYy5jO3Q9cmVkKGkpO3RlZChpLHIpO3ZlZChpLChyLXQpLzIsMCl9SCs9cmVkKGkpK2J9fXJldHVybiBuZXcgZjdjKGwsRil9XG5mdW5jdGlvbiBwZGUoYSl7dmFyIGIsYyxkLGUsZjtiPWEuYztmPW51bGw7c3dpdGNoKGIpe2Nhc2UgNjpyZXR1cm4gYS5WbCgpO2Nhc2UgMTM6cmV0dXJuIGEuV2woKTtjYXNlIDIzOnJldHVybiBhLk5sKCk7Y2FzZSAyMjpyZXR1cm4gYS5TbCgpO2Nhc2UgMTg6cmV0dXJuIGEuUGwoKTtjYXNlIDg6bmRlKGEpO2Y9KHdmZSgpLGVmZSk7YnJlYWs7Y2FzZSA5OnJldHVybiBhLnZsKHRydWUpO2Nhc2UgMTk6cmV0dXJuIGEud2woKTtjYXNlIDEwOnN3aXRjaChhLmEpe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOmY9YS51bChhLmEpO25kZShhKTtyZXR1cm4gZjtjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDp7Yz1hLnRsKCk7YzxUamU/KGY9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyBpZ2UoMCxjKSkpOihmPUZmZShUZWUoYykpKX1icmVhaztjYXNlIDk5OnJldHVybiBhLkZsKCk7Y2FzZSA2NzpyZXR1cm4gYS5BbCgpO2Nhc2UgMTA1OnJldHVybiBhLklsKCk7Y2FzZSA3MzpyZXR1cm4gYS5CbCgpO2Nhc2UgMTAzOnJldHVybiBhLkdsKCk7Y2FzZSA4ODpyZXR1cm4gYS5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiBhLnhsKCk7Y2FzZSA4MDpjYXNlIDExMjpmPXRkZShhLGEuYSk7aWYoIWYpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxJdWUpKSkpO2JyZWFrO2RlZmF1bHQ6Zj16ZmUoYS5hKTt9bmRlKGEpO2JyZWFrO2Nhc2UgMDppZihhLmE9PTkzfHxhLmE9PTEyM3x8YS5hPT0xMjUpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxIdWUpKSkpO2Y9emZlKGEuYSk7ZD1hLmE7bmRlKGEpO2lmKChkJjY0NTEyKT09VWplJiZhLmM9PTAmJihhLmEmNjQ1MTIpPT01NjMyMCl7ZT1LQyhURCwkaWUsMjUsMiwxNSwxKTtlWzBdPWQmYWplO2VbMV09YS5hJmFqZTtmPUVmZShGZmUoemZiKGUsMCxlLmxlbmd0aCkpLDApO25kZShhKX1icmVhaztkZWZhdWx0OnRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksSHVlKSkpKTt9cmV0dXJuIGZ9XG5mdW5jdGlvbiBlN2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtkPW5ldyBSa2I7ZT1PaGU7Zj1PaGU7Zz1PaGU7aWYoYyl7ZT1hLmYuYTtmb3IocD1uZXcgb2xiKGIuaik7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDExKTtmb3IoaT1uZXcgb2xiKG8uZyk7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDE3KTtpZihoLmEuYiE9MCl7az1CRChIc2IoaC5hKSw4KTtpZihrLmE8ZSl7Zj1lLWsuYTtnPU9oZTtkLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2U9ay5hfWlmKGsuYTw9ZSl7ZC5jW2QuYy5sZW5ndGhdPWg7aC5hLmI+MSYmKGc9JHduZC5NYXRoLm1pbihnLCR3bmQuTWF0aC5hYnMoQkQoVXQoaC5hLDEpLDgpLmItay5iKSkpfX19fX1lbHNle2ZvcihwPW5ldyBvbGIoYi5qKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1CRChtbGIocCksMTEpO2ZvcihpPW5ldyBvbGIoby5lKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTcpO2lmKGguYS5iIT0wKXttPUJEKElzYihoLmEpLDgpO2lmKG0uYT5lKXtmPW0uYS1lO2c9T2hlO2QuYz1LQyhTSSxVaGUsMSwwLDUsMSk7ZT1tLmF9aWYobS5hPj1lKXtkLmNbZC5jLmxlbmd0aF09aDtoLmEuYj4xJiYoZz0kd25kLk1hdGgubWluKGcsJHduZC5NYXRoLmFicyhCRChVdChoLmEsaC5hLmItMiksOCkuYi1tLmIpKSl9fX19fWlmKGQuYy5sZW5ndGghPTAmJmY+Yi5vLmEvMiYmZz5iLm8uYi8yKXtuPW5ldyBIMGI7RjBiKG4sYik7RzBiKG4sKFVjZCgpLEFjZCkpO24ubi5hPWIuby5hLzI7cj1uZXcgSDBiO0YwYihyLGIpO0cwYihyLFJjZCk7ci5uLmE9Yi5vLmEvMjtyLm4uYj1iLm8uYjtmb3IoaT1uZXcgb2xiKGQpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwxNyk7aWYoYyl7aj1CRChMc2IoaC5hKSw4KTtxPWguYS5iPT0wP0EwYihoLmQpOkJEKEhzYihoLmEpLDgpO3EuYj49ai5iP1FaYihoLHIpOlFaYihoLG4pfWVsc2V7aj1CRChNc2IoaC5hKSw4KTtxPWguYS5iPT0wP0EwYihoLmMpOkJEKElzYihoLmEpLDgpO3EuYj49ai5iP1JaYihoLHIpOlJaYihoLG4pfWw9QkQodk5iKGgsKE55YygpLGp4YykpLDc0KTshIWwmJnplKGwsaix0cnVlKX1iLm4uYT1lLWIuby5hLzJ9fVxuZnVuY3Rpb24gZXJkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSSxKLEs7RD1udWxsO0c9YjtGPVJxZChhLGR0ZChjKSxHKTtMa2QoRixfcGQoRyxWdGUpKTtIPUJEKG9vKGEuZyxWcGQoYUMoRyxDdGUpKSksMzMpO209YUMoRywnc291cmNlUG9ydCcpO2Q9bnVsbDshIW0mJihkPVZwZChtKSk7ST1CRChvbyhhLmosZCksMTE4KTtpZighSCl7aD1XcGQoRyk7bz1cIkFuIGVkZ2UgbXVzdCBoYXZlIGEgc291cmNlIG5vZGUgKGVkZ2UgaWQ6ICdcIitoO3A9byskdGU7dGhyb3cgdmJiKG5ldyBjcWQocCkpfWlmKCEhSSYmIUhiKG1wZChJKSxIKSl7aT1fcGQoRyxWdGUpO3E9XCJUaGUgc291cmNlIHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnXCIraTtyPXErJHRlO3Rocm93IHZiYihuZXcgY3FkKHIpKX1CPSghRi5iJiYoRi5iPW5ldyB5NWQoejIsRiw0LDcpKSxGLmIpO2Y9bnVsbDtJPyhmPUkpOihmPUgpO3d0ZChCLGYpO0o9QkQob28oYS5nLFZwZChhQyhHLGJ1ZSkpKSwzMyk7bj1hQyhHLCd0YXJnZXRQb3J0Jyk7ZT1udWxsOyEhbiYmKGU9VnBkKG4pKTtLPUJEKG9vKGEuaixlKSwxMTgpO2lmKCFKKXtsPVdwZChHKTtzPVwiQW4gZWRnZSBtdXN0IGhhdmUgYSB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJ1wiK2w7dD1zKyR0ZTt0aHJvdyB2YmIobmV3IGNxZCh0KSl9aWYoISFLJiYhSGIobXBkKEspLEopKXtqPV9wZChHLFZ0ZSk7dT1cIlRoZSB0YXJnZXQgcG9ydCBvZiBhbiBlZGdlIG11c3QgYmUgYSBwb3J0IG9mIHRoZSBlZGdlJ3MgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICdcIitqO3Y9dSskdGU7dGhyb3cgdmJiKG5ldyBjcWQodikpfUM9KCFGLmMmJihGLmM9bmV3IHk1ZCh6MixGLDUsOCkpLEYuYyk7Zz1udWxsO0s/KGc9Syk6KGc9Sik7d3RkKEMsZyk7aWYoKCFGLmImJihGLmI9bmV3IHk1ZCh6MixGLDQsNykpLEYuYikuaT09MHx8KCFGLmMmJihGLmM9bmV3IHk1ZCh6MixGLDUsOCkpLEYuYykuaT09MCl7az1fcGQoRyxWdGUpO3c9WnRlK2s7QT13KyR0ZTt0aHJvdyB2YmIobmV3IGNxZChBKSl9Z3JkKEcsRik7ZnJkKEcsRik7RD1jcmQoYSxHLEYpO3JldHVybiBEfVxuZnVuY3Rpb24gRFhiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7bD1GWGIoelhiKGEsKFVjZCgpLEZjZCkpLGIpO289RVhiKHpYYihhLEdjZCksYik7dT1FWGIoelhiKGEsT2NkKSxiKTtCPUdYYih6WGIoYSxRY2QpLGIpO209R1hiKHpYYihhLEJjZCksYik7cz1FWGIoelhiKGEsTmNkKSxiKTtwPUVYYih6WGIoYSxIY2QpLGIpO3c9RVhiKHpYYihhLFBjZCksYik7dj1FWGIoelhiKGEsQ2NkKSxiKTtDPUdYYih6WGIoYSxFY2QpLGIpO3I9RVhiKHpYYihhLExjZCksYik7dD1FWGIoelhiKGEsS2NkKSxiKTtBPUVYYih6WGIoYSxEY2QpLGIpO0Q9R1hiKHpYYihhLE1jZCksYik7bj1HWGIoelhiKGEsSWNkKSxiKTtxPUVYYih6WGIoYSxKY2QpLGIpO2M9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbcy5hLEIuYSx3LmEsRC5hXSkpO2Q9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbby5hLGwuYSx1LmEscS5hXSkpO2U9ci5hO2Y9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbcC5hLG0uYSx2LmEsbi5hXSkpO2o9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbcy5iLG8uYixwLmIsdC5iXSkpO2k9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbQi5iLGwuYixtLmIscS5iXSkpO2s9Qy5iO2g9dzZjKE9DKEdDKFVELDEpLFZqZSwyNSwxNSxbdy5iLHUuYix2LmIsQS5iXSkpO3ZYYih6WGIoYSxGY2QpLGMrZSxqK2spO3ZYYih6WGIoYSxKY2QpLGMrZSxqK2spO3ZYYih6WGIoYSxHY2QpLGMrZSwwKTt2WGIoelhiKGEsT2NkKSxjK2UsaitrK2kpO3ZYYih6WGIoYSxRY2QpLDAsaitrKTt2WGIoelhiKGEsQmNkKSxjK2UrZCxqK2spO3ZYYih6WGIoYSxIY2QpLGMrZStkLDApO3ZYYih6WGIoYSxQY2QpLDAsaitrK2kpO3ZYYih6WGIoYSxDY2QpLGMrZStkLGoraytpKTt2WGIoelhiKGEsRWNkKSwwLGopO3ZYYih6WGIoYSxMY2QpLGMsMCk7dlhiKHpYYihhLERjZCksMCxqK2sraSk7dlhiKHpYYihhLEljZCksYytlK2QsMCk7Zz1uZXcgZDdjO2cuYT13NmMoT0MoR0MoVUQsMSksVmplLDI1LDE1LFtjK2QrZStmLEMuYSx0LmEsQS5hXSkpO2cuYj13NmMoT0MoR0MoVUQsMSksVmplLDI1LDE1LFtqK2kraytoLHIuYixELmIsbi5iXSkpO3JldHVybiBnfVxuZnVuY3Rpb24gTmdjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO3A9bmV3IFJrYjtmb3IobT1uZXcgb2xiKGEuZC5iKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1CRChtbGIobSksMjkpO2ZvcihvPW5ldyBvbGIobC5hKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1CRChtbGIobyksMTApO2U9QkQoT2hiKGEuZixuKSw1Nyk7Zm9yKGk9bmV3IFNyKHVyKFVfYihuKS5hLktjKCksbmV3IFNxKSk7UXIoaSk7KXtnPUJEKFJyKGkpLDE3KTtkPUpzYihnLmEsMCk7aj10cnVlO2s9bnVsbDtpZihkLmIhPWQuZC5jKXtiPUJEKFhzYihkKSw4KTtjPW51bGw7aWYoZy5jLmo9PShVY2QoKSxBY2QpKXtxPW5ldyBoaWMoYixuZXcgZjdjKGIuYSxlLmQuZCksZSxnKTtxLmYuYT10cnVlO3EuYT1nLmM7cC5jW3AuYy5sZW5ndGhdPXF9aWYoZy5jLmo9PVJjZCl7cT1uZXcgaGljKGIsbmV3IGY3YyhiLmEsZS5kLmQrZS5kLmEpLGUsZyk7cS5mLmQ9dHJ1ZTtxLmE9Zy5jO3AuY1twLmMubGVuZ3RoXT1xfXdoaWxlKGQuYiE9ZC5kLmMpe2M9QkQoWHNiKGQpLDgpO2lmKCFBRGIoYi5iLGMuYikpe2s9bmV3IGhpYyhiLGMsbnVsbCxnKTtwLmNbcC5jLmxlbmd0aF09aztpZihqKXtqPWZhbHNlO2lmKGMuYjxlLmQuZCl7ay5mLmE9dHJ1ZX1lbHNlIGlmKGMuYj5lLmQuZCtlLmQuYSl7ay5mLmQ9dHJ1ZX1lbHNle2suZi5kPXRydWU7ay5mLmE9dHJ1ZX19fWQuYiE9ZC5kLmMmJihiPWMpfWlmKGspe2Y9QkQoT2hiKGEuZixnLmQuaSksNTcpO2lmKGIuYjxmLmQuZCl7ay5mLmE9dHJ1ZX1lbHNlIGlmKGIuYj5mLmQuZCtmLmQuYSl7ay5mLmQ9dHJ1ZX1lbHNle2suZi5kPXRydWU7ay5mLmE9dHJ1ZX19fX1mb3IoaD1uZXcgU3IodXIoUl9iKG4pLmEuS2MoKSxuZXcgU3EpKTtRcihoKTspe2c9QkQoUnIoaCksMTcpO2lmKGcuYS5iIT0wKXtiPUJEKElzYihnLmEpLDgpO2lmKGcuZC5qPT0oVWNkKCksQWNkKSl7cT1uZXcgaGljKGIsbmV3IGY3YyhiLmEsZS5kLmQpLGUsZyk7cS5mLmE9dHJ1ZTtxLmE9Zy5kO3AuY1twLmMubGVuZ3RoXT1xfWlmKGcuZC5qPT1SY2Qpe3E9bmV3IGhpYyhiLG5ldyBmN2MoYi5hLGUuZC5kK2UuZC5hKSxlLGcpO3EuZi5kPXRydWU7cS5hPWcuZDtwLmNbcC5jLmxlbmd0aF09cX19fX19cmV0dXJuIHB9XG5mdW5jdGlvbiBXSmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtPZGQoYywnTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50JywxKTthLmU9YjthLm49QkQodk5iKGIsKHd0YygpLG90YykpLDMwNCk7VkpjKGEpO0hKYyhhKTtNQWIoTEFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZS5iLDE2KSksbmV3IEtLYyksbmV3IE1LYyhhKSk7TUFiKEpBYihMQWIoSkFiKExBYihuZXcgWUFiKG51bGwsbmV3IEt1YihhLmUuYiwxNikpLG5ldyB6TGMpLG5ldyBCTGMpLG5ldyBETGMpLG5ldyBGTGMpLG5ldyBJS2MoYSkpO2lmKENjYihERCh2TmIoYS5lLChOeWMoKSxBeGMpKSkpKXtnPVVkZChjLDEpO09kZChnLCdTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZycsMSk7VUpjKGEpO1FkZChnKX1KRmIoYS5mKTtmPUJEKHZOYihiLEF5YyksMTkpLmEqYS5mLmEuYy5sZW5ndGg7dUdiKEhHYihJR2IoTEdiKGEuZiksZiksZmFsc2UpLFVkZChjLDEpKTtpZihhLmQuYS5nYygpIT0wKXtnPVVkZChjLDEpO09kZChnLCdGbGV4aWJsZSBXaGVyZSBTcGFjZSBQcm9jZXNzaW5nJywxKTtoPUJEKEJ0YihSQWIoTkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKGEuZi5hLDE2KSksbmV3IE9LYyksbmV3IGlLYykpLDE5KS5hO2k9QkQoQnRiKFFBYihOQWIobmV3IFlBYihudWxsLG5ldyBLdWIoYS5mLmEsMTYpKSxuZXcgUUtjKSxuZXcgbUtjKSksMTkpLmE7aj1pLWg7az1uR2IobmV3IHBHYixhLmYpO2w9bkdiKG5ldyBwR2IsYS5mKTtBRmIoREZiKENGYihCRmIoRUZiKG5ldyBGRmIsMjAwMDApLGopLGspLGwpKTtNQWIoSkFiKEpBYihQbGIoYS5pKSxuZXcgU0tjKSxuZXcgVUtjKSxuZXcgV0tjKGgsayxqLGwpKTtmb3IoZT1hLmQuYS5lYygpLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksMjEzKTtkLmc9MX11R2IoSEdiKElHYihMR2IoYS5mKSxmKSxmYWxzZSksVWRkKGcsMSkpO1FkZChnKX1pZihDY2IoREQodk5iKGIsQXhjKSkpKXtnPVVkZChjLDEpO09kZChnLCdTdHJhaWdodCBFZGdlcyBQb3N0LVByb2Nlc3NpbmcnLDEpO1RKYyhhKTtRZGQoZyl9R0pjKGEpO2EuZT1udWxsO2EuZj1udWxsO2EuaT1udWxsO2EuYz1udWxsO1VoYihhLmspO2Euaj1udWxsO2EuYT1udWxsO2Eubz1udWxsO2EuZC5hLiRiKCk7UWRkKGMpfVxuZnVuY3Rpb24gbE1jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdjtmb3IoaD1uZXcgb2xiKGEuYS5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoaCksMjkpO2Zvcih0PW5ldyBvbGIoZi5hKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1CRChtbGIodCksMTApO2IuZ1tzLnBdPXM7Yi5hW3MucF09cztiLmRbcy5wXT0wfX1pPWEuYS5iO2IuYz09KFlMYygpLFdMYykmJihpPUpEKGksMTUyKT9rbShCRChpLDE1MikpOkpEKGksMTMxKT9CRChpLDEzMSkuYTpKRChpLDU0KT9uZXcgb3YoaSk6bmV3IGR2KGkpKTtmb3IoZz1pLktjKCk7Zy5PYigpOyl7Zj1CRChnLlBiKCksMjkpO249LTE7bT1mLmE7aWYoYi5vPT0oZU1jKCksZE1jKSl7bj1PaGU7bT1KRChtLDE1Mik/a20oQkQobSwxNTIpKTpKRChtLDEzMSk/QkQobSwxMzEpLmE6SkQobSw1NCk/bmV3IG92KG0pOm5ldyBkdihtKX1mb3Iodj1tLktjKCk7di5PYigpOyl7dT1CRCh2LlBiKCksMTApO2w9bnVsbDtiLmM9PVdMYz8obD1CRChJa2IoYS5iLmYsdS5wKSwxNSkpOihsPUJEKElrYihhLmIuYix1LnApLDE1KSk7aWYobC5nYygpPjApe2Q9bC5nYygpO2o9UUQoJHduZC5NYXRoLmZsb29yKChkKzEpLzIpKS0xO2U9UUQoJHduZC5NYXRoLmNlaWwoKGQrMSkvMikpLTE7aWYoYi5vPT1kTWMpe2ZvcihrPWU7az49ajtrLS0pe2lmKGIuYVt1LnBdPT11KXtwPUJEKGwuWGIoayksNDYpO289QkQocC5hLDEwKTtpZighUnFiKGMscC5iKSYmbj5hLmIuZVtvLnBdKXtiLmFbby5wXT11O2IuZ1t1LnBdPWIuZ1tvLnBdO2IuYVt1LnBdPWIuZ1t1LnBdO2IuZltiLmdbdS5wXS5wXT0oQmNiKCksQ2NiKGIuZltiLmdbdS5wXS5wXSkmdS5rPT0oajBiKCksZzBiKT90cnVlOmZhbHNlKTtuPWEuYi5lW28ucF19fX19ZWxzZXtmb3Ioaz1qO2s8PWU7aysrKXtpZihiLmFbdS5wXT09dSl7cj1CRChsLlhiKGspLDQ2KTtxPUJEKHIuYSwxMCk7aWYoIVJxYihjLHIuYikmJm48YS5iLmVbcS5wXSl7Yi5hW3EucF09dTtiLmdbdS5wXT1iLmdbcS5wXTtiLmFbdS5wXT1iLmdbdS5wXTtiLmZbYi5nW3UucF0ucF09KEJjYigpLENjYihiLmZbYi5nW3UucF0ucF0pJnUuaz09KGowYigpLGcwYik/dHJ1ZTpmYWxzZSk7bj1hLmIuZVtxLnBdfX19fX19fX1cbmZ1bmN0aW9uIFRoZCgpe1RoZD1jY2I7SGhkKCk7U2hkPUdoZC5hO0JEKHF1ZChaS2QoR2hkLmEpLDApLDE4KTtNaGQ9R2hkLmY7QkQocXVkKFpLZChHaGQuZiksMCksMTgpO0JEKHF1ZChaS2QoR2hkLmYpLDEpLDM0KTtSaGQ9R2hkLm47QkQocXVkKFpLZChHaGQubiksMCksMzQpO0JEKHF1ZChaS2QoR2hkLm4pLDEpLDM0KTtCRChxdWQoWktkKEdoZC5uKSwyKSwzNCk7QkQocXVkKFpLZChHaGQubiksMyksMzQpO05oZD1HaGQuZztCRChxdWQoWktkKEdoZC5nKSwwKSwxOCk7QkQocXVkKFpLZChHaGQuZyksMSksMzQpO0poZD1HaGQuYztCRChxdWQoWktkKEdoZC5jKSwwKSwxOCk7QkQocXVkKFpLZChHaGQuYyksMSksMTgpO09oZD1HaGQuaTtCRChxdWQoWktkKEdoZC5pKSwwKSwxOCk7QkQocXVkKFpLZChHaGQuaSksMSksMTgpO0JEKHF1ZChaS2QoR2hkLmkpLDIpLDE4KTtCRChxdWQoWktkKEdoZC5pKSwzKSwxOCk7QkQocXVkKFpLZChHaGQuaSksNCksMzQpO1BoZD1HaGQuajtCRChxdWQoWktkKEdoZC5qKSwwKSwxOCk7S2hkPUdoZC5kO0JEKHF1ZChaS2QoR2hkLmQpLDApLDE4KTtCRChxdWQoWktkKEdoZC5kKSwxKSwxOCk7QkQocXVkKFpLZChHaGQuZCksMiksMTgpO0JEKHF1ZChaS2QoR2hkLmQpLDMpLDE4KTtCRChxdWQoWktkKEdoZC5kKSw0KSwzNCk7QkQocXVkKFpLZChHaGQuZCksNSksMzQpO0JEKHF1ZChaS2QoR2hkLmQpLDYpLDM0KTtCRChxdWQoWktkKEdoZC5kKSw3KSwzNCk7SWhkPUdoZC5iO0JEKHF1ZChaS2QoR2hkLmIpLDApLDM0KTtCRChxdWQoWktkKEdoZC5iKSwxKSwzNCk7TGhkPUdoZC5lO0JEKHF1ZChaS2QoR2hkLmUpLDApLDM0KTtCRChxdWQoWktkKEdoZC5lKSwxKSwzNCk7QkQocXVkKFpLZChHaGQuZSksMiksMzQpO0JEKHF1ZChaS2QoR2hkLmUpLDMpLDM0KTtCRChxdWQoWktkKEdoZC5lKSw0KSwxOCk7QkQocXVkKFpLZChHaGQuZSksNSksMTgpO0JEKHF1ZChaS2QoR2hkLmUpLDYpLDE4KTtCRChxdWQoWktkKEdoZC5lKSw3KSwxOCk7QkQocXVkKFpLZChHaGQuZSksOCksMTgpO0JEKHF1ZChaS2QoR2hkLmUpLDkpLDE4KTtCRChxdWQoWktkKEdoZC5lKSwxMCksMzQpO1FoZD1HaGQuaztCRChxdWQoWktkKEdoZC5rKSwwKSwzNCk7QkQocXVkKFpLZChHaGQuayksMSksMzQpfVxuZnVuY3Rpb24gd1FjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRjtDPW5ldyBQc2I7dz1uZXcgUHNiO3E9LTE7Zm9yKGk9bmV3IG9sYihhKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaSksMTI4KTtnLnM9cS0tO2s9MDt0PTA7Zm9yKGY9bmV3IG9sYihnLnQpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihmKSwyNjgpO3QrPWQuY31mb3IoZT1uZXcgb2xiKGcuaSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDI2OCk7ays9ZC5jfWcubj1rO2cudT10O3Q9PTA/KEdzYih3LGcsdy5jLmIsdy5jKSx0cnVlKTprPT0wJiYoR3NiKEMsZyxDLmMuYixDLmMpLHRydWUpfUY9R3goYSk7bD1hLmMubGVuZ3RoO3A9bCsxO3I9bC0xO249bmV3IFJrYjt3aGlsZShGLmEuZ2MoKSE9MCl7d2hpbGUody5iIT0wKXt2PShzQ2Iody5iIT0wKSxCRChOc2Iodyx3LmEuYSksMTI4KSk7Ri5hLkJjKHYpIT1udWxsO3Yucz1yLS07QVFjKHYsQyx3KX13aGlsZShDLmIhPTApe0E9KHNDYihDLmIhPTApLEJEKE5zYihDLEMuYS5hKSwxMjgpKTtGLmEuQmMoQSkhPW51bGw7QS5zPXArKztBUWMoQSxDLHcpfW89UmllO2ZvcihqPUYuYS5lYygpLktjKCk7ai5PYigpOyl7Zz1CRChqLlBiKCksMTI4KTtzPWcudS1nLm47aWYocz49byl7aWYocz5vKXtuLmM9S0MoU0ksVWhlLDEsMCw1LDEpO289c31uLmNbbi5jLmxlbmd0aF09Z319aWYobi5jLmxlbmd0aCE9MCl7bT1CRChJa2IobixCdWIoYixuLmMubGVuZ3RoKSksMTI4KTtGLmEuQmMobSkhPW51bGw7bS5zPXArKztBUWMobSxDLHcpO24uYz1LQyhTSSxVaGUsMSwwLDUsMSl9fXU9YS5jLmxlbmd0aCsxO2ZvcihoPW5ldyBvbGIoYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEyOCk7Zy5zPGwmJihnLnMrPXUpfWZvcihCPW5ldyBvbGIoYSk7Qi5hPEIuYy5jLmxlbmd0aDspe0E9QkQobWxiKEIpLDEyOCk7Yz1uZXcgQmliKEEudCwwKTt3aGlsZShjLmI8Yy5kLmdjKCkpe2Q9KHNDYihjLmI8Yy5kLmdjKCkpLEJEKGMuZC5YYihjLmM9Yy5iKyspLDI2OCkpO0Q9ZC5iO2lmKEEucz5ELnMpe3VpYihjKTtMa2IoRC5pLGQpO2lmKGQuYz4wKXtkLmE9RDtFa2IoRC50LGQpO2QuYj1BO0VrYihBLmksZCl9fX19fVxuZnVuY3Rpb24gcWRlKGEpe3ZhciBiLGMsZCxlLGY7Yj1hLmM7c3dpdGNoKGIpe2Nhc2UgMTE6cmV0dXJuIGEuTWwoKTtjYXNlIDEyOnJldHVybiBhLk9sKCk7Y2FzZSAxNDpyZXR1cm4gYS5RbCgpO2Nhc2UgMTU6cmV0dXJuIGEuVGwoKTtjYXNlIDE2OnJldHVybiBhLlJsKCk7Y2FzZSAxNzpyZXR1cm4gYS5VbCgpO2Nhc2UgMjE6bmRlKGEpO3JldHVybiB3ZmUoKSx3ZmUoKSxmZmU7Y2FzZSAxMDpzd2l0Y2goYS5hKXtjYXNlIDY1OnJldHVybiBhLnlsKCk7Y2FzZSA5MDpyZXR1cm4gYS5EbCgpO2Nhc2UgMTIyOnJldHVybiBhLktsKCk7Y2FzZSA5ODpyZXR1cm4gYS5FbCgpO2Nhc2UgNjY6cmV0dXJuIGEuemwoKTtjYXNlIDYwOnJldHVybiBhLkpsKCk7Y2FzZSA2MjpyZXR1cm4gYS5IbCgpO319Zj1wZGUoYSk7Yj1hLmM7c3dpdGNoKGIpe2Nhc2UgMzpyZXR1cm4gYS5abChmKTtjYXNlIDQ6cmV0dXJuIGEuWGwoZik7Y2FzZSA1OnJldHVybiBhLllsKGYpO2Nhc2UgMDppZihhLmE9PTEyMyYmYS5kPGEuail7ZT1hLmQ7ZD0wO2M9LTE7aWYoKGI9YmZiKGEuaSxlKyspKT49NDgmJmI8PTU3KXtkPWItNDg7d2hpbGUoZTxhLmomJihiPWJmYihhLmksZSsrKSk+PTQ4JiZiPD01Nyl7ZD1kKjEwK2ItNDg7aWYoZDwwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksYnZlKSkpKX19ZWxzZXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFp1ZSkpKSl9Yz1kO2lmKGI9PTQ0KXtpZihlPj1hLmope3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksX3VlKSkpKX1lbHNlIGlmKChiPWJmYihhLmksZSsrKSk+PTQ4JiZiPD01Nyl7Yz1iLTQ4O3doaWxlKGU8YS5qJiYoYj1iZmIoYS5pLGUrKykpPj00OCYmYjw9NTcpe2M9YyoxMCtiLTQ4O2lmKGM8MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLGJ2ZSkpKSl9aWYoZD5jKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksYXZlKSkpKX1lbHNle2M9LTF9fWlmKGIhPTEyNSl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLCR1ZSkpKSk7aWYoYS5zbChlKSl7Zj0od2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGxnZSg5LGYpKTthLmQ9ZSsxfWVsc2V7Zj0od2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGxnZSgzLGYpKTthLmQ9ZX1mLmRtKGQpO2YuY20oYyk7bmRlKGEpfX1yZXR1cm4gZn1cbmZ1bmN0aW9uICRiYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEY7cD1uZXcgU2tiKGIuYik7dT1uZXcgU2tiKGIuYik7bT1uZXcgU2tiKGIuYik7Qj1uZXcgU2tiKGIuYik7cT1uZXcgU2tiKGIuYik7Zm9yKEE9SnNiKGIsMCk7QS5iIT1BLmQuYzspe3Y9QkQoWHNiKEEpLDExKTtmb3IoaD1uZXcgb2xiKHYuZyk7aC5hPGguYy5jLmxlbmd0aDspe2Y9QkQobWxiKGgpLDE3KTtpZihmLmMuaT09Zi5kLmkpe2lmKHYuaj09Zi5kLmope0IuY1tCLmMubGVuZ3RoXT1mO2NvbnRpbnVlfWVsc2UgaWYodi5qPT0oVWNkKCksQWNkKSYmZi5kLmo9PVJjZCl7cS5jW3EuYy5sZW5ndGhdPWY7Y29udGludWV9fX19Zm9yKGk9bmV3IG9sYihxKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoaSksMTcpO19iYyhhLGYsYyxkLChVY2QoKSx6Y2QpKX1mb3IoZz1uZXcgb2xiKEIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxNyk7Qz1uZXcgYjBiKGEpO19fYihDLChqMGIoKSxpMGIpKTt5TmIoQywoTnljKCksVnhjKSwoZGNkKCksJGJkKSk7eU5iKEMsKHd0YygpLCRzYyksZik7RD1uZXcgSDBiO3lOYihELCRzYyxmLmQpO0cwYihELChVY2QoKSxUY2QpKTtGMGIoRCxDKTtGPW5ldyBIMGI7eU5iKEYsJHNjLGYuYyk7RzBiKEYsemNkKTtGMGIoRixDKTt5TmIoZi5jLGd0YyxDKTt5TmIoZi5kLGd0YyxDKTtRWmIoZixudWxsKTtSWmIoZixudWxsKTtjLmNbYy5jLmxlbmd0aF09Qzt5TmIoQyx5c2MsbWViKDIpKX1mb3Iodz1Kc2IoYiwwKTt3LmIhPXcuZC5jOyl7dj1CRChYc2IodyksMTEpO2o9di5lLmMubGVuZ3RoPjA7cj12LmcuYy5sZW5ndGg+MDtqJiZyPyhtLmNbbS5jLmxlbmd0aF09dix0cnVlKTpqPyhwLmNbcC5jLmxlbmd0aF09dix0cnVlKTpyJiYodS5jW3UuYy5sZW5ndGhdPXYsdHJ1ZSl9Zm9yKG89bmV3IG9sYihwKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1CRChtbGIobyksMTEpO0VrYihlLFpiYyhhLG4sbnVsbCxjKSl9Zm9yKHQ9bmV3IG9sYih1KTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1CRChtbGIodCksMTEpO0VrYihlLFpiYyhhLG51bGwscyxjKSl9Zm9yKGw9bmV3IG9sYihtKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1CRChtbGIobCksMTEpO0VrYihlLFpiYyhhLGssayxjKSl9fVxuZnVuY3Rpb24gTkNiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7cz1uZXcgZjdjKFBqZSxQamUpO2I9bmV3IGY3YyhRamUsUWplKTtmb3IoQj1uZXcgb2xiKGEpO0IuYTxCLmMuYy5sZW5ndGg7KXtBPUJEKG1sYihCKSw4KTtzLmE9JHduZC5NYXRoLm1pbihzLmEsQS5hKTtzLmI9JHduZC5NYXRoLm1pbihzLmIsQS5iKTtiLmE9JHduZC5NYXRoLm1heChiLmEsQS5hKTtiLmI9JHduZC5NYXRoLm1heChiLmIsQS5iKX1tPW5ldyBmN2MoYi5hLXMuYSxiLmItcy5iKTtqPW5ldyBmN2Mocy5hLTUwLHMuYi1tLmEtNTApO2s9bmV3IGY3YyhzLmEtNTAsYi5iK20uYSs1MCk7bD1uZXcgZjdjKGIuYSttLmIvMis1MCxzLmIrbS5iLzIpO249bmV3IGVEYihqLGssbCk7dz1uZXcgVHFiO2Y9bmV3IFJrYjtjPW5ldyBSa2I7dy5hLnpjKG4sdyk7Zm9yKEQ9bmV3IG9sYihhKTtELmE8RC5jLmMubGVuZ3RoOyl7Qz1CRChtbGIoRCksOCk7Zi5jPUtDKFNJLFVoZSwxLDAsNSwxKTtmb3Iodj13LmEuZWMoKS5LYygpO3YuT2IoKTspe3Q9QkQodi5QYigpLDMwOCk7ZD10LmQ7UzZjKGQsdC5hKTtKeShTNmModC5kLEMpLFM2Yyh0LmQsdC5hKSk8MCYmKGYuY1tmLmMubGVuZ3RoXT10LHRydWUpfWMuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Zm9yKHU9bmV3IG9sYihmKTt1LmE8dS5jLmMubGVuZ3RoOyl7dD1CRChtbGIodSksMzA4KTtmb3IocT1uZXcgb2xiKHQuZSk7cS5hPHEuYy5jLmxlbmd0aDspe289QkQobWxiKHEpLDE2OCk7Zz10cnVlO2ZvcihpPW5ldyBvbGIoZik7aS5hPGkuYy5jLmxlbmd0aDspe2g9QkQobWxiKGkpLDMwOCk7aCE9dCYmKHd0YihvLElrYihoLmUsMCkpfHx3dGIobyxJa2IoaC5lLDEpKXx8d3RiKG8sSWtiKGguZSwyKSkpJiYoZz1mYWxzZSl9ZyYmKGMuY1tjLmMubGVuZ3RoXT1vLHRydWUpfX1WZSh3LGYpO3JlYih3LG5ldyBPQ2IpO2ZvcihwPW5ldyBvbGIoYyk7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDE2OCk7UXFiKHcsbmV3IGVEYihDLG8uYSxvLmIpKX19cj1uZXcgVHFiO3JlYih3LG5ldyBRQ2IocikpO2U9ci5hLmVjKCkuS2MoKTt3aGlsZShlLk9iKCkpe289QkQoZS5QYigpLDE2OCk7KGREYihuLG8uYSl8fGREYihuLG8uYikpJiZlLlFiKCl9cmViKHIsbmV3IFNDYik7cmV0dXJuIHJ9XG5mdW5jdGlvbiBfVGIoYSl7dmFyIGIsYyxkLGUsZjtjPUJEKHZOYihhLCh3dGMoKSxLc2MpKSwyMSk7Yj1rM2MoV1RiKTtlPUJEKHZOYihhLChOeWMoKSxheGMpKSwzMzQpO2U9PShoYmQoKSxlYmQpJiZkM2MoYixYVGIpO0NjYihERCh2TmIoYSwkd2MpKSk/ZTNjKGIsKHFVYigpLGxVYiksKFM4YigpLEk4YikpOmUzYyhiLChxVWIoKSxuVWIpLChTOGIoKSxJOGIpKTt2TmIoYSwoZzZjKCksZjZjKSkhPW51bGwmJmQzYyhiLFlUYik7KENjYihERCh2TmIoYSxoeGMpKSl8fENjYihERCh2TmIoYSxfd2MpKSkpJiZjM2MoYiwocVViKCkscFViKSwoUzhiKCksVzdiKSk7c3dpdGNoKEJEKHZOYihhLEx3YyksMTAzKS5nKXtjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjM2MoZTNjKGIsKHFVYigpLGxVYiksKFM4YigpLFk3YikpLHBVYixYN2IpO31jLkhjKChPcmMoKSxGcmMpKSYmYzNjKGUzYyhlM2MoYiwocVViKCksbFViKSwoUzhiKCksVjdiKSksb1ViLFQ3YikscFViLFU3Yik7UEQodk5iKGEscnhjKSkhPT1QRCgoa0FjKCksaUFjKSkmJmUzYyhiLChxVWIoKSxuVWIpLChTOGIoKSxBOGIpKTtpZihjLkhjKE1yYykpe2UzYyhiLChxVWIoKSxsVWIpLChTOGIoKSxHOGIpKTtlM2MoYixtVWIsRThiKTtlM2MoYixuVWIsRjhiKX1QRCh2TmIoYSxzd2MpKSE9PVBEKCh5cmMoKSx3cmMpKSYmUEQodk5iKGEsU3djKSkhPT1QRCgoQWFkKCkseGFkKSkmJmMzYyhiLChxVWIoKSxwVWIpLChTOGIoKSxqOGIpKTtDY2IoREQodk5iKGEsY3hjKSkpJiZlM2MoYiwocVViKCksblViKSwoUzhiKCksaThiKSk7Q2NiKEREKHZOYihhLEh3YykpKSYmZTNjKGIsKHFVYigpLG5VYiksKFM4YigpLE84YikpO2lmKGNVYihhKSl7UEQodk5iKGEsYXhjKSk9PT1QRChlYmQpPyhkPUJEKHZOYihhLEN3YyksMjkyKSk6KGQ9QkQodk5iKGEsRHdjKSwyOTIpKTtmPWQ9PShYcmMoKSxWcmMpPyhTOGIoKSxEOGIpOihTOGIoKSxSOGIpO2UzYyhiLChxVWIoKSxvVWIpLGYpfXN3aXRjaChCRCh2TmIoYSxLeWMpLDM3NykuZyl7Y2FzZSAxOmUzYyhiLChxVWIoKSxvVWIpLChTOGIoKSxQOGIpKTticmVhaztjYXNlIDI6YzNjKGUzYyhlM2MoYiwocVViKCksblViKSwoUzhiKCksUDdiKSksb1ViLFE3YikscFViLFI3Yik7fVBEKHZOYihhLHl3YykpIT09UEQoKHRBYygpLHJBYykpJiZlM2MoYiwocVViKCksblViKSwoUzhiKCksUThiKSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBtWmMoYSl7cjRjKGEsbmV3IEUzYyhQM2MoTTNjKE8zYyhOM2MobmV3IFIzYyxLcmUpLCdFTEsgUmVjdGFuZ2xlIFBhY2tpbmcnKSwnQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiBUaGUgZ2l2ZW4gb3JkZXIgb2YgdGhlIGJveGVzIGlzIGFsd2F5cyBwcmVzZXJ2ZWQgYW5kIHRoZSBtYWluIHJlYWRpbmcgZGlyZWN0aW9uIG9mIHRoZSBib3hlcyBpcyBsZWZ0IHRvIHJpZ2h0LiBUaGUgYWxnb3JpdGhtIGlzIGRpdmlkZWQgaW50byB0d28gcGhhc2VzLiBPbmUgcGhhc2UgYXBwcm94aW1hdGVzIHRoZSB3aWR0aCBpbiB3aGljaCB0aGUgcmVjdGFuZ2xlcyBjYW4gYmUgcGxhY2VkLiBUaGUgbmV4dCBwaGFzZSBwbGFjZXMgdGhlIHJlY3RhbmdsZXMgaW4gcm93cyB1c2luZyB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIHdpZHRoIGFzIGJvdW5kaW5nIHdpZHRoIGFuZCBidW5kbGVzIHJlY3RhbmdsZXMgd2l0aCBhIHNpbWlsYXIgaGVpZ2h0IGluIGJsb2Nrcy4gQSBjb21wYWN0aW9uIHN0ZXAgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgZHJhd2luZy4gRmluYWxseSwgdGhlIHJlY3RhbmdsZXMgYXJlIGV4cGFuZGVkIHRvIGZpbGwgdGhlaXIgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgdW51c2VkIHNwYWNlcy4nKSxuZXcgcFpjKSkpO3A0YyhhLEtyZSxfbGUsMS4zKTtwNGMoYSxLcmUsSnJlLEtzZChWWWMpKTtwNGMoYSxLcmUsYW1lLGdaYyk7cDRjKGEsS3JlLHdtZSwxNSk7cDRjKGEsS3JlLGxxZSxLc2QoU1ljKSk7cDRjKGEsS3JlLEZtZSxLc2QoX1ljKSk7cDRjKGEsS3JlLFRtZSxLc2QoYVpjKSk7cDRjKGEsS3JlLEVtZSxLc2QoYlpjKSk7cDRjKGEsS3JlLEdtZSxLc2QoJFljKSk7cDRjKGEsS3JlLERtZSxLc2QoY1pjKSk7cDRjKGEsS3JlLEhtZSxLc2QoaFpjKSk7cDRjKGEsS3JlLEJyZSxLc2QoZVpjKSk7cDRjKGEsS3JlLENyZSxLc2QoWlljKSk7cDRjKGEsS3JlLEZyZSxLc2QoZFpjKSk7cDRjKGEsS3JlLEdyZSxLc2QoaVpjKSk7cDRjKGEsS3JlLEhyZSxLc2QoV1ljKSk7cDRjKGEsS3JlLEFtZSxLc2QoWFljKSk7cDRjKGEsS3JlLHhxZSxLc2QoWVljKSk7cDRjKGEsS3JlLEVyZSxLc2QoVVljKSk7cDRjKGEsS3JlLERyZSxLc2QoVFljKSk7cDRjKGEsS3JlLElyZSxLc2Qoa1pjKSl9XG5mdW5jdGlvbiBXbWQoYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7aWYoZD09bnVsbCl7cmV0dXJuIG51bGx9aWYoYi5hIT1jLkFqKCkpe3Rocm93IHZiYihuZXcgV2RiKHR0ZStjLm5lKCkrdXRlKSl9aWYoSkQoYyw0NTcpKXtyPV9QZChCRChjLDY3MSksZCk7aWYoIXIpe3Rocm93IHZiYihuZXcgV2RiKHZ0ZStkK1wiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICdcIitjLm5lKCkrXCInXCIpKX1yZXR1cm4gcn1zd2l0Y2gobzFkKChPNmQoKSxNNmQpLGMpLmNsKCkpe2Nhc2UgMjp7ZD1RZ2UoZCxmYWxzZSk7YnJlYWt9Y2FzZSAzOntkPVFnZShkLHRydWUpO2JyZWFrfX1lPW8xZChNNmQsYykuJGsoKTtpZihlKXtyZXR1cm4gZS5BaigpLk5oKCkuS2goZSxkKX1uPW8xZChNNmQsYykuYWwoKTtpZihuKXtyPW5ldyBSa2I7Zm9yKGs9Wm1kKGQpLGw9MCxtPWsubGVuZ3RoO2w8bTsrK2wpe2o9a1tsXTtFa2IocixuLkFqKCkuTmgoKS5LaChuLGopKX1yZXR1cm4gcn1xPW8xZChNNmQsYykuYmwoKTtpZighcS5kYygpKXtmb3IocD1xLktjKCk7cC5PYigpOyl7bz1CRChwLlBiKCksMTQ4KTt0cnl7cj1vLkFqKCkuTmgoKS5LaChvLGQpO2lmKHIhPW51bGwpe3JldHVybiByfX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSw2MCkpdGhyb3cgdmJiKGEpfX10aHJvdyB2YmIobmV3IFdkYih2dGUrZCtcIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJ1wiK2MubmUoKStcIidcIikpfUJEKGMsODM0KS5GaigpO2Y9cjZkKGMuQmooKSk7aWYoIWYpcmV0dXJuIG51bGw7aWYoZj09eUkpe2g9MDt0cnl7aD1JY2IoZCxSaWUsT2hlKSZhamV9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMjcpKXtnPXJmYihkKTtoPWdbMF19ZWxzZSB0aHJvdyB2YmIoYSl9cmV0dXJuIGJkYihoKX1pZihmPT0kSil7Zm9yKGk9MDtpPFBtZC5sZW5ndGg7KytpKXt0cnl7cmV0dXJuIERRZChQbWRbaV0sZCl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoIUpEKGEsMzIpKXRocm93IHZiYihhKX19dGhyb3cgdmJiKG5ldyBXZGIodnRlK2QrXCInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2ZcIikpfXRocm93IHZiYihuZXcgV2RiKHZ0ZStkK1wiJyBpcyBpbnZhbGlkLiBcIikpfVxuZnVuY3Rpb24gbmdiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtjPTA7Zz0wO2Y9Yi5sZW5ndGg7aD1udWxsO2o9bmV3IFZmYjtpZihnPGYmJihCQ2IoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpPT00MykpeysrZzsrK2M7aWYoZzxmJiYoQkNiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKT09NDN8fChCQ2IoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpPT00NSkpKXt0aHJvdyB2YmIobmV3IE9lYihPamUrYisnXCInKSl9fXdoaWxlKGc8ZiYmKEJDYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZykhPTQ2KSYmKEJDYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZykhPTEwMSkmJihCQ2IoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpIT02OSkpeysrZ31qLmErPScnK3FmYihiPT1udWxsP1hoZToodUNiKGIpLGIpLGMsZyk7aWYoZzxmJiYoQkNiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKT09NDYpKXsrK2c7Yz1nO3doaWxlKGc8ZiYmKEJDYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZykhPTEwMSkmJihCQ2IoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpIT02OSkpeysrZ31hLmU9Zy1jO2ouYSs9JycrcWZiKGI9PW51bGw/WGhlOih1Q2IoYiksYiksYyxnKX1lbHNle2EuZT0wfWlmKGc8ZiYmKEJDYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTEwMXx8KEJDYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTY5KSkpeysrZztjPWc7aWYoZzxmJiYoQkNiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKT09NDMpKXsrK2c7ZzxmJiYoQkNiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKSE9NDUpJiYrK2N9aD1iLnN1YnN0cihjLGYtYyk7YS5lPWEuZS1JY2IoaCxSaWUsT2hlKTtpZihhLmUhPVFEKGEuZSkpe3Rocm93IHZiYihuZXcgT2ViKCdTY2FsZSBvdXQgb2YgcmFuZ2UuJykpfX1pPWouYTtpZihpLmxlbmd0aDwxNil7YS5mPShrZ2I9PW51bGwmJihrZ2I9bmV3IFJlZ0V4cCgnXlsrLV0/XFxcXGQqJCcsJ2knKSksa2diLnRlc3QoaSk/cGFyc2VJbnQoaSwxMCk6TmFOKTtpZihpc05hTihhLmYpKXt0aHJvdyB2YmIobmV3IE9lYihPamUrYisnXCInKSl9YS5hPXVnYihhLmYpfWVsc2V7b2diKGEsbmV3IFlnYihpKSl9YS5kPWouYS5sZW5ndGg7Zm9yKGU9MDtlPGouYS5sZW5ndGg7KytlKXtkPWJmYihqLmEsZSk7aWYoZCE9NDUmJmQhPTQ4KXticmVha30tLWEuZH1hLmQ9PTAmJihhLmQ9MSl9XG5mdW5jdGlvbiB4WGIoKXt4WGI9Y2NiO3dYYj1uZXcgSHA7UmMod1hiLChVY2QoKSxGY2QpLEpjZCk7UmMod1hiLFFjZCxKY2QpO1JjKHdYYixRY2QsTWNkKTtSYyh3WGIsQmNkLEljZCk7UmMod1hiLEJjZCxKY2QpO1JjKHdYYixHY2QsSmNkKTtSYyh3WGIsR2NkLEtjZCk7UmMod1hiLE9jZCxEY2QpO1JjKHdYYixPY2QsSmNkKTtSYyh3WGIsTGNkLEVjZCk7UmMod1hiLExjZCxKY2QpO1JjKHdYYixMY2QsS2NkKTtSYyh3WGIsTGNkLERjZCk7UmMod1hiLEVjZCxMY2QpO1JjKHdYYixFY2QsTWNkKTtSYyh3WGIsRWNkLEljZCk7UmMod1hiLEVjZCxKY2QpO1JjKHdYYixOY2QsTmNkKTtSYyh3WGIsTmNkLEtjZCk7UmMod1hiLE5jZCxNY2QpO1JjKHdYYixIY2QsSGNkKTtSYyh3WGIsSGNkLEtjZCk7UmMod1hiLEhjZCxJY2QpO1JjKHdYYixQY2QsUGNkKTtSYyh3WGIsUGNkLERjZCk7UmMod1hiLFBjZCxNY2QpO1JjKHdYYixDY2QsQ2NkKTtSYyh3WGIsQ2NkLERjZCk7UmMod1hiLENjZCxJY2QpO1JjKHdYYixLY2QsR2NkKTtSYyh3WGIsS2NkLExjZCk7UmMod1hiLEtjZCxOY2QpO1JjKHdYYixLY2QsSGNkKTtSYyh3WGIsS2NkLEpjZCk7UmMod1hiLEtjZCxLY2QpO1JjKHdYYixLY2QsTWNkKTtSYyh3WGIsS2NkLEljZCk7UmMod1hiLERjZCxPY2QpO1JjKHdYYixEY2QsTGNkKTtSYyh3WGIsRGNkLFBjZCk7UmMod1hiLERjZCxDY2QpO1JjKHdYYixEY2QsRGNkKTtSYyh3WGIsRGNkLE1jZCk7UmMod1hiLERjZCxJY2QpO1JjKHdYYixEY2QsSmNkKTtSYyh3WGIsTWNkLFFjZCk7UmMod1hiLE1jZCxFY2QpO1JjKHdYYixNY2QsTmNkKTtSYyh3WGIsTWNkLFBjZCk7UmMod1hiLE1jZCxLY2QpO1JjKHdYYixNY2QsRGNkKTtSYyh3WGIsTWNkLE1jZCk7UmMod1hiLE1jZCxKY2QpO1JjKHdYYixJY2QsQmNkKTtSYyh3WGIsSWNkLEVjZCk7UmMod1hiLEljZCxIY2QpO1JjKHdYYixJY2QsQ2NkKTtSYyh3WGIsSWNkLEtjZCk7UmMod1hiLEljZCxEY2QpO1JjKHdYYixJY2QsSWNkKTtSYyh3WGIsSWNkLEpjZCk7UmMod1hiLEpjZCxGY2QpO1JjKHdYYixKY2QsUWNkKTtSYyh3WGIsSmNkLEJjZCk7UmMod1hiLEpjZCxHY2QpO1JjKHdYYixKY2QsT2NkKTtSYyh3WGIsSmNkLExjZCk7UmMod1hiLEpjZCxFY2QpO1JjKHdYYixKY2QsS2NkKTtSYyh3WGIsSmNkLERjZCk7UmMod1hiLEpjZCxNY2QpO1JjKHdYYixKY2QsSWNkKTtSYyh3WGIsSmNkLEpjZCl9XG5mdW5jdGlvbiBZWGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCO2EuZD1uZXcgZjdjKFBqZSxQamUpO2EuYz1uZXcgZjdjKFFqZSxRamUpO2ZvcihtPWIuS2MoKTttLk9iKCk7KXtrPUJEKG0uUGIoKSwzNyk7Zm9yKHQ9bmV3IG9sYihrLmEpO3QuYTx0LmMuYy5sZW5ndGg7KXtzPUJEKG1sYih0KSwxMCk7YS5kLmE9JHduZC5NYXRoLm1pbihhLmQuYSxzLm4uYS1zLmQuYik7YS5kLmI9JHduZC5NYXRoLm1pbihhLmQuYixzLm4uYi1zLmQuZCk7YS5jLmE9JHduZC5NYXRoLm1heChhLmMuYSxzLm4uYStzLm8uYStzLmQuYyk7YS5jLmI9JHduZC5NYXRoLm1heChhLmMuYixzLm4uYitzLm8uYitzLmQuYSl9fWg9bmV3IG5ZYjtmb3IobD1iLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMzcpO2Q9ZlliKGEsayk7RWtiKGguYSxkKTtkLmE9ZC5hfCFCRCh2TmIoZC5jLCh3dGMoKSxFc2MpKSwyMSkuZGMoKX1hLmI9KExVYigpLEI9bmV3IFZVYixCLmY9bmV3IENVYihjKSxCLmI9QlViKEIuZixoKSxCKTtQVWIoKG89YS5iLG5ldyBaZGQsbykpO2EuZT1uZXcgZDdjO2EuYT1hLmIuZi5lO2ZvcihnPW5ldyBvbGIoaC5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZyksODQxKTt1PVFVYihhLmIsZSk7Z19iKGUuYyx1LmEsdS5iKTtmb3IocT1uZXcgb2xiKGUuYy5hKTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1CRChtbGIocSksMTApO2lmKHAuaz09KGowYigpLGUwYikpe3I9YVliKGEscC5uLEJEKHZOYihwLCh3dGMoKSxIc2MpKSw2MSkpO1A2YyhYNmMocC5uKSxyKX19fWZvcihmPW5ldyBvbGIoaC5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksODQxKTtmb3Ioaj1uZXcgb2xiKGxZYihlKSk7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDE3KTtBPW5ldyB0N2MoaS5hKTtTdChBLDAsQTBiKGkuYykpO0RzYihBLEEwYihpLmQpKTtuPW51bGw7Zm9yKHc9SnNiKEEsMCk7dy5iIT13LmQuYzspe3Y9QkQoWHNiKHcpLDgpO2lmKCFuKXtuPXY7Y29udGludWV9aWYoS3kobi5hLHYuYSkpe2EuZS5hPSR3bmQuTWF0aC5taW4oYS5lLmEsbi5hKTthLmEuYT0kd25kLk1hdGgubWF4KGEuYS5hLG4uYSl9ZWxzZSBpZihLeShuLmIsdi5iKSl7YS5lLmI9JHduZC5NYXRoLm1pbihhLmUuYixuLmIpO2EuYS5iPSR3bmQuTWF0aC5tYXgoYS5hLmIsbi5iKX1uPXZ9fX1WNmMoYS5lKTtQNmMoYS5hLGEuZSl9XG5mdW5jdGlvbiB3WmQoYSl7Qm5kKGEuYixfdmUsT0MoR0MoWkksMSksbmllLDIsNixbYndlLCdDb25zaXN0ZW50VHJhbnNpZW50J10pKTtCbmQoYS5hLF92ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtid2UsJ1dlbGxGb3JtZWRTb3VyY2VVUkknXSkpO0JuZChhLm8sX3ZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2J3ZSwnSW50ZXJmYWNlSXNBYnN0cmFjdCBBdE1vc3RPbmVJRCBVbmlxdWVGZWF0dXJlTmFtZXMgVW5pcXVlT3BlcmF0aW9uU2lnbmF0dXJlcyBOb0NpcmN1bGFyU3VwZXJUeXBlcyBXZWxsRm9ybWVkTWFwRW50cnlDbGFzcyBDb25zaXN0ZW50U3VwZXJUeXBlcyBEaXNqb2ludEZlYXR1cmVBbmRPcGVyYXRpb25TaWduYXR1cmVzJ10pKTtCbmQoYS5wLF92ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtid2UsJ1dlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyddKSk7Qm5kKGEudixfdmUsT0MoR0MoWkksMSksbmllLDIsNixbYndlLCdVbmlxdWVFbnVtZXJhdG9yTmFtZXMgVW5pcXVlRW51bWVyYXRvckxpdGVyYWxzJ10pKTtCbmQoYS5SLF92ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtid2UsJ1dlbGxGb3JtZWROYW1lJ10pKTtCbmQoYS5ULF92ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtid2UsJ1VuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQnXSkpO0JuZChhLlUsX3ZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2J3ZSwnV2VsbEZvcm1lZE5zVVJJIFdlbGxGb3JtZWROc1ByZWZpeCBVbmlxdWVTdWJwYWNrYWdlTmFtZXMgVW5pcXVlQ2xhc3NpZmllck5hbWVzIFVuaXF1ZU5zVVJJcyddKSk7Qm5kKGEuVyxfdmUsT0MoR0MoWkksMSksbmllLDIsNixbYndlLCdDb25zaXN0ZW50T3Bwb3NpdGUgU2luZ2xlQ29udGFpbmVyIENvbnNpc3RlbnRLZXlzIENvbnNpc3RlbnRVbmlxdWUgQ29uc2lzdGVudENvbnRhaW5lciddKSk7Qm5kKGEuYmIsX3ZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2J3ZSwnVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsJ10pKTtCbmQoYS5lYixfdmUsT0MoR0MoWkksMSksbmllLDIsNixbYndlLCdWYWxpZExvd2VyQm91bmQgVmFsaWRVcHBlckJvdW5kIENvbnNpc3RlbnRCb3VuZHMgVmFsaWRUeXBlJ10pKTtCbmQoYS5ILF92ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtid2UsJ0NvbnNpc3RlbnRUeXBlIENvbnNpc3RlbnRCb3VuZHMgQ29uc2lzdGVudEFyZ3VtZW50cyddKSl9XG5mdW5jdGlvbiBCNGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEM7aWYoYi5kYygpKXtyZXR1cm59ZT1uZXcgczdjO2g9Yz9jOkJEKGIuWGIoMCksMTcpO289aC5jO2hRYygpO209by5pLms7aWYoIShtPT0oajBiKCksaDBiKXx8bT09aTBifHxtPT1lMGJ8fG09PWQwYikpe3Rocm93IHZiYihuZXcgV2RiKCdUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuJykpfUZzYihlLGw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtvLmkubixvLm4sby5hXSkpKTtpZigoVWNkKCksTGNkKS5IYyhvLmopKXtxPUVkYihFRCh2TmIobywod3RjKCkscXRjKSkpKTtsPW5ldyBmN2MobDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW28uaS5uLG8ubixvLmFdKSkuYSxxKTtHc2IoZSxsLGUuYy5iLGUuYyl9az1udWxsO2Q9ZmFsc2U7aT1iLktjKCk7d2hpbGUoaS5PYigpKXtnPUJEKGkuUGIoKSwxNyk7Zj1nLmE7aWYoZi5iIT0wKXtpZihkKXtqPVk2YyhQNmMoaywoc0NiKGYuYiE9MCksQkQoZi5hLmEuYyw4KSkpLDAuNSk7R3NiKGUsaixlLmMuYixlLmMpO2Q9ZmFsc2V9ZWxzZXtkPXRydWV9az1SNmMoKHNDYihmLmIhPTApLEJEKGYuYy5iLmMsOCkpKTt5ZShlLGYpO09zYihmKX19cD1oLmQ7aWYoTGNkLkhjKHAuaikpe3E9RWRiKEVEKHZOYihwLCh3dGMoKSxxdGMpKSkpO2w9bmV3IGY3YyhsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbcC5pLm4scC5uLHAuYV0pKS5hLHEpO0dzYihlLGwsZS5jLmIsZS5jKX1Gc2IoZSxsN2MoT0MoR0MobTEsMSksbmllLDgsMCxbcC5pLm4scC5uLHAuYV0pKSk7YS5kPT0odEJjKCkscUJjKSYmKHI9KHNDYihlLmIhPTApLEJEKGUuYS5hLmMsOCkpLHM9QkQoVXQoZSwxKSw4KSx0PW5ldyBlN2MoYlJjKG8uaikpLHQuYSo9NSx0LmIqPTUsdT1jN2MobmV3IGY3YyhzLmEscy5iKSxyKSx2PW5ldyBmN2MoQTRiKHQuYSx1LmEpLEE0Yih0LmIsdS5iKSksUDZjKHYsciksdz1Kc2IoZSwxKSxWc2Iodyx2KSxBPShzQ2IoZS5iIT0wKSxCRChlLmMuYi5jLDgpKSxCPUJEKFV0KGUsZS5iLTIpLDgpLHQ9bmV3IGU3YyhiUmMocC5qKSksdC5hKj01LHQuYio9NSx1PWM3YyhuZXcgZjdjKEIuYSxCLmIpLEEpLEM9bmV3IGY3YyhBNGIodC5hLHUuYSksQTRiKHQuYix1LmIpKSxQNmMoQyxBKSxTdChlLGUuYi0xLEMpLHVuZGVmaW5lZCk7bj1uZXcgWVBjKGUpO3llKGguYSxVUGMobikpfVxuZnVuY3Rpb24gS2dkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSSxKLEssTCxNLE4sTyxQO3Q9QkQocXVkKCghYS5iJiYoYS5iPW5ldyB5NWQoejIsYSw0LDcpKSxhLmIpLDApLDgyKTt2PXQuRGcoKTt3PXQuRWcoKTt1PXQuQ2coKS8yO3A9dC5CZygpLzI7aWYoSkQodCwxODYpKXtzPUJEKHQsMTE4KTt2Kz1tcGQocykuaTt2Kz1tcGQocykuaX12Kz11O3crPXA7Rj1CRChxdWQoKCFhLmImJihhLmI9bmV3IHk1ZCh6MixhLDQsNykpLGEuYiksMCksODIpO0g9Ri5EZygpO0k9Ri5FZygpO0c9Ri5DZygpLzI7QT1GLkJnKCkvMjtpZihKRChGLDE4Nikpe0Q9QkQoRiwxMTgpO0grPW1wZChEKS5pO0grPW1wZChEKS5pfUgrPUc7SSs9QTtpZigoIWEuYSYmKGEuYT1uZXcgY1VkKEEyLGEsNiw2KSksYS5hKS5pPT0wKXtoPShGaGQoKSxqPW5ldyBybWQsaik7d3RkKCghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLGgpfWVsc2UgaWYoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkuaT4xKXtvPW5ldyBPeWQoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkpO3doaWxlKG8uZSE9by5pLmdjKCkpe0V5ZChvKX19Zz1CRChxdWQoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSksMCksMjAyKTtxPUg7SD52K3U/KHE9dit1KTpIPHYtdSYmKHE9di11KTtyPUk7ST53K3A/KHI9dytwKTpJPHctcCYmKHI9dy1wKTtxPnYtdSYmcTx2K3UmJnI+dy1wJiZyPHcrcCYmKHE9dit1KTtvbWQoZyxxKTtwbWQoZyxyKTtCPXY7dj5IK0c/KEI9SCtHKTp2PEgtRyYmKEI9SC1HKTtDPXc7dz5JK0E/KEM9SStBKTp3PEktQSYmKEM9SS1BKTtCPkgtRyYmQjxIK0cmJkM+SS1BJiZDPEkrQSYmKEM9SStBKTtobWQoZyxCKTtpbWQoZyxDKTtVeGQoKCFnLmEmJihnLmE9bmV3IHhNZCh5MixnLDUpKSxnLmEpKTtmPUJ1YihiLDUpO3Q9PUYmJisrZjtMPUItcTtPPUMtcjtKPSR3bmQuTWF0aC5zcXJ0KEwqTCtPKk8pO2w9SiowLjIwMDAwMDAwMjk4MDIzMjI0O009TC8oZisxKTtQPU8vKGYrMSk7Sz1xO049cjtmb3Ioaz0wO2s8ZjtrKyspe0srPU07Tis9UDttPUsrQ3ViKGIsMjQpKmxrZSpsLWwvMjttPDA/KG09MSk6bT5jJiYobT1jLTEpO249TitDdWIoYiwyNCkqbGtlKmwtbC8yO248MD8obj0xKTpuPmQmJihuPWQtMSk7ZT0oRmhkKCksaT1uZXcgeGtkLGkpO3ZrZChlLG0pO3drZChlLG4pO3d0ZCgoIWcuYSYmKGcuYT1uZXcgeE1kKHkyLGcsNSkpLGcuYSksZSl9fVxuZnVuY3Rpb24gTnljKCl7TnljPWNjYjtpeWM9KFk5YygpLEk5Yyk7anljPUo5YztreWM9SzljO2x5Yz1MOWM7bnljPU05YztveWM9TjljO3J5Yz1QOWM7dHljPVI5Yzt1eWM9UzljO3N5Yz1ROWM7dnljPVQ5Yzt4eWM9VTljO3p5Yz1YOWM7cXljPU85YztoeWM9KGp3YygpLEJ2Yyk7bXljPUN2YztweWM9RHZjO3d5Yz1FdmM7YnljPW5ldyBPc2QoRDljLG1lYigwKSk7Y3ljPXl2YztkeWM9enZjO2V5Yz1BdmM7S3ljPWF3YztDeWM9SHZjO0R5Yz1LdmM7R3ljPVN2YztFeWM9TnZjO0Z5Yz1QdmM7TXljPWZ3YztMeWM9Y3djO0l5Yz1ZdmM7SHljPVd2YztKeWM9JHZjO0N4Yz1wdmM7RHhjPXF2YztYd2M9QXVjO1l3Yz1EdWM7THhjPW5ldyBxMGIoMTIpO0t4Yz1uZXcgT3NkKGY5YyxMeGMpO1R3Yz0oQWFkKCksd2FkKTtTd2M9bmV3IE9zZChFOGMsVHdjKTtVeGM9bmV3IE9zZChzOWMsMCk7ZnljPW5ldyBPc2QoRTljLG1lYigxKSk7b3djPW5ldyBPc2QocjhjLHRtZSk7SnhjPWQ5YztWeGM9dDljOyR4Yz1BOWM7S3djPXk4Yzttd2M9cDhjO2F4Yz1KOGM7Z3ljPW5ldyBPc2QoSDljLChCY2IoKSx0cnVlKSk7ZnhjPU04YztneGM9TjhjO0Z4Yz1ZOGM7SXhjPWI5YztHeGM9JDhjO053Yz0oZWFkKCksY2FkKTtMd2M9bmV3IE9zZCh6OGMsTndjKTt4eGM9VzhjO3d4Yz1VOGM7WXhjPXg5YztYeGM9dzljO1p4Yz16OWM7T3hjPShUYmQoKSxTYmQpO25ldyBPc2QobDljLE94Yyk7UXhjPW85YztSeGM9cDljO1N4Yz1xOWM7UHhjPW45YztCeWM9R3ZjO3N4Yz1hdmM7cnhjPSR1YztBeWM9RnZjO214Yz1TdWM7SndjPW11YztJd2M9a3VjO0F3Yz1YdGM7QndjPVl0YztEd2M9YnVjO0N3Yz1adGM7SHdjPWl1Yzt1eGM9Y3ZjO3Z4Yz1kdmM7aXhjPUx1YztFeGM9dXZjO3p4Yz1odmM7JHdjPUd1YztCeGM9bnZjO1Z3Yz13dWM7V3djPXl1Yzt6d2M9dzhjO3l4Yz1ldmM7c3djPU10Yztyd2M9S3RjO3F3Yz1KdGM7Y3hjPUp1YztieGM9SXVjO2R4Yz1LdWM7SHhjPV84YztqeGM9UThjO1p3Yz1HOGM7UXdjPUM4YztQd2M9QjhjO0V3Yz1ldWM7V3hjPXY5Yztwd2M9djhjO2V4Yz1MOGM7VHhjPXI5YztNeGM9aDljO054Yz1qOWM7b3hjPVZ1YztweGM9WHVjO2F5Yz1DOWM7bndjPUl0YztxeGM9WnVjO1J3Yz1zdWM7T3djPXF1Yzt0eGM9UzhjO2t4Yz1QdWM7QXhjPWt2Yzt5eWM9VjljO013Yz1vdWM7X3hjPXd2YztVd2M9dXVjO2x4Yz1SdWM7RndjPWd1YztoeGM9UDhjO254Yz1VdWM7R3djPWh1Yzt5d2M9VnRjO3d3Yz1TdGM7dXdjPVF0Yzt2d2M9UnRjO3h3Yz1VdGM7dHdjPU90Yztfd2M9SHVjfVxuZnVuY3Rpb24gc2hiKGEsYil7cGhiKCk7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEg7Qj1hLmU7bz1hLmQ7ZT1hLmE7aWYoQj09MCl7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gJzAnO2Nhc2UgMTpyZXR1cm4gJGplO2Nhc2UgMjpyZXR1cm4gJzAuMDAnO2Nhc2UgMzpyZXR1cm4gJzAuMDAwJztjYXNlIDQ6cmV0dXJuICcwLjAwMDAnO2Nhc2UgNTpyZXR1cm4gJzAuMDAwMDAnO2Nhc2UgNjpyZXR1cm4gJzAuMDAwMDAwJztkZWZhdWx0Onc9bmV3IFVmYjtiPDA/KHcuYSs9JzBFKycsdyk6KHcuYSs9JzBFJyx3KTt3LmErPS1iO3JldHVybiB3LmE7fX10PW8qMTArMSs3O3U9S0MoVEQsJGllLDI1LHQrMSwxNSwxKTtjPXQ7aWYobz09MSl7aD1lWzBdO2lmKGg8MCl7SD14YmIoaCxZamUpO2Rve3A9SDtIPUFiYihILDEwKTt1Wy0tY109NDgrVGJiKFFiYihwLEliYihILDEwKSkpJmFqZX13aGlsZSh5YmIoSCwwKSE9MCl9ZWxzZXtIPWg7ZG97cD1IO0g9SC8xMHwwO3VbLS1jXT00OCsocC1IKjEwKSZhamV9d2hpbGUoSCE9MCl9fWVsc2V7RD1LQyhXRCxvamUsMjUsbywxNSwxKTtHPW87JGZiKGUsMCxELDAsRyk7STp3aGlsZSh0cnVlKXtBPTA7Zm9yKGo9Ry0xO2o+PTA7ai0tKXtGPXdiYihOYmIoQSwzMikseGJiKERbal0sWWplKSk7cj1xaGIoRik7RFtqXT1UYmIocik7QT1UYmIoT2JiKHIsMzIpKX1zPVRiYihBKTtxPWM7ZG97dVstLWNdPTQ4K3MlMTAmYWplfXdoaWxlKChzPXMvMTB8MCkhPTAmJmMhPTApO2Q9OS1xK2M7Zm9yKGk9MDtpPGQmJmM+MDtpKyspe3VbLS1jXT00OH1sPUctMTtmb3IoO0RbbF09PTA7bC0tKXtpZihsPT0wKXticmVhayBJfX1HPWwrMX13aGlsZSh1W2NdPT00OCl7KytjfX1uPUI8MDtnPXQtYy1iLTE7aWYoYj09MCl7biYmKHVbLS1jXT00NSk7cmV0dXJuIHpmYih1LGMsdC1jKX1pZihiPjAmJmc+PS02KXtpZihnPj0wKXtrPWMrZztmb3IobT10LTE7bT49azttLS0pe3VbbSsxXT11W21dfXVbKytrXT00NjtuJiYodVstLWNdPTQ1KTtyZXR1cm4gemZiKHUsYyx0LWMrMSl9Zm9yKGw9MjtsPC1nKzE7bCsrKXt1Wy0tY109NDh9dVstLWNdPTQ2O3VbLS1jXT00ODtuJiYodVstLWNdPTQ1KTtyZXR1cm4gemZiKHUsYyx0LWMpfUM9YysxO2Y9dDt2PW5ldyBWZmI7biYmKHYuYSs9Jy0nLHYpO2lmKGYtQz49MSl7S2ZiKHYsdVtjXSk7di5hKz0nLic7di5hKz16ZmIodSxjKzEsdC1jLTEpfWVsc2V7di5hKz16ZmIodSxjLHQtYyl9di5hKz0nRSc7Zz4wJiYodi5hKz0nKycsdik7di5hKz0nJytnO3JldHVybiB2LmF9XG5mdW5jdGlvbiB6JGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHc7YS5jPWI7YS5nPW5ldyBMcWI7Yz0oUGdkKCksbmV3IGJoZChhLmMpKTtkPW5ldyBZR2IoYyk7VUdiKGQpO3Q9R0QoaGtkKGEuYywoZDBjKCksWV9jKSkpO2k9QkQoaGtkKGEuYywkX2MpLDMxNik7dj1CRChoa2QoYS5jLF9fYyksNDI5KTtnPUJEKGhrZChhLmMsVF9jKSw0ODIpO3U9QkQoaGtkKGEuYyxaX2MpLDQzMCk7YS5qPUVkYihFRChoa2QoYS5jLGEwYykpKTtoPWEuYTtzd2l0Y2goaS5nKXtjYXNlIDA6aD1hLmE7YnJlYWs7Y2FzZSAxOmg9YS5iO2JyZWFrO2Nhc2UgMjpoPWEuaTticmVhaztjYXNlIDM6aD1hLmU7YnJlYWs7Y2FzZSA0Omg9YS5mO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoTXJlKyhpLmYhPW51bGw/aS5mOicnK2kuZykpKTt9YS5kPW5ldyBnX2MoaCx2LGcpO3lOYihhLmQsKFhOYigpLFZOYiksREQoaGtkKGEuYyxWX2MpKSk7YS5kLmM9Q2NiKEREKGhrZChhLmMsVV9jKSkpO2lmKFZvZChhLmMpLmk9PTApe3JldHVybiBhLmR9Zm9yKGw9bmV3IEZ5ZChWb2QoYS5jKSk7bC5lIT1sLmkuZ2MoKTspe2s9QkQoRHlkKGwpLDMzKTtuPWsuZy8yO209ay5mLzI7dz1uZXcgZjdjKGsuaStuLGsuaittKTt3aGlsZShNaGIoYS5nLHcpKXtPNmModywoJHduZC5NYXRoLnJhbmRvbSgpLTAuNSkqcW1lLCgkd25kLk1hdGgucmFuZG9tKCktMC41KSpxbWUpfXA9QkQoaGtkKGssKFk5YygpLFM4YykpLDE0Mik7cT1uZXcgYU9iKHcsbmV3IEo2Yyh3LmEtbi1hLmovMi1wLmIsdy5iLW0tYS5qLzItcC5kLGsuZythLmorKHAuYitwLmMpLGsuZithLmorKHAuZCtwLmEpKSk7RWtiKGEuZC5pLHEpO1JoYihhLmcsdyxuZXcgdmdkKHEsaykpfXN3aXRjaCh1Lmcpe2Nhc2UgMDppZih0PT1udWxsKXthLmQuZD1CRChJa2IoYS5kLmksMCksNjUpfWVsc2V7Zm9yKHM9bmV3IG9sYihhLmQuaSk7cy5hPHMuYy5jLmxlbmd0aDspe3E9QkQobWxiKHMpLDY1KTtvPUJEKEJEKE9oYihhLmcscS5hKSw0NikuYiwzMykuemcoKTtvIT1udWxsJiZkZmIobyx0KSYmKGEuZC5kPXEpfX1icmVhaztjYXNlIDE6ZT1uZXcgZjdjKGEuYy5nLGEuYy5mKTtlLmEqPTAuNTtlLmIqPTAuNTtPNmMoZSxhLmMuaSxhLmMuaik7Zj1QamU7Zm9yKHI9bmV3IG9sYihhLmQuaSk7ci5hPHIuYy5jLmxlbmd0aDspe3E9QkQobWxiKHIpLDY1KTtqPVM2YyhxLmEsZSk7aWYoajxmKXtmPWo7YS5kLmQ9cX19YnJlYWs7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYihNcmUrKHUuZiE9bnVsbD91LmY6JycrdS5nKSkpO31yZXR1cm4gYS5kfVxuZnVuY3Rpb24gcWZkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O3Y9QkQocXVkKCghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLDApLDIwMik7az1uZXcgczdjO3U9bmV3IExxYjt3PXRmZCh2KTtqcmIodS5mLHYsdyk7bT1uZXcgTHFiO2Q9bmV3IFBzYjtmb3Iobz11bChwbChPQyhHQyhLSSwxKSxVaGUsMjAsMCxbKCFiLmQmJihiLmQ9bmV3IHk1ZChCMixiLDgsNSkpLGIuZCksKCFiLmUmJihiLmU9bmV3IHk1ZChCMixiLDcsNCkpLGIuZSldKSkpO1FyKG8pOyl7bj1CRChScihvKSw3OSk7aWYoKCFhLmEmJihhLmE9bmV3IGNVZChBMixhLDYsNikpLGEuYSkuaSE9MSl7dGhyb3cgdmJiKG5ldyBXZGIoVHNlKyghYS5hJiYoYS5hPW5ldyBjVWQoQTIsYSw2LDYpKSxhLmEpLmkpKX1pZihuIT1hKXtxPUJEKHF1ZCgoIW4uYSYmKG4uYT1uZXcgY1VkKEEyLG4sNiw2KSksbi5hKSwwKSwyMDIpO0dzYihkLHEsZC5jLmIsZC5jKTtwPUJEKFdkKGlyYih1LmYscSkpLDEyKTtpZighcCl7cD10ZmQocSk7anJiKHUuZixxLHApfWw9Yz9jN2MobmV3IGc3YyhCRChJa2Iodyx3LmMubGVuZ3RoLTEpLDgpKSxCRChJa2IocCxwLmMubGVuZ3RoLTEpLDgpKTpjN2MobmV3IGc3YygodENiKDAsdy5jLmxlbmd0aCksQkQody5jWzBdLDgpKSksKHRDYigwLHAuYy5sZW5ndGgpLEJEKHAuY1swXSw4KSkpO2pyYihtLmYscSxsKX19aWYoZC5iIT0wKXtyPUJEKElrYih3LGM/dy5jLmxlbmd0aC0xOjApLDgpO2ZvcihqPTE7ajx3LmMubGVuZ3RoO2orKyl7cz1CRChJa2IodyxjP3cuYy5sZW5ndGgtMS1qOmopLDgpO2U9SnNiKGQsMCk7d2hpbGUoZS5iIT1lLmQuYyl7cT1CRChYc2IoZSksMjAyKTtwPUJEKFdkKGlyYih1LmYscSkpLDEyKTtpZihwLmMubGVuZ3RoPD1qKXtac2IoZSl9ZWxzZXt0PVA2YyhuZXcgZzdjKEJEKElrYihwLGM/cC5jLmxlbmd0aC0xLWo6aiksOCkpLEJEKFdkKGlyYihtLmYscSkpLDgpKTtpZihzLmEhPXQuYXx8cy5iIT10LmIpe2Y9cy5hLXIuYTtoPXMuYi1yLmI7Zz10LmEtci5hO2k9dC5iLXIuYjtnKmg9PWkqZiYmKGY9PTB8fGlzTmFOKGYpP2Y6ZjwwPy0xOjEpPT0oZz09MHx8aXNOYU4oZyk/ZzpnPDA/LTE6MSkmJihoPT0wfHxpc05hTihoKT9oOmg8MD8tMToxKT09KGk9PTB8fGlzTmFOKGkpP2k6aTwwPy0xOjEpPygkd25kLk1hdGguYWJzKGYpPCR3bmQuTWF0aC5hYnMoZyl8fCR3bmQuTWF0aC5hYnMoaCk8JHduZC5NYXRoLmFicyhpKSkmJihHc2IoayxzLGsuYy5iLGsuYyksdHJ1ZSk6aj4xJiYoR3NiKGsscixrLmMuYixrLmMpLHRydWUpO1pzYihlKX19fXI9c319cmV0dXJuIGt9XG5mdW5jdGlvbiAkQmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSCxJLEosSyxMO09kZChjLCdHcmVlZHkgY3ljbGUgcmVtb3ZhbCcsMSk7dD1iLmE7TD10LmMubGVuZ3RoO2EuYT1LQyhXRCxvamUsMjUsTCwxNSwxKTthLmM9S0MoV0Qsb2plLDI1LEwsMTUsMSk7YS5iPUtDKFdELG9qZSwyNSxMLDE1LDEpO2o9MDtmb3Iocj1uZXcgb2xiKHQpO3IuYTxyLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihyKSwxMCk7cC5wPWo7Zm9yKEM9bmV3IG9sYihwLmopO0MuYTxDLmMuYy5sZW5ndGg7KXt3PUJEKG1sYihDKSwxMSk7Zm9yKGg9bmV3IG9sYih3LmUpO2guYTxoLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihoKSwxNyk7aWYoZC5jLmk9PXApe2NvbnRpbnVlfUc9QkQodk5iKGQsKE55YygpLGN5YykpLDE5KS5hO2EuYVtqXSs9Rz4wP0crMToxfWZvcihnPW5ldyBvbGIody5nKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZyksMTcpO2lmKGQuZC5pPT1wKXtjb250aW51ZX1HPUJEKHZOYihkLChOeWMoKSxjeWMpKSwxOSkuYTthLmNbal0rPUc+MD9HKzE6MX19YS5jW2pdPT0wP0RzYihhLmUscCk6YS5hW2pdPT0wJiZEc2IoYS5mLHApOysran1vPS0xO249MTtsPW5ldyBSa2I7YS5kPUJEKHZOYihiLCh3dGMoKSxqdGMpKSwyMzApO3doaWxlKEw+MCl7d2hpbGUoYS5lLmIhPTApe0k9QkQoTHNiKGEuZSksMTApO2EuYltJLnBdPW8tLTtfQmMoYSxJKTstLUx9d2hpbGUoYS5mLmIhPTApe0o9QkQoTHNiKGEuZiksMTApO2EuYltKLnBdPW4rKztfQmMoYSxKKTstLUx9aWYoTD4wKXttPVJpZTtmb3Iocz1uZXcgb2xiKHQpO3MuYTxzLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihzKSwxMCk7aWYoYS5iW3AucF09PTApe3U9YS5jW3AucF0tYS5hW3AucF07aWYodT49bSl7aWYodT5tKXtsLmM9S0MoU0ksVWhlLDEsMCw1LDEpO209dX1sLmNbbC5jLmxlbmd0aF09cH19fWs9YS5aZihsKTthLmJbay5wXT1uKys7X0JjKGEsayk7LS1MfX1IPXQuYy5sZW5ndGgrMTtmb3Ioaj0wO2o8dC5jLmxlbmd0aDtqKyspe2EuYltqXTwwJiYoYS5iW2pdKz1IKX1mb3IocT1uZXcgb2xiKHQpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUJEKG1sYihxKSwxMCk7Rj1tX2IocC5qKTtmb3IoQT1GLEI9MCxEPUEubGVuZ3RoO0I8RDsrK0Ipe3c9QVtCXTt2PWtfYih3LmcpO2ZvcihlPXYsZj0wLGk9ZS5sZW5ndGg7ZjxpOysrZil7ZD1lW2ZdO0s9ZC5kLmkucDtpZihhLmJbcC5wXT5hLmJbS10pe1BaYihkLHRydWUpO3lOYihiLEFzYywoQmNiKCksdHJ1ZSkpfX19fWEuYT1udWxsO2EuYz1udWxsO2EuYj1udWxsO09zYihhLmYpO09zYihhLmUpO1FkZChjKX1cbmZ1bmN0aW9uIHNRYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2Q9bmV3IFJrYjtoPW5ldyBSa2I7cT1iLzI7bj1hLmdjKCk7ZT1CRChhLlhiKDApLDgpO3I9QkQoYS5YYigxKSw4KTtvPXRRYihlLmEsZS5iLHIuYSxyLmIscSk7RWtiKGQsKHRDYigwLG8uYy5sZW5ndGgpLEJEKG8uY1swXSw4KSkpO0VrYihoLCh0Q2IoMSxvLmMubGVuZ3RoKSxCRChvLmNbMV0sOCkpKTtmb3Ioaj0yO2o8bjtqKyspe3A9ZTtlPXI7cj1CRChhLlhiKGopLDgpO289dFFiKGUuYSxlLmIscC5hLHAuYixxKTtFa2IoZCwodENiKDEsby5jLmxlbmd0aCksQkQoby5jWzFdLDgpKSk7RWtiKGgsKHRDYigwLG8uYy5sZW5ndGgpLEJEKG8uY1swXSw4KSkpO289dFFiKGUuYSxlLmIsci5hLHIuYixxKTtFa2IoZCwodENiKDAsby5jLmxlbmd0aCksQkQoby5jWzBdLDgpKSk7RWtiKGgsKHRDYigxLG8uYy5sZW5ndGgpLEJEKG8uY1sxXSw4KSkpfW89dFFiKHIuYSxyLmIsZS5hLGUuYixxKTtFa2IoZCwodENiKDEsby5jLmxlbmd0aCksQkQoby5jWzFdLDgpKSk7RWtiKGgsKHRDYigwLG8uYy5sZW5ndGgpLEJEKG8uY1swXSw4KSkpO2M9bmV3IHM3YztnPW5ldyBSa2I7RHNiKGMsKHRDYigwLGQuYy5sZW5ndGgpLEJEKGQuY1swXSw4KSkpO2ZvcihrPTE7azxkLmMubGVuZ3RoLTI7ays9Mil7Zj0odENiKGssZC5jLmxlbmd0aCksQkQoZC5jW2tdLDgpKTttPXJRYigodENiKGstMSxkLmMubGVuZ3RoKSxCRChkLmNbay0xXSw4KSksZiwodENiKGsrMSxkLmMubGVuZ3RoKSxCRChkLmNbaysxXSw4KSksKHRDYihrKzIsZC5jLmxlbmd0aCksQkQoZC5jW2srMl0sOCkpKTshaXNGaW5pdGUobS5hKXx8IWlzRmluaXRlKG0uYik/KEdzYihjLGYsYy5jLmIsYy5jKSx0cnVlKTooR3NiKGMsbSxjLmMuYixjLmMpLHRydWUpfURzYihjLEJEKElrYihkLGQuYy5sZW5ndGgtMSksOCkpO0VrYihnLCh0Q2IoMCxoLmMubGVuZ3RoKSxCRChoLmNbMF0sOCkpKTtmb3IobD0xO2w8aC5jLmxlbmd0aC0yO2wrPTIpe2Y9KHRDYihsLGguYy5sZW5ndGgpLEJEKGguY1tsXSw4KSk7bT1yUWIoKHRDYihsLTEsaC5jLmxlbmd0aCksQkQoaC5jW2wtMV0sOCkpLGYsKHRDYihsKzEsaC5jLmxlbmd0aCksQkQoaC5jW2wrMV0sOCkpLCh0Q2IobCsyLGguYy5sZW5ndGgpLEJEKGguY1tsKzJdLDgpKSk7IWlzRmluaXRlKG0uYSl8fCFpc0Zpbml0ZShtLmIpPyhnLmNbZy5jLmxlbmd0aF09Zix0cnVlKTooZy5jW2cuYy5sZW5ndGhdPW0sdHJ1ZSl9RWtiKGcsQkQoSWtiKGgsaC5jLmxlbmd0aC0xKSw4KSk7Zm9yKGk9Zy5jLmxlbmd0aC0xO2k+PTA7aS0tKXtEc2IoYywodENiKGksZy5jLmxlbmd0aCksQkQoZy5jW2ldLDgpKSl9cmV0dXJuIGN9XG5mdW5jdGlvbiBhRmQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47Zz10cnVlO2w9bnVsbDtkPW51bGw7ZT1udWxsO2I9ZmFsc2U7bj1CRWQ7aj1udWxsO2Y9bnVsbDtoPTA7aT1VRWQoYSxoLHpFZCxBRWQpO2lmKGk8YS5sZW5ndGgmJihCQ2IoaSxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGkpPT01OCkpe2w9YS5zdWJzdHIoaCxpLWgpO2g9aSsxfWM9bCE9bnVsbCYmaG5iKEdFZCxsLnRvTG93ZXJDYXNlKCkpO2lmKGMpe2k9YS5sYXN0SW5kZXhPZignIS8nKTtpZihpPT0tMSl7dGhyb3cgdmJiKG5ldyBXZGIoJ25vIGFyY2hpdmUgc2VwYXJhdG9yJykpfWc9dHJ1ZTtkPXFmYihhLGgsKytpKTtoPWl9ZWxzZSBpZihoPj0wJiZkZmIoYS5zdWJzdHIoaCwnLy8nLmxlbmd0aCksJy8vJykpe2grPTI7aT1VRWQoYSxoLENFZCxERWQpO2Q9YS5zdWJzdHIoaCxpLWgpO2g9aX1lbHNlIGlmKGwhPW51bGwmJihoPT1hLmxlbmd0aHx8KEJDYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCkhPTQ3KSkpe2c9ZmFsc2U7aT1pZmIoYSx3ZmIoMzUpLGgpO2k9PS0xJiYoaT1hLmxlbmd0aCk7ZD1hLnN1YnN0cihoLGktaCk7aD1pfWlmKCFjJiZoPGEubGVuZ3RoJiYoQkNiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKT09NDcpKXtpPVVFZChhLGgrMSxDRWQsREVkKTtrPWEuc3Vic3RyKGgrMSxpLShoKzEpKTtpZihrLmxlbmd0aD4wJiZiZmIoayxrLmxlbmd0aC0xKT09NTgpe2U9aztoPWl9fWlmKGg8YS5sZW5ndGgmJihCQ2IoaCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGgpPT00NykpeysraDtiPXRydWV9aWYoaDxhLmxlbmd0aCYmKEJDYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCkhPTYzKSYmKEJDYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCkhPTM1KSl7bT1uZXcgUmtiO3doaWxlKGg8YS5sZW5ndGgmJihCQ2IoaCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGgpIT02MykmJihCQ2IoaCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGgpIT0zNSkpe2k9VUVkKGEsaCxDRWQsREVkKTtFa2IobSxhLnN1YnN0cihoLGktaCkpO2g9aTtoPGEubGVuZ3RoJiYoQkNiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKT09NDcpJiYoYkZkKGEsKytoKXx8KG0uY1ttLmMubGVuZ3RoXT0nJyx0cnVlKSl9bj1LQyhaSSxuaWUsMixtLmMubGVuZ3RoLDYsMSk7UWtiKG0sbil9aWYoaDxhLmxlbmd0aCYmKEJDYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCk9PTYzKSl7aT1nZmIoYSwzNSwrK2gpO2k9PS0xJiYoaT1hLmxlbmd0aCk7aj1hLnN1YnN0cihoLGktaCk7aD1pfWg8YS5sZW5ndGgmJihmPXBmYihhLCsraCkpO2lGZChnLGwsZCxlLG4saik7cmV0dXJuIG5ldyBORWQoZyxsLGQsZSxiLG4saixmKX1cbmZ1bmN0aW9uIHNKYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxILEksSixLO0k9bmV3IFJrYjtmb3Iobz1uZXcgb2xiKGIuYik7by5hPG8uYy5jLmxlbmd0aDspe209QkQobWxiKG8pLDI5KTtmb3Iodj1uZXcgb2xiKG0uYSk7di5hPHYuYy5jLmxlbmd0aDspe3U9QkQobWxiKHYpLDEwKTt1LnA9LTE7bD1SaWU7Qj1SaWU7Zm9yKEQ9bmV3IG9sYih1LmopO0QuYTxELmMuYy5sZW5ndGg7KXtDPUJEKG1sYihEKSwxMSk7Zm9yKGU9bmV3IG9sYihDLmUpO2UuYTxlLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihlKSwxNyk7Rj1CRCh2TmIoYywoTnljKCksZXljKSksMTkpLmE7bD0kd25kLk1hdGgubWF4KGwsRil9Zm9yKGQ9bmV3IG9sYihDLmcpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxNyk7Rj1CRCh2TmIoYywoTnljKCksZXljKSksMTkpLmE7Qj0kd25kLk1hdGgubWF4KEIsRil9fXlOYih1LGhKYyxtZWIobCkpO3lOYih1LGlKYyxtZWIoQikpfX1yPTA7Zm9yKG49bmV3IG9sYihiLmIpO24uYTxuLmMuYy5sZW5ndGg7KXttPUJEKG1sYihuKSwyOSk7Zm9yKHY9bmV3IG9sYihtLmEpO3YuYTx2LmMuYy5sZW5ndGg7KXt1PUJEKG1sYih2KSwxMCk7aWYodS5wPDApe0g9bmV3IHpKYztILmI9cisrO29KYyhhLHUsSCk7SS5jW0kuYy5sZW5ndGhdPUh9fX1BPVB1KEkuYy5sZW5ndGgpO2s9UHUoSS5jLmxlbmd0aCk7Zm9yKGc9MDtnPEkuYy5sZW5ndGg7ZysrKXtFa2IoQSxuZXcgUmtiKTtFa2IoayxtZWIoMCkpfW1KYyhiLEksQSxrKTtKPUJEKFFrYihJLEtDKHNZLElxZSwyNTcsSS5jLmxlbmd0aCwwLDEpKSw4NDApO3c9QkQoUWtiKEEsS0MoeUssZW1lLDE1LEEuYy5sZW5ndGgsMCwxKSksMTkyKTtqPUtDKFdELG9qZSwyNSxrLmMubGVuZ3RoLDE1LDEpO2ZvcihoPTA7aDxqLmxlbmd0aDtoKyspe2pbaF09KHRDYihoLGsuYy5sZW5ndGgpLEJEKGsuY1toXSwxOSkpLmF9cz0wO3Q9bmV3IFJrYjtmb3IoaT0wO2k8Si5sZW5ndGg7aSsrKXtqW2ldPT0wJiZFa2IodCxKW2ldKX1xPUtDKFdELG9qZSwyNSxKLmxlbmd0aCwxNSwxKTt3aGlsZSh0LmMubGVuZ3RoIT0wKXtIPUJEKEtrYih0LDApLDI1Nyk7cVtILmJdPXMrKzt3aGlsZSghd1tILmJdLmRjKCkpe0s9QkQod1tILmJdLiRjKDApLDI1Nyk7LS1qW0suYl07altLLmJdPT0wJiYodC5jW3QuYy5sZW5ndGhdPUssdHJ1ZSl9fWEuYT1LQyhzWSxJcWUsMjU3LEoubGVuZ3RoLDAsMSk7Zm9yKGY9MDtmPEoubGVuZ3RoO2YrKyl7cD1KW2ZdO0c9cVtmXTthLmFbR109cDtwLmI9Rztmb3Iodj1uZXcgb2xiKHAuZSk7di5hPHYuYy5jLmxlbmd0aDspe3U9QkQobWxiKHYpLDEwKTt1LnA9R319cmV0dXJuIGEuYX1cbmZ1bmN0aW9uIG5kZShhKXt2YXIgYixjLGQ7aWYoYS5kPj1hLmope2EuYT0tMTthLmM9MTtyZXR1cm59Yj1iZmIoYS5pLGEuZCsrKTthLmE9YjtpZihhLmI9PTEpe3N3aXRjaChiKXtjYXNlIDkyOmQ9MTA7aWYoYS5kPj1hLmopdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx1dWUpKSkpO2EuYT1iZmIoYS5pLGEuZCsrKTticmVhaztjYXNlIDQ1OmlmKChhLmUmNTEyKT09NTEyJiZhLmQ8YS5qJiZiZmIoYS5pLGEuZCk9PTkxKXsrK2EuZDtkPTI0fWVsc2UgZD0wO2JyZWFrO2Nhc2UgOTE6aWYoKGEuZSY1MTIpIT01MTImJmEuZDxhLmomJmJmYihhLmksYS5kKT09NTgpeysrYS5kO2Q9MjA7YnJlYWt9ZGVmYXVsdDppZigoYiY2NDUxMik9PVVqZSYmYS5kPGEuail7Yz1iZmIoYS5pLGEuZCk7aWYoKGMmNjQ1MTIpPT01NjMyMCl7YS5hPVRqZSsoYi1VamU8PDEwKStjLTU2MzIwOysrYS5kfX1kPTA7fWEuYz1kO3JldHVybn1zd2l0Y2goYil7Y2FzZSAxMjQ6ZD0yO2JyZWFrO2Nhc2UgNDI6ZD0zO2JyZWFrO2Nhc2UgNDM6ZD00O2JyZWFrO2Nhc2UgNjM6ZD01O2JyZWFrO2Nhc2UgNDE6ZD03O2JyZWFrO2Nhc2UgNDY6ZD04O2JyZWFrO2Nhc2UgOTE6ZD05O2JyZWFrO2Nhc2UgOTQ6ZD0xMTticmVhaztjYXNlIDM2OmQ9MTI7YnJlYWs7Y2FzZSA0MDpkPTY7aWYoYS5kPj1hLmopYnJlYWs7aWYoYmZiKGEuaSxhLmQpIT02MylicmVhaztpZigrK2EuZD49YS5qKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksdnVlKSkpKTtiPWJmYihhLmksYS5kKyspO3N3aXRjaChiKXtjYXNlIDU4OmQ9MTM7YnJlYWs7Y2FzZSA2MTpkPTE0O2JyZWFrO2Nhc2UgMzM6ZD0xNTticmVhaztjYXNlIDkxOmQ9MTk7YnJlYWs7Y2FzZSA2MjpkPTE4O2JyZWFrO2Nhc2UgNjA6aWYoYS5kPj1hLmopdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx2dWUpKSkpO2I9YmZiKGEuaSxhLmQrKyk7aWYoYj09NjEpe2Q9MTZ9ZWxzZSBpZihiPT0zMyl7ZD0xN31lbHNlIHRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksd3VlKSkpKTticmVhaztjYXNlIDM1OndoaWxlKGEuZDxhLmope2I9YmZiKGEuaSxhLmQrKyk7aWYoYj09NDEpYnJlYWt9aWYoYiE9NDEpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx4dWUpKSkpO2Q9MjE7YnJlYWs7ZGVmYXVsdDppZihiPT00NXx8OTc8PWImJmI8PTEyMnx8NjU8PWImJmI8PTkwKXstLWEuZDtkPTIyO2JyZWFrfWVsc2UgaWYoYj09NDApe2Q9MjM7YnJlYWt9dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx2dWUpKSkpO31icmVhaztjYXNlIDkyOmQ9MTA7aWYoYS5kPj1hLmopdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx1dWUpKSkpO2EuYT1iZmIoYS5pLGEuZCsrKTticmVhaztkZWZhdWx0OmQ9MDt9YS5jPWR9XG5mdW5jdGlvbiBQNWIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEc7QT1CRCh2TmIoYSwoTnljKCksVnhjKSksOTgpO2lmKCEoQSE9KGRjZCgpLGJjZCkmJkEhPWNjZCkpe3JldHVybn1vPWEuYjtuPW8uYy5sZW5ndGg7az1uZXcgU2tiKChYaihuKzIsTWllKSxPeSh3YmIod2JiKDUsbisyKSwobisyKS8xMHwwKSkpKTtwPW5ldyBTa2IoKFhqKG4rMixNaWUpLE95KHdiYih3YmIoNSxuKzIpLChuKzIpLzEwfDApKSkpO0VrYihrLG5ldyBMcWIpO0VrYihrLG5ldyBMcWIpO0VrYihwLG5ldyBSa2IpO0VrYihwLG5ldyBSa2IpO3c9bmV3IFJrYjtmb3IoYj0wO2I8bjtiKyspe2M9KHRDYihiLG8uYy5sZW5ndGgpLEJEKG8uY1tiXSwyOSkpO0I9KHRDYihiLGsuYy5sZW5ndGgpLEJEKGsuY1tiXSw4MykpO3E9bmV3IExxYjtrLmNbay5jLmxlbmd0aF09cTtEPSh0Q2IoYixwLmMubGVuZ3RoKSxCRChwLmNbYl0sMTUpKTtzPW5ldyBSa2I7cC5jW3AuYy5sZW5ndGhdPXM7Zm9yKGU9bmV3IG9sYihjLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwxMCk7aWYoTDViKGQpKXt3LmNbdy5jLmxlbmd0aF09ZDtjb250aW51ZX1mb3Ioaj1uZXcgU3IodXIoUl9iKGQpLmEuS2MoKSxuZXcgU3EpKTtRcihqKTspe2g9QkQoUnIoaiksMTcpO0Y9aC5jLmk7aWYoIUw1YihGKSl7Y29udGludWV9Qz1CRChCLnhjKHZOYihGLCh3dGMoKSwkc2MpKSksMTApO2lmKCFDKXtDPUs1YihhLEYpO0IuemModk5iKEYsJHNjKSxDKTtELkZjKEMpfVFaYihoLEJEKElrYihDLmosMSksMTEpKX1mb3IoaT1uZXcgU3IodXIoVV9iKGQpLmEuS2MoKSxuZXcgU3EpKTtRcihpKTspe2g9QkQoUnIoaSksMTcpO0c9aC5kLmk7aWYoIUw1YihHKSl7Y29udGludWV9cj1CRChPaGIocSx2TmIoRywod3RjKCksJHNjKSkpLDEwKTtpZighcil7cj1LNWIoYSxHKTtSaGIocSx2TmIoRywkc2MpLHIpO3MuY1tzLmMubGVuZ3RoXT1yfVJaYihoLEJEKElrYihyLmosMCksMTEpKX19fWZvcihsPTA7bDxwLmMubGVuZ3RoO2wrKyl7dD0odENiKGwscC5jLmxlbmd0aCksQkQocC5jW2xdLDE1KSk7aWYodC5kYygpKXtjb250aW51ZX1tPW51bGw7aWYobD09MCl7bT1uZXcgSDFiKGEpO3dDYigwLG8uYy5sZW5ndGgpO2FDYihvLmMsMCxtKX1lbHNlIGlmKGw9PWsuYy5sZW5ndGgtMSl7bT1uZXcgSDFiKGEpO28uY1tvLmMubGVuZ3RoXT1tfWVsc2V7bT0odENiKGwtMSxvLmMubGVuZ3RoKSxCRChvLmNbbC0xXSwyOSkpfWZvcihnPXQuS2MoKTtnLk9iKCk7KXtmPUJEKGcuUGIoKSwxMCk7JF9iKGYsbSl9fWZvcih2PW5ldyBvbGIodyk7di5hPHYuYy5jLmxlbmd0aDspe3U9QkQobWxiKHYpLDEwKTskX2IodSxudWxsKX15TmIoYSwod3RjKCksRnNjKSx3KX1cbmZ1bmN0aW9uIEJDYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHY7T2RkKGMsJ0NvZmZtYW4tR3JhaGFtIExheWVyaW5nJywxKTtpZihiLmEuYy5sZW5ndGg9PTApe1FkZChjKTtyZXR1cm59dj1CRCh2TmIoYiwoTnljKCksa3hjKSksMTkpLmE7aT0wO2c9MDtmb3IobT1uZXcgb2xiKGIuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDEwKTtsLnA9aSsrO2ZvcihmPW5ldyBTcih1cihVX2IobCkuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7ZS5wPWcrK319YS5kPUtDKHNiYixkbGUsMjUsaSwxNiwxKTthLmE9S0Moc2JiLGRsZSwyNSxnLDE2LDEpO2EuYj1LQyhXRCxvamUsMjUsaSwxNSwxKTthLmU9S0MoV0Qsb2plLDI1LGksMTUsMSk7YS5mPUtDKFdELG9qZSwyNSxpLDE1LDEpO05jKGEuYyk7Q0NjKGEsYik7bz1uZXcgZ3ViKG5ldyBHQ2MoYSkpO2Zvcih1PW5ldyBvbGIoYi5hKTt1LmE8dS5jLmMubGVuZ3RoOyl7cz1CRChtbGIodSksMTApO2ZvcihmPW5ldyBTcih1cihSX2IocykuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7YS5hW2UucF18fCsrYS5iW3MucF19YS5iW3MucF09PTAmJih6Q2IoY3ViKG8scykpLHRydWUpfWg9MDt3aGlsZShvLmIuYy5sZW5ndGghPTApe3M9QkQoZHViKG8pLDEwKTthLmZbcy5wXT1oKys7Zm9yKGY9bmV3IFNyKHVyKFVfYihzKS5hLktjKCksbmV3IFNxKSk7UXIoZik7KXtlPUJEKFJyKGYpLDE3KTtpZihhLmFbZS5wXSl7Y29udGludWV9cT1lLmQuaTstLWEuYltxLnBdO1JjKGEuYyxxLG1lYihhLmZbcy5wXSkpO2EuYltxLnBdPT0wJiYoekNiKGN1YihvLHEpKSx0cnVlKX19bj1uZXcgZ3ViKG5ldyBLQ2MoYSkpO2Zvcih0PW5ldyBvbGIoYi5hKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1CRChtbGIodCksMTApO2ZvcihmPW5ldyBTcih1cihVX2IocykuYS5LYygpLG5ldyBTcSkpO1FyKGYpOyl7ZT1CRChScihmKSwxNyk7YS5hW2UucF18fCsrYS5lW3MucF19YS5lW3MucF09PTAmJih6Q2IoY3ViKG4scykpLHRydWUpfWs9bmV3IFJrYjtkPXlDYyhiLGspO3doaWxlKG4uYi5jLmxlbmd0aCE9MCl7cj1CRChkdWIobiksMTApOyhkLmEuYy5sZW5ndGg+PXZ8fCF3Q2MocixkKSkmJihkPXlDYyhiLGspKTskX2IocixkKTtmb3IoZj1uZXcgU3IodXIoUl9iKHIpLmEuS2MoKSxuZXcgU3EpKTtRcihmKTspe2U9QkQoUnIoZiksMTcpO2lmKGEuYVtlLnBdKXtjb250aW51ZX1wPWUuYy5pOy0tYS5lW3AucF07YS5lW3AucF09PTAmJih6Q2IoY3ViKG4scCkpLHRydWUpfX1mb3Ioaj1rLmMubGVuZ3RoLTE7aj49MDstLWope0VrYihiLmIsKHRDYihqLGsuYy5sZW5ndGgpLEJEKGsuY1tqXSwyOSkpKX1iLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7UWRkKGMpfVxuZnVuY3Rpb24gZ2VlKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajthLmI9MTtuZGUoYSk7Yj1udWxsO2lmKGEuYz09MCYmYS5hPT05NCl7bmRlKGEpO2I9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyAkZmUoNCkpO1VmZShiLDAsbHhlKTtoPShudWxsLCsrdmZlLG5ldyAkZmUoNCkpfWVsc2V7aD0od2ZlKCksd2ZlKCksKyt2ZmUsbmV3ICRmZSg0KSl9ZT10cnVlO3doaWxlKChqPWEuYykhPTEpe2lmKGo9PTAmJmEuYT09OTMmJiFlKXtpZihiKXtaZmUoYixoKTtoPWJ9YnJlYWt9Yz1hLmE7ZD1mYWxzZTtpZihqPT0xMCl7c3dpdGNoKGMpe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOlhmZShoLGZlZShjKSk7ZD10cnVlO2JyZWFrO2Nhc2UgMTA1OmNhc2UgNzM6Y2FzZSA5OTpjYXNlIDY3OmM9KFhmZShoLGZlZShjKSksLTEpO2M8MCYmKGQ9dHJ1ZSk7YnJlYWs7Y2FzZSAxMTI6Y2FzZSA4MDppPXRkZShhLGMpO2lmKCFpKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksSXVlKSkpKTtYZmUoaCxpKTtkPXRydWU7YnJlYWs7ZGVmYXVsdDpjPWVlZShhKTt9fWVsc2UgaWYoaj09MjQmJiFlKXtpZihiKXtaZmUoYixoKTtoPWJ9Zj1nZWUoYSk7WmZlKGgsZik7aWYoYS5jIT0wfHxhLmEhPTkzKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksTXVlKSkpKTticmVha31uZGUoYSk7aWYoIWQpe2lmKGo9PTApe2lmKGM9PTkxKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksTnVlKSkpKTtpZihjPT05Myl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLE91ZSkpKSk7aWYoYz09NDUmJiFlJiZhLmEhPTkzKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksUHVlKSkpKX1pZihhLmMhPTB8fGEuYSE9NDV8fGM9PTQ1JiZlKXtVZmUoaCxjLGMpfWVsc2V7bmRlKGEpO2lmKChqPWEuYyk9PTEpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxLdWUpKSkpO2lmKGo9PTAmJmEuYT09OTMpe1VmZShoLGMsYyk7VWZlKGgsNDUsNDUpfWVsc2UgaWYoaj09MCYmYS5hPT05M3x8aj09MjQpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksUHVlKSkpKX1lbHNle2c9YS5hO2lmKGo9PTApe2lmKGc9PTkxKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksTnVlKSkpKTtpZihnPT05Myl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLE91ZSkpKSk7aWYoZz09NDUpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxQdWUpKSkpfWVsc2Ugaj09MTAmJihnPWVlZShhKSk7bmRlKGEpO2lmKGM+Zyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFN1ZSkpKSk7VWZlKGgsYyxnKX19fWU9ZmFsc2V9aWYoYS5jPT0xKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksS3VlKSkpKTtZZmUoaCk7VmZlKGgpO2EuYj0wO25kZShhKTtyZXR1cm4gaH1cbmZ1bmN0aW9uIHhaZChhKXtCbmQoYS5jLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwnXSkpO0JuZChhLmQsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2N3ZSwnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50ZWdlciddKSk7Qm5kKGEuZSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbY3dlLCdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuJ10pKTtCbmQoYS5mLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ0VCb29sZWFuJyxmdWUsJ0VCb29sZWFuOk9iamVjdCddKSk7Qm5kKGEuaSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbY3dlLCdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlJ10pKTtCbmQoYS5nLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSddKSk7Qm5kKGEuaixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbY3dlLCdFQnl0ZScsZnVlLCdFQnl0ZTpPYmplY3QnXSkpO0JuZChhLm4sUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2N3ZSwnRUNoYXInLGZ1ZSwnRUNoYXI6T2JqZWN0J10pKTtCbmQoYS50LFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSddKSk7Qm5kKGEudSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbY3dlLCdFRG91YmxlJyxmdWUsJ0VEb3VibGU6T2JqZWN0J10pKTtCbmQoYS5GLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0J10pKTtCbmQoYS5HLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ0VGbG9hdCcsZnVlLCdFRmxvYXQ6T2JqZWN0J10pKTtCbmQoYS5JLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCddKSk7Qm5kKGEuSixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbY3dlLCdFSW50JyxmdWUsJ0VJbnQ6T2JqZWN0J10pKTtCbmQoYS5OLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmcnXSkpO0JuZChhLk8sUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2N3ZSwnRUxvbmcnLGZ1ZSwnRUxvbmc6T2JqZWN0J10pKTtCbmQoYS5aLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0J10pKTtCbmQoYS4kLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ0VTaG9ydCcsZnVlLCdFU2hvcnQ6T2JqZWN0J10pKTtCbmQoYS5fLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtjd2UsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyddKSl9XG5mdW5jdGlvbiBmUmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEc7aWYoYS5jLmxlbmd0aD09MSl7cmV0dXJuIHRDYigwLGEuYy5sZW5ndGgpLEJEKGEuY1swXSwxMzUpfWVsc2UgaWYoYS5jLmxlbmd0aDw9MCl7cmV0dXJuIG5ldyBTUmN9Zm9yKGk9bmV3IG9sYihhKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaSksMTM1KTtzPTA7bz1PaGU7cD1PaGU7bT1SaWU7bj1SaWU7Zm9yKHI9SnNiKGcuYiwwKTtyLmIhPXIuZC5jOyl7cT1CRChYc2IociksODYpO3MrPUJEKHZOYihxLChKVGMoKSxFVGMpKSwxOSkuYTtvPSR3bmQuTWF0aC5taW4obyxxLmUuYSk7cD0kd25kLk1hdGgubWluKHAscS5lLmIpO209JHduZC5NYXRoLm1heChtLHEuZS5hK3EuZi5hKTtuPSR3bmQuTWF0aC5tYXgobixxLmUuYitxLmYuYil9eU5iKGcsKEpUYygpLEVUYyksbWViKHMpKTt5TmIoZywobVRjKCksV1NjKSxuZXcgZjdjKG8scCkpO3lOYihnLFZTYyxuZXcgZjdjKG0sbikpfW1tYigpO09rYihhLG5ldyBqUmMpO3Y9bmV3IFNSYzt0TmIodiwodENiKDAsYS5jLmxlbmd0aCksQkQoYS5jWzBdLDk0KSkpO2w9MDtEPTA7Zm9yKGo9bmV3IG9sYihhKTtqLmE8ai5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaiksMTM1KTt3PWM3YyhSNmMoQkQodk5iKGcsKG1UYygpLFZTYykpLDgpKSxCRCh2TmIoZyxXU2MpLDgpKTtsPSR3bmQuTWF0aC5tYXgobCx3LmEpO0QrPXcuYSp3LmJ9bD0kd25kLk1hdGgubWF4KGwsJHduZC5NYXRoLnNxcnQoRCkqRWRiKEVEKHZOYih2LChKVGMoKSx1VGMpKSkpKTtBPUVkYihFRCh2TmIodixIVGMpKSk7Rj0wO0c9MDtrPTA7Yj1BO2ZvcihoPW5ldyBvbGIoYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDEzNSk7dz1jN2MoUjZjKEJEKHZOYihnLChtVGMoKSxWU2MpKSw4KSksQkQodk5iKGcsV1NjKSw4KSk7aWYoRit3LmE+bCl7Rj0wO0crPWsrQTtrPTB9ZVJjKHYsZyxGLEcpO2I9JHduZC5NYXRoLm1heChiLEYrdy5hKTtrPSR3bmQuTWF0aC5tYXgoayx3LmIpO0YrPXcuYStBfXU9bmV3IExxYjtjPW5ldyBMcWI7Zm9yKEM9bmV3IG9sYihhKTtDLmE8Qy5jLmMubGVuZ3RoOyl7Qj1CRChtbGIoQyksMTM1KTtkPUNjYihERCh2TmIoQiwoWTljKCkseThjKSkpKTt0PSFCLnE/KG51bGwsa21iKTpCLnE7Zm9yKGY9dC52YygpLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksNDIpO2lmKE1oYih1LGUuY2QoKSkpe2lmKFBEKEJEKGUuY2QoKSwxNDYpLndnKCkpIT09UEQoZS5kZCgpKSl7aWYoZCYmTWhiKGMsZS5jZCgpKSl7WmZiKCk7J0ZvdW5kIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHByb3BlcnR5ICcrQkQoZS5jZCgpLDE0NikudGcoKSsnIGluIGNvbXBvbmVudHMuJ31lbHNle1JoYih1LEJEKGUuY2QoKSwxNDYpLGUuZGQoKSk7eU5iKHYsQkQoZS5jZCgpLDE0NiksZS5kZCgpKTtkJiZSaGIoYyxCRChlLmNkKCksMTQ2KSxlLmRkKCkpfX19ZWxzZXtSaGIodSxCRChlLmNkKCksMTQ2KSxlLmRkKCkpO3lOYih2LEJEKGUuY2QoKSwxNDYpLGUuZGQoKSl9fX1yZXR1cm4gdn1cbmZ1bmN0aW9uIE1ZYigpe01ZYj1jY2I7eFhiKCk7TFliPW5ldyBIcDtSYyhMWWIsKFVjZCgpLEdjZCksRmNkKTtSYyhMWWIsUWNkLEZjZCk7UmMoTFliLEhjZCxGY2QpO1JjKExZYixOY2QsRmNkKTtSYyhMWWIsTWNkLEZjZCk7UmMoTFliLEtjZCxGY2QpO1JjKExZYixOY2QsR2NkKTtSYyhMWWIsRmNkLEJjZCk7UmMoTFliLEdjZCxCY2QpO1JjKExZYixRY2QsQmNkKTtSYyhMWWIsSGNkLEJjZCk7UmMoTFliLExjZCxCY2QpO1JjKExZYixOY2QsQmNkKTtSYyhMWWIsTWNkLEJjZCk7UmMoTFliLEtjZCxCY2QpO1JjKExZYixFY2QsQmNkKTtSYyhMWWIsRmNkLE9jZCk7UmMoTFliLEdjZCxPY2QpO1JjKExZYixCY2QsT2NkKTtSYyhMWWIsUWNkLE9jZCk7UmMoTFliLEhjZCxPY2QpO1JjKExZYixMY2QsT2NkKTtSYyhMWWIsTmNkLE9jZCk7UmMoTFliLEVjZCxPY2QpO1JjKExZYixQY2QsT2NkKTtSYyhMWWIsTWNkLE9jZCk7UmMoTFliLEljZCxPY2QpO1JjKExZYixLY2QsT2NkKTtSYyhMWWIsR2NkLFFjZCk7UmMoTFliLEhjZCxRY2QpO1JjKExZYixOY2QsUWNkKTtSYyhMWWIsS2NkLFFjZCk7UmMoTFliLEdjZCxIY2QpO1JjKExZYixRY2QsSGNkKTtSYyhMWWIsTmNkLEhjZCk7UmMoTFliLEhjZCxIY2QpO1JjKExZYixNY2QsSGNkKTtSYyhMWWIsRmNkLENjZCk7UmMoTFliLEdjZCxDY2QpO1JjKExZYixCY2QsQ2NkKTtSYyhMWWIsT2NkLENjZCk7UmMoTFliLFFjZCxDY2QpO1JjKExZYixIY2QsQ2NkKTtSYyhMWWIsTGNkLENjZCk7UmMoTFliLE5jZCxDY2QpO1JjKExZYixQY2QsQ2NkKTtSYyhMWWIsRWNkLENjZCk7UmMoTFliLEtjZCxDY2QpO1JjKExZYixNY2QsQ2NkKTtSYyhMWWIsSmNkLENjZCk7UmMoTFliLEZjZCxQY2QpO1JjKExZYixHY2QsUGNkKTtSYyhMWWIsQmNkLFBjZCk7UmMoTFliLFFjZCxQY2QpO1JjKExZYixIY2QsUGNkKTtSYyhMWWIsTGNkLFBjZCk7UmMoTFliLE5jZCxQY2QpO1JjKExZYixFY2QsUGNkKTtSYyhMWWIsS2NkLFBjZCk7UmMoTFliLEljZCxQY2QpO1JjKExZYixKY2QsUGNkKTtSYyhMWWIsR2NkLEVjZCk7UmMoTFliLFFjZCxFY2QpO1JjKExZYixIY2QsRWNkKTtSYyhMWWIsTmNkLEVjZCk7UmMoTFliLFBjZCxFY2QpO1JjKExZYixLY2QsRWNkKTtSYyhMWWIsTWNkLEVjZCk7UmMoTFliLEZjZCxEY2QpO1JjKExZYixHY2QsRGNkKTtSYyhMWWIsQmNkLERjZCk7UmMoTFliLFFjZCxEY2QpO1JjKExZYixIY2QsRGNkKTtSYyhMWWIsTGNkLERjZCk7UmMoTFliLE5jZCxEY2QpO1JjKExZYixFY2QsRGNkKTtSYyhMWWIsS2NkLERjZCk7UmMoTFliLEdjZCxNY2QpO1JjKExZYixCY2QsTWNkKTtSYyhMWWIsT2NkLE1jZCk7UmMoTFliLEhjZCxNY2QpO1JjKExZYixGY2QsSWNkKTtSYyhMWWIsR2NkLEljZCk7UmMoTFliLE9jZCxJY2QpO1JjKExZYixRY2QsSWNkKTtSYyhMWWIsSGNkLEljZCk7UmMoTFliLExjZCxJY2QpO1JjKExZYixOY2QsSWNkKTtSYyhMWWIsTmNkLEpjZCk7UmMoTFliLEhjZCxKY2QpO1JjKExZYixFY2QsRmNkKTtSYyhMWWIsRWNkLFFjZCk7UmMoTFliLEVjZCxCY2QpO1JjKExZYixMY2QsRmNkKTtSYyhMWWIsTGNkLEdjZCk7UmMoTFliLExjZCxPY2QpfVxuZnVuY3Rpb24gSFZkKGEsYil7c3dpdGNoKGEuZSl7Y2FzZSAwOmNhc2UgMjpjYXNlIDQ6Y2FzZSA2OmNhc2UgNDI6Y2FzZSA0NDpjYXNlIDQ2OmNhc2UgNDg6Y2FzZSA4OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE0OmNhc2UgMTY6Y2FzZSAxODpjYXNlIDIwOmNhc2UgMjI6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMjg6Y2FzZSAzMDpjYXNlIDMyOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM4OnJldHVybiBuZXcgVTVkKGEuYixhLmEsYixhLmMpO2Nhc2UgMTpyZXR1cm4gbmV3IEJNZChhLmEsYixiTGQoYi5UZygpLGEuYykpO2Nhc2UgNDM6cmV0dXJuIG5ldyBONGQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpKTtjYXNlIDM6cmV0dXJuIG5ldyB4TWQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpKTtjYXNlIDQ1OnJldHVybiBuZXcgSzRkKGEuYSxiLGJMZChiLlRnKCksYS5jKSk7Y2FzZSA0MTpyZXR1cm4gbmV3IGRJZChCRCh3SWQoYS5jKSwyNiksYS5hLGIsYkxkKGIuVGcoKSxhLmMpKTtjYXNlIDUwOnJldHVybiBuZXcgYzZkKEJEKHdJZChhLmMpLDI2KSxhLmEsYixiTGQoYi5UZygpLGEuYykpO2Nhc2UgNTpyZXR1cm4gbmV3IFE0ZChhLmEsYixiTGQoYi5UZygpLGEuYyksYS5kLm4pO2Nhc2UgNDc6cmV0dXJuIG5ldyBVNGQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpLGEuZC5uKTtjYXNlIDc6cmV0dXJuIG5ldyBjVWQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpLGEuZC5uKTtjYXNlIDQ5OnJldHVybiBuZXcgZ1VkKGEuYSxiLGJMZChiLlRnKCksYS5jKSxhLmQubik7Y2FzZSA5OnJldHVybiBuZXcgSTRkKGEuYSxiLGJMZChiLlRnKCksYS5jKSk7Y2FzZSAxMTpyZXR1cm4gbmV3IEc0ZChhLmEsYixiTGQoYi5UZygpLGEuYykpO2Nhc2UgMTM6cmV0dXJuIG5ldyBDNGQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpKTtjYXNlIDE1OnJldHVybiBuZXcgazJkKGEuYSxiLGJMZChiLlRnKCksYS5jKSk7Y2FzZSAxNzpyZXR1cm4gbmV3IGM1ZChhLmEsYixiTGQoYi5UZygpLGEuYykpO2Nhc2UgMTk6cmV0dXJuIG5ldyBfNGQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpKTtjYXNlIDIxOnJldHVybiBuZXcgWDRkKGEuYSxiLGJMZChiLlRnKCksYS5jKSk7Y2FzZSAyMzpyZXR1cm4gbmV3IHBNZChhLmEsYixiTGQoYi5UZygpLGEuYykpO2Nhc2UgMjU6cmV0dXJuIG5ldyBENWQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpLGEuZC5uKTtjYXNlIDI3OnJldHVybiBuZXcgeTVkKGEuYSxiLGJMZChiLlRnKCksYS5jKSxhLmQubik7Y2FzZSAyOTpyZXR1cm4gbmV3IHQ1ZChhLmEsYixiTGQoYi5UZygpLGEuYyksYS5kLm4pO2Nhc2UgMzE6cmV0dXJuIG5ldyBuNWQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpLGEuZC5uKTtjYXNlIDMzOnJldHVybiBuZXcgQTVkKGEuYSxiLGJMZChiLlRnKCksYS5jKSxhLmQubik7Y2FzZSAzNTpyZXR1cm4gbmV3IHY1ZChhLmEsYixiTGQoYi5UZygpLGEuYyksYS5kLm4pO2Nhc2UgMzc6cmV0dXJuIG5ldyBwNWQoYS5hLGIsYkxkKGIuVGcoKSxhLmMpLGEuZC5uKTtjYXNlIDM5OnJldHVybiBuZXcgaTVkKGEuYSxiLGJMZChiLlRnKCksYS5jKSxhLmQubik7Y2FzZSA0MDpyZXR1cm4gbmV3IHUzZChiLGJMZChiLlRnKCksYS5jKSk7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IGh6KCdVbmtub3duIGZlYXR1cmUgc3R5bGU6ICcrYS5lKSk7fX1cbmZ1bmN0aW9uIEJNYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdztPZGQoYywnQnJhbmRlcyAmIEtvZXBmIG5vZGUgcGxhY2VtZW50JywxKTthLmE9YjthLmM9S01jKGIpO2Q9QkQodk5iKGIsKE55YygpLHp4YykpLDI3NCk7bj1DY2IoREQodk5iKGIsQXhjKSkpO2EuZD1kPT0obHJjKCksaXJjKSYmIW58fGQ9PWZyYztBTWMoYSxiKTt2PW51bGw7dz1udWxsO3I9bnVsbDtzPW51bGw7cT0oWGooNCxKaWUpLG5ldyBTa2IoNCkpO3N3aXRjaChCRCh2TmIoYix6eGMpLDI3NCkuZyl7Y2FzZSAzOnI9bmV3IFVMYyhiLGEuYy5kLChlTWMoKSxjTWMpLChZTGMoKSxXTGMpKTtxLmNbcS5jLmxlbmd0aF09cjticmVhaztjYXNlIDE6cz1uZXcgVUxjKGIsYS5jLmQsKGVNYygpLGRNYyksKFlMYygpLFdMYykpO3EuY1txLmMubGVuZ3RoXT1zO2JyZWFrO2Nhc2UgNDp2PW5ldyBVTGMoYixhLmMuZCwoZU1jKCksY01jKSwoWUxjKCksWExjKSk7cS5jW3EuYy5sZW5ndGhdPXY7YnJlYWs7Y2FzZSAyOnc9bmV3IFVMYyhiLGEuYy5kLChlTWMoKSxkTWMpLChZTGMoKSxYTGMpKTtxLmNbcS5jLmxlbmd0aF09dzticmVhaztkZWZhdWx0OnI9bmV3IFVMYyhiLGEuYy5kLChlTWMoKSxjTWMpLChZTGMoKSxXTGMpKTtzPW5ldyBVTGMoYixhLmMuZCxkTWMsV0xjKTt2PW5ldyBVTGMoYixhLmMuZCxjTWMsWExjKTt3PW5ldyBVTGMoYixhLmMuZCxkTWMsWExjKTtxLmNbcS5jLmxlbmd0aF09djtxLmNbcS5jLmxlbmd0aF09dztxLmNbcS5jLmxlbmd0aF09cjtxLmNbcS5jLmxlbmd0aF09czt9ZT1uZXcgbU1jKGIsYS5jKTtmb3IoaD1uZXcgb2xiKHEpO2guYTxoLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihoKSwxODApO2xNYyhlLGYsYS5iKTtrTWMoZil9bT1uZXcgck1jKGIsYS5jKTtmb3IoaT1uZXcgb2xiKHEpO2kuYTxpLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihpKSwxODApO29NYyhtLGYpfWlmKGMubil7Zm9yKGo9bmV3IG9sYihxKTtqLmE8ai5jLmMubGVuZ3RoOyl7Zj1CRChtbGIoaiksMTgwKTtTZGQoYyxmKycgc2l6ZSBpcyAnK1NMYyhmKSl9fWw9bnVsbDtpZihhLmQpe2s9eU1jKGEscSxhLmMuZCk7eE1jKGIsayxjKSYmKGw9ayl9aWYoIWwpe2ZvcihqPW5ldyBvbGIocSk7ai5hPGouYy5jLmxlbmd0aDspe2Y9QkQobWxiKGopLDE4MCk7eE1jKGIsZixjKSYmKCFsfHxTTGMobCk+U0xjKGYpKSYmKGw9Zil9fSFsJiYobD0odENiKDAscS5jLmxlbmd0aCksQkQocS5jWzBdLDE4MCkpKTtmb3IocD1uZXcgb2xiKGIuYik7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDI5KTtmb3IodT1uZXcgb2xiKG8uYSk7dS5hPHUuYy5jLmxlbmd0aDspe3Q9QkQobWxiKHUpLDEwKTt0Lm4uYj1FZGIobC5wW3QucF0pK0VkYihsLmRbdC5wXSl9fWlmKGMubil7U2RkKGMsJ0Nob3NlbiBub2RlIHBsYWNlbWVudDogJytsKTtTZGQoYywnQmxvY2tzOiAnK0RNYyhsKSk7U2RkKGMsJ0NsYXNzZXM6ICcrRU1jKGwsYykpO1NkZChjLCdNYXJrZWQgZWRnZXM6ICcrYS5iKX1mb3IoZz1uZXcgb2xiKHEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSwxODApO2YuZz1udWxsO2YuYj1udWxsO2YuYT1udWxsO2YuZD1udWxsO2Yuaj1udWxsO2YuaT1udWxsO2YucD1udWxsfUlNYyhhLmMpO2EuYi5hLiRiKCk7UWRkKGMpfVxuZnVuY3Rpb24gVjFiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRjtnPW5ldyBQc2I7dj1CRCh2TmIoYywoTnljKCksTHdjKSksMTAzKTtvPTA7eWUoZywoIWIuYSYmKGIuYT1uZXcgY1VkKEUyLGIsMTAsMTEpKSxiLmEpKTt3aGlsZShnLmIhPTApe2o9QkQoZy5iPT0wP251bGw6KHNDYihnLmIhPTApLE5zYihnLGcuYS5hKSksMzMpOyhQRChoa2QoYix5d2MpKSE9PVBEKCh0QWMoKSxyQWMpKXx8UEQoaGtkKGIsSndjKSk9PT1QRCgobXFjKCksbHFjKSl8fFBEKGhrZChiLEp3YykpPT09UEQoKG1xYygpLGpxYykpfHxDY2IoREQoaGtkKGIsQXdjKSkpfHxQRChoa2QoYix0d2MpKSE9PVBEKChSWGIoKSxRWGIpKSkmJiFDY2IoREQoaGtkKGoseHdjKSkpJiZqa2Qoaiwod3RjKCksWnNjKSxtZWIobysrKSk7cT0hQ2NiKEREKGhrZChqLEp4YykpKTtpZihxKXtsPSghai5hJiYoai5hPW5ldyBjVWQoRTIsaiwxMCwxMSkpLGouYSkuaSE9MDtuPVMxYihqKTttPVBEKGhrZChqLGF4YykpPT09UEQoKGhiZCgpLGViZCkpO0Y9IWlrZChqLChZOWMoKSxvOGMpKXx8ZGZiKEdEKGhrZChqLG84YykpLHNuZSk7dD1udWxsO2lmKEYmJm0mJihsfHxuKSl7dD1QMWIoaik7eU5iKHQsTHdjLHYpO3dOYih0LGh5YykmJld5YyhuZXcgZXpjKEVkYihFRCh2TmIodCxoeWMpKSkpLHQpO2lmKEJEKGhrZChqLEZ4YyksMTc0KS5nYygpIT0wKXtrPXQ7TUFiKG5ldyBZQWIobnVsbCwoIWouYyYmKGouYz1uZXcgY1VkKEYyLGosOSw5KSksbmV3IEt1YihqLmMsMTYpKSksbmV3IGsyYihrKSk7TDFiKGosdCl9fXc9YztBPUJEKE9oYihhLmEsWG9kKGopKSwxMCk7ISFBJiYodz1BLmUpO3M9JDFiKGEsaix3KTtpZih0KXtzLmU9dDt0LmU9czt5ZShnLCghai5hJiYoai5hPW5ldyBjVWQoRTIsaiwxMCwxMSkpLGouYSkpfX19bz0wO0dzYihnLGIsZy5jLmIsZy5jKTt3aGlsZShnLmIhPTApe2Y9QkQoZy5iPT0wP251bGw6KHNDYihnLmIhPTApLE5zYihnLGcuYS5hKSksMzMpO2ZvcihpPW5ldyBGeWQoKCFmLmImJihmLmI9bmV3IGNVZChCMixmLDEyLDMpKSxmLmIpKTtpLmUhPWkuaS5nYygpOyl7aD1CRChEeWQoaSksNzkpO04xYihoKTsoUEQoaGtkKGIseXdjKSkhPT1QRCgodEFjKCksckFjKSl8fFBEKGhrZChiLEp3YykpPT09UEQoKG1xYygpLGxxYykpfHxQRChoa2QoYixKd2MpKT09PVBEKChtcWMoKSxqcWMpKXx8Q2NiKEREKGhrZChiLEF3YykpKXx8UEQoaGtkKGIsdHdjKSkhPT1QRCgoUlhiKCksUVhiKSkpJiZqa2QoaCwod3RjKCksWnNjKSxtZWIobysrKSk7Qz1hdGQoQkQocXVkKCghaC5iJiYoaC5iPW5ldyB5NWQoejIsaCw0LDcpKSxoLmIpLDApLDgyKSk7RD1hdGQoQkQocXVkKCghaC5jJiYoaC5jPW5ldyB5NWQoejIsaCw1LDgpKSxoLmMpLDApLDgyKSk7aWYoQ2NiKEREKGhrZChoLEp4YykpKXx8Q2NiKEREKGhrZChDLEp4YykpKXx8Q2NiKEREKGhrZChELEp4YykpKSl7Y29udGludWV9cD1RbGQoaCkmJkNjYihERChoa2QoQyxmeGMpKSkmJkNjYihERChoa2QoaCxneGMpKSk7dT1mO3B8fG50ZChELEMpPyh1PUMpOm50ZChDLEQpJiYodT1EKTt3PWM7QT1CRChPaGIoYS5hLHUpLDEwKTshIUEmJih3PUEuZSk7cj1YMWIoYSxoLHUsdyk7eU5iKHIsKHd0YygpLHhzYyksUjFiKGEsaCxiLGMpKX1tPVBEKGhrZChmLGF4YykpPT09UEQoKGhiZCgpLGViZCkpO2lmKG0pe2ZvcihlPW5ldyBGeWQoKCFmLmEmJihmLmE9bmV3IGNVZChFMixmLDEwLDExKSksZi5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9QkQoRHlkKGUpLDMzKTtGPSFpa2QoZCwoWTljKCksbzhjKSl8fGRmYihHRChoa2QoZCxvOGMpKSxzbmUpO0I9UEQoaGtkKGQsYXhjKSk9PT1QRChlYmQpO0YmJkImJihHc2IoZyxkLGcuYy5iLGcuYyksdHJ1ZSl9fX19XG5mdW5jdGlvbiB2QShhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsLG0sbixvLHAscSxyO3N3aXRjaChiKXtjYXNlIDcxOmg9ZC5xLmdldEZ1bGxZZWFyKCktbmplPj0tMTkwMD8xOjA7Yz49ND9RZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtwamUscWplXSlbaF0pOlFmYihhLE9DKEdDKFpJLDEpLG5pZSwyLDYsWydCQycsJ0FEJ10pW2hdKTticmVhaztjYXNlIDEyMTprQShhLGMsZCk7YnJlYWs7Y2FzZSA3NzpqQShhLGMsZCk7YnJlYWs7Y2FzZSAxMDc6aT1lLnEuZ2V0SG91cnMoKTtpPT0wP0VBKGEsMjQsYyk6RUEoYSxpLGMpO2JyZWFrO2Nhc2UgODM6aUEoYSxjLGUpO2JyZWFrO2Nhc2UgNjk6az1kLnEuZ2V0RGF5KCk7Yz09NT9RZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnUycsJ00nLCdUJywnVycsJ1QnLCdGJywnUyddKVtrXSk6Yz09ND9RZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtyamUsc2plLHRqZSx1amUsdmplLHdqZSx4amVdKVtrXSk6UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKVtrXSk7YnJlYWs7Y2FzZSA5NzplLnEuZ2V0SG91cnMoKT49MTImJmUucS5nZXRIb3VycygpPDI0P1FmYihhLE9DKEdDKFpJLDEpLG5pZSwyLDYsWydBTScsJ1BNJ10pWzFdKTpRZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnQU0nLCdQTSddKVswXSk7YnJlYWs7Y2FzZSAxMDQ6bD1lLnEuZ2V0SG91cnMoKSUxMjtsPT0wP0VBKGEsMTIsYyk6RUEoYSxsLGMpO2JyZWFrO2Nhc2UgNzU6bT1lLnEuZ2V0SG91cnMoKSUxMjtFQShhLG0sYyk7YnJlYWs7Y2FzZSA3MjpuPWUucS5nZXRIb3VycygpO0VBKGEsbixjKTticmVhaztjYXNlIDk5Om89ZC5xLmdldERheSgpO2M9PTU/UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbJ1MnLCdNJywnVCcsJ1cnLCdUJywnRicsJ1MnXSlbb10pOmM9PTQ/UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbcmplLHNqZSx0amUsdWplLHZqZSx3amUseGplXSlbb10pOmM9PTM/UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKVtvXSk6RUEoYSxvLDEpO2JyZWFrO2Nhc2UgNzY6cD1kLnEuZ2V0TW9udGgoKTtjPT01P1FmYihhLE9DKEdDKFpJLDEpLG5pZSwyLDYsWydKJywnRicsJ00nLCdBJywnTScsJ0onLCdKJywnQScsJ1MnLCdPJywnTicsJ0QnXSlbcF0pOmM9PTQ/UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbYmplLGNqZSxkamUsZWplLGZqZSxnamUsaGplLGlqZSxqamUsa2plLGxqZSxtamVdKVtwXSk6Yz09Mz9RZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxmamUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKVtwXSk6RUEoYSxwKzEsYyk7YnJlYWs7Y2FzZSA4MTpxPWQucS5nZXRNb250aCgpLzN8MDtjPDQ/UWZiKGEsT0MoR0MoWkksMSksbmllLDIsNixbJ1ExJywnUTInLCdRMycsJ1E0J10pW3FdKTpRZmIoYSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnMXN0IHF1YXJ0ZXInLCcybmQgcXVhcnRlcicsJzNyZCBxdWFydGVyJywnNHRoIHF1YXJ0ZXInXSlbcV0pO2JyZWFrO2Nhc2UgMTAwOnI9ZC5xLmdldERhdGUoKTtFQShhLHIsYyk7YnJlYWs7Y2FzZSAxMDk6aj1lLnEuZ2V0TWludXRlcygpO0VBKGEsaixjKTticmVhaztjYXNlIDExNTpnPWUucS5nZXRTZWNvbmRzKCk7RUEoYSxnLGMpO2JyZWFrO2Nhc2UgMTIyOmM8ND9RZmIoYSxmLmNbMF0pOlFmYihhLGYuY1sxXSk7YnJlYWs7Y2FzZSAxMTg6UWZiKGEsZi5iKTticmVhaztjYXNlIDkwOmM8Mz9RZmIoYSxPQShmKSk6Yz09Mz9RZmIoYSxOQShmKSk6UWZiKGEsUUEoZi5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlfVxuZnVuY3Rpb24gWDFiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEg7TjFiKGIpO2k9QkQocXVkKCghYi5iJiYoYi5iPW5ldyB5NWQoejIsYiw0LDcpKSxiLmIpLDApLDgyKTtrPUJEKHF1ZCgoIWIuYyYmKGIuYz1uZXcgeTVkKHoyLGIsNSw4KSksYi5jKSwwKSw4Mik7aD1hdGQoaSk7aj1hdGQoayk7Zz0oIWIuYSYmKGIuYT1uZXcgY1VkKEEyLGIsNiw2KSksYi5hKS5pPT0wP251bGw6QkQocXVkKCghYi5hJiYoYi5hPW5ldyBjVWQoQTIsYiw2LDYpKSxiLmEpLDApLDIwMik7QT1CRChPaGIoYS5hLGgpLDEwKTtGPUJEKE9oYihhLmEsaiksMTApO0I9bnVsbDtHPW51bGw7aWYoSkQoaSwxODYpKXt3PUJEKE9oYihhLmEsaSksMjk5KTtpZihKRCh3LDExKSl7Qj1CRCh3LDExKX1lbHNlIGlmKEpEKHcsMTApKXtBPUJEKHcsMTApO0I9QkQoSWtiKEEuaiwwKSwxMSl9fWlmKEpEKGssMTg2KSl7RD1CRChPaGIoYS5hLGspLDI5OSk7aWYoSkQoRCwxMSkpe0c9QkQoRCwxMSl9ZWxzZSBpZihKRChELDEwKSl7Rj1CRChELDEwKTtHPUJEKElrYihGLmosMCksMTEpfX1pZighQXx8IUYpe3Rocm93IHZiYihuZXcgejJjKCdUaGUgc291cmNlIG9yIHRoZSB0YXJnZXQgb2YgZWRnZSAnK2IrJyBjb3VsZCBub3QgYmUgZm91bmQuICcrJ1RoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gYW4gZWRnZSBjb25uZWN0cyBhIG5vZGUgbGFpZCBvdXQgYnkgRUxLIExheWVyZWQgdG8gYSBub2RlIGluICcrJ2Fub3RoZXIgbGV2ZWwgb2YgaGllcmFyY2h5IGxhaWQgb3V0IGJ5IGVpdGhlciBhbm90aGVyIGluc3RhbmNlIG9mIEVMSyBMYXllcmVkIG9yIGFub3RoZXIgJysnbGF5b3V0IGFsZ29yaXRobSBhbGx0b2dldGhlci4gVGhlIGZvcm1lciBjYW4gYmUgc29sdmVkIGJ5IHNldHRpbmcgdGhlIGhpZXJhcmNoeUhhbmRsaW5nICcrJ29wdGlvbiB0byBJTkNMVURFX0NISUxEUkVOLicpKX1wPW5ldyBVWmI7dE5iKHAsYik7eU5iKHAsKHd0YygpLCRzYyksYik7eU5iKHAsKE55YygpLGp4YyksbnVsbCk7bj1CRCh2TmIoZCxLc2MpLDIxKTtBPT1GJiZuLkZjKChPcmMoKSxOcmMpKTtpZighQil7dj0oS0FjKCksSUFjKTtDPW51bGw7aWYoISFnJiZmY2QoQkQodk5iKEEsVnhjKSw5OCkpKXtDPW5ldyBmN2MoZy5qLGcuayk7QmZkKEMsTWxkKGIpKTtDZmQoQyxjKTtpZihudGQoaixoKSl7dj1IQWM7UDZjKEMsQS5uKX19Qj0kJGIoQSxDLHYsZCl9aWYoIUcpe3Y9KEtBYygpLEhBYyk7SD1udWxsO2lmKCEhZyYmZmNkKEJEKHZOYihGLFZ4YyksOTgpKSl7SD1uZXcgZjdjKGcuYixnLmMpO0JmZChILE1sZChiKSk7Q2ZkKEgsYyl9Rz0kJGIoRixILHYsUV9iKEYpKX1RWmIocCxCKTtSWmIocCxHKTsoQi5lLmMubGVuZ3RoPjF8fEIuZy5jLmxlbmd0aD4xfHxHLmUuYy5sZW5ndGg+MXx8Ry5nLmMubGVuZ3RoPjEpJiZuLkZjKChPcmMoKSxJcmMpKTtmb3IobT1uZXcgRnlkKCghYi5uJiYoYi5uPW5ldyBjVWQoRDIsYiwxLDcpKSxiLm4pKTttLmUhPW0uaS5nYygpOyl7bD1CRChEeWQobSksMTM3KTtpZighQ2NiKEREKGhrZChsLEp4YykpKSYmISFsLmEpe3E9WjFiKGwpO0VrYihwLmIscSk7c3dpdGNoKEJEKHZOYihxLFF3YyksMjcyKS5nKXtjYXNlIDE6Y2FzZSAyOm4uRmMoKE9yYygpLEdyYykpO2JyZWFrO2Nhc2UgMDpuLkZjKChPcmMoKSxFcmMpKTt5TmIocSxRd2MsKHFhZCgpLG5hZCkpO319fWY9QkQodk5iKGQsSXdjKSwzMTQpO3I9QkQodk5iKGQsRXhjKSwzMTUpO2U9Zj09KFJwYygpLE9wYyl8fHI9PShWemMoKSxSemMpO2lmKCEhZyYmKCFnLmEmJihnLmE9bmV3IHhNZCh5MixnLDUpKSxnLmEpLmkhPTAmJmUpe3M9b2ZkKGcpO289bmV3IHM3Yztmb3IodT1Kc2IocywwKTt1LmIhPXUuZC5jOyl7dD1CRChYc2IodSksOCk7RHNiKG8sbmV3IGc3Yyh0KSl9eU5iKHAsX3NjLG8pfXJldHVybiBwfVxuZnVuY3Rpb24geVpkKGEpe2lmKGEuZ2IpcmV0dXJuO2EuZ2I9dHJ1ZTthLmI9TG5kKGEsMCk7S25kKGEuYiwxOCk7UW5kKGEuYiwxOSk7YS5hPUxuZChhLDEpO0tuZChhLmEsMSk7UW5kKGEuYSwyKTtRbmQoYS5hLDMpO1FuZChhLmEsNCk7UW5kKGEuYSw1KTthLm89TG5kKGEsMik7S25kKGEubyw4KTtLbmQoYS5vLDkpO1FuZChhLm8sMTApO1FuZChhLm8sMTEpO1FuZChhLm8sMTIpO1FuZChhLm8sMTMpO1FuZChhLm8sMTQpO1FuZChhLm8sMTUpO1FuZChhLm8sMTYpO1FuZChhLm8sMTcpO1FuZChhLm8sMTgpO1FuZChhLm8sMTkpO1FuZChhLm8sMjApO1FuZChhLm8sMjEpO1FuZChhLm8sMjIpO1FuZChhLm8sMjMpO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO1BuZChhLm8pO2EucD1MbmQoYSwzKTtLbmQoYS5wLDIpO0tuZChhLnAsMyk7S25kKGEucCw0KTtLbmQoYS5wLDUpO1FuZChhLnAsNik7UW5kKGEucCw3KTtQbmQoYS5wKTtQbmQoYS5wKTthLnE9TG5kKGEsNCk7S25kKGEucSw4KTthLnY9TG5kKGEsNSk7UW5kKGEudiw5KTtQbmQoYS52KTtQbmQoYS52KTtQbmQoYS52KTthLnc9TG5kKGEsNik7S25kKGEudywyKTtLbmQoYS53LDMpO0tuZChhLncsNCk7UW5kKGEudyw1KTthLkI9TG5kKGEsNyk7UW5kKGEuQiwxKTtQbmQoYS5CKTtQbmQoYS5CKTtQbmQoYS5CKTthLlE9TG5kKGEsOCk7UW5kKGEuUSwwKTtQbmQoYS5RKTthLlI9TG5kKGEsOSk7S25kKGEuUiwxKTthLlM9TG5kKGEsMTApO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO1BuZChhLlMpO2EuVD1MbmQoYSwxMSk7UW5kKGEuVCwxMCk7UW5kKGEuVCwxMSk7UW5kKGEuVCwxMik7UW5kKGEuVCwxMyk7UW5kKGEuVCwxNCk7UG5kKGEuVCk7UG5kKGEuVCk7YS5VPUxuZChhLDEyKTtLbmQoYS5VLDIpO0tuZChhLlUsMyk7UW5kKGEuVSw0KTtRbmQoYS5VLDUpO1FuZChhLlUsNik7UW5kKGEuVSw3KTtQbmQoYS5VKTthLlY9TG5kKGEsMTMpO1FuZChhLlYsMTApO2EuVz1MbmQoYSwxNCk7S25kKGEuVywxOCk7S25kKGEuVywxOSk7S25kKGEuVywyMCk7UW5kKGEuVywyMSk7UW5kKGEuVywyMik7UW5kKGEuVywyMyk7YS5iYj1MbmQoYSwxNSk7S25kKGEuYmIsMTApO0tuZChhLmJiLDExKTtLbmQoYS5iYiwxMik7S25kKGEuYmIsMTMpO0tuZChhLmJiLDE0KTtLbmQoYS5iYiwxNSk7S25kKGEuYmIsMTYpO1FuZChhLmJiLDE3KTtQbmQoYS5iYik7UG5kKGEuYmIpO2EuZWI9TG5kKGEsMTYpO0tuZChhLmViLDIpO0tuZChhLmViLDMpO0tuZChhLmViLDQpO0tuZChhLmViLDUpO0tuZChhLmViLDYpO0tuZChhLmViLDcpO1FuZChhLmViLDgpO1FuZChhLmViLDkpO2EuYWI9TG5kKGEsMTcpO0tuZChhLmFiLDApO0tuZChhLmFiLDEpO2EuSD1MbmQoYSwxOCk7UW5kKGEuSCwwKTtRbmQoYS5ILDEpO1FuZChhLkgsMik7UW5kKGEuSCwzKTtRbmQoYS5ILDQpO1FuZChhLkgsNSk7UG5kKGEuSCk7YS5kYj1MbmQoYSwxOSk7UW5kKGEuZGIsMik7YS5jPU1uZChhLDIwKTthLmQ9TW5kKGEsMjEpO2EuZT1NbmQoYSwyMik7YS5mPU1uZChhLDIzKTthLmk9TW5kKGEsMjQpO2EuZz1NbmQoYSwyNSk7YS5qPU1uZChhLDI2KTthLms9TW5kKGEsMjcpO2Eubj1NbmQoYSwyOCk7YS5yPU1uZChhLDI5KTthLnM9TW5kKGEsMzApO2EudD1NbmQoYSwzMSk7YS51PU1uZChhLDMyKTthLmZiPU1uZChhLDMzKTthLkE9TW5kKGEsMzQpO2EuQz1NbmQoYSwzNSk7YS5EPU1uZChhLDM2KTthLkY9TW5kKGEsMzcpO2EuRz1NbmQoYSwzOCk7YS5JPU1uZChhLDM5KTthLko9TW5kKGEsNDApO2EuTD1NbmQoYSw0MSk7YS5NPU1uZChhLDQyKTthLk49TW5kKGEsNDMpO2EuTz1NbmQoYSw0NCk7YS5QPU1uZChhLDQ1KTthLlg9TW5kKGEsNDYpO2EuWT1NbmQoYSw0Nyk7YS5aPU1uZChhLDQ4KTthLiQ9TW5kKGEsNDkpO2EuXz1NbmQoYSw1MCk7YS5jYj1NbmQoYSw1MSk7YS5LPU1uZChhLDUyKX1cbmZ1bmN0aW9uIFk5Yygpe1k5Yz1jY2I7dmFyIGEsYjtvOGM9bmV3IExzZChzc2UpO0Y5Yz1uZXcgTHNkKHRzZSk7cThjPShGN2MoKSx6N2MpO3A4Yz1uZXcgTnNkKCRwZSxxOGMpO25ldyBUZmQ7cjhjPW5ldyBOc2QoX2xlLG51bGwpO3M4Yz1uZXcgTHNkKHVzZSk7eDhjPShpOGMoKSxxcWIoaDhjLE9DKEdDKHIxLDEpLEtpZSwyOTEsMCxbZDhjXSkpKTt3OGM9bmV3IE5zZChscWUseDhjKTt5OGM9bmV3IE5zZChacGUsKEJjYigpLGZhbHNlKSk7QThjPShlYWQoKSxjYWQpO3o4Yz1uZXcgTnNkKGNxZSxBOGMpO0Y4Yz0oQWFkKCksemFkKTtFOGM9bmV3IE5zZCh5cGUsRjhjKTtJOGM9bmV3IE5zZChKcmUsZmFsc2UpO0s4Yz0oaGJkKCksZmJkKTtKOGM9bmV3IE5zZCh0cGUsSzhjKTtnOWM9bmV3IHEwYigxMik7ZjljPW5ldyBOc2QoYW1lLGc5Yyk7TzhjPW5ldyBOc2QoQW1lLGZhbHNlKTtQOGM9bmV3IE5zZCh4cWUsZmFsc2UpO2U5Yz1uZXcgTnNkKERtZSxmYWxzZSk7dTljPShkY2QoKSxjY2QpO3Q5Yz1uZXcgTnNkKEJtZSx1OWMpO0M5Yz1uZXcgTHNkKHVxZSk7RDljPW5ldyBMc2Qodm1lKTtFOWM9bmV3IExzZCh5bWUpO0g5Yz1uZXcgTHNkKHptZSk7UjhjPW5ldyBzN2M7UThjPW5ldyBOc2QobXFlLFI4Yyk7djhjPW5ldyBOc2QocHFlLGZhbHNlKTtMOGM9bmV3IE5zZChxcWUsZmFsc2UpO25ldyBMc2QodnNlKTtUOGM9bmV3IEhfYjtTOGM9bmV3IE5zZCh2cWUsVDhjKTtkOWM9bmV3IE5zZChYcGUsZmFsc2UpO25ldyBUZmQ7RzljPW5ldyBOc2Qod3NlLDEpO25ldyBOc2QoeHNlLHRydWUpO21lYigwKTtuZXcgTnNkKHlzZSxtZWIoMTAwKSk7bmV3IE5zZCh6c2UsZmFsc2UpO21lYigwKTtuZXcgTnNkKEFzZSxtZWIoNDAwMCkpO21lYigwKTtuZXcgTnNkKEJzZSxtZWIoNDAwKSk7bmV3IE5zZChDc2UsZmFsc2UpO25ldyBOc2QoRHNlLGZhbHNlKTtuZXcgTnNkKEVzZSx0cnVlKTtuZXcgTnNkKEZzZSxmYWxzZSk7dThjPShEZWQoKSxDZWQpO3Q4Yz1uZXcgTnNkKHJzZSx1OGMpO0k5Yz1uZXcgTnNkKExwZSwxMCk7SjljPW5ldyBOc2QoTXBlLDEwKTtLOWM9bmV3IE5zZChabGUsMjApO0w5Yz1uZXcgTnNkKE5wZSwxMCk7TTljPW5ldyBOc2QoeG1lLDIpO045Yz1uZXcgTnNkKE9wZSwxMCk7UDljPW5ldyBOc2QoUHBlLDApO1E5Yz1uZXcgTnNkKFNwZSw1KTtSOWM9bmV3IE5zZChRcGUsMSk7UzljPW5ldyBOc2QoUnBlLDEpO1Q5Yz1uZXcgTnNkKHdtZSwyMCk7VTljPW5ldyBOc2QoVHBlLDEwKTtYOWM9bmV3IE5zZChVcGUsMTApO085Yz1uZXcgTHNkKFZwZSk7VzljPW5ldyBJX2I7VjljPW5ldyBOc2Qod3FlLFc5Yyk7ajljPW5ldyBMc2QodHFlKTtpOWM9ZmFsc2U7aDljPW5ldyBOc2Qoc3FlLGk5Yyk7VjhjPW5ldyBxMGIoNSk7VThjPW5ldyBOc2QoZHFlLFY4Yyk7WDhjPShIYmQoKSxiPUJEKGdkYihCMSksOSksbmV3IHhxYihiLEJEKF9CYihiLGIubGVuZ3RoKSw5KSwwKSk7VzhjPW5ldyBOc2QoR21lLFg4Yyk7bTljPShUYmQoKSxRYmQpO2w5Yz1uZXcgTnNkKGdxZSxtOWMpO285Yz1uZXcgTHNkKGhxZSk7cDljPW5ldyBMc2QoaXFlKTtxOWM9bmV3IExzZChqcWUpO245Yz1uZXcgTHNkKGtxZSk7WjhjPShhPUJEKGdkYihJMSksOSksbmV3IHhxYihhLEJEKF9CYihhLGEubGVuZ3RoKSw5KSwwKSk7WThjPW5ldyBOc2QoRm1lLFo4Yyk7YzljPXBxYigoSWRkKCksQmRkKSk7YjljPW5ldyBOc2QoRW1lLGM5Yyk7YTljPW5ldyBmN2MoMCwwKTtfOGM9bmV3IE5zZChUbWUsYTljKTskOGM9bmV3IE5zZChicWUsZmFsc2UpO0Q4Yz0ocWFkKCksbmFkKTtDOGM9bmV3IE5zZChucWUsRDhjKTtCOGM9bmV3IE5zZChDbWUsZmFsc2UpO25ldyBMc2QoR3NlKTttZWIoMSk7bmV3IE5zZChIc2UsbnVsbCk7cjljPW5ldyBMc2QocnFlKTt2OWM9bmV3IExzZChvcWUpO0I5Yz0oVWNkKCksU2NkKTtBOWM9bmV3IE5zZChZcGUsQjljKTtzOWM9bmV3IExzZChXcGUpO3k5Yz0ocmNkKCkscHFiKHBjZCkpO3g5Yz1uZXcgTnNkKEhtZSx5OWMpO3c5Yz1uZXcgTnNkKGVxZSxmYWxzZSk7ejljPW5ldyBOc2QoZnFlLHRydWUpO004Yz1uZXcgTnNkKF9wZSxmYWxzZSk7TjhjPW5ldyBOc2QoYXFlLGZhbHNlKTtHOGM9bmV3IE5zZCgkbGUsMSk7SDhjPShNYWQoKSxLYWQpO25ldyBOc2QoSXNlLEg4Yyk7azljPXRydWV9XG5mdW5jdGlvbiB3dGMoKXt3dGM9Y2NiO3ZhciBhLGI7JHNjPW5ldyBMc2QoSW1lKTt4c2M9bmV3IExzZCgnY29vcmRpbmF0ZU9yaWdpbicpO2l0Yz1uZXcgTHNkKCdwcm9jZXNzb3JzJyk7d3NjPW5ldyBNc2QoJ2NvbXBvdW5kTm9kZScsKEJjYigpLGZhbHNlKSk7TnNjPW5ldyBNc2QoJ2luc2lkZUNvbm5lY3Rpb25zJyxmYWxzZSk7X3NjPW5ldyBMc2QoJ29yaWdpbmFsQmVuZHBvaW50cycpO2F0Yz1uZXcgTHNkKCdvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uJyk7YnRjPW5ldyBMc2QoJ29yaWdpbmFsTGFiZWxFZGdlJyk7a3RjPW5ldyBMc2QoJ3JlcHJlc2VudGVkTGFiZWxzJyk7Q3NjPW5ldyBMc2QoJ2VuZExhYmVscycpO0RzYz1uZXcgTHNkKCdlbmRMYWJlbC5vcmlnaW4nKTtTc2M9bmV3IE1zZCgnbGFiZWxTaWRlJywocmJkKCkscWJkKSk7WXNjPW5ldyBNc2QoJ21heEVkZ2VUaGlja25lc3MnLDApO2x0Yz1uZXcgTXNkKCdyZXZlcnNlZCcsZmFsc2UpO2p0Yz1uZXcgTHNkKEptZSk7VnNjPW5ldyBNc2QoJ2xvbmdFZGdlU291cmNlJyxudWxsKTtXc2M9bmV3IE1zZCgnbG9uZ0VkZ2VUYXJnZXQnLG51bGwpO1VzYz1uZXcgTXNkKCdsb25nRWRnZUhhc0xhYmVsRHVtbWllcycsZmFsc2UpO1RzYz1uZXcgTXNkKCdsb25nRWRnZUJlZm9yZUxhYmVsRHVtbXknLGZhbHNlKTtCc2M9bmV3IE1zZCgnZWRnZUNvbnN0cmFpbnQnLChHcWMoKSxFcWMpKTtQc2M9bmV3IExzZCgnaW5MYXllckxheW91dFVuaXQnKTtPc2M9bmV3IE1zZCgnaW5MYXllckNvbnN0cmFpbnQnLChlc2MoKSxjc2MpKTtRc2M9bmV3IE1zZCgnaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQnLG5ldyBSa2IpO1JzYz1uZXcgTXNkKCdpbkxheWVyU3VjY2Vzc29yQ29uc3RyYWludEJldHdlZW5Ob25EdW1taWVzJyxmYWxzZSk7Z3RjPW5ldyBMc2QoJ3BvcnREdW1teScpO3lzYz1uZXcgTXNkKCdjcm9zc2luZ0hpbnQnLG1lYigwKSk7S3NjPW5ldyBNc2QoJ2dyYXBoUHJvcGVydGllcycsKGI9QkQoZ2RiKFBXKSw5KSxuZXcgeHFiKGIsQkQoX0JiKGIsYi5sZW5ndGgpLDkpLDApKSk7SHNjPW5ldyBNc2QoJ2V4dGVybmFsUG9ydFNpZGUnLChVY2QoKSxTY2QpKTtJc2M9bmV3IE1zZCgnZXh0ZXJuYWxQb3J0U2l6ZScsbmV3IGQ3Yyk7RnNjPW5ldyBMc2QoJ2V4dGVybmFsUG9ydFJlcGxhY2VkRHVtbWllcycpO0dzYz1uZXcgTHNkKCdleHRlcm5hbFBvcnRSZXBsYWNlZER1bW15Jyk7RXNjPW5ldyBNc2QoJ2V4dGVybmFsUG9ydENvbm5lY3Rpb25zJywoYT1CRChnZGIoRjEpLDkpLG5ldyB4cWIoYSxCRChfQmIoYSxhLmxlbmd0aCksOSksMCkpKTtodGM9bmV3IE1zZCh0bGUsMCk7c3NjPW5ldyBMc2QoJ2JhcnljZW50ZXJBc3NvY2lhdGVzJyk7dnRjPW5ldyBMc2QoJ1RvcFNpZGVDb21tZW50cycpO3RzYz1uZXcgTHNkKCdCb3R0b21TaWRlQ29tbWVudHMnKTt2c2M9bmV3IExzZCgnQ29tbWVudENvbm5lY3Rpb25Qb3J0Jyk7TXNjPW5ldyBNc2QoJ2lucHV0Q29sbGVjdCcsZmFsc2UpO2V0Yz1uZXcgTXNkKCdvdXRwdXRDb2xsZWN0JyxmYWxzZSk7QXNjPW5ldyBNc2QoJ2N5Y2xpYycsZmFsc2UpO3pzYz1uZXcgTHNkKCdjcm9zc0hpZXJhcmNoeU1hcCcpO3V0Yz1uZXcgTHNkKCd0YXJnZXRPZmZzZXQnKTtuZXcgTXNkKCdzcGxpbmVMYWJlbFNpemUnLG5ldyBkN2MpO290Yz1uZXcgTHNkKCdzcGFjaW5ncycpO2Z0Yz1uZXcgTXNkKCdwYXJ0aXRpb25Db25zdHJhaW50JyxmYWxzZSk7dXNjPW5ldyBMc2QoJ2JyZWFraW5nUG9pbnQuaW5mbycpO3N0Yz1uZXcgTHNkKCdzcGxpbmVzLnN1cnZpdmluZ0VkZ2UnKTtydGM9bmV3IExzZCgnc3BsaW5lcy5yb3V0ZS5zdGFydCcpO3B0Yz1uZXcgTHNkKCdzcGxpbmVzLmVkZ2VDaGFpbicpO2R0Yz1uZXcgTHNkKCdvcmlnaW5hbFBvcnRDb25zdHJhaW50cycpO250Yz1uZXcgTHNkKCdzZWxmTG9vcEhvbGRlcicpO3F0Yz1uZXcgTHNkKCdzcGxpbmVzLm5zUG9ydFknKTtac2M9bmV3IExzZCgnbW9kZWxPcmRlcicpO1hzYz1uZXcgTHNkKCdsb25nRWRnZVRhcmdldE5vZGUnKTtKc2M9bmV3IE1zZChYbmUsZmFsc2UpO210Yz1uZXcgTXNkKFhuZSxmYWxzZSk7THNjPW5ldyBMc2QoJ2xheWVyQ29uc3RyYWludHMuaGlkZGVuTm9kZXMnKTtjdGM9bmV3IExzZCgnbGF5ZXJDb25zdHJhaW50cy5vcHBvc2lkZVBvcnQnKTt0dGM9bmV3IExzZCgndGFyZ2V0Tm9kZS5tb2RlbE9yZGVyJyl9XG5mdW5jdGlvbiBqd2MoKXtqd2M9Y2NiO3B1Yz0oeHFjKCksdnFjKTtvdWM9bmV3IE5zZChZbmUscHVjKTtHdWM9bmV3IE5zZChabmUsKEJjYigpLGZhbHNlKSk7TXVjPShtc2MoKSxrc2MpO0x1Yz1uZXcgTnNkKCRuZSxNdWMpO2N2Yz1uZXcgTnNkKF9uZSxmYWxzZSk7ZHZjPW5ldyBOc2QoYW9lLHRydWUpO0l0Yz1uZXcgTnNkKGJvZSxmYWxzZSk7eHZjPShCQWMoKSx6QWMpO3d2Yz1uZXcgTnNkKGNvZSx4dmMpO21lYigxKTtGdmM9bmV3IE5zZChkb2UsbWViKDcpKTtHdmM9bmV3IE5zZChlb2UsZmFsc2UpO0h1Yz1uZXcgTnNkKGZvZSxmYWxzZSk7bnVjPShtcWMoKSxpcWMpO211Yz1uZXcgTnNkKGdvZSxudWMpO2J2Yz0obHpjKCksanpjKTthdmM9bmV3IE5zZChob2UsYnZjKTtUdWM9KEN0YygpLEJ0Yyk7U3VjPW5ldyBOc2QoaW9lLFR1Yyk7bWViKC0xKTtSdWM9bmV3IE5zZChqb2UsbWViKC0xKSk7bWViKC0xKTtVdWM9bmV3IE5zZChrb2UsbWViKC0xKSk7bWViKC0xKTtWdWM9bmV3IE5zZChsb2UsbWViKDQpKTttZWIoLTEpO1h1Yz1uZXcgTnNkKG1vZSxtZWIoMikpO191Yz0oa0FjKCksaUFjKTskdWM9bmV3IE5zZChub2UsX3VjKTttZWIoMCk7WnVjPW5ldyBOc2Qob29lLG1lYigwKSk7UHVjPW5ldyBOc2QocG9lLG1lYihPaGUpKTtsdWM9KFJwYygpLFBwYyk7a3VjPW5ldyBOc2QocW9lLGx1Yyk7WHRjPW5ldyBOc2Qocm9lLGZhbHNlKTtldWM9bmV3IE5zZChzb2UsMC4xKTtpdWM9bmV3IE5zZCh0b2UsZmFsc2UpO21lYigtMSk7Z3VjPW5ldyBOc2QodW9lLG1lYigtMSkpO21lYigtMSk7aHVjPW5ldyBOc2Qodm9lLG1lYigtMSkpO21lYigwKTtZdGM9bmV3IE5zZCh3b2UsbWViKDQwKSk7Y3VjPShYcmMoKSxXcmMpO2J1Yz1uZXcgTnNkKHhvZSxjdWMpOyR0Yz1VcmM7WnRjPW5ldyBOc2QoeW9lLCR0Yyk7dnZjPShWemMoKSxRemMpO3V2Yz1uZXcgTnNkKHpvZSx2dmMpO2t2Yz1uZXcgTHNkKEFvZSk7ZnZjPShfcWMoKSxacWMpO2V2Yz1uZXcgTnNkKEJvZSxmdmMpO2l2Yz0obHJjKCksaXJjKTtodmM9bmV3IE5zZChDb2UsaXZjKTtuZXcgVGZkO252Yz1uZXcgTnNkKERvZSwwLjMpO3B2Yz1uZXcgTHNkKEVvZSk7cnZjPShJemMoKSxHemMpO3F2Yz1uZXcgTnNkKEZvZSxydmMpO3h1Yz0oVEFjKCksUkFjKTt3dWM9bmV3IE5zZChHb2UseHVjKTt6dWM9KF9BYygpLCRBYyk7eXVjPW5ldyBOc2QoSG9lLHp1Yyk7QnVjPSh0QmMoKSxzQmMpO0F1Yz1uZXcgTnNkKElvZSxCdWMpO0R1Yz1uZXcgTnNkKEpvZSwwLjIpO3V1Yz1uZXcgTnNkKEtvZSwyKTtCdmM9bmV3IE5zZChMb2UsbnVsbCk7RHZjPW5ldyBOc2QoTW9lLDEwKTtDdmM9bmV3IE5zZChOb2UsMTApO0V2Yz1uZXcgTnNkKE9vZSwyMCk7bWViKDApO3l2Yz1uZXcgTnNkKFBvZSxtZWIoMCkpO21lYigwKTt6dmM9bmV3IE5zZChRb2UsbWViKDApKTttZWIoMCk7QXZjPW5ldyBOc2QoUm9lLG1lYigwKSk7SnRjPW5ldyBOc2QoU29lLGZhbHNlKTtOdGM9KHlyYygpLHdyYyk7TXRjPW5ldyBOc2QoVG9lLE50Yyk7THRjPShJcGMoKSxIcGMpO0t0Yz1uZXcgTnNkKFVvZSxMdGMpO0p1Yz1uZXcgTnNkKFZvZSxmYWxzZSk7bWViKDApO0l1Yz1uZXcgTnNkKFdvZSxtZWIoMTYpKTttZWIoMCk7S3VjPW5ldyBOc2QoWG9lLG1lYig1KSk7YndjPShMQmMoKSxKQmMpO2F3Yz1uZXcgTnNkKFlvZSxid2MpO0h2Yz1uZXcgTnNkKFpvZSwxMCk7S3ZjPW5ldyBOc2QoJG9lLDEpO1R2Yz0oYnFjKCksYXFjKTtTdmM9bmV3IE5zZChfb2UsVHZjKTtOdmM9bmV3IExzZChhcGUpO1F2Yz1tZWIoMSk7bWViKDApO1B2Yz1uZXcgTnNkKGJwZSxRdmMpO2d3Yz0oQ0JjKCksekJjKTtmd2M9bmV3IE5zZChjcGUsZ3djKTtjd2M9bmV3IExzZChkcGUpO1l2Yz1uZXcgTnNkKGVwZSx0cnVlKTtXdmM9bmV3IE5zZChmcGUsMik7JHZjPW5ldyBOc2QoZ3BlLHRydWUpO3R1Yz0oU3FjKCksUXFjKTtzdWM9bmV3IE5zZChocGUsdHVjKTtydWM9KEFwYygpLHdwYyk7cXVjPW5ldyBOc2QoaXBlLHJ1Yyk7V3RjPSh0QWMoKSxyQWMpO1Z0Yz1uZXcgTnNkKGpwZSxXdGMpO1V0Yz1uZXcgTnNkKGtwZSxmYWxzZSk7UHRjPShSWGIoKSxRWGIpO090Yz1uZXcgTnNkKGxwZSxQdGMpO1R0Yz0oeHpjKCksdXpjKTtTdGM9bmV3IE5zZChtcGUsVHRjKTtRdGM9bmV3IE5zZChucGUsMCk7UnRjPW5ldyBOc2Qob3BlLDApO091Yz1rcWM7TnVjPU9wYztXdWM9aXpjO1l1Yz1pemM7UXVjPWZ6YztmdWM9KGhiZCgpLGViZCk7anVjPVBwYztkdWM9UHBjO190Yz1QcGM7YXVjPWViZDtsdmM9VHpjO212Yz1RemM7Z3ZjPVF6YztqdmM9UXpjO292Yz1TemM7dHZjPVR6YztzdmM9VHpjO0N1Yz0oQWFkKCkseWFkKTtFdWM9eWFkO0Z1Yz1zQmM7dnVjPXhhZDtJdmM9S0JjO0p2Yz1JQmM7THZjPUtCYztNdmM9SUJjO1V2Yz1LQmM7VnZjPUlCYztPdmM9X3BjO1J2Yz1hcWM7aHdjPUtCYztpd2M9SUJjO2R3Yz1LQmM7ZXdjPUlCYztadmM9SUJjO1h2Yz1JQmM7X3ZjPUlCY31cbmZ1bmN0aW9uIFM4Yigpe1M4Yj1jY2I7WTdiPW5ldyBUOGIoJ0RJUkVDVElPTl9QUkVQUk9DRVNTT1InLDApO1Y3Yj1uZXcgVDhiKCdDT01NRU5UX1BSRVBST0NFU1NPUicsMSk7WjdiPW5ldyBUOGIoJ0VER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUicsMik7bjhiPW5ldyBUOGIoJ0lOVEVSQUNUSVZFX0VYVEVSTkFMX1BPUlRfUE9TSVRJT05FUicsMyk7RzhiPW5ldyBUOGIoJ1BBUlRJVElPTl9QUkVQUk9DRVNTT1InLDQpO3I4Yj1uZXcgVDhiKCdMQUJFTF9EVU1NWV9JTlNFUlRFUicsNSk7TThiPW5ldyBUOGIoJ1NFTEZfTE9PUF9QUkVQUk9DRVNTT1InLDYpO3c4Yj1uZXcgVDhiKCdMQVlFUl9DT05TVFJBSU5UX1BSRVBST0NFU1NPUicsNyk7RThiPW5ldyBUOGIoJ1BBUlRJVElPTl9NSURQUk9DRVNTT1InLDgpO2k4Yj1uZXcgVDhiKCdISUdIX0RFR1JFRV9OT0RFX0xBWUVSX1BST0NFU1NPUicsOSk7QThiPW5ldyBUOGIoJ05PREVfUFJPTU9USU9OJywxMCk7djhiPW5ldyBUOGIoJ0xBWUVSX0NPTlNUUkFJTlRfUE9TVFBST0NFU1NPUicsMTEpO0Y4Yj1uZXcgVDhiKCdQQVJUSVRJT05fUE9TVFBST0NFU1NPUicsMTIpO2U4Yj1uZXcgVDhiKCdISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUicsMTMpO084Yj1uZXcgVDhiKCdTRU1JX0lOVEVSQUNUSVZFX0NST1NTTUlOX1BST0NFU1NPUicsMTQpO1A3Yj1uZXcgVDhiKCdCUkVBS0lOR19QT0lOVF9JTlNFUlRFUicsMTUpO3o4Yj1uZXcgVDhiKCdMT05HX0VER0VfU1BMSVRURVInLDE2KTtJOGI9bmV3IFQ4YignUE9SVF9TSURFX1BST0NFU1NPUicsMTcpO284Yj1uZXcgVDhiKCdJTlZFUlRFRF9QT1JUX1BST0NFU1NPUicsMTgpO0g4Yj1uZXcgVDhiKCdQT1JUX0xJU1RfU09SVEVSJywxOSk7UThiPW5ldyBUOGIoJ1NPUlRfQllfSU5QVVRfT1JERVJfT0ZfTU9ERUwnLDIwKTtDOGI9bmV3IFQ4YignTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1InLDIxKTtRN2I9bmV3IFQ4YignQlJFQUtJTkdfUE9JTlRfUFJPQ0VTU09SJywyMik7RDhiPW5ldyBUOGIoQm5lLDIzKTtSOGI9bmV3IFQ4YihDbmUsMjQpO0s4Yj1uZXcgVDhiKCdTRUxGX0xPT1BfUE9SVF9SRVNUT1JFUicsMjUpO1A4Yj1uZXcgVDhiKCdTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSJywyNik7cDhiPW5ldyBUOGIoJ0lOX0xBWUVSX0NPTlNUUkFJTlRfUFJPQ0VTU09SJywyNyk7YjhiPW5ldyBUOGIoJ0VORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1InLDI4KTtxOGI9bmV3IFQ4YignTEFCRUxfQU5EX05PREVfU0laRV9QUk9DRVNTT1InLDI5KTttOGI9bmV3IFQ4YignSU5ORVJNT1NUX05PREVfTUFSR0lOX0NBTENVTEFUT1InLDMwKTtOOGI9bmV3IFQ4YignU0VMRl9MT09QX1JPVVRFUicsMzEpO1Q3Yj1uZXcgVDhiKCdDT01NRU5UX05PREVfTUFSR0lOX0NBTENVTEFUT1InLDMyKTtfN2I9bmV3IFQ4YignRU5EX0xBQkVMX1BSRVBST0NFU1NPUicsMzMpO3Q4Yj1uZXcgVDhiKCdMQUJFTF9EVU1NWV9TV0lUQ0hFUicsMzQpO1M3Yj1uZXcgVDhiKCdDRU5URVJfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1InLDM1KTt1OGI9bmV3IFQ4YignTEFCRUxfU0lERV9TRUxFQ1RPUicsMzYpO2s4Yj1uZXcgVDhiKCdIWVBFUkVER0VfRFVNTVlfTUVSR0VSJywzNyk7ZjhiPW5ldyBUOGIoJ0hJRVJBUkNISUNBTF9QT1JUX0RVTU1ZX1NJWkVfUFJPQ0VTU09SJywzOCk7eDhiPW5ldyBUOGIoJ0xBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SJywzOSk7aDhiPW5ldyBUOGIoJ0hJRVJBUkNISUNBTF9QT1JUX1BPU0lUSU9OX1BST0NFU1NPUicsNDApO1c3Yj1uZXcgVDhiKCdDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SJyw0MSk7VTdiPW5ldyBUOGIoJ0NPTU1FTlRfUE9TVFBST0NFU1NPUicsNDIpO2w4Yj1uZXcgVDhiKCdIWVBFUk5PREVfUFJPQ0VTU09SJyw0Myk7ZzhiPW5ldyBUOGIoJ0hJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVInLDQ0KTt5OGI9bmV3IFQ4YignTE9OR19FREdFX0pPSU5FUicsNDUpO0w4Yj1uZXcgVDhiKCdTRUxGX0xPT1BfUE9TVFBST0NFU1NPUicsNDYpO1I3Yj1uZXcgVDhiKCdCUkVBS0lOR19QT0lOVF9SRU1PVkVSJyw0Nyk7QjhiPW5ldyBUOGIoJ05PUlRIX1NPVVRIX1BPUlRfUE9TVFBST0NFU1NPUicsNDgpO2o4Yj1uZXcgVDhiKCdIT1JJWk9OVEFMX0NPTVBBQ1RPUicsNDkpO3M4Yj1uZXcgVDhiKCdMQUJFTF9EVU1NWV9SRU1PVkVSJyw1MCk7YzhiPW5ldyBUOGIoJ0ZJTkFMX1NQTElORV9CRU5EUE9JTlRTX0NBTENVTEFUT1InLDUxKTthOGI9bmV3IFQ4YignRU5EX0xBQkVMX1NPUlRFUicsNTIpO0o4Yj1uZXcgVDhiKCdSRVZFUlNFRF9FREdFX1JFU1RPUkVSJyw1Myk7JDdiPW5ldyBUOGIoJ0VORF9MQUJFTF9QT1NUUFJPQ0VTU09SJyw1NCk7ZDhiPW5ldyBUOGIoJ0hJRVJBUkNISUNBTF9OT0RFX1JFU0laRVInLDU1KTtYN2I9bmV3IFQ4YignRElSRUNUSU9OX1BPU1RQUk9DRVNTT1InLDU2KX1cbmZ1bmN0aW9uIEtJYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxILEksSixLLEwsTSxOLE8sUCxRLFIsUyxULFUsVixXLFgsWSxaLCQsYWIsYmIsY2IsZGIsZWIsZmIsZ2IsaGIsaWIsamIsa2IsbGI7Y2I9MDtmb3IoSD1iLEs9MCxOPUgubGVuZ3RoO0s8TjsrK0spe0Y9SFtLXTtmb3IoVj1uZXcgb2xiKEYuaik7Vi5hPFYuYy5jLmxlbmd0aDspe1U9QkQobWxiKFYpLDExKTtYPTA7Zm9yKGg9bmV3IG9sYihVLmcpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxNyk7Ri5jIT1nLmQuaS5jJiYrK1h9WD4wJiYoYS5hW1UucF09Y2IrKyl9fWhiPTA7Zm9yKEk9YyxMPTAsTz1JLmxlbmd0aDtMPE87KytMKXtGPUlbTF07UD0wO2ZvcihWPW5ldyBvbGIoRi5qKTtWLmE8Vi5jLmMubGVuZ3RoOyl7VT1CRChtbGIoViksMTEpO2lmKFUuaj09KFVjZCgpLEFjZCkpe2ZvcihoPW5ldyBvbGIoVS5lKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTcpO2lmKEYuYyE9Zy5jLmkuYyl7KytQO2JyZWFrfX19ZWxzZXticmVha319Uj0wO1k9bmV3IEJpYihGLmosRi5qLmMubGVuZ3RoKTt3aGlsZShZLmI+MCl7VT0oc0NiKFkuYj4wKSxCRChZLmEuWGIoWS5jPS0tWS5iKSwxMSkpO1g9MDtmb3IoaD1uZXcgb2xiKFUuZSk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDE3KTtGLmMhPWcuYy5pLmMmJisrWH1pZihYPjApe2lmKFUuaj09KFVjZCgpLEFjZCkpe2EuYVtVLnBdPWhiOysraGJ9ZWxzZXthLmFbVS5wXT1oYitQK1I7KytSfX19aGIrPVJ9Vz1uZXcgTHFiO289bmV3IHpzYjtmb3IoRz1iLEo9MCxNPUcubGVuZ3RoO0o8TTsrK0ope0Y9R1tKXTtmb3IoZmI9bmV3IG9sYihGLmopO2ZiLmE8ZmIuYy5jLmxlbmd0aDspe2ViPUJEKG1sYihmYiksMTEpO2ZvcihoPW5ldyBvbGIoZWIuZyk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDE3KTtqYj1nLmQ7aWYoRi5jIT1qYi5pLmMpe2RiPUJEKFdkKGlyYihXLmYsZWIpKSw0NjcpO2liPUJEKFdkKGlyYihXLmYsamIpKSw0NjcpO2lmKCFkYiYmIWliKXtuPW5ldyBOSWM7by5hLnpjKG4sbyk7RWtiKG4uYSxnKTtFa2Iobi5kLGViKTtqcmIoVy5mLGViLG4pO0VrYihuLmQsamIpO2pyYihXLmYsamIsbil9ZWxzZSBpZighZGIpe0VrYihpYi5hLGcpO0VrYihpYi5kLGViKTtqcmIoVy5mLGViLGliKX1lbHNlIGlmKCFpYil7RWtiKGRiLmEsZyk7RWtiKGRiLmQsamIpO2pyYihXLmYsamIsZGIpfWVsc2UgaWYoZGI9PWliKXtFa2IoZGIuYSxnKX1lbHNle0VrYihkYi5hLGcpO2ZvcihUPW5ldyBvbGIoaWIuZCk7VC5hPFQuYy5jLmxlbmd0aDspe1M9QkQobWxiKFQpLDExKTtqcmIoVy5mLFMsZGIpfUdrYihkYi5hLGliLmEpO0drYihkYi5kLGliLmQpO28uYS5CYyhpYikhPW51bGx9fX19fXA9QkQoRWUobyxLQyhvWSx7MzoxLDQ6MSw1OjEsMTk0NjoxfSw0Njcsby5hLmdjKCksMCwxKSksMTk0Nik7RD1iWzBdLmM7YmI9Y1swXS5jO2ZvcihrPXAsbD0wLG09ay5sZW5ndGg7bDxtOysrbCl7aj1rW2xdO2ouZT1jYjtqLmY9aGI7Zm9yKFY9bmV3IG9sYihqLmQpO1YuYTxWLmMuYy5sZW5ndGg7KXtVPUJEKG1sYihWKSwxMSk7Wj1hLmFbVS5wXTtpZihVLmkuYz09RCl7WjxqLmUmJihqLmU9Wik7Wj5qLmImJihqLmI9Wil9ZWxzZSBpZihVLmkuYz09YmIpe1o8ai5mJiYoai5mPVopO1o+ai5jJiYoai5jPVopfX19S2xiKHAsMCxwLmxlbmd0aCxudWxsKTtnYj1LQyhXRCxvamUsMjUscC5sZW5ndGgsMTUsMSk7ZD1LQyhXRCxvamUsMjUsaGIrMSwxNSwxKTtmb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtnYltyXT1wW3JdLmY7ZFtnYltyXV09MX1mPTA7Zm9yKHM9MDtzPGQubGVuZ3RoO3MrKyl7ZFtzXT09MT8oZFtzXT1mKTotLWZ9JD0wO2Zvcih0PTA7dDxnYi5sZW5ndGg7dCsrKXtnYlt0XSs9ZFtnYlt0XV07JD0kd25kLk1hdGgubWF4KCQsZ2JbdF0rMSl9aT0xO3doaWxlKGk8JCl7aSo9Mn1sYj0yKmktMTtpLT0xO2tiPUtDKFdELG9qZSwyNSxsYiwxNSwxKTtlPTA7Zm9yKEI9MDtCPGdiLmxlbmd0aDtCKyspe0E9Z2JbQl0raTsrK2tiW0FdO3doaWxlKEE+MCl7QSUyPjAmJihlKz1rYltBKzFdKTtBPShBLTEpLzJ8MDsrK2tiW0FdfX1DPUtDKG5ZLFVoZSwzNjIscC5sZW5ndGgqMiwwLDEpO2Zvcih1PTA7dTxwLmxlbmd0aDt1Kyspe0NbMip1XT1uZXcgUUljKHBbdV0scFt1XS5lLHBbdV0uYiwoVUljKCksVEljKSk7Q1syKnUrMV09bmV3IFFJYyhwW3VdLHBbdV0uYixwW3VdLmUsU0ljKX1LbGIoQywwLEMubGVuZ3RoLG51bGwpO1E9MDtmb3Iodj0wO3Y8Qy5sZW5ndGg7disrKXtzd2l0Y2goQ1t2XS5kLmcpe2Nhc2UgMDorK1E7YnJlYWs7Y2FzZSAxOi0tUTtlKz1RO319YWI9S0MoblksVWhlLDM2MixwLmxlbmd0aCoyLDAsMSk7Zm9yKHc9MDt3PHAubGVuZ3RoO3crKyl7YWJbMip3XT1uZXcgUUljKHBbd10scFt3XS5mLHBbd10uYywoVUljKCksVEljKSk7YWJbMip3KzFdPW5ldyBRSWMocFt3XSxwW3ddLmMscFt3XS5mLFNJYyl9S2xiKGFiLDAsYWIubGVuZ3RoLG51bGwpO1E9MDtmb3IocT0wO3E8YWIubGVuZ3RoO3ErKyl7c3dpdGNoKGFiW3FdLmQuZyl7Y2FzZSAwOisrUTticmVhaztjYXNlIDE6LS1RO2UrPVE7fX1yZXR1cm4gZX1cbmZ1bmN0aW9uIHdmZSgpe3dmZT1jY2I7ZmZlPW5ldyB4ZmUoNyk7aGZlPSgrK3ZmZSxuZXcgaWdlKDgsOTQpKTsrK3ZmZTtuZXcgaWdlKDgsNjQpO2lmZT0oKyt2ZmUsbmV3IGlnZSg4LDM2KSk7b2ZlPSgrK3ZmZSxuZXcgaWdlKDgsNjUpKTtwZmU9KCsrdmZlLG5ldyBpZ2UoOCwxMjIpKTtxZmU9KCsrdmZlLG5ldyBpZ2UoOCw5MCkpO3RmZT0oKyt2ZmUsbmV3IGlnZSg4LDk4KSk7bWZlPSgrK3ZmZSxuZXcgaWdlKDgsNjYpKTtyZmU9KCsrdmZlLG5ldyBpZ2UoOCw2MCkpO3VmZT0oKyt2ZmUsbmV3IGlnZSg4LDYyKSk7ZWZlPW5ldyB4ZmUoMTEpO2NmZT0oKyt2ZmUsbmV3ICRmZSg0KSk7VWZlKGNmZSw0OCw1Nyk7c2ZlPSgrK3ZmZSxuZXcgJGZlKDQpKTtVZmUoc2ZlLDQ4LDU3KTtVZmUoc2ZlLDY1LDkwKTtVZmUoc2ZlLDk1LDk1KTtVZmUoc2ZlLDk3LDEyMik7bmZlPSgrK3ZmZSxuZXcgJGZlKDQpKTtVZmUobmZlLDksOSk7VWZlKG5mZSwxMCwxMCk7VWZlKG5mZSwxMiwxMik7VWZlKG5mZSwxMywxMyk7VWZlKG5mZSwzMiwzMik7amZlPV9mZShjZmUpO2xmZT1fZmUoc2ZlKTtrZmU9X2ZlKG5mZSk7WmVlPW5ldyBMcWI7JGVlPW5ldyBMcWI7X2VlPU9DKEdDKFpJLDEpLG5pZSwyLDYsWydDbicsJ0x1JywnTGwnLCdMdCcsJ0xtJywnTG8nLCdNbicsJ01lJywnTWMnLCdOZCcsJ05sJywnTm8nLCdacycsJ1psJywnWnAnLCdDYycsJ0NmJyxudWxsLCdDbycsJ0NzJywnUGQnLCdQcycsJ1BlJywnUGMnLCdQbycsJ1NtJywnU2MnLCdTaycsJ1NvJywnUGknLCdQZicsJ0wnLCdNJywnTicsJ1onLCdDJywnUCcsJ1MnXSk7WWVlPU9DKEdDKFpJLDEpLG5pZSwyLDYsWydCYXNpYyBMYXRpbicsJ0xhdGluLTEgU3VwcGxlbWVudCcsJ0xhdGluIEV4dGVuZGVkLUEnLCdMYXRpbiBFeHRlbmRlZC1CJywnSVBBIEV4dGVuc2lvbnMnLCdTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMnLCdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MnLCdHcmVlaycsJ0N5cmlsbGljJywnQXJtZW5pYW4nLCdIZWJyZXcnLCdBcmFiaWMnLCdTeXJpYWMnLCdUaGFhbmEnLCdEZXZhbmFnYXJpJywnQmVuZ2FsaScsJ0d1cm11a2hpJywnR3VqYXJhdGknLCdPcml5YScsJ1RhbWlsJywnVGVsdWd1JywnS2FubmFkYScsJ01hbGF5YWxhbScsJ1NpbmhhbGEnLCdUaGFpJywnTGFvJywnVGliZXRhbicsJ015YW5tYXInLCdHZW9yZ2lhbicsJ0hhbmd1bCBKYW1vJywnRXRoaW9waWMnLCdDaGVyb2tlZScsJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnLCdPZ2hhbScsJ1J1bmljJywnS2htZXInLCdNb25nb2xpYW4nLCdMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsJywnR3JlZWsgRXh0ZW5kZWQnLCdHZW5lcmFsIFB1bmN0dWF0aW9uJywnU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzJywnQ3VycmVuY3kgU3ltYm9scycsJ0NvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scycsJ0xldHRlcmxpa2UgU3ltYm9scycsJ051bWJlciBGb3JtcycsJ0Fycm93cycsJ01hdGhlbWF0aWNhbCBPcGVyYXRvcnMnLCdNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCcsJ0NvbnRyb2wgUGljdHVyZXMnLCdPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbicsJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnLCdCb3ggRHJhd2luZycsJ0Jsb2NrIEVsZW1lbnRzJywnR2VvbWV0cmljIFNoYXBlcycsJ01pc2NlbGxhbmVvdXMgU3ltYm9scycsJ0RpbmdiYXRzJywnQnJhaWxsZSBQYXR0ZXJucycsJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50JywnS2FuZ3hpIFJhZGljYWxzJywnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycycsJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbicsJ0hpcmFnYW5hJywnS2F0YWthbmEnLCdCb3BvbW9mbycsJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nLCdLYW5idW4nLCdCb3BvbW9mbyBFeHRlbmRlZCcsJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnLCdDSksgQ29tcGF0aWJpbGl0eScsJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnLCdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywnWWkgU3lsbGFibGVzJywnWWkgUmFkaWNhbHMnLCdIYW5ndWwgU3lsbGFibGVzJyx1eGUsJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnLCdBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcycsJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQScsJ0NvbWJpbmluZyBIYWxmIE1hcmtzJywnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnLCdTbWFsbCBGb3JtIFZhcmlhbnRzJywnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJywnU3BlY2lhbHMnLCdIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcycsJ09sZCBJdGFsaWMnLCdHb3RoaWMnLCdEZXNlcmV0JywnQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scycsJ011c2ljYWwgU3ltYm9scycsJ01hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scycsJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEInLCdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQnLCdUYWdzJ10pO2FmZT1PQyhHQyhXRCwxKSxvamUsMjUsMTUsWzY2MzA0LDY2MzUxLDY2MzUyLDY2MzgzLDY2NTYwLDY2NjM5LDExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTk4MDgsMTIwODMxLDEzMTA3MiwxNzM3ODIsMTk0NTYwLDE5NTEwMyw5MTc1MDQsOTE3NjMxXSl9XG5mdW5jdGlvbiBxSmIoKXtxSmI9Y2NiO25KYj1uZXcgdEpiKCdPVVRfVF9MJywwLChOSGIoKSxMSGIpLChFSWIoKSxCSWIpLChnSGIoKSxkSGIpLGRIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKChIYmQoKSxEYmQpLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtHYmQsemJkXSkpXSkpO21KYj1uZXcgdEpiKCdPVVRfVF9DJywxLEtIYixCSWIsZEhiLGVIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKERiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbR2JkLHliZF0pKSxxcWIoRGJkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtHYmQseWJkLEFiZF0pKV0pKTtvSmI9bmV3IHRKYignT1VUX1RfUicsMixNSGIsQkliLGRIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihEYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0diZCxCYmRdKSldKSk7ZUpiPW5ldyB0SmIoJ09VVF9CX0wnLDMsTEhiLERJYixmSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoRGJkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtFYmQsemJkXSkpXSkpO2RKYj1uZXcgdEpiKCdPVVRfQl9DJyw0LEtIYixESWIsZkhiLGVIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKERiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbRWJkLHliZF0pKSxxcWIoRGJkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtFYmQseWJkLEFiZF0pKV0pKTtmSmI9bmV3IHRKYignT1VUX0JfUicsNSxNSGIsREliLGZIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihEYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0ViZCxCYmRdKSldKSk7aUpiPW5ldyB0SmIoJ09VVF9MX1QnLDYsTUhiLERJYixkSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoRGJkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFt6YmQsR2JkLEFiZF0pKV0pKTtoSmI9bmV3IHRKYignT1VUX0xfQycsNyxNSGIsQ0liLGVIYixkSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihEYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW3piZCxGYmRdKSkscXFiKERiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbemJkLEZiZCxBYmRdKSldKSk7Z0piPW5ldyB0SmIoJ09VVF9MX0InLDgsTUhiLEJJYixmSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoRGJkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFt6YmQsRWJkLEFiZF0pKV0pKTtsSmI9bmV3IHRKYignT1VUX1JfVCcsOSxMSGIsREliLGRIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihEYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0JiZCxHYmQsQWJkXSkpXSkpO2tKYj1uZXcgdEpiKCdPVVRfUl9DJywxMCxMSGIsQ0liLGVIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihEYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0JiZCxGYmRdKSkscXFiKERiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbQmJkLEZiZCxBYmRdKSldKSk7akpiPW5ldyB0SmIoJ09VVF9SX0InLDExLExIYixCSWIsZkhiLGZIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKERiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbQmJkLEViZCxBYmRdKSldKSk7YkpiPW5ldyB0SmIoJ0lOX1RfTCcsMTIsTEhiLERJYixkSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtHYmQsemJkXSkpLHFxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0diZCx6YmQsQWJkXSkpXSkpO2FKYj1uZXcgdEpiKCdJTl9UX0MnLDEzLEtIYixESWIsZEhiLGVIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbR2JkLHliZF0pKSxxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtHYmQseWJkLEFiZF0pKV0pKTtjSmI9bmV3IHRKYignSU5fVF9SJywxNCxNSGIsREliLGRIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0diZCxCYmRdKSkscXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbR2JkLEJiZCxBYmRdKSldKSk7JEliPW5ldyB0SmIoJ0lOX0NfTCcsMTUsTEhiLENJYixlSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtGYmQsemJkXSkpLHFxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0ZiZCx6YmQsQWJkXSkpXSkpO1pJYj1uZXcgdEpiKCdJTl9DX0MnLDE2LEtIYixDSWIsZUhiLGVIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbRmJkLHliZF0pKSxxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtGYmQseWJkLEFiZF0pKV0pKTtfSWI9bmV3IHRKYignSU5fQ19SJywxNyxNSGIsQ0liLGVIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0ZiZCxCYmRdKSkscXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbRmJkLEJiZCxBYmRdKSldKSk7WEliPW5ldyB0SmIoJ0lOX0JfTCcsMTgsTEhiLEJJYixmSGIsZEhiLE9DKEdDKExLLDEpLFVoZSwyMSwwLFtxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtFYmQsemJkXSkpLHFxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0ViZCx6YmQsQWJkXSkpXSkpO1dJYj1uZXcgdEpiKCdJTl9CX0MnLDE5LEtIYixCSWIsZkhiLGVIYixPQyhHQyhMSywxKSxVaGUsMjEsMCxbcXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbRWJkLHliZF0pKSxxcWIoQ2JkLE9DKEdDKEIxLDEpLEtpZSw5MywwLFtFYmQseWJkLEFiZF0pKV0pKTtZSWI9bmV3IHRKYignSU5fQl9SJywyMCxNSGIsQkliLGZIYixmSGIsT0MoR0MoTEssMSksVWhlLDIxLDAsW3FxYihDYmQsT0MoR0MoQjEsMSksS2llLDkzLDAsW0ViZCxCYmRdKSkscXFiKENiZCxPQyhHQyhCMSwxKSxLaWUsOTMsMCxbRWJkLEJiZCxBYmRdKSldKSk7cEpiPW5ldyB0SmIob2xlLDIxLG51bGwsbnVsbCxudWxsLG51bGwsT0MoR0MoTEssMSksVWhlLDIxLDAsW10pKX1cbmZ1bmN0aW9uIGpHZCgpe2pHZD1jY2I7UEZkPShORmQoKSxNRmQpLmI7QkQocXVkKFpLZChNRmQuYiksMCksMzQpO0JEKHF1ZChaS2QoTUZkLmIpLDEpLDE4KTtPRmQ9TUZkLmE7QkQocXVkKFpLZChNRmQuYSksMCksMzQpO0JEKHF1ZChaS2QoTUZkLmEpLDEpLDE4KTtCRChxdWQoWktkKE1GZC5hKSwyKSwxOCk7QkQocXVkKFpLZChNRmQuYSksMyksMTgpO0JEKHF1ZChaS2QoTUZkLmEpLDQpLDE4KTtRRmQ9TUZkLm87QkQocXVkKFpLZChNRmQubyksMCksMzQpO0JEKHF1ZChaS2QoTUZkLm8pLDEpLDM0KTtTRmQ9QkQocXVkKFpLZChNRmQubyksMiksMTgpO0JEKHF1ZChaS2QoTUZkLm8pLDMpLDE4KTtCRChxdWQoWktkKE1GZC5vKSw0KSwxOCk7QkQocXVkKFpLZChNRmQubyksNSksMTgpO0JEKHF1ZChaS2QoTUZkLm8pLDYpLDE4KTtCRChxdWQoWktkKE1GZC5vKSw3KSwxOCk7QkQocXVkKFpLZChNRmQubyksOCksMTgpO0JEKHF1ZChaS2QoTUZkLm8pLDkpLDE4KTtCRChxdWQoWktkKE1GZC5vKSwxMCksMTgpO0JEKHF1ZChaS2QoTUZkLm8pLDExKSwxOCk7QkQocXVkKFpLZChNRmQubyksMTIpLDE4KTtCRChxdWQoWktkKE1GZC5vKSwxMyksMTgpO0JEKHF1ZChaS2QoTUZkLm8pLDE0KSwxOCk7QkQocXVkKFpLZChNRmQubyksMTUpLDE4KTtCRChxdWQoV0tkKE1GZC5vKSwwKSw1OSk7QkQocXVkKFdLZChNRmQubyksMSksNTkpO0JEKHF1ZChXS2QoTUZkLm8pLDIpLDU5KTtCRChxdWQoV0tkKE1GZC5vKSwzKSw1OSk7QkQocXVkKFdLZChNRmQubyksNCksNTkpO0JEKHF1ZChXS2QoTUZkLm8pLDUpLDU5KTtCRChxdWQoV0tkKE1GZC5vKSw2KSw1OSk7QkQocXVkKFdLZChNRmQubyksNyksNTkpO0JEKHF1ZChXS2QoTUZkLm8pLDgpLDU5KTtCRChxdWQoV0tkKE1GZC5vKSw5KSw1OSk7UkZkPU1GZC5wO0JEKHF1ZChaS2QoTUZkLnApLDApLDM0KTtCRChxdWQoWktkKE1GZC5wKSwxKSwzNCk7QkQocXVkKFpLZChNRmQucCksMiksMzQpO0JEKHF1ZChaS2QoTUZkLnApLDMpLDM0KTtCRChxdWQoWktkKE1GZC5wKSw0KSwxOCk7QkQocXVkKFpLZChNRmQucCksNSksMTgpO0JEKHF1ZChXS2QoTUZkLnApLDApLDU5KTtCRChxdWQoV0tkKE1GZC5wKSwxKSw1OSk7VEZkPU1GZC5xO0JEKHF1ZChaS2QoTUZkLnEpLDApLDM0KTtVRmQ9TUZkLnY7QkQocXVkKFpLZChNRmQudiksMCksMTgpO0JEKHF1ZChXS2QoTUZkLnYpLDApLDU5KTtCRChxdWQoV0tkKE1GZC52KSwxKSw1OSk7QkQocXVkKFdLZChNRmQudiksMiksNTkpO1ZGZD1NRmQudztCRChxdWQoWktkKE1GZC53KSwwKSwzNCk7QkQocXVkKFpLZChNRmQudyksMSksMzQpO0JEKHF1ZChaS2QoTUZkLncpLDIpLDM0KTtCRChxdWQoWktkKE1GZC53KSwzKSwxOCk7V0ZkPU1GZC5CO0JEKHF1ZChaS2QoTUZkLkIpLDApLDE4KTtCRChxdWQoV0tkKE1GZC5CKSwwKSw1OSk7QkQocXVkKFdLZChNRmQuQiksMSksNTkpO0JEKHF1ZChXS2QoTUZkLkIpLDIpLDU5KTtaRmQ9TUZkLlE7QkQocXVkKFpLZChNRmQuUSksMCksMTgpO0JEKHF1ZChXS2QoTUZkLlEpLDApLDU5KTskRmQ9TUZkLlI7QkQocXVkKFpLZChNRmQuUiksMCksMzQpO19GZD1NRmQuUztCRChxdWQoV0tkKE1GZC5TKSwwKSw1OSk7QkQocXVkKFdLZChNRmQuUyksMSksNTkpO0JEKHF1ZChXS2QoTUZkLlMpLDIpLDU5KTtCRChxdWQoV0tkKE1GZC5TKSwzKSw1OSk7QkQocXVkKFdLZChNRmQuUyksNCksNTkpO0JEKHF1ZChXS2QoTUZkLlMpLDUpLDU5KTtCRChxdWQoV0tkKE1GZC5TKSw2KSw1OSk7QkQocXVkKFdLZChNRmQuUyksNyksNTkpO0JEKHF1ZChXS2QoTUZkLlMpLDgpLDU5KTtCRChxdWQoV0tkKE1GZC5TKSw5KSw1OSk7QkQocXVkKFdLZChNRmQuUyksMTApLDU5KTtCRChxdWQoV0tkKE1GZC5TKSwxMSksNTkpO0JEKHF1ZChXS2QoTUZkLlMpLDEyKSw1OSk7QkQocXVkKFdLZChNRmQuUyksMTMpLDU5KTtCRChxdWQoV0tkKE1GZC5TKSwxNCksNTkpO2FHZD1NRmQuVDtCRChxdWQoWktkKE1GZC5UKSwwKSwxOCk7QkQocXVkKFpLZChNRmQuVCksMiksMTgpO2JHZD1CRChxdWQoWktkKE1GZC5UKSwzKSwxOCk7QkQocXVkKFpLZChNRmQuVCksNCksMTgpO0JEKHF1ZChXS2QoTUZkLlQpLDApLDU5KTtCRChxdWQoV0tkKE1GZC5UKSwxKSw1OSk7QkQocXVkKFpLZChNRmQuVCksMSksMTgpO2NHZD1NRmQuVTtCRChxdWQoWktkKE1GZC5VKSwwKSwzNCk7QkQocXVkKFpLZChNRmQuVSksMSksMzQpO0JEKHF1ZChaS2QoTUZkLlUpLDIpLDE4KTtCRChxdWQoWktkKE1GZC5VKSwzKSwxOCk7QkQocXVkKFpLZChNRmQuVSksNCksMTgpO0JEKHF1ZChaS2QoTUZkLlUpLDUpLDE4KTtCRChxdWQoV0tkKE1GZC5VKSwwKSw1OSk7ZEdkPU1GZC5WO0JEKHF1ZChaS2QoTUZkLlYpLDApLDE4KTtlR2Q9TUZkLlc7QkQocXVkKFpLZChNRmQuVyksMCksMzQpO0JEKHF1ZChaS2QoTUZkLlcpLDEpLDM0KTtCRChxdWQoWktkKE1GZC5XKSwyKSwzNCk7QkQocXVkKFpLZChNRmQuVyksMyksMTgpO0JEKHF1ZChaS2QoTUZkLlcpLDQpLDE4KTtCRChxdWQoWktkKE1GZC5XKSw1KSwxOCk7Z0dkPU1GZC5iYjtCRChxdWQoWktkKE1GZC5iYiksMCksMzQpO0JEKHF1ZChaS2QoTUZkLmJiKSwxKSwzNCk7QkQocXVkKFpLZChNRmQuYmIpLDIpLDM0KTtCRChxdWQoWktkKE1GZC5iYiksMyksMzQpO0JEKHF1ZChaS2QoTUZkLmJiKSw0KSwzNCk7QkQocXVkKFpLZChNRmQuYmIpLDUpLDM0KTtCRChxdWQoWktkKE1GZC5iYiksNiksMzQpO0JEKHF1ZChaS2QoTUZkLmJiKSw3KSwxOCk7QkQocXVkKFdLZChNRmQuYmIpLDApLDU5KTtCRChxdWQoV0tkKE1GZC5iYiksMSksNTkpO2hHZD1NRmQuZWI7QkQocXVkKFpLZChNRmQuZWIpLDApLDM0KTtCRChxdWQoWktkKE1GZC5lYiksMSksMzQpO0JEKHF1ZChaS2QoTUZkLmViKSwyKSwzNCk7QkQocXVkKFpLZChNRmQuZWIpLDMpLDM0KTtCRChxdWQoWktkKE1GZC5lYiksNCksMzQpO0JEKHF1ZChaS2QoTUZkLmViKSw1KSwzNCk7QkQocXVkKFpLZChNRmQuZWIpLDYpLDE4KTtCRChxdWQoWktkKE1GZC5lYiksNyksMTgpO2ZHZD1NRmQuYWI7QkQocXVkKFpLZChNRmQuYWIpLDApLDM0KTtCRChxdWQoWktkKE1GZC5hYiksMSksMzQpO1hGZD1NRmQuSDtCRChxdWQoWktkKE1GZC5IKSwwKSwxOCk7QkQocXVkKFpLZChNRmQuSCksMSksMTgpO0JEKHF1ZChaS2QoTUZkLkgpLDIpLDE4KTtCRChxdWQoWktkKE1GZC5IKSwzKSwxOCk7QkQocXVkKFpLZChNRmQuSCksNCksMTgpO0JEKHF1ZChaS2QoTUZkLkgpLDUpLDE4KTtCRChxdWQoV0tkKE1GZC5IKSwwKSw1OSk7aUdkPU1GZC5kYjtCRChxdWQoWktkKE1GZC5kYiksMCksMTgpO1lGZD1NRmQuTX1cbmZ1bmN0aW9uIGJhZShhKXt2YXIgYjtpZihhLk8pcmV0dXJuO2EuTz10cnVlO3BuZChhLCd0eXBlJyk7Y29kKGEsJ2Vjb3JlLnhtbC50eXBlJyk7ZG9kKGEsRXdlKTtiPUJEKG5VZCgoeUZkKCkseEZkKSxFd2UpLDE5NDUpO3d0ZChfS2QoYS5mYiksYS5iKTtYbmQoYS5iLFE5LCdBbnlUeXBlJyxmYWxzZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLmIpLDApLDM0KSxhLndiLkQsUXZlLG51bGwsMCwtMSxROSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmIpLDEpLDM0KSxhLndiLkQsJ2FueScsbnVsbCwwLC0xLFE5LHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuYiksMiksMzQpLGEud2IuRCwnYW55QXR0cmlidXRlJyxudWxsLDAsLTEsUTksZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7WG5kKGEuYmIsUzksSndlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuYmIpLDApLDM0KSxhLmdiLCdkYXRhJyxudWxsLDAsMSxTOSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuYmIpLDEpLDM0KSxhLmdiLGJ1ZSxudWxsLDEsMSxTOSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1huZChhLmZiLFQ5LEt3ZSxmYWxzZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLmZiKSwwKSwzNCksYi5nYiwncmF3VmFsdWUnLG51bGwsMCwxLFQ5LHRydWUsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5mYiksMSksMzQpLGIuYSxCdGUsbnVsbCwwLDEsVDksdHJ1ZSx0cnVlLHRydWUsZmFsc2UsdHJ1ZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLmZiKSwyKSwxOCksYS53Yi5xLG51bGwsJ2luc3RhbmNlVHlwZScsMSwxLFQ5LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO1huZChhLnFiLFU5LEx3ZSxmYWxzZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLnFiKSwwKSwzNCksYS53Yi5ELFF2ZSxudWxsLDAsLTEsbnVsbCxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLnFiKSwxKSwxOCksYS53Yi5hYixudWxsLCd4TUxOU1ByZWZpeE1hcCcsMCwtMSxudWxsLHRydWUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLnFiKSwyKSwxOCksYS53Yi5hYixudWxsLCd4U0lTY2hlbWFMb2NhdGlvbicsMCwtMSxudWxsLHRydWUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLnFiKSwzKSwzNCksYS5nYiwnY0RBVEEnLG51bGwsMCwtMixudWxsLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEucWIpLDQpLDM0KSxhLmdiLCdjb21tZW50JyxudWxsLDAsLTIsbnVsbCx0cnVlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLnFiKSw1KSwxOCksYS5iYixudWxsLGp4ZSwwLC0yLG51bGwsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLnFiKSw2KSwzNCksYS5nYixJdGUsbnVsbCwwLC0yLG51bGwsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7Wm5kKGEuYSxTSSwnQW55U2ltcGxlVHlwZScsdHJ1ZSk7Wm5kKGEuYyxaSSwnQW55VVJJJyx0cnVlKTtabmQoYS5kLEdDKFNELDEpLCdCYXNlNjRCaW5hcnknLHRydWUpO1puZChhLmUsc2JiLCdCb29sZWFuJyx0cnVlKTtabmQoYS5mLHdJLCdCb29sZWFuT2JqZWN0Jyx0cnVlKTtabmQoYS5nLFNELCdCeXRlJyx0cnVlKTtabmQoYS5pLHhJLCdCeXRlT2JqZWN0Jyx0cnVlKTtabmQoYS5qLFpJLCdEYXRlJyx0cnVlKTtabmQoYS5rLFpJLCdEYXRlVGltZScsdHJ1ZSk7Wm5kKGEubixiSiwnRGVjaW1hbCcsdHJ1ZSk7Wm5kKGEubyxVRCwnRG91YmxlJyx0cnVlKTtabmQoYS5wLEJJLCdEb3VibGVPYmplY3QnLHRydWUpO1puZChhLnEsWkksJ0R1cmF0aW9uJyx0cnVlKTtabmQoYS5zLHlLLCdFTlRJVElFUycsdHJ1ZSk7Wm5kKGEucix5SywnRU5USVRJRVNCYXNlJyx0cnVlKTtabmQoYS50LFpJLFJ3ZSx0cnVlKTtabmQoYS51LFZELCdGbG9hdCcsdHJ1ZSk7Wm5kKGEudixGSSwnRmxvYXRPYmplY3QnLHRydWUpO1puZChhLncsWkksJ0dEYXknLHRydWUpO1puZChhLkIsWkksJ0dNb250aCcsdHJ1ZSk7Wm5kKGEuQSxaSSwnR01vbnRoRGF5Jyx0cnVlKTtabmQoYS5DLFpJLCdHWWVhcicsdHJ1ZSk7Wm5kKGEuRCxaSSwnR1llYXJNb250aCcsdHJ1ZSk7Wm5kKGEuRixHQyhTRCwxKSwnSGV4QmluYXJ5Jyx0cnVlKTtabmQoYS5HLFpJLCdJRCcsdHJ1ZSk7Wm5kKGEuSCxaSSwnSURSRUYnLHRydWUpO1puZChhLkoseUssJ0lEUkVGUycsdHJ1ZSk7Wm5kKGEuSSx5SywnSURSRUZTQmFzZScsdHJ1ZSk7Wm5kKGEuSyxXRCwnSW50Jyx0cnVlKTtabmQoYS5NLGNKLCdJbnRlZ2VyJyx0cnVlKTtabmQoYS5MLEpJLCdJbnRPYmplY3QnLHRydWUpO1puZChhLlAsWkksJ0xhbmd1YWdlJyx0cnVlKTtabmQoYS5RLFhELCdMb25nJyx0cnVlKTtabmQoYS5SLE1JLCdMb25nT2JqZWN0Jyx0cnVlKTtabmQoYS5TLFpJLCdOYW1lJyx0cnVlKTtabmQoYS5ULFpJLFN3ZSx0cnVlKTtabmQoYS5VLGNKLCdOZWdhdGl2ZUludGVnZXInLHRydWUpO1puZChhLlYsWkksYXhlLHRydWUpO1puZChhLlgseUssJ05NVE9LRU5TJyx0cnVlKTtabmQoYS5XLHlLLCdOTVRPS0VOU0Jhc2UnLHRydWUpO1puZChhLlksY0osJ05vbk5lZ2F0aXZlSW50ZWdlcicsdHJ1ZSk7Wm5kKGEuWixjSiwnTm9uUG9zaXRpdmVJbnRlZ2VyJyx0cnVlKTtabmQoYS4kLFpJLCdOb3JtYWxpemVkU3RyaW5nJyx0cnVlKTtabmQoYS5fLFpJLCdOT1RBVElPTicsdHJ1ZSk7Wm5kKGEuYWIsWkksJ1Bvc2l0aXZlSW50ZWdlcicsdHJ1ZSk7Wm5kKGEuY2IsWkksJ1FOYW1lJyx0cnVlKTtabmQoYS5kYixyYmIsJ1Nob3J0Jyx0cnVlKTtabmQoYS5lYixVSSwnU2hvcnRPYmplY3QnLHRydWUpO1puZChhLmdiLFpJLFZpZSx0cnVlKTtabmQoYS5oYixaSSwnVGltZScsdHJ1ZSk7Wm5kKGEuaWIsWkksJ1Rva2VuJyx0cnVlKTtabmQoYS5qYixyYmIsJ1Vuc2lnbmVkQnl0ZScsdHJ1ZSk7Wm5kKGEua2IsVUksJ1Vuc2lnbmVkQnl0ZU9iamVjdCcsdHJ1ZSk7Wm5kKGEubGIsWEQsJ1Vuc2lnbmVkSW50Jyx0cnVlKTtabmQoYS5tYixNSSwnVW5zaWduZWRJbnRPYmplY3QnLHRydWUpO1puZChhLm5iLGNKLCdVbnNpZ25lZExvbmcnLHRydWUpO1puZChhLm9iLFdELCdVbnNpZ25lZFNob3J0Jyx0cnVlKTtabmQoYS5wYixKSSwnVW5zaWduZWRTaG9ydE9iamVjdCcsdHJ1ZSk7Um5kKGEsRXdlKTtfOWQoYSl9XG5mdW5jdGlvbiBPeWMoYSl7cjRjKGEsbmV3IEUzYyhRM2MoTDNjKFAzYyhNM2MoTzNjKE4zYyhuZXcgUjNjLHNuZSksJ0VMSyBMYXllcmVkJyksJ0xheWVyLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBBcnJhbmdlcyBhcyBtYW55IGVkZ2VzIGFzIHBvc3NpYmxlIGludG8gb25lIGRpcmVjdGlvbiBieSBwbGFjaW5nIG5vZGVzIGludG8gc3Vic2VxdWVudCBsYXllcnMuIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZGlmZmVyZW50IHJvdXRpbmcgc3R5bGVzIChzdHJhaWdodCwgb3J0aG9nb25hbCwgc3BsaW5lcyk7IGlmIG9ydGhvZ29uYWwgcm91dGluZyBpcyBzZWxlY3RlZCwgYXJiaXRyYXJ5IHBvcnQgY29uc3RyYWludHMgYXJlIHJlc3BlY3RlZCwgdGh1cyBlbmFibGluZyB0aGUgbGF5b3V0IG9mIGJsb2NrIGRpYWdyYW1zIHN1Y2ggYXMgYWN0b3Itb3JpZW50ZWQgbW9kZWxzIG9yIGNpcmN1aXQgc2NoZW1hdGljcy4gRnVydGhlcm1vcmUsIGZ1bGwgbGF5b3V0IG9mIGNvbXBvdW5kIGdyYXBocyB3aXRoIGNyb3NzLWhpZXJhcmNoeSBlZGdlcyBpcyBzdXBwb3J0ZWQgd2hlbiB0aGUgcmVzcGVjdGl2ZSBvcHRpb24gaXMgYWN0aXZhdGVkIG9uIHRoZSB0b3AgbGV2ZWwuJyksbmV3IFJ5Yyksc25lKSxxcWIoKENzZCgpLEJzZCksT0MoR0MoTzMsMSksS2llLDIzNywwLFt5c2QsenNkLHhzZCxBc2QsdnNkLHVzZF0pKSkpKTtwNGMoYSxzbmUsTHBlLEtzZChpeWMpKTtwNGMoYSxzbmUsTXBlLEtzZChqeWMpKTtwNGMoYSxzbmUsWmxlLEtzZChreWMpKTtwNGMoYSxzbmUsTnBlLEtzZChseWMpKTtwNGMoYSxzbmUseG1lLEtzZChueWMpKTtwNGMoYSxzbmUsT3BlLEtzZChveWMpKTtwNGMoYSxzbmUsUHBlLEtzZChyeWMpKTtwNGMoYSxzbmUsUXBlLEtzZCh0eWMpKTtwNGMoYSxzbmUsUnBlLEtzZCh1eWMpKTtwNGMoYSxzbmUsU3BlLEtzZChzeWMpKTtwNGMoYSxzbmUsd21lLEtzZCh2eWMpKTtwNGMoYSxzbmUsVHBlLEtzZCh4eWMpKTtwNGMoYSxzbmUsVXBlLEtzZCh6eWMpKTtwNGMoYSxzbmUsVnBlLEtzZChxeWMpKTtwNGMoYSxzbmUsTG9lLEtzZChoeWMpKTtwNGMoYSxzbmUsTm9lLEtzZChteWMpKTtwNGMoYSxzbmUsTW9lLEtzZChweWMpKTtwNGMoYSxzbmUsT29lLEtzZCh3eWMpKTtwNGMoYSxzbmUsdm1lLG1lYigwKSk7cDRjKGEsc25lLFBvZSxLc2QoY3ljKSk7cDRjKGEsc25lLFFvZSxLc2QoZHljKSk7cDRjKGEsc25lLFJvZSxLc2QoZXljKSk7cDRjKGEsc25lLFlvZSxLc2QoS3ljKSk7cDRjKGEsc25lLFpvZSxLc2QoQ3ljKSk7cDRjKGEsc25lLCRvZSxLc2QoRHljKSk7cDRjKGEsc25lLF9vZSxLc2QoR3ljKSk7cDRjKGEsc25lLGFwZSxLc2QoRXljKSk7cDRjKGEsc25lLGJwZSxLc2QoRnljKSk7cDRjKGEsc25lLGNwZSxLc2QoTXljKSk7cDRjKGEsc25lLGRwZSxLc2QoTHljKSk7cDRjKGEsc25lLGVwZSxLc2QoSXljKSk7cDRjKGEsc25lLGZwZSxLc2QoSHljKSk7cDRjKGEsc25lLGdwZSxLc2QoSnljKSk7cDRjKGEsc25lLEVvZSxLc2QoQ3hjKSk7cDRjKGEsc25lLEZvZSxLc2QoRHhjKSk7cDRjKGEsc25lLElvZSxLc2QoWHdjKSk7cDRjKGEsc25lLEpvZSxLc2QoWXdjKSk7cDRjKGEsc25lLGFtZSxMeGMpO3A0YyhhLHNuZSx5cGUsVHdjKTtwNGMoYSxzbmUsV3BlLDApO3A0YyhhLHNuZSx5bWUsbWViKDEpKTtwNGMoYSxzbmUsX2xlLHRtZSk7cDRjKGEsc25lLFhwZSxLc2QoSnhjKSk7cDRjKGEsc25lLEJtZSxLc2QoVnhjKSk7cDRjKGEsc25lLFlwZSxLc2QoJHhjKSk7cDRjKGEsc25lLFpwZSxLc2QoS3djKSk7cDRjKGEsc25lLCRwZSxLc2QobXdjKSk7cDRjKGEsc25lLHRwZSxLc2QoYXhjKSk7cDRjKGEsc25lLHptZSwoQmNiKCksdHJ1ZSkpO3A0YyhhLHNuZSxfcGUsS3NkKGZ4YykpO3A0YyhhLHNuZSxhcWUsS3NkKGd4YykpO3A0YyhhLHNuZSxGbWUsS3NkKEZ4YykpO3A0YyhhLHNuZSxFbWUsS3NkKEl4YykpO3A0YyhhLHNuZSxicWUsS3NkKEd4YykpO3A0YyhhLHNuZSxjcWUsTndjKTtwNGMoYSxzbmUsR21lLEtzZCh4eGMpKTtwNGMoYSxzbmUsZHFlLEtzZCh3eGMpKTtwNGMoYSxzbmUsSG1lLEtzZChZeGMpKTtwNGMoYSxzbmUsZXFlLEtzZChYeGMpKTtwNGMoYSxzbmUsZnFlLEtzZChaeGMpKTtwNGMoYSxzbmUsZ3FlLE94Yyk7cDRjKGEsc25lLGhxZSxLc2QoUXhjKSk7cDRjKGEsc25lLGlxZSxLc2QoUnhjKSk7cDRjKGEsc25lLGpxZSxLc2QoU3hjKSk7cDRjKGEsc25lLGtxZSxLc2QoUHhjKSk7cDRjKGEsc25lLGVvZSxLc2QoQnljKSk7cDRjKGEsc25lLGhvZSxLc2Qoc3hjKSk7cDRjKGEsc25lLG5vZSxLc2QocnhjKSk7cDRjKGEsc25lLGRvZSxLc2QoQXljKSk7cDRjKGEsc25lLGlvZSxLc2QobXhjKSk7cDRjKGEsc25lLGdvZSxLc2QoSndjKSk7cDRjKGEsc25lLHFvZSxLc2QoSXdjKSk7cDRjKGEsc25lLHJvZSxLc2QoQXdjKSk7cDRjKGEsc25lLHdvZSxLc2QoQndjKSk7cDRjKGEsc25lLHhvZSxLc2QoRHdjKSk7cDRjKGEsc25lLHlvZSxLc2QoQ3djKSk7cDRjKGEsc25lLHRvZSxLc2QoSHdjKSk7cDRjKGEsc25lLF9uZSxLc2QodXhjKSk7cDRjKGEsc25lLGFvZSxLc2QodnhjKSk7cDRjKGEsc25lLCRuZSxLc2QoaXhjKSk7cDRjKGEsc25lLHpvZSxLc2QoRXhjKSk7cDRjKGEsc25lLENvZSxLc2QoenhjKSk7cDRjKGEsc25lLFpuZSxLc2QoJHdjKSk7cDRjKGEsc25lLERvZSxLc2QoQnhjKSk7cDRjKGEsc25lLEdvZSxLc2QoVndjKSk7cDRjKGEsc25lLEhvZSxLc2QoV3djKSk7cDRjKGEsc25lLGxxZSxLc2QoendjKSk7cDRjKGEsc25lLEJvZSxLc2QoeXhjKSk7cDRjKGEsc25lLFRvZSxLc2Qoc3djKSk7cDRjKGEsc25lLFVvZSxLc2QocndjKSk7cDRjKGEsc25lLFNvZSxLc2QocXdjKSk7cDRjKGEsc25lLFZvZSxLc2QoY3hjKSk7cDRjKGEsc25lLFdvZSxLc2QoYnhjKSk7cDRjKGEsc25lLFhvZSxLc2QoZHhjKSk7cDRjKGEsc25lLFRtZSxLc2QoSHhjKSk7cDRjKGEsc25lLG1xZSxLc2QoanhjKSk7cDRjKGEsc25lLCRsZSxLc2QoWndjKSk7cDRjKGEsc25lLG5xZSxLc2QoUXdjKSk7cDRjKGEsc25lLENtZSxLc2QoUHdjKSk7cDRjKGEsc25lLHNvZSxLc2QoRXdjKSk7cDRjKGEsc25lLG9xZSxLc2QoV3hjKSk7cDRjKGEsc25lLHBxZSxLc2QocHdjKSk7cDRjKGEsc25lLHFxZSxLc2QoZXhjKSk7cDRjKGEsc25lLHJxZSxLc2QoVHhjKSk7cDRjKGEsc25lLHNxZSxLc2QoTXhjKSk7cDRjKGEsc25lLHRxZSxLc2QoTnhjKSk7cDRjKGEsc25lLGxvZSxLc2Qob3hjKSk7cDRjKGEsc25lLG1vZSxLc2QocHhjKSk7cDRjKGEsc25lLHVxZSxLc2QoYXljKSk7cDRjKGEsc25lLGJvZSxLc2QobndjKSk7cDRjKGEsc25lLG9vZSxLc2QocXhjKSk7cDRjKGEsc25lLGhwZSxLc2QoUndjKSk7cDRjKGEsc25lLGlwZSxLc2QoT3djKSk7cDRjKGEsc25lLHZxZSxLc2QodHhjKSk7cDRjKGEsc25lLHBvZSxLc2Qoa3hjKSk7cDRjKGEsc25lLEFvZSxLc2QoQXhjKSk7cDRjKGEsc25lLHdxZSxLc2QoeXljKSk7cDRjKGEsc25lLFluZSxLc2QoTXdjKSk7cDRjKGEsc25lLGNvZSxLc2QoX3hjKSk7cDRjKGEsc25lLEtvZSxLc2QoVXdjKSk7cDRjKGEsc25lLGpvZSxLc2QobHhjKSk7cDRjKGEsc25lLHVvZSxLc2QoRndjKSk7cDRjKGEsc25lLHhxZSxLc2QoaHhjKSk7cDRjKGEsc25lLGtvZSxLc2QobnhjKSk7cDRjKGEsc25lLHZvZSxLc2QoR3djKSk7cDRjKGEsc25lLGpwZSxLc2QoeXdjKSk7cDRjKGEsc25lLG1wZSxLc2Qod3djKSk7cDRjKGEsc25lLG5wZSxLc2QodXdjKSk7cDRjKGEsc25lLG9wZSxLc2QodndjKSk7cDRjKGEsc25lLGtwZSxLc2QoeHdjKSk7cDRjKGEsc25lLGxwZSxLc2QodHdjKSk7cDRjKGEsc25lLGZvZSxLc2QoX3djKSl9XG5mdW5jdGlvbiBrZWUoYSxiKXt2YXIgYyxkO2lmKCFjZWUpe2NlZT1uZXcgTHFiO2RlZT1uZXcgTHFiO2Q9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyAkZmUoNCkpO1JlZShkLCdcXHRcXG5cXHJcXHIgICcpO1NoYihjZWUscHhlLGQpO1NoYihkZWUscHhlLF9mZShkKSk7ZD0obnVsbCwrK3ZmZSxuZXcgJGZlKDQpKTtSZWUoZCxzeGUpO1NoYihjZWUsbnhlLGQpO1NoYihkZWUsbnhlLF9mZShkKSk7ZD0obnVsbCwrK3ZmZSxuZXcgJGZlKDQpKTtSZWUoZCxzeGUpO1NoYihjZWUsbnhlLGQpO1NoYihkZWUsbnhlLF9mZShkKSk7ZD0obnVsbCwrK3ZmZSxuZXcgJGZlKDQpKTtSZWUoZCx0eGUpO1hmZShkLEJEKFBoYihjZWUsbnhlKSwxMTcpKTtTaGIoY2VlLG94ZSxkKTtTaGIoZGVlLG94ZSxfZmUoZCkpO2Q9KG51bGwsKyt2ZmUsbmV3ICRmZSg0KSk7UmVlKGQsJy0uMDpBWl9fYXpcXHhCN1xceEI3XFx4QzBcXHhENlxceEQ4XFx4RjZcXHhGOFxcdTAxMzFcXHUwMTM0XFx1MDEzRVxcdTAxNDFcXHUwMTQ4XFx1MDE0QVxcdTAxN0VcXHUwMTgwXFx1MDFDM1xcdTAxQ0RcXHUwMUYwXFx1MDFGNFxcdTAxRjVcXHUwMUZBXFx1MDIxN1xcdTAyNTBcXHUwMkE4XFx1MDJCQlxcdTAyQzFcXHUwMkQwXFx1MDJEMVxcdTAzMDBcXHUwMzQ1XFx1MDM2MFxcdTAzNjFcXHUwMzg2XFx1MDM4QVxcdTAzOENcXHUwMzhDXFx1MDM4RVxcdTAzQTFcXHUwM0EzXFx1MDNDRVxcdTAzRDBcXHUwM0Q2XFx1MDNEQVxcdTAzREFcXHUwM0RDXFx1MDNEQ1xcdTAzREVcXHUwM0RFXFx1MDNFMFxcdTAzRTBcXHUwM0UyXFx1MDNGM1xcdTA0MDFcXHUwNDBDXFx1MDQwRVxcdTA0NEZcXHUwNDUxXFx1MDQ1Q1xcdTA0NUVcXHUwNDgxXFx1MDQ4M1xcdTA0ODZcXHUwNDkwXFx1MDRDNFxcdTA0QzdcXHUwNEM4XFx1MDRDQlxcdTA0Q0NcXHUwNEQwXFx1MDRFQlxcdTA0RUVcXHUwNEY1XFx1MDRGOFxcdTA0RjlcXHUwNTMxXFx1MDU1NlxcdTA1NTlcXHUwNTU5XFx1MDU2MVxcdTA1ODZcXHUwNTkxXFx1MDVBMVxcdTA1QTNcXHUwNUI5XFx1MDVCQlxcdTA1QkRcXHUwNUJGXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzRcXHUwNUQwXFx1MDVFQVxcdTA1RjBcXHUwNUYyXFx1MDYyMVxcdTA2M0FcXHUwNjQwXFx1MDY1MlxcdTA2NjBcXHUwNjY5XFx1MDY3MFxcdTA2QjdcXHUwNkJBXFx1MDZCRVxcdTA2QzBcXHUwNkNFXFx1MDZEMFxcdTA2RDNcXHUwNkQ1XFx1MDZFOFxcdTA2RUFcXHUwNkVEXFx1MDZGMFxcdTA2RjlcXHUwOTAxXFx1MDkwM1xcdTA5MDVcXHUwOTM5XFx1MDkzQ1xcdTA5NERcXHUwOTUxXFx1MDk1NFxcdTA5NThcXHUwOTYzXFx1MDk2NlxcdTA5NkZcXHUwOTgxXFx1MDk4M1xcdTA5ODVcXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzXFx1MDlBOFxcdTA5QUFcXHUwOUIwXFx1MDlCMlxcdTA5QjJcXHUwOUI2XFx1MDlCOVxcdTA5QkNcXHUwOUJDXFx1MDlCRVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0JcXHUwOUNEXFx1MDlEN1xcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REZcXHUwOUUzXFx1MDlFNlxcdTA5RjFcXHUwQTAyXFx1MEEwMlxcdTBBMDVcXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzXFx1MEEyOFxcdTBBMkFcXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0NcXHUwQTNFXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0QlxcdTBBNERcXHUwQTU5XFx1MEE1Q1xcdTBBNUVcXHUwQTVFXFx1MEE2NlxcdTBBNzRcXHUwQTgxXFx1MEE4M1xcdTBBODVcXHUwQThCXFx1MEE4RFxcdTBBOERcXHUwQThGXFx1MEE5MVxcdTBBOTNcXHUwQUE4XFx1MEFBQVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjVcXHUwQUI5XFx1MEFCQ1xcdTBBQzVcXHUwQUM3XFx1MEFDOVxcdTBBQ0JcXHUwQUNEXFx1MEFFMFxcdTBBRTBcXHUwQUU2XFx1MEFFRlxcdTBCMDFcXHUwQjAzXFx1MEIwNVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTNcXHUwQjI4XFx1MEIyQVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzZcXHUwQjM5XFx1MEIzQ1xcdTBCNDNcXHUwQjQ3XFx1MEI0OFxcdTBCNEJcXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUZcXHUwQjYxXFx1MEI2NlxcdTBCNkZcXHUwQjgyXFx1MEI4M1xcdTBCODVcXHUwQjhBXFx1MEI4RVxcdTBCOTBcXHUwQjkyXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOFxcdTBCQUFcXHUwQkFFXFx1MEJCNVxcdTBCQjdcXHUwQkI5XFx1MEJCRVxcdTBCQzJcXHUwQkM2XFx1MEJDOFxcdTBCQ0FcXHUwQkNEXFx1MEJEN1xcdTBCRDdcXHUwQkU3XFx1MEJFRlxcdTBDMDFcXHUwQzAzXFx1MEMwNVxcdTBDMENcXHUwQzBFXFx1MEMxMFxcdTBDMTJcXHUwQzI4XFx1MEMyQVxcdTBDMzNcXHUwQzM1XFx1MEMzOVxcdTBDM0VcXHUwQzQ0XFx1MEM0NlxcdTBDNDhcXHUwQzRBXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MFxcdTBDNjFcXHUwQzY2XFx1MEM2RlxcdTBDODJcXHUwQzgzXFx1MEM4NVxcdTBDOENcXHUwQzhFXFx1MEM5MFxcdTBDOTJcXHUwQ0E4XFx1MENBQVxcdTBDQjNcXHUwQ0I1XFx1MENCOVxcdTBDQkVcXHUwQ0M0XFx1MENDNlxcdTBDQzhcXHUwQ0NBXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRTZcXHUwQ0VGXFx1MEQwMlxcdTBEMDNcXHUwRDA1XFx1MEQwQ1xcdTBEMEVcXHUwRDEwXFx1MEQxMlxcdTBEMjhcXHUwRDJBXFx1MEQzOVxcdTBEM0VcXHUwRDQzXFx1MEQ0NlxcdTBENDhcXHUwRDRBXFx1MEQ0RFxcdTBENTdcXHUwRDU3XFx1MEQ2MFxcdTBENjFcXHUwRDY2XFx1MEQ2RlxcdTBFMDFcXHUwRTJFXFx1MEUzMFxcdTBFM0FcXHUwRTQwXFx1MEU0RVxcdTBFNTBcXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOEFcXHUwRThEXFx1MEU4RFxcdTBFOTRcXHUwRTk3XFx1MEU5OVxcdTBFOUZcXHUwRUExXFx1MEVBM1xcdTBFQTVcXHUwRUE1XFx1MEVBN1xcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQURcXHUwRUFFXFx1MEVCMFxcdTBFQjlcXHUwRUJCXFx1MEVCRFxcdTBFQzBcXHUwRUM0XFx1MEVDNlxcdTBFQzZcXHUwRUM4XFx1MEVDRFxcdTBFRDBcXHUwRUQ5XFx1MEYxOFxcdTBGMTlcXHUwRjIwXFx1MEYyOVxcdTBGMzVcXHUwRjM1XFx1MEYzN1xcdTBGMzdcXHUwRjM5XFx1MEYzOVxcdTBGM0VcXHUwRjQ3XFx1MEY0OVxcdTBGNjlcXHUwRjcxXFx1MEY4NFxcdTBGODZcXHUwRjhCXFx1MEY5MFxcdTBGOTVcXHUwRjk3XFx1MEY5N1xcdTBGOTlcXHUwRkFEXFx1MEZCMVxcdTBGQjdcXHUwRkI5XFx1MEZCOVxcdTEwQTBcXHUxMEM1XFx1MTBEMFxcdTEwRjZcXHUxMTAwXFx1MTEwMFxcdTExMDJcXHUxMTAzXFx1MTEwNVxcdTExMDdcXHUxMTA5XFx1MTEwOVxcdTExMEJcXHUxMTBDXFx1MTEwRVxcdTExMTJcXHUxMTNDXFx1MTEzQ1xcdTExM0VcXHUxMTNFXFx1MTE0MFxcdTExNDBcXHUxMTRDXFx1MTE0Q1xcdTExNEVcXHUxMTRFXFx1MTE1MFxcdTExNTBcXHUxMTU0XFx1MTE1NVxcdTExNTlcXHUxMTU5XFx1MTE1RlxcdTExNjFcXHUxMTYzXFx1MTE2M1xcdTExNjVcXHUxMTY1XFx1MTE2N1xcdTExNjdcXHUxMTY5XFx1MTE2OVxcdTExNkRcXHUxMTZFXFx1MTE3MlxcdTExNzNcXHUxMTc1XFx1MTE3NVxcdTExOUVcXHUxMTlFXFx1MTFBOFxcdTExQThcXHUxMUFCXFx1MTFBQlxcdTExQUVcXHUxMUFGXFx1MTFCN1xcdTExQjhcXHUxMUJBXFx1MTFCQVxcdTExQkNcXHUxMUMyXFx1MTFFQlxcdTExRUJcXHUxMUYwXFx1MTFGMFxcdTExRjlcXHUxMUY5XFx1MUUwMFxcdTFFOUJcXHUxRUEwXFx1MUVGOVxcdTFGMDBcXHUxRjE1XFx1MUYxOFxcdTFGMURcXHUxRjIwXFx1MUY0NVxcdTFGNDhcXHUxRjREXFx1MUY1MFxcdTFGNTdcXHUxRjU5XFx1MUY1OVxcdTFGNUJcXHUxRjVCXFx1MUY1RFxcdTFGNURcXHUxRjVGXFx1MUY3RFxcdTFGODBcXHUxRkI0XFx1MUZCNlxcdTFGQkNcXHUxRkJFXFx1MUZCRVxcdTFGQzJcXHUxRkM0XFx1MUZDNlxcdTFGQ0NcXHUxRkQwXFx1MUZEM1xcdTFGRDZcXHUxRkRCXFx1MUZFMFxcdTFGRUNcXHUxRkYyXFx1MUZGNFxcdTFGRjZcXHUxRkZDXFx1MjBEMFxcdTIwRENcXHUyMEUxXFx1MjBFMVxcdTIxMjZcXHUyMTI2XFx1MjEyQVxcdTIxMkJcXHUyMTJFXFx1MjEyRVxcdTIxODBcXHUyMTgyXFx1MzAwNVxcdTMwMDVcXHUzMDA3XFx1MzAwN1xcdTMwMjFcXHUzMDJGXFx1MzAzMVxcdTMwMzVcXHUzMDQxXFx1MzA5NFxcdTMwOTlcXHUzMDlBXFx1MzA5RFxcdTMwOUVcXHUzMEExXFx1MzBGQVxcdTMwRkNcXHUzMEZFXFx1MzEwNVxcdTMxMkNcXHU0RTAwXFx1OUZBNVxcdUFDMDBcXHVEN0EzJyk7U2hiKGNlZSxxeGUsZCk7U2hiKGRlZSxxeGUsX2ZlKGQpKTtkPShudWxsLCsrdmZlLG5ldyAkZmUoNCkpO1JlZShkLHR4ZSk7VWZlKGQsOTUsOTUpO1VmZShkLDU4LDU4KTtTaGIoY2VlLHJ4ZSxkKTtTaGIoZGVlLHJ4ZSxfZmUoZCkpfWM9Yj9CRChQaGIoY2VlLGEpLDEzNik6QkQoUGhiKGRlZSxhKSwxMzYpO3JldHVybiBjfVxuZnVuY3Rpb24gXzlkKGEpe0JuZChhLmEsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnYW55U2ltcGxlVHlwZSddKSk7Qm5kKGEuYixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdhbnlUeXBlJyxTdmUsUXZlXSkpO0JuZChCRChxdWQoWktkKGEuYiksMCksMzQpLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtTdmUseHdlLGZ1ZSwnOm1peGVkJ10pKTtCbmQoQkQocXVkKFpLZChhLmIpLDEpLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHh3ZSxEd2UsRndlLGZ1ZSwnOjEnLE93ZSwnbGF4J10pKTtCbmQoQkQocXVkKFpLZChhLmIpLDIpLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHZ3ZSxEd2UsRndlLGZ1ZSwnOjInLE93ZSwnbGF4J10pKTtCbmQoYS5jLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ2FueVVSSScsQ3dlLHl3ZV0pKTtCbmQoYS5kLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ2Jhc2U2NEJpbmFyeScsQ3dlLHl3ZV0pKTtCbmQoYS5lLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsS2hlLEN3ZSx5d2VdKSk7Qm5kKGEuZixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdib29sZWFuOk9iamVjdCcsY3dlLEtoZV0pKTtCbmQoYS5nLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsRXZlXSkpO0JuZChhLmksUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnYnl0ZTpPYmplY3QnLGN3ZSxFdmVdKSk7Qm5kKGEuaixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdkYXRlJyxDd2UseXdlXSkpO0JuZChhLmssUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnZGF0ZVRpbWUnLEN3ZSx5d2VdKSk7Qm5kKGEubixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdkZWNpbWFsJyxDd2UseXdlXSkpO0JuZChhLm8sUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxHdmUsQ3dlLHl3ZV0pKTtCbmQoYS5wLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ2RvdWJsZTpPYmplY3QnLGN3ZSxHdmVdKSk7Qm5kKGEucSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdkdXJhdGlvbicsQ3dlLHl3ZV0pKTtCbmQoYS5zLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ0VOVElUSUVTJyxjd2UsUHdlLFF3ZSwnMSddKSk7Qm5kKGEucixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLFB3ZSx6d2UsUndlXSkpO0JuZChhLnQsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxSd2UsY3dlLFN3ZV0pKTtCbmQoYS51LFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsSHZlLEN3ZSx5d2VdKSk7Qm5kKGEudixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdmbG9hdDpPYmplY3QnLGN3ZSxIdmVdKSk7Qm5kKGEudyxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdnRGF5JyxDd2UseXdlXSkpO0JuZChhLkIsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnZ01vbnRoJyxDd2UseXdlXSkpO0JuZChhLkEsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnZ01vbnRoRGF5JyxDd2UseXdlXSkpO0JuZChhLkMsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnZ1llYXInLEN3ZSx5d2VdKSk7Qm5kKGEuRCxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdnWWVhck1vbnRoJyxDd2UseXdlXSkpO0JuZChhLkYsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnaGV4QmluYXJ5JyxDd2UseXdlXSkpO0JuZChhLkcsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnSUQnLGN3ZSxTd2VdKSk7Qm5kKGEuSCxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdJRFJFRicsY3dlLFN3ZV0pKTtCbmQoYS5KLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ0lEUkVGUycsY3dlLFR3ZSxRd2UsJzEnXSkpO0JuZChhLkksUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxUd2UsendlLCdJRFJFRiddKSk7Qm5kKGEuSyxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLEl2ZV0pKTtCbmQoYS5NLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsVXdlXSkpO0JuZChhLkwsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnaW50Ok9iamVjdCcsY3dlLEl2ZV0pKTtCbmQoYS5QLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ2xhbmd1YWdlJyxjd2UsVndlLFd3ZSxYd2VdKSk7Qm5kKGEuUSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLEp2ZV0pKTtCbmQoYS5SLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ2xvbmc6T2JqZWN0Jyxjd2UsSnZlXSkpO0JuZChhLlMsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnTmFtZScsY3dlLFZ3ZSxXd2UsWXdlXSkpO0JuZChhLlQsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxTd2UsY3dlLCdOYW1lJyxXd2UsWndlXSkpO0JuZChhLlUsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnbmVnYXRpdmVJbnRlZ2VyJyxjd2UsJHdlLF93ZSwnLTEnXSkpO0JuZChhLlYsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxheGUsY3dlLFZ3ZSxXd2UsJ1xcXFxjKyddKSk7Qm5kKGEuWCxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdOTVRPS0VOUycsY3dlLGJ4ZSxRd2UsJzEnXSkpO0JuZChhLlcsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxieGUsendlLGF4ZV0pKTtCbmQoYS5ZLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsY3hlLGN3ZSxVd2UsZHhlLCcwJ10pKTtCbmQoYS5aLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJHdlLGN3ZSxVd2UsX3dlLCcwJ10pKTtCbmQoYS4kLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsZXhlLGN3ZSxNaGUsQ3dlLCdyZXBsYWNlJ10pKTtCbmQoYS5fLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ05PVEFUSU9OJyxDd2UseXdlXSkpO0JuZChhLmFiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3Bvc2l0aXZlSW50ZWdlcicsY3dlLGN4ZSxkeGUsJzEnXSkpO0JuZChhLmJiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3Byb2Nlc3NpbmdJbnN0cnVjdGlvbl8uX3R5cGUnLFN2ZSwnZW1wdHknXSkpO0JuZChCRChxdWQoWktkKGEuYmIpLDApLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHV3ZSxmdWUsJ2RhdGEnXSkpO0JuZChCRChxdWQoWktkKGEuYmIpLDEpLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHV3ZSxmdWUsYnVlXSkpO0JuZChhLmNiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ1FOYW1lJyxDd2UseXdlXSkpO0JuZChhLmRiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsS3ZlXSkpO0JuZChhLmViLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3Nob3J0Ok9iamVjdCcsY3dlLEt2ZV0pKTtCbmQoYS5mYixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCdzaW1wbGVBbnlUeXBlJyxTdmUsdHdlXSkpO0JuZChCRChxdWQoWktkKGEuZmIpLDApLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCc6MycsU3ZlLHR3ZV0pKTtCbmQoQkQocXVkKFpLZChhLmZiKSwxKSwzNCksUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnOjQnLFN2ZSx0d2VdKSk7Qm5kKEJEKHF1ZChaS2QoYS5mYiksMiksMTgpLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJzo1JyxTdmUsdHdlXSkpO0JuZChhLmdiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsTWhlLEN3ZSwncHJlc2VydmUnXSkpO0JuZChhLmhiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3RpbWUnLEN3ZSx5d2VdKSk7Qm5kKGEuaWIsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxWd2UsY3dlLGV4ZSxDd2UseXdlXSkpO0JuZChhLmpiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsZnhlLF93ZSwnMjU1JyxkeGUsJzAnXSkpO0JuZChhLmtiLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3Vuc2lnbmVkQnl0ZTpPYmplY3QnLGN3ZSxmeGVdKSk7Qm5kKGEubGIsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSxneGUsX3dlLCc0Mjk0OTY3Mjk1JyxkeGUsJzAnXSkpO0JuZChhLm1iLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsJ3Vuc2lnbmVkSW50Ok9iamVjdCcsY3dlLGd4ZV0pKTtCbmQoYS5uYixSdmUsT0MoR0MoWkksMSksbmllLDIsNixbZnVlLCd1bnNpZ25lZExvbmcnLGN3ZSxjeGUsX3dlLGh4ZSxkeGUsJzAnXSkpO0JuZChhLm9iLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtmdWUsaXhlLF93ZSwnNjU1MzUnLGR4ZSwnMCddKSk7Qm5kKGEucGIsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwndW5zaWduZWRTaG9ydDpPYmplY3QnLGN3ZSxpeGVdKSk7Qm5kKGEucWIsUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW2Z1ZSwnJyxTdmUsUXZlXSkpO0JuZChCRChxdWQoWktkKGEucWIpLDApLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHh3ZSxmdWUsJzptaXhlZCddKSk7Qm5kKEJEKHF1ZChaS2QoYS5xYiksMSksMTgpLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtTdmUsdXdlLGZ1ZSwneG1sbnM6cHJlZml4J10pKTtCbmQoQkQocXVkKFpLZChhLnFiKSwyKSwxOCksUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW1N2ZSx1d2UsZnVlLCd4c2k6c2NoZW1hTG9jYXRpb24nXSkpO0JuZChCRChxdWQoWktkKGEucWIpLDMpLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHd3ZSxmdWUsJ2NEQVRBJyxBd2UsQndlXSkpO0JuZChCRChxdWQoWktkKGEucWIpLDQpLDM0KSxSdmUsT0MoR0MoWkksMSksbmllLDIsNixbU3ZlLHd3ZSxmdWUsJ2NvbW1lbnQnLEF3ZSxCd2VdKSk7Qm5kKEJEKHF1ZChaS2QoYS5xYiksNSksMTgpLFJ2ZSxPQyhHQyhaSSwxKSxuaWUsMiw2LFtTdmUsd3dlLGZ1ZSxqeGUsQXdlLEJ3ZV0pKTtCbmQoQkQocXVkKFpLZChhLnFiKSw2KSwzNCksUnZlLE9DKEdDKFpJLDEpLG5pZSwyLDYsW1N2ZSx3d2UsZnVlLEl0ZSxBd2UsQndlXSkpfVxuZnVuY3Rpb24gdHZkKGEpe3JldHVybiBkZmIoJ19VSV9FTUZEaWFnbm9zdGljX21hcmtlcicsYSk/J0VNRiBQcm9ibGVtJzpkZmIoJ19VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMnLGEpPydBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmJzpkZmIoc3VlLGEpPydXcm9uZyBjaGFyYWN0ZXIuJzpkZmIodHVlLGEpPydJbnZhbGlkIHJlZmVyZW5jZSBudW1iZXIuJzpkZmIodXVlLGEpPydBIGNoYXJhY3RlciBpcyByZXF1aXJlZCBhZnRlciBcXFxcLic6ZGZiKHZ1ZSxhKT9cIic/JyBpcyBub3QgZXhwZWN0ZWQuICAnKD86JyBvciAnKD89JyBvciAnKD8hJyBvciAnKD88JyBvciAnKD8jJyBvciAnKD8+Jz9cIjpkZmIod3VlLGEpP1wiJyg/PCcgb3IgJyg/PCEnIGlzIGV4cGVjdGVkLlwiOmRmYih4dWUsYSk/J0EgY29tbWVudCBpcyBub3QgdGVybWluYXRlZC4nOmRmYih5dWUsYSk/XCInKScgaXMgZXhwZWN0ZWQuXCI6ZGZiKHp1ZSxhKT8nVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4nOmRmYihBdWUsYSk/XCInOicgaXMgZXhwZWN0ZWQuXCI6ZGZiKEJ1ZSxhKT8nVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBjb25kaXRpb25hbCBncm91cC4nOmRmYihDdWUsYSk/J0EgYmFjayByZWZlcmVuY2Ugb3IgYW4gYW5jaG9yIG9yIGEgbG9va2FoZWFkIG9yIGEgbG9vay1iZWhpbmQgaXMgZXhwZWN0ZWQgaW4gYSBjb25kaXRpb25hbCBwYXR0ZXJuLic6ZGZiKER1ZSxhKT8nVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuJzpkZmIoRXVlLGEpPydBIGNoYXJhY3RlciBpbiBVKzAwNDAtVSswMDVmIG11c3QgZm9sbG93IFxcXFxjLic6ZGZiKEZ1ZSxhKT9cIkEgJ3snIGlzIHJlcXVpcmVkIGJlZm9yZSBhIGNoYXJhY3RlciBjYXRlZ29yeS5cIjpkZmIoR3VlLGEpP1wiQSBwcm9wZXJ0eSBuYW1lIGlzIG5vdCBjbG9zZWQgYnkgJ30nLlwiOmRmYihIdWUsYSk/J1VuZXhwZWN0ZWQgbWV0YSBjaGFyYWN0ZXIuJzpkZmIoSXVlLGEpPydVbmtub3duIHByb3BlcnR5Lic6ZGZiKEp1ZSxhKT9cIkEgUE9TSVggY2hhcmFjdGVyIGNsYXNzIG11c3QgYmUgY2xvc2VkIGJ5ICc6XScuXCI6ZGZiKEt1ZSxhKT8nVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBjaGFyYWN0ZXIgY2xhc3MuJzpkZmIoTHVlLGEpPydVbmtub3duIG5hbWUgZm9yIGEgUE9TSVggY2hhcmFjdGVyIGNsYXNzLic6ZGZiKCdwYXJzZXIuY2MuNCcsYSk/XCInLScgaXMgaW52YWxpZCBoZXJlLlwiOmRmYihNdWUsYSk/XCInXScgaXMgZXhwZWN0ZWQuXCI6ZGZiKE51ZSxhKT9cIidbJyBpcyBpbnZhbGlkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiAgV3JpdGUgJ1xcXFxbJy5cIjpkZmIoT3VlLGEpP1wiJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxcXF0nLlwiOmRmYihQdWUsYSk/XCInLScgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgcmFuZ2UuIFdyaXRlICdcXFxcLScuXCI6ZGZiKFF1ZSxhKT9cIidbJyBpcyBleHBlY3RlZC5cIjpkZmIoUnVlLGEpP1wiJyknIG9yICctWycgb3IgJytbJyBvciAnJlsnIGlzIGV4cGVjdGVkLlwiOmRmYihTdWUsYSk/J1RoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuJzpkZmIoVHVlLGEpPydJbnZhbGlkIFVuaWNvZGUgaGV4IG5vdGF0aW9uLic6ZGZiKFV1ZSxhKT8nT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uJzpkZmIoVnVlLGEpP1wiJ1xcXFx4eycgbXVzdCBiZSBjbG9zZWQgYnkgJ30nLlwiOmRmYihXdWUsYSk/J0ludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50Lic6ZGZiKFh1ZSxhKT8nQW4gYW5jaG9yIG11c3Qgbm90IGJlIGhlcmUuJzpkZmIoWXVlLGEpPydUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4nOmRmYihadWUsYSk/J0ludmFsaWQgcXVhbnRpZmllci4gQSBkaWdpdCBpcyBleHBlY3RlZC4nOmRmYigkdWUsYSk/XCJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy5cIjpkZmIoX3VlLGEpP1wiSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC5cIjpkZmIoYXZlLGEpPydJbnZhbGlkIHF1YW50aWZpZXIuIEEgbWluIHF1YW50aXR5IG11c3QgYmUgPD0gYSBtYXggcXVhbnRpdHkuJzpkZmIoYnZlLGEpPydJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuJzpkZmIoJ19VSV9QYWNrYWdlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydFY29yZSBQYWNrYWdlIFJlZ2lzdHJ5IGZvciBHZW5lcmF0ZWQgUGFja2FnZXMnOmRmYignX1VJX0R5bmFtaWNQYWNrYWdlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydFY29yZSBQYWNrYWdlIFJlZ2lzdHJ5IGZvciBEeW5hbWljIFBhY2thZ2VzJzpkZmIoJ19VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5JzpkZmIoJ19VSV9VUklFeHRlbnNpb25QYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J1VSSSBFeHRlbnNpb24gUGFyc2VyIFJlZ2lzdHJ5JzpkZmIoJ19VSV9VUklQcm90b2NvbFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nVVJJIFByb3RvY29sIFBhcnNlciBSZWdpc3RyeSc6ZGZiKCdfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5JzpkZmIoJ19VSV9Db250ZW50SGFuZGxlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nQ29udGVudCBIYW5kbGVyIFJlZ2lzdHJ5JzpkZmIoJ19VSV9VUklNYXBwaW5nUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydVUkkgQ29udmVydGVyIE1hcHBpbmcgUmVnaXN0cnknOmRmYignX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50JyxhKT8nRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbic6ZGZiKCdfVUlfVmFsaWRhdGlvbkRlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydWYWxpZGF0aW9uIERlbGVnYXRlIFJlZ2lzdHJ5JzpkZmIoJ19VSV9TZXR0aW5nRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J0ZlYXR1cmUgU2V0dGluZyBEZWxlZ2F0ZSBGYWN0b3J5IFJlZ2lzdHJ5JzpkZmIoJ19VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J09wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnknOmRmYignX1VJX0VDbGFzc0ludGVyZmFjZU5vdEFic3RyYWN0X2RpYWdub3N0aWMnLGEpPydBIGNsYXNzIHRoYXQgaXMgYW4gaW50ZXJmYWNlIG11c3QgYWxzbyBiZSBhYnN0cmFjdCc6ZGZiKCdfVUlfRUNsYXNzTm9DaXJjdWxhclN1cGVyVHlwZXNfZGlhZ25vc3RpYycsYSk/J0EgY2xhc3MgbWF5IG5vdCBiZSBhIHN1cGVyIHR5cGUgb2YgaXRzZWxmJzpkZmIoJ19VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMnLGEpP1wiQSBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gYSBtYXAgZW50cnkgY2xhc3MgbXVzdCBoYXZlIGluc3RhbmNlIGNsYXNzIG5hbWUgJ2phdmEudXRpbC5NYXAkRW50cnknXCI6ZGZiKCdfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljJyxhKT8nVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lJzpkZmIoJ19VSV9FUmVmZXJlbmNlT3Bwb3NpdGVOb3RGZWF0dXJlT2ZUeXBlX2RpYWdub3N0aWMnLGEpP1wiVGhlIG9wcG9zaXRlIG11c3QgYmUgYSBmZWF0dXJlIG9mIHRoZSByZWZlcmVuY2UncyB0eXBlXCI6ZGZiKCdfVUlfRVJlZmVyZW5jZVRyYW5zaWVudE9wcG9zaXRlTm90VHJhbnNpZW50X2RpYWdub3N0aWMnLGEpPydUaGUgb3Bwb3NpdGUgb2YgYSB0cmFuc2llbnQgcmVmZXJlbmNlIG11c3QgYmUgdHJhbnNpZW50IGlmIGl0IGlzIHByb3h5IHJlc29sdmluZyc6ZGZiKCdfVUlfRVJlZmVyZW5jZU9wcG9zaXRlQm90aENvbnRhaW5tZW50X2RpYWdub3N0aWMnLGEpPydUaGUgb3Bwb3NpdGUgb2YgYSBjb250YWlubWVudCByZWZlcmVuY2UgbXVzdCBub3QgYmUgYSBjb250YWlubWVudCByZWZlcmVuY2UnOmRmYignX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMnLGEpPydBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxJzpkZmIoJ19VSV9FVHlwZWRFbGVtZW50Tm9UeXBlX2RpYWdub3N0aWMnLGEpPydUaGUgdHlwZWQgZWxlbWVudCBtdXN0IGhhdmUgYSB0eXBlJzpkZmIoJ19VSV9FQXR0cmlidXRlTm9EYXRhVHlwZV9kaWFnbm9zdGljJyxhKT8nVGhlIGdlbmVyaWMgYXR0cmlidXRlIHR5cGUgbXVzdCBub3QgcmVmZXIgdG8gYSBjbGFzcyc6ZGZiKCdfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYycsYSk/J1RoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlJzpkZmIoJ19VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJBbmRDbGFzc2lmaWVyX2RpYWdub3N0aWMnLGEpP1wiQSBnZW5lcmljIHR5cGUgY2FuJ3QgcmVmZXIgdG8gYm90aCBhIHR5cGUgcGFyYW1ldGVyIGFuZCBhIGNsYXNzaWZpZXJcIjpkZmIoJ19VSV9FR2VuZXJpY1R5cGVOb0NsYXNzX2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgc3VwZXIgdHlwZSBtdXN0IHJlZmVyIHRvIGEgY2xhc3MnOmRmYignX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlck9yQ2xhc3NpZmllcl9kaWFnbm9zdGljJyxhKT8nQSBnZW5lcmljIHR5cGUgaW4gdGhpcyBjb250ZXh0IG11c3QgcmVmZXIgdG8gYSBjbGFzc2lmaWVyIG9yIGEgdHlwZSBwYXJhbWV0ZXInOmRmYignX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYycsYSk/J0EgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQnOmRmYignX1VJX0VHZW5lcmljVHlwZU5vVXBwZXJBbmRMb3dlckJvdW5kX2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgdHlwZSBtdXN0IG5vdCBoYXZlIGJvdGggYSBsb3dlciBhbmQgYW4gdXBwZXIgYm91bmQnOmRmYignX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlck9yQ2xhc3NpZmllckFuZEJvdW5kX2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgdHlwZSB3aXRoIGJvdW5kcyBtdXN0IG5vdCBhbHNvIHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgb3IgY2xhc3NpZmllcic6ZGZiKCdfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYycsYSk/J0EgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXInOmRmYignX1VJX0VHZW5lcmljVHlwZU91dE9mU2NvcGVUeXBlUGFyYW1ldGVyX2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgdHlwZSBtYXkgb25seSByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIHRoYXQgaXMgaW4gc2NvcGUnOmF9XG5mdW5jdGlvbiBBb2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKGEucilyZXR1cm47YS5yPXRydWU7cG5kKGEsJ2dyYXBoJyk7Y29kKGEsJ2dyYXBoJyk7ZG9kKGEseXRlKTtHbmQoYS5vLCdUJyk7d3RkKF9LZChhLmEpLGEucCk7d3RkKF9LZChhLmYpLGEuYSk7d3RkKF9LZChhLm4pLGEuZik7d3RkKF9LZChhLmcpLGEubik7d3RkKF9LZChhLmMpLGEubik7d3RkKF9LZChhLmkpLGEuYyk7d3RkKF9LZChhLmopLGEuYyk7d3RkKF9LZChhLmQpLGEuZik7d3RkKF9LZChhLmUpLGEuYSk7WG5kKGEucCxQMyxJbGUsdHJ1ZSx0cnVlLGZhbHNlKTtvPURuZChhLnAsYS5wLCdzZXRQcm9wZXJ0eScpO3A9SG5kKG8pO2o9Tm5kKGEubyk7az0oYz0oZD1uZXcgVVFkLGQpLGMpO3d0ZCgoIWouZCYmKGouZD1uZXcgeE1kKGo1LGosMSkpLGouZCksayk7bD1PbmQocCk7UFFkKGssbCk7Rm5kKG8saixBdGUpO2o9T25kKHApO0ZuZChvLGosQnRlKTtvPURuZChhLnAsbnVsbCwnZ2V0UHJvcGVydHknKTtwPUhuZChvKTtqPU5uZChhLm8pO2s9T25kKHApO3d0ZCgoIWouZCYmKGouZD1uZXcgeE1kKGo1LGosMSkpLGouZCksayk7Rm5kKG8saixBdGUpO2o9T25kKHApO249eElkKG8saixudWxsKTshIW4mJm4uRmkoKTtvPURuZChhLnAsYS53Yi5lLCdoYXNQcm9wZXJ0eScpO2o9Tm5kKGEubyk7az0oZT0oZj1uZXcgVVFkLGYpLGUpO3d0ZCgoIWouZCYmKGouZD1uZXcgeE1kKGo1LGosMSkpLGouZCksayk7Rm5kKG8saixBdGUpO289RG5kKGEucCxhLnAsJ2NvcHlQcm9wZXJ0aWVzJyk7RW5kKG8sYS5wLEN0ZSk7bz1EbmQoYS5wLG51bGwsJ2dldEFsbFByb3BlcnRpZXMnKTtqPU5uZChhLndiLlApO2s9Tm5kKGEubyk7d3RkKCghai5kJiYoai5kPW5ldyB4TWQoajUsaiwxKSksai5kKSxrKTtsPShnPShoPW5ldyBVUWQsaCksZyk7d3RkKCghay5kJiYoay5kPW5ldyB4TWQoajUsaywxKSksay5kKSxsKTtrPU5uZChhLndiLk0pO3d0ZCgoIWouZCYmKGouZD1uZXcgeE1kKGo1LGosMSkpLGouZCksayk7bT14SWQobyxqLG51bGwpOyEhbSYmbS5GaSgpO1huZChhLmEseDIsWHNlLHRydWUsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5hKSwwKSwxOCksYS5rLG51bGwsRHRlLDAsLTEseDIsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtYbmQoYS5mLEMyLFpzZSx0cnVlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEuZiksMCksMTgpLGEuZyxCRChxdWQoWktkKGEuZyksMCksMTgpLCdsYWJlbHMnLDAsLTEsQzIsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmYpLDEpLDM0KSxhLndiLl8sRXRlLG51bGwsMCwxLEMyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WG5kKGEubixHMiwnRWxrU2hhcGUnLHRydWUsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5uKSwwKSwzNCksYS53Yi50LEZ0ZSwkamUsMSwxLEcyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5uKSwxKSwzNCksYS53Yi50LEd0ZSwkamUsMSwxLEcyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5uKSwyKSwzNCksYS53Yi50LCd4JywkamUsMSwxLEcyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5uKSwzKSwzNCksYS53Yi50LCd5JywkamUsMSwxLEcyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1EbmQoYS5uLG51bGwsJ3NldERpbWVuc2lvbnMnKTtFbmQobyxhLndiLnQsR3RlKTtFbmQobyxhLndiLnQsRnRlKTtvPURuZChhLm4sbnVsbCwnc2V0TG9jYXRpb24nKTtFbmQobyxhLndiLnQsJ3gnKTtFbmQobyxhLndiLnQsJ3knKTtYbmQoYS5nLEQyLGR0ZSxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLmcpLDApLDE4KSxhLmYsQkQocXVkKFpLZChhLmYpLDApLDE4KSxIdGUsMCwxLEQyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZyksMSksMzQpLGEud2IuXyxJdGUsJycsMCwxLEQyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WG5kKGEuYyx6Miwkc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLmMpLDApLDE4KSxhLmQsQkQocXVkKFpLZChhLmQpLDEpLDE4KSwnb3V0Z29pbmdFZGdlcycsMCwtMSx6MixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuYyksMSksMTgpLGEuZCxCRChxdWQoWktkKGEuZCksMiksMTgpLCdpbmNvbWluZ0VkZ2VzJywwLC0xLHoyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7WG5kKGEuaSxFMixldGUsZmFsc2UsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5pKSwwKSwxOCksYS5qLEJEKHF1ZChaS2QoYS5qKSwwKSwxOCksJ3BvcnRzJywwLC0xLEUyLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5pKSwxKSwxOCksYS5pLEJEKHF1ZChaS2QoYS5pKSwyKSwxOCksSnRlLDAsLTEsRTIsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmkpLDIpLDE4KSxhLmksQkQocXVkKFpLZChhLmkpLDEpLDE4KSxIdGUsMCwxLEUyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuaSksMyksMTgpLGEuZCxCRChxdWQoWktkKGEuZCksMCksMTgpLCdjb250YWluZWRFZGdlcycsMCwtMSxFMixmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuaSksNCksMzQpLGEud2IuZSxLdGUsbnVsbCwwLDEsRTIsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7WG5kKGEuaixGMixmdGUsZmFsc2UsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5qKSwwKSwxOCksYS5pLEJEKHF1ZChaS2QoYS5pKSwwKSwxOCksSHRlLDAsMSxGMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtYbmQoYS5kLEIyLF9zZSxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLmQpLDApLDE4KSxhLmksQkQocXVkKFpLZChhLmkpLDMpLDE4KSwnY29udGFpbmluZ05vZGUnLDAsMSxCMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmQpLDEpLDE4KSxhLmMsQkQocXVkKFpLZChhLmMpLDApLDE4KSxMdGUsMCwtMSxCMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuZCksMiksMTgpLGEuYyxCRChxdWQoWktkKGEuYyksMSksMTgpLE10ZSwwLC0xLEIyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5kKSwzKSwxOCksYS5lLEJEKHF1ZChaS2QoYS5lKSw1KSwxOCksTnRlLDAsLTEsQjIsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmQpLDQpLDM0KSxhLndiLmUsJ2h5cGVyZWRnZScsbnVsbCwwLDEsQjIsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5kKSw1KSwzNCksYS53Yi5lLEt0ZSxudWxsLDAsMSxCMix0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLmQpLDYpLDM0KSxhLndiLmUsJ3NlbGZsb29wJyxudWxsLDAsMSxCMix0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLmQpLDcpLDM0KSxhLndiLmUsJ2Nvbm5lY3RlZCcsbnVsbCwwLDEsQjIsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7WG5kKGEuYix5MixZc2UsZmFsc2UsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5iKSwwKSwzNCksYS53Yi50LCd4JywkamUsMSwxLHkyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5iKSwxKSwzNCksYS53Yi50LCd5JywkamUsMSwxLHkyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1EbmQoYS5iLG51bGwsJ3NldCcpO0VuZChvLGEud2IudCwneCcpO0VuZChvLGEud2IudCwneScpO1huZChhLmUsQTIsYXRlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuZSksMCksMzQpLGEud2IudCwnc3RhcnRYJyxudWxsLDAsMSxBMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZSksMSksMzQpLGEud2IudCwnc3RhcnRZJyxudWxsLDAsMSxBMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZSksMiksMzQpLGEud2IudCwnZW5kWCcsbnVsbCwwLDEsQTIsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmUpLDMpLDM0KSxhLndiLnQsJ2VuZFknLG51bGwsMCwxLEEyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5lKSw0KSwxOCksYS5iLG51bGwsT3RlLDAsLTEsQTIsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmUpLDUpLDE4KSxhLmQsQkQocXVkKFpLZChhLmQpLDMpLDE4KSxIdGUsMCwxLEEyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuZSksNiksMTgpLGEuYyxudWxsLFB0ZSwwLDEsQTIsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmUpLDcpLDE4KSxhLmMsbnVsbCxRdGUsMCwxLEEyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5lKSw4KSwxOCksYS5lLEJEKHF1ZChaS2QoYS5lKSw5KSwxOCksUnRlLDAsLTEsQTIsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmUpLDkpLDE4KSxhLmUsQkQocXVkKFpLZChhLmUpLDgpLDE4KSxTdGUsMCwtMSxBMixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZSksMTApLDM0KSxhLndiLl8sRXRlLG51bGwsMCwxLEEyLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1EbmQoYS5lLG51bGwsJ3NldFN0YXJ0TG9jYXRpb24nKTtFbmQobyxhLndiLnQsJ3gnKTtFbmQobyxhLndiLnQsJ3knKTtvPURuZChhLmUsbnVsbCwnc2V0RW5kTG9jYXRpb24nKTtFbmQobyxhLndiLnQsJ3gnKTtFbmQobyxhLndiLnQsJ3knKTtYbmQoYS5rLENLLCdFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeScsZmFsc2UsZmFsc2UsZmFsc2UpO2o9Tm5kKGEubyk7az0oaT0oYj1uZXcgVVFkLGIpLGkpO3d0ZCgoIWouZCYmKGouZD1uZXcgeE1kKGo1LGosMSkpLGouZCksayk7V25kKEJEKHF1ZChaS2QoYS5rKSwwKSwzNCksaiwna2V5JyxDSyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmspLDEpLDM0KSxhLnMsQnRlLG51bGwsMCwxLENLLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Wm5kKGEubyxRMywnSVByb3BlcnR5Jyx0cnVlKTtabmQoYS5zLFNJLCdQcm9wZXJ0eVZhbHVlJyx0cnVlKTtSbmQoYSx5dGUpfVxuZnVuY3Rpb24gbGRlKCl7bGRlPWNjYjtrZGU9S0MoU0Qsd3RlLDI1LFRqZSwxNSwxKTtrZGVbOV09MzU7a2RlWzEwXT0xOTtrZGVbMTNdPTE5O2tkZVszMl09NTE7a2RlWzMzXT00OTtrZGVbMzRdPTMzO3lsYihrZGUsMzUsMzgsNDkpO2tkZVszOF09MTt5bGIoa2RlLDM5LDQ1LDQ5KTt5bGIoa2RlLDQ1LDQ3LC03MSk7a2RlWzQ3XT00OTt5bGIoa2RlLDQ4LDU4LC03MSk7a2RlWzU4XT02MTtrZGVbNTldPTQ5O2tkZVs2MF09MTtrZGVbNjFdPTQ5O2tkZVs2Ml09MzM7eWxiKGtkZSw2Myw2NSw0OSk7eWxiKGtkZSw2NSw5MSwtMyk7eWxiKGtkZSw5MSw5MywzMyk7a2RlWzkzXT0xO2tkZVs5NF09MzM7a2RlWzk1XT0tMztrZGVbOTZdPTMzO3lsYihrZGUsOTcsMTIzLC0zKTt5bGIoa2RlLDEyMywxODMsMzMpO2tkZVsxODNdPS04Nzt5bGIoa2RlLDE4NCwxOTIsMzMpO3lsYihrZGUsMTkyLDIxNSwtMTkpO2tkZVsyMTVdPTMzO3lsYihrZGUsMjE2LDI0NywtMTkpO2tkZVsyNDddPTMzO3lsYihrZGUsMjQ4LDMwNiwtMTkpO3lsYihrZGUsMzA2LDMwOCwzMyk7eWxiKGtkZSwzMDgsMzE5LC0xOSk7eWxiKGtkZSwzMTksMzIxLDMzKTt5bGIoa2RlLDMyMSwzMjksLTE5KTtrZGVbMzI5XT0zMzt5bGIoa2RlLDMzMCwzODMsLTE5KTtrZGVbMzgzXT0zMzt5bGIoa2RlLDM4NCw0NTIsLTE5KTt5bGIoa2RlLDQ1Miw0NjEsMzMpO3lsYihrZGUsNDYxLDQ5NywtMTkpO3lsYihrZGUsNDk3LDUwMCwzMyk7eWxiKGtkZSw1MDAsNTAyLC0xOSk7eWxiKGtkZSw1MDIsNTA2LDMzKTt5bGIoa2RlLDUwNiw1MzYsLTE5KTt5bGIoa2RlLDUzNiw1OTIsMzMpO3lsYihrZGUsNTkyLDY4MSwtMTkpO3lsYihrZGUsNjgxLDY5OSwzMyk7eWxiKGtkZSw2OTksNzA2LC0xOSk7eWxiKGtkZSw3MDYsNzIwLDMzKTt5bGIoa2RlLDcyMCw3MjIsLTg3KTt5bGIoa2RlLDcyMiw3NjgsMzMpO3lsYihrZGUsNzY4LDgzOCwtODcpO3lsYihrZGUsODM4LDg2NCwzMyk7eWxiKGtkZSw4NjQsODY2LC04Nyk7eWxiKGtkZSw4NjYsOTAyLDMzKTtrZGVbOTAyXT0tMTk7a2RlWzkwM109LTg3O3lsYihrZGUsOTA0LDkwNywtMTkpO2tkZVs5MDddPTMzO2tkZVs5MDhdPS0xOTtrZGVbOTA5XT0zMzt5bGIoa2RlLDkxMCw5MzAsLTE5KTtrZGVbOTMwXT0zMzt5bGIoa2RlLDkzMSw5NzUsLTE5KTtrZGVbOTc1XT0zMzt5bGIoa2RlLDk3Niw5ODMsLTE5KTt5bGIoa2RlLDk4Myw5ODYsMzMpO2tkZVs5ODZdPS0xOTtrZGVbOTg3XT0zMztrZGVbOTg4XT0tMTk7a2RlWzk4OV09MzM7a2RlWzk5MF09LTE5O2tkZVs5OTFdPTMzO2tkZVs5OTJdPS0xOTtrZGVbOTkzXT0zMzt5bGIoa2RlLDk5NCwxMDEyLC0xOSk7eWxiKGtkZSwxMDEyLDEwMjUsMzMpO3lsYihrZGUsMTAyNSwxMDM3LC0xOSk7a2RlWzEwMzddPTMzO3lsYihrZGUsMTAzOCwxMTA0LC0xOSk7a2RlWzExMDRdPTMzO3lsYihrZGUsMTEwNSwxMTE3LC0xOSk7a2RlWzExMTddPTMzO3lsYihrZGUsMTExOCwxMTU0LC0xOSk7a2RlWzExNTRdPTMzO3lsYihrZGUsMTE1NSwxMTU5LC04Nyk7eWxiKGtkZSwxMTU5LDExNjgsMzMpO3lsYihrZGUsMTE2OCwxMjIxLC0xOSk7eWxiKGtkZSwxMjIxLDEyMjMsMzMpO3lsYihrZGUsMTIyMywxMjI1LC0xOSk7eWxiKGtkZSwxMjI1LDEyMjcsMzMpO3lsYihrZGUsMTIyNywxMjI5LC0xOSk7eWxiKGtkZSwxMjI5LDEyMzIsMzMpO3lsYihrZGUsMTIzMiwxMjYwLC0xOSk7eWxiKGtkZSwxMjYwLDEyNjIsMzMpO3lsYihrZGUsMTI2MiwxMjcwLC0xOSk7eWxiKGtkZSwxMjcwLDEyNzIsMzMpO3lsYihrZGUsMTI3MiwxMjc0LC0xOSk7eWxiKGtkZSwxMjc0LDEzMjksMzMpO3lsYihrZGUsMTMyOSwxMzY3LC0xOSk7eWxiKGtkZSwxMzY3LDEzNjksMzMpO2tkZVsxMzY5XT0tMTk7eWxiKGtkZSwxMzcwLDEzNzcsMzMpO3lsYihrZGUsMTM3NywxNDE1LC0xOSk7eWxiKGtkZSwxNDE1LDE0MjUsMzMpO3lsYihrZGUsMTQyNSwxNDQyLC04Nyk7a2RlWzE0NDJdPTMzO3lsYihrZGUsMTQ0MywxNDY2LC04Nyk7a2RlWzE0NjZdPTMzO3lsYihrZGUsMTQ2NywxNDcwLC04Nyk7a2RlWzE0NzBdPTMzO2tkZVsxNDcxXT0tODc7a2RlWzE0NzJdPTMzO3lsYihrZGUsMTQ3MywxNDc1LC04Nyk7a2RlWzE0NzVdPTMzO2tkZVsxNDc2XT0tODc7eWxiKGtkZSwxNDc3LDE0ODgsMzMpO3lsYihrZGUsMTQ4OCwxNTE1LC0xOSk7eWxiKGtkZSwxNTE1LDE1MjAsMzMpO3lsYihrZGUsMTUyMCwxNTIzLC0xOSk7eWxiKGtkZSwxNTIzLDE1NjksMzMpO3lsYihrZGUsMTU2OSwxNTk1LC0xOSk7eWxiKGtkZSwxNTk1LDE2MDAsMzMpO2tkZVsxNjAwXT0tODc7eWxiKGtkZSwxNjAxLDE2MTEsLTE5KTt5bGIoa2RlLDE2MTEsMTYxOSwtODcpO3lsYihrZGUsMTYxOSwxNjMyLDMzKTt5bGIoa2RlLDE2MzIsMTY0MiwtODcpO3lsYihrZGUsMTY0MiwxNjQ4LDMzKTtrZGVbMTY0OF09LTg3O3lsYihrZGUsMTY0OSwxNzIwLC0xOSk7eWxiKGtkZSwxNzIwLDE3MjIsMzMpO3lsYihrZGUsMTcyMiwxNzI3LC0xOSk7a2RlWzE3MjddPTMzO3lsYihrZGUsMTcyOCwxNzQzLC0xOSk7a2RlWzE3NDNdPTMzO3lsYihrZGUsMTc0NCwxNzQ4LC0xOSk7a2RlWzE3NDhdPTMzO2tkZVsxNzQ5XT0tMTk7eWxiKGtkZSwxNzUwLDE3NjUsLTg3KTt5bGIoa2RlLDE3NjUsMTc2NywtMTkpO3lsYihrZGUsMTc2NywxNzY5LC04Nyk7a2RlWzE3NjldPTMzO3lsYihrZGUsMTc3MCwxNzc0LC04Nyk7eWxiKGtkZSwxNzc0LDE3NzYsMzMpO3lsYihrZGUsMTc3NiwxNzg2LC04Nyk7eWxiKGtkZSwxNzg2LDIzMDUsMzMpO3lsYihrZGUsMjMwNSwyMzA4LC04Nyk7a2RlWzIzMDhdPTMzO3lsYihrZGUsMjMwOSwyMzYyLC0xOSk7eWxiKGtkZSwyMzYyLDIzNjQsMzMpO2tkZVsyMzY0XT0tODc7a2RlWzIzNjVdPS0xOTt5bGIoa2RlLDIzNjYsMjM4MiwtODcpO3lsYihrZGUsMjM4MiwyMzg1LDMzKTt5bGIoa2RlLDIzODUsMjM4OSwtODcpO3lsYihrZGUsMjM4OSwyMzkyLDMzKTt5bGIoa2RlLDIzOTIsMjQwMiwtMTkpO3lsYihrZGUsMjQwMiwyNDA0LC04Nyk7eWxiKGtkZSwyNDA0LDI0MDYsMzMpO3lsYihrZGUsMjQwNiwyNDE2LC04Nyk7eWxiKGtkZSwyNDE2LDI0MzMsMzMpO3lsYihrZGUsMjQzMywyNDM2LC04Nyk7a2RlWzI0MzZdPTMzO3lsYihrZGUsMjQzNywyNDQ1LC0xOSk7eWxiKGtkZSwyNDQ1LDI0NDcsMzMpO3lsYihrZGUsMjQ0NywyNDQ5LC0xOSk7eWxiKGtkZSwyNDQ5LDI0NTEsMzMpO3lsYihrZGUsMjQ1MSwyNDczLC0xOSk7a2RlWzI0NzNdPTMzO3lsYihrZGUsMjQ3NCwyNDgxLC0xOSk7a2RlWzI0ODFdPTMzO2tkZVsyNDgyXT0tMTk7eWxiKGtkZSwyNDgzLDI0ODYsMzMpO3lsYihrZGUsMjQ4NiwyNDkwLC0xOSk7eWxiKGtkZSwyNDkwLDI0OTIsMzMpO2tkZVsyNDkyXT0tODc7a2RlWzI0OTNdPTMzO3lsYihrZGUsMjQ5NCwyNTAxLC04Nyk7eWxiKGtkZSwyNTAxLDI1MDMsMzMpO3lsYihrZGUsMjUwMywyNTA1LC04Nyk7eWxiKGtkZSwyNTA1LDI1MDcsMzMpO3lsYihrZGUsMjUwNywyNTEwLC04Nyk7eWxiKGtkZSwyNTEwLDI1MTksMzMpO2tkZVsyNTE5XT0tODc7eWxiKGtkZSwyNTIwLDI1MjQsMzMpO3lsYihrZGUsMjUyNCwyNTI2LC0xOSk7a2RlWzI1MjZdPTMzO3lsYihrZGUsMjUyNywyNTMwLC0xOSk7eWxiKGtkZSwyNTMwLDI1MzIsLTg3KTt5bGIoa2RlLDI1MzIsMjUzNCwzMyk7eWxiKGtkZSwyNTM0LDI1NDQsLTg3KTt5bGIoa2RlLDI1NDQsMjU0NiwtMTkpO3lsYihrZGUsMjU0NiwyNTYyLDMzKTtrZGVbMjU2Ml09LTg3O3lsYihrZGUsMjU2MywyNTY1LDMzKTt5bGIoa2RlLDI1NjUsMjU3MSwtMTkpO3lsYihrZGUsMjU3MSwyNTc1LDMzKTt5bGIoa2RlLDI1NzUsMjU3NywtMTkpO3lsYihrZGUsMjU3NywyNTc5LDMzKTt5bGIoa2RlLDI1NzksMjYwMSwtMTkpO2tkZVsyNjAxXT0zMzt5bGIoa2RlLDI2MDIsMjYwOSwtMTkpO2tkZVsyNjA5XT0zMzt5bGIoa2RlLDI2MTAsMjYxMiwtMTkpO2tkZVsyNjEyXT0zMzt5bGIoa2RlLDI2MTMsMjYxNSwtMTkpO2tkZVsyNjE1XT0zMzt5bGIoa2RlLDI2MTYsMjYxOCwtMTkpO3lsYihrZGUsMjYxOCwyNjIwLDMzKTtrZGVbMjYyMF09LTg3O2tkZVsyNjIxXT0zMzt5bGIoa2RlLDI2MjIsMjYyNywtODcpO3lsYihrZGUsMjYyNywyNjMxLDMzKTt5bGIoa2RlLDI2MzEsMjYzMywtODcpO3lsYihrZGUsMjYzMywyNjM1LDMzKTt5bGIoa2RlLDI2MzUsMjYzOCwtODcpO3lsYihrZGUsMjYzOCwyNjQ5LDMzKTt5bGIoa2RlLDI2NDksMjY1MywtMTkpO2tkZVsyNjUzXT0zMztrZGVbMjY1NF09LTE5O3lsYihrZGUsMjY1NSwyNjYyLDMzKTt5bGIoa2RlLDI2NjIsMjY3NCwtODcpO3lsYihrZGUsMjY3NCwyNjc3LC0xOSk7eWxiKGtkZSwyNjc3LDI2ODksMzMpO3lsYihrZGUsMjY4OSwyNjkyLC04Nyk7a2RlWzI2OTJdPTMzO3lsYihrZGUsMjY5MywyNzAwLC0xOSk7a2RlWzI3MDBdPTMzO2tkZVsyNzAxXT0tMTk7a2RlWzI3MDJdPTMzO3lsYihrZGUsMjcwMywyNzA2LC0xOSk7a2RlWzI3MDZdPTMzO3lsYihrZGUsMjcwNywyNzI5LC0xOSk7a2RlWzI3MjldPTMzO3lsYihrZGUsMjczMCwyNzM3LC0xOSk7a2RlWzI3MzddPTMzO3lsYihrZGUsMjczOCwyNzQwLC0xOSk7a2RlWzI3NDBdPTMzO3lsYihrZGUsMjc0MSwyNzQ2LC0xOSk7eWxiKGtkZSwyNzQ2LDI3NDgsMzMpO2tkZVsyNzQ4XT0tODc7a2RlWzI3NDldPS0xOTt5bGIoa2RlLDI3NTAsMjc1OCwtODcpO2tkZVsyNzU4XT0zMzt5bGIoa2RlLDI3NTksMjc2MiwtODcpO2tkZVsyNzYyXT0zMzt5bGIoa2RlLDI3NjMsMjc2NiwtODcpO3lsYihrZGUsMjc2NiwyNzg0LDMzKTtrZGVbMjc4NF09LTE5O3lsYihrZGUsMjc4NSwyNzkwLDMzKTt5bGIoa2RlLDI3OTAsMjgwMCwtODcpO3lsYihrZGUsMjgwMCwyODE3LDMzKTt5bGIoa2RlLDI4MTcsMjgyMCwtODcpO2tkZVsyODIwXT0zMzt5bGIoa2RlLDI4MjEsMjgyOSwtMTkpO3lsYihrZGUsMjgyOSwyODMxLDMzKTt5bGIoa2RlLDI4MzEsMjgzMywtMTkpO3lsYihrZGUsMjgzMywyODM1LDMzKTt5bGIoa2RlLDI4MzUsMjg1NywtMTkpO2tkZVsyODU3XT0zMzt5bGIoa2RlLDI4NTgsMjg2NSwtMTkpO2tkZVsyODY1XT0zMzt5bGIoa2RlLDI4NjYsMjg2OCwtMTkpO3lsYihrZGUsMjg2OCwyODcwLDMzKTt5bGIoa2RlLDI4NzAsMjg3NCwtMTkpO3lsYihrZGUsMjg3NCwyODc2LDMzKTtrZGVbMjg3Nl09LTg3O2tkZVsyODc3XT0tMTk7eWxiKGtkZSwyODc4LDI4ODQsLTg3KTt5bGIoa2RlLDI4ODQsMjg4NywzMyk7eWxiKGtkZSwyODg3LDI4ODksLTg3KTt5bGIoa2RlLDI4ODksMjg5MSwzMyk7eWxiKGtkZSwyODkxLDI4OTQsLTg3KTt5bGIoa2RlLDI4OTQsMjkwMiwzMyk7eWxiKGtkZSwyOTAyLDI5MDQsLTg3KTt5bGIoa2RlLDI5MDQsMjkwOCwzMyk7eWxiKGtkZSwyOTA4LDI5MTAsLTE5KTtrZGVbMjkxMF09MzM7eWxiKGtkZSwyOTExLDI5MTQsLTE5KTt5bGIoa2RlLDI5MTQsMjkxOCwzMyk7eWxiKGtkZSwyOTE4LDI5MjgsLTg3KTt5bGIoa2RlLDI5MjgsMjk0NiwzMyk7eWxiKGtkZSwyOTQ2LDI5NDgsLTg3KTtrZGVbMjk0OF09MzM7eWxiKGtkZSwyOTQ5LDI5NTUsLTE5KTt5bGIoa2RlLDI5NTUsMjk1OCwzMyk7eWxiKGtkZSwyOTU4LDI5NjEsLTE5KTtrZGVbMjk2MV09MzM7eWxiKGtkZSwyOTYyLDI5NjYsLTE5KTt5bGIoa2RlLDI5NjYsMjk2OSwzMyk7eWxiKGtkZSwyOTY5LDI5NzEsLTE5KTtrZGVbMjk3MV09MzM7a2RlWzI5NzJdPS0xOTtrZGVbMjk3M109MzM7eWxiKGtkZSwyOTc0LDI5NzYsLTE5KTt5bGIoa2RlLDI5NzYsMjk3OSwzMyk7eWxiKGtkZSwyOTc5LDI5ODEsLTE5KTt5bGIoa2RlLDI5ODEsMjk4NCwzMyk7eWxiKGtkZSwyOTg0LDI5ODcsLTE5KTt5bGIoa2RlLDI5ODcsMjk5MCwzMyk7eWxiKGtkZSwyOTkwLDI5OTgsLTE5KTtrZGVbMjk5OF09MzM7eWxiKGtkZSwyOTk5LDMwMDIsLTE5KTt5bGIoa2RlLDMwMDIsMzAwNiwzMyk7eWxiKGtkZSwzMDA2LDMwMTEsLTg3KTt5bGIoa2RlLDMwMTEsMzAxNCwzMyk7eWxiKGtkZSwzMDE0LDMwMTcsLTg3KTtrZGVbMzAxN109MzM7eWxiKGtkZSwzMDE4LDMwMjIsLTg3KTt5bGIoa2RlLDMwMjIsMzAzMSwzMyk7a2RlWzMwMzFdPS04Nzt5bGIoa2RlLDMwMzIsMzA0NywzMyk7eWxiKGtkZSwzMDQ3LDMwNTYsLTg3KTt5bGIoa2RlLDMwNTYsMzA3MywzMyk7eWxiKGtkZSwzMDczLDMwNzYsLTg3KTtrZGVbMzA3Nl09MzM7eWxiKGtkZSwzMDc3LDMwODUsLTE5KTtrZGVbMzA4NV09MzM7eWxiKGtkZSwzMDg2LDMwODksLTE5KTtrZGVbMzA4OV09MzM7eWxiKGtkZSwzMDkwLDMxMTMsLTE5KTtrZGVbMzExM109MzM7eWxiKGtkZSwzMTE0LDMxMjQsLTE5KTtrZGVbMzEyNF09MzM7eWxiKGtkZSwzMTI1LDMxMzAsLTE5KTt5bGIoa2RlLDMxMzAsMzEzNCwzMyk7eWxiKGtkZSwzMTM0LDMxNDEsLTg3KTtrZGVbMzE0MV09MzM7eWxiKGtkZSwzMTQyLDMxNDUsLTg3KTtrZGVbMzE0NV09MzM7eWxiKGtkZSwzMTQ2LDMxNTAsLTg3KTt5bGIoa2RlLDMxNTAsMzE1NywzMyk7eWxiKGtkZSwzMTU3LDMxNTksLTg3KTt5bGIoa2RlLDMxNTksMzE2OCwzMyk7eWxiKGtkZSwzMTY4LDMxNzAsLTE5KTt5bGIoa2RlLDMxNzAsMzE3NCwzMyk7eWxiKGtkZSwzMTc0LDMxODQsLTg3KTt5bGIoa2RlLDMxODQsMzIwMiwzMyk7eWxiKGtkZSwzMjAyLDMyMDQsLTg3KTtrZGVbMzIwNF09MzM7eWxiKGtkZSwzMjA1LDMyMTMsLTE5KTtrZGVbMzIxM109MzM7eWxiKGtkZSwzMjE0LDMyMTcsLTE5KTtrZGVbMzIxN109MzM7eWxiKGtkZSwzMjE4LDMyNDEsLTE5KTtrZGVbMzI0MV09MzM7eWxiKGtkZSwzMjQyLDMyNTIsLTE5KTtrZGVbMzI1Ml09MzM7eWxiKGtkZSwzMjUzLDMyNTgsLTE5KTt5bGIoa2RlLDMyNTgsMzI2MiwzMyk7eWxiKGtkZSwzMjYyLDMyNjksLTg3KTtrZGVbMzI2OV09MzM7eWxiKGtkZSwzMjcwLDMyNzMsLTg3KTtrZGVbMzI3M109MzM7eWxiKGtkZSwzMjc0LDMyNzgsLTg3KTt5bGIoa2RlLDMyNzgsMzI4NSwzMyk7eWxiKGtkZSwzMjg1LDMyODcsLTg3KTt5bGIoa2RlLDMyODcsMzI5NCwzMyk7a2RlWzMyOTRdPS0xOTtrZGVbMzI5NV09MzM7eWxiKGtkZSwzMjk2LDMyOTgsLTE5KTt5bGIoa2RlLDMyOTgsMzMwMiwzMyk7eWxiKGtkZSwzMzAyLDMzMTIsLTg3KTt5bGIoa2RlLDMzMTIsMzMzMCwzMyk7eWxiKGtkZSwzMzMwLDMzMzIsLTg3KTtrZGVbMzMzMl09MzM7eWxiKGtkZSwzMzMzLDMzNDEsLTE5KTtrZGVbMzM0MV09MzM7eWxiKGtkZSwzMzQyLDMzNDUsLTE5KTtrZGVbMzM0NV09MzM7eWxiKGtkZSwzMzQ2LDMzNjksLTE5KTtrZGVbMzM2OV09MzM7eWxiKGtkZSwzMzcwLDMzODYsLTE5KTt5bGIoa2RlLDMzODYsMzM5MCwzMyk7eWxiKGtkZSwzMzkwLDMzOTYsLTg3KTt5bGIoa2RlLDMzOTYsMzM5OCwzMyk7eWxiKGtkZSwzMzk4LDM0MDEsLTg3KTtrZGVbMzQwMV09MzM7eWxiKGtkZSwzNDAyLDM0MDYsLTg3KTt5bGIoa2RlLDM0MDYsMzQxNSwzMyk7a2RlWzM0MTVdPS04Nzt5bGIoa2RlLDM0MTYsMzQyNCwzMyk7eWxiKGtkZSwzNDI0LDM0MjYsLTE5KTt5bGIoa2RlLDM0MjYsMzQzMCwzMyk7eWxiKGtkZSwzNDMwLDM0NDAsLTg3KTt5bGIoa2RlLDM0NDAsMzU4NSwzMyk7eWxiKGtkZSwzNTg1LDM2MzEsLTE5KTtrZGVbMzYzMV09MzM7a2RlWzM2MzJdPS0xOTtrZGVbMzYzM109LTg3O3lsYihrZGUsMzYzNCwzNjM2LC0xOSk7eWxiKGtkZSwzNjM2LDM2NDMsLTg3KTt5bGIoa2RlLDM2NDMsMzY0OCwzMyk7eWxiKGtkZSwzNjQ4LDM2NTQsLTE5KTt5bGIoa2RlLDM2NTQsMzY2MywtODcpO2tkZVszNjYzXT0zMzt5bGIoa2RlLDM2NjQsMzY3NCwtODcpO3lsYihrZGUsMzY3NCwzNzEzLDMzKTt5bGIoa2RlLDM3MTMsMzcxNSwtMTkpO2tkZVszNzE1XT0zMztrZGVbMzcxNl09LTE5O3lsYihrZGUsMzcxNywzNzE5LDMzKTt5bGIoa2RlLDM3MTksMzcyMSwtMTkpO2tkZVszNzIxXT0zMztrZGVbMzcyMl09LTE5O3lsYihrZGUsMzcyMywzNzI1LDMzKTtrZGVbMzcyNV09LTE5O3lsYihrZGUsMzcyNiwzNzMyLDMzKTt5bGIoa2RlLDM3MzIsMzczNiwtMTkpO2tkZVszNzM2XT0zMzt5bGIoa2RlLDM3MzcsMzc0NCwtMTkpO2tkZVszNzQ0XT0zMzt5bGIoa2RlLDM3NDUsMzc0OCwtMTkpO2tkZVszNzQ4XT0zMztrZGVbMzc0OV09LTE5O2tkZVszNzUwXT0zMztrZGVbMzc1MV09LTE5O3lsYihrZGUsMzc1MiwzNzU0LDMzKTt5bGIoa2RlLDM3NTQsMzc1NiwtMTkpO2tkZVszNzU2XT0zMzt5bGIoa2RlLDM3NTcsMzc1OSwtMTkpO2tkZVszNzU5XT0zMztrZGVbMzc2MF09LTE5O2tkZVszNzYxXT0tODc7eWxiKGtkZSwzNzYyLDM3NjQsLTE5KTt5bGIoa2RlLDM3NjQsMzc3MCwtODcpO2tkZVszNzcwXT0zMzt5bGIoa2RlLDM3NzEsMzc3MywtODcpO2tkZVszNzczXT0tMTk7eWxiKGtkZSwzNzc0LDM3NzYsMzMpO3lsYihrZGUsMzc3NiwzNzgxLC0xOSk7a2RlWzM3ODFdPTMzO2tkZVszNzgyXT0tODc7a2RlWzM3ODNdPTMzO3lsYihrZGUsMzc4NCwzNzkwLC04Nyk7eWxiKGtkZSwzNzkwLDM3OTIsMzMpO3lsYihrZGUsMzc5MiwzODAyLC04Nyk7eWxiKGtkZSwzODAyLDM4NjQsMzMpO3lsYihrZGUsMzg2NCwzODY2LC04Nyk7eWxiKGtkZSwzODY2LDM4NzIsMzMpO3lsYihrZGUsMzg3MiwzODgyLC04Nyk7eWxiKGtkZSwzODgyLDM4OTMsMzMpO2tkZVszODkzXT0tODc7a2RlWzM4OTRdPTMzO2tkZVszODk1XT0tODc7a2RlWzM4OTZdPTMzO2tkZVszODk3XT0tODc7eWxiKGtkZSwzODk4LDM5MDIsMzMpO3lsYihrZGUsMzkwMiwzOTA0LC04Nyk7eWxiKGtkZSwzOTA0LDM5MTIsLTE5KTtrZGVbMzkxMl09MzM7eWxiKGtkZSwzOTEzLDM5NDYsLTE5KTt5bGIoa2RlLDM5NDYsMzk1MywzMyk7eWxiKGtkZSwzOTUzLDM5NzMsLTg3KTtrZGVbMzk3M109MzM7eWxiKGtkZSwzOTc0LDM5ODAsLTg3KTt5bGIoa2RlLDM5ODAsMzk4NCwzMyk7eWxiKGtkZSwzOTg0LDM5OTAsLTg3KTtrZGVbMzk5MF09MzM7a2RlWzM5OTFdPS04NztrZGVbMzk5Ml09MzM7eWxiKGtkZSwzOTkzLDQwMTQsLTg3KTt5bGIoa2RlLDQwMTQsNDAxNywzMyk7eWxiKGtkZSw0MDE3LDQwMjQsLTg3KTtrZGVbNDAyNF09MzM7a2RlWzQwMjVdPS04Nzt5bGIoa2RlLDQwMjYsNDI1NiwzMyk7eWxiKGtkZSw0MjU2LDQyOTQsLTE5KTt5bGIoa2RlLDQyOTQsNDMwNCwzMyk7eWxiKGtkZSw0MzA0LDQzNDMsLTE5KTt5bGIoa2RlLDQzNDMsNDM1MiwzMyk7a2RlWzQzNTJdPS0xOTtrZGVbNDM1M109MzM7eWxiKGtkZSw0MzU0LDQzNTYsLTE5KTtrZGVbNDM1Nl09MzM7eWxiKGtkZSw0MzU3LDQzNjAsLTE5KTtrZGVbNDM2MF09MzM7a2RlWzQzNjFdPS0xOTtrZGVbNDM2Ml09MzM7eWxiKGtkZSw0MzYzLDQzNjUsLTE5KTtrZGVbNDM2NV09MzM7eWxiKGtkZSw0MzY2LDQzNzEsLTE5KTt5bGIoa2RlLDQzNzEsNDQxMiwzMyk7a2RlWzQ0MTJdPS0xOTtrZGVbNDQxM109MzM7a2RlWzQ0MTRdPS0xOTtrZGVbNDQxNV09MzM7a2RlWzQ0MTZdPS0xOTt5bGIoa2RlLDQ0MTcsNDQyOCwzMyk7a2RlWzQ0MjhdPS0xOTtrZGVbNDQyOV09MzM7a2RlWzQ0MzBdPS0xOTtrZGVbNDQzMV09MzM7a2RlWzQ0MzJdPS0xOTt5bGIoa2RlLDQ0MzMsNDQzNiwzMyk7eWxiKGtkZSw0NDM2LDQ0MzgsLTE5KTt5bGIoa2RlLDQ0MzgsNDQ0MSwzMyk7a2RlWzQ0NDFdPS0xOTt5bGIoa2RlLDQ0NDIsNDQ0NywzMyk7eWxiKGtkZSw0NDQ3LDQ0NTAsLTE5KTtrZGVbNDQ1MF09MzM7a2RlWzQ0NTFdPS0xOTtrZGVbNDQ1Ml09MzM7a2RlWzQ0NTNdPS0xOTtrZGVbNDQ1NF09MzM7a2RlWzQ0NTVdPS0xOTtrZGVbNDQ1Nl09MzM7a2RlWzQ0NTddPS0xOTt5bGIoa2RlLDQ0NTgsNDQ2MSwzMyk7eWxiKGtkZSw0NDYxLDQ0NjMsLTE5KTt5bGIoa2RlLDQ0NjMsNDQ2NiwzMyk7eWxiKGtkZSw0NDY2LDQ0NjgsLTE5KTtrZGVbNDQ2OF09MzM7a2RlWzQ0NjldPS0xOTt5bGIoa2RlLDQ0NzAsNDUxMCwzMyk7a2RlWzQ1MTBdPS0xOTt5bGIoa2RlLDQ1MTEsNDUyMCwzMyk7a2RlWzQ1MjBdPS0xOTt5bGIoa2RlLDQ1MjEsNDUyMywzMyk7a2RlWzQ1MjNdPS0xOTt5bGIoa2RlLDQ1MjQsNDUyNiwzMyk7eWxiKGtkZSw0NTI2LDQ1MjgsLTE5KTt5bGIoa2RlLDQ1MjgsNDUzNSwzMyk7eWxiKGtkZSw0NTM1LDQ1MzcsLTE5KTtrZGVbNDUzN109MzM7a2RlWzQ1MzhdPS0xOTtrZGVbNDUzOV09MzM7eWxiKGtkZSw0NTQwLDQ1NDcsLTE5KTt5bGIoa2RlLDQ1NDcsNDU4NywzMyk7a2RlWzQ1ODddPS0xOTt5bGIoa2RlLDQ1ODgsNDU5MiwzMyk7a2RlWzQ1OTJdPS0xOTt5bGIoa2RlLDQ1OTMsNDYwMSwzMyk7a2RlWzQ2MDFdPS0xOTt5bGIoa2RlLDQ2MDIsNzY4MCwzMyk7eWxiKGtkZSw3NjgwLDc4MzYsLTE5KTt5bGIoa2RlLDc4MzYsNzg0MCwzMyk7eWxiKGtkZSw3ODQwLDc5MzAsLTE5KTt5bGIoa2RlLDc5MzAsNzkzNiwzMyk7eWxiKGtkZSw3OTM2LDc5NTgsLTE5KTt5bGIoa2RlLDc5NTgsNzk2MCwzMyk7eWxiKGtkZSw3OTYwLDc5NjYsLTE5KTt5bGIoa2RlLDc5NjYsNzk2OCwzMyk7eWxiKGtkZSw3OTY4LDgwMDYsLTE5KTt5bGIoa2RlLDgwMDYsODAwOCwzMyk7eWxiKGtkZSw4MDA4LDgwMTQsLTE5KTt5bGIoa2RlLDgwMTQsODAxNiwzMyk7eWxiKGtkZSw4MDE2LDgwMjQsLTE5KTtrZGVbODAyNF09MzM7a2RlWzgwMjVdPS0xOTtrZGVbODAyNl09MzM7a2RlWzgwMjddPS0xOTtrZGVbODAyOF09MzM7a2RlWzgwMjldPS0xOTtrZGVbODAzMF09MzM7eWxiKGtkZSw4MDMxLDgwNjIsLTE5KTt5bGIoa2RlLDgwNjIsODA2NCwzMyk7eWxiKGtkZSw4MDY0LDgxMTcsLTE5KTtrZGVbODExN109MzM7eWxiKGtkZSw4MTE4LDgxMjUsLTE5KTtrZGVbODEyNV09MzM7a2RlWzgxMjZdPS0xOTt5bGIoa2RlLDgxMjcsODEzMCwzMyk7eWxiKGtkZSw4MTMwLDgxMzMsLTE5KTtrZGVbODEzM109MzM7eWxiKGtkZSw4MTM0LDgxNDEsLTE5KTt5bGIoa2RlLDgxNDEsODE0NCwzMyk7eWxiKGtkZSw4MTQ0LDgxNDgsLTE5KTt5bGIoa2RlLDgxNDgsODE1MCwzMyk7eWxiKGtkZSw4MTUwLDgxNTYsLTE5KTt5bGIoa2RlLDgxNTYsODE2MCwzMyk7eWxiKGtkZSw4MTYwLDgxNzMsLTE5KTt5bGIoa2RlLDgxNzMsODE3OCwzMyk7eWxiKGtkZSw4MTc4LDgxODEsLTE5KTtrZGVbODE4MV09MzM7eWxiKGtkZSw4MTgyLDgxODksLTE5KTt5bGIoa2RlLDgxODksODQwMCwzMyk7eWxiKGtkZSw4NDAwLDg0MTMsLTg3KTt5bGIoa2RlLDg0MTMsODQxNywzMyk7a2RlWzg0MTddPS04Nzt5bGIoa2RlLDg0MTgsODQ4NiwzMyk7a2RlWzg0ODZdPS0xOTt5bGIoa2RlLDg0ODcsODQ5MCwzMyk7eWxiKGtkZSw4NDkwLDg0OTIsLTE5KTt5bGIoa2RlLDg0OTIsODQ5NCwzMyk7a2RlWzg0OTRdPS0xOTt5bGIoa2RlLDg0OTUsODU3NiwzMyk7eWxiKGtkZSw4NTc2LDg1NzksLTE5KTt5bGIoa2RlLDg1NzksMTIyOTMsMzMpO2tkZVsxMjI5M109LTg3O2tkZVsxMjI5NF09MzM7a2RlWzEyMjk1XT0tMTk7eWxiKGtkZSwxMjI5NiwxMjMyMSwzMyk7eWxiKGtkZSwxMjMyMSwxMjMzMCwtMTkpO3lsYihrZGUsMTIzMzAsMTIzMzYsLTg3KTtrZGVbMTIzMzZdPTMzO3lsYihrZGUsMTIzMzcsMTIzNDIsLTg3KTt5bGIoa2RlLDEyMzQyLDEyMzUzLDMzKTt5bGIoa2RlLDEyMzUzLDEyNDM3LC0xOSk7eWxiKGtkZSwxMjQzNywxMjQ0MSwzMyk7eWxiKGtkZSwxMjQ0MSwxMjQ0MywtODcpO3lsYihrZGUsMTI0NDMsMTI0NDUsMzMpO3lsYihrZGUsMTI0NDUsMTI0NDcsLTg3KTt5bGIoa2RlLDEyNDQ3LDEyNDQ5LDMzKTt5bGIoa2RlLDEyNDQ5LDEyNTM5LC0xOSk7a2RlWzEyNTM5XT0zMzt5bGIoa2RlLDEyNTQwLDEyNTQzLC04Nyk7eWxiKGtkZSwxMjU0MywxMjU0OSwzMyk7eWxiKGtkZSwxMjU0OSwxMjU4OSwtMTkpO3lsYihrZGUsMTI1ODksMTk5NjgsMzMpO3lsYihrZGUsMTk5NjgsNDA4NzAsLTE5KTt5bGIoa2RlLDQwODcwLDQ0MDMyLDMzKTt5bGIoa2RlLDQ0MDMyLDU1MjA0LC0xOSk7eWxiKGtkZSw1NTIwNCxVamUsMzMpO3lsYihrZGUsNTczNDQsNjU1MzQsMzMpfVxuZnVuY3Rpb24gelpkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGEuaGIpcmV0dXJuO2EuaGI9dHJ1ZTtwbmQoYSwnZWNvcmUnKTtjb2QoYSwnZWNvcmUnKTtkb2QoYSxfdmUpO0duZChhLmZiLCdFJyk7R25kKGEuTCwnVCcpO0duZChhLlAsJ0snKTtHbmQoYS5QLCdWJyk7R25kKGEuY2IsJ0UnKTt3dGQoX0tkKGEuYiksYS5iYik7d3RkKF9LZChhLmEpLGEuUSk7d3RkKF9LZChhLm8pLGEucCk7d3RkKF9LZChhLnApLGEuUik7d3RkKF9LZChhLnEpLGEucCk7d3RkKF9LZChhLnYpLGEucSk7d3RkKF9LZChhLncpLGEuUik7d3RkKF9LZChhLkIpLGEuUSk7d3RkKF9LZChhLlIpLGEuUSk7d3RkKF9LZChhLlQpLGEuZWIpO3d0ZChfS2QoYS5VKSxhLlIpO3d0ZChfS2QoYS5WKSxhLmViKTt3dGQoX0tkKGEuVyksYS5iYik7d3RkKF9LZChhLmJiKSxhLmViKTt3dGQoX0tkKGEuZWIpLGEuUik7d3RkKF9LZChhLmRiKSxhLlIpO1huZChhLmIsYjUscXZlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuYiksMCksMzQpLGEuZSwnaUQnLG51bGwsMCwxLGI1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5iKSwxKSwxOCksYS5xLG51bGwsJ2VBdHRyaWJ1dGVUeXBlJywxLDEsYjUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7WG5kKGEuYSxhNSxudmUsZmFsc2UsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5hKSwwKSwzNCksYS5fLEN0ZSxudWxsLDAsMSxhNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO19uZChCRChxdWQoWktkKGEuYSksMSksMTgpLGEuYWIsbnVsbCwnZGV0YWlscycsMCwtMSxhNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuYSksMiksMTgpLGEuUSxCRChxdWQoWktkKGEuUSksMCksMTgpLCdlTW9kZWxFbGVtZW50JywwLDEsYTUsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmEpLDMpLDE4KSxhLlMsbnVsbCwnY29udGVudHMnLDAsLTEsYTUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLmEpLDQpLDE4KSxhLlMsbnVsbCwncmVmZXJlbmNlcycsMCwtMSxhNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO1huZChhLm8sYzUsJ0VDbGFzcycsZmFsc2UsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5vKSwwKSwzNCksYS5lLCdhYnN0cmFjdCcsbnVsbCwwLDEsYzUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLm8pLDEpLDM0KSxhLmUsJ2ludGVyZmFjZScsbnVsbCwwLDEsYzUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLm8pLDIpLDE4KSxhLm8sbnVsbCwnZVN1cGVyVHlwZXMnLDAsLTEsYzUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UpO19uZChCRChxdWQoWktkKGEubyksMyksMTgpLGEuVCxCRChxdWQoWktkKGEuVCksMCksMTgpLCdlT3BlcmF0aW9ucycsMCwtMSxjNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEubyksNCksMTgpLGEuYixudWxsLCdlQWxsQXR0cmlidXRlcycsMCwtMSxjNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLm8pLDUpLDE4KSxhLlcsbnVsbCwnZUFsbFJlZmVyZW5jZXMnLDAsLTEsYzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5vKSw2KSwxOCksYS5XLG51bGwsJ2VSZWZlcmVuY2VzJywwLC0xLGM1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEubyksNyksMTgpLGEuYixudWxsLCdlQXR0cmlidXRlcycsMCwtMSxjNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLm8pLDgpLDE4KSxhLlcsbnVsbCwnZUFsbENvbnRhaW5tZW50cycsMCwtMSxjNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLm8pLDkpLDE4KSxhLlQsbnVsbCwnZUFsbE9wZXJhdGlvbnMnLDAsLTEsYzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5vKSwxMCksMTgpLGEuYmIsbnVsbCwnZUFsbFN0cnVjdHVyYWxGZWF0dXJlcycsMCwtMSxjNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLm8pLDExKSwxOCksYS5vLG51bGwsJ2VBbGxTdXBlclR5cGVzJywwLC0xLGM1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEubyksMTIpLDE4KSxhLmIsbnVsbCwnZUlEQXR0cmlidXRlJywwLDEsYzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEubyksMTMpLDE4KSxhLmJiLEJEKHF1ZChaS2QoYS5iYiksNyksMTgpLCdlU3RydWN0dXJhbEZlYXR1cmVzJywwLC0xLGM1LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5vKSwxNCksMTgpLGEuSCxudWxsLCdlR2VuZXJpY1N1cGVyVHlwZXMnLDAsLTEsYzUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO19uZChCRChxdWQoWktkKGEubyksMTUpLDE4KSxhLkgsbnVsbCwnZUFsbEdlbmVyaWNTdXBlclR5cGVzJywwLC0xLGM1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO2g9JG5kKEJEKHF1ZChXS2QoYS5vKSwwKSw1OSksYS5lLCdpc1N1cGVyVHlwZU9mJyk7RW5kKGgsYS5vLCdzb21lQ2xhc3MnKTskbmQoQkQocXVkKFdLZChhLm8pLDEpLDU5KSxhLkksJ2dldEZlYXR1cmVDb3VudCcpO2g9JG5kKEJEKHF1ZChXS2QoYS5vKSwyKSw1OSksYS5iYixkd2UpO0VuZChoLGEuSSwnZmVhdHVyZUlEJyk7aD0kbmQoQkQocXVkKFdLZChhLm8pLDMpLDU5KSxhLkksZXdlKTtFbmQoaCxhLmJiLGZ3ZSk7aD0kbmQoQkQocXVkKFdLZChhLm8pLDQpLDU5KSxhLmJiLGR3ZSk7RW5kKGgsYS5fLCdmZWF0dXJlTmFtZScpOyRuZChCRChxdWQoV0tkKGEubyksNSksNTkpLGEuSSwnZ2V0T3BlcmF0aW9uQ291bnQnKTtoPSRuZChCRChxdWQoV0tkKGEubyksNiksNTkpLGEuVCwnZ2V0RU9wZXJhdGlvbicpO0VuZChoLGEuSSwnb3BlcmF0aW9uSUQnKTtoPSRuZChCRChxdWQoV0tkKGEubyksNyksNTkpLGEuSSxnd2UpO0VuZChoLGEuVCxod2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5vKSw4KSw1OSksYS5ULCdnZXRPdmVycmlkZScpO0VuZChoLGEuVCxod2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5vKSw5KSw1OSksYS5ILCdnZXRGZWF0dXJlVHlwZScpO0VuZChoLGEuYmIsZndlKTtYbmQoYS5wLGQ1LHJ2ZSx0cnVlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEucCksMCksMzQpLGEuXywnaW5zdGFuY2VDbGFzc05hbWUnLG51bGwsMCwxLGQ1LGZhbHNlLHRydWUsdHJ1ZSx0cnVlLHRydWUsZmFsc2UpO2I9Tm5kKGEuTCk7Yz12WmQoKTt3dGQoKCFiLmQmJihiLmQ9bmV3IHhNZChqNSxiLDEpKSxiLmQpLGMpO1duZChCRChxdWQoWktkKGEucCksMSksMzQpLGIsJ2luc3RhbmNlQ2xhc3MnLGQ1LHRydWUsdHJ1ZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLnApLDIpLDM0KSxhLk0saXdlLG51bGwsMCwxLGQ1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLHRydWUpO1ZuZChCRChxdWQoWktkKGEucCksMyksMzQpLGEuXywnaW5zdGFuY2VUeXBlTmFtZScsbnVsbCwwLDEsZDUsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5wKSw0KSwxOCksYS5VLEJEKHF1ZChaS2QoYS5VKSwzKSwxOCksJ2VQYWNrYWdlJywwLDEsZDUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLnApLDUpLDE4KSxhLmRiLG51bGwsandlLDAsLTEsZDUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5wKSwwKSw1OSksYS5lLGt3ZSk7RW5kKGgsYS5NLEpoZSk7JG5kKEJEKHF1ZChXS2QoYS5wKSwxKSw1OSksYS5JLCdnZXRDbGFzc2lmaWVySUQnKTtYbmQoYS5xLGY1LCdFRGF0YVR5cGUnLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEucSksMCksMzQpLGEuZSwnc2VyaWFsaXphYmxlJyxrc2UsMCwxLGY1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WG5kKGEudixoNSwnRUVudW0nLGZhbHNlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEudiksMCksMTgpLGEudyxCRChxdWQoWktkKGEudyksMyksMTgpLCdlTGl0ZXJhbHMnLDAsLTEsaDUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtoPSRuZChCRChxdWQoV0tkKGEudiksMCksNTkpLGEudyxsd2UpO0VuZChoLGEuXyxmdWUpO2g9JG5kKEJEKHF1ZChXS2QoYS52KSwxKSw1OSksYS53LGx3ZSk7RW5kKGgsYS5JLEJ0ZSk7aD0kbmQoQkQocXVkKFdLZChhLnYpLDIpLDU5KSxhLncsJ2dldEVFbnVtTGl0ZXJhbEJ5TGl0ZXJhbCcpO0VuZChoLGEuXywnbGl0ZXJhbCcpO1huZChhLncsZzUsc3ZlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEudyksMCksMzQpLGEuSSxCdGUsbnVsbCwwLDEsZzUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLncpLDEpLDM0KSxhLkEsJ2luc3RhbmNlJyxudWxsLDAsMSxnNSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS53KSwyKSwzNCksYS5fLCdsaXRlcmFsJyxudWxsLDAsMSxnNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO19uZChCRChxdWQoWktkKGEudyksMyksMTgpLGEudixCRChxdWQoWktkKGEudiksMCksMTgpLCdlRW51bScsMCwxLGc1LHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO1huZChhLkIsaTUsJ0VGYWN0b3J5JyxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLkIpLDApLDE4KSxhLlUsQkQocXVkKFpLZChhLlUpLDIpLDE4KSwnZVBhY2thZ2UnLDEsMSxpNSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5CKSwwKSw1OSksYS5TLCdjcmVhdGUnKTtFbmQoaCxhLm8sJ2VDbGFzcycpO2g9JG5kKEJEKHF1ZChXS2QoYS5CKSwxKSw1OSksYS5NLCdjcmVhdGVGcm9tU3RyaW5nJyk7RW5kKGgsYS5xLCdlRGF0YVR5cGUnKTtFbmQoaCxhLl8sJ2xpdGVyYWxWYWx1ZScpO2g9JG5kKEJEKHF1ZChXS2QoYS5CKSwyKSw1OSksYS5fLCdjb252ZXJ0VG9TdHJpbmcnKTtFbmQoaCxhLnEsJ2VEYXRhVHlwZScpO0VuZChoLGEuTSwnaW5zdGFuY2VWYWx1ZScpO1huZChhLlEsazUsYnRlLHRydWUsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5RKSwwKSwxOCksYS5hLEJEKHF1ZChaS2QoYS5hKSwyKSwxOCksJ2VBbm5vdGF0aW9ucycsMCwtMSxrNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5RKSwwKSw1OSksYS5hLCdnZXRFQW5ub3RhdGlvbicpO0VuZChoLGEuXyxDdGUpO1huZChhLlIsbDUsY3RlLHRydWUsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5SKSwwKSwzNCksYS5fLGZ1ZSxudWxsLDAsMSxsNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1huZChhLlMsbTUsJ0VPYmplY3QnLGZhbHNlLGZhbHNlLHRydWUpOyRuZChCRChxdWQoV0tkKGEuUyksMCksNTkpLGEubywnZUNsYXNzJyk7JG5kKEJEKHF1ZChXS2QoYS5TKSwxKSw1OSksYS5lLCdlSXNQcm94eScpOyRuZChCRChxdWQoV0tkKGEuUyksMiksNTkpLGEuWCwnZVJlc291cmNlJyk7JG5kKEJEKHF1ZChXS2QoYS5TKSwzKSw1OSksYS5TLCdlQ29udGFpbmVyJyk7JG5kKEJEKHF1ZChXS2QoYS5TKSw0KSw1OSksYS5iYiwnZUNvbnRhaW5pbmdGZWF0dXJlJyk7JG5kKEJEKHF1ZChXS2QoYS5TKSw1KSw1OSksYS5XLCdlQ29udGFpbm1lbnRGZWF0dXJlJyk7aD0kbmQoQkQocXVkKFdLZChhLlMpLDYpLDU5KSxudWxsLCdlQ29udGVudHMnKTtiPU5uZChhLmZiKTtjPU5uZChhLlMpO3d0ZCgoIWIuZCYmKGIuZD1uZXcgeE1kKGo1LGIsMSkpLGIuZCksYyk7ZT14SWQoaCxiLG51bGwpOyEhZSYmZS5GaSgpO2g9JG5kKEJEKHF1ZChXS2QoYS5TKSw3KSw1OSksbnVsbCwnZUFsbENvbnRlbnRzJyk7Yj1ObmQoYS5jYik7Yz1ObmQoYS5TKTt3dGQoKCFiLmQmJihiLmQ9bmV3IHhNZChqNSxiLDEpKSxiLmQpLGMpO2Y9eElkKGgsYixudWxsKTshIWYmJmYuRmkoKTtoPSRuZChCRChxdWQoV0tkKGEuUyksOCksNTkpLG51bGwsJ2VDcm9zc1JlZmVyZW5jZXMnKTtiPU5uZChhLmZiKTtjPU5uZChhLlMpO3d0ZCgoIWIuZCYmKGIuZD1uZXcgeE1kKGo1LGIsMSkpLGIuZCksYyk7Zz14SWQoaCxiLG51bGwpOyEhZyYmZy5GaSgpO2g9JG5kKEJEKHF1ZChXS2QoYS5TKSw5KSw1OSksYS5NLCdlR2V0Jyk7RW5kKGgsYS5iYixmd2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5TKSwxMCksNTkpLGEuTSwnZUdldCcpO0VuZChoLGEuYmIsZndlKTtFbmQoaCxhLmUsJ3Jlc29sdmUnKTtoPSRuZChCRChxdWQoV0tkKGEuUyksMTEpLDU5KSxudWxsLCdlU2V0Jyk7RW5kKGgsYS5iYixmd2UpO0VuZChoLGEuTSwnbmV3VmFsdWUnKTtoPSRuZChCRChxdWQoV0tkKGEuUyksMTIpLDU5KSxhLmUsJ2VJc1NldCcpO0VuZChoLGEuYmIsZndlKTtoPSRuZChCRChxdWQoV0tkKGEuUyksMTMpLDU5KSxudWxsLCdlVW5zZXQnKTtFbmQoaCxhLmJiLGZ3ZSk7aD0kbmQoQkQocXVkKFdLZChhLlMpLDE0KSw1OSksYS5NLCdlSW52b2tlJyk7RW5kKGgsYS5ULGh3ZSk7Yj1ObmQoYS5mYik7Yz12WmQoKTt3dGQoKCFiLmQmJihiLmQ9bmV3IHhNZChqNSxiLDEpKSxiLmQpLGMpO0ZuZChoLGIsJ2FyZ3VtZW50cycpO0NuZChoLGEuSyk7WG5kKGEuVCxuNSx1dmUsZmFsc2UsZmFsc2UsdHJ1ZSk7X25kKEJEKHF1ZChaS2QoYS5UKSwwKSwxOCksYS5vLEJEKHF1ZChaS2QoYS5vKSwzKSwxOCksbXdlLDAsMSxuNSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLlQpLDEpLDE4KSxhLmRiLG51bGwsandlLDAsLTEsbjUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuVCksMiksMTgpLGEuVixCRChxdWQoWktkKGEuViksMCksMTgpLCdlUGFyYW1ldGVycycsMCwtMSxuNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuVCksMyksMTgpLGEucCxudWxsLCdlRXhjZXB0aW9ucycsMCwtMSxuNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5UKSw0KSwxOCksYS5ILG51bGwsJ2VHZW5lcmljRXhjZXB0aW9ucycsMCwtMSxuNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7JG5kKEJEKHF1ZChXS2QoYS5UKSwwKSw1OSksYS5JLGd3ZSk7aD0kbmQoQkQocXVkKFdLZChhLlQpLDEpLDU5KSxhLmUsJ2lzT3ZlcnJpZGVPZicpO0VuZChoLGEuVCwnc29tZU9wZXJhdGlvbicpO1huZChhLlUsbzUsJ0VQYWNrYWdlJyxmYWxzZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLlUpLDApLDM0KSxhLl8sJ25zVVJJJyxudWxsLDAsMSxvNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuVSksMSksMzQpLGEuXywnbnNQcmVmaXgnLG51bGwsMCwxLG81LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5VKSwyKSwxOCksYS5CLEJEKHF1ZChaS2QoYS5CKSwwKSwxOCksJ2VGYWN0b3J5SW5zdGFuY2UnLDEsMSxvNSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuVSksMyksMTgpLGEucCxCRChxdWQoWktkKGEucCksNCksMTgpLCdlQ2xhc3NpZmllcnMnLDAsLTEsbzUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuVSksNCksMTgpLGEuVSxCRChxdWQoWktkKGEuVSksNSksMTgpLCdlU3VicGFja2FnZXMnLDAsLTEsbzUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuVSksNSksMTgpLGEuVSxCRChxdWQoWktkKGEuVSksNCksMTgpLCdlU3VwZXJQYWNrYWdlJywwLDEsbzUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtoPSRuZChCRChxdWQoV0tkKGEuVSksMCksNTkpLGEucCwnZ2V0RUNsYXNzaWZpZXInKTtFbmQoaCxhLl8sZnVlKTtYbmQoYS5WLHA1LHZ2ZSxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLlYpLDApLDE4KSxhLlQsQkQocXVkKFpLZChhLlQpLDIpLDE4KSwnZU9wZXJhdGlvbicsMCwxLHA1LHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO1huZChhLlcscTUsd3ZlLGZhbHNlLGZhbHNlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuVyksMCksMzQpLGEuZSwnY29udGFpbm1lbnQnLG51bGwsMCwxLHE1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5XKSwxKSwzNCksYS5lLCdjb250YWluZXInLG51bGwsMCwxLHE1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuVyksMiksMzQpLGEuZSwncmVzb2x2ZVByb3hpZXMnLGtzZSwwLDEscTUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLlcpLDMpLDE4KSxhLlcsbnVsbCwnZU9wcG9zaXRlJywwLDEscTUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLlcpLDQpLDE4KSxhLm8sbnVsbCwnZVJlZmVyZW5jZVR5cGUnLDEsMSxxNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLlcpLDUpLDE4KSxhLmIsbnVsbCwnZUtleXMnLDAsLTEscTUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtYbmQoYS5iYix0NSxwdmUsdHJ1ZSxmYWxzZSx0cnVlKTtWbmQoQkQocXVkKFpLZChhLmJiKSwwKSwzNCksYS5lLCdjaGFuZ2VhYmxlJyxrc2UsMCwxLHQ1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5iYiksMSksMzQpLGEuZSwndm9sYXRpbGUnLG51bGwsMCwxLHQ1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5iYiksMiksMzQpLGEuZSwndHJhbnNpZW50JyxudWxsLDAsMSx0NSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuYmIpLDMpLDM0KSxhLl8sJ2RlZmF1bHRWYWx1ZUxpdGVyYWwnLG51bGwsMCwxLHQ1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5iYiksNCksMzQpLGEuTSxpd2UsbnVsbCwwLDEsdDUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5iYiksNSksMzQpLGEuZSwndW5zZXR0YWJsZScsbnVsbCwwLDEsdDUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmJiKSw2KSwzNCksYS5lLCdkZXJpdmVkJyxudWxsLDAsMSx0NSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO19uZChCRChxdWQoWktkKGEuYmIpLDcpLDE4KSxhLm8sQkQocXVkKFpLZChhLm8pLDEzKSwxOCksbXdlLDAsMSx0NSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTskbmQoQkQocXVkKFdLZChhLmJiKSwwKSw1OSksYS5JLGV3ZSk7aD0kbmQoQkQocXVkKFdLZChhLmJiKSwxKSw1OSksbnVsbCwnZ2V0Q29udGFpbmVyQ2xhc3MnKTtiPU5uZChhLkwpO2M9dlpkKCk7d3RkKCghYi5kJiYoYi5kPW5ldyB4TWQoajUsYiwxKSksYi5kKSxjKTtkPXhJZChoLGIsbnVsbCk7ISFkJiZkLkZpKCk7WG5kKGEuZWIsdjUsb3ZlLHRydWUsZmFsc2UsdHJ1ZSk7Vm5kKEJEKHF1ZChaS2QoYS5lYiksMCksMzQpLGEuZSwnb3JkZXJlZCcsa3NlLDAsMSx2NSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZWIpLDEpLDM0KSxhLmUsJ3VuaXF1ZScsa3NlLDAsMSx2NSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZWIpLDIpLDM0KSxhLkksJ2xvd2VyQm91bmQnLG51bGwsMCwxLHY1LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5lYiksMyksMzQpLGEuSSwndXBwZXJCb3VuZCcsJzEnLDAsMSx2NSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1ZuZChCRChxdWQoWktkKGEuZWIpLDQpLDM0KSxhLmUsJ21hbnknLG51bGwsMCwxLHY1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLHRydWUpO1ZuZChCRChxdWQoWktkKGEuZWIpLDUpLDM0KSxhLmUsJ3JlcXVpcmVkJyxudWxsLDAsMSx2NSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLmViKSw2KSwxOCksYS5wLG51bGwsJ2VUeXBlJywwLDEsdjUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSk7X25kKEJEKHF1ZChaS2QoYS5lYiksNyksMTgpLGEuSCxudWxsLCdlR2VuZXJpY1R5cGUnLDAsMSx2NSxmYWxzZSx0cnVlLHRydWUsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYbmQoYS5hYixDSywnRVN0cmluZ1RvU3RyaW5nTWFwRW50cnknLGZhbHNlLGZhbHNlLGZhbHNlKTtWbmQoQkQocXVkKFpLZChhLmFiKSwwKSwzNCksYS5fLCdrZXknLG51bGwsMCwxLENLLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7Vm5kKEJEKHF1ZChaS2QoYS5hYiksMSksMzQpLGEuXyxCdGUsbnVsbCwwLDEsQ0ssZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYbmQoYS5ILGo1LHR2ZSxmYWxzZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLkgpLDApLDE4KSxhLkgsbnVsbCwnZVVwcGVyQm91bmQnLDAsMSxqNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuSCksMSksMTgpLGEuSCxudWxsLCdlVHlwZUFyZ3VtZW50cycsMCwtMSxqNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuSCksMiksMTgpLGEucCxudWxsLCdlUmF3VHlwZScsMSwxLGo1LHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtfbmQoQkQocXVkKFpLZChhLkgpLDMpLDE4KSxhLkgsbnVsbCwnZUxvd2VyQm91bmQnLDAsMSxqNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO19uZChCRChxdWQoWktkKGEuSCksNCksMTgpLGEuZGIsbnVsbCwnZVR5cGVQYXJhbWV0ZXInLDAsMSxqNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtfbmQoQkQocXVkKFpLZChhLkgpLDUpLDE4KSxhLnAsbnVsbCwnZUNsYXNzaWZpZXInLDAsMSxqNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO2g9JG5kKEJEKHF1ZChXS2QoYS5IKSwwKSw1OSksYS5lLGt3ZSk7RW5kKGgsYS5NLEpoZSk7WG5kKGEuZGIsdTUseHZlLGZhbHNlLGZhbHNlLHRydWUpO19uZChCRChxdWQoWktkKGEuZGIpLDApLDE4KSxhLkgsbnVsbCwnZUJvdW5kcycsMCwtMSx1NSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1puZChhLmMsYkosJ0VCaWdEZWNpbWFsJyx0cnVlKTtabmQoYS5kLGNKLCdFQmlnSW50ZWdlcicsdHJ1ZSk7Wm5kKGEuZSxzYmIsJ0VCb29sZWFuJyx0cnVlKTtabmQoYS5mLHdJLCdFQm9vbGVhbk9iamVjdCcsdHJ1ZSk7Wm5kKGEuaSxTRCwnRUJ5dGUnLHRydWUpO1puZChhLmcsR0MoU0QsMSksJ0VCeXRlQXJyYXknLHRydWUpO1puZChhLmoseEksJ0VCeXRlT2JqZWN0Jyx0cnVlKTtabmQoYS5rLFRELCdFQ2hhcicsdHJ1ZSk7Wm5kKGEubix5SSwnRUNoYXJhY3Rlck9iamVjdCcsdHJ1ZSk7Wm5kKGEuciwkSiwnRURhdGUnLHRydWUpO1puZChhLnMsTzQsJ0VEaWFnbm9zdGljQ2hhaW4nLGZhbHNlKTtabmQoYS50LFVELCdFRG91YmxlJyx0cnVlKTtabmQoYS51LEJJLCdFRG91YmxlT2JqZWN0Jyx0cnVlKTtabmQoYS5mYixUNCwnRUVMaXN0JyxmYWxzZSk7Wm5kKGEuQSxVNCwnRUVudW1lcmF0b3InLGZhbHNlKTtabmQoYS5DLE85LCdFRmVhdHVyZU1hcCcsZmFsc2UpO1puZChhLkQsRTksJ0VGZWF0dXJlTWFwRW50cnknLGZhbHNlKTtabmQoYS5GLFZELCdFRmxvYXQnLHRydWUpO1puZChhLkcsRkksJ0VGbG9hdE9iamVjdCcsdHJ1ZSk7Wm5kKGEuSSxXRCwnRUludCcsdHJ1ZSk7Wm5kKGEuSixKSSwnRUludGVnZXJPYmplY3QnLHRydWUpO1puZChhLkwsQUksJ0VKYXZhQ2xhc3MnLHRydWUpO1puZChhLk0sU0ksJ0VKYXZhT2JqZWN0Jyx0cnVlKTtabmQoYS5OLFhELCdFTG9uZycsdHJ1ZSk7Wm5kKGEuTyxNSSwnRUxvbmdPYmplY3QnLHRydWUpO1puZChhLlAsREssJ0VNYXAnLGZhbHNlKTtabmQoYS5YLHY4LCdFUmVzb3VyY2UnLGZhbHNlKTtabmQoYS5ZLHU4LCdFUmVzb3VyY2VTZXQnLGZhbHNlKTtabmQoYS5aLHJiYiwnRVNob3J0Jyx0cnVlKTtabmQoYS4kLFVJLCdFU2hvcnRPYmplY3QnLHRydWUpO1puZChhLl8sWkksJ0VTdHJpbmcnLHRydWUpO1puZChhLmNiLFg0LCdFVHJlZUl0ZXJhdG9yJyxmYWxzZSk7Wm5kKGEuSyxWNCwnRUludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nLGZhbHNlKTtSbmQoYSxfdmUpfVxudmFyIEpoZT0nb2JqZWN0JyxLaGU9J2Jvb2xlYW4nLExoZT0nbnVtYmVyJyxNaGU9J3N0cmluZycsTmhlPSdmdW5jdGlvbicsT2hlPTIxNDc0ODM2NDcsUGhlPSdqYXZhLmxhbmcnLFFoZT17MzoxfSxSaGU9J2NvbS5nb29nbGUuY29tbW9uLmJhc2UnLFNoZT0nLCAnLFRoZT0nJXMgKCVzKSBtdXN0IG5vdCBiZSBuZWdhdGl2ZScsVWhlPXszOjEsNDoxLDU6MX0sVmhlPSduZWdhdGl2ZSBzaXplOiAnLFdoZT0nT3B0aW9uYWwub2YoJyxYaGU9J251bGwnLFloZT17MTk4OjEsNDc6MX0sWmhlPSdjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0JywkaGU9ezE5ODoxLDQ3OjEsMTI1OjF9LF9oZT17MjI0OjEsMzoxfSxhaWU9ezQ3OjF9LGJpZT0namF2YS51dGlsJyxjaWU9ezgzOjF9LGRpZT17MjA6MSwyODoxLDE0OjF9LGVpZT0xOTY1LGZpZT17MjA6MSwyODoxLDE0OjEsMjE6MX0sZ2llPXs4MzoxLDE3MToxLDE2MToxfSxoaWU9ezIwOjEsMjg6MSwxNDoxLDIxOjEsODQ6MX0saWllPXsyMDoxLDI4OjEsMTQ6MSwyNzE6MSwyMToxLDg0OjF9LGppZT17NDc6MSwxMjU6MX0sa2llPXszNDU6MSw0MjoxfSxsaWU9J0Fic3RyYWN0TWFwRW50cnknLG1pZT0nZXhwZWN0ZWRWYWx1ZXNQZXJLZXknLG5pZT17MzoxLDY6MSw0OjEsNToxfSxvaWU9MTYzODQscGllPXsxNjQ6MX0scWllPXszODoxfSxyaWU9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LHNpZT17MTk2OjF9LHRpZT17MjQ1OjEsMzoxLDM1OjF9LHVpZT0ncmFuZ2UgdW5ib3VuZGVkIG9uIHRoaXMgc2lkZScsdmllPXsyMDoxfSx3aWU9ezIwOjEsMTQ6MX0seGllPXszOjEsMjA6MSwyODoxLDE0OjF9LHlpZT17MTUyOjEsMzoxLDIwOjEsMjg6MSwxNDoxLDE1OjEsNTQ6MX0semllPXszOjEsNDoxLDU6MSwxNjU6MX0sQWllPXszOjEsODM6MX0sQmllPXsyMDoxLDE0OjEsMjE6MX0sQ2llPXszOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0sRGllPXsyMDoxLDE0OjEsMjE6MSw4NDoxfSxFaWU9NDYxODQ1OTA3LEZpZT0tODYyMDQ4OTQzLEdpZT17MzoxLDY6MSw0OjEsNToxLDE2NToxfSxIaWU9J2V4cGVjdGVkU2l6ZScsSWllPTEwNzM3NDE4MjQsSmllPSdpbml0aWFsQXJyYXlTaXplJyxLaWU9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LExpZT17MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxfSxNaWU9J2FycmF5U2l6ZScsTmllPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MX0sT2llPXs0NToxfSxQaWU9ezM2NToxfSxRaWU9MS4wRS00LFJpZT0tMjE0NzQ4MzY0OCxTaWU9J19fbm9pbml0X18nLFRpZT17MzoxLDEwMjoxLDYwOjEsNzg6MX0sVWllPSdjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsJyxWaWU9J1N0cmluZycsV2llPSdjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCcsWGllPSdhbm9ueW1vdXMnLFlpZT0nZm5TdGFjaycsWmllPSdVbmtub3duJywkaWU9ezE5NToxLDM6MSw0OjF9LF9pZT0xMDAwLGFqZT02NTUzNSxiamU9J0phbnVhcnknLGNqZT0nRmVicnVhcnknLGRqZT0nTWFyY2gnLGVqZT0nQXByaWwnLGZqZT0nTWF5JyxnamU9J0p1bmUnLGhqZT0nSnVseScsaWplPSdBdWd1c3QnLGpqZT0nU2VwdGVtYmVyJyxramU9J09jdG9iZXInLGxqZT0nTm92ZW1iZXInLG1qZT0nRGVjZW1iZXInLG5qZT0xOTAwLG9qZT17NDg6MSwzOjEsNDoxfSxwamU9J0JlZm9yZSBDaHJpc3QnLHFqZT0nQW5ubyBEb21pbmknLHJqZT0nU3VuZGF5JyxzamU9J01vbmRheScsdGplPSdUdWVzZGF5Jyx1amU9J1dlZG5lc2RheScsdmplPSdUaHVyc2RheScsd2plPSdGcmlkYXknLHhqZT0nU2F0dXJkYXknLHlqZT0nY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQnLHpqZT0nRGF0ZVRpbWVGb3JtYXQnLEFqZT0nY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQnLEJqZT0nRGVmYXVsdERhdGVUaW1lRm9ybWF0SW5mbycsQ2plPXszOjEsNDoxLDM1OjEsMTk5OjF9LERqZT0nY29tLmdvb2dsZS5nd3QuanNvbi5jbGllbnQnLEVqZT00MTk0MzAzLEZqZT0xMDQ4NTc1LEdqZT01MjQyODgsSGplPTQxOTQzMDQsSWplPTE3NTkyMTg2MDQ0NDE2LEpqZT0xMDAwMDAwMDAwLEtqZT0tMTc1OTIxODYwNDQ0MTYsTGplPSdqYXZhLmlvJyxNamU9ezM6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sTmplPXszOjEsMjg5OjEsNzg6MX0sT2plPSdGb3IgaW5wdXQgc3RyaW5nOiBcIicsUGplPUluZmluaXR5LFFqZT0tSW5maW5pdHksUmplPTQwOTYsU2plPXszOjEsNDoxLDM2NDoxfSxUamU9NjU1MzYsVWplPTU1Mjk2LFZqZT17MTA0OjEsMzoxLDQ6MX0sV2plPTEwMDAwMCxYamU9MC4zMDEwMjk5OTU2NjM5ODEyLFlqZT00Mjk0OTY3Mjk1LFpqZT00Mjk0OTY3Mjk2LCRqZT0nMC4wJyxfamU9ezQyOjF9LGFrZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxMjoxLDE0OjEsMTU6MSw1NDoxfSxia2U9ezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MX0sY2tlPXsyMDoxLDE0OjEsMTU6MX0sZGtlPXszOjEsNjI6MX0sZWtlPXsxODI6MX0sZmtlPXszOjEsNDoxLDgzOjF9LGdrZT17MzoxLDQ6MSwyMDoxLDI4OjEsMTQ6MSw1MzoxLDIxOjF9LGhrZT0nZGVsZXRlJyxpa2U9MS40OTAxMTYxMTkzODQ3NjU2RS04LGprZT0xLjExMDIyMzAyNDYyNTE1NjVFLTE2LGtrZT0xNTUyNTQ4NSxsa2U9NS45NjA0NjQ0Nzc1MzkwNjI1RS04LG1rZT0xNjc3NzIxNixua2U9MTY3NzcyMTUsb2tlPScsIGxlbmd0aDogJyxwa2U9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LHFrZT17MzoxLDM1OjEsMjI6MSwyOTc6MX0scmtlPSdqYXZhLnV0aWwuZnVuY3Rpb24nLHNrZT0namF2YS51dGlsLmxvZ2dpbmcnLHRrZT17MzoxLDQ6MSw1OjEsODQyOjF9LHVrZT0ndW5kZWZpbmVkJyx2a2U9J2phdmEudXRpbC5zdHJlYW0nLHdrZT17NTI1OjEsNjcwOjF9LHhrZT0nZnJvbUluZGV4OiAnLHlrZT0nID4gdG9JbmRleDogJyx6a2U9JywgdG9JbmRleDogJyxBa2U9J0luZGV4OiAnLEJrZT0nLCBTaXplOiAnLENrZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24nLERrZT17NjI6MX0sRWtlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uJyxGa2U9J1NjYW5saW5lL0V2ZW50SGFuZGxlcicsR2tlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQnLEhrZT0nQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4nLElrZT0nSVNwYWNpbmdzSGFuZGxlci8xJyxKa2U9J1RoZSAnLEtrZT0nIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuJyxMa2U9J1RoZSBkaXJlY3Rpb24gJyxNa2U9JyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuJyxOa2U9J09uZURpbWVuc2lvbmFsQ29tcGFjdG9yJyxPa2U9J09uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUnLFBrZT0nUXVhZHJ1cGxldCcsUWtlPSdTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yJyxSa2U9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXInLFNrZT0nU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlJyxUa2U9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wJyxVa2U9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZScsVmtlPXsxNjk6MSw0NToxfSxXa2U9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24ub3B0aW9ucycsWGtlPSdvcmcuZWNsaXBzZS5lbGsuY29yZS5kYXRhJyxZa2U9J29yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8udHJhdmVyc2FsU3RyYXRlZ3knLFprZT0nb3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5sb3dMZXZlbFNvcnQnLCRrZT0nb3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5oaWdoTGV2ZWxTb3J0Jyxfa2U9J29yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uZmlsbCcsYWxlPXsxMzA6MX0sYmxlPSdwb2x5b21pbm8nLGNsZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubmV0d29ya3NpbXBsZXgnLGRsZT17MTc3OjEsMzoxLDQ6MX0sZWxlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZycsZmxlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5jZWxsc3lzdGVtJyxnbGU9J0NFTlRFUicsaGxlPXsyMTI6MSwzMjY6MX0saWxlPXszOjEsNDoxLDU6MSw1OTU6MX0samxlPSdMRUZUJyxrbGU9J1JJR0hUJyxsbGU9J1ZlcnRpY2FsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCcsbWxlPSdCT1RUT00nLG5sZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcuaW50ZXJuYWwnLG9sZT0nVU5ERUZJTkVEJyxwbGU9MC4wMSxxbGU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsLmFsZ29yaXRobScscmxlPSdMYWJlbFBsYWNlci9sYW1iZGEkMCRUeXBlJyxzbGU9J0xhYmVsUGxhY2VyL2xhbWJkYSQxJFR5cGUnLHRsZT0ncG9ydFJhdGlvT3JQb3NpdGlvbicsdWxlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5vdmVybGFwcycsdmxlPSdET1dOJyx3bGU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnBvbHlvbWlubycseGxlPSdOT1JUSCcseWxlPSdFQVNUJyx6bGU9J1NPVVRIJyxBbGU9J1dFU1QnLEJsZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vLnN0cnVjdHVyZXMnLENsZT0nRGlyZWN0aW9uJyxEbGU9J0dyaWQgaXMgb25seSBvZiBzaXplICcsRWxlPScuIFJlcXVlc3RlZCBwb2ludCAoJyxGbGU9JykgaXMgb3V0IG9mIGJvdW5kcy4nLEdsZT0nIEdpdmVuIGNlbnRlciBiYXNlZCBjb29yZGluYXRlcyB3ZXJlICgnLEhsZT0nb3JnLmVjbGlwc2UuZWxrLmdyYXBoLnByb3BlcnRpZXMnLElsZT0nSVByb3BlcnR5SG9sZGVyJyxKbGU9ezM6MSw5NDoxLDEzNDoxfSxLbGU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnNwb3JlJyxMbGU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzJyxNbGU9ezIwOToxfSxObGU9J29yZy5lY2xpcHNlLmVsay5jb3JlJyxPbGU9J0Nvbm5lY3RlZCBDb21wb25lbnRzIENvbXBhY3Rpb24nLFBsZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjbycsUWxlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLmdyYXBoJyxSbGU9J29yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28ub3B0aW9ucycsU2xlPSdDb21wYWN0aW9uU3RyYXRlZ3knLFRsZT0nb3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uc3RyYXRlZ3knLFVsZT0nb3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uY29tcG9uZW50TGF5b3V0QWxnb3JpdGhtJyxWbGU9J29yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb0dyYXBoJyxXbGU9J29yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb1BvbHlzJyxYbGU9J2NvbXBvbmVudENvbXBhY3Rpb24nLFlsZT0nb3JnLmVjbGlwc2UuZWxrLmRpc2NvJyxabGU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbXBvbmVudENvbXBvbmVudCcsJGxlPSdvcmcuZWNsaXBzZS5lbGsuZWRnZS50aGlja25lc3MnLF9sZT0nb3JnLmVjbGlwc2UuZWxrLmFzcGVjdFJhdGlvJyxhbWU9J29yZy5lY2xpcHNlLmVsay5wYWRkaW5nJyxibWU9J29yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28udHJhbnNmb3JtJyxjbWU9MS41NzA3OTYzMjY3OTQ4OTY2LGRtZT0xLjc5NzY5MzEzNDg2MjMxNTdFMzA4LGVtZT17MzoxLDQ6MSw1OjEsMTkyOjF9LGZtZT17MzoxLDY6MSw0OjEsNToxLDEwNjoxLDEyMDoxfSxnbWU9J29yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UnLGhtZT0nQ29tcG9uZW50c1Byb2Nlc3NvcicsaW1lPSdDb21wb25lbnRzUHJvY2Vzc29yLzEnLGptZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5ncmFwaCcsa21lPSdDb21wb25lbnQgTGF5b3V0JyxsbWU9J29yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UubW9kZWwnLG1tZT0nb3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsJyxubWU9J29yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zJyxvbWU9J29yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlcicscG1lPSdvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUnLHFtZT0wLjAwMSxybWU9J29yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpb24nLHNtZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zJyx0bWU9MS42MDAwMDAwMjM4NDE4NTgsdW1lPSdvcmcuZWNsaXBzZS5lbGsuZm9yY2UnLHZtZT0nb3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5Jyx3bWU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLm5vZGVOb2RlJyx4bWU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VMYWJlbCcseW1lPSdvcmcuZWNsaXBzZS5lbGsucmFuZG9tU2VlZCcsem1lPSdvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyxBbWU9J29yZy5lY2xpcHNlLmVsay5pbnRlcmFjdGl2ZScsQm1lPSdvcmcuZWNsaXBzZS5lbGsucG9ydENvbnN0cmFpbnRzJyxDbWU9J29yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLmlubGluZScsRG1lPSdvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCcsRW1lPSdvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUub3B0aW9ucycsRm1lPSdvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUuY29uc3RyYWludHMnLEdtZT0nb3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50JyxIbWU9J29yZy5lY2xpcHNlLmVsay5wb3J0TGFiZWxzLnBsYWNlbWVudCcsSW1lPSdvcmlnaW4nLEptZT0ncmFuZG9tJyxLbWU9J2JvdW5kaW5nQm94LnVwTGVmdCcsTG1lPSdib3VuZGluZ0JveC5sb3dSaWdodCcsTW1lPSdvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmZpeGVkJyxObWU9J29yZy5lY2xpcHNlLmVsay5zdHJlc3MuZGVzaXJlZEVkZ2VMZW5ndGgnLE9tZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kaW1lbnNpb24nLFBtZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5lcHNpbG9uJyxRbWU9J29yZy5lY2xpcHNlLmVsay5zdHJlc3MuaXRlcmF0aW9uTGltaXQnLFJtZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcycsU21lPSdFTEsgU3RyZXNzJyxUbWU9J29yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtJyxVbWU9J29yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2Uuc3RyZXNzJyxWbWU9J0xheWVyZWQgbGF5b3V0JyxXbWU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZCcsWG1lPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzJyxZbWU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQnLFptZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZC5hbGdzJywkbWU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsJyxfbWU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wb25lbnRzJyxhbmU9J05PTkUnLGJuZT17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjI6MX0sY25lPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTA2OjEsMTIwOjF9LGRuZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvdW5kJyxlbmU9ezUxOjF9LGZuZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoJyxnbmU9JyAtPiAnLGhuZT0nTm90IHN1cHBvcnRlZCBieSBMR3JhcGgnLGluZT0nUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCcsam5lPXszOjEsNjoxLDQ6MSw1OjEsNDc0OjEsMTQxOjEsMTA2OjEsMTIwOjF9LGtuZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5MzoxLDIwMzoxLDEwNjoxLDEyMDoxfSxsbmU9ezM6MSw2OjEsNDoxLDU6MSwxNDE6MSwxOTQzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LG1uZT0nKFt7XCJcXCcgXFx0XFxyXFxuJyxubmU9JyldfVwiXFwnIFxcdFxcclxcbicsb25lPSdUaGUgZ2l2ZW4gc3RyaW5nIGNvbnRhaW5zIHBhcnRzIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBhcyBudW1iZXJzLicscG5lPSdvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoJyxxbmU9ezM6MSw0OjEsMTQyOjEsMjA3OjEsNDE0OjF9LHJuZT17MzoxLDQ6MSwxMTY6MSwyMDc6MSw0MTQ6MX0sc25lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZCcsdG5lPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuZ3JhcGgudHJhbnNmb3JtJyx1bmU9J0Vsa0dyYXBoSW1wb3J0ZXInLHZuZT0nRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMCRUeXBlJyx3bmU9J0Vsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDEkVHlwZScseG5lPSdFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQyJFR5cGUnLHluZT0nRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNCRUeXBlJyx6bmU9J05vZGUgbWFyZ2luIGNhbGN1bGF0aW9uJyxBbmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUnLEJuZT0nT05FX1NJREVEX0dSRUVEWV9TV0lUQ0gnLENuZT0nVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0gnLERuZT0nTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAnLEVuZT0nSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3knLEZuZT1cIk5vZGUgJ1wiLEduZT0nRklSU1RfU0VQQVJBVEUnLEhuZT0nTEFTVF9TRVBBUkFURScsSW5lPSdPZGQgcG9ydCBzaWRlIHByb2Nlc3NpbmcnLEpuZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uJyxLbmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUuZ3JlZWR5c3dpdGNoJyxMbmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wM29yZGVyLmNvdW50aW5nJyxNbmU9ezIyNToxfSxObmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMnLE9uZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcy5vcmRlcmluZycsUG5lPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmcnLFFuZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5wcmVzZXJ2ZW9yZGVyJyxSbmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUud3JhcHBpbmcnLFNuZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLm9wdGlvbnMnLFRuZT0nSU5URVJBQ1RJVkUnLFVuZT0nREVQVEhfRklSU1QnLFZuZT0nRURHRV9MRU5HVEgnLFduZT0nU0VMRl9MT09QUycsWG5lPSdmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXInLFluZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeScsWm5lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzJywkbmU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmludGVyYWN0aXZlUmVmZXJlbmNlUG9pbnQnLF9uZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VFZGdlcycsYW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUhpZXJhcmNoeUVkZ2VzJyxib2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmFsbG93Tm9uRmxvd1BvcnRzVG9Td2l0Y2hTaWRlcycsY29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wb3J0U29ydGluZ1N0cmF0ZWd5Jyxkb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLnRob3JvdWdobmVzcycsZW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC51bm5lY2Vzc2FyeUJlbmRwb2ludHMnLGZvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzJyxnb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmN5Y2xlQnJlYWtpbmcuc3RyYXRlZ3knLGhvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuc3RyYXRlZ3knLGlvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDb25zdHJhaW50Jyxqb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ2hvaWNlQ29uc3RyYWludCcsa29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllcklkJyxsb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyQm91bmRPbldpZHRoJyxtb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyTGF5ZXJFc3RpbWF0aW9uU2NhbGluZ0ZhY3Rvcicsbm9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLnN0cmF0ZWd5Jyxvb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24ubWF4SXRlcmF0aW9ucycscG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5jb2ZmbWFuR3JhaGFtLmxheWVyQm91bmQnLHFvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3knLHJvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlcicsc29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzJyx0b2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZScsdW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQnLHZvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCcsd29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCcseG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZScseW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwudHlwZScsem9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LnN0cmF0ZWd5JyxBb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzJyxCb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmcnLENvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCcsRG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmcnLEVvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHknLEZvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCcsR29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbicsSG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nJyxJb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnNwbGluZXMubW9kZScsSm9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zcGxpbmVzLnNsb3BweS5sYXllclNwYWNpbmdGYWN0b3InLEtvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcucG9seWxpbmUuc2xvcGVkRWRnZVpvbmVXaWR0aCcsTG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5zcGFjaW5nLmJhc2VWYWx1ZScsTW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5zcGFjaW5nLmVkZ2VOb2RlQmV0d2VlbkxheWVycycsTm9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5zcGFjaW5nLmVkZ2VFZGdlQmV0d2VlbkxheWVycycsT29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5zcGFjaW5nLm5vZGVOb2RlQmV0d2VlbkxheWVycycsUG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5kaXJlY3Rpb24nLFFvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuc2hvcnRuZXNzJyxSb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnN0cmFpZ2h0bmVzcycsU29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb21wYWN0aW9uLmNvbm5lY3RlZENvbXBvbmVudHMnLFRvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5zdHJhdGVneScsVW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uLmNvbnN0cmFpbnRzJyxWb2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQnLFdvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCcsWG9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCcsWW9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5zdHJhdGVneScsWm9lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5hZGRpdGlvbmFsRWRnZVNwYWNpbmcnLCRvZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvcicsX29lPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5jdXR0aW5nLnN0cmF0ZWd5JyxhcGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuY3V0cycsYnBlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5jdXR0aW5nLm1zZC5mcmVlZG9tJyxjcGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LnN0cmF0ZWd5JyxkcGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMnLGVwZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcubXVsdGlFZGdlLmltcHJvdmVDdXRzJyxmcGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5kaXN0YW5jZVBlbmFsdHknLGdwZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcubXVsdGlFZGdlLmltcHJvdmVXcmFwcGVkRWRnZXMnLGhwZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZUxhYmVscy5zaWRlU2VsZWN0aW9uJyxpcGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuY2VudGVyTGFiZWxQbGFjZW1lbnRTdHJhdGVneScsanBlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3knLGtwZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlcicsbHBlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cycsbXBlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneScsbnBlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZScsb3BlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZScscHBlPSdsYXllcmluZycscXBlPSdsYXllcmluZy5taW5XaWR0aCcscnBlPSdsYXllcmluZy5ub2RlUHJvbW90aW9uJyxzcGU9J2Nyb3NzaW5nTWluaW1pemF0aW9uJyx0cGU9J29yZy5lY2xpcHNlLmVsay5oaWVyYXJjaHlIYW5kbGluZycsdXBlPSdjcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gnLHZwZT0nbm9kZVBsYWNlbWVudCcsd3BlPSdub2RlUGxhY2VtZW50LmJrJyx4cGU9J2VkZ2VSb3V0aW5nJyx5cGU9J29yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZycsenBlPSdzcGFjaW5nJyxBcGU9J3ByaW9yaXR5JyxCcGU9J2NvbXBhY3Rpb24nLENwZT0nY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbicsRHBlPSdTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuJyxFcGU9J2hpZ2hEZWdyZWVOb2RlcycsRnBlPSd3cmFwcGluZycsR3BlPSd3cmFwcGluZy5jdXR0aW5nJyxIcGU9J3dyYXBwaW5nLnZhbGlkaWZ5JyxJcGU9J3dyYXBwaW5nLm11bHRpRWRnZScsSnBlPSdlZGdlTGFiZWxzJyxLcGU9J2NvbnNpZGVyTW9kZWxPcmRlcicsTHBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21tZW50Q29tbWVudCcsTXBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21tZW50Tm9kZScsTnBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5lZGdlRWRnZScsT3BlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5lZGdlTm9kZScsUHBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbExhYmVsJyxRcGU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydEhvcml6b250YWwnLFJwZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxQb3J0VmVydGljYWwnLFNwZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxOb2RlJyxUcGU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLm5vZGVTZWxmTG9vcCcsVXBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5wb3J0UG9ydCcsVnBlPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5pbmRpdmlkdWFsJyxXcGU9J29yZy5lY2xpcHNlLmVsay5wb3J0LmJvcmRlck9mZnNldCcsWHBlPSdvcmcuZWNsaXBzZS5lbGsubm9MYXlvdXQnLFlwZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnQuc2lkZScsWnBlPSdvcmcuZWNsaXBzZS5lbGsuZGVidWdNb2RlJywkcGU9J29yZy5lY2xpcHNlLmVsay5hbGlnbm1lbnQnLF9wZT0nb3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy5hY3RpdmF0ZScsYXFlPSdvcmcuZWNsaXBzZS5lbGsuaW5zaWRlU2VsZkxvb3BzLnlvJyxicWU9J29yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZScsY3FlPSdvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uJyxkcWU9J29yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmcnLGVxZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUnLGZxZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwJyxncWU9J29yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQnLGhxZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgnLGlxZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgnLGpxZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCcsa3FlPSdvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0JyxscWU9J29yZy5lY2xpcHNlLmVsay5jb250ZW50QWxpZ25tZW50JyxtcWU9J29yZy5lY2xpcHNlLmVsay5qdW5jdGlvblBvaW50cycsbnFlPSdvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5wbGFjZW1lbnQnLG9xZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnQuaW5kZXgnLHBxZT0nb3JnLmVjbGlwc2UuZWxrLmNvbW1lbnRCb3gnLHFxZT0nb3JnLmVjbGlwc2UuZWxrLmh5cGVybm9kZScscnFlPSdvcmcuZWNsaXBzZS5lbGsucG9ydC5hbmNob3InLHNxZT0nb3JnLmVjbGlwc2UuZWxrLnBhcnRpdGlvbmluZy5hY3RpdmF0ZScsdHFlPSdvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLnBhcnRpdGlvbicsdXFlPSdvcmcuZWNsaXBzZS5lbGsucG9zaXRpb24nLHZxZT0nb3JnLmVjbGlwc2UuZWxrLm1hcmdpbnMnLHdxZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydHNTdXJyb3VuZGluZycseHFlPSdvcmcuZWNsaXBzZS5lbGsuaW50ZXJhY3RpdmVMYXlvdXQnLHlxZT0nb3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbCcsenFlPXszOjEsNDoxLDU6MSw1OTM6MX0sQXFlPSdORVRXT1JLX1NJTVBMRVgnLEJxZT17MTIzOjEsNTE6MX0sQ3FlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDFjeWNsZXMnLERxZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzJyxFcWU9ezQwMjoxLDIyNToxfSxGcWU9ezgzMjoxLDM6MSw0OjF9LEdxZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAzb3JkZXInLEhxZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA0bm9kZXMnLElxZT17MzoxLDQ6MSw1OjEsODQwOjF9LEpxZT0xLjBFLTUsS3FlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iaycsTHFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcycsTXFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5vcnRob2dvbmFsJyxOcWU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwuZGlyZWN0aW9uJyxPcWU9MS4wRS02LFBxZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMuc3BsaW5lcycsUXFlPTAuMDk5OTk5OTk5OTk5OTk5OTgsUnFlPTEuMEUtOCxTcWU9NC43MTIzODg5ODAzODQ2OSxUcWU9My4xNDE1OTI2NTM1ODk3OTMsVXFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZScsVnFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5ncmFwaCcsV3FlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5pbnRlcm1lZGlhdGUnLFhxZT0nU2V0IG5laWdoYm9ycyBpbiBsZXZlbCcsWXFlPSdERVNDRU5EQU5UUycsWnFlPSdvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLndlaWdodGluZycsJHFlPSdvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnNlYXJjaE9yZGVyJyxfcWU9J29yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMnLGFyZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZScsYnJlPSdvcmcuZWNsaXBzZS5lbGsudHJlZScsY3JlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbCcsZHJlPTYuMjgzMTg1MzA3MTc5NTg2LGVyZT00LjlFLTMyNCxmcmU9J29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZScsZ3JlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbicsaHJlPXszOjEsNDoxLDU6MSwxMDY6MX0saXJlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3B0aW1pemF0aW9uJyxqcmU9J05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBvcHRpb24gJyxrcmU9J29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLm9wdGlvbnMnLGxyZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcmRlcklkJyxtcmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwucmFkaXVzJyxucmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwuY29tcGFjdG9yJyxvcmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwuY29tcGFjdGlvblN0ZXBTaXplJyxwcmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwuc29ydGVyJyxxcmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwud2VkZ2VDcml0ZXJpYScscnJlPSdvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9wdGltaXphdGlvbkNyaXRlcmlhJyxzcmU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwnLHRyZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZScsdXJlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nJyx2cmU9NS40OTc3ODcxNDM3ODIxMzgsd3JlPTMuOTI2OTkwODE2OTg3MjQxNCx4cmU9Mi4zNTYxOTQ0OTAxOTIzNDUseXJlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nJyx6cmU9J29yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuZmlyc3RpdGVyYXRpb24nLEFyZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5vcHRpb25zJyxCcmU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5vcHRpbWl6YXRpb25Hb2FsJyxDcmU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5sYXN0UGxhY2VTaGlmdCcsRHJlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuY3VycmVudFBvc2l0aW9uJyxFcmU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5kZXNpcmVkUG9zaXRpb24nLEZyZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9ubHlGaXJzdEl0ZXJhdGlvbicsR3JlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcucm93Q29tcGFjdGlvbicsSHJlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuZXhwYW5kVG9Bc3BlY3RSYXRpbycsSXJlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudGFyZ2V0V2lkdGgnLEpyZT0nb3JnLmVjbGlwc2UuZWxrLmV4cGFuZE5vZGVzJyxLcmU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZycsTHJlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnV0aWwnLE1yZT0nTm8gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIGZvciAnLE5yZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZScsT3JlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLm9wdGlvbnMnLFByZT0nb3JnLmVjbGlwc2UuZWxrLnNwb3JlQ29tcGFjdGlvbicsUXJlPSdvcmcuZWNsaXBzZS5lbGsudW5kZXJseWluZ0xheW91dEFsZ29yaXRobScsUnJlPSdvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnRyZWVDb25zdHJ1Y3Rpb24nLFNyZT0nb3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5zcGFubmluZ1RyZWVDb3N0RnVuY3Rpb24nLFRyZT0nb3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5wcmVmZXJyZWRSb290JyxVcmU9J29yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIucm9vdFNlbGVjdGlvbicsVnJlPSdvcmcuZWNsaXBzZS5lbGsuc3RydWN0dXJlLnN0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneScsV3JlPSdvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5jb21wYWN0aW9uU3RyYXRlZ3knLFhyZT0nb3JnLmVjbGlwc2UuZWxrLmNvbXBhY3Rpb24ub3J0aG9nb25hbCcsWXJlPSdvcmcuZWNsaXBzZS5lbGsub3ZlcmxhcFJlbW92YWwubWF4SXRlcmF0aW9ucycsWnJlPSdvcmcuZWNsaXBzZS5lbGsub3ZlcmxhcFJlbW92YWwucnVuU2NhbmxpbmUnLCRyZT0ncHJvY2Vzc2luZ09yZGVyJyxfcmU9J292ZXJsYXBSZW1vdmFsJyxhc2U9J29yZy5lY2xpcHNlLmVsay5zcG9yZU92ZXJsYXAnLGJzZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMXN0cnVjdHVyZScsY3NlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAycHJvY2Vzc2luZ29yZGVyJyxkc2U9J29yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDNleGVjdXRpb24nLGVzZT0nSW52YWxpZCBpbmRleDogJyxmc2U9J29yZy5lY2xpcHNlLmVsay5jb3JlLmFsZycsZ3NlPXszMzE6MX0saHNlPXsyODg6MX0saXNlPSdNYWtlIHN1cmUgaXRzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAnLGpzZT0nIHV0aWxpdHkgY2xhc3MuJyxrc2U9J3RydWUnLGxzZT0nZmFsc2UnLG1zZT1cIkNvdWxkbid0IGNsb25lIHByb3BlcnR5ICdcIixuc2U9MC4wNSxvc2U9J29yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMnLHBzZT0xLjI5OTk5OTk1MjMxNjI4NDIscXNlPSdvcmcuZWNsaXBzZS5lbGsuYm94Jyxyc2U9J29yZy5lY2xpcHNlLmVsay5ib3gucGFja2luZ01vZGUnLHNzZT0nb3JnLmVjbGlwc2UuZWxrLmFsZ29yaXRobScsdHNlPSdvcmcuZWNsaXBzZS5lbGsucmVzb2x2ZWRBbGdvcml0aG0nLHVzZT0nb3JnLmVjbGlwc2UuZWxrLmJlbmRQb2ludHMnLHZzZT0nb3JnLmVjbGlwc2UuZWxrLmxhYmVsTWFuYWdlcicsd3NlPSdvcmcuZWNsaXBzZS5lbGsuc2NhbGVGYWN0b3InLHhzZT0nb3JnLmVjbGlwc2UuZWxrLmFuaW1hdGUnLHlzZT0nb3JnLmVjbGlwc2UuZWxrLmFuaW1UaW1lRmFjdG9yJyx6c2U9J29yZy5lY2xpcHNlLmVsay5sYXlvdXRBbmNlc3RvcnMnLEFzZT0nb3JnLmVjbGlwc2UuZWxrLm1heEFuaW1UaW1lJyxCc2U9J29yZy5lY2xpcHNlLmVsay5taW5BbmltVGltZScsQ3NlPSdvcmcuZWNsaXBzZS5lbGsucHJvZ3Jlc3NCYXInLERzZT0nb3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlR3JhcGgnLEVzZT0nb3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlT3B0aW9ucycsRnNlPSdvcmcuZWNsaXBzZS5lbGsuem9vbVRvRml0JyxHc2U9J29yZy5lY2xpcHNlLmVsay5mb250Lm5hbWUnLEhzZT0nb3JnLmVjbGlwc2UuZWxrLmZvbnQuc2l6ZScsSXNlPSdvcmcuZWNsaXBzZS5lbGsuZWRnZS50eXBlJyxKc2U9J3BhcnRpdGlvbmluZycsS3NlPSdub2RlTGFiZWxzJyxMc2U9J3BvcnRBbGlnbm1lbnQnLE1zZT0nbm9kZVNpemUnLE5zZT0ncG9ydCcsT3NlPSdwb3J0TGFiZWxzJyxQc2U9J2luc2lkZVNlbGZMb29wcycsUXNlPSdvcmcuZWNsaXBzZS5lbGsuZml4ZWQnLFJzZT0nb3JnLmVjbGlwc2UuZWxrLnJhbmRvbScsU3NlPSdwb3J0IG11c3QgaGF2ZSBhIHBhcmVudCBub2RlIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBzaWRlJyxUc2U9J1RoZSBlZGdlIG5lZWRzIHRvIGhhdmUgZXhhY3RseSBvbmUgZWRnZSBzZWN0aW9uLiBGb3VuZDogJyxVc2U9J29yZy5lY2xpcHNlLmVsay5jb3JlLnV0aWwuYWRhcHRlcnMnLFZzZT0nb3JnLmVjbGlwc2UuZW1mLmVjb3JlJyxXc2U9J29yZy5lY2xpcHNlLmVsay5ncmFwaCcsWHNlPSdFTWFwUHJvcGVydHlIb2xkZXInLFlzZT0nRWxrQmVuZFBvaW50Jyxac2U9J0Vsa0dyYXBoRWxlbWVudCcsJHNlPSdFbGtDb25uZWN0YWJsZVNoYXBlJyxfc2U9J0Vsa0VkZ2UnLGF0ZT0nRWxrRWRnZVNlY3Rpb24nLGJ0ZT0nRU1vZGVsRWxlbWVudCcsY3RlPSdFTmFtZWRFbGVtZW50JyxkdGU9J0Vsa0xhYmVsJyxldGU9J0Vsa05vZGUnLGZ0ZT0nRWxrUG9ydCcsZ3RlPXs5MjoxLDkwOjF9LGh0ZT0nb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCcsaXRlPVwiVGhlIGZlYXR1cmUgJ1wiLGp0ZT1cIicgaXMgbm90IGEgdmFsaWQgY2hhbmdlYWJsZSBmZWF0dXJlXCIsa3RlPSdFeHBlY3RpbmcgbnVsbCcsbHRlPVwiJyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlXCIsbXRlPSdUaGUgZmVhdHVyZSBJRCcsbnRlPScgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBJRCcsb3RlPTMyNzY4LHB0ZT17MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxfSxxdGU9J29yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsJyxydGU9J29yZy5lY2xpcHNlLmVsay5ncmFwaC5pbXBsJyxzdGU9J1JlY3Vyc2l2ZSBjb250YWlubWVudCBub3QgYWxsb3dlZCBmb3IgJyx0dGU9XCJUaGUgZGF0YXR5cGUgJ1wiLHV0ZT1cIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllclwiLHZ0ZT1cIlRoZSB2YWx1ZSAnXCIsd3RlPXsxOTA6MSwzOjEsNDoxfSx4dGU9XCJUaGUgY2xhc3MgJ1wiLHl0ZT0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbGsvRWxrR3JhcGgnLHp0ZT0xMDI0LEF0ZT0ncHJvcGVydHknLEJ0ZT0ndmFsdWUnLEN0ZT0nc291cmNlJyxEdGU9J3Byb3BlcnRpZXMnLEV0ZT0naWRlbnRpZmllcicsRnRlPSdoZWlnaHQnLEd0ZT0nd2lkdGgnLEh0ZT0ncGFyZW50JyxJdGU9J3RleHQnLEp0ZT0nY2hpbGRyZW4nLEt0ZT0naGllcmFyY2hpY2FsJyxMdGU9J3NvdXJjZXMnLE10ZT0ndGFyZ2V0cycsTnRlPSdzZWN0aW9ucycsT3RlPSdiZW5kUG9pbnRzJyxQdGU9J291dGdvaW5nU2hhcGUnLFF0ZT0naW5jb21pbmdTaGFwZScsUnRlPSdvdXRnb2luZ1NlY3Rpb25zJyxTdGU9J2luY29taW5nU2VjdGlvbnMnLFR0ZT0nb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsJyxVdGU9J1NldmVyZSBpbXBsZW1lbnRhdGlvbiBlcnJvciBpbiB0aGUgSnNvbiB0byBFbGtHcmFwaCBpbXBvcnRlci4nLFZ0ZT0naWQnLFd0ZT0nb3JnLmVjbGlwc2UuZWxrLmdyYXBoLmpzb24nLFh0ZT0nVW5oYW5kbGVkIHBhcmFtZXRlciB0eXBlczogJyxZdGU9J3N0YXJ0UG9pbnQnLFp0ZT1cIkFuIGVkZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzb3VyY2UgYW5kIG9uZSB0YXJnZXQgKGVkZ2UgaWQ6ICdcIiwkdGU9XCInKS5cIixfdGU9J1JlZmVyZW5jZWQgZWRnZSBzZWN0aW9uIGRvZXMgbm90IGV4aXN0OiAnLGF1ZT1cIiAoZWRnZSBpZDogJ1wiLGJ1ZT0ndGFyZ2V0JyxjdWU9J3NvdXJjZVBvaW50JyxkdWU9J3RhcmdldFBvaW50JyxldWU9J2dyb3VwJyxmdWU9J25hbWUnLGd1ZT0nY29ubmVjdGFibGVTaGFwZSBjYW5ub3QgYmUgbnVsbCcsaHVlPSdlZGdlIGNhbm5vdCBiZSBudWxsJyxpdWU9XCJQYXNzZWQgZWRnZSBpcyBub3QgJ3NpbXBsZScuXCIsanVlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGgudXRpbCcsa3VlPVwiVGhlICdubyBkdXBsaWNhdGVzJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkXCIsbHVlPSd0YXJnZXRJbmRleD0nLG11ZT0nLCBzaXplPScsbnVlPSdzb3VyY2VJbmRleD0nLG91ZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MX0scHVlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNDc6MSwxNToxLDU0OjEsNjc6MSw2MzoxLDU4OjEsNTg4OjF9LHF1ZT0nbG9nZ2luZycscnVlPSdtZWFzdXJlRXhlY3V0aW9uVGltZScsc3VlPSdwYXJzZXIucGFyc2UuMScsdHVlPSdwYXJzZXIucGFyc2UuMicsdXVlPSdwYXJzZXIubmV4dC4xJyx2dWU9J3BhcnNlci5uZXh0LjInLHd1ZT0ncGFyc2VyLm5leHQuMycseHVlPSdwYXJzZXIubmV4dC40Jyx5dWU9J3BhcnNlci5mYWN0b3IuMScsenVlPSdwYXJzZXIuZmFjdG9yLjInLEF1ZT0ncGFyc2VyLmZhY3Rvci4zJyxCdWU9J3BhcnNlci5mYWN0b3IuNCcsQ3VlPSdwYXJzZXIuZmFjdG9yLjUnLER1ZT0ncGFyc2VyLmZhY3Rvci42JyxFdWU9J3BhcnNlci5hdG9tLjEnLEZ1ZT0ncGFyc2VyLmF0b20uMicsR3VlPSdwYXJzZXIuYXRvbS4zJyxIdWU9J3BhcnNlci5hdG9tLjQnLEl1ZT0ncGFyc2VyLmF0b20uNScsSnVlPSdwYXJzZXIuY2MuMScsS3VlPSdwYXJzZXIuY2MuMicsTHVlPSdwYXJzZXIuY2MuMycsTXVlPSdwYXJzZXIuY2MuNScsTnVlPSdwYXJzZXIuY2MuNicsT3VlPSdwYXJzZXIuY2MuNycsUHVlPSdwYXJzZXIuY2MuOCcsUXVlPSdwYXJzZXIub3BlLjEnLFJ1ZT0ncGFyc2VyLm9wZS4yJyxTdWU9J3BhcnNlci5vcGUuMycsVHVlPSdwYXJzZXIuZGVzY2FwZS4xJyxVdWU9J3BhcnNlci5kZXNjYXBlLjInLFZ1ZT0ncGFyc2VyLmRlc2NhcGUuMycsV3VlPSdwYXJzZXIuZGVzY2FwZS40JyxYdWU9J3BhcnNlci5kZXNjYXBlLjUnLFl1ZT0ncGFyc2VyLnByb2Nlc3MuMScsWnVlPSdwYXJzZXIucXVhbnRpZmllci4xJywkdWU9J3BhcnNlci5xdWFudGlmaWVyLjInLF91ZT0ncGFyc2VyLnF1YW50aWZpZXIuMycsYXZlPSdwYXJzZXIucXVhbnRpZmllci40JyxidmU9J3BhcnNlci5xdWFudGlmaWVyLjUnLGN2ZT0nb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnknLGR2ZT17NDE1OjEsNjcyOjF9LGV2ZT17MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNjc6MSw1ODoxfSxmdmU9ezM2NjoxLDE0MzoxfSxndmU9J2luZGV4PScsaHZlPXszOjEsNDoxLDU6MSwxMjY6MX0saXZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNTg6MX0sanZlPXszOjEsNjoxLDQ6MSw1OjEsMTkyOjF9LGt2ZT17MzoxLDQ6MSw1OjEsMTY1OjEsMzY3OjF9LGx2ZT0nOy8/OkAmPSskLCcsbXZlPSdpbnZhbGlkIGF1dGhvcml0eTogJyxudmU9J0VBbm5vdGF0aW9uJyxvdmU9J0VUeXBlZEVsZW1lbnQnLHB2ZT0nRVN0cnVjdHVyYWxGZWF0dXJlJyxxdmU9J0VBdHRyaWJ1dGUnLHJ2ZT0nRUNsYXNzaWZpZXInLHN2ZT0nRUVudW1MaXRlcmFsJyx0dmU9J0VHZW5lcmljVHlwZScsdXZlPSdFT3BlcmF0aW9uJyx2dmU9J0VQYXJhbWV0ZXInLHd2ZT0nRVJlZmVyZW5jZScseHZlPSdFVHlwZVBhcmFtZXRlcicseXZlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbCcsenZlPXs3NjoxfSxBdmU9ezM6MSwyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxLDc2OjEsNjk6MSw5NToxfSxCdmU9J29yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkZlYXR1cmVNYXAkRW50cnknLEN2ZT04MTkyLER2ZT0yMDQ4LEV2ZT0nYnl0ZScsRnZlPSdjaGFyJyxHdmU9J2RvdWJsZScsSHZlPSdmbG9hdCcsSXZlPSdpbnQnLEp2ZT0nbG9uZycsS3ZlPSdzaG9ydCcsTHZlPSdqYXZhLmxhbmcuT2JqZWN0JyxNdmU9ezM6MSw0OjEsNToxLDI0NzoxfSxOdmU9ezM6MSw0OjEsNToxLDY3MzoxfSxPdmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjEsNjc6MSw2MzoxLDU4OjEsNjk6MX0sUHZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxRdmU9J21peGVkJyxSdmU9J2h0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YScsU3ZlPSdraW5kJyxUdmU9ezM6MSw0OjEsNToxLDY3NDoxfSxVdmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sVnZlPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTg6MSw2OToxfSxXdmU9ezQ3OjEsMTI1OjEsMjc5OjF9LFh2ZT17NzI6MSwzMzI6MX0sWXZlPVwiVGhlIHZhbHVlIG9mIHR5cGUgJ1wiLFp2ZT1cIicgbXVzdCBiZSBvZiB0eXBlICdcIiwkdmU9MTMxNixfdmU9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUnLGF3ZT0tMzI3NjgsYndlPSdjb25zdHJhaW50cycsY3dlPSdiYXNlVHlwZScsZHdlPSdnZXRFU3RydWN0dXJhbEZlYXR1cmUnLGV3ZT0nZ2V0RmVhdHVyZUlEJyxmd2U9J2ZlYXR1cmUnLGd3ZT0nZ2V0T3BlcmF0aW9uSUQnLGh3ZT0nb3BlcmF0aW9uJyxpd2U9J2RlZmF1bHRWYWx1ZScsandlPSdlVHlwZVBhcmFtZXRlcnMnLGt3ZT0naXNJbnN0YW5jZScsbHdlPSdnZXRFRW51bUxpdGVyYWwnLG13ZT0nZUNvbnRhaW5pbmdDbGFzcycsbndlPXs1NToxfSxvd2U9ezM6MSw0OjEsNToxLDExOToxfSxwd2U9J29yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZScscXdlPXs5MjoxLDkwOjEsNTkxOjEsMTkzNToxfSxyd2U9J29yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsJyxzd2U9J3Vuc3BlY2lmaWVkJyx0d2U9J3NpbXBsZScsdXdlPSdhdHRyaWJ1dGUnLHZ3ZT0nYXR0cmlidXRlV2lsZGNhcmQnLHd3ZT0nZWxlbWVudCcseHdlPSdlbGVtZW50V2lsZGNhcmQnLHl3ZT0nY29sbGFwc2UnLHp3ZT0naXRlbVR5cGUnLEF3ZT0nbmFtZXNwYWNlJyxCd2U9JyMjdGFyZ2V0TmFtZXNwYWNlJyxDd2U9J3doaXRlU3BhY2UnLER3ZT0nd2lsZGNhcmRzJyxFd2U9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZScsRndlPScjI2FueScsR3dlPSd1bmluaXRpYWxpemVkJyxId2U9J1RoZSBtdWx0aXBsaWNpdHkgY29uc3RyYWludCBpcyB2aW9sYXRlZCcsSXdlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUnLEp3ZT0nUHJvY2Vzc2luZ0luc3RydWN0aW9uJyxLd2U9J1NpbXBsZUFueVR5cGUnLEx3ZT0nWE1MVHlwZURvY3VtZW50Um9vdCcsTXdlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbCcsTndlPSdJTkYnLE93ZT0ncHJvY2Vzc2luZycsUHdlPSdFTlRJVElFU18uX2Jhc2UnLFF3ZT0nbWluTGVuZ3RoJyxSd2U9J0VOVElUWScsU3dlPSdOQ05hbWUnLFR3ZT0nSURSRUZTXy5fYmFzZScsVXdlPSdpbnRlZ2VyJyxWd2U9J3Rva2VuJyxXd2U9J3BhdHRlcm4nLFh3ZT0nW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqJyxZd2U9J1xcXFxpXFxcXGMqJyxad2U9J1tcXFxcaS1bOl1dW1xcXFxjLVs6XV0qJywkd2U9J25vblBvc2l0aXZlSW50ZWdlcicsX3dlPSdtYXhJbmNsdXNpdmUnLGF4ZT0nTk1UT0tFTicsYnhlPSdOTVRPS0VOU18uX2Jhc2UnLGN4ZT0nbm9uTmVnYXRpdmVJbnRlZ2VyJyxkeGU9J21pbkluY2x1c2l2ZScsZXhlPSdub3JtYWxpemVkU3RyaW5nJyxmeGU9J3Vuc2lnbmVkQnl0ZScsZ3hlPSd1bnNpZ25lZEludCcsaHhlPScxODQ0Njc0NDA3MzcwOTU1MTYxNScsaXhlPSd1bnNpZ25lZFNob3J0JyxqeGU9J3Byb2Nlc3NpbmdJbnN0cnVjdGlvbicsa3hlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW50ZXJuYWwnLGx4ZT0xMTE0MTExLG14ZT0nSW50ZXJuYWwgRXJyb3I6IHNob3J0aGFuZHM6IFxcXFx1JyxueGU9J3htbDppc0RpZ2l0JyxveGU9J3htbDppc1dvcmQnLHB4ZT0neG1sOmlzU3BhY2UnLHF4ZT0neG1sOmlzTmFtZUNoYXInLHJ4ZT0neG1sOmlzSW5pdGlhbE5hbWVDaGFyJyxzeGU9JzA5XFx1MDY2MFxcdTA2NjlcXHUwNkYwXFx1MDZGOVxcdTA5NjZcXHUwOTZGXFx1MDlFNlxcdTA5RUZcXHUwQTY2XFx1MEE2RlxcdTBBRTZcXHUwQUVGXFx1MEI2NlxcdTBCNkZcXHUwQkU3XFx1MEJFRlxcdTBDNjZcXHUwQzZGXFx1MENFNlxcdTBDRUZcXHUwRDY2XFx1MEQ2RlxcdTBFNTBcXHUwRTU5XFx1MEVEMFxcdTBFRDlcXHUwRjIwXFx1MEYyOScsdHhlPSdBWmF6XFx4QzBcXHhENlxceEQ4XFx4RjZcXHhGOFxcdTAxMzFcXHUwMTM0XFx1MDEzRVxcdTAxNDFcXHUwMTQ4XFx1MDE0QVxcdTAxN0VcXHUwMTgwXFx1MDFDM1xcdTAxQ0RcXHUwMUYwXFx1MDFGNFxcdTAxRjVcXHUwMUZBXFx1MDIxN1xcdTAyNTBcXHUwMkE4XFx1MDJCQlxcdTAyQzFcXHUwMzg2XFx1MDM4NlxcdTAzODhcXHUwMzhBXFx1MDM4Q1xcdTAzOENcXHUwMzhFXFx1MDNBMVxcdTAzQTNcXHUwM0NFXFx1MDNEMFxcdTAzRDZcXHUwM0RBXFx1MDNEQVxcdTAzRENcXHUwM0RDXFx1MDNERVxcdTAzREVcXHUwM0UwXFx1MDNFMFxcdTAzRTJcXHUwM0YzXFx1MDQwMVxcdTA0MENcXHUwNDBFXFx1MDQ0RlxcdTA0NTFcXHUwNDVDXFx1MDQ1RVxcdTA0ODFcXHUwNDkwXFx1MDRDNFxcdTA0QzdcXHUwNEM4XFx1MDRDQlxcdTA0Q0NcXHUwNEQwXFx1MDRFQlxcdTA0RUVcXHUwNEY1XFx1MDRGOFxcdTA0RjlcXHUwNTMxXFx1MDU1NlxcdTA1NTlcXHUwNTU5XFx1MDU2MVxcdTA1ODZcXHUwNUQwXFx1MDVFQVxcdTA1RjBcXHUwNUYyXFx1MDYyMVxcdTA2M0FcXHUwNjQxXFx1MDY0QVxcdTA2NzFcXHUwNkI3XFx1MDZCQVxcdTA2QkVcXHUwNkMwXFx1MDZDRVxcdTA2RDBcXHUwNkQzXFx1MDZENVxcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA5MDVcXHUwOTM5XFx1MDkzRFxcdTA5M0RcXHUwOTU4XFx1MDk2MVxcdTA5ODVcXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzXFx1MDlBOFxcdTA5QUFcXHUwOUIwXFx1MDlCMlxcdTA5QjJcXHUwOUI2XFx1MDlCOVxcdTA5RENcXHUwOUREXFx1MDlERlxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDVcXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzXFx1MEEyOFxcdTBBMkFcXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OVxcdTBBNUNcXHUwQTVFXFx1MEE1RVxcdTBBNzJcXHUwQTc0XFx1MEE4NVxcdTBBOEJcXHUwQThEXFx1MEE4RFxcdTBBOEZcXHUwQTkxXFx1MEE5M1xcdTBBQThcXHUwQUFBXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNVxcdTBBQjlcXHUwQUJEXFx1MEFCRFxcdTBBRTBcXHUwQUUwXFx1MEIwNVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTNcXHUwQjI4XFx1MEIyQVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzZcXHUwQjM5XFx1MEIzRFxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUZcXHUwQjYxXFx1MEI4NVxcdTBCOEFcXHUwQjhFXFx1MEI5MFxcdTBCOTJcXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4XFx1MEJBQVxcdTBCQUVcXHUwQkI1XFx1MEJCN1xcdTBCQjlcXHUwQzA1XFx1MEMwQ1xcdTBDMEVcXHUwQzEwXFx1MEMxMlxcdTBDMjhcXHUwQzJBXFx1MEMzM1xcdTBDMzVcXHUwQzM5XFx1MEM2MFxcdTBDNjFcXHUwQzg1XFx1MEM4Q1xcdTBDOEVcXHUwQzkwXFx1MEM5MlxcdTBDQThcXHUwQ0FBXFx1MENCM1xcdTBDQjVcXHUwQ0I5XFx1MENERVxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBEMDVcXHUwRDBDXFx1MEQwRVxcdTBEMTBcXHUwRDEyXFx1MEQyOFxcdTBEMkFcXHUwRDM5XFx1MEQ2MFxcdTBENjFcXHUwRTAxXFx1MEUyRVxcdTBFMzBcXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwXFx1MEU0NVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThBXFx1MEU4RFxcdTBFOERcXHUwRTk0XFx1MEU5N1xcdTBFOTlcXHUwRTlGXFx1MEVBMVxcdTBFQTNcXHUwRUE1XFx1MEVBNVxcdTBFQTdcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFEXFx1MEVBRVxcdTBFQjBcXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVCRFxcdTBFQzBcXHUwRUM0XFx1MEY0MFxcdTBGNDdcXHUwRjQ5XFx1MEY2OVxcdTEwQTBcXHUxMEM1XFx1MTBEMFxcdTEwRjZcXHUxMTAwXFx1MTEwMFxcdTExMDJcXHUxMTAzXFx1MTEwNVxcdTExMDdcXHUxMTA5XFx1MTEwOVxcdTExMEJcXHUxMTBDXFx1MTEwRVxcdTExMTJcXHUxMTNDXFx1MTEzQ1xcdTExM0VcXHUxMTNFXFx1MTE0MFxcdTExNDBcXHUxMTRDXFx1MTE0Q1xcdTExNEVcXHUxMTRFXFx1MTE1MFxcdTExNTBcXHUxMTU0XFx1MTE1NVxcdTExNTlcXHUxMTU5XFx1MTE1RlxcdTExNjFcXHUxMTYzXFx1MTE2M1xcdTExNjVcXHUxMTY1XFx1MTE2N1xcdTExNjdcXHUxMTY5XFx1MTE2OVxcdTExNkRcXHUxMTZFXFx1MTE3MlxcdTExNzNcXHUxMTc1XFx1MTE3NVxcdTExOUVcXHUxMTlFXFx1MTFBOFxcdTExQThcXHUxMUFCXFx1MTFBQlxcdTExQUVcXHUxMUFGXFx1MTFCN1xcdTExQjhcXHUxMUJBXFx1MTFCQVxcdTExQkNcXHUxMUMyXFx1MTFFQlxcdTExRUJcXHUxMUYwXFx1MTFGMFxcdTExRjlcXHUxMUY5XFx1MUUwMFxcdTFFOUJcXHUxRUEwXFx1MUVGOVxcdTFGMDBcXHUxRjE1XFx1MUYxOFxcdTFGMURcXHUxRjIwXFx1MUY0NVxcdTFGNDhcXHUxRjREXFx1MUY1MFxcdTFGNTdcXHUxRjU5XFx1MUY1OVxcdTFGNUJcXHUxRjVCXFx1MUY1RFxcdTFGNURcXHUxRjVGXFx1MUY3RFxcdTFGODBcXHUxRkI0XFx1MUZCNlxcdTFGQkNcXHUxRkJFXFx1MUZCRVxcdTFGQzJcXHUxRkM0XFx1MUZDNlxcdTFGQ0NcXHUxRkQwXFx1MUZEM1xcdTFGRDZcXHUxRkRCXFx1MUZFMFxcdTFGRUNcXHUxRkYyXFx1MUZGNFxcdTFGRjZcXHUxRkZDXFx1MjEyNlxcdTIxMjZcXHUyMTJBXFx1MjEyQlxcdTIxMkVcXHUyMTJFXFx1MjE4MFxcdTIxODJcXHUzMDA3XFx1MzAwN1xcdTMwMjFcXHUzMDI5XFx1MzA0MVxcdTMwOTRcXHUzMEExXFx1MzBGQVxcdTMxMDVcXHUzMTJDXFx1NEUwMFxcdTlGQTVcXHVBQzAwXFx1RDdBMycsdXhlPSdQcml2YXRlIFVzZScsdnhlPSdBU1NJR05FRCcsd3hlPSdcXHgwMFxceDdGXFx4ODBcXHhGRlxcdTAxMDBcXHUwMTdGXFx1MDE4MFxcdTAyNEZcXHUwMjUwXFx1MDJBRlxcdTAyQjBcXHUwMkZGXFx1MDMwMFxcdTAzNkZcXHUwMzcwXFx1MDNGRlxcdTA0MDBcXHUwNEZGXFx1MDUzMFxcdTA1OEZcXHUwNTkwXFx1MDVGRlxcdTA2MDBcXHUwNkZGXFx1MDcwMFxcdTA3NEZcXHUwNzgwXFx1MDdCRlxcdTA5MDBcXHUwOTdGXFx1MDk4MFxcdTA5RkZcXHUwQTAwXFx1MEE3RlxcdTBBODBcXHUwQUZGXFx1MEIwMFxcdTBCN0ZcXHUwQjgwXFx1MEJGRlxcdTBDMDBcXHUwQzdGXFx1MEM4MFxcdTBDRkZcXHUwRDAwXFx1MEQ3RlxcdTBEODBcXHUwREZGXFx1MEUwMFxcdTBFN0ZcXHUwRTgwXFx1MEVGRlxcdTBGMDBcXHUwRkZGXFx1MTAwMFxcdTEwOUZcXHUxMEEwXFx1MTBGRlxcdTExMDBcXHUxMUZGXFx1MTIwMFxcdTEzN0ZcXHUxM0EwXFx1MTNGRlxcdTE0MDBcXHUxNjdGXFx1MTY4MFxcdTE2OUZcXHUxNkEwXFx1MTZGRlxcdTE3ODBcXHUxN0ZGXFx1MTgwMFxcdTE4QUZcXHUxRTAwXFx1MUVGRlxcdTFGMDBcXHUxRkZGXFx1MjAwMFxcdTIwNkZcXHUyMDcwXFx1MjA5RlxcdTIwQTBcXHUyMENGXFx1MjBEMFxcdTIwRkZcXHUyMTAwXFx1MjE0RlxcdTIxNTBcXHUyMThGXFx1MjE5MFxcdTIxRkZcXHUyMjAwXFx1MjJGRlxcdTIzMDBcXHUyM0ZGXFx1MjQwMFxcdTI0M0ZcXHUyNDQwXFx1MjQ1RlxcdTI0NjBcXHUyNEZGXFx1MjUwMFxcdTI1N0ZcXHUyNTgwXFx1MjU5RlxcdTI1QTBcXHUyNUZGXFx1MjYwMFxcdTI2RkZcXHUyNzAwXFx1MjdCRlxcdTI4MDBcXHUyOEZGXFx1MkU4MFxcdTJFRkZcXHUyRjAwXFx1MkZERlxcdTJGRjBcXHUyRkZGXFx1MzAwMFxcdTMwM0ZcXHUzMDQwXFx1MzA5RlxcdTMwQTBcXHUzMEZGXFx1MzEwMFxcdTMxMkZcXHUzMTMwXFx1MzE4RlxcdTMxOTBcXHUzMTlGXFx1MzFBMFxcdTMxQkZcXHUzMjAwXFx1MzJGRlxcdTMzMDBcXHUzM0ZGXFx1MzQwMFxcdTREQjVcXHU0RTAwXFx1OUZGRlxcdUEwMDBcXHVBNDhGXFx1QTQ5MFxcdUE0Q0ZcXHVBQzAwXFx1RDdBM1xcdUUwMDBcXHVGOEZGXFx1RjkwMFxcdUZBRkZcXHVGQjAwXFx1RkI0RlxcdUZCNTBcXHVGREZGXFx1RkUyMFxcdUZFMkZcXHVGRTMwXFx1RkU0RlxcdUZFNTBcXHVGRTZGXFx1RkU3MFxcdUZFRkVcXHVGRUZGXFx1RkVGRlxcdUZGMDBcXHVGRkVGJyx4eGU9J1VOQVNTSUdORUQnLHl4ZT17MzoxLDExNzoxfSx6eGU9J29yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS51dGlsJyxBeGU9ezM6MSw0OjEsNToxLDM2ODoxfSxCeGU9J29yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYicsQ3hlPSdDYW5ub3QgYWRkIGVsZW1lbnRzIHRvIGEgUmFuZ2UnLER4ZT0nQ2Fubm90IHNldCBlbGVtZW50cyBpbiBhIFJhbmdlJyxFeGU9J0Nhbm5vdCByZW1vdmUgZWxlbWVudHMgZnJvbSBhIFJhbmdlJyxGeGU9J2xvY2FsZScsR3hlPSdkZWZhdWx0JyxIeGU9J3VzZXIuYWdlbnQnO3ZhciBfLF9iYixXYmIsdGJiPS0xOyR3bmQuZ29vZz0kd25kLmdvb2d8fHt9OyR3bmQuZ29vZy5nbG9iYWw9JHduZC5nb29nLmdsb2JhbHx8JHduZDthY2IoKTtiY2IoMSxudWxsLHt9LG5iKTtfLkZiPWZ1bmN0aW9uIG9iKGEpe3JldHVybiBtYih0aGlzLGEpfTtfLkdiPWZ1bmN0aW9uIHFiKCl7cmV0dXJuIHRoaXMuZ219O18uSGI9ZnVuY3Rpb24gc2IoKXtyZXR1cm4gRkNiKHRoaXMpfTtfLkliPWZ1bmN0aW9uIHViKCl7dmFyIGE7cmV0dXJuIGhkYihyYih0aGlzKSkrJ0AnKyhhPXRiKHRoaXMpPj4+MCxhLnRvU3RyaW5nKDE2KSl9O18uZXF1YWxzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkZiKGEpfTtfLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGIoKX07Xy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkliKCl9O3ZhciB4RCx5RCx6RDtiY2IoMjkwLDEsezI5MDoxLDIwMjY6MX0samRiKTtfLmxlPWZ1bmN0aW9uIGtkYihhKXt2YXIgYjtiPW5ldyBqZGI7Yi5pPTQ7YT4xPyhiLmM9cmRiKHRoaXMsYS0xKSk6KGIuYz10aGlzKTtyZXR1cm4gYn07Xy5tZT1mdW5jdGlvbiBxZGIoKXtmZGIodGhpcyk7cmV0dXJuIHRoaXMuYn07Xy5uZT1mdW5jdGlvbiBzZGIoKXtyZXR1cm4gaGRiKHRoaXMpfTtfLm9lPWZ1bmN0aW9uIHVkYigpe3JldHVybiBmZGIodGhpcyksdGhpcy5rfTtfLnBlPWZ1bmN0aW9uIHdkYigpe3JldHVybiAodGhpcy5pJjQpIT0wfTtfLnFlPWZ1bmN0aW9uIHhkYigpe3JldHVybiAodGhpcy5pJjEpIT0wfTtfLkliPWZ1bmN0aW9uIEFkYigpe3JldHVybiBpZGIodGhpcyl9O18uaT0wO3ZhciBlZGI9MTt2YXIgU0k9bWRiKFBoZSwnT2JqZWN0JywxKTt2YXIgQUk9bWRiKFBoZSwnQ2xhc3MnLDI5MCk7YmNiKDE5OTgsMSxRaGUpO3ZhciAkRD1tZGIoUmhlLCdPcHRpb25hbCcsMTk5OCk7YmNiKDExNzAsMTk5OCxRaGUseGIpO18uRmI9ZnVuY3Rpb24geWIoYSl7cmV0dXJuIGE9PT10aGlzfTtfLkhiPWZ1bmN0aW9uIHpiKCl7cmV0dXJuIDIwNDA3MzIzMzJ9O18uSWI9ZnVuY3Rpb24gQWIoKXtyZXR1cm4gJ09wdGlvbmFsLmFic2VudCgpJ307Xy5KYj1mdW5jdGlvbiBCYihhKXtRYihhKTtyZXR1cm4gd2IoKSx2Yn07dmFyIHZiO3ZhciBZRD1tZGIoUmhlLCdBYnNlbnQnLDExNzApO2JjYig2MjgsMSx7fSxHYik7dmFyIFpEPW1kYihSaGUsJ0pvaW5lcicsNjI4KTt2YXIgX0Q9b2RiKFJoZSwnUHJlZGljYXRlJyk7YmNiKDU4MiwxLHsxNjk6MSw1ODI6MSwzOjEsNDU6MX0sWWIpO18uTWI9ZnVuY3Rpb24gYWMoYSl7cmV0dXJuIFhiKHRoaXMsYSl9O18uTGI9ZnVuY3Rpb24gWmIoYSl7cmV0dXJuIFhiKHRoaXMsYSl9O18uRmI9ZnVuY3Rpb24gJGIoYSl7dmFyIGI7aWYoSkQoYSw1ODIpKXtiPUJEKGEsNTgyKTtyZXR1cm4gQXQodGhpcy5hLGIuYSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIF9iKCl7cmV0dXJuIHFtYih0aGlzLmEpKzMwNjY1NDI1Mn07Xy5JYj1mdW5jdGlvbiBiYygpe3JldHVybiBXYih0aGlzLmEpfTt2YXIgYUU9bWRiKFJoZSwnUHJlZGljYXRlcy9BbmRQcmVkaWNhdGUnLDU4Mik7YmNiKDQwOCwxOTk4LHs0MDg6MSwzOjF9LGNjKTtfLkZiPWZ1bmN0aW9uIGRjKGEpe3ZhciBiO2lmKEpEKGEsNDA4KSl7Yj1CRChhLDQwOCk7cmV0dXJuIHBiKHRoaXMuYSxiLmEpfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBlYygpe3JldHVybiAxNTAyNDc2NTcyK3RiKHRoaXMuYSl9O18uSWI9ZnVuY3Rpb24gZmMoKXtyZXR1cm4gV2hlK3RoaXMuYSsnKSd9O18uSmI9ZnVuY3Rpb24gZ2MoYSl7cmV0dXJuIG5ldyBjYyhSYihhLktiKHRoaXMuYSksJ3RoZSBGdW5jdGlvbiBwYXNzZWQgdG8gT3B0aW9uYWwudHJhbnNmb3JtKCkgbXVzdCBub3QgcmV0dXJuIG51bGwuJykpfTt2YXIgYkU9bWRiKFJoZSwnUHJlc2VudCcsNDA4KTtiY2IoMTk4LDEsWWhlKTtfLk5iPWZ1bmN0aW9uIGtjKGEpe1JyYih0aGlzLGEpfTtfLlFiPWZ1bmN0aW9uIGxjKCl7amMoKX07dmFyIE1IPW1kYihaaGUsJ1VubW9kaWZpYWJsZUl0ZXJhdG9yJywxOTgpO2JjYigxOTc4LDE5OCwkaGUpO18uUWI9ZnVuY3Rpb24gbmMoKXtqYygpfTtfLlJiPWZ1bmN0aW9uIG1jKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5XYj1mdW5jdGlvbiBvYyhhKXt0aHJvdyB2YmIobmV3IGJnYil9O3ZhciBOSD1tZGIoWmhlLCdVbm1vZGlmaWFibGVMaXN0SXRlcmF0b3InLDE5NzgpO2JjYigzODYsMTk3OCwkaGUpO18uT2I9ZnVuY3Rpb24gcmMoKXtyZXR1cm4gdGhpcy5jPHRoaXMuZH07Xy5TYj1mdW5jdGlvbiBzYygpe3JldHVybiB0aGlzLmM+MH07Xy5QYj1mdW5jdGlvbiB0Yygpe2lmKHRoaXMuYz49dGhpcy5kKXt0aHJvdyB2YmIobmV3IHV0Yil9cmV0dXJuIHRoaXMuWGIodGhpcy5jKyspfTtfLlRiPWZ1bmN0aW9uIHVjKCl7cmV0dXJuIHRoaXMuY307Xy5VYj1mdW5jdGlvbiB2Yygpe2lmKHRoaXMuYzw9MCl7dGhyb3cgdmJiKG5ldyB1dGIpfXJldHVybiB0aGlzLlhiKC0tdGhpcy5jKX07Xy5WYj1mdW5jdGlvbiB3Yygpe3JldHVybiB0aGlzLmMtMX07Xy5jPTA7Xy5kPTA7dmFyIGNFPW1kYihaaGUsJ0Fic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvcicsMzg2KTtiY2IoNjk5LDE5OCxZaGUpO18uT2I9ZnVuY3Rpb24gQWMoKXtyZXR1cm4geGModGhpcyl9O18uUGI9ZnVuY3Rpb24gQmMoKXtyZXR1cm4geWModGhpcyl9O18uZT0xO3ZhciBkRT1tZGIoWmhlLCdBYnN0cmFjdEl0ZXJhdG9yJyw2OTkpO2JjYigxOTg2LDEsezIyNDoxfSk7Xy5aYj1mdW5jdGlvbiBIYygpe3ZhciBhO3JldHVybiBhPXRoaXMuZiwhYT8odGhpcy5mPXRoaXMuYWMoKSk6YX07Xy5GYj1mdW5jdGlvbiBJYyhhKXtyZXR1cm4gaHcodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBKYygpe3JldHVybiB0Yih0aGlzLlpiKCkpfTtfLmRjPWZ1bmN0aW9uIEtjKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH07Xy5lYz1mdW5jdGlvbiBMYygpe3JldHVybiBFYyh0aGlzKX07Xy5JYj1mdW5jdGlvbiBNYygpe3JldHVybiBmY2IodGhpcy5aYigpKX07dmFyIElFPW1kYihaaGUsJ0Fic3RyYWN0TXVsdGltYXAnLDE5ODYpO2JjYig3MjYsMTk4NixfaGUpO18uJGI9ZnVuY3Rpb24gWGMoKXtOYyh0aGlzKX07Xy5fYj1mdW5jdGlvbiBZYyhhKXtyZXR1cm4gT2ModGhpcyxhKX07Xy5hYz1mdW5jdGlvbiBaYygpe3JldHVybiBuZXcgbmUodGhpcyx0aGlzLmMpfTtfLmljPWZ1bmN0aW9uICRjKGEpe3JldHVybiB0aGlzLmhjKCl9O18uYmM9ZnVuY3Rpb24gX2MoKXtyZXR1cm4gbmV3IHpmKHRoaXMsdGhpcy5jKX07Xy5qYz1mdW5jdGlvbiBhZCgpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9O18ua2M9ZnVuY3Rpb24gYmQoKXtyZXR1cm4gbmV3IEhkKHRoaXMpfTtfLmxjPWZ1bmN0aW9uIGNkKCl7cmV0dXJuIFlqKHRoaXMuYy52YygpLk5jKCksbmV3ICRnLDY0LHRoaXMuZCl9O18uY2M9ZnVuY3Rpb24gZGQoYSl7cmV0dXJuIFFjKHRoaXMsYSl9O18uZmM9ZnVuY3Rpb24gZ2QoYSl7cmV0dXJuIFNjKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gaGQoKXtyZXR1cm4gdGhpcy5kfTtfLm1jPWZ1bmN0aW9uIGpkKGEpe3JldHVybiBtbWIoKSxuZXcgbG5iKGEpfTtfLm5jPWZ1bmN0aW9uIGtkKCl7cmV0dXJuIG5ldyBEZCh0aGlzKX07Xy5vYz1mdW5jdGlvbiBsZCgpe3JldHVybiBZaih0aGlzLmMuQ2MoKS5OYygpLG5ldyBGZCw2NCx0aGlzLmQpfTtfLnBjPWZ1bmN0aW9uIG1kKGEsYil7cmV0dXJuIG5ldyBkZyh0aGlzLGEsYixudWxsKX07Xy5kPTA7dmFyIERFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcCcsNzI2KTtiY2IoMTYzMSw3MjYsX2hlKTtfLmhjPWZ1bmN0aW9uIHBkKCl7cmV0dXJuIG5ldyBTa2IodGhpcy5hKX07Xy5qYz1mdW5jdGlvbiBxZCgpe3JldHVybiBtbWIoKSxtbWIoKSxqbWJ9O18uY2M9ZnVuY3Rpb24gc2QoYSl7cmV0dXJuIEJEKFFjKHRoaXMsYSksMTUpfTtfLmZjPWZ1bmN0aW9uIHVkKGEpe3JldHVybiBCRChTYyh0aGlzLGEpLDE1KX07Xy5aYj1mdW5jdGlvbiBvZCgpe3JldHVybiBuZCh0aGlzKX07Xy5GYj1mdW5jdGlvbiByZChhKXtyZXR1cm4gaHcodGhpcyxhKX07Xy5xYz1mdW5jdGlvbiB0ZChhKXtyZXR1cm4gQkQoUWModGhpcyxhKSwxNSl9O18ucmM9ZnVuY3Rpb24gdmQoYSl7cmV0dXJuIEJEKFNjKHRoaXMsYSksMTUpfTtfLm1jPWZ1bmN0aW9uIHdkKGEpe3JldHVybiB2bWIoQkQoYSwxNSkpfTtfLnBjPWZ1bmN0aW9uIHhkKGEsYil7cmV0dXJuIFZjKHRoaXMsYSxCRChiLDE1KSxudWxsKX07dmFyIGVFPW1kYihaaGUsJ0Fic3RyYWN0TGlzdE11bHRpbWFwJywxNjMxKTtiY2IoNzMyLDEsYWllKTtfLk5iPWZ1bmN0aW9uIHpkKGEpe1JyYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIEFkKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX07Xy5QYj1mdW5jdGlvbiBCZCgpe3ZhciBhO2lmKCF0aGlzLmUuT2IoKSl7YT1CRCh0aGlzLmMuUGIoKSw0Mik7dGhpcy5iPWEuY2QoKTt0aGlzLmE9QkQoYS5kZCgpLDE0KTt0aGlzLmU9dGhpcy5hLktjKCl9cmV0dXJuIHRoaXMuc2ModGhpcy5iLHRoaXMuZS5QYigpKX07Xy5RYj1mdW5jdGlvbiBDZCgpe3RoaXMuZS5RYigpO3RoaXMuYS5kYygpJiZ0aGlzLmMuUWIoKTstLXRoaXMuZC5kfTt2YXIgbUU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0cicsNzMyKTtiY2IoMTA5OSw3MzIsYWllLERkKTtfLnNjPWZ1bmN0aW9uIEVkKGEsYil7cmV0dXJuIGJ9O3ZhciBmRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMScsMTA5OSk7YmNiKDExMDAsMSx7fSxGZCk7Xy5LYj1mdW5jdGlvbiBHZChhKXtyZXR1cm4gQkQoYSwxNCkuTmMoKX07dmFyIGdFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xbWV0aG9kcmVmJHNwbGl0ZXJhdG9yJFR5cGUnLDExMDApO2JjYigxMTAxLDczMixhaWUsSGQpO18uc2M9ZnVuY3Rpb24gSWQoYSxiKXtyZXR1cm4gbmV3IFdvKGEsYil9O3ZhciBoRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMicsMTEwMSk7dmFyIERLPW9kYihiaWUsJ01hcCcpO2JjYigxOTY3LDEsY2llKTtfLndjPWZ1bmN0aW9uIFRkKGEpe3N0Yih0aGlzLGEpfTtfLnljPWZ1bmN0aW9uICRkKGEsYixjKXtyZXR1cm4gdHRiKHRoaXMsYSxiLGMpfTtfLiRiPWZ1bmN0aW9uIE9kKCl7dGhpcy52YygpLiRiKCl9O18udGM9ZnVuY3Rpb24gUGQoYSl7cmV0dXJuIEpkKHRoaXMsYSl9O18uX2I9ZnVuY3Rpb24gUWQoYSl7cmV0dXJuICEhS2QodGhpcyxhLGZhbHNlKX07Xy51Yz1mdW5jdGlvbiBSZChhKXt2YXIgYixjLGQ7Zm9yKGM9dGhpcy52YygpLktjKCk7Yy5PYigpOyl7Yj1CRChjLlBiKCksNDIpO2Q9Yi5kZCgpO2lmKFBEKGEpPT09UEQoZCl8fGEhPW51bGwmJnBiKGEsZCkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O18uRmI9ZnVuY3Rpb24gU2QoYSl7dmFyIGIsYyxkO2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1pZighSkQoYSw4Mykpe3JldHVybiBmYWxzZX1kPUJEKGEsODMpO2lmKHRoaXMuZ2MoKSE9ZC5nYygpKXtyZXR1cm4gZmFsc2V9Zm9yKGM9ZC52YygpLktjKCk7Yy5PYigpOyl7Yj1CRChjLlBiKCksNDIpO2lmKCF0aGlzLnRjKGIpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfTtfLnhjPWZ1bmN0aW9uIFVkKGEpe3JldHVybiBXZChLZCh0aGlzLGEsZmFsc2UpKX07Xy5IYj1mdW5jdGlvbiBYZCgpe3JldHVybiBwbWIodGhpcy52YygpKX07Xy5kYz1mdW5jdGlvbiBZZCgpe3JldHVybiB0aGlzLmdjKCk9PTB9O18uZWM9ZnVuY3Rpb24gWmQoKXtyZXR1cm4gbmV3IFBpYih0aGlzKX07Xy56Yz1mdW5jdGlvbiBfZChhLGIpe3Rocm93IHZiYihuZXcgY2diKCdQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCcpKX07Xy5BYz1mdW5jdGlvbiBhZShhKXtMZCh0aGlzLGEpfTtfLkJjPWZ1bmN0aW9uIGJlKGEpe3JldHVybiBXZChLZCh0aGlzLGEsdHJ1ZSkpfTtfLmdjPWZ1bmN0aW9uIGNlKCl7cmV0dXJuIHRoaXMudmMoKS5nYygpfTtfLkliPWZ1bmN0aW9uIGRlKCl7cmV0dXJuIE1kKHRoaXMpfTtfLkNjPWZ1bmN0aW9uIGVlKCl7cmV0dXJuIG5ldyAkaWIodGhpcyl9O3ZhciBzSj1tZGIoYmllLCdBYnN0cmFjdE1hcCcsMTk2Nyk7YmNiKDE5ODcsMTk2NyxjaWUpO18uYmM9ZnVuY3Rpb24gZ2UoKXtyZXR1cm4gbmV3IHJmKHRoaXMpfTtfLnZjPWZ1bmN0aW9uIGhlKCl7cmV0dXJuIGZlKHRoaXMpfTtfLmVjPWZ1bmN0aW9uIGllKCl7dmFyIGE7YT10aGlzLmc7cmV0dXJuICFhPyh0aGlzLmc9dGhpcy5iYygpKTphfTtfLkNjPWZ1bmN0aW9uIGplKCl7dmFyIGE7YT10aGlzLmk7cmV0dXJuICFhPyh0aGlzLmk9bmV3IFp2KHRoaXMpKTphfTt2YXIgYkg9bWRiKFpoZSwnTWFwcy9WaWV3Q2FjaGluZ0Fic3RyYWN0TWFwJywxOTg3KTtiY2IoMzg5LDE5ODcsY2llLG5lKTtfLnhjPWZ1bmN0aW9uIHNlKGEpe3JldHVybiBrZSh0aGlzLGEpfTtfLkJjPWZ1bmN0aW9uIHZlKGEpe3JldHVybiBsZSh0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIG9lKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTppcihuZXcgbWYodGhpcykpfTtfLl9iPWZ1bmN0aW9uIHBlKGEpe3JldHVybiBHdih0aGlzLmQsYSl9O18uRWM9ZnVuY3Rpb24gcWUoKXtyZXR1cm4gbmV3IGRmKHRoaXMpfTtfLkRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWMoKX07Xy5GYj1mdW5jdGlvbiByZShhKXtyZXR1cm4gdGhpcz09PWF8fHBiKHRoaXMuZCxhKX07Xy5IYj1mdW5jdGlvbiB0ZSgpe3JldHVybiB0Yih0aGlzLmQpfTtfLmVjPWZ1bmN0aW9uIHVlKCl7cmV0dXJuIHRoaXMuZS5lYygpfTtfLmdjPWZ1bmN0aW9uIHdlKCl7cmV0dXJuIHRoaXMuZC5nYygpfTtfLkliPWZ1bmN0aW9uIHhlKCl7cmV0dXJuIGZjYih0aGlzLmQpfTt2YXIgbEU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwJywzODkpO3ZhciBLST1vZGIoUGhlLCdJdGVyYWJsZScpO2JjYigyOCwxLGRpZSk7Xy5KYz1mdW5jdGlvbiBMZShhKXtyZWIodGhpcyxhKX07Xy5MYz1mdW5jdGlvbiBOZSgpe3JldHVybiB0aGlzLk9jKCl9O18uTmM9ZnVuY3Rpb24gUGUoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDApfTtfLk9jPWZ1bmN0aW9uIFFlKCl7cmV0dXJuIG5ldyBZQWIobnVsbCx0aGlzLk5jKCkpfTtfLkZjPWZ1bmN0aW9uIEdlKGEpe3Rocm93IHZiYihuZXcgY2diKCdBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGNvbGxlY3Rpb24nKSl9O18uR2M9ZnVuY3Rpb24gSGUoYSl7cmV0dXJuIHllKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gSWUoKXtBZSh0aGlzKX07Xy5IYz1mdW5jdGlvbiBKZShhKXtyZXR1cm4gemUodGhpcyxhLGZhbHNlKX07Xy5JYz1mdW5jdGlvbiBLZShhKXtyZXR1cm4gQmUodGhpcyxhKX07Xy5kYz1mdW5jdGlvbiBNZSgpe3JldHVybiB0aGlzLmdjKCk9PTB9O18uTWM9ZnVuY3Rpb24gT2UoYSl7cmV0dXJuIHplKHRoaXMsYSx0cnVlKX07Xy5QYz1mdW5jdGlvbiBSZSgpe3JldHVybiBEZSh0aGlzKX07Xy5RYz1mdW5jdGlvbiBTZShhKXtyZXR1cm4gRWUodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBUZSgpe3JldHVybiBGZSh0aGlzKX07dmFyIGRKPW1kYihiaWUsJ0Fic3RyYWN0Q29sbGVjdGlvbicsMjgpO3ZhciBMSz1vZGIoYmllLCdTZXQnKTtiY2IoZWllLDI4LGZpZSk7Xy5OYz1mdW5jdGlvbiBZZSgpe3JldHVybiBuZXcgS3ViKHRoaXMsMSl9O18uRmI9ZnVuY3Rpb24gV2UoYSl7cmV0dXJuIFVlKHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gWGUoKXtyZXR1cm4gcG1iKHRoaXMpfTt2YXIgeko9bWRiKGJpZSwnQWJzdHJhY3RTZXQnLGVpZSk7YmNiKDE5NzAsZWllLGZpZSk7dmFyIEJIPW1kYihaaGUsJ1NldHMvSW1wcm92ZWRBYnN0cmFjdFNldCcsMTk3MCk7YmNiKDE5NzEsMTk3MCxmaWUpO18uJGI9ZnVuY3Rpb24gJGUoKXt0aGlzLlJjKCkuJGIoKX07Xy5IYz1mdW5jdGlvbiBfZShhKXtyZXR1cm4gWmUodGhpcyxhKX07Xy5kYz1mdW5jdGlvbiBhZigpe3JldHVybiB0aGlzLlJjKCkuZGMoKX07Xy5NYz1mdW5jdGlvbiBiZihhKXt2YXIgYjtpZih0aGlzLkhjKGEpKXtiPUJEKGEsNDIpO3JldHVybiB0aGlzLlJjKCkuZWMoKS5NYyhiLmNkKCkpfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBjZigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX07dmFyIFdHPW1kYihaaGUsJ01hcHMvRW50cnlTZXQnLDE5NzEpO2JjYigxMDk3LDE5NzEsZmllLGRmKTtfLkhjPWZ1bmN0aW9uIGVmKGEpe3JldHVybiBDayh0aGlzLmEuZC52YygpLGEpfTtfLktjPWZ1bmN0aW9uIGZmKCl7cmV0dXJuIG5ldyBtZih0aGlzLmEpfTtfLlJjPWZ1bmN0aW9uIGdmKCl7cmV0dXJuIHRoaXMuYX07Xy5NYz1mdW5jdGlvbiBoZihhKXt2YXIgYjtpZighQ2sodGhpcy5hLmQudmMoKSxhKSl7cmV0dXJuIGZhbHNlfWI9QkQoYSw0Mik7VGModGhpcy5hLmUsYi5jZCgpKTtyZXR1cm4gdHJ1ZX07Xy5OYz1mdW5jdGlvbiBqZigpe3JldHVybiAkaih0aGlzLmEuZC52YygpLk5jKCksbmV3IGtmKHRoaXMuYSkpfTt2YXIgakU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcycsMTA5Nyk7YmNiKDEwOTgsMSx7fSxrZik7Xy5LYj1mdW5jdGlvbiBsZihhKXtyZXR1cm4gbWUodGhpcy5hLEJEKGEsNDIpKX07dmFyIGlFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMvMG1ldGhvZHJlZiR3cmFwRW50cnkkVHlwZScsMTA5OCk7YmNiKDczMCwxLGFpZSxtZik7Xy5OYj1mdW5jdGlvbiBuZihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBwZigpe3ZhciBhO3JldHVybiBhPUJEKHRoaXMuYi5QYigpLDQyKSx0aGlzLmE9QkQoYS5kZCgpLDE0KSxtZSh0aGlzLmMsYSl9O18uT2I9ZnVuY3Rpb24gb2YoKXtyZXR1cm4gdGhpcy5iLk9iKCl9O18uUWI9ZnVuY3Rpb24gcWYoKXtWYighIXRoaXMuYSk7dGhpcy5iLlFiKCk7dGhpcy5jLmUuZC09dGhpcy5hLmdjKCk7dGhpcy5hLiRiKCk7dGhpcy5hPW51bGx9O3ZhciBrRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvcicsNzMwKTtiY2IoNTMyLDE5NzAsZmllLHJmKTtfLiRiPWZ1bmN0aW9uIHNmKCl7dGhpcy5iLiRiKCl9O18uSGM9ZnVuY3Rpb24gdGYoYSl7cmV0dXJuIHRoaXMuYi5fYihhKX07Xy5KYz1mdW5jdGlvbiB1ZihhKXtRYihhKTt0aGlzLmIud2MobmV3IFh2KGEpKX07Xy5kYz1mdW5jdGlvbiB2Zigpe3JldHVybiB0aGlzLmIuZGMoKX07Xy5LYz1mdW5jdGlvbiB3Zigpe3JldHVybiBuZXcgTXYodGhpcy5iLnZjKCkuS2MoKSl9O18uTWM9ZnVuY3Rpb24geGYoYSl7aWYodGhpcy5iLl9iKGEpKXt0aGlzLmIuQmMoYSk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtfLmdjPWZ1bmN0aW9uIHlmKCl7cmV0dXJuIHRoaXMuYi5nYygpfTt2YXIgJEc9bWRiKFpoZSwnTWFwcy9LZXlTZXQnLDUzMik7YmNiKDMxOCw1MzIsZmllLHpmKTtfLiRiPWZ1bmN0aW9uIEFmKCl7dmFyIGE7aXIoKGE9dGhpcy5iLnZjKCkuS2MoKSxuZXcgSGYodGhpcyxhKSkpfTtfLkljPWZ1bmN0aW9uIEJmKGEpe3JldHVybiB0aGlzLmIuZWMoKS5JYyhhKX07Xy5GYj1mdW5jdGlvbiBDZihhKXtyZXR1cm4gdGhpcz09PWF8fHBiKHRoaXMuYi5lYygpLGEpfTtfLkhiPWZ1bmN0aW9uIERmKCl7cmV0dXJuIHRiKHRoaXMuYi5lYygpKX07Xy5LYz1mdW5jdGlvbiBFZigpe3ZhciBhO3JldHVybiBhPXRoaXMuYi52YygpLktjKCksbmV3IEhmKHRoaXMsYSl9O18uTWM9ZnVuY3Rpb24gRmYoYSl7dmFyIGIsYztjPTA7Yj1CRCh0aGlzLmIuQmMoYSksMTQpO2lmKGIpe2M9Yi5nYygpO2IuJGIoKTt0aGlzLmEuZC09Y31yZXR1cm4gYz4wfTtfLk5jPWZ1bmN0aW9uIEdmKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9O3ZhciBvRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0JywzMTgpO2JjYig3MzEsMSxhaWUsSGYpO18uTmI9ZnVuY3Rpb24gSWYoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gSmYoKXtyZXR1cm4gdGhpcy5jLk9iKCl9O18uUGI9ZnVuY3Rpb24gS2YoKXt0aGlzLmE9QkQodGhpcy5jLlBiKCksNDIpO3JldHVybiB0aGlzLmEuY2QoKX07Xy5RYj1mdW5jdGlvbiBMZigpe3ZhciBhO1ZiKCEhdGhpcy5hKTthPUJEKHRoaXMuYS5kZCgpLDE0KTt0aGlzLmMuUWIoKTt0aGlzLmIuYS5kLT1hLmdjKCk7YS4kYigpO3RoaXMuYT1udWxsfTt2YXIgbkU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0tleVNldC8xJyw3MzEpO2JjYig0OTEsMzg5LHs4MzoxLDE2MToxfSxNZik7Xy5iYz1mdW5jdGlvbiBOZigpe3JldHVybiB0aGlzLlNjKCl9O18uZWM9ZnVuY3Rpb24gUGYoKXtyZXR1cm4gdGhpcy5UYygpfTtfLlNjPWZ1bmN0aW9uIE9mKCl7cmV0dXJuIG5ldyBZZih0aGlzLmMsdGhpcy5VYygpKX07Xy5UYz1mdW5jdGlvbiBRZigpe3ZhciBhO3JldHVybiBhPXRoaXMuYiwhYT8odGhpcy5iPXRoaXMuU2MoKSk6YX07Xy5VYz1mdW5jdGlvbiBSZigpe3JldHVybiBCRCh0aGlzLmQsMTYxKX07dmFyIHNFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Tb3J0ZWRBc01hcCcsNDkxKTtiY2IoNTQyLDQ5MSxnaWUsU2YpO18uYmM9ZnVuY3Rpb24gVGYoKXtyZXR1cm4gbmV3ICRmKHRoaXMuYSxCRChCRCh0aGlzLmQsMTYxKSwxNzEpKX07Xy5TYz1mdW5jdGlvbiBVZigpe3JldHVybiBuZXcgJGYodGhpcy5hLEJEKEJEKHRoaXMuZCwxNjEpLDE3MSkpfTtfLmVjPWZ1bmN0aW9uIFZmKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5iLEJEKCFhPyh0aGlzLmI9bmV3ICRmKHRoaXMuYSxCRChCRCh0aGlzLmQsMTYxKSwxNzEpKSk6YSwyNzEpfTtfLlRjPWZ1bmN0aW9uIFdmKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5iLEJEKCFhPyh0aGlzLmI9bmV3ICRmKHRoaXMuYSxCRChCRCh0aGlzLmQsMTYxKSwxNzEpKSk6YSwyNzEpfTtfLlVjPWZ1bmN0aW9uIFhmKCl7cmV0dXJuIEJEKEJEKHRoaXMuZCwxNjEpLDE3MSl9O3ZhciBwRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlQXNNYXAnLDU0Mik7YmNiKDQ5MCwzMTgsaGllLFlmKTtfLk5jPWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9O3ZhciB0RT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvU29ydGVkS2V5U2V0Jyw0OTApO2JjYigzODgsNDkwLGlpZSwkZik7dmFyIHFFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVLZXlTZXQnLDM4OCk7YmNiKDU0MSwyOCxkaWUsZGcpO18uRmM9ZnVuY3Rpb24gZWcoYSl7dmFyIGIsYzthZyh0aGlzKTtjPXRoaXMuZC5kYygpO2I9dGhpcy5kLkZjKGEpO2lmKGIpeysrdGhpcy5mLmQ7YyYmX2YodGhpcyl9cmV0dXJuIGJ9O18uR2M9ZnVuY3Rpb24gZmcoYSl7dmFyIGIsYyxkO2lmKGEuZGMoKSl7cmV0dXJuIGZhbHNlfWQ9KGFnKHRoaXMpLHRoaXMuZC5nYygpKTtiPXRoaXMuZC5HYyhhKTtpZihiKXtjPXRoaXMuZC5nYygpO3RoaXMuZi5kKz1jLWQ7ZD09MCYmX2YodGhpcyl9cmV0dXJuIGJ9O18uJGI9ZnVuY3Rpb24gZ2coKXt2YXIgYTthPShhZyh0aGlzKSx0aGlzLmQuZ2MoKSk7aWYoYT09MCl7cmV0dXJufXRoaXMuZC4kYigpO3RoaXMuZi5kLT1hO2JnKHRoaXMpfTtfLkhjPWZ1bmN0aW9uIGhnKGEpe2FnKHRoaXMpO3JldHVybiB0aGlzLmQuSGMoYSl9O18uSWM9ZnVuY3Rpb24gaWcoYSl7YWcodGhpcyk7cmV0dXJuIHRoaXMuZC5JYyhhKX07Xy5GYj1mdW5jdGlvbiBqZyhhKXtpZihhPT09dGhpcyl7cmV0dXJuIHRydWV9YWcodGhpcyk7cmV0dXJuIHBiKHRoaXMuZCxhKX07Xy5IYj1mdW5jdGlvbiBrZygpe2FnKHRoaXMpO3JldHVybiB0Yih0aGlzLmQpfTtfLktjPWZ1bmN0aW9uIGxnKCl7YWcodGhpcyk7cmV0dXJuIG5ldyBHZyh0aGlzKX07Xy5NYz1mdW5jdGlvbiBtZyhhKXt2YXIgYjthZyh0aGlzKTtiPXRoaXMuZC5NYyhhKTtpZihiKXstLXRoaXMuZi5kO2JnKHRoaXMpfXJldHVybiBifTtfLmdjPWZ1bmN0aW9uIG5nKCl7cmV0dXJuIGNnKHRoaXMpfTtfLk5jPWZ1bmN0aW9uIG9nKCl7cmV0dXJuIGFnKHRoaXMpLHRoaXMuZC5OYygpfTtfLkliPWZ1bmN0aW9uIHBnKCl7YWcodGhpcyk7cmV0dXJuIGZjYih0aGlzLmQpfTt2YXIgdkU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uJyw1NDEpO3ZhciB5Sz1vZGIoYmllLCdMaXN0Jyk7YmNiKDcyOCw1NDEsezIwOjEsMjg6MSwxNDoxLDE1OjF9LHFnKTtfLmFkPWZ1bmN0aW9uIHpnKGEpe2t0Yih0aGlzLGEpfTtfLk5jPWZ1bmN0aW9uIEFnKCl7cmV0dXJuIGFnKHRoaXMpLHRoaXMuZC5OYygpfTtfLlZjPWZ1bmN0aW9uIHJnKGEsYil7dmFyIGM7YWcodGhpcyk7Yz10aGlzLmQuZGMoKTtCRCh0aGlzLmQsMTUpLlZjKGEsYik7Kyt0aGlzLmEuZDtjJiZfZih0aGlzKX07Xy5XYz1mdW5jdGlvbiBzZyhhLGIpe3ZhciBjLGQsZTtpZihiLmRjKCkpe3JldHVybiBmYWxzZX1lPShhZyh0aGlzKSx0aGlzLmQuZ2MoKSk7Yz1CRCh0aGlzLmQsMTUpLldjKGEsYik7aWYoYyl7ZD10aGlzLmQuZ2MoKTt0aGlzLmEuZCs9ZC1lO2U9PTAmJl9mKHRoaXMpfXJldHVybiBjfTtfLlhiPWZ1bmN0aW9uIHRnKGEpe2FnKHRoaXMpO3JldHVybiBCRCh0aGlzLmQsMTUpLlhiKGEpfTtfLlhjPWZ1bmN0aW9uIHVnKGEpe2FnKHRoaXMpO3JldHVybiBCRCh0aGlzLmQsMTUpLlhjKGEpfTtfLlljPWZ1bmN0aW9uIHZnKCl7YWcodGhpcyk7cmV0dXJuIG5ldyBNZyh0aGlzKX07Xy5aYz1mdW5jdGlvbiB3ZyhhKXthZyh0aGlzKTtyZXR1cm4gbmV3IE5nKHRoaXMsYSl9O18uJGM9ZnVuY3Rpb24geGcoYSl7dmFyIGI7YWcodGhpcyk7Yj1CRCh0aGlzLmQsMTUpLiRjKGEpOy0tdGhpcy5hLmQ7YmcodGhpcyk7cmV0dXJuIGJ9O18uX2M9ZnVuY3Rpb24geWcoYSxiKXthZyh0aGlzKTtyZXR1cm4gQkQodGhpcy5kLDE1KS5fYyhhLGIpfTtfLmJkPWZ1bmN0aW9uIEJnKGEsYil7YWcodGhpcyk7cmV0dXJuIFZjKHRoaXMuYSx0aGlzLmUsQkQodGhpcy5kLDE1KS5iZChhLGIpLCF0aGlzLmI/dGhpczp0aGlzLmIpfTt2YXIgeEU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0Jyw3MjgpO2JjYigxMDk2LDcyOCx7MjA6MSwyODoxLDE0OjEsMTU6MSw1NDoxfSxDZyk7dmFyIHJFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9SYW5kb21BY2Nlc3NXcmFwcGVkTGlzdCcsMTA5Nik7YmNiKDYyMCwxLGFpZSxHZyk7Xy5OYj1mdW5jdGlvbiBJZyhhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBKZygpe0ZnKHRoaXMpO3JldHVybiB0aGlzLmIuT2IoKX07Xy5QYj1mdW5jdGlvbiBLZygpe0ZnKHRoaXMpO3JldHVybiB0aGlzLmIuUGIoKX07Xy5RYj1mdW5jdGlvbiBMZygpe0VnKHRoaXMpfTt2YXIgdUU9bWRiKFpoZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uL1dyYXBwZWRJdGVyYXRvcicsNjIwKTtiY2IoNzI5LDYyMCxqaWUsTWcsTmcpO18uUWI9ZnVuY3Rpb24gVGcoKXtFZyh0aGlzKX07Xy5SYj1mdW5jdGlvbiBPZyhhKXt2YXIgYjtiPWNnKHRoaXMuYSk9PTA7KEZnKHRoaXMpLEJEKHRoaXMuYiwxMjUpKS5SYihhKTsrK3RoaXMuYS5hLmQ7YiYmX2YodGhpcy5hKX07Xy5TYj1mdW5jdGlvbiBQZygpe3JldHVybiAoRmcodGhpcyksQkQodGhpcy5iLDEyNSkpLlNiKCl9O18uVGI9ZnVuY3Rpb24gUWcoKXtyZXR1cm4gKEZnKHRoaXMpLEJEKHRoaXMuYiwxMjUpKS5UYigpfTtfLlViPWZ1bmN0aW9uIFJnKCl7cmV0dXJuIChGZyh0aGlzKSxCRCh0aGlzLmIsMTI1KSkuVWIoKX07Xy5WYj1mdW5jdGlvbiBTZygpe3JldHVybiAoRmcodGhpcyksQkQodGhpcy5iLDEyNSkpLlZiKCl9O18uV2I9ZnVuY3Rpb24gVWcoYSl7KEZnKHRoaXMpLEJEKHRoaXMuYiwxMjUpKS5XYihhKX07dmFyIHdFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdC9XcmFwcGVkTGlzdEl0ZXJhdG9yJyw3MjkpO2JjYig3MjcsNTQxLGhpZSxWZyk7Xy5OYz1mdW5jdGlvbiBXZygpe3JldHVybiBhZyh0aGlzKSx0aGlzLmQuTmMoKX07dmFyIEFFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU29ydGVkU2V0Jyw3MjcpO2JjYigxMDk1LDcyNyxpaWUsWGcpO3ZhciB5RT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZE5hdmlnYWJsZVNldCcsMTA5NSk7YmNiKDEwOTQsNTQxLGZpZSxZZyk7Xy5OYz1mdW5jdGlvbiBaZygpe3JldHVybiBhZyh0aGlzKSx0aGlzLmQuTmMoKX07dmFyIHpFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU2V0JywxMDk0KTtiY2IoMTEwMywxLHt9LCRnKTtfLktiPWZ1bmN0aW9uIF9nKGEpe3JldHVybiBmZChCRChhLDQyKSl9O3ZhciBCRT1tZGIoWmhlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvbGFtYmRhJDEkVHlwZScsMTEwMyk7YmNiKDExMDIsMSx7fSxhaCk7Xy5LYj1mdW5jdGlvbiBiaChhKXtyZXR1cm4gbmV3IFdvKHRoaXMuYSxhKX07dmFyIENFPW1kYihaaGUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMiRUeXBlJywxMTAyKTt2YXIgQ0s9b2RiKGJpZSwnTWFwL0VudHJ5Jyk7YmNiKDM0NSwxLGtpZSk7Xy5GYj1mdW5jdGlvbiBkaChhKXt2YXIgYjtpZihKRChhLDQyKSl7Yj1CRChhLDQyKTtyZXR1cm4gSGIodGhpcy5jZCgpLGIuY2QoKSkmJkhiKHRoaXMuZGQoKSxiLmRkKCkpfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBlaCgpe3ZhciBhLGI7YT10aGlzLmNkKCk7Yj10aGlzLmRkKCk7cmV0dXJuIChhPT1udWxsPzA6dGIoYSkpXihiPT1udWxsPzA6dGIoYikpfTtfLmVkPWZ1bmN0aW9uIGZoKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5JYj1mdW5jdGlvbiBnaCgpe3JldHVybiB0aGlzLmNkKCkrJz0nK3RoaXMuZGQoKX07dmFyIEVFPW1kYihaaGUsbGllLDM0NSk7YmNiKDE5ODgsMjgsZGllKTtfLiRiPWZ1bmN0aW9uIGhoKCl7dGhpcy5mZCgpLiRiKCl9O18uSGM9ZnVuY3Rpb24gaWgoYSl7dmFyIGI7aWYoSkQoYSw0Mikpe2I9QkQoYSw0Mik7cmV0dXJuIENjKHRoaXMuZmQoKSxiLmNkKCksYi5kZCgpKX1yZXR1cm4gZmFsc2V9O18uTWM9ZnVuY3Rpb24gamgoYSl7dmFyIGI7aWYoSkQoYSw0Mikpe2I9QkQoYSw0Mik7cmV0dXJuIEdjKHRoaXMuZmQoKSxiLmNkKCksYi5kZCgpKX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24ga2goKXtyZXR1cm4gdGhpcy5mZCgpLmR9O3ZhciBmSD1tZGIoWmhlLCdNdWx0aW1hcHMvRW50cmllcycsMTk4OCk7YmNiKDczMywxOTg4LGRpZSxsaCk7Xy5LYz1mdW5jdGlvbiBtaCgpe3JldHVybiB0aGlzLmEua2MoKX07Xy5mZD1mdW5jdGlvbiBuaCgpe3JldHVybiB0aGlzLmF9O18uTmM9ZnVuY3Rpb24gb2goKXtyZXR1cm4gdGhpcy5hLmxjKCl9O3ZhciBGRT1tZGIoWmhlLCdBYnN0cmFjdE11bHRpbWFwL0VudHJpZXMnLDczMyk7YmNiKDczNCw3MzMsZmllLHBoKTtfLk5jPWZ1bmN0aW9uIHNoKCl7cmV0dXJuIHRoaXMuYS5sYygpfTtfLkZiPWZ1bmN0aW9uIHFoKGEpe3JldHVybiBBeCh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIHJoKCl7cmV0dXJuIEJ4KHRoaXMpfTt2YXIgR0U9bWRiKFpoZSwnQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCcsNzM0KTtiY2IoNzM1LDI4LGRpZSx0aCk7Xy4kYj1mdW5jdGlvbiB1aCgpe3RoaXMuYS4kYigpfTtfLkhjPWZ1bmN0aW9uIHZoKGEpe3JldHVybiBEYyh0aGlzLmEsYSl9O18uS2M9ZnVuY3Rpb24gd2goKXtyZXR1cm4gdGhpcy5hLm5jKCl9O18uZ2M9ZnVuY3Rpb24geGgoKXtyZXR1cm4gdGhpcy5hLmR9O18uTmM9ZnVuY3Rpb24geWgoKXtyZXR1cm4gdGhpcy5hLm9jKCl9O3ZhciBIRT1tZGIoWmhlLCdBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcycsNzM1KTtiY2IoMTk4OSwyOCx7ODM1OjEsMjA6MSwyODoxLDE0OjF9KTtfLkpjPWZ1bmN0aW9uIEdoKGEpe1FiKGEpO0FoKHRoaXMpLkpjKG5ldyBYdyhhKSl9O18uTmM9ZnVuY3Rpb24gS2goKXt2YXIgYTtyZXR1cm4gYT1BaCh0aGlzKS5OYygpLFlqKGEsbmV3IGN4LDY0fGEucWQoKSYxMjk2LHRoaXMuYS5kKX07Xy5GYz1mdW5jdGlvbiBDaChhKXt6aCgpO3JldHVybiB0cnVlfTtfLkdjPWZ1bmN0aW9uIERoKGEpe3JldHVybiBRYih0aGlzKSxRYihhKSxKRChhLDU0Myk/WncoQkQoYSw4MzUpKTohYS5kYygpJiZmcih0aGlzLGEuS2MoKSl9O18uSGM9ZnVuY3Rpb24gRWgoYSl7dmFyIGI7cmV0dXJuIGI9QkQoSHYobmQodGhpcy5hKSxhKSwxNCksKCFiPzA6Yi5nYygpKT4wfTtfLkZiPWZ1bmN0aW9uIEZoKGEpe3JldHVybiAkdyh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIEhoKCl7cmV0dXJuIHRiKEFoKHRoaXMpKX07Xy5kYz1mdW5jdGlvbiBJaCgpe3JldHVybiBBaCh0aGlzKS5kYygpfTtfLk1jPWZ1bmN0aW9uIEpoKGEpe3JldHVybiBCdyh0aGlzLGEsMSk+MH07Xy5JYj1mdW5jdGlvbiBMaCgpe3JldHVybiBmY2IoQWgodGhpcykpfTt2YXIgS0U9bWRiKFpoZSwnQWJzdHJhY3RNdWx0aXNldCcsMTk4OSk7YmNiKDE5OTEsMTk3MCxmaWUpO18uJGI9ZnVuY3Rpb24gTWgoKXtOYyh0aGlzLmEuYSl9O18uSGM9ZnVuY3Rpb24gTmgoYSl7dmFyIGIsYztpZihKRChhLDQ5Mikpe2M9QkQoYSw0MTYpO2lmKEJEKGMuYS5kZCgpLDE0KS5nYygpPD0wKXtyZXR1cm4gZmFsc2V9Yj1Bdyh0aGlzLmEsYy5hLmNkKCkpO3JldHVybiBiPT1CRChjLmEuZGQoKSwxNCkuZ2MoKX1yZXR1cm4gZmFsc2V9O18uTWM9ZnVuY3Rpb24gT2goYSl7dmFyIGIsYyxkLGU7aWYoSkQoYSw0OTIpKXtjPUJEKGEsNDE2KTtiPWMuYS5jZCgpO2Q9QkQoYy5hLmRkKCksMTQpLmdjKCk7aWYoZCE9MCl7ZT10aGlzLmE7cmV0dXJuIGF4KGUsYixkKX19cmV0dXJuIGZhbHNlfTt2YXIgcEg9bWRiKFpoZSwnTXVsdGlzZXRzL0VudHJ5U2V0JywxOTkxKTtiY2IoMTEwOSwxOTkxLGZpZSxQaCk7Xy5LYz1mdW5jdGlvbiBRaCgpe3JldHVybiBuZXcgTHcoZmUobmQodGhpcy5hLmEpKS5LYygpKX07Xy5nYz1mdW5jdGlvbiBSaCgpe3JldHVybiBuZCh0aGlzLmEuYSkuZ2MoKX07dmFyIEpFPW1kYihaaGUsJ0Fic3RyYWN0TXVsdGlzZXQvRW50cnlTZXQnLDExMDkpO2JjYig2MTksNzI2LF9oZSk7Xy5oYz1mdW5jdGlvbiBVaCgpe3JldHVybiB0aGlzLmdkKCl9O18uamM9ZnVuY3Rpb24gVmgoKXtyZXR1cm4gdGhpcy5oZCgpfTtfLmNjPWZ1bmN0aW9uIFloKGEpe3JldHVybiB0aGlzLmpkKGEpfTtfLmZjPWZ1bmN0aW9uICRoKGEpe3JldHVybiB0aGlzLmtkKGEpfTtfLlpiPWZ1bmN0aW9uIFRoKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5mLCFhPyh0aGlzLmY9dGhpcy5hYygpKTphfTtfLmhkPWZ1bmN0aW9uIFdoKCl7cmV0dXJuIG1tYigpLG1tYigpLGxtYn07Xy5GYj1mdW5jdGlvbiBYaChhKXtyZXR1cm4gaHcodGhpcyxhKX07Xy5qZD1mdW5jdGlvbiBaaChhKXtyZXR1cm4gQkQoUWModGhpcyxhKSwyMSl9O18ua2Q9ZnVuY3Rpb24gX2goYSl7cmV0dXJuIEJEKFNjKHRoaXMsYSksMjEpfTtfLm1jPWZ1bmN0aW9uIGFpKGEpe3JldHVybiBtbWIoKSxuZXcgem9iKEJEKGEsMjEpKX07Xy5wYz1mdW5jdGlvbiBiaShhLGIpe3JldHVybiBuZXcgWWcodGhpcyxhLEJEKGIsMjEpKX07dmFyIExFPW1kYihaaGUsJ0Fic3RyYWN0U2V0TXVsdGltYXAnLDYxOSk7YmNiKDE2NTcsNjE5LF9oZSk7Xy5oYz1mdW5jdGlvbiBlaSgpe3JldHVybiBuZXcgSHhiKHRoaXMuYil9O18uZ2Q9ZnVuY3Rpb24gZmkoKXtyZXR1cm4gbmV3IEh4Yih0aGlzLmIpfTtfLmpjPWZ1bmN0aW9uIGdpKCl7cmV0dXJuIEl4KG5ldyBIeGIodGhpcy5iKSl9O18uaGQ9ZnVuY3Rpb24gaGkoKXtyZXR1cm4gSXgobmV3IEh4Yih0aGlzLmIpKX07Xy5jYz1mdW5jdGlvbiBpaShhKXtyZXR1cm4gQkQoQkQoUWModGhpcyxhKSwyMSksODQpfTtfLmpkPWZ1bmN0aW9uIGppKGEpe3JldHVybiBCRChCRChRYyh0aGlzLGEpLDIxKSw4NCl9O18uZmM9ZnVuY3Rpb24ga2koYSl7cmV0dXJuIEJEKEJEKFNjKHRoaXMsYSksMjEpLDg0KX07Xy5rZD1mdW5jdGlvbiBsaShhKXtyZXR1cm4gQkQoQkQoU2ModGhpcyxhKSwyMSksODQpfTtfLm1jPWZ1bmN0aW9uIG1pKGEpe3JldHVybiBKRChhLDI3MSk/SXgoQkQoYSwyNzEpKToobW1iKCksbmV3IFpvYihCRChhLDg0KSkpfTtfLlpiPWZ1bmN0aW9uIGRpKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5mLCFhPyh0aGlzLmY9SkQodGhpcy5jLDE3MSk/bmV3IFNmKHRoaXMsQkQodGhpcy5jLDE3MSkpOkpEKHRoaXMuYywxNjEpP25ldyBNZih0aGlzLEJEKHRoaXMuYywxNjEpKTpuZXcgbmUodGhpcyx0aGlzLmMpKTphfTtfLnBjPWZ1bmN0aW9uIG5pKGEsYil7cmV0dXJuIEpEKGIsMjcxKT9uZXcgWGcodGhpcyxhLEJEKGIsMjcxKSk6bmV3IFZnKHRoaXMsYSxCRChiLDg0KSl9O3ZhciBORT1tZGIoWmhlLCdBYnN0cmFjdFNvcnRlZFNldE11bHRpbWFwJywxNjU3KTtiY2IoMTY1OCwxNjU3LF9oZSk7Xy5aYj1mdW5jdGlvbiBwaSgpe3ZhciBhO3JldHVybiBhPXRoaXMuZixCRChCRCghYT8odGhpcy5mPUpEKHRoaXMuYywxNzEpP25ldyBTZih0aGlzLEJEKHRoaXMuYywxNzEpKTpKRCh0aGlzLmMsMTYxKT9uZXcgTWYodGhpcyxCRCh0aGlzLmMsMTYxKSk6bmV3IG5lKHRoaXMsdGhpcy5jKSk6YSwxNjEpLDE3MSl9O18uZWM9ZnVuY3Rpb24gcmkoKXt2YXIgYTtyZXR1cm4gYT10aGlzLmksQkQoQkQoIWE/KHRoaXMuaT1KRCh0aGlzLmMsMTcxKT9uZXcgJGYodGhpcyxCRCh0aGlzLmMsMTcxKSk6SkQodGhpcy5jLDE2MSk/bmV3IFlmKHRoaXMsQkQodGhpcy5jLDE2MSkpOm5ldyB6Zih0aGlzLHRoaXMuYykpOmEsODQpLDI3MSl9O18uYmM9ZnVuY3Rpb24gcWkoKXtyZXR1cm4gSkQodGhpcy5jLDE3MSk/bmV3ICRmKHRoaXMsQkQodGhpcy5jLDE3MSkpOkpEKHRoaXMuYywxNjEpP25ldyBZZih0aGlzLEJEKHRoaXMuYywxNjEpKTpuZXcgemYodGhpcyx0aGlzLmMpfTt2YXIgTUU9bWRiKFpoZSwnQWJzdHJhY3RTb3J0ZWRLZXlTb3J0ZWRTZXRNdWx0aW1hcCcsMTY1OCk7YmNiKDIwMTAsMSx7MTk0NzoxfSk7Xy5GYj1mdW5jdGlvbiBzaShhKXtyZXR1cm4genkodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiB0aSgpe3ZhciBhO3JldHVybiBwbWIoKGE9dGhpcy5nLCFhPyh0aGlzLmc9bmV3IHZpKHRoaXMpKTphKSl9O18uSWI9ZnVuY3Rpb24gdWkoKXt2YXIgYTtyZXR1cm4gTWQoKGE9dGhpcy5mLCFhPyh0aGlzLmY9bmV3IFJqKHRoaXMpKTphKSl9O3ZhciBRRT1tZGIoWmhlLCdBYnN0cmFjdFRhYmxlJywyMDEwKTtiY2IoNjY1LGVpZSxmaWUsdmkpO18uJGI9ZnVuY3Rpb24gd2koKXtQaSgpfTtfLkhjPWZ1bmN0aW9uIHhpKGEpe3ZhciBiLGM7aWYoSkQoYSw0NjgpKXtiPUJEKGEsNjgyKTtjPUJEKEh2KFZpKHRoaXMuYSksRW0oYi5jLmUsYi5iKSksODMpO3JldHVybiAhIWMmJkNrKGMudmMoKSxuZXcgV28oRW0oYi5jLmMsYi5hKSxNaShiLmMsYi5iLGIuYSkpKX1yZXR1cm4gZmFsc2V9O18uS2M9ZnVuY3Rpb24geWkoKXtyZXR1cm4gTmkodGhpcy5hKX07Xy5NYz1mdW5jdGlvbiB6aShhKXt2YXIgYixjO2lmKEpEKGEsNDY4KSl7Yj1CRChhLDY4Mik7Yz1CRChIdihWaSh0aGlzLmEpLEVtKGIuYy5lLGIuYikpLDgzKTtyZXR1cm4gISFjJiZEayhjLnZjKCksbmV3IFdvKEVtKGIuYy5jLGIuYSksTWkoYi5jLGIuYixiLmEpKSl9cmV0dXJuIGZhbHNlfTtfLmdjPWZ1bmN0aW9uIEFpKCl7cmV0dXJuIFhpKHRoaXMuYSl9O18uTmM9ZnVuY3Rpb24gQmkoKXtyZXR1cm4gT2kodGhpcy5hKX07dmFyIE9FPW1kYihaaGUsJ0Fic3RyYWN0VGFibGUvQ2VsbFNldCcsNjY1KTtiY2IoMTkyOCwyOCxkaWUsQ2kpO18uJGI9ZnVuY3Rpb24gRGkoKXtQaSgpfTtfLkhjPWZ1bmN0aW9uIEVpKGEpe3JldHVybiBRaSh0aGlzLmEsYSl9O18uS2M9ZnVuY3Rpb24gRmkoKXtyZXR1cm4gWmkodGhpcy5hKX07Xy5nYz1mdW5jdGlvbiBHaSgpe3JldHVybiBYaSh0aGlzLmEpfTtfLk5jPWZ1bmN0aW9uIEhpKCl7cmV0dXJuICRpKHRoaXMuYSl9O3ZhciBQRT1tZGIoWmhlLCdBYnN0cmFjdFRhYmxlL1ZhbHVlcycsMTkyOCk7YmNiKDE2MzIsMTYzMSxfaGUpO3ZhciBSRT1tZGIoWmhlLCdBcnJheUxpc3RNdWx0aW1hcEd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMnLDE2MzIpO2JjYig1MTMsMTYzMixfaGUsSmksS2kpO18uaGM9ZnVuY3Rpb24gTGkoKXtyZXR1cm4gbmV3IFNrYih0aGlzLmEpfTtfLmE9MDt2YXIgU0U9bWRiKFpoZSwnQXJyYXlMaXN0TXVsdGltYXAnLDUxMyk7YmNiKDY2NCwyMDEwLHs2NjQ6MSwxOTQ3OjEsMzoxfSxfaSk7dmFyIGNGPW1kYihaaGUsJ0FycmF5VGFibGUnLDY2NCk7YmNiKDE5MjQsMzg2LCRoZSxhaik7Xy5YYj1mdW5jdGlvbiBiaihhKXtyZXR1cm4gbmV3IGhqKHRoaXMuYSxhKX07dmFyIFRFPW1kYihaaGUsJ0FycmF5VGFibGUvMScsMTkyNCk7YmNiKDE5MjUsMSx7fSxjaik7Xy5sZD1mdW5jdGlvbiBkaihhKXtyZXR1cm4gbmV3IGhqKHRoaXMuYSxhKX07dmFyIFVFPW1kYihaaGUsJ0FycmF5VGFibGUvMW1ldGhvZHJlZiRnZXRDZWxsJFR5cGUnLDE5MjUpO2JjYigyMDExLDEsezY4MjoxfSk7Xy5GYj1mdW5jdGlvbiBlaihhKXt2YXIgYjtpZihhPT09dGhpcyl7cmV0dXJuIHRydWV9aWYoSkQoYSw0NjgpKXtiPUJEKGEsNjgyKTtyZXR1cm4gSGIoRW0odGhpcy5jLmUsdGhpcy5iKSxFbShiLmMuZSxiLmIpKSYmSGIoRW0odGhpcy5jLmMsdGhpcy5hKSxFbShiLmMuYyxiLmEpKSYmSGIoTWkodGhpcy5jLHRoaXMuYix0aGlzLmEpLE1pKGIuYyxiLmIsYi5hKSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIGZqKCl7cmV0dXJuIEhsYihPQyhHQyhTSSwxKSxVaGUsMSw1LFtFbSh0aGlzLmMuZSx0aGlzLmIpLEVtKHRoaXMuYy5jLHRoaXMuYSksTWkodGhpcy5jLHRoaXMuYix0aGlzLmEpXSkpfTtfLkliPWZ1bmN0aW9uIGdqKCl7cmV0dXJuICcoJytFbSh0aGlzLmMuZSx0aGlzLmIpKycsJytFbSh0aGlzLmMuYyx0aGlzLmEpKycpPScrTWkodGhpcy5jLHRoaXMuYix0aGlzLmEpfTt2YXIgSkg9bWRiKFpoZSwnVGFibGVzL0Fic3RyYWN0Q2VsbCcsMjAxMSk7YmNiKDQ2OCwyMDExLHs0Njg6MSw2ODI6MX0saGopO18uYT0wO18uYj0wO18uZD0wO3ZhciBWRT1tZGIoWmhlLCdBcnJheVRhYmxlLzInLDQ2OCk7YmNiKDE5MjcsMSx7fSxpaik7Xy5sZD1mdW5jdGlvbiBqaihhKXtyZXR1cm4gVGkodGhpcy5hLGEpfTt2YXIgV0U9bWRiKFpoZSwnQXJyYXlUYWJsZS8ybWV0aG9kcmVmJGdldFZhbHVlJFR5cGUnLDE5MjcpO2JjYigxOTI2LDM4NiwkaGUsa2opO18uWGI9ZnVuY3Rpb24gbGooYSl7cmV0dXJuIFRpKHRoaXMuYSxhKX07dmFyIFhFPW1kYihaaGUsJ0FycmF5VGFibGUvMycsMTkyNik7YmNiKDE5NzksMTk2NyxjaWUpO18uJGI9ZnVuY3Rpb24gbmooKXtpcih0aGlzLmtjKCkpfTtfLnZjPWZ1bmN0aW9uIG9qKCl7cmV0dXJuIG5ldyBTdih0aGlzKX07Xy5sYz1mdW5jdGlvbiBwaigpe3JldHVybiBuZXcgTXViKHRoaXMua2MoKSx0aGlzLmdjKCkpfTt2YXIgWUc9bWRiKFpoZSwnTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAnLDE5NzkpO2JjYig4MjgsMTk3OSxjaWUpO18uJGI9ZnVuY3Rpb24gdGooKXt0aHJvdyB2YmIobmV3IGJnYil9O18uX2I9ZnVuY3Rpb24gdWooYSl7cmV0dXJuIHNuKHRoaXMuYyxhKX07Xy5rYz1mdW5jdGlvbiB2aigpe3JldHVybiBuZXcgSmoodGhpcyx0aGlzLmMuYi5jLmdjKCkpfTtfLmxjPWZ1bmN0aW9uIHdqKCl7cmV0dXJuIFpqKHRoaXMuYy5iLmMuZ2MoKSwxNixuZXcgRGoodGhpcykpfTtfLnhjPWZ1bmN0aW9uIHhqKGEpe3ZhciBiO2I9QkQodG4odGhpcy5jLGEpLDE5KTtyZXR1cm4gIWI/bnVsbDp0aGlzLm5kKGIuYSl9O18uZGM9ZnVuY3Rpb24geWooKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfTtfLmVjPWZ1bmN0aW9uIHpqKCl7cmV0dXJuIFhtKHRoaXMuYyl9O18uemM9ZnVuY3Rpb24gQWooYSxiKXt2YXIgYztjPUJEKHRuKHRoaXMuYyxhKSwxOSk7aWYoIWMpe3Rocm93IHZiYihuZXcgV2RiKHRoaXMubWQoKSsnICcrYSsnIG5vdCBpbiAnK1htKHRoaXMuYykpKX1yZXR1cm4gdGhpcy5vZChjLmEsYil9O18uQmM9ZnVuY3Rpb24gQmooYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLmdjPWZ1bmN0aW9uIENqKCl7cmV0dXJuIHRoaXMuYy5iLmMuZ2MoKX07dmFyIF9FPW1kYihaaGUsJ0FycmF5VGFibGUvQXJyYXlNYXAnLDgyOCk7YmNiKDE5MjMsMSx7fSxEaik7Xy5sZD1mdW5jdGlvbiBFaihhKXtyZXR1cm4gcWoodGhpcy5hLGEpfTt2YXIgWUU9bWRiKFpoZSwnQXJyYXlUYWJsZS9BcnJheU1hcC8wbWV0aG9kcmVmJGdldEVudHJ5JFR5cGUnLDE5MjMpO2JjYigxOTIxLDM0NSxraWUsRmopO18uY2Q9ZnVuY3Rpb24gR2ooKXtyZXR1cm4gcmoodGhpcy5hLHRoaXMuYil9O18uZGQ9ZnVuY3Rpb24gSGooKXtyZXR1cm4gdGhpcy5hLm5kKHRoaXMuYil9O18uZWQ9ZnVuY3Rpb24gSWooYSl7cmV0dXJuIHRoaXMuYS5vZCh0aGlzLmIsYSl9O18uYj0wO3ZhciBaRT1tZGIoWmhlLCdBcnJheVRhYmxlL0FycmF5TWFwLzEnLDE5MjEpO2JjYigxOTIyLDM4NiwkaGUsSmopO18uWGI9ZnVuY3Rpb24gS2ooYSl7cmV0dXJuIHFqKHRoaXMuYSxhKX07dmFyICRFPW1kYihaaGUsJ0FycmF5VGFibGUvQXJyYXlNYXAvMicsMTkyMik7YmNiKDE5MjAsODI4LGNpZSxMaik7Xy5tZD1mdW5jdGlvbiBNaigpe3JldHVybiAnQ29sdW1uJ307Xy5uZD1mdW5jdGlvbiBOaihhKXtyZXR1cm4gTWkodGhpcy5iLHRoaXMuYSxhKX07Xy5vZD1mdW5jdGlvbiBPaihhLGIpe3JldHVybiBXaSh0aGlzLmIsdGhpcy5hLGEsYil9O18uYT0wO3ZhciBiRj1tZGIoWmhlLCdBcnJheVRhYmxlL1JvdycsMTkyMCk7YmNiKDgyOSw4MjgsY2llLFJqKTtfLm5kPWZ1bmN0aW9uIFRqKGEpe3JldHVybiBuZXcgTGoodGhpcy5hLGEpfTtfLnpjPWZ1bmN0aW9uIFVqKGEsYil7cmV0dXJuIEJEKGIsODMpLFBqKCl9O18ub2Q9ZnVuY3Rpb24gVmooYSxiKXtyZXR1cm4gQkQoYiw4MyksUWooKX07Xy5tZD1mdW5jdGlvbiBTaigpe3JldHVybiAnUm93J307dmFyIGFGPW1kYihaaGUsJ0FycmF5VGFibGUvUm93TWFwJyw4MjkpO2JjYigxMTIwLDEscGllLF9qKTtfLnFkPWZ1bmN0aW9uIGFrKCl7cmV0dXJuIHRoaXMuYS5xZCgpJi0yNjJ9O18ucmQ9ZnVuY3Rpb24gYmsoKXtyZXR1cm4gdGhpcy5hLnJkKCl9O18uTmI9ZnVuY3Rpb24gY2soYSl7dGhpcy5hLk5iKG5ldyBnayhhLHRoaXMuYikpfTtfLnNkPWZ1bmN0aW9uIGRrKGEpe3JldHVybiB0aGlzLmEuc2QobmV3IGVrKGEsdGhpcy5iKSl9O3ZhciBsRj1tZGIoWmhlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzEnLDExMjApO2JjYigxMTIxLDEscWllLGVrKTtfLnRkPWZ1bmN0aW9uIGZrKGEpe3RoaXMuYS50ZCh0aGlzLmIuS2IoYSkpfTt2YXIgZEY9bWRiKFpoZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUnLDExMjEpO2JjYigxMTIyLDEscWllLGdrKTtfLnRkPWZ1bmN0aW9uIGhrKGEpe3RoaXMuYS50ZCh0aGlzLmIuS2IoYSkpfTt2YXIgZUY9bWRiKFpoZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUnLDExMjIpO2JjYigxMTIzLDEscGllLGprKTtfLnFkPWZ1bmN0aW9uIGtrKCl7cmV0dXJuIHRoaXMuYX07Xy5yZD1mdW5jdGlvbiBsaygpeyEhdGhpcy5kJiYodGhpcy5iPURlYih0aGlzLmIsdGhpcy5kLnJkKCkpKTtyZXR1cm4gRGViKHRoaXMuYiwwKX07Xy5OYj1mdW5jdGlvbiBtayhhKXtpZih0aGlzLmQpe3RoaXMuZC5OYihhKTt0aGlzLmQ9bnVsbH10aGlzLmMuTmIobmV3IHJrKHRoaXMuZSxhKSk7dGhpcy5iPTB9O18uc2Q9ZnVuY3Rpb24gb2soYSl7d2hpbGUodHJ1ZSl7aWYoISF0aGlzLmQmJnRoaXMuZC5zZChhKSl7S2JiKHRoaXMuYixyaWUpJiYodGhpcy5iPVFiYih0aGlzLmIsMSkpO3JldHVybiB0cnVlfWVsc2V7dGhpcy5kPW51bGx9aWYoIXRoaXMuYy5zZChuZXcgcGsodGhpcyx0aGlzLmUpKSl7cmV0dXJuIGZhbHNlfX19O18uYT0wO18uYj0wO3ZhciBoRj1tZGIoWmhlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3InLDExMjMpO2JjYigxMTI0LDEscWllLHBrKTtfLnRkPWZ1bmN0aW9uIHFrKGEpe2lrKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBmRj1tZGIoWmhlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZScsMTEyNCk7YmNiKDExMjUsMSxxaWUscmspO18udGQ9ZnVuY3Rpb24gc2soYSl7bmsodGhpcy5iLHRoaXMuYSxhKX07dmFyIGdGPW1kYihaaGUsJ0NvbGxlY3RTcGxpdGVyYXRvcnMvMUZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMSRUeXBlJywxMTI1KTtiY2IoMTExNywxLHBpZSx0ayk7Xy5xZD1mdW5jdGlvbiB1aygpe3JldHVybiAxNjQ2NHx0aGlzLmJ9O18ucmQ9ZnVuY3Rpb24gdmsoKXtyZXR1cm4gdGhpcy5hLnJkKCl9O18uTmI9ZnVuY3Rpb24gd2soYSl7dGhpcy5hLnhlKG5ldyBBayhhLHRoaXMuYykpfTtfLnNkPWZ1bmN0aW9uIHhrKGEpe3JldHVybiB0aGlzLmEueWUobmV3IHlrKGEsdGhpcy5jKSl9O18uYj0wO3ZhciBrRj1tZGIoWmhlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzJywxMTE3KTtiY2IoMTExOCwxLHNpZSx5ayk7Xy51ZD1mdW5jdGlvbiB6ayhhKXt0aGlzLmEudGQodGhpcy5iLmxkKGEpKX07dmFyIGlGPW1kYihaaGUsJ0NvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MvbGFtYmRhJDAkVHlwZScsMTExOCk7YmNiKDExMTksMSxzaWUsQWspO18udWQ9ZnVuY3Rpb24gQmsoYSl7dGhpcy5hLnRkKHRoaXMuYi5sZChhKSl9O3ZhciBqRj1tZGIoWmhlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQxJFR5cGUnLDExMTkpO2JjYigyNDUsMSx0aWUpO18ud2Q9ZnVuY3Rpb24gSGsoYSl7cmV0dXJuIHRoaXMudmQoQkQoYSwyNDUpKX07Xy52ZD1mdW5jdGlvbiBHayhhKXt2YXIgYjtpZihhPT0oX2soKSwkaykpe3JldHVybiAxfWlmKGE9PShMaygpLEtrKSl7cmV0dXJuIC0xfWI9KGV4KCksRmNiKHRoaXMuYSxhLmEpKTtpZihiIT0wKXtyZXR1cm4gYn1yZXR1cm4gSkQodGhpcyw1MTkpPT1KRChhLDUxOSk/MDpKRCh0aGlzLDUxOSk/MTotMX07Xy56ZD1mdW5jdGlvbiBJaygpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gSmsoYSl7cmV0dXJuIEVrKHRoaXMsYSl9O3ZhciBxRj1tZGIoWmhlLCdDdXQnLDI0NSk7YmNiKDE3NjEsMjQ1LHRpZSxNayk7Xy52ZD1mdW5jdGlvbiBOayhhKXtyZXR1cm4gYT09dGhpcz8wOjF9O18ueGQ9ZnVuY3Rpb24gT2soYSl7dGhyb3cgdmJiKG5ldyB4Y2IpfTtfLnlkPWZ1bmN0aW9uIFBrKGEpe2EuYSs9JytcXHUyMjFFKSd9O18uemQ9ZnVuY3Rpb24gUWsoKXt0aHJvdyB2YmIobmV3IFpkYih1aWUpKX07Xy5IYj1mdW5jdGlvbiBSaygpe3JldHVybiBaZmIoKSxrQ2IodGhpcyl9O18uQWQ9ZnVuY3Rpb24gU2soYSl7cmV0dXJuIGZhbHNlfTtfLkliPWZ1bmN0aW9uIFRrKCl7cmV0dXJuICcrXFx1MjIxRSd9O3ZhciBLazt2YXIgbUY9bWRiKFpoZSwnQ3V0L0Fib3ZlQWxsJywxNzYxKTtiY2IoNTE5LDI0NSx7MjQ1OjEsNTE5OjEsMzoxLDM1OjF9LFVrKTtfLnhkPWZ1bmN0aW9uIFZrKGEpe1BmYigoYS5hKz0nKCcsYSksdGhpcy5hKX07Xy55ZD1mdW5jdGlvbiBXayhhKXtLZmIoUGZiKGEsdGhpcy5hKSw5Myl9O18uSGI9ZnVuY3Rpb24gWGsoKXtyZXR1cm4gfnRiKHRoaXMuYSl9O18uQWQ9ZnVuY3Rpb24gWWsoYSl7cmV0dXJuIGV4KCksRmNiKHRoaXMuYSxhKTwwfTtfLkliPWZ1bmN0aW9uIFprKCl7cmV0dXJuICcvJyt0aGlzLmErJ1xcXFwnfTt2YXIgbkY9bWRiKFpoZSwnQ3V0L0Fib3ZlVmFsdWUnLDUxOSk7YmNiKDE3NjAsMjQ1LHRpZSxhbCk7Xy52ZD1mdW5jdGlvbiBibChhKXtyZXR1cm4gYT09dGhpcz8wOi0xfTtfLnhkPWZ1bmN0aW9uIGNsKGEpe2EuYSs9JygtXFx1MjIxRSd9O18ueWQ9ZnVuY3Rpb24gZGwoYSl7dGhyb3cgdmJiKG5ldyB4Y2IpfTtfLnpkPWZ1bmN0aW9uIGVsKCl7dGhyb3cgdmJiKG5ldyBaZGIodWllKSl9O18uSGI9ZnVuY3Rpb24gZmwoKXtyZXR1cm4gWmZiKCksa0NiKHRoaXMpfTtfLkFkPWZ1bmN0aW9uIGdsKGEpe3JldHVybiB0cnVlfTtfLkliPWZ1bmN0aW9uIGhsKCl7cmV0dXJuICctXFx1MjIxRSd9O3ZhciAkazt2YXIgb0Y9bWRiKFpoZSwnQ3V0L0JlbG93QWxsJywxNzYwKTtiY2IoMTc2MiwyNDUsdGllLGlsKTtfLnhkPWZ1bmN0aW9uIGpsKGEpe1BmYigoYS5hKz0nWycsYSksdGhpcy5hKX07Xy55ZD1mdW5jdGlvbiBrbChhKXtLZmIoUGZiKGEsdGhpcy5hKSw0MSl9O18uSGI9ZnVuY3Rpb24gbGwoKXtyZXR1cm4gdGIodGhpcy5hKX07Xy5BZD1mdW5jdGlvbiBtbChhKXtyZXR1cm4gZXgoKSxGY2IodGhpcy5hLGEpPD0wfTtfLkliPWZ1bmN0aW9uIG5sKCl7cmV0dXJuICdcXFxcJyt0aGlzLmErJy8nfTt2YXIgcEY9bWRiKFpoZSwnQ3V0L0JlbG93VmFsdWUnLDE3NjIpO2JjYig1MzcsMSx2aWUpO18uSmM9ZnVuY3Rpb24gcWwoYSl7cmViKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gcmwoKXtyZXR1cm4gdHIoQkQoUmIodGhpcywndXNlIE9wdGlvbmFsLm9yTnVsbCgpIGluc3RlYWQgb2YgT3B0aW9uYWwub3IobnVsbCknKSwyMCkuS2MoKSl9O3ZhciB1Rj1tZGIoWmhlLCdGbHVlbnRJdGVyYWJsZScsNTM3KTtiY2IoNDMzLDUzNyx2aWUsc2wpO18uS2M9ZnVuY3Rpb24gdGwoKXtyZXR1cm4gbmV3IFNyKHVyKHRoaXMuYS5LYygpLG5ldyBTcSkpfTt2YXIgckY9bWRiKFpoZSwnRmx1ZW50SXRlcmFibGUvMicsNDMzKTtiY2IoMTA0Niw1MzcsdmllLHZsKTtfLktjPWZ1bmN0aW9uIHdsKCl7cmV0dXJuIHVsKHRoaXMpfTt2YXIgdEY9bWRiKFpoZSwnRmx1ZW50SXRlcmFibGUvMycsMTA0Nik7YmNiKDcwOCwzODYsJGhlLHhsKTtfLlhiPWZ1bmN0aW9uIHlsKGEpe3JldHVybiB0aGlzLmFbYV0uS2MoKX07dmFyIHNGPW1kYihaaGUsJ0ZsdWVudEl0ZXJhYmxlLzMvMScsNzA4KTtiY2IoMTk3MiwxLHt9KTtfLkliPWZ1bmN0aW9uIHpsKCl7cmV0dXJuIGZjYih0aGlzLkJkKCkuYil9O3ZhciBCRj1tZGIoWmhlLCdGb3J3YXJkaW5nT2JqZWN0JywxOTcyKTtiY2IoMTk3MywxOTcyLHdpZSk7Xy5CZD1mdW5jdGlvbiBGbCgpe3JldHVybiB0aGlzLkNkKCl9O18uSmM9ZnVuY3Rpb24gR2woYSl7cmViKHRoaXMsYSl9O18uTGM9ZnVuY3Rpb24gSmwoKXtyZXR1cm4gdGhpcy5PYygpfTtfLk5jPWZ1bmN0aW9uIE1sKCl7cmV0dXJuIG5ldyBLdWIodGhpcywwKX07Xy5PYz1mdW5jdGlvbiBObCgpe3JldHVybiBuZXcgWUFiKG51bGwsdGhpcy5OYygpKX07Xy5GYz1mdW5jdGlvbiBBbChhKXtyZXR1cm4gdGhpcy5DZCgpLGVuYigpfTtfLkdjPWZ1bmN0aW9uIEJsKGEpe3JldHVybiB0aGlzLkNkKCksZm5iKCl9O18uJGI9ZnVuY3Rpb24gQ2woKXt0aGlzLkNkKCksZ25iKCl9O18uSGM9ZnVuY3Rpb24gRGwoYSl7cmV0dXJuIHRoaXMuQ2QoKS5IYyhhKX07Xy5JYz1mdW5jdGlvbiBFbChhKXtyZXR1cm4gdGhpcy5DZCgpLkljKGEpfTtfLmRjPWZ1bmN0aW9uIEhsKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmRjKCl9O18uS2M9ZnVuY3Rpb24gSWwoKXtyZXR1cm4gdGhpcy5DZCgpLktjKCl9O18uTWM9ZnVuY3Rpb24gS2woYSl7cmV0dXJuIHRoaXMuQ2QoKSxqbmIoKX07Xy5nYz1mdW5jdGlvbiBMbCgpe3JldHVybiB0aGlzLkNkKCkuYi5nYygpfTtfLlBjPWZ1bmN0aW9uIE9sKCl7cmV0dXJuIHRoaXMuQ2QoKS5QYygpfTtfLlFjPWZ1bmN0aW9uIFBsKGEpe3JldHVybiB0aGlzLkNkKCkuUWMoYSl9O3ZhciB2Rj1tZGIoWmhlLCdGb3J3YXJkaW5nQ29sbGVjdGlvbicsMTk3Myk7YmNiKDE5ODAsMjgseGllKTtfLktjPWZ1bmN0aW9uIFhsKCl7cmV0dXJuIHRoaXMuRWQoKX07Xy5GYz1mdW5jdGlvbiBTbChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uR2M9ZnVuY3Rpb24gVGwoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLiRiPWZ1bmN0aW9uIFVsKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkhjPWZ1bmN0aW9uIFZsKGEpe3JldHVybiBhIT1udWxsJiZ6ZSh0aGlzLGEsZmFsc2UpfTtfLkRkPWZ1bmN0aW9uIFdsKCl7c3dpdGNoKHRoaXMuZ2MoKSl7Y2FzZSAwOnJldHVybiBpbSgpLGltKCksaG07Y2FzZSAxOnJldHVybiBpbSgpLG5ldyBteShRYih0aGlzLkVkKCkuUGIoKSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBweCh0aGlzLHRoaXMuUGMoKSk7fX07Xy5NYz1mdW5jdGlvbiBZbChhKXt0aHJvdyB2YmIobmV3IGJnYil9O3ZhciBXRj1tZGIoWmhlLCdJbW11dGFibGVDb2xsZWN0aW9uJywxOTgwKTtiY2IoNzEyLDE5ODAseGllLFpsKTtfLktjPWZ1bmN0aW9uIGNtKCl7cmV0dXJuIHZyKHRoaXMuYS5LYygpKX07Xy5IYz1mdW5jdGlvbiAkbChhKXtyZXR1cm4gYSE9bnVsbCYmdGhpcy5hLkhjKGEpfTtfLkljPWZ1bmN0aW9uIF9sKGEpe3JldHVybiB0aGlzLmEuSWMoYSl9O18uZGM9ZnVuY3Rpb24gYW0oKXtyZXR1cm4gdGhpcy5hLmRjKCl9O18uRWQ9ZnVuY3Rpb24gYm0oKXtyZXR1cm4gdnIodGhpcy5hLktjKCkpfTtfLmdjPWZ1bmN0aW9uIGRtKCl7cmV0dXJuIHRoaXMuYS5nYygpfTtfLlBjPWZ1bmN0aW9uIGVtKCl7cmV0dXJuIHRoaXMuYS5QYygpfTtfLlFjPWZ1bmN0aW9uIGZtKGEpe3JldHVybiB0aGlzLmEuUWMoYSl9O18uSWI9ZnVuY3Rpb24gZ20oKXtyZXR1cm4gZmNiKHRoaXMuYSl9O3ZhciB3Rj1tZGIoWmhlLCdGb3J3YXJkaW5nSW1tdXRhYmxlQ29sbGVjdGlvbicsNzEyKTtiY2IoMTUyLDE5ODAseWllKTtfLktjPWZ1bmN0aW9uIHNtKCl7cmV0dXJuIHRoaXMuRWQoKX07Xy5ZYz1mdW5jdGlvbiB0bSgpe3JldHVybiB0aGlzLkZkKDApfTtfLlpjPWZ1bmN0aW9uIHZtKGEpe3JldHVybiB0aGlzLkZkKGEpfTtfLmFkPWZ1bmN0aW9uIHptKGEpe2t0Yih0aGlzLGEpfTtfLk5jPWZ1bmN0aW9uIEFtKCl7cmV0dXJuIG5ldyBLdWIodGhpcywxNil9O18uYmQ9ZnVuY3Rpb24gQ20oYSxiKXtyZXR1cm4gdGhpcy5HZChhLGIpfTtfLlZjPWZ1bmN0aW9uIGxtKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLldjPWZ1bmN0aW9uIG1tKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkZiPWZ1bmN0aW9uIG9tKGEpe3JldHVybiBKdSh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIHBtKCl7cmV0dXJuIEt1KHRoaXMpfTtfLlhjPWZ1bmN0aW9uIHFtKGEpe3JldHVybiBhPT1udWxsPy0xOkx1KHRoaXMsYSl9O18uRWQ9ZnVuY3Rpb24gcm0oKXtyZXR1cm4gdGhpcy5GZCgwKX07Xy5GZD1mdW5jdGlvbiB1bShhKXtyZXR1cm4gam0odGhpcyxhKX07Xy4kYz1mdW5jdGlvbiB4bShhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uX2M9ZnVuY3Rpb24geW0oYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O18uR2Q9ZnVuY3Rpb24gQm0oYSxiKXt2YXIgYztyZXR1cm4gRG0oKGM9bmV3ICR1KHRoaXMpLG5ldyBKaWIoYyxhLGIpKSl9O3ZhciBobTt2YXIgX0Y9bWRiKFpoZSwnSW1tdXRhYmxlTGlzdCcsMTUyKTtiY2IoMjAwNiwxNTIseWllKTtfLktjPWZ1bmN0aW9uIE5tKCl7cmV0dXJuIHZyKHRoaXMuSGQoKS5LYygpKX07Xy5iZD1mdW5jdGlvbiBRbShhLGIpe3JldHVybiBEbSh0aGlzLkhkKCkuYmQoYSxiKSl9O18uSGM9ZnVuY3Rpb24gRm0oYSl7cmV0dXJuIGEhPW51bGwmJnRoaXMuSGQoKS5IYyhhKX07Xy5JYz1mdW5jdGlvbiBHbShhKXtyZXR1cm4gdGhpcy5IZCgpLkljKGEpfTtfLkZiPWZ1bmN0aW9uIEhtKGEpe3JldHVybiBwYih0aGlzLkhkKCksYSl9O18uWGI9ZnVuY3Rpb24gSW0oYSl7cmV0dXJuIEVtKHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gSm0oKXtyZXR1cm4gdGIodGhpcy5IZCgpKX07Xy5YYz1mdW5jdGlvbiBLbShhKXtyZXR1cm4gdGhpcy5IZCgpLlhjKGEpfTtfLmRjPWZ1bmN0aW9uIExtKCl7cmV0dXJuIHRoaXMuSGQoKS5kYygpfTtfLkVkPWZ1bmN0aW9uIE1tKCl7cmV0dXJuIHZyKHRoaXMuSGQoKS5LYygpKX07Xy5nYz1mdW5jdGlvbiBPbSgpe3JldHVybiB0aGlzLkhkKCkuZ2MoKX07Xy5HZD1mdW5jdGlvbiBQbShhLGIpe3JldHVybiBEbSh0aGlzLkhkKCkuYmQoYSxiKSl9O18uUGM9ZnVuY3Rpb24gUm0oKXtyZXR1cm4gdGhpcy5IZCgpLlFjKEtDKFNJLFVoZSwxLHRoaXMuSGQoKS5nYygpLDUsMSkpfTtfLlFjPWZ1bmN0aW9uIFNtKGEpe3JldHVybiB0aGlzLkhkKCkuUWMoYSl9O18uSWI9ZnVuY3Rpb24gVG0oKXtyZXR1cm4gZmNiKHRoaXMuSGQoKSl9O3ZhciB4Rj1tZGIoWmhlLCdGb3J3YXJkaW5nSW1tdXRhYmxlTGlzdCcsMjAwNik7YmNiKDcxNCwxLEFpZSk7Xy52Yz1mdW5jdGlvbiBjbigpe3JldHVybiBXbSh0aGlzKX07Xy53Yz1mdW5jdGlvbiBlbihhKXtzdGIodGhpcyxhKX07Xy5lYz1mdW5jdGlvbiBqbigpe3JldHVybiBYbSh0aGlzKX07Xy55Yz1mdW5jdGlvbiBrbihhLGIsYyl7cmV0dXJuIHR0Yih0aGlzLGEsYixjKX07Xy5DYz1mdW5jdGlvbiBybigpe3JldHVybiB0aGlzLkxkKCl9O18uJGI9ZnVuY3Rpb24gWm0oKXt0aHJvdyB2YmIobmV3IGJnYil9O18uX2I9ZnVuY3Rpb24gJG0oYSl7cmV0dXJuIHRoaXMueGMoYSkhPW51bGx9O18udWM9ZnVuY3Rpb24gX20oYSl7cmV0dXJuIHRoaXMuTGQoKS5IYyhhKX07Xy5KZD1mdW5jdGlvbiBhbigpe3JldHVybiBuZXcganEodGhpcyl9O18uS2Q9ZnVuY3Rpb24gYm4oKXtyZXR1cm4gbmV3IHNxKHRoaXMpfTtfLkZiPWZ1bmN0aW9uIGRuKGEpe3JldHVybiBEdih0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIGduKCl7cmV0dXJuIFdtKHRoaXMpLkhiKCl9O18uZGM9ZnVuY3Rpb24gaG4oKXtyZXR1cm4gdGhpcy5nYygpPT0wfTtfLnpjPWZ1bmN0aW9uIG5uKGEsYil7cmV0dXJuIFltKCl9O18uQmM9ZnVuY3Rpb24gb24oYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkliPWZ1bmN0aW9uIHBuKCl7cmV0dXJuIEp2KHRoaXMpfTtfLkxkPWZ1bmN0aW9uIHFuKCl7aWYodGhpcy5lKXtyZXR1cm4gdGhpcy5lfXJldHVybiB0aGlzLmU9dGhpcy5LZCgpfTtfLmM9bnVsbDtfLmQ9bnVsbDtfLmU9bnVsbDt2YXIgVW07dmFyIGlHPW1kYihaaGUsJ0ltbXV0YWJsZU1hcCcsNzE0KTtiY2IoNzE1LDcxNCxBaWUpO18uX2I9ZnVuY3Rpb24gdm4oYSl7cmV0dXJuIHNuKHRoaXMsYSl9O18udWM9ZnVuY3Rpb24gd24oYSl7cmV0dXJuIGRvYih0aGlzLmIsYSl9O18uSWQ9ZnVuY3Rpb24geG4oKXtyZXR1cm4gVm4obmV3IExuKHRoaXMpKX07Xy5KZD1mdW5jdGlvbiB5bigpe3JldHVybiBWbihnb2IodGhpcy5iKSl9O18uS2Q9ZnVuY3Rpb24gem4oKXtyZXR1cm4gUWwoKSxuZXcgWmwoaG9iKHRoaXMuYikpfTtfLkZiPWZ1bmN0aW9uIEFuKGEpe3JldHVybiBmb2IodGhpcy5iLGEpfTtfLnhjPWZ1bmN0aW9uIEJuKGEpe3JldHVybiB0bih0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIENuKCl7cmV0dXJuIHRiKHRoaXMuYi5jKX07Xy5kYz1mdW5jdGlvbiBEbigpe3JldHVybiB0aGlzLmIuYy5kYygpfTtfLmdjPWZ1bmN0aW9uIEVuKCl7cmV0dXJuIHRoaXMuYi5jLmdjKCl9O18uSWI9ZnVuY3Rpb24gRm4oKXtyZXR1cm4gZmNiKHRoaXMuYi5jKX07dmFyIHpGPW1kYihaaGUsJ0ZvcndhcmRpbmdJbW11dGFibGVNYXAnLDcxNSk7YmNiKDE5NzQsMTk3MyxCaWUpO18uQmQ9ZnVuY3Rpb24gR24oKXtyZXR1cm4gdGhpcy5NZCgpfTtfLkNkPWZ1bmN0aW9uIEhuKCl7cmV0dXJuIHRoaXMuTWQoKX07Xy5OYz1mdW5jdGlvbiBLbigpe3JldHVybiBuZXcgS3ViKHRoaXMsMSl9O18uRmI9ZnVuY3Rpb24gSW4oYSl7cmV0dXJuIGE9PT10aGlzfHx0aGlzLk1kKCkuRmIoYSl9O18uSGI9ZnVuY3Rpb24gSm4oKXtyZXR1cm4gdGhpcy5NZCgpLkhiKCl9O3ZhciBDRj1tZGIoWmhlLCdGb3J3YXJkaW5nU2V0JywxOTc0KTtiY2IoMTA2OSwxOTc0LEJpZSxMbik7Xy5CZD1mdW5jdGlvbiBObigpe3JldHVybiBlb2IodGhpcy5hLmIpfTtfLkNkPWZ1bmN0aW9uIE9uKCl7cmV0dXJuIGVvYih0aGlzLmEuYil9O18uSGM9ZnVuY3Rpb24gTW4oYil7aWYoSkQoYiw0MikmJkJEKGIsNDIpLmNkKCk9PW51bGwpe3JldHVybiBmYWxzZX10cnl7cmV0dXJuIERvYihlb2IodGhpcy5hLmIpLGIpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMjA1KSl7cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgdmJiKGEpfX07Xy5NZD1mdW5jdGlvbiBQbigpe3JldHVybiBlb2IodGhpcy5hLmIpfTtfLlFjPWZ1bmN0aW9uIFFuKGEpe3ZhciBiO2I9RW9iKGVvYih0aGlzLmEuYiksYSk7ZW9iKHRoaXMuYS5iKS5iLmdjKCk8Yi5sZW5ndGgmJk5DKGIsZW9iKHRoaXMuYS5iKS5iLmdjKCksbnVsbCk7cmV0dXJuIGJ9O3ZhciB5Rj1tZGIoWmhlLCdGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEnLDEwNjkpO2JjYigxOTgxLDE5ODAsQ2llKTtfLktjPWZ1bmN0aW9uIFRuKCl7cmV0dXJuIHRoaXMuRWQoKX07Xy5OYz1mdW5jdGlvbiBVbigpe3JldHVybiBuZXcgS3ViKHRoaXMsMSl9O18uRmI9ZnVuY3Rpb24gUm4oYSl7cmV0dXJuIEF4KHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gU24oKXtyZXR1cm4gQngodGhpcyl9O3ZhciBqRz1tZGIoWmhlLCdJbW11dGFibGVTZXQnLDE5ODEpO2JjYig3MDMsMTk4MSxDaWUpO18uS2M9ZnVuY3Rpb24gYW8oKXtyZXR1cm4gdnIobmV3IERuYih0aGlzLmEuYi5LYygpKSl9O18uSGM9ZnVuY3Rpb24gWG4oYSl7cmV0dXJuIGEhPW51bGwmJmhuYih0aGlzLmEsYSl9O18uSWM9ZnVuY3Rpb24gWW4oYSl7cmV0dXJuIGluYih0aGlzLmEsYSl9O18uSGI9ZnVuY3Rpb24gWm4oKXtyZXR1cm4gdGIodGhpcy5hLmIpfTtfLmRjPWZ1bmN0aW9uICRuKCl7cmV0dXJuIHRoaXMuYS5iLmRjKCl9O18uRWQ9ZnVuY3Rpb24gX24oKXtyZXR1cm4gdnIobmV3IERuYih0aGlzLmEuYi5LYygpKSl9O18uZ2M9ZnVuY3Rpb24gYm8oKXtyZXR1cm4gdGhpcy5hLmIuZ2MoKX07Xy5QYz1mdW5jdGlvbiBjbygpe3JldHVybiB0aGlzLmEuYi5QYygpfTtfLlFjPWZ1bmN0aW9uIGVvKGEpe3JldHVybiBrbmIodGhpcy5hLGEpfTtfLkliPWZ1bmN0aW9uIGZvKCl7cmV0dXJuIGZjYih0aGlzLmEuYil9O3ZhciBBRj1tZGIoWmhlLCdGb3J3YXJkaW5nSW1tdXRhYmxlU2V0Jyw3MDMpO2JjYigxOTc1LDE5NzQsRGllKTtfLkJkPWZ1bmN0aW9uIGdvKCl7cmV0dXJuIHRoaXMuYn07Xy5DZD1mdW5jdGlvbiBobygpe3JldHVybiB0aGlzLmJ9O18uTWQ9ZnVuY3Rpb24gaW8oKXtyZXR1cm4gdGhpcy5ifTtfLk5jPWZ1bmN0aW9uIGpvKCl7cmV0dXJuIG5ldyBSdWIodGhpcyl9O3ZhciBERj1tZGIoWmhlLCdGb3J3YXJkaW5nU29ydGVkU2V0JywxOTc1KTtiY2IoNTMzLDE5NzksQWllLHdvKTtfLkFjPWZ1bmN0aW9uIEZvKGEpe0xkKHRoaXMsYSl9O18uQ2M9ZnVuY3Rpb24gSW8oKXt2YXIgYTtyZXR1cm4gYT10aGlzLmQsbmV3IHVwKCFhPyh0aGlzLmQ9bmV3IGFwKHRoaXMpKTphKX07Xy4kYj1mdW5jdGlvbiB4bygpe2tvKHRoaXMpfTtfLl9iPWZ1bmN0aW9uIHlvKGEpe3JldHVybiAhIXVvKHRoaXMsYSxUYmIoSWJiKEVpZSxrZWIoVGJiKEliYihhPT1udWxsPzA6dGIoYSksRmllKSksMTUpKSkpfTtfLnVjPWZ1bmN0aW9uIHpvKGEpe3JldHVybiBsbyh0aGlzLGEpfTtfLmtjPWZ1bmN0aW9uIEFvKCl7cmV0dXJuIG5ldyBRbyh0aGlzLHRoaXMpfTtfLndjPWZ1bmN0aW9uIEJvKGEpe25vKHRoaXMsYSl9O18ueGM9ZnVuY3Rpb24gQ28oYSl7cmV0dXJuIG9vKHRoaXMsYSl9O18uZWM9ZnVuY3Rpb24gRG8oKXtyZXR1cm4gbmV3IEJwKHRoaXMpfTtfLnpjPWZ1bmN0aW9uIEVvKGEsYil7cmV0dXJuIHJvKHRoaXMsYSxiKX07Xy5CYz1mdW5jdGlvbiBHbyhhKXt2YXIgYjtiPXVvKHRoaXMsYSxUYmIoSWJiKEVpZSxrZWIoVGJiKEliYihhPT1udWxsPzA6dGIoYSksRmllKSksMTUpKSkpO2lmKCFiKXtyZXR1cm4gbnVsbH1lbHNle21vKHRoaXMsYik7Yi5lPW51bGw7Yi5jPW51bGw7cmV0dXJuIGIuaX19O18uZ2M9ZnVuY3Rpb24gSG8oKXtyZXR1cm4gdGhpcy5pfTtfLnBkPWZ1bmN0aW9uIEpvKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5kLG5ldyB1cCghYT8odGhpcy5kPW5ldyBhcCh0aGlzKSk6YSl9O18uZj0wO18uZz0wO18uaT0wO3ZhciBRRj1tZGIoWmhlLCdIYXNoQmlNYXAnLDUzMyk7YmNiKDUzNCwxLGFpZSk7Xy5OYj1mdW5jdGlvbiBNbyhhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBObygpe3JldHVybiBLbyh0aGlzKX07Xy5QYj1mdW5jdGlvbiBPbygpe3ZhciBhO2lmKCFLbyh0aGlzKSl7dGhyb3cgdmJiKG5ldyB1dGIpfWE9dGhpcy5jO3RoaXMuYz1hLmM7dGhpcy5mPWE7LS10aGlzLmQ7cmV0dXJuIHRoaXMuTmQoYSl9O18uUWI9ZnVuY3Rpb24gUG8oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXt0aHJvdyB2YmIobmV3IEFwYil9VmIoISF0aGlzLmYpO21vKHRoaXMuZSx0aGlzLmYpO3RoaXMuYj10aGlzLmUuZzt0aGlzLmY9bnVsbH07Xy5iPTA7Xy5kPTA7Xy5mPW51bGw7dmFyIE5GPW1kYihaaGUsJ0hhc2hCaU1hcC9JdHInLDUzNCk7YmNiKDEwMTEsNTM0LGFpZSxRbyk7Xy5OZD1mdW5jdGlvbiBSbyhhKXtyZXR1cm4gbmV3IFNvKHRoaXMsYSl9O3ZhciBGRj1tZGIoWmhlLCdIYXNoQmlNYXAvMScsMTAxMSk7YmNiKDEwMTIsMzQ1LGtpZSxTbyk7Xy5jZD1mdW5jdGlvbiBUbygpe3JldHVybiB0aGlzLmEuZ307Xy5kZD1mdW5jdGlvbiBVbygpe3JldHVybiB0aGlzLmEuaX07Xy5lZD1mdW5jdGlvbiBWbyhhKXt2YXIgYixjLGQ7Yz10aGlzLmEuaTtkPVRiYihJYmIoRWllLGtlYihUYmIoSWJiKGE9PW51bGw/MDp0YihhKSxGaWUpKSwxNSkpKTtpZihkPT10aGlzLmEuZiYmKFBEKGEpPT09UEQoYyl8fGEhPW51bGwmJnBiKGEsYykpKXtyZXR1cm4gYX1OYighdm8odGhpcy5iLmEsYSxkKSxhKTttbyh0aGlzLmIuYSx0aGlzLmEpO2I9bmV3ICRvKHRoaXMuYS5nLHRoaXMuYS5hLGEsZCk7cG8odGhpcy5iLmEsYix0aGlzLmEpO3RoaXMuYS5lPW51bGw7dGhpcy5hLmM9bnVsbDt0aGlzLmIuYj10aGlzLmIuYS5nO3RoaXMuYi5mPT10aGlzLmEmJih0aGlzLmIuZj1iKTt0aGlzLmE9YjtyZXR1cm4gY307dmFyIEVGPW1kYihaaGUsJ0hhc2hCaU1hcC8xL01hcEVudHJ5JywxMDEyKTtiY2IoMjM4LDM0NSx7MzQ1OjEsMjM4OjEsMzoxLDQyOjF9LFdvKTtfLmNkPWZ1bmN0aW9uIFhvKCl7cmV0dXJuIHRoaXMuZ307Xy5kZD1mdW5jdGlvbiBZbygpe3JldHVybiB0aGlzLml9O18uZWQ9ZnVuY3Rpb24gWm8oYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTt2YXIgWEY9bWRiKFpoZSwnSW1tdXRhYmxlRW50cnknLDIzOCk7YmNiKDMxNywyMzgsezM0NToxLDMxNzoxLDIzODoxLDM6MSw0MjoxfSwkbyk7Xy5hPTA7Xy5mPTA7dmFyIEdGPW1kYihaaGUsJ0hhc2hCaU1hcC9CaUVudHJ5JywzMTcpO2JjYig2MTAsMTk3OSxBaWUsYXApO18uQWM9ZnVuY3Rpb24ganAoYSl7TGQodGhpcyxhKX07Xy5DYz1mdW5jdGlvbiBtcCgpe3JldHVybiBuZXcgQnAodGhpcy5hKX07Xy4kYj1mdW5jdGlvbiBicCgpe2tvKHRoaXMuYSl9O18uX2I9ZnVuY3Rpb24gY3AoYSl7cmV0dXJuIGxvKHRoaXMuYSxhKX07Xy5rYz1mdW5jdGlvbiBkcCgpe3JldHVybiBuZXcgb3AodGhpcyx0aGlzLmEpfTtfLndjPWZ1bmN0aW9uIGVwKGEpe1FiKGEpO25vKHRoaXMuYSxuZXcgenAoYSkpfTtfLnhjPWZ1bmN0aW9uIGZwKGEpe3JldHVybiBfbyh0aGlzLGEpfTtfLmVjPWZ1bmN0aW9uIGdwKCl7cmV0dXJuIG5ldyB1cCh0aGlzKX07Xy56Yz1mdW5jdGlvbiBpcChhLGIpe3JldHVybiBzbyh0aGlzLmEsYSxiLGZhbHNlKX07Xy5CYz1mdW5jdGlvbiBrcChhKXt2YXIgYjtiPXZvKHRoaXMuYSxhLFRiYihJYmIoRWllLGtlYihUYmIoSWJiKGE9PW51bGw/MDp0YihhKSxGaWUpKSwxNSkpKSk7aWYoIWIpe3JldHVybiBudWxsfWVsc2V7bW8odGhpcy5hLGIpO2IuZT1udWxsO2IuYz1udWxsO3JldHVybiBiLmd9fTtfLmdjPWZ1bmN0aW9uIGxwKCl7cmV0dXJuIHRoaXMuYS5pfTtfLnBkPWZ1bmN0aW9uIG5wKCl7cmV0dXJuIG5ldyBCcCh0aGlzLmEpfTt2YXIgTUY9bWRiKFpoZSwnSGFzaEJpTWFwL0ludmVyc2UnLDYxMCk7YmNiKDEwMDgsNTM0LGFpZSxvcCk7Xy5OZD1mdW5jdGlvbiBwcChhKXtyZXR1cm4gbmV3IHFwKHRoaXMsYSl9O3ZhciBJRj1tZGIoWmhlLCdIYXNoQmlNYXAvSW52ZXJzZS8xJywxMDA4KTtiY2IoMTAwOSwzNDUsa2llLHFwKTtfLmNkPWZ1bmN0aW9uIHJwKCl7cmV0dXJuIHRoaXMuYS5pfTtfLmRkPWZ1bmN0aW9uIHNwKCl7cmV0dXJuIHRoaXMuYS5nfTtfLmVkPWZ1bmN0aW9uIHRwKGEpe3ZhciBiLGMsZDtkPXRoaXMuYS5nO2I9VGJiKEliYihFaWUsa2ViKFRiYihJYmIoYT09bnVsbD8wOnRiKGEpLEZpZSkpLDE1KSkpO2lmKGI9PXRoaXMuYS5hJiYoUEQoYSk9PT1QRChkKXx8YSE9bnVsbCYmcGIoYSxkKSkpe3JldHVybiBhfU5iKCF1byh0aGlzLmIuYS5hLGEsYiksYSk7bW8odGhpcy5iLmEuYSx0aGlzLmEpO2M9bmV3ICRvKGEsYix0aGlzLmEuaSx0aGlzLmEuZik7dGhpcy5hPWM7cG8odGhpcy5iLmEuYSxjLG51bGwpO3RoaXMuYi5iPXRoaXMuYi5hLmEuZztyZXR1cm4gZH07dmFyIEhGPW1kYihaaGUsJ0hhc2hCaU1hcC9JbnZlcnNlLzEvSW52ZXJzZUVudHJ5JywxMDA5KTtiY2IoNjExLDUzMixmaWUsdXApO18uS2M9ZnVuY3Rpb24gdnAoKXtyZXR1cm4gbmV3IHhwKHRoaXMuYS5hKX07Xy5NYz1mdW5jdGlvbiB3cChhKXt2YXIgYjtiPXZvKHRoaXMuYS5hLGEsVGJiKEliYihFaWUsa2ViKFRiYihJYmIoYT09bnVsbD8wOnRiKGEpLEZpZSkpLDE1KSkpKTtpZighYil7cmV0dXJuIGZhbHNlfWVsc2V7bW8odGhpcy5hLmEsYik7cmV0dXJuIHRydWV9fTt2YXIgS0Y9bWRiKFpoZSwnSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldCcsNjExKTtiY2IoMTAwNyw1MzQsYWllLHhwKTtfLk5kPWZ1bmN0aW9uIHlwKGEpe3JldHVybiBhLml9O3ZhciBKRj1tZGIoWmhlLCdIYXNoQmlNYXAvSW52ZXJzZS9JbnZlcnNlS2V5U2V0LzEnLDEwMDcpO2JjYigxMDEwLDEse30senApO18uT2Q9ZnVuY3Rpb24gQXAoYSxiKXtocCh0aGlzLmEsYSxiKX07dmFyIExGPW1kYihaaGUsJ0hhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUnLDEwMTApO2JjYig2MDksNTMyLGZpZSxCcCk7Xy5LYz1mdW5jdGlvbiBDcCgpe3JldHVybiBuZXcgRXAodGhpcy5hKX07Xy5NYz1mdW5jdGlvbiBEcChhKXt2YXIgYjtiPXVvKHRoaXMuYSxhLFRiYihJYmIoRWllLGtlYihUYmIoSWJiKGE9PW51bGw/MDp0YihhKSxGaWUpKSwxNSkpKSk7aWYoIWIpe3JldHVybiBmYWxzZX1lbHNle21vKHRoaXMuYSxiKTtiLmU9bnVsbDtiLmM9bnVsbDtyZXR1cm4gdHJ1ZX19O3ZhciBQRj1tZGIoWmhlLCdIYXNoQmlNYXAvS2V5U2V0Jyw2MDkpO2JjYigxMDA2LDUzNCxhaWUsRXApO18uTmQ9ZnVuY3Rpb24gRnAoYSl7cmV0dXJuIGEuZ307dmFyIE9GPW1kYihaaGUsJ0hhc2hCaU1hcC9LZXlTZXQvMScsMTAwNik7YmNiKDEwOTMsNjE5LF9oZSk7dmFyIFJGPW1kYihaaGUsJ0hhc2hNdWx0aW1hcEd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMnLDEwOTMpO2JjYigyNjUsMTA5MyxfaGUsSHApO18uaGM9ZnVuY3Rpb24gSXAoKXtyZXR1cm4gbmV3IFVxYihDdih0aGlzLmEpKX07Xy5nZD1mdW5jdGlvbiBKcCgpe3JldHVybiBuZXcgVXFiKEN2KHRoaXMuYSkpfTtfLmE9Mjt2YXIgU0Y9bWRiKFpoZSwnSGFzaE11bHRpbWFwJywyNjUpO2JjYigxOTk5LDE1Mix5aWUpO18uSGM9ZnVuY3Rpb24gTXAoYSl7cmV0dXJuIHRoaXMuUGQoKS5IYyhhKX07Xy5kYz1mdW5jdGlvbiBOcCgpe3JldHVybiB0aGlzLlBkKCkuZGMoKX07Xy5nYz1mdW5jdGlvbiBPcCgpe3JldHVybiB0aGlzLlBkKCkuZ2MoKX07dmFyIFRGPW1kYihaaGUsJ0ltbXV0YWJsZUFzTGlzdCcsMTk5OSk7YmNiKDE5MzEsNzE1LEFpZSk7Xy5MZD1mdW5jdGlvbiBRcCgpe3JldHVybiBRbCgpLG5ldyBveSh0aGlzLmEpfTtfLkNjPWZ1bmN0aW9uIFJwKCl7cmV0dXJuIFFsKCksbmV3IG95KHRoaXMuYSl9O18ucGQ9ZnVuY3Rpb24gU3AoKXtyZXR1cm4gUWwoKSxuZXcgb3kodGhpcy5hKX07dmFyIFVGPW1kYihaaGUsJ0ltbXV0YWJsZUJpTWFwJywxOTMxKTtiY2IoMTk3NywxLHt9KTt2YXIgVkY9bWRiKFpoZSwnSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyJywxOTc3KTtiY2IoMTAyMiw3MDMsQ2llLFRwKTt2YXIgWUY9bWRiKFpoZSwnSW1tdXRhYmxlRW51bVNldCcsMTAyMik7YmNiKDk2OSwzODYsJGhlLFZwKTtfLlhiPWZ1bmN0aW9uIFdwKGEpe3JldHVybiB0aGlzLmEuWGIoYSl9O3ZhciBaRj1tZGIoWmhlLCdJbW11dGFibGVMaXN0LzEnLDk2OSk7YmNiKDk2OCwxOTc3LHt9LFhwKTt2YXIgJEY9bWRiKFpoZSwnSW1tdXRhYmxlTGlzdC9CdWlsZGVyJyw5NjgpO2JjYig2MTQsMTk4LFloZSxZcCk7Xy5PYj1mdW5jdGlvbiBacCgpe3JldHVybiB0aGlzLmEuT2IoKX07Xy5QYj1mdW5jdGlvbiAkcCgpe3JldHVybiBCRCh0aGlzLmEuUGIoKSw0MikuY2QoKX07dmFyIGFHPW1kYihaaGUsJ0ltbXV0YWJsZU1hcC8xJyw2MTQpO2JjYigxMDQxLDEse30sX3ApO18uS2I9ZnVuY3Rpb24gYXEoYSl7cmV0dXJuIEJEKGEsNDIpLmNkKCl9O3ZhciBiRz1tZGIoWmhlLCdJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZScsMTA0MSk7YmNiKDEwNDAsMSx7fSxjcSk7dmFyIGNHPW1kYihaaGUsJ0ltbXV0YWJsZU1hcC9CdWlsZGVyJywxMDQwKTtiY2IoMjAwMCwxOTgxLENpZSk7Xy5LYz1mdW5jdGlvbiBncSgpe3ZhciBhO3JldHVybiBhPVdtKHRoaXMuYSkuRWQoKSxuZXcgWXAoYSl9O18uRGQ9ZnVuY3Rpb24gZHEoKXtyZXR1cm4gbmV3IEZxKHRoaXMpfTtfLkpjPWZ1bmN0aW9uIGVxKGEpe3ZhciBiLGM7UWIoYSk7Yz10aGlzLmdjKCk7Zm9yKGI9MDtiPGM7YisrKXthLnRkKEJEKFJsKFdtKHRoaXMuYSkpLlhiKGIpLDQyKS5jZCgpKX19O18uRWQ9ZnVuY3Rpb24gZnEoKXt2YXIgYTtyZXR1cm4gKGE9dGhpcy5jLCFhPyh0aGlzLmM9bmV3IEZxKHRoaXMpKTphKS5FZCgpfTtfLk5jPWZ1bmN0aW9uIGhxKCl7cmV0dXJuIFpqKHRoaXMuZ2MoKSwxMjk2LG5ldyBEcSh0aGlzKSl9O3ZhciBtRz1tZGIoWmhlLCdJbmRleGVkSW1tdXRhYmxlU2V0JywyMDAwKTtiY2IoMTE4MCwyMDAwLENpZSxqcSk7Xy5LYz1mdW5jdGlvbiBucSgpe3ZhciBhO3JldHVybiBhPVdtKHRoaXMuYSkuRWQoKSxuZXcgWXAoYSl9O18uSGM9ZnVuY3Rpb24ga3EoYSl7cmV0dXJuIHRoaXMuYS5fYihhKX07Xy5KYz1mdW5jdGlvbiBscShhKXtRYihhKTtzdGIodGhpcy5hLG5ldyBxcShhKSl9O18uRWQ9ZnVuY3Rpb24gbXEoKXt2YXIgYTtyZXR1cm4gYT1XbSh0aGlzLmEpLkVkKCksbmV3IFlwKGEpfTtfLmdjPWZ1bmN0aW9uIG9xKCl7cmV0dXJuIHRoaXMuYS5nYygpfTtfLk5jPWZ1bmN0aW9uIHBxKCl7cmV0dXJuICRqKFdtKHRoaXMuYSkuTmMoKSxuZXcgX3ApfTt2YXIgZUc9bWRiKFpoZSwnSW1tdXRhYmxlTWFwS2V5U2V0JywxMTgwKTtiY2IoMTE4MSwxLHt9LHFxKTtfLk9kPWZ1bmN0aW9uIHJxKGEsYil7UWwoKTt0aGlzLmEudGQoYSl9O3ZhciBkRz1tZGIoWmhlLCdJbW11dGFibGVNYXBLZXlTZXQvbGFtYmRhJDAkVHlwZScsMTE4MSk7YmNiKDExNzgsMTk4MCx4aWUsc3EpO18uS2M9ZnVuY3Rpb24gdnEoKXtyZXR1cm4gbmV3IEFxKHRoaXMpfTtfLkhjPWZ1bmN0aW9uIHRxKGEpe3JldHVybiBhIT1udWxsJiZqcihuZXcgQXEodGhpcyksYSl9O18uRWQ9ZnVuY3Rpb24gdXEoKXtyZXR1cm4gbmV3IEFxKHRoaXMpfTtfLmdjPWZ1bmN0aW9uIHdxKCl7cmV0dXJuIHRoaXMuYS5nYygpfTtfLk5jPWZ1bmN0aW9uIHhxKCl7cmV0dXJuICRqKFdtKHRoaXMuYSkuTmMoKSxuZXcgeXEpfTt2YXIgaEc9bWRiKFpoZSwnSW1tdXRhYmxlTWFwVmFsdWVzJywxMTc4KTtiY2IoMTE3OSwxLHt9LHlxKTtfLktiPWZ1bmN0aW9uIHpxKGEpe3JldHVybiBCRChhLDQyKS5kZCgpfTt2YXIgZkc9bWRiKFpoZSwnSW1tdXRhYmxlTWFwVmFsdWVzLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZScsMTE3OSk7YmNiKDYyNiwxOTgsWWhlLEFxKTtfLk9iPWZ1bmN0aW9uIEJxKCl7cmV0dXJuIHRoaXMuYS5PYigpfTtfLlBiPWZ1bmN0aW9uIENxKCl7cmV0dXJuIEJEKHRoaXMuYS5QYigpLDQyKS5kZCgpfTt2YXIgZ0c9bWRiKFpoZSwnSW1tdXRhYmxlTWFwVmFsdWVzLzEnLDYyNik7YmNiKDExODIsMSx7fSxEcSk7Xy5sZD1mdW5jdGlvbiBFcShhKXtyZXR1cm4gaXEodGhpcy5hLGEpfTt2YXIga0c9bWRiKFpoZSwnSW5kZXhlZEltbXV0YWJsZVNldC8wbWV0aG9kcmVmJGdldCRUeXBlJywxMTgyKTtiY2IoNzUyLDE5OTkseWllLEZxKTtfLlBkPWZ1bmN0aW9uIEdxKCl7cmV0dXJuIHRoaXMuYX07Xy5YYj1mdW5jdGlvbiBIcShhKXtyZXR1cm4gaXEodGhpcy5hLGEpfTtfLmdjPWZ1bmN0aW9uIElxKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9O3ZhciBsRz1tZGIoWmhlLCdJbmRleGVkSW1tdXRhYmxlU2V0LzEnLDc1Mik7YmNiKDQ0LDEse30sU3EpO18uS2I9ZnVuY3Rpb24gVHEoYSl7cmV0dXJuIEJEKGEsMjApLktjKCl9O18uRmI9ZnVuY3Rpb24gVXEoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgbkc9bWRiKFpoZSwnSXRlcmFibGVzLzEwJyw0NCk7YmNiKDEwNDIsNTM3LHZpZSxXcSk7Xy5KYz1mdW5jdGlvbiBYcShhKXtRYihhKTt0aGlzLmIuSmMobmV3ICRxKHRoaXMuYSxhKSl9O18uS2M9ZnVuY3Rpb24gWXEoKXtyZXR1cm4gVnEodGhpcyl9O3ZhciBwRz1tZGIoWmhlLCdJdGVyYWJsZXMvNCcsMTA0Mik7YmNiKDEwNDMsMSxxaWUsJHEpO18udGQ9ZnVuY3Rpb24gX3EoYSl7WnEodGhpcy5iLHRoaXMuYSxhKX07dmFyIG9HPW1kYihaaGUsJ0l0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUnLDEwNDMpO2JjYigxMDQ0LDUzNyx2aWUsYXIpO18uSmM9ZnVuY3Rpb24gYnIoYSl7UWIoYSk7cmViKHRoaXMuYSxuZXcgZHIoYSx0aGlzLmIpKX07Xy5LYz1mdW5jdGlvbiBjcigpe3JldHVybiB1cihuZXcgRnlkKHRoaXMuYSksdGhpcy5iKX07dmFyIHJHPW1kYihaaGUsJ0l0ZXJhYmxlcy81JywxMDQ0KTtiY2IoMTA0NSwxLHFpZSxkcik7Xy50ZD1mdW5jdGlvbiBlcihhKXt0aGlzLmEudGQoR2ZkKGEpKX07dmFyIHFHPW1kYihaaGUsJ0l0ZXJhYmxlcy81L2xhbWJkYSQwJFR5cGUnLDEwNDUpO2JjYigxMDcxLDE5OCxZaGUsd3IpO18uT2I9ZnVuY3Rpb24geHIoKXtyZXR1cm4gdGhpcy5hLk9iKCl9O18uUGI9ZnVuY3Rpb24geXIoKXtyZXR1cm4gdGhpcy5hLlBiKCl9O3ZhciBzRz1tZGIoWmhlLCdJdGVyYXRvcnMvMScsMTA3MSk7YmNiKDEwNzIsNjk5LFloZSx6cik7Xy5ZYj1mdW5jdGlvbiBBcigpe3ZhciBhO3doaWxlKHRoaXMuYi5PYigpKXthPXRoaXMuYi5QYigpO2lmKHRoaXMuYS5MYihhKSl7cmV0dXJuIGF9fXJldHVybiB0aGlzLmU9MixudWxsfTt2YXIgdEc9bWRiKFpoZSwnSXRlcmF0b3JzLzUnLDEwNzIpO2JjYig0ODcsMSxhaWUpO18uTmI9ZnVuY3Rpb24gQ3IoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gRHIoKXtyZXR1cm4gdGhpcy5iLk9iKCl9O18uUGI9ZnVuY3Rpb24gRXIoKXtyZXR1cm4gdGhpcy5RZCh0aGlzLmIuUGIoKSl9O18uUWI9ZnVuY3Rpb24gRnIoKXt0aGlzLmIuUWIoKX07dmFyIEtIPW1kYihaaGUsJ1RyYW5zZm9ybWVkSXRlcmF0b3InLDQ4Nyk7YmNiKDEwNzMsNDg3LGFpZSxHcik7Xy5RZD1mdW5jdGlvbiBIcihhKXtyZXR1cm4gdGhpcy5hLktiKGEpfTt2YXIgdUc9bWRiKFpoZSwnSXRlcmF0b3JzLzYnLDEwNzMpO2JjYig3MTcsMTk4LFloZSxJcik7Xy5PYj1mdW5jdGlvbiBKcigpe3JldHVybiAhdGhpcy5hfTtfLlBiPWZ1bmN0aW9uIEtyKCl7aWYodGhpcy5hKXt0aHJvdyB2YmIobmV3IHV0Yil9dGhpcy5hPXRydWU7cmV0dXJuIHRoaXMuYn07Xy5hPWZhbHNlO3ZhciB2Rz1tZGIoWmhlLCdJdGVyYXRvcnMvOScsNzE3KTtiY2IoMTA3MCwzODYsJGhlLE5yKTtfLlhiPWZ1bmN0aW9uIE9yKGEpe3JldHVybiB0aGlzLmFbdGhpcy5iK2FdfTtfLmI9MDt2YXIgTHI7dmFyIHdHPW1kYihaaGUsJ0l0ZXJhdG9ycy9BcnJheUl0cicsMTA3MCk7YmNiKDM5LDEsezM5OjEsNDc6MX0sU3IpO18uTmI9ZnVuY3Rpb24gVHIoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gVXIoKXtyZXR1cm4gUXIodGhpcyl9O18uUGI9ZnVuY3Rpb24gVnIoKXtyZXR1cm4gUnIodGhpcyl9O18uUWI9ZnVuY3Rpb24gV3IoKXtWYighIXRoaXMuYyk7dGhpcy5jLlFiKCk7dGhpcy5jPW51bGx9O3ZhciB4Rz1tZGIoWmhlLCdJdGVyYXRvcnMvQ29uY2F0ZW5hdGVkSXRlcmF0b3InLDM5KTtiY2IoMjIsMSx7MzoxLDM1OjEsMjI6MX0pO18ud2Q9ZnVuY3Rpb24gX3IoYSl7cmV0dXJuIFhyKHRoaXMsQkQoYSwyMikpfTtfLkZiPWZ1bmN0aW9uIGJzKGEpe3JldHVybiB0aGlzPT09YX07Xy5IYj1mdW5jdGlvbiBjcygpe3JldHVybiBGQ2IodGhpcyl9O18uSWI9ZnVuY3Rpb24gZHMoKXtyZXR1cm4gWnIodGhpcyl9O18uZz0wO3ZhciBDST1tZGIoUGhlLCdFbnVtJywyMik7YmNiKDUzOCwyMix7NTM4OjEsMzoxLDM1OjEsMjI6MSw0NzoxfSxpcyk7Xy5OYj1mdW5jdGlvbiBqcyhhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBrcygpe3JldHVybiBmYWxzZX07Xy5QYj1mdW5jdGlvbiBscygpe3Rocm93IHZiYihuZXcgdXRiKX07Xy5RYj1mdW5jdGlvbiBtcygpe1ZiKGZhbHNlKX07dmFyIGdzO3ZhciB5Rz1uZGIoWmhlLCdJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3InLDUzOCxDSSxvcyxucyk7dmFyIHBzO2JjYigxODM0LDYxOSxfaGUpO3ZhciBFRz1tZGIoWmhlLCdMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzJywxODM0KTtiY2IoMTgzNSwxODM0LF9oZSxzcyk7Xy5oYz1mdW5jdGlvbiB1cygpe3JldHVybiBuZXcgQXNiKEN2KHRoaXMuYikpfTtfLiRiPWZ1bmN0aW9uIHRzKCl7TmModGhpcyk7QXModGhpcy5hLHRoaXMuYSl9O18uZ2Q9ZnVuY3Rpb24gdnMoKXtyZXR1cm4gbmV3IEFzYihDdih0aGlzLmIpKX07Xy5pYz1mdW5jdGlvbiB3cyhhKXtyZXR1cm4gbmV3IFNzKHRoaXMsYSx0aGlzLmIpfTtfLmtjPWZ1bmN0aW9uIHhzKCl7cmV0dXJuIG5ldyBIcyh0aGlzKX07Xy5sYz1mdW5jdGlvbiB5cygpe3ZhciBhO3JldHVybiBuZXcgS3ViKChhPXRoaXMuZyxCRCghYT8odGhpcy5nPW5ldyBwaCh0aGlzKSk6YSwyMSkpLDE3KX07Xy5lYz1mdW5jdGlvbiB6cygpe3ZhciBhO3JldHVybiBhPXRoaXMuaSwhYT8odGhpcy5pPW5ldyB6Zih0aGlzLHRoaXMuYykpOmF9O18ubmM9ZnVuY3Rpb24gQ3MoKXtyZXR1cm4gbmV3IE92KG5ldyBIcyh0aGlzKSl9O18ub2M9ZnVuY3Rpb24gRHMoKXt2YXIgYTtyZXR1cm4gJGoobmV3IEt1YigoYT10aGlzLmcsQkQoIWE/KHRoaXMuZz1uZXcgcGgodGhpcykpOmEsMjEpKSwxNyksbmV3IEVzKX07Xy5iPTI7dmFyIEZHPW1kYihaaGUsJ0xpbmtlZEhhc2hNdWx0aW1hcCcsMTgzNSk7YmNiKDE4MzgsMSx7fSxFcyk7Xy5LYj1mdW5jdGlvbiBGcyhhKXtyZXR1cm4gQkQoYSw0MikuZGQoKX07dmFyIHpHPW1kYihaaGUsJ0xpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUnLDE4MzgpO2JjYig4MjQsMSxhaWUsSHMpO18uTmI9ZnVuY3Rpb24gSXMoYSl7UnJiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gS3MoKXtyZXR1cm4gR3ModGhpcyl9O18uT2I9ZnVuY3Rpb24gSnMoKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX07Xy5RYj1mdW5jdGlvbiBMcygpe1ZiKCEhdGhpcy5jKTtHYyh0aGlzLmIsdGhpcy5jLmcsdGhpcy5jLmkpO3RoaXMuYz1udWxsfTt2YXIgQUc9bWRiKFpoZSwnTGlua2VkSGFzaE11bHRpbWFwLzEnLDgyNCk7YmNiKDMzMCwyMzgsezM0NToxLDIzODoxLDMzMDoxLDIwMjA6MSwzOjEsNDI6MX0sTXMpO18uUmQ9ZnVuY3Rpb24gTnMoKXtyZXR1cm4gdGhpcy5mfTtfLlNkPWZ1bmN0aW9uIE9zKGEpe3RoaXMuYz1hfTtfLlRkPWZ1bmN0aW9uIFBzKGEpe3RoaXMuZj1hfTtfLmQ9MDt2YXIgQkc9bWRiKFpoZSwnTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnknLDMzMCk7YmNiKDE4MzYsMTk3MCx7MjAyMDoxLDIwOjEsMjg6MSwxNDoxLDIxOjF9LFNzKTtfLkZjPWZ1bmN0aW9uIFRzKGEpe3ZhciBiLGMsZCxlLGY7Zj1UYmIoSWJiKEVpZSxrZWIoVGJiKEliYihhPT1udWxsPzA6dGIoYSksRmllKSksMTUpKSk7Yj1mJnRoaXMuYi5sZW5ndGgtMTtlPXRoaXMuYltiXTtmb3IoYz1lO2M7Yz1jLmEpe2lmKGMuZD09ZiYmSGIoYy5pLGEpKXtyZXR1cm4gZmFsc2V9fWQ9bmV3IE1zKHRoaXMuYyxhLGYsZSk7QnModGhpcy5kLGQpO2QuZj10aGlzO3RoaXMuZD1kO0FzKHRoaXMuZy5hLmIsZCk7QXMoZCx0aGlzLmcuYSk7dGhpcy5iW2JdPWQ7Kyt0aGlzLmY7Kyt0aGlzLmU7UXModGhpcyk7cmV0dXJuIHRydWV9O18uJGI9ZnVuY3Rpb24gVXMoKXt2YXIgYSxiO0FsYih0aGlzLmIsbnVsbCk7dGhpcy5mPTA7Zm9yKGE9dGhpcy5hO2EhPXRoaXM7YT1hLlJkKCkpe2I9QkQoYSwzMzApO0FzKGIuYixiLmUpfXRoaXMuYT10aGlzO3RoaXMuZD10aGlzOysrdGhpcy5lfTtfLkhjPWZ1bmN0aW9uIFZzKGEpe3ZhciBiLGM7Yz1UYmIoSWJiKEVpZSxrZWIoVGJiKEliYihhPT1udWxsPzA6dGIoYSksRmllKSksMTUpKSk7Zm9yKGI9dGhpcy5iW2MmdGhpcy5iLmxlbmd0aC0xXTtiO2I9Yi5hKXtpZihiLmQ9PWMmJkhiKGIuaSxhKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07Xy5KYz1mdW5jdGlvbiBXcyhhKXt2YXIgYjtRYihhKTtmb3IoYj10aGlzLmE7YiE9dGhpcztiPWIuUmQoKSl7YS50ZChCRChiLDMzMCkuaSl9fTtfLlJkPWZ1bmN0aW9uIFhzKCl7cmV0dXJuIHRoaXMuYX07Xy5LYz1mdW5jdGlvbiBZcygpe3JldHVybiBuZXcgY3QodGhpcyl9O18uTWM9ZnVuY3Rpb24gWnMoYSl7cmV0dXJuIFJzKHRoaXMsYSl9O18uU2Q9ZnVuY3Rpb24gJHMoYSl7dGhpcy5kPWF9O18uVGQ9ZnVuY3Rpb24gX3MoYSl7dGhpcy5hPWF9O18uZ2M9ZnVuY3Rpb24gYXQoKXtyZXR1cm4gdGhpcy5mfTtfLmU9MDtfLmY9MDt2YXIgREc9bWRiKFpoZSwnTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlU2V0JywxODM2KTtiY2IoMTgzNywxLGFpZSxjdCk7Xy5OYj1mdW5jdGlvbiBkdChhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBldCgpe3JldHVybiBidCh0aGlzKSx0aGlzLmIhPXRoaXMuY307Xy5QYj1mdW5jdGlvbiBmdCgpe3ZhciBhLGI7YnQodGhpcyk7aWYodGhpcy5iPT10aGlzLmMpe3Rocm93IHZiYihuZXcgdXRiKX1hPUJEKHRoaXMuYiwzMzApO2I9YS5pO3RoaXMuZD1hO3RoaXMuYj1hLmY7cmV0dXJuIGJ9O18uUWI9ZnVuY3Rpb24gZ3QoKXtidCh0aGlzKTtWYighIXRoaXMuZCk7UnModGhpcy5jLHRoaXMuZC5pKTt0aGlzLmE9dGhpcy5jLmU7dGhpcy5kPW51bGx9O18uYT0wO3ZhciBDRz1tZGIoWmhlLCdMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVTZXQvMScsMTgzNyk7YmNiKDc2NiwxOTg2LF9oZSxtdCk7Xy5aYj1mdW5jdGlvbiBudCgpe3ZhciBhO3JldHVybiBhPXRoaXMuZiwhYT8odGhpcy5mPW5ldyBqdyh0aGlzKSk6YX07Xy5GYj1mdW5jdGlvbiB0dChhKXtyZXR1cm4gaHcodGhpcyxhKX07Xy5jYz1mdW5jdGlvbiB1dChhKXtyZXR1cm4gbmV3IGJ1KHRoaXMsYSl9O18uZmM9ZnVuY3Rpb24geHQoYSl7cmV0dXJuIGt0KHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gcHQoKXtpdCh0aGlzKX07Xy5fYj1mdW5jdGlvbiBxdChhKXtyZXR1cm4ganQodGhpcyxhKX07Xy5hYz1mdW5jdGlvbiBydCgpe3JldHVybiBuZXcgancodGhpcyl9O18uYmM9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gbmV3IGV1KHRoaXMpfTtfLnFjPWZ1bmN0aW9uIHZ0KGEpe3JldHVybiBuZXcgYnUodGhpcyxhKX07Xy5kYz1mdW5jdGlvbiB3dCgpe3JldHVybiAhdGhpcy5hfTtfLnJjPWZ1bmN0aW9uIHl0KGEpe3JldHVybiBrdCh0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIHp0KCl7cmV0dXJuIHRoaXMuZH07Xy5jPTA7Xy5kPTA7dmFyIE1HPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcCcsNzY2KTtiY2IoNTIsMjgsTGllKTtfLmFkPWZ1bmN0aW9uIFB0KGEpe2t0Yih0aGlzLGEpfTtfLk5jPWZ1bmN0aW9uIFF0KCl7cmV0dXJuIG5ldyBLdWIodGhpcywxNil9O18uVmM9ZnVuY3Rpb24gQ3QoYSxiKXt0aHJvdyB2YmIobmV3IGNnYignQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0JykpfTtfLkZjPWZ1bmN0aW9uIER0KGEpe3RoaXMuVmModGhpcy5nYygpLGEpO3JldHVybiB0cnVlfTtfLldjPWZ1bmN0aW9uIEV0KGEsYil7dmFyIGMsZCxlO3VDYihiKTtjPWZhbHNlO2ZvcihlPWIuS2MoKTtlLk9iKCk7KXtkPWUuUGIoKTt0aGlzLlZjKGErKyxkKTtjPXRydWV9cmV0dXJuIGN9O18uJGI9ZnVuY3Rpb24gRnQoKXt0aGlzLlVkKDAsdGhpcy5nYygpKX07Xy5GYj1mdW5jdGlvbiBHdChhKXtyZXR1cm4gQXQodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBIdCgpe3JldHVybiBxbWIodGhpcyl9O18uWGM9ZnVuY3Rpb24gSXQoYSl7cmV0dXJuIEJ0KHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gSnQoKXtyZXR1cm4gbmV3IHZpYih0aGlzKX07Xy5ZYz1mdW5jdGlvbiBLdCgpe3JldHVybiB0aGlzLlpjKDApfTtfLlpjPWZ1bmN0aW9uIEx0KGEpe3JldHVybiBuZXcgQmliKHRoaXMsYSl9O18uJGM9ZnVuY3Rpb24gTXQoYSl7dGhyb3cgdmJiKG5ldyBjZ2IoJ1JlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCcpKX07Xy5VZD1mdW5jdGlvbiBOdChhLGIpe3ZhciBjLGQ7ZD10aGlzLlpjKGEpO2ZvcihjPWE7YzxiOysrYyl7ZC5QYigpO2QuUWIoKX19O18uX2M9ZnVuY3Rpb24gT3QoYSxiKXt0aHJvdyB2YmIobmV3IGNnYignU2V0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0JykpfTtfLmJkPWZ1bmN0aW9uIFJ0KGEsYil7cmV0dXJuIG5ldyBKaWIodGhpcyxhLGIpfTtfLmo9MDt2YXIga0o9bWRiKGJpZSwnQWJzdHJhY3RMaXN0Jyw1Mik7YmNiKDE5NjQsNTIsTGllKTtfLlZjPWZ1bmN0aW9uIFd0KGEsYil7U3QodGhpcyxhLGIpfTtfLldjPWZ1bmN0aW9uIFh0KGEsYil7cmV0dXJuIFR0KHRoaXMsYSxiKX07Xy5YYj1mdW5jdGlvbiBZdChhKXtyZXR1cm4gVXQodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBadCgpe3JldHVybiB0aGlzLlpjKDApfTtfLiRjPWZ1bmN0aW9uICR0KGEpe3JldHVybiBWdCh0aGlzLGEpfTtfLl9jPWZ1bmN0aW9uIF90KGIsYyl7dmFyIGQsZTtkPXRoaXMuWmMoYik7dHJ5e2U9ZC5QYigpO2QuV2IoYyk7cmV0dXJuIGV9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMDkpKXt0aHJvdyB2YmIobmV3IHFjYihcIkNhbid0IHNldCBlbGVtZW50IFwiK2IpKX1lbHNlIHRocm93IHZiYihhKX19O3ZhciB5Sj1tZGIoYmllLCdBYnN0cmFjdFNlcXVlbnRpYWxMaXN0JywxOTY0KTtiY2IoNjM2LDE5NjQsTGllLGJ1KTtfLlpjPWZ1bmN0aW9uIGN1KGEpe3JldHVybiBhdSh0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIGR1KCl7dmFyIGE7YT1CRChPaGIodGhpcy5hLmIsdGhpcy5iKSwyODMpO3JldHVybiAhYT8wOmEuYX07dmFyIEhHPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcC8xJyw2MzYpO2JjYigxMjk3LDE5NzAsZmllLGV1KTtfLkhjPWZ1bmN0aW9uIGZ1KGEpe3JldHVybiBqdCh0aGlzLmEsYSl9O18uS2M9ZnVuY3Rpb24gZ3UoKXtyZXR1cm4gbmV3IGt1KHRoaXMuYSl9O18uTWM9ZnVuY3Rpb24gaHUoYSl7cmV0dXJuICFrdCh0aGlzLmEsYSkuYS5kYygpfTtfLmdjPWZ1bmN0aW9uIGl1KCl7cmV0dXJuIFZoYih0aGlzLmEuYil9O3ZhciBHRz1tZGIoWmhlLCdMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwnLDEyOTcpO2JjYigxMjk2LDEsYWllLGt1KTtfLk5iPWZ1bmN0aW9uIGx1KGEpe1JyYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIG11KCl7anUodGhpcyk7cmV0dXJuICEhdGhpcy5jfTtfLlBiPWZ1bmN0aW9uIG51KCl7anUodGhpcyk7b3QodGhpcy5jKTt0aGlzLmE9dGhpcy5jO1FxYih0aGlzLmQsdGhpcy5hLmEpO2Rve3RoaXMuYz10aGlzLmMuYn13aGlsZSghIXRoaXMuYyYmIVFxYih0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9O18uUWI9ZnVuY3Rpb24gb3UoKXtqdSh0aGlzKTtWYighIXRoaXMuYSk7aXIobmV3IHd1KHRoaXMuZSx0aGlzLmEuYSkpO3RoaXMuYT1udWxsO3RoaXMuYj10aGlzLmUuY307Xy5iPTA7dmFyIElHPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yJywxMjk2KTtiY2IoMjgzLDEsezI4MzoxfSxwdSk7Xy5hPTA7dmFyIEpHPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcC9LZXlMaXN0JywyODMpO2JjYigxMjk1LDM0NSxraWUscXUpO18uY2Q9ZnVuY3Rpb24gcnUoKXtyZXR1cm4gdGhpcy5hfTtfLmRkPWZ1bmN0aW9uIHN1KCl7cmV0dXJuIHRoaXMuZn07Xy5lZD1mdW5jdGlvbiB0dShhKXt2YXIgYjtiPXRoaXMuZjt0aGlzLmY9YTtyZXR1cm4gYn07dmFyIEtHPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcC9Ob2RlJywxMjk1KTtiY2IoNTYwLDEsamllLHd1LHh1KTtfLk5iPWZ1bmN0aW9uIHp1KGEpe1JyYih0aGlzLGEpfTtfLlJiPWZ1bmN0aW9uIHl1KGEpe3RoaXMuZT1odCh0aGlzLmYsdGhpcy5iLGEsdGhpcy5jKTsrK3RoaXMuZDt0aGlzLmE9bnVsbH07Xy5PYj1mdW5jdGlvbiBBdSgpe3JldHVybiAhIXRoaXMuY307Xy5TYj1mdW5jdGlvbiBCdSgpe3JldHVybiAhIXRoaXMuZX07Xy5QYj1mdW5jdGlvbiBDdSgpe3JldHVybiB1dSh0aGlzKX07Xy5UYj1mdW5jdGlvbiBEdSgpe3JldHVybiB0aGlzLmR9O18uVWI9ZnVuY3Rpb24gRXUoKXtyZXR1cm4gdnUodGhpcyl9O18uVmI9ZnVuY3Rpb24gRnUoKXtyZXR1cm4gdGhpcy5kLTF9O18uUWI9ZnVuY3Rpb24gR3UoKXtWYighIXRoaXMuYSk7aWYodGhpcy5hIT10aGlzLmMpe3RoaXMuZT10aGlzLmEuZTstLXRoaXMuZH1lbHNle3RoaXMuYz10aGlzLmEuY31sdCh0aGlzLmYsdGhpcy5hKTt0aGlzLmE9bnVsbH07Xy5XYj1mdW5jdGlvbiBIdShhKXtVYighIXRoaXMuYSk7dGhpcy5hLmY9YX07Xy5kPTA7dmFyIExHPW1kYihaaGUsJ0xpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yJyw1NjApO2JjYigxMDE4LDUyLExpZSk7Xy5WYz1mdW5jdGlvbiBUdShhLGIpe3RoaXMuYS5WYyhhLGIpfTtfLldjPWZ1bmN0aW9uIFV1KGEsYil7cmV0dXJuIHRoaXMuYS5XYyhhLGIpfTtfLkhjPWZ1bmN0aW9uIFZ1KGEpe3JldHVybiB0aGlzLmEuSGMoYSl9O18uWGI9ZnVuY3Rpb24gV3UoYSl7cmV0dXJuIHRoaXMuYS5YYihhKX07Xy4kYz1mdW5jdGlvbiBYdShhKXtyZXR1cm4gdGhpcy5hLiRjKGEpfTtfLl9jPWZ1bmN0aW9uIFl1KGEsYil7cmV0dXJuIHRoaXMuYS5fYyhhLGIpfTtfLmdjPWZ1bmN0aW9uIFp1KCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgT0c9bWRiKFpoZSwnTGlzdHMvQWJzdHJhY3RMaXN0V3JhcHBlcicsMTAxOCk7YmNiKDEwMTksMTAxOCxOaWUpO3ZhciBQRz1tZGIoWmhlLCdMaXN0cy9SYW5kb21BY2Nlc3NMaXN0V3JhcHBlcicsMTAxOSk7YmNiKDEwMjEsMTAxOSxOaWUsJHUpO18uWmM9ZnVuY3Rpb24gX3UoYSl7cmV0dXJuIHRoaXMuYS5aYyhhKX07dmFyIE5HPW1kYihaaGUsJ0xpc3RzLzEnLDEwMjEpO2JjYigxMzEsNTIsezEzMToxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MX0sZHYpO18uVmM9ZnVuY3Rpb24gZXYoYSxiKXt0aGlzLmEuVmMoY3YodGhpcyxhKSxiKX07Xy4kYj1mdW5jdGlvbiBmdigpe3RoaXMuYS4kYigpfTtfLlhiPWZ1bmN0aW9uIGd2KGEpe3JldHVybiB0aGlzLmEuWGIoYnYodGhpcyxhKSl9O18uS2M9ZnVuY3Rpb24gaHYoKXtyZXR1cm4gYXYodGhpcywwKX07Xy5aYz1mdW5jdGlvbiBpdihhKXtyZXR1cm4gYXYodGhpcyxhKX07Xy4kYz1mdW5jdGlvbiBqdihhKXtyZXR1cm4gdGhpcy5hLiRjKGJ2KHRoaXMsYSkpfTtfLlVkPWZ1bmN0aW9uIGt2KGEsYil7KFRiKGEsYix0aGlzLmEuZ2MoKSksU3UodGhpcy5hLmJkKGN2KHRoaXMsYiksY3YodGhpcyxhKSkpKS4kYigpfTtfLl9jPWZ1bmN0aW9uIGx2KGEsYil7cmV0dXJuIHRoaXMuYS5fYyhidih0aGlzLGEpLGIpfTtfLmdjPWZ1bmN0aW9uIG12KCl7cmV0dXJuIHRoaXMuYS5nYygpfTtfLmJkPWZ1bmN0aW9uIG52KGEsYil7cmV0dXJuIFRiKGEsYix0aGlzLmEuZ2MoKSksU3UodGhpcy5hLmJkKGN2KHRoaXMsYiksY3YodGhpcyxhKSkpfTt2YXIgU0c9bWRiKFpoZSwnTGlzdHMvUmV2ZXJzZUxpc3QnLDEzMSk7YmNiKDI4MCwxMzEsezEzMToxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxvdik7dmFyIFFHPW1kYihaaGUsJ0xpc3RzL1JhbmRvbUFjY2Vzc1JldmVyc2VMaXN0JywyODApO2JjYigxMDIwLDEsamllLHF2KTtfLk5iPWZ1bmN0aW9uIHN2KGEpe1JyYih0aGlzLGEpfTtfLlJiPWZ1bmN0aW9uIHJ2KGEpe3RoaXMuYy5SYihhKTt0aGlzLmMuVWIoKTt0aGlzLmE9ZmFsc2V9O18uT2I9ZnVuY3Rpb24gdHYoKXtyZXR1cm4gdGhpcy5jLlNiKCl9O18uU2I9ZnVuY3Rpb24gdXYoKXtyZXR1cm4gdGhpcy5jLk9iKCl9O18uUGI9ZnVuY3Rpb24gdnYoKXtyZXR1cm4gcHYodGhpcyl9O18uVGI9ZnVuY3Rpb24gd3YoKXtyZXR1cm4gY3YodGhpcy5iLHRoaXMuYy5UYigpKX07Xy5VYj1mdW5jdGlvbiB4digpe2lmKCF0aGlzLmMuT2IoKSl7dGhyb3cgdmJiKG5ldyB1dGIpfXRoaXMuYT10cnVlO3JldHVybiB0aGlzLmMuUGIoKX07Xy5WYj1mdW5jdGlvbiB5digpe3JldHVybiBjdih0aGlzLmIsdGhpcy5jLlRiKCkpLTF9O18uUWI9ZnVuY3Rpb24genYoKXtWYih0aGlzLmEpO3RoaXMuYy5RYigpO3RoaXMuYT1mYWxzZX07Xy5XYj1mdW5jdGlvbiBBdihhKXtVYih0aGlzLmEpO3RoaXMuYy5XYihhKX07Xy5hPWZhbHNlO3ZhciBSRz1tZGIoWmhlLCdMaXN0cy9SZXZlcnNlTGlzdC8xJywxMDIwKTtiY2IoNDMyLDQ4NyxhaWUsTXYpO18uUWQ9ZnVuY3Rpb24gTnYoYSl7cmV0dXJuIEx2KGEpfTt2YXIgVEc9bWRiKFpoZSwnTWFwcy8xJyw0MzIpO2JjYig2OTgsNDg3LGFpZSxPdik7Xy5RZD1mdW5jdGlvbiBQdihhKXtyZXR1cm4gQkQoYSw0MikuZGQoKX07dmFyIFVHPW1kYihaaGUsJ01hcHMvMicsNjk4KTtiY2IoOTYyLDQ4NyxhaWUsUXYpO18uUWQ9ZnVuY3Rpb24gUnYoYSl7cmV0dXJuIG5ldyBXbyhhLHd3KHRoaXMuYSxhKSl9O3ZhciBWRz1tZGIoWmhlLCdNYXBzLzMnLDk2Mik7YmNiKDk1OSwxOTcxLGZpZSxTdik7Xy5KYz1mdW5jdGlvbiBUdihhKXttaih0aGlzLmEsYSl9O18uS2M9ZnVuY3Rpb24gVXYoKXtyZXR1cm4gdGhpcy5hLmtjKCl9O18uUmM9ZnVuY3Rpb24gVnYoKXtyZXR1cm4gdGhpcy5hfTtfLk5jPWZ1bmN0aW9uIFd2KCl7cmV0dXJuIHRoaXMuYS5sYygpfTt2YXIgWEc9bWRiKFpoZSwnTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMScsOTU5KTtiY2IoOTYwLDEse30sWHYpO18uT2Q9ZnVuY3Rpb24gWXYoYSxiKXt0aGlzLmEudGQoYSl9O3ZhciBaRz1tZGIoWmhlLCdNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlJyw5NjApO2JjYig5NTgsMjgsZGllLFp2KTtfLiRiPWZ1bmN0aW9uICR2KCl7dGhpcy5hLiRiKCl9O18uSGM9ZnVuY3Rpb24gX3YoYSl7cmV0dXJuIHRoaXMuYS51YyhhKX07Xy5KYz1mdW5jdGlvbiBhdyhhKXtRYihhKTt0aGlzLmEud2MobmV3IGZ3KGEpKX07Xy5kYz1mdW5jdGlvbiBidygpe3JldHVybiB0aGlzLmEuZGMoKX07Xy5LYz1mdW5jdGlvbiBjdygpe3JldHVybiBuZXcgT3YodGhpcy5hLnZjKCkuS2MoKSl9O18uTWM9ZnVuY3Rpb24gZHcoYil7dmFyIGMsZDt0cnl7cmV0dXJuIHplKHRoaXMsYix0cnVlKX1jYXRjaChhKXthPXViYihhKTtpZihKRChhLDQxKSl7Zm9yKGQ9dGhpcy5hLnZjKCkuS2MoKTtkLk9iKCk7KXtjPUJEKGQuUGIoKSw0Mik7aWYoSGIoYixjLmRkKCkpKXt0aGlzLmEuQmMoYy5jZCgpKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgdmJiKGEpfX07Xy5nYz1mdW5jdGlvbiBldygpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIGFIPW1kYihaaGUsJ01hcHMvVmFsdWVzJyw5NTgpO2JjYig5NjEsMSx7fSxmdyk7Xy5PZD1mdW5jdGlvbiBndyhhLGIpe3RoaXMuYS50ZChiKX07dmFyIF9HPW1kYihaaGUsJ01hcHMvVmFsdWVzL2xhbWJkYSQwJFR5cGUnLDk2MSk7YmNiKDczNiwxOTg3LGNpZSxqdyk7Xy54Yz1mdW5jdGlvbiBudyhhKXtyZXR1cm4gdGhpcy5hLl9iKGEpP3RoaXMuYS5jYyhhKTpudWxsfTtfLkJjPWZ1bmN0aW9uIHF3KGEpe3JldHVybiB0aGlzLmEuX2IoYSk/dGhpcy5hLmZjKGEpOm51bGx9O18uJGI9ZnVuY3Rpb24ga3coKXt0aGlzLmEuJGIoKX07Xy5fYj1mdW5jdGlvbiBsdyhhKXtyZXR1cm4gdGhpcy5hLl9iKGEpfTtfLkVjPWZ1bmN0aW9uIG13KCl7cmV0dXJuIG5ldyBzdyh0aGlzKX07Xy5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9O18uZGM9ZnVuY3Rpb24gb3coKXtyZXR1cm4gdGhpcy5hLmRjKCl9O18uZWM9ZnVuY3Rpb24gcHcoKXtyZXR1cm4gdGhpcy5hLmVjKCl9O18uZ2M9ZnVuY3Rpb24gcncoKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX07dmFyIGVIPW1kYihaaGUsJ011bHRpbWFwcy9Bc01hcCcsNzM2KTtiY2IoMTEwNCwxOTcxLGZpZSxzdyk7Xy5LYz1mdW5jdGlvbiB0dygpe3JldHVybiBCdih0aGlzLmEuYS5lYygpLG5ldyB4dyh0aGlzKSl9O18uUmM9ZnVuY3Rpb24gdXcoKXtyZXR1cm4gdGhpcy5hfTtfLk1jPWZ1bmN0aW9uIHZ3KGEpe3ZhciBiO2lmKCFaZSh0aGlzLGEpKXtyZXR1cm4gZmFsc2V9Yj1CRChhLDQyKTtpdyh0aGlzLmEsYi5jZCgpKTtyZXR1cm4gdHJ1ZX07dmFyIGRIPW1kYihaaGUsJ011bHRpbWFwcy9Bc01hcC9FbnRyeVNldCcsMTEwNCk7YmNiKDExMDgsMSx7fSx4dyk7Xy5LYj1mdW5jdGlvbiB5dyhhKXtyZXR1cm4gd3codGhpcyxhKX07Xy5GYj1mdW5jdGlvbiB6dyhhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBjSD1tZGIoWmhlLCdNdWx0aW1hcHMvQXNNYXAvRW50cnlTZXQvMScsMTEwOCk7YmNiKDU0MywxOTg5LHs1NDM6MSw4MzU6MSwyMDoxLDI4OjEsMTQ6MX0sQ3cpO18uJGI9ZnVuY3Rpb24gRHcoKXtOYyh0aGlzLmEpfTtfLkhjPWZ1bmN0aW9uIEV3KGEpe3JldHVybiBPYyh0aGlzLmEsYSl9O18uSmM9ZnVuY3Rpb24gRncoYSl7UWIoYSk7cmViKFBjKHRoaXMuYSksbmV3IFJ3KGEpKX07Xy5LYz1mdW5jdGlvbiBHdygpe3JldHVybiBuZXcgTXYoUGModGhpcy5hKS5hLmtjKCkpfTtfLmdjPWZ1bmN0aW9uIEh3KCl7cmV0dXJuIHRoaXMuYS5kfTtfLk5jPWZ1bmN0aW9uIEl3KCl7cmV0dXJuICRqKFBjKHRoaXMuYSkuTmMoKSxuZXcgSncpfTt2YXIga0g9bWRiKFpoZSwnTXVsdGltYXBzL0tleXMnLDU0Myk7YmNiKDExMDYsMSx7fSxKdyk7Xy5LYj1mdW5jdGlvbiBLdyhhKXtyZXR1cm4gQkQoYSw0MikuY2QoKX07dmFyIGdIPW1kYihaaGUsJ011bHRpbWFwcy9LZXlzLzBtZXRob2RyZWYkZ2V0S2V5JFR5cGUnLDExMDYpO2JjYigxMTA1LDQ4NyxhaWUsTHcpO18uUWQ9ZnVuY3Rpb24gTXcoYSl7cmV0dXJuIG5ldyBRdyhCRChhLDQyKSl9O3ZhciBpSD1tZGIoWmhlLCdNdWx0aW1hcHMvS2V5cy8xJywxMTA1KTtiY2IoMTk5MCwxLHs0MTY6MX0pO18uRmI9ZnVuY3Rpb24gTncoYSl7dmFyIGI7aWYoSkQoYSw0OTIpKXtiPUJEKGEsNDE2KTtyZXR1cm4gQkQodGhpcy5hLmRkKCksMTQpLmdjKCk9PUJEKGIuYS5kZCgpLDE0KS5nYygpJiZIYih0aGlzLmEuY2QoKSxiLmEuY2QoKSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIE93KCl7dmFyIGE7YT10aGlzLmEuY2QoKTtyZXR1cm4gKGE9PW51bGw/MDp0YihhKSleQkQodGhpcy5hLmRkKCksMTQpLmdjKCl9O18uSWI9ZnVuY3Rpb24gUHcoKXt2YXIgYSxiO2I9eGZiKHRoaXMuYS5jZCgpKTthPUJEKHRoaXMuYS5kZCgpLDE0KS5nYygpO3JldHVybiBhPT0xP2I6YisnIHggJythfTt2YXIgb0g9bWRiKFpoZSwnTXVsdGlzZXRzL0Fic3RyYWN0RW50cnknLDE5OTApO2JjYig0OTIsMTk5MCx7NDkyOjEsNDE2OjF9LFF3KTt2YXIgaEg9bWRiKFpoZSwnTXVsdGltYXBzL0tleXMvMS8xJyw0OTIpO2JjYigxMTA3LDEscWllLFJ3KTtfLnRkPWZ1bmN0aW9uIFN3KGEpe3RoaXMuYS50ZChCRChhLDQyKS5jZCgpKX07dmFyIGpIPW1kYihaaGUsJ011bHRpbWFwcy9LZXlzL2xhbWJkYSQxJFR5cGUnLDExMDcpO2JjYigxMTEwLDEscWllLFZ3KTtfLnRkPWZ1bmN0aW9uIFd3KGEpe1R3KEJEKGEsNDE2KSl9O3ZhciBsSD1tZGIoWmhlLCdNdWx0aXNldC9sYW1iZGEkMCRUeXBlJywxMTEwKTtiY2IoNzM3LDEscWllLFh3KTtfLnRkPWZ1bmN0aW9uIFl3KGEpe1V3KHRoaXMuYSxCRChhLDQxNikpfTt2YXIgbUg9bWRiKFpoZSwnTXVsdGlzZXQvbGFtYmRhJDEkVHlwZScsNzM3KTtiY2IoMTExMSwxLHt9LGJ4KTt2YXIgbkg9bWRiKFpoZSwnTXVsdGlzZXRzLzBtZXRob2RyZWYkYWRkJFR5cGUnLDExMTEpO2JjYig3MzgsMSx7fSxjeCk7Xy5LYj1mdW5jdGlvbiBkeChhKXtyZXR1cm4gX3coQkQoYSw0MTYpKX07dmFyIHFIPW1kYihaaGUsJ011bHRpc2V0cy9sYW1iZGEkMyRUeXBlJyw3MzgpO2JjYigyMDA4LDEsUWhlKTt2YXIgckg9bWRiKFpoZSwnUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzJywyMDA4KTtiY2IoNTE0LDIwMDgsezE2OToxLDUxNDoxLDM6MSw0NToxfSxneCk7Xy5MYj1mdW5jdGlvbiBoeChhKXtyZXR1cm4gZngodGhpcyxCRChhLDM1KSl9O18uTWI9ZnVuY3Rpb24gbHgoYSl7cmV0dXJuIGZ4KHRoaXMsQkQoYSwzNSkpfTtfLkZiPWZ1bmN0aW9uIGp4KGEpe3ZhciBiO2lmKEpEKGEsNTE0KSl7Yj1CRChhLDUxNCk7cmV0dXJuIEVrKHRoaXMuYSxiLmEpJiZFayh0aGlzLmIsYi5iKX1yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24ga3goKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9O18uSWI9ZnVuY3Rpb24gbXgoKXtyZXR1cm4gbngodGhpcy5hLHRoaXMuYil9O3ZhciBzSD1tZGIoWmhlLCdSYW5nZScsNTE0KTtiY2IoNzc4LDE5OTkseWllLHB4KTtfLlpjPWZ1bmN0aW9uIHR4KGEpe3JldHVybiBqbSh0aGlzLmIsYSl9O18uUGQ9ZnVuY3Rpb24gcXgoKXtyZXR1cm4gdGhpcy5hfTtfLlhiPWZ1bmN0aW9uIHJ4KGEpe3JldHVybiBFbSh0aGlzLmIsYSl9O18uRmQ9ZnVuY3Rpb24gc3goYSl7cmV0dXJuIGptKHRoaXMuYixhKX07dmFyIHRIPW1kYihaaGUsJ1JlZ3VsYXJJbW11dGFibGVBc0xpc3QnLDc3OCk7YmNiKDY0NiwyMDA2LHlpZSx1eCk7Xy5IZD1mdW5jdGlvbiB2eCgpe3JldHVybiB0aGlzLmF9O3ZhciB1SD1tZGIoWmhlLCdSZWd1bGFySW1tdXRhYmxlTGlzdCcsNjQ2KTtiY2IoNjE2LDcxNSxBaWUsd3gpO3ZhciB2SD1tZGIoWmhlLCdSZWd1bGFySW1tdXRhYmxlTWFwJyw2MTYpO2JjYig3MTYsNzAzLENpZSx6eCk7dmFyIHh4O3ZhciB3SD1tZGIoWmhlLCdSZWd1bGFySW1tdXRhYmxlU2V0Jyw3MTYpO2JjYigxOTc2LGVpZSxmaWUpO18uS2M9ZnVuY3Rpb24gTXgoKXtyZXR1cm4gbmV3IFh4KHRoaXMuYSx0aGlzLmIpfTtfLkZjPWZ1bmN0aW9uIEp4KGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5HYz1mdW5jdGlvbiBLeChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uJGI9ZnVuY3Rpb24gTHgoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uTWM9ZnVuY3Rpb24gTngoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTt2YXIgQ0g9bWRiKFpoZSwnU2V0cy9TZXRWaWV3JywxOTc2KTtiY2IoOTYzLDE5NzYsZmllLFB4KTtfLktjPWZ1bmN0aW9uIFR4KCl7cmV0dXJuIG5ldyBYeCh0aGlzLmEsdGhpcy5iKX07Xy5IYz1mdW5jdGlvbiBReChhKXtyZXR1cm4gdHFiKHRoaXMuYSxhKSYmdGhpcy5iLkhjKGEpfTtfLkljPWZ1bmN0aW9uIFJ4KGEpe3JldHVybiBCZSh0aGlzLmEsYSkmJnRoaXMuYi5JYyhhKX07Xy5kYz1mdW5jdGlvbiBTeCgpe3JldHVybiBvbWIodGhpcy5iLHRoaXMuYSl9O18uTGM9ZnVuY3Rpb24gVXgoKXtyZXR1cm4gSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKHRoaXMuYSwxKSksbmV3IF94KHRoaXMuYikpfTtfLmdjPWZ1bmN0aW9uIFZ4KCl7cmV0dXJuIE94KHRoaXMpfTtfLk9jPWZ1bmN0aW9uIFd4KCl7cmV0dXJuIEpBYihuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLmEsMSkpLG5ldyBaeCh0aGlzLmIpKX07dmFyIEFIPW1kYihaaGUsJ1NldHMvMicsOTYzKTtiY2IoNzAwLDY5OSxZaGUsWHgpO18uWWI9ZnVuY3Rpb24gWXgoKXt2YXIgYTt3aGlsZShFcWIodGhpcy5hKSl7YT1GcWIodGhpcy5hKTtpZih0aGlzLmMuSGMoYSkpe3JldHVybiBhfX1yZXR1cm4gdGhpcy5lPTIsbnVsbH07dmFyIHhIPW1kYihaaGUsJ1NldHMvMi8xJyw3MDApO2JjYig5NjQsMSxPaWUsWngpO18uTWI9ZnVuY3Rpb24gJHgoYSl7cmV0dXJuIHRoaXMuYS5IYyhhKX07dmFyIHlIPW1kYihaaGUsJ1NldHMvMi80bWV0aG9kcmVmJGNvbnRhaW5zJFR5cGUnLDk2NCk7YmNiKDk2NSwxLE9pZSxfeCk7Xy5NYj1mdW5jdGlvbiBheShhKXtyZXR1cm4gdGhpcy5hLkhjKGEpfTt2YXIgekg9bWRiKFpoZSwnU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZScsOTY1KTtiY2IoNjA3LDE5NzUsezYwNzoxLDM6MSwyMDoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxfSxieSk7Xy5CZD1mdW5jdGlvbiBjeSgpe3JldHVybiB0aGlzLmJ9O18uQ2Q9ZnVuY3Rpb24gZHkoKXtyZXR1cm4gdGhpcy5ifTtfLk1kPWZ1bmN0aW9uIGV5KCl7cmV0dXJuIHRoaXMuYn07Xy5KYz1mdW5jdGlvbiBmeShhKXt0aGlzLmEuSmMoYSl9O18uTGM9ZnVuY3Rpb24gZ3koKXtyZXR1cm4gdGhpcy5hLkxjKCl9O18uT2M9ZnVuY3Rpb24gaHkoKXtyZXR1cm4gdGhpcy5hLk9jKCl9O3ZhciBESD1tZGIoWmhlLCdTZXRzL1VubW9kaWZpYWJsZU5hdmlnYWJsZVNldCcsNjA3KTtiY2IoMTkzMiwxOTMxLEFpZSxpeSk7Xy5MZD1mdW5jdGlvbiBqeSgpe3JldHVybiBRbCgpLG5ldyBveSh0aGlzLmEpfTtfLkNjPWZ1bmN0aW9uIGt5KCl7cmV0dXJuIFFsKCksbmV3IG95KHRoaXMuYSl9O18ucGQ9ZnVuY3Rpb24gbHkoKXtyZXR1cm4gUWwoKSxuZXcgb3kodGhpcy5hKX07dmFyIEVIPW1kYihaaGUsJ1NpbmdsZXRvbkltbXV0YWJsZUJpTWFwJywxOTMyKTtiY2IoNjQ3LDIwMDYseWllLG15KTtfLkhkPWZ1bmN0aW9uIG55KCl7cmV0dXJuIHRoaXMuYX07dmFyIEZIPW1kYihaaGUsJ1NpbmdsZXRvbkltbXV0YWJsZUxpc3QnLDY0Nyk7YmNiKDM1MCwxOTgxLENpZSxveSk7Xy5LYz1mdW5jdGlvbiByeSgpe3JldHVybiBuZXcgSXIodGhpcy5hKX07Xy5IYz1mdW5jdGlvbiBweShhKXtyZXR1cm4gcGIodGhpcy5hLGEpfTtfLkVkPWZ1bmN0aW9uIHF5KCl7cmV0dXJuIG5ldyBJcih0aGlzLmEpfTtfLmdjPWZ1bmN0aW9uIHN5KCl7cmV0dXJuIDF9O3ZhciBHSD1tZGIoWmhlLCdTaW5nbGV0b25JbW11dGFibGVTZXQnLDM1MCk7YmNiKDExMTUsMSx7fSx2eSk7Xy5LYj1mdW5jdGlvbiB3eShhKXtyZXR1cm4gQkQoYSwxNjQpfTt2YXIgSEg9bWRiKFpoZSwnU3RyZWFtcy9sYW1iZGEkMCRUeXBlJywxMTE1KTtiY2IoMTExNiwxLFBpZSx4eSk7Xy5WZD1mdW5jdGlvbiB5eSgpe3V5KHRoaXMuYSl9O3ZhciBJSD1tZGIoWmhlLCdTdHJlYW1zL2xhbWJkYSQxJFR5cGUnLDExMTYpO2JjYigxNjU5LDE2NTgsX2hlLEF5KTtfLlpiPWZ1bmN0aW9uIEJ5KCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5mLEJEKEJEKCFhPyh0aGlzLmY9SkQodGhpcy5jLDE3MSk/bmV3IFNmKHRoaXMsQkQodGhpcy5jLDE3MSkpOkpEKHRoaXMuYywxNjEpP25ldyBNZih0aGlzLEJEKHRoaXMuYywxNjEpKTpuZXcgbmUodGhpcyx0aGlzLmMpKTphLDE2MSksMTcxKX07Xy5oYz1mdW5jdGlvbiBFeSgpe3JldHVybiBuZXcgSHhiKHRoaXMuYil9O18uZ2Q9ZnVuY3Rpb24gRnkoKXtyZXR1cm4gbmV3IEh4Yih0aGlzLmIpfTtfLmVjPWZ1bmN0aW9uIEh5KCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5pLEJEKEJEKCFhPyh0aGlzLmk9SkQodGhpcy5jLDE3MSk/bmV3ICRmKHRoaXMsQkQodGhpcy5jLDE3MSkpOkpEKHRoaXMuYywxNjEpP25ldyBZZih0aGlzLEJEKHRoaXMuYywxNjEpKTpuZXcgemYodGhpcyx0aGlzLmMpKTphLDg0KSwyNzEpfTtfLmFjPWZ1bmN0aW9uIER5KCl7cmV0dXJuIEpEKHRoaXMuYywxNzEpP25ldyBTZih0aGlzLEJEKHRoaXMuYywxNzEpKTpKRCh0aGlzLmMsMTYxKT9uZXcgTWYodGhpcyxCRCh0aGlzLmMsMTYxKSk6bmV3IG5lKHRoaXMsdGhpcy5jKX07Xy5pYz1mdW5jdGlvbiBHeShhKXthPT1udWxsJiZ0aGlzLmEudWUoYSxhKTtyZXR1cm4gbmV3IEh4Yih0aGlzLmIpfTt2YXIgTEg9bWRiKFpoZSwnVHJlZU11bHRpbWFwJywxNjU5KTtiY2IoNzgsMSx7MzoxLDc4OjF9KTtfLldkPWZ1bmN0aW9uICR5KGEpe3JldHVybiBuZXcgRXJyb3IoYSl9O18uWGQ9ZnVuY3Rpb24gYXooKXtyZXR1cm4gdGhpcy5lfTtfLllkPWZ1bmN0aW9uIGJ6KCl7cmV0dXJuIFhBYihOQWIoUGxiKCh0aGlzLms9PW51bGwmJih0aGlzLms9S0MoX0ksbmllLDc4LDAsMCwxKSksdGhpcy5rKSksbmV3IF9mYiksbmV3IGJCYil9O18uWmQ9ZnVuY3Rpb24gY3ooKXtyZXR1cm4gdGhpcy5mfTtfLiRkPWZ1bmN0aW9uIGR6KCl7cmV0dXJuIHRoaXMuZ307Xy5fZD1mdW5jdGlvbiBleigpe1Z5KHRoaXMsX3kodGhpcy5XZChXeSh0aGlzLHRoaXMuZykpKSk7U3oodGhpcyl9O18uSWI9ZnVuY3Rpb24gZnooKXtyZXR1cm4gV3kodGhpcyx0aGlzLiRkKCkpfTtfLmU9U2llO18uaT1mYWxzZTtfLm49dHJ1ZTt2YXIgX0k9bWRiKFBoZSwnVGhyb3dhYmxlJyw3OCk7YmNiKDEwMiw3OCx7MzoxLDEwMjoxLDc4OjF9KTt2YXIgRUk9bWRiKFBoZSwnRXhjZXB0aW9uJywxMDIpO2JjYig2MCwxMDIsVGllLGd6LGh6KTt2YXIgVEk9bWRiKFBoZSwnUnVudGltZUV4Y2VwdGlvbicsNjApO2JjYig1OTgsNjAsVGllKTt2YXIgTEk9bWRiKFBoZSwnSnNFeGNlcHRpb24nLDU5OCk7YmNiKDg2Myw1OTgsVGllKTt2YXIgUkg9bWRiKFVpZSwnSmF2YVNjcmlwdEV4Y2VwdGlvbkJhc2UnLDg2Myk7YmNiKDQ3Nyw4NjMsezQ3NzoxLDM6MSwxMDI6MSw2MDoxLDc4OjF9LGx6KTtfLiRkPWZ1bmN0aW9uIG96KCl7a3oodGhpcyk7cmV0dXJuIHRoaXMuY307Xy5hZT1mdW5jdGlvbiBweigpe3JldHVybiBQRCh0aGlzLmIpPT09UEQoaXopP251bGw6dGhpcy5ifTt2YXIgaXo7dmFyIE9IPW1kYihXaWUsJ0phdmFTY3JpcHRFeGNlcHRpb24nLDQ3Nyk7dmFyIFBIPW1kYihXaWUsJ0phdmFTY3JpcHRPYmplY3QkJywwKTt2YXIgdHo7YmNiKDE5NDgsMSx7fSk7dmFyIFFIPW1kYihXaWUsJ1NjaGVkdWxlcicsMTk0OCk7dmFyIHh6PTAseXo9MCx6ej0tMTtiY2IoODkwLDE5NDgse30sTnopO3ZhciBKejt2YXIgU0g9bWRiKFVpZSwnU2NoZWR1bGVySW1wbCcsODkwKTt2YXIgUXo7YmNiKDE5NjAsMSx7fSk7dmFyIFdIPW1kYihVaWUsJ1N0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvcicsMTk2MCk7YmNiKDg2NCwxOTYwLHt9LFl6KTtfLmJlPWZ1bmN0aW9uIFp6KGEpe3ZhciBiPXt9LGo7dmFyIGM9W107YVtZaWVdPWM7dmFyIGQ9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7d2hpbGUoZCl7dmFyIGU9KFJ6KCksZC5uYW1lfHwoZC5uYW1lPVV6KGQudG9TdHJpbmcoKSkpKTtjLnB1c2goZSk7dmFyIGY9JzonK2U7dmFyIGc9YltmXTtpZihnKXt2YXIgaCxpO2ZvcihoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKXtpZihnW2hdPT09ZCl7cmV0dXJufX19KGd8fChiW2ZdPVtdKSkucHVzaChkKTtkPWQuY2FsbGVyfX07Xy5jZT1mdW5jdGlvbiAkeihhKXt2YXIgYixjLGQsZTtkPShSeigpLGEmJmFbWWllXT9hW1lpZV06W10pO2M9ZC5sZW5ndGg7ZT1LQyhWSSxuaWUsMzEwLGMsMCwxKTtmb3IoYj0wO2I8YztiKyspe2VbYl09bmV3IFplYihkW2JdLG51bGwsLTEpfXJldHVybiBlfTt2YXIgVEg9bWRiKFVpZSwnU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yTGVnYWN5Jyw4NjQpO2JjYigxOTYxLDE5NjAse30pO18uYmU9ZnVuY3Rpb24gYUEoYSl7fTtfLmRlPWZ1bmN0aW9uIGJBKGEsYixjLGQpe3JldHVybiBuZXcgWmViKGIsYSsnQCcrZCxjPDA/LTE6Yyl9O18uY2U9ZnVuY3Rpb24gY0EoYSl7dmFyIGIsYyxkLGUsZixnO2U9V3ooYSk7Zj1LQyhWSSxuaWUsMzEwLDAsMCwxKTtiPTA7ZD1lLmxlbmd0aDtpZihkPT0wKXtyZXR1cm4gZn1nPV96KHRoaXMsZVswXSk7ZGZiKGcuZCxYaWUpfHwoZltiKytdPWcpO2ZvcihjPTE7YzxkO2MrKyl7ZltiKytdPV96KHRoaXMsZVtjXSl9cmV0dXJuIGZ9O3ZhciBWSD1tZGIoVWllLCdTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm4nLDE5NjEpO2JjYig4NjUsMTk2MSx7fSxkQSk7Xy5kZT1mdW5jdGlvbiBlQShhLGIsYyxkKXtyZXR1cm4gbmV3IFplYihiLGEsLTEpfTt2YXIgVUg9bWRiKFVpZSwnU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yTW9kZXJuTm9Tb3VyY2VNYXAnLDg2NSk7YmNiKDEwNTAsMSx7fSk7dmFyIGNJPW1kYih5amUsemplLDEwNTApO2JjYig2MTUsMTA1MCx7NjE1OjF9LEhBKTt2YXIgRkE7dmFyIFhIPW1kYihBamUsemplLDYxNSk7YmNiKDIwMDEsMSx7fSk7dmFyIGRJPW1kYih5amUsQmplLDIwMDEpO2JjYigyMDAyLDIwMDEse30pO3ZhciBZSD1tZGIoQWplLEJqZSwyMDAyKTtiY2IoMTA5MCwxLHt9LE1BKTt2YXIgSkE7dmFyIFpIPW1kYihBamUsJ0xvY2FsZUluZm8nLDEwOTApO2JjYigxOTE4LDEse30sUEEpO18uYT0wO3ZhciBfSD1tZGIoQWplLCdUaW1lWm9uZScsMTkxOCk7YmNiKDEyNTgsMjAwMix7fSxWQSk7dmFyIGFJPW1kYignY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQuaW1wbC5jbGRyJywnRGF0ZVRpbWVGb3JtYXRJbmZvSW1wbCcsMTI1OCk7YmNiKDQzNCwxLHs0MzQ6MX0sV0EpO18uYT1mYWxzZTtfLmI9MDt2YXIgYkk9bWRiKHlqZSwnRGF0ZVRpbWVGb3JtYXQvUGF0dGVyblBhcnQnLDQzNCk7YmNiKDE5OSwxLENqZSxlQixmQixnQik7Xy53ZD1mdW5jdGlvbiBoQihhKXtyZXR1cm4gWEEodGhpcyxCRChhLDE5OSkpfTtfLkZiPWZ1bmN0aW9uIGlCKGEpe3JldHVybiBKRChhLDE5OSkmJkJiYihDYmIodGhpcy5xLmdldFRpbWUoKSksQ2JiKEJEKGEsMTk5KS5xLmdldFRpbWUoKSkpfTtfLkhiPWZ1bmN0aW9uIGpCKCl7dmFyIGE7YT1DYmIodGhpcy5xLmdldFRpbWUoKSk7cmV0dXJuIFRiYihWYmIoYSxQYmIoYSwzMikpKX07Xy5JYj1mdW5jdGlvbiBsQigpe3ZhciBhLGIsYztjPS10aGlzLnEuZ2V0VGltZXpvbmVPZmZzZXQoKTthPShjPj0wPycrJzonJykrKGMvNjB8MCk7Yj1rQigkd25kLk1hdGguYWJzKGMpJTYwKTtyZXR1cm4gKERwYigpLEJwYilbdGhpcy5xLmdldERheSgpXSsnICcrQ3BiW3RoaXMucS5nZXRNb250aCgpXSsnICcra0IodGhpcy5xLmdldERhdGUoKSkrJyAnK2tCKHRoaXMucS5nZXRIb3VycygpKSsnOicra0IodGhpcy5xLmdldE1pbnV0ZXMoKSkrJzonK2tCKHRoaXMucS5nZXRTZWNvbmRzKCkpKycgR01UJythK2IrJyAnK3RoaXMucS5nZXRGdWxsWWVhcigpfTt2YXIgJEo9bWRiKGJpZSwnRGF0ZScsMTk5KTtiY2IoMTkxNSwxOTksQ2plLG5CKTtfLmE9ZmFsc2U7Xy5iPTA7Xy5jPTA7Xy5kPTA7Xy5lPTA7Xy5mPTA7Xy5nPWZhbHNlO18uaT0wO18uaj0wO18uaz0wO18ubj0wO18ubz0wO18ucD0wO3ZhciBlST1tZGIoJ2NvbS5nb29nbGUuZ3d0LmkxOG4uc2hhcmVkLmltcGwnLCdEYXRlUmVjb3JkJywxOTE1KTtiY2IoMTk2NiwxLHt9KTtfLmZlPWZ1bmN0aW9uIG9CKCl7cmV0dXJuIG51bGx9O18uZ2U9ZnVuY3Rpb24gcEIoKXtyZXR1cm4gbnVsbH07Xy5oZT1mdW5jdGlvbiBxQigpe3JldHVybiBudWxsfTtfLmllPWZ1bmN0aW9uIHJCKCl7cmV0dXJuIG51bGx9O18uamU9ZnVuY3Rpb24gc0IoKXtyZXR1cm4gbnVsbH07dmFyIG5JPW1kYihEamUsJ0pTT05WYWx1ZScsMTk2Nik7YmNiKDIxNiwxOTY2LHsyMTY6MX0sd0IseEIpO18uRmI9ZnVuY3Rpb24geUIoYSl7aWYoIUpEKGEsMjE2KSl7cmV0dXJuIGZhbHNlfXJldHVybiBxeih0aGlzLmEsQkQoYSwyMTYpLmEpfTtfLmVlPWZ1bmN0aW9uIHpCKCl7cmV0dXJuIERCfTtfLkhiPWZ1bmN0aW9uIEFCKCl7cmV0dXJuIHJ6KHRoaXMuYSl9O18uZmU9ZnVuY3Rpb24gQkIoKXtyZXR1cm4gdGhpc307Xy5JYj1mdW5jdGlvbiBDQigpe3ZhciBhLGIsYztjPW5ldyBXZmIoJ1snKTtmb3IoYj0wLGE9dGhpcy5hLmxlbmd0aDtiPGE7YisrKXtiPjAmJihjLmErPScsJyxjKTtQZmIoYyx0Qih0aGlzLGIpKX1jLmErPSddJztyZXR1cm4gYy5hfTt2YXIgZkk9bWRiKERqZSwnSlNPTkFycmF5JywyMTYpO2JjYig0ODMsMTk2Nix7NDgzOjF9LEhCKTtfLmVlPWZ1bmN0aW9uIElCKCl7cmV0dXJuIExCfTtfLmdlPWZ1bmN0aW9uIEpCKCl7cmV0dXJuIHRoaXN9O18uSWI9ZnVuY3Rpb24gS0IoKXtyZXR1cm4gQmNiKCksJycrdGhpcy5hfTtfLmE9ZmFsc2U7dmFyIEVCLEZCO3ZhciBnST1tZGIoRGplLCdKU09OQm9vbGVhbicsNDgzKTtiY2IoOTg1LDYwLFRpZSxNQik7dmFyIGhJPW1kYihEamUsJ0pTT05FeGNlcHRpb24nLDk4NSk7YmNiKDEwMjMsMTk2Nix7fSxQQik7Xy5lZT1mdW5jdGlvbiBRQigpe3JldHVybiBTQn07Xy5JYj1mdW5jdGlvbiBSQigpe3JldHVybiBYaGV9O3ZhciBOQjt2YXIgaUk9bWRiKERqZSwnSlNPTk51bGwnLDEwMjMpO2JjYigyNTgsMTk2Nix7MjU4OjF9LFRCKTtfLkZiPWZ1bmN0aW9uIFVCKGEpe2lmKCFKRChhLDI1OCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdGhpcy5hPT1CRChhLDI1OCkuYX07Xy5lZT1mdW5jdGlvbiBWQigpe3JldHVybiBaQn07Xy5IYj1mdW5jdGlvbiBXQigpe3JldHVybiBIZGIodGhpcy5hKX07Xy5oZT1mdW5jdGlvbiBYQigpe3JldHVybiB0aGlzfTtfLkliPWZ1bmN0aW9uIFlCKCl7cmV0dXJuIHRoaXMuYSsnJ307Xy5hPTA7dmFyIGpJPW1kYihEamUsJ0pTT05OdW1iZXInLDI1OCk7YmNiKDE4MywxOTY2LHsxODM6MX0sZUMsZkMpO18uRmI9ZnVuY3Rpb24gZ0MoYSl7aWYoIUpEKGEsMTgzKSl7cmV0dXJuIGZhbHNlfXJldHVybiBxeih0aGlzLmEsQkQoYSwxODMpLmEpfTtfLmVlPWZ1bmN0aW9uIGhDKCl7cmV0dXJuIGxDfTtfLkhiPWZ1bmN0aW9uIGlDKCl7cmV0dXJuIHJ6KHRoaXMuYSl9O18uaWU9ZnVuY3Rpb24gakMoKXtyZXR1cm4gdGhpc307Xy5JYj1mdW5jdGlvbiBrQygpe3ZhciBhLGIsYyxkLGUsZixnO2c9bmV3IFdmYigneycpO2E9dHJ1ZTtmPSRCKHRoaXMsS0MoWkksbmllLDIsMCw2LDEpKTtmb3IoYz1mLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTthPyhhPWZhbHNlKTooZy5hKz1TaGUsZyk7UWZiKGcsdnooYikpO2cuYSs9JzonO1BmYihnLGFDKHRoaXMsYikpfWcuYSs9J30nO3JldHVybiBnLmF9O3ZhciBsST1tZGIoRGplLCdKU09OT2JqZWN0JywxODMpO2JjYig1OTYsZWllLGZpZSxtQyk7Xy5IYz1mdW5jdGlvbiBuQyhhKXtyZXR1cm4gTkQoYSkmJl9CKHRoaXMuYSxHRChhKSl9O18uS2M9ZnVuY3Rpb24gb0MoKXtyZXR1cm4gbmV3IHZpYihuZXcgYW1iKHRoaXMuYikpfTtfLmdjPWZ1bmN0aW9uIHBDKCl7cmV0dXJuIHRoaXMuYi5sZW5ndGh9O3ZhciBrST1tZGIoRGplLCdKU09OT2JqZWN0LzEnLDU5Nik7dmFyIHFDO2JjYigyMDQsMTk2Nix7MjA0OjF9LHlDKTtfLkZiPWZ1bmN0aW9uIHpDKGEpe2lmKCFKRChhLDIwNCkpe3JldHVybiBmYWxzZX1yZXR1cm4gZGZiKHRoaXMuYSxCRChhLDIwNCkuYSl9O18uZWU9ZnVuY3Rpb24gQUMoKXtyZXR1cm4gRUN9O18uSGI9ZnVuY3Rpb24gQkMoKXtyZXR1cm4gTENiKHRoaXMuYSl9O18uamU9ZnVuY3Rpb24gQ0MoKXtyZXR1cm4gdGhpc307Xy5JYj1mdW5jdGlvbiBEQygpe3JldHVybiB2eih0aGlzLmEpfTt2YXIgbUk9bWRiKERqZSwnSlNPTlN0cmluZycsMjA0KTt2YXIgUUM7dmFyIHNELHRELHVELHZEO2JjYigxOTYyLDEsezUyNToxfSk7dmFyIHBJPW1kYihMamUsJ091dHB1dFN0cmVhbScsMTk2Mik7YmNiKDE5NjMsMTk2Mix7NTI1OjF9KTt2YXIgb0k9bWRiKExqZSwnRmlsdGVyT3V0cHV0U3RyZWFtJywxOTYzKTtiY2IoODY2LDE5NjMsezUyNToxfSxqY2IpO3ZhciBxST1tZGIoTGplLCdQcmludFN0cmVhbScsODY2KTtiY2IoNDE4LDEsezQ3NToxfSk7Xy5JYj1mdW5jdGlvbiBuY2IoKXtyZXR1cm4gdGhpcy5hfTt2YXIgckk9bWRiKFBoZSwnQWJzdHJhY3RTdHJpbmdCdWlsZGVyJyw0MTgpO2JjYig1MjksNjAsVGllLG9jYik7dmFyIHNJPW1kYihQaGUsJ0FyaXRobWV0aWNFeGNlcHRpb24nLDUyOSk7YmNiKDczLDYwLE1qZSxwY2IscWNiKTt2YXIgSUk9bWRiKFBoZSwnSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicsNzMpO2JjYigzMjAsNzMsezM6MSwzMjA6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0scmNiLHNjYik7dmFyIHRJPW1kYihQaGUsJ0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicsMzIwKTtiY2IoNTI4LDYwLFRpZSx0Y2IsdWNiKTt2YXIgdUk9bWRiKFBoZSwnQXJyYXlTdG9yZUV4Y2VwdGlvbicsNTI4KTtiY2IoMjg5LDc4LE5qZSx2Y2IpO3ZhciBEST1tZGIoUGhlLCdFcnJvcicsMjg5KTtiY2IoMTk0LDI4OSxOamUseGNiLHljYik7dmFyIHZJPW1kYihQaGUsJ0Fzc2VydGlvbkVycm9yJywxOTQpO3hEPXszOjEsNDc2OjEsMzU6MX07dmFyIHpjYixBY2I7dmFyIHdJPW1kYihQaGUsJ0Jvb2xlYW4nLDQ3Nik7YmNiKDIzNiwxLHszOjEsMjM2OjF9KTt2YXIgR2NiO3ZhciBSST1tZGIoUGhlLCdOdW1iZXInLDIzNik7YmNiKDIxNywyMzYsezM6MSwyMTc6MSwzNToxLDIzNjoxfSxNY2IpO18ud2Q9ZnVuY3Rpb24gTmNiKGEpe3JldHVybiBMY2IodGhpcyxCRChhLDIxNykpfTtfLmtlPWZ1bmN0aW9uIE9jYigpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gUGNiKGEpe3JldHVybiBKRChhLDIxNykmJkJEKGEsMjE3KS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gUWNiKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBSY2IoKXtyZXR1cm4gJycrdGhpcy5hfTtfLmE9MDt2YXIgeEk9bWRiKFBoZSwnQnl0ZScsMjE3KTt2YXIgVGNiO2JjYigxNzIsMSx7MzoxLDE3MjoxLDM1OjF9LFhjYik7Xy53ZD1mdW5jdGlvbiBZY2IoYSl7cmV0dXJuIFdjYih0aGlzLEJEKGEsMTcyKSl9O18uRmI9ZnVuY3Rpb24gJGNiKGEpe3JldHVybiBKRChhLDE3MikmJkJEKGEsMTcyKS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gX2NiKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBhZGIoKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfTtfLmE9MDt2YXIgVmNiO3ZhciB5ST1tZGIoUGhlLCdDaGFyYWN0ZXInLDE3Mik7dmFyIGNkYjtiY2IoMjA1LDYwLHszOjEsMjA1OjEsMTAyOjEsNjA6MSw3ODoxfSxCZGIsQ2RiKTt2YXIgekk9bWRiKFBoZSwnQ2xhc3NDYXN0RXhjZXB0aW9uJywyMDUpO3lEPXszOjEsMzU6MSwzMzM6MSwyMzY6MX07dmFyIEJJPW1kYihQaGUsJ0RvdWJsZScsMzMzKTtiY2IoMTU1LDIzNix7MzoxLDM1OjEsMTU1OjEsMjM2OjF9LE5kYixPZGIpO18ud2Q9ZnVuY3Rpb24gUGRiKGEpe3JldHVybiBNZGIodGhpcyxCRChhLDE1NSkpfTtfLmtlPWZ1bmN0aW9uIFFkYigpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gUmRiKGEpe3JldHVybiBKRChhLDE1NSkmJkZkYih0aGlzLmEsQkQoYSwxNTUpLmEpfTtfLkhiPWZ1bmN0aW9uIFNkYigpe3JldHVybiBRRCh0aGlzLmEpfTtfLkliPWZ1bmN0aW9uIFVkYigpe3JldHVybiAnJyt0aGlzLmF9O18uYT0wO3ZhciBGST1tZGIoUGhlLCdGbG9hdCcsMTU1KTtiY2IoMzIsNjAsezM6MSwxMDI6MSwzMjoxLDYwOjEsNzg6MX0sVmRiLFdkYixYZGIpO3ZhciBHST1tZGIoUGhlLCdJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24nLDMyKTtiY2IoNzEsNjAsVGllLFlkYixaZGIpO3ZhciBIST1tZGIoUGhlLCdJbGxlZ2FsU3RhdGVFeGNlcHRpb24nLDcxKTtiY2IoMTksMjM2LHszOjEsMzU6MSwxOToxLDIzNjoxfSxfZGIpO18ud2Q9ZnVuY3Rpb24gY2ViKGEpe3JldHVybiAkZGIodGhpcyxCRChhLDE5KSl9O18ua2U9ZnVuY3Rpb24gZGViKCl7cmV0dXJuIHRoaXMuYX07Xy5GYj1mdW5jdGlvbiBlZWIoYSl7cmV0dXJuIEpEKGEsMTkpJiZCRChhLDE5KS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gZmViKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBsZWIoKXtyZXR1cm4gJycrdGhpcy5hfTtfLmE9MDt2YXIgSkk9bWRiKFBoZSwnSW50ZWdlcicsMTkpO3ZhciBuZWI7dmFyIHBlYjtiY2IoMTYyLDIzNix7MzoxLDM1OjEsMTYyOjEsMjM2OjF9LHRlYik7Xy53ZD1mdW5jdGlvbiB2ZWIoYSl7cmV0dXJuIHNlYih0aGlzLEJEKGEsMTYyKSl9O18ua2U9ZnVuY3Rpb24gd2ViKCl7cmV0dXJuIFNiYih0aGlzLmEpfTtfLkZiPWZ1bmN0aW9uIHhlYihhKXtyZXR1cm4gSkQoYSwxNjIpJiZCYmIoQkQoYSwxNjIpLmEsdGhpcy5hKX07Xy5IYj1mdW5jdGlvbiB5ZWIoKXtyZXR1cm4gVGJiKHRoaXMuYSl9O18uSWI9ZnVuY3Rpb24gemViKCl7cmV0dXJuICcnK1ViYih0aGlzLmEpfTtfLmE9MDt2YXIgTUk9bWRiKFBoZSwnTG9uZycsMTYyKTt2YXIgQmViO2JjYigyMDM5LDEse30pO2JjYigxODMxLDYwLFRpZSxGZWIpO3ZhciBOST1tZGIoUGhlLCdOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbicsMTgzMSk7YmNiKDE3Myw1OTgsezM6MSwxMDI6MSwxNzM6MSw2MDoxLDc4OjF9LEdlYixIZWIpO18uV2Q9ZnVuY3Rpb24gSWViKGEpe3JldHVybiBuZXcgVHlwZUVycm9yKGEpfTt2YXIgT0k9bWRiKFBoZSwnTnVsbFBvaW50ZXJFeGNlcHRpb24nLDE3Myk7dmFyIEplYixLZWIsTGViLE1lYjtiY2IoMTI3LDMyLHszOjEsMTAyOjEsMzI6MSwxMjc6MSw2MDoxLDc4OjF9LE9lYik7dmFyIFFJPW1kYihQaGUsJ051bWJlckZvcm1hdEV4Y2VwdGlvbicsMTI3KTtiY2IoMTg0LDIzNix7MzoxLDM1OjEsMjM2OjEsMTg0OjF9LFFlYik7Xy53ZD1mdW5jdGlvbiBSZWIoYSl7cmV0dXJuIFBlYih0aGlzLEJEKGEsMTg0KSl9O18ua2U9ZnVuY3Rpb24gU2ViKCl7cmV0dXJuIHRoaXMuYX07Xy5GYj1mdW5jdGlvbiBUZWIoYSl7cmV0dXJuIEpEKGEsMTg0KSYmQkQoYSwxODQpLmE9PXRoaXMuYX07Xy5IYj1mdW5jdGlvbiBVZWIoKXtyZXR1cm4gdGhpcy5hfTtfLkliPWZ1bmN0aW9uIFZlYigpe3JldHVybiAnJyt0aGlzLmF9O18uYT0wO3ZhciBVST1tZGIoUGhlLCdTaG9ydCcsMTg0KTt2YXIgWGViO2JjYigzMTAsMSx7MzoxLDMxMDoxfSxaZWIpO18uRmI9ZnVuY3Rpb24gJGViKGEpe3ZhciBiO2lmKEpEKGEsMzEwKSl7Yj1CRChhLDMxMCk7cmV0dXJuIHRoaXMuYz09Yi5jJiZ0aGlzLmQ9PWIuZCYmdGhpcy5hPT1iLmEmJnRoaXMuYj09Yi5ifXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBfZWIoKXtyZXR1cm4gSGxiKE9DKEdDKFNJLDEpLFVoZSwxLDUsW21lYih0aGlzLmMpLHRoaXMuYSx0aGlzLmQsdGhpcy5iXSkpfTtfLkliPWZ1bmN0aW9uIGFmYigpe3JldHVybiB0aGlzLmErJy4nK3RoaXMuZCsnKCcrKHRoaXMuYiE9bnVsbD90aGlzLmI6J1Vua25vd24gU291cmNlJykrKHRoaXMuYz49MD8nOicrdGhpcy5jOicnKSsnKSd9O18uYz0wO3ZhciBWST1tZGIoUGhlLCdTdGFja1RyYWNlRWxlbWVudCcsMzEwKTt6RD17MzoxLDQ3NToxLDM1OjEsMjoxfTt2YXIgWkk9bWRiKFBoZSxWaWUsMik7YmNiKDEwNyw0MTgsezQ3NToxfSxIZmIsSWZiLEpmYik7dmFyIFdJPW1kYihQaGUsJ1N0cmluZ0J1ZmZlcicsMTA3KTtiY2IoMTAwLDQxOCx7NDc1OjF9LFVmYixWZmIsV2ZiKTt2YXIgWEk9bWRiKFBoZSwnU3RyaW5nQnVpbGRlcicsMTAwKTtiY2IoNjg3LDczLE1qZSxYZmIpO3ZhciBZST1tZGIoUGhlLCdTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uJyw2ODcpO2JjYigyMDQzLDEse30pO3ZhciBZZmI7YmNiKDg0NCwxLHt9LF9mYik7Xy5LYj1mdW5jdGlvbiBhZ2IoYSl7cmV0dXJuIEJEKGEsNzgpLmV9O3ZhciAkST1tZGIoUGhlLCdUaHJvd2FibGUvbGFtYmRhJDAkVHlwZScsODQ0KTtiY2IoNDEsNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsNDE6MX0sYmdiLGNnYik7dmFyIGFKPW1kYihQaGUsJ1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uJyw0MSk7YmNiKDI0MCwyMzYsezM6MSwzNToxLDIzNjoxLDI0MDoxfSxzZ2IsdGdiKTtfLndkPWZ1bmN0aW9uIHdnYihhKXtyZXR1cm4gbWdiKHRoaXMsQkQoYSwyNDApKX07Xy5rZT1mdW5jdGlvbiB4Z2IoKXtyZXR1cm4gSGNiKHJnYih0aGlzKSl9O18uRmI9ZnVuY3Rpb24geWdiKGEpe3ZhciBiO2lmKHRoaXM9PT1hKXtyZXR1cm4gdHJ1ZX1pZihKRChhLDI0MCkpe2I9QkQoYSwyNDApO3JldHVybiB0aGlzLmU9PWIuZSYmbWdiKHRoaXMsYik9PTB9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIHpnYigpe3ZhciBhO2lmKHRoaXMuYiE9MCl7cmV0dXJuIHRoaXMuYn1pZih0aGlzLmE8NTQpe2E9Q2JiKHRoaXMuZik7dGhpcy5iPVRiYih4YmIoYSwtMSkpO3RoaXMuYj0zMyp0aGlzLmIrVGJiKHhiYihPYmIoYSwzMiksLTEpKTt0aGlzLmI9MTcqdGhpcy5iK1FEKHRoaXMuZSk7cmV0dXJuIHRoaXMuYn10aGlzLmI9MTcqTmdiKHRoaXMuYykrUUQodGhpcy5lKTtyZXR1cm4gdGhpcy5ifTtfLkliPWZ1bmN0aW9uIEFnYigpe3JldHVybiByZ2IodGhpcyl9O18uYT0wO18uYj0wO18uZD0wO18uZT0wO18uZj0wO3ZhciBkZ2IsZWdiLGZnYixnZ2IsaGdiLGlnYixqZ2Isa2diO3ZhciBiSj1tZGIoJ2phdmEubWF0aCcsJ0JpZ0RlY2ltYWwnLDI0MCk7YmNiKDkxLDIzNix7MzoxLDM1OjEsMjM2OjEsOTE6MX0sVGdiLFVnYixWZ2IsV2diLFhnYixZZ2IpO18ud2Q9ZnVuY3Rpb24gJGdiKGEpe3JldHVybiBJZ2IodGhpcyxCRChhLDkxKSl9O18ua2U9ZnVuY3Rpb24gX2diKCl7cmV0dXJuIEhjYihzaGIodGhpcywwKSl9O18uRmI9ZnVuY3Rpb24gYWhiKGEpe3JldHVybiBLZ2IodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBjaGIoKXtyZXR1cm4gTmdiKHRoaXMpfTtfLkliPWZ1bmN0aW9uIGVoYigpe3JldHVybiBzaGIodGhpcywwKX07Xy5iPS0yO18uYz0wO18uZD0wO18uZT0wO3ZhciBCZ2IsQ2diLERnYixFZ2IsRmdiLEdnYjt2YXIgY0o9bWRiKCdqYXZhLm1hdGgnLCdCaWdJbnRlZ2VyJyw5MSk7dmFyIG5oYixvaGI7dmFyIEJoYixDaGI7YmNiKDQ4OCwxOTY3LGNpZSk7Xy4kYj1mdW5jdGlvbiBYaGIoKXtVaGIodGhpcyl9O18uX2I9ZnVuY3Rpb24gWWhiKGEpe3JldHVybiBNaGIodGhpcyxhKX07Xy51Yz1mdW5jdGlvbiBaaGIoYSl7cmV0dXJuIE5oYih0aGlzLGEsdGhpcy5nKXx8TmhiKHRoaXMsYSx0aGlzLmYpfTtfLnZjPWZ1bmN0aW9uICRoYigpe3JldHVybiBuZXcgZWliKHRoaXMpfTtfLnhjPWZ1bmN0aW9uIF9oYihhKXtyZXR1cm4gT2hiKHRoaXMsYSl9O18uemM9ZnVuY3Rpb24gYWliKGEsYil7cmV0dXJuIFJoYih0aGlzLGEsYil9O18uQmM9ZnVuY3Rpb24gYmliKGEpe3JldHVybiBUaGIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBjaWIoKXtyZXR1cm4gVmhiKHRoaXMpfTt2YXIgZ0o9bWRiKGJpZSwnQWJzdHJhY3RIYXNoTWFwJyw0ODgpO2JjYigyNjEsZWllLGZpZSxlaWIpO18uJGI9ZnVuY3Rpb24gZmliKCl7dGhpcy5hLiRiKCl9O18uSGM9ZnVuY3Rpb24gZ2liKGEpe3JldHVybiBkaWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBoaWIoKXtyZXR1cm4gbmV3IG5pYih0aGlzLmEpfTtfLk1jPWZ1bmN0aW9uIGlpYihhKXt2YXIgYjtpZihkaWIodGhpcyxhKSl7Yj1CRChhLDQyKS5jZCgpO3RoaXMuYS5CYyhiKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gamliKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgZko9bWRiKGJpZSwnQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0JywyNjEpO2JjYigyNjIsMSxhaWUsbmliKTtfLk5iPWZ1bmN0aW9uIG9pYihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBxaWIoKXtyZXR1cm4gbGliKHRoaXMpfTtfLk9iPWZ1bmN0aW9uIHBpYigpe3JldHVybiB0aGlzLmJ9O18uUWI9ZnVuY3Rpb24gcmliKCl7bWliKHRoaXMpfTtfLmI9ZmFsc2U7dmFyIGVKPW1kYihiaWUsJ0Fic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yJywyNjIpO2JjYig0MTcsMSxhaWUsdmliKTtfLk5iPWZ1bmN0aW9uIHdpYihhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB4aWIoKXtyZXR1cm4gc2liKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIHlpYigpe3JldHVybiB0aWIodGhpcyl9O18uUWI9ZnVuY3Rpb24gemliKCl7dWliKHRoaXMpfTtfLmI9MDtfLmM9LTE7dmFyIGhKPW1kYihiaWUsJ0Fic3RyYWN0TGlzdC9JdGVyYXRvckltcGwnLDQxNyk7YmNiKDk2LDQxNyxqaWUsQmliKTtfLlFiPWZ1bmN0aW9uIEhpYigpe3VpYih0aGlzKX07Xy5SYj1mdW5jdGlvbiBDaWIoYSl7QWliKHRoaXMsYSl9O18uU2I9ZnVuY3Rpb24gRGliKCl7cmV0dXJuIHRoaXMuYj4wfTtfLlRiPWZ1bmN0aW9uIEVpYigpe3JldHVybiB0aGlzLmJ9O18uVWI9ZnVuY3Rpb24gRmliKCl7cmV0dXJuIHNDYih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9O18uVmI9ZnVuY3Rpb24gR2liKCl7cmV0dXJuIHRoaXMuYi0xfTtfLldiPWZ1bmN0aW9uIElpYihhKXt5Q2IodGhpcy5jIT0tMSk7dGhpcy5hLl9jKHRoaXMuYyxhKX07dmFyIGlKPW1kYihiaWUsJ0Fic3RyYWN0TGlzdC9MaXN0SXRlcmF0b3JJbXBsJyw5Nik7YmNiKDIxOSw1MixMaWUsSmliKTtfLlZjPWZ1bmN0aW9uIEtpYihhLGIpe3dDYihhLHRoaXMuYik7dGhpcy5jLlZjKHRoaXMuYSthLGIpOysrdGhpcy5ifTtfLlhiPWZ1bmN0aW9uIExpYihhKXt0Q2IoYSx0aGlzLmIpO3JldHVybiB0aGlzLmMuWGIodGhpcy5hK2EpfTtfLiRjPWZ1bmN0aW9uIE1pYihhKXt2YXIgYjt0Q2IoYSx0aGlzLmIpO2I9dGhpcy5jLiRjKHRoaXMuYSthKTstLXRoaXMuYjtyZXR1cm4gYn07Xy5fYz1mdW5jdGlvbiBOaWIoYSxiKXt0Q2IoYSx0aGlzLmIpO3JldHVybiB0aGlzLmMuX2ModGhpcy5hK2EsYil9O18uZ2M9ZnVuY3Rpb24gT2liKCl7cmV0dXJuIHRoaXMuYn07Xy5hPTA7Xy5iPTA7dmFyIGpKPW1kYihiaWUsJ0Fic3RyYWN0TGlzdC9TdWJMaXN0JywyMTkpO2JjYigzODQsZWllLGZpZSxQaWIpO18uJGI9ZnVuY3Rpb24gUWliKCl7dGhpcy5hLiRiKCl9O18uSGM9ZnVuY3Rpb24gUmliKGEpe3JldHVybiB0aGlzLmEuX2IoYSl9O18uS2M9ZnVuY3Rpb24gU2liKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5hLnZjKCkuS2MoKSxuZXcgVmliKGEpfTtfLk1jPWZ1bmN0aW9uIFRpYihhKXtpZih0aGlzLmEuX2IoYSkpe3RoaXMuYS5CYyhhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gVWliKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgbUo9bWRiKGJpZSwnQWJzdHJhY3RNYXAvMScsMzg0KTtiY2IoNjkxLDEsYWllLFZpYik7Xy5OYj1mdW5jdGlvbiBXaWIoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gWGliKCl7cmV0dXJuIHRoaXMuYS5PYigpfTtfLlBiPWZ1bmN0aW9uIFlpYigpe3ZhciBhO3JldHVybiBhPUJEKHRoaXMuYS5QYigpLDQyKSxhLmNkKCl9O18uUWI9ZnVuY3Rpb24gWmliKCl7dGhpcy5hLlFiKCl9O3ZhciBsSj1tZGIoYmllLCdBYnN0cmFjdE1hcC8xLzEnLDY5MSk7YmNiKDIyNiwyOCxkaWUsJGliKTtfLiRiPWZ1bmN0aW9uIF9pYigpe3RoaXMuYS4kYigpfTtfLkhjPWZ1bmN0aW9uIGFqYihhKXtyZXR1cm4gdGhpcy5hLnVjKGEpfTtfLktjPWZ1bmN0aW9uIGJqYigpe3ZhciBhO3JldHVybiBhPXRoaXMuYS52YygpLktjKCksbmV3IGRqYihhKX07Xy5nYz1mdW5jdGlvbiBjamIoKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBvSj1tZGIoYmllLCdBYnN0cmFjdE1hcC8yJywyMjYpO2JjYigyOTQsMSxhaWUsZGpiKTtfLk5iPWZ1bmN0aW9uIGVqYihhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBmamIoKXtyZXR1cm4gdGhpcy5hLk9iKCl9O18uUGI9ZnVuY3Rpb24gZ2piKCl7dmFyIGE7cmV0dXJuIGE9QkQodGhpcy5hLlBiKCksNDIpLGEuZGQoKX07Xy5RYj1mdW5jdGlvbiBoamIoKXt0aGlzLmEuUWIoKX07dmFyIG5KPW1kYihiaWUsJ0Fic3RyYWN0TWFwLzIvMScsMjk0KTtiY2IoNDg0LDEsezQ4NDoxLDQyOjF9KTtfLkZiPWZ1bmN0aW9uIGpqYihhKXt2YXIgYjtpZighSkQoYSw0Mikpe3JldHVybiBmYWxzZX1iPUJEKGEsNDIpO3JldHVybiB3dGIodGhpcy5kLGIuY2QoKSkmJnd0Yih0aGlzLmUsYi5kZCgpKX07Xy5jZD1mdW5jdGlvbiBramIoKXtyZXR1cm4gdGhpcy5kfTtfLmRkPWZ1bmN0aW9uIGxqYigpe3JldHVybiB0aGlzLmV9O18uSGI9ZnVuY3Rpb24gbWpiKCl7cmV0dXJuIHh0Yih0aGlzLmQpXnh0Yih0aGlzLmUpfTtfLmVkPWZ1bmN0aW9uIG5qYihhKXtyZXR1cm4gaWpiKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gb2piKCl7cmV0dXJuIHRoaXMuZCsnPScrdGhpcy5lfTt2YXIgcEo9bWRiKGJpZSwnQWJzdHJhY3RNYXAvQWJzdHJhY3RFbnRyeScsNDg0KTtiY2IoMzgzLDQ4NCx7NDg0OjEsMzgzOjEsNDI6MX0scGpiKTt2YXIgcUo9bWRiKGJpZSwnQWJzdHJhY3RNYXAvU2ltcGxlRW50cnknLDM4Myk7YmNiKDE5ODQsMSxfamUpO18uRmI9ZnVuY3Rpb24gcWpiKGEpe3ZhciBiO2lmKCFKRChhLDQyKSl7cmV0dXJuIGZhbHNlfWI9QkQoYSw0Mik7cmV0dXJuIHd0Yih0aGlzLmNkKCksYi5jZCgpKSYmd3RiKHRoaXMuZGQoKSxiLmRkKCkpfTtfLkhiPWZ1bmN0aW9uIHJqYigpe3JldHVybiB4dGIodGhpcy5jZCgpKV54dGIodGhpcy5kZCgpKX07Xy5JYj1mdW5jdGlvbiBzamIoKXtyZXR1cm4gdGhpcy5jZCgpKyc9Jyt0aGlzLmRkKCl9O3ZhciBySj1tZGIoYmllLGxpZSwxOTg0KTtiY2IoMTk5MiwxOTY3LGdpZSk7Xy50Yz1mdW5jdGlvbiB2amIoYSl7cmV0dXJuIHRqYih0aGlzLGEpfTtfLl9iPWZ1bmN0aW9uIHdqYihhKXtyZXR1cm4gdWpiKHRoaXMsYSl9O18udmM9ZnVuY3Rpb24geGpiKCl7cmV0dXJuIG5ldyBCamIodGhpcyl9O18ueGM9ZnVuY3Rpb24geWpiKGEpe3ZhciBiO2I9YTtyZXR1cm4gV2QoQXdiKHRoaXMsYikpfTtfLmVjPWZ1bmN0aW9uIEFqYigpe3JldHVybiBuZXcgR2piKHRoaXMpfTt2YXIgd0o9bWRiKGJpZSwnQWJzdHJhY3ROYXZpZ2FibGVNYXAnLDE5OTIpO2JjYig3MzksZWllLGZpZSxCamIpO18uSGM9ZnVuY3Rpb24gQ2piKGEpe3JldHVybiBKRChhLDQyKSYmdGpiKHRoaXMuYixCRChhLDQyKSl9O18uS2M9ZnVuY3Rpb24gRGpiKCl7cmV0dXJuIG5ldyBZd2IodGhpcy5iKX07Xy5NYz1mdW5jdGlvbiBFamIoYSl7dmFyIGI7aWYoSkQoYSw0Mikpe2I9QkQoYSw0Mik7cmV0dXJuIEt3Yih0aGlzLmIsYil9cmV0dXJuIGZhbHNlfTtfLmdjPWZ1bmN0aW9uIEZqYigpe3JldHVybiB0aGlzLmIuY307dmFyIHRKPW1kYihiaWUsJ0Fic3RyYWN0TmF2aWdhYmxlTWFwL0VudHJ5U2V0Jyw3MzkpO2JjYig0OTMsZWllLGlpZSxHamIpO18uTmM9ZnVuY3Rpb24gTWpiKCl7cmV0dXJuIG5ldyBSdWIodGhpcyl9O18uJGI9ZnVuY3Rpb24gSGpiKCl7endiKHRoaXMuYSl9O18uSGM9ZnVuY3Rpb24gSWpiKGEpe3JldHVybiB1amIodGhpcy5hLGEpfTtfLktjPWZ1bmN0aW9uIEpqYigpe3ZhciBhO3JldHVybiBhPW5ldyBZd2IoKG5ldyBjeGIodGhpcy5hKSkuYiksbmV3IE5qYihhKX07Xy5NYz1mdW5jdGlvbiBLamIoYSl7aWYodWpiKHRoaXMuYSxhKSl7SndiKHRoaXMuYSxhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gTGpiKCl7cmV0dXJuIHRoaXMuYS5jfTt2YXIgdko9bWRiKGJpZSwnQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0Jyw0OTMpO2JjYig0OTQsMSxhaWUsTmpiKTtfLk5iPWZ1bmN0aW9uIE9qYihhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBQamIoKXtyZXR1cm4gc2liKHRoaXMuYS5hKX07Xy5QYj1mdW5jdGlvbiBRamIoKXt2YXIgYTtyZXR1cm4gYT1Xd2IodGhpcy5hKSxhLmNkKCl9O18uUWI9ZnVuY3Rpb24gUmpiKCl7WHdiKHRoaXMuYSl9O3ZhciB1Sj1tZGIoYmllLCdBYnN0cmFjdE5hdmlnYWJsZU1hcC9OYXZpZ2FibGVLZXlTZXQvMScsNDk0KTtiY2IoMjAwNCwyOCxkaWUpO18uRmM9ZnVuY3Rpb24gU2piKGEpe3JldHVybiB6Q2IoY3ViKHRoaXMsYSkpLHRydWV9O18uR2M9ZnVuY3Rpb24gVGpiKGEpe3VDYihhKTttQ2IoYSE9dGhpcyxcIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZlwiKTtyZXR1cm4geWUodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBVamIoKXt3aGlsZShkdWIodGhpcykhPW51bGwpO307dmFyIHhKPW1kYihiaWUsJ0Fic3RyYWN0UXVldWUnLDIwMDQpO2JjYigzMDIsMjgsezQ6MSwyMDoxLDI4OjEsMTQ6MX0samtiLGtrYik7Xy5GYz1mdW5jdGlvbiBsa2IoYSl7cmV0dXJuIFhqYih0aGlzLGEpLHRydWV9O18uJGI9ZnVuY3Rpb24gbmtiKCl7WWpiKHRoaXMpfTtfLkhjPWZ1bmN0aW9uIG9rYihhKXtyZXR1cm4gWmpiKG5ldyB4a2IodGhpcyksYSl9O18uZGM9ZnVuY3Rpb24gcGtiKCl7cmV0dXJuIGFrYih0aGlzKX07Xy5LYz1mdW5jdGlvbiBxa2IoKXtyZXR1cm4gbmV3IHhrYih0aGlzKX07Xy5NYz1mdW5jdGlvbiBya2IoYSl7cmV0dXJuIGRrYihuZXcgeGtiKHRoaXMpLGEpfTtfLmdjPWZ1bmN0aW9uIHNrYigpe3JldHVybiB0aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMX07Xy5OYz1mdW5jdGlvbiB0a2IoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDI3Mil9O18uUWM9ZnVuY3Rpb24gdWtiKGEpe3ZhciBiO2I9dGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTE7YS5sZW5ndGg8YiYmKGE9ZUNiKG5ldyBBcnJheShiKSxhKSk7JGpiKHRoaXMsYSxiKTthLmxlbmd0aD5iJiZOQyhhLGIsbnVsbCk7cmV0dXJuIGF9O18uYj0wO18uYz0wO3ZhciBCSj1tZGIoYmllLCdBcnJheURlcXVlJywzMDIpO2JjYig0NDYsMSxhaWUseGtiKTtfLk5iPWZ1bmN0aW9uIHlrYihhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB6a2IoKXtyZXR1cm4gdGhpcy5hIT10aGlzLmJ9O18uUGI9ZnVuY3Rpb24gQWtiKCl7cmV0dXJuIHZrYih0aGlzKX07Xy5RYj1mdW5jdGlvbiBCa2IoKXt3a2IodGhpcyl9O18uYT0wO18uYj0wO18uYz0tMTt2YXIgQUo9bWRiKGJpZSwnQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwnLDQ0Nik7YmNiKDEyLDUyLGFrZSxSa2IsU2tiLFRrYik7Xy5WYz1mdW5jdGlvbiBVa2IoYSxiKXtEa2IodGhpcyxhLGIpfTtfLkZjPWZ1bmN0aW9uIFZrYihhKXtyZXR1cm4gRWtiKHRoaXMsYSl9O18uV2M9ZnVuY3Rpb24gV2tiKGEsYil7cmV0dXJuIEZrYih0aGlzLGEsYil9O18uR2M9ZnVuY3Rpb24gWGtiKGEpe3JldHVybiBHa2IodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBZa2IoKXt0aGlzLmM9S0MoU0ksVWhlLDEsMCw1LDEpfTtfLkhjPWZ1bmN0aW9uIFprYihhKXtyZXR1cm4gSmtiKHRoaXMsYSwwKSE9LTF9O18uSmM9ZnVuY3Rpb24gJGtiKGEpe0hrYih0aGlzLGEpfTtfLlhiPWZ1bmN0aW9uIF9rYihhKXtyZXR1cm4gSWtiKHRoaXMsYSl9O18uWGM9ZnVuY3Rpb24gYWxiKGEpe3JldHVybiBKa2IodGhpcyxhLDApfTtfLmRjPWZ1bmN0aW9uIGJsYigpe3JldHVybiB0aGlzLmMubGVuZ3RoPT0wfTtfLktjPWZ1bmN0aW9uIGNsYigpe3JldHVybiBuZXcgb2xiKHRoaXMpfTtfLiRjPWZ1bmN0aW9uIGRsYihhKXtyZXR1cm4gS2tiKHRoaXMsYSl9O18uTWM9ZnVuY3Rpb24gZWxiKGEpe3JldHVybiBMa2IodGhpcyxhKX07Xy5VZD1mdW5jdGlvbiBmbGIoYSxiKXtNa2IodGhpcyxhLGIpfTtfLl9jPWZ1bmN0aW9uIGdsYihhLGIpe3JldHVybiBOa2IodGhpcyxhLGIpfTtfLmdjPWZ1bmN0aW9uIGhsYigpe3JldHVybiB0aGlzLmMubGVuZ3RofTtfLmFkPWZ1bmN0aW9uIGlsYihhKXtPa2IodGhpcyxhKX07Xy5QYz1mdW5jdGlvbiBqbGIoKXtyZXR1cm4gUGtiKHRoaXMpfTtfLlFjPWZ1bmN0aW9uIGtsYihhKXtyZXR1cm4gUWtiKHRoaXMsYSl9O3ZhciBESj1tZGIoYmllLCdBcnJheUxpc3QnLDEyKTtiY2IoNywxLGFpZSxvbGIpO18uTmI9ZnVuY3Rpb24gcGxiKGEpe1JyYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIHFsYigpe3JldHVybiBsbGIodGhpcyl9O18uUGI9ZnVuY3Rpb24gcmxiKCl7cmV0dXJuIG1sYih0aGlzKX07Xy5RYj1mdW5jdGlvbiBzbGIoKXtubGIodGhpcyl9O18uYT0wO18uYj0tMTt2YXIgQ0o9bWRiKGJpZSwnQXJyYXlMaXN0LzEnLDcpO2JjYigyMDEzLCR3bmQuRnVuY3Rpb24se30sWWxiKTtfLnRlPWZ1bmN0aW9uIFpsYihhLGIpe3JldHVybiBLZGIoYSxiKX07YmNiKDE1NCw1Mixia2UsYW1iKTtfLkhjPWZ1bmN0aW9uIGJtYihhKXtyZXR1cm4gQnQodGhpcyxhKSE9LTF9O18uSmM9ZnVuY3Rpb24gY21iKGEpe3ZhciBiLGMsZCxlO3VDYihhKTtmb3IoYz10aGlzLmEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO2EudGQoYil9fTtfLlhiPWZ1bmN0aW9uIGRtYihhKXtyZXR1cm4gJGxiKHRoaXMsYSl9O18uX2M9ZnVuY3Rpb24gZW1iKGEsYil7dmFyIGM7Yz0odENiKGEsdGhpcy5hLmxlbmd0aCksdGhpcy5hW2FdKTtOQyh0aGlzLmEsYSxiKTtyZXR1cm4gY307Xy5nYz1mdW5jdGlvbiBmbWIoKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH07Xy5hZD1mdW5jdGlvbiBnbWIoYSl7TWxiKHRoaXMuYSx0aGlzLmEubGVuZ3RoLGEpfTtfLlBjPWZ1bmN0aW9uIGhtYigpe3JldHVybiBfbGIodGhpcyxLQyhTSSxVaGUsMSx0aGlzLmEubGVuZ3RoLDUsMSkpfTtfLlFjPWZ1bmN0aW9uIGltYihhKXtyZXR1cm4gX2xiKHRoaXMsYSl9O3ZhciBFSj1tZGIoYmllLCdBcnJheXMvQXJyYXlMaXN0JywxNTQpO3ZhciBqbWIsa21iLGxtYjtiY2IoOTQwLDUyLGJrZSx4bWIpO18uSGM9ZnVuY3Rpb24geW1iKGEpe3JldHVybiBmYWxzZX07Xy5YYj1mdW5jdGlvbiB6bWIoYSl7cmV0dXJuIHdtYihhKX07Xy5LYz1mdW5jdGlvbiBBbWIoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTtfLlljPWZ1bmN0aW9uIEJtYigpe3JldHVybiBtbWIoKSxFbWIoKSxEbWJ9O18uZ2M9ZnVuY3Rpb24gQ21iKCl7cmV0dXJuIDB9O3ZhciBHSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9FbXB0eUxpc3QnLDk0MCk7YmNiKDk0MSwxLGppZSxGbWIpO18uTmI9ZnVuY3Rpb24gSG1iKGEpe1JyYih0aGlzLGEpfTtfLlJiPWZ1bmN0aW9uIEdtYihhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uT2I9ZnVuY3Rpb24gSW1iKCl7cmV0dXJuIGZhbHNlfTtfLlNiPWZ1bmN0aW9uIEptYigpe3JldHVybiBmYWxzZX07Xy5QYj1mdW5jdGlvbiBLbWIoKXt0aHJvdyB2YmIobmV3IHV0Yil9O18uVGI9ZnVuY3Rpb24gTG1iKCl7cmV0dXJuIDB9O18uVWI9ZnVuY3Rpb24gTW1iKCl7dGhyb3cgdmJiKG5ldyB1dGIpfTtfLlZiPWZ1bmN0aW9uIE5tYigpe3JldHVybiAtMX07Xy5RYj1mdW5jdGlvbiBPbWIoKXt0aHJvdyB2YmIobmV3IFlkYil9O18uV2I9ZnVuY3Rpb24gUG1iKGEpe3Rocm93IHZiYihuZXcgWWRiKX07dmFyIERtYjt2YXIgRko9bWRiKGJpZSwnQ29sbGVjdGlvbnMvRW1wdHlMaXN0SXRlcmF0b3InLDk0MSk7YmNiKDk0MywxOTY3LEFpZSxRbWIpO18uX2I9ZnVuY3Rpb24gUm1iKGEpe3JldHVybiBmYWxzZX07Xy51Yz1mdW5jdGlvbiBTbWIoYSl7cmV0dXJuIGZhbHNlfTtfLnZjPWZ1bmN0aW9uIFRtYigpe3JldHVybiBtbWIoKSxsbWJ9O18ueGM9ZnVuY3Rpb24gVW1iKGEpe3JldHVybiBudWxsfTtfLmVjPWZ1bmN0aW9uIFZtYigpe3JldHVybiBtbWIoKSxsbWJ9O18uZ2M9ZnVuY3Rpb24gV21iKCl7cmV0dXJuIDB9O18uQ2M9ZnVuY3Rpb24gWG1iKCl7cmV0dXJuIG1tYigpLGptYn07dmFyIEhKPW1kYihiaWUsJ0NvbGxlY3Rpb25zL0VtcHR5TWFwJyw5NDMpO2JjYig5NDIsZWllLENpZSxZbWIpO18uSGM9ZnVuY3Rpb24gWm1iKGEpe3JldHVybiBmYWxzZX07Xy5LYz1mdW5jdGlvbiAkbWIoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTtfLmdjPWZ1bmN0aW9uIF9tYigpe3JldHVybiAwfTt2YXIgSUo9bWRiKGJpZSwnQ29sbGVjdGlvbnMvRW1wdHlTZXQnLDk0Mik7YmNiKDU5OSw1Mix7MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MX0sYW5iKTtfLkhjPWZ1bmN0aW9uIGJuYihhKXtyZXR1cm4gd3RiKHRoaXMuYSxhKX07Xy5YYj1mdW5jdGlvbiBjbmIoYSl7dENiKGEsMSk7cmV0dXJuIHRoaXMuYX07Xy5nYz1mdW5jdGlvbiBkbmIoKXtyZXR1cm4gMX07dmFyIEpKPW1kYihiaWUsJ0NvbGxlY3Rpb25zL1NpbmdsZXRvbkxpc3QnLDU5OSk7YmNiKDM3MiwxLHdpZSxsbmIpO18uSmM9ZnVuY3Rpb24gcm5iKGEpe3JlYih0aGlzLGEpfTtfLkxjPWZ1bmN0aW9uIHVuYigpe3JldHVybiBuZXcgWUFiKG51bGwsdGhpcy5OYygpKX07Xy5OYz1mdW5jdGlvbiB4bmIoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDApfTtfLk9jPWZ1bmN0aW9uIHluYigpe3JldHVybiBuZXcgWUFiKG51bGwsdGhpcy5OYygpKX07Xy5GYz1mdW5jdGlvbiBtbmIoYSl7cmV0dXJuIGVuYigpfTtfLkdjPWZ1bmN0aW9uIG5uYihhKXtyZXR1cm4gZm5iKCl9O18uJGI9ZnVuY3Rpb24gb25iKCl7Z25iKCl9O18uSGM9ZnVuY3Rpb24gcG5iKGEpe3JldHVybiBobmIodGhpcyxhKX07Xy5JYz1mdW5jdGlvbiBxbmIoYSl7cmV0dXJuIGluYih0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uIHNuYigpe3JldHVybiB0aGlzLmIuZGMoKX07Xy5LYz1mdW5jdGlvbiB0bmIoKXtyZXR1cm4gbmV3IERuYih0aGlzLmIuS2MoKSl9O18uTWM9ZnVuY3Rpb24gdm5iKGEpe3JldHVybiBqbmIoKX07Xy5nYz1mdW5jdGlvbiB3bmIoKXtyZXR1cm4gdGhpcy5iLmdjKCl9O18uUGM9ZnVuY3Rpb24gem5iKCl7cmV0dXJuIHRoaXMuYi5QYygpfTtfLlFjPWZ1bmN0aW9uIEFuYihhKXtyZXR1cm4ga25iKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gQm5iKCl7cmV0dXJuIGZjYih0aGlzLmIpfTt2YXIgTEo9bWRiKGJpZSwnQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbicsMzcyKTtiY2IoMzcxLDEsYWllLERuYik7Xy5OYj1mdW5jdGlvbiBFbmIoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gRm5iKCl7cmV0dXJuIHRoaXMuYi5PYigpfTtfLlBiPWZ1bmN0aW9uIEduYigpe3JldHVybiB0aGlzLmIuUGIoKX07Xy5RYj1mdW5jdGlvbiBIbmIoKXtDbmIoKX07dmFyIEtKPW1kYihiaWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUNvbGxlY3Rpb25JdGVyYXRvcicsMzcxKTtiY2IoNTMxLDM3Mixja2UsSW5iKTtfLk5jPWZ1bmN0aW9uIFZuYigpe3JldHVybiBuZXcgS3ViKHRoaXMsMTYpfTtfLlZjPWZ1bmN0aW9uIEpuYihhLGIpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5XYz1mdW5jdGlvbiBLbmIoYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O18uRmI9ZnVuY3Rpb24gTG5iKGEpe3JldHVybiBwYih0aGlzLmEsYSl9O18uWGI9ZnVuY3Rpb24gTW5iKGEpe3JldHVybiB0aGlzLmEuWGIoYSl9O18uSGI9ZnVuY3Rpb24gTm5iKCl7cmV0dXJuIHRiKHRoaXMuYSl9O18uWGM9ZnVuY3Rpb24gT25iKGEpe3JldHVybiB0aGlzLmEuWGMoYSl9O18uZGM9ZnVuY3Rpb24gUG5iKCl7cmV0dXJuIHRoaXMuYS5kYygpfTtfLlljPWZ1bmN0aW9uIFFuYigpe3JldHVybiBuZXcgWG5iKHRoaXMuYS5aYygwKSl9O18uWmM9ZnVuY3Rpb24gUm5iKGEpe3JldHVybiBuZXcgWG5iKHRoaXMuYS5aYyhhKSl9O18uJGM9ZnVuY3Rpb24gU25iKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5fYz1mdW5jdGlvbiBUbmIoYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O18uYWQ9ZnVuY3Rpb24gVW5iKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5iZD1mdW5jdGlvbiBXbmIoYSxiKXtyZXR1cm4gbmV3IEluYih0aGlzLmEuYmQoYSxiKSl9O3ZhciBOSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0Jyw1MzEpO2JjYig2OTAsMzcxLGppZSxYbmIpO18uUWI9ZnVuY3Rpb24gYm9iKCl7Q25iKCl9O18uUmI9ZnVuY3Rpb24gWW5iKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5TYj1mdW5jdGlvbiBabmIoKXtyZXR1cm4gdGhpcy5hLlNiKCl9O18uVGI9ZnVuY3Rpb24gJG5iKCl7cmV0dXJuIHRoaXMuYS5UYigpfTtfLlViPWZ1bmN0aW9uIF9uYigpe3JldHVybiB0aGlzLmEuVWIoKX07Xy5WYj1mdW5jdGlvbiBhb2IoKXtyZXR1cm4gdGhpcy5hLlZiKCl9O18uV2I9ZnVuY3Rpb24gY29iKGEpe3Rocm93IHZiYihuZXcgYmdiKX07dmFyIE1KPW1kYihiaWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUxpc3RJdGVyYXRvcicsNjkwKTtiY2IoNjAwLDEsY2llLGlvYik7Xy53Yz1mdW5jdGlvbiBvb2IoYSl7c3RiKHRoaXMsYSl9O18ueWM9ZnVuY3Rpb24gdG9iKGEsYixjKXtyZXR1cm4gdHRiKHRoaXMsYSxiLGMpfTtfLiRiPWZ1bmN0aW9uIGpvYigpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5fYj1mdW5jdGlvbiBrb2IoYSl7cmV0dXJuIHRoaXMuYy5fYihhKX07Xy51Yz1mdW5jdGlvbiBsb2IoYSl7cmV0dXJuIGRvYih0aGlzLGEpfTtfLnZjPWZ1bmN0aW9uIG1vYigpe3JldHVybiBlb2IodGhpcyl9O18uRmI9ZnVuY3Rpb24gbm9iKGEpe3JldHVybiBmb2IodGhpcyxhKX07Xy54Yz1mdW5jdGlvbiBwb2IoYSl7cmV0dXJuIHRoaXMuYy54YyhhKX07Xy5IYj1mdW5jdGlvbiBxb2IoKXtyZXR1cm4gdGIodGhpcy5jKX07Xy5kYz1mdW5jdGlvbiByb2IoKXtyZXR1cm4gdGhpcy5jLmRjKCl9O18uZWM9ZnVuY3Rpb24gc29iKCl7cmV0dXJuIGdvYih0aGlzKX07Xy56Yz1mdW5jdGlvbiB1b2IoYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O18uQmM9ZnVuY3Rpb24gdm9iKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5nYz1mdW5jdGlvbiB3b2IoKXtyZXR1cm4gdGhpcy5jLmdjKCl9O18uSWI9ZnVuY3Rpb24geG9iKCl7cmV0dXJuIGZjYih0aGlzLmMpfTtfLkNjPWZ1bmN0aW9uIHlvYigpe3JldHVybiBob2IodGhpcyl9O3ZhciBSSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAnLDYwMCk7YmNiKDM4MiwzNzIsQmllLHpvYik7Xy5OYz1mdW5jdGlvbiBDb2IoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDEpfTtfLkZiPWZ1bmN0aW9uIEFvYihhKXtyZXR1cm4gcGIodGhpcy5iLGEpfTtfLkhiPWZ1bmN0aW9uIEJvYigpe3JldHVybiB0Yih0aGlzLmIpfTt2YXIgVEo9bWRiKGJpZSwnQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU2V0JywzODIpO2JjYig5NDQsMzgyLEJpZSxHb2IpO18uSGM9ZnVuY3Rpb24gSG9iKGEpe3JldHVybiBEb2IodGhpcyxhKX07Xy5JYz1mdW5jdGlvbiBJb2IoYSl7cmV0dXJuIHRoaXMuYi5JYyhhKX07Xy5LYz1mdW5jdGlvbiBKb2IoKXt2YXIgYTthPXRoaXMuYi5LYygpO3JldHVybiBuZXcgTW9iKGEpfTtfLlBjPWZ1bmN0aW9uIEtvYigpe3ZhciBhO2E9dGhpcy5iLlBjKCk7Rm9iKGEsYS5sZW5ndGgpO3JldHVybiBhfTtfLlFjPWZ1bmN0aW9uIExvYihhKXtyZXR1cm4gRW9iKHRoaXMsYSl9O3ZhciBRSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQnLDk0NCk7YmNiKDk0NSwxLGFpZSxNb2IpO18uTmI9ZnVuY3Rpb24gTm9iKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIFBvYigpe3JldHVybiBuZXcgUm9iKEJEKHRoaXMuYS5QYigpLDQyKSl9O18uT2I9ZnVuY3Rpb24gT29iKCl7cmV0dXJuIHRoaXMuYS5PYigpfTtfLlFiPWZ1bmN0aW9uIFFvYigpe3Rocm93IHZiYihuZXcgYmdiKX07dmFyIE9KPW1kYihiaWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldC8xJyw5NDUpO2JjYig2ODgsMSxfamUsUm9iKTtfLkZiPWZ1bmN0aW9uIFNvYihhKXtyZXR1cm4gdGhpcy5hLkZiKGEpfTtfLmNkPWZ1bmN0aW9uIFRvYigpe3JldHVybiB0aGlzLmEuY2QoKX07Xy5kZD1mdW5jdGlvbiBVb2IoKXtyZXR1cm4gdGhpcy5hLmRkKCl9O18uSGI9ZnVuY3Rpb24gVm9iKCl7cmV0dXJuIHRoaXMuYS5IYigpfTtfLmVkPWZ1bmN0aW9uIFdvYihhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uSWI9ZnVuY3Rpb24gWG9iKCl7cmV0dXJuIGZjYih0aGlzLmEpfTt2YXIgUEo9bWRiKGJpZSwnQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0L1VubW9kaWZpYWJsZUVudHJ5Jyw2ODgpO2JjYig2MDEsNTMxLHsyMDoxLDE0OjEsMTU6MSw1NDoxfSxZb2IpO3ZhciBTSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0Jyw2MDEpO2JjYig2ODksMzgyLERpZSxab2IpO18uTmM9ZnVuY3Rpb24gYXBiKCl7cmV0dXJuIG5ldyBSdWIodGhpcyl9O18uRmI9ZnVuY3Rpb24gJG9iKGEpe3JldHVybiBwYih0aGlzLmEsYSl9O18uSGI9ZnVuY3Rpb24gX29iKCl7cmV0dXJuIHRiKHRoaXMuYSl9O3ZhciBVSj1tZGIoYmllLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVTb3J0ZWRTZXQnLDY4OSk7YmNiKDg0NywxLGRrZSxicGIpO18udWU9ZnVuY3Rpb24gY3BiKGEsYil7dmFyIGM7cmV0dXJuIGM9VWNjKEJEKGEsMTEpLEJEKGIsMTEpKSxjIT0wP2M6V2NjKEJEKGEsMTEpLEJEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBkcGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGVwYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgVko9bWRiKGJpZSwnQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlJyw4NDcpO3ZhciBmcGIsZ3BiLGhwYjtiY2IoNzUxLDEsZGtlLGtwYik7Xy51ZT1mdW5jdGlvbiBscGIoYSxiKXtyZXR1cm4ganBiKEJEKGEsMzUpLEJEKGIsMzUpKX07Xy5GYj1mdW5jdGlvbiBtcGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG5wYigpe3JldHVybiBpcGIoKSxocGJ9O3ZhciBXSj1tZGIoYmllLCdDb21wYXJhdG9ycy9OYXR1cmFsT3JkZXJDb21wYXJhdG9yJyw3NTEpO2JjYigxMTc3LDEsZGtlLHBwYik7Xy51ZT1mdW5jdGlvbiBxcGIoYSxiKXtyZXR1cm4gb3BiKEJEKGEsMzUpLEJEKGIsMzUpKX07Xy5GYj1mdW5jdGlvbiBycGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHNwYigpe3JldHVybiBpcGIoKSxncGJ9O3ZhciBYSj1tZGIoYmllLCdDb21wYXJhdG9ycy9SZXZlcnNlTmF0dXJhbE9yZGVyQ29tcGFyYXRvcicsMTE3Nyk7YmNiKDY0LDEsZGtlLHRwYik7Xy5GYj1mdW5jdGlvbiB2cGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnVlPWZ1bmN0aW9uIHVwYihhLGIpe3JldHVybiB0aGlzLmEudWUoYixhKX07Xy52ZT1mdW5jdGlvbiB3cGIoKXtyZXR1cm4gdGhpcy5hfTt2YXIgWUo9bWRiKGJpZSwnQ29tcGFyYXRvcnMvUmV2ZXJzZWRDb21wYXJhdG9yJyw2NCk7YmNiKDE2Niw2MCxUaWUsQXBiKTt2YXIgWko9bWRiKGJpZSwnQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbicsMTY2KTt2YXIgQnBiLENwYjtiY2IoMTkwNCwxLGVrZSxHcGIpO18ud2U9ZnVuY3Rpb24gSHBiKGEpe0VwYih0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIElwYigpe3JldHVybiAnRG91YmxlU3VtbWFyeVN0YXRpc3RpY3NbY291bnQgPSAnK1ViYih0aGlzLmEpKycsIGF2ZyA9ICcrKERiYih0aGlzLmEsMCk/RnBiKHRoaXMpL1NiYih0aGlzLmEpOjApKycsIG1pbiA9ICcrdGhpcy5jKycsIG1heCA9ICcrdGhpcy5iKycsIHN1bSA9ICcrRnBiKHRoaXMpKyddJ307Xy5hPTA7Xy5iPVFqZTtfLmM9UGplO18uZD0wO18uZT0wO18uZj0wO3ZhciBfSj1tZGIoYmllLCdEb3VibGVTdW1tYXJ5U3RhdGlzdGljcycsMTkwNCk7YmNiKDE4MDUsNjAsVGllLEpwYik7dmFyIGFLPW1kYihiaWUsJ0VtcHR5U3RhY2tFeGNlcHRpb24nLDE4MDUpO2JjYig0NTEsMTk2NyxjaWUsUnBiKTtfLnpjPWZ1bmN0aW9uIFhwYihhLGIpe3JldHVybiBPcGIodGhpcyxhLGIpfTtfLiRiPWZ1bmN0aW9uIFNwYigpe0twYih0aGlzKX07Xy5fYj1mdW5jdGlvbiBUcGIoYSl7cmV0dXJuIExwYih0aGlzLGEpfTtfLnVjPWZ1bmN0aW9uIFVwYihhKXt2YXIgYixjO2ZvcihjPW5ldyBHcWIodGhpcy5hKTtjLmE8Yy5jLmEubGVuZ3RoOyl7Yj1GcWIoYyk7aWYod3RiKGEsdGhpcy5iW2IuZ10pKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtfLnZjPWZ1bmN0aW9uIFZwYigpe3JldHVybiBuZXcgX3BiKHRoaXMpfTtfLnhjPWZ1bmN0aW9uIFdwYihhKXtyZXR1cm4gTXBiKHRoaXMsYSl9O18uQmM9ZnVuY3Rpb24gWXBiKGEpe3JldHVybiBQcGIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBacGIoKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBlSz1tZGIoYmllLCdFbnVtTWFwJyw0NTEpO2JjYigxMzUyLGVpZSxmaWUsX3BiKTtfLiRiPWZ1bmN0aW9uIGFxYigpe0twYih0aGlzLmEpfTtfLkhjPWZ1bmN0aW9uIGJxYihhKXtyZXR1cm4gJHBiKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gY3FiKCl7cmV0dXJuIG5ldyBmcWIodGhpcy5hKX07Xy5NYz1mdW5jdGlvbiBkcWIoYSl7dmFyIGI7aWYoJHBiKHRoaXMsYSkpe2I9QkQoYSw0MikuY2QoKTtQcGIodGhpcy5hLGIpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBlcWIoKXtyZXR1cm4gdGhpcy5hLmEuY307dmFyIGNLPW1kYihiaWUsJ0VudW1NYXAvRW50cnlTZXQnLDEzNTIpO2JjYigxMzUzLDEsYWllLGZxYik7Xy5OYj1mdW5jdGlvbiBncWIoYSl7UnJiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gaXFiKCl7cmV0dXJuIHRoaXMuYj1GcWIodGhpcy5hKSxuZXcga3FiKHRoaXMuYyx0aGlzLmIpfTtfLk9iPWZ1bmN0aW9uIGhxYigpe3JldHVybiBFcWIodGhpcy5hKX07Xy5RYj1mdW5jdGlvbiBqcWIoKXt5Q2IoISF0aGlzLmIpO1BwYih0aGlzLmMsdGhpcy5iKTt0aGlzLmI9bnVsbH07dmFyIGJLPW1kYihiaWUsJ0VudW1NYXAvRW50cnlTZXRJdGVyYXRvcicsMTM1Myk7YmNiKDEzNTQsMTk4NCxfamUsa3FiKTtfLmNkPWZ1bmN0aW9uIGxxYigpe3JldHVybiB0aGlzLmF9O18uZGQ9ZnVuY3Rpb24gbXFiKCl7cmV0dXJuIHRoaXMuYi5iW3RoaXMuYS5nXX07Xy5lZD1mdW5jdGlvbiBucWIoYSl7cmV0dXJuIFFwYih0aGlzLmIsdGhpcy5hLmcsYSl9O3ZhciBkSz1tZGIoYmllLCdFbnVtTWFwL01hcEVudHJ5JywxMzU0KTtiY2IoMTc0LGVpZSx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMjE6MX0pO3ZhciBoSz1tZGIoYmllLCdFbnVtU2V0JywxNzQpO2JjYigxNTYsMTc0LHsyMDoxLDI4OjEsMTQ6MSwxNzQ6MSwxNTY6MSwyMToxfSx4cWIpO18uRmM9ZnVuY3Rpb24geXFiKGEpe3JldHVybiBycWIodGhpcyxCRChhLDIyKSl9O18uSGM9ZnVuY3Rpb24genFiKGEpe3JldHVybiB0cWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBBcWIoKXtyZXR1cm4gbmV3IEdxYih0aGlzKX07Xy5NYz1mdW5jdGlvbiBCcWIoYSl7cmV0dXJuIHZxYih0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIENxYigpe3JldHVybiB0aGlzLmN9O18uYz0wO3ZhciBnSz1tZGIoYmllLCdFbnVtU2V0L0VudW1TZXRJbXBsJywxNTYpO2JjYigzNDMsMSxhaWUsR3FiKTtfLk5iPWZ1bmN0aW9uIEhxYihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBKcWIoKXtyZXR1cm4gRnFiKHRoaXMpfTtfLk9iPWZ1bmN0aW9uIElxYigpe3JldHVybiBFcWIodGhpcyl9O18uUWI9ZnVuY3Rpb24gS3FiKCl7eUNiKHRoaXMuYiE9LTEpO05DKHRoaXMuYy5iLHRoaXMuYixudWxsKTstLXRoaXMuYy5jO3RoaXMuYj0tMX07Xy5hPS0xO18uYj0tMTt2YXIgZks9bWRiKGJpZSwnRW51bVNldC9FbnVtU2V0SW1wbC9JdGVyYXRvckltcGwnLDM0Myk7YmNiKDQzLDQ4OCxma2UsTHFiLE1xYixOcWIpO18ucmU9ZnVuY3Rpb24gT3FiKGEsYil7cmV0dXJuIFBEKGEpPT09UEQoYil8fGEhPW51bGwmJnBiKGEsYil9O18uc2U9ZnVuY3Rpb24gUHFiKGEpe3ZhciBiO2I9dGIoYSk7cmV0dXJuIGJ8MH07dmFyIGlLPW1kYihiaWUsJ0hhc2hNYXAnLDQzKTtiY2IoNTMsZWllLGdrZSxUcWIsVXFiLFZxYik7Xy5GYz1mdW5jdGlvbiBYcWIoYSl7cmV0dXJuIFFxYih0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIFlxYigpe3RoaXMuYS4kYigpfTtfLkhjPWZ1bmN0aW9uIFpxYihhKXtyZXR1cm4gUnFiKHRoaXMsYSl9O18uZGM9ZnVuY3Rpb24gJHFiKCl7cmV0dXJuIHRoaXMuYS5nYygpPT0wfTtfLktjPWZ1bmN0aW9uIF9xYigpe3JldHVybiB0aGlzLmEuZWMoKS5LYygpfTtfLk1jPWZ1bmN0aW9uIGFyYihhKXtyZXR1cm4gU3FiKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gYnJiKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgaks9bWRiKGJpZSwnSGFzaFNldCcsNTMpO2JjYigxNzgxLDEsc2llLGRyYik7Xy51ZD1mdW5jdGlvbiBlcmIoYSl7Y3JiKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gZnJiKCl7cmV0dXJuICdJbnRTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICcrVWJiKHRoaXMuYSkrJywgYXZnID0gJysoRGJiKHRoaXMuYSwwKT9TYmIodGhpcy5kKS9TYmIodGhpcy5hKTowKSsnLCBtaW4gPSAnK3RoaXMuYysnLCBtYXggPSAnK3RoaXMuYisnLCBzdW0gPSAnK1ViYih0aGlzLmQpKyddJ307Xy5hPTA7Xy5iPVJpZTtfLmM9T2hlO18uZD0wO3ZhciBrSz1tZGIoYmllLCdJbnRTdW1tYXJ5U3RhdGlzdGljcycsMTc4MSk7YmNiKDEwNDksMSx2aWUsbHJiKTtfLkpjPWZ1bmN0aW9uIG1yYihhKXtyZWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBucmIoKXtyZXR1cm4gbmV3IG9yYih0aGlzKX07Xy5jPTA7dmFyIG1LPW1kYihiaWUsJ0ludGVybmFsSGFzaENvZGVNYXAnLDEwNDkpO2JjYig3MTEsMSxhaWUsb3JiKTtfLk5iPWZ1bmN0aW9uIHByYihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBycmIoKXtyZXR1cm4gdGhpcy5kPXRoaXMuYVt0aGlzLmMrK10sdGhpcy5kfTtfLk9iPWZ1bmN0aW9uIHFyYigpe3ZhciBhO2lmKHRoaXMuYzx0aGlzLmEubGVuZ3RoKXtyZXR1cm4gdHJ1ZX1hPXRoaXMuYi5uZXh0KCk7aWYoIWEuZG9uZSl7dGhpcy5hPWEudmFsdWVbMV07dGhpcy5jPTA7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtfLlFiPWZ1bmN0aW9uIHNyYigpe2tyYih0aGlzLmUsdGhpcy5kLmNkKCkpO3RoaXMuYyE9MCYmLS10aGlzLmN9O18uYz0wO18uZD1udWxsO3ZhciBsSz1tZGIoYmllLCdJbnRlcm5hbEhhc2hDb2RlTWFwLzEnLDcxMSk7dmFyIHZyYjtiY2IoMTA0NywxLHZpZSxGcmIpO18uSmM9ZnVuY3Rpb24gR3JiKGEpe3JlYih0aGlzLGEpfTtfLktjPWZ1bmN0aW9uIEhyYigpe3JldHVybiBuZXcgSXJiKHRoaXMpfTtfLmM9MDtfLmQ9MDt2YXIgcEs9bWRiKGJpZSwnSW50ZXJuYWxTdHJpbmdNYXAnLDEwNDcpO2JjYig3MTAsMSxhaWUsSXJiKTtfLk5iPWZ1bmN0aW9uIEpyYihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBMcmIoKXtyZXR1cm4gdGhpcy5jPXRoaXMuYSx0aGlzLmE9dGhpcy5iLm5leHQoKSxuZXcgTnJiKHRoaXMuZCx0aGlzLmMsdGhpcy5kLmQpfTtfLk9iPWZ1bmN0aW9uIEtyYigpe3JldHVybiAhdGhpcy5hLmRvbmV9O18uUWI9ZnVuY3Rpb24gTXJiKCl7RXJiKHRoaXMuZCx0aGlzLmMudmFsdWVbMF0pfTt2YXIgbks9bWRiKGJpZSwnSW50ZXJuYWxTdHJpbmdNYXAvMScsNzEwKTtiY2IoMTA0OCwxOTg0LF9qZSxOcmIpO18uY2Q9ZnVuY3Rpb24gT3JiKCl7cmV0dXJuIHRoaXMuYi52YWx1ZVswXX07Xy5kZD1mdW5jdGlvbiBQcmIoKXtpZih0aGlzLmEuZCE9dGhpcy5jKXtyZXR1cm4gQ3JiKHRoaXMuYSx0aGlzLmIudmFsdWVbMF0pfXJldHVybiB0aGlzLmIudmFsdWVbMV19O18uZWQ9ZnVuY3Rpb24gUXJiKGEpe3JldHVybiBEcmIodGhpcy5hLHRoaXMuYi52YWx1ZVswXSxhKX07Xy5jPTA7dmFyIG9LPW1kYihiaWUsJ0ludGVybmFsU3RyaW5nTWFwLzInLDEwNDgpO2JjYigyMjgsNDMsZmtlLCRyYixfcmIpO18uJGI9ZnVuY3Rpb24gYXNiKCl7VXJiKHRoaXMpfTtfLl9iPWZ1bmN0aW9uIGJzYihhKXtyZXR1cm4gVnJiKHRoaXMsYSl9O18udWM9ZnVuY3Rpb24gY3NiKGEpe3ZhciBiO2I9dGhpcy5kLmE7d2hpbGUoYiE9dGhpcy5kKXtpZih3dGIoYi5lLGEpKXtyZXR1cm4gdHJ1ZX1iPWIuYX1yZXR1cm4gZmFsc2V9O18udmM9ZnVuY3Rpb24gZHNiKCl7cmV0dXJuIG5ldyBuc2IodGhpcyl9O18ueGM9ZnVuY3Rpb24gZXNiKGEpe3JldHVybiBXcmIodGhpcyxhKX07Xy56Yz1mdW5jdGlvbiBmc2IoYSxiKXtyZXR1cm4gWHJiKHRoaXMsYSxiKX07Xy5CYz1mdW5jdGlvbiBnc2IoYSl7cmV0dXJuIFpyYih0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIGhzYigpe3JldHVybiBWaGIodGhpcy5lKX07Xy5jPWZhbHNlO3ZhciB0Sz1tZGIoYmllLCdMaW5rZWRIYXNoTWFwJywyMjgpO2JjYigzODcsMzgzLHs0ODQ6MSwzODM6MSwzODc6MSw0MjoxfSxrc2IsbHNiKTt2YXIgcUs9bWRiKGJpZSwnTGlua2VkSGFzaE1hcC9DaGFpbkVudHJ5JywzODcpO2JjYig3MDEsZWllLGZpZSxuc2IpO18uJGI9ZnVuY3Rpb24gb3NiKCl7VXJiKHRoaXMuYSl9O18uSGM9ZnVuY3Rpb24gcHNiKGEpe3JldHVybiBtc2IodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBxc2IoKXtyZXR1cm4gbmV3IHVzYih0aGlzKX07Xy5NYz1mdW5jdGlvbiByc2IoYSl7dmFyIGI7aWYobXNiKHRoaXMsYSkpe2I9QkQoYSw0MikuY2QoKTtacmIodGhpcy5hLGIpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBzc2IoKXtyZXR1cm4gVmhiKHRoaXMuYS5lKX07dmFyIHNLPW1kYihiaWUsJ0xpbmtlZEhhc2hNYXAvRW50cnlTZXQnLDcwMSk7YmNiKDcwMiwxLGFpZSx1c2IpO18uTmI9ZnVuY3Rpb24gdnNiKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIHhzYigpe3JldHVybiB0c2IodGhpcyl9O18uT2I9ZnVuY3Rpb24gd3NiKCl7cmV0dXJuIHRoaXMuYiE9dGhpcy5jLmEuZH07Xy5RYj1mdW5jdGlvbiB5c2IoKXt5Q2IoISF0aGlzLmEpO3hwYih0aGlzLmMuYS5lLHRoaXMpO2pzYih0aGlzLmEpO1RoYih0aGlzLmMuYS5lLHRoaXMuYS5kKTt5cGIodGhpcy5jLmEuZSx0aGlzKTt0aGlzLmE9bnVsbH07dmFyIHJLPW1kYihiaWUsJ0xpbmtlZEhhc2hNYXAvRW50cnlTZXQvRW50cnlJdGVyYXRvcicsNzAyKTtiY2IoMTc4LDUzLGdrZSx6c2IsQXNiLEJzYik7dmFyIHVLPW1kYihiaWUsJ0xpbmtlZEhhc2hTZXQnLDE3OCk7YmNiKDY4LDE5NjQsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw2ODoxLDE1OjF9LFBzYixRc2IpO18uRmM9ZnVuY3Rpb24gUnNiKGEpe3JldHVybiBEc2IodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBTc2IoKXtPc2IodGhpcyl9O18uWmM9ZnVuY3Rpb24gVHNiKGEpe3JldHVybiBKc2IodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBVc2IoKXtyZXR1cm4gdGhpcy5ifTtfLmI9MDt2YXIgeEs9bWRiKGJpZSwnTGlua2VkTGlzdCcsNjgpO2JjYig5NzAsMSxqaWUsJHNiKTtfLk5iPWZ1bmN0aW9uIGF0YihhKXtScmIodGhpcyxhKX07Xy5SYj1mdW5jdGlvbiBfc2IoYSl7VnNiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gYnRiKCl7cmV0dXJuIFdzYih0aGlzKX07Xy5TYj1mdW5jdGlvbiBjdGIoKXtyZXR1cm4gdGhpcy5iLmIhPXRoaXMuZC5hfTtfLlBiPWZ1bmN0aW9uIGR0Yigpe3JldHVybiBYc2IodGhpcyl9O18uVGI9ZnVuY3Rpb24gZXRiKCl7cmV0dXJuIHRoaXMuYX07Xy5VYj1mdW5jdGlvbiBmdGIoKXtyZXR1cm4gWXNiKHRoaXMpfTtfLlZiPWZ1bmN0aW9uIGd0Yigpe3JldHVybiB0aGlzLmEtMX07Xy5RYj1mdW5jdGlvbiBodGIoKXtac2IodGhpcyl9O18uV2I9ZnVuY3Rpb24gaXRiKGEpe3lDYighIXRoaXMuYyk7dGhpcy5jLmM9YX07Xy5hPTA7Xy5jPW51bGw7dmFyIHZLPW1kYihiaWUsJ0xpbmtlZExpc3QvTGlzdEl0ZXJhdG9ySW1wbCcsOTcwKTtiY2IoNjA4LDEse30sanRiKTt2YXIgd0s9bWRiKGJpZSwnTGlua2VkTGlzdC9Ob2RlJyw2MDgpO2JjYigxOTU5LDEse30pO3ZhciBsdGIsbXRiO3ZhciBCSz1tZGIoYmllLCdMb2NhbGUnLDE5NTkpO2JjYig4NjEsMTk1OSx7fSxvdGIpO18uSWI9ZnVuY3Rpb24gcHRiKCl7cmV0dXJuICcnfTt2YXIgeks9bWRiKGJpZSwnTG9jYWxlLzEnLDg2MSk7YmNiKDg2MiwxOTU5LHt9LHF0Yik7Xy5JYj1mdW5jdGlvbiBydGIoKXtyZXR1cm4gJ3Vua25vd24nfTt2YXIgQUs9bWRiKGJpZSwnTG9jYWxlLzQnLDg2Mik7YmNiKDEwOSw2MCx7MzoxLDEwMjoxLDYwOjEsNzg6MSwxMDk6MX0sdXRiLHZ0Yik7dmFyIEVLPW1kYihiaWUsJ05vU3VjaEVsZW1lbnRFeGNlcHRpb24nLDEwOSk7YmNiKDQwNCwxLHs0MDQ6MX0sRnRiKTtfLkZiPWZ1bmN0aW9uIEd0YihhKXt2YXIgYjtpZihhPT09dGhpcyl7cmV0dXJuIHRydWV9aWYoIUpEKGEsNDA0KSl7cmV0dXJuIGZhbHNlfWI9QkQoYSw0MDQpO3JldHVybiB3dGIodGhpcy5hLGIuYSl9O18uSGI9ZnVuY3Rpb24gSHRiKCl7cmV0dXJuIHh0Yih0aGlzLmEpfTtfLkliPWZ1bmN0aW9uIEp0Yigpe3JldHVybiB0aGlzLmEhPW51bGw/V2hlK3hmYih0aGlzLmEpKycpJzonT3B0aW9uYWwuZW1wdHkoKSd9O3ZhciB6dGI7dmFyIEhLPW1kYihiaWUsJ09wdGlvbmFsJyw0MDQpO2JjYig0NjMsMSx7NDYzOjF9LE90YixQdGIpO18uRmI9ZnVuY3Rpb24gUXRiKGEpe3ZhciBiO2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1pZighSkQoYSw0NjMpKXtyZXR1cm4gZmFsc2V9Yj1CRChhLDQ2Myk7cmV0dXJuIHRoaXMuYT09Yi5hJiZLZGIodGhpcy5iLGIuYik9PTB9O18uSGI9ZnVuY3Rpb24gUnRiKCl7cmV0dXJuIHRoaXMuYT9RRCh0aGlzLmIpOjB9O18uSWI9ZnVuY3Rpb24gU3RiKCl7cmV0dXJuIHRoaXMuYT8nT3B0aW9uYWxEb3VibGUub2YoJysoJycrdGhpcy5iKSsnKSc6J09wdGlvbmFsRG91YmxlLmVtcHR5KCknfTtfLmE9ZmFsc2U7Xy5iPTA7dmFyIEt0Yjt2YXIgRks9bWRiKGJpZSwnT3B0aW9uYWxEb3VibGUnLDQ2Myk7YmNiKDUxNywxLHs1MTc6MX0sV3RiLFh0Yik7Xy5GYj1mdW5jdGlvbiBZdGIoYSl7dmFyIGI7aWYoYT09PXRoaXMpe3JldHVybiB0cnVlfWlmKCFKRChhLDUxNykpe3JldHVybiBmYWxzZX1iPUJEKGEsNTE3KTtyZXR1cm4gdGhpcy5hPT1iLmEmJmJlYih0aGlzLmIsYi5iKT09MH07Xy5IYj1mdW5jdGlvbiBadGIoKXtyZXR1cm4gdGhpcy5hP3RoaXMuYjowfTtfLkliPWZ1bmN0aW9uICR0Yigpe3JldHVybiB0aGlzLmE/J09wdGlvbmFsSW50Lm9mKCcrKCcnK3RoaXMuYikrJyknOidPcHRpb25hbEludC5lbXB0eSgpJ307Xy5hPWZhbHNlO18uYj0wO3ZhciBUdGI7dmFyIEdLPW1kYihiaWUsJ09wdGlvbmFsSW50Jyw1MTcpO2JjYig1MDMsMjAwNCxkaWUsZ3ViKTtfLkdjPWZ1bmN0aW9uIGh1YihhKXtyZXR1cm4gX3RiKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gaXViKCl7dGhpcy5iLmM9S0MoU0ksVWhlLDEsMCw1LDEpfTtfLkhjPWZ1bmN0aW9uIGp1YihhKXtyZXR1cm4gKGE9PW51bGw/LTE6SmtiKHRoaXMuYixhLDApKSE9LTF9O18uS2M9ZnVuY3Rpb24ga3ViKCl7cmV0dXJuIG5ldyBxdWIodGhpcyl9O18uTWM9ZnVuY3Rpb24gbHViKGEpe3JldHVybiBldWIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBtdWIoKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RofTtfLk5jPWZ1bmN0aW9uIG51Yigpe3JldHVybiBuZXcgS3ViKHRoaXMsMjU2KX07Xy5QYz1mdW5jdGlvbiBvdWIoKXtyZXR1cm4gUGtiKHRoaXMuYil9O18uUWM9ZnVuY3Rpb24gcHViKGEpe3JldHVybiBRa2IodGhpcy5iLGEpfTt2YXIgSks9bWRiKGJpZSwnUHJpb3JpdHlRdWV1ZScsNTAzKTtiY2IoMTI3NywxLGFpZSxxdWIpO18uTmI9ZnVuY3Rpb24gcnViKGEpe1JyYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIHR1Yigpe3JldHVybiB0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGh9O18uUGI9ZnVuY3Rpb24gdXViKCl7c0NiKHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aCk7dGhpcy5iPXRoaXMuYSsrO3JldHVybiBJa2IodGhpcy5jLmIsdGhpcy5iKX07Xy5RYj1mdW5jdGlvbiB2dWIoKXt5Q2IodGhpcy5iIT0tMSk7ZnViKHRoaXMuYyx0aGlzLmE9dGhpcy5iKTt0aGlzLmI9LTF9O18uYT0wO18uYj0tMTt2YXIgSUs9bWRiKGJpZSwnUHJpb3JpdHlRdWV1ZS8xJywxMjc3KTtiY2IoMjMwLDEsezIzMDoxfSxHdWIsSHViKTtfLmE9MDtfLmI9MDt2YXIgd3ViLHh1Yix5dWI9MDt2YXIgS0s9bWRiKGJpZSwnUmFuZG9tJywyMzApO2JjYigyNywxLHBpZSxLdWIsTHViLE11Yik7Xy5xZD1mdW5jdGlvbiBOdWIoKXtyZXR1cm4gdGhpcy5hfTtfLnJkPWZ1bmN0aW9uIE91Yigpe0l1Yih0aGlzKTtyZXR1cm4gdGhpcy5jfTtfLk5iPWZ1bmN0aW9uIFB1YihhKXtJdWIodGhpcyk7dGhpcy5kLk5iKGEpfTtfLnNkPWZ1bmN0aW9uIFF1YihhKXtyZXR1cm4gSnViKHRoaXMsYSl9O18uYT0wO18uYz0wO3ZhciAkSz1tZGIoYmllLCdTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvcicsMjcpO2JjYig0ODUsMjcscGllLFJ1Yik7dmFyIE1LPW1kYihiaWUsJ1NvcnRlZFNldC8xJyw0ODUpO2JjYig2MDIsMSxla2UsVHViKTtfLndlPWZ1bmN0aW9uIFV1YihhKXt0aGlzLmEudGQoYSl9O3ZhciBOSz1tZGIoYmllLCdTcGxpdGVyYXRvci9PZkRvdWJsZS8wbWV0aG9kcmVmJGFjY2VwdCRUeXBlJyw2MDIpO2JjYig2MDMsMSxla2UsVnViKTtfLndlPWZ1bmN0aW9uIFd1YihhKXt0aGlzLmEudGQoYSl9O3ZhciBPSz1tZGIoYmllLCdTcGxpdGVyYXRvci9PZkRvdWJsZS8xbWV0aG9kcmVmJGFjY2VwdCRUeXBlJyw2MDMpO2JjYig2MDQsMSxzaWUsWHViKTtfLnVkPWZ1bmN0aW9uIFl1YihhKXt0aGlzLmEudGQobWViKGEpKX07dmFyIFBLPW1kYihiaWUsJ1NwbGl0ZXJhdG9yL09mSW50LzJtZXRob2RyZWYkYWNjZXB0JFR5cGUnLDYwNCk7YmNiKDYwNSwxLHNpZSxadWIpO18udWQ9ZnVuY3Rpb24gJHViKGEpe3RoaXMuYS50ZChtZWIoYSkpfTt2YXIgUUs9bWRiKGJpZSwnU3BsaXRlcmF0b3IvT2ZJbnQvM21ldGhvZHJlZiRhY2NlcHQkVHlwZScsNjA1KTtiY2IoNjE3LDEscGllKTtfLk5iPWZ1bmN0aW9uIGV2YihhKXtTdWIodGhpcyxhKX07Xy5xZD1mdW5jdGlvbiBjdmIoKXtyZXR1cm4gdGhpcy5kfTtfLnJkPWZ1bmN0aW9uIGR2Yigpe3JldHVybiB0aGlzLmV9O18uZD0wO18uZT0wO3ZhciBXSz1tZGIoYmllLCdTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yJyw2MTcpO2JjYig3MjEsNjE3LHBpZSk7Xy54ZT1mdW5jdGlvbiBndmIoYSl7X3ViKHRoaXMsYSl9O18uTmI9ZnVuY3Rpb24gaHZiKGEpe0pEKGEsMTgyKT9fdWIodGhpcyxCRChhLDE4MikpOl91Yih0aGlzLG5ldyBWdWIoYSkpfTtfLnNkPWZ1bmN0aW9uIGl2YihhKXtyZXR1cm4gSkQoYSwxODIpP3RoaXMueWUoQkQoYSwxODIpKTp0aGlzLnllKG5ldyBUdWIoYSkpfTt2YXIgUks9bWRiKGJpZSwnU3BsaXRlcmF0b3JzL0Fic3RyYWN0RG91YmxlU3BsaXRlcmF0b3InLDcyMSk7YmNiKDcyMCw2MTcscGllKTtfLnhlPWZ1bmN0aW9uIGt2YihhKXtfdWIodGhpcyxhKX07Xy5OYj1mdW5jdGlvbiBsdmIoYSl7SkQoYSwxOTYpP191Yih0aGlzLEJEKGEsMTk2KSk6X3ViKHRoaXMsbmV3IFp1YihhKSl9O18uc2Q9ZnVuY3Rpb24gbXZiKGEpe3JldHVybiBKRChhLDE5Nik/dGhpcy55ZShCRChhLDE5NikpOnRoaXMueWUobmV3IFh1YihhKSl9O3ZhciBTSz1tZGIoYmllLCdTcGxpdGVyYXRvcnMvQWJzdHJhY3RJbnRTcGxpdGVyYXRvcicsNzIwKTtiY2IoNTQwLDYxNyxwaWUpO3ZhciBUSz1tZGIoYmllLCdTcGxpdGVyYXRvcnMvQWJzdHJhY3RTcGxpdGVyYXRvcicsNTQwKTtiY2IoNjkyLDEscGllKTtfLk5iPWZ1bmN0aW9uIHR2YihhKXtTdWIodGhpcyxhKX07Xy5xZD1mdW5jdGlvbiBydmIoKXtyZXR1cm4gdGhpcy5ifTtfLnJkPWZ1bmN0aW9uIHN2Yigpe3JldHVybiB0aGlzLmQtdGhpcy5jfTtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgVks9bWRiKGJpZSwnU3BsaXRlcmF0b3JzL0Jhc2VBcnJheVNwbGl0ZXJhdG9yJyw2OTIpO2JjYig5NDcsNjkyLHBpZSx2dmIpO18uemU9ZnVuY3Rpb24gd3ZiKGEsYil7dXZiKHRoaXMsQkQoYSwzOCksYil9O18uTmI9ZnVuY3Rpb24geHZiKGEpe292Yih0aGlzLGEpfTtfLnNkPWZ1bmN0aW9uIHl2YihhKXtyZXR1cm4gcHZiKHRoaXMsYSl9O3ZhciBVSz1tZGIoYmllLCdTcGxpdGVyYXRvcnMvQXJyYXlTcGxpdGVyYXRvcicsOTQ3KTtiY2IoNjkzLDY5MixwaWUsQXZiKTtfLnplPWZ1bmN0aW9uIEN2YihhLGIpe3p2Yih0aGlzLEJEKGEsMTgyKSxiKX07Xy54ZT1mdW5jdGlvbiBEdmIoYSl7b3ZiKHRoaXMsYSl9O18uTmI9ZnVuY3Rpb24gRXZiKGEpe0pEKGEsMTgyKT9vdmIodGhpcyxCRChhLDE4MikpOm92Yih0aGlzLG5ldyBWdWIoYSkpfTtfLnllPWZ1bmN0aW9uIEZ2YihhKXtyZXR1cm4gcHZiKHRoaXMsYSl9O18uc2Q9ZnVuY3Rpb24gR3ZiKGEpe3JldHVybiBKRChhLDE4Mik/cHZiKHRoaXMsQkQoYSwxODIpKTpwdmIodGhpcyxuZXcgVHViKGEpKX07dmFyIFhLPW1kYihiaWUsJ1NwbGl0ZXJhdG9ycy9Eb3VibGVBcnJheVNwbGl0ZXJhdG9yJyw2OTMpO2JjYigxOTY4LDEscGllKTtfLk5iPWZ1bmN0aW9uIEx2YihhKXtTdWIodGhpcyxhKX07Xy5xZD1mdW5jdGlvbiBKdmIoKXtyZXR1cm4gMTY0NDh9O18ucmQ9ZnVuY3Rpb24gS3ZiKCl7cmV0dXJuIDB9O3ZhciBIdmI7dmFyIFpLPW1kYihiaWUsJ1NwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yJywxOTY4KTtiY2IoOTQ2LDE5NjgscGllLE92Yik7Xy54ZT1mdW5jdGlvbiBQdmIoYSl7TXZiKGEpfTtfLk5iPWZ1bmN0aW9uIFF2YihhKXtKRChhLDE5Nik/TXZiKEJEKGEsMTk2KSk6TXZiKG5ldyBadWIoYSkpfTtfLnllPWZ1bmN0aW9uIFJ2YihhKXtyZXR1cm4gTnZiKGEpfTtfLnNkPWZ1bmN0aW9uIFN2YihhKXtyZXR1cm4gSkQoYSwxOTYpP052YihCRChhLDE5NikpOk52YihuZXcgWHViKGEpKX07dmFyIFlLPW1kYihiaWUsJ1NwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Jyw5NDYpO2JjYig1ODAsNTIscGtlLFd2Yik7Xy5WYz1mdW5jdGlvbiBYdmIoYSxiKXtfdmIoYSx0aGlzLmEuYy5sZW5ndGgrMSk7RGtiKHRoaXMuYSxhLGIpfTtfLkZjPWZ1bmN0aW9uIFl2YihhKXtyZXR1cm4gRWtiKHRoaXMuYSxhKX07Xy5XYz1mdW5jdGlvbiBadmIoYSxiKXtfdmIoYSx0aGlzLmEuYy5sZW5ndGgrMSk7cmV0dXJuIEZrYih0aGlzLmEsYSxiKX07Xy5HYz1mdW5jdGlvbiAkdmIoYSl7cmV0dXJuIEdrYih0aGlzLmEsYSl9O18uJGI9ZnVuY3Rpb24gYXdiKCl7dGhpcy5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpfTtfLkhjPWZ1bmN0aW9uIGJ3YihhKXtyZXR1cm4gSmtiKHRoaXMuYSxhLDApIT0tMX07Xy5JYz1mdW5jdGlvbiBjd2IoYSl7cmV0dXJuIEJlKHRoaXMuYSxhKX07Xy5KYz1mdW5jdGlvbiBkd2IoYSl7SGtiKHRoaXMuYSxhKX07Xy5YYj1mdW5jdGlvbiBld2IoYSl7cmV0dXJuIF92YihhLHRoaXMuYS5jLmxlbmd0aCksSWtiKHRoaXMuYSxhKX07Xy5YYz1mdW5jdGlvbiBmd2IoYSl7cmV0dXJuIEprYih0aGlzLmEsYSwwKX07Xy5kYz1mdW5jdGlvbiBnd2IoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfTtfLktjPWZ1bmN0aW9uIGh3Yigpe3JldHVybiBuZXcgb2xiKHRoaXMuYSl9O18uJGM9ZnVuY3Rpb24gaXdiKGEpe3JldHVybiBfdmIoYSx0aGlzLmEuYy5sZW5ndGgpLEtrYih0aGlzLmEsYSl9O18uVWQ9ZnVuY3Rpb24gandiKGEsYil7TWtiKHRoaXMuYSxhLGIpfTtfLl9jPWZ1bmN0aW9uIGt3YihhLGIpe3JldHVybiBfdmIoYSx0aGlzLmEuYy5sZW5ndGgpLE5rYih0aGlzLmEsYSxiKX07Xy5nYz1mdW5jdGlvbiBsd2IoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofTtfLmFkPWZ1bmN0aW9uIG13YihhKXtPa2IodGhpcy5hLGEpfTtfLmJkPWZ1bmN0aW9uIG53YihhLGIpe3JldHVybiBuZXcgSmliKHRoaXMuYSxhLGIpfTtfLlBjPWZ1bmN0aW9uIG93Yigpe3JldHVybiBQa2IodGhpcy5hKX07Xy5RYz1mdW5jdGlvbiBwd2IoYSl7cmV0dXJuIFFrYih0aGlzLmEsYSl9O18uSWI9ZnVuY3Rpb24gcXdiKCl7cmV0dXJuIEZlKHRoaXMuYSl9O3ZhciBsTD1tZGIoYmllLCdWZWN0b3InLDU4MCk7YmNiKDgwOSw1ODAscGtlLHR3Yik7dmFyIF9LPW1kYihiaWUsJ1N0YWNrJyw4MDkpO2JjYigyMDYsMSx7MjA2OjF9LHh3Yik7Xy5JYj1mdW5jdGlvbiB5d2IoKXtyZXR1cm4gd3diKHRoaXMpfTt2YXIgYUw9bWRiKGJpZSwnU3RyaW5nSm9pbmVyJywyMDYpO2JjYig1NDQsMTk5Mix7MzoxLDgzOjEsMTcxOjEsMTYxOjF9LFB3YixRd2IpO18uJGI9ZnVuY3Rpb24gUndiKCl7endiKHRoaXMpfTtfLnZjPWZ1bmN0aW9uIFN3Yigpe3JldHVybiBuZXcgY3hiKHRoaXMpfTtfLnpjPWZ1bmN0aW9uIFR3YihhLGIpe3JldHVybiBJd2IodGhpcyxhLGIpfTtfLkJjPWZ1bmN0aW9uIFV3YihhKXtyZXR1cm4gSndiKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gVndiKCl7cmV0dXJuIHRoaXMuY307Xy5jPTA7dmFyIGpMPW1kYihiaWUsJ1RyZWVNYXAnLDU0NCk7YmNiKDM5MCwxLGFpZSxZd2IpO18uTmI9ZnVuY3Rpb24gJHdiKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIGF4Yigpe3JldHVybiBXd2IodGhpcyl9O18uT2I9ZnVuY3Rpb24gX3diKCl7cmV0dXJuIHNpYih0aGlzLmEpfTtfLlFiPWZ1bmN0aW9uIGJ4Yigpe1h3Yih0aGlzKX07dmFyIGJMPW1kYihiaWUsJ1RyZWVNYXAvRW50cnlJdGVyYXRvcicsMzkwKTtiY2IoNDM1LDczOSxmaWUsY3hiKTtfLiRiPWZ1bmN0aW9uIGR4Yigpe3p3Yih0aGlzLmEpfTt2YXIgY0w9bWRiKGJpZSwnVHJlZU1hcC9FbnRyeVNldCcsNDM1KTtiY2IoNDM2LDM4Myx7NDg0OjEsMzgzOjEsNDI6MSw0MzY6MX0sZXhiKTtfLmI9ZmFsc2U7dmFyIGRMPW1kYihiaWUsJ1RyZWVNYXAvTm9kZScsNDM2KTtiY2IoNjIxLDEse30sZnhiKTtfLkliPWZ1bmN0aW9uIGd4Yigpe3JldHVybiAnU3RhdGU6IG12PScrdGhpcy5jKycgdmFsdWU9Jyt0aGlzLmQrJyBkb25lPScrdGhpcy5hKycgZm91bmQ9Jyt0aGlzLmJ9O18uYT1mYWxzZTtfLmI9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBlTD1tZGIoYmllLCdUcmVlTWFwL1N0YXRlJyw2MjEpO2JjYigyOTcsMjIscWtlLG14Yik7Xy5BZT1mdW5jdGlvbiBueGIoKXtyZXR1cm4gZmFsc2V9O18uQmU9ZnVuY3Rpb24gb3hiKCl7cmV0dXJuIGZhbHNlfTt2YXIgaHhiLGl4YixqeGIsa3hiO3ZhciBpTD1uZGIoYmllLCdUcmVlTWFwL1N1Yk1hcFR5cGUnLDI5NyxDSSxxeGIscHhiKTtiY2IoMTExMiwyOTcscWtlLHJ4Yik7Xy5CZT1mdW5jdGlvbiBzeGIoKXtyZXR1cm4gdHJ1ZX07dmFyIGZMPW5kYihiaWUsJ1RyZWVNYXAvU3ViTWFwVHlwZS8xJywxMTEyLGlMLG51bGwsbnVsbCk7YmNiKDExMTMsMjk3LHFrZSx0eGIpO18uQWU9ZnVuY3Rpb24gdXhiKCl7cmV0dXJuIHRydWV9O18uQmU9ZnVuY3Rpb24gdnhiKCl7cmV0dXJuIHRydWV9O3ZhciBnTD1uZGIoYmllLCdUcmVlTWFwL1N1Yk1hcFR5cGUvMicsMTExMyxpTCxudWxsLG51bGwpO2JjYigxMTE0LDI5Nyxxa2Usd3hiKTtfLkFlPWZ1bmN0aW9uIHh4Yigpe3JldHVybiB0cnVlfTt2YXIgaEw9bmRiKGJpZSwnVHJlZU1hcC9TdWJNYXBUeXBlLzMnLDExMTQsaUwsbnVsbCxudWxsKTt2YXIgeXhiO2JjYigyMDgsZWllLHszOjEsMjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxLDIwODoxfSxHeGIsSHhiKTtfLk5jPWZ1bmN0aW9uIE94Yigpe3JldHVybiBuZXcgUnViKHRoaXMpfTtfLkZjPWZ1bmN0aW9uIEl4YihhKXtyZXR1cm4gQXhiKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gSnhiKCl7endiKHRoaXMuYSl9O18uSGM9ZnVuY3Rpb24gS3hiKGEpe3JldHVybiB1amIodGhpcy5hLGEpfTtfLktjPWZ1bmN0aW9uIEx4Yigpe3ZhciBhO3JldHVybiBhPW5ldyBZd2IoKG5ldyBjeGIoKG5ldyBHamIodGhpcy5hKSkuYSkpLmIpLG5ldyBOamIoYSl9O18uTWM9ZnVuY3Rpb24gTXhiKGEpe3JldHVybiBGeGIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBOeGIoKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBrTD1tZGIoYmllLCdUcmVlU2V0JywyMDgpO2JjYig5NjYsMSx7fSxSeGIpO18uQ2U9ZnVuY3Rpb24gU3hiKGEsYil7cmV0dXJuIFB4Yih0aGlzLmEsYSxiKX07dmFyIG1MPW1kYihya2UsJ0JpbmFyeU9wZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDk2Nik7YmNiKDk2NywxLHt9LFR4Yik7Xy5DZT1mdW5jdGlvbiBVeGIoYSxiKXtyZXR1cm4gUXhiKHRoaXMuYSxhLGIpfTt2YXIgbkw9bWRiKHJrZSwnQmluYXJ5T3BlcmF0b3IvbGFtYmRhJDEkVHlwZScsOTY3KTtiY2IoODQ2LDEse30sVnhiKTtfLktiPWZ1bmN0aW9uIFd4YihhKXtyZXR1cm4gYX07dmFyIG9MPW1kYihya2UsJ0Z1bmN0aW9uL2xhbWJkYSQwJFR5cGUnLDg0Nik7YmNiKDQzMSwxLE9pZSxYeGIpO18uTWI9ZnVuY3Rpb24gWXhiKGEpe3JldHVybiAhdGhpcy5hLk1iKGEpfTt2YXIgcEw9bWRiKHJrZSwnUHJlZGljYXRlL2xhbWJkYSQyJFR5cGUnLDQzMSk7YmNiKDU3MiwxLHs1NzI6MX0pO3ZhciBxTD1tZGIoc2tlLCdIYW5kbGVyJyw1NzIpO2JjYigyMDA3LDEsUWhlKTtfLm5lPWZ1bmN0aW9uIF94Yigpe3JldHVybiAnRFVNTVknfTtfLkliPWZ1bmN0aW9uIGF5Yigpe3JldHVybiB0aGlzLm5lKCl9O3ZhciBaeGI7dmFyIHNMPW1kYihza2UsJ0xldmVsJywyMDA3KTtiY2IoMTYyMSwyMDA3LFFoZSxieWIpO18ubmU9ZnVuY3Rpb24gY3liKCl7cmV0dXJuICdJTkZPJ307dmFyIHJMPW1kYihza2UsJ0xldmVsL0xldmVsSW5mbycsMTYyMSk7YmNiKDE2NDAsMSx7fSxneWIpO3ZhciBkeWI7dmFyIHRMPW1kYihza2UsJ0xvZ01hbmFnZXInLDE2NDApO2JjYigxNzgwLDEsUWhlLGl5Yik7Xy5iPW51bGw7dmFyIHVMPW1kYihza2UsJ0xvZ1JlY29yZCcsMTc4MCk7YmNiKDUxMiwxLHs1MTI6MX0sd3liKTtfLmU9ZmFsc2U7dmFyIGp5Yj1mYWxzZSxreWI9ZmFsc2UsbHliPWZhbHNlLG15Yj1mYWxzZSxueWI9ZmFsc2U7dmFyIHZMPW1kYihza2UsJ0xvZ2dlcicsNTEyKTtiY2IoODE5LDU3Mix7NTcyOjF9LHp5Yik7dmFyIHdMPW1kYihza2UsJ1NpbXBsZUNvbnNvbGVMb2dIYW5kbGVyJyw4MTkpO2JjYigxMzIsMjIsezM6MSwzNToxLDIyOjEsMTMyOjF9LEd5Yik7dmFyIEN5YixEeWIsRXliO3ZhciB4TD1uZGIodmtlLCdDb2xsZWN0b3IvQ2hhcmFjdGVyaXN0aWNzJywxMzIsQ0ksSXliLEh5Yik7dmFyIEp5YjtiY2IoNzQ0LDEse30sTHliKTt2YXIgeUw9bWRiKHZrZSwnQ29sbGVjdG9ySW1wbCcsNzQ0KTtiY2IoMTA2MCwxLHt9LFp5Yik7Xy5DZT1mdW5jdGlvbiAkeWIoYSxiKXtyZXR1cm4gdndiKEJEKGEsMjA2KSxCRChiLDIwNikpfTt2YXIgekw9bWRiKHZrZSwnQ29sbGVjdG9ycy8xMG1ldGhvZHJlZiRtZXJnZSRUeXBlJywxMDYwKTtiY2IoMTA2MSwxLHt9LF95Yik7Xy5LYj1mdW5jdGlvbiBhemIoYSl7cmV0dXJuIHd3YihCRChhLDIwNikpfTt2YXIgQUw9bWRiKHZrZSwnQ29sbGVjdG9ycy8xMW1ldGhvZHJlZiR0b1N0cmluZyRUeXBlJywxMDYxKTtiY2IoMTA2MiwxLHt9LGJ6Yik7Xy5LYj1mdW5jdGlvbiBjemIoYSl7cmV0dXJuIEJjYigpLF9QYihhKT90cnVlOmZhbHNlfTt2YXIgQkw9bWRiKHZrZSwnQ29sbGVjdG9ycy8xMm1ldGhvZHJlZiR0ZXN0JFR5cGUnLDEwNjIpO2JjYigyNTEsMSx7fSxkemIpO18uT2Q9ZnVuY3Rpb24gZXpiKGEsYil7QkQoYSwxNCkuRmMoYil9O3ZhciBDTD1tZGIodmtlLCdDb2xsZWN0b3JzLzIwbWV0aG9kcmVmJGFkZCRUeXBlJywyNTEpO2JjYigyNTMsMSx7fSxmemIpO18uRWU9ZnVuY3Rpb24gZ3piKCl7cmV0dXJuIG5ldyBSa2J9O3ZhciBETD1tZGIodmtlLCdDb2xsZWN0b3JzLzIxbWV0aG9kcmVmJGN0b3IkVHlwZScsMjUzKTtiY2IoMzQ2LDEse30saHpiKTtfLkVlPWZ1bmN0aW9uIGl6Yigpe3JldHVybiBuZXcgVHFifTt2YXIgRUw9bWRiKHZrZSwnQ29sbGVjdG9ycy8yM21ldGhvZHJlZiRjdG9yJFR5cGUnLDM0Nik7YmNiKDM0NywxLHt9LGp6Yik7Xy5PZD1mdW5jdGlvbiBremIoYSxiKXtRcWIoQkQoYSw1MyksYil9O3ZhciBGTD1tZGIodmtlLCdDb2xsZWN0b3JzLzI0bWV0aG9kcmVmJGFkZCRUeXBlJywzNDcpO2JjYigxMDU1LDEse30sbHpiKTtfLkNlPWZ1bmN0aW9uIG16YihhLGIpe3JldHVybiBNeWIoQkQoYSwxNSksQkQoYiwxNCkpfTt2YXIgR0w9bWRiKHZrZSwnQ29sbGVjdG9ycy80bWV0aG9kcmVmJGFkZEFsbCRUeXBlJywxMDU1KTtiY2IoMTA1OSwxLHt9LG56Yik7Xy5PZD1mdW5jdGlvbiBvemIoYSxiKXt1d2IoQkQoYSwyMDYpLEJEKGIsNDc1KSl9O3ZhciBITD1tZGIodmtlLCdDb2xsZWN0b3JzLzltZXRob2RyZWYkYWRkJFR5cGUnLDEwNTkpO2JjYigxMDU4LDEse30scHpiKTtfLkVlPWZ1bmN0aW9uIHF6Yigpe3JldHVybiBuZXcgeHdiKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX07dmFyIElMPW1kYih2a2UsJ0NvbGxlY3RvcnMvbGFtYmRhJDE1JFR5cGUnLDEwNTgpO2JjYigxMDYzLDEse30scnpiKTtfLkVlPWZ1bmN0aW9uIHN6Yigpe3ZhciBhO3JldHVybiBhPW5ldyAkcmIsWHJiKGEsKEJjYigpLGZhbHNlKSxuZXcgUmtiKSxYcmIoYSx0cnVlLG5ldyBSa2IpLGF9O3ZhciBKTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQyMiRUeXBlJywxMDYzKTtiY2IoMTA2NCwxLHt9LHR6Yik7Xy5FZT1mdW5jdGlvbiB1emIoKXtyZXR1cm4gT0MoR0MoU0ksMSksVWhlLDEsNSxbdGhpcy5hXSl9O3ZhciBLTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQyNSRUeXBlJywxMDY0KTtiY2IoMTA2NSwxLHt9LHZ6Yik7Xy5PZD1mdW5jdGlvbiB3emIoYSxiKXtPeWIodGhpcy5hLENEKGEpKX07dmFyIExMPW1kYih2a2UsJ0NvbGxlY3RvcnMvbGFtYmRhJDI2JFR5cGUnLDEwNjUpO2JjYigxMDY2LDEse30seHpiKTtfLkNlPWZ1bmN0aW9uIHl6YihhLGIpe3JldHVybiBQeWIodGhpcy5hLENEKGEpLENEKGIpKX07dmFyIE1MPW1kYih2a2UsJ0NvbGxlY3RvcnMvbGFtYmRhJDI3JFR5cGUnLDEwNjYpO2JjYigxMDY3LDEse30senpiKTtfLktiPWZ1bmN0aW9uIEF6YihhKXtyZXR1cm4gQ0QoYSlbMF19O3ZhciBOTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQyOCRUeXBlJywxMDY3KTtiY2IoNzEzLDEse30sQ3piKTtfLkNlPWZ1bmN0aW9uIER6YihhLGIpe3JldHVybiBCemIoYSxiKX07dmFyIE9MPW1kYih2a2UsJ0NvbGxlY3RvcnMvbGFtYmRhJDQkVHlwZScsNzEzKTtiY2IoMjUyLDEse30sRXpiKTtfLkNlPWZ1bmN0aW9uIEZ6YihhLGIpe3JldHVybiBSeWIoQkQoYSwxNCksQkQoYiwxNCkpfTt2YXIgUEw9bWRiKHZrZSwnQ29sbGVjdG9ycy9sYW1iZGEkNDIkVHlwZScsMjUyKTtiY2IoMzQ4LDEse30sR3piKTtfLkNlPWZ1bmN0aW9uIEh6YihhLGIpe3JldHVybiBTeWIoQkQoYSw1MyksQkQoYiw1MykpfTt2YXIgUUw9bWRiKHZrZSwnQ29sbGVjdG9ycy9sYW1iZGEkNTAkVHlwZScsMzQ4KTtiY2IoMzQ5LDEse30sSXpiKTtfLktiPWZ1bmN0aW9uIEp6YihhKXtyZXR1cm4gQkQoYSw1Myl9O3ZhciBSTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQ1MSRUeXBlJywzNDkpO2JjYigxMDU0LDEse30sS3piKTtfLk9kPWZ1bmN0aW9uIEx6YihhLGIpe1R5Yih0aGlzLmEsQkQoYSw4MyksYil9O3ZhciBTTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQ3JFR5cGUnLDEwNTQpO2JjYigxMDU2LDEse30sTXpiKTtfLkNlPWZ1bmN0aW9uIE56YihhLGIpe3JldHVybiBWeWIoQkQoYSw4MyksQkQoYiw4MyksbmV3IGx6Yil9O3ZhciBUTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQ4JFR5cGUnLDEwNTYpO2JjYigxMDU3LDEse30sT3piKTtfLktiPWZ1bmN0aW9uIFB6YihhKXtyZXR1cm4gVXliKHRoaXMuYSxCRChhLDgzKSl9O3ZhciBVTD1tZGIodmtlLCdDb2xsZWN0b3JzL2xhbWJkYSQ5JFR5cGUnLDEwNTcpO2JjYig1MzksMSx7fSk7Xy5IZT1mdW5jdGlvbiBXemIoKXtRemIodGhpcyl9O18uZD1mYWxzZTt2YXIgek09bWRiKHZrZSwnVGVybWluYXRhYmxlU3RyZWFtJyw1MzkpO2JjYig4MTIsNTM5LHdrZSxiQWIpO18uSGU9ZnVuY3Rpb24gY0FiKCl7UXpiKHRoaXMpfTt2YXIgWkw9bWRiKHZrZSwnRG91YmxlU3RyZWFtSW1wbCcsODEyKTtiY2IoMTc4NCw3MjEscGllLGZBYik7Xy55ZT1mdW5jdGlvbiBoQWIoYSl7cmV0dXJuIGVBYih0aGlzLEJEKGEsMTgyKSl9O18uYT1udWxsO3ZhciBXTD1tZGIodmtlLCdEb3VibGVTdHJlYW1JbXBsLzInLDE3ODQpO2JjYigxNzg1LDEsZWtlLGlBYik7Xy53ZT1mdW5jdGlvbiBqQWIoYSl7Z0FiKHRoaXMuYSxhKX07dmFyIFZMPW1kYih2a2UsJ0RvdWJsZVN0cmVhbUltcGwvMi9sYW1iZGEkMCRUeXBlJywxNzg1KTtiY2IoMTc4MiwxLGVrZSxrQWIpO18ud2U9ZnVuY3Rpb24gbEFiKGEpe2RBYih0aGlzLmEsYSl9O3ZhciBYTD1tZGIodmtlLCdEb3VibGVTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUnLDE3ODIpO2JjYigxNzgzLDEsZWtlLG1BYik7Xy53ZT1mdW5jdGlvbiBuQWIoYSl7RXBiKHRoaXMuYSxhKX07dmFyIFlMPW1kYih2a2UsJ0RvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDIkVHlwZScsMTc4Myk7YmNiKDEzNTgsNzIwLHBpZSxyQWIpO18ueWU9ZnVuY3Rpb24gc0FiKGEpe3JldHVybiBxQWIodGhpcyxCRChhLDE5NikpfTtfLmE9MDtfLmI9MDtfLmM9MDt2YXIgJEw9bWRiKHZrZSwnSW50U3RyZWFtLzUnLDEzNTgpO2JjYig3ODcsNTM5LHdrZSx2QWIpO18uSGU9ZnVuY3Rpb24gd0FiKCl7UXpiKHRoaXMpfTtfLkllPWZ1bmN0aW9uIHhBYigpe3JldHVybiBUemIodGhpcyksdGhpcy5hfTt2YXIgYk09bWRiKHZrZSwnSW50U3RyZWFtSW1wbCcsNzg3KTtiY2IoNzg4LDUzOSx3a2UseUFiKTtfLkhlPWZ1bmN0aW9uIHpBYigpe1F6Yih0aGlzKX07Xy5JZT1mdW5jdGlvbiBBQWIoKXtyZXR1cm4gVHpiKHRoaXMpLEl2YigpLEh2Yn07dmFyIF9MPW1kYih2a2UsJ0ludFN0cmVhbUltcGwvRW1wdHknLDc4OCk7YmNiKDE0NjMsMSxzaWUsQkFiKTtfLnVkPWZ1bmN0aW9uIENBYihhKXtjcmIodGhpcy5hLGEpfTt2YXIgYU09bWRiKHZrZSwnSW50U3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlJywxNDYzKTt2YXIgeE09b2RiKHZrZSwnU3RyZWFtJyk7YmNiKDMwLDUzOSx7NTI1OjEsNjcwOjEsODMzOjF9LFlBYik7Xy5IZT1mdW5jdGlvbiBaQWIoKXtRemIodGhpcyl9O3ZhciBEQWI7dmFyIHdNPW1kYih2a2UsJ1N0cmVhbUltcGwnLDMwKTtiY2IoODQ1LDEse30sYkJiKTtfLmxkPWZ1bmN0aW9uIGNCYihhKXtyZXR1cm4gYUJiKGEpfTt2YXIgY009bWRiKHZrZSwnU3RyZWFtSW1wbC8wbWV0aG9kcmVmJGxhbWJkYSQyJFR5cGUnLDg0NSk7YmNiKDEwODQsNTQwLHBpZSxmQmIpO18uc2Q9ZnVuY3Rpb24gZ0JiKGEpe3doaWxlKGRCYih0aGlzKSl7aWYodGhpcy5hLnNkKGEpKXtyZXR1cm4gdHJ1ZX1lbHNle1F6Yih0aGlzLmIpO3RoaXMuYj1udWxsO3RoaXMuYT1udWxsfX1yZXR1cm4gZmFsc2V9O3ZhciBlTT1tZGIodmtlLCdTdHJlYW1JbXBsLzEnLDEwODQpO2JjYigxMDg1LDEscWllLGhCYik7Xy50ZD1mdW5jdGlvbiBpQmIoYSl7ZUJiKHRoaXMuYSxCRChhLDgzMykpfTt2YXIgZE09bWRiKHZrZSwnU3RyZWFtSW1wbC8xL2xhbWJkYSQwJFR5cGUnLDEwODUpO2JjYigxMDg2LDEsT2llLGpCYik7Xy5NYj1mdW5jdGlvbiBrQmIoYSl7cmV0dXJuIFFxYih0aGlzLmEsYSl9O3ZhciBmTT1tZGIodmtlLCdTdHJlYW1JbXBsLzFtZXRob2RyZWYkYWRkJFR5cGUnLDEwODYpO2JjYigxMDg3LDU0MCxwaWUsbEJiKTtfLnNkPWZ1bmN0aW9uIG1CYihhKXt2YXIgYjtpZighdGhpcy5hKXtiPW5ldyBSa2I7dGhpcy5iLmEuTmIobmV3IG5CYihiKSk7bW1iKCk7T2tiKGIsdGhpcy5jKTt0aGlzLmE9bmV3IEt1YihiLDE2KX1yZXR1cm4gSnViKHRoaXMuYSxhKX07Xy5hPW51bGw7dmFyIGhNPW1kYih2a2UsJ1N0cmVhbUltcGwvNScsMTA4Nyk7YmNiKDEwODgsMSxxaWUsbkJiKTtfLnRkPWZ1bmN0aW9uIG9CYihhKXtFa2IodGhpcy5hLGEpfTt2YXIgZ009bWRiKHZrZSwnU3RyZWFtSW1wbC81LzJtZXRob2RyZWYkYWRkJFR5cGUnLDEwODgpO2JjYig3MjIsNTQwLHBpZSxxQmIpO18uc2Q9ZnVuY3Rpb24gckJiKGEpe3RoaXMuYj1mYWxzZTt3aGlsZSghdGhpcy5iJiZ0aGlzLmMuc2QobmV3IHNCYih0aGlzLGEpKSk7cmV0dXJuIHRoaXMuYn07Xy5iPWZhbHNlO3ZhciBqTT1tZGIodmtlLCdTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yJyw3MjIpO2JjYigxMDc5LDEscWllLHNCYik7Xy50ZD1mdW5jdGlvbiB0QmIoYSl7cEJiKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBpTT1tZGIodmtlLCdTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEwNzkpO2JjYigxMDc1LDcyMSxwaWUsd0JiKTtfLnllPWZ1bmN0aW9uIHhCYihhKXtyZXR1cm4gdkJiKHRoaXMsQkQoYSwxODIpKX07dmFyIGxNPW1kYih2a2UsJ1N0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvcicsMTA3NSk7YmNiKDEwNzgsMSxxaWUseUJiKTtfLnRkPWZ1bmN0aW9uIHpCYihhKXt1QmIodGhpcy5hLHRoaXMuYixhKX07dmFyIGtNPW1kYih2a2UsJ1N0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlJywxMDc4KTtiY2IoMTA3NCw3MjAscGllLENCYik7Xy55ZT1mdW5jdGlvbiBEQmIoYSl7cmV0dXJuIEJCYih0aGlzLEJEKGEsMTk2KSl9O3ZhciBuTT1tZGIodmtlLCdTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3InLDEwNzQpO2JjYigxMDc3LDEscWllLEVCYik7Xy50ZD1mdW5jdGlvbiBGQmIoYSl7QUJiKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBtTT1tZGIodmtlLCdTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZScsMTA3Nyk7YmNiKDcxOSw1NDAscGllLElCYik7Xy5zZD1mdW5jdGlvbiBKQmIoYSl7cmV0dXJuIEhCYih0aGlzLGEpfTt2YXIgcE09bWRiKHZrZSwnU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yJyw3MTkpO2JjYigxMDc2LDEscWllLEtCYik7Xy50ZD1mdW5jdGlvbiBMQmIoYSl7R0JiKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBvTT1tZGIodmtlLCdTdHJlYW1JbXBsL01hcFRvT2JqU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZScsMTA3Nik7YmNiKDYxOCwxLHFpZSxOQmIpO18udGQ9ZnVuY3Rpb24gT0JiKGEpe01CYih0aGlzLGEpfTt2YXIgcU09bWRiKHZrZSwnU3RyZWFtSW1wbC9WYWx1ZUNvbnN1bWVyJyw2MTgpO2JjYigxMDgwLDEscWllLFBCYik7Xy50ZD1mdW5jdGlvbiBRQmIoYSl7RUFiKCl9O3ZhciByTT1tZGIodmtlLCdTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUnLDEwODApO2JjYigxMDgxLDEscWllLFJCYik7Xy50ZD1mdW5jdGlvbiBTQmIoYSl7RUFiKCl9O3ZhciBzTT1tZGIodmtlLCdTdHJlYW1JbXBsL2xhbWJkYSQxJFR5cGUnLDEwODEpO2JjYigxMDgyLDEse30sVEJiKTtfLkNlPWZ1bmN0aW9uIFVCYihhLGIpe3JldHVybiAkQWIodGhpcy5hLGEsYil9O3ZhciB1TT1tZGIodmtlLCdTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUnLDEwODIpO2JjYigxMDgzLDEscWllLFZCYik7Xy50ZD1mdW5jdGlvbiBXQmIoYSl7X0FiKHRoaXMuYix0aGlzLmEsYSl9O3ZhciB2TT1tZGIodmtlLCdTdHJlYW1JbXBsL2xhbWJkYSQ1JFR5cGUnLDEwODMpO2JjYigxMDg5LDEscWllLFhCYik7Xy50ZD1mdW5jdGlvbiBZQmIoYSl7WHpiKHRoaXMuYSxCRChhLDM2NSkpfTt2YXIgeU09bWRiKHZrZSwnVGVybWluYXRhYmxlU3RyZWFtL2xhbWJkYSQwJFR5cGUnLDEwODkpO2JjYigyMDQxLDEse30pO2JjYigxOTE0LDEse30saUNiKTt2YXIgQU09bWRiKCdqYXZhZW11bC5pbnRlcm5hbCcsJ0NvbnNvbGVMb2dnZXInLDE5MTQpO2JjYigyMDM4LDEse30pO3ZhciBFQ2I9MDt2YXIgR0NiLEhDYj0wLElDYjtiY2IoMTc2OCwxLHFpZSxPQ2IpO18udGQ9ZnVuY3Rpb24gUENiKGEpe0JEKGEsMzA4KX07dmFyIEJNPW1kYihDa2UsJ0Jvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDAkVHlwZScsMTc2OCk7YmNiKDE3NjksMSxxaWUsUUNiKTtfLnRkPWZ1bmN0aW9uIFJDYihhKXt5ZSh0aGlzLmEsQkQoYSwzMDgpLmUpfTt2YXIgQ009bWRiKENrZSwnQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMSRUeXBlJywxNzY5KTtiY2IoMTc3MCwxLHFpZSxTQ2IpO18udGQ9ZnVuY3Rpb24gVENiKGEpe0JEKGEsMTY4KX07dmFyIERNPW1kYihDa2UsJ0Jvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDIkVHlwZScsMTc3MCk7YmNiKDE3NjUsMSxEa2UsV0NiKTtfLnVlPWZ1bmN0aW9uIFhDYihhLGIpe3JldHVybiBWQ2IodGhpcy5hLEJEKGEsMTY4KSxCRChiLDE2OCkpfTtfLkZiPWZ1bmN0aW9uIFlDYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gWkNiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBFTT1tZGIoQ2tlLCdOYWl2ZU1pblNUL2xhbWJkYSQwJFR5cGUnLDE3NjUpO2JjYig0OTksMSx7fSxfQ2IpO3ZhciBGTT1tZGIoQ2tlLCdOb2RlTWljcm9MYXlvdXQnLDQ5OSk7YmNiKDE2OCwxLHsxNjg6MX0sYURiKTtfLkZiPWZ1bmN0aW9uIGJEYihhKXt2YXIgYjtpZihKRChhLDE2OCkpe2I9QkQoYSwxNjgpO3JldHVybiB3dGIodGhpcy5hLGIuYSkmJnd0Yih0aGlzLmIsYi5iKXx8d3RiKHRoaXMuYSxiLmIpJiZ3dGIodGhpcy5iLGIuYSl9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkhiPWZ1bmN0aW9uIGNEYigpe3JldHVybiB4dGIodGhpcy5hKSt4dGIodGhpcy5iKX07dmFyIEdNPW1kYihDa2UsJ1RFZGdlJywxNjgpO2JjYigzMDgsMSx7MzA4OjF9LGVEYik7Xy5GYj1mdW5jdGlvbiBmRGIoYSl7dmFyIGI7aWYoSkQoYSwzMDgpKXtiPUJEKGEsMzA4KTtyZXR1cm4gZERiKHRoaXMsYi5hKSYmZERiKHRoaXMsYi5iKSYmZERiKHRoaXMsYi5jKX1lbHNle3JldHVybiBmYWxzZX19O18uSGI9ZnVuY3Rpb24gZ0RiKCl7cmV0dXJuIHh0Yih0aGlzLmEpK3h0Yih0aGlzLmIpK3h0Yih0aGlzLmMpfTt2YXIgSE09bWRiKENrZSwnVFRyaWFuZ2xlJywzMDgpO2JjYigyMjEsMSx7MjIxOjF9LGhEYik7dmFyIElNPW1kYihDa2UsJ1RyZWUnLDIyMSk7YmNiKDEyNTQsMSx7fSxqRGIpO3ZhciBLTT1tZGIoRWtlLCdTY2FubGluZScsMTI1NCk7dmFyIEpNPW9kYihFa2UsRmtlKTtiY2IoMTY5MiwxLHt9LG1EYik7dmFyIExNPW1kYihHa2UsJ0NHcmFwaCcsMTY5Mik7YmNiKDMwNywxLHszMDc6MX0sb0RiKTtfLmI9MDtfLmM9MDtfLmQ9MDtfLmc9MDtfLmk9MDtfLms9UWplO3ZhciBOTT1tZGIoR2tlLCdDR3JvdXAnLDMwNyk7YmNiKDgxNSwxLHt9LHNEYik7dmFyIE1NPW1kYihHa2UsJ0NHcm91cC9DR3JvdXBCdWlsZGVyJyw4MTUpO2JjYig1NywxLHs1NzoxfSx0RGIpO18uSWI9ZnVuY3Rpb24gdURiKCl7dmFyIGE7aWYodGhpcy5qKXtyZXR1cm4gR0QodGhpcy5qLktiKHRoaXMpKX1yZXR1cm4gZmRiKFBNKSxQTS5vKydAJysoYT1GQ2IodGhpcyk+Pj4wLGEudG9TdHJpbmcoMTYpKX07Xy5mPTA7Xy5pPVFqZTt2YXIgUE09bWRiKEdrZSwnQ05vZGUnLDU3KTtiY2IoODE0LDEse30sekRiKTt2YXIgT009bWRiKEdrZSwnQ05vZGUvQ05vZGVCdWlsZGVyJyw4MTQpO3ZhciBFRGI7YmNiKDE1MjUsMSx7fSxHRGIpO18uT2U9ZnVuY3Rpb24gSERiKGEsYil7cmV0dXJuIDB9O18uUGU9ZnVuY3Rpb24gSURiKGEsYil7cmV0dXJuIDB9O3ZhciBRTT1tZGIoR2tlLElrZSwxNTI1KTtiY2IoMTc5MCwxLHt9LEpEYik7Xy5MZT1mdW5jdGlvbiBLRGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2o9UGplO2ZvcihkPW5ldyBvbGIoYS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihkKSw1Nyk7aj0kd25kLk1hdGgubWluKGosYi5hLmouZC5jK2IuYi5hKX1uPW5ldyBQc2I7Zm9yKGc9bmV3IG9sYihhLmEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDMwNyk7Zi5rPWo7Zi5nPT0wJiYoR3NiKG4sZixuLmMuYixuLmMpLHRydWUpfXdoaWxlKG4uYiE9MCl7Zj1CRChuLmI9PTA/bnVsbDooc0NiKG4uYiE9MCksTnNiKG4sbi5hLmEpKSwzMDcpO2U9Zi5qLmQuYztmb3IobT1mLmEuYS5lYygpLktjKCk7bS5PYigpOyl7az1CRChtLlBiKCksNTcpO3A9Zi5rK2suYi5hOyFVRGIoYSxmLGEuZCl8fGsuZC5jPHA/KGsuaT1wKTooay5pPWsuZC5jKX1lLT1mLmouaTtmLmIrPWU7YS5kPT0oZWFkKCksYmFkKXx8YS5kPT1fOWM/KGYuYys9ZSk6KGYuYy09ZSk7Zm9yKGw9Zi5hLmEuZWMoKS5LYygpO2wuT2IoKTspe2s9QkQobC5QYigpLDU3KTtmb3IoaT1rLmMuS2MoKTtpLk9iKCk7KXtoPUJEKGkuUGIoKSw1Nyk7ZmFkKGEuZCk/KG89YS5nLk9lKGssaCkpOihvPWEuZy5QZShrLGgpKTtoLmEuaz0kd25kLk1hdGgubWF4KGguYS5rLGsuaStrLmQuYitvLWguYi5hKTtWRGIoYSxoLGEuZCkmJihoLmEuaz0kd25kLk1hdGgubWF4KGguYS5rLGguZC5jLWguYi5hKSk7LS1oLmEuZztoLmEuZz09MCYmRHNiKG4saC5hKX19fWZvcihjPW5ldyBvbGIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSw1Nyk7Yi5kLmM9Yi5pfX07dmFyIFJNPW1kYihHa2UsJ0xvbmdlc3RQYXRoQ29tcGFjdGlvbicsMTc5MCk7YmNiKDE2OTAsMSx7fSxjRWIpO18uZT1mYWxzZTt2YXIgTERiLE1EYixORGI7dmFyIFRNPW1kYihHa2UsTmtlLDE2OTApO2JjYigxNjkxLDEscWllLGRFYik7Xy50ZD1mdW5jdGlvbiBlRWIoYSl7V0RiKHRoaXMuYSxCRChhLDQ2KSl9O3ZhciBTTT1tZGIoR2tlLE9rZSwxNjkxKTtiY2IoMTc5MSwxLHt9LGZFYik7Xy5NZT1mdW5jdGlvbiBnRWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zm9yKGM9bmV3IG9sYihhLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9QkQobWxiKGMpLDU3KTtiLmMuJGIoKX1mb3IoZT1uZXcgb2xiKGEuYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksNTcpO2ZvcihnPW5ldyBvbGIoYS5hLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSw1Nyk7aWYoZD09Zil7Y29udGludWV9aWYoISFkLmEmJmQuYT09Zi5hKXtjb250aW51ZX1mYWQoYS5kKT8oaD1hLmcuUGUoZCxmKSk6KGg9YS5nLk9lKGQsZikpOyhmLmQuYz5kLmQuY3x8ZC5kLmM9PWYuZC5jJiZkLmQuYjxmLmQuYikmJkJEYihmLmQuZCtmLmQuYStoLGQuZC5kKSYmRERiKGYuZC5kLGQuZC5kK2QuZC5hK2gpJiZkLmMuRmMoZil9fX07dmFyIFVNPW1kYihHa2UsJ1F1YWRyYXRpY0NvbnN0cmFpbnRDYWxjdWxhdGlvbicsMTc5MSk7YmNiKDUyMiwxLHs1MjI6MX0sbEViKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO18uYz1mYWxzZTtfLmQ9ZmFsc2U7dmFyIFZNPW1kYihHa2UsUGtlLDUyMik7YmNiKDgwMywxLHt9LG9FYik7Xy5NZT1mdW5jdGlvbiBwRWIoYSl7dGhpcy5jPWE7bkViKHRoaXMsbmV3IEdFYil9O3ZhciBfTT1tZGIoR2tlLFFrZSw4MDMpO2JjYigxNzE4LDEsezY3OToxfSx1RWIpO18uS2U9ZnVuY3Rpb24gdkViKGEpe3JFYih0aGlzLEJEKGEsNDY0KSl9O3ZhciBYTT1tZGIoR2tlLFJrZSwxNzE4KTtiY2IoMTcxOSwxLERrZSx4RWIpO18udWU9ZnVuY3Rpb24geUViKGEsYil7cmV0dXJuIHdFYihCRChhLDU3KSxCRChiLDU3KSl9O18uRmI9ZnVuY3Rpb24gekViKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBBRWIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFdNPW1kYihHa2UsU2tlLDE3MTkpO2JjYig0NjQsMSx7NDY0OjF9LEJFYik7Xy5hPWZhbHNlO3ZhciBZTT1tZGIoR2tlLFRrZSw0NjQpO2JjYigxNzIwLDEsRGtlLENFYik7Xy51ZT1mdW5jdGlvbiBERWIoYSxiKXtyZXR1cm4gcUViKEJEKGEsNDY0KSxCRChiLDQ2NCkpfTtfLkZiPWZ1bmN0aW9uIEVFYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gRkViKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBaTT1tZGIoR2tlLFVrZSwxNzIwKTtiY2IoMTcyMSwxLFZrZSxHRWIpO18uTGI9ZnVuY3Rpb24gSEViKGEpe3JldHVybiBCRChhLDU3KSx0cnVlfTtfLkZiPWZ1bmN0aW9uIElFYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gSkViKGEpe3JldHVybiBCRChhLDU3KSx0cnVlfTt2YXIgJE09bWRiKEdrZSwnU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlJywxNzIxKTtiY2IoNDI4LDIyLHszOjEsMzU6MSwyMjoxLDQyODoxfSxORWIpO3ZhciBLRWIsTEViO3ZhciBhTj1uZGIoV2tlLCdIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uJyw0MjgsQ0ksUEViLE9FYik7dmFyIFFFYjtiY2IoNDI3LDIyLHszOjEsMzU6MSwyMjoxLDQyNzoxfSxWRWIpO3ZhciBTRWIsVEViO3ZhciBiTj1uZGIoV2tlLCdMb3dMZXZlbFNvcnRpbmdDcml0ZXJpb24nLDQyNyxDSSxYRWIsV0ViKTt2YXIgWUViO3ZhciBDMD1vZGIoWGtlLCdJTGF5b3V0TWV0YURhdGFQcm92aWRlcicpO2JjYig4NTMsMSxhbGUsZ0ZiKTtfLlFlPWZ1bmN0aW9uIGhGYihhKXt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxZa2UpLGJsZSksJ1BvbHlvbWlubyBUcmF2ZXJzYWwgU3RyYXRlZ3knKSwnVHJhdmVyc2FsIHN0cmF0ZWd5IGZvciB0cnlpbmcgZGlmZmVyZW50IGNhbmRpZGF0ZSBwb3NpdGlvbnMgZm9yIHBvbHlvbWlub2VzLicpLGVGYiksKF81YygpLFY1YykpLGROKSxwcWIoKE41YygpLEw1YykpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFprZSksYmxlKSwnUG9seW9taW5vIFNlY29uZGFyeSBTb3J0aW5nIENyaXRlcmlvbicpLCdQb3NzaWJsZSBzZWNvbmRhcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIFRoZXkgYXJlIHVzZWQgd2hlbiBwb2x5b21pbm9lcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uIEhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24uJyksY0ZiKSxWNWMpLGJOKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yywka2UpLGJsZSksJ1BvbHlvbWlubyBQcmltYXJ5IFNvcnRpbmcgQ3JpdGVyaW9uJyksJ1Bvc3NpYmxlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuJyksYUZiKSxWNWMpLGFOKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxfa2UpLGJsZSksJ0ZpbGwgUG9seW9taW5vZXMnKSwnVXNlIHRoZSBQcm9maWxlIEZpbGwgYWxnb3JpdGhtIHRvIGZpbGwgcG9seW9taW5vZXMgdG8gcHJldmVudCBzbWFsbCBwb2x5b21pbm9lcyBmcm9tIGJlaW5nIHBsYWNlZCBpbnNpZGUgb2YgYmlnIHBvbHlvbWlub2VzIHdpdGggbGFyZ2UgaG9sZXMuIE1pZ2h0IGluY3JlYXNlIHBhY2tpbmcgYXJlYS4nKSwoQmNiKCksdHJ1ZSkpLFQ1Yyksd0kpLHBxYihMNWMpKSkpfTt2YXIgJEViLF9FYixhRmIsYkZiLGNGYixkRmIsZUZiO3ZhciBjTj1tZGIoV2tlLCdQb2x5b21pbm9PcHRpb25zJyw4NTMpO2JjYigyNTAsMjIsezM6MSwzNToxLDIyOjEsMjUwOjF9LHNGYik7dmFyIGlGYixqRmIsa0ZiLGxGYixtRmIsbkZiLG9GYixwRmIscUZiO3ZhciBkTj1uZGIoV2tlLCdUcmF2ZXJzYWxTdHJhdGVneScsMjUwLENJLHVGYix0RmIpO3ZhciB2RmI7YmNiKDIxMywxLHsyMTM6MX0seUZiKTtfLkliPWZ1bmN0aW9uIHpGYigpe3JldHVybiAnTkVkZ2VbaWQ9Jyt0aGlzLmIrJyB3PScrdGhpcy5nKycgZD0nK3RoaXMuYSsnXSd9O18uYT0xO18uYj0wO18uYz0wO18uZj1mYWxzZTtfLmc9MDt2YXIgZk49bWRiKGNsZSwnTkVkZ2UnLDIxMyk7YmNiKDE3NiwxLHt9LEZGYik7dmFyIGVOPW1kYihjbGUsJ05FZGdlL05FZGdlQnVpbGRlcicsMTc2KTtiY2IoNjUzLDEse30sS0ZiKTt2YXIgZ049bWRiKGNsZSwnTkdyYXBoJyw2NTMpO2JjYigxMjEsMSx7MTIxOjF9LE1GYik7Xy5jPS0xO18uZD0wO18uZT0wO18uaT0tMTtfLmo9ZmFsc2U7dmFyIGpOPW1kYihjbGUsJ05Ob2RlJywxMjEpO2JjYig3OTUsMSxja2UsUEZiKTtfLkpjPWZ1bmN0aW9uIFhGYihhKXtyZWIodGhpcyxhKX07Xy5MYz1mdW5jdGlvbiBjR2IoKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIodGhpcywxNikpfTtfLmFkPWZ1bmN0aW9uIGhHYihhKXtrdGIodGhpcyxhKX07Xy5OYz1mdW5jdGlvbiBpR2IoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDE2KX07Xy5PYz1mdW5jdGlvbiBqR2IoKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIodGhpcywxNikpfTtfLlZjPWZ1bmN0aW9uIFFGYihhLGIpeysrdGhpcy5iO0RrYih0aGlzLmEsYSxiKX07Xy5GYz1mdW5jdGlvbiBSRmIoYSl7cmV0dXJuIE5GYih0aGlzLGEpfTtfLldjPWZ1bmN0aW9uIFNGYihhLGIpeysrdGhpcy5iO3JldHVybiBGa2IodGhpcy5hLGEsYil9O18uR2M9ZnVuY3Rpb24gVEZiKGEpeysrdGhpcy5iO3JldHVybiBHa2IodGhpcy5hLGEpfTtfLiRiPWZ1bmN0aW9uIFVGYigpeysrdGhpcy5iO3RoaXMuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKX07Xy5IYz1mdW5jdGlvbiBWRmIoYSl7cmV0dXJuIEprYih0aGlzLmEsYSwwKSE9LTF9O18uSWM9ZnVuY3Rpb24gV0ZiKGEpe3JldHVybiBCZSh0aGlzLmEsYSl9O18uWGI9ZnVuY3Rpb24gWUZiKGEpe3JldHVybiBJa2IodGhpcy5hLGEpfTtfLlhjPWZ1bmN0aW9uIFpGYihhKXtyZXR1cm4gSmtiKHRoaXMuYSxhLDApfTtfLmRjPWZ1bmN0aW9uICRGYigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9O18uS2M9ZnVuY3Rpb24gX0ZiKCl7cmV0dXJuIHZyKG5ldyBvbGIodGhpcy5hKSl9O18uWWM9ZnVuY3Rpb24gYUdiKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLlpjPWZ1bmN0aW9uIGJHYihhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uJGM9ZnVuY3Rpb24gZEdiKGEpeysrdGhpcy5iO3JldHVybiBLa2IodGhpcy5hLGEpfTtfLk1jPWZ1bmN0aW9uIGVHYihhKXtyZXR1cm4gT0ZiKHRoaXMsYSl9O18uX2M9ZnVuY3Rpb24gZkdiKGEsYil7Kyt0aGlzLmI7cmV0dXJuIE5rYih0aGlzLmEsYSxiKX07Xy5nYz1mdW5jdGlvbiBnR2IoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofTtfLmJkPWZ1bmN0aW9uIGtHYihhLGIpe3JldHVybiBuZXcgSmliKHRoaXMuYSxhLGIpfTtfLlBjPWZ1bmN0aW9uIGxHYigpe3JldHVybiBQa2IodGhpcy5hKX07Xy5RYz1mdW5jdGlvbiBtR2IoYSl7cmV0dXJuIFFrYih0aGlzLmEsYSl9O18uYj0wO3ZhciBoTj1tZGIoY2xlLCdOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCcsNzk1KTtiY2IoMjY5LDEse30scEdiKTt2YXIgaU49bWRiKGNsZSwnTk5vZGUvTk5vZGVCdWlsZGVyJywyNjkpO2JjYigxNjMwLDEse30sS0diKTtfLmE9ZmFsc2U7Xy5mPU9oZTtfLmo9MDt2YXIga049bWRiKGNsZSwnTmV0d29ya1NpbXBsZXgnLDE2MzApO2JjYigxMjk0LDEscWllLFFHYik7Xy50ZD1mdW5jdGlvbiBSR2IoYSl7UEdiKHRoaXMuYSxCRChhLDY4MCksdHJ1ZSxmYWxzZSl9O3ZhciBsTj1tZGIoZWxlLCdOb2RlTGFiZWxBbmRTaXplQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxMjk0KTtiY2IoNTU4LDEse30sWUdiKTtfLmI9dHJ1ZTtfLmM9dHJ1ZTtfLmQ9dHJ1ZTtfLmU9dHJ1ZTt2YXIgbU49bWRiKGVsZSwnTm9kZU1hcmdpbkNhbGN1bGF0b3InLDU1OCk7YmNiKDIxMiwxLHsyMTI6MX0pO18uaj1mYWxzZTtfLms9ZmFsc2U7dmFyIG9OPW1kYihmbGUsJ0NlbGwnLDIxMik7YmNiKDEyNCwyMTIsezEyNDoxLDIxMjoxfSxhSGIpO18uUmU9ZnVuY3Rpb24gYkhiKCl7cmV0dXJuIF9HYih0aGlzKX07Xy5TZT1mdW5jdGlvbiBjSGIoKXt2YXIgYTthPXRoaXMubjtyZXR1cm4gdGhpcy5hLmErYS5iK2EuY307dmFyIG5OPW1kYihmbGUsJ0F0b21pY0NlbGwnLDEyNCk7YmNiKDIzMiwyMix7MzoxLDM1OjEsMjI6MSwyMzI6MX0saEhiKTt2YXIgZEhiLGVIYixmSGI7dmFyIHBOPW5kYihmbGUsJ0NvbnRhaW5lckFyZWEnLDIzMixDSSxqSGIsaUhiKTt2YXIga0hiO2JjYigzMjYsMjEyLGhsZSk7dmFyIHFOPW1kYihmbGUsJ0NvbnRhaW5lckNlbGwnLDMyNik7YmNiKDE0NzMsMzI2LGhsZSxGSGIpO18uUmU9ZnVuY3Rpb24gR0hiKCl7dmFyIGE7YT0wO3RoaXMuZT90aGlzLmI/KGE9dGhpcy5iLmIpOiEhdGhpcy5hWzFdWzFdJiYoYT10aGlzLmFbMV1bMV0uUmUoKSk6KGE9RUhiKHRoaXMsQUhiKHRoaXMsdHJ1ZSkpKTtyZXR1cm4gYT4wP2ErdGhpcy5uLmQrdGhpcy5uLmE6MH07Xy5TZT1mdW5jdGlvbiBISGIoKXt2YXIgYSxiLGMsZCxlO2U9MDtpZih0aGlzLmUpe3RoaXMuYj8oZT10aGlzLmIuYSk6ISF0aGlzLmFbMV1bMV0mJihlPXRoaXMuYVsxXVsxXS5TZSgpKX1lbHNlIGlmKHRoaXMuZyl7ZT1FSGIodGhpcyx5SGIodGhpcyxudWxsLHRydWUpKX1lbHNle2ZvcihiPShnSGIoKSxPQyhHQyhwTiwxKSxLaWUsMjMyLDAsW2RIYixlSGIsZkhiXSkpLGM9MCxkPWIubGVuZ3RoO2M8ZDsrK2Mpe2E9YltjXTtlPSR3bmQuTWF0aC5tYXgoZSxFSGIodGhpcyx5SGIodGhpcyxhLHRydWUpKSl9fXJldHVybiBlPjA/ZSt0aGlzLm4uYit0aGlzLm4uYzowfTtfLlRlPWZ1bmN0aW9uIElIYigpe3ZhciBhLGIsYyxkLGU7aWYodGhpcy5nKXthPXlIYih0aGlzLG51bGwsZmFsc2UpO2ZvcihjPShnSGIoKSxPQyhHQyhwTiwxKSxLaWUsMjMyLDAsW2RIYixlSGIsZkhiXSkpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTt3SGIodGhpcyxiLGEpfX1lbHNle2ZvcihjPShnSGIoKSxPQyhHQyhwTiwxKSxLaWUsMjMyLDAsW2RIYixlSGIsZkhiXSkpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTthPXlIYih0aGlzLGIsZmFsc2UpO3dIYih0aGlzLGIsYSl9fX07Xy5VZT1mdW5jdGlvbiBKSGIoKXt2YXIgYSxiLGMsZDtiPXRoaXMuaTthPXRoaXMubjtkPUFIYih0aGlzLGZhbHNlKTt1SGIodGhpcywoZ0hiKCksZEhiKSxiLmQrYS5kLGQpO3VIYih0aGlzLGZIYixiLmQrYi5hLWEuYS1kWzJdLGQpO2M9Yi5hLWEuZC1hLmE7aWYoZFswXT4wKXtkWzBdKz10aGlzLmQ7Yy09ZFswXX1pZihkWzJdPjApe2RbMl0rPXRoaXMuZDtjLT1kWzJdfXRoaXMuYy5hPSR3bmQuTWF0aC5tYXgoMCxjKTt0aGlzLmMuZD1iLmQrYS5kKyh0aGlzLmMuYS1jKS8yO2RbMV09JHduZC5NYXRoLm1heChkWzFdLGMpO3VIYih0aGlzLGVIYixiLmQrYS5kK2RbMF0tKGRbMV0tYykvMixkKX07Xy5iPW51bGw7Xy5kPTA7Xy5lPWZhbHNlO18uZj1mYWxzZTtfLmc9ZmFsc2U7dmFyIHJIYj0wLHNIYj0wO3ZhciByTj1tZGIoZmxlLCdHcmlkQ29udGFpbmVyQ2VsbCcsMTQ3Myk7YmNiKDQ2MSwyMix7MzoxLDM1OjEsMjI6MSw0NjE6MX0sT0hiKTt2YXIgS0hiLExIYixNSGI7dmFyIHNOPW5kYihmbGUsJ0hvcml6b250YWxMYWJlbEFsaWdubWVudCcsNDYxLENJLFFIYixQSGIpO3ZhciBSSGI7YmNiKDMwNiwyMTIsezIxMjoxLDMwNjoxfSxhSWIsYkliLGNJYik7Xy5SZT1mdW5jdGlvbiBkSWIoKXtyZXR1cm4gWUhiKHRoaXMpfTtfLlNlPWZ1bmN0aW9uIGVJYigpe3JldHVybiBaSGIodGhpcyl9O18uYT0wO18uYz1mYWxzZTt2YXIgdE49bWRiKGZsZSwnTGFiZWxDZWxsJywzMDYpO2JjYigyNDQsMzI2LHsyMTI6MSwzMjY6MSwyNDQ6MX0sbUliKTtfLlJlPWZ1bmN0aW9uIG5JYigpe3JldHVybiBmSWIodGhpcyl9O18uU2U9ZnVuY3Rpb24gb0liKCl7cmV0dXJuIGdJYih0aGlzKX07Xy5UZT1mdW5jdGlvbiBySWIoKXtoSWIodGhpcyl9O18uVWU9ZnVuY3Rpb24gc0liKCl7aUliKHRoaXMpfTtfLmI9MDtfLmM9MDtfLmQ9ZmFsc2U7dmFyIHlOPW1kYihmbGUsJ1N0cmlwQ29udGFpbmVyQ2VsbCcsMjQ0KTtiY2IoMTYyNiwxLE9pZSx0SWIpO18uTWI9ZnVuY3Rpb24gdUliKGEpe3JldHVybiBwSWIoQkQoYSwyMTIpKX07dmFyIHVOPW1kYihmbGUsJ1N0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlJywxNjI2KTtiY2IoMTYyNywxLHt9LHZJYik7Xy5GZT1mdW5jdGlvbiB3SWIoYSl7cmV0dXJuIEJEKGEsMjEyKS5TZSgpfTt2YXIgdk49bWRiKGZsZSwnU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUnLDE2MjcpO2JjYigxNjI4LDEsT2llLHhJYik7Xy5NYj1mdW5jdGlvbiB5SWIoYSl7cmV0dXJuIHFJYihCRChhLDIxMikpfTt2YXIgd049bWRiKGZsZSwnU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQyJFR5cGUnLDE2MjgpO2JjYigxNjI5LDEse30sekliKTtfLkZlPWZ1bmN0aW9uIEFJYihhKXtyZXR1cm4gQkQoYSwyMTIpLlJlKCl9O3ZhciB4Tj1tZGIoZmxlLCdTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDMkVHlwZScsMTYyOSk7YmNiKDQ2MiwyMix7MzoxLDM1OjEsMjI6MSw0NjI6MX0sRkliKTt2YXIgQkliLENJYixESWI7dmFyIHpOPW5kYihmbGUsJ1ZlcnRpY2FsTGFiZWxBbGlnbm1lbnQnLDQ2MixDSSxISWIsR0liKTt2YXIgSUliO2JjYig3ODksMSx7fSxMSWIpO18uYz0wO18uZD0wO18uaz0wO18ucz0wO18udD0wO18udj1mYWxzZTtfLnc9MDtfLkQ9ZmFsc2U7dmFyIENOPW1kYihubGUsJ05vZGVDb250ZXh0Jyw3ODkpO2JjYigxNDcxLDEsRGtlLE9JYik7Xy51ZT1mdW5jdGlvbiBQSWIoYSxiKXtyZXR1cm4gTkliKEJEKGEsNjEpLEJEKGIsNjEpKX07Xy5GYj1mdW5jdGlvbiBRSWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFJJYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgQU49bWRiKG5sZSwnTm9kZUNvbnRleHQvMG1ldGhvZHJlZiRjb21wYXJlUG9ydFNpZGVzJFR5cGUnLDE0NzEpO2JjYigxNDcyLDEsRGtlLFNJYik7Xy51ZT1mdW5jdGlvbiBUSWIoYSxiKXtyZXR1cm4gTUliKEJEKGEsMTExKSxCRChiLDExMSkpfTtfLkZiPWZ1bmN0aW9uIFVJYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gVkliKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBCTj1tZGIobmxlLCdOb2RlQ29udGV4dC8xbWV0aG9kcmVmJGNvbXBhcmVQb3J0Q29udGV4dHMkVHlwZScsMTQ3Mik7YmNiKDE1OSwyMix7MzoxLDM1OjEsMjI6MSwxNTk6MX0sdEpiKTt2YXIgV0liLFhJYixZSWIsWkliLCRJYixfSWIsYUpiLGJKYixjSmIsZEpiLGVKYixmSmIsZ0piLGhKYixpSmIsakpiLGtKYixsSmIsbUpiLG5KYixvSmIscEpiO3ZhciBETj1uZGIobmxlLCdOb2RlTGFiZWxMb2NhdGlvbicsMTU5LENJLHdKYix2SmIpO3ZhciB4SmI7YmNiKDExMSwxLHsxMTE6MX0sQUpiKTtfLmE9ZmFsc2U7dmFyIEVOPW1kYihubGUsJ1BvcnRDb250ZXh0JywxMTEpO2JjYigxNDc2LDEscWllLFRKYik7Xy50ZD1mdW5jdGlvbiBVSmIoYSl7V0hiKEJEKGEsMzA2KSl9O3ZhciBGTj1tZGIocWxlLHJsZSwxNDc2KTtiY2IoMTQ3NywxLE9pZSxWSmIpO18uTWI9ZnVuY3Rpb24gV0piKGEpe3JldHVybiAhIUJEKGEsMTExKS5jfTt2YXIgR049bWRiKHFsZSxzbGUsMTQ3Nyk7YmNiKDE0NzgsMSxxaWUsWEpiKTtfLnRkPWZ1bmN0aW9uIFlKYihhKXtXSGIoQkQoYSwxMTEpLmMpfTt2YXIgSE49bWRiKHFsZSwnTGFiZWxQbGFjZXIvbGFtYmRhJDIkVHlwZScsMTQ3OCk7dmFyIFpKYjtiY2IoMTQ3NSwxLHFpZSxmS2IpO18udGQ9ZnVuY3Rpb24gZ0tiKGEpeyRKYigpO3pKYihCRChhLDExMSkpfTt2YXIgSU49bWRiKHFsZSwnTm9kZUxhYmVsQW5kU2l6ZVV0aWxpdGllcy9sYW1iZGEkMCRUeXBlJywxNDc1KTtiY2IoNzkwLDEscWllLG1LYik7Xy50ZD1mdW5jdGlvbiBuS2IoYSl7a0tiKHRoaXMuYix0aGlzLmMsdGhpcy5hLEJEKGEsMTgxKSl9O18uYT1mYWxzZTtfLmM9ZmFsc2U7dmFyIEpOPW1kYihxbGUsJ05vZGVMYWJlbENlbGxDcmVhdG9yL2xhbWJkYSQwJFR5cGUnLDc5MCk7YmNiKDE0NzQsMSxxaWUsdEtiKTtfLnRkPWZ1bmN0aW9uIHVLYihhKXtzS2IodGhpcy5hLEJEKGEsMTgxKSl9O3ZhciBLTj1tZGIocWxlLCdQb3J0Q29udGV4dENyZWF0b3IvbGFtYmRhJDAkVHlwZScsMTQ3NCk7dmFyIEJLYjtiY2IoMTgyOSwxLHt9LFZLYik7dmFyIE1OPW1kYih1bGUsJ0dyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXInLDE4MjkpO2JjYigxODMwLDEsRGtlLFhLYik7Xy51ZT1mdW5jdGlvbiBZS2IoYSxiKXtyZXR1cm4gV0tiKEJEKGEsMjIyKSxCRChiLDIyMikpfTtfLkZiPWZ1bmN0aW9uIFpLYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gJEtiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBMTj1tZGIodWxlLCdHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzBtZXRob2RyZWYkY29tcGFyZUJ5WUNvb3JkaW5hdGUkVHlwZScsMTgzMCk7YmNiKDE3ODYsMSx7fSxmTGIpO18uYT01O18uZT0wO3ZhciBTTj1tZGIodWxlLCdSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyJywxNzg2KTtiY2IoMTc4NywxLERrZSxqTGIpO18udWU9ZnVuY3Rpb24ga0xiKGEsYil7cmV0dXJuIGdMYihCRChhLDIyMiksQkQoYiwyMjIpKX07Xy5GYj1mdW5jdGlvbiBsTGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG1MYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgTk49bWRiKHVsZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVMZWZ0UmVjdGFuZ2xlQm9yZGVycyRUeXBlJywxNzg3KTtiY2IoMTc4OSwxLERrZSxuTGIpO18udWU9ZnVuY3Rpb24gb0xiKGEsYil7cmV0dXJuIGhMYihCRChhLDIyMiksQkQoYiwyMjIpKX07Xy5GYj1mdW5jdGlvbiBwTGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHFMYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgT049bWRiKHVsZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8xbWV0aG9kcmVmJGNvbXBhcmVSaWdodFJlY3RhbmdsZUJvcmRlcnMkVHlwZScsMTc4OSk7YmNiKDQwNiwyMix7MzoxLDM1OjEsMjI6MSw0MDY6MX0sd0xiKTt2YXIgckxiLHNMYix0TGIsdUxiO3ZhciBQTj1uZGIodWxlLCdSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL092ZXJsYXBSZW1vdmFsRGlyZWN0aW9uJyw0MDYsQ0kseUxiLHhMYik7dmFyIHpMYjtiY2IoMjIyLDEsezIyMjoxfSxCTGIpO3ZhciBRTj1tZGIodWxlLCdSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL1JlY3RhbmdsZU5vZGUnLDIyMik7YmNiKDE3ODgsMSxxaWUsQ0xiKTtfLnRkPWZ1bmN0aW9uIERMYihhKXthTGIodGhpcy5hLEJEKGEsMjIyKSl9O3ZhciBSTj1tZGIodWxlLCdSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL2xhbWJkYSQxJFR5cGUnLDE3ODgpO2JjYigxMzA0LDEsRGtlLEdMYik7Xy51ZT1mdW5jdGlvbiBITGIoYSxiKXtyZXR1cm4gRkxiKEJEKGEsMTY3KSxCRChiLDE2NykpfTtfLkZiPWZ1bmN0aW9uIElMYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gSkxiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBXTj1tZGIod2xlLCdQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yJywxMzA0KTtiY2IoMTMwNywxLHt9LEtMYik7Xy5LYj1mdW5jdGlvbiBMTGIoYSl7cmV0dXJuIEJEKGEsMzI0KS5hfTt2YXIgVE49bWRiKHdsZSwnUG9seW9taW5vQ29tcGFjdG9yL0Nvcm5lckNhc2VzR3JlYXRlclRoYW5SZXN0Q29tcGFyYXRvci9sYW1iZGEkMCRUeXBlJywxMzA3KTtiY2IoMTMwOCwxLE9pZSxNTGIpO18uTWI9ZnVuY3Rpb24gTkxiKGEpe3JldHVybiBCRChhLDMyMykuYX07dmFyIFVOPW1kYih3bGUsJ1BvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDEkVHlwZScsMTMwOCk7YmNiKDEzMDksMSxPaWUsT0xiKTtfLk1iPWZ1bmN0aW9uIFBMYihhKXtyZXR1cm4gQkQoYSwzMjMpLmF9O3ZhciBWTj1tZGIod2xlLCdQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUnLDEzMDkpO2JjYigxMzAyLDEsRGtlLFJMYik7Xy51ZT1mdW5jdGlvbiBTTGIoYSxiKXtyZXR1cm4gUUxiKEJEKGEsMTY3KSxCRChiLDE2NykpfTtfLkZiPWZ1bmN0aW9uIFRMYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gVUxiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBZTj1tZGIod2xlLCdQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvcicsMTMwMik7YmNiKDEzMDUsMSx7fSxWTGIpO18uS2I9ZnVuY3Rpb24gV0xiKGEpe3JldHVybiBCRChhLDMyNCkuYX07dmFyIFhOPW1kYih3bGUsJ1BvbHlvbWlub0NvbXBhY3Rvci9NaW5OdW1PZkV4dGVuc2lvbkRpcmVjdGlvbnNDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEzMDUpO2JjYig3NjcsMSxEa2UsWUxiKTtfLnVlPWZ1bmN0aW9uIFpMYihhLGIpe3JldHVybiBYTGIoQkQoYSwxNjcpLEJEKGIsMTY3KSl9O18uRmI9ZnVuY3Rpb24gJExiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBfTGIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFpOPW1kYih3bGUsJ1BvbHlvbWlub0NvbXBhY3Rvci9NaW5OdW1PZkV4dGVuc2lvbnNDb21wYXJhdG9yJyw3NjcpO2JjYigxMzAwLDEsRGtlLGJNYik7Xy51ZT1mdW5jdGlvbiBjTWIoYSxiKXtyZXR1cm4gYU1iKEJEKGEsMzIxKSxCRChiLDMyMSkpfTtfLkZiPWZ1bmN0aW9uIGRNYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gZU1iKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBfTj1tZGIod2xlLCdQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcicsMTMwMCk7YmNiKDEzMDEsMSxEa2UsZ01iKTtfLnVlPWZ1bmN0aW9uIGhNYihhLGIpe3JldHVybiBmTWIoQkQoYSwzMjEpLEJEKGIsMzIxKSl9O18uRmI9ZnVuY3Rpb24gaU1iKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBqTWIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyICROPW1kYih3bGUsJ1BvbHlvbWlub0NvbXBhY3Rvci9NaW5QZXJpbWV0ZXJDb21wYXJhdG9yV2l0aFNoYXBlJywxMzAxKTtiY2IoMTMwMywxLERrZSxsTWIpO18udWU9ZnVuY3Rpb24gbU1iKGEsYil7cmV0dXJuIGtNYihCRChhLDE2NyksQkQoYiwxNjcpKX07Xy5GYj1mdW5jdGlvbiBuTWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG9NYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgYk89bWRiKHdsZSwnUG9seW9taW5vQ29tcGFjdG9yL1NpbmdsZUV4dGVuc2lvblNpZGVHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yJywxMzAzKTtiY2IoMTMwNiwxLHt9LHBNYik7Xy5LYj1mdW5jdGlvbiBxTWIoYSl7cmV0dXJuIEJEKGEsMzI0KS5hfTt2YXIgYU89bWRiKHdsZSwnUG9seW9taW5vQ29tcGFjdG9yL1NpbmdsZUV4dGVuc2lvblNpZGVHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEzMDYpO2JjYig3NzcsMSx7fSx0TWIpO18uQ2U9ZnVuY3Rpb24gdU1iKGEsYil7cmV0dXJuIHNNYih0aGlzLEJEKGEsNDYpLEJEKGIsMTY3KSl9O3ZhciBjTz1tZGIod2xlLCdTdWNjZXNzb3JDb21iaW5hdGlvbicsNzc3KTtiY2IoNjQ0LDEse30sd01iKTtfLkNlPWZ1bmN0aW9uIHhNYihhLGIpe3ZhciBjO3JldHVybiB2TWIoKGM9QkQoYSw0NiksQkQoYiwxNjcpLGMpKX07dmFyIGRPPW1kYih3bGUsJ1N1Y2Nlc3NvckppdHRlcicsNjQ0KTtiY2IoNjQzLDEse30sek1iKTtfLkNlPWZ1bmN0aW9uIEFNYihhLGIpe3ZhciBjO3JldHVybiB5TWIoKGM9QkQoYSw0NiksQkQoYiwxNjcpLGMpKX07dmFyIGVPPW1kYih3bGUsJ1N1Y2Nlc3NvckxpbmVCeUxpbmUnLDY0Myk7YmNiKDU2OCwxLHt9LENNYik7Xy5DZT1mdW5jdGlvbiBETWIoYSxiKXt2YXIgYztyZXR1cm4gQk1iKChjPUJEKGEsNDYpLEJEKGIsMTY3KSxjKSl9O3ZhciBmTz1tZGIod2xlLCdTdWNjZXNzb3JNYW5oYXR0YW4nLDU2OCk7YmNiKDEzNTYsMSx7fSxGTWIpO18uQ2U9ZnVuY3Rpb24gR01iKGEsYil7dmFyIGM7cmV0dXJuIEVNYigoYz1CRChhLDQ2KSxCRChiLDE2NyksYykpfTt2YXIgZ089bWRiKHdsZSwnU3VjY2Vzc29yTWF4Tm9ybVdpbmRpbmdJbk1hdGhQb3NTZW5zZScsMTM1Nik7YmNiKDQwMCwxLHt9LEpNYik7Xy5DZT1mdW5jdGlvbiBLTWIoYSxiKXtyZXR1cm4gSE1iKHRoaXMsYSxiKX07Xy5jPWZhbHNlO18uZD1mYWxzZTtfLmU9ZmFsc2U7Xy5mPWZhbHNlO3ZhciBpTz1tZGIod2xlLCdTdWNjZXNzb3JRdWFkcmFudHNHZW5lcmljJyw0MDApO2JjYigxMzU3LDEse30sTE1iKTtfLktiPWZ1bmN0aW9uIE1NYihhKXtyZXR1cm4gQkQoYSwzMjQpLmF9O3ZhciBoTz1tZGIod2xlLCdTdWNjZXNzb3JRdWFkcmFudHNHZW5lcmljL2xhbWJkYSQwJFR5cGUnLDEzNTcpO2JjYigzMjMsMjIsezM6MSwzNToxLDIyOjEsMzIzOjF9LFNNYik7Xy5hPWZhbHNlO3ZhciBOTWIsT01iLFBNYixRTWI7dmFyIGpPPW5kYihCbGUsQ2xlLDMyMyxDSSxVTWIsVE1iKTt2YXIgVk1iO2JjYigxMjk4LDEse30pO18uSWI9ZnVuY3Rpb24gYk5iKCl7dmFyIGEsYixjLGQsZSxmO2M9JyAnO2E9bWViKDApO2ZvcihlPTA7ZTx0aGlzLm87ZSsrKXtjKz0nJythLmE7YT1tZWIoWE1iKGEuYSkpfWMrPSdcXG4nO2E9bWViKDApO2ZvcihmPTA7Zjx0aGlzLnA7ZisrKXtjKz0nJythLmE7YT1tZWIoWE1iKGEuYSkpO2ZvcihkPTA7ZDx0aGlzLm87ZCsrKXtiPV9NYih0aGlzLGQsZik7eWJiKGIsMCk9PTA/KGMrPSdfJyk6eWJiKGIsMSk9PTA/KGMrPSdYJyk6KGMrPScwJyl9Yys9J1xcbid9cmV0dXJuIHFmYihjLDAsYy5sZW5ndGgtMSl9O18ubz0wO18ucD0wO3ZhciBuTz1tZGIoQmxlLCdUd29CaXRHcmlkJywxMjk4KTtiY2IoMzIxLDEyOTgsezMyMToxfSxwTmIpO18uaj0wO18uaz0wO3ZhciBrTz1tZGIoQmxlLCdQbGFuYXJHcmlkJywzMjEpO2JjYigxNjcsMzIxLHszMjE6MSwxNjc6MX0pO18uZz0wO18uaT0wO3ZhciBsTz1tZGIoQmxlLCdQb2x5b21pbm8nLDE2Nyk7dmFyIFAzPW9kYihIbGUsSWxlKTtiY2IoMTM0LDEsSmxlLHpOYik7Xy5ZZT1mdW5jdGlvbiBETmIoYSxiKXtyZXR1cm4geE5iKHRoaXMsYSxiKX07Xy5WZT1mdW5jdGlvbiBBTmIoKXtyZXR1cm4gdU5iKHRoaXMpfTtfLldlPWZ1bmN0aW9uIEJOYihhKXtyZXR1cm4gdk5iKHRoaXMsYSl9O18uWGU9ZnVuY3Rpb24gQ05iKGEpe3JldHVybiB3TmIodGhpcyxhKX07dmFyIFIzPW1kYihIbGUsJ01hcFByb3BlcnR5SG9sZGVyJywxMzQpO2JjYigxMjk5LDEzNCxKbGUsRU5iKTt2YXIgbU89bWRiKEJsZSwnUG9seW9taW5vZXMnLDEyOTkpO3ZhciBGTmI9ZmFsc2UsR05iLEhOYjtiY2IoMTc2NiwxLHFpZSxQTmIpO18udGQ9ZnVuY3Rpb24gUU5iKGEpe0pOYihCRChhLDIyMSkpfTt2YXIgb089bWRiKEtsZSwnRGVwdGhGaXJzdENvbXBhY3Rpb24vMG1ldGhvZHJlZiRjb21wYWN0VHJlZSRUeXBlJywxNzY2KTtiY2IoODEwLDEscWllLFJOYik7Xy50ZD1mdW5jdGlvbiBTTmIoYSl7TU5iKHRoaXMuYSxCRChhLDIyMSkpfTt2YXIgcE89bWRiKEtsZSwnRGVwdGhGaXJzdENvbXBhY3Rpb24vbGFtYmRhJDEkVHlwZScsODEwKTtiY2IoMTc2NywxLHFpZSxUTmIpO18udGQ9ZnVuY3Rpb24gVU5iKGEpe05OYih0aGlzLmEsdGhpcy5iLHRoaXMuYyxCRChhLDIyMSkpfTt2YXIgcU89bWRiKEtsZSwnRGVwdGhGaXJzdENvbXBhY3Rpb24vbGFtYmRhJDIkVHlwZScsMTc2Nyk7dmFyIFZOYixXTmI7YmNiKDY1LDEsezY1OjF9LGFPYik7dmFyIHJPPW1kYihLbGUsJ05vZGUnLDY1KTtiY2IoMTI1MCwxLHt9LGRPYik7dmFyIHdPPW1kYihLbGUsJ1NjYW5saW5lT3ZlcmxhcENoZWNrJywxMjUwKTtiY2IoMTI1MSwxLHs2Nzk6MX0saE9iKTtfLktlPWZ1bmN0aW9uIGlPYihhKXtmT2IodGhpcyxCRChhLDQ0MCkpfTt2YXIgdE89bWRiKEtsZSwnU2NhbmxpbmVPdmVybGFwQ2hlY2svT3ZlcmxhcHNTY2FubGluZUhhbmRsZXInLDEyNTEpO2JjYigxMjUyLDEsRGtlLGtPYik7Xy51ZT1mdW5jdGlvbiBsT2IoYSxiKXtyZXR1cm4gak9iKEJEKGEsNjUpLEJEKGIsNjUpKX07Xy5GYj1mdW5jdGlvbiBtT2IoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG5PYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgc089bWRiKEtsZSwnU2NhbmxpbmVPdmVybGFwQ2hlY2svT3ZlcmxhcHNTY2FubGluZUhhbmRsZXIvbGFtYmRhJDAkVHlwZScsMTI1Mik7YmNiKDQ0MCwxLHs0NDA6MX0sb09iKTtfLmE9ZmFsc2U7dmFyIHVPPW1kYihLbGUsJ1NjYW5saW5lT3ZlcmxhcENoZWNrL1RpbWVzdGFtcCcsNDQwKTtiY2IoMTI1MywxLERrZSxwT2IpO18udWU9ZnVuY3Rpb24gcU9iKGEsYil7cmV0dXJuIGVPYihCRChhLDQ0MCksQkQoYiw0NDApKX07Xy5GYj1mdW5jdGlvbiByT2IoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHNPYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgdk89bWRiKEtsZSwnU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZScsMTI1Myk7YmNiKDU1MCwxLHt9LHRPYik7dmFyIHhPPW1kYihMbGUsJ1NWR0ltYWdlJyw1NTApO2JjYigzMjQsMSx7MzI0OjF9LHVPYik7Xy5JYj1mdW5jdGlvbiB2T2IoKXtyZXR1cm4gJygnK3RoaXMuYStTaGUrdGhpcy5iK1NoZSt0aGlzLmMrJyknfTt2YXIgeU89bWRiKExsZSwnVW5pcXVlVHJpcGxlJywzMjQpO2JjYigyMDksMSxNbGUpO3ZhciBnMD1tZGIoTmxlLCdBYnN0cmFjdExheW91dFByb3ZpZGVyJywyMDkpO2JjYigxMTMyLDIwOSxNbGUseU9iKTtfLlplPWZ1bmN0aW9uIHpPYihhLGIpe3ZhciBjLGQsZSxmO09kZChiLE9sZSwxKTt0aGlzLmE9RWRiKEVEKGhrZChhLChDUGIoKSxCUGIpKSkpO2lmKGlrZChhLHJQYikpe2U9R0QoaGtkKGEsclBiKSk7Yz1oNGMobjRjKCksZSk7aWYoYyl7ZD1CRChoZ2QoYy5mKSwyMDkpO2QuWmUoYSxVZGQoYiwxKSl9fWY9bmV3IEFRYih0aGlzLmEpO3RoaXMuYj15UWIoZixhKTtzd2l0Y2goQkQoaGtkKGEsKG5QYigpLGpQYikpLDQ4MSkuZyl7Y2FzZSAwOkJPYihuZXcgRk9iLHRoaXMuYik7amtkKGEsdVBiLHZOYih0aGlzLmIsdVBiKSk7YnJlYWs7ZGVmYXVsdDpaZmIoKTt9cVFiKGYpO2prZChhLHRQYix0aGlzLmIpO1FkZChiKX07Xy5hPTA7dmFyIHpPPW1kYihQbGUsJ0Rpc0NvTGF5b3V0UHJvdmlkZXInLDExMzIpO2JjYigxMjQ0LDEse30sRk9iKTtfLmM9ZmFsc2U7Xy5lPTA7Xy5mPTA7dmFyIEFPPW1kYihQbGUsJ0Rpc0NvUG9seW9taW5vQ29tcGFjdG9yJywxMjQ0KTtiY2IoNTYxLDEsezU2MToxfSxNT2IpO18uYj10cnVlO3ZhciBCTz1tZGIoUWxlLCdEQ0NvbXBvbmVudCcsNTYxKTtiY2IoMzk0LDIyLHszOjEsMzU6MSwyMjoxLDM5NDoxfSxTT2IpO18uYT1mYWxzZTt2YXIgTk9iLE9PYixQT2IsUU9iO3ZhciBDTz1uZGIoUWxlLCdEQ0RpcmVjdGlvbicsMzk0LENJLFVPYixUT2IpO3ZhciBWT2I7YmNiKDI2NiwxMzQsezM6MSwyNjY6MSw5NDoxLDEzNDoxfSxYT2IpO3ZhciBETz1tZGIoUWxlLCdEQ0VsZW1lbnQnLDI2Nik7YmNiKDM5NSwxLHszOTU6MX0sWk9iKTtfLmM9MDt2YXIgRU89bWRiKFFsZSwnRENFeHRlbnNpb24nLDM5NSk7YmNiKDc1NSwxMzQsSmxlLGFQYik7dmFyIEZPPW1kYihRbGUsJ0RDR3JhcGgnLDc1NSk7YmNiKDQ4MSwyMix7MzoxLDM1OjEsMjI6MSw0ODE6MX0sZFBiKTt2YXIgYlBiO3ZhciBHTz1uZGIoUmxlLFNsZSw0ODEsQ0ksZlBiLGVQYik7dmFyIGdQYjtiY2IoODU0LDEsYWxlLG9QYik7Xy5RZT1mdW5jdGlvbiBwUGIoYSl7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsVGxlKSxYbGUpLCdDb25uZWN0ZWQgQ29tcG9uZW50cyBDb21wYWN0aW9uIFN0cmF0ZWd5JyksJ1N0cmF0ZWd5IGZvciBwYWNraW5nIGRpZmZlcmVudCBjb25uZWN0ZWQgY29tcG9uZW50cyBpbiBvcmRlciB0byBzYXZlIHNwYWNlIGFuZCBlbmhhbmNlIHJlYWRhYmlsaXR5IG9mIGEgZ3JhcGguJyksa1BiKSwoXzVjKCksVjVjKSksR08pLHBxYigoTjVjKCksTDVjKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxVbGUpLFhsZSksJ0Nvbm5lY3RlZCBDb21wb25lbnRzIExheW91dCBBbGdvcml0aG0nKSxcIkEgbGF5b3V0IGFsZ29yaXRobSB0aGF0IGlzIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IGJlZm9yZSB0aGUgY29tcG9uZW50cyB0aGVtc2VsdmVzIGFyZSBjb21wYWN0ZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgcG9zaXRpb25zIG9mIHRoZSBjb21wb25lbnRzJyBub2RlcyBhcmUgbm90IGFsdGVyZWQuXCIpLFo1YyksWkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsVmxlKSwnZGVidWcnKSwnRENHcmFwaCcpLCdBY2Nlc3MgdG8gdGhlIERDR3JhcGggaXMgaW50ZW5kZWQgZm9yIHRoZSBkZWJ1ZyB2aWV3LCcpLFk1YyksU0kpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsV2xlKSwnZGVidWcnKSwnTGlzdCBvZiBQb2x5b21pbm9lcycpLCdBY2Nlc3MgdG8gdGhlIHBvbHlvbWlub2VzIGlzIGludGVuZGVkIGZvciB0aGUgZGVidWcgdmlldywnKSxZNWMpLFNJKSxwcWIoTDVjKSkpKTtEUGIoKG5ldyBFUGIsYSkpfTt2YXIgaVBiLGpQYixrUGIsbFBiLG1QYjt2YXIgSE89bWRiKFJsZSwnRGlzQ29NZXRhRGF0YVByb3ZpZGVyJyw4NTQpO2JjYig5OTgsMSxhbGUsRVBiKTtfLlFlPWZ1bmN0aW9uIEZQYihhKXtEUGIoYSl9O3ZhciBxUGIsclBiLHNQYix0UGIsdVBiLHZQYix3UGIseFBiLHlQYix6UGIsQVBiLEJQYjt2YXIgSk89bWRiKFJsZSwnRGlzQ29PcHRpb25zJyw5OTgpO2JjYig5OTksMSx7fSxHUGIpO18uJGU9ZnVuY3Rpb24gSFBiKCl7dmFyIGE7cmV0dXJuIGE9bmV3IHlPYixhfTtfLl9lPWZ1bmN0aW9uIElQYihhKXt9O3ZhciBJTz1tZGIoUmxlLCdEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5Jyw5OTkpO2JjYig1NjIsMTY3LHszMjE6MSwxNjc6MSw1NjI6MX0sTVBiKTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgS089bWRiKCdvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLnN0cnVjdHVyZXMnLCdEQ1BvbHlvbWlubycsNTYyKTt2YXIgTlBiLE9QYixQUGI7YmNiKDEyNjgsMSxPaWUsYVFiKTtfLk1iPWZ1bmN0aW9uIGJRYihhKXtyZXR1cm4gX1BiKGEpfTt2YXIgTE89bWRiKGJtZSwnRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDEyNjgpO2JjYigxMjY5LDEse30sY1FiKTtfLktiPWZ1bmN0aW9uIGRRYihhKXtyZXR1cm4gUVBiKCksanRkKEJEKGEsNzkpKX07dmFyIE1PPW1kYihibWUsJ0Vsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMSRUeXBlJywxMjY5KTtiY2IoMTI3MCwxLE9pZSxlUWIpO18uTWI9ZnVuY3Rpb24gZlFiKGEpe3JldHVybiBXUGIoQkQoYSw3OSkpfTt2YXIgTk89bWRiKGJtZSwnRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDEyNzApO2JjYigxMjcxLDEse30sZ1FiKTtfLktiPWZ1bmN0aW9uIGhRYihhKXtyZXR1cm4gUVBiKCksbHRkKEJEKGEsNzkpKX07dmFyIE9PPW1kYihibWUsJ0Vsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMyRUeXBlJywxMjcxKTtiY2IoMTI3MiwxLE9pZSxpUWIpO18uTWI9ZnVuY3Rpb24galFiKGEpe3JldHVybiBYUGIoQkQoYSw3OSkpfTt2YXIgUE89bWRiKGJtZSwnRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUnLDEyNzIpO2JjYigxMjczLDEsT2llLGtRYik7Xy5NYj1mdW5jdGlvbiBsUWIoYSl7cmV0dXJuIFlQYih0aGlzLmEsQkQoYSw3OSkpfTt2YXIgUU89bWRiKGJtZSwnRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUnLDEyNzMpO2JjYigxMjc0LDEse30sbVFiKTtfLktiPWZ1bmN0aW9uIG5RYihhKXtyZXR1cm4gWlBiKHRoaXMuYSxCRChhLDc5KSl9O3ZhciBSTz1tZGIoYm1lLCdFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZScsMTI3NCk7YmNiKDEyNDEsMSx7fSxBUWIpO18uYT0wO3ZhciBVTz1tZGIoYm1lLCdFbGtHcmFwaFRyYW5zZm9ybWVyJywxMjQxKTtiY2IoMTI0MiwxLHt9LENRYik7Xy5PZD1mdW5jdGlvbiBEUWIoYSxiKXtCUWIodGhpcyxCRChhLDE2MCksQkQoYiwyNjYpKX07dmFyIFRPPW1kYihibWUsJ0Vsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllcicsMTI0Mik7YmNiKDEyNDMsMSxxaWUsRlFiKTtfLnRkPWZ1bmN0aW9uIEdRYihhKXtFUWIodGhpcyxCRChhLDgpKX07dmFyIFNPPW1kYihibWUsJ0Vsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllci9PZmZTZXRUb0NoYWluQXBwbGllcicsMTI0Myk7YmNiKDc1MywxLHt9LE1RYik7dmFyIFdPPW1kYihnbWUsaG1lLDc1Myk7YmNiKDEyMzIsMSxEa2UsT1FiKTtfLnVlPWZ1bmN0aW9uIFBRYihhLGIpe3JldHVybiBOUWIoQkQoYSwyMzEpLEJEKGIsMjMxKSl9O18uRmI9ZnVuY3Rpb24gUVFiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBSUWIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFZPPW1kYihnbWUsaW1lLDEyMzIpO2JjYig3NDAsMjA5LE1sZSxaUWIpO18uWmU9ZnVuY3Rpb24gJFFiKGEsYil7V1FiKHRoaXMsYSxiKX07dmFyIFhPPW1kYihnbWUsJ0ZvcmNlTGF5b3V0UHJvdmlkZXInLDc0MCk7YmNiKDM1NywxMzQsezM6MSwzNTc6MSw5NDoxLDEzNDoxfSk7dmFyIGJQPW1kYihqbWUsJ0ZQYXJ0aWNsZScsMzU3KTtiY2IoNTU5LDM1Nyx7MzoxLDU1OToxLDM1NzoxLDk0OjEsMTM0OjF9LGFSYik7Xy5JYj1mdW5jdGlvbiBiUmIoKXt2YXIgYTtpZih0aGlzLmEpe2E9SmtiKHRoaXMuYS5hLHRoaXMsMCk7cmV0dXJuIGE+PTA/J2InK2ErJ1snK2ZSYih0aGlzLmEpKyddJzonYlsnK2ZSYih0aGlzLmEpKyddJ31yZXR1cm4gJ2JfJytGQ2IodGhpcyl9O3ZhciBZTz1tZGIoam1lLCdGQmVuZHBvaW50Jyw1NTkpO2JjYigyODIsMTM0LHszOjEsMjgyOjEsOTQ6MSwxMzQ6MX0sZ1JiKTtfLkliPWZ1bmN0aW9uIGhSYigpe3JldHVybiBmUmIodGhpcyl9O3ZhciBaTz1tZGIoam1lLCdGRWRnZScsMjgyKTtiY2IoMjMxLDEzNCx7MzoxLDIzMToxLDk0OjEsMTM0OjF9LGtSYik7dmFyICRPPW1kYihqbWUsJ0ZHcmFwaCcsMjMxKTtiY2IoNDQ3LDM1Nyx7MzoxLDQ0NzoxLDM1NzoxLDk0OjEsMTM0OjF9LG1SYik7Xy5JYj1mdW5jdGlvbiBuUmIoKXtyZXR1cm4gdGhpcy5iPT1udWxsfHx0aGlzLmIubGVuZ3RoPT0wPydsWycrZlJiKHRoaXMuYSkrJ10nOidsXycrdGhpcy5ifTt2YXIgX089bWRiKGptZSwnRkxhYmVsJyw0NDcpO2JjYigxNDQsMzU3LHszOjEsMTQ0OjEsMzU3OjEsOTQ6MSwxMzQ6MX0scFJiKTtfLkliPWZ1bmN0aW9uIHFSYigpe3JldHVybiBvUmIodGhpcyl9O18uYj0wO3ZhciBhUD1tZGIoam1lLCdGTm9kZScsMTQ0KTtiY2IoMjAwMywxLHt9KTtfLmJmPWZ1bmN0aW9uIHZSYihhKXtyUmIodGhpcyxhKX07Xy5jZj1mdW5jdGlvbiB3UmIoKXtzUmIodGhpcyl9O18uZD0wO3ZhciBjUD1tZGIobG1lLCdBYnN0cmFjdEZvcmNlTW9kZWwnLDIwMDMpO2JjYig2MzEsMjAwMyx7NjMxOjF9LHhSYik7Xy5hZj1mdW5jdGlvbiB6UmIoYSxiKXt2YXIgYyxkLGUsZixnO3VSYih0aGlzLmYsYSxiKTtlPWM3YyhSNmMoYi5kKSxhLmQpO2c9JHduZC5NYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKTtkPSR3bmQuTWF0aC5tYXgoMCxnLVU2YyhhLmUpLzItVTZjKGIuZSkvMik7Yz1qUmIodGhpcy5lLGEsYik7Yz4wPyhmPS15UmIoZCx0aGlzLmMpKmMpOihmPUNSYihkLHRoaXMuYikqQkQodk5iKGEsKHdTYigpLG9TYikpLDE5KS5hKTtZNmMoZSxmL2cpO3JldHVybiBlfTtfLmJmPWZ1bmN0aW9uIEFSYihhKXtyUmIodGhpcyxhKTt0aGlzLmE9QkQodk5iKGEsKHdTYigpLGVTYikpLDE5KS5hO3RoaXMuYz1FZGIoRUQodk5iKGEsdVNiKSkpO3RoaXMuYj1FZGIoRUQodk5iKGEscVNiKSkpfTtfLmRmPWZ1bmN0aW9uIEJSYihhKXtyZXR1cm4gYTx0aGlzLmF9O18uYT0wO18uYj0wO18uYz0wO3ZhciBkUD1tZGIobG1lLCdFYWRlc01vZGVsJyw2MzEpO2JjYig2MzIsMjAwMyx7NjMyOjF9LERSYik7Xy5hZj1mdW5jdGlvbiBGUmIoYSxiKXt2YXIgYyxkLGUsZixnO3VSYih0aGlzLmYsYSxiKTtlPWM3YyhSNmMoYi5kKSxhLmQpO2c9JHduZC5NYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKTtkPSR3bmQuTWF0aC5tYXgoMCxnLVU2YyhhLmUpLzItVTZjKGIuZSkvMik7Zj1KUmIoZCx0aGlzLmEpKkJEKHZOYihhLCh3U2IoKSxvU2IpKSwxOSkuYTtjPWpSYih0aGlzLmUsYSxiKTtjPjAmJihmLT1FUmIoZCx0aGlzLmEpKmMpO1k2YyhlLGYqdGhpcy5iL2cpO3JldHVybiBlfTtfLmJmPWZ1bmN0aW9uIEdSYihhKXt2YXIgYixjLGQsZSxmLGcsaDtyUmIodGhpcyxhKTt0aGlzLmI9RWRiKEVEKHZOYihhLCh3U2IoKSx2U2IpKSkpO3RoaXMuYz10aGlzLmIvQkQodk5iKGEsZVNiKSwxOSkuYTtkPWEuZS5jLmxlbmd0aDtmPTA7ZT0wO2ZvcihoPW5ldyBvbGIoYS5lKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTQ0KTtmKz1nLmUuYTtlKz1nLmUuYn1iPWYqZTtjPUVkYihFRCh2TmIoYSx1U2IpKSkqcGxlO3RoaXMuYT0kd25kLk1hdGguc3FydChiLygyKmQpKSpjfTtfLmNmPWZ1bmN0aW9uIEhSYigpe3NSYih0aGlzKTt0aGlzLmItPXRoaXMuY307Xy5kZj1mdW5jdGlvbiBJUmIoYSl7cmV0dXJuIHRoaXMuYj4wfTtfLmE9MDtfLmI9MDtfLmM9MDt2YXIgZVA9bWRiKGxtZSwnRnJ1Y2h0ZXJtYW5SZWluZ29sZE1vZGVsJyw2MzIpO2JjYig4NDksMSxhbGUsVFJiKTtfLlFlPWZ1bmN0aW9uIFVSYihhKXt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxtbWUpLCcnKSwnRm9yY2UgTW9kZWwnKSwnRGV0ZXJtaW5lcyB0aGUgbW9kZWwgZm9yIGZvcmNlIGNhbGN1bGF0aW9uLicpLE1SYiksKF81YygpLFY1YykpLGdQKSxwcWIoKE41YygpLEw1YykpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG5tZSksJycpLCdJdGVyYXRpb25zJyksJ1RoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvbiB0aGUgZm9yY2UgbW9kZWwuJyksbWViKDMwMCkpLFg1YyksSkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG9tZSksJycpLCdSZXB1bHNpdmUgUG93ZXInKSwnRGV0ZXJtaW5lcyBob3cgbWFueSBiZW5kIHBvaW50cyBhcmUgYWRkZWQgdG8gdGhlIGVkZ2U7IHN1Y2ggYmVuZCBwb2ludHMgYXJlIHJlZ2FyZGVkIGFzIHJlcGVsbGluZyBwYXJ0aWNsZXMgaW4gdGhlIGZvcmNlIG1vZGVsJyksbWViKDApKSxYNWMpLEpJKSxwcWIoSTVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxwbWUpLCcnKSwnRlIgVGVtcGVyYXR1cmUnKSwnVGhlIHRlbXBlcmF0dXJlIGlzIHVzZWQgYXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgcGFydGljbGUgZGlzcGxhY2VtZW50cy4nKSxxbWUpLFU1YyksQkkpLHBxYihMNWMpKSkpO280YyhhLHBtZSxtbWUsUlJiKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxybWUpLCcnKSwnRWFkZXMgUmVwdWxzaW9uJyksXCJGYWN0b3IgZm9yIHJlcHVsc2l2ZSBmb3JjZXMgaW4gRWFkZXMnIG1vZGVsLlwiKSw1KSxVNWMpLEJJKSxwcWIoTDVjKSkpKTtvNGMoYSxybWUsbW1lLE9SYik7eFNiKChuZXcgeVNiLGEpKX07dmFyIEtSYixMUmIsTVJiLE5SYixPUmIsUFJiLFFSYixSUmI7dmFyIGZQPW1kYihzbWUsJ0ZvcmNlTWV0YURhdGFQcm92aWRlcicsODQ5KTtiY2IoNDI0LDIyLHszOjEsMzU6MSwyMjoxLDQyNDoxfSxZUmIpO3ZhciBWUmIsV1JiO3ZhciBnUD1uZGIoc21lLCdGb3JjZU1vZGVsU3RyYXRlZ3knLDQyNCxDSSwkUmIsWlJiKTt2YXIgX1JiO2JjYig5ODgsMSxhbGUseVNiKTtfLlFlPWZ1bmN0aW9uIHpTYihhKXt4U2IoYSl9O3ZhciBiU2IsY1NiLGRTYixlU2IsZlNiLGdTYixoU2IsaVNiLGpTYixrU2IsbFNiLG1TYixuU2Isb1NiLHBTYixxU2IsclNiLHNTYix0U2IsdVNiLHZTYjt2YXIgaVA9bWRiKHNtZSwnRm9yY2VPcHRpb25zJyw5ODgpO2JjYig5ODksMSx7fSxBU2IpO18uJGU9ZnVuY3Rpb24gQlNiKCl7dmFyIGE7cmV0dXJuIGE9bmV3IFpRYixhfTtfLl9lPWZ1bmN0aW9uIENTYihhKXt9O3ZhciBoUD1tZGIoc21lLCdGb3JjZU9wdGlvbnMvRm9yY2VGYWN0b3J5Jyw5ODkpO3ZhciBEU2IsRVNiLEZTYixHU2I7YmNiKDg1MCwxLGFsZSxQU2IpO18uUWU9ZnVuY3Rpb24gUVNiKGEpe3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLE1tZSksJycpLCdGaXhlZCBQb3NpdGlvbicpLCdQcmV2ZW50IHRoYXQgdGhlIG5vZGUgaXMgbW92ZWQgYnkgdGhlIGxheW91dCBhbGdvcml0aG0uJyksKEJjYigpLGZhbHNlKSksKF81YygpLFQ1YykpLHdJKSxwcWIoKE41YygpLEs1YykpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLE5tZSksJycpLCdEZXNpcmVkIEVkZ2UgTGVuZ3RoJyksJ0VpdGhlciBzcGVjaWZpZWQgZm9yIHBhcmVudCBub2RlcyBvciBmb3IgaW5kaXZpZHVhbCBlZGdlcywgd2hlcmUgdGhlIGxhdHRlciB0YWtlcyBoaWdoZXIgcHJlY2VkZW5jZS4nKSwxMDApLFU1YyksQkkpLHFxYihMNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtJNWNdKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsT21lKSwnJyksJ0xheW91dCBEaW1lbnNpb24nKSwnRGltZW5zaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8gYmUgYWx0ZXJlZCBkdXJpbmcgbGF5b3V0LicpLEtTYiksVjVjKSxvUCkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsUG1lKSwnJyksJ1N0cmVzcyBFcHNpbG9uJyksJ1Rlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLicpLHFtZSksVTVjKSxCSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsUW1lKSwnJyksJ0l0ZXJhdGlvbiBMaW1pdCcpLFwiTWF4aW11bSBudW1iZXIgb2YgcGVyZm9ybWVkIGl0ZXJhdGlvbnMuIFRha2VzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gJ2Vwc2lsb24nLlwiKSxtZWIoT2hlKSksWDVjKSxKSSkscHFiKEw1YykpKSk7Y1RiKChuZXcgZFRiLGEpKX07dmFyIElTYixKU2IsS1NiLExTYixNU2IsTlNiO3ZhciBqUD1tZGIoc21lLCdTdHJlc3NNZXRhRGF0YVByb3ZpZGVyJyw4NTApO2JjYig5OTIsMSxhbGUsZFRiKTtfLlFlPWZ1bmN0aW9uIGVUYihhKXtjVGIoYSl9O3ZhciBSU2IsU1NiLFRTYixVU2IsVlNiLFdTYixYU2IsWVNiLFpTYiwkU2IsX1NiLGFUYjt2YXIgbFA9bWRiKHNtZSwnU3RyZXNzT3B0aW9ucycsOTkyKTtiY2IoOTkzLDEse30sZlRiKTtfLiRlPWZ1bmN0aW9uIGdUYigpe3ZhciBhO3JldHVybiBhPW5ldyBpVGIsYX07Xy5fZT1mdW5jdGlvbiBoVGIoYSl7fTt2YXIga1A9bWRiKHNtZSwnU3RyZXNzT3B0aW9ucy9TdHJlc3NGYWN0b3J5Jyw5OTMpO2JjYigxMTI4LDIwOSxNbGUsaVRiKTtfLlplPWZ1bmN0aW9uIGpUYihhLGIpe3ZhciBjLGQsZSxmLGc7T2RkKGIsU21lLDEpO0NjYihERChoa2QoYSwoYlRiKCksVlNiKSkpKT9DY2IoREQoaGtkKGEsX1NiKSkpfHwkQ2IoKGM9bmV3IF9DYigoUGdkKCksbmV3IGJoZChhKSkpLGMpKTpXUWIobmV3IFpRYixhLFVkZChiLDEpKTtlPVRRYihhKTtkPUxRYih0aGlzLmEsZSk7Zm9yKGc9ZC5LYygpO2cuT2IoKTspe2Y9QkQoZy5QYigpLDIzMSk7aWYoZi5lLmMubGVuZ3RoPD0xKXtjb250aW51ZX1zVGIodGhpcy5iLGYpO3FUYih0aGlzLmIpO0hrYihmLmQsbmV3IGtUYil9ZT1LUWIoZCk7U1FiKGUpO1FkZChiKX07dmFyIG5QPW1kYihVbWUsJ1N0cmVzc0xheW91dFByb3ZpZGVyJywxMTI4KTtiY2IoMTEyOSwxLHFpZSxrVGIpO18udGQ9ZnVuY3Rpb24gbFRiKGEpe2xSYihCRChhLDQ0NykpfTt2YXIgbVA9bWRiKFVtZSwnU3RyZXNzTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZScsMTEyOSk7YmNiKDk5MCwxLHt9LHRUYik7Xy5jPTA7Xy5lPTA7Xy5nPTA7dmFyIHFQPW1kYihVbWUsJ1N0cmVzc01ham9yaXphdGlvbicsOTkwKTtiY2IoMzc5LDIyLHszOjEsMzU6MSwyMjoxLDM3OToxfSx6VGIpO3ZhciB2VGIsd1RiLHhUYjt2YXIgb1A9bmRiKFVtZSwnU3RyZXNzTWFqb3JpemF0aW9uL0RpbWVuc2lvbicsMzc5LENJLEJUYixBVGIpO3ZhciBDVGI7YmNiKDk5MSwxLERrZSxFVGIpO18udWU9ZnVuY3Rpb24gRlRiKGEsYil7cmV0dXJuIHVUYih0aGlzLmEsQkQoYSwxNDQpLEJEKGIsMTQ0KSl9O18uRmI9ZnVuY3Rpb24gR1RiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBIVGIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIHBQPW1kYihVbWUsJ1N0cmVzc01ham9yaXphdGlvbi9sYW1iZGEkMCRUeXBlJyw5OTEpO2JjYigxMjI5LDEse30sUFRiKTt2YXIgdFA9bWRiKFdtZSwnRWxrTGF5ZXJlZCcsMTIyOSk7YmNiKDEyMzAsMSxxaWUsU1RiKTtfLnRkPWZ1bmN0aW9uIFRUYihhKXtRVGIoQkQoYSwzNykpfTt2YXIgclA9bWRiKFdtZSwnRWxrTGF5ZXJlZC9sYW1iZGEkMCRUeXBlJywxMjMwKTtiY2IoMTIzMSwxLHFpZSxVVGIpO18udGQ9ZnVuY3Rpb24gVlRiKGEpe1JUYih0aGlzLmEsQkQoYSwzNykpfTt2YXIgc1A9bWRiKFdtZSwnRWxrTGF5ZXJlZC9sYW1iZGEkMSRUeXBlJywxMjMxKTtiY2IoMTI2MywxLHt9LGJVYik7dmFyIFdUYixYVGIsWVRiO3ZhciB4UD1tZGIoV21lLCdHcmFwaENvbmZpZ3VyYXRvcicsMTI2Myk7YmNiKDc1OSwxLHFpZSxkVWIpO18udGQ9ZnVuY3Rpb24gZVViKGEpeyRUYih0aGlzLmEsQkQoYSwxMCkpfTt2YXIgdVA9bWRiKFdtZSwnR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDAkVHlwZScsNzU5KTtiY2IoNzYwLDEse30sZlViKTtfLktiPWZ1bmN0aW9uIGdVYihhKXtyZXR1cm4gWlRiKCksbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgdlA9bWRiKFdtZSwnR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZScsNzYwKTtiY2IoNzYxLDEscWllLGhVYik7Xy50ZD1mdW5jdGlvbiBpVWIoYSl7JFRiKHRoaXMuYSxCRChhLDEwKSl9O3ZhciB3UD1tZGIoV21lLCdHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlJyw3NjEpO2JjYigxMTI3LDIwOSxNbGUsalViKTtfLlplPWZ1bmN0aW9uIGtVYihhLGIpe3ZhciBjO2M9VTFiKG5ldyBhMmIsYSk7UEQoaGtkKGEsKE55YygpLGF4YykpKT09PVBEKChoYmQoKSxlYmQpKT9KVGIodGhpcy5hLGMsYik6S1RiKHRoaXMuYSxjLGIpO3oyYihuZXcgRDJiLGMpfTt2YXIgeVA9bWRiKFdtZSwnTGF5ZXJlZExheW91dFByb3ZpZGVyJywxMTI3KTtiY2IoMzU2LDIyLHszOjEsMzU6MSwyMjoxLDM1NjoxfSxyVWIpO3ZhciBsVWIsbVViLG5VYixvVWIscFViO3ZhciB6UD1uZGIoV21lLCdMYXllcmVkUGhhc2VzJywzNTYsQ0ksdFViLHNVYik7dmFyIHVVYjtiY2IoMTY1MSwxLHt9LENVYik7Xy5pPTA7dmFyIHdVYjt2YXIgQ1A9bWRiKFhtZSwnQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXInLDE2NTEpO3ZhciBoVmI7YmNiKDE2NTIsMSx7fSxEVWIpO18uZWY9ZnVuY3Rpb24gRVViKGEsYil7cmV0dXJuICR3bmQuTWF0aC5taW4oYS5hIT1udWxsP0VkYihhLmEpOmEuYy5pLGIuYSE9bnVsbD9FZGIoYi5hKTpiLmMuaSl9O18uZmY9ZnVuY3Rpb24gRlViKGEsYil7cmV0dXJuICR3bmQuTWF0aC5taW4oYS5hIT1udWxsP0VkYihhLmEpOmEuYy5pLGIuYSE9bnVsbD9FZGIoYi5hKTpiLmMuaSl9O3ZhciBBUD1tZGIoWG1lLCdDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci8xJywxNjUyKTtiY2IoODEsMSx7ODE6MX0pO18uaT0wO18uaz10cnVlO18ubz1RamU7dmFyIElQPW1kYihZbWUsJ0NOb2RlJyw4MSk7YmNiKDQ2MCw4MSx7NDYwOjEsODE6MX0sR1ViLEhVYik7Xy5JYj1mdW5jdGlvbiBJVWIoKXtyZXR1cm4gJyd9O3ZhciBCUD1tZGIoWG1lLCdDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci9DUmVjdE5vZGUnLDQ2MCk7YmNiKDE2MjMsMSx7fSxWVWIpO3ZhciBKVWIsS1ViO3ZhciBGUD1tZGIoWG1lLCdPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uJywxNjIzKTtiY2IoMTYyNCwxLHt9LFlVYik7Xy5LYj1mdW5jdGlvbiBaVWIoYSl7cmV0dXJuIFdVYihCRChhLDQ2KSl9O18uRmI9ZnVuY3Rpb24gJFViKGEpe3JldHVybiB0aGlzPT09YX07dmFyIERQPW1kYihYbWUsJ09uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24vbGFtYmRhJDAkVHlwZScsMTYyNCk7YmNiKDE2MjUsMSx7fSxfVWIpO18uS2I9ZnVuY3Rpb24gYVZiKGEpe3JldHVybiBYVWIoQkQoYSw0NikpfTtfLkZiPWZ1bmN0aW9uIGJWYihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBFUD1tZGIoWG1lLCdPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUnLDE2MjUpO2JjYigxNjU0LDEse30sZFZiKTt2YXIgR1A9bWRiKFltZSwnQ0dyYXBoJywxNjU0KTtiY2IoMTg5LDEsezE4OToxfSxnVmIpO18uYj0wO18uYz0wO18uZT0wO18uZz10cnVlO18uaT1RamU7dmFyIEhQPW1kYihZbWUsJ0NHcm91cCcsMTg5KTtiY2IoMTY1MywxLHt9LGpWYik7Xy5lZj1mdW5jdGlvbiBrVmIoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1heChhLmEhPW51bGw/RWRiKGEuYSk6YS5jLmksYi5hIT1udWxsP0VkYihiLmEpOmIuYy5pKX07Xy5mZj1mdW5jdGlvbiBsVmIoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1heChhLmEhPW51bGw/RWRiKGEuYSk6YS5jLmksYi5hIT1udWxsP0VkYihiLmEpOmIuYy5pKX07dmFyIEpQPW1kYihZbWUsSWtlLDE2NTMpO2JjYigxNjU1LDEse30sQ1ZiKTtfLmQ9ZmFsc2U7dmFyIG1WYjt2YXIgTFA9bWRiKFltZSxOa2UsMTY1NSk7YmNiKDE2NTYsMSx7fSxEVmIpO18uS2I9ZnVuY3Rpb24gRVZiKGEpe3JldHVybiBuVmIoKSxCY2IoKSxCRChCRChhLDQ2KS5hLDgxKS5kLmUhPTA/dHJ1ZTpmYWxzZX07Xy5GYj1mdW5jdGlvbiBGVmIoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgS1A9bWRiKFltZSxPa2UsMTY1Nik7YmNiKDgyMywxLHt9LElWYik7Xy5hPWZhbHNlO18uYj1mYWxzZTtfLmM9ZmFsc2U7Xy5kPWZhbHNlO3ZhciBNUD1tZGIoWW1lLFBrZSw4MjMpO2JjYigxODI1LDEse30sT1ZiKTt2YXIgUlA9bWRiKFptZSxRa2UsMTgyNSk7dmFyIGJRPW9kYigkbWUsRmtlKTtiY2IoMTgyNiwxLHszNjk6MX0sU1ZiKTtfLktlPWZ1bmN0aW9uIFRWYihhKXtRVmIodGhpcyxCRChhLDQ2NikpfTt2YXIgT1A9bWRiKFptZSxSa2UsMTgyNik7YmNiKDE4MjcsMSxEa2UsVlZiKTtfLnVlPWZ1bmN0aW9uIFdWYihhLGIpe3JldHVybiBVVmIoQkQoYSw4MSksQkQoYiw4MSkpfTtfLkZiPWZ1bmN0aW9uIFhWYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gWVZiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBOUD1tZGIoWm1lLFNrZSwxODI3KTtiY2IoNDY2LDEsezQ2NjoxfSxaVmIpO18uYT1mYWxzZTt2YXIgUFA9bWRiKFptZSxUa2UsNDY2KTtiY2IoMTgyOCwxLERrZSwkVmIpO18udWU9ZnVuY3Rpb24gX1ZiKGEsYil7cmV0dXJuIFBWYihCRChhLDQ2NiksQkQoYiw0NjYpKX07Xy5GYj1mdW5jdGlvbiBhV2IoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGJXYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgUVA9bWRiKFptZSxVa2UsMTgyOCk7YmNiKDE0MCwxLHsxNDA6MX0sY1diLGRXYik7Xy5GYj1mdW5jdGlvbiBlV2IoYSl7dmFyIGI7aWYoYT09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKFRQIT1yYihhKSl7cmV0dXJuIGZhbHNlfWI9QkQoYSwxNDApO3JldHVybiB3dGIodGhpcy5jLGIuYykmJnd0Yih0aGlzLmQsYi5kKX07Xy5IYj1mdW5jdGlvbiBmV2IoKXtyZXR1cm4gSGxiKE9DKEdDKFNJLDEpLFVoZSwxLDUsW3RoaXMuYyx0aGlzLmRdKSl9O18uSWI9ZnVuY3Rpb24gZ1diKCl7cmV0dXJuICcoJyt0aGlzLmMrU2hlK3RoaXMuZCsodGhpcy5hPydjeCc6JycpK3RoaXMuYisnKSd9O18uYT10cnVlO18uYz0wO18uZD0wO3ZhciBUUD1tZGIoJG1lLCdQb2ludCcsMTQwKTtiY2IoNDA1LDIyLHszOjEsMzU6MSwyMjoxLDQwNToxfSxvV2IpO3ZhciBoV2IsaVdiLGpXYixrV2I7dmFyIFNQPW5kYigkbWUsJ1BvaW50L1F1YWRyYW50Jyw0MDUsQ0ksc1diLHJXYik7dmFyIHRXYjtiY2IoMTY0MiwxLHt9LENXYik7Xy5iPW51bGw7Xy5jPW51bGw7Xy5kPW51bGw7Xy5lPW51bGw7Xy5mPW51bGw7dmFyIHZXYix3V2IseFdiLHlXYix6V2I7dmFyIGFRPW1kYigkbWUsJ1JlY3RpbGluZWFyQ29udmV4SHVsbCcsMTY0Mik7YmNiKDU3NCwxLHszNjk6MX0sTldiKTtfLktlPWZ1bmN0aW9uIE9XYihhKXtNV2IodGhpcyxCRChhLDE0MCkpfTtfLmI9MDt2YXIgS1diO3ZhciBWUD1tZGIoJG1lLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyJyw1NzQpO2JjYigxNjQ0LDEsRGtlLFFXYik7Xy51ZT1mdW5jdGlvbiBSV2IoYSxiKXtyZXR1cm4gUFdiKEVEKGEpLEVEKGIpKX07Xy5GYj1mdW5jdGlvbiBTV2IoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFRXYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgVVA9bWRiKCRtZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL01heGltYWxFbGVtZW50c0V2ZW50SGFuZGxlci9sYW1iZGEkMCRUeXBlJywxNjQ0KTtiY2IoMTY0MywxLHszNjk6MX0sVldiKTtfLktlPWZ1bmN0aW9uIFdXYihhKXtVV2IodGhpcyxCRChhLDE0MCkpfTtfLmE9MDtfLmI9bnVsbDtfLmM9bnVsbDtfLmQ9bnVsbDtfLmU9bnVsbDt2YXIgV1A9bWRiKCRtZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlcicsMTY0Myk7YmNiKDE2NDUsMSxEa2UsWFdiKTtfLnVlPWZ1bmN0aW9uIFlXYihhLGIpe3JldHVybiBFV2IoQkQoYSwxNDApLEJEKGIsMTQwKSl9O18uRmI9ZnVuY3Rpb24gWldiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiAkV2IoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFhQPW1kYigkbWUsJ1JlY3RpbGluZWFyQ29udmV4SHVsbC9sYW1iZGEkMCRUeXBlJywxNjQ1KTtiY2IoMTY0NiwxLERrZSxfV2IpO18udWU9ZnVuY3Rpb24gYVhiKGEsYil7cmV0dXJuIEZXYihCRChhLDE0MCksQkQoYiwxNDApKX07Xy5GYj1mdW5jdGlvbiBiWGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGNYYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgWVA9bWRiKCRtZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQxJFR5cGUnLDE2NDYpO2JjYigxNjQ3LDEsRGtlLGRYYik7Xy51ZT1mdW5jdGlvbiBlWGIoYSxiKXtyZXR1cm4gR1diKEJEKGEsMTQwKSxCRChiLDE0MCkpfTtfLkZiPWZ1bmN0aW9uIGZYYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gZ1hiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBaUD1tZGIoJG1lLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZScsMTY0Nyk7YmNiKDE2NDgsMSxEa2UsaFhiKTtfLnVlPWZ1bmN0aW9uIGlYYihhLGIpe3JldHVybiBIV2IoQkQoYSwxNDApLEJEKGIsMTQwKSl9O18uRmI9ZnVuY3Rpb24galhiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBrWGIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyICRQPW1kYigkbWUsJ1JlY3RpbGluZWFyQ29udmV4SHVsbC9sYW1iZGEkMyRUeXBlJywxNjQ4KTtiY2IoMTY0OSwxLERrZSxsWGIpO18udWU9ZnVuY3Rpb24gbVhiKGEsYil7cmV0dXJuIElXYihCRChhLDE0MCksQkQoYiwxNDApKX07Xy5GYj1mdW5jdGlvbiBuWGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG9YYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgX1A9bWRiKCRtZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQ0JFR5cGUnLDE2NDkpO2JjYigxNjUwLDEse30scVhiKTt2YXIgY1E9bWRiKCRtZSwnU2NhbmxpbmUnLDE2NTApO2JjYigyMDA1LDEse30pO3ZhciBkUT1tZGIoX21lLCdBYnN0cmFjdEdyYXBoUGxhY2VyJywyMDA1KTtiY2IoMzI1LDEsezMyNToxfSxBWGIpO18ubWY9ZnVuY3Rpb24gQlhiKGEpe2lmKHRoaXMubmYoYSkpe1JjKHRoaXMuYixCRCh2TmIoYSwod3RjKCksRXNjKSksMjEpLGEpO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5uZj1mdW5jdGlvbiBDWGIoYSl7dmFyIGIsYyxkLGU7Yj1CRCh2TmIoYSwod3RjKCksRXNjKSksMjEpO2U9QkQoUWMod1hiLGIpLDIxKTtmb3IoZD1lLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksMjEpO2lmKCFCRChRYyh0aGlzLmIsYyksMTUpLmRjKCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O3ZhciB3WGI7dmFyIGdRPW1kYihfbWUsJ0NvbXBvbmVudEdyb3VwJywzMjUpO2JjYig3NjUsMjAwNSx7fSxIWGIpO18ub2Y9ZnVuY3Rpb24gSVhiKGEpe3ZhciBiLGM7Zm9yKGM9bmV3IG9sYih0aGlzLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUJEKG1sYihjKSwzMjUpO2lmKGIubWYoYSkpe3JldHVybn19RWtiKHRoaXMuYSxuZXcgQVhiKGEpKX07Xy5sZj1mdW5jdGlvbiBKWGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbzt0aGlzLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Yi5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2lmKGEuZGMoKSl7Yi5mLmE9MDtiLmYuYj0wO3JldHVybn1nPUJEKGEuWGIoMCksMzcpO3ROYihiLGcpO2ZvcihlPWEuS2MoKTtlLk9iKCk7KXtkPUJEKGUuUGIoKSwzNyk7dGhpcy5vZihkKX1vPW5ldyBkN2M7Zj1FZGIoRUQodk5iKGcsKE55YygpLGt5YykpKSk7Zm9yKGo9bmV3IG9sYih0aGlzLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihqKSwzMjUpO2s9RFhiKGgsZik7dlhiKFVjKGguYiksby5hLG8uYik7by5hKz1rLmE7by5iKz1rLmJ9Yi5mLmE9by5hLWY7Yi5mLmI9by5iLWY7aWYoQ2NiKEREKHZOYihnLHF3YykpKSYmUEQodk5iKGcsU3djKSk9PT1QRCgoQWFkKCksd2FkKSkpe2ZvcihuPWEuS2MoKTtuLk9iKCk7KXtsPUJEKG4uUGIoKSwzNyk7dVhiKGwsbC5jLmEsbC5jLmIpfWM9bmV3IGdZYjtZWGIoYyxhLGYpO2ZvcihtPWEuS2MoKTttLk9iKCk7KXtsPUJEKG0uUGIoKSwzNyk7UDZjKFg2YyhsLmMpLGMuZSl9UDZjKFg2YyhiLmYpLGMuYSl9Zm9yKGk9bmV3IG9sYih0aGlzLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihpKSwzMjUpO3RYYihiLFVjKGguYikpfX07dmFyIGVRPW1kYihfbWUsJ0NvbXBvbmVudEdyb3VwR3JhcGhQbGFjZXInLDc2NSk7YmNiKDEyOTMsNzY1LHt9LExYYik7Xy5vZj1mdW5jdGlvbiBNWGIoYSl7S1hiKHRoaXMsYSl9O18ubGY9ZnVuY3Rpb24gTlhiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O3RoaXMuYS5jPUtDKFNJLFVoZSwxLDAsNSwxKTtiLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7aWYoYS5kYygpKXtiLmYuYT0wO2IuZi5iPTA7cmV0dXJufWc9QkQoYS5YYigwKSwzNyk7dE5iKGIsZyk7Zm9yKGU9YS5LYygpO2UuT2IoKTspe2Q9QkQoZS5QYigpLDM3KTtLWGIodGhpcyxkKX10PW5ldyBkN2M7cz1uZXcgZDdjO3A9bmV3IGQ3YztvPW5ldyBkN2M7Zj1FZGIoRUQodk5iKGcsKE55YygpLGt5YykpKSk7Zm9yKGo9bmV3IG9sYih0aGlzLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUJEKG1sYihqKSwzMjUpO2lmKGZhZChCRCh2TmIoYiwoWTljKCksejhjKSksMTAzKSkpe3AuYT10LmE7Zm9yKHI9bmV3IE12KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9QkQoTHYoci5iLlBiKCkpLDIxKTtpZihxLkhjKChVY2QoKSxBY2QpKSl7cC5hPXMuYTticmVha319fWVsc2UgaWYoZ2FkKEJEKHZOYihiLHo4YyksMTAzKSkpe3AuYj10LmI7Zm9yKHI9bmV3IE12KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9QkQoTHYoci5iLlBiKCkpLDIxKTtpZihxLkhjKChVY2QoKSxUY2QpKSl7cC5iPXMuYjticmVha319fWs9RFhiKEJEKGgsNTcwKSxmKTt2WGIoVWMoaC5iKSxwLmEscC5iKTtpZihmYWQoQkQodk5iKGIsejhjKSwxMDMpKSl7cy5hPXAuYStrLmE7by5hPSR3bmQuTWF0aC5tYXgoby5hLHMuYSk7Zm9yKHI9bmV3IE12KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9QkQoTHYoci5iLlBiKCkpLDIxKTtpZihxLkhjKChVY2QoKSxSY2QpKSl7dC5hPXAuYStrLmE7YnJlYWt9fXMuYj1wLmIray5iO3AuYj1zLmI7by5iPSR3bmQuTWF0aC5tYXgoby5iLHAuYil9ZWxzZSBpZihnYWQoQkQodk5iKGIsejhjKSwxMDMpKSl7cy5iPXAuYitrLmI7by5iPSR3bmQuTWF0aC5tYXgoby5iLHMuYik7Zm9yKHI9bmV3IE12KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9QkQoTHYoci5iLlBiKCkpLDIxKTtpZihxLkhjKChVY2QoKSx6Y2QpKSl7dC5iPXAuYitrLmI7YnJlYWt9fXMuYT1wLmEray5hO3AuYT1zLmE7by5hPSR3bmQuTWF0aC5tYXgoby5hLHAuYSl9fWIuZi5hPW8uYS1mO2IuZi5iPW8uYi1mO2lmKENjYihERCh2TmIoZyxxd2MpKSkmJlBEKHZOYihnLFN3YykpPT09UEQoKEFhZCgpLHdhZCkpKXtmb3Iobj1hLktjKCk7bi5PYigpOyl7bD1CRChuLlBiKCksMzcpO3VYYihsLGwuYy5hLGwuYy5iKX1jPW5ldyBnWWI7WVhiKGMsYSxmKTtmb3IobT1hLktjKCk7bS5PYigpOyl7bD1CRChtLlBiKCksMzcpO1A2YyhYNmMobC5jKSxjLmUpfVA2YyhYNmMoYi5mKSxjLmEpfWZvcihpPW5ldyBvbGIodGhpcy5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMzI1KTt0WGIoYixVYyhoLmIpKX19O3ZhciBmUT1tZGIoX21lLCdDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlcicsMTI5Myk7YmNiKDQyMywyMix7MzoxLDM1OjEsMjI6MSw0MjM6MX0sU1hiKTt2YXIgT1hiLFBYYixRWGI7dmFyIGhRPW5kYihfbWUsJ0NvbXBvbmVudE9yZGVyaW5nU3RyYXRlZ3knLDQyMyxDSSxVWGIsVFhiKTt2YXIgVlhiO2JjYig2NTAsMSx7fSxnWWIpO3ZhciBwUT1tZGIoX21lLCdDb21wb25lbnRzQ29tcGFjdG9yJyw2NTApO2JjYigxNDY4LDEyLGFrZSxqWWIpO18uRmM9ZnVuY3Rpb24ga1liKGEpe3JldHVybiBoWWIodGhpcyxCRChhLDE0MCkpfTt2YXIgaVE9bWRiKF9tZSwnQ29tcG9uZW50c0NvbXBhY3Rvci9IdWxscG9pbnRzJywxNDY4KTtiY2IoMTQ2NSwxLHs4NDE6MX0sbVliKTtfLmE9ZmFsc2U7dmFyIGpRPW1kYihfbWUsJ0NvbXBvbmVudHNDb21wYWN0b3IvSW50ZXJuYWxDb21wb25lbnQnLDE0NjUpO2JjYigxNDY0LDEsdmllLG5ZYik7Xy5KYz1mdW5jdGlvbiBvWWIoYSl7cmViKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gcFliKCl7cmV0dXJuIG5ldyBvbGIodGhpcy5hKX07dmFyIGtRPW1kYihfbWUsJ0NvbXBvbmVudHNDb21wYWN0b3IvSW50ZXJuYWxDb25uZWN0ZWRDb21wb25lbnRzJywxNDY0KTtiY2IoMTQ2NywxLHs1OTQ6MX0scVliKTtfLmhmPWZ1bmN0aW9uIHNZYigpe3JldHVybiBudWxsfTtfLmpmPWZ1bmN0aW9uIHRZYigpe3JldHVybiB0aGlzLmF9O18uZ2Y9ZnVuY3Rpb24gclliKCl7cmV0dXJuIGNZYih0aGlzLmQpfTtfLmtmPWZ1bmN0aW9uIHVZYigpe3JldHVybiB0aGlzLmJ9O3ZhciBsUT1tZGIoX21lLCdDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsRXh0ZXJuYWxFeHRlbnNpb24nLDE0NjcpO2JjYigxNDY2LDEsezU5NDoxfSx2WWIpO18uamY9ZnVuY3Rpb24geVliKCl7cmV0dXJuIHRoaXMuYX07Xy5nZj1mdW5jdGlvbiB3WWIoKXtyZXR1cm4gY1liKHRoaXMuZCl9O18uaGY9ZnVuY3Rpb24geFliKCl7cmV0dXJuIHRoaXMuY307Xy5rZj1mdW5jdGlvbiB6WWIoKXtyZXR1cm4gdGhpcy5ifTt2YXIgbVE9bWRiKF9tZSwnQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbFVuaW9uRXh0ZXJuYWxFeHRlbnNpb24nLDE0NjYpO2JjYigxNDcwLDEse30sQVliKTt2YXIgblE9bWRiKF9tZSwnQ29tcG9uZW50c0NvbXBhY3Rvci9PdXRlclNlZ21lbnRzJywxNDcwKTtiY2IoMTQ2OSwxLHt9LEJZYik7dmFyIG9RPW1kYihfbWUsJ0NvbXBvbmVudHNDb21wYWN0b3IvU2VnbWVudHMnLDE0NjkpO2JjYigxMjY0LDEse30sRlliKTt2YXIgclE9bWRiKF9tZSxobWUsMTI2NCk7YmNiKDEyNjUsMSxEa2UsSFliKTtfLnVlPWZ1bmN0aW9uIElZYihhLGIpe3JldHVybiBHWWIoQkQoYSwzNyksQkQoYiwzNykpfTtfLkZiPWZ1bmN0aW9uIEpZYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gS1liKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBxUT1tZGIoX21lLCdDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDEyNjUpO2JjYig1NzAsMzI1LHszMjU6MSw1NzA6MX0sUFliKTtfLm1mPWZ1bmN0aW9uIFFZYihhKXtyZXR1cm4gTlliKHRoaXMsYSl9O18ubmY9ZnVuY3Rpb24gUlliKGEpe3JldHVybiBPWWIodGhpcyxhKX07dmFyIExZYjt2YXIgc1E9bWRiKF9tZSwnTW9kZWxPcmRlckNvbXBvbmVudEdyb3VwJyw1NzApO2JjYigxMjkxLDIwMDUse30sU1liKTtfLmxmPWZ1bmN0aW9uIFRZYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdztpZihhLmdjKCk9PTEpe3Q9QkQoYS5YYigwKSwzNyk7aWYodCE9Yil7Yi5hLmM9S0MoU0ksVWhlLDEsMCw1LDEpO3NYYihiLHQsMCwwKTt0TmIoYix0KTt1X2IoYi5kLHQuZCk7Yi5mLmE9dC5mLmE7Yi5mLmI9dC5mLmJ9cmV0dXJufWVsc2UgaWYoYS5kYygpKXtiLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Yi5mLmE9MDtiLmYuYj0wO3JldHVybn1pZihQRCh2TmIoYiwoTnljKCksdHdjKSkpPT09UEQoKFJYYigpLFFYYikpKXtmb3IoaT1hLktjKCk7aS5PYigpOyl7Zz1CRChpLlBiKCksMzcpO3I9MDtmb3IocD1uZXcgb2xiKGcuYSk7cC5hPHAuYy5jLmxlbmd0aDspe289QkQobWxiKHApLDEwKTtyKz1CRCh2TmIobyxieWMpLDE5KS5hfWcucD1yfW1tYigpO2EuYWQobmV3IFZZYil9Zj1CRChhLlhiKDApLDM3KTtiLmEuYz1LQyhTSSxVaGUsMSwwLDUsMSk7dE5iKGIsZik7bj0wO3U9MDtmb3Ioaj1hLktjKCk7ai5PYigpOyl7Zz1CRChqLlBiKCksMzcpO3M9Zy5mO249JHduZC5NYXRoLm1heChuLHMuYSk7dSs9cy5hKnMuYn1uPSR3bmQuTWF0aC5tYXgobiwkd25kLk1hdGguc3FydCh1KSpFZGIoRUQodk5iKGIsb3djKSkpKTtlPUVkYihFRCh2TmIoYixreWMpKSk7dj0wO3c9MDttPTA7Yz1lO2ZvcihoPWEuS2MoKTtoLk9iKCk7KXtnPUJEKGguUGIoKSwzNyk7cz1nLmY7aWYoditzLmE+bil7dj0wO3crPW0rZTttPTB9cT1nLmM7dVhiKGcsditxLmEsdytxLmIpO1g2YyhxKTtjPSR3bmQuTWF0aC5tYXgoYyx2K3MuYSk7bT0kd25kLk1hdGgubWF4KG0scy5iKTt2Kz1zLmErZX1iLmYuYT1jO2IuZi5iPXcrbTtpZihDY2IoREQodk5iKGYscXdjKSkpKXtkPW5ldyBnWWI7WVhiKGQsYSxlKTtmb3IobD1hLktjKCk7bC5PYigpOyl7az1CRChsLlBiKCksMzcpO1A2YyhYNmMoay5jKSxkLmUpfVA2YyhYNmMoYi5mKSxkLmEpfXRYYihiLGEpfTt2YXIgdVE9bWRiKF9tZSwnU2ltcGxlUm93R3JhcGhQbGFjZXInLDEyOTEpO2JjYigxMjkyLDEsRGtlLFZZYik7Xy51ZT1mdW5jdGlvbiBXWWIoYSxiKXtyZXR1cm4gVVliKEJEKGEsMzcpLEJEKGIsMzcpKX07Xy5GYj1mdW5jdGlvbiBYWWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFlZYigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgdFE9bWRiKF9tZSwnU2ltcGxlUm93R3JhcGhQbGFjZXIvMScsMTI5Mik7dmFyIFpZYjtiY2IoMTI2MiwxLFZrZSxkWmIpO18uTGI9ZnVuY3Rpb24gZVpiKGEpe3ZhciBiO3JldHVybiBiPUJEKHZOYihCRChhLDI0MykuYiwoTnljKCksanhjKSksNzQpLCEhYiYmYi5iIT0wfTtfLkZiPWZ1bmN0aW9uIGZaYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gZ1piKGEpe3ZhciBiO3JldHVybiBiPUJEKHZOYihCRChhLDI0MykuYiwoTnljKCksanhjKSksNzQpLCEhYiYmYi5iIT0wfTt2YXIgdlE9bWRiKGRuZSwnQ29tcG91bmRHcmFwaFBvc3Rwcm9jZXNzb3IvMScsMTI2Mik7YmNiKDEyNjEsMSxlbmUsd1piKTtfLnBmPWZ1bmN0aW9uIHhaYihhLGIpe3FaYih0aGlzLEJEKGEsMzcpLGIpfTt2YXIgeFE9bWRiKGRuZSwnQ29tcG91bmRHcmFwaFByZXByb2Nlc3NvcicsMTI2MSk7YmNiKDQ0MSwxLHs0NDE6MX0seVpiKTtfLmM9ZmFsc2U7dmFyIHdRPW1kYihkbmUsJ0NvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3IvRXh0ZXJuYWxQb3J0Jyw0NDEpO2JjYigyNDMsMSx7MjQzOjF9LEJaYik7Xy5JYj1mdW5jdGlvbiBDWmIoKXtyZXR1cm4gWnIodGhpcy5jKSsnOicrVFpiKHRoaXMuYil9O3ZhciB6UT1tZGIoZG5lLCdDcm9zc0hpZXJhcmNoeUVkZ2UnLDI0Myk7YmNiKDc2MywxLERrZSxFWmIpO18udWU9ZnVuY3Rpb24gRlpiKGEsYil7cmV0dXJuIERaYih0aGlzLEJEKGEsMjQzKSxCRChiLDI0MykpfTtfLkZiPWZ1bmN0aW9uIEdaYihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gSVpiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciB5UT1tZGIoZG5lLCdDcm9zc0hpZXJhcmNoeUVkZ2VDb21wYXJhdG9yJyw3NjMpO2JjYigyOTksMTM0LHszOjEsMjk5OjEsOTQ6MSwxMzQ6MX0pO18ucD0wO3ZhciBKUT1tZGIoZm5lLCdMR3JhcGhFbGVtZW50JywyOTkpO2JjYigxNywyOTksezM6MSwxNzoxLDI5OToxLDk0OjEsMTM0OjF9LFVaYik7Xy5JYj1mdW5jdGlvbiBWWmIoKXtyZXR1cm4gVFpiKHRoaXMpfTt2YXIgQVE9bWRiKGZuZSwnTEVkZ2UnLDE3KTtiY2IoMzcsMjk5LHszOjEsMjA6MSwzNzoxLDI5OToxLDk0OjEsMTM0OjF9LFhaYik7Xy5KYz1mdW5jdGlvbiBZWmIoYSl7cmViKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gWlpiKCl7cmV0dXJuIG5ldyBvbGIodGhpcy5iKX07Xy5JYj1mdW5jdGlvbiAkWmIoKXtpZih0aGlzLmIuYy5sZW5ndGg9PTApe3JldHVybiAnRy11bmxheWVyZWQnK0ZlKHRoaXMuYSl9ZWxzZSBpZih0aGlzLmEuYy5sZW5ndGg9PTApe3JldHVybiAnRy1sYXllcmVkJytGZSh0aGlzLmIpfXJldHVybiAnR1tsYXllcmxlc3MnK0ZlKHRoaXMuYSkrJywgbGF5ZXJzJytGZSh0aGlzLmIpKyddJ307dmFyIEtRPW1kYihmbmUsJ0xHcmFwaCcsMzcpO3ZhciBfWmI7YmNiKDY1NywxLHt9KTtfLnFmPWZ1bmN0aW9uIGIkYigpe3JldHVybiB0aGlzLmUubn07Xy5XZT1mdW5jdGlvbiBjJGIoYSl7cmV0dXJuIHZOYih0aGlzLmUsYSl9O18ucmY9ZnVuY3Rpb24gZCRiKCl7cmV0dXJuIHRoaXMuZS5vfTtfLnNmPWZ1bmN0aW9uIGUkYigpe3JldHVybiB0aGlzLmUucH07Xy5YZT1mdW5jdGlvbiBmJGIoYSl7cmV0dXJuIHdOYih0aGlzLmUsYSl9O18udGY9ZnVuY3Rpb24gZyRiKGEpe3RoaXMuZS5uLmE9YS5hO3RoaXMuZS5uLmI9YS5ifTtfLnVmPWZ1bmN0aW9uIGgkYihhKXt0aGlzLmUuby5hPWEuYTt0aGlzLmUuby5iPWEuYn07Xy52Zj1mdW5jdGlvbiBpJGIoYSl7dGhpcy5lLnA9YX07dmFyIEJRPW1kYihmbmUsJ0xHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0TFNoYXBlQWRhcHRlcicsNjU3KTtiY2IoNTc3LDEsezgzOToxfSxqJGIpO18ud2Y9ZnVuY3Rpb24gayRiKCl7dmFyIGEsYjtpZighdGhpcy5iKXt0aGlzLmI9UHUodGhpcy5hLmIuYy5sZW5ndGgpO2ZvcihiPW5ldyBvbGIodGhpcy5hLmIpO2IuYTxiLmMuYy5sZW5ndGg7KXthPUJEKG1sYihiKSw3MCk7RWtiKHRoaXMuYixuZXcgdiRiKGEpKX19cmV0dXJuIHRoaXMuYn07Xy5iPW51bGw7dmFyIENRPW1kYihmbmUsJ0xHcmFwaEFkYXB0ZXJzL0xFZGdlQWRhcHRlcicsNTc3KTtiY2IoNjU2LDEse30sbCRiKTtfLnhmPWZ1bmN0aW9uIG0kYigpe3ZhciBhLGIsYyxkLGUsZjtpZighdGhpcy5iKXt0aGlzLmI9bmV3IFJrYjtmb3IoZD1uZXcgb2xiKHRoaXMuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1CRChtbGIoZCksMjkpO2ZvcihmPW5ldyBvbGIoYy5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMTApO2lmKHRoaXMuYy5NYihlKSl7RWtiKHRoaXMuYixuZXcgeCRiKHRoaXMsZSx0aGlzLmUpKTtpZih0aGlzLmQpe2lmKHdOYihlLCh3dGMoKSx2dGMpKSl7Zm9yKGI9QkQodk5iKGUsdnRjKSwxNSkuS2MoKTtiLk9iKCk7KXthPUJEKGIuUGIoKSwxMCk7RWtiKHRoaXMuYixuZXcgeCRiKHRoaXMsYSxmYWxzZSkpfX1pZih3TmIoZSx0c2MpKXtmb3IoYj1CRCh2TmIoZSx0c2MpLDE1KS5LYygpO2IuT2IoKTspe2E9QkQoYi5QYigpLDEwKTtFa2IodGhpcy5iLG5ldyB4JGIodGhpcyxhLGZhbHNlKSl9fX19fX19cmV0dXJuIHRoaXMuYn07Xy5xZj1mdW5jdGlvbiBuJGIoKXt0aHJvdyB2YmIobmV3IGNnYihobmUpKX07Xy5XZT1mdW5jdGlvbiBvJGIoYSl7cmV0dXJuIHZOYih0aGlzLmEsYSl9O18ucmY9ZnVuY3Rpb24gcCRiKCl7cmV0dXJuIHRoaXMuYS5mfTtfLnNmPWZ1bmN0aW9uIHEkYigpe3JldHVybiB0aGlzLmEucH07Xy5YZT1mdW5jdGlvbiByJGIoYSl7cmV0dXJuIHdOYih0aGlzLmEsYSl9O18udGY9ZnVuY3Rpb24gcyRiKGEpe3Rocm93IHZiYihuZXcgY2diKGhuZSkpfTtfLnVmPWZ1bmN0aW9uIHQkYihhKXt0aGlzLmEuZi5hPWEuYTt0aGlzLmEuZi5iPWEuYn07Xy52Zj1mdW5jdGlvbiB1JGIoYSl7dGhpcy5hLnA9YX07Xy5iPW51bGw7Xy5kPWZhbHNlO18uZT1mYWxzZTt2YXIgRFE9bWRiKGZuZSwnTEdyYXBoQWRhcHRlcnMvTEdyYXBoQWRhcHRlcicsNjU2KTtiY2IoNTc2LDY1Nyx7MTgxOjF9LHYkYik7dmFyIEVRPW1kYihmbmUsJ0xHcmFwaEFkYXB0ZXJzL0xMYWJlbEFkYXB0ZXInLDU3Nik7YmNiKDU3NSw2NTcsezY4MDoxfSx4JGIpO18ueWY9ZnVuY3Rpb24geSRiKCl7cmV0dXJuIHRoaXMuYn07Xy56Zj1mdW5jdGlvbiB6JGIoKXtyZXR1cm4gbW1iKCksbW1iKCksam1ifTtfLndmPWZ1bmN0aW9uIEEkYigpe3ZhciBhLGI7aWYoIXRoaXMuYSl7dGhpcy5hPVB1KEJEKHRoaXMuZSwxMCkuYi5jLmxlbmd0aCk7Zm9yKGI9bmV3IG9sYihCRCh0aGlzLmUsMTApLmIpO2IuYTxiLmMuYy5sZW5ndGg7KXthPUJEKG1sYihiKSw3MCk7RWtiKHRoaXMuYSxuZXcgdiRiKGEpKX19cmV0dXJuIHRoaXMuYX07Xy5BZj1mdW5jdGlvbiBCJGIoKXt2YXIgYTthPUJEKHRoaXMuZSwxMCkuZDtyZXR1cm4gbmV3IEpfYihhLmQsYS5jLGEuYSxhLmIpfTtfLkJmPWZ1bmN0aW9uIEMkYigpe3JldHVybiBtbWIoKSxtbWIoKSxqbWJ9O18uQ2Y9ZnVuY3Rpb24gRCRiKCl7dmFyIGEsYjtpZighdGhpcy5jKXt0aGlzLmM9UHUoQkQodGhpcy5lLDEwKS5qLmMubGVuZ3RoKTtmb3IoYj1uZXcgb2xiKEJEKHRoaXMuZSwxMCkuaik7Yi5hPGIuYy5jLmxlbmd0aDspe2E9QkQobWxiKGIpLDExKTtFa2IodGhpcy5jLG5ldyBJJGIoYSx0aGlzLmQpKX19cmV0dXJuIHRoaXMuY307Xy5EZj1mdW5jdGlvbiBFJGIoKXtyZXR1cm4gQ2NiKEREKHZOYihCRCh0aGlzLmUsMTApLCh3dGMoKSx3c2MpKSkpfTtfLkVmPWZ1bmN0aW9uIEYkYihhKXtCRCh0aGlzLmUsMTApLmQuYj1hLmI7QkQodGhpcy5lLDEwKS5kLmQ9YS5kO0JEKHRoaXMuZSwxMCkuZC5jPWEuYztCRCh0aGlzLmUsMTApLmQuYT1hLmF9O18uRmY9ZnVuY3Rpb24gRyRiKGEpe0JEKHRoaXMuZSwxMCkuZi5iPWEuYjtCRCh0aGlzLmUsMTApLmYuZD1hLmQ7QkQodGhpcy5lLDEwKS5mLmM9YS5jO0JEKHRoaXMuZSwxMCkuZi5hPWEuYX07Xy5HZj1mdW5jdGlvbiBIJGIoKXt3JGIodGhpcywoYSRiKCksX1piKSl9O18uYT1udWxsO18uYj1udWxsO18uYz1udWxsO18uZD1mYWxzZTt2YXIgRlE9bWRiKGZuZSwnTEdyYXBoQWRhcHRlcnMvTE5vZGVBZGFwdGVyJyw1NzUpO2JjYigxNzIyLDY1Nyx7ODM4OjF9LEkkYik7Xy56Zj1mdW5jdGlvbiBKJGIoKXt2YXIgYSxiLGMsZDtpZih0aGlzLmQmJkJEKHRoaXMuZSwxMSkuaS5rPT0oajBiKCksaTBiKSl7cmV0dXJuIG1tYigpLG1tYigpLGptYn1lbHNlIGlmKCF0aGlzLmEpe3RoaXMuYT1uZXcgUmtiO2ZvcihjPW5ldyBvbGIoQkQodGhpcy5lLDExKS5lKTtjLmE8Yy5jLmMubGVuZ3RoOyl7YT1CRChtbGIoYyksMTcpO0VrYih0aGlzLmEsbmV3IGokYihhKSl9aWYodGhpcy5kKXtkPUJEKHZOYihCRCh0aGlzLmUsMTEpLCh3dGMoKSxndGMpKSwxMCk7aWYoZCl7Zm9yKGI9bmV3IFNyKHVyKFJfYihkKS5hLktjKCksbmV3IFNxKSk7UXIoYik7KXthPUJEKFJyKGIpLDE3KTtFa2IodGhpcy5hLG5ldyBqJGIoYSkpfX19fXJldHVybiB0aGlzLmF9O18ud2Y9ZnVuY3Rpb24gSyRiKCl7dmFyIGEsYjtpZighdGhpcy5iKXt0aGlzLmI9UHUoQkQodGhpcy5lLDExKS5mLmMubGVuZ3RoKTtmb3IoYj1uZXcgb2xiKEJEKHRoaXMuZSwxMSkuZik7Yi5hPGIuYy5jLmxlbmd0aDspe2E9QkQobWxiKGIpLDcwKTtFa2IodGhpcy5iLG5ldyB2JGIoYSkpfX1yZXR1cm4gdGhpcy5ifTtfLkJmPWZ1bmN0aW9uIEwkYigpe3ZhciBhLGIsYyxkO2lmKHRoaXMuZCYmQkQodGhpcy5lLDExKS5pLms9PShqMGIoKSxpMGIpKXtyZXR1cm4gbW1iKCksbW1iKCksam1ifWVsc2UgaWYoIXRoaXMuYyl7dGhpcy5jPW5ldyBSa2I7Zm9yKGM9bmV3IG9sYihCRCh0aGlzLmUsMTEpLmcpO2MuYTxjLmMuYy5sZW5ndGg7KXthPUJEKG1sYihjKSwxNyk7RWtiKHRoaXMuYyxuZXcgaiRiKGEpKX1pZih0aGlzLmQpe2Q9QkQodk5iKEJEKHRoaXMuZSwxMSksKHd0YygpLGd0YykpLDEwKTtpZihkKXtmb3IoYj1uZXcgU3IodXIoVV9iKGQpLmEuS2MoKSxuZXcgU3EpKTtRcihiKTspe2E9QkQoUnIoYiksMTcpO0VrYih0aGlzLmMsbmV3IGokYihhKSl9fX19cmV0dXJuIHRoaXMuY307Xy5IZj1mdW5jdGlvbiBNJGIoKXtyZXR1cm4gQkQodGhpcy5lLDExKS5qfTtfLklmPWZ1bmN0aW9uIE4kYigpe3JldHVybiBDY2IoREQodk5iKEJEKHRoaXMuZSwxMSksKHd0YygpLE5zYykpKSl9O18uYT1udWxsO18uYj1udWxsO18uYz1udWxsO18uZD1mYWxzZTt2YXIgR1E9bWRiKGZuZSwnTEdyYXBoQWRhcHRlcnMvTFBvcnRBZGFwdGVyJywxNzIyKTtiY2IoMTcyMywxLERrZSxQJGIpO18udWU9ZnVuY3Rpb24gUSRiKGEsYil7cmV0dXJuIE8kYihCRChhLDExKSxCRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gUiRiKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBTJGIoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIEhRPW1kYihmbmUsJ0xHcmFwaEFkYXB0ZXJzL1BvcnRDb21wYXJhdG9yJywxNzIzKTtiY2IoODA0LDEsT2llLFQkYik7Xy5NYj1mdW5jdGlvbiBVJGIoYSl7cmV0dXJuIEJEKGEsMTApLGEkYigpLHRydWV9O3ZhciBJUT1tZGIoZm5lLCdMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlJyw4MDQpO2JjYigzOTIsMjk5LHszOjEsMjk5OjEsMzkyOjEsOTQ6MSwxMzQ6MX0pO3ZhciBiUj1tZGIoZm5lLCdMU2hhcGUnLDM5Mik7YmNiKDcwLDM5Mix7MzoxLDI5OToxLDcwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0scF9iLHFfYik7Xy5JYj1mdW5jdGlvbiByX2IoKXt2YXIgYTthPW9fYih0aGlzKTtyZXR1cm4gYT09bnVsbD8nbGFiZWwnOidsXycrYX07dmFyIExRPW1kYihmbmUsJ0xMYWJlbCcsNzApO2JjYigyMDcsMSx7MzoxLDQ6MSwyMDc6MSw0MTQ6MX0pO18uRmI9ZnVuY3Rpb24gQ19iKGEpe3ZhciBiO2lmKEpEKGEsMjA3KSl7Yj1CRChhLDIwNyk7cmV0dXJuIHRoaXMuZD09Yi5kJiZ0aGlzLmE9PWIuYSYmdGhpcy5iPT1iLmImJnRoaXMuYz09Yi5jfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5IYj1mdW5jdGlvbiBEX2IoKXt2YXIgYSxiO2E9SGRiKHRoaXMuYik8PDE2O2F8PUhkYih0aGlzLmEpJmFqZTtiPUhkYih0aGlzLmMpPDwxNjtifD1IZGIodGhpcy5kKSZhamU7cmV0dXJuIGFeYn07Xy5KZj1mdW5jdGlvbiBGX2IoYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtnPTA7d2hpbGUoZzxiLmxlbmd0aCYmRV9iKChCQ2IoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpKSxtbmUpKXsrK2d9Yz1iLmxlbmd0aDt3aGlsZShjPjAmJkVfYigoQkNiKGMtMSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGMtMSkpLG5uZSkpey0tY31pZihnPGMpe2w9bWZiKGIuc3Vic3RyKGcsYy1nKSwnLHw7Jyk7dHJ5e2ZvcihpPWwsaj0wLGs9aS5sZW5ndGg7ajxrOysrail7aD1pW2pdO2Y9bWZiKGgsJz0nKTtpZihmLmxlbmd0aCE9Mil7dGhyb3cgdmJiKG5ldyBXZGIoJ0V4cGVjdGluZyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLicpKX1lPXVmYihmWzBdKTttPUhjYih1ZmIoZlsxXSkpO2RmYihlLCd0b3AnKT8odGhpcy5kPW0pOmRmYihlLCdsZWZ0Jyk/KHRoaXMuYj1tKTpkZmIoZSwnYm90dG9tJyk/KHRoaXMuYT1tKTpkZmIoZSwncmlnaHQnKSYmKHRoaXMuYz1tKX19Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSwxMjcpKXtkPWE7dGhyb3cgdmJiKG5ldyBXZGIob25lK2QpKX1lbHNlIHRocm93IHZiYihhKX19fTtfLkliPWZ1bmN0aW9uIEdfYigpe3JldHVybiAnW3RvcD0nK3RoaXMuZCsnLGxlZnQ9Jyt0aGlzLmIrJyxib3R0b209Jyt0aGlzLmErJyxyaWdodD0nK3RoaXMuYysnXSd9O18uYT0wO18uYj0wO18uYz0wO18uZD0wO3ZhciBuMT1tZGIocG5lLCdTcGFjaW5nJywyMDcpO2JjYigxNDIsMjA3LHFuZSxIX2IsSV9iLEpfYixLX2IpO3ZhciBpMT1tZGIocG5lLCdFbGtNYXJnaW4nLDE0Mik7YmNiKDY1MSwxNDIscW5lLExfYik7dmFyIE1RPW1kYihmbmUsJ0xNYXJnaW4nLDY1MSk7YmNiKDEwLDM5Mix7MzoxLDI5OToxLDEwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sYjBiKTtfLkliPWZ1bmN0aW9uIGMwYigpe3JldHVybiBhMGIodGhpcyl9O18uaT1mYWxzZTt2YXIgT1E9bWRiKGZuZSwnTE5vZGUnLDEwKTtiY2IoMjY3LDIyLHszOjEsMzU6MSwyMjoxLDI2NzoxfSxrMGIpO3ZhciBkMGIsZTBiLGYwYixnMGIsaDBiLGkwYjt2YXIgTlE9bmRiKGZuZSwnTE5vZGUvTm9kZVR5cGUnLDI2NyxDSSxtMGIsbDBiKTt2YXIgbjBiO2JjYigxMTYsMjA3LHJuZSxwMGIscTBiLHIwYik7dmFyIGoxPW1kYihwbmUsJ0Vsa1BhZGRpbmcnLDExNik7YmNiKDc2NCwxMTYscm5lLHMwYik7dmFyIFBRPW1kYihmbmUsJ0xQYWRkaW5nJyw3NjQpO2JjYigxMSwzOTIsezM6MSwyOTk6MSwxMToxLDM5MjoxLDk0OjEsMTM0OjF9LEgwYik7Xy5JYj1mdW5jdGlvbiBJMGIoKXt2YXIgYSxiLGM7YT1uZXcgVWZiO1FmYigoYS5hKz0ncF8nLGEpLEMwYih0aGlzKSk7ISF0aGlzLmkmJlFmYihQZmIoKGEuYSs9J1snLGEpLHRoaXMuaSksJ10nKTtpZih0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmQkQoSWtiKHRoaXMuZSwwKSwxNykuYyE9dGhpcyl7Yj1CRChJa2IodGhpcy5lLDApLDE3KS5jO1FmYigoYS5hKz0nIDw8ICcsYSksQzBiKGIpKTtRZmIoUGZiKChhLmErPSdbJyxhKSxiLmkpLCddJyl9aWYodGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJkJEKElrYih0aGlzLmcsMCksMTcpLmQhPXRoaXMpe2M9QkQoSWtiKHRoaXMuZywwKSwxNykuZDtRZmIoKGEuYSs9JyA+PiAnLGEpLEMwYihjKSk7UWZiKFBmYigoYS5hKz0nWycsYSksYy5pKSwnXScpfXJldHVybiBhLmF9O18uYz10cnVlO18uZD1mYWxzZTt2YXIgdDBiLHUwYix2MGIsdzBiLHgwYix5MGI7dmFyIGFSPW1kYihmbmUsJ0xQb3J0JywxMSk7YmNiKDM5NywxLHZpZSxKMGIpO18uSmM9ZnVuY3Rpb24gSzBiKGEpe3JlYih0aGlzLGEpfTtfLktjPWZ1bmN0aW9uIEwwYigpe3ZhciBhO2E9bmV3IG9sYih0aGlzLmEuZSk7cmV0dXJuIG5ldyBNMGIoYSl9O3ZhciBSUT1tZGIoZm5lLCdMUG9ydC8xJywzOTcpO2JjYigxMjkwLDEsYWllLE0wYik7Xy5OYj1mdW5jdGlvbiBOMGIoYSl7UnJiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gUDBiKCl7cmV0dXJuIEJEKG1sYih0aGlzLmEpLDE3KS5jfTtfLk9iPWZ1bmN0aW9uIE8wYigpe3JldHVybiBsbGIodGhpcy5hKX07Xy5RYj1mdW5jdGlvbiBRMGIoKXtubGIodGhpcy5hKX07dmFyIFFRPW1kYihmbmUsJ0xQb3J0LzEvMScsMTI5MCk7YmNiKDM1OSwxLHZpZSxSMGIpO18uSmM9ZnVuY3Rpb24gUzBiKGEpe3JlYih0aGlzLGEpfTtfLktjPWZ1bmN0aW9uIFQwYigpe3ZhciBhO3JldHVybiBhPW5ldyBvbGIodGhpcy5hLmcpLG5ldyBVMGIoYSl9O3ZhciBUUT1tZGIoZm5lLCdMUG9ydC8yJywzNTkpO2JjYig3NjIsMSxhaWUsVTBiKTtfLk5iPWZ1bmN0aW9uIFYwYihhKXtScmIodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBYMGIoKXtyZXR1cm4gQkQobWxiKHRoaXMuYSksMTcpLmR9O18uT2I9ZnVuY3Rpb24gVzBiKCl7cmV0dXJuIGxsYih0aGlzLmEpfTtfLlFiPWZ1bmN0aW9uIFkwYigpe25sYih0aGlzLmEpfTt2YXIgU1E9bWRiKGZuZSwnTFBvcnQvMi8xJyw3NjIpO2JjYigxMjgzLDEsdmllLFowYik7Xy5KYz1mdW5jdGlvbiAkMGIoYSl7cmViKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gXzBiKCl7cmV0dXJuIG5ldyBiMWIodGhpcyl9O3ZhciBWUT1tZGIoZm5lLCdMUG9ydC9Db21iaW5lSXRlcicsMTI4Myk7YmNiKDIwMSwxLGFpZSxiMWIpO18uTmI9ZnVuY3Rpb24gYzFiKGEpe1JyYih0aGlzLGEpfTtfLlFiPWZ1bmN0aW9uIGYxYigpe1NyYigpfTtfLk9iPWZ1bmN0aW9uIGQxYigpe3JldHVybiBhMWIodGhpcyl9O18uUGI9ZnVuY3Rpb24gZTFiKCl7cmV0dXJuIGxsYih0aGlzLmEpP21sYih0aGlzLmEpOm1sYih0aGlzLmIpfTt2YXIgVVE9bWRiKGZuZSwnTFBvcnQvQ29tYmluZUl0ZXIvMScsMjAxKTtiY2IoMTI4NSwxLFZrZSxoMWIpO18uTGI9ZnVuY3Rpb24gaTFiKGEpe3JldHVybiBnMWIoYSl9O18uRmI9ZnVuY3Rpb24gajFiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBrMWIoYSl7cmV0dXJuIHowYigpLEJEKGEsMTEpLmUuYy5sZW5ndGghPTB9O3ZhciBXUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkMCRUeXBlJywxMjg1KTtiY2IoMTI4NCwxLFZrZSxtMWIpO18uTGI9ZnVuY3Rpb24gbjFiKGEpe3JldHVybiBsMWIoYSl9O18uRmI9ZnVuY3Rpb24gbzFiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBwMWIoYSl7cmV0dXJuIHowYigpLEJEKGEsMTEpLmcuYy5sZW5ndGghPTB9O3ZhciBYUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkMSRUeXBlJywxMjg0KTtiY2IoMTI4NiwxLFZrZSxxMWIpO18uTGI9ZnVuY3Rpb24gcjFiKGEpe3JldHVybiB6MGIoKSxCRChhLDExKS5qPT0oVWNkKCksQWNkKX07Xy5GYj1mdW5jdGlvbiBzMWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHQxYihhKXtyZXR1cm4gejBiKCksQkQoYSwxMSkuaj09KFVjZCgpLEFjZCl9O3ZhciBZUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkMiRUeXBlJywxMjg2KTtiY2IoMTI4NywxLFZrZSx1MWIpO18uTGI9ZnVuY3Rpb24gdjFiKGEpe3JldHVybiB6MGIoKSxCRChhLDExKS5qPT0oVWNkKCksemNkKX07Xy5GYj1mdW5jdGlvbiB3MWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHgxYihhKXtyZXR1cm4gejBiKCksQkQoYSwxMSkuaj09KFVjZCgpLHpjZCl9O3ZhciBaUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkMyRUeXBlJywxMjg3KTtiY2IoMTI4OCwxLFZrZSx5MWIpO18uTGI9ZnVuY3Rpb24gejFiKGEpe3JldHVybiB6MGIoKSxCRChhLDExKS5qPT0oVWNkKCksUmNkKX07Xy5GYj1mdW5jdGlvbiBBMWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIEIxYihhKXtyZXR1cm4gejBiKCksQkQoYSwxMSkuaj09KFVjZCgpLFJjZCl9O3ZhciAkUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkNCRUeXBlJywxMjg4KTtiY2IoMTI4OSwxLFZrZSxDMWIpO18uTGI9ZnVuY3Rpb24gRDFiKGEpe3JldHVybiB6MGIoKSxCRChhLDExKS5qPT0oVWNkKCksVGNkKX07Xy5GYj1mdW5jdGlvbiBFMWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIEYxYihhKXtyZXR1cm4gejBiKCksQkQoYSwxMSkuaj09KFVjZCgpLFRjZCl9O3ZhciBfUT1tZGIoZm5lLCdMUG9ydC9sYW1iZGEkNSRUeXBlJywxMjg5KTtiY2IoMjksMjk5LHszOjEsMjA6MSwyOTk6MSwyOToxLDk0OjEsMTM0OjF9LEgxYik7Xy5KYz1mdW5jdGlvbiBJMWIoYSl7cmViKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gSjFiKCl7cmV0dXJuIG5ldyBvbGIodGhpcy5hKX07Xy5JYj1mdW5jdGlvbiBLMWIoKXtyZXR1cm4gJ0xfJytKa2IodGhpcy5iLmIsdGhpcywwKStGZSh0aGlzLmEpfTt2YXIgY1I9bWRiKGZuZSwnTGF5ZXInLDI5KTtiY2IoMTM0MiwxLHt9LGEyYik7dmFyIG1SPW1kYih0bmUsdW5lLDEzNDIpO2JjYigxMzQ2LDEse30sZTJiKTtfLktiPWZ1bmN0aW9uIGYyYihhKXtyZXR1cm4gYXRkKEJEKGEsODIpKX07dmFyIGRSPW1kYih0bmUsJ0Vsa0dyYXBoSW1wb3J0ZXIvMG1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUnLDEzNDYpO2JjYigxMzQ5LDEse30sZzJiKTtfLktiPWZ1bmN0aW9uIGgyYihhKXtyZXR1cm4gYXRkKEJEKGEsODIpKX07dmFyIGVSPW1kYih0bmUsJ0Vsa0dyYXBoSW1wb3J0ZXIvMW1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUnLDEzNDkpO2JjYigxMzQzLDEscWllLGkyYik7Xy50ZD1mdW5jdGlvbiBqMmIoYSl7UTFiKHRoaXMuYSxCRChhLDExOCkpfTt2YXIgZlI9bWRiKHRuZSx2bmUsMTM0Myk7YmNiKDEzNDQsMSxxaWUsazJiKTtfLnRkPWZ1bmN0aW9uIGwyYihhKXtRMWIodGhpcy5hLEJEKGEsMTE4KSl9O3ZhciBnUj1tZGIodG5lLHduZSwxMzQ0KTtiY2IoMTM0NSwxLHt9LG0yYik7Xy5LYj1mdW5jdGlvbiBuMmIoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKE9sZChCRChhLDc5KSksMTYpKX07dmFyIGhSPW1kYih0bmUseG5lLDEzNDUpO2JjYigxMzQ3LDEsT2llLG8yYik7Xy5NYj1mdW5jdGlvbiBwMmIoYSl7cmV0dXJuIGIyYih0aGlzLmEsQkQoYSwzMykpfTt2YXIgaVI9bWRiKHRuZSx5bmUsMTM0Nyk7YmNiKDEzNDgsMSx7fSxxMmIpO18uS2I9ZnVuY3Rpb24gcjJiKGEpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1YihObGQoQkQoYSw3OSkpLDE2KSl9O3ZhciBqUj1tZGIodG5lLCdFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQ1JFR5cGUnLDEzNDgpO2JjYigxMzUwLDEsT2llLHMyYik7Xy5NYj1mdW5jdGlvbiB0MmIoYSl7cmV0dXJuIGMyYih0aGlzLmEsQkQoYSwzMykpfTt2YXIga1I9bWRiKHRuZSwnRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNyRUeXBlJywxMzUwKTtiY2IoMTM1MSwxLE9pZSx1MmIpO18uTWI9ZnVuY3Rpb24gdjJiKGEpe3JldHVybiBkMmIoQkQoYSw3OSkpfTt2YXIgbFI9bWRiKHRuZSwnRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlJywxMzUxKTtiY2IoMTI3OCwxLHt9LEQyYik7dmFyIHcyYjt2YXIgclI9bWRiKHRuZSwnRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlcicsMTI3OCk7YmNiKDEyNzksMSxPaWUsRzJiKTtfLk1iPWZ1bmN0aW9uIEgyYihhKXtyZXR1cm4gRTJiKHRoaXMuYSxCRChhLDE3KSl9O3ZhciBuUj1tZGIodG5lLCdFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQwJFR5cGUnLDEyNzkpO2JjYigxMjgwLDEscWllLEkyYik7Xy50ZD1mdW5jdGlvbiBKMmIoYSl7eDJiKCk7RWtiKHRoaXMuYSxCRChhLDE3KSl9O3ZhciBvUj1tZGIodG5lLCdFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQxJFR5cGUnLDEyODApO2JjYigxMjgxLDEsT2llLEsyYik7Xy5NYj1mdW5jdGlvbiBMMmIoYSl7cmV0dXJuIEYyYih0aGlzLmEsQkQoYSwxNykpfTt2YXIgcFI9bWRiKHRuZSwnRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlJywxMjgxKTtiY2IoMTI4MiwxLHFpZSxNMmIpO18udGQ9ZnVuY3Rpb24gTjJiKGEpe3gyYigpO0VrYih0aGlzLmEsQkQoYSwxNykpfTt2YXIgcVI9bWRiKHRuZSwnRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMyRUeXBlJywxMjgyKTtiY2IoMTQ4NSwxLGVuZSxTMmIpO18ucGY9ZnVuY3Rpb24gVDJiKGEsYil7UTJiKEJEKGEsMzcpLGIpfTt2YXIgdVI9bWRiKEFuZSwnQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yJywxNDg1KTtiY2IoMTQ4NiwxLHt9LFUyYik7Xy5LYj1mdW5jdGlvbiBWMmIoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMjkpLmEsMTYpKX07dmFyIHNSPW1kYihBbmUsJ0NvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxNDg2KTtiY2IoMTQ4NywxLHFpZSxXMmIpO18udGQ9ZnVuY3Rpb24gWDJiKGEpe1IyYihCRChhLDEwKSl9O3ZhciB0Uj1tZGIoQW5lLCdDb21tZW50Tm9kZU1hcmdpbkNhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZScsMTQ4Nyk7YmNiKDE0ODgsMSxlbmUsXzJiKTtfLnBmPWZ1bmN0aW9uIGEzYihhLGIpe1oyYihCRChhLDM3KSxiKX07dmFyIHZSPW1kYihBbmUsJ0NvbW1lbnRQb3N0cHJvY2Vzc29yJywxNDg4KTtiY2IoMTQ4OSwxLGVuZSxlM2IpO18ucGY9ZnVuY3Rpb24gZjNiKGEsYil7YjNiKEJEKGEsMzcpLGIpfTt2YXIgd1I9bWRiKEFuZSwnQ29tbWVudFByZXByb2Nlc3NvcicsMTQ4OSk7YmNiKDE0OTAsMSxlbmUsaDNiKTtfLnBmPWZ1bmN0aW9uIGkzYihhLGIpe2czYihCRChhLDM3KSxiKX07dmFyIHhSPW1kYihBbmUsJ0NvbnN0cmFpbnRzUG9zdHByb2Nlc3NvcicsMTQ5MCk7YmNiKDE0OTEsMSxlbmUscDNiKTtfLnBmPWZ1bmN0aW9uIHEzYihhLGIpe24zYihCRChhLDM3KSxiKX07dmFyIHlSPW1kYihBbmUsJ0VkZ2VBbmRMYXllckNvbnN0cmFpbnRFZGdlUmV2ZXJzZXInLDE0OTEpO2JjYigxNDkyLDEsZW5lLHQzYik7Xy5wZj1mdW5jdGlvbiB2M2IoYSxiKXtyM2IoQkQoYSwzNyksYil9O3ZhciBDUj1tZGIoQW5lLCdFbmRMYWJlbFBvc3Rwcm9jZXNzb3InLDE0OTIpO2JjYigxNDkzLDEse30sdzNiKTtfLktiPWZ1bmN0aW9uIHgzYihhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgelI9bWRiKEFuZSwnRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE0OTMpO2JjYigxNDk0LDEsT2llLHkzYik7Xy5NYj1mdW5jdGlvbiB6M2IoYSl7cmV0dXJuIHUzYihCRChhLDEwKSl9O3ZhciBBUj1tZGIoQW5lLCdFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTQ5NCk7YmNiKDE0OTUsMSxxaWUsQTNiKTtfLnRkPWZ1bmN0aW9uIEIzYihhKXtzM2IoQkQoYSwxMCkpfTt2YXIgQlI9bWRiKEFuZSwnRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE0OTUpO2JjYigxNDk2LDEsZW5lLE0zYik7Xy5wZj1mdW5jdGlvbiBQM2IoYSxiKXtJM2IoQkQoYSwzNyksYil9O3ZhciBKUj1tZGIoQW5lLCdFbmRMYWJlbFByZXByb2Nlc3NvcicsMTQ5Nik7YmNiKDE0OTcsMSx7fSxRM2IpO18uS2I9ZnVuY3Rpb24gUjNiKGEpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBEUj1tZGIoQW5lLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNDk3KTtiY2IoMTQ5OCwxLHFpZSxTM2IpO18udGQ9ZnVuY3Rpb24gVDNiKGEpe0UzYih0aGlzLmEsdGhpcy5iLHRoaXMuYyxCRChhLDEwKSl9O18uYT0wO18uYj0wO18uYz1mYWxzZTt2YXIgRVI9bWRiKEFuZSwnRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTQ5OCk7YmNiKDE0OTksMSxPaWUsVTNiKTtfLk1iPWZ1bmN0aW9uIFYzYihhKXtyZXR1cm4gUEQodk5iKEJEKGEsNzApLChOeWMoKSxRd2MpKSk9PT1QRCgocWFkKCkscGFkKSl9O3ZhciBGUj1tZGIoQW5lLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlJywxNDk5KTtiY2IoMTUwMCwxLHFpZSxXM2IpO18udGQ9ZnVuY3Rpb24gWDNiKGEpe0RzYih0aGlzLmEsQkQoYSw3MCkpfTt2YXIgR1I9bWRiKEFuZSwnRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDMkVHlwZScsMTUwMCk7YmNiKDE1MDEsMSxPaWUsWTNiKTtfLk1iPWZ1bmN0aW9uIFozYihhKXtyZXR1cm4gUEQodk5iKEJEKGEsNzApLChOeWMoKSxRd2MpKSk9PT1QRCgocWFkKCksb2FkKSl9O3ZhciBIUj1tZGIoQW5lLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNCRUeXBlJywxNTAxKTtiY2IoMTUwMiwxLHFpZSwkM2IpO18udGQ9ZnVuY3Rpb24gXzNiKGEpe0RzYih0aGlzLmEsQkQoYSw3MCkpfTt2YXIgSVI9bWRiKEFuZSwnRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDUkVHlwZScsMTUwMik7YmNiKDE1NTEsMSxlbmUsaTRiKTtfLnBmPWZ1bmN0aW9uIGo0YihhLGIpe2Y0YihCRChhLDM3KSxiKX07dmFyIGE0Yjt2YXIgUlI9bWRiKEFuZSwnRW5kTGFiZWxTb3J0ZXInLDE1NTEpO2JjYigxNTUyLDEsRGtlLGw0Yik7Xy51ZT1mdW5jdGlvbiBtNGIoYSxiKXtyZXR1cm4gazRiKEJEKGEsNDU2KSxCRChiLDQ1NikpfTtfLkZiPWZ1bmN0aW9uIG40YihhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gbzRiKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBLUj1tZGIoQW5lLCdFbmRMYWJlbFNvcnRlci8xJywxNTUyKTtiY2IoNDU2LDEsezQ1NjoxfSxwNGIpO3ZhciBMUj1tZGIoQW5lLCdFbmRMYWJlbFNvcnRlci9MYWJlbEdyb3VwJyw0NTYpO2JjYigxNTUzLDEse30scTRiKTtfLktiPWZ1bmN0aW9uIHI0YihhKXtyZXR1cm4gYjRiKCksbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgTVI9bWRiKEFuZSwnRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDAkVHlwZScsMTU1Myk7YmNiKDE1NTQsMSxPaWUsczRiKTtfLk1iPWZ1bmN0aW9uIHQ0YihhKXtyZXR1cm4gYjRiKCksQkQoYSwxMCkuaz09KGowYigpLGgwYil9O3ZhciBOUj1tZGIoQW5lLCdFbmRMYWJlbFNvcnRlci9sYW1iZGEkMSRUeXBlJywxNTU0KTtiY2IoMTU1NSwxLHFpZSx1NGIpO18udGQ9ZnVuY3Rpb24gdjRiKGEpe2c0YihCRChhLDEwKSl9O3ZhciBPUj1tZGIoQW5lLCdFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlJywxNTU1KTtiY2IoMTU1NiwxLE9pZSx3NGIpO18uTWI9ZnVuY3Rpb24geDRiKGEpe3JldHVybiBiNGIoKSxQRCh2TmIoQkQoYSw3MCksKE55YygpLFF3YykpKT09PVBEKChxYWQoKSxvYWQpKX07dmFyIFBSPW1kYihBbmUsJ0VuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUnLDE1NTYpO2JjYigxNTU3LDEsT2llLHk0Yik7Xy5NYj1mdW5jdGlvbiB6NGIoYSl7cmV0dXJuIGI0YigpLFBEKHZOYihCRChhLDcwKSwoTnljKCksUXdjKSkpPT09UEQoKHFhZCgpLHBhZCkpfTt2YXIgUVI9bWRiKEFuZSwnRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDQkVHlwZScsMTU1Nyk7YmNiKDE1MDMsMSxlbmUsTDRiKTtfLnBmPWZ1bmN0aW9uIE00YihhLGIpe0o0Yih0aGlzLEJEKGEsMzcpKX07Xy5iPTA7Xy5jPTA7dmFyIFlSPW1kYihBbmUsJ0ZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3InLDE1MDMpO2JjYigxNTA0LDEse30sTjRiKTtfLktiPWZ1bmN0aW9uIE80YihhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgU1I9bWRiKEFuZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxNTA0KTtiY2IoMTUwNSwxLHt9LFA0Yik7Xy5LYj1mdW5jdGlvbiBRNGIoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgTHViKG5ldyBTcih1cihVX2IoQkQoYSwxMCkpLmEuS2MoKSxuZXcgU3EpKSkpfTt2YXIgVFI9bWRiKEFuZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlJywxNTA1KTtiY2IoMTUwNiwxLE9pZSxSNGIpO18uTWI9ZnVuY3Rpb24gUzRiKGEpe3JldHVybiAhT1piKEJEKGEsMTcpKX07dmFyIFVSPW1kYihBbmUsJ0ZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDIkVHlwZScsMTUwNik7YmNiKDE1MDcsMSxPaWUsVDRiKTtfLk1iPWZ1bmN0aW9uIFU0YihhKXtyZXR1cm4gd05iKEJEKGEsMTcpLCh3dGMoKSxydGMpKX07dmFyIFZSPW1kYihBbmUsJ0ZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDMkVHlwZScsMTUwNyk7YmNiKDE1MDgsMSxxaWUsVjRiKTtfLnRkPWZ1bmN0aW9uIFc0YihhKXtDNGIodGhpcy5hLEJEKGEsMTI4KSl9O3ZhciBXUj1tZGIoQW5lLCdGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQ0JFR5cGUnLDE1MDgpO2JjYigxNTA5LDEscWllLFg0Yik7Xy50ZD1mdW5jdGlvbiBZNGIoYSl7c21iKEJEKGEsMTcpLmEpfTt2YXIgWFI9bWRiKEFuZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNSRUeXBlJywxNTA5KTtiY2IoNzkyLDEsZW5lLHU1Yik7Xy5wZj1mdW5jdGlvbiB2NWIoYSxiKXtsNWIodGhpcyxCRChhLDM3KSxiKX07dmFyICRSPW1kYihBbmUsJ0dyYXBoVHJhbnNmb3JtZXInLDc5Mik7YmNiKDUxMSwyMix7MzoxLDM1OjEsMjI6MSw1MTE6MX0sejViKTt2YXIgdzViLHg1Yjt2YXIgWlI9bmRiKEFuZSwnR3JhcGhUcmFuc2Zvcm1lci9Nb2RlJyw1MTEsQ0ksQjViLEE1Yik7dmFyIEM1YjtiY2IoMTUxMCwxLGVuZSxJNWIpO18ucGY9ZnVuY3Rpb24gSjViKGEsYil7RjViKEJEKGEsMzcpLGIpfTt2YXIgX1I9bWRiKEFuZSwnSGllcmFyY2hpY2FsTm9kZVJlc2l6aW5nUHJvY2Vzc29yJywxNTEwKTtiY2IoMTUxMSwxLGVuZSxRNWIpO18ucGY9ZnVuY3Rpb24gUjViKGEsYil7TTViKEJEKGEsMzcpLGIpfTt2YXIgYlM9bWRiKEFuZSwnSGllcmFyY2hpY2FsUG9ydENvbnN0cmFpbnRQcm9jZXNzb3InLDE1MTEpO2JjYigxNTEyLDEsRGtlLFQ1Yik7Xy51ZT1mdW5jdGlvbiBVNWIoYSxiKXtyZXR1cm4gUzViKEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiBWNWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFc1Yigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgYVM9bWRiKEFuZSwnSGllcmFyY2hpY2FsUG9ydENvbnN0cmFpbnRQcm9jZXNzb3IvTm9kZUNvbXBhcmF0b3InLDE1MTIpO2JjYigxNTEzLDEsZW5lLFo1Yik7Xy5wZj1mdW5jdGlvbiAkNWIoYSxiKXtYNWIoQkQoYSwzNyksYil9O3ZhciBjUz1tZGIoQW5lLCdIaWVyYXJjaGljYWxQb3J0RHVtbXlTaXplUHJvY2Vzc29yJywxNTEzKTtiY2IoMTUxNCwxLGVuZSxsNmIpO18ucGY9ZnVuY3Rpb24gbTZiKGEsYil7ZTZiKHRoaXMsQkQoYSwzNyksYil9O18uYT0wO3ZhciBmUz1tZGIoQW5lLCdIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXInLDE1MTQpO2JjYigxNTE1LDEsRGtlLG82Yik7Xy51ZT1mdW5jdGlvbiBwNmIoYSxiKXtyZXR1cm4gbjZiKEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiBxNmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHI2Yigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgZFM9bWRiKEFuZSwnSGllcmFyY2hpY2FsUG9ydE9ydGhvZ29uYWxFZGdlUm91dGVyLzEnLDE1MTUpO2JjYigxNTE2LDEsRGtlLHQ2Yik7Xy51ZT1mdW5jdGlvbiB1NmIoYSxiKXtyZXR1cm4gczZiKEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiB2NmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHc2Yigpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgZVM9bWRiKEFuZSwnSGllcmFyY2hpY2FsUG9ydE9ydGhvZ29uYWxFZGdlUm91dGVyLzInLDE1MTYpO2JjYigxNTE3LDEsZW5lLHo2Yik7Xy5wZj1mdW5jdGlvbiBBNmIoYSxiKXt5NmIoQkQoYSwzNyksYil9O3ZhciBnUz1tZGIoQW5lLCdIaWVyYXJjaGljYWxQb3J0UG9zaXRpb25Qcm9jZXNzb3InLDE1MTcpO2JjYigxNTE4LDEsZW5lLEo2Yik7Xy5wZj1mdW5jdGlvbiBLNmIoYSxiKXtJNmIodGhpcyxCRChhLDM3KSl9O18uYT0wO18uYz0wO3ZhciBCNmIsQzZiO3ZhciBrUz1tZGIoQW5lLCdIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yJywxNTE4KTtiY2IoNTcxLDEsezU3MToxfSxMNmIpO18uYj0tMTtfLmQ9LTE7dmFyIGhTPW1kYihBbmUsJ0hpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbicsNTcxKTtiY2IoMTUxOSwxLHt9LE02Yik7Xy5LYj1mdW5jdGlvbiBONmIoYSl7cmV0dXJuIEQ2YigpLFJfYihCRChhLDEwKSl9O18uRmI9ZnVuY3Rpb24gTzZiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIGlTPW1kYihBbmUsJ0hpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTUxOSk7YmNiKDE1MjAsMSx7fSxQNmIpO18uS2I9ZnVuY3Rpb24gUTZiKGEpe3JldHVybiBENmIoKSxVX2IoQkQoYSwxMCkpfTtfLkZiPWZ1bmN0aW9uIFI2YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBqUz1tZGIoQW5lLCdIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1MjApO2JjYigxNTI2LDEsZW5lLFg2Yik7Xy5wZj1mdW5jdGlvbiBZNmIoYSxiKXtXNmIodGhpcyxCRChhLDM3KSxiKX07dmFyIHBTPW1kYihBbmUsJ0h5cGVyZWRnZUR1bW15TWVyZ2VyJywxNTI2KTtiY2IoNzkzLDEse30sWjZiKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO18uYz1mYWxzZTt2YXIgbFM9bWRiKEFuZSwnSHlwZXJlZGdlRHVtbXlNZXJnZXIvTWVyZ2VTdGF0ZScsNzkzKTtiY2IoMTUyNywxLHt9LCQ2Yik7Xy5LYj1mdW5jdGlvbiBfNmIoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMjkpLmEsMTYpKX07dmFyIG1TPW1kYihBbmUsJ0h5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUnLDE1MjcpO2JjYigxNTI4LDEse30sYTdiKTtfLktiPWZ1bmN0aW9uIGI3YihhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwxMCkuaiwxNikpfTt2YXIgblM9bWRiKEFuZSwnSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDEkVHlwZScsMTUyOCk7YmNiKDE1MjksMSxxaWUsYzdiKTtfLnRkPWZ1bmN0aW9uIGQ3YihhKXtCRChhLDExKS5wPS0xfTt2YXIgb1M9bWRiKEFuZSwnSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZScsMTUyOSk7YmNiKDE1MzAsMSxlbmUsZzdiKTtfLnBmPWZ1bmN0aW9uIGg3YihhLGIpe2Y3YihCRChhLDM3KSxiKX07dmFyIHFTPW1kYihBbmUsJ0h5cGVybm9kZXNQcm9jZXNzb3InLDE1MzApO2JjYigxNTMxLDEsZW5lLGo3Yik7Xy5wZj1mdW5jdGlvbiBrN2IoYSxiKXtpN2IoQkQoYSwzNyksYil9O3ZhciByUz1tZGIoQW5lLCdJbkxheWVyQ29uc3RyYWludFByb2Nlc3NvcicsMTUzMSk7YmNiKDE1MzIsMSxlbmUsbTdiKTtfLnBmPWZ1bmN0aW9uIG43YihhLGIpe2w3YihCRChhLDM3KSxiKX07dmFyIHNTPW1kYihBbmUsJ0lubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yJywxNTMyKTtiY2IoMTUzMywxLGVuZSxyN2IpO18ucGY9ZnVuY3Rpb24gdzdiKGEsYil7cTdiKHRoaXMsQkQoYSwzNykpfTtfLmE9UWplO18uYj1RamU7Xy5jPVBqZTtfLmQ9UGplO3ZhciB6Uz1tZGIoQW5lLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXInLDE1MzMpO2JjYigxNTM0LDEse30seDdiKTtfLktiPWZ1bmN0aW9uIHk3YihhKXtyZXR1cm4gQkQoYSwxNykuZC5pfTtfLkZiPWZ1bmN0aW9uIHo3YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciB0Uz1tZGIoQW5lLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDAkVHlwZScsMTUzNCk7YmNiKDE1MzUsMSx7fSxBN2IpO18uS2I9ZnVuY3Rpb24gQjdiKGEpe3JldHVybiBzN2IodGhpcy5hLEVEKGEpKX07Xy5GYj1mdW5jdGlvbiBDN2IoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgdVM9bWRiKEFuZSwnSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQxJFR5cGUnLDE1MzUpO2JjYigxNTM2LDEse30sRDdiKTtfLktiPWZ1bmN0aW9uIEU3YihhKXtyZXR1cm4gQkQoYSwxNykuYy5pfTtfLkZiPWZ1bmN0aW9uIEY3YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciB2Uz1tZGIoQW5lLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDIkVHlwZScsMTUzNik7YmNiKDE1MzcsMSx7fSxHN2IpO18uS2I9ZnVuY3Rpb24gSDdiKGEpe3JldHVybiB0N2IodGhpcy5hLEVEKGEpKX07Xy5GYj1mdW5jdGlvbiBJN2IoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgd1M9bWRiKEFuZSwnSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQzJFR5cGUnLDE1MzcpO2JjYigxNTM4LDEse30sSjdiKTtfLktiPWZ1bmN0aW9uIEs3YihhKXtyZXR1cm4gdTdiKHRoaXMuYSxFRChhKSl9O18uRmI9ZnVuY3Rpb24gTDdiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIHhTPW1kYihBbmUsJ0ludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNCRUeXBlJywxNTM4KTtiY2IoMTUzOSwxLHt9LE03Yik7Xy5LYj1mdW5jdGlvbiBON2IoYSl7cmV0dXJuIHY3Yih0aGlzLmEsRUQoYSkpfTtfLkZiPWZ1bmN0aW9uIE83YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciB5Uz1tZGIoQW5lLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDUkVHlwZScsMTUzOSk7YmNiKDc3LDIyLHszOjEsMzU6MSwyMjoxLDc3OjEsMjM0OjF9LFQ4Yik7Xy5LZj1mdW5jdGlvbiBVOGIoKXtzd2l0Y2godGhpcy5nKXtjYXNlIDE1OnJldHVybiBuZXcgZW9jO2Nhc2UgMjI6cmV0dXJuIG5ldyBBb2M7Y2FzZSA0NzpyZXR1cm4gbmV3IEpvYztjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyB1YWM7Y2FzZSAzMjpyZXR1cm4gbmV3IFMyYjtjYXNlIDQyOnJldHVybiBuZXcgXzJiO2Nhc2UgMTpyZXR1cm4gbmV3IGUzYjtjYXNlIDQxOnJldHVybiBuZXcgaDNiO2Nhc2UgNTY6cmV0dXJuIG5ldyB1NWIoKHk1YigpLHg1YikpO2Nhc2UgMDpyZXR1cm4gbmV3IHU1YigoeTViKCksdzViKSk7Y2FzZSAyOnJldHVybiBuZXcgcDNiO2Nhc2UgNTQ6cmV0dXJuIG5ldyB0M2I7Y2FzZSAzMzpyZXR1cm4gbmV3IE0zYjtjYXNlIDUxOnJldHVybiBuZXcgTDRiO2Nhc2UgNTU6cmV0dXJuIG5ldyBJNWI7Y2FzZSAxMzpyZXR1cm4gbmV3IFE1YjtjYXNlIDM4OnJldHVybiBuZXcgWjViO2Nhc2UgNDQ6cmV0dXJuIG5ldyBsNmI7Y2FzZSA0MDpyZXR1cm4gbmV3IHo2YjtjYXNlIDk6cmV0dXJuIG5ldyBKNmI7Y2FzZSA0OTpyZXR1cm4gbmV3IHNnYztjYXNlIDM3OnJldHVybiBuZXcgWDZiO2Nhc2UgNDM6cmV0dXJuIG5ldyBnN2I7Y2FzZSAyNzpyZXR1cm4gbmV3IGo3YjtjYXNlIDMwOnJldHVybiBuZXcgbTdiO2Nhc2UgMzpyZXR1cm4gbmV3IHI3YjtjYXNlIDE4OnJldHVybiBuZXcgYjliO2Nhc2UgMjk6cmV0dXJuIG5ldyBoOWI7Y2FzZSA1OnJldHVybiBuZXcgdTliO2Nhc2UgNTA6cmV0dXJuIG5ldyBEOWI7Y2FzZSAzNDpyZXR1cm4gbmV3ICQ5YjtjYXNlIDM2OnJldHVybiBuZXcgSWFjO2Nhc2UgNTI6cmV0dXJuIG5ldyBpNGI7Y2FzZSAxMTpyZXR1cm4gbmV3IFNhYztjYXNlIDc6cmV0dXJuIG5ldyBhYmM7Y2FzZSAzOTpyZXR1cm4gbmV3IG9iYztjYXNlIDQ1OnJldHVybiBuZXcgcmJjO2Nhc2UgMTY6cmV0dXJuIG5ldyB2YmM7Y2FzZSAxMDpyZXR1cm4gbmV3IEZiYztjYXNlIDQ4OnJldHVybiBuZXcgWGJjO2Nhc2UgMjE6cmV0dXJuIG5ldyBjY2M7Y2FzZSAyMzpyZXR1cm4gbmV3IGZHYygockdjKCkscEdjKSk7Y2FzZSA4OnJldHVybiBuZXcgbGNjO2Nhc2UgMTI6cmV0dXJuIG5ldyB0Y2M7Y2FzZSA0OnJldHVybiBuZXcgeWNjO2Nhc2UgMTk6cmV0dXJuIG5ldyBUY2M7Y2FzZSAxNzpyZXR1cm4gbmV3IHBkYztjYXNlIDUzOnJldHVybiBuZXcgc2RjO2Nhc2UgNjpyZXR1cm4gbmV3IGhlYztjYXNlIDI1OnJldHVybiBuZXcgd2RjO2Nhc2UgNDY6cmV0dXJuIG5ldyBOZGM7Y2FzZSAzMTpyZXR1cm4gbmV3IHNlYztjYXNlIDE0OnJldHVybiBuZXcgRmVjO2Nhc2UgMjY6cmV0dXJuIG5ldyBwcGM7Y2FzZSAyMDpyZXR1cm4gbmV3IFVlYztjYXNlIDI0OnJldHVybiBuZXcgZkdjKChyR2MoKSxxR2MpKTtkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKERuZSsodGhpcy5mIT1udWxsP3RoaXMuZjonJyt0aGlzLmcpKSk7fX07dmFyIFA3YixRN2IsUjdiLFM3YixUN2IsVTdiLFY3YixXN2IsWDdiLFk3YixaN2IsJDdiLF83YixhOGIsYjhiLGM4YixkOGIsZThiLGY4YixnOGIsaDhiLGk4YixqOGIsazhiLGw4YixtOGIsbjhiLG84YixwOGIscThiLHI4YixzOGIsdDhiLHU4Yix2OGIsdzhiLHg4Yix5OGIsejhiLEE4YixCOGIsQzhiLEQ4YixFOGIsRjhiLEc4YixIOGIsSThiLEo4YixLOGIsTDhiLE04YixOOGIsTzhiLFA4YixROGIsUjhiO3ZhciBBUz1uZGIoQW5lLEVuZSw3NyxDSSxXOGIsVjhiKTt2YXIgWDhiO2JjYigxNTQwLDEsZW5lLGI5Yik7Xy5wZj1mdW5jdGlvbiBjOWIoYSxiKXtfOGIoQkQoYSwzNyksYil9O3ZhciBCUz1tZGIoQW5lLCdJbnZlcnRlZFBvcnRQcm9jZXNzb3InLDE1NDApO2JjYigxNTQxLDEsZW5lLGg5Yik7Xy5wZj1mdW5jdGlvbiBpOWIoYSxiKXtnOWIoQkQoYSwzNyksYil9O3ZhciBGUz1tZGIoQW5lLCdMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yJywxNTQxKTtiY2IoMTU0MiwxLE9pZSxqOWIpO18uTWI9ZnVuY3Rpb24gazliKGEpe3JldHVybiBCRChhLDEwKS5rPT0oajBiKCksaDBiKX07dmFyIENTPW1kYihBbmUsJ0xhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU0Mik7YmNiKDE1NDMsMSxPaWUsbDliKTtfLk1iPWZ1bmN0aW9uIG05YihhKXtyZXR1cm4gQkQoYSwxMCkuaz09KGowYigpLGUwYil9O3ZhciBEUz1tZGIoQW5lLCdMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1NDMpO2JjYigxNTQ0LDEscWllLG45Yik7Xy50ZD1mdW5jdGlvbiBvOWIoYSl7ZTliKHRoaXMuYix0aGlzLmEsdGhpcy5jLEJEKGEsMTApKX07Xy5hPWZhbHNlO18uYz1mYWxzZTt2YXIgRVM9bWRiKEFuZSwnTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlJywxNTQ0KTtiY2IoMTU0NSwxLGVuZSx1OWIpO18ucGY9ZnVuY3Rpb24gdjliKGEsYil7czliKEJEKGEsMzcpLGIpfTt2YXIgcDliO3ZhciBIUz1tZGIoQW5lLCdMYWJlbER1bW15SW5zZXJ0ZXInLDE1NDUpO2JjYigxNTQ2LDEsVmtlLHc5Yik7Xy5MYj1mdW5jdGlvbiB4OWIoYSl7cmV0dXJuIFBEKHZOYihCRChhLDcwKSwoTnljKCksUXdjKSkpPT09UEQoKHFhZCgpLG5hZCkpfTtfLkZiPWZ1bmN0aW9uIHk5YihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gejliKGEpe3JldHVybiBQRCh2TmIoQkQoYSw3MCksKE55YygpLFF3YykpKT09PVBEKChxYWQoKSxuYWQpKX07dmFyIEdTPW1kYihBbmUsJ0xhYmVsRHVtbXlJbnNlcnRlci8xJywxNTQ2KTtiY2IoMTU0NywxLGVuZSxEOWIpO18ucGY9ZnVuY3Rpb24gRTliKGEsYil7QzliKEJEKGEsMzcpLGIpfTt2YXIgSlM9bWRiKEFuZSwnTGFiZWxEdW1teVJlbW92ZXInLDE1NDcpO2JjYigxNTQ4LDEsT2llLEY5Yik7Xy5NYj1mdW5jdGlvbiBHOWIoYSl7cmV0dXJuIENjYihERCh2TmIoQkQoYSw3MCksKE55YygpLFB3YykpKSl9O3ZhciBJUz1tZGIoQW5lLCdMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlJywxNTQ4KTtiY2IoMTM1OSwxLGVuZSwkOWIpO18ucGY9ZnVuY3Rpb24gY2FjKGEsYil7VzliKHRoaXMsQkQoYSwzNyksYil9O18uYT1udWxsO3ZhciBIOWI7dmFyIFFTPW1kYihBbmUsJ0xhYmVsRHVtbXlTd2l0Y2hlcicsMTM1OSk7YmNiKDI4NiwxLHsyODY6MX0sZ2FjKTtfLmM9MDtfLmQ9bnVsbDtfLmY9MDt2YXIgS1M9bWRiKEFuZSwnTGFiZWxEdW1teVN3aXRjaGVyL0xhYmVsRHVtbXlJbmZvJywyODYpO2JjYigxMzYwLDEse30saGFjKTtfLktiPWZ1bmN0aW9uIGlhYyhhKXtyZXR1cm4gSTliKCksbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgTFM9bWRiKEFuZSwnTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQwJFR5cGUnLDEzNjApO2JjYigxMzYxLDEsT2llLGphYyk7Xy5NYj1mdW5jdGlvbiBrYWMoYSl7cmV0dXJuIEk5YigpLEJEKGEsMTApLms9PShqMGIoKSxmMGIpfTt2YXIgTVM9bWRiKEFuZSwnTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQxJFR5cGUnLDEzNjEpO2JjYigxMzYyLDEse30sbGFjKTtfLktiPWZ1bmN0aW9uIG1hYyhhKXtyZXR1cm4gXzliKHRoaXMuYSxCRChhLDEwKSl9O3ZhciBOUz1tZGIoQW5lLCdMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDIkVHlwZScsMTM2Mik7YmNiKDEzNjMsMSxxaWUsbmFjKTtfLnRkPWZ1bmN0aW9uIG9hYyhhKXthYWModGhpcy5hLEJEKGEsMjg2KSl9O3ZhciBPUz1tZGIoQW5lLCdMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZScsMTM2Myk7YmNiKDEzNjQsMSxEa2UscGFjKTtfLnVlPWZ1bmN0aW9uIHFhYyhhLGIpe3JldHVybiBiYWMoQkQoYSwyODYpLEJEKGIsMjg2KSl9O18uRmI9ZnVuY3Rpb24gcmFjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBzYWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFBTPW1kYihBbmUsJ0xhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlJywxMzY0KTtiY2IoNzkxLDEsZW5lLHVhYyk7Xy5wZj1mdW5jdGlvbiB2YWMoYSxiKXt0YWMoQkQoYSwzNyksYil9O3ZhciBSUz1tZGIoQW5lLCdMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3InLDc5MSk7YmNiKDE1NDksMSxlbmUsSWFjKTtfLnBmPWZ1bmN0aW9uIEphYyhhLGIpe0NhYyhCRChhLDM3KSxiKX07dmFyIFRTPW1kYihBbmUsJ0xhYmVsU2lkZVNlbGVjdG9yJywxNTQ5KTtiY2IoMTU1MCwxLE9pZSxLYWMpO18uTWI9ZnVuY3Rpb24gTGFjKGEpe3JldHVybiBDY2IoREQodk5iKEJEKGEsNzApLChOeWMoKSxQd2MpKSkpfTt2YXIgU1M9bWRiKEFuZSwnTGFiZWxTaWRlU2VsZWN0b3IvbGFtYmRhJDAkVHlwZScsMTU1MCk7YmNiKDE1NTgsMSxlbmUsU2FjKTtfLnBmPWZ1bmN0aW9uIFRhYyhhLGIpe09hYyhCRChhLDM3KSxiKX07dmFyIFVTPW1kYihBbmUsJ0xheWVyQ29uc3RyYWludFBvc3Rwcm9jZXNzb3InLDE1NTgpO2JjYigxNTU5LDEsZW5lLGFiYyk7Xy5wZj1mdW5jdGlvbiBiYmMoYSxiKXskYWMoQkQoYSwzNyksYil9O3ZhciBVYWM7dmFyIFdTPW1kYihBbmUsJ0xheWVyQ29uc3RyYWludFByZXByb2Nlc3NvcicsMTU1OSk7YmNiKDM2MCwyMix7MzoxLDM1OjEsMjI6MSwzNjA6MX0saWJjKTt2YXIgY2JjLGRiYyxlYmMsZmJjO3ZhciBWUz1uZGIoQW5lLCdMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IvSGlkZGVuTm9kZUNvbm5lY3Rpb25zJywzNjAsQ0ksa2JjLGpiYyk7dmFyIGxiYztiY2IoMTU2MCwxLGVuZSxvYmMpO18ucGY9ZnVuY3Rpb24gcGJjKGEsYil7bmJjKEJEKGEsMzcpLGIpfTt2YXIgWFM9bWRiKEFuZSwnTGF5ZXJTaXplQW5kR3JhcGhIZWlnaHRDYWxjdWxhdG9yJywxNTYwKTtiY2IoMTU2MSwxLGVuZSxyYmMpO18ucGY9ZnVuY3Rpb24gdGJjKGEsYil7cWJjKEJEKGEsMzcpLGIpfTt2YXIgWVM9bWRiKEFuZSwnTG9uZ0VkZ2VKb2luZXInLDE1NjEpO2JjYigxNTYyLDEsZW5lLHZiYyk7Xy5wZj1mdW5jdGlvbiB4YmMoYSxiKXt1YmMoQkQoYSwzNyksYil9O3ZhciBaUz1tZGIoQW5lLCdMb25nRWRnZVNwbGl0dGVyJywxNTYyKTtiY2IoMTU2MywxLGVuZSxGYmMpO18ucGY9ZnVuY3Rpb24gSWJjKGEsYil7QmJjKHRoaXMsQkQoYSwzNyksYil9O18uZD0wO18uZT0wO18uaT0wO18uaj0wO18uaz0wO18ubj0wO3ZhciBiVD1tZGIoQW5lLCdOb2RlUHJvbW90aW9uJywxNTYzKTtiY2IoMTU2NCwxLHt9LEpiYyk7Xy5LYj1mdW5jdGlvbiBLYmMoYSl7cmV0dXJuIEJEKGEsNDYpLEJjYigpLHRydWV9O18uRmI9ZnVuY3Rpb24gTGJjKGEpe3JldHVybiB0aGlzPT09YX07dmFyICRTPW1kYihBbmUsJ05vZGVQcm9tb3Rpb24vbGFtYmRhJDAkVHlwZScsMTU2NCk7YmNiKDE1NjUsMSx7fSxNYmMpO18uS2I9ZnVuY3Rpb24gTmJjKGEpe3JldHVybiBHYmModGhpcy5hLEJEKGEsNDYpKX07Xy5GYj1mdW5jdGlvbiBPYmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLmE9MDt2YXIgX1M9bWRiKEFuZSwnTm9kZVByb21vdGlvbi9sYW1iZGEkMSRUeXBlJywxNTY1KTtiY2IoMTU2NiwxLHt9LFBiYyk7Xy5LYj1mdW5jdGlvbiBRYmMoYSl7cmV0dXJuIEhiYyh0aGlzLmEsQkQoYSw0NikpfTtfLkZiPWZ1bmN0aW9uIFJiYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uYT0wO3ZhciBhVD1tZGIoQW5lLCdOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUnLDE1NjYpO2JjYigxNTY3LDEsZW5lLFhiYyk7Xy5wZj1mdW5jdGlvbiBZYmMoYSxiKXtTYmMoQkQoYSwzNyksYil9O3ZhciBjVD1tZGIoQW5lLCdOb3J0aFNvdXRoUG9ydFBvc3Rwcm9jZXNzb3InLDE1NjcpO2JjYigxNTY4LDEsZW5lLGNjYyk7Xy5wZj1mdW5jdGlvbiBlY2MoYSxiKXthY2MoQkQoYSwzNyksYil9O3ZhciBlVD1tZGIoQW5lLCdOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3NvcicsMTU2OCk7YmNiKDE1NjksMSxEa2UsZmNjKTtfLnVlPWZ1bmN0aW9uIGdjYyhhLGIpe3JldHVybiBkY2MoQkQoYSwxMSksQkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIGhjYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gaWNjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBkVD1tZGIoQW5lLCdOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNTY5KTtiY2IoMTU3MCwxLGVuZSxsY2MpO18ucGY9ZnVuY3Rpb24gbmNjKGEsYil7a2NjKEJEKGEsMzcpLGIpfTt2YXIgaFQ9bWRiKEFuZSwnUGFydGl0aW9uTWlkcHJvY2Vzc29yJywxNTcwKTtiY2IoMTU3MSwxLE9pZSxvY2MpO18uTWI9ZnVuY3Rpb24gcGNjKGEpe3JldHVybiB3TmIoQkQoYSwxMCksKE55YygpLE54YykpfTt2YXIgZlQ9bWRiKEFuZSwnUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE1NzEpO2JjYigxNTcyLDEscWllLHFjYyk7Xy50ZD1mdW5jdGlvbiByY2MoYSl7bWNjKHRoaXMuYSxCRChhLDEwKSl9O3ZhciBnVD1tZGIoQW5lLCdQYXJ0aXRpb25NaWRwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTU3Mik7YmNiKDE1NzMsMSxlbmUsdGNjKTtfLnBmPWZ1bmN0aW9uIHVjYyhhLGIpe3NjYyhCRChhLDM3KSxiKX07dmFyIGlUPW1kYihBbmUsJ1BhcnRpdGlvblBvc3Rwcm9jZXNzb3InLDE1NzMpO2JjYigxNTc0LDEsZW5lLHljYyk7Xy5wZj1mdW5jdGlvbiB6Y2MoYSxiKXt3Y2MoQkQoYSwzNyksYil9O3ZhciBuVD1tZGIoQW5lLCdQYXJ0aXRpb25QcmVwcm9jZXNzb3InLDE1NzQpO2JjYigxNTc1LDEsT2llLEFjYyk7Xy5NYj1mdW5jdGlvbiBCY2MoYSl7cmV0dXJuIHdOYihCRChhLDEwKSwoTnljKCksTnhjKSl9O3ZhciBqVD1tZGIoQW5lLCdQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU3NSk7YmNiKDE1NzYsMSx7fSxDY2MpO18uS2I9ZnVuY3Rpb24gRGNjKGEpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEx1YihuZXcgU3IodXIoVV9iKEJEKGEsMTApKS5hLktjKCksbmV3IFNxKSkpKX07dmFyIGtUPW1kYihBbmUsJ1BhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlJywxNTc2KTtiY2IoMTU3NywxLE9pZSxFY2MpO18uTWI9ZnVuY3Rpb24gRmNjKGEpe3JldHVybiB2Y2MoQkQoYSwxNykpfTt2YXIgbFQ9bWRiKEFuZSwnUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE1NzcpO2JjYigxNTc4LDEscWllLEdjYyk7Xy50ZD1mdW5jdGlvbiBIY2MoYSl7eGNjKEJEKGEsMTcpKX07dmFyIG1UPW1kYihBbmUsJ1BhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlJywxNTc4KTtiY2IoMTU3OSwxLGVuZSxUY2MpO18ucGY9ZnVuY3Rpb24gWGNjKGEsYil7UWNjKEJEKGEsMzcpLGIpfTt2YXIgSWNjLEpjYyxLY2MsTGNjLE1jYyxOY2M7dmFyIHRUPW1kYihBbmUsJ1BvcnRMaXN0U29ydGVyJywxNTc5KTtiY2IoMTU4MCwxLHt9LFpjYyk7Xy5LYj1mdW5jdGlvbiAkY2MoYSl7cmV0dXJuIE9jYygpLEJEKGEsMTEpLmV9O3ZhciBvVD1tZGIoQW5lLCdQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlJywxNTgwKTtiY2IoMTU4MSwxLHt9LF9jYyk7Xy5LYj1mdW5jdGlvbiBhZGMoYSl7cmV0dXJuIE9jYygpLEJEKGEsMTEpLmd9O3ZhciBwVD1tZGIoQW5lLCdQb3J0TGlzdFNvcnRlci9sYW1iZGEkMSRUeXBlJywxNTgxKTtiY2IoMTU4MiwxLERrZSxiZGMpO18udWU9ZnVuY3Rpb24gY2RjKGEsYil7cmV0dXJuIFVjYyhCRChhLDExKSxCRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gZGRjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBlZGMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIHFUPW1kYihBbmUsJ1BvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUnLDE1ODIpO2JjYigxNTgzLDEsRGtlLGZkYyk7Xy51ZT1mdW5jdGlvbiBnZGMoYSxiKXtyZXR1cm4gVmNjKEJEKGEsMTEpLEJEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBoZGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGlkYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgclQ9bWRiKEFuZSwnUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDMkVHlwZScsMTU4Myk7YmNiKDE1ODQsMSxEa2UsamRjKTtfLnVlPWZ1bmN0aW9uIGtkYyhhLGIpe3JldHVybiBXY2MoQkQoYSwxMSksQkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIGxkYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gbWRjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBzVD1tZGIoQW5lLCdQb3J0TGlzdFNvcnRlci9sYW1iZGEkNCRUeXBlJywxNTg0KTtiY2IoMTU4NSwxLGVuZSxwZGMpO18ucGY9ZnVuY3Rpb24gcWRjKGEsYil7bmRjKEJEKGEsMzcpLGIpfTt2YXIgdVQ9bWRiKEFuZSwnUG9ydFNpZGVQcm9jZXNzb3InLDE1ODUpO2JjYigxNTg2LDEsZW5lLHNkYyk7Xy5wZj1mdW5jdGlvbiB0ZGMoYSxiKXtyZGMoQkQoYSwzNyksYil9O3ZhciB2VD1tZGIoQW5lLCdSZXZlcnNlZEVkZ2VSZXN0b3JlcicsMTU4Nik7YmNiKDE1OTEsMSxlbmUsd2RjKTtfLnBmPWZ1bmN0aW9uIHhkYyhhLGIpe3VkYyh0aGlzLEJEKGEsMzcpLGIpfTt2YXIgQ1Q9bWRiKEFuZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXInLDE1OTEpO2JjYigxNTkyLDEse30seWRjKTtfLktiPWZ1bmN0aW9uIHpkYyhhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgd1Q9bWRiKEFuZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZScsMTU5Mik7YmNiKDE1OTMsMSxPaWUsQWRjKTtfLk1iPWZ1bmN0aW9uIEJkYyhhKXtyZXR1cm4gQkQoYSwxMCkuaz09KGowYigpLGgwYil9O3ZhciB4VD1tZGIoQW5lLCdTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlJywxNTkzKTtiY2IoMTU5NCwxLE9pZSxDZGMpO18uTWI9ZnVuY3Rpb24gRGRjKGEpe3JldHVybiB3TmIoQkQoYSwxMCksKHd0YygpLG50YykpfTt2YXIgeVQ9bWRiKEFuZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZScsMTU5NCk7YmNiKDE1OTUsMSx7fSxFZGMpO18uS2I9ZnVuY3Rpb24gRmRjKGEpe3JldHVybiBCRCh2TmIoQkQoYSwxMCksKHd0YygpLG50YykpLDQwMyl9O3ZhciB6VD1tZGIoQW5lLCdTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlJywxNTk1KTtiY2IoMTU5NiwxLHFpZSxHZGMpO18udGQ9ZnVuY3Rpb24gSGRjKGEpe3ZkYyh0aGlzLmEsQkQoYSw0MDMpKX07dmFyIEFUPW1kYihBbmUsJ1NlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUnLDE1OTYpO2JjYig3OTQsMSxxaWUsSWRjKTtfLnRkPWZ1bmN0aW9uIEpkYyhhKXtsamMoQkQoYSwxMDEpKX07dmFyIEJUPW1kYihBbmUsJ1NlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUnLDc5NCk7YmNiKDE1OTcsMSxlbmUsTmRjKTtfLnBmPWZ1bmN0aW9uIFBkYyhhLGIpe0tkYyhCRChhLDM3KSxiKX07dmFyIExUPW1kYihBbmUsJ1NlbGZMb29wUG9zdFByb2Nlc3NvcicsMTU5Nyk7YmNiKDE1OTgsMSx7fSxRZGMpO18uS2I9ZnVuY3Rpb24gUmRjKGEpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBEVD1tZGIoQW5lLCdTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU5OCk7YmNiKDE1OTksMSxPaWUsU2RjKTtfLk1iPWZ1bmN0aW9uIFRkYyhhKXtyZXR1cm4gQkQoYSwxMCkuaz09KGowYigpLGgwYil9O3ZhciBFVD1tZGIoQW5lLCdTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTU5OSk7YmNiKDE2MDAsMSxPaWUsVWRjKTtfLk1iPWZ1bmN0aW9uIFZkYyhhKXtyZXR1cm4gd05iKEJEKGEsMTApLCh3dGMoKSxudGMpKX07dmFyIEZUPW1kYihBbmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlJywxNjAwKTtiY2IoMTYwMSwxLHFpZSxXZGMpO18udGQ9ZnVuY3Rpb24gWGRjKGEpe0xkYyhCRChhLDEwKSl9O3ZhciBHVD1tZGIoQW5lLCdTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZScsMTYwMSk7YmNiKDE2MDIsMSx7fSxZZGMpO18uS2I9ZnVuY3Rpb24gWmRjKGEpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDEwMSkuZiwxKSl9O3ZhciBIVD1tZGIoQW5lLCdTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDQkVHlwZScsMTYwMik7YmNiKDE2MDMsMSxxaWUsJGRjKTtfLnRkPWZ1bmN0aW9uIF9kYyhhKXtNZGModGhpcy5hLEJEKGEsNDA5KSl9O3ZhciBJVD1tZGIoQW5lLCdTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZScsMTYwMyk7YmNiKDE2MDQsMSxPaWUsYWVjKTtfLk1iPWZ1bmN0aW9uIGJlYyhhKXtyZXR1cm4gISFCRChhLDEwMSkuaX07dmFyIEpUPW1kYihBbmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNiRUeXBlJywxNjA0KTtiY2IoMTYwNSwxLHFpZSxjZWMpO18udGQ9ZnVuY3Rpb24gZGVjKGEpe09kYyh0aGlzLmEsQkQoYSwxMDEpKX07dmFyIEtUPW1kYihBbmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlJywxNjA1KTtiY2IoMTU4NywxLGVuZSxoZWMpO18ucGY9ZnVuY3Rpb24gaWVjKGEsYil7Z2VjKEJEKGEsMzcpLGIpfTt2YXIgUFQ9bWRiKEFuZSwnU2VsZkxvb3BQcmVQcm9jZXNzb3InLDE1ODcpO2JjYigxNTg4LDEse30samVjKTtfLktiPWZ1bmN0aW9uIGtlYyhhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwxMDEpLmYsMSkpfTt2YXIgTVQ9bWRiKEFuZSwnU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU4OCk7YmNiKDE1ODksMSx7fSxsZWMpO18uS2I9ZnVuY3Rpb24gbWVjKGEpe3JldHVybiBCRChhLDQwOSkuYX07dmFyIE5UPW1kYihBbmUsJ1NlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1ODkpO2JjYigxNTkwLDEscWllLG5lYyk7Xy50ZD1mdW5jdGlvbiBvZWMoYSl7ZmVjKEJEKGEsMTcpKX07dmFyIE9UPW1kYihBbmUsJ1NlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE1OTApO2JjYigxNjA2LDEsZW5lLHNlYyk7Xy5wZj1mdW5jdGlvbiB0ZWMoYSxiKXtxZWModGhpcyxCRChhLDM3KSxiKX07dmFyIFZUPW1kYihBbmUsJ1NlbGZMb29wUm91dGVyJywxNjA2KTtiY2IoMTYwNywxLHt9LHVlYyk7Xy5LYj1mdW5jdGlvbiB2ZWMoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMjkpLmEsMTYpKX07dmFyIFFUPW1kYihBbmUsJ1NlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUnLDE2MDcpO2JjYigxNjA4LDEsT2llLHdlYyk7Xy5NYj1mdW5jdGlvbiB4ZWMoYSl7cmV0dXJuIEJEKGEsMTApLms9PShqMGIoKSxoMGIpfTt2YXIgUlQ9bWRiKEFuZSwnU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDEkVHlwZScsMTYwOCk7YmNiKDE2MDksMSxPaWUseWVjKTtfLk1iPWZ1bmN0aW9uIHplYyhhKXtyZXR1cm4gd05iKEJEKGEsMTApLCh3dGMoKSxudGMpKX07dmFyIFNUPW1kYihBbmUsJ1NlbGZMb29wUm91dGVyL2xhbWJkYSQyJFR5cGUnLDE2MDkpO2JjYigxNjEwLDEse30sQWVjKTtfLktiPWZ1bmN0aW9uIEJlYyhhKXtyZXR1cm4gQkQodk5iKEJEKGEsMTApLCh3dGMoKSxudGMpKSw0MDMpfTt2YXIgVFQ9bWRiKEFuZSwnU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDMkVHlwZScsMTYxMCk7YmNiKDE2MTEsMSxxaWUsQ2VjKTtfLnRkPWZ1bmN0aW9uIERlYyhhKXtwZWModGhpcy5hLHRoaXMuYixCRChhLDQwMykpfTt2YXIgVVQ9bWRiKEFuZSwnU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDQkVHlwZScsMTYxMSk7YmNiKDE2MTIsMSxlbmUsRmVjKTtfLnBmPWZ1bmN0aW9uIEllYyhhLGIpe0VlYyhCRChhLDM3KSxiKX07dmFyICRUPW1kYihBbmUsJ1NlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yJywxNjEyKTtiY2IoMTYxMywxLE9pZSxKZWMpO18uTWI9ZnVuY3Rpb24gS2VjKGEpe3JldHVybiBCRChhLDEwKS5rPT0oajBiKCksaDBiKX07dmFyIFdUPW1kYihBbmUsJ1NlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE2MTMpO2JjYigxNjE0LDEsT2llLExlYyk7Xy5NYj1mdW5jdGlvbiBNZWMoYSl7cmV0dXJuIHVOYihCRChhLDEwKSkuX2IoKE55YygpLGF5YykpfTt2YXIgWFQ9bWRiKEFuZSwnU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTYxNCk7YmNiKDE2MTUsMSxEa2UsTmVjKTtfLnVlPWZ1bmN0aW9uIE9lYyhhLGIpe3JldHVybiBHZWMoQkQoYSwxMCksQkQoYiwxMCkpfTtfLkZiPWZ1bmN0aW9uIFBlYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gUWVjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBZVD1tZGIoQW5lLCdTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlJywxNjE1KTtiY2IoMTYxNiwxLHt9LFJlYyk7Xy5DZT1mdW5jdGlvbiBTZWMoYSxiKXtyZXR1cm4gSGVjKEJEKGEsMTApLEJEKGIsMTApKX07dmFyIFpUPW1kYihBbmUsJ1NlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUnLDE2MTYpO2JjYigxNjE4LDEsZW5lLFVlYyk7Xy5wZj1mdW5jdGlvbiBZZWMoYSxiKXtUZWMoQkQoYSwzNyksYil9O3ZhciBiVT1tZGIoQW5lLCdTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yJywxNjE4KTtiY2IoMTYxOSwxLE9pZSxaZWMpO18uTWI9ZnVuY3Rpb24gJGVjKGEpe3JldHVybiBCRChhLDExKS5nLmMubGVuZ3RoIT0wfTt2YXIgX1Q9bWRiKEFuZSwnU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNjE5KTtiY2IoMTYyMCwxLHFpZSxfZWMpO18udGQ9ZnVuY3Rpb24gYWZjKGEpe1dlYyh0aGlzLmEsQkQoYSwxMSkpfTt2YXIgYVU9bWRiKEFuZSwnU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlJywxNjIwKTtiY2IoMTY5Myw4MDMse30samZjKTtfLk1lPWZ1bmN0aW9uIGtmYyhhKXt2YXIgYixjLGQsZTt0aGlzLmM9YTtzd2l0Y2godGhpcy5hLmcpe2Nhc2UgMjpiPW5ldyBSa2I7TUFiKEpBYihuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLmMuYS5iLDE2KSksbmV3IGxnYyksbmV3IG5nYyh0aGlzLGIpKTtuRWIodGhpcyxuZXcgdGZjKTtIa2IoYixuZXcgeGZjKTtiLmM9S0MoU0ksVWhlLDEsMCw1LDEpO01BYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIodGhpcy5jLmEuYiwxNikpLG5ldyB6ZmMpLG5ldyBCZmMoYikpO25FYih0aGlzLG5ldyBGZmMpO0hrYihiLG5ldyBKZmMpO2IuYz1LQyhTSSxVaGUsMSwwLDUsMSk7Yz1OdGIoJHpiKE9BYihuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLmMuYS5iLDE2KSksbmV3IExmYyh0aGlzKSkpLG5ldyBOZmMpO01BYihuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLmMuYS5hLDE2KSksbmV3IFJmYyhjLGIpKTtuRWIodGhpcyxuZXcgVmZjKTtIa2IoYixuZXcgWmZjKTtiLmM9S0MoU0ksVWhlLDEsMCw1LDEpO2JyZWFrO2Nhc2UgMzpkPW5ldyBSa2I7bkViKHRoaXMsbmV3IGxmYyk7ZT1OdGIoJHpiKE9BYihuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLmMuYS5iLDE2KSksbmV3IHBmYyh0aGlzKSkpLG5ldyBQZmMpO01BYihKQWIobmV3IFlBYihudWxsLG5ldyBLdWIodGhpcy5jLmEuYiwxNikpLG5ldyBfZmMpLG5ldyBiZ2MoZSxkKSk7bkViKHRoaXMsbmV3IGZnYyk7SGtiKGQsbmV3IGpnYyk7ZC5jPUtDKFNJLFVoZSwxLDAsNSwxKTticmVhaztkZWZhdWx0OnRocm93IHZiYihuZXcgeDJjKTt9fTtfLmI9MDt2YXIgQVU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24nLDE2OTMpO2JjYigxNjk0LDEsVmtlLGxmYyk7Xy5MYj1mdW5jdGlvbiBtZmMoYSl7cmV0dXJuIEpEKEJEKGEsNTcpLmcsMTQ1KX07Xy5GYj1mdW5jdGlvbiBuZmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIG9mYyhhKXtyZXR1cm4gSkQoQkQoYSw1NykuZywxNDUpfTt2YXIgY1U9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDAkVHlwZScsMTY5NCk7YmNiKDE2OTUsMSx7fSxwZmMpO18uRmU9ZnVuY3Rpb24gcWZjKGEpe3JldHVybiBkZmModGhpcy5hLEJEKGEsNTcpKX07dmFyIGRVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxJFR5cGUnLDE2OTUpO2JjYigxNzAzLDEsUGllLHJmYyk7Xy5WZD1mdW5jdGlvbiBzZmMoKXtjZmModGhpcy5hLHRoaXMuYiwtMSl9O18uYj0wO3ZhciBlVT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTAkVHlwZScsMTcwMyk7YmNiKDE3MDUsMSxWa2UsdGZjKTtfLkxiPWZ1bmN0aW9uIHVmYyhhKXtyZXR1cm4gSkQoQkQoYSw1NykuZywxNDUpfTtfLkZiPWZ1bmN0aW9uIHZmYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gd2ZjKGEpe3JldHVybiBKRChCRChhLDU3KS5nLDE0NSl9O3ZhciBmVT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTEkVHlwZScsMTcwNSk7YmNiKDE3MDYsMSxxaWUseGZjKTtfLnRkPWZ1bmN0aW9uIHlmYyhhKXtCRChhLDM2NSkuVmQoKX07dmFyIGdVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMiRUeXBlJywxNzA2KTtiY2IoMTcwNywxLE9pZSx6ZmMpO18uTWI9ZnVuY3Rpb24gQWZjKGEpe3JldHVybiBKRChCRChhLDU3KS5nLDEwKX07dmFyIGhVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMyRUeXBlJywxNzA3KTtiY2IoMTcwOSwxLHFpZSxCZmMpO18udGQ9ZnVuY3Rpb24gQ2ZjKGEpe2VmYyh0aGlzLmEsQkQoYSw1NykpfTt2YXIgaVU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE0JFR5cGUnLDE3MDkpO2JjYigxNzA4LDEsUGllLERmYyk7Xy5WZD1mdW5jdGlvbiBFZmMoKXtjZmModGhpcy5iLHRoaXMuYSwtMSl9O18uYT0wO3ZhciBqVT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTUkVHlwZScsMTcwOCk7YmNiKDE3MTAsMSxWa2UsRmZjKTtfLkxiPWZ1bmN0aW9uIEdmYyhhKXtyZXR1cm4gSkQoQkQoYSw1NykuZywxMCl9O18uRmI9ZnVuY3Rpb24gSGZjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBJZmMoYSl7cmV0dXJuIEpEKEJEKGEsNTcpLmcsMTApfTt2YXIga1U9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUnLDE3MTApO2JjYigxNzExLDEscWllLEpmYyk7Xy50ZD1mdW5jdGlvbiBLZmMoYSl7QkQoYSwzNjUpLlZkKCl9O3ZhciBsVT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTckVHlwZScsMTcxMSk7YmNiKDE3MTIsMSx7fSxMZmMpO18uRmU9ZnVuY3Rpb24gTWZjKGEpe3JldHVybiBmZmModGhpcy5hLEJEKGEsNTcpKX07dmFyIG1VPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOCRUeXBlJywxNzEyKTtiY2IoMTcxMywxLHt9LE5mYyk7Xy5EZT1mdW5jdGlvbiBPZmMoKXtyZXR1cm4gMH07dmFyIG5VPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOSRUeXBlJywxNzEzKTtiY2IoMTY5NiwxLHt9LFBmYyk7Xy5EZT1mdW5jdGlvbiBRZmMoKXtyZXR1cm4gMH07dmFyIG9VPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyJFR5cGUnLDE2OTYpO2JjYigxNzE1LDEscWllLFJmYyk7Xy50ZD1mdW5jdGlvbiBTZmMoYSl7Z2ZjKHRoaXMuYSx0aGlzLmIsQkQoYSwzMDcpKX07Xy5hPTA7dmFyIHBVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMCRUeXBlJywxNzE1KTtiY2IoMTcxNCwxLFBpZSxUZmMpO18uVmQ9ZnVuY3Rpb24gVWZjKCl7YmZjKHRoaXMuYSx0aGlzLmIsLTEpfTtfLmI9MDt2YXIgcVU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIxJFR5cGUnLDE3MTQpO2JjYigxNzE2LDEsVmtlLFZmYyk7Xy5MYj1mdW5jdGlvbiBXZmMoYSl7cmV0dXJuIEJEKGEsNTcpLHRydWV9O18uRmI9ZnVuY3Rpb24gWGZjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBZZmMoYSl7cmV0dXJuIEJEKGEsNTcpLHRydWV9O3ZhciByVT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjIkVHlwZScsMTcxNik7YmNiKDE3MTcsMSxxaWUsWmZjKTtfLnRkPWZ1bmN0aW9uICRmYyhhKXtCRChhLDM2NSkuVmQoKX07dmFyIHNVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMyRUeXBlJywxNzE3KTtiY2IoMTY5NywxLE9pZSxfZmMpO18uTWI9ZnVuY3Rpb24gYWdjKGEpe3JldHVybiBKRChCRChhLDU3KS5nLDEwKX07dmFyIHRVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUnLDE2OTcpO2JjYigxNjk5LDEscWllLGJnYyk7Xy50ZD1mdW5jdGlvbiBjZ2MoYSl7aGZjKHRoaXMuYSx0aGlzLmIsQkQoYSw1NykpfTtfLmE9MDt2YXIgdVU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZScsMTY5OSk7YmNiKDE2OTgsMSxQaWUsZGdjKTtfLlZkPWZ1bmN0aW9uIGVnYygpe2NmYyh0aGlzLmIsdGhpcy5hLC0xKX07Xy5hPTA7dmFyIHZVPW1kYihKbmUsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUnLDE2OTgpO2JjYigxNzAwLDEsVmtlLGZnYyk7Xy5MYj1mdW5jdGlvbiBnZ2MoYSl7cmV0dXJuIEJEKGEsNTcpLHRydWV9O18uRmI9ZnVuY3Rpb24gaGdjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBpZ2MoYSl7cmV0dXJuIEJEKGEsNTcpLHRydWV9O3ZhciB3VT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNiRUeXBlJywxNzAwKTtiY2IoMTcwMSwxLHFpZSxqZ2MpO18udGQ9ZnVuY3Rpb24ga2djKGEpe0JEKGEsMzY1KS5WZCgpfTt2YXIgeFU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDckVHlwZScsMTcwMSk7YmNiKDE3MDIsMSxPaWUsbGdjKTtfLk1iPWZ1bmN0aW9uIG1nYyhhKXtyZXR1cm4gSkQoQkQoYSw1NykuZywxNDUpfTt2YXIgeVU9bWRiKEpuZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZScsMTcwMik7YmNiKDE3MDQsMSxxaWUsbmdjKTtfLnRkPWZ1bmN0aW9uIG9nYyhhKXtpZmModGhpcy5hLHRoaXMuYixCRChhLDU3KSl9O3ZhciB6VT1tZGIoSm5lLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlJywxNzA0KTtiY2IoMTUyMSwxLGVuZSxzZ2MpO18ucGY9ZnVuY3Rpb24geGdjKGEsYil7cmdjKHRoaXMsQkQoYSwzNyksYil9O3ZhciBwZ2M7dmFyIEVVPW1kYihKbmUsJ0hvcml6b250YWxHcmFwaENvbXBhY3RvcicsMTUyMSk7YmNiKDE1MjIsMSx7fSx5Z2MpO18uT2U9ZnVuY3Rpb24gemdjKGEsYil7dmFyIGMsZCxlO2lmKHZnYyhhLGIpKXtyZXR1cm4gMH1jPXRnYyhhKTtkPXRnYyhiKTtpZighIWMmJmMuaz09KGowYigpLGUwYil8fCEhZCYmZC5rPT0oajBiKCksZTBiKSl7cmV0dXJuIDB9ZT1CRCh2TmIodGhpcy5hLmEsKHd0YygpLG90YykpLDMwNCk7cmV0dXJuIGZCYyhlLGM/Yy5rOihqMGIoKSxnMGIpLGQ/ZC5rOihqMGIoKSxnMGIpKX07Xy5QZT1mdW5jdGlvbiBBZ2MoYSxiKXt2YXIgYyxkLGU7aWYodmdjKGEsYikpe3JldHVybiAxfWM9dGdjKGEpO2Q9dGdjKGIpO2U9QkQodk5iKHRoaXMuYS5hLCh3dGMoKSxvdGMpKSwzMDQpO3JldHVybiBpQmMoZSxjP2MuazooajBiKCksZzBiKSxkP2QuazooajBiKCksZzBiKSl9O3ZhciBCVT1tZGIoSm5lLCdIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvMScsMTUyMik7YmNiKDE1MjMsMSx7fSxCZ2MpO18uTmU9ZnVuY3Rpb24gQ2djKGEsYil7cmV0dXJuIHFnYygpLGEuYS5pPT0wfTt2YXIgQ1U9bWRiKEpuZSwnSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUnLDE1MjMpO2JjYigxNTI0LDEse30sRGdjKTtfLk5lPWZ1bmN0aW9uIEVnYyhhLGIpe3JldHVybiB3Z2ModGhpcy5hLGEsYil9O3ZhciBEVT1tZGIoSm5lLCdIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZScsMTUyNCk7YmNiKDE2NjQsMSx7fSxZZ2MpO3ZhciBGZ2MsR2djO3ZhciBjVj1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyJywxNjY0KTtiY2IoMTY3MiwxLE9pZSxlaGMpO18uTWI9ZnVuY3Rpb24gZmhjKGEpe3JldHVybiBhIT1udWxsfTt2YXIgRlU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZScsMTY3Mik7YmNiKDE2NjUsMSx7fSxnaGMpO18uS2I9ZnVuY3Rpb24gaGhjKGEpe3JldHVybiBIZ2MoKSxmY2Iodk5iKEJEKEJEKGEsNTcpLmcsMTApLCh3dGMoKSwkc2MpKSl9O3ZhciBHVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQwJFR5cGUnLDE2NjUpO2JjYigxNjY2LDEse30saWhjKTtfLktiPWZ1bmN0aW9uIGpoYyhhKXtyZXR1cm4gSGdjKCksZ2ljKEJEKEJEKGEsNTcpLmcsMTQ1KSl9O3ZhciBIVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUnLDE2NjYpO2JjYigxNjc1LDEsT2llLGtoYyk7Xy5NYj1mdW5jdGlvbiBsaGMoYSl7cmV0dXJuIEhnYygpLEpEKEJEKGEsNTcpLmcsMTApfTt2YXIgSVU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTAkVHlwZScsMTY3NSk7YmNiKDE2NzYsMSxxaWUsbWhjKTtfLnRkPWZ1bmN0aW9uIG5oYyhhKXtaZ2MoQkQoYSw1NykpfTt2YXIgSlU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTEkVHlwZScsMTY3Nik7YmNiKDE2NzcsMSxPaWUsb2hjKTtfLk1iPWZ1bmN0aW9uIHBoYyhhKXtyZXR1cm4gSGdjKCksSkQoQkQoYSw1NykuZywxNDUpfTt2YXIgS1U9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTIkVHlwZScsMTY3Nyk7YmNiKDE2ODEsMSxxaWUscWhjKTtfLnRkPWZ1bmN0aW9uIHJoYyhhKXskZ2MoQkQoYSw1NykpfTt2YXIgTFU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZScsMTY4MSk7YmNiKDE2NzgsMSxxaWUsc2hjKTtfLnRkPWZ1bmN0aW9uIHRoYyhhKXtfZ2ModGhpcy5hLEJEKGEsOCkpfTtfLmE9MDt2YXIgTVU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTQkVHlwZScsMTY3OCk7YmNiKDE2NzksMSxxaWUsdWhjKTtfLnRkPWZ1bmN0aW9uIHZoYyhhKXthaGModGhpcy5hLEJEKGEsMTEwKSl9O18uYT0wO3ZhciBOVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNSRUeXBlJywxNjc5KTtiY2IoMTY4MCwxLHFpZSx3aGMpO18udGQ9ZnVuY3Rpb24geGhjKGEpe2JoYyh0aGlzLmEsQkQoYSw4KSl9O18uYT0wO3ZhciBPVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlJywxNjgwKTtiY2IoMTY4MiwxLHt9LHloYyk7Xy5LYj1mdW5jdGlvbiB6aGMoYSl7cmV0dXJuIEhnYygpLG5ldyBZQWIobnVsbCxuZXcgTHViKG5ldyBTcih1cihVX2IoQkQoYSwxMCkpLmEuS2MoKSxuZXcgU3EpKSkpfTt2YXIgUFU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTckVHlwZScsMTY4Mik7YmNiKDE2ODMsMSxPaWUsQWhjKTtfLk1iPWZ1bmN0aW9uIEJoYyhhKXtyZXR1cm4gSGdjKCksT1piKEJEKGEsMTcpKX07dmFyIFFVPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUnLDE2ODMpO2JjYigxNjg0LDEscWllLENoYyk7Xy50ZD1mdW5jdGlvbiBEaGMoYSl7UWdjKHRoaXMuYSxCRChhLDE3KSl9O3ZhciBSVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlJywxNjg0KTtiY2IoMTY2OCwxLHFpZSxFaGMpO18udGQ9ZnVuY3Rpb24gRmhjKGEpe1JnYyh0aGlzLmEsQkQoYSwxNDUpKX07dmFyIFNVPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZScsMTY2OCk7YmNiKDE2ODUsMSx7fSxHaGMpO18uS2I9ZnVuY3Rpb24gSGhjKGEpe3JldHVybiBIZ2MoKSxuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBUVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMCRUeXBlJywxNjg1KTtiY2IoMTY4NiwxLHt9LEloYyk7Xy5LYj1mdW5jdGlvbiBKaGMoYSl7cmV0dXJuIEhnYygpLG5ldyBZQWIobnVsbCxuZXcgTHViKG5ldyBTcih1cihVX2IoQkQoYSwxMCkpLmEuS2MoKSxuZXcgU3EpKSkpfTt2YXIgVVU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjEkVHlwZScsMTY4Nik7YmNiKDE2ODcsMSx7fSxLaGMpO18uS2I9ZnVuY3Rpb24gTGhjKGEpe3JldHVybiBIZ2MoKSxCRCh2TmIoQkQoYSwxNyksKHd0YygpLHJ0YykpLDE1KX07dmFyIFZVPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIyJFR5cGUnLDE2ODcpO2JjYigxNjg4LDEsT2llLE1oYyk7Xy5NYj1mdW5jdGlvbiBOaGMoYSl7cmV0dXJuIGNoYyhCRChhLDE1KSl9O3ZhciBXVT1tZGIoSm5lLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMyRUeXBlJywxNjg4KTtiY2IoMTY4OSwxLHFpZSxPaGMpO18udGQ9ZnVuY3Rpb24gUGhjKGEpe0pnYyh0aGlzLmEsQkQoYSwxNSkpfTt2YXIgWFU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjQkVHlwZScsMTY4OSk7YmNiKDE2NjcsMSxxaWUsUWhjKTtfLnRkPWZ1bmN0aW9uIFJoYyhhKXtTZ2ModGhpcy5hLHRoaXMuYixCRChhLDE0NSkpfTt2YXIgWVU9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMyRUeXBlJywxNjY3KTtiY2IoMTY2OSwxLHt9LFNoYyk7Xy5LYj1mdW5jdGlvbiBUaGMoYSl7cmV0dXJuIEhnYygpLG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMjkpLmEsMTYpKX07dmFyIFpVPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDQkVHlwZScsMTY2OSk7YmNiKDE2NzAsMSx7fSxVaGMpO18uS2I9ZnVuY3Rpb24gVmhjKGEpe3JldHVybiBIZ2MoKSxuZXcgWUFiKG51bGwsbmV3IEx1YihuZXcgU3IodXIoVV9iKEJEKGEsMTApKS5hLktjKCksbmV3IFNxKSkpKX07dmFyICRVPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDUkVHlwZScsMTY3MCk7YmNiKDE2NzEsMSx7fSxXaGMpO18uS2I9ZnVuY3Rpb24gWGhjKGEpe3JldHVybiBIZ2MoKSxCRCh2TmIoQkQoYSwxNyksKHd0YygpLHJ0YykpLDE1KX07dmFyIF9VPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDYkVHlwZScsMTY3MSk7YmNiKDE2NzMsMSxxaWUsWWhjKTtfLnRkPWZ1bmN0aW9uIFpoYyhhKXtkaGModGhpcy5hLEJEKGEsMTUpKX07dmFyIGFWPW1kYihKbmUsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDgkVHlwZScsMTY3Myk7YmNiKDE2NzQsMSxxaWUsJGhjKTtfLnRkPWZ1bmN0aW9uIF9oYyhhKXtUZ2ModGhpcy5hLHRoaXMuYixCRChhLDE0NSkpfTt2YXIgYlY9bWRiKEpuZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOSRUeXBlJywxNjc0KTtiY2IoMTY2MywxLHt9LGRpYyk7Xy5MZT1mdW5jdGlvbiBlaWMoYSl7dmFyIGIsYyxkLGUsZjt0aGlzLmE9YTt0aGlzLmQ9bmV3IEtGYjt0aGlzLmM9S0Moak4sVWhlLDEyMSx0aGlzLmEuYS5hLmMubGVuZ3RoLDAsMSk7dGhpcy5iPTA7Zm9yKGM9bmV3IG9sYih0aGlzLmEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1CRChtbGIoYyksMzA3KTtiLmQ9dGhpcy5iO2Y9bkdiKG9HYihuZXcgcEdiLGIpLHRoaXMuZCk7dGhpcy5jW3RoaXMuYl09ZjsrK3RoaXMuYn1jaWModGhpcyk7YmljKHRoaXMpO2FpYyh0aGlzKTt1R2IoTEdiKHRoaXMuZCksbmV3IFpkZCk7Zm9yKGU9bmV3IG9sYih0aGlzLmEuYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksNTcpO2QuZC5jPXRoaXMuY1tkLmEuZF0uZStkLmIuYX19O18uYj0wO3ZhciBkVj1tZGIoSm5lLCdOZXR3b3JrU2ltcGxleENvbXBhY3Rpb24nLDE2NjMpO2JjYigxNDUsMSx7MzU6MSwxNDU6MX0saGljKTtfLndkPWZ1bmN0aW9uIGlpYyhhKXtyZXR1cm4gZmljKHRoaXMsQkQoYSwxNDUpKX07Xy5JYj1mdW5jdGlvbiBqaWMoKXtyZXR1cm4gZ2ljKHRoaXMpfTt2YXIgZVY9bWRiKEpuZSwnVmVydGljYWxTZWdtZW50JywxNDUpO2JjYig4MjcsMSx7fSxzaWMpO18uYz0wO18uZT0wO18uaT0wO3ZhciBoVj1tZGIoS25lLCdCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXInLDgyNyk7YmNiKDY2MywxLHs2NjM6MX0semljKTtfLkliPWZ1bmN0aW9uIEFpYygpe3JldHVybiAnQWRqYWNlbmN5TGlzdCBbbm9kZT0nK3RoaXMuZCsnLCBhZGphY2VuY2llcz0gJyt0aGlzLmErJ10nfTtfLmI9MDtfLmM9MDtfLmY9MDt2YXIgZ1Y9bWRiKEtuZSwnQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QnLDY2Myk7YmNiKDI4NywxLHszNToxLDI4NzoxfSxEaWMpO18ud2Q9ZnVuY3Rpb24gRWljKGEpe3JldHVybiBCaWModGhpcyxCRChhLDI4NykpfTtfLkliPWZ1bmN0aW9uIEZpYygpe3JldHVybiAnQWRqYWNlbmN5IFtwb3NpdGlvbj0nK3RoaXMuYysnLCBjYXJkaW5hbGl0eT0nK3RoaXMuYSsnLCBjdXJyZW50Q2FyZGluYWxpdHk9Jyt0aGlzLmIrJ10nfTtfLmE9MDtfLmI9MDtfLmM9MDt2YXIgZlY9bWRiKEtuZSwnQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5JywyODcpO2JjYigxOTI5LDEse30sSWljKTtfLmI9MDtfLmU9ZmFsc2U7dmFyIGlWPW1kYihLbmUsJ0Nyb3NzaW5nTWF0cml4RmlsbGVyJywxOTI5KTt2YXIgcVk9b2RiKExuZSwnSUluaXRpYWxpemFibGUnKTtiY2IoMTgwNCwxLE1uZSxPaWMpO18uTmY9ZnVuY3Rpb24gUmljKGEsYixjLGQsZSxmKXt9O18uUGY9ZnVuY3Rpb24gVGljKGEsYixjKXt9O18uTGY9ZnVuY3Rpb24gUGljKCl7cmV0dXJuIHRoaXMuYyE9KHJHYygpLHBHYyl9O18uTWY9ZnVuY3Rpb24gUWljKCl7dGhpcy5lPUtDKFdELG9qZSwyNSx0aGlzLmQsMTUsMSl9O18uT2Y9ZnVuY3Rpb24gU2ljKGEsYil7YlthXVswXS5jLnA9YX07Xy5RZj1mdW5jdGlvbiBVaWMoYSxiLGMsZCl7Kyt0aGlzLmR9O18uUmY9ZnVuY3Rpb24gVmljKCl7cmV0dXJuIHRydWV9O18uU2Y9ZnVuY3Rpb24gV2ljKGEsYixjLGQpe0tpYyh0aGlzLGEsYixjKTtyZXR1cm4gSmljKHRoaXMsYil9O18uVGY9ZnVuY3Rpb24gWGljKGEsYil7dmFyIGM7Yz1MaWMoYixhLmxlbmd0aCk7S2ljKHRoaXMsYSxjLGIpO3JldHVybiBNaWModGhpcyxjKX07Xy5kPTA7dmFyIGpWPW1kYihLbmUsJ0dyZWVkeVN3aXRjaEhldXJpc3RpYycsMTgwNCk7YmNiKDE5MzAsMSx7fSxlamMpO18uYj0wO18uZD0wO3ZhciBrVj1tZGIoS25lLCdOb3J0aFNvdXRoRWRnZU5laWdoYm91cmluZ05vZGVDcm9zc2luZ3NDb3VudGVyJywxOTMwKTtiY2IoMTkxNywxLHt9LGpqYyk7Xy5hPWZhbHNlO3ZhciBsVj1tZGIoS25lLCdTd2l0Y2hEZWNpZGVyJywxOTE3KTtiY2IoMTAxLDEsezEwMToxfSxwamMpO18uYT1udWxsO18uYz1udWxsO18uaT1udWxsO3ZhciBvVj1tZGIoTm5lLCdTZWxmSHlwZXJMb29wJywxMDEpO2JjYigxOTE2LDEse30sdmpjKTtfLmM9MDtfLmU9MDt2YXIgblY9bWRiKE5uZSwnU2VsZkh5cGVyTG9vcExhYmVscycsMTkxNik7YmNiKDQxMSwyMix7MzoxLDM1OjEsMjI6MSw0MTE6MX0sQmpjKTt2YXIgd2pjLHhqYyx5amMsempjO3ZhciBtVj1uZGIoTm5lLCdTZWxmSHlwZXJMb29wTGFiZWxzL0FsaWdubWVudCcsNDExLENJLERqYyxDamMpO3ZhciBFamM7YmNiKDQwOSwxLHs0MDk6MX0sR2pjKTt2YXIgcFY9bWRiKE5uZSwnU2VsZkxvb3BFZGdlJyw0MDkpO2JjYig0MDMsMSx7NDAzOjF9LEtqYyk7Xy5hPWZhbHNlO3ZhciByVj1tZGIoTm5lLCdTZWxmTG9vcEhvbGRlcicsNDAzKTtiY2IoMTcyNCwxLE9pZSxNamMpO18uTWI9ZnVuY3Rpb24gTmpjKGEpe3JldHVybiBPWmIoQkQoYSwxNykpfTt2YXIgcVY9bWRiKE5uZSwnU2VsZkxvb3BIb2xkZXIvbGFtYmRhJDAkVHlwZScsMTcyNCk7YmNiKDExMywxLHsxMTM6MX0sUGpjKTtfLmE9ZmFsc2U7Xy5jPWZhbHNlO3ZhciB0Vj1tZGIoTm5lLCdTZWxmTG9vcFBvcnQnLDExMyk7YmNiKDE3OTIsMSxPaWUsUWpjKTtfLk1iPWZ1bmN0aW9uIFJqYyhhKXtyZXR1cm4gT1piKEJEKGEsMTcpKX07dmFyIHNWPW1kYihObmUsJ1NlbGZMb29wUG9ydC9sYW1iZGEkMCRUeXBlJywxNzkyKTtiY2IoMzYzLDIyLHszOjEsMzU6MSwyMjoxLDM2MzoxfSxZamMpO3ZhciBTamMsVGpjLFVqYyxWamMsV2pjO3ZhciB1Vj1uZGIoTm5lLCdTZWxmTG9vcFR5cGUnLDM2MyxDSSxfamMsJGpjKTt2YXIgYWtjO2JjYigxNzMyLDEse30seGtjKTt2YXIgY2tjLGRrYyxla2MsZmtjO3ZhciBKVj1tZGIoT25lLCdQb3J0UmVzdG9yZXInLDE3MzIpO2JjYigzNjEsMjIsezM6MSwzNToxLDIyOjEsMzYxOjF9LEdrYyk7dmFyIENrYyxEa2MsRWtjO3ZhciB2Vj1uZGIoT25lLCdQb3J0UmVzdG9yZXIvUG9ydFNpZGVBcmVhJywzNjEsQ0ksSWtjLEhrYyk7dmFyIEprYztiY2IoMTczMywxLHt9LExrYyk7Xy5LYj1mdW5jdGlvbiBNa2MoYSl7cmV0dXJuIGdrYygpLEJEKGEsMTUpLk9jKCl9O3ZhciB3Vj1tZGIoT25lLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZScsMTczMyk7YmNiKDE3MzQsMSxxaWUsTmtjKTtfLnRkPWZ1bmN0aW9uIE9rYyhhKXtna2MoKTtCRChhLDExMykuYz1mYWxzZX07dmFyIHhWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlJywxNzM0KTtiY2IoMTc0MywxLE9pZSxQa2MpO18uTWI9ZnVuY3Rpb24gUWtjKGEpe3JldHVybiBna2MoKSxCRChhLDExKS5qPT0oVWNkKCksVGNkKX07dmFyIHlWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZScsMTc0Myk7YmNiKDE3NDQsMSx7fSxSa2MpO18uS2I9ZnVuY3Rpb24gU2tjKGEpe3JldHVybiBna2MoKSxCRChhLDExMykuZH07dmFyIHpWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkMTEkVHlwZScsMTc0NCk7YmNiKDE3NDUsMSxxaWUsVGtjKTtfLnRkPWZ1bmN0aW9uIFVrYyhhKXt5a2ModGhpcy5hLEJEKGEsMTEpKX07dmFyIEFWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkMTIkVHlwZScsMTc0NSk7YmNiKDE3MzUsMSxxaWUsVmtjKTtfLnRkPWZ1bmN0aW9uIFdrYyhhKXt6a2ModGhpcy5hLEJEKGEsMTAxKSl9O3ZhciBCVj1tZGIoT25lLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZScsMTczNSk7YmNiKDE3MzYsMSxEa2UsWGtjKTtfLnVlPWZ1bmN0aW9uIFlrYyhhLGIpe3JldHVybiBBa2MoQkQoYSwxMTMpLEJEKGIsMTEzKSl9O18uRmI9ZnVuY3Rpb24gWmtjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiAka2MoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIENWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlJywxNzM2KTtiY2IoMTczNywxLE9pZSxfa2MpO18uTWI9ZnVuY3Rpb24gYWxjKGEpe3JldHVybiBna2MoKSxCRChhLDExMykuY307dmFyIERWPW1kYihPbmUsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkNCRUeXBlJywxNzM3KTtiY2IoMTczOCwxLE9pZSxibGMpO18uTWI9ZnVuY3Rpb24gY2xjKGEpe3JldHVybiBua2MoQkQoYSwxMSkpfTt2YXIgRVY9bWRiKE9uZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUnLDE3MzgpO2JjYigxNzM5LDEsT2llLGRsYyk7Xy5NYj1mdW5jdGlvbiBlbGMoYSl7cmV0dXJuIGdrYygpLEJEKGEsMTEpLmo9PShVY2QoKSxBY2QpfTt2YXIgRlY9bWRiKE9uZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUnLDE3MzkpO2JjYigxNzQwLDEsT2llLGZsYyk7Xy5NYj1mdW5jdGlvbiBnbGMoYSl7cmV0dXJuIGdrYygpLEJEKGEsMTEpLmo9PShVY2QoKSx6Y2QpfTt2YXIgR1Y9bWRiKE9uZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQ3JFR5cGUnLDE3NDApO2JjYigxNzQxLDEsT2llLGhsYyk7Xy5NYj1mdW5jdGlvbiBpbGMoYSl7cmV0dXJuIG9rYyhCRChhLDExKSl9O3ZhciBIVj1tZGIoT25lLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDgkVHlwZScsMTc0MSk7YmNiKDE3NDIsMSxPaWUsamxjKTtfLk1iPWZ1bmN0aW9uIGtsYyhhKXtyZXR1cm4gZ2tjKCksQkQoYSwxMSkuaj09KFVjZCgpLFJjZCl9O3ZhciBJVj1tZGIoT25lLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZScsMTc0Mik7YmNiKDI3MCwyMix7MzoxLDM1OjEsMjI6MSwyNzA6MX0sQmxjKTt2YXIgc2xjLHRsYyx1bGMsdmxjLHdsYyx4bGMseWxjLHpsYzt2YXIgS1Y9bmRiKE9uZSwnUG9ydFNpZGVBc3NpZ25lci9UYXJnZXQnLDI3MCxDSSxEbGMsQ2xjKTt2YXIgRWxjO2JjYigxNzI1LDEse30sR2xjKTtfLktiPWZ1bmN0aW9uIEhsYyhhKXtyZXR1cm4gSkFiKG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMTAxKS5qLDE2KSksbmV3IFlsYyl9O3ZhciBMVj1tZGIoT25lLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQxJFR5cGUnLDE3MjUpO2JjYigxNzI2LDEse30sSWxjKTtfLktiPWZ1bmN0aW9uIEpsYyhhKXtyZXR1cm4gQkQoYSwxMTMpLmR9O3ZhciBNVj1tZGIoT25lLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQyJFR5cGUnLDE3MjYpO2JjYigxNzI3LDEscWllLEtsYyk7Xy50ZD1mdW5jdGlvbiBMbGMoYSl7RzBiKEJEKGEsMTEpLChVY2QoKSxBY2QpKX07dmFyIE5WPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDMkVHlwZScsMTcyNyk7YmNiKDE3MjgsMSx7fSxNbGMpO18uS2I9ZnVuY3Rpb24gTmxjKGEpe3JldHVybiBCRChhLDExMykuZH07dmFyIE9WPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZScsMTcyOCk7YmNiKDE3MjksMSxxaWUsT2xjKTtfLnRkPWZ1bmN0aW9uIFBsYyhhKXtwbGModGhpcy5hLEJEKGEsMTEpKX07dmFyIFBWPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZScsMTcyOSk7YmNiKDE3MzAsMSxEa2UsUWxjKTtfLnVlPWZ1bmN0aW9uIFJsYyhhLGIpe3JldHVybiBxbGMoQkQoYSwxMDEpLEJEKGIsMTAxKSl9O18uRmI9ZnVuY3Rpb24gU2xjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBUbGMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFFWPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDYkVHlwZScsMTczMCk7YmNiKDE3MzEsMSxEa2UsVWxjKTtfLnVlPWZ1bmN0aW9uIFZsYyhhLGIpe3JldHVybiBybGMoQkQoYSwxMTMpLEJEKGIsMTEzKSl9O18uRmI9ZnVuY3Rpb24gV2xjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBYbGMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFJWPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDckVHlwZScsMTczMSk7YmNiKDgwNSwxLE9pZSxZbGMpO18uTWI9ZnVuY3Rpb24gWmxjKGEpe3JldHVybiBCRChhLDExMykuY307dmFyIFNWPW1kYihPbmUsJ1BvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDgkVHlwZScsODA1KTtiY2IoMjAwOSwxLHt9KTt2YXIgVFY9bWRiKFBuZSwnQWJzdHJhY3RTZWxmTG9vcFJvdXRlcicsMjAwOSk7YmNiKDE3NTAsMSxEa2UsZ21jKTtfLnVlPWZ1bmN0aW9uIGhtYyhhLGIpe3JldHVybiBlbWMoQkQoYSwxMDEpLEJEKGIsMTAxKSl9O18uRmI9ZnVuY3Rpb24gaW1jKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBqbWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFVWPW1kYihQbmUscmxlLDE3NTApO2JjYigxNzUxLDEsRGtlLGttYyk7Xy51ZT1mdW5jdGlvbiBsbWMoYSxiKXtyZXR1cm4gZm1jKEJEKGEsMTAxKSxCRChiLDEwMSkpfTtfLkZiPWZ1bmN0aW9uIG1tYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gbm1jKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBWVj1tZGIoUG5lLHNsZSwxNzUxKTtiY2IoMTc5MywyMDA5LHt9LHptYyk7Xy5VZj1mdW5jdGlvbiBBbWMoYSxiLGMpe3JldHVybiBjfTt2YXIgWFY9bWRiKFBuZSwnT3J0aG9nb25hbFNlbGZMb29wUm91dGVyJywxNzkzKTtiY2IoMTc5NSwxLHFpZSxCbWMpO18udGQ9ZnVuY3Rpb24gQ21jKGEpe3ltYyh0aGlzLmIsdGhpcy5hLEJEKGEsOCkpfTt2YXIgV1Y9bWRiKFBuZSwnT3J0aG9nb25hbFNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUnLDE3OTUpO2JjYigxNzk0LDE3OTMse30sRm1jKTtfLlVmPWZ1bmN0aW9uIEdtYyhhLGIsYyl7dmFyIGQsZTtkPWEuYy5kO1N0KGMsMCxQNmMoUjZjKGQubiksZC5hKSk7ZT1hLmQuZDtEc2IoYyxQNmMoUjZjKGUubiksZS5hKSk7cmV0dXJuIERtYyhjKX07dmFyIFlWPW1kYihQbmUsJ1BvbHlsaW5lU2VsZkxvb3BSb3V0ZXInLDE3OTQpO2JjYigxNzQ2LDEse30sVW1jKTtfLmE9bnVsbDt2YXIgSG1jO3ZhciBhVz1tZGIoUG5lLCdSb3V0aW5nRGlyZWN0b3InLDE3NDYpO2JjYigxNzQ3LDEsRGtlLFdtYyk7Xy51ZT1mdW5jdGlvbiBYbWMoYSxiKXtyZXR1cm4gVm1jKEJEKGEsMTEzKSxCRChiLDExMykpfTtfLkZiPWZ1bmN0aW9uIFltYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gWm1jKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBaVj1tZGIoUG5lLCdSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDAkVHlwZScsMTc0Nyk7YmNiKDE3NDgsMSx7fSwkbWMpO18uS2I9ZnVuY3Rpb24gX21jKGEpe3JldHVybiBJbWMoKSxCRChhLDEwMSkuan07dmFyICRWPW1kYihQbmUsJ1JvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMSRUeXBlJywxNzQ4KTtiY2IoMTc0OSwxLHFpZSxhbmMpO18udGQ9ZnVuY3Rpb24gYm5jKGEpe0ltYygpO0JEKGEsMTUpLmFkKEhtYyl9O3ZhciBfVj1tZGIoUG5lLCdSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDIkVHlwZScsMTc0OSk7YmNiKDE3NTIsMSx7fSxtbmMpO3ZhciBkVz1tZGIoUG5lLCdSb3V0aW5nU2xvdEFzc2lnbmVyJywxNzUyKTtiY2IoMTc1MywxLE9pZSxwbmMpO18uTWI9ZnVuY3Rpb24gcW5jKGEpe3JldHVybiBubmModGhpcy5hLEJEKGEsMTAxKSl9O3ZhciBiVz1tZGIoUG5lLCdSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUnLDE3NTMpO2JjYigxNzU0LDEsRGtlLHJuYyk7Xy51ZT1mdW5jdGlvbiBzbmMoYSxiKXtyZXR1cm4gb25jKHRoaXMuYSxCRChhLDEwMSksQkQoYiwxMDEpKX07Xy5GYj1mdW5jdGlvbiB0bmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHVuYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgY1c9bWRiKFBuZSwnUm91dGluZ1Nsb3RBc3NpZ25lci9sYW1iZGEkMSRUeXBlJywxNzU0KTtiY2IoMTc5NiwxNzkzLHt9LHduYyk7Xy5VZj1mdW5jdGlvbiB4bmMoYSxiLGMpe3ZhciBkLGUsZixnO2Q9RWRiKEVEKGNfYihhLmIuZy5iLChOeWMoKSxueWMpKSkpO2c9bmV3IHU3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFsoZj1hLmMuZCxQNmMobmV3IGc3YyhmLm4pLGYuYSkpXSkpO3ZuYyhhLGIsYyxnLGQpO0RzYihnLChlPWEuZC5kLFA2YyhuZXcgZzdjKGUubiksZS5hKSkpO3JldHVybiBVUGMobmV3IFlQYyhnKSl9O3ZhciBlVz1tZGIoUG5lLCdTcGxpbmVTZWxmTG9vcFJvdXRlcicsMTc5Nik7YmNiKDU3OCwxLERrZSxCbmMsRG5jKTtfLnVlPWZ1bmN0aW9uIEVuYyhhLGIpe3JldHVybiB5bmModGhpcyxCRChhLDEwKSxCRChiLDEwKSl9O18uRmI9ZnVuY3Rpb24gRm5jKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBHbmMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIGtXPW1kYihRbmUsJ01vZGVsT3JkZXJOb2RlQ29tcGFyYXRvcicsNTc4KTtiY2IoMTc1NSwxLE9pZSxIbmMpO18uTWI9ZnVuY3Rpb24gSW5jKGEpe3JldHVybiBCRChhLDExKS5lLmMubGVuZ3RoIT0wfTt2YXIgZlc9bWRiKFFuZSwnTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUnLDE3NTUpO2JjYigxNzU2LDEse30sSm5jKTtfLktiPWZ1bmN0aW9uIEtuYyhhKXtyZXR1cm4gQkQoSWtiKEJEKGEsMTEpLmUsMCksMTcpLmN9O3ZhciBnVz1tZGIoUW5lLCdNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDEkVHlwZScsMTc1Nik7YmNiKDE3NTcsMSxPaWUsTG5jKTtfLk1iPWZ1bmN0aW9uIE1uYyhhKXtyZXR1cm4gQkQoYSwxMSkuZS5jLmxlbmd0aCE9MH07dmFyIGhXPW1kYihRbmUsJ01vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMiRUeXBlJywxNzU3KTtiY2IoMTc1OCwxLHt9LE5uYyk7Xy5LYj1mdW5jdGlvbiBPbmMoYSl7cmV0dXJuIEJEKElrYihCRChhLDExKS5lLDApLDE3KS5jfTt2YXIgaVc9bWRiKFFuZSwnTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQzJFR5cGUnLDE3NTgpO2JjYigxNzU5LDEsT2llLFBuYyk7Xy5NYj1mdW5jdGlvbiBRbmMoYSl7cmV0dXJuIEJEKGEsMTEpLmUuYy5sZW5ndGghPTB9O3ZhciBqVz1tZGIoUW5lLCdNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDQkVHlwZScsMTc1OSk7YmNiKDgwNiwxLERrZSxUbmMsVW5jKTtfLnVlPWZ1bmN0aW9uIFZuYyhhLGIpe3JldHVybiBSbmModGhpcyxhLGIpfTtfLkZiPWZ1bmN0aW9uIFduYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gWG5jKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBsVz1tZGIoUW5lLCdNb2RlbE9yZGVyUG9ydENvbXBhcmF0b3InLDgwNik7YmNiKDgwMSwxLHt9LFluYyk7Xy5WZj1mdW5jdGlvbiAkbmMoYSxiKXt2YXIgYyxkLGUsZjtlPVpuYyhiKTtjPW5ldyBSa2I7Zj1iLmYvZTtmb3IoZD0xO2Q8ZTsrK2Qpe0VrYihjLG1lYihUYmIoQ2JiKCR3bmQuTWF0aC5yb3VuZChkKmYpKSkpKX1yZXR1cm4gY307Xy5XZj1mdW5jdGlvbiBfbmMoKXtyZXR1cm4gZmFsc2V9O3ZhciBtVz1tZGIoUm5lLCdBUkRDdXRJbmRleEhldXJpc3RpYycsODAxKTtiY2IoMTQ3OSwxLGVuZSxlb2MpO18ucGY9ZnVuY3Rpb24gZm9jKGEsYil7ZG9jKEJEKGEsMzcpLGIpfTt2YXIgcFc9bWRiKFJuZSwnQnJlYWtpbmdQb2ludEluc2VydGVyJywxNDc5KTtiY2IoMzA1LDEsezMwNToxfSxnb2MpO18uSWI9ZnVuY3Rpb24gam9jKCl7dmFyIGE7YT1uZXcgVWZiO2EuYSs9J0JQSW5mb1snO2EuYSs9J1xcblxcdHN0YXJ0PSc7UGZiKGEsdGhpcy5pKTthLmErPSdcXG5cXHRlbmQ9JztQZmIoYSx0aGlzLmEpO2EuYSs9J1xcblxcdG5vZGVTdGFydEVkZ2U9JztQZmIoYSx0aGlzLmUpO2EuYSs9J1xcblxcdHN0YXJ0RW5kRWRnZT0nO1BmYihhLHRoaXMuaik7YS5hKz0nXFxuXFx0b3JpZ2luYWxFZGdlPSc7UGZiKGEsdGhpcy5mKTthLmErPSdcXG5cXHRzdGFydEluTGF5ZXJEdW1teT0nO1BmYihhLHRoaXMuayk7YS5hKz0nXFxuXFx0c3RhcnRJbkxheWVyRWRnZT0nO1BmYihhLHRoaXMubik7YS5hKz0nXFxuXFx0ZW5kSW5MYXllckR1bW15PSc7UGZiKGEsdGhpcy5iKTthLmErPSdcXG5cXHRlbmRJbkxheWVyRWRnZT0nO1BmYihhLHRoaXMuYyk7cmV0dXJuIGEuYX07dmFyIG5XPW1kYihSbmUsJ0JyZWFraW5nUG9pbnRJbnNlcnRlci9CUEluZm8nLDMwNSk7YmNiKDY1MiwxLHs2NTI6MX0scW9jKTtfLmE9ZmFsc2U7Xy5iPTA7Xy5jPTA7dmFyIG9XPW1kYihSbmUsJ0JyZWFraW5nUG9pbnRJbnNlcnRlci9DdXQnLDY1Mik7YmNiKDE0ODAsMSxlbmUsQW9jKTtfLnBmPWZ1bmN0aW9uIEJvYyhhLGIpe3lvYyhCRChhLDM3KSxiKX07dmFyIHNXPW1kYihSbmUsJ0JyZWFraW5nUG9pbnRQcm9jZXNzb3InLDE0ODApO2JjYigxNDgxLDEsT2llLENvYyk7Xy5NYj1mdW5jdGlvbiBEb2MoYSl7cmV0dXJuIGhvYyhCRChhLDEwKSl9O3ZhciBxVz1tZGIoUm5lLCdCcmVha2luZ1BvaW50UHJvY2Vzc29yLzBtZXRob2RyZWYkaXNFbmQkVHlwZScsMTQ4MSk7YmNiKDE0ODIsMSxPaWUsRW9jKTtfLk1iPWZ1bmN0aW9uIEZvYyhhKXtyZXR1cm4gaW9jKEJEKGEsMTApKX07dmFyIHJXPW1kYihSbmUsJ0JyZWFraW5nUG9pbnRQcm9jZXNzb3IvMW1ldGhvZHJlZiRpc1N0YXJ0JFR5cGUnLDE0ODIpO2JjYigxNDgzLDEsZW5lLEpvYyk7Xy5wZj1mdW5jdGlvbiBLb2MoYSxiKXtIb2ModGhpcyxCRChhLDM3KSxiKX07dmFyIHVXPW1kYihSbmUsJ0JyZWFraW5nUG9pbnRSZW1vdmVyJywxNDgzKTtiY2IoMTQ4NCwxLHFpZSxMb2MpO18udGQ9ZnVuY3Rpb24gTW9jKGEpe0JEKGEsMTI4KS5rPXRydWV9O3ZhciB0Vz1tZGIoUm5lLCdCcmVha2luZ1BvaW50UmVtb3Zlci9sYW1iZGEkMCRUeXBlJywxNDg0KTtiY2IoNzk3LDEse30sWG9jKTtfLmI9MDtfLmU9MDtfLmY9MDtfLmo9MDt2YXIgQVc9bWRiKFJuZSwnR3JhcGhTdGF0cycsNzk3KTtiY2IoNzk4LDEse30sWm9jKTtfLkNlPWZ1bmN0aW9uICRvYyhhLGIpe3JldHVybiAkd25kLk1hdGgubWF4KEVkYihFRChhKSksRWRiKEVEKGIpKSl9O3ZhciB2Vz1tZGIoUm5lLCdHcmFwaFN0YXRzLzBtZXRob2RyZWYkbWF4JFR5cGUnLDc5OCk7YmNiKDc5OSwxLHt9LF9vYyk7Xy5DZT1mdW5jdGlvbiBhcGMoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1heChFZGIoRUQoYSkpLEVkYihFRChiKSkpfTt2YXIgd1c9bWRiKFJuZSwnR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlJyw3OTkpO2JjYigxNjYwLDEse30sYnBjKTtfLkNlPWZ1bmN0aW9uIGNwYyhhLGIpe3JldHVybiBZb2MoRUQoYSksRUQoYikpfTt2YXIgeFc9bWRiKFJuZSwnR3JhcGhTdGF0cy9sYW1iZGEkMSRUeXBlJywxNjYwKTtiY2IoMTY2MSwxLHt9LGRwYyk7Xy5LYj1mdW5jdGlvbiBlcGMoYSl7cmV0dXJuIFJvYyh0aGlzLmEsQkQoYSwyOSkpfTt2YXIgeVc9bWRiKFJuZSwnR3JhcGhTdGF0cy9sYW1iZGEkMiRUeXBlJywxNjYxKTtiY2IoMTY2MiwxLHt9LGZwYyk7Xy5LYj1mdW5jdGlvbiBncGMoYSl7cmV0dXJuIFFvYyh0aGlzLmEsQkQoYSwyOSkpfTt2YXIgelc9bWRiKFJuZSwnR3JhcGhTdGF0cy9sYW1iZGEkNiRUeXBlJywxNjYyKTtiY2IoODAwLDEse30saHBjKTtfLlZmPWZ1bmN0aW9uIGlwYyhhLGIpe3ZhciBjO2M9QkQodk5iKGEsKE55YygpLEV5YykpLDE1KTtyZXR1cm4gYz9jOihtbWIoKSxtbWIoKSxqbWIpfTtfLldmPWZ1bmN0aW9uIGpwYygpe3JldHVybiBmYWxzZX07dmFyIEJXPW1kYihSbmUsJ0lDdXRJbmRleENhbGN1bGF0b3IvTWFudWFsQ3V0SW5kZXhDYWxjdWxhdG9yJyw4MDApO2JjYig4MDIsMSx7fSxrcGMpO18uVmY9ZnVuY3Rpb24gbHBjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7dT0oYi5uPT1udWxsJiZVb2MoYiksYi5uKTtpPShiLmQ9PW51bGwmJlVvYyhiKSxiLmQpO3Q9S0MoVUQsVmplLDI1LHUubGVuZ3RoLDE1LDEpO3RbMF09dVswXTtyPXVbMF07Zm9yKGo9MTtqPHUubGVuZ3RoO2orKyl7dFtqXT10W2otMV0rdVtqXTtyKz11W2pdfWU9Wm5jKGIpLTE7Zz1CRCh2TmIoYSwoTnljKCksRnljKSksMTkpLmE7ZD1RamU7Yz1uZXcgUmtiO2ZvcihtPSR3bmQuTWF0aC5tYXgoMCxlLWcpO208PSR3bmQuTWF0aC5taW4oYi5mLTEsZStnKTttKyspe3A9ci8obSsxKTtxPTA7az0xO2Y9bmV3IFJrYjtzPVFqZTtsPTA7aD0wO289aVswXTtpZihtPT0wKXtzPXI7aD0oYi5nPT1udWxsJiYoYi5nPVBvYyhiLG5ldyBfb2MpKSxFZGIoYi5nKSl9ZWxzZXt3aGlsZShrPGIuZil7aWYodFtrLTFdLXE+PXApe0VrYihmLG1lYihrKSk7cz0kd25kLk1hdGgubWF4KHMsdFtrLTFdLWwpO2grPW87cSs9dFtrLTFdLXE7bD10W2stMV07bz1pW2tdfW89JHduZC5NYXRoLm1heChvLGlba10pOysra31oKz1vfW49JHduZC5NYXRoLm1pbigxL3MsMS9iLmIvaCk7aWYobj5kKXtkPW47Yz1mfX1yZXR1cm4gY307Xy5XZj1mdW5jdGlvbiBtcGMoKXtyZXR1cm4gZmFsc2V9O3ZhciBDVz1tZGIoUm5lLCdNU0RDdXRJbmRleEhldXJpc3RpYycsODAyKTtiY2IoMTYxNywxLGVuZSxwcGMpO18ucGY9ZnVuY3Rpb24gcXBjKGEsYil7b3BjKEJEKGEsMzcpLGIpfTt2YXIgRFc9bWRiKFJuZSwnU2luZ2xlRWRnZUdyYXBoV3JhcHBlcicsMTYxNyk7YmNiKDIyNywyMix7MzoxLDM1OjEsMjI6MSwyMjc6MX0sQnBjKTt2YXIgdXBjLHZwYyx3cGMseHBjLHlwYyx6cGM7dmFyIEVXPW5kYihTbmUsJ0NlbnRlckVkZ2VMYWJlbFBsYWNlbWVudFN0cmF0ZWd5JywyMjcsQ0ksRHBjLENwYyk7dmFyIEVwYztiY2IoNDIyLDIyLHszOjEsMzU6MSwyMjoxLDQyMjoxfSxKcGMpO3ZhciBHcGMsSHBjO3ZhciBGVz1uZGIoU25lLCdDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneScsNDIyLENJLExwYyxLcGMpO3ZhciBNcGM7YmNiKDMxNCwyMix7MzoxLDM1OjEsMjI6MSwzMTQ6MSwyNDY6MSwyMzQ6MX0sVHBjKTtfLktmPWZ1bmN0aW9uIFZwYygpe3JldHVybiBTcGModGhpcyl9O18uWGY9ZnVuY3Rpb24gVXBjKCl7cmV0dXJuIFNwYyh0aGlzKX07dmFyIE9wYyxQcGMsUXBjO3ZhciBHVz1uZGIoU25lLCdDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5JywzMTQsQ0ksWHBjLFdwYyk7dmFyIFlwYztiY2IoMzM3LDIyLHszOjEsMzU6MSwyMjoxLDMzNzoxfSxjcWMpO3ZhciAkcGMsX3BjLGFxYzt2YXIgSFc9bmRiKFNuZSwnQ3V0dGluZ1N0cmF0ZWd5JywzMzcsQ0ksZXFjLGRxYyk7dmFyIGZxYztiY2IoMzM1LDIyLHszOjEsMzU6MSwyMjoxLDMzNToxLDI0NjoxLDIzNDoxfSxvcWMpO18uS2Y9ZnVuY3Rpb24gcXFjKCl7cmV0dXJuIG5xYyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBwcWMoKXtyZXR1cm4gbnFjKHRoaXMpfTt2YXIgaHFjLGlxYyxqcWMsa3FjLGxxYzt2YXIgSVc9bmRiKFNuZSwnQ3ljbGVCcmVha2luZ1N0cmF0ZWd5JywzMzUsQ0ksc3FjLHJxYyk7dmFyIHRxYztiY2IoNDE5LDIyLHszOjEsMzU6MSwyMjoxLDQxOToxfSx5cWMpO3ZhciB2cWMsd3FjO3ZhciBKVz1uZGIoU25lLCdEaXJlY3Rpb25Db25ncnVlbmN5Jyw0MTksQ0ksQXFjLHpxYyk7dmFyIEJxYztiY2IoNDUwLDIyLHszOjEsMzU6MSwyMjoxLDQ1MDoxfSxIcWMpO3ZhciBEcWMsRXFjLEZxYzt2YXIgS1c9bmRiKFNuZSwnRWRnZUNvbnN0cmFpbnQnLDQ1MCxDSSxKcWMsSXFjKTt2YXIgS3FjO2JjYigyNzYsMjIsezM6MSwzNToxLDIyOjEsMjc2OjF9LFVxYyk7dmFyIE1xYyxOcWMsT3FjLFBxYyxRcWMsUnFjO3ZhciBMVz1uZGIoU25lLCdFZGdlTGFiZWxTaWRlU2VsZWN0aW9uJywyNzYsQ0ksV3FjLFZxYyk7dmFyIFhxYztiY2IoNDc5LDIyLHszOjEsMzU6MSwyMjoxLDQ3OToxfSxhcmMpO3ZhciBacWMsJHFjO3ZhciBNVz1uZGIoU25lLCdFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Jyw0NzksQ0ksY3JjLGJyYyk7dmFyIGRyYztiY2IoMjc0LDIyLHszOjEsMzU6MSwyMjoxLDI3NDoxfSxtcmMpO3ZhciBmcmMsZ3JjLGhyYyxpcmMsanJjLGtyYzt2YXIgTlc9bmRiKFNuZSwnRml4ZWRBbGlnbm1lbnQnLDI3NCxDSSxvcmMsbnJjKTt2YXIgcHJjO2JjYigyNzUsMjIsezM6MSwzNToxLDIyOjEsMjc1OjF9LHpyYyk7dmFyIHJyYyx0cmMsdXJjLHZyYyx3cmMseHJjO3ZhciBPVz1uZGIoU25lLCdHcmFwaENvbXBhY3Rpb25TdHJhdGVneScsMjc1LENJLEJyYyxBcmMpO3ZhciBDcmM7YmNiKDI1NiwyMix7MzoxLDM1OjEsMjI6MSwyNTY6MX0sUHJjKTt2YXIgRXJjLEZyYyxHcmMsSHJjLElyYyxKcmMsS3JjLExyYyxNcmMsTnJjO3ZhciBQVz1uZGIoU25lLCdHcmFwaFByb3BlcnRpZXMnLDI1NixDSSxScmMsUXJjKTt2YXIgU3JjO2JjYigyOTIsMjIsezM6MSwzNToxLDIyOjEsMjkyOjF9LFlyYyk7dmFyIFVyYyxWcmMsV3JjO3ZhciBRVz1uZGIoU25lLCdHcmVlZHlTd2l0Y2hUeXBlJywyOTIsQ0ksJHJjLFpyYyk7dmFyIF9yYztiY2IoMzAzLDIyLHszOjEsMzU6MSwyMjoxLDMwMzoxfSxmc2MpO3ZhciBic2MsY3NjLGRzYzt2YXIgUlc9bmRiKFNuZSwnSW5MYXllckNvbnN0cmFpbnQnLDMwMyxDSSxoc2MsZ3NjKTt2YXIgaXNjO2JjYig0MjAsMjIsezM6MSwzNToxLDIyOjEsNDIwOjF9LG5zYyk7dmFyIGtzYyxsc2M7dmFyIFNXPW5kYihTbmUsJ0ludGVyYWN0aXZlUmVmZXJlbmNlUG9pbnQnLDQyMCxDSSxwc2Msb3NjKTt2YXIgcXNjO3ZhciBzc2MsdHNjLHVzYyx2c2Msd3NjLHhzYyx5c2MsenNjLEFzYyxCc2MsQ3NjLERzYyxFc2MsRnNjLEdzYyxIc2MsSXNjLEpzYyxLc2MsTHNjLE1zYyxOc2MsT3NjLFBzYyxRc2MsUnNjLFNzYyxUc2MsVXNjLFZzYyxXc2MsWHNjLFlzYyxac2MsJHNjLF9zYyxhdGMsYnRjLGN0YyxkdGMsZXRjLGZ0YyxndGMsaHRjLGl0YyxqdGMsa3RjLGx0YyxtdGMsbnRjLG90YyxwdGMscXRjLHJ0YyxzdGMsdHRjLHV0Yyx2dGM7YmNiKDE2MywyMix7MzoxLDM1OjEsMjI6MSwxNjM6MX0sRHRjKTt2YXIgeHRjLHl0Yyx6dGMsQXRjLEJ0Yzt2YXIgVFc9bmRiKFNuZSwnTGF5ZXJDb25zdHJhaW50JywxNjMsQ0ksRnRjLEV0Yyk7dmFyIEd0YztiY2IoODQ4LDEsYWxlLGt3Yyk7Xy5RZT1mdW5jdGlvbiBsd2MoYSl7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsWW5lKSwnJyksJ0RpcmVjdGlvbiBDb25ncnVlbmN5JyksJ1NwZWNpZmllcyBob3cgZHJhd2luZ3Mgb2YgdGhlIHNhbWUgZ3JhcGggd2l0aCBkaWZmZXJlbnQgbGF5b3V0IGRpcmVjdGlvbnMgY29tcGFyZSB0byBlYWNoIG90aGVyOiBlaXRoZXIgYSBuYXR1cmFsIHJlYWRpbmcgZGlyZWN0aW9uIGlzIHByZXNlcnZlZCBvciB0aGUgZHJhd2luZ3MgYXJlIHJvdGF0ZWQgdmVyc2lvbnMgb2YgZWFjaCBvdGhlci4nKSxwdWMpLChfNWMoKSxWNWMpKSxKVykscHFiKChONWMoKSxMNWMpKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxabmUpLCcnKSwnRmVlZGJhY2sgRWRnZXMnKSwnV2hldGhlciBmZWVkYmFjayBlZGdlcyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgYnkgcm91dGluZyBhcm91bmQgdGhlIG5vZGVzLicpLChCY2IoKSxmYWxzZSkpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLCRuZSksJycpLCdJbnRlcmFjdGl2ZSBSZWZlcmVuY2UgUG9pbnQnKSwnRGV0ZXJtaW5lcyB3aGljaCBwb2ludCBvZiBhIG5vZGUgaXMgY29uc2lkZXJlZCBieSBpbnRlcmFjdGl2ZSBsYXlvdXQgcGhhc2VzLicpLE11YyksVjVjKSxTVykscHFiKEw1YykpKSk7bzRjKGEsJG5lLGdvZSxPdWMpO280YyhhLCRuZSxxb2UsTnVjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxfbmUpLCcnKSwnTWVyZ2UgRWRnZXMnKSwnRWRnZXMgdGhhdCBoYXZlIG5vIHBvcnRzIGFyZSBtZXJnZWQgc28gdGhleSB0b3VjaCB0aGUgY29ubmVjdGVkIG5vZGVzIGF0IHRoZSBzYW1lIHBvaW50cy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgb25lIHBvcnQgaXMgY3JlYXRlZCBmb3IgZWFjaCBlZGdlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBhIG5vZGUuIFdoZW4gaXQgaXMgZW5hYmxlZCwgYWxsIHN1Y2ggaW5jb21pbmcgZWRnZXMgc2hhcmUgYW4gaW5wdXQgcG9ydCwgYW5kIGFsbCBvdXRnb2luZyBlZGdlcyBzaGFyZSBhbiBvdXRwdXQgcG9ydC4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYW9lKSwnJyksJ01lcmdlIEhpZXJhcmNoeS1Dcm9zc2luZyBFZGdlcycpLCdJZiBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGFjdGl2ZSwgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHVzZSBhcyBmZXcgaGllcmFyY2hpY2FsIHBvcnRzIGFzIHBvc3NpYmxlLiBUaGV5IGFyZSBicm9rZW4gYnkgdGhlIGFsZ29yaXRobSwgd2l0aCBoaWVyYXJjaGljYWwgcG9ydHMgaW5zZXJ0ZWQgYXMgcmVxdWlyZWQuIFVzdWFsbHksIG9uZSBzdWNoIHBvcnQgaXMgY3JlYXRlZCBmb3IgZWFjaCBlZGdlIGF0IGVhY2ggaGllcmFyY2h5IGNyb3NzaW5nIHBvaW50LiBXaXRoIHRoaXMgb3B0aW9uIHNldCB0byB0cnVlLCB3ZSB0cnkgdG8gY3JlYXRlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUgaW4gdGhlIHByb2Nlc3MuIEluIHBhcnRpY3VsYXIsIGFsbCBlZGdlcyB0aGF0IGZvcm0gYSBoeXBlcmVkZ2UgY2FuIHNoYXJlIGEgcG9ydC4nKSx0cnVlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEM1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYm9lKSwnJyksJ0FsbG93IE5vbi1GbG93IFBvcnRzIFRvIFN3aXRjaCBTaWRlcycpLFwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC5cIiksZmFsc2UpLFQ1Yyksd0kpLHBxYihNNWMpKSxPQyhHQyhaSSwxKSxuaWUsMiw2LFsnb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9ydGhPclNvdXRoUG9ydCddKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxjb2UpLCcnKSwnUG9ydCBTb3J0aW5nIFN0cmF0ZWd5JyksXCJPbmx5IHJlbGV2YW50IGZvciBub2RlcyB3aXRoIEZJWEVEX1NJREUgcG9ydCBjb25zdHJhaW50cy4gRGV0ZXJtaW5lcyB0aGUgd2F5IGEgbm9kZSdzIHBvcnRzIGFyZSBkaXN0cmlidXRlZCBvbiB0aGUgc2lkZXMgb2YgYSBub2RlIGlmIHRoZWlyIG9yZGVyIGlzIG5vdCBwcmVzY3JpYmVkLiBUaGUgb3B0aW9uIGlzIHNldCBvbiBwYXJlbnQgbm9kZXMuXCIpLHh2YyksVjVjKSxjWCkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZG9lKSwnJyksJ1Rob3JvdWdobmVzcycpLCdIb3cgbXVjaCBlZmZvcnQgc2hvdWxkIGJlIHNwZW50IHRvIHByb2R1Y2UgYSBuaWNlIGxheW91dC4nKSxtZWIoNykpLFg1YyksSkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGVvZSksJycpLCdBZGQgVW5uZWNlc3NhcnkgQmVuZHBvaW50cycpLCdBZGRzIGJlbmQgcG9pbnRzIGV2ZW4gaWYgYW4gZWRnZSBkb2VzIG5vdCBjaGFuZ2UgZGlyZWN0aW9uLiBJZiB0cnVlLCBlYWNoIGxvbmcgZWRnZSBkdW1teSB3aWxsIGNvbnRyaWJ1dGUgYSBiZW5kIHBvaW50IHRvIGl0cyBlZGdlcyBhbmQgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHdpbGwgYWx3YXlzIGdldCBhIGJlbmQgcG9pbnQgd2hlcmUgdGhleSBjcm9zcyBoaWVyYXJjaHkgYm91bmRhcmllcy4gQnkgZGVmYXVsdCwgYmVuZCBwb2ludHMgYXJlIG9ubHkgYWRkZWQgd2hlcmUgYW4gZWRnZSBjaGFuZ2VzIGRpcmVjdGlvbi4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZm9lKSwnJyksJ0dlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMnKSwnSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZ29lKSwnY3ljbGVCcmVha2luZycpLCdDeWNsZSBCcmVha2luZyBTdHJhdGVneScpLCdTdHJhdGVneSBmb3IgY3ljbGUgYnJlYWtpbmcuIEN5Y2xlIGJyZWFraW5nIGxvb2tzIGZvciBjeWNsZXMgaW4gdGhlIGdyYXBoIGFuZCBkZXRlcm1pbmVzIHdoaWNoIGVkZ2VzIHRvIHJldmVyc2UgdG8gYnJlYWsgdGhlIGN5Y2xlcy4gUmV2ZXJzZWQgZWRnZXMgd2lsbCBlbmQgdXAgcG9pbnRpbmcgdG8gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiByZWd1bGFyIGVkZ2VzICh0aGF0IGlzLCByZXZlcnNlZCBlZGdlcyB3aWxsIHBvaW50IGxlZnQgaWYgZWRnZXMgdXN1YWxseSBwb2ludCByaWdodCkuJyksbnVjKSxWNWMpLElXKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxob2UpLHBwZSksJ05vZGUgTGF5ZXJpbmcgU3RyYXRlZ3knKSwnU3RyYXRlZ3kgZm9yIG5vZGUgbGF5ZXJpbmcuJyksYnZjKSxWNWMpLFlXKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxpb2UpLHBwZSksJ0xheWVyIENvbnN0cmFpbnQnKSwnRGV0ZXJtaW5lcyBhIGNvbnN0cmFpbnQgb24gdGhlIHBsYWNlbWVudCBvZiB0aGUgbm9kZSByZWdhcmRpbmcgdGhlIGxheWVyaW5nLicpLFR1YyksVjVjKSxUVykscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsam9lKSxwcGUpLCdMYXllciBDaG9pY2UgQ29uc3RyYWludCcpLFwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBsYXllciBwbGFjZW1lbnQgb2YgYSBub2RlLiBMZXQgaSBiZSB0aGUgdmFsdWUgb2YgdGVoIGNvbnN0cmFpbnQuIEFzc3VtZWQgdGhlIGRyYXdpbmcgaGFzIG4gbGF5ZXJzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gaS10aCBsYXllci4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBpbiB0aGUgbGFzdCBsYXllciBvZiB0aGUgZHJhd2luZy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG5vdCBwYXJ0IG9mIGFueSBvZiBFTEsgTGF5ZXJlZCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYnV0IGlzIG9ubHkgZXZhbHVhdGVkIGFzIHBhcnQgb2YgdGhlIGBJbnRlcmFjdGl2ZUxheWVyZWRHcmFwaFZpc2l0b3JgLCB3aGljaCBtdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgb3IgdXNlZCB2aWEgdGhlIGBEaWFncmFtTGF5b3V0RW5naW5lLlwiKSxtZWIoLTEpKSxYNWMpLEpJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxrb2UpLHBwZSksJ0xheWVyIElEJyksJ0xheWVyIGlkZW50aWZpZXIgdGhhdCB3YXMgY2FsY3VsYXRlZCBieSBFTEsgTGF5ZXJlZCBmb3IgYSBub2RlLiBUaGlzIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGludGVyYWN0aXZlTGF5b3Qgb3IgZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzIGlzIHNldC4nKSxtZWIoLTEpKSxYNWMpLEpJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxsb2UpLHFwZSksJ1VwcGVyIEJvdW5kIE9uIFdpZHRoIFtNaW5XaWR0aCBMYXllcmVyXScpLFwiRGVmaW5lcyBhIGxvb3NlIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUgTWluV2lkdGggbGF5ZXJlci4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC5cIiksbWViKDQpKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTtvNGMoYSxsb2UsaG9lLFd1Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsbW9lKSxxcGUpLCdVcHBlciBMYXllciBFc3RpbWF0aW9uIFNjYWxpbmcgRmFjdG9yIFtNaW5XaWR0aCBMYXllcmVyXScpLFwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuXCIpLG1lYigyKSksWDVjKSxKSSkscHFiKEw1YykpKSk7bzRjKGEsbW9lLGhvZSxZdWMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG5vZSkscnBlKSwnTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3knKSwnUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4nKSxfdWMpLFY1YyksYVgpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG9vZSkscnBlKSwnTWF4IE5vZGUgUHJvbW90aW9uIEl0ZXJhdGlvbnMnKSwnTGltaXRzIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3Igbm9kZSBwcm9tb3Rpb24uJyksbWViKDApKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTtvNGMoYSxvb2Usbm9lLG51bGwpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHBvZSksJ2xheWVyaW5nLmNvZmZtYW5HcmFoYW0nKSwnTGF5ZXIgQm91bmQnKSwnVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGFsbG93ZWQgcGVyIGxheWVyLicpLG1lYihPaGUpKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTtvNGMoYSxwb2UsaG9lLFF1Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMscW9lKSxzcGUpLCdDcm9zc2luZyBNaW5pbWl6YXRpb24gU3RyYXRlZ3knKSwnU3RyYXRlZ3kgZm9yIGNyb3NzaW5nIG1pbmltaXphdGlvbi4nKSxsdWMpLFY1YyksR1cpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHJvZSksc3BlKSwnRm9yY2UgTm9kZSBNb2RlbCBPcmRlcicpLCdUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsc29lKSxzcGUpLCdIaWVyYXJjaGljYWwgU3dlZXBpbmVzcycpLCdIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLicpLDAuMSksVTVjKSxCSSkscHFiKEw1YykpKSk7bzRjKGEsc29lLHRwZSxmdWMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHRvZSksc3BlKSwnU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24nKSxcIlByZXNlcnZlcyB0aGUgb3JkZXIgb2Ygbm9kZXMgd2l0aGluIGEgbGF5ZXIgYnV0IHN0aWxsIG1pbmltaXplcyBjcm9zc2luZ3MgYmV0d2VlbiBlZGdlcyBjb25uZWN0aW5nIGxvbmcgZWRnZSBkdW1taWVzLiBEZXJpdmVzIHRoZSBkZXNpcmVkIG9yZGVyIGZyb20gcG9zaXRpb25zIHNwZWNpZmllZCBieSB0aGUgJ29yZy5lY2xpcHNlLmVsay5wb3NpdGlvbicgbGF5b3V0IG9wdGlvbi4gUmVxdWlyZXMgYSBjcm9zc2luZyBtaW5pbWl6YXRpb24gc3RyYXRlZ3kgdGhhdCBpcyBhYmxlIHRvIHByb2Nlc3MgJ2luLWxheWVyJyBjb25zdHJhaW50cy5cIiksZmFsc2UpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO280YyhhLHRvZSxxb2UsanVjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx1b2UpLHNwZSksJ1Bvc2l0aW9uIENob2ljZSBDb25zdHJhaW50JyksXCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIHBvc2l0aW9uIHBsYWNlbWVudCBvZiBhIG5vZGUgaW4gYSBsYXllci4gQXNzdW1lZCB0aGUgbGF5ZXIgaW4gd2hpY2ggdGhlIG5vZGUgcGxhY2VkIGluY2x1ZGVzIG4gb3RoZXIgbm9kZXMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBhdCB0aGUgaS10aCBwb3NpdGlvbi4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgcGFydCBvZiBhbnkgb2YgRUxLIExheWVyZWQncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGJ1dCBpcyBvbmx5IGV2YWx1YXRlZCBhcyBwYXJ0IG9mIHRoZSBgSW50ZXJhY3RpdmVMYXllcmVkR3JhcGhWaXNpdG9yYCwgd2hpY2ggbXVzdCBiZSBhcHBsaWVkIG1hbnVhbGx5IG9yIHVzZWQgdmlhIHRoZSBgRGlhZ3JhbUxheW91dEVuZ2luZS5cIiksbWViKC0xKSksWDVjKSxKSSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsdm9lKSxzcGUpLCdQb3NpdGlvbiBJRCcpLCdQb3NpdGlvbiB3aXRoaW4gYSBsYXllciB0aGF0IHdhcyBkZXRlcm1pbmVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LicpLG1lYigtMSkpLFg1YyksSkkpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHdvZSksdXBlKSwnR3JlZWR5IFN3aXRjaCBBY3RpdmF0aW9uIFRocmVzaG9sZCcpLFwiQnkgZGVmYXVsdCBpdCBpcyBkZWNpZGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGdyZWVkeSBzd2l0Y2ggaXMgYWN0aXZhdGVkIG9yIG5vdC4gVGhlIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIGlucHV0IGdyYXBoICh3aXRob3V0IGR1bW15IG5vZGVzKSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiBBICcwJyBlbmZvcmNlcyB0aGUgYWN0aXZhdGlvbi5cIiksbWViKDQwKSksWDVjKSxKSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMseG9lKSx1cGUpLCdHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbicpLFwiR3JlZWR5IFN3aXRjaCBzdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlZ3VsYXIgY3Jvc3NpbmcgbWluaW1pemF0aW9uIGFzIGEgcG9zdC1wcm9jZXNzb3IuIE5vdGUgdGhhdCBpZiAnaGllcmFyY2h5SGFuZGxpbmcnIGlzIHNldCB0byAnSU5DTFVERV9DSElMRFJFTicsIHRoZSAnZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnIG9wdGlvbiBtdXN0IGJlIHVzZWQuXCIpLGN1YyksVjVjKSxRVykscHFiKEw1YykpKSk7bzRjKGEseG9lLHFvZSxkdWMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHlvZSksJ2Nyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbCcpLCdHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbiAoaGllcmFyY2hpY2FsKScpLFwiQWN0aXZhdGVzIHRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpbiBjYXNlIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgdXNlZC4gVGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBub24taGllcmFyY2hpY2FsIGNhc2UgKHNlZSAnZ3JlZWR5U3dpdGNoLnR5cGUnKSBhcmU6IDEpIGdyZWVkeSBzd2l0Y2ggaXMgaW5hY3RpdmUgYnkgZGVmYXVsdCwgMykgb25seSB0aGUgb3B0aW9uIHZhbHVlIHNldCBvbiB0aGUgbm9kZSBhdCB3aGljaCBoaWVyYXJjaGljYWwgbGF5b3V0IHN0YXJ0cyBpcyByZWxldmFudCwgYW5kIDIpIGlmIGl0J3MgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyLCBpdCBwcm9wZXJseSBhZGRyZXNzZXMgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzLlwiKSwkdGMpLFY1YyksUVcpLHBxYihMNWMpKSkpO280YyhhLHlvZSxxb2UsX3RjKTtvNGMoYSx5b2UsdHBlLGF1Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsem9lKSx2cGUpLCdOb2RlIFBsYWNlbWVudCBTdHJhdGVneScpLCdTdHJhdGVneSBmb3Igbm9kZSBwbGFjZW1lbnQuJyksdnZjKSxWNWMpLF9XKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLEFvZSksdnBlKSwnRmF2b3IgU3RyYWlnaHQgRWRnZXMgT3ZlciBCYWxhbmNpbmcnKSxcIkZhdm9yIHN0cmFpZ2h0IGVkZ2VzIG92ZXIgYSBiYWxhbmNlZCBub2RlIHBsYWNlbWVudC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSB1c2VkICdlZGdlUm91dGluZycuIEZvciBhbiBvcnRob2dvbmFsIHN0eWxlIGl0IGlzIHNldCB0byB0cnVlLCBmb3IgYWxsIG90aGVyIHN0eWxlcyB0byBmYWxzZS5cIiksVDVjKSx3SSkscHFiKEw1YykpKSk7bzRjKGEsQW9lLHpvZSxsdmMpO280YyhhLEFvZSx6b2UsbXZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxCb2UpLHdwZSksJ0JLIEVkZ2UgU3RyYWlnaHRlbmluZycpLFwiU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEJyYW5kZXMgS29lcGYgbm9kZSBwbGFjZXIgdHJpZXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBhdCB0aGUgZXhwZW5zZSBvZiBkaWFncmFtIHNpemUuIFRoZXJlIGlzIGEgc3VidGxlIGRpZmZlcmVuY2UgdG8gdGhlICdmYXZvclN0cmFpZ2h0RWRnZXMnIG9wdGlvbiwgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgYmFsYW5jZWQgcGxhY2VtZW50IG9mIHRoZSBub2RlcyBpcyBkZXNpcmVkLCBvciBub3QuIEluIGJrIHRlcm1zIHRoaXMgbWVhbnMgY29tYmluaW5nIHRoZSBmb3VyIGFsaWdubWVudHMgaW50byBhIHNpbmdsZSBiYWxhbmNlZCBvbmUsIG9yIG5vdC4gVGhpcyBvcHRpb24gb24gdGhlIG90aGVyIGhhbmQgdHJpZXMgdG8gc3RyYWlnaHRlbiBhZGRpdGlvbmFsIGVkZ2VzIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgZWFjaCBvZiB0aGUgZm91ciBhbGlnbm1lbnRzLlwiKSxmdmMpLFY1YyksTVcpLHBxYihMNWMpKSkpO280YyhhLEJvZSx6b2UsZ3ZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxDb2UpLHdwZSksJ0JLIEZpeGVkIEFsaWdubWVudCcpLCdUZWxscyB0aGUgQksgbm9kZSBwbGFjZXIgdG8gdXNlIGEgY2VydGFpbiBhbGlnbm1lbnQgKG91dCBvZiBpdHMgZm91cikgaW5zdGVhZCBvZiB0aGUgb25lIHByb2R1Y2luZyB0aGUgc21hbGxlc3QgaGVpZ2h0LCBvciB0aGUgY29tYmluYXRpb24gb2YgYWxsIGZvdXIuJyksaXZjKSxWNWMpLE5XKSxwcWIoTDVjKSkpKTtvNGMoYSxDb2Usem9lLGp2Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRG9lKSwnbm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cycpLCdMaW5lYXIgU2VnbWVudHMgRGVmbGVjdGlvbiBEYW1wZW5pbmcnKSwnRGFtcGVucyB0aGUgbW92ZW1lbnQgb2Ygbm9kZXMgdG8ga2VlcCB0aGUgZGlhZ3JhbSBmcm9tIGdldHRpbmcgdG9vIGxhcmdlLicpLDAuMyksVTVjKSxCSSkscHFiKEw1YykpKSk7bzRjKGEsRG9lLHpvZSxvdmMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRW9lKSwnbm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleCcpLCdOb2RlIEZsZXhpYmlsaXR5JyksXCJBaW1zIGF0IHNob3J0ZXIgYW5kIHN0cmFpZ2h0ZXIgZWRnZXMuIFR3byBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGU6IChhKSBhbGxvdyBwb3J0cyB0byBtb3ZlIGZyZWVseSBvbiB0aGUgc2lkZSB0aGV5IGFyZSBhc3NpZ25lZCB0byAodGhlIG9yZGVyIGlzIGFsd2F5cyBkZWZpbmVkIGJlZm9yZWhhbmQpLCAoYikgYWRkaXRpb25hbGx5IGFsbG93IHRvIGVubGFyZ2UgYSBub2RlIHdoZXJldmVyIGl0IGhlbHBzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgY29uZmlndXJlZCBmb3IgYSBub2RlLCB0aGUgJ25vZGVGbGV4aWJpbGl0eS5kZWZhdWx0JyB2YWx1ZSBpcyB1c2VkLCB3aGljaCBpcyBzcGVjaWZpZWQgZm9yIHRoZSBub2RlJ3MgcGFyZW50LlwiKSxWNWMpLCRXKSxwcWIoSzVjKSkpKTtvNGMoYSxFb2Usem9lLHR2Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRm9lKSwnbm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHknKSwnTm9kZSBGbGV4aWJpbGl0eSBEZWZhdWx0JyksXCJEZWZhdWx0IHZhbHVlIG9mIHRoZSAnbm9kZUZsZXhpYmlsaXR5JyBvcHRpb24gZm9yIHRoZSBjaGlsZHJlbiBvZiBhIGhpZXJhcmNoaWNhbCBub2RlLlwiKSxydmMpLFY1YyksJFcpLHBxYihMNWMpKSkpO280YyhhLEZvZSx6b2Usc3ZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxHb2UpLHhwZSksJ1NlbGYtTG9vcCBEaXN0cmlidXRpb24nKSwnQWx0ZXIgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbG9vcHMgYXJvdW5kIHRoZSBub2RlLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuJykseHVjKSxWNWMpLGVYKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxIb2UpLHhwZSksJ1NlbGYtTG9vcCBPcmRlcmluZycpLCdBbHRlciB0aGUgb3JkZXJpbmcgb2YgdGhlIGxvb3BzIHRoZXkgY2FuIGVpdGhlciBiZSBzdGFja2VkIG9yIHNlcXVlbmNlZC4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLicpLHp1YyksVjVjKSxmWCkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsSW9lKSwnZWRnZVJvdXRpbmcuc3BsaW5lcycpLCdTcGxpbmUgUm91dGluZyBNb2RlJyksJ1NwZWNpZmllcyB0aGUgd2F5IGNvbnRyb2wgcG9pbnRzIGFyZSBhc3NlbWJsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBlZGdlLiBDT05TRVJWQVRJVkUgZW5zdXJlcyB0aGF0IGVkZ2VzIGFyZSBwcm9wZXJseSByb3V0ZWQgYXJvdW5kIHRoZSBub2RlcyBidXQgZmVlbHMgcmF0aGVyIG9ydGhvZ29uYWwgYXQgdGltZXMuIFNMT1BQWSB1c2VzIGZld2VyIGNvbnRyb2wgcG9pbnRzIHRvIG9idGFpbiBjdXJ2aWVyIGVkZ2Ugcm91dGVzIGJ1dCBtYXkgcmVzdWx0IGluIGVkZ2VzIG92ZXJsYXBwaW5nIG5vZGVzLicpLEJ1YyksVjVjKSxoWCkscHFiKEw1YykpKSk7bzRjKGEsSW9lLHlwZSxDdWMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLEpvZSksJ2VkZ2VSb3V0aW5nLnNwbGluZXMuc2xvcHB5JyksJ1Nsb3BweSBTcGxpbmUgTGF5ZXIgU3BhY2luZyBGYWN0b3InKSwnU3BhY2luZyBmYWN0b3IgZm9yIHJvdXRpbmcgYXJlYSBiZXR3ZWVuIGxheWVycyB3aGVuIHVzaW5nIHNsb3BweSBzcGxpbmUgcm91dGluZy4nKSwwLjIpLFU1YyksQkkpLHBxYihMNWMpKSkpO280YyhhLEpvZSx5cGUsRXVjKTtvNGMoYSxKb2UsSW9lLEZ1Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsS29lKSwnZWRnZVJvdXRpbmcucG9seWxpbmUnKSwnU2xvcGVkIEVkZ2UgWm9uZSBXaWR0aCcpLCdXaWR0aCBvZiB0aGUgc3RyaXAgdG8gdGhlIGxlZnQgYW5kIHRvIHRoZSByaWdodCBvZiBlYWNoIGxheWVyIHdoZXJlIHRoZSBwb2x5bGluZSBlZGdlIHJvdXRlciBpcyBhbGxvd2VkIHRvIHJlZnJhaW4gZnJvbSBlbnN1cmluZyB0aGF0IGVkZ2VzIGFyZSByb3V0ZWQgaG9yaXpvbnRhbGx5LiBUaGlzIHByZXZlbnRzIGF3a3dhcmQgYmVuZCBwb2ludHMgZm9yIG5vZGVzIHRoYXQgZXh0ZW50IGFsbW9zdCB0byB0aGUgZWRnZSBvZiB0aGVpciBsYXllci4nKSwyKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTtvNGMoYSxLb2UseXBlLHZ1Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxMb2UpLHpwZSksJ1NwYWNpbmcgQmFzZSBWYWx1ZScpLFwiQW4gb3B0aW9uYWwgYmFzZSB2YWx1ZSBmb3IgYWxsIG90aGVyIGxheW91dCBvcHRpb25zIG9mIHRoZSAnc3BhY2luZycgZ3JvdXAuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlbmllbnRseSBhbHRlciB0aGUgb3ZlcmFsbCAnc3BhY2lvdXNuZXNzJyBvZiB0aGUgZHJhd2luZy4gV2hlbmV2ZXIgYW4gZXhwbGljaXQgdmFsdWUgaXMgc2V0IGZvciB0aGUgb3RoZXIgbGF5b3V0IG9wdGlvbnMsIHRoaXMgYmFzZSB2YWx1ZSB3aWxsIGhhdmUgbm8gZWZmZWN0LiBUaGUgYmFzZSB2YWx1ZSBpcyBub3QgaW5oZXJpdGVkLCBpLmUuIGl0IG11c3QgYmUgc2V0IGZvciBlYWNoIGhpZXJhcmNoaWNhbCBub2RlLlwiKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxNb2UpLHpwZSksJ0VkZ2UgTm9kZSBCZXR3ZWVuIExheWVycyBTcGFjaW5nJyksXCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBhcmUgcm91dGVkIG5leHQgdG8gdGhlIG5vZGUncyBsYXllci4gRm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgY3Jvc3MgdGhlIG5vZGUncyBsYXllciAnc3BhY2luZy5lZGdlTm9kZScgaXMgdXNlZC5cIiksMTApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLE5vZSksenBlKSwnRWRnZSBFZGdlIEJldHdlZW4gTGF5ZXIgU3BhY2luZycpLFwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyB0aGF0IGFyZSByb3V0ZWQgYmV0d2VlbiB0aGUgc2FtZSBwYWlyIG9mIGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLmVkZ2VFZGdlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIGNyb3NzaW5nIHRoZSBzYW1lIGxheWVyLlwiKSwxMCksVTVjKSxCSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsT29lKSx6cGUpLCdOb2RlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZycpLFwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHBhaXIgb2Ygbm9kZXMgb2YgdHdvIGFkamFjZW50IGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLm5vZGVOb2RlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIHdpdGhpbiB0aGUgbGF5ZXIgaXRzZWxmLlwiKSwyMCksVTVjKSxCSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsUG9lKSxBcGUpLCdEaXJlY3Rpb24gUHJpb3JpdHknKSwnRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGhhdmUgYSBjZXJ0YWluIGVkZ2UgcG9pbnQgaW50byB0aGUgZGlyZWN0aW9uIG9mIHRoZSBvdmVyYWxsIGxheW91dC4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgY3ljbGUgYnJlYWtpbmcgcGhhc2UuJyksbWViKDApKSxYNWMpLEpJKSxwcWIoSTVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxRb2UpLEFwZSksJ1Nob3J0bmVzcyBQcmlvcml0eScpLCdEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIGFzIHNob3J0IGFzIHBvc3NpYmxlLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBsYXllcmluZyBwaGFzZS4nKSxtZWIoMCkpLFg1YyksSkkpLHBxYihJNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFJvZSksQXBlKSwnU3RyYWlnaHRuZXNzIFByaW9yaXR5JyksJ0RlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2Ugc3RyYWlnaHQsIGkuZS4gYWxpZ25lZCB3aXRoIG9uZSBvZiB0aGUgdHdvIGF4ZXMuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgbm9kZSBwbGFjZW1lbnQuJyksbWViKDApKSxYNWMpLEpJKSxwcWIoSTVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxTb2UpLEJwZSksT2xlKSwnVHJpZXMgdG8gZnVydGhlciBjb21wYWN0IGNvbXBvbmVudHMgKGRpc2Nvbm5lY3RlZCBzdWItZ3JhcGhzKS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7bzRjKGEsU29lLHptZSx0cnVlKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxUb2UpLENwZSksJ1Bvc3QgQ29tcGFjdGlvbiBTdHJhdGVneScpLERwZSksTnRjKSxWNWMpLE9XKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxVb2UpLENwZSksJ1Bvc3QgQ29tcGFjdGlvbiBDb25zdHJhaW50IENhbGN1bGF0aW9uJyksRHBlKSxMdGMpLFY1YyksRlcpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFZvZSksRXBlKSwnSGlnaCBEZWdyZWUgTm9kZSBUcmVhdG1lbnQnKSwnTWFrZXMgcm9vbSBhcm91bmQgaGlnaCBkZWdyZWUgbm9kZXMgdG8gcGxhY2UgbGVhZnMgYW5kIHRyZWVzLicpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxXb2UpLEVwZSksJ0hpZ2ggRGVncmVlIE5vZGUgVGhyZXNob2xkJyksJ1doZXRoZXIgYSBub2RlIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhpZ2ggZGVncmVlLicpLG1lYigxNikpLFg1YyksSkkpLHBxYihMNWMpKSkpO280YyhhLFdvZSxWb2UsdHJ1ZSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsWG9lKSxFcGUpLCdIaWdoIERlZ3JlZSBOb2RlIE1heGltdW0gVHJlZSBIZWlnaHQnKSwnTWF4aW11bSBoZWlnaHQgb2YgYSBzdWJ0cmVlIGNvbm5lY3RlZCB0byBhIGhpZ2ggZGVncmVlIG5vZGUgdG8gYmUgbW92ZWQgdG8gc2VwYXJhdGUgbGF5ZXJzLicpLG1lYig1KSksWDVjKSxKSSkscHFiKEw1YykpKSk7bzRjKGEsWG9lLFZvZSx0cnVlKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxZb2UpLEZwZSksJ0dyYXBoIFdyYXBwaW5nIFN0cmF0ZWd5JyksXCJGb3IgY2VydGFpbiBncmFwaHMgYW5kIGNlcnRhaW4gcHJlc2NyaWJlZCBkcmF3aW5nIGFyZWFzIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3BsaXQgdGhlIGxhaWQgb3V0IGdyYXBoIGludG8gY2h1bmtzIHRoYXQgYXJlIHBsYWNlZCBzaWRlIGJ5IHNpZGUuIFRoZSBlZGdlcyB0aGF0IGNvbm5lY3QgZGlmZmVyZW50IGNodW5rcyBhcmUgJ3dyYXBwZWQnIGFyb3VuZCBmcm9tIHRoZSBlbmQgb2Ygb25lIGNodW5rIHRvIHRoZSBzdGFydCBvZiB0aGUgb3RoZXIgY2h1bmsuIFRoZSBwb2ludHMgYmV0d2VlbiB0aGUgY2h1bmtzIGFyZSByZWZlcnJlZCB0byBhcyAnY3V0cycuXCIpLGJ3YyksVjVjKSxqWCkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsWm9lKSxGcGUpLCdBZGRpdGlvbmFsIFdyYXBwZWQgRWRnZXMgU3BhY2luZycpLCdUbyB2aXN1YWxseSBzZXBhcmF0ZSBlZGdlcyB0aGF0IGFyZSB3cmFwcGVkIGZyb20gcmVndWxhcmx5IHJvdXRlZCBlZGdlcyBhbiBhZGRpdGlvbmFsIHNwYWNpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtIG9mIHRoaXMgbGF5b3V0IG9wdGlvbi4gVGhlIHNwYWNpbmcgaXMgYWRkZWQgdG8gdGhlIHJlZ3VsYXIgZWRnZU5vZGUgc3BhY2luZy4nKSwxMCksVTVjKSxCSSkscHFiKEw1YykpKSk7bzRjKGEsWm9lLFlvZSxJdmMpO280YyhhLFpvZSxZb2UsSnZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yywkb2UpLEZwZSksJ0NvcnJlY3Rpb24gRmFjdG9yIGZvciBXcmFwcGluZycpLFwiQXQgdGltZXMgYW5kIGZvciBjZXJ0YWluIHR5cGVzIG9mIGdyYXBocyB0aGUgZXhlY3V0ZWQgd3JhcHBpbmcgbWF5IHByb2R1Y2UgcmVzdWx0cyB0aGF0IGFyZSBjb25zaXN0ZW50bHkgYmlhc2VkIGluIHRoZSBzYW1lIGZhc2hpb246IGVpdGhlciB3cmFwcGluZyB0byBvZnRlbiBvciB0byByYXJlbHkuIFRoaXMgZmFjdG9yIGNhbiBiZSB1c2VkIHRvIGNvcnJlY3QgdGhlIGJpYXMuIEludGVybmFsbHksIGl0IGlzIHNpbXBseSBtdWx0aXBsaWVkIHdpdGggdGhlICdhc3BlY3QgcmF0aW8nIGxheW91dCBvcHRpb24uXCIpLDEpLFU1YyksQkkpLHBxYihMNWMpKSkpO280YyhhLCRvZSxZb2UsTHZjKTtvNGMoYSwkb2UsWW9lLE12Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsX29lKSxHcGUpLCdDdXR0aW5nIFN0cmF0ZWd5JyksJ1RoZSBzdHJhdGVneSBieSB3aGljaCB0aGUgbGF5ZXIgaW5kZXhlcyBhcmUgZGV0ZXJtaW5lZCBhdCB3aGljaCB0aGUgbGF5ZXJpbmcgY3J1bWJsZXMgaW50byBjaHVua3MuJyksVHZjKSxWNWMpLEhXKSxwcWIoTDVjKSkpKTtvNGMoYSxfb2UsWW9lLFV2Yyk7bzRjKGEsX29lLFlvZSxWdmMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYXBlKSxHcGUpLCdNYW51YWxseSBTcGVjaWZpZWQgQ3V0cycpLCdBbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBoZXIgb3duIGN1dHMgZm9yIGEgY2VydGFpbiBncmFwaC4nKSxZNWMpLHlLKSxwcWIoTDVjKSkpKTtvNGMoYSxhcGUsX29lLE92Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYnBlKSwnd3JhcHBpbmcuY3V0dGluZy5tc2QnKSwnTVNEIEZyZWVkb20nKSwnVGhlIE1TRCBjdXR0aW5nIHN0cmF0ZWd5IHN0YXJ0cyB3aXRoIGFuIGluaXRpYWwgZ3Vlc3Mgb24gdGhlIG51bWJlciBvZiBjaHVua3MgdGhlIGdyYXBoIHNob3VsZCBiZSBzcGxpdCBpbnRvLiBUaGUgZnJlZWRvbSBzcGVjaWZpZXMgaG93IG11Y2ggdGhlIHN0cmF0ZWd5IG1heSBkZXZpYXRlIGZyb20gdGhpcyBndWVzcy4gRS5nLiBpZiBhbiBpbml0aWFsIG51bWJlciBvZiAzIGlzIGNvbXB1dGVkLCBhIGZyZWVkb20gb2YgMSBhbGxvd3MgMiwgMywgYW5kIDQgY3V0cy4nKSxRdmMpLFg1YyksSkkpLHBxYihMNWMpKSkpO280YyhhLGJwZSxfb2UsUnZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxjcGUpLEhwZSksJ1ZhbGlkaWZpY2F0aW9uIFN0cmF0ZWd5JyksJ1doZW4gd3JhcHBpbmcgZ3JhcGhzLCBvbmUgY2FuIHNwZWNpZnkgaW5kaWNlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBhcyBzcGxpdCBwb2ludHMuIFRoZSB2YWxpZGlmaWNhdGlvbiBzdHJhdGVneSBtYWtlcyBzdXJlIGV2ZXJ5IGNvbXB1dGVkIHNwbGl0IHBvaW50IGlzIGFsbG93ZWQuJyksZ3djKSxWNWMpLGlYKSxwcWIoTDVjKSkpKTtvNGMoYSxjcGUsWW9lLGh3Yyk7bzRjKGEsY3BlLFlvZSxpd2MpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZHBlKSxIcGUpLCdWYWxpZCBJbmRpY2VzIGZvciBXcmFwcGluZycpLG51bGwpLFk1YykseUspLHBxYihMNWMpKSkpO280YyhhLGRwZSxZb2UsZHdjKTtvNGMoYSxkcGUsWW9lLGV3Yyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZXBlKSxJcGUpLCdJbXByb3ZlIEN1dHMnKSwnRm9yIGdlbmVyYWwgZ3JhcGhzIGl0IGlzIGltcG9ydGFudCB0aGF0IG5vdCB0b28gbWFueSBlZGdlcyB3cmFwIGJhY2t3YXJkcy4gVGh1cyBhIGNvbXByb21pc2UgYmV0d2VlbiBldmVubHktZGlzdHJpYnV0ZWQgY3V0cyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBjdXQgZWRnZXMgaXMgc291Z2h0LicpLHRydWUpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO280YyhhLGVwZSxZb2UsWnZjKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxmcGUpLElwZSksJ0Rpc3RhbmNlIFBlbmFsdHkgV2hlbiBJbXByb3ZpbmcgQ3V0cycpLG51bGwpLDIpLFU1YyksQkkpLHBxYihMNWMpKSkpO280YyhhLGZwZSxZb2UsWHZjKTtvNGMoYSxmcGUsZXBlLHRydWUpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGdwZSksSXBlKSwnSW1wcm92ZSBXcmFwcGVkIEVkZ2VzJyksJ1RoZSBpbml0aWFsIHdyYXBwaW5nIGlzIHBlcmZvcm1lZCBpbiBhIHZlcnkgc2ltcGxlIHdheS4gQXMgYSBjb25zZXF1ZW5jZSwgZWRnZXMgdGhhdCB3cmFwIGZyb20gb25lIGNodW5rIHRvIGFub3RoZXIgbWF5IGJlIHVubmVjZXNzYXJpbHkgbG9uZy4gQWN0aXZhdGluZyB0aGlzIG9wdGlvbiB0cmllcyB0byBzaG9ydGVuIHN1Y2ggZWRnZXMuJyksdHJ1ZSksVDVjKSx3SSkscHFiKEw1YykpKSk7bzRjKGEsZ3BlLFlvZSxfdmMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGhwZSksSnBlKSwnRWRnZSBMYWJlbCBTaWRlIFNlbGVjdGlvbicpLCdNZXRob2QgdG8gZGVjaWRlIG9uIGVkZ2UgbGFiZWwgc2lkZXMuJyksdHVjKSxWNWMpLExXKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxpcGUpLEpwZSksJ0VkZ2UgQ2VudGVyIExhYmVsIFBsYWNlbWVudCBTdHJhdGVneScpLCdEZXRlcm1pbmVzIGluIHdoaWNoIGxheWVyIGNlbnRlciBsYWJlbHMgb2YgbG9uZyBlZGdlcyBzaG91bGQgYmUgcGxhY2VkLicpLHJ1YyksVjVjKSxFVykscXFiKEw1YyxPQyhHQyhlMSwxKSxLaWUsMTc1LDAsW0o1Y10pKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxqcGUpLEtwZSksJ0NvbnNpZGVyIE1vZGVsIE9yZGVyJyksJ1ByZXNlcnZlcyB0aGUgb3JkZXIgb2Ygbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBtb2RlbCBmaWxlIGlmIHRoaXMgZG9lcyBub3QgbGVhZCB0byBhZGRpdGlvbmFsIGVkZ2UgY3Jvc3NpbmdzLiBEZXBlbmRpbmcgb24gdGhlIHN0cmF0ZWd5IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSBzaW5jZSB0aGUgbm9kZSBhbmQgZWRnZSBvcmRlciBtaWdodCBiZSBjb25mbGljdGluZy4nKSxXdGMpLFY1YyksYlgpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGtwZSksS3BlKSwnTm8gTW9kZWwgT3JkZXInKSwnU2V0IG9uIGEgbm9kZSB0byBub3Qgc2V0IGEgbW9kZWwgb3JkZXIgZm9yIHRoaXMgbm9kZSBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWwgbm9kZS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsbHBlKSxLcGUpLCdDb25zaWRlciBNb2RlbCBPcmRlciBmb3IgQ29tcG9uZW50cycpLCdJZiBzZXQgdG8gTk9ORSB0aGUgdXN1YWwgb3JkZXJpbmcgc3RyYXRlZ3kgKGJ5IGN1bXVsYXRpdmUgbm9kZSBwcmlvcml0eSBhbmQgc2l6ZSBvZiBub2RlcykgaXMgdXNlZC4gSU5TSURFX1BPUlRfU0lERVMgb3JkZXJzIHRoZSBjb21wb25lbnRzIHdpdGggZXh0ZXJuYWwgcG9ydHMgb25seSBpbnNpZGUgdGhlIGdyb3VwcyB3aXRoIHRoZSBzYW1lIHBvcnQgc2lkZS4gRk9SQ0VfTU9ERUxfT1JERVIgZW5mb3JjZXMgdGhlIG1vZGUgb3JkZXIgb24gY29tcG9uZW50cy4gVGhpcyBvcHRpb24gbWlnaHQgcHJvZHVjZSBiYWQgYWxpZ25tZW50cyBhbmQgc3ViIG9wdGltYWwgZHJhd2luZ3MgaW4gdGVybXMgb2YgdXNlZCBhcmVhIHNpbmNlIHRoZSBvcmRlcmluZyBzaG91bGQgYmUgcmVzcGVjdGVkLicpLFB0YyksVjVjKSxoUSkscHFiKEw1YykpKSk7bzRjKGEsbHBlLHptZSxudWxsKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxtcGUpLEtwZSksJ0xvbmcgRWRnZSBPcmRlcmluZyBTdHJhdGVneScpLCdJbmRpY2F0ZXMgd2hldGhlciBsb25nIGVkZ2VzIGFyZSBzb3J0ZWQgdW5kZXIsIG92ZXIsIG9yIGVxdWFsIHRvIG5vZGVzIHRoYXQgaGF2ZSBubyBjb25uZWN0aW9uIHRvIGEgcHJldmlvdXMgbGF5ZXIgaW4gYSBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQgbGF5b3V0LiBVbmRlciBhbmQgb3ZlciBjaGFuZ2VzIHRvIHJpZ2h0IGFuZCBsZWZ0IGluIGEgdmVydGljYWwgbGF5b3V0LicpLFR0YyksVjVjKSxaVykscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsbnBlKSxLcGUpLCdDcm9zc2luZyBDb3VudGVyIE5vZGUgT3JkZXIgSW5mbHVlbmNlJyksJ0luZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgbm9kZSBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgbm9kZSBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4nKSwwKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTtvNGMoYSxucGUsanBlLG51bGwpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG9wZSksS3BlKSwnQ3Jvc3NpbmcgQ291bnRlciBQb3J0IE9yZGVyIEluZmx1ZW5jZScpLCdJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIHBvcnQgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIHBvcnQgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuJyksMCksVTVjKSxCSSkscHFiKEw1YykpKSk7bzRjKGEsb3BlLGpwZSxudWxsKTtPeWMoKG5ldyBQeWMsYSkpfTt2YXIgSXRjLEp0YyxLdGMsTHRjLE10YyxOdGMsT3RjLFB0YyxRdGMsUnRjLFN0YyxUdGMsVXRjLFZ0YyxXdGMsWHRjLFl0YyxadGMsJHRjLF90YyxhdWMsYnVjLGN1YyxkdWMsZXVjLGZ1YyxndWMsaHVjLGl1YyxqdWMsa3VjLGx1YyxtdWMsbnVjLG91YyxwdWMscXVjLHJ1YyxzdWMsdHVjLHV1Yyx2dWMsd3VjLHh1Yyx5dWMsenVjLEF1YyxCdWMsQ3VjLER1YyxFdWMsRnVjLEd1YyxIdWMsSXVjLEp1YyxLdWMsTHVjLE11YyxOdWMsT3VjLFB1YyxRdWMsUnVjLFN1YyxUdWMsVXVjLFZ1YyxXdWMsWHVjLFl1YyxadWMsJHVjLF91YyxhdmMsYnZjLGN2YyxkdmMsZXZjLGZ2YyxndmMsaHZjLGl2YyxqdmMsa3ZjLGx2YyxtdmMsbnZjLG92YyxwdmMscXZjLHJ2YyxzdmMsdHZjLHV2Yyx2dmMsd3ZjLHh2Yyx5dmMsenZjLEF2YyxCdmMsQ3ZjLER2YyxFdmMsRnZjLEd2YyxIdmMsSXZjLEp2YyxLdmMsTHZjLE12YyxOdmMsT3ZjLFB2YyxRdmMsUnZjLFN2YyxUdmMsVXZjLFZ2YyxXdmMsWHZjLFl2YyxadmMsJHZjLF92Yyxhd2MsYndjLGN3Yyxkd2MsZXdjLGZ3Yyxnd2MsaHdjLGl3Yzt2YXIgVVc9bWRiKFNuZSwnTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXInLDg0OCk7YmNiKDk4NiwxLGFsZSxQeWMpO18uUWU9ZnVuY3Rpb24gUXljKGEpe095YyhhKX07dmFyIG13Yyxud2Msb3djLHB3Yyxxd2MscndjLHN3Yyx0d2MsdXdjLHZ3Yyx3d2MseHdjLHl3Yyx6d2MsQXdjLEJ3YyxDd2MsRHdjLEV3YyxGd2MsR3djLEh3YyxJd2MsSndjLEt3YyxMd2MsTXdjLE53YyxPd2MsUHdjLFF3YyxSd2MsU3djLFR3YyxVd2MsVndjLFd3YyxYd2MsWXdjLFp3Yywkd2MsX3djLGF4YyxieGMsY3hjLGR4YyxleGMsZnhjLGd4YyxoeGMsaXhjLGp4YyxreGMsbHhjLG14YyxueGMsb3hjLHB4YyxxeGMscnhjLHN4Yyx0eGMsdXhjLHZ4Yyx3eGMseHhjLHl4Yyx6eGMsQXhjLEJ4YyxDeGMsRHhjLEV4YyxGeGMsR3hjLEh4YyxJeGMsSnhjLEt4YyxMeGMsTXhjLE54YyxPeGMsUHhjLFF4YyxSeGMsU3hjLFR4YyxVeGMsVnhjLFd4YyxYeGMsWXhjLFp4YywkeGMsX3hjLGF5YyxieWMsY3ljLGR5YyxleWMsZnljLGd5YyxoeWMsaXljLGp5YyxreWMsbHljLG15YyxueWMsb3ljLHB5YyxxeWMscnljLHN5Yyx0eWMsdXljLHZ5Yyx3eWMseHljLHl5Yyx6eWMsQXljLEJ5YyxDeWMsRHljLEV5YyxGeWMsR3ljLEh5YyxJeWMsSnljLEt5YyxMeWMsTXljO3ZhciBXVz1tZGIoU25lLCdMYXllcmVkT3B0aW9ucycsOTg2KTtiY2IoOTg3LDEse30sUnljKTtfLiRlPWZ1bmN0aW9uIFN5Yygpe3ZhciBhO3JldHVybiBhPW5ldyBqVWIsYX07Xy5fZT1mdW5jdGlvbiBUeWMoYSl7fTt2YXIgVlc9bWRiKFNuZSwnTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnknLDk4Nyk7YmNiKDEzNzIsMSx7fSk7Xy5hPTA7dmFyIFV5Yzt2YXIgJDE9bWRiKHlxZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXInLDEzNzIpO2JjYig3NzksMTM3Mix7fSxlemMpO3ZhciBiemMsY3pjO3ZhciBYVz1tZGIoU25lLCdMYXllcmVkU3BhY2luZ3MvTGF5ZXJlZFNwYWNpbmdzQnVpbGRlcicsNzc5KTtiY2IoMzEzLDIyLHszOjEsMzU6MSwyMjoxLDMxMzoxLDI0NjoxLDIzNDoxfSxuemMpO18uS2Y9ZnVuY3Rpb24gcHpjKCl7cmV0dXJuIG16Yyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBvemMoKXtyZXR1cm4gbXpjKHRoaXMpfTt2YXIgZnpjLGd6YyxoemMsaXpjLGp6YyxremM7dmFyIFlXPW5kYihTbmUsJ0xheWVyaW5nU3RyYXRlZ3knLDMxMyxDSSxyemMscXpjKTt2YXIgc3pjO2JjYigzNzgsMjIsezM6MSwzNToxLDIyOjEsMzc4OjF9LHp6Yyk7dmFyIHV6Yyx2emMsd3pjO3ZhciBaVz1uZGIoU25lLCdMb25nRWRnZU9yZGVyaW5nU3RyYXRlZ3knLDM3OCxDSSxCemMsQXpjKTt2YXIgQ3pjO2JjYigxOTcsMjIsezM6MSwzNToxLDIyOjEsMTk3OjF9LEt6Yyk7dmFyIEV6YyxGemMsR3pjLEh6Yzt2YXIgJFc9bmRiKFNuZSwnTm9kZUZsZXhpYmlsaXR5JywxOTcsQ0ksTnpjLE16Yyk7dmFyIE96YztiY2IoMzE1LDIyLHszOjEsMzU6MSwyMjoxLDMxNToxLDI0NjoxLDIzNDoxfSxYemMpO18uS2Y9ZnVuY3Rpb24gWnpjKCl7cmV0dXJuIFd6Yyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBZemMoKXtyZXR1cm4gV3pjKHRoaXMpfTt2YXIgUXpjLFJ6YyxTemMsVHpjLFV6Yzt2YXIgX1c9bmRiKFNuZSwnTm9kZVBsYWNlbWVudFN0cmF0ZWd5JywzMTUsQ0ksX3pjLCR6Yyk7dmFyIGFBYztiY2IoMjYwLDIyLHszOjEsMzU6MSwyMjoxLDI2MDoxfSxsQWMpO3ZhciBjQWMsZEFjLGVBYyxmQWMsZ0FjLGhBYyxpQWMsakFjO3ZhciBhWD1uZGIoU25lLCdOb2RlUHJvbW90aW9uU3RyYXRlZ3knLDI2MCxDSSxuQWMsbUFjKTt2YXIgb0FjO2JjYigzMzksMjIsezM6MSwzNToxLDIyOjEsMzM5OjF9LHVBYyk7dmFyIHFBYyxyQWMsc0FjO3ZhciBiWD1uZGIoU25lLCdPcmRlcmluZ1N0cmF0ZWd5JywzMzksQ0ksd0FjLHZBYyk7dmFyIHhBYztiY2IoNDIxLDIyLHszOjEsMzU6MSwyMjoxLDQyMToxfSxDQWMpO3ZhciB6QWMsQUFjO3ZhciBjWD1uZGIoU25lLCdQb3J0U29ydGluZ1N0cmF0ZWd5Jyw0MjEsQ0ksRUFjLERBYyk7dmFyIEZBYztiY2IoNDUyLDIyLHszOjEsMzU6MSwyMjoxLDQ1MjoxfSxMQWMpO3ZhciBIQWMsSUFjLEpBYzt2YXIgZFg9bmRiKFNuZSwnUG9ydFR5cGUnLDQ1MixDSSxOQWMsTUFjKTt2YXIgT0FjO2JjYigzNzUsMjIsezM6MSwzNToxLDIyOjEsMzc1OjF9LFVBYyk7dmFyIFFBYyxSQWMsU0FjO3ZhciBlWD1uZGIoU25lLCdTZWxmTG9vcERpc3RyaWJ1dGlvblN0cmF0ZWd5JywzNzUsQ0ksV0FjLFZBYyk7dmFyIFhBYztiY2IoMzc2LDIyLHszOjEsMzU6MSwyMjoxLDM3NjoxfSxhQmMpO3ZhciBaQWMsJEFjO3ZhciBmWD1uZGIoU25lLCdTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3knLDM3NixDSSxjQmMsYkJjKTt2YXIgZEJjO2JjYigzMDQsMSx7MzA0OjF9LG9CYyk7dmFyIGdYPW1kYihTbmUsJ1NwYWNpbmdzJywzMDQpO2JjYigzMzYsMjIsezM6MSwzNToxLDIyOjEsMzM2OjF9LHVCYyk7dmFyIHFCYyxyQmMsc0JjO3ZhciBoWD1uZGIoU25lLCdTcGxpbmVSb3V0aW5nTW9kZScsMzM2LENJLHdCYyx2QmMpO3ZhciB4QmM7YmNiKDMzOCwyMix7MzoxLDM1OjEsMjI6MSwzMzg6MX0sREJjKTt2YXIgekJjLEFCYyxCQmM7dmFyIGlYPW5kYihTbmUsJ1ZhbGlkaWZ5U3RyYXRlZ3knLDMzOCxDSSxGQmMsRUJjKTt2YXIgR0JjO2JjYigzNzcsMjIsezM6MSwzNToxLDIyOjEsMzc3OjF9LE1CYyk7dmFyIElCYyxKQmMsS0JjO3ZhciBqWD1uZGIoU25lLCdXcmFwcGluZ1N0cmF0ZWd5JywzNzcsQ0ksT0JjLE5CYyk7dmFyIFBCYztiY2IoMTM4MywxLEJxZSxWQmMpO18uWWY9ZnVuY3Rpb24gV0JjKGEpe3JldHVybiBCRChhLDM3KSxSQmN9O18ucGY9ZnVuY3Rpb24gWEJjKGEsYil7VUJjKHRoaXMsQkQoYSwzNyksYil9O3ZhciBSQmM7dmFyIGtYPW1kYihDcWUsJ0RlcHRoRmlyc3RDeWNsZUJyZWFrZXInLDEzODMpO2JjYig3ODIsMSxCcWUsYUNjKTtfLllmPWZ1bmN0aW9uIGNDYyhhKXtyZXR1cm4gQkQoYSwzNyksWUJjfTtfLnBmPWZ1bmN0aW9uIGRDYyhhLGIpeyRCYyh0aGlzLEJEKGEsMzcpLGIpfTtfLlpmPWZ1bmN0aW9uIGJDYyhhKXtyZXR1cm4gQkQoSWtiKGEsQnViKHRoaXMuZCxhLmMubGVuZ3RoKSksMTApfTt2YXIgWUJjO3ZhciBsWD1tZGIoQ3FlLCdHcmVlZHlDeWNsZUJyZWFrZXInLDc4Mik7YmNiKDEzODYsNzgyLEJxZSxlQ2MpO18uWmY9ZnVuY3Rpb24gZkNjKGEpe3ZhciBiLGMsZCxlO2U9bnVsbDtiPU9oZTtmb3IoZD1uZXcgb2xiKGEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUJEKG1sYihkKSwxMCk7aWYod05iKGMsKHd0YygpLFpzYykpJiZCRCh2TmIoYyxac2MpLDE5KS5hPGIpe2I9QkQodk5iKGMsWnNjKSwxOSkuYTtlPWN9fWlmKCFlKXtyZXR1cm4gQkQoSWtiKGEsQnViKHRoaXMuZCxhLmMubGVuZ3RoKSksMTApfXJldHVybiBlfTt2YXIgbVg9bWRiKENxZSwnR3JlZWR5TW9kZWxPcmRlckN5Y2xlQnJlYWtlcicsMTM4Nik7YmNiKDEzODQsMSxCcWUsa0NjKTtfLllmPWZ1bmN0aW9uIGxDYyhhKXtyZXR1cm4gQkQoYSwzNyksZ0NjfTtfLnBmPWZ1bmN0aW9uIG1DYyhhLGIpe2pDYyh0aGlzLEJEKGEsMzcpLGIpfTt2YXIgZ0NjO3ZhciBuWD1tZGIoQ3FlLCdJbnRlcmFjdGl2ZUN5Y2xlQnJlYWtlcicsMTM4NCk7YmNiKDEzODUsMSxCcWUsckNjKTtfLllmPWZ1bmN0aW9uIHNDYyhhKXtyZXR1cm4gQkQoYSwzNyksbkNjfTtfLnBmPWZ1bmN0aW9uIHRDYyhhLGIpe3FDYyh0aGlzLEJEKGEsMzcpLGIpfTtfLmE9MDtfLmI9MDt2YXIgbkNjO3ZhciBvWD1tZGIoQ3FlLCdNb2RlbE9yZGVyQ3ljbGVCcmVha2VyJywxMzg1KTtiY2IoMTM4OSwxLEJxZSxEQ2MpO18uWWY9ZnVuY3Rpb24gRUNjKGEpe3JldHVybiBCRChhLDM3KSx1Q2N9O18ucGY9ZnVuY3Rpb24gRkNjKGEsYil7QkNjKHRoaXMsQkQoYSwzNyksYil9O3ZhciB1Q2M7dmFyIHJYPW1kYihEcWUsJ0NvZmZtYW5HcmFoYW1MYXllcmVyJywxMzg5KTtiY2IoMTM5MCwxLERrZSxHQ2MpO18udWU9ZnVuY3Rpb24gSENjKGEsYil7cmV0dXJuIHhDYyh0aGlzLmEsQkQoYSwxMCksQkQoYiwxMCkpfTtfLkZiPWZ1bmN0aW9uIElDYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gSkNjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBwWD1tZGIoRHFlLCdDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlJywxMzkwKTtiY2IoMTM5MSwxLERrZSxLQ2MpO18udWU9ZnVuY3Rpb24gTENjKGEsYil7cmV0dXJuIEFDYyh0aGlzLmEsQkQoYSwxMCksQkQoYiwxMCkpfTtfLkZiPWZ1bmN0aW9uIE1DYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gTkNjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBxWD1tZGIoRHFlLCdDb2ZmbWFuR3JhaGFtTGF5ZXJlci9sYW1iZGEkMSRUeXBlJywxMzkxKTtiY2IoMTM5MiwxLEJxZSxRQ2MpO18uWWY9ZnVuY3Rpb24gUkNjKGEpe3JldHVybiBCRChhLDM3KSxlM2MoZTNjKGUzYyhuZXcgajNjLChxVWIoKSxsVWIpLChTOGIoKSxuOGIpKSxtVWIsdzhiKSxuVWIsdjhiKX07Xy5wZj1mdW5jdGlvbiBTQ2MoYSxiKXtQQ2ModGhpcyxCRChhLDM3KSxiKX07dmFyIHRYPW1kYihEcWUsJ0ludGVyYWN0aXZlTGF5ZXJlcicsMTM5Mik7YmNiKDU2OSwxLHs1Njk6MX0sVENjKTtfLmE9MDtfLmM9MDt2YXIgc1g9bWRiKERxZSwnSW50ZXJhY3RpdmVMYXllcmVyL0xheWVyU3BhbicsNTY5KTtiY2IoMTM4OCwxLEJxZSxaQ2MpO18uWWY9ZnVuY3Rpb24gJENjKGEpe3JldHVybiBCRChhLDM3KSxVQ2N9O18ucGY9ZnVuY3Rpb24gX0NjKGEsYil7V0NjKHRoaXMsQkQoYSwzNyksYil9O3ZhciBVQ2M7dmFyIHVYPW1kYihEcWUsJ0xvbmdlc3RQYXRoTGF5ZXJlcicsMTM4OCk7YmNiKDEzOTUsMSxCcWUsaURjKTtfLllmPWZ1bmN0aW9uIGpEYyhhKXtyZXR1cm4gQkQoYSwzNyksZTNjKGUzYyhlM2MobmV3IGozYywocVViKCksbFViKSwoUzhiKCksWjdiKSksbVViLHc4YiksblViLHY4Yil9O18ucGY9ZnVuY3Rpb24ga0RjKGEsYil7Z0RjKHRoaXMsQkQoYSwzNyksYil9O18uYT0wO18uYj0wO18uZD0wO3ZhciBhRGMsYkRjO3ZhciB3WD1tZGIoRHFlLCdNaW5XaWR0aExheWVyZXInLDEzOTUpO2JjYigxMzk2LDEsRGtlLG1EYyk7Xy51ZT1mdW5jdGlvbiBuRGMoYSxiKXtyZXR1cm4gbERjKHRoaXMsQkQoYSwxMCksQkQoYiwxMCkpfTtfLkZiPWZ1bmN0aW9uIG9EYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gcERjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciB2WD1tZGIoRHFlLCdNaW5XaWR0aExheWVyZXIvTWluT3V0Z29pbmdFZGdlc0NvbXBhcmF0b3InLDEzOTYpO2JjYigxMzg3LDEsQnFlLHhEYyk7Xy5ZZj1mdW5jdGlvbiB5RGMoYSl7cmV0dXJuIEJEKGEsMzcpLHFEY307Xy5wZj1mdW5jdGlvbiB6RGMoYSxiKXt3RGModGhpcyxCRChhLDM3KSxiKX07dmFyIHFEYzt2YXIgeFg9bWRiKERxZSwnTmV0d29ya1NpbXBsZXhMYXllcmVyJywxMzg3KTtiY2IoMTM5MywxLEJxZSxMRGMpO18uWWY9ZnVuY3Rpb24gTURjKGEpe3JldHVybiBCRChhLDM3KSxlM2MoZTNjKGUzYyhuZXcgajNjLChxVWIoKSxsVWIpLChTOGIoKSxaN2IpKSxtVWIsdzhiKSxuVWIsdjhiKX07Xy5wZj1mdW5jdGlvbiBORGMoYSxiKXtJRGModGhpcyxCRChhLDM3KSxiKX07Xy5kPTA7Xy5mPTA7Xy5nPTA7Xy5pPTA7Xy5zPTA7Xy50PTA7Xy51PTA7dmFyIHpYPW1kYihEcWUsJ1N0cmV0Y2hXaWR0aExheWVyZXInLDEzOTMpO2JjYigxMzk0LDEsRGtlLFBEYyk7Xy51ZT1mdW5jdGlvbiBRRGMoYSxiKXtyZXR1cm4gT0RjKEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiBSRGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFNEYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgeVg9bWRiKERxZSwnU3RyZXRjaFdpZHRoTGF5ZXJlci8xJywxMzk0KTtiY2IoNDAyLDEsRXFlKTtfLk5mPWZ1bmN0aW9uIGZFYyhhLGIsYyxkLGUsZil7fTtfLl9mPWZ1bmN0aW9uIGRFYyhhLGIsYyl7cmV0dXJuIFlEYyh0aGlzLGEsYixjKX07Xy5NZj1mdW5jdGlvbiBlRWMoKXt0aGlzLmc9S0MoVkQsRnFlLDI1LHRoaXMuZCwxNSwxKTt0aGlzLmY9S0MoVkQsRnFlLDI1LHRoaXMuZCwxNSwxKX07Xy5PZj1mdW5jdGlvbiBnRWMoYSxiKXt0aGlzLmVbYV09S0MoV0Qsb2plLDI1LGJbYV0ubGVuZ3RoLDE1LDEpfTtfLlBmPWZ1bmN0aW9uIGhFYyhhLGIsYyl7dmFyIGQ7ZD1jW2FdW2JdO2QucD1iO3RoaXMuZVthXVtiXT1ifTtfLlFmPWZ1bmN0aW9uIGlFYyhhLGIsYyxkKXtCRChJa2IoZFthXVtiXS5qLGMpLDExKS5wPXRoaXMuZCsrfTtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgQlg9bWRiKEdxZSwnQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yJyw0MDIpO2JjYigxNjMzLDEsRGtlLGpFYyk7Xy51ZT1mdW5jdGlvbiBrRWMoYSxiKXtyZXR1cm4gX0RjKHRoaXMuYSxCRChhLDExKSxCRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gbEVjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBtRWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIEFYPW1kYihHcWUsJ0Fic3RyYWN0QmFyeWNlbnRlclBvcnREaXN0cmlidXRvci9sYW1iZGEkMCRUeXBlJywxNjMzKTtiY2IoODE3LDEsTW5lLHVFYyk7Xy5OZj1mdW5jdGlvbiB4RWMoYSxiLGMsZCxlLGYpe307Xy5QZj1mdW5jdGlvbiB6RWMoYSxiLGMpe307Xy5RZj1mdW5jdGlvbiBBRWMoYSxiLGMsZCl7fTtfLkxmPWZ1bmN0aW9uIHZFYygpe3JldHVybiBmYWxzZX07Xy5NZj1mdW5jdGlvbiB3RWMoKXt0aGlzLmM9dGhpcy5lLmE7dGhpcy5nPXRoaXMuZi5nfTtfLk9mPWZ1bmN0aW9uIHlFYyhhLGIpe2JbYV1bMF0uYy5wPWF9O18uUmY9ZnVuY3Rpb24gQkVjKCl7cmV0dXJuIGZhbHNlfTtfLmFnPWZ1bmN0aW9uIENFYyhhLGIsYyxkKXtpZihjKXtyRWModGhpcyxhKX1lbHNle29FYyh0aGlzLGEsZCk7cEVjKHRoaXMsYSxiKX1pZihhLmMubGVuZ3RoPjEpe0NjYihERCh2TmIoUV9iKCh0Q2IoMCxhLmMubGVuZ3RoKSxCRChhLmNbMF0sMTApKSksKE55YygpLEF3YykpKSk/WUdjKGEsdGhpcy5kLEJEKHRoaXMsNjYwKSk6KG1tYigpLE9rYihhLHRoaXMuZCkpO1BFYyh0aGlzLmUsYSl9fTtfLlNmPWZ1bmN0aW9uIERFYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpZihiIT1zRWMoYyxhLmxlbmd0aCkpe2Y9YVtiLShjPzE6LTEpXTtVRGModGhpcy5mLGYsYz8oS0FjKCksSUFjKTooS0FjKCksSEFjKSl9ZT1hW2JdWzBdO2s9IWR8fGUuaz09KGowYigpLGUwYik7aj1PdShhW2JdKTt0aGlzLmFnKGosayxmYWxzZSxjKTtnPTA7Zm9yKGk9bmV3IG9sYihqKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1CRChtbGIoaSksMTApO2FbYl1bZysrXT1ofXJldHVybiBmYWxzZX07Xy5UZj1mdW5jdGlvbiBFRWMoYSxiKXt2YXIgYyxkLGUsZixnO2c9c0VjKGIsYS5sZW5ndGgpO2Y9T3UoYVtnXSk7dGhpcy5hZyhmLGZhbHNlLHRydWUsYik7Yz0wO2ZvcihlPW5ldyBvbGIoZik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEwKTthW2ddW2MrK109ZH1yZXR1cm4gZmFsc2V9O3ZhciBFWD1tZGIoR3FlLCdCYXJ5Y2VudGVySGV1cmlzdGljJyw4MTcpO2JjYig2NTgsMSx7NjU4OjF9LEZFYyk7Xy5JYj1mdW5jdGlvbiBHRWMoKXtyZXR1cm4gJ0JhcnljZW50ZXJTdGF0ZSBbbm9kZT0nK3RoaXMuYysnLCBzdW1tZWRXZWlnaHQ9Jyt0aGlzLmQrJywgZGVncmVlPScrdGhpcy5iKycsIGJhcnljZW50ZXI9Jyt0aGlzLmErJywgdmlzaXRlZD0nK3RoaXMuZSsnXSd9O18uYj0wO18uZD0wO18uZT1mYWxzZTt2YXIgQ1g9bWRiKEdxZSwnQmFyeWNlbnRlckhldXJpc3RpYy9CYXJ5Y2VudGVyU3RhdGUnLDY1OCk7YmNiKDE4MDIsMSxEa2UsSEVjKTtfLnVlPWZ1bmN0aW9uIElFYyhhLGIpe3JldHVybiBxRWModGhpcy5hLEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiBKRWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIEtFYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgRFg9bWRiKEdxZSwnQmFyeWNlbnRlckhldXJpc3RpYy9sYW1iZGEkMCRUeXBlJywxODAyKTtiY2IoODE2LDEsTW5lLFNFYyk7Xy5NZj1mdW5jdGlvbiBURWMoKXt9O18uTmY9ZnVuY3Rpb24gVUVjKGEsYixjLGQsZSxmKXt9O18uUWY9ZnVuY3Rpb24gWEVjKGEsYixjLGQpe307Xy5PZj1mdW5jdGlvbiBWRWMoYSxiKXt0aGlzLmFbYV09S0MoQ1gsezM6MSw0OjEsNToxLDIwMTg6MX0sNjU4LGJbYV0ubGVuZ3RoLDAsMSk7dGhpcy5iW2FdPUtDKEZYLHszOjEsNDoxLDU6MSwyMDE5OjF9LDIzMyxiW2FdLmxlbmd0aCwwLDEpfTtfLlBmPWZ1bmN0aW9uIFdFYyhhLGIsYyl7T0VjKHRoaXMsY1thXVtiXSx0cnVlKX07Xy5jPWZhbHNlO3ZhciBIWD1tZGIoR3FlLCdGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyJyw4MTYpO2JjYigyMzMsMSx7MjMzOjF9LCRFYyxfRWMpO18uSWI9ZnVuY3Rpb24gYUZjKCl7dmFyIGEsYjtiPW5ldyBVZmI7Yi5hKz0nWyc7Zm9yKGE9MDthPHRoaXMuZC5sZW5ndGg7YSsrKXtRZmIoYixhMGIodGhpcy5kW2FdKSk7UkVjKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJlFmYihRZmIoKGIuYSs9JzwnLGIpLEpkYihSRWModGhpcy5nLHRoaXMuZFswXSkuYSkpLCc+Jyk7YTx0aGlzLmQubGVuZ3RoLTEmJihiLmErPVNoZSxiKX1yZXR1cm4gKGIuYSs9J10nLGIpLmF9O18uYT0wO18uYz0wO18uZj0wO3ZhciBGWD1tZGIoR3FlLCdGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCcsMjMzKTtiY2IoMTc5NywxLHFpZSxiRmMpO18udGQ9ZnVuY3Rpb24gY0ZjKGEpe09FYyh0aGlzLmEsQkQoYSwxMCksZmFsc2UpfTt2YXIgR1g9bWRiKEdxZSwnRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlJywxNzk3KTtiY2IoMjE0LDEsezIxNDoxLDIyNToxfSxmRmMpO18uTmY9ZnVuY3Rpb24gaEZjKGEsYixjLGQsZSxmKXt9O18uT2Y9ZnVuY3Rpb24gaUZjKGEsYil7fTtfLk1mPWZ1bmN0aW9uIGdGYygpe3RoaXMucj1LQyhXRCxvamUsMjUsdGhpcy5uLDE1LDEpfTtfLlBmPWZ1bmN0aW9uIGpGYyhhLGIsYyl7dmFyIGQsZTtlPWNbYV1bYl07ZD1lLmU7ISFkJiZFa2IodGhpcy5iLGQpfTtfLlFmPWZ1bmN0aW9uIGtGYyhhLGIsYyxkKXsrK3RoaXMubn07Xy5JYj1mdW5jdGlvbiBsRmMoKXtyZXR1cm4gd2xiKHRoaXMuZSxuZXcgVHFiKX07Xy5nPWZhbHNlO18uaT1mYWxzZTtfLm49MDtfLnM9ZmFsc2U7dmFyIElYPW1kYihHcWUsJ0dyYXBoSW5mb0hvbGRlcicsMjE0KTtiY2IoMTgzMiwxLE1uZSxwRmMpO18uTmY9ZnVuY3Rpb24gc0ZjKGEsYixjLGQsZSxmKXt9O18uT2Y9ZnVuY3Rpb24gdEZjKGEsYil7fTtfLlFmPWZ1bmN0aW9uIHZGYyhhLGIsYyxkKXt9O18uX2Y9ZnVuY3Rpb24gcUZjKGEsYixjKXtjJiZiPjA/KFJIYyh0aGlzLmEsYVtiLTFdLGFbYl0pLHVuZGVmaW5lZCk6IWMmJmI8YS5sZW5ndGgtMT8oUkhjKHRoaXMuYSxhW2JdLGFbYisxXSksdW5kZWZpbmVkKTpUSGModGhpcy5hLGFbYl0sYz8oVWNkKCksVGNkKTooVWNkKCksemNkKSk7cmV0dXJuIG1GYyh0aGlzLGEsYixjKX07Xy5NZj1mdW5jdGlvbiByRmMoKXt0aGlzLmQ9S0MoV0Qsb2plLDI1LHRoaXMuYywxNSwxKTt0aGlzLmE9bmV3IGRJYyh0aGlzLmQpfTtfLlBmPWZ1bmN0aW9uIHVGYyhhLGIsYyl7dmFyIGQ7ZD1jW2FdW2JdO3RoaXMuYys9ZC5qLmMubGVuZ3RofTtfLmM9MDt2YXIgSlg9bWRiKEdxZSwnR3JlZWR5UG9ydERpc3RyaWJ1dG9yJywxODMyKTtiY2IoMTQwMSwxLEJxZSxDRmMpO18uWWY9ZnVuY3Rpb24gREZjKGEpe3JldHVybiB6RmMoQkQoYSwzNykpfTtfLnBmPWZ1bmN0aW9uIEVGYyhhLGIpe0JGYyhCRChhLDM3KSxiKX07dmFyIHhGYzt2YXIgTFg9bWRiKEdxZSwnSW50ZXJhY3RpdmVDcm9zc2luZ01pbmltaXplcicsMTQwMSk7YmNiKDE0MDIsMSxEa2UsR0ZjKTtfLnVlPWZ1bmN0aW9uIEhGYyhhLGIpe3JldHVybiBGRmModGhpcyxCRChhLDEwKSxCRChiLDEwKSl9O18uRmI9ZnVuY3Rpb24gSUZjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBKRmMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIEtYPW1kYihHcWUsJ0ludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIvMScsMTQwMik7YmNiKDUwNywxLHs1MDc6MSwxMjM6MSw1MToxfSxmR2MpO18uWWY9ZnVuY3Rpb24gZ0djKGEpe3ZhciBiO3JldHVybiBCRChhLDM3KSxiPWszYyhLRmMpLGUzYyhiLChxVWIoKSxuVWIpLChTOGIoKSxIOGIpKSxifTtfLnBmPWZ1bmN0aW9uIGhHYyhhLGIpe1lGYyh0aGlzLEJEKGEsMzcpLGIpfTtfLmU9MDt2YXIgS0ZjO3ZhciBSWD1tZGIoR3FlLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXInLDUwNyk7YmNiKDEzOTgsMSxxaWUsaUdjKTtfLnRkPWZ1bmN0aW9uIGpHYyhhKXtNRmModGhpcy5hLEJEKGEsMjE0KSl9O3ZhciBNWD1tZGIoR3FlLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMG1ldGhvZHJlZiRjb21wYXJlRGlmZmVyZW50UmFuZG9taXplZExheW91dHMkVHlwZScsMTM5OCk7YmNiKDEzOTksMSxxaWUsa0djKTtfLnRkPWZ1bmN0aW9uIGxHYyhhKXtWRmModGhpcy5hLEJEKGEsMjE0KSl9O3ZhciBOWD1tZGIoR3FlLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMW1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc05vQ291bnRlciRUeXBlJywxMzk5KTtiY2IoMTQwMCwxLHFpZSxtR2MpO18udGQ9ZnVuY3Rpb24gbkdjKGEpe1hGYyh0aGlzLmEsQkQoYSwyMTQpKX07dmFyIE9YPW1kYihHcWUsJ0xheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8ybWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzV2l0aENvdW50ZXIkVHlwZScsMTQwMCk7YmNiKDQ1NCwyMix7MzoxLDM1OjEsMjI6MSw0NTQ6MX0sc0djKTt2YXIgb0djLHBHYyxxR2M7dmFyIFBYPW5kYihHcWUsJ0xheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci9Dcm9zc01pblR5cGUnLDQ1NCxDSSx1R2MsdEdjKTt2YXIgdkdjO2JjYigxMzk3LDEsT2llLHhHYyk7Xy5NYj1mdW5jdGlvbiB5R2MoYSl7cmV0dXJuIExGYygpLEJEKGEsMjkpLmEuYy5sZW5ndGg9PTB9O3ZhciBRWD1tZGIoR3FlLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZScsMTM5Nyk7YmNiKDE3OTksMSxNbmUsQkdjKTtfLk1mPWZ1bmN0aW9uIENHYygpe307Xy5OZj1mdW5jdGlvbiBER2MoYSxiLGMsZCxlLGYpe307Xy5RZj1mdW5jdGlvbiBHR2MoYSxiLGMsZCl7fTtfLk9mPWZ1bmN0aW9uIEVHYyhhLGIpe2JbYV1bMF0uYy5wPWE7dGhpcy5iW2FdPUtDKFNYLHszOjEsNDoxLDU6MSwxOTQ0OjF9LDY1OSxiW2FdLmxlbmd0aCwwLDEpfTtfLlBmPWZ1bmN0aW9uIEZHYyhhLGIsYyl7dmFyIGQ7ZD1jW2FdW2JdO2QucD1iO05DKHRoaXMuYlthXSxiLG5ldyBIR2MpfTt2YXIgVlg9bWRiKEdxZSwnTGF5ZXJTd2VlcFR5cGVEZWNpZGVyJywxNzk5KTtiY2IoNjU5LDEsezY1OToxfSxIR2MpO18uSWI9ZnVuY3Rpb24gSUdjKCl7cmV0dXJuICdOb2RlSW5mbyBbY29ubmVjdGVkRWRnZXM9Jyt0aGlzLmErJywgaGllcmFyY2hpY2FsSW5mbHVlbmNlPScrdGhpcy5iKycsIHJhbmRvbUluZmx1ZW5jZT0nK3RoaXMuYysnXSd9O18uYT0wO18uYj0wO18uYz0wO3ZhciBTWD1tZGIoR3FlLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvTm9kZUluZm8nLDY1OSk7YmNiKDE4MDAsMSxWa2UsSkdjKTtfLkxiPWZ1bmN0aW9uIEtHYyhhKXtyZXR1cm4gYTFiKG5ldyBiMWIoQkQoYSwxMSkuYikpfTtfLkZiPWZ1bmN0aW9uIExHYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gTUdjKGEpe3JldHVybiBhMWIobmV3IGIxYihCRChhLDExKS5iKSl9O3ZhciBUWD1tZGIoR3FlLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDAkVHlwZScsMTgwMCk7YmNiKDE4MDEsMSxWa2UsTkdjKTtfLkxiPWZ1bmN0aW9uIE9HYyhhKXtyZXR1cm4gYTFiKG5ldyBiMWIoQkQoYSwxMSkuYikpfTtfLkZiPWZ1bmN0aW9uIFBHYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gUUdjKGEpe3JldHVybiBhMWIobmV3IGIxYihCRChhLDExKS5iKSl9O3ZhciBVWD1tZGIoR3FlLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDEkVHlwZScsMTgwMSk7YmNiKDE4MzMsNDAyLEVxZSxSR2MpO18uJGY9ZnVuY3Rpb24gU0djKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7aj10aGlzLmc7c3dpdGNoKGMuZyl7Y2FzZSAxOntkPTA7ZT0wO2ZvcihpPW5ldyBvbGIoYS5qKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaSksMTEpO2lmKGcuZS5jLmxlbmd0aCE9MCl7KytkO2cuaj09KFVjZCgpLEFjZCkmJisrZX19Zj1iK2U7bD1iK2Q7Zm9yKGg9V19iKGEsKEtBYygpLEhBYykpLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTEpO2lmKGcuaj09KFVjZCgpLEFjZCkpe2pbZy5wXT1mOy0tZn1lbHNle2pbZy5wXT1sOy0tbH19cmV0dXJuIGR9Y2FzZSAyOntrPTA7Zm9yKGg9V19iKGEsKEtBYygpLElBYykpLktjKCk7aC5PYigpOyl7Zz1CRChoLlBiKCksMTEpOysraztqW2cucF09YitrfXJldHVybiBrfWRlZmF1bHQ6dGhyb3cgdmJiKG5ldyBWZGIpO319O3ZhciBXWD1tZGIoR3FlLCdMYXllclRvdGFsUG9ydERpc3RyaWJ1dG9yJywxODMzKTtiY2IoNjYwLDgxNyx7NjYwOjEsMjI1OjF9LFhHYyk7Xy5hZz1mdW5jdGlvbiBaR2MoYSxiLGMsZCl7aWYoYyl7ckVjKHRoaXMsYSl9ZWxzZXtvRWModGhpcyxhLGQpO3BFYyh0aGlzLGEsYil9aWYoYS5jLmxlbmd0aD4xKXtDY2IoREQodk5iKFFfYigodENiKDAsYS5jLmxlbmd0aCksQkQoYS5jWzBdLDEwKSkpLChOeWMoKSxBd2MpKSkpP1lHYyhhLHRoaXMuZCx0aGlzKToobW1iKCksT2tiKGEsdGhpcy5kKSk7Q2NiKEREKHZOYihRX2IoKHRDYigwLGEuYy5sZW5ndGgpLEJEKGEuY1swXSwxMCkpKSxBd2MpKSl8fFBFYyh0aGlzLmUsYSl9fTt2YXIgWVg9bWRiKEdxZSwnTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMnLDY2MCk7YmNiKDE4MDMsMSxEa2UsJEdjKTtfLnVlPWZ1bmN0aW9uIF9HYyhhLGIpe3JldHVybiBWR2ModGhpcy5hLEJEKGEsMTApLEJEKGIsMTApKX07Xy5GYj1mdW5jdGlvbiBhSGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGJIYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgWFg9bWRiKEdxZSwnTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZScsMTgwMyk7YmNiKDE0MDMsMSxCcWUsZkhjKTtfLllmPWZ1bmN0aW9uIGdIYyhhKXt2YXIgYjtyZXR1cm4gQkQoYSwzNyksYj1rM2MoY0hjKSxlM2MoYiwocVViKCksblViKSwoUzhiKCksSDhiKSksYn07Xy5wZj1mdW5jdGlvbiBoSGMoYSxiKXtlSGMoKEJEKGEsMzcpLGIpKX07dmFyIGNIYzt2YXIgWlg9bWRiKEdxZSwnTm9Dcm9zc2luZ01pbmltaXplcicsMTQwMyk7YmNiKDc5Niw0MDIsRXFlLGlIYyk7Xy4kZj1mdW5jdGlvbiBqSGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47bD10aGlzLmc7c3dpdGNoKGMuZyl7Y2FzZSAxOntlPTA7Zj0wO2ZvcihrPW5ldyBvbGIoYS5qKTtrLmE8ay5jLmMubGVuZ3RoOyl7aT1CRChtbGIoayksMTEpO2lmKGkuZS5jLmxlbmd0aCE9MCl7KytlO2kuaj09KFVjZCgpLEFjZCkmJisrZn19ZD0xLyhlKzEpO2c9YitmKmQ7bj1iKzEtZDtmb3Ioaj1XX2IoYSwoS0FjKCksSEFjKSkuS2MoKTtqLk9iKCk7KXtpPUJEKGouUGIoKSwxMSk7aWYoaS5qPT0oVWNkKCksQWNkKSl7bFtpLnBdPWc7Zy09ZH1lbHNle2xbaS5wXT1uO24tPWR9fWJyZWFrfWNhc2UgMjp7aD0wO2ZvcihrPW5ldyBvbGIoYS5qKTtrLmE8ay5jLmMubGVuZ3RoOyl7aT1CRChtbGIoayksMTEpO2kuZy5jLmxlbmd0aD09MHx8KytofWQ9MS8oaCsxKTttPWIrZDtmb3Ioaj1XX2IoYSwoS0FjKCksSUFjKSkuS2MoKTtqLk9iKCk7KXtpPUJEKGouUGIoKSwxMSk7bFtpLnBdPW07bSs9ZH1icmVha31kZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKCdQb3J0IHR5cGUgaXMgdW5kZWZpbmVkJykpO31yZXR1cm4gMX07dmFyICRYPW1kYihHcWUsJ05vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvcicsNzk2KTtiY2IoODA3LDEse30sbkhjLG9IYyk7dmFyIF9YPW1kYihHcWUsJ1N3ZWVwQ29weScsODA3KTtiY2IoMTc5OCwxLE1uZSxySGMpO18uT2Y9ZnVuY3Rpb24gdUhjKGEsYil7fTtfLk1mPWZ1bmN0aW9uIHNIYygpe3ZhciBhO2E9S0MoV0Qsb2plLDI1LHRoaXMuZiwxNSwxKTt0aGlzLmQ9bmV3IExJYyhhKTt0aGlzLmE9bmV3IGRJYyhhKX07Xy5OZj1mdW5jdGlvbiB0SGMoYSxiLGMsZCxlLGYpe3ZhciBnO2c9QkQoSWtiKGZbYV1bYl0uaixjKSwxMSk7ZS5jPT1nJiZlLmMuaS5jPT1lLmQuaS5jJiYrK3RoaXMuZVthXX07Xy5QZj1mdW5jdGlvbiB2SGMoYSxiLGMpe3ZhciBkO2Q9Y1thXVtiXTt0aGlzLmNbYV09dGhpcy5jW2FdfGQuaz09KGowYigpLGkwYil9O18uUWY9ZnVuY3Rpb24gd0hjKGEsYixjLGQpe3ZhciBlO2U9QkQoSWtiKGRbYV1bYl0uaixjKSwxMSk7ZS5wPXRoaXMuZisrO2UuZy5jLmxlbmd0aCtlLmUuYy5sZW5ndGg+MSYmKGUuaj09KFVjZCgpLHpjZCk/KHRoaXMuYlthXT10cnVlKTplLmo9PVRjZCYmYT4wJiYodGhpcy5iW2EtMV09dHJ1ZSkpfTtfLmY9MDt2YXIgYVk9bWRiKExuZSwnQWxsQ3Jvc3NpbmdzQ291bnRlcicsMTc5OCk7YmNiKDU4NywxLHt9LEJIYyk7Xy5iPTA7Xy5kPTA7dmFyIGJZPW1kYihMbmUsJ0JpbmFyeUluZGV4ZWRUcmVlJyw1ODcpO2JjYig1MjQsMSx7fSxkSWMpO3ZhciBESGMsRUhjO3ZhciBsWT1tZGIoTG5lLCdDcm9zc2luZ3NDb3VudGVyJyw1MjQpO2JjYigxOTA2LDEsRGtlLGhJYyk7Xy51ZT1mdW5jdGlvbiBpSWMoYSxiKXtyZXR1cm4gWUhjKHRoaXMuYSxCRChhLDExKSxCRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gakljKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBrSWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIGNZPW1kYihMbmUsJ0Nyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZScsMTkwNik7YmNiKDE5MDcsMSxEa2UsbEljKTtfLnVlPWZ1bmN0aW9uIG1JYyhhLGIpe3JldHVybiBaSGModGhpcy5hLEJEKGEsMTEpLEJEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBuSWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG9JYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgZFk9bWRiKExuZSwnQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMSRUeXBlJywxOTA3KTtiY2IoMTkwOCwxLERrZSxwSWMpO18udWU9ZnVuY3Rpb24gcUljKGEsYil7cmV0dXJuICRIYyh0aGlzLmEsQkQoYSwxMSksQkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIHJJYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gc0ljKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBlWT1tZGIoTG5lLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQyJFR5cGUnLDE5MDgpO2JjYigxOTA5LDEsRGtlLHRJYyk7Xy51ZT1mdW5jdGlvbiB1SWMoYSxiKXtyZXR1cm4gX0hjKHRoaXMuYSxCRChhLDExKSxCRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gdkljKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiB3SWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIGZZPW1kYihMbmUsJ0Nyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZScsMTkwOSk7YmNiKDE5MTAsMSxxaWUseEljKTtfLnRkPWZ1bmN0aW9uIHlJYyhhKXtlSWModGhpcy5hLEJEKGEsMTEpKX07dmFyIGdZPW1kYihMbmUsJ0Nyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZScsMTkxMCk7YmNiKDE5MTEsMSxPaWUsekljKTtfLk1iPWZ1bmN0aW9uIEFJYyhhKXtyZXR1cm4gZkljKHRoaXMuYSxCRChhLDExKSl9O3ZhciBoWT1tZGIoTG5lLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUnLDE5MTEpO2JjYigxOTEyLDEscWllLENJYyk7Xy50ZD1mdW5jdGlvbiBESWMoYSl7QkljKHRoaXMsYSl9O3ZhciBpWT1tZGIoTG5lLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ2JFR5cGUnLDE5MTIpO2JjYigxOTEzLDEscWllLEVJYyk7Xy50ZD1mdW5jdGlvbiBGSWMoYSl7dmFyIGI7RkhjKCk7V2piKHRoaXMuYiwoYj10aGlzLmEsQkQoYSwxMSksYikpfTt2YXIgalk9bWRiKExuZSwnQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNyRUeXBlJywxOTEzKTtiY2IoODI2LDEsVmtlLEdJYyk7Xy5MYj1mdW5jdGlvbiBISWMoYSl7cmV0dXJuIEZIYygpLHdOYihCRChhLDExKSwod3RjKCksZ3RjKSl9O18uRmI9ZnVuY3Rpb24gSUljKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBKSWMoYSl7cmV0dXJuIEZIYygpLHdOYihCRChhLDExKSwod3RjKCksZ3RjKSl9O3ZhciBrWT1tZGIoTG5lLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ4JFR5cGUnLDgyNik7YmNiKDE5MDUsMSx7fSxMSWMpO3ZhciBwWT1tZGIoTG5lLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyJywxOTA1KTtiY2IoNDY3LDEsezM1OjEsNDY3OjF9LE5JYyk7Xy53ZD1mdW5jdGlvbiBPSWMoYSl7cmV0dXJuIE1JYyh0aGlzLEJEKGEsNDY3KSl9O18uYj0wO18uYz0wO18uZT0wO18uZj0wO3ZhciBvWT1tZGIoTG5lLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZScsNDY3KTtiY2IoMzYyLDEsezM1OjEsMzYyOjF9LFFJYyk7Xy53ZD1mdW5jdGlvbiBSSWMoYSl7cmV0dXJuIFBJYyh0aGlzLEJEKGEsMzYyKSl9O18uYj0wO18uYz0wO3ZhciBuWT1tZGIoTG5lLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZUNvcm5lcicsMzYyKTtiY2IoNTIzLDIyLHszOjEsMzU6MSwyMjoxLDUyMzoxfSxWSWMpO3ZhciBTSWMsVEljO3ZhciBtWT1uZGIoTG5lLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZUNvcm5lci9UeXBlJyw1MjMsQ0ksWEljLFdJYyk7dmFyIFlJYztiY2IoMTQwNSwxLEJxZSxkSmMpO18uWWY9ZnVuY3Rpb24gZUpjKGEpe3JldHVybiBCRCh2TmIoQkQoYSwzNyksKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSk/X0ljOm51bGx9O18ucGY9ZnVuY3Rpb24gZkpjKGEsYil7Y0pjKHRoaXMsQkQoYSwzNyksYil9O3ZhciBfSWM7dmFyIHJZPW1kYihIcWUsJ0ludGVyYWN0aXZlTm9kZVBsYWNlcicsMTQwNSk7YmNiKDE0MDYsMSxCcWUsdEpjKTtfLllmPWZ1bmN0aW9uIHVKYyhhKXtyZXR1cm4gQkQodk5iKEJEKGEsMzcpLCh3dGMoKSxLc2MpKSwyMSkuSGMoKE9yYygpLEhyYykpP2dKYzpudWxsfTtfLnBmPWZ1bmN0aW9uIHZKYyhhLGIpe3JKYyh0aGlzLEJEKGEsMzcpLGIpfTt2YXIgZ0pjLGhKYyxpSmM7dmFyIHRZPW1kYihIcWUsJ0xpbmVhclNlZ21lbnRzTm9kZVBsYWNlcicsMTQwNik7YmNiKDI1NywxLHszNToxLDI1NzoxfSx6SmMpO18ud2Q9ZnVuY3Rpb24gQUpjKGEpe3JldHVybiB3SmModGhpcyxCRChhLDI1NykpfTtfLkZiPWZ1bmN0aW9uIEJKYyhhKXt2YXIgYjtpZihKRChhLDI1Nykpe2I9QkQoYSwyNTcpO3JldHVybiB0aGlzLmI9PWIuYn1yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24gQ0pjKCl7cmV0dXJuIHRoaXMuYn07Xy5JYj1mdW5jdGlvbiBESmMoKXtyZXR1cm4gJ2xzJytGZSh0aGlzLmUpfTtfLmE9MDtfLmI9MDtfLmM9LTE7Xy5kPS0xO18uZz0wO3ZhciBzWT1tZGIoSHFlLCdMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCcsMjU3KTtiY2IoMTQwOCwxLEJxZSwkSmMpO18uWWY9ZnVuY3Rpb24gX0pjKGEpe3JldHVybiBCRCh2TmIoQkQoYSwzNyksKHd0YygpLEtzYykpLDIxKS5IYygoT3JjKCksSHJjKSk/RUpjOm51bGx9O18ucGY9ZnVuY3Rpb24gaEtjKGEsYil7V0pjKHRoaXMsQkQoYSwzNyksYil9O18uYj0wO18uZz0wO3ZhciBFSmM7dmFyIGRaPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyJywxNDA4KTtiY2IoMTQyNywxLERrZSxpS2MpO18udWU9ZnVuY3Rpb24gaktjKGEsYil7cmV0dXJuIGJlYihCRChhLDE5KS5hLEJEKGIsMTkpLmEpfTtfLkZiPWZ1bmN0aW9uIGtLYyhhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gbEtjKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciB1WT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci8wbWV0aG9kcmVmJGNvbXBhcmUkVHlwZScsMTQyNyk7YmNiKDE0MjksMSxEa2UsbUtjKTtfLnVlPWZ1bmN0aW9uIG5LYyhhLGIpe3JldHVybiBiZWIoQkQoYSwxOSkuYSxCRChiLDE5KS5hKX07Xy5GYj1mdW5jdGlvbiBvS2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHBLYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgdlk9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvMW1ldGhvZHJlZiRjb21wYXJlJFR5cGUnLDE0MjkpO2JjYig2NDksMSx7NjQ5OjF9LHFLYyk7dmFyIHdZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL0VkZ2VSZXAnLDY0OSk7YmNiKDQwMSwxLHs0MDE6MX0scktjKTtfLmI9ZmFsc2U7dmFyIHhZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAnLDQwMSk7YmNiKDUwOCwxMix7MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxMjoxLDE0OjEsMTU6MSw1NDoxLDUwODoxfSx2S2MpO3ZhciBDWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoJyw1MDgpO2JjYigxNDA5LDEse30sd0tjKTtfLktiPWZ1bmN0aW9uIHhLYyhhKXtyZXR1cm4gQkQoYSwxNykuZC5pLmt9O3ZhciB5WT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQwJFR5cGUnLDE0MDkpO2JjYigxNDEwLDEsT2llLHlLYyk7Xy5NYj1mdW5jdGlvbiB6S2MoYSl7cmV0dXJuIEJEKGEsMjY3KT09KGowYigpLGcwYil9O3ZhciB6WT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQxJFR5cGUnLDE0MTApO2JjYigxNDExLDEse30sQUtjKTtfLktiPWZ1bmN0aW9uIEJLYyhhKXtyZXR1cm4gQkQoYSwxNykuZC5pfTt2YXIgQVk9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlJywxNDExKTtiY2IoMTQxMiwxLE9pZSxDS2MpO18uTWI9ZnVuY3Rpb24gREtjKGEpe3JldHVybiBlTGMoTHpjKEJEKGEsMTApKSl9O3ZhciBCWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUnLDE0MTIpO2JjYigxNDEzLDEsT2llLEVLYyk7Xy5NYj1mdW5jdGlvbiBGS2MoYSl7cmV0dXJuIGRLYyhCRChhLDExKSl9O3ZhciBEWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlJywxNDEzKTtiY2IoMTQxNCwxLHFpZSxHS2MpO18udGQ9ZnVuY3Rpb24gSEtjKGEpe0xKYyh0aGlzLmEsdGhpcy5iLEJEKGEsMTEpKX07dmFyIEVZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUnLDE0MTQpO2JjYigxNDIzLDEscWllLElLYyk7Xy50ZD1mdW5jdGlvbiBKS2MoYSl7TUpjKHRoaXMuYSxCRChhLDE3KSl9O3ZhciBGWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZScsMTQyMyk7YmNiKDE0MjQsMSx7fSxLS2MpO18uS2I9ZnVuY3Rpb24gTEtjKGEpe3JldHVybiBGSmMoKSxuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBHWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTEkVHlwZScsMTQyNCk7YmNiKDE0MjUsMSxxaWUsTUtjKTtfLnRkPWZ1bmN0aW9uIE5LYyhhKXtOSmModGhpcy5hLEJEKGEsMTApKX07dmFyIEhZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMiRUeXBlJywxNDI1KTtiY2IoMTQyNiwxLHt9LE9LYyk7Xy5LYj1mdW5jdGlvbiBQS2MoYSl7cmV0dXJuIEZKYygpLG1lYihCRChhLDEyMSkuZSl9O3ZhciBJWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZScsMTQyNik7YmNiKDE0MjgsMSx7fSxRS2MpO18uS2I9ZnVuY3Rpb24gUktjKGEpe3JldHVybiBGSmMoKSxtZWIoQkQoYSwxMjEpLmUpfTt2YXIgSlk9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE1JFR5cGUnLDE0MjgpO2JjYigxNDMwLDEsT2llLFNLYyk7Xy5NYj1mdW5jdGlvbiBUS2MoYSl7cmV0dXJuIEZKYygpLEJEKGEsNDAxKS5jLms9PShqMGIoKSxoMGIpfTt2YXIgS1k9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE3JFR5cGUnLDE0MzApO2JjYigxNDMxLDEsT2llLFVLYyk7Xy5NYj1mdW5jdGlvbiBWS2MoYSl7cmV0dXJuIEZKYygpLEJEKGEsNDAxKS5jLmouYy5sZW5ndGg+MX07dmFyIExZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxOCRUeXBlJywxNDMxKTtiY2IoMTQzMiwxLHFpZSxXS2MpO18udGQ9ZnVuY3Rpb24gWEtjKGEpe2VLYyh0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsQkQoYSw0MDEpKX07Xy5jPTA7Xy5kPTA7dmFyIE1ZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxOSRUeXBlJywxNDMyKTtiY2IoMTQxNSwxLHt9LFlLYyk7Xy5LYj1mdW5jdGlvbiBaS2MoYSl7cmV0dXJuIEZKYygpLG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMjkpLmEsMTYpKX07dmFyIE5ZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyJFR5cGUnLDE0MTUpO2JjYigxNDMzLDEscWllLCRLYyk7Xy50ZD1mdW5jdGlvbiBfS2MoYSl7ZktjKHRoaXMuYSxCRChhLDExKSl9O18uYT0wO3ZhciBPWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjAkVHlwZScsMTQzMyk7YmNiKDE0MzQsMSx7fSxhTGMpO18uS2I9ZnVuY3Rpb24gYkxjKGEpe3JldHVybiBGSmMoKSxuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBQWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjEkVHlwZScsMTQzNCk7YmNiKDE0MzUsMSxxaWUsY0xjKTtfLnRkPWZ1bmN0aW9uIGRMYyhhKXtPSmModGhpcy5hLEJEKGEsMTApKX07dmFyIFFZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMiRUeXBlJywxNDM1KTtiY2IoMTQzNiwxLE9pZSxmTGMpO18uTWI9ZnVuY3Rpb24gZ0xjKGEpe3JldHVybiBlTGMoYSl9O3ZhciBSWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjMkVHlwZScsMTQzNik7YmNiKDE0MzcsMSx7fSxoTGMpO18uS2I9ZnVuY3Rpb24gaUxjKGEpe3JldHVybiBGSmMoKSxuZXcgWUFiKG51bGwsbmV3IEt1YihCRChhLDI5KS5hLDE2KSl9O3ZhciBTWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjQkVHlwZScsMTQzNyk7YmNiKDE0MzgsMSxPaWUsakxjKTtfLk1iPWZ1bmN0aW9uIGtMYyhhKXtyZXR1cm4gUEpjKHRoaXMuYSxCRChhLDEwKSl9O3ZhciBUWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjUkVHlwZScsMTQzOCk7YmNiKDE0MzksMSxxaWUsbExjKTtfLnRkPWZ1bmN0aW9uIG1MYyhhKXtRSmModGhpcy5hLHRoaXMuYixCRChhLDEwKSl9O3ZhciBVWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjYkVHlwZScsMTQzOSk7YmNiKDE0NDAsMSxPaWUsbkxjKTtfLk1iPWZ1bmN0aW9uIG9MYyhhKXtyZXR1cm4gRkpjKCksIU9aYihCRChhLDE3KSl9O3ZhciBWWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjckVHlwZScsMTQ0MCk7YmNiKDE0NDEsMSxPaWUscExjKTtfLk1iPWZ1bmN0aW9uIHFMYyhhKXtyZXR1cm4gRkpjKCksIU9aYihCRChhLDE3KSl9O3ZhciBXWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjgkVHlwZScsMTQ0MSk7YmNiKDE0NDIsMSx7fSxyTGMpO18uQ2U9ZnVuY3Rpb24gc0xjKGEsYil7cmV0dXJuIFJKYyh0aGlzLmEsQkQoYSwyOSksQkQoYiwyOSkpfTt2YXIgWFk9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI5JFR5cGUnLDE0NDIpO2JjYigxNDE2LDEse30sdExjKTtfLktiPWZ1bmN0aW9uIHVMYyhhKXtyZXR1cm4gRkpjKCksbmV3IFlBYihudWxsLG5ldyBMdWIobmV3IFNyKHVyKFVfYihCRChhLDEwKSkuYS5LYygpLG5ldyBTcSkpKSl9O3ZhciBZWT1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMyRUeXBlJywxNDE2KTtiY2IoMTQxNywxLE9pZSx2TGMpO18uTWI9ZnVuY3Rpb24gd0xjKGEpe3JldHVybiBGSmMoKSxjS2MoQkQoYSwxNykpfTt2YXIgWlk9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZScsMTQxNyk7YmNiKDE0MTgsMSxxaWUseExjKTtfLnRkPWZ1bmN0aW9uIHlMYyhhKXtYSmModGhpcy5hLEJEKGEsMTcpKX07dmFyICRZPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUnLDE0MTgpO2JjYigxNDE5LDEse30sekxjKTtfLktiPWZ1bmN0aW9uIEFMYyhhKXtyZXR1cm4gRkpjKCksbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwyOSkuYSwxNikpfTt2YXIgX1k9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDYkVHlwZScsMTQxOSk7YmNiKDE0MjAsMSxPaWUsQkxjKTtfLk1iPWZ1bmN0aW9uIENMYyhhKXtyZXR1cm4gRkpjKCksQkQoYSwxMCkuaz09KGowYigpLGgwYil9O3ZhciBhWj1tZGIoSHFlLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlJywxNDIwKTtiY2IoMTQyMSwxLHt9LERMYyk7Xy5LYj1mdW5jdGlvbiBFTGMoYSl7cmV0dXJuIEZKYygpLG5ldyBZQWIobnVsbCxuZXcgTHViKG5ldyBTcih1cihPX2IoQkQoYSwxMCkpLmEuS2MoKSxuZXcgU3EpKSkpfTt2YXIgYlo9bWRiKEhxZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDgkVHlwZScsMTQyMSk7YmNiKDE0MjIsMSxPaWUsRkxjKTtfLk1iPWZ1bmN0aW9uIEdMYyhhKXtyZXR1cm4gRkpjKCksTlpiKEJEKGEsMTcpKX07dmFyIGNaPW1kYihIcWUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ5JFR5cGUnLDE0MjIpO2JjYigxNDA0LDEsQnFlLEtMYyk7Xy5ZZj1mdW5jdGlvbiBMTGMoYSl7cmV0dXJuIEJEKHZOYihCRChhLDM3KSwod3RjKCksS3NjKSksMjEpLkhjKChPcmMoKSxIcmMpKT9ITGM6bnVsbH07Xy5wZj1mdW5jdGlvbiBNTGMoYSxiKXtKTGMoQkQoYSwzNyksYil9O3ZhciBITGM7dmFyIGVaPW1kYihIcWUsJ1NpbXBsZU5vZGVQbGFjZXInLDE0MDQpO2JjYigxODAsMSx7MTgwOjF9LFVMYyk7Xy5JYj1mdW5jdGlvbiBWTGMoKXt2YXIgYTthPScnO3RoaXMuYz09KFlMYygpLFhMYyk/KGErPWtsZSk6dGhpcy5jPT1XTGMmJihhKz1qbGUpO3RoaXMubz09KGVNYygpLGNNYyk/KGErPXZsZSk6dGhpcy5vPT1kTWM/KGErPSdVUCcpOihhKz0nQkFMQU5DRUQnKTtyZXR1cm4gYX07dmFyIGhaPW1kYihLcWUsJ0JLQWxpZ25lZExheW91dCcsMTgwKTtiY2IoNTE2LDIyLHszOjEsMzU6MSwyMjoxLDUxNjoxfSxaTGMpO3ZhciBXTGMsWExjO3ZhciBmWj1uZGIoS3FlLCdCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbicsNTE2LENJLF9MYywkTGMpO3ZhciBhTWM7YmNiKDUxNSwyMix7MzoxLDM1OjEsMjI6MSw1MTU6MX0sZk1jKTt2YXIgY01jLGRNYzt2YXIgZ1o9bmRiKEtxZSwnQktBbGlnbmVkTGF5b3V0L1ZEaXJlY3Rpb24nLDUxNSxDSSxoTWMsZ01jKTt2YXIgaU1jO2JjYigxNjM0LDEse30sbU1jKTt2YXIgaVo9bWRiKEtxZSwnQktBbGlnbmVyJywxNjM0KTtiY2IoMTYzNywxLHt9LHJNYyk7dmFyIGxaPW1kYihLcWUsJ0JLQ29tcGFjdG9yJywxNjM3KTtiY2IoNjU0LDEsezY1NDoxfSxzTWMpO18uYT0wO3ZhciBqWj1tZGIoS3FlLCdCS0NvbXBhY3Rvci9DbGFzc0VkZ2UnLDY1NCk7YmNiKDQ1OCwxLHs0NTg6MX0sdU1jKTtfLmE9bnVsbDtfLmI9MDt2YXIga1o9bWRiKEtxZSwnQktDb21wYWN0b3IvQ2xhc3NOb2RlJyw0NTgpO2JjYigxNDA3LDEsQnFlLENNYyk7Xy5ZZj1mdW5jdGlvbiBHTWMoYSl7cmV0dXJuIEJEKHZOYihCRChhLDM3KSwod3RjKCksS3NjKSksMjEpLkhjKChPcmMoKSxIcmMpKT92TWM6bnVsbH07Xy5wZj1mdW5jdGlvbiBITWMoYSxiKXtCTWModGhpcyxCRChhLDM3KSxiKX07Xy5kPWZhbHNlO3ZhciB2TWM7dmFyIG1aPW1kYihLcWUsJ0JLTm9kZVBsYWNlcicsMTQwNyk7YmNiKDE2MzUsMSx7fSxKTWMpO18uZD0wO3ZhciBvWj1tZGIoS3FlLCdOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbicsMTYzNSk7YmNiKDE2MzYsMSxEa2UsT01jKTtfLnVlPWZ1bmN0aW9uIFBNYyhhLGIpe3JldHVybiBOTWModGhpcyxCRChhLDQ2KSxCRChiLDQ2KSl9O18uRmI9ZnVuY3Rpb24gUU1jKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBSTWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIG5aPW1kYihLcWUsJ05laWdoYm9yaG9vZEluZm9ybWF0aW9uL05laWdoYm9yQ29tcGFyYXRvcicsMTYzNik7YmNiKDgwOCwxLHt9KTt2YXIgc1o9bWRiKEtxZSwnVGhyZXNob2xkU3RyYXRlZ3knLDgwOCk7YmNiKDE3NjMsODA4LHt9LFdNYyk7Xy5iZz1mdW5jdGlvbiBYTWMoYSxiLGMpe3JldHVybiB0aGlzLmEubz09KGVNYygpLGRNYyk/UGplOlFqZX07Xy5jZz1mdW5jdGlvbiBZTWMoKXt9O3ZhciBwWj1tZGIoS3FlLCdUaHJlc2hvbGRTdHJhdGVneS9OdWxsVGhyZXNob2xkU3RyYXRlZ3knLDE3NjMpO2JjYig1NzksMSx7NTc5OjF9LFpNYyk7Xy5jPWZhbHNlO18uZD1mYWxzZTt2YXIgcVo9bWRiKEtxZSwnVGhyZXNob2xkU3RyYXRlZ3kvUG9zdHByb2Nlc3NhYmxlJyw1NzkpO2JjYigxNzY0LDgwOCx7fSxiTmMpO18uYmc9ZnVuY3Rpb24gY05jKGEsYixjKXt2YXIgZCxlLGY7ZT1iPT1jO2Q9dGhpcy5hLmFbYy5wXT09YjtpZighKGV8fGQpKXtyZXR1cm4gYX1mPWE7aWYodGhpcy5hLmM9PShZTGMoKSxYTGMpKXtlJiYoZj0kTWModGhpcyxiLHRydWUpKTshaXNOYU4oZikmJiFpc0Zpbml0ZShmKSYmZCYmKGY9JE1jKHRoaXMsYyxmYWxzZSkpfWVsc2V7ZSYmKGY9JE1jKHRoaXMsYix0cnVlKSk7IWlzTmFOKGYpJiYhaXNGaW5pdGUoZikmJmQmJihmPSRNYyh0aGlzLGMsZmFsc2UpKX1yZXR1cm4gZn07Xy5jZz1mdW5jdGlvbiBkTmMoKXt2YXIgYSxiLGMsZCxlO3doaWxlKHRoaXMuZC5iIT0wKXtlPUJEKEtzYih0aGlzLmQpLDU3OSk7ZD1fTWModGhpcyxlKTtpZighZC5hKXtjb250aW51ZX1hPWQuYTtjPUNjYih0aGlzLmEuZlt0aGlzLmEuZ1tlLmIucF0ucF0pO2lmKCFjJiYhT1piKGEpJiZhLmMuaS5jPT1hLmQuaS5jKXtjb250aW51ZX1iPWFOYyh0aGlzLGUpO2J8fHN3Yih0aGlzLmUsZSl9d2hpbGUodGhpcy5lLmEuYy5sZW5ndGghPTApe2FOYyh0aGlzLEJEKHJ3Yih0aGlzLmUpLDU3OSkpfX07dmFyIHJaPW1kYihLcWUsJ1RocmVzaG9sZFN0cmF0ZWd5L1NpbXBsZVRocmVzaG9sZFN0cmF0ZWd5JywxNzY0KTtiY2IoNjM1LDEsezYzNToxLDI0NjoxLDIzNDoxfSxoTmMpO18uS2Y9ZnVuY3Rpb24gak5jKCl7cmV0dXJuIGdOYyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBpTmMoKXtyZXR1cm4gZ05jKHRoaXMpfTt2YXIgZU5jO3ZhciB0Wj1tZGIoTHFlLCdFZGdlUm91dGVyRmFjdG9yeScsNjM1KTtiY2IoMTQ1OCwxLEJxZSx3TmMpO18uWWY9ZnVuY3Rpb24geE5jKGEpe3JldHVybiB1TmMoQkQoYSwzNykpfTtfLnBmPWZ1bmN0aW9uIHlOYyhhLGIpe3ZOYyhCRChhLDM3KSxiKX07dmFyIGxOYyxtTmMsbk5jLG9OYyxwTmMscU5jLHJOYyxzTmM7dmFyIHVaPW1kYihMcWUsJ09ydGhvZ29uYWxFZGdlUm91dGVyJywxNDU4KTtiY2IoMTQ1MSwxLEJxZSxOTmMpO18uWWY9ZnVuY3Rpb24gT05jKGEpe3JldHVybiBJTmMoQkQoYSwzNykpfTtfLnBmPWZ1bmN0aW9uIFBOYyhhLGIpe0tOYyh0aGlzLEJEKGEsMzcpLGIpfTt2YXIgek5jLEFOYyxCTmMsQ05jLEROYyxFTmM7dmFyIHdaPW1kYihMcWUsJ1BvbHlsaW5lRWRnZVJvdXRlcicsMTQ1MSk7YmNiKDE0NTIsMSxWa2UsUk5jKTtfLkxiPWZ1bmN0aW9uIFNOYyhhKXtyZXR1cm4gUU5jKEJEKGEsMTApKX07Xy5GYj1mdW5jdGlvbiBUTmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIFVOYyhhKXtyZXR1cm4gUU5jKEJEKGEsMTApKX07dmFyIHZaPW1kYihMcWUsJ1BvbHlsaW5lRWRnZVJvdXRlci8xJywxNDUyKTtiY2IoMTgwOSwxLE9pZSxaTmMpO18uTWI9ZnVuY3Rpb24gJE5jKGEpe3JldHVybiBCRChhLDEyOSkuYz09KEhPYygpLEZPYyl9O3ZhciB4Wj1tZGIoTXFlLCdIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQwJFR5cGUnLDE4MDkpO2JjYigxODEwLDEse30sX05jKTtfLkdlPWZ1bmN0aW9uIGFPYyhhKXtyZXR1cm4gQkQoYSwxMjkpLmR9O3ZhciB5Wj1tZGIoTXFlLCdIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQxJFR5cGUnLDE4MTApO2JjYigxODExLDEsT2llLGJPYyk7Xy5NYj1mdW5jdGlvbiBjT2MoYSl7cmV0dXJuIEJEKGEsMTI5KS5jPT0oSE9jKCksRk9jKX07dmFyIHpaPW1kYihNcWUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDIkVHlwZScsMTgxMSk7YmNiKDE4MTIsMSx7fSxkT2MpO18uR2U9ZnVuY3Rpb24gZU9jKGEpe3JldHVybiBCRChhLDEyOSkuZH07dmFyIEFaPW1kYihNcWUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDMkVHlwZScsMTgxMik7YmNiKDE4MTMsMSx7fSxmT2MpO18uR2U9ZnVuY3Rpb24gZ09jKGEpe3JldHVybiBCRChhLDEyOSkuZH07dmFyIEJaPW1kYihNcWUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDQkVHlwZScsMTgxMyk7YmNiKDE4MTQsMSx7fSxoT2MpO18uR2U9ZnVuY3Rpb24gaU9jKGEpe3JldHVybiBCRChhLDEyOSkuZH07dmFyIENaPW1kYihNcWUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDUkVHlwZScsMTgxNCk7YmNiKDExMiwxLHszNToxLDExMjoxfSx1T2MpO18ud2Q9ZnVuY3Rpb24gdk9jKGEpe3JldHVybiBrT2ModGhpcyxCRChhLDExMikpfTtfLkZiPWZ1bmN0aW9uIHdPYyhhKXt2YXIgYjtpZihKRChhLDExMikpe2I9QkQoYSwxMTIpO3JldHVybiB0aGlzLmc9PWIuZ31yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24geE9jKCl7cmV0dXJuIHRoaXMuZ307Xy5JYj1mdW5jdGlvbiB6T2MoKXt2YXIgYSxiLGMsZDthPW5ldyBXZmIoJ3snKTtkPW5ldyBvbGIodGhpcy5uKTt3aGlsZShkLmE8ZC5jLmMubGVuZ3RoKXtjPUJEKG1sYihkKSwxMSk7Yj1QX2IoYy5pKTtiPT1udWxsJiYoYj0nbicrU19iKGMuaSkpO2EuYSs9JycrYjtkLmE8ZC5jLmMubGVuZ3RoJiYoYS5hKz0nLCcsYSl9YS5hKz0nfSc7cmV0dXJuIGEuYX07Xy5hPTA7Xy5iPTA7Xy5jPU5hTjtfLmQ9MDtfLmc9MDtfLmk9MDtfLm89MDtfLnM9TmFOO3ZhciBOWj1tZGIoTXFlLCdIeXBlckVkZ2VTZWdtZW50JywxMTIpO2JjYigxMjksMSx7MTI5OjF9LERPYyk7Xy5JYj1mdW5jdGlvbiBFT2MoKXtyZXR1cm4gdGhpcy5hKyctPicrdGhpcy5iKycgKCcrWXIodGhpcy5jKSsnKSd9O18uZD0wO3ZhciBFWj1tZGIoTXFlLCdIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeScsMTI5KTtiY2IoNTIwLDIyLHszOjEsMzU6MSwyMjoxLDUyMDoxfSxJT2MpO3ZhciBGT2MsR09jO3ZhciBEWj1uZGIoTXFlLCdIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZScsNTIwLENJLEtPYyxKT2MpO3ZhciBMT2M7YmNiKDE4MTUsMSx7fSxaT2MpO3ZhciBNWj1tZGIoTXFlLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXInLDE4MTUpO2JjYigxODE2LDEse30sYVBjKTtfLmE9MDtfLmI9MDt2YXIgRlo9bWRiKE1xZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0FyZWFSYXRpbmcnLDE4MTYpO2JjYigzMjksMSx7MzI5OjF9LGJQYyk7Xy5hPTA7Xy5iPTA7Xy5jPTA7dmFyIEdaPW1kYihNcWUsJ0h5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9GcmVlQXJlYScsMzI5KTtiY2IoMTgxNywxLERrZSxjUGMpO18udWU9ZnVuY3Rpb24gZFBjKGEsYil7cmV0dXJuIF9PYyhCRChhLDExMiksQkQoYiwxMTIpKX07Xy5GYj1mdW5jdGlvbiBlUGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIGZQYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgSFo9bWRiKE1xZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUnLDE4MTcpO2JjYigxODE4LDEscWllLGdQYyk7Xy50ZD1mdW5jdGlvbiBoUGMoYSl7VE9jKHRoaXMuYSx0aGlzLmQsdGhpcy5jLHRoaXMuYixCRChhLDExMikpfTtfLmI9MDt2YXIgSVo9bWRiKE1xZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUnLDE4MTgpO2JjYigxODE5LDEse30saVBjKTtfLktiPWZ1bmN0aW9uIGpQYyhhKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIoQkQoYSwxMTIpLmUsMTYpKX07dmFyIEpaPW1kYihNcWUsJ0h5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMiRUeXBlJywxODE5KTtiY2IoMTgyMCwxLHt9LGtQYyk7Xy5LYj1mdW5jdGlvbiBsUGMoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMTEyKS5qLDE2KSl9O3ZhciBLWj1tZGIoTXFlLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDMkVHlwZScsMTgyMCk7YmNiKDE4MjEsMSx7fSxtUGMpO18uRmU9ZnVuY3Rpb24gblBjKGEpe3JldHVybiBFZGIoRUQoYSkpfTt2YXIgTFo9bWRiKE1xZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQ0JFR5cGUnLDE4MjEpO2JjYig2NTUsMSx7fSx0UGMpO18uYT0wO18uYj0wO18uYz0wO3ZhciBRWj1tZGIoTXFlLCdPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvcicsNjU1KTtiY2IoMTYzOCwxLHt9LHhQYyk7Xy5LYj1mdW5jdGlvbiB5UGMoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMTEyKS5lLDE2KSl9O3ZhciBPWj1tZGIoTXFlLCdPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMCRUeXBlJywxNjM4KTtiY2IoMTYzOSwxLHt9LHpQYyk7Xy5LYj1mdW5jdGlvbiBBUGMoYSl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKEJEKGEsMTEyKS5qLDE2KSl9O3ZhciBQWj1tZGIoTXFlLCdPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMSRUeXBlJywxNjM5KTtiY2IoNjYxLDEse30pO3ZhciBSWj1tZGIoTnFlLCdCYXNlUm91dGluZ0RpcmVjdGlvblN0cmF0ZWd5Jyw2NjEpO2JjYigxODA3LDY2MSx7fSxFUGMpO18uZGc9ZnVuY3Rpb24gRlBjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtpZighIWEuciYmIWEucSl7cmV0dXJufWs9YithLm8qYztmb3Ioaj1uZXcgb2xiKGEubik7ai5hPGouYy5jLmxlbmd0aDspe2k9QkQobWxiKGopLDExKTtsPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtpLmkubixpLm4saS5hXSkpLmE7Zm9yKGg9bmV3IG9sYihpLmcpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwxNyk7aWYoIU9aYihnKSl7bz1nLmQ7cD1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbby5pLm4sby5uLG8uYV0pKS5hO2lmKCR3bmQuTWF0aC5hYnMobC1wKT5xbWUpe2Y9aztlPWE7ZD1uZXcgZjdjKGwsZik7RHNiKGcuYSxkKTtCUGModGhpcyxnLGUsZCxmYWxzZSk7bT1hLnI7aWYobSl7bj1FZGIoRUQoVXQobS5lLDApKSk7ZD1uZXcgZjdjKG4sZik7RHNiKGcuYSxkKTtCUGModGhpcyxnLGUsZCxmYWxzZSk7Zj1iK20ubypjO2U9bTtkPW5ldyBmN2MobixmKTtEc2IoZy5hLGQpO0JQYyh0aGlzLGcsZSxkLGZhbHNlKX1kPW5ldyBmN2MocCxmKTtEc2IoZy5hLGQpO0JQYyh0aGlzLGcsZSxkLGZhbHNlKX19fX19O18uZWc9ZnVuY3Rpb24gR1BjKGEpe3JldHVybiBhLmkubi5hK2Eubi5hK2EuYS5hfTtfLmZnPWZ1bmN0aW9uIEhQYygpe3JldHVybiBVY2QoKSxSY2R9O18uZ2c9ZnVuY3Rpb24gSVBjKCl7cmV0dXJuIFVjZCgpLEFjZH07dmFyIFNaPW1kYihOcWUsJ05vcnRoVG9Tb3V0aFJvdXRpbmdTdHJhdGVneScsMTgwNyk7YmNiKDE4MDgsNjYxLHt9LEpQYyk7Xy5kZz1mdW5jdGlvbiBLUGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKCEhYS5yJiYhYS5xKXtyZXR1cm59az1iLWEubypjO2ZvcihqPW5ldyBvbGIoYS5uKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1CRChtbGIoaiksMTEpO2w9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW2kuaS5uLGkubixpLmFdKSkuYTtmb3IoaD1uZXcgb2xiKGkuZyk7aC5hPGguYy5jLmxlbmd0aDspe2c9QkQobWxiKGgpLDE3KTtpZighT1piKGcpKXtvPWcuZDtwPWw3YyhPQyhHQyhtMSwxKSxuaWUsOCwwLFtvLmkubixvLm4sby5hXSkpLmE7aWYoJHduZC5NYXRoLmFicyhsLXApPnFtZSl7Zj1rO2U9YTtkPW5ldyBmN2MobCxmKTtEc2IoZy5hLGQpO0JQYyh0aGlzLGcsZSxkLGZhbHNlKTttPWEucjtpZihtKXtuPUVkYihFRChVdChtLmUsMCkpKTtkPW5ldyBmN2MobixmKTtEc2IoZy5hLGQpO0JQYyh0aGlzLGcsZSxkLGZhbHNlKTtmPWItbS5vKmM7ZT1tO2Q9bmV3IGY3YyhuLGYpO0RzYihnLmEsZCk7QlBjKHRoaXMsZyxlLGQsZmFsc2UpfWQ9bmV3IGY3YyhwLGYpO0RzYihnLmEsZCk7QlBjKHRoaXMsZyxlLGQsZmFsc2UpfX19fX07Xy5lZz1mdW5jdGlvbiBMUGMoYSl7cmV0dXJuIGEuaS5uLmErYS5uLmErYS5hLmF9O18uZmc9ZnVuY3Rpb24gTVBjKCl7cmV0dXJuIFVjZCgpLEFjZH07Xy5nZz1mdW5jdGlvbiBOUGMoKXtyZXR1cm4gVWNkKCksUmNkfTt2YXIgVFo9bWRiKE5xZSwnU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5JywxODA4KTtiY2IoMTgwNiw2NjEse30sT1BjKTtfLmRnPWZ1bmN0aW9uIFBQYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aWYoISFhLnImJiFhLnEpe3JldHVybn1rPWIrYS5vKmM7Zm9yKGo9bmV3IG9sYihhLm4pO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUJEKG1sYihqKSwxMSk7bD1sN2MoT0MoR0MobTEsMSksbmllLDgsMCxbaS5pLm4saS5uLGkuYV0pKS5iO2ZvcihoPW5ldyBvbGIoaS5nKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaCksMTcpO2lmKCFPWmIoZykpe289Zy5kO3A9bDdjKE9DKEdDKG0xLDEpLG5pZSw4LDAsW28uaS5uLG8ubixvLmFdKSkuYjtpZigkd25kLk1hdGguYWJzKGwtcCk+cW1lKXtmPWs7ZT1hO2Q9bmV3IGY3YyhmLGwpO0RzYihnLmEsZCk7QlBjKHRoaXMsZyxlLGQsdHJ1ZSk7bT1hLnI7aWYobSl7bj1FZGIoRUQoVXQobS5lLDApKSk7ZD1uZXcgZjdjKGYsbik7RHNiKGcuYSxkKTtCUGModGhpcyxnLGUsZCx0cnVlKTtmPWIrbS5vKmM7ZT1tO2Q9bmV3IGY3YyhmLG4pO0RzYihnLmEsZCk7QlBjKHRoaXMsZyxlLGQsdHJ1ZSl9ZD1uZXcgZjdjKGYscCk7RHNiKGcuYSxkKTtCUGModGhpcyxnLGUsZCx0cnVlKX19fX19O18uZWc9ZnVuY3Rpb24gUVBjKGEpe3JldHVybiBhLmkubi5iK2Eubi5iK2EuYS5ifTtfLmZnPWZ1bmN0aW9uIFJQYygpe3JldHVybiBVY2QoKSx6Y2R9O18uZ2c9ZnVuY3Rpb24gU1BjKCl7cmV0dXJuIFVjZCgpLFRjZH07dmFyIFVaPW1kYihOcWUsJ1dlc3RUb0Vhc3RSb3V0aW5nU3RyYXRlZ3knLDE4MDYpO2JjYig4MTMsMSx7fSxZUGMpO18uSWI9ZnVuY3Rpb24gWlBjKCl7cmV0dXJuIEZlKHRoaXMuYSl9O18uYj0wO18uYz1mYWxzZTtfLmQ9ZmFsc2U7Xy5mPTA7dmFyIFdaPW1kYihQcWUsJ051YlNwbGluZScsODEzKTtiY2IoNDA3LDEsezQwNzoxfSxhUWMsYlFjKTt2YXIgVlo9bWRiKFBxZSwnTnViU3BsaW5lL1BvbGFyQ1AnLDQwNyk7YmNiKDE0NTMsMSxCcWUsdlFjKTtfLllmPWZ1bmN0aW9uIHhRYyhhKXtyZXR1cm4gcVFjKEJEKGEsMzcpKX07Xy5wZj1mdW5jdGlvbiB5UWMoYSxiKXt1UWModGhpcyxCRChhLDM3KSxiKX07dmFyIGNRYyxkUWMsZVFjLGZRYyxnUWM7dmFyIGIkPW1kYihQcWUsJ1NwbGluZUVkZ2VSb3V0ZXInLDE0NTMpO2JjYigyNjgsMSx7MjY4OjF9LEJRYyk7Xy5JYj1mdW5jdGlvbiBDUWMoKXtyZXR1cm4gdGhpcy5hKycgLT4oJyt0aGlzLmMrJykgJyt0aGlzLmJ9O18uYz0wO3ZhciBYWj1tZGIoUHFlLCdTcGxpbmVFZGdlUm91dGVyL0RlcGVuZGVuY3knLDI2OCk7YmNiKDQ1NSwyMix7MzoxLDM1OjEsMjI6MSw0NTU6MX0sR1FjKTt2YXIgRFFjLEVRYzt2YXIgWVo9bmRiKFBxZSwnU3BsaW5lRWRnZVJvdXRlci9TaWRlVG9Qcm9jZXNzJyw0NTUsQ0ksSVFjLEhRYyk7dmFyIEpRYztiY2IoMTQ1NCwxLE9pZSxMUWMpO18uTWI9ZnVuY3Rpb24gTVFjKGEpe3JldHVybiBoUWMoKSwhQkQoYSwxMjgpLm99O3ZhciBaWj1tZGIoUHFlLCdTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQwJFR5cGUnLDE0NTQpO2JjYigxNDU1LDEse30sTlFjKTtfLkdlPWZ1bmN0aW9uIE9RYyhhKXtyZXR1cm4gaFFjKCksQkQoYSwxMjgpLnYrMX07dmFyICRaPW1kYihQcWUsJ1NwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDEkVHlwZScsMTQ1NSk7YmNiKDE0NTYsMSxxaWUsUFFjKTtfLnRkPWZ1bmN0aW9uIFFRYyhhKXtzUWModGhpcy5hLHRoaXMuYixCRChhLDQ2KSl9O3ZhciBfWj1tZGIoUHFlLCdTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQyJFR5cGUnLDE0NTYpO2JjYigxNDU3LDEscWllLFJRYyk7Xy50ZD1mdW5jdGlvbiBTUWMoYSl7dFFjKHRoaXMuYSx0aGlzLmIsQkQoYSw0NikpfTt2YXIgYSQ9bWRiKFBxZSwnU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMyRUeXBlJywxNDU3KTtiY2IoMTI4LDEsezM1OjEsMTI4OjF9LFlRYyxaUWMpO18ud2Q9ZnVuY3Rpb24gJFFjKGEpe3JldHVybiBXUWModGhpcyxCRChhLDEyOCkpfTtfLmI9MDtfLmU9ZmFsc2U7Xy5mPTA7Xy5nPTA7Xy5qPWZhbHNlO18uaz1mYWxzZTtfLm49MDtfLm89ZmFsc2U7Xy5wPWZhbHNlO18ucT1mYWxzZTtfLnM9MDtfLnU9MDtfLnY9MDtfLkY9MDt2YXIgZCQ9bWRiKFBxZSwnU3BsaW5lU2VnbWVudCcsMTI4KTtiY2IoNDU5LDEsezQ1OToxfSxfUWMpO18uYT0wO18uYj1mYWxzZTtfLmM9ZmFsc2U7Xy5kPWZhbHNlO18uZT1mYWxzZTtfLmY9MDt2YXIgYyQ9bWRiKFBxZSwnU3BsaW5lU2VnbWVudC9FZGdlSW5mb3JtYXRpb24nLDQ1OSk7YmNiKDEyMzQsMSx7fSxoUmMpO3ZhciBmJD1tZGIoVXFlLGhtZSwxMjM0KTtiY2IoMTIzNSwxLERrZSxqUmMpO18udWU9ZnVuY3Rpb24ga1JjKGEsYil7cmV0dXJuIGlSYyhCRChhLDEzNSksQkQoYiwxMzUpKX07Xy5GYj1mdW5jdGlvbiBsUmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG1SYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgZSQ9bWRiKFVxZSxpbWUsMTIzNSk7YmNiKDEyMzMsMSx7fSx0UmMpO3ZhciBnJD1tZGIoVXFlLCdNclRyZWUnLDEyMzMpO2JjYigzOTMsMjIsezM6MSwzNToxLDIyOjEsMzkzOjEsMjQ2OjEsMjM0OjF9LEFSYyk7Xy5LZj1mdW5jdGlvbiBDUmMoKXtyZXR1cm4gelJjKHRoaXMpfTtfLlhmPWZ1bmN0aW9uIEJSYygpe3JldHVybiB6UmModGhpcyl9O3ZhciB1UmMsdlJjLHdSYyx4UmM7dmFyIGgkPW5kYihVcWUsJ1RyZWVMYXlvdXRQaGFzZXMnLDM5MyxDSSxFUmMsRFJjKTt2YXIgRlJjO2JjYigxMTMwLDIwOSxNbGUsSFJjKTtfLlplPWZ1bmN0aW9uIElSYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO0NjYihERChoa2QoYSwoSlRjKCksQVRjKSkpKXx8JENiKChjPW5ldyBfQ2IoKFBnZCgpLG5ldyBiaGQoYSkpKSxjKSk7Zz0oaD1uZXcgU1JjLHROYihoLGEpLHlOYihoLChtVGMoKSxkVGMpLGEpLGk9bmV3IExxYixwUmMoYSxoLGkpLG9SYyhhLGgsaSksaCk7Zj1nUmModGhpcy5hLGcpO2ZvcihlPW5ldyBvbGIoZik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDEzNSk7clJjKHRoaXMuYixkLFVkZChiLDEvZi5jLmxlbmd0aCkpfWc9ZlJjKGYpO25SYyhnKX07dmFyIGkkPW1kYihVcWUsJ1RyZWVMYXlvdXRQcm92aWRlcicsMTEzMCk7YmNiKDE4NDcsMSx2aWUsS1JjKTtfLkpjPWZ1bmN0aW9uIExSYyhhKXtyZWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBNUmMoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTt2YXIgaiQ9bWRiKFVxZSwnVHJlZVV0aWwvMScsMTg0Nyk7YmNiKDE4NDgsMSx2aWUsTlJjKTtfLkpjPWZ1bmN0aW9uIE9SYyhhKXtyZWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBQUmMoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTt2YXIgayQ9bWRiKFVxZSwnVHJlZVV0aWwvMicsMTg0OCk7YmNiKDUwMiwxMzQsezM6MSw1MDI6MSw5NDoxLDEzNDoxfSk7Xy5nPTA7dmFyIG0kPW1kYihWcWUsJ1RHcmFwaEVsZW1lbnQnLDUwMik7YmNiKDE4OCw1MDIsezM6MSwxODg6MSw1MDI6MSw5NDoxLDEzNDoxfSxRUmMpO18uSWI9ZnVuY3Rpb24gUlJjKCl7cmV0dXJuICEhdGhpcy5iJiYhIXRoaXMuYz9XUmModGhpcy5iKSsnLT4nK1dSYyh0aGlzLmMpOidlXycrdGIodGhpcyl9O3ZhciBsJD1tZGIoVnFlLCdURWRnZScsMTg4KTtiY2IoMTM1LDEzNCx7MzoxLDEzNToxLDk0OjEsMTM0OjF9LFNSYyk7Xy5JYj1mdW5jdGlvbiBUUmMoKXt2YXIgYSxiLGMsZCxlO2U9bnVsbDtmb3IoZD1Kc2IodGhpcy5iLDApO2QuYiE9ZC5kLmM7KXtjPUJEKFhzYihkKSw4Nik7ZSs9KGMuYz09bnVsbHx8Yy5jLmxlbmd0aD09MD8nbl8nK2MuZzonbl8nK2MuYykrJ1xcbid9Zm9yKGI9SnNiKHRoaXMuYSwwKTtiLmIhPWIuZC5jOyl7YT1CRChYc2IoYiksMTg4KTtlKz0oISFhLmImJiEhYS5jP1dSYyhhLmIpKyctPicrV1JjKGEuYyk6J2VfJyt0YihhKSkrJ1xcbid9cmV0dXJuIGV9O3ZhciBuJD1tZGIoVnFlLCdUR3JhcGgnLDEzNSk7YmNiKDYzMyw1MDIsezM6MSw1MDI6MSw2MzM6MSw5NDoxLDEzNDoxfSk7dmFyIHIkPW1kYihWcWUsJ1RTaGFwZScsNjMzKTtiY2IoODYsNjMzLHszOjEsNTAyOjEsODY6MSw2MzM6MSw5NDoxLDEzNDoxfSxYUmMpO18uSWI9ZnVuY3Rpb24gWVJjKCl7cmV0dXJuIFdSYyh0aGlzKX07dmFyIHEkPW1kYihWcWUsJ1ROb2RlJyw4Nik7YmNiKDI1NSwxLHZpZSxaUmMpO18uSmM9ZnVuY3Rpb24gJFJjKGEpe3JlYih0aGlzLGEpfTtfLktjPWZ1bmN0aW9uIF9SYygpe3ZhciBhO3JldHVybiBhPUpzYih0aGlzLmEuZCwwKSxuZXcgYVNjKGEpfTt2YXIgcCQ9bWRiKFZxZSwnVE5vZGUvMicsMjU1KTtiY2IoMzU4LDEsYWllLGFTYyk7Xy5OYj1mdW5jdGlvbiBiU2MoYSl7UnJiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gZFNjKCl7cmV0dXJuIEJEKFhzYih0aGlzLmEpLDE4OCkuY307Xy5PYj1mdW5jdGlvbiBjU2MoKXtyZXR1cm4gV3NiKHRoaXMuYSl9O18uUWI9ZnVuY3Rpb24gZVNjKCl7WnNiKHRoaXMuYSl9O3ZhciBvJD1tZGIoVnFlLCdUTm9kZS8yLzEnLDM1OCk7YmNiKDE4NDAsMSxlbmUsaFNjKTtfLnBmPWZ1bmN0aW9uIGpTYyhhLGIpe2dTYyh0aGlzLEJEKGEsMTM1KSxiKX07dmFyIHMkPW1kYihXcWUsJ0ZhblByb2Nlc3NvcicsMTg0MCk7YmNiKDMyNywyMix7MzoxLDM1OjEsMjI6MSwzMjc6MSwyMzQ6MX0sclNjKTtfLktmPWZ1bmN0aW9uIHNTYygpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFFTYztjYXNlIDE6cmV0dXJuIG5ldyBoU2M7Y2FzZSAyOnJldHVybiBuZXcgR1NjO2Nhc2UgMzpyZXR1cm4gbmV3IHpTYztjYXNlIDQ6cmV0dXJuIG5ldyBOU2M7Y2FzZSA1OnJldHVybiBuZXcgVFNjO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIoRG5lKyh0aGlzLmYhPW51bGw/dGhpcy5mOicnK3RoaXMuZykpKTt9fTt2YXIga1NjLGxTYyxtU2MsblNjLG9TYyxwU2M7dmFyIHQkPW5kYihXcWUsRW5lLDMyNyxDSSx1U2MsdFNjKTt2YXIgdlNjO2JjYigxODQzLDEsZW5lLHpTYyk7Xy5wZj1mdW5jdGlvbiBBU2MoYSxiKXt4U2ModGhpcyxCRChhLDEzNSksYil9O18uYT0wO3ZhciB2JD1tZGIoV3FlLCdMZXZlbEhlaWdodFByb2Nlc3NvcicsMTg0Myk7YmNiKDE4NDQsMSx2aWUsQlNjKTtfLkpjPWZ1bmN0aW9uIENTYyhhKXtyZWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBEU2MoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTt2YXIgdSQ9bWRiKFdxZSwnTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMScsMTg0NCk7YmNiKDE4NDEsMSxlbmUsR1NjKTtfLnBmPWZ1bmN0aW9uIEhTYyhhLGIpe0VTYyh0aGlzLEJEKGEsMTM1KSxiKX07Xy5hPTA7dmFyIHgkPW1kYihXcWUsJ05laWdoYm9yc1Byb2Nlc3NvcicsMTg0MSk7YmNiKDE4NDIsMSx2aWUsSVNjKTtfLkpjPWZ1bmN0aW9uIEpTYyhhKXtyZWIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBLU2MoKXtyZXR1cm4gbW1iKCksRW1iKCksRG1ifTt2YXIgdyQ9bWRiKFdxZSwnTmVpZ2hib3JzUHJvY2Vzc29yLzEnLDE4NDIpO2JjYigxODQ1LDEsZW5lLE5TYyk7Xy5wZj1mdW5jdGlvbiBPU2MoYSxiKXtMU2ModGhpcyxCRChhLDEzNSksYil9O18uYT0wO3ZhciB5JD1tZGIoV3FlLCdOb2RlUG9zaXRpb25Qcm9jZXNzb3InLDE4NDUpO2JjYigxODM5LDEsZW5lLFFTYyk7Xy5wZj1mdW5jdGlvbiBSU2MoYSxiKXtQU2ModGhpcyxCRChhLDEzNSkpfTt2YXIgeiQ9bWRiKFdxZSwnUm9vdFByb2Nlc3NvcicsMTgzOSk7YmNiKDE4NDYsMSxlbmUsVFNjKTtfLnBmPWZ1bmN0aW9uIFVTYyhhLGIpe1NTYyhCRChhLDEzNSkpfTt2YXIgQSQ9bWRiKFdxZSwnVW50cmVlaWZ5ZXInLDE4NDYpO3ZhciBWU2MsV1NjLFhTYyxZU2MsWlNjLCRTYyxfU2MsYVRjLGJUYyxjVGMsZFRjLGVUYyxmVGMsZ1RjLGhUYyxpVGMsalRjLGtUYyxsVGM7YmNiKDg1MSwxLGFsZSxzVGMpO18uUWU9ZnVuY3Rpb24gdFRjKGEpe3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFpxZSksJycpLCdXZWlnaHRpbmcgb2YgTm9kZXMnKSwnV2hpY2ggd2VpZ2h0aW5nIHRvIHVzZSB3aGVuIGNvbXB1dGluZyBhIG5vZGUgb3JkZXIuJykscVRjKSwoXzVjKCksVjVjKSksRSQpLHBxYigoTjVjKCksTDVjKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsJHFlKSwnJyksJ1NlYXJjaCBPcmRlcicpLCdXaGljaCBzZWFyY2ggb3JkZXIgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgc3Bhbm5pbmcgdHJlZS4nKSxvVGMpLFY1YyksRiQpLHBxYihMNWMpKSkpO0tUYygobmV3IExUYyxhKSl9O3ZhciBuVGMsb1RjLHBUYyxxVGM7dmFyIEIkPW1kYihfcWUsJ01yVHJlZU1ldGFEYXRhUHJvdmlkZXInLDg1MSk7YmNiKDk5NCwxLGFsZSxMVGMpO18uUWU9ZnVuY3Rpb24gTVRjKGEpe0tUYyhhKX07dmFyIHVUYyx2VGMsd1RjLHhUYyx5VGMselRjLEFUYyxCVGMsQ1RjLERUYyxFVGMsRlRjLEdUYyxIVGMsSVRjO3ZhciBEJD1tZGIoX3FlLCdNclRyZWVPcHRpb25zJyw5OTQpO2JjYig5OTUsMSx7fSxOVGMpO18uJGU9ZnVuY3Rpb24gT1RjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IEhSYyxhfTtfLl9lPWZ1bmN0aW9uIFBUYyhhKXt9O3ZhciBDJD1tZGIoX3FlLCdNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnknLDk5NSk7YmNiKDQ4MCwyMix7MzoxLDM1OjEsMjI6MSw0ODA6MX0sVFRjKTt2YXIgUVRjLFJUYzt2YXIgRSQ9bmRiKF9xZSwnT3JkZXJXZWlnaHRpbmcnLDQ4MCxDSSxWVGMsVVRjKTt2YXIgV1RjO2JjYig0MjUsMjIsezM6MSwzNToxLDIyOjEsNDI1OjF9LF9UYyk7dmFyIFlUYyxaVGM7dmFyIEYkPW5kYihfcWUsJ1RyZWVpZnlpbmdPcmRlcicsNDI1LENJLGJVYyxhVWMpO3ZhciBjVWM7YmNiKDE0NTksMSxCcWUsbFVjKTtfLllmPWZ1bmN0aW9uIG1VYyhhKXtyZXR1cm4gQkQoYSwxMzUpLGVVY307Xy5wZj1mdW5jdGlvbiBuVWMoYSxiKXtrVWModGhpcyxCRChhLDEzNSksYil9O3ZhciBlVWM7dmFyIEckPW1kYignb3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDF0cmVlaWZ5JywnREZTVHJlZWlmeWVyJywxNDU5KTtiY2IoMTQ2MCwxLEJxZSxzVWMpO18uWWY9ZnVuY3Rpb24gdFVjKGEpe3JldHVybiBCRChhLDEzNSksb1VjfTtfLnBmPWZ1bmN0aW9uIHVVYyhhLGIpe3JVYyh0aGlzLEJEKGEsMTM1KSxiKX07dmFyIG9VYzt2YXIgSCQ9bWRiKCdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMm9yZGVyJywnTm9kZU9yZGVyZXInLDE0NjApO2JjYigxNDYxLDEsQnFlLENVYyk7Xy5ZZj1mdW5jdGlvbiBEVWMoYSl7cmV0dXJuIEJEKGEsMTM1KSx2VWN9O18ucGY9ZnVuY3Rpb24gRVVjKGEsYil7QVVjKHRoaXMsQkQoYSwxMzUpLGIpfTtfLmE9MDt2YXIgdlVjO3ZhciBJJD1tZGIoJ29yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UnLCdOb2RlUGxhY2VyJywxNDYxKTtiY2IoMTQ2MiwxLEJxZSxJVWMpO18uWWY9ZnVuY3Rpb24gSlVjKGEpe3JldHVybiBCRChhLDEzNSksRlVjfTtfLnBmPWZ1bmN0aW9uIEtVYyhhLGIpe0hVYyhCRChhLDEzNSksYil9O3ZhciBGVWM7dmFyIEokPW1kYignb3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDRyb3V0ZScsJ0VkZ2VSb3V0ZXInLDE0NjIpO3ZhciBMVWM7YmNiKDQ5NSwyMix7MzoxLDM1OjEsMjI6MSw0OTU6MSwyNDY6MSwyMzQ6MX0sUlVjKTtfLktmPWZ1bmN0aW9uIFRVYygpe3JldHVybiBRVWModGhpcyl9O18uWGY9ZnVuY3Rpb24gU1VjKCl7cmV0dXJuIFFVYyh0aGlzKX07dmFyIE5VYyxPVWM7dmFyIEskPW5kYihjcmUsJ1JhZGlhbExheW91dFBoYXNlcycsNDk1LENJLFZVYyxVVWMpO3ZhciBXVWM7YmNiKDExMzEsMjA5LE1sZSxaVWMpO18uWmU9ZnVuY3Rpb24gJFVjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2M9WVVjKHRoaXMsYSk7T2RkKGIsJ1JhZGlhbCBsYXlvdXQnLGMuYy5sZW5ndGgpO0NjYihERChoa2QoYSwoWldjKCksUVdjKSkpKXx8JENiKChkPW5ldyBfQ2IoKFBnZCgpLG5ldyBiaGQoYSkpKSxkKSk7aD1hVmMoYSk7amtkKGEsKE1VYygpLExVYyksaCk7aWYoIWgpe3Rocm93IHZiYihuZXcgV2RiKCdUaGUgZ2l2ZW4gZ3JhcGggaXMgbm90IGEgdHJlZSEnKSl9ZT1FZGIoRUQoaGtkKGEsVldjKSkpO2U9PTAmJihlPV9VYyhhKSk7amtkKGEsVldjLGUpO2ZvcihnPW5ldyBvbGIoWVVjKHRoaXMsYSkpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUJEKG1sYihnKSw1MSk7Zi5wZihhLFVkZChiLDEpKX1RZGQoYil9O3ZhciBMJD1tZGIoY3JlLCdSYWRpYWxMYXlvdXRQcm92aWRlcicsMTEzMSk7YmNiKDU0OSwxLERrZSxqVmMpO18udWU9ZnVuY3Rpb24ga1ZjKGEsYil7cmV0dXJuIGlWYyh0aGlzLmEsdGhpcy5iLEJEKGEsMzMpLEJEKGIsMzMpKX07Xy5GYj1mdW5jdGlvbiBsVmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIG1WYygpe3JldHVybiBuZXcgdHBiKHRoaXMpfTtfLmE9MDtfLmI9MDt2YXIgTSQ9bWRiKGNyZSwnUmFkaWFsVXRpbC9sYW1iZGEkMCRUeXBlJyw1NDkpO2JjYigxMzc1LDEsZW5lLG9WYyk7Xy5wZj1mdW5jdGlvbiBwVmMoYSxiKXtuVmMoQkQoYSwzMyksYil9O3ZhciBOJD1tZGIoZnJlLCdDYWxjdWxhdGVHcmFwaFNpemUnLDEzNzUpO2JjYig0NDIsMjIsezM6MSwzNToxLDIyOjEsNDQyOjEsMjM0OjF9LHVWYyk7Xy5LZj1mdW5jdGlvbiB2VmMoKXtzd2l0Y2godGhpcy5nKXtjYXNlIDA6cmV0dXJuIG5ldyBiV2M7Y2FzZSAxOnJldHVybiBuZXcgTlZjO2Nhc2UgMjpyZXR1cm4gbmV3IG9WYztkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKERuZSsodGhpcy5mIT1udWxsP3RoaXMuZjonJyt0aGlzLmcpKSk7fX07dmFyIHFWYyxyVmMsc1ZjO3ZhciBPJD1uZGIoZnJlLEVuZSw0NDIsQ0kseFZjLHdWYyk7dmFyIHlWYztiY2IoNjQ1LDEse30pO18uZT0xO18uZz0wO3ZhciBQJD1tZGIoZ3JlLCdBYnN0cmFjdFJhZGl1c0V4dGVuc2lvbkNvbXBhY3Rpb24nLDY0NSk7YmNiKDE3NzIsNjQ1LHt9LEtWYyk7Xy5oZz1mdW5jdGlvbiBMVmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO3RoaXMuYz1CRChoa2QoYSwoTVVjKCksTFVjKSksMzMpO0VWYyh0aGlzLHRoaXMuYyk7dGhpcy5kPXRYYyhCRChoa2QoYSwoWldjKCksV1djKSksMjkzKSk7aT1CRChoa2QoYSxLV2MpLDE5KTshIWkmJkRWYyh0aGlzLGkuYSk7aD1FRChoa2QoYSwoWTljKCksVDljKSkpO0ZWYyh0aGlzLCh1Q2IoaCksaCkpO2o9Z1ZjKHRoaXMuYyk7ISF0aGlzLmQmJnRoaXMuZC5sZyhqKTtHVmModGhpcyxqKTtnPW5ldyBhbWIoT0MoR0MoRTIsMSksaHJlLDMzLDAsW3RoaXMuY10pKTtmb3IoYz0wO2M8MjtjKyspe2ZvcihiPTA7YjxqLmMubGVuZ3RoO2IrKyl7ZT1uZXcgYW1iKE9DKEdDKEUyLDEpLGhyZSwzMywwLFsodENiKGIsai5jLmxlbmd0aCksQkQoai5jW2JdLDMzKSldKSk7Zj1iPGouYy5sZW5ndGgtMT8odENiKGIrMSxqLmMubGVuZ3RoKSxCRChqLmNbYisxXSwzMykpOih0Q2IoMCxqLmMubGVuZ3RoKSxCRChqLmNbMF0sMzMpKTtkPWI9PTA/QkQoSWtiKGosai5jLmxlbmd0aC0xKSwzMyk6KHRDYihiLTEsai5jLmxlbmd0aCksQkQoai5jW2ItMV0sMzMpKTtJVmModGhpcywodENiKGIsai5jLmxlbmd0aCksQkQoai5jW2JdLDMzKSxnKSxkLGYsZSl9fX07dmFyIFEkPW1kYihncmUsJ0FubnVsdXNXZWRnZUNvbXBhY3Rpb24nLDE3NzIpO2JjYigxMzc0LDEsZW5lLE5WYyk7Xy5wZj1mdW5jdGlvbiBPVmMoYSxiKXtNVmMoQkQoYSwzMyksYil9O3ZhciBSJD1tZGIoZ3JlLCdHZW5lcmFsQ29tcGFjdG9yJywxMzc0KTtiY2IoMTc3MSw2NDUse30sU1ZjKTtfLmhnPWZ1bmN0aW9uIFRWYyhhKXt2YXIgYixjLGQsZTtjPUJEKGhrZChhLChNVWMoKSxMVWMpKSwzMyk7dGhpcy5mPWM7dGhpcy5iPXRYYyhCRChoa2QoYSwoWldjKCksV1djKSksMjkzKSk7ZT1CRChoa2QoYSxLV2MpLDE5KTshIWUmJkRWYyh0aGlzLGUuYSk7ZD1FRChoa2QoYSwoWTljKCksVDljKSkpO0ZWYyh0aGlzLCh1Q2IoZCksZCkpO2I9Z1ZjKGMpOyEhdGhpcy5iJiZ0aGlzLmIubGcoYik7UVZjKHRoaXMsYil9O18uYT0wO3ZhciBTJD1tZGIoZ3JlLCdSYWRpYWxDb21wYWN0aW9uJywxNzcxKTtiY2IoMTc3OSwxLHt9LFZWYyk7Xy5pZz1mdW5jdGlvbiBXVmMoYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMuYT1hO2I9MDtnPWdWYyhhKTtkPTA7Zm9yKGY9bmV3IG9sYihnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1CRChtbGIoZiksMzMpOysrZDtmb3IoYz1kO2M8Zy5jLmxlbmd0aDtjKyspe1VWYyh0aGlzLGUsKHRDYihjLGcuYy5sZW5ndGgpLEJEKGcuY1tjXSwzMykpKSYmKGIrPTEpfX1yZXR1cm4gYn07dmFyIFQkPW1kYihpcmUsJ0Nyb3NzaW5nTWluaW1pemF0aW9uUG9zaXRpb24nLDE3NzkpO2JjYigxNzc3LDEse30sWFZjKTtfLmlnPWZ1bmN0aW9uIFlWYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtkPTA7Zm9yKGM9bmV3IFNyKHVyKF9zZChhKS5hLktjKCksbmV3IFNxKSk7UXIoYyk7KXtiPUJEKFJyKGMpLDc5KTtoPWF0ZChCRChxdWQoKCFiLmMmJihiLmM9bmV3IHk1ZCh6MixiLDUsOCkpLGIuYyksMCksODIpKTtqPWguaStoLmcvMjtrPWguaitoLmYvMjtlPWEuaSthLmcvMjtmPWEuaithLmYvMjtsPW5ldyBkN2M7bC5hPWotZTtsLmI9ay1mO2c9bmV3IGY3YyhsLmEsbC5iKTtsNmMoZyxhLmcsYS5mKTtsLmEtPWcuYTtsLmItPWcuYjtlPWotbC5hO2Y9ay1sLmI7aT1uZXcgZjdjKGwuYSxsLmIpO2w2YyhpLGguZyxoLmYpO2wuYS09aS5hO2wuYi09aS5iO2o9ZStsLmE7az1mK2wuYjttPWotZTtuPWstZjtkKz0kd25kLk1hdGguc3FydChtKm0rbipuKX1yZXR1cm4gZH07dmFyIFUkPW1kYihpcmUsJ0VkZ2VMZW5ndGhPcHRpbWl6YXRpb24nLDE3NzcpO2JjYigxNzc4LDEse30sWlZjKTtfLmlnPWZ1bmN0aW9uICRWYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2Q9MDtmb3IoYz1uZXcgU3IodXIoX3NkKGEpLmEuS2MoKSxuZXcgU3EpKTtRcihjKTspe2I9QkQoUnIoYyksNzkpO2g9YXRkKEJEKHF1ZCgoIWIuYyYmKGIuYz1uZXcgeTVkKHoyLGIsNSw4KSksYi5jKSwwKSw4MikpO2k9aC5pK2guZy8yO2o9aC5qK2guZi8yO2U9QkQoaGtkKGgsKFk5YygpLEM5YykpLDgpO2Y9YS5pK2UuYSthLmcvMjtnPWEuaitlLmIrYS5mO2s9aS1mO2w9ai1nO2QrPSR3bmQuTWF0aC5zcXJ0KGsqaytsKmwpfXJldHVybiBkfTt2YXIgViQ9bWRiKGlyZSwnRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uJywxNzc4KTtiY2IoMTM3Myw2NDUsZW5lLGJXYyk7Xy5wZj1mdW5jdGlvbiBjV2MoYSxiKXthV2ModGhpcyxCRChhLDMzKSxiKX07dmFyIFckPW1kYignb3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLm92ZXJsYXBzJywnUmFkaXVzRXh0ZW5zaW9uT3ZlcmxhcFJlbW92YWwnLDEzNzMpO2JjYig0MjYsMjIsezM6MSwzNToxLDIyOjEsNDI2OjF9LGhXYyk7dmFyIGRXYyxlV2M7dmFyIFgkPW5kYihrcmUsJ0FubnVsdXNXZWRnZUNyaXRlcmlhJyw0MjYsQ0ksaldjLGlXYyk7dmFyIGtXYztiY2IoMzgwLDIyLHszOjEsMzU6MSwyMjoxLDM4MDoxfSxyV2MpO3ZhciBtV2MsbldjLG9XYzt2YXIgWSQ9bmRiKGtyZSxTbGUsMzgwLENJLHRXYyxzV2MpO3ZhciB1V2M7YmNiKDg1MiwxLGFsZSxJV2MpO18uUWU9ZnVuY3Rpb24gSldjKGEpe3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGxyZSksJycpLCdPcmRlciBJRCcpLCdUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuJyksbWViKDApKSwoXzVjKCksWDVjKSksSkkpLHBxYigoTjVjKCksSzVjKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsbXJlKSwnJyksJ1JhZGl1cycpLCdUaGUgcmFkaXVzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgcmFkaXVzIGZvciB0aGUgcmFkaWFsIGxheW91dGVyLicpLDApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG5yZSksJycpLCdDb21wYWN0aW9uJyksJ1dpdGggdGhlIGNvbXBhY3RlciBvcHRpb24gaXQgY2FuIGJlIGRldGVybWluZWQgaG93IGNvbXBhY3Rpb24gb24gdGhlIGdyYXBoIGlzIGRvbmUuIEl0IGNhbiBiZSBjaG9zZW4gYmV0d2VlbiBub25lLCB0aGUgcmFkaWFsIGNvbXBhY3Rpb24gb3IgdGhlIGNvbXBhY3Rpb24gb2Ygd2VkZ2VzIHNlcGFyYXRlbHkuJykseVdjKSxWNWMpLFkkKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxvcmUpLCcnKSwnQ29tcGFjdGlvbiBTdGVwIFNpemUnKSwnRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLicpLG1lYigxKSksWDVjKSxKSSkscHFiKEw1YykpKSk7bzRjKGEsb3JlLG5yZSxudWxsKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxwcmUpLCcnKSwnU29ydGVyJyksJ1NvcnQgdGhlIG5vZGVzIHBlciByYWRpdXMgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGFsZ29yaXRobS4gVGhlIHN0cmF0ZWdpZXMgYXJlIG5vbmUsIGJ5IHRoZSBnaXZlbiBvcmRlciBpZCwgb3Igc29ydGluZyB0aGVtIGJ5IHBvbGFyIGNvb3JkaW5hdGVzLicpLEVXYyksVjVjKSxiXykscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMscXJlKSwnJyksJ0FubnVsdXMgV2VkZ2UgQ3JpdGVyaWEnKSwnRGV0ZXJtaW5lIGhvdyB0aGUgd2VkZ2UgZm9yIHRoZSBub2RlIHBsYWNlbWVudCBpcyBjYWxjdWxhdGVkLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gd2VkZ2UgZGV0ZXJtaW5hdGlvbiBieSB0aGUgbnVtYmVyIG9mIGxlYXZlcyBvciBieSB0aGUgbWF4aW11bSBzdW0gb2YgZGlhZ29uYWxzLicpLEdXYyksVjVjKSxYJCkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMscnJlKSwnJyksJ1RyYW5zbGF0aW9uIE9wdGltaXphdGlvbicpLCdGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuJyksQVdjKSxWNWMpLGFfKSxwcWIoTDVjKSkpKTskV2MoKG5ldyBfV2MsYSkpfTt2YXIgd1djLHhXYyx5V2MseldjLEFXYyxCV2MsQ1djLERXYyxFV2MsRldjLEdXYzt2YXIgWiQ9bWRiKGtyZSwnUmFkaWFsTWV0YURhdGFQcm92aWRlcicsODUyKTtiY2IoOTk2LDEsYWxlLF9XYyk7Xy5RZT1mdW5jdGlvbiBhWGMoYSl7JFdjKGEpfTt2YXIgS1djLExXYyxNV2MsTldjLE9XYyxQV2MsUVdjLFJXYyxTV2MsVFdjLFVXYyxWV2MsV1djLFhXYyxZV2M7dmFyIF8kPW1kYihrcmUsJ1JhZGlhbE9wdGlvbnMnLDk5Nik7YmNiKDk5NywxLHt9LGJYYyk7Xy4kZT1mdW5jdGlvbiBjWGMoKXt2YXIgYTtyZXR1cm4gYT1uZXcgWlVjLGF9O18uX2U9ZnVuY3Rpb24gZFhjKGEpe307dmFyICQkPW1kYihrcmUsJ1JhZGlhbE9wdGlvbnMvUmFkaWFsRmFjdG9yeScsOTk3KTtiY2IoMzQwLDIyLHszOjEsMzU6MSwyMjoxLDM0MDoxfSxrWGMpO3ZhciBlWGMsZlhjLGdYYyxoWGM7dmFyIGFfPW5kYihrcmUsJ1JhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3knLDM0MCxDSSxtWGMsbFhjKTt2YXIgblhjO2JjYigyOTMsMjIsezM6MSwzNToxLDIyOjEsMjkzOjF9LHVYYyk7dmFyIHBYYyxxWGMsclhjO3ZhciBiXz1uZGIoa3JlLCdTb3J0aW5nU3RyYXRlZ3knLDI5MyxDSSx3WGMsdlhjKTt2YXIgeFhjO2JjYigxNDQ5LDEsQnFlLENYYyk7Xy5ZZj1mdW5jdGlvbiBEWGMoYSl7cmV0dXJuIEJEKGEsMzMpLG51bGx9O18ucGY9ZnVuY3Rpb24gRVhjKGEsYil7QVhjKHRoaXMsQkQoYSwzMyksYil9O18uYz0wO3ZhciBjXz1tZGIoJ29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24nLCdFYWRlc1JhZGlhbCcsMTQ0OSk7YmNiKDE3NzUsMSx7fSxGWGMpO18uamc9ZnVuY3Rpb24gR1hjKGEpe3JldHVybiBlVmMoYSl9O3ZhciBkXz1tZGIodHJlLCdBbm51bHVzV2VkZ2VCeUxlYWZzJywxNzc1KTtiY2IoMTc3NiwxLHt9LElYYyk7Xy5qZz1mdW5jdGlvbiBKWGMoYSl7cmV0dXJuIEhYYyh0aGlzLGEpfTt2YXIgZV89bWRiKHRyZSwnQW5udWx1c1dlZGdlQnlOb2RlU3BhY2UnLDE3NzYpO2JjYigxNDUwLDEsQnFlLE1YYyk7Xy5ZZj1mdW5jdGlvbiBOWGMoYSl7cmV0dXJuIEJEKGEsMzMpLG51bGx9O18ucGY9ZnVuY3Rpb24gT1hjKGEsYil7S1hjKHRoaXMsQkQoYSwzMyksYil9O3ZhciBmXz1tZGIoJ29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAycm91dGluZycsJ1N0cmFpZ2h0TGluZUVkZ2VSb3V0ZXInLDE0NTApO2JjYig4MTEsMSx7fSxRWGMpO18ua2c9ZnVuY3Rpb24gUlhjKGEpe307Xy5sZz1mdW5jdGlvbiBUWGMoYSl7UFhjKHRoaXMsYSl9O3ZhciBoXz1tZGIodXJlLCdJRFNvcnRlcicsODExKTtiY2IoMTc3NCwxLERrZSxVWGMpO18udWU9ZnVuY3Rpb24gVlhjKGEsYil7cmV0dXJuIFNYYyhCRChhLDMzKSxCRChiLDMzKSl9O18uRmI9ZnVuY3Rpb24gV1hjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBYWGMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIGdfPW1kYih1cmUsJ0lEU29ydGVyL2xhbWJkYSQwJFR5cGUnLDE3NzQpO2JjYigxNzczLDEse30sJFhjKTtfLmtnPWZ1bmN0aW9uIF9YYyhhKXtZWGModGhpcyxhKX07Xy5sZz1mdW5jdGlvbiBhWWMoYSl7dmFyIGI7aWYoIWEuZGMoKSl7aWYoIXRoaXMuZSl7Yj1iVmMoQkQoYS5YYigwKSwzMykpO1lYYyh0aGlzLGIpfVBYYyh0aGlzLmUsYSl9fTt2YXIgaV89bWRiKHVyZSwnUG9sYXJDb29yZGluYXRlU29ydGVyJywxNzczKTtiY2IoMTEzNiwyMDksTWxlLGJZYyk7Xy5aZT1mdW5jdGlvbiBlWWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGO09kZChiLCdSZWN0YW5nbGUgUGFja2luZycsMSk7Yi5uJiZiLm4mJiEhYSYmVGRkKGIsaTZkKGEpLChwZ2QoKSxtZ2QpKTtjPUVkYihFRChoa2QoYSwobFpjKCksUlljKSkpKTtwPUJEKGhrZChhLGVaYyksMzgxKTtzPUNjYihERChoa2QoYSxaWWMpKSk7dz1DY2IoREQoaGtkKGEsZFpjKSkpO2w9Q2NiKEREKGhrZChhLFZZYykpKTtBPUJEKGhrZChhLGZaYyksMTE2KTt2PUVkYihFRChoa2QoYSxqWmMpKSk7ZT1DY2IoREQoaGtkKGEsaVpjKSkpO209Q2NiKEREKGhrZChhLFdZYykpKTtyPUNjYihERChoa2QoYSxYWWMpKSk7Rj1FZGIoRUQoaGtkKGEsa1pjKSkpO0M9KCFhLmEmJihhLmE9bmV3IGNVZChFMixhLDEwLDExKSksYS5hKTtyJGMoQyk7aWYocil7bz1uZXcgUmtiO2ZvcihpPW5ldyBGeWQoQyk7aS5lIT1pLmkuZ2MoKTspe2c9QkQoRHlkKGkpLDMzKTtpa2QoZyxVWWMpJiYoby5jW28uYy5sZW5ndGhdPWcsdHJ1ZSl9Zm9yKGo9bmV3IG9sYihvKTtqLmE8ai5jLmMubGVuZ3RoOyl7Zz1CRChtbGIoaiksMzMpO0Z0ZChDLGcpfW1tYigpO09rYihvLG5ldyBmWWMpO2ZvcihrPW5ldyBvbGIobyk7ay5hPGsuYy5jLmxlbmd0aDspe2c9QkQobWxiKGspLDMzKTtCPUJEKGhrZChnLFVZYyksMTkpLmE7Qj0kd25kLk1hdGgubWluKEIsQy5pKTt2dGQoQyxCLGcpfXE9MDtmb3IoaD1uZXcgRnlkKEMpO2guZSE9aC5pLmdjKCk7KXtnPUJEKER5ZChoKSwzMyk7amtkKGcsVFljLG1lYihxKSk7KytxfX11PXJmZChhKTt1LmEtPUEuYitBLmM7dS5iLT1BLmQrQS5hO3Q9dS5hO2lmKEY8MHx8Rjx1LmEpe249bmV3IG5ZYyhjLHAscyk7Zj1qWWMobixDLHYsQSk7Yi5uJiZiLm4mJiEhYSYmVGRkKGIsaTZkKGEpLChwZ2QoKSxtZ2QpKX1lbHNle2Y9bmV3IGQkYyhjLEYsMCwoayRjKCksaiRjKSl9dS5hKz1BLmIrQS5jO3UuYis9QS5kK0EuYTtpZighdyl7ciRjKEMpO0Q9bmV3IERaYyhjLGwsbSxlLHYpO3Q9JHduZC5NYXRoLm1heCh1LmEsZi5jKTtmPUNaYyhELEMsdCx1LGIsYSxBKX1jWWMoQyxBKTtBZmQoYSxmLmMrKEEuYitBLmMpLGYuYisoQS5kK0EuYSksZmFsc2UsdHJ1ZSk7Q2NiKEREKGhrZChhLGNaYykpKXx8JENiKChkPW5ldyBfQ2IoKFBnZCgpLG5ldyBiaGQoYSkpKSxkKSk7Yi5uJiZiLm4mJiEhYSYmVGRkKGIsaTZkKGEpLChwZ2QoKSxtZ2QpKTtRZGQoYil9O3ZhciBrXz1tZGIoeXJlLCdSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyJywxMTM2KTtiY2IoMTEzNywxLERrZSxmWWMpO18udWU9ZnVuY3Rpb24gZ1ljKGEsYil7cmV0dXJuIGRZYyhCRChhLDMzKSxCRChiLDMzKSl9O18uRmI9ZnVuY3Rpb24gaFljKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBpWWMoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIGpfPW1kYih5cmUsJ1JlY3RQYWNraW5nTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZScsMTEzNyk7YmNiKDEyNTYsMSx7fSxuWWMpO18uYT0wO18uYz1mYWxzZTt2YXIgbF89bWRiKHpyZSwnQXJlYUFwcHJveGltYXRpb24nLDEyNTYpO3ZhciBvXz1vZGIoenJlLCdCZXN0Q2FuZGlkYXRlRmlsdGVyJyk7YmNiKDYzOCwxLHs1MjY6MX0sb1ljKTtfLm1nPWZ1bmN0aW9uIHBZYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9bmV3IFJrYjtmPVBqZTtmb3IoaD1uZXcgb2xiKGEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwyMjApO2Y9JHduZC5NYXRoLm1pbihmLChnLmMrKGMuYitjLmMpKSooZy5iKyhjLmQrYy5hKSkpfWZvcihlPW5ldyBvbGIoYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9QkQobWxiKGUpLDIyMCk7KGQuYysoYy5iK2MuYykpKihkLmIrKGMuZCtjLmEpKT09ZiYmKGkuY1tpLmMubGVuZ3RoXT1kLHRydWUpfXJldHVybiBpfTt2YXIgbV89bWRiKHpyZSwnQXJlYUZpbHRlcicsNjM4KTtiY2IoNjM5LDEsezUyNjoxfSxxWWMpO18ubWc9ZnVuY3Rpb24gclljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aD1uZXcgUmtiO2k9UGplO2ZvcihnPW5ldyBvbGIoYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9QkQobWxiKGcpLDIyMCk7aT0kd25kLk1hdGgubWluKGksJHduZC5NYXRoLmFicygoZi5jKyhjLmIrYy5jKSkvKGYuYisoYy5kK2MuYSkpLWIpKX1mb3IoZT1uZXcgb2xiKGEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUJEKG1sYihlKSwyMjApOyR3bmQuTWF0aC5hYnMoKGQuYysoYy5iK2MuYykpLyhkLmIrKGMuZCtjLmEpKS1iKT09aSYmKGguY1toLmMubGVuZ3RoXT1kLHRydWUpfXJldHVybiBofTt2YXIgbl89bWRiKHpyZSwnQXNwZWN0UmF0aW9GaWx0ZXInLDYzOSk7YmNiKDYzNywxLHs1MjY6MX0sdVljKTtfLm1nPWZ1bmN0aW9uIHZZYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9bmV3IFJrYjtmPVFqZTtmb3IoaD1uZXcgb2xiKGEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUJEKG1sYihoKSwyMjApO2Y9JHduZC5NYXRoLm1heChmLHEkYyhnLmMrKGMuYitjLmMpLGcuYisoYy5kK2MuYSksZy5hKSl9Zm9yKGU9bmV3IG9sYihhKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1CRChtbGIoZSksMjIwKTtxJGMoZC5jKyhjLmIrYy5jKSxkLmIrKGMuZCtjLmEpLGQuYSk9PWYmJihpLmNbaS5jLmxlbmd0aF09ZCx0cnVlKX1yZXR1cm4gaX07dmFyIHBfPW1kYih6cmUsJ1NjYWxlTWVhc3VyZUZpbHRlcicsNjM3KTtiY2IoMzgxLDIyLHszOjEsMzU6MSwyMjoxLDM4MToxfSxBWWMpO3ZhciB3WWMseFljLHlZYzt2YXIgcV89bmRiKEFyZSwnT3B0aW1pemF0aW9uR29hbCcsMzgxLENJLENZYyxCWWMpO3ZhciBEWWM7YmNiKDg1NiwxLGFsZSxQWWMpO18uUWU9ZnVuY3Rpb24gUVljKGEpe3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLEJyZSksJycpLCdPcHRpbWl6YXRpb24gR29hbCcpLCdPcHRpbWl6YXRpb24gZ29hbCBmb3IgYXBwcm94aW1hdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IGdpdmVuIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24uIERldGVybWluZXMgd2hldGhlciBsYXlvdXQgaXMgc29ydGVkIGJ5IHRoZSBtYXhpbXVtIHNjYWxpbmcsIGFzcGVjdCByYXRpbywgb3IgYXJlYS4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGUgYXNwZWN0IHJhdGlvIG1pZ2h0IGJlIG5lYXJseSBpZ25vcmVkLicpLExZYyksKF81YygpLFY1YykpLHFfKSxwcWIoKE41YygpLEs1YykpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLENyZSksJycpLCdTaGlmdCBMYXN0IFBsYWNlZC4nKSwnV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLicpLChCY2IoKSx0cnVlKSksVDVjKSx3SSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRHJlKSwnJyksJ0N1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlIGluIHRoZSBvcmRlciBvZiBub2RlcycpLCdUaGUgcmVjdGFuZ2xlcyBhcmUgb3JkZXJlZC4gTm9ybWFsbHkgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluaXRpb24gdGhlIHRoZSBtb2RlbC4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIGEgbm9kZS4nKSxtZWIoLTEpKSxYNWMpLEpJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxFcmUpLCcnKSwnRGVzaXJlZCBpbmRleCBvZiBub2RlJyksJ1RoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBhIGRlc2lyZWQgcG9zaXRpb24gdGhhdCBoYXMgcHJlZmVyZW5jZSBvdmVyIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi4nKSxtZWIoLTEpKSxYNWMpLEpJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxGcmUpLCcnKSwnT25seSBBcmVhIEFwcHJveGltYXRpb24nKSwnSWYgZW5hYmxlZCBvbmx5IHRoZSB3aWR0aCBhcHByb3hpbWF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWQgYW5kIHRoZSBub2RlcyBhcmUgcGxhY2VkIGFjY29yZGluZ2x5LiBUaGUgbm9kZXMgYXJlIGxheW91dGVkIGFjY29yZGluZyB0byB0aGUgcGFja2luZ1N0cmF0ZWd5LiBJZiBzZXQgdG8gdHJ1ZSBub3QgZXhwYW5zaW9uIG9mIG5vZGVzIGlzIHRha2luZyBwbGFjZS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsR3JlKSwnJyksJ0NvbXBhY3QgUm93cycpLCdFbmFibGVzIGNvbXBhY3Rpb24uIENvbXBhY3RzIGJsb2NrcyBpZiB0aGV5IGRvIG5vdCB1c2UgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSByb3cuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBoYXZlIGEgc21hbGxlciBkcmF3aW5nLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBhbGwgbm9kZXMgYXJlIHBsYWNlZCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcm93cy4nKSx0cnVlKSxUNWMpLHdJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxIcmUpLCcnKSwnRml0IEFzcGVjdCBSYXRpbycpLCdFeHBhbmRzIG5vZGVzIGlmIGV4cGFuZE5vZGVzIGlzIHRydWUgdG8gZml0IHRoZSBhc3BlY3QgcmF0aW8gaW5zdGVhZCBvZiBvbmx5IGluIHRoZWlyIGJvdW5kcy4gVGhlIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiB0aGUgdXNlZCBwYWNraW5nU3RyYXRlZ3kgaXMgQVNQRUNUX1JBVElPX0RSSVZFTiwgb3RoZXJ3aXNlIHRoaXMgbWF5IHJlc3VsdCBpbiB1bnJlYXNvbmFibGUgbmRvZSBleHBhbnNpb24uJyksZmFsc2UpLFQ1Yyksd0kpLHBxYihLNWMpKSkpO280YyhhLEhyZSxKcmUsbnVsbCk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsSXJlKSwnJyksJ1RhcmdldCBXaWR0aCcpLCdPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4nKSwtMSksVTVjKSxCSSkscHFiKEs1YykpKSk7bVpjKChuZXcgblpjLGEpKX07dmFyIEZZYyxHWWMsSFljLElZYyxKWWMsS1ljLExZYyxNWWMsTlljO3ZhciByXz1tZGIoQXJlLCdSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXInLDg1Nik7YmNiKDEwMDQsMSxhbGUsblpjKTtfLlFlPWZ1bmN0aW9uIG9aYyhhKXttWmMoYSl9O3ZhciBSWWMsU1ljLFRZYyxVWWMsVlljLFdZYyxYWWMsWVljLFpZYywkWWMsX1ljLGFaYyxiWmMsY1pjLGRaYyxlWmMsZlpjLGdaYyxoWmMsaVpjLGpaYyxrWmM7dmFyIHRfPW1kYihBcmUsJ1JlY3RQYWNraW5nT3B0aW9ucycsMTAwNCk7YmNiKDEwMDUsMSx7fSxwWmMpO18uJGU9ZnVuY3Rpb24gcVpjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IGJZYyxhfTtfLl9lPWZ1bmN0aW9uIHJaYyhhKXt9O3ZhciBzXz1tZGIoQXJlLCdSZWN0UGFja2luZ09wdGlvbnMvUmVjdHBhY2tpbmdGYWN0b3J5JywxMDA1KTtiY2IoMTI1NywxLHt9LERaYyk7Xy5hPTA7Xy5iPWZhbHNlO18uYz0wO18uZD0wO18uZT1mYWxzZTtfLmY9ZmFsc2U7Xy5nPTA7dmFyIHVfPW1kYignb3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5zZWNvbmRpdGVyYXRpb24nLCdSb3dGaWxsaW5nQW5kQ29tcGFjdGlvbicsMTI1Nyk7YmNiKDE4NywxLHsxODc6MX0sUFpjKTtfLmE9MDtfLmM9ZmFsc2U7Xy5kPTA7Xy5lPTA7Xy5mPTA7Xy5nPTA7Xy5pPTA7Xy5rPWZhbHNlO18ubz1QamU7Xy5wPVBqZTtfLnI9MDtfLnM9MDtfLnQ9MDt2YXIgeF89bWRiKExyZSwnQmxvY2snLDE4Nyk7YmNiKDIxMSwxLHsyMTE6MX0sVlpjKTtfLmE9MDtfLmI9MDtfLmQ9MDtfLmU9MDtfLmY9MDt2YXIgdl89bWRiKExyZSwnQmxvY2tSb3cnLDIxMSk7YmNiKDQ0MywxLHs0NDM6MX0sYiRjKTtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDtfLmY9MDt2YXIgd189bWRiKExyZSwnQmxvY2tTdGFjaycsNDQzKTtiY2IoMjIwLDEsezIyMDoxfSxkJGMsZSRjKTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDt2YXIgel89bWRiKExyZSwnRHJhd2luZ0RhdGEnLDIyMCk7YmNiKDM1NSwyMix7MzoxLDM1OjEsMjI6MSwzNTU6MX0sbCRjKTt2YXIgZiRjLGckYyxoJGMsaSRjLGokYzt2YXIgeV89bmRiKExyZSwnRHJhd2luZ0RhdGFEZXNjcmlwdG9yJywzNTUsQ0ksbiRjLG0kYyk7dmFyIG8kYztiY2IoMjAwLDEsezIwMDoxfSx4JGMpO18uYj0wO18uYz0wO18uZT0wO18uZj0wO3ZhciBBXz1tZGIoTHJlLCdSZWN0Um93JywyMDApO2JjYig3NTYsMSx7fSxGJGMpO18uaj0wO3ZhciBHXz1tZGIoTnJlLHVuZSw3NTYpO2JjYigxMjQ1LDEse30sRyRjKTtfLkplPWZ1bmN0aW9uIEgkYyhhKXtyZXR1cm4gUzZjKGEuYSxhLmIpfTt2YXIgQl89bWRiKE5yZSx2bmUsMTI0NSk7YmNiKDEyNDYsMSx7fSxJJGMpO18uSmU9ZnVuY3Rpb24gSiRjKGEpe3JldHVybiBBJGModGhpcy5hLGEpfTt2YXIgQ189bWRiKE5yZSx3bmUsMTI0Nik7YmNiKDEyNDcsMSx7fSxLJGMpO18uSmU9ZnVuY3Rpb24gTCRjKGEpe3JldHVybiBCJGModGhpcy5hLGEpfTt2YXIgRF89bWRiKE5yZSx4bmUsMTI0Nyk7YmNiKDEyNDgsMSx7fSxNJGMpO18uSmU9ZnVuY3Rpb24gTiRjKGEpe3JldHVybiBDJGModGhpcy5hLGEpfTt2YXIgRV89bWRiKE5yZSwnRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMyRUeXBlJywxMjQ4KTtiY2IoMTI0OSwxLHt9LE8kYyk7Xy5KZT1mdW5jdGlvbiBQJGMoYSl7cmV0dXJuIEQkYyh0aGlzLmEsYSl9O3ZhciBGXz1tZGIoTnJlLHluZSwxMjQ5KTtiY2IoMTEzMywyMDksTWxlLFEkYyk7Xy5aZT1mdW5jdGlvbiBTJGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG47aWYoaWtkKGEsKGQwYygpLGMwYykpKXtuPUdEKGhrZChhLChKMGMoKSxJMGMpKSk7Zj1oNGMobjRjKCksbik7aWYoZil7Zz1CRChoZ2QoZi5mKSwyMDkpO2cuWmUoYSxVZGQoYiwxKSl9fWprZChhLFpfYywoQ19jKCksQV9jKSk7amtkKGEsJF9jLChOX2MoKSxLX2MpKTtqa2QoYSxfX2MsKGExYygpLF8wYykpO2g9QkQoaGtkKGEsKEowYygpLEUwYykpLDE5KS5hO09kZChiLCdPdmVybGFwIHJlbW92YWwnLDEpO0NjYihERChoa2QoYSxEMGMpKSkmJidudWxsNDVzY2FubGluZU92ZXJsYXBzJztpPW5ldyBUcWI7aj1uZXcgVSRjKGkpO2Q9bmV3IEYkYztjPXokYyhkLGEpO2s9dHJ1ZTtlPTA7d2hpbGUoZTxoJiZrKXtpZihDY2IoREQoaGtkKGEsRjBjKSkpKXtpLmEuJGIoKTtjT2IobmV3IGRPYihqKSxjLmkpO2lmKGkuYS5nYygpPT0wKXticmVha31jLmU9aX1IMmModGhpcy5iKTtLMmModGhpcy5iLChZJGMoKSxWJGMpLChSMGMoKSxRMGMpKTtLMmModGhpcy5iLFckYyxjLmcpO0syYyh0aGlzLmIsWCRjLChzX2MoKSxyX2MpKTt0aGlzLmE9RjJjKHRoaXMuYixjKTtmb3IobT1uZXcgb2xiKHRoaXMuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9QkQobWxiKG0pLDUxKTtsLnBmKGMsVWRkKGIsMSkpfUUkYyhkLGMpO2s9Q2NiKEREKHZOYihjLChYTmIoKSxXTmIpKSkpOysrZX15JGMoZCxjKTtRZGQoYil9O3ZhciBJXz1tZGIoTnJlLCdPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyJywxMTMzKTtiY2IoMTEzNCwxLHt9LFUkYyk7dmFyIEhfPW1kYihOcmUsJ092ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZScsMTEzNCk7YmNiKDQzNywyMix7MzoxLDM1OjEsMjI6MSw0Mzc6MX0sWiRjKTt2YXIgViRjLFckYyxYJGM7dmFyIEpfPW5kYihOcmUsJ1NQT3JFUGhhc2VzJyw0MzcsQ0ksXyRjLCQkYyk7dmFyIGFfYztiY2IoMTI1NSwxLHt9LGRfYyk7dmFyIExfPW1kYihOcmUsJ1Nocmlua1RyZWUnLDEyNTUpO2JjYigxMTM1LDIwOSxNbGUsZV9jKTtfLlplPWZ1bmN0aW9uIGZfYyhhLGIpe3ZhciBjLGQsZSxmLGc7aWYoaWtkKGEsKGQwYygpLGMwYykpKXtnPUdEKGhrZChhLGMwYykpO2U9aDRjKG40YygpLGcpO2lmKGUpe2Y9QkQoaGdkKGUuZiksMjA5KTtmLlplKGEsVWRkKGIsMSkpfX1kPW5ldyBGJGM7Yz16JGMoZCxhKTtjX2ModGhpcy5hLGMsVWRkKGIsMSkpO3kkYyhkLGMpfTt2YXIgS189bWRiKE5yZSwnU2hyaW5rVHJlZUxheW91dFByb3ZpZGVyJywxMTM1KTtiY2IoMzAwLDEzNCx7MzoxLDMwMDoxLDk0OjEsMTM0OjF9LGdfYyk7Xy5jPWZhbHNlO3ZhciBNXz1tZGIoJ29yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUuZ3JhcGgnLCdHcmFwaCcsMzAwKTtiY2IoNDgyLDIyLHszOjEsMzU6MSwyMjoxLDQ4MjoxLDI0NjoxLDIzNDoxfSxrX2MpO18uS2Y9ZnVuY3Rpb24gbV9jKCl7cmV0dXJuIGpfYyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBsX2MoKXtyZXR1cm4gal9jKHRoaXMpfTt2YXIgaF9jO3ZhciBOXz1uZGIoT3JlLFNsZSw0ODIsQ0ksb19jLG5fYyk7dmFyIHBfYztiY2IoNTUxLDIyLHszOjEsMzU6MSwyMjoxLDU1MToxLDI0NjoxLDIzNDoxfSx0X2MpO18uS2Y9ZnVuY3Rpb24gdl9jKCl7cmV0dXJuIG5ldyBJMWN9O18uWGY9ZnVuY3Rpb24gdV9jKCl7cmV0dXJuIG5ldyBJMWN9O3ZhciByX2M7dmFyIE9fPW5kYihPcmUsJ092ZXJsYXBSZW1vdmFsU3RyYXRlZ3knLDU1MSxDSSx4X2Msd19jKTt2YXIgeV9jO2JjYig0MzAsMjIsezM6MSwzNToxLDIyOjEsNDMwOjF9LERfYyk7dmFyIEFfYyxCX2M7dmFyIFBfPW5kYihPcmUsJ1Jvb3RTZWxlY3Rpb24nLDQzMCxDSSxGX2MsRV9jKTt2YXIgR19jO2JjYigzMTYsMjIsezM6MSwzNToxLDIyOjEsMzE2OjF9LE9fYyk7dmFyIElfYyxKX2MsS19jLExfYyxNX2M7dmFyIFFfPW5kYihPcmUsJ1NwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbicsMzE2LENJLFFfYyxQX2MpO3ZhciBSX2M7YmNiKDEwMDIsMSxhbGUsZjBjKTtfLlFlPWZ1bmN0aW9uIGcwYyhhKXtlMGMoYSl9O3ZhciBUX2MsVV9jLFZfYyxXX2MsWF9jLFlfYyxaX2MsJF9jLF9fYyxhMGMsYjBjLGMwYzt2YXIgU189bWRiKE9yZSwnU3BvcmVDb21wYWN0aW9uT3B0aW9ucycsMTAwMik7YmNiKDEwMDMsMSx7fSxoMGMpO18uJGU9ZnVuY3Rpb24gaTBjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IGVfYyxhfTtfLl9lPWZ1bmN0aW9uIGowYyhhKXt9O3ZhciBSXz1tZGIoT3JlLCdTcG9yZUNvbXBhY3Rpb25PcHRpb25zL1Nwb3JlQ29tcGFjdGlvbkZhY3RvcnknLDEwMDMpO2JjYig4NTUsMSxhbGUsQjBjKTtfLlFlPWZ1bmN0aW9uIEMwYyhhKXt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFFyZSksJycpLCdVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0nKSwnQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uJyksKF81YygpLFo1YykpLFpJKSxwcWIoKE41YygpLEw1YykpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFZyZSksJ3N0cnVjdHVyZScpLCdTdHJ1Y3R1cmUgRXh0cmFjdGlvbiBTdHJhdGVneScpLCdUaGlzIG9wdGlvbiBkZWZpbmVzIHdoYXQga2luZCBvZiB0cmlhbmd1bGF0aW9uIG9yIG90aGVyIHBhcnRpdGlvbmluZyBvZiB0aGUgcGxhbmUgaXMgYXBwbGllZCB0byB0aGUgdmVydGljZXMuJykseTBjKSxWNWMpLFdfKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxScmUpLCRyZSksJ1RyZWUgQ29uc3RydWN0aW9uIFN0cmF0ZWd5JyksJ1doZXRoZXIgYSBtaW5pbXVtIHNwYW5uaW5nIHRyZWUgb3IgYSBtYXhpbXVtIHNwYW5uaW5nIHRyZWUgc2hvdWxkIGJlIGNvbnN0cnVjdGVkLicpLHcwYyksVjVjKSxYXykscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsU3JlKSwkcmUpLCdDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlJyksJ1RoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLicpLHUwYyksVjVjKSxRXykscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsVHJlKSwkcmUpLCdSb290IG5vZGUgZm9yIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uJyksJ1RoZSBpZGVudGlmaWVyIG9mIHRoZSBub2RlIHRoYXQgaXMgcHJlZmVycmVkIGFzIHRoZSByb290IG9mIHRoZSBzcGFubmluZyB0cmVlLiBJZiB0aGlzIGlzIG51bGwsIHRoZSBmaXJzdCBub2RlIGlzIGNob3Nlbi4nKSxudWxsKSxaNWMpLFpJKSxwcWIoTDVjKSkpKTtvNGMoYSxUcmUsVXJlLHEwYyk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsVXJlKSwkcmUpLCdSb290IHNlbGVjdGlvbiBmb3Igc3Bhbm5pbmcgdHJlZScpLCdUaGlzIHNldHMgdGhlIG1ldGhvZCB1c2VkIHRvIHNlbGVjdCBhIHJvb3Qgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdGlvbiBvZiBhIHNwYW5uaW5nIHRyZWUnKSxzMGMpLFY1YyksUF8pLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFdyZSksQnBlKSwnQ29tcGFjdGlvbiBTdHJhdGVneScpLCdUaGlzIG9wdGlvbiBkZWZpbmVzIGhvdyB0aGUgY29tcGFjdGlvbiBpcyBhcHBsaWVkLicpLGwwYyksVjVjKSxOXykscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsWHJlKSxCcGUpLCdPcnRob2dvbmFsIENvbXBhY3Rpb24nKSwnUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuJyksKEJjYigpLGZhbHNlKSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsWXJlKSxfcmUpLCdVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwnKSxudWxsKSxtZWIoNjQpKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxacmUpLF9yZSksJ1doZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLicpLG51bGwpLHRydWUpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO0swYygobmV3IEwwYyxhKSk7ZTBjKChuZXcgZjBjLGEpKX07dmFyIGswYyxsMGMsbTBjLG4wYyxvMGMscDBjLHEwYyxyMGMsczBjLHQwYyx1MGMsdjBjLHcwYyx4MGMseTBjLHowYzt2YXIgVF89bWRiKE9yZSwnU3BvcmVNZXRhRGF0YVByb3ZpZGVyJyw4NTUpO2JjYihfaWUsMSxhbGUsTDBjKTtfLlFlPWZ1bmN0aW9uIE0wYyhhKXtLMGMoYSl9O3ZhciBEMGMsRTBjLEYwYyxHMGMsSDBjLEkwYzt2YXIgVl89bWRiKE9yZSwnU3BvcmVPdmVybGFwUmVtb3ZhbE9wdGlvbnMnLF9pZSk7YmNiKDEwMDEsMSx7fSxOMGMpO18uJGU9ZnVuY3Rpb24gTzBjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IFEkYyxhfTtfLl9lPWZ1bmN0aW9uIFAwYyhhKXt9O3ZhciBVXz1tZGIoT3JlLCdTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5JywxMDAxKTtiY2IoNTMwLDIyLHszOjEsMzU6MSwyMjoxLDUzMDoxLDI0NjoxLDIzNDoxfSxUMGMpO18uS2Y9ZnVuY3Rpb24gVjBjKCl7cmV0dXJuIFMwYyh0aGlzKX07Xy5YZj1mdW5jdGlvbiBVMGMoKXtyZXR1cm4gUzBjKHRoaXMpfTt2YXIgUTBjO3ZhciBXXz1uZGIoT3JlLCdTdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3knLDUzMCxDSSxYMGMsVzBjKTt2YXIgWTBjO2JjYig0MjksMjIsezM6MSwzNToxLDIyOjEsNDI5OjEsMjQ2OjEsMjM0OjF9LGMxYyk7Xy5LZj1mdW5jdGlvbiBlMWMoKXtyZXR1cm4gYjFjKHRoaXMpfTtfLlhmPWZ1bmN0aW9uIGQxYygpe3JldHVybiBiMWModGhpcyl9O3ZhciAkMGMsXzBjO3ZhciBYXz1uZGIoT3JlLCdUcmVlQ29uc3RydWN0aW9uU3RyYXRlZ3knLDQyOSxDSSxnMWMsZjFjKTt2YXIgaDFjO2JjYigxNDQzLDEsQnFlLGsxYyk7Xy5ZZj1mdW5jdGlvbiBsMWMoYSl7cmV0dXJuIEJEKGEsMzAwKSxuZXcgajNjfTtfLnBmPWZ1bmN0aW9uIG0xYyhhLGIpe2oxYyhCRChhLDMwMCksYil9O3ZhciBaXz1tZGIoYnNlLCdEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZScsMTQ0Myk7YmNiKDE0NDQsMSxxaWUsbjFjKTtfLnRkPWZ1bmN0aW9uIG8xYyhhKXtFa2IodGhpcy5hLEJEKGEsNjUpLmEpfTt2YXIgWV89bWRiKGJzZSwnRGVsYXVuYXlUcmlhbmd1bGF0aW9uUGhhc2UvbGFtYmRhJDAkVHlwZScsMTQ0NCk7YmNiKDc4MywxLEJxZSxzMWMpO18uWWY9ZnVuY3Rpb24gdDFjKGEpe3JldHVybiBCRChhLDMwMCksbmV3IGozY307Xy5wZj1mdW5jdGlvbiB1MWMoYSxiKXt0aGlzLm5nKEJEKGEsMzAwKSxiKX07Xy5uZz1mdW5jdGlvbiB2MWMoYSxiKXt2YXIgYyxkLGU7T2RkKGIsJ01pbmltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24nLDEpO2EuZD8oZD1hLmQuYSk6KGQ9QkQoSWtiKGEuaSwwKSw2NSkuYSk7Q2NiKEREKHZOYihhLChYTmIoKSxWTmIpKSkpPyhlPVVDYihhLmUsZCwoYz1hLmIsYykpKTooZT1VQ2IoYS5lLGQsYS5iKSk7cTFjKHRoaXMsZSxhKTtRZGQoYil9O3ZhciBiMD1tZGIoY3NlLCdNaW5TVFBoYXNlJyw3ODMpO2JjYigxNDQ2LDc4MyxCcWUsdzFjKTtfLm5nPWZ1bmN0aW9uIHkxYyhhLGIpe3ZhciBjLGQsZSxmO09kZChiLCdNYXhpbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uJywxKTtjPW5ldyB6MWMoYSk7YS5kPyhlPWEuZC5jKTooZT1CRChJa2IoYS5pLDApLDY1KS5jKTtDY2IoREQodk5iKGEsKFhOYigpLFZOYikpKSk/KGY9VUNiKGEuZSxlLChkPWMsZCkpKTooZj1VQ2IoYS5lLGUsYykpO3ExYyh0aGlzLGYsYSk7UWRkKGIpfTt2YXIgX189bWRiKGNzZSwnTWF4U1RQaGFzZScsMTQ0Nik7YmNiKDE0NDcsMSx7fSx6MWMpO18uSmU9ZnVuY3Rpb24gQTFjKGEpe3JldHVybiB4MWModGhpcy5hLGEpfTt2YXIgJF89bWRiKGNzZSwnTWF4U1RQaGFzZS9sYW1iZGEkMCRUeXBlJywxNDQ3KTtiY2IoMTQ0NSwxLHFpZSxCMWMpO18udGQ9ZnVuY3Rpb24gQzFjKGEpe3IxYyh0aGlzLmEsQkQoYSw2NSkpfTt2YXIgYTA9bWRiKGNzZSwnTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlJywxNDQ1KTtiY2IoNzg1LDEsQnFlLEkxYyk7Xy5ZZj1mdW5jdGlvbiBKMWMoYSl7cmV0dXJuIEJEKGEsMzAwKSxuZXcgajNjfTtfLnBmPWZ1bmN0aW9uIEsxYyhhLGIpe0gxYyh0aGlzLEJEKGEsMzAwKSxiKX07Xy5hPWZhbHNlO3ZhciBkMD1tZGIoZHNlLCdHcm93VHJlZVBoYXNlJyw3ODUpO2JjYig3ODYsMSxxaWUsTDFjKTtfLnRkPWZ1bmN0aW9uIE0xYyhhKXtHMWModGhpcy5hLHRoaXMuYix0aGlzLmMsQkQoYSwyMjEpKX07dmFyIGMwPW1kYihkc2UsJ0dyb3dUcmVlUGhhc2UvbGFtYmRhJDAkVHlwZScsNzg2KTtiY2IoMTQ0OCwxLEJxZSxRMWMpO18uWWY9ZnVuY3Rpb24gUjFjKGEpe3JldHVybiBCRChhLDMwMCksbmV3IGozY307Xy5wZj1mdW5jdGlvbiBTMWMoYSxiKXtQMWModGhpcyxCRChhLDMwMCksYil9O3ZhciBmMD1tZGIoZHNlLCdTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlJywxNDQ4KTtiY2IoNzg0LDEscWllLFQxYyk7Xy50ZD1mdW5jdGlvbiBVMWMoYSl7TzFjKHRoaXMuYSx0aGlzLmIsdGhpcy5jLEJEKGEsMjIxKSl9O3ZhciBlMD1tZGIoZHNlLCdTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUnLDc4NCk7dmFyIGcyPW9kYih5cWUsJ0lHcmFwaEVsZW1lbnRWaXNpdG9yJyk7YmNiKDg2MCwxLHs1Mjc6MX0sYjJjKTtfLm9nPWZ1bmN0aW9uIGUyYyhhKXt2YXIgYjtiPWEyYyh0aGlzLGEpO3ROYihiLEJEKE9oYih0aGlzLmIsYSksOTQpKTskMWModGhpcyxhLGIpfTt2YXIgVjFjLFcxYyxYMWM7dmFyIG0wPW1kYihObGUsJ0xheW91dENvbmZpZ3VyYXRvcicsODYwKTt2YXIgaDA9b2RiKE5sZSwnTGF5b3V0Q29uZmlndXJhdG9yL0lQcm9wZXJ0eUhvbGRlck9wdGlvbkZpbHRlcicpO2JjYig5MzIsMSx7MTkzMzoxfSxmMmMpO18ucGc9ZnVuY3Rpb24gZzJjKGEsYil7cmV0dXJuIFkxYygpLCFhLlhlKGIpfTt2YXIgaTA9bWRiKE5sZSwnTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUnLDkzMik7YmNiKDkzMywxLHsxOTMzOjF9LGkyYyk7Xy5wZz1mdW5jdGlvbiBqMmMoYSxiKXtyZXR1cm4gaDJjKGEsYil9O3ZhciBqMD1tZGIoTmxlLCdMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZScsOTMzKTtiY2IoOTMxLDEsezgzMToxfSxrMmMpO18ucWc9ZnVuY3Rpb24gbDJjKGEsYil7cmV0dXJuIFkxYygpLCFhLlhlKGIpfTt2YXIgazA9bWRiKE5sZSwnTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUnLDkzMSk7YmNiKDkzNCwxLE9pZSxtMmMpO18uTWI9ZnVuY3Rpb24gbjJjKGEpe3JldHVybiBkMmModGhpcy5hLHRoaXMuYixCRChhLDE5MzMpKX07dmFyIGwwPW1kYihObGUsJ0xheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMyRUeXBlJyw5MzQpO2JjYig4NTgsMSx7fSx3MmMpO3ZhciBuMD1tZGIoTmxlLCdSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZScsODU4KTtiY2IoMjk2LDYwLFRpZSx4MmMseTJjKTt2YXIgbzA9bWRiKE5sZSwnVW5zdXBwb3J0ZWRDb25maWd1cmF0aW9uRXhjZXB0aW9uJywyOTYpO2JjYig0NTMsNjAsVGllLHoyYyk7dmFyIHAwPW1kYihObGUsJ1Vuc3VwcG9ydGVkR3JhcGhFeGNlcHRpb24nLDQ1Myk7YmNiKDc1NCwxLHt9KTt2YXIgSzE9bWRiKHlxZSwnQWJzdHJhY3RSYW5kb21MaXN0QWNjZXNzb3InLDc1NCk7YmNiKDUwMCw3NTQse30sTDJjKTtfLnJnPWZ1bmN0aW9uIE4yYygpe3JldHVybiBudWxsfTtfLmQ9dHJ1ZTtfLmU9dHJ1ZTtfLmY9MDt2YXIgdjA9bWRiKGZzZSwnQWxnb3JpdGhtQXNzZW1ibGVyJyw1MDApO2JjYigxMjM2LDEsT2llLE8yYyk7Xy5NYj1mdW5jdGlvbiBQMmMoYSl7cmV0dXJuICEhQkQoYSwxMjMpfTt2YXIgcTA9bWRiKGZzZSwnQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUnLDEyMzYpO2JjYigxMjM3LDEse30sUTJjKTtfLktiPWZ1bmN0aW9uIFIyYyhhKXtyZXR1cm4gTTJjKHRoaXMuYSxCRChhLDEyMykpfTt2YXIgcjA9bWRiKGZzZSwnQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQxJFR5cGUnLDEyMzcpO2JjYigxMjM4LDEsT2llLFMyYyk7Xy5NYj1mdW5jdGlvbiBUMmMoYSl7cmV0dXJuICEhQkQoYSw4MCl9O3ZhciBzMD1tZGIoZnNlLCdBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDIkVHlwZScsMTIzOCk7YmNiKDEyMzksMSxxaWUsVTJjKTtfLnRkPWZ1bmN0aW9uIFYyYyhhKXtkM2ModGhpcy5hLEJEKGEsODApKX07dmFyIHQwPW1kYihmc2UsJ0FsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMyRUeXBlJywxMjM5KTtiY2IoMTI0MCwxLHFpZSxXMmMpO18udGQ9ZnVuY3Rpb24gWDJjKGEpe0cyYyh0aGlzLmEsdGhpcy5iLEJEKGEsMjM0KSl9O3ZhciB1MD1tZGIoZnNlLCdBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDQkVHlwZScsMTI0MCk7YmNiKDEzNTUsMSxEa2UsWjJjKTtfLnVlPWZ1bmN0aW9uICQyYyhhLGIpe3JldHVybiBZMmMoQkQoYSwyMzQpLEJEKGIsMjM0KSl9O18uRmI9ZnVuY3Rpb24gXzJjKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBhM2MoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIHcwPW1kYihmc2UsJ0VudW1CYXNlZEZhY3RvcnlDb21wYXJhdG9yJywxMzU1KTtiY2IoODAsNzU0LHs4MDoxfSxqM2MpO18ucmc9ZnVuY3Rpb24gbDNjKCl7cmV0dXJuIG5ldyBUcWJ9O18uYT0wO3ZhciB4MD1tZGIoZnNlLCdMYXlvdXRQcm9jZXNzb3JDb25maWd1cmF0aW9uJyw4MCk7YmNiKDEwMTMsMSx7NTI3OjF9LHEzYyk7Xy5vZz1mdW5jdGlvbiB1M2MoYSl7c3RiKG4zYyxuZXcgejNjKGEpKX07dmFyIG0zYyxuM2MsbzNjO3ZhciBCMD1tZGIoWGtlLCdEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXInLDEwMTMpO2JjYigxMDE0LDEscWllLHYzYyk7Xy50ZD1mdW5jdGlvbiB3M2MoYSl7cjNjKEJEKGEsMTYwKSl9O3ZhciB5MD1tZGIoWGtlLCdEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDAkVHlwZScsMTAxNCk7YmNiKDEwMTUsMSxxaWUseDNjKTtfLnRkPWZ1bmN0aW9uIHkzYyhhKXtzM2MoQkQoYSwxNjApKX07dmFyIHowPW1kYihYa2UsJ0RlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMSRUeXBlJywxMDE1KTtiY2IoMTAxNiwxLHt9LHozYyk7Xy5PZD1mdW5jdGlvbiBBM2MoYSxiKXt0M2ModGhpcy5hLEJEKGEsMTQ2KSxCRChiLDM4KSl9O3ZhciBBMD1tZGIoWGtlLCdEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDIkVHlwZScsMTAxNik7YmNiKDE0OSwxLHs2ODY6MSwxNDk6MX0sRTNjKTtfLkZiPWZ1bmN0aW9uIEYzYyhhKXtyZXR1cm4gQzNjKHRoaXMsYSl9O18uc2c9ZnVuY3Rpb24gRzNjKCl7cmV0dXJuIHRoaXMuYn07Xy50Zz1mdW5jdGlvbiBIM2MoKXtyZXR1cm4gdGhpcy5jfTtfLm5lPWZ1bmN0aW9uIEkzYygpe3JldHVybiB0aGlzLmV9O18uSGI9ZnVuY3Rpb24gSjNjKCl7cmV0dXJuIExDYih0aGlzLmMpfTtfLkliPWZ1bmN0aW9uIEszYygpe3JldHVybiAnTGF5b3V0IEFsZ29yaXRobTogJyt0aGlzLmN9O3ZhciBFMD1tZGIoWGtlLCdMYXlvdXRBbGdvcml0aG1EYXRhJywxNDkpO2JjYigyNjMsMSx7fSxSM2MpO3ZhciBEMD1tZGIoWGtlLCdMYXlvdXRBbGdvcml0aG1EYXRhL0J1aWxkZXInLDI2Myk7YmNiKDEwMTcsMSx7NTI3OjF9LFUzYyk7Xy5vZz1mdW5jdGlvbiBWM2MoYSl7SkQoYSwyMzkpJiYhQ2NiKEREKGEuV2UoKFk5YygpLGQ5YykpKSkmJlMzYyhCRChhLDMzKSl9O3ZhciBGMD1tZGIoWGtlLCdMYXlvdXRBbGdvcml0aG1SZXNvbHZlcicsMTAxNyk7YmNiKDIyOSwxLHs2ODY6MSwyMjk6MX0sVzNjKTtfLkZiPWZ1bmN0aW9uIFgzYyhhKXtpZihKRChhLDIyOSkpe3JldHVybiBkZmIodGhpcy5iLEJEKGEsMjI5KS5iKX1yZXR1cm4gZmFsc2V9O18uc2c9ZnVuY3Rpb24gWTNjKCl7cmV0dXJuIHRoaXMuYX07Xy50Zz1mdW5jdGlvbiBaM2MoKXtyZXR1cm4gdGhpcy5ifTtfLm5lPWZ1bmN0aW9uICQzYygpe3JldHVybiB0aGlzLmR9O18uSGI9ZnVuY3Rpb24gXzNjKCl7cmV0dXJuIExDYih0aGlzLmIpfTtfLkliPWZ1bmN0aW9uIGE0Yygpe3JldHVybiAnTGF5b3V0IFR5cGU6ICcrdGhpcy5ifTt2YXIgSDA9bWRiKFhrZSwnTGF5b3V0Q2F0ZWdvcnlEYXRhJywyMjkpO2JjYigzNDQsMSx7fSxlNGMpO3ZhciBHMD1tZGIoWGtlLCdMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlcicsMzQ0KTtiY2IoODY3LDEse30sbTRjKTt2YXIgZjRjO3ZhciBjMT1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UnLDg2Nyk7YmNiKDg2OCwxLHt9LHY0Yyk7dmFyIEowPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeScsODY4KTtiY2IoNDc4LDEsezQ3ODoxfSx3NGMpO3ZhciBJMD1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvUmVnaXN0cnkvVHJpcGxlJyw0NzgpO2JjYig4NjksMSxnc2UseDRjKTtfLnVnPWZ1bmN0aW9uIHk0Yygpe3JldHVybiBuZXcgZDdjfTt2YXIgSzA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQwJFR5cGUnLDg2OSk7YmNiKDg3MCwxLGhzZSx6NGMpO18udmc9ZnVuY3Rpb24gQTRjKGEpe3JldHVybiBSNmMoQkQoYSw4KSl9O3ZhciBMMD1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEkVHlwZScsODcwKTtiY2IoODc5LDEsZ3NlLEI0Yyk7Xy51Zz1mdW5jdGlvbiBDNGMoKXtyZXR1cm4gbmV3IFJrYn07dmFyIE0wPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTAkVHlwZScsODc5KTtiY2IoODgwLDEsaHNlLEQ0Yyk7Xy52Zz1mdW5jdGlvbiBFNGMoYSl7cmV0dXJuIG5ldyBUa2IoQkQoYSwxMikpfTt2YXIgTjA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMSRUeXBlJyw4ODApO2JjYig4ODEsMSxnc2UsRjRjKTtfLnVnPWZ1bmN0aW9uIEc0Yygpe3JldHVybiBuZXcgUHNifTt2YXIgTzA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMiRUeXBlJyw4ODEpO2JjYig4ODIsMSxoc2UsSDRjKTtfLnZnPWZ1bmN0aW9uIEk0YyhhKXtyZXR1cm4gUnUoQkQoYSw2OCkpfTt2YXIgUDA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMyRUeXBlJyw4ODIpO2JjYig4ODMsMSxnc2UsSjRjKTtfLnVnPWZ1bmN0aW9uIEs0Yygpe3JldHVybiBuZXcgVHFifTt2YXIgUTA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNCRUeXBlJyw4ODMpO2JjYig4ODQsMSxoc2UsTDRjKTtfLnZnPWZ1bmN0aW9uIE00YyhhKXtyZXR1cm4gRHgoQkQoYSw1MykpfTt2YXIgUjA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlJyw4ODQpO2JjYig4ODUsMSxnc2UsTjRjKTtfLnVnPWZ1bmN0aW9uIE80Yygpe3JldHVybiBuZXcgenNifTt2YXIgUzA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNiRUeXBlJyw4ODUpO2JjYig4ODYsMSxoc2UsUDRjKTtfLnZnPWZ1bmN0aW9uIFE0YyhhKXtyZXR1cm4gR3goQkQoYSw1MykpfTt2YXIgVDA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNyRUeXBlJyw4ODYpO2JjYig4ODcsMSxnc2UsUjRjKTtfLnVnPWZ1bmN0aW9uIFM0Yygpe3JldHVybiBuZXcgR3hifTt2YXIgVTA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxOCRUeXBlJyw4ODcpO2JjYig4ODgsMSxoc2UsVDRjKTtfLnZnPWZ1bmN0aW9uIFU0YyhhKXtyZXR1cm4gSHgoQkQoYSwyMDgpKX07dmFyIFYwPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTkkVHlwZScsODg4KTtiY2IoODcxLDEsZ3NlLFY0Yyk7Xy51Zz1mdW5jdGlvbiBXNGMoKXtyZXR1cm4gbmV3IHM3Y307dmFyIFcwPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlJyw4NzEpO2JjYig4NzIsMSxoc2UsWDRjKTtfLnZnPWZ1bmN0aW9uIFk0YyhhKXtyZXR1cm4gbmV3IHQ3YyhCRChhLDc0KSl9O3ZhciBYMD1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDMkVHlwZScsODcyKTtiY2IoODczLDEsZ3NlLFo0Yyk7Xy51Zz1mdW5jdGlvbiAkNGMoKXtyZXR1cm4gbmV3IEhfYn07dmFyIFkwPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlJyw4NzMpO2JjYig4NzQsMSxoc2UsXzRjKTtfLnZnPWZ1bmN0aW9uIGE1YyhhKXtyZXR1cm4gbmV3IEtfYihCRChhLDE0MikpfTt2YXIgWjA9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ1JFR5cGUnLDg3NCk7YmNiKDg3NSwxLGdzZSxiNWMpO18udWc9ZnVuY3Rpb24gYzVjKCl7cmV0dXJuIG5ldyBwMGJ9O3ZhciAkMD1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDYkVHlwZScsODc1KTtiY2IoODc2LDEsaHNlLGQ1Yyk7Xy52Zz1mdW5jdGlvbiBlNWMoYSl7cmV0dXJuIG5ldyByMGIoQkQoYSwxMTYpKX07dmFyIF8wPW1kYihYa2UsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNyRUeXBlJyw4NzYpO2JjYig4NzcsMSxnc2UsZjVjKTtfLnVnPWZ1bmN0aW9uIGc1Yygpe3JldHVybiBuZXcgX2ZkfTt2YXIgYTE9bWRiKFhrZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ4JFR5cGUnLDg3Nyk7YmNiKDg3OCwxLGhzZSxoNWMpO18udmc9ZnVuY3Rpb24gaTVjKGEpe3JldHVybiBuZXcgYWdkKEJEKGEsMzczKSl9O3ZhciBiMT1tZGIoWGtlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDkkVHlwZScsODc4KTt2YXIgUTM9b2RiKEhsZSwnSVByb3BlcnR5Jyk7YmNiKDIzLDEsezM1OjEsNjg2OjEsMjM6MSwxNDY6MX0scDVjKTtfLndkPWZ1bmN0aW9uIHE1YyhhKXtyZXR1cm4gazVjKHRoaXMsQkQoYSwxNDYpKX07Xy5GYj1mdW5jdGlvbiByNWMoYSl7cmV0dXJuIEpEKGEsMjMpP2RmYih0aGlzLmYsQkQoYSwyMykuZik6SkQoYSwxNDYpJiZkZmIodGhpcy5mLEJEKGEsMTQ2KS50ZygpKX07Xy53Zz1mdW5jdGlvbiBzNWMoKXt2YXIgYTtpZihKRCh0aGlzLmIsNCkpe2E9ZnZkKHRoaXMuYik7aWYoYT09bnVsbCl7dGhyb3cgdmJiKG5ldyBaZGIobXNlK3RoaXMuZitcIicuIFwiK1wiTWFrZSBzdXJlIGl0J3MgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIFwiKyhmZGIoWTMpLFkzLmspK2pzZSkpfXJldHVybiBhfWVsc2V7cmV0dXJuIHRoaXMuYn19O18uc2c9ZnVuY3Rpb24gdDVjKCl7cmV0dXJuIHRoaXMuZH07Xy50Zz1mdW5jdGlvbiB1NWMoKXtyZXR1cm4gdGhpcy5mfTtfLm5lPWZ1bmN0aW9uIHY1Yygpe3JldHVybiB0aGlzLml9O18uSGI9ZnVuY3Rpb24gdzVjKCl7cmV0dXJuIExDYih0aGlzLmYpfTtfLkliPWZ1bmN0aW9uIHg1Yygpe3JldHVybiAnTGF5b3V0IE9wdGlvbjogJyt0aGlzLmZ9O3ZhciBnMT1tZGIoWGtlLCdMYXlvdXRPcHRpb25EYXRhJywyMyk7YmNiKDI0LDEse30sSDVjKTt2YXIgZDE9bWRiKFhrZSwnTGF5b3V0T3B0aW9uRGF0YS9CdWlsZGVyJywyNCk7YmNiKDE3NSwyMix7MzoxLDM1OjEsMjI6MSwxNzU6MX0sTzVjKTt2YXIgSTVjLEo1YyxLNWMsTDVjLE01Yzt2YXIgZTE9bmRiKFhrZSwnTGF5b3V0T3B0aW9uRGF0YS9UYXJnZXQnLDE3NSxDSSxRNWMsUDVjKTt2YXIgUjVjO2JjYigyNzcsMjIsezM6MSwzNToxLDIyOjEsMjc3OjF9LGE2Yyk7dmFyIFQ1YyxVNWMsVjVjLFc1YyxYNWMsWTVjLFo1YywkNWM7dmFyIGYxPW5kYihYa2UsJ0xheW91dE9wdGlvbkRhdGEvVHlwZScsMjc3LENJLGM2YyxiNmMpO3ZhciBkNmM7dmFyIGY2Yzt2YXIgaDZjO2JjYigxMTAsMSx7MTEwOjF9LEk2YyxKNmMsSzZjKTtfLkZiPWZ1bmN0aW9uIEw2YyhhKXt2YXIgYjtpZihhPT1udWxsfHwhSkQoYSwxMTApKXtyZXR1cm4gZmFsc2V9Yj1CRChhLDExMCk7cmV0dXJuIHd0Yih0aGlzLmMsYi5jKSYmd3RiKHRoaXMuZCxiLmQpJiZ3dGIodGhpcy5iLGIuYikmJnd0Yih0aGlzLmEsYi5hKX07Xy5IYj1mdW5jdGlvbiBNNmMoKXtyZXR1cm4gSGxiKE9DKEdDKFNJLDEpLFVoZSwxLDUsW3RoaXMuYyx0aGlzLmQsdGhpcy5iLHRoaXMuYV0pKX07Xy5JYj1mdW5jdGlvbiBONmMoKXtyZXR1cm4gJ1JlY3RbeD0nK3RoaXMuYysnLHk9Jyt0aGlzLmQrJyx3PScrdGhpcy5iKycsaD0nK3RoaXMuYSsnXSd9O18uYT0wO18uYj0wO18uYz0wO18uZD0wO3ZhciBrMT1tZGIocG5lLCdFbGtSZWN0YW5nbGUnLDExMCk7YmNiKDgsMSx7MzoxLDQ6MSw4OjEsNDE0OjF9LGQ3YyxlN2MsZjdjLGc3Yyk7Xy5GYj1mdW5jdGlvbiBoN2MoYSl7cmV0dXJuIFQ2Yyh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIGk3Yygpe3JldHVybiBIZGIodGhpcy5hKStqZWIoSGRiKHRoaXMuYikpfTtfLkpmPWZ1bmN0aW9uIGs3YyhiKXt2YXIgYyxkLGUsZjtlPTA7d2hpbGUoZTxiLmxlbmd0aCYmajdjKChCQ2IoZSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGUpKSxtbmUpKXsrK2V9Yz1iLmxlbmd0aDt3aGlsZShjPjAmJmo3YygoQkNiKGMtMSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGMtMSkpLG5uZSkpey0tY31pZihlPj1jKXt0aHJvdyB2YmIobmV3IFdkYignVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGFueSBudW1iZXJzLicpKX1mPW1mYihiLnN1YnN0cihlLGMtZSksJyx8O3xcXHJ8XFxuJyk7aWYoZi5sZW5ndGghPTIpe3Rocm93IHZiYihuZXcgV2RiKCdFeGFjdGx5IHR3byBudW1iZXJzIGFyZSBleHBlY3RlZCwgJytmLmxlbmd0aCsnIHdlcmUgZm91bmQuJykpfXRyeXt0aGlzLmE9SGNiKHVmYihmWzBdKSk7dGhpcy5iPUhjYih1ZmIoZlsxXSkpfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTI3KSl7ZD1hO3Rocm93IHZiYihuZXcgV2RiKG9uZStkKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fTtfLkliPWZ1bmN0aW9uIG03Yygpe3JldHVybiAnKCcrdGhpcy5hKycsJyt0aGlzLmIrJyknfTtfLmE9MDtfLmI9MDt2YXIgbTE9bWRiKHBuZSwnS1ZlY3RvcicsOCk7YmNiKDc0LDY4LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxLDc0OjEsNDE0OjF9LHM3Yyx0N2MsdTdjKTtfLlBjPWZ1bmN0aW9uIHg3Yygpe3JldHVybiByN2ModGhpcyl9O18uSmY9ZnVuY3Rpb24gdjdjKGIpe3ZhciBjLGQsZSxmLGcsaDtlPW1mYihiLCcsfDt8XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH18IHxcXHR8XFxuJyk7T3NiKHRoaXMpO3RyeXtkPTA7Zz0wO2Y9MDtoPTA7d2hpbGUoZDxlLmxlbmd0aCl7aWYoZVtkXSE9bnVsbCYmdWZiKGVbZF0pLmxlbmd0aD4wKXtnJTI9PTA/KGY9SGNiKGVbZF0pKTooaD1IY2IoZVtkXSkpO2c+MCYmZyUyIT0wJiZEc2IodGhpcyxuZXcgZjdjKGYsaCkpOysrZ30rK2R9fWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTI3KSl7Yz1hO3Rocm93IHZiYihuZXcgV2RiKCdUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQgZm9yIHZlY3RvcnMuJytjKSl9ZWxzZSB0aHJvdyB2YmIoYSl9fTtfLkliPWZ1bmN0aW9uIHk3Yygpe3ZhciBhLGIsYzthPW5ldyBXZmIoJygnKTtiPUpzYih0aGlzLDApO3doaWxlKGIuYiE9Yi5kLmMpe2M9QkQoWHNiKGIpLDgpO1FmYihhLGMuYSsnLCcrYy5iKTtiLmIhPWIuZC5jJiYoYS5hKz0nOyAnLGEpfXJldHVybiAoYS5hKz0nKScsYSkuYX07dmFyIGwxPW1kYihwbmUsJ0tWZWN0b3JDaGFpbicsNzQpO2JjYigyNDgsMjIsezM6MSwzNToxLDIyOjEsMjQ4OjF9LEc3Yyk7dmFyIHo3YyxBN2MsQjdjLEM3YyxEN2MsRTdjO3ZhciBvMT1uZGIob3NlLCdBbGlnbm1lbnQnLDI0OCxDSSxJN2MsSDdjKTt2YXIgSjdjO2JjYig5NzksMSxhbGUsWjdjKTtfLlFlPWZ1bmN0aW9uICQ3YyhhKXtZN2MoYSl9O3ZhciBMN2MsTTdjLE43YyxPN2MsUDdjLFE3YyxSN2MsUzdjLFQ3YyxVN2MsVjdjLFc3Yzt2YXIgcTE9bWRiKG9zZSwnQm94TGF5b3V0ZXJPcHRpb25zJyw5NzkpO2JjYig5ODAsMSx7fSxfN2MpO18uJGU9ZnVuY3Rpb24gYThjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IGdlZCxhfTtfLl9lPWZ1bmN0aW9uIGI4YyhhKXt9O3ZhciBwMT1tZGIob3NlLCdCb3hMYXlvdXRlck9wdGlvbnMvQm94RmFjdG9yeScsOTgwKTtiY2IoMjkxLDIyLHszOjEsMzU6MSwyMjoxLDI5MToxfSxqOGMpO3ZhciBjOGMsZDhjLGU4YyxmOGMsZzhjLGg4Yzt2YXIgcjE9bmRiKG9zZSwnQ29udGVudEFsaWdubWVudCcsMjkxLENJLGw4YyxrOGMpO3ZhciBtOGM7YmNiKDY4NCwxLGFsZSxaOWMpO18uUWU9ZnVuY3Rpb24gJDljKGEpe3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsc3NlKSwnJyksJ0xheW91dCBBbGdvcml0aG0nKSwnU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4nKSwoXzVjKCksWjVjKSksWkkpLHBxYigoTjVjKCksTDVjKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx0c2UpLCcnKSwnUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobScpLCdNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uJyksWTVjKSxFMCkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsJHBlKSwnJyksJ0FsaWdubWVudCcpLCdBbGlnbm1lbnQgb2YgdGhlIHNlbGVjdGVkIG5vZGUgcmVsYXRpdmUgdG8gb3RoZXIgbm9kZXM7IHRoZSBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHVzZWQgYWxnb3JpdGhtLicpLHE4YyksVjVjKSxvMSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxfbGUpLCcnKSwnQXNwZWN0IFJhdGlvJyksJ1RoZSBkZXNpcmVkIGFzcGVjdCByYXRpbyBvZiB0aGUgZHJhd2luZywgdGhhdCBpcyB0aGUgcXVvdGllbnQgb2Ygd2lkdGggYnkgaGVpZ2h0LicpLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsdXNlKSwnJyksJ0JlbmQgUG9pbnRzJyksXCJBIGZpeGVkIGxpc3Qgb2YgYmVuZCBwb2ludHMgZm9yIHRoZSBlZGdlLiBUaGlzIGlzIHVzZWQgYnkgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSB0byBzcGVjaWZ5IGEgcHJlLWRlZmluZWQgcm91dGluZyBmb3IgYW4gZWRnZS4gVGhlIHZlY3RvciBjaGFpbiBtdXN0IGluY2x1ZGUgdGhlIHNvdXJjZSBwb2ludCwgYW55IGJlbmQgcG9pbnRzLCBhbmQgdGhlIHRhcmdldCBwb2ludCwgc28gaXQgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBwb2ludHMuXCIpLFk1YyksbDEpLHBxYihJNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGxxZSksJycpLCdDb250ZW50IEFsaWdubWVudCcpLCdTcGVjaWZpZXMgaG93IHRoZSBjb250ZW50IG9mIGEgbm9kZSBhcmUgYWxpZ25lZC4gRWFjaCBub2RlIGNhbiBpbmRpdmlkdWFsbHkgY29udHJvbCB0aGUgYWxpZ25tZW50IG9mIGl0cyBjb250ZW50cy4gSS5lLiBpZiBhIG5vZGUgc2hvdWxkIGJlIGFsaWduZWQgdG9wIGxlZnQgaW4gaXRzIHBhcmVudCBub2RlLCB0aGUgcGFyZW50IG5vZGUgc2hvdWxkIHNwZWNpZnkgdGhhdCBvcHRpb24uJykseDhjKSxXNWMpLHIxKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxacGUpLCcnKSwnRGVidWcgTW9kZScpLCdXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLicpLChCY2IoKSxmYWxzZSkpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGNxZSksJycpLENsZSksJ092ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLicpLEE4YyksVjVjKSx0MSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMseXBlKSwnJyksJ0VkZ2UgUm91dGluZycpLCdXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuJyksRjhjKSxWNWMpLHYxKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxKcmUpLCcnKSwnRXhwYW5kIE5vZGVzJyksJ0lmIGFjdGl2ZSwgbm9kZXMgYXJlIGV4cGFuZGVkIHRvIGZpbGwgdGhlIGFyZWEgb2YgdGhlaXIgcGFyZW50LicpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx0cGUpLCcnKSwnSGllcmFyY2h5IEhhbmRsaW5nJyksXCJEZXRlcm1pbmVzIHdoZXRoZXIgc2VwYXJhdGUgbGF5b3V0IHJ1bnMgYXJlIHRyaWdnZXJlZCBmb3IgZGlmZmVyZW50IGNvbXBvdW5kIG5vZGVzIGluIGEgaGllcmFyY2hpY2FsIGdyYXBoLiBTZXR0aW5nIGEgbm9kZSdzIGhpZXJhcmNoeSBoYW5kbGluZyB0byBgSU5DTFVERV9DSElMRFJFTmAgd2lsbCBsYXkgb3V0IHRoYXQgbm9kZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuLCB1bnRpbCBhIGRlc2NlbmRhbnQgaXMgZW5jb3VudGVyZWQgd2hpY2ggaGFzIGl0cyBoaWVyYXJjaHkgaGFuZGxpbmcgc2V0IHRvIGBTRVBBUkFURV9DSElMRFJFTmAuIEluIGdlbmVyYWwsIGBTRVBBUkFURV9DSElMRFJFTmAgd2lsbCBlbnN1cmUgdGhhdCBhIG5ldyBsYXlvdXQgcnVuIGlzIHRyaWdnZXJlZCBmb3IgYSBub2RlIHdpdGggdGhhdCBzZXR0aW5nLiBJbmNsdWRpbmcgbXVsdGlwbGUgbGV2ZWxzIG9mIGhpZXJhcmNoeSBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuIG1heSBhbGxvdyBjcm9zcy1oaWVyYXJjaGljYWwgZWRnZXMgdG8gYmUgbGFpZCBvdXQgcHJvcGVybHkuIElmIHRoZSByb290IG5vZGUgaXMgc2V0IHRvIGBJTkhFUklUYCAob3Igbm90IHNldCBhdCBhbGwpLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyBgU0VQQVJBVEVfQ0hJTERSRU5gLlwiKSxLOGMpLFY1YyksejEpLHFxYihMNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtLNWNdKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYW1lKSwnJyksJ1BhZGRpbmcnKSxcIlRoZSBwYWRkaW5nIHRvIGJlIGxlZnQgdG8gYSBwYXJlbnQgZWxlbWVudCdzIGJvcmRlciB3aGVuIHBsYWNpbmcgY2hpbGQgZWxlbWVudHMuIFRoaXMgY2FuIGFsc28gc2VydmUgYXMgYW4gb3V0cHV0IG9wdGlvbiBvZiBhIGxheW91dCBhbGdvcml0aG0gaWYgbm9kZSBzaXplIGNhbGN1bGF0aW9uIGlzIHNldHVwIGFwcHJvcHJpYXRlbHkuXCIpLGc5YyksWTVjKSxqMSkscXFiKEw1YyxPQyhHQyhlMSwxKSxLaWUsMTc1LDAsW0s1Y10pKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxBbWUpLCcnKSwnSW50ZXJhY3RpdmUnKSwnV2hldGhlciB0aGUgYWxnb3JpdGhtIHNob3VsZCBiZSBydW4gaW4gaW50ZXJhY3RpdmUgbW9kZSBmb3IgdGhlIGNvbnRlbnQgb2YgYSBwYXJlbnQgbm9kZS4gV2hhdCB0aGlzIG1lYW5zIGV4YWN0bHkgZGVwZW5kcyBvbiBob3cgdGhlIHNwZWNpZmljIGFsZ29yaXRobSBpbnRlcnByZXRzIHRoaXMgb3B0aW9uLiBVc3VhbGx5IGluIHRoZSBpbnRlcmFjdGl2ZSBtb2RlIGFsZ29yaXRobXMgdHJ5IHRvIG1vZGlmeSB0aGUgY3VycmVudCBsYXlvdXQgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLicpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx4cWUpLCcnKSwnaW50ZXJhY3RpdmUgTGF5b3V0JyksJ1doZXRoZXIgdGhlIGdyYXBoIHNob3VsZCBiZSBjaGFuZ2VhYmxlIGludGVyYWN0aXZlbHkgYW5kIGJ5IHNldHRpbmcgY29uc3RyYWludHMnKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRG1lKSwnJyksJ09taXQgTm9kZSBNaWNybyBMYXlvdXQnKSxcIk5vZGUgbWljcm8gbGF5b3V0IGNvbXByaXNlcyB0aGUgY29tcHV0YXRpb24gb2Ygbm9kZSBkaW1lbnNpb25zIChpZiByZXF1ZXN0ZWQpLCB0aGUgcGxhY2VtZW50IG9mIHBvcnRzIGFuZCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgcGxhY2VtZW50IG9mIG5vZGUgbGFiZWxzLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgc2hvdWxkbid0IGhhdmUgYW55IG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSdzIHBlcmZvcm1hbmNlIGl0c2VsZi4gWWV0LCBpZiBhbnkgdW5mb3Jlc2VlbiBiZWhhdmlvciBvY2N1cnMsIHRoaXMgb3B0aW9uIGFsbG93cyB0byBkZWFjdGl2YXRlIHRoZSBtaWNybyBsYXlvdXQuXCIpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxCbWUpLCcnKSwnUG9ydCBDb25zdHJhaW50cycpLCdEZWZpbmVzIGNvbnN0cmFpbnRzIG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9ydHMgb2YgYSBub2RlLicpLHU5YyksVjVjKSxEMSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx1cWUpLCcnKSwnUG9zaXRpb24nKSxcIlRoZSBwb3NpdGlvbiBvZiBhIG5vZGUsIHBvcnQsIG9yIGxhYmVsLiBUaGlzIGlzIHVzZWQgYnkgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSB0byBzcGVjaWZ5IGEgcHJlLWRlZmluZWQgcG9zaXRpb24uXCIpLFk1YyksbTEpLHFxYihLNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtNNWMsSjVjXSkpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsdm1lKSwnJyksJ1ByaW9yaXR5JyksJ0RlZmluZXMgdGhlIHByaW9yaXR5IG9mIGFuIG9iamVjdDsgaXRzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgdGhlIGNvbnRleHQgd2hlcmUgaXQgaXMgdXNlZC4nKSxYNWMpLEpJKSxxcWIoSzVjLE9DKEdDKGUxLDEpLEtpZSwxNzUsMCxbSTVjXSkpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMseW1lKSwnJyksJ1JhbmRvbWl6YXRpb24gU2VlZCcpLCdTZWVkIHVzZWQgZm9yIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgdG8gY29udHJvbCB0aGUgbGF5b3V0IGFsZ29yaXRobS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSBzZWVkIHNoYWxsIGJlIGRldGVybWluZWQgcHNldWRvLXJhbmRvbWx5IChlLmcuIGZyb20gdGhlIHN5c3RlbSB0aW1lKS4nKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHptZSksJycpLCdTZXBhcmF0ZSBDb25uZWN0ZWQgQ29tcG9uZW50cycpLCdXaGV0aGVyIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIHNlcGFyYXRlbHkuJyksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsbXFlKSwnJyksJ0p1bmN0aW9uIFBvaW50cycpLCdUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuJyksUjhjKSxZNWMpLGwxKSxwcWIoSTVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxwcWUpLCcnKSwnQ29tbWVudCBCb3gnKSwnV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYSBjb21tZW50IGJveCBpbnN0ZWFkIG9mIGEgcmVndWxhciBub2RlLiBJbiB0aGF0IGNhc2UgaXRzIHBsYWNlbWVudCBzaG91bGQgYmUgc2ltaWxhciB0byBob3cgbGFiZWxzIGFyZSBoYW5kbGVkLiBBbnkgZWRnZXMgaW5jaWRlbnQgdG8gYSBjb21tZW50IGJveCBzcGVjaWZ5IHRvIHdoaWNoIGdyYXBoIGVsZW1lbnRzIHRoZSBjb21tZW50IGlzIHJlbGF0ZWQuJyksZmFsc2UpLFQ1Yyksd0kpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHFxZSksJycpLCdIeXBlcm5vZGUnKSwnV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx2c2UpLCcnKSwnTGFiZWwgTWFuYWdlcicpLFwiTGFiZWwgbWFuYWdlcnMgY2FuIHNob3J0ZW4gbGFiZWxzIHVwb24gYSBsYXlvdXQgYWxnb3JpdGhtJ3MgcmVxdWVzdC5cIiksWTVjKSxoMSkscXFiKEw1YyxPQyhHQyhlMSwxKSxLaWUsMTc1LDAsW0o1Y10pKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx2cWUpLCcnKSwnTWFyZ2lucycpLFwiTWFyZ2lucyBkZWZpbmUgYWRkaXRpb25hbCBzcGFjZSBhcm91bmQgdGhlIGFjdHVhbCBib3VuZHMgb2YgYSBncmFwaCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIHBvcnRzIG9yIGxhYmVscyBiZWluZyBwbGFjZWQgb24gdGhlIG91dHNpZGUgb2YgYSBub2RlJ3MgYm9yZGVyIG1pZ2h0IGludHJvZHVjZSBzdWNoIGEgbWFyZ2luLiBUaGUgbWFyZ2luIGlzIHVzZWQgdG8gZ3VhcmFudGVlIG5vbi1vdmVybGFwIG9mIG90aGVyIGdyYXBoIGVsZW1lbnRzIHdpdGggdGhvc2UgcG9ydHMgb3IgbGFiZWxzLlwiKSxUOGMpLFk1YyksaTEpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFhwZSksJycpLCdObyBMYXlvdXQnKSxcIk5vIGxheW91dCBpcyBkb25lIGZvciB0aGUgYXNzb2NpYXRlZCBlbGVtZW50LiBUaGlzIGlzIHVzZWQgdG8gbWFyayBwYXJ0cyBvZiBhIGRpYWdyYW0gdG8gYXZvaWQgdGhlaXIgaW5jbHVzaW9uIGluIHRoZSBsYXlvdXQgZ3JhcGgsIG9yIHRvIG1hcmsgcGFydHMgb2YgdGhlIGxheW91dCBncmFwaCB0byBwcmV2ZW50IGxheW91dCBlbmdpbmVzIGZyb20gcHJvY2Vzc2luZyB0aGVtLiBJZiB5b3Ugd2lzaCB0byBleGNsdWRlIHRoZSBjb250ZW50cyBvZiBhIGNvbXBvdW5kIG5vZGUgZnJvbSBhdXRvbWF0aWMgbGF5b3V0LCB3aGlsZSB0aGUgbm9kZSBpdHNlbGYgaXMgc3RpbGwgY29uc2lkZXJlZCBvbiBpdHMgb3duIGxheWVyLCB1c2UgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSBmb3IgdGhhdCBub2RlLlwiKSxmYWxzZSksVDVjKSx3SSkscXFiKEs1YyxPQyhHQyhlMSwxKSxLaWUsMTc1LDAsW0k1YyxNNWMsSjVjXSkpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHdzZSksJycpLCdTY2FsZSBGYWN0b3InKSxcIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC5cIiksMSksVTVjKSxCSSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMseHNlKSwnJyksJ0FuaW1hdGUnKSwnV2hldGhlciB0aGUgc2hpZnQgZnJvbSB0aGUgb2xkIGxheW91dCB0byB0aGUgbmV3IGNvbXB1dGVkIGxheW91dCBzaGFsbCBiZSBhbmltYXRlZC4nKSx0cnVlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx5c2UpLCcnKSwnQW5pbWF0aW9uIFRpbWUgRmFjdG9yJyksXCJGYWN0b3IgZm9yIGNvbXB1dGF0aW9uIG9mIGFuaW1hdGlvbiB0aW1lLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGxvbmdlciB0aGUgYW5pbWF0aW9uIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgcmVzdWx0aW5nIHRpbWUgaXMgYWx3YXlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIGRlZmluZWQgYnkgJ01pbmltYWwgQW5pbWF0aW9uIFRpbWUnLlwiKSxtZWIoMTAwKSksWDVjKSxKSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsenNlKSwnJyksJ0xheW91dCBBbmNlc3RvcnMnKSwnV2hldGhlciB0aGUgaGllcmFyY2h5IGxldmVscyBvbiB0aGUgcGF0aCBmcm9tIHRoZSBzZWxlY3RlZCBlbGVtZW50IHRvIHRoZSByb290IG9mIHRoZSBkaWFncmFtIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsYXlvdXQgcHJvY2Vzcy4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsQXNlKSwnJyksJ01heGltYWwgQW5pbWF0aW9uIFRpbWUnKSwnVGhlIG1heGltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLicpLG1lYig0MDAwKSksWDVjKSxKSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsQnNlKSwnJyksJ01pbmltYWwgQW5pbWF0aW9uIFRpbWUnKSwnVGhlIG1pbmltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLicpLG1lYig0MDApKSxYNWMpLEpJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxDc2UpLCcnKSwnUHJvZ3Jlc3MgQmFyJyksJ1doZXRoZXIgYSBwcm9ncmVzcyBiYXIgc2hhbGwgYmUgZGlzcGxheWVkIGR1cmluZyBsYXlvdXQgY29tcHV0YXRpb25zLicpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxEc2UpLCcnKSwnVmFsaWRhdGUgR3JhcGgnKSwnV2hldGhlciB0aGUgZ3JhcGggc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuJyksZmFsc2UpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLEVzZSksJycpLCdWYWxpZGF0ZSBPcHRpb25zJyksJ1doZXRoZXIgbGF5b3V0IG9wdGlvbnMgc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuJyksdHJ1ZSksVDVjKSx3SSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsRnNlKSwnJyksJ1pvb20gdG8gRml0JyksJ1doZXRoZXIgdGhlIHpvb20gbGV2ZWwgc2hhbGwgYmUgc2V0IHRvIHZpZXcgdGhlIHdob2xlIGRpYWdyYW0gYWZ0ZXIgbGF5b3V0LicpLGZhbHNlKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyxyc2UpLCdib3gnKSwnQm94IExheW91dCBNb2RlJyksJ0NvbmZpZ3VyZXMgdGhlIHBhY2tpbmcgbW9kZSB1c2VkIGJ5IHRoZSB7QGxpbmsgQm94TGF5b3V0UHJvdmlkZXJ9LiBJZiBTSU1QTEUgaXMgbm90IHJlcXVpcmVkIChuZWl0aGVyIHByaW9yaXRpZXMgYXJlIHVzZWQgbm9yIHRoZSBpbnRlcmFjdGl2ZSBtb2RlKSwgR1JPVVBfREVDIGNhbiBpbXByb3ZlIHRoZSBwYWNraW5nIGFuZCBkZWNyZWFzZSB0aGUgYXJlYS4gR1JPVVBfTUlYRUQgYW5kIEdST1VQX0lOQyBtYXksIGluIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW9zLCB3b3JrIGJldHRlci4nKSx1OGMpLFY1YyksTzEpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLExwZSksenBlKSwnQ29tbWVudCBDb21tZW50IFNwYWNpbmcnKSwnU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGNvbW1lbnQgYm94IGFuZCBvdGhlciBjb21tZW50IGJveGVzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGNvbW1lbnQgYm94ZXMgb2YgZGlmZmVyZW50IG5vZGVzIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLicpLDEwKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxNcGUpLHpwZSksJ0NvbW1lbnQgTm9kZSBTcGFjaW5nJyksJ1NwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgY29ubmVjdGVkIGNvbW1lbnQgYm94ZXMuIFRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gYSBub2RlIGFuZCB0aGUgY29tbWVudHMgb2YgYW5vdGhlciBub2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLicpLDEwKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxabGUpLHpwZSksJ0NvbXBvbmVudHMgU3BhY2luZycpLFwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuXCIpLDIwKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxOcGUpLHpwZSksJ0VkZ2UgU3BhY2luZycpLCdTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGFueSB0d28gZWRnZXMuIE5vdGUgdGhhdCB3aGlsZSB0aGlzIGNhbiBzb21ld2hhdCBlYXNpbHkgYmUgc2F0aXNmaWVkIGZvciB0aGUgc2VnbWVudHMgb2Ygb3J0aG9nb25hbGx5IGRyYXduIGVkZ2VzLCBpdCBpcyBoYXJkZXIgZm9yIGdlbmVyYWwgcG9seWxpbmVzIG9yIHNwbGluZXMuJyksMTApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHhtZSksenBlKSwnRWRnZSBMYWJlbCBTcGFjaW5nJyksXCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGxhYmVsIGFuZCB0aGUgZWRnZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ2VkZ2VsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uXCIpLDIpLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLE9wZSksenBlKSwnRWRnZSBOb2RlIFNwYWNpbmcnKSwnU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuJyksMTApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFBwZSksenBlKSwnTGFiZWwgU3BhY2luZycpLCdEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4nKSwwKSxVNWMpLEJJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxTcGUpLHpwZSksJ0xhYmVsIE5vZGUgU3BhY2luZycpLFwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBib3JkZXIgb2Ygbm9kZSB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ25vZGVsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uXCIpLDUpLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFFwZSksenBlKSwnSG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQnKSxcIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uXCIpLDEpLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFJwZSksenBlKSwnVmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0JyksXCJWZXJ0aWNhbCBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIHBvcnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAncG9ydGxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi5cIiksMSksVTVjKSxCSSkscHFiKEw1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsd21lKSx6cGUpLCdOb2RlIFNwYWNpbmcnKSwnVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gZWFjaCB0d28gbm9kZXMuJyksMjApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFRwZSksenBlKSwnTm9kZSBTZWxmIExvb3AgU3BhY2luZycpLCdTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIHNlbGYgbG9vcHMuJyksMTApLFU1YyksQkkpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFVwZSksenBlKSwnUG9ydCBTcGFjaW5nJyksJ1NwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBwb3J0cyBvZiB0aGUgc2FtZSBub2RlLicpLDEwKSxVNWMpLEJJKSxxcWIoTDVjLE9DKEdDKGUxLDEpLEtpZSwxNzUsMCxbSzVjXSkpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsVnBlKSx6cGUpLCdJbmRpdmlkdWFsIFNwYWNpbmcnKSxcIkFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc3BhY2luZyB2YWx1ZXMgZm9yIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2hhbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIGVsZW1lbnQncyBwYXJlbnQuXCIpLFk1YyksaTIpLHFxYihLNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtJNWMsTTVjLEo1Y10pKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1Yyx3cWUpLHpwZSksJ0FkZGl0aW9uYWwgUG9ydCBTcGFjZScpLCdBZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgc2V0cyBvZiBwb3J0cyBvbiBlYWNoIG5vZGUgc2lkZS4gRm9yIGVhY2ggc2lkZSBvZiBhIG5vZGUsIHRoaXMgb3B0aW9uIGNhbiByZXNlcnZlIGFkZGl0aW9uYWwgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9ydHMgb24gZWFjaCBzaWRlLiBGb3IgZXhhbXBsZSwgYSB0b3Agc3BhY2luZyBvZiAyMCBtYWtlcyBzdXJlIHRoYXQgdGhlIGZpcnN0IHBvcnQgb24gdGhlIHdlc3Rlcm4gYW5kIGVhc3Rlcm4gc2lkZSBpcyAyMCB1bml0cyBhd2F5IGZyb20gdGhlIG5vcnRoZXJuIGJvcmRlci4nKSxXOWMpLFk1YyksaTEpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsdHFlKSxKc2UpLCdMYXlvdXQgUGFydGl0aW9uJyksJ1BhcnRpdGlvbiB0byB3aGljaCB0aGUgbm9kZSBiZWxvbmdzLiBUaGlzIHJlcXVpcmVzIExheW91dCBQYXJ0aXRpb25pbmcgdG8gYmUgYWN0aXZlLiBOb2RlcyB3aXRoIGxvd2VyIHBhcnRpdGlvbiBJRHMgd2lsbCBhcHBlYXIgdG8gdGhlIGxlZnQgb2Ygbm9kZXMgd2l0aCBoaWdoZXIgcGFydGl0aW9uIElEcyAoYXNzdW1pbmcgYSBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLicpLFg1YyksSkkpLHFxYihMNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtLNWNdKSkpKSk7bzRjKGEsdHFlLHNxZSxrOWMpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHNxZSksSnNlKSwnTGF5b3V0IFBhcnRpdGlvbmluZycpLCdXaGV0aGVyIHRvIGFjdGl2YXRlIHBhcnRpdGlvbmVkIGxheW91dC4gVGhpcyB3aWxsIGFsbG93IHRvIGdyb3VwIG5vZGVzIHRocm91Z2ggdGhlIExheW91dCBQYXJ0aXRpb24gb3B0aW9uLiBhIHBhaXIgb2Ygbm9kZXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGluZGljZXMgaXMgdGhlbiBwbGFjZWQgc3VjaCB0aGF0IHRoZSBub2RlIHdpdGggbG93ZXIgaW5kZXggaXMgcGxhY2VkIHRvIHRoZSBsZWZ0IG9mIHRoZSBvdGhlciBub2RlICh3aXRoIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSwgdGhpcyBtYXkgb25seSBiZSBndWFyYW50ZWVkIHRvIHdvcmsgaWYgYWxsIG5vZGVzIGhhdmUgYSBsYXlvdXQgcGFydGl0aW9uIGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGVkZ2VzIHRoYXQgY3Jvc3MgcGFydGl0aW9ucyBhcmUgbm90IHBhcnQgb2YgYSBwYXJ0aXRpb24tY3Jvc3NpbmcgY3ljbGUuJyksaTljKSxUNWMpLHdJKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxkcWUpLEtzZSksJ05vZGUgTGFiZWwgUGFkZGluZycpLCdEZWZpbmUgcGFkZGluZyBmb3Igbm9kZSBsYWJlbHMgdGhhdCBhcmUgcGxhY2VkIGluc2lkZSBvZiBhIG5vZGUuJyksVjhjKSxZNWMpLGoxKSxwcWIoTDVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxHbWUpLEtzZSksJ05vZGUgTGFiZWwgUGxhY2VtZW50JyksXCJIaW50cyBmb3Igd2hlcmUgbm9kZSBsYWJlbHMgYXJlIHRvIGJlIHBsYWNlZDsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLlwiKSxYOGMpLFc1YyksQjEpLHFxYihLNWMsT0MoR0MoZTEsMSksS2llLDE3NSwwLFtKNWNdKSkpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZ3FlKSxMc2UpLCdQb3J0IEFsaWdubWVudCcpLCdEZWZpbmVzIHRoZSBkZWZhdWx0IHBvcnQgZGlzdHJpYnV0aW9uIGZvciBhIG5vZGUuIE1heSBiZSBvdmVycmlkZGVuIGZvciBlYWNoIHNpZGUgaW5kaXZpZHVhbGx5LicpLG05YyksVjVjKSxDMSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxocWUpLExzZSksJ1BvcnQgQWxpZ25tZW50IChOb3J0aCknKSxcIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBub3J0aGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LlwiKSxWNWMpLEMxKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLGlxZSksTHNlKSwnUG9ydCBBbGlnbm1lbnQgKFNvdXRoKScpLFwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHNvdXRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuXCIpLFY1YyksQzEpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsanFlKSxMc2UpLCdQb3J0IEFsaWdubWVudCAoV2VzdCknKSxcIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSB3ZXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuXCIpLFY1YyksQzEpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsa3FlKSxMc2UpLCdQb3J0IEFsaWdubWVudCAoRWFzdCknKSxcIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBlYXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuXCIpLFY1YyksQzEpLHBxYihLNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLEZtZSksTXNlKSwnTm9kZSBTaXplIENvbnN0cmFpbnRzJyksXCJXaGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBhIG5vZGUncyBzaXplLiBFbXB0eSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZnkgdGhhdCBhIG5vZGUncyBzaXplIGlzIGFscmVhZHkgZml4ZWQgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cIiksWjhjKSxXNWMpLEkxKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxFbWUpLE1zZSksJ05vZGUgU2l6ZSBPcHRpb25zJyksJ09wdGlvbnMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc2l6ZSBjb25zdHJhaW50cyBzZXQgb24gYSBub2RlLiBFYWNoIG1lbWJlciBvZiB0aGUgc2V0IHNwZWNpZmllcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBzaXplcy4gVGhlIGVtcHR5IHNldCBjb3JyZXNwb25kcyB0byBubyBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuJyksYzljKSxXNWMpLEoxKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxUbWUpLE1zZSksJ05vZGUgU2l6ZSBNaW5pbXVtJyksJ1RoZSBtaW5pbWFsIHNpemUgdG8gd2hpY2ggYSBub2RlIGNhbiBiZSByZWR1Y2VkLicpLGE5YyksWTVjKSxtMSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYnFlKSxNc2UpLCdGaXhlZCBHcmFwaCBTaXplJyksXCJCeSBkZWZhdWx0LCB0aGUgZml4ZWQgbGF5b3V0IHByb3ZpZGVyIHdpbGwgZW5sYXJnZSBhIGdyYXBoIHVudGlsIGl0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIGl0cyBjaGlsZHJlbi4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCB3b24ndCBkbyBzby5cIiksZmFsc2UpLFQ1Yyksd0kpLHBxYihMNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLG5xZSksSnBlKSwnRWRnZSBMYWJlbCBQbGFjZW1lbnQnKSwnR2l2ZXMgYSBoaW50IG9uIHdoZXJlIHRvIHB1dCBlZGdlIGxhYmVscy4nKSxEOGMpLFY1YyksdTEpLHBxYihKNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLENtZSksSnBlKSwnSW5saW5lIEVkZ2UgTGFiZWxzJyksXCJJZiB0cnVlLCBhbiBlZGdlIGxhYmVsIGlzIHBsYWNlZCBkaXJlY3RseSBvbiBpdHMgZWRnZS4gTWF5IG9ubHkgYXBwbHkgdG8gY2VudGVyIGVkZ2UgbGFiZWxzLiBUaGlzIGtpbmQgb2YgbGFiZWwgcGxhY2VtZW50IGlzIG9ubHkgYWR2aXNhYmxlIGlmIHRoZSBsYWJlbCdzIHJlbmRlcmluZyBpcyBzdWNoIHRoYXQgaXQgaXMgbm90IGNyb3NzZWQgYnkgaXRzIGVkZ2UgYW5kIHRodXMgc3RheXMgbGVnaWJsZS5cIiksZmFsc2UpLFQ1Yyksd0kpLHBxYihKNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsR3NlKSwnZm9udCcpLCdGb250IE5hbWUnKSwnRm9udCBuYW1lIHVzZWQgZm9yIGEgbGFiZWwuJyksWjVjKSxaSSkscHFiKEo1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxIc2UpLCdmb250JyksJ0ZvbnQgU2l6ZScpLCdGb250IHNpemUgdXNlZCBmb3IgYSBsYWJlbC4nKSxYNWMpLEpJKSxwcWIoSjVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLHJxZSksTnNlKSwnUG9ydCBBbmNob3IgT2Zmc2V0JyksJ1RoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuJyksWTVjKSxtMSkscHFiKE01YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxvcWUpLE5zZSksJ1BvcnQgSW5kZXgnKSxcIlRoZSBpbmRleCBvZiBhIHBvcnQgaW4gdGhlIGZpeGVkIG9yZGVyIGFyb3VuZCBhIG5vZGUuIFRoZSBvcmRlciBpcyBhc3N1bWVkIGFzIGNsb2Nrd2lzZSwgc3RhcnRpbmcgd2l0aCB0aGUgbGVmdG1vc3QgcG9ydCBvbiB0aGUgdG9wIHNpZGUuIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGlmICdQb3J0IENvbnN0cmFpbnRzJyBpcyBzZXQgdG8gRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4gQWRkaXRpb25hbGx5LCB0aGUgb3B0aW9uICdQb3J0IFNpZGUnIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhc2UuXCIpLFg1YyksSkkpLHBxYihNNWMpKSkpO3Q0YyhhLG5ldyBwNWMoRjVjKEU1YyhHNWMoeTVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFlwZSksTnNlKSwnUG9ydCBTaWRlJyksXCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy5cIiksQjljKSxWNWMpLEYxKSxwcWIoTTVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHo1YyhENWMoQTVjKEI1YyhuZXcgSDVjLFdwZSksTnNlKSwnUG9ydCBCb3JkZXIgT2Zmc2V0JyksXCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci5cIiksVTVjKSxCSSkscHFiKE01YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsSG1lKSxPc2UpLCdQb3J0IExhYmVsIFBsYWNlbWVudCcpLFwiRGVjaWRlcyBvbiBhIHBsYWNlbWVudCBtZXRob2QgZm9yIHBvcnQgbGFiZWxzOyBpZiBlbXB0eSwgdGhlIG5vZGUgbGFiZWwncyBwb3NpdGlvbiBpcyBub3QgbW9kaWZpZWQuXCIpLHk5YyksVzVjKSxFMSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsZXFlKSxPc2UpLCdQb3J0IExhYmVscyBOZXh0IHRvIFBvcnQnKSxcIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuXCIpLGZhbHNlKSxUNWMpLHdJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxmcWUpLE9zZSksJ1RyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwJyksJ0lmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4nKSx0cnVlKSxUNWMpLHdJKSxwcWIoSzVjKSkpKTt0NGMoYSxuZXcgcDVjKEY1YyhFNWMoRzVjKHk1Yyh6NWMoRDVjKEE1YyhCNWMobmV3IEg1YyxfcGUpLFBzZSksJ0FjdGl2YXRlIEluc2lkZSBTZWxmIExvb3BzJyksXCJXaGV0aGVyIHRoaXMgbm9kZSBhbGxvd3MgdG8gcm91dGUgc2VsZiBsb29wcyBpbnNpZGUgb2YgaXQgaW5zdGVhZCBvZiBhcm91bmQgaXQuIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgbWFrZSB0aGUgbm9kZSBhIGNvbXBvdW5kIG5vZGUgaWYgaXQgaXNuJ3QgYWxyZWFkeSwgYW5kIHdpbGwgcmVxdWlyZSB0aGUgbGF5b3V0IGFsZ29yaXRobSB0byBzdXBwb3J0IGNvbXBvdW5kIG5vZGVzIHdpdGggaGllcmFyY2hpY2FsIHBvcnRzLlwiKSxmYWxzZSksVDVjKSx3SSkscHFiKEs1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsYXFlKSxQc2UpLCdJbnNpZGUgU2VsZiBMb29wJyksJ1doZXRoZXIgYSBzZWxmIGxvb3Agc2hvdWxkIGJlIHJvdXRlZCBpbnNpZGUgYSBub2RlIGluc3RlYWQgb2YgYXJvdW5kIHRoYXQgbm9kZS4nKSxmYWxzZSksVDVjKSx3SSkscHFiKEk1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsJGxlKSwnZWRnZScpLCdFZGdlIFRoaWNrbmVzcycpLCdUaGUgdGhpY2tuZXNzIG9mIGFuIGVkZ2UuIFRoaXMgaXMgYSBoaW50IG9uIHRoZSBsaW5lIHdpZHRoIHVzZWQgdG8gZHJhdyBhbiBlZGdlLCBwb3NzaWJseSByZXF1aXJpbmcgbW9yZSBzcGFjZSB0byBiZSByZXNlcnZlZCBmb3IgaXQuJyksMSksVTVjKSxCSSkscHFiKEk1YykpKSk7dDRjKGEsbmV3IHA1YyhGNWMoRTVjKEc1Yyh5NWMoejVjKEQ1YyhBNWMoQjVjKG5ldyBINWMsSXNlKSwnZWRnZScpLCdFZGdlIFR5cGUnKSwnVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4nKSxIOGMpLFY1YyksdzEpLHBxYihJNWMpKSkpO3M0YyhhLG5ldyBXM2MoYjRjKGQ0YyhjNGMobmV3IGU0YyxzbmUpLCdMYXllcmVkJyksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkIFwiaGllcmFyY2hpZXNcIiwgYW5kIHRoZW4gcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUgbnVtYmVyIG9mIGVkZ2UgY3Jvc3NpbmdzIGlzIG1pbmltaXplZC4gQWZ0ZXJ3YXJkcywgY29uY3JldGUgY29vcmRpbmF0ZXMgYXJlIGNvbXB1dGVkIGZvciB0aGUgbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuJykpKTtzNGMoYSxuZXcgVzNjKGI0YyhkNGMoYzRjKG5ldyBlNGMsJ29yZy5lY2xpcHNlLmVsay5vcnRob2dvbmFsJyksJ09ydGhvZ29uYWwnKSwnT3J0aG9nb25hbCBtZXRob2RzIHRoYXQgZm9sbG93IHRoZSBcInRvcG9sb2d5LXNoYXBlLW1ldHJpY3NcIiBhcHByb2FjaCBieSBCYXRpbmksIE5hcmRlbGxpIGFuZCBUYW1hc3NpYSBcXCc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuJykpKTtzNGMoYSxuZXcgVzNjKGI0YyhkNGMoYzRjKG5ldyBlNGMsdW1lKSwnRm9yY2UnKSwnTGF5b3V0IGFsZ29yaXRobXMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgYSBzeXN0ZW0gb2YgYXR0cmFjdGl2ZSBhbmQgcmVwdWxzaXZlIGZvcmNlcy4gVGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbWV0aG9kIG9mIHRoaXMga2luZCB3YXMgcHJvcG9zZWQgYnkgRWFkZXMgaW4gMTk4NC4nKSkpO3M0YyhhLG5ldyBXM2MoYjRjKGQ0YyhjNGMobmV3IGU0Yywnb3JnLmVjbGlwc2UuZWxrLmNpcmNsZScpLCdDaXJjbGUnKSwnQ2lyY3VsYXIgbGF5b3V0IGFsZ29yaXRobXMgZW1waGFzaXplIGN5Y2xlcyBvciBiaWNvbm5lY3RlZCBjb21wb25lbnRzIG9mIGEgZ3JhcGggYnkgYXJyYW5naW5nIHRoZW0gaW4gY2lyY2xlcy4gVGhpcyBpcyB1c2VmdWwgaWYgYSBkcmF3aW5nIGlzIGRlc2lyZWQgd2hlcmUgc3VjaCBjb21wb25lbnRzIGFyZSBjbGVhcmx5IGdyb3VwZWQsIG9yIHdoZXJlIGN5Y2xlcyBhcmUgc2hvd24gYXMgcHJvbWluZW50IE9QVElPTlMgb2YgdGhlIGdyYXBoLicpKSk7czRjKGEsbmV3IFczYyhiNGMoZDRjKGM0YyhuZXcgZTRjLGJyZSksJ1RyZWUnKSwnU3BlY2lhbGl6ZWQgbGF5b3V0IG1ldGhvZHMgZm9yIHRyZWVzLCBpLmUuIGFjeWNsaWMgZ3JhcGhzLiBUaGUgcmVndWxhciBzdHJ1Y3R1cmUgb2YgZ3JhcGhzIHRoYXQgaGF2ZSBubyB1bmRpcmVjdGVkIGN5Y2xlcyBjYW4gYmUgZW1waGFzaXplZCB1c2luZyBhbiBhbGdvcml0aG0gb2YgdGhpcyB0eXBlLicpKSk7czRjKGEsbmV3IFczYyhiNGMoZDRjKGM0YyhuZXcgZTRjLCdvcmcuZWNsaXBzZS5lbGsucGxhbmFyJyksJ1BsYW5hcicpLCdBbGdvcml0aG1zIHRoYXQgcmVxdWlyZSBhIHBsYW5hciBvciB1cHdhcmQgcGxhbmFyIGdyYXBoLiBNb3N0IG9mIHRoZXNlIGFsZ29yaXRobXMgYXJlIHRoZW9yZXRpY2FsbHkgaW50ZXJlc3RpbmcsIGJ1dCBub3QgcHJhY3RpY2FsbHkgdXNhYmxlLicpKSk7czRjKGEsbmV3IFczYyhiNGMoZDRjKGM0YyhuZXcgZTRjLHNyZSksJ1JhZGlhbCcpLCdSYWRpYWwgbGF5b3V0IGFsZ29yaXRobXMgdXN1YWxseSBwb3NpdGlvbiB0aGUgbm9kZXMgb2YgdGhlIGdyYXBoIG9uIGNvbmNlbnRyaWMgY2lyY2xlcy4nKSkpOyRhZCgobmV3IF9hZCxhKSk7WTdjKChuZXcgWjdjLGEpKTtqZGQoKG5ldyBrZGQsYSkpfTt2YXIgbzhjLHA4YyxxOGMscjhjLHM4Yyx0OGMsdThjLHY4Yyx3OGMseDhjLHk4Yyx6OGMsQThjLEI4YyxDOGMsRDhjLEU4YyxGOGMsRzhjLEg4YyxJOGMsSjhjLEs4YyxMOGMsTThjLE44YyxPOGMsUDhjLFE4YyxSOGMsUzhjLFQ4YyxVOGMsVjhjLFc4YyxYOGMsWThjLFo4YywkOGMsXzhjLGE5YyxiOWMsYzljLGQ5YyxlOWMsZjljLGc5YyxoOWMsaTljLGo5YyxrOWMsbDljLG05YyxuOWMsbzljLHA5YyxxOWMscjljLHM5Yyx0OWMsdTljLHY5Yyx3OWMseDljLHk5Yyx6OWMsQTljLEI5YyxDOWMsRDljLEU5YyxGOWMsRzljLEg5YyxJOWMsSjljLEs5YyxMOWMsTTljLE45YyxPOWMsUDljLFE5YyxSOWMsUzljLFQ5YyxVOWMsVjljLFc5YyxYOWM7dmFyIHMxPW1kYihvc2UsJ0NvcmVPcHRpb25zJyw2ODQpO2JjYigxMDMsMjIsezM6MSwzNToxLDIyOjEsMTAzOjF9LGlhZCk7dmFyIF85YyxhYWQsYmFkLGNhZCxkYWQ7dmFyIHQxPW5kYihvc2UsQ2xlLDEwMyxDSSxrYWQsamFkKTt2YXIgbGFkO2JjYigyNzIsMjIsezM6MSwzNToxLDIyOjEsMjcyOjF9LHJhZCk7dmFyIG5hZCxvYWQscGFkO3ZhciB1MT1uZGIob3NlLCdFZGdlTGFiZWxQbGFjZW1lbnQnLDI3MixDSSx0YWQsc2FkKTt2YXIgdWFkO2JjYigyMTgsMjIsezM6MSwzNToxLDIyOjEsMjE4OjF9LEJhZCk7dmFyIHdhZCx4YWQseWFkLHphZDt2YXIgdjE9bmRiKG9zZSwnRWRnZVJvdXRpbmcnLDIxOCxDSSxEYWQsQ2FkKTt2YXIgRWFkO2JjYigzMTIsMjIsezM6MSwzNToxLDIyOjEsMzEyOjF9LE5hZCk7dmFyIEdhZCxIYWQsSWFkLEphZCxLYWQsTGFkO3ZhciB3MT1uZGIob3NlLCdFZGdlVHlwZScsMzEyLENJLFBhZCxPYWQpO3ZhciBRYWQ7YmNiKDk3NywxLGFsZSxfYWQpO18uUWU9ZnVuY3Rpb24gYWJkKGEpeyRhZChhKX07dmFyIFNhZCxUYWQsVWFkLFZhZCxXYWQsWGFkLFlhZDt2YXIgeTE9bWRiKG9zZSwnRml4ZWRMYXlvdXRlck9wdGlvbnMnLDk3Nyk7YmNiKDk3OCwxLHt9LGJiZCk7Xy4kZT1mdW5jdGlvbiBjYmQoKXt2YXIgYTtyZXR1cm4gYT1uZXcgWmZkLGF9O18uX2U9ZnVuY3Rpb24gZGJkKGEpe307dmFyIHgxPW1kYihvc2UsJ0ZpeGVkTGF5b3V0ZXJPcHRpb25zL0ZpeGVkRmFjdG9yeScsOTc4KTtiY2IoMzM0LDIyLHszOjEsMzU6MSwyMjoxLDMzNDoxfSxpYmQpO3ZhciBlYmQsZmJkLGdiZDt2YXIgejE9bmRiKG9zZSwnSGllcmFyY2h5SGFuZGxpbmcnLDMzNCxDSSxrYmQsamJkKTt2YXIgbGJkO2JjYigyODUsMjIsezM6MSwzNToxLDIyOjEsMjg1OjF9LHRiZCk7dmFyIG5iZCxvYmQscGJkLHFiZDt2YXIgQTE9bmRiKG9zZSwnTGFiZWxTaWRlJywyODUsQ0ksdmJkLHViZCk7dmFyIHdiZDtiY2IoOTMsMjIsezM6MSwzNToxLDIyOjEsOTM6MX0sSWJkKTt2YXIgeWJkLHpiZCxBYmQsQmJkLENiZCxEYmQsRWJkLEZiZCxHYmQ7dmFyIEIxPW5kYihvc2UsJ05vZGVMYWJlbFBsYWNlbWVudCcsOTMsQ0ksTGJkLEtiZCk7dmFyIE1iZDtiY2IoMjQ5LDIyLHszOjEsMzU6MSwyMjoxLDI0OToxfSxVYmQpO3ZhciBPYmQsUGJkLFFiZCxSYmQsU2JkO3ZhciBDMT1uZGIob3NlLCdQb3J0QWxpZ25tZW50JywyNDksQ0ksV2JkLFZiZCk7dmFyIFhiZDtiY2IoOTgsMjIsezM6MSwzNToxLDIyOjEsOTg6MX0sZ2NkKTt2YXIgWmJkLCRiZCxfYmQsYWNkLGJjZCxjY2Q7dmFyIEQxPW5kYihvc2UsJ1BvcnRDb25zdHJhaW50cycsOTgsQ0ksaWNkLGhjZCk7dmFyIGpjZDtiY2IoMjczLDIyLHszOjEsMzU6MSwyMjoxLDI3MzoxfSxzY2QpO3ZhciBsY2QsbWNkLG5jZCxvY2QscGNkLHFjZDt2YXIgRTE9bmRiKG9zZSwnUG9ydExhYmVsUGxhY2VtZW50JywyNzMsQ0ksd2NkLHZjZCk7dmFyIHhjZDtiY2IoNjEsMjIsezM6MSwzNToxLDIyOjEsNjE6MX0sWWNkKTt2YXIgemNkLEFjZCxCY2QsQ2NkLERjZCxFY2QsRmNkLEdjZCxIY2QsSWNkLEpjZCxLY2QsTGNkLE1jZCxOY2QsT2NkLFBjZCxRY2QsUmNkLFNjZCxUY2Q7dmFyIEYxPW5kYihvc2UsJ1BvcnRTaWRlJyw2MSxDSSxfY2QsJGNkKTt2YXIgYmRkO2JjYig5ODEsMSxhbGUsa2RkKTtfLlFlPWZ1bmN0aW9uIGxkZChhKXtqZGQoYSl9O3ZhciBkZGQsZWRkLGZkZCxnZGQsaGRkO3ZhciBIMT1tZGIob3NlLCdSYW5kb21MYXlvdXRlck9wdGlvbnMnLDk4MSk7YmNiKDk4MiwxLHt9LG1kZCk7Xy4kZT1mdW5jdGlvbiBuZGQoKXt2YXIgYTtyZXR1cm4gYT1uZXcgTWdkLGF9O18uX2U9ZnVuY3Rpb24gb2RkKGEpe307dmFyIEcxPW1kYihvc2UsJ1JhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Jyw5ODIpO2JjYigzNzQsMjIsezM6MSwzNToxLDIyOjEsMzc0OjF9LHVkZCk7dmFyIHBkZCxxZGQscmRkLHNkZDt2YXIgSTE9bmRiKG9zZSwnU2l6ZUNvbnN0cmFpbnQnLDM3NCxDSSx3ZGQsdmRkKTt2YXIgeGRkO2JjYigyNTksMjIsezM6MSwzNToxLDIyOjEsMjU5OjF9LEpkZCk7dmFyIHpkZCxBZGQsQmRkLENkZCxEZGQsRWRkLEZkZCxHZGQsSGRkO3ZhciBKMT1uZGIob3NlLCdTaXplT3B0aW9ucycsMjU5LENJLExkZCxLZGQpO3ZhciBNZGQ7YmNiKDM3MCwxLHsxOTQ5OjF9LFpkZCk7Xy5iPWZhbHNlO18uYz0wO18uZD0tMTtfLmU9bnVsbDtfLmY9bnVsbDtfLmc9LTE7Xy5qPWZhbHNlO18uaz1mYWxzZTtfLm49ZmFsc2U7Xy5vPTA7Xy5xPTA7Xy5yPTA7dmFyIEwxPW1kYih5cWUsJ0Jhc2ljUHJvZ3Jlc3NNb25pdG9yJywzNzApO2JjYig5NzIsMjA5LE1sZSxnZWQpO18uWmU9ZnVuY3Rpb24ga2VkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO09kZChiLCdCb3ggbGF5b3V0JywyKTtlPUdkYihFRChoa2QoYSwoWDdjKCksVzdjKSkpKTtmPUJEKGhrZChhLFQ3YyksMTE2KTtjPUNjYihERChoa2QoYSxPN2MpKSk7ZD1DY2IoREQoaGtkKGEsUDdjKSkpO3N3aXRjaChCRChoa2QoYSxNN2MpLDMxMSkuZyl7Y2FzZSAwOmc9KGg9bmV3IFRrYigoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKSxtbWIoKSxPa2IoaCxuZXcgbWVkKGQpKSxoKTtpPXJmZChhKTtqPUVEKGhrZChhLEw3YykpOyhqPT1udWxsfHwodUNiKGopLGopPD0wKSYmKGo9MS4zKTtrPWRlZChnLGUsZixpLmEsaS5iLGMsKHVDYihqKSxqKSk7QWZkKGEsay5hLGsuYixmYWxzZSx0cnVlKTticmVhaztkZWZhdWx0OmVlZChhLGUsZixjKTt9UWRkKGIpfTt2YXIgUzE9bWRiKHlxZSwnQm94TGF5b3V0UHJvdmlkZXInLDk3Mik7YmNiKDk3MywxLERrZSxtZWQpO18udWU9ZnVuY3Rpb24gbmVkKGEsYil7cmV0dXJuIGxlZCh0aGlzLEJEKGEsMzMpLEJEKGIsMzMpKX07Xy5GYj1mdW5jdGlvbiBvZWQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIHBlZCgpe3JldHVybiBuZXcgdHBiKHRoaXMpfTtfLmE9ZmFsc2U7dmFyIE0xPW1kYih5cWUsJ0JveExheW91dFByb3ZpZGVyLzEnLDk3Myk7YmNiKDE1NywxLHsxNTc6MX0sd2VkLHhlZCk7Xy5JYj1mdW5jdGlvbiB5ZWQoKXtyZXR1cm4gdGhpcy5jP19vZCh0aGlzLmMpOkZlKHRoaXMuYil9O3ZhciBOMT1tZGIoeXFlLCdCb3hMYXlvdXRQcm92aWRlci9Hcm91cCcsMTU3KTtiY2IoMzExLDIyLHszOjEsMzU6MSwyMjoxLDMxMToxfSxFZWQpO3ZhciB6ZWQsQWVkLEJlZCxDZWQ7dmFyIE8xPW5kYih5cWUsJ0JveExheW91dFByb3ZpZGVyL1BhY2tpbmdNb2RlJywzMTEsQ0ksR2VkLEZlZCk7dmFyIEhlZDtiY2IoOTc0LDEsRGtlLEplZCk7Xy51ZT1mdW5jdGlvbiBLZWQoYSxiKXtyZXR1cm4gaGVkKEJEKGEsMTU3KSxCRChiLDE1NykpfTtfLkZiPWZ1bmN0aW9uIExlZChhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gTWVkKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBQMT1tZGIoeXFlLCdCb3hMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlJyw5NzQpO2JjYig5NzUsMSxEa2UsTmVkKTtfLnVlPWZ1bmN0aW9uIE9lZChhLGIpe3JldHVybiBpZWQoQkQoYSwxNTcpLEJEKGIsMTU3KSl9O18uRmI9ZnVuY3Rpb24gUGVkKGEpe3JldHVybiB0aGlzPT09YX07Xy52ZT1mdW5jdGlvbiBRZWQoKXtyZXR1cm4gbmV3IHRwYih0aGlzKX07dmFyIFExPW1kYih5cWUsJ0JveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUnLDk3NSk7YmNiKDk3NiwxLERrZSxSZWQpO18udWU9ZnVuY3Rpb24gU2VkKGEsYil7cmV0dXJuIGplZChCRChhLDE1NyksQkQoYiwxNTcpKX07Xy5GYj1mdW5jdGlvbiBUZWQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLnZlPWZ1bmN0aW9uIFVlZCgpe3JldHVybiBuZXcgdHBiKHRoaXMpfTt2YXIgUjE9bWRiKHlxZSwnQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDIkVHlwZScsOTc2KTtiY2IoMTM2NSwxLHs4MzE6MX0sVmVkKTtfLnFnPWZ1bmN0aW9uIFdlZChhLGIpe3JldHVybiBWeWMoKSwhSkQoYiwxNjApfHxoMmMoKFkxYygpLFgxYyxCRChhLDE2MCkpLGIpfTt2YXIgVDE9bWRiKHlxZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDAkVHlwZScsMTM2NSk7YmNiKDEzNjYsMSxxaWUsWGVkKTtfLnRkPWZ1bmN0aW9uIFllZChhKXtZeWModGhpcy5hLEJEKGEsMTQ2KSl9O3ZhciBVMT1tZGIoeXFlLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMSRUeXBlJywxMzY2KTtiY2IoMTM2NywxLHFpZSxaZWQpO18udGQ9ZnVuY3Rpb24gJGVkKGEpe0JEKGEsOTQpO1Z5YygpfTt2YXIgVjE9bWRiKHlxZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDIkVHlwZScsMTM2Nyk7YmNiKDEzNzEsMSxxaWUsX2VkKTtfLnRkPWZ1bmN0aW9uIGFmZChhKXtaeWModGhpcy5hLEJEKGEsOTQpKX07dmFyIFcxPW1kYih5cWUsJ0Vsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQzJFR5cGUnLDEzNzEpO2JjYigxMzY5LDEsT2llLGJmZCk7Xy5NYj1mdW5jdGlvbiBjZmQoYSl7cmV0dXJuICR5Yyh0aGlzLmEsdGhpcy5iLEJEKGEsMTQ2KSl9O3ZhciBYMT1tZGIoeXFlLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNCRUeXBlJywxMzY5KTtiY2IoMTM2OCwxLE9pZSxkZmQpO18uTWI9ZnVuY3Rpb24gZWZkKGEpe3JldHVybiBhemModGhpcy5hLHRoaXMuYixCRChhLDgzMSkpfTt2YXIgWTE9bWRiKHlxZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDUkVHlwZScsMTM2OCk7YmNiKDEzNzAsMSxxaWUsZmZkKTtfLnRkPWZ1bmN0aW9uIGdmZChhKXtfeWModGhpcy5hLHRoaXMuYixCRChhLDE0NikpfTt2YXIgWjE9bWRiKHlxZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDYkVHlwZScsMTM3MCk7YmNiKDkzNSwxLHt9LEhmZCk7Xy5LYj1mdW5jdGlvbiBJZmQoYSl7cmV0dXJuIEdmZChhKX07Xy5GYj1mdW5jdGlvbiBKZmQoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgXzE9bWRiKHlxZSwnRWxrVXRpbC9sYW1iZGEkMCRUeXBlJyw5MzUpO2JjYig5MzYsMSxxaWUsS2ZkKTtfLnRkPWZ1bmN0aW9uIExmZChhKXt1ZmQodGhpcy5hLHRoaXMuYixCRChhLDc5KSl9O18uYT0wO18uYj0wO3ZhciBhMj1tZGIoeXFlLCdFbGtVdGlsL2xhbWJkYSQxJFR5cGUnLDkzNik7YmNiKDkzNywxLHFpZSxNZmQpO18udGQ9ZnVuY3Rpb24gTmZkKGEpe3ZmZCh0aGlzLmEsdGhpcy5iLEJEKGEsMjAyKSl9O18uYT0wO18uYj0wO3ZhciBiMj1tZGIoeXFlLCdFbGtVdGlsL2xhbWJkYSQyJFR5cGUnLDkzNyk7YmNiKDkzOCwxLHFpZSxPZmQpO18udGQ9ZnVuY3Rpb24gUGZkKGEpe3dmZCh0aGlzLmEsdGhpcy5iLEJEKGEsMTM3KSl9O18uYT0wO18uYj0wO3ZhciBjMj1tZGIoeXFlLCdFbGtVdGlsL2xhbWJkYSQzJFR5cGUnLDkzOCk7YmNiKDkzOSwxLHFpZSxRZmQpO18udGQ9ZnVuY3Rpb24gUmZkKGEpe3hmZCh0aGlzLmEsQkQoYSw0NjkpKX07dmFyIGQyPW1kYih5cWUsJ0Vsa1V0aWwvbGFtYmRhJDQkVHlwZScsOTM5KTtiY2IoMzQyLDEsezM1OjEsMzQyOjF9LFRmZCk7Xy53ZD1mdW5jdGlvbiBVZmQoYSl7cmV0dXJuIFNmZCh0aGlzLEJEKGEsMjM2KSl9O18uRmI9ZnVuY3Rpb24gVmZkKGEpe3ZhciBiO2lmKEpEKGEsMzQyKSl7Yj1CRChhLDM0Mik7cmV0dXJuIHRoaXMuYT09Yi5hfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBXZmQoKXtyZXR1cm4gUUQodGhpcy5hKX07Xy5JYj1mdW5jdGlvbiBYZmQoKXtyZXR1cm4gdGhpcy5hKycgKGV4Y2x1c2l2ZSknfTtfLmE9MDt2YXIgZTI9bWRiKHlxZSwnRXhjbHVzaXZlQm91bmRzL0V4Y2x1c2l2ZUxvd2VyQm91bmQnLDM0Mik7YmNiKDExMzgsMjA5LE1sZSxaZmQpO18uWmU9ZnVuY3Rpb24gJGZkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjtPZGQoYiwnRml4ZWQgTGF5b3V0JywxKTtmPUJEKGhrZChhLChZOWMoKSxFOGMpKSwyMTgpO2w9MDttPTA7Zm9yKHM9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtzLmUhPXMuaS5nYygpOyl7cT1CRChEeWQocyksMzMpO0I9QkQoaGtkKHEsKFphZCgpLFlhZCkpLDgpO2lmKEIpe2JsZChxLEIuYSxCLmIpO2lmKEJEKGhrZChxLFRhZCksMTc0KS5IYygodGRkKCkscGRkKSkpe249QkQoaGtkKHEsVmFkKSw4KTtuLmE+MCYmbi5iPjAmJkFmZChxLG4uYSxuLmIsdHJ1ZSx0cnVlKX19bD0kd25kLk1hdGgubWF4KGwscS5pK3EuZyk7bT0kd25kLk1hdGgubWF4KG0scS5qK3EuZik7Zm9yKGo9bmV3IEZ5ZCgoIXEubiYmKHEubj1uZXcgY1VkKEQyLHEsMSw3KSkscS5uKSk7ai5lIT1qLmkuZ2MoKTspe2g9QkQoRHlkKGopLDEzNyk7Qj1CRChoa2QoaCxZYWQpLDgpOyEhQiYmYmxkKGgsQi5hLEIuYik7bD0kd25kLk1hdGgubWF4KGwscS5pK2guaStoLmcpO209JHduZC5NYXRoLm1heChtLHEuaitoLmoraC5mKX1mb3Iodj1uZXcgRnlkKCghcS5jJiYocS5jPW5ldyBjVWQoRjIscSw5LDkpKSxxLmMpKTt2LmUhPXYuaS5nYygpOyl7dT1CRChEeWQodiksMTE4KTtCPUJEKGhrZCh1LFlhZCksOCk7ISFCJiZibGQodSxCLmEsQi5iKTt3PXEuaSt1Lmk7QT1xLmordS5qO2w9JHduZC5NYXRoLm1heChsLHcrdS5nKTttPSR3bmQuTWF0aC5tYXgobSxBK3UuZik7Zm9yKGk9bmV3IEZ5ZCgoIXUubiYmKHUubj1uZXcgY1VkKEQyLHUsMSw3KSksdS5uKSk7aS5lIT1pLmkuZ2MoKTspe2g9QkQoRHlkKGkpLDEzNyk7Qj1CRChoa2QoaCxZYWQpLDgpOyEhQiYmYmxkKGgsQi5hLEIuYik7bD0kd25kLk1hdGgubWF4KGwsdytoLmkraC5nKTttPSR3bmQuTWF0aC5tYXgobSxBK2guaitoLmYpfX1mb3IoZT1uZXcgU3IodXIoX3NkKHEpLmEuS2MoKSxuZXcgU3EpKTtRcihlKTspe2M9QkQoUnIoZSksNzkpO2s9WWZkKGMpO2w9JHduZC5NYXRoLm1heChsLGsuYSk7bT0kd25kLk1hdGgubWF4KG0say5iKX1mb3IoZD1uZXcgU3IodXIoJHNkKHEpLmEuS2MoKSxuZXcgU3EpKTtRcihkKTspe2M9QkQoUnIoZCksNzkpO2lmKFhvZChqdGQoYykpIT1hKXtrPVlmZChjKTtsPSR3bmQuTWF0aC5tYXgobCxrLmEpO209JHduZC5NYXRoLm1heChtLGsuYil9fX1pZihmPT0oQWFkKCksd2FkKSl7Zm9yKHI9bmV3IEZ5ZCgoIWEuYSYmKGEuYT1uZXcgY1VkKEUyLGEsMTAsMTEpKSxhLmEpKTtyLmUhPXIuaS5nYygpOyl7cT1CRChEeWQociksMzMpO2ZvcihkPW5ldyBTcih1cihfc2QocSkuYS5LYygpLG5ldyBTcSkpO1FyKGQpOyl7Yz1CRChScihkKSw3OSk7Zz1wZmQoYyk7Zy5iPT0wP2prZChjLFE4YyxudWxsKTpqa2QoYyxROGMsZyl9fX1pZighQ2NiKEREKGhrZChhLChaYWQoKSxVYWQpKSkpKXt0PUJEKGhrZChhLFdhZCksMTE2KTtwPWwrdC5iK3QuYztvPW0rdC5kK3QuYTtBZmQoYSxwLG8sdHJ1ZSx0cnVlKX1RZGQoYil9O3ZhciBmMj1tZGIoeXFlLCdGaXhlZExheW91dFByb3ZpZGVyJywxMTM4KTtiY2IoMzczLDEzNCx7MzoxLDQxNDoxLDM3MzoxLDk0OjEsMTM0OjF9LF9mZCxhZ2QpO18uSmY9ZnVuY3Rpb24gZGdkKGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztpZighYil7cmV0dXJufXRyeXtqPW1mYihiLCc7LDsnKTtmb3IoZz1qLGg9MCxpPWcubGVuZ3RoO2g8aTsrK2gpe2Y9Z1toXTtkPW1mYihmLCdcXFxcOicpO2U9azRjKG40YygpLGRbMF0pO2lmKCFlKXt0aHJvdyB2YmIobmV3IFdkYignSW52YWxpZCBvcHRpb24gaWQ6ICcrZFswXSkpfWs9bzVjKGUsZFsxXSk7aWYoaz09bnVsbCl7dGhyb3cgdmJiKG5ldyBXZGIoJ0ludmFsaWQgb3B0aW9uIHZhbHVlOiAnK2RbMV0pKX1rPT1udWxsPyghdGhpcy5xJiYodGhpcy5xPW5ldyBMcWIpLFRoYih0aGlzLnEsZSkpOighdGhpcy5xJiYodGhpcy5xPW5ldyBMcWIpLFJoYih0aGlzLnEsZSxrKSl9fWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsMTAyKSl7Yz1hO3Rocm93IHZiYihuZXcgWGRiKGMpKX1lbHNlIHRocm93IHZiYihhKX19O18uSWI9ZnVuY3Rpb24gZWdkKCl7dmFyIGE7YT1HRChHQWIoTkFiKCghdGhpcy5xPyhtbWIoKSxtbWIoKSxrbWIpOnRoaXMucSkudmMoKS5PYygpLG5ldyBmZ2QpLEF5YihuZXcgcHpiLG5ldyBuemIsbmV3IFp5YixuZXcgX3liLE9DKEdDKHhMLDEpLEtpZSwxMzIsMCxbXSkpKSk7cmV0dXJuIGF9O3ZhciBpMj1tZGIoeXFlLCdJbmRpdmlkdWFsU3BhY2luZ3MnLDM3Myk7YmNiKDk3MSwxLHt9LGZnZCk7Xy5LYj1mdW5jdGlvbiBnZ2QoYSl7cmV0dXJuIGNnZChCRChhLDQyKSl9O3ZhciBoMj1tZGIoeXFlLCdJbmRpdmlkdWFsU3BhY2luZ3MvbGFtYmRhJDAkVHlwZScsOTcxKTtiY2IoNzA5LDEse30samdkKTtfLmM9MDt2YXIgajI9bWRiKHlxZSwnSW5zdGFuY2VQb29sJyw3MDkpO2JjYigxMjc1LDEse30sa2dkKTt2YXIgbDI9bWRiKHlxZSwnTG9nZ2VkR3JhcGgnLDEyNzUpO2JjYigzOTYsMjIsezM6MSwzNToxLDIyOjEsMzk2OjF9LHFnZCk7dmFyIGxnZCxtZ2QsbmdkLG9nZDt2YXIgazI9bmRiKHlxZSwnTG9nZ2VkR3JhcGgvVHlwZScsMzk2LENJLHNnZCxyZ2QpO3ZhciB0Z2Q7YmNiKDQ2LDEsezIwOjEsNDY6MX0sdmdkKTtfLkpjPWZ1bmN0aW9uIHhnZChhKXtyZWIodGhpcyxhKX07Xy5GYj1mdW5jdGlvbiB3Z2QoYSl7dmFyIGIsYyxkO2lmKEpEKGEsNDYpKXtjPUJEKGEsNDYpO2I9dGhpcy5hPT1udWxsP2MuYT09bnVsbDpwYih0aGlzLmEsYy5hKTtkPXRoaXMuYj09bnVsbD9jLmI9PW51bGw6cGIodGhpcy5iLGMuYik7cmV0dXJuIGImJmR9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkhiPWZ1bmN0aW9uIHlnZCgpe3ZhciBhLGIsYyxkLGUsZjtjPXRoaXMuYT09bnVsbD8wOnRiKHRoaXMuYSk7YT1jJmFqZTtiPWMmLTY1NTM2O2Y9dGhpcy5iPT1udWxsPzA6dGIodGhpcy5iKTtkPWYmYWplO2U9ZiYtNjU1MzY7cmV0dXJuIGFeZT4+MTYmYWplfGJeZDw8MTZ9O18uS2M9ZnVuY3Rpb24gemdkKCl7cmV0dXJuIG5ldyBCZ2QodGhpcyl9O18uSWI9ZnVuY3Rpb24gQWdkKCl7cmV0dXJuIHRoaXMuYT09bnVsbCYmdGhpcy5iPT1udWxsPydwYWlyKG51bGwsbnVsbCknOnRoaXMuYT09bnVsbD8ncGFpcihudWxsLCcrZmNiKHRoaXMuYikrJyknOnRoaXMuYj09bnVsbD8ncGFpcignK2ZjYih0aGlzLmEpKycsbnVsbCknOidwYWlyKCcrZmNiKHRoaXMuYSkrJywnK2ZjYih0aGlzLmIpKycpJ307dmFyIG4yPW1kYih5cWUsJ1BhaXInLDQ2KTtiY2IoOTgzLDEsYWllLEJnZCk7Xy5OYj1mdW5jdGlvbiBDZ2QoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gRGdkKCl7cmV0dXJuICF0aGlzLmMmJighdGhpcy5iJiZ0aGlzLmEuYSE9bnVsbHx8dGhpcy5hLmIhPW51bGwpfTtfLlBiPWZ1bmN0aW9uIEVnZCgpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXt0aGlzLmI9dHJ1ZTtyZXR1cm4gdGhpcy5hLmF9ZWxzZSBpZighdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbCl7dGhpcy5jPXRydWU7cmV0dXJuIHRoaXMuYS5ifXRocm93IHZiYihuZXcgdXRiKX07Xy5RYj1mdW5jdGlvbiBGZ2QoKXt0aGlzLmMmJnRoaXMuYS5iIT1udWxsPyh0aGlzLmEuYj1udWxsKTp0aGlzLmImJnRoaXMuYS5hIT1udWxsJiYodGhpcy5hLmE9bnVsbCk7dGhyb3cgdmJiKG5ldyBZZGIpfTtfLmI9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBtMj1tZGIoeXFlLCdQYWlyLzEnLDk4Myk7YmNiKDQ0OCwxLHs0NDg6MX0sR2dkKTtfLkZiPWZ1bmN0aW9uIEhnZChhKXtyZXR1cm4gd3RiKHRoaXMuYSxCRChhLDQ0OCkuYSkmJnd0Yih0aGlzLmMsQkQoYSw0NDgpLmMpJiZ3dGIodGhpcy5kLEJEKGEsNDQ4KS5kKSYmd3RiKHRoaXMuYixCRChhLDQ0OCkuYil9O18uSGI9ZnVuY3Rpb24gSWdkKCl7cmV0dXJuIEhsYihPQyhHQyhTSSwxKSxVaGUsMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9O18uSWI9ZnVuY3Rpb24gSmdkKCl7cmV0dXJuICcoJyt0aGlzLmErU2hlK3RoaXMuYytTaGUrdGhpcy5kK1NoZSt0aGlzLmIrJyknfTt2YXIgbzI9bWRiKHlxZSwnUXVhZHJ1cGxlJyw0NDgpO2JjYigxMTI2LDIwOSxNbGUsTWdkKTtfLlplPWZ1bmN0aW9uIE5nZChhLGIpe3ZhciBjLGQsZSxmLGc7T2RkKGIsJ1JhbmRvbSBMYXlvdXQnLDEpO2lmKCghYS5hJiYoYS5hPW5ldyBjVWQoRTIsYSwxMCwxMSkpLGEuYSkuaT09MCl7UWRkKGIpO3JldHVybn1mPUJEKGhrZChhLChpZGQoKSxnZGQpKSwxOSk7ISFmJiZmLmEhPTA/KGU9bmV3IEh1YihmLmEpKTooZT1uZXcgR3ViKTtjPUdkYihFRChoa2QoYSxkZGQpKSk7Zz1HZGIoRUQoaGtkKGEsaGRkKSkpO2Q9QkQoaGtkKGEsZWRkKSwxMTYpO0xnZChhLGUsYyxnLGQpO1FkZChiKX07dmFyIHAyPW1kYih5cWUsJ1JhbmRvbUxheW91dFByb3ZpZGVyJywxMTI2KTt2YXIgT2dkO2JjYig1NTMsMSx7fSk7Xy5xZj1mdW5jdGlvbiBTZ2QoKXtyZXR1cm4gbmV3IGY3Yyh0aGlzLmYuaSx0aGlzLmYuail9O18uV2U9ZnVuY3Rpb24gVGdkKGEpe2lmKEpzZChhLChZOWMoKSxzOWMpKSl7cmV0dXJuIGhrZCh0aGlzLmYsUWdkKX1yZXR1cm4gaGtkKHRoaXMuZixhKX07Xy5yZj1mdW5jdGlvbiBVZ2QoKXtyZXR1cm4gbmV3IGY3Yyh0aGlzLmYuZyx0aGlzLmYuZil9O18uc2Y9ZnVuY3Rpb24gVmdkKCl7cmV0dXJuIHRoaXMuZ307Xy5YZT1mdW5jdGlvbiBXZ2QoYSl7cmV0dXJuIGlrZCh0aGlzLmYsYSl9O18udGY9ZnVuY3Rpb24gWGdkKGEpe2RsZCh0aGlzLmYsYS5hKTtlbGQodGhpcy5mLGEuYil9O18udWY9ZnVuY3Rpb24gWWdkKGEpe2NsZCh0aGlzLmYsYS5hKTthbGQodGhpcy5mLGEuYil9O18udmY9ZnVuY3Rpb24gWmdkKGEpe3RoaXMuZz1hfTtfLmc9MDt2YXIgUWdkO3ZhciBxMj1tZGIoVXNlLCdFbGtHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0RWxrR3JhcGhFbGVtZW50QWRhcHRlcicsNTUzKTtiY2IoNTU0LDEsezgzOToxfSwkZ2QpO18ud2Y9ZnVuY3Rpb24gX2dkKCl7dmFyIGEsYjtpZighdGhpcy5iKXt0aGlzLmI9UXUoS2tkKHRoaXMuYSkuaSk7Zm9yKGI9bmV3IEZ5ZChLa2QodGhpcy5hKSk7Yi5lIT1iLmkuZ2MoKTspe2E9QkQoRHlkKGIpLDEzNyk7RWtiKHRoaXMuYixuZXcgZGhkKGEpKX19cmV0dXJuIHRoaXMuYn07Xy5iPW51bGw7dmFyIHIyPW1kYihVc2UsJ0Vsa0dyYXBoQWRhcHRlcnMvRWxrRWRnZUFkYXB0ZXInLDU1NCk7YmNiKDMwMSw1NTMse30sYmhkKTtfLnhmPWZ1bmN0aW9uIGNoZCgpe3JldHVybiBhaGQodGhpcyl9O18uYT1udWxsO3ZhciBzMj1tZGIoVXNlLCdFbGtHcmFwaEFkYXB0ZXJzL0Vsa0dyYXBoQWRhcHRlcicsMzAxKTtiY2IoNjMwLDU1Myx7MTgxOjF9LGRoZCk7dmFyIHQyPW1kYihVc2UsJ0Vsa0dyYXBoQWRhcHRlcnMvRWxrTGFiZWxBZGFwdGVyJyw2MzApO2JjYig2MjksNTUzLHs2ODA6MX0saGhkKTtfLndmPWZ1bmN0aW9uIGtoZCgpe3JldHVybiBlaGQodGhpcyl9O18uQWY9ZnVuY3Rpb24gbGhkKCl7dmFyIGE7cmV0dXJuIGE9QkQoaGtkKHRoaXMuZiwoWTljKCksUzhjKSksMTQyKSwhYSYmKGE9bmV3IEhfYiksYX07Xy5DZj1mdW5jdGlvbiBuaGQoKXtyZXR1cm4gZmhkKHRoaXMpfTtfLkVmPWZ1bmN0aW9uIHBoZChhKXt2YXIgYjtiPW5ldyBLX2IoYSk7amtkKHRoaXMuZiwoWTljKCksUzhjKSxiKX07Xy5GZj1mdW5jdGlvbiBxaGQoYSl7amtkKHRoaXMuZiwoWTljKCksZjljKSxuZXcgcjBiKGEpKX07Xy55Zj1mdW5jdGlvbiBpaGQoKXtyZXR1cm4gdGhpcy5kfTtfLnpmPWZ1bmN0aW9uIGpoZCgpe3ZhciBhLGI7aWYoIXRoaXMuYSl7dGhpcy5hPW5ldyBSa2I7Zm9yKGI9bmV3IFNyKHVyKCRzZChCRCh0aGlzLmYsMzMpKS5hLktjKCksbmV3IFNxKSk7UXIoYik7KXthPUJEKFJyKGIpLDc5KTtFa2IodGhpcy5hLG5ldyAkZ2QoYSkpfX1yZXR1cm4gdGhpcy5hfTtfLkJmPWZ1bmN0aW9uIG1oZCgpe3ZhciBhLGI7aWYoIXRoaXMuYyl7dGhpcy5jPW5ldyBSa2I7Zm9yKGI9bmV3IFNyKHVyKF9zZChCRCh0aGlzLmYsMzMpKS5hLktjKCksbmV3IFNxKSk7UXIoYik7KXthPUJEKFJyKGIpLDc5KTtFa2IodGhpcy5jLG5ldyAkZ2QoYSkpfX1yZXR1cm4gdGhpcy5jfTtfLkRmPWZ1bmN0aW9uIG9oZCgpe3JldHVybiBWb2QoQkQodGhpcy5mLDMzKSkuaSE9MHx8Q2NiKEREKEJEKHRoaXMuZiwzMykuV2UoKFk5YygpLE04YykpKSl9O18uR2Y9ZnVuY3Rpb24gcmhkKCl7Z2hkKHRoaXMsKFBnZCgpLE9nZCkpfTtfLmE9bnVsbDtfLmI9bnVsbDtfLmM9bnVsbDtfLmQ9bnVsbDtfLmU9bnVsbDt2YXIgdTI9bWRiKFVzZSwnRWxrR3JhcGhBZGFwdGVycy9FbGtOb2RlQWRhcHRlcicsNjI5KTtiY2IoMTI2Niw1NTMsezgzODoxfSx0aGQpO18ud2Y9ZnVuY3Rpb24gdmhkKCl7cmV0dXJuIHNoZCh0aGlzKX07Xy56Zj1mdW5jdGlvbiB1aGQoKXt2YXIgYSxiO2lmKCF0aGlzLmEpe3RoaXMuYT1QdShCRCh0aGlzLmYsMTE4KS54ZygpLmkpO2ZvcihiPW5ldyBGeWQoQkQodGhpcy5mLDExOCkueGcoKSk7Yi5lIT1iLmkuZ2MoKTspe2E9QkQoRHlkKGIpLDc5KTtFa2IodGhpcy5hLG5ldyAkZ2QoYSkpfX1yZXR1cm4gdGhpcy5hfTtfLkJmPWZ1bmN0aW9uIHdoZCgpe3ZhciBhLGI7aWYoIXRoaXMuYyl7dGhpcy5jPVB1KEJEKHRoaXMuZiwxMTgpLnlnKCkuaSk7Zm9yKGI9bmV3IEZ5ZChCRCh0aGlzLmYsMTE4KS55ZygpKTtiLmUhPWIuaS5nYygpOyl7YT1CRChEeWQoYiksNzkpO0VrYih0aGlzLmMsbmV3ICRnZChhKSl9fXJldHVybiB0aGlzLmN9O18uSGY9ZnVuY3Rpb24geGhkKCl7cmV0dXJuIEJEKEJEKHRoaXMuZiwxMTgpLldlKChZOWMoKSxBOWMpKSw2MSl9O18uSWY9ZnVuY3Rpb24geWhkKCl7dmFyIGEsYixjLGQsZSxmLGcsaDtkPW1wZChCRCh0aGlzLmYsMTE4KSk7Zm9yKGM9bmV3IEZ5ZChCRCh0aGlzLmYsMTE4KS55ZygpKTtjLmUhPWMuaS5nYygpOyl7YT1CRChEeWQoYyksNzkpO2ZvcihoPW5ldyBGeWQoKCFhLmMmJihhLmM9bmV3IHk1ZCh6MixhLDUsOCkpLGEuYykpO2guZSE9aC5pLmdjKCk7KXtnPUJEKER5ZChoKSw4Mik7aWYobnRkKGF0ZChnKSxkKSl7cmV0dXJuIHRydWV9ZWxzZSBpZihhdGQoZyk9PWQmJkNjYihERChoa2QoYSwoWTljKCksTjhjKSkpKSl7cmV0dXJuIHRydWV9fX1mb3IoYj1uZXcgRnlkKEJEKHRoaXMuZiwxMTgpLnhnKCkpO2IuZSE9Yi5pLmdjKCk7KXthPUJEKER5ZChiKSw3OSk7Zm9yKGY9bmV3IEZ5ZCgoIWEuYiYmKGEuYj1uZXcgeTVkKHoyLGEsNCw3KSksYS5iKSk7Zi5lIT1mLmkuZ2MoKTspe2U9QkQoRHlkKGYpLDgyKTtpZihudGQoYXRkKGUpLGQpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX07Xy5hPW51bGw7Xy5iPW51bGw7Xy5jPW51bGw7dmFyIHYyPW1kYihVc2UsJ0Vsa0dyYXBoQWRhcHRlcnMvRWxrUG9ydEFkYXB0ZXInLDEyNjYpO2JjYigxMjY3LDEsRGtlLEFoZCk7Xy51ZT1mdW5jdGlvbiBCaGQoYSxiKXtyZXR1cm4gemhkKEJEKGEsMTE4KSxCRChiLDExOCkpfTtfLkZiPWZ1bmN0aW9uIENoZChhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gRGhkKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciB3Mj1tZGIoVXNlLCdFbGtHcmFwaEFkYXB0ZXJzL1BvcnRDb21wYXJhdG9yJywxMjY3KTt2YXIgbTU9b2RiKFZzZSwnRU9iamVjdCcpO3ZhciB4Mj1vZGIoV3NlLFhzZSk7dmFyIHkyPW9kYihXc2UsWXNlKTt2YXIgQzI9b2RiKFdzZSxac2UpO3ZhciBHMj1vZGIoV3NlLCdFbGtTaGFwZScpO3ZhciB6Mj1vZGIoV3NlLCRzZSk7dmFyIEIyPW9kYihXc2UsX3NlKTt2YXIgQTI9b2RiKFdzZSxhdGUpO3ZhciBrNT1vZGIoVnNlLGJ0ZSk7dmFyIGk1PW9kYihWc2UsJ0VGYWN0b3J5Jyk7dmFyIEVoZDt2YXIgbDU9b2RiKFZzZSxjdGUpO3ZhciBvNT1vZGIoVnNlLCdFUGFja2FnZScpO3ZhciBHaGQ7dmFyIEloZCxKaGQsS2hkLExoZCxNaGQsTmhkLE9oZCxQaGQsUWhkLFJoZCxTaGQ7dmFyIEQyPW9kYihXc2UsZHRlKTt2YXIgRTI9b2RiKFdzZSxldGUpO3ZhciBGMj1vZGIoV3NlLGZ0ZSk7YmNiKDkwLDEsZ3RlKTtfLkpnPWZ1bmN0aW9uIFZoZCgpe3RoaXMuS2coKTtyZXR1cm4gbnVsbH07Xy5LZz1mdW5jdGlvbiBXaGQoKXtyZXR1cm4gbnVsbH07Xy5MZz1mdW5jdGlvbiBYaGQoKXtyZXR1cm4gdGhpcy5LZygpLGZhbHNlfTtfLk1nPWZ1bmN0aW9uIFloZCgpe3JldHVybiBmYWxzZX07Xy5OZz1mdW5jdGlvbiBaaGQoYSl7VWhkKHRoaXMsYSl9O3ZhciBiND1tZGIoaHRlLCdCYXNpY05vdGlmaWVySW1wbCcsOTApO2JjYig5Nyw5MCxwdGUpO18ubmg9ZnVuY3Rpb24gZmpkKCl7cmV0dXJuIG9pZCh0aGlzKX07Xy5PZz1mdW5jdGlvbiBGaWQoYSxiKXtyZXR1cm4gYX07Xy5QZz1mdW5jdGlvbiBHaWQoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uUWc9ZnVuY3Rpb24gSGlkKGEpe3ZhciBiO3JldHVybiBiPXpVZChCRChYS2QodGhpcy5UZygpLHRoaXMuVmcoKSksMTgpKSx0aGlzLmVoKCkuaWgodGhpcyxiLm4sYi5mLGEpfTtfLlJnPWZ1bmN0aW9uIElpZChhLGIpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5TZz1mdW5jdGlvbiBKaWQoYSxiLGMpe3JldHVybiBfaGQodGhpcyxhLGIsYyl9O18uVGc9ZnVuY3Rpb24gS2lkKCl7dmFyIGE7aWYodGhpcy5QZygpKXthPXRoaXMuUGcoKS5jaygpO2lmKGEpe3JldHVybiBhfX1yZXR1cm4gdGhpcy56aCgpfTtfLlVnPWZ1bmN0aW9uIExpZCgpe3JldHVybiBhaWQodGhpcyl9O18uVmc9ZnVuY3Rpb24gTWlkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLldnPWZ1bmN0aW9uIE9pZCgpe3ZhciBhLGI7Yj10aGlzLnBoKCkuZGsoKTshYiYmdGhpcy5QZygpLmlrKGI9KG5SZCgpLGE9cE5kKFRLZCh0aGlzLlRnKCkpKSxhPT1udWxsP21SZDpuZXcgcVJkKHRoaXMsYSkpKTtyZXR1cm4gYn07Xy5YZz1mdW5jdGlvbiBRaWQoYSxiKXtyZXR1cm4gYX07Xy5ZZz1mdW5jdGlvbiBSaWQoYSl7dmFyIGI7Yj1hLkdqKCk7cmV0dXJuICFiP2JMZCh0aGlzLlRnKCksYSk6YS5haigpfTtfLlpnPWZ1bmN0aW9uIFNpZCgpe3ZhciBhO2E9dGhpcy5QZygpO3JldHVybiAhYT9udWxsOmEuZmsoKX07Xy4kZz1mdW5jdGlvbiBUaWQoKXtyZXR1cm4gIXRoaXMuUGcoKT9udWxsOnRoaXMuUGcoKS5jaygpfTtfLl9nPWZ1bmN0aW9uIFVpZChhLGIsYyl7cmV0dXJuIGZpZCh0aGlzLGEsYixjKX07Xy5haD1mdW5jdGlvbiBWaWQoYSl7cmV0dXJuIGdpZCh0aGlzLGEpfTtfLmJoPWZ1bmN0aW9uIFdpZChhLGIpe3JldHVybiBoaWQodGhpcyxhLGIpfTtfLmRoPWZ1bmN0aW9uIFhpZCgpe3ZhciBhO2E9dGhpcy5QZygpO3JldHVybiAhIWEmJmEuZ2soKX07Xy5laD1mdW5jdGlvbiBZaWQoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uZmg9ZnVuY3Rpb24gWmlkKCl7cmV0dXJuIGppZCh0aGlzKX07Xy5naD1mdW5jdGlvbiAkaWQoYSxiLGMsZCl7cmV0dXJuIGtpZCh0aGlzLGEsYixkKX07Xy5oaD1mdW5jdGlvbiBfaWQoYSxiLGMpe3ZhciBkO3JldHVybiBkPUJEKFhLZCh0aGlzLlRnKCksYiksNjYpLGQuTmooKS5Raih0aGlzLHRoaXMueWgoKSxiLXRoaXMuQWgoKSxhLGMpfTtfLmloPWZ1bmN0aW9uIGFqZChhLGIsYyxkKXtyZXR1cm4gbGlkKHRoaXMsYSxiLGQpfTtfLmpoPWZ1bmN0aW9uIGJqZChhLGIsYyl7dmFyIGQ7cmV0dXJuIGQ9QkQoWEtkKHRoaXMuVGcoKSxiKSw2NiksZC5OaigpLlJqKHRoaXMsdGhpcy55aCgpLGItdGhpcy5BaCgpLGEsYyl9O18ua2g9ZnVuY3Rpb24gY2pkKCl7cmV0dXJuICEhdGhpcy5QZygpJiYhIXRoaXMuUGcoKS5laygpfTtfLmxoPWZ1bmN0aW9uIGRqZChhKXtyZXR1cm4gbWlkKHRoaXMsYSl9O18ubWg9ZnVuY3Rpb24gZWpkKGEpe3JldHVybiBuaWQodGhpcyxhKX07Xy5vaD1mdW5jdGlvbiBnamQoYSl7cmV0dXJuIHJpZCh0aGlzLGEpfTtfLnBoPWZ1bmN0aW9uIGhqZCgpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5xaD1mdW5jdGlvbiBpamQoKXtyZXR1cm4gIXRoaXMuUGcoKT9udWxsOnRoaXMuUGcoKS5laygpfTtfLnJoPWZ1bmN0aW9uIGpqZCgpe3JldHVybiBqaWQodGhpcyl9O18uc2g9ZnVuY3Rpb24ga2pkKGEsYil7eWlkKHRoaXMsYSxiKX07Xy50aD1mdW5jdGlvbiBsamQoYSl7dGhpcy5waCgpLmhrKGEpfTtfLnVoPWZ1bmN0aW9uIG1qZChhKXt0aGlzLnBoKCkua2soYSl9O18udmg9ZnVuY3Rpb24gbmpkKGEpe3RoaXMucGgoKS5qayhhKX07Xy53aD1mdW5jdGlvbiBvamQoYSxiKXt2YXIgYyxkLGUsZjtmPXRoaXMuWmcoKTtpZighIWYmJiEhYSl7Yj1UeGQoZi5WaygpLHRoaXMsYik7Zi5aayh0aGlzKX1kPXRoaXMuZWgoKTtpZihkKXtpZigoTmlkKHRoaXMsdGhpcy5laCgpLHRoaXMuVmcoKSkuQmImVGplKSE9MCl7ZT1kLmZoKCk7ISFlJiYoIWE/ZS5Zayh0aGlzKTohZiYmZS5aayh0aGlzKSl9ZWxzZXtiPShjPXRoaXMuVmcoKSxjPj0wP3RoaXMuUWcoYik6dGhpcy5laCgpLmloKHRoaXMsLTEtYyxudWxsLGIpKTtiPXRoaXMuU2cobnVsbCwtMSxiKX19dGhpcy51aChhKTtyZXR1cm4gYn07Xy54aD1mdW5jdGlvbiBwamQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtjPXRoaXMuVGcoKTtmPWJMZChjLGEpO2I9dGhpcy5BaCgpO2lmKGY+PWIpe3JldHVybiBCRChhLDY2KS5OaigpLlVqKHRoaXMsdGhpcy55aCgpLGYtYil9ZWxzZSBpZihmPD0tMSl7Zz1lMWQoKE82ZCgpLE02ZCksYyxhKTtpZihnKXtRNmQoKTtCRChnLDY2KS5PaigpfHwoZz1fMWQocTFkKE02ZCxnKSkpO2U9KGQ9dGhpcy5ZZyhnKSxCRChkPj0wP3RoaXMuX2coZCx0cnVlLHRydWUpOnNpZCh0aGlzLGcsdHJ1ZSksMTUzKSk7aT1nLlpqKCk7aWYoaT4xfHxpPT0tMSl7cmV0dXJuIEJEKEJEKGUsMjE1KS5obChhLGZhbHNlKSw3Nil9fWVsc2V7dGhyb3cgdmJiKG5ldyBXZGIoaXRlK2EubmUoKStsdGUpKX19ZWxzZSBpZihhLiRqKCkpe3JldHVybiBkPXRoaXMuWWcoYSksQkQoZD49MD90aGlzLl9nKGQsZmFsc2UsdHJ1ZSk6c2lkKHRoaXMsYSxmYWxzZSksNzYpfWg9bmV3IG5HZCh0aGlzLGEpO3JldHVybiBofTtfLnloPWZ1bmN0aW9uIHFqZCgpe3JldHVybiBBaWQodGhpcyl9O18uemg9ZnVuY3Rpb24gcmpkKCl7cmV0dXJuIChORmQoKSxNRmQpLlN9O18uQWg9ZnVuY3Rpb24gc2pkKCl7cmV0dXJuIGFMZCh0aGlzLnpoKCkpfTtfLkJoPWZ1bmN0aW9uIHRqZChhKXtDaWQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiB1amQoKXtyZXR1cm4gRWlkKHRoaXMpfTt2YXIgQjU9bWRiKHF0ZSwnQmFzaWNFT2JqZWN0SW1wbCcsOTcpO3ZhciB6RmQ7YmNiKDExNCw5Nyx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxfSk7Xy5DaD1mdW5jdGlvbiBEamQoYSl7dmFyIGI7Yj14amQodGhpcyk7cmV0dXJuIGJbYV19O18uRGg9ZnVuY3Rpb24gRWpkKGEsYil7dmFyIGM7Yz14amQodGhpcyk7TkMoYyxhLGIpfTtfLkVoPWZ1bmN0aW9uIEZqZChhKXt2YXIgYjtiPXhqZCh0aGlzKTtOQyhiLGEsbnVsbCl9O18uSmc9ZnVuY3Rpb24gR2pkKCl7cmV0dXJuIEJEKEFqZCh0aGlzLDQpLDEyNil9O18uS2c9ZnVuY3Rpb24gSGpkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkxnPWZ1bmN0aW9uIElqZCgpe3JldHVybiAodGhpcy5EYiY0KSE9MH07Xy5QZz1mdW5jdGlvbiBKamQoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uRmg9ZnVuY3Rpb24gS2pkKGEpe0NqZCh0aGlzLDIsYSl9O18uUmc9ZnVuY3Rpb24gTGpkKGEsYil7dGhpcy5EYj1iPDwxNnx0aGlzLkRiJjI1NTt0aGlzLkZoKGEpfTtfLlRnPWZ1bmN0aW9uIE1qZCgpe3JldHVybiB3amQodGhpcyl9O18uVmc9ZnVuY3Rpb24gTmpkKCl7cmV0dXJuIHRoaXMuRGI+PjE2fTtfLldnPWZ1bmN0aW9uIE9qZCgpe3ZhciBhLGI7cmV0dXJuIG5SZCgpLGI9cE5kKFRLZCgoYT1CRChBamQodGhpcywxNiksMjYpLCFhP3RoaXMuemgoKTphKSkpLGI9PW51bGw/KG51bGwsbVJkKTpuZXcgcVJkKHRoaXMsYil9O18uTWc9ZnVuY3Rpb24gUGpkKCl7cmV0dXJuICh0aGlzLkRiJjEpPT0wfTtfLlpnPWZ1bmN0aW9uIFFqZCgpe3JldHVybiBCRChBamQodGhpcywxMjgpLDE5MzUpfTtfLiRnPWZ1bmN0aW9uIFJqZCgpe3JldHVybiBCRChBamQodGhpcywxNiksMjYpfTtfLmRoPWZ1bmN0aW9uIFNqZCgpe3JldHVybiAodGhpcy5EYiYzMikhPTB9O18uZWg9ZnVuY3Rpb24gVGpkKCl7cmV0dXJuIEJEKEFqZCh0aGlzLDIpLDQ5KX07Xy5raD1mdW5jdGlvbiBVamQoKXtyZXR1cm4gKHRoaXMuRGImNjQpIT0wfTtfLnBoPWZ1bmN0aW9uIFZqZCgpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5xaD1mdW5jdGlvbiBXamQoKXtyZXR1cm4gQkQoQWpkKHRoaXMsNjQpLDI4MSl9O18udGg9ZnVuY3Rpb24gWGpkKGEpe0NqZCh0aGlzLDE2LGEpfTtfLnVoPWZ1bmN0aW9uIFlqZChhKXtDamQodGhpcywxMjgsYSl9O18udmg9ZnVuY3Rpb24gWmpkKGEpe0NqZCh0aGlzLDY0LGEpfTtfLnloPWZ1bmN0aW9uICRqZCgpe3JldHVybiB5amQodGhpcyl9O18uRGI9MDt2YXIgczg9bWRiKHF0ZSwnTWluaW1hbEVPYmplY3RJbXBsJywxMTQpO2JjYigxMTUsMTE0LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KTtfLkZoPWZ1bmN0aW9uIF9qZChhKXt0aGlzLkNiPWF9O18uZWg9ZnVuY3Rpb24gYWtkKCl7cmV0dXJuIHRoaXMuQ2J9O3ZhciByOD1tZGIocXRlLCdNaW5pbWFsRU9iamVjdEltcGwvQ29udGFpbmVyJywxMTUpO2JjYigxOTg1LDExNSx7MTA1OjEsNDEzOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KTtfLl9nPWZ1bmN0aW9uIGtrZChhLGIsYyl7cmV0dXJuIGJrZCh0aGlzLGEsYixjKX07Xy5qaD1mdW5jdGlvbiBsa2QoYSxiLGMpe3JldHVybiBja2QodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gbWtkKGEpe3JldHVybiBka2QodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBua2QoYSxiKXtla2QodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIG9rZCgpe3JldHVybiBUaGQoKSxTaGR9O18uQmg9ZnVuY3Rpb24gcGtkKGEpe2ZrZCh0aGlzLGEpfTtfLlZlPWZ1bmN0aW9uIHFrZCgpe3JldHVybiBna2QodGhpcyl9O18uV2U9ZnVuY3Rpb24gcmtkKGEpe3JldHVybiBoa2QodGhpcyxhKX07Xy5YZT1mdW5jdGlvbiBza2QoYSl7cmV0dXJuIGlrZCh0aGlzLGEpfTtfLlllPWZ1bmN0aW9uIHRrZChhLGIpe3JldHVybiBqa2QodGhpcyxhLGIpfTt2YXIgSDI9bWRiKHJ0ZSwnRU1hcFByb3BlcnR5SG9sZGVySW1wbCcsMTk4NSk7YmNiKDU2NywxMTUsezEwNToxLDQ2OToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0seGtkKTtfLl9nPWZ1bmN0aW9uIHlrZChhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5iO31yZXR1cm4gZmlkKHRoaXMsYSxiLGMpfTtfLmxoPWZ1bmN0aW9uIHprZChhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTA7fXJldHVybiBtaWQodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBBa2QoYSxiKXtzd2l0Y2goYSl7Y2FzZSAwOnZrZCh0aGlzLEVkYihFRChiKSkpO3JldHVybjtjYXNlIDE6d2tkKHRoaXMsRWRiKEVEKGIpKSk7cmV0dXJuO315aWQodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIEJrZCgpe3JldHVybiBUaGQoKSxJaGR9O18uQmg9ZnVuY3Rpb24gQ2tkKGEpe3N3aXRjaChhKXtjYXNlIDA6dmtkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMTp3a2QodGhpcywwKTtyZXR1cm47fUNpZCh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIERrZCgpe3ZhciBhO2lmKCh0aGlzLkRiJjY0KSE9MClyZXR1cm4gRWlkKHRoaXMpO2E9bmV3IEpmYihFaWQodGhpcykpO2EuYSs9JyAoeDogJztCZmIoYSx0aGlzLmEpO2EuYSs9JywgeTogJztCZmIoYSx0aGlzLmIpO2EuYSs9JyknO3JldHVybiBhLmF9O18uYT0wO18uYj0wO3ZhciBJMj1tZGIocnRlLCdFbGtCZW5kUG9pbnRJbXBsJyw1NjcpO2JjYig3MjMsMTk4NSx7MTA1OjEsNDEzOjEsMTYwOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KTtfLl9nPWZ1bmN0aW9uIE5rZChhLGIsYyl7cmV0dXJuIEVrZCh0aGlzLGEsYixjKX07Xy5oaD1mdW5jdGlvbiBPa2QoYSxiLGMpe3JldHVybiBGa2QodGhpcyxhLGIsYyl9O18uamg9ZnVuY3Rpb24gUGtkKGEsYixjKXtyZXR1cm4gR2tkKHRoaXMsYSxiLGMpfTtfLmxoPWZ1bmN0aW9uIFFrZChhKXtyZXR1cm4gSGtkKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gUmtkKGEsYil7SWtkKHRoaXMsYSxiKX07Xy56aD1mdW5jdGlvbiBTa2QoKXtyZXR1cm4gVGhkKCksTWhkfTtfLkJoPWZ1bmN0aW9uIFRrZChhKXtKa2QodGhpcyxhKX07Xy56Zz1mdW5jdGlvbiBVa2QoKXtyZXR1cm4gdGhpcy5rfTtfLkFnPWZ1bmN0aW9uIFZrZCgpe3JldHVybiBLa2QodGhpcyl9O18uSWI9ZnVuY3Rpb24gV2tkKCl7cmV0dXJuIE1rZCh0aGlzKX07Xy5rPW51bGw7dmFyIE0yPW1kYihydGUsJ0Vsa0dyYXBoRWxlbWVudEltcGwnLDcyMyk7YmNiKDcyNCw3MjMsezEwNToxLDQxMzoxLDE2MDoxLDQ3MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSk7Xy5fZz1mdW5jdGlvbiBnbGQoYSxiLGMpe3JldHVybiBYa2QodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gaGxkKGEpe3JldHVybiBZa2QodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBpbGQoYSxiKXtaa2QodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIGpsZCgpe3JldHVybiBUaGQoKSxSaGR9O18uQmg9ZnVuY3Rpb24ga2xkKGEpeyRrZCh0aGlzLGEpfTtfLkJnPWZ1bmN0aW9uIGxsZCgpe3JldHVybiB0aGlzLmZ9O18uQ2c9ZnVuY3Rpb24gbWxkKCl7cmV0dXJuIHRoaXMuZ307Xy5EZz1mdW5jdGlvbiBubGQoKXtyZXR1cm4gdGhpcy5pfTtfLkVnPWZ1bmN0aW9uIG9sZCgpe3JldHVybiB0aGlzLmp9O18uRmc9ZnVuY3Rpb24gcGxkKGEsYil7X2tkKHRoaXMsYSxiKX07Xy5HZz1mdW5jdGlvbiBxbGQoYSxiKXtibGQodGhpcyxhLGIpfTtfLkhnPWZ1bmN0aW9uIHJsZChhKXtkbGQodGhpcyxhKX07Xy5JZz1mdW5jdGlvbiBzbGQoYSl7ZWxkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gdGxkKCl7cmV0dXJuIGZsZCh0aGlzKX07Xy5mPTA7Xy5nPTA7Xy5pPTA7Xy5qPTA7dmFyIFQyPW1kYihydGUsJ0Vsa1NoYXBlSW1wbCcsNzI0KTtiY2IoNzI1LDcyNCx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSw0NzA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pO18uX2c9ZnVuY3Rpb24gQmxkKGEsYixjKXtyZXR1cm4gdWxkKHRoaXMsYSxiLGMpfTtfLmhoPWZ1bmN0aW9uIENsZChhLGIsYyl7cmV0dXJuIHZsZCh0aGlzLGEsYixjKX07Xy5qaD1mdW5jdGlvbiBEbGQoYSxiLGMpe3JldHVybiB3bGQodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gRWxkKGEpe3JldHVybiB4bGQodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBGbGQoYSxiKXt5bGQodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIEdsZCgpe3JldHVybiBUaGQoKSxKaGR9O18uQmg9ZnVuY3Rpb24gSGxkKGEpe3psZCh0aGlzLGEpfTtfLnhnPWZ1bmN0aW9uIElsZCgpe3JldHVybiAhdGhpcy5kJiYodGhpcy5kPW5ldyB5NWQoQjIsdGhpcyw4LDUpKSx0aGlzLmR9O18ueWc9ZnVuY3Rpb24gSmxkKCl7cmV0dXJuICF0aGlzLmUmJih0aGlzLmU9bmV3IHk1ZChCMix0aGlzLDcsNCkpLHRoaXMuZX07dmFyIEoyPW1kYihydGUsJ0Vsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsJyw3MjUpO2JjYigzNTIsNzIzLHsxMDU6MSw0MTM6MSw3OToxLDE2MDoxLDM1MjoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxUbGQpO18uUWc9ZnVuY3Rpb24gVWxkKGEpe3JldHVybiBMbGQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiBWbGQoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIE1sZCh0aGlzKTtjYXNlIDQ6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IHk1ZCh6Mix0aGlzLDQsNykpLHRoaXMuYjtjYXNlIDU6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHk1ZCh6Mix0aGlzLDUsOCkpLHRoaXMuYztjYXNlIDY6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChBMix0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEJjYigpLCF0aGlzLmImJih0aGlzLmI9bmV3IHk1ZCh6Mix0aGlzLDQsNykpLHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgeTVkKHoyLHRoaXMsNSw4KSksdGhpcy5jLmk8PTEpP2ZhbHNlOnRydWU7Y2FzZSA4OnJldHVybiBCY2IoKSxQbGQodGhpcyk/dHJ1ZTpmYWxzZTtjYXNlIDk6cmV0dXJuIEJjYigpLFFsZCh0aGlzKT90cnVlOmZhbHNlO2Nhc2UgMTA6cmV0dXJuIEJjYigpLCF0aGlzLmImJih0aGlzLmI9bmV3IHk1ZCh6Mix0aGlzLDQsNykpLHRoaXMuYi5pIT0wJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgeTVkKHoyLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApP3RydWU6ZmFsc2U7fXJldHVybiBFa2QodGhpcyxhLGIsYyl9O18uaGg9ZnVuY3Rpb24gV2xkKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSAzOiEhdGhpcy5DYiYmKGM9KGQ9dGhpcy5EYj4+MTYsZD49MD9MbGQodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZCxudWxsLGMpKSk7cmV0dXJuIEtsZCh0aGlzLEJEKGEsMzMpLGMpO2Nhc2UgNDpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgeTVkKHoyLHRoaXMsNCw3KSksU3hkKHRoaXMuYixhLGMpO2Nhc2UgNTpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgeTVkKHoyLHRoaXMsNSw4KSksU3hkKHRoaXMuYyxhLGMpO2Nhc2UgNjpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEEyLHRoaXMsNiw2KSksU3hkKHRoaXMuYSxhLGMpO31yZXR1cm4gRmtkKHRoaXMsYSxiLGMpfTtfLmpoPWZ1bmN0aW9uIFhsZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMzpyZXR1cm4gS2xkKHRoaXMsbnVsbCxjKTtjYXNlIDQ6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IHk1ZCh6Mix0aGlzLDQsNykpLFR4ZCh0aGlzLmIsYSxjKTtjYXNlIDU6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHk1ZCh6Mix0aGlzLDUsOCkpLFR4ZCh0aGlzLmMsYSxjKTtjYXNlIDY6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChBMix0aGlzLDYsNikpLFR4ZCh0aGlzLmEsYSxjKTt9cmV0dXJuIEdrZCh0aGlzLGEsYixjKX07Xy5saD1mdW5jdGlvbiBZbGQoYSl7c3dpdGNoKGEpe2Nhc2UgMzpyZXR1cm4gISFNbGQodGhpcyk7Y2FzZSA0OnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSA1OnJldHVybiAhIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiAhIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA3OnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyB5NWQoejIsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgeTVkKHoyLHRoaXMsNSw4KSksdGhpcy5jLmk8PTEpKTtjYXNlIDg6cmV0dXJuIFBsZCh0aGlzKTtjYXNlIDk6cmV0dXJuIFFsZCh0aGlzKTtjYXNlIDEwOnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyB5NWQoejIsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IHk1ZCh6Mix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKTt9cmV0dXJuIEhrZCh0aGlzLGEpfTtfLnNoPWZ1bmN0aW9uIFpsZChhLGIpe3N3aXRjaChhKXtjYXNlIDM6UmxkKHRoaXMsQkQoYiwzMykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgeTVkKHoyLHRoaXMsNCw3KSk7VXhkKHRoaXMuYik7IXRoaXMuYiYmKHRoaXMuYj1uZXcgeTVkKHoyLHRoaXMsNCw3KSk7eXRkKHRoaXMuYixCRChiLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyB5NWQoejIsdGhpcyw1LDgpKTtVeGQodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyB5NWQoejIsdGhpcyw1LDgpKTt5dGQodGhpcy5jLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChBMix0aGlzLDYsNikpO1V4ZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChBMix0aGlzLDYsNikpO3l0ZCh0aGlzLmEsQkQoYiwxNCkpO3JldHVybjt9SWtkKHRoaXMsYSxiKX07Xy56aD1mdW5jdGlvbiAkbGQoKXtyZXR1cm4gVGhkKCksS2hkfTtfLkJoPWZ1bmN0aW9uIF9sZChhKXtzd2l0Y2goYSl7Y2FzZSAzOlJsZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgeTVkKHoyLHRoaXMsNCw3KSk7VXhkKHRoaXMuYik7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyB5NWQoejIsdGhpcyw1LDgpKTtVeGQodGhpcy5jKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChBMix0aGlzLDYsNikpO1V4ZCh0aGlzLmEpO3JldHVybjt9SmtkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gYW1kKCl7cmV0dXJuIFNsZCh0aGlzKX07dmFyIEsyPW1kYihydGUsJ0Vsa0VkZ2VJbXBsJywzNTIpO2JjYig0MzksMTk4NSx7MTA1OjEsNDEzOjEsMjAyOjEsNDM5OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHJtZCk7Xy5RZz1mdW5jdGlvbiBzbWQoYSl7cmV0dXJuIGNtZCh0aGlzLGEpfTtfLl9nPWZ1bmN0aW9uIHRtZChhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qO2Nhc2UgMjpyZXR1cm4gdGhpcy5rO2Nhc2UgMzpyZXR1cm4gdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jO2Nhc2UgNTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKHkyLHRoaXMsNSkpLHRoaXMuYTtjYXNlIDY6cmV0dXJuIGZtZCh0aGlzKTtjYXNlIDc6aWYoYilyZXR1cm4gZW1kKHRoaXMpO3JldHVybiB0aGlzLmk7Y2FzZSA4OmlmKGIpcmV0dXJuIGRtZCh0aGlzKTtyZXR1cm4gdGhpcy5mO2Nhc2UgOTpyZXR1cm4gIXRoaXMuZyYmKHRoaXMuZz1uZXcgeTVkKEEyLHRoaXMsOSwxMCkpLHRoaXMuZztjYXNlIDEwOnJldHVybiAhdGhpcy5lJiYodGhpcy5lPW5ldyB5NWQoQTIsdGhpcywxMCw5KSksdGhpcy5lO2Nhc2UgMTE6cmV0dXJuIHRoaXMuZDt9cmV0dXJuIGJrZCh0aGlzLGEsYixjKX07Xy5oaD1mdW5jdGlvbiB1bWQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9jbWQodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJtZCh0aGlzLEJEKGEsNzkpLGMpO2Nhc2UgOTpyZXR1cm4gIXRoaXMuZyYmKHRoaXMuZz1uZXcgeTVkKEEyLHRoaXMsOSwxMCkpLFN4ZCh0aGlzLmcsYSxjKTtjYXNlIDEwOnJldHVybiAhdGhpcy5lJiYodGhpcy5lPW5ldyB5NWQoQTIsdGhpcywxMCw5KSksU3hkKHRoaXMuZSxhLGMpO31yZXR1cm4gZj1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oVGhkKCksTGhkKTpkKSxiKSw2NiksZi5OaigpLlFqKHRoaXMseWpkKHRoaXMpLGItYUxkKChUaGQoKSxMaGQpKSxhLGMpfTtfLmpoPWZ1bmN0aW9uIHZtZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgNTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKHkyLHRoaXMsNSkpLFR4ZCh0aGlzLmEsYSxjKTtjYXNlIDY6cmV0dXJuIGJtZCh0aGlzLG51bGwsYyk7Y2FzZSA5OnJldHVybiAhdGhpcy5nJiYodGhpcy5nPW5ldyB5NWQoQTIsdGhpcyw5LDEwKSksVHhkKHRoaXMuZyxhLGMpO2Nhc2UgMTA6cmV0dXJuICF0aGlzLmUmJih0aGlzLmU9bmV3IHk1ZChBMix0aGlzLDEwLDkpKSxUeGQodGhpcy5lLGEsYyk7fXJldHVybiBja2QodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gd21kKGEpe3N3aXRjaChhKXtjYXNlIDE6cmV0dXJuIHRoaXMuaiE9MDtjYXNlIDI6cmV0dXJuIHRoaXMuayE9MDtjYXNlIDM6cmV0dXJuIHRoaXMuYiE9MDtjYXNlIDQ6cmV0dXJuIHRoaXMuYyE9MDtjYXNlIDU6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDY6cmV0dXJuICEhZm1kKHRoaXMpO2Nhc2UgNzpyZXR1cm4gISF0aGlzLmk7Y2FzZSA4OnJldHVybiAhIXRoaXMuZjtjYXNlIDk6cmV0dXJuICEhdGhpcy5nJiZ0aGlzLmcuaSE9MDtjYXNlIDEwOnJldHVybiAhIXRoaXMuZSYmdGhpcy5lLmkhPTA7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kIT1udWxsO31yZXR1cm4gZGtkKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24geG1kKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpvbWQodGhpcyxFZGIoRUQoYikpKTtyZXR1cm47Y2FzZSAyOnBtZCh0aGlzLEVkYihFRChiKSkpO3JldHVybjtjYXNlIDM6aG1kKHRoaXMsRWRiKEVEKGIpKSk7cmV0dXJuO2Nhc2UgNDppbWQodGhpcyxFZGIoRUQoYikpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IHhNZCh5Mix0aGlzLDUpKTtVeGQodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyB4TWQoeTIsdGhpcyw1KSk7eXRkKHRoaXMuYSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgNjptbWQodGhpcyxCRChiLDc5KSk7cmV0dXJuO2Nhc2UgNzpsbWQodGhpcyxCRChiLDgyKSk7cmV0dXJuO2Nhc2UgODprbWQodGhpcyxCRChiLDgyKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyB5NWQoQTIsdGhpcyw5LDEwKSk7VXhkKHRoaXMuZyk7IXRoaXMuZyYmKHRoaXMuZz1uZXcgeTVkKEEyLHRoaXMsOSwxMCkpO3l0ZCh0aGlzLmcsQkQoYiwxNCkpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IHk1ZChBMix0aGlzLDEwLDkpKTtVeGQodGhpcy5lKTshdGhpcy5lJiYodGhpcy5lPW5ldyB5NWQoQTIsdGhpcywxMCw5KSk7eXRkKHRoaXMuZSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTE6am1kKHRoaXMsR0QoYikpO3JldHVybjt9ZWtkKHRoaXMsYSxiKX07Xy56aD1mdW5jdGlvbiB5bWQoKXtyZXR1cm4gVGhkKCksTGhkfTtfLkJoPWZ1bmN0aW9uIHptZChhKXtzd2l0Y2goYSl7Y2FzZSAxOm9tZCh0aGlzLDApO3JldHVybjtjYXNlIDI6cG1kKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMzpobWQodGhpcywwKTtyZXR1cm47Y2FzZSA0OmltZCh0aGlzLDApO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKHkyLHRoaXMsNSkpO1V4ZCh0aGlzLmEpO3JldHVybjtjYXNlIDY6bW1kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzpsbWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4OmttZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6IXRoaXMuZyYmKHRoaXMuZz1uZXcgeTVkKEEyLHRoaXMsOSwxMCkpO1V4ZCh0aGlzLmcpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IHk1ZChBMix0aGlzLDEwLDkpKTtVeGQodGhpcy5lKTtyZXR1cm47Y2FzZSAxMTpqbWQodGhpcyxudWxsKTtyZXR1cm47fWZrZCh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIEFtZCgpe3JldHVybiBxbWQodGhpcyl9O18uYj0wO18uYz0wO18uZD1udWxsO18uaj0wO18uaz0wO3ZhciBMMj1tZGIocnRlLCdFbGtFZGdlU2VjdGlvbkltcGwnLDQzOSk7YmNiKDE1MCwxMTUsezEwNToxLDkyOjEsOTA6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0pO18uX2c9ZnVuY3Rpb24gRW1kKGEsYixjKXt2YXIgZDtpZihhPT0wKXtyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFifXJldHVybiBiaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP3RoaXMuemgoKTpkKSxhKSxiLGMpfTtfLmhoPWZ1bmN0aW9uIEZtZChhLGIsYyl7dmFyIGQsZTtpZihiPT0wKXtyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxTeGQodGhpcy5BYixhLGMpfXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP3RoaXMuemgoKTpkKSxiKSw2NiksZS5OaigpLlFqKHRoaXMseWpkKHRoaXMpLGItYUxkKHRoaXMuemgoKSksYSxjKX07Xy5qaD1mdW5jdGlvbiBHbWQoYSxiLGMpe3ZhciBkLGU7aWYoYj09MCl7cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksVHhkKHRoaXMuQWIsYSxjKX1yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD90aGlzLnpoKCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCh0aGlzLnpoKCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gSG1kKGEpe3ZhciBiO2lmKGE9PTApe3JldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MH1yZXR1cm4gY2lkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLm9oPWZ1bmN0aW9uIEltZChhKXtyZXR1cm4gQm1kKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gSm1kKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47fWRpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChjPUJEKEFqZCh0aGlzLDE2KSwyNiksIWM/dGhpcy56aCgpOmMpLGEpLGIpfTtfLnVoPWZ1bmN0aW9uIEttZChhKXtDamQodGhpcywxMjgsYSl9O18uemg9ZnVuY3Rpb24gTG1kKCl7cmV0dXJuIGpHZCgpLFpGZH07Xy5CaD1mdW5jdGlvbiBNbWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/dGhpcy56aCgpOmIpLGEpKX07Xy5HaD1mdW5jdGlvbiBObWQoKXt0aGlzLkJifD0xfTtfLkhoPWZ1bmN0aW9uIE9tZChhKXtyZXR1cm4gRG1kKHRoaXMsYSl9O18uQmI9MDt2YXIgZjY9bWRiKHF0ZSwnRU1vZGVsRWxlbWVudEltcGwnLDE1MCk7YmNiKDcwNCwxNTAsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sJG1kKTtfLkloPWZ1bmN0aW9uIF9tZChhLGIpe3JldHVybiBWbWQodGhpcyxhLGIpfTtfLkpoPWZ1bmN0aW9uIGFuZChhKXt2YXIgYixjLGQsZSxmO2lmKHRoaXMuYSE9YktkKGEpfHwoYS5CYiYyNTYpIT0wKXt0aHJvdyB2YmIobmV3IFdkYih4dGUrYS56Yit1dGUpKX1mb3IoZD1fS2QoYSk7VktkKGQuYSkuaSE9MDspe2M9QkQobk9kKGQsMCwoYj1CRChxdWQoVktkKGQuYSksMCksODcpLGY9Yi5jLEpEKGYsODgpP0JEKGYsMjYpOihqR2QoKSxfRmQpKSksMjYpO2lmKGRLZChjKSl7ZT1iS2QoYykuTmgoKS5KaChjKTtCRChlLDQ5KS50aChhKTtyZXR1cm4gZX1kPV9LZChjKX1yZXR1cm4gKGEuRCE9bnVsbD9hLkQ6YS5CKT09J2phdmEudXRpbC5NYXAkRW50cnknP25ldyBsSGQoYSk6bmV3IF9HZChhKX07Xy5LaD1mdW5jdGlvbiBibmQoYSxiKXtyZXR1cm4gV21kKHRoaXMsYSxiKX07Xy5fZz1mdW5jdGlvbiBjbmQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuYTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKChqR2QoKSxXRmQpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD9XRmQ6ZCksYSksYixjKX07Xy5oaD1mdW5jdGlvbiBkbmQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxTeGQodGhpcy5BYixhLGMpO2Nhc2UgMTohIXRoaXMuYSYmKGM9QkQodGhpcy5hLDQ5KS5paCh0aGlzLDQsbzUsYykpO3JldHVybiBUbWQodGhpcyxCRChhLDIzNSksYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxXRmQpOmQpLGIpLDY2KSxlLk5qKCkuUWoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLFdGZCkpLGEsYyl9O18uamg9ZnVuY3Rpb24gZW5kKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksVHhkKHRoaXMuQWIsYSxjKTtjYXNlIDE6cmV0dXJuIFRtZCh0aGlzLG51bGwsYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxXRmQpOmQpLGIpLDY2KSxlLk5qKCkuUmoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLFdGZCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gZm5kKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gISF0aGlzLmE7fXJldHVybiBjaWQodGhpcyxhLWFMZCgoakdkKCksV0ZkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/V0ZkOmIpLGEpKX07Xy5zaD1mdW5jdGlvbiBnbmQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7eXRkKHRoaXMuQWIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDE6WW1kKHRoaXMsQkQoYiwyMzUpKTtyZXR1cm47fWRpZCh0aGlzLGEtYUxkKChqR2QoKSxXRmQpKSxYS2QoKGM9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYz9XRmQ6YyksYSksYil9O18uemg9ZnVuY3Rpb24gaG5kKCl7cmV0dXJuIGpHZCgpLFdGZH07Xy5CaD1mdW5jdGlvbiBpbmQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlltZCh0aGlzLG51bGwpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQoKGpHZCgpLFdGZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP1dGZDpiKSxhKSl9O3ZhciBQbWQsUW1kLFJtZDt2YXIgZDY9bWRiKHF0ZSwnRUZhY3RvcnlJbXBsJyw3MDQpO2JjYih6dGUsNzA0LHsxMDU6MSwyMDE0OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxrbmQpO18uSWg9ZnVuY3Rpb24gbG5kKGEsYil7c3dpdGNoKGEueWooKSl7Y2FzZSAxMjpyZXR1cm4gQkQoYiwxNDYpLnRnKCk7Y2FzZSAxMzpyZXR1cm4gZmNiKGIpO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIodHRlK2EubmUoKSt1dGUpKTt9fTtfLkpoPWZ1bmN0aW9uIG1uZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpO3N3aXRjaChhLkc9PS0xJiYoYS5HPShiPWJLZChhKSxiP0hMZChiLk1oKCksYSk6LTEpKSxhLkcpe2Nhc2UgNDpyZXR1cm4gZj1uZXcgSm9kLGY7Y2FzZSA2OnJldHVybiBnPW5ldyBhcGQsZztjYXNlIDc6cmV0dXJuIGg9bmV3IHBwZCxoO2Nhc2UgODpyZXR1cm4gZD1uZXcgVGxkLGQ7Y2FzZSA5OnJldHVybiBjPW5ldyB4a2QsYztjYXNlIDEwOnJldHVybiBlPW5ldyBybWQsZTtjYXNlIDExOnJldHVybiBpPW5ldyBCcGQsaTtkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKHh0ZSthLnpiK3V0ZSkpO319O18uS2g9ZnVuY3Rpb24gbm5kKGEsYil7c3dpdGNoKGEueWooKSl7Y2FzZSAxMzpjYXNlIDEyOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIodHRlK2EubmUoKSt1dGUpKTt9fTt2YXIgTjI9bWRiKHJ0ZSwnRWxrR3JhcGhGYWN0b3J5SW1wbCcsenRlKTtiY2IoNDM4LDE1MCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSk7Xy5XZz1mdW5jdGlvbiBybmQoKXt2YXIgYSxiO2I9KGE9QkQoQWpkKHRoaXMsMTYpLDI2KSxwTmQoVEtkKCFhP3RoaXMuemgoKTphKSkpO3JldHVybiBiPT1udWxsPyhuUmQoKSxuUmQoKSxtUmQpOm5ldyBHUmQodGhpcyxiKX07Xy5fZz1mdW5jdGlvbiBzbmQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMubmUoKTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/dGhpcy56aCgpOmQpLGEpLGIsYyl9O18ubGg9ZnVuY3Rpb24gdG5kKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/dGhpcy56aCgpOmIpLGEpKX07Xy5zaD1mdW5jdGlvbiB1bmQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7eXRkKHRoaXMuQWIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChHRChiKSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP3RoaXMuemgoKTpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiB2bmQoKXtyZXR1cm4gakdkKCksJEZkfTtfLkJoPWZ1bmN0aW9uIHduZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy5MaChudWxsKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/dGhpcy56aCgpOmIpLGEpKX07Xy5uZT1mdW5jdGlvbiB4bmQoKXtyZXR1cm4gdGhpcy56Yn07Xy5MaD1mdW5jdGlvbiB5bmQoYSl7cG5kKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gem5kKCl7cmV0dXJuIHFuZCh0aGlzKX07Xy56Yj1udWxsO3ZhciBqNj1tZGIocXRlLCdFTmFtZWRFbGVtZW50SW1wbCcsNDM4KTtiY2IoMTc5LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDExNDoxLDExNToxLDY3NToxfSxlb2QpO18uUWc9ZnVuY3Rpb24gZ29kKGEpe3JldHVybiBTbmQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiBob2QoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLnliO2Nhc2UgMzpyZXR1cm4gdGhpcy54YjtjYXNlIDQ6cmV0dXJuIHRoaXMuc2I7Y2FzZSA1OnJldHVybiAhdGhpcy5yYiYmKHRoaXMucmI9bmV3IGpVZCh0aGlzLGQ1LHRoaXMpKSx0aGlzLnJiO2Nhc2UgNjpyZXR1cm4gIXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKSx0aGlzLnZiO2Nhc2UgNzppZihiKXJldHVybiB0aGlzLkRiPj4xNj09Nz9CRCh0aGlzLkNiLDIzNSk6bnVsbDtyZXR1cm4gSW5kKHRoaXMpO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKGpHZCgpLGNHZCkpLFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP2NHZDpkKSxhKSxiLGMpfTtfLmhoPWZ1bmN0aW9uIGlvZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksU3hkKHRoaXMuQWIsYSxjKTtjYXNlIDQ6ISF0aGlzLnNiJiYoYz1CRCh0aGlzLnNiLDQ5KS5paCh0aGlzLDEsaTUsYykpO3JldHVybiBKbmQodGhpcyxCRChhLDQ3MSksYyk7Y2FzZSA1OnJldHVybiAhdGhpcy5yYiYmKHRoaXMucmI9bmV3IGpVZCh0aGlzLGQ1LHRoaXMpKSxTeGQodGhpcy5yYixhLGMpO2Nhc2UgNjpyZXR1cm4gIXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKSxTeGQodGhpcy52YixhLGMpO2Nhc2UgNzohIXRoaXMuQ2ImJihjPShlPXRoaXMuRGI+PjE2LGU+PTA/U25kKHRoaXMsYyk6dGhpcy5DYi5paCh0aGlzLC0xLWUsbnVsbCxjKSkpO3JldHVybiBfaGQodGhpcyxhLDcsYyk7fXJldHVybiBmPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxjR2QpOmQpLGIpLDY2KSxmLk5qKCkuUWoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLGNHZCkpLGEsYyl9O18uamg9ZnVuY3Rpb24gam9kKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksVHhkKHRoaXMuQWIsYSxjKTtjYXNlIDQ6cmV0dXJuIEpuZCh0aGlzLG51bGwsYyk7Y2FzZSA1OnJldHVybiAhdGhpcy5yYiYmKHRoaXMucmI9bmV3IGpVZCh0aGlzLGQ1LHRoaXMpKSxUeGQodGhpcy5yYixhLGMpO2Nhc2UgNjpyZXR1cm4gIXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKSxUeGQodGhpcy52YixhLGMpO2Nhc2UgNzpyZXR1cm4gX2hkKHRoaXMsbnVsbCw3LGMpO31yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oakdkKCksY0dkKTpkKSxiKSw2NiksZS5OaigpLlJqKHRoaXMseWpkKHRoaXMpLGItYUxkKChqR2QoKSxjR2QpKSxhLGMpfTtfLmxoPWZ1bmN0aW9uIGtvZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLnliIT1udWxsO2Nhc2UgMzpyZXR1cm4gdGhpcy54YiE9bnVsbDtjYXNlIDQ6cmV0dXJuICEhdGhpcy5zYjtjYXNlIDU6cmV0dXJuICEhdGhpcy5yYiYmdGhpcy5yYi5pIT0wO2Nhc2UgNjpyZXR1cm4gISF0aGlzLnZiJiZ0aGlzLnZiLmkhPTA7Y2FzZSA3OnJldHVybiAhIUluZCh0aGlzKTt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxjR2QpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9jR2Q6YiksYSkpfTtfLm9oPWZ1bmN0aW9uIGxvZChhKXt2YXIgYjtiPVVuZCh0aGlzLGEpO3JldHVybiBiP2I6Qm1kKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gbW9kKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOnBuZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOmRvZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAzOmNvZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSA0OmJvZCh0aGlzLEJEKGIsNDcxKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IGpVZCh0aGlzLGQ1LHRoaXMpKTtVeGQodGhpcy5yYik7IXRoaXMucmImJih0aGlzLnJiPW5ldyBqVWQodGhpcyxkNSx0aGlzKSk7eXRkKHRoaXMucmIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKTtVeGQodGhpcy52Yik7IXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKTt5dGQodGhpcy52YixCRChiLDE0KSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCgoakdkKCksY0dkKSksWEtkKChjPUJEKEFqZCh0aGlzLDE2KSwyNiksIWM/Y0dkOmMpLGEpLGIpfTtfLnZoPWZ1bmN0aW9uIG5vZChhKXt2YXIgYixjO2lmKCEhYSYmISF0aGlzLnJiKXtmb3IoYz1uZXcgRnlkKHRoaXMucmIpO2MuZSE9Yy5pLmdjKCk7KXtiPUR5ZChjKTtKRChiLDM1MSkmJihCRChiLDM1MSkudz1udWxsKX19Q2pkKHRoaXMsNjQsYSl9O18uemg9ZnVuY3Rpb24gb29kKCl7cmV0dXJuIGpHZCgpLGNHZH07Xy5CaD1mdW5jdGlvbiBwb2QoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnBuZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6ZG9kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMzpjb2QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OmJvZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyBqVWQodGhpcyxkNSx0aGlzKSk7VXhkKHRoaXMucmIpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBnVWQobzUsdGhpcyw2LDcpKTtVeGQodGhpcy52Yik7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoakdkKCksY0dkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/Y0dkOmIpLGEpKX07Xy5HaD1mdW5jdGlvbiBxb2QoKXtUbmQodGhpcyl9O18uTWg9ZnVuY3Rpb24gcm9kKCl7cmV0dXJuICF0aGlzLnJiJiYodGhpcy5yYj1uZXcgalVkKHRoaXMsZDUsdGhpcykpLHRoaXMucmJ9O18uTmg9ZnVuY3Rpb24gc29kKCl7cmV0dXJuIHRoaXMuc2J9O18uT2g9ZnVuY3Rpb24gdG9kKCl7cmV0dXJuIHRoaXMudWJ9O18uUGg9ZnVuY3Rpb24gdW9kKCl7cmV0dXJuIHRoaXMueGJ9O18uUWg9ZnVuY3Rpb24gdm9kKCl7cmV0dXJuIHRoaXMueWJ9O18uUmg9ZnVuY3Rpb24gd29kKGEpe3RoaXMudWI9YX07Xy5JYj1mdW5jdGlvbiB4b2QoKXt2YXIgYTtpZigodGhpcy5EYiY2NCkhPTApcmV0dXJuIHFuZCh0aGlzKTthPW5ldyBKZmIocW5kKHRoaXMpKTthLmErPScgKG5zVVJJOiAnO0VmYihhLHRoaXMueWIpO2EuYSs9JywgbnNQcmVmaXg6ICc7RWZiKGEsdGhpcy54Yik7YS5hKz0nKSc7cmV0dXJuIGEuYX07Xy54Yj1udWxsO18ueWI9bnVsbDt2YXIgQW5kO3ZhciB0Nj1tZGIocXRlLCdFUGFja2FnZUltcGwnLDE3OSk7YmNiKDU1NSwxNzksezEwNToxLDIwMTY6MSw1NTU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjF9LEJvZCk7Xy5xPWZhbHNlO18ucj1mYWxzZTt2YXIgeW9kPWZhbHNlO3ZhciBPMj1tZGIocnRlLCdFbGtHcmFwaFBhY2thZ2VJbXBsJyw1NTUpO2JjYigzNTQsNzI0LHsxMDU6MSw0MTM6MSwxNjA6MSwxMzc6MSw0NzA6MSwzNTQ6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sSm9kKTtfLlFnPWZ1bmN0aW9uIEtvZChhKXtyZXR1cm4gRW9kKHRoaXMsYSl9O18uX2c9ZnVuY3Rpb24gTG9kKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSA3OnJldHVybiBGb2QodGhpcyk7Y2FzZSA4OnJldHVybiB0aGlzLmE7fXJldHVybiBYa2QodGhpcyxhLGIsYyl9O18uaGg9ZnVuY3Rpb24gTW9kKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSA3OiEhdGhpcy5DYiYmKGM9KGQ9dGhpcy5EYj4+MTYsZD49MD9Fb2QodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZCxudWxsLGMpKSk7cmV0dXJuIERvZCh0aGlzLEJEKGEsMTYwKSxjKTt9cmV0dXJuIEZrZCh0aGlzLGEsYixjKX07Xy5qaD1mdW5jdGlvbiBOb2QoYSxiLGMpe2lmKGI9PTcpe3JldHVybiBEb2QodGhpcyxudWxsLGMpfXJldHVybiBHa2QodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gT29kKGEpe3N3aXRjaChhKXtjYXNlIDc6cmV0dXJuICEhRm9kKHRoaXMpO2Nhc2UgODpyZXR1cm4gIWRmYignJyx0aGlzLmEpO31yZXR1cm4gWWtkKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gUG9kKGEsYil7c3dpdGNoKGEpe2Nhc2UgNzpHb2QodGhpcyxCRChiLDE2MCkpO3JldHVybjtjYXNlIDg6SG9kKHRoaXMsR0QoYikpO3JldHVybjt9WmtkKHRoaXMsYSxiKX07Xy56aD1mdW5jdGlvbiBRb2QoKXtyZXR1cm4gVGhkKCksTmhkfTtfLkJoPWZ1bmN0aW9uIFJvZChhKXtzd2l0Y2goYSl7Y2FzZSA3OkdvZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6SG9kKHRoaXMsJycpO3JldHVybjt9JGtkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gU29kKCl7cmV0dXJuIElvZCh0aGlzKX07Xy5hPScnO3ZhciBQMj1tZGIocnRlLCdFbGtMYWJlbEltcGwnLDM1NCk7YmNiKDIzOSw3MjUsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsMzM6MSw0NzA6MSwyMzk6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sYXBkKTtfLlFnPWZ1bmN0aW9uIGJwZChhKXtyZXR1cm4gVW9kKHRoaXMsYSl9O18uX2c9ZnVuY3Rpb24gY3BkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSA5OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBjVWQoRjIsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEUyLHRoaXMsMTAsMTEpKSx0aGlzLmE7Y2FzZSAxMTpyZXR1cm4gWG9kKHRoaXMpO2Nhc2UgMTI6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IGNVZChCMix0aGlzLDEyLDMpKSx0aGlzLmI7Y2FzZSAxMzpyZXR1cm4gQmNiKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEUyLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wP3RydWU6ZmFsc2U7fXJldHVybiB1bGQodGhpcyxhLGIsYyl9O18uaGg9ZnVuY3Rpb24gZHBkKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSA5OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBjVWQoRjIsdGhpcyw5LDkpKSxTeGQodGhpcy5jLGEsYyk7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEUyLHRoaXMsMTAsMTEpKSxTeGQodGhpcy5hLGEsYyk7Y2FzZSAxMTohIXRoaXMuQ2ImJihjPShkPXRoaXMuRGI+PjE2LGQ+PTA/VW9kKHRoaXMsYyk6dGhpcy5DYi5paCh0aGlzLC0xLWQsbnVsbCxjKSkpO3JldHVybiBUb2QodGhpcyxCRChhLDMzKSxjKTtjYXNlIDEyOnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyBjVWQoQjIsdGhpcywxMiwzKSksU3hkKHRoaXMuYixhLGMpO31yZXR1cm4gdmxkKHRoaXMsYSxiLGMpfTtfLmpoPWZ1bmN0aW9uIGVwZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgOTpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgY1VkKEYyLHRoaXMsOSw5KSksVHhkKHRoaXMuYyxhLGMpO2Nhc2UgMTA6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChFMix0aGlzLDEwLDExKSksVHhkKHRoaXMuYSxhLGMpO2Nhc2UgMTE6cmV0dXJuIFRvZCh0aGlzLG51bGwsYyk7Y2FzZSAxMjpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgY1VkKEIyLHRoaXMsMTIsMykpLFR4ZCh0aGlzLmIsYSxjKTt9cmV0dXJuIHdsZCh0aGlzLGEsYixjKX07Xy5saD1mdW5jdGlvbiBmcGQoYSl7c3dpdGNoKGEpe2Nhc2UgOTpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTA6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDExOnJldHVybiAhIVhvZCh0aGlzKTtjYXNlIDEyOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSAxMzpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEUyLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wO31yZXR1cm4geGxkKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gZ3BkKGEsYil7c3dpdGNoKGEpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBjVWQoRjIsdGhpcyw5LDkpKTtVeGQodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyBjVWQoRjIsdGhpcyw5LDkpKTt5dGQodGhpcy5jLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBjVWQoRTIsdGhpcywxMCwxMSkpO1V4ZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChFMix0aGlzLDEwLDExKSk7eXRkKHRoaXMuYSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTE6JG9kKHRoaXMsQkQoYiwzMykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IGNVZChCMix0aGlzLDEyLDMpKTtVeGQodGhpcy5iKTshdGhpcy5iJiYodGhpcy5iPW5ldyBjVWQoQjIsdGhpcywxMiwzKSk7eXRkKHRoaXMuYixCRChiLDE0KSk7cmV0dXJuO315bGQodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIGhwZCgpe3JldHVybiBUaGQoKSxPaGR9O18uQmg9ZnVuY3Rpb24gaXBkKGEpe3N3aXRjaChhKXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgY1VkKEYyLHRoaXMsOSw5KSk7VXhkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKEUyLHRoaXMsMTAsMTEpKTtVeGQodGhpcy5hKTtyZXR1cm47Y2FzZSAxMTokb2QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBjVWQoQjIsdGhpcywxMiwzKSk7VXhkKHRoaXMuYik7cmV0dXJuO316bGQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBqcGQoKXtyZXR1cm4gX29kKHRoaXMpfTt2YXIgUTI9bWRiKHJ0ZSwnRWxrTm9kZUltcGwnLDIzOSk7YmNiKDE4Niw3MjUsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsMTE4OjEsNDcwOjEsMTg2OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHBwZCk7Xy5RZz1mdW5jdGlvbiBxcGQoYSl7cmV0dXJuIGxwZCh0aGlzLGEpfTtfLl9nPWZ1bmN0aW9uIHJwZChhLGIsYyl7aWYoYT09OSl7cmV0dXJuIG1wZCh0aGlzKX1yZXR1cm4gdWxkKHRoaXMsYSxiLGMpfTtfLmhoPWZ1bmN0aW9uIHNwZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGIpe2Nhc2UgOTohIXRoaXMuQ2ImJihjPShkPXRoaXMuRGI+PjE2LGQ+PTA/bHBkKHRoaXMsYyk6dGhpcy5DYi5paCh0aGlzLC0xLWQsbnVsbCxjKSkpO3JldHVybiBrcGQodGhpcyxCRChhLDMzKSxjKTt9cmV0dXJuIHZsZCh0aGlzLGEsYixjKX07Xy5qaD1mdW5jdGlvbiB0cGQoYSxiLGMpe2lmKGI9PTkpe3JldHVybiBrcGQodGhpcyxudWxsLGMpfXJldHVybiB3bGQodGhpcyxhLGIsYyl9O18ubGg9ZnVuY3Rpb24gdXBkKGEpe2lmKGE9PTkpe3JldHVybiAhIW1wZCh0aGlzKX1yZXR1cm4geGxkKHRoaXMsYSl9O18uc2g9ZnVuY3Rpb24gdnBkKGEsYil7c3dpdGNoKGEpe2Nhc2UgOTpucGQodGhpcyxCRChiLDMzKSk7cmV0dXJuO315bGQodGhpcyxhLGIpfTtfLnpoPWZ1bmN0aW9uIHdwZCgpe3JldHVybiBUaGQoKSxQaGR9O18uQmg9ZnVuY3Rpb24geHBkKGEpe3N3aXRjaChhKXtjYXNlIDk6bnBkKHRoaXMsbnVsbCk7cmV0dXJuO316bGQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiB5cGQoKXtyZXR1cm4gb3BkKHRoaXMpfTt2YXIgUjI9bWRiKHJ0ZSwnRWxrUG9ydEltcGwnLDE4Nik7dmFyIEo0PW9kYihUdGUsJ0Jhc2ljRU1hcC9FbnRyeScpO2JjYigxMDkyLDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LEJwZCk7Xy5GYj1mdW5jdGlvbiBIcGQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLmNkPWZ1bmN0aW9uIEpwZCgpe3JldHVybiB0aGlzLmJ9O18uSGI9ZnVuY3Rpb24gTHBkKCl7cmV0dXJuIEZDYih0aGlzKX07Xy5VaD1mdW5jdGlvbiBOcGQoYSl7enBkKHRoaXMsQkQoYSwxNDYpKX07Xy5fZz1mdW5jdGlvbiBDcGQoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuYzt9cmV0dXJuIGZpZCh0aGlzLGEsYixjKX07Xy5saD1mdW5jdGlvbiBEcGQoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGw7fXJldHVybiBtaWQodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBFcGQoYSxiKXtzd2l0Y2goYSl7Y2FzZSAwOnpwZCh0aGlzLEJEKGIsMTQ2KSk7cmV0dXJuO2Nhc2UgMTpBcGQodGhpcyxiKTtyZXR1cm47fXlpZCh0aGlzLGEsYil9O18uemg9ZnVuY3Rpb24gRnBkKCl7cmV0dXJuIFRoZCgpLFFoZH07Xy5CaD1mdW5jdGlvbiBHcGQoYSl7c3dpdGNoKGEpe2Nhc2UgMDp6cGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOkFwZCh0aGlzLG51bGwpO3JldHVybjt9Q2lkKHRoaXMsYSl9O18uU2g9ZnVuY3Rpb24gSXBkKCl7dmFyIGE7aWYodGhpcy5hPT0tMSl7YT10aGlzLmI7dGhpcy5hPSFhPzA6dGIoYSl9cmV0dXJuIHRoaXMuYX07Xy5kZD1mdW5jdGlvbiBLcGQoKXtyZXR1cm4gdGhpcy5jfTtfLlRoPWZ1bmN0aW9uIE1wZChhKXt0aGlzLmE9YX07Xy5lZD1mdW5jdGlvbiBPcGQoYSl7dmFyIGI7Yj10aGlzLmM7QXBkKHRoaXMsYSk7cmV0dXJuIGJ9O18uSWI9ZnVuY3Rpb24gUHBkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBFaWQodGhpcyk7YT1uZXcgVWZiO1FmYihRZmIoUWZiKGEsdGhpcy5iP3RoaXMuYi50ZygpOlhoZSksZ25lKSx4ZmIodGhpcy5jKSk7cmV0dXJuIGEuYX07Xy5hPS0xO18uYz1udWxsO3ZhciBTMj1tZGIocnRlLCdFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeUltcGwnLDEwOTIpO2JjYig5ODQsMSx7fSxicWQpO3ZhciBVMj1tZGIoV3RlLCdKc29uQWRhcHRlcicsOTg0KTtiY2IoMjEwLDYwLFRpZSxjcWQpO3ZhciBWMj1tZGIoV3RlLCdKc29uSW1wb3J0RXhjZXB0aW9uJywyMTApO2JjYig4NTcsMSx7fSxpcmQpO3ZhciBKMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXInLDg1Nyk7YmNiKDg5MSwxLHt9LGpyZCk7dmFyIFcyPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMCRUeXBlJyw4OTEpO2JjYig4OTIsMSx7fSxrcmQpO3ZhciBYMj1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDEkVHlwZScsODkyKTtiY2IoOTAwLDEse30sbHJkKTt2YXIgWTI9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxMCRUeXBlJyw5MDApO2JjYig5MDIsMSx7fSxtcmQpO3ZhciBaMj1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDExJFR5cGUnLDkwMik7YmNiKDkwMywxLHt9LG5yZCk7dmFyICQyPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTIkVHlwZScsOTAzKTtiY2IoOTA5LDEse30sb3JkKTt2YXIgXzI9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxMyRUeXBlJyw5MDkpO2JjYig5MDgsMSx7fSxwcmQpO3ZhciBhMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDE0JFR5cGUnLDkwOCk7YmNiKDkwNCwxLHt9LHFyZCk7dmFyIGIzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTUkVHlwZScsOTA0KTtiY2IoOTA1LDEse30scnJkKTt2YXIgYzM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxNiRUeXBlJyw5MDUpO2JjYig5MDYsMSx7fSxzcmQpO3ZhciBkMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDE3JFR5cGUnLDkwNik7YmNiKDkwNywxLHt9LHRyZCk7dmFyIGUzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTgkVHlwZScsOTA3KTtiY2IoOTEyLDEse30sdXJkKTt2YXIgZjM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxOSRUeXBlJyw5MTIpO2JjYig4OTMsMSx7fSx2cmQpO3ZhciBnMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDIkVHlwZScsODkzKTtiY2IoOTEwLDEse30sd3JkKTt2YXIgaDM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyMCRUeXBlJyw5MTApO2JjYig5MTEsMSx7fSx4cmQpO3ZhciBpMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDIxJFR5cGUnLDkxMSk7YmNiKDkxNSwxLHt9LHlyZCk7dmFyIGozPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMjIkVHlwZScsOTE1KTtiY2IoOTEzLDEse30senJkKTt2YXIgazM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyMyRUeXBlJyw5MTMpO2JjYig5MTQsMSx7fSxBcmQpO3ZhciBsMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDI0JFR5cGUnLDkxNCk7YmNiKDkxNywxLHt9LEJyZCk7dmFyIG0zPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMjUkVHlwZScsOTE3KTtiY2IoOTE2LDEse30sQ3JkKTt2YXIgbjM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyNiRUeXBlJyw5MTYpO2JjYig5MTgsMSxxaWUsRHJkKTtfLnRkPWZ1bmN0aW9uIEVyZChhKXtCcWQodGhpcy5iLHRoaXMuYSxHRChhKSl9O3ZhciBvMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDI3JFR5cGUnLDkxOCk7YmNiKDkxOSwxLHFpZSxGcmQpO18udGQ9ZnVuY3Rpb24gR3JkKGEpe0NxZCh0aGlzLmIsdGhpcy5hLEdEKGEpKX07dmFyIHAzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZScsOTE5KTtiY2IoOTIwLDEse30sSHJkKTt2YXIgcTM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlJyw5MjApO2JjYig4OTYsMSx7fSxJcmQpO3ZhciByMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZScsODk2KTtiY2IoOTIxLDEse30sSnJkKTt2YXIgczM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQzMCRUeXBlJyw5MjEpO2JjYig5MjIsMSx7fSxLcmQpO3ZhciB0Mz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUnLDkyMik7YmNiKDkyMywxLHt9LExyZCk7dmFyIHUzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMzIkVHlwZScsOTIzKTtiY2IoOTI0LDEse30sTXJkKTt2YXIgdjM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQzMyRUeXBlJyw5MjQpO2JjYig5MjUsMSx7fSxOcmQpO3ZhciB3Mz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUnLDkyNSk7YmNiKDg1OSwxLHt9LFByZCk7dmFyIHgzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMzUkVHlwZScsODU5KTtiY2IoOTI5LDEse30sUnJkKTt2YXIgeTM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQzNiRUeXBlJyw5MjkpO2JjYig5MjYsMSxxaWUsU3JkKTtfLnRkPWZ1bmN0aW9uIFRyZChhKXtMcWQodGhpcy5hLEJEKGEsNDY5KSl9O3ZhciB6Mz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM3JFR5cGUnLDkyNik7YmNiKDkyNywxLHFpZSxVcmQpO18udGQ9ZnVuY3Rpb24gVnJkKGEpe01xZCh0aGlzLmEsdGhpcy5iLEJEKGEsMjAyKSl9O3ZhciBBMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUnLDkyNyk7YmNiKDkyOCwxLHFpZSxXcmQpO18udGQ9ZnVuY3Rpb24gWHJkKGEpe05xZCh0aGlzLmEsdGhpcy5iLEJEKGEsMjAyKSl9O3ZhciBCMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUnLDkyOCk7YmNiKDg5NCwxLHt9LFlyZCk7dmFyIEMzPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlJyw4OTQpO2JjYig5MzAsMSxxaWUsWnJkKTtfLnRkPWZ1bmN0aW9uICRyZChhKXtPcWQodGhpcy5hLEJEKGEsOCkpfTt2YXIgRDM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlJyw5MzApO2JjYig4OTUsMSx7fSxfcmQpO3ZhciBFMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZScsODk1KTtiY2IoODk5LDEse30sYXNkKTt2YXIgRjM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ2JFR5cGUnLDg5OSk7YmNiKDg5NywxLHt9LGJzZCk7dmFyIEczPW1kYihXdGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkNyRUeXBlJyw4OTcpO2JjYig4OTgsMSx7fSxjc2QpO3ZhciBIMz1tZGIoV3RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDgkVHlwZScsODk4KTtiY2IoOTAxLDEse30sZHNkKTt2YXIgSTM9bWRiKFd0ZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUnLDkwMSk7YmNiKDk0OCwxLHFpZSxtc2QpO18udGQ9ZnVuY3Rpb24gbnNkKGEpe1FwZCh0aGlzLmEsbmV3IHlDKEdEKGEpKSl9O3ZhciBLMz1tZGIoV3RlLCdKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZScsOTQ4KTtiY2IoOTQ5LDEscWllLG9zZCk7Xy50ZD1mdW5jdGlvbiBwc2QoYSl7aXNkKHRoaXMuYSxCRChhLDIzNykpfTt2YXIgTDM9bWRiKFd0ZSwnSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUnLDk0OSk7YmNiKDk1MCwxLHFpZSxxc2QpO18udGQ9ZnVuY3Rpb24gcnNkKGEpe2pzZCh0aGlzLmEsQkQoYSwxNDkpKX07dmFyIE0zPW1kYihXdGUsJ0pzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlJyw5NTApO2JjYig5NTEsMSxxaWUsc3NkKTtfLnRkPWZ1bmN0aW9uIHRzZChhKXtrc2QodGhpcy5hLEJEKGEsMTc1KSl9O3ZhciBOMz1tZGIoV3RlLCdKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZScsOTUxKTtiY2IoMjM3LDIyLHszOjEsMzU6MSwyMjoxLDIzNzoxfSxEc2QpO3ZhciB1c2QsdnNkLHdzZCx4c2QseXNkLHpzZCxBc2QsQnNkO3ZhciBPMz1uZGIoSGxlLCdHcmFwaEZlYXR1cmUnLDIzNyxDSSxGc2QsRXNkKTt2YXIgR3NkO2JjYigxMywxLHszNToxLDE0NjoxfSxMc2QsTXNkLE5zZCxPc2QpO18ud2Q9ZnVuY3Rpb24gUHNkKGEpe3JldHVybiBJc2QodGhpcyxCRChhLDE0NikpfTtfLkZiPWZ1bmN0aW9uIFFzZChhKXtyZXR1cm4gSnNkKHRoaXMsYSl9O18ud2c9ZnVuY3Rpb24gUnNkKCl7cmV0dXJuIEtzZCh0aGlzKX07Xy50Zz1mdW5jdGlvbiBTc2QoKXtyZXR1cm4gdGhpcy5ifTtfLkhiPWZ1bmN0aW9uIFRzZCgpe3JldHVybiBMQ2IodGhpcy5iKX07Xy5JYj1mdW5jdGlvbiBVc2QoKXtyZXR1cm4gdGhpcy5ifTt2YXIgVDM9bWRiKEhsZSwnUHJvcGVydHknLDEzKTtiY2IoODE4LDEsRGtlLFdzZCk7Xy51ZT1mdW5jdGlvbiBYc2QoYSxiKXtyZXR1cm4gVnNkKHRoaXMsQkQoYSw5NCksQkQoYiw5NCkpfTtfLkZiPWZ1bmN0aW9uIFlzZChhKXtyZXR1cm4gdGhpcz09PWF9O18udmU9ZnVuY3Rpb24gWnNkKCl7cmV0dXJuIG5ldyB0cGIodGhpcyl9O3ZhciBTMz1tZGIoSGxlLCdQcm9wZXJ0eUhvbGRlckNvbXBhcmF0b3InLDgxOCk7YmNiKDY5NSwxLGFpZSxxdGQpO18uTmI9ZnVuY3Rpb24gcnRkKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIHR0ZCgpe3JldHVybiBwdGQodGhpcyl9O18uUWI9ZnVuY3Rpb24gdXRkKCl7U3JiKCl9O18uT2I9ZnVuY3Rpb24gc3RkKCl7cmV0dXJuICEhdGhpcy5hfTt2YXIgVTM9bWRiKGp1ZSwnRWxrR3JhcGhVdGlsL0FuY2VzdG9ySXRlcmF0b3InLDY5NSk7dmFyIFQ0PW9kYihUdGUsJ0VMaXN0Jyk7YmNiKDY3LDUyLHsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNjc6MSw1ODoxfSk7Xy5WYz1mdW5jdGlvbiBKdGQoYSxiKXt2dGQodGhpcyxhLGIpfTtfLkZjPWZ1bmN0aW9uIEt0ZChhKXtyZXR1cm4gd3RkKHRoaXMsYSl9O18uV2M9ZnVuY3Rpb24gTHRkKGEsYil7cmV0dXJuIHh0ZCh0aGlzLGEsYil9O18uR2M9ZnVuY3Rpb24gTXRkKGEpe3JldHVybiB5dGQodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBOdGQoKXtyZXR1cm4gbmV3ICR5ZCh0aGlzKX07Xy4kaD1mdW5jdGlvbiBPdGQoKXtyZXR1cm4gbmV3IGJ6ZCh0aGlzKX07Xy5faD1mdW5jdGlvbiBQdGQoYSl7cmV0dXJuIHp0ZCh0aGlzLGEpfTtfLmFpPWZ1bmN0aW9uIFF0ZCgpe3JldHVybiB0cnVlfTtfLmJpPWZ1bmN0aW9uIFJ0ZChhLGIpe307Xy5jaT1mdW5jdGlvbiBTdGQoKXt9O18uZGk9ZnVuY3Rpb24gVHRkKGEsYil7QXRkKHRoaXMsYSxiKX07Xy5laT1mdW5jdGlvbiBVdGQoYSxiLGMpe307Xy5maT1mdW5jdGlvbiBWdGQoYSxiKXt9O18uZ2k9ZnVuY3Rpb24gV3RkKGEsYixjKXt9O18uRmI9ZnVuY3Rpb24gWHRkKGEpe3JldHVybiBCdGQodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBZdGQoKXtyZXR1cm4gRXRkKHRoaXMpfTtfLmhpPWZ1bmN0aW9uIFp0ZCgpe3JldHVybiBmYWxzZX07Xy5LYz1mdW5jdGlvbiAkdGQoKXtyZXR1cm4gbmV3IEZ5ZCh0aGlzKX07Xy5ZYz1mdW5jdGlvbiBfdGQoKXtyZXR1cm4gbmV3IE95ZCh0aGlzKX07Xy5aYz1mdW5jdGlvbiBhdWQoYSl7dmFyIGI7Yj10aGlzLmdjKCk7aWYoYTwwfHxhPmIpdGhyb3cgdmJiKG5ldyBDeWQoYSxiKSk7cmV0dXJuIG5ldyBQeWQodGhpcyxhKX07Xy5qaT1mdW5jdGlvbiBidWQoYSxiKXt0aGlzLmlpKGEsdGhpcy5YYyhiKSl9O18uTWM9ZnVuY3Rpb24gY3VkKGEpe3JldHVybiBGdGQodGhpcyxhKX07Xy5saT1mdW5jdGlvbiBkdWQoYSxiKXtyZXR1cm4gYn07Xy5fYz1mdW5jdGlvbiBldWQoYSxiKXtyZXR1cm4gR3RkKHRoaXMsYSxiKX07Xy5JYj1mdW5jdGlvbiBmdWQoKXtyZXR1cm4gSHRkKHRoaXMpfTtfLm5pPWZ1bmN0aW9uIGd1ZCgpe3JldHVybiB0cnVlfTtfLm9pPWZ1bmN0aW9uIGh1ZChhLGIpe3JldHVybiBJdGQodGhpcyxiKX07dmFyIHA0PW1kYihUdGUsJ0Fic3RyYWN0RUxpc3QnLDY3KTtiY2IoNjMsNjcsb3VlLHl1ZCx6dWQsQXVkKTtfLlZoPWZ1bmN0aW9uIEJ1ZChhLGIpe3JldHVybiBpdWQodGhpcyxhLGIpfTtfLldoPWZ1bmN0aW9uIEN1ZChhKXtyZXR1cm4ganVkKHRoaXMsYSl9O18uWGg9ZnVuY3Rpb24gRHVkKGEsYil7a3VkKHRoaXMsYSxiKX07Xy5ZaD1mdW5jdGlvbiBFdWQoYSl7bHVkKHRoaXMsYSl9O18ucGk9ZnVuY3Rpb24gRnVkKGEpe3JldHVybiBudWQodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBHdWQoKXtvdWQodGhpcyl9O18uSGM9ZnVuY3Rpb24gSHVkKGEpe3JldHVybiBwdWQodGhpcyxhKX07Xy5YYj1mdW5jdGlvbiBJdWQoYSl7cmV0dXJuIHF1ZCh0aGlzLGEpfTtfLnFpPWZ1bmN0aW9uIEp1ZChhKXt2YXIgYixjLGQ7Kyt0aGlzLmo7Yz10aGlzLmc9PW51bGw/MDp0aGlzLmcubGVuZ3RoO2lmKGE+Yyl7ZD10aGlzLmc7Yj1jKyhjLzJ8MCkrNDtiPGEmJihiPWEpO3RoaXMuZz10aGlzLnJpKGIpO2QhPW51bGwmJiRmYihkLDAsdGhpcy5nLDAsdGhpcy5pKX19O18uWGM9ZnVuY3Rpb24gS3VkKGEpe3JldHVybiBydWQodGhpcyxhKX07Xy5kYz1mdW5jdGlvbiBMdWQoKXtyZXR1cm4gdGhpcy5pPT0wfTtfLmlpPWZ1bmN0aW9uIE11ZChhLGIpe3JldHVybiBzdWQodGhpcyxhLGIpfTtfLnJpPWZ1bmN0aW9uIE51ZChhKXtyZXR1cm4gS0MoU0ksVWhlLDEsYSw1LDEpfTtfLmtpPWZ1bmN0aW9uIE91ZChhKXtyZXR1cm4gdGhpcy5nW2FdfTtfLiRjPWZ1bmN0aW9uIFB1ZChhKXtyZXR1cm4gdHVkKHRoaXMsYSl9O18ubWk9ZnVuY3Rpb24gUXVkKGEsYil7cmV0dXJuIHV1ZCh0aGlzLGEsYil9O18uZ2M9ZnVuY3Rpb24gUnVkKCl7cmV0dXJuIHRoaXMuaX07Xy5QYz1mdW5jdGlvbiBTdWQoKXtyZXR1cm4gd3VkKHRoaXMpfTtfLlFjPWZ1bmN0aW9uIFR1ZChhKXtyZXR1cm4geHVkKHRoaXMsYSl9O18uaT0wO3ZhciB5ND1tZGIoVHRlLCdCYXNpY0VMaXN0Jyw2Myk7dmFyIFg0PW9kYihUdGUsJ1RyZWVJdGVyYXRvcicpO2JjYig2OTQsNjMscHVlKTtfLk5iPWZ1bmN0aW9uIFh1ZChhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBZdWQoKXtyZXR1cm4gdGhpcy5nPT1udWxsJiYhdGhpcy5jP1V1ZCh0aGlzKTp0aGlzLmc9PW51bGx8fHRoaXMuaSE9MCYmQkQodGhpcy5nW3RoaXMuaS0xXSw0NykuT2IoKX07Xy5QYj1mdW5jdGlvbiBadWQoKXtyZXR1cm4gVnVkKHRoaXMpfTtfLlFiPWZ1bmN0aW9uICR1ZCgpe2lmKCF0aGlzLmUpe3Rocm93IHZiYihuZXcgWmRiKCdUaGVyZSBpcyBubyB2YWxpZCBvYmplY3QgdG8gcmVtb3ZlLicpKX10aGlzLmUuUWIoKX07Xy5jPWZhbHNlO3ZhciBxND1tZGIoVHRlLCdBYnN0cmFjdFRyZWVJdGVyYXRvcicsNjk0KTtiY2IoNjg1LDY5NCxwdWUsX3VkKTtfLnNpPWZ1bmN0aW9uIGF2ZChhKXt2YXIgYjtiPUJEKGEsNTYpLldnKCkuS2MoKTtKRChiLDI3OSkmJkJEKGIsMjc5KS5OayhuZXcgYnZkKTtyZXR1cm4gYn07dmFyIFczPW1kYihqdWUsJ0Vsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3InLDY4NSk7YmNiKDk1MiwxLHt9LGJ2ZCk7dmFyIFYzPW1kYihqdWUsJ0Vsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMScsOTUyKTt2YXIgY3ZkLGR2ZDt2YXIgWTM9bWRiKGp1ZSwnRWxrUmVmbGVjdCcsbnVsbCk7YmNiKDg4OSwxLGhzZSxqdmQpO18udmc9ZnVuY3Rpb24ga3ZkKGEpe3JldHVybiBldmQoKSxzcWIoQkQoYSwxNzQpKX07dmFyIFgzPW1kYihqdWUsJ0Vsa1JlZmxlY3QvbGFtYmRhJDAkVHlwZScsODg5KTt2YXIgbHZkO3ZhciBXND1vZGIoVHRlLCdSZXNvdXJjZUxvY2F0b3InKTtiY2IoMTA1MSwxLHt9KTt2YXIgTjQ9bWRiKFR0ZSwnRGVsZWdhdGluZ1Jlc291cmNlTG9jYXRvcicsMTA1MSk7YmNiKDEwNTIsMTA1MSx7fSk7dmFyIFozPW1kYignb3JnLmVjbGlwc2UuZW1mLmNvbW1vbicsJ0VNRlBsdWdpbicsMTA1Mik7dmFyICQzPW9kYihjdmUsJ0FkYXB0ZXInKTt2YXIgXzM9b2RiKGN2ZSwnTm90aWZpY2F0aW9uJyk7YmNiKDExNTMsMSxkdmUpO18udGk9ZnVuY3Rpb24gdnZkKCl7cmV0dXJuIHRoaXMuZH07Xy51aT1mdW5jdGlvbiB3dmQoYSl7fTtfLnZpPWZ1bmN0aW9uIHh2ZChhKXt0aGlzLmQ9YX07Xy53aT1mdW5jdGlvbiB5dmQoYSl7dGhpcy5kPT1hJiYodGhpcy5kPW51bGwpfTtfLmQ9bnVsbDt2YXIgYTQ9bWRiKGh0ZSwnQWRhcHRlckltcGwnLDExNTMpO2JjYigxOTk1LDY3LGV2ZSk7Xy5WaD1mdW5jdGlvbiBGdmQoYSxiKXtyZXR1cm4genZkKHRoaXMsYSxiKX07Xy5XaD1mdW5jdGlvbiBHdmQoYSl7dmFyIGIsYyxkOysrdGhpcy5qO2lmKGEuZGMoKSl7cmV0dXJuIGZhbHNlfWVsc2V7Yj10aGlzLlZpKCk7Zm9yKGQ9YS5LYygpO2QuT2IoKTspe2M9ZC5QYigpO3RoaXMuSWkodGhpcy5vaShiLGMpKTsrK2J9cmV0dXJuIHRydWV9fTtfLlhoPWZ1bmN0aW9uIEh2ZChhLGIpe0F2ZCh0aGlzLGEsYil9O18uWWg9ZnVuY3Rpb24gSXZkKGEpe0J2ZCh0aGlzLGEpfTtfLkdpPWZ1bmN0aW9uIEp2ZCgpe3JldHVybiB0aGlzLkppKCl9O18uJGI9ZnVuY3Rpb24gS3ZkKCl7Q3ZkKHRoaXMsdGhpcy5WaSgpLHRoaXMuV2koKSl9O18uSGM9ZnVuY3Rpb24gTHZkKGEpe3JldHVybiB0aGlzLkxpKGEpfTtfLkljPWZ1bmN0aW9uIE12ZChhKXtyZXR1cm4gdGhpcy5NaShhKX07Xy5IaT1mdW5jdGlvbiBOdmQoYSxiKXt0aGlzLlNpKCkuam0oKX07Xy5JaT1mdW5jdGlvbiBPdmQoYSl7dGhpcy5TaSgpLmptKCl9O18uSmk9ZnVuY3Rpb24gUHZkKCl7cmV0dXJuIHRoaXMuU2koKX07Xy5LaT1mdW5jdGlvbiBRdmQoKXt0aGlzLlNpKCkuam0oKX07Xy5MaT1mdW5jdGlvbiBSdmQoYSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLk1pPWZ1bmN0aW9uIFN2ZChhKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9O18uTmk9ZnVuY3Rpb24gVHZkKGEpe3JldHVybiB0aGlzLlNpKCkuam0oKX07Xy5PaT1mdW5jdGlvbiBVdmQoYSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLlBpPWZ1bmN0aW9uIFZ2ZCgpe3JldHVybiB0aGlzLlNpKCkuam0oKX07Xy5RaT1mdW5jdGlvbiBXdmQoYSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLlJpPWZ1bmN0aW9uIFh2ZCgpe3JldHVybiB0aGlzLlNpKCkuam0oKX07Xy5UaT1mdW5jdGlvbiBZdmQoYSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLlVpPWZ1bmN0aW9uIFp2ZChhLGIpe3JldHVybiB0aGlzLlNpKCkuam0oKX07Xy5WaT1mdW5jdGlvbiAkdmQoKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9O18uV2k9ZnVuY3Rpb24gX3ZkKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLlhpPWZ1bmN0aW9uIGF3ZChhKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9O18uWWk9ZnVuY3Rpb24gYndkKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfTtfLkZiPWZ1bmN0aW9uIGN3ZChhKXtyZXR1cm4gdGhpcy5OaShhKX07Xy5YYj1mdW5jdGlvbiBkd2QoYSl7cmV0dXJuIHRoaXMubGkoYSx0aGlzLk9pKGEpKX07Xy5IYj1mdW5jdGlvbiBld2QoKXtyZXR1cm4gdGhpcy5QaSgpfTtfLlhjPWZ1bmN0aW9uIGZ3ZChhKXtyZXR1cm4gdGhpcy5RaShhKX07Xy5kYz1mdW5jdGlvbiBnd2QoKXtyZXR1cm4gdGhpcy5SaSgpfTtfLmlpPWZ1bmN0aW9uIGh3ZChhLGIpe3JldHVybiBEdmQodGhpcyxhLGIpfTtfLmtpPWZ1bmN0aW9uIGl3ZChhKXtyZXR1cm4gdGhpcy5PaShhKX07Xy4kYz1mdW5jdGlvbiBqd2QoYSl7cmV0dXJuIEV2ZCh0aGlzLGEpfTtfLk1jPWZ1bmN0aW9uIGt3ZChhKXt2YXIgYjtiPXRoaXMuWGMoYSk7aWYoYj49MCl7dGhpcy4kYyhiKTtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O18ubWk9ZnVuY3Rpb24gbHdkKGEsYil7cmV0dXJuIHRoaXMuVWkoYSx0aGlzLm9pKGEsYikpfTtfLmdjPWZ1bmN0aW9uIG13ZCgpe3JldHVybiB0aGlzLlZpKCl9O18uUGM9ZnVuY3Rpb24gbndkKCl7cmV0dXJuIHRoaXMuV2koKX07Xy5RYz1mdW5jdGlvbiBvd2QoYSl7cmV0dXJuIHRoaXMuWGkoYSl9O18uSWI9ZnVuY3Rpb24gcHdkKCl7cmV0dXJuIHRoaXMuWWkoKX07dmFyIE00PW1kYihUdGUsJ0RlbGVnYXRpbmdFTGlzdCcsMTk5NSk7YmNiKDE5OTYsMTk5NSxldmUpO18uVmg9ZnVuY3Rpb24geHdkKGEsYil7cmV0dXJuIHF3ZCh0aGlzLGEsYil9O18uV2g9ZnVuY3Rpb24geXdkKGEpe3JldHVybiB0aGlzLlZoKHRoaXMuVmkoKSxhKX07Xy5YaD1mdW5jdGlvbiB6d2QoYSxiKXtyd2QodGhpcyxhLGIpfTtfLlloPWZ1bmN0aW9uIEF3ZChhKXtzd2QodGhpcyxhKX07Xy5haT1mdW5jdGlvbiBCd2QoKXtyZXR1cm4gIXRoaXMuYmooKX07Xy4kYj1mdW5jdGlvbiBDd2QoKXt2d2QodGhpcyl9O18uWmk9ZnVuY3Rpb24gRHdkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBDeGQodGhpcyxhLGIsYyxkLGUpfTtfLiRpPWZ1bmN0aW9uIEV3ZChhKXtVaGQodGhpcy5BaSgpLGEpfTtfLl9pPWZ1bmN0aW9uIEZ3ZCgpe3JldHVybiBudWxsfTtfLmFqPWZ1bmN0aW9uIEd3ZCgpe3JldHVybiAtMX07Xy5BaT1mdW5jdGlvbiBId2QoKXtyZXR1cm4gbnVsbH07Xy5iaj1mdW5jdGlvbiBJd2QoKXtyZXR1cm4gZmFsc2V9O18uY2o9ZnVuY3Rpb24gSndkKGEsYil7cmV0dXJuIGJ9O18uZGo9ZnVuY3Rpb24gS3dkKGEsYil7cmV0dXJuIGJ9O18uZWo9ZnVuY3Rpb24gTHdkKCl7cmV0dXJuIGZhbHNlfTtfLmZqPWZ1bmN0aW9uIE13ZCgpe3JldHVybiAhdGhpcy5SaSgpfTtfLmlpPWZ1bmN0aW9uIE53ZChhLGIpe3ZhciBjLGQ7aWYodGhpcy5laigpKXtkPXRoaXMuZmooKTtjPUR2ZCh0aGlzLGEsYik7dGhpcy4kaSh0aGlzLlppKDcsbWViKGIpLGMsYSxkKSk7cmV0dXJuIGN9ZWxzZXtyZXR1cm4gRHZkKHRoaXMsYSxiKX19O18uJGM9ZnVuY3Rpb24gT3dkKGEpe3ZhciBiLGMsZCxlO2lmKHRoaXMuZWooKSl7Yz1udWxsO2Q9dGhpcy5maigpO2I9dGhpcy5aaSg0LGU9RXZkKHRoaXMsYSksbnVsbCxhLGQpO2lmKHRoaXMuYmooKSYmISFlKXtjPXRoaXMuZGooZSxjKTtpZighYyl7dGhpcy4kaShiKX1lbHNle2MuRWkoYik7Yy5GaSgpfX1lbHNle2lmKCFjKXt0aGlzLiRpKGIpfWVsc2V7Yy5FaShiKTtjLkZpKCl9fXJldHVybiBlfWVsc2V7ZT1FdmQodGhpcyxhKTtpZih0aGlzLmJqKCkmJiEhZSl7Yz10aGlzLmRqKGUsbnVsbCk7ISFjJiZjLkZpKCl9cmV0dXJuIGV9fTtfLm1pPWZ1bmN0aW9uIFB3ZChhLGIpe3JldHVybiB3d2QodGhpcyxhLGIpfTt2YXIgZDQ9bWRiKGh0ZSwnRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsJywxOTk2KTtiY2IoMTQzLDEsZnZlKTtfLkVpPWZ1bmN0aW9uIHB4ZChhKXtyZXR1cm4gUXdkKHRoaXMsYSl9O18uRmk9ZnVuY3Rpb24gcXhkKCl7UndkKHRoaXMpfTtfLnhpPWZ1bmN0aW9uIHJ4ZCgpe3JldHVybiB0aGlzLmR9O18uX2k9ZnVuY3Rpb24gc3hkKCl7cmV0dXJuIG51bGx9O18uZ2o9ZnVuY3Rpb24gdHhkKCl7cmV0dXJuIG51bGx9O18ueWk9ZnVuY3Rpb24gdXhkKGEpe3JldHVybiAtMX07Xy56aT1mdW5jdGlvbiB2eGQoKXtyZXR1cm4gJHdkKHRoaXMpfTtfLkFpPWZ1bmN0aW9uIHd4ZCgpe3JldHVybiBudWxsfTtfLkJpPWZ1bmN0aW9uIHh4ZCgpe3JldHVybiBoeGQodGhpcyl9O18uQ2k9ZnVuY3Rpb24geXhkKCl7cmV0dXJuIHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm99O18uaGo9ZnVuY3Rpb24genhkKCl7cmV0dXJuIGZhbHNlfTtfLkRpPWZ1bmN0aW9uIEF4ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTpjYXNlIDI6e2U9YS54aSgpO3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOntmPWEuQWkoKTtpZihQRChmKT09PVBEKHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWEueWkobnVsbCkpe3RoaXMuZz1hLnppKCk7YS54aSgpPT0xJiYodGhpcy5kPTEpO3JldHVybiB0cnVlfX19fWNhc2UgNDp7ZT1hLnhpKCk7c3dpdGNoKGUpe2Nhc2UgNDp7Zj1hLkFpKCk7aWYoUEQoZik9PT1QRCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1hLnlpKG51bGwpKXtqPWp4ZCh0aGlzKTtpPXRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm87Zz1hLkNpKCk7dGhpcy5kPTY7bD1uZXcgenVkKDIpO2lmKGk8PWcpe3d0ZChsLHRoaXMubik7d3RkKGwsYS5CaSgpKTt0aGlzLmc9T0MoR0MoV0QsMSksb2plLDI1LDE1LFt0aGlzLm89aSxnKzFdKX1lbHNle3d0ZChsLGEuQmkoKSk7d3RkKGwsdGhpcy5uKTt0aGlzLmc9T0MoR0MoV0QsMSksb2plLDI1LDE1LFt0aGlzLm89ZyxpXSl9dGhpcy5uPWw7anx8KHRoaXMubz0tMi10aGlzLm8tMSk7cmV0dXJuIHRydWV9YnJlYWt9fWJyZWFrfWNhc2UgNjp7ZT1hLnhpKCk7c3dpdGNoKGUpe2Nhc2UgNDp7Zj1hLkFpKCk7aWYoUEQoZik9PT1QRCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1hLnlpKG51bGwpKXtqPWp4ZCh0aGlzKTtnPWEuQ2koKTtrPUJEKHRoaXMuZyw0OCk7ZD1LQyhXRCxvamUsMjUsay5sZW5ndGgrMSwxNSwxKTtiPTA7d2hpbGUoYjxrLmxlbmd0aCl7aD1rW2JdO2lmKGg8PWcpe2RbYisrXT1oOysrZ31lbHNle2JyZWFrfX1jPUJEKHRoaXMubiwxNSk7Yy5WYyhiLGEuQmkoKSk7ZFtiXT1nO3doaWxlKCsrYjxkLmxlbmd0aCl7ZFtiXT1rW2ItMV19dGhpcy5nPWQ7anx8KHRoaXMubz0tMi1kWzBdKTtyZXR1cm4gdHJ1ZX1icmVha319YnJlYWt9fXJldHVybiBmYWxzZX07Xy5JYj1mdW5jdGlvbiBCeGQoKXt2YXIgYSxiLGMsZDtkPW5ldyBKZmIoaGRiKHRoaXMuZ20pKydAJysoYj10Yih0aGlzKT4+PjAsYi50b1N0cmluZygxNikpKTtkLmErPScgKGV2ZW50VHlwZTogJztzd2l0Y2godGhpcy5kKXtjYXNlIDE6e2QuYSs9J1NFVCc7YnJlYWt9Y2FzZSAyOntkLmErPSdVTlNFVCc7YnJlYWt9Y2FzZSAzOntkLmErPSdBREQnO2JyZWFrfWNhc2UgNTp7ZC5hKz0nQUREX01BTlknO2JyZWFrfWNhc2UgNDp7ZC5hKz0nUkVNT1ZFJzticmVha31jYXNlIDY6e2QuYSs9J1JFTU9WRV9NQU5ZJzticmVha31jYXNlIDc6e2QuYSs9J01PVkUnO2JyZWFrfWNhc2UgODp7ZC5hKz0nUkVNT1ZJTkdfQURBUFRFUic7YnJlYWt9Y2FzZSA5OntkLmErPSdSRVNPTFZFJzticmVha31kZWZhdWx0OntDZmIoZCx0aGlzLmQpO2JyZWFrfX1peGQodGhpcykmJihkLmErPScsIHRvdWNoOiB0cnVlJyxkKTtkLmErPScsIHBvc2l0aW9uOiAnO0NmYihkLHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm8pO2QuYSs9Jywgbm90aWZpZXI6ICc7RGZiKGQsdGhpcy5BaSgpKTtkLmErPScsIGZlYXR1cmU6ICc7RGZiKGQsdGhpcy5faSgpKTtkLmErPScsIG9sZFZhbHVlOiAnO0RmYihkLGh4ZCh0aGlzKSk7ZC5hKz0nLCBuZXdWYWx1ZTogJztpZih0aGlzLmQ9PTYmJkpEKHRoaXMuZyw0OCkpe2M9QkQodGhpcy5nLDQ4KTtkLmErPSdbJztmb3IoYT0wO2E8Yy5sZW5ndGg7KXtkLmErPWNbYV07KythPGMubGVuZ3RoJiYoZC5hKz1TaGUsZCl9ZC5hKz0nXSd9ZWxzZXtEZmIoZCwkd2QodGhpcykpfWQuYSs9JywgaXNUb3VjaDogJztGZmIoZCxpeGQodGhpcykpO2QuYSs9Jywgd2FzU2V0OiAnO0ZmYihkLGp4ZCh0aGlzKSk7ZC5hKz0nKSc7cmV0dXJuIGQuYX07Xy5kPTA7Xy5lPTA7Xy5mPTA7Xy5qPTA7Xy5rPTA7Xy5vPTA7Xy5wPTA7dmFyIGY0PW1kYihodGUsJ05vdGlmaWNhdGlvbkltcGwnLDE0Myk7YmNiKDExNjcsMTQzLGZ2ZSxDeGQpO18uX2k9ZnVuY3Rpb24gRHhkKCl7cmV0dXJuIHRoaXMuYS5faSgpfTtfLnlpPWZ1bmN0aW9uIEV4ZChhKXtyZXR1cm4gdGhpcy5hLmFqKCl9O18uQWk9ZnVuY3Rpb24gRnhkKCl7cmV0dXJuIHRoaXMuYS5BaSgpfTt2YXIgYzQ9bWRiKGh0ZSwnRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEnLDExNjcpO2JjYigyNDIsNjMsb3VlLEh4ZCxJeGQpO18uRmM9ZnVuY3Rpb24gSnhkKGEpe3JldHVybiBHeGQodGhpcyxCRChhLDM2NikpfTtfLkVpPWZ1bmN0aW9uIEt4ZChhKXtyZXR1cm4gR3hkKHRoaXMsYSl9O18uRmk9ZnVuY3Rpb24gTHhkKCl7dmFyIGEsYixjO2ZvcihhPTA7YTx0aGlzLmk7KythKXtiPUJEKHRoaXMuZ1thXSwzNjYpO2M9Yi5BaSgpO2MhPW51bGwmJmIueGkoKSE9LTEmJkJEKGMsOTIpLk5nKGIpfX07Xy5yaT1mdW5jdGlvbiBNeGQoYSl7cmV0dXJuIEtDKF8zLFVoZSwzNjYsYSwwLDEpfTt2YXIgZTQ9bWRiKGh0ZSwnTm90aWZpY2F0aW9uQ2hhaW5JbXBsJywyNDIpO2JjYigxMzc4LDkwLGd0ZSk7Xy5LZz1mdW5jdGlvbiBOeGQoKXtyZXR1cm4gdGhpcy5lfTtfLk1nPWZ1bmN0aW9uIE94ZCgpe3JldHVybiAodGhpcy5mJjEpIT0wfTtfLmY9MTt2YXIgZzQ9bWRiKGh0ZSwnTm90aWZpZXJJbXBsJywxMzc4KTtiY2IoMTk5Myw2MyxvdWUpO18uVmg9ZnVuY3Rpb24gJHhkKGEsYil7cmV0dXJuIFB4ZCh0aGlzLGEsYil9O18uV2g9ZnVuY3Rpb24gX3hkKGEpe3JldHVybiB0aGlzLlZoKHRoaXMuaSxhKX07Xy5YaD1mdW5jdGlvbiBheWQoYSxiKXtReGQodGhpcyxhLGIpfTtfLlloPWZ1bmN0aW9uIGJ5ZChhKXtSeGQodGhpcyxhKX07Xy5haT1mdW5jdGlvbiBjeWQoKXtyZXR1cm4gIXRoaXMuYmooKX07Xy4kYj1mdW5jdGlvbiBkeWQoKXtVeGQodGhpcyl9O18uWmk9ZnVuY3Rpb24gZXlkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyB2eWQodGhpcyxhLGIsYyxkLGUpfTtfLiRpPWZ1bmN0aW9uIGZ5ZChhKXtVaGQodGhpcy5BaSgpLGEpfTtfLl9pPWZ1bmN0aW9uIGd5ZCgpe3JldHVybiBudWxsfTtfLmFqPWZ1bmN0aW9uIGh5ZCgpe3JldHVybiAtMX07Xy5BaT1mdW5jdGlvbiBpeWQoKXtyZXR1cm4gbnVsbH07Xy5iaj1mdW5jdGlvbiBqeWQoKXtyZXR1cm4gZmFsc2V9O18uaWo9ZnVuY3Rpb24ga3lkKCl7cmV0dXJuIGZhbHNlfTtfLmNqPWZ1bmN0aW9uIGx5ZChhLGIpe3JldHVybiBifTtfLmRqPWZ1bmN0aW9uIG15ZChhLGIpe3JldHVybiBifTtfLmVqPWZ1bmN0aW9uIG55ZCgpe3JldHVybiBmYWxzZX07Xy5maj1mdW5jdGlvbiBveWQoKXtyZXR1cm4gdGhpcy5pIT0wfTtfLmlpPWZ1bmN0aW9uIHB5ZChhLGIpe3JldHVybiBXeGQodGhpcyxhLGIpfTtfLiRjPWZ1bmN0aW9uIHF5ZChhKXtyZXR1cm4gWHhkKHRoaXMsYSl9O18ubWk9ZnVuY3Rpb24gcnlkKGEsYil7cmV0dXJuIFp4ZCh0aGlzLGEsYil9O18uamo9ZnVuY3Rpb24gc3lkKGEsYil7cmV0dXJuIGJ9O18ua2o9ZnVuY3Rpb24gdHlkKGEsYil7cmV0dXJuIGJ9O18ubGo9ZnVuY3Rpb24gdXlkKGEsYixjKXtyZXR1cm4gY307dmFyIGk0PW1kYihodGUsJ05vdGlmeWluZ0xpc3RJbXBsJywxOTkzKTtiY2IoMTE2NiwxNDMsZnZlLHZ5ZCk7Xy5faT1mdW5jdGlvbiB3eWQoKXtyZXR1cm4gdGhpcy5hLl9pKCl9O18ueWk9ZnVuY3Rpb24geHlkKGEpe3JldHVybiB0aGlzLmEuYWooKX07Xy5BaT1mdW5jdGlvbiB5eWQoKXtyZXR1cm4gdGhpcy5hLkFpKCl9O3ZhciBoND1tZGIoaHRlLCdOb3RpZnlpbmdMaXN0SW1wbC8xJywxMTY2KTtiY2IoOTUzLDYzLG91ZSx6eWQpO18uSGM9ZnVuY3Rpb24gQXlkKGEpe2lmKHRoaXMuaT4xMCl7aWYoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSl7dGhpcy5iPW5ldyBWcWIodGhpcyk7dGhpcy5hPXRoaXMuan1yZXR1cm4gUnFiKHRoaXMuYixhKX1lbHNle3JldHVybiBwdWQodGhpcyxhKX19O18ubmk9ZnVuY3Rpb24gQnlkKCl7cmV0dXJuIHRydWV9O18uYT0wO3ZhciBqND1tZGIoVHRlLCdBYnN0cmFjdEVMaXN0LzEnLDk1Myk7YmNiKDI5NSw3MyxNamUsQ3lkKTt2YXIgazQ9bWRiKFR0ZSwnQWJzdHJhY3RFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24nLDI5NSk7YmNiKDQwLDEsYWllLEZ5ZCk7Xy5OYj1mdW5jdGlvbiBJeWQoYSl7UnJiKHRoaXMsYSl9O18ubWo9ZnVuY3Rpb24gR3lkKCl7aWYodGhpcy5pLmohPXRoaXMuZil7dGhyb3cgdmJiKG5ldyBBcGIpfX07Xy5uaj1mdW5jdGlvbiBIeWQoKXtyZXR1cm4gRHlkKHRoaXMpfTtfLk9iPWZ1bmN0aW9uIEp5ZCgpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfTtfLlBiPWZ1bmN0aW9uIEt5ZCgpe3JldHVybiB0aGlzLm5qKCl9O18uUWI9ZnVuY3Rpb24gTHlkKCl7RXlkKHRoaXMpfTtfLmU9MDtfLmY9MDtfLmc9LTE7dmFyIGw0PW1kYihUdGUsJ0Fic3RyYWN0RUxpc3QvRUl0ZXJhdG9yJyw0MCk7YmNiKDI3OCw0MCxqaWUsT3lkLFB5ZCk7Xy5RYj1mdW5jdGlvbiBYeWQoKXtFeWQodGhpcyl9O18uUmI9ZnVuY3Rpb24gUXlkKGEpe015ZCh0aGlzLGEpfTtfLm9qPWZ1bmN0aW9uIFJ5ZCgpe3ZhciBiO3RyeXtiPXRoaXMuZC5YYigtLXRoaXMuZSk7dGhpcy5taigpO3RoaXMuZz10aGlzLmU7cmV0dXJuIGJ9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3Mykpe3RoaXMubWooKTt0aHJvdyB2YmIobmV3IHV0Yil9ZWxzZSB0aHJvdyB2YmIoYSl9fTtfLnBqPWZ1bmN0aW9uIFN5ZChhKXtOeWQodGhpcyxhKX07Xy5TYj1mdW5jdGlvbiBUeWQoKXtyZXR1cm4gdGhpcy5lIT0wfTtfLlRiPWZ1bmN0aW9uIFV5ZCgpe3JldHVybiB0aGlzLmV9O18uVWI9ZnVuY3Rpb24gVnlkKCl7cmV0dXJuIHRoaXMub2ooKX07Xy5WYj1mdW5jdGlvbiBXeWQoKXtyZXR1cm4gdGhpcy5lLTF9O18uV2I9ZnVuY3Rpb24gWXlkKGEpe3RoaXMucGooYSl9O3ZhciBtND1tZGIoVHRlLCdBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3InLDI3OCk7YmNiKDM0MSw0MCxhaWUsJHlkKTtfLm5qPWZ1bmN0aW9uIF95ZCgpe3JldHVybiBaeWQodGhpcyl9O18uUWI9ZnVuY3Rpb24gYXpkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTt2YXIgbjQ9bWRiKFR0ZSwnQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3InLDM0MSk7YmNiKDM4NSwyNzgsamllLGJ6ZCxjemQpO18uUmI9ZnVuY3Rpb24gZHpkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5uaj1mdW5jdGlvbiBlemQoKXt2YXIgYjt0cnl7Yj10aGlzLmMua2kodGhpcy5lKTt0aGlzLm1qKCk7dGhpcy5nPXRoaXMuZSsrO3JldHVybiBifWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXt0aGlzLm1qKCk7dGhyb3cgdmJiKG5ldyB1dGIpfWVsc2UgdGhyb3cgdmJiKGEpfX07Xy5vaj1mdW5jdGlvbiBmemQoKXt2YXIgYjt0cnl7Yj10aGlzLmMua2koLS10aGlzLmUpO3RoaXMubWooKTt0aGlzLmc9dGhpcy5lO3JldHVybiBifWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXt0aGlzLm1qKCk7dGhyb3cgdmJiKG5ldyB1dGIpfWVsc2UgdGhyb3cgdmJiKGEpfX07Xy5RYj1mdW5jdGlvbiBnemQoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uV2I9ZnVuY3Rpb24gaHpkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07dmFyIG80PW1kYihUdGUsJ0Fic3RyYWN0RUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvcicsMzg1KTtiY2IoMTk4Miw2NyxpdmUpO18uVmg9ZnVuY3Rpb24gcHpkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtlPWIuZ2MoKTtpZihlIT0wKXtqPUJEKEFqZCh0aGlzLmEsNCksMTI2KTtrPWo9PW51bGw/MDpqLmxlbmd0aDttPWsrZTtkPW56ZCh0aGlzLG0pO2w9ay1hO2w+MCYmJGZiKGosYSxkLGErZSxsKTtpPWIuS2MoKTtmb3IoZz0wO2c8ZTsrK2cpe2g9aS5QYigpO2M9YStnO2x6ZChkLGMsSXRkKHRoaXMsaCkpfWIwZCh0aGlzLGQpO2ZvcihmPTA7ZjxlOysrZil7aD1kW2FdO3RoaXMuYmkoYSxoKTsrK2F9cmV0dXJuIHRydWV9ZWxzZXsrK3RoaXMuajtyZXR1cm4gZmFsc2V9fTtfLldoPWZ1bmN0aW9uIHF6ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7ZD1hLmdjKCk7aWYoZCE9MCl7aT0oYz1CRChBamQodGhpcy5hLDQpLDEyNiksYz09bnVsbD8wOmMubGVuZ3RoKTtqPWkrZDtiPW56ZCh0aGlzLGopO2g9YS5LYygpO2ZvcihmPWk7ZjxqOysrZil7Zz1oLlBiKCk7bHpkKGIsZixJdGQodGhpcyxnKSl9YjBkKHRoaXMsYik7Zm9yKGU9aTtlPGo7KytlKXtnPWJbZV07dGhpcy5iaShlLGcpfXJldHVybiB0cnVlfWVsc2V7Kyt0aGlzLmo7cmV0dXJuIGZhbHNlfX07Xy5YaD1mdW5jdGlvbiByemQoYSxiKXt2YXIgYyxkLGUsZjtkPUJEKEFqZCh0aGlzLmEsNCksMTI2KTtlPWQ9PW51bGw/MDpkLmxlbmd0aDtjPW56ZCh0aGlzLGUrMSk7Zj1JdGQodGhpcyxiKTthIT1lJiYkZmIoZCxhLGMsYSsxLGUtYSk7TkMoYyxhLGYpO2IwZCh0aGlzLGMpO3RoaXMuYmkoYSxiKX07Xy5ZaD1mdW5jdGlvbiBzemQoYSl7dmFyIGIsYyxkO2Q9KGM9QkQoQWpkKHRoaXMuYSw0KSwxMjYpLGM9PW51bGw/MDpjLmxlbmd0aCk7Yj1uemQodGhpcyxkKzEpO2x6ZChiLGQsSXRkKHRoaXMsYSkpO2IwZCh0aGlzLGIpO3RoaXMuYmkoZCxhKX07Xy5aaD1mdW5jdGlvbiB0emQoKXtyZXR1cm4gbmV3IFV6ZCh0aGlzKX07Xy4kaD1mdW5jdGlvbiB1emQoKXtyZXR1cm4gbmV3IFh6ZCh0aGlzKX07Xy5faD1mdW5jdGlvbiB2emQoYSl7dmFyIGIsYztjPShiPUJEKEFqZCh0aGlzLmEsNCksMTI2KSxiPT1udWxsPzA6Yi5sZW5ndGgpO2lmKGE8MHx8YT5jKXRocm93IHZiYihuZXcgQ3lkKGEsYykpO3JldHVybiBuZXcgWXpkKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gd3pkKCl7dmFyIGEsYjsrK3RoaXMuajthPUJEKEFqZCh0aGlzLmEsNCksMTI2KTtiPWE9PW51bGw/MDphLmxlbmd0aDtiMGQodGhpcyxudWxsKTtBdGQodGhpcyxiLGEpfTtfLkhjPWZ1bmN0aW9uIHh6ZChhKXt2YXIgYixjLGQsZSxmO2I9QkQoQWpkKHRoaXMuYSw0KSwxMjYpO2lmKGIhPW51bGwpe2lmKGEhPW51bGwpe2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKHBiKGEsYykpe3JldHVybiB0cnVlfX19ZWxzZXtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtpZihQRChjKT09PVBEKGEpKXtyZXR1cm4gdHJ1ZX19fX1yZXR1cm4gZmFsc2V9O18uWGI9ZnVuY3Rpb24geXpkKGEpe3ZhciBiLGM7Yj1CRChBamQodGhpcy5hLDQpLDEyNik7Yz1iPT1udWxsPzA6Yi5sZW5ndGg7aWYoYT49Yyl0aHJvdyB2YmIobmV3IEN5ZChhLGMpKTtyZXR1cm4gYlthXX07Xy5YYz1mdW5jdGlvbiB6emQoYSl7dmFyIGIsYyxkO2I9QkQoQWpkKHRoaXMuYSw0KSwxMjYpO2lmKGIhPW51bGwpe2lmKGEhPW51bGwpe2ZvcihjPTAsZD1iLmxlbmd0aDtjPGQ7KytjKXtpZihwYihhLGJbY10pKXtyZXR1cm4gY319fWVsc2V7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDsrK2Mpe2lmKFBEKGJbY10pPT09UEQoYSkpe3JldHVybiBjfX19fXJldHVybiAtMX07Xy5kYz1mdW5jdGlvbiBBemQoKXtyZXR1cm4gQkQoQWpkKHRoaXMuYSw0KSwxMjYpPT1udWxsfTtfLktjPWZ1bmN0aW9uIEJ6ZCgpe3JldHVybiBuZXcgTHpkKHRoaXMpfTtfLlljPWZ1bmN0aW9uIEN6ZCgpe3JldHVybiBuZXcgUHpkKHRoaXMpfTtfLlpjPWZ1bmN0aW9uIER6ZChhKXt2YXIgYixjO2M9KGI9QkQoQWpkKHRoaXMuYSw0KSwxMjYpLGI9PW51bGw/MDpiLmxlbmd0aCk7aWYoYTwwfHxhPmMpdGhyb3cgdmJiKG5ldyBDeWQoYSxjKSk7cmV0dXJuIG5ldyBRemQodGhpcyxhKX07Xy5paT1mdW5jdGlvbiBFemQoYSxiKXt2YXIgYyxkLGU7Yz1temQodGhpcyk7ZT1jPT1udWxsPzA6Yy5sZW5ndGg7aWYoYT49ZSl0aHJvdyB2YmIobmV3IHFjYihsdWUrYSttdWUrZSkpO2lmKGI+PWUpdGhyb3cgdmJiKG5ldyBxY2IobnVlK2IrbXVlK2UpKTtkPWNbYl07aWYoYSE9Yil7YTxiPyRmYihjLGEsYyxhKzEsYi1hKTokZmIoYyxiKzEsYyxiLGEtYik7TkMoYyxhLGQpO2IwZCh0aGlzLGMpfXJldHVybiBkfTtfLmtpPWZ1bmN0aW9uIEZ6ZChhKXtyZXR1cm4gQkQoQWpkKHRoaXMuYSw0KSwxMjYpW2FdfTtfLiRjPWZ1bmN0aW9uIEd6ZChhKXtyZXR1cm4gb3pkKHRoaXMsYSl9O18ubWk9ZnVuY3Rpb24gSHpkKGEsYil7dmFyIGMsZDtjPW16ZCh0aGlzKTtkPWNbYV07bHpkKGMsYSxJdGQodGhpcyxiKSk7YjBkKHRoaXMsYyk7cmV0dXJuIGR9O18uZ2M9ZnVuY3Rpb24gSXpkKCl7dmFyIGE7cmV0dXJuIGE9QkQoQWpkKHRoaXMuYSw0KSwxMjYpLGE9PW51bGw/MDphLmxlbmd0aH07Xy5QYz1mdW5jdGlvbiBKemQoKXt2YXIgYSxiLGM7YT1CRChBamQodGhpcy5hLDQpLDEyNik7Yz1hPT1udWxsPzA6YS5sZW5ndGg7Yj1LQygkMyxodmUsNDE1LGMsMCwxKTtjPjAmJiRmYihhLDAsYiwwLGMpO3JldHVybiBifTtfLlFjPWZ1bmN0aW9uIEt6ZChhKXt2YXIgYixjLGQ7Yj1CRChBamQodGhpcy5hLDQpLDEyNik7ZD1iPT1udWxsPzA6Yi5sZW5ndGg7aWYoZD4wKXtpZihhLmxlbmd0aDxkKXtjPWl6ZChyYihhKS5jLGQpO2E9Y30kZmIoYiwwLGEsMCxkKX1hLmxlbmd0aD5kJiZOQyhhLGQsbnVsbCk7cmV0dXJuIGF9O3ZhciBqemQ7dmFyIHY0PW1kYihUdGUsJ0FycmF5RGVsZWdhdGluZ0VMaXN0JywxOTgyKTtiY2IoMTAzOCw0MCxhaWUsTHpkKTtfLm1qPWZ1bmN0aW9uIE16ZCgpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFBEKEJEKEFqZCh0aGlzLmIuYSw0KSwxMjYpKSE9PVBEKHRoaXMuYSkpe3Rocm93IHZiYihuZXcgQXBiKX19O18uUWI9ZnVuY3Rpb24gTnpkKCl7RXlkKHRoaXMpO3RoaXMuYT1CRChBamQodGhpcy5iLmEsNCksMTI2KX07dmFyIHI0PW1kYihUdGUsJ0FycmF5RGVsZWdhdGluZ0VMaXN0L0VJdGVyYXRvcicsMTAzOCk7YmNiKDcwNiwyNzgsamllLFB6ZCxRemQpO18ubWo9ZnVuY3Rpb24gUnpkKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8UEQoQkQoQWpkKHRoaXMuYi5hLDQpLDEyNikpIT09UEQodGhpcy5hKSl7dGhyb3cgdmJiKG5ldyBBcGIpfX07Xy5waj1mdW5jdGlvbiBTemQoYSl7TnlkKHRoaXMsYSk7dGhpcy5hPUJEKEFqZCh0aGlzLmIuYSw0KSwxMjYpfTtfLlFiPWZ1bmN0aW9uIFR6ZCgpe0V5ZCh0aGlzKTt0aGlzLmE9QkQoQWpkKHRoaXMuYi5hLDQpLDEyNil9O3ZhciBzND1tZGIoVHRlLCdBcnJheURlbGVnYXRpbmdFTGlzdC9FTGlzdEl0ZXJhdG9yJyw3MDYpO2JjYigxMDM5LDM0MSxhaWUsVXpkKTtfLm1qPWZ1bmN0aW9uIFZ6ZCgpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFBEKEJEKEFqZCh0aGlzLmIuYSw0KSwxMjYpKSE9PVBEKHRoaXMuYSkpe3Rocm93IHZiYihuZXcgQXBiKX19O3ZhciB0ND1tZGIoVHRlLCdBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3InLDEwMzkpO2JjYig3MDcsMzg1LGppZSxYemQsWXpkKTtfLm1qPWZ1bmN0aW9uIFp6ZCgpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFBEKEJEKEFqZCh0aGlzLmIuYSw0KSwxMjYpKSE9PVBEKHRoaXMuYSkpe3Rocm93IHZiYihuZXcgQXBiKX19O3ZhciB1ND1tZGIoVHRlLCdBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFTGlzdEl0ZXJhdG9yJyw3MDcpO2JjYig2MDYsMjk1LE1qZSwkemQpO3ZhciB3ND1tZGIoVHRlLCdCYXNpY0VMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicsNjA2KTtiY2IoNjk2LDYzLG91ZSxfemQpO18uVmM9ZnVuY3Rpb24gYUFkKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkZjPWZ1bmN0aW9uIGJBZChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uV2M9ZnVuY3Rpb24gY0FkKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkdjPWZ1bmN0aW9uIGRBZChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uJGI9ZnVuY3Rpb24gZUFkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLnFpPWZ1bmN0aW9uIGZBZChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uS2M9ZnVuY3Rpb24gZ0FkKCl7cmV0dXJuIHRoaXMuWmgoKX07Xy5ZYz1mdW5jdGlvbiBoQWQoKXtyZXR1cm4gdGhpcy4kaCgpfTtfLlpjPWZ1bmN0aW9uIGlBZChhKXtyZXR1cm4gdGhpcy5faChhKX07Xy5paT1mdW5jdGlvbiBqQWQoYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O18uamk9ZnVuY3Rpb24ga0FkKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLiRjPWZ1bmN0aW9uIGxBZChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uTWM9ZnVuY3Rpb24gbUFkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5fYz1mdW5jdGlvbiBuQWQoYSxiKXt0aHJvdyB2YmIobmV3IGJnYil9O3ZhciB4ND1tZGIoVHRlLCdCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Jyw2OTYpO2JjYig3MDUsMSx7MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjF9KTtfLlZjPWZ1bmN0aW9uIE9BZChhLGIpe29BZCh0aGlzLGEsQkQoYiw0MikpfTtfLkZjPWZ1bmN0aW9uIFBBZChhKXtyZXR1cm4gcEFkKHRoaXMsQkQoYSw0MikpfTtfLkpjPWZ1bmN0aW9uIFhBZChhKXtyZWIodGhpcyxhKX07Xy5YYj1mdW5jdGlvbiBZQWQoYSl7cmV0dXJuIEJEKHF1ZCh0aGlzLmMsYSksMTMzKX07Xy5paT1mdW5jdGlvbiBmQmQoYSxiKXtyZXR1cm4gQkQodGhpcy5jLmlpKGEsYiksNDIpfTtfLmppPWZ1bmN0aW9uIGdCZChhLGIpe0dBZCh0aGlzLGEsQkQoYiw0MikpfTtfLkxjPWZ1bmN0aW9uIGpCZCgpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLDE2KSl9O18uJGM9ZnVuY3Rpb24ga0JkKGEpe3JldHVybiBCRCh0aGlzLmMuJGMoYSksNDIpfTtfLl9jPWZ1bmN0aW9uIG1CZChhLGIpe3JldHVybiBNQWQodGhpcyxhLEJEKGIsNDIpKX07Xy5hZD1mdW5jdGlvbiBvQmQoYSl7a3RiKHRoaXMsYSl9O18uTmM9ZnVuY3Rpb24gcEJkKCl7cmV0dXJuIG5ldyBLdWIodGhpcywxNil9O18uT2M9ZnVuY3Rpb24gcUJkKCl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKHRoaXMsMTYpKX07Xy5XYz1mdW5jdGlvbiBRQWQoYSxiKXtyZXR1cm4gdGhpcy5jLldjKGEsYil9O18uR2M9ZnVuY3Rpb24gUkFkKGEpe3JldHVybiB0aGlzLmMuR2MoYSl9O18uJGI9ZnVuY3Rpb24gU0FkKCl7dGhpcy5jLiRiKCl9O18uSGM9ZnVuY3Rpb24gVEFkKGEpe3JldHVybiB0aGlzLmMuSGMoYSl9O18uSWM9ZnVuY3Rpb24gVUFkKGEpe3JldHVybiBCZSh0aGlzLmMsYSl9O18ucWo9ZnVuY3Rpb24gVkFkKCl7dmFyIGEsYixjO2lmKHRoaXMuZD09bnVsbCl7dGhpcy5kPUtDKHk0LGp2ZSw2MywyKnRoaXMuZisxLDAsMSk7Yz10aGlzLmU7dGhpcy5mPTA7Zm9yKGI9dGhpcy5jLktjKCk7Yi5lIT1iLmkuZ2MoKTspe2E9QkQoYi5uaigpLDEzMyk7dUFkKHRoaXMsYSl9dGhpcy5lPWN9fTtfLkZiPWZ1bmN0aW9uIFdBZChhKXtyZXR1cm4gekFkKHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gWkFkKCl7cmV0dXJuIEV0ZCh0aGlzLmMpfTtfLlhjPWZ1bmN0aW9uICRBZChhKXtyZXR1cm4gdGhpcy5jLlhjKGEpfTtfLnJqPWZ1bmN0aW9uIF9BZCgpe3RoaXMuYz1uZXcgeUJkKHRoaXMpfTtfLmRjPWZ1bmN0aW9uIGFCZCgpe3JldHVybiB0aGlzLmY9PTB9O18uS2M9ZnVuY3Rpb24gYkJkKCl7cmV0dXJuIHRoaXMuYy5LYygpfTtfLlljPWZ1bmN0aW9uIGNCZCgpe3JldHVybiB0aGlzLmMuWWMoKX07Xy5aYz1mdW5jdGlvbiBkQmQoYSl7cmV0dXJuIHRoaXMuYy5aYyhhKX07Xy5zaj1mdW5jdGlvbiBlQmQoKXtyZXR1cm4gRkFkKHRoaXMpfTtfLnRqPWZ1bmN0aW9uIGhCZChhLGIsYyl7cmV0dXJuIG5ldyB6Q2QoYSxiLGMpfTtfLnVqPWZ1bmN0aW9uIGlCZCgpe3JldHVybiBuZXcgRUJkfTtfLk1jPWZ1bmN0aW9uIGxCZChhKXtyZXR1cm4gSkFkKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gbkJkKCl7cmV0dXJuIHRoaXMuZn07Xy5iZD1mdW5jdGlvbiByQmQoYSxiKXtyZXR1cm4gbmV3IEppYih0aGlzLmMsYSxiKX07Xy5QYz1mdW5jdGlvbiBzQmQoKXtyZXR1cm4gdGhpcy5jLlBjKCl9O18uUWM9ZnVuY3Rpb24gdEJkKGEpe3JldHVybiB0aGlzLmMuUWMoYSl9O18uSWI9ZnVuY3Rpb24gdUJkKCl7cmV0dXJuIEh0ZCh0aGlzLmMpfTtfLmU9MDtfLmY9MDt2YXIgTDQ9bWRiKFR0ZSwnQmFzaWNFTWFwJyw3MDUpO2JjYigxMDMzLDYzLG91ZSx5QmQpO18uYmk9ZnVuY3Rpb24gekJkKGEsYil7dkJkKHRoaXMsQkQoYiwxMzMpKX07Xy5laT1mdW5jdGlvbiBCQmQoYSxiLGMpe3ZhciBkOysrKGQ9dGhpcyxCRChiLDEzMyksZCkuYS5lfTtfLmZpPWZ1bmN0aW9uIENCZChhLGIpe3dCZCh0aGlzLEJEKGIsMTMzKSl9O18uZ2k9ZnVuY3Rpb24gREJkKGEsYixjKXt4QmQodGhpcyxCRChiLDEzMyksQkQoYywxMzMpKX07Xy5kaT1mdW5jdGlvbiBBQmQoYSxiKXt0QWQodGhpcy5hKX07dmFyIHo0PW1kYihUdGUsJ0Jhc2ljRU1hcC8xJywxMDMzKTtiY2IoMTAzNCw2MyxvdWUsRUJkKTtfLnJpPWZ1bmN0aW9uIEZCZChhKXtyZXR1cm4gS0MoSTQsa3ZlLDYxMixhLDAsMSl9O3ZhciBBND1tZGIoVHRlLCdCYXNpY0VNYXAvMicsMTAzNCk7YmNiKDEwMzUsZWllLGZpZSxHQmQpO18uJGI9ZnVuY3Rpb24gSEJkKCl7dGhpcy5hLmMuJGIoKX07Xy5IYz1mdW5jdGlvbiBJQmQoYSl7cmV0dXJuIHFBZCh0aGlzLmEsYSl9O18uS2M9ZnVuY3Rpb24gSkJkKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhMQ2QoKSxLQ2QuYSk6bmV3IGRDZCh0aGlzLmEpfTtfLk1jPWZ1bmN0aW9uIEtCZChhKXt2YXIgYjtiPXRoaXMuYS5mO0xBZCh0aGlzLmEsYSk7cmV0dXJuIHRoaXMuYS5mIT1ifTtfLmdjPWZ1bmN0aW9uIExCZCgpe3JldHVybiB0aGlzLmEuZn07dmFyIEI0PW1kYihUdGUsJ0Jhc2ljRU1hcC8zJywxMDM1KTtiY2IoMTAzNiwyOCxkaWUsTUJkKTtfLiRiPWZ1bmN0aW9uIE5CZCgpe3RoaXMuYS5jLiRiKCl9O18uSGM9ZnVuY3Rpb24gT0JkKGEpe3JldHVybiByQWQodGhpcy5hLGEpfTtfLktjPWZ1bmN0aW9uIFBCZCgpe3JldHVybiB0aGlzLmEuZj09MD8oTENkKCksS0NkLmEpOm5ldyBmQ2QodGhpcy5hKX07Xy5nYz1mdW5jdGlvbiBRQmQoKXtyZXR1cm4gdGhpcy5hLmZ9O3ZhciBDND1tZGIoVHRlLCdCYXNpY0VNYXAvNCcsMTAzNik7YmNiKDEwMzcsZWllLGZpZSxTQmQpO18uJGI9ZnVuY3Rpb24gVEJkKCl7dGhpcy5hLmMuJGIoKX07Xy5IYz1mdW5jdGlvbiBVQmQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO2lmKHRoaXMuYS5mPjAmJkpEKGEsNDIpKXt0aGlzLmEucWooKTtpPUJEKGEsNDIpO2g9aS5jZCgpO2U9aD09bnVsbD8wOnRiKGgpO2Y9REFkKHRoaXMuYSxlKTtiPXRoaXMuYS5kW2ZdO2lmKGIpe2M9QkQoYi5nLDM2Nyk7aj1iLmk7Zm9yKGc9MDtnPGo7KytnKXtkPWNbZ107aWYoZC5TaCgpPT1lJiZkLkZiKGkpKXtyZXR1cm4gdHJ1ZX19fX1yZXR1cm4gZmFsc2V9O18uS2M9ZnVuY3Rpb24gVkJkKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhMQ2QoKSxLQ2QuYSk6bmV3IFpCZCh0aGlzLmEpfTtfLk1jPWZ1bmN0aW9uIFdCZChhKXtyZXR1cm4gUkJkKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gWEJkKCl7cmV0dXJuIHRoaXMuYS5mfTt2YXIgRDQ9bWRiKFR0ZSwnQmFzaWNFTWFwLzUnLDEwMzcpO2JjYig2MTMsMSxhaWUsWkJkKTtfLk5iPWZ1bmN0aW9uICRCZChhKXtScmIodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBfQmQoKXtyZXR1cm4gdGhpcy5iIT0tMX07Xy5QYj1mdW5jdGlvbiBhQ2QoKXt2YXIgYTtpZih0aGlzLmYuZSE9dGhpcy5jKXt0aHJvdyB2YmIobmV3IEFwYil9aWYodGhpcy5iPT0tMSl7dGhyb3cgdmJiKG5ldyB1dGIpfXRoaXMuZD10aGlzLmE7dGhpcy5lPXRoaXMuYjtZQmQodGhpcyk7YT1CRCh0aGlzLmYuZFt0aGlzLmRdLmdbdGhpcy5lXSwxMzMpO3JldHVybiB0aGlzLnZqKGEpfTtfLlFiPWZ1bmN0aW9uIGJDZCgpe2lmKHRoaXMuZi5lIT10aGlzLmMpe3Rocm93IHZiYihuZXcgQXBiKX1pZih0aGlzLmU9PS0xKXt0aHJvdyB2YmIobmV3IFlkYil9dGhpcy5mLmMuTWMocXVkKHRoaXMuZi5kW3RoaXMuZF0sdGhpcy5lKSk7dGhpcy5jPXRoaXMuZi5lO3RoaXMuZT0tMTt0aGlzLmE9PXRoaXMuZCYmdGhpcy5iIT0tMSYmLS10aGlzLmJ9O18udmo9ZnVuY3Rpb24gY0NkKGEpe3JldHVybiBhfTtfLmE9MDtfLmI9LTE7Xy5jPTA7Xy5kPTA7Xy5lPTA7dmFyIEU0PW1kYihUdGUsJ0Jhc2ljRU1hcC9CYXNpY0VNYXBJdGVyYXRvcicsNjEzKTtiY2IoMTAzMSw2MTMsYWllLGRDZCk7Xy52aj1mdW5jdGlvbiBlQ2QoYSl7cmV0dXJuIGEuY2QoKX07dmFyIEY0PW1kYihUdGUsJ0Jhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvcicsMTAzMSk7YmNiKDEwMzIsNjEzLGFpZSxmQ2QpO18udmo9ZnVuY3Rpb24gZ0NkKGEpe3JldHVybiBhLmRkKCl9O3ZhciBHND1tZGIoVHRlLCdCYXNpY0VNYXAvQmFzaWNFTWFwVmFsdWVJdGVyYXRvcicsMTAzMik7YmNiKDEwMzAsMSxjaWUsaUNkKTtfLndjPWZ1bmN0aW9uIG9DZChhKXtzdGIodGhpcyxhKX07Xy55Yz1mdW5jdGlvbiB0Q2QoYSxiLGMpe3JldHVybiB0dGIodGhpcyxhLGIsYyl9O18uJGI9ZnVuY3Rpb24gakNkKCl7dGhpcy5hLmMuJGIoKX07Xy5fYj1mdW5jdGlvbiBrQ2QoYSl7cmV0dXJuIGhDZCh0aGlzLGEpfTtfLnVjPWZ1bmN0aW9uIGxDZChhKXtyZXR1cm4gckFkKHRoaXMuYSxhKX07Xy52Yz1mdW5jdGlvbiBtQ2QoKXtyZXR1cm4geUFkKHRoaXMuYSl9O18uRmI9ZnVuY3Rpb24gbkNkKGEpe3JldHVybiB6QWQodGhpcy5hLGEpfTtfLnhjPWZ1bmN0aW9uIHBDZChhKXtyZXR1cm4gQUFkKHRoaXMuYSxhKX07Xy5IYj1mdW5jdGlvbiBxQ2QoKXtyZXR1cm4gRXRkKHRoaXMuYS5jKX07Xy5kYz1mdW5jdGlvbiByQ2QoKXtyZXR1cm4gdGhpcy5hLmY9PTB9O18uZWM9ZnVuY3Rpb24gc0NkKCl7cmV0dXJuIEVBZCh0aGlzLmEpfTtfLnpjPWZ1bmN0aW9uIHVDZChhLGIpe3JldHVybiBIQWQodGhpcy5hLGEsYil9O18uQmM9ZnVuY3Rpb24gdkNkKGEpe3JldHVybiBMQWQodGhpcy5hLGEpfTtfLmdjPWZ1bmN0aW9uIHdDZCgpe3JldHVybiB0aGlzLmEuZn07Xy5JYj1mdW5jdGlvbiB4Q2QoKXtyZXR1cm4gSHRkKHRoaXMuYS5jKX07Xy5DYz1mdW5jdGlvbiB5Q2QoKXtyZXR1cm4gTkFkKHRoaXMuYSl9O3ZhciBIND1tZGIoVHRlLCdCYXNpY0VNYXAvRGVsZWdhdGluZ01hcCcsMTAzMCk7YmNiKDYxMiwxLHs0MjoxLDEzMzoxLDYxMjoxfSx6Q2QpO18uRmI9ZnVuY3Rpb24gQUNkKGEpe3ZhciBiO2lmKEpEKGEsNDIpKXtiPUJEKGEsNDIpO3JldHVybiAodGhpcy5iIT1udWxsP3BiKHRoaXMuYixiLmNkKCkpOlBEKHRoaXMuYik9PT1QRChiLmNkKCkpKSYmKHRoaXMuYyE9bnVsbD9wYih0aGlzLmMsYi5kZCgpKTpQRCh0aGlzLmMpPT09UEQoYi5kZCgpKSl9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLlNoPWZ1bmN0aW9uIEJDZCgpe3JldHVybiB0aGlzLmF9O18uY2Q9ZnVuY3Rpb24gQ0NkKCl7cmV0dXJuIHRoaXMuYn07Xy5kZD1mdW5jdGlvbiBEQ2QoKXtyZXR1cm4gdGhpcy5jfTtfLkhiPWZ1bmN0aW9uIEVDZCgpe3JldHVybiB0aGlzLmFeKHRoaXMuYz09bnVsbD8wOnRiKHRoaXMuYykpfTtfLlRoPWZ1bmN0aW9uIEZDZChhKXt0aGlzLmE9YX07Xy5VaD1mdW5jdGlvbiBHQ2QoYSl7dGhyb3cgdmJiKG5ldyBneil9O18uZWQ9ZnVuY3Rpb24gSENkKGEpe3ZhciBiO2I9dGhpcy5jO3RoaXMuYz1hO3JldHVybiBifTtfLkliPWZ1bmN0aW9uIElDZCgpe3JldHVybiB0aGlzLmIrJy0+Jyt0aGlzLmN9O18uYT0wO3ZhciBJND1tZGIoVHRlLCdCYXNpY0VNYXAvRW50cnlJbXBsJyw2MTIpO2JjYig1MzYsMSx7fSxKQ2QpO3ZhciBLND1tZGIoVHRlLCdCYXNpY0VNYXAvVmlldycsNTM2KTt2YXIgS0NkO2JjYig3NjgsMSx7fSk7Xy5GYj1mdW5jdGlvbiBaQ2QoYSl7cmV0dXJuIEF0KChtbWIoKSxqbWIpLGEpfTtfLkhiPWZ1bmN0aW9uICRDZCgpe3JldHVybiBxbWIoKG1tYigpLGptYikpfTtfLkliPWZ1bmN0aW9uIF9DZCgpe3JldHVybiBGZSgobW1iKCksam1iKSl9O3ZhciBRND1tZGIoVHRlLCdFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Jyw3NjgpO2JjYigxMzEyLDEsamllLGFEZCk7Xy5OYj1mdW5jdGlvbiBjRGQoYSl7UnJiKHRoaXMsYSl9O18uUmI9ZnVuY3Rpb24gYkRkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5PYj1mdW5jdGlvbiBkRGQoKXtyZXR1cm4gZmFsc2V9O18uU2I9ZnVuY3Rpb24gZURkKCl7cmV0dXJuIGZhbHNlfTtfLlBiPWZ1bmN0aW9uIGZEZCgpe3Rocm93IHZiYihuZXcgdXRiKX07Xy5UYj1mdW5jdGlvbiBnRGQoKXtyZXR1cm4gMH07Xy5VYj1mdW5jdGlvbiBoRGQoKXt0aHJvdyB2YmIobmV3IHV0Yil9O18uVmI9ZnVuY3Rpb24gaURkKCl7cmV0dXJuIC0xfTtfLlFiPWZ1bmN0aW9uIGpEZCgpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5XYj1mdW5jdGlvbiBrRGQoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTt2YXIgUDQ9bWRiKFR0ZSwnRUNvbGxlY3Rpb25zL0Jhc2ljRW1wdHlVbm1vZGlmaWFibGVFTGlzdC8xJywxMzEyKTtiY2IoMTMxMCw3NjgsezIwOjEsMTQ6MSwxNToxLDU4OjF9LGxEZCk7Xy5WYz1mdW5jdGlvbiBtRGQoYSxiKXtPQ2QoKX07Xy5GYz1mdW5jdGlvbiBuRGQoYSl7cmV0dXJuIFBDZCgpfTtfLldjPWZ1bmN0aW9uIG9EZChhLGIpe3JldHVybiBRQ2QoKX07Xy5HYz1mdW5jdGlvbiBwRGQoYSl7cmV0dXJuIFJDZCgpfTtfLiRiPWZ1bmN0aW9uIHFEZCgpe1NDZCgpfTtfLkhjPWZ1bmN0aW9uIHJEZChhKXtyZXR1cm4gZmFsc2V9O18uSWM9ZnVuY3Rpb24gc0RkKGEpe3JldHVybiBmYWxzZX07Xy5KYz1mdW5jdGlvbiB0RGQoYSl7cmViKHRoaXMsYSl9O18uWGI9ZnVuY3Rpb24gdURkKGEpe3JldHVybiB3bWIoKG1tYigpLGptYixhKSksbnVsbH07Xy5YYz1mdW5jdGlvbiB2RGQoYSl7cmV0dXJuIC0xfTtfLmRjPWZ1bmN0aW9uIHdEZCgpe3JldHVybiB0cnVlfTtfLktjPWZ1bmN0aW9uIHhEZCgpe3JldHVybiB0aGlzLmF9O18uWWM9ZnVuY3Rpb24geURkKCl7cmV0dXJuIHRoaXMuYX07Xy5aYz1mdW5jdGlvbiB6RGQoYSl7cmV0dXJuIHRoaXMuYX07Xy5paT1mdW5jdGlvbiBBRGQoYSxiKXtyZXR1cm4gVENkKCl9O18uamk9ZnVuY3Rpb24gQkRkKGEsYil7VUNkKCl9O18uTGM9ZnVuY3Rpb24gQ0RkKCl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKHRoaXMsMTYpKX07Xy4kYz1mdW5jdGlvbiBERGQoYSl7cmV0dXJuIFZDZCgpfTtfLk1jPWZ1bmN0aW9uIEVEZChhKXtyZXR1cm4gV0NkKCl9O18uX2M9ZnVuY3Rpb24gRkRkKGEsYil7cmV0dXJuIFhDZCgpfTtfLmdjPWZ1bmN0aW9uIEdEZCgpe3JldHVybiAwfTtfLmFkPWZ1bmN0aW9uIEhEZChhKXtrdGIodGhpcyxhKX07Xy5OYz1mdW5jdGlvbiBJRGQoKXtyZXR1cm4gbmV3IEt1Yih0aGlzLDE2KX07Xy5PYz1mdW5jdGlvbiBKRGQoKXtyZXR1cm4gbmV3IFlBYihudWxsLG5ldyBLdWIodGhpcywxNikpfTtfLmJkPWZ1bmN0aW9uIEtEZChhLGIpe3JldHVybiBtbWIoKSxuZXcgSmliKGptYixhLGIpfTtfLlBjPWZ1bmN0aW9uIExEZCgpe3JldHVybiBEZSgobW1iKCksam1iKSl9O18uUWM9ZnVuY3Rpb24gTURkKGEpe3JldHVybiBtbWIoKSxFZShqbWIsYSl9O3ZhciBSND1tZGIoVHRlLCdFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTGlzdCcsMTMxMCk7YmNiKDEzMTEsNzY4LHsyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxfSxORGQpO18uVmM9ZnVuY3Rpb24gT0RkKGEsYil7T0NkKCl9O18uRmM9ZnVuY3Rpb24gUERkKGEpe3JldHVybiBQQ2QoKX07Xy5XYz1mdW5jdGlvbiBRRGQoYSxiKXtyZXR1cm4gUUNkKCl9O18uR2M9ZnVuY3Rpb24gUkRkKGEpe3JldHVybiBSQ2QoKX07Xy4kYj1mdW5jdGlvbiBTRGQoKXtTQ2QoKX07Xy5IYz1mdW5jdGlvbiBURGQoYSl7cmV0dXJuIGZhbHNlfTtfLkljPWZ1bmN0aW9uIFVEZChhKXtyZXR1cm4gZmFsc2V9O18uSmM9ZnVuY3Rpb24gVkRkKGEpe3JlYih0aGlzLGEpfTtfLlhiPWZ1bmN0aW9uIFdEZChhKXtyZXR1cm4gd21iKChtbWIoKSxqbWIsYSkpLG51bGx9O18uWGM9ZnVuY3Rpb24gWERkKGEpe3JldHVybiAtMX07Xy5kYz1mdW5jdGlvbiBZRGQoKXtyZXR1cm4gdHJ1ZX07Xy5LYz1mdW5jdGlvbiBaRGQoKXtyZXR1cm4gdGhpcy5hfTtfLlljPWZ1bmN0aW9uICREZCgpe3JldHVybiB0aGlzLmF9O18uWmM9ZnVuY3Rpb24gX0RkKGEpe3JldHVybiB0aGlzLmF9O18uaWk9ZnVuY3Rpb24gYkVkKGEsYil7cmV0dXJuIFRDZCgpfTtfLmppPWZ1bmN0aW9uIGNFZChhLGIpe1VDZCgpfTtfLkxjPWZ1bmN0aW9uIGRFZCgpe3JldHVybiBuZXcgWUFiKG51bGwsbmV3IEt1Yih0aGlzLDE2KSl9O18uJGM9ZnVuY3Rpb24gZUVkKGEpe3JldHVybiBWQ2QoKX07Xy5NYz1mdW5jdGlvbiBmRWQoYSl7cmV0dXJuIFdDZCgpfTtfLl9jPWZ1bmN0aW9uIGdFZChhLGIpe3JldHVybiBYQ2QoKX07Xy5nYz1mdW5jdGlvbiBoRWQoKXtyZXR1cm4gMH07Xy5hZD1mdW5jdGlvbiBpRWQoYSl7a3RiKHRoaXMsYSl9O18uTmM9ZnVuY3Rpb24gakVkKCl7cmV0dXJuIG5ldyBLdWIodGhpcywxNil9O18uT2M9ZnVuY3Rpb24ga0VkKCl7cmV0dXJuIG5ldyBZQWIobnVsbCxuZXcgS3ViKHRoaXMsMTYpKX07Xy5iZD1mdW5jdGlvbiBsRWQoYSxiKXtyZXR1cm4gbW1iKCksbmV3IEppYihqbWIsYSxiKX07Xy5QYz1mdW5jdGlvbiBtRWQoKXtyZXR1cm4gRGUoKG1tYigpLGptYikpfTtfLlFjPWZ1bmN0aW9uIG5FZChhKXtyZXR1cm4gbW1iKCksRWUoam1iLGEpfTtfLnNqPWZ1bmN0aW9uIGFFZCgpe3JldHVybiBtbWIoKSxtbWIoKSxrbWJ9O3ZhciBTND1tZGIoVHRlLCdFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTWFwJywxMzExKTt2YXIgVTQ9b2RiKFR0ZSwnRW51bWVyYXRvcicpO3ZhciBvRWQ7YmNiKDI4MSwxLHsyODE6MX0sTkVkKTtfLkZiPWZ1bmN0aW9uIFJFZChhKXt2YXIgYjtpZih0aGlzPT09YSlyZXR1cm4gdHJ1ZTtpZighSkQoYSwyODEpKXJldHVybiBmYWxzZTtiPUJEKGEsMjgxKTtyZXR1cm4gdGhpcy5mPT1iLmYmJlRFZCh0aGlzLmksYi5pKSYmU0VkKHRoaXMuYSwodGhpcy5mJjI1NikhPTA/KGIuZiYyNTYpIT0wP2IuYTpudWxsOihiLmYmMjU2KSE9MD9udWxsOmIuYSkmJlNFZCh0aGlzLmQsYi5kKSYmU0VkKHRoaXMuZyxiLmcpJiZTRWQodGhpcy5lLGIuZSkmJktFZCh0aGlzLGIpfTtfLkhiPWZ1bmN0aW9uIFdFZCgpe3JldHVybiB0aGlzLmZ9O18uSWI9ZnVuY3Rpb24gY0ZkKCl7cmV0dXJuIExFZCh0aGlzKX07Xy5mPTA7dmFyIHNFZD0wLHRFZD0wLHVFZD0wLHZFZD0wLHdFZD0wLHhFZD0wLHlFZD0wLHpFZD0wLEFFZD0wLEJFZCxDRWQ9MCxERWQ9MCxFRWQ9MCxGRWQ9MCxHRWQsSEVkO3ZhciBaND1tZGIoVHRlLCdVUkknLDI4MSk7YmNiKDEwOTEsNDMsZmtlLG1GZCk7Xy56Yz1mdW5jdGlvbiBuRmQoYSxiKXtyZXR1cm4gQkQoU2hiKHRoaXMsR0QoYSksQkQoYiwyODEpKSwyODEpfTt2YXIgWTQ9bWRiKFR0ZSwnVVJJL1VSSUNhY2hlJywxMDkxKTtiY2IoNDk3LDYzLG91ZSxvRmQscEZkKTtfLmhpPWZ1bmN0aW9uIHFGZCgpe3JldHVybiB0cnVlfTt2YXIgJDQ9bWRiKFR0ZSwnVW5pcXVlRUxpc3QnLDQ5Nyk7YmNiKDU4MSw2MCxUaWUsckZkKTt2YXIgXzQ9bWRiKFR0ZSwnV3JhcHBlZEV4Y2VwdGlvbicsNTgxKTt2YXIgYTU9b2RiKFZzZSxudmUpO3ZhciB2NT1vZGIoVnNlLG92ZSk7dmFyIHQ1PW9kYihWc2UscHZlKTt2YXIgYjU9b2RiKFZzZSxxdmUpO3ZhciBkNT1vZGIoVnNlLHJ2ZSk7dmFyIGM1PW9kYihWc2UsJ0VDbGFzcycpO3ZhciBmNT1vZGIoVnNlLCdFRGF0YVR5cGUnKTt2YXIgc0ZkO2JjYigxMTgzLDQzLGZrZSx2RmQpO18ueGM9ZnVuY3Rpb24gd0ZkKGEpe3JldHVybiBORChhKT9QaGIodGhpcyxhKTpXZChpcmIodGhpcy5mLGEpKX07dmFyIGU1PW1kYihWc2UsJ0VEYXRhVHlwZS9JbnRlcm5hbC9Db252ZXJzaW9uRGVsZWdhdGUvRmFjdG9yeS9SZWdpc3RyeS9JbXBsJywxMTgzKTt2YXIgaDU9b2RiKFZzZSwnRUVudW0nKTt2YXIgZzU9b2RiKFZzZSxzdmUpO3ZhciBqNT1vZGIoVnNlLHR2ZSk7dmFyIG41PW9kYihWc2UsdXZlKTt2YXIgeEZkO3ZhciBwNT1vZGIoVnNlLHZ2ZSk7dmFyIHE1PW9kYihWc2Usd3ZlKTtiY2IoMTAyOSwxLHt9LEJGZCk7Xy5JYj1mdW5jdGlvbiBDRmQoKXtyZXR1cm4gJ05JTCd9O3ZhciByNT1tZGIoVnNlLCdFU3RydWN0dXJhbEZlYXR1cmUvSW50ZXJuYWwvRHluYW1pY1ZhbHVlSG9sZGVyLzEnLDEwMjkpO3ZhciBERmQ7YmNiKDEwMjgsNDMsZmtlLEdGZCk7Xy54Yz1mdW5jdGlvbiBIRmQoYSl7cmV0dXJuIE5EKGEpP1BoYih0aGlzLGEpOldkKGlyYih0aGlzLmYsYSkpfTt2YXIgczU9bWRiKFZzZSwnRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwnLDEwMjgpO3ZhciB1NT1vZGIoVnNlLHh2ZSk7dmFyIHc1PW9kYihWc2UsJ0VWYWxpZGF0b3IvUGF0dGVybk1hdGNoZXInKTt2YXIgSUZkO3ZhciBLRmQ7dmFyIE1GZDt2YXIgT0ZkLFBGZCxRRmQsUkZkLFNGZCxURmQsVUZkLFZGZCxXRmQsWEZkLFlGZCxaRmQsJEZkLF9GZCxhR2QsYkdkLGNHZCxkR2QsZUdkLGZHZCxnR2QsaEdkLGlHZDt2YXIgRTk9b2RiKHl2ZSwnRmVhdHVyZU1hcC9FbnRyeScpO2JjYig1MzUsMSx7NzI6MX0sa0dkKTtfLmFrPWZ1bmN0aW9uIGxHZCgpe3JldHVybiB0aGlzLmF9O18uZGQ9ZnVuY3Rpb24gbUdkKCl7cmV0dXJuIHRoaXMuYn07dmFyIHg1PW1kYihxdGUsJ0Jhc2ljRU9iamVjdEltcGwvMScsNTM1KTtiY2IoMTAyNywxLHp2ZSxuR2QpO18uV2o9ZnVuY3Rpb24gb0dkKGEpe3JldHVybiBoaWQodGhpcy5hLHRoaXMuYixhKX07Xy5maj1mdW5jdGlvbiBwR2QoKXtyZXR1cm4gbmlkKHRoaXMuYSx0aGlzLmIpfTtfLldiPWZ1bmN0aW9uIHFHZChhKXt6aWQodGhpcy5hLHRoaXMuYixhKX07Xy5Yaj1mdW5jdGlvbiByR2QoKXtEaWQodGhpcy5hLHRoaXMuYil9O3ZhciB5NT1tZGIocXRlLCdCYXNpY0VPYmplY3RJbXBsLzQnLDEwMjcpO2JjYigxOTgzLDEsezEwODoxfSk7Xy5iaz1mdW5jdGlvbiB1R2QoYSl7dGhpcy5lPWE9PTA/c0dkOktDKFNJLFVoZSwxLGEsNSwxKX07Xy5DaD1mdW5jdGlvbiB2R2QoYSl7cmV0dXJuIHRoaXMuZVthXX07Xy5EaD1mdW5jdGlvbiB3R2QoYSxiKXt0aGlzLmVbYV09Yn07Xy5FaD1mdW5jdGlvbiB4R2QoYSl7dGhpcy5lW2FdPW51bGx9O18uY2s9ZnVuY3Rpb24geUdkKCl7cmV0dXJuIHRoaXMuY307Xy5kaz1mdW5jdGlvbiB6R2QoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uZWs9ZnVuY3Rpb24gQUdkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLmZrPWZ1bmN0aW9uIEJHZCgpe3JldHVybiB0aGlzLmR9O18uZ2s9ZnVuY3Rpb24gQ0dkKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH07Xy5oaz1mdW5jdGlvbiBER2QoYSl7dGhpcy5jPWF9O18uaWs9ZnVuY3Rpb24gRUdkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5qaz1mdW5jdGlvbiBGR2QoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLmtrPWZ1bmN0aW9uIEdHZChhKXt0aGlzLmQ9YX07dmFyIHNHZDt2YXIgejU9bWRiKHF0ZSwnQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsJywxOTgzKTtiY2IoMTg1LDE5ODMsezEwODoxfSxIR2QpO18uZGs9ZnVuY3Rpb24gSUdkKCl7cmV0dXJuIHRoaXMuYX07Xy5laz1mdW5jdGlvbiBKR2QoKXtyZXR1cm4gdGhpcy5ifTtfLmlrPWZ1bmN0aW9uIEtHZChhKXt0aGlzLmE9YX07Xy5qaz1mdW5jdGlvbiBMR2QoYSl7dGhpcy5iPWF9O3ZhciBBNT1tZGIocXRlLCdCYXNpY0VPYmplY3RJbXBsL0VQcm9wZXJ0aWVzSG9sZGVySW1wbCcsMTg1KTtiY2IoNTA2LDk3LHB0ZSxNR2QpO18uS2c9ZnVuY3Rpb24gTkdkKCl7cmV0dXJuIHRoaXMuZn07Xy5QZz1mdW5jdGlvbiBPR2QoKXtyZXR1cm4gdGhpcy5rfTtfLlJnPWZ1bmN0aW9uIFBHZChhLGIpe3RoaXMuZz1hO3RoaXMuaT1ifTtfLlRnPWZ1bmN0aW9uIFFHZCgpe3JldHVybiAodGhpcy5qJjIpPT0wP3RoaXMuemgoKTp0aGlzLnBoKCkuY2soKX07Xy5WZz1mdW5jdGlvbiBSR2QoKXtyZXR1cm4gdGhpcy5pfTtfLk1nPWZ1bmN0aW9uIFNHZCgpe3JldHVybiAodGhpcy5qJjEpIT0wfTtfLmVoPWZ1bmN0aW9uIFRHZCgpe3JldHVybiB0aGlzLmd9O18ua2g9ZnVuY3Rpb24gVUdkKCl7cmV0dXJuICh0aGlzLmomNCkhPTB9O18ucGg9ZnVuY3Rpb24gVkdkKCl7cmV0dXJuICF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rfTtfLnRoPWZ1bmN0aW9uIFdHZChhKXt0aGlzLnBoKCkuaGsoYSk7YT8odGhpcy5qfD0yKToodGhpcy5qJj0tMyl9O18udmg9ZnVuY3Rpb24gWEdkKGEpe3RoaXMucGgoKS5qayhhKTthPyh0aGlzLmp8PTQpOih0aGlzLmomPS01KX07Xy56aD1mdW5jdGlvbiBZR2QoKXtyZXR1cm4gKE5GZCgpLE1GZCkuU307Xy5pPTA7Xy5qPTE7dmFyIGw2PW1kYihxdGUsJ0VPYmplY3RJbXBsJyw1MDYpO2JjYig3ODAsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjF9LF9HZCk7Xy5DaD1mdW5jdGlvbiBhSGQoYSl7cmV0dXJuIHRoaXMuZVthXX07Xy5EaD1mdW5jdGlvbiBiSGQoYSxiKXt0aGlzLmVbYV09Yn07Xy5FaD1mdW5jdGlvbiBjSGQoYSl7dGhpcy5lW2FdPW51bGx9O18uVGc9ZnVuY3Rpb24gZEhkKCl7cmV0dXJuIHRoaXMuZH07Xy5ZZz1mdW5jdGlvbiBlSGQoYSl7cmV0dXJuIGJMZCh0aGlzLmQsYSl9O18uJGc9ZnVuY3Rpb24gZkhkKCl7cmV0dXJuIHRoaXMuZH07Xy5kaD1mdW5jdGlvbiBnSGQoKXtyZXR1cm4gdGhpcy5lIT1udWxsfTtfLnBoPWZ1bmN0aW9uIGhIZCgpeyF0aGlzLmsmJih0aGlzLms9bmV3IHZIZCk7cmV0dXJuIHRoaXMua307Xy50aD1mdW5jdGlvbiBpSGQoYSl7dGhpcy5kPWF9O18ueWg9ZnVuY3Rpb24gakhkKCl7dmFyIGE7aWYodGhpcy5lPT1udWxsKXthPWFMZCh0aGlzLmQpO3RoaXMuZT1hPT0wP1pHZDpLQyhTSSxVaGUsMSxhLDUsMSl9cmV0dXJuIHRoaXN9O18uQWg9ZnVuY3Rpb24ga0hkKCl7cmV0dXJuIDB9O3ZhciBaR2Q7dmFyIEU1PW1kYihxdGUsJ0R5bmFtaWNFT2JqZWN0SW1wbCcsNzgwKTtiY2IoMTM3Niw3ODAsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxfSxsSGQpO18uRmI9ZnVuY3Rpb24gbkhkKGEpe3JldHVybiB0aGlzPT09YX07Xy5IYj1mdW5jdGlvbiBySGQoKXtyZXR1cm4gRkNiKHRoaXMpfTtfLnRoPWZ1bmN0aW9uIG1IZChhKXt0aGlzLmQ9YTt0aGlzLmI9WUtkKGEsJ2tleScpO3RoaXMuYz1ZS2QoYSxCdGUpfTtfLlNoPWZ1bmN0aW9uIG9IZCgpe3ZhciBhO2lmKHRoaXMuYT09LTEpe2E9aWlkKHRoaXMsdGhpcy5iKTt0aGlzLmE9YT09bnVsbD8wOnRiKGEpfXJldHVybiB0aGlzLmF9O18uY2Q9ZnVuY3Rpb24gcEhkKCl7cmV0dXJuIGlpZCh0aGlzLHRoaXMuYil9O18uZGQ9ZnVuY3Rpb24gcUhkKCl7cmV0dXJuIGlpZCh0aGlzLHRoaXMuYyl9O18uVGg9ZnVuY3Rpb24gc0hkKGEpe3RoaXMuYT1hfTtfLlVoPWZ1bmN0aW9uIHRIZChhKXt6aWQodGhpcyx0aGlzLmIsYSl9O18uZWQ9ZnVuY3Rpb24gdUhkKGEpe3ZhciBiO2I9aWlkKHRoaXMsdGhpcy5jKTt6aWQodGhpcyx0aGlzLmMsYSk7cmV0dXJuIGJ9O18uYT0wO3ZhciBDNT1tZGIocXRlLCdEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnknLDEzNzYpO2JjYigxMzc3LDEsezEwODoxfSx2SGQpO18uYms9ZnVuY3Rpb24gd0hkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5DaD1mdW5jdGlvbiB4SGQoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkRoPWZ1bmN0aW9uIHlIZChhLGIpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5FaD1mdW5jdGlvbiB6SGQoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLmNrPWZ1bmN0aW9uIEFIZCgpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5kaz1mdW5jdGlvbiBCSGQoKXtyZXR1cm4gdGhpcy5hfTtfLmVrPWZ1bmN0aW9uIENIZCgpe3JldHVybiB0aGlzLmJ9O18uZms9ZnVuY3Rpb24gREhkKCl7cmV0dXJuIHRoaXMuY307Xy5naz1mdW5jdGlvbiBFSGQoKXt0aHJvdyB2YmIobmV3IGJnYil9O18uaGs9ZnVuY3Rpb24gRkhkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5paz1mdW5jdGlvbiBHSGQoYSl7dGhpcy5hPWF9O18uams9ZnVuY3Rpb24gSEhkKGEpe3RoaXMuYj1hfTtfLmtrPWZ1bmN0aW9uIElIZChhKXt0aGlzLmM9YX07dmFyIEQ1PW1kYihxdGUsJ0R5bmFtaWNFT2JqZWN0SW1wbC9EeW5hbWljRVByb3BlcnRpZXNIb2xkZXJJbXBsJywxMzc3KTtiY2IoNTEwLDE1MCx7MTA1OjEsOTI6MSw5MDoxLDU5MDoxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDUxMDoxLDE1MDoxLDExNDoxLDExNToxfSxSSGQpO18uUWc9ZnVuY3Rpb24gU0hkKGEpe3JldHVybiBLSGQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiBUSGQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuZDtjYXNlIDI6cmV0dXJuIGM/KCF0aGlzLmImJih0aGlzLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4Nix0aGlzKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LHRoaXMpKSxGQWQodGhpcy5iKSk7Y2FzZSAzOnJldHVybiBNSGQodGhpcyk7Y2FzZSA0OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyB4TWQobTUsdGhpcyw0KSksdGhpcy5hO2Nhc2UgNTpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgXzRkKG01LHRoaXMsNSkpLHRoaXMuYzt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKChqR2QoKSxPRmQpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD9PRmQ6ZCksYSksYixjKX07Xy5oaD1mdW5jdGlvbiBVSGQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFN4ZCh0aGlzLkFiLGEsYyk7Y2FzZSAzOiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9LSGQodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIEpIZCh0aGlzLEJEKGEsMTQ3KSxjKTt9cmV0dXJuIGY9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLE9GZCk6ZCksYiksNjYpLGYuTmooKS5Raih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksT0ZkKSksYSxjKX07Xy5qaD1mdW5jdGlvbiBWSGQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxUeGQodGhpcy5BYixhLGMpO2Nhc2UgMjpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgc0lkKChqR2QoKSxmR2QpLHg2LHRoaXMpKSxiSWQodGhpcy5iLGEsYyk7Y2FzZSAzOnJldHVybiBKSGQodGhpcyxudWxsLGMpO2Nhc2UgNDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKG01LHRoaXMsNCkpLFR4ZCh0aGlzLmEsYSxjKTt9cmV0dXJuIGU9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLE9GZCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksT0ZkKSksYSxjKX07Xy5saD1mdW5jdGlvbiBXSGQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmQhPW51bGw7Y2FzZSAyOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiAhIU1IZCh0aGlzKTtjYXNlIDQ6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDU6cmV0dXJuICEhdGhpcy5jJiZ0aGlzLmMuaSE9MDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxPRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9PRmQ6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIFhIZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTt5dGQodGhpcy5BYixCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTpPSGQodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBzSWQoKGpHZCgpLGZHZCkseDYsdGhpcykpO2NJZCh0aGlzLmIsYik7cmV0dXJuO2Nhc2UgMzpOSGQodGhpcyxCRChiLDE0NykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKG01LHRoaXMsNCkpO1V4ZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHhNZChtNSx0aGlzLDQpKTt5dGQodGhpcy5hLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IF80ZChtNSx0aGlzLDUpKTtVeGQodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyBfNGQobTUsdGhpcyw1KSk7eXRkKHRoaXMuYyxCRChiLDE0KSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCgoakdkKCksT0ZkKSksWEtkKChjPUJEKEFqZCh0aGlzLDE2KSwyNiksIWM/T0ZkOmMpLGEpLGIpfTtfLnpoPWZ1bmN0aW9uIFlIZCgpe3JldHVybiBqR2QoKSxPRmR9O18uQmg9ZnVuY3Rpb24gWkhkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpQSGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHNJZCgoakdkKCksZkdkKSx4Nix0aGlzKSk7dGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAzOk5IZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeE1kKG01LHRoaXMsNCkpO1V4ZCh0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgXzRkKG01LHRoaXMsNSkpO1V4ZCh0aGlzLmMpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQoKGpHZCgpLE9GZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP09GZDpiKSxhKSl9O18uSWI9ZnVuY3Rpb24gJEhkKCl7cmV0dXJuIFFIZCh0aGlzKX07Xy5kPW51bGw7dmFyIEc1PW1kYihxdGUsJ0VBbm5vdGF0aW9uSW1wbCcsNTEwKTtiY2IoMTUxLDcwNSxBdmUsZElkKTtfLlhoPWZ1bmN0aW9uIGVJZChhLGIpe19IZCh0aGlzLGEsQkQoYiw0MikpfTtfLmxrPWZ1bmN0aW9uIGZJZChhLGIpe3JldHVybiBhSWQodGhpcyxCRChhLDQyKSxiKX07Xy5waT1mdW5jdGlvbiBnSWQoYSl7cmV0dXJuIEJEKEJEKHRoaXMuYyw2OSkucGkoYSksMTMzKX07Xy5aaD1mdW5jdGlvbiBoSWQoKXtyZXR1cm4gQkQodGhpcy5jLDY5KS5aaCgpfTtfLiRoPWZ1bmN0aW9uIGlJZCgpe3JldHVybiBCRCh0aGlzLmMsNjkpLiRoKCl9O18uX2g9ZnVuY3Rpb24gaklkKGEpe3JldHVybiBCRCh0aGlzLmMsNjkpLl9oKGEpfTtfLm1rPWZ1bmN0aW9uIGtJZChhLGIpe3JldHVybiBiSWQodGhpcyxhLGIpfTtfLldqPWZ1bmN0aW9uIGxJZChhKXtyZXR1cm4gQkQodGhpcy5jLDc2KS5XaihhKX07Xy5yaj1mdW5jdGlvbiBtSWQoKXt9O18uZmo9ZnVuY3Rpb24gbklkKCl7cmV0dXJuIEJEKHRoaXMuYyw3NikuZmooKX07Xy50aj1mdW5jdGlvbiBvSWQoYSxiLGMpe3ZhciBkO2Q9QkQoYktkKHRoaXMuYikuTmgoKS5KaCh0aGlzLmIpLDEzMyk7ZC5UaChhKTtkLlVoKGIpO2QuZWQoYyk7cmV0dXJuIGR9O18udWo9ZnVuY3Rpb24gcElkKCl7cmV0dXJuIG5ldyBXNWQodGhpcyl9O18uV2I9ZnVuY3Rpb24gcUlkKGEpe2NJZCh0aGlzLGEpfTtfLlhqPWZ1bmN0aW9uIHJJZCgpe0JEKHRoaXMuYyw3NikuWGooKX07dmFyIHk5PW1kYih5dmUsJ0Vjb3JlRU1hcCcsMTUxKTtiY2IoMTU4LDE1MSxBdmUsc0lkKTtfLnFqPWZ1bmN0aW9uIHRJZCgpe3ZhciBhLGIsYyxkLGUsZjtpZih0aGlzLmQ9PW51bGwpe2Y9S0MoeTQsanZlLDYzLDIqdGhpcy5mKzEsMCwxKTtmb3IoYz10aGlzLmMuS2MoKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChjLm5qKCksMTMzKTtkPWIuU2goKTtlPShkJk9oZSklZi5sZW5ndGg7YT1mW2VdOyFhJiYoYT1mW2VdPW5ldyBXNWQodGhpcykpO2EuRmMoYil9dGhpcy5kPWZ9fTt2YXIgRjU9bWRiKHF0ZSwnRUFubm90YXRpb25JbXBsLzEnLDE1OCk7YmNiKDI4NCw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSwyODQ6MSwxMTQ6MSwxMTU6MX0pO18uX2c9ZnVuY3Rpb24gR0lkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBCY2IoKSwodGhpcy5CYiYyNTYpIT0wP3RydWU6ZmFsc2U7Y2FzZSAzOnJldHVybiBCY2IoKSwodGhpcy5CYiY1MTIpIT0wP3RydWU6ZmFsc2U7Y2FzZSA0OnJldHVybiBtZWIodGhpcy5zKTtjYXNlIDU6cmV0dXJuIG1lYih0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gQmNiKCksdGhpcy4kaigpP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiBCY2IoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHdJZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD90aGlzLnpoKCk6ZCksYSksYixjKX07Xy5qaD1mdW5jdGlvbiBISWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxUeGQodGhpcy5BYixhLGMpO2Nhc2UgOTpyZXR1cm4gdklkKHRoaXMsYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP3RoaXMuemgoKTpkKSxiKSw2NiksZS5OaigpLlJqKHRoaXMseWpkKHRoaXMpLGItYUxkKHRoaXMuemgoKSksYSxjKX07Xy5saD1mdW5jdGlvbiBJSWQoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiAodGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4gKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZMUWQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmTFFkKHRoaXMucSkuaT09MCk7fXJldHVybiBjaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP3RoaXMuemgoKTpiKSxhKSl9O18uc2g9ZnVuY3Rpb24gSklkKGEsYil7dmFyIGMsZDtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7eXRkKHRoaXMuQWIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChHRChiKSk7cmV0dXJuO2Nhc2UgMjpCSWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAzOkNJZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDQ6QUlkKHRoaXMsQkQoYiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKEJEKGIsMTkpLmEpO3JldHVybjtjYXNlIDg6eUlkKHRoaXMsQkQoYiwxMzgpKTtyZXR1cm47Y2FzZSA5OmQ9eElkKHRoaXMsQkQoYiw4NyksbnVsbCk7ISFkJiZkLkZpKCk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP3RoaXMuemgoKTpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBLSWQoKXtyZXR1cm4gakdkKCksaEdkfTtfLkJoPWZ1bmN0aW9uIExJZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKG51bGwpO3JldHVybjtjYXNlIDI6QklkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgMzpDSWQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSA0OkFJZCh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5vaygxKTtyZXR1cm47Y2FzZSA4OnlJZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz14SWQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5GaSgpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLkdoPWZ1bmN0aW9uIE1JZCgpe3dJZCh0aGlzKTt0aGlzLkJifD0xfTtfLllqPWZ1bmN0aW9uIE5JZCgpe3JldHVybiB3SWQodGhpcyl9O18uWmo9ZnVuY3Rpb24gT0lkKCl7cmV0dXJuIHRoaXMudH07Xy4kaj1mdW5jdGlvbiBQSWQoKXt2YXIgYTtyZXR1cm4gYT10aGlzLnQsYT4xfHxhPT0tMX07Xy5oaT1mdW5jdGlvbiBRSWQoKXtyZXR1cm4gKHRoaXMuQmImNTEyKSE9MH07Xy5uaz1mdW5jdGlvbiBSSWQoYSxiKXtyZXR1cm4geklkKHRoaXMsYSxiKX07Xy5vaz1mdW5jdGlvbiBTSWQoYSl7RElkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gVElkKCl7cmV0dXJuIEVJZCh0aGlzKX07Xy5zPTA7Xy50PTE7dmFyIHY3PW1kYihxdGUsJ0VUeXBlZEVsZW1lbnRJbXBsJywyODQpO2JjYig0NDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxNzA6MSw2NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0pO18uUWc9ZnVuY3Rpb24gaUpkKGEpe3JldHVybiBVSWQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiBqSmQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIG1lYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gbWViKHRoaXMudCk7Y2FzZSA2OnJldHVybiBCY2IoKSx0aGlzLiRqKCk/dHJ1ZTpmYWxzZTtjYXNlIDc6cmV0dXJuIEJjYigpLGU9dGhpcy5zLGU+PTE/dHJ1ZTpmYWxzZTtjYXNlIDg6aWYoYilyZXR1cm4gd0lkKHRoaXMpO3JldHVybiB0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gQmNiKCksKHRoaXMuQmImenRlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTE6cmV0dXJuIEJjYigpLCh0aGlzLkJiJkR2ZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDEyOnJldHVybiBCY2IoKSwodGhpcy5CYiZSamUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIFZJZCh0aGlzKTtjYXNlIDE1OnJldHVybiBCY2IoKSwodGhpcy5CYiZDdmUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxNjpyZXR1cm4gQmNiKCksKHRoaXMuQmImb2llKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTc6cmV0dXJuIFdJZCh0aGlzKTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/dGhpcy56aCgpOmQpLGEpLGIsYyl9O18uaGg9ZnVuY3Rpb24ga0pkKGEsYixjKXt2YXIgZCxlLGY7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxTeGQodGhpcy5BYixhLGMpO2Nhc2UgMTc6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP1VJZCh0aGlzLGMpOnRoaXMuQ2IuaWgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gX2hkKHRoaXMsYSwxNyxjKTt9cmV0dXJuIGY9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/dGhpcy56aCgpOmQpLGIpLDY2KSxmLk5qKCkuUWoodGhpcyx5amQodGhpcyksYi1hTGQodGhpcy56aCgpKSxhLGMpfTtfLmpoPWZ1bmN0aW9uIGxKZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFR4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA5OnJldHVybiB2SWQodGhpcyxjKTtjYXNlIDE3OnJldHVybiBfaGQodGhpcyxudWxsLDE3LGMpO31yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD90aGlzLnpoKCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCh0aGlzLnpoKCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gbUpkKGEpe3ZhciBiLGM7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuICh0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiB0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiBjPXRoaXMucyxjPj0xO2Nhc2UgODpyZXR1cm4gISF0aGlzLnImJiF0aGlzLnEuZSYmTFFkKHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuICEhdGhpcy5xJiYhKCEhdGhpcy5yJiYhdGhpcy5xLmUmJkxRZCh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuICh0aGlzLkJiJnp0ZSk9PTA7Y2FzZSAxMTpyZXR1cm4gKHRoaXMuQmImRHZlKSE9MDtjYXNlIDEyOnJldHVybiAodGhpcy5CYiZSamUpIT0wO2Nhc2UgMTM6cmV0dXJuIHRoaXMuaiE9bnVsbDtjYXNlIDE0OnJldHVybiBWSWQodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4gKHRoaXMuQmImQ3ZlKSE9MDtjYXNlIDE2OnJldHVybiAodGhpcy5CYiZvaWUpIT0wO2Nhc2UgMTc6cmV0dXJuICEhV0lkKHRoaXMpO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIG5KZChhLGIpe3ZhciBjLGQ7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOmNKZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOkJJZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDM6Q0lkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgNDpBSWQodGhpcyxCRChiLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnRoaXMub2soQkQoYiwxOSkuYSk7cmV0dXJuO2Nhc2UgODp5SWQodGhpcyxCRChiLDEzOCkpO3JldHVybjtjYXNlIDk6ZD14SWQodGhpcyxCRChiLDg3KSxudWxsKTshIWQmJmQuRmkoKTtyZXR1cm47Y2FzZSAxMDpaSWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAxMTpmSmQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAxMjpkSmQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAxMzokSWQodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMTU6ZUpkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMTY6YUpkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP3RoaXMuemgoKTpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBvSmQoKXtyZXR1cm4gakdkKCksZ0dkfTtfLkJoPWZ1bmN0aW9uIHBKZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpKRCh0aGlzLkNiLDg4KSYmWE1kKCRLZChCRCh0aGlzLkNiLDg4KSksNCk7cG5kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpCSWQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSAzOkNJZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDQ6QUlkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKDEpO3JldHVybjtjYXNlIDg6eUlkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpjPXhJZCh0aGlzLG51bGwsbnVsbCk7ISFjJiZjLkZpKCk7cmV0dXJuO2Nhc2UgMTA6WklkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgMTE6ZkpkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDEyOmRKZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmk9bnVsbDtfSWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTplSmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTY6YUpkKHRoaXMsZmFsc2UpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLkdoPWZ1bmN0aW9uIHFKZCgpe2EyZChxMWQoKE82ZCgpLE02ZCksdGhpcykpO3dJZCh0aGlzKTt0aGlzLkJifD0xfTtfLkdqPWZ1bmN0aW9uIHJKZCgpe3JldHVybiB0aGlzLmZ9O18uemo9ZnVuY3Rpb24gc0pkKCl7cmV0dXJuIFZJZCh0aGlzKX07Xy5Iaj1mdW5jdGlvbiB0SmQoKXtyZXR1cm4gV0lkKHRoaXMpfTtfLkxqPWZ1bmN0aW9uIHVKZCgpe3JldHVybiBudWxsfTtfLnBrPWZ1bmN0aW9uIHZKZCgpe3JldHVybiB0aGlzLmt9O18uYWo9ZnVuY3Rpb24gd0pkKCl7cmV0dXJuIHRoaXMubn07Xy5Naj1mdW5jdGlvbiB4SmQoKXtyZXR1cm4gWElkKHRoaXMpfTtfLk5qPWZ1bmN0aW9uIHlKZCgpe3ZhciBhLGIsYyxkLGUsZixnLGgsaTtpZighdGhpcy5wKXtjPVdJZCh0aGlzKTsoYy5pPT1udWxsJiZUS2QoYyksYy5pKS5sZW5ndGg7ZD10aGlzLkxqKCk7ISFkJiZhTGQoV0lkKGQpKTtlPXdJZCh0aGlzKTtnPWUuQmooKTthPSFnP251bGw6KGcuaSYxKSE9MD9nPT1zYmI/d0k6Zz09V0Q/Skk6Zz09VkQ/Rkk6Zz09VUQ/Qkk6Zz09WEQ/TUk6Zz09cmJiP1VJOmc9PVNEP3hJOnlJOmc7Yj1WSWQodGhpcyk7aD1lLnpqKCk7bjZkKHRoaXMpOyh0aGlzLkJiJm9pZSkhPTAmJighIShmPXQxZCgoTzZkKCksTTZkKSxjKSkmJmYhPXRoaXN8fCEhKGY9XzFkKHExZChNNmQsdGhpcykpKSk/KHRoaXMucD1uZXcgelZkKHRoaXMsZikpOnRoaXMuJGooKT90aGlzLnJrKCk/IWQ/KHRoaXMuQmImQ3ZlKSE9MD8hYT90aGlzLnNrKCk/KHRoaXMucD1uZXcgS1ZkKDQyLHRoaXMpKToodGhpcy5wPW5ldyBLVmQoMCx0aGlzKSk6YT09Q0s/KHRoaXMucD1uZXcgSVZkKDUwLEo0LHRoaXMpKTp0aGlzLnNrKCk/KHRoaXMucD1uZXcgSVZkKDQzLGEsdGhpcykpOih0aGlzLnA9bmV3IElWZCgxLGEsdGhpcykpOiFhP3RoaXMuc2soKT8odGhpcy5wPW5ldyBLVmQoNDQsdGhpcykpOih0aGlzLnA9bmV3IEtWZCgyLHRoaXMpKTphPT1DSz8odGhpcy5wPW5ldyBJVmQoNDEsSjQsdGhpcykpOnRoaXMuc2soKT8odGhpcy5wPW5ldyBJVmQoNDUsYSx0aGlzKSk6KHRoaXMucD1uZXcgSVZkKDMsYSx0aGlzKSk6KHRoaXMuQmImQ3ZlKSE9MD8hYT90aGlzLnNrKCk/KHRoaXMucD1uZXcgTFZkKDQ2LHRoaXMsZCkpOih0aGlzLnA9bmV3IExWZCg0LHRoaXMsZCkpOnRoaXMuc2soKT8odGhpcy5wPW5ldyBKVmQoNDcsYSx0aGlzLGQpKToodGhpcy5wPW5ldyBKVmQoNSxhLHRoaXMsZCkpOiFhP3RoaXMuc2soKT8odGhpcy5wPW5ldyBMVmQoNDgsdGhpcyxkKSk6KHRoaXMucD1uZXcgTFZkKDYsdGhpcyxkKSk6dGhpcy5zaygpPyh0aGlzLnA9bmV3IEpWZCg0OSxhLHRoaXMsZCkpOih0aGlzLnA9bmV3IEpWZCg3LGEsdGhpcyxkKSk6SkQoZSwxNDgpP2E9PUU5Pyh0aGlzLnA9bmV3IEtWZCg0MCx0aGlzKSk6KHRoaXMuQmImNTEyKSE9MD8odGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IEtWZCg4LHRoaXMpKToodGhpcy5wPW5ldyBJVmQoOSxhLHRoaXMpKTohYT8odGhpcy5wPW5ldyBLVmQoMTAsdGhpcykpOih0aGlzLnA9bmV3IElWZCgxMSxhLHRoaXMpKToodGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IEtWZCgxMix0aGlzKSk6KHRoaXMucD1uZXcgSVZkKDEzLGEsdGhpcykpOiFhPyh0aGlzLnA9bmV3IEtWZCgxNCx0aGlzKSk6KHRoaXMucD1uZXcgSVZkKDE1LGEsdGhpcykpOiFkP3RoaXMuc2soKT8odGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IEtWZCgxNix0aGlzKSk6KHRoaXMucD1uZXcgSVZkKDE3LGEsdGhpcykpOiFhPyh0aGlzLnA9bmV3IEtWZCgxOCx0aGlzKSk6KHRoaXMucD1uZXcgSVZkKDE5LGEsdGhpcykpOih0aGlzLkJiJkN2ZSkhPTA/IWE/KHRoaXMucD1uZXcgS1ZkKDIwLHRoaXMpKToodGhpcy5wPW5ldyBJVmQoMjEsYSx0aGlzKSk6IWE/KHRoaXMucD1uZXcgS1ZkKDIyLHRoaXMpKToodGhpcy5wPW5ldyBJVmQoMjMsYSx0aGlzKSk6KGk9ZC50LGk+MXx8aT09LTE/dGhpcy5zaygpPyh0aGlzLkJiJkN2ZSkhPTA/IWE/KHRoaXMucD1uZXcgTFZkKDI0LHRoaXMsZCkpOih0aGlzLnA9bmV3IEpWZCgyNSxhLHRoaXMsZCkpOiFhPyh0aGlzLnA9bmV3IExWZCgyNix0aGlzLGQpKToodGhpcy5wPW5ldyBKVmQoMjcsYSx0aGlzLGQpKToodGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IExWZCgyOCx0aGlzLGQpKToodGhpcy5wPW5ldyBKVmQoMjksYSx0aGlzLGQpKTohYT8odGhpcy5wPW5ldyBMVmQoMzAsdGhpcyxkKSk6KHRoaXMucD1uZXcgSlZkKDMxLGEsdGhpcyxkKSk6dGhpcy5zaygpPyh0aGlzLkJiJkN2ZSkhPTA/IWE/KHRoaXMucD1uZXcgTFZkKDMyLHRoaXMsZCkpOih0aGlzLnA9bmV3IEpWZCgzMyxhLHRoaXMsZCkpOiFhPyh0aGlzLnA9bmV3IExWZCgzNCx0aGlzLGQpKToodGhpcy5wPW5ldyBKVmQoMzUsYSx0aGlzLGQpKToodGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IExWZCgzNix0aGlzLGQpKToodGhpcy5wPW5ldyBKVmQoMzcsYSx0aGlzLGQpKTohYT8odGhpcy5wPW5ldyBMVmQoMzgsdGhpcyxkKSk6KHRoaXMucD1uZXcgSlZkKDM5LGEsdGhpcyxkKSkpOnRoaXMucWsoKT90aGlzLnNrKCk/KHRoaXMucD1uZXcga1dkKEJEKGUsMjYpLHRoaXMsZCkpOih0aGlzLnA9bmV3IGNXZChCRChlLDI2KSx0aGlzLGQpKTpKRChlLDE0OCk/YT09RTk/KHRoaXMucD1uZXcgS1ZkKDQwLHRoaXMpKToodGhpcy5CYiZDdmUpIT0wPyFhPyh0aGlzLnA9bmV3IGpYZChCRChlLDE0OCksYixoLHRoaXMpKToodGhpcy5wPW5ldyBsWGQoYixoLHRoaXMsKENXZCgpLGc9PVdEP3lXZDpnPT1zYmI/dFdkOmc9PVhEP3pXZDpnPT1WRD94V2Q6Zz09VUQ/d1dkOmc9PXJiYj9CV2Q6Zz09U0Q/dVdkOmc9PVREP3ZXZDpBV2QpKSk6IWE/KHRoaXMucD1uZXcgY1hkKEJEKGUsMTQ4KSxiLGgsdGhpcykpOih0aGlzLnA9bmV3IGVYZChiLGgsdGhpcywoQ1dkKCksZz09V0Q/eVdkOmc9PXNiYj90V2Q6Zz09WEQ/eldkOmc9PVZEP3hXZDpnPT1VRD93V2Q6Zz09cmJiP0JXZDpnPT1TRD91V2Q6Zz09VEQ/dldkOkFXZCkpKTp0aGlzLnJrKCk/IWQ/KHRoaXMuQmImQ3ZlKSE9MD90aGlzLnNrKCk/KHRoaXMucD1uZXcgRlhkKEJEKGUsMjYpLHRoaXMpKToodGhpcy5wPW5ldyBEWGQoQkQoZSwyNiksdGhpcykpOnRoaXMuc2soKT8odGhpcy5wPW5ldyBCWGQoQkQoZSwyNiksdGhpcykpOih0aGlzLnA9bmV3IHpYZChCRChlLDI2KSx0aGlzKSk6KHRoaXMuQmImQ3ZlKSE9MD90aGlzLnNrKCk/KHRoaXMucD1uZXcgTlhkKEJEKGUsMjYpLHRoaXMsZCkpOih0aGlzLnA9bmV3IExYZChCRChlLDI2KSx0aGlzLGQpKTp0aGlzLnNrKCk/KHRoaXMucD1uZXcgSlhkKEJEKGUsMjYpLHRoaXMsZCkpOih0aGlzLnA9bmV3IEhYZChCRChlLDI2KSx0aGlzLGQpKTp0aGlzLnNrKCk/IWQ/KHRoaXMuQmImQ3ZlKSE9MD8odGhpcy5wPW5ldyBSWGQoQkQoZSwyNiksdGhpcykpOih0aGlzLnA9bmV3IFBYZChCRChlLDI2KSx0aGlzKSk6KHRoaXMuQmImQ3ZlKSE9MD8odGhpcy5wPW5ldyBWWGQoQkQoZSwyNiksdGhpcyxkKSk6KHRoaXMucD1uZXcgVFhkKEJEKGUsMjYpLHRoaXMsZCkpOiFkPyh0aGlzLkJiJkN2ZSkhPTA/KHRoaXMucD1uZXcgWFhkKEJEKGUsMjYpLHRoaXMpKToodGhpcy5wPW5ldyBuWGQoQkQoZSwyNiksdGhpcykpOih0aGlzLkJiJkN2ZSkhPTA/KHRoaXMucD1uZXcgX1hkKEJEKGUsMjYpLHRoaXMsZCkpOih0aGlzLnA9bmV3IFpYZChCRChlLDI2KSx0aGlzLGQpKX1yZXR1cm4gdGhpcy5wfTtfLklqPWZ1bmN0aW9uIHpKZCgpe3JldHVybiAodGhpcy5CYiZ6dGUpIT0wfTtfLnFrPWZ1bmN0aW9uIEFKZCgpe3JldHVybiBmYWxzZX07Xy5yaz1mdW5jdGlvbiBCSmQoKXtyZXR1cm4gZmFsc2V9O18uSmo9ZnVuY3Rpb24gQ0pkKCl7cmV0dXJuICh0aGlzLkJiJm9pZSkhPTB9O18uT2o9ZnVuY3Rpb24gREpkKCl7cmV0dXJuIFlJZCh0aGlzKX07Xy5zaz1mdW5jdGlvbiBFSmQoKXtyZXR1cm4gZmFsc2V9O18uS2o9ZnVuY3Rpb24gRkpkKCl7cmV0dXJuICh0aGlzLkJiJkN2ZSkhPTB9O18udGs9ZnVuY3Rpb24gR0pkKGEpe3RoaXMuaz1hfTtfLkxoPWZ1bmN0aW9uIEhKZChhKXtjSmQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBJSmQoKXtyZXR1cm4gZ0pkKHRoaXMpfTtfLmU9ZmFsc2U7Xy5uPTA7dmFyIG43PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwnLDQ0OSk7YmNiKDMyMiw0NDksezEwNToxLDkyOjEsOTA6MSwzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMzIyOjEsMTUwOjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9LE9KZCk7Xy5fZz1mdW5jdGlvbiBQSmQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIG1lYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gbWViKHRoaXMudCk7Y2FzZSA2OnJldHVybiBCY2IoKSxMSmQodGhpcyk/dHJ1ZTpmYWxzZTtjYXNlIDc6cmV0dXJuIEJjYigpLGU9dGhpcy5zLGU+PTE/dHJ1ZTpmYWxzZTtjYXNlIDg6aWYoYilyZXR1cm4gd0lkKHRoaXMpO3JldHVybiB0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gQmNiKCksKHRoaXMuQmImenRlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTE6cmV0dXJuIEJjYigpLCh0aGlzLkJiJkR2ZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDEyOnJldHVybiBCY2IoKSwodGhpcy5CYiZSamUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIFZJZCh0aGlzKTtjYXNlIDE1OnJldHVybiBCY2IoKSwodGhpcy5CYiZDdmUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxNjpyZXR1cm4gQmNiKCksKHRoaXMuQmImb2llKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTc6cmV0dXJuIFdJZCh0aGlzKTtjYXNlIDE4OnJldHVybiBCY2IoKSwodGhpcy5CYiZvdGUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxOTppZihiKXJldHVybiBLSmQodGhpcyk7cmV0dXJuIEpKZCh0aGlzKTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKChqR2QoKSxQRmQpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD9QRmQ6ZCksYSksYixjKX07Xy5saD1mdW5jdGlvbiBRSmQoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiAodGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4gKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIExKZCh0aGlzKTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZMUWQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmTFFkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gKHRoaXMuQmImenRlKT09MDtjYXNlIDExOnJldHVybiAodGhpcy5CYiZEdmUpIT0wO2Nhc2UgMTI6cmV0dXJuICh0aGlzLkJiJlJqZSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIFZJZCh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybiAodGhpcy5CYiZDdmUpIT0wO2Nhc2UgMTY6cmV0dXJuICh0aGlzLkJiJm9pZSkhPTA7Y2FzZSAxNzpyZXR1cm4gISFXSWQodGhpcyk7Y2FzZSAxODpyZXR1cm4gKHRoaXMuQmImb3RlKSE9MDtjYXNlIDE5OnJldHVybiAhIUpKZCh0aGlzKTt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxQRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9QRmQ6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIFJKZChhLGIpe3ZhciBjLGQ7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOmNKZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOkJJZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDM6Q0lkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgNDpBSWQodGhpcyxCRChiLDE5KS5hKTtyZXR1cm47Y2FzZSA1Ok5KZCh0aGlzLEJEKGIsMTkpLmEpO3JldHVybjtjYXNlIDg6eUlkKHRoaXMsQkQoYiwxMzgpKTtyZXR1cm47Y2FzZSA5OmQ9eElkKHRoaXMsQkQoYiw4NyksbnVsbCk7ISFkJiZkLkZpKCk7cmV0dXJuO2Nhc2UgMTA6WklkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMTE6ZkpkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMTI6ZEpkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMTM6JElkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDE1OmVKZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDE2OmFKZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDE4Ok1KZCh0aGlzLENjYihERChiKSkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLFBGZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP1BGZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBTSmQoKXtyZXR1cm4gakdkKCksUEZkfTtfLkJoPWZ1bmN0aW9uIFRKZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpKRCh0aGlzLkNiLDg4KSYmWE1kKCRLZChCRCh0aGlzLkNiLDg4KSksNCk7cG5kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpCSWQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSAzOkNJZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDQ6QUlkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLmI9MDtESWQodGhpcywxKTtyZXR1cm47Y2FzZSA4OnlJZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz14SWQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5GaSgpO3JldHVybjtjYXNlIDEwOlpJZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDExOmZKZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMjpkSmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGw7X0lkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6ZUpkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDE2OmFKZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxODpNSmQodGhpcyxmYWxzZSk7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoakdkKCksUEZkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/UEZkOmIpLGEpKX07Xy5HaD1mdW5jdGlvbiBVSmQoKXtLSmQodGhpcyk7YTJkKHExZCgoTzZkKCksTTZkKSx0aGlzKSk7d0lkKHRoaXMpO3RoaXMuQmJ8PTF9O18uJGo9ZnVuY3Rpb24gVkpkKCl7cmV0dXJuIExKZCh0aGlzKX07Xy5uaz1mdW5jdGlvbiBXSmQoYSxiKXt0aGlzLmI9MDt0aGlzLmE9bnVsbDtyZXR1cm4geklkKHRoaXMsYSxiKX07Xy5vaz1mdW5jdGlvbiBYSmQoYSl7TkpkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gWUpkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBnSmQodGhpcyk7YT1uZXcgSmZiKGdKZCh0aGlzKSk7YS5hKz0nIChpRDogJztGZmIoYSwodGhpcy5CYiZvdGUpIT0wKTthLmErPScpJztyZXR1cm4gYS5hfTtfLmI9MDt2YXIgSDU9bWRiKHF0ZSwnRUF0dHJpYnV0ZUltcGwnLDMyMik7YmNiKDM1MSw0MzgsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0pO18udWs9ZnVuY3Rpb24gbktkKGEpe3JldHVybiBhLlRnKCk9PXRoaXN9O18uUWc9ZnVuY3Rpb24gb0tkKGEpe3JldHVybiBhS2QodGhpcyxhKX07Xy5SZz1mdW5jdGlvbiBwS2QoYSxiKXt0aGlzLnc9bnVsbDt0aGlzLkRiPWI8PDE2fHRoaXMuRGImMjU1O3RoaXMuQ2I9YX07Xy5fZz1mdW5jdGlvbiBxS2QoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6aWYoYilyZXR1cm4gYktkKHRoaXMpO3JldHVybiBaSmQodGhpcyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSksdGhpcy5BO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD90aGlzLnpoKCk6ZCksYSksYixjKX07Xy5oaD1mdW5jdGlvbiByS2QoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFN4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9hS2QodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIF9oZCh0aGlzLGEsNixjKTt9cmV0dXJuIGY9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/dGhpcy56aCgpOmQpLGIpLDY2KSxmLk5qKCkuUWoodGhpcyx5amQodGhpcyksYi1hTGQodGhpcy56aCgpKSxhLGMpfTtfLmpoPWZ1bmN0aW9uIHNLZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFR4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OnJldHVybiBfaGQodGhpcyxudWxsLDYsYyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSksVHhkKHRoaXMuQSxhLGMpO31yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD90aGlzLnpoKCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCh0aGlzLnpoKCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gdEtkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiAhIWRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4gISFaSmQodGhpcyk7Y2FzZSA3OnJldHVybiAhIXRoaXMuQSYmdGhpcy5BLmkhPTA7fXJldHVybiBjaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP3RoaXMuemgoKTpiKSxhKSl9O18uc2g9ZnVuY3Rpb24gdUtkKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOmxLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOmlLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSA1OmtLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IEs0ZCh1NSx0aGlzLDcpKTtVeGQodGhpcy5BKTshdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSk7eXRkKHRoaXMuQSxCRChiLDE0KSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP3RoaXMuemgoKTpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiB2S2QoKXtyZXR1cm4gakdkKCksUkZkfTtfLkJoPWZ1bmN0aW9uIHdLZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6SkQodGhpcy5DYiwxNzkpJiYoQkQodGhpcy5DYiwxNzkpLnRiPW51bGwpO3BuZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6JEpkKHRoaXMsbnVsbCk7X0pkKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OmtLZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpO1V4ZCh0aGlzLkEpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLnlqPWZ1bmN0aW9uIHhLZCgpe3ZhciBhO3JldHVybiB0aGlzLkc9PS0xJiYodGhpcy5HPShhPWJLZCh0aGlzKSxhP0hMZChhLk1oKCksdGhpcyk6LTEpKSx0aGlzLkd9O18uemo9ZnVuY3Rpb24geUtkKCl7cmV0dXJuIG51bGx9O18uQWo9ZnVuY3Rpb24gektkKCl7cmV0dXJuIGJLZCh0aGlzKX07Xy52az1mdW5jdGlvbiBBS2QoKXtyZXR1cm4gdGhpcy52fTtfLkJqPWZ1bmN0aW9uIEJLZCgpe3JldHVybiBkS2QodGhpcyl9O18uQ2o9ZnVuY3Rpb24gQ0tkKCl7cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CfTtfLkRqPWZ1bmN0aW9uIERLZCgpe3JldHVybiB0aGlzLkZ9O18ud2o9ZnVuY3Rpb24gRUtkKGEpe3JldHVybiBmS2QodGhpcyxhKX07Xy53az1mdW5jdGlvbiBGS2QoYSl7dGhpcy52PWF9O18ueGs9ZnVuY3Rpb24gR0tkKGEpe2dLZCh0aGlzLGEpfTtfLnlrPWZ1bmN0aW9uIEhLZChhKXt0aGlzLkM9YX07Xy5MaD1mdW5jdGlvbiBJS2QoYSl7bEtkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gSktkKCl7cmV0dXJuIG1LZCh0aGlzKX07Xy5DPW51bGw7Xy5EPW51bGw7Xy5HPS0xO3ZhciBaNT1tZGIocXRlLCdFQ2xhc3NpZmllckltcGwnLDM1MSk7YmNiKDg4LDM1MSx7MTA1OjEsOTI6MSw5MDoxLDI2OjEsMTM4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsODg6MSwzNTE6MSwxNTA6MSw0NzM6MSwxMTQ6MSwxMTU6MSw2NzY6MX0saExkKTtfLnVrPWZ1bmN0aW9uIGlMZChhKXtyZXR1cm4gZExkKHRoaXMsYS5UZygpKX07Xy5fZz1mdW5jdGlvbiBqTGQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIG51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OmlmKGIpcmV0dXJuIGJLZCh0aGlzKTtyZXR1cm4gWkpkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDk6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDEwOnJldHVybiBfS2QodGhpcyk7Y2FzZSAxMTpyZXR1cm4gIXRoaXMucSYmKHRoaXMucT1uZXcgY1VkKG41LHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gT0tkKHRoaXMpO2Nhc2UgMTM6cmV0dXJuIFNLZCh0aGlzKTtjYXNlIDE0OnJldHVybiBTS2QodGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIE9LZCh0aGlzKSx0aGlzLms7Y2FzZSAxNjpyZXR1cm4gUEtkKHRoaXMpO2Nhc2UgMTc6cmV0dXJuIFJLZCh0aGlzKTtjYXNlIDE4OnJldHVybiBUS2QodGhpcyk7Y2FzZSAxOTpyZXR1cm4gVUtkKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIE9LZCh0aGlzKSx0aGlzLm87Y2FzZSAyMTpyZXR1cm4gIXRoaXMucyYmKHRoaXMucz1uZXcgY1VkKHQ1LHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gVktkKHRoaXMpO2Nhc2UgMjM6cmV0dXJuIFFLZCh0aGlzKTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKChqR2QoKSxRRmQpKSxYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD9RRmQ6ZCksYSksYixjKX07Xy5oaD1mdW5jdGlvbiBrTGQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFN4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9hS2QodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIF9oZCh0aGlzLGEsNixjKTtjYXNlIDExOnJldHVybiAhdGhpcy5xJiYodGhpcy5xPW5ldyBjVWQobjUsdGhpcywxMSwxMCkpLFN4ZCh0aGlzLnEsYSxjKTtjYXNlIDIxOnJldHVybiAhdGhpcy5zJiYodGhpcy5zPW5ldyBjVWQodDUsdGhpcywyMSwxNykpLFN4ZCh0aGlzLnMsYSxjKTt9cmV0dXJuIGY9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLFFGZCk6ZCksYiksNjYpLGYuTmooKS5Raih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksUUZkKSksYSxjKX07Xy5qaD1mdW5jdGlvbiBsTGQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxUeGQodGhpcy5BYixhLGMpO2Nhc2UgNjpyZXR1cm4gX2hkKHRoaXMsbnVsbCw2LGMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpLFR4ZCh0aGlzLkEsYSxjKTtjYXNlIDExOnJldHVybiAhdGhpcy5xJiYodGhpcy5xPW5ldyBjVWQobjUsdGhpcywxMSwxMCkpLFR4ZCh0aGlzLnEsYSxjKTtjYXNlIDIxOnJldHVybiAhdGhpcy5zJiYodGhpcy5zPW5ldyBjVWQodDUsdGhpcywyMSwxNykpLFR4ZCh0aGlzLnMsYSxjKTtjYXNlIDIyOnJldHVybiBUeGQoVktkKHRoaXMpLGEsYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxRRmQpOmQpLGIpLDY2KSxlLk5qKCkuUmoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLFFGZCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gbUxkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiAhIWRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIGZhbHNlO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiAhIVpKZCh0aGlzKTtjYXNlIDc6cmV0dXJuICEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuICh0aGlzLkJiJjI1NikhPTA7Y2FzZSA5OnJldHVybiAodGhpcy5CYiY1MTIpIT0wO2Nhc2UgMTA6cmV0dXJuICEhdGhpcy51JiZWS2QodGhpcy51LmEpLmkhPTAmJiEoISF0aGlzLm4mJkZNZCh0aGlzLm4pKTtjYXNlIDExOnJldHVybiAhIXRoaXMucSYmdGhpcy5xLmkhPTA7Y2FzZSAxMjpyZXR1cm4gT0tkKHRoaXMpLmkhPTA7Y2FzZSAxMzpyZXR1cm4gU0tkKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gU0tkKHRoaXMpLHRoaXMuci5pIT0wO2Nhc2UgMTU6cmV0dXJuIE9LZCh0aGlzKSx0aGlzLmsuaSE9MDtjYXNlIDE2OnJldHVybiBQS2QodGhpcykuaSE9MDtjYXNlIDE3OnJldHVybiBSS2QodGhpcykuaSE9MDtjYXNlIDE4OnJldHVybiBUS2QodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBVS2QodGhpcykuaSE9MDtjYXNlIDIwOnJldHVybiBPS2QodGhpcyksISF0aGlzLm87Y2FzZSAyMTpyZXR1cm4gISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuICEhdGhpcy5uJiZGTWQodGhpcy5uKTtjYXNlIDIzOnJldHVybiBRS2QodGhpcykuaSE9MDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxRRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9RRmQ6YiksYSkpfTtfLm9oPWZ1bmN0aW9uIG5MZChhKXt2YXIgYjtiPXRoaXMuaT09bnVsbHx8ISF0aGlzLnEmJnRoaXMucS5pIT0wP251bGw6WUtkKHRoaXMsYSk7cmV0dXJuIGI/YjpCbWQodGhpcyxhKX07Xy5zaD1mdW5jdGlvbiBvTGQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7eXRkKHRoaXMuQWIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDE6bEtkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDI6aUtkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDU6a0tkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpO1V4ZCh0aGlzLkEpOyF0aGlzLkEmJih0aGlzLkE9bmV3IEs0ZCh1NSx0aGlzLDcpKTt5dGQodGhpcy5BLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA4OmVMZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDk6ZkxkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMTA6dndkKF9LZCh0aGlzKSk7eXRkKF9LZCh0aGlzKSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgY1VkKG41LHRoaXMsMTEsMTApKTtVeGQodGhpcy5xKTshdGhpcy5xJiYodGhpcy5xPW5ldyBjVWQobjUsdGhpcywxMSwxMCkpO3l0ZCh0aGlzLnEsQkQoYiwxNCkpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IGNVZCh0NSx0aGlzLDIxLDE3KSk7VXhkKHRoaXMucyk7IXRoaXMucyYmKHRoaXMucz1uZXcgY1VkKHQ1LHRoaXMsMjEsMTcpKTt5dGQodGhpcy5zLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAyMjpVeGQoVktkKHRoaXMpKTt5dGQoVktkKHRoaXMpLEJEKGIsMTQpKTtyZXR1cm47fWRpZCh0aGlzLGEtYUxkKChqR2QoKSxRRmQpKSxYS2QoKGM9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYz9RRmQ6YyksYSksYil9O18uemg9ZnVuY3Rpb24gcExkKCl7cmV0dXJuIGpHZCgpLFFGZH07Xy5CaD1mdW5jdGlvbiBxTGQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkpEKHRoaXMuQ2IsMTc5KSYmKEJEKHRoaXMuQ2IsMTc5KS50Yj1udWxsKTtwbmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiRKZCh0aGlzLG51bGwpO19KZCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTprS2QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IEs0ZCh1NSx0aGlzLDcpKTtVeGQodGhpcy5BKTtyZXR1cm47Y2FzZSA4OmVMZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSA5OmZMZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMDohIXRoaXMudSYmdndkKHRoaXMudSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgY1VkKG41LHRoaXMsMTEsMTApKTtVeGQodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBjVWQodDUsdGhpcywyMSwxNykpO1V4ZCh0aGlzLnMpO3JldHVybjtjYXNlIDIyOiEhdGhpcy5uJiZVeGQodGhpcy5uKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKChqR2QoKSxRRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9RRmQ6YiksYSkpfTtfLkdoPWZ1bmN0aW9uIHJMZCgpe3ZhciBhLGI7T0tkKHRoaXMpO1NLZCh0aGlzKTtQS2QodGhpcyk7UktkKHRoaXMpO1RLZCh0aGlzKTtVS2QodGhpcyk7UUtkKHRoaXMpO291ZChTTWQoJEtkKHRoaXMpKSk7aWYodGhpcy5zKXtmb3IoYT0wLGI9dGhpcy5zLmk7YTxiOysrYSl7Q21kKHF1ZCh0aGlzLnMsYSkpfX1pZih0aGlzLnEpe2ZvcihhPTAsYj10aGlzLnEuaTthPGI7KythKXtDbWQocXVkKHRoaXMucSxhKSl9fW8xZCgoTzZkKCksTTZkKSx0aGlzKS5uZSgpO3RoaXMuQmJ8PTF9O18uSWI9ZnVuY3Rpb24gc0xkKCl7cmV0dXJuIGdMZCh0aGlzKX07Xy5rPW51bGw7Xy5yPW51bGw7dmFyIEtLZCxMS2QsTUtkO3ZhciBZNT1tZGIocXRlLCdFQ2xhc3NJbXBsJyw4OCk7YmNiKDE5OTQsMTk5MyxPdmUpO18uVmg9ZnVuY3Rpb24gdExkKGEsYil7cmV0dXJuIFB4ZCh0aGlzLGEsYil9O18uV2g9ZnVuY3Rpb24gdUxkKGEpe3JldHVybiBQeGQodGhpcyx0aGlzLmksYSl9O18uWGg9ZnVuY3Rpb24gdkxkKGEsYil7UXhkKHRoaXMsYSxiKX07Xy5ZaD1mdW5jdGlvbiB3TGQoYSl7UnhkKHRoaXMsYSl9O18ubGs9ZnVuY3Rpb24geExkKGEsYil7cmV0dXJuIFN4ZCh0aGlzLGEsYil9O18ucGk9ZnVuY3Rpb24geUxkKGEpe3JldHVybiBudWQodGhpcyxhKX07Xy5taz1mdW5jdGlvbiBDTGQoYSxiKXtyZXR1cm4gVHhkKHRoaXMsYSxiKX07Xy5taT1mdW5jdGlvbiBETGQoYSxiKXtyZXR1cm4gWnhkKHRoaXMsYSxiKX07Xy5aaD1mdW5jdGlvbiB6TGQoKXtyZXR1cm4gbmV3ICR5ZCh0aGlzKX07Xy4kaD1mdW5jdGlvbiBBTGQoKXtyZXR1cm4gbmV3IGJ6ZCh0aGlzKX07Xy5faD1mdW5jdGlvbiBCTGQoYSl7cmV0dXJuIHp0ZCh0aGlzLGEpfTt2YXIgUDk9bWRiKHl2ZSwnTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwnLDE5OTQpO2JjYig2MjIsMTk5NCxQdmUpO18uSGM9ZnVuY3Rpb24gTkxkKGEpe3JldHVybiBFTGQodGhpcyxhKX07Xy5aaT1mdW5jdGlvbiBPTGQoYSxiLGMsZCxlKXtyZXR1cm4gRkxkKHRoaXMsYSxiLGMsZCxlKX07Xy4kaT1mdW5jdGlvbiBQTGQoYSl7R0xkKHRoaXMsYSl9O18uV2o9ZnVuY3Rpb24gUUxkKGEpe3JldHVybiB0aGlzfTtfLmFrPWZ1bmN0aW9uIFJMZCgpe3JldHVybiBYS2QodGhpcy5lLlRnKCksdGhpcy5haigpKX07Xy5faT1mdW5jdGlvbiBTTGQoKXtyZXR1cm4gdGhpcy5haygpfTtfLmFqPWZ1bmN0aW9uIFRMZCgpe3JldHVybiBiTGQodGhpcy5lLlRnKCksdGhpcy5haygpKX07Xy56az1mdW5jdGlvbiBVTGQoKXtyZXR1cm4gQkQodGhpcy5haygpLllqKCksMjYpLkJqKCl9O18uQWs9ZnVuY3Rpb24gVkxkKCl7cmV0dXJuIHpVZChCRCh0aGlzLmFrKCksMTgpKS5ufTtfLkFpPWZ1bmN0aW9uIFdMZCgpe3JldHVybiB0aGlzLmV9O18uQms9ZnVuY3Rpb24gWExkKCl7cmV0dXJuIHRydWV9O18uQ2s9ZnVuY3Rpb24gWUxkKCl7cmV0dXJuIGZhbHNlfTtfLkRrPWZ1bmN0aW9uIFpMZCgpe3JldHVybiBmYWxzZX07Xy5Faz1mdW5jdGlvbiAkTGQoKXtyZXR1cm4gZmFsc2V9O18uWGM9ZnVuY3Rpb24gX0xkKGEpe3JldHVybiBITGQodGhpcyxhKX07Xy5jaj1mdW5jdGlvbiBhTWQoYSxiKXt2YXIgYztyZXR1cm4gYz1CRChhLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP2MuZ2godGhpcy5lLHRoaXMuQWsoKSx0aGlzLnprKCksYik6Yy5naCh0aGlzLmUsYkxkKGMuVGcoKSx6VWQoQkQodGhpcy5haygpLDE4KSkpLG51bGwsYik6Yy5naCh0aGlzLmUsLTEtdGhpcy5haigpLG51bGwsYil9O18uZGo9ZnVuY3Rpb24gYk1kKGEsYil7dmFyIGM7cmV0dXJuIGM9QkQoYSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9jLmloKHRoaXMuZSx0aGlzLkFrKCksdGhpcy56aygpLGIpOmMuaWgodGhpcy5lLGJMZChjLlRnKCkselVkKEJEKHRoaXMuYWsoKSwxOCkpKSxudWxsLGIpOmMuaWgodGhpcy5lLC0xLXRoaXMuYWooKSxudWxsLGIpfTtfLnJrPWZ1bmN0aW9uIGNNZCgpe3JldHVybiBmYWxzZX07Xy5Gaz1mdW5jdGlvbiBkTWQoKXtyZXR1cm4gdHJ1ZX07Xy53aj1mdW5jdGlvbiBlTWQoYSl7cmV0dXJuIHFFZCh0aGlzLmQsYSl9O18uZWo9ZnVuY3Rpb24gZk1kKCl7cmV0dXJuIG9pZCh0aGlzLmUpfTtfLmZqPWZ1bmN0aW9uIGdNZCgpe3JldHVybiB0aGlzLmkhPTB9O18ucmk9ZnVuY3Rpb24gaE1kKGEpe3JldHVybiBpemQodGhpcy5kLGEpfTtfLmxpPWZ1bmN0aW9uIGlNZChhLGIpe3JldHVybiB0aGlzLkZrKCkmJnRoaXMuRWsoKT9JTGQodGhpcyxhLEJEKGIsNTYpKTpifTtfLkdrPWZ1bmN0aW9uIGpNZChhKXtyZXR1cm4gYS5raCgpP3hpZCh0aGlzLmUsQkQoYSw0OSkpOmF9O18uV2I9ZnVuY3Rpb24ga01kKGEpe0pMZCh0aGlzLGEpfTtfLlBjPWZ1bmN0aW9uIGxNZCgpe3JldHVybiBLTGQodGhpcyl9O18uUWM9ZnVuY3Rpb24gbU1kKGEpe3ZhciBiO2lmKHRoaXMuRWsoKSl7Zm9yKGI9dGhpcy5pLTE7Yj49MDstLWIpe3F1ZCh0aGlzLGIpfX1yZXR1cm4geHVkKHRoaXMsYSl9O18uWGo9ZnVuY3Rpb24gbk1kKCl7VXhkKHRoaXMpfTtfLm9pPWZ1bmN0aW9uIG9NZChhLGIpe3JldHVybiBMTGQodGhpcyxhLGIpfTt2YXIgdDk9bWRiKHl2ZSwnRWNvcmVFTGlzdCcsNjIyKTtiY2IoNDk2LDYyMixQdmUscE1kKTtfLmFpPWZ1bmN0aW9uIHFNZCgpe3JldHVybiBmYWxzZX07Xy5haj1mdW5jdGlvbiByTWQoKXtyZXR1cm4gdGhpcy5jfTtfLmJqPWZ1bmN0aW9uIHNNZCgpe3JldHVybiBmYWxzZX07Xy5Gaz1mdW5jdGlvbiB0TWQoKXtyZXR1cm4gdHJ1ZX07Xy5oaT1mdW5jdGlvbiB1TWQoKXtyZXR1cm4gdHJ1ZX07Xy5saT1mdW5jdGlvbiB2TWQoYSxiKXtyZXR1cm4gYn07Xy5uaT1mdW5jdGlvbiB3TWQoKXtyZXR1cm4gZmFsc2V9O18uYz0wO3ZhciBkOT1tZGIoeXZlLCdFT2JqZWN0RUxpc3QnLDQ5Nik7YmNiKDg1LDQ5NixQdmUseE1kKTtfLmJqPWZ1bmN0aW9uIHlNZCgpe3JldHVybiB0cnVlfTtfLkRrPWZ1bmN0aW9uIHpNZCgpe3JldHVybiBmYWxzZX07Xy5yaz1mdW5jdGlvbiBBTWQoKXtyZXR1cm4gdHJ1ZX07dmFyIFo4PW1kYih5dmUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0Jyw4NSk7YmNiKDU0NSw4NSxQdmUsQk1kKTtfLmNpPWZ1bmN0aW9uIENNZCgpe3RoaXMuYj10cnVlfTtfLmZqPWZ1bmN0aW9uIERNZCgpe3JldHVybiB0aGlzLmJ9O18uWGo9ZnVuY3Rpb24gRU1kKCl7dmFyIGE7VXhkKHRoaXMpO2lmKG9pZCh0aGlzLmUpKXthPXRoaXMuYjt0aGlzLmI9ZmFsc2U7VWhkKHRoaXMuZSxuZXcgcVNkKHRoaXMuZSwyLHRoaXMuYyxhLGZhbHNlKSl9ZWxzZXt0aGlzLmI9ZmFsc2V9fTtfLmI9ZmFsc2U7dmFyIFk4PW1kYih5dmUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUnLDU0NSk7YmNiKDExNDAsNTQ1LFB2ZSxKTWQpO18uaWk9ZnVuY3Rpb24gTk1kKGEsYil7dmFyIGMsZDtyZXR1cm4gYz1CRChXeGQodGhpcyxhLGIpLDg3KSxvaWQodGhpcy5lKSYmR0xkKHRoaXMsbmV3IEVTZCh0aGlzLmEsNywoakdkKCksU0ZkKSxtZWIoYiksKGQ9Yy5jLEpEKGQsODgpP0JEKGQsMjYpOl9GZCksYSkpLGN9O18uamo9ZnVuY3Rpb24gT01kKGEsYil7cmV0dXJuIEdNZCh0aGlzLEJEKGEsODcpLGIpfTtfLmtqPWZ1bmN0aW9uIFBNZChhLGIpe3JldHVybiBITWQodGhpcyxCRChhLDg3KSxiKX07Xy5saj1mdW5jdGlvbiBRTWQoYSxiLGMpe3JldHVybiBJTWQodGhpcyxCRChhLDg3KSxCRChiLDg3KSxjKX07Xy5aaT1mdW5jdGlvbiBLTWQoYSxiLGMsZCxlKXtzd2l0Y2goYSl7Y2FzZSAzOntyZXR1cm4gRkxkKHRoaXMsYSxiLGMsZCx0aGlzLmk+MSl9Y2FzZSA1OntyZXR1cm4gRkxkKHRoaXMsYSxiLGMsZCx0aGlzLmktQkQoYywxNSkuZ2MoKT4wKX1kZWZhdWx0OntyZXR1cm4gbmV3IHBTZCh0aGlzLmUsYSx0aGlzLmMsYixjLGQsdHJ1ZSl9fX07Xy5paj1mdW5jdGlvbiBMTWQoKXtyZXR1cm4gdHJ1ZX07Xy5maj1mdW5jdGlvbiBNTWQoKXtyZXR1cm4gRk1kKHRoaXMpfTtfLlhqPWZ1bmN0aW9uIFJNZCgpe1V4ZCh0aGlzKX07dmFyIE41PW1kYihxdGUsJ0VDbGFzc0ltcGwvMScsMTE0MCk7YmNiKDExNTQsMTE1MyxkdmUpO18udWk9ZnVuY3Rpb24gVk1kKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2M9YS54aSgpO2lmKGMhPTgpe2Q9VU1kKGEpO2lmKGQ9PTApe3N3aXRjaChjKXtjYXNlIDE6Y2FzZSA5OntoPWEuQmkoKTtpZihoIT1udWxsKXtiPSRLZChCRChoLDQ3MykpOyFiLmMmJihiLmM9bmV3IHhZZCk7RnRkKGIuYyxhLkFpKCkpfWc9YS56aSgpO2lmKGchPW51bGwpe2U9QkQoZyw0NzMpO2lmKChlLkJiJjEpPT0wKXtiPSRLZChlKTshYi5jJiYoYi5jPW5ldyB4WWQpO3d0ZChiLmMsQkQoYS5BaSgpLDI2KSl9fWJyZWFrfWNhc2UgMzp7Zz1hLnppKCk7aWYoZyE9bnVsbCl7ZT1CRChnLDQ3Myk7aWYoKGUuQmImMSk9PTApe2I9JEtkKGUpOyFiLmMmJihiLmM9bmV3IHhZZCk7d3RkKGIuYyxCRChhLkFpKCksMjYpKX19YnJlYWt9Y2FzZSA1OntnPWEuemkoKTtpZihnIT1udWxsKXtmb3IoZj1CRChnLDE0KS5LYygpO2YuT2IoKTspe2U9QkQoZi5QYigpLDQ3Myk7aWYoKGUuQmImMSk9PTApe2I9JEtkKGUpOyFiLmMmJihiLmM9bmV3IHhZZCk7d3RkKGIuYyxCRChhLkFpKCksMjYpKX19fWJyZWFrfWNhc2UgNDp7aD1hLkJpKCk7aWYoaCE9bnVsbCl7ZT1CRChoLDQ3Myk7aWYoKGUuQmImMSk9PTApe2I9JEtkKGUpOyFiLmMmJihiLmM9bmV3IHhZZCk7RnRkKGIuYyxhLkFpKCkpfX1icmVha31jYXNlIDY6e2g9YS5CaSgpO2lmKGghPW51bGwpe2ZvcihmPUJEKGgsMTQpLktjKCk7Zi5PYigpOyl7ZT1CRChmLlBiKCksNDczKTtpZigoZS5CYiYxKT09MCl7Yj0kS2QoZSk7IWIuYyYmKGIuYz1uZXcgeFlkKTtGdGQoYi5jLGEuQWkoKSl9fX1icmVha319fXRoaXMuSGsoZCl9fTtfLkhrPWZ1bmN0aW9uIFdNZChhKXtUTWQodGhpcyxhKX07Xy5iPTYzO3ZhciBwNz1tZGIocXRlLCdFU3VwZXJBZGFwdGVyJywxMTU0KTtiY2IoMTE1NSwxMTU0LGR2ZSxZTWQpO18uSGs9ZnVuY3Rpb24gWk1kKGEpe1hNZCh0aGlzLGEpfTt2YXIgSTU9bWRiKHF0ZSwnRUNsYXNzSW1wbC8xMCcsMTE1NSk7YmNiKDExNDQsNjk2LFB2ZSk7Xy5WaD1mdW5jdGlvbiAkTWQoYSxiKXtyZXR1cm4gaXVkKHRoaXMsYSxiKX07Xy5XaD1mdW5jdGlvbiBfTWQoYSl7cmV0dXJuIGp1ZCh0aGlzLGEpfTtfLlhoPWZ1bmN0aW9uIGFOZChhLGIpe2t1ZCh0aGlzLGEsYil9O18uWWg9ZnVuY3Rpb24gYk5kKGEpe2x1ZCh0aGlzLGEpfTtfLnBpPWZ1bmN0aW9uIGROZChhKXtyZXR1cm4gbnVkKHRoaXMsYSl9O18ubWk9ZnVuY3Rpb24gbE5kKGEsYil7cmV0dXJuIHV1ZCh0aGlzLGEsYil9O18ubGs9ZnVuY3Rpb24gY05kKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLlpoPWZ1bmN0aW9uIGVOZCgpe3JldHVybiBuZXcgJHlkKHRoaXMpfTtfLiRoPWZ1bmN0aW9uIGZOZCgpe3JldHVybiBuZXcgYnpkKHRoaXMpfTtfLl9oPWZ1bmN0aW9uIGdOZChhKXtyZXR1cm4genRkKHRoaXMsYSl9O18ubWs9ZnVuY3Rpb24gaE5kKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLldqPWZ1bmN0aW9uIGlOZChhKXtyZXR1cm4gdGhpc307Xy5maj1mdW5jdGlvbiBqTmQoKXtyZXR1cm4gdGhpcy5pIT0wfTtfLldiPWZ1bmN0aW9uIGtOZChhKXt0aHJvdyB2YmIobmV3IGJnYil9O18uWGo9ZnVuY3Rpb24gbU5kKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTt2YXIgczk9bWRiKHl2ZSwnRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdCcsMTE0NCk7YmNiKDMxOSwxMTQ0LFB2ZSxuTmQpO18ubmk9ZnVuY3Rpb24gb05kKCl7cmV0dXJuIGZhbHNlfTt2YXIgcjk9bWRiKHl2ZSwnRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZScsMzE5KTtiY2IoMTE0NywzMTksUHZlLHJOZCk7Xy5YYz1mdW5jdGlvbiBzTmQoYSl7dmFyIGIsYyxkO2lmKEpEKGEsMTcwKSl7Yj1CRChhLDE3MCk7Yz1iLmFqKCk7aWYoYyE9LTEpe2ZvcihkPXRoaXMuaTtjPGQ7KytjKXtpZihQRCh0aGlzLmdbY10pPT09UEQoYSkpe3JldHVybiBjfX19fXJldHVybiAtMX07dmFyIEo1PW1kYihxdGUsJ0VDbGFzc0ltcGwvMUVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXNMaXN0JywxMTQ3KTtiY2IoMTE0MSw0OTcsb3VlLHdOZCk7Xy5yaT1mdW5jdGlvbiB4TmQoYSl7cmV0dXJuIEtDKGo1LFR2ZSw4NyxhLDAsMSl9O18ubmk9ZnVuY3Rpb24geU5kKCl7cmV0dXJuIGZhbHNlfTt2YXIgSzU9bWRiKHF0ZSwnRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCcsMTE0MSk7YmNiKDYyMyw0OTcsb3VlLHpOZCk7Xy5yaT1mdW5jdGlvbiBBTmQoYSl7cmV0dXJuIEtDKHQ1LE12ZSwxNzAsYSwwLDEpfTtfLm5pPWZ1bmN0aW9uIEJOZCgpe3JldHVybiBmYWxzZX07dmFyIEw1PW1kYihxdGUsJ0VDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Jyw2MjMpO2JjYig3NDEsNDk3LG91ZSxDTmQpO18ucmk9ZnVuY3Rpb24gRE5kKGEpe3JldHVybiBLQyhxNSxNdmUsMTgsYSwwLDEpfTtfLm5pPWZ1bmN0aW9uIEVOZCgpe3JldHVybiBmYWxzZX07dmFyIE01PW1kYihxdGUsJ0VDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QnLDc0MSk7YmNiKDExNDIsNDk3LG91ZSxHTmQpO18uYmk9ZnVuY3Rpb24gSE5kKGEsYil7Rk5kKHRoaXMsQkQoYiwzNCkpfTtfLnJpPWZ1bmN0aW9uIElOZChhKXtyZXR1cm4gS0MoYjUsTXZlLDM0LGEsMCwxKX07Xy5uaT1mdW5jdGlvbiBKTmQoKXtyZXR1cm4gZmFsc2V9O3ZhciBPNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzInLDExNDIpO2JjYigxMTQzLDQ5NyxvdWUsS05kKTtfLnJpPWZ1bmN0aW9uIExOZChhKXtyZXR1cm4gS0MoYjUsTXZlLDM0LGEsMCwxKX07Xy5uaT1mdW5jdGlvbiBNTmQoKXtyZXR1cm4gZmFsc2V9O3ZhciBQNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzMnLDExNDMpO2JjYigxMTQ1LDMxOSxQdmUsUE5kKTtfLkZjPWZ1bmN0aW9uIFFOZChhKXtyZXR1cm4gTk5kKHRoaXMsQkQoYSwzNCkpfTtfLlloPWZ1bmN0aW9uIFJOZChhKXtPTmQodGhpcyxCRChhLDM0KSl9O3ZhciBRNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzQnLDExNDUpO2JjYigxMTQ2LDMxOSxQdmUsVU5kKTtfLkZjPWZ1bmN0aW9uIFZOZChhKXtyZXR1cm4gU05kKHRoaXMsQkQoYSwxOCkpfTtfLlloPWZ1bmN0aW9uIFdOZChhKXtUTmQodGhpcyxCRChhLDE4KSl9O3ZhciBSNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzUnLDExNDYpO2JjYigxMTQ4LDQ5NyxvdWUsWE5kKTtfLnJpPWZ1bmN0aW9uIFlOZChhKXtyZXR1cm4gS0MobjUsTnZlLDU5LGEsMCwxKX07Xy5uaT1mdW5jdGlvbiBaTmQoKXtyZXR1cm4gZmFsc2V9O3ZhciBTNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzYnLDExNDgpO2JjYigxMTQ5LDQ5NyxvdWUsJE5kKTtfLnJpPWZ1bmN0aW9uIF9OZChhKXtyZXR1cm4gS0MocTUsTXZlLDE4LGEsMCwxKX07Xy5uaT1mdW5jdGlvbiBhT2QoKXtyZXR1cm4gZmFsc2V9O3ZhciBUNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzcnLDExNDkpO2JjYigxOTk3LDE5OTYsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw2OToxfSk7Xy5WaD1mdW5jdGlvbiBiT2QoYSxiKXtyZXR1cm4gcXdkKHRoaXMsYSxiKX07Xy5XaD1mdW5jdGlvbiBjT2QoYSl7cmV0dXJuIHF3ZCh0aGlzLHRoaXMuVmkoKSxhKX07Xy5YaD1mdW5jdGlvbiBkT2QoYSxiKXtyd2QodGhpcyxhLGIpfTtfLlloPWZ1bmN0aW9uIGVPZChhKXtzd2QodGhpcyxhKX07Xy5saz1mdW5jdGlvbiBmT2QoYSxiKXtyZXR1cm4gdHdkKHRoaXMsYSxiKX07Xy5taz1mdW5jdGlvbiBsT2QoYSxiKXtyZXR1cm4gdXdkKHRoaXMsYSxiKX07Xy5taT1mdW5jdGlvbiBtT2QoYSxiKXtyZXR1cm4gd3dkKHRoaXMsYSxiKX07Xy5waT1mdW5jdGlvbiBnT2QoYSl7cmV0dXJuIHRoaXMuT2koYSl9O18uWmg9ZnVuY3Rpb24gaE9kKCl7cmV0dXJuIG5ldyAkeWQodGhpcyl9O18uR2k9ZnVuY3Rpb24gaU9kKCl7cmV0dXJuIHRoaXMuSmkoKX07Xy4kaD1mdW5jdGlvbiBqT2QoKXtyZXR1cm4gbmV3IGJ6ZCh0aGlzKX07Xy5faD1mdW5jdGlvbiBrT2QoYSl7cmV0dXJuIHp0ZCh0aGlzLGEpfTt2YXIgTDg9bWRiKHl2ZSwnRGVsZWdhdGluZ05vdGlmeWluZ0ludGVybmFsRUxpc3RJbXBsJywxOTk3KTtiY2IoNzQyLDE5OTcsVXZlKTtfLmFpPWZ1bmN0aW9uIHJPZCgpe3ZhciBhO2E9WEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSkuWWooKTtyZXR1cm4gSkQoYSwxNDgpJiYhSkQoYSw0NTcpJiYoYS5CaigpLmkmMSk9PTB9O18uSGM9ZnVuY3Rpb24gc09kKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7aWYodGhpcy5GaygpKXtpPXRoaXMuVmkoKTtpZihpPjQpe2lmKHRoaXMud2ooYSkpe2lmKHRoaXMucmsoKSl7ZD1CRChhLDQ5KTtjPWQuVWcoKTtoPWM9PXRoaXMuYiYmKHRoaXMuRGsoKT9kLk9nKGQuVmcoKSxCRChYS2Qod2pkKHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpKT09elVkKEJEKFhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubjotMS1kLlZnKCk9PXRoaXMuYWooKSk7aWYodGhpcy5FaygpJiYhaCYmIWMmJiEhZC5aZygpKXtmb3IoZT0wO2U8aTsrK2Upe2I9b09kKHRoaXMsdGhpcy5PaShlKSk7aWYoUEQoYik9PT1QRChhKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gaH1lbHNlIGlmKHRoaXMuRGsoKSYmIXRoaXMuQ2soKSl7Zj1CRChhLDU2KS5haCh6VWQoQkQoWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSk7aWYoUEQoZik9PT1QRCh0aGlzLmIpKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGY9PW51bGx8fCFCRChmLDU2KS5raCgpKXtyZXR1cm4gZmFsc2V9fX1lbHNle3JldHVybiBmYWxzZX19Zz10aGlzLkxpKGEpO2lmKHRoaXMuRWsoKSYmIWcpe2ZvcihlPTA7ZTxpOysrZSl7ZD1vT2QodGhpcyx0aGlzLk9pKGUpKTtpZihQRChkKT09PVBEKGEpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBnfWVsc2V7cmV0dXJuIHRoaXMuTGkoYSl9fTtfLlppPWZ1bmN0aW9uIHRPZChhLGIsYyxkLGUpe3JldHVybiBuZXcgcFNkKHRoaXMuYixhLHRoaXMuYWooKSxiLGMsZCxlKX07Xy4kaT1mdW5jdGlvbiB1T2QoYSl7VWhkKHRoaXMuYixhKX07Xy5Xaj1mdW5jdGlvbiB2T2QoYSl7cmV0dXJuIHRoaXN9O18uX2k9ZnVuY3Rpb24gd09kKCl7cmV0dXJuIFhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpfTtfLmFqPWZ1bmN0aW9uIHhPZCgpe3JldHVybiBiTGQod2pkKHRoaXMuYiksWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSkpfTtfLkFpPWZ1bmN0aW9uIHlPZCgpe3JldHVybiB0aGlzLmJ9O18uQms9ZnVuY3Rpb24gek9kKCl7cmV0dXJuICEhWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSkuWWooKS5CaigpfTtfLmJqPWZ1bmN0aW9uIEFPZCgpe3ZhciBhLGI7Yj1YS2Qod2pkKHRoaXMuYiksdGhpcy5haigpKTtpZihKRChiLDk5KSl7YT1CRChiLDE4KTtyZXR1cm4gKGEuQmImb3RlKSE9MHx8ISF6VWQoQkQoYiwxOCkpfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5Daz1mdW5jdGlvbiBCT2QoKXt2YXIgYSxiLGMsZDtiPVhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpO2lmKEpEKGIsOTkpKXthPUJEKGIsMTgpO2M9elVkKGEpO3JldHVybiAhIWMmJihkPWMudCxkPjF8fGQ9PS0xKX1lbHNle3JldHVybiBmYWxzZX19O18uRGs9ZnVuY3Rpb24gQ09kKCl7dmFyIGEsYixjO2I9WEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSk7aWYoSkQoYiw5OSkpe2E9QkQoYiwxOCk7Yz16VWQoYSk7cmV0dXJuICEhY31lbHNle3JldHVybiBmYWxzZX19O18uRWs9ZnVuY3Rpb24gRE9kKCl7dmFyIGEsYjtiPVhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpO2lmKEpEKGIsOTkpKXthPUJEKGIsMTgpO3JldHVybiAoYS5CYiZUamUpIT0wfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5YYz1mdW5jdGlvbiBFT2QoYSl7dmFyIGIsYyxkLGU7ZD10aGlzLlFpKGEpO2lmKGQ+PTApcmV0dXJuIGQ7aWYodGhpcy5GaygpKXtmb3IoYz0wLGU9dGhpcy5WaSgpO2M8ZTsrK2Mpe2I9b09kKHRoaXMsdGhpcy5PaShjKSk7aWYoUEQoYik9PT1QRChhKSl7cmV0dXJuIGN9fX1yZXR1cm4gLTF9O18uY2o9ZnVuY3Rpb24gRk9kKGEsYil7dmFyIGM7cmV0dXJuIGM9QkQoYSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9jLmdoKHRoaXMuYix6VWQoQkQoWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uLEJEKFhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCksYik6Yy5naCh0aGlzLmIsYkxkKGMuVGcoKSx6VWQoQkQoWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSksbnVsbCxiKTpjLmdoKHRoaXMuYiwtMS10aGlzLmFqKCksbnVsbCxiKX07Xy5kaj1mdW5jdGlvbiBHT2QoYSxiKXt2YXIgYztyZXR1cm4gYz1CRChhLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP2MuaWgodGhpcy5iLHpVZChCRChYS2Qod2pkKHRoaXMuYiksdGhpcy5haigpKSwxOCkpLm4sQkQoWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSwyNikuQmooKSxiKTpjLmloKHRoaXMuYixiTGQoYy5UZygpLHpVZChCRChYS2Qod2pkKHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxudWxsLGIpOmMuaWgodGhpcy5iLC0xLXRoaXMuYWooKSxudWxsLGIpfTtfLnJrPWZ1bmN0aW9uIEhPZCgpe3ZhciBhLGI7Yj1YS2Qod2pkKHRoaXMuYiksdGhpcy5haigpKTtpZihKRChiLDk5KSl7YT1CRChiLDE4KTtyZXR1cm4gKGEuQmImb3RlKSE9MH1lbHNle3JldHVybiBmYWxzZX19O18uRms9ZnVuY3Rpb24gSU9kKCl7cmV0dXJuIEpEKFhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksODgpfTtfLndqPWZ1bmN0aW9uIEpPZChhKXtyZXR1cm4gWEtkKHdqZCh0aGlzLmIpLHRoaXMuYWooKSkuWWooKS53aihhKX07Xy5laj1mdW5jdGlvbiBLT2QoKXtyZXR1cm4gb2lkKHRoaXMuYil9O18uZmo9ZnVuY3Rpb24gTE9kKCl7cmV0dXJuICF0aGlzLlJpKCl9O18uaGk9ZnVuY3Rpb24gTU9kKCl7cmV0dXJuIFhLZCh3amQodGhpcy5iKSx0aGlzLmFqKCkpLmhpKCl9O18ubGk9ZnVuY3Rpb24gTk9kKGEsYil7cmV0dXJuIG5PZCh0aGlzLGEsYil9O18uV2I9ZnVuY3Rpb24gT09kKGEpe3Z3ZCh0aGlzKTt5dGQodGhpcyxCRChhLDE1KSl9O18uUGM9ZnVuY3Rpb24gUE9kKCl7dmFyIGE7aWYodGhpcy5FaygpKXtmb3IoYT10aGlzLlZpKCktMTthPj0wOy0tYSl7bk9kKHRoaXMsYSx0aGlzLk9pKGEpKX19cmV0dXJuIHRoaXMuV2koKX07Xy5RYz1mdW5jdGlvbiBRT2QoYSl7dmFyIGI7aWYodGhpcy5FaygpKXtmb3IoYj10aGlzLlZpKCktMTtiPj0wOy0tYil7bk9kKHRoaXMsYix0aGlzLk9pKGIpKX19cmV0dXJuIHRoaXMuWGkoYSl9O18uWGo9ZnVuY3Rpb24gUk9kKCl7dndkKHRoaXMpfTtfLm9pPWZ1bmN0aW9uIFNPZChhLGIpe3JldHVybiBwT2QodGhpcyxhLGIpfTt2YXIgSzg9bWRiKHl2ZSwnRGVsZWdhdGluZ0Vjb3JlRUxpc3QnLDc0Mik7YmNiKDExNTAsNzQyLFV2ZSxZT2QpO18uSGk9ZnVuY3Rpb24gX09kKGEsYil7VE9kKHRoaXMsYSxCRChiLDI2KSl9O18uSWk9ZnVuY3Rpb24gYVBkKGEpe1VPZCh0aGlzLEJEKGEsMjYpKX07Xy5PaT1mdW5jdGlvbiBnUGQoYSl7dmFyIGIsYztyZXR1cm4gYj1CRChxdWQoVktkKHRoaXMuYSksYSksODcpLGM9Yi5jLEpEKGMsODgpP0JEKGMsMjYpOihqR2QoKSxfRmQpfTtfLlRpPWZ1bmN0aW9uIGxQZChhKXt2YXIgYixjO3JldHVybiBiPUJEKFh4ZChWS2QodGhpcy5hKSxhKSw4NyksYz1iLmMsSkQoYyw4OCk/QkQoYywyNik6KGpHZCgpLF9GZCl9O18uVWk9ZnVuY3Rpb24gbVBkKGEsYil7cmV0dXJuIFdPZCh0aGlzLGEsQkQoYiwyNikpfTtfLmFpPWZ1bmN0aW9uIFpPZCgpe3JldHVybiBmYWxzZX07Xy5aaT1mdW5jdGlvbiAkT2QoYSxiLGMsZCxlKXtyZXR1cm4gbnVsbH07Xy5KaT1mdW5jdGlvbiBiUGQoKXtyZXR1cm4gbmV3IEVQZCh0aGlzKX07Xy5LaT1mdW5jdGlvbiBjUGQoKXtVeGQoVktkKHRoaXMuYSkpfTtfLkxpPWZ1bmN0aW9uIGRQZChhKXtyZXR1cm4gVk9kKHRoaXMsYSl9O18uTWk9ZnVuY3Rpb24gZVBkKGEpe3ZhciBiLGM7Zm9yKGM9YS5LYygpO2MuT2IoKTspe2I9Yy5QYigpO2lmKCFWT2QodGhpcyxiKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX07Xy5OaT1mdW5jdGlvbiBmUGQoYSl7dmFyIGIsYyxkO2lmKEpEKGEsMTUpKXtkPUJEKGEsMTUpO2lmKGQuZ2MoKT09VktkKHRoaXMuYSkuaSl7Zm9yKGI9ZC5LYygpLGM9bmV3IEZ5ZCh0aGlzKTtiLk9iKCk7KXtpZihQRChiLlBiKCkpIT09UEQoRHlkKGMpKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtfLlBpPWZ1bmN0aW9uIGhQZCgpe3ZhciBhLGIsYyxkLGU7Yz0xO2ZvcihiPW5ldyBGeWQoVktkKHRoaXMuYSkpO2IuZSE9Yi5pLmdjKCk7KXthPUJEKER5ZChiKSw4Nyk7ZD0oZT1hLmMsSkQoZSw4OCk/QkQoZSwyNik6KGpHZCgpLF9GZCkpO2M9MzEqYysoIWQ/MDpGQ2IoZCkpfXJldHVybiBjfTtfLlFpPWZ1bmN0aW9uIGlQZChhKXt2YXIgYixjLGQsZTtkPTA7Zm9yKGM9bmV3IEZ5ZChWS2QodGhpcy5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9QkQoRHlkKGMpLDg3KTtpZihQRChhKT09PVBEKChlPWIuYyxKRChlLDg4KT9CRChlLDI2KTooakdkKCksX0ZkKSkpKXtyZXR1cm4gZH0rK2R9cmV0dXJuIC0xfTtfLlJpPWZ1bmN0aW9uIGpQZCgpe3JldHVybiBWS2QodGhpcy5hKS5pPT0wfTtfLlNpPWZ1bmN0aW9uIGtQZCgpe3JldHVybiBudWxsfTtfLlZpPWZ1bmN0aW9uIG5QZCgpe3JldHVybiBWS2QodGhpcy5hKS5pfTtfLldpPWZ1bmN0aW9uIG9QZCgpe3ZhciBhLGIsYyxkLGUsZjtmPVZLZCh0aGlzLmEpLmk7ZT1LQyhTSSxVaGUsMSxmLDUsMSk7Yz0wO2ZvcihiPW5ldyBGeWQoVktkKHRoaXMuYSkpO2IuZSE9Yi5pLmdjKCk7KXthPUJEKER5ZChiKSw4Nyk7ZVtjKytdPShkPWEuYyxKRChkLDg4KT9CRChkLDI2KTooakdkKCksX0ZkKSl9cmV0dXJuIGV9O18uWGk9ZnVuY3Rpb24gcFBkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2g9VktkKHRoaXMuYSkuaTtpZihhLmxlbmd0aDxoKXtlPWl6ZChyYihhKS5jLGgpO2E9ZX1hLmxlbmd0aD5oJiZOQyhhLGgsbnVsbCk7ZD0wO2ZvcihjPW5ldyBGeWQoVktkKHRoaXMuYSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUJEKER5ZChjKSw4Nyk7Zj0oZz1iLmMsSkQoZyw4OCk/QkQoZywyNik6KGpHZCgpLF9GZCkpO05DKGEsZCsrLGYpfXJldHVybiBhfTtfLllpPWZ1bmN0aW9uIHFQZCgpe3ZhciBhLGIsYyxkLGU7ZT1uZXcgSGZiO2UuYSs9J1snO2E9VktkKHRoaXMuYSk7Zm9yKGI9MCxkPVZLZCh0aGlzLmEpLmk7YjxkOyl7RWZiKGUseGZiKChjPUJEKHF1ZChhLGIpLDg3KS5jLEpEKGMsODgpP0JEKGMsMjYpOihqR2QoKSxfRmQpKSkpOysrYjxkJiYoZS5hKz1TaGUsZSl9ZS5hKz0nXSc7cmV0dXJuIGUuYX07Xy4kaT1mdW5jdGlvbiByUGQoYSl7fTtfLmFqPWZ1bmN0aW9uIHNQZCgpe3JldHVybiAxMH07Xy5Caz1mdW5jdGlvbiB0UGQoKXtyZXR1cm4gdHJ1ZX07Xy5iaj1mdW5jdGlvbiB1UGQoKXtyZXR1cm4gZmFsc2V9O18uQ2s9ZnVuY3Rpb24gdlBkKCl7cmV0dXJuIGZhbHNlfTtfLkRrPWZ1bmN0aW9uIHdQZCgpe3JldHVybiBmYWxzZX07Xy5Faz1mdW5jdGlvbiB4UGQoKXtyZXR1cm4gdHJ1ZX07Xy5yaz1mdW5jdGlvbiB5UGQoKXtyZXR1cm4gZmFsc2V9O18uRms9ZnVuY3Rpb24gelBkKCl7cmV0dXJuIHRydWV9O18ud2o9ZnVuY3Rpb24gQVBkKGEpe3JldHVybiBKRChhLDg4KX07Xy5maj1mdW5jdGlvbiBCUGQoKXtyZXR1cm4gY0xkKHRoaXMuYSl9O18uaGk9ZnVuY3Rpb24gQ1BkKCl7cmV0dXJuIHRydWV9O18ubmk9ZnVuY3Rpb24gRFBkKCl7cmV0dXJuIHRydWV9O3ZhciBWNT1tZGIocXRlLCdFQ2xhc3NJbXBsLzgnLDExNTApO2JjYigxMTUxLDE5NjQsTGllLEVQZCk7Xy5aYz1mdW5jdGlvbiBGUGQoYSl7cmV0dXJuIHp0ZCh0aGlzLmEsYSl9O18uZ2M9ZnVuY3Rpb24gR1BkKCl7cmV0dXJuIFZLZCh0aGlzLmEuYSkuaX07dmFyIFU1PW1kYihxdGUsJ0VDbGFzc0ltcGwvOC8xJywxMTUxKTtiY2IoMTE1Miw0OTcsb3VlLEhQZCk7Xy5yaT1mdW5jdGlvbiBJUGQoYSl7cmV0dXJuIEtDKGQ1LFVoZSwxMzgsYSwwLDEpfTtfLm5pPWZ1bmN0aW9uIEpQZCgpe3JldHVybiBmYWxzZX07dmFyIFc1PW1kYihxdGUsJ0VDbGFzc0ltcGwvOScsMTE1Mik7YmNiKDExMzksNTMsZ2tlLEtQZCk7dmFyIFg1PW1kYihxdGUsJ0VDbGFzc0ltcGwvTXlIYXNoU2V0JywxMTM5KTtiY2IoNTY2LDM1MSx7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0ODoxLDgzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSxNUGQpO18uX2c9ZnVuY3Rpb24gTlBkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBkS2QodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OmlmKGIpcmV0dXJuIGJLZCh0aGlzKTtyZXR1cm4gWkpkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTt9cmV0dXJuIGJpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/dGhpcy56aCgpOmQpLGEpLGIsYyl9O18ubGg9ZnVuY3Rpb24gT1BkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiAhIWRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4gISFaSmQodGhpcyk7Y2FzZSA3OnJldHVybiAhIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybiAodGhpcy5CYiYyNTYpPT0wO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj90aGlzLnpoKCk6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIFBQZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTt5dGQodGhpcy5BYixCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTpsS2QodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMjppS2QodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgNTprS2QodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSk7VXhkKHRoaXMuQSk7IXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpO3l0ZCh0aGlzLkEsQkQoYiwxNCkpO3JldHVybjtjYXNlIDg6TFBkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP3RoaXMuemgoKTpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBRUGQoKXtyZXR1cm4gakdkKCksVEZkfTtfLkJoPWZ1bmN0aW9uIFJQZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6SkQodGhpcy5DYiwxNzkpJiYoQkQodGhpcy5DYiwxNzkpLnRiPW51bGwpO3BuZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6JEpkKHRoaXMsbnVsbCk7X0pkKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OmtLZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpO1V4ZCh0aGlzLkEpO3JldHVybjtjYXNlIDg6TFBkKHRoaXMsdHJ1ZSk7cmV0dXJuO31laWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP3RoaXMuemgoKTpiKSxhKSl9O18uR2g9ZnVuY3Rpb24gU1BkKCl7bzFkKChPNmQoKSxNNmQpLHRoaXMpLm5lKCk7dGhpcy5CYnw9MX07Xy5Gaj1mdW5jdGlvbiBUUGQoKXt2YXIgYSxiLGM7aWYoIXRoaXMuYyl7YT1sNmQoYktkKHRoaXMpKTtpZighYS5kYygpKXtmb3IoYz1hLktjKCk7Yy5PYigpOyl7Yj1HRChjLlBiKCkpOyEhRG1kKHRoaXMsYikmJms2ZCh0aGlzKX19fXJldHVybiB0aGlzLmJ9O18uemo9ZnVuY3Rpb24gVVBkKCl7dmFyIGI7aWYoIXRoaXMuZSl7Yj1udWxsO3RyeXtiPWRLZCh0aGlzKX1jYXRjaChhKXthPXViYihhKTtpZighSkQoYSwxMDIpKXRocm93IHZiYihhKX10aGlzLmQ9bnVsbDshIWImJihiLmkmMSkhPTAmJihiPT1zYmI/KHRoaXMuZD0oQmNiKCksemNiKSk6Yj09V0Q/KHRoaXMuZD1tZWIoMCkpOmI9PVZEPyh0aGlzLmQ9bmV3IE5kYigwKSk6Yj09VUQ/KHRoaXMuZD0wKTpiPT1YRD8odGhpcy5kPUFlYigwKSk6Yj09cmJiPyh0aGlzLmQ9V2ViKDApKTpiPT1TRD8odGhpcy5kPVNjYigwKSk6KHRoaXMuZD1iZGIoMCkpKTt0aGlzLmU9dHJ1ZX1yZXR1cm4gdGhpcy5kfTtfLkVqPWZ1bmN0aW9uIFZQZCgpe3JldHVybiAodGhpcy5CYiYyNTYpIT0wfTtfLklrPWZ1bmN0aW9uIFdQZChhKXthJiYodGhpcy5EPSdvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yJyl9O18ueGs9ZnVuY3Rpb24gWFBkKGEpe2dLZCh0aGlzLGEpO3RoaXMuSWsoYSl9O18ueWs9ZnVuY3Rpb24gWVBkKGEpe3RoaXMuQz1hO3RoaXMuZT1mYWxzZX07Xy5JYj1mdW5jdGlvbiBaUGQoKXt2YXIgYTtpZigodGhpcy5EYiY2NCkhPTApcmV0dXJuIG1LZCh0aGlzKTthPW5ldyBKZmIobUtkKHRoaXMpKTthLmErPScgKHNlcmlhbGl6YWJsZTogJztGZmIoYSwodGhpcy5CYiYyNTYpIT0wKTthLmErPScpJztyZXR1cm4gYS5hfTtfLmM9ZmFsc2U7Xy5kPW51bGw7Xy5lPWZhbHNlO3ZhciAkNT1tZGIocXRlLCdFRGF0YVR5cGVJbXBsJyw1NjYpO2JjYig0NTcsNTY2LHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ4OjEsODM0OjEsNjcxOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsNDU3OjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9LGFRZCk7Xy5fZz1mdW5jdGlvbiBiUWQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGRLZCh0aGlzKTtjYXNlIDQ6cmV0dXJuICRQZCh0aGlzKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6aWYoYilyZXR1cm4gYktkKHRoaXMpO3JldHVybiBaSmQodGhpcyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gQmNiKCksKHRoaXMuQmImMjU2KSE9MD90cnVlOmZhbHNlO2Nhc2UgOTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKGc1LHRoaXMsOSw1KSksdGhpcy5hO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKGpHZCgpLFVGZCkpLFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP1VGZDpkKSxhKSxiLGMpfTtfLmhoPWZ1bmN0aW9uIGNRZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksU3hkKHRoaXMuQWIsYSxjKTtjYXNlIDY6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP2FLZCh0aGlzLGMpOnRoaXMuQ2IuaWgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gX2hkKHRoaXMsYSw2LGMpO2Nhc2UgOTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKGc1LHRoaXMsOSw1KSksU3hkKHRoaXMuYSxhLGMpO31yZXR1cm4gZj1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oakdkKCksVUZkKTpkKSxiKSw2NiksZi5OaigpLlFqKHRoaXMseWpkKHRoaXMpLGItYUxkKChqR2QoKSxVRmQpKSxhLGMpfTtfLmpoPWZ1bmN0aW9uIGRRZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFR4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OnJldHVybiBfaGQodGhpcyxudWxsLDYsYyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSksVHhkKHRoaXMuQSxhLGMpO2Nhc2UgOTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgY1VkKGc1LHRoaXMsOSw1KSksVHhkKHRoaXMuYSxhLGMpO31yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oakdkKCksVUZkKTpkKSxiKSw2NiksZS5OaigpLlJqKHRoaXMseWpkKHRoaXMpLGItYUxkKChqR2QoKSxVRmQpKSxhLGMpfTtfLmxoPWZ1bmN0aW9uIGVRZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4gISFkS2QodGhpcyk7Y2FzZSA0OnJldHVybiAhISRQZCh0aGlzKTtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4gISFaSmQodGhpcyk7Y2FzZSA3OnJldHVybiAhIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybiAodGhpcy5CYiYyNTYpPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLmEmJnRoaXMuYS5pIT0wO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQoKGpHZCgpLFVGZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP1VGZDpiKSxhKSl9O18uc2g9ZnVuY3Rpb24gZlFkKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOmxLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOmlLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSA1OmtLZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IEs0ZCh1NSx0aGlzLDcpKTtVeGQodGhpcy5BKTshdGhpcy5BJiYodGhpcy5BPW5ldyBLNGQodTUsdGhpcyw3KSk7eXRkKHRoaXMuQSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgODpMUGQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChnNSx0aGlzLDksNSkpO1V4ZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IGNVZChnNSx0aGlzLDksNSkpO3l0ZCh0aGlzLmEsQkQoYiwxNCkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLFVGZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP1VGZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBnUWQoKXtyZXR1cm4gakdkKCksVUZkfTtfLkJoPWZ1bmN0aW9uIGhRZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6SkQodGhpcy5DYiwxNzkpJiYoQkQodGhpcy5DYiwxNzkpLnRiPW51bGwpO3BuZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6JEpkKHRoaXMsbnVsbCk7X0pkKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OmtLZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgSzRkKHU1LHRoaXMsNykpO1V4ZCh0aGlzLkEpO3JldHVybjtjYXNlIDg6TFBkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBjVWQoZzUsdGhpcyw5LDUpKTtVeGQodGhpcy5hKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKChqR2QoKSxVRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9VRmQ6YiksYSkpfTtfLkdoPWZ1bmN0aW9uIGlRZCgpe3ZhciBhLGI7aWYodGhpcy5hKXtmb3IoYT0wLGI9dGhpcy5hLmk7YTxiOysrYSl7Q21kKHF1ZCh0aGlzLmEsYSkpfX1vMWQoKE82ZCgpLE02ZCksdGhpcykubmUoKTt0aGlzLkJifD0xfTtfLnpqPWZ1bmN0aW9uIGpRZCgpe3JldHVybiAkUGQodGhpcyl9O18ud2o9ZnVuY3Rpb24ga1FkKGEpe2lmKGEhPW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07Xy5Jaz1mdW5jdGlvbiBsUWQoYSl7fTt2YXIgXzU9bWRiKHF0ZSwnRUVudW1JbXBsJyw0NTcpO2JjYig1NzMsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTk0MDoxLDY3ODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDU3MzoxLDE1MDoxLDExNDoxLDExNToxfSxyUWQpO18ubmU9ZnVuY3Rpb24gQVFkKCl7cmV0dXJuIHRoaXMuemJ9O18uUWc9ZnVuY3Rpb24gc1FkKGEpe3JldHVybiBtUWQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiB0UWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIG1lYih0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBlPXRoaXMuYyxlPT1udWxsP3RoaXMuemI6ZTtjYXNlIDU6cmV0dXJuIHRoaXMuRGI+PjE2PT01P0JEKHRoaXMuQ2IsNjcxKTpudWxsO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKGpHZCgpLFZGZCkpLFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP1ZGZDpkKSxhKSxiLGMpfTtfLmhoPWZ1bmN0aW9uIHVRZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksU3hkKHRoaXMuQWIsYSxjKTtjYXNlIDU6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP21RZCh0aGlzLGMpOnRoaXMuQ2IuaWgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gX2hkKHRoaXMsYSw1LGMpO31yZXR1cm4gZj1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oakdkKCksVkZkKTpkKSxiKSw2NiksZi5OaigpLlFqKHRoaXMseWpkKHRoaXMpLGItYUxkKChqR2QoKSxWRmQpKSxhLGMpfTtfLmpoPWZ1bmN0aW9uIHZRZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLFR4ZCh0aGlzLkFiLGEsYyk7Y2FzZSA1OnJldHVybiBfaGQodGhpcyxudWxsLDUsYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxWRmQpOmQpLGIpLDY2KSxlLk5qKCkuUmoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLFZGZCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gd1FkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuZCE9MDtjYXNlIDM6cmV0dXJuICEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4gISEodGhpcy5EYj4+MTY9PTU/QkQodGhpcy5DYiw2NzEpOm51bGwpO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQoKGpHZCgpLFZGZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP1ZGZDpiKSxhKSl9O18uc2g9ZnVuY3Rpb24geFFkKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO3l0ZCh0aGlzLkFiLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAxOnBuZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAyOnFRZCh0aGlzLEJEKGIsMTkpLmEpO3JldHVybjtjYXNlIDM6b1FkKHRoaXMsQkQoYiwxOTQwKSk7cmV0dXJuO2Nhc2UgNDpwUWQodGhpcyxHRChiKSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCgoakdkKCksVkZkKSksWEtkKChjPUJEKEFqZCh0aGlzLDE2KSwyNiksIWM/VkZkOmMpLGEpLGIpfTtfLnpoPWZ1bmN0aW9uIHlRZCgpe3JldHVybiBqR2QoKSxWRmR9O18uQmg9ZnVuY3Rpb24gelFkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpwbmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnFRZCh0aGlzLDApO3JldHVybjtjYXNlIDM6b1FkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpwUWQodGhpcyxudWxsKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKChqR2QoKSxWRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9WRmQ6YiksYSkpfTtfLkliPWZ1bmN0aW9uIEJRZCgpe3ZhciBhO3JldHVybiBhPXRoaXMuYyxhPT1udWxsP3RoaXMuemI6YX07Xy5iPW51bGw7Xy5jPW51bGw7Xy5kPTA7dmFyIGE2PW1kYihxdGUsJ0VFbnVtTGl0ZXJhbEltcGwnLDU3Myk7dmFyIGM2PW9kYihxdGUsJ0VGYWN0b3J5SW1wbC9JbnRlcm5hbEVEYXRlVGltZUZvcm1hdCcpO2JjYig0ODksMSx7MjAxNToxfSxFUWQpO3ZhciBiNj1tZGIocXRlLCdFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Jyw0ODkpO2JjYigyNDEsMTE1LHsxMDU6MSw5MjoxLDkwOjEsODc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwyNDE6MSwxMTQ6MSwxMTU6MX0sVVFkKTtfLlNnPWZ1bmN0aW9uIFZRZChhLGIsYyl7dmFyIGQ7Yz1faGQodGhpcyxhLGIsYyk7aWYoISF0aGlzLmUmJkpEKGEsMTcwKSl7ZD1NUWQodGhpcyx0aGlzLmUpO2QhPXRoaXMuYyYmKGM9UVFkKHRoaXMsZCxjKSl9cmV0dXJuIGN9O18uX2c9ZnVuY3Rpb24gV1FkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmY7Y2FzZSAxOnJldHVybiAhdGhpcy5kJiYodGhpcy5kPW5ldyB4TWQoajUsdGhpcywxKSksdGhpcy5kO2Nhc2UgMjppZihiKXJldHVybiBLUWQodGhpcyk7cmV0dXJuIHRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6aWYoYilyZXR1cm4gSlFkKHRoaXMpO3JldHVybiB0aGlzLmE7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoakdkKCksWEZkKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/WEZkOmQpLGEpLGIsYyl9O18uamg9ZnVuY3Rpb24gWFFkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIElRZCh0aGlzLG51bGwsYyk7Y2FzZSAxOnJldHVybiAhdGhpcy5kJiYodGhpcy5kPW5ldyB4TWQoajUsdGhpcywxKSksVHhkKHRoaXMuZCxhLGMpO2Nhc2UgMzpyZXR1cm4gR1FkKHRoaXMsbnVsbCxjKTt9cmV0dXJuIGU9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLFhGZCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksWEZkKSksYSxjKX07Xy5saD1mdW5jdGlvbiBZUWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLmY7Y2FzZSAxOnJldHVybiAhIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAyOnJldHVybiAhIXRoaXMuYztjYXNlIDM6cmV0dXJuICEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gISF0aGlzLmU7Y2FzZSA1OnJldHVybiAhIXRoaXMuYTt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxYRmQpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9YRmQ6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIFpRZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6U1FkKHRoaXMsQkQoYiw4NykpO3JldHVybjtjYXNlIDE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgeE1kKGo1LHRoaXMsMSkpO1V4ZCh0aGlzLmQpOyF0aGlzLmQmJih0aGlzLmQ9bmV3IHhNZChqNSx0aGlzLDEpKTt5dGQodGhpcy5kLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSAzOlBRZCh0aGlzLEJEKGIsODcpKTtyZXR1cm47Y2FzZSA0OlJRZCh0aGlzLEJEKGIsODM2KSk7cmV0dXJuO2Nhc2UgNTpOUWQodGhpcyxCRChiLDEzOCkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLFhGZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP1hGZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiAkUWQoKXtyZXR1cm4gakdkKCksWEZkfTtfLkJoPWZ1bmN0aW9uIF9RZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOlNRZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgeE1kKGo1LHRoaXMsMSkpO1V4ZCh0aGlzLmQpO3JldHVybjtjYXNlIDM6UFFkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpSUWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1Ok5RZCh0aGlzLG51bGwpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQoKGpHZCgpLFhGZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP1hGZDpiKSxhKSl9O18uSWI9ZnVuY3Rpb24gYVJkKCl7dmFyIGE7YT1uZXcgV2ZiKEVpZCh0aGlzKSk7YS5hKz0nIChleHByZXNzaW9uOiAnO1RRZCh0aGlzLGEpO2EuYSs9JyknO3JldHVybiBhLmF9O3ZhciBGUWQ7dmFyIGU2PW1kYihxdGUsJ0VHZW5lcmljVHlwZUltcGwnLDI0MSk7YmNiKDE5NjksMTk2NCxWdmUpO18uWGg9ZnVuY3Rpb24gY1JkKGEsYil7YlJkKHRoaXMsYSxiKX07Xy5saz1mdW5jdGlvbiBkUmQoYSxiKXtiUmQodGhpcyx0aGlzLmdjKCksYSk7cmV0dXJuIGJ9O18ucGk9ZnVuY3Rpb24gZVJkKGEpe3JldHVybiBVdCh0aGlzLkdpKCksYSl9O18uWmg9ZnVuY3Rpb24gZlJkKCl7cmV0dXJuIHRoaXMuJGgoKX07Xy5HaT1mdW5jdGlvbiBnUmQoKXtyZXR1cm4gbmV3IE8wZCh0aGlzKX07Xy4kaD1mdW5jdGlvbiBoUmQoKXtyZXR1cm4gdGhpcy5faCgwKX07Xy5faD1mdW5jdGlvbiBpUmQoYSl7cmV0dXJuIHRoaXMuR2koKS5aYyhhKX07Xy5taz1mdW5jdGlvbiBqUmQoYSxiKXt6ZSh0aGlzLGEsdHJ1ZSk7cmV0dXJuIGJ9O18uaWk9ZnVuY3Rpb24ga1JkKGEsYil7dmFyIGMsZDtkPVZ0KHRoaXMsYik7Yz10aGlzLlpjKGEpO2MuUmIoZCk7cmV0dXJuIGR9O18uamk9ZnVuY3Rpb24gbFJkKGEsYil7dmFyIGM7emUodGhpcyxiLHRydWUpO2M9dGhpcy5aYyhhKTtjLlJiKGIpfTt2YXIgQjg9bWRiKHl2ZSwnQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCcsMTk2OSk7YmNiKDQ4NiwxOTY5LFZ2ZSxxUmQpO18ucGk9ZnVuY3Rpb24gclJkKGEpe3JldHVybiBVdCh0aGlzLkdpKCksYSl9O18uWmg9ZnVuY3Rpb24gc1JkKCl7aWYodGhpcy5iPT1udWxsKXtyZXR1cm4gTFJkKCksTFJkKCksS1JkfXJldHVybiB0aGlzLkprKCl9O18uR2k9ZnVuY3Rpb24gdFJkKCl7cmV0dXJuIG5ldyB3NGQodGhpcy5hLHRoaXMuYil9O18uJGg9ZnVuY3Rpb24gdVJkKCl7aWYodGhpcy5iPT1udWxsKXtyZXR1cm4gTFJkKCksTFJkKCksS1JkfXJldHVybiB0aGlzLkprKCl9O18uX2g9ZnVuY3Rpb24gdlJkKGEpe3ZhciBiLGM7aWYodGhpcy5iPT1udWxsKXtpZihhPDB8fGE+MSl7dGhyb3cgdmJiKG5ldyBxY2IoZ3ZlK2ErJywgc2l6ZT0wJykpfXJldHVybiBMUmQoKSxMUmQoKSxLUmR9Yz10aGlzLkprKCk7Zm9yKGI9MDtiPGE7KytiKXtNUmQoYyl9cmV0dXJuIGN9O18uZGM9ZnVuY3Rpb24gd1JkKCl7dmFyIGEsYixjLGQsZSxmO2lmKHRoaXMuYiE9bnVsbCl7Zm9yKGM9MDtjPHRoaXMuYi5sZW5ndGg7KytjKXthPXRoaXMuYltjXTtpZighdGhpcy5NaygpfHx0aGlzLmEubWgoYSkpe2Y9dGhpcy5hLmJoKGEsZmFsc2UpO1E2ZCgpO2lmKEJEKGEsNjYpLk9qKCkpe2I9QkQoZiwxNTMpO2ZvcihkPTAsZT1iLmdjKCk7ZDxlOysrZCl7aWYob1JkKGIuaWwoZCkpJiZiLmpsKGQpIT1udWxsKXtyZXR1cm4gZmFsc2V9fX1lbHNlIGlmKGEuJGooKSl7aWYoIUJEKGYsMTQpLmRjKCkpe3JldHVybiBmYWxzZX19ZWxzZSBpZihmIT1udWxsKXtyZXR1cm4gZmFsc2V9fX19cmV0dXJuIHRydWV9O18uS2M9ZnVuY3Rpb24geFJkKCl7cmV0dXJuIHBSZCh0aGlzKX07Xy5aYz1mdW5jdGlvbiB5UmQoYSl7dmFyIGIsYztpZih0aGlzLmI9PW51bGwpe2lmKGEhPTApe3Rocm93IHZiYihuZXcgcWNiKGd2ZSthKycsIHNpemU9MCcpKX1yZXR1cm4gTFJkKCksTFJkKCksS1JkfWM9dGhpcy5MaygpP3RoaXMuS2soKTp0aGlzLkprKCk7Zm9yKGI9MDtiPGE7KytiKXtNUmQoYyl9cmV0dXJuIGN9O18uaWk9ZnVuY3Rpb24gelJkKGEsYil7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLmppPWZ1bmN0aW9uIEFSZChhLGIpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5Kaz1mdW5jdGlvbiBCUmQoKXtyZXR1cm4gbmV3IFJSZCh0aGlzLmEsdGhpcy5iKX07Xy5Laz1mdW5jdGlvbiBDUmQoKXtyZXR1cm4gbmV3IGRTZCh0aGlzLmEsdGhpcy5iKX07Xy5Maz1mdW5jdGlvbiBEUmQoKXtyZXR1cm4gdHJ1ZX07Xy5nYz1mdW5jdGlvbiBFUmQoKXt2YXIgYSxiLGMsZCxlLGYsZztlPTA7aWYodGhpcy5iIT1udWxsKXtmb3IoYz0wO2M8dGhpcy5iLmxlbmd0aDsrK2Mpe2E9dGhpcy5iW2NdO2lmKCF0aGlzLk1rKCl8fHRoaXMuYS5taChhKSl7Zz10aGlzLmEuYmgoYSxmYWxzZSk7UTZkKCk7aWYoQkQoYSw2NikuT2ooKSl7Yj1CRChnLDE1Myk7Zm9yKGQ9MCxmPWIuZ2MoKTtkPGY7KytkKXtvUmQoYi5pbChkKSkmJmIuamwoZCkhPW51bGwmJisrZX19ZWxzZSBhLiRqKCk/KGUrPUJEKGcsMTQpLmdjKCkpOmchPW51bGwmJisrZX19fXJldHVybiBlfTtfLk1rPWZ1bmN0aW9uIEZSZCgpe3JldHVybiB0cnVlfTt2YXIgbVJkO3ZhciBSOD1tZGIoeXZlLCdFQ29udGVudHNFTGlzdCcsNDg2KTtiY2IoMTE1Niw0ODYsVnZlLEdSZCk7Xy5Kaz1mdW5jdGlvbiBIUmQoKXtyZXR1cm4gbmV3IGhTZCh0aGlzLmEsdGhpcy5iKX07Xy5Laz1mdW5jdGlvbiBJUmQoKXtyZXR1cm4gbmV3IGZTZCh0aGlzLmEsdGhpcy5iKX07Xy5Naz1mdW5jdGlvbiBKUmQoKXtyZXR1cm4gZmFsc2V9O3ZhciBpNj1tZGIocXRlLCdFTmFtZWRFbGVtZW50SW1wbC8xJywxMTU2KTtiY2IoMjc5LDEsV3ZlLFJSZCk7Xy5OYj1mdW5jdGlvbiBVUmQoYSl7UnJiKHRoaXMsYSl9O18uUmI9ZnVuY3Rpb24gU1JkKGEpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5Oaz1mdW5jdGlvbiBUUmQoYSl7aWYodGhpcy5nIT0wfHwhIXRoaXMuZSl7dGhyb3cgdmJiKG5ldyBaZGIoJ0l0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQnKSl9dGhpcy5lPWF9O18uT2I9ZnVuY3Rpb24gVlJkKCl7dmFyIGEsYixjLGQsZSxmO3N3aXRjaCh0aGlzLmcpe2Nhc2UgMzpjYXNlIDI6e3JldHVybiB0cnVlfWNhc2UgMTp7cmV0dXJuIGZhbHNlfWNhc2UgLTM6eyF0aGlzLnA/Kyt0aGlzLm46dGhpcy5wLlBiKCl9ZGVmYXVsdDp7aWYoIXRoaXMua3x8KCF0aGlzLnA/IU5SZCh0aGlzKTohT1JkKHRoaXMsdGhpcy5wKSkpe3doaWxlKHRoaXMuZDx0aGlzLmMubGVuZ3RoKXtiPXRoaXMuY1t0aGlzLmQrK107aWYoKCF0aGlzLmV8fGIuR2ooKSE9eDJ8fGIuYWooKSE9MCkmJighdGhpcy5NaygpfHx0aGlzLmIubWgoYikpKXtmPXRoaXMuYi5iaChiLHRoaXMuTGsoKSk7dGhpcy5mPShRNmQoKSxCRChiLDY2KS5PaigpKTtpZih0aGlzLmZ8fGIuJGooKSl7aWYodGhpcy5MaygpKXtkPUJEKGYsMTUpO3RoaXMuaz1kfWVsc2V7ZD1CRChmLDY5KTt0aGlzLms9dGhpcy5qPWR9aWYoSkQodGhpcy5rLDU0KSl7dGhpcy5wPW51bGw7dGhpcy5vPXRoaXMuay5nYygpO3RoaXMubj0wfWVsc2V7dGhpcy5wPSF0aGlzLmo/dGhpcy5rLlljKCk6dGhpcy5qLiRoKCl9aWYoIXRoaXMucD9OUmQodGhpcyk6T1JkKHRoaXMsdGhpcy5wKSl7ZT0hdGhpcy5wPyF0aGlzLmo/dGhpcy5rLlhiKHRoaXMubisrKTp0aGlzLmoucGkodGhpcy5uKyspOnRoaXMucC5QYigpO2lmKHRoaXMuZil7YT1CRChlLDcyKTthLmFrKCk7Yz1hLmRkKCk7dGhpcy5pPWN9ZWxzZXtjPWU7dGhpcy5pPWN9dGhpcy5nPTM7cmV0dXJuIHRydWV9fWVsc2UgaWYoZiE9bnVsbCl7dGhpcy5rPW51bGw7dGhpcy5wPW51bGw7Yz1mO3RoaXMuaT1jO3RoaXMuZz0yO3JldHVybiB0cnVlfX19dGhpcy5rPW51bGw7dGhpcy5wPW51bGw7dGhpcy5mPWZhbHNlO3RoaXMuZz0xO3JldHVybiBmYWxzZX1lbHNle2U9IXRoaXMucD8hdGhpcy5qP3RoaXMuay5YYih0aGlzLm4rKyk6dGhpcy5qLnBpKHRoaXMubisrKTp0aGlzLnAuUGIoKTtpZih0aGlzLmYpe2E9QkQoZSw3Mik7YS5haygpO2M9YS5kZCgpO3RoaXMuaT1jfWVsc2V7Yz1lO3RoaXMuaT1jfXRoaXMuZz0zO3JldHVybiB0cnVlfX19fTtfLlNiPWZ1bmN0aW9uIFdSZCgpe3ZhciBhLGIsYyxkLGUsZjtzd2l0Y2godGhpcy5nKXtjYXNlIC0zOmNhc2UgLTI6e3JldHVybiB0cnVlfWNhc2UgLTE6e3JldHVybiBmYWxzZX1jYXNlIDM6eyF0aGlzLnA/LS10aGlzLm46dGhpcy5wLlViKCl9ZGVmYXVsdDp7aWYoIXRoaXMua3x8KCF0aGlzLnA/IVBSZCh0aGlzKTohUVJkKHRoaXMsdGhpcy5wKSkpe3doaWxlKHRoaXMuZD4wKXtiPXRoaXMuY1stLXRoaXMuZF07aWYoKCF0aGlzLmV8fGIuR2ooKSE9eDJ8fGIuYWooKSE9MCkmJighdGhpcy5NaygpfHx0aGlzLmIubWgoYikpKXtmPXRoaXMuYi5iaChiLHRoaXMuTGsoKSk7dGhpcy5mPShRNmQoKSxCRChiLDY2KS5PaigpKTtpZih0aGlzLmZ8fGIuJGooKSl7aWYodGhpcy5MaygpKXtkPUJEKGYsMTUpO3RoaXMuaz1kfWVsc2V7ZD1CRChmLDY5KTt0aGlzLms9dGhpcy5qPWR9aWYoSkQodGhpcy5rLDU0KSl7dGhpcy5vPXRoaXMuay5nYygpO3RoaXMubj10aGlzLm99ZWxzZXt0aGlzLnA9IXRoaXMuaj90aGlzLmsuWmModGhpcy5rLmdjKCkpOnRoaXMuai5faCh0aGlzLmsuZ2MoKSl9aWYoIXRoaXMucD9QUmQodGhpcyk6UVJkKHRoaXMsdGhpcy5wKSl7ZT0hdGhpcy5wPyF0aGlzLmo/dGhpcy5rLlhiKC0tdGhpcy5uKTp0aGlzLmoucGkoLS10aGlzLm4pOnRoaXMucC5VYigpO2lmKHRoaXMuZil7YT1CRChlLDcyKTthLmFrKCk7Yz1hLmRkKCk7dGhpcy5pPWN9ZWxzZXtjPWU7dGhpcy5pPWN9dGhpcy5nPS0zO3JldHVybiB0cnVlfX1lbHNlIGlmKGYhPW51bGwpe3RoaXMuaz1udWxsO3RoaXMucD1udWxsO2M9Zjt0aGlzLmk9Yzt0aGlzLmc9LTI7cmV0dXJuIHRydWV9fX10aGlzLms9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLmc9LTE7cmV0dXJuIGZhbHNlfWVsc2V7ZT0hdGhpcy5wPyF0aGlzLmo/dGhpcy5rLlhiKC0tdGhpcy5uKTp0aGlzLmoucGkoLS10aGlzLm4pOnRoaXMucC5VYigpO2lmKHRoaXMuZil7YT1CRChlLDcyKTthLmFrKCk7Yz1hLmRkKCk7dGhpcy5pPWN9ZWxzZXtjPWU7dGhpcy5pPWN9dGhpcy5nPS0zO3JldHVybiB0cnVlfX19fTtfLlBiPWZ1bmN0aW9uIFhSZCgpe3JldHVybiBNUmQodGhpcyl9O18uVGI9ZnVuY3Rpb24gWVJkKCl7cmV0dXJuIHRoaXMuYX07Xy5VYj1mdW5jdGlvbiBaUmQoKXt2YXIgYTtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSl7LS10aGlzLmE7dGhpcy5nPTA7YT10aGlzLmk7dGhpcy5TYigpO3JldHVybiBhfWVsc2V7dGhyb3cgdmJiKG5ldyB1dGIpfX07Xy5WYj1mdW5jdGlvbiAkUmQoKXtyZXR1cm4gdGhpcy5hLTF9O18uUWI9ZnVuY3Rpb24gX1JkKCl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLkxrPWZ1bmN0aW9uIGFTZCgpe3JldHVybiBmYWxzZX07Xy5XYj1mdW5jdGlvbiBiU2QoYSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLk1rPWZ1bmN0aW9uIGNTZCgpe3JldHVybiB0cnVlfTtfLmE9MDtfLmQ9MDtfLmY9ZmFsc2U7Xy5nPTA7Xy5uPTA7Xy5vPTA7dmFyIEtSZDt2YXIgUDg9bWRiKHl2ZSwnRUNvbnRlbnRzRUxpc3QvRmVhdHVyZUl0ZXJhdG9ySW1wbCcsMjc5KTtiY2IoNjk3LDI3OSxXdmUsZFNkKTtfLkxrPWZ1bmN0aW9uIGVTZCgpe3JldHVybiB0cnVlfTt2YXIgUTg9bWRiKHl2ZSwnRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCcsNjk3KTtiY2IoMTE1Nyw2OTcsV3ZlLGZTZCk7Xy5Naz1mdW5jdGlvbiBnU2QoKXtyZXR1cm4gZmFsc2V9O3ZhciBnNj1tZGIocXRlLCdFTmFtZWRFbGVtZW50SW1wbC8xLzEnLDExNTcpO2JjYigxMTU4LDI3OSxXdmUsaFNkKTtfLk1rPWZ1bmN0aW9uIGlTZCgpe3JldHVybiBmYWxzZX07dmFyIGg2PW1kYihxdGUsJ0VOYW1lZEVsZW1lbnRJbXBsLzEvMicsMTE1OCk7YmNiKDM2LDE0MyxmdmUsbFNkLG1TZCxuU2Qsb1NkLHBTZCxxU2QsclNkLHNTZCx0U2QsdVNkLHZTZCx3U2QseFNkLHlTZCx6U2QsQVNkLEJTZCxDU2QsRFNkLEVTZCxGU2QsR1NkLEhTZCxJU2QsSlNkKTtfLl9pPWZ1bmN0aW9uIEtTZCgpe3JldHVybiBrU2QodGhpcyl9O18uZ2o9ZnVuY3Rpb24gTFNkKCl7dmFyIGE7YT1rU2QodGhpcyk7aWYoYSl7cmV0dXJuIGEuemooKX1yZXR1cm4gbnVsbH07Xy55aT1mdW5jdGlvbiBNU2QoYSl7dGhpcy5iPT0tMSYmISF0aGlzLmEmJih0aGlzLmI9dGhpcy5jLlhnKHRoaXMuYS5haigpLHRoaXMuYS5HaigpKSk7cmV0dXJuIHRoaXMuYy5PZyh0aGlzLmIsYSl9O18uQWk9ZnVuY3Rpb24gTlNkKCl7cmV0dXJuIHRoaXMuY307Xy5oaj1mdW5jdGlvbiBPU2QoKXt2YXIgYTthPWtTZCh0aGlzKTtpZihhKXtyZXR1cm4gYS5LaigpfXJldHVybiBmYWxzZX07Xy5iPS0xO3ZhciBrNj1tZGIocXRlLCdFTm90aWZpY2F0aW9uSW1wbCcsMzYpO2JjYigzOTksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSw1OToxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSwzOTk6MSwyODQ6MSwxMTQ6MSwxMTU6MX0sU1NkKTtfLlFnPWZ1bmN0aW9uIFRTZChhKXtyZXR1cm4gUFNkKHRoaXMsYSl9O18uX2c9ZnVuY3Rpb24gVVNkKGEsYixjKXt2YXIgZCxlLGY7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIG1lYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gbWViKHRoaXMudCk7Y2FzZSA2OnJldHVybiBCY2IoKSxmPXRoaXMudCxmPjF8fGY9PS0xP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiBCY2IoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHdJZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9CRCh0aGlzLkNiLDI2KTpudWxsO2Nhc2UgMTE6cmV0dXJuICF0aGlzLmQmJih0aGlzLmQ9bmV3IEs0ZCh1NSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IGNVZChwNSx0aGlzLDEyLDEwKSksdGhpcy5jO2Nhc2UgMTM6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IGZUZCh0aGlzLHRoaXMpKSx0aGlzLmE7Y2FzZSAxNDpyZXR1cm4gUVNkKHRoaXMpO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKGpHZCgpLGFHZCkpLFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkP2FHZDpkKSxhKSxiLGMpfTtfLmhoPWZ1bmN0aW9uIFZTZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksU3hkKHRoaXMuQWIsYSxjKTtjYXNlIDEwOiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9QU2QodGhpcyxjKTp0aGlzLkNiLmloKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIF9oZCh0aGlzLGEsMTAsYyk7Y2FzZSAxMjpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgY1VkKHA1LHRoaXMsMTIsMTApKSxTeGQodGhpcy5jLGEsYyk7fXJldHVybiBmPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxhR2QpOmQpLGIpLDY2KSxmLk5qKCkuUWoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLGFHZCkpLGEsYyl9O18uamg9ZnVuY3Rpb24gV1NkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksVHhkKHRoaXMuQWIsYSxjKTtjYXNlIDk6cmV0dXJuIHZJZCh0aGlzLGMpO2Nhc2UgMTA6cmV0dXJuIF9oZCh0aGlzLG51bGwsMTAsYyk7Y2FzZSAxMTpyZXR1cm4gIXRoaXMuZCYmKHRoaXMuZD1uZXcgSzRkKHU1LHRoaXMsMTEpKSxUeGQodGhpcy5kLGEsYyk7Y2FzZSAxMjpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgY1VkKHA1LHRoaXMsMTIsMTApKSxUeGQodGhpcy5jLGEsYyk7Y2FzZSAxNDpyZXR1cm4gVHhkKFFTZCh0aGlzKSxhLGMpO31yZXR1cm4gZT1CRChYS2QoKGQ9QkQoQWpkKHRoaXMsMTYpLDI2KSwhZD8oakdkKCksYUdkKTpkKSxiKSw2NiksZS5OaigpLlJqKHRoaXMseWpkKHRoaXMpLGItYUxkKChqR2QoKSxhR2QpKSxhLGMpfTtfLmxoPWZ1bmN0aW9uIFhTZChhKXt2YXIgYixjLGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuICh0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBkPXRoaXMudCxkPjF8fGQ9PS0xO2Nhc2UgNzpyZXR1cm4gYz10aGlzLnMsYz49MTtjYXNlIDg6cmV0dXJuICEhdGhpcy5yJiYhdGhpcy5xLmUmJkxRZCh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiAhIXRoaXMucSYmISghIXRoaXMuciYmIXRoaXMucS5lJiZMUWQodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiAhISh0aGlzLkRiPj4xNj09MTA/QkQodGhpcy5DYiwyNik6bnVsbCk7Y2FzZSAxMTpyZXR1cm4gISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMTI6cmV0dXJuICEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDEzOnJldHVybiAhIXRoaXMuYSYmUVNkKHRoaXMuYS5hKS5pIT0wJiYhKCEhdGhpcy5iJiZRVGQodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4gISF0aGlzLmImJlFUZCh0aGlzLmIpO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQoKGpHZCgpLGFHZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP2FHZDpiKSxhKSl9O18uc2g9ZnVuY3Rpb24gWVNkKGEsYil7dmFyIGMsZDtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7eXRkKHRoaXMuQWIsQkQoYiwxNCkpO3JldHVybjtjYXNlIDE6cG5kKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDI6QklkKHRoaXMsQ2NiKEREKGIpKSk7cmV0dXJuO2Nhc2UgMzpDSWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSA0OkFJZCh0aGlzLEJEKGIsMTkpLmEpO3JldHVybjtjYXNlIDU6RElkKHRoaXMsQkQoYiwxOSkuYSk7cmV0dXJuO2Nhc2UgODp5SWQodGhpcyxCRChiLDEzOCkpO3JldHVybjtjYXNlIDk6ZD14SWQodGhpcyxCRChiLDg3KSxudWxsKTshIWQmJmQuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBLNGQodTUsdGhpcywxMSkpO1V4ZCh0aGlzLmQpOyF0aGlzLmQmJih0aGlzLmQ9bmV3IEs0ZCh1NSx0aGlzLDExKSk7eXRkKHRoaXMuZCxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgY1VkKHA1LHRoaXMsMTIsMTApKTtVeGQodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyBjVWQocDUsdGhpcywxMiwxMCkpO3l0ZCh0aGlzLmMsQkQoYiwxNCkpO3JldHVybjtjYXNlIDEzOiF0aGlzLmEmJih0aGlzLmE9bmV3IGZUZCh0aGlzLHRoaXMpKTt2d2QodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyBmVGQodGhpcyx0aGlzKSk7eXRkKHRoaXMuYSxCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTQ6VXhkKFFTZCh0aGlzKSk7eXRkKFFTZCh0aGlzKSxCRChiLDE0KSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCgoakdkKCksYUdkKSksWEtkKChjPUJEKEFqZCh0aGlzLDE2KSwyNiksIWM/YUdkOmMpLGEpLGIpfTtfLnpoPWZ1bmN0aW9uIFpTZCgpe3JldHVybiBqR2QoKSxhR2R9O18uQmg9ZnVuY3Rpb24gJFNkKGEpe3ZhciBiLGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpO1V4ZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnBuZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6QklkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgMzpDSWQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSA0OkFJZCh0aGlzLDApO3JldHVybjtjYXNlIDU6RElkKHRoaXMsMSk7cmV0dXJuO2Nhc2UgODp5SWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OmM9eElkKHRoaXMsbnVsbCxudWxsKTshIWMmJmMuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBLNGQodTUsdGhpcywxMSkpO1V4ZCh0aGlzLmQpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IGNVZChwNSx0aGlzLDEyLDEwKSk7VXhkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6ISF0aGlzLmEmJnZ3ZCh0aGlzLmEpO3JldHVybjtjYXNlIDE0OiEhdGhpcy5iJiZVeGQodGhpcy5iKTtyZXR1cm47fWVpZCh0aGlzLGEtYUxkKChqR2QoKSxhR2QpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9hR2Q6YiksYSkpfTtfLkdoPWZ1bmN0aW9uIF9TZCgpe3ZhciBhLGI7aWYodGhpcy5jKXtmb3IoYT0wLGI9dGhpcy5jLmk7YTxiOysrYSl7Q21kKHF1ZCh0aGlzLmMsYSkpfX13SWQodGhpcyk7dGhpcy5CYnw9MX07dmFyIHA2PW1kYihxdGUsJ0VPcGVyYXRpb25JbXBsJywzOTkpO2JjYig1MDUsNzQyLFV2ZSxmVGQpO18uSGk9ZnVuY3Rpb24gaVRkKGEsYil7YVRkKHRoaXMsYSxCRChiLDEzOCkpfTtfLklpPWZ1bmN0aW9uIGpUZChhKXtiVGQodGhpcyxCRChhLDEzOCkpfTtfLk9pPWZ1bmN0aW9uIHBUZChhKXt2YXIgYixjO3JldHVybiBiPUJEKHF1ZChRU2QodGhpcy5hKSxhKSw4NyksYz1iLmMsYz9jOihqR2QoKSxZRmQpfTtfLlRpPWZ1bmN0aW9uIHVUZChhKXt2YXIgYixjO3JldHVybiBiPUJEKFh4ZChRU2QodGhpcy5hKSxhKSw4NyksYz1iLmMsYz9jOihqR2QoKSxZRmQpfTtfLlVpPWZ1bmN0aW9uIHZUZChhLGIpe3JldHVybiBkVGQodGhpcyxhLEJEKGIsMTM4KSl9O18uYWk9ZnVuY3Rpb24gZ1RkKCl7cmV0dXJuIGZhbHNlfTtfLlppPWZ1bmN0aW9uIGhUZChhLGIsYyxkLGUpe3JldHVybiBudWxsfTtfLkppPWZ1bmN0aW9uIGtUZCgpe3JldHVybiBuZXcgTlRkKHRoaXMpfTtfLktpPWZ1bmN0aW9uIGxUZCgpe1V4ZChRU2QodGhpcy5hKSl9O18uTGk9ZnVuY3Rpb24gbVRkKGEpe3JldHVybiBjVGQodGhpcyxhKX07Xy5NaT1mdW5jdGlvbiBuVGQoYSl7dmFyIGIsYztmb3IoYz1hLktjKCk7Yy5PYigpOyl7Yj1jLlBiKCk7aWYoIWNUZCh0aGlzLGIpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfTtfLk5pPWZ1bmN0aW9uIG9UZChhKXt2YXIgYixjLGQ7aWYoSkQoYSwxNSkpe2Q9QkQoYSwxNSk7aWYoZC5nYygpPT1RU2QodGhpcy5hKS5pKXtmb3IoYj1kLktjKCksYz1uZXcgRnlkKHRoaXMpO2IuT2IoKTspe2lmKFBEKGIuUGIoKSkhPT1QRChEeWQoYykpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O18uUGk9ZnVuY3Rpb24gcVRkKCl7dmFyIGEsYixjLGQsZTtjPTE7Zm9yKGI9bmV3IEZ5ZChRU2QodGhpcy5hKSk7Yi5lIT1iLmkuZ2MoKTspe2E9QkQoRHlkKGIpLDg3KTtkPShlPWEuYyxlP2U6KGpHZCgpLFlGZCkpO2M9MzEqYysoIWQ/MDp0YihkKSl9cmV0dXJuIGN9O18uUWk9ZnVuY3Rpb24gclRkKGEpe3ZhciBiLGMsZCxlO2Q9MDtmb3IoYz1uZXcgRnlkKFFTZCh0aGlzLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChEeWQoYyksODcpO2lmKFBEKGEpPT09UEQoKGU9Yi5jLGU/ZTooakdkKCksWUZkKSkpKXtyZXR1cm4gZH0rK2R9cmV0dXJuIC0xfTtfLlJpPWZ1bmN0aW9uIHNUZCgpe3JldHVybiBRU2QodGhpcy5hKS5pPT0wfTtfLlNpPWZ1bmN0aW9uIHRUZCgpe3JldHVybiBudWxsfTtfLlZpPWZ1bmN0aW9uIHdUZCgpe3JldHVybiBRU2QodGhpcy5hKS5pfTtfLldpPWZ1bmN0aW9uIHhUZCgpe3ZhciBhLGIsYyxkLGUsZjtmPVFTZCh0aGlzLmEpLmk7ZT1LQyhTSSxVaGUsMSxmLDUsMSk7Yz0wO2ZvcihiPW5ldyBGeWQoUVNkKHRoaXMuYSkpO2IuZSE9Yi5pLmdjKCk7KXthPUJEKER5ZChiKSw4Nyk7ZVtjKytdPShkPWEuYyxkP2Q6KGpHZCgpLFlGZCkpfXJldHVybiBlfTtfLlhpPWZ1bmN0aW9uIHlUZChhKXt2YXIgYixjLGQsZSxmLGcsaDtoPVFTZCh0aGlzLmEpLmk7aWYoYS5sZW5ndGg8aCl7ZT1pemQocmIoYSkuYyxoKTthPWV9YS5sZW5ndGg+aCYmTkMoYSxoLG51bGwpO2Q9MDtmb3IoYz1uZXcgRnlkKFFTZCh0aGlzLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1CRChEeWQoYyksODcpO2Y9KGc9Yi5jLGc/ZzooakdkKCksWUZkKSk7TkMoYSxkKyssZil9cmV0dXJuIGF9O18uWWk9ZnVuY3Rpb24gelRkKCl7dmFyIGEsYixjLGQsZTtlPW5ldyBIZmI7ZS5hKz0nWyc7YT1RU2QodGhpcy5hKTtmb3IoYj0wLGQ9UVNkKHRoaXMuYSkuaTtiPGQ7KXtFZmIoZSx4ZmIoKGM9QkQocXVkKGEsYiksODcpLmMsYz9jOihqR2QoKSxZRmQpKSkpOysrYjxkJiYoZS5hKz1TaGUsZSl9ZS5hKz0nXSc7cmV0dXJuIGUuYX07Xy4kaT1mdW5jdGlvbiBBVGQoYSl7fTtfLmFqPWZ1bmN0aW9uIEJUZCgpe3JldHVybiAxM307Xy5Caz1mdW5jdGlvbiBDVGQoKXtyZXR1cm4gdHJ1ZX07Xy5iaj1mdW5jdGlvbiBEVGQoKXtyZXR1cm4gZmFsc2V9O18uQ2s9ZnVuY3Rpb24gRVRkKCl7cmV0dXJuIGZhbHNlfTtfLkRrPWZ1bmN0aW9uIEZUZCgpe3JldHVybiBmYWxzZX07Xy5Faz1mdW5jdGlvbiBHVGQoKXtyZXR1cm4gdHJ1ZX07Xy5yaz1mdW5jdGlvbiBIVGQoKXtyZXR1cm4gZmFsc2V9O18uRms9ZnVuY3Rpb24gSVRkKCl7cmV0dXJuIHRydWV9O18ud2o9ZnVuY3Rpb24gSlRkKGEpe3JldHVybiBKRChhLDEzOCl9O18uZmo9ZnVuY3Rpb24gS1RkKCl7cmV0dXJuIFJTZCh0aGlzLmEpfTtfLmhpPWZ1bmN0aW9uIExUZCgpe3JldHVybiB0cnVlfTtfLm5pPWZ1bmN0aW9uIE1UZCgpe3JldHVybiB0cnVlfTt2YXIgbjY9bWRiKHF0ZSwnRU9wZXJhdGlvbkltcGwvMScsNTA1KTtiY2IoMTM0MCwxOTY0LExpZSxOVGQpO18uWmM9ZnVuY3Rpb24gT1RkKGEpe3JldHVybiB6dGQodGhpcy5hLGEpfTtfLmdjPWZ1bmN0aW9uIFBUZCgpe3JldHVybiBRU2QodGhpcy5hLmEpLml9O3ZhciBtNj1tZGIocXRlLCdFT3BlcmF0aW9uSW1wbC8xLzEnLDEzNDApO2JjYigxMzQxLDU0NSxQdmUsVVRkKTtfLmlpPWZ1bmN0aW9uIFlUZChhLGIpe3ZhciBjLGQ7cmV0dXJuIGM9QkQoV3hkKHRoaXMsYSxiKSw4Nyksb2lkKHRoaXMuZSkmJkdMZCh0aGlzLG5ldyBFU2QodGhpcy5hLDcsKGpHZCgpLGJHZCksbWViKGIpLChkPWMuYyxkP2Q6WUZkKSxhKSksY307Xy5qaj1mdW5jdGlvbiBaVGQoYSxiKXtyZXR1cm4gUlRkKHRoaXMsQkQoYSw4NyksYil9O18ua2o9ZnVuY3Rpb24gJFRkKGEsYil7cmV0dXJuIFNUZCh0aGlzLEJEKGEsODcpLGIpfTtfLmxqPWZ1bmN0aW9uIF9UZChhLGIsYyl7cmV0dXJuIFRUZCh0aGlzLEJEKGEsODcpLEJEKGIsODcpLGMpfTtfLlppPWZ1bmN0aW9uIFZUZChhLGIsYyxkLGUpe3N3aXRjaChhKXtjYXNlIDM6e3JldHVybiBGTGQodGhpcyxhLGIsYyxkLHRoaXMuaT4xKX1jYXNlIDU6e3JldHVybiBGTGQodGhpcyxhLGIsYyxkLHRoaXMuaS1CRChjLDE1KS5nYygpPjApfWRlZmF1bHQ6e3JldHVybiBuZXcgcFNkKHRoaXMuZSxhLHRoaXMuYyxiLGMsZCx0cnVlKX19fTtfLmlqPWZ1bmN0aW9uIFdUZCgpe3JldHVybiB0cnVlfTtfLmZqPWZ1bmN0aW9uIFhUZCgpe3JldHVybiBRVGQodGhpcyl9O18uWGo9ZnVuY3Rpb24gYVVkKCl7VXhkKHRoaXMpfTt2YXIgbzY9bWRiKHF0ZSwnRU9wZXJhdGlvbkltcGwvMicsMTM0MSk7YmNiKDQ5OCwxLHsxOTM4OjEsNDk4OjF9LGJVZCk7dmFyIHE2PW1kYihxdGUsJ0VQYWNrYWdlSW1wbC8xJyw0OTgpO2JjYigxNiw4NSxQdmUsY1VkKTtfLnprPWZ1bmN0aW9uIGRVZCgpe3JldHVybiB0aGlzLmR9O18uQWs9ZnVuY3Rpb24gZVVkKCl7cmV0dXJuIHRoaXMuYn07Xy5Eaz1mdW5jdGlvbiBmVWQoKXtyZXR1cm4gdHJ1ZX07Xy5iPTA7dmFyIGI5PW1kYih5dmUsJ0VPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QnLDE2KTtiY2IoMzUzLDE2LFB2ZSxnVWQpO18uRWs9ZnVuY3Rpb24gaFVkKCl7cmV0dXJuIHRydWV9O18ubGk9ZnVuY3Rpb24gaVVkKGEsYil7cmV0dXJuIElMZCh0aGlzLGEsQkQoYiw1NikpfTt2YXIgJDg9bWRiKHl2ZSwnRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9SZXNvbHZpbmcnLDM1Myk7YmNiKDI5OCwzNTMsUHZlLGpVZCk7Xy5jaT1mdW5jdGlvbiBrVWQoKXt0aGlzLmEudGI9bnVsbH07dmFyIHI2PW1kYihxdGUsJ0VQYWNrYWdlSW1wbC8yJywyOTgpO2JjYigxMjI4LDEse30sbFVkKTt2YXIgczY9bWRiKHF0ZSwnRVBhY2thZ2VJbXBsLzMnLDEyMjgpO2JjYig3MTgsNDMsZmtlLG9VZCk7Xy5fYj1mdW5jdGlvbiBwVWQoYSl7cmV0dXJuIE5EKGEpP1FoYih0aGlzLGEpOiEhaXJiKHRoaXMuZixhKX07dmFyIHU2PW1kYihxdGUsJ0VQYWNrYWdlUmVnaXN0cnlJbXBsJyw3MTgpO2JjYig1MDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMDE3OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDUwOToxLDI4NDoxLDExNDoxLDExNToxfSxyVWQpO18uUWc9ZnVuY3Rpb24gc1VkKGEpe3JldHVybiBxVWQodGhpcyxhKX07Xy5fZz1mdW5jdGlvbiB0VWQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGNVZChhNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gQmNiKCksKHRoaXMuQmImMjU2KSE9MD90cnVlOmZhbHNlO2Nhc2UgMzpyZXR1cm4gQmNiKCksKHRoaXMuQmImNTEyKSE9MD90cnVlOmZhbHNlO2Nhc2UgNDpyZXR1cm4gbWViKHRoaXMucyk7Y2FzZSA1OnJldHVybiBtZWIodGhpcy50KTtjYXNlIDY6cmV0dXJuIEJjYigpLGY9dGhpcy50LGY+MXx8Zj09LTE/dHJ1ZTpmYWxzZTtjYXNlIDc6cmV0dXJuIEJjYigpLGU9dGhpcy5zLGU+PTE/dHJ1ZTpmYWxzZTtjYXNlIDg6aWYoYilyZXR1cm4gd0lkKHRoaXMpO3JldHVybiB0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5EYj4+MTY9PTEwP0JEKHRoaXMuQ2IsNTkpOm51bGw7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoakdkKCksZEdkKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/ZEdkOmQpLGEpLGIsYyl9O18uaGg9ZnVuY3Rpb24gdVVkKGEsYixjKXt2YXIgZCxlLGY7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxTeGQodGhpcy5BYixhLGMpO2Nhc2UgMTA6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP3FVZCh0aGlzLGMpOnRoaXMuQ2IuaWgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gX2hkKHRoaXMsYSwxMCxjKTt9cmV0dXJuIGY9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLGRHZCk6ZCksYiksNjYpLGYuTmooKS5Raih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksZEdkKSksYSxjKX07Xy5qaD1mdW5jdGlvbiB2VWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSxUeGQodGhpcy5BYixhLGMpO2Nhc2UgOTpyZXR1cm4gdklkKHRoaXMsYyk7Y2FzZSAxMDpyZXR1cm4gX2hkKHRoaXMsbnVsbCwxMCxjKTt9cmV0dXJuIGU9QkQoWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/KGpHZCgpLGRHZCk6ZCksYiksNjYpLGUuTmooKS5Saih0aGlzLHlqZCh0aGlzKSxiLWFMZCgoakdkKCksZEdkKSksYSxjKX07Xy5saD1mdW5jdGlvbiB3VWQoYSl7dmFyIGIsYyxkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICh0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybiAodGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gZD10aGlzLnQsZD4xfHxkPT0tMTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZMUWQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmTFFkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gISEodGhpcy5EYj4+MTY9PTEwP0JEKHRoaXMuQ2IsNTkpOm51bGwpO31yZXR1cm4gY2lkKHRoaXMsYS1hTGQoKGpHZCgpLGRHZCkpLFhLZCgoYj1CRChBamQodGhpcywxNiksMjYpLCFiP2RHZDpiKSxhKSl9O18uemg9ZnVuY3Rpb24geFVkKCl7cmV0dXJuIGpHZCgpLGRHZH07dmFyIHY2PW1kYihxdGUsJ0VQYXJhbWV0ZXJJbXBsJyw1MDkpO2JjYig5OSw0NDksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDE4OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsOTk6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0sRlVkKTtfLl9nPWZ1bmN0aW9uIEdVZChhLGIsYyl7dmFyIGQsZSxmLGc7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIEJjYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIG1lYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gbWViKHRoaXMudCk7Y2FzZSA2OnJldHVybiBCY2IoKSxnPXRoaXMudCxnPjF8fGc9PS0xP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiBCY2IoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHdJZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIEJjYigpLCh0aGlzLkJiJnp0ZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDExOnJldHVybiBCY2IoKSwodGhpcy5CYiZEdmUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMjpyZXR1cm4gQmNiKCksKHRoaXMuQmImUmplKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBWSWQodGhpcyk7Y2FzZSAxNTpyZXR1cm4gQmNiKCksKHRoaXMuQmImQ3ZlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTY6cmV0dXJuIEJjYigpLCh0aGlzLkJiJm9pZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDE3OnJldHVybiBXSWQodGhpcyk7Y2FzZSAxODpyZXR1cm4gQmNiKCksKHRoaXMuQmImb3RlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTk6cmV0dXJuIEJjYigpLGY9elVkKHRoaXMpLCEhZiYmKGYuQmImb3RlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMjA6cmV0dXJuIEJjYigpLCh0aGlzLkJiJlRqZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDIxOmlmKGIpcmV0dXJuIHpVZCh0aGlzKTtyZXR1cm4gdGhpcy5iO2Nhc2UgMjI6aWYoYilyZXR1cm4gQVVkKHRoaXMpO3JldHVybiB5VWQodGhpcyk7Y2FzZSAyMzpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgXzRkKGI1LHRoaXMsMjMpKSx0aGlzLmE7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoakdkKCksZUdkKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/ZUdkOmQpLGEpLGIsYyl9O18ubGg9ZnVuY3Rpb24gSFVkKGEpe3ZhciBiLGMsZCxlO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICh0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybiAodGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gZT10aGlzLnQsZT4xfHxlPT0tMTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZMUWQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmTFFkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gKHRoaXMuQmImenRlKT09MDtjYXNlIDExOnJldHVybiAodGhpcy5CYiZEdmUpIT0wO2Nhc2UgMTI6cmV0dXJuICh0aGlzLkJiJlJqZSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIFZJZCh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybiAodGhpcy5CYiZDdmUpIT0wO2Nhc2UgMTY6cmV0dXJuICh0aGlzLkJiJm9pZSkhPTA7Y2FzZSAxNzpyZXR1cm4gISFXSWQodGhpcyk7Y2FzZSAxODpyZXR1cm4gKHRoaXMuQmImb3RlKSE9MDtjYXNlIDE5OnJldHVybiBkPXpVZCh0aGlzKSwhIWQmJihkLkJiJm90ZSkhPTA7Y2FzZSAyMDpyZXR1cm4gKHRoaXMuQmImVGplKT09MDtjYXNlIDIxOnJldHVybiAhIXRoaXMuYjtjYXNlIDIyOnJldHVybiAhIXlVZCh0aGlzKTtjYXNlIDIzOnJldHVybiAhIXRoaXMuYSYmdGhpcy5hLmkhPTA7fXJldHVybiBjaWQodGhpcyxhLWFMZCgoakdkKCksZUdkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/ZUdkOmIpLGEpKX07Xy5zaD1mdW5jdGlvbiBJVWQoYSxiKXt2YXIgYyxkO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTt5dGQodGhpcy5BYixCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTpjSmQodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMjpCSWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAzOkNJZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDQ6QUlkKHRoaXMsQkQoYiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTpESWQodGhpcyxCRChiLDE5KS5hKTtyZXR1cm47Y2FzZSA4OnlJZCh0aGlzLEJEKGIsMTM4KSk7cmV0dXJuO2Nhc2UgOTpkPXhJZCh0aGlzLEJEKGIsODcpLG51bGwpOyEhZCYmZC5GaSgpO3JldHVybjtjYXNlIDEwOlpJZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDExOmZKZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDEyOmRKZCh0aGlzLENjYihERChiKSkpO3JldHVybjtjYXNlIDEzOiRJZCh0aGlzLEdEKGIpKTtyZXR1cm47Y2FzZSAxNTplSmQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAxNjphSmQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAxODpCVWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAyMDpFVWQodGhpcyxDY2IoREQoYikpKTtyZXR1cm47Y2FzZSAyMTpEVWQodGhpcyxCRChiLDE4KSk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgXzRkKGI1LHRoaXMsMjMpKTtVeGQodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyBfNGQoYjUsdGhpcywyMykpO3l0ZCh0aGlzLmEsQkQoYiwxNCkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLGVHZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP2VHZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBKVWQoKXtyZXR1cm4gakdkKCksZUdkfTtfLkJoPWZ1bmN0aW9uIEtVZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpKRCh0aGlzLkNiLDg4KSYmWE1kKCRLZChCRCh0aGlzLkNiLDg4KSksNCk7cG5kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpCSWQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSAzOkNJZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDQ6QUlkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTpESWQodGhpcywxKTtyZXR1cm47Y2FzZSA4OnlJZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz14SWQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5GaSgpO3JldHVybjtjYXNlIDEwOlpJZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDExOmZKZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMjpkSmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGw7X0lkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6ZUpkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDE2OmFKZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxODpDVWQodGhpcyxmYWxzZSk7SkQodGhpcy5DYiw4OCkmJlhNZCgkS2QoQkQodGhpcy5DYiw4OCkpLDIpO3JldHVybjtjYXNlIDIwOkVVZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDIxOkRVZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDIzOiF0aGlzLmEmJih0aGlzLmE9bmV3IF80ZChiNSx0aGlzLDIzKSk7VXhkKHRoaXMuYSk7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoakdkKCksZUdkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/ZUdkOmIpLGEpKX07Xy5HaD1mdW5jdGlvbiBMVWQoKXtBVWQodGhpcyk7YTJkKHExZCgoTzZkKCksTTZkKSx0aGlzKSk7d0lkKHRoaXMpO3RoaXMuQmJ8PTF9O18uTGo9ZnVuY3Rpb24gTVVkKCl7cmV0dXJuIHpVZCh0aGlzKX07Xy5xaz1mdW5jdGlvbiBOVWQoKXt2YXIgYTtyZXR1cm4gYT16VWQodGhpcyksISFhJiYoYS5CYiZvdGUpIT0wfTtfLnJrPWZ1bmN0aW9uIE9VZCgpe3JldHVybiAodGhpcy5CYiZvdGUpIT0wfTtfLnNrPWZ1bmN0aW9uIFBVZCgpe3JldHVybiAodGhpcy5CYiZUamUpIT0wfTtfLm5rPWZ1bmN0aW9uIFFVZChhLGIpe3RoaXMuYz1udWxsO3JldHVybiB6SWQodGhpcyxhLGIpfTtfLkliPWZ1bmN0aW9uIFJVZCgpe3ZhciBhO2lmKCh0aGlzLkRiJjY0KSE9MClyZXR1cm4gZ0pkKHRoaXMpO2E9bmV3IEpmYihnSmQodGhpcykpO2EuYSs9JyAoY29udGFpbm1lbnQ6ICc7RmZiKGEsKHRoaXMuQmImb3RlKSE9MCk7YS5hKz0nLCByZXNvbHZlUHJveGllczogJztGZmIoYSwodGhpcy5CYiZUamUpIT0wKTthLmErPScpJztyZXR1cm4gYS5hfTt2YXIgdzY9bWRiKHF0ZSwnRVJlZmVyZW5jZUltcGwnLDk5KTtiY2IoNTQ4LDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTQ4OjEsMTE0OjEsMTE1OjF9LFhVZCk7Xy5GYj1mdW5jdGlvbiBiVmQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLmNkPWZ1bmN0aW9uIGRWZCgpe3JldHVybiB0aGlzLmJ9O18uZGQ9ZnVuY3Rpb24gZVZkKCl7cmV0dXJuIHRoaXMuY307Xy5IYj1mdW5jdGlvbiBmVmQoKXtyZXR1cm4gRkNiKHRoaXMpfTtfLlVoPWZ1bmN0aW9uIGhWZChhKXtTVWQodGhpcyxHRChhKSl9O18uZWQ9ZnVuY3Rpb24gaVZkKGEpe3JldHVybiBXVWQodGhpcyxHRChhKSl9O18uX2c9ZnVuY3Rpb24gWVVkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmM7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoakdkKCksZkdkKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/ZkdkOmQpLGEpLGIsYyl9O18ubGg9ZnVuY3Rpb24gWlVkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHRoaXMuYiE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYyE9bnVsbDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxmR2QpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9mR2Q6YiksYSkpfTtfLnNoPWZ1bmN0aW9uICRVZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6VFVkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDE6VlVkKHRoaXMsR0QoYikpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLGZHZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP2ZHZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBfVWQoKXtyZXR1cm4gakdkKCksZkdkfTtfLkJoPWZ1bmN0aW9uIGFWZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOlVVZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6VlVkKHRoaXMsbnVsbCk7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoakdkKCksZkdkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/ZkdkOmIpLGEpKX07Xy5TaD1mdW5jdGlvbiBjVmQoKXt2YXIgYTtpZih0aGlzLmE9PS0xKXthPXRoaXMuYjt0aGlzLmE9YT09bnVsbD8wOkxDYihhKX1yZXR1cm4gdGhpcy5hfTtfLlRoPWZ1bmN0aW9uIGdWZChhKXt0aGlzLmE9YX07Xy5JYj1mdW5jdGlvbiBqVmQoKXt2YXIgYTtpZigodGhpcy5EYiY2NCkhPTApcmV0dXJuIEVpZCh0aGlzKTthPW5ldyBKZmIoRWlkKHRoaXMpKTthLmErPScgKGtleTogJztFZmIoYSx0aGlzLmIpO2EuYSs9JywgdmFsdWU6ICc7RWZiKGEsdGhpcy5jKTthLmErPScpJztyZXR1cm4gYS5hfTtfLmE9LTE7Xy5iPW51bGw7Xy5jPW51bGw7dmFyIHg2PW1kYihxdGUsJ0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbCcsNTQ4KTt2YXIgRDk9b2RiKHl2ZSwnRmVhdHVyZU1hcC9FbnRyeS9JbnRlcm5hbCcpO2JjYig1NjUsMSxYdmUpO18uT2s9ZnVuY3Rpb24gbVZkKGEpe3JldHVybiB0aGlzLlBrKEJEKGEsNDkpKX07Xy5Qaz1mdW5jdGlvbiBuVmQoYSl7cmV0dXJuIHRoaXMuT2soYSl9O18uRmI9ZnVuY3Rpb24gb1ZkKGEpe3ZhciBiLGM7aWYodGhpcz09PWEpe3JldHVybiB0cnVlfWVsc2UgaWYoSkQoYSw3Mikpe2I9QkQoYSw3Mik7aWYoYi5haygpPT10aGlzLmMpe2M9dGhpcy5kZCgpO3JldHVybiBjPT1udWxsP2IuZGQoKT09bnVsbDpwYihjLGIuZGQoKSl9ZWxzZXtyZXR1cm4gZmFsc2V9fWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5haz1mdW5jdGlvbiBwVmQoKXtyZXR1cm4gdGhpcy5jfTtfLkhiPWZ1bmN0aW9uIHFWZCgpe3ZhciBhO2E9dGhpcy5kZCgpO3JldHVybiB0Yih0aGlzLmMpXihhPT1udWxsPzA6dGIoYSkpfTtfLkliPWZ1bmN0aW9uIHJWZCgpe3ZhciBhLGI7YT10aGlzLmM7Yj1iS2QoYS5IaigpKS5QaCgpO2EubmUoKTtyZXR1cm4gKGIhPW51bGwmJmIubGVuZ3RoIT0wP2IrJzonK2EubmUoKTphLm5lKCkpKyc9Jyt0aGlzLmRkKCl9O3ZhciB5Nj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0Jhc2ljRmVhdHVyZU1hcEVudHJ5Jyw1NjUpO2JjYig3NzYsNTY1LFh2ZSx1VmQpO18uUGs9ZnVuY3Rpb24gdlZkKGEpe3JldHVybiBuZXcgdVZkKHRoaXMuYyxhKX07Xy5kZD1mdW5jdGlvbiB3VmQoKXtyZXR1cm4gdGhpcy5hfTtfLlFrPWZ1bmN0aW9uIHhWZChhLGIsYyl7cmV0dXJuIHNWZCh0aGlzLGEsdGhpcy5hLGIsYyl9O18uUms9ZnVuY3Rpb24geVZkKGEsYixjKXtyZXR1cm4gdFZkKHRoaXMsYSx0aGlzLmEsYixjKX07dmFyIHo2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQ29udGFpbm1lbnRVcGRhdGluZ0ZlYXR1cmVNYXBFbnRyeScsNzc2KTtiY2IoMTMxNCwxLHt9LHpWZCk7Xy5Qaj1mdW5jdGlvbiBBVmQoYSxiLGMsZCxlKXt2YXIgZjtmPUJEKGdpZChhLHRoaXMuYiksMjE1KTtyZXR1cm4gZi5ubCh0aGlzLmEpLldqKGQpfTtfLlFqPWZ1bmN0aW9uIEJWZChhLGIsYyxkLGUpe3ZhciBmO2Y9QkQoZ2lkKGEsdGhpcy5iKSwyMTUpO3JldHVybiBmLmVsKHRoaXMuYSxkLGUpfTtfLlJqPWZ1bmN0aW9uIENWZChhLGIsYyxkLGUpe3ZhciBmO2Y9QkQoZ2lkKGEsdGhpcy5iKSwyMTUpO3JldHVybiBmLmZsKHRoaXMuYSxkLGUpfTtfLlNqPWZ1bmN0aW9uIERWZChhLGIsYyl7dmFyIGQ7ZD1CRChnaWQoYSx0aGlzLmIpLDIxNSk7cmV0dXJuIGQubmwodGhpcy5hKS5maigpfTtfLlRqPWZ1bmN0aW9uIEVWZChhLGIsYyxkKXt2YXIgZTtlPUJEKGdpZChhLHRoaXMuYiksMjE1KTtlLm5sKHRoaXMuYSkuV2IoZCl9O18uVWo9ZnVuY3Rpb24gRlZkKGEsYixjKXtyZXR1cm4gQkQoZ2lkKGEsdGhpcy5iKSwyMTUpLm5sKHRoaXMuYSl9O18uVmo9ZnVuY3Rpb24gR1ZkKGEsYixjKXt2YXIgZDtkPUJEKGdpZChhLHRoaXMuYiksMjE1KTtkLm5sKHRoaXMuYSkuWGooKX07dmFyIEE2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVGZWF0dXJlTWFwRGVsZWdhdG9yJywxMzE0KTtiY2IoODksMSx7fSxJVmQsSlZkLEtWZCxMVmQpO18uUGo9ZnVuY3Rpb24gTVZkKGEsYixjLGQsZSl7dmFyIGY7Zj1iLkNoKGMpO2Y9PW51bGwmJmIuRGgoYyxmPUhWZCh0aGlzLGEpKTtpZighZSl7c3dpdGNoKHRoaXMuZSl7Y2FzZSA1MDpjYXNlIDQxOnJldHVybiBCRChmLDU4OSkuc2ooKTtjYXNlIDQwOnJldHVybiBCRChmLDIxNSkua2woKTt9fXJldHVybiBmfTtfLlFqPWZ1bmN0aW9uIE5WZChhLGIsYyxkLGUpe3ZhciBmLGc7Zz1iLkNoKGMpO2c9PW51bGwmJmIuRGgoYyxnPUhWZCh0aGlzLGEpKTtmPUJEKGcsNjkpLmxrKGQsZSk7cmV0dXJuIGZ9O18uUmo9ZnVuY3Rpb24gT1ZkKGEsYixjLGQsZSl7dmFyIGY7Zj1iLkNoKGMpO2YhPW51bGwmJihlPUJEKGYsNjkpLm1rKGQsZSkpO3JldHVybiBlfTtfLlNqPWZ1bmN0aW9uIFBWZChhLGIsYyl7dmFyIGQ7ZD1iLkNoKGMpO3JldHVybiBkIT1udWxsJiZCRChkLDc2KS5maigpfTtfLlRqPWZ1bmN0aW9uIFFWZChhLGIsYyxkKXt2YXIgZTtlPUJEKGIuQ2goYyksNzYpOyFlJiZiLkRoKGMsZT1IVmQodGhpcyxhKSk7ZS5XYihkKX07Xy5Vaj1mdW5jdGlvbiBSVmQoYSxiLGMpe3ZhciBkLGU7ZT1iLkNoKGMpO2U9PW51bGwmJmIuRGgoYyxlPUhWZCh0aGlzLGEpKTtpZihKRChlLDc2KSl7cmV0dXJuIEJEKGUsNzYpfWVsc2V7ZD1CRChiLkNoKGMpLDE1KTtyZXR1cm4gbmV3IGlZZChkKX19O18uVmo9ZnVuY3Rpb24gU1ZkKGEsYixjKXt2YXIgZDtkPUJEKGIuQ2goYyksNzYpOyFkJiZiLkRoKGMsZD1IVmQodGhpcyxhKSk7ZC5YaigpfTtfLmI9MDtfLmU9MDt2YXIgQjY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZU1hbnknLDg5KTtiY2IoNTA0LDEse30pO18uUWo9ZnVuY3Rpb24gV1ZkKGEsYixjLGQsZSl7dGhyb3cgdmJiKG5ldyBiZ2IpfTtfLlJqPWZ1bmN0aW9uIFhWZChhLGIsYyxkLGUpe3Rocm93IHZiYihuZXcgYmdiKX07Xy5Vaj1mdW5jdGlvbiBZVmQoYSxiLGMpe3JldHVybiBuZXcgWlZkKHRoaXMsYSxiLGMpfTt2YXIgVFZkO3ZhciBpNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlJyw1MDQpO2JjYigxMzMxLDEsenZlLFpWZCk7Xy5Xaj1mdW5jdGlvbiAkVmQoYSl7cmV0dXJuIHRoaXMuYS5Qaih0aGlzLmMsdGhpcy5kLHRoaXMuYixhLHRydWUpfTtfLmZqPWZ1bmN0aW9uIF9WZCgpe3JldHVybiB0aGlzLmEuU2oodGhpcy5jLHRoaXMuZCx0aGlzLmIpfTtfLldiPWZ1bmN0aW9uIGFXZChhKXt0aGlzLmEuVGoodGhpcy5jLHRoaXMuZCx0aGlzLmIsYSl9O18uWGo9ZnVuY3Rpb24gYldkKCl7dGhpcy5hLlZqKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX07Xy5iPTA7dmFyIEM2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUvMScsMTMzMSk7YmNiKDc2OSw1MDQse30sY1dkKTtfLlBqPWZ1bmN0aW9uIGRXZChhLGIsYyxkLGUpe3JldHVybiBOaWQoYSxhLmVoKCksYS5WZygpKT09dGhpcy5iP3RoaXMuc2soKSYmZD9haWQoYSk6YS5laCgpOm51bGx9O18uUWo9ZnVuY3Rpb24gZVdkKGEsYixjLGQsZSl7dmFyIGYsZzshIWEuZWgoKSYmKGU9KGY9YS5WZygpLGY+PTA/YS5RZyhlKTphLmVoKCkuaWgoYSwtMS1mLG51bGwsZSkpKTtnPWJMZChhLlRnKCksdGhpcy5lKTtyZXR1cm4gYS5TZyhkLGcsZSl9O18uUmo9ZnVuY3Rpb24gZldkKGEsYixjLGQsZSl7dmFyIGY7Zj1iTGQoYS5UZygpLHRoaXMuZSk7cmV0dXJuIGEuU2cobnVsbCxmLGUpfTtfLlNqPWZ1bmN0aW9uIGdXZChhLGIsYyl7dmFyIGQ7ZD1iTGQoYS5UZygpLHRoaXMuZSk7cmV0dXJuICEhYS5laCgpJiZhLlZnKCk9PWR9O18uVGo9ZnVuY3Rpb24gaFdkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoZCE9bnVsbCYmIWZLZCh0aGlzLmEsZCkpe3Rocm93IHZiYihuZXcgQ2RiKFl2ZSsoSkQoZCw1Nik/Z0xkKEJEKGQsNTYpLlRnKCkpOmlkYihyYihkKSkpK1p2ZSt0aGlzLmErXCInXCIpKX1lPWEuZWgoKTtnPWJMZChhLlRnKCksdGhpcy5lKTtpZihQRChkKSE9PVBEKGUpfHxhLlZnKCkhPWcmJmQhPW51bGwpe2lmKHA2ZChhLEJEKGQsNTYpKSl0aHJvdyB2YmIobmV3IFdkYihzdGUrYS5JYigpKSk7aT1udWxsOyEhZSYmKGk9KGY9YS5WZygpLGY+PTA/YS5RZyhpKTphLmVoKCkuaWgoYSwtMS1mLG51bGwsaSkpKTtoPUJEKGQsNDkpOyEhaCYmKGk9aC5naChhLGJMZChoLlRnKCksdGhpcy5iKSxudWxsLGkpKTtpPWEuU2coaCxnLGkpOyEhaSYmaS5GaSgpfWVsc2V7YS5MZygpJiZhLk1nKCkmJlVoZChhLG5ldyBuU2QoYSwxLGcsZCxkKSl9fTtfLlZqPWZ1bmN0aW9uIGlXZChhLGIsYyl7dmFyIGQsZSxmLGc7ZD1hLmVoKCk7aWYoZCl7Zz0oZT1hLlZnKCksZT49MD9hLlFnKG51bGwpOmEuZWgoKS5paChhLC0xLWUsbnVsbCxudWxsKSk7Zj1iTGQoYS5UZygpLHRoaXMuZSk7Zz1hLlNnKG51bGwsZixnKTshIWcmJmcuRmkoKX1lbHNle2EuTGcoKSYmYS5NZygpJiZVaGQoYSxuZXcgRFNkKGEsMSx0aGlzLmUsbnVsbCxudWxsKSl9fTtfLnNrPWZ1bmN0aW9uIGpXZCgpe3JldHVybiBmYWxzZX07dmFyIEU2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXInLDc2OSk7YmNiKDEzMTUsNzY5LHt9LGtXZCk7Xy5zaz1mdW5jdGlvbiBsV2QoKXtyZXR1cm4gdHJ1ZX07dmFyIEQ2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXJSZXNvbHZpbmcnLDEzMTUpO2JjYig1NjMsNTA0LHt9KTtfLlBqPWZ1bmN0aW9uIG9XZChhLGIsYyxkLGUpe3ZhciBmO3JldHVybiBmPWIuQ2goYyksZj09bnVsbD90aGlzLmI6UEQoZik9PT1QRChUVmQpP251bGw6Zn07Xy5Taj1mdW5jdGlvbiBwV2QoYSxiLGMpe3ZhciBkO2Q9Yi5DaChjKTtyZXR1cm4gZCE9bnVsbCYmKFBEKGQpPT09UEQoVFZkKXx8IXBiKGQsdGhpcy5iKSl9O18uVGo9ZnVuY3Rpb24gcVdkKGEsYixjLGQpe3ZhciBlLGY7aWYoYS5MZygpJiZhLk1nKCkpe2U9KGY9Yi5DaChjKSxmPT1udWxsP3RoaXMuYjpQRChmKT09PVBEKFRWZCk/bnVsbDpmKTtpZihkPT1udWxsKXtpZih0aGlzLmMhPW51bGwpe2IuRGgoYyxudWxsKTtkPXRoaXMuYn1lbHNlIHRoaXMuYiE9bnVsbD9iLkRoKGMsVFZkKTpiLkRoKGMsbnVsbCl9ZWxzZXt0aGlzLlNrKGQpO2IuRGgoYyxkKX1VaGQoYSx0aGlzLmQuVGsoYSwxLHRoaXMuZSxlLGQpKX1lbHNle2lmKGQ9PW51bGwpe3RoaXMuYyE9bnVsbD9iLkRoKGMsbnVsbCk6dGhpcy5iIT1udWxsP2IuRGgoYyxUVmQpOmIuRGgoYyxudWxsKX1lbHNle3RoaXMuU2soZCk7Yi5EaChjLGQpfX19O18uVmo9ZnVuY3Rpb24gcldkKGEsYixjKXt2YXIgZCxlO2lmKGEuTGcoKSYmYS5NZygpKXtkPShlPWIuQ2goYyksZT09bnVsbD90aGlzLmI6UEQoZSk9PT1QRChUVmQpP251bGw6ZSk7Yi5FaChjKTtVaGQoYSx0aGlzLmQuVGsoYSwxLHRoaXMuZSxkLHRoaXMuYikpfWVsc2V7Yi5FaChjKX19O18uU2s9ZnVuY3Rpb24gc1dkKGEpe3Rocm93IHZiYihuZXcgQmRiKX07dmFyIFQ2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhJyw1NjMpO2JjYigkdmUsMSx7fSxEV2QpO18uVGs9ZnVuY3Rpb24gRVdkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBEU2QoYSxiLGMsZCxlKX07Xy5Vaz1mdW5jdGlvbiBGV2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgRlNkKGEsYixjLGQsZSxmKX07dmFyIHRXZCx1V2QsdldkLHdXZCx4V2QseVdkLHpXZCxBV2QsQldkO3ZhciBONj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yJywkdmUpO2JjYigxMzMyLCR2ZSx7fSxHV2QpO18uVGs9ZnVuY3Rpb24gSFdkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBJU2QoYSxiLGMsQ2NiKEREKGQpKSxDY2IoREQoZSkpKX07Xy5Vaz1mdW5jdGlvbiBJV2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgSlNkKGEsYixjLENjYihERChkKSksQ2NiKEREKGUpKSxmKX07dmFyIEY2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMScsMTMzMik7YmNiKDEzMzMsJHZlLHt9LEpXZCk7Xy5Uaz1mdW5jdGlvbiBLV2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IHJTZChhLGIsYyxCRChkLDIxNykuYSxCRChlLDIxNykuYSl9O18uVWs9ZnVuY3Rpb24gTFdkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IHNTZChhLGIsYyxCRChkLDIxNykuYSxCRChlLDIxNykuYSxmKX07dmFyIEc2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMicsMTMzMyk7YmNiKDEzMzQsJHZlLHt9LE1XZCk7Xy5Uaz1mdW5jdGlvbiBOV2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IHRTZChhLGIsYyxCRChkLDE3MikuYSxCRChlLDE3MikuYSl9O18uVWs9ZnVuY3Rpb24gT1dkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IHVTZChhLGIsYyxCRChkLDE3MikuYSxCRChlLDE3MikuYSxmKX07dmFyIEg2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMycsMTMzNCk7YmNiKDEzMzUsJHZlLHt9LFBXZCk7Xy5Uaz1mdW5jdGlvbiBRV2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IHZTZChhLGIsYyxFZGIoRUQoZCkpLEVkYihFRChlKSkpfTtfLlVrPWZ1bmN0aW9uIFJXZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyB3U2QoYSxiLGMsRWRiKEVEKGQpKSxFZGIoRUQoZSkpLGYpfTt2YXIgSTY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci80JywxMzM1KTtiY2IoMTMzNiwkdmUse30sU1dkKTtfLlRrPWZ1bmN0aW9uIFRXZChhLGIsYyxkLGUpe3JldHVybiBuZXcgeFNkKGEsYixjLEJEKGQsMTU1KS5hLEJEKGUsMTU1KS5hKX07Xy5Vaz1mdW5jdGlvbiBVV2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgeVNkKGEsYixjLEJEKGQsMTU1KS5hLEJEKGUsMTU1KS5hLGYpfTt2YXIgSjY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81JywxMzM2KTtiY2IoMTMzNywkdmUse30sVldkKTtfLlRrPWZ1bmN0aW9uIFdXZChhLGIsYyxkLGUpe3JldHVybiBuZXcgelNkKGEsYixjLEJEKGQsMTkpLmEsQkQoZSwxOSkuYSl9O18uVWs9ZnVuY3Rpb24gWFdkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IEFTZChhLGIsYyxCRChkLDE5KS5hLEJEKGUsMTkpLmEsZil9O3ZhciBLNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzYnLDEzMzcpO2JjYigxMzM4LCR2ZSx7fSxZV2QpO18uVGs9ZnVuY3Rpb24gWldkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBCU2QoYSxiLGMsQkQoZCwxNjIpLmEsQkQoZSwxNjIpLmEpfTtfLlVrPWZ1bmN0aW9uICRXZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBDU2QoYSxiLGMsQkQoZCwxNjIpLmEsQkQoZSwxNjIpLmEsZil9O3ZhciBMNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzcnLDEzMzgpO2JjYigxMzM5LCR2ZSx7fSxfV2QpO18uVGs9ZnVuY3Rpb24gYVhkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBHU2QoYSxiLGMsQkQoZCwxODQpLmEsQkQoZSwxODQpLmEpfTtfLlVrPWZ1bmN0aW9uIGJYZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBIU2QoYSxiLGMsQkQoZCwxODQpLmEsQkQoZSwxODQpLmEsZil9O3ZhciBNNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgnLDEzMzkpO2JjYigxMzE3LDU2Myx7fSxjWGQpO18uU2s9ZnVuY3Rpb24gZFhkKGEpe2lmKCF0aGlzLmEud2ooYSkpe3Rocm93IHZiYihuZXcgQ2RiKFl2ZStyYihhKStadmUrdGhpcy5hK1wiJ1wiKSl9fTt2YXIgTzY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljJywxMzE3KTtiY2IoMTMxOCw1NjMse30sZVhkKTtfLlNrPWZ1bmN0aW9uIGZYZChhKXt9O3ZhciBQNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVN0YXRpYycsMTMxOCk7YmNiKDc3MCw1NjMse30pO18uU2o9ZnVuY3Rpb24gZ1hkKGEsYixjKXt2YXIgZDtkPWIuQ2goYyk7cmV0dXJuIGQhPW51bGx9O18uVGo9ZnVuY3Rpb24gaFhkKGEsYixjLGQpe3ZhciBlLGY7aWYoYS5MZygpJiZhLk1nKCkpe2U9dHJ1ZTtmPWIuQ2goYyk7aWYoZj09bnVsbCl7ZT1mYWxzZTtmPXRoaXMuYn1lbHNlIFBEKGYpPT09UEQoVFZkKSYmKGY9bnVsbCk7aWYoZD09bnVsbCl7aWYodGhpcy5jIT1udWxsKXtiLkRoKGMsbnVsbCk7ZD10aGlzLmJ9ZWxzZXtiLkRoKGMsVFZkKX19ZWxzZXt0aGlzLlNrKGQpO2IuRGgoYyxkKX1VaGQoYSx0aGlzLmQuVWsoYSwxLHRoaXMuZSxmLGQsIWUpKX1lbHNle2lmKGQ9PW51bGwpe3RoaXMuYyE9bnVsbD9iLkRoKGMsbnVsbCk6Yi5EaChjLFRWZCl9ZWxzZXt0aGlzLlNrKGQpO2IuRGgoYyxkKX19fTtfLlZqPWZ1bmN0aW9uIGlYZChhLGIsYyl7dmFyIGQsZTtpZihhLkxnKCkmJmEuTWcoKSl7ZD10cnVlO2U9Yi5DaChjKTtpZihlPT1udWxsKXtkPWZhbHNlO2U9dGhpcy5ifWVsc2UgUEQoZSk9PT1QRChUVmQpJiYoZT1udWxsKTtiLkVoKGMpO1VoZChhLHRoaXMuZC5VayhhLDIsdGhpcy5lLGUsdGhpcy5iLGQpKX1lbHNle2IuRWgoYyl9fTt2YXIgUzY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlJyw3NzApO2JjYigxMzE5LDc3MCx7fSxqWGQpO18uU2s9ZnVuY3Rpb24ga1hkKGEpe2lmKCF0aGlzLmEud2ooYSkpe3Rocm93IHZiYihuZXcgQ2RiKFl2ZStyYihhKStadmUrdGhpcy5hK1wiJ1wiKSl9fTt2YXIgUTY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlRHluYW1pYycsMTMxOSk7YmNiKDEzMjAsNzcwLHt9LGxYZCk7Xy5Taz1mdW5jdGlvbiBtWGQoYSl7fTt2YXIgUjY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlU3RhdGljJywxMzIwKTtiY2IoMzk4LDUwNCx7fSxuWGQpO18uUGo9ZnVuY3Rpb24gcFhkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksajtqPWIuQ2goYyk7aWYodGhpcy5LaigpJiZQRChqKT09PVBEKFRWZCkpe3JldHVybiBudWxsfWVsc2UgaWYodGhpcy5zaygpJiZkJiZqIT1udWxsKXtoPUJEKGosNDkpO2lmKGgua2goKSl7aT14aWQoYSxoKTtpZihoIT1pKXtpZighZktkKHRoaXMuYSxpKSl7dGhyb3cgdmJiKG5ldyBDZGIoWXZlK3JiKGkpK1p2ZSt0aGlzLmErXCInXCIpKX1iLkRoKGMsaj1pKTtpZih0aGlzLnJrKCkpe2Y9QkQoaSw0OSk7Zz1oLmloKGEsIXRoaXMuYj8tMS1iTGQoYS5UZygpLHRoaXMuZSk6YkxkKGguVGcoKSx0aGlzLmIpLG51bGwsbnVsbCk7IWYuZWgoKSYmKGc9Zi5naChhLCF0aGlzLmI/LTEtYkxkKGEuVGcoKSx0aGlzLmUpOmJMZChmLlRnKCksdGhpcy5iKSxudWxsLGcpKTshIWcmJmcuRmkoKX1hLkxnKCkmJmEuTWcoKSYmVWhkKGEsbmV3IERTZChhLDksdGhpcy5lLGgsaSkpfX1yZXR1cm4gan1lbHNle3JldHVybiBqfX07Xy5Raj1mdW5jdGlvbiBxWGQoYSxiLGMsZCxlKXt2YXIgZixnO2c9Yi5DaChjKTtQRChnKT09PVBEKFRWZCkmJihnPW51bGwpO2IuRGgoYyxkKTtpZih0aGlzLmJqKCkpe2lmKFBEKGcpIT09UEQoZCkmJmchPW51bGwpe2Y9QkQoZyw0OSk7ZT1mLmloKGEsYkxkKGYuVGcoKSx0aGlzLmIpLG51bGwsZSl9fWVsc2UgdGhpcy5yaygpJiZnIT1udWxsJiYoZT1CRChnLDQ5KS5paChhLC0xLWJMZChhLlRnKCksdGhpcy5lKSxudWxsLGUpKTtpZihhLkxnKCkmJmEuTWcoKSl7IWUmJihlPW5ldyBJeGQoNCkpO2UuRWkobmV3IERTZChhLDEsdGhpcy5lLGcsZCkpfXJldHVybiBlfTtfLlJqPWZ1bmN0aW9uIHJYZChhLGIsYyxkLGUpe3ZhciBmO2Y9Yi5DaChjKTtQRChmKT09PVBEKFRWZCkmJihmPW51bGwpO2IuRWgoYyk7aWYoYS5MZygpJiZhLk1nKCkpeyFlJiYoZT1uZXcgSXhkKDQpKTt0aGlzLktqKCk/ZS5FaShuZXcgRFNkKGEsMix0aGlzLmUsZixudWxsKSk6ZS5FaShuZXcgRFNkKGEsMSx0aGlzLmUsZixudWxsKSl9cmV0dXJuIGV9O18uU2o9ZnVuY3Rpb24gc1hkKGEsYixjKXt2YXIgZDtkPWIuQ2goYyk7cmV0dXJuIGQhPW51bGx9O18uVGo9ZnVuY3Rpb24gdFhkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoZCE9bnVsbCYmIWZLZCh0aGlzLmEsZCkpe3Rocm93IHZiYihuZXcgQ2RiKFl2ZSsoSkQoZCw1Nik/Z0xkKEJEKGQsNTYpLlRnKCkpOmlkYihyYihkKSkpK1p2ZSt0aGlzLmErXCInXCIpKX1pPWIuQ2goYyk7aD1pIT1udWxsO3RoaXMuS2ooKSYmUEQoaSk9PT1QRChUVmQpJiYoaT1udWxsKTtnPW51bGw7aWYodGhpcy5iaigpKXtpZihQRChpKSE9PVBEKGQpKXtpZihpIT1udWxsKXtlPUJEKGksNDkpO2c9ZS5paChhLGJMZChlLlRnKCksdGhpcy5iKSxudWxsLGcpfWlmKGQhPW51bGwpe2U9QkQoZCw0OSk7Zz1lLmdoKGEsYkxkKGUuVGcoKSx0aGlzLmIpLG51bGwsZyl9fX1lbHNlIGlmKHRoaXMucmsoKSl7aWYoUEQoaSkhPT1QRChkKSl7aSE9bnVsbCYmKGc9QkQoaSw0OSkuaWgoYSwtMS1iTGQoYS5UZygpLHRoaXMuZSksbnVsbCxnKSk7ZCE9bnVsbCYmKGc9QkQoZCw0OSkuZ2goYSwtMS1iTGQoYS5UZygpLHRoaXMuZSksbnVsbCxnKSl9fWQ9PW51bGwmJnRoaXMuS2ooKT9iLkRoKGMsVFZkKTpiLkRoKGMsZCk7aWYoYS5MZygpJiZhLk1nKCkpe2Y9bmV3IEZTZChhLDEsdGhpcy5lLGksZCx0aGlzLktqKCkmJiFoKTtpZighZyl7VWhkKGEsZil9ZWxzZXtnLkVpKGYpO2cuRmkoKX19ZWxzZSAhIWcmJmcuRmkoKX07Xy5Waj1mdW5jdGlvbiB1WGQoYSxiLGMpe3ZhciBkLGUsZixnLGg7aD1iLkNoKGMpO2c9aCE9bnVsbDt0aGlzLktqKCkmJlBEKGgpPT09UEQoVFZkKSYmKGg9bnVsbCk7Zj1udWxsO2lmKGghPW51bGwpe2lmKHRoaXMuYmooKSl7ZD1CRChoLDQ5KTtmPWQuaWgoYSxiTGQoZC5UZygpLHRoaXMuYiksbnVsbCxmKX1lbHNlIHRoaXMucmsoKSYmKGY9QkQoaCw0OSkuaWgoYSwtMS1iTGQoYS5UZygpLHRoaXMuZSksbnVsbCxmKSl9Yi5FaChjKTtpZihhLkxnKCkmJmEuTWcoKSl7ZT1uZXcgRlNkKGEsdGhpcy5LaigpPzI6MSx0aGlzLmUsaCxudWxsLGcpO2lmKCFmKXtVaGQoYSxlKX1lbHNle2YuRWkoZSk7Zi5GaSgpfX1lbHNlICEhZiYmZi5GaSgpfTtfLmJqPWZ1bmN0aW9uIHZYZCgpe3JldHVybiBmYWxzZX07Xy5yaz1mdW5jdGlvbiB3WGQoKXtyZXR1cm4gZmFsc2V9O18uc2s9ZnVuY3Rpb24geFhkKCl7cmV0dXJuIGZhbHNlfTtfLktqPWZ1bmN0aW9uIHlYZCgpe3JldHVybiBmYWxzZX07dmFyIGg3PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0JywzOTgpO2JjYig1NjQsMzk4LHt9LHpYZCk7Xy5yaz1mdW5jdGlvbiBBWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIF82PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnQnLDU2NCk7YmNiKDEzMjMsNTY0LHt9LEJYZCk7Xy5zaz1mdW5jdGlvbiBDWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIFU2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmcnLDEzMjMpO2JjYig3NzIsNTY0LHt9LERYZCk7Xy5Laj1mdW5jdGlvbiBFWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIFc2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRVbnNldHRhYmxlJyw3NzIpO2JjYigxMzI1LDc3Mix7fSxGWGQpO18uc2s9ZnVuY3Rpb24gR1hkKCl7cmV0dXJuIHRydWV9O3ZhciBWNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50VW5zZXR0YWJsZVJlc29sdmluZycsMTMyNSk7YmNiKDY0MCw1NjQse30sSFhkKTtfLmJqPWZ1bmN0aW9uIElYZCgpe3JldHVybiB0cnVlfTt2YXIgJDY9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlJyw2NDApO2JjYigxMzI0LDY0MCx7fSxKWGQpO18uc2s9ZnVuY3Rpb24gS1hkKCl7cmV0dXJuIHRydWV9O3ZhciBYNj1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VSZXNvbHZpbmcnLDEzMjQpO2JjYig3NzMsNjQwLHt9LExYZCk7Xy5Laj1mdW5jdGlvbiBNWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIFo2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGUnLDc3Myk7YmNiKDEzMjYsNzczLHt9LE5YZCk7Xy5zaz1mdW5jdGlvbiBPWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIFk2PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmcnLDEzMjYpO2JjYig2NDEsMzk4LHt9LFBYZCk7Xy5zaz1mdW5jdGlvbiBRWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGQ3PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nJyw2NDEpO2JjYigxMzI3LDY0MSx7fSxSWGQpO18uS2o9ZnVuY3Rpb24gU1hkKCl7cmV0dXJuIHRydWV9O3ZhciBhNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1Vuc2V0dGFibGUnLDEzMjcpO2JjYig3NzQsNjQxLHt9LFRYZCk7Xy5iaj1mdW5jdGlvbiBVWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGM3PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UnLDc3NCk7YmNiKDEzMjgsNzc0LHt9LFZYZCk7Xy5Laj1mdW5jdGlvbiBXWGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGI3PW1kYihxdGUsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2VVbnNldHRhYmxlJywxMzI4KTtiY2IoMTMyMSwzOTgse30sWFhkKTtfLktqPWZ1bmN0aW9uIFlYZCgpe3JldHVybiB0cnVlfTt2YXIgZTc9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RVbnNldHRhYmxlJywxMzIxKTtiY2IoNzcxLDM5OCx7fSxaWGQpO18uYmo9ZnVuY3Rpb24gJFhkKCl7cmV0dXJuIHRydWV9O3ZhciBnNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlJyw3NzEpO2JjYigxMzIyLDc3MSx7fSxfWGQpO18uS2o9ZnVuY3Rpb24gYVlkKCl7cmV0dXJuIHRydWV9O3ZhciBmNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlVW5zZXR0YWJsZScsMTMyMik7YmNiKDc3NSw1NjUsWHZlLGRZZCk7Xy5Qaz1mdW5jdGlvbiBlWWQoYSl7cmV0dXJuIG5ldyBkWWQodGhpcy5hLHRoaXMuYyxhKX07Xy5kZD1mdW5jdGlvbiBmWWQoKXtyZXR1cm4gdGhpcy5ifTtfLlFrPWZ1bmN0aW9uIGdZZChhLGIsYyl7cmV0dXJuIGJZZCh0aGlzLGEsdGhpcy5iLGMpfTtfLlJrPWZ1bmN0aW9uIGhZZChhLGIsYyl7cmV0dXJuIGNZZCh0aGlzLGEsdGhpcy5iLGMpfTt2YXIgajc9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnknLDc3NSk7YmNiKDEzMjksMSx6dmUsaVlkKTtfLldqPWZ1bmN0aW9uIGpZZChhKXtyZXR1cm4gdGhpcy5hfTtfLmZqPWZ1bmN0aW9uIGtZZCgpe3JldHVybiBKRCh0aGlzLmEsOTUpP0JEKHRoaXMuYSw5NSkuZmooKTohdGhpcy5hLmRjKCl9O18uV2I9ZnVuY3Rpb24gbFlkKGEpe3RoaXMuYS4kYigpO3RoaXMuYS5HYyhCRChhLDE1KSl9O18uWGo9ZnVuY3Rpb24gbVlkKCl7SkQodGhpcy5hLDk1KT9CRCh0aGlzLmEsOTUpLlhqKCk6dGhpcy5hLiRiKCl9O3ZhciBrNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NldHRpbmdNYW55JywxMzI5KTtiY2IoMTMzMCw1NjUsWHZlLG5ZZCk7Xy5Paz1mdW5jdGlvbiBvWWQoYSl7cmV0dXJuIG5ldyBzWWQoKFE4ZCgpLFA4ZCksdGhpcy5iLkloKHRoaXMuYSxhKSl9O18uZGQ9ZnVuY3Rpb24gcFlkKCl7cmV0dXJuIG51bGx9O18uUWs9ZnVuY3Rpb24gcVlkKGEsYixjKXtyZXR1cm4gY307Xy5Saz1mdW5jdGlvbiByWWQoYSxiLGMpe3JldHVybiBjfTt2YXIgbDc9bWRiKHF0ZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TaW1wbGVDb250ZW50RmVhdHVyZU1hcEVudHJ5JywxMzMwKTtiY2IoNjQyLDU2NSxYdmUsc1lkKTtfLk9rPWZ1bmN0aW9uIHRZZChhKXtyZXR1cm4gbmV3IHNZZCh0aGlzLmMsYSl9O18uZGQ9ZnVuY3Rpb24gdVlkKCl7cmV0dXJuIHRoaXMuYX07Xy5Raz1mdW5jdGlvbiB2WWQoYSxiLGMpe3JldHVybiBjfTtfLlJrPWZ1bmN0aW9uIHdZZChhLGIsYyl7cmV0dXJuIGN9O3ZhciBtNz1tZGIocXRlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NpbXBsZUZlYXR1cmVNYXBFbnRyeScsNjQyKTtiY2IoMzkxLDQ5NyxvdWUseFlkKTtfLnJpPWZ1bmN0aW9uIHlZZChhKXtyZXR1cm4gS0MoYzUsVWhlLDI2LGEsMCwxKX07Xy5uaT1mdW5jdGlvbiB6WWQoKXtyZXR1cm4gZmFsc2V9O3ZhciBvNz1tZGIocXRlLCdFU3VwZXJBZGFwdGVyLzEnLDM5MSk7YmNiKDQ0NCw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDgzNjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDQ6MSwxMTQ6MSwxMTU6MX0sQllkKTtfLl9nPWZ1bmN0aW9uIENZZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IEtZZCh0aGlzLGo1LHRoaXMpKSx0aGlzLmE7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoakdkKCksaUdkKSksWEtkKChkPUJEKEFqZCh0aGlzLDE2KSwyNiksIWQ/aUdkOmQpLGEpLGIsYyl9O18uamg9ZnVuY3Rpb24gRFlkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSksVHhkKHRoaXMuQWIsYSxjKTtjYXNlIDI6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IEtZZCh0aGlzLGo1LHRoaXMpKSxUeGQodGhpcy5hLGEsYyk7fXJldHVybiBlPUJEKFhLZCgoZD1CRChBamQodGhpcywxNiksMjYpLCFkPyhqR2QoKSxpR2QpOmQpLGIpLDY2KSxlLk5qKCkuUmoodGhpcyx5amQodGhpcyksYi1hTGQoKGpHZCgpLGlHZCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gRVlkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChqR2QoKSxpR2QpKSxYS2QoKGI9QkQoQWpkKHRoaXMsMTYpLDI2KSwhYj9pR2Q6YiksYSkpfTtfLnNoPWZ1bmN0aW9uIEZZZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTtVeGQodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBjVWQoYTUsdGhpcywwLDMpKTt5dGQodGhpcy5BYixCRChiLDE0KSk7cmV0dXJuO2Nhc2UgMTpwbmQodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBLWWQodGhpcyxqNSx0aGlzKSk7VXhkKHRoaXMuYSk7IXRoaXMuYSYmKHRoaXMuYT1uZXcgS1lkKHRoaXMsajUsdGhpcykpO3l0ZCh0aGlzLmEsQkQoYiwxNCkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKGpHZCgpLGlHZCkpLFhLZCgoYz1CRChBamQodGhpcywxNiksMjYpLCFjP2lHZDpjKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBHWWQoKXtyZXR1cm4gakdkKCksaUdkfTtfLkJoPWZ1bmN0aW9uIEhZZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgY1VkKGE1LHRoaXMsMCwzKSk7VXhkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6cG5kKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBLWWQodGhpcyxqNSx0aGlzKSk7VXhkKHRoaXMuYSk7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoakdkKCksaUdkKSksWEtkKChiPUJEKEFqZCh0aGlzLDE2KSwyNiksIWI/aUdkOmIpLGEpKX07dmFyIHU3PW1kYihxdGUsJ0VUeXBlUGFyYW1ldGVySW1wbCcsNDQ0KTtiY2IoNDQ1LDg1LFB2ZSxLWWQpO18uY2o9ZnVuY3Rpb24gTFlkKGEsYil7cmV0dXJuIElZZCh0aGlzLEJEKGEsODcpLGIpfTtfLmRqPWZ1bmN0aW9uIE1ZZChhLGIpe3JldHVybiBKWWQodGhpcyxCRChhLDg3KSxiKX07dmFyIHE3PW1kYihxdGUsJ0VUeXBlUGFyYW1ldGVySW1wbC8xJyw0NDUpO2JjYig2MzQsNDMsZmtlLE5ZZCk7Xy5lYz1mdW5jdGlvbiBPWWQoKXtyZXR1cm4gbmV3IFJZZCh0aGlzKX07dmFyIHQ3PW1kYihxdGUsJ0VUeXBlUGFyYW1ldGVySW1wbC8yJyw2MzQpO2JjYig1NTYsZWllLGZpZSxSWWQpO18uRmM9ZnVuY3Rpb24gU1lkKGEpe3JldHVybiBQWWQodGhpcyxCRChhLDg3KSl9O18uR2M9ZnVuY3Rpb24gVFlkKGEpe3ZhciBiLGMsZDtkPWZhbHNlO2ZvcihjPWEuS2MoKTtjLk9iKCk7KXtiPUJEKGMuUGIoKSw4Nyk7UmhiKHRoaXMuYSxiLCcnKT09bnVsbCYmKGQ9dHJ1ZSl9cmV0dXJuIGR9O18uJGI9ZnVuY3Rpb24gVVlkKCl7VWhiKHRoaXMuYSl9O18uSGM9ZnVuY3Rpb24gVllkKGEpe3JldHVybiBNaGIodGhpcy5hLGEpfTtfLktjPWZ1bmN0aW9uIFdZZCgpe3ZhciBhO3JldHVybiBhPW5ldyBuaWIoKG5ldyBlaWIodGhpcy5hKSkuYSksbmV3IFpZZChhKX07Xy5NYz1mdW5jdGlvbiBYWWQoYSl7cmV0dXJuIFFZZCh0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIFlZZCgpe3JldHVybiBWaGIodGhpcy5hKX07dmFyIHM3PW1kYihxdGUsJ0VUeXBlUGFyYW1ldGVySW1wbC8yLzEnLDU1Nik7YmNiKDU1NywxLGFpZSxaWWQpO18uTmI9ZnVuY3Rpb24gJFlkKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIGFaZCgpe3JldHVybiBCRChsaWIodGhpcy5hKS5jZCgpLDg3KX07Xy5PYj1mdW5jdGlvbiBfWWQoKXtyZXR1cm4gdGhpcy5hLmJ9O18uUWI9ZnVuY3Rpb24gYlpkKCl7bWliKHRoaXMuYSl9O3ZhciByNz1tZGIocXRlLCdFVHlwZVBhcmFtZXRlckltcGwvMi8xLzEnLDU1Nyk7YmNiKDEyNzYsNDMsZmtlLGNaZCk7Xy5fYj1mdW5jdGlvbiBkWmQoYSl7cmV0dXJuIE5EKGEpP1FoYih0aGlzLGEpOiEhaXJiKHRoaXMuZixhKX07Xy54Yz1mdW5jdGlvbiBlWmQoYSl7dmFyIGIsYztiPU5EKGEpP1BoYih0aGlzLGEpOldkKGlyYih0aGlzLmYsYSkpO2lmKEpEKGIsODM3KSl7Yz1CRChiLDgzNyk7Yj1jLl9qKCk7UmhiKHRoaXMsQkQoYSwyMzUpLGIpO3JldHVybiBifWVsc2UgcmV0dXJuIGIhPW51bGw/YjphPT1udWxsPyhnNWQoKSxmNWQpOm51bGx9O3ZhciB3Nz1tZGIocXRlLCdFVmFsaWRhdG9yUmVnaXN0cnlJbXBsJywxMjc2KTtiY2IoMTMxMyw3MDQsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDE5NDE6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LG1aZCk7Xy5JaD1mdW5jdGlvbiBuWmQoYSxiKXtzd2l0Y2goYS55aigpKXtjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAzMTpjYXNlIDMyOmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDg6Y2FzZSA0OTpjYXNlIDIwOnJldHVybiBiPT1udWxsP251bGw6ZmNiKGIpO2Nhc2UgMjU6cmV0dXJuIGdaZChiKTtjYXNlIDI3OnJldHVybiBoWmQoYik7Y2FzZSAyODpyZXR1cm4gaVpkKGIpO2Nhc2UgMjk6cmV0dXJuIGI9PW51bGw/bnVsbDpDUWQoUG1kWzBdLEJEKGIsMTk5KSk7Y2FzZSA0MTpyZXR1cm4gYj09bnVsbD8nJzpoZGIoQkQoYiwyOTApKTtjYXNlIDQyOnJldHVybiBmY2IoYik7Y2FzZSA1MDpyZXR1cm4gR0QoYik7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYih0dGUrYS5uZSgpK3V0ZSkpO319O18uSmg9ZnVuY3Rpb24gb1pkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO3N3aXRjaChhLkc9PS0xJiYoYS5HPShtPWJLZChhKSxtP0hMZChtLk1oKCksYSk6LTEpKSxhLkcpe2Nhc2UgMDpyZXR1cm4gYz1uZXcgT0pkLGM7Y2FzZSAxOnJldHVybiBiPW5ldyBSSGQsYjtjYXNlIDI6cmV0dXJuIGQ9bmV3IGhMZCxkO2Nhc2UgNDpyZXR1cm4gZT1uZXcgTVBkLGU7Y2FzZSA1OnJldHVybiBmPW5ldyBhUWQsZjtjYXNlIDY6cmV0dXJuIGc9bmV3IHJRZCxnO2Nhc2UgNzpyZXR1cm4gaD1uZXcgJG1kLGg7Y2FzZSAxMDpyZXR1cm4gaj1uZXcgTUdkLGo7Y2FzZSAxMTpyZXR1cm4gaz1uZXcgU1NkLGs7Y2FzZSAxMjpyZXR1cm4gbD1uZXcgZW9kLGw7Y2FzZSAxMzpyZXR1cm4gbj1uZXcgclVkLG47Y2FzZSAxNDpyZXR1cm4gbz1uZXcgRlVkLG87Y2FzZSAxNzpyZXR1cm4gcD1uZXcgWFVkLHA7Y2FzZSAxODpyZXR1cm4gaT1uZXcgVVFkLGk7Y2FzZSAxOTpyZXR1cm4gcT1uZXcgQllkLHE7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYih4dGUrYS56Yit1dGUpKTt9fTtfLktoPWZ1bmN0aW9uIHBaZChhLGIpe3N3aXRjaChhLnlqKCkpe2Nhc2UgMjA6cmV0dXJuIGI9PW51bGw/bnVsbDpuZXcgdGdiKGIpO2Nhc2UgMjE6cmV0dXJuIGI9PW51bGw/bnVsbDpuZXcgWWdiKGIpO2Nhc2UgMjM6Y2FzZSAyMjpyZXR1cm4gYj09bnVsbD9udWxsOmZaZChiKTtjYXNlIDI2OmNhc2UgMjQ6cmV0dXJuIGI9PW51bGw/bnVsbDpTY2IoSWNiKGIsLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMjU6cmV0dXJuIFhtZChiKTtjYXNlIDI3OnJldHVybiBqWmQoYik7Y2FzZSAyODpyZXR1cm4ga1pkKGIpO2Nhc2UgMjk6cmV0dXJuIGxaZChiKTtjYXNlIDMyOmNhc2UgMzE6cmV0dXJuIGI9PW51bGw/bnVsbDpIY2IoYik7Y2FzZSAzODpjYXNlIDM3OnJldHVybiBiPT1udWxsP251bGw6bmV3IE9kYihiKTtjYXNlIDQwOmNhc2UgMzk6cmV0dXJuIGI9PW51bGw/bnVsbDptZWIoSWNiKGIsUmllLE9oZSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gYj09bnVsbD9udWxsOm51bGw7Y2FzZSA0NDpjYXNlIDQzOnJldHVybiBiPT1udWxsP251bGw6QWViKEpjYihiKSk7Y2FzZSA0OTpjYXNlIDQ4OnJldHVybiBiPT1udWxsP251bGw6V2ViKEljYihiLGF3ZSwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MDpyZXR1cm4gYjtkZWZhdWx0OnRocm93IHZiYihuZXcgV2RiKHR0ZSthLm5lKCkrdXRlKSk7fX07dmFyIHg3PW1kYihxdGUsJ0Vjb3JlRmFjdG9yeUltcGwnLDEzMTMpO2JjYig1NDcsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSwxOTM5OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDU0NzoxLDExNDoxLDExNToxLDY3NToxfSxBWmQpO18uZ2I9ZmFsc2U7Xy5oYj1mYWxzZTt2YXIgclpkLHNaZD1mYWxzZTt2YXIgbzg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbCcsNTQ3KTtiY2IoMTE4NCwxLHs4Mzc6MX0sRVpkKTtfLl9qPWZ1bmN0aW9uIEZaZCgpe3JldHVybiBJNmQoKSxINmR9O3ZhciBJNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzEnLDExODQpO2JjYigxMTkzLDEsbndlLEdaZCk7Xy53aj1mdW5jdGlvbiBIWmQoYSl7cmV0dXJuIEpEKGEsMTQ3KX07Xy54aj1mdW5jdGlvbiBJWmQoYSl7cmV0dXJuIEtDKGs1LFVoZSwxNDcsYSwwLDEpfTt2YXIgeTc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8xMCcsMTE5Myk7YmNiKDExOTQsMSxud2UsSlpkKTtfLndqPWZ1bmN0aW9uIEtaZChhKXtyZXR1cm4gSkQoYSwxOTEpfTtfLnhqPWZ1bmN0aW9uIExaZChhKXtyZXR1cm4gS0MobDUsVWhlLDE5MSxhLDAsMSl9O3ZhciB6Nz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzExJywxMTk0KTtiY2IoMTE5NSwxLG53ZSxNWmQpO18ud2o9ZnVuY3Rpb24gTlpkKGEpe3JldHVybiBKRChhLDU2KX07Xy54aj1mdW5jdGlvbiBPWmQoYSl7cmV0dXJuIEtDKG01LFVoZSw1NixhLDAsMSl9O3ZhciBBNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzEyJywxMTk1KTtiY2IoMTE5NiwxLG53ZSxQWmQpO18ud2o9ZnVuY3Rpb24gUVpkKGEpe3JldHVybiBKRChhLDM5OSl9O18ueGo9ZnVuY3Rpb24gUlpkKGEpe3JldHVybiBLQyhuNSxOdmUsNTksYSwwLDEpfTt2YXIgQjc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8xMycsMTE5Nik7YmNiKDExOTcsMSxud2UsU1pkKTtfLndqPWZ1bmN0aW9uIFRaZChhKXtyZXR1cm4gSkQoYSwyMzUpfTtfLnhqPWZ1bmN0aW9uIFVaZChhKXtyZXR1cm4gS0MobzUsVWhlLDIzNSxhLDAsMSl9O3ZhciBDNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzE0JywxMTk3KTtiY2IoMTE5OCwxLG53ZSxWWmQpO18ud2o9ZnVuY3Rpb24gV1pkKGEpe3JldHVybiBKRChhLDUwOSl9O18ueGo9ZnVuY3Rpb24gWFpkKGEpe3JldHVybiBLQyhwNSxVaGUsMjAxNyxhLDAsMSl9O3ZhciBENz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzE1JywxMTk4KTtiY2IoMTE5OSwxLG53ZSxZWmQpO18ud2o9ZnVuY3Rpb24gWlpkKGEpe3JldHVybiBKRChhLDk5KX07Xy54aj1mdW5jdGlvbiAkWmQoYSl7cmV0dXJuIEtDKHE1LE12ZSwxOCxhLDAsMSl9O3ZhciBFNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzE2JywxMTk5KTtiY2IoMTIwMCwxLG53ZSxfWmQpO18ud2o9ZnVuY3Rpb24gYSRkKGEpe3JldHVybiBKRChhLDE3MCl9O18ueGo9ZnVuY3Rpb24gYiRkKGEpe3JldHVybiBLQyh0NSxNdmUsMTcwLGEsMCwxKX07dmFyIEY3PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMTcnLDEyMDApO2JjYigxMjAxLDEsbndlLGMkZCk7Xy53aj1mdW5jdGlvbiBkJGQoYSl7cmV0dXJuIEpEKGEsNDcyKX07Xy54aj1mdW5jdGlvbiBlJGQoYSl7cmV0dXJuIEtDKHY1LFVoZSw0NzIsYSwwLDEpfTt2YXIgRzc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8xOCcsMTIwMSk7YmNiKDEyMDIsMSxud2UsZiRkKTtfLndqPWZ1bmN0aW9uIGckZChhKXtyZXR1cm4gSkQoYSw1NDgpfTtfLnhqPWZ1bmN0aW9uIGgkZChhKXtyZXR1cm4gS0MoeDYsa3ZlLDU0OCxhLDAsMSl9O3ZhciBINz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzE5JywxMjAyKTtiY2IoMTE4NSwxLG53ZSxpJGQpO18ud2o9ZnVuY3Rpb24gaiRkKGEpe3JldHVybiBKRChhLDMyMil9O18ueGo9ZnVuY3Rpb24gayRkKGEpe3JldHVybiBLQyhiNSxNdmUsMzQsYSwwLDEpfTt2YXIgVDc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8yJywxMTg1KTtiY2IoMTIwMywxLG53ZSxsJGQpO18ud2o9ZnVuY3Rpb24gbSRkKGEpe3JldHVybiBKRChhLDI0MSl9O18ueGo9ZnVuY3Rpb24gbiRkKGEpe3JldHVybiBLQyhqNSxUdmUsODcsYSwwLDEpfTt2YXIgSjc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8yMCcsMTIwMyk7YmNiKDEyMDQsMSxud2UsbyRkKTtfLndqPWZ1bmN0aW9uIHAkZChhKXtyZXR1cm4gSkQoYSw0NDQpfTtfLnhqPWZ1bmN0aW9uIHEkZChhKXtyZXR1cm4gS0ModTUsVWhlLDgzNixhLDAsMSl9O3ZhciBLNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzIxJywxMjA0KTtiY2IoMTIwNSwxLG53ZSxyJGQpO18ud2o9ZnVuY3Rpb24gcyRkKGEpe3JldHVybiBLRChhKX07Xy54aj1mdW5jdGlvbiB0JGQoYSl7cmV0dXJuIEtDKHdJLG5pZSw0NzYsYSw4LDEpfTt2YXIgTDc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8yMicsMTIwNSk7YmNiKDEyMDYsMSxud2UsdSRkKTtfLndqPWZ1bmN0aW9uIHYkZChhKXtyZXR1cm4gSkQoYSwxOTApfTtfLnhqPWZ1bmN0aW9uIHckZChhKXtyZXR1cm4gS0MoU0QsbmllLDE5MCxhLDAsMil9O3ZhciBNNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzIzJywxMjA2KTtiY2IoMTIwNywxLG53ZSx4JGQpO18ud2o9ZnVuY3Rpb24geSRkKGEpe3JldHVybiBKRChhLDIxNyl9O18ueGo9ZnVuY3Rpb24geiRkKGEpe3JldHVybiBLQyh4SSxuaWUsMjE3LGEsMCwxKX07dmFyIE43PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMjQnLDEyMDcpO2JjYigxMjA4LDEsbndlLEEkZCk7Xy53aj1mdW5jdGlvbiBCJGQoYSl7cmV0dXJuIEpEKGEsMTcyKX07Xy54aj1mdW5jdGlvbiBDJGQoYSl7cmV0dXJuIEtDKHlJLG5pZSwxNzIsYSwwLDEpfTt2YXIgTzc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8yNScsMTIwOCk7YmNiKDEyMDksMSxud2UsRCRkKTtfLndqPWZ1bmN0aW9uIEUkZChhKXtyZXR1cm4gSkQoYSwxOTkpfTtfLnhqPWZ1bmN0aW9uIEYkZChhKXtyZXR1cm4gS0MoJEosbmllLDE5OSxhLDAsMSl9O3ZhciBQNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzI2JywxMjA5KTtiY2IoMTIxMCwxLG53ZSxHJGQpO18ud2o9ZnVuY3Rpb24gSCRkKGEpe3JldHVybiBmYWxzZX07Xy54aj1mdW5jdGlvbiBJJGQoYSl7cmV0dXJuIEtDKE80LFVoZSwyMTEwLGEsMCwxKX07dmFyIFE3PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMjcnLDEyMTApO2JjYigxMjExLDEsbndlLEokZCk7Xy53aj1mdW5jdGlvbiBLJGQoYSl7cmV0dXJuIExEKGEpfTtfLnhqPWZ1bmN0aW9uIEwkZChhKXtyZXR1cm4gS0MoQkksbmllLDMzMyxhLDcsMSl9O3ZhciBSNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzI4JywxMjExKTtiY2IoMTIxMiwxLG53ZSxNJGQpO18ud2o9ZnVuY3Rpb24gTiRkKGEpe3JldHVybiBKRChhLDU4KX07Xy54aj1mdW5jdGlvbiBPJGQoYSl7cmV0dXJuIEtDKFQ0LGVtZSw1OCxhLDAsMSl9O3ZhciBTNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzI5JywxMjEyKTtiY2IoMTE4NiwxLG53ZSxQJGQpO18ud2o9ZnVuY3Rpb24gUSRkKGEpe3JldHVybiBKRChhLDUxMCl9O18ueGo9ZnVuY3Rpb24gUiRkKGEpe3JldHVybiBLQyhhNSx7MzoxLDQ6MSw1OjEsMTkzNDoxfSw1OTAsYSwwLDEpfTt2YXIgYzg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8zJywxMTg2KTtiY2IoMTIxMywxLG53ZSxTJGQpO18ud2o9ZnVuY3Rpb24gVCRkKGEpe3JldHVybiBKRChhLDU3Myl9O18ueGo9ZnVuY3Rpb24gVSRkKGEpe3JldHVybiBLQyhVNCxVaGUsMTk0MCxhLDAsMSl9O3ZhciBVNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzMwJywxMjEzKTtiY2IoMTIxNCwxLG53ZSxWJGQpO18ud2o9ZnVuY3Rpb24gVyRkKGEpe3JldHVybiBKRChhLDE1Myl9O18ueGo9ZnVuY3Rpb24gWCRkKGEpe3JldHVybiBLQyhPOSxlbWUsMTUzLGEsMCwxKX07dmFyIFY3PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMzEnLDEyMTQpO2JjYigxMjE1LDEsbndlLFkkZCk7Xy53aj1mdW5jdGlvbiBaJGQoYSl7cmV0dXJuIEpEKGEsNzIpfTtfLnhqPWZ1bmN0aW9uICQkZChhKXtyZXR1cm4gS0MoRTksb3dlLDcyLGEsMCwxKX07dmFyIFc3PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMzInLDEyMTUpO2JjYigxMjE2LDEsbndlLF8kZCk7Xy53aj1mdW5jdGlvbiBhX2QoYSl7cmV0dXJuIEpEKGEsMTU1KX07Xy54aj1mdW5jdGlvbiBiX2QoYSl7cmV0dXJuIEtDKEZJLG5pZSwxNTUsYSwwLDEpfTt2YXIgWDc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8zMycsMTIxNik7YmNiKDEyMTcsMSxud2UsY19kKTtfLndqPWZ1bmN0aW9uIGRfZChhKXtyZXR1cm4gSkQoYSwxOSl9O18ueGo9ZnVuY3Rpb24gZV9kKGEpe3JldHVybiBLQyhKSSxuaWUsMTksYSwwLDEpfTt2YXIgWTc9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8zNCcsMTIxNyk7YmNiKDEyMTgsMSxud2UsZl9kKTtfLndqPWZ1bmN0aW9uIGdfZChhKXtyZXR1cm4gSkQoYSwyOTApfTtfLnhqPWZ1bmN0aW9uIGhfZChhKXtyZXR1cm4gS0MoQUksVWhlLDI5MCxhLDAsMSl9O3ZhciBaNz1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzM1JywxMjE4KTtiY2IoMTIxOSwxLG53ZSxpX2QpO18ud2o9ZnVuY3Rpb24gal9kKGEpe3JldHVybiBKRChhLDE2Mil9O18ueGo9ZnVuY3Rpb24ga19kKGEpe3JldHVybiBLQyhNSSxuaWUsMTYyLGEsMCwxKX07dmFyICQ3PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMzYnLDEyMTkpO2JjYigxMjIwLDEsbndlLGxfZCk7Xy53aj1mdW5jdGlvbiBtX2QoYSl7cmV0dXJuIEpEKGEsODMpfTtfLnhqPWZ1bmN0aW9uIG5fZChhKXtyZXR1cm4gS0MoREssVWhlLDgzLGEsMCwxKX07dmFyIF83PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvMzcnLDEyMjApO2JjYigxMjIxLDEsbndlLG9fZCk7Xy53aj1mdW5jdGlvbiBwX2QoYSl7cmV0dXJuIEpEKGEsNTkxKX07Xy54aj1mdW5jdGlvbiBxX2QoYSl7cmV0dXJuIEtDKHY4LFVoZSw1OTEsYSwwLDEpfTt2YXIgYTg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC8zOCcsMTIyMSk7YmNiKDEyMjIsMSxud2Uscl9kKTtfLndqPWZ1bmN0aW9uIHNfZChhKXtyZXR1cm4gZmFsc2V9O18ueGo9ZnVuY3Rpb24gdF9kKGEpe3JldHVybiBLQyh1OCxVaGUsMjExMSxhLDAsMSl9O3ZhciBiOD1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzM5JywxMjIyKTtiY2IoMTE4NywxLG53ZSx1X2QpO18ud2o9ZnVuY3Rpb24gdl9kKGEpe3JldHVybiBKRChhLDg4KX07Xy54aj1mdW5jdGlvbiB3X2QoYSl7cmV0dXJuIEtDKGM1LFVoZSwyNixhLDAsMSl9O3ZhciBpOD1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzQnLDExODcpO2JjYigxMjIzLDEsbndlLHhfZCk7Xy53aj1mdW5jdGlvbiB5X2QoYSl7cmV0dXJuIEpEKGEsMTg0KX07Xy54aj1mdW5jdGlvbiB6X2QoYSl7cmV0dXJuIEtDKFVJLG5pZSwxODQsYSwwLDEpfTt2YXIgZDg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC80MCcsMTIyMyk7YmNiKDEyMjQsMSxud2UsQV9kKTtfLndqPWZ1bmN0aW9uIEJfZChhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gQ19kKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBlOD1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzQxJywxMjI0KTtiY2IoMTIyNSwxLG53ZSxEX2QpO18ud2o9ZnVuY3Rpb24gRV9kKGEpe3JldHVybiBKRChhLDU4OCl9O18ueGo9ZnVuY3Rpb24gRl9kKGEpe3JldHVybiBLQyhYNCxVaGUsNTg4LGEsMCwxKX07dmFyIGY4PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvNDInLDEyMjUpO2JjYigxMjI2LDEsbndlLEdfZCk7Xy53aj1mdW5jdGlvbiBIX2QoYSl7cmV0dXJuIGZhbHNlfTtfLnhqPWZ1bmN0aW9uIElfZChhKXtyZXR1cm4gS0MoVjQsbmllLDIxMTIsYSwwLDEpfTt2YXIgZzg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC80MycsMTIyNik7YmNiKDEyMjcsMSxud2UsSl9kKTtfLndqPWZ1bmN0aW9uIEtfZChhKXtyZXR1cm4gSkQoYSw0Mil9O18ueGo9ZnVuY3Rpb24gTF9kKGEpe3JldHVybiBLQyhDSyx6aWUsNDIsYSwwLDEpfTt2YXIgaDg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC80NCcsMTIyNyk7YmNiKDExODgsMSxud2UsTV9kKTtfLndqPWZ1bmN0aW9uIE5fZChhKXtyZXR1cm4gSkQoYSwxMzgpfTtfLnhqPWZ1bmN0aW9uIE9fZChhKXtyZXR1cm4gS0MoZDUsVWhlLDEzOCxhLDAsMSl9O3ZhciBqOD1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzUnLDExODgpO2JjYigxMTg5LDEsbndlLFBfZCk7Xy53aj1mdW5jdGlvbiBRX2QoYSl7cmV0dXJuIEpEKGEsMTQ4KX07Xy54aj1mdW5jdGlvbiBSX2QoYSl7cmV0dXJuIEtDKGY1LFVoZSwxNDgsYSwwLDEpfTt2YXIgazg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC82JywxMTg5KTtiY2IoMTE5MCwxLG53ZSxTX2QpO18ud2o9ZnVuY3Rpb24gVF9kKGEpe3JldHVybiBKRChhLDQ1Nyl9O18ueGo9ZnVuY3Rpb24gVV9kKGEpe3JldHVybiBLQyhoNSxVaGUsNjcxLGEsMCwxKX07dmFyIGw4PW1kYihxdGUsJ0Vjb3JlUGFja2FnZUltcGwvNycsMTE5MCk7YmNiKDExOTEsMSxud2UsVl9kKTtfLndqPWZ1bmN0aW9uIFdfZChhKXtyZXR1cm4gSkQoYSw1NzMpfTtfLnhqPWZ1bmN0aW9uIFhfZChhKXtyZXR1cm4gS0MoZzUsVWhlLDY3OCxhLDAsMSl9O3ZhciBtOD1tZGIocXRlLCdFY29yZVBhY2thZ2VJbXBsLzgnLDExOTEpO2JjYigxMTkyLDEsbndlLFlfZCk7Xy53aj1mdW5jdGlvbiBaX2QoYSl7cmV0dXJuIEpEKGEsNDcxKX07Xy54aj1mdW5jdGlvbiAkX2QoYSl7cmV0dXJuIEtDKGk1LFVoZSw0NzEsYSwwLDEpfTt2YXIgbjg9bWRiKHF0ZSwnRWNvcmVQYWNrYWdlSW1wbC85JywxMTkyKTtiY2IoMTAyNSwxOTgyLGl2ZSxjMGQpO18uYmk9ZnVuY3Rpb24gZDBkKGEsYil7X19kKHRoaXMsQkQoYiw0MTUpKX07Xy5maT1mdW5jdGlvbiBlMGQoYSxiKXthMGQodGhpcyxhLEJEKGIsNDE1KSl9O3ZhciBxOD1tZGIocXRlLCdNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0JywxMDI1KTtiY2IoMTAyNiwxNDMsZnZlLGYwZCk7Xy5BaT1mdW5jdGlvbiBnMGQoKXtyZXR1cm4gdGhpcy5hLmF9O3ZhciBwOD1tZGIocXRlLCdNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEnLDEwMjYpO2JjYigxMDUzLDEwNTIse30saTBkKTt2YXIgdDg9bWRiKCdvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luJywnRWNvcmVQbHVnaW4nLDEwNTMpO3ZhciB2OD1vZGIocHdlLCdSZXNvdXJjZScpO2JjYig3ODEsMTM3OCxxd2UpO18uWWs9ZnVuY3Rpb24gbTBkKGEpe307Xy5aaz1mdW5jdGlvbiBuMGQoYSl7fTtfLlZrPWZ1bmN0aW9uIG8wZCgpe3JldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyB6MGQodGhpcykpLHRoaXMuYX07Xy5Xaz1mdW5jdGlvbiBwMGQoYSl7dmFyIGIsYyxkLGUsZjtkPWEubGVuZ3RoO2lmKGQ+MCl7QkNiKDAsYS5sZW5ndGgpO2lmKGEuY2hhckNvZGVBdCgwKT09NDcpe2Y9bmV3IFNrYig0KTtlPTE7Zm9yKGI9MTtiPGQ7KytiKXtCQ2IoYixhLmxlbmd0aCk7aWYoYS5jaGFyQ29kZUF0KGIpPT00Nyl7RWtiKGYsZT09Yj8nJzphLnN1YnN0cihlLGItZSkpO2U9YisxfX1Fa2IoZixhLnN1YnN0cihlKSk7cmV0dXJuIGowZCh0aGlzLGYpfWVsc2V7QkNiKGQtMSxhLmxlbmd0aCk7aWYoYS5jaGFyQ29kZUF0KGQtMSk9PTYzKXtjPWxmYihhLHdmYig2MyksZC0yKTtjPjAmJihhPWEuc3Vic3RyKDAsYykpfX19cmV0dXJuIGswZCh0aGlzLGEpfTtfLlhrPWZ1bmN0aW9uIHEwZCgpe3JldHVybiB0aGlzLmN9O18uSWI9ZnVuY3Rpb24gcjBkKCl7dmFyIGE7cmV0dXJuIGhkYih0aGlzLmdtKSsnQCcrKGE9dGIodGhpcyk+Pj4wLGEudG9TdHJpbmcoMTYpKStcIiB1cmk9J1wiK3RoaXMuZCtcIidcIn07Xy5iPWZhbHNlO3ZhciB6OD1tZGIocndlLCdSZXNvdXJjZUltcGwnLDc4MSk7YmNiKDEzNzksNzgxLHF3ZSxzMGQpO3ZhciB3OD1tZGIocndlLCdCaW5hcnlSZXNvdXJjZUltcGwnLDEzNzkpO2JjYigxMTY5LDY5NCxwdWUpO18uc2k9ZnVuY3Rpb24gdjBkKGEpe3JldHVybiBKRChhLDU2KT90MGQodGhpcyxCRChhLDU2KSk6SkQoYSw1OTEpP25ldyBGeWQoQkQoYSw1OTEpLlZrKCkpOlBEKGEpPT09UEQodGhpcy5mKT9CRChhLDE0KS5LYygpOihMQ2QoKSxLQ2QuYSl9O18uT2I9ZnVuY3Rpb24gdzBkKCl7cmV0dXJuIHUwZCh0aGlzKX07Xy5hPWZhbHNlO3ZhciB6OT1tZGIoeXZlLCdFY29yZVV0aWwvQ29udGVudFRyZWVJdGVyYXRvcicsMTE2OSk7YmNiKDEzODAsMTE2OSxwdWUseDBkKTtfLnNpPWZ1bmN0aW9uIHkwZChhKXtyZXR1cm4gUEQoYSk9PT1QRCh0aGlzLmYpP0JEKGEsMTUpLktjKCk6bmV3IEM2ZChCRChhLDU2KSl9O3ZhciB4OD1tZGIocndlLCdSZXNvdXJjZUltcGwvNScsMTM4MCk7YmNiKDY0OCwxOTk0LE92ZSx6MGQpO18uSGM9ZnVuY3Rpb24gQTBkKGEpe3JldHVybiB0aGlzLmk8PTQ/cHVkKHRoaXMsYSk6SkQoYSw0OSkmJkJEKGEsNDkpLlpnKCk9PXRoaXMuYX07Xy5iaT1mdW5jdGlvbiBCMGQoYSxiKXthPT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9dHJ1ZSxudWxsKSl9O18uZGk9ZnVuY3Rpb24gQzBkKGEsYil7YT09MD90aGlzLmEuYnx8KHRoaXMuYS5iPXRydWUsbnVsbCk6QXRkKHRoaXMsYSxiKX07Xy5maT1mdW5jdGlvbiBEMGQoYSxiKXt9O18uZ2k9ZnVuY3Rpb24gRTBkKGEsYixjKXt9O18uYWo9ZnVuY3Rpb24gRjBkKCl7cmV0dXJuIDJ9O18uQWk9ZnVuY3Rpb24gRzBkKCl7cmV0dXJuIHRoaXMuYX07Xy5iaj1mdW5jdGlvbiBIMGQoKXtyZXR1cm4gdHJ1ZX07Xy5jaj1mdW5jdGlvbiBJMGQoYSxiKXt2YXIgYztjPUJEKGEsNDkpO2I9Yy53aCh0aGlzLmEsYik7cmV0dXJuIGJ9O18uZGo9ZnVuY3Rpb24gSjBkKGEsYil7dmFyIGM7Yz1CRChhLDQ5KTtyZXR1cm4gYy53aChudWxsLGIpfTtfLmVqPWZ1bmN0aW9uIEswZCgpe3JldHVybiBmYWxzZX07Xy5oaT1mdW5jdGlvbiBMMGQoKXtyZXR1cm4gdHJ1ZX07Xy5yaT1mdW5jdGlvbiBNMGQoYSl7cmV0dXJuIEtDKG01LFVoZSw1NixhLDAsMSl9O18ubmk9ZnVuY3Rpb24gTjBkKCl7cmV0dXJuIGZhbHNlfTt2YXIgeTg9bWRiKHJ3ZSwnUmVzb3VyY2VJbXBsL0NvbnRlbnRzRUxpc3QnLDY0OCk7YmNiKDk1NywxOTY0LExpZSxPMGQpO18uWmM9ZnVuY3Rpb24gUDBkKGEpe3JldHVybiB0aGlzLmEuX2goYSl9O18uZ2M9ZnVuY3Rpb24gUTBkKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgQTg9bWRiKHl2ZSwnQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdC8xJyw5NTcpO3ZhciBLNmQsTDZkLE02ZCxONmQ7YmNiKDYyNCwxLHt9LHkxZCk7dmFyIFIwZCxTMGQ7dmFyIEc4PW1kYih5dmUsJ0Jhc2ljRXh0ZW5kZWRNZXRhRGF0YScsNjI0KTtiY2IoMTE2MCwxLHt9LEMxZCk7Xy4kaz1mdW5jdGlvbiBEMWQoKXtyZXR1cm4gbnVsbH07Xy5faz1mdW5jdGlvbiBFMWQoKXt0aGlzLmE9PS0yJiZBMWQodGhpcyxXMGQodGhpcy5kLHRoaXMuYikpO3JldHVybiB0aGlzLmF9O18uYWw9ZnVuY3Rpb24gRjFkKCl7cmV0dXJuIG51bGx9O18uYmw9ZnVuY3Rpb24gRzFkKCl7cmV0dXJuIG1tYigpLG1tYigpLGptYn07Xy5uZT1mdW5jdGlvbiBIMWQoKXt0aGlzLmM9PUd3ZSYmQjFkKHRoaXMsXzBkKHRoaXMuZCx0aGlzLmIpKTtyZXR1cm4gdGhpcy5jfTtfLmNsPWZ1bmN0aW9uIEkxZCgpe3JldHVybiAwfTtfLmE9LTI7Xy5jPUd3ZTt2YXIgQzg9bWRiKHl2ZSwnQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VDbGFzc0V4dGVuZGVkTWV0YURhdGFJbXBsJywxMTYwKTtiY2IoMTE2MSwxLHt9LE8xZCk7Xy4kaz1mdW5jdGlvbiBQMWQoKXt0aGlzLmE9PShUMGQoKSxSMGQpJiZKMWQodGhpcyxWMGQodGhpcy5mLHRoaXMuYikpO3JldHVybiB0aGlzLmF9O18uX2s9ZnVuY3Rpb24gUTFkKCl7cmV0dXJuIDB9O18uYWw9ZnVuY3Rpb24gUjFkKCl7dGhpcy5jPT0oVDBkKCksUjBkKSYmSzFkKHRoaXMsWjBkKHRoaXMuZix0aGlzLmIpKTtyZXR1cm4gdGhpcy5jfTtfLmJsPWZ1bmN0aW9uIFMxZCgpeyF0aGlzLmQmJkwxZCh0aGlzLCQwZCh0aGlzLmYsdGhpcy5iKSk7cmV0dXJuIHRoaXMuZH07Xy5uZT1mdW5jdGlvbiBUMWQoKXt0aGlzLmU9PUd3ZSYmTTFkKHRoaXMsXzBkKHRoaXMuZix0aGlzLmIpKTtyZXR1cm4gdGhpcy5lfTtfLmNsPWZ1bmN0aW9uIFUxZCgpe3RoaXMuZz09LTImJk4xZCh0aGlzLGMxZCh0aGlzLmYsdGhpcy5iKSk7cmV0dXJuIHRoaXMuZ307Xy5lPUd3ZTtfLmc9LTI7dmFyIEQ4PW1kYih5dmUsJ0Jhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FRGF0YVR5cGVFeHRlbmRlZE1ldGFEYXRhSW1wbCcsMTE2MSk7YmNiKDExNTksMSx7fSxZMWQpO18uYj1mYWxzZTtfLmM9ZmFsc2U7dmFyIEU4PW1kYih5dmUsJ0Jhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FUGFja2FnZUV4dGVuZGVkTWV0YURhdGFJbXBsJywxMTU5KTtiY2IoMTE2MiwxLHt9LGoyZCk7Xy5jPS0yO18uZT1Hd2U7Xy5mPUd3ZTt2YXIgRjg9bWRiKHl2ZSwnQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VTdHJ1Y3R1cmFsRmVhdHVyZUV4dGVuZGVkTWV0YURhdGFJbXBsJywxMTYyKTtiY2IoNTg1LDYyMixQdmUsazJkKTtfLmFqPWZ1bmN0aW9uIGwyZCgpe3JldHVybiB0aGlzLmN9O18uRms9ZnVuY3Rpb24gbTJkKCl7cmV0dXJuIGZhbHNlfTtfLmxpPWZ1bmN0aW9uIG4yZChhLGIpe3JldHVybiBifTtfLmM9MDt2YXIgVDg9bWRiKHl2ZSwnRURhdGFUeXBlRUxpc3QnLDU4NSk7dmFyIE85PW9kYih5dmUsJ0ZlYXR1cmVNYXAnKTtiY2IoNzUsNTg1LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsMTUzOjEsMjE1OjEsMTkzNzoxLDY5OjEsOTU6MX0sdTNkKTtfLlZjPWZ1bmN0aW9uIHYzZChhLGIpe28yZCh0aGlzLGEsQkQoYiw3MikpfTtfLkZjPWZ1bmN0aW9uIHczZChhKXtyZXR1cm4gcjJkKHRoaXMsQkQoYSw3MikpfTtfLlloPWZ1bmN0aW9uIEIzZChhKXt3MmQodGhpcyxCRChhLDcyKSl9O18uY2o9ZnVuY3Rpb24gTTNkKGEsYil7cmV0dXJuIE8yZCh0aGlzLEJEKGEsNzIpLGIpfTtfLmRqPWZ1bmN0aW9uIE4zZChhLGIpe3JldHVybiBRMmQodGhpcyxCRChhLDcyKSxiKX07Xy5paT1mdW5jdGlvbiBQM2QoYSxiKXtyZXR1cm4gVzJkKHRoaXMsYSxiKX07Xy5saT1mdW5jdGlvbiBSM2QoYSxiKXtyZXR1cm4gXzJkKHRoaXMsYSxCRChiLDcyKSl9O18uX2M9ZnVuY3Rpb24gVDNkKGEsYil7cmV0dXJuIGMzZCh0aGlzLGEsQkQoYiw3MikpfTtfLmpqPWZ1bmN0aW9uIFgzZChhLGIpe3JldHVybiBpM2QodGhpcyxCRChhLDcyKSxiKX07Xy5raj1mdW5jdGlvbiBZM2QoYSxiKXtyZXR1cm4gazNkKHRoaXMsQkQoYSw3MiksYil9O18ubGo9ZnVuY3Rpb24gWjNkKGEsYixjKXtyZXR1cm4gbDNkKHRoaXMsQkQoYSw3MiksQkQoYiw3MiksYyl9O18ub2k9ZnVuY3Rpb24gXzNkKGEsYil7cmV0dXJuIHQzZCh0aGlzLGEsQkQoYiw3MikpfTtfLmRsPWZ1bmN0aW9uIHgzZChhLGIpe3JldHVybiBxMmQodGhpcyxhLGIpfTtfLldjPWZ1bmN0aW9uIHkzZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztqPW5ldyB6dWQoYi5nYygpKTtmb3IoZT1iLktjKCk7ZS5PYigpOyl7ZD1CRChlLlBiKCksNzIpO2Y9ZC5haygpO2lmKFQ2ZCh0aGlzLmUsZikpeyghZi5oaSgpfHwhRTJkKHRoaXMsZixkLmRkKCkpJiYhcHVkKGosZCkpJiZ3dGQoaixkKX1lbHNle2s9UzZkKHRoaXMuZS5UZygpLGYpO2M9QkQodGhpcy5nLDExOSk7Zz10cnVlO2ZvcihoPTA7aDx0aGlzLmk7KytoKXtpPWNbaF07aWYoay5ybChpLmFrKCkpKXtCRChHdGQodGhpcyxoLGQpLDcyKTtnPWZhbHNlO2JyZWFrfX1nJiZ3dGQoaixkKX19cmV0dXJuIHh0ZCh0aGlzLGEsail9O18uR2M9ZnVuY3Rpb24gejNkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtpPW5ldyB6dWQoYS5nYygpKTtmb3IoZD1hLktjKCk7ZC5PYigpOyl7Yz1CRChkLlBiKCksNzIpO2U9Yy5haygpO2lmKFQ2ZCh0aGlzLmUsZSkpeyghZS5oaSgpfHwhRTJkKHRoaXMsZSxjLmRkKCkpJiYhcHVkKGksYykpJiZ3dGQoaSxjKX1lbHNle2o9UzZkKHRoaXMuZS5UZygpLGUpO2I9QkQodGhpcy5nLDExOSk7Zj10cnVlO2ZvcihnPTA7Zzx0aGlzLmk7KytnKXtoPWJbZ107aWYoai5ybChoLmFrKCkpKXtCRChHdGQodGhpcyxnLGMpLDcyKTtmPWZhbHNlO2JyZWFrfX1mJiZ3dGQoaSxjKX19cmV0dXJuIHl0ZCh0aGlzLGkpfTtfLldoPWZ1bmN0aW9uIEEzZChhKXt0aGlzLmo9LTE7cmV0dXJuIFB4ZCh0aGlzLHRoaXMuaSxhKX07Xy5lbD1mdW5jdGlvbiBDM2QoYSxiLGMpe3JldHVybiB4MmQodGhpcyxhLGIsYyl9O18ubWs9ZnVuY3Rpb24gRDNkKGEsYil7cmV0dXJuIEIyZCh0aGlzLGEsYil9O18uZmw9ZnVuY3Rpb24gRTNkKGEsYixjKXtyZXR1cm4gQzJkKHRoaXMsYSxiLGMpfTtfLmdsPWZ1bmN0aW9uIEYzZCgpe3JldHVybiB0aGlzfTtfLmhsPWZ1bmN0aW9uIEczZChhLGIpe3JldHVybiBLMmQodGhpcyxhLGIpfTtfLmlsPWZ1bmN0aW9uIEgzZChhKXtyZXR1cm4gQkQocXVkKHRoaXMsYSksNzIpLmFrKCl9O18uamw9ZnVuY3Rpb24gSTNkKGEpe3JldHVybiBCRChxdWQodGhpcyxhKSw3MikuZGQoKX07Xy5rbD1mdW5jdGlvbiBKM2QoKXtyZXR1cm4gdGhpcy5ifTtfLmJqPWZ1bmN0aW9uIEszZCgpe3JldHVybiB0cnVlfTtfLmlqPWZ1bmN0aW9uIEwzZCgpe3JldHVybiB0cnVlfTtfLmxsPWZ1bmN0aW9uIE8zZChhKXtyZXR1cm4gIVIyZCh0aGlzLGEpfTtfLnJpPWZ1bmN0aW9uIFEzZChhKXtyZXR1cm4gS0MoRDksb3dlLDMzMixhLDAsMSl9O18uR2s9ZnVuY3Rpb24gUzNkKGEpe3JldHVybiBhM2QodGhpcyxhKX07Xy5XYj1mdW5jdGlvbiBVM2QoYSl7ZDNkKHRoaXMsYSl9O18ubWw9ZnVuY3Rpb24gVjNkKGEsYil7ZjNkKHRoaXMsYSxiKX07Xy5ubD1mdW5jdGlvbiBXM2QoYSl7cmV0dXJuIGczZCh0aGlzLGEpfTtfLm9sPWZ1bmN0aW9uICQzZChhKXtzM2QodGhpcyxhKX07dmFyIEo4PW1kYih5dmUsJ0Jhc2ljRmVhdHVyZU1hcCcsNzUpO2JjYigxODUxLDEsamllKTtfLk5iPWZ1bmN0aW9uIGY0ZChhKXtScmIodGhpcyxhKX07Xy5SYj1mdW5jdGlvbiBlNGQoYil7aWYodGhpcy5nPT0tMSl7dGhyb3cgdmJiKG5ldyBZZGIpfWE0ZCh0aGlzKTt0cnl7cDJkKHRoaXMuZSx0aGlzLmIsdGhpcy5hLGIpO3RoaXMuZD10aGlzLmUuajtkNGQodGhpcyl9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3Mykpe3Rocm93IHZiYihuZXcgQXBiKX1lbHNlIHRocm93IHZiYihhKX19O18uT2I9ZnVuY3Rpb24gZzRkKCl7cmV0dXJuIGI0ZCh0aGlzKX07Xy5TYj1mdW5jdGlvbiBoNGQoKXtyZXR1cm4gYzRkKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIGk0ZCgpe3JldHVybiBkNGQodGhpcyl9O18uVGI9ZnVuY3Rpb24gajRkKCl7cmV0dXJuIHRoaXMuYX07Xy5VYj1mdW5jdGlvbiBrNGQoKXt2YXIgYTtpZihjNGQodGhpcykpe2E0ZCh0aGlzKTt0aGlzLmc9LS10aGlzLmE7aWYodGhpcy5MaygpKXthPWIzZCh0aGlzLmUsdGhpcy5iLHRoaXMuYyx0aGlzLmEsdGhpcy5qKTt0aGlzLmo9YX10aGlzLmk9MDtyZXR1cm4gdGhpcy5qfWVsc2V7dGhyb3cgdmJiKG5ldyB1dGIpfX07Xy5WYj1mdW5jdGlvbiBsNGQoKXtyZXR1cm4gdGhpcy5hLTF9O18uUWI9ZnVuY3Rpb24gbTRkKCl7aWYodGhpcy5nPT0tMSl7dGhyb3cgdmJiKG5ldyBZZGIpfWE0ZCh0aGlzKTt0cnl7WjJkKHRoaXMuZSx0aGlzLmIsdGhpcy5nKTt0aGlzLmQ9dGhpcy5lLmo7aWYodGhpcy5nPHRoaXMuYSl7LS10aGlzLmE7LS10aGlzLmN9LS10aGlzLmd9Y2F0Y2goYSl7YT11YmIoYSk7aWYoSkQoYSw3Mykpe3Rocm93IHZiYihuZXcgQXBiKX1lbHNlIHRocm93IHZiYihhKX19O18uTGs9ZnVuY3Rpb24gbjRkKCl7cmV0dXJuIGZhbHNlfTtfLldiPWZ1bmN0aW9uIG80ZChiKXtpZih0aGlzLmc9PS0xKXt0aHJvdyB2YmIobmV3IFlkYil9YTRkKHRoaXMpO3RyeXtlM2QodGhpcy5lLHRoaXMuYix0aGlzLmcsYik7dGhpcy5kPXRoaXMuZS5qfWNhdGNoKGEpe2E9dWJiKGEpO2lmKEpEKGEsNzMpKXt0aHJvdyB2YmIobmV3IEFwYil9ZWxzZSB0aHJvdyB2YmIoYSl9fTtfLmE9MDtfLmM9MDtfLmQ9MDtfLmY9ZmFsc2U7Xy5nPTA7Xy5pPTA7dmFyIEc5PW1kYih5dmUsJ0ZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvcicsMTg1MSk7YmNiKDQxMCwxODUxLGppZSxwNGQpO18ucGw9ZnVuY3Rpb24gcTRkKCl7dmFyIGEsYixjO2M9dGhpcy5lLmk7YT1CRCh0aGlzLmUuZywxMTkpO3doaWxlKHRoaXMuYzxjKXtiPWFbdGhpcy5jXTtpZih0aGlzLmsucmwoYi5haygpKSl7dGhpcy5qPXRoaXMuZj9iOmIuZGQoKTt0aGlzLmk9MjtyZXR1cm4gdHJ1ZX0rK3RoaXMuY310aGlzLmk9MTt0aGlzLmc9LTE7cmV0dXJuIGZhbHNlfTtfLnFsPWZ1bmN0aW9uIHI0ZCgpe3ZhciBhLGI7YT1CRCh0aGlzLmUuZywxMTkpO3doaWxlKC0tdGhpcy5jPj0wKXtiPWFbdGhpcy5jXTtpZih0aGlzLmsucmwoYi5haygpKSl7dGhpcy5qPXRoaXMuZj9iOmIuZGQoKTt0aGlzLmk9LTI7cmV0dXJuIHRydWV9fXRoaXMuaT0tMTt0aGlzLmc9LTE7cmV0dXJuIGZhbHNlfTt2YXIgSDg9bWRiKHl2ZSwnQmFzaWNGZWF0dXJlTWFwL0ZlYXR1cmVFSXRlcmF0b3InLDQxMCk7YmNiKDY2Miw0MTAsamllLHM0ZCk7Xy5Maz1mdW5jdGlvbiB0NGQoKXtyZXR1cm4gdHJ1ZX07dmFyIEk4PW1kYih5dmUsJ0Jhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yJyw2NjIpO2JjYig5NTUsNDg2LFZ2ZSx1NGQpO18uR2k9ZnVuY3Rpb24gdjRkKCl7cmV0dXJuIHRoaXN9O3ZhciBNOD1tZGIoeXZlLCdFQ29udGVudHNFTGlzdC8xJyw5NTUpO2JjYig5NTYsNDg2LFZ2ZSx3NGQpO18uTGs9ZnVuY3Rpb24geDRkKCl7cmV0dXJuIGZhbHNlfTt2YXIgTjg9bWRiKHl2ZSwnRUNvbnRlbnRzRUxpc3QvMicsOTU2KTtiY2IoOTU0LDI3OSxXdmUseTRkKTtfLk5rPWZ1bmN0aW9uIHo0ZChhKXt9O18uT2I9ZnVuY3Rpb24gQTRkKCl7cmV0dXJuIGZhbHNlfTtfLlNiPWZ1bmN0aW9uIEI0ZCgpe3JldHVybiBmYWxzZX07dmFyIE84PW1kYih5dmUsJ0VDb250ZW50c0VMaXN0L0ZlYXR1cmVJdGVyYXRvckltcGwvMScsOTU0KTtiY2IoODI1LDU4NSxQdmUsQzRkKTtfLmNpPWZ1bmN0aW9uIEQ0ZCgpe3RoaXMuYT10cnVlfTtfLmZqPWZ1bmN0aW9uIEU0ZCgpe3JldHVybiB0aGlzLmF9O18uWGo9ZnVuY3Rpb24gRjRkKCl7dmFyIGE7VXhkKHRoaXMpO2lmKG9pZCh0aGlzLmUpKXthPXRoaXMuYTt0aGlzLmE9ZmFsc2U7VWhkKHRoaXMuZSxuZXcgcVNkKHRoaXMuZSwyLHRoaXMuYyxhLGZhbHNlKSl9ZWxzZXt0aGlzLmE9ZmFsc2V9fTtfLmE9ZmFsc2U7dmFyIFM4PW1kYih5dmUsJ0VEYXRhVHlwZUVMaXN0L1Vuc2V0dGFibGUnLDgyNSk7YmNiKDE4NDksNTg1LFB2ZSxHNGQpO18uaGk9ZnVuY3Rpb24gSDRkKCl7cmV0dXJuIHRydWV9O3ZhciBWOD1tZGIoeXZlLCdFRGF0YVR5cGVVbmlxdWVFTGlzdCcsMTg0OSk7YmNiKDE4NTAsODI1LFB2ZSxJNGQpO18uaGk9ZnVuY3Rpb24gSjRkKCl7cmV0dXJuIHRydWV9O3ZhciBVOD1tZGIoeXZlLCdFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlJywxODUwKTtiY2IoMTM5LDg1LFB2ZSxLNGQpO18uRWs9ZnVuY3Rpb24gTDRkKCl7cmV0dXJuIHRydWV9O18ubGk9ZnVuY3Rpb24gTTRkKGEsYil7cmV0dXJuIElMZCh0aGlzLGEsQkQoYiw1NikpfTt2YXIgVzg9bWRiKHl2ZSwnRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nJywxMzkpO2JjYigxMTYzLDU0NSxQdmUsTjRkKTtfLkVrPWZ1bmN0aW9uIE80ZCgpe3JldHVybiB0cnVlfTtfLmxpPWZ1bmN0aW9uIFA0ZChhLGIpe3JldHVybiBJTGQodGhpcyxhLEJEKGIsNTYpKX07dmFyIFg4PW1kYih5dmUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUvUmVzb2x2aW5nJywxMTYzKTtiY2IoNzQ4LDE2LFB2ZSxRNGQpO18uY2k9ZnVuY3Rpb24gUjRkKCl7dGhpcy5hPXRydWV9O18uZmo9ZnVuY3Rpb24gUzRkKCl7cmV0dXJuIHRoaXMuYX07Xy5Yaj1mdW5jdGlvbiBUNGQoKXt2YXIgYTtVeGQodGhpcyk7aWYob2lkKHRoaXMuZSkpe2E9dGhpcy5hO3RoaXMuYT1mYWxzZTtVaGQodGhpcy5lLG5ldyBxU2QodGhpcy5lLDIsdGhpcy5jLGEsZmFsc2UpKX1lbHNle3RoaXMuYT1mYWxzZX19O18uYT1mYWxzZTt2YXIgYTk9bWRiKHl2ZSwnRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlJyw3NDgpO2JjYigxMTczLDc0OCxQdmUsVTRkKTtfLkVrPWZ1bmN0aW9uIFY0ZCgpe3JldHVybiB0cnVlfTtfLmxpPWZ1bmN0aW9uIFc0ZChhLGIpe3JldHVybiBJTGQodGhpcyxhLEJEKGIsNTYpKX07dmFyIF84PW1kYih5dmUsJ0VPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9SZXNvbHZpbmcnLDExNzMpO2JjYig3NDMsNDk2LFB2ZSxYNGQpO18uY2k9ZnVuY3Rpb24gWTRkKCl7dGhpcy5hPXRydWV9O18uZmo9ZnVuY3Rpb24gWjRkKCl7cmV0dXJuIHRoaXMuYX07Xy5Yaj1mdW5jdGlvbiAkNGQoKXt2YXIgYTtVeGQodGhpcyk7aWYob2lkKHRoaXMuZSkpe2E9dGhpcy5hO3RoaXMuYT1mYWxzZTtVaGQodGhpcy5lLG5ldyBxU2QodGhpcy5lLDIsdGhpcy5jLGEsZmFsc2UpKX1lbHNle3RoaXMuYT1mYWxzZX19O18uYT1mYWxzZTt2YXIgYzk9bWRiKHl2ZSwnRU9iamVjdEVMaXN0L1Vuc2V0dGFibGUnLDc0Myk7YmNiKDMyOCw0OTYsUHZlLF80ZCk7Xy5Faz1mdW5jdGlvbiBhNWQoKXtyZXR1cm4gdHJ1ZX07Xy5saT1mdW5jdGlvbiBiNWQoYSxiKXtyZXR1cm4gSUxkKHRoaXMsYSxCRChiLDU2KSl9O3ZhciBmOT1tZGIoeXZlLCdFT2JqZWN0UmVzb2x2aW5nRUxpc3QnLDMyOCk7YmNiKDE2NDEsNzQzLFB2ZSxjNWQpO18uRWs9ZnVuY3Rpb24gZDVkKCl7cmV0dXJuIHRydWV9O18ubGk9ZnVuY3Rpb24gZTVkKGEsYil7cmV0dXJuIElMZCh0aGlzLGEsQkQoYiw1NikpfTt2YXIgZTk9bWRiKHl2ZSwnRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUnLDE2NDEpO2JjYigxMzgxLDEse30saDVkKTt2YXIgZjVkO3ZhciBnOT1tZGIoeXZlLCdFT2JqZWN0VmFsaWRhdG9yJywxMzgxKTtiY2IoNTQ2LDQ5NixQdmUsaTVkKTtfLnprPWZ1bmN0aW9uIGo1ZCgpe3JldHVybiB0aGlzLmR9O18uQWs9ZnVuY3Rpb24gazVkKCl7cmV0dXJuIHRoaXMuYn07Xy5iaj1mdW5jdGlvbiBsNWQoKXtyZXR1cm4gdHJ1ZX07Xy5Eaz1mdW5jdGlvbiBtNWQoKXtyZXR1cm4gdHJ1ZX07Xy5iPTA7dmFyIGs5PW1kYih5dmUsJ0VPYmplY3RXaXRoSW52ZXJzZUVMaXN0Jyw1NDYpO2JjYigxMTc2LDU0NixQdmUsbjVkKTtfLkNrPWZ1bmN0aW9uIG81ZCgpe3JldHVybiB0cnVlfTt2YXIgaDk9bWRiKHl2ZSwnRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvTWFueUludmVyc2UnLDExNzYpO2JjYig2MjUsNTQ2LFB2ZSxwNWQpO18uY2k9ZnVuY3Rpb24gcTVkKCl7dGhpcy5hPXRydWV9O18uZmo9ZnVuY3Rpb24gcjVkKCl7cmV0dXJuIHRoaXMuYX07Xy5Yaj1mdW5jdGlvbiBzNWQoKXt2YXIgYTtVeGQodGhpcyk7aWYob2lkKHRoaXMuZSkpe2E9dGhpcy5hO3RoaXMuYT1mYWxzZTtVaGQodGhpcy5lLG5ldyBxU2QodGhpcy5lLDIsdGhpcy5jLGEsZmFsc2UpKX1lbHNle3RoaXMuYT1mYWxzZX19O18uYT1mYWxzZTt2YXIgajk9bWRiKHl2ZSwnRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZScsNjI1KTtiY2IoMTE3NSw2MjUsUHZlLHQ1ZCk7Xy5Daz1mdW5jdGlvbiB1NWQoKXtyZXR1cm4gdHJ1ZX07dmFyIGk5PW1kYih5dmUsJ0VPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UnLDExNzUpO2JjYig3NDksNTQ2LFB2ZSx2NWQpO18uRWs9ZnVuY3Rpb24gdzVkKCl7cmV0dXJuIHRydWV9O18ubGk9ZnVuY3Rpb24geDVkKGEsYil7cmV0dXJuIElMZCh0aGlzLGEsQkQoYiw1NikpfTt2YXIgbzk9bWRiKHl2ZSwnRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QnLDc0OSk7YmNiKDMxLDc0OSxQdmUseTVkKTtfLkNrPWZ1bmN0aW9uIHo1ZCgpe3JldHVybiB0cnVlfTt2YXIgbDk9bWRiKHl2ZSwnRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UnLDMxKTtiY2IoNzUwLDYyNSxQdmUsQTVkKTtfLkVrPWZ1bmN0aW9uIEI1ZCgpe3JldHVybiB0cnVlfTtfLmxpPWZ1bmN0aW9uIEM1ZChhLGIpe3JldHVybiBJTGQodGhpcyxhLEJEKGIsNTYpKX07dmFyIG45PW1kYih5dmUsJ0VPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUnLDc1MCk7YmNiKDExNzQsNzUwLFB2ZSxENWQpO18uQ2s9ZnVuY3Rpb24gRTVkKCl7cmV0dXJuIHRydWV9O3ZhciBtOT1tZGIoeXZlLCdFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlL01hbnlJbnZlcnNlJywxMTc0KTtiY2IoMTE2NCw2MjIsUHZlKTtfLmFpPWZ1bmN0aW9uIEY1ZCgpe3JldHVybiAodGhpcy5iJjE3OTIpPT0wfTtfLmNpPWZ1bmN0aW9uIEc1ZCgpe3RoaXMuYnw9MX07Xy5Caz1mdW5jdGlvbiBINWQoKXtyZXR1cm4gKHRoaXMuYiY0KSE9MH07Xy5iaj1mdW5jdGlvbiBJNWQoKXtyZXR1cm4gKHRoaXMuYiY0MCkhPTB9O18uQ2s9ZnVuY3Rpb24gSjVkKCl7cmV0dXJuICh0aGlzLmImMTYpIT0wfTtfLkRrPWZ1bmN0aW9uIEs1ZCgpe3JldHVybiAodGhpcy5iJjgpIT0wfTtfLkVrPWZ1bmN0aW9uIEw1ZCgpe3JldHVybiAodGhpcy5iJkR2ZSkhPTB9O18ucms9ZnVuY3Rpb24gTTVkKCl7cmV0dXJuICh0aGlzLmImMzIpIT0wfTtfLkZrPWZ1bmN0aW9uIE41ZCgpe3JldHVybiAodGhpcy5iJnp0ZSkhPTB9O18ud2o9ZnVuY3Rpb24gTzVkKGEpe3JldHVybiAhdGhpcy5kP3RoaXMuYWsoKS5ZaigpLndqKGEpOnFFZCh0aGlzLmQsYSl9O18uZmo9ZnVuY3Rpb24gUDVkKCl7cmV0dXJuICh0aGlzLmImMikhPTA/KHRoaXMuYiYxKSE9MDp0aGlzLmkhPTB9O18uaGk9ZnVuY3Rpb24gUTVkKCl7cmV0dXJuICh0aGlzLmImMTI4KSE9MH07Xy5Yaj1mdW5jdGlvbiBTNWQoKXt2YXIgYTtVeGQodGhpcyk7aWYoKHRoaXMuYiYyKSE9MCl7aWYob2lkKHRoaXMuZSkpe2E9KHRoaXMuYiYxKSE9MDt0aGlzLmImPS0yO0dMZCh0aGlzLG5ldyBxU2QodGhpcy5lLDIsYkxkKHRoaXMuZS5UZygpLHRoaXMuYWsoKSksYSxmYWxzZSkpfWVsc2V7dGhpcy5iJj0tMn19fTtfLm5pPWZ1bmN0aW9uIFQ1ZCgpe3JldHVybiAodGhpcy5iJjE1MzYpPT0wfTtfLmI9MDt2YXIgcTk9bWRiKHl2ZSwnRWNvcmVFTGlzdC9HZW5lcmljJywxMTY0KTtiY2IoMTE2NSwxMTY0LFB2ZSxVNWQpO18uYWs9ZnVuY3Rpb24gVjVkKCl7cmV0dXJuIHRoaXMuYX07dmFyIHA5PW1kYih5dmUsJ0Vjb3JlRUxpc3QvRHluYW1pYycsMTE2NSk7YmNiKDc0Nyw2MyxvdWUsVzVkKTtfLnJpPWZ1bmN0aW9uIFg1ZChhKXtyZXR1cm4gaXpkKHRoaXMuYS5hLGEpfTt2YXIgdTk9bWRiKHl2ZSwnRWNvcmVFTWFwLzEnLDc0Nyk7YmNiKDc0Niw4NSxQdmUsWTVkKTtfLmJpPWZ1bmN0aW9uIFo1ZChhLGIpe3VBZCh0aGlzLmIsQkQoYiwxMzMpKX07Xy5kaT1mdW5jdGlvbiAkNWQoYSxiKXt0QWQodGhpcy5iKX07Xy5laT1mdW5jdGlvbiBfNWQoYSxiLGMpe3ZhciBkOysrKGQ9dGhpcy5iLEJEKGIsMTMzKSxkKS5lfTtfLmZpPWZ1bmN0aW9uIGE2ZChhLGIpe3ZBZCh0aGlzLmIsQkQoYiwxMzMpKX07Xy5naT1mdW5jdGlvbiBiNmQoYSxiLGMpe3ZBZCh0aGlzLmIsQkQoYywxMzMpKTtQRChjKT09PVBEKGIpJiZCRChjLDEzMykuVGgoQ0FkKEJEKGIsMTMzKS5jZCgpKSk7dUFkKHRoaXMuYixCRChiLDEzMykpfTt2YXIgdjk9bWRiKHl2ZSwnRWNvcmVFTWFwL0RlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QnLDc0Nik7YmNiKDExNzEsMTUxLEF2ZSxjNmQpO3ZhciB4OT1tZGIoeXZlLCdFY29yZUVNYXAvVW5zZXR0YWJsZScsMTE3MSk7YmNiKDExNzIsNzQ2LFB2ZSxkNmQpO18uY2k9ZnVuY3Rpb24gZTZkKCl7dGhpcy5hPXRydWV9O18uZmo9ZnVuY3Rpb24gZjZkKCl7cmV0dXJuIHRoaXMuYX07Xy5Yaj1mdW5jdGlvbiBnNmQoKXt2YXIgYTtVeGQodGhpcyk7aWYob2lkKHRoaXMuZSkpe2E9dGhpcy5hO3RoaXMuYT1mYWxzZTtVaGQodGhpcy5lLG5ldyBxU2QodGhpcy5lLDIsdGhpcy5jLGEsZmFsc2UpKX1lbHNle3RoaXMuYT1mYWxzZX19O18uYT1mYWxzZTt2YXIgdzk9bWRiKHl2ZSwnRWNvcmVFTWFwL1Vuc2V0dGFibGUvVW5zZXR0YWJsZURlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QnLDExNzIpO2JjYigxMTY4LDIyOCxma2UsQTZkKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO3ZhciBBOT1tZGIoeXZlLCdFY29yZVV0aWwvQ29waWVyJywxMTY4KTtiY2IoNzQ1LDEsYWllLEM2ZCk7Xy5OYj1mdW5jdGlvbiBENmQoYSl7UnJiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gRTZkKCl7cmV0dXJuIEI2ZCh0aGlzKX07Xy5QYj1mdW5jdGlvbiBGNmQoKXt2YXIgYTtCNmQodGhpcyk7YT10aGlzLmI7dGhpcy5iPW51bGw7cmV0dXJuIGF9O18uUWI9ZnVuY3Rpb24gRzZkKCl7dGhpcy5hLlFiKCl9O3ZhciBCOT1tZGIoeXZlLCdFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yJyw3NDUpO2JjYigxMzgyLDEzODEse30sSjZkKTt2YXIgSDZkO3ZhciBDOT1tZGIoeXZlLCdFY29yZVZhbGlkYXRvcicsMTM4Mik7dmFyIFA2ZDt2YXIgTjk9b2RiKHl2ZSwnRmVhdHVyZU1hcFV0aWwvVmFsaWRhdG9yJyk7YmNiKDEyNjAsMSx7MTk0MjoxfSxVNmQpO18ucmw9ZnVuY3Rpb24gVjZkKGEpe3JldHVybiB0cnVlfTt2YXIgRjk9bWRiKHl2ZSwnRmVhdHVyZU1hcFV0aWwvMScsMTI2MCk7YmNiKDc1NywxLHsxOTQyOjF9LFo2ZCk7Xy5ybD1mdW5jdGlvbiAkNmQoYSl7dmFyIGI7aWYodGhpcy5jPT1hKXJldHVybiB0cnVlO2I9REQoT2hiKHRoaXMuYSxhKSk7aWYoYj09bnVsbCl7aWYoWTZkKHRoaXMsYSkpe182ZCh0aGlzLmEsYSwoQmNiKCksQWNiKSk7cmV0dXJuIHRydWV9ZWxzZXtfNmQodGhpcy5hLGEsKEJjYigpLHpjYikpO3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYj09KEJjYigpLEFjYil9fTtfLmU9ZmFsc2U7dmFyIFc2ZDt2YXIgSTk9bWRiKHl2ZSwnRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3InLDc1Nyk7YmNiKDc1OCw0Myxma2UsYTdkKTt2YXIgSDk9bWRiKHl2ZSwnRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUnLDc1OCk7YmNiKDUwMSw1Mix7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSw2OToxLDk1OjF9LGY3ZCk7Xy5WYz1mdW5jdGlvbiBnN2QoYSxiKXtwMmQodGhpcy5jLHRoaXMuYixhLGIpfTtfLkZjPWZ1bmN0aW9uIGg3ZChhKXtyZXR1cm4gcTJkKHRoaXMuYyx0aGlzLmIsYSl9O18uV2M9ZnVuY3Rpb24gaTdkKGEsYil7cmV0dXJuIHMyZCh0aGlzLmMsdGhpcy5iLGEsYil9O18uR2M9ZnVuY3Rpb24gajdkKGEpe3JldHVybiBiN2QodGhpcyxhKX07Xy5YaD1mdW5jdGlvbiBrN2QoYSxiKXt1MmQodGhpcy5jLHRoaXMuYixhLGIpfTtfLmxrPWZ1bmN0aW9uIGw3ZChhLGIpe3JldHVybiB4MmQodGhpcy5jLHRoaXMuYixhLGIpfTtfLnBpPWZ1bmN0aW9uIG03ZChhKXtyZXR1cm4gSjJkKHRoaXMuYyx0aGlzLmIsYSxmYWxzZSl9O18uWmg9ZnVuY3Rpb24gbjdkKCl7cmV0dXJuIHkyZCh0aGlzLmMsdGhpcy5iKX07Xy4kaD1mdW5jdGlvbiBvN2QoKXtyZXR1cm4gejJkKHRoaXMuYyx0aGlzLmIpfTtfLl9oPWZ1bmN0aW9uIHA3ZChhKXtyZXR1cm4gQTJkKHRoaXMuYyx0aGlzLmIsYSl9O18ubWs9ZnVuY3Rpb24gcTdkKGEsYil7cmV0dXJuIGM3ZCh0aGlzLGEsYil9O18uJGI9ZnVuY3Rpb24gcjdkKCl7ZDdkKHRoaXMpfTtfLkhjPWZ1bmN0aW9uIHM3ZChhKXtyZXR1cm4gRTJkKHRoaXMuYyx0aGlzLmIsYSl9O18uSWM9ZnVuY3Rpb24gdDdkKGEpe3JldHVybiBHMmQodGhpcy5jLHRoaXMuYixhKX07Xy5YYj1mdW5jdGlvbiB1N2QoYSl7cmV0dXJuIEoyZCh0aGlzLmMsdGhpcy5iLGEsdHJ1ZSl9O18uV2o9ZnVuY3Rpb24gdjdkKGEpe3JldHVybiB0aGlzfTtfLlhjPWZ1bmN0aW9uIHc3ZChhKXtyZXR1cm4gTDJkKHRoaXMuYyx0aGlzLmIsYSl9O18uZGM9ZnVuY3Rpb24geDdkKCl7cmV0dXJuIGU3ZCh0aGlzKX07Xy5maj1mdW5jdGlvbiB5N2QoKXtyZXR1cm4gIVIyZCh0aGlzLmMsdGhpcy5iKX07Xy5LYz1mdW5jdGlvbiB6N2QoKXtyZXR1cm4gUzJkKHRoaXMuYyx0aGlzLmIpfTtfLlljPWZ1bmN0aW9uIEE3ZCgpe3JldHVybiBVMmQodGhpcy5jLHRoaXMuYil9O18uWmM9ZnVuY3Rpb24gQjdkKGEpe3JldHVybiBWMmQodGhpcy5jLHRoaXMuYixhKX07Xy5paT1mdW5jdGlvbiBDN2QoYSxiKXtyZXR1cm4gWDJkKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5qaT1mdW5jdGlvbiBEN2QoYSxiKXtZMmQodGhpcy5jLHRoaXMuYixhLGIpfTtfLiRjPWZ1bmN0aW9uIEU3ZChhKXtyZXR1cm4gWjJkKHRoaXMuYyx0aGlzLmIsYSl9O18uTWM9ZnVuY3Rpb24gRjdkKGEpe3JldHVybiAkMmQodGhpcy5jLHRoaXMuYixhKX07Xy5fYz1mdW5jdGlvbiBHN2QoYSxiKXtyZXR1cm4gZTNkKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5XYj1mdW5jdGlvbiBIN2QoYSl7RDJkKHRoaXMuYyx0aGlzLmIpO2I3ZCh0aGlzLEJEKGEsMTUpKX07Xy5nYz1mdW5jdGlvbiBJN2QoKXtyZXR1cm4gbjNkKHRoaXMuYyx0aGlzLmIpfTtfLlBjPWZ1bmN0aW9uIEo3ZCgpe3JldHVybiBvM2QodGhpcy5jLHRoaXMuYil9O18uUWM9ZnVuY3Rpb24gSzdkKGEpe3JldHVybiBxM2QodGhpcy5jLHRoaXMuYixhKX07Xy5JYj1mdW5jdGlvbiBMN2QoKXt2YXIgYSxiO2I9bmV3IEhmYjtiLmErPSdbJztmb3IoYT15MmQodGhpcy5jLHRoaXMuYik7YjRkKGEpOyl7RWZiKGIseGZiKGQ0ZChhKSkpO2I0ZChhKSYmKGIuYSs9U2hlLGIpfWIuYSs9J10nO3JldHVybiBiLmF9O18uWGo9ZnVuY3Rpb24gTTdkKCl7RDJkKHRoaXMuYyx0aGlzLmIpfTt2YXIgSjk9bWRiKHl2ZSwnRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVMaXN0Jyw1MDEpO2JjYig2MjcsMzYsZnZlLE83ZCk7Xy55aT1mdW5jdGlvbiBQN2QoYSl7cmV0dXJuIE43ZCh0aGlzLGEpfTtfLkRpPWZ1bmN0aW9uIFE3ZChhKXt2YXIgYixjLGQsZSxmLGcsaDtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOntmPWEuQWkoKTtpZihQRChmKT09PVBEKHRoaXMuYykmJk43ZCh0aGlzLG51bGwpPT1hLnlpKG51bGwpKXt0aGlzLmc9YS56aSgpO2EueGkoKT09MSYmKHRoaXMuZD0xKTtyZXR1cm4gdHJ1ZX1icmVha31jYXNlIDM6e2U9YS54aSgpO3N3aXRjaChlKXtjYXNlIDM6e2Y9YS5BaSgpO2lmKFBEKGYpPT09UEQodGhpcy5jKSYmTjdkKHRoaXMsbnVsbCk9PWEueWkobnVsbCkpe3RoaXMuZD01O2I9bmV3IHp1ZCgyKTt3dGQoYix0aGlzLmcpO3d0ZChiLGEuemkoKSk7dGhpcy5nPWI7cmV0dXJuIHRydWV9YnJlYWt9fWJyZWFrfWNhc2UgNTp7ZT1hLnhpKCk7c3dpdGNoKGUpe2Nhc2UgMzp7Zj1hLkFpKCk7aWYoUEQoZik9PT1QRCh0aGlzLmMpJiZON2QodGhpcyxudWxsKT09YS55aShudWxsKSl7Yz1CRCh0aGlzLmcsMTQpO2MuRmMoYS56aSgpKTtyZXR1cm4gdHJ1ZX1icmVha319YnJlYWt9Y2FzZSA0OntlPWEueGkoKTtzd2l0Y2goZSl7Y2FzZSAzOntmPWEuQWkoKTtpZihQRChmKT09PVBEKHRoaXMuYykmJk43ZCh0aGlzLG51bGwpPT1hLnlpKG51bGwpKXt0aGlzLmQ9MTt0aGlzLmc9YS56aSgpO3JldHVybiB0cnVlfWJyZWFrfWNhc2UgNDp7Zj1hLkFpKCk7aWYoUEQoZik9PT1QRCh0aGlzLmMpJiZON2QodGhpcyxudWxsKT09YS55aShudWxsKSl7dGhpcy5kPTY7aD1uZXcgenVkKDIpO3d0ZChoLHRoaXMubik7d3RkKGgsYS5CaSgpKTt0aGlzLm49aDtnPU9DKEdDKFdELDEpLG9qZSwyNSwxNSxbdGhpcy5vLGEuQ2koKV0pO3RoaXMuZz1nO3JldHVybiB0cnVlfWJyZWFrfX1icmVha31jYXNlIDY6e2U9YS54aSgpO3N3aXRjaChlKXtjYXNlIDQ6e2Y9YS5BaSgpO2lmKFBEKGYpPT09UEQodGhpcy5jKSYmTjdkKHRoaXMsbnVsbCk9PWEueWkobnVsbCkpe2M9QkQodGhpcy5uLDE0KTtjLkZjKGEuQmkoKSk7Zz1CRCh0aGlzLmcsNDgpO2Q9S0MoV0Qsb2plLDI1LGcubGVuZ3RoKzEsMTUsMSk7JGZiKGcsMCxkLDAsZy5sZW5ndGgpO2RbZy5sZW5ndGhdPWEuQ2koKTt0aGlzLmc9ZDtyZXR1cm4gdHJ1ZX1icmVha319YnJlYWt9fXJldHVybiBmYWxzZX07dmFyIEs5PW1kYih5dmUsJ0ZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTm90aWZpY2F0aW9uSW1wbCcsNjI3KTtiY2IoNTUyLDUwMSx7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSwxNTM6MSwyMTU6MSwxOTM3OjEsNjk6MSw5NToxfSxSN2QpO18uZGw9ZnVuY3Rpb24gUzdkKGEsYil7cmV0dXJuIHEyZCh0aGlzLmMsYSxiKX07Xy5lbD1mdW5jdGlvbiBUN2QoYSxiLGMpe3JldHVybiB4MmQodGhpcy5jLGEsYixjKX07Xy5mbD1mdW5jdGlvbiBVN2QoYSxiLGMpe3JldHVybiBDMmQodGhpcy5jLGEsYixjKX07Xy5nbD1mdW5jdGlvbiBWN2QoKXtyZXR1cm4gdGhpc307Xy5obD1mdW5jdGlvbiBXN2QoYSxiKXtyZXR1cm4gSzJkKHRoaXMuYyxhLGIpfTtfLmlsPWZ1bmN0aW9uIFg3ZChhKXtyZXR1cm4gQkQoSjJkKHRoaXMuYyx0aGlzLmIsYSxmYWxzZSksNzIpLmFrKCl9O18uamw9ZnVuY3Rpb24gWTdkKGEpe3JldHVybiBCRChKMmQodGhpcy5jLHRoaXMuYixhLGZhbHNlKSw3MikuZGQoKX07Xy5rbD1mdW5jdGlvbiBaN2QoKXtyZXR1cm4gdGhpcy5hfTtfLmxsPWZ1bmN0aW9uICQ3ZChhKXtyZXR1cm4gIVIyZCh0aGlzLmMsYSl9O18ubWw9ZnVuY3Rpb24gXzdkKGEsYil7ZjNkKHRoaXMuYyxhLGIpfTtfLm5sPWZ1bmN0aW9uIGE4ZChhKXtyZXR1cm4gZzNkKHRoaXMuYyxhKX07Xy5vbD1mdW5jdGlvbiBiOGQoYSl7czNkKHRoaXMuYyxhKX07dmFyIEw5PW1kYih5dmUsJ0ZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVGZWF0dXJlTWFwJyw1NTIpO2JjYigxMjU5LDEsenZlLGM4ZCk7Xy5Xaj1mdW5jdGlvbiBkOGQoYSl7cmV0dXJuIEoyZCh0aGlzLmIsdGhpcy5hLC0xLGEpfTtfLmZqPWZ1bmN0aW9uIGU4ZCgpe3JldHVybiAhUjJkKHRoaXMuYix0aGlzLmEpfTtfLldiPWZ1bmN0aW9uIGY4ZChhKXtmM2QodGhpcy5iLHRoaXMuYSxhKX07Xy5Yaj1mdW5jdGlvbiBnOGQoKXtEMmQodGhpcy5iLHRoaXMuYSl9O3ZhciBNOT1tZGIoeXZlLCdGZWF0dXJlTWFwVXRpbC9GZWF0dXJlVmFsdWUnLDEyNTkpO3ZhciBoOGQsaThkLGo4ZCxrOGQsbDhkO3ZhciBROT1vZGIoSXdlLCdBbnlUeXBlJyk7YmNiKDY2Niw2MCxUaWUsbjhkKTt2YXIgUjk9bWRiKEl3ZSwnSW52YWxpZERhdGF0eXBlVmFsdWVFeGNlcHRpb24nLDY2Nik7dmFyIFM5PW9kYihJd2UsSndlKTt2YXIgVDk9b2RiKEl3ZSxLd2UpO3ZhciBVOT1vZGIoSXdlLEx3ZSk7dmFyIG84ZDt2YXIgcThkO3ZhciBzOGQsdDhkLHU4ZCx2OGQsdzhkLHg4ZCx5OGQsejhkLEE4ZCxCOGQsQzhkLEQ4ZCxFOGQsRjhkLEc4ZCxIOGQsSThkLEo4ZCxLOGQsTDhkLE04ZCxOOGQsTzhkLFA4ZDtiY2IoODMwLDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDg0MzoxfSxSOGQpO18uX2c9ZnVuY3Rpb24gUzhkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOmlmKGMpcmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSx0aGlzLmM7cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSx0aGlzLmMuYjtjYXNlIDE6aWYoYylyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpLEJEKFQyZCh0aGlzLmMsKFE4ZCgpLHQ4ZCkpLDE1Myk7cmV0dXJuICghdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKSwyMTUpKS5rbCgpO2Nhc2UgMjppZihjKXJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyB1M2QodGhpcywyKSksdGhpcy5iO3JldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyB1M2QodGhpcywyKSksdGhpcy5iLmI7fXJldHVybiBiaWQodGhpcyxhLWFMZCh0aGlzLnpoKCkpLFhLZCgodGhpcy5qJjIpPT0wP3RoaXMuemgoKTooIXRoaXMuayYmKHRoaXMuaz1uZXcgSEdkKSx0aGlzLmspLmNrKCksYSksYixjKX07Xy5qaD1mdW5jdGlvbiBUOGQoYSxiLGMpe3ZhciBkO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxCMmQodGhpcy5jLGEsYyk7Y2FzZSAxOnJldHVybiAoIXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpLEJEKEJEKFQyZCh0aGlzLmMsKFE4ZCgpLHQ4ZCkpLDE1MyksNjkpKS5tayhhLGMpO2Nhc2UgMjpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgdTNkKHRoaXMsMikpLEIyZCh0aGlzLmIsYSxjKTt9cmV0dXJuIGQ9QkQoWEtkKCh0aGlzLmomMik9PTA/dGhpcy56aCgpOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxiKSw2NiksZC5OaigpLlJqKHRoaXMsQWlkKHRoaXMpLGItYUxkKHRoaXMuemgoKSksYSxjKX07Xy5saD1mdW5jdGlvbiBVOGQoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4gISghdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuICEhdGhpcy5iJiZ0aGlzLmIuaSE9MDt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKHRoaXMuemgoKSksWEtkKCh0aGlzLmomMik9PTA/dGhpcy56aCgpOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSl9O18uc2g9ZnVuY3Rpb24gVjhkKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSk7ZDNkKHRoaXMuYyxiKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKSwyMTUpKS5XYihiKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHUzZCh0aGlzLDIpKTtkM2QodGhpcy5iLGIpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKHRoaXMuaiYyKT09MD90aGlzLnpoKCk6KCF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rKS5jaygpLGEpLGIpfTtfLnpoPWZ1bmN0aW9uIFc4ZCgpe3JldHVybiBROGQoKSxzOGR9O18uQmg9ZnVuY3Rpb24gWDhkKGEpe3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpO1V4ZCh0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxCRChUMmQodGhpcy5jLChROGQoKSx0OGQpKSwxNTMpKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgdTNkKHRoaXMsMikpO1V4ZCh0aGlzLmIpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQodGhpcy56aCgpKSxYS2QoKHRoaXMuaiYyKT09MD90aGlzLnpoKCk6KCF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rKS5jaygpLGEpKX07Xy5JYj1mdW5jdGlvbiBZOGQoKXt2YXIgYTtpZigodGhpcy5qJjQpIT0wKXJldHVybiBFaWQodGhpcyk7YT1uZXcgSmZiKEVpZCh0aGlzKSk7YS5hKz0nIChtaXhlZDogJztEZmIoYSx0aGlzLmMpO2EuYSs9JywgYW55QXR0cmlidXRlOiAnO0RmYihhLHRoaXMuYik7YS5hKz0nKSc7cmV0dXJuIGEuYX07dmFyIFY5PW1kYihNd2UsJ0FueVR5cGVJbXBsJyw4MzApO2JjYig2NjcsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsMjAyMToxLDY2NzoxfSxfOGQpO18uX2c9ZnVuY3Rpb24gYTlkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmI7fXJldHVybiBiaWQodGhpcyxhLWFMZCgoUThkKCksRjhkKSksWEtkKCh0aGlzLmomMik9PTA/RjhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSxiLGMpfTtfLmxoPWZ1bmN0aW9uIGI5ZChhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmIhPW51bGw7fXJldHVybiBjaWQodGhpcyxhLWFMZCgoUThkKCksRjhkKSksWEtkKCh0aGlzLmomMik9PTA/RjhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSl9O18uc2g9ZnVuY3Rpb24gYzlkKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDpaOGQodGhpcyxHRChiKSk7cmV0dXJuO2Nhc2UgMTokOGQodGhpcyxHRChiKSk7cmV0dXJuO31kaWQodGhpcyxhLWFMZCgoUThkKCksRjhkKSksWEtkKCh0aGlzLmomMik9PTA/RjhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSxiKX07Xy56aD1mdW5jdGlvbiBkOWQoKXtyZXR1cm4gUThkKCksRjhkfTtfLkJoPWZ1bmN0aW9uIGU5ZChhKXtzd2l0Y2goYSl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoUThkKCksRjhkKSksWEtkKCh0aGlzLmomMik9PTA/RjhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSl9O18uSWI9ZnVuY3Rpb24gZjlkKCl7dmFyIGE7aWYoKHRoaXMuaiY0KSE9MClyZXR1cm4gRWlkKHRoaXMpO2E9bmV3IEpmYihFaWQodGhpcykpO2EuYSs9JyAoZGF0YTogJztFZmIoYSx0aGlzLmEpO2EuYSs9JywgdGFyZ2V0OiAnO0VmYihhLHRoaXMuYik7YS5hKz0nKSc7cmV0dXJuIGEuYX07Xy5hPW51bGw7Xy5iPW51bGw7dmFyIFc5PW1kYihNd2UsJ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwnLDY2Nyk7YmNiKDY2OCw4MzAsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSw4NDM6MSwyMDIyOjEsNjY4OjF9LGk5ZCk7Xy5fZz1mdW5jdGlvbiBqOWQoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoYylyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpLHRoaXMuYztyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpLHRoaXMuYy5iO2Nhc2UgMTppZihjKXJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKTtyZXR1cm4gKCF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxCRChCRChUMmQodGhpcy5jLChROGQoKSx0OGQpKSwxNTMpLDIxNSkpLmtsKCk7Y2FzZSAyOmlmKGMpcmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IHUzZCh0aGlzLDIpKSx0aGlzLmI7cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IHUzZCh0aGlzLDIpKSx0aGlzLmIuYjtjYXNlIDM6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxHRChLMmQodGhpcy5jLChROGQoKSxJOGQpLHRydWUpKTtjYXNlIDQ6cmV0dXJuIGo2ZCh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxHRChLMmQodGhpcy5jLChROGQoKSxJOGQpLHRydWUpKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKFE4ZCgpLEg4ZCkpLFhLZCgodGhpcy5qJjIpPT0wP0g4ZDooIXRoaXMuayYmKHRoaXMuaz1uZXcgSEdkKSx0aGlzLmspLmNrKCksYSksYixjKX07Xy5saD1mdW5jdGlvbiBrOWQoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4gISghdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuICEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDM6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxHRChLMmQodGhpcy5jLChROGQoKSxJOGQpLHRydWUpKSE9bnVsbDtjYXNlIDQ6cmV0dXJuIGo2ZCh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IHUzZCh0aGlzLDApKSxHRChLMmQodGhpcy5jLChROGQoKSxJOGQpLHRydWUpKSkpIT1udWxsO2Nhc2UgNTpyZXR1cm4gISF0aGlzLmE7fXJldHVybiBjaWQodGhpcyxhLWFMZCgoUThkKCksSDhkKSksWEtkKCh0aGlzLmomMik9PTA/SDhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSl9O18uc2g9ZnVuY3Rpb24gbDlkKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSk7ZDNkKHRoaXMuYyxiKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSksQkQoQkQoVDJkKHRoaXMuYywoUThkKCksdDhkKSksMTUzKSwyMTUpKS5XYihiKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHUzZCh0aGlzLDIpKTtkM2QodGhpcy5iLGIpO3JldHVybjtjYXNlIDM6aDlkKHRoaXMsR0QoYikpO3JldHVybjtjYXNlIDQ6aDlkKHRoaXMsaDZkKHRoaXMuYSxiKSk7cmV0dXJuO2Nhc2UgNTpnOWQodGhpcyxCRChiLDE0OCkpO3JldHVybjt9ZGlkKHRoaXMsYS1hTGQoKFE4ZCgpLEg4ZCkpLFhLZCgodGhpcy5qJjIpPT0wP0g4ZDooIXRoaXMuayYmKHRoaXMuaz1uZXcgSEdkKSx0aGlzLmspLmNrKCksYSksYil9O18uemg9ZnVuY3Rpb24gbTlkKCl7cmV0dXJuIFE4ZCgpLEg4ZH07Xy5CaD1mdW5jdGlvbiBuOWQoYSl7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSk7VXhkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgdTNkKHRoaXMsMCkpLEJEKFQyZCh0aGlzLmMsKFE4ZCgpLHQ4ZCkpLDE1MykpLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyB1M2QodGhpcywyKSk7VXhkKHRoaXMuYik7cmV0dXJuO2Nhc2UgMzohdGhpcy5jJiYodGhpcy5jPW5ldyB1M2QodGhpcywwKSk7ZjNkKHRoaXMuYywoUThkKCksSThkKSxudWxsKTtyZXR1cm47Y2FzZSA0Omg5ZCh0aGlzLGg2ZCh0aGlzLmEsbnVsbCkpO3JldHVybjtjYXNlIDU6dGhpcy5hPW51bGw7cmV0dXJuO31laWQodGhpcyxhLWFMZCgoUThkKCksSDhkKSksWEtkKCh0aGlzLmomMik9PTA/SDhkOighdGhpcy5rJiYodGhpcy5rPW5ldyBIR2QpLHRoaXMuaykuY2soKSxhKSl9O3ZhciBYOT1tZGIoTXdlLCdTaW1wbGVBbnlUeXBlSW1wbCcsNjY4KTtiY2IoNjY5LDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDIwMjM6MSw2Njk6MX0sbzlkKTtfLl9nPWZ1bmN0aW9uIHA5ZChhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDppZihjKXJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyB1M2QodGhpcywwKSksdGhpcy5hO3JldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyB1M2QodGhpcywwKSksdGhpcy5hLmI7Y2FzZSAxOnJldHVybiBjPyghdGhpcy5iJiYodGhpcy5iPW5ldyBkSWQoKGpHZCgpLGZHZCkseDYsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgZElkKChqR2QoKSxmR2QpLHg2LHRoaXMsMSkpLEZBZCh0aGlzLmIpKTtjYXNlIDI6cmV0dXJuIGM/KCF0aGlzLmMmJih0aGlzLmM9bmV3IGRJZCgoakdkKCksZkdkKSx4Nix0aGlzLDIpKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBkSWQoKGpHZCgpLGZHZCkseDYsdGhpcywyKSksRkFkKHRoaXMuYykpO2Nhc2UgMzpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpLFQyZCh0aGlzLmEsKFE4ZCgpLEw4ZCkpO2Nhc2UgNDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpLFQyZCh0aGlzLmEsKFE4ZCgpLE04ZCkpO2Nhc2UgNTpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpLFQyZCh0aGlzLmEsKFE4ZCgpLE84ZCkpO2Nhc2UgNjpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpLFQyZCh0aGlzLmEsKFE4ZCgpLFA4ZCkpO31yZXR1cm4gYmlkKHRoaXMsYS1hTGQoKFE4ZCgpLEs4ZCkpLFhLZCgodGhpcy5qJjIpPT0wP0s4ZDooIXRoaXMuayYmKHRoaXMuaz1uZXcgSEdkKSx0aGlzLmspLmNrKCksYSksYixjKX07Xy5qaD1mdW5jdGlvbiBxOWQoYSxiLGMpe3ZhciBkO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSxCMmQodGhpcy5hLGEsYyk7Y2FzZSAxOnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyBkSWQoKGpHZCgpLGZHZCkseDYsdGhpcywxKSksYklkKHRoaXMuYixhLGMpO2Nhc2UgMjpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgZElkKChqR2QoKSxmR2QpLHg2LHRoaXMsMikpLGJJZCh0aGlzLmMsYSxjKTtjYXNlIDU6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSxjN2QoVDJkKHRoaXMuYSwoUThkKCksTzhkKSksYSxjKTt9cmV0dXJuIGQ9QkQoWEtkKCh0aGlzLmomMik9PTA/KFE4ZCgpLEs4ZCk6KCF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rKS5jaygpLGIpLDY2KSxkLk5qKCkuUmoodGhpcyxBaWQodGhpcyksYi1hTGQoKFE4ZCgpLEs4ZCkpLGEsYyl9O18ubGg9ZnVuY3Rpb24gcjlkKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDE6cmV0dXJuICEhdGhpcy5iJiZ0aGlzLmIuZiE9MDtjYXNlIDI6cmV0dXJuICEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSwhZTdkKFQyZCh0aGlzLmEsKFE4ZCgpLEw4ZCkpKTtjYXNlIDQ6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSwhZTdkKFQyZCh0aGlzLmEsKFE4ZCgpLE04ZCkpKTtjYXNlIDU6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSwhZTdkKFQyZCh0aGlzLmEsKFE4ZCgpLE84ZCkpKTtjYXNlIDY6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKSwhZTdkKFQyZCh0aGlzLmEsKFE4ZCgpLFA4ZCkpKTt9cmV0dXJuIGNpZCh0aGlzLGEtYUxkKChROGQoKSxLOGQpKSxYS2QoKHRoaXMuaiYyKT09MD9LOGQ6KCF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rKS5jaygpLGEpKX07Xy5zaD1mdW5jdGlvbiBzOWQoYSxiKXtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkM2QodGhpcy5hLGIpO3JldHVybjtjYXNlIDE6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZElkKChqR2QoKSxmR2QpLHg2LHRoaXMsMSkpO2NJZCh0aGlzLmIsYik7cmV0dXJuO2Nhc2UgMjohdGhpcy5jJiYodGhpcy5jPW5ldyBkSWQoKGpHZCgpLGZHZCkseDYsdGhpcywyKSk7Y0lkKHRoaXMuYyxiKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksTDhkKSkpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtiN2QoVDJkKHRoaXMuYSxMOGQpLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksTThkKSkpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtiN2QoVDJkKHRoaXMuYSxNOGQpLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksTzhkKSkpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtiN2QoVDJkKHRoaXMuYSxPOGQpLEJEKGIsMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksUDhkKSkpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtiN2QoVDJkKHRoaXMuYSxQOGQpLEJEKGIsMTQpKTtyZXR1cm47fWRpZCh0aGlzLGEtYUxkKChROGQoKSxLOGQpKSxYS2QoKHRoaXMuaiYyKT09MD9LOGQ6KCF0aGlzLmsmJih0aGlzLms9bmV3IEhHZCksdGhpcy5rKS5jaygpLGEpLGIpfTtfLnpoPWZ1bmN0aW9uIHQ5ZCgpe3JldHVybiBROGQoKSxLOGR9O18uQmg9ZnVuY3Rpb24gdTlkKGEpe3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpO1V4ZCh0aGlzLmEpO3JldHVybjtjYXNlIDE6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZElkKChqR2QoKSxmR2QpLHg2LHRoaXMsMSkpO3RoaXMuYi5jLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5jJiYodGhpcy5jPW5ldyBkSWQoKGpHZCgpLGZHZCkseDYsdGhpcywyKSk7dGhpcy5jLmMuJGIoKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksTDhkKSkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgdTNkKHRoaXMsMCkpO2Q3ZChUMmQodGhpcy5hLChROGQoKSxNOGQpKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyB1M2QodGhpcywwKSk7ZDdkKFQyZCh0aGlzLmEsKFE4ZCgpLE84ZCkpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IHUzZCh0aGlzLDApKTtkN2QoVDJkKHRoaXMuYSwoUThkKCksUDhkKSkpO3JldHVybjt9ZWlkKHRoaXMsYS1hTGQoKFE4ZCgpLEs4ZCkpLFhLZCgodGhpcy5qJjIpPT0wP0s4ZDooIXRoaXMuayYmKHRoaXMuaz1uZXcgSEdkKSx0aGlzLmspLmNrKCksYSkpfTtfLkliPWZ1bmN0aW9uIHY5ZCgpe3ZhciBhO2lmKCh0aGlzLmomNCkhPTApcmV0dXJuIEVpZCh0aGlzKTthPW5ldyBKZmIoRWlkKHRoaXMpKTthLmErPScgKG1peGVkOiAnO0RmYihhLHRoaXMuYSk7YS5hKz0nKSc7cmV0dXJuIGEuYX07dmFyIFk5PW1kYihNd2UsJ1hNTFR5cGVEb2N1bWVudFJvb3RJbXBsJyw2NjkpO2JjYigxOTE5LDcwNCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxLDIwMjQ6MX0sVTlkKTtfLkloPWZ1bmN0aW9uIFY5ZChhLGIpe3N3aXRjaChhLnlqKCkpe2Nhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxNjpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMjY6Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgNDQ6Y2FzZSA0NTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MzpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDU4OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDQ6cmV0dXJuIGI9PW51bGw/bnVsbDpmY2IoYik7Y2FzZSAxOTpjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzNTpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MTpjYXNlIDQ2OmNhc2UgNTI6Y2FzZSA1NDpjYXNlIDU6cmV0dXJuIEdEKGIpO2Nhc2UgNjpyZXR1cm4gQzlkKEJEKGIsMTkwKSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gVm1kKHRoaXMsYSxiKTtjYXNlIDEzOnJldHVybiBiPT1udWxsP251bGw6cWdiKEJEKGIsMjQwKSk7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiBiPT1udWxsP251bGw6RDlkKEVkYihFRChiKSkpO2Nhc2UgMTc6cmV0dXJuIEU5ZCgoUThkKCksYikpO2Nhc2UgMTg6cmV0dXJuIEU5ZChiKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIGI9PW51bGw/bnVsbDpGOWQoQkQoYiwxNTUpLmEpO2Nhc2UgMjc6cmV0dXJuIEc5ZChCRChiLDE5MCkpO2Nhc2UgMzA6cmV0dXJuIEg5ZCgoUThkKCksQkQoYiwxNSkpKTtjYXNlIDMxOnJldHVybiBIOWQoQkQoYiwxNSkpO2Nhc2UgNDA6cmV0dXJuIEs5ZCgoUThkKCksYikpO2Nhc2UgNDI6cmV0dXJuIEk5ZCgoUThkKCksYikpO2Nhc2UgNDM6cmV0dXJuIEk5ZChiKTtjYXNlIDU5OmNhc2UgNDg6cmV0dXJuIEo5ZCgoUThkKCksYikpO2RlZmF1bHQ6dGhyb3cgdmJiKG5ldyBXZGIodHRlK2EubmUoKSt1dGUpKTt9fTtfLkpoPWZ1bmN0aW9uIFc5ZChhKXt2YXIgYixjLGQsZSxmO3N3aXRjaChhLkc9PS0xJiYoYS5HPShjPWJLZChhKSxjP0hMZChjLk1oKCksYSk6LTEpKSxhLkcpe2Nhc2UgMDpyZXR1cm4gYj1uZXcgUjhkLGI7Y2FzZSAxOnJldHVybiBkPW5ldyBfOGQsZDtjYXNlIDI6cmV0dXJuIGU9bmV3IGk5ZCxlO2Nhc2UgMzpyZXR1cm4gZj1uZXcgbzlkLGY7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYih4dGUrYS56Yit1dGUpKTt9fTtfLktoPWZ1bmN0aW9uIFg5ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO3N3aXRjaChhLnlqKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gYjtjYXNlIDY6cmV0dXJuIEw5ZChiKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBiPT1udWxsP251bGw6QjlkKGIpO2Nhc2UgOTpyZXR1cm4gYj09bnVsbD9udWxsOlNjYihJY2IoKGQ9UWdlKGIsdHJ1ZSksZC5sZW5ndGg+MCYmKEJDYigwLGQubGVuZ3RoKSxkLmNoYXJDb2RlQXQoMCk9PTQzKT9kLnN1YnN0cigxKTpkKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMDpyZXR1cm4gYj09bnVsbD9udWxsOlNjYihJY2IoKGU9UWdlKGIsdHJ1ZSksZS5sZW5ndGg+MCYmKEJDYigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQzKT9lLnN1YnN0cigxKTplKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMTpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLHc4ZCksYikpO2Nhc2UgMTI6cmV0dXJuIEdEKFdtZCh0aGlzLChROGQoKSx4OGQpLGIpKTtjYXNlIDEzOnJldHVybiBiPT1udWxsP251bGw6bmV3IHRnYihRZ2UoYix0cnVlKSk7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiBNOWQoYik7Y2FzZSAxNjpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLHk4ZCksYikpO2Nhc2UgMTc6cmV0dXJuIE45ZCgoUThkKCksYikpO2Nhc2UgMTg6cmV0dXJuIE45ZChiKTtjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzNTpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MTpjYXNlIDU0OmNhc2UgMTk6cmV0dXJuIFFnZShiLHRydWUpO2Nhc2UgMjE6Y2FzZSAyMDpyZXR1cm4gTzlkKGIpO2Nhc2UgMjI6cmV0dXJuIEdEKFdtZCh0aGlzLChROGQoKSx6OGQpLGIpKTtjYXNlIDIzOnJldHVybiBHRChXbWQodGhpcywoUThkKCksQThkKSxiKSk7Y2FzZSAyNDpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLEI4ZCksYikpO2Nhc2UgMjU6cmV0dXJuIEdEKFdtZCh0aGlzLChROGQoKSxDOGQpLGIpKTtjYXNlIDI2OnJldHVybiBHRChXbWQodGhpcywoUThkKCksRDhkKSxiKSk7Y2FzZSAyNzpyZXR1cm4gUDlkKGIpO2Nhc2UgMzA6cmV0dXJuIFE5ZCgoUThkKCksYikpO2Nhc2UgMzE6cmV0dXJuIFE5ZChiKTtjYXNlIDMyOnJldHVybiBiPT1udWxsP251bGw6bWViKEljYigoaz1RZ2UoYix0cnVlKSxrLmxlbmd0aD4wJiYoQkNiKDAsay5sZW5ndGgpLGsuY2hhckNvZGVBdCgwKT09NDMpP2suc3Vic3RyKDEpOmspLFJpZSxPaGUpKTtjYXNlIDMzOnJldHVybiBiPT1udWxsP251bGw6bmV3IFlnYigobD1RZ2UoYix0cnVlKSxsLmxlbmd0aD4wJiYoQkNiKDAsbC5sZW5ndGgpLGwuY2hhckNvZGVBdCgwKT09NDMpP2wuc3Vic3RyKDEpOmwpKTtjYXNlIDM0OnJldHVybiBiPT1udWxsP251bGw6bWViKEljYigobT1RZ2UoYix0cnVlKSxtLmxlbmd0aD4wJiYoQkNiKDAsbS5sZW5ndGgpLG0uY2hhckNvZGVBdCgwKT09NDMpP20uc3Vic3RyKDEpOm0pLFJpZSxPaGUpKTtjYXNlIDM2OnJldHVybiBiPT1udWxsP251bGw6QWViKEpjYigobj1RZ2UoYix0cnVlKSxuLmxlbmd0aD4wJiYoQkNiKDAsbi5sZW5ndGgpLG4uY2hhckNvZGVBdCgwKT09NDMpP24uc3Vic3RyKDEpOm4pKSk7Y2FzZSAzNzpyZXR1cm4gYj09bnVsbD9udWxsOkFlYihKY2IoKG89UWdlKGIsdHJ1ZSksby5sZW5ndGg+MCYmKEJDYigwLG8ubGVuZ3RoKSxvLmNoYXJDb2RlQXQoMCk9PTQzKT9vLnN1YnN0cigxKTpvKSkpO2Nhc2UgNDA6cmV0dXJuIFQ5ZCgoUThkKCksYikpO2Nhc2UgNDI6cmV0dXJuIFI5ZCgoUThkKCksYikpO2Nhc2UgNDM6cmV0dXJuIFI5ZChiKTtjYXNlIDQ0OnJldHVybiBiPT1udWxsP251bGw6bmV3IFlnYigocD1RZ2UoYix0cnVlKSxwLmxlbmd0aD4wJiYoQkNiKDAscC5sZW5ndGgpLHAuY2hhckNvZGVBdCgwKT09NDMpP3Auc3Vic3RyKDEpOnApKTtjYXNlIDQ1OnJldHVybiBiPT1udWxsP251bGw6bmV3IFlnYigocT1RZ2UoYix0cnVlKSxxLmxlbmd0aD4wJiYoQkNiKDAscS5sZW5ndGgpLHEuY2hhckNvZGVBdCgwKT09NDMpP3Euc3Vic3RyKDEpOnEpKTtjYXNlIDQ2OnJldHVybiBRZ2UoYixmYWxzZSk7Y2FzZSA0NzpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLEU4ZCksYikpO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gUzlkKChROGQoKSxiKSk7Y2FzZSA0OTpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLEc4ZCksYikpO2Nhc2UgNTA6cmV0dXJuIGI9PW51bGw/bnVsbDpXZWIoSWNiKChyPVFnZShiLHRydWUpLHIubGVuZ3RoPjAmJihCQ2IoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApPT00Myk/ci5zdWJzdHIoMSk6ciksYXdlLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUxOnJldHVybiBiPT1udWxsP251bGw6V2ViKEljYigoZj1RZ2UoYix0cnVlKSxmLmxlbmd0aD4wJiYoQkNiKDAsZi5sZW5ndGgpLGYuY2hhckNvZGVBdCgwKT09NDMpP2Yuc3Vic3RyKDEpOmYpLGF3ZSwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gR0QoV21kKHRoaXMsKFE4ZCgpLEo4ZCksYikpO2Nhc2UgNTU6cmV0dXJuIGI9PW51bGw/bnVsbDpXZWIoSWNiKChnPVFnZShiLHRydWUpLGcubGVuZ3RoPjAmJihCQ2IoMCxnLmxlbmd0aCksZy5jaGFyQ29kZUF0KDApPT00Myk/Zy5zdWJzdHIoMSk6ZyksYXdlLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDU2OnJldHVybiBiPT1udWxsP251bGw6V2ViKEljYigoaD1RZ2UoYix0cnVlKSxoLmxlbmd0aD4wJiYoQkNiKDAsaC5sZW5ndGgpLGguY2hhckNvZGVBdCgwKT09NDMpP2guc3Vic3RyKDEpOmgpLGF3ZSwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NzpyZXR1cm4gYj09bnVsbD9udWxsOkFlYihKY2IoKGk9UWdlKGIsdHJ1ZSksaS5sZW5ndGg+MCYmKEJDYigwLGkubGVuZ3RoKSxpLmNoYXJDb2RlQXQoMCk9PTQzKT9pLnN1YnN0cigxKTppKSkpO2Nhc2UgNTg6cmV0dXJuIGI9PW51bGw/bnVsbDpBZWIoSmNiKChqPVFnZShiLHRydWUpLGoubGVuZ3RoPjAmJihCQ2IoMCxqLmxlbmd0aCksai5jaGFyQ29kZUF0KDApPT00Myk/ai5zdWJzdHIoMSk6aikpKTtjYXNlIDYwOnJldHVybiBiPT1udWxsP251bGw6bWViKEljYigoYz1RZ2UoYix0cnVlKSxjLmxlbmd0aD4wJiYoQkNiKDAsYy5sZW5ndGgpLGMuY2hhckNvZGVBdCgwKT09NDMpP2Muc3Vic3RyKDEpOmMpLFJpZSxPaGUpKTtjYXNlIDYxOnJldHVybiBiPT1udWxsP251bGw6bWViKEljYihRZ2UoYix0cnVlKSxSaWUsT2hlKSk7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IFdkYih0dGUrYS5uZSgpK3V0ZSkpO319O3ZhciB3OWQseDlkLHk5ZCx6OWQ7dmFyIFo5PW1kYihNd2UsJ1hNTFR5cGVGYWN0b3J5SW1wbCcsMTkxOSk7YmNiKDU4NiwxNzksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MSwxOTQ1OjEsNTg2OjF9LGNhZSk7Xy5OPWZhbHNlO18uTz1mYWxzZTt2YXIgWjlkPWZhbHNlO3ZhciBZYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsJyw1ODYpO2JjYigxODUyLDEsezgzNzoxfSxmYWUpO18uX2o9ZnVuY3Rpb24gZ2FlKCl7cmV0dXJuIFVnZSgpLFRnZX07dmFyIGlhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMScsMTg1Mik7YmNiKDE4NjEsMSxud2UsaGFlKTtfLndqPWZ1bmN0aW9uIGlhZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gamFlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciAkOT1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTAnLDE4NjEpO2JjYigxODYyLDEsbndlLGthZSk7Xy53aj1mdW5jdGlvbiBsYWUoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIG1hZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgXzk9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzExJywxODYyKTtiY2IoMTg2MywxLG53ZSxuYWUpO18ud2o9ZnVuY3Rpb24gb2FlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBwYWUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIGFhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTInLDE4NjMpO2JjYigxODY0LDEsbndlLHFhZSk7Xy53aj1mdW5jdGlvbiByYWUoYSl7cmV0dXJuIExEKGEpfTtfLnhqPWZ1bmN0aW9uIHNhZShhKXtyZXR1cm4gS0MoQkksbmllLDMzMyxhLDcsMSl9O3ZhciBiYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzEzJywxODY0KTtiY2IoMTg2NSwxLG53ZSx0YWUpO18ud2o9ZnVuY3Rpb24gdWFlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiB2YWUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIGNhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTQnLDE4NjUpO2JjYigxODY2LDEsbndlLHdhZSk7Xy53aj1mdW5jdGlvbiB4YWUoYSl7cmV0dXJuIEpEKGEsMTUpfTtfLnhqPWZ1bmN0aW9uIHlhZShhKXtyZXR1cm4gS0MoeUssZW1lLDE1LGEsMCwxKX07dmFyIGRhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTUnLDE4NjYpO2JjYigxODY3LDEsbndlLHphZSk7Xy53aj1mdW5jdGlvbiBBYWUoYSl7cmV0dXJuIEpEKGEsMTUpfTtfLnhqPWZ1bmN0aW9uIEJhZShhKXtyZXR1cm4gS0MoeUssZW1lLDE1LGEsMCwxKX07dmFyIGVhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTYnLDE4NjcpO2JjYigxODY4LDEsbndlLENhZSk7Xy53aj1mdW5jdGlvbiBEYWUoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIEVhZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgZmFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8xNycsMTg2OCk7YmNiKDE4NjksMSxud2UsRmFlKTtfLndqPWZ1bmN0aW9uIEdhZShhKXtyZXR1cm4gSkQoYSwxNTUpfTtfLnhqPWZ1bmN0aW9uIEhhZShhKXtyZXR1cm4gS0MoRkksbmllLDE1NSxhLDAsMSl9O3ZhciBnYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzE4JywxODY5KTtiY2IoMTg3MCwxLG53ZSxJYWUpO18ud2o9ZnVuY3Rpb24gSmFlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBLYWUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIGhhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTknLDE4NzApO2JjYigxODUzLDEsbndlLExhZSk7Xy53aj1mdW5jdGlvbiBNYWUoYSl7cmV0dXJuIEpEKGEsODQzKX07Xy54aj1mdW5jdGlvbiBOYWUoYSl7cmV0dXJuIEtDKFE5LFVoZSw4NDMsYSwwLDEpfTt2YXIgdGFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yJywxODUzKTtiY2IoMTg3MSwxLG53ZSxPYWUpO18ud2o9ZnVuY3Rpb24gUGFlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBRYWUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIGphYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjAnLDE4NzEpO2JjYigxODcyLDEsbndlLFJhZSk7Xy53aj1mdW5jdGlvbiBTYWUoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIFRhZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIga2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yMScsMTg3Mik7YmNiKDE4NzMsMSxud2UsVWFlKTtfLndqPWZ1bmN0aW9uIFZhZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gV2FlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBsYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzIyJywxODczKTtiY2IoMTg3NCwxLG53ZSxYYWUpO18ud2o9ZnVuY3Rpb24gWWFlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBaYWUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIG1hYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjMnLDE4NzQpO2JjYigxODc1LDEsbndlLCRhZSk7Xy53aj1mdW5jdGlvbiBfYWUoYSl7cmV0dXJuIEpEKGEsMTkwKX07Xy54aj1mdW5jdGlvbiBhYmUoYSl7cmV0dXJuIEtDKFNELG5pZSwxOTAsYSwwLDIpfTt2YXIgbmFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yNCcsMTg3NSk7YmNiKDE4NzYsMSxud2UsYmJlKTtfLndqPWZ1bmN0aW9uIGNiZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gZGJlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBvYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzI1JywxODc2KTtiY2IoMTg3NywxLG53ZSxlYmUpO18ud2o9ZnVuY3Rpb24gZmJlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBnYmUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIHBhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjYnLDE4NzcpO2JjYigxODc4LDEsbndlLGhiZSk7Xy53aj1mdW5jdGlvbiBpYmUoYSl7cmV0dXJuIEpEKGEsMTUpfTtfLnhqPWZ1bmN0aW9uIGpiZShhKXtyZXR1cm4gS0MoeUssZW1lLDE1LGEsMCwxKX07dmFyIHFhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjcnLDE4NzgpO2JjYigxODc5LDEsbndlLGtiZSk7Xy53aj1mdW5jdGlvbiBsYmUoYSl7cmV0dXJuIEpEKGEsMTUpfTtfLnhqPWZ1bmN0aW9uIG1iZShhKXtyZXR1cm4gS0MoeUssZW1lLDE1LGEsMCwxKX07dmFyIHJhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjgnLDE4NzkpO2JjYigxODgwLDEsbndlLG5iZSk7Xy53aj1mdW5jdGlvbiBvYmUoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIHBiZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgc2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yOScsMTg4MCk7YmNiKDE4NTQsMSxud2UscWJlKTtfLndqPWZ1bmN0aW9uIHJiZShhKXtyZXR1cm4gSkQoYSw2NjcpfTtfLnhqPWZ1bmN0aW9uIHNiZShhKXtyZXR1cm4gS0MoUzksVWhlLDIwMjEsYSwwLDEpfTt2YXIgRWFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zJywxODU0KTtiY2IoMTg4MSwxLG53ZSx0YmUpO18ud2o9ZnVuY3Rpb24gdWJlKGEpe3JldHVybiBKRChhLDE5KX07Xy54aj1mdW5jdGlvbiB2YmUoYSl7cmV0dXJuIEtDKEpJLG5pZSwxOSxhLDAsMSl9O3ZhciB1YWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzMwJywxODgxKTtiY2IoMTg4MiwxLG53ZSx3YmUpO18ud2o9ZnVuY3Rpb24geGJlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiB5YmUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIHZhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzEnLDE4ODIpO2JjYigxODgzLDEsbndlLHpiZSk7Xy53aj1mdW5jdGlvbiBBYmUoYSl7cmV0dXJuIEpEKGEsMTYyKX07Xy54aj1mdW5jdGlvbiBCYmUoYSl7cmV0dXJuIEtDKE1JLG5pZSwxNjIsYSwwLDEpfTt2YXIgd2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zMicsMTg4Myk7YmNiKDE4ODQsMSxud2UsQ2JlKTtfLndqPWZ1bmN0aW9uIERiZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gRWJlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciB4YWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzMzJywxODg0KTtiY2IoMTg4NSwxLG53ZSxGYmUpO18ud2o9ZnVuY3Rpb24gR2JlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBIYmUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIHlhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzQnLDE4ODUpO2JjYigxODg2LDEsbndlLEliZSk7Xy53aj1mdW5jdGlvbiBKYmUoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIEtiZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgemFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zNScsMTg4Nik7YmNiKDE4ODcsMSxud2UsTGJlKTtfLndqPWZ1bmN0aW9uIE1iZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gTmJlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBBYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM2JywxODg3KTtiY2IoMTg4OCwxLG53ZSxPYmUpO18ud2o9ZnVuY3Rpb24gUGJlKGEpe3JldHVybiBKRChhLDE1KX07Xy54aj1mdW5jdGlvbiBRYmUoYSl7cmV0dXJuIEtDKHlLLGVtZSwxNSxhLDAsMSl9O3ZhciBCYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM3JywxODg4KTtiY2IoMTg4OSwxLG53ZSxSYmUpO18ud2o9ZnVuY3Rpb24gU2JlKGEpe3JldHVybiBKRChhLDE1KX07Xy54aj1mdW5jdGlvbiBUYmUoYSl7cmV0dXJuIEtDKHlLLGVtZSwxNSxhLDAsMSl9O3ZhciBDYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM4JywxODg5KTtiY2IoMTg5MCwxLG53ZSxVYmUpO18ud2o9ZnVuY3Rpb24gVmJlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBXYmUoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIERhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzknLDE4OTApO2JjYigxODU1LDEsbndlLFhiZSk7Xy53aj1mdW5jdGlvbiBZYmUoYSl7cmV0dXJuIEpEKGEsNjY4KX07Xy54aj1mdW5jdGlvbiBaYmUoYSl7cmV0dXJuIEtDKFQ5LFVoZSwyMDIyLGEsMCwxKX07dmFyIFBhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNCcsMTg1NSk7YmNiKDE4OTEsMSxud2UsJGJlKTtfLndqPWZ1bmN0aW9uIF9iZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gYWNlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBGYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQwJywxODkxKTtiY2IoMTg5MiwxLG53ZSxiY2UpO18ud2o9ZnVuY3Rpb24gY2NlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBkY2UoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIEdhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDEnLDE4OTIpO2JjYigxODkzLDEsbndlLGVjZSk7Xy53aj1mdW5jdGlvbiBmY2UoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIGdjZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgSGFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80MicsMTg5Myk7YmNiKDE4OTQsMSxud2UsaGNlKTtfLndqPWZ1bmN0aW9uIGljZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gamNlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBJYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQzJywxODk0KTtiY2IoMTg5NSwxLG53ZSxrY2UpO18ud2o9ZnVuY3Rpb24gbGNlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiBtY2UoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIEphYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDQnLDE4OTUpO2JjYigxODk2LDEsbndlLG5jZSk7Xy53aj1mdW5jdGlvbiBvY2UoYSl7cmV0dXJuIEpEKGEsMTg0KX07Xy54aj1mdW5jdGlvbiBwY2UoYSl7cmV0dXJuIEtDKFVJLG5pZSwxODQsYSwwLDEpfTt2YXIgS2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80NScsMTg5Nik7YmNiKDE4OTcsMSxud2UscWNlKTtfLndqPWZ1bmN0aW9uIHJjZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gc2NlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBMYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQ2JywxODk3KTtiY2IoMTg5OCwxLG53ZSx0Y2UpO18ud2o9ZnVuY3Rpb24gdWNlKGEpe3JldHVybiBORChhKX07Xy54aj1mdW5jdGlvbiB2Y2UoYSl7cmV0dXJuIEtDKFpJLG5pZSwyLGEsNiwxKX07dmFyIE1hYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDcnLDE4OTgpO2JjYigxODk5LDEsbndlLHdjZSk7Xy53aj1mdW5jdGlvbiB4Y2UoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIHljZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgTmFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80OCcsMTg5OSk7YmNiKG5qZSwxLG53ZSx6Y2UpO18ud2o9ZnVuY3Rpb24gQWNlKGEpe3JldHVybiBKRChhLDE4NCl9O18ueGo9ZnVuY3Rpb24gQmNlKGEpe3JldHVybiBLQyhVSSxuaWUsMTg0LGEsMCwxKX07dmFyIE9hYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDknLG5qZSk7YmNiKDE4NTYsMSxud2UsQ2NlKTtfLndqPWZ1bmN0aW9uIERjZShhKXtyZXR1cm4gSkQoYSw2NjkpfTtfLnhqPWZ1bmN0aW9uIEVjZShhKXtyZXR1cm4gS0MoVTksVWhlLDIwMjMsYSwwLDEpfTt2YXIgVGFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC81JywxODU2KTtiY2IoMTkwMSwxLG53ZSxGY2UpO18ud2o9ZnVuY3Rpb24gR2NlKGEpe3JldHVybiBKRChhLDE2Mil9O18ueGo9ZnVuY3Rpb24gSGNlKGEpe3JldHVybiBLQyhNSSxuaWUsMTYyLGEsMCwxKX07dmFyIFFhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvNTAnLDE5MDEpO2JjYigxOTAyLDEsbndlLEljZSk7Xy53aj1mdW5jdGlvbiBKY2UoYSl7cmV0dXJuIE5EKGEpfTtfLnhqPWZ1bmN0aW9uIEtjZShhKXtyZXR1cm4gS0MoWkksbmllLDIsYSw2LDEpfTt2YXIgUmFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC81MScsMTkwMik7YmNiKDE5MDMsMSxud2UsTGNlKTtfLndqPWZ1bmN0aW9uIE1jZShhKXtyZXR1cm4gSkQoYSwxOSl9O18ueGo9ZnVuY3Rpb24gTmNlKGEpe3JldHVybiBLQyhKSSxuaWUsMTksYSwwLDEpfTt2YXIgU2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC81MicsMTkwMyk7YmNiKDE4NTcsMSxud2UsT2NlKTtfLndqPWZ1bmN0aW9uIFBjZShhKXtyZXR1cm4gTkQoYSl9O18ueGo9ZnVuY3Rpb24gUWNlKGEpe3JldHVybiBLQyhaSSxuaWUsMixhLDYsMSl9O3ZhciBVYWI9bWRiKE13ZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzYnLDE4NTcpO2JjYigxODU4LDEsbndlLFJjZSk7Xy53aj1mdW5jdGlvbiBTY2UoYSl7cmV0dXJuIEpEKGEsMTkwKX07Xy54aj1mdW5jdGlvbiBUY2UoYSl7cmV0dXJuIEtDKFNELG5pZSwxOTAsYSwwLDIpfTt2YXIgVmFiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC83JywxODU4KTtiY2IoMTg1OSwxLG53ZSxVY2UpO18ud2o9ZnVuY3Rpb24gVmNlKGEpe3JldHVybiBLRChhKX07Xy54aj1mdW5jdGlvbiBXY2UoYSl7cmV0dXJuIEtDKHdJLG5pZSw0NzYsYSw4LDEpfTt2YXIgV2FiPW1kYihNd2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC84JywxODU5KTtiY2IoMTg2MCwxLG53ZSxYY2UpO18ud2o9ZnVuY3Rpb24gWWNlKGEpe3JldHVybiBKRChhLDIxNyl9O18ueGo9ZnVuY3Rpb24gWmNlKGEpe3JldHVybiBLQyh4SSxuaWUsMjE3LGEsMCwxKX07dmFyIFhhYj1tZGIoTXdlLCdYTUxUeXBlUGFja2FnZUltcGwvOScsMTg2MCk7dmFyICRjZSxfY2U7dmFyIGZkZSxnZGU7dmFyIGtkZTtiY2IoNTAsNjAsVGllLG1kZSk7dmFyIFphYj1tZGIoa3hlLCdSZWdFeC9QYXJzZUV4Y2VwdGlvbicsNTApO2JjYig4MjAsMSx7fSx1ZGUpO18uc2w9ZnVuY3Rpb24gdmRlKGEpe3JldHVybiBhPHRoaXMuaiYmYmZiKHRoaXMuaSxhKT09NjN9O18udGw9ZnVuY3Rpb24gd2RlKCl7dmFyIGEsYixjLGQsZTtpZih0aGlzLmMhPTEwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksdXVlKSkpKTthPXRoaXMuYTtzd2l0Y2goYSl7Y2FzZSAxMDE6YT0yNzticmVhaztjYXNlIDEwMjphPTEyO2JyZWFrO2Nhc2UgMTEwOmE9MTA7YnJlYWs7Y2FzZSAxMTQ6YT0xMzticmVhaztjYXNlIDExNjphPTk7YnJlYWs7Y2FzZSAxMjA6bmRlKHRoaXMpO2lmKHRoaXMuYyE9MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFR1ZSkpKSk7aWYodGhpcy5hPT0xMjMpe2U9MDtjPTA7ZG97bmRlKHRoaXMpO2lmKHRoaXMuYyE9MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFR1ZSkpKSk7aWYoKGU9eWRlKHRoaXMuYSkpPDApYnJlYWs7aWYoYz5jKjE2KXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksVXVlKSkpKTtjPWMqMTYrZX13aGlsZSh0cnVlKTtpZih0aGlzLmEhPTEyNSl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFZ1ZSkpKSk7aWYoYz5seGUpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxXdWUpKSkpO2E9Y31lbHNle2U9MDtpZih0aGlzLmMhPTB8fChlPXlkZSh0aGlzLmEpKTwwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksVHVlKSkpKTtjPWU7bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGU9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2M9YyoxNitlO2E9Y31icmVhaztjYXNlIDExNzpkPTA7bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2I9ZDtuZGUodGhpcyk7aWYodGhpcy5jIT0wfHwoZD15ZGUodGhpcy5hKSk8MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFR1ZSkpKSk7Yj1iKjE2K2Q7bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2I9YioxNitkO25kZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXlkZSh0aGlzLmEpKTwwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksVHVlKSkpKTtiPWIqMTYrZDthPWI7YnJlYWs7Y2FzZSAxMTg6bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2I9ZDtuZGUodGhpcyk7aWYodGhpcy5jIT0wfHwoZD15ZGUodGhpcy5hKSk8MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFR1ZSkpKSk7Yj1iKjE2K2Q7bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2I9YioxNitkO25kZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXlkZSh0aGlzLmEpKTwwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksVHVlKSkpKTtiPWIqMTYrZDtuZGUodGhpcyk7aWYodGhpcy5jIT0wfHwoZD15ZGUodGhpcy5hKSk8MCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFR1ZSkpKSk7Yj1iKjE2K2Q7bmRlKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9eWRlKHRoaXMuYSkpPDApdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxUdWUpKSkpO2I9YioxNitkO2lmKGI+bHhlKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksJ3BhcnNlci5kZXNjYXBwZS40JykpKSk7YT1iO2JyZWFrO2Nhc2UgNjU6Y2FzZSA5MDpjYXNlIDEyMjp0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFh1ZSkpKSk7fXJldHVybiBhfTtfLnVsPWZ1bmN0aW9uIHhkZShhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDEwMDpjPSh0aGlzLmUmMzIpPT0zMj9LZmUoJ05kJyx0cnVlKTood2ZlKCksY2ZlKTticmVhaztjYXNlIDY4OmM9KHRoaXMuZSYzMik9PTMyP0tmZSgnTmQnLGZhbHNlKTood2ZlKCksamZlKTticmVhaztjYXNlIDExOTpjPSh0aGlzLmUmMzIpPT0zMj9LZmUoJ0lzV29yZCcsdHJ1ZSk6KHdmZSgpLHNmZSk7YnJlYWs7Y2FzZSA4NzpjPSh0aGlzLmUmMzIpPT0zMj9LZmUoJ0lzV29yZCcsZmFsc2UpOih3ZmUoKSxsZmUpO2JyZWFrO2Nhc2UgMTE1OmM9KHRoaXMuZSYzMik9PTMyP0tmZSgnSXNTcGFjZScsdHJ1ZSk6KHdmZSgpLG5mZSk7YnJlYWs7Y2FzZSA4MzpjPSh0aGlzLmUmMzIpPT0zMj9LZmUoJ0lzU3BhY2UnLGZhbHNlKTood2ZlKCksa2ZlKTticmVhaztkZWZhdWx0OnRocm93IHZiYihuZXcgaHooKGI9YSxteGUrYi50b1N0cmluZygxNikpKSk7fXJldHVybiBjfTtfLnZsPWZ1bmN0aW9uIHpkZShhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07dGhpcy5iPTE7bmRlKHRoaXMpO2I9bnVsbDtpZih0aGlzLmM9PTAmJnRoaXMuYT09OTQpe25kZSh0aGlzKTtpZihhKXtrPSh3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgJGZlKDUpKX1lbHNle2I9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyAkZmUoNCkpO1VmZShiLDAsbHhlKTtrPShudWxsLCsrdmZlLG5ldyAkZmUoNCkpfX1lbHNle2s9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyAkZmUoNCkpfWU9dHJ1ZTt3aGlsZSgobT10aGlzLmMpIT0xKXtpZihtPT0wJiZ0aGlzLmE9PTkzJiYhZSlicmVhaztlPWZhbHNlO2M9dGhpcy5hO2Q9ZmFsc2U7aWYobT09MTApe3N3aXRjaChjKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpYZmUoayx0aGlzLnVsKGMpKTtkPXRydWU7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6Yz10aGlzLkxsKGssYyk7YzwwJiYoZD10cnVlKTticmVhaztjYXNlIDExMjpjYXNlIDgwOmw9dGRlKHRoaXMsYyk7aWYoIWwpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxJdWUpKSkpO1hmZShrLGwpO2Q9dHJ1ZTticmVhaztkZWZhdWx0OmM9dGhpcy50bCgpO319ZWxzZSBpZihtPT0yMCl7Zz1nZmIodGhpcy5pLDU4LHRoaXMuZCk7aWYoZzwwKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksSnVlKSkpKTtoPXRydWU7aWYoYmZiKHRoaXMuaSx0aGlzLmQpPT05NCl7Kyt0aGlzLmQ7aD1mYWxzZX1mPXFmYih0aGlzLmksdGhpcy5kLGcpO2k9TGZlKGYsaCwodGhpcy5lJjUxMik9PTUxMik7aWYoIWkpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxMdWUpKSkpO1hmZShrLGkpO2Q9dHJ1ZTtpZihnKzE+PXRoaXMuanx8YmZiKHRoaXMuaSxnKzEpIT05Myl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEp1ZSkpKSk7dGhpcy5kPWcrMn1uZGUodGhpcyk7aWYoIWQpe2lmKHRoaXMuYyE9MHx8dGhpcy5hIT00NSl7VWZlKGssYyxjKX1lbHNle25kZSh0aGlzKTtpZigobT10aGlzLmMpPT0xKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksS3VlKSkpKTtpZihtPT0wJiZ0aGlzLmE9PTkzKXtVZmUoayxjLGMpO1VmZShrLDQ1LDQ1KX1lbHNle2o9dGhpcy5hO209PTEwJiYoaj10aGlzLnRsKCkpO25kZSh0aGlzKTtVZmUoayxjLGopfX19KHRoaXMuZSZ6dGUpPT16dGUmJnRoaXMuYz09MCYmdGhpcy5hPT00NCYmbmRlKHRoaXMpfWlmKHRoaXMuYz09MSl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEt1ZSkpKSk7aWYoYil7WmZlKGIsayk7az1ifVlmZShrKTtWZmUoayk7dGhpcy5iPTA7bmRlKHRoaXMpO3JldHVybiBrfTtfLndsPWZ1bmN0aW9uIEFkZSgpe3ZhciBhLGIsYyxkO2M9dGhpcy52bChmYWxzZSk7d2hpbGUoKGQ9dGhpcy5jKSE9Nyl7YT10aGlzLmE7aWYoZD09MCYmKGE9PTQ1fHxhPT0zOCl8fGQ9PTQpe25kZSh0aGlzKTtpZih0aGlzLmMhPTkpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxRdWUpKSkpO2I9dGhpcy52bChmYWxzZSk7aWYoZD09NClYZmUoYyxiKTtlbHNlIGlmKGE9PTQ1KVpmZShjLGIpO2Vsc2UgaWYoYT09MzgpV2ZlKGMsYik7ZWxzZSB0aHJvdyB2YmIobmV3IGh6KCdBU1NFUlQnKSl9ZWxzZXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFJ1ZSkpKSl9fW5kZSh0aGlzKTtyZXR1cm4gY307Xy54bD1mdW5jdGlvbiBCZGUoKXt2YXIgYSxiO2E9dGhpcy5hLTQ4O2I9KHdmZSgpLHdmZSgpLCsrdmZlLG5ldyBIZ2UoMTIsbnVsbCxhKSk7IXRoaXMuZyYmKHRoaXMuZz1uZXcgV3ZiKTtUdmIodGhpcy5nLG5ldyBjZ2UoYSkpO25kZSh0aGlzKTtyZXR1cm4gYn07Xy55bD1mdW5jdGlvbiBDZGUoKXtuZGUodGhpcyk7cmV0dXJuIHdmZSgpLG9mZX07Xy56bD1mdW5jdGlvbiBEZGUoKXtuZGUodGhpcyk7cmV0dXJuIHdmZSgpLG1mZX07Xy5BbD1mdW5jdGlvbiBFZGUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18uQmw9ZnVuY3Rpb24gRmRlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLkNsPWZ1bmN0aW9uIEdkZSgpe25kZSh0aGlzKTtyZXR1cm4gSWZlKCl9O18uRGw9ZnVuY3Rpb24gSGRlKCl7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSxxZmV9O18uRWw9ZnVuY3Rpb24gSWRlKCl7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSx0ZmV9O18uRmw9ZnVuY3Rpb24gSmRlKCl7dmFyIGE7aWYodGhpcy5kPj10aGlzLmp8fCgoYT1iZmIodGhpcy5pLHRoaXMuZCsrKSkmNjU1MDQpIT02NCl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEV1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgaWdlKDAsYS02NCl9O18uR2w9ZnVuY3Rpb24gS2RlKCl7bmRlKHRoaXMpO3JldHVybiBKZmUoKX07Xy5IbD1mdW5jdGlvbiBMZGUoKXtuZGUodGhpcyk7cmV0dXJuIHdmZSgpLHVmZX07Xy5JbD1mdW5jdGlvbiBNZGUoKXt2YXIgYTthPSh3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgaWdlKDAsMTA1KSk7bmRlKHRoaXMpO3JldHVybiBhfTtfLkpsPWZ1bmN0aW9uIE5kZSgpe25kZSh0aGlzKTtyZXR1cm4gd2ZlKCkscmZlfTtfLktsPWZ1bmN0aW9uIE9kZSgpe25kZSh0aGlzKTtyZXR1cm4gd2ZlKCkscGZlfTtfLkxsPWZ1bmN0aW9uIFBkZShhLGIpe3JldHVybiB0aGlzLnRsKCl9O18uTWw9ZnVuY3Rpb24gUWRlKCl7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSxoZmV9O18uTmw9ZnVuY3Rpb24gUmRlKCl7dmFyIGEsYixjLGQsZTtpZih0aGlzLmQrMT49dGhpcy5qKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksQnVlKSkpKTtkPS0xO2I9bnVsbDthPWJmYih0aGlzLmksdGhpcy5kKTtpZig0OTw9YSYmYTw9NTcpe2Q9YS00ODshdGhpcy5nJiYodGhpcy5nPW5ldyBXdmIpO1R2Yih0aGlzLmcsbmV3IGNnZShkKSk7Kyt0aGlzLmQ7aWYoYmZiKHRoaXMuaSx0aGlzLmQpIT00MSl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7Kyt0aGlzLmR9ZWxzZXthPT02MyYmLS10aGlzLmQ7bmRlKHRoaXMpO2I9cWRlKHRoaXMpO3N3aXRjaChiLmUpe2Nhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6YnJlYWs7Y2FzZSA4OmlmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEN1ZSkpKSk7fX1uZGUodGhpcyk7ZT1yZGUodGhpcyk7Yz1udWxsO2lmKGUuZT09Mil7aWYoZS5lbSgpIT0yKXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksRHVlKSkpKTtjPWUuYW0oMSk7ZT1lLmFtKDApfWlmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgdmdlKGQsYixlLGMpfTtfLk9sPWZ1bmN0aW9uIFNkZSgpe25kZSh0aGlzKTtyZXR1cm4gd2ZlKCksaWZlfTtfLlBsPWZ1bmN0aW9uIFRkZSgpe3ZhciBhO25kZSh0aGlzKTthPUNmZSgyNCxyZGUodGhpcykpO2lmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiBhfTtfLlFsPWZ1bmN0aW9uIFVkZSgpe3ZhciBhO25kZSh0aGlzKTthPUNmZSgyMCxyZGUodGhpcykpO2lmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiBhfTtfLlJsPWZ1bmN0aW9uIFZkZSgpe3ZhciBhO25kZSh0aGlzKTthPUNmZSgyMixyZGUodGhpcykpO2lmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiBhfTtfLlNsPWZ1bmN0aW9uIFdkZSgpe3ZhciBhLGIsYyxkLGU7YT0wO2M9MDtiPS0xO3doaWxlKHRoaXMuZDx0aGlzLmope2I9YmZiKHRoaXMuaSx0aGlzLmQpO2U9VWVlKGIpO2lmKGU9PTApYnJlYWs7YXw9ZTsrK3RoaXMuZH1pZih0aGlzLmQ+PXRoaXMuail0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHp1ZSkpKSk7aWYoYj09NDUpeysrdGhpcy5kO3doaWxlKHRoaXMuZDx0aGlzLmope2I9YmZiKHRoaXMuaSx0aGlzLmQpO2U9VWVlKGIpO2lmKGU9PTApYnJlYWs7Y3w9ZTsrK3RoaXMuZH1pZih0aGlzLmQ+PXRoaXMuail0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHp1ZSkpKSl9aWYoYj09NTgpeysrdGhpcy5kO25kZSh0aGlzKTtkPURmZShyZGUodGhpcyksYSxjKTtpZih0aGlzLmMhPTcpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx5dWUpKSkpO25kZSh0aGlzKX1lbHNlIGlmKGI9PTQxKXsrK3RoaXMuZDtuZGUodGhpcyk7ZD1EZmUocmRlKHRoaXMpLGEsYyl9ZWxzZSB0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLEF1ZSkpKSk7cmV0dXJuIGR9O18uVGw9ZnVuY3Rpb24gWGRlKCl7dmFyIGE7bmRlKHRoaXMpO2E9Q2ZlKDIxLHJkZSh0aGlzKSk7aWYodGhpcy5jIT03KXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCkseXVlKSkpKTtuZGUodGhpcyk7cmV0dXJuIGF9O18uVWw9ZnVuY3Rpb24gWWRlKCl7dmFyIGE7bmRlKHRoaXMpO2E9Q2ZlKDIzLHJkZSh0aGlzKSk7aWYodGhpcy5jIT03KXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCkseXVlKSkpKTtuZGUodGhpcyk7cmV0dXJuIGF9O18uVmw9ZnVuY3Rpb24gWmRlKCl7dmFyIGEsYjtuZGUodGhpcyk7YT10aGlzLmYrKztiPUVmZShyZGUodGhpcyksYSk7aWYodGhpcy5jIT03KXRocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCkseXVlKSkpKTtuZGUodGhpcyk7cmV0dXJuIGJ9O18uV2w9ZnVuY3Rpb24gJGRlKCl7dmFyIGE7bmRlKHRoaXMpO2E9RWZlKHJkZSh0aGlzKSwwKTtpZih0aGlzLmMhPTcpdGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSx5dWUpKSkpO25kZSh0aGlzKTtyZXR1cm4gYX07Xy5YbD1mdW5jdGlvbiBfZGUoYSl7bmRlKHRoaXMpO2lmKHRoaXMuYz09NSl7bmRlKHRoaXMpO3JldHVybiBCZmUoYSwod2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGxnZSg5LGEpKSl9ZWxzZSByZXR1cm4gQmZlKGEsKHdmZSgpLHdmZSgpLCsrdmZlLG5ldyBsZ2UoMyxhKSkpfTtfLllsPWZ1bmN0aW9uIGFlZShhKXt2YXIgYjtuZGUodGhpcyk7Yj0od2ZlKCksd2ZlKCksKyt2ZmUsbmV3IExnZSgyKSk7aWYodGhpcy5jPT01KXtuZGUodGhpcyk7S2dlKGIsKG51bGwsZmZlKSk7S2dlKGIsYSl9ZWxzZXtLZ2UoYixhKTtLZ2UoYiwobnVsbCxmZmUpKX1yZXR1cm4gYn07Xy5abD1mdW5jdGlvbiBiZWUoYSl7bmRlKHRoaXMpO2lmKHRoaXMuYz09NSl7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgbGdlKDksYSl9ZWxzZSByZXR1cm4gd2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGxnZSgzLGEpfTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDtfLmY9MTtfLmc9bnVsbDtfLmo9MDt2YXIgYmJiPW1kYihreGUsJ1JlZ0V4L1JlZ2V4UGFyc2VyJyw4MjApO2JjYigxODI0LDgyMCx7fSxoZWUpO18uc2w9ZnVuY3Rpb24gaWVlKGEpe3JldHVybiBmYWxzZX07Xy50bD1mdW5jdGlvbiBqZWUoKXtyZXR1cm4gZWVlKHRoaXMpfTtfLnVsPWZ1bmN0aW9uIGxlZShhKXtyZXR1cm4gZmVlKGEpfTtfLnZsPWZ1bmN0aW9uIG1lZShhKXtyZXR1cm4gZ2VlKHRoaXMpfTtfLndsPWZ1bmN0aW9uIG5lZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy54bD1mdW5jdGlvbiBvZWUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18ueWw9ZnVuY3Rpb24gcGVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLnpsPWZ1bmN0aW9uIHFlZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5BbD1mdW5jdGlvbiByZWUoKXtuZGUodGhpcyk7cmV0dXJuIGZlZSg2Nyl9O18uQmw9ZnVuY3Rpb24gc2VlKCl7bmRlKHRoaXMpO3JldHVybiBmZWUoNzMpfTtfLkNsPWZ1bmN0aW9uIHRlZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5EbD1mdW5jdGlvbiB1ZWUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18uRWw9ZnVuY3Rpb24gdmVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLkZsPWZ1bmN0aW9uIHdlZSgpe25kZSh0aGlzKTtyZXR1cm4gZmVlKDk5KX07Xy5HbD1mdW5jdGlvbiB4ZWUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18uSGw9ZnVuY3Rpb24geWVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLklsPWZ1bmN0aW9uIHplZSgpe25kZSh0aGlzKTtyZXR1cm4gZmVlKDEwNSl9O18uSmw9ZnVuY3Rpb24gQWVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLktsPWZ1bmN0aW9uIEJlZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5MbD1mdW5jdGlvbiBDZWUoYSxiKXtyZXR1cm4gWGZlKGEsZmVlKGIpKSwtMX07Xy5NbD1mdW5jdGlvbiBEZWUoKXtuZGUodGhpcyk7cmV0dXJuIHdmZSgpLHdmZSgpLCsrdmZlLG5ldyBpZ2UoMCw5NCl9O18uTmw9ZnVuY3Rpb24gRWVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLk9sPWZ1bmN0aW9uIEZlZSgpe25kZSh0aGlzKTtyZXR1cm4gd2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGlnZSgwLDM2KX07Xy5QbD1mdW5jdGlvbiBHZWUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18uUWw9ZnVuY3Rpb24gSGVlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLlJsPWZ1bmN0aW9uIEllZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5TbD1mdW5jdGlvbiBKZWUoKXt0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLFl1ZSkpKSl9O18uVGw9ZnVuY3Rpb24gS2VlKCl7dGhyb3cgdmJiKG5ldyBtZGUodHZkKChoMGQoKSxZdWUpKSkpfTtfLlVsPWZ1bmN0aW9uIExlZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5WbD1mdW5jdGlvbiBNZWUoKXt2YXIgYTtuZGUodGhpcyk7YT1FZmUocmRlKHRoaXMpLDApO2lmKHRoaXMuYyE9Nyl0aHJvdyB2YmIobmV3IG1kZSh0dmQoKGgwZCgpLHl1ZSkpKSk7bmRlKHRoaXMpO3JldHVybiBhfTtfLldsPWZ1bmN0aW9uIE5lZSgpe3Rocm93IHZiYihuZXcgbWRlKHR2ZCgoaDBkKCksWXVlKSkpKX07Xy5YbD1mdW5jdGlvbiBPZWUoYSl7bmRlKHRoaXMpO3JldHVybiBCZmUoYSwod2ZlKCksd2ZlKCksKyt2ZmUsbmV3IGxnZSgzLGEpKSl9O18uWWw9ZnVuY3Rpb24gUGVlKGEpe3ZhciBiO25kZSh0aGlzKTtiPSh3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgTGdlKDIpKTtLZ2UoYixhKTtLZ2UoYiwobnVsbCxmZmUpKTtyZXR1cm4gYn07Xy5abD1mdW5jdGlvbiBRZWUoYSl7bmRlKHRoaXMpO3JldHVybiB3ZmUoKSx3ZmUoKSwrK3ZmZSxuZXcgbGdlKDMsYSl9O3ZhciBjZWU9bnVsbCxkZWU9bnVsbDt2YXIgJGFiPW1kYihreGUsJ1JlZ0V4L1BhcnNlckZvclhNTFNjaGVtYScsMTgyNCk7YmNiKDExNywxLHl4ZSx4ZmUpO18uJGw9ZnVuY3Rpb24geWZlKGEpe3Rocm93IHZiYihuZXcgaHooJ05vdCBzdXBwb3J0ZWQuJykpfTtfLl9sPWZ1bmN0aW9uIEdmZSgpe3JldHVybiAtMX07Xy5hbT1mdW5jdGlvbiBIZmUoYSl7cmV0dXJuIG51bGx9O18uYm09ZnVuY3Rpb24gTWZlKCl7cmV0dXJuIG51bGx9O18uY209ZnVuY3Rpb24gUGZlKGEpe307Xy5kbT1mdW5jdGlvbiBRZmUoYSl7fTtfLmVtPWZ1bmN0aW9uIFJmZSgpe3JldHVybiAwfTtfLkliPWZ1bmN0aW9uIFNmZSgpe3JldHVybiB0aGlzLmZtKDApfTtfLmZtPWZ1bmN0aW9uIFRmZShhKXtyZXR1cm4gdGhpcy5lPT0xMT8nLic6Jyd9O18uZT0wO3ZhciBZZWUsWmVlLCRlZSxfZWUsYWZlLGJmZT1udWxsLGNmZSxkZmU9bnVsbCxlZmUsZmZlLGdmZT1udWxsLGhmZSxpZmUsamZlLGtmZSxsZmUsbWZlLG5mZSxvZmUscGZlLHFmZSxyZmUsc2ZlLHRmZSx1ZmUsdmZlPTA7dmFyIGxiYj1tZGIoa3hlLCdSZWdFeC9Ub2tlbicsMTE3KTtiY2IoMTM2LDExNyx7MzoxLDEzNjoxLDExNzoxfSwkZmUpO18uZm09ZnVuY3Rpb24gYmdlKGEpe3ZhciBiLGMsZDtpZih0aGlzLmU9PTQpe2lmKHRoaXM9PWVmZSljPScuJztlbHNlIGlmKHRoaXM9PWNmZSljPSdcXFxcZCc7ZWxzZSBpZih0aGlzPT1zZmUpYz0nXFxcXHcnO2Vsc2UgaWYodGhpcz09bmZlKWM9J1xcXFxzJztlbHNle2Q9bmV3IEhmYjtkLmErPSdbJztmb3IoYj0wO2I8dGhpcy5iLmxlbmd0aDtiKz0yKXsoYSZ6dGUpIT0wJiZiPjAmJihkLmErPScsJyxkKTtpZih0aGlzLmJbYl09PT10aGlzLmJbYisxXSl7RWZiKGQsYWdlKHRoaXMuYltiXSkpfWVsc2V7RWZiKGQsYWdlKHRoaXMuYltiXSkpO2QuYSs9Jy0nO0VmYihkLGFnZSh0aGlzLmJbYisxXSkpfX1kLmErPSddJztjPWQuYX19ZWxzZXtpZih0aGlzPT1qZmUpYz0nXFxcXEQnO2Vsc2UgaWYodGhpcz09bGZlKWM9J1xcXFxXJztlbHNlIGlmKHRoaXM9PWtmZSljPSdcXFxcUyc7ZWxzZXtkPW5ldyBIZmI7ZC5hKz0nW14nO2ZvcihiPTA7Yjx0aGlzLmIubGVuZ3RoO2IrPTIpeyhhJnp0ZSkhPTAmJmI+MCYmKGQuYSs9JywnLGQpO2lmKHRoaXMuYltiXT09PXRoaXMuYltiKzFdKXtFZmIoZCxhZ2UodGhpcy5iW2JdKSl9ZWxzZXtFZmIoZCxhZ2UodGhpcy5iW2JdKSk7ZC5hKz0nLSc7RWZiKGQsYWdlKHRoaXMuYltiKzFdKSl9fWQuYSs9J10nO2M9ZC5hfX1yZXR1cm4gY307Xy5hPWZhbHNlO18uYz1mYWxzZTt2YXIgX2FiPW1kYihreGUsJ1JlZ0V4L1JhbmdlVG9rZW4nLDEzNik7YmNiKDU4NCwxLHs1ODQ6MX0sY2dlKTtfLmE9MDt2YXIgYWJiPW1kYihreGUsJ1JlZ0V4L1JlZ2V4UGFyc2VyL1JlZmVyZW5jZVBvc2l0aW9uJyw1ODQpO2JjYig1ODMsMSx7MzoxLDU4MzoxfSxlZ2UpO18uRmI9ZnVuY3Rpb24gZmdlKGEpe3ZhciBiO2lmKGE9PW51bGwpcmV0dXJuIGZhbHNlO2lmKCFKRChhLDU4MykpcmV0dXJuIGZhbHNlO2I9QkQoYSw1ODMpO3JldHVybiBkZmIodGhpcy5iLGIuYikmJnRoaXMuYT09Yi5hfTtfLkhiPWZ1bmN0aW9uIGdnZSgpe3JldHVybiBMQ2IodGhpcy5iKycvJytTZWUodGhpcy5hKSl9O18uSWI9ZnVuY3Rpb24gaGdlKCl7cmV0dXJuIHRoaXMuYy5mbSh0aGlzLmEpfTtfLmE9MDt2YXIgY2JiPW1kYihreGUsJ1JlZ0V4L1JlZ3VsYXJFeHByZXNzaW9uJyw1ODMpO2JjYigyMjMsMTE3LHl4ZSxpZ2UpO18uX2w9ZnVuY3Rpb24gamdlKCl7cmV0dXJuIHRoaXMuYX07Xy5mbT1mdW5jdGlvbiBrZ2UoYSl7dmFyIGIsYyxkO3N3aXRjaCh0aGlzLmUpe2Nhc2UgMDpzd2l0Y2godGhpcy5hKXtjYXNlIDEyNDpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA2MzpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDkxOmNhc2UgMTIzOmNhc2UgOTI6ZD0nXFxcXCcrSEQodGhpcy5hJmFqZSk7YnJlYWs7Y2FzZSAxMjpkPSdcXFxcZic7YnJlYWs7Y2FzZSAxMDpkPSdcXFxcbic7YnJlYWs7Y2FzZSAxMzpkPSdcXFxccic7YnJlYWs7Y2FzZSA5OmQ9J1xcXFx0JzticmVhaztjYXNlIDI3OmQ9J1xcXFxlJzticmVhaztkZWZhdWx0OmlmKHRoaXMuYT49VGplKXtjPShiPXRoaXMuYT4+PjAsJzAnK2IudG9TdHJpbmcoMTYpKTtkPSdcXFxcdicrcWZiKGMsYy5sZW5ndGgtNixjLmxlbmd0aCl9ZWxzZSBkPScnK0hEKHRoaXMuYSZhamUpO31icmVhaztjYXNlIDg6dGhpcz09aGZlfHx0aGlzPT1pZmU/KGQ9JycrSEQodGhpcy5hJmFqZSkpOihkPSdcXFxcJytIRCh0aGlzLmEmYWplKSk7YnJlYWs7ZGVmYXVsdDpkPW51bGw7fXJldHVybiBkfTtfLmE9MDt2YXIgZGJiPW1kYihreGUsJ1JlZ0V4L1Rva2VuL0NoYXJUb2tlbicsMjIzKTtiY2IoMzA5LDExNyx5eGUsbGdlKTtfLmFtPWZ1bmN0aW9uIG1nZShhKXtyZXR1cm4gdGhpcy5hfTtfLmNtPWZ1bmN0aW9uIG5nZShhKXt0aGlzLmI9YX07Xy5kbT1mdW5jdGlvbiBvZ2UoYSl7dGhpcy5jPWF9O18uZW09ZnVuY3Rpb24gcGdlKCl7cmV0dXJuIDF9O18uZm09ZnVuY3Rpb24gcWdlKGEpe3ZhciBiO2lmKHRoaXMuZT09Myl7aWYodGhpcy5jPDAmJnRoaXMuYjwwKXtiPXRoaXMuYS5mbShhKSsnKid9ZWxzZSBpZih0aGlzLmM9PXRoaXMuYil7Yj10aGlzLmEuZm0oYSkrJ3snK3RoaXMuYysnfSd9ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCl7Yj10aGlzLmEuZm0oYSkrJ3snK3RoaXMuYysnLCcrdGhpcy5iKyd9J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApe2I9dGhpcy5hLmZtKGEpKyd7Jyt0aGlzLmMrJyx9J31lbHNlIHRocm93IHZiYihuZXcgaHooJ1Rva2VuI3RvU3RyaW5nKCk6IENMT1NVUkUgJyt0aGlzLmMrU2hlK3RoaXMuYikpfWVsc2V7aWYodGhpcy5jPDAmJnRoaXMuYjwwKXtiPXRoaXMuYS5mbShhKSsnKj8nfWVsc2UgaWYodGhpcy5jPT10aGlzLmIpe2I9dGhpcy5hLmZtKGEpKyd7Jyt0aGlzLmMrJ30/J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKXtiPXRoaXMuYS5mbShhKSsneycrdGhpcy5jKycsJyt0aGlzLmIrJ30/J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApe2I9dGhpcy5hLmZtKGEpKyd7Jyt0aGlzLmMrJyx9Pyd9ZWxzZSB0aHJvdyB2YmIobmV3IGh6KCdUb2tlbiN0b1N0cmluZygpOiBOT05HUkVFRFlDTE9TVVJFICcrdGhpcy5jK1NoZSt0aGlzLmIpKX1yZXR1cm4gYn07Xy5iPTA7Xy5jPTA7dmFyIGViYj1tZGIoa3hlLCdSZWdFeC9Ub2tlbi9DbG9zdXJlVG9rZW4nLDMwOSk7YmNiKDgyMSwxMTcseXhlLHJnZSk7Xy5hbT1mdW5jdGlvbiBzZ2UoYSl7cmV0dXJuIGE9PTA/dGhpcy5hOnRoaXMuYn07Xy5lbT1mdW5jdGlvbiB0Z2UoKXtyZXR1cm4gMn07Xy5mbT1mdW5jdGlvbiB1Z2UoYSl7dmFyIGI7dGhpcy5iLmU9PTMmJnRoaXMuYi5hbSgwKT09dGhpcy5hPyhiPXRoaXMuYS5mbShhKSsnKycpOnRoaXMuYi5lPT05JiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT8oYj10aGlzLmEuZm0oYSkrJys/Jyk6KGI9dGhpcy5hLmZtKGEpKygnJyt0aGlzLmIuZm0oYSkpKTtyZXR1cm4gYn07dmFyIGZiYj1tZGIoa3hlLCdSZWdFeC9Ub2tlbi9Db25jYXRUb2tlbicsODIxKTtiY2IoMTgyMiwxMTcseXhlLHZnZSk7Xy5hbT1mdW5jdGlvbiB3Z2UoYSl7aWYoYT09MClyZXR1cm4gdGhpcy5kO2lmKGE9PTEpcmV0dXJuIHRoaXMuYjt0aHJvdyB2YmIobmV3IGh6KCdJbnRlcm5hbCBFcnJvcjogJythKSl9O18uZW09ZnVuY3Rpb24geGdlKCl7cmV0dXJuICF0aGlzLmI/MToyfTtfLmZtPWZ1bmN0aW9uIHlnZShhKXt2YXIgYjt0aGlzLmM+MD8oYj0nKD8oJyt0aGlzLmMrJyknKTp0aGlzLmEuZT09OD8oYj0nKD8oJyt0aGlzLmErJyknKTooYj0nKD8nK3RoaXMuYSk7IXRoaXMuYj8oYis9dGhpcy5kKycpJyk6KGIrPXRoaXMuZCsnfCcrdGhpcy5iKycpJyk7cmV0dXJuIGJ9O18uYz0wO3ZhciBnYmI9bWRiKGt4ZSwnUmVnRXgvVG9rZW4vQ29uZGl0aW9uVG9rZW4nLDE4MjIpO2JjYigxODIzLDExNyx5eGUsemdlKTtfLmFtPWZ1bmN0aW9uIEFnZShhKXtyZXR1cm4gdGhpcy5ifTtfLmVtPWZ1bmN0aW9uIEJnZSgpe3JldHVybiAxfTtfLmZtPWZ1bmN0aW9uIENnZShhKXtyZXR1cm4gJyg/JysodGhpcy5hPT0wPycnOlNlZSh0aGlzLmEpKSsodGhpcy5jPT0wPycnOlNlZSh0aGlzLmMpKSsnOicrdGhpcy5iLmZtKGEpKycpJ307Xy5hPTA7Xy5jPTA7dmFyIGhiYj1tZGIoa3hlLCdSZWdFeC9Ub2tlbi9Nb2RpZmllclRva2VuJywxODIzKTtiY2IoODIyLDExNyx5eGUsRGdlKTtfLmFtPWZ1bmN0aW9uIEVnZShhKXtyZXR1cm4gdGhpcy5hfTtfLmVtPWZ1bmN0aW9uIEZnZSgpe3JldHVybiAxfTtfLmZtPWZ1bmN0aW9uIEdnZShhKXt2YXIgYjtiPW51bGw7c3dpdGNoKHRoaXMuZSl7Y2FzZSA2OnRoaXMuYj09MD8oYj0nKD86Jyt0aGlzLmEuZm0oYSkrJyknKTooYj0nKCcrdGhpcy5hLmZtKGEpKycpJyk7YnJlYWs7Y2FzZSAyMDpiPScoPz0nK3RoaXMuYS5mbShhKSsnKSc7YnJlYWs7Y2FzZSAyMTpiPScoPyEnK3RoaXMuYS5mbShhKSsnKSc7YnJlYWs7Y2FzZSAyMjpiPScoPzw9Jyt0aGlzLmEuZm0oYSkrJyknO2JyZWFrO2Nhc2UgMjM6Yj0nKD88IScrdGhpcy5hLmZtKGEpKycpJzticmVhaztjYXNlIDI0OmI9Jyg/PicrdGhpcy5hLmZtKGEpKycpJzt9cmV0dXJuIGJ9O18uYj0wO3ZhciBpYmI9bWRiKGt4ZSwnUmVnRXgvVG9rZW4vUGFyZW5Ub2tlbicsODIyKTtiY2IoNTIxLDExNyx7MzoxLDExNzoxLDUyMToxfSxIZ2UpO18uYm09ZnVuY3Rpb24gSWdlKCl7cmV0dXJuIHRoaXMuYn07Xy5mbT1mdW5jdGlvbiBKZ2UoYSl7cmV0dXJuIHRoaXMuZT09MTI/J1xcXFwnK3RoaXMuYTpXZWUodGhpcy5iKX07Xy5hPTA7dmFyIGpiYj1tZGIoa3hlLCdSZWdFeC9Ub2tlbi9TdHJpbmdUb2tlbicsNTIxKTtiY2IoNDY1LDExNyx5eGUsTGdlKTtfLiRsPWZ1bmN0aW9uIE1nZShhKXtLZ2UodGhpcyxhKX07Xy5hbT1mdW5jdGlvbiBOZ2UoYSl7cmV0dXJuIEJEKFV2Yih0aGlzLmEsYSksMTE3KX07Xy5lbT1mdW5jdGlvbiBPZ2UoKXtyZXR1cm4gIXRoaXMuYT8wOnRoaXMuYS5hLmMubGVuZ3RofTtfLmZtPWZ1bmN0aW9uIFBnZShhKXt2YXIgYixjLGQsZSxmO2lmKHRoaXMuZT09MSl7aWYodGhpcy5hLmEuYy5sZW5ndGg9PTIpe2I9QkQoVXZiKHRoaXMuYSwwKSwxMTcpO2M9QkQoVXZiKHRoaXMuYSwxKSwxMTcpO2MuZT09MyYmYy5hbSgwKT09Yj8oZT1iLmZtKGEpKycrJyk6Yy5lPT05JiZjLmFtKDApPT1iPyhlPWIuZm0oYSkrJys/Jyk6KGU9Yi5mbShhKSsoJycrYy5mbShhKSkpfWVsc2V7Zj1uZXcgSGZiO2ZvcihkPTA7ZDx0aGlzLmEuYS5jLmxlbmd0aDtkKyspe0VmYihmLEJEKFV2Yih0aGlzLmEsZCksMTE3KS5mbShhKSl9ZT1mLmF9cmV0dXJuIGV9aWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJkJEKFV2Yih0aGlzLmEsMSksMTE3KS5lPT03KXtlPUJEKFV2Yih0aGlzLmEsMCksMTE3KS5mbShhKSsnPyd9ZWxzZSBpZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmQkQoVXZiKHRoaXMuYSwwKSwxMTcpLmU9PTcpe2U9QkQoVXZiKHRoaXMuYSwxKSwxMTcpLmZtKGEpKyc/Pyd9ZWxzZXtmPW5ldyBIZmI7RWZiKGYsQkQoVXZiKHRoaXMuYSwwKSwxMTcpLmZtKGEpKTtmb3IoZD0xO2Q8dGhpcy5hLmEuYy5sZW5ndGg7ZCsrKXtmLmErPSd8JztFZmIoZixCRChVdmIodGhpcy5hLGQpLDExNykuZm0oYSkpfWU9Zi5hfXJldHVybiBlfTt2YXIga2JiPW1kYihreGUsJ1JlZ0V4L1Rva2VuL1VuaW9uVG9rZW4nLDQ2NSk7YmNiKDUxOCwxLHs1OTI6MX0sUmdlKTtfLkliPWZ1bmN0aW9uIFNnZSgpe3JldHVybiB0aGlzLmEuYn07dmFyIG1iYj1tZGIoenhlLCdYTUxUeXBlVXRpbC9QYXR0ZXJuTWF0Y2hlckltcGwnLDUxOCk7YmNiKDE2MjIsMTM4MSx7fSxWZ2UpO3ZhciBUZ2U7dmFyIG5iYj1tZGIoenhlLCdYTUxUeXBlVmFsaWRhdG9yJywxNjIyKTtiY2IoMjY0LDEsdmllLFlnZSk7Xy5KYz1mdW5jdGlvbiBaZ2UoYSl7cmViKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gJGdlKCl7cmV0dXJuICh0aGlzLmItdGhpcy5hKSp0aGlzLmM8MD9XZ2U6bmV3IHNoZSh0aGlzKX07Xy5hPTA7Xy5iPTA7Xy5jPTA7dmFyIFdnZTt2YXIgcWJiPW1kYihCeGUsJ0V4Y2x1c2l2ZVJhbmdlJywyNjQpO2JjYigxMDY4LDEsamllLGRoZSk7Xy5SYj1mdW5jdGlvbiBlaGUoYSl7QkQoYSwxOSk7X2dlKCl9O18uTmI9ZnVuY3Rpb24gZmhlKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIGloZSgpe3JldHVybiBhaGUoKX07Xy5VYj1mdW5jdGlvbiBraGUoKXtyZXR1cm4gYmhlKCl9O18uV2I9ZnVuY3Rpb24gbmhlKGEpe0JEKGEsMTkpO2NoZSgpfTtfLk9iPWZ1bmN0aW9uIGdoZSgpe3JldHVybiBmYWxzZX07Xy5TYj1mdW5jdGlvbiBoaGUoKXtyZXR1cm4gZmFsc2V9O18uVGI9ZnVuY3Rpb24gamhlKCl7cmV0dXJuIC0xfTtfLlZiPWZ1bmN0aW9uIGxoZSgpe3JldHVybiAtMX07Xy5RYj1mdW5jdGlvbiBtaGUoKXt0aHJvdyB2YmIobmV3IGNnYihFeGUpKX07dmFyIG9iYj1tZGIoQnhlLCdFeGNsdXNpdmVSYW5nZS8xJywxMDY4KTtiY2IoMjU0LDEsamllLHNoZSk7Xy5SYj1mdW5jdGlvbiB0aGUoYSl7QkQoYSwxOSk7b2hlKCl9O18uTmI9ZnVuY3Rpb24gdWhlKGEpe1JyYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIHhoZSgpe3JldHVybiBwaGUodGhpcyl9O18uVWI9ZnVuY3Rpb24gemhlKCl7cmV0dXJuIHFoZSh0aGlzKX07Xy5XYj1mdW5jdGlvbiBDaGUoYSl7QkQoYSwxOSk7cmhlKCl9O18uT2I9ZnVuY3Rpb24gdmhlKCl7cmV0dXJuIHRoaXMuYy5jPDA/dGhpcy5hPj10aGlzLmMuYjp0aGlzLmE8PXRoaXMuYy5ifTtfLlNiPWZ1bmN0aW9uIHdoZSgpe3JldHVybiB0aGlzLmI+MH07Xy5UYj1mdW5jdGlvbiB5aGUoKXtyZXR1cm4gdGhpcy5ifTtfLlZiPWZ1bmN0aW9uIEFoZSgpe3JldHVybiB0aGlzLmItMX07Xy5RYj1mdW5jdGlvbiBCaGUoKXt0aHJvdyB2YmIobmV3IGNnYihFeGUpKX07Xy5hPTA7Xy5iPTA7dmFyIHBiYj1tZGIoQnhlLCdFeGNsdXNpdmVSYW5nZS9SYW5nZUl0ZXJhdG9yJywyNTQpO3ZhciBURD1wZGIoRnZlLCdDJyk7dmFyIFdEPXBkYihJdmUsJ0knKTt2YXIgc2JiPXBkYihLaGUsJ1onKTt2YXIgWEQ9cGRiKEp2ZSwnSicpO3ZhciBTRD1wZGIoRXZlLCdCJyk7dmFyIFVEPXBkYihHdmUsJ0QnKTt2YXIgVkQ9cGRiKEh2ZSwnRicpO3ZhciByYmI9cGRiKEt2ZSwnUycpO3ZhciBoMT1vZGIoJ29yZy5lY2xpcHNlLmVsay5jb3JlLmxhYmVscycsJ0lMYWJlbE1hbmFnZXInKTt2YXIgTzQ9b2RiKFR0ZSwnRGlhZ25vc3RpY0NoYWluJyk7dmFyIHU4PW9kYihwd2UsJ1Jlc291cmNlU2V0Jyk7dmFyIFY0PW1kYihUdGUsJ0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nLG51bGwpO3ZhciBJaGU9KEF6KCksRHopO3ZhciBnd3RPbkxvYWQ9Z3d0T25Mb2FkPVpiYjtYYmIoaGNiKTskYmIoJ3Blcm1Qcm9wcycsW1tbRnhlLEd4ZV0sW0h4ZSwnZ2Vja28xXzgnXV0sW1tGeGUsR3hlXSxbSHhlLCdpZTEwJ11dLFtbRnhlLEd4ZV0sW0h4ZSwnaWU4J11dLFtbRnhlLEd4ZV0sW0h4ZSwnaWU5J11dLFtbRnhlLEd4ZV0sW0h4ZSwnc2FmYXJpJ11dXSk7XG4vLyAtLS0tLS0tLS0tLS0tLSAgICBSVU4gR1dUIElOSVRJQUxJWkFUSU9OIENPREUgICAgLS0tLS0tLS0tLS0tLS0gXG5nd3RPbkxvYWQobnVsbCwgJ2VsaycsIG51bGwpO1xuXG59KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHt9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEtpZWwgVW5pdmVyc2l0eSBhbmQgb3RoZXJzLlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0XG4gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuXG4gKiBcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBFTEsgPSByZXF1aXJlKCcuL2Vsay1hcGkuanMnKS5kZWZhdWx0O1xuXG52YXIgRUxLTm9kZSA9IGZ1bmN0aW9uIChfRUxLKSB7XG4gIF9pbmhlcml0cyhFTEtOb2RlLCBfRUxLKTtcblxuICBmdW5jdGlvbiBFTEtOb2RlKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFTEtOb2RlKTtcblxuICAgIHZhciBvcHRpb25zQ2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcblxuICAgIHZhciB3b3JrZXJUaHJlYWRzRXhpc3QgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgcmVxdWlyZS5yZXNvbHZlKCd3ZWItd29ya2VyJyk7XG4gICAgICB3b3JrZXJUaHJlYWRzRXhpc3QgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAvLyB1c2VyIHJlcXVlc3RlZCBhIHdvcmtlclxuICAgIGlmIChvcHRpb25zLndvcmtlclVybCkge1xuICAgICAgaWYgKHdvcmtlclRocmVhZHNFeGlzdCkge1xuICAgICAgICB2YXIgV29ya2VyID0gcmVxdWlyZSgnd2ViLXdvcmtlcicpO1xuICAgICAgICBvcHRpb25zQ2xvbmUud29ya2VyRmFjdG9yeSA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFdvcmtlcih1cmwpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXZWIgd29ya2VyIHJlcXVlc3RlZCBidXQgXFwnd2ViLXdvcmtlclxcJyBwYWNrYWdlIG5vdCBpbnN0YWxsZWQuIFxcbkNvbnNpZGVyIGluc3RhbGxpbmcgdGhlIHBhY2thZ2Ugb3IgcGFzcyB5b3VyIG93biBcXCd3b3JrZXJGYWN0b3J5XFwnIHRvIEVMS1xcJ3MgY29uc3RydWN0b3IuXFxuLi4uIEZhbGxpbmcgYmFjayB0byBub24td2ViIHdvcmtlciB2ZXJzaW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVubGVzcyBubyBvdGhlciB3b3JrZXJGYWN0b3J5IGlzIHJlZ2lzdGVyZWQsIHVzZSB0aGUgZmFrZSB3b3JrZXJcbiAgICBpZiAoIW9wdGlvbnNDbG9uZS53b3JrZXJGYWN0b3J5KSB7XG4gICAgICB2YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL2Vsay13b3JrZXIubWluLmpzJyksXG4gICAgICAgICAgX1dvcmtlciA9IF9yZXF1aXJlLldvcmtlcjtcblxuICAgICAgb3B0aW9uc0Nsb25lLndvcmtlckZhY3RvcnkgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgX1dvcmtlcih1cmwpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEVMS05vZGUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihFTEtOb2RlKSkuY2FsbCh0aGlzLCBvcHRpb25zQ2xvbmUpKTtcbiAgfVxuXG4gIHJldHVybiBFTEtOb2RlO1xufShFTEspO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbm1vZHVsZS5leHBvcnRzID0gRUxLTm9kZTtcbkVMS05vZGUuZGVmYXVsdCA9IEVMS05vZGU7XG59LHtcIi4vZWxrLWFwaS5qc1wiOjEsXCIuL2Vsay13b3JrZXIubWluLmpzXCI6MixcIndlYi13b3JrZXJcIjo0fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gV29ya2VyO1xufSx7fV19LHt9LFszXSkoMylcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/elkjs/lib/elk.bundled.js\n"); /***/ }), /***/ "../../../node_modules/layout-base/layout-base.js": /*!********************************************************!*\ !*** ../../../node_modules/layout-base/layout-base.js ***! \********************************************************/ /***/ (function(module) { eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_543__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_543__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_543__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__nested_webpack_require_543__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_543__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_543__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_543__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_543__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_543__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __nested_webpack_require_4947__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __nested_webpack_require_4947__(2);\nvar IGeometry = __nested_webpack_require_4947__(8);\nvar IMath = __nested_webpack_require_4947__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __nested_webpack_require_8167__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __nested_webpack_require_8167__(2);\nvar Integer = __nested_webpack_require_8167__(10);\nvar RectangleD = __nested_webpack_require_8167__(13);\nvar LayoutConstants = __nested_webpack_require_8167__(0);\nvar RandomSeed = __nested_webpack_require_8167__(16);\nvar PointD = __nested_webpack_require_8167__(4);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n }\n\n if (this.labelHeight > height) {\n if (this.labelPos == \"center\") {\n this.rect.y -= (this.labelHeight - height) / 2;\n } else if (this.labelPos == \"top\") {\n this.rect.y -= this.labelHeight - height;\n }\n this.setHeight(this.labelHeight);\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __nested_webpack_require_17549__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __nested_webpack_require_17549__(2);\nvar Integer = __nested_webpack_require_17549__(10);\nvar LayoutConstants = __nested_webpack_require_17549__(0);\nvar LGraphManager = __nested_webpack_require_17549__(6);\nvar LNode = __nested_webpack_require_17549__(3);\nvar LEdge = __nested_webpack_require_17549__(1);\nvar RectangleD = __nested_webpack_require_17549__(13);\nvar Point = __nested_webpack_require_17549__(12);\nvar LinkedList = __nested_webpack_require_17549__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __nested_webpack_require_27617__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __nested_webpack_require_27617__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n return true;\n }\n }\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __nested_webpack_require_38707__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __nested_webpack_require_38707__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __nested_webpack_require_40298__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __nested_webpack_require_40298__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __nested_webpack_require_64072__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __nested_webpack_require_64072__(0);\nvar LGraphManager = __nested_webpack_require_64072__(6);\nvar LNode = __nested_webpack_require_64072__(3);\nvar LEdge = __nested_webpack_require_64072__(1);\nvar LGraph = __nested_webpack_require_64072__(5);\nvar PointD = __nested_webpack_require_64072__(4);\nvar Transform = __nested_webpack_require_64072__(17);\nvar Emitter = __nested_webpack_require_64072__(27);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __nested_webpack_require_81860__) {\n\n\"use strict\";\n\n\nvar PointD = __nested_webpack_require_81860__(4);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __nested_webpack_require_84747__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __nested_webpack_require_84747__(15);\nvar FDLayoutConstants = __nested_webpack_require_84747__(7);\nvar LayoutConstants = __nested_webpack_require_84747__(0);\nvar IGeometry = __nested_webpack_require_84747__(8);\nvar IMath = __nested_webpack_require_84747__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n edge.idealLength = this.idealEdgeLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = this.springConstant * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __nested_webpack_require_100902__) {\n\n\"use strict\";\n\n\nvar LEdge = __nested_webpack_require_100902__(1);\nvar FDLayoutConstants = __nested_webpack_require_100902__(7);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __nested_webpack_require_101387__) {\n\n\"use strict\";\n\n\nvar LNode = __nested_webpack_require_101387__(3);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __nested_webpack_require_103173__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __nested_webpack_require_103173__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __nested_webpack_require_103901__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __nested_webpack_require_103901__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __nested_webpack_require_105138__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __nested_webpack_require_105138__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __nested_webpack_require_115611__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __nested_webpack_require_115611__(18);\nlayoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7);\nlayoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19);\nlayoutBase.FDLayoutNode = __nested_webpack_require_115611__(20);\nlayoutBase.DimensionD = __nested_webpack_require_115611__(21);\nlayoutBase.HashMap = __nested_webpack_require_115611__(22);\nlayoutBase.HashSet = __nested_webpack_require_115611__(23);\nlayoutBase.IGeometry = __nested_webpack_require_115611__(8);\nlayoutBase.IMath = __nested_webpack_require_115611__(9);\nlayoutBase.Integer = __nested_webpack_require_115611__(10);\nlayoutBase.Point = __nested_webpack_require_115611__(12);\nlayoutBase.PointD = __nested_webpack_require_115611__(4);\nlayoutBase.RandomSeed = __nested_webpack_require_115611__(16);\nlayoutBase.RectangleD = __nested_webpack_require_115611__(13);\nlayoutBase.Transform = __nested_webpack_require_115611__(17);\nlayoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14);\nlayoutBase.Quicksort = __nested_webpack_require_115611__(24);\nlayoutBase.LinkedList = __nested_webpack_require_115611__(11);\nlayoutBase.LGraphObject = __nested_webpack_require_115611__(2);\nlayoutBase.LGraph = __nested_webpack_require_115611__(5);\nlayoutBase.LEdge = __nested_webpack_require_115611__(1);\nlayoutBase.LGraphManager = __nested_webpack_require_115611__(6);\nlayoutBase.LNode = __nested_webpack_require_115611__(3);\nlayoutBase.Layout = __nested_webpack_require_115611__(15);\nlayoutBase.LayoutConstants = __nested_webpack_require_115611__(0);\nlayoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xheW91dC1iYXNlL2xheW91dC1iYXNlLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsSUFBSSxJQUF5RDtBQUM3RDtBQUNBLE1BQU0sRUFLMkI7QUFDakMsQ0FBQztBQUNELHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4QkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsOEJBQW1CO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCO0FBQ0E7QUFDQSxVQUFVLDhCQUFtQix1QkFBdUI7QUFDcEQ7QUFDQTtBQUNBLFVBQVUsOEJBQW1CO0FBQzdCLGVBQWUsOEJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQSxvQ0FBb0MsNEJBQTRCO0FBQ2hFLDBDQUEwQztBQUMxQyxXQUFXLDhCQUFtQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQW1CLGtDQUFrQztBQUMvRDtBQUNBO0FBQ0EsVUFBVSw4QkFBbUI7QUFDN0I7QUFDQTtBQUNBLGlCQUFpQiw4QkFBbUIsQ0FBQyw4QkFBbUI7QUFDeEQsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsaUNBQWlDLGdDQUFtQjs7QUFFcEQ7OztBQUdBO0FBQ0EsWUFBWSxnQ0FBbUI7O0FBRS9CO0FBQ0EsV0FBVyxnQ0FBbUIsS0FBSztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsT0FBTztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsaUNBQWlDLGdDQUFtQjs7QUFFcEQ7OztBQUdBLHNCQUFzQixnQ0FBbUI7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsaUNBQWlDLGdDQUFtQjs7QUFFcEQ7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLGdDQUFtQjs7QUFFL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLEtBQUs7O0FBRS9CO0FBQ0E7QUFDQSwwQkFBMEIsS0FBSzs7QUFFL0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0osb0NBQW9DO0FBQ3BDLElBQUk7QUFDSiw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBLGlDQUFpQywyQ0FBMkMsZ0JBQWdCLGtCQUFrQixPQUFPLDJCQUEyQix3REFBd0QsZ0NBQWdDLHVEQUF1RCwrREFBK0QseURBQXlELHFFQUFxRSw2REFBNkQsd0JBQXdCOztBQUVqakIsa0RBQWtELDBDQUEwQzs7QUFFNUY7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNB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QW1CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLFdB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QUF3QixpQ0FBbUI7QUFDM0Msd0JBQXdCLGlDQUFtQjtBQUMzQyx1QkFBdUIsaUNBQW1CO0FBQzFDLCtCQUErQixpQ0FBbUI7QUFDbEQsdUJBQXVCLGlDQUFtQjtBQUMxQyx3QkFBd0IsaUNBQW1CO0FBQzNDLDBCQUEwQixpQ0FBbUI7QUFDN0Msb0JBQW9CLGlDQUFtQjtBQUN2QyxtQkFBbUIsaUNBQW1CO0FBQ3RDLDJCQUEyQixpQ0FBbUI7QUFDOUMsbUJBQW1CLGlDQUFtQjtBQUN0QyxvQkFBb0IsaUNBQW1CO0FBQ3ZDLDZCQUE2QixpQ0FBbUI7QUFDaEQsNkJBQTZCLGlDQUFtQjs7QUFFaEQ7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHNDQUFzQyxRQUFRO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMkJBQTJCO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbGF5b3V0LWJhc2UvbGF5b3V0LWJhc2UuanM/NjkzZCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJsYXlvdXRCYXNlXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImxheW91dEJhc2VcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIExheW91dENvbnN0YW50cygpIHt9XG5cbi8qKlxyXG4gKiBMYXlvdXQgUXVhbGl0eTogMDpkcmFmdCwgMTpkZWZhdWx0LCAyOnByb29mXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAxO1xuXG4vKipcclxuICogRGVmYXVsdCBwYXJhbWV0ZXJzXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQgPSB0cnVlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QgPSA1MDtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTID0gZmFsc2U7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBHZW5lcmFsIG90aGVyIGNvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qXHJcbiAqIE1hcmdpbnMgb2YgYSBncmFwaCB0byBiZSBhcHBsaWVkIG9uIGJvdWRpbmcgcmVjdGFuZ2xlIG9mIGl0cyBjb250ZW50cy4gV2VcclxuICogYXNzdW1lIG1hcmdpbnMgb24gYWxsIGZvdXIgc2lkZXMgdG8gYmUgdW5pZm9ybS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFQSF9NQVJHSU4gPSAxNTtcblxuLypcclxuICogV2hldGhlciB0byBjb25zaWRlciBsYWJlbHMgaW4gbm9kZSBkaW1lbnNpb25zIG9yIG5vdFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMgPSBmYWxzZTtcblxuLypcclxuICogRGVmYXVsdCBkaW1lbnNpb24gb2YgYSBub24tY29tcG91bmQgbm9kZS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBEZWZhdWx0IGRpbWVuc2lvbiBvZiBhIG5vbi1jb21wb3VuZCBub2RlLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9IQUxGX1NJWkUgPSBMYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSAvIDI7XG5cbi8qXHJcbiAqIEVtcHR5IGNvbXBvdW5kIG5vZGUgc2l6ZS4gV2hlbiBhIGNvbXBvdW5kIG5vZGUgaXMgZW1wdHksIGl0cyBib3RoXHJcbiAqIGRpbWVuc2lvbnMgc2hvdWxkIGJlIG9mIHRoaXMgdmFsdWUuXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBNaW5pbXVtIGxlbmd0aCB0aGF0IGFuIGVkZ2Ugc2hvdWxkIHRha2UgZHVyaW5nIGxheW91dFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5NSU5fRURHRV9MRU5HVEggPSAxO1xuXG4vKlxyXG4gKiBXb3JsZCBib3VuZGFyaWVzIHRoYXQgbGF5b3V0IG9wZXJhdGVzIG9uXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZID0gMTAwMDAwMDtcblxuLypcclxuICogV29ybGQgYm91bmRhcmllcyB0aGF0IHJhbmRvbSBwb3NpdGlvbmluZyBjYW4gYmUgcGVyZm9ybWVkIHdpdGhcclxuICovXG5MYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSAvIDEwMDA7XG5cbi8qXHJcbiAqIENvb3JkaW5hdGVzIG9mIHRoZSB3b3JsZCBjZW50ZXJcclxuICovXG5MYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggPSAxMjAwO1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZID0gOTAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExheW91dENvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiBMRWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdkVkZ2UpO1xuXG4gIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZmFsc2U7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkVkZ2U7XG4gIHRoaXMuYmVuZHBvaW50cyA9IFtdO1xuICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbkxFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5cbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExFZGdlW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MRWRnZS5wcm90b3R5cGUuZ2V0U291cmNlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2U7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy50YXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNJbnRlckdyYXBoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc0ludGVyR3JhcGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYmVuZHBvaW50cztcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRMY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxjYTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc291cmNlSW5MY2E7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRhcmdldEluTGNhO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKHRoaXMuc291cmNlID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0O1xuICB9IGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IFwiTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2VcIjtcbiAgfVxufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaCA9IGZ1bmN0aW9uIChub2RlLCBncmFwaCkge1xuICB2YXIgb3RoZXJFbmQgPSB0aGlzLmdldE90aGVyRW5kKG5vZGUpO1xuICB2YXIgcm9vdCA9IGdyYXBoLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChvdGhlckVuZC5nZXRPd25lcigpID09IGdyYXBoKSB7XG4gICAgICByZXR1cm4gb3RoZXJFbmQ7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyRW5kLmdldE93bmVyKCkgPT0gcm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgb3RoZXJFbmQgPSBvdGhlckVuZC5nZXRPd25lcigpLmdldFBhcmVudCgpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2xpcFBvaW50Q29vcmRpbmF0ZXMgPSBuZXcgQXJyYXkoNCk7XG5cbiAgdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBJR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSwgdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLCBjbGlwUG9pbnRDb29yZGluYXRlcyk7XG5cbiAgaWYgKCF0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IGNsaXBQb2ludENvb3JkaW5hdGVzWzBdIC0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMl07XG4gICAgdGhpcy5sZW5ndGhZID0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMV0gLSBjbGlwUG9pbnRDb29yZGluYXRlc1szXTtcblxuICAgIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFgpIDwgMS4wKSB7XG4gICAgICB0aGlzLmxlbmd0aFggPSBJTWF0aC5zaWduKHRoaXMubGVuZ3RoWCk7XG4gICAgfVxuXG4gICAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWSkgPCAxLjApIHtcbiAgICAgIHRoaXMubGVuZ3RoWSA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhZKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFggKiB0aGlzLmxlbmd0aFggKyB0aGlzLmxlbmd0aFkgKiB0aGlzLmxlbmd0aFkpO1xuICB9XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxlbmd0aFggPSB0aGlzLnRhcmdldC5nZXRDZW50ZXJYKCkgLSB0aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCk7XG4gIHRoaXMubGVuZ3RoWSA9IHRoaXMudGFyZ2V0LmdldENlbnRlclkoKSAtIHRoaXMuc291cmNlLmdldENlbnRlclkoKTtcblxuICBpZiAoTWF0aC5hYnModGhpcy5sZW5ndGhYKSA8IDEuMCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFkpIDwgMS4wKSB7XG4gICAgdGhpcy5sZW5ndGhZID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFkpO1xuICB9XG5cbiAgdGhpcy5sZW5ndGggPSBNYXRoLnNxcnQodGhpcy5sZW5ndGhYICogdGhpcy5sZW5ndGhYICsgdGhpcy5sZW5ndGhZICogdGhpcy5sZW5ndGhZKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBMR3JhcGhPYmplY3QodkdyYXBoT2JqZWN0KSB7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkdyYXBoT2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExHcmFwaE9iamVjdDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIEludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBSZWN0YW5nbGVEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBSYW5kb21TZWVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuZnVuY3Rpb24gTE5vZGUoZ20sIGxvYywgc2l6ZSwgdk5vZGUpIHtcbiAgLy9BbHRlcm5hdGl2ZSBjb25zdHJ1Y3RvciAxIDogTE5vZGUoTEdyYXBoTWFuYWdlciBnbSwgUG9pbnQgbG9jLCBEaW1lbnNpb24gc2l6ZSwgT2JqZWN0IHZOb2RlKVxuICBpZiAoc2l6ZSA9PSBudWxsICYmIHZOb2RlID09IG51bGwpIHtcbiAgICB2Tm9kZSA9IGxvYztcbiAgfVxuXG4gIExHcmFwaE9iamVjdC5jYWxsKHRoaXMsIHZOb2RlKTtcblxuICAvL0FsdGVybmF0aXZlIGNvbnN0cnVjdG9yIDIgOiBMTm9kZShMYXlvdXQgbGF5b3V0LCBPYmplY3Qgdk5vZGUpXG4gIGlmIChnbS5ncmFwaE1hbmFnZXIgIT0gbnVsbCkgZ20gPSBnbS5ncmFwaE1hbmFnZXI7XG5cbiAgdGhpcy5lc3RpbWF0ZWRTaXplID0gSW50ZWdlci5NSU5fVkFMVUU7XG4gIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdk5vZGU7XG4gIHRoaXMuZWRnZXMgPSBbXTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcblxuICBpZiAoc2l6ZSAhPSBudWxsICYmIGxvYyAhPSBudWxsKSB0aGlzLnJlY3QgPSBuZXcgUmVjdGFuZ2xlRChsb2MueCwgbG9jLnksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtlbHNlIHRoaXMucmVjdCA9IG5ldyBSZWN0YW5nbGVEKCk7XG59XG5cbkxOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE9iamVjdCkge1xuICBMTm9kZVtwcm9wXSA9IExHcmFwaE9iamVjdFtwcm9wXTtcbn1cblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lZGdlcztcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2hpbGQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0T3duZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vICBpZiAodGhpcy5vd25lciAhPSBudWxsKSB7XG4gIC8vICAgIGlmICghKHRoaXMub3duZXIgPT0gbnVsbCB8fCB0aGlzLm93bmVyLmdldE5vZGVzKCkuaW5kZXhPZih0aGlzKSA+IC0xKSkge1xuICAvLyAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAvLyAgICB9XG4gIC8vICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbiAod2lkdGgpIHtcbiAgdGhpcy5yZWN0LndpZHRoID0gd2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbiAoaGVpZ2h0KSB7XG4gIHRoaXMucmVjdC5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Q2VudGVyWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXJZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMiwgdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMik7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54LCB0aGlzLnJlY3QueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0UmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXREaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGggKiB0aGlzLnJlY3Qud2lkdGggKyB0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaGFsZiB0aGUgZGlhZ29uYWwgbGVuZ3RoIG9mIHRoaXMgbm9kZS5cbiAqL1xuTE5vZGUucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCArIHRoaXMucmVjdC53aWR0aCAqIHRoaXMucmVjdC53aWR0aCkgLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldFJlY3QgPSBmdW5jdGlvbiAodXBwZXJMZWZ0LCBkaW1lbnNpb24pIHtcbiAgdGhpcy5yZWN0LnggPSB1cHBlckxlZnQueDtcbiAgdGhpcy5yZWN0LnkgPSB1cHBlckxlZnQueTtcbiAgdGhpcy5yZWN0LndpZHRoID0gZGltZW5zaW9uLndpZHRoO1xuICB0aGlzLnJlY3QuaGVpZ2h0ID0gZGltZW5zaW9uLmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRDZW50ZXIgPSBmdW5jdGlvbiAoY3gsIGN5KSB7XG4gIHRoaXMucmVjdC54ID0gY3ggLSB0aGlzLnJlY3Qud2lkdGggLyAyO1xuICB0aGlzLnJlY3QueSA9IGN5IC0gdGhpcy5yZWN0LmhlaWdodCAvIDI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoeCwgeSkge1xuICB0aGlzLnJlY3QueCA9IHg7XG4gIHRoaXMucmVjdC55ID0geTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5tb3ZlQnkgPSBmdW5jdGlvbiAoZHgsIGR5KSB7XG4gIHRoaXMucmVjdC54ICs9IGR4O1xuICB0aGlzLnJlY3QueSArPSBkeTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZSA9IGZ1bmN0aW9uICh0bykge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSB0bykge1xuICAgICAgaWYgKGVkZ2Uuc291cmNlICE9IHNlbGYpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIVwiO1xuXG4gICAgICBlZGdlTGlzdC5wdXNoKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzQmV0d2VlbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmICghKGVkZ2Uuc291cmNlID09IHNlbGYgfHwgZWRnZS50YXJnZXQgPT0gc2VsZikpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXRcIjtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSBvdGhlciB8fCBlZGdlLnNvdXJjZSA9PSBvdGhlcikge1xuICAgICAgZWRnZUxpc3QucHVzaChlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlZGdlTGlzdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbmVpZ2hib3JzID0gbmV3IFNldCgpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG5cbiAgICBpZiAoZWRnZS5zb3VyY2UgPT0gc2VsZikge1xuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlZGdlLnRhcmdldCAhPSBzZWxmKSB7XG4gICAgICAgIHRocm93IFwiSW5jb3JyZWN0IGluY2lkZW5jeSFcIjtcbiAgICAgIH1cblxuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnNvdXJjZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbmVpZ2hib3JzO1xufTtcblxuTE5vZGUucHJvdG90eXBlLndpdGhDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHdpdGhOZWlnaGJvcnNMaXN0ID0gbmV3IFNldCgpO1xuICB2YXIgY2hpbGROb2RlO1xuICB2YXIgY2hpbGRyZW47XG5cbiAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKHRoaXMpO1xuXG4gIGlmICh0aGlzLmNoaWxkICE9IG51bGwpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmNoaWxkLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlID0gbm9kZXNbaV07XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkTm9kZS53aXRoQ2hpbGRyZW4oKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKG5vZGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhOZWlnaGJvcnNMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vT2ZDaGlsZHJlbiA9IDA7XG4gIHZhciBjaGlsZE5vZGU7XG5cbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5jaGlsZC5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICBub09mQ2hpbGRyZW4gKz0gY2hpbGROb2RlLmdldE5vT2ZDaGlsZHJlbigpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub09mQ2hpbGRyZW4gPT0gMCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH1cbiAgcmV0dXJuIG5vT2ZDaGlsZHJlbjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5lc3RpbWF0ZWRTaXplID09IEludGVnZXIuTUlOX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemUgPSAodGhpcy5yZWN0LndpZHRoICsgdGhpcy5yZWN0LmhlaWdodCkgLyAyO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgICB0aGlzLnJlY3Qud2lkdGggPSB0aGlzLmVzdGltYXRlZFNpemU7XG4gICAgdGhpcy5yZWN0LmhlaWdodCA9IHRoaXMuZXN0aW1hdGVkU2l6ZTtcblxuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG4gIH1cbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zY2F0dGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmFuZG9tQ2VudGVyWDtcbiAgdmFyIHJhbmRvbUNlbnRlclk7XG5cbiAgdmFyIG1pblggPSAtTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHZhciBtYXhYID0gTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHJhbmRvbUNlbnRlclggPSBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggKyBSYW5kb21TZWVkLm5leHREb3VibGUoKSAqIChtYXhYIC0gbWluWCkgKyBtaW5YO1xuXG4gIHZhciBtaW5ZID0gLUxheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICB2YXIgbWF4WSA9IExheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICByYW5kb21DZW50ZXJZID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZICsgUmFuZG9tU2VlZC5uZXh0RG91YmxlKCkgKiAobWF4WSAtIG1pblkpICsgbWluWTtcblxuICB0aGlzLnJlY3QueCA9IHJhbmRvbUNlbnRlclg7XG4gIHRoaXMucmVjdC55ID0gcmFuZG9tQ2VudGVyWTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG4gIGlmICh0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGggIT0gMCkge1xuICAgIC8vIHdyYXAgdGhlIGNoaWxkcmVuIG5vZGVzIGJ5IHJlLWFycmFuZ2luZyB0aGUgYm91bmRhcmllc1xuICAgIHZhciBjaGlsZEdyYXBoID0gdGhpcy5nZXRDaGlsZCgpO1xuICAgIGNoaWxkR3JhcGgudXBkYXRlQm91bmRzKHRydWUpO1xuXG4gICAgdGhpcy5yZWN0LnggPSBjaGlsZEdyYXBoLmdldExlZnQoKTtcbiAgICB0aGlzLnJlY3QueSA9IGNoaWxkR3JhcGguZ2V0VG9wKCk7XG5cbiAgICB0aGlzLnNldFdpZHRoKGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpKTtcbiAgICB0aGlzLnNldEhlaWdodChjaGlsZEdyYXBoLmdldEJvdHRvbSgpIC0gY2hpbGRHcmFwaC5nZXRUb3AoKSk7XG5cbiAgICAvLyBVcGRhdGUgY29tcG91bmQgYm91bmRzIGNvbnNpZGVyaW5nIGl0cyBsYWJlbCBwcm9wZXJ0aWVzICAgIFxuICAgIGlmIChMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKSB7XG5cbiAgICAgIHZhciB3aWR0aCA9IGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpO1xuICAgICAgdmFyIGhlaWdodCA9IGNoaWxkR3JhcGguZ2V0Qm90dG9tKCkgLSBjaGlsZEdyYXBoLmdldFRvcCgpO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgdGhpcy5yZWN0LnggLT0gKHRoaXMubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgIHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGFiZWxIZWlnaHQgPiBoZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxQb3MgPT0gXCJjZW50ZXJcIikge1xuICAgICAgICAgIHRoaXMucmVjdC55IC09ICh0aGlzLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFBvcyA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgdGhpcy5yZWN0LnkgLT0gdGhpcy5sYWJlbEhlaWdodCAtIGhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmluY2x1c2lvblRyZWVEZXB0aCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG4gIHJldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodHJhbnMpIHtcbiAgdmFyIGxlZnQgPSB0aGlzLnJlY3QueDtcblxuICBpZiAobGVmdCA+IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIGxlZnQgPSBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH0gZWxzZSBpZiAobGVmdCA8IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICBsZWZ0ID0gLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWTtcbiAgfVxuXG4gIHZhciB0b3AgPSB0aGlzLnJlY3QueTtcblxuICBpZiAodG9wID4gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZKSB7XG4gICAgdG9wID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9IGVsc2UgaWYgKHRvcCA8IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICB0b3AgPSAtTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9XG5cbiAgdmFyIGxlZnRUb3AgPSBuZXcgUG9pbnREKGxlZnQsIHRvcCk7XG4gIHZhciB2TGVmdFRvcCA9IHRyYW5zLmludmVyc2VUcmFuc2Zvcm1Qb2ludChsZWZ0VG9wKTtcblxuICB0aGlzLnNldExvY2F0aW9uKHZMZWZ0VG9wLngsIHZMZWZ0VG9wLnkpO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3QueDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRSaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFRvcCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC55O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC55ICsgdGhpcy5yZWN0LmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm93bmVyID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLm93bmVyLmdldFBhcmVudCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMTm9kZTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIFBvaW50RCh4LCB5KSB7XG4gIGlmICh4ID09IG51bGwgJiYgeSA9PSBudWxsKSB7XG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxufVxuXG5Qb2ludEQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLng7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeCkge1xuICB0aGlzLnggPSB4O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24gKHkpIHtcbiAgdGhpcy55ID0geTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwdCkge1xuICByZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54IC0gcHQueCwgdGhpcy55IC0gcHQueSk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLmdldENvcHkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMueCwgdGhpcy55KTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKGRpbSkge1xuICB0aGlzLnggKz0gZGltLndpZHRoO1xuICB0aGlzLnkgKz0gZGltLmhlaWdodDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50RDtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIEludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBMRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgUmVjdGFuZ2xlRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIFBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgTGlua2VkTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG5mdW5jdGlvbiBMR3JhcGgocGFyZW50LCBvYmoyLCB2R3JhcGgpIHtcbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdkdyYXBoKTtcbiAgdGhpcy5lc3RpbWF0ZWRTaXplID0gSW50ZWdlci5NSU5fVkFMVUU7XG4gIHRoaXMubWFyZ2luID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBUEhfTUFSR0lOO1xuICB0aGlzLmVkZ2VzID0gW107XG4gIHRoaXMubm9kZXMgPSBbXTtcbiAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcblxuICBpZiAob2JqMiAhPSBudWxsICYmIG9iajIgaW5zdGFuY2VvZiBMR3JhcGhNYW5hZ2VyKSB7XG4gICAgdGhpcy5ncmFwaE1hbmFnZXIgPSBvYmoyO1xuICB9IGVsc2UgaWYgKG9iajIgIT0gbnVsbCAmJiBvYmoyIGluc3RhbmNlb2YgTGF5b3V0KSB7XG4gICAgdGhpcy5ncmFwaE1hbmFnZXIgPSBvYmoyLmdyYXBoTWFuYWdlcjtcbiAgfVxufVxuXG5MR3JhcGgucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhPYmplY3QucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExHcmFwaFtwcm9wXSA9IExHcmFwaE9iamVjdFtwcm9wXTtcbn1cblxuTEdyYXBoLnByb3RvdHlwZS5nZXROb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXM7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lZGdlcztcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRMZWZ0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZWZ0O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRSaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmlnaHQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldFRvcCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudG9wO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRCb3R0b20gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmJvdHRvbTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuaXNDb25uZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob2JqMSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSkge1xuICBpZiAoc291cmNlTm9kZSA9PSBudWxsICYmIHRhcmdldE5vZGUgPT0gbnVsbCkge1xuICAgIHZhciBuZXdOb2RlID0gb2JqMTtcbiAgICBpZiAodGhpcy5ncmFwaE1hbmFnZXIgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyIVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXROb2RlcygpLmluZGV4T2YobmV3Tm9kZSkgPiAtMSkge1xuICAgICAgdGhyb3cgXCJOb2RlIGFscmVhZHkgaW4gZ3JhcGghXCI7XG4gICAgfVxuICAgIG5ld05vZGUub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKG5ld05vZGUpO1xuXG4gICAgcmV0dXJuIG5ld05vZGU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5ld0VkZ2UgPSBvYmoxO1xuICAgIGlmICghKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHNvdXJjZU5vZGUpID4gLTEgJiYgdGhpcy5nZXROb2RlcygpLmluZGV4T2YodGFyZ2V0Tm9kZSkgPiAtMSkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghXCI7XG4gICAgfVxuXG4gICAgaWYgKCEoc291cmNlTm9kZS5vd25lciA9PSB0YXJnZXROb2RlLm93bmVyICYmIHNvdXJjZU5vZGUub3duZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoIVwiO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VOb2RlLm93bmVyICE9IHRhcmdldE5vZGUub3duZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHNldCBzb3VyY2UgYW5kIHRhcmdldFxuICAgIG5ld0VkZ2Uuc291cmNlID0gc291cmNlTm9kZTtcbiAgICBuZXdFZGdlLnRhcmdldCA9IHRhcmdldE5vZGU7XG5cbiAgICAvLyBzZXQgYXMgaW50cmEtZ3JhcGggZWRnZVxuICAgIG5ld0VkZ2UuaXNJbnRlckdyYXBoID0gZmFsc2U7XG5cbiAgICAvLyBhZGQgdG8gZ3JhcGggZWRnZSBsaXN0XG4gICAgdGhpcy5nZXRFZGdlcygpLnB1c2gobmV3RWRnZSk7XG5cbiAgICAvLyBhZGQgdG8gaW5jaWRlbmN5IGxpc3RzXG4gICAgc291cmNlTm9kZS5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgaWYgKHRhcmdldE5vZGUgIT0gc291cmNlTm9kZSkge1xuICAgICAgdGFyZ2V0Tm9kZS5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdFZGdlO1xuICB9XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIG5vZGUgPSBvYmo7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBMTm9kZSkge1xuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiTm9kZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIShub2RlLm93bmVyICE9IG51bGwgJiYgbm9kZS5vd25lciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJPd25lciBncmFwaCBpcyBpbnZhbGlkIVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncmFwaE1hbmFnZXIgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhXCI7XG4gICAgfVxuICAgIC8vIHJlbW92ZSBpbmNpZGVudCBlZGdlcyBmaXJzdCAobWFrZSBhIGNvcHkgdG8gZG8gaXQgc2FmZWx5KVxuICAgIHZhciBlZGdlc1RvQmVSZW1vdmVkID0gbm9kZS5lZGdlcy5zbGljZSgpO1xuICAgIHZhciBlZGdlO1xuICAgIHZhciBzID0gZWRnZXNUb0JlUmVtb3ZlZC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1RvQmVSZW1vdmVkW2ldO1xuXG4gICAgICBpZiAoZWRnZS5pc0ludGVyR3JhcGgpIHtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKGVkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZS5zb3VyY2Uub3duZXIucmVtb3ZlKGVkZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG5vdyB0aGUgbm9kZSBpdHNlbGZcbiAgICB2YXIgaW5kZXggPSB0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCFcIjtcbiAgICB9XG5cbiAgICB0aGlzLm5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTEVkZ2UpIHtcbiAgICB2YXIgZWRnZSA9IG9iajtcbiAgICBpZiAoZWRnZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkVkZ2UgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCEoZWRnZS5zb3VyY2UgIT0gbnVsbCAmJiBlZGdlLnRhcmdldCAhPSBudWxsKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIShlZGdlLnNvdXJjZS5vd25lciAhPSBudWxsICYmIGVkZ2UudGFyZ2V0Lm93bmVyICE9IG51bGwgJiYgZWRnZS5zb3VyY2Uub3duZXIgPT0gdGhpcyAmJiBlZGdlLnRhcmdldC5vd25lciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkIVwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmRleCA9IGVkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgdmFyIHRhcmdldEluZGV4ID0gZWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBpZiAoIShzb3VyY2VJbmRleCA+IC0xICYmIHRhcmdldEluZGV4ID4gLTEpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhXCI7XG4gICAgfVxuXG4gICAgZWRnZS5zb3VyY2UuZWRnZXMuc3BsaWNlKHNvdXJjZUluZGV4LCAxKTtcblxuICAgIGlmIChlZGdlLnRhcmdldCAhPSBlZGdlLnNvdXJjZSkge1xuICAgICAgZWRnZS50YXJnZXQuZWRnZXMuc3BsaWNlKHRhcmdldEluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBlZGdlLnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCFcIjtcbiAgICB9XG5cbiAgICBlZGdlLnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbkxHcmFwaC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRvcCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbGVmdCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbm9kZVRvcDtcbiAgdmFyIG5vZGVMZWZ0O1xuICB2YXIgbWFyZ2luO1xuXG4gIHZhciBub2RlcyA9IHRoaXMuZ2V0Tm9kZXMoKTtcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICBub2RlVG9wID0gbE5vZGUuZ2V0VG9wKCk7XG4gICAgbm9kZUxlZnQgPSBsTm9kZS5nZXRMZWZ0KCk7XG5cbiAgICBpZiAodG9wID4gbm9kZVRvcCkge1xuICAgICAgdG9wID0gbm9kZVRvcDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCA+IG5vZGVMZWZ0KSB7XG4gICAgICBsZWZ0ID0gbm9kZUxlZnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRG8gd2UgaGF2ZSBhbnkgbm9kZXMgaW4gdGhpcyBncmFwaD9cbiAgaWYgKHRvcCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0ICE9IHVuZGVmaW5lZCkge1xuICAgIG1hcmdpbiA9IG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0O1xuICB9IGVsc2Uge1xuICAgIG1hcmdpbiA9IHRoaXMubWFyZ2luO1xuICB9XG5cbiAgdGhpcy5sZWZ0ID0gbGVmdCAtIG1hcmdpbjtcbiAgdGhpcy50b3AgPSB0b3AgLSBtYXJnaW47XG5cbiAgLy8gQXBwbHkgdGhlIG1hcmdpbnMgYW5kIHJldHVybiB0aGUgcmVzdWx0XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcy5sZWZ0LCB0aGlzLnRvcCk7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcbiAgLy8gY2FsY3VsYXRlIGJvdW5kc1xuICB2YXIgbGVmdCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgcmlnaHQgPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciB0b3AgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIGJvdHRvbSA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIG5vZGVMZWZ0O1xuICB2YXIgbm9kZVJpZ2h0O1xuICB2YXIgbm9kZVRvcDtcbiAgdmFyIG5vZGVCb3R0b207XG4gIHZhciBtYXJnaW47XG5cbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAocmVjdXJzaXZlICYmIGxOb2RlLmNoaWxkICE9IG51bGwpIHtcbiAgICAgIGxOb2RlLnVwZGF0ZUJvdW5kcygpO1xuICAgIH1cbiAgICBub2RlTGVmdCA9IGxOb2RlLmdldExlZnQoKTtcbiAgICBub2RlUmlnaHQgPSBsTm9kZS5nZXRSaWdodCgpO1xuICAgIG5vZGVUb3AgPSBsTm9kZS5nZXRUb3AoKTtcbiAgICBub2RlQm90dG9tID0gbE5vZGUuZ2V0Qm90dG9tKCk7XG5cbiAgICBpZiAobGVmdCA+IG5vZGVMZWZ0KSB7XG4gICAgICBsZWZ0ID0gbm9kZUxlZnQ7XG4gICAgfVxuXG4gICAgaWYgKHJpZ2h0IDwgbm9kZVJpZ2h0KSB7XG4gICAgICByaWdodCA9IG5vZGVSaWdodDtcbiAgICB9XG5cbiAgICBpZiAodG9wID4gbm9kZVRvcCkge1xuICAgICAgdG9wID0gbm9kZVRvcDtcbiAgICB9XG5cbiAgICBpZiAoYm90dG9tIDwgbm9kZUJvdHRvbSkge1xuICAgICAgYm90dG9tID0gbm9kZUJvdHRvbTtcbiAgICB9XG4gIH1cblxuICB2YXIgYm91bmRpbmdSZWN0ID0gbmV3IFJlY3RhbmdsZUQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7XG4gIGlmIChsZWZ0ID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgdGhpcy5sZWZ0ID0gdGhpcy5wYXJlbnQuZ2V0TGVmdCgpO1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLnBhcmVudC5nZXRSaWdodCgpO1xuICAgIHRoaXMudG9wID0gdGhpcy5wYXJlbnQuZ2V0VG9wKCk7XG4gICAgdGhpcy5ib3R0b20gPSB0aGlzLnBhcmVudC5nZXRCb3R0b20oKTtcbiAgfVxuXG4gIGlmIChub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCAhPSB1bmRlZmluZWQpIHtcbiAgICBtYXJnaW4gPSBub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDtcbiAgfSBlbHNlIHtcbiAgICBtYXJnaW4gPSB0aGlzLm1hcmdpbjtcbiAgfVxuXG4gIHRoaXMubGVmdCA9IGJvdW5kaW5nUmVjdC54IC0gbWFyZ2luO1xuICB0aGlzLnJpZ2h0ID0gYm91bmRpbmdSZWN0LnggKyBib3VuZGluZ1JlY3Qud2lkdGggKyBtYXJnaW47XG4gIHRoaXMudG9wID0gYm91bmRpbmdSZWN0LnkgLSBtYXJnaW47XG4gIHRoaXMuYm90dG9tID0gYm91bmRpbmdSZWN0LnkgKyBib3VuZGluZ1JlY3QuaGVpZ2h0ICsgbWFyZ2luO1xufTtcblxuTEdyYXBoLmNhbGN1bGF0ZUJvdW5kcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICB2YXIgbGVmdCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgcmlnaHQgPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciB0b3AgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIGJvdHRvbSA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIG5vZGVMZWZ0O1xuICB2YXIgbm9kZVJpZ2h0O1xuICB2YXIgbm9kZVRvcDtcbiAgdmFyIG5vZGVCb3R0b207XG5cbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICBub2RlTGVmdCA9IGxOb2RlLmdldExlZnQoKTtcbiAgICBub2RlUmlnaHQgPSBsTm9kZS5nZXRSaWdodCgpO1xuICAgIG5vZGVUb3AgPSBsTm9kZS5nZXRUb3AoKTtcbiAgICBub2RlQm90dG9tID0gbE5vZGUuZ2V0Qm90dG9tKCk7XG5cbiAgICBpZiAobGVmdCA+IG5vZGVMZWZ0KSB7XG4gICAgICBsZWZ0ID0gbm9kZUxlZnQ7XG4gICAgfVxuXG4gICAgaWYgKHJpZ2h0IDwgbm9kZVJpZ2h0KSB7XG4gICAgICByaWdodCA9IG5vZGVSaWdodDtcbiAgICB9XG5cbiAgICBpZiAodG9wID4gbm9kZVRvcCkge1xuICAgICAgdG9wID0gbm9kZVRvcDtcbiAgICB9XG5cbiAgICBpZiAoYm90dG9tIDwgbm9kZUJvdHRvbSkge1xuICAgICAgYm90dG9tID0gbm9kZUJvdHRvbTtcbiAgICB9XG4gIH1cblxuICB2YXIgYm91bmRpbmdSZWN0ID0gbmV3IFJlY3RhbmdsZUQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7XG5cbiAgcmV0dXJuIGJvdW5kaW5nUmVjdDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcyA9PSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCk7XG4gIH1cbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZXN0aW1hdGVkU2l6ZSA9PSBJbnRlZ2VyLk1JTl9WQUxVRSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG4gIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXM7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG4gICAgc2l6ZSArPSBsTm9kZS5jYWxjRXN0aW1hdGVkU2l6ZSgpO1xuICB9XG5cbiAgaWYgKHNpemUgPT0gMCkge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IExheW91dENvbnN0YW50cy5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lc3RpbWF0ZWRTaXplID0gc2l6ZSAvIE1hdGguc3FydCh0aGlzLm5vZGVzLmxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS51cGRhdGVDb25uZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID09IDApIHtcbiAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcXVldWUgPSBuZXcgTGlua2VkTGlzdCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIGN1cnJlbnROb2RlID0gdGhpcy5ub2Rlc1swXTtcbiAgdmFyIG5laWdoYm9yRWRnZXM7XG4gIHZhciBjdXJyZW50TmVpZ2hib3I7XG4gIHZhciBjaGlsZHJlbk9mTm9kZSA9IGN1cnJlbnROb2RlLndpdGhDaGlsZHJlbigpO1xuICBjaGlsZHJlbk9mTm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcXVldWUucHVzaChub2RlKTtcbiAgICB2aXNpdGVkLmFkZChub2RlKTtcbiAgfSk7XG5cbiAgd2hpbGUgKHF1ZXVlLmxlbmd0aCAhPT0gMCkge1xuICAgIGN1cnJlbnROb2RlID0gcXVldWUuc2hpZnQoKTtcblxuICAgIC8vIFRyYXZlcnNlIGFsbCBuZWlnaGJvcnMgb2YgdGhpcyBub2RlXG4gICAgbmVpZ2hib3JFZGdlcyA9IGN1cnJlbnROb2RlLmdldEVkZ2VzKCk7XG4gICAgdmFyIHNpemUgPSBuZWlnaGJvckVkZ2VzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgdmFyIG5laWdoYm9yRWRnZSA9IG5laWdoYm9yRWRnZXNbaV07XG4gICAgICBjdXJyZW50TmVpZ2hib3IgPSBuZWlnaGJvckVkZ2UuZ2V0T3RoZXJFbmRJbkdyYXBoKGN1cnJlbnROb2RlLCB0aGlzKTtcblxuICAgICAgLy8gQWRkIHVudmlzaXRlZCBuZWlnaGJvcnMgdG8gdGhlIGxpc3QgdG8gdmlzaXRcbiAgICAgIGlmIChjdXJyZW50TmVpZ2hib3IgIT0gbnVsbCAmJiAhdmlzaXRlZC5oYXMoY3VycmVudE5laWdoYm9yKSkge1xuICAgICAgICB2YXIgY2hpbGRyZW5PZk5laWdoYm9yID0gY3VycmVudE5laWdoYm9yLndpdGhDaGlsZHJlbigpO1xuXG4gICAgICAgIGNoaWxkcmVuT2ZOZWlnaGJvci5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcXVldWUucHVzaChub2RlKTtcbiAgICAgICAgICB2aXNpdGVkLmFkZChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuXG4gIGlmICh2aXNpdGVkLnNpemUgPj0gdGhpcy5ub2Rlcy5sZW5ndGgpIHtcbiAgICB2YXIgbm9PZlZpc2l0ZWRJblRoaXNHcmFwaCA9IDA7XG5cbiAgICB2aXNpdGVkLmZvckVhY2goZnVuY3Rpb24gKHZpc2l0ZWROb2RlKSB7XG4gICAgICBpZiAodmlzaXRlZE5vZGUub3duZXIgPT0gc2VsZikge1xuICAgICAgICBub09mVmlzaXRlZEluVGhpc0dyYXBoKys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobm9PZlZpc2l0ZWRJblRoaXNHcmFwaCA9PSB0aGlzLm5vZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExHcmFwaDtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGg7XG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXG5mdW5jdGlvbiBMR3JhcGhNYW5hZ2VyKGxheW91dCkge1xuICBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOyAvLyBJdCBtYXkgYmUgYmV0dGVyIHRvIGluaXRpbGl6ZSB0aGlzIG91dCBvZiB0aGlzIGZ1bmN0aW9uIGJ1dCBpdCBnaXZlcyBhbiBlcnJvciAoUmlnaHQtaGFuZCBzaWRlIG9mICdpbnN0YW5jZW9mJyBpcyBub3QgY2FsbGFibGUpIG5vdy5cbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG5cbiAgdGhpcy5ncmFwaHMgPSBbXTtcbiAgdGhpcy5lZGdlcyA9IFtdO1xufVxuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5hZGRSb290ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbmdyYXBoID0gdGhpcy5sYXlvdXQubmV3R3JhcGgoKTtcbiAgdmFyIG5ub2RlID0gdGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKTtcbiAgdmFyIHJvb3QgPSB0aGlzLmFkZChuZ3JhcGgsIG5ub2RlKTtcbiAgdGhpcy5zZXRSb290R3JhcGgocm9vdCk7XG4gIHJldHVybiB0aGlzLnJvb3RHcmFwaDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuZXdHcmFwaCwgcGFyZW50Tm9kZSwgbmV3RWRnZSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSkge1xuICAvL3RoZXJlIGFyZSBqdXN0IDIgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZW4gaXQgYWRkcyBhbiBMR3JhcGggZWxzZSBpdCBhZGRzIGFuIExFZGdlXG4gIGlmIChuZXdFZGdlID09IG51bGwgJiYgc291cmNlTm9kZSA9PSBudWxsICYmIHRhcmdldE5vZGUgPT0gbnVsbCkge1xuICAgIGlmIChuZXdHcmFwaCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmIChwYXJlbnROb2RlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiUGFyZW50IG5vZGUgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JhcGhzLmluZGV4T2YobmV3R3JhcGgpID4gLTEpIHtcbiAgICAgIHRocm93IFwiR3JhcGggYWxyZWFkeSBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBocy5wdXNoKG5ld0dyYXBoKTtcblxuICAgIGlmIChuZXdHcmFwaC5wYXJlbnQgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJBbHJlYWR5IGhhcyBhIHBhcmVudCFcIjtcbiAgICB9XG4gICAgaWYgKHBhcmVudE5vZGUuY2hpbGQgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJBbHJlYWR5IGhhcyBhIGNoaWxkIVwiO1xuICAgIH1cblxuICAgIG5ld0dyYXBoLnBhcmVudCA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5jaGlsZCA9IG5ld0dyYXBoO1xuXG4gICAgcmV0dXJuIG5ld0dyYXBoO1xuICB9IGVsc2Uge1xuICAgIC8vY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVyc1xuICAgIHRhcmdldE5vZGUgPSBuZXdFZGdlO1xuICAgIHNvdXJjZU5vZGUgPSBwYXJlbnROb2RlO1xuICAgIG5ld0VkZ2UgPSBuZXdHcmFwaDtcbiAgICB2YXIgc291cmNlR3JhcGggPSBzb3VyY2VOb2RlLmdldE93bmVyKCk7XG4gICAgdmFyIHRhcmdldEdyYXBoID0gdGFyZ2V0Tm9kZS5nZXRPd25lcigpO1xuXG4gICAgaWYgKCEoc291cmNlR3JhcGggIT0gbnVsbCAmJiBzb3VyY2VHcmFwaC5nZXRHcmFwaE1hbmFnZXIoKSA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICAgIH1cbiAgICBpZiAoISh0YXJnZXRHcmFwaCAhPSBudWxsICYmIHRhcmdldEdyYXBoLmdldEdyYXBoTWFuYWdlcigpID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIlRhcmdldCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZUdyYXBoID09IHRhcmdldEdyYXBoKSB7XG4gICAgICBuZXdFZGdlLmlzSW50ZXJHcmFwaCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHNvdXJjZUdyYXBoLmFkZChuZXdFZGdlLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RWRnZS5pc0ludGVyR3JhcGggPSB0cnVlO1xuXG4gICAgICAvLyBzZXQgc291cmNlIGFuZCB0YXJnZXRcbiAgICAgIG5ld0VkZ2Uuc291cmNlID0gc291cmNlTm9kZTtcbiAgICAgIG5ld0VkZ2UudGFyZ2V0ID0gdGFyZ2V0Tm9kZTtcblxuICAgICAgLy8gYWRkIGVkZ2UgdG8gaW50ZXItZ3JhcGggZWRnZSBsaXN0XG4gICAgICBpZiAodGhpcy5lZGdlcy5pbmRleE9mKG5ld0VkZ2UpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgXCJFZGdlIGFscmVhZHkgaW4gaW50ZXItZ3JhcGggZWRnZSBsaXN0IVwiO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG5cbiAgICAgIC8vIGFkZCBlZGdlIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IGluY2lkZW5jeSBsaXN0c1xuICAgICAgaWYgKCEobmV3RWRnZS5zb3VyY2UgIT0gbnVsbCAmJiBuZXdFZGdlLnRhcmdldCAhPSBudWxsKSkge1xuICAgICAgICB0aHJvdyBcIkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCFcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCEobmV3RWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihuZXdFZGdlKSA9PSAtMSAmJiBuZXdFZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKG5ld0VkZ2UpID09IC0xKSkge1xuICAgICAgICB0aHJvdyBcIkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCFcIjtcbiAgICAgIH1cblxuICAgICAgbmV3RWRnZS5zb3VyY2UuZWRnZXMucHVzaChuZXdFZGdlKTtcbiAgICAgIG5ld0VkZ2UudGFyZ2V0LmVkZ2VzLnB1c2gobmV3RWRnZSk7XG5cbiAgICAgIHJldHVybiBuZXdFZGdlO1xuICAgIH1cbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGxPYmopIHtcbiAgaWYgKGxPYmogaW5zdGFuY2VvZiBMR3JhcGgpIHtcbiAgICB2YXIgZ3JhcGggPSBsT2JqO1xuICAgIGlmIChncmFwaC5nZXRHcmFwaE1hbmFnZXIoKSAhPSB0aGlzKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nclwiO1xuICAgIH1cbiAgICBpZiAoIShncmFwaCA9PSB0aGlzLnJvb3RHcmFwaCB8fCBncmFwaC5wYXJlbnQgIT0gbnVsbCAmJiBncmFwaC5wYXJlbnQuZ3JhcGhNYW5hZ2VyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIkludmFsaWQgcGFyZW50IG5vZGUhXCI7XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgdGhlIGVkZ2VzIChtYWtlIGEgY29weSB0byBkbyBpdCBzYWZlbHkpXG4gICAgdmFyIGVkZ2VzVG9CZVJlbW92ZWQgPSBbXTtcblxuICAgIGVkZ2VzVG9CZVJlbW92ZWQgPSBlZGdlc1RvQmVSZW1vdmVkLmNvbmNhdChncmFwaC5nZXRFZGdlcygpKTtcblxuICAgIHZhciBlZGdlO1xuICAgIHZhciBzID0gZWRnZXNUb0JlUmVtb3ZlZC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1RvQmVSZW1vdmVkW2ldO1xuICAgICAgZ3JhcGgucmVtb3ZlKGVkZ2UpO1xuICAgIH1cblxuICAgIC8vIHRoZW4gdGhlIG5vZGVzIChtYWtlIGEgY29weSB0byBkbyBpdCBzYWZlbHkpXG4gICAgdmFyIG5vZGVzVG9CZVJlbW92ZWQgPSBbXTtcblxuICAgIG5vZGVzVG9CZVJlbW92ZWQgPSBub2Rlc1RvQmVSZW1vdmVkLmNvbmNhdChncmFwaC5nZXROb2RlcygpKTtcblxuICAgIHZhciBub2RlO1xuICAgIHMgPSBub2Rlc1RvQmVSZW1vdmVkLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzVG9CZVJlbW92ZWRbaV07XG4gICAgICBncmFwaC5yZW1vdmUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgZ3JhcGggaXMgdGhlIHJvb3RcbiAgICBpZiAoZ3JhcGggPT0gdGhpcy5yb290R3JhcGgpIHtcbiAgICAgIHRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO1xuICAgIH1cblxuICAgIC8vIG5vdyByZW1vdmUgdGhlIGdyYXBoIGl0c2VsZlxuICAgIHZhciBpbmRleCA9IHRoaXMuZ3JhcGhzLmluZGV4T2YoZ3JhcGgpO1xuICAgIHRoaXMuZ3JhcGhzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAvLyBhbHNvIHJlc2V0IHRoZSBwYXJlbnQgb2YgdGhlIGdyYXBoXG4gICAgZ3JhcGgucGFyZW50ID0gbnVsbDtcbiAgfSBlbHNlIGlmIChsT2JqIGluc3RhbmNlb2YgTEVkZ2UpIHtcbiAgICBlZGdlID0gbE9iajtcbiAgICBpZiAoZWRnZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkVkZ2UgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCFlZGdlLmlzSW50ZXJHcmFwaCkge1xuICAgICAgdGhyb3cgXCJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSFcIjtcbiAgICB9XG4gICAgaWYgKCEoZWRnZS5zb3VyY2UgIT0gbnVsbCAmJiBlZGdlLnRhcmdldCAhPSBudWxsKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsIVwiO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBlZGdlIGZyb20gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMnIGluY2lkZW5jeSBsaXN0c1xuXG4gICAgaWYgKCEoZWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihlZGdlKSAhPSAtMSAmJiBlZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKGVkZ2UpICE9IC0xKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlIVwiO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGVkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgZWRnZS5zb3VyY2UuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGVkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgZWRnZS50YXJnZXQuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIC8vIHJlbW92ZSBlZGdlIGZyb20gb3duZXIgZ3JhcGggbWFuYWdlcidzIGludGVyLWdyYXBoIGVkZ2UgbGlzdFxuXG4gICAgaWYgKCEoZWRnZS5zb3VyY2Uub3duZXIgIT0gbnVsbCAmJiBlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKSAhPSBudWxsKSkge1xuICAgICAgdGhyb3cgXCJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoZWRnZSkgPT0gLTEpIHtcbiAgICAgIHRocm93IFwiTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhXCI7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyh0cnVlKTtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEdyYXBocyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhzO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0QWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmFsbE5vZGVzID09IG51bGwpIHtcbiAgICB2YXIgbm9kZUxpc3QgPSBbXTtcbiAgICB2YXIgZ3JhcGhzID0gdGhpcy5nZXRHcmFwaHMoKTtcbiAgICB2YXIgcyA9IGdyYXBocy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgIG5vZGVMaXN0ID0gbm9kZUxpc3QuY29uY2F0KGdyYXBoc1tpXS5nZXROb2RlcygpKTtcbiAgICB9XG4gICAgdGhpcy5hbGxOb2RlcyA9IG5vZGVMaXN0O1xuICB9XG4gIHJldHVybiB0aGlzLmFsbE5vZGVzO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVzZXRBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hbGxOb2RlcyA9IG51bGw7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFsbEVkZ2VzID0gbnVsbDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBudWxsO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0QWxsRWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmFsbEVkZ2VzID09IG51bGwpIHtcbiAgICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgICB2YXIgZ3JhcGhzID0gdGhpcy5nZXRHcmFwaHMoKTtcbiAgICB2YXIgcyA9IGdyYXBocy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KGdyYXBoc1tpXS5nZXRFZGdlcygpKTtcbiAgICB9XG5cbiAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdCh0aGlzLmVkZ2VzKTtcblxuICAgIHRoaXMuYWxsRWRnZXMgPSBlZGdlTGlzdDtcbiAgfVxuICByZXR1cm4gdGhpcy5hbGxFZGdlcztcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbjtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKG5vZGVMaXN0KSB7XG4gIGlmICh0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uICE9IG51bGwpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuXG4gIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBub2RlTGlzdDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldFJvb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJvb3RHcmFwaDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnNldFJvb3RHcmFwaCA9IGZ1bmN0aW9uIChncmFwaCkge1xuICBpZiAoZ3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgIT0gdGhpcykge1xuICAgIHRocm93IFwiUm9vdCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gIH1cblxuICB0aGlzLnJvb3RHcmFwaCA9IGdyYXBoO1xuICAvLyByb290IGdyYXBoIG11c3QgaGF2ZSBhIHJvb3Qgbm9kZSBhc3NvY2lhdGVkIHdpdGggaXQgZm9yIGNvbnZlbmllbmNlXG4gIGlmIChncmFwaC5wYXJlbnQgPT0gbnVsbCkge1xuICAgIGdyYXBoLnBhcmVudCA9IHRoaXMubGF5b3V0Lm5ld05vZGUoXCJSb290IG5vZGVcIik7XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldExheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGF5b3V0O1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXIgPSBmdW5jdGlvbiAoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGlmICghKGZpcnN0Tm9kZSAhPSBudWxsICYmIHNlY29uZE5vZGUgIT0gbnVsbCkpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuXG4gIGlmIChmaXJzdE5vZGUgPT0gc2Vjb25kTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElzIHNlY29uZCBub2RlIGFuIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBvbmU/XG4gIHZhciBvd25lckdyYXBoID0gZmlyc3ROb2RlLmdldE93bmVyKCk7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGRvIHtcbiAgICBwYXJlbnROb2RlID0gb3duZXJHcmFwaC5nZXRQYXJlbnQoKTtcblxuICAgIGlmIChwYXJlbnROb2RlID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnROb2RlID09IHNlY29uZE5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG93bmVyR3JhcGggPSBwYXJlbnROb2RlLmdldE93bmVyKCk7XG4gICAgaWYgKG93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcbiAgLy8gSXMgZmlyc3Qgbm9kZSBhbiBhbmNlc3RvciBvZiB0aGUgc2Vjb25kIG9uZT9cbiAgb3duZXJHcmFwaCA9IHNlY29uZE5vZGUuZ2V0T3duZXIoKTtcblxuICBkbyB7XG4gICAgcGFyZW50Tm9kZSA9IG93bmVyR3JhcGguZ2V0UGFyZW50KCk7XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBmaXJzdE5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG93bmVyR3JhcGggPSBwYXJlbnROb2RlLmdldE93bmVyKCk7XG4gICAgaWYgKG93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZTtcbiAgdmFyIHNvdXJjZU5vZGU7XG4gIHZhciB0YXJnZXROb2RlO1xuICB2YXIgc291cmNlQW5jZXN0b3JHcmFwaDtcbiAgdmFyIHRhcmdldEFuY2VzdG9yR3JhcGg7XG5cbiAgdmFyIGVkZ2VzID0gdGhpcy5nZXRBbGxFZGdlcygpO1xuICB2YXIgcyA9IGVkZ2VzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICBlZGdlID0gZWRnZXNbaV07XG5cbiAgICBzb3VyY2VOb2RlID0gZWRnZS5zb3VyY2U7XG4gICAgdGFyZ2V0Tm9kZSA9IGVkZ2UudGFyZ2V0O1xuICAgIGVkZ2UubGNhID0gbnVsbDtcbiAgICBlZGdlLnNvdXJjZUluTGNhID0gc291cmNlTm9kZTtcbiAgICBlZGdlLnRhcmdldEluTGNhID0gdGFyZ2V0Tm9kZTtcblxuICAgIGlmIChzb3VyY2VOb2RlID09IHRhcmdldE5vZGUpIHtcbiAgICAgIGVkZ2UubGNhID0gc291cmNlTm9kZS5nZXRPd25lcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgc291cmNlQW5jZXN0b3JHcmFwaCA9IHNvdXJjZU5vZGUuZ2V0T3duZXIoKTtcblxuICAgIHdoaWxlIChlZGdlLmxjYSA9PSBudWxsKSB7XG4gICAgICBlZGdlLnRhcmdldEluTGNhID0gdGFyZ2V0Tm9kZTtcbiAgICAgIHRhcmdldEFuY2VzdG9yR3JhcGggPSB0YXJnZXROb2RlLmdldE93bmVyKCk7XG5cbiAgICAgIHdoaWxlIChlZGdlLmxjYSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0YXJnZXRBbmNlc3RvckdyYXBoID09IHNvdXJjZUFuY2VzdG9yR3JhcGgpIHtcbiAgICAgICAgICBlZGdlLmxjYSA9IHRhcmdldEFuY2VzdG9yR3JhcGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0QW5jZXN0b3JHcmFwaCA9PSB0aGlzLnJvb3RHcmFwaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVkZ2UubGNhICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgICAgICAgfVxuICAgICAgICBlZGdlLnRhcmdldEluTGNhID0gdGFyZ2V0QW5jZXN0b3JHcmFwaC5nZXRQYXJlbnQoKTtcbiAgICAgICAgdGFyZ2V0QW5jZXN0b3JHcmFwaCA9IGVkZ2UudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNvdXJjZUFuY2VzdG9yR3JhcGggPT0gdGhpcy5yb290R3JhcGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChlZGdlLmxjYSA9PSBudWxsKSB7XG4gICAgICAgIGVkZ2Uuc291cmNlSW5MY2EgPSBzb3VyY2VBbmNlc3RvckdyYXBoLmdldFBhcmVudCgpO1xuICAgICAgICBzb3VyY2VBbmNlc3RvckdyYXBoID0gZWRnZS5zb3VyY2VJbkxjYS5nZXRPd25lcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlZGdlLmxjYSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgICB9XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvciA9IGZ1bmN0aW9uIChmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgaWYgKGZpcnN0Tm9kZSA9PSBzZWNvbmROb2RlKSB7XG4gICAgcmV0dXJuIGZpcnN0Tm9kZS5nZXRPd25lcigpO1xuICB9XG4gIHZhciBmaXJzdE93bmVyR3JhcGggPSBmaXJzdE5vZGUuZ2V0T3duZXIoKTtcblxuICBkbyB7XG4gICAgaWYgKGZpcnN0T3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIHNlY29uZE93bmVyR3JhcGggPSBzZWNvbmROb2RlLmdldE93bmVyKCk7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoc2Vjb25kT3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kT3duZXJHcmFwaCA9PSBmaXJzdE93bmVyR3JhcGgpIHtcbiAgICAgICAgcmV0dXJuIHNlY29uZE93bmVyR3JhcGg7XG4gICAgICB9XG4gICAgICBzZWNvbmRPd25lckdyYXBoID0gc2Vjb25kT3duZXJHcmFwaC5nZXRQYXJlbnQoKS5nZXRPd25lcigpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgZmlyc3RPd25lckdyYXBoID0gZmlyc3RPd25lckdyYXBoLmdldFBhcmVudCgpLmdldE93bmVyKCk7XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJldHVybiBmaXJzdE93bmVyR3JhcGg7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyA9IGZ1bmN0aW9uIChncmFwaCwgZGVwdGgpIHtcbiAgaWYgKGdyYXBoID09IG51bGwgJiYgZGVwdGggPT0gbnVsbCkge1xuICAgIGdyYXBoID0gdGhpcy5yb290R3JhcGg7XG4gICAgZGVwdGggPSAxO1xuICB9XG4gIHZhciBub2RlO1xuXG4gIHZhciBub2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICBub2RlLmluY2x1c2lvblRyZWVEZXB0aCA9IGRlcHRoO1xuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhub2RlLmNoaWxkLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2U7XG5cbiAgdmFyIHMgPSB0aGlzLmVkZ2VzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICBlZGdlID0gdGhpcy5lZGdlc1tpXTtcblxuICAgIGlmICh0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKGVkZ2Uuc291cmNlLCBlZGdlLnRhcmdldCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExHcmFwaE1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuZnVuY3Rpb24gRkRMYXlvdXRDb25zdGFudHMoKSB7fVxuXG4vL0ZETGF5b3V0Q29uc3RhbnRzIGluaGVyaXRzIHN0YXRpYyBwcm9wcyBpbiBMYXlvdXRDb25zdGFudHNcbmZvciAodmFyIHByb3AgaW4gTGF5b3V0Q29uc3RhbnRzKSB7XG4gIEZETGF5b3V0Q29uc3RhbnRzW3Byb3BdID0gTGF5b3V0Q29uc3RhbnRzW3Byb3BdO1xufVxuXG5GRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUyA9IDI1MDA7XG5cbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSA1MDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIID0gMC40NTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIID0gNDUwMC4wO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gMC40O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gMS4wO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IDMuODtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSAxLjU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTiA9IHRydWU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04gPSB0cnVlO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCA9IDAuMztcbkZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IgPSAwLjMzO1xuRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUID0gMTAwMDtcbkZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVCA9IDUwMDA7XG5GRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwgPSAxMDAuMDtcbkZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCAqIDM7XG5GRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAuMDtcbkZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCA9IDEwMDtcbkZETGF5b3V0Q29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgPSAwLjE7XG5GRExheW91dENvbnN0YW50cy5NSU5fRURHRV9MRU5HVEggPSAxO1xuRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPSAxMDtcblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dENvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBsaXN0IG9mIHN0YXRpYyBnZW9tZXRyeSByZWxhdGVkIHV0aWxpdHkgbWV0aG9kcy5cbiAqXG4gKlxuICogQ29weXJpZ2h0OiBpLVZpcyBSZXNlYXJjaCBHcm91cCwgQmlsa2VudCBVbml2ZXJzaXR5LCAyMDA3IC0gcHJlc2VudFxuICovXG5cbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG5mdW5jdGlvbiBJR2VvbWV0cnkoKSB7fVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgKmhhbGYqIHRoZSBhbW91bnQgaW4geCBhbmQgeSBkaXJlY3Rpb25zIG9mIHRoZSB0d29cbiAqIGlucHV0IHJlY3RhbmdsZXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZW0ga2VlcGluZyB0aGVpciByZXNwZWN0aXZlXG4gKiBwb3NpdGlvbmluZywgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiB0aGUgaW5wdXQgYXJyYXkuIEFuIGlucHV0XG4gKiBzZXBhcmF0aW9uIGJ1ZmZlciBhZGRlZCB0byB0aGUgYW1vdW50IGluIGJvdGggZGlyZWN0aW9ucy4gV2UgYXNzdW1lIHRoYXRcbiAqIHRoZSB0d28gcmVjdGFuZ2xlcyBkbyBpbnRlcnNlY3QuXG4gKi9cbklHZW9tZXRyeS5jYWxjU2VwYXJhdGlvbkFtb3VudCA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIG92ZXJsYXBBbW91bnQsIHNlcGFyYXRpb25CdWZmZXIpIHtcbiAgaWYgKCFyZWN0QS5pbnRlcnNlY3RzKHJlY3RCKSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgdmFyIGRpcmVjdGlvbnMgPSBuZXcgQXJyYXkoMik7XG5cbiAgdGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhyZWN0QSwgcmVjdEIsIGRpcmVjdGlvbnMpO1xuXG4gIG92ZXJsYXBBbW91bnRbMF0gPSBNYXRoLm1pbihyZWN0QS5nZXRSaWdodCgpLCByZWN0Qi5nZXRSaWdodCgpKSAtIE1hdGgubWF4KHJlY3RBLngsIHJlY3RCLngpO1xuICBvdmVybGFwQW1vdW50WzFdID0gTWF0aC5taW4ocmVjdEEuZ2V0Qm90dG9tKCksIHJlY3RCLmdldEJvdHRvbSgpKSAtIE1hdGgubWF4KHJlY3RBLnksIHJlY3RCLnkpO1xuXG4gIC8vIHVwZGF0ZSB0aGUgb3ZlcmxhcHBpbmcgYW1vdW50cyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgaWYgKHJlY3RBLmdldFgoKSA8PSByZWN0Qi5nZXRYKCkgJiYgcmVjdEEuZ2V0UmlnaHQoKSA+PSByZWN0Qi5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjE6XG4gICAgKlxuICAgICogcmVjdEFcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RCXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RCLmdldFgoKSAtIHJlY3RBLmdldFgoKSwgcmVjdEEuZ2V0UmlnaHQoKSAtIHJlY3RCLmdldFJpZ2h0KCkpO1xuICB9IGVsc2UgaWYgKHJlY3RCLmdldFgoKSA8PSByZWN0QS5nZXRYKCkgJiYgcmVjdEIuZ2V0UmlnaHQoKSA+PSByZWN0QS5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjI6XG4gICAgKlxuICAgICogcmVjdEJcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RBXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RBLmdldFgoKSAtIHJlY3RCLmdldFgoKSwgcmVjdEIuZ2V0UmlnaHQoKSAtIHJlY3RBLmdldFJpZ2h0KCkpO1xuICB9XG4gIGlmIChyZWN0QS5nZXRZKCkgPD0gcmVjdEIuZ2V0WSgpICYmIHJlY3RBLmdldEJvdHRvbSgpID49IHJlY3RCLmdldEJvdHRvbSgpKSB7XG4gICAgLyogQ2FzZSB5LjE6XG4gICAgICogICAgICAgICAgX19fX19fX18gcmVjdEFcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19fICByZWN0QlxuICAgICAqICAgICAgICAgfCAgICB8XG4gICAgICogICAgICAgICB8ICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19ffFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgICpcbiAgICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzFdICs9IE1hdGgubWluKHJlY3RCLmdldFkoKSAtIHJlY3RBLmdldFkoKSwgcmVjdEEuZ2V0Qm90dG9tKCkgLSByZWN0Qi5nZXRCb3R0b20oKSk7XG4gIH0gZWxzZSBpZiAocmVjdEIuZ2V0WSgpIDw9IHJlY3RBLmdldFkoKSAmJiByZWN0Qi5nZXRCb3R0b20oKSA+PSByZWN0QS5nZXRCb3R0b20oKSkge1xuICAgIC8qIENhc2UgeS4yOlxuICAgICogICAgICAgICAgX19fX19fX18gcmVjdEJcbiAgICAqICAgICAgICAgfFxuICAgICogICAgICAgICB8XG4gICAgKiAgIF9fX19fX3xfX19fICByZWN0QVxuICAgICogICAgICAgICB8ICAgIHxcbiAgICAqICAgICAgICAgfCAgICB8XG4gICAgKiAgIF9fX19fX3xfX19ffFxuICAgICogICAgICAgICB8XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgKlxuICAgICovXG4gICAgb3ZlcmxhcEFtb3VudFsxXSArPSBNYXRoLm1pbihyZWN0QS5nZXRZKCkgLSByZWN0Qi5nZXRZKCksIHJlY3RCLmdldEJvdHRvbSgpIC0gcmVjdEEuZ2V0Qm90dG9tKCkpO1xuICB9XG5cbiAgLy8gZmluZCBzbG9wZSBvZiB0aGUgbGluZSBwYXNzZXMgdHdvIGNlbnRlcnNcbiAgdmFyIHNsb3BlID0gTWF0aC5hYnMoKHJlY3RCLmdldENlbnRlclkoKSAtIHJlY3RBLmdldENlbnRlclkoKSkgLyAocmVjdEIuZ2V0Q2VudGVyWCgpIC0gcmVjdEEuZ2V0Q2VudGVyWCgpKSk7XG4gIC8vIGlmIGNlbnRlcnMgYXJlIG92ZXJsYXBwZWRcbiAgaWYgKHJlY3RCLmdldENlbnRlclkoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWSgpICYmIHJlY3RCLmdldENlbnRlclgoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWCgpKSB7XG4gICAgLy8gYXNzdW1lIHRoZSBzbG9wZSBpcyAxICg0NSBkZWdyZWUpXG4gICAgc2xvcGUgPSAxLjA7XG4gIH1cblxuICB2YXIgbW92ZUJ5WSA9IHNsb3BlICogb3ZlcmxhcEFtb3VudFswXTtcbiAgdmFyIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzFdIC8gc2xvcGU7XG4gIGlmIChvdmVybGFwQW1vdW50WzBdIDwgbW92ZUJ5WCkge1xuICAgIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzBdO1xuICB9IGVsc2Uge1xuICAgIG1vdmVCeVkgPSBvdmVybGFwQW1vdW50WzFdO1xuICB9XG4gIC8vIHJldHVybiBoYWxmIHRoZSBhbW91bnQgc28gdGhhdCBpZiBlYWNoIHJlY3RhbmdsZSBpcyBtb3ZlZCBieSB0aGVzZVxuICAvLyBhbW91bnRzIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMsIG92ZXJsYXAgd2lsbCBiZSByZXNvbHZlZFxuICBvdmVybGFwQW1vdW50WzBdID0gLTEgKiBkaXJlY3Rpb25zWzBdICogKG1vdmVCeVggLyAyICsgc2VwYXJhdGlvbkJ1ZmZlcik7XG4gIG92ZXJsYXBBbW91bnRbMV0gPSAtMSAqIGRpcmVjdGlvbnNbMV0gKiAobW92ZUJ5WSAvIDIgKyBzZXBhcmF0aW9uQnVmZmVyKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZGVjaWRlcyB0aGUgc2VwYXJhdGlvbiBkaXJlY3Rpb24gb2Ygb3ZlcmxhcHBpbmcgbm9kZXNcbiAqXG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gLTEsIHRoZW4gcmVjdEEgZ29lcyBsZWZ0XG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gMSwgIHRoZW4gcmVjdEEgZ29lcyByaWdodFxuICogaWYgZGlyZWN0aW9uc1sxXSA9IC0xLCB0aGVuIHJlY3RBIGdvZXMgdXBcbiAqIGlmIGRpcmVjdGlvbnNbMV0gPSAxLCAgdGhlbiByZWN0QSBnb2VzIGRvd25cbiAqL1xuSUdlb21ldHJ5LmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0QiwgZGlyZWN0aW9ucykge1xuICBpZiAocmVjdEEuZ2V0Q2VudGVyWCgpIDwgcmVjdEIuZ2V0Q2VudGVyWCgpKSB7XG4gICAgZGlyZWN0aW9uc1swXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGlvbnNbMF0gPSAxO1xuICB9XG5cbiAgaWYgKHJlY3RBLmdldENlbnRlclkoKSA8IHJlY3RCLmdldENlbnRlclkoKSkge1xuICAgIGRpcmVjdGlvbnNbMV0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICBkaXJlY3Rpb25zWzFdID0gMTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gKGNsaXBwaW5nKSBwb2ludHMgb2YgdGhlIHR3b1xuICogaW5wdXQgcmVjdGFuZ2xlcyB3aXRoIGxpbmUgc2VnbWVudCBkZWZpbmVkIGJ5IHRoZSBjZW50ZXJzIG9mIHRoZXNlIHR3b1xuICogcmVjdGFuZ2xlcy4gVGhlIGNsaXBwaW5nIHBvaW50cyBhcmUgc2F2ZWQgaW4gdGhlIGlucHV0IGRvdWJsZSBhcnJheSBhbmRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZSB0d28gcmVjdGFuZ2xlcyBvdmVybGFwIGlzIHJldHVybmVkLlxuICovXG5JR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uMiA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIHJlc3VsdCkge1xuICAvL3Jlc3VsdFswLTFdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEEsIHJlc3VsdFsyLTNdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEJcbiAgdmFyIHAxeCA9IHJlY3RBLmdldENlbnRlclgoKTtcbiAgdmFyIHAxeSA9IHJlY3RBLmdldENlbnRlclkoKTtcbiAgdmFyIHAyeCA9IHJlY3RCLmdldENlbnRlclgoKTtcbiAgdmFyIHAyeSA9IHJlY3RCLmdldENlbnRlclkoKTtcblxuICAvL2lmIHR3byByZWN0YW5nbGVzIGludGVyc2VjdCwgdGhlbiBjbGlwcGluZyBwb2ludHMgYXJlIGNlbnRlcnNcbiAgaWYgKHJlY3RBLmludGVyc2VjdHMocmVjdEIpKSB7XG4gICAgcmVzdWx0WzBdID0gcDF4O1xuICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICByZXN1bHRbMl0gPSBwMng7XG4gICAgcmVzdWx0WzNdID0gcDJ5O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QVxuICB2YXIgdG9wTGVmdEF4ID0gcmVjdEEuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEF5ID0gcmVjdEEuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRBeCA9IHJlY3RBLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QXggPSByZWN0QS5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QXkgPSByZWN0QS5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QXggPSByZWN0QS5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQSA9IHJlY3RBLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEEgPSByZWN0QS5nZXRIZWlnaHRIYWxmKCk7XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QlxuICB2YXIgdG9wTGVmdEJ4ID0gcmVjdEIuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEJ5ID0gcmVjdEIuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRCeCA9IHJlY3RCLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QnggPSByZWN0Qi5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QnkgPSByZWN0Qi5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QnggPSByZWN0Qi5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQiA9IHJlY3RCLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEIgPSByZWN0Qi5nZXRIZWlnaHRIYWxmKCk7XG5cbiAgLy9mbGFnIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICB2YXIgY2xpcFBvaW50QUZvdW5kID0gZmFsc2U7XG4gIHZhciBjbGlwUG9pbnRCRm91bmQgPSBmYWxzZTtcblxuICAvLyBsaW5lIGlzIHZlcnRpY2FsXG4gIGlmIChwMXggPT09IHAyeCkge1xuICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgIHJlc3VsdFswXSA9IHAxeDtcbiAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgIHJlc3VsdFsyXSA9IHAyeDtcbiAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHAxeSA8IHAyeSkge1xuICAgICAgcmVzdWx0WzBdID0gcDF4O1xuICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgcmVzdWx0WzJdID0gcDJ4O1xuICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25vdCBsaW5lLCByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gbGluZSBpcyBob3Jpem9udGFsXG4gIGVsc2UgaWYgKHAxeSA9PT0gcDJ5KSB7XG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcExlZnRBeDtcbiAgICAgICAgcmVzdWx0WzFdID0gcDF5O1xuICAgICAgICByZXN1bHRbMl0gPSB0b3BSaWdodEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocDF4IDwgcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcFJpZ2h0QXg7XG4gICAgICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICAgICAgcmVzdWx0WzJdID0gdG9wTGVmdEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vbm90IHZhbGlkIGxpbmUsIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL3Nsb3BlcyBvZiByZWN0QSdzIGFuZCByZWN0QidzIGRpYWdvbmFsc1xuICAgICAgdmFyIHNsb3BlQSA9IHJlY3RBLmhlaWdodCAvIHJlY3RBLndpZHRoO1xuICAgICAgdmFyIHNsb3BlQiA9IHJlY3RCLmhlaWdodCAvIHJlY3RCLndpZHRoO1xuXG4gICAgICAvL3Nsb3BlIG9mIGxpbmUgYmV0d2VlbiBjZW50ZXIgb2YgcmVjdEEgYW5kIGNlbnRlciBvZiByZWN0QlxuICAgICAgdmFyIHNsb3BlUHJpbWUgPSAocDJ5IC0gcDF5KSAvIChwMnggLSBwMXgpO1xuICAgICAgdmFyIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHZvaWQgMDtcbiAgICAgIHZhciBjYXJkaW5hbERpcmVjdGlvbkIgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXkgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnkgPSB2b2lkIDA7XG5cbiAgICAgIC8vZGV0ZXJtaW5lIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnQgaXMgdGhlIGNvcm5lciBvZiBub2RlQVxuICAgICAgaWYgKC1zbG9wZUEgPT09IHNsb3BlUHJpbWUpIHtcbiAgICAgICAgaWYgKHAxeCA+IHAyeCkge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgY2xpcFBvaW50QUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbMF0gPSB0b3BSaWdodEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsb3BlQSA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gdG9wTGVmdEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbVJpZ2h0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9kZXRlcm1pbmUgd2hldGhlciBjbGlwcGluZyBwb2ludCBpcyB0aGUgY29ybmVyIG9mIG5vZGVCXG4gICAgICBpZiAoLXNsb3BlQiA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDJ4ID4gcDF4KSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tTGVmdEJ4O1xuICAgICAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICBjbGlwUG9pbnRCRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFsyXSA9IHRvcFJpZ2h0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xvcGVCID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMnggPiBwMXgpIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSB0b3BMZWZ0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2lmIGJvdGggY2xpcHBpbmcgcG9pbnRzIGFyZSBjb3JuZXJzXG4gICAgICBpZiAoY2xpcFBvaW50QUZvdW5kICYmIGNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vZGV0ZXJtaW5lIENhcmRpbmFsIERpcmVjdGlvbiBvZiByZWN0YW5nbGVzXG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgNCk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMyk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMSk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgMik7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL2NhbGN1bGF0ZSBjbGlwcGluZyBQb2ludCBpZiBpdCBpcyBub3QgZm91bmQgYmVmb3JlXG4gICAgICBpZiAoIWNsaXBQb2ludEFGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gdG9wTGVmdEF5O1xuICAgICAgICAgICAgdGVtcFBvaW50QXggPSBwMXggKyAtaGFsZkhlaWdodEEgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gYm90dG9tUmlnaHRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgaGFsZldpZHRoQSAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IHAxeCArIGhhbGZIZWlnaHRBIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IHRlbXBQb2ludEF4O1xuICAgICAgICAgICAgcmVzdWx0WzFdID0gdGVtcFBvaW50QXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgLWhhbGZXaWR0aEEgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gdG9wTGVmdEJ5O1xuICAgICAgICAgICAgdGVtcFBvaW50QnggPSBwMnggKyAtaGFsZkhlaWdodEIgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgaGFsZldpZHRoQiAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IHAyeCArIGhhbGZIZWlnaHRCIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFsyXSA9IHRlbXBQb2ludEJ4O1xuICAgICAgICAgICAgcmVzdWx0WzNdID0gdGVtcFBvaW50Qnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IGJvdHRvbUxlZnRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgLWhhbGZXaWR0aEIgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW4gd2hpY2ggY2FyZGluYWwgZGlyZWN0aW9uIGRvZXMgaW5wdXQgcG9pbnQgc3RheXNcbiAqIDE6IE5vcnRoXG4gKiAyOiBFYXN0XG4gKiAzOiBTb3V0aFxuICogNDogV2VzdFxuICovXG5JR2VvbWV0cnkuZ2V0Q2FyZGluYWxEaXJlY3Rpb24gPSBmdW5jdGlvbiAoc2xvcGUsIHNsb3BlUHJpbWUsIGxpbmUpIHtcbiAgaWYgKHNsb3BlID4gc2xvcGVQcmltZSkge1xuICAgIHJldHVybiBsaW5lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxICsgbGluZSAlIDQ7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgZGVmaW5lZCBieVxuICogcG9pbnQgcGFpcnMgKHMxLHMyKSBhbmQgKGYxLGYyKS5cbiAqL1xuSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChzMSwgczIsIGYxLCBmMikge1xuICBpZiAoZjIgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoczEsIHMyLCBmMSk7XG4gIH1cblxuICB2YXIgeDEgPSBzMS54O1xuICB2YXIgeTEgPSBzMS55O1xuICB2YXIgeDIgPSBzMi54O1xuICB2YXIgeTIgPSBzMi55O1xuICB2YXIgeDMgPSBmMS54O1xuICB2YXIgeTMgPSBmMS55O1xuICB2YXIgeDQgPSBmMi54O1xuICB2YXIgeTQgPSBmMi55O1xuICB2YXIgeCA9IHZvaWQgMCxcbiAgICAgIHkgPSB2b2lkIDA7IC8vIGludGVyc2VjdGlvbiBwb2ludFxuICB2YXIgYTEgPSB2b2lkIDAsXG4gICAgICBhMiA9IHZvaWQgMCxcbiAgICAgIGIxID0gdm9pZCAwLFxuICAgICAgYjIgPSB2b2lkIDAsXG4gICAgICBjMSA9IHZvaWQgMCxcbiAgICAgIGMyID0gdm9pZCAwOyAvLyBjb2VmZmljaWVudHMgb2YgbGluZSBlcW5zLlxuICB2YXIgZGVub20gPSB2b2lkIDA7XG5cbiAgYTEgPSB5MiAtIHkxO1xuICBiMSA9IHgxIC0geDI7XG4gIGMxID0geDIgKiB5MSAtIHgxICogeTI7IC8vIHsgYTEqeCArIGIxKnkgKyBjMSA9IDAgaXMgbGluZSAxIH1cblxuICBhMiA9IHk0IC0geTM7XG4gIGIyID0geDMgLSB4NDtcbiAgYzIgPSB4NCAqIHkzIC0geDMgKiB5NDsgLy8geyBhMip4ICsgYjIqeSArIGMyID0gMCBpcyBsaW5lIDIgfVxuXG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG5cbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB4ID0gKGIxICogYzIgLSBiMiAqIGMxKSAvIGRlbm9tO1xuICB5ID0gKGEyICogYzEgLSBhMSAqIGMyKSAvIGRlbm9tO1xuXG4gIHJldHVybiBuZXcgUG9pbnQoeCwgeSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBhbmdsZSBvZiB0aGUgdmVjdG9yIGZyb20gdGhlICsgeC1heGlzXG4gKiBpbiBjbG9ja3dpc2UgZGlyZWN0aW9uIChjb21wYXRpYmxlIHcvIEphdmEgY29vcmRpbmF0ZSBzeXN0ZW0hKS5cbiAqL1xuSUdlb21ldHJ5LmFuZ2xlT2ZWZWN0b3IgPSBmdW5jdGlvbiAoQ3gsIEN5LCBOeCwgTnkpIHtcbiAgdmFyIENfYW5nbGUgPSB2b2lkIDA7XG5cbiAgaWYgKEN4ICE9PSBOeCkge1xuICAgIENfYW5nbGUgPSBNYXRoLmF0YW4oKE55IC0gQ3kpIC8gKE54IC0gQ3gpKTtcblxuICAgIGlmIChOeCA8IEN4KSB7XG4gICAgICBDX2FuZ2xlICs9IE1hdGguUEk7XG4gICAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgICBDX2FuZ2xlICs9IHRoaXMuVFdPX1BJO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgQ19hbmdsZSA9IHRoaXMuT05FX0FORF9IQUxGX1BJOyAvLyAyNzAgZGVncmVlc1xuICB9IGVsc2Uge1xuICAgIENfYW5nbGUgPSB0aGlzLkhBTEZfUEk7IC8vIDkwIGRlZ3JlZXNcbiAgfVxuXG4gIHJldHVybiBDX2FuZ2xlO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gdHdvIGxpbmUgc2VnbWVudHMgKG9uZSB3aXRoIHBvaW50XG4gKiBwMSBhbmQgcDIsIHRoZSBvdGhlciB3aXRoIHBvaW50IHAzIGFuZCBwNCkgaW50ZXJzZWN0IGF0IGEgcG9pbnQgb3RoZXJcbiAqIHRoYW4gdGhlc2UgcG9pbnRzLlxuICovXG5JR2VvbWV0cnkuZG9JbnRlcnNlY3QgPSBmdW5jdGlvbiAocDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIGEgPSBwMS54O1xuICB2YXIgYiA9IHAxLnk7XG4gIHZhciBjID0gcDIueDtcbiAgdmFyIGQgPSBwMi55O1xuICB2YXIgcCA9IHAzLng7XG4gIHZhciBxID0gcDMueTtcbiAgdmFyIHIgPSBwNC54O1xuICB2YXIgcyA9IHA0Lnk7XG4gIHZhciBkZXQgPSAoYyAtIGEpICogKHMgLSBxKSAtIChyIC0gcCkgKiAoZCAtIGIpO1xuXG4gIGlmIChkZXQgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhbWJkYSA9ICgocyAtIHEpICogKHIgLSBhKSArIChwIC0gcikgKiAocyAtIGIpKSAvIGRldDtcbiAgICB2YXIgZ2FtbWEgPSAoKGIgLSBkKSAqIChyIC0gYSkgKyAoYyAtIGEpICogKHMgLSBiKSkgLyBkZXQ7XG4gICAgcmV0dXJuIDAgPCBsYW1iZGEgJiYgbGFtYmRhIDwgMSAmJiAwIDwgZ2FtbWEgJiYgZ2FtbWEgPCAxO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VjdGlvbjogQ2xhc3MgQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBTb21lIHVzZWZ1bCBwcmUtY2FsY3VsYXRlZCBjb25zdGFudHNcbiAqL1xuSUdlb21ldHJ5LkhBTEZfUEkgPSAwLjUgKiBNYXRoLlBJO1xuSUdlb21ldHJ5Lk9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIE1hdGguUEk7XG5JR2VvbWV0cnkuVFdPX1BJID0gMi4wICogTWF0aC5QSTtcbklHZW9tZXRyeS5USFJFRV9QSSA9IDMuMCAqIE1hdGguUEk7XG5cbm1vZHVsZS5leHBvcnRzID0gSUdlb21ldHJ5O1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gSU1hdGgoKSB7fVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGlucHV0IHZhbHVlLlxuICovXG5JTWF0aC5zaWduID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA+IDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbklNYXRoLmZsb29yID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLmNlaWwodmFsdWUpIDogTWF0aC5mbG9vcih2YWx1ZSk7XG59O1xuXG5JTWF0aC5jZWlsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLmZsb29yKHZhbHVlKSA6IE1hdGguY2VpbCh2YWx1ZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IElNYXRoO1xuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIEludGVnZXIoKSB7fVxuXG5JbnRlZ2VyLk1BWF9WQUxVRSA9IDIxNDc0ODM2NDc7XG5JbnRlZ2VyLk1JTl9WQUxVRSA9IC0yMTQ3NDgzNjQ4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVnZXI7XG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIG5vZGVGcm9tID0gZnVuY3Rpb24gbm9kZUZyb20odmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBuZXh0OiBudWxsLCBwcmV2OiBudWxsIH07XG59O1xuXG52YXIgYWRkID0gZnVuY3Rpb24gYWRkKHByZXYsIG5vZGUsIG5leHQsIGxpc3QpIHtcbiAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICBwcmV2Lm5leHQgPSBub2RlO1xuICB9IGVsc2Uge1xuICAgIGxpc3QuaGVhZCA9IG5vZGU7XG4gIH1cblxuICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgIG5leHQucHJldiA9IG5vZGU7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC50YWlsID0gbm9kZTtcbiAgfVxuXG4gIG5vZGUucHJldiA9IHByZXY7XG4gIG5vZGUubmV4dCA9IG5leHQ7XG5cbiAgbGlzdC5sZW5ndGgrKztcblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBfcmVtb3ZlID0gZnVuY3Rpb24gX3JlbW92ZShub2RlLCBsaXN0KSB7XG4gIHZhciBwcmV2ID0gbm9kZS5wcmV2LFxuICAgICAgbmV4dCA9IG5vZGUubmV4dDtcblxuXG4gIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgcHJldi5uZXh0ID0gbmV4dDtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LmhlYWQgPSBuZXh0O1xuICB9XG5cbiAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICBuZXh0LnByZXYgPSBwcmV2O1xuICB9IGVsc2Uge1xuICAgIGxpc3QudGFpbCA9IHByZXY7XG4gIH1cblxuICBub2RlLnByZXYgPSBub2RlLm5leHQgPSBudWxsO1xuXG4gIGxpc3QubGVuZ3RoLS07XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG52YXIgTGlua2VkTGlzdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGlua2VkTGlzdCh2YWxzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5rZWRMaXN0KTtcblxuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG5cbiAgICBpZiAodmFscyAhPSBudWxsKSB7XG4gICAgICB2YWxzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnB1c2godik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGlua2VkTGlzdCwgW3tcbiAgICBrZXk6IFwic2l6ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnRCZWZvcmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHZhbCwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZS5wcmV2LCBub2RlRnJvbSh2YWwpLCBvdGhlck5vZGUsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnRBZnRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnRBZnRlcih2YWwsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUsIG5vZGVGcm9tKHZhbCksIG90aGVyTm9kZS5uZXh0LCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0Tm9kZUJlZm9yZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnROb2RlQmVmb3JlKG5ld05vZGUsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUucHJldiwgbmV3Tm9kZSwgb3RoZXJOb2RlLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0Tm9kZUFmdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydE5vZGVBZnRlcihuZXdOb2RlLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLCBuZXdOb2RlLCBvdGhlck5vZGUubmV4dCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInB1c2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHVzaCh2YWwpIHtcbiAgICAgIHJldHVybiBhZGQodGhpcy50YWlsLCBub2RlRnJvbSh2YWwpLCBudWxsLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5zaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnNoaWZ0KHZhbCkge1xuICAgICAgcmV0dXJuIGFkZChudWxsLCBub2RlRnJvbSh2YWwpLCB0aGlzLmhlYWQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKG5vZGUpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKG5vZGUsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwb3BcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcG9wKCkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUodGhpcy50YWlsLCB0aGlzKS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicG9wTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwb3BOb2RlKCkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUodGhpcy50YWlsLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hpZnQoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLmhlYWQsIHRoaXMpLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaGlmdE5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hpZnROb2RlKCkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUodGhpcy5oZWFkLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0X29iamVjdF9hdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRfb2JqZWN0X2F0KGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPD0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICB2YXIgaSA9IDE7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5oZWFkO1xuICAgICAgICB3aGlsZSAoaSA8IGluZGV4KSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldF9vYmplY3RfYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0X29iamVjdF9hdChpbmRleCwgdmFsdWUpIHtcbiAgICAgIGlmIChpbmRleCA8PSB0aGlzLmxlbmd0aCgpKSB7XG4gICAgICAgIHZhciBpID0gMTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmhlYWQ7XG4gICAgICAgIHdoaWxlIChpIDwgaW5kZXgpIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExpbmtlZExpc3Q7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2VkTGlzdDtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vKlxyXG4gKlRoaXMgY2xhc3MgaXMgdGhlIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvaW50LmphdmEgY2xhc3MgaW4gamRrXHJcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSwgcCkge1xuICB0aGlzLnggPSBudWxsO1xuICB0aGlzLnkgPSBudWxsO1xuICBpZiAoeCA9PSBudWxsICYmIHkgPT0gbnVsbCAmJiBwID09IG51bGwpIHtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHggPT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT0gJ251bWJlcicgJiYgcCA9PSBudWxsKSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9IGVsc2UgaWYgKHguY29uc3RydWN0b3IubmFtZSA9PSAnUG9pbnQnICYmIHkgPT0gbnVsbCAmJiBwID09IG51bGwpIHtcbiAgICBwID0geDtcbiAgICB0aGlzLnggPSBwLng7XG4gICAgdGhpcy55ID0gcC55O1xuICB9XG59XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54O1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnNldExvY2F0aW9uID0gZnVuY3Rpb24gKHgsIHksIHApIHtcbiAgaWYgKHguY29uc3RydWN0b3IubmFtZSA9PSAnUG9pbnQnICYmIHkgPT0gbnVsbCAmJiBwID09IG51bGwpIHtcbiAgICBwID0geDtcbiAgICB0aGlzLnNldExvY2F0aW9uKHAueCwgcC55KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PSAnbnVtYmVyJyAmJiB0eXBlb2YgeSA9PSAnbnVtYmVyJyAmJiBwID09IG51bGwpIHtcbiAgICAvL2lmIGJvdGggcGFyYW1ldGVycyBhcmUgaW50ZWdlciBqdXN0IG1vdmUgKHgseSkgbG9jYXRpb25cbiAgICBpZiAocGFyc2VJbnQoeCkgPT0geCAmJiBwYXJzZUludCh5KSA9PSB5KSB7XG4gICAgICB0aGlzLm1vdmUoeCwgeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMueCA9IE1hdGguZmxvb3IoeCArIDAuNSk7XG4gICAgICB0aGlzLnkgPSBNYXRoLmZsb29yKHkgKyAwLjUpO1xuICAgIH1cbiAgfVxufTtcblxuUG9pbnQucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChkeCwgZHkpIHtcbiAgdGhpcy54ICs9IGR4O1xuICB0aGlzLnkgKz0gZHk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG9iaikge1xuICBpZiAob2JqLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJQb2ludFwiKSB7XG4gICAgdmFyIHB0ID0gb2JqO1xuICAgIHJldHVybiB0aGlzLnggPT0gcHQueCAmJiB0aGlzLnkgPT0gcHQueTtcbiAgfVxuICByZXR1cm4gdGhpcyA9PSBvYmo7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnQoKS5jb25zdHJ1Y3Rvci5uYW1lICsgXCJbeD1cIiArIHRoaXMueCArIFwiLHk9XCIgKyB0aGlzLnkgKyBcIl1cIjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gUmVjdGFuZ2xlRCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHRoaXMueCA9IDA7XG4gIHRoaXMueSA9IDA7XG4gIHRoaXMud2lkdGggPSAwO1xuICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgaWYgKHggIT0gbnVsbCAmJiB5ICE9IG51bGwgJiYgd2lkdGggIT0gbnVsbCAmJiBoZWlnaHQgIT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cbn1cblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeCkge1xuICB0aGlzLnggPSB4O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbiAoeSkge1xuICB0aGlzLnkgPSB5O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLndpZHRoO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbiAod2lkdGgpIHtcbiAgdGhpcy53aWR0aCA9IHdpZHRoO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbiAoaGVpZ2h0KSB7XG4gIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0UmlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55ICsgdGhpcy5oZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5pbnRlcnNlY3RzID0gZnVuY3Rpb24gKGEpIHtcbiAgaWYgKHRoaXMuZ2V0UmlnaHQoKSA8IGEueCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLmdldEJvdHRvbSgpIDwgYS55KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEuZ2V0UmlnaHQoKSA8IHRoaXMueCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhLmdldEJvdHRvbSgpIDwgdGhpcy55KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRDZW50ZXJYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54ICsgdGhpcy53aWR0aCAvIDI7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNaW5YID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRYKCk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNYXhYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRYKCkgKyB0aGlzLndpZHRoO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0Q2VudGVyWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueSArIHRoaXMuaGVpZ2h0IC8gMjtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1pblkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFkoKTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1heFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFkoKSArIHRoaXMuaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aCAvIDI7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oZWlnaHQgLyAyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGVEO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gVW5pcXVlSURHZW5lcmV0b3IoKSB7fVxuXG5VbmlxdWVJREdlbmVyZXRvci5sYXN0SUQgPSAwO1xuXG5VbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKFVuaXF1ZUlER2VuZXJldG9yLmlzUHJpbWl0aXZlKG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChvYmoudW5pcXVlSUQgIT0gbnVsbCkge1xuICAgIHJldHVybiBvYmoudW5pcXVlSUQ7XG4gIH1cbiAgb2JqLnVuaXF1ZUlEID0gVW5pcXVlSURHZW5lcmV0b3IuZ2V0U3RyaW5nKCk7XG4gIFVuaXF1ZUlER2VuZXJldG9yLmxhc3RJRCsrO1xuICByZXR1cm4gb2JqLnVuaXF1ZUlEO1xufTtcblxuVW5pcXVlSURHZW5lcmV0b3IuZ2V0U3RyaW5nID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChpZCA9PSBudWxsKSBpZCA9IFVuaXF1ZUlER2VuZXJldG9yLmxhc3RJRDtcbiAgcmV0dXJuIFwiT2JqZWN0I1wiICsgaWQgKyBcIlwiO1xufTtcblxuVW5pcXVlSURHZW5lcmV0b3IuaXNQcmltaXRpdmUgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGFyZyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKGFyZyk7XG4gIHJldHVybiBhcmcgPT0gbnVsbCB8fCB0eXBlICE9IFwib2JqZWN0XCIgJiYgdHlwZSAhPSBcImZ1bmN0aW9uXCI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaXF1ZUlER2VuZXJldG9yO1xuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBMR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBMTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBUcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBFbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5cbmZ1bmN0aW9uIExheW91dChpc1JlbW90ZVVzZSkge1xuICBFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgLy9MYXlvdXQgUXVhbGl0eTogMDpkcmFmdCwgMTpkZWZhdWx0LCAyOnByb29mXG4gIHRoaXMubGF5b3V0UXVhbGl0eSA9IExheW91dENvbnN0YW50cy5RVUFMSVRZO1xuICAvL1doZXRoZXIgbGF5b3V0IHNob3VsZCBjcmVhdGUgYmVuZHBvaW50cyBhcyBuZWVkZWQgb3Igbm90XG4gIHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7XG4gIC8vV2hldGhlciBsYXlvdXQgc2hvdWxkIGJlIGluY3JlbWVudGFsIG9yIG5vdFxuICB0aGlzLmluY3JlbWVudGFsID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUw7XG4gIC8vV2hldGhlciB3ZSBhbmltYXRlIGZyb20gYmVmb3JlIHRvIGFmdGVyIGxheW91dCBub2RlIHBvc2l0aW9uc1xuICB0aGlzLmFuaW1hdGlvbk9uTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVDtcbiAgLy9XaGV0aGVyIHdlIGFuaW1hdGUgdGhlIGxheW91dCBwcm9jZXNzIG9yIG5vdFxuICB0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUO1xuICAvL051bWJlciBpdGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIGRvbmUgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBhbmltYXRpb25zXG4gIHRoaXMuYW5pbWF0aW9uUGVyaW9kID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRDtcbiAgLyoqXHJcbiAgICogV2hldGhlciBvciBub3QgbGVhZiBub2RlcyAobm9uLWNvbXBvdW5kIG5vZGVzKSBhcmUgb2YgdW5pZm9ybSBzaXplcy4gV2hlblxyXG4gICAqIHRoZXkgYXJlLCBib3RoIHNwcmluZyBhbmQgcmVwdWxzaW9uIGZvcmNlcyBiZXR3ZWVuIHR3byBsZWFmIG5vZGVzIGNhbiBiZVxyXG4gICAqIGNhbGN1bGF0ZWQgd2l0aG91dCB0aGUgZXhwZW5zaXZlIGNsaXBwaW5nIHBvaW50IGNhbGN1bGF0aW9ucywgcmVzdWx0aW5nXHJcbiAgICogaW4gbWFqb3Igc3BlZWQtdXAuXHJcbiAgICovXG4gIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUztcbiAgLyoqXHJcbiAgICogVGhpcyBpcyB1c2VkIGZvciBjcmVhdGlvbiBvZiBiZW5kcG9pbnRzIGJ5IHVzaW5nIGR1bW15IG5vZGVzIGFuZCBlZGdlcy5cclxuICAgKiBNYXBzIGFuIExFZGdlIHRvIGl0cyBkdW1teSBiZW5kcG9pbnQgcGF0aC5cclxuICAgKi9cbiAgdGhpcy5lZGdlVG9EdW1teU5vZGVzID0gbmV3IE1hcCgpO1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IG5ldyBMR3JhcGhNYW5hZ2VyKHRoaXMpO1xuICB0aGlzLmlzTGF5b3V0RmluaXNoZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1N1YkxheW91dCA9IGZhbHNlO1xuICB0aGlzLmlzUmVtb3RlVXNlID0gZmFsc2U7XG5cbiAgaWYgKGlzUmVtb3RlVXNlICE9IG51bGwpIHtcbiAgICB0aGlzLmlzUmVtb3RlVXNlID0gaXNSZW1vdGVVc2U7XG4gIH1cbn1cblxuTGF5b3V0LlJBTkRPTV9TRUVEID0gMTtcblxuTGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRW1pdHRlci5wcm90b3R5cGUpO1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEFsbEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBnbSA9IG5ldyBMR3JhcGhNYW5hZ2VyKHRoaXMpO1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xuICByZXR1cm4gZ207XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoID0gZnVuY3Rpb24gKHZHcmFwaCkge1xuICByZXR1cm4gbmV3IExHcmFwaChudWxsLCB0aGlzLmdyYXBoTWFuYWdlciwgdkdyYXBoKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3Tm9kZSA9IGZ1bmN0aW9uICh2Tm9kZSkge1xuICByZXR1cm4gbmV3IExOb2RlKHRoaXMuZ3JhcGhNYW5hZ2VyLCB2Tm9kZSk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld0VkZ2UgPSBmdW5jdGlvbiAodkVkZ2UpIHtcbiAgcmV0dXJuIG5ldyBMRWRnZShudWxsLCBudWxsLCB2RWRnZSk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSA9PSBudWxsIHx8IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aCA9PSAwIHx8IHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUucnVuTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmlzTGF5b3V0RmluaXNoZWQgPSBmYWxzZTtcblxuICBpZiAodGhpcy50aWxpbmdQcmVMYXlvdXQpIHtcbiAgICB0aGlzLnRpbGluZ1ByZUxheW91dCgpO1xuICB9XG5cbiAgdGhpcy5pbml0UGFyYW1ldGVycygpO1xuICB2YXIgaXNMYXlvdXRTdWNjZXNzZnVsbDtcblxuICBpZiAodGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKSkge1xuICAgIGlzTGF5b3V0U3VjY2Vzc2Z1bGwgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBpc0xheW91dFN1Y2Nlc3NmdWxsID0gdGhpcy5sYXlvdXQoKTtcbiAgfVxuXG4gIGlmIChMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9PT0gJ2R1cmluZycpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgJ2R1cmluZycgbGF5b3V0IGFuaW1hdGlvbi4gTGF5b3V0IGlzIG5vdCBmaW5pc2hlZCB5ZXQuIFxuICAgIC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGVzZSBpbiBpbmRleC5qcyB3aGVuIGxheW91dCBpcyByZWFsbHkgZmluaXNoZWQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzTGF5b3V0U3VjY2Vzc2Z1bGwpIHtcbiAgICBpZiAoIXRoaXMuaXNTdWJMYXlvdXQpIHtcbiAgICAgIHRoaXMuZG9Qb3N0TGF5b3V0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMudGlsaW5nUG9zdExheW91dCkge1xuICAgIHRoaXMudGlsaW5nUG9zdExheW91dCgpO1xuICB9XG5cbiAgdGhpcy5pc0xheW91dEZpbmlzaGVkID0gdHJ1ZTtcblxuICByZXR1cm4gaXNMYXlvdXRTdWNjZXNzZnVsbDtcbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgb3BlcmF0aW9ucyByZXF1aXJlZCBhZnRlciBsYXlvdXQuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vYXNzZXJ0ICFpc1N1YkxheW91dCA6IFwiU2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gc3ViLWxheW91dCFcIjtcbiAgLy8gUHJvcGFnYXRlIGdlb21ldHJpYyBjaGFuZ2VzIHRvIHYtbGV2ZWwgb2JqZWN0c1xuICBpZiAoIXRoaXMuaW5jcmVtZW50YWwpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSgpO1xuICB9XG4gIHRoaXMudXBkYXRlKCk7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgZ2VvbWV0cnkgb2YgdGhlIHRhcmdldCBncmFwaCBhY2NvcmRpbmcgdG9cclxuICogY2FsY3VsYXRlZCBsYXlvdXQuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS51cGRhdGUyID0gZnVuY3Rpb24gKCkge1xuICAvLyB1cGRhdGUgYmVuZCBwb2ludHNcbiAgaWYgKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCkge1xuICAgIHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCk7XG5cbiAgICAvLyByZXNldCBhbGwgZWRnZXMsIHNpbmNlIHRoZSB0b3BvbG9neSBoYXMgY2hhbmdlZFxuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbiAgfVxuXG4gIC8vIHBlcmZvcm0gZWRnZSwgbm9kZSBhbmQgcm9vdCB1cGRhdGVzIGlmIGxheW91dCBpcyBub3QgY2FsbGVkXG4gIC8vIHJlbW90ZWx5XG4gIGlmICghdGhpcy5pc1JlbW90ZVVzZSkge1xuICAgIC8vIHVwZGF0ZSBhbGwgZWRnZXNcbiAgICB2YXIgZWRnZTtcbiAgICB2YXIgYWxsRWRnZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBhbGxFZGdlc1tpXTtcbiAgICAgIC8vICAgICAgdGhpcy51cGRhdGUoZWRnZSk7XG4gICAgfVxuXG4gICAgLy8gcmVjdXJzaXZlbHkgdXBkYXRlIG5vZGVzXG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgLy8gICAgICB0aGlzLnVwZGF0ZShub2RlKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgcm9vdCBncmFwaFxuICAgIHRoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSk7XG4gIH1cbn07XG5cbkxheW91dC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZTIoKTtcbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMTm9kZSkge1xuICAgIHZhciBub2RlID0gb2JqO1xuICAgIGlmIChub2RlLmdldENoaWxkKCkgIT0gbnVsbCkge1xuICAgICAgLy8gc2luY2Ugbm9kZSBpcyBjb21wb3VuZCwgcmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIG5vZGVzXG4gICAgICB2YXIgbm9kZXMgPSBub2RlLmdldENoaWxkKCkuZ2V0Tm9kZXMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXBkYXRlKG5vZGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgbC1sZXZlbCBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHYtbGV2ZWwgZ3JhcGggb2JqZWN0LFxuICAgIC8vIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB2LWxldmVsIG5vZGUgaW1wbGVtZW50cyB0aGVcbiAgICAvLyBpbnRlcmZhY2UgVXBkYXRhYmxlLlxuICAgIGlmIChub2RlLnZHcmFwaE9iamVjdCAhPSBudWxsKSB7XG4gICAgICAvLyBjYXN0IHRvIFVwZGF0YWJsZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrXG4gICAgICB2YXIgdk5vZGUgPSBub2RlLnZHcmFwaE9iamVjdDtcblxuICAgICAgLy8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgaW50ZXJmYWNlXG4gICAgICB2Tm9kZS51cGRhdGUobm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExFZGdlKSB7XG4gICAgdmFyIGVkZ2UgPSBvYmo7XG4gICAgLy8gaWYgdGhlIGwtbGV2ZWwgZWRnZSBpcyBhc3NvY2lhdGVkIHdpdGggYSB2LWxldmVsIGdyYXBoIG9iamVjdCxcbiAgICAvLyB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdi1sZXZlbCBlZGdlIGltcGxlbWVudHMgdGhlXG4gICAgLy8gaW50ZXJmYWNlIFVwZGF0YWJsZS5cblxuICAgIGlmIChlZGdlLnZHcmFwaE9iamVjdCAhPSBudWxsKSB7XG4gICAgICAvLyBjYXN0IHRvIFVwZGF0YWJsZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrXG4gICAgICB2YXIgdkVkZ2UgPSBlZGdlLnZHcmFwaE9iamVjdDtcblxuICAgICAgLy8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgaW50ZXJmYWNlXG4gICAgICB2RWRnZS51cGRhdGUoZWRnZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExHcmFwaCkge1xuICAgIHZhciBncmFwaCA9IG9iajtcbiAgICAvLyBpZiB0aGUgbC1sZXZlbCBncmFwaCBpcyBhc3NvY2lhdGVkIHdpdGggYSB2LWxldmVsIGdyYXBoIG9iamVjdCxcbiAgICAvLyB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdi1sZXZlbCBvYmplY3QgaW1wbGVtZW50cyB0aGVcbiAgICAvLyBpbnRlcmZhY2UgVXBkYXRhYmxlLlxuXG4gICAgaWYgKGdyYXBoLnZHcmFwaE9iamVjdCAhPSBudWxsKSB7XG4gICAgICAvLyBjYXN0IHRvIFVwZGF0YWJsZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrXG4gICAgICB2YXIgdkdyYXBoID0gZ3JhcGgudkdyYXBoT2JqZWN0O1xuXG4gICAgICAvLyBjYWxsIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBpbnRlcmZhY2VcbiAgICAgIHZHcmFwaC51cGRhdGUoZ3JhcGgpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGFsbCBsYXlvdXQgcGFyYW1ldGVycyB0byBkZWZhdWx0IHZhbHVlc1xyXG4gKiBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZS5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuaXNTdWJMYXlvdXQpIHtcbiAgICB0aGlzLmxheW91dFF1YWxpdHkgPSBMYXlvdXRDb25zdGFudHMuUVVBTElUWTtcbiAgICB0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUO1xuICAgIHRoaXMuYW5pbWF0aW9uUGVyaW9kID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRDtcbiAgICB0aGlzLmFuaW1hdGlvbk9uTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVDtcbiAgICB0aGlzLmluY3JlbWVudGFsID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUw7XG4gICAgdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgICB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM7XG4gIH1cblxuICBpZiAodGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQpIHtcbiAgICB0aGlzLmFuaW1hdGlvbk9uTGF5b3V0ID0gZmFsc2U7XG4gIH1cbn07XG5cbkxheW91dC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKG5ld0xlZnRUb3ApIHtcbiAgaWYgKG5ld0xlZnRUb3AgPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0obmV3IFBvaW50RCgwLCAwKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGEgdHJhbnNmb3JtYXRpb24gb2JqZWN0IChmcm9tIEVjbGlwc2UgdG8gbGF5b3V0KS4gV2hlbiBhblxuICAgIC8vIGludmVyc2UgdHJhbnNmb3JtIGlzIGFwcGxpZWQsIHdlIGdldCB1cHBlci1sZWZ0IGNvb3JkaW5hdGUgb2YgdGhlXG4gICAgLy8gZHJhd2luZyBvciB0aGUgcm9vdCBncmFwaCBhdCBnaXZlbiBpbnB1dCBjb29yZGluYXRlIChzb21lIG1hcmdpbnNcbiAgICAvLyBhbHJlYWR5IGluY2x1ZGVkIGluIGNhbGN1bGF0aW9uIG9mIGxlZnQtdG9wKS5cblxuICAgIHZhciB0cmFucyA9IG5ldyBUcmFuc2Zvcm0oKTtcbiAgICB2YXIgbGVmdFRvcCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7XG5cbiAgICBpZiAobGVmdFRvcCAhPSBudWxsKSB7XG4gICAgICB0cmFucy5zZXRXb3JsZE9yZ1gobmV3TGVmdFRvcC54KTtcbiAgICAgIHRyYW5zLnNldFdvcmxkT3JnWShuZXdMZWZ0VG9wLnkpO1xuXG4gICAgICB0cmFucy5zZXREZXZpY2VPcmdYKGxlZnRUb3AueCk7XG4gICAgICB0cmFucy5zZXREZXZpY2VPcmdZKGxlZnRUb3AueSk7XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMuZ2V0QWxsTm9kZXMoKTtcbiAgICAgIHZhciBub2RlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgbm9kZS50cmFuc2Zvcm0odHJhbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTGF5b3V0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHkgPSBmdW5jdGlvbiAoZ3JhcGgpIHtcblxuICBpZiAoZ3JhcGggPT0gdW5kZWZpbmVkKSB7XG4gICAgLy9hc3NlcnQgIXRoaXMuaW5jcmVtZW50YWw7XG4gICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpO1xuICAgIHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyh0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbE5vZGU7XG4gICAgdmFyIGNoaWxkR3JhcGg7XG5cbiAgICB2YXIgbm9kZXMgPSBncmFwaC5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxOb2RlID0gbm9kZXNbaV07XG4gICAgICBjaGlsZEdyYXBoID0gbE5vZGUuZ2V0Q2hpbGQoKTtcblxuICAgICAgaWYgKGNoaWxkR3JhcGggPT0gbnVsbCkge1xuICAgICAgICBsTm9kZS5zY2F0dGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkR3JhcGguZ2V0Tm9kZXMoKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsTm9kZS5zY2F0dGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seShjaGlsZEdyYXBoKTtcbiAgICAgICAgbE5vZGUudXBkYXRlQm91bmRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgdHJlZXMgd2hlcmUgZWFjaCB0cmVlIGlzIHJlcHJlc2VudGVkIGFzIGFcclxuICogbGlzdCBvZiBsLW5vZGVzLiBUaGUgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHNpemUgMCB3aGVuOlxyXG4gKiAtIFRoZSBncmFwaCBpcyBub3QgZmxhdCBvclxyXG4gKiAtIE9uZSBvZiB0aGUgY29tcG9uZW50KHMpIG9mIHRoZSBncmFwaCBpcyBub3QgYSB0cmVlLlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGZsYXRGb3Jlc3QgPSBbXTtcbiAgdmFyIGlzRm9yZXN0ID0gdHJ1ZTtcblxuICAvLyBRdWljayByZWZlcmVuY2UgZm9yIGFsbCBub2RlcyBpbiB0aGUgZ3JhcGggbWFuYWdlciBhc3NvY2lhdGVkIHdpdGhcbiAgLy8gdGhpcyBsYXlvdXQuIFRoZSBsaXN0IHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCk7XG5cbiAgLy8gRmlyc3QgYmUgc3VyZSB0aGF0IHRoZSBncmFwaCBpcyBmbGF0XG4gIHZhciBpc0ZsYXQgPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWxsTm9kZXNbaV0uZ2V0Q2hpbGQoKSAhPSBudWxsKSB7XG4gICAgICBpc0ZsYXQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gZW1wdHkgZm9yZXN0IGlmIHRoZSBncmFwaCBpcyBub3QgZmxhdC5cbiAgaWYgKCFpc0ZsYXQpIHtcbiAgICByZXR1cm4gZmxhdEZvcmVzdDtcbiAgfVxuXG4gIC8vIFJ1biBCRlMgZm9yIGVhY2ggY29tcG9uZW50IG9mIHRoZSBncmFwaC5cblxuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHRvQmVWaXNpdGVkID0gW107XG4gIHZhciBwYXJlbnRzID0gbmV3IE1hcCgpO1xuICB2YXIgdW5Qcm9jZXNzZWROb2RlcyA9IFtdO1xuXG4gIHVuUHJvY2Vzc2VkTm9kZXMgPSB1blByb2Nlc3NlZE5vZGVzLmNvbmNhdChhbGxOb2Rlcyk7XG5cbiAgLy8gRWFjaCBpdGVyYXRpb24gb2YgdGhpcyBsb29wIGZpbmRzIGEgY29tcG9uZW50IG9mIHRoZSBncmFwaCBhbmRcbiAgLy8gZGVjaWRlcyB3aGV0aGVyIGl0IGlzIGEgdHJlZSBvciBub3QuIElmIGl0IGlzIGEgdHJlZSwgYWRkcyBpdCB0byB0aGVcbiAgLy8gZm9yZXN0IGFuZCBjb250aW51ZWQgd2l0aCB0aGUgbmV4dCBjb21wb25lbnQuXG5cbiAgd2hpbGUgKHVuUHJvY2Vzc2VkTm9kZXMubGVuZ3RoID4gMCAmJiBpc0ZvcmVzdCkge1xuICAgIHRvQmVWaXNpdGVkLnB1c2godW5Qcm9jZXNzZWROb2Rlc1swXSk7XG5cbiAgICAvLyBTdGFydCB0aGUgQkZTLiBFYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AgdmlzaXRzIGEgbm9kZSBpbiBhXG4gICAgLy8gQkZTIG1hbm5lci5cbiAgICB3aGlsZSAodG9CZVZpc2l0ZWQubGVuZ3RoID4gMCAmJiBpc0ZvcmVzdCkge1xuICAgICAgLy9wb29sIG9wZXJhdGlvblxuICAgICAgdmFyIGN1cnJlbnROb2RlID0gdG9CZVZpc2l0ZWRbMF07XG4gICAgICB0b0JlVmlzaXRlZC5zcGxpY2UoMCwgMSk7XG4gICAgICB2aXNpdGVkLmFkZChjdXJyZW50Tm9kZSk7XG5cbiAgICAgIC8vIFRyYXZlcnNlIGFsbCBuZWlnaGJvcnMgb2YgdGhpcyBub2RlXG4gICAgICB2YXIgbmVpZ2hib3JFZGdlcyA9IGN1cnJlbnROb2RlLmdldEVkZ2VzKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVpZ2hib3JFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3JFZGdlc1tpXS5nZXRPdGhlckVuZChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgLy8gSWYgQkZTIGlzIG5vdCBncm93aW5nIGZyb20gdGhpcyBuZWlnaGJvci5cbiAgICAgICAgaWYgKHBhcmVudHMuZ2V0KGN1cnJlbnROb2RlKSAhPSBjdXJyZW50TmVpZ2hib3IpIHtcbiAgICAgICAgICAvLyBXZSBoYXZlbid0IHByZXZpb3VzbHkgdmlzaXRlZCB0aGlzIG5laWdoYm9yLlxuICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMoY3VycmVudE5laWdoYm9yKSkge1xuICAgICAgICAgICAgdG9CZVZpc2l0ZWQucHVzaChjdXJyZW50TmVpZ2hib3IpO1xuICAgICAgICAgICAgcGFyZW50cy5zZXQoY3VycmVudE5laWdoYm9yLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmUgcHJldmlvdXNseSB2aXNpdGVkIHRoaXMgbmVpZ2hib3IgYW5kXG4gICAgICAgICAgLy8gdGhpcyBuZWlnaGJvciBpcyBub3QgcGFyZW50IG9mIGN1cnJlbnROb2RlLCBnaXZlblxuICAgICAgICAgIC8vIGdyYXBoIGNvbnRhaW5zIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHRyZWUsIGhlbmNlXG4gICAgICAgICAgLy8gaXQgaXMgbm90IGEgZm9yZXN0LlxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpc0ZvcmVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBncmFwaCBjb250YWlucyBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCBhIHRyZWUuIEVtcHR5XG4gICAgLy8gcHJldmlvdXNseSBmb3VuZCB0cmVlcy4gVGhlIG1ldGhvZCB3aWxsIGVuZC5cbiAgICBpZiAoIWlzRm9yZXN0KSB7XG4gICAgICBmbGF0Rm9yZXN0ID0gW107XG4gICAgfVxuICAgIC8vIFNhdmUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZXMgYXMgYSB0cmVlIGluIG91ciBmb3Jlc3QuIFJlc2V0XG4gICAgLy8gdmlzaXRlZCBhbmQgcGFyZW50cyBsaXN0cy4gQ29udGludWUgd2l0aCB0aGUgbmV4dCBjb21wb25lbnQgb2ZcbiAgICAvLyB0aGUgZ3JhcGgsIGlmIGFueS5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRlbXAgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHZpc2l0ZWQpKTtcbiAgICAgICAgZmxhdEZvcmVzdC5wdXNoKHRlbXApO1xuICAgICAgICAvL2ZsYXRGb3Jlc3QgPSBmbGF0Rm9yZXN0LmNvbmNhdCh0ZW1wKTtcbiAgICAgICAgLy91blByb2Nlc3NlZE5vZGVzLnJlbW92ZUFsbCh2aXNpdGVkKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gdGVtcFtpXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSB1blByb2Nlc3NlZE5vZGVzLmluZGV4T2YodmFsdWUpO1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB1blByb2Nlc3NlZE5vZGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIHBhcmVudHMgPSBuZXcgTWFwKCk7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdEZvcmVzdDtcbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGR1bW15IG5vZGVzIChhbiBsLWxldmVsIG5vZGUgd2l0aCBtaW5pbWFsIGRpbWVuc2lvbnMpXHJcbiAqIGZvciB0aGUgZ2l2ZW4gZWRnZSAob25lIHBlciBiZW5kcG9pbnQpLiBUaGUgZXhpc3RpbmcgbC1sZXZlbCBzdHJ1Y3R1cmVcclxuICogaXMgdXBkYXRlZCBhY2NvcmRpbmdseS5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIGR1bW15Tm9kZXMgPSBbXTtcbiAgdmFyIHByZXYgPSBlZGdlLnNvdXJjZTtcblxuICB2YXIgZ3JhcGggPSB0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IoZWRnZS5zb3VyY2UsIGVkZ2UudGFyZ2V0KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2UuYmVuZHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGNyZWF0ZSBuZXcgZHVtbXkgbm9kZVxuICAgIHZhciBkdW1teU5vZGUgPSB0aGlzLm5ld05vZGUobnVsbCk7XG4gICAgZHVtbXlOb2RlLnNldFJlY3QobmV3IFBvaW50KDAsIDApLCBuZXcgRGltZW5zaW9uKDEsIDEpKTtcblxuICAgIGdyYXBoLmFkZChkdW1teU5vZGUpO1xuXG4gICAgLy8gY3JlYXRlIG5ldyBkdW1teSBlZGdlIGJldHdlZW4gcHJldiBhbmQgZHVtbXkgbm9kZVxuICAgIHZhciBkdW1teUVkZ2UgPSB0aGlzLm5ld0VkZ2UobnVsbCk7XG4gICAgdGhpcy5ncmFwaE1hbmFnZXIuYWRkKGR1bW15RWRnZSwgcHJldiwgZHVtbXlOb2RlKTtcblxuICAgIGR1bW15Tm9kZXMuYWRkKGR1bW15Tm9kZSk7XG4gICAgcHJldiA9IGR1bW15Tm9kZTtcbiAgfVxuXG4gIHZhciBkdW1teUVkZ2UgPSB0aGlzLm5ld0VkZ2UobnVsbCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChkdW1teUVkZ2UsIHByZXYsIGVkZ2UudGFyZ2V0KTtcblxuICB0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuc2V0KGVkZ2UsIGR1bW15Tm9kZXMpO1xuXG4gIC8vIHJlbW92ZSByZWFsIGVkZ2UgZnJvbSBncmFwaCBtYW5hZ2VyIGlmIGl0IGlzIGludGVyLWdyYXBoXG4gIGlmIChlZGdlLmlzSW50ZXJHcmFwaCgpKSB7XG4gICAgdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKGVkZ2UpO1xuICB9XG4gIC8vIGVsc2UsIHJlbW92ZSB0aGUgZWRnZSBmcm9tIHRoZSBjdXJyZW50IGdyYXBoXG4gIGVsc2Uge1xuICAgICAgZ3JhcGgucmVtb3ZlKGVkZ2UpO1xuICAgIH1cblxuICByZXR1cm4gZHVtbXlOb2Rlcztcbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGJlbmRwb2ludHMgZm9yIGVkZ2VzIGZyb20gdGhlIGR1bW15IG5vZGVzXHJcbiAqIGF0IGwtbGV2ZWwuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlcyA9IFtdO1xuICBlZGdlcyA9IGVkZ2VzLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTtcbiAgZWRnZXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5rZXlzKCkpKS5jb25jYXQoZWRnZXMpO1xuXG4gIGZvciAodmFyIGsgPSAwOyBrIDwgZWRnZXMubGVuZ3RoOyBrKyspIHtcbiAgICB2YXIgbEVkZ2UgPSBlZGdlc1trXTtcblxuICAgIGlmIChsRWRnZS5iZW5kcG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBwYXRoID0gdGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChsRWRnZSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZHVtbXlOb2RlID0gcGF0aFtpXTtcbiAgICAgICAgdmFyIHAgPSBuZXcgUG9pbnREKGR1bW15Tm9kZS5nZXRDZW50ZXJYKCksIGR1bW15Tm9kZS5nZXRDZW50ZXJZKCkpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBiZW5kcG9pbnQncyBsb2NhdGlvbiBhY2NvcmRpbmcgdG8gZHVtbXkgbm9kZVxuICAgICAgICB2YXIgZWJwID0gbEVkZ2UuYmVuZHBvaW50cy5nZXQoaSk7XG4gICAgICAgIGVicC54ID0gcC54O1xuICAgICAgICBlYnAueSA9IHAueTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGR1bW15IG5vZGUsIGR1bW15IGVkZ2VzIGluY2lkZW50IHdpdGggdGhpc1xuICAgICAgICAvLyBkdW1teSBub2RlIGlzIGFsc28gcmVtb3ZlZCAod2l0aGluIHRoZSByZW1vdmUgbWV0aG9kKVxuICAgICAgICBkdW1teU5vZGUuZ2V0T3duZXIoKS5yZW1vdmUoZHVtbXlOb2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSByZWFsIGVkZ2UgdG8gZ3JhcGhcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChsRWRnZSwgbEVkZ2Uuc291cmNlLCBsRWRnZS50YXJnZXQpO1xuICAgIH1cbiAgfVxufTtcblxuTGF5b3V0LnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChzbGlkZXJWYWx1ZSwgZGVmYXVsdFZhbHVlLCBtaW5EaXYsIG1heE11bCkge1xuICBpZiAobWluRGl2ICE9IHVuZGVmaW5lZCAmJiBtYXhNdWwgIT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKHNsaWRlclZhbHVlIDw9IDUwKSB7XG4gICAgICB2YXIgbWluVmFsdWUgPSBkZWZhdWx0VmFsdWUgLyBtaW5EaXY7XG4gICAgICB2YWx1ZSAtPSAoZGVmYXVsdFZhbHVlIC0gbWluVmFsdWUpIC8gNTAgKiAoNTAgLSBzbGlkZXJWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXhWYWx1ZSA9IGRlZmF1bHRWYWx1ZSAqIG1heE11bDtcbiAgICAgIHZhbHVlICs9IChtYXhWYWx1ZSAtIGRlZmF1bHRWYWx1ZSkgLyA1MCAqIChzbGlkZXJWYWx1ZSAtIDUwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGEsIGI7XG5cbiAgICBpZiAoc2xpZGVyVmFsdWUgPD0gNTApIHtcbiAgICAgIGEgPSA5LjAgKiBkZWZhdWx0VmFsdWUgLyA1MDAuMDtcbiAgICAgIGIgPSBkZWZhdWx0VmFsdWUgLyAxMC4wO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gOS4wICogZGVmYXVsdFZhbHVlIC8gNTAuMDtcbiAgICAgIGIgPSAtOCAqIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSAqIHNsaWRlclZhbHVlICsgYjtcbiAgfVxufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIG5vZGVzLCBhc3N1bWluZ1xyXG4gKiB0aGF0IHRoZSBnaXZlbiBub2RlcyBmb3JtIGEgdHJlZSBpbiB0aGVtc2VsdmVzLlxyXG4gKi9cbkxheW91dC5maW5kQ2VudGVyT2ZUcmVlID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBsaXN0ID0gW107XG4gIGxpc3QgPSBsaXN0LmNvbmNhdChub2Rlcyk7XG5cbiAgdmFyIHJlbW92ZWROb2RlcyA9IFtdO1xuICB2YXIgcmVtYWluaW5nRGVncmVlcyA9IG5ldyBNYXAoKTtcbiAgdmFyIGZvdW5kQ2VudGVyID0gZmFsc2U7XG4gIHZhciBjZW50ZXJOb2RlID0gbnVsbDtcblxuICBpZiAobGlzdC5sZW5ndGggPT0gMSB8fCBsaXN0Lmxlbmd0aCA9PSAyKSB7XG4gICAgZm91bmRDZW50ZXIgPSB0cnVlO1xuICAgIGNlbnRlck5vZGUgPSBsaXN0WzBdO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBsaXN0W2ldO1xuICAgIHZhciBkZWdyZWUgPSBub2RlLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO1xuICAgIHJlbWFpbmluZ0RlZ3JlZXMuc2V0KG5vZGUsIG5vZGUuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpO1xuXG4gICAgaWYgKGRlZ3JlZSA9PSAxKSB7XG4gICAgICByZW1vdmVkTm9kZXMucHVzaChub2RlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGVtcExpc3QgPSBbXTtcbiAgdGVtcExpc3QgPSB0ZW1wTGlzdC5jb25jYXQocmVtb3ZlZE5vZGVzKTtcblxuICB3aGlsZSAoIWZvdW5kQ2VudGVyKSB7XG4gICAgdmFyIHRlbXBMaXN0MiA9IFtdO1xuICAgIHRlbXBMaXN0MiA9IHRlbXBMaXN0Mi5jb25jYXQodGVtcExpc3QpO1xuICAgIHRlbXBMaXN0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbGlzdFtpXTtcblxuICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKG5vZGUpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmVpZ2hib3VycyA9IG5vZGUuZ2V0TmVpZ2hib3JzTGlzdCgpO1xuXG4gICAgICBuZWlnaGJvdXJzLmZvckVhY2goZnVuY3Rpb24gKG5laWdoYm91cikge1xuICAgICAgICBpZiAocmVtb3ZlZE5vZGVzLmluZGV4T2YobmVpZ2hib3VyKSA8IDApIHtcbiAgICAgICAgICB2YXIgb3RoZXJEZWdyZWUgPSByZW1haW5pbmdEZWdyZWVzLmdldChuZWlnaGJvdXIpO1xuICAgICAgICAgIHZhciBuZXdEZWdyZWUgPSBvdGhlckRlZ3JlZSAtIDE7XG5cbiAgICAgICAgICBpZiAobmV3RGVncmVlID09IDEpIHtcbiAgICAgICAgICAgIHRlbXBMaXN0LnB1c2gobmVpZ2hib3VyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZW1haW5pbmdEZWdyZWVzLnNldChuZWlnaGJvdXIsIG5ld0RlZ3JlZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZWROb2RlcyA9IHJlbW92ZWROb2Rlcy5jb25jYXQodGVtcExpc3QpO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09IDEgfHwgbGlzdC5sZW5ndGggPT0gMikge1xuICAgICAgZm91bmRDZW50ZXIgPSB0cnVlO1xuICAgICAgY2VudGVyTm9kZSA9IGxpc3RbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNlbnRlck5vZGU7XG59O1xuXG4vKipcclxuICogRHVyaW5nIHRoZSBjb2Fyc2VuaW5nIHByb2Nlc3MsIHRoaXMgbGF5b3V0IG1heSBiZSByZWZlcmVuY2VkIGJ5IHR3byBncmFwaCBtYW5hZ2Vyc1xyXG4gKiB0aGlzIHNldHRlciBmdW5jdGlvbiBncmFudHMgYWNjZXNzIHRvIGNoYW5nZSB0aGUgY3VycmVudGx5IGJlaW5nIHVzZWQgZ3JhcGggbWFuYWdlclxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKGdtKSB7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ207XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExheW91dDtcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBSYW5kb21TZWVkKCkge31cbi8vIGFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE5MzAzNzI1XG5SYW5kb21TZWVkLnNlZWQgPSAxO1xuUmFuZG9tU2VlZC54ID0gMDtcblxuUmFuZG9tU2VlZC5uZXh0RG91YmxlID0gZnVuY3Rpb24gKCkge1xuICBSYW5kb21TZWVkLnggPSBNYXRoLnNpbihSYW5kb21TZWVkLnNlZWQrKykgKiAxMDAwMDtcbiAgcmV0dXJuIFJhbmRvbVNlZWQueCAtIE1hdGguZmxvb3IoUmFuZG9tU2VlZC54KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZG9tU2VlZDtcblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuZnVuY3Rpb24gVHJhbnNmb3JtKHgsIHkpIHtcbiAgdGhpcy5sd29ybGRPcmdYID0gMC4wO1xuICB0aGlzLmx3b3JsZE9yZ1kgPSAwLjA7XG4gIHRoaXMubGRldmljZU9yZ1ggPSAwLjA7XG4gIHRoaXMubGRldmljZU9yZ1kgPSAwLjA7XG4gIHRoaXMubHdvcmxkRXh0WCA9IDEuMDtcbiAgdGhpcy5sd29ybGRFeHRZID0gMS4wO1xuICB0aGlzLmxkZXZpY2VFeHRYID0gMS4wO1xuICB0aGlzLmxkZXZpY2VFeHRZID0gMS4wO1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFdvcmxkT3JnWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubHdvcmxkT3JnWDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0V29ybGRPcmdYID0gZnVuY3Rpb24gKHdveCkge1xuICB0aGlzLmx3b3JsZE9yZ1ggPSB3b3g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFdvcmxkT3JnWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubHdvcmxkT3JnWTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0V29ybGRPcmdZID0gZnVuY3Rpb24gKHdveSkge1xuICB0aGlzLmx3b3JsZE9yZ1kgPSB3b3k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFdvcmxkRXh0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubHdvcmxkRXh0WDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0V29ybGRFeHRYID0gZnVuY3Rpb24gKHdleCkge1xuICB0aGlzLmx3b3JsZEV4dFggPSB3ZXg7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldFdvcmxkRXh0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubHdvcmxkRXh0WTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0V29ybGRFeHRZID0gZnVuY3Rpb24gKHdleSkge1xuICB0aGlzLmx3b3JsZEV4dFkgPSB3ZXk7XG59O1xuXG4vKiBEZXZpY2UgcmVsYXRlZCAqL1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZU9yZ1ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VPcmdYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYID0gZnVuY3Rpb24gKGRveCkge1xuICB0aGlzLmxkZXZpY2VPcmdYID0gZG94O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlT3JnWTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWSA9IGZ1bmN0aW9uIChkb3kpIHtcbiAgdGhpcy5sZGV2aWNlT3JnWSA9IGRveTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZUV4dFg7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZUV4dFggPSBmdW5jdGlvbiAoZGV4KSB7XG4gIHRoaXMubGRldmljZUV4dFggPSBkZXg7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZUV4dFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VFeHRZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZID0gZnVuY3Rpb24gKGRleSkge1xuICB0aGlzLmxkZXZpY2VFeHRZID0gZGV5O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS50cmFuc2Zvcm1YID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIHhEZXZpY2UgPSAwLjA7XG4gIHZhciB3b3JsZEV4dFggPSB0aGlzLmx3b3JsZEV4dFg7XG4gIGlmICh3b3JsZEV4dFggIT0gMC4wKSB7XG4gICAgeERldmljZSA9IHRoaXMubGRldmljZU9yZ1ggKyAoeCAtIHRoaXMubHdvcmxkT3JnWCkgKiB0aGlzLmxkZXZpY2VFeHRYIC8gd29ybGRFeHRYO1xuICB9XG5cbiAgcmV0dXJuIHhEZXZpY2U7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnRyYW5zZm9ybVkgPSBmdW5jdGlvbiAoeSkge1xuICB2YXIgeURldmljZSA9IDAuMDtcbiAgdmFyIHdvcmxkRXh0WSA9IHRoaXMubHdvcmxkRXh0WTtcbiAgaWYgKHdvcmxkRXh0WSAhPSAwLjApIHtcbiAgICB5RGV2aWNlID0gdGhpcy5sZGV2aWNlT3JnWSArICh5IC0gdGhpcy5sd29ybGRPcmdZKSAqIHRoaXMubGRldmljZUV4dFkgLyB3b3JsZEV4dFk7XG4gIH1cblxuICByZXR1cm4geURldmljZTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVggPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgeFdvcmxkID0gMC4wO1xuICB2YXIgZGV2aWNlRXh0WCA9IHRoaXMubGRldmljZUV4dFg7XG4gIGlmIChkZXZpY2VFeHRYICE9IDAuMCkge1xuICAgIHhXb3JsZCA9IHRoaXMubHdvcmxkT3JnWCArICh4IC0gdGhpcy5sZGV2aWNlT3JnWCkgKiB0aGlzLmx3b3JsZEV4dFggLyBkZXZpY2VFeHRYO1xuICB9XG5cbiAgcmV0dXJuIHhXb3JsZDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVkgPSBmdW5jdGlvbiAoeSkge1xuICB2YXIgeVdvcmxkID0gMC4wO1xuICB2YXIgZGV2aWNlRXh0WSA9IHRoaXMubGRldmljZUV4dFk7XG4gIGlmIChkZXZpY2VFeHRZICE9IDAuMCkge1xuICAgIHlXb3JsZCA9IHRoaXMubHdvcmxkT3JnWSArICh5IC0gdGhpcy5sZGV2aWNlT3JnWSkgKiB0aGlzLmx3b3JsZEV4dFkgLyBkZXZpY2VFeHRZO1xuICB9XG4gIHJldHVybiB5V29ybGQ7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludCA9IGZ1bmN0aW9uIChpblBvaW50KSB7XG4gIHZhciBvdXRQb2ludCA9IG5ldyBQb2ludEQodGhpcy5pbnZlcnNlVHJhbnNmb3JtWChpblBvaW50LngpLCB0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKGluUG9pbnQueSkpO1xuICByZXR1cm4gb3V0UG9pbnQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiBGRExheW91dCgpIHtcbiAgTGF5b3V0LmNhbGwodGhpcyk7XG5cbiAgdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT047XG4gIHRoaXMuaWRlYWxFZGdlTGVuZ3RoID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSDtcbiAgdGhpcy5zcHJpbmdDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIO1xuICB0aGlzLnJlcHVsc2lvbkNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg7XG4gIHRoaXMuZ3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIO1xuICB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIO1xuICB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I7XG4gIHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SO1xuICB0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUgPSAzLjAgKiBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAwO1xuICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMO1xuICB0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgdGhpcy50b3RhbERpc3BsYWNlbWVudCA9IDAuMDtcbiAgdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCA9IDAuMDtcbiAgdGhpcy5tYXhJdGVyYXRpb25zID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX0lURVJBVElPTlM7XG59XG5cbkZETGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGF5b3V0LnByb3RvdHlwZSk7XG5cbmZvciAodmFyIHByb3AgaW4gTGF5b3V0KSB7XG4gIEZETGF5b3V0W3Byb3BdID0gTGF5b3V0W3Byb3BdO1xufVxuXG5GRExheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIExheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIHRoaXMudG90YWxJdGVyYXRpb25zID0gMDtcbiAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMgPSAwO1xuXG4gIHRoaXMudXNlRlJHcmlkVmFyaWFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTjtcblxuICB0aGlzLmdyaWQgPSBbXTtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3RocyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2U7XG4gIHZhciBsY2FEZXB0aDtcbiAgdmFyIHNvdXJjZTtcbiAgdmFyIHRhcmdldDtcbiAgdmFyIHNpemVPZlNvdXJjZUluTGNhO1xuICB2YXIgc2l6ZU9mVGFyZ2V0SW5MY2E7XG5cbiAgdmFyIGFsbEVkZ2VzID0gdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgZWRnZSA9IGFsbEVkZ2VzW2ldO1xuXG4gICAgZWRnZS5pZGVhbExlbmd0aCA9IHRoaXMuaWRlYWxFZGdlTGVuZ3RoO1xuXG4gICAgaWYgKGVkZ2UuaXNJbnRlckdyYXBoKSB7XG4gICAgICBzb3VyY2UgPSBlZGdlLmdldFNvdXJjZSgpO1xuICAgICAgdGFyZ2V0ID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICAgICAgc2l6ZU9mU291cmNlSW5MY2EgPSBlZGdlLmdldFNvdXJjZUluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpO1xuICAgICAgc2l6ZU9mVGFyZ2V0SW5MY2EgPSBlZGdlLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpO1xuXG4gICAgICBpZiAodGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uKSB7XG4gICAgICAgIGVkZ2UuaWRlYWxMZW5ndGggKz0gc2l6ZU9mU291cmNlSW5MY2EgKyBzaXplT2ZUYXJnZXRJbkxjYSAtIDIgKiBMYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRTtcbiAgICAgIH1cblxuICAgICAgbGNhRGVwdGggPSBlZGdlLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpO1xuXG4gICAgICBlZGdlLmlkZWFsTGVuZ3RoICs9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggKiBGRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SICogKHNvdXJjZS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSArIHRhcmdldC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSAtIDIgKiBsY2FEZXB0aCk7XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyID0gZnVuY3Rpb24gKCkge1xuXG4gIHZhciBzID0gdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDtcbiAgaWYgKHRoaXMuaW5jcmVtZW50YWwpIHtcbiAgICBpZiAocyA+IEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkge1xuICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gTWF0aC5tYXgodGhpcy5jb29saW5nRmFjdG9yICogRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwgdGhpcy5jb29saW5nRmFjdG9yIC0gKHMgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIC8gKEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVCAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgKiB0aGlzLmNvb2xpbmdGYWN0b3IgKiAoMSAtIEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTtcbiAgICB9XG4gICAgdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50ID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMO1xuICB9IGVsc2Uge1xuICAgIGlmIChzID4gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSB7XG4gICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBNYXRoLm1heChGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLCAxLjAgLSAocyAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgLyAoRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAqICgxIC0gRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSAxLjA7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgPSB0aGlzLmNvb2xpbmdGYWN0b3I7XG4gICAgdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50ID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UO1xuICB9XG5cbiAgdGhpcy5tYXhJdGVyYXRpb25zID0gTWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCAqIDUsIHRoaXMubWF4SXRlcmF0aW9ucyk7XG5cbiAgdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCA9IHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSAqIHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7XG5cbiAgdGhpcy5yZXB1bHNpb25SYW5nZSA9IHRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCk7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxFZGdlcyA9IHRoaXMuZ2V0QWxsRWRnZXMoKTtcbiAgdmFyIGVkZ2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBlZGdlID0gbEVkZ2VzW2ldO1xuXG4gICAgdGhpcy5jYWxjU3ByaW5nRm9yY2UoZWRnZSwgZWRnZS5pZGVhbExlbmd0aCk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZ3JpZFVwZGF0ZUFsbG93ZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gIHZhciBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaSwgajtcbiAgdmFyIG5vZGVBLCBub2RlQjtcbiAgdmFyIGxOb2RlcyA9IHRoaXMuZ2V0QWxsTm9kZXMoKTtcbiAgdmFyIHByb2Nlc3NlZE5vZGVTZXQ7XG5cbiAgaWYgKHRoaXMudXNlRlJHcmlkVmFyaWFudCkge1xuICAgIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyAlIEZETGF5b3V0Q29uc3RhbnRzLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EID09IDEgJiYgZ3JpZFVwZGF0ZUFsbG93ZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgIH1cblxuICAgIHByb2Nlc3NlZE5vZGVTZXQgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgcmVwdWxzaW9uIGZvcmNlcyBiZXR3ZWVuIGVhY2ggbm9kZXMgYW5kIGl0cyBzdXJyb3VuZGluZ1xuICAgIGZvciAoaSA9IDA7IGkgPCBsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVBID0gbE5vZGVzW2ldO1xuICAgICAgdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUobm9kZUEsIHByb2Nlc3NlZE5vZGVTZXQsIGdyaWRVcGRhdGVBbGxvd2VkLCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKTtcbiAgICAgIHByb2Nlc3NlZE5vZGVTZXQuYWRkKG5vZGVBKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUEgPSBsTm9kZXNbaV07XG5cbiAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbE5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG5vZGVCID0gbE5vZGVzW2pdO1xuXG4gICAgICAgIC8vIElmIGJvdGggbm9kZXMgYXJlIG5vdCBtZW1iZXJzIG9mIHRoZSBzYW1lIGdyYXBoLCBza2lwLlxuICAgICAgICBpZiAobm9kZUEuZ2V0T3duZXIoKSAhPSBub2RlQi5nZXRPd25lcigpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShub2RlQSwgbm9kZUIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm9kZTtcbiAgdmFyIGxOb2RlcyA9IHRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBsTm9kZXNbaV07XG4gICAgdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKG5vZGUpO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUubW92ZU5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgbm9kZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBsTm9kZXNbaV07XG4gICAgbm9kZS5tb3ZlKCk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2UgPSBmdW5jdGlvbiAoZWRnZSwgaWRlYWxMZW5ndGgpIHtcbiAgdmFyIHNvdXJjZU5vZGUgPSBlZGdlLmdldFNvdXJjZSgpO1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGVkZ2UuZ2V0VGFyZ2V0KCk7XG5cbiAgdmFyIGxlbmd0aDtcbiAgdmFyIHNwcmluZ0ZvcmNlO1xuICB2YXIgc3ByaW5nRm9yY2VYO1xuICB2YXIgc3ByaW5nRm9yY2VZO1xuXG4gIC8vIFVwZGF0ZSBlZGdlIGxlbmd0aFxuICBpZiAodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyAmJiBzb3VyY2VOb2RlLmdldENoaWxkKCkgPT0gbnVsbCAmJiB0YXJnZXROb2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIGVkZ2UudXBkYXRlTGVuZ3RoU2ltcGxlKCk7XG4gIH0gZWxzZSB7XG4gICAgZWRnZS51cGRhdGVMZW5ndGgoKTtcblxuICAgIGlmIChlZGdlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGxlbmd0aCA9IGVkZ2UuZ2V0TGVuZ3RoKCk7XG5cbiAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47XG5cbiAgLy8gQ2FsY3VsYXRlIHNwcmluZyBmb3JjZXNcbiAgc3ByaW5nRm9yY2UgPSB0aGlzLnNwcmluZ0NvbnN0YW50ICogKGxlbmd0aCAtIGlkZWFsTGVuZ3RoKTtcblxuICAvLyBQcm9qZWN0IGZvcmNlIG9udG8geCBhbmQgeSBheGVzXG4gIHNwcmluZ0ZvcmNlWCA9IHNwcmluZ0ZvcmNlICogKGVkZ2UubGVuZ3RoWCAvIGxlbmd0aCk7XG4gIHNwcmluZ0ZvcmNlWSA9IHNwcmluZ0ZvcmNlICogKGVkZ2UubGVuZ3RoWSAvIGxlbmd0aCk7XG5cbiAgLy8gQXBwbHkgZm9yY2VzIG9uIHRoZSBlbmQgbm9kZXNcbiAgc291cmNlTm9kZS5zcHJpbmdGb3JjZVggKz0gc3ByaW5nRm9yY2VYO1xuICBzb3VyY2VOb2RlLnNwcmluZ0ZvcmNlWSArPSBzcHJpbmdGb3JjZVk7XG4gIHRhcmdldE5vZGUuc3ByaW5nRm9yY2VYIC09IHNwcmluZ0ZvcmNlWDtcbiAgdGFyZ2V0Tm9kZS5zcHJpbmdGb3JjZVkgLT0gc3ByaW5nRm9yY2VZO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZSA9IGZ1bmN0aW9uIChub2RlQSwgbm9kZUIpIHtcbiAgdmFyIHJlY3RBID0gbm9kZUEuZ2V0UmVjdCgpO1xuICB2YXIgcmVjdEIgPSBub2RlQi5nZXRSZWN0KCk7XG4gIHZhciBvdmVybGFwQW1vdW50ID0gbmV3IEFycmF5KDIpO1xuICB2YXIgY2xpcFBvaW50cyA9IG5ldyBBcnJheSg0KTtcbiAgdmFyIGRpc3RhbmNlWDtcbiAgdmFyIGRpc3RhbmNlWTtcbiAgdmFyIGRpc3RhbmNlU3F1YXJlZDtcbiAgdmFyIGRpc3RhbmNlO1xuICB2YXIgcmVwdWxzaW9uRm9yY2U7XG4gIHZhciByZXB1bHNpb25Gb3JjZVg7XG4gIHZhciByZXB1bHNpb25Gb3JjZVk7XG5cbiAgaWYgKHJlY3RBLmludGVyc2VjdHMocmVjdEIpKSAvLyB0d28gbm9kZXMgb3ZlcmxhcFxuICAgIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBzZXBhcmF0aW9uIGFtb3VudCBpbiB4IGFuZCB5IGRpcmVjdGlvbnNcbiAgICAgIElHZW9tZXRyeS5jYWxjU2VwYXJhdGlvbkFtb3VudChyZWN0QSwgcmVjdEIsIG92ZXJsYXBBbW91bnQsIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLyAyLjApO1xuXG4gICAgICByZXB1bHNpb25Gb3JjZVggPSAyICogb3ZlcmxhcEFtb3VudFswXTtcbiAgICAgIHJlcHVsc2lvbkZvcmNlWSA9IDIgKiBvdmVybGFwQW1vdW50WzFdO1xuXG4gICAgICB2YXIgY2hpbGRyZW5Db25zdGFudCA9IG5vZGVBLm5vT2ZDaGlsZHJlbiAqIG5vZGVCLm5vT2ZDaGlsZHJlbiAvIChub2RlQS5ub09mQ2hpbGRyZW4gKyBub2RlQi5ub09mQ2hpbGRyZW4pO1xuXG4gICAgICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIHR3byBub2Rlc1xuICAgICAgbm9kZUEucmVwdWxzaW9uRm9yY2VYIC09IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVkgLT0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWTtcbiAgICAgIG5vZGVCLnJlcHVsc2lvbkZvcmNlWCArPSBjaGlsZHJlbkNvbnN0YW50ICogcmVwdWxzaW9uRm9yY2VYO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VZICs9IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVk7XG4gICAgfSBlbHNlIC8vIG5vIG92ZXJsYXBcbiAgICB7XG4gICAgICAvLyBjYWxjdWxhdGUgZGlzdGFuY2VcblxuICAgICAgaWYgKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMgJiYgbm9kZUEuZ2V0Q2hpbGQoKSA9PSBudWxsICYmIG5vZGVCLmdldENoaWxkKCkgPT0gbnVsbCkgLy8gc2ltcGx5IGJhc2UgcmVwdWxzaW9uIG9uIGRpc3RhbmNlIG9mIG5vZGUgY2VudGVyc1xuICAgICAgICB7XG4gICAgICAgICAgZGlzdGFuY2VYID0gcmVjdEIuZ2V0Q2VudGVyWCgpIC0gcmVjdEEuZ2V0Q2VudGVyWCgpO1xuICAgICAgICAgIGRpc3RhbmNlWSA9IHJlY3RCLmdldENlbnRlclkoKSAtIHJlY3RBLmdldENlbnRlclkoKTtcbiAgICAgICAgfSBlbHNlIC8vIHVzZSBjbGlwcGluZyBwb2ludHNcbiAgICAgICAge1xuICAgICAgICAgIElHZW9tZXRyeS5nZXRJbnRlcnNlY3Rpb24ocmVjdEEsIHJlY3RCLCBjbGlwUG9pbnRzKTtcblxuICAgICAgICAgIGRpc3RhbmNlWCA9IGNsaXBQb2ludHNbMl0gLSBjbGlwUG9pbnRzWzBdO1xuICAgICAgICAgIGRpc3RhbmNlWSA9IGNsaXBQb2ludHNbM10gLSBjbGlwUG9pbnRzWzFdO1xuICAgICAgICB9XG5cbiAgICAgIC8vIE5vIHJlcHVsc2lvbiByYW5nZS4gRlIgZ3JpZCB2YXJpYW50IHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcy5cbiAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZVgpIDwgRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUKSB7XG4gICAgICAgIGRpc3RhbmNlWCA9IElNYXRoLnNpZ24oZGlzdGFuY2VYKSAqIEZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVDtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWSkgPCBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QpIHtcbiAgICAgICAgZGlzdGFuY2VZID0gSU1hdGguc2lnbihkaXN0YW5jZVkpICogRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUO1xuICAgICAgfVxuXG4gICAgICBkaXN0YW5jZVNxdWFyZWQgPSBkaXN0YW5jZVggKiBkaXN0YW5jZVggKyBkaXN0YW5jZVkgKiBkaXN0YW5jZVk7XG4gICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkaXN0YW5jZVNxdWFyZWQpO1xuXG4gICAgICByZXB1bHNpb25Gb3JjZSA9IHRoaXMucmVwdWxzaW9uQ29uc3RhbnQgKiBub2RlQS5ub09mQ2hpbGRyZW4gKiBub2RlQi5ub09mQ2hpbGRyZW4gLyBkaXN0YW5jZVNxdWFyZWQ7XG5cbiAgICAgIC8vIFByb2plY3QgZm9yY2Ugb250byB4IGFuZCB5IGF4ZXNcbiAgICAgIHJlcHVsc2lvbkZvcmNlWCA9IHJlcHVsc2lvbkZvcmNlICogZGlzdGFuY2VYIC8gZGlzdGFuY2U7XG4gICAgICByZXB1bHNpb25Gb3JjZVkgPSByZXB1bHNpb25Gb3JjZSAqIGRpc3RhbmNlWSAvIGRpc3RhbmNlO1xuXG4gICAgICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIHR3byBub2RlcyAgICBcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWCAtPSByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVkgLT0gcmVwdWxzaW9uRm9yY2VZO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VYICs9IHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVCLnJlcHVsc2lvbkZvcmNlWSArPSByZXB1bHNpb25Gb3JjZVk7XG4gICAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgb3duZXJHcmFwaDtcbiAgdmFyIG93bmVyQ2VudGVyWDtcbiAgdmFyIG93bmVyQ2VudGVyWTtcbiAgdmFyIGRpc3RhbmNlWDtcbiAgdmFyIGRpc3RhbmNlWTtcbiAgdmFyIGFic0Rpc3RhbmNlWDtcbiAgdmFyIGFic0Rpc3RhbmNlWTtcbiAgdmFyIGVzdGltYXRlZFNpemU7XG4gIG93bmVyR3JhcGggPSBub2RlLmdldE93bmVyKCk7XG5cbiAgb3duZXJDZW50ZXJYID0gKG93bmVyR3JhcGguZ2V0UmlnaHQoKSArIG93bmVyR3JhcGguZ2V0TGVmdCgpKSAvIDI7XG4gIG93bmVyQ2VudGVyWSA9IChvd25lckdyYXBoLmdldFRvcCgpICsgb3duZXJHcmFwaC5nZXRCb3R0b20oKSkgLyAyO1xuICBkaXN0YW5jZVggPSBub2RlLmdldENlbnRlclgoKSAtIG93bmVyQ2VudGVyWDtcbiAgZGlzdGFuY2VZID0gbm9kZS5nZXRDZW50ZXJZKCkgLSBvd25lckNlbnRlclk7XG4gIGFic0Rpc3RhbmNlWCA9IE1hdGguYWJzKGRpc3RhbmNlWCkgKyBub2RlLmdldFdpZHRoKCkgLyAyO1xuICBhYnNEaXN0YW5jZVkgPSBNYXRoLmFicyhkaXN0YW5jZVkpICsgbm9kZS5nZXRIZWlnaHQoKSAvIDI7XG5cbiAgaWYgKG5vZGUuZ2V0T3duZXIoKSA9PSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpIC8vIGluIHRoZSByb290IGdyYXBoXG4gICAge1xuICAgICAgZXN0aW1hdGVkU2l6ZSA9IG93bmVyR3JhcGguZ2V0RXN0aW1hdGVkU2l6ZSgpICogdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I7XG5cbiAgICAgIGlmIChhYnNEaXN0YW5jZVggPiBlc3RpbWF0ZWRTaXplIHx8IGFic0Rpc3RhbmNlWSA+IGVzdGltYXRlZFNpemUpIHtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWCA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWDtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWSA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWTtcbiAgICAgIH1cbiAgICB9IGVsc2UgLy8gaW5zaWRlIGEgY29tcG91bmRcbiAgICB7XG4gICAgICBlc3RpbWF0ZWRTaXplID0gb3duZXJHcmFwaC5nZXRFc3RpbWF0ZWRTaXplKCkgKiB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yO1xuXG4gICAgICBpZiAoYWJzRGlzdGFuY2VYID4gZXN0aW1hdGVkU2l6ZSB8fCBhYnNEaXN0YW5jZVkgPiBlc3RpbWF0ZWRTaXplKSB7XG4gICAgICAgIG5vZGUuZ3Jhdml0YXRpb25Gb3JjZVggPSAtdGhpcy5ncmF2aXR5Q29uc3RhbnQgKiBkaXN0YW5jZVggKiB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50O1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VZID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VZICogdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudDtcbiAgICAgIH1cbiAgICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuaXNDb252ZXJnZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb252ZXJnZWQ7XG4gIHZhciBvc2NpbGF0aW5nID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zID4gdGhpcy5tYXhJdGVyYXRpb25zIC8gMykge1xuICAgIG9zY2lsYXRpbmcgPSBNYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50IC0gdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCkgPCAyO1xuICB9XG5cbiAgY29udmVyZ2VkID0gdGhpcy50b3RhbERpc3BsYWNlbWVudCA8IHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ7XG5cbiAgdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCA9IHRoaXMudG90YWxEaXNwbGFjZW1lbnQ7XG5cbiAgcmV0dXJuIGNvbnZlcmdlZCB8fCBvc2NpbGF0aW5nO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCAmJiAhdGhpcy5pc1N1YkxheW91dCkge1xuICAgIGlmICh0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucyA9PSB0aGlzLmFuaW1hdGlvblBlcmlvZCkge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKztcbiAgICB9XG4gIH1cbn07XG5cbi8vVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuICh3ZWlnaHQpIGZvciBhbGwgbm9kZXNcbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlO1xuICB2YXIgYWxsTm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgbm9kZS5ub09mQ2hpbGRyZW4gPSBub2RlLmdldE5vT2ZDaGlsZHJlbigpO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VjdGlvbjogRlItR3JpZCBWYXJpYW50IFJlcHVsc2lvbiBGb3JjZSBDYWxjdWxhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNHcmlkID0gZnVuY3Rpb24gKGdyYXBoKSB7XG5cbiAgdmFyIHNpemVYID0gMDtcbiAgdmFyIHNpemVZID0gMDtcblxuICBzaXplWCA9IHBhcnNlSW50KE1hdGguY2VpbCgoZ3JhcGguZ2V0UmlnaHQoKSAtIGdyYXBoLmdldExlZnQoKSkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIHNpemVZID0gcGFyc2VJbnQoTWF0aC5jZWlsKChncmFwaC5nZXRCb3R0b20oKSAtIGdyYXBoLmdldFRvcCgpKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcblxuICB2YXIgZ3JpZCA9IG5ldyBBcnJheShzaXplWCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplWDsgaSsrKSB7XG4gICAgZ3JpZFtpXSA9IG5ldyBBcnJheShzaXplWSk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemVYOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemVZOyBqKyspIHtcbiAgICAgIGdyaWRbaV1bal0gPSBuZXcgQXJyYXkoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ3JpZDtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5hZGROb2RlVG9HcmlkID0gZnVuY3Rpb24gKHYsIGxlZnQsIHRvcCkge1xuXG4gIHZhciBzdGFydFggPSAwO1xuICB2YXIgZmluaXNoWCA9IDA7XG4gIHZhciBzdGFydFkgPSAwO1xuICB2YXIgZmluaXNoWSA9IDA7XG5cbiAgc3RhcnRYID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkueCAtIGxlZnQpIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuICBmaW5pc2hYID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkud2lkdGggKyB2LmdldFJlY3QoKS54IC0gbGVmdCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIHN0YXJ0WSA9IHBhcnNlSW50KE1hdGguZmxvb3IoKHYuZ2V0UmVjdCgpLnkgLSB0b3ApIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuICBmaW5pc2hZID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkuaGVpZ2h0ICsgdi5nZXRSZWN0KCkueSAtIHRvcCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0WDsgaSA8PSBmaW5pc2hYOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gc3RhcnRZOyBqIDw9IGZpbmlzaFk7IGorKykge1xuICAgICAgdGhpcy5ncmlkW2ldW2pdLnB1c2godik7XG4gICAgICB2LnNldEdyaWRDb29yZGluYXRlcyhzdGFydFgsIGZpbmlzaFgsIHN0YXJ0WSwgZmluaXNoWSk7XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUudXBkYXRlR3JpZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGk7XG4gIHZhciBub2RlQTtcbiAgdmFyIGxOb2RlcyA9IHRoaXMuZ2V0QWxsTm9kZXMoKTtcblxuICB0aGlzLmdyaWQgPSB0aGlzLmNhbGNHcmlkKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSk7XG5cbiAgLy8gcHV0IGFsbCBub2RlcyB0byBwcm9wZXIgZ3JpZCBjZWxsc1xuICBmb3IgKGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZUEgPSBsTm9kZXNbaV07XG4gICAgdGhpcy5hZGROb2RlVG9HcmlkKG5vZGVBLCB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0TGVmdCgpLCB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlID0gZnVuY3Rpb24gKG5vZGVBLCBwcm9jZXNzZWROb2RlU2V0LCBncmlkVXBkYXRlQWxsb3dlZCwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSkge1xuXG4gIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyAlIEZETGF5b3V0Q29uc3RhbnRzLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EID09IDEgJiYgZ3JpZFVwZGF0ZUFsbG93ZWQgfHwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSkge1xuICAgIHZhciBzdXJyb3VuZGluZyA9IG5ldyBTZXQoKTtcbiAgICBub2RlQS5zdXJyb3VuZGluZyA9IG5ldyBBcnJheSgpO1xuICAgIHZhciBub2RlQjtcbiAgICB2YXIgZ3JpZCA9IHRoaXMuZ3JpZDtcblxuICAgIGZvciAodmFyIGkgPSBub2RlQS5zdGFydFggLSAxOyBpIDwgbm9kZUEuZmluaXNoWCArIDI7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IG5vZGVBLnN0YXJ0WSAtIDE7IGogPCBub2RlQS5maW5pc2hZICsgMjsgaisrKSB7XG4gICAgICAgIGlmICghKGkgPCAwIHx8IGogPCAwIHx8IGkgPj0gZ3JpZC5sZW5ndGggfHwgaiA+PSBncmlkWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGdyaWRbaV1bal0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG5vZGVCID0gZ3JpZFtpXVtqXVtrXTtcblxuICAgICAgICAgICAgLy8gSWYgYm90aCBub2RlcyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHNhbWUgZ3JhcGgsIFxuICAgICAgICAgICAgLy8gb3IgYm90aCBub2RlcyBhcmUgdGhlIHNhbWUsIHNraXAuXG4gICAgICAgICAgICBpZiAobm9kZUEuZ2V0T3duZXIoKSAhPSBub2RlQi5nZXRPd25lcigpIHx8IG5vZGVBID09IG5vZGVCKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgcmVwdWxzaW9uIGZvcmNlIGJldHdlZW5cbiAgICAgICAgICAgIC8vIG5vZGVBIGFuZCBub2RlQiBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWRcbiAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkTm9kZVNldC5oYXMobm9kZUIpICYmICFzdXJyb3VuZGluZy5oYXMobm9kZUIpKSB7XG4gICAgICAgICAgICAgIHZhciBkaXN0YW5jZVggPSBNYXRoLmFicyhub2RlQS5nZXRDZW50ZXJYKCkgLSBub2RlQi5nZXRDZW50ZXJYKCkpIC0gKG5vZGVBLmdldFdpZHRoKCkgLyAyICsgbm9kZUIuZ2V0V2lkdGgoKSAvIDIpO1xuICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VZID0gTWF0aC5hYnMobm9kZUEuZ2V0Q2VudGVyWSgpIC0gbm9kZUIuZ2V0Q2VudGVyWSgpKSAtIChub2RlQS5nZXRIZWlnaHQoKSAvIDIgKyBub2RlQi5nZXRIZWlnaHQoKSAvIDIpO1xuXG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIG5vZGVBIGFuZCBub2RlQiBcbiAgICAgICAgICAgICAgLy8gaXMgbGVzcyB0aGVuIGNhbGN1bGF0aW9uIHJhbmdlXG4gICAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPD0gdGhpcy5yZXB1bHNpb25SYW5nZSAmJiBkaXN0YW5jZVkgPD0gdGhpcy5yZXB1bHNpb25SYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vdGhlbiBhZGQgbm9kZUIgdG8gc3Vycm91bmRpbmcgb2Ygbm9kZUFcbiAgICAgICAgICAgICAgICBzdXJyb3VuZGluZy5hZGQobm9kZUIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZUEuc3Vycm91bmRpbmcgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN1cnJvdW5kaW5nKSk7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IG5vZGVBLnN1cnJvdW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2Uobm9kZUEsIG5vZGVBLnN1cnJvdW5kaW5nW2ldKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIDAuMDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXQ7XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0RWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgTEVkZ2UuY2FsbCh0aGlzLCBzb3VyY2UsIHRhcmdldCwgdkVkZ2UpO1xuICB0aGlzLmlkZWFsTGVuZ3RoID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSDtcbn1cblxuRkRMYXlvdXRFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEVkZ2UucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMRWRnZSkge1xuICBGRExheW91dEVkZ2VbcHJvcF0gPSBMRWRnZVtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuZnVuY3Rpb24gRkRMYXlvdXROb2RlKGdtLCBsb2MsIHNpemUsIHZOb2RlKSB7XG4gIC8vIGFsdGVybmF0aXZlIGNvbnN0cnVjdG9yIGlzIGhhbmRsZWQgaW5zaWRlIExOb2RlXG4gIExOb2RlLmNhbGwodGhpcywgZ20sIGxvYywgc2l6ZSwgdk5vZGUpO1xuICAvL1NwcmluZywgcmVwdWxzaW9uIGFuZCBncmF2aXRhdGlvbmFsIGZvcmNlcyBhY3Rpbmcgb24gdGhpcyBub2RlXG4gIHRoaXMuc3ByaW5nRm9yY2VYID0gMDtcbiAgdGhpcy5zcHJpbmdGb3JjZVkgPSAwO1xuICB0aGlzLnJlcHVsc2lvbkZvcmNlWCA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VZID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCA9IDA7XG4gIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVkgPSAwO1xuICAvL0Ftb3VudCBieSB3aGljaCB0aGlzIG5vZGUgaXMgdG8gYmUgbW92ZWQgaW4gdGhpcyBpdGVyYXRpb25cbiAgdGhpcy5kaXNwbGFjZW1lbnRYID0gMDtcbiAgdGhpcy5kaXNwbGFjZW1lbnRZID0gMDtcblxuICAvL1N0YXJ0IGFuZCBmaW5pc2ggZ3JpZCBjb29yZGluYXRlcyB0aGF0IHRoaXMgbm9kZSBpcyBmYWxsZW4gaW50b1xuICB0aGlzLnN0YXJ0WCA9IDA7XG4gIHRoaXMuZmluaXNoWCA9IDA7XG4gIHRoaXMuc3RhcnRZID0gMDtcbiAgdGhpcy5maW5pc2hZID0gMDtcblxuICAvL0dlb21ldHJpYyBuZWlnaGJvcnMgb2YgdGhpcyBub2RlXG4gIHRoaXMuc3Vycm91bmRpbmcgPSBbXTtcbn1cblxuRkRMYXlvdXROb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTE5vZGUucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMTm9kZSkge1xuICBGRExheW91dE5vZGVbcHJvcF0gPSBMTm9kZVtwcm9wXTtcbn1cblxuRkRMYXlvdXROb2RlLnByb3RvdHlwZS5zZXRHcmlkQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoX3N0YXJ0WCwgX2ZpbmlzaFgsIF9zdGFydFksIF9maW5pc2hZKSB7XG4gIHRoaXMuc3RhcnRYID0gX3N0YXJ0WDtcbiAgdGhpcy5maW5pc2hYID0gX2ZpbmlzaFg7XG4gIHRoaXMuc3RhcnRZID0gX3N0YXJ0WTtcbiAgdGhpcy5maW5pc2hZID0gX2ZpbmlzaFk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZETGF5b3V0Tm9kZTtcblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBEaW1lbnNpb25EKHdpZHRoLCBoZWlnaHQpIHtcbiAgdGhpcy53aWR0aCA9IDA7XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgaWYgKHdpZHRoICE9PSBudWxsICYmIGhlaWdodCAhPT0gbnVsbCkge1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgfVxufVxuXG5EaW1lbnNpb25ELnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMud2lkdGg7XG59O1xuXG5EaW1lbnNpb25ELnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3aWR0aCkge1xuICB0aGlzLndpZHRoID0gd2lkdGg7XG59O1xuXG5EaW1lbnNpb25ELnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhlaWdodDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcbiAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERpbWVuc2lvbkQ7XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFVuaXF1ZUlER2VuZXJldG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cbmZ1bmN0aW9uIEhhc2hNYXAoKSB7XG4gIHRoaXMubWFwID0ge307XG4gIHRoaXMua2V5cyA9IFtdO1xufVxuXG5IYXNoTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB2YXIgdGhlSWQgPSBVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChrZXkpO1xuICBpZiAoIXRoaXMuY29udGFpbnModGhlSWQpKSB7XG4gICAgdGhpcy5tYXBbdGhlSWRdID0gdmFsdWU7XG4gICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcbiAgfVxufTtcblxuSGFzaE1hcC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIHJldHVybiB0aGlzLm1hcFtrZXldICE9IG51bGw7XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIHJldHVybiB0aGlzLm1hcFt0aGVJZF07XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5rZXlTZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmtleXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2hNYXA7XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFVuaXF1ZUlER2VuZXJldG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cbmZ1bmN0aW9uIEhhc2hTZXQoKSB7XG4gIHRoaXMuc2V0ID0ge307XG59XG47XG5cbkhhc2hTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQob2JqKTtcbiAgaWYgKCF0aGlzLmNvbnRhaW5zKHRoZUlkKSkgdGhpcy5zZXRbdGhlSWRdID0gb2JqO1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICBkZWxldGUgdGhpcy5zZXRbVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQob2JqKV07XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXQgPSB7fTtcbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdGhpcy5zZXRbVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQob2JqKV0gPT0gb2JqO1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2l6ZSgpID09PSAwO1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGg7XG59O1xuXG4vL2NvbmNhdHMgdGhpcy5zZXQgdG8gdGhlIGdpdmVuIGxpc3Rcbkhhc2hTZXQucHJvdG90eXBlLmFkZEFsbFRvID0gZnVuY3Rpb24gKGxpc3QpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnNldCk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGxpc3QucHVzaCh0aGlzLnNldFtrZXlzW2ldXSk7XG4gIH1cbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RoO1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24gKGxpc3QpIHtcbiAgdmFyIHMgPSBsaXN0Lmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgdiA9IGxpc3RbaV07XG4gICAgdGhpcy5hZGQodik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaFNldDtcblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAqIEEgY2xhc3NpYyBRdWlja3NvcnQgYWxnb3JpdGhtIHdpdGggSG9hcmUncyBwYXJ0aXRpb25cbiAqIC0gV29ya3MgYWxzbyBvbiBMaW5rZWRMaXN0IG9iamVjdHNcbiAqXG4gKiBDb3B5cmlnaHQ6IGktVmlzIFJlc2VhcmNoIEdyb3VwLCBCaWxrZW50IFVuaXZlcnNpdHksIDIwMDcgLSBwcmVzZW50XG4gKi9cblxudmFyIExpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxudmFyIFF1aWNrc29ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBRdWlja3NvcnQoQSwgY29tcGFyZUZ1bmN0aW9uKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBRdWlja3NvcnQpO1xuXG4gICAgICAgIGlmIChjb21wYXJlRnVuY3Rpb24gIT09IG51bGwgfHwgY29tcGFyZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHRoaXMuY29tcGFyZUZ1bmN0aW9uID0gdGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbjtcblxuICAgICAgICB2YXIgbGVuZ3RoID0gdm9pZCAwO1xuICAgICAgICBpZiAoQSBpbnN0YW5jZW9mIExpbmtlZExpc3QpIGxlbmd0aCA9IEEuc2l6ZSgpO2Vsc2UgbGVuZ3RoID0gQS5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy5fcXVpY2tzb3J0KEEsIDAsIGxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhRdWlja3NvcnQsIFt7XG4gICAgICAgIGtleTogJ19xdWlja3NvcnQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3F1aWNrc29ydChBLCBwLCByKSB7XG4gICAgICAgICAgICBpZiAocCA8IHIpIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IHRoaXMuX3BhcnRpdGlvbihBLCBwLCByKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWlja3NvcnQoQSwgcCwgcSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcXVpY2tzb3J0KEEsIHEgKyAxLCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3BhcnRpdGlvbicsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcGFydGl0aW9uKEEsIHAsIHIpIHtcbiAgICAgICAgICAgIHZhciB4ID0gdGhpcy5fZ2V0KEEsIHApO1xuICAgICAgICAgICAgdmFyIGkgPSBwO1xuICAgICAgICAgICAgdmFyIGogPSByO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5jb21wYXJlRnVuY3Rpb24oeCwgdGhpcy5fZ2V0KEEsIGopKSkge1xuICAgICAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICAgICAgfXdoaWxlICh0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoQSwgaSksIHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9aWYgKGkgPCBqKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N3YXAoQSwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX2dldCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0KG9iamVjdCwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMaW5rZWRMaXN0KSByZXR1cm4gb2JqZWN0LmdldF9vYmplY3RfYXQoaW5kZXgpO2Vsc2UgcmV0dXJuIG9iamVjdFtpbmRleF07XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19zZXQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExpbmtlZExpc3QpIG9iamVjdC5zZXRfb2JqZWN0X2F0KGluZGV4LCB2YWx1ZSk7ZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19zd2FwJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zd2FwKEEsIGksIGopIHtcbiAgICAgICAgICAgIHZhciB0ZW1wID0gdGhpcy5fZ2V0KEEsIGkpO1xuICAgICAgICAgICAgdGhpcy5fc2V0KEEsIGksIHRoaXMuX2dldChBLCBqKSk7XG4gICAgICAgICAgICB0aGlzLl9zZXQoQSwgaiwgdGVtcCk7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiID4gYTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBRdWlja3NvcnQ7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gUXVpY2tzb3J0O1xuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogICBOZWVkbGVtYW4tV3Vuc2NoIGFsZ29yaXRobSBpcyBhbiBwcm9jZWR1cmUgdG8gY29tcHV0ZSB0aGUgb3B0aW1hbCBnbG9iYWwgYWxpZ25tZW50IG9mIHR3byBzdHJpbmdcbiAqICAgc2VxdWVuY2VzIGJ5IFMuQi5OZWVkbGVtYW4gYW5kIEMuRC5XdW5zY2ggKDE5NzApLlxuICpcbiAqICAgQXNpZGUgZnJvbSB0aGUgaW5wdXRzLCB5b3UgY2FuIGFzc2lnbiB0aGUgc2NvcmVzIGZvcixcbiAqICAgLSBNYXRjaDogVGhlIHR3byBjaGFyYWN0ZXJzIGF0IHRoZSBjdXJyZW50IGluZGV4IGFyZSBzYW1lLlxuICogICAtIE1pc21hdGNoOiBUaGUgdHdvIGNoYXJhY3RlcnMgYXQgdGhlIGN1cnJlbnQgaW5kZXggYXJlIGRpZmZlcmVudC5cbiAqICAgLSBJbnNlcnRpb24vRGVsZXRpb24oZ2Fwcyk6IFRoZSBiZXN0IGFsaWdubWVudCBpbnZvbHZlcyBvbmUgbGV0dGVyIGFsaWduaW5nIHRvIGEgZ2FwIGluIHRoZSBvdGhlciBzdHJpbmcuXG4gKi9cblxudmFyIE5lZWRsZW1hbld1bnNjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOZWVkbGVtYW5XdW5zY2goc2VxdWVuY2UxLCBzZXF1ZW5jZTIpIHtcbiAgICAgICAgdmFyIG1hdGNoX3Njb3JlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAxO1xuICAgICAgICB2YXIgbWlzbWF0Y2hfcGVuYWx0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogLTE7XG4gICAgICAgIHZhciBnYXBfcGVuYWx0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogLTE7XG5cbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5lZWRsZW1hbld1bnNjaCk7XG5cbiAgICAgICAgdGhpcy5zZXF1ZW5jZTEgPSBzZXF1ZW5jZTE7XG4gICAgICAgIHRoaXMuc2VxdWVuY2UyID0gc2VxdWVuY2UyO1xuICAgICAgICB0aGlzLm1hdGNoX3Njb3JlID0gbWF0Y2hfc2NvcmU7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hfcGVuYWx0eSA9IG1pc21hdGNoX3BlbmFsdHk7XG4gICAgICAgIHRoaXMuZ2FwX3BlbmFsdHkgPSBnYXBfcGVuYWx0eTtcblxuICAgICAgICAvLyBKdXN0IHRoZSByZW1vdmUgcmVkdW5kYW5jeVxuICAgICAgICB0aGlzLmlNYXggPSBzZXF1ZW5jZTEubGVuZ3RoICsgMTtcbiAgICAgICAgdGhpcy5qTWF4ID0gc2VxdWVuY2UyLmxlbmd0aCArIDE7XG5cbiAgICAgICAgLy8gR3JpZCBtYXRyaXggb2Ygc2NvcmVzXG4gICAgICAgIHRoaXMuZ3JpZCA9IG5ldyBBcnJheSh0aGlzLmlNYXgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaU1heDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRbaV0gPSBuZXcgQXJyYXkodGhpcy5qTWF4KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmpNYXg7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtpXVtqXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmFjZWJhY2sgbWF0cml4ICgyRCBhcnJheSwgZWFjaCBjZWxsIGlzIGFuIGFycmF5IG9mIGJvb2xlYW4gdmFsdWVzIGZvciBbYERpYWdgLCBgVXBgLCBgTGVmdGBdIHBvc2l0aW9ucylcbiAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkID0gbmV3IEFycmF5KHRoaXMuaU1heCk7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmlNYXg7IF9pKyspIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtfaV0gPSBuZXcgQXJyYXkodGhpcy5qTWF4KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IHRoaXMuak1heDsgX2orKykge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtfaV1bX2pdID0gW251bGwsIG51bGwsIG51bGxdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGFsaWduZWQgc2VxdWVuY2VzIChyZXR1cm4gbXVsdGlwbGUgcG9zc2liaWxpdGllcylcbiAgICAgICAgdGhpcy5hbGlnbm1lbnRzID0gW107XG5cbiAgICAgICAgLy8gRmluYWwgYWxpZ25tZW50IHNjb3JlXG4gICAgICAgIHRoaXMuc2NvcmUgPSAtMTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgc2NvcmVzIGFuZCB0cmFjZWJhY2tzXG4gICAgICAgIHRoaXMuY29tcHV0ZUdyaWRzKCk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKE5lZWRsZW1hbld1bnNjaCwgW3tcbiAgICAgICAga2V5OiBcImdldFNjb3JlXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTY29yZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjb3JlO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZ2V0QWxpZ25tZW50c1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25tZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsaWdubWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWluIGR5bmFtaWMgcHJvZ3JhbW1pbmcgcHJvY2VkdXJlXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJjb21wdXRlR3JpZHNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXB1dGVHcmlkcygpIHtcbiAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IHJvd1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCB0aGlzLmpNYXg7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFswXVtqXSA9IHRoaXMuZ3JpZFswXVtqIC0gMV0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFswXVtqXSA9IFtmYWxzZSwgZmFsc2UsIHRydWVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaWxsIGluIHRoZSBmaXJzdCBjb2x1bW5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5pTWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRbaV1bMF0gPSB0aGlzLmdyaWRbaSAtIDFdWzBdICsgdGhpcy5nYXBfcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlYmFja0dyaWRbaV1bMF0gPSBbZmFsc2UsIHRydWUsIGZhbHNlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRmlsbCB0aGUgcmVzdCBvZiB0aGUgZ3JpZFxuICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgdGhpcy5pTWF4OyBfaTIrKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9qMiA9IDE7IF9qMiA8IHRoaXMuak1heDsgX2oyKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgbWF4IHNjb3JlKHMpIGFtb25nIFtgRGlhZ2AsIGBVcGAsIGBMZWZ0YF1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWcgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcXVlbmNlMVtfaTIgLSAxXSA9PT0gdGhpcy5zZXF1ZW5jZTJbX2oyIC0gMV0pIGRpYWcgPSB0aGlzLmdyaWRbX2kyIC0gMV1bX2oyIC0gMV0gKyB0aGlzLm1hdGNoX3Njb3JlO2Vsc2UgZGlhZyA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajIgLSAxXSArIHRoaXMubWlzbWF0Y2hfcGVuYWx0eTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgdXAgPSB0aGlzLmdyaWRbX2kyIC0gMV1bX2oyXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy5ncmlkW19pMl1bX2oyIC0gMV0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGV4aXN0cyBtdWx0aXBsZSBtYXggdmFsdWVzLCBjYXB0dXJlIHRoZW0gZm9yIG11bHRpcGxlIHBhdGhzXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhPZiA9IFtkaWFnLCB1cCwgbGVmdF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5hcnJheUFsbE1heEluZGV4ZXMobWF4T2YpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBHcmlkc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRbX2kyXVtfajJdID0gbWF4T2ZbaW5kaWNlc1swXV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtfaTJdW19qMl0gPSBbaW5kaWNlcy5pbmNsdWRlcygwKSwgaW5kaWNlcy5pbmNsdWRlcygxKSwgaW5kaWNlcy5pbmNsdWRlcygyKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgYWxpZ25tZW50IHNjb3JlXG4gICAgICAgICAgICB0aGlzLnNjb3JlID0gdGhpcy5ncmlkW3RoaXMuaU1heCAtIDFdW3RoaXMuak1heCAtIDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0cyBhbGwgcG9zc2libGUgdmFsaWQgc2VxdWVuY2UgY29tYmluYXRpb25zXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhbGlnbm1lbnRUcmFjZWJhY2tcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFsaWdubWVudFRyYWNlYmFjaygpIHtcbiAgICAgICAgICAgIHZhciBpblByb2Nlc3NBbGlnbm1lbnRzID0gW107XG5cbiAgICAgICAgICAgIGluUHJvY2Vzc0FsaWdubWVudHMucHVzaCh7IHBvczogW3RoaXMuc2VxdWVuY2UxLmxlbmd0aCwgdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxcbiAgICAgICAgICAgICAgICBzZXExOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNlcTI6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB3aGlsZSAoaW5Qcm9jZXNzQWxpZ25tZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gaW5Qcm9jZXNzQWxpZ25tZW50c1swXTtcbiAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9ucyA9IHRoaXMudHJhY2ViYWNrR3JpZFtjdXJyZW50LnBvc1swXV1bY3VycmVudC5wb3NbMV1dO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0gLSAxLCBjdXJyZW50LnBvc1sxXSAtIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMTogdGhpcy5zZXF1ZW5jZTFbY3VycmVudC5wb3NbMF0gLSAxXSArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6IHRoaXMuc2VxdWVuY2UyW2N1cnJlbnQucG9zWzFdIC0gMV0gKyBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb25zWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGluUHJvY2Vzc0FsaWdubWVudHMucHVzaCh7IHBvczogW2N1cnJlbnQucG9zWzBdIC0gMSwgY3VycmVudC5wb3NbMV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMTogdGhpcy5zZXF1ZW5jZTFbY3VycmVudC5wb3NbMF0gLSAxXSArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6ICctJyArIGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0sIGN1cnJlbnQucG9zWzFdIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiAnLScgKyBjdXJyZW50LnNlcTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXEyOiB0aGlzLnNlcXVlbmNlMltjdXJyZW50LnBvc1sxXSAtIDFdICsgY3VycmVudC5zZXEyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnBvc1swXSA9PT0gMCAmJiBjdXJyZW50LnBvc1sxXSA9PT0gMCkgdGhpcy5hbGlnbm1lbnRzLnB1c2goeyBzZXF1ZW5jZTE6IGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2UyOiBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGluUHJvY2Vzc0FsaWdubWVudHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ25tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhlbHBlciBGdW5jdGlvbnNcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImdldEFsbEluZGV4ZXNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsbEluZGV4ZXMoYXJyLCB2YWwpIHtcbiAgICAgICAgICAgIHZhciBpbmRleGVzID0gW10sXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKChpID0gYXJyLmluZGV4T2YodmFsLCBpICsgMSkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGluZGV4ZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmRleGVzO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiYXJyYXlBbGxNYXhJbmRleGVzXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhcnJheUFsbE1heEluZGV4ZXMoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFsbEluZGV4ZXMoYXJyYXksIE1hdGgubWF4LmFwcGx5KG51bGwsIGFycmF5KSk7XG4gICAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gTmVlZGxlbWFuV3Vuc2NoO1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5lZWRsZW1hbld1bnNjaDtcblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgbGF5b3V0QmFzZSA9IGZ1bmN0aW9uIGxheW91dEJhc2UoKSB7XG4gIHJldHVybjtcbn07XG5cbmxheW91dEJhc2UuRkRMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcbmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xubGF5b3V0QmFzZS5GRExheW91dEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbmxheW91dEJhc2UuRkRMYXlvdXROb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5sYXlvdXRCYXNlLkRpbWVuc2lvbkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbmxheW91dEJhc2UuSGFzaE1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xubGF5b3V0QmFzZS5IYXNoU2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5sYXlvdXRCYXNlLklHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5sYXlvdXRCYXNlLklNYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbmxheW91dEJhc2UuSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xubGF5b3V0QmFzZS5Qb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xubGF5b3V0QmFzZS5Qb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xubGF5b3V0QmFzZS5SYW5kb21TZWVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5sYXlvdXRCYXNlLlJlY3RhbmdsZUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbmxheW91dEJhc2UuVHJhbnNmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5sYXlvdXRCYXNlLlVuaXF1ZUlER2VuZXJldG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5sYXlvdXRCYXNlLlF1aWNrc29ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubGF5b3V0QmFzZS5MaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5sYXlvdXRCYXNlLkxHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5sYXlvdXRCYXNlLkxHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5sYXlvdXRCYXNlLkxFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbmxheW91dEJhc2UuTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5sYXlvdXRCYXNlLkxOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbmxheW91dEJhc2UuTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5sYXlvdXRCYXNlLk5lZWRsZW1hbld1bnNjaCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxheW91dEJhc2U7XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gRW1pdHRlcigpIHtcbiAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbn1cblxudmFyIHAgPSBFbWl0dGVyLnByb3RvdHlwZTtcblxucC5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgdGhpcy5saXN0ZW5lcnMucHVzaCh7XG4gICAgZXZlbnQ6IGV2ZW50LFxuICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICB9KTtcbn07XG5cbnAucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLmxpc3RlbmVycy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGwgPSB0aGlzLmxpc3RlbmVyc1tpXTtcblxuICAgIGlmIChsLmV2ZW50ID09PSBldmVudCAmJiBsLmNhbGxiYWNrID09PSBjYWxsYmFjaykge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufTtcblxucC5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCBkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbCA9IHRoaXMubGlzdGVuZXJzW2ldO1xuXG4gICAgaWYgKGV2ZW50ID09PSBsLmV2ZW50KSB7XG4gICAgICBsLmNhbGxiYWNrKGRhdGEpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/layout-base/layout-base.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js": /*!****************************************************************************************!*\ !*** ../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js ***! \****************************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.sanitizeUrl = exports.BLANK_URL = void 0;\nvar invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nvar htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nvar htmlCtrlEntityRegex = /&(newline|tab);/gi;\nvar ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nvar urlSchemeRegex = /^.+(:|:)/gim;\nvar relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\nfunction isRelativeUrlWithoutProtocol(url) {\n return relativeFirstCharacters.indexOf(url[0]) > -1;\n}\n// adapted from https://stackoverflow.com/a/29824550/2601552\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(ctrlCharactersRegex, \"\");\n return removedNullByte.replace(htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return exports.BLANK_URL;\n }\n var sanitizedUrl = decodeHtmlCharacters(url)\n .replace(htmlCtrlEntityRegex, \"\")\n .replace(ctrlCharactersRegex, \"\")\n .trim();\n if (!sanitizedUrl) {\n return exports.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0];\n if (invalidProtocolRegex.test(urlScheme)) {\n return exports.BLANK_URL;\n }\n return sanitizedUrl;\n}\nexports.sanitizeUrl = sanitizeUrl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvbm9kZV9tb2R1bGVzL0BicmFpbnRyZWUvc2FuaXRpemUtdXJsL2Rpc3QvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLEdBQUcsaUJBQWlCO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQztBQUNBLG1DQUFtQztBQUNuQztBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL25vZGVfbW9kdWxlcy9AYnJhaW50cmVlL3Nhbml0aXplLXVybC9kaXN0L2luZGV4LmpzPzk4ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNhbml0aXplVXJsID0gZXhwb3J0cy5CTEFOS19VUkwgPSB2b2lkIDA7XG52YXIgaW52YWxpZFByb3RvY29sUmVnZXggPSAvXihbXlxcd10qKShqYXZhc2NyaXB0fGRhdGF8dmJzY3JpcHQpL2ltO1xudmFyIGh0bWxFbnRpdGllc1JlZ2V4ID0gLyYjKFxcdyspKF5cXHd8Oyk/L2c7XG52YXIgaHRtbEN0cmxFbnRpdHlSZWdleCA9IC8mKG5ld2xpbmV8dGFiKTsvZ2k7XG52YXIgY3RybENoYXJhY3RlcnNSZWdleCA9IC9bXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXFx1MjAwMC1cXHUyMDBEXFx1RkVGRl0vZ2ltO1xudmFyIHVybFNjaGVtZVJlZ2V4ID0gL14uKyg6fCZjb2xvbjspL2dpbTtcbnZhciByZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycyA9IFtcIi5cIiwgXCIvXCJdO1xuZXhwb3J0cy5CTEFOS19VUkwgPSBcImFib3V0OmJsYW5rXCI7XG5mdW5jdGlvbiBpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sKHVybCkge1xuICAgIHJldHVybiByZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycy5pbmRleE9mKHVybFswXSkgPiAtMTtcbn1cbi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjk4MjQ1NTAvMjYwMTU1MlxuZnVuY3Rpb24gZGVjb2RlSHRtbENoYXJhY3RlcnMoc3RyKSB7XG4gICAgdmFyIHJlbW92ZWROdWxsQnl0ZSA9IHN0ci5yZXBsYWNlKGN0cmxDaGFyYWN0ZXJzUmVnZXgsIFwiXCIpO1xuICAgIHJldHVybiByZW1vdmVkTnVsbEJ5dGUucmVwbGFjZShodG1sRW50aXRpZXNSZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBkZWMpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZGVjKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNhbml0aXplVXJsKHVybCkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgdmFyIHNhbml0aXplZFVybCA9IGRlY29kZUh0bWxDaGFyYWN0ZXJzKHVybClcbiAgICAgICAgLnJlcGxhY2UoaHRtbEN0cmxFbnRpdHlSZWdleCwgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoY3RybENoYXJhY3RlcnNSZWdleCwgXCJcIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICBpZiAoIXNhbml0aXplZFVybCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5CTEFOS19VUkw7XG4gICAgfVxuICAgIGlmIChpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sKHNhbml0aXplZFVybCkpIHtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZFVybDtcbiAgICB9XG4gICAgdmFyIHVybFNjaGVtZVBhcnNlUmVzdWx0cyA9IHNhbml0aXplZFVybC5tYXRjaCh1cmxTY2hlbWVSZWdleCk7XG4gICAgaWYgKCF1cmxTY2hlbWVQYXJzZVJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZFVybDtcbiAgICB9XG4gICAgdmFyIHVybFNjaGVtZSA9IHVybFNjaGVtZVBhcnNlUmVzdWx0c1swXTtcbiAgICBpZiAoaW52YWxpZFByb3RvY29sUmVnZXgudGVzdCh1cmxTY2hlbWUpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplZFVybDtcbn1cbmV4cG9ydHMuc2FuaXRpemVVcmwgPSBzYW5pdGl6ZVVybDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\n"); /***/ }), /***/ "../../../node_modules/ms/index.js": /*!*****************************************!*\ !*** ../../../node_modules/ms/index.js ***! \*****************************************/ /***/ ((module) => { eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxRQUFRO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcz8yYTgzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/ms/index.js\n"); /***/ }), /***/ "../../../node_modules/pica/dist/pica.js": /*!***********************************************!*\ !*** ../../../node_modules/pica/dist/pica.js ***! \***********************************************/ /***/ ((module) => { eval("/*!\n\npica\nhttps://github.com/nodeca/pica\n\n*/\n\n(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i= 0,\n wasm: __requested_features.indexOf('wasm') >= 0\n };\n Multimath.call(this, features);\n this.features = {\n js: features.js,\n wasm: features.wasm && this.has_wasm()\n };\n this.use(mm_unsharp_mask);\n this.use(mm_resize);\n}\n\ninherits(MathLib, Multimath);\n\nMathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {\n var result = this.resize(options, cache);\n\n if (options.unsharpAmount) {\n this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);\n }\n\n return result;\n};\n\nmodule.exports = MathLib;\n\n},{\"./mm_resize\":4,\"./mm_unsharp_mask\":9,\"inherits\":19,\"multimath\":20}],2:[function(_dereq_,module,exports){\n// Resize convolvers, pure JS implementation\n//\n'use strict'; // Precision of fixed FP values\n//var FIXED_FRAC_BITS = 14;\n\nfunction clampTo8(i) {\n return i < 0 ? 0 : i > 255 ? 255 : i;\n} // Convolve image in horizontal directions and transpose output. In theory,\n// transpose allow:\n//\n// - use the same convolver for both passes (this fails due different\n// types of input array and temporary buffer)\n// - making vertical pass by horisonltal lines inprove CPU cache use.\n//\n// But in real life this doesn't work :)\n//\n\n\nfunction convolveHorizontally(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Technically, convolvers are the same. But input array and temporary\n// buffer can be of different type (especially, in old browsers). So,\n// keep code in separate functions to avoid deoptimizations & speed loss.\n\n\nfunction convolveVertically(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n}\n\nmodule.exports = {\n convolveHorizontally: convolveHorizontally,\n convolveVertically: convolveVertically\n};\n\n},{}],3:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAEXA2AAAGAGf39/f39/AGAHf39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMEAwABAgYGAX8AQQALB1cFEV9fd2FzbV9jYWxsX2N0b3JzAAAIY29udm9sdmUAAQpjb252b2x2ZUhWAAIMX19kc29faGFuZGxlAwAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAAK7AMDAwABC8YDAQ9/AkAgA0UNACAERQ0AA0AgDCENQQAhE0EAIQcDQCAHQQJqIQYCfyAHQQF0IAVqIgcuAQIiFEUEQEGAwAAhCEGAwAAhCUGAwAAhCkGAwAAhCyAGDAELIBIgBy4BAGohCEEAIQsgFCEHQQAhDiAGIQlBACEPQQAhEANAIAUgCUEBdGouAQAiESAAIAhBAnRqKAIAIgpBGHZsIBBqIRAgCkH/AXEgEWwgC2ohCyAKQRB2Qf8BcSARbCAPaiEPIApBCHZB/wFxIBFsIA5qIQ4gCEEBaiEIIAlBAWohCSAHQQFrIgcNAAsgC0GAQGshCCAOQYBAayEJIA9BgEBrIQogEEGAQGshCyAGIBRqCyEHIAEgDUECdGogCUEOdSIGQf8BIAZB/wFIGyIGQQAgBkEAShtBCHRBgP4DcSAKQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EQdEGAgPwHcSALQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EYdHJyIAhBDnUiBkH/ASAGQf8BSBsiBkEAIAZBAEobcjYCACADIA1qIQ0gE0EBaiITIARHDQALIAxBAWoiDCACbCESIAMgDEcNAAsLCx4AQQAgAiADIAQgBSAAEAEgAkEAIAQgBSAGIAEQAQs=';\n\n},{}],4:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'resize',\n fn: _dereq_('./resize'),\n wasm_fn: _dereq_('./resize_wasm'),\n wasm_src: _dereq_('./convolve_wasm_base64')\n};\n\n},{\"./convolve_wasm_base64\":3,\"./resize\":5,\"./resize_wasm\":8}],5:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nvar convolveHorizontally = _dereq_('./convolve').convolveHorizontally;\n\nvar convolveVertically = _dereq_('./convolve').convolveVertically;\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nmodule.exports = function resize(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0;\n var offsetY = options.offsetY || 0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);\n var tmp = new Uint8Array(destW * srcH * 4); // To use single function we need src & tmp of the same type.\n // But src can be CanvasPixelArray, and tmp - Uint8Array. So, keep\n // vertical and horizontal passes separately to avoid deoptimization.\n\n convolveHorizontally(src, tmp, srcW, srcH, destW, filtersX);\n convolveVertically(tmp, dest, srcH, destW, destH, filtersY); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./convolve\":2,\"./resize_filter_gen\":6}],6:[function(_dereq_,module,exports){\n// Calculate convolution filters for each destination point,\n// and pack data to Int16Array:\n//\n// [ shift, length, data..., shift2, length2, data..., ... ]\n//\n// - shift - offset in src image\n// - length - filter length (in src points)\n// - data - filter values sequence\n//\n'use strict';\n\nvar FILTER_INFO = _dereq_('./resize_filter_info'); // Precision of fixed FP values\n\n\nvar FIXED_FRAC_BITS = 14;\n\nfunction toFixedPoint(num) {\n return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));\n}\n\nmodule.exports = function resizeFilterGen(quality, srcSize, destSize, scale, offset) {\n var filterFunction = FILTER_INFO[quality].filter;\n var scaleInverted = 1.0 / scale;\n var scaleClamped = Math.min(1.0, scale); // For upscale\n // Filter window (averaging interval), scaled to src image\n\n var srcWindow = FILTER_INFO[quality].win / scaleClamped;\n var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;\n var leftNotEmpty, rightNotEmpty, filterShift, filterSize;\n var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);\n var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);\n var packedFilterPtr = 0;\n var slowCopy = !packedFilter.subarray || !packedFilter.set; // For each destination pixel calculate source range and built filter values\n\n for (destPixel = 0; destPixel < destSize; destPixel++) {\n // Scaling should be done relative to central pixel point\n srcPixel = (destPixel + 0.5) * scaleInverted + offset;\n srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));\n srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));\n filterElementSize = srcLast - srcFirst + 1;\n floatFilter = new Float32Array(filterElementSize);\n fxpFilter = new Int16Array(filterElementSize);\n total = 0.0; // Fill filter values for calculated range\n\n for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {\n floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);\n total += floatVal;\n floatFilter[idx] = floatVal;\n } // Normalize filter, convert to fixed point and accumulate conversion error\n\n\n filterTotal = 0;\n\n for (idx = 0; idx < floatFilter.length; idx++) {\n filterVal = floatFilter[idx] / total;\n filterTotal += filterVal;\n fxpFilter[idx] = toFixedPoint(filterVal);\n } // Compensate normalization error, to minimize brightness drift\n\n\n fxpFilter[destSize >> 1] += toFixedPoint(1.0 - filterTotal); //\n // Now pack filter to useable form\n //\n // 1. Trim heading and tailing zero values, and compensate shitf/length\n // 2. Put all to single array in this format:\n //\n // [ pos shift, data length, value1, value2, value3, ... ]\n //\n\n leftNotEmpty = 0;\n\n while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {\n leftNotEmpty++;\n }\n\n if (leftNotEmpty < fxpFilter.length) {\n rightNotEmpty = fxpFilter.length - 1;\n\n while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {\n rightNotEmpty--;\n }\n\n filterShift = srcFirst + leftNotEmpty;\n filterSize = rightNotEmpty - leftNotEmpty + 1;\n packedFilter[packedFilterPtr++] = filterShift; // shift\n\n packedFilter[packedFilterPtr++] = filterSize; // size\n\n if (!slowCopy) {\n packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);\n packedFilterPtr += filterSize;\n } else {\n // fallback for old IE < 11, without subarray/set methods\n for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {\n packedFilter[packedFilterPtr++] = fxpFilter[idx];\n }\n }\n } else {\n // zero data, write header only\n packedFilter[packedFilterPtr++] = 0; // shift\n\n packedFilter[packedFilterPtr++] = 0; // size\n }\n }\n\n return packedFilter;\n};\n\n},{\"./resize_filter_info\":7}],7:[function(_dereq_,module,exports){\n// Filter definitions to build tables for\n// resizing convolvers.\n//\n// Presets for quality 0..3. Filter functions + window size\n//\n'use strict';\n\nmodule.exports = [{\n // Nearest neibor (Box)\n win: 0.5,\n filter: function filter(x) {\n return x >= -0.5 && x < 0.5 ? 1.0 : 0.0;\n }\n}, {\n // Hamming\n win: 1.0,\n filter: function filter(x) {\n if (x <= -1.0 || x >= 1.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1.0));\n }\n}, {\n // Lanczos, win = 2\n win: 2.0,\n filter: function filter(x) {\n if (x <= -2.0 || x >= 2.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 2.0) / (xpi / 2.0);\n }\n}, {\n // Lanczos, win = 3\n win: 3.0,\n filter: function filter(x) {\n if (x <= -3.0 || x >= 3.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 3.0) / (xpi / 3.0);\n }\n}];\n\n},{}],8:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nfunction asUint8Array(src) {\n return new Uint8Array(src.buffer, 0, src.byteLength);\n}\n\nvar IS_LE = true; // should not crash everything on module load in old browsers\n\ntry {\n IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;\n} catch (__) {}\n\nfunction copyInt16asLE(src, target, target_offset) {\n if (IS_LE) {\n target.set(asUint8Array(src), target_offset);\n return;\n }\n\n for (var ptr = target_offset, i = 0; i < src.length; i++) {\n var data = src[i];\n target[ptr++] = data & 0xFF;\n target[ptr++] = data >> 8 & 0xFF;\n }\n}\n\nmodule.exports = function resize_wasm(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0.0;\n var offsetY = options.offsetY || 0.0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY); // destination is 0 too.\n\n var src_offset = 0; // buffer between convolve passes\n\n var tmp_offset = this.__align(src_offset + Math.max(src.byteLength, dest.byteLength));\n\n var filtersX_offset = this.__align(tmp_offset + srcH * destW * 4);\n\n var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);\n\n var alloc_bytes = filtersY_offset + filtersY.byteLength;\n\n var instance = this.__instance('resize', alloc_bytes); //\n // Fill memory block with data to process\n //\n\n\n var mem = new Uint8Array(this.__memory.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer); // 32-bit copy is much faster in chrome\n\n var src32 = new Uint32Array(src.buffer);\n mem32.set(src32); // We should guarantee LE bytes order. Filters are not big, so\n // speed difference is not significant vs direct .set()\n\n copyInt16asLE(filtersX, mem, filtersX_offset);\n copyInt16asLE(filtersY, mem, filtersY_offset); //\n // Now call webassembly method\n // emsdk does method names with '_'\n\n var fn = instance.exports.convolveHV || instance.exports._convolveHV;\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH); //\n // Copy data back to typed array\n //\n // 32-bit copy is much faster in chrome\n\n var dest32 = new Uint32Array(dest.buffer);\n dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW)); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./resize_filter_gen\":6}],9:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'unsharp_mask',\n fn: _dereq_('./unsharp_mask'),\n wasm_fn: _dereq_('./unsharp_mask_wasm'),\n wasm_src: _dereq_('./unsharp_mask_wasm_base64')\n};\n\n},{\"./unsharp_mask\":10,\"./unsharp_mask_wasm\":11,\"./unsharp_mask_wasm_base64\":12}],10:[function(_dereq_,module,exports){\n// Unsharp mask filter\n//\n// http://stackoverflow.com/a/23322820/1031804\n// USM(O) = O + (2 * (Amount / 100) * (O - GB))\n// GB - gaussian blur.\n//\n// Image is converted from RGB to HSV, unsharp mask is applied to the\n// brightness channel and then image is converted back to RGB.\n//\n'use strict';\n\nvar glur_mono16 = _dereq_('glur/mono16');\n\nfunction hsv_v16(img, width, height) {\n var size = width * height;\n var out = new Uint16Array(size);\n var r, g, b, max;\n\n for (var i = 0; i < size; i++) {\n r = img[4 * i];\n g = img[4 * i + 1];\n b = img[4 * i + 2];\n max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;\n out[i] = max << 8;\n }\n\n return out;\n}\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n var v1, v2, vmul;\n var diff, iTimes4;\n\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var brightness = hsv_v16(img, width, height);\n var blured = new Uint16Array(brightness); // copy, because blur modify src\n\n glur_mono16(blured, width, height, radius);\n var amountFp = amount / 100 * 0x1000 + 0.5 | 0;\n var thresholdFp = threshold << 8;\n var size = width * height;\n /* eslint-disable indent */\n\n for (var i = 0; i < size; i++) {\n v1 = brightness[i];\n diff = v1 - blured[i];\n\n if (Math.abs(diff) >= thresholdFp) {\n // add unsharp mask to the brightness channel\n v2 = v1 + (amountFp * diff + 0x800 >> 12); // Both v1 and v2 are within [0.0 .. 255.0] (0000-FF00) range, never going into\n // [255.003 .. 255.996] (FF01-FFFF). This allows to round this value as (x+.5)|0\n // later without overflowing.\n\n v2 = v2 > 0xff00 ? 0xff00 : v2;\n v2 = v2 < 0x0000 ? 0x0000 : v2; // Avoid division by 0. V=0 means rgb(0,0,0), unsharp with unsharpAmount>0 cannot\n // change this value (because diff between colors gets inflated), so no need to verify correctness.\n\n v1 = v1 !== 0 ? v1 : 1; // Multiplying V in HSV model by a constant is equivalent to multiplying each component\n // in RGB by the same constant (same for HSL), see also:\n // https://beesbuzz.biz/code/16-hsv-color-transforms\n\n vmul = (v2 << 12) / v1 | 0; // Result will be in [0..255] range because:\n // - all numbers are positive\n // - r,g,b <= (v1/256)\n // - r,g,b,(v1/256),(v2/256) <= 255\n // So highest this number can get is X*255/X+0.5=255.5 which is < 256 and rounds down.\n\n iTimes4 = i * 4;\n img[iTimes4] = img[iTimes4] * vmul + 0x800 >> 12; // R\n\n img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 0x800 >> 12; // G\n\n img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 0x800 >> 12; // B\n }\n }\n};\n\n},{\"glur/mono16\":18}],11:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var pixels = width * height;\n var img_bytes_cnt = pixels * 4;\n var hsv_bytes_cnt = pixels * 2;\n var blur_bytes_cnt = pixels * 2;\n var blur_line_byte_cnt = Math.max(width, height) * 4; // float32 array\n\n var blur_coeffs_byte_cnt = 8 * 4; // float32 array\n\n var img_offset = 0;\n var hsv_offset = img_bytes_cnt;\n var blur_offset = hsv_offset + hsv_bytes_cnt;\n var blur_tmp_offset = blur_offset + blur_bytes_cnt;\n var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;\n var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;\n\n var instance = this.__instance('unsharp_mask', img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {\n exp: Math.exp\n }); // 32-bit copy is much faster in chrome\n\n\n var img32 = new Uint32Array(img.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer);\n mem32.set(img32); // HSL\n\n var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;\n fn(img_offset, hsv_offset, width, height); // BLUR\n\n fn = instance.exports.blurMono16 || instance.exports._blurMono16;\n fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius); // UNSHARP\n\n fn = instance.exports.unsharp || instance.exports._unsharp;\n fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold); // 32-bit copy is much faster in chrome\n\n img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));\n};\n\n},{}],12:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = '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';\n\n},{}],13:[function(_dereq_,module,exports){\n'use strict';\n\nvar GC_INTERVAL = 100;\n\nfunction Pool(create, idle) {\n this.create = create;\n this.available = [];\n this.acquired = {};\n this.lastId = 1;\n this.timeoutId = 0;\n this.idle = idle || 2000;\n}\n\nPool.prototype.acquire = function () {\n var _this = this;\n\n var resource;\n\n if (this.available.length !== 0) {\n resource = this.available.pop();\n } else {\n resource = this.create();\n resource.id = this.lastId++;\n\n resource.release = function () {\n return _this.release(resource);\n };\n }\n\n this.acquired[resource.id] = resource;\n return resource;\n};\n\nPool.prototype.release = function (resource) {\n var _this2 = this;\n\n delete this.acquired[resource.id];\n resource.lastUsed = Date.now();\n this.available.push(resource);\n\n if (this.timeoutId === 0) {\n this.timeoutId = setTimeout(function () {\n return _this2.gc();\n }, GC_INTERVAL);\n }\n};\n\nPool.prototype.gc = function () {\n var _this3 = this;\n\n var now = Date.now();\n this.available = this.available.filter(function (resource) {\n if (now - resource.lastUsed > _this3.idle) {\n resource.destroy();\n return false;\n }\n\n return true;\n });\n\n if (this.available.length !== 0) {\n this.timeoutId = setTimeout(function () {\n return _this3.gc();\n }, GC_INTERVAL);\n } else {\n this.timeoutId = 0;\n }\n};\n\nmodule.exports = Pool;\n\n},{}],14:[function(_dereq_,module,exports){\n// Add intermediate resizing steps when scaling down by a very large factor.\n//\n// For example, when resizing 10000x10000 down to 10x10, it'll resize it to\n// 300x300 first.\n//\n// It's needed because tiler has issues when the entire tile is scaled down\n// to a few pixels (1024px source tile with border size 3 should result in\n// at least 3+3+2 = 8px target tile, so max scale factor is 128 here).\n//\n// Also, adding intermediate steps can speed up processing if we use lower\n// quality algorithms for first stages.\n//\n'use strict'; // min size = 0 results in infinite loop,\n// min size = 1 can consume large amount of memory\n\nvar MIN_INNER_TILE_SIZE = 2;\n\nmodule.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {\n var scaleX = toWidth / fromWidth;\n var scaleY = toHeight / fromHeight; // derived from createRegions equation:\n // innerTileWidth = pixelFloor(srcTileSize * scaleX) - 2 * destTileBorder;\n\n var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize; // refuse to scale image multiple times by less than twice each time,\n // it could only happen because of invalid options\n\n if (minScale > 0.5) return [[toWidth, toHeight]];\n var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale)); // no additional resizes are necessary,\n // stageCount can be zero or be negative when enlarging the image\n\n if (stageCount <= 1) return [[toWidth, toHeight]];\n var result = [];\n\n for (var i = 0; i < stageCount; i++) {\n var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));\n var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));\n result.push([width, height]);\n }\n\n return result;\n};\n\n},{}],15:[function(_dereq_,module,exports){\n// Split original image into multiple 1024x1024 chunks to reduce memory usage\n// (images have to be unpacked into typed arrays for resizing) and allow\n// parallel processing of multiple tiles at a time.\n//\n'use strict';\n/*\n * pixelFloor and pixelCeil are modified versions of Math.floor and Math.ceil\n * functions which take into account floating point arithmetic errors.\n * Those errors can cause undesired increments/decrements of sizes and offsets:\n * Math.ceil(36 / (36 / 500)) = 501\n * pixelCeil(36 / (36 / 500)) = 500\n */\n\nvar PIXEL_EPSILON = 1e-5;\n\nfunction pixelFloor(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.floor(x);\n}\n\nfunction pixelCeil(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.ceil(x);\n}\n\nmodule.exports = function createRegions(options) {\n var scaleX = options.toWidth / options.width;\n var scaleY = options.toHeight / options.height;\n var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;\n var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder; // prevent infinite loop, this should never happen\n\n if (innerTileWidth < 1 || innerTileHeight < 1) {\n throw new Error('Internal error in pica: target tile width/height is too small.');\n }\n\n var x, y;\n var innerX, innerY, toTileWidth, toTileHeight;\n var tiles = [];\n var tile; // we go top-to-down instead of left-to-right to make image displayed from top to\n // doesn in the browser\n\n for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {\n for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {\n x = innerX - options.destTileBorder;\n\n if (x < 0) {\n x = 0;\n }\n\n toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;\n\n if (x + toTileWidth >= options.toWidth) {\n toTileWidth = options.toWidth - x;\n }\n\n y = innerY - options.destTileBorder;\n\n if (y < 0) {\n y = 0;\n }\n\n toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;\n\n if (y + toTileHeight >= options.toHeight) {\n toTileHeight = options.toHeight - y;\n }\n\n tile = {\n toX: x,\n toY: y,\n toWidth: toTileWidth,\n toHeight: toTileHeight,\n toInnerX: innerX,\n toInnerY: innerY,\n toInnerWidth: innerTileWidth,\n toInnerHeight: innerTileHeight,\n offsetX: x / scaleX - pixelFloor(x / scaleX),\n offsetY: y / scaleY - pixelFloor(y / scaleY),\n scaleX: scaleX,\n scaleY: scaleY,\n x: pixelFloor(x / scaleX),\n y: pixelFloor(y / scaleY),\n width: pixelCeil(toTileWidth / scaleX),\n height: pixelCeil(toTileHeight / scaleY)\n };\n tiles.push(tile);\n }\n }\n\n return tiles;\n};\n\n},{}],16:[function(_dereq_,module,exports){\n'use strict';\n\nfunction objClass(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nmodule.exports.isCanvas = function isCanvas(element) {\n var cname = objClass(element);\n return cname === '[object HTMLCanvasElement]'\n /* browser */\n || cname === '[object OffscreenCanvas]' || cname === '[object Canvas]'\n /* node-canvas */\n ;\n};\n\nmodule.exports.isImage = function isImage(element) {\n return objClass(element) === '[object HTMLImageElement]';\n};\n\nmodule.exports.isImageBitmap = function isImageBitmap(element) {\n return objClass(element) === '[object ImageBitmap]';\n};\n\nmodule.exports.limiter = function limiter(concurrency) {\n var active = 0,\n queue = [];\n\n function roll() {\n if (active < concurrency && queue.length) {\n active++;\n queue.shift()();\n }\n }\n\n return function limit(fn) {\n return new Promise(function (resolve, reject) {\n queue.push(function () {\n fn().then(function (result) {\n resolve(result);\n active--;\n roll();\n }, function (err) {\n reject(err);\n active--;\n roll();\n });\n });\n roll();\n });\n };\n};\n\nmodule.exports.cib_quality_name = function cib_quality_name(num) {\n switch (num) {\n case 0:\n return 'pixelated';\n\n case 1:\n return 'low';\n\n case 2:\n return 'medium';\n }\n\n return 'high';\n};\n\nmodule.exports.cib_support = function cib_support(createCanvas) {\n return Promise.resolve().then(function () {\n if (typeof createImageBitmap === 'undefined') {\n return false;\n }\n\n var c = createCanvas(100, 100);\n return createImageBitmap(c, 0, 0, 100, 100, {\n resizeWidth: 10,\n resizeHeight: 10,\n resizeQuality: 'high'\n }).then(function (bitmap) {\n var status = bitmap.width === 10; // Branch below is filtered on upper level. We do not call resize\n // detection for basic ImageBitmap.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n // old Crome 51 has ImageBitmap without .close(). Then this code\n // will throw and return 'false' as expected.\n //\n\n bitmap.close();\n c = null;\n return status;\n });\n })[\"catch\"](function () {\n return false;\n });\n};\n\nmodule.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {\n return new Promise(function (resolve, reject) {\n if (typeof OffscreenCanvas === 'undefined') {\n // if OffscreenCanvas is present, we assume browser supports Worker and built-in Promise as well\n resolve(false);\n return;\n }\n\n function workerPayload(self) {\n if (typeof createImageBitmap === 'undefined') {\n self.postMessage(false);\n return;\n }\n\n Promise.resolve().then(function () {\n var canvas = new OffscreenCanvas(10, 10); // test that 2d context can be used in worker\n\n var ctx = canvas.getContext('2d');\n ctx.rect(0, 0, 1, 1); // test that cib can be used to return image bitmap from worker\n\n return createImageBitmap(canvas, 0, 0, 1, 1);\n }).then(function () {\n return self.postMessage(true);\n }, function () {\n return self.postMessage(false);\n });\n }\n\n var code = btoa(\"(\".concat(workerPayload.toString(), \")(self);\"));\n var w = new Worker(\"data:text/javascript;base64,\".concat(code));\n\n w.onmessage = function (ev) {\n return resolve(ev.data);\n };\n\n w.onerror = reject;\n }).then(function (result) {\n return result;\n }, function () {\n return false;\n });\n}; // Check if canvas.getContext('2d').getImageData can be used,\n// FireFox randomizes the output of that function in `privacy.resistFingerprinting` mode\n\n\nmodule.exports.can_use_canvas = function can_use_canvas(createCanvas) {\n var usable = false;\n\n try {\n var canvas = createCanvas(2, 1);\n var ctx = canvas.getContext('2d');\n var d = ctx.createImageData(2, 1);\n d.data[0] = 12;\n d.data[1] = 23;\n d.data[2] = 34;\n d.data[3] = 255;\n d.data[4] = 45;\n d.data[5] = 56;\n d.data[6] = 67;\n d.data[7] = 255;\n ctx.putImageData(d, 0, 0);\n d = null;\n d = ctx.getImageData(0, 0, 2, 1);\n\n if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {\n usable = true;\n }\n } catch (err) {}\n\n return usable;\n}; // Check if createImageBitmap(img, sx, sy, sw, sh) signature works correctly\n// with JPEG images oriented with Exif;\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n// TODO: remove after it's fixed in chrome for at least 2 releases\n\n\nmodule.exports.cib_can_use_region = function cib_can_use_region() {\n return new Promise(function (resolve) {\n if (typeof createImageBitmap === 'undefined') {\n resolve(false);\n return;\n }\n\n var image = new Image();\n image.src = 'data:image/jpeg;base64,' + '/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAA' + 'AABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9' + 'sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRc' + 'ZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoa' + 'GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRA' + 'f/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAA' + 'IQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAA' + 'AAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIB' + 'AT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAA' + 'AAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAA' + 'AAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQ' + 'QAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';\n\n image.onload = function () {\n createImageBitmap(image, 0, 0, image.width, image.height).then(function (bitmap) {\n if (bitmap.width === image.width && bitmap.height === image.height) {\n resolve(true);\n } else {\n resolve(false);\n }\n }, function () {\n return resolve(false);\n });\n };\n\n image.onerror = function () {\n return resolve(false);\n };\n });\n};\n\n},{}],17:[function(_dereq_,module,exports){\n// Web Worker wrapper for image resize function\n'use strict';\n\nmodule.exports = function () {\n var MathLib = _dereq_('./mathlib');\n\n var mathLib;\n /* eslint-disable no-undef */\n\n onmessage = function onmessage(ev) {\n var tileOpts = ev.data.opts;\n var returnBitmap = false;\n\n if (!tileOpts.src && tileOpts.srcBitmap) {\n var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);\n var ctx = canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n ctx.drawImage(tileOpts.srcBitmap, 0, 0);\n tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;\n canvas.width = canvas.height = 0;\n canvas = null;\n tileOpts.srcBitmap.close();\n tileOpts.srcBitmap = null; // Temporary force out data to typed array, because Chrome have artefacts\n // https://github.com/nodeca/pica/issues/223\n // returnBitmap = true;\n }\n\n if (!mathLib) mathLib = new MathLib(ev.data.features); // Use multimath's sync auto-init. Avoid Promise use in old browsers,\n // because polyfills are not propagated to webworker.\n\n var data = mathLib.resizeAndUnsharp(tileOpts);\n\n if (returnBitmap) {\n var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);\n\n var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);\n\n var _ctx = _canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n\n _ctx.putImageData(toImageData, 0, 0);\n\n createImageBitmap(_canvas).then(function (bitmap) {\n postMessage({\n bitmap: bitmap\n }, [bitmap]);\n });\n } else {\n postMessage({\n data: data\n }, [data.buffer]);\n }\n };\n};\n\n},{\"./mathlib\":1}],18:[function(_dereq_,module,exports){\n// Calculate Gaussian blur of an image using IIR filter\n// The method is taken from Intel's white paper and code example attached to it:\n// https://software.intel.com/en-us/articles/iir-gaussian-blur-filter\n// -implementation-using-intel-advanced-vector-extensions\n\nvar a0, a1, a2, a3, b1, b2, left_corner, right_corner;\n\nfunction gaussCoef(sigma) {\n if (sigma < 0.5) {\n sigma = 0.5;\n }\n\n var a = Math.exp(0.726 * 0.726) / sigma,\n g1 = Math.exp(-a),\n g2 = Math.exp(-2 * a),\n k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);\n\n a0 = k;\n a1 = k * (a - 1) * g1;\n a2 = k * (a + 1) * g1;\n a3 = -k * g2;\n b1 = 2 * g1;\n b2 = -g2;\n left_corner = (a0 + a1) / (1 - b1 - b2);\n right_corner = (a2 + a3) / (1 - b1 - b2);\n\n // Attempt to force type to FP32.\n return new Float32Array([ a0, a1, a2, a3, b1, b2, left_corner, right_corner ]);\n}\n\nfunction convolveMono16(src, out, line, coeff, width, height) {\n // takes src image and writes the blurred and transposed result into out\n\n var prev_src, curr_src, curr_out, prev_out, prev_prev_out;\n var src_index, out_index, line_index;\n var i, j;\n var coeff_a0, coeff_a1, coeff_b1, coeff_b2;\n\n for (i = 0; i < height; i++) {\n src_index = i * width;\n out_index = i;\n line_index = 0;\n\n // left to right\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[6];\n prev_out = prev_prev_out;\n\n coeff_a0 = coeff[0];\n coeff_a1 = coeff[1];\n coeff_b1 = coeff[4];\n coeff_b2 = coeff[5];\n\n for (j = 0; j < width; j++) {\n curr_src = src[src_index];\n\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n prev_src = curr_src;\n\n line[line_index] = prev_out;\n line_index++;\n src_index++;\n }\n\n src_index--;\n line_index--;\n out_index += height * (width - 1);\n\n // right to left\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[7];\n prev_out = prev_prev_out;\n curr_src = prev_src;\n\n coeff_a0 = coeff[2];\n coeff_a1 = coeff[3];\n\n for (j = width - 1; j >= 0; j--) {\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n\n prev_src = curr_src;\n curr_src = src[src_index];\n\n out[out_index] = line[line_index] + prev_out;\n\n src_index--;\n line_index--;\n out_index -= height;\n }\n }\n}\n\n\nfunction blurMono16(src, width, height, radius) {\n // Quick exit on zero radius\n if (!radius) { return; }\n\n var out = new Uint16Array(src.length),\n tmp_line = new Float32Array(Math.max(width, height));\n\n var coeff = gaussCoef(radius);\n\n convolveMono16(src, out, tmp_line, coeff, width, height, radius);\n convolveMono16(out, src, tmp_line, coeff, height, width, radius);\n}\n\nmodule.exports = blurMono16;\n\n},{}],19:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n\n},{}],20:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar assign = _dereq_('object-assign');\nvar base64decode = _dereq_('./lib/base64decode');\nvar hasWebAssembly = _dereq_('./lib/wa_detect');\n\n\nvar DEFAULT_OPTIONS = {\n js: true,\n wasm: true\n};\n\n\nfunction MultiMath(options) {\n if (!(this instanceof MultiMath)) return new MultiMath(options);\n\n var opts = assign({}, DEFAULT_OPTIONS, options || {});\n\n this.options = opts;\n\n this.__cache = {};\n\n this.__init_promise = null;\n this.__modules = opts.modules || {};\n this.__memory = null;\n this.__wasm = {};\n\n this.__isLE = ((new Uint32Array((new Uint8Array([ 1, 0, 0, 0 ])).buffer))[0] === 1);\n\n if (!this.options.js && !this.options.wasm) {\n throw new Error('mathlib: at least \"js\" or \"wasm\" should be enabled');\n }\n}\n\n\nMultiMath.prototype.has_wasm = hasWebAssembly;\n\n\nMultiMath.prototype.use = function (module) {\n this.__modules[module.name] = module;\n\n // Pin the best possible implementation\n if (this.options.wasm && this.has_wasm() && module.wasm_fn) {\n this[module.name] = module.wasm_fn;\n } else {\n this[module.name] = module.fn;\n }\n\n return this;\n};\n\n\nMultiMath.prototype.init = function () {\n if (this.__init_promise) return this.__init_promise;\n\n if (!this.options.js && this.options.wasm && !this.has_wasm()) {\n return Promise.reject(new Error('mathlib: only \"wasm\" was enabled, but it\\'s not supported'));\n }\n\n var self = this;\n\n this.__init_promise = Promise.all(Object.keys(self.__modules).map(function (name) {\n var module = self.__modules[name];\n\n if (!self.options.wasm || !self.has_wasm() || !module.wasm_fn) return null;\n\n // If already compiled - exit\n if (self.__wasm[name]) return null;\n\n // Compile wasm source\n return WebAssembly.compile(self.__base64decode(module.wasm_src))\n .then(function (m) { self.__wasm[name] = m; });\n }))\n .then(function () { return self; });\n\n return this.__init_promise;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Methods below are for internal use from plugins\n\n\n// Simple decode base64 to typed array. Useful to load embedded webassembly\n// code. You probably don't need to call this method directly.\n//\nMultiMath.prototype.__base64decode = base64decode;\n\n\n// Increase current memory to include specified number of bytes. Do nothing if\n// size is already ok. You probably don't need to call this method directly,\n// because it will be invoked from `.__instance()`.\n//\nMultiMath.prototype.__reallocate = function mem_grow_to(bytes) {\n if (!this.__memory) {\n this.__memory = new WebAssembly.Memory({\n initial: Math.ceil(bytes / (64 * 1024))\n });\n return this.__memory;\n }\n\n var mem_size = this.__memory.buffer.byteLength;\n\n if (mem_size < bytes) {\n this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));\n }\n\n return this.__memory;\n};\n\n\n// Returns instantinated webassembly item by name, with specified memory size\n// and environment.\n// - use cache if available\n// - do sync module init, if async init was not called earlier\n// - allocate memory if not enougth\n// - can export functions to webassembly via \"env_extra\",\n// for example, { exp: Math.exp }\n//\nMultiMath.prototype.__instance = function instance(name, memsize, env_extra) {\n if (memsize) this.__reallocate(memsize);\n\n // If .init() was not called, do sync compile\n if (!this.__wasm[name]) {\n var module = this.__modules[name];\n this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module.wasm_src));\n }\n\n if (!this.__cache[name]) {\n var env_base = {\n memoryBase: 0,\n memory: this.__memory,\n tableBase: 0,\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n };\n\n this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {\n env: assign(env_base, env_extra || {})\n });\n }\n\n return this.__cache[name];\n};\n\n\n// Helper to calculate memory aligh for pointers. Webassembly does not require\n// this, but you may wish to experiment. Default base = 8;\n//\nMultiMath.prototype.__align = function align(number, base) {\n base = base || 8;\n var reminder = number % base;\n return number + (reminder ? base - reminder : 0);\n};\n\n\nmodule.exports = MultiMath;\n\n},{\"./lib/base64decode\":21,\"./lib/wa_detect\":22,\"object-assign\":23}],21:[function(_dereq_,module,exports){\n// base64 decode str -> Uint8Array, to load WA modules\n//\n'use strict';\n\n\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\nmodule.exports = function base64decode(str) {\n var input = str.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length;\n\n var out = new Uint8Array((max * 3) >> 2);\n\n // Collect by 6*4 bits (3 bytes)\n\n var bits = 0;\n var ptr = 0;\n\n for (var idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n }\n\n bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n var tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n } else if (tailbits === 18) {\n out[ptr++] = (bits >> 10) & 0xFF;\n out[ptr++] = (bits >> 2) & 0xFF;\n } else if (tailbits === 12) {\n out[ptr++] = (bits >> 4) & 0xFF;\n }\n\n return out;\n};\n\n},{}],22:[function(_dereq_,module,exports){\n// Detect WebAssembly support.\n// - Check global WebAssembly object\n// - Try to load simple module (can be disabled via CSP)\n//\n'use strict';\n\n\nvar wa;\n\n\nmodule.exports = function hasWebAssembly() {\n // use cache if called before;\n if (typeof wa !== 'undefined') return wa;\n\n wa = false;\n\n if (typeof WebAssembly === 'undefined') return wa;\n\n // If WebAssenbly is disabled, code can throw on compile\n try {\n // https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js\n // Additional check that WA internals are correct\n\n /* eslint-disable comma-spacing, max-len */\n var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);\n var module = new WebAssembly.Module(bin);\n var instance = new WebAssembly.Instance(module, {});\n\n // test storing to and loading from a non-zero location via a parameter.\n // Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations\n if (instance.exports.test(4) !== 0) wa = true;\n\n return wa;\n } catch (__) {}\n\n return wa;\n};\n\n},{}],23:[function(_dereq_,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],24:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],\"/index.js\":[function(_dereq_,module,exports){\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar assign = _dereq_('object-assign');\n\nvar webworkify = _dereq_('webworkify');\n\nvar MathLib = _dereq_('./lib/mathlib');\n\nvar Pool = _dereq_('./lib/pool');\n\nvar utils = _dereq_('./lib/utils');\n\nvar worker = _dereq_('./lib/worker');\n\nvar createStages = _dereq_('./lib/stepper');\n\nvar createRegions = _dereq_('./lib/tiler'); // Deduplicate pools & limiters with the same configs\n// when user creates multiple pica instances.\n\n\nvar singletones = {};\nvar NEED_SAFARI_FIX = false;\n\ntry {\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n NEED_SAFARI_FIX = navigator.userAgent.indexOf('Safari') >= 0;\n }\n} catch (e) {}\n\nvar concurrency = 1;\n\nif (typeof navigator !== 'undefined') {\n concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);\n}\n\nvar DEFAULT_PICA_OPTS = {\n tile: 1024,\n concurrency: concurrency,\n features: ['js', 'wasm', 'ww'],\n idle: 2000,\n createCanvas: function createCanvas(width, height) {\n var tmpCanvas = document.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n return tmpCanvas;\n }\n};\nvar DEFAULT_RESIZE_OPTS = {\n quality: 3,\n alpha: false,\n unsharpAmount: 0,\n unsharpRadius: 0.0,\n unsharpThreshold: 0\n};\nvar CAN_NEW_IMAGE_DATA = false;\nvar CAN_CREATE_IMAGE_BITMAP = false;\nvar CAN_USE_CANVAS_GET_IMAGE_DATA = false;\nvar CAN_USE_OFFSCREEN_CANVAS = false;\nvar CAN_USE_CIB_REGION_FOR_IMAGE = false;\n\nfunction workerFabric() {\n return {\n value: webworkify(worker),\n destroy: function destroy() {\n this.value.terminate();\n\n if (typeof window !== 'undefined') {\n var url = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n if (url && url.revokeObjectURL && this.value.objectURL) {\n url.revokeObjectURL(this.value.objectURL);\n }\n }\n }\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// API methods\n\n\nfunction Pica(options) {\n if (!(this instanceof Pica)) return new Pica(options);\n this.options = assign({}, DEFAULT_PICA_OPTS, options || {});\n var limiter_key = \"lk_\".concat(this.options.concurrency); // Share limiters to avoid multiple parallel workers when user creates\n // multiple pica instances.\n\n this.__limit = singletones[limiter_key] || utils.limiter(this.options.concurrency);\n if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit; // List of supported features, according to options & browser/node.js\n\n this.features = {\n js: false,\n // pure JS implementation, can be disabled for testing\n wasm: false,\n // webassembly implementation for heavy functions\n cib: false,\n // resize via createImageBitmap (only FF at this moment)\n ww: false // webworkers\n\n };\n this.__workersPool = null; // Store requested features for webworkers\n\n this.__requested_features = [];\n this.__mathlib = null;\n}\n\nPica.prototype.init = function () {\n var _this = this;\n\n if (this.__initPromise) return this.__initPromise; // Test if we can create ImageData without canvas and memory copy\n\n if (typeof ImageData !== 'undefined' && typeof Uint8ClampedArray !== 'undefined') {\n try {\n /* eslint-disable no-new */\n new ImageData(new Uint8ClampedArray(400), 10, 10);\n CAN_NEW_IMAGE_DATA = true;\n } catch (__) {}\n } // ImageBitmap can be effective in 2 places:\n //\n // 1. Threaded jpeg unpack (basic)\n // 2. Built-in resize (blocked due problem in chrome, see issue #89)\n //\n // For basic use we also need ImageBitmap wo support .close() method,\n // see https://developer.mozilla.org/ru/docs/Web/API/ImageBitmap\n\n\n if (typeof ImageBitmap !== 'undefined') {\n if (ImageBitmap.prototype && ImageBitmap.prototype.close) {\n CAN_CREATE_IMAGE_BITMAP = true;\n } else {\n this.debug('ImageBitmap does not support .close(), disabled');\n }\n }\n\n var features = this.options.features.slice();\n\n if (features.indexOf('all') >= 0) {\n features = ['cib', 'wasm', 'js', 'ww'];\n }\n\n this.__requested_features = features;\n this.__mathlib = new MathLib(features); // Check WebWorker support if requested\n\n if (features.indexOf('ww') >= 0) {\n if (typeof window !== 'undefined' && 'Worker' in window) {\n // IE <= 11 don't allow to create webworkers from string. We should check it.\n // https://connect.microsoft.com/IE/feedback/details/801810/web-workers-from-blob-urls-in-ie-10-and-11\n try {\n var wkr = _dereq_('webworkify')(function () {});\n\n wkr.terminate();\n this.features.ww = true; // pool uniqueness depends on pool config + webworker config\n\n var wpool_key = \"wp_\".concat(JSON.stringify(this.options));\n\n if (singletones[wpool_key]) {\n this.__workersPool = singletones[wpool_key];\n } else {\n this.__workersPool = new Pool(workerFabric, this.options.idle);\n singletones[wpool_key] = this.__workersPool;\n }\n } catch (__) {}\n }\n }\n\n var initMath = this.__mathlib.init().then(function (mathlib) {\n // Copy detected features\n assign(_this.features, mathlib.features);\n });\n\n var checkCibResize;\n\n if (!CAN_CREATE_IMAGE_BITMAP) {\n checkCibResize = Promise.resolve(false);\n } else {\n checkCibResize = utils.cib_support(this.options.createCanvas).then(function (status) {\n if (_this.features.cib && features.indexOf('cib') < 0) {\n _this.debug('createImageBitmap() resize supported, but disabled by config');\n\n return;\n }\n\n if (features.indexOf('cib') >= 0) _this.features.cib = status;\n });\n }\n\n CAN_USE_CANVAS_GET_IMAGE_DATA = utils.can_use_canvas(this.options.createCanvas);\n var checkOffscreenCanvas;\n\n if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf('ww') !== -1) {\n checkOffscreenCanvas = utils.worker_offscreen_canvas_support();\n } else {\n checkOffscreenCanvas = Promise.resolve(false);\n }\n\n checkOffscreenCanvas = checkOffscreenCanvas.then(function (result) {\n CAN_USE_OFFSCREEN_CANVAS = result;\n }); // we use createImageBitmap to crop image data and pass it to workers,\n // so need to check whether function works correctly;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n\n var checkCibRegion = utils.cib_can_use_region().then(function (result) {\n CAN_USE_CIB_REGION_FOR_IMAGE = result;\n }); // Init math lib. That's async because can load some\n\n this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function () {\n return _this;\n });\n return this.__initPromise;\n}; // Call resizer in webworker or locally, depending on config\n\n\nPica.prototype.__invokeResize = function (tileOpts, opts) {\n var _this2 = this;\n\n // Share cache between calls:\n //\n // - wasm instance\n // - wasm memory object\n //\n opts.__mathCache = opts.__mathCache || {};\n return Promise.resolve().then(function () {\n if (!_this2.features.ww) {\n // not possible to have ImageBitmap here if user disabled WW\n return {\n data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)\n };\n }\n\n return new Promise(function (resolve, reject) {\n var w = _this2.__workersPool.acquire();\n\n if (opts.cancelToken) opts.cancelToken[\"catch\"](function (err) {\n return reject(err);\n });\n\n w.value.onmessage = function (ev) {\n w.release();\n if (ev.data.err) reject(ev.data.err);else resolve(ev.data);\n };\n\n var transfer = [];\n if (tileOpts.src) transfer.push(tileOpts.src.buffer);\n if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);\n w.value.postMessage({\n opts: tileOpts,\n features: _this2.__requested_features,\n preload: {\n wasm_nodule: _this2.__mathlib.__\n }\n }, transfer);\n });\n });\n}; // this function can return promise if createImageBitmap is used\n\n\nPica.prototype.__extractTileData = function (tile, from, opts, stageEnv, extractTo) {\n if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && ( // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,\n // can use canvas because canvas doesn't have orientation;\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n utils.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {\n this.debug('Create tile for OffscreenCanvas');\n return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function (bitmap) {\n extractTo.srcBitmap = bitmap;\n return extractTo;\n });\n } // Extract tile RGBA buffer, depending on input type\n\n\n if (utils.isCanvas(from)) {\n if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext('2d', {\n alpha: Boolean(opts.alpha)\n }); // If input is Canvas - extract region data directly\n\n this.debug('Get tile pixel data');\n extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;\n return extractTo;\n } // If input is Image or decoded to ImageBitmap,\n // draw region to temporary canvas and extract data from it\n //\n // Note! Attempt to reuse this canvas causes significant slowdown in chrome\n //\n\n\n this.debug('Draw tile imageBitmap/image to temporary canvas');\n var tmpCanvas = this.options.createCanvas(tile.width, tile.height);\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.globalCompositeOperation = 'copy';\n tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);\n this.debug('Get tile pixel data');\n extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data; // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n return extractTo;\n};\n\nPica.prototype.__landTileData = function (tile, result, stageEnv) {\n var toImageData;\n this.debug('Convert raw rgba tile result to ImageData');\n\n if (result.bitmap) {\n stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);\n return null;\n }\n\n if (CAN_NEW_IMAGE_DATA) {\n // this branch is for modern browsers\n // If `new ImageData()` & Uint8ClampedArray suported\n toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);\n } else {\n // fallback for `node-canvas` and old browsers\n // (IE11 has ImageData but does not support `new ImageData()`)\n toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);\n\n if (toImageData.data.set) {\n toImageData.data.set(result.data);\n } else {\n // IE9 don't have `.set()`\n for (var i = toImageData.data.length - 1; i >= 0; i--) {\n toImageData.data[i] = result.data[i];\n }\n }\n }\n\n this.debug('Draw tile');\n\n if (NEED_SAFARI_FIX) {\n // Safari draws thin white stripes between tiles without this fix\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);\n } else {\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);\n }\n\n return null;\n};\n\nPica.prototype.__tileAndResize = function (from, to, opts) {\n var _this3 = this;\n\n var stageEnv = {\n srcCtx: null,\n srcImageBitmap: null,\n isImageBitmapReused: false,\n toCtx: null\n };\n\n var processTile = function processTile(tile) {\n return _this3.__limit(function () {\n if (opts.canceled) return opts.cancelToken;\n var tileOpts = {\n width: tile.width,\n height: tile.height,\n toWidth: tile.toWidth,\n toHeight: tile.toHeight,\n scaleX: tile.scaleX,\n scaleY: tile.scaleY,\n offsetX: tile.offsetX,\n offsetY: tile.offsetY,\n quality: opts.quality,\n alpha: opts.alpha,\n unsharpAmount: opts.unsharpAmount,\n unsharpRadius: opts.unsharpRadius,\n unsharpThreshold: opts.unsharpThreshold\n };\n\n _this3.debug('Invoke resize math');\n\n return Promise.resolve(tileOpts).then(function (tileOpts) {\n return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts);\n }).then(function (tileOpts) {\n _this3.debug('Invoke resize math');\n\n return _this3.__invokeResize(tileOpts, opts);\n }).then(function (result) {\n if (opts.canceled) return opts.cancelToken;\n stageEnv.srcImageData = null;\n return _this3.__landTileData(tile, result, stageEnv);\n });\n });\n }; // Need to normalize data source first. It can be canvas or image.\n // If image - try to decode in background if possible\n\n\n return Promise.resolve().then(function () {\n stageEnv.toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n if (utils.isCanvas(from)) return null;\n\n if (utils.isImageBitmap(from)) {\n stageEnv.srcImageBitmap = from;\n stageEnv.isImageBitmapReused = true;\n return null;\n }\n\n if (utils.isImage(from)) {\n // try do decode image in background for faster next operations;\n // if we're using offscreen canvas, cib is called per tile, so not needed here\n if (!CAN_CREATE_IMAGE_BITMAP) return null;\n\n _this3.debug('Decode image via createImageBitmap');\n\n return createImageBitmap(from).then(function (imageBitmap) {\n stageEnv.srcImageBitmap = imageBitmap;\n }) // Suppress error to use fallback, if method fails\n // https://github.com/nodeca/pica/issues/190\n\n /* eslint-disable no-unused-vars */\n [\"catch\"](function (e) {\n return null;\n });\n }\n\n throw new Error('Pica: \".from\" should be Image, Canvas or ImageBitmap');\n }).then(function () {\n if (opts.canceled) return opts.cancelToken;\n\n _this3.debug('Calculate tiles'); //\n // Here we are with \"normalized\" source,\n // follow to tiling\n //\n\n\n var regions = createRegions({\n width: opts.width,\n height: opts.height,\n srcTileSize: _this3.options.tile,\n toWidth: opts.toWidth,\n toHeight: opts.toHeight,\n destTileBorder: opts.__destTileBorder\n });\n var jobs = regions.map(function (tile) {\n return processTile(tile);\n });\n\n function cleanup(stageEnv) {\n if (stageEnv.srcImageBitmap) {\n if (!stageEnv.isImageBitmapReused) stageEnv.srcImageBitmap.close();\n stageEnv.srcImageBitmap = null;\n }\n }\n\n _this3.debug('Process tiles');\n\n return Promise.all(jobs).then(function () {\n _this3.debug('Finished!');\n\n cleanup(stageEnv);\n return to;\n }, function (err) {\n cleanup(stageEnv);\n throw err;\n });\n });\n};\n\nPica.prototype.__processStages = function (stages, from, to, opts) {\n var _this4 = this;\n\n if (opts.canceled) return opts.cancelToken;\n\n var _stages$shift = stages.shift(),\n _stages$shift2 = _slicedToArray(_stages$shift, 2),\n toWidth = _stages$shift2[0],\n toHeight = _stages$shift2[1];\n\n var isLastStage = stages.length === 0;\n opts = assign({}, opts, {\n toWidth: toWidth,\n toHeight: toHeight,\n // only use user-defined quality for the last stage,\n // use simpler (Hamming) filter for the first stages where\n // scale factor is large enough (more than 2-3)\n quality: isLastStage ? opts.quality : Math.min(1, opts.quality)\n });\n var tmpCanvas;\n\n if (!isLastStage) {\n // create temporary canvas\n tmpCanvas = this.options.createCanvas(toWidth, toHeight);\n }\n\n return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function () {\n if (isLastStage) return to;\n opts.width = toWidth;\n opts.height = toHeight;\n return _this4.__processStages(stages, tmpCanvas, to, opts);\n }).then(function (res) {\n if (tmpCanvas) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n tmpCanvas.width = tmpCanvas.height = 0;\n }\n\n return res;\n });\n};\n\nPica.prototype.__resizeViaCreateImageBitmap = function (from, to, opts) {\n var _this5 = this;\n\n var toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n this.debug('Resize via createImageBitmap()');\n return createImageBitmap(from, {\n resizeWidth: opts.toWidth,\n resizeHeight: opts.toHeight,\n resizeQuality: utils.cib_quality_name(opts.quality)\n }).then(function (imageBitmap) {\n if (opts.canceled) return opts.cancelToken; // if no unsharp - draw directly to output canvas\n\n if (!opts.unsharpAmount) {\n toCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n }\n\n _this5.debug('Unsharp result');\n\n var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);\n\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);\n\n _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);\n\n toCtx.putImageData(iData, 0, 0); // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n iData = tmpCtx = tmpCanvas = toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n });\n};\n\nPica.prototype.resize = function (from, to, options) {\n var _this6 = this;\n\n this.debug('Start resize...');\n var opts = assign({}, DEFAULT_RESIZE_OPTS);\n\n if (!isNaN(options)) {\n opts = assign(opts, {\n quality: options\n });\n } else if (options) {\n opts = assign(opts, options);\n }\n\n opts.toWidth = to.width;\n opts.toHeight = to.height;\n opts.width = from.naturalWidth || from.width;\n opts.height = from.naturalHeight || from.height; // Prevent stepper from infinite loop\n\n if (to.width === 0 || to.height === 0) {\n return Promise.reject(new Error(\"Invalid output size: \".concat(to.width, \"x\").concat(to.height)));\n }\n\n if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;\n opts.canceled = false;\n\n if (opts.cancelToken) {\n // Wrap cancelToken to avoid successive resolve & set flag\n opts.cancelToken = opts.cancelToken.then(function (data) {\n opts.canceled = true;\n throw data;\n }, function (err) {\n opts.canceled = true;\n throw err;\n });\n }\n\n var DEST_TILE_BORDER = 3; // Max possible filter window size\n\n opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));\n return this.init().then(function () {\n if (opts.canceled) return opts.cancelToken; // if createImageBitmap supports resize, just do it and return\n\n if (_this6.features.cib) {\n return _this6.__resizeViaCreateImageBitmap(from, to, opts);\n }\n\n if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {\n var err = new Error('Pica: cannot use getImageData on canvas, ' + \"make sure fingerprinting protection isn't enabled\");\n err.code = 'ERR_GET_IMAGE_DATA';\n throw err;\n } //\n // No easy way, let's resize manually via arrays\n //\n\n\n var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);\n return _this6.__processStages(stages, from, to, opts);\n });\n}; // RGBA buffer resize\n//\n\n\nPica.prototype.resizeBuffer = function (options) {\n var _this7 = this;\n\n var opts = assign({}, DEFAULT_RESIZE_OPTS, options);\n return this.init().then(function () {\n return _this7.__mathlib.resizeAndUnsharp(opts);\n });\n};\n\nPica.prototype.toBlob = function (canvas, mimeType, quality) {\n mimeType = mimeType || 'image/png';\n return new Promise(function (resolve) {\n if (canvas.toBlob) {\n canvas.toBlob(function (blob) {\n return resolve(blob);\n }, mimeType, quality);\n return;\n }\n\n if (canvas.convertToBlob) {\n resolve(canvas.convertToBlob({\n type: mimeType,\n quality: quality\n }));\n return;\n } // Fallback for old browsers\n\n\n var asString = atob(canvas.toDataURL(mimeType, quality).split(',')[1]);\n var len = asString.length;\n var asBuffer = new Uint8Array(len);\n\n for (var i = 0; i < len; i++) {\n asBuffer[i] = asString.charCodeAt(i);\n }\n\n resolve(new Blob([asBuffer], {\n type: mimeType\n }));\n });\n};\n\nPica.prototype.debug = function () {};\n\nmodule.exports = Pica;\n\n},{\"./lib/mathlib\":1,\"./lib/pool\":13,\"./lib/stepper\":14,\"./lib/tiler\":15,\"./lib/utils\":16,\"./lib/worker\":17,\"object-assign\":23,\"webworkify\":24}]},{},[])(\"/index.js\")\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY2EvZGlzdC9waWNhLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSxHQUFHLElBQXNELEVBQUUsbUJBQW1CLEtBQUssVUFBNk4sQ0FBQyxhQUFhLDBCQUEwQixtQkFBbUIsa0JBQWtCLGdCQUFnQixVQUFVLFVBQVUsTUFBTSxTQUFtQyxDQUFDLGdCQUFnQixPQUFDLE9BQU8sb0JBQW9CLDhDQUE4QyxrQ0FBa0MsWUFBWSxZQUFZLG1DQUFtQyxpQkFBaUIsZUFBZSxzQkFBc0Isb0JBQW9CLFVBQVUsU0FBbUMsS0FBSyxXQUFXLFlBQVksU0FBUyxTQUFTLEtBQUs7QUFDenpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUMsRUFBRSxtRUFBbUU7QUFDdEU7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCLGlCQUFpQixhQUFhO0FBQzlCLG1CQUFtQjs7QUFFbkIsb0JBQW9CLGVBQWU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCLGFBQWEsZ0JBQWdCO0FBQzdCLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUVBOztBQUVBLENBQUMsRUFBRSw0SUFBNEksRUFBRSxHQUFHO0FBQ3BKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY2EvZGlzdC9waWNhLmpzP2ZmNTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cbnBpY2Fcbmh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYVxuXG4qL1xuXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5waWNhID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSh7MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBDb2xsZWN0aW9uIG9mIG1hdGggZnVuY3Rpb25zXG4vL1xuLy8gMS4gQ29tYmluZSBjb21wb25lbnRzIHRvZ2V0aGVyXG4vLyAyLiBIYXMgYXN5bmMgaW5pdCB0byBsb2FkIHdhc20gbW9kdWxlc1xuLy9cbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gX2RlcmVxXygnaW5oZXJpdHMnKTtcblxudmFyIE11bHRpbWF0aCA9IF9kZXJlcV8oJ211bHRpbWF0aCcpO1xuXG52YXIgbW1fdW5zaGFycF9tYXNrID0gX2RlcmVxXygnLi9tbV91bnNoYXJwX21hc2snKTtcblxudmFyIG1tX3Jlc2l6ZSA9IF9kZXJlcV8oJy4vbW1fcmVzaXplJyk7XG5cbmZ1bmN0aW9uIE1hdGhMaWIocmVxdWVzdGVkX2ZlYXR1cmVzKSB7XG4gIHZhciBfX3JlcXVlc3RlZF9mZWF0dXJlcyA9IHJlcXVlc3RlZF9mZWF0dXJlcyB8fCBbXTtcblxuICB2YXIgZmVhdHVyZXMgPSB7XG4gICAganM6IF9fcmVxdWVzdGVkX2ZlYXR1cmVzLmluZGV4T2YoJ2pzJykgPj0gMCxcbiAgICB3YXNtOiBfX3JlcXVlc3RlZF9mZWF0dXJlcy5pbmRleE9mKCd3YXNtJykgPj0gMFxuICB9O1xuICBNdWx0aW1hdGguY2FsbCh0aGlzLCBmZWF0dXJlcyk7XG4gIHRoaXMuZmVhdHVyZXMgPSB7XG4gICAganM6IGZlYXR1cmVzLmpzLFxuICAgIHdhc206IGZlYXR1cmVzLndhc20gJiYgdGhpcy5oYXNfd2FzbSgpXG4gIH07XG4gIHRoaXMudXNlKG1tX3Vuc2hhcnBfbWFzayk7XG4gIHRoaXMudXNlKG1tX3Jlc2l6ZSk7XG59XG5cbmluaGVyaXRzKE1hdGhMaWIsIE11bHRpbWF0aCk7XG5cbk1hdGhMaWIucHJvdG90eXBlLnJlc2l6ZUFuZFVuc2hhcnAgPSBmdW5jdGlvbiByZXNpemVBbmRVbnNoYXJwKG9wdGlvbnMsIGNhY2hlKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLnJlc2l6ZShvcHRpb25zLCBjYWNoZSk7XG5cbiAgaWYgKG9wdGlvbnMudW5zaGFycEFtb3VudCkge1xuICAgIHRoaXMudW5zaGFycF9tYXNrKHJlc3VsdCwgb3B0aW9ucy50b1dpZHRoLCBvcHRpb25zLnRvSGVpZ2h0LCBvcHRpb25zLnVuc2hhcnBBbW91bnQsIG9wdGlvbnMudW5zaGFycFJhZGl1cywgb3B0aW9ucy51bnNoYXJwVGhyZXNob2xkKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGhMaWI7XG5cbn0se1wiLi9tbV9yZXNpemVcIjo0LFwiLi9tbV91bnNoYXJwX21hc2tcIjo5LFwiaW5oZXJpdHNcIjoxOSxcIm11bHRpbWF0aFwiOjIwfV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBSZXNpemUgY29udm9sdmVycywgcHVyZSBKUyBpbXBsZW1lbnRhdGlvblxuLy9cbid1c2Ugc3RyaWN0JzsgLy8gUHJlY2lzaW9uIG9mIGZpeGVkIEZQIHZhbHVlc1xuLy92YXIgRklYRURfRlJBQ19CSVRTID0gMTQ7XG5cbmZ1bmN0aW9uIGNsYW1wVG84KGkpIHtcbiAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xufSAvLyBDb252b2x2ZSBpbWFnZSBpbiBob3Jpem9udGFsIGRpcmVjdGlvbnMgYW5kIHRyYW5zcG9zZSBvdXRwdXQuIEluIHRoZW9yeSxcbi8vIHRyYW5zcG9zZSBhbGxvdzpcbi8vXG4vLyAtIHVzZSB0aGUgc2FtZSBjb252b2x2ZXIgZm9yIGJvdGggcGFzc2VzICh0aGlzIGZhaWxzIGR1ZSBkaWZmZXJlbnRcbi8vICAgdHlwZXMgb2YgaW5wdXQgYXJyYXkgYW5kIHRlbXBvcmFyeSBidWZmZXIpXG4vLyAtIG1ha2luZyB2ZXJ0aWNhbCBwYXNzIGJ5IGhvcmlzb25sdGFsIGxpbmVzIGlucHJvdmUgQ1BVIGNhY2hlIHVzZS5cbi8vXG4vLyBCdXQgaW4gcmVhbCBsaWZlIHRoaXMgZG9lc24ndCB3b3JrIDopXG4vL1xuXG5cbmZ1bmN0aW9uIGNvbnZvbHZlSG9yaXpvbnRhbGx5KHNyYywgZGVzdCwgc3JjVywgc3JjSCwgZGVzdFcsIGZpbHRlcnMpIHtcbiAgdmFyIHIsIGcsIGIsIGE7XG4gIHZhciBmaWx0ZXJQdHIsIGZpbHRlclNoaWZ0LCBmaWx0ZXJTaXplO1xuICB2YXIgc3JjUHRyLCBzcmNZLCBkZXN0WCwgZmlsdGVyVmFsO1xuICB2YXIgc3JjT2Zmc2V0ID0gMCxcbiAgICAgIGRlc3RPZmZzZXQgPSAwOyAvLyBGb3IgZWFjaCByb3dcblxuICBmb3IgKHNyY1kgPSAwOyBzcmNZIDwgc3JjSDsgc3JjWSsrKSB7XG4gICAgZmlsdGVyUHRyID0gMDsgLy8gQXBwbHkgcHJlY29tcHV0ZWQgZmlsdGVycyB0byBlYWNoIGRlc3RpbmF0aW9uIHJvdyBwb2ludFxuXG4gICAgZm9yIChkZXN0WCA9IDA7IGRlc3RYIDwgZGVzdFc7IGRlc3RYKyspIHtcbiAgICAgIC8vIEdldCB0aGUgZmlsdGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgY3VycmVudCBvdXRwdXQgcGl4ZWwuXG4gICAgICBmaWx0ZXJTaGlmdCA9IGZpbHRlcnNbZmlsdGVyUHRyKytdO1xuICAgICAgZmlsdGVyU2l6ZSA9IGZpbHRlcnNbZmlsdGVyUHRyKytdO1xuICAgICAgc3JjUHRyID0gc3JjT2Zmc2V0ICsgZmlsdGVyU2hpZnQgKiA0IHwgMDtcbiAgICAgIHIgPSBnID0gYiA9IGEgPSAwOyAvLyBBcHBseSB0aGUgZmlsdGVyIHRvIHRoZSByb3cgdG8gZ2V0IHRoZSBkZXN0aW5hdGlvbiBwaXhlbCByLCBnLCBiLCBhXG5cbiAgICAgIGZvciAoOyBmaWx0ZXJTaXplID4gMDsgZmlsdGVyU2l6ZS0tKSB7XG4gICAgICAgIGZpbHRlclZhbCA9IGZpbHRlcnNbZmlsdGVyUHRyKytdOyAvLyBVc2UgcmV2ZXJzZSBvcmRlciB0byB3b3JrYXJvdW5kIGRlb3B0cyBpbiBvbGQgdjggKG5vZGUgdi4xMClcbiAgICAgICAgLy8gQmlnIHRoYW5rcyB0byBAbXJhbGVwaCAoVnlhY2hlc2xhdiBFZ29yb3YpIGZvciB0aGUgdGlwLlxuXG4gICAgICAgIGEgPSBhICsgZmlsdGVyVmFsICogc3JjW3NyY1B0ciArIDNdIHwgMDtcbiAgICAgICAgYiA9IGIgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyICsgMl0gfCAwO1xuICAgICAgICBnID0gZyArIGZpbHRlclZhbCAqIHNyY1tzcmNQdHIgKyAxXSB8IDA7XG4gICAgICAgIHIgPSByICsgZmlsdGVyVmFsICogc3JjW3NyY1B0cl0gfCAwO1xuICAgICAgICBzcmNQdHIgPSBzcmNQdHIgKyA0IHwgMDtcbiAgICAgIH0gLy8gQnJpbmcgdGhpcyB2YWx1ZSBiYWNrIGluIHJhbmdlLiBBbGwgb2YgdGhlIGZpbHRlciBzY2FsaW5nIGZhY3RvcnNcbiAgICAgIC8vIGFyZSBpbiBmaXhlZCBwb2ludCB3aXRoIEZJWEVEX0ZSQUNfQklUUyBiaXRzIG9mIGZyYWN0aW9uYWwgcGFydC5cbiAgICAgIC8vXG4gICAgICAvLyAoISkgQWRkIDEvMiBvZiB2YWx1ZSBiZWZvcmUgY2xhbXBpbmcgdG8gZ2V0IHByb3BlciByb3VuZGluZy4gSW4gb3RoZXJcbiAgICAgIC8vIGNhc2UgYnJpZ2h0bmVzcyBsb3NzIHdpbGwgYmUgbm90aWNlYWJsZSBpZiB5b3UgcmVzaXplIGltYWdlIHdpdGggd2hpdGVcbiAgICAgIC8vIGJvcmRlciBhbmQgcGxhY2UgaXQgb24gd2hpdGUgYmFja2dyb3VuZC5cbiAgICAgIC8vXG5cblxuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgM10gPSBjbGFtcFRvOChhICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBjbGFtcFRvOChiICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBjbGFtcFRvOChnICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0XSA9IGNsYW1wVG84KHIgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0T2Zmc2V0ID0gZGVzdE9mZnNldCArIHNyY0ggKiA0IHwgMDtcbiAgICB9XG5cbiAgICBkZXN0T2Zmc2V0ID0gKHNyY1kgKyAxKSAqIDQgfCAwO1xuICAgIHNyY09mZnNldCA9IChzcmNZICsgMSkgKiBzcmNXICogNCB8IDA7XG4gIH1cbn0gLy8gVGVjaG5pY2FsbHksIGNvbnZvbHZlcnMgYXJlIHRoZSBzYW1lLiBCdXQgaW5wdXQgYXJyYXkgYW5kIHRlbXBvcmFyeVxuLy8gYnVmZmVyIGNhbiBiZSBvZiBkaWZmZXJlbnQgdHlwZSAoZXNwZWNpYWxseSwgaW4gb2xkIGJyb3dzZXJzKS4gU28sXG4vLyBrZWVwIGNvZGUgaW4gc2VwYXJhdGUgZnVuY3Rpb25zIHRvIGF2b2lkIGRlb3B0aW1pemF0aW9ucyAmIHNwZWVkIGxvc3MuXG5cblxuZnVuY3Rpb24gY29udm9sdmVWZXJ0aWNhbGx5KHNyYywgZGVzdCwgc3JjVywgc3JjSCwgZGVzdFcsIGZpbHRlcnMpIHtcbiAgdmFyIHIsIGcsIGIsIGE7XG4gIHZhciBmaWx0ZXJQdHIsIGZpbHRlclNoaWZ0LCBmaWx0ZXJTaXplO1xuICB2YXIgc3JjUHRyLCBzcmNZLCBkZXN0WCwgZmlsdGVyVmFsO1xuICB2YXIgc3JjT2Zmc2V0ID0gMCxcbiAgICAgIGRlc3RPZmZzZXQgPSAwOyAvLyBGb3IgZWFjaCByb3dcblxuICBmb3IgKHNyY1kgPSAwOyBzcmNZIDwgc3JjSDsgc3JjWSsrKSB7XG4gICAgZmlsdGVyUHRyID0gMDsgLy8gQXBwbHkgcHJlY29tcHV0ZWQgZmlsdGVycyB0byBlYWNoIGRlc3RpbmF0aW9uIHJvdyBwb2ludFxuXG4gICAgZm9yIChkZXN0WCA9IDA7IGRlc3RYIDwgZGVzdFc7IGRlc3RYKyspIHtcbiAgICAgIC8vIEdldCB0aGUgZmlsdGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgY3VycmVudCBvdXRwdXQgcGl4ZWwuXG4gICAgICBmaWx0ZXJTaGlmdCA9IGZpbHRlcnNbZmlsdGVyUHRyKytdO1xuICAgICAgZmlsdGVyU2l6ZSA9IGZpbHRlcnNbZmlsdGVyUHRyKytdO1xuICAgICAgc3JjUHRyID0gc3JjT2Zmc2V0ICsgZmlsdGVyU2hpZnQgKiA0IHwgMDtcbiAgICAgIHIgPSBnID0gYiA9IGEgPSAwOyAvLyBBcHBseSB0aGUgZmlsdGVyIHRvIHRoZSByb3cgdG8gZ2V0IHRoZSBkZXN0aW5hdGlvbiBwaXhlbCByLCBnLCBiLCBhXG5cbiAgICAgIGZvciAoOyBmaWx0ZXJTaXplID4gMDsgZmlsdGVyU2l6ZS0tKSB7XG4gICAgICAgIGZpbHRlclZhbCA9IGZpbHRlcnNbZmlsdGVyUHRyKytdOyAvLyBVc2UgcmV2ZXJzZSBvcmRlciB0byB3b3JrYXJvdW5kIGRlb3B0cyBpbiBvbGQgdjggKG5vZGUgdi4xMClcbiAgICAgICAgLy8gQmlnIHRoYW5rcyB0byBAbXJhbGVwaCAoVnlhY2hlc2xhdiBFZ29yb3YpIGZvciB0aGUgdGlwLlxuXG4gICAgICAgIGEgPSBhICsgZmlsdGVyVmFsICogc3JjW3NyY1B0ciArIDNdIHwgMDtcbiAgICAgICAgYiA9IGIgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyICsgMl0gfCAwO1xuICAgICAgICBnID0gZyArIGZpbHRlclZhbCAqIHNyY1tzcmNQdHIgKyAxXSB8IDA7XG4gICAgICAgIHIgPSByICsgZmlsdGVyVmFsICogc3JjW3NyY1B0cl0gfCAwO1xuICAgICAgICBzcmNQdHIgPSBzcmNQdHIgKyA0IHwgMDtcbiAgICAgIH0gLy8gQnJpbmcgdGhpcyB2YWx1ZSBiYWNrIGluIHJhbmdlLiBBbGwgb2YgdGhlIGZpbHRlciBzY2FsaW5nIGZhY3RvcnNcbiAgICAgIC8vIGFyZSBpbiBmaXhlZCBwb2ludCB3aXRoIEZJWEVEX0ZSQUNfQklUUyBiaXRzIG9mIGZyYWN0aW9uYWwgcGFydC5cbiAgICAgIC8vXG4gICAgICAvLyAoISkgQWRkIDEvMiBvZiB2YWx1ZSBiZWZvcmUgY2xhbXBpbmcgdG8gZ2V0IHByb3BlciByb3VuZGluZy4gSW4gb3RoZXJcbiAgICAgIC8vIGNhc2UgYnJpZ2h0bmVzcyBsb3NzIHdpbGwgYmUgbm90aWNlYWJsZSBpZiB5b3UgcmVzaXplIGltYWdlIHdpdGggd2hpdGVcbiAgICAgIC8vIGJvcmRlciBhbmQgcGxhY2UgaXQgb24gd2hpdGUgYmFja2dyb3VuZC5cbiAgICAgIC8vXG5cblxuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgM10gPSBjbGFtcFRvOChhICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBjbGFtcFRvOChiICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBjbGFtcFRvOChnICsgKDEgPDwgMTMpID4+IDE0XG4gICAgICAvKkZJWEVEX0ZSQUNfQklUUyovXG4gICAgICApO1xuICAgICAgZGVzdFtkZXN0T2Zmc2V0XSA9IGNsYW1wVG84KHIgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0T2Zmc2V0ID0gZGVzdE9mZnNldCArIHNyY0ggKiA0IHwgMDtcbiAgICB9XG5cbiAgICBkZXN0T2Zmc2V0ID0gKHNyY1kgKyAxKSAqIDQgfCAwO1xuICAgIHNyY09mZnNldCA9IChzcmNZICsgMSkgKiBzcmNXICogNCB8IDA7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZvbHZlSG9yaXpvbnRhbGx5OiBjb252b2x2ZUhvcml6b250YWxseSxcbiAgY29udm9sdmVWZXJ0aWNhbGx5OiBjb252b2x2ZVZlcnRpY2FsbHlcbn07XG5cbn0se31dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gVGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUgZnJvbSBtYXRoLndhc20sIGRvbid0IGVkaXQuXG4vL1xuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUFEQVprZVd4cGJtc0FBQUFBQUFFWEEyQUFBR0FHZjM5L2YzOS9BR0FIZjM5L2YzOS9md0FDRHdFRFpXNTJCbTFsYlc5eWVRSUFBQU1FQXdBQkFnWUdBWDhBUVFBTEIxY0ZFVjlmZDJGemJWOWpZV3hzWDJOMGIzSnpBQUFJWTI5dWRtOXNkbVVBQVFwamIyNTJiMngyWlVoV0FBSU1YMTlrYzI5ZmFHRnVaR3hsQXdBWVgxOTNZWE50WDJGd2NHeDVYMlJoZEdGZmNtVnNiMk56QUFBSzdBTURBd0FCQzhZREFROS9Ba0FnQTBVTkFDQUVSUTBBQTBBZ0RDRU5RUUFoRTBFQUlRY0RRQ0FIUVFKcUlRWUNmeUFIUVFGMElBVnFJZ2N1QVFJaUZFVUVRRUdBd0FBaENFR0F3QUFoQ1VHQXdBQWhDa0dBd0FBaEN5QUdEQUVMSUJJZ0J5NEJBR29oQ0VFQUlRc2dGQ0VIUVFBaERpQUdJUWxCQUNFUFFRQWhFQU5BSUFVZ0NVRUJkR291QVFBaUVTQUFJQWhCQW5ScUtBSUFJZ3BCR0hac0lCQnFJUkFnQ2tIL0FYRWdFV3dnQzJvaEN5QUtRUkIyUWY4QmNTQVJiQ0FQYWlFUElBcEJDSFpCL3dGeElCRnNJQTVxSVE0Z0NFRUJhaUVJSUFsQkFXb2hDU0FIUVFGcklnY05BQXNnQzBHQVFHc2hDQ0FPUVlCQWF5RUpJQTlCZ0VCcklRb2dFRUdBUUdzaEN5QUdJQlJxQ3lFSElBRWdEVUVDZEdvZ0NVRU9kU0lHUWY4QklBWkIvd0ZJR3lJR1FRQWdCa0VBU2h0QkNIUkJnUDREY1NBS1FRNTFJZ1pCL3dFZ0JrSC9BVWdiSWdaQkFDQUdRUUJLRzBFUWRFR0FnUHdIY1NBTFFRNTFJZ1pCL3dFZ0JrSC9BVWdiSWdaQkFDQUdRUUJLRzBFWWRISnlJQWhCRG5VaUJrSC9BU0FHUWY4QlNCc2lCa0VBSUFaQkFFb2JjallDQUNBRElBMXFJUTBnRTBFQmFpSVRJQVJIRFFBTElBeEJBV29pRENBQ2JDRVNJQU1nREVjTkFBc0xDeDRBUVFBZ0FpQURJQVFnQlNBQUVBRWdBa0VBSUFRZ0JTQUdJQUVRQVFzPSc7XG5cbn0se31dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZTogJ3Jlc2l6ZScsXG4gIGZuOiBfZGVyZXFfKCcuL3Jlc2l6ZScpLFxuICB3YXNtX2ZuOiBfZGVyZXFfKCcuL3Jlc2l6ZV93YXNtJyksXG4gIHdhc21fc3JjOiBfZGVyZXFfKCcuL2NvbnZvbHZlX3dhc21fYmFzZTY0Jylcbn07XG5cbn0se1wiLi9jb252b2x2ZV93YXNtX2Jhc2U2NFwiOjMsXCIuL3Jlc2l6ZVwiOjUsXCIuL3Jlc2l6ZV93YXNtXCI6OH1dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRmlsdGVycyA9IF9kZXJlcV8oJy4vcmVzaXplX2ZpbHRlcl9nZW4nKTtcblxudmFyIGNvbnZvbHZlSG9yaXpvbnRhbGx5ID0gX2RlcmVxXygnLi9jb252b2x2ZScpLmNvbnZvbHZlSG9yaXpvbnRhbGx5O1xuXG52YXIgY29udm9sdmVWZXJ0aWNhbGx5ID0gX2RlcmVxXygnLi9jb252b2x2ZScpLmNvbnZvbHZlVmVydGljYWxseTtcblxuZnVuY3Rpb24gcmVzZXRBbHBoYShkc3QsIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIHB0ciA9IDMsXG4gICAgICBsZW4gPSB3aWR0aCAqIGhlaWdodCAqIDQgfCAwO1xuXG4gIHdoaWxlIChwdHIgPCBsZW4pIHtcbiAgICBkc3RbcHRyXSA9IDB4RkY7XG4gICAgcHRyID0gcHRyICsgNCB8IDA7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXNpemUob3B0aW9ucykge1xuICB2YXIgc3JjID0gb3B0aW9ucy5zcmM7XG4gIHZhciBzcmNXID0gb3B0aW9ucy53aWR0aDtcbiAgdmFyIHNyY0ggPSBvcHRpb25zLmhlaWdodDtcbiAgdmFyIGRlc3RXID0gb3B0aW9ucy50b1dpZHRoO1xuICB2YXIgZGVzdEggPSBvcHRpb25zLnRvSGVpZ2h0O1xuICB2YXIgc2NhbGVYID0gb3B0aW9ucy5zY2FsZVggfHwgb3B0aW9ucy50b1dpZHRoIC8gb3B0aW9ucy53aWR0aDtcbiAgdmFyIHNjYWxlWSA9IG9wdGlvbnMuc2NhbGVZIHx8IG9wdGlvbnMudG9IZWlnaHQgLyBvcHRpb25zLmhlaWdodDtcbiAgdmFyIG9mZnNldFggPSBvcHRpb25zLm9mZnNldFggfHwgMDtcbiAgdmFyIG9mZnNldFkgPSBvcHRpb25zLm9mZnNldFkgfHwgMDtcbiAgdmFyIGRlc3QgPSBvcHRpb25zLmRlc3QgfHwgbmV3IFVpbnQ4QXJyYXkoZGVzdFcgKiBkZXN0SCAqIDQpO1xuICB2YXIgcXVhbGl0eSA9IHR5cGVvZiBvcHRpb25zLnF1YWxpdHkgPT09ICd1bmRlZmluZWQnID8gMyA6IG9wdGlvbnMucXVhbGl0eTtcbiAgdmFyIGFscGhhID0gb3B0aW9ucy5hbHBoYSB8fCBmYWxzZTtcbiAgdmFyIGZpbHRlcnNYID0gY3JlYXRlRmlsdGVycyhxdWFsaXR5LCBzcmNXLCBkZXN0Vywgc2NhbGVYLCBvZmZzZXRYKSxcbiAgICAgIGZpbHRlcnNZID0gY3JlYXRlRmlsdGVycyhxdWFsaXR5LCBzcmNILCBkZXN0SCwgc2NhbGVZLCBvZmZzZXRZKTtcbiAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KGRlc3RXICogc3JjSCAqIDQpOyAvLyBUbyB1c2Ugc2luZ2xlIGZ1bmN0aW9uIHdlIG5lZWQgc3JjICYgdG1wIG9mIHRoZSBzYW1lIHR5cGUuXG4gIC8vIEJ1dCBzcmMgY2FuIGJlIENhbnZhc1BpeGVsQXJyYXksIGFuZCB0bXAgLSBVaW50OEFycmF5LiBTbywga2VlcFxuICAvLyB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBwYXNzZXMgc2VwYXJhdGVseSB0byBhdm9pZCBkZW9wdGltaXphdGlvbi5cblxuICBjb252b2x2ZUhvcml6b250YWxseShzcmMsIHRtcCwgc3JjVywgc3JjSCwgZGVzdFcsIGZpbHRlcnNYKTtcbiAgY29udm9sdmVWZXJ0aWNhbGx5KHRtcCwgZGVzdCwgc3JjSCwgZGVzdFcsIGRlc3RILCBmaWx0ZXJzWSk7IC8vIFRoYXQncyBmYXN0ZXIgdGhhbiBkb2luZyBjaGVja3MgaW4gY29udm9sdmVyLlxuICAvLyAhISEgTm90ZSwgY2FudmFzIGRhdGEgaXMgbm90IHByZW11bHRpcGxlZC4gV2UgZG9uJ3QgbmVlZCBvdGhlclxuICAvLyBhbHBoYSBjb3JyZWN0aW9ucy5cblxuICBpZiAoIWFscGhhKSByZXNldEFscGhhKGRlc3QsIGRlc3RXLCBkZXN0SCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxufSx7XCIuL2NvbnZvbHZlXCI6MixcIi4vcmVzaXplX2ZpbHRlcl9nZW5cIjo2fV0sNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBDYWxjdWxhdGUgY29udm9sdXRpb24gZmlsdGVycyBmb3IgZWFjaCBkZXN0aW5hdGlvbiBwb2ludCxcbi8vIGFuZCBwYWNrIGRhdGEgdG8gSW50MTZBcnJheTpcbi8vXG4vLyBbIHNoaWZ0LCBsZW5ndGgsIGRhdGEuLi4sIHNoaWZ0MiwgbGVuZ3RoMiwgZGF0YS4uLiwgLi4uIF1cbi8vXG4vLyAtIHNoaWZ0IC0gb2Zmc2V0IGluIHNyYyBpbWFnZVxuLy8gLSBsZW5ndGggLSBmaWx0ZXIgbGVuZ3RoIChpbiBzcmMgcG9pbnRzKVxuLy8gLSBkYXRhIC0gZmlsdGVyIHZhbHVlcyBzZXF1ZW5jZVxuLy9cbid1c2Ugc3RyaWN0JztcblxudmFyIEZJTFRFUl9JTkZPID0gX2RlcmVxXygnLi9yZXNpemVfZmlsdGVyX2luZm8nKTsgLy8gUHJlY2lzaW9uIG9mIGZpeGVkIEZQIHZhbHVlc1xuXG5cbnZhciBGSVhFRF9GUkFDX0JJVFMgPSAxNDtcblxuZnVuY3Rpb24gdG9GaXhlZFBvaW50KG51bSkge1xuICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAoKDEgPDwgRklYRURfRlJBQ19CSVRTKSAtIDEpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXNpemVGaWx0ZXJHZW4ocXVhbGl0eSwgc3JjU2l6ZSwgZGVzdFNpemUsIHNjYWxlLCBvZmZzZXQpIHtcbiAgdmFyIGZpbHRlckZ1bmN0aW9uID0gRklMVEVSX0lORk9bcXVhbGl0eV0uZmlsdGVyO1xuICB2YXIgc2NhbGVJbnZlcnRlZCA9IDEuMCAvIHNjYWxlO1xuICB2YXIgc2NhbGVDbGFtcGVkID0gTWF0aC5taW4oMS4wLCBzY2FsZSk7IC8vIEZvciB1cHNjYWxlXG4gIC8vIEZpbHRlciB3aW5kb3cgKGF2ZXJhZ2luZyBpbnRlcnZhbCksIHNjYWxlZCB0byBzcmMgaW1hZ2VcblxuICB2YXIgc3JjV2luZG93ID0gRklMVEVSX0lORk9bcXVhbGl0eV0ud2luIC8gc2NhbGVDbGFtcGVkO1xuICB2YXIgZGVzdFBpeGVsLCBzcmNQaXhlbCwgc3JjRmlyc3QsIHNyY0xhc3QsIGZpbHRlckVsZW1lbnRTaXplLCBmbG9hdEZpbHRlciwgZnhwRmlsdGVyLCB0b3RhbCwgcHhsLCBpZHgsIGZsb2F0VmFsLCBmaWx0ZXJUb3RhbCwgZmlsdGVyVmFsO1xuICB2YXIgbGVmdE5vdEVtcHR5LCByaWdodE5vdEVtcHR5LCBmaWx0ZXJTaGlmdCwgZmlsdGVyU2l6ZTtcbiAgdmFyIG1heEZpbHRlckVsZW1lbnRTaXplID0gTWF0aC5mbG9vcigoc3JjV2luZG93ICsgMSkgKiAyKTtcbiAgdmFyIHBhY2tlZEZpbHRlciA9IG5ldyBJbnQxNkFycmF5KChtYXhGaWx0ZXJFbGVtZW50U2l6ZSArIDIpICogZGVzdFNpemUpO1xuICB2YXIgcGFja2VkRmlsdGVyUHRyID0gMDtcbiAgdmFyIHNsb3dDb3B5ID0gIXBhY2tlZEZpbHRlci5zdWJhcnJheSB8fCAhcGFja2VkRmlsdGVyLnNldDsgLy8gRm9yIGVhY2ggZGVzdGluYXRpb24gcGl4ZWwgY2FsY3VsYXRlIHNvdXJjZSByYW5nZSBhbmQgYnVpbHQgZmlsdGVyIHZhbHVlc1xuXG4gIGZvciAoZGVzdFBpeGVsID0gMDsgZGVzdFBpeGVsIDwgZGVzdFNpemU7IGRlc3RQaXhlbCsrKSB7XG4gICAgLy8gU2NhbGluZyBzaG91bGQgYmUgZG9uZSByZWxhdGl2ZSB0byBjZW50cmFsIHBpeGVsIHBvaW50XG4gICAgc3JjUGl4ZWwgPSAoZGVzdFBpeGVsICsgMC41KSAqIHNjYWxlSW52ZXJ0ZWQgKyBvZmZzZXQ7XG4gICAgc3JjRmlyc3QgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNyY1BpeGVsIC0gc3JjV2luZG93KSk7XG4gICAgc3JjTGFzdCA9IE1hdGgubWluKHNyY1NpemUgLSAxLCBNYXRoLmNlaWwoc3JjUGl4ZWwgKyBzcmNXaW5kb3cpKTtcbiAgICBmaWx0ZXJFbGVtZW50U2l6ZSA9IHNyY0xhc3QgLSBzcmNGaXJzdCArIDE7XG4gICAgZmxvYXRGaWx0ZXIgPSBuZXcgRmxvYXQzMkFycmF5KGZpbHRlckVsZW1lbnRTaXplKTtcbiAgICBmeHBGaWx0ZXIgPSBuZXcgSW50MTZBcnJheShmaWx0ZXJFbGVtZW50U2l6ZSk7XG4gICAgdG90YWwgPSAwLjA7IC8vIEZpbGwgZmlsdGVyIHZhbHVlcyBmb3IgY2FsY3VsYXRlZCByYW5nZVxuXG4gICAgZm9yIChweGwgPSBzcmNGaXJzdCwgaWR4ID0gMDsgcHhsIDw9IHNyY0xhc3Q7IHB4bCsrLCBpZHgrKykge1xuICAgICAgZmxvYXRWYWwgPSBmaWx0ZXJGdW5jdGlvbigocHhsICsgMC41IC0gc3JjUGl4ZWwpICogc2NhbGVDbGFtcGVkKTtcbiAgICAgIHRvdGFsICs9IGZsb2F0VmFsO1xuICAgICAgZmxvYXRGaWx0ZXJbaWR4XSA9IGZsb2F0VmFsO1xuICAgIH0gLy8gTm9ybWFsaXplIGZpbHRlciwgY29udmVydCB0byBmaXhlZCBwb2ludCBhbmQgYWNjdW11bGF0ZSBjb252ZXJzaW9uIGVycm9yXG5cblxuICAgIGZpbHRlclRvdGFsID0gMDtcblxuICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgZmxvYXRGaWx0ZXIubGVuZ3RoOyBpZHgrKykge1xuICAgICAgZmlsdGVyVmFsID0gZmxvYXRGaWx0ZXJbaWR4XSAvIHRvdGFsO1xuICAgICAgZmlsdGVyVG90YWwgKz0gZmlsdGVyVmFsO1xuICAgICAgZnhwRmlsdGVyW2lkeF0gPSB0b0ZpeGVkUG9pbnQoZmlsdGVyVmFsKTtcbiAgICB9IC8vIENvbXBlbnNhdGUgbm9ybWFsaXphdGlvbiBlcnJvciwgdG8gbWluaW1pemUgYnJpZ2h0bmVzcyBkcmlmdFxuXG5cbiAgICBmeHBGaWx0ZXJbZGVzdFNpemUgPj4gMV0gKz0gdG9GaXhlZFBvaW50KDEuMCAtIGZpbHRlclRvdGFsKTsgLy9cbiAgICAvLyBOb3cgcGFjayBmaWx0ZXIgdG8gdXNlYWJsZSBmb3JtXG4gICAgLy9cbiAgICAvLyAxLiBUcmltIGhlYWRpbmcgYW5kIHRhaWxpbmcgemVybyB2YWx1ZXMsIGFuZCBjb21wZW5zYXRlIHNoaXRmL2xlbmd0aFxuICAgIC8vIDIuIFB1dCBhbGwgdG8gc2luZ2xlIGFycmF5IGluIHRoaXMgZm9ybWF0OlxuICAgIC8vXG4gICAgLy8gICAgWyBwb3Mgc2hpZnQsIGRhdGEgbGVuZ3RoLCB2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCAuLi4gXVxuICAgIC8vXG5cbiAgICBsZWZ0Tm90RW1wdHkgPSAwO1xuXG4gICAgd2hpbGUgKGxlZnROb3RFbXB0eSA8IGZ4cEZpbHRlci5sZW5ndGggJiYgZnhwRmlsdGVyW2xlZnROb3RFbXB0eV0gPT09IDApIHtcbiAgICAgIGxlZnROb3RFbXB0eSsrO1xuICAgIH1cblxuICAgIGlmIChsZWZ0Tm90RW1wdHkgPCBmeHBGaWx0ZXIubGVuZ3RoKSB7XG4gICAgICByaWdodE5vdEVtcHR5ID0gZnhwRmlsdGVyLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChyaWdodE5vdEVtcHR5ID4gMCAmJiBmeHBGaWx0ZXJbcmlnaHROb3RFbXB0eV0gPT09IDApIHtcbiAgICAgICAgcmlnaHROb3RFbXB0eS0tO1xuICAgICAgfVxuXG4gICAgICBmaWx0ZXJTaGlmdCA9IHNyY0ZpcnN0ICsgbGVmdE5vdEVtcHR5O1xuICAgICAgZmlsdGVyU2l6ZSA9IHJpZ2h0Tm90RW1wdHkgLSBsZWZ0Tm90RW1wdHkgKyAxO1xuICAgICAgcGFja2VkRmlsdGVyW3BhY2tlZEZpbHRlclB0cisrXSA9IGZpbHRlclNoaWZ0OyAvLyBzaGlmdFxuXG4gICAgICBwYWNrZWRGaWx0ZXJbcGFja2VkRmlsdGVyUHRyKytdID0gZmlsdGVyU2l6ZTsgLy8gc2l6ZVxuXG4gICAgICBpZiAoIXNsb3dDb3B5KSB7XG4gICAgICAgIHBhY2tlZEZpbHRlci5zZXQoZnhwRmlsdGVyLnN1YmFycmF5KGxlZnROb3RFbXB0eSwgcmlnaHROb3RFbXB0eSArIDEpLCBwYWNrZWRGaWx0ZXJQdHIpO1xuICAgICAgICBwYWNrZWRGaWx0ZXJQdHIgKz0gZmlsdGVyU2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBvbGQgSUUgPCAxMSwgd2l0aG91dCBzdWJhcnJheS9zZXQgbWV0aG9kc1xuICAgICAgICBmb3IgKGlkeCA9IGxlZnROb3RFbXB0eTsgaWR4IDw9IHJpZ2h0Tm90RW1wdHk7IGlkeCsrKSB7XG4gICAgICAgICAgcGFja2VkRmlsdGVyW3BhY2tlZEZpbHRlclB0cisrXSA9IGZ4cEZpbHRlcltpZHhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHplcm8gZGF0YSwgd3JpdGUgaGVhZGVyIG9ubHlcbiAgICAgIHBhY2tlZEZpbHRlcltwYWNrZWRGaWx0ZXJQdHIrK10gPSAwOyAvLyBzaGlmdFxuXG4gICAgICBwYWNrZWRGaWx0ZXJbcGFja2VkRmlsdGVyUHRyKytdID0gMDsgLy8gc2l6ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWNrZWRGaWx0ZXI7XG59O1xuXG59LHtcIi4vcmVzaXplX2ZpbHRlcl9pbmZvXCI6N31dLDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gRmlsdGVyIGRlZmluaXRpb25zIHRvIGJ1aWxkIHRhYmxlcyBmb3Jcbi8vIHJlc2l6aW5nIGNvbnZvbHZlcnMuXG4vL1xuLy8gUHJlc2V0cyBmb3IgcXVhbGl0eSAwLi4zLiBGaWx0ZXIgZnVuY3Rpb25zICsgd2luZG93IHNpemVcbi8vXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gW3tcbiAgLy8gTmVhcmVzdCBuZWlib3IgKEJveClcbiAgd2luOiAwLjUsXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHgpIHtcbiAgICByZXR1cm4geCA+PSAtMC41ICYmIHggPCAwLjUgPyAxLjAgOiAwLjA7XG4gIH1cbn0sIHtcbiAgLy8gSGFtbWluZ1xuICB3aW46IDEuMCxcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoeCkge1xuICAgIGlmICh4IDw9IC0xLjAgfHwgeCA+PSAxLjApIHtcbiAgICAgIHJldHVybiAwLjA7XG4gICAgfVxuXG4gICAgaWYgKHggPiAtMS4xOTIwOTI5MEUtMDcgJiYgeCA8IDEuMTkyMDkyOTBFLTA3KSB7XG4gICAgICByZXR1cm4gMS4wO1xuICAgIH1cblxuICAgIHZhciB4cGkgPSB4ICogTWF0aC5QSTtcbiAgICByZXR1cm4gTWF0aC5zaW4oeHBpKSAvIHhwaSAqICgwLjU0ICsgMC40NiAqIE1hdGguY29zKHhwaSAvIDEuMCkpO1xuICB9XG59LCB7XG4gIC8vIExhbmN6b3MsIHdpbiA9IDJcbiAgd2luOiAyLjAsXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHgpIHtcbiAgICBpZiAoeCA8PSAtMi4wIHx8IHggPj0gMi4wKSB7XG4gICAgICByZXR1cm4gMC4wO1xuICAgIH1cblxuICAgIGlmICh4ID4gLTEuMTkyMDkyOTBFLTA3ICYmIHggPCAxLjE5MjA5MjkwRS0wNykge1xuICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG5cbiAgICB2YXIgeHBpID0geCAqIE1hdGguUEk7XG4gICAgcmV0dXJuIE1hdGguc2luKHhwaSkgLyB4cGkgKiBNYXRoLnNpbih4cGkgLyAyLjApIC8gKHhwaSAvIDIuMCk7XG4gIH1cbn0sIHtcbiAgLy8gTGFuY3pvcywgd2luID0gM1xuICB3aW46IDMuMCxcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoeCkge1xuICAgIGlmICh4IDw9IC0zLjAgfHwgeCA+PSAzLjApIHtcbiAgICAgIHJldHVybiAwLjA7XG4gICAgfVxuXG4gICAgaWYgKHggPiAtMS4xOTIwOTI5MEUtMDcgJiYgeCA8IDEuMTkyMDkyOTBFLTA3KSB7XG4gICAgICByZXR1cm4gMS4wO1xuICAgIH1cblxuICAgIHZhciB4cGkgPSB4ICogTWF0aC5QSTtcbiAgICByZXR1cm4gTWF0aC5zaW4oeHBpKSAvIHhwaSAqIE1hdGguc2luKHhwaSAvIDMuMCkgLyAoeHBpIC8gMy4wKTtcbiAgfVxufV07XG5cbn0se31dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRmlsdGVycyA9IF9kZXJlcV8oJy4vcmVzaXplX2ZpbHRlcl9nZW4nKTtcblxuZnVuY3Rpb24gcmVzZXRBbHBoYShkc3QsIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIHB0ciA9IDMsXG4gICAgICBsZW4gPSB3aWR0aCAqIGhlaWdodCAqIDQgfCAwO1xuXG4gIHdoaWxlIChwdHIgPCBsZW4pIHtcbiAgICBkc3RbcHRyXSA9IDB4RkY7XG4gICAgcHRyID0gcHRyICsgNCB8IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNVaW50OEFycmF5KHNyYykge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc3JjLmJ1ZmZlciwgMCwgc3JjLmJ5dGVMZW5ndGgpO1xufVxuXG52YXIgSVNfTEUgPSB0cnVlOyAvLyBzaG91bGQgbm90IGNyYXNoIGV2ZXJ5dGhpbmcgb24gbW9kdWxlIGxvYWQgaW4gb2xkIGJyb3dzZXJzXG5cbnRyeSB7XG4gIElTX0xFID0gbmV3IFVpbnQzMkFycmF5KG5ldyBVaW50OEFycmF5KFsxLCAwLCAwLCAwXSkuYnVmZmVyKVswXSA9PT0gMTtcbn0gY2F0Y2ggKF9fKSB7fVxuXG5mdW5jdGlvbiBjb3B5SW50MTZhc0xFKHNyYywgdGFyZ2V0LCB0YXJnZXRfb2Zmc2V0KSB7XG4gIGlmIChJU19MRSkge1xuICAgIHRhcmdldC5zZXQoYXNVaW50OEFycmF5KHNyYyksIHRhcmdldF9vZmZzZXQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAodmFyIHB0ciA9IHRhcmdldF9vZmZzZXQsIGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRhdGEgPSBzcmNbaV07XG4gICAgdGFyZ2V0W3B0cisrXSA9IGRhdGEgJiAweEZGO1xuICAgIHRhcmdldFtwdHIrK10gPSBkYXRhID4+IDggJiAweEZGO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVzaXplX3dhc20ob3B0aW9ucykge1xuICB2YXIgc3JjID0gb3B0aW9ucy5zcmM7XG4gIHZhciBzcmNXID0gb3B0aW9ucy53aWR0aDtcbiAgdmFyIHNyY0ggPSBvcHRpb25zLmhlaWdodDtcbiAgdmFyIGRlc3RXID0gb3B0aW9ucy50b1dpZHRoO1xuICB2YXIgZGVzdEggPSBvcHRpb25zLnRvSGVpZ2h0O1xuICB2YXIgc2NhbGVYID0gb3B0aW9ucy5zY2FsZVggfHwgb3B0aW9ucy50b1dpZHRoIC8gb3B0aW9ucy53aWR0aDtcbiAgdmFyIHNjYWxlWSA9IG9wdGlvbnMuc2NhbGVZIHx8IG9wdGlvbnMudG9IZWlnaHQgLyBvcHRpb25zLmhlaWdodDtcbiAgdmFyIG9mZnNldFggPSBvcHRpb25zLm9mZnNldFggfHwgMC4wO1xuICB2YXIgb2Zmc2V0WSA9IG9wdGlvbnMub2Zmc2V0WSB8fCAwLjA7XG4gIHZhciBkZXN0ID0gb3B0aW9ucy5kZXN0IHx8IG5ldyBVaW50OEFycmF5KGRlc3RXICogZGVzdEggKiA0KTtcbiAgdmFyIHF1YWxpdHkgPSB0eXBlb2Ygb3B0aW9ucy5xdWFsaXR5ID09PSAndW5kZWZpbmVkJyA/IDMgOiBvcHRpb25zLnF1YWxpdHk7XG4gIHZhciBhbHBoYSA9IG9wdGlvbnMuYWxwaGEgfHwgZmFsc2U7XG4gIHZhciBmaWx0ZXJzWCA9IGNyZWF0ZUZpbHRlcnMocXVhbGl0eSwgc3JjVywgZGVzdFcsIHNjYWxlWCwgb2Zmc2V0WCksXG4gICAgICBmaWx0ZXJzWSA9IGNyZWF0ZUZpbHRlcnMocXVhbGl0eSwgc3JjSCwgZGVzdEgsIHNjYWxlWSwgb2Zmc2V0WSk7IC8vIGRlc3RpbmF0aW9uIGlzIDAgdG9vLlxuXG4gIHZhciBzcmNfb2Zmc2V0ID0gMDsgLy8gYnVmZmVyIGJldHdlZW4gY29udm9sdmUgcGFzc2VzXG5cbiAgdmFyIHRtcF9vZmZzZXQgPSB0aGlzLl9fYWxpZ24oc3JjX29mZnNldCArIE1hdGgubWF4KHNyYy5ieXRlTGVuZ3RoLCBkZXN0LmJ5dGVMZW5ndGgpKTtcblxuICB2YXIgZmlsdGVyc1hfb2Zmc2V0ID0gdGhpcy5fX2FsaWduKHRtcF9vZmZzZXQgKyBzcmNIICogZGVzdFcgKiA0KTtcblxuICB2YXIgZmlsdGVyc1lfb2Zmc2V0ID0gdGhpcy5fX2FsaWduKGZpbHRlcnNYX29mZnNldCArIGZpbHRlcnNYLmJ5dGVMZW5ndGgpO1xuXG4gIHZhciBhbGxvY19ieXRlcyA9IGZpbHRlcnNZX29mZnNldCArIGZpbHRlcnNZLmJ5dGVMZW5ndGg7XG5cbiAgdmFyIGluc3RhbmNlID0gdGhpcy5fX2luc3RhbmNlKCdyZXNpemUnLCBhbGxvY19ieXRlcyk7IC8vXG4gIC8vIEZpbGwgbWVtb3J5IGJsb2NrIHdpdGggZGF0YSB0byBwcm9jZXNzXG4gIC8vXG5cblxuICB2YXIgbWVtID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fX21lbW9yeS5idWZmZXIpO1xuICB2YXIgbWVtMzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fX21lbW9yeS5idWZmZXIpOyAvLyAzMi1iaXQgY29weSBpcyBtdWNoIGZhc3RlciBpbiBjaHJvbWVcblxuICB2YXIgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlcik7XG4gIG1lbTMyLnNldChzcmMzMik7IC8vIFdlIHNob3VsZCBndWFyYW50ZWUgTEUgYnl0ZXMgb3JkZXIuIEZpbHRlcnMgYXJlIG5vdCBiaWcsIHNvXG4gIC8vIHNwZWVkIGRpZmZlcmVuY2UgaXMgbm90IHNpZ25pZmljYW50IHZzIGRpcmVjdCAuc2V0KClcblxuICBjb3B5SW50MTZhc0xFKGZpbHRlcnNYLCBtZW0sIGZpbHRlcnNYX29mZnNldCk7XG4gIGNvcHlJbnQxNmFzTEUoZmlsdGVyc1ksIG1lbSwgZmlsdGVyc1lfb2Zmc2V0KTsgLy9cbiAgLy8gTm93IGNhbGwgd2ViYXNzZW1ibHkgbWV0aG9kXG4gIC8vIGVtc2RrIGRvZXMgbWV0aG9kIG5hbWVzIHdpdGggJ18nXG5cbiAgdmFyIGZuID0gaW5zdGFuY2UuZXhwb3J0cy5jb252b2x2ZUhWIHx8IGluc3RhbmNlLmV4cG9ydHMuX2NvbnZvbHZlSFY7XG4gIGZuKGZpbHRlcnNYX29mZnNldCwgZmlsdGVyc1lfb2Zmc2V0LCB0bXBfb2Zmc2V0LCBzcmNXLCBzcmNILCBkZXN0VywgZGVzdEgpOyAvL1xuICAvLyBDb3B5IGRhdGEgYmFjayB0byB0eXBlZCBhcnJheVxuICAvL1xuICAvLyAzMi1iaXQgY29weSBpcyBtdWNoIGZhc3RlciBpbiBjaHJvbWVcblxuICB2YXIgZGVzdDMyID0gbmV3IFVpbnQzMkFycmF5KGRlc3QuYnVmZmVyKTtcbiAgZGVzdDMyLnNldChuZXcgVWludDMyQXJyYXkodGhpcy5fX21lbW9yeS5idWZmZXIsIDAsIGRlc3RIICogZGVzdFcpKTsgLy8gVGhhdCdzIGZhc3RlciB0aGFuIGRvaW5nIGNoZWNrcyBpbiBjb252b2x2ZXIuXG4gIC8vICEhISBOb3RlLCBjYW52YXMgZGF0YSBpcyBub3QgcHJlbXVsdGlwbGVkLiBXZSBkb24ndCBuZWVkIG90aGVyXG4gIC8vIGFscGhhIGNvcnJlY3Rpb25zLlxuXG4gIGlmICghYWxwaGEpIHJlc2V0QWxwaGEoZGVzdCwgZGVzdFcsIGRlc3RIKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG59LHtcIi4vcmVzaXplX2ZpbHRlcl9nZW5cIjo2fV0sOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBuYW1lOiAndW5zaGFycF9tYXNrJyxcbiAgZm46IF9kZXJlcV8oJy4vdW5zaGFycF9tYXNrJyksXG4gIHdhc21fZm46IF9kZXJlcV8oJy4vdW5zaGFycF9tYXNrX3dhc20nKSxcbiAgd2FzbV9zcmM6IF9kZXJlcV8oJy4vdW5zaGFycF9tYXNrX3dhc21fYmFzZTY0Jylcbn07XG5cbn0se1wiLi91bnNoYXJwX21hc2tcIjoxMCxcIi4vdW5zaGFycF9tYXNrX3dhc21cIjoxMSxcIi4vdW5zaGFycF9tYXNrX3dhc21fYmFzZTY0XCI6MTJ9XSwxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBVbnNoYXJwIG1hc2sgZmlsdGVyXG4vL1xuLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjMzMjI4MjAvMTAzMTgwNFxuLy8gVVNNKE8pID0gTyArICgyICogKEFtb3VudCAvIDEwMCkgKiAoTyAtIEdCKSlcbi8vIEdCIC0gZ2F1c3NpYW4gYmx1ci5cbi8vXG4vLyBJbWFnZSBpcyBjb252ZXJ0ZWQgZnJvbSBSR0IgdG8gSFNWLCB1bnNoYXJwIG1hc2sgaXMgYXBwbGllZCB0byB0aGVcbi8vIGJyaWdodG5lc3MgY2hhbm5lbCBhbmQgdGhlbiBpbWFnZSBpcyBjb252ZXJ0ZWQgYmFjayB0byBSR0IuXG4vL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2x1cl9tb25vMTYgPSBfZGVyZXFfKCdnbHVyL21vbm8xNicpO1xuXG5mdW5jdGlvbiBoc3ZfdjE2KGltZywgd2lkdGgsIGhlaWdodCkge1xuICB2YXIgc2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICB2YXIgb3V0ID0gbmV3IFVpbnQxNkFycmF5KHNpemUpO1xuICB2YXIgciwgZywgYiwgbWF4O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgciA9IGltZ1s0ICogaV07XG4gICAgZyA9IGltZ1s0ICogaSArIDFdO1xuICAgIGIgPSBpbWdbNCAqIGkgKyAyXTtcbiAgICBtYXggPSByID49IGcgJiYgciA+PSBiID8gciA6IGcgPj0gYiAmJiBnID49IHIgPyBnIDogYjtcbiAgICBvdXRbaV0gPSBtYXggPDwgODtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5zaGFycChpbWcsIHdpZHRoLCBoZWlnaHQsIGFtb3VudCwgcmFkaXVzLCB0aHJlc2hvbGQpIHtcbiAgdmFyIHYxLCB2Miwgdm11bDtcbiAgdmFyIGRpZmYsIGlUaW1lczQ7XG5cbiAgaWYgKGFtb3VudCA9PT0gMCB8fCByYWRpdXMgPCAwLjUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmFkaXVzID4gMi4wKSB7XG4gICAgcmFkaXVzID0gMi4wO1xuICB9XG5cbiAgdmFyIGJyaWdodG5lc3MgPSBoc3ZfdjE2KGltZywgd2lkdGgsIGhlaWdodCk7XG4gIHZhciBibHVyZWQgPSBuZXcgVWludDE2QXJyYXkoYnJpZ2h0bmVzcyk7IC8vIGNvcHksIGJlY2F1c2UgYmx1ciBtb2RpZnkgc3JjXG5cbiAgZ2x1cl9tb25vMTYoYmx1cmVkLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpO1xuICB2YXIgYW1vdW50RnAgPSBhbW91bnQgLyAxMDAgKiAweDEwMDAgKyAwLjUgfCAwO1xuICB2YXIgdGhyZXNob2xkRnAgPSB0aHJlc2hvbGQgPDwgODtcbiAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICB2MSA9IGJyaWdodG5lc3NbaV07XG4gICAgZGlmZiA9IHYxIC0gYmx1cmVkW2ldO1xuXG4gICAgaWYgKE1hdGguYWJzKGRpZmYpID49IHRocmVzaG9sZEZwKSB7XG4gICAgICAvLyBhZGQgdW5zaGFycCBtYXNrIHRvIHRoZSBicmlnaHRuZXNzIGNoYW5uZWxcbiAgICAgIHYyID0gdjEgKyAoYW1vdW50RnAgKiBkaWZmICsgMHg4MDAgPj4gMTIpOyAvLyBCb3RoIHYxIGFuZCB2MiBhcmUgd2l0aGluIFswLjAgLi4gMjU1LjBdICgwMDAwLUZGMDApIHJhbmdlLCBuZXZlciBnb2luZyBpbnRvXG4gICAgICAvLyBbMjU1LjAwMyAuLiAyNTUuOTk2XSAoRkYwMS1GRkZGKS4gVGhpcyBhbGxvd3MgdG8gcm91bmQgdGhpcyB2YWx1ZSBhcyAoeCsuNSl8MFxuICAgICAgLy8gbGF0ZXIgd2l0aG91dCBvdmVyZmxvd2luZy5cblxuICAgICAgdjIgPSB2MiA+IDB4ZmYwMCA/IDB4ZmYwMCA6IHYyO1xuICAgICAgdjIgPSB2MiA8IDB4MDAwMCA/IDB4MDAwMCA6IHYyOyAvLyBBdm9pZCBkaXZpc2lvbiBieSAwLiBWPTAgbWVhbnMgcmdiKDAsMCwwKSwgdW5zaGFycCB3aXRoIHVuc2hhcnBBbW91bnQ+MCBjYW5ub3RcbiAgICAgIC8vIGNoYW5nZSB0aGlzIHZhbHVlIChiZWNhdXNlIGRpZmYgYmV0d2VlbiBjb2xvcnMgZ2V0cyBpbmZsYXRlZCksIHNvIG5vIG5lZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzLlxuXG4gICAgICB2MSA9IHYxICE9PSAwID8gdjEgOiAxOyAvLyBNdWx0aXBseWluZyBWIGluIEhTViBtb2RlbCBieSBhIGNvbnN0YW50IGlzIGVxdWl2YWxlbnQgdG8gbXVsdGlwbHlpbmcgZWFjaCBjb21wb25lbnRcbiAgICAgIC8vIGluIFJHQiBieSB0aGUgc2FtZSBjb25zdGFudCAoc2FtZSBmb3IgSFNMKSwgc2VlIGFsc286XG4gICAgICAvLyBodHRwczovL2JlZXNidXp6LmJpei9jb2RlLzE2LWhzdi1jb2xvci10cmFuc2Zvcm1zXG5cbiAgICAgIHZtdWwgPSAodjIgPDwgMTIpIC8gdjEgfCAwOyAvLyBSZXN1bHQgd2lsbCBiZSBpbiBbMC4uMjU1XSByYW5nZSBiZWNhdXNlOlxuICAgICAgLy8gIC0gYWxsIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgICAvLyAgLSByLGcsYiA8PSAodjEvMjU2KVxuICAgICAgLy8gIC0gcixnLGIsKHYxLzI1NiksKHYyLzI1NikgPD0gMjU1XG4gICAgICAvLyBTbyBoaWdoZXN0IHRoaXMgbnVtYmVyIGNhbiBnZXQgaXMgWCoyNTUvWCswLjU9MjU1LjUgd2hpY2ggaXMgPCAyNTYgYW5kIHJvdW5kcyBkb3duLlxuXG4gICAgICBpVGltZXM0ID0gaSAqIDQ7XG4gICAgICBpbWdbaVRpbWVzNF0gPSBpbWdbaVRpbWVzNF0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIFJcblxuICAgICAgaW1nW2lUaW1lczQgKyAxXSA9IGltZ1tpVGltZXM0ICsgMV0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIEdcblxuICAgICAgaW1nW2lUaW1lczQgKyAyXSA9IGltZ1tpVGltZXM0ICsgMl0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIEJcbiAgICB9XG4gIH1cbn07XG5cbn0se1wiZ2x1ci9tb25vMTZcIjoxOH1dLDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bnNoYXJwKGltZywgd2lkdGgsIGhlaWdodCwgYW1vdW50LCByYWRpdXMsIHRocmVzaG9sZCkge1xuICBpZiAoYW1vdW50ID09PSAwIHx8IHJhZGl1cyA8IDAuNSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyYWRpdXMgPiAyLjApIHtcbiAgICByYWRpdXMgPSAyLjA7XG4gIH1cblxuICB2YXIgcGl4ZWxzID0gd2lkdGggKiBoZWlnaHQ7XG4gIHZhciBpbWdfYnl0ZXNfY250ID0gcGl4ZWxzICogNDtcbiAgdmFyIGhzdl9ieXRlc19jbnQgPSBwaXhlbHMgKiAyO1xuICB2YXIgYmx1cl9ieXRlc19jbnQgPSBwaXhlbHMgKiAyO1xuICB2YXIgYmx1cl9saW5lX2J5dGVfY250ID0gTWF0aC5tYXgod2lkdGgsIGhlaWdodCkgKiA0OyAvLyBmbG9hdDMyIGFycmF5XG5cbiAgdmFyIGJsdXJfY29lZmZzX2J5dGVfY250ID0gOCAqIDQ7IC8vIGZsb2F0MzIgYXJyYXlcblxuICB2YXIgaW1nX29mZnNldCA9IDA7XG4gIHZhciBoc3Zfb2Zmc2V0ID0gaW1nX2J5dGVzX2NudDtcbiAgdmFyIGJsdXJfb2Zmc2V0ID0gaHN2X29mZnNldCArIGhzdl9ieXRlc19jbnQ7XG4gIHZhciBibHVyX3RtcF9vZmZzZXQgPSBibHVyX29mZnNldCArIGJsdXJfYnl0ZXNfY250O1xuICB2YXIgYmx1cl9saW5lX29mZnNldCA9IGJsdXJfdG1wX29mZnNldCArIGJsdXJfYnl0ZXNfY250O1xuICB2YXIgYmx1cl9jb2VmZnNfb2Zmc2V0ID0gYmx1cl9saW5lX29mZnNldCArIGJsdXJfbGluZV9ieXRlX2NudDtcblxuICB2YXIgaW5zdGFuY2UgPSB0aGlzLl9faW5zdGFuY2UoJ3Vuc2hhcnBfbWFzaycsIGltZ19ieXRlc19jbnQgKyBoc3ZfYnl0ZXNfY250ICsgYmx1cl9ieXRlc19jbnQgKiAyICsgYmx1cl9saW5lX2J5dGVfY250ICsgYmx1cl9jb2VmZnNfYnl0ZV9jbnQsIHtcbiAgICBleHA6IE1hdGguZXhwXG4gIH0pOyAvLyAzMi1iaXQgY29weSBpcyBtdWNoIGZhc3RlciBpbiBjaHJvbWVcblxuXG4gIHZhciBpbWczMiA9IG5ldyBVaW50MzJBcnJheShpbWcuYnVmZmVyKTtcbiAgdmFyIG1lbTMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX19tZW1vcnkuYnVmZmVyKTtcbiAgbWVtMzIuc2V0KGltZzMyKTsgLy8gSFNMXG5cbiAgdmFyIGZuID0gaW5zdGFuY2UuZXhwb3J0cy5oc3ZfdjE2IHx8IGluc3RhbmNlLmV4cG9ydHMuX2hzdl92MTY7XG4gIGZuKGltZ19vZmZzZXQsIGhzdl9vZmZzZXQsIHdpZHRoLCBoZWlnaHQpOyAvLyBCTFVSXG5cbiAgZm4gPSBpbnN0YW5jZS5leHBvcnRzLmJsdXJNb25vMTYgfHwgaW5zdGFuY2UuZXhwb3J0cy5fYmx1ck1vbm8xNjtcbiAgZm4oaHN2X29mZnNldCwgYmx1cl9vZmZzZXQsIGJsdXJfdG1wX29mZnNldCwgYmx1cl9saW5lX29mZnNldCwgYmx1cl9jb2VmZnNfb2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpOyAvLyBVTlNIQVJQXG5cbiAgZm4gPSBpbnN0YW5jZS5leHBvcnRzLnVuc2hhcnAgfHwgaW5zdGFuY2UuZXhwb3J0cy5fdW5zaGFycDtcbiAgZm4oaW1nX29mZnNldCwgaW1nX29mZnNldCwgaHN2X29mZnNldCwgYmx1cl9vZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGFtb3VudCwgdGhyZXNob2xkKTsgLy8gMzItYml0IGNvcHkgaXMgbXVjaCBmYXN0ZXIgaW4gY2hyb21lXG5cbiAgaW1nMzIuc2V0KG5ldyBVaW50MzJBcnJheSh0aGlzLl9fbWVtb3J5LmJ1ZmZlciwgMCwgcGl4ZWxzKSk7XG59O1xuXG59LHt9XSwxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBUaGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSBmcm9tIG1hdGgud2FzbSwgZG9uJ3QgZWRpdC5cbi8vXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQURBWmtlV3hwYm1zQUFBQUFBQUUwQjJBQUFHQUVmMzkvZndCZ0JuOS9mMzkvZndCZ0NIOS9mMzkvZjM5L0FHQUlmMzkvZjM5L2YzMEFZQUo5ZndCZ0FYd0JmQUlaQWdObGJuWURaWGh3QUFZRFpXNTJCbTFsYlc5eWVRSUFBQU1IQmdBRkFnUUJBd1lHQVg4QVFRQUxCNG9CQ0JGZlgzZGhjMjFmWTJGc2JGOWpkRzl5Y3dBQkZsOWZZblZwYkdSZloyRjFjM05wWVc1ZlkyOWxabk1BQWc1ZlgyZGhkWE56TVRaZmJHbHVaUUFEQ21Kc2RYSk5iMjV2TVRZQUJBZG9jM1pmZGpFMkFBVUhkVzV6YUdGeWNBQUdERjlmWkhOdlgyaGhibVJzWlFNQUdGOWZkMkZ6YlY5aGNIQnNlVjlrWVhSaFgzSmxiRzlqY3dBQkNzVU1CZ01BQVF2V0FRRUhmQ0FCUk51R3VrT0NHdnMvSUFDN295SUNSQUFBQUFBQUFBREFvaEFBSWdXMmpEZ0NGQ0FCSUFLYUVBQWlBeUFEb0NJR3RqZ0NFQ0FCUkFBQUFBQUFBUEEvSUFPaElnUWdCS0lnQXlBQ0lBS2dva1FBQUFBQUFBRHdQNkFnQmFHaklnUzJPQUlBSUFFZ0JTQUVtcUlpQjdZNEFnd2dBU0FESUFKRUFBQUFBQUFBOEQrZ0lBU2lvaUlJdGpnQ0NDQUJJQU1nQWtRQUFBQUFBQUR3djZBZ0JLS2lJZ0syT0FJRUlBRWdCeUFJb0NBRlJBQUFBQUFBQVBBL0lBYWhvQ0lEbzdZNEFod2dBU0FFSUFLZ0lBT2p0amdDR0F1R0JRTUdmd2w4QW4wZ0F5b0NEQ0VWSUFNcUFnZ2hGaUFES2dJVXV5RVJJQU1xQWhDN0lSQUNRQ0FFUVFGcklnaEJBRWdpQ1FSQUlBSWhCeUFBSVFZTUFRc2dBaUFBTHdFQXVDSVBJQU1xQWhpN29pSU1JQkdpSWcwZ0RDQVFvaUFQSUFNcUFnUzdJaE9pSWhRZ0F5b0NBTHNpRWlBUG9xQ2dvQ0lPdGpnQ0FDQUNRUVJxSVFjZ0FFRUNhaUVHSUFoRkRRQWdDRUVCSUFoQkFVZ2JJZ3BCZjNNaEN3Si9JQVFnQ210QkFYRkZCRUFnRGlFTklBZ01BUXNnQWlBTklBNGdFS0lnRkNBU0lBQXZBUUs0SWcraW9LQ2dJZzIyT0FJRUlBSkJDR29oQnlBQVFRUnFJUVlnRGlFTUlBUkJBbXNMSVFJZ0MwRUFJQVJyUmcwQUEwQWdCeUFNSUJHaUlBMGdFS0lnRHlBVG9pQVNJQVl2QVFDNElnNmlvS0NnSWd5Mk9BSUFJQWNnRFNBUm9pQU1JQkNpSUE0Z0U2SWdFaUFHTHdFQ3VDSVBvcUNnb0NJTnRqZ0NCQ0FIUVFocUlRY2dCa0VFYWlFR0lBSkJBa29oQUNBQ1FRSnJJUUlnQUEwQUN3c0NRQ0FKRFFBZ0FTQUZJQWhzUVFGMGFpSUFBbjhnQmtFQ2F5OEJBQ0lDdUNJTklCVzdJaEtpSUEwZ0Zyc2lFNktnSUEwZ0F5b0NITHVpSWd3Z0VLS2dJQXdnRWFLZ0lnOGdCMEVFYXlJSEtnSUF1NkFpRGtRQUFBQUFBQUR3UVdNZ0RrUUFBQUFBQUFBQUFHWnhCRUFnRHFzTUFRdEJBQXM3QVFBZ0NFVU5BQ0FHUVFScklRWkJBQ0FGYTBFQmRDRUJBMEFDZnlBTklCS2lJQUpCLy84RGNiZ2lEU0FUb3FBZ0R5SU9JQkNpb0NBTUlCR2lvQ0lQSUFkQkJHc2lCeW9DQUx1Z0lneEVBQUFBQUFBQThFRmpJQXhFQUFBQUFBQUFBQUJtY1FSQUlBeXJEQUVMUVFBTElRTWdCaThCQUNFQ0lBQWdBV29pQUNBRE93RUFJQVpCQW1zaEJpQUlRUUZLSVFNZ0RpRU1JQWhCQVdzaENDQUREUUFMQ3d2UkFnSUJmd2Q4QWtBZ0IwTUFBQUFBV3cwQUlBUkUyNGE2UTRJYSt6OGdCME1BQUFBL2w3dWpJZ2xFQUFBQUFBQUFBTUNpRUFBaURMYU1PQUlVSUFRZ0Nab1FBQ0lLSUFxZ0lnMjJPQUlRSUFSRUFBQUFBQUFBOEQ4Z0NxRWlDeUFMb2lBS0lBa2dDYUNpUkFBQUFBQUFBUEEvb0NBTW9hTWlDN1k0QWdBZ0JDQU1JQXVhb2lJT3RqZ0NEQ0FFSUFvZ0NVUUFBQUFBQUFEd1A2QWdDNktpSWcrMk9BSUlJQVFnQ2lBSlJBQUFBQUFBQVBDL29DQUxvcUlpQ2JZNEFnUWdCQ0FPSUErZ0lBeEVBQUFBQUFBQThEOGdEYUdnSWdxanRqZ0NIQ0FFSUFzZ0NhQWdDcU8yT0FJWUlBWUVRQU5BSUFBZ0JTQUliRUVCZEdvZ0FpQUlRUUYwYWlBRElBUWdCU0FHRUFNZ0NFRUJhaUlJSUFaSERRQUxDeUFGUlEwQVFRQWhDQU5BSUFJZ0JpQUliRUVCZEdvZ0FTQUlRUUYwYWlBRElBUWdCaUFGRUFNZ0NFRUJhaUlJSUFWSERRQUxDd3R4QVFOL0lBSWdBMndpQlFSQUEwQWdBU0FBS0FJQUlnUkJFSFpCL3dGeElnSWdBaUFFUVFoMlFmOEJjU0lESUFNZ0JFSC9BWEVpQkVrYklBSWdBMHNiSWdZZ0JpQUVJQUlnQkVzYklBTWdCRXNiUVFoME93RUFJQUZCQW1vaEFTQUFRUVJxSVFBZ0JVRUJheUlGRFFBTEN3dVpBZ0lEZndGOElBUWdCV3doQkFKL0lBYXpRd0FBZ0VXVVF3QUF5RUtWdTBRQUFBQUFBQURnUDZBaUM1bEVBQUFBQUFBQTRFRmpCRUFnQzZvTUFRdEJnSUNBZ0hnTElRVWdCQVJBSUFkQkNIUWhDVUVBSVFZRFFDQUpJQUlnQmtFQmRDSUhhaThCQUNJQklBTWdCMm92QVFCcklnY2dCMEVmZFNJSWFpQUljMDBFUUNBQUlBWkJBblFpQ0dvaUNpQUZJQWRzUVlBUWFrRU1kU0FCYWlJSFFZRCtBeUFIUVlEK0EwZ2JJZ2RCQUNBSFFRQktHMEVNZENBQlFRRWdBUnR1SWdFZ0NpMEFBR3hCZ0JCcVFReDJPZ0FBSUFBZ0NFRUJjbW9pQnlBQklBY3RBQUJzUVlBUWFrRU1kam9BQUNBQUlBaEJBbkpxSWdjZ0FTQUhMUUFBYkVHQUVHcEJESFk2QUFBTElBWkJBV29pQmlBRVJ3MEFDd3NMJztcblxufSx7fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgR0NfSU5URVJWQUwgPSAxMDA7XG5cbmZ1bmN0aW9uIFBvb2woY3JlYXRlLCBpZGxlKSB7XG4gIHRoaXMuY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLmF2YWlsYWJsZSA9IFtdO1xuICB0aGlzLmFjcXVpcmVkID0ge307XG4gIHRoaXMubGFzdElkID0gMTtcbiAgdGhpcy50aW1lb3V0SWQgPSAwO1xuICB0aGlzLmlkbGUgPSBpZGxlIHx8IDIwMDA7XG59XG5cblBvb2wucHJvdG90eXBlLmFjcXVpcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlc291cmNlO1xuXG4gIGlmICh0aGlzLmF2YWlsYWJsZS5sZW5ndGggIT09IDApIHtcbiAgICByZXNvdXJjZSA9IHRoaXMuYXZhaWxhYmxlLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHJlc291cmNlID0gdGhpcy5jcmVhdGUoKTtcbiAgICByZXNvdXJjZS5pZCA9IHRoaXMubGFzdElkKys7XG5cbiAgICByZXNvdXJjZS5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnJlbGVhc2UocmVzb3VyY2UpO1xuICAgIH07XG4gIH1cblxuICB0aGlzLmFjcXVpcmVkW3Jlc291cmNlLmlkXSA9IHJlc291cmNlO1xuICByZXR1cm4gcmVzb3VyY2U7XG59O1xuXG5Qb29sLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIGRlbGV0ZSB0aGlzLmFjcXVpcmVkW3Jlc291cmNlLmlkXTtcbiAgcmVzb3VyY2UubGFzdFVzZWQgPSBEYXRlLm5vdygpO1xuICB0aGlzLmF2YWlsYWJsZS5wdXNoKHJlc291cmNlKTtcblxuICBpZiAodGhpcy50aW1lb3V0SWQgPT09IDApIHtcbiAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nYygpO1xuICAgIH0sIEdDX0lOVEVSVkFMKTtcbiAgfVxufTtcblxuUG9vbC5wcm90b3R5cGUuZ2MgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICB0aGlzLmF2YWlsYWJsZSA9IHRoaXMuYXZhaWxhYmxlLmZpbHRlcihmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICBpZiAobm93IC0gcmVzb3VyY2UubGFzdFVzZWQgPiBfdGhpczMuaWRsZSkge1xuICAgICAgcmVzb3VyY2UuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBpZiAodGhpcy5hdmFpbGFibGUubGVuZ3RoICE9PSAwKSB7XG4gICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczMuZ2MoKTtcbiAgICB9LCBHQ19JTlRFUlZBTCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy50aW1lb3V0SWQgPSAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2w7XG5cbn0se31dLDE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIEFkZCBpbnRlcm1lZGlhdGUgcmVzaXppbmcgc3RlcHMgd2hlbiBzY2FsaW5nIGRvd24gYnkgYSB2ZXJ5IGxhcmdlIGZhY3Rvci5cbi8vXG4vLyBGb3IgZXhhbXBsZSwgd2hlbiByZXNpemluZyAxMDAwMHgxMDAwMCBkb3duIHRvIDEweDEwLCBpdCdsbCByZXNpemUgaXQgdG9cbi8vIDMwMHgzMDAgZmlyc3QuXG4vL1xuLy8gSXQncyBuZWVkZWQgYmVjYXVzZSB0aWxlciBoYXMgaXNzdWVzIHdoZW4gdGhlIGVudGlyZSB0aWxlIGlzIHNjYWxlZCBkb3duXG4vLyB0byBhIGZldyBwaXhlbHMgKDEwMjRweCBzb3VyY2UgdGlsZSB3aXRoIGJvcmRlciBzaXplIDMgc2hvdWxkIHJlc3VsdCBpblxuLy8gYXQgbGVhc3QgMyszKzIgPSA4cHggdGFyZ2V0IHRpbGUsIHNvIG1heCBzY2FsZSBmYWN0b3IgaXMgMTI4IGhlcmUpLlxuLy9cbi8vIEFsc28sIGFkZGluZyBpbnRlcm1lZGlhdGUgc3RlcHMgY2FuIHNwZWVkIHVwIHByb2Nlc3NpbmcgaWYgd2UgdXNlIGxvd2VyXG4vLyBxdWFsaXR5IGFsZ29yaXRobXMgZm9yIGZpcnN0IHN0YWdlcy5cbi8vXG4ndXNlIHN0cmljdCc7IC8vIG1pbiBzaXplID0gMCByZXN1bHRzIGluIGluZmluaXRlIGxvb3AsXG4vLyBtaW4gc2l6ZSA9IDEgY2FuIGNvbnN1bWUgbGFyZ2UgYW1vdW50IG9mIG1lbW9yeVxuXG52YXIgTUlOX0lOTkVSX1RJTEVfU0laRSA9IDI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlU3RhZ2VzKGZyb21XaWR0aCwgZnJvbUhlaWdodCwgdG9XaWR0aCwgdG9IZWlnaHQsIHNyY1RpbGVTaXplLCBkZXN0VGlsZUJvcmRlcikge1xuICB2YXIgc2NhbGVYID0gdG9XaWR0aCAvIGZyb21XaWR0aDtcbiAgdmFyIHNjYWxlWSA9IHRvSGVpZ2h0IC8gZnJvbUhlaWdodDsgLy8gZGVyaXZlZCBmcm9tIGNyZWF0ZVJlZ2lvbnMgZXF1YXRpb246XG4gIC8vIGlubmVyVGlsZVdpZHRoID0gcGl4ZWxGbG9vcihzcmNUaWxlU2l6ZSAqIHNjYWxlWCkgLSAyICogZGVzdFRpbGVCb3JkZXI7XG5cbiAgdmFyIG1pblNjYWxlID0gKDIgKiBkZXN0VGlsZUJvcmRlciArIE1JTl9JTk5FUl9USUxFX1NJWkUgKyAxKSAvIHNyY1RpbGVTaXplOyAvLyByZWZ1c2UgdG8gc2NhbGUgaW1hZ2UgbXVsdGlwbGUgdGltZXMgYnkgbGVzcyB0aGFuIHR3aWNlIGVhY2ggdGltZSxcbiAgLy8gaXQgY291bGQgb25seSBoYXBwZW4gYmVjYXVzZSBvZiBpbnZhbGlkIG9wdGlvbnNcblxuICBpZiAobWluU2NhbGUgPiAwLjUpIHJldHVybiBbW3RvV2lkdGgsIHRvSGVpZ2h0XV07XG4gIHZhciBzdGFnZUNvdW50ID0gTWF0aC5jZWlsKE1hdGgubG9nKE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSkgLyBNYXRoLmxvZyhtaW5TY2FsZSkpOyAvLyBubyBhZGRpdGlvbmFsIHJlc2l6ZXMgYXJlIG5lY2Vzc2FyeSxcbiAgLy8gc3RhZ2VDb3VudCBjYW4gYmUgemVybyBvciBiZSBuZWdhdGl2ZSB3aGVuIGVubGFyZ2luZyB0aGUgaW1hZ2VcblxuICBpZiAoc3RhZ2VDb3VudCA8PSAxKSByZXR1cm4gW1t0b1dpZHRoLCB0b0hlaWdodF1dO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZUNvdW50OyBpKyspIHtcbiAgICB2YXIgd2lkdGggPSBNYXRoLnJvdW5kKE1hdGgucG93KE1hdGgucG93KGZyb21XaWR0aCwgc3RhZ2VDb3VudCAtIGkgLSAxKSAqIE1hdGgucG93KHRvV2lkdGgsIGkgKyAxKSwgMSAvIHN0YWdlQ291bnQpKTtcbiAgICB2YXIgaGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLnBvdyhNYXRoLnBvdyhmcm9tSGVpZ2h0LCBzdGFnZUNvdW50IC0gaSAtIDEpICogTWF0aC5wb3codG9IZWlnaHQsIGkgKyAxKSwgMSAvIHN0YWdlQ291bnQpKTtcbiAgICByZXN1bHQucHVzaChbd2lkdGgsIGhlaWdodF0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbn0se31dLDE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIFNwbGl0IG9yaWdpbmFsIGltYWdlIGludG8gbXVsdGlwbGUgMTAyNHgxMDI0IGNodW5rcyB0byByZWR1Y2UgbWVtb3J5IHVzYWdlXG4vLyAoaW1hZ2VzIGhhdmUgdG8gYmUgdW5wYWNrZWQgaW50byB0eXBlZCBhcnJheXMgZm9yIHJlc2l6aW5nKSBhbmQgYWxsb3dcbi8vIHBhcmFsbGVsIHByb2Nlc3Npbmcgb2YgbXVsdGlwbGUgdGlsZXMgYXQgYSB0aW1lLlxuLy9cbid1c2Ugc3RyaWN0Jztcbi8qXG4gKiBwaXhlbEZsb29yIGFuZCBwaXhlbENlaWwgYXJlIG1vZGlmaWVkIHZlcnNpb25zIG9mIE1hdGguZmxvb3IgYW5kIE1hdGguY2VpbFxuICogZnVuY3Rpb25zIHdoaWNoIHRha2UgaW50byBhY2NvdW50IGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZXJyb3JzLlxuICogVGhvc2UgZXJyb3JzIGNhbiBjYXVzZSB1bmRlc2lyZWQgaW5jcmVtZW50cy9kZWNyZW1lbnRzIG9mIHNpemVzIGFuZCBvZmZzZXRzOlxuICogTWF0aC5jZWlsKDM2IC8gKDM2IC8gNTAwKSkgPSA1MDFcbiAqIHBpeGVsQ2VpbCgzNiAvICgzNiAvIDUwMCkpID0gNTAwXG4gKi9cblxudmFyIFBJWEVMX0VQU0lMT04gPSAxZS01O1xuXG5mdW5jdGlvbiBwaXhlbEZsb29yKHgpIHtcbiAgdmFyIG5lYXJlc3QgPSBNYXRoLnJvdW5kKHgpO1xuXG4gIGlmIChNYXRoLmFicyh4IC0gbmVhcmVzdCkgPCBQSVhFTF9FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG5lYXJlc3Q7XG4gIH1cblxuICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbn1cblxuZnVuY3Rpb24gcGl4ZWxDZWlsKHgpIHtcbiAgdmFyIG5lYXJlc3QgPSBNYXRoLnJvdW5kKHgpO1xuXG4gIGlmIChNYXRoLmFicyh4IC0gbmVhcmVzdCkgPCBQSVhFTF9FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG5lYXJlc3Q7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKHgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZVJlZ2lvbnMob3B0aW9ucykge1xuICB2YXIgc2NhbGVYID0gb3B0aW9ucy50b1dpZHRoIC8gb3B0aW9ucy53aWR0aDtcbiAgdmFyIHNjYWxlWSA9IG9wdGlvbnMudG9IZWlnaHQgLyBvcHRpb25zLmhlaWdodDtcbiAgdmFyIGlubmVyVGlsZVdpZHRoID0gcGl4ZWxGbG9vcihvcHRpb25zLnNyY1RpbGVTaXplICogc2NhbGVYKSAtIDIgKiBvcHRpb25zLmRlc3RUaWxlQm9yZGVyO1xuICB2YXIgaW5uZXJUaWxlSGVpZ2h0ID0gcGl4ZWxGbG9vcihvcHRpb25zLnNyY1RpbGVTaXplICogc2NhbGVZKSAtIDIgKiBvcHRpb25zLmRlc3RUaWxlQm9yZGVyOyAvLyBwcmV2ZW50IGluZmluaXRlIGxvb3AsIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuXG4gIGlmIChpbm5lclRpbGVXaWR0aCA8IDEgfHwgaW5uZXJUaWxlSGVpZ2h0IDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3IgaW4gcGljYTogdGFyZ2V0IHRpbGUgd2lkdGgvaGVpZ2h0IGlzIHRvbyBzbWFsbC4nKTtcbiAgfVxuXG4gIHZhciB4LCB5O1xuICB2YXIgaW5uZXJYLCBpbm5lclksIHRvVGlsZVdpZHRoLCB0b1RpbGVIZWlnaHQ7XG4gIHZhciB0aWxlcyA9IFtdO1xuICB2YXIgdGlsZTsgLy8gd2UgZ28gdG9wLXRvLWRvd24gaW5zdGVhZCBvZiBsZWZ0LXRvLXJpZ2h0IHRvIG1ha2UgaW1hZ2UgZGlzcGxheWVkIGZyb20gdG9wIHRvXG4gIC8vIGRvZXNuIGluIHRoZSBicm93c2VyXG5cbiAgZm9yIChpbm5lclkgPSAwOyBpbm5lclkgPCBvcHRpb25zLnRvSGVpZ2h0OyBpbm5lclkgKz0gaW5uZXJUaWxlSGVpZ2h0KSB7XG4gICAgZm9yIChpbm5lclggPSAwOyBpbm5lclggPCBvcHRpb25zLnRvV2lkdGg7IGlubmVyWCArPSBpbm5lclRpbGVXaWR0aCkge1xuICAgICAgeCA9IGlubmVyWCAtIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXI7XG5cbiAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICB4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdG9UaWxlV2lkdGggPSBpbm5lclggKyBpbm5lclRpbGVXaWR0aCArIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXIgLSB4O1xuXG4gICAgICBpZiAoeCArIHRvVGlsZVdpZHRoID49IG9wdGlvbnMudG9XaWR0aCkge1xuICAgICAgICB0b1RpbGVXaWR0aCA9IG9wdGlvbnMudG9XaWR0aCAtIHg7XG4gICAgICB9XG5cbiAgICAgIHkgPSBpbm5lclkgLSBvcHRpb25zLmRlc3RUaWxlQm9yZGVyO1xuXG4gICAgICBpZiAoeSA8IDApIHtcbiAgICAgICAgeSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRvVGlsZUhlaWdodCA9IGlubmVyWSArIGlubmVyVGlsZUhlaWdodCArIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXIgLSB5O1xuXG4gICAgICBpZiAoeSArIHRvVGlsZUhlaWdodCA+PSBvcHRpb25zLnRvSGVpZ2h0KSB7XG4gICAgICAgIHRvVGlsZUhlaWdodCA9IG9wdGlvbnMudG9IZWlnaHQgLSB5O1xuICAgICAgfVxuXG4gICAgICB0aWxlID0ge1xuICAgICAgICB0b1g6IHgsXG4gICAgICAgIHRvWTogeSxcbiAgICAgICAgdG9XaWR0aDogdG9UaWxlV2lkdGgsXG4gICAgICAgIHRvSGVpZ2h0OiB0b1RpbGVIZWlnaHQsXG4gICAgICAgIHRvSW5uZXJYOiBpbm5lclgsXG4gICAgICAgIHRvSW5uZXJZOiBpbm5lclksXG4gICAgICAgIHRvSW5uZXJXaWR0aDogaW5uZXJUaWxlV2lkdGgsXG4gICAgICAgIHRvSW5uZXJIZWlnaHQ6IGlubmVyVGlsZUhlaWdodCxcbiAgICAgICAgb2Zmc2V0WDogeCAvIHNjYWxlWCAtIHBpeGVsRmxvb3IoeCAvIHNjYWxlWCksXG4gICAgICAgIG9mZnNldFk6IHkgLyBzY2FsZVkgLSBwaXhlbEZsb29yKHkgLyBzY2FsZVkpLFxuICAgICAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICAgICAgc2NhbGVZOiBzY2FsZVksXG4gICAgICAgIHg6IHBpeGVsRmxvb3IoeCAvIHNjYWxlWCksXG4gICAgICAgIHk6IHBpeGVsRmxvb3IoeSAvIHNjYWxlWSksXG4gICAgICAgIHdpZHRoOiBwaXhlbENlaWwodG9UaWxlV2lkdGggLyBzY2FsZVgpLFxuICAgICAgICBoZWlnaHQ6IHBpeGVsQ2VpbCh0b1RpbGVIZWlnaHQgLyBzY2FsZVkpXG4gICAgICB9O1xuICAgICAgdGlsZXMucHVzaCh0aWxlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGlsZXM7XG59O1xuXG59LHt9XSwxNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iakNsYXNzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzLmlzQ2FudmFzID0gZnVuY3Rpb24gaXNDYW52YXMoZWxlbWVudCkge1xuICB2YXIgY25hbWUgPSBvYmpDbGFzcyhlbGVtZW50KTtcbiAgcmV0dXJuIGNuYW1lID09PSAnW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF0nXG4gIC8qIGJyb3dzZXIgKi9cbiAgfHwgY25hbWUgPT09ICdbb2JqZWN0IE9mZnNjcmVlbkNhbnZhc10nIHx8IGNuYW1lID09PSAnW29iamVjdCBDYW52YXNdJ1xuICAvKiBub2RlLWNhbnZhcyAqL1xuICA7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pc0ltYWdlID0gZnVuY3Rpb24gaXNJbWFnZShlbGVtZW50KSB7XG4gIHJldHVybiBvYmpDbGFzcyhlbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTEltYWdlRWxlbWVudF0nO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaXNJbWFnZUJpdG1hcCA9IGZ1bmN0aW9uIGlzSW1hZ2VCaXRtYXAoZWxlbWVudCkge1xuICByZXR1cm4gb2JqQ2xhc3MoZWxlbWVudCkgPT09ICdbb2JqZWN0IEltYWdlQml0bWFwXSc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5saW1pdGVyID0gZnVuY3Rpb24gbGltaXRlcihjb25jdXJyZW5jeSkge1xuICB2YXIgYWN0aXZlID0gMCxcbiAgICAgIHF1ZXVlID0gW107XG5cbiAgZnVuY3Rpb24gcm9sbCgpIHtcbiAgICBpZiAoYWN0aXZlIDwgY29uY3VycmVuY3kgJiYgcXVldWUubGVuZ3RoKSB7XG4gICAgICBhY3RpdmUrKztcbiAgICAgIHF1ZXVlLnNoaWZ0KCkoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gbGltaXQoZm4pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcXVldWUucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZuKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIGFjdGl2ZS0tO1xuICAgICAgICAgIHJvbGwoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIGFjdGl2ZS0tO1xuICAgICAgICAgIHJvbGwoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJvbGwoKTtcbiAgICB9KTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNpYl9xdWFsaXR5X25hbWUgPSBmdW5jdGlvbiBjaWJfcXVhbGl0eV9uYW1lKG51bSkge1xuICBzd2l0Y2ggKG51bSkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAncGl4ZWxhdGVkJztcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiAnbG93JztcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAnbWVkaXVtJztcbiAgfVxuXG4gIHJldHVybiAnaGlnaCc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jaWJfc3VwcG9ydCA9IGZ1bmN0aW9uIGNpYl9zdXBwb3J0KGNyZWF0ZUNhbnZhcykge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IGNyZWF0ZUNhbnZhcygxMDAsIDEwMCk7XG4gICAgcmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGMsIDAsIDAsIDEwMCwgMTAwLCB7XG4gICAgICByZXNpemVXaWR0aDogMTAsXG4gICAgICByZXNpemVIZWlnaHQ6IDEwLFxuICAgICAgcmVzaXplUXVhbGl0eTogJ2hpZ2gnXG4gICAgfSkudGhlbihmdW5jdGlvbiAoYml0bWFwKSB7XG4gICAgICB2YXIgc3RhdHVzID0gYml0bWFwLndpZHRoID09PSAxMDsgLy8gQnJhbmNoIGJlbG93IGlzIGZpbHRlcmVkIG9uIHVwcGVyIGxldmVsLiBXZSBkbyBub3QgY2FsbCByZXNpemVcbiAgICAgIC8vIGRldGVjdGlvbiBmb3IgYmFzaWMgSW1hZ2VCaXRtYXAuXG4gICAgICAvL1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ltYWdlQml0bWFwXG4gICAgICAvLyBvbGQgQ3JvbWUgNTEgaGFzIEltYWdlQml0bWFwIHdpdGhvdXQgLmNsb3NlKCkuIFRoZW4gdGhpcyBjb2RlXG4gICAgICAvLyB3aWxsIHRocm93IGFuZCByZXR1cm4gJ2ZhbHNlJyBhcyBleHBlY3RlZC5cbiAgICAgIC8vXG5cbiAgICAgIGJpdG1hcC5jbG9zZSgpO1xuICAgICAgYyA9IG51bGw7XG4gICAgICByZXR1cm4gc3RhdHVzO1xuICAgIH0pO1xuICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMud29ya2VyX29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydCA9IGZ1bmN0aW9uIHdvcmtlcl9vZmZzY3JlZW5fY2FudmFzX3N1cHBvcnQoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBpZiBPZmZzY3JlZW5DYW52YXMgaXMgcHJlc2VudCwgd2UgYXNzdW1lIGJyb3dzZXIgc3VwcG9ydHMgV29ya2VyIGFuZCBidWlsdC1pbiBQcm9taXNlIGFzIHdlbGxcbiAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdvcmtlclBheWxvYWQoc2VsZikge1xuICAgICAgaWYgKHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEwLCAxMCk7IC8vIHRlc3QgdGhhdCAyZCBjb250ZXh0IGNhbiBiZSB1c2VkIGluIHdvcmtlclxuXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY3R4LnJlY3QoMCwgMCwgMSwgMSk7IC8vIHRlc3QgdGhhdCBjaWIgY2FuIGJlIHVzZWQgdG8gcmV0dXJuIGltYWdlIGJpdG1hcCBmcm9tIHdvcmtlclxuXG4gICAgICAgIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcChjYW52YXMsIDAsIDAsIDEsIDEpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLnBvc3RNZXNzYWdlKHRydWUpO1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5wb3N0TWVzc2FnZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IGJ0b2EoXCIoXCIuY29uY2F0KHdvcmtlclBheWxvYWQudG9TdHJpbmcoKSwgXCIpKHNlbGYpO1wiKSk7XG4gICAgdmFyIHcgPSBuZXcgV29ya2VyKFwiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LFwiLmNvbmNhdChjb2RlKSk7XG5cbiAgICB3Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgcmV0dXJuIHJlc29sdmUoZXYuZGF0YSk7XG4gICAgfTtcblxuICAgIHcub25lcnJvciA9IHJlamVjdDtcbiAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59OyAvLyBDaGVjayBpZiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5nZXRJbWFnZURhdGEgY2FuIGJlIHVzZWQsXG4vLyBGaXJlRm94IHJhbmRvbWl6ZXMgdGhlIG91dHB1dCBvZiB0aGF0IGZ1bmN0aW9uIGluIGBwcml2YWN5LnJlc2lzdEZpbmdlcnByaW50aW5nYCBtb2RlXG5cblxubW9kdWxlLmV4cG9ydHMuY2FuX3VzZV9jYW52YXMgPSBmdW5jdGlvbiBjYW5fdXNlX2NhbnZhcyhjcmVhdGVDYW52YXMpIHtcbiAgdmFyIHVzYWJsZSA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygyLCAxKTtcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgdmFyIGQgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKDIsIDEpO1xuICAgIGQuZGF0YVswXSA9IDEyO1xuICAgIGQuZGF0YVsxXSA9IDIzO1xuICAgIGQuZGF0YVsyXSA9IDM0O1xuICAgIGQuZGF0YVszXSA9IDI1NTtcbiAgICBkLmRhdGFbNF0gPSA0NTtcbiAgICBkLmRhdGFbNV0gPSA1NjtcbiAgICBkLmRhdGFbNl0gPSA2NztcbiAgICBkLmRhdGFbN10gPSAyNTU7XG4gICAgY3R4LnB1dEltYWdlRGF0YShkLCAwLCAwKTtcbiAgICBkID0gbnVsbDtcbiAgICBkID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAyLCAxKTtcblxuICAgIGlmIChkLmRhdGFbMF0gPT09IDEyICYmIGQuZGF0YVsxXSA9PT0gMjMgJiYgZC5kYXRhWzJdID09PSAzNCAmJiBkLmRhdGFbM10gPT09IDI1NSAmJiBkLmRhdGFbNF0gPT09IDQ1ICYmIGQuZGF0YVs1XSA9PT0gNTYgJiYgZC5kYXRhWzZdID09PSA2NyAmJiBkLmRhdGFbN10gPT09IDI1NSkge1xuICAgICAgdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge31cblxuICByZXR1cm4gdXNhYmxlO1xufTsgLy8gQ2hlY2sgaWYgY3JlYXRlSW1hZ2VCaXRtYXAoaW1nLCBzeCwgc3ksIHN3LCBzaCkgc2lnbmF0dXJlIHdvcmtzIGNvcnJlY3RseVxuLy8gd2l0aCBKUEVHIGltYWdlcyBvcmllbnRlZCB3aXRoIEV4aWY7XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjIwNjcxXG4vLyBUT0RPOiByZW1vdmUgYWZ0ZXIgaXQncyBmaXhlZCBpbiBjaHJvbWUgZm9yIGF0IGxlYXN0IDIgcmVsZWFzZXNcblxuXG5tb2R1bGUuZXhwb3J0cy5jaWJfY2FuX3VzZV9yZWdpb24gPSBmdW5jdGlvbiBjaWJfY2FuX3VzZV9yZWdpb24oKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWFnZS5zcmMgPSAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnICsgJy85ai80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQVlBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQScgKyAnQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBQUlUQUFNQUFBQUJBQUVBQUFBQUFBQUFBQUJJQUFBQUFRQUFBRWdBQUFBQi85JyArICdzQVF3QUVBd01FQXdNRUJBTUVCUVFFQlFZS0J3WUdCZ1lOQ1FvSUNnOE5FQkFQRFE4T0VSTVlGQkVTRnhJT0R4VWNGUmMnICsgJ1pHUnNiR3hBVUhSOGRHaDhZR2hzYS85c0FRd0VFQlFVR0JRWU1Cd2NNR2hFUEVSb2FHaG9hR2hvYUdob2FHaG9hR2hvYScgKyAnR2hvYUdob2FHaG9hR2hvYUdob2FHaG9hR2hvYUdob2FHaG9hR2hvYUdob2EvOElBRVFnQUFRQUNBd0VSQUFJUkFRTVJBJyArICdmL0VBQlFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQWYveEFBVUFRRUFBQUFBQUFBQUFBQUFBQUFBQUFBQS85b0FEQU1CQUEnICsgJ0lRQXhBQUFBRi9QLy9FQUJRUUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJnQUlBUUVBQVFVQ2YvL0VBQlFSQVFBQUFBQScgKyAnQUFBQUFBQUFBQUFBQUFBRC8yZ0FJQVFNQkFUOEJmLy9FQUJRUkFRQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJnQUlBUUlCJyArICdBVDhCZi8vRUFCUVFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yZ0FJQVFFQUJqOENmLy9FQUJRUUFRQUFBQUFBQUFBQUEnICsgJ0FBQUFBQUFBQUQvMmdBSUFRRUFBVDhoZi8vYUFBd0RBUUFDQUFNQUFBQVFILy9FQUJRUkFRQUFBQUFBQUFBQUFBQUFBQScgKyAnQUFBQUQvMmdBSUFRTUJBVDhRZi8vRUFCUVJBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yZ0FJQVFJQkFUOFFmLy9FQUJRJyArICdRQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvMmdBSUFRRUFBVDhRZi8vWic7XG5cbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjcmVhdGVJbWFnZUJpdG1hcChpbWFnZSwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCkudGhlbihmdW5jdGlvbiAoYml0bWFwKSB7XG4gICAgICAgIGlmIChiaXRtYXAud2lkdGggPT09IGltYWdlLndpZHRoICYmIGJpdG1hcC5oZWlnaHQgPT09IGltYWdlLmhlaWdodCkge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgfTtcbiAgfSk7XG59O1xuXG59LHt9XSwxNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBXZWIgV29ya2VyIHdyYXBwZXIgZm9yIGltYWdlIHJlc2l6ZSBmdW5jdGlvblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIE1hdGhMaWIgPSBfZGVyZXFfKCcuL21hdGhsaWInKTtcblxuICB2YXIgbWF0aExpYjtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblxuICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoZXYpIHtcbiAgICB2YXIgdGlsZU9wdHMgPSBldi5kYXRhLm9wdHM7XG4gICAgdmFyIHJldHVybkJpdG1hcCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aWxlT3B0cy5zcmMgJiYgdGlsZU9wdHMuc3JjQml0bWFwKSB7XG4gICAgICB2YXIgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh0aWxlT3B0cy53aWR0aCwgdGlsZU9wdHMuaGVpZ2h0KTtcbiAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgICAgIGFscGhhOiBCb29sZWFuKHRpbGVPcHRzLmFscGhhKVxuICAgICAgfSk7XG4gICAgICBjdHguZHJhd0ltYWdlKHRpbGVPcHRzLnNyY0JpdG1hcCwgMCwgMCk7XG4gICAgICB0aWxlT3B0cy5zcmMgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHRpbGVPcHRzLndpZHRoLCB0aWxlT3B0cy5oZWlnaHQpLmRhdGE7XG4gICAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMDtcbiAgICAgIGNhbnZhcyA9IG51bGw7XG4gICAgICB0aWxlT3B0cy5zcmNCaXRtYXAuY2xvc2UoKTtcbiAgICAgIHRpbGVPcHRzLnNyY0JpdG1hcCA9IG51bGw7IC8vIFRlbXBvcmFyeSBmb3JjZSBvdXQgZGF0YSB0byB0eXBlZCBhcnJheSwgYmVjYXVzZSBDaHJvbWUgaGF2ZSBhcnRlZmFjdHNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYS9pc3N1ZXMvMjIzXG4gICAgICAvLyByZXR1cm5CaXRtYXAgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghbWF0aExpYikgbWF0aExpYiA9IG5ldyBNYXRoTGliKGV2LmRhdGEuZmVhdHVyZXMpOyAvLyBVc2UgbXVsdGltYXRoJ3Mgc3luYyBhdXRvLWluaXQuIEF2b2lkIFByb21pc2UgdXNlIGluIG9sZCBicm93c2VycyxcbiAgICAvLyBiZWNhdXNlIHBvbHlmaWxscyBhcmUgbm90IHByb3BhZ2F0ZWQgdG8gd2Vid29ya2VyLlxuXG4gICAgdmFyIGRhdGEgPSBtYXRoTGliLnJlc2l6ZUFuZFVuc2hhcnAodGlsZU9wdHMpO1xuXG4gICAgaWYgKHJldHVybkJpdG1hcCkge1xuICAgICAgdmFyIHRvSW1hZ2VEYXRhID0gbmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoZGF0YSksIHRpbGVPcHRzLnRvV2lkdGgsIHRpbGVPcHRzLnRvSGVpZ2h0KTtcblxuICAgICAgdmFyIF9jYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHRpbGVPcHRzLnRvV2lkdGgsIHRpbGVPcHRzLnRvSGVpZ2h0KTtcblxuICAgICAgdmFyIF9jdHggPSBfY2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgICAgICBhbHBoYTogQm9vbGVhbih0aWxlT3B0cy5hbHBoYSlcbiAgICAgIH0pO1xuXG4gICAgICBfY3R4LnB1dEltYWdlRGF0YSh0b0ltYWdlRGF0YSwgMCwgMCk7XG5cbiAgICAgIGNyZWF0ZUltYWdlQml0bWFwKF9jYW52YXMpLnRoZW4oZnVuY3Rpb24gKGJpdG1hcCkge1xuICAgICAgICBwb3N0TWVzc2FnZSh7XG4gICAgICAgICAgYml0bWFwOiBiaXRtYXBcbiAgICAgICAgfSwgW2JpdG1hcF0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSwgW2RhdGEuYnVmZmVyXSk7XG4gICAgfVxuICB9O1xufTtcblxufSx7XCIuL21hdGhsaWJcIjoxfV0sMTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gQ2FsY3VsYXRlIEdhdXNzaWFuIGJsdXIgb2YgYW4gaW1hZ2UgdXNpbmcgSUlSIGZpbHRlclxuLy8gVGhlIG1ldGhvZCBpcyB0YWtlbiBmcm9tIEludGVsJ3Mgd2hpdGUgcGFwZXIgYW5kIGNvZGUgZXhhbXBsZSBhdHRhY2hlZCB0byBpdDpcbi8vIGh0dHBzOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2lpci1nYXVzc2lhbi1ibHVyLWZpbHRlclxuLy8gLWltcGxlbWVudGF0aW9uLXVzaW5nLWludGVsLWFkdmFuY2VkLXZlY3Rvci1leHRlbnNpb25zXG5cbnZhciBhMCwgYTEsIGEyLCBhMywgYjEsIGIyLCBsZWZ0X2Nvcm5lciwgcmlnaHRfY29ybmVyO1xuXG5mdW5jdGlvbiBnYXVzc0NvZWYoc2lnbWEpIHtcbiAgaWYgKHNpZ21hIDwgMC41KSB7XG4gICAgc2lnbWEgPSAwLjU7XG4gIH1cblxuICB2YXIgYSA9IE1hdGguZXhwKDAuNzI2ICogMC43MjYpIC8gc2lnbWEsXG4gICAgICBnMSA9IE1hdGguZXhwKC1hKSxcbiAgICAgIGcyID0gTWF0aC5leHAoLTIgKiBhKSxcbiAgICAgIGsgPSAoMSAtIGcxKSAqICgxIC0gZzEpIC8gKDEgKyAyICogYSAqIGcxIC0gZzIpO1xuXG4gIGEwID0gaztcbiAgYTEgPSBrICogKGEgLSAxKSAqIGcxO1xuICBhMiA9IGsgKiAoYSArIDEpICogZzE7XG4gIGEzID0gLWsgKiBnMjtcbiAgYjEgPSAyICogZzE7XG4gIGIyID0gLWcyO1xuICBsZWZ0X2Nvcm5lciA9IChhMCArIGExKSAvICgxIC0gYjEgLSBiMik7XG4gIHJpZ2h0X2Nvcm5lciA9IChhMiArIGEzKSAvICgxIC0gYjEgLSBiMik7XG5cbiAgLy8gQXR0ZW1wdCB0byBmb3JjZSB0eXBlIHRvIEZQMzIuXG4gIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KFsgYTAsIGExLCBhMiwgYTMsIGIxLCBiMiwgbGVmdF9jb3JuZXIsIHJpZ2h0X2Nvcm5lciBdKTtcbn1cblxuZnVuY3Rpb24gY29udm9sdmVNb25vMTYoc3JjLCBvdXQsIGxpbmUsIGNvZWZmLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIC8vIHRha2VzIHNyYyBpbWFnZSBhbmQgd3JpdGVzIHRoZSBibHVycmVkIGFuZCB0cmFuc3Bvc2VkIHJlc3VsdCBpbnRvIG91dFxuXG4gIHZhciBwcmV2X3NyYywgY3Vycl9zcmMsIGN1cnJfb3V0LCBwcmV2X291dCwgcHJldl9wcmV2X291dDtcbiAgdmFyIHNyY19pbmRleCwgb3V0X2luZGV4LCBsaW5lX2luZGV4O1xuICB2YXIgaSwgajtcbiAgdmFyIGNvZWZmX2EwLCBjb2VmZl9hMSwgY29lZmZfYjEsIGNvZWZmX2IyO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgIHNyY19pbmRleCA9IGkgKiB3aWR0aDtcbiAgICBvdXRfaW5kZXggPSBpO1xuICAgIGxpbmVfaW5kZXggPSAwO1xuXG4gICAgLy8gbGVmdCB0byByaWdodFxuICAgIHByZXZfc3JjID0gc3JjW3NyY19pbmRleF07XG4gICAgcHJldl9wcmV2X291dCA9IHByZXZfc3JjICogY29lZmZbNl07XG4gICAgcHJldl9vdXQgPSBwcmV2X3ByZXZfb3V0O1xuXG4gICAgY29lZmZfYTAgPSBjb2VmZlswXTtcbiAgICBjb2VmZl9hMSA9IGNvZWZmWzFdO1xuICAgIGNvZWZmX2IxID0gY29lZmZbNF07XG4gICAgY29lZmZfYjIgPSBjb2VmZls1XTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICBjdXJyX3NyYyA9IHNyY1tzcmNfaW5kZXhdO1xuXG4gICAgICBjdXJyX291dCA9IGN1cnJfc3JjICogY29lZmZfYTAgK1xuICAgICAgICAgICAgICAgICBwcmV2X3NyYyAqIGNvZWZmX2ExICtcbiAgICAgICAgICAgICAgICAgcHJldl9vdXQgKiBjb2VmZl9iMSArXG4gICAgICAgICAgICAgICAgIHByZXZfcHJldl9vdXQgKiBjb2VmZl9iMjtcblxuICAgICAgcHJldl9wcmV2X291dCA9IHByZXZfb3V0O1xuICAgICAgcHJldl9vdXQgPSBjdXJyX291dDtcbiAgICAgIHByZXZfc3JjID0gY3Vycl9zcmM7XG5cbiAgICAgIGxpbmVbbGluZV9pbmRleF0gPSBwcmV2X291dDtcbiAgICAgIGxpbmVfaW5kZXgrKztcbiAgICAgIHNyY19pbmRleCsrO1xuICAgIH1cblxuICAgIHNyY19pbmRleC0tO1xuICAgIGxpbmVfaW5kZXgtLTtcbiAgICBvdXRfaW5kZXggKz0gaGVpZ2h0ICogKHdpZHRoIC0gMSk7XG5cbiAgICAvLyByaWdodCB0byBsZWZ0XG4gICAgcHJldl9zcmMgPSBzcmNbc3JjX2luZGV4XTtcbiAgICBwcmV2X3ByZXZfb3V0ID0gcHJldl9zcmMgKiBjb2VmZls3XTtcbiAgICBwcmV2X291dCA9IHByZXZfcHJldl9vdXQ7XG4gICAgY3Vycl9zcmMgPSBwcmV2X3NyYztcblxuICAgIGNvZWZmX2EwID0gY29lZmZbMl07XG4gICAgY29lZmZfYTEgPSBjb2VmZlszXTtcblxuICAgIGZvciAoaiA9IHdpZHRoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIGN1cnJfb3V0ID0gY3Vycl9zcmMgKiBjb2VmZl9hMCArXG4gICAgICAgICAgICAgICAgIHByZXZfc3JjICogY29lZmZfYTEgK1xuICAgICAgICAgICAgICAgICBwcmV2X291dCAqIGNvZWZmX2IxICtcbiAgICAgICAgICAgICAgICAgcHJldl9wcmV2X291dCAqIGNvZWZmX2IyO1xuXG4gICAgICBwcmV2X3ByZXZfb3V0ID0gcHJldl9vdXQ7XG4gICAgICBwcmV2X291dCA9IGN1cnJfb3V0O1xuXG4gICAgICBwcmV2X3NyYyA9IGN1cnJfc3JjO1xuICAgICAgY3Vycl9zcmMgPSBzcmNbc3JjX2luZGV4XTtcblxuICAgICAgb3V0W291dF9pbmRleF0gPSBsaW5lW2xpbmVfaW5kZXhdICsgcHJldl9vdXQ7XG5cbiAgICAgIHNyY19pbmRleC0tO1xuICAgICAgbGluZV9pbmRleC0tO1xuICAgICAgb3V0X2luZGV4IC09IGhlaWdodDtcbiAgICB9XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBibHVyTW9ubzE2KHNyYywgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSB7XG4gIC8vIFF1aWNrIGV4aXQgb24gemVybyByYWRpdXNcbiAgaWYgKCFyYWRpdXMpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIG91dCAgICAgID0gbmV3IFVpbnQxNkFycmF5KHNyYy5sZW5ndGgpLFxuICAgICAgdG1wX2xpbmUgPSBuZXcgRmxvYXQzMkFycmF5KE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKTtcblxuICB2YXIgY29lZmYgPSBnYXVzc0NvZWYocmFkaXVzKTtcblxuICBjb252b2x2ZU1vbm8xNihzcmMsIG91dCwgdG1wX2xpbmUsIGNvZWZmLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpO1xuICBjb252b2x2ZU1vbm8xNihvdXQsIHNyYywgdG1wX2xpbmUsIGNvZWZmLCBoZWlnaHQsIHdpZHRoLCByYWRpdXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJsdXJNb25vMTY7XG5cbn0se31dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cblxufSx7fV0sMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBhc3NpZ24gICAgICAgICA9IF9kZXJlcV8oJ29iamVjdC1hc3NpZ24nKTtcbnZhciBiYXNlNjRkZWNvZGUgICA9IF9kZXJlcV8oJy4vbGliL2Jhc2U2NGRlY29kZScpO1xudmFyIGhhc1dlYkFzc2VtYmx5ID0gX2RlcmVxXygnLi9saWIvd2FfZGV0ZWN0Jyk7XG5cblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAganM6IHRydWUsXG4gIHdhc206IHRydWVcbn07XG5cblxuZnVuY3Rpb24gTXVsdGlNYXRoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE11bHRpTWF0aCkpIHJldHVybiBuZXcgTXVsdGlNYXRoKG9wdGlvbnMpO1xuXG4gIHZhciBvcHRzID0gYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIG9wdGlvbnMgfHwge30pO1xuXG4gIHRoaXMub3B0aW9ucyAgICAgICAgID0gb3B0cztcblxuICB0aGlzLl9fY2FjaGUgICAgICAgICA9IHt9O1xuXG4gIHRoaXMuX19pbml0X3Byb21pc2UgID0gbnVsbDtcbiAgdGhpcy5fX21vZHVsZXMgICAgICAgPSBvcHRzLm1vZHVsZXMgfHwge307XG4gIHRoaXMuX19tZW1vcnkgICAgICAgID0gbnVsbDtcbiAgdGhpcy5fX3dhc20gICAgICAgICAgPSB7fTtcblxuICB0aGlzLl9faXNMRSA9ICgobmV3IFVpbnQzMkFycmF5KChuZXcgVWludDhBcnJheShbIDEsIDAsIDAsIDAgXSkpLmJ1ZmZlcikpWzBdID09PSAxKTtcblxuICBpZiAoIXRoaXMub3B0aW9ucy5qcyAmJiAhdGhpcy5vcHRpb25zLndhc20pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGhsaWI6IGF0IGxlYXN0IFwianNcIiBvciBcIndhc21cIiBzaG91bGQgYmUgZW5hYmxlZCcpO1xuICB9XG59XG5cblxuTXVsdGlNYXRoLnByb3RvdHlwZS5oYXNfd2FzbSA9IGhhc1dlYkFzc2VtYmx5O1xuXG5cbk11bHRpTWF0aC5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKG1vZHVsZSkge1xuICB0aGlzLl9fbW9kdWxlc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG5cbiAgLy8gUGluIHRoZSBiZXN0IHBvc3NpYmxlIGltcGxlbWVudGF0aW9uXG4gIGlmICh0aGlzLm9wdGlvbnMud2FzbSAmJiB0aGlzLmhhc193YXNtKCkgJiYgbW9kdWxlLndhc21fZm4pIHtcbiAgICB0aGlzW21vZHVsZS5uYW1lXSA9IG1vZHVsZS53YXNtX2ZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXNbbW9kdWxlLm5hbWVdID0gbW9kdWxlLmZuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbk11bHRpTWF0aC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX19pbml0X3Byb21pc2UpIHJldHVybiB0aGlzLl9faW5pdF9wcm9taXNlO1xuXG4gIGlmICghdGhpcy5vcHRpb25zLmpzICYmIHRoaXMub3B0aW9ucy53YXNtICYmICF0aGlzLmhhc193YXNtKCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdtYXRobGliOiBvbmx5IFwid2FzbVwiIHdhcyBlbmFibGVkLCBidXQgaXRcXCdzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fX2luaXRfcHJvbWlzZSA9IFByb21pc2UuYWxsKE9iamVjdC5rZXlzKHNlbGYuX19tb2R1bGVzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgbW9kdWxlID0gc2VsZi5fX21vZHVsZXNbbmFtZV07XG5cbiAgICBpZiAoIXNlbGYub3B0aW9ucy53YXNtIHx8ICFzZWxmLmhhc193YXNtKCkgfHwgIW1vZHVsZS53YXNtX2ZuKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIElmIGFscmVhZHkgY29tcGlsZWQgLSBleGl0XG4gICAgaWYgKHNlbGYuX193YXNtW25hbWVdKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIENvbXBpbGUgd2FzbSBzb3VyY2VcbiAgICByZXR1cm4gV2ViQXNzZW1ibHkuY29tcGlsZShzZWxmLl9fYmFzZTY0ZGVjb2RlKG1vZHVsZS53YXNtX3NyYykpXG4gICAgICAudGhlbihmdW5jdGlvbiAobSkgeyBzZWxmLl9fd2FzbVtuYW1lXSA9IG07IH0pO1xuICB9KSlcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmOyB9KTtcblxuICByZXR1cm4gdGhpcy5fX2luaXRfcHJvbWlzZTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1ldGhvZHMgYmVsb3cgYXJlIGZvciBpbnRlcm5hbCB1c2UgZnJvbSBwbHVnaW5zXG5cblxuLy8gU2ltcGxlIGRlY29kZSBiYXNlNjQgdG8gdHlwZWQgYXJyYXkuIFVzZWZ1bCB0byBsb2FkIGVtYmVkZGVkIHdlYmFzc2VtYmx5XG4vLyBjb2RlLiBZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LlxuLy9cbk11bHRpTWF0aC5wcm90b3R5cGUuX19iYXNlNjRkZWNvZGUgPSBiYXNlNjRkZWNvZGU7XG5cblxuLy8gSW5jcmVhc2UgY3VycmVudCBtZW1vcnkgdG8gaW5jbHVkZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLiBEbyBub3RoaW5nIGlmXG4vLyBzaXplIGlzIGFscmVhZHkgb2suIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksXG4vLyBiZWNhdXNlIGl0IHdpbGwgYmUgaW52b2tlZCBmcm9tIGAuX19pbnN0YW5jZSgpYC5cbi8vXG5NdWx0aU1hdGgucHJvdG90eXBlLl9fcmVhbGxvY2F0ZSA9IGZ1bmN0aW9uIG1lbV9ncm93X3RvKGJ5dGVzKSB7XG4gIGlmICghdGhpcy5fX21lbW9yeSkge1xuICAgIHRoaXMuX19tZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtcbiAgICAgIGluaXRpYWw6IE1hdGguY2VpbChieXRlcyAvICg2NCAqIDEwMjQpKVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9fbWVtb3J5O1xuICB9XG5cbiAgdmFyIG1lbV9zaXplID0gdGhpcy5fX21lbW9yeS5idWZmZXIuYnl0ZUxlbmd0aDtcblxuICBpZiAobWVtX3NpemUgPCBieXRlcykge1xuICAgIHRoaXMuX19tZW1vcnkuZ3JvdyhNYXRoLmNlaWwoKGJ5dGVzIC0gbWVtX3NpemUpIC8gKDY0ICogMTAyNCkpKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9fbWVtb3J5O1xufTtcblxuXG4vLyBSZXR1cm5zIGluc3RhbnRpbmF0ZWQgd2ViYXNzZW1ibHkgaXRlbSBieSBuYW1lLCB3aXRoIHNwZWNpZmllZCBtZW1vcnkgc2l6ZVxuLy8gYW5kIGVudmlyb25tZW50LlxuLy8gLSB1c2UgY2FjaGUgaWYgYXZhaWxhYmxlXG4vLyAtIGRvIHN5bmMgbW9kdWxlIGluaXQsIGlmIGFzeW5jIGluaXQgd2FzIG5vdCBjYWxsZWQgZWFybGllclxuLy8gLSBhbGxvY2F0ZSBtZW1vcnkgaWYgbm90IGVub3VndGhcbi8vIC0gY2FuIGV4cG9ydCBmdW5jdGlvbnMgdG8gd2ViYXNzZW1ibHkgdmlhIFwiZW52X2V4dHJhXCIsXG4vLyAgIGZvciBleGFtcGxlLCB7IGV4cDogTWF0aC5leHAgfVxuLy9cbk11bHRpTWF0aC5wcm90b3R5cGUuX19pbnN0YW5jZSA9IGZ1bmN0aW9uIGluc3RhbmNlKG5hbWUsIG1lbXNpemUsIGVudl9leHRyYSkge1xuICBpZiAobWVtc2l6ZSkgdGhpcy5fX3JlYWxsb2NhdGUobWVtc2l6ZSk7XG5cbiAgLy8gSWYgLmluaXQoKSB3YXMgbm90IGNhbGxlZCwgZG8gc3luYyBjb21waWxlXG4gIGlmICghdGhpcy5fX3dhc21bbmFtZV0pIHtcbiAgICB2YXIgbW9kdWxlID0gdGhpcy5fX21vZHVsZXNbbmFtZV07XG4gICAgdGhpcy5fX3dhc21bbmFtZV0gPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHRoaXMuX19iYXNlNjRkZWNvZGUobW9kdWxlLndhc21fc3JjKSk7XG4gIH1cblxuICBpZiAoIXRoaXMuX19jYWNoZVtuYW1lXSkge1xuICAgIHZhciBlbnZfYmFzZSA9IHtcbiAgICAgIG1lbW9yeUJhc2U6IDAsXG4gICAgICBtZW1vcnk6IHRoaXMuX19tZW1vcnksXG4gICAgICB0YWJsZUJhc2U6IDAsXG4gICAgICB0YWJsZTogbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHsgaW5pdGlhbDogMCwgZWxlbWVudDogJ2FueWZ1bmMnIH0pXG4gICAgfTtcblxuICAgIHRoaXMuX19jYWNoZVtuYW1lXSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSh0aGlzLl9fd2FzbVtuYW1lXSwge1xuICAgICAgZW52OiBhc3NpZ24oZW52X2Jhc2UsIGVudl9leHRyYSB8fCB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9fY2FjaGVbbmFtZV07XG59O1xuXG5cbi8vIEhlbHBlciB0byBjYWxjdWxhdGUgbWVtb3J5IGFsaWdoIGZvciBwb2ludGVycy4gV2ViYXNzZW1ibHkgZG9lcyBub3QgcmVxdWlyZVxuLy8gdGhpcywgYnV0IHlvdSBtYXkgd2lzaCB0byBleHBlcmltZW50LiBEZWZhdWx0IGJhc2UgPSA4O1xuLy9cbk11bHRpTWF0aC5wcm90b3R5cGUuX19hbGlnbiA9IGZ1bmN0aW9uIGFsaWduKG51bWJlciwgYmFzZSkge1xuICBiYXNlID0gYmFzZSB8fCA4O1xuICB2YXIgcmVtaW5kZXIgPSBudW1iZXIgJSBiYXNlO1xuICByZXR1cm4gbnVtYmVyICsgKHJlbWluZGVyID8gYmFzZSAtIHJlbWluZGVyIDogMCk7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gTXVsdGlNYXRoO1xuXG59LHtcIi4vbGliL2Jhc2U2NGRlY29kZVwiOjIxLFwiLi9saWIvd2FfZGV0ZWN0XCI6MjIsXCJvYmplY3QtYXNzaWduXCI6MjN9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBiYXNlNjQgZGVjb2RlIHN0ciAtPiBVaW50OEFycmF5LCB0byBsb2FkIFdBIG1vZHVsZXNcbi8vXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlNjRkZWNvZGUoc3RyKSB7XG4gIHZhciBpbnB1dCA9IHN0ci5yZXBsYWNlKC9bXFxyXFxuPV0vZywgJycpLCAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgICAgIG1heCAgID0gaW5wdXQubGVuZ3RoO1xuXG4gIHZhciBvdXQgPSBuZXcgVWludDhBcnJheSgobWF4ICogMykgPj4gMik7XG5cbiAgLy8gQ29sbGVjdCBieSA2KjQgYml0cyAoMyBieXRlcylcblxuICB2YXIgYml0cyA9IDA7XG4gIHZhciBwdHIgID0gMDtcblxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKChpZHggJSA0ID09PSAwKSAmJiBpZHgpIHtcbiAgICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiAxNikgJiAweEZGO1xuICAgICAgb3V0W3B0cisrXSA9IChiaXRzID4+IDgpICYgMHhGRjtcbiAgICAgIG91dFtwdHIrK10gPSBiaXRzICYgMHhGRjtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgNikgfCBCQVNFNjRfTUFQLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdmFyIHRhaWxiaXRzID0gKG1heCAlIDQpICogNjtcblxuICBpZiAodGFpbGJpdHMgPT09IDApIHtcbiAgICBvdXRbcHRyKytdID0gKGJpdHMgPj4gMTYpICYgMHhGRjtcbiAgICBvdXRbcHRyKytdID0gKGJpdHMgPj4gOCkgJiAweEZGO1xuICAgIG91dFtwdHIrK10gPSBiaXRzICYgMHhGRjtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTgpIHtcbiAgICBvdXRbcHRyKytdID0gKGJpdHMgPj4gMTApICYgMHhGRjtcbiAgICBvdXRbcHRyKytdID0gKGJpdHMgPj4gMikgJiAweEZGO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxMikge1xuICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiA0KSAmIDB4RkY7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcblxufSx7fV0sMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gRGV0ZWN0IFdlYkFzc2VtYmx5IHN1cHBvcnQuXG4vLyAtIENoZWNrIGdsb2JhbCBXZWJBc3NlbWJseSBvYmplY3Rcbi8vIC0gVHJ5IHRvIGxvYWQgc2ltcGxlIG1vZHVsZSAoY2FuIGJlIGRpc2FibGVkIHZpYSBDU1ApXG4vL1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB3YTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1dlYkFzc2VtYmx5KCkge1xuICAvLyB1c2UgY2FjaGUgaWYgY2FsbGVkIGJlZm9yZTtcbiAgaWYgKHR5cGVvZiB3YSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3YTtcblxuICB3YSA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2E7XG5cbiAgLy8gSWYgV2ViQXNzZW5ibHkgaXMgZGlzYWJsZWQsIGNvZGUgY2FuIHRocm93IG9uIGNvbXBpbGVcbiAgdHJ5IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnJpb24vbWluLXdhc20tZmFpbC9ibG9iL21hc3Rlci9taW4td2FzbS1mYWlsLmluLmpzXG4gICAgLy8gQWRkaXRpb25hbCBjaGVjayB0aGF0IFdBIGludGVybmFscyBhcmUgY29ycmVjdFxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZywgbWF4LWxlbiAqL1xuICAgIHZhciBiaW4gICAgICA9IG5ldyBVaW50OEFycmF5KFsgMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw2LDEsOTYsMSwxMjcsMSwxMjcsMywyLDEsMCw1LDMsMSwwLDEsNyw4LDEsNCwxMTYsMTAxLDExNSwxMTYsMCwwLDEwLDE2LDEsMTQsMCwzMiwwLDY1LDEsNTQsMiwwLDMyLDAsNDAsMiwwLDExIF0pO1xuICAgIHZhciBtb2R1bGUgICA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7fSk7XG5cbiAgICAvLyB0ZXN0IHN0b3JpbmcgdG8gYW5kIGxvYWRpbmcgZnJvbSBhIG5vbi16ZXJvIGxvY2F0aW9uIHZpYSBhIHBhcmFtZXRlci5cbiAgICAvLyBTYWZhcmkgb24gaU9TIDExLjIuNSByZXR1cm5zIDAgdW5leHBlY3RlZGx5IGF0IG5vbi16ZXJvIGxvY2F0aW9uc1xuICAgIGlmIChpbnN0YW5jZS5leHBvcnRzLnRlc3QoNCkgIT09IDApIHdhID0gdHJ1ZTtcblxuICAgIHJldHVybiB3YTtcbiAgfSBjYXRjaCAoX18pIHt9XG5cbiAgcmV0dXJuIHdhO1xufTtcblxufSx7fV0sMjM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxufSx7fV0sMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xudmFyIGJ1bmRsZUZuID0gYXJndW1lbnRzWzNdO1xudmFyIHNvdXJjZXMgPSBhcmd1bWVudHNbNF07XG52YXIgY2FjaGUgPSBhcmd1bWVudHNbNV07XG5cbnZhciBzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgICB2YXIgd2tleTtcbiAgICB2YXIgY2FjaGVLZXlzID0gT2JqZWN0LmtleXMoY2FjaGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWNoZUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBjYWNoZUtleXNbaV07XG4gICAgICAgIHZhciBleHAgPSBjYWNoZVtrZXldLmV4cG9ydHM7XG4gICAgICAgIC8vIFVzaW5nIGJhYmVsIGFzIGEgdHJhbnNwaWxlciB0byB1c2UgZXNtb2R1bGUsIHRoZSBleHBvcnQgd2lsbCBhbHdheXNcbiAgICAgICAgLy8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgZXhwb3J0IGFzIGEgcHJvcGVydHkgb2YgaXQuIFRvIGVuc3VyZVxuICAgICAgICAvLyB0aGUgZXhpc3RpbmcgYXBpIGFuZCBiYWJlbCBlc21vZHVsZSBleHBvcnRzIGFyZSBib3RoIHN1cHBvcnRlZCB3ZVxuICAgICAgICAvLyBjaGVjayBmb3IgYm90aFxuICAgICAgICBpZiAoZXhwID09PSBmbiB8fCBleHAgJiYgZXhwLmRlZmF1bHQgPT09IGZuKSB7XG4gICAgICAgICAgICB3a2V5ID0ga2V5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXdrZXkpIHtcbiAgICAgICAgd2tleSA9IE1hdGguZmxvb3IoTWF0aC5wb3coMTYsIDgpICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuICAgICAgICB2YXIgd2NhY2hlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FjaGVLZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGNhY2hlS2V5c1tpXTtcbiAgICAgICAgICAgIHdjYWNoZVtrZXldID0ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZXNbd2tleV0gPSBbXG4gICAgICAgICAgICAnZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7JyArIGZuICsgJyhzZWxmKTsgfScsXG4gICAgICAgICAgICB3Y2FjaGVcbiAgICAgICAgXTtcbiAgICB9XG4gICAgdmFyIHNrZXkgPSBNYXRoLmZsb29yKE1hdGgucG93KDE2LCA4KSAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KTtcblxuICAgIHZhciBzY2FjaGUgPSB7fTsgc2NhY2hlW3drZXldID0gd2tleTtcbiAgICBzb3VyY2VzW3NrZXldID0gW1xuICAgICAgICAnZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7JyArXG4gICAgICAgICAgICAvLyB0cnkgdG8gY2FsbCBkZWZhdWx0IGlmIGRlZmluZWQgdG8gYWxzbyBzdXBwb3J0IGJhYmVsIGVzbW9kdWxlIGV4cG9ydHNcbiAgICAgICAgICAgICd2YXIgZiA9IHJlcXVpcmUoJyArIHN0cmluZ2lmeSh3a2V5KSArICcpOycgK1xuICAgICAgICAgICAgJyhmLmRlZmF1bHQgPyBmLmRlZmF1bHQgOiBmKShzZWxmKTsnICtcbiAgICAgICAgJ30nLFxuICAgICAgICBzY2FjaGVcbiAgICBdO1xuXG4gICAgdmFyIHdvcmtlclNvdXJjZXMgPSB7fTtcbiAgICByZXNvbHZlU291cmNlcyhza2V5KTtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVTb3VyY2VzKGtleSkge1xuICAgICAgICB3b3JrZXJTb3VyY2VzW2tleV0gPSB0cnVlO1xuXG4gICAgICAgIGZvciAodmFyIGRlcFBhdGggaW4gc291cmNlc1trZXldWzFdKSB7XG4gICAgICAgICAgICB2YXIgZGVwS2V5ID0gc291cmNlc1trZXldWzFdW2RlcFBhdGhdO1xuICAgICAgICAgICAgaWYgKCF3b3JrZXJTb3VyY2VzW2RlcEtleV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlU291cmNlcyhkZXBLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9ICcoJyArIGJ1bmRsZUZuICsgJykoeydcbiAgICAgICAgKyBPYmplY3Qua2V5cyh3b3JrZXJTb3VyY2VzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeShrZXkpICsgJzpbJ1xuICAgICAgICAgICAgICAgICsgc291cmNlc1trZXldWzBdXG4gICAgICAgICAgICAgICAgKyAnLCcgKyBzdHJpbmdpZnkoc291cmNlc1trZXldWzFdKSArICddJ1xuICAgICAgICAgICAgO1xuICAgICAgICB9KS5qb2luKCcsJylcbiAgICAgICAgKyAnfSx7fSxbJyArIHN0cmluZ2lmeShza2V5KSArICddKSdcbiAgICA7XG5cbiAgICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJMO1xuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3JjXSwgeyB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyB9KTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmJhcmUpIHsgcmV0dXJuIGJsb2I7IH1cbiAgICB2YXIgd29ya2VyVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwpO1xuICAgIHdvcmtlci5vYmplY3RVUkwgPSB3b3JrZXJVcmw7XG4gICAgcmV0dXJuIHdvcmtlcjtcbn07XG5cbn0se31dLFwiL2luZGV4LmpzXCI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbnZhciBhc3NpZ24gPSBfZGVyZXFfKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciB3ZWJ3b3JraWZ5ID0gX2RlcmVxXygnd2Vid29ya2lmeScpO1xuXG52YXIgTWF0aExpYiA9IF9kZXJlcV8oJy4vbGliL21hdGhsaWInKTtcblxudmFyIFBvb2wgPSBfZGVyZXFfKCcuL2xpYi9wb29sJyk7XG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4vbGliL3V0aWxzJyk7XG5cbnZhciB3b3JrZXIgPSBfZGVyZXFfKCcuL2xpYi93b3JrZXInKTtcblxudmFyIGNyZWF0ZVN0YWdlcyA9IF9kZXJlcV8oJy4vbGliL3N0ZXBwZXInKTtcblxudmFyIGNyZWF0ZVJlZ2lvbnMgPSBfZGVyZXFfKCcuL2xpYi90aWxlcicpOyAvLyBEZWR1cGxpY2F0ZSBwb29scyAmIGxpbWl0ZXJzIHdpdGggdGhlIHNhbWUgY29uZmlnc1xuLy8gd2hlbiB1c2VyIGNyZWF0ZXMgbXVsdGlwbGUgcGljYSBpbnN0YW5jZXMuXG5cblxudmFyIHNpbmdsZXRvbmVzID0ge307XG52YXIgTkVFRF9TQUZBUklfRklYID0gZmFsc2U7XG5cbnRyeSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgTkVFRF9TQUZBUklfRklYID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdTYWZhcmknKSA+PSAwO1xuICB9XG59IGNhdGNoIChlKSB7fVxuXG52YXIgY29uY3VycmVuY3kgPSAxO1xuXG5pZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uY3VycmVuY3kgPSBNYXRoLm1pbihuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSB8fCAxLCA0KTtcbn1cblxudmFyIERFRkFVTFRfUElDQV9PUFRTID0ge1xuICB0aWxlOiAxMDI0LFxuICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gIGZlYXR1cmVzOiBbJ2pzJywgJ3dhc20nLCAnd3cnXSxcbiAgaWRsZTogMjAwMCxcbiAgY3JlYXRlQ2FudmFzOiBmdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuICAgIHZhciB0bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB0bXBDYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0bXBDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHJldHVybiB0bXBDYW52YXM7XG4gIH1cbn07XG52YXIgREVGQVVMVF9SRVNJWkVfT1BUUyA9IHtcbiAgcXVhbGl0eTogMyxcbiAgYWxwaGE6IGZhbHNlLFxuICB1bnNoYXJwQW1vdW50OiAwLFxuICB1bnNoYXJwUmFkaXVzOiAwLjAsXG4gIHVuc2hhcnBUaHJlc2hvbGQ6IDBcbn07XG52YXIgQ0FOX05FV19JTUFHRV9EQVRBID0gZmFsc2U7XG52YXIgQ0FOX0NSRUFURV9JTUFHRV9CSVRNQVAgPSBmYWxzZTtcbnZhciBDQU5fVVNFX0NBTlZBU19HRVRfSU1BR0VfREFUQSA9IGZhbHNlO1xudmFyIENBTl9VU0VfT0ZGU0NSRUVOX0NBTlZBUyA9IGZhbHNlO1xudmFyIENBTl9VU0VfQ0lCX1JFR0lPTl9GT1JfSU1BR0UgPSBmYWxzZTtcblxuZnVuY3Rpb24gd29ya2VyRmFicmljKCkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB3ZWJ3b3JraWZ5KHdvcmtlciksXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudmFsdWUudGVybWluYXRlKCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJMO1xuXG4gICAgICAgIGlmICh1cmwgJiYgdXJsLnJldm9rZU9iamVjdFVSTCAmJiB0aGlzLnZhbHVlLm9iamVjdFVSTCkge1xuICAgICAgICAgIHVybC5yZXZva2VPYmplY3RVUkwodGhpcy52YWx1ZS5vYmplY3RVUkwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQVBJIG1ldGhvZHNcblxuXG5mdW5jdGlvbiBQaWNhKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBpY2EpKSByZXR1cm4gbmV3IFBpY2Eob3B0aW9ucyk7XG4gIHRoaXMub3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9QSUNBX09QVFMsIG9wdGlvbnMgfHwge30pO1xuICB2YXIgbGltaXRlcl9rZXkgPSBcImxrX1wiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY29uY3VycmVuY3kpOyAvLyBTaGFyZSBsaW1pdGVycyB0byBhdm9pZCBtdWx0aXBsZSBwYXJhbGxlbCB3b3JrZXJzIHdoZW4gdXNlciBjcmVhdGVzXG4gIC8vIG11bHRpcGxlIHBpY2EgaW5zdGFuY2VzLlxuXG4gIHRoaXMuX19saW1pdCA9IHNpbmdsZXRvbmVzW2xpbWl0ZXJfa2V5XSB8fCB1dGlscy5saW1pdGVyKHRoaXMub3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gIGlmICghc2luZ2xldG9uZXNbbGltaXRlcl9rZXldKSBzaW5nbGV0b25lc1tsaW1pdGVyX2tleV0gPSB0aGlzLl9fbGltaXQ7IC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGZlYXR1cmVzLCBhY2NvcmRpbmcgdG8gb3B0aW9ucyAmIGJyb3dzZXIvbm9kZS5qc1xuXG4gIHRoaXMuZmVhdHVyZXMgPSB7XG4gICAganM6IGZhbHNlLFxuICAgIC8vIHB1cmUgSlMgaW1wbGVtZW50YXRpb24sIGNhbiBiZSBkaXNhYmxlZCBmb3IgdGVzdGluZ1xuICAgIHdhc206IGZhbHNlLFxuICAgIC8vIHdlYmFzc2VtYmx5IGltcGxlbWVudGF0aW9uIGZvciBoZWF2eSBmdW5jdGlvbnNcbiAgICBjaWI6IGZhbHNlLFxuICAgIC8vIHJlc2l6ZSB2aWEgY3JlYXRlSW1hZ2VCaXRtYXAgKG9ubHkgRkYgYXQgdGhpcyBtb21lbnQpXG4gICAgd3c6IGZhbHNlIC8vIHdlYndvcmtlcnNcblxuICB9O1xuICB0aGlzLl9fd29ya2Vyc1Bvb2wgPSBudWxsOyAvLyBTdG9yZSByZXF1ZXN0ZWQgZmVhdHVyZXMgZm9yIHdlYndvcmtlcnNcblxuICB0aGlzLl9fcmVxdWVzdGVkX2ZlYXR1cmVzID0gW107XG4gIHRoaXMuX19tYXRobGliID0gbnVsbDtcbn1cblxuUGljYS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBpZiAodGhpcy5fX2luaXRQcm9taXNlKSByZXR1cm4gdGhpcy5fX2luaXRQcm9taXNlOyAvLyBUZXN0IGlmIHdlIGNhbiBjcmVhdGUgSW1hZ2VEYXRhIHdpdGhvdXQgY2FudmFzIGFuZCBtZW1vcnkgY29weVxuXG4gIGlmICh0eXBlb2YgSW1hZ2VEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuICAgICAgbmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoNDAwKSwgMTAsIDEwKTtcbiAgICAgIENBTl9ORVdfSU1BR0VfREFUQSA9IHRydWU7XG4gICAgfSBjYXRjaCAoX18pIHt9XG4gIH0gLy8gSW1hZ2VCaXRtYXAgY2FuIGJlIGVmZmVjdGl2ZSBpbiAyIHBsYWNlczpcbiAgLy9cbiAgLy8gMS4gVGhyZWFkZWQganBlZyB1bnBhY2sgKGJhc2ljKVxuICAvLyAyLiBCdWlsdC1pbiByZXNpemUgKGJsb2NrZWQgZHVlIHByb2JsZW0gaW4gY2hyb21lLCBzZWUgaXNzdWUgIzg5KVxuICAvL1xuICAvLyBGb3IgYmFzaWMgdXNlIHdlIGFsc28gbmVlZCBJbWFnZUJpdG1hcCB3byBzdXBwb3J0IC5jbG9zZSgpIG1ldGhvZCxcbiAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3J1L2RvY3MvV2ViL0FQSS9JbWFnZUJpdG1hcFxuXG5cbiAgaWYgKHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoSW1hZ2VCaXRtYXAucHJvdG90eXBlICYmIEltYWdlQml0bWFwLnByb3RvdHlwZS5jbG9zZSkge1xuICAgICAgQ0FOX0NSRUFURV9JTUFHRV9CSVRNQVAgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYnVnKCdJbWFnZUJpdG1hcCBkb2VzIG5vdCBzdXBwb3J0IC5jbG9zZSgpLCBkaXNhYmxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmZWF0dXJlcyA9IHRoaXMub3B0aW9ucy5mZWF0dXJlcy5zbGljZSgpO1xuXG4gIGlmIChmZWF0dXJlcy5pbmRleE9mKCdhbGwnKSA+PSAwKSB7XG4gICAgZmVhdHVyZXMgPSBbJ2NpYicsICd3YXNtJywgJ2pzJywgJ3d3J107XG4gIH1cblxuICB0aGlzLl9fcmVxdWVzdGVkX2ZlYXR1cmVzID0gZmVhdHVyZXM7XG4gIHRoaXMuX19tYXRobGliID0gbmV3IE1hdGhMaWIoZmVhdHVyZXMpOyAvLyBDaGVjayBXZWJXb3JrZXIgc3VwcG9ydCBpZiByZXF1ZXN0ZWRcblxuICBpZiAoZmVhdHVyZXMuaW5kZXhPZignd3cnKSA+PSAwKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICdXb3JrZXInIGluIHdpbmRvdykge1xuICAgICAgLy8gSUUgPD0gMTEgZG9uJ3QgYWxsb3cgdG8gY3JlYXRlIHdlYndvcmtlcnMgZnJvbSBzdHJpbmcuIFdlIHNob3VsZCBjaGVjayBpdC5cbiAgICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODAxODEwL3dlYi13b3JrZXJzLWZyb20tYmxvYi11cmxzLWluLWllLTEwLWFuZC0xMVxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHdrciA9IF9kZXJlcV8oJ3dlYndvcmtpZnknKShmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgd2tyLnRlcm1pbmF0ZSgpO1xuICAgICAgICB0aGlzLmZlYXR1cmVzLnd3ID0gdHJ1ZTsgLy8gcG9vbCB1bmlxdWVuZXNzIGRlcGVuZHMgb24gcG9vbCBjb25maWcgKyB3ZWJ3b3JrZXIgY29uZmlnXG5cbiAgICAgICAgdmFyIHdwb29sX2tleSA9IFwid3BfXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucykpO1xuXG4gICAgICAgIGlmIChzaW5nbGV0b25lc1t3cG9vbF9rZXldKSB7XG4gICAgICAgICAgdGhpcy5fX3dvcmtlcnNQb29sID0gc2luZ2xldG9uZXNbd3Bvb2xfa2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9fd29ya2Vyc1Bvb2wgPSBuZXcgUG9vbCh3b3JrZXJGYWJyaWMsIHRoaXMub3B0aW9ucy5pZGxlKTtcbiAgICAgICAgICBzaW5nbGV0b25lc1t3cG9vbF9rZXldID0gdGhpcy5fX3dvcmtlcnNQb29sO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfXykge31cbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdE1hdGggPSB0aGlzLl9fbWF0aGxpYi5pbml0KCkudGhlbihmdW5jdGlvbiAobWF0aGxpYikge1xuICAgIC8vIENvcHkgZGV0ZWN0ZWQgZmVhdHVyZXNcbiAgICBhc3NpZ24oX3RoaXMuZmVhdHVyZXMsIG1hdGhsaWIuZmVhdHVyZXMpO1xuICB9KTtcblxuICB2YXIgY2hlY2tDaWJSZXNpemU7XG5cbiAgaWYgKCFDQU5fQ1JFQVRFX0lNQUdFX0JJVE1BUCkge1xuICAgIGNoZWNrQ2liUmVzaXplID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBjaGVja0NpYlJlc2l6ZSA9IHV0aWxzLmNpYl9zdXBwb3J0KHRoaXMub3B0aW9ucy5jcmVhdGVDYW52YXMpLnRoZW4oZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgaWYgKF90aGlzLmZlYXR1cmVzLmNpYiAmJiBmZWF0dXJlcy5pbmRleE9mKCdjaWInKSA8IDApIHtcbiAgICAgICAgX3RoaXMuZGVidWcoJ2NyZWF0ZUltYWdlQml0bWFwKCkgcmVzaXplIHN1cHBvcnRlZCwgYnV0IGRpc2FibGVkIGJ5IGNvbmZpZycpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZlYXR1cmVzLmluZGV4T2YoJ2NpYicpID49IDApIF90aGlzLmZlYXR1cmVzLmNpYiA9IHN0YXR1cztcbiAgICB9KTtcbiAgfVxuXG4gIENBTl9VU0VfQ0FOVkFTX0dFVF9JTUFHRV9EQVRBID0gdXRpbHMuY2FuX3VzZV9jYW52YXModGhpcy5vcHRpb25zLmNyZWF0ZUNhbnZhcyk7XG4gIHZhciBjaGVja09mZnNjcmVlbkNhbnZhcztcblxuICBpZiAoQ0FOX0NSRUFURV9JTUFHRV9CSVRNQVAgJiYgQ0FOX05FV19JTUFHRV9EQVRBICYmIGZlYXR1cmVzLmluZGV4T2YoJ3d3JykgIT09IC0xKSB7XG4gICAgY2hlY2tPZmZzY3JlZW5DYW52YXMgPSB1dGlscy53b3JrZXJfb2Zmc2NyZWVuX2NhbnZhc19zdXBwb3J0KCk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2tPZmZzY3JlZW5DYW52YXMgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9XG5cbiAgY2hlY2tPZmZzY3JlZW5DYW52YXMgPSBjaGVja09mZnNjcmVlbkNhbnZhcy50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBDQU5fVVNFX09GRlNDUkVFTl9DQU5WQVMgPSByZXN1bHQ7XG4gIH0pOyAvLyB3ZSB1c2UgY3JlYXRlSW1hZ2VCaXRtYXAgdG8gY3JvcCBpbWFnZSBkYXRhIGFuZCBwYXNzIGl0IHRvIHdvcmtlcnMsXG4gIC8vIHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHk7XG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyMjA2NzFcblxuICB2YXIgY2hlY2tDaWJSZWdpb24gPSB1dGlscy5jaWJfY2FuX3VzZV9yZWdpb24oKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBDQU5fVVNFX0NJQl9SRUdJT05fRk9SX0lNQUdFID0gcmVzdWx0O1xuICB9KTsgLy8gSW5pdCBtYXRoIGxpYi4gVGhhdCdzIGFzeW5jIGJlY2F1c2UgY2FuIGxvYWQgc29tZVxuXG4gIHRoaXMuX19pbml0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtpbml0TWF0aCwgY2hlY2tDaWJSZXNpemUsIGNoZWNrT2Zmc2NyZWVuQ2FudmFzLCBjaGVja0NpYlJlZ2lvbl0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpcztcbiAgfSk7XG4gIHJldHVybiB0aGlzLl9faW5pdFByb21pc2U7XG59OyAvLyBDYWxsIHJlc2l6ZXIgaW4gd2Vid29ya2VyIG9yIGxvY2FsbHksIGRlcGVuZGluZyBvbiBjb25maWdcblxuXG5QaWNhLnByb3RvdHlwZS5fX2ludm9rZVJlc2l6ZSA9IGZ1bmN0aW9uICh0aWxlT3B0cywgb3B0cykge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAvLyBTaGFyZSBjYWNoZSBiZXR3ZWVuIGNhbGxzOlxuICAvL1xuICAvLyAtIHdhc20gaW5zdGFuY2VcbiAgLy8gLSB3YXNtIG1lbW9yeSBvYmplY3RcbiAgLy9cbiAgb3B0cy5fX21hdGhDYWNoZSA9IG9wdHMuX19tYXRoQ2FjaGUgfHwge307XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIV90aGlzMi5mZWF0dXJlcy53dykge1xuICAgICAgLy8gbm90IHBvc3NpYmxlIHRvIGhhdmUgSW1hZ2VCaXRtYXAgaGVyZSBpZiB1c2VyIGRpc2FibGVkIFdXXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBfdGhpczIuX19tYXRobGliLnJlc2l6ZUFuZFVuc2hhcnAodGlsZU9wdHMsIG9wdHMuX19tYXRoQ2FjaGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgdyA9IF90aGlzMi5fX3dvcmtlcnNQb29sLmFjcXVpcmUoKTtcblxuICAgICAgaWYgKG9wdHMuY2FuY2VsVG9rZW4pIG9wdHMuY2FuY2VsVG9rZW5bXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICB3LnZhbHVlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICB3LnJlbGVhc2UoKTtcbiAgICAgICAgaWYgKGV2LmRhdGEuZXJyKSByZWplY3QoZXYuZGF0YS5lcnIpO2Vsc2UgcmVzb2x2ZShldi5kYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciB0cmFuc2ZlciA9IFtdO1xuICAgICAgaWYgKHRpbGVPcHRzLnNyYykgdHJhbnNmZXIucHVzaCh0aWxlT3B0cy5zcmMuYnVmZmVyKTtcbiAgICAgIGlmICh0aWxlT3B0cy5zcmNCaXRtYXApIHRyYW5zZmVyLnB1c2godGlsZU9wdHMuc3JjQml0bWFwKTtcbiAgICAgIHcudmFsdWUucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBvcHRzOiB0aWxlT3B0cyxcbiAgICAgICAgZmVhdHVyZXM6IF90aGlzMi5fX3JlcXVlc3RlZF9mZWF0dXJlcyxcbiAgICAgICAgcHJlbG9hZDoge1xuICAgICAgICAgIHdhc21fbm9kdWxlOiBfdGhpczIuX19tYXRobGliLl9fXG4gICAgICAgIH1cbiAgICAgIH0sIHRyYW5zZmVyKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gcHJvbWlzZSBpZiBjcmVhdGVJbWFnZUJpdG1hcCBpcyB1c2VkXG5cblxuUGljYS5wcm90b3R5cGUuX19leHRyYWN0VGlsZURhdGEgPSBmdW5jdGlvbiAodGlsZSwgZnJvbSwgb3B0cywgc3RhZ2VFbnYsIGV4dHJhY3RUbykge1xuICBpZiAodGhpcy5mZWF0dXJlcy53dyAmJiBDQU5fVVNFX09GRlNDUkVFTl9DQU5WQVMgJiYgKCAvLyBjcmVhdGVJbWFnZUJpdG1hcCBkb2Vzbid0IHdvcmsgZm9yIGltYWdlcyAoSW1hZ2UsIEltYWdlQml0bWFwKSB3aXRoIEV4aWYgb3JpZW50YXRpb24gaW4gQ2hyb21lLFxuICAvLyBjYW4gdXNlIGNhbnZhcyBiZWNhdXNlIGNhbnZhcyBkb2Vzbid0IGhhdmUgb3JpZW50YXRpb247XG4gIC8vIHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjIwNjcxXG4gIHV0aWxzLmlzQ2FudmFzKGZyb20pIHx8IENBTl9VU0VfQ0lCX1JFR0lPTl9GT1JfSU1BR0UpKSB7XG4gICAgdGhpcy5kZWJ1ZygnQ3JlYXRlIHRpbGUgZm9yIE9mZnNjcmVlbkNhbnZhcycpO1xuICAgIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcChzdGFnZUVudi5zcmNJbWFnZUJpdG1hcCB8fCBmcm9tLCB0aWxlLngsIHRpbGUueSwgdGlsZS53aWR0aCwgdGlsZS5oZWlnaHQpLnRoZW4oZnVuY3Rpb24gKGJpdG1hcCkge1xuICAgICAgZXh0cmFjdFRvLnNyY0JpdG1hcCA9IGJpdG1hcDtcbiAgICAgIHJldHVybiBleHRyYWN0VG87XG4gICAgfSk7XG4gIH0gLy8gRXh0cmFjdCB0aWxlIFJHQkEgYnVmZmVyLCBkZXBlbmRpbmcgb24gaW5wdXQgdHlwZVxuXG5cbiAgaWYgKHV0aWxzLmlzQ2FudmFzKGZyb20pKSB7XG4gICAgaWYgKCFzdGFnZUVudi5zcmNDdHgpIHN0YWdlRW52LnNyY0N0eCA9IGZyb20uZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgICBhbHBoYTogQm9vbGVhbihvcHRzLmFscGhhKVxuICAgIH0pOyAvLyBJZiBpbnB1dCBpcyBDYW52YXMgLSBleHRyYWN0IHJlZ2lvbiBkYXRhIGRpcmVjdGx5XG5cbiAgICB0aGlzLmRlYnVnKCdHZXQgdGlsZSBwaXhlbCBkYXRhJyk7XG4gICAgZXh0cmFjdFRvLnNyYyA9IHN0YWdlRW52LnNyY0N0eC5nZXRJbWFnZURhdGEodGlsZS54LCB0aWxlLnksIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0KS5kYXRhO1xuICAgIHJldHVybiBleHRyYWN0VG87XG4gIH0gLy8gSWYgaW5wdXQgaXMgSW1hZ2Ugb3IgZGVjb2RlZCB0byBJbWFnZUJpdG1hcCxcbiAgLy8gZHJhdyByZWdpb24gdG8gdGVtcG9yYXJ5IGNhbnZhcyBhbmQgZXh0cmFjdCBkYXRhIGZyb20gaXRcbiAgLy9cbiAgLy8gTm90ZSEgQXR0ZW1wdCB0byByZXVzZSB0aGlzIGNhbnZhcyBjYXVzZXMgc2lnbmlmaWNhbnQgc2xvd2Rvd24gaW4gY2hyb21lXG4gIC8vXG5cblxuICB0aGlzLmRlYnVnKCdEcmF3IHRpbGUgaW1hZ2VCaXRtYXAvaW1hZ2UgdG8gdGVtcG9yYXJ5IGNhbnZhcycpO1xuICB2YXIgdG1wQ2FudmFzID0gdGhpcy5vcHRpb25zLmNyZWF0ZUNhbnZhcyh0aWxlLndpZHRoLCB0aWxlLmhlaWdodCk7XG4gIHZhciB0bXBDdHggPSB0bXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgYWxwaGE6IEJvb2xlYW4ob3B0cy5hbHBoYSlcbiAgfSk7XG4gIHRtcEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gIHRtcEN0eC5kcmF3SW1hZ2Uoc3RhZ2VFbnYuc3JjSW1hZ2VCaXRtYXAgfHwgZnJvbSwgdGlsZS54LCB0aWxlLnksIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0LCAwLCAwLCB0aWxlLndpZHRoLCB0aWxlLmhlaWdodCk7XG4gIHRoaXMuZGVidWcoJ0dldCB0aWxlIHBpeGVsIGRhdGEnKTtcbiAgZXh0cmFjdFRvLnNyYyA9IHRtcEN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdGlsZS53aWR0aCwgdGlsZS5oZWlnaHQpLmRhdGE7IC8vIFNhZmFyaSAxMiB3b3JrYXJvdW5kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYS9pc3N1ZXMvMTk5XG5cbiAgdG1wQ2FudmFzLndpZHRoID0gdG1wQ2FudmFzLmhlaWdodCA9IDA7XG4gIHJldHVybiBleHRyYWN0VG87XG59O1xuXG5QaWNhLnByb3RvdHlwZS5fX2xhbmRUaWxlRGF0YSA9IGZ1bmN0aW9uICh0aWxlLCByZXN1bHQsIHN0YWdlRW52KSB7XG4gIHZhciB0b0ltYWdlRGF0YTtcbiAgdGhpcy5kZWJ1ZygnQ29udmVydCByYXcgcmdiYSB0aWxlIHJlc3VsdCB0byBJbWFnZURhdGEnKTtcblxuICBpZiAocmVzdWx0LmJpdG1hcCkge1xuICAgIHN0YWdlRW52LnRvQ3R4LmRyYXdJbWFnZShyZXN1bHQuYml0bWFwLCB0aWxlLnRvWCwgdGlsZS50b1kpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKENBTl9ORVdfSU1BR0VfREFUQSkge1xuICAgIC8vIHRoaXMgYnJhbmNoIGlzIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAvLyBJZiBgbmV3IEltYWdlRGF0YSgpYCAmIFVpbnQ4Q2xhbXBlZEFycmF5IHN1cG9ydGVkXG4gICAgdG9JbWFnZURhdGEgPSBuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShyZXN1bHQuZGF0YSksIHRpbGUudG9XaWR0aCwgdGlsZS50b0hlaWdodCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZmFsbGJhY2sgZm9yIGBub2RlLWNhbnZhc2AgYW5kIG9sZCBicm93c2Vyc1xuICAgIC8vIChJRTExIGhhcyBJbWFnZURhdGEgYnV0IGRvZXMgbm90IHN1cHBvcnQgYG5ldyBJbWFnZURhdGEoKWApXG4gICAgdG9JbWFnZURhdGEgPSBzdGFnZUVudi50b0N0eC5jcmVhdGVJbWFnZURhdGEodGlsZS50b1dpZHRoLCB0aWxlLnRvSGVpZ2h0KTtcblxuICAgIGlmICh0b0ltYWdlRGF0YS5kYXRhLnNldCkge1xuICAgICAgdG9JbWFnZURhdGEuZGF0YS5zZXQocmVzdWx0LmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJRTkgZG9uJ3QgaGF2ZSBgLnNldCgpYFxuICAgICAgZm9yICh2YXIgaSA9IHRvSW1hZ2VEYXRhLmRhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdG9JbWFnZURhdGEuZGF0YVtpXSA9IHJlc3VsdC5kYXRhW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuZGVidWcoJ0RyYXcgdGlsZScpO1xuXG4gIGlmIChORUVEX1NBRkFSSV9GSVgpIHtcbiAgICAvLyBTYWZhcmkgZHJhd3MgdGhpbiB3aGl0ZSBzdHJpcGVzIGJldHdlZW4gdGlsZXMgd2l0aG91dCB0aGlzIGZpeFxuICAgIHN0YWdlRW52LnRvQ3R4LnB1dEltYWdlRGF0YSh0b0ltYWdlRGF0YSwgdGlsZS50b1gsIHRpbGUudG9ZLCB0aWxlLnRvSW5uZXJYIC0gdGlsZS50b1gsIHRpbGUudG9Jbm5lclkgLSB0aWxlLnRvWSwgdGlsZS50b0lubmVyV2lkdGggKyAxZS01LCB0aWxlLnRvSW5uZXJIZWlnaHQgKyAxZS01KTtcbiAgfSBlbHNlIHtcbiAgICBzdGFnZUVudi50b0N0eC5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEsIHRpbGUudG9YLCB0aWxlLnRvWSwgdGlsZS50b0lubmVyWCAtIHRpbGUudG9YLCB0aWxlLnRvSW5uZXJZIC0gdGlsZS50b1ksIHRpbGUudG9Jbm5lcldpZHRoLCB0aWxlLnRvSW5uZXJIZWlnaHQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5QaWNhLnByb3RvdHlwZS5fX3RpbGVBbmRSZXNpemUgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIG9wdHMpIHtcbiAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgdmFyIHN0YWdlRW52ID0ge1xuICAgIHNyY0N0eDogbnVsbCxcbiAgICBzcmNJbWFnZUJpdG1hcDogbnVsbCxcbiAgICBpc0ltYWdlQml0bWFwUmV1c2VkOiBmYWxzZSxcbiAgICB0b0N0eDogbnVsbFxuICB9O1xuXG4gIHZhciBwcm9jZXNzVGlsZSA9IGZ1bmN0aW9uIHByb2Nlc3NUaWxlKHRpbGUpIHtcbiAgICByZXR1cm4gX3RoaXMzLl9fbGltaXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9wdHMuY2FuY2VsZWQpIHJldHVybiBvcHRzLmNhbmNlbFRva2VuO1xuICAgICAgdmFyIHRpbGVPcHRzID0ge1xuICAgICAgICB3aWR0aDogdGlsZS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aWxlLmhlaWdodCxcbiAgICAgICAgdG9XaWR0aDogdGlsZS50b1dpZHRoLFxuICAgICAgICB0b0hlaWdodDogdGlsZS50b0hlaWdodCxcbiAgICAgICAgc2NhbGVYOiB0aWxlLnNjYWxlWCxcbiAgICAgICAgc2NhbGVZOiB0aWxlLnNjYWxlWSxcbiAgICAgICAgb2Zmc2V0WDogdGlsZS5vZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiB0aWxlLm9mZnNldFksXG4gICAgICAgIHF1YWxpdHk6IG9wdHMucXVhbGl0eSxcbiAgICAgICAgYWxwaGE6IG9wdHMuYWxwaGEsXG4gICAgICAgIHVuc2hhcnBBbW91bnQ6IG9wdHMudW5zaGFycEFtb3VudCxcbiAgICAgICAgdW5zaGFycFJhZGl1czogb3B0cy51bnNoYXJwUmFkaXVzLFxuICAgICAgICB1bnNoYXJwVGhyZXNob2xkOiBvcHRzLnVuc2hhcnBUaHJlc2hvbGRcbiAgICAgIH07XG5cbiAgICAgIF90aGlzMy5kZWJ1ZygnSW52b2tlIHJlc2l6ZSBtYXRoJyk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGlsZU9wdHMpLnRoZW4oZnVuY3Rpb24gKHRpbGVPcHRzKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMuX19leHRyYWN0VGlsZURhdGEodGlsZSwgZnJvbSwgb3B0cywgc3RhZ2VFbnYsIHRpbGVPcHRzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRpbGVPcHRzKSB7XG4gICAgICAgIF90aGlzMy5kZWJ1ZygnSW52b2tlIHJlc2l6ZSBtYXRoJyk7XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMy5fX2ludm9rZVJlc2l6ZSh0aWxlT3B0cywgb3B0cyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKG9wdHMuY2FuY2VsZWQpIHJldHVybiBvcHRzLmNhbmNlbFRva2VuO1xuICAgICAgICBzdGFnZUVudi5zcmNJbWFnZURhdGEgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXMzLl9fbGFuZFRpbGVEYXRhKHRpbGUsIHJlc3VsdCwgc3RhZ2VFbnYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIE5lZWQgdG8gbm9ybWFsaXplIGRhdGEgc291cmNlIGZpcnN0LiBJdCBjYW4gYmUgY2FudmFzIG9yIGltYWdlLlxuICAvLyBJZiBpbWFnZSAtIHRyeSB0byBkZWNvZGUgaW4gYmFja2dyb3VuZCBpZiBwb3NzaWJsZVxuXG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHN0YWdlRW52LnRvQ3R4ID0gdG8uZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgICBhbHBoYTogQm9vbGVhbihvcHRzLmFscGhhKVxuICAgIH0pO1xuICAgIGlmICh1dGlscy5pc0NhbnZhcyhmcm9tKSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAodXRpbHMuaXNJbWFnZUJpdG1hcChmcm9tKSkge1xuICAgICAgc3RhZ2VFbnYuc3JjSW1hZ2VCaXRtYXAgPSBmcm9tO1xuICAgICAgc3RhZ2VFbnYuaXNJbWFnZUJpdG1hcFJldXNlZCA9IHRydWU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNJbWFnZShmcm9tKSkge1xuICAgICAgLy8gdHJ5IGRvIGRlY29kZSBpbWFnZSBpbiBiYWNrZ3JvdW5kIGZvciBmYXN0ZXIgbmV4dCBvcGVyYXRpb25zO1xuICAgICAgLy8gaWYgd2UncmUgdXNpbmcgb2Zmc2NyZWVuIGNhbnZhcywgY2liIGlzIGNhbGxlZCBwZXIgdGlsZSwgc28gbm90IG5lZWRlZCBoZXJlXG4gICAgICBpZiAoIUNBTl9DUkVBVEVfSU1BR0VfQklUTUFQKSByZXR1cm4gbnVsbDtcblxuICAgICAgX3RoaXMzLmRlYnVnKCdEZWNvZGUgaW1hZ2UgdmlhIGNyZWF0ZUltYWdlQml0bWFwJyk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcChmcm9tKS50aGVuKGZ1bmN0aW9uIChpbWFnZUJpdG1hcCkge1xuICAgICAgICBzdGFnZUVudi5zcmNJbWFnZUJpdG1hcCA9IGltYWdlQml0bWFwO1xuICAgICAgfSkgLy8gU3VwcHJlc3MgZXJyb3IgdG8gdXNlIGZhbGxiYWNrLCBpZiBtZXRob2QgZmFpbHNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYS9pc3N1ZXMvMTkwXG5cbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgICBbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignUGljYTogXCIuZnJvbVwiIHNob3VsZCBiZSBJbWFnZSwgQ2FudmFzIG9yIEltYWdlQml0bWFwJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjtcblxuICAgIF90aGlzMy5kZWJ1ZygnQ2FsY3VsYXRlIHRpbGVzJyk7IC8vXG4gICAgLy8gSGVyZSB3ZSBhcmUgd2l0aCBcIm5vcm1hbGl6ZWRcIiBzb3VyY2UsXG4gICAgLy8gZm9sbG93IHRvIHRpbGluZ1xuICAgIC8vXG5cblxuICAgIHZhciByZWdpb25zID0gY3JlYXRlUmVnaW9ucyh7XG4gICAgICB3aWR0aDogb3B0cy53aWR0aCxcbiAgICAgIGhlaWdodDogb3B0cy5oZWlnaHQsXG4gICAgICBzcmNUaWxlU2l6ZTogX3RoaXMzLm9wdGlvbnMudGlsZSxcbiAgICAgIHRvV2lkdGg6IG9wdHMudG9XaWR0aCxcbiAgICAgIHRvSGVpZ2h0OiBvcHRzLnRvSGVpZ2h0LFxuICAgICAgZGVzdFRpbGVCb3JkZXI6IG9wdHMuX19kZXN0VGlsZUJvcmRlclxuICAgIH0pO1xuICAgIHZhciBqb2JzID0gcmVnaW9ucy5tYXAoZnVuY3Rpb24gKHRpbGUpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzVGlsZSh0aWxlKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGNsZWFudXAoc3RhZ2VFbnYpIHtcbiAgICAgIGlmIChzdGFnZUVudi5zcmNJbWFnZUJpdG1hcCkge1xuICAgICAgICBpZiAoIXN0YWdlRW52LmlzSW1hZ2VCaXRtYXBSZXVzZWQpIHN0YWdlRW52LnNyY0ltYWdlQml0bWFwLmNsb3NlKCk7XG4gICAgICAgIHN0YWdlRW52LnNyY0ltYWdlQml0bWFwID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpczMuZGVidWcoJ1Byb2Nlc3MgdGlsZXMnKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChqb2JzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5kZWJ1ZygnRmluaXNoZWQhJyk7XG5cbiAgICAgIGNsZWFudXAoc3RhZ2VFbnYpO1xuICAgICAgcmV0dXJuIHRvO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGNsZWFudXAoc3RhZ2VFbnYpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9KTtcbn07XG5cblBpY2EucHJvdG90eXBlLl9fcHJvY2Vzc1N0YWdlcyA9IGZ1bmN0aW9uIChzdGFnZXMsIGZyb20sIHRvLCBvcHRzKSB7XG4gIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjtcblxuICB2YXIgX3N0YWdlcyRzaGlmdCA9IHN0YWdlcy5zaGlmdCgpLFxuICAgICAgX3N0YWdlcyRzaGlmdDIgPSBfc2xpY2VkVG9BcnJheShfc3RhZ2VzJHNoaWZ0LCAyKSxcbiAgICAgIHRvV2lkdGggPSBfc3RhZ2VzJHNoaWZ0MlswXSxcbiAgICAgIHRvSGVpZ2h0ID0gX3N0YWdlcyRzaGlmdDJbMV07XG5cbiAgdmFyIGlzTGFzdFN0YWdlID0gc3RhZ2VzLmxlbmd0aCA9PT0gMDtcbiAgb3B0cyA9IGFzc2lnbih7fSwgb3B0cywge1xuICAgIHRvV2lkdGg6IHRvV2lkdGgsXG4gICAgdG9IZWlnaHQ6IHRvSGVpZ2h0LFxuICAgIC8vIG9ubHkgdXNlIHVzZXItZGVmaW5lZCBxdWFsaXR5IGZvciB0aGUgbGFzdCBzdGFnZSxcbiAgICAvLyB1c2Ugc2ltcGxlciAoSGFtbWluZykgZmlsdGVyIGZvciB0aGUgZmlyc3Qgc3RhZ2VzIHdoZXJlXG4gICAgLy8gc2NhbGUgZmFjdG9yIGlzIGxhcmdlIGVub3VnaCAobW9yZSB0aGFuIDItMylcbiAgICBxdWFsaXR5OiBpc0xhc3RTdGFnZSA/IG9wdHMucXVhbGl0eSA6IE1hdGgubWluKDEsIG9wdHMucXVhbGl0eSlcbiAgfSk7XG4gIHZhciB0bXBDYW52YXM7XG5cbiAgaWYgKCFpc0xhc3RTdGFnZSkge1xuICAgIC8vIGNyZWF0ZSB0ZW1wb3JhcnkgY2FudmFzXG4gICAgdG1wQ2FudmFzID0gdGhpcy5vcHRpb25zLmNyZWF0ZUNhbnZhcyh0b1dpZHRoLCB0b0hlaWdodCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fX3RpbGVBbmRSZXNpemUoZnJvbSwgaXNMYXN0U3RhZ2UgPyB0byA6IHRtcENhbnZhcywgb3B0cykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzTGFzdFN0YWdlKSByZXR1cm4gdG87XG4gICAgb3B0cy53aWR0aCA9IHRvV2lkdGg7XG4gICAgb3B0cy5oZWlnaHQgPSB0b0hlaWdodDtcbiAgICByZXR1cm4gX3RoaXM0Ll9fcHJvY2Vzc1N0YWdlcyhzdGFnZXMsIHRtcENhbnZhcywgdG8sIG9wdHMpO1xuICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICBpZiAodG1wQ2FudmFzKSB7XG4gICAgICAvLyBTYWZhcmkgMTIgd29ya2Fyb3VuZFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9waWNhL2lzc3Vlcy8xOTlcbiAgICAgIHRtcENhbnZhcy53aWR0aCA9IHRtcENhbnZhcy5oZWlnaHQgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH0pO1xufTtcblxuUGljYS5wcm90b3R5cGUuX19yZXNpemVWaWFDcmVhdGVJbWFnZUJpdG1hcCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgb3B0cykge1xuICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICB2YXIgdG9DdHggPSB0by5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICBhbHBoYTogQm9vbGVhbihvcHRzLmFscGhhKVxuICB9KTtcbiAgdGhpcy5kZWJ1ZygnUmVzaXplIHZpYSBjcmVhdGVJbWFnZUJpdG1hcCgpJyk7XG4gIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcChmcm9tLCB7XG4gICAgcmVzaXplV2lkdGg6IG9wdHMudG9XaWR0aCxcbiAgICByZXNpemVIZWlnaHQ6IG9wdHMudG9IZWlnaHQsXG4gICAgcmVzaXplUXVhbGl0eTogdXRpbHMuY2liX3F1YWxpdHlfbmFtZShvcHRzLnF1YWxpdHkpXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGltYWdlQml0bWFwKSB7XG4gICAgaWYgKG9wdHMuY2FuY2VsZWQpIHJldHVybiBvcHRzLmNhbmNlbFRva2VuOyAvLyBpZiBubyB1bnNoYXJwIC0gZHJhdyBkaXJlY3RseSB0byBvdXRwdXQgY2FudmFzXG5cbiAgICBpZiAoIW9wdHMudW5zaGFycEFtb3VudCkge1xuICAgICAgdG9DdHguZHJhd0ltYWdlKGltYWdlQml0bWFwLCAwLCAwKTtcbiAgICAgIGltYWdlQml0bWFwLmNsb3NlKCk7XG4gICAgICB0b0N0eCA9IG51bGw7XG5cbiAgICAgIF90aGlzNS5kZWJ1ZygnRmluaXNoZWQhJyk7XG5cbiAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICBfdGhpczUuZGVidWcoJ1Vuc2hhcnAgcmVzdWx0Jyk7XG5cbiAgICB2YXIgdG1wQ2FudmFzID0gX3RoaXM1Lm9wdGlvbnMuY3JlYXRlQ2FudmFzKG9wdHMudG9XaWR0aCwgb3B0cy50b0hlaWdodCk7XG5cbiAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgICAgYWxwaGE6IEJvb2xlYW4ob3B0cy5hbHBoYSlcbiAgICB9KTtcbiAgICB0bXBDdHguZHJhd0ltYWdlKGltYWdlQml0bWFwLCAwLCAwKTtcbiAgICBpbWFnZUJpdG1hcC5jbG9zZSgpO1xuICAgIHZhciBpRGF0YSA9IHRtcEN0eC5nZXRJbWFnZURhdGEoMCwgMCwgb3B0cy50b1dpZHRoLCBvcHRzLnRvSGVpZ2h0KTtcblxuICAgIF90aGlzNS5fX21hdGhsaWIudW5zaGFycF9tYXNrKGlEYXRhLmRhdGEsIG9wdHMudG9XaWR0aCwgb3B0cy50b0hlaWdodCwgb3B0cy51bnNoYXJwQW1vdW50LCBvcHRzLnVuc2hhcnBSYWRpdXMsIG9wdHMudW5zaGFycFRocmVzaG9sZCk7XG5cbiAgICB0b0N0eC5wdXRJbWFnZURhdGEoaURhdGEsIDAsIDApOyAvLyBTYWZhcmkgMTIgd29ya2Fyb3VuZFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYS9pc3N1ZXMvMTk5XG5cbiAgICB0bXBDYW52YXMud2lkdGggPSB0bXBDYW52YXMuaGVpZ2h0ID0gMDtcbiAgICBpRGF0YSA9IHRtcEN0eCA9IHRtcENhbnZhcyA9IHRvQ3R4ID0gbnVsbDtcblxuICAgIF90aGlzNS5kZWJ1ZygnRmluaXNoZWQhJyk7XG5cbiAgICByZXR1cm4gdG87XG4gIH0pO1xufTtcblxuUGljYS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKGZyb20sIHRvLCBvcHRpb25zKSB7XG4gIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gIHRoaXMuZGVidWcoJ1N0YXJ0IHJlc2l6ZS4uLicpO1xuICB2YXIgb3B0cyA9IGFzc2lnbih7fSwgREVGQVVMVF9SRVNJWkVfT1BUUyk7XG5cbiAgaWYgKCFpc05hTihvcHRpb25zKSkge1xuICAgIG9wdHMgPSBhc3NpZ24ob3B0cywge1xuICAgICAgcXVhbGl0eTogb3B0aW9uc1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRzID0gYXNzaWduKG9wdHMsIG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0cy50b1dpZHRoID0gdG8ud2lkdGg7XG4gIG9wdHMudG9IZWlnaHQgPSB0by5oZWlnaHQ7XG4gIG9wdHMud2lkdGggPSBmcm9tLm5hdHVyYWxXaWR0aCB8fCBmcm9tLndpZHRoO1xuICBvcHRzLmhlaWdodCA9IGZyb20ubmF0dXJhbEhlaWdodCB8fCBmcm9tLmhlaWdodDsgLy8gUHJldmVudCBzdGVwcGVyIGZyb20gaW5maW5pdGUgbG9vcFxuXG4gIGlmICh0by53aWR0aCA9PT0gMCB8fCB0by5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBvdXRwdXQgc2l6ZTogXCIuY29uY2F0KHRvLndpZHRoLCBcInhcIikuY29uY2F0KHRvLmhlaWdodCkpKTtcbiAgfVxuXG4gIGlmIChvcHRzLnVuc2hhcnBSYWRpdXMgPiAyKSBvcHRzLnVuc2hhcnBSYWRpdXMgPSAyO1xuICBvcHRzLmNhbmNlbGVkID0gZmFsc2U7XG5cbiAgaWYgKG9wdHMuY2FuY2VsVG9rZW4pIHtcbiAgICAvLyBXcmFwIGNhbmNlbFRva2VuIHRvIGF2b2lkIHN1Y2Nlc3NpdmUgcmVzb2x2ZSAmIHNldCBmbGFnXG4gICAgb3B0cy5jYW5jZWxUb2tlbiA9IG9wdHMuY2FuY2VsVG9rZW4udGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgb3B0cy5jYW5jZWxlZCA9IHRydWU7XG4gICAgICB0aHJvdyBkYXRhO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIG9wdHMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIERFU1RfVElMRV9CT1JERVIgPSAzOyAvLyBNYXggcG9zc2libGUgZmlsdGVyIHdpbmRvdyBzaXplXG5cbiAgb3B0cy5fX2Rlc3RUaWxlQm9yZGVyID0gTWF0aC5jZWlsKE1hdGgubWF4KERFU1RfVElMRV9CT1JERVIsIDIuNSAqIG9wdHMudW5zaGFycFJhZGl1cyB8IDApKTtcbiAgcmV0dXJuIHRoaXMuaW5pdCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjsgLy8gaWYgY3JlYXRlSW1hZ2VCaXRtYXAgc3VwcG9ydHMgcmVzaXplLCBqdXN0IGRvIGl0IGFuZCByZXR1cm5cblxuICAgIGlmIChfdGhpczYuZmVhdHVyZXMuY2liKSB7XG4gICAgICByZXR1cm4gX3RoaXM2Ll9fcmVzaXplVmlhQ3JlYXRlSW1hZ2VCaXRtYXAoZnJvbSwgdG8sIG9wdHMpO1xuICAgIH1cblxuICAgIGlmICghQ0FOX1VTRV9DQU5WQVNfR0VUX0lNQUdFX0RBVEEpIHtcbiAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1BpY2E6IGNhbm5vdCB1c2UgZ2V0SW1hZ2VEYXRhIG9uIGNhbnZhcywgJyArIFwibWFrZSBzdXJlIGZpbmdlcnByaW50aW5nIHByb3RlY3Rpb24gaXNuJ3QgZW5hYmxlZFwiKTtcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9HRVRfSU1BR0VfREFUQSc7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSAvL1xuICAgIC8vIE5vIGVhc3kgd2F5LCBsZXQncyByZXNpemUgbWFudWFsbHkgdmlhIGFycmF5c1xuICAgIC8vXG5cblxuICAgIHZhciBzdGFnZXMgPSBjcmVhdGVTdGFnZXMob3B0cy53aWR0aCwgb3B0cy5oZWlnaHQsIG9wdHMudG9XaWR0aCwgb3B0cy50b0hlaWdodCwgX3RoaXM2Lm9wdGlvbnMudGlsZSwgb3B0cy5fX2Rlc3RUaWxlQm9yZGVyKTtcbiAgICByZXR1cm4gX3RoaXM2Ll9fcHJvY2Vzc1N0YWdlcyhzdGFnZXMsIGZyb20sIHRvLCBvcHRzKTtcbiAgfSk7XG59OyAvLyBSR0JBIGJ1ZmZlciByZXNpemVcbi8vXG5cblxuUGljYS5wcm90b3R5cGUucmVzaXplQnVmZmVyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgdmFyIG9wdHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUkVTSVpFX09QVFMsIG9wdGlvbnMpO1xuICByZXR1cm4gdGhpcy5pbml0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90aGlzNy5fX21hdGhsaWIucmVzaXplQW5kVW5zaGFycChvcHRzKTtcbiAgfSk7XG59O1xuXG5QaWNhLnByb3RvdHlwZS50b0Jsb2IgPSBmdW5jdGlvbiAoY2FudmFzLCBtaW1lVHlwZSwgcXVhbGl0eSkge1xuICBtaW1lVHlwZSA9IG1pbWVUeXBlIHx8ICdpbWFnZS9wbmcnO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBpZiAoY2FudmFzLnRvQmxvYikge1xuICAgICAgY2FudmFzLnRvQmxvYihmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShibG9iKTtcbiAgICAgIH0sIG1pbWVUeXBlLCBxdWFsaXR5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FudmFzLmNvbnZlcnRUb0Jsb2IpIHtcbiAgICAgIHJlc29sdmUoY2FudmFzLmNvbnZlcnRUb0Jsb2Ioe1xuICAgICAgICB0eXBlOiBtaW1lVHlwZSxcbiAgICAgICAgcXVhbGl0eTogcXVhbGl0eVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmFsbGJhY2sgZm9yIG9sZCBicm93c2Vyc1xuXG5cbiAgICB2YXIgYXNTdHJpbmcgPSBhdG9iKGNhbnZhcy50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHkpLnNwbGl0KCcsJylbMV0pO1xuICAgIHZhciBsZW4gPSBhc1N0cmluZy5sZW5ndGg7XG4gICAgdmFyIGFzQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFzQnVmZmVyW2ldID0gYXNTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKG5ldyBCbG9iKFthc0J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IG1pbWVUeXBlXG4gICAgfSkpO1xuICB9KTtcbn07XG5cblBpY2EucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24gKCkge307XG5cbm1vZHVsZS5leHBvcnRzID0gUGljYTtcblxufSx7XCIuL2xpYi9tYXRobGliXCI6MSxcIi4vbGliL3Bvb2xcIjoxMyxcIi4vbGliL3N0ZXBwZXJcIjoxNCxcIi4vbGliL3RpbGVyXCI6MTUsXCIuL2xpYi91dGlsc1wiOjE2LFwiLi9saWIvd29ya2VyXCI6MTcsXCJvYmplY3QtYXNzaWduXCI6MjMsXCJ3ZWJ3b3JraWZ5XCI6MjR9XX0se30sW10pKFwiL2luZGV4LmpzXCIpXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/pica/dist/pica.js\n"); /***/ }), /***/ "../../../node_modules/ts-dedent/esm/index.js": /*!****************************************************!*\ !*** ../../../node_modules/ts-dedent/esm/index.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dedent\": () => (/* binding */ dedent),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction dedent(templ) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n var strings = Array.from(typeof templ === 'string' ? [templ] : templ);\n strings[strings.length - 1] = strings[strings.length - 1].replace(/\\r?\\n([\\t ]*)$/, '');\n var indentLengths = strings.reduce(function (arr, str) {\n var matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n if (matches) {\n return arr.concat(matches.map(function (match) { var _a, _b; return (_b = (_a = match.match(/[\\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }));\n }\n return arr;\n }, []);\n if (indentLengths.length) {\n var pattern_1 = new RegExp(\"\\n[\\t ]{\" + Math.min.apply(Math, indentLengths) + \"}\", 'g');\n strings = strings.map(function (str) { return str.replace(pattern_1, '\\n'); });\n }\n strings[0] = strings[0].replace(/^\\r?\\n/, '');\n var string = strings[0];\n values.forEach(function (value, i) {\n var endentations = string.match(/(?:^|\\n)( *)$/);\n var endentation = endentations ? endentations[1] : '';\n var indentedValue = value;\n if (typeof value === 'string' && value.includes('\\n')) {\n indentedValue = String(value)\n .split('\\n')\n .map(function (str, i) {\n return i === 0 ? str : \"\" + endentation + str;\n })\n .join('\\n');\n }\n string += indentedValue + strings[i + 1];\n });\n return string;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dedent);\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWRlZGVudC9lc20vaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxZQUFZLCtIQUErSDtBQUN4TTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNENBQTRDLDRDQUE0QztBQUN4RiwrQ0FBK0Msc0NBQXNDO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGlFQUFlLE1BQU0sRUFBQztBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtZGVkZW50L2VzbS9pbmRleC5qcz9kMGI1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWRlbnQodGVtcGwpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFsdWVzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc3RyaW5ncyA9IEFycmF5LmZyb20odHlwZW9mIHRlbXBsID09PSAnc3RyaW5nJyA/IFt0ZW1wbF0gOiB0ZW1wbCk7XG4gICAgc3RyaW5nc1tzdHJpbmdzLmxlbmd0aCAtIDFdID0gc3RyaW5nc1tzdHJpbmdzLmxlbmd0aCAtIDFdLnJlcGxhY2UoL1xccj9cXG4oW1xcdCBdKikkLywgJycpO1xuICAgIHZhciBpbmRlbnRMZW5ndGhzID0gc3RyaW5ncy5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgc3RyKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKC9cXG4oW1xcdCBdK3woPyFcXHMpLikvZyk7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyLmNvbmNhdChtYXRjaGVzLm1hcChmdW5jdGlvbiAobWF0Y2gpIHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IG1hdGNoLm1hdGNoKC9bXFx0IF0vZykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7IH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICBpZiAoaW5kZW50TGVuZ3Rocy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhdHRlcm5fMSA9IG5ldyBSZWdFeHAoXCJcXG5bXFx0IF17XCIgKyBNYXRoLm1pbi5hcHBseShNYXRoLCBpbmRlbnRMZW5ndGhzKSArIFwifVwiLCAnZycpO1xuICAgICAgICBzdHJpbmdzID0gc3RyaW5ncy5tYXAoZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybl8xLCAnXFxuJyk7IH0pO1xuICAgIH1cbiAgICBzdHJpbmdzWzBdID0gc3RyaW5nc1swXS5yZXBsYWNlKC9eXFxyP1xcbi8sICcnKTtcbiAgICB2YXIgc3RyaW5nID0gc3RyaW5nc1swXTtcbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgdmFyIGVuZGVudGF0aW9ucyA9IHN0cmluZy5tYXRjaCgvKD86XnxcXG4pKCAqKSQvKTtcbiAgICAgICAgdmFyIGVuZGVudGF0aW9uID0gZW5kZW50YXRpb25zID8gZW5kZW50YXRpb25zWzFdIDogJyc7XG4gICAgICAgIHZhciBpbmRlbnRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICAgICAgaW5kZW50ZWRWYWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoc3RyLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IDAgPyBzdHIgOiBcIlwiICsgZW5kZW50YXRpb24gKyBzdHI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJpbmcgKz0gaW5kZW50ZWRWYWx1ZSArIHN0cmluZ3NbaSArIDFdO1xuICAgIH0pO1xuICAgIHJldHVybiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBkZWRlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/ts-dedent/esm/index.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/parse.js": /*!************************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/parse.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ \"../../../node_modules/uuid/dist/esm-browser/validate.js\");\n\n\nfunction parse(uuid) {\n if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9wYXJzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckM7QUFDQSxPQUFPLHdEQUFRO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsS0FBSyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3BhcnNlLmpzP2RiYjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgbGV0IHY7XG4gIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gUGFyc2UgIyMjIyMjIyMtLi4uLi0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLSMjIyMtLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLSMjIyMtLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0jIyMjLS4uLi4uLi4uLi4uLlxuXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLS4uLi4tIyMjIyMjIyMjIyMjXG4gIC8vIChVc2UgXCIvXCIgdG8gYXZvaWQgMzItYml0IHRydW5jYXRpb24gd2hlbiBiaXQtc2hpZnRpbmcgaGlnaC1vcmRlciBieXRlcylcblxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/parse.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/regex.js": /*!************************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/regex.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxHQUFHLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JlZ2V4LmpzPzI0OWYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/regex.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/sha1.js": /*!***********************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/sha1.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; 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// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (sha1);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zaGExLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxREFBcUQ7O0FBRXJEOztBQUVBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7O0FBRUEsb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsT0FBTztBQUN6Qjs7QUFFQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBOztBQUVBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlFQUFlLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zaGExLmpzPzVkMmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQWRhcHRlZCBmcm9tIENocmlzIFZlbmVzcycgU0hBMSBjb2RlIGF0XG4vLyBodHRwOi8vd3d3Lm1vdmFibGUtdHlwZS5jby51ay9zY3JpcHRzL3NoYTEuaHRtbFxuZnVuY3Rpb24gZihzLCB4LCB5LCB6KSB7XG4gIHN3aXRjaCAocykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB4ICYgeSBeIH54ICYgejtcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4geCAmIHkgXiB4ICYgeiBeIHkgJiB6O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcbiAgfVxufVxuXG5mdW5jdGlvbiBST1RMKHgsIG4pIHtcbiAgcmV0dXJuIHggPDwgbiB8IHggPj4+IDMyIC0gbjtcbn1cblxuZnVuY3Rpb24gc2hhMShieXRlcykge1xuICBjb25zdCBLID0gWzB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDZdO1xuICBjb25zdCBIID0gWzB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjBdO1xuXG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbXNnID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJ5dGVzKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgICBieXRlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ5dGVzLnB1c2gobXNnLmNoYXJDb2RlQXQoaSkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICAvLyBDb252ZXJ0IEFycmF5LWxpa2UgdG8gQXJyYXlcbiAgICBieXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzKTtcbiAgfVxuXG4gIGJ5dGVzLnB1c2goMHg4MCk7XG4gIGNvbnN0IGwgPSBieXRlcy5sZW5ndGggLyA0ICsgMjtcbiAgY29uc3QgTiA9IE1hdGguY2VpbChsIC8gMTYpO1xuICBjb25zdCBNID0gbmV3IEFycmF5KE4pO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQzMkFycmF5KDE2KTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgYXJyW2pdID0gYnl0ZXNbaSAqIDY0ICsgaiAqIDRdIDw8IDI0IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAxXSA8PCAxNiB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMl0gPDwgOCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgfVxuXG4gICAgTVtpXSA9IGFycjtcbiAgfVxuXG4gIE1bTiAtIDFdWzE0XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggLyBNYXRoLnBvdygyLCAzMik7XG4gIE1bTiAtIDFdWzE0XSA9IE1hdGguZmxvb3IoTVtOIC0gMV1bMTRdKTtcbiAgTVtOIC0gMV1bMTVdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAmIDB4ZmZmZmZmZmY7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBXID0gbmV3IFVpbnQzMkFycmF5KDgwKTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMTY7ICsrdCkge1xuICAgICAgV1t0XSA9IE1baV1bdF07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdCA9IDE2OyB0IDwgODA7ICsrdCkge1xuICAgICAgV1t0XSA9IFJPVEwoV1t0IC0gM10gXiBXW3QgLSA4XSBeIFdbdCAtIDE0XSBeIFdbdCAtIDE2XSwgMSk7XG4gICAgfVxuXG4gICAgbGV0IGEgPSBIWzBdO1xuICAgIGxldCBiID0gSFsxXTtcbiAgICBsZXQgYyA9IEhbMl07XG4gICAgbGV0IGQgPSBIWzNdO1xuICAgIGxldCBlID0gSFs0XTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgODA7ICsrdCkge1xuICAgICAgY29uc3QgcyA9IE1hdGguZmxvb3IodCAvIDIwKTtcbiAgICAgIGNvbnN0IFQgPSBST1RMKGEsIDUpICsgZihzLCBiLCBjLCBkKSArIGUgKyBLW3NdICsgV1t0XSA+Pj4gMDtcbiAgICAgIGUgPSBkO1xuICAgICAgZCA9IGM7XG4gICAgICBjID0gUk9UTChiLCAzMCkgPj4+IDA7XG4gICAgICBiID0gYTtcbiAgICAgIGEgPSBUO1xuICAgIH1cblxuICAgIEhbMF0gPSBIWzBdICsgYSA+Pj4gMDtcbiAgICBIWzFdID0gSFsxXSArIGIgPj4+IDA7XG4gICAgSFsyXSA9IEhbMl0gKyBjID4+PiAwO1xuICAgIEhbM10gPSBIWzNdICsgZCA+Pj4gMDtcbiAgICBIWzRdID0gSFs0XSArIGUgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gW0hbMF0gPj4gMjQgJiAweGZmLCBIWzBdID4+IDE2ICYgMHhmZiwgSFswXSA+PiA4ICYgMHhmZiwgSFswXSAmIDB4ZmYsIEhbMV0gPj4gMjQgJiAweGZmLCBIWzFdID4+IDE2ICYgMHhmZiwgSFsxXSA+PiA4ICYgMHhmZiwgSFsxXSAmIDB4ZmYsIEhbMl0gPj4gMjQgJiAweGZmLCBIWzJdID4+IDE2ICYgMHhmZiwgSFsyXSA+PiA4ICYgMHhmZiwgSFsyXSAmIDB4ZmYsIEhbM10gPj4gMjQgJiAweGZmLCBIWzNdID4+IDE2ICYgMHhmZiwgSFszXSA+PiA4ICYgMHhmZiwgSFszXSAmIDB4ZmYsIEhbNF0gPj4gMjQgJiAweGZmLCBIWzRdID4+IDE2ICYgMHhmZiwgSFs0XSA+PiA4ICYgMHhmZiwgSFs0XSAmIDB4ZmZdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaGExOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/sha1.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/stringify.js": /*!****************************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/stringify.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"unsafeStringify\": () => (/* binding */ unsafeStringify)\n/* harmony export */ });\n/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ \"../../../node_modules/uuid/dist/esm-browser/validate.js\");\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stringify);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPLHdEQUFRO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlFQUFlLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanM/NjlhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/stringify.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/v35.js": /*!**********************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/v35.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DNS\": () => (/* binding */ DNS),\n/* harmony export */ \"URL\": () => (/* binding */ URL),\n/* harmony export */ \"default\": () => (/* binding */ v35)\n/* harmony export */ });\n/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stringify.js */ \"../../../node_modules/uuid/dist/esm-browser/stringify.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parse.js */ \"../../../node_modules/uuid/dist/esm-browser/parse.js\");\n\n\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0,_parse_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__.unsafeStringify)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92MzUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBaUQ7QUFDbEI7O0FBRS9CO0FBQ0EsMkNBQTJDOztBQUUzQzs7QUFFQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNBO0FBQ1E7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixxREFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQixRQUFRO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxXQUFXLDhEQUFlO0FBQzFCLElBQUk7OztBQUdKO0FBQ0EsOEJBQThCO0FBQzlCLElBQUksZUFBZTs7O0FBR25CO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjM1LmpzP2VhYzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuaW1wb3J0IHBhcnNlIGZyb20gJy4vcGFyc2UuanMnO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5leHBvcnQgY29uc3QgRE5TID0gJzZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9IHBhcnNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zYWZlU3RyaW5naWZ5KGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/v35.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/v5.js": /*!*********************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/v5.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _v35_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./v35.js */ \"../../../node_modules/uuid/dist/esm-browser/v35.js\");\n/* harmony import */ var _sha1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sha1.js */ \"../../../node_modules/uuid/dist/esm-browser/sha1.js\");\n\n\nconst v5 = (0,_v35_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('v5', 0x50, _sha1_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v5);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMkI7QUFDRTtBQUM3QixXQUFXLG1EQUFHLGFBQWEsZ0RBQUk7QUFDL0IsaUVBQWUsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y1LmpzPzcyZGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHYzNSBmcm9tICcuL3YzNS5qcyc7XG5pbXBvcnQgc2hhMSBmcm9tICcuL3NoYTEuanMnO1xuY29uc3QgdjUgPSB2MzUoJ3Y1JywgMHg1MCwgc2hhMSk7XG5leHBvcnQgZGVmYXVsdCB2NTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/v5.js\n"); /***/ }), /***/ "../../../node_modules/uuid/dist/esm-browser/validate.js": /*!***************************************************************!*\ !*** ../../../node_modules/uuid/dist/esm-browser/validate.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _regex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./regex.js */ \"../../../node_modules/uuid/dist/esm-browser/regex.js\");\n\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].test(uuid);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (validate);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92YWxpZGF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQjs7QUFFL0I7QUFDQSxxQ0FBcUMsc0RBQVU7QUFDL0M7O0FBRUEsaUVBQWUsUUFBUSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZhbGlkYXRlLmpzPzllMTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/uuid/dist/esm-browser/validate.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js": /*!*********************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DEFAULT_FONT_SIZE\": () => (/* binding */ DEFAULT_FONT_SIZE),\n/* harmony export */ \"SVG_TO_SHAPE_MAPPER\": () => (/* binding */ SVG_TO_SHAPE_MAPPER)\n/* harmony export */ });\nconst DEFAULT_FONT_SIZE = 20;\nconst SVG_TO_SHAPE_MAPPER = {\n rect: \"rectangle\",\n circle: \"ellipse\",\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnN0YW50cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ0E7QUFDUDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnN0YW50cy5qcz8zNTYzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDIwO1xuZXhwb3J0IGNvbnN0IFNWR19UT19TSEFQRV9NQVBQRVIgPSB7XG4gICAgcmVjdDogXCJyZWN0YW5nbGVcIixcbiAgICBjaXJjbGU6IFwiZWxsaXBzZVwiLFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js": /*!************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js ***! \************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"GraphConverter\": () => (/* binding */ GraphConverter)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n\nclass GraphConverter {\n constructor({ converter, }) {\n this.convert = (graph, options) => {\n return this.converter(graph, {\n ...options,\n fontSize: options.fontSize || _constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE,\n });\n };\n this.converter = converter;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci9HcmFwaENvbnZlcnRlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvRDtBQUM3QztBQUNQLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyw0REFBaUI7QUFDL0QsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXhjYWxpZHJhdy9tZXJtYWlkLXRvLWV4Y2FsaWRyYXcvZGlzdC9jb252ZXJ0ZXIvR3JhcGhDb252ZXJ0ZXIuanM/NGI3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmV4cG9ydCBjbGFzcyBHcmFwaENvbnZlcnRlciB7XG4gICAgY29uc3RydWN0b3IoeyBjb252ZXJ0ZXIsIH0pIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ID0gKGdyYXBoLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZXIoZ3JhcGgsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBvcHRpb25zLmZvbnRTaXplIHx8IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udmVydGVyID0gY29udmVydGVyO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/helpers.js": /*!*****************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/helpers.js ***! \*****************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"computeExcalidrawArrowType\": () => (/* binding */ computeExcalidrawArrowType),\n/* harmony export */ \"computeExcalidrawVertexLabelStyle\": () => (/* binding */ computeExcalidrawVertexLabelStyle),\n/* harmony export */ \"computeExcalidrawVertexStyle\": () => (/* binding */ computeExcalidrawVertexStyle),\n/* harmony export */ \"getText\": () => (/* binding */ getText)\n/* harmony export */ });\n/* harmony import */ var _interfaces_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interfaces.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/interfaces.js\");\n/* harmony import */ var _excalidraw_markdown_to_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @excalidraw/markdown-to-text */ \"../../../node_modules/@excalidraw/markdown-to-text/dist/index.js\");\n\n\n/**\n * Convert mermaid edge type to Excalidraw arrow type\n */\nconst MERMAID_EDGE_TYPE_MAPPER = {\n arrow_circle: {\n endArrowhead: \"dot\",\n },\n arrow_cross: {\n endArrowhead: \"bar\",\n },\n double_arrow_circle: {\n endArrowhead: \"dot\",\n startArrowhead: \"dot\",\n },\n double_arrow_cross: {\n endArrowhead: \"bar\",\n startArrowhead: \"bar\",\n },\n double_arrow_point: {\n endArrowhead: \"arrow\",\n startArrowhead: \"arrow\",\n },\n};\nconst computeExcalidrawArrowType = (mermaidArrowType) => {\n return MERMAID_EDGE_TYPE_MAPPER[mermaidArrowType];\n};\n// Get text from graph elements, fallback markdown to text\nconst getText = (element) => {\n let text = element.text;\n if (element.labelType === \"markdown\") {\n text = (0,_excalidraw_markdown_to_text__WEBPACK_IMPORTED_MODULE_1__.removeMarkdown)(element.text);\n }\n return removeFontAwesomeIcons(text);\n};\n/**\n * Remove font awesome icons support from text\n */\nconst removeFontAwesomeIcons = (input) => {\n const fontAwesomeRegex = /\\s?(fa|fab):[a-zA-Z0-9-]+/g;\n return input.replace(fontAwesomeRegex, \"\");\n};\n/**\n * Compute style for vertex\n */\nconst computeExcalidrawVertexStyle = (style) => {\n const excalidrawProperty = {};\n Object.keys(style).forEach((property) => {\n switch (property) {\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_0__.CONTAINER_STYLE_PROPERTY.FILL: {\n excalidrawProperty.backgroundColor = style[property];\n excalidrawProperty.fillStyle = \"solid\";\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_0__.CONTAINER_STYLE_PROPERTY.STROKE: {\n excalidrawProperty.strokeColor = style[property];\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_0__.CONTAINER_STYLE_PROPERTY.STROKE_WIDTH: {\n excalidrawProperty.strokeWidth = Number(style[property]?.split(\"px\")[0]);\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_0__.CONTAINER_STYLE_PROPERTY.STROKE_DASHARRAY: {\n excalidrawProperty.strokeStyle = \"dashed\";\n break;\n }\n }\n });\n return excalidrawProperty;\n};\n/**\n * Compute style for label\n */\nconst computeExcalidrawVertexLabelStyle = (style) => {\n const excalidrawProperty = {};\n Object.keys(style).forEach((property) => {\n switch (property) {\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_0__.LABEL_STYLE_PROPERTY.COLOR: {\n excalidrawProperty.strokeColor = style[property];\n break;\n }\n }\n });\n return excalidrawProperty;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci9oZWxwZXJzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFtRjtBQUNyQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsZUFBZSw0RUFBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHlFQUE2QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyRUFBK0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlGQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIscUZBQXlDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzRUFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvY29udmVydGVyL2hlbHBlcnMuanM/MmVjZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT05UQUlORVJfU1RZTEVfUFJPUEVSVFksIExBQkVMX1NUWUxFX1BST1BFUlRZLCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVNYXJrZG93biB9IGZyb20gXCJAZXhjYWxpZHJhdy9tYXJrZG93bi10by10ZXh0XCI7XG4vKipcbiAqIENvbnZlcnQgbWVybWFpZCBlZGdlIHR5cGUgdG8gRXhjYWxpZHJhdyBhcnJvdyB0eXBlXG4gKi9cbmNvbnN0IE1FUk1BSURfRURHRV9UWVBFX01BUFBFUiA9IHtcbiAgICBhcnJvd19jaXJjbGU6IHtcbiAgICAgICAgZW5kQXJyb3doZWFkOiBcImRvdFwiLFxuICAgIH0sXG4gICAgYXJyb3dfY3Jvc3M6IHtcbiAgICAgICAgZW5kQXJyb3doZWFkOiBcImJhclwiLFxuICAgIH0sXG4gICAgZG91YmxlX2Fycm93X2NpcmNsZToge1xuICAgICAgICBlbmRBcnJvd2hlYWQ6IFwiZG90XCIsXG4gICAgICAgIHN0YXJ0QXJyb3doZWFkOiBcImRvdFwiLFxuICAgIH0sXG4gICAgZG91YmxlX2Fycm93X2Nyb3NzOiB7XG4gICAgICAgIGVuZEFycm93aGVhZDogXCJiYXJcIixcbiAgICAgICAgc3RhcnRBcnJvd2hlYWQ6IFwiYmFyXCIsXG4gICAgfSxcbiAgICBkb3VibGVfYXJyb3dfcG9pbnQ6IHtcbiAgICAgICAgZW5kQXJyb3doZWFkOiBcImFycm93XCIsXG4gICAgICAgIHN0YXJ0QXJyb3doZWFkOiBcImFycm93XCIsXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgY29tcHV0ZUV4Y2FsaWRyYXdBcnJvd1R5cGUgPSAobWVybWFpZEFycm93VHlwZSkgPT4ge1xuICAgIHJldHVybiBNRVJNQUlEX0VER0VfVFlQRV9NQVBQRVJbbWVybWFpZEFycm93VHlwZV07XG59O1xuLy8gR2V0IHRleHQgZnJvbSBncmFwaCBlbGVtZW50cywgZmFsbGJhY2sgbWFya2Rvd24gdG8gdGV4dFxuZXhwb3J0IGNvbnN0IGdldFRleHQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGxldCB0ZXh0ID0gZWxlbWVudC50ZXh0O1xuICAgIGlmIChlbGVtZW50LmxhYmVsVHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgIHRleHQgPSByZW1vdmVNYXJrZG93bihlbGVtZW50LnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVtb3ZlRm9udEF3ZXNvbWVJY29ucyh0ZXh0KTtcbn07XG4vKipcbiAqIFJlbW92ZSBmb250IGF3ZXNvbWUgaWNvbnMgc3VwcG9ydCBmcm9tIHRleHRcbiAqL1xuY29uc3QgcmVtb3ZlRm9udEF3ZXNvbWVJY29ucyA9IChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGZvbnRBd2Vzb21lUmVnZXggPSAvXFxzPyhmYXxmYWIpOlthLXpBLVowLTktXSsvZztcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZShmb250QXdlc29tZVJlZ2V4LCBcIlwiKTtcbn07XG4vKipcbiAqIENvbXB1dGUgc3R5bGUgZm9yIHZlcnRleFxuICovXG5leHBvcnQgY29uc3QgY29tcHV0ZUV4Y2FsaWRyYXdWZXJ0ZXhTdHlsZSA9IChzdHlsZSkgPT4ge1xuICAgIGNvbnN0IGV4Y2FsaWRyYXdQcm9wZXJ0eSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBjYXNlIENPTlRBSU5FUl9TVFlMRV9QUk9QRVJUWS5GSUxMOiB7XG4gICAgICAgICAgICAgICAgZXhjYWxpZHJhd1Byb3BlcnR5LmJhY2tncm91bmRDb2xvciA9IHN0eWxlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBleGNhbGlkcmF3UHJvcGVydHkuZmlsbFN0eWxlID0gXCJzb2xpZFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDT05UQUlORVJfU1RZTEVfUFJPUEVSVFkuU1RST0tFOiB7XG4gICAgICAgICAgICAgICAgZXhjYWxpZHJhd1Byb3BlcnR5LnN0cm9rZUNvbG9yID0gc3R5bGVbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDT05UQUlORVJfU1RZTEVfUFJPUEVSVFkuU1RST0tFX1dJRFRIOiB7XG4gICAgICAgICAgICAgICAgZXhjYWxpZHJhd1Byb3BlcnR5LnN0cm9rZVdpZHRoID0gTnVtYmVyKHN0eWxlW3Byb3BlcnR5XT8uc3BsaXQoXCJweFwiKVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENPTlRBSU5FUl9TVFlMRV9QUk9QRVJUWS5TVFJPS0VfREFTSEFSUkFZOiB7XG4gICAgICAgICAgICAgICAgZXhjYWxpZHJhd1Byb3BlcnR5LnN0cm9rZVN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBleGNhbGlkcmF3UHJvcGVydHk7XG59O1xuLyoqXG4gKiBDb21wdXRlIHN0eWxlIGZvciBsYWJlbFxuICovXG5leHBvcnQgY29uc3QgY29tcHV0ZUV4Y2FsaWRyYXdWZXJ0ZXhMYWJlbFN0eWxlID0gKHN0eWxlKSA9PiB7XG4gICAgY29uc3QgZXhjYWxpZHJhd1Byb3BlcnR5ID0ge307XG4gICAgT2JqZWN0LmtleXMoc3R5bGUpLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNhc2UgTEFCRUxfU1RZTEVfUFJPUEVSVFkuQ09MT1I6IHtcbiAgICAgICAgICAgICAgICBleGNhbGlkcmF3UHJvcGVydHkuc3Ryb2tlQ29sb3IgPSBzdHlsZVtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXhjYWxpZHJhd1Byb3BlcnR5O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/helpers.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/flowchart.js": /*!*************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/flowchart.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FlowchartToExcalidrawSkeletonConverter\": () => (/* binding */ FlowchartToExcalidrawSkeletonConverter)\n/* harmony export */ });\n/* harmony import */ var _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GraphConverter.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/helpers.js\");\n/* harmony import */ var _interfaces_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../interfaces.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/interfaces.js\");\n\n\n\nconst computeGroupIds = (graph) => {\n // Parse the diagram into a tree for rendering and grouping\n const tree = {};\n graph.subGraphs.map((subGraph) => {\n subGraph.nodeIds.forEach((nodeId) => {\n tree[subGraph.id] = {\n id: subGraph.id,\n parent: null,\n isLeaf: false,\n };\n tree[nodeId] = {\n id: nodeId,\n parent: subGraph.id,\n isLeaf: graph.vertices[nodeId] !== undefined,\n };\n });\n });\n const mapper = {};\n [...Object.keys(graph.vertices), ...graph.subGraphs.map((c) => c.id)].forEach((id) => {\n if (!tree[id]) {\n return;\n }\n let curr = tree[id];\n const groupIds = [];\n if (!curr.isLeaf) {\n groupIds.push(`subgraph_group_${curr.id}`);\n }\n while (true) {\n if (curr.parent) {\n groupIds.push(`subgraph_group_${curr.parent}`);\n curr = tree[curr.parent];\n }\n else {\n break;\n }\n }\n mapper[id] = groupIds;\n });\n return {\n getGroupIds: (elementId) => {\n return mapper[elementId] || [];\n },\n getParentId: (elementId) => {\n return tree[elementId] ? tree[elementId].parent : null;\n },\n };\n};\nconst FlowchartToExcalidrawSkeletonConverter = new _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__.GraphConverter({\n converter: (graph, options) => {\n const elements = [];\n const fontSize = options.fontSize;\n const { getGroupIds, getParentId } = computeGroupIds(graph);\n // SubGraphs\n graph.subGraphs.reverse().forEach((subGraph) => {\n const groupIds = getGroupIds(subGraph.id);\n const containerElement = {\n id: subGraph.id,\n type: \"rectangle\",\n groupIds,\n x: subGraph.x,\n y: subGraph.y,\n width: subGraph.width,\n height: subGraph.height,\n label: {\n groupIds,\n text: (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.getText)(subGraph),\n fontSize,\n verticalAlign: \"top\",\n },\n };\n elements.push(containerElement);\n });\n // Vertices\n Object.values(graph.vertices).forEach((vertex) => {\n if (!vertex) {\n return;\n }\n const groupIds = getGroupIds(vertex.id);\n // Compute custom style\n const containerStyle = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.computeExcalidrawVertexStyle)(vertex.containerStyle);\n const labelStyle = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.computeExcalidrawVertexLabelStyle)(vertex.labelStyle);\n let containerElement = {\n id: vertex.id,\n type: \"rectangle\",\n groupIds,\n x: vertex.x,\n y: vertex.y,\n width: vertex.width,\n height: vertex.height,\n strokeWidth: 2,\n label: {\n groupIds,\n text: (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.getText)(vertex),\n fontSize,\n ...labelStyle,\n },\n link: vertex.link || null,\n ...containerStyle,\n };\n switch (vertex.type) {\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_2__.VERTEX_TYPE.STADIUM: {\n containerElement = { ...containerElement, roundness: { type: 3 } };\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_2__.VERTEX_TYPE.ROUND: {\n containerElement = { ...containerElement, roundness: { type: 3 } };\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_2__.VERTEX_TYPE.DOUBLECIRCLE: {\n const CIRCLE_MARGIN = 5;\n // Create new groupId for double circle\n groupIds.push(`doublecircle_${vertex.id}}`);\n // Create inner circle element\n const innerCircle = {\n type: \"ellipse\",\n groupIds,\n x: vertex.x + CIRCLE_MARGIN,\n y: vertex.y + CIRCLE_MARGIN,\n width: vertex.width - CIRCLE_MARGIN * 2,\n height: vertex.height - CIRCLE_MARGIN * 2,\n strokeWidth: 2,\n roundness: { type: 3 },\n label: {\n groupIds,\n text: (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.getText)(vertex),\n fontSize,\n },\n };\n containerElement = { ...containerElement, groupIds, type: \"ellipse\" };\n elements.push(innerCircle);\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_2__.VERTEX_TYPE.CIRCLE: {\n containerElement.type = \"ellipse\";\n break;\n }\n case _interfaces_js__WEBPACK_IMPORTED_MODULE_2__.VERTEX_TYPE.DIAMOND: {\n containerElement.type = \"diamond\";\n break;\n }\n }\n elements.push(containerElement);\n });\n // Edges\n graph.edges.forEach((edge) => {\n let groupIds = [];\n const startParentId = getParentId(edge.start);\n const endParentId = getParentId(edge.end);\n if (startParentId && startParentId === endParentId) {\n groupIds = getGroupIds(startParentId);\n }\n // Get arrow position data\n const { startX, startY, reflectionPoints } = edge;\n // Calculate Excalidraw arrow's points\n const points = reflectionPoints.map((point) => [\n point.x - reflectionPoints[0].x,\n point.y - reflectionPoints[0].y,\n ]);\n // Get supported arrow type\n const arrowType = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.computeExcalidrawArrowType)(edge.type);\n const arrowId = `${edge.start}_${edge.end}`;\n const containerElement = {\n id: arrowId,\n type: \"arrow\",\n groupIds,\n x: startX,\n y: startY,\n // 4 and 2 are the Excalidraw's stroke width of thick and thin respectively\n // TODO: use constant exported from Excalidraw package\n strokeWidth: edge.stroke === \"thick\" ? 4 : 2,\n strokeStyle: edge.stroke === \"dotted\" ? \"dashed\" : undefined,\n points,\n ...(edge.text\n ? { label: { text: (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.getText)(edge), fontSize, groupIds } }\n : {}),\n roundness: {\n type: 2,\n },\n ...arrowType,\n };\n // Bind start and end vertex to arrow\n const startVertex = elements.find((e) => e.id === edge.start);\n const endVertex = elements.find((e) => e.id === edge.end);\n if (!startVertex || !endVertex) {\n return;\n }\n containerElement.start = {\n id: startVertex.id || \"\",\n };\n containerElement.end = {\n id: endVertex.id || \"\",\n };\n elements.push(containerElement);\n });\n return {\n elements,\n };\n },\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9mbG93Y2hhcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFzRDtBQUNnRjtBQUNwRjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsWUFBWTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ08sbURBQW1ELDhEQUFjO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsb0RBQU87QUFDakM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlFQUE0QjtBQUMvRCwrQkFBK0IsOEVBQWlDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsb0RBQU87QUFDakM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwrREFBbUI7QUFDeEMseUNBQXlDLGtDQUFrQztBQUMzRTtBQUNBO0FBQ0EscUJBQXFCLDZEQUFpQjtBQUN0Qyx5Q0FBeUMsa0NBQWtDO0FBQzNFO0FBQ0E7QUFDQSxxQkFBcUIsb0VBQXdCO0FBQzdDO0FBQ0E7QUFDQSxrREFBa0QsV0FBVztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsU0FBUztBQUM5QztBQUNBO0FBQ0Esa0NBQWtDLG9EQUFPO0FBQ3pDO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw4REFBa0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLCtEQUFtQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQ0FBbUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHVFQUEwQjtBQUN4RCwrQkFBK0IsV0FBVyxHQUFHLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFNBQVMsTUFBTSxvREFBTztBQUM5Qyx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9mbG93Y2hhcnQuanM/OTYzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaENvbnZlcnRlciB9IGZyb20gXCIuLi9HcmFwaENvbnZlcnRlci5qc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dCwgY29tcHV0ZUV4Y2FsaWRyYXdWZXJ0ZXhTdHlsZSwgY29tcHV0ZUV4Y2FsaWRyYXdWZXJ0ZXhMYWJlbFN0eWxlLCBjb21wdXRlRXhjYWxpZHJhd0Fycm93VHlwZSwgfSBmcm9tIFwiLi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgVkVSVEVYX1RZUEUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy5qc1wiO1xuY29uc3QgY29tcHV0ZUdyb3VwSWRzID0gKGdyYXBoKSA9PiB7XG4gICAgLy8gUGFyc2UgdGhlIGRpYWdyYW0gaW50byBhIHRyZWUgZm9yIHJlbmRlcmluZyBhbmQgZ3JvdXBpbmdcbiAgICBjb25zdCB0cmVlID0ge307XG4gICAgZ3JhcGguc3ViR3JhcGhzLm1hcCgoc3ViR3JhcGgpID0+IHtcbiAgICAgICAgc3ViR3JhcGgubm9kZUlkcy5mb3JFYWNoKChub2RlSWQpID0+IHtcbiAgICAgICAgICAgIHRyZWVbc3ViR3JhcGguaWRdID0ge1xuICAgICAgICAgICAgICAgIGlkOiBzdWJHcmFwaC5pZCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgaXNMZWFmOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0cmVlW25vZGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHN1YkdyYXBoLmlkLFxuICAgICAgICAgICAgICAgIGlzTGVhZjogZ3JhcGgudmVydGljZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgbWFwcGVyID0ge307XG4gICAgWy4uLk9iamVjdC5rZXlzKGdyYXBoLnZlcnRpY2VzKSwgLi4uZ3JhcGguc3ViR3JhcGhzLm1hcCgoYykgPT4gYy5pZCldLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGlmICghdHJlZVtpZF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3VyciA9IHRyZWVbaWRdO1xuICAgICAgICBjb25zdCBncm91cElkcyA9IFtdO1xuICAgICAgICBpZiAoIWN1cnIuaXNMZWFmKSB7XG4gICAgICAgICAgICBncm91cElkcy5wdXNoKGBzdWJncmFwaF9ncm91cF8ke2N1cnIuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGdyb3VwSWRzLnB1c2goYHN1YmdyYXBoX2dyb3VwXyR7Y3Vyci5wYXJlbnR9YCk7XG4gICAgICAgICAgICAgICAgY3VyciA9IHRyZWVbY3Vyci5wYXJlbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFwcGVyW2lkXSA9IGdyb3VwSWRzO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldEdyb3VwSWRzOiAoZWxlbWVudElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWFwcGVyW2VsZW1lbnRJZF0gfHwgW107XG4gICAgICAgIH0sXG4gICAgICAgIGdldFBhcmVudElkOiAoZWxlbWVudElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJlZVtlbGVtZW50SWRdID8gdHJlZVtlbGVtZW50SWRdLnBhcmVudCA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgRmxvd2NoYXJ0VG9FeGNhbGlkcmF3U2tlbGV0b25Db252ZXJ0ZXIgPSBuZXcgR3JhcGhDb252ZXJ0ZXIoe1xuICAgIGNvbnZlcnRlcjogKGdyYXBoLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gb3B0aW9ucy5mb250U2l6ZTtcbiAgICAgICAgY29uc3QgeyBnZXRHcm91cElkcywgZ2V0UGFyZW50SWQgfSA9IGNvbXB1dGVHcm91cElkcyhncmFwaCk7XG4gICAgICAgIC8vIFN1YkdyYXBoc1xuICAgICAgICBncmFwaC5zdWJHcmFwaHMucmV2ZXJzZSgpLmZvckVhY2goKHN1YkdyYXBoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cElkcyA9IGdldEdyb3VwSWRzKHN1YkdyYXBoLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHN1YkdyYXBoLmlkLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicmVjdGFuZ2xlXCIsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZHMsXG4gICAgICAgICAgICAgICAgeDogc3ViR3JhcGgueCxcbiAgICAgICAgICAgICAgICB5OiBzdWJHcmFwaC55LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBzdWJHcmFwaC53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHN1YkdyYXBoLmhlaWdodCxcbiAgICAgICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChzdWJHcmFwaCksXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFZlcnRpY2VzXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZ3JhcGgudmVydGljZXMpLmZvckVhY2goKHZlcnRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2ZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm91cElkcyA9IGdldEdyb3VwSWRzKHZlcnRleC5pZCk7XG4gICAgICAgICAgICAvLyBDb21wdXRlIGN1c3RvbSBzdHlsZVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyU3R5bGUgPSBjb21wdXRlRXhjYWxpZHJhd1ZlcnRleFN0eWxlKHZlcnRleC5jb250YWluZXJTdHlsZSk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbFN0eWxlID0gY29tcHV0ZUV4Y2FsaWRyYXdWZXJ0ZXhMYWJlbFN0eWxlKHZlcnRleC5sYWJlbFN0eWxlKTtcbiAgICAgICAgICAgIGxldCBjb250YWluZXJFbGVtZW50ID0ge1xuICAgICAgICAgICAgICAgIGlkOiB2ZXJ0ZXguaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZWN0YW5nbGVcIixcbiAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICB4OiB2ZXJ0ZXgueCxcbiAgICAgICAgICAgICAgICB5OiB2ZXJ0ZXgueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdmVydGV4LndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdmVydGV4LmhlaWdodCxcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dCh2ZXJ0ZXgpLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4ubGFiZWxTdHlsZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxpbms6IHZlcnRleC5saW5rIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgLi4uY29udGFpbmVyU3R5bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc3dpdGNoICh2ZXJ0ZXgudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgVkVSVEVYX1RZUEUuU1RBRElVTToge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50ID0geyAuLi5jb250YWluZXJFbGVtZW50LCByb3VuZG5lc3M6IHsgdHlwZTogMyB9IH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFZFUlRFWF9UWVBFLlJPVU5EOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSB7IC4uLmNvbnRhaW5lckVsZW1lbnQsIHJvdW5kbmVzczogeyB0eXBlOiAzIH0gfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgVkVSVEVYX1RZUEUuRE9VQkxFQ0lSQ0xFOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENJUkNMRV9NQVJHSU4gPSA1O1xuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGdyb3VwSWQgZm9yIGRvdWJsZSBjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZHMucHVzaChgZG91YmxlY2lyY2xlXyR7dmVydGV4LmlkfX1gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGlubmVyIGNpcmNsZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQ2lyY2xlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlbGxpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHZlcnRleC54ICsgQ0lSQ0xFX01BUkdJTixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHZlcnRleC55ICsgQ0lSQ0xFX01BUkdJTixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB2ZXJ0ZXgud2lkdGggLSBDSVJDTEVfTUFSR0lOICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdmVydGV4LmhlaWdodCAtIENJUkNMRV9NQVJHSU4gKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3VuZG5lc3M6IHsgdHlwZTogMyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0KHZlcnRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50ID0geyAuLi5jb250YWluZXJFbGVtZW50LCBncm91cElkcywgdHlwZTogXCJlbGxpcHNlXCIgfTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChpbm5lckNpcmNsZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFZFUlRFWF9UWVBFLkNJUkNMRToge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LnR5cGUgPSBcImVsbGlwc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgVkVSVEVYX1RZUEUuRElBTU9ORDoge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LnR5cGUgPSBcImRpYW1vbmRcIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEVkZ2VzXG4gICAgICAgIGdyYXBoLmVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGxldCBncm91cElkcyA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQYXJlbnRJZCA9IGdldFBhcmVudElkKGVkZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kUGFyZW50SWQgPSBnZXRQYXJlbnRJZChlZGdlLmVuZCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRQYXJlbnRJZCAmJiBzdGFydFBhcmVudElkID09PSBlbmRQYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGdyb3VwSWRzID0gZ2V0R3JvdXBJZHMoc3RhcnRQYXJlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgYXJyb3cgcG9zaXRpb24gZGF0YVxuICAgICAgICAgICAgY29uc3QgeyBzdGFydFgsIHN0YXJ0WSwgcmVmbGVjdGlvblBvaW50cyB9ID0gZWRnZTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBFeGNhbGlkcmF3IGFycm93J3MgcG9pbnRzXG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSByZWZsZWN0aW9uUG9pbnRzLm1hcCgocG9pbnQpID0+IFtcbiAgICAgICAgICAgICAgICBwb2ludC54IC0gcmVmbGVjdGlvblBvaW50c1swXS54LFxuICAgICAgICAgICAgICAgIHBvaW50LnkgLSByZWZsZWN0aW9uUG9pbnRzWzBdLnksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIC8vIEdldCBzdXBwb3J0ZWQgYXJyb3cgdHlwZVxuICAgICAgICAgICAgY29uc3QgYXJyb3dUeXBlID0gY29tcHV0ZUV4Y2FsaWRyYXdBcnJvd1R5cGUoZWRnZS50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGFycm93SWQgPSBgJHtlZGdlLnN0YXJ0fV8ke2VkZ2UuZW5kfWA7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0ge1xuICAgICAgICAgICAgICAgIGlkOiBhcnJvd0lkLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICAgICB4OiBzdGFydFgsXG4gICAgICAgICAgICAgICAgeTogc3RhcnRZLFxuICAgICAgICAgICAgICAgIC8vIDQgYW5kIDIgYXJlIHRoZSBFeGNhbGlkcmF3J3Mgc3Ryb2tlIHdpZHRoIG9mIHRoaWNrIGFuZCB0aGluIHJlc3BlY3RpdmVseVxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBjb25zdGFudCBleHBvcnRlZCBmcm9tIEV4Y2FsaWRyYXcgcGFja2FnZVxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBlZGdlLnN0cm9rZSA9PT0gXCJ0aGlja1wiID8gNCA6IDIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IGVkZ2Uuc3Ryb2tlID09PSBcImRvdHRlZFwiID8gXCJkYXNoZWRcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgLi4uKGVkZ2UudGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHsgbGFiZWw6IHsgdGV4dDogZ2V0VGV4dChlZGdlKSwgZm9udFNpemUsIGdyb3VwSWRzIH0gfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgICByb3VuZG5lc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLmFycm93VHlwZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBCaW5kIHN0YXJ0IGFuZCBlbmQgdmVydGV4IHRvIGFycm93XG4gICAgICAgICAgICBjb25zdCBzdGFydFZlcnRleCA9IGVsZW1lbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGVkZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kVmVydGV4ID0gZWxlbWVudHMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZWRnZS5lbmQpO1xuICAgICAgICAgICAgaWYgKCFzdGFydFZlcnRleCB8fCAhZW5kVmVydGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudC5zdGFydCA9IHtcbiAgICAgICAgICAgICAgICBpZDogc3RhcnRWZXJ0ZXguaWQgfHwgXCJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb250YWluZXJFbGVtZW50LmVuZCA9IHtcbiAgICAgICAgICAgICAgICBpZDogZW5kVmVydGV4LmlkIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/flowchart.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/graphImage.js": /*!**************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/graphImage.js ***! \**************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"GraphImageConverter\": () => (/* binding */ GraphImageConverter)\n/* harmony export */ });\n/* harmony import */ var _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GraphConverter.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n\n\nconst GraphImageConverter = new _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__.GraphConverter({\n converter: (graph) => {\n const imageId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n const { width, height } = graph;\n const imageElement = {\n type: \"image\",\n x: 0,\n y: 0,\n width,\n height,\n status: \"saved\",\n fileId: imageId,\n };\n const files = {\n [imageId]: {\n id: imageId,\n mimeType: graph.mimeType,\n dataURL: graph.dataURL,\n },\n };\n return { files, elements: [imageElement] };\n },\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9ncmFwaEltYWdlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzRDtBQUN0QjtBQUN6QixnQ0FBZ0MsOERBQWM7QUFDckQ7QUFDQSx3QkFBd0IsOENBQU07QUFDOUIsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsaUJBQWlCO0FBQ2pCLEtBQUs7QUFDTCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXhjYWxpZHJhdy9tZXJtYWlkLXRvLWV4Y2FsaWRyYXcvZGlzdC9jb252ZXJ0ZXIvdHlwZXMvZ3JhcGhJbWFnZS5qcz9hMmRmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoQ29udmVydGVyIH0gZnJvbSBcIi4uL0dyYXBoQ29udmVydGVyLmpzXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG5leHBvcnQgY29uc3QgR3JhcGhJbWFnZUNvbnZlcnRlciA9IG5ldyBHcmFwaENvbnZlcnRlcih7XG4gICAgY29udmVydGVyOiAoZ3JhcGgpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VJZCA9IG5hbm9pZCgpO1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdyYXBoO1xuICAgICAgICBjb25zdCBpbWFnZUVsZW1lbnQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcImltYWdlXCIsXG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgc3RhdHVzOiBcInNhdmVkXCIsXG4gICAgICAgICAgICBmaWxlSWQ6IGltYWdlSWQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVzID0ge1xuICAgICAgICAgICAgW2ltYWdlSWRdOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGltYWdlSWQsXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IGdyYXBoLm1pbWVUeXBlLFxuICAgICAgICAgICAgICAgIGRhdGFVUkw6IGdyYXBoLmRhdGFVUkwsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBmaWxlcywgZWxlbWVudHM6IFtpbWFnZUVsZW1lbnRdIH07XG4gICAgfSxcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/graphImage.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js": /*!************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js ***! \************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SequenceToExcalidrawSkeletonConvertor\": () => (/* binding */ SequenceToExcalidrawSkeletonConvertor)\n/* harmony export */ });\n/* harmony import */ var _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GraphConverter.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n\n\n// Arrow mapper for the supported sequence arrow types\nconst EXCALIDRAW_STROKE_STYLE_FOR_ARROW = {\n SOLID: \"solid\",\n DOTTED: \"dotted\",\n SOLID_CROSS: \"solid\",\n DOTTED_CROSS: \"dotted\",\n SOLID_OPEN: \"solid\",\n DOTTED_OPEN: \"dotted\",\n SOLID_POINT: \"solid\",\n DOTTED_POINT: \"dotted\",\n};\nconst createLine = (line) => {\n const lineElement = {\n type: \"line\",\n x: line.startX,\n y: line.startY,\n points: [\n [0, 0],\n [line.endX - line.startX, line.endY - line.startY],\n ],\n width: line.endX - line.startX,\n height: line.endY - line.startY,\n strokeStyle: line.strokeStyle || \"solid\",\n strokeColor: line.strokeColor || \"#000\",\n strokeWidth: line.strokeWidth || 1,\n };\n if (line.groupId) {\n Object.assign(lineElement, { groupIds: [line.groupId] });\n }\n if (line.id) {\n Object.assign(lineElement, { id: line.id });\n }\n return lineElement;\n};\nconst createText = (element) => {\n const textElement = {\n type: \"text\",\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n text: element.text || \"\",\n fontSize: element.fontSize,\n verticalAlign: \"middle\",\n };\n if (element.groupId) {\n Object.assign(textElement, { groupIds: [element.groupId] });\n }\n if (element.id) {\n Object.assign(textElement, { id: element.id });\n }\n return textElement;\n};\nconst createContainer = (element) => {\n let extraProps = {};\n if (element.type === \"rectangle\" && element.subtype === \"activation\") {\n extraProps = {\n backgroundColor: \"#e9ecef\",\n fillStyle: \"solid\",\n };\n }\n const container = {\n id: element.id,\n type: element.type,\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n label: {\n text: element?.label?.text || \"\",\n fontSize: element?.label?.fontSize,\n verticalAlign: \"middle\",\n strokeColor: element.label?.color || \"#000\",\n },\n strokeStyle: element?.strokeStyle,\n strokeWidth: element?.strokeWidth,\n strokeColor: element?.strokeColor,\n backgroundColor: element?.bgColor,\n fillStyle: \"solid\",\n ...extraProps,\n };\n if (element.groupId) {\n Object.assign(container, { groupIds: [element.groupId] });\n }\n return container;\n};\nconst createArrow = (arrow) => {\n const strokeStyle = EXCALIDRAW_STROKE_STYLE_FOR_ARROW[arrow.strokeStyle];\n const arrowElement = {\n type: \"arrow\",\n x: arrow.startX,\n y: arrow.startY,\n points: arrow.points || [\n [0, 0],\n [arrow.endX - arrow.startX, arrow.endY - arrow.startY],\n ],\n width: arrow.endX - arrow.startX,\n height: arrow.endY - arrow.startY,\n strokeStyle,\n endArrowhead: arrow.strokeStyle === \"SOLID_OPEN\" || arrow.strokeStyle === \"DOTTED_OPEN\"\n ? null\n : \"arrow\",\n label: {\n text: arrow?.label?.text || \"\",\n fontSize: 16,\n },\n roundness: {\n type: 2,\n },\n };\n if (arrow.groupId) {\n Object.assign(arrowElement, { groupIds: [arrow.groupId] });\n }\n return arrowElement;\n};\nconst SequenceToExcalidrawSkeletonConvertor = new _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__.GraphConverter({\n converter: (chart) => {\n const elements = [];\n const activations = [];\n Object.values(chart.nodes).forEach((node) => {\n if (!node || !node.length) {\n return;\n }\n node.forEach((element) => {\n let excalidrawElement;\n switch (element.type) {\n case \"line\":\n excalidrawElement = createLine(element);\n break;\n case \"rectangle\":\n case \"ellipse\":\n excalidrawElement = createContainer(element);\n break;\n case \"text\":\n excalidrawElement = createText(element);\n break;\n default:\n throw `unknown type ${element.type}`;\n break;\n }\n if (element.type === \"rectangle\" && element?.subtype === \"activation\") {\n activations.push(excalidrawElement);\n }\n else {\n elements.push(excalidrawElement);\n }\n });\n });\n Object.values(chart.lines).forEach((line) => {\n if (!line) {\n return;\n }\n elements.push(createLine(line));\n });\n Object.values(chart.arrows).forEach((arrow) => {\n if (!arrow) {\n return;\n }\n elements.push(createArrow(arrow));\n if (arrow.sequenceNumber) {\n elements.push(createContainer(arrow.sequenceNumber));\n }\n });\n elements.push(...activations);\n // loops\n if (chart.loops) {\n const { lines, texts, nodes } = chart.loops;\n lines.forEach((line) => {\n elements.push(createLine(line));\n });\n texts.forEach((text) => {\n elements.push(createText(text));\n });\n nodes.forEach((node) => {\n elements.push(createContainer(node));\n });\n }\n if (chart.groups) {\n chart.groups.forEach((group) => {\n const { actorKeys, name } = group;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = 0;\n let maxY = 0;\n if (!actorKeys.length) {\n return;\n }\n const actors = elements.filter((ele) => {\n if (ele.id) {\n const hyphenIndex = ele.id.indexOf(\"-\");\n const id = ele.id.substring(0, hyphenIndex);\n return actorKeys.includes(id);\n }\n });\n actors.forEach((actor) => {\n if (actor.x === undefined ||\n actor.y === undefined ||\n actor.width === undefined ||\n actor.height === undefined) {\n throw new Error(`Actor attributes missing ${actor}`);\n }\n minX = Math.min(minX, actor.x);\n minY = Math.min(minY, actor.y);\n maxX = Math.max(maxX, actor.x + actor.width);\n maxY = Math.max(maxY, actor.y + actor.height);\n });\n // Draw the outer rectangle enclosing the group elements\n const PADDING = 10;\n const groupRectX = minX - PADDING;\n const groupRectY = minY - PADDING;\n const groupRectWidth = maxX - minX + PADDING * 2;\n const groupRectHeight = maxY - minY + PADDING * 2;\n const groupRectId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n const groupRect = createContainer({\n type: \"rectangle\",\n x: groupRectX,\n y: groupRectY,\n width: groupRectWidth,\n height: groupRectHeight,\n bgColor: group.fill,\n id: groupRectId,\n });\n elements.unshift(groupRect);\n const frameId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n const frameChildren = [groupRectId];\n elements.forEach((ele) => {\n if (ele.type === \"frame\") {\n return;\n }\n if (ele.x === undefined ||\n ele.y === undefined ||\n ele.width === undefined ||\n ele.height === undefined) {\n throw new Error(`Element attributes missing ${ele}`);\n }\n if (ele.x >= minX &&\n ele.x + ele.width <= maxX &&\n ele.y >= minY &&\n ele.y + ele.height <= maxY) {\n const elementId = ele.id || (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n if (!ele.id) {\n Object.assign(ele, { id: elementId });\n }\n frameChildren.push(elementId);\n }\n });\n const frame = {\n type: \"frame\",\n id: frameId,\n name,\n children: frameChildren,\n };\n elements.push(frame);\n });\n }\n return { elements };\n },\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDdEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDBCQUEwQjtBQUMvRDtBQUNBO0FBQ0EscUNBQXFDLGFBQWE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDZCQUE2QjtBQUNsRTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNkJBQTZCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHNDQUFzQywyQkFBMkI7QUFDakU7QUFDQTtBQUNBO0FBQ08sa0RBQWtELDhEQUFjO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxhQUFhO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxNQUFNO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDhDQUFNO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxnQ0FBZ0MsOENBQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLElBQUk7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCw4Q0FBTTtBQUMxRDtBQUNBLGlEQUFpRCxlQUFlO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGlCQUFpQjtBQUNqQixLQUFLO0FBQ0wsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvY29udmVydGVyL3R5cGVzL3NlcXVlbmNlLmpzP2JiMWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vR3JhcGhDb252ZXJ0ZXIuanNcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbi8vIEFycm93IG1hcHBlciBmb3IgdGhlIHN1cHBvcnRlZCBzZXF1ZW5jZSBhcnJvdyB0eXBlc1xuY29uc3QgRVhDQUxJRFJBV19TVFJPS0VfU1RZTEVfRk9SX0FSUk9XID0ge1xuICAgIFNPTElEOiBcInNvbGlkXCIsXG4gICAgRE9UVEVEOiBcImRvdHRlZFwiLFxuICAgIFNPTElEX0NST1NTOiBcInNvbGlkXCIsXG4gICAgRE9UVEVEX0NST1NTOiBcImRvdHRlZFwiLFxuICAgIFNPTElEX09QRU46IFwic29saWRcIixcbiAgICBET1RURURfT1BFTjogXCJkb3R0ZWRcIixcbiAgICBTT0xJRF9QT0lOVDogXCJzb2xpZFwiLFxuICAgIERPVFRFRF9QT0lOVDogXCJkb3R0ZWRcIixcbn07XG5jb25zdCBjcmVhdGVMaW5lID0gKGxpbmUpID0+IHtcbiAgICBjb25zdCBsaW5lRWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJsaW5lXCIsXG4gICAgICAgIHg6IGxpbmUuc3RhcnRYLFxuICAgICAgICB5OiBsaW5lLnN0YXJ0WSxcbiAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbbGluZS5lbmRYIC0gbGluZS5zdGFydFgsIGxpbmUuZW5kWSAtIGxpbmUuc3RhcnRZXSxcbiAgICAgICAgXSxcbiAgICAgICAgd2lkdGg6IGxpbmUuZW5kWCAtIGxpbmUuc3RhcnRYLFxuICAgICAgICBoZWlnaHQ6IGxpbmUuZW5kWSAtIGxpbmUuc3RhcnRZLFxuICAgICAgICBzdHJva2VTdHlsZTogbGluZS5zdHJva2VTdHlsZSB8fCBcInNvbGlkXCIsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBsaW5lLnN0cm9rZUNvbG9yIHx8IFwiIzAwMFwiLFxuICAgICAgICBzdHJva2VXaWR0aDogbGluZS5zdHJva2VXaWR0aCB8fCAxLFxuICAgIH07XG4gICAgaWYgKGxpbmUuZ3JvdXBJZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGxpbmVFbGVtZW50LCB7IGdyb3VwSWRzOiBbbGluZS5ncm91cElkXSB9KTtcbiAgICB9XG4gICAgaWYgKGxpbmUuaWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsaW5lRWxlbWVudCwgeyBpZDogbGluZS5pZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVFbGVtZW50O1xufTtcbmNvbnN0IGNyZWF0ZVRleHQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRleHRFbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgeDogZWxlbWVudC54LFxuICAgICAgICB5OiBlbGVtZW50LnksXG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICB0ZXh0OiBlbGVtZW50LnRleHQgfHwgXCJcIixcbiAgICAgICAgZm9udFNpemU6IGVsZW1lbnQuZm9udFNpemUsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwibWlkZGxlXCIsXG4gICAgfTtcbiAgICBpZiAoZWxlbWVudC5ncm91cElkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGV4dEVsZW1lbnQsIHsgZ3JvdXBJZHM6IFtlbGVtZW50Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRleHRFbGVtZW50LCB7IGlkOiBlbGVtZW50LmlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XG59O1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBsZXQgZXh0cmFQcm9wcyA9IHt9O1xuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgJiYgZWxlbWVudC5zdWJ0eXBlID09PSBcImFjdGl2YXRpb25cIikge1xuICAgICAgICBleHRyYVByb3BzID0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNlOWVjZWZcIixcbiAgICAgICAgICAgIGZpbGxTdHlsZTogXCJzb2xpZFwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXIgPSB7XG4gICAgICAgIGlkOiBlbGVtZW50LmlkLFxuICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGVsZW1lbnQ/LmxhYmVsPy50ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgICBmb250U2l6ZTogZWxlbWVudD8ubGFiZWw/LmZvbnRTaXplLFxuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJtaWRkbGVcIixcbiAgICAgICAgICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50LmxhYmVsPy5jb2xvciB8fCBcIiMwMDBcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGVsZW1lbnQ/LnN0cm9rZVN0eWxlLFxuICAgICAgICBzdHJva2VXaWR0aDogZWxlbWVudD8uc3Ryb2tlV2lkdGgsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50Py5zdHJva2VDb2xvcixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBlbGVtZW50Py5iZ0NvbG9yLFxuICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgLi4uZXh0cmFQcm9wcyxcbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lmdyb3VwSWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb250YWluZXIsIHsgZ3JvdXBJZHM6IFtlbGVtZW50Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcbmNvbnN0IGNyZWF0ZUFycm93ID0gKGFycm93KSA9PiB7XG4gICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBFWENBTElEUkFXX1NUUk9LRV9TVFlMRV9GT1JfQVJST1dbYXJyb3cuc3Ryb2tlU3R5bGVdO1xuICAgIGNvbnN0IGFycm93RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICB4OiBhcnJvdy5zdGFydFgsXG4gICAgICAgIHk6IGFycm93LnN0YXJ0WSxcbiAgICAgICAgcG9pbnRzOiBhcnJvdy5wb2ludHMgfHwgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgW2Fycm93LmVuZFggLSBhcnJvdy5zdGFydFgsIGFycm93LmVuZFkgLSBhcnJvdy5zdGFydFldLFxuICAgICAgICBdLFxuICAgICAgICB3aWR0aDogYXJyb3cuZW5kWCAtIGFycm93LnN0YXJ0WCxcbiAgICAgICAgaGVpZ2h0OiBhcnJvdy5lbmRZIC0gYXJyb3cuc3RhcnRZLFxuICAgICAgICBzdHJva2VTdHlsZSxcbiAgICAgICAgZW5kQXJyb3doZWFkOiBhcnJvdy5zdHJva2VTdHlsZSA9PT0gXCJTT0xJRF9PUEVOXCIgfHwgYXJyb3cuc3Ryb2tlU3R5bGUgPT09IFwiRE9UVEVEX09QRU5cIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyb3dcIixcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGFycm93Py5sYWJlbD8udGV4dCB8fCBcIlwiLFxuICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICB9LFxuICAgICAgICByb3VuZG5lc3M6IHtcbiAgICAgICAgICAgIHR5cGU6IDIsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoYXJyb3cuZ3JvdXBJZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFycm93RWxlbWVudCwgeyBncm91cElkczogW2Fycm93Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyb3dFbGVtZW50O1xufTtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZVRvRXhjYWxpZHJhd1NrZWxldG9uQ29udmVydG9yID0gbmV3IEdyYXBoQ29udmVydGVyKHtcbiAgICBjb252ZXJ0ZXI6IChjaGFydCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmF0aW9ucyA9IFtdO1xuICAgICAgICBPYmplY3QudmFsdWVzKGNoYXJ0Lm5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGV4Y2FsaWRyYXdFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBleGNhbGlkcmF3RWxlbWVudCA9IGNyZWF0ZUxpbmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnQgPSBjcmVhdGVDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50ID0gY3JlYXRlVGV4dChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYHVua25vd24gdHlwZSAke2VsZW1lbnQudHlwZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgJiYgZWxlbWVudD8uc3VidHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbnMucHVzaChleGNhbGlkcmF3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGV4Y2FsaWRyYXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC52YWx1ZXMoY2hhcnQubGluZXMpLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgIGlmICghbGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3JlYXRlTGluZShsaW5lKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QudmFsdWVzKGNoYXJ0LmFycm93cykuZm9yRWFjaCgoYXJyb3cpID0+IHtcbiAgICAgICAgICAgIGlmICghYXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUFycm93KGFycm93KSk7XG4gICAgICAgICAgICBpZiAoYXJyb3cuc2VxdWVuY2VOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUNvbnRhaW5lcihhcnJvdy5zZXF1ZW5jZU51bWJlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMucHVzaCguLi5hY3RpdmF0aW9ucyk7XG4gICAgICAgIC8vIGxvb3BzXG4gICAgICAgIGlmIChjaGFydC5sb29wcykge1xuICAgICAgICAgICAgY29uc3QgeyBsaW5lcywgdGV4dHMsIG5vZGVzIH0gPSBjaGFydC5sb29wcztcbiAgICAgICAgICAgIGxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUxpbmUobGluZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0ZXh0cy5mb3JFYWNoKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVUZXh0KHRleHQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3JlYXRlQ29udGFpbmVyKG5vZGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFydC5ncm91cHMpIHtcbiAgICAgICAgICAgIGNoYXJ0Lmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWN0b3JLZXlzLCBuYW1lIH0gPSBncm91cDtcbiAgICAgICAgICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgbGV0IG1heFggPSAwO1xuICAgICAgICAgICAgICAgIGxldCBtYXhZID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdG9yS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RvcnMgPSBlbGVtZW50cy5maWx0ZXIoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoeXBoZW5JbmRleCA9IGVsZS5pZC5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZWxlLmlkLnN1YnN0cmluZygwLCBoeXBoZW5JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0b3JLZXlzLmluY2x1ZGVzKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFjdG9ycy5mb3JFYWNoKChhY3RvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0b3IueCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rvci55ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9yLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdG9yIGF0dHJpYnV0ZXMgbWlzc2luZyAke2FjdG9yfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBhY3Rvci54KTtcbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGFjdG9yLnkpO1xuICAgICAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgYWN0b3IueCArIGFjdG9yLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIGFjdG9yLnkgKyBhY3Rvci5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZSBlbmNsb3NpbmcgdGhlIGdyb3VwIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgY29uc3QgUEFERElORyA9IDEwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjdFggPSBtaW5YIC0gUEFERElORztcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3RZID0gbWluWSAtIFBBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWN0V2lkdGggPSBtYXhYIC0gbWluWCArIFBBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjdEhlaWdodCA9IG1heFkgLSBtaW5ZICsgUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWN0SWQgPSBuYW5vaWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3QgPSBjcmVhdGVDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlY3RYLFxuICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlY3RZLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ3JvdXBSZWN0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ3JvdXBSZWN0SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yOiBncm91cC5maWxsLFxuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXBSZWN0SWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMudW5zaGlmdChncm91cFJlY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lSWQgPSBuYW5vaWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZUNoaWxkcmVuID0gW2dyb3VwUmVjdElkXTtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZS50eXBlID09PSBcImZyYW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLnggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLndpZHRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZS5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbGVtZW50IGF0dHJpYnV0ZXMgbWlzc2luZyAke2VsZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLnggPj0gbWluWCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnggKyBlbGUud2lkdGggPD0gbWF4WCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnkgPj0gbWluWSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnkgKyBlbGUuaGVpZ2h0IDw9IG1heFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGVsZS5pZCB8fCBuYW5vaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWxlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGUsIHsgaWQ6IGVsZW1lbnRJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQ2hpbGRyZW4ucHVzaChlbGVtZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZnJhbWVcIixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGZyYW1lSWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBmcmFtZUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChmcmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbGVtZW50cyB9O1xuICAgIH0sXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/graphToExcalidraw.js": /*!*****************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/graphToExcalidraw.js ***! \*****************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"graphToExcalidraw\": () => (/* binding */ graphToExcalidraw)\n/* harmony export */ });\n/* harmony import */ var _converter_types_flowchart_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./converter/types/flowchart.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/flowchart.js\");\n/* harmony import */ var _converter_types_graphImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./converter/types/graphImage.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/graphImage.js\");\n/* harmony import */ var _converter_types_sequence_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./converter/types/sequence.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js\");\n\n\n\nconst graphToExcalidraw = (graph, options = {}) => {\n switch (graph.type) {\n case \"graphImage\": {\n return _converter_types_graphImage_js__WEBPACK_IMPORTED_MODULE_1__.GraphImageConverter.convert(graph, options);\n }\n case \"flowchart\": {\n return _converter_types_flowchart_js__WEBPACK_IMPORTED_MODULE_0__.FlowchartToExcalidrawSkeletonConverter.convert(graph, options);\n }\n case \"sequence\": {\n return _converter_types_sequence_js__WEBPACK_IMPORTED_MODULE_2__.SequenceToExcalidrawSkeletonConvertor.convert(graph, options);\n }\n default: {\n throw new Error(`graphToExcalidraw: unknown graph type \"${graph.type}, only flowcharts are supported!\"`);\n }\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2dyYXBoVG9FeGNhbGlkcmF3LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBd0Y7QUFDbEI7QUFDZ0I7QUFDL0UsOENBQThDO0FBQ3JEO0FBQ0E7QUFDQSxtQkFBbUIsdUZBQTJCO0FBQzlDO0FBQ0E7QUFDQSxtQkFBbUIseUdBQThDO0FBQ2pFO0FBQ0E7QUFDQSxtQkFBbUIsdUdBQTZDO0FBQ2hFO0FBQ0E7QUFDQSxzRUFBc0UsV0FBVztBQUNqRjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2dyYXBoVG9FeGNhbGlkcmF3LmpzP2JjYjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxvd2NoYXJ0VG9FeGNhbGlkcmF3U2tlbGV0b25Db252ZXJ0ZXIgfSBmcm9tIFwiLi9jb252ZXJ0ZXIvdHlwZXMvZmxvd2NoYXJ0LmpzXCI7XG5pbXBvcnQgeyBHcmFwaEltYWdlQ29udmVydGVyIH0gZnJvbSBcIi4vY29udmVydGVyL3R5cGVzL2dyYXBoSW1hZ2UuanNcIjtcbmltcG9ydCB7IFNlcXVlbmNlVG9FeGNhbGlkcmF3U2tlbGV0b25Db252ZXJ0b3IgfSBmcm9tIFwiLi9jb252ZXJ0ZXIvdHlwZXMvc2VxdWVuY2UuanNcIjtcbmV4cG9ydCBjb25zdCBncmFwaFRvRXhjYWxpZHJhdyA9IChncmFwaCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgc3dpdGNoIChncmFwaC50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJncmFwaEltYWdlXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBHcmFwaEltYWdlQ29udmVydGVyLmNvbnZlcnQoZ3JhcGgsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmbG93Y2hhcnRcIjoge1xuICAgICAgICAgICAgcmV0dXJuIEZsb3djaGFydFRvRXhjYWxpZHJhd1NrZWxldG9uQ29udmVydGVyLmNvbnZlcnQoZ3JhcGgsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzZXF1ZW5jZVwiOiB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVuY2VUb0V4Y2FsaWRyYXdTa2VsZXRvbkNvbnZlcnRvci5jb252ZXJ0KGdyYXBoLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGdyYXBoVG9FeGNhbGlkcmF3OiB1bmtub3duIGdyYXBoIHR5cGUgXCIke2dyYXBoLnR5cGV9LCBvbmx5IGZsb3djaGFydHMgYXJlIHN1cHBvcnRlZCFcImApO1xuICAgICAgICB9XG4gICAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/graphToExcalidraw.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/index.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/index.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaidToExcalidraw\": () => (/* binding */ parseMermaidToExcalidraw)\n/* harmony export */ });\n/* harmony import */ var _graphToExcalidraw_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graphToExcalidraw.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/graphToExcalidraw.js\");\n/* harmony import */ var _parseMermaid_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parseMermaid.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js\");\n\n\nconst parseMermaidToExcalidraw = async (definition, options = {}) => {\n const parsedMermaidData = await (0,_parseMermaid_js__WEBPACK_IMPORTED_MODULE_1__.parseMermaid)(definition);\n const excalidrawElements = (0,_graphToExcalidraw_js__WEBPACK_IMPORTED_MODULE_0__.graphToExcalidraw)(parsedMermaidData, options);\n return excalidrawElements;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyRDtBQUNWO0FBQ2pELGdFQUFnRTtBQUNoRSxvQ0FBb0MsOERBQVk7QUFDaEQsK0JBQStCLHdFQUFpQjtBQUNoRDtBQUNBO0FBQ29DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXhjYWxpZHJhdy9tZXJtYWlkLXRvLWV4Y2FsaWRyYXcvZGlzdC9pbmRleC5qcz9mN2E4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdyYXBoVG9FeGNhbGlkcmF3IH0gZnJvbSBcIi4vZ3JhcGhUb0V4Y2FsaWRyYXcuanNcIjtcbmltcG9ydCB7IHBhcnNlTWVybWFpZCB9IGZyb20gXCIuL3BhcnNlTWVybWFpZC5qc1wiO1xuY29uc3QgcGFyc2VNZXJtYWlkVG9FeGNhbGlkcmF3ID0gYXN5bmMgKGRlZmluaXRpb24sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZE1lcm1haWREYXRhID0gYXdhaXQgcGFyc2VNZXJtYWlkKGRlZmluaXRpb24pO1xuICAgIGNvbnN0IGV4Y2FsaWRyYXdFbGVtZW50cyA9IGdyYXBoVG9FeGNhbGlkcmF3KHBhcnNlZE1lcm1haWREYXRhLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZXhjYWxpZHJhd0VsZW1lbnRzO1xufTtcbmV4cG9ydCB7IHBhcnNlTWVybWFpZFRvRXhjYWxpZHJhdyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/index.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/interfaces.js": /*!**********************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/interfaces.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CONTAINER_STYLE_PROPERTY\": () => (/* binding */ CONTAINER_STYLE_PROPERTY),\n/* harmony export */ \"LABEL_STYLE_PROPERTY\": () => (/* binding */ LABEL_STYLE_PROPERTY),\n/* harmony export */ \"VERTEX_TYPE\": () => (/* binding */ VERTEX_TYPE)\n/* harmony export */ });\nvar VERTEX_TYPE;\n(function (VERTEX_TYPE) {\n VERTEX_TYPE[\"ROUND\"] = \"round\";\n VERTEX_TYPE[\"STADIUM\"] = \"stadium\";\n VERTEX_TYPE[\"DOUBLECIRCLE\"] = \"doublecircle\";\n VERTEX_TYPE[\"CIRCLE\"] = \"circle\";\n VERTEX_TYPE[\"DIAMOND\"] = \"diamond\";\n})(VERTEX_TYPE || (VERTEX_TYPE = {}));\nvar LABEL_STYLE_PROPERTY;\n(function (LABEL_STYLE_PROPERTY) {\n LABEL_STYLE_PROPERTY[\"COLOR\"] = \"color\";\n})(LABEL_STYLE_PROPERTY || (LABEL_STYLE_PROPERTY = {}));\nvar CONTAINER_STYLE_PROPERTY;\n(function (CONTAINER_STYLE_PROPERTY) {\n CONTAINER_STYLE_PROPERTY[\"FILL\"] = \"fill\";\n CONTAINER_STYLE_PROPERTY[\"STROKE\"] = \"stroke\";\n CONTAINER_STYLE_PROPERTY[\"STROKE_WIDTH\"] = \"stroke-width\";\n CONTAINER_STYLE_PROPERTY[\"STROKE_DASHARRAY\"] = \"stroke-dasharray\";\n})(CONTAINER_STYLE_PROPERTY || (CONTAINER_STYLE_PROPERTY = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2ludGVyZmFjZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGtDQUFrQztBQUM1QjtBQUNQO0FBQ0E7QUFDQSxDQUFDLG9EQUFvRDtBQUM5QztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLDREQUE0RCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvaW50ZXJmYWNlcy5qcz80NDBmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgVkVSVEVYX1RZUEU7XG4oZnVuY3Rpb24gKFZFUlRFWF9UWVBFKSB7XG4gICAgVkVSVEVYX1RZUEVbXCJST1VORFwiXSA9IFwicm91bmRcIjtcbiAgICBWRVJURVhfVFlQRVtcIlNUQURJVU1cIl0gPSBcInN0YWRpdW1cIjtcbiAgICBWRVJURVhfVFlQRVtcIkRPVUJMRUNJUkNMRVwiXSA9IFwiZG91YmxlY2lyY2xlXCI7XG4gICAgVkVSVEVYX1RZUEVbXCJDSVJDTEVcIl0gPSBcImNpcmNsZVwiO1xuICAgIFZFUlRFWF9UWVBFW1wiRElBTU9ORFwiXSA9IFwiZGlhbW9uZFwiO1xufSkoVkVSVEVYX1RZUEUgfHwgKFZFUlRFWF9UWVBFID0ge30pKTtcbmV4cG9ydCB2YXIgTEFCRUxfU1RZTEVfUFJPUEVSVFk7XG4oZnVuY3Rpb24gKExBQkVMX1NUWUxFX1BST1BFUlRZKSB7XG4gICAgTEFCRUxfU1RZTEVfUFJPUEVSVFlbXCJDT0xPUlwiXSA9IFwiY29sb3JcIjtcbn0pKExBQkVMX1NUWUxFX1BST1BFUlRZIHx8IChMQUJFTF9TVFlMRV9QUk9QRVJUWSA9IHt9KSk7XG5leHBvcnQgdmFyIENPTlRBSU5FUl9TVFlMRV9QUk9QRVJUWTtcbihmdW5jdGlvbiAoQ09OVEFJTkVSX1NUWUxFX1BST1BFUlRZKSB7XG4gICAgQ09OVEFJTkVSX1NUWUxFX1BST1BFUlRZW1wiRklMTFwiXSA9IFwiZmlsbFwiO1xuICAgIENPTlRBSU5FUl9TVFlMRV9QUk9QRVJUWVtcIlNUUk9LRVwiXSA9IFwic3Ryb2tlXCI7XG4gICAgQ09OVEFJTkVSX1NUWUxFX1BST1BFUlRZW1wiU1RST0tFX1dJRFRIXCJdID0gXCJzdHJva2Utd2lkdGhcIjtcbiAgICBDT05UQUlORVJfU1RZTEVfUFJPUEVSVFlbXCJTVFJPS0VfREFTSEFSUkFZXCJdID0gXCJzdHJva2UtZGFzaGFycmF5XCI7XG59KShDT05UQUlORVJfU1RZTEVfUFJPUEVSVFkgfHwgKENPTlRBSU5FUl9TVFlMRV9QUk9QRVJUWSA9IHt9KSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/interfaces.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js": /*!************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js ***! \************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaid\": () => (/* binding */ parseMermaid)\n/* harmony export */ });\n/* harmony import */ var mermaid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mermaid */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n/* harmony import */ var _parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser/flowchart.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js\");\n/* harmony import */ var _parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/sequence.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\");\n\n\n\n\n\n// Fallback to Svg\nconst convertSvgToGraphImage = (svgContainer) => {\n // Extract SVG width and height\n // TODO: make width and height change dynamically based on user's screen dimension\n const svgEl = svgContainer.querySelector(\"svg\");\n if (!svgEl) {\n throw new Error(\"SVG element not found\");\n }\n const rect = svgEl.getBoundingClientRect();\n const width = rect.width;\n const height = rect.height;\n // Set width and height explictly since in firefox it gets set to 0\n // if the width and height are not expilcitly set\n // eg in some cases like er Diagram, gnatt, width and height is set as 100%\n // which sets the dimensions as 0 in firefox and thus the diagram isn't rendered\n svgEl.setAttribute(\"width\", `${width}`);\n svgEl.setAttribute(\"height\", `${height}`);\n // Convert SVG to image\n const mimeType = \"image/svg+xml\";\n const decoded = unescape(encodeURIComponent(svgEl.outerHTML));\n const base64 = btoa(decoded);\n const dataURL = `data:image/svg+xml;base64,${base64}`;\n const graphImage = {\n type: \"graphImage\",\n mimeType,\n dataURL,\n width,\n height,\n };\n return graphImage;\n};\nconst parseMermaid = async (definition) => {\n mermaid__WEBPACK_IMPORTED_MODULE_4__.K.initialize({\n startOnLoad: false,\n flowchart: { curve: \"linear\" },\n themeVariables: {\n fontSize: `${_constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE * 1.25}px`,\n },\n });\n // Parse the diagram\n const diagram = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.mermaidAPI.getDiagramFromText((0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.encodeEntities)(definition));\n // Render the SVG diagram\n const { svg } = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.render(\"mermaid-to-excalidraw\", definition);\n // Append Svg to DOM\n const svgContainer = document.createElement(\"div\");\n svgContainer.setAttribute(\"style\", `opacity: 0; position: relative; z-index: -1;`);\n svgContainer.innerHTML = svg;\n svgContainer.id = \"mermaid-diagram\";\n document.body.appendChild(svgContainer);\n let data;\n switch (diagram.type) {\n case \"flowchart-v2\": {\n data = (0,_parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__.parseMermaidFlowChartDiagram)(diagram, svgContainer);\n break;\n }\n case \"sequence\": {\n data = (0,_parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__.parseMermaidSequenceDiagram)(diagram, svgContainer);\n break;\n }\n // fallback to image if diagram type not-supported\n default: {\n data = convertSvgToGraphImage(svgContainer);\n }\n }\n svgContainer.remove();\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlTWVybWFpZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEI7QUFDcUI7QUFDUDtBQUN5QjtBQUNGO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxNQUFNO0FBQ3pDLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVMsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLElBQUksaURBQWtCO0FBQ3RCO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBLHlCQUF5Qiw0REFBaUIsUUFBUTtBQUNsRCxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsMEJBQTBCLG9FQUFxQyxDQUFDLHlEQUFjO0FBQzlFO0FBQ0EsWUFBWSxNQUFNLFFBQVEsNkNBQWM7QUFDeEM7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0IsWUFBWTtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0ZBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnRkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlTWVybWFpZC5qcz9hNWQ4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJtYWlkIGZyb20gXCJtZXJtYWlkXCI7XG5pbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VNZXJtYWlkRmxvd0NoYXJ0RGlhZ3JhbSB9IGZyb20gXCIuL3BhcnNlci9mbG93Y2hhcnQuanNcIjtcbmltcG9ydCB7IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbSB9IGZyb20gXCIuL3BhcnNlci9zZXF1ZW5jZS5qc1wiO1xuLy8gRmFsbGJhY2sgdG8gU3ZnXG5jb25zdCBjb252ZXJ0U3ZnVG9HcmFwaEltYWdlID0gKHN2Z0NvbnRhaW5lcikgPT4ge1xuICAgIC8vIEV4dHJhY3QgU1ZHIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAvLyBUT0RPOiBtYWtlIHdpZHRoIGFuZCBoZWlnaHQgY2hhbmdlIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHVzZXIncyBzY3JlZW4gZGltZW5zaW9uXG4gICAgY29uc3Qgc3ZnRWwgPSBzdmdDb250YWluZXIucXVlcnlTZWxlY3RvcihcInN2Z1wiKTtcbiAgICBpZiAoIXN2Z0VsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNWRyBlbGVtZW50IG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHN2Z0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAvLyBTZXQgd2lkdGggYW5kIGhlaWdodCBleHBsaWN0bHkgc2luY2UgaW4gZmlyZWZveCBpdCBnZXRzIHNldCB0byAwXG4gICAgLy8gaWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIG5vdCBleHBpbGNpdGx5IHNldFxuICAgIC8vIGVnIGluIHNvbWUgY2FzZXMgbGlrZSBlciBEaWFncmFtLCBnbmF0dCwgd2lkdGggYW5kIGhlaWdodCBpcyBzZXQgYXMgMTAwJVxuICAgIC8vIHdoaWNoIHNldHMgdGhlIGRpbWVuc2lvbnMgYXMgMCBpbiBmaXJlZm94IGFuZCB0aHVzIHRoZSBkaWFncmFtIGlzbid0IHJlbmRlcmVkXG4gICAgc3ZnRWwuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGh9YCk7XG4gICAgc3ZnRWwuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICAvLyBDb252ZXJ0IFNWRyB0byBpbWFnZVxuICAgIGNvbnN0IG1pbWVUeXBlID0gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgY29uc3QgZGVjb2RlZCA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdmdFbC5vdXRlckhUTUwpKTtcbiAgICBjb25zdCBiYXNlNjQgPSBidG9hKGRlY29kZWQpO1xuICAgIGNvbnN0IGRhdGFVUkwgPSBgZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2Jhc2U2NH1gO1xuICAgIGNvbnN0IGdyYXBoSW1hZ2UgPSB7XG4gICAgICAgIHR5cGU6IFwiZ3JhcGhJbWFnZVwiLFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgZGF0YVVSTCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBncmFwaEltYWdlO1xufTtcbmV4cG9ydCBjb25zdCBwYXJzZU1lcm1haWQgPSBhc3luYyAoZGVmaW5pdGlvbikgPT4ge1xuICAgIG1lcm1haWQuaW5pdGlhbGl6ZSh7XG4gICAgICAgIHN0YXJ0T25Mb2FkOiBmYWxzZSxcbiAgICAgICAgZmxvd2NoYXJ0OiB7IGN1cnZlOiBcImxpbmVhclwiIH0sXG4gICAgICAgIHRoZW1lVmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmb250U2l6ZTogYCR7REVGQVVMVF9GT05UX1NJWkUgKiAxLjI1fXB4YCxcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBQYXJzZSB0aGUgZGlhZ3JhbVxuICAgIGNvbnN0IGRpYWdyYW0gPSBhd2FpdCBtZXJtYWlkLm1lcm1haWRBUEkuZ2V0RGlhZ3JhbUZyb21UZXh0KGVuY29kZUVudGl0aWVzKGRlZmluaXRpb24pKTtcbiAgICAvLyBSZW5kZXIgdGhlIFNWRyBkaWFncmFtXG4gICAgY29uc3QgeyBzdmcgfSA9IGF3YWl0IG1lcm1haWQucmVuZGVyKFwibWVybWFpZC10by1leGNhbGlkcmF3XCIsIGRlZmluaXRpb24pO1xuICAgIC8vIEFwcGVuZCBTdmcgdG8gRE9NXG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBzdmdDb250YWluZXIuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYG9wYWNpdHk6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogLTE7YCk7XG4gICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IHN2ZztcbiAgICBzdmdDb250YWluZXIuaWQgPSBcIm1lcm1haWQtZGlhZ3JhbVwiO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3ZnQ29udGFpbmVyKTtcbiAgICBsZXQgZGF0YTtcbiAgICBzd2l0Y2ggKGRpYWdyYW0udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmxvd2NoYXJ0LXYyXCI6IHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJzZU1lcm1haWRGbG93Q2hhcnREaWFncmFtKGRpYWdyYW0sIHN2Z0NvbnRhaW5lcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2VxdWVuY2VcIjoge1xuICAgICAgICAgICAgZGF0YSA9IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbShkaWFncmFtLCBzdmdDb250YWluZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gaW1hZ2UgaWYgZGlhZ3JhbSB0eXBlIG5vdC1zdXBwb3J0ZWRcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZGF0YSA9IGNvbnZlcnRTdmdUb0dyYXBoSW1hZ2Uoc3ZnQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdmdDb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js": /*!****************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js ***! \****************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaidFlowChartDiagram\": () => (/* binding */ parseMermaidFlowChartDiagram)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n\nconst parseSubGraph = (data, containerEl) => {\n // Extract only node id for better reference\n // e.g. full element id = \"flowchart-c1-205\" will map to \"c1\"\n const nodeIds = data.nodes.map((n) => {\n if (n.startsWith(\"flowchart-\")) {\n return n.split(\"-\")[1];\n }\n return n;\n });\n // Get position\n const el = containerEl.querySelector(`[id='${data.id}']`);\n if (!el) {\n throw new Error(\"SubGraph element not found\");\n }\n const position = computeElementPosition(el, containerEl);\n // Get dimension\n const boundingBox = el.getBBox();\n const dimension = {\n width: boundingBox.width,\n height: boundingBox.height,\n };\n // Remove irrelevant properties\n data.classes = undefined;\n data.dir = undefined;\n return {\n ...data,\n nodeIds,\n ...position,\n ...dimension,\n text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.entityCodesToText)(data.title),\n };\n};\nconst parseVertex = (data, containerEl) => {\n // Find Vertex element\n const el = containerEl.querySelector(`[id*=\"flowchart-${data.id}-\"]`);\n if (!el) {\n return undefined;\n }\n // Check if Vertex attached with link\n let link;\n if (el.parentElement?.tagName.toLowerCase() === \"a\") {\n link = el.parentElement.getAttribute(\"xlink:href\");\n }\n // Get position\n const position = computeElementPosition(link ? el.parentElement : el, containerEl);\n // Get dimension\n const boundingBox = el.getBBox();\n const dimension = {\n width: boundingBox.width,\n height: boundingBox.height,\n };\n // Extract style\n const labelContainerStyleText = el\n .querySelector(\".label-container\")\n ?.getAttribute(\"style\");\n const labelStyleText = el.querySelector(\".label\")?.getAttribute(\"style\");\n const containerStyle = {};\n labelContainerStyleText?.split(\";\").forEach((property) => {\n if (!property) {\n return;\n }\n const key = property.split(\":\")[0].trim();\n const value = property.split(\":\")[1].trim();\n containerStyle[key] = value;\n });\n const labelStyle = {};\n labelStyleText?.split(\";\").forEach((property) => {\n if (!property) {\n return;\n }\n const key = property.split(\":\")[0].trim();\n const value = property.split(\":\")[1].trim();\n labelStyle[key] = value;\n });\n return {\n id: data.id,\n labelType: data.labelType,\n text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.entityCodesToText)(data.text),\n type: data.type,\n link: link || undefined,\n ...position,\n ...dimension,\n containerStyle,\n labelStyle,\n };\n};\nconst parseEdge = (data, containerEl) => {\n // Find edge element\n const el = containerEl.querySelector(`[id*=\"L-${data.start}-${data.end}\"]`);\n if (!el) {\n throw new Error(\"Edge element not found\");\n }\n // Compute edge position data\n const position = computeElementPosition(el, containerEl);\n const edgePositionData = computeEdgePositions(el, position);\n // Remove irrelevant properties\n data.length = undefined;\n return {\n ...data,\n ...edgePositionData,\n text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.entityCodesToText)(data.text),\n };\n};\n// Compute element position\nconst computeElementPosition = (el, containerEl) => {\n if (!el) {\n throw new Error(\"Element not found\");\n }\n let root = el.parentElement?.parentElement;\n const childElement = el.childNodes[0];\n let childPosition = { x: 0, y: 0 };\n if (childElement) {\n const { transformX, transformY } = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTransformAttr)(childElement);\n const boundingBox = childElement.getBBox();\n childPosition = {\n x: Number(childElement.getAttribute(\"x\")) ||\n transformX + boundingBox.x ||\n 0,\n y: Number(childElement.getAttribute(\"y\")) ||\n transformY + boundingBox.y ||\n 0,\n };\n }\n const { transformX, transformY } = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTransformAttr)(el);\n const position = {\n x: transformX + childPosition.x,\n y: transformY + childPosition.y,\n };\n while (root && root.id !== containerEl.id) {\n if (root.classList.value === \"root\" && root.hasAttribute(\"transform\")) {\n const { transformX, transformY } = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTransformAttr)(root);\n position.x += transformX;\n position.y += transformY;\n }\n root = root.parentElement;\n }\n return position;\n};\nconst computeEdgePositions = (pathElement, offset = { x: 0, y: 0 }) => {\n if (pathElement.tagName.toLowerCase() !== \"path\") {\n throw new Error(`Invalid input: Expected an HTMLElement of tag \"path\", got ${pathElement.tagName}`);\n }\n const dAttr = pathElement.getAttribute(\"d\");\n if (!dAttr) {\n throw new Error('Path element does not contain a \"d\" attribute');\n }\n // Split the d attribute based on M (Move To) and L (Line To) commands\n const commands = dAttr.split(/(?=[LM])/);\n const startPosition = commands[0]\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n const endPosition = commands[commands.length - 1]\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n const reflectionPoints = commands\n .map((command) => {\n const coords = command\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n return { x: coords[0], y: coords[1] };\n })\n .filter((point, index, array) => {\n if (index === array.length - 1) {\n return true;\n }\n const prevPoint = array[index - 1];\n return (index === 0 || (point.x !== prevPoint.x && point.y !== prevPoint.y));\n })\n .map((p) => {\n return {\n x: p.x + offset.x,\n y: p.y + offset.y,\n };\n });\n return {\n startX: startPosition[0] + offset.x,\n startY: startPosition[1] + offset.y,\n endX: endPosition[0] + offset.x,\n endY: endPosition[1] + offset.y,\n reflectionPoints,\n };\n};\nconst parseMermaidFlowChartDiagram = (diagram, containerEl) => {\n // This does some cleanup and initialization making sure\n // diagram is parsed correctly. Useful when multiple diagrams are\n // parsed together one after another, eg in playground\n // https://github.com/mermaid-js/mermaid/blob/e561cbd3be2a93b8bedfa4839484966faad92ccf/packages/mermaid/src/Diagram.ts#L43\n diagram.parse();\n // Get mermaid parsed data from parser shared variable `yy`\n const mermaidParser = diagram.parser.yy;\n const vertices = mermaidParser.getVertices();\n Object.keys(vertices).forEach((id) => {\n vertices[id] = parseVertex(vertices[id], containerEl);\n });\n const edges = mermaidParser\n .getEdges()\n .map((data) => parseEdge(data, containerEl));\n const subGraphs = mermaidParser\n .getSubGraphs()\n .map((data) => parseSubGraph(data, containerEl));\n return {\n type: \"flowchart\",\n subGraphs,\n vertices,\n edges,\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlci9mbG93Y2hhcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGlEQUFpRCxRQUFRO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNERBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELFFBQVE7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxjQUFjLDREQUFpQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxXQUFXLEdBQUcsU0FBUztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyw0REFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0EsZ0JBQWdCLHlCQUF5QixFQUFFLDJEQUFnQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseUJBQXlCLEVBQUUsMkRBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUIsRUFBRSwyREFBZ0I7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsWUFBWTtBQUNsRTtBQUNBLHFGQUFxRixvQkFBb0I7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvcGFyc2VyL2Zsb3djaGFydC5qcz8wYTk5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudGl0eUNvZGVzVG9UZXh0LCBnZXRUcmFuc2Zvcm1BdHRyIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5jb25zdCBwYXJzZVN1YkdyYXBoID0gKGRhdGEsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgLy8gRXh0cmFjdCBvbmx5IG5vZGUgaWQgZm9yIGJldHRlciByZWZlcmVuY2VcbiAgICAvLyBlLmcuIGZ1bGwgZWxlbWVudCBpZCA9IFwiZmxvd2NoYXJ0LWMxLTIwNVwiIHdpbGwgbWFwIHRvIFwiYzFcIlxuICAgIGNvbnN0IG5vZGVJZHMgPSBkYXRhLm5vZGVzLm1hcCgobikgPT4ge1xuICAgICAgICBpZiAobi5zdGFydHNXaXRoKFwiZmxvd2NoYXJ0LVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG4uc3BsaXQoXCItXCIpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgIH0pO1xuICAgIC8vIEdldCBwb3NpdGlvblxuICAgIGNvbnN0IGVsID0gY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcihgW2lkPScke2RhdGEuaWR9J11gKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN1YkdyYXBoIGVsZW1lbnQgbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbiA9IGNvbXB1dGVFbGVtZW50UG9zaXRpb24oZWwsIGNvbnRhaW5lckVsKTtcbiAgICAvLyBHZXQgZGltZW5zaW9uXG4gICAgY29uc3QgYm91bmRpbmdCb3ggPSBlbC5nZXRCQm94KCk7XG4gICAgY29uc3QgZGltZW5zaW9uID0ge1xuICAgICAgICB3aWR0aDogYm91bmRpbmdCb3gud2lkdGgsXG4gICAgICAgIGhlaWdodDogYm91bmRpbmdCb3guaGVpZ2h0LFxuICAgIH07XG4gICAgLy8gUmVtb3ZlIGlycmVsZXZhbnQgcHJvcGVydGllc1xuICAgIGRhdGEuY2xhc3NlcyA9IHVuZGVmaW5lZDtcbiAgICBkYXRhLmRpciA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBub2RlSWRzLFxuICAgICAgICAuLi5wb3NpdGlvbixcbiAgICAgICAgLi4uZGltZW5zaW9uLFxuICAgICAgICB0ZXh0OiBlbnRpdHlDb2Rlc1RvVGV4dChkYXRhLnRpdGxlKSxcbiAgICB9O1xufTtcbmNvbnN0IHBhcnNlVmVydGV4ID0gKGRhdGEsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgLy8gRmluZCBWZXJ0ZXggZWxlbWVudFxuICAgIGNvbnN0IGVsID0gY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcihgW2lkKj1cImZsb3djaGFydC0ke2RhdGEuaWR9LVwiXWApO1xuICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgVmVydGV4IGF0dGFjaGVkIHdpdGggbGlua1xuICAgIGxldCBsaW5rO1xuICAgIGlmIChlbC5wYXJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiYVwiKSB7XG4gICAgICAgIGxpbmsgPSBlbC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7XG4gICAgfVxuICAgIC8vIEdldCBwb3NpdGlvblxuICAgIGNvbnN0IHBvc2l0aW9uID0gY29tcHV0ZUVsZW1lbnRQb3NpdGlvbihsaW5rID8gZWwucGFyZW50RWxlbWVudCA6IGVsLCBjb250YWluZXJFbCk7XG4gICAgLy8gR2V0IGRpbWVuc2lvblxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gZWwuZ2V0QkJveCgpO1xuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHtcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nQm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvdW5kaW5nQm94LmhlaWdodCxcbiAgICB9O1xuICAgIC8vIEV4dHJhY3Qgc3R5bGVcbiAgICBjb25zdCBsYWJlbENvbnRhaW5lclN0eWxlVGV4dCA9IGVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiLmxhYmVsLWNvbnRhaW5lclwiKVxuICAgICAgICA/LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgIGNvbnN0IGxhYmVsU3R5bGVUZXh0ID0gZWwucXVlcnlTZWxlY3RvcihcIi5sYWJlbFwiKT8uZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgY29uc3QgY29udGFpbmVyU3R5bGUgPSB7fTtcbiAgICBsYWJlbENvbnRhaW5lclN0eWxlVGV4dD8uc3BsaXQoXCI7XCIpLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eS5zcGxpdChcIjpcIilbMF0udHJpbSgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5LnNwbGl0KFwiOlwiKVsxXS50cmltKCk7XG4gICAgICAgIGNvbnRhaW5lclN0eWxlW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBsYWJlbFN0eWxlID0ge307XG4gICAgbGFiZWxTdHlsZVRleHQ/LnNwbGl0KFwiO1wiKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gcHJvcGVydHkuc3BsaXQoXCI6XCIpWzBdLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0eS5zcGxpdChcIjpcIilbMV0udHJpbSgpO1xuICAgICAgICBsYWJlbFN0eWxlW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogZGF0YS5pZCxcbiAgICAgICAgbGFiZWxUeXBlOiBkYXRhLmxhYmVsVHlwZSxcbiAgICAgICAgdGV4dDogZW50aXR5Q29kZXNUb1RleHQoZGF0YS50ZXh0KSxcbiAgICAgICAgdHlwZTogZGF0YS50eXBlLFxuICAgICAgICBsaW5rOiBsaW5rIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgLi4ucG9zaXRpb24sXG4gICAgICAgIC4uLmRpbWVuc2lvbixcbiAgICAgICAgY29udGFpbmVyU3R5bGUsXG4gICAgICAgIGxhYmVsU3R5bGUsXG4gICAgfTtcbn07XG5jb25zdCBwYXJzZUVkZ2UgPSAoZGF0YSwgY29udGFpbmVyRWwpID0+IHtcbiAgICAvLyBGaW5kIGVkZ2UgZWxlbWVudFxuICAgIGNvbnN0IGVsID0gY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcihgW2lkKj1cIkwtJHtkYXRhLnN0YXJ0fS0ke2RhdGEuZW5kfVwiXWApO1xuICAgIGlmICghZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWRnZSBlbGVtZW50IG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgLy8gQ29tcHV0ZSBlZGdlIHBvc2l0aW9uIGRhdGFcbiAgICBjb25zdCBwb3NpdGlvbiA9IGNvbXB1dGVFbGVtZW50UG9zaXRpb24oZWwsIGNvbnRhaW5lckVsKTtcbiAgICBjb25zdCBlZGdlUG9zaXRpb25EYXRhID0gY29tcHV0ZUVkZ2VQb3NpdGlvbnMoZWwsIHBvc2l0aW9uKTtcbiAgICAvLyBSZW1vdmUgaXJyZWxldmFudCBwcm9wZXJ0aWVzXG4gICAgZGF0YS5sZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uZWRnZVBvc2l0aW9uRGF0YSxcbiAgICAgICAgdGV4dDogZW50aXR5Q29kZXNUb1RleHQoZGF0YS50ZXh0KSxcbiAgICB9O1xufTtcbi8vIENvbXB1dGUgZWxlbWVudCBwb3NpdGlvblxuY29uc3QgY29tcHV0ZUVsZW1lbnRQb3NpdGlvbiA9IChlbCwgY29udGFpbmVyRWwpID0+IHtcbiAgICBpZiAoIWVsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICBsZXQgcm9vdCA9IGVsLnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgY2hpbGRFbGVtZW50ID0gZWwuY2hpbGROb2Rlc1swXTtcbiAgICBsZXQgY2hpbGRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xuICAgIGlmIChjaGlsZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1YLCB0cmFuc2Zvcm1ZIH0gPSBnZXRUcmFuc2Zvcm1BdHRyKGNoaWxkRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gY2hpbGRFbGVtZW50LmdldEJCb3goKTtcbiAgICAgICAgY2hpbGRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHg6IE51bWJlcihjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwieFwiKSkgfHxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1YICsgYm91bmRpbmdCb3gueCB8fFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB5OiBOdW1iZXIoY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZShcInlcIikpIHx8XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtWSArIGJvdW5kaW5nQm94LnkgfHxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7IHRyYW5zZm9ybVgsIHRyYW5zZm9ybVkgfSA9IGdldFRyYW5zZm9ybUF0dHIoZWwpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICB4OiB0cmFuc2Zvcm1YICsgY2hpbGRQb3NpdGlvbi54LFxuICAgICAgICB5OiB0cmFuc2Zvcm1ZICsgY2hpbGRQb3NpdGlvbi55LFxuICAgIH07XG4gICAgd2hpbGUgKHJvb3QgJiYgcm9vdC5pZCAhPT0gY29udGFpbmVyRWwuaWQpIHtcbiAgICAgICAgaWYgKHJvb3QuY2xhc3NMaXN0LnZhbHVlID09PSBcInJvb3RcIiAmJiByb290Lmhhc0F0dHJpYnV0ZShcInRyYW5zZm9ybVwiKSkge1xuICAgICAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1YLCB0cmFuc2Zvcm1ZIH0gPSBnZXRUcmFuc2Zvcm1BdHRyKHJvb3QpO1xuICAgICAgICAgICAgcG9zaXRpb24ueCArPSB0cmFuc2Zvcm1YO1xuICAgICAgICAgICAgcG9zaXRpb24ueSArPSB0cmFuc2Zvcm1ZO1xuICAgICAgICB9XG4gICAgICAgIHJvb3QgPSByb290LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBwb3NpdGlvbjtcbn07XG5jb25zdCBjb21wdXRlRWRnZVBvc2l0aW9ucyA9IChwYXRoRWxlbWVudCwgb2Zmc2V0ID0geyB4OiAwLCB5OiAwIH0pID0+IHtcbiAgICBpZiAocGF0aEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcInBhdGhcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW5wdXQ6IEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50IG9mIHRhZyBcInBhdGhcIiwgZ290ICR7cGF0aEVsZW1lbnQudGFnTmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgZEF0dHIgPSBwYXRoRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkXCIpO1xuICAgIGlmICghZEF0dHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBhIFwiZFwiIGF0dHJpYnV0ZScpO1xuICAgIH1cbiAgICAvLyBTcGxpdCB0aGUgZCBhdHRyaWJ1dGUgYmFzZWQgb24gTSAoTW92ZSBUbykgYW5kIEwgKExpbmUgVG8pIGNvbW1hbmRzXG4gICAgY29uc3QgY29tbWFuZHMgPSBkQXR0ci5zcGxpdCgvKD89W0xNXSkvKTtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gY29tbWFuZHNbMF1cbiAgICAgICAgLnN1YnN0cmluZygxKVxuICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgIC5tYXAoKGNvb3JkKSA9PiBwYXJzZUZsb2F0KGNvb3JkKSk7XG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSBjb21tYW5kc1tjb21tYW5kcy5sZW5ndGggLSAxXVxuICAgICAgICAuc3Vic3RyaW5nKDEpXG4gICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgLm1hcCgoY29vcmQpID0+IHBhcnNlRmxvYXQoY29vcmQpKTtcbiAgICBjb25zdCByZWZsZWN0aW9uUG9pbnRzID0gY29tbWFuZHNcbiAgICAgICAgLm1hcCgoY29tbWFuZCkgPT4ge1xuICAgICAgICBjb25zdCBjb29yZHMgPSBjb21tYW5kXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAubWFwKChjb29yZCkgPT4gcGFyc2VGbG9hdChjb29yZCkpO1xuICAgICAgICByZXR1cm4geyB4OiBjb29yZHNbMF0sIHk6IGNvb3Jkc1sxXSB9O1xuICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKHBvaW50LCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2UG9pbnQgPSBhcnJheVtpbmRleCAtIDFdO1xuICAgICAgICByZXR1cm4gKGluZGV4ID09PSAwIHx8IChwb2ludC54ICE9PSBwcmV2UG9pbnQueCAmJiBwb2ludC55ICE9PSBwcmV2UG9pbnQueSkpO1xuICAgIH0pXG4gICAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHAueCArIG9mZnNldC54LFxuICAgICAgICAgICAgeTogcC55ICsgb2Zmc2V0LnksXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRYOiBzdGFydFBvc2l0aW9uWzBdICsgb2Zmc2V0LngsXG4gICAgICAgIHN0YXJ0WTogc3RhcnRQb3NpdGlvblsxXSArIG9mZnNldC55LFxuICAgICAgICBlbmRYOiBlbmRQb3NpdGlvblswXSArIG9mZnNldC54LFxuICAgICAgICBlbmRZOiBlbmRQb3NpdGlvblsxXSArIG9mZnNldC55LFxuICAgICAgICByZWZsZWN0aW9uUG9pbnRzLFxuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IHBhcnNlTWVybWFpZEZsb3dDaGFydERpYWdyYW0gPSAoZGlhZ3JhbSwgY29udGFpbmVyRWwpID0+IHtcbiAgICAvLyBUaGlzIGRvZXMgc29tZSBjbGVhbnVwIGFuZCBpbml0aWFsaXphdGlvbiBtYWtpbmcgc3VyZVxuICAgIC8vIGRpYWdyYW0gaXMgcGFyc2VkIGNvcnJlY3RseS4gVXNlZnVsIHdoZW4gbXVsdGlwbGUgZGlhZ3JhbXMgYXJlXG4gICAgLy8gcGFyc2VkIHRvZ2V0aGVyIG9uZSBhZnRlciBhbm90aGVyLCBlZyBpbiBwbGF5Z3JvdW5kXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9ibG9iL2U1NjFjYmQzYmUyYTkzYjhiZWRmYTQ4Mzk0ODQ5NjZmYWFkOTJjY2YvcGFja2FnZXMvbWVybWFpZC9zcmMvRGlhZ3JhbS50cyNMNDNcbiAgICBkaWFncmFtLnBhcnNlKCk7XG4gICAgLy8gR2V0IG1lcm1haWQgcGFyc2VkIGRhdGEgZnJvbSBwYXJzZXIgc2hhcmVkIHZhcmlhYmxlIGB5eWBcbiAgICBjb25zdCBtZXJtYWlkUGFyc2VyID0gZGlhZ3JhbS5wYXJzZXIueXk7XG4gICAgY29uc3QgdmVydGljZXMgPSBtZXJtYWlkUGFyc2VyLmdldFZlcnRpY2VzKCk7XG4gICAgT2JqZWN0LmtleXModmVydGljZXMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIHZlcnRpY2VzW2lkXSA9IHBhcnNlVmVydGV4KHZlcnRpY2VzW2lkXSwgY29udGFpbmVyRWwpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVkZ2VzID0gbWVybWFpZFBhcnNlclxuICAgICAgICAuZ2V0RWRnZXMoKVxuICAgICAgICAubWFwKChkYXRhKSA9PiBwYXJzZUVkZ2UoZGF0YSwgY29udGFpbmVyRWwpKTtcbiAgICBjb25zdCBzdWJHcmFwaHMgPSBtZXJtYWlkUGFyc2VyXG4gICAgICAgIC5nZXRTdWJHcmFwaHMoKVxuICAgICAgICAubWFwKChkYXRhKSA9PiBwYXJzZVN1YkdyYXBoKGRhdGEsIGNvbnRhaW5lckVsKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJmbG93Y2hhcnRcIixcbiAgICAgICAgc3ViR3JhcGhzLFxuICAgICAgICB2ZXJ0aWNlcyxcbiAgICAgICAgZWRnZXMsXG4gICAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js": /*!***************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js ***! \***************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaidSequenceDiagram\": () => (/* binding */ parseMermaidSequenceDiagram)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n\n\n\n// Currently mermaid supported these 6 arrow types, the names are taken from mermaidParser.LINETYPE\nconst SEQUENCE_ARROW_TYPES = {\n 0: \"SOLID\",\n 1: \"DOTTED\",\n 3: \"SOLID_CROSS\",\n 4: \"DOTTED_CROSS\",\n 5: \"SOLID_OPEN\",\n 6: \"DOTTED_OPEN\",\n 24: \"SOLID_POINT\",\n 25: \"DOTTED_POINT\",\n};\nconst MESSAGE_TYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32,\n};\nconst createContainerElement = (node, type, opts = {}) => {\n const container = {};\n container.type = type;\n const { text, subtype, id, groupId } = opts;\n container.id = id;\n if (groupId) {\n container.groupId = groupId;\n }\n if (text) {\n container.label = {\n text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(text),\n fontSize: 16,\n };\n }\n const boundingBox = node.getBBox();\n container.x = boundingBox.x;\n container.y = boundingBox.y;\n container.width = boundingBox.width;\n container.height = boundingBox.height;\n container.subtype = subtype;\n switch (subtype) {\n case \"highlight\":\n const bgColor = node.getAttribute(\"fill\");\n if (bgColor) {\n container.bgColor = bgColor;\n }\n break;\n case \"note\":\n container.strokeStyle = \"dashed\";\n break;\n }\n return container;\n};\nconst createTextElement = (textNode, text, opts) => {\n const node = {};\n const x = Number(textNode.getAttribute(\"x\"));\n const y = Number(textNode.getAttribute(\"y\"));\n node.type = \"text\";\n node.text = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(text);\n if (opts?.id) {\n node.id = opts.id;\n }\n if (opts?.groupId) {\n node.groupId = opts.groupId;\n }\n const boundingBox = textNode.getBBox();\n node.width = boundingBox.width;\n node.height = boundingBox.height;\n node.x = x - boundingBox.width / 2;\n node.y = y;\n const fontSize = parseInt(getComputedStyle(textNode).fontSize);\n node.fontSize = fontSize;\n return node;\n};\nconst createLineElement = (lineNode, startX, startY, endX, endY, opts) => {\n const line = {};\n line.startX = startX;\n line.startY = startY;\n line.endX = endX;\n if (opts?.groupId) {\n line.groupId = opts.groupId;\n }\n if (opts?.id) {\n line.id = opts.id;\n }\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n line.endY = endY;\n line.strokeColor = lineNode.getAttribute(\"stroke\");\n line.strokeWidth = Number(lineNode.getAttribute(\"stroke-width\"));\n line.type = \"line\";\n return line;\n};\nconst createArrowElement = (arrowNode, message) => {\n const arrow = {};\n arrow.label = { text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(message.message), fontSize: 16 };\n const tagName = arrowNode.tagName;\n if (tagName === \"line\") {\n arrow.startX = Number(arrowNode.getAttribute(\"x1\"));\n arrow.startY = Number(arrowNode.getAttribute(\"y1\"));\n arrow.endX = Number(arrowNode.getAttribute(\"x2\"));\n arrow.endY = Number(arrowNode.getAttribute(\"y2\"));\n }\n else if (tagName === \"path\") {\n const dAttr = arrowNode.getAttribute(\"d\");\n if (!dAttr) {\n throw new Error('Path element does not contain a \"d\" attribute');\n }\n // Split the d attribute based on M (Move To) and C (Curve) commands\n const commands = dAttr.split(/(?=[LC])/);\n const startPosition = commands[0]\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n const points = [];\n commands.forEach((command) => {\n const currPoints = command\n .substring(1)\n .trim()\n .split(\" \")\n .map((pos) => {\n const [x, y] = pos.split(\",\");\n return [\n parseFloat(x) - startPosition[0],\n parseFloat(y) - startPosition[1],\n ];\n });\n points.push(...currPoints);\n });\n const endPosition = points[points.length - 1];\n arrow.startX = startPosition[0];\n arrow.startY = startPosition[1];\n arrow.endX = endPosition[0];\n arrow.endY = endPosition[1];\n arrow.points = points;\n }\n if (message) {\n // In mermaid the text is positioned above arrow but in Excalidraw\n // its postioned on the arrow hence the elements below it might look cluttered so shifting the arrow by an offset of 10px\n const offset = 10;\n arrow.startY = arrow.startY - offset;\n arrow.endY = arrow.endY - offset;\n }\n const showSequenceNumber = !!arrowNode.nextElementSibling?.classList.contains(\"sequenceNumber\");\n if (showSequenceNumber) {\n const text = arrowNode.nextElementSibling?.textContent;\n if (!text) {\n throw new Error(\"sequence number not present\");\n }\n const height = 30;\n const yOffset = height / 2;\n const xOffset = 10;\n const sequenceNumber = {\n type: \"rectangle\",\n x: arrow.startX - xOffset,\n y: arrow.startY - yOffset,\n label: { text, fontSize: 14 },\n bgColor: \"#e9ecef\",\n height,\n subtype: \"sequence\",\n };\n arrow.sequenceNumber = sequenceNumber;\n }\n arrow.strokeColor = arrowNode.getAttribute(\"stroke\");\n arrow.strokeWidth = Number(arrowNode.getAttribute(\"stroke-width\"));\n arrow.type = \"arrow\";\n arrow.strokeStyle = SEQUENCE_ARROW_TYPES[message.type];\n return arrow;\n};\nconst createActorSymbol = (rootNode, text, opts) => {\n if (!rootNode) {\n throw \"root node not found\";\n }\n const groupId = (0,nanoid__WEBPACK_IMPORTED_MODULE_2__.nanoid)();\n const children = Array.from(rootNode.children);\n const nodeElements = [];\n children.forEach((child, index) => {\n const id = `${opts?.id}-${index}`;\n let ele;\n switch (child.tagName) {\n case \"line\":\n const startX = Number(child.getAttribute(\"x1\"));\n const startY = Number(child.getAttribute(\"y1\"));\n const endX = Number(child.getAttribute(\"x2\"));\n const endY = Number(child.getAttribute(\"y2\"));\n ele = createLineElement(child, startX, startY, endX, endY, { groupId, id });\n break;\n case \"text\":\n ele = createTextElement(child, text, { groupId, id });\n break;\n case \"circle\":\n ele = createContainerElement(child, \"ellipse\", {\n text: child.textContent || undefined,\n groupId,\n id,\n });\n default:\n ele = createContainerElement(child, _constants_js__WEBPACK_IMPORTED_MODULE_0__.SVG_TO_SHAPE_MAPPER[child.tagName], { text: child.textContent || undefined, groupId, id });\n }\n nodeElements.push(ele);\n });\n return nodeElements;\n};\nconst parseActor = (actors, containerEl) => {\n const actorRootNodes = Array.from(containerEl.querySelectorAll(\".actor\"))\n .filter((node) => node.tagName === \"text\")\n .map((actor) => actor.tagName === \"text\" && actor.parentElement);\n const nodes = [];\n const lines = [];\n const actorsLength = Object.keys(actors).length;\n Object.values(actors).forEach((actor, index) => {\n //@ts-ignore\n // For each actor there are two nodes top and bottom which is connected by a line\n const topRootNode = actorRootNodes[index];\n //@ts-ignore\n const bottomRootNode = actorRootNodes[actorsLength + index];\n if (!topRootNode) {\n throw \"root not found\";\n }\n const text = actor.description;\n if (actor.type === \"participant\") {\n // creating top actor node element\n const topNodeElement = createContainerElement(topRootNode.firstChild, \"rectangle\", { id: `${actor.name}-top`, text, subtype: \"actor\" });\n if (!topNodeElement) {\n throw \"Top Node element not found!\";\n }\n nodes.push([topNodeElement]);\n // creating bottom actor node element\n const bottomNodeElement = createContainerElement(bottomRootNode.firstChild, \"rectangle\", { id: `${actor.name}-bottom`, text, subtype: \"actor\" });\n nodes.push([bottomNodeElement]);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n if (!topNodeElement.height) {\n throw \"Top node element height is null\";\n }\n const startY = topNodeElement.y + topNodeElement.height;\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const endY = bottomNodeElement.y;\n const endX = Number(lineNode.getAttribute(\"x2\"));\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n else if (actor.type === \"actor\") {\n const topNodeElement = createActorSymbol(topRootNode, text, {\n id: `${actor.name}-top`,\n });\n nodes.push(topNodeElement);\n const bottomNodeElement = createActorSymbol(bottomRootNode, text, {\n id: `${actor.name}-bottom`,\n });\n nodes.push(bottomNodeElement);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n const startY = Number(lineNode.getAttribute(\"y1\"));\n const endX = Number(lineNode.getAttribute(\"x2\"));\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const bottomEllipseNode = bottomNodeElement.find((node) => node.type === \"ellipse\");\n if (bottomEllipseNode) {\n const endY = bottomEllipseNode.y;\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n }\n });\n return { nodes, lines };\n};\nconst computeArrows = (messages, containerEl) => {\n const arrows = [];\n const arrowNodes = Array.from(containerEl.querySelectorAll('[class*=\"messageLine\"]'));\n const supportedMessageTypes = Object.keys(SEQUENCE_ARROW_TYPES);\n const arrowMessages = messages.filter((message) => supportedMessageTypes.includes(message.type.toString()));\n arrowNodes.forEach((arrowNode, index) => {\n const message = arrowMessages[index];\n const arrow = createArrowElement(arrowNode, message);\n arrows.push(arrow);\n });\n return arrows;\n};\nconst computeNotes = (messages, containerEl) => {\n const noteNodes = Array.from(containerEl.querySelectorAll(\".note\")).map((node) => node.parentElement);\n const noteText = messages.filter((message) => message.type === MESSAGE_TYPE.NOTE);\n const notes = [];\n noteNodes.forEach((node, index) => {\n if (!node) {\n return;\n }\n const rect = node.firstChild;\n const text = noteText[index].message;\n const note = createContainerElement(rect, \"rectangle\", {\n text,\n subtype: \"note\",\n });\n notes.push(note);\n });\n return notes;\n};\nconst parseActivations = (containerEl) => {\n const activationNodes = Array.from(containerEl.querySelectorAll(`[class*=activation]`));\n const activations = [];\n activationNodes.forEach((node) => {\n const rect = createContainerElement(node, \"rectangle\", {\n text: \"\",\n subtype: \"activation\",\n });\n activations.push(rect);\n });\n return activations;\n};\nconst parseLoops = (messages, containerEl) => {\n const lineNodes = Array.from(containerEl.querySelectorAll(\".loopLine\"));\n const lines = [];\n const texts = [];\n const nodes = [];\n lineNodes.forEach((node) => {\n const startX = Number(node.getAttribute(\"x1\"));\n const startY = Number(node.getAttribute(\"y1\"));\n const endX = Number(node.getAttribute(\"x2\"));\n const endY = Number(node.getAttribute(\"y2\"));\n const line = createLineElement(node, startX, startY, endX, endY);\n line.strokeStyle = \"dotted\";\n line.strokeColor = \"#adb5bd\";\n line.strokeWidth = 2;\n lines.push(line);\n });\n const loopTextNodes = Array.from(containerEl.querySelectorAll(\".loopText\"));\n const criticalMessages = messages\n .filter((message) => message.type === MESSAGE_TYPE.CRITICAL_START)\n .map((message) => message.message);\n loopTextNodes.forEach((node) => {\n const text = node.textContent || \"\";\n const textElement = createTextElement(node, text);\n // The text is rendered between [ ] in DOM hence getting the text excluding the [ ]\n const rawText = text.match(/\\[(.*?)\\]/)?.[1] || \"\";\n const isCritical = criticalMessages.includes(rawText);\n // For critical label the coordinates are not accurate in mermaid as there is\n // no padding left hence shifting the text next to critical label by 16px (font size)\n if (isCritical) {\n textElement.x += 16;\n }\n texts.push(textElement);\n });\n const labelBoxes = Array.from(containerEl?.querySelectorAll(\".labelBox\"));\n const labelTextNode = Array.from(containerEl?.querySelectorAll(\".labelText\"));\n labelBoxes.forEach((labelBox, index) => {\n const labelText = labelTextNode[index]?.textContent || \"\";\n const container = createContainerElement(labelBox, \"rectangle\", {\n text: labelText,\n });\n container.strokeColor = \"#adb5bd\";\n container.bgColor = \"#e9ecef\";\n // So width is calculated based on label\n container.width = undefined;\n nodes.push(container);\n });\n return { lines, texts, nodes };\n};\nconst computeHighlights = (containerEl) => {\n const rects = Array.from(containerEl.querySelectorAll(\".rect\"))\n // Only drawing specifically for highlights as the same selector is for grouping as well. For grouping we\n // draw it ourselves\n .filter((node) => node.parentElement?.tagName !== \"g\");\n const nodes = [];\n rects.forEach((rect) => {\n const node = createContainerElement(rect, \"rectangle\", {\n text: \"\",\n subtype: \"highlight\",\n });\n nodes.push(node);\n });\n return nodes;\n};\nconst parseMermaidSequenceDiagram = (diagram, containerEl) => {\n diagram.parse();\n // Get mermaid parsed data from parser shared variable `yy`\n const mermaidParser = diagram.parser.yy;\n const nodes = [];\n const groups = mermaidParser.getBoxes();\n const bgHightlights = computeHighlights(containerEl);\n const actorData = mermaidParser.getActors();\n const { nodes: actors, lines } = parseActor(actorData, containerEl);\n const messages = mermaidParser.getMessages();\n const arrows = computeArrows(messages, containerEl);\n const notes = computeNotes(messages, containerEl);\n const activations = parseActivations(containerEl);\n const loops = parseLoops(messages, containerEl);\n nodes.push(bgHightlights);\n nodes.push(...actors);\n nodes.push(notes);\n nodes.push(activations);\n return { type: \"sequence\", lines, arrows, nodes, loops, groups };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlci9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQ3RCO0FBQ2dCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxZQUFZLDZCQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0REFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixNQUFNLDREQUFpQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw4Q0FBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsU0FBUyxHQUFHLE1BQU07QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsYUFBYTtBQUMxRjtBQUNBO0FBQ0EsdURBQXVELGFBQWE7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0Esb0RBQW9ELDhEQUFtQixtQkFBbUIsbURBQW1EO0FBQzdJO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHLE9BQU8sV0FBVywrQkFBK0I7QUFDbEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVHQUF1RyxPQUFPLFdBQVcsa0NBQWtDO0FBQzNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFdBQVc7QUFDbEMsYUFBYTtBQUNiO0FBQ0E7QUFDQSx1QkFBdUIsV0FBVztBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXhjYWxpZHJhdy9tZXJtYWlkLXRvLWV4Y2FsaWRyYXcvZGlzdC9wYXJzZXIvc2VxdWVuY2UuanM/Mzg0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTVkdfVE9fU0hBUEVfTUFQUEVSIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSBcIm5hbm9pZFwiO1xuaW1wb3J0IHsgZW50aXR5Q29kZXNUb1RleHQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbi8vIEN1cnJlbnRseSBtZXJtYWlkIHN1cHBvcnRlZCB0aGVzZSA2IGFycm93IHR5cGVzLCB0aGUgbmFtZXMgYXJlIHRha2VuIGZyb20gbWVybWFpZFBhcnNlci5MSU5FVFlQRVxuY29uc3QgU0VRVUVOQ0VfQVJST1dfVFlQRVMgPSB7XG4gICAgMDogXCJTT0xJRFwiLFxuICAgIDE6IFwiRE9UVEVEXCIsXG4gICAgMzogXCJTT0xJRF9DUk9TU1wiLFxuICAgIDQ6IFwiRE9UVEVEX0NST1NTXCIsXG4gICAgNTogXCJTT0xJRF9PUEVOXCIsXG4gICAgNjogXCJET1RURURfT1BFTlwiLFxuICAgIDI0OiBcIlNPTElEX1BPSU5UXCIsXG4gICAgMjU6IFwiRE9UVEVEX1BPSU5UXCIsXG59O1xuY29uc3QgTUVTU0FHRV9UWVBFID0ge1xuICAgIFNPTElEOiAwLFxuICAgIERPVFRFRDogMSxcbiAgICBOT1RFOiAyLFxuICAgIFNPTElEX0NST1NTOiAzLFxuICAgIERPVFRFRF9DUk9TUzogNCxcbiAgICBTT0xJRF9PUEVOOiA1LFxuICAgIERPVFRFRF9PUEVOOiA2LFxuICAgIExPT1BfU1RBUlQ6IDEwLFxuICAgIExPT1BfRU5EOiAxMSxcbiAgICBBTFRfU1RBUlQ6IDEyLFxuICAgIEFMVF9FTFNFOiAxMyxcbiAgICBBTFRfRU5EOiAxNCxcbiAgICBPUFRfU1RBUlQ6IDE1LFxuICAgIE9QVF9FTkQ6IDE2LFxuICAgIEFDVElWRV9TVEFSVDogMTcsXG4gICAgQUNUSVZFX0VORDogMTgsXG4gICAgUEFSX1NUQVJUOiAxOSxcbiAgICBQQVJfQU5EOiAyMCxcbiAgICBQQVJfRU5EOiAyMSxcbiAgICBSRUNUX1NUQVJUOiAyMixcbiAgICBSRUNUX0VORDogMjMsXG4gICAgU09MSURfUE9JTlQ6IDI0LFxuICAgIERPVFRFRF9QT0lOVDogMjUsXG4gICAgQVVUT05VTUJFUjogMjYsXG4gICAgQ1JJVElDQUxfU1RBUlQ6IDI3LFxuICAgIENSSVRJQ0FMX09QVElPTjogMjgsXG4gICAgQ1JJVElDQUxfRU5EOiAyOSxcbiAgICBCUkVBS19TVEFSVDogMzAsXG4gICAgQlJFQUtfRU5EOiAzMSxcbiAgICBQQVJfT1ZFUl9TVEFSVDogMzIsXG59O1xuY29uc3QgY3JlYXRlQ29udGFpbmVyRWxlbWVudCA9IChub2RlLCB0eXBlLCBvcHRzID0ge30pID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB7fTtcbiAgICBjb250YWluZXIudHlwZSA9IHR5cGU7XG4gICAgY29uc3QgeyB0ZXh0LCBzdWJ0eXBlLCBpZCwgZ3JvdXBJZCB9ID0gb3B0cztcbiAgICBjb250YWluZXIuaWQgPSBpZDtcbiAgICBpZiAoZ3JvdXBJZCkge1xuICAgICAgICBjb250YWluZXIuZ3JvdXBJZCA9IGdyb3VwSWQ7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnRhaW5lci5sYWJlbCA9IHtcbiAgICAgICAgICAgIHRleHQ6IGVudGl0eUNvZGVzVG9UZXh0KHRleHQpLFxuICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBib3VuZGluZ0JveCA9IG5vZGUuZ2V0QkJveCgpO1xuICAgIGNvbnRhaW5lci54ID0gYm91bmRpbmdCb3gueDtcbiAgICBjb250YWluZXIueSA9IGJvdW5kaW5nQm94Lnk7XG4gICAgY29udGFpbmVyLndpZHRoID0gYm91bmRpbmdCb3gud2lkdGg7XG4gICAgY29udGFpbmVyLmhlaWdodCA9IGJvdW5kaW5nQm94LmhlaWdodDtcbiAgICBjb250YWluZXIuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJoaWdobGlnaHRcIjpcbiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBub2RlLmdldEF0dHJpYnV0ZShcImZpbGxcIik7XG4gICAgICAgICAgICBpZiAoYmdDb2xvcikge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5iZ0NvbG9yID0gYmdDb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm90ZVwiOlxuICAgICAgICAgICAgY29udGFpbmVyLnN0cm9rZVN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcbmNvbnN0IGNyZWF0ZVRleHRFbGVtZW50ID0gKHRleHROb2RlLCB0ZXh0LCBvcHRzKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IHt9O1xuICAgIGNvbnN0IHggPSBOdW1iZXIodGV4dE5vZGUuZ2V0QXR0cmlidXRlKFwieFwiKSk7XG4gICAgY29uc3QgeSA9IE51bWJlcih0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ5XCIpKTtcbiAgICBub2RlLnR5cGUgPSBcInRleHRcIjtcbiAgICBub2RlLnRleHQgPSBlbnRpdHlDb2Rlc1RvVGV4dCh0ZXh0KTtcbiAgICBpZiAob3B0cz8uaWQpIHtcbiAgICAgICAgbm9kZS5pZCA9IG9wdHMuaWQ7XG4gICAgfVxuICAgIGlmIChvcHRzPy5ncm91cElkKSB7XG4gICAgICAgIG5vZGUuZ3JvdXBJZCA9IG9wdHMuZ3JvdXBJZDtcbiAgICB9XG4gICAgY29uc3QgYm91bmRpbmdCb3ggPSB0ZXh0Tm9kZS5nZXRCQm94KCk7XG4gICAgbm9kZS53aWR0aCA9IGJvdW5kaW5nQm94LndpZHRoO1xuICAgIG5vZGUuaGVpZ2h0ID0gYm91bmRpbmdCb3guaGVpZ2h0O1xuICAgIG5vZGUueCA9IHggLSBib3VuZGluZ0JveC53aWR0aCAvIDI7XG4gICAgbm9kZS55ID0geTtcbiAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGV4dE5vZGUpLmZvbnRTaXplKTtcbiAgICBub2RlLmZvbnRTaXplID0gZm9udFNpemU7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuY29uc3QgY3JlYXRlTGluZUVsZW1lbnQgPSAobGluZU5vZGUsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBvcHRzKSA9PiB7XG4gICAgY29uc3QgbGluZSA9IHt9O1xuICAgIGxpbmUuc3RhcnRYID0gc3RhcnRYO1xuICAgIGxpbmUuc3RhcnRZID0gc3RhcnRZO1xuICAgIGxpbmUuZW5kWCA9IGVuZFg7XG4gICAgaWYgKG9wdHM/Lmdyb3VwSWQpIHtcbiAgICAgICAgbGluZS5ncm91cElkID0gb3B0cy5ncm91cElkO1xuICAgIH1cbiAgICBpZiAob3B0cz8uaWQpIHtcbiAgICAgICAgbGluZS5pZCA9IG9wdHMuaWQ7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSBsaW5lcyBkb24ndCBvdmVybGFwIHdpdGggdGhlIG5vZGVzLCBpbiBtZXJtYWlkIGl0IG92ZXJsYXBzIGJ1dCBpc24ndCB2aXNpYmxlIGFzIGl0cyBwdXNoZWQgYmFjayBhbmQgY29udGFpbmVycyBhcmUgbm9uIHRyYW5zcGFyZW50XG4gICAgbGluZS5lbmRZID0gZW5kWTtcbiAgICBsaW5lLnN0cm9rZUNvbG9yID0gbGluZU5vZGUuZ2V0QXR0cmlidXRlKFwic3Ryb2tlXCIpO1xuICAgIGxpbmUuc3Ryb2tlV2lkdGggPSBOdW1iZXIobGluZU5vZGUuZ2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIpKTtcbiAgICBsaW5lLnR5cGUgPSBcImxpbmVcIjtcbiAgICByZXR1cm4gbGluZTtcbn07XG5jb25zdCBjcmVhdGVBcnJvd0VsZW1lbnQgPSAoYXJyb3dOb2RlLCBtZXNzYWdlKSA9PiB7XG4gICAgY29uc3QgYXJyb3cgPSB7fTtcbiAgICBhcnJvdy5sYWJlbCA9IHsgdGV4dDogZW50aXR5Q29kZXNUb1RleHQobWVzc2FnZS5tZXNzYWdlKSwgZm9udFNpemU6IDE2IH07XG4gICAgY29uc3QgdGFnTmFtZSA9IGFycm93Tm9kZS50YWdOYW1lO1xuICAgIGlmICh0YWdOYW1lID09PSBcImxpbmVcIikge1xuICAgICAgICBhcnJvdy5zdGFydFggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgYXJyb3cuc3RhcnRZID0gTnVtYmVyKGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ5MVwiKSk7XG4gICAgICAgIGFycm93LmVuZFggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgYXJyb3cuZW5kWSA9IE51bWJlcihhcnJvd05vZGUuZ2V0QXR0cmlidXRlKFwieTJcIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWdOYW1lID09PSBcInBhdGhcIikge1xuICAgICAgICBjb25zdCBkQXR0ciA9IGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJkXCIpO1xuICAgICAgICBpZiAoIWRBdHRyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGEgXCJkXCIgYXR0cmlidXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3BsaXQgdGhlIGQgYXR0cmlidXRlIGJhc2VkIG9uIE0gKE1vdmUgVG8pICBhbmQgQyAoQ3VydmUpIGNvbW1hbmRzXG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gZEF0dHIuc3BsaXQoLyg/PVtMQ10pLyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjb21tYW5kc1swXVxuICAgICAgICAgICAgLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgLm1hcCgoY29vcmQpID0+IHBhcnNlRmxvYXQoY29vcmQpKTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgIGNvbW1hbmRzLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQb2ludHMgPSBjb21tYW5kXG4gICAgICAgICAgICAgICAgLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3gsIHldID0gcG9zLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHgpIC0gc3RhcnRQb3NpdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh5KSAtIHN0YXJ0UG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goLi4uY3VyclBvaW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGFycm93LnN0YXJ0WCA9IHN0YXJ0UG9zaXRpb25bMF07XG4gICAgICAgIGFycm93LnN0YXJ0WSA9IHN0YXJ0UG9zaXRpb25bMV07XG4gICAgICAgIGFycm93LmVuZFggPSBlbmRQb3NpdGlvblswXTtcbiAgICAgICAgYXJyb3cuZW5kWSA9IGVuZFBvc2l0aW9uWzFdO1xuICAgICAgICBhcnJvdy5wb2ludHMgPSBwb2ludHM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIC8vIEluIG1lcm1haWQgdGhlIHRleHQgaXMgcG9zaXRpb25lZCBhYm92ZSBhcnJvdyBidXQgaW4gRXhjYWxpZHJhd1xuICAgICAgICAvLyBpdHMgcG9zdGlvbmVkIG9uIHRoZSBhcnJvdyBoZW5jZSB0aGUgZWxlbWVudHMgYmVsb3cgaXQgbWlnaHQgbG9vayBjbHV0dGVyZWQgc28gc2hpZnRpbmcgdGhlIGFycm93IGJ5IGFuIG9mZnNldCBvZiAxMHB4XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEwO1xuICAgICAgICBhcnJvdy5zdGFydFkgPSBhcnJvdy5zdGFydFkgLSBvZmZzZXQ7XG4gICAgICAgIGFycm93LmVuZFkgPSBhcnJvdy5lbmRZIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBjb25zdCBzaG93U2VxdWVuY2VOdW1iZXIgPSAhIWFycm93Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucyhcInNlcXVlbmNlTnVtYmVyXCIpO1xuICAgIGlmIChzaG93U2VxdWVuY2VOdW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGFycm93Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc/LnRleHRDb250ZW50O1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlcXVlbmNlIG51bWJlciBub3QgcHJlc2VudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWlnaHQgPSAzMDtcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IGhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSAxMDtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VOdW1iZXIgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgeDogYXJyb3cuc3RhcnRYIC0geE9mZnNldCxcbiAgICAgICAgICAgIHk6IGFycm93LnN0YXJ0WSAtIHlPZmZzZXQsXG4gICAgICAgICAgICBsYWJlbDogeyB0ZXh0LCBmb250U2l6ZTogMTQgfSxcbiAgICAgICAgICAgIGJnQ29sb3I6IFwiI2U5ZWNlZlwiLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgc3VidHlwZTogXCJzZXF1ZW5jZVwiLFxuICAgICAgICB9O1xuICAgICAgICBhcnJvdy5zZXF1ZW5jZU51bWJlciA9IHNlcXVlbmNlTnVtYmVyO1xuICAgIH1cbiAgICBhcnJvdy5zdHJva2VDb2xvciA9IGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJzdHJva2VcIik7XG4gICAgYXJyb3cuc3Ryb2tlV2lkdGggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiKSk7XG4gICAgYXJyb3cudHlwZSA9IFwiYXJyb3dcIjtcbiAgICBhcnJvdy5zdHJva2VTdHlsZSA9IFNFUVVFTkNFX0FSUk9XX1RZUEVTW21lc3NhZ2UudHlwZV07XG4gICAgcmV0dXJuIGFycm93O1xufTtcbmNvbnN0IGNyZWF0ZUFjdG9yU3ltYm9sID0gKHJvb3ROb2RlLCB0ZXh0LCBvcHRzKSA9PiB7XG4gICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgICB0aHJvdyBcInJvb3Qgbm9kZSBub3QgZm91bmRcIjtcbiAgICB9XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbm9pZCgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShyb290Tm9kZS5jaGlsZHJlbik7XG4gICAgY29uc3Qgbm9kZUVsZW1lbnRzID0gW107XG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gYCR7b3B0cz8uaWR9LSR7aW5kZXh9YDtcbiAgICAgICAgbGV0IGVsZTtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwibGluZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0WCA9IE51bWJlcihjaGlsZC5nZXRBdHRyaWJ1dGUoXCJ4MVwiKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRZID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcInkxXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRZID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcInkyXCIpKTtcbiAgICAgICAgICAgICAgICBlbGUgPSBjcmVhdGVMaW5lRWxlbWVudChjaGlsZCwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIHsgZ3JvdXBJZCwgaWQgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZVRleHRFbGVtZW50KGNoaWxkLCB0ZXh0LCB7IGdyb3VwSWQsIGlkIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoY2hpbGQsIFwiZWxsaXBzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoaWxkLnRleHRDb250ZW50IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoY2hpbGQsIFNWR19UT19TSEFQRV9NQVBQRVJbY2hpbGQudGFnTmFtZV0sIHsgdGV4dDogY2hpbGQudGV4dENvbnRlbnQgfHwgdW5kZWZpbmVkLCBncm91cElkLCBpZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlRWxlbWVudHMucHVzaChlbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub2RlRWxlbWVudHM7XG59O1xuY29uc3QgcGFyc2VBY3RvciA9IChhY3RvcnMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYWN0b3JSb290Tm9kZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYWN0b3JcIikpXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IG5vZGUudGFnTmFtZSA9PT0gXCJ0ZXh0XCIpXG4gICAgICAgIC5tYXAoKGFjdG9yKSA9PiBhY3Rvci50YWdOYW1lID09PSBcInRleHRcIiAmJiBhY3Rvci5wYXJlbnRFbGVtZW50KTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgY29uc3QgYWN0b3JzTGVuZ3RoID0gT2JqZWN0LmtleXMoYWN0b3JzKS5sZW5ndGg7XG4gICAgT2JqZWN0LnZhbHVlcyhhY3RvcnMpLmZvckVhY2goKGFjdG9yLCBpbmRleCkgPT4ge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgLy8gRm9yIGVhY2ggYWN0b3IgdGhlcmUgYXJlIHR3byBub2RlcyB0b3AgYW5kIGJvdHRvbSB3aGljaCBpcyBjb25uZWN0ZWQgYnkgYSBsaW5lXG4gICAgICAgIGNvbnN0IHRvcFJvb3ROb2RlID0gYWN0b3JSb290Tm9kZXNbaW5kZXhdO1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgYm90dG9tUm9vdE5vZGUgPSBhY3RvclJvb3ROb2Rlc1thY3RvcnNMZW5ndGggKyBpbmRleF07XG4gICAgICAgIGlmICghdG9wUm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IFwicm9vdCBub3QgZm91bmRcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gYWN0b3IuZGVzY3JpcHRpb247XG4gICAgICAgIGlmIChhY3Rvci50eXBlID09PSBcInBhcnRpY2lwYW50XCIpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHRvcCBhY3RvciBub2RlIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHRvcE5vZGVFbGVtZW50ID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudCh0b3BSb290Tm9kZS5maXJzdENoaWxkLCBcInJlY3RhbmdsZVwiLCB7IGlkOiBgJHthY3Rvci5uYW1lfS10b3BgLCB0ZXh0LCBzdWJ0eXBlOiBcImFjdG9yXCIgfSk7XG4gICAgICAgICAgICBpZiAoIXRvcE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUb3AgTm9kZSBlbGVtZW50IG5vdCBmb3VuZCFcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVzLnB1c2goW3RvcE5vZGVFbGVtZW50XSk7XG4gICAgICAgICAgICAvLyBjcmVhdGluZyBib3R0b20gYWN0b3Igbm9kZSBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBib3R0b21Ob2RlRWxlbWVudCA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoYm90dG9tUm9vdE5vZGUuZmlyc3RDaGlsZCwgXCJyZWN0YW5nbGVcIiwgeyBpZDogYCR7YWN0b3IubmFtZX0tYm90dG9tYCwgdGV4dCwgc3VidHlwZTogXCJhY3RvclwiIH0pO1xuICAgICAgICAgICAgbm9kZXMucHVzaChbYm90dG9tTm9kZUVsZW1lbnRdKTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBjb25uZWN0aW5nIHRoZSB0b3AgYW5kIGJvdHRvbSBub2Rlcy4gQXMgcGVyIHRoZSBET00sIHRoZSBsaW5lIGlzIHJlbmRlcmVkIGFzIGZpcnN0IGNoaWxkIG9mIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBsaW5lTm9kZSA9IHRvcFJvb3ROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAobGluZU5vZGU/LnRhZ05hbWUgIT09IFwibGluZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJMaW5lIG5vdCBmb3VuZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgICAgIGlmICghdG9wTm9kZUVsZW1lbnQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUb3Agbm9kZSBlbGVtZW50IGhlaWdodCBpcyBudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFkgPSB0b3BOb2RlRWxlbWVudC55ICsgdG9wTm9kZUVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGxpbmVzIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgbm9kZXMsIGluIG1lcm1haWQgaXQgb3ZlcmxhcHMgYnV0IGlzbid0IHZpc2libGUgYXMgaXRzIHB1c2hlZCBiYWNrIGFuZCBjb250YWluZXJzIGFyZSBub24gdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IGVuZFkgPSBib3R0b21Ob2RlRWxlbWVudC55O1xuICAgICAgICAgICAgY29uc3QgZW5kWCA9IE51bWJlcihsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJ4MlwiKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gY3JlYXRlTGluZUVsZW1lbnQobGluZU5vZGUsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWN0b3IudHlwZSA9PT0gXCJhY3RvclwiKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BOb2RlRWxlbWVudCA9IGNyZWF0ZUFjdG9yU3ltYm9sKHRvcFJvb3ROb2RlLCB0ZXh0LCB7XG4gICAgICAgICAgICAgICAgaWQ6IGAke2FjdG9yLm5hbWV9LXRvcGAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVzLnB1c2godG9wTm9kZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tTm9kZUVsZW1lbnQgPSBjcmVhdGVBY3RvclN5bWJvbChib3R0b21Sb290Tm9kZSwgdGV4dCwge1xuICAgICAgICAgICAgICAgIGlkOiBgJHthY3Rvci5uYW1lfS1ib3R0b21gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKGJvdHRvbU5vZGVFbGVtZW50KTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBjb25uZWN0aW5nIHRoZSB0b3AgYW5kIGJvdHRvbSBub2Rlcy4gQXMgcGVyIHRoZSBET00sIHRoZSBsaW5lIGlzIHJlbmRlcmVkIGFzIGZpcnN0IGNoaWxkIG9mIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBsaW5lTm9kZSA9IHRvcFJvb3ROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAobGluZU5vZGU/LnRhZ05hbWUgIT09IFwibGluZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJMaW5lIG5vdCBmb3VuZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IE51bWJlcihsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJ5MVwiKSk7XG4gICAgICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBsaW5lcyBkb24ndCBvdmVybGFwIHdpdGggdGhlIG5vZGVzLCBpbiBtZXJtYWlkIGl0IG92ZXJsYXBzIGJ1dCBpc24ndCB2aXNpYmxlIGFzIGl0cyBwdXNoZWQgYmFjayBhbmQgY29udGFpbmVycyBhcmUgbm9uIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBjb25zdCBib3R0b21FbGxpcHNlTm9kZSA9IGJvdHRvbU5vZGVFbGVtZW50LmZpbmQoKG5vZGUpID0+IG5vZGUudHlwZSA9PT0gXCJlbGxpcHNlXCIpO1xuICAgICAgICAgICAgaWYgKGJvdHRvbUVsbGlwc2VOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kWSA9IGJvdHRvbUVsbGlwc2VOb2RlLnk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGNyZWF0ZUxpbmVFbGVtZW50KGxpbmVOb2RlLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IG5vZGVzLCBsaW5lcyB9O1xufTtcbmNvbnN0IGNvbXB1dGVBcnJvd3MgPSAobWVzc2FnZXMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYXJyb3dzID0gW107XG4gICAgY29uc3QgYXJyb3dOb2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIm1lc3NhZ2VMaW5lXCJdJykpO1xuICAgIGNvbnN0IHN1cHBvcnRlZE1lc3NhZ2VUeXBlcyA9IE9iamVjdC5rZXlzKFNFUVVFTkNFX0FSUk9XX1RZUEVTKTtcbiAgICBjb25zdCBhcnJvd01lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBzdXBwb3J0ZWRNZXNzYWdlVHlwZXMuaW5jbHVkZXMobWVzc2FnZS50eXBlLnRvU3RyaW5nKCkpKTtcbiAgICBhcnJvd05vZGVzLmZvckVhY2goKGFycm93Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFycm93TWVzc2FnZXNbaW5kZXhdO1xuICAgICAgICBjb25zdCBhcnJvdyA9IGNyZWF0ZUFycm93RWxlbWVudChhcnJvd05vZGUsIG1lc3NhZ2UpO1xuICAgICAgICBhcnJvd3MucHVzaChhcnJvdyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycm93cztcbn07XG5jb25zdCBjb21wdXRlTm90ZXMgPSAobWVzc2FnZXMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3Qgbm90ZU5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm5vdGVcIikpLm1hcCgobm9kZSkgPT4gbm9kZS5wYXJlbnRFbGVtZW50KTtcbiAgICBjb25zdCBub3RlVGV4dCA9IG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNRVNTQUdFX1RZUEUuTk9URSk7XG4gICAgY29uc3Qgbm90ZXMgPSBbXTtcbiAgICBub3RlTm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjdCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vdGVUZXh0W2luZGV4XS5tZXNzYWdlO1xuICAgICAgICBjb25zdCBub3RlID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudChyZWN0LCBcInJlY3RhbmdsZVwiLCB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgc3VidHlwZTogXCJub3RlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBub3Rlcy5wdXNoKG5vdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub3Rlcztcbn07XG5jb25zdCBwYXJzZUFjdGl2YXRpb25zID0gKGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYWN0aXZhdGlvbk5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKGBbY2xhc3MqPWFjdGl2YXRpb25dYCkpO1xuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gW107XG4gICAgYWN0aXZhdGlvbk5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQobm9kZSwgXCJyZWN0YW5nbGVcIiwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHN1YnR5cGU6IFwiYWN0aXZhdGlvblwiLFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aXZhdGlvbnMucHVzaChyZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZhdGlvbnM7XG59O1xuY29uc3QgcGFyc2VMb29wcyA9IChtZXNzYWdlcywgY29udGFpbmVyRWwpID0+IHtcbiAgICBjb25zdCBsaW5lTm9kZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubG9vcExpbmVcIikpO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgY29uc3QgdGV4dHMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRZID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieTFcIikpO1xuICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieDJcIikpO1xuICAgICAgICBjb25zdCBlbmRZID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieTJcIikpO1xuICAgICAgICBjb25zdCBsaW5lID0gY3JlYXRlTGluZUVsZW1lbnQobm9kZSwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkpO1xuICAgICAgICBsaW5lLnN0cm9rZVN0eWxlID0gXCJkb3R0ZWRcIjtcbiAgICAgICAgbGluZS5zdHJva2VDb2xvciA9IFwiI2FkYjViZFwiO1xuICAgICAgICBsaW5lLnN0cm9rZVdpZHRoID0gMjtcbiAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgICBjb25zdCBsb29wVGV4dE5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmxvb3BUZXh0XCIpKTtcbiAgICBjb25zdCBjcml0aWNhbE1lc3NhZ2VzID0gbWVzc2FnZXNcbiAgICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNRVNTQUdFX1RZUEUuQ1JJVElDQUxfU1RBUlQpXG4gICAgICAgIC5tYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2UubWVzc2FnZSk7XG4gICAgbG9vcFRleHROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBub2RlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gY3JlYXRlVGV4dEVsZW1lbnQobm9kZSwgdGV4dCk7XG4gICAgICAgIC8vIFRoZSB0ZXh0IGlzIHJlbmRlcmVkIGJldHdlZW4gWyBdIGluIERPTSBoZW5jZSBnZXR0aW5nIHRoZSB0ZXh0IGV4Y2x1ZGluZyB0aGUgWyBdXG4gICAgICAgIGNvbnN0IHJhd1RleHQgPSB0ZXh0Lm1hdGNoKC9cXFsoLio/KVxcXS8pPy5bMV0gfHwgXCJcIjtcbiAgICAgICAgY29uc3QgaXNDcml0aWNhbCA9IGNyaXRpY2FsTWVzc2FnZXMuaW5jbHVkZXMocmF3VGV4dCk7XG4gICAgICAgIC8vIEZvciBjcml0aWNhbCBsYWJlbCB0aGUgY29vcmRpbmF0ZXMgYXJlIG5vdCBhY2N1cmF0ZSBpbiBtZXJtYWlkIGFzIHRoZXJlIGlzXG4gICAgICAgIC8vIG5vIHBhZGRpbmcgbGVmdCBoZW5jZSBzaGlmdGluZyB0aGUgdGV4dCBuZXh0IHRvIGNyaXRpY2FsIGxhYmVsIGJ5IDE2cHggKGZvbnQgc2l6ZSlcbiAgICAgICAgaWYgKGlzQ3JpdGljYWwpIHtcbiAgICAgICAgICAgIHRleHRFbGVtZW50LnggKz0gMTY7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dHMucHVzaCh0ZXh0RWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgbGFiZWxCb3hlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWw/LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGFiZWxCb3hcIikpO1xuICAgIGNvbnN0IGxhYmVsVGV4dE5vZGUgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsPy5xdWVyeVNlbGVjdG9yQWxsKFwiLmxhYmVsVGV4dFwiKSk7XG4gICAgbGFiZWxCb3hlcy5mb3JFYWNoKChsYWJlbEJveCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbGFiZWxUZXh0Tm9kZVtpbmRleF0/LnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQobGFiZWxCb3gsIFwicmVjdGFuZ2xlXCIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxhYmVsVGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRhaW5lci5zdHJva2VDb2xvciA9IFwiI2FkYjViZFwiO1xuICAgICAgICBjb250YWluZXIuYmdDb2xvciA9IFwiI2U5ZWNlZlwiO1xuICAgICAgICAvLyBTbyB3aWR0aCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGxhYmVsXG4gICAgICAgIGNvbnRhaW5lci53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbm9kZXMucHVzaChjb250YWluZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGxpbmVzLCB0ZXh0cywgbm9kZXMgfTtcbn07XG5jb25zdCBjb21wdXRlSGlnaGxpZ2h0cyA9IChjb250YWluZXJFbCkgPT4ge1xuICAgIGNvbnN0IHJlY3RzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJlY3RcIikpXG4gICAgICAgIC8vIE9ubHkgZHJhd2luZyBzcGVjaWZpY2FsbHkgZm9yIGhpZ2hsaWdodHMgYXMgdGhlIHNhbWUgc2VsZWN0b3IgaXMgZm9yIGdyb3VwaW5nIGFzIHdlbGwuIEZvciBncm91cGluZyB3ZVxuICAgICAgICAvLyBkcmF3IGl0IG91cnNlbHZlc1xuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiBub2RlLnBhcmVudEVsZW1lbnQ/LnRhZ05hbWUgIT09IFwiZ1wiKTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIHJlY3RzLmZvckVhY2goKHJlY3QpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQocmVjdCwgXCJyZWN0YW5nbGVcIiwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHN1YnR5cGU6IFwiaGlnaGxpZ2h0XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub2Rlcztcbn07XG5leHBvcnQgY29uc3QgcGFyc2VNZXJtYWlkU2VxdWVuY2VEaWFncmFtID0gKGRpYWdyYW0sIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgZGlhZ3JhbS5wYXJzZSgpO1xuICAgIC8vIEdldCBtZXJtYWlkIHBhcnNlZCBkYXRhIGZyb20gcGFyc2VyIHNoYXJlZCB2YXJpYWJsZSBgeXlgXG4gICAgY29uc3QgbWVybWFpZFBhcnNlciA9IGRpYWdyYW0ucGFyc2VyLnl5O1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgY29uc3QgZ3JvdXBzID0gbWVybWFpZFBhcnNlci5nZXRCb3hlcygpO1xuICAgIGNvbnN0IGJnSGlnaHRsaWdodHMgPSBjb21wdXRlSGlnaGxpZ2h0cyhjb250YWluZXJFbCk7XG4gICAgY29uc3QgYWN0b3JEYXRhID0gbWVybWFpZFBhcnNlci5nZXRBY3RvcnMoKTtcbiAgICBjb25zdCB7IG5vZGVzOiBhY3RvcnMsIGxpbmVzIH0gPSBwYXJzZUFjdG9yKGFjdG9yRGF0YSwgY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gbWVybWFpZFBhcnNlci5nZXRNZXNzYWdlcygpO1xuICAgIGNvbnN0IGFycm93cyA9IGNvbXB1dGVBcnJvd3MobWVzc2FnZXMsIGNvbnRhaW5lckVsKTtcbiAgICBjb25zdCBub3RlcyA9IGNvbXB1dGVOb3RlcyhtZXNzYWdlcywgY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gcGFyc2VBY3RpdmF0aW9ucyhjb250YWluZXJFbCk7XG4gICAgY29uc3QgbG9vcHMgPSBwYXJzZUxvb3BzKG1lc3NhZ2VzLCBjb250YWluZXJFbCk7XG4gICAgbm9kZXMucHVzaChiZ0hpZ2h0bGlnaHRzKTtcbiAgICBub2Rlcy5wdXNoKC4uLmFjdG9ycyk7XG4gICAgbm9kZXMucHVzaChub3Rlcyk7XG4gICAgbm9kZXMucHVzaChhY3RpdmF0aW9ucyk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJzZXF1ZW5jZVwiLCBsaW5lcywgYXJyb3dzLCBub2RlcywgbG9vcHMsIGdyb3VwcyB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeEntities\": () => (/* binding */ decodeEntities),\n/* harmony export */ \"encodeEntities\": () => (/* binding */ encodeEntities),\n/* harmony export */ \"entityCodesToText\": () => (/* binding */ entityCodesToText),\n/* harmony export */ \"getTransformAttr\": () => (/* binding */ getTransformAttr)\n/* harmony export */ });\n// Convert mermaid entity codes to text e.g. \"#9829;\" to \"♥\"\nconst entityCodesToText = (input) => {\n input = decodeEntities(input);\n const modifiedInput = input\n .replace(/#(\\d+);/g, \"&#$1;\")\n .replace(/#([a-z]+);/g, \"&$1;\");\n const element = document.createElement(\"textarea\");\n element.innerHTML = modifiedInput;\n return element.value;\n};\nconst getTransformAttr = (el) => {\n const transformAttr = el.getAttribute(\"transform\");\n const translateMatch = transformAttr?.match(/translate\\(([\\d.-]+),\\s*([\\d.-]+)\\)/);\n let transformX = 0;\n let transformY = 0;\n if (translateMatch) {\n transformX = Number(translateMatch[1]);\n transformY = Number(translateMatch[2]);\n }\n return { transformX, transformY };\n};\n//TODO Once fixed in mermaid this will be removed\nconst encodeEntities = (text) => {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, (s) => {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, (s) => {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, (s) => {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return `fl°°${innerTxt}¶ß`;\n }\n return `fl°${innerTxt}¶ß`;\n });\n return txt;\n};\nconst decodeEntities = function (text) {\n return text.replace(/fl°°/g, \"#\").replace(/fl°/g, \"&\").replace(/¶ß/g, \";\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3V0aWxzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxvREFBb0Q7QUFDN0M7QUFDUDtBQUNBO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkMsNEJBQTRCLFNBQVM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1A7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQSxLQUFLO0FBQ0wseUNBQXlDO0FBQ3pDO0FBQ0EsS0FBSztBQUNMLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsU0FBUztBQUNsQztBQUNBLG9CQUFvQixTQUFTO0FBQzdCLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUCwwRUFBMEU7QUFDMUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3V0aWxzLmpzP2MxYjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29udmVydCBtZXJtYWlkIGVudGl0eSBjb2RlcyB0byB0ZXh0IGUuZy4gXCIjOTgyOTtcIiB0byBcIuKZpVwiXG5leHBvcnQgY29uc3QgZW50aXR5Q29kZXNUb1RleHQgPSAoaW5wdXQpID0+IHtcbiAgICBpbnB1dCA9IGRlY29kZUVudGl0aWVzKGlucHV0KTtcbiAgICBjb25zdCBtb2RpZmllZElucHV0ID0gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyMoXFxkKyk7L2csIFwiJiMkMTtcIilcbiAgICAgICAgLnJlcGxhY2UoLyMoW2Etel0rKTsvZywgXCImJDE7XCIpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBtb2RpZmllZElucHV0O1xuICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRUcmFuc2Zvcm1BdHRyID0gKGVsKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtQXR0ciA9IGVsLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtcbiAgICBjb25zdCB0cmFuc2xhdGVNYXRjaCA9IHRyYW5zZm9ybUF0dHI/Lm1hdGNoKC90cmFuc2xhdGVcXCgoW1xcZC4tXSspLFxccyooW1xcZC4tXSspXFwpLyk7XG4gICAgbGV0IHRyYW5zZm9ybVggPSAwO1xuICAgIGxldCB0cmFuc2Zvcm1ZID0gMDtcbiAgICBpZiAodHJhbnNsYXRlTWF0Y2gpIHtcbiAgICAgICAgdHJhbnNmb3JtWCA9IE51bWJlcih0cmFuc2xhdGVNYXRjaFsxXSk7XG4gICAgICAgIHRyYW5zZm9ybVkgPSBOdW1iZXIodHJhbnNsYXRlTWF0Y2hbMl0pO1xuICAgIH1cbiAgICByZXR1cm4geyB0cmFuc2Zvcm1YLCB0cmFuc2Zvcm1ZIH07XG59O1xuLy9UT0RPIE9uY2UgZml4ZWQgaW4gbWVybWFpZCB0aGlzIHdpbGwgYmUgcmVtb3ZlZFxuZXhwb3J0IGNvbnN0IGVuY29kZUVudGl0aWVzID0gKHRleHQpID0+IHtcbiAgICBsZXQgdHh0ID0gdGV4dDtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvc3R5bGUuKjpcXFMqIy4qOy9nLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvY2xhc3NEZWYuKjpcXFMqIy4qOy9nLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvI1xcdys7L2csIChzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyVHh0ID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgaXNJbnQgPSAvXlxcKz9cXGQrJC8udGVzdChpbm5lclR4dCk7XG4gICAgICAgIGlmIChpc0ludCkge1xuICAgICAgICAgICAgcmV0dXJuIGDvrILCsMKwJHtpbm5lclR4dH3CtsOfYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYO+sgsKwJHtpbm5lclR4dH3CtsOfYDtcbiAgICB9KTtcbiAgICByZXR1cm4gdHh0O1xufTtcbmV4cG9ydCBjb25zdCBkZWNvZGVFbnRpdGllcyA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgv76yCwrDCsC9nLCBcIiNcIikucmVwbGFjZSgv76yCwrAvZywgXCImXCIpLnJlcGxhY2UoL8K2w58vZywgXCI7XCIpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js": /*!****************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"customAlphabet\": () => (/* binding */ customAlphabet),\n/* harmony export */ \"customRandom\": () => (/* binding */ customRandom),\n/* harmony export */ \"nanoid\": () => (/* binding */ nanoid),\n/* harmony export */ \"random\": () => (/* binding */ random),\n/* harmony export */ \"urlAlphabet\": () => (/* reexport safe */ _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__.urlAlphabet)\n/* harmony export */ });\n/* harmony import */ var _url_alphabet_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./url-alphabet/index.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/url-alphabet/index.js\");\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvbmFub2lkL2luZGV4LmJyb3dzZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXFEO0FBQzlDO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9uYW5vaWQvaW5kZXguYnJvd3Nlci5qcz9mY2RjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHVybEFscGhhYmV0IH0gZnJvbSAnLi91cmwtYWxwaGFiZXQvaW5kZXguanMnXG5leHBvcnQgbGV0IHJhbmRvbSA9IGJ5dGVzID0+IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKVxuZXhwb3J0IGxldCBjdXN0b21SYW5kb20gPSAoYWxwaGFiZXQsIGRlZmF1bHRTaXplLCBnZXRSYW5kb20pID0+IHtcbiAgbGV0IG1hc2sgPSAoMiA8PCAoTWF0aC5sb2coYWxwaGFiZXQubGVuZ3RoIC0gMSkgLyBNYXRoLkxOMikpIC0gMVxuICBsZXQgc3RlcCA9IC1+KCgxLjYgKiBtYXNrICogZGVmYXVsdFNpemUpIC8gYWxwaGFiZXQubGVuZ3RoKVxuICByZXR1cm4gKHNpemUgPSBkZWZhdWx0U2l6ZSkgPT4ge1xuICAgIGxldCBpZCA9ICcnXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBieXRlcyA9IGdldFJhbmRvbShzdGVwKVxuICAgICAgbGV0IGogPSBzdGVwXG4gICAgICB3aGlsZSAoai0tKSB7XG4gICAgICAgIGlkICs9IGFscGhhYmV0W2J5dGVzW2pdICYgbWFza10gfHwgJydcbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gc2l6ZSkgcmV0dXJuIGlkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5leHBvcnQgbGV0IGN1c3RvbUFscGhhYmV0ID0gKGFscGhhYmV0LCBzaXplID0gMjEpID0+XG4gIGN1c3RvbVJhbmRvbShhbHBoYWJldCwgc2l6ZSwgcmFuZG9tKVxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PlxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKS5yZWR1Y2UoKGlkLCBieXRlKSA9PiB7XG4gICAgYnl0ZSAmPSA2M1xuICAgIGlmIChieXRlIDwgMzYpIHtcbiAgICAgIGlkICs9IGJ5dGUudG9TdHJpbmcoMzYpXG4gICAgfSBlbHNlIGlmIChieXRlIDwgNjIpIHtcbiAgICAgIGlkICs9IChieXRlIC0gMjYpLnRvU3RyaW5nKDM2KS50b1VwcGVyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChieXRlID4gNjIpIHtcbiAgICAgIGlkICs9ICctJ1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCArPSAnXydcbiAgICB9XG4gICAgcmV0dXJuIGlkXG4gIH0sICcnKVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\n"); /***/ }), /***/ "../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/url-alphabet/index.js": /*!*********************************************************************************************************!*\ !*** ../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/url-alphabet/index.js ***! \*********************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"urlAlphabet\": () => (/* binding */ urlAlphabet)\n/* harmony export */ });\nconst urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvbmFub2lkL3VybC1hbHBoYWJldC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L25vZGVfbW9kdWxlcy9uYW5vaWQvdXJsLWFscGhhYmV0L2luZGV4LmpzPzVhZmEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVybEFscGhhYmV0ID1cbiAgJ3VzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3QnXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/url-alphabet/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/array.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/array.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"map\": () => (/* binding */ map),\n/* harmony export */ \"slice\": () => (/* binding */ slice)\n/* harmony export */ });\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVPO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hcnJheS5qcz9mNjI1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/ascending.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-array/src/ascending.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ascending)\n/* harmony export */ });\nfunction ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcz9iYzc0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/ascending.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/bin.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/bin.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ bin)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-array/src/array.js\");\n/* harmony import */ var _bisect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bisect.js */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-array/src/constant.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extent.js */ \"../../../node_modules/d3-array/src/extent.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-array/src/identity.js\");\n/* harmony import */ var _nice_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nice.js */ \"../../../node_modules/d3-array/src/nice.js\");\n/* harmony import */ var _ticks_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ticks.js */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var _threshold_sturges_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./threshold/sturges.js */ \"../../../node_modules/d3-array/src/threshold/sturges.js\");\n\n\n\n\n\n\n\n\n\nfunction bin() {\n var value = _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n domain = _extent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n threshold = _threshold_sturges_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === _extent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) [x0, x1] = (0,_nice_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(x0, x1, tn);\n tz = (0,_ticks_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = (0,_ticks_js__WEBPACK_IMPORTED_MODULE_4__.tickIncrement)(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === _extent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) {\n const step = (0,_ticks_js__WEBPACK_IMPORTED_MODULE_4__.tickIncrement)(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[(0,_bisect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Array.isArray(_) ? _array_js__WEBPACK_IMPORTED_MODULE_7__.slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQWlDO0FBQ0E7QUFDSTtBQUNKO0FBQ0k7QUFDUjtBQUNtQjtBQUNIOztBQUU5QjtBQUNmLGNBQWMsb0RBQVE7QUFDdEIsZUFBZSxrREFBTTtBQUNyQixrQkFBa0IsNkRBQU87O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGtEQUFNLGFBQWEsb0RBQUk7QUFDNUMsV0FBVyxxREFBSzs7QUFFaEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHdEQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGtEQUFNO0FBQzFDLHVCQUF1Qix3REFBYTtBQUNwQztBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1Isb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sa0JBQWtCLE9BQU87QUFDekI7QUFDQSxlQUFlLHNEQUFNO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUVBQXFFLHdEQUFRO0FBQzdFOztBQUVBO0FBQ0Esc0VBQXNFLHdEQUFRO0FBQzlFOztBQUVBO0FBQ0EseUVBQXlFLHdEQUFRLG9CQUFvQixpREFBVTtBQUMvRzs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmluLmpzP2U5NWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBiaXNlY3QgZnJvbSBcIi4vYmlzZWN0LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBleHRlbnQgZnJvbSBcIi4vZXh0ZW50LmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2UuanNcIjtcbmltcG9ydCB0aWNrcywge3RpY2tJbmNyZW1lbnR9IGZyb20gXCIuL3RpY2tzLmpzXCI7XG5pbXBvcnQgc3R1cmdlcyBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW4oKSB7XG4gIHZhciB2YWx1ZSA9IGlkZW50aXR5LFxuICAgICAgZG9tYWluID0gZXh0ZW50LFxuICAgICAgdGhyZXNob2xkID0gc3R1cmdlcztcblxuICBmdW5jdGlvbiBoaXN0b2dyYW0oZGF0YSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkgZGF0YSA9IEFycmF5LmZyb20oZGF0YSk7XG5cbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICB4LFxuICAgICAgICBzdGVwLFxuICAgICAgICB2YWx1ZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YWx1ZXNbaV0gPSB2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICB9XG5cbiAgICB2YXIgeHogPSBkb21haW4odmFsdWVzKSxcbiAgICAgICAgeDAgPSB4elswXSxcbiAgICAgICAgeDEgPSB4elsxXSxcbiAgICAgICAgdHogPSB0aHJlc2hvbGQodmFsdWVzLCB4MCwgeDEpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcywgYW5kIG5pY2UgdGhlXG4gICAgLy8gZGVmYXVsdCBkb21haW4gYWNjb3JkaW5nbHkuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR6KSkge1xuICAgICAgY29uc3QgbWF4ID0geDEsIHRuID0gK3R6O1xuICAgICAgaWYgKGRvbWFpbiA9PT0gZXh0ZW50KSBbeDAsIHgxXSA9IG5pY2UoeDAsIHgxLCB0bik7XG4gICAgICB0eiA9IHRpY2tzKHgwLCB4MSwgdG4pO1xuXG4gICAgICAvLyBJZiB0aGUgZG9tYWluIGlzIGFsaWduZWQgd2l0aCB0aGUgZmlyc3QgdGljayAod2hpY2ggaXQgd2lsbCBieVxuICAgICAgLy8gZGVmYXVsdCksIHRoZW4gd2UgY2FuIHVzZSBxdWFudGl6YXRpb24gcmF0aGVyIHRoYW4gYmlzZWN0aW9uIHRvIGJpblxuICAgICAgLy8gdmFsdWVzLCB3aGljaCBpcyBzdWJzdGFudGlhbGx5IGZhc3Rlci5cbiAgICAgIGlmICh0elswXSA8PSB4MCkgc3RlcCA9IHRpY2tJbmNyZW1lbnQoeDAsIHgxLCB0bik7XG5cbiAgICAgIC8vIElmIHRoZSBsYXN0IHRocmVzaG9sZCBpcyBjb2luY2lkZW50IHdpdGggdGhlIGRvbWFpbuKAmXMgdXBwZXIgYm91bmQsIHRoZVxuICAgICAgLy8gbGFzdCBiaW4gd2lsbCBiZSB6ZXJvLXdpZHRoLiBJZiB0aGUgZGVmYXVsdCBkb21haW4gaXMgdXNlZCwgYW5kIHRoaXNcbiAgICAgIC8vIGxhc3QgdGhyZXNob2xkIGlzIGNvaW5jaWRlbnQgd2l0aCB0aGUgbWF4aW11bSBpbnB1dCB2YWx1ZSwgd2UgY2FuXG4gICAgICAvLyBleHRlbmQgdGhlIG5pY2VkIHVwcGVyIGJvdW5kIGJ5IG9uZSB0aWNrIHRvIGVuc3VyZSB1bmlmb3JtIGJpbiB3aWR0aHM7XG4gICAgICAvLyBvdGhlcndpc2UsIHdlIHNpbXBseSByZW1vdmUgdGhlIGxhc3QgdGhyZXNob2xkLiBOb3RlIHRoYXQgd2UgZG9u4oCZdFxuICAgICAgLy8gY29lcmNlIHZhbHVlcyBvciB0aGUgZG9tYWluIHRvIG51bWJlcnMsIGFuZCB0aHVzIG11c3QgYmUgY2FyZWZ1bCB0b1xuICAgICAgLy8gY29tcGFyZSBvcmRlciAoPj0pIHJhdGhlciB0aGFuIHN0cmljdCBlcXVhbGl0eSAoPT09KSFcbiAgICAgIGlmICh0elt0ei5sZW5ndGggLSAxXSA+PSB4MSkge1xuICAgICAgICBpZiAobWF4ID49IHgxICYmIGRvbWFpbiA9PT0gZXh0ZW50KSB7XG4gICAgICAgICAgY29uc3Qgc3RlcCA9IHRpY2tJbmNyZW1lbnQoeDAsIHgxLCB0bik7XG4gICAgICAgICAgaWYgKGlzRmluaXRlKHN0ZXApKSB7XG4gICAgICAgICAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgICAgICAgeDEgPSAoTWF0aC5mbG9vcih4MSAvIHN0ZXApICsgMSkgKiBzdGVwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICAgICAgICB4MSA9IChNYXRoLmNlaWwoeDEgKiAtc3RlcCkgKyAxKSAvIC1zdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ei5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgdGhyZXNob2xkcyBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlIGFuIGFycmF5IG93bmVkIGJ5IHRoZSB1c2VyIVxuICAgIHZhciBtID0gdHoubGVuZ3RoLCBhID0gMCwgYiA9IG07XG4gICAgd2hpbGUgKHR6W2FdIDw9IHgwKSArK2E7XG4gICAgd2hpbGUgKHR6W2IgLSAxXSA+IHgxKSAtLWI7XG4gICAgaWYgKGEgfHwgYiA8IG0pIHR6ID0gdHouc2xpY2UoYSwgYiksIG0gPSBiIC0gYTtcblxuICAgIHZhciBiaW5zID0gbmV3IEFycmF5KG0gKyAxKSxcbiAgICAgICAgYmluO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBiaW5zLlxuICAgIGZvciAoaSA9IDA7IGkgPD0gbTsgKytpKSB7XG4gICAgICBiaW4gPSBiaW5zW2ldID0gW107XG4gICAgICBiaW4ueDAgPSBpID4gMCA/IHR6W2kgLSAxXSA6IHgwO1xuICAgICAgYmluLngxID0gaSA8IG0gPyB0eltpXSA6IHgxO1xuICAgIH1cblxuICAgIC8vIEFzc2lnbiBkYXRhIHRvIGJpbnMgYnkgdmFsdWUsIGlnbm9yaW5nIGFueSBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgaWYgKGlzRmluaXRlKHN0ZXApKSB7XG4gICAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgIGlmICgoeCA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB4MCA8PSB4ICYmIHggPD0geDEpIHtcbiAgICAgICAgICAgIGJpbnNbTWF0aC5taW4obSwgTWF0aC5mbG9vcigoeCAtIHgwKSAvIHN0ZXApKV0ucHVzaChkYXRhW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgIGlmICgoeCA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB4MCA8PSB4ICYmIHggPD0geDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKCh4MCAtIHgpICogc3RlcCk7XG4gICAgICAgICAgICBiaW5zW01hdGgubWluKG0sIGogKyAodHpbal0gPD0geCkpXS5wdXNoKGRhdGFbaV0pOyAvLyBoYW5kbGUgb2ZmLWJ5LW9uZSBkdWUgdG8gcm91bmRpbmdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKHggPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgeDAgPD0geCAmJiB4IDw9IHgxKSB7XG4gICAgICAgICAgYmluc1tiaXNlY3QodHosIHgsIDAsIG0pXS5wdXNoKGRhdGFbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbnM7XG4gIH1cblxuICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdmFsdWU7XG4gIH07XG5cbiAgaGlzdG9ncmFtLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtfWzBdLCBfWzFdXSksIGhpc3RvZ3JhbSkgOiBkb21haW47XG4gIH07XG5cbiAgaGlzdG9ncmFtLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChBcnJheS5pc0FycmF5KF8pID8gc2xpY2UuY2FsbChfKSA6IF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIHJldHVybiBoaXN0b2dyYW07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/bin.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/bisect.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/bisect.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"bisectCenter\": () => (/* binding */ bisectCenter),\n/* harmony export */ \"bisectLeft\": () => (/* binding */ bisectLeft),\n/* harmony export */ \"bisectRight\": () => (/* binding */ bisectRight),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _bisector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisector.js */ \"../../../node_modules/d3-array/src/bisector.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-array/src/number.js\");\n\n\n\n\nconst ascendingBisect = (0,_bisector_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ascending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nconst bisectRight = ascendingBisect.right;\nconst bisectLeft = ascendingBisect.left;\nconst bisectCenter = (0,_bisector_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_number_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]).center;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (bisectRight);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF1QztBQUNGO0FBQ0o7O0FBRWpDLHdCQUF3Qix3REFBUSxDQUFDLHFEQUFTO0FBQ25DO0FBQ0E7QUFDQSxxQkFBcUIsd0RBQVEsQ0FBQyxrREFBTTtBQUMzQyxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3QuanM/MTk3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG5jb25zdCBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IGNvbnN0IGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdExlZnQgPSBhc2NlbmRpbmdCaXNlY3QubGVmdDtcbmV4cG9ydCBjb25zdCBiaXNlY3RDZW50ZXIgPSBiaXNlY3RvcihudW1iZXIpLmNlbnRlcjtcbmV4cG9ydCBkZWZhdWx0IGJpc2VjdFJpZ2h0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/bisect.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/bisector.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/bisector.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ bisector)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _descending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./descending.js */ \"../../../node_modules/d3-array/src/descending.js\");\n\n\n\nfunction bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n compare2 = (d, x) => (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] || f === _descending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUM7QUFDRTs7QUFFMUI7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFEQUFTO0FBQ3hCLHlCQUF5Qix5REFBUztBQUNsQztBQUNBLElBQUk7QUFDSixxQkFBcUIscURBQVMsVUFBVSxzREFBVTtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanM/MjUwZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGRlc2NlbmRpbmcgZnJvbSBcIi4vZGVzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaXNlY3RvcihmKSB7XG4gIGxldCBjb21wYXJlMSwgY29tcGFyZTIsIGRlbHRhO1xuXG4gIC8vIElmIGFuIGFjY2Vzc29yIGlzIHNwZWNpZmllZCwgcHJvbW90ZSBpdCB0byBhIGNvbXBhcmF0b3IuIEluIHRoaXMgY2FzZSB3ZVxuICAvLyBjYW4gdGVzdCB3aGV0aGVyIHRoZSBzZWFyY2ggdmFsdWUgaXMgKHNlbGYtKSBjb21wYXJhYmxlLiBXZSBjYW7igJl0IGRvIHRoaXNcbiAgLy8gZm9yIGEgY29tcGFyYXRvciAoZXhjZXB0IGZvciBzcGVjaWZpYywga25vd24gY29tcGFyYXRvcnMpIGJlY2F1c2Ugd2UgY2Fu4oCZdFxuICAvLyB0ZWxsIGlmIHRoZSBjb21wYXJhdG9yIGlzIHN5bW1ldHJpYywgYW5kIGFuIGFzeW1tZXRyaWMgY29tcGFyYXRvciBjYW7igJl0IGJlXG4gIC8vIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEgc2luZ2xlIHZhbHVlIGlzIGNvbXBhcmFibGUuXG4gIGlmIChmLmxlbmd0aCAhPT0gMikge1xuICAgIGNvbXBhcmUxID0gYXNjZW5kaW5nO1xuICAgIGNvbXBhcmUyID0gKGQsIHgpID0+IGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgICBkZWx0YSA9IChkLCB4KSA9PiBmKGQpIC0geDtcbiAgfSBlbHNlIHtcbiAgICBjb21wYXJlMSA9IGYgPT09IGFzY2VuZGluZyB8fCBmID09PSBkZXNjZW5kaW5nID8gZiA6IHplcm87XG4gICAgY29tcGFyZTIgPSBmO1xuICAgIGRlbHRhID0gZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgaWYgKGxvIDwgaGkpIHtcbiAgICAgIGlmIChjb21wYXJlMSh4LCB4KSAhPT0gMCkgcmV0dXJuIGhpO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlMihhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8PSAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9IHdoaWxlIChsbyA8IGhpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudGVyKGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGNvbnN0IGkgPSBsZWZ0KGEsIHgsIGxvLCBoaSAtIDEpO1xuICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpO1xuICB9XG5cbiAgcmV0dXJuIHtsZWZ0LCBjZW50ZXIsIHJpZ2h0fTtcbn1cblxuZnVuY3Rpb24gemVybygpIHtcbiAgcmV0dXJuIDA7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/bisector.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/blur.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/blur.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"blur\": () => (/* binding */ blur),\n/* harmony export */ \"blur2\": () => (/* binding */ blur2),\n/* harmony export */ \"blurImage\": () => (/* binding */ blurImage)\n/* harmony export */ });\nfunction blur(values, r) {\n if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\n let length = values.length;\n if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\n if (!length || !r) return values;\n const blur = blurf(r);\n const temp = values.slice();\n blur(values, temp, 0, length, 1);\n blur(temp, values, 0, length, 1);\n blur(values, temp, 0, length, 1);\n return values;\n}\n\nconst blur2 = Blur2(blurf);\n\nconst blurImage = Blur2(blurfImage);\n\nfunction Blur2(blur) {\n return function(data, rx, ry = rx) {\n if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\n if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\n let {data: values, width, height} = data;\n if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\n if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\n if (!width || !height || (!rx && !ry)) return data;\n const blurx = rx && blur(rx);\n const blury = ry && blur(ry);\n const temp = values.slice();\n if (blurx && blury) {\n blurh(blurx, temp, values, width, height);\n blurh(blurx, values, temp, width, height);\n blurh(blurx, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n blurv(blury, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n } else if (blurx) {\n blurh(blurx, values, temp, width, height);\n blurh(blurx, temp, values, width, height);\n blurh(blurx, values, temp, width, height);\n } else if (blury) {\n blurv(blury, values, temp, width, height);\n blurv(blury, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n }\n return data;\n };\n}\n\nfunction blurh(blur, T, S, w, h) {\n for (let y = 0, n = w * h; y < n;) {\n blur(T, S, y, y += w, 1);\n }\n}\n\nfunction blurv(blur, T, S, w, h) {\n for (let x = 0, n = w * h; x < w; ++x) {\n blur(T, S, x, x + n, w);\n }\n}\n\nfunction blurfImage(radius) {\n const blur = blurf(radius);\n return (T, S, start, stop, step) => {\n start <<= 2, stop <<= 2, step <<= 2;\n blur(T, S, start + 0, stop + 0, step);\n blur(T, S, start + 1, stop + 1, step);\n blur(T, S, start + 2, stop + 2, step);\n blur(T, S, start + 3, stop + 3, step);\n };\n}\n\n// Given a target array T, a source array S, sets each value T[i] to the average\n// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\n// according to r - ⌊radius⌋.\nfunction blurf(radius) {\n const radius0 = Math.floor(radius);\n if (radius0 === radius) return bluri(radius);\n const t = radius - radius0;\n const w = 2 * radius + 1;\n return (T, S, start, stop, step) => { // stop must be aligned!\n if (!((stop -= step) >= start)) return; // inclusive stop\n let sum = radius0 * S[start];\n const s0 = step * radius0;\n const s1 = s0 + step;\n for (let i = start, j = start + s0; i < j; i += step) {\n sum += S[Math.min(stop, i)];\n }\n for (let i = start, j = stop; i <= j; i += step) {\n sum += S[Math.min(stop, i + s0)];\n T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\n sum -= S[Math.max(start, i - s0)];\n }\n };\n}\n\n// Like blurf, but optimized for integer radius.\nfunction bluri(radius) {\n const w = 2 * radius + 1;\n return (T, S, start, stop, step) => { // stop must be aligned!\n if (!((stop -= step) >= start)) return; // inclusive stop\n let sum = radius * S[start];\n const s = step * radius;\n for (let i = start, j = start + s; i < j; i += step) {\n sum += S[Math.min(stop, i)];\n }\n for (let i = start, j = stop; i <= j; i += step) {\n sum += S[Math.min(stop, i + s)];\n T[i] = sum / w;\n sum -= S[Math.max(start, i - s)];\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ibHVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTzs7QUFFQTs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNkJBQTZCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2QixNQUFNO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU8sK0JBQStCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qyw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0Esa0NBQWtDLFFBQVE7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmx1ci5qcz81NTZiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBibHVyKHZhbHVlcywgcikge1xuICBpZiAoISgociA9ICtyKSA+PSAwKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIHJcIik7XG4gIGxldCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuICBpZiAoISgobGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpKSA+PSAwKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKCFsZW5ndGggfHwgIXIpIHJldHVybiB2YWx1ZXM7XG4gIGNvbnN0IGJsdXIgPSBibHVyZihyKTtcbiAgY29uc3QgdGVtcCA9IHZhbHVlcy5zbGljZSgpO1xuICBibHVyKHZhbHVlcywgdGVtcCwgMCwgbGVuZ3RoLCAxKTtcbiAgYmx1cih0ZW1wLCB2YWx1ZXMsIDAsIGxlbmd0aCwgMSk7XG4gIGJsdXIodmFsdWVzLCB0ZW1wLCAwLCBsZW5ndGgsIDEpO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgY29uc3QgYmx1cjIgPSBCbHVyMihibHVyZik7XG5cbmV4cG9ydCBjb25zdCBibHVySW1hZ2UgPSBCbHVyMihibHVyZkltYWdlKTtcblxuZnVuY3Rpb24gQmx1cjIoYmx1cikge1xuICByZXR1cm4gZnVuY3Rpb24oZGF0YSwgcngsIHJ5ID0gcngpIHtcbiAgICBpZiAoISgocnggPSArcngpID49IDApKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImludmFsaWQgcnhcIik7XG4gICAgaWYgKCEoKHJ5ID0gK3J5KSA+PSAwKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIHJ5XCIpO1xuICAgIGxldCB7ZGF0YTogdmFsdWVzLCB3aWR0aCwgaGVpZ2h0fSA9IGRhdGE7XG4gICAgaWYgKCEoKHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCkpID49IDApKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImludmFsaWQgd2lkdGhcIik7XG4gICAgaWYgKCEoKGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICE9PSB1bmRlZmluZWQgPyBoZWlnaHQgOiB2YWx1ZXMubGVuZ3RoIC8gd2lkdGgpKSA+PSAwKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIGhlaWdodFwiKTtcbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQgfHwgKCFyeCAmJiAhcnkpKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBibHVyeCA9IHJ4ICYmIGJsdXIocngpO1xuICAgIGNvbnN0IGJsdXJ5ID0gcnkgJiYgYmx1cihyeSk7XG4gICAgY29uc3QgdGVtcCA9IHZhbHVlcy5zbGljZSgpO1xuICAgIGlmIChibHVyeCAmJiBibHVyeSkge1xuICAgICAgYmx1cmgoYmx1cngsIHRlbXAsIHZhbHVlcywgd2lkdGgsIGhlaWdodCk7XG4gICAgICBibHVyaChibHVyeCwgdmFsdWVzLCB0ZW1wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGJsdXJoKGJsdXJ4LCB0ZW1wLCB2YWx1ZXMsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgYmx1cnYoYmx1cnksIHZhbHVlcywgdGVtcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBibHVydihibHVyeSwgdGVtcCwgdmFsdWVzLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGJsdXJ2KGJsdXJ5LCB2YWx1ZXMsIHRlbXAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH0gZWxzZSBpZiAoYmx1cngpIHtcbiAgICAgIGJsdXJoKGJsdXJ4LCB2YWx1ZXMsIHRlbXAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgYmx1cmgoYmx1cngsIHRlbXAsIHZhbHVlcywgd2lkdGgsIGhlaWdodCk7XG4gICAgICBibHVyaChibHVyeCwgdmFsdWVzLCB0ZW1wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGJsdXJ5KSB7XG4gICAgICBibHVydihibHVyeSwgdmFsdWVzLCB0ZW1wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGJsdXJ2KGJsdXJ5LCB0ZW1wLCB2YWx1ZXMsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgYmx1cnYoYmx1cnksIHZhbHVlcywgdGVtcCwgd2lkdGgsIGhlaWdodCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9O1xufVxuXG5mdW5jdGlvbiBibHVyaChibHVyLCBULCBTLCB3LCBoKSB7XG4gIGZvciAobGV0IHkgPSAwLCBuID0gdyAqIGg7IHkgPCBuOykge1xuICAgIGJsdXIoVCwgUywgeSwgeSArPSB3LCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBibHVydihibHVyLCBULCBTLCB3LCBoKSB7XG4gIGZvciAobGV0IHggPSAwLCBuID0gdyAqIGg7IHggPCB3OyArK3gpIHtcbiAgICBibHVyKFQsIFMsIHgsIHggKyBuLCB3KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBibHVyZkltYWdlKHJhZGl1cykge1xuICBjb25zdCBibHVyID0gYmx1cmYocmFkaXVzKTtcbiAgcmV0dXJuIChULCBTLCBzdGFydCwgc3RvcCwgc3RlcCkgPT4ge1xuICAgIHN0YXJ0IDw8PSAyLCBzdG9wIDw8PSAyLCBzdGVwIDw8PSAyO1xuICAgIGJsdXIoVCwgUywgc3RhcnQgKyAwLCBzdG9wICsgMCwgc3RlcCk7XG4gICAgYmx1cihULCBTLCBzdGFydCArIDEsIHN0b3AgKyAxLCBzdGVwKTtcbiAgICBibHVyKFQsIFMsIHN0YXJ0ICsgMiwgc3RvcCArIDIsIHN0ZXApO1xuICAgIGJsdXIoVCwgUywgc3RhcnQgKyAzLCBzdG9wICsgMywgc3RlcCk7XG4gIH07XG59XG5cbi8vIEdpdmVuIGEgdGFyZ2V0IGFycmF5IFQsIGEgc291cmNlIGFycmF5IFMsIHNldHMgZWFjaCB2YWx1ZSBUW2ldIHRvIHRoZSBhdmVyYWdlXG4vLyBvZiB7U1tpIC0gcl0sIOKApiwgU1tpXSwg4oCmLCBTW2kgKyByXX0sIHdoZXJlIHIgPSDijIpyYWRpdXPijIssIHN0YXJ0IDw9IGkgPCBzdG9wLFxuLy8gZm9yIGVhY2ggaSwgaSArIHN0ZXAsIGkgKyAyICogc3RlcCwgZXRjLiwgYW5kIHdoZXJlIFNbal0gaXMgY2xhbXBlZCBiZXR3ZWVuXG4vLyBTW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgU1tzdG9wXSAoZXhjbHVzaXZlKS4gSWYgdGhlIGdpdmVuIHJhZGl1cyBpcyBub3QgYW5cbi8vIGludGVnZXIsIFNbaSAtIHIgLSAxXSBhbmQgU1tpICsgciArIDFdIGFyZSBhZGRlZCB0byB0aGUgc3VtLCBlYWNoIHdlaWdodGVkXG4vLyBhY2NvcmRpbmcgdG8gciAtIOKMinJhZGl1c+KMiy5cbmZ1bmN0aW9uIGJsdXJmKHJhZGl1cykge1xuICBjb25zdCByYWRpdXMwID0gTWF0aC5mbG9vcihyYWRpdXMpO1xuICBpZiAocmFkaXVzMCA9PT0gcmFkaXVzKSByZXR1cm4gYmx1cmkocmFkaXVzKTtcbiAgY29uc3QgdCA9IHJhZGl1cyAtIHJhZGl1czA7XG4gIGNvbnN0IHcgPSAyICogcmFkaXVzICsgMTtcbiAgcmV0dXJuIChULCBTLCBzdGFydCwgc3RvcCwgc3RlcCkgPT4geyAvLyBzdG9wIG11c3QgYmUgYWxpZ25lZCFcbiAgICBpZiAoISgoc3RvcCAtPSBzdGVwKSA+PSBzdGFydCkpIHJldHVybjsgLy8gaW5jbHVzaXZlIHN0b3BcbiAgICBsZXQgc3VtID0gcmFkaXVzMCAqIFNbc3RhcnRdO1xuICAgIGNvbnN0IHMwID0gc3RlcCAqIHJhZGl1czA7XG4gICAgY29uc3QgczEgPSBzMCArIHN0ZXA7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0LCBqID0gc3RhcnQgKyBzMDsgaSA8IGo7IGkgKz0gc3RlcCkge1xuICAgICAgc3VtICs9IFNbTWF0aC5taW4oc3RvcCwgaSldO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gc3RhcnQsIGogPSBzdG9wOyBpIDw9IGo7IGkgKz0gc3RlcCkge1xuICAgICAgc3VtICs9IFNbTWF0aC5taW4oc3RvcCwgaSArIHMwKV07XG4gICAgICBUW2ldID0gKHN1bSArIHQgKiAoU1tNYXRoLm1heChzdGFydCwgaSAtIHMxKV0gKyBTW01hdGgubWluKHN0b3AsIGkgKyBzMSldKSkgLyB3O1xuICAgICAgc3VtIC09IFNbTWF0aC5tYXgoc3RhcnQsIGkgLSBzMCldO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gTGlrZSBibHVyZiwgYnV0IG9wdGltaXplZCBmb3IgaW50ZWdlciByYWRpdXMuXG5mdW5jdGlvbiBibHVyaShyYWRpdXMpIHtcbiAgY29uc3QgdyA9IDIgKiByYWRpdXMgKyAxO1xuICByZXR1cm4gKFQsIFMsIHN0YXJ0LCBzdG9wLCBzdGVwKSA9PiB7IC8vIHN0b3AgbXVzdCBiZSBhbGlnbmVkIVxuICAgIGlmICghKChzdG9wIC09IHN0ZXApID49IHN0YXJ0KSkgcmV0dXJuOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIGxldCBzdW0gPSByYWRpdXMgKiBTW3N0YXJ0XTtcbiAgICBjb25zdCBzID0gc3RlcCAqIHJhZGl1cztcbiAgICBmb3IgKGxldCBpID0gc3RhcnQsIGogPSBzdGFydCArIHM7IGkgPCBqOyBpICs9IHN0ZXApIHtcbiAgICAgIHN1bSArPSBTW01hdGgubWluKHN0b3AsIGkpXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0LCBqID0gc3RvcDsgaSA8PSBqOyBpICs9IHN0ZXApIHtcbiAgICAgIHN1bSArPSBTW01hdGgubWluKHN0b3AsIGkgKyBzKV07XG4gICAgICBUW2ldID0gc3VtIC8gdztcbiAgICAgIHN1bSAtPSBTW01hdGgubWF4KHN0YXJ0LCBpIC0gcyldO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/blur.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ constant)\n/* harmony export */ });\nfunction constant(x) {\n return () => x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvY29uc3RhbnQuanM/MGQzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gIHJldHVybiAoKSA9PiB4O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/count.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/count.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ count)\n/* harmony export */ });\nfunction count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jb3VudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jb3VudC5qcz9mNTYyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvdW50KHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgY291bnQgPSAwO1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgICsrY291bnQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICArK2NvdW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY291bnQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/count.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/cross.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/cross.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ cross)\n/* harmony export */ });\nfunction length(array) {\n return array.length | 0;\n}\n\nfunction empty(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return values => reduce(...values);\n}\n\nfunction cross(...values) {\n const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n const lengths = values.map(length);\n const j = values.length - 1;\n const index = new Array(j + 1).fill(0);\n const product = [];\n if (j < 0 || lengths.some(empty)) return product;\n while (true) {\n product.push(index.map((j, i) => values[i][j]));\n let i = j;\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcz84NTkyIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGxlbmd0aChhcnJheSkge1xuICByZXR1cm4gYXJyYXkubGVuZ3RoIHwgMDtcbn1cblxuZnVuY3Rpb24gZW1wdHkobGVuZ3RoKSB7XG4gIHJldHVybiAhKGxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBhcnJheWlmeSh2YWx1ZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZXMgIT09IFwib2JqZWN0XCIgfHwgXCJsZW5ndGhcIiBpbiB2YWx1ZXMgPyB2YWx1ZXMgOiBBcnJheS5mcm9tKHZhbHVlcyk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIocmVkdWNlKSB7XG4gIHJldHVybiB2YWx1ZXMgPT4gcmVkdWNlKC4uLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyb3NzKC4uLnZhbHVlcykge1xuICBjb25zdCByZWR1Y2UgPSB0eXBlb2YgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXSA9PT0gXCJmdW5jdGlvblwiICYmIHJlZHVjZXIodmFsdWVzLnBvcCgpKTtcbiAgdmFsdWVzID0gdmFsdWVzLm1hcChhcnJheWlmeSk7XG4gIGNvbnN0IGxlbmd0aHMgPSB2YWx1ZXMubWFwKGxlbmd0aCk7XG4gIGNvbnN0IGogPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgY29uc3QgaW5kZXggPSBuZXcgQXJyYXkoaiArIDEpLmZpbGwoMCk7XG4gIGNvbnN0IHByb2R1Y3QgPSBbXTtcbiAgaWYgKGogPCAwIHx8IGxlbmd0aHMuc29tZShlbXB0eSkpIHJldHVybiBwcm9kdWN0O1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByb2R1Y3QucHVzaChpbmRleC5tYXAoKGosIGkpID0+IHZhbHVlc1tpXVtqXSkpO1xuICAgIGxldCBpID0gajtcbiAgICB3aGlsZSAoKytpbmRleFtpXSA9PT0gbGVuZ3Roc1tpXSkge1xuICAgICAgaWYgKGkgPT09IDApIHJldHVybiByZWR1Y2UgPyBwcm9kdWN0Lm1hcChyZWR1Y2UpIDogcHJvZHVjdDtcbiAgICAgIGluZGV4W2ktLV0gPSAwO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/cross.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/cumsum.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/cumsum.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ cumsum)\n/* harmony export */ });\nfunction cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jdW1zdW0uanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2N1bXN1bS5qcz8wNzA4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1bXN1bSh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIHN1bSA9IDAsIGluZGV4ID0gMDtcbiAgcmV0dXJuIEZsb2F0NjRBcnJheS5mcm9tKHZhbHVlcywgdmFsdWVvZiA9PT0gdW5kZWZpbmVkXG4gICAgPyB2ID0+IChzdW0gKz0gK3YgfHwgMClcbiAgICA6IHYgPT4gKHN1bSArPSArdmFsdWVvZih2LCBpbmRleCsrLCB2YWx1ZXMpIHx8IDApKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/cumsum.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/descending.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-array/src/descending.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ descending)\n/* harmony export */ });\nfunction descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXNjZW5kaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanM/YjNiZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU5cbiAgICA6IGIgPCBhID8gLTFcbiAgICA6IGIgPiBhID8gMVxuICAgIDogYiA+PSBhID8gMFxuICAgIDogTmFOO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/descending.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/deviation.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-array/src/deviation.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ deviation)\n/* harmony export */ });\n/* harmony import */ var _variance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variance.js */ \"../../../node_modules/d3-array/src/variance.js\");\n\n\nfunction deviation(values, valueof) {\n const v = (0,_variance_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXRCO0FBQ2YsWUFBWSx3REFBUTtBQUNwQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzPzQ1NzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhcmlhbmNlIGZyb20gXCIuL3ZhcmlhbmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldmlhdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgY29uc3QgdiA9IHZhcmlhbmNlKHZhbHVlcywgdmFsdWVvZik7XG4gIHJldHVybiB2ID8gTWF0aC5zcXJ0KHYpIDogdjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/deviation.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/difference.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-array/src/difference.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ difference)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\nfunction difference(values, ...others) {\n values = new internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet(values);\n for (const other of others) {\n for (const value of other) {\n values.delete(value);\n }\n }\n return values;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kaWZmZXJlbmNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW9DOztBQUVyQjtBQUNmLGVBQWUsZ0RBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kaWZmZXJlbmNlLmpzPzZjNGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbnRlcm5TZXR9IGZyb20gXCJpbnRlcm5tYXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZSh2YWx1ZXMsIC4uLm90aGVycykge1xuICB2YWx1ZXMgPSBuZXcgSW50ZXJuU2V0KHZhbHVlcyk7XG4gIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvdGhlcikge1xuICAgICAgdmFsdWVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/difference.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/disjoint.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/disjoint.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ disjoint)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\nfunction disjoint(values, other) {\n const iterator = other[Symbol.iterator](), set = new internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet();\n for (const v of values) {\n if (set.has(v)) return false;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) break;\n if (Object.is(v, value)) return false;\n set.add(value);\n }\n }\n return true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kaXNqb2ludC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvQzs7QUFFckI7QUFDZix1REFBdUQsZ0RBQVM7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGlzam9pbnQuanM/NzNlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVyblNldH0gZnJvbSBcImludGVybm1hcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNqb2ludCh2YWx1ZXMsIG90aGVyKSB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gb3RoZXJbU3ltYm9sLml0ZXJhdG9yXSgpLCBzZXQgPSBuZXcgSW50ZXJuU2V0KCk7XG4gIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICBpZiAoc2V0Lmhhcyh2KSkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCB2YWx1ZSwgZG9uZTtcbiAgICB3aGlsZSAoKHt2YWx1ZSwgZG9uZX0gPSBpdGVyYXRvci5uZXh0KCkpKSB7XG4gICAgICBpZiAoZG9uZSkgYnJlYWs7XG4gICAgICBpZiAoT2JqZWN0LmlzKHYsIHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2V0LmFkZCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/disjoint.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/every.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/every.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ every)\n/* harmony export */ });\nfunction every(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (!test(value, ++index, values)) {\n return false;\n }\n }\n return true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ldmVyeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ldmVyeS5qcz8wN2E1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV2ZXJ5KHZhbHVlcywgdGVzdCkge1xuICBpZiAodHlwZW9mIHRlc3QgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRlc3QgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIGlmICghdGVzdCh2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/every.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/extent.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/extent.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ extent)\n/* harmony export */ });\nfunction extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanM/NGE5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbnQodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IHZhbHVlKSBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gdmFsdWUpIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/extent.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/filter.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/filter.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ filter)\n/* harmony export */ });\nfunction filter(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n const array = [];\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n array.push(value);\n }\n }\n return array;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9maWx0ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9maWx0ZXIuanM/YTVmOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXIodmFsdWVzLCB0ZXN0KSB7XG4gIGlmICh0eXBlb2YgdGVzdCAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGVzdCBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgY29uc3QgYXJyYXkgPSBbXTtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgaWYgKHRlc3QodmFsdWUsICsraW5kZXgsIHZhbHVlcykpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/filter.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/fsum.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/fsum.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Adder\": () => (/* binding */ Adder),\n/* harmony export */ \"fcumsum\": () => (/* binding */ fcumsum),\n/* harmony export */ \"fsum\": () => (/* binding */ fsum)\n/* harmony export */ });\n// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nclass Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nfunction fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nfunction fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9mc3VtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2ZzdW0uanM/Y2EyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL2NweXRob24vYmxvYi9hNzRlZWEyMzhmNWJhYmExNTc5N2UyZThiNTcwZDE1M2JjODY5MGE3L01vZHVsZXMvbWF0aG1vZHVsZS5jI0wxNDIzXG5leHBvcnQgY2xhc3MgQWRkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9wYXJ0aWFscyA9IG5ldyBGbG9hdDY0QXJyYXkoMzIpO1xuICAgIHRoaXMuX24gPSAwO1xuICB9XG4gIGFkZCh4KSB7XG4gICAgY29uc3QgcCA9IHRoaXMuX3BhcnRpYWxzO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuX24gJiYgaiA8IDMyOyBqKyspIHtcbiAgICAgIGNvbnN0IHkgPSBwW2pdLFxuICAgICAgICBoaSA9IHggKyB5LFxuICAgICAgICBsbyA9IE1hdGguYWJzKHgpIDwgTWF0aC5hYnMoeSkgPyB4IC0gKGhpIC0geSkgOiB5IC0gKGhpIC0geCk7XG4gICAgICBpZiAobG8pIHBbaSsrXSA9IGxvO1xuICAgICAgeCA9IGhpO1xuICAgIH1cbiAgICBwW2ldID0geDtcbiAgICB0aGlzLl9uID0gaSArIDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdmFsdWVPZigpIHtcbiAgICBjb25zdCBwID0gdGhpcy5fcGFydGlhbHM7XG4gICAgbGV0IG4gPSB0aGlzLl9uLCB4LCB5LCBsbywgaGkgPSAwO1xuICAgIGlmIChuID4gMCkge1xuICAgICAgaGkgPSBwWy0tbl07XG4gICAgICB3aGlsZSAobiA+IDApIHtcbiAgICAgICAgeCA9IGhpO1xuICAgICAgICB5ID0gcFstLW5dO1xuICAgICAgICBoaSA9IHggKyB5O1xuICAgICAgICBsbyA9IHkgLSAoaGkgLSB4KTtcbiAgICAgICAgaWYgKGxvKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChuID4gMCAmJiAoKGxvIDwgMCAmJiBwW24gLSAxXSA8IDApIHx8IChsbyA+IDAgJiYgcFtuIC0gMV0gPiAwKSkpIHtcbiAgICAgICAgeSA9IGxvICogMjtcbiAgICAgICAgeCA9IGhpICsgeTtcbiAgICAgICAgaWYgKHkgPT0geCAtIGhpKSBoaSA9IHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoaTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnN1bSh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgY29uc3QgYWRkZXIgPSBuZXcgQWRkZXIoKTtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIGFkZGVyLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpIHtcbiAgICAgICAgYWRkZXIuYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICthZGRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZjdW1zdW0odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGNvbnN0IGFkZGVyID0gbmV3IEFkZGVyKCk7XG4gIGxldCBpbmRleCA9IC0xO1xuICByZXR1cm4gRmxvYXQ2NEFycmF5LmZyb20odmFsdWVzLCB2YWx1ZW9mID09PSB1bmRlZmluZWRcbiAgICAgID8gdiA9PiBhZGRlci5hZGQoK3YgfHwgMClcbiAgICAgIDogdiA9PiBhZGRlci5hZGQoK3ZhbHVlb2YodiwgKytpbmRleCwgdmFsdWVzKSB8fCAwKVxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/fsum.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/greatest.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/greatest.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ greatest)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n\n\nfunction greatest(values, compare = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, maxValue) > 0\n : (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncmVhdGVzdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1Qzs7QUFFeEIsb0NBQW9DLHFEQUFTO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5REFBUztBQUNyQixZQUFZLHlEQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2dyZWF0ZXN0LmpzP2M4ZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ3JlYXRlc3QodmFsdWVzLCBjb21wYXJlID0gYXNjZW5kaW5nKSB7XG4gIGxldCBtYXg7XG4gIGxldCBkZWZpbmVkID0gZmFsc2U7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBtYXhWYWx1ZTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbXBhcmUoZWxlbWVudCk7XG4gICAgICBpZiAoZGVmaW5lZFxuICAgICAgICAgID8gYXNjZW5kaW5nKHZhbHVlLCBtYXhWYWx1ZSkgPiAwXG4gICAgICAgICAgOiBhc2NlbmRpbmcodmFsdWUsIHZhbHVlKSA9PT0gMCkge1xuICAgICAgICBtYXggPSBlbGVtZW50O1xuICAgICAgICBtYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmIChkZWZpbmVkXG4gICAgICAgICAgPyBjb21wYXJlKHZhbHVlLCBtYXgpID4gMFxuICAgICAgICAgIDogY29tcGFyZSh2YWx1ZSwgdmFsdWUpID09PSAwKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICBkZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/greatest.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/greatestIndex.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-array/src/greatestIndex.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ greatestIndex)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _maxIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./maxIndex.js */ \"../../../node_modules/d3-array/src/maxIndex.js\");\n\n\n\nfunction greatestIndex(values, compare = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n if (compare.length === 1) return (0,_maxIndex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, compare);\n let maxValue;\n let max = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (max < 0\n ? compare(value, value) === 0\n : compare(value, maxValue) > 0) {\n maxValue = value;\n max = index;\n }\n }\n return max;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncmVhdGVzdEluZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNGOztBQUV0Qix5Q0FBeUMscURBQVM7QUFDakUsbUNBQW1DLHdEQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncmVhdGVzdEluZGV4LmpzPzUzMTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBtYXhJbmRleCBmcm9tIFwiLi9tYXhJbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncmVhdGVzdEluZGV4KHZhbHVlcywgY29tcGFyZSA9IGFzY2VuZGluZykge1xuICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIHJldHVybiBtYXhJbmRleCh2YWx1ZXMsIGNvbXBhcmUpO1xuICBsZXQgbWF4VmFsdWU7XG4gIGxldCBtYXggPSAtMTtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgKytpbmRleDtcbiAgICBpZiAobWF4IDwgMFxuICAgICAgICA/IGNvbXBhcmUodmFsdWUsIHZhbHVlKSA9PT0gMFxuICAgICAgICA6IGNvbXBhcmUodmFsdWUsIG1heFZhbHVlKSA+IDApIHtcbiAgICAgIG1heFZhbHVlID0gdmFsdWU7XG4gICAgICBtYXggPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/greatestIndex.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/group.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/group.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ group),\n/* harmony export */ \"flatGroup\": () => (/* binding */ flatGroup),\n/* harmony export */ \"flatRollup\": () => (/* binding */ flatRollup),\n/* harmony export */ \"groups\": () => (/* binding */ groups),\n/* harmony export */ \"index\": () => (/* binding */ index),\n/* harmony export */ \"indexes\": () => (/* binding */ indexes),\n/* harmony export */ \"rollup\": () => (/* binding */ rollup),\n/* harmony export */ \"rollups\": () => (/* binding */ rollups)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-array/src/identity.js\");\n\n\n\nfunction group(values, ...keys) {\n return nest(values, _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], keys);\n}\n\nfunction groups(values, ...keys) {\n return nest(values, Array.from, _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], keys);\n}\n\nfunction flatten(groups, keys) {\n for (let i = 1, n = keys.length; i < n; ++i) {\n groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n }\n return groups;\n}\n\nfunction flatGroup(values, ...keys) {\n return flatten(groups(values, ...keys), keys);\n}\n\nfunction flatRollup(values, reduce, ...keys) {\n return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nfunction rollup(values, reduce, ...keys) {\n return nest(values, _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], reduce, keys);\n}\n\nfunction rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nfunction index(values, ...keys) {\n return nest(values, _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], unique, keys);\n}\n\nfunction indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new internmap__WEBPACK_IMPORTED_MODULE_1__.InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncm91cC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQW9DO0FBQ0M7O0FBRXRCO0FBQ2Ysc0JBQXNCLG9EQUFRLEVBQUUsb0RBQVE7QUFDeEM7O0FBRU87QUFDUCxrQ0FBa0Msb0RBQVE7QUFDMUM7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1Asc0JBQXNCLG9EQUFRO0FBQzlCOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQLHNCQUFzQixvREFBUTtBQUM5Qjs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdEQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2dyb3VwLmpzPzI5NWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbnRlcm5NYXB9IGZyb20gXCJpbnRlcm5tYXBcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncm91cCh2YWx1ZXMsIC4uLmtleXMpIHtcbiAgcmV0dXJuIG5lc3QodmFsdWVzLCBpZGVudGl0eSwgaWRlbnRpdHksIGtleXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBzKHZhbHVlcywgLi4ua2V5cykge1xuICByZXR1cm4gbmVzdCh2YWx1ZXMsIEFycmF5LmZyb20sIGlkZW50aXR5LCBrZXlzKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbihncm91cHMsIGtleXMpIHtcbiAgZm9yIChsZXQgaSA9IDEsIG4gPSBrZXlzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGdyb3VwcyA9IGdyb3Vwcy5mbGF0TWFwKGcgPT4gZy5wb3AoKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gWy4uLmcsIGtleSwgdmFsdWVdKSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXRHcm91cCh2YWx1ZXMsIC4uLmtleXMpIHtcbiAgcmV0dXJuIGZsYXR0ZW4oZ3JvdXBzKHZhbHVlcywgLi4ua2V5cyksIGtleXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdFJvbGx1cCh2YWx1ZXMsIHJlZHVjZSwgLi4ua2V5cykge1xuICByZXR1cm4gZmxhdHRlbihyb2xsdXBzKHZhbHVlcywgcmVkdWNlLCAuLi5rZXlzKSwga2V5cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb2xsdXAodmFsdWVzLCByZWR1Y2UsIC4uLmtleXMpIHtcbiAgcmV0dXJuIG5lc3QodmFsdWVzLCBpZGVudGl0eSwgcmVkdWNlLCBrZXlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvbGx1cHModmFsdWVzLCByZWR1Y2UsIC4uLmtleXMpIHtcbiAgcmV0dXJuIG5lc3QodmFsdWVzLCBBcnJheS5mcm9tLCByZWR1Y2UsIGtleXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXgodmFsdWVzLCAuLi5rZXlzKSB7XG4gIHJldHVybiBuZXN0KHZhbHVlcywgaWRlbnRpdHksIHVuaXF1ZSwga2V5cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleGVzKHZhbHVlcywgLi4ua2V5cykge1xuICByZXR1cm4gbmVzdCh2YWx1ZXMsIEFycmF5LmZyb20sIHVuaXF1ZSwga2V5cyk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZSh2YWx1ZXMpIHtcbiAgaWYgKHZhbHVlcy5sZW5ndGggIT09IDEpIHRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXlcIik7XG4gIHJldHVybiB2YWx1ZXNbMF07XG59XG5cbmZ1bmN0aW9uIG5lc3QodmFsdWVzLCBtYXAsIHJlZHVjZSwga2V5cykge1xuICByZXR1cm4gKGZ1bmN0aW9uIHJlZ3JvdXAodmFsdWVzLCBpKSB7XG4gICAgaWYgKGkgPj0ga2V5cy5sZW5ndGgpIHJldHVybiByZWR1Y2UodmFsdWVzKTtcbiAgICBjb25zdCBncm91cHMgPSBuZXcgSW50ZXJuTWFwKCk7XG4gICAgY29uc3Qga2V5b2YgPSBrZXlzW2krK107XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpO1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHMuZ2V0KGtleSk7XG4gICAgICBpZiAoZ3JvdXApIGdyb3VwLnB1c2godmFsdWUpO1xuICAgICAgZWxzZSBncm91cHMuc2V0KGtleSwgW3ZhbHVlXSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBncm91cHMpIHtcbiAgICAgIGdyb3Vwcy5zZXQoa2V5LCByZWdyb3VwKHZhbHVlcywgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKGdyb3Vwcyk7XG4gIH0pKHZhbHVlcywgMCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/group.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/groupSort.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-array/src/groupSort.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ groupSort)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _group_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./group.js */ \"../../../node_modules/d3-array/src/group.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-array/src/sort.js\");\n\n\n\n\nfunction groupSort(values, reduce, key) {\n return (reduce.length !== 2\n ? (0,_sort_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_group_js__WEBPACK_IMPORTED_MODULE_1__.rollup)(values, reduce, key), (([ak, av], [bk, bv]) => (0,_ascending_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(av, bv) || (0,_ascending_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ak, bk)))\n : (0,_sort_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_group_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || (0,_ascending_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ak, bk))))\n .map(([key]) => key);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncm91cFNvcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF1QztBQUNFO0FBQ1o7O0FBRWQ7QUFDZjtBQUNBLE1BQU0sb0RBQUksQ0FBQyxpREFBTSxnREFBZ0QseURBQVMsWUFBWSx5REFBUztBQUMvRixNQUFNLG9EQUFJLENBQUMscURBQUssMERBQTBELHlEQUFTO0FBQ25GO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9ncm91cFNvcnQuanM/MjhiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGdyb3VwLCB7cm9sbHVwfSBmcm9tIFwiLi9ncm91cC5qc1wiO1xuaW1wb3J0IHNvcnQgZnJvbSBcIi4vc29ydC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncm91cFNvcnQodmFsdWVzLCByZWR1Y2UsIGtleSkge1xuICByZXR1cm4gKHJlZHVjZS5sZW5ndGggIT09IDJcbiAgICA/IHNvcnQocm9sbHVwKHZhbHVlcywgcmVkdWNlLCBrZXkpLCAoKFthaywgYXZdLCBbYmssIGJ2XSkgPT4gYXNjZW5kaW5nKGF2LCBidikgfHwgYXNjZW5kaW5nKGFrLCBiaykpKVxuICAgIDogc29ydChncm91cCh2YWx1ZXMsIGtleSksICgoW2FrLCBhdl0sIFtiaywgYnZdKSA9PiByZWR1Y2UoYXYsIGJ2KSB8fCBhc2NlbmRpbmcoYWssIGJrKSkpKVxuICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/groupSort.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/identity.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/identity.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ identity)\n/* harmony export */ });\nfunction identity(x) {\n return x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pZGVudGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaWRlbnRpdHkuanM/Mzc5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Adder\": () => (/* reexport safe */ _fsum_js__WEBPACK_IMPORTED_MODULE_10__.Adder),\n/* harmony export */ \"InternMap\": () => (/* reexport safe */ internmap__WEBPACK_IMPORTED_MODULE_56__.InternMap),\n/* harmony export */ \"InternSet\": () => (/* reexport safe */ internmap__WEBPACK_IMPORTED_MODULE_56__.InternSet),\n/* harmony export */ \"ascending\": () => (/* reexport safe */ _ascending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"bin\": () => (/* reexport safe */ _bin_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"bisect\": () => (/* reexport safe */ _bisect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"bisectCenter\": () => (/* reexport safe */ _bisect_js__WEBPACK_IMPORTED_MODULE_0__.bisectCenter),\n/* harmony export */ \"bisectLeft\": () => (/* reexport safe */ _bisect_js__WEBPACK_IMPORTED_MODULE_0__.bisectLeft),\n/* harmony export */ \"bisectRight\": () => (/* reexport safe */ _bisect_js__WEBPACK_IMPORTED_MODULE_0__.bisectRight),\n/* harmony export */ \"bisector\": () => (/* reexport safe */ _bisector_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"blur\": () => (/* reexport safe */ _blur_js__WEBPACK_IMPORTED_MODULE_3__.blur),\n/* harmony export */ \"blur2\": () => (/* reexport safe */ _blur_js__WEBPACK_IMPORTED_MODULE_3__.blur2),\n/* harmony export */ \"blurImage\": () => (/* reexport safe */ _blur_js__WEBPACK_IMPORTED_MODULE_3__.blurImage),\n/* harmony export */ \"count\": () => (/* reexport safe */ _count_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"cross\": () => (/* reexport safe */ _cross_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"cumsum\": () => (/* reexport safe */ _cumsum_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"descending\": () => (/* reexport safe */ _descending_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"deviation\": () => (/* reexport safe */ _deviation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"difference\": () => (/* reexport safe */ _difference_js__WEBPACK_IMPORTED_MODULE_50__[\"default\"]),\n/* harmony export */ \"disjoint\": () => (/* reexport safe */ _disjoint_js__WEBPACK_IMPORTED_MODULE_51__[\"default\"]),\n/* harmony export */ \"every\": () => (/* reexport safe */ _every_js__WEBPACK_IMPORTED_MODULE_43__[\"default\"]),\n/* harmony export */ \"extent\": () => (/* reexport safe */ _extent_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"fcumsum\": () => (/* reexport safe */ _fsum_js__WEBPACK_IMPORTED_MODULE_10__.fcumsum),\n/* harmony export */ \"filter\": () => (/* reexport safe */ _filter_js__WEBPACK_IMPORTED_MODULE_45__[\"default\"]),\n/* harmony export */ \"flatGroup\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.flatGroup),\n/* harmony export */ \"flatRollup\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.flatRollup),\n/* harmony export */ \"fsum\": () => (/* reexport safe */ _fsum_js__WEBPACK_IMPORTED_MODULE_10__.fsum),\n/* harmony export */ \"greatest\": () => (/* reexport safe */ _greatest_js__WEBPACK_IMPORTED_MODULE_34__[\"default\"]),\n/* harmony export */ \"greatestIndex\": () => (/* reexport safe */ _greatestIndex_js__WEBPACK_IMPORTED_MODULE_35__[\"default\"]),\n/* harmony export */ \"group\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"groupSort\": () => (/* reexport safe */ _groupSort_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"groups\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.groups),\n/* harmony export */ \"histogram\": () => (/* reexport safe */ _bin_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"index\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.index),\n/* harmony export */ \"indexes\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.indexes),\n/* harmony export */ \"intersection\": () => (/* reexport safe */ _intersection_js__WEBPACK_IMPORTED_MODULE_52__[\"default\"]),\n/* harmony export */ \"least\": () => (/* reexport safe */ _least_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"]),\n/* harmony export */ \"leastIndex\": () => (/* reexport safe */ _leastIndex_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]),\n/* harmony export */ \"map\": () => (/* reexport safe */ _map_js__WEBPACK_IMPORTED_MODULE_46__[\"default\"]),\n/* harmony export */ \"max\": () => (/* reexport safe */ _max_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"maxIndex\": () => (/* reexport safe */ _maxIndex_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"mean\": () => (/* reexport safe */ _mean_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]),\n/* harmony export */ \"median\": () => (/* reexport safe */ _median_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]),\n/* harmony export */ \"medianIndex\": () => (/* reexport safe */ _median_js__WEBPACK_IMPORTED_MODULE_20__.medianIndex),\n/* harmony export */ \"merge\": () => (/* reexport safe */ _merge_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"]),\n/* harmony export */ \"min\": () => (/* reexport safe */ _min_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]),\n/* harmony export */ \"minIndex\": () => (/* reexport safe */ _minIndex_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"]),\n/* harmony export */ \"mode\": () => (/* reexport safe */ _mode_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"]),\n/* harmony export */ \"nice\": () => (/* reexport safe */ _nice_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"]),\n/* harmony export */ \"pairs\": () => (/* reexport safe */ _pairs_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"]),\n/* harmony export */ \"permute\": () => (/* reexport safe */ _permute_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"quantile\": () => (/* reexport safe */ _quantile_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"quantileIndex\": () => (/* reexport safe */ _quantile_js__WEBPACK_IMPORTED_MODULE_28__.quantileIndex),\n/* harmony export */ \"quantileSorted\": () => (/* reexport safe */ _quantile_js__WEBPACK_IMPORTED_MODULE_28__.quantileSorted),\n/* harmony export */ \"quickselect\": () => (/* reexport safe */ _quickselect_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"range\": () => (/* reexport safe */ _range_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"]),\n/* harmony export */ \"rank\": () => (/* reexport safe */ _rank_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"]),\n/* harmony export */ \"reduce\": () => (/* reexport safe */ _reduce_js__WEBPACK_IMPORTED_MODULE_47__[\"default\"]),\n/* harmony export */ \"reverse\": () => (/* reexport safe */ _reverse_js__WEBPACK_IMPORTED_MODULE_48__[\"default\"]),\n/* harmony export */ \"rollup\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.rollup),\n/* harmony export */ \"rollups\": () => (/* reexport safe */ _group_js__WEBPACK_IMPORTED_MODULE_11__.rollups),\n/* harmony export */ \"scan\": () => (/* reexport safe */ _scan_js__WEBPACK_IMPORTED_MODULE_36__[\"default\"]),\n/* harmony export */ \"shuffle\": () => (/* reexport safe */ _shuffle_js__WEBPACK_IMPORTED_MODULE_37__[\"default\"]),\n/* harmony export */ \"shuffler\": () => (/* reexport safe */ _shuffle_js__WEBPACK_IMPORTED_MODULE_37__.shuffler),\n/* harmony export */ \"some\": () => (/* reexport safe */ _some_js__WEBPACK_IMPORTED_MODULE_44__[\"default\"]),\n/* harmony export */ \"sort\": () => (/* reexport safe */ _sort_js__WEBPACK_IMPORTED_MODULE_49__[\"default\"]),\n/* harmony export */ \"subset\": () => (/* reexport safe */ _subset_js__WEBPACK_IMPORTED_MODULE_53__[\"default\"]),\n/* harmony export */ \"sum\": () => (/* reexport safe */ _sum_js__WEBPACK_IMPORTED_MODULE_38__[\"default\"]),\n/* harmony export */ \"superset\": () => (/* reexport safe */ _superset_js__WEBPACK_IMPORTED_MODULE_54__[\"default\"]),\n/* harmony export */ \"thresholdFreedmanDiaconis\": () => (/* reexport safe */ _threshold_freedmanDiaconis_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"thresholdScott\": () => (/* reexport safe */ _threshold_scott_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"thresholdSturges\": () => (/* reexport safe */ _threshold_sturges_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"tickIncrement\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_39__.tickIncrement),\n/* harmony export */ \"tickStep\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_39__.tickStep),\n/* harmony export */ \"ticks\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_39__[\"default\"]),\n/* harmony export */ \"transpose\": () => (/* reexport safe */ _transpose_js__WEBPACK_IMPORTED_MODULE_40__[\"default\"]),\n/* harmony export */ \"union\": () => (/* reexport safe */ _union_js__WEBPACK_IMPORTED_MODULE_55__[\"default\"]),\n/* harmony export */ \"variance\": () => (/* reexport safe */ _variance_js__WEBPACK_IMPORTED_MODULE_41__[\"default\"]),\n/* harmony export */ \"zip\": () => (/* reexport safe */ _zip_js__WEBPACK_IMPORTED_MODULE_42__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _bisect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisect.js */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _bisector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bisector.js */ \"../../../node_modules/d3-array/src/bisector.js\");\n/* harmony import */ var _blur_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blur.js */ \"../../../node_modules/d3-array/src/blur.js\");\n/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./count.js */ \"../../../node_modules/d3-array/src/count.js\");\n/* harmony import */ var _cross_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cross.js */ \"../../../node_modules/d3-array/src/cross.js\");\n/* harmony import */ var _cumsum_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cumsum.js */ \"../../../node_modules/d3-array/src/cumsum.js\");\n/* harmony import */ var _descending_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./descending.js */ \"../../../node_modules/d3-array/src/descending.js\");\n/* harmony import */ var _deviation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./deviation.js */ \"../../../node_modules/d3-array/src/deviation.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./extent.js */ \"../../../node_modules/d3-array/src/extent.js\");\n/* harmony import */ var _fsum_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fsum.js */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _group_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./group.js */ \"../../../node_modules/d3-array/src/group.js\");\n/* harmony import */ var _groupSort_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./groupSort.js */ \"../../../node_modules/d3-array/src/groupSort.js\");\n/* harmony import */ var _bin_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./bin.js */ \"../../../node_modules/d3-array/src/bin.js\");\n/* harmony import */ var _threshold_freedmanDiaconis_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./threshold/freedmanDiaconis.js */ \"../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js\");\n/* harmony import */ var _threshold_scott_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./threshold/scott.js */ \"../../../node_modules/d3-array/src/threshold/scott.js\");\n/* harmony import */ var _threshold_sturges_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./threshold/sturges.js */ \"../../../node_modules/d3-array/src/threshold/sturges.js\");\n/* harmony import */ var _max_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./max.js */ \"../../../node_modules/d3-array/src/max.js\");\n/* harmony import */ var _maxIndex_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./maxIndex.js */ \"../../../node_modules/d3-array/src/maxIndex.js\");\n/* harmony import */ var _mean_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./mean.js */ \"../../../node_modules/d3-array/src/mean.js\");\n/* harmony import */ var _median_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./median.js */ \"../../../node_modules/d3-array/src/median.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./merge.js */ \"../../../node_modules/d3-array/src/merge.js\");\n/* harmony import */ var _min_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./min.js */ \"../../../node_modules/d3-array/src/min.js\");\n/* harmony import */ var _minIndex_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./minIndex.js */ \"../../../node_modules/d3-array/src/minIndex.js\");\n/* harmony import */ var _mode_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./mode.js */ \"../../../node_modules/d3-array/src/mode.js\");\n/* harmony import */ var _nice_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./nice.js */ \"../../../node_modules/d3-array/src/nice.js\");\n/* harmony import */ var _pairs_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./pairs.js */ \"../../../node_modules/d3-array/src/pairs.js\");\n/* harmony import */ var _permute_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./permute.js */ \"../../../node_modules/d3-array/src/permute.js\");\n/* harmony import */ var _quantile_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./quantile.js */ \"../../../node_modules/d3-array/src/quantile.js\");\n/* harmony import */ var _quickselect_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./quickselect.js */ \"../../../node_modules/d3-array/src/quickselect.js\");\n/* harmony import */ var _range_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./range.js */ \"../../../node_modules/d3-array/src/range.js\");\n/* harmony import */ var _rank_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rank.js */ \"../../../node_modules/d3-array/src/rank.js\");\n/* harmony import */ var _least_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./least.js */ \"../../../node_modules/d3-array/src/least.js\");\n/* harmony import */ var _leastIndex_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./leastIndex.js */ \"../../../node_modules/d3-array/src/leastIndex.js\");\n/* harmony import */ var _greatest_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./greatest.js */ \"../../../node_modules/d3-array/src/greatest.js\");\n/* harmony import */ var _greatestIndex_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./greatestIndex.js */ \"../../../node_modules/d3-array/src/greatestIndex.js\");\n/* harmony import */ var _scan_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./scan.js */ \"../../../node_modules/d3-array/src/scan.js\");\n/* harmony import */ var _shuffle_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./shuffle.js */ \"../../../node_modules/d3-array/src/shuffle.js\");\n/* harmony import */ var _sum_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./sum.js */ \"../../../node_modules/d3-array/src/sum.js\");\n/* harmony import */ var _ticks_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ticks.js */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var _transpose_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./transpose.js */ \"../../../node_modules/d3-array/src/transpose.js\");\n/* harmony import */ var _variance_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./variance.js */ \"../../../node_modules/d3-array/src/variance.js\");\n/* harmony import */ var _zip_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./zip.js */ \"../../../node_modules/d3-array/src/zip.js\");\n/* harmony import */ var _every_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./every.js */ \"../../../node_modules/d3-array/src/every.js\");\n/* harmony import */ var _some_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./some.js */ \"../../../node_modules/d3-array/src/some.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./filter.js */ \"../../../node_modules/d3-array/src/filter.js\");\n/* harmony import */ var _map_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./map.js */ \"../../../node_modules/d3-array/src/map.js\");\n/* harmony import */ var _reduce_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./reduce.js */ \"../../../node_modules/d3-array/src/reduce.js\");\n/* harmony import */ var _reverse_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./reverse.js */ \"../../../node_modules/d3-array/src/reverse.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-array/src/sort.js\");\n/* harmony import */ var _difference_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./difference.js */ \"../../../node_modules/d3-array/src/difference.js\");\n/* harmony import */ var _disjoint_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./disjoint.js */ \"../../../node_modules/d3-array/src/disjoint.js\");\n/* harmony import */ var _intersection_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./intersection.js */ \"../../../node_modules/d3-array/src/intersection.js\");\n/* harmony import */ var _subset_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./subset.js */ \"../../../node_modules/d3-array/src/subset.js\");\n/* harmony import */ var _superset_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./superset.js */ \"../../../node_modules/d3-array/src/superset.js\");\n/* harmony import */ var _union_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./union.js */ \"../../../node_modules/d3-array/src/union.js\");\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Deprecated; use bin.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Deprecated; use leastIndex.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXFGO0FBQ2pDO0FBQ0Y7QUFDRDtBQUNMO0FBQ0E7QUFDRTtBQUNRO0FBQ0Y7QUFDTjtBQUNDO0FBQzZEO0FBQ3hEO0FBQ1UsQ0FBQyxlQUFlO0FBQ087QUFDdEI7QUFDSTtBQUMzQjtBQUNVO0FBQ1I7QUFDaUI7QUFDZjtBQUNKO0FBQ1U7QUFDUjtBQUNBO0FBQ0U7QUFDSTtBQUNpQztBQUN6QjtBQUNaO0FBQ0Y7QUFDRTtBQUNVO0FBQ0o7QUFDVTtBQUNsQixDQUFDLGVBQWU7QUFDQTtBQUNsQjtBQUM2QjtBQUNqQjtBQUNGO0FBQ1Y7QUFDSTtBQUNGO0FBQ0k7QUFDTjtBQUNNO0FBQ0U7QUFDTjtBQUNZO0FBQ0o7QUFDUTtBQUNaO0FBQ0k7QUFDTjtBQUNHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanM/N2MxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgYmlzZWN0LCBiaXNlY3RSaWdodCwgYmlzZWN0TGVmdCwgYmlzZWN0Q2VudGVyfSBmcm9tIFwiLi9iaXNlY3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuZXhwb3J0IHtibHVyLCBibHVyMiwgYmx1ckltYWdlfSBmcm9tIFwiLi9ibHVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY291bnR9IGZyb20gXCIuL2NvdW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Jvc3N9IGZyb20gXCIuL2Nyb3NzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Vtc3VtfSBmcm9tIFwiLi9jdW1zdW0uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXNjZW5kaW5nfSBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGV2aWF0aW9ufSBmcm9tIFwiLi9kZXZpYXRpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHRlbnR9IGZyb20gXCIuL2V4dGVudC5qc1wiO1xuZXhwb3J0IHtBZGRlciwgZnN1bSwgZmN1bXN1bX0gZnJvbSBcIi4vZnN1bS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdyb3VwLCBmbGF0R3JvdXAsIGZsYXRSb2xsdXAsIGdyb3VwcywgaW5kZXgsIGluZGV4ZXMsIHJvbGx1cCwgcm9sbHVwc30gZnJvbSBcIi4vZ3JvdXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncm91cFNvcnR9IGZyb20gXCIuL2dyb3VwU29ydC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpbiwgZGVmYXVsdCBhcyBoaXN0b2dyYW19IGZyb20gXCIuL2Jpbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgYmluLlxuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXN9IGZyb20gXCIuL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGhyZXNob2xkU2NvdHR9IGZyb20gXCIuL3RocmVzaG9sZC9zY290dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFN0dXJnZXN9IGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWF4fSBmcm9tIFwiLi9tYXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXhJbmRleH0gZnJvbSBcIi4vbWF4SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtZWFufSBmcm9tIFwiLi9tZWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVkaWFuLCBtZWRpYW5JbmRleH0gZnJvbSBcIi4vbWVkaWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtaW5JbmRleH0gZnJvbSBcIi4vbWluSW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb2RlfSBmcm9tIFwiLi9tb2RlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmljZX0gZnJvbSBcIi4vbmljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhaXJzfSBmcm9tIFwiLi9wYWlycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBlcm11dGV9IGZyb20gXCIuL3Blcm11dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGlsZSwgcXVhbnRpbGVJbmRleCwgcXVhbnRpbGVTb3J0ZWR9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVpY2tzZWxlY3R9IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFua30gZnJvbSBcIi4vcmFuay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0fSBmcm9tIFwiLi9sZWFzdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0SW5kZXh9IGZyb20gXCIuL2xlYXN0SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdH0gZnJvbSBcIi4vZ3JlYXRlc3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdEluZGV4fSBmcm9tIFwiLi9ncmVhdGVzdEluZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2Nhbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgbGVhc3RJbmRleC5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzaHVmZmxlLCBzaHVmZmxlcn0gZnJvbSBcIi4vc2h1ZmZsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1bX0gZnJvbSBcIi4vc3VtLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGlja3MsIHRpY2tJbmNyZW1lbnQsIHRpY2tTdGVwfSBmcm9tIFwiLi90aWNrcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zcG9zZX0gZnJvbSBcIi4vdHJhbnNwb3NlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFyaWFuY2V9IGZyb20gXCIuL3ZhcmlhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgemlwfSBmcm9tIFwiLi96aXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBldmVyeX0gZnJvbSBcIi4vZXZlcnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzb21lfSBmcm9tIFwiLi9zb21lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZmlsdGVyfSBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXB9IGZyb20gXCIuL21hcC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJlZHVjZX0gZnJvbSBcIi4vcmVkdWNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmV2ZXJzZX0gZnJvbSBcIi4vcmV2ZXJzZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNvcnR9IGZyb20gXCIuL3NvcnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkaWZmZXJlbmNlfSBmcm9tIFwiLi9kaWZmZXJlbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGlzam9pbnR9IGZyb20gXCIuL2Rpc2pvaW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJzZWN0aW9ufSBmcm9tIFwiLi9pbnRlcnNlY3Rpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdWJzZXR9IGZyb20gXCIuL3N1YnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1cGVyc2V0fSBmcm9tIFwiLi9zdXBlcnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHVuaW9ufSBmcm9tIFwiLi91bmlvbi5qc1wiO1xuZXhwb3J0IHtJbnRlcm5NYXAsIEludGVyblNldH0gZnJvbSBcImludGVybm1hcFwiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/intersection.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-array/src/intersection.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ intersection)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\nfunction intersection(values, ...others) {\n values = new internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet(values);\n others = others.map(set);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n\nfunction set(values) {\n return values instanceof internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet ? values : new internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet(values);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbnRlcnNlY3Rpb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0M7O0FBRXJCO0FBQ2YsZUFBZSxnREFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLGdEQUFTLGdCQUFnQixnREFBUztBQUM3RCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2ludGVyc2VjdGlvbi5qcz9lYjk5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW50ZXJuU2V0fSBmcm9tIFwiaW50ZXJubWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGludGVyc2VjdGlvbih2YWx1ZXMsIC4uLm90aGVycykge1xuICB2YWx1ZXMgPSBuZXcgSW50ZXJuU2V0KHZhbHVlcyk7XG4gIG90aGVycyA9IG90aGVycy5tYXAoc2V0KTtcbiAgb3V0OiBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XG4gICAgICBpZiAoIW90aGVyLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlIG91dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gc2V0KHZhbHVlcykge1xuICByZXR1cm4gdmFsdWVzIGluc3RhbmNlb2YgSW50ZXJuU2V0ID8gdmFsdWVzIDogbmV3IEludGVyblNldCh2YWx1ZXMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/intersection.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/least.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/least.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ least)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n\n\nfunction least(values, compare = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n let min;\n let defined = false;\n if (compare.length === 1) {\n let minValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, minValue) < 0\n : (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, value) === 0) {\n min = element;\n minValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, min) < 0\n : compare(value, value) === 0) {\n min = value;\n defined = true;\n }\n }\n }\n return min;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9sZWFzdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1Qzs7QUFFeEIsaUNBQWlDLHFEQUFTO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5REFBUztBQUNyQixZQUFZLHlEQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2xlYXN0LmpzP2ViM2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGVhc3QodmFsdWVzLCBjb21wYXJlID0gYXNjZW5kaW5nKSB7XG4gIGxldCBtaW47XG4gIGxldCBkZWZpbmVkID0gZmFsc2U7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBtaW5WYWx1ZTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbXBhcmUoZWxlbWVudCk7XG4gICAgICBpZiAoZGVmaW5lZFxuICAgICAgICAgID8gYXNjZW5kaW5nKHZhbHVlLCBtaW5WYWx1ZSkgPCAwXG4gICAgICAgICAgOiBhc2NlbmRpbmcodmFsdWUsIHZhbHVlKSA9PT0gMCkge1xuICAgICAgICBtaW4gPSBlbGVtZW50O1xuICAgICAgICBtaW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmIChkZWZpbmVkXG4gICAgICAgICAgPyBjb21wYXJlKHZhbHVlLCBtaW4pIDwgMFxuICAgICAgICAgIDogY29tcGFyZSh2YWx1ZSwgdmFsdWUpID09PSAwKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICBkZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/least.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/leastIndex.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-array/src/leastIndex.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ leastIndex)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _minIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./minIndex.js */ \"../../../node_modules/d3-array/src/minIndex.js\");\n\n\n\nfunction leastIndex(values, compare = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n if (compare.length === 1) return (0,_minIndex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, compare);\n let minValue;\n let min = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (min < 0\n ? compare(value, value) === 0\n : compare(value, minValue) < 0) {\n minValue = value;\n min = index;\n }\n }\n return min;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9sZWFzdEluZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNGOztBQUV0QixzQ0FBc0MscURBQVM7QUFDOUQsbUNBQW1DLHdEQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9sZWFzdEluZGV4LmpzP2U4MmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBtaW5JbmRleCBmcm9tIFwiLi9taW5JbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsZWFzdEluZGV4KHZhbHVlcywgY29tcGFyZSA9IGFzY2VuZGluZykge1xuICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIHJldHVybiBtaW5JbmRleCh2YWx1ZXMsIGNvbXBhcmUpO1xuICBsZXQgbWluVmFsdWU7XG4gIGxldCBtaW4gPSAtMTtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgKytpbmRleDtcbiAgICBpZiAobWluIDwgMFxuICAgICAgICA/IGNvbXBhcmUodmFsdWUsIHZhbHVlKSA9PT0gMFxuICAgICAgICA6IGNvbXBhcmUodmFsdWUsIG1pblZhbHVlKSA8IDApIHtcbiAgICAgIG1pblZhbHVlID0gdmFsdWU7XG4gICAgICBtaW4gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/leastIndex.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/map.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/map.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ map)\n/* harmony export */ });\nfunction map(values, mapper) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n return Array.from(values, (value, index) => mapper(value, index, values));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXAuanM/YzAyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXAodmFsdWVzLCBtYXBwZXIpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWVzIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgaWYgKHR5cGVvZiBtYXBwZXIgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1hcHBlciBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgcmV0dXJuIEFycmF5LmZyb20odmFsdWVzLCAodmFsdWUsIGluZGV4KSA9PiBtYXBwZXIodmFsdWUsIGluZGV4LCB2YWx1ZXMpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/map.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/max.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/max.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ max)\n/* harmony export */ });\nfunction max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcz80NzE3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heCh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1heDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtYXggPCB2YWx1ZSB8fCAobWF4ID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtYXggPCB2YWx1ZSB8fCAobWF4ID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/max.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/maxIndex.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/maxIndex.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ maxIndex)\n/* harmony export */ });\nfunction maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXhJbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heEluZGV4LmpzPzU0ZTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF4SW5kZXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGxldCBtYXhJbmRleCA9IC0xO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICArK2luZGV4O1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWUsIG1heEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWUsIG1heEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXhJbmRleDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/maxIndex.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/mean.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/mean.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mean)\n/* harmony export */ });\nfunction mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWFuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcz8yZjNiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lYW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGxldCBzdW0gPSAwO1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgICsrY291bnQsIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgICsrY291bnQsIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNvdW50KSByZXR1cm4gc3VtIC8gY291bnQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/mean.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/median.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/median.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ median),\n/* harmony export */ \"medianIndex\": () => (/* binding */ medianIndex)\n/* harmony export */ });\n/* harmony import */ var _quantile_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quantile.js */ \"../../../node_modules/d3-array/src/quantile.js\");\n\n\nfunction median(values, valueof) {\n return (0,_quantile_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values, 0.5, valueof);\n}\n\nfunction medianIndex(values, valueof) {\n return (0,_quantile_js__WEBPACK_IMPORTED_MODULE_0__.quantileIndex)(values, 0.5, valueof);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWRpYW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXNEOztBQUV2QztBQUNmLFNBQVMsd0RBQVE7QUFDakI7O0FBRU87QUFDUCxTQUFTLDJEQUFhO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzP2U4ODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHF1YW50aWxlLCB7cXVhbnRpbGVJbmRleH0gZnJvbSBcIi4vcXVhbnRpbGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVkaWFuKHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGUodmFsdWVzLCAwLjUsIHZhbHVlb2YpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVkaWFuSW5kZXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHJldHVybiBxdWFudGlsZUluZGV4KHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/median.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/merge.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/merge.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ merge)\n/* harmony export */ });\nfunction* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nfunction merge(arrays) {\n return Array.from(flatten(arrays));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZXJnZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZXJnZS5qcz9iMTg3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uKiBmbGF0dGVuKGFycmF5cykge1xuICBmb3IgKGNvbnN0IGFycmF5IG9mIGFycmF5cykge1xuICAgIHlpZWxkKiBhcnJheTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZShhcnJheXMpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZmxhdHRlbihhcnJheXMpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/merge.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/min.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/min.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ min)\n/* harmony export */ });\nfunction min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcz9hMTg1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/min.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/minIndex.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/minIndex.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ minIndex)\n/* harmony export */ });\nfunction minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW5JbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbkluZGV4LmpzPzM2OWIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWluSW5kZXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGxldCBtaW5JbmRleCA9IC0xO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICArK2luZGV4O1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWUsIG1pbkluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWUsIG1pbkluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW5JbmRleDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/minIndex.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/mode.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/mode.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mode)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\nfunction mode(values, valueof) {\n const counts = new internmap__WEBPACK_IMPORTED_MODULE_0__.InternMap();\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n }\n let modeValue;\n let modeCount = 0;\n for (const [value, count] of counts) {\n if (count > modeCount) {\n modeCount = count;\n modeValue = value;\n }\n }\n return modeValue;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tb2RlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW9DOztBQUVyQjtBQUNmLHFCQUFxQixnREFBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21vZGUuanM/Yjc4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybk1hcH0gZnJvbSBcImludGVybm1hcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtb2RlKHZhbHVlcywgdmFsdWVvZikge1xuICBjb25zdCBjb3VudHMgPSBuZXcgSW50ZXJuTWFwKCk7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIGNvdW50cy5zZXQodmFsdWUsIChjb3VudHMuZ2V0KHZhbHVlKSB8fCAwKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIGNvdW50cy5zZXQodmFsdWUsIChjb3VudHMuZ2V0KHZhbHVlKSB8fCAwKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsZXQgbW9kZVZhbHVlO1xuICBsZXQgbW9kZUNvdW50ID0gMDtcbiAgZm9yIChjb25zdCBbdmFsdWUsIGNvdW50XSBvZiBjb3VudHMpIHtcbiAgICBpZiAoY291bnQgPiBtb2RlQ291bnQpIHtcbiAgICAgIG1vZGVDb3VudCA9IGNvdW50O1xuICAgICAgbW9kZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RlVmFsdWU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/mode.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/nice.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/nice.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ nice)\n/* harmony export */ });\n/* harmony import */ var _ticks_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ticks.js */ \"../../../node_modules/d3-array/src/ticks.js\");\n\n\nfunction nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = (0,_ticks_js__WEBPACK_IMPORTED_MODULE_0__.tickIncrement)(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9uaWNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlDOztBQUUxQjtBQUNmO0FBQ0E7QUFDQSxpQkFBaUIsd0RBQWE7QUFDOUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL25pY2UuanM/NmM2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpY2tJbmNyZW1lbnR9IGZyb20gXCIuL3RpY2tzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2Uoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIGxldCBwcmVzdGVwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgaWYgKHN0ZXAgPT09IHByZXN0ZXAgfHwgc3RlcCA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHtcbiAgICAgIHJldHVybiBbc3RhcnQsIHN0b3BdO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgfVxuICAgIHByZXN0ZXAgPSBzdGVwO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/nice.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/number.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/number.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ number),\n/* harmony export */ \"numbers\": () => (/* binding */ numbers)\n/* harmony export */ });\nfunction number(x) {\n return x === null ? NaN : +x;\n}\n\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZTtBQUNmO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcz9kN2QzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/number.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/pairs.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/pairs.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ pairs),\n/* harmony export */ \"pair\": () => (/* binding */ pair)\n/* harmony export */ });\nfunction pairs(values, pairof = pair) {\n const pairs = [];\n let previous;\n let first = false;\n for (const value of values) {\n if (first) pairs.push(pairof(previous, value));\n previous = value;\n first = true;\n }\n return pairs;\n}\n\nfunction pair(a, b) {\n return [a, b];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wYWlycy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanM/OTBlZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYWlycyh2YWx1ZXMsIHBhaXJvZiA9IHBhaXIpIHtcbiAgY29uc3QgcGFpcnMgPSBbXTtcbiAgbGV0IHByZXZpb3VzO1xuICBsZXQgZmlyc3QgPSBmYWxzZTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAoZmlyc3QpIHBhaXJzLnB1c2gocGFpcm9mKHByZXZpb3VzLCB2YWx1ZSkpO1xuICAgIHByZXZpb3VzID0gdmFsdWU7XG4gICAgZmlyc3QgPSB0cnVlO1xuICB9XG4gIHJldHVybiBwYWlycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhaXIoYSwgYikge1xuICByZXR1cm4gW2EsIGJdO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/pairs.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/permute.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-array/src/permute.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ permute)\n/* harmony export */ });\nfunction permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wZXJtdXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9wZXJtdXRlLmpzP2IwM2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGVybXV0ZShzb3VyY2UsIGtleXMpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oa2V5cywga2V5ID0+IHNvdXJjZVtrZXldKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/permute.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/quantile.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/quantile.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ quantile),\n/* harmony export */ \"quantileIndex\": () => (/* binding */ quantileIndex),\n/* harmony export */ \"quantileSorted\": () => (/* binding */ quantileSorted)\n/* harmony export */ });\n/* harmony import */ var _max_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./max.js */ \"../../../node_modules/d3-array/src/max.js\");\n/* harmony import */ var _maxIndex_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./maxIndex.js */ \"../../../node_modules/d3-array/src/maxIndex.js\");\n/* harmony import */ var _min_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./min.js */ \"../../../node_modules/d3-array/src/min.js\");\n/* harmony import */ var _minIndex_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./minIndex.js */ \"../../../node_modules/d3-array/src/minIndex.js\");\n/* harmony import */ var _quickselect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./quickselect.js */ \"../../../node_modules/d3-array/src/quickselect.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-array/src/number.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-array/src/sort.js\");\n/* harmony import */ var _greatest_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./greatest.js */ \"../../../node_modules/d3-array/src/greatest.js\");\n\n\n\n\n\n\n\n\n\nfunction quantile(values, p, valueof) {\n values = Float64Array.from((0,_number_js__WEBPACK_IMPORTED_MODULE_0__.numbers)(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return (0,_min_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values);\n if (p >= 1) return (0,_max_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = (0,_max_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_quickselect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(values, i0).subarray(0, i0 + 1)),\n value1 = (0,_min_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileSorted(values, p, valueof = _number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileIndex(values, p, valueof = _number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(valueof(values[i], i, values)));\n if (p <= 0) return (0,_minIndex_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(numbers);\n if (p >= 1) return (0,_maxIndex_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n (0,_quickselect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(index, i, 0, j, (i, j) => (0,_sort_js__WEBPACK_IMPORTED_MODULE_6__.ascendingDefined)(numbers[i], numbers[j]));\n i = (0,_greatest_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUEyQjtBQUNVO0FBQ1Y7QUFDVTtBQUNNO0FBQ0M7QUFDRDtBQUNOOztBQUV0QjtBQUNmLDZCQUE2QixtREFBTztBQUNwQztBQUNBLDhCQUE4QixtREFBRztBQUNqQyxxQkFBcUIsbURBQUc7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtREFBRyxDQUFDLDJEQUFXO0FBQzlCLGVBQWUsbURBQUc7QUFDbEI7QUFDQTs7QUFFTyw2Q0FBNkMsa0RBQU07QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sNENBQTRDLGtEQUFNO0FBQ3pEO0FBQ0EsZ0RBQWdELHNEQUFNO0FBQ3RELHFCQUFxQix3REFBUTtBQUM3QixxQkFBcUIsd0RBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLDJEQUFXLDJCQUEyQiwwREFBZ0I7QUFDeEQsTUFBTSx3REFBUTtBQUNkO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcz9kYTYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtYXggZnJvbSBcIi4vbWF4LmpzXCI7XG5pbXBvcnQgbWF4SW5kZXggZnJvbSBcIi4vbWF4SW5kZXguanNcIjtcbmltcG9ydCBtaW4gZnJvbSBcIi4vbWluLmpzXCI7XG5pbXBvcnQgbWluSW5kZXggZnJvbSBcIi4vbWluSW5kZXguanNcIjtcbmltcG9ydCBxdWlja3NlbGVjdCBmcm9tIFwiLi9xdWlja3NlbGVjdC5qc1wiO1xuaW1wb3J0IG51bWJlciwge251bWJlcnN9IGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IHthc2NlbmRpbmdEZWZpbmVkfSBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgZ3JlYXRlc3QgZnJvbSBcIi4vZ3JlYXRlc3QuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUodmFsdWVzLCBwLCB2YWx1ZW9mKSB7XG4gIHZhbHVlcyA9IEZsb2F0NjRBcnJheS5mcm9tKG51bWJlcnModmFsdWVzLCB2YWx1ZW9mKSk7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSB8fCBpc05hTihwID0gK3ApKSByZXR1cm47XG4gIGlmIChwIDw9IDAgfHwgbiA8IDIpIHJldHVybiBtaW4odmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuIG1heCh2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9IG1heChxdWlja3NlbGVjdCh2YWx1ZXMsIGkwKS5zdWJhcnJheSgwLCBpMCArIDEpKSxcbiAgICAgIHZhbHVlMSA9IG1pbih2YWx1ZXMuc3ViYXJyYXkoaTAgKyAxKSk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpbGVTb3J0ZWQodmFsdWVzLCBwLCB2YWx1ZW9mID0gbnVtYmVyKSB7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSB8fCBpc05hTihwID0gK3ApKSByZXR1cm47XG4gIGlmIChwIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpbGVJbmRleCh2YWx1ZXMsIHAsIHZhbHVlb2YgPSBudW1iZXIpIHtcbiAgaWYgKGlzTmFOKHAgPSArcCkpIHJldHVybjtcbiAgbnVtYmVycyA9IEZsb2F0NjRBcnJheS5mcm9tKHZhbHVlcywgKF8sIGkpID0+IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpO1xuICBpZiAocCA8PSAwKSByZXR1cm4gbWluSW5kZXgobnVtYmVycyk7XG4gIGlmIChwID49IDEpIHJldHVybiBtYXhJbmRleChudW1iZXJzKTtcbiAgdmFyIG51bWJlcnMsXG4gICAgICBpbmRleCA9IFVpbnQzMkFycmF5LmZyb20odmFsdWVzLCAoXywgaSkgPT4gaSksXG4gICAgICBqID0gbnVtYmVycy5sZW5ndGggLSAxLFxuICAgICAgaSA9IE1hdGguZmxvb3IoaiAqIHApO1xuICBxdWlja3NlbGVjdChpbmRleCwgaSwgMCwgaiwgKGksIGopID0+IGFzY2VuZGluZ0RlZmluZWQobnVtYmVyc1tpXSwgbnVtYmVyc1tqXSkpO1xuICBpID0gZ3JlYXRlc3QoaW5kZXguc3ViYXJyYXkoMCwgaSArIDEpLCAoaSkgPT4gbnVtYmVyc1tpXSk7XG4gIHJldHVybiBpID49IDAgPyBpIDogLTE7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/quantile.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/quickselect.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-array/src/quickselect.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ quickselect)\n/* harmony export */ });\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-array/src/sort.js\");\n\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nfunction quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? _sort_js__WEBPACK_IMPORTED_MODULE_0__.ascendingDefined : (0,_sort_js__WEBPACK_IMPORTED_MODULE_0__.compareDefined)(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWlja3NlbGVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyRDs7QUFFM0Q7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9DQUFvQyxzREFBZ0IsR0FBRyx3REFBYzs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3F1aWNrc2VsZWN0LmpzPzhmODUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2NlbmRpbmdEZWZpbmVkLCBjb21wYXJlRGVmaW5lZH0gZnJvbSBcIi4vc29ydC5qc1wiO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbW91cm5lci9xdWlja3NlbGVjdFxuLy8gSVNDIGxpY2Vuc2UsIENvcHlyaWdodCAyMDE4IFZsYWRpbWlyIEFnYWZvbmtpbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1aWNrc2VsZWN0KGFycmF5LCBrLCBsZWZ0ID0gMCwgcmlnaHQgPSBJbmZpbml0eSwgY29tcGFyZSkge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgbGVmdCA9IE1hdGguZmxvb3IoTWF0aC5tYXgoMCwgbGVmdCkpO1xuICByaWdodCA9IE1hdGguZmxvb3IoTWF0aC5taW4oYXJyYXkubGVuZ3RoIC0gMSwgcmlnaHQpKTtcblxuICBpZiAoIShsZWZ0IDw9IGsgJiYgayA8PSByaWdodCkpIHJldHVybiBhcnJheTtcblxuICBjb21wYXJlID0gY29tcGFyZSA9PT0gdW5kZWZpbmVkID8gYXNjZW5kaW5nRGVmaW5lZCA6IGNvbXBhcmVEZWZpbmVkKGNvbXBhcmUpO1xuXG4gIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICBjb25zdCBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IG0gPSBrIC0gbGVmdCArIDE7XG4gICAgICBjb25zdCB6ID0gTWF0aC5sb2cobik7XG4gICAgICBjb25zdCBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgIGNvbnN0IHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogKG0gLSBuIC8gMiA8IDAgPyAtMSA6IDEpO1xuICAgICAgY29uc3QgbmV3TGVmdCA9IE1hdGgubWF4KGxlZnQsIE1hdGguZmxvb3IoayAtIG0gKiBzIC8gbiArIHNkKSk7XG4gICAgICBjb25zdCBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgcXVpY2tzZWxlY3QoYXJyYXksIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBjb21wYXJlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ID0gYXJyYXlba107XG4gICAgbGV0IGkgPSBsZWZ0O1xuICAgIGxldCBqID0gcmlnaHQ7XG5cbiAgICBzd2FwKGFycmF5LCBsZWZ0LCBrKTtcbiAgICBpZiAoY29tcGFyZShhcnJheVtyaWdodF0sIHQpID4gMCkgc3dhcChhcnJheSwgbGVmdCwgcmlnaHQpO1xuXG4gICAgd2hpbGUgKGkgPCBqKSB7XG4gICAgICBzd2FwKGFycmF5LCBpLCBqKSwgKytpLCAtLWo7XG4gICAgICB3aGlsZSAoY29tcGFyZShhcnJheVtpXSwgdCkgPCAwKSArK2k7XG4gICAgICB3aGlsZSAoY29tcGFyZShhcnJheVtqXSwgdCkgPiAwKSAtLWo7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmUoYXJyYXlbbGVmdF0sIHQpID09PSAwKSBzd2FwKGFycmF5LCBsZWZ0LCBqKTtcbiAgICBlbHNlICsraiwgc3dhcChhcnJheSwgaiwgcmlnaHQpO1xuXG4gICAgaWYgKGogPD0gaykgbGVmdCA9IGogKyAxO1xuICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyYXksIGksIGopIHtcbiAgY29uc3QgdCA9IGFycmF5W2ldO1xuICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICBhcnJheVtqXSA9IHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/quickselect.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/range.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/range.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ range)\n/* harmony export */ });\nfunction range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcz83NWRkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/range.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/rank.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/rank.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ rank)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-array/src/sort.js\");\n\n\n\nfunction rank(values, valueof = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n let V = Array.from(values);\n const R = new Float64Array(V.length);\n if (valueof.length !== 2) V = V.map(valueof), valueof = _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n const compareIndex = (i, j) => valueof(V[i], V[j]);\n let k, r;\n values = Uint32Array.from(V, (_, i) => i);\n // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\n values.sort(valueof === _ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? (i, j) => (0,_sort_js__WEBPACK_IMPORTED_MODULE_1__.ascendingDefined)(V[i], V[j]) : (0,_sort_js__WEBPACK_IMPORTED_MODULE_1__.compareDefined)(compareIndex));\n values.forEach((j, i) => {\n const c = compareIndex(j, k === undefined ? j : k);\n if (c >= 0) {\n if (k === undefined || c > 0) k = j, r = i;\n R[j] = r;\n } else {\n R[j] = NaN;\n }\n });\n return R;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5rLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNvQjs7QUFFNUMsZ0NBQWdDLHFEQUFTO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxxREFBUztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixxREFBUyxhQUFhLDBEQUFnQixlQUFlLHdEQUFjO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuay5qcz9hZTJhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQge2FzY2VuZGluZ0RlZmluZWQsIGNvbXBhcmVEZWZpbmVkfSBmcm9tIFwiLi9zb3J0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmsodmFsdWVzLCB2YWx1ZW9mID0gYXNjZW5kaW5nKSB7XG4gIGlmICh0eXBlb2YgdmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0gIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlcyBpcyBub3QgaXRlcmFibGVcIik7XG4gIGxldCBWID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICBjb25zdCBSID0gbmV3IEZsb2F0NjRBcnJheShWLmxlbmd0aCk7XG4gIGlmICh2YWx1ZW9mLmxlbmd0aCAhPT0gMikgViA9IFYubWFwKHZhbHVlb2YpLCB2YWx1ZW9mID0gYXNjZW5kaW5nO1xuICBjb25zdCBjb21wYXJlSW5kZXggPSAoaSwgaikgPT4gdmFsdWVvZihWW2ldLCBWW2pdKTtcbiAgbGV0IGssIHI7XG4gIHZhbHVlcyA9IFVpbnQzMkFycmF5LmZyb20oViwgKF8sIGkpID0+IGkpO1xuICAvLyBSaXNreSBjaGFpbmluZyBkdWUgdG8gU2FmYXJpIDE0IGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1hcnJheS9pc3N1ZXMvMTIzXG4gIHZhbHVlcy5zb3J0KHZhbHVlb2YgPT09IGFzY2VuZGluZyA/IChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKFZbaV0sIFZbal0pIDogY29tcGFyZURlZmluZWQoY29tcGFyZUluZGV4KSk7XG4gIHZhbHVlcy5mb3JFYWNoKChqLCBpKSA9PiB7XG4gICAgICBjb25zdCBjID0gY29tcGFyZUluZGV4KGosIGsgPT09IHVuZGVmaW5lZCA/IGogOiBrKTtcbiAgICAgIGlmIChjID49IDApIHtcbiAgICAgICAgaWYgKGsgPT09IHVuZGVmaW5lZCB8fCBjID4gMCkgayA9IGosIHIgPSBpO1xuICAgICAgICBSW2pdID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJbal0gPSBOYU47XG4gICAgICB9XG4gICAgfSk7XG4gIHJldHVybiBSO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/rank.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/reduce.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/reduce.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ reduce)\n/* harmony export */ });\nfunction reduce(values, reducer, value) {\n if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n const iterator = values[Symbol.iterator]();\n let done, next, index = -1;\n if (arguments.length < 3) {\n ({done, value} = iterator.next());\n if (done) return;\n ++index;\n }\n while (({done, value: next} = iterator.next()), !done) {\n value = reducer(value, next, ++index, values);\n }\n return value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yZWR1Y2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGFBQWE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yZWR1Y2UuanM/N2ZhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2UodmFsdWVzLCByZWR1Y2VyLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZHVjZXIgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gIGNvbnN0IGl0ZXJhdG9yID0gdmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgbGV0IGRvbmUsIG5leHQsIGluZGV4ID0gLTE7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICh7ZG9uZSwgdmFsdWV9ID0gaXRlcmF0b3IubmV4dCgpKTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICsraW5kZXg7XG4gIH1cbiAgd2hpbGUgKCh7ZG9uZSwgdmFsdWU6IG5leHR9ID0gaXRlcmF0b3IubmV4dCgpKSwgIWRvbmUpIHtcbiAgICB2YWx1ZSA9IHJlZHVjZXIodmFsdWUsIG5leHQsICsraW5kZXgsIHZhbHVlcyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/reduce.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/reverse.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-array/src/reverse.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ reverse)\n/* harmony export */ });\nfunction reverse(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yZXZlcnNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JldmVyc2UuanM/OTNjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXZlcnNlKHZhbHVlcykge1xuICBpZiAodHlwZW9mIHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZXMpLnJldmVyc2UoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/reverse.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/scan.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/scan.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ scan)\n/* harmony export */ });\n/* harmony import */ var _leastIndex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./leastIndex.js */ \"../../../node_modules/d3-array/src/leastIndex.js\");\n\n\nfunction scan(values, compare) {\n const index = (0,_leastIndex_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values, compare);\n return index < 0 ? undefined : index;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zY2FuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlDOztBQUUxQjtBQUNmLGdCQUFnQiwwREFBVTtBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc2Nhbi5qcz81NzE5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsZWFzdEluZGV4IGZyb20gXCIuL2xlYXN0SW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2Nhbih2YWx1ZXMsIGNvbXBhcmUpIHtcbiAgY29uc3QgaW5kZXggPSBsZWFzdEluZGV4KHZhbHVlcywgY29tcGFyZSk7XG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBpbmRleDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/scan.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/shuffle.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-array/src/shuffle.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"shuffler\": () => (/* binding */ shuffler)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (shuffler(Math.random));\n\nfunction shuffler(random) {\n return function shuffle(array, i0 = 0, i1 = array.length) {\n let m = i1 - (i0 = +i0);\n while (m) {\n const i = random() * m-- | 0, t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n return array;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zaHVmZmxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUVBQWUscUJBQXFCLEVBQUM7O0FBRTlCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zaHVmZmxlLmpzPzIxYWQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgc2h1ZmZsZXIoTWF0aC5yYW5kb20pO1xuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZXIocmFuZG9tKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzaHVmZmxlKGFycmF5LCBpMCA9IDAsIGkxID0gYXJyYXkubGVuZ3RoKSB7XG4gICAgbGV0IG0gPSBpMSAtIChpMCA9ICtpMCk7XG4gICAgd2hpbGUgKG0pIHtcbiAgICAgIGNvbnN0IGkgPSByYW5kb20oKSAqIG0tLSB8IDAsIHQgPSBhcnJheVttICsgaTBdO1xuICAgICAgYXJyYXlbbSArIGkwXSA9IGFycmF5W2kgKyBpMF07XG4gICAgICBhcnJheVtpICsgaTBdID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/shuffle.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/some.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/some.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ some)\n/* harmony export */ });\nfunction some(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n return true;\n }\n }\n return false;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zb21lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NvbWUuanM/NDg0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb21lKHZhbHVlcywgdGVzdCkge1xuICBpZiAodHlwZW9mIHRlc3QgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRlc3QgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIGlmICh0ZXN0KHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/some.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/sort.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-array/src/sort.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ascendingDefined\": () => (/* binding */ ascendingDefined),\n/* harmony export */ \"compareDefined\": () => (/* binding */ compareDefined),\n/* harmony export */ \"default\": () => (/* binding */ sort)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _permute_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./permute.js */ \"../../../node_modules/d3-array/src/permute.js\");\n\n\n\nfunction sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return (0,_permute_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nfunction compareDefined(compare = _ascending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) {\n if (compare === _ascending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nfunction ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zb3J0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXVDO0FBQ0o7O0FBRXBCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVEQUFPO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFTyxrQ0FBa0MscURBQVM7QUFDbEQsa0JBQWtCLHFEQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NvcnQuanM/MzQ2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IHBlcm11dGUgZnJvbSBcIi4vcGVybXV0ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0KHZhbHVlcywgLi4uRikge1xuICBpZiAodHlwZW9mIHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB2YWx1ZXMgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gIGxldCBbZl0gPSBGO1xuICBpZiAoKGYgJiYgZi5sZW5ndGggIT09IDIpIHx8IEYubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGluZGV4ID0gVWludDMyQXJyYXkuZnJvbSh2YWx1ZXMsIChkLCBpKSA9PiBpKTtcbiAgICBpZiAoRi5sZW5ndGggPiAxKSB7XG4gICAgICBGID0gRi5tYXAoZiA9PiB2YWx1ZXMubWFwKGYpKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIEYpIHtcbiAgICAgICAgICBjb25zdCBjID0gYXNjZW5kaW5nRGVmaW5lZChmW2ldLCBmW2pdKTtcbiAgICAgICAgICBpZiAoYykgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmID0gdmFsdWVzLm1hcChmKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGVybXV0ZSh2YWx1ZXMsIGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLnNvcnQoY29tcGFyZURlZmluZWQoZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURlZmluZWQoY29tcGFyZSA9IGFzY2VuZGluZykge1xuICBpZiAoY29tcGFyZSA9PT0gYXNjZW5kaW5nKSByZXR1cm4gYXNjZW5kaW5nRGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBjb21wYXJlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb21wYXJlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICBjb25zdCB4ID0gY29tcGFyZShhLCBiKTtcbiAgICBpZiAoeCB8fCB4ID09PSAwKSByZXR1cm4geDtcbiAgICByZXR1cm4gKGNvbXBhcmUoYiwgYikgPT09IDApIC0gKGNvbXBhcmUoYSwgYSkgPT09IDApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kaW5nRGVmaW5lZChhLCBiKSB7XG4gIHJldHVybiAoYSA9PSBudWxsIHx8ICEoYSA+PSBhKSkgLSAoYiA9PSBudWxsIHx8ICEoYiA+PSBiKSkgfHwgKGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/sort.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/subset.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-array/src/subset.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ subset)\n/* harmony export */ });\n/* harmony import */ var _superset_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./superset.js */ \"../../../node_modules/d3-array/src/superset.js\");\n\n\nfunction subset(values, other) {\n return (0,_superset_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other, values);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zdWJzZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXRCO0FBQ2YsU0FBUyx3REFBUTtBQUNqQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1YnNldC5qcz84MzU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdXBlcnNldCBmcm9tIFwiLi9zdXBlcnNldC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJzZXQodmFsdWVzLCBvdGhlcikge1xuICByZXR1cm4gc3VwZXJzZXQob3RoZXIsIHZhbHVlcyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/subset.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/sum.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/sum.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ sum)\n/* harmony export */ });\nfunction sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zdW0uanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzPzVlYTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/sum.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/superset.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/superset.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ superset)\n/* harmony export */ });\nfunction superset(values, other) {\n const iterator = values[Symbol.iterator](), set = new Set();\n for (const o of other) {\n const io = intern(o);\n if (set.has(io)) continue;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) return false;\n const ivalue = intern(value);\n set.add(ivalue);\n if (Object.is(io, ivalue)) break;\n }\n }\n return true;\n}\n\nfunction intern(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zdXBlcnNldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VwZXJzZXQuanM/M2NhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdXBlcnNldCh2YWx1ZXMsIG90aGVyKSB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gdmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0oKSwgc2V0ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IG8gb2Ygb3RoZXIpIHtcbiAgICBjb25zdCBpbyA9IGludGVybihvKTtcbiAgICBpZiAoc2V0LmhhcyhpbykpIGNvbnRpbnVlO1xuICAgIGxldCB2YWx1ZSwgZG9uZTtcbiAgICB3aGlsZSAoKHt2YWx1ZSwgZG9uZX0gPSBpdGVyYXRvci5uZXh0KCkpKSB7XG4gICAgICBpZiAoZG9uZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaXZhbHVlID0gaW50ZXJuKHZhbHVlKTtcbiAgICAgIHNldC5hZGQoaXZhbHVlKTtcbiAgICAgIGlmIChPYmplY3QuaXMoaW8sIGl2YWx1ZSkpIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/superset.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ thresholdFreedmanDiaconis)\n/* harmony export */ });\n/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../count.js */ \"../../../node_modules/d3-array/src/count.js\");\n/* harmony import */ var _quantile_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../quantile.js */ \"../../../node_modules/d3-array/src/quantile.js\");\n\n\n\nfunction thresholdFreedmanDiaconis(values, min, max) {\n const c = (0,_count_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values), d = (0,_quantile_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, 0.75) - (0,_quantile_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, 0.25);\n return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZ0M7QUFDTTs7QUFFdkI7QUFDZixZQUFZLHFEQUFLLGNBQWMsd0RBQVEsaUJBQWlCLHdEQUFRO0FBQ2hFO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pcy5qcz9kMjFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3VudCBmcm9tIFwiLi4vY291bnQuanNcIjtcbmltcG9ydCBxdWFudGlsZSBmcm9tIFwiLi4vcXVhbnRpbGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcyh2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gIGNvbnN0IGMgPSBjb3VudCh2YWx1ZXMpLCBkID0gcXVhbnRpbGUodmFsdWVzLCAwLjc1KSAtIHF1YW50aWxlKHZhbHVlcywgMC4yNSk7XG4gIHJldHVybiBjICYmIGQgPyBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMiAqIGQgKiBNYXRoLnBvdyhjLCAtMSAvIDMpKSkgOiAxO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/threshold/scott.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-array/src/threshold/scott.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ thresholdScott)\n/* harmony export */ });\n/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../count.js */ \"../../../node_modules/d3-array/src/count.js\");\n/* harmony import */ var _deviation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../deviation.js */ \"../../../node_modules/d3-array/src/deviation.js\");\n\n\n\nfunction thresholdScott(values, min, max) {\n const c = (0,_count_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values), d = (0,_deviation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values);\n return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc2NvdHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdDO0FBQ1E7O0FBRXpCO0FBQ2YsWUFBWSxxREFBSyxjQUFjLHlEQUFTO0FBQ3hDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc2NvdHQuanM/OWQ4NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY291bnQgZnJvbSBcIi4uL2NvdW50LmpzXCI7XG5pbXBvcnQgZGV2aWF0aW9uIGZyb20gXCIuLi9kZXZpYXRpb24uanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZXNob2xkU2NvdHQodmFsdWVzLCBtaW4sIG1heCkge1xuICBjb25zdCBjID0gY291bnQodmFsdWVzKSwgZCA9IGRldmlhdGlvbih2YWx1ZXMpO1xuICByZXR1cm4gYyAmJiBkID8gTWF0aC5jZWlsKChtYXggLSBtaW4pICogTWF0aC5jYnJ0KGMpIC8gKDMuNDkgKiBkKSkgOiAxO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/threshold/scott.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/threshold/sturges.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-array/src/threshold/sturges.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ thresholdSturges)\n/* harmony export */ });\n/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../count.js */ \"../../../node_modules/d3-array/src/count.js\");\n\n\nfunction thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log((0,_count_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(values)) / Math.LN2) + 1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFakI7QUFDZix3Q0FBd0MscURBQUs7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcz8yNWE2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3VudCBmcm9tIFwiLi4vY291bnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZXNob2xkU3R1cmdlcyh2YWx1ZXMpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguY2VpbChNYXRoLmxvZyhjb3VudCh2YWx1ZXMpKSAvIE1hdGguTE4yKSArIDEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/threshold/sturges.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/ticks.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/ticks.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ticks),\n/* harmony export */ \"tickIncrement\": () => (/* binding */ tickIncrement),\n/* harmony export */ \"tickStep\": () => (/* binding */ tickStep)\n/* harmony export */ });\nconst e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nfunction ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nfunction tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTztBQUN4Qyx5QkFBeUIsT0FBTztBQUNoQyxJQUFJO0FBQ0osaUNBQWlDLE9BQU87QUFDeEMseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcz9iZDVkIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5mdW5jdGlvbiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgY29uc3Qgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAoc3RlcCkpLFxuICAgICAgZXJyb3IgPSBzdGVwIC8gTWF0aC5wb3coMTAsIHBvd2VyKSxcbiAgICAgIGZhY3RvciA9IGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMTtcbiAgbGV0IGkxLCBpMiwgaW5jO1xuICBpZiAocG93ZXIgPCAwKSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIC1wb3dlcikgLyBmYWN0b3I7XG4gICAgaTEgPSBNYXRoLnJvdW5kKHN0YXJ0ICogaW5jKTtcbiAgICBpMiA9IE1hdGgucm91bmQoc3RvcCAqIGluYyk7XG4gICAgaWYgKGkxIC8gaW5jIDwgc3RhcnQpICsraTE7XG4gICAgaWYgKGkyIC8gaW5jID4gc3RvcCkgLS1pMjtcbiAgICBpbmMgPSAtaW5jO1xuICB9IGVsc2Uge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCBwb3dlcikgKiBmYWN0b3I7XG4gICAgaTEgPSBNYXRoLnJvdW5kKHN0YXJ0IC8gaW5jKTtcbiAgICBpMiA9IE1hdGgucm91bmQoc3RvcCAvIGluYyk7XG4gICAgaWYgKGkxICogaW5jIDwgc3RhcnQpICsraTE7XG4gICAgaWYgKGkyICogaW5jID4gc3RvcCkgLS1pMjtcbiAgfVxuICBpZiAoaTIgPCBpMSAmJiAwLjUgPD0gY291bnQgJiYgY291bnQgPCAyKSByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50ICogMik7XG4gIHJldHVybiBbaTEsIGkyLCBpbmNdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGlmICghKGNvdW50ID4gMCkpIHJldHVybiBbXTtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wKSByZXR1cm4gW3N0YXJ0XTtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgW2kxLCBpMiwgaW5jXSA9IHJldmVyc2UgPyB0aWNrU3BlYyhzdG9wLCBzdGFydCwgY291bnQpIDogdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgaWYgKCEoaTIgPj0gaTEpKSByZXR1cm4gW107XG4gIGNvbnN0IG4gPSBpMiAtIGkxICsgMSwgdGlja3MgPSBuZXcgQXJyYXkobik7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMiAtIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMiAtIGkpICogaW5jO1xuICB9IGVsc2Uge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTEgKyBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTEgKyBpKSAqIGluYztcbiAgfVxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudClbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIGluYyA9IHJldmVyc2UgPyB0aWNrSW5jcmVtZW50KHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIHJldHVybiAocmV2ZXJzZSA/IC0xIDogMSkgKiAoaW5jIDwgMCA/IDEgLyAtaW5jIDogaW5jKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/ticks.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/transpose.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-array/src/transpose.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ transpose)\n/* harmony export */ });\n/* harmony import */ var _min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./min.js */ \"../../../node_modules/d3-array/src/min.js\");\n\n\nfunction transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = (0,_min_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length(d) {\n return d.length;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90cmFuc3Bvc2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkI7O0FBRVo7QUFDZjtBQUNBLHVCQUF1QixtREFBRyw0Q0FBNEMsUUFBUTtBQUM5RSwyREFBMkQsUUFBUTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RyYW5zcG9zZS5qcz8yNmExIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtaW4gZnJvbSBcIi4vbWluLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zcG9zZShtYXRyaXgpIHtcbiAgaWYgKCEobiA9IG1hdHJpeC5sZW5ndGgpKSByZXR1cm4gW107XG4gIGZvciAodmFyIGkgPSAtMSwgbSA9IG1pbihtYXRyaXgsIGxlbmd0aCksIHRyYW5zcG9zZSA9IG5ldyBBcnJheShtKTsgKytpIDwgbTspIHtcbiAgICBmb3IgKHZhciBqID0gLTEsIG4sIHJvdyA9IHRyYW5zcG9zZVtpXSA9IG5ldyBBcnJheShuKTsgKytqIDwgbjspIHtcbiAgICAgIHJvd1tqXSA9IG1hdHJpeFtqXVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoKGQpIHtcbiAgcmV0dXJuIGQubGVuZ3RoO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/transpose.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/union.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-array/src/union.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ union)\n/* harmony export */ });\n/* harmony import */ var internmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! internmap */ \"../../../node_modules/internmap/src/index.js\");\n\n\nfunction union(...others) {\n const set = new internmap__WEBPACK_IMPORTED_MODULE_0__.InternSet();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy91bmlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvQzs7QUFFckI7QUFDZixrQkFBa0IsZ0RBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy91bmlvbi5qcz80YzIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW50ZXJuU2V0fSBmcm9tIFwiaW50ZXJubWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaW9uKC4uLm90aGVycykge1xuICBjb25zdCBzZXQgPSBuZXcgSW50ZXJuU2V0KCk7XG4gIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XG4gICAgZm9yIChjb25zdCBvIG9mIG90aGVyKSB7XG4gICAgICBzZXQuYWRkKG8pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2V0O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/union.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/variance.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-array/src/variance.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ variance)\n/* harmony export */ });\nfunction variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzPzEwN2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFyaWFuY2UodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGxldCBkZWx0YTtcbiAgbGV0IG1lYW4gPSAwO1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICBkZWx0YSA9IHZhbHVlIC0gbWVhbjtcbiAgICAgICAgbWVhbiArPSBkZWx0YSAvICsrY291bnQ7XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNvdW50ID4gMSkgcmV0dXJuIHN1bSAvIChjb3VudCAtIDEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/variance.js\n"); /***/ }), /***/ "../../../node_modules/d3-array/src/zip.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-array/src/zip.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ zip)\n/* harmony export */ });\n/* harmony import */ var _transpose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transpose.js */ \"../../../node_modules/d3-array/src/transpose.js\");\n\n\nfunction zip() {\n return (0,_transpose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy96aXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdUM7O0FBRXhCO0FBQ2YsU0FBUyx5REFBUztBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ppcC5qcz8zMDljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cmFuc3Bvc2UgZnJvbSBcIi4vdHJhbnNwb3NlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHppcCgpIHtcbiAgcmV0dXJuIHRyYW5zcG9zZShhcmd1bWVudHMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-array/src/zip.js\n"); /***/ }), /***/ "../../../node_modules/d3-axis/src/axis.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-axis/src/axis.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"axisBottom\": () => (/* binding */ axisBottom),\n/* harmony export */ \"axisLeft\": () => (/* binding */ axisLeft),\n/* harmony export */ \"axisRight\": () => (/* binding */ axisRight),\n/* harmony export */ \"axisTop\": () => (/* binding */ axisTop)\n/* harmony export */ });\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-axis/src/identity.js\");\n\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nfunction axisTop(scale) {\n return axis(top, scale);\n}\n\nfunction axisRight(scale) {\n return axis(right, scale);\n}\n\nfunction axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nfunction axisLeft(scale) {\n return axis(left, scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2F4aXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUdBQXlHLG9EQUFRO0FBQ2pIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQyw0RkFBNEY7O0FBRXZJO0FBQ0E7QUFDQSwyQ0FBMkMsZ0NBQWdDLHlFQUF5RTtBQUNwSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDLHlDQUF5Qzs7QUFFbEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQix5QkFBeUI7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzPzc0NDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArIHkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSBvZmZzZXQgKiAyKSAvIDI7XG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBvZmZzZXQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSA/IDAgOiAwLjUsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyBvZmZzZXQsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIG9mZnNldCxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCksIG9mZnNldCksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkICsgb2Zmc2V0KSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0oKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKSArIG9mZnNldCk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkhcIiArIG9mZnNldCArIFwiVlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgb2Zmc2V0ICsgXCIsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlZcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpICsgb2Zmc2V0KTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgYXhpcy5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gK18sIGF4aXMpIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-axis/src/axis.js\n"); /***/ }), /***/ "../../../node_modules/d3-axis/src/identity.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-axis/src/identity.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2lkZW50aXR5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcz80NTc5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-axis/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-axis/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-axis/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"axisBottom\": () => (/* reexport safe */ _axis_js__WEBPACK_IMPORTED_MODULE_0__.axisBottom),\n/* harmony export */ \"axisLeft\": () => (/* reexport safe */ _axis_js__WEBPACK_IMPORTED_MODULE_0__.axisLeft),\n/* harmony export */ \"axisRight\": () => (/* reexport safe */ _axis_js__WEBPACK_IMPORTED_MODULE_0__.axisRight),\n/* harmony export */ \"axisTop\": () => (/* reexport safe */ _axis_js__WEBPACK_IMPORTED_MODULE_0__.axisTop)\n/* harmony export */ });\n/* harmony import */ var _axis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./axis.js */ \"../../../node_modules/d3-axis/src/axis.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS21CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pbmRleC5qcz9mNWJmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGF4aXNUb3AsXG4gIGF4aXNSaWdodCxcbiAgYXhpc0JvdHRvbSxcbiAgYXhpc0xlZnRcbn0gZnJvbSBcIi4vYXhpcy5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-axis/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-brush/src/brush.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-brush/src/brush.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"brushSelection\": () => (/* binding */ brushSelection),\n/* harmony export */ \"brushX\": () => (/* binding */ brushX),\n/* harmony export */ \"brushY\": () => (/* binding */ brushY),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-drag */ \"../../../node_modules/d3-drag/src/nodrag.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-transition */ \"../../../node_modules/d3-transition/src/index.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-brush/src/constant.js\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ \"../../../node_modules/d3-brush/src/event.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noevent.js */ \"../../../node_modules/d3-brush/src/noevent.js\");\n\n\n\n\n\n\n\n\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n return brush(X);\n}\n\nfunction brushY() {\n return brush(Y);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.that).datum();\n listeners.call(\n type,\n this.that,\n new _event_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n ;(0,d3_drag__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__.nopropagation)(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n (0,d3_drag__WEBPACK_IMPORTED_MODULE_8__.yesdrag)(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQXFDO0FBQ1c7QUFDTDtBQUNFO0FBQ0w7QUFDSDtBQUNEO0FBQ2dCOztBQUVwRCxpQkFBaUIsYUFBYTtBQUM5QixrQkFBa0IsY0FBYztBQUNoQyxtQkFBbUIsZUFBZTtBQUNsQyxtQkFBbUI7O0FBRW5CLE9BQU8sZUFBZTs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUVBQWlFO0FBQzNGLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUVBQWlFO0FBQzNGLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IseUNBQXlDO0FBQ2pFLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBLDZCQUFlLHNDQUFX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eUUsd0RBQVE7QUFDakY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanM/MWU5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-brush/src/brush.js\n"); /***/ }), /***/ "../../../node_modules/d3-brush/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-brush/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvY29uc3RhbnQuanM/M2IwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-brush/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-brush/src/event.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-brush/src/event.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BrushEvent)\n/* harmony export */ });\nfunction BrushEvent(type, {\n sourceEvent,\n target,\n selection,\n mode,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n selection: {value: selection, enumerable: true, configurable: true},\n mode: {value: mode, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0Qsa0JBQWtCLHlEQUF5RDtBQUMzRSxhQUFhLG9EQUFvRDtBQUNqRSxnQkFBZ0IsdURBQXVEO0FBQ3ZFLFdBQVcsa0RBQWtEO0FBQzdELFFBQVE7QUFDUixHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcz80MzBmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJydXNoRXZlbnQodHlwZSwge1xuICBzb3VyY2VFdmVudCxcbiAgdGFyZ2V0LFxuICBzZWxlY3Rpb24sXG4gIG1vZGUsXG4gIGRpc3BhdGNoXG59KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICB0eXBlOiB7dmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc291cmNlRXZlbnQ6IHt2YWx1ZTogc291cmNlRXZlbnQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgdGFyZ2V0OiB7dmFsdWU6IHRhcmdldCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBzZWxlY3Rpb246IHt2YWx1ZTogc2VsZWN0aW9uLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIG1vZGU6IHt2YWx1ZTogbW9kZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBfOiB7dmFsdWU6IGRpc3BhdGNofVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-brush/src/event.js\n"); /***/ }), /***/ "../../../node_modules/d3-brush/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-brush/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"brush\": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"brushSelection\": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushSelection),\n/* harmony export */ \"brushX\": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushX),\n/* harmony export */ \"brushY\": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushY)\n/* harmony export */ });\n/* harmony import */ var _brush_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./brush.js */ \"../../../node_modules/d3-brush/src/brush.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtvQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2luZGV4LmpzPzEzMzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBicnVzaCxcbiAgYnJ1c2hYLFxuICBicnVzaFksXG4gIGJydXNoU2VsZWN0aW9uXG59IGZyb20gXCIuL2JydXNoLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-brush/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-brush/src/noevent.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-brush/src/noevent.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"nopropagation\": () => (/* binding */ nopropagation)\n/* harmony export */ });\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ub2V2ZW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL25vZXZlbnQuanM/OGFiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-brush/src/noevent.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/array.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-chord/src/array.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"slice\": () => (/* binding */ slice)\n/* harmony export */ });\nvar slice = Array.prototype.slice;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9hcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9hcnJheS5qcz9kOTI3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/chord.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-chord/src/chord.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"chordDirected\": () => (/* binding */ chordDirected),\n/* harmony export */ \"chordTranspose\": () => (/* binding */ chordTranspose),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-chord/src/math.js\");\n\n\nfunction range(i, j) {\n return Array.from({length: j - i}, (_, k) => i + k);\n}\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return chord(false, false);\n}\n\nfunction chordTranspose() {\n return chord(false, true);\n}\n\nfunction chordDirected() {\n return chord(true, false);\n}\n\nfunction chord(directed, transpose) {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = new Array(n),\n groupIndex = range(0, n),\n chords = new Array(n * n),\n groups = new Array(n),\n k = 0, dx;\n\n matrix = Float64Array.from({length: n * n}, transpose\n ? (_, i) => matrix[i % n][i / n | 0]\n : (_, i) => matrix[i / n | 0][i % n]);\n\n // Compute the scaling factor from value to angle in [0, 2pi].\n for (let i = 0; i < n; ++i) {\n let x = 0;\n for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n k += groupSums[i] = x;\n }\n k = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(0, _math_js__WEBPACK_IMPORTED_MODULE_0__.tau - padAngle * n) / k;\n dx = k ? padAngle : _math_js__WEBPACK_IMPORTED_MODULE_0__.tau / n;\n\n // Compute the angles for each group and constituent chord.\n {\n let x = 0;\n if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n for (const i of groupIndex) {\n const x0 = x;\n if (directed) {\n const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\n for (const j of subgroupIndex) {\n if (j < 0) {\n const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n } else {\n const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n } else {\n const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n for (const j of subgroupIndex) {\n let chord;\n if (i < j) {\n chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n } else {\n chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n if (i === j) chord.source = chord.target;\n }\n if (chord.source && chord.target && chord.source.value < chord.target.value) {\n const source = chord.source;\n chord.source = chord.target;\n chord.target = source;\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n }\n x += dx;\n }\n }\n\n // Remove empty chords.\n chords = Object.values(chords);\n chords.groups = groups;\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9jaG9yZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1DOztBQUVuQztBQUNBLHFCQUFxQixjQUFjO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0Esc0JBQXNCLE9BQU87QUFDN0I7QUFDQTtBQUNBLFFBQVEsNkNBQUcsSUFBSSx5Q0FBRztBQUNsQix3QkFBd0IseUNBQUc7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUUsMkJBQTJCO0FBQ3BHLDhCQUE4QjtBQUM5QixjQUFjO0FBQ2QsdUVBQXVFLDJCQUEyQjtBQUNsRyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSwyQkFBMkI7QUFDNUYsOEJBQThCO0FBQzlCLGNBQWM7QUFDZCxpRUFBaUUsMkJBQTJCO0FBQzVGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsNkNBQUc7QUFDN0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2Nob3JkLmpzP2YzM2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHttYXgsIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiByYW5nZShpLCBqKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6IGogLSBpfSwgKF8sIGspID0+IGkgKyBrKTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVZhbHVlKGNvbXBhcmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gY29tcGFyZShcbiAgICAgIGEuc291cmNlLnZhbHVlICsgYS50YXJnZXQudmFsdWUsXG4gICAgICBiLnNvdXJjZS52YWx1ZSArIGIudGFyZ2V0LnZhbHVlXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjaG9yZChmYWxzZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvcmRUcmFuc3Bvc2UoKSB7XG4gIHJldHVybiBjaG9yZChmYWxzZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9yZERpcmVjdGVkKCkge1xuICByZXR1cm4gY2hvcmQodHJ1ZSwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBjaG9yZChkaXJlY3RlZCwgdHJhbnNwb3NlKSB7XG4gIHZhciBwYWRBbmdsZSA9IDAsXG4gICAgICBzb3J0R3JvdXBzID0gbnVsbCxcbiAgICAgIHNvcnRTdWJncm91cHMgPSBudWxsLFxuICAgICAgc29ydENob3JkcyA9IG51bGw7XG5cbiAgZnVuY3Rpb24gY2hvcmQobWF0cml4KSB7XG4gICAgdmFyIG4gPSBtYXRyaXgubGVuZ3RoLFxuICAgICAgICBncm91cFN1bXMgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGdyb3VwSW5kZXggPSByYW5nZSgwLCBuKSxcbiAgICAgICAgY2hvcmRzID0gbmV3IEFycmF5KG4gKiBuKSxcbiAgICAgICAgZ3JvdXBzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBrID0gMCwgZHg7XG5cbiAgICBtYXRyaXggPSBGbG9hdDY0QXJyYXkuZnJvbSh7bGVuZ3RoOiBuICogbn0sIHRyYW5zcG9zZVxuICAgICAgICA/IChfLCBpKSA9PiBtYXRyaXhbaSAlIG5dW2kgLyBuIHwgMF1cbiAgICAgICAgOiAoXywgaSkgPT4gbWF0cml4W2kgLyBuIHwgMF1baSAlIG5dKTtcblxuICAgIC8vIENvbXB1dGUgdGhlIHNjYWxpbmcgZmFjdG9yIGZyb20gdmFsdWUgdG8gYW5nbGUgaW4gWzAsIDJwaV0uXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGxldCB4ID0gMDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgKytqKSB4ICs9IG1hdHJpeFtpICogbiArIGpdICsgZGlyZWN0ZWQgKiBtYXRyaXhbaiAqIG4gKyBpXTtcbiAgICAgIGsgKz0gZ3JvdXBTdW1zW2ldID0geDtcbiAgICB9XG4gICAgayA9IG1heCgwLCB0YXUgLSBwYWRBbmdsZSAqIG4pIC8gaztcbiAgICBkeCA9IGsgPyBwYWRBbmdsZSA6IHRhdSAvIG47XG5cbiAgICAvLyBDb21wdXRlIHRoZSBhbmdsZXMgZm9yIGVhY2ggZ3JvdXAgYW5kIGNvbnN0aXR1ZW50IGNob3JkLlxuICAgIHtcbiAgICAgIGxldCB4ID0gMDtcbiAgICAgIGlmIChzb3J0R3JvdXBzKSBncm91cEluZGV4LnNvcnQoKGEsIGIpID0+IHNvcnRHcm91cHMoZ3JvdXBTdW1zW2FdLCBncm91cFN1bXNbYl0pKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBncm91cEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHgwID0geDtcbiAgICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgICAgY29uc3Qgc3ViZ3JvdXBJbmRleCA9IHJhbmdlKH5uICsgMSwgbikuZmlsdGVyKGogPT4gaiA8IDAgPyBtYXRyaXhbfmogKiBuICsgaV0gOiBtYXRyaXhbaSAqIG4gKyBqXSk7XG4gICAgICAgICAgaWYgKHNvcnRTdWJncm91cHMpIHN1Ymdyb3VwSW5kZXguc29ydCgoYSwgYikgPT4gc29ydFN1Ymdyb3VwcyhhIDwgMCA/IC1tYXRyaXhbfmEgKiBuICsgaV0gOiBtYXRyaXhbaSAqIG4gKyBhXSwgYiA8IDAgPyAtbWF0cml4W35iICogbiArIGldIDogbWF0cml4W2kgKiBuICsgYl0pKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGogb2Ygc3ViZ3JvdXBJbmRleCkge1xuICAgICAgICAgICAgaWYgKGogPCAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNob3JkID0gY2hvcmRzW35qICogbiArIGldIHx8IChjaG9yZHNbfmogKiBuICsgaV0gPSB7c291cmNlOiBudWxsLCB0YXJnZXQ6IG51bGx9KTtcbiAgICAgICAgICAgICAgY2hvcmQudGFyZ2V0ID0ge2luZGV4OiBpLCBzdGFydEFuZ2xlOiB4LCBlbmRBbmdsZTogeCArPSBtYXRyaXhbfmogKiBuICsgaV0gKiBrLCB2YWx1ZTogbWF0cml4W35qICogbiArIGldfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNob3JkID0gY2hvcmRzW2kgKiBuICsgal0gfHwgKGNob3Jkc1tpICogbiArIGpdID0ge3NvdXJjZTogbnVsbCwgdGFyZ2V0OiBudWxsfSk7XG4gICAgICAgICAgICAgIGNob3JkLnNvdXJjZSA9IHtpbmRleDogaSwgc3RhcnRBbmdsZTogeCwgZW5kQW5nbGU6IHggKz0gbWF0cml4W2kgKiBuICsgal0gKiBrLCB2YWx1ZTogbWF0cml4W2kgKiBuICsgal19O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cHNbaV0gPSB7aW5kZXg6IGksIHN0YXJ0QW5nbGU6IHgwLCBlbmRBbmdsZTogeCwgdmFsdWU6IGdyb3VwU3Vtc1tpXX07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3ViZ3JvdXBJbmRleCA9IHJhbmdlKDAsIG4pLmZpbHRlcihqID0+IG1hdHJpeFtpICogbiArIGpdIHx8IG1hdHJpeFtqICogbiArIGldKTtcbiAgICAgICAgICBpZiAoc29ydFN1Ymdyb3Vwcykgc3ViZ3JvdXBJbmRleC5zb3J0KChhLCBiKSA9PiBzb3J0U3ViZ3JvdXBzKG1hdHJpeFtpICogbiArIGFdLCBtYXRyaXhbaSAqIG4gKyBiXSkpO1xuICAgICAgICAgIGZvciAoY29uc3QgaiBvZiBzdWJncm91cEluZGV4KSB7XG4gICAgICAgICAgICBsZXQgY2hvcmQ7XG4gICAgICAgICAgICBpZiAoaSA8IGopIHtcbiAgICAgICAgICAgICAgY2hvcmQgPSBjaG9yZHNbaSAqIG4gKyBqXSB8fCAoY2hvcmRzW2kgKiBuICsgal0gPSB7c291cmNlOiBudWxsLCB0YXJnZXQ6IG51bGx9KTtcbiAgICAgICAgICAgICAgY2hvcmQuc291cmNlID0ge2luZGV4OiBpLCBzdGFydEFuZ2xlOiB4LCBlbmRBbmdsZTogeCArPSBtYXRyaXhbaSAqIG4gKyBqXSAqIGssIHZhbHVlOiBtYXRyaXhbaSAqIG4gKyBqXX07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaG9yZCA9IGNob3Jkc1tqICogbiArIGldIHx8IChjaG9yZHNbaiAqIG4gKyBpXSA9IHtzb3VyY2U6IG51bGwsIHRhcmdldDogbnVsbH0pO1xuICAgICAgICAgICAgICBjaG9yZC50YXJnZXQgPSB7aW5kZXg6IGksIHN0YXJ0QW5nbGU6IHgsIGVuZEFuZ2xlOiB4ICs9IG1hdHJpeFtpICogbiArIGpdICogaywgdmFsdWU6IG1hdHJpeFtpICogbiArIGpdfTtcbiAgICAgICAgICAgICAgaWYgKGkgPT09IGopIGNob3JkLnNvdXJjZSA9IGNob3JkLnRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaG9yZC5zb3VyY2UgJiYgY2hvcmQudGFyZ2V0ICYmIGNob3JkLnNvdXJjZS52YWx1ZSA8IGNob3JkLnRhcmdldC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjaG9yZC5zb3VyY2U7XG4gICAgICAgICAgICAgIGNob3JkLnNvdXJjZSA9IGNob3JkLnRhcmdldDtcbiAgICAgICAgICAgICAgY2hvcmQudGFyZ2V0ID0gc291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cHNbaV0gPSB7aW5kZXg6IGksIHN0YXJ0QW5nbGU6IHgwLCBlbmRBbmdsZTogeCwgdmFsdWU6IGdyb3VwU3Vtc1tpXX07XG4gICAgICAgIH1cbiAgICAgICAgeCArPSBkeDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZW1wdHkgY2hvcmRzLlxuICAgIGNob3JkcyA9IE9iamVjdC52YWx1ZXMoY2hvcmRzKTtcbiAgICBjaG9yZHMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIHJldHVybiBzb3J0Q2hvcmRzID8gY2hvcmRzLnNvcnQoc29ydENob3JkcykgOiBjaG9yZHM7XG4gIH1cblxuICBjaG9yZC5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IG1heCgwLCBfKSwgY2hvcmQpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgY2hvcmQuc29ydEdyb3VwcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0R3JvdXBzID0gXywgY2hvcmQpIDogc29ydEdyb3VwcztcbiAgfTtcblxuICBjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnRTdWJncm91cHMgPSBfLCBjaG9yZCkgOiBzb3J0U3ViZ3JvdXBzO1xuICB9O1xuXG4gIGNob3JkLnNvcnRDaG9yZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gc29ydENob3JkcyA9IG51bGwgOiAoc29ydENob3JkcyA9IGNvbXBhcmVWYWx1ZShfKSkuXyA9IF8sIGNob3JkKSA6IHNvcnRDaG9yZHMgJiYgc29ydENob3Jkcy5fO1xuICB9O1xuXG4gIHJldHVybiBjaG9yZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/chord.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-chord/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9jb25zdGFudC5qcz80NzljIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-chord/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"chord\": () => (/* reexport safe */ _chord_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"chordDirected\": () => (/* reexport safe */ _chord_js__WEBPACK_IMPORTED_MODULE_0__.chordDirected),\n/* harmony export */ \"chordTranspose\": () => (/* reexport safe */ _chord_js__WEBPACK_IMPORTED_MODULE_0__.chordTranspose),\n/* harmony export */ \"ribbon\": () => (/* reexport safe */ _ribbon_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"ribbonArrow\": () => (/* reexport safe */ _ribbon_js__WEBPACK_IMPORTED_MODULE_1__.ribbonArrow)\n/* harmony export */ });\n/* harmony import */ var _chord_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chord.js */ \"../../../node_modules/d3-chord/src/chord.js\");\n/* harmony import */ var _ribbon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ribbon.js */ \"../../../node_modules/d3-chord/src/ribbon.js\");\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTJFO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvaW5kZXguanM/YTIwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgY2hvcmQsIGNob3JkVHJhbnNwb3NlLCBjaG9yZERpcmVjdGVkfSBmcm9tIFwiLi9jaG9yZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJpYmJvbiwgcmliYm9uQXJyb3d9IGZyb20gXCIuL3JpYmJvbi5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/math.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-chord/src/math.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"abs\": () => (/* binding */ abs),\n/* harmony export */ \"cos\": () => (/* binding */ cos),\n/* harmony export */ \"epsilon\": () => (/* binding */ epsilon),\n/* harmony export */ \"halfPi\": () => (/* binding */ halfPi),\n/* harmony export */ \"max\": () => (/* binding */ max),\n/* harmony export */ \"pi\": () => (/* binding */ pi),\n/* harmony export */ \"sin\": () => (/* binding */ sin),\n/* harmony export */ \"tau\": () => (/* binding */ tau)\n/* harmony export */ });\nvar abs = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar tau = pi * 2;\nvar max = Math.max;\nvar epsilon = 1e-12;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9tYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL21hdGguanM/MjJlOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IHZhciBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydCB2YXIgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IHZhciB0YXUgPSBwaSAqIDI7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtMTI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/math.js\n"); /***/ }), /***/ "../../../node_modules/d3-chord/src/ribbon.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-chord/src/ribbon.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"ribbonArrow\": () => (/* binding */ ribbonArrow)\n/* harmony export */ });\n/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-path */ \"../../../node_modules/d3-path/src/path.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-chord/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-chord/src/constant.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-chord/src/math.js\");\n\n\n\n\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource,\n target = defaultTarget,\n sourceRadius = defaultRadius,\n targetRadius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = _array_js__WEBPACK_IMPORTED_MODULE_0__.slice.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi,\n sa1 = endAngle.apply(this, argv) - _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi,\n ta1 = endAngle.apply(this, argv) - _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi;\n\n if (!context) context = buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_2__.path)();\n\n if (ap > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) {\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(sa1 - sa0) > ap * 2 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(ta1 - ta0) > ap * 2 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(sa0), sr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(ta0), tr2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(ta0));\n context.lineTo(tr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(ta2), tr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(ta2));\n context.lineTo(tr2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(ta1), tr2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(ta0), tr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(sa0), sr * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return ribbon();\n}\n\nfunction ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9yaWJib24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTZCO0FBQ0k7QUFDSTtBQUNvQjs7QUFFekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpREFBVTtBQUN6QjtBQUNBLDZDQUE2Qyw0Q0FBTTtBQUNuRCwyQ0FBMkMsNENBQU07QUFDakQ7QUFDQSw2Q0FBNkMsNENBQU07QUFDbkQsMkNBQTJDLDRDQUFNOztBQUVqRCxxQ0FBcUMsNkNBQUk7O0FBRXpDLGFBQWEsNkNBQU87QUFDcEIsVUFBVSw2Q0FBRyx1QkFBdUIsNkNBQU87QUFDM0M7QUFDQSxVQUFVLDZDQUFHLHVCQUF1Qiw2Q0FBTztBQUMzQztBQUNBOztBQUVBLHdCQUF3Qiw2Q0FBRyxZQUFZLDZDQUFHO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDZDQUFHLGFBQWEsNkNBQUc7QUFDaEUsNEJBQTRCLDZDQUFHLFlBQVksNkNBQUc7QUFDOUMsNkJBQTZCLDZDQUFHLGFBQWEsNkNBQUc7QUFDaEQsUUFBUTtBQUNSLDRDQUE0Qyw2Q0FBRyxZQUFZLDZDQUFHO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyw2Q0FBRyxZQUFZLDZDQUFHO0FBQzFEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwRUFBMEUsd0RBQVE7QUFDbEY7O0FBRUE7QUFDQSwyRkFBMkYsd0RBQVE7QUFDbkc7O0FBRUE7QUFDQSw0RUFBNEUsd0RBQVE7QUFDcEY7O0FBRUE7QUFDQSw0RUFBNEUsd0RBQVE7QUFDcEY7O0FBRUE7QUFDQSwwRUFBMEUsd0RBQVE7QUFDbEY7O0FBRUE7QUFDQSx3RUFBd0Usd0RBQVE7QUFDaEY7O0FBRUE7QUFDQSx3RUFBd0Usd0RBQVE7QUFDaEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL3JpYmJvbi5qcz9iZTUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgc2lufSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTb3VyY2UoZCkge1xuICByZXR1cm4gZC5zb3VyY2U7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUYXJnZXQoZCkge1xuICByZXR1cm4gZC50YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSYWRpdXMoZCkge1xuICByZXR1cm4gZC5yYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdGFydEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuc3RhcnRBbmdsZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEVuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQYWRBbmdsZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRBcnJvd2hlYWRSYWRpdXMoKSB7XG4gIHJldHVybiAxMDtcbn1cblxuZnVuY3Rpb24gcmliYm9uKGhlYWRSYWRpdXMpIHtcbiAgdmFyIHNvdXJjZSA9IGRlZmF1bHRTb3VyY2UsXG4gICAgICB0YXJnZXQgPSBkZWZhdWx0VGFyZ2V0LFxuICAgICAgc291cmNlUmFkaXVzID0gZGVmYXVsdFJhZGl1cyxcbiAgICAgIHRhcmdldFJhZGl1cyA9IGRlZmF1bHRSYWRpdXMsXG4gICAgICBzdGFydEFuZ2xlID0gZGVmYXVsdFN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSA9IGRlZmF1bHRFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gZGVmYXVsdFBhZEFuZ2xlLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gcmliYm9uKCkge1xuICAgIHZhciBidWZmZXIsXG4gICAgICAgIHMgPSBzb3VyY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgdCA9IHRhcmdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBhcCA9IHBhZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLyAyLFxuICAgICAgICBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLFxuICAgICAgICBzciA9ICtzb3VyY2VSYWRpdXMuYXBwbHkodGhpcywgKGFyZ3ZbMF0gPSBzLCBhcmd2KSksXG4gICAgICAgIHNhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGksXG4gICAgICAgIHNhMSA9IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpLFxuICAgICAgICB0ciA9ICt0YXJnZXRSYWRpdXMuYXBwbHkodGhpcywgKGFyZ3ZbMF0gPSB0LCBhcmd2KSksXG4gICAgICAgIHRhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGksXG4gICAgICAgIHRhMSA9IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgaWYgKGFwID4gZXBzaWxvbikge1xuICAgICAgaWYgKGFicyhzYTEgLSBzYTApID4gYXAgKiAyICsgZXBzaWxvbikgc2ExID4gc2EwID8gKHNhMCArPSBhcCwgc2ExIC09IGFwKSA6IChzYTAgLT0gYXAsIHNhMSArPSBhcCk7XG4gICAgICBlbHNlIHNhMCA9IHNhMSA9IChzYTAgKyBzYTEpIC8gMjtcbiAgICAgIGlmIChhYnModGExIC0gdGEwKSA+IGFwICogMiArIGVwc2lsb24pIHRhMSA+IHRhMCA/ICh0YTAgKz0gYXAsIHRhMSAtPSBhcCkgOiAodGEwIC09IGFwLCB0YTEgKz0gYXApO1xuICAgICAgZWxzZSB0YTAgPSB0YTEgPSAodGEwICsgdGExKSAvIDI7XG4gICAgfVxuXG4gICAgY29udGV4dC5tb3ZlVG8oc3IgKiBjb3Moc2EwKSwgc3IgKiBzaW4oc2EwKSk7XG4gICAgY29udGV4dC5hcmMoMCwgMCwgc3IsIHNhMCwgc2ExKTtcbiAgICBpZiAoc2EwICE9PSB0YTAgfHwgc2ExICE9PSB0YTEpIHtcbiAgICAgIGlmIChoZWFkUmFkaXVzKSB7XG4gICAgICAgIHZhciBociA9ICtoZWFkUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyMiA9IHRyIC0gaHIsIHRhMiA9ICh0YTAgKyB0YTEpIC8gMjtcbiAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKDAsIDAsIHRyMiAqIGNvcyh0YTApLCB0cjIgKiBzaW4odGEwKSk7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHRyICogY29zKHRhMiksIHRyICogc2luKHRhMikpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh0cjIgKiBjb3ModGExKSwgdHIyICogc2luKHRhMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKDAsIDAsIHRyICogY29zKHRhMCksIHRyICogc2luKHRhMCkpO1xuICAgICAgICBjb250ZXh0LmFyYygwLCAwLCB0ciwgdGEwLCB0YTEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oMCwgMCwgc3IgKiBjb3Moc2EwKSwgc3IgKiBzaW4oc2EwKSk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgaWYgKGhlYWRSYWRpdXMpIHJpYmJvbi5oZWFkUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhlYWRSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IGhlYWRSYWRpdXM7XG4gIH07XG5cbiAgcmliYm9uLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2VSYWRpdXMgPSB0YXJnZXRSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IHNvdXJjZVJhZGl1cztcbiAgfTtcblxuICByaWJib24uc291cmNlUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvdXJjZVJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogc291cmNlUmFkaXVzO1xuICB9O1xuXG4gIHJpYmJvbi50YXJnZXRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFyZ2V0UmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHJpYmJvbikgOiB0YXJnZXRSYWRpdXM7XG4gIH07XG5cbiAgcmliYm9uLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICByaWJib24uZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIHJpYmJvbi5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgcmliYm9uLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCByaWJib24pIDogc291cmNlO1xuICB9O1xuXG4gIHJpYmJvbi50YXJnZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFyZ2V0ID0gXywgcmliYm9uKSA6IHRhcmdldDtcbiAgfTtcblxuICByaWJib24uY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgcmliYm9uKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIHJpYmJvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiByaWJib24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpYmJvbkFycm93KCkge1xuICByZXR1cm4gcmliYm9uKGRlZmF1bHRBcnJvd2hlYWRSYWRpdXMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-chord/src/ribbon.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/color.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-color/src/color.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Color\": () => (/* binding */ Color),\n/* harmony export */ \"Rgb\": () => (/* binding */ Rgb),\n/* harmony export */ \"brighter\": () => (/* binding */ brighter),\n/* harmony export */ \"darker\": () => (/* binding */ darker),\n/* harmony export */ \"default\": () => (/* binding */ color),\n/* harmony export */ \"hsl\": () => (/* binding */ hsl),\n/* harmony export */ \"hslConvert\": () => (/* binding */ hslConvert),\n/* harmony export */ \"rgb\": () => (/* binding */ rgb),\n/* harmony export */ \"rgbConvert\": () => (/* binding */ rgbConvert)\n/* harmony export */ });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ \"../../../node_modules/d3-color/src/define.js\");\n\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Rgb, rgb, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Hsl, hsl, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTJDOztBQUVwQzs7QUFFQTtBQUNBOztBQUVQO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixJQUFJO0FBQzdCLHdDQUF3QyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7QUFDMUQsd0NBQXdDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUMxRCwwQ0FBMEMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNuRSwwQ0FBMEMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNuRSx3Q0FBd0MsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJO0FBQzFELDBDQUEwQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0RBQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBTSxXQUFXLGtEQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxhQUFhLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWTtBQUNyRDs7QUFFQTtBQUNBLGFBQWEsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsb0RBQW9EO0FBQzNHOztBQUVBO0FBQ0E7QUFDQSxZQUFZLDJCQUEyQixFQUFFLGVBQWUsSUFBSSxlQUFlLElBQUksZUFBZSxFQUFFLHFCQUFxQixFQUFFLEdBQUc7QUFDMUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNEQUFNLFdBQVcsa0RBQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsY0FBYywyQkFBMkIsRUFBRSxlQUFlLElBQUkscUJBQXFCLEtBQUsscUJBQXFCLEdBQUcscUJBQXFCLEVBQUUsR0FBRztBQUMxSTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanM/MWY3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbG9yKCkge31cblxuZXhwb3J0IHZhciBkYXJrZXIgPSAwLjc7XG5leHBvcnQgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxuICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/KD86XFxcXGQqXFxcXC4pP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/KD86XFxcXGQqXFxcXC4pP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoYF5yZ2JcXFxcKCR7cmVJfSwke3JlSX0sJHtyZUl9XFxcXCkkYCksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZVB9LCR7cmVQfSwke3JlUH1cXFxcKSRgKSxcbiAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYmFcXFxcKCR7cmVJfSwke3JlSX0sJHtyZUl9LCR7cmVOfVxcXFwpJGApLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZVB9LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChgXmhzbFxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH1cXFxcKSRgKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChgXmhzbGFcXFxcKCR7cmVOfSwke3JlUH0sJHtyZVB9LCR7cmVOfVxcXFwpJGApO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5KGNoYW5uZWxzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKTtcbiAgfSxcbiAgaGV4OiBjb2xvcl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogY29sb3JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiBjb2xvcl9mb3JtYXRIZXg4LFxuICBmb3JtYXRIc2w6IGNvbG9yX2Zvcm1hdEhzbCxcbiAgZm9ybWF0UmdiOiBjb2xvcl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiBjb2xvcl9mb3JtYXRSZ2Jcbn0pO1xuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXg4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IFJnYihjbGFtcGkodGhpcy5yKSwgY2xhbXBpKHRoaXMuZyksIGNsYW1waSh0aGlzLmIpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoLTAuNSA8PSB0aGlzLnIgJiYgdGhpcy5yIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuZyAmJiB0aGlzLmcgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5iICYmIHRoaXMuYiA8IDI1NS41KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IHJnYl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogcmdiX2Zvcm1hdEhleCxcbiAgZm9ybWF0SGV4ODogcmdiX2Zvcm1hdEhleDgsXG4gIGZvcm1hdFJnYjogcmdiX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2Jcbn0pKTtcblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiBgIyR7aGV4KHRoaXMucil9JHtoZXgodGhpcy5nKX0ke2hleCh0aGlzLmIpfSR7aGV4KChpc05hTih0aGlzLm9wYWNpdHkpID8gMSA6IHRoaXMub3BhY2l0eSkgKiAyNTUpfWA7XG59XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRSZ2IoKSB7XG4gIGNvbnN0IGEgPSBjbGFtcGEodGhpcy5vcGFjaXR5KTtcbiAgcmV0dXJuIGAke2EgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIn0ke2NsYW1waSh0aGlzLnIpfSwgJHtjbGFtcGkodGhpcy5nKX0sICR7Y2xhbXBpKHRoaXMuYil9JHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbn1cblxuZnVuY3Rpb24gY2xhbXBhKG9wYWNpdHkpIHtcbiAgcmV0dXJuIGlzTmFOKG9wYWNpdHkpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG9wYWNpdHkpKTtcbn1cblxuZnVuY3Rpb24gY2xhbXBpKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodmFsdWUpIHx8IDApKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gY2xhbXBpKHZhbHVlKTtcbiAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gaHNsYShoLCBzLCBsLCBhKSB7XG4gIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjtcbiAgZWxzZSBpZiAobCA8PSAwIHx8IGwgPj0gMSkgaCA9IHMgPSBOYU47XG4gIGVsc2UgaWYgKHMgPD0gMCkgaCA9IE5hTjtcbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBuZXcgSHNsKG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IEhzbDtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBvO1xuICBvID0gby5yZ2IoKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBoID0gTmFOLFxuICAgICAgcyA9IG1heCAtIG1pbixcbiAgICAgIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gIGlmIChzKSB7XG4gICAgaWYgKHIgPT09IG1heCkgaCA9IChnIC0gYikgLyBzICsgKGcgPCBiKSAqIDY7XG4gICAgZWxzZSBpZiAoZyA9PT0gbWF4KSBoID0gKGIgLSByKSAvIHMgKyAyO1xuICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDtcbiAgICBzIC89IGwgPCAwLjUgPyBtYXggKyBtaW4gOiAyIC0gbWF4IC0gbWluO1xuICAgIGggKj0gNjA7XG4gIH0gZWxzZSB7XG4gICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7XG4gIH1cbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgY2xhbXAoKSB7XG4gICAgcmV0dXJuIG5ldyBIc2woY2xhbXBoKHRoaXMuaCksIGNsYW1wdCh0aGlzLnMpLCBjbGFtcHQodGhpcy5sKSwgY2xhbXBhKHRoaXMub3BhY2l0eSkpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsKCkge1xuICAgIGNvbnN0IGEgPSBjbGFtcGEodGhpcy5vcGFjaXR5KTtcbiAgICByZXR1cm4gYCR7YSA9PT0gMSA/IFwiaHNsKFwiIDogXCJoc2xhKFwifSR7Y2xhbXBoKHRoaXMuaCl9LCAke2NsYW1wdCh0aGlzLnMpICogMTAwfSUsICR7Y2xhbXB0KHRoaXMubCkgKiAxMDB9JSR7YSA9PT0gMSA/IFwiKVwiIDogYCwgJHthfSlgfWA7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24gY2xhbXBoKHZhbHVlKSB7XG4gIHZhbHVlID0gKHZhbHVlIHx8IDApICUgMzYwO1xuICByZXR1cm4gdmFsdWUgPCAwID8gdmFsdWUgKyAzNjAgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2xhbXB0KHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2YWx1ZSB8fCAwKSk7XG59XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/color.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/cubehelix.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-color/src/cubehelix.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cubehelix\": () => (/* binding */ Cubehelix),\n/* harmony export */ \"default\": () => (/* binding */ cubehelix)\n/* harmony export */ });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./define.js */ \"../../../node_modules/d3-color/src/define.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-color/src/math.js\");\n\n\n\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.rgbConvert)(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Cubehelix, cubehelix, (0,_define_js__WEBPACK_IMPORTED_MODULE_2__.extend)(_color_js__WEBPACK_IMPORTED_MODULE_0__.Color, {\n brighter(k) {\n k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__.brighter : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__.brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__.darker : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__.darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMkM7QUFDeUI7QUFDekI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQiwwQ0FBRyxPQUFPLHFEQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDZDQUFPO0FBQ3pDO0FBQ0E7O0FBRWU7QUFDZjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBTSx1QkFBdUIsa0RBQU0sQ0FBQyw0Q0FBSztBQUN6QztBQUNBLG9CQUFvQiwrQ0FBUSxZQUFZLCtDQUFRO0FBQ2hEO0FBQ0EsR0FBRztBQUNIO0FBQ0Esb0JBQW9CLDZDQUFNLFlBQVksNkNBQU07QUFDNUM7QUFDQSxHQUFHO0FBQ0g7QUFDQSxpREFBaUQsNkNBQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBDQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanM/OTE0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmltcG9ydCB7ZGVncmVlcywgcmFkaWFuc30gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIGRlZ3JlZXMgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiByYWRpYW5zLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/cubehelix.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/define.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-color/src/define.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"extend\": () => (/* binding */ extend)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcz8zNzc5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/define.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-color/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"color\": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"cubehelix\": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"gray\": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.gray),\n/* harmony export */ \"hcl\": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.hcl),\n/* harmony export */ \"hsl\": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.hsl),\n/* harmony export */ \"lab\": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"lch\": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.lch),\n/* harmony export */ \"rgb\": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.rgb)\n/* harmony export */ });\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lab.js */ \"../../../node_modules/d3-color/src/lab.js\");\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubehelix.js */ \"../../../node_modules/d3-color/src/cubehelix.js\");\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFzRDtBQUNFO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcz9hMDA5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBjb2xvciwgcmdiLCBoc2x9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGFiLCBoY2wsIGxjaCwgZ3JheX0gZnJvbSBcIi4vbGFiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3ViZWhlbGl4fSBmcm9tIFwiLi9jdWJlaGVsaXguanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/lab.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-color/src/lab.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hcl\": () => (/* binding */ Hcl),\n/* harmony export */ \"Lab\": () => (/* binding */ Lab),\n/* harmony export */ \"default\": () => (/* binding */ lab),\n/* harmony export */ \"gray\": () => (/* binding */ gray),\n/* harmony export */ \"hcl\": () => (/* binding */ hcl),\n/* harmony export */ \"lch\": () => (/* binding */ lch)\n/* harmony export */ });\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./define.js */ \"../../../node_modules/d3-color/src/define.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-color/src/math.js\");\n\n\n\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.rgbConvert)(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Lab, lab, (0,_define_js__WEBPACK_IMPORTED_MODULE_1__.extend)(_color_js__WEBPACK_IMPORTED_MODULE_0__.Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * _math_js__WEBPACK_IMPORTED_MODULE_2__.radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Hcl, hcl, (0,_define_js__WEBPACK_IMPORTED_MODULE_1__.extend)(_color_js__WEBPACK_IMPORTED_MODULE_0__.Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQTJDO0FBQ087QUFDUDs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwQ0FBRyxPQUFPLHFEQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVlO0FBQ2Y7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0RBQU0sV0FBVyxrREFBTSxDQUFDLDRDQUFLO0FBQzdCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMENBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNkNBQU87QUFDeEM7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLDZDQUFPO0FBQ3ZCO0FBQ0E7O0FBRUEsc0RBQU0sV0FBVyxrREFBTSxDQUFDLDRDQUFLO0FBQzdCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzP2I0MDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/lab.js\n"); /***/ }), /***/ "../../../node_modules/d3-color/src/math.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-color/src/math.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"degrees\": () => (/* binding */ degrees),\n/* harmony export */ \"radians\": () => (/* binding */ radians)\n/* harmony export */ });\nconst radians = Math.PI / 180;\nconst degrees = 180 / Math.PI;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanM/ZjhhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmFkaWFucyA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgY29uc3QgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-color/src/math.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/area.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-contour/src/area.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FyZWEuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcmVhLmpzP2M5MDgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmluZykge1xuICB2YXIgaSA9IDAsIG4gPSByaW5nLmxlbmd0aCwgYXJlYSA9IHJpbmdbbiAtIDFdWzFdICogcmluZ1swXVswXSAtIHJpbmdbbiAtIDFdWzBdICogcmluZ1swXVsxXTtcbiAgd2hpbGUgKCsraSA8IG4pIGFyZWEgKz0gcmluZ1tpIC0gMV1bMV0gKiByaW5nW2ldWzBdIC0gcmluZ1tpIC0gMV1bMF0gKiByaW5nW2ldWzFdO1xuICByZXR1cm4gYXJlYTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/area.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/array.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-contour/src/array.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"slice\": () => (/* binding */ slice)\n/* harmony export */ });\nvar array = Array.prototype;\n\nvar slice = array.slice;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FycmF5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFTyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvYXJyYXkuanM/NmFlYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/ascending.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-contour/src/ascending.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a - b;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FzY2VuZGluZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvYXNjZW5kaW5nLmpzP2UzNGUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/ascending.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/constant.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-contour/src/constant.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnN0YW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnN0YW50LmpzPzA1ZTUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/contains.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-contour/src/contains.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRhaW5zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRhaW5zLmpzPzY3YzUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmluZywgaG9sZSkge1xuICB2YXIgaSA9IC0xLCBuID0gaG9sZS5sZW5ndGgsIGM7XG4gIHdoaWxlICgrK2kgPCBuKSBpZiAoYyA9IHJpbmdDb250YWlucyhyaW5nLCBob2xlW2ldKSkgcmV0dXJuIGM7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiByaW5nQ29udGFpbnMocmluZywgcG9pbnQpIHtcbiAgdmFyIHggPSBwb2ludFswXSwgeSA9IHBvaW50WzFdLCBjb250YWlucyA9IC0xO1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHJpbmcubGVuZ3RoLCBqID0gbiAtIDE7IGkgPCBuOyBqID0gaSsrKSB7XG4gICAgdmFyIHBpID0gcmluZ1tpXSwgeGkgPSBwaVswXSwgeWkgPSBwaVsxXSwgcGogPSByaW5nW2pdLCB4aiA9IHBqWzBdLCB5aiA9IHBqWzFdO1xuICAgIGlmIChzZWdtZW50Q29udGFpbnMocGksIHBqLCBwb2ludCkpIHJldHVybiAwO1xuICAgIGlmICgoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKSkpIGNvbnRhaW5zID0gLWNvbnRhaW5zO1xuICB9XG4gIHJldHVybiBjb250YWlucztcbn1cblxuZnVuY3Rpb24gc2VnbWVudENvbnRhaW5zKGEsIGIsIGMpIHtcbiAgdmFyIGk7IHJldHVybiBjb2xsaW5lYXIoYSwgYiwgYykgJiYgd2l0aGluKGFbaSA9ICsoYVswXSA9PT0gYlswXSldLCBjW2ldLCBiW2ldKTtcbn1cblxuZnVuY3Rpb24gY29sbGluZWFyKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChiWzBdIC0gYVswXSkgKiAoY1sxXSAtIGFbMV0pID09PSAoY1swXSAtIGFbMF0pICogKGJbMV0gLSBhWzFdKTtcbn1cblxuZnVuY3Rpb24gd2l0aGluKHAsIHEsIHIpIHtcbiAgcmV0dXJuIHAgPD0gcSAmJiBxIDw9IHIgfHwgciA8PSBxICYmIHEgPD0gcDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/contains.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/contours.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-contour/src/contours.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/threshold/sturges.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/extent.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/nice.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-contour/src/array.js\");\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-contour/src/ascending.js\");\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-contour/src/area.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-contour/src/constant.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./contains.js */ \"../../../node_modules/d3-contour/src/contains.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./noop.js */ \"../../../node_modules/d3-contour/src/noop.js\");\n\n\n\n\n\n\n\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var dx = 1,\n dy = 1,\n threshold = d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n const e = (0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(values, finite);\n tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(...(0,d3_array__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(e[0], e[1], tz), tz);\n while (tz[tz.length - 1] >= e[1]) tz.pop();\n while (tz[1] < e[0]) tz.shift();\n } else {\n tz = tz.slice().sort(_ascending_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n }\n\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n const v = value == null ? NaN : +value;\n if (isNaN(v)) throw new Error(`invalid value: ${value}`);\n\n var polygons = [],\n holes = [];\n\n isorings(values, v, function(ring) {\n smooth(ring, values, v);\n if ((0,_area_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if ((0,_contains_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = above(values[0], value);\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = above(values[x + 1], value);\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = above(values[y * dx + dx], value);\n t2 = above(values[y * dx], value);\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\n t3 = t2, t2 = above(values[y * dx + x + 1], value);\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = above(values[y * dx + x + 1], value);\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v1 = valid(values[yt * dx + xt]);\n if (x > 0 && x < dx && xt === x) {\n point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\n }\n if (y > 0 && y < dy && yt === y) {\n point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_array_js__WEBPACK_IMPORTED_MODULE_8__.slice.call(_)) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : _noop_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"], contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\n// When computing the extent, ignore infinite values (as well as invalid ones).\nfunction finite(x) {\n return isFinite(x) ? x : NaN;\n}\n\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\n// Treat any invalid value as below negative infinity.\nfunction above(x, value) {\n return x == null ? false : +x >= value;\n}\n\n// During smoothing, treat any invalid value as negative infinity.\nfunction valid(v) {\n return v == null || isNaN(v = +v) ? -Infinity : v;\n}\n\nfunction smooth1(x, v0, v1, value) {\n const a = value - v0;\n const b = v1 - v0;\n const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\n return isNaN(d) ? x : x + d - 0.5;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRvdXJzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQStEO0FBQzlCO0FBQ007QUFDVjtBQUNRO0FBQ0E7QUFDUjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQSxrQkFBa0IsZ0RBQWdCO0FBQ2xDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixvREFBTTtBQUN0QixXQUFXLG9EQUFLLElBQUksb0RBQUk7QUFDeEI7QUFDQTtBQUNBLE1BQU07QUFDTiwyQkFBMkIscURBQVM7QUFDcEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxNQUFNOztBQUUxRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLG9EQUFJO0FBQ2Q7QUFDQSxLQUFLOztBQUVMO0FBQ0Esb0RBQW9ELE9BQU87QUFDM0QsWUFBWSx3REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLCtEQUErRDtBQUMvRDtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osK0RBQStEO0FBQy9EO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRGQUE0Rix3REFBUSxDQUFDLGlEQUFVLE9BQU8sd0RBQVE7QUFDOUg7O0FBRUE7QUFDQSwyREFBMkQsZ0RBQUk7QUFDL0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanM/NTM3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4dGVudCwgbmljZSwgdGhyZXNob2xkU3R1cmdlcywgdGlja3N9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYXJlYSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4vbm9vcC5qc1wiO1xuXG52YXIgY2FzZXMgPSBbXG4gIFtdLFxuICBbW1sxLjAsIDEuNV0sIFswLjUsIDEuMF1dXSxcbiAgW1tbMS41LCAxLjBdLCBbMS4wLCAxLjVdXV0sXG4gIFtbWzEuNSwgMS4wXSwgWzAuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDAuNV0sIFsxLjUsIDEuMF1dXSxcbiAgW1tbMS4wLCAxLjVdLCBbMC41LCAxLjBdXSwgW1sxLjAsIDAuNV0sIFsxLjUsIDEuMF1dXSxcbiAgW1tbMS4wLCAwLjVdLCBbMS4wLCAxLjVdXV0sXG4gIFtbWzEuMCwgMC41XSwgWzAuNSwgMS4wXV1dLFxuICBbW1swLjUsIDEuMF0sIFsxLjAsIDAuNV1dXSxcbiAgW1tbMS4wLCAxLjVdLCBbMS4wLCAwLjVdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuMCwgMC41XV0sIFtbMS41LCAxLjBdLCBbMS4wLCAxLjVdXV0sXG4gIFtbWzEuNSwgMS4wXSwgWzEuMCwgMC41XV1dLFxuICBbW1swLjUsIDEuMF0sIFsxLjUsIDEuMF1dXSxcbiAgW1tbMS4wLCAxLjVdLCBbMS41LCAxLjBdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuMCwgMS41XV1dLFxuICBbXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGRTdHVyZ2VzLFxuICAgICAgc21vb3RoID0gc21vb3RoTGluZWFyO1xuXG4gIGZ1bmN0aW9uIGNvbnRvdXJzKHZhbHVlcykge1xuICAgIHZhciB0eiA9IHRocmVzaG9sZCh2YWx1ZXMpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICBjb25zdCBlID0gZXh0ZW50KHZhbHVlcywgZmluaXRlKTtcbiAgICAgIHR6ID0gdGlja3MoLi4ubmljZShlWzBdLCBlWzFdLCB0eiksIHR6KTtcbiAgICAgIHdoaWxlICh0elt0ei5sZW5ndGggLSAxXSA+PSBlWzFdKSB0ei5wb3AoKTtcbiAgICAgIHdoaWxlICh0elsxXSA8IGVbMF0pIHR6LnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR6ID0gdHouc2xpY2UoKS5zb3J0KGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR6Lm1hcCh2YWx1ZSA9PiBjb250b3VyKHZhbHVlcywgdmFsdWUpKTtcbiAgfVxuXG4gIC8vIEFjY3VtdWxhdGUsIHNtb290aCBjb250b3VyIHJpbmdzLCBhc3NpZ24gaG9sZXMgdG8gZXh0ZXJpb3IgcmluZ3MuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tYm9zdG9jay9zaGFwZWZpbGUvYmxvYi92MC42LjIvc2hwL3BvbHlnb24uanNcbiAgZnVuY3Rpb24gY29udG91cih2YWx1ZXMsIHZhbHVlKSB7XG4gICAgY29uc3QgdiA9IHZhbHVlID09IG51bGwgPyBOYU4gOiArdmFsdWU7XG4gICAgaWYgKGlzTmFOKHYpKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdmFsdWU6ICR7dmFsdWV9YCk7XG5cbiAgICB2YXIgcG9seWdvbnMgPSBbXSxcbiAgICAgICAgaG9sZXMgPSBbXTtcblxuICAgIGlzb3JpbmdzKHZhbHVlcywgdiwgZnVuY3Rpb24ocmluZykge1xuICAgICAgc21vb3RoKHJpbmcsIHZhbHVlcywgdik7XG4gICAgICBpZiAoYXJlYShyaW5nKSA+IDApIHBvbHlnb25zLnB1c2goW3JpbmddKTtcbiAgICAgIGVsc2UgaG9sZXMucHVzaChyaW5nKTtcbiAgICB9KTtcblxuICAgIGhvbGVzLmZvckVhY2goZnVuY3Rpb24oaG9sZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29ucy5sZW5ndGgsIHBvbHlnb247IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zKChwb2x5Z29uID0gcG9seWdvbnNbaV0pWzBdLCBob2xlKSAhPT0gLTEpIHtcbiAgICAgICAgICBwb2x5Z29uLnB1c2goaG9sZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJNdWx0aVBvbHlnb25cIixcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGNvb3JkaW5hdGVzOiBwb2x5Z29uc1xuICAgIH07XG4gIH1cblxuICAvLyBNYXJjaGluZyBzcXVhcmVzIHdpdGggaXNvbGluZXMgc3RpdGNoZWQgaW50byByaW5ncy5cbiAgLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RvcG9qc29uL3RvcG9qc29uLWNsaWVudC9ibG9iL3YzLjAuMC9zcmMvc3RpdGNoLmpzXG4gIGZ1bmN0aW9uIGlzb3JpbmdzKHZhbHVlcywgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZyYWdtZW50QnlTdGFydCA9IG5ldyBBcnJheSxcbiAgICAgICAgZnJhZ21lbnRCeUVuZCA9IG5ldyBBcnJheSxcbiAgICAgICAgeCwgeSwgdDAsIHQxLCB0MiwgdDM7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBmaXJzdCByb3cgKHkgPSAtMSwgdDIgPSB0MyA9IDApLlxuICAgIHggPSB5ID0gLTE7XG4gICAgdDEgPSBhYm92ZSh2YWx1ZXNbMF0sIHZhbHVlKTtcbiAgICBjYXNlc1t0MSA8PCAxXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgd2hpbGUgKCsreCA8IGR4IC0gMSkge1xuICAgICAgdDAgPSB0MSwgdDEgPSBhYm92ZSh2YWx1ZXNbeCArIDFdLCB2YWx1ZSk7XG4gICAgICBjYXNlc1t0MCB8IHQxIDw8IDFdLmZvckVhY2goc3RpdGNoKTtcbiAgICB9XG4gICAgY2FzZXNbdDEgPDwgMF0uZm9yRWFjaChzdGl0Y2gpO1xuXG4gICAgLy8gR2VuZXJhbCBjYXNlIGZvciB0aGUgaW50ZXJtZWRpYXRlIHJvd3MuXG4gICAgd2hpbGUgKCsreSA8IGR5IC0gMSkge1xuICAgICAgeCA9IC0xO1xuICAgICAgdDEgPSBhYm92ZSh2YWx1ZXNbeSAqIGR4ICsgZHhdLCB2YWx1ZSk7XG4gICAgICB0MiA9IGFib3ZlKHZhbHVlc1t5ICogZHhdLCB2YWx1ZSk7XG4gICAgICBjYXNlc1t0MSA8PCAxIHwgdDIgPDwgMl0uZm9yRWFjaChzdGl0Y2gpO1xuICAgICAgd2hpbGUgKCsreCA8IGR4IC0gMSkge1xuICAgICAgICB0MCA9IHQxLCB0MSA9IGFib3ZlKHZhbHVlc1t5ICogZHggKyBkeCArIHggKyAxXSwgdmFsdWUpO1xuICAgICAgICB0MyA9IHQyLCB0MiA9IGFib3ZlKHZhbHVlc1t5ICogZHggKyB4ICsgMV0sIHZhbHVlKTtcbiAgICAgICAgY2FzZXNbdDAgfCB0MSA8PCAxIHwgdDIgPDwgMiB8IHQzIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcbiAgICAgIH1cbiAgICAgIGNhc2VzW3QxIHwgdDIgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGxhc3Qgcm93ICh5ID0gZHkgLSAxLCB0MCA9IHQxID0gMCkuXG4gICAgeCA9IC0xO1xuICAgIHQyID0gdmFsdWVzW3kgKiBkeF0gPj0gdmFsdWU7XG4gICAgY2FzZXNbdDIgPDwgMl0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgIHQzID0gdDIsIHQyID0gYWJvdmUodmFsdWVzW3kgKiBkeCArIHggKyAxXSwgdmFsdWUpO1xuICAgICAgY2FzZXNbdDIgPDwgMiB8IHQzIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcbiAgICB9XG4gICAgY2FzZXNbdDIgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuXG4gICAgZnVuY3Rpb24gc3RpdGNoKGxpbmUpIHtcbiAgICAgIHZhciBzdGFydCA9IFtsaW5lWzBdWzBdICsgeCwgbGluZVswXVsxXSArIHldLFxuICAgICAgICAgIGVuZCA9IFtsaW5lWzFdWzBdICsgeCwgbGluZVsxXVsxXSArIHldLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleChzdGFydCksXG4gICAgICAgICAgZW5kSW5kZXggPSBpbmRleChlbmQpLFxuICAgICAgICAgIGYsIGc7XG4gICAgICBpZiAoZiA9IGZyYWdtZW50QnlFbmRbc3RhcnRJbmRleF0pIHtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5U3RhcnRbZW5kSW5kZXhdKSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZi5lbmRdO1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZy5zdGFydF07XG4gICAgICAgICAgaWYgKGYgPT09IGcpIHtcbiAgICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgICBjYWxsYmFjayhmLnJpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2cuZW5kXSA9IHtzdGFydDogZi5zdGFydCwgZW5kOiBnLmVuZCwgcmluZzogZi5yaW5nLmNvbmNhdChnLnJpbmcpfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZi5lbmRdO1xuICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgZnJhZ21lbnRCeUVuZFtmLmVuZCA9IGVuZEluZGV4XSA9IGY7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZiA9IGZyYWdtZW50QnlTdGFydFtlbmRJbmRleF0pIHtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0SW5kZXhdKSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeUVuZFtnLmVuZF07XG4gICAgICAgICAgaWYgKGYgPT09IGcpIHtcbiAgICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgICBjYWxsYmFjayhmLnJpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZy5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2YuZW5kXSA9IHtzdGFydDogZy5zdGFydCwgZW5kOiBmLmVuZCwgcmluZzogZy5yaW5nLmNvbmNhdChmLnJpbmcpfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgICBmLnJpbmcudW5zaGlmdChzdGFydCk7XG4gICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnQgPSBzdGFydEluZGV4XSA9IGY7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYWdtZW50QnlTdGFydFtzdGFydEluZGV4XSA9IGZyYWdtZW50QnlFbmRbZW5kSW5kZXhdID0ge3N0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4LCByaW5nOiBbc3RhcnQsIGVuZF19O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluZGV4KHBvaW50KSB7XG4gICAgcmV0dXJuIHBvaW50WzBdICogMiArIHBvaW50WzFdICogKGR4ICsgMSkgKiA0O1xuICB9XG5cbiAgZnVuY3Rpb24gc21vb3RoTGluZWFyKHJpbmcsIHZhbHVlcywgdmFsdWUpIHtcbiAgICByaW5nLmZvckVhY2goZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgIHZhciB4ID0gcG9pbnRbMF0sXG4gICAgICAgICAgeSA9IHBvaW50WzFdLFxuICAgICAgICAgIHh0ID0geCB8IDAsXG4gICAgICAgICAgeXQgPSB5IHwgMCxcbiAgICAgICAgICB2MSA9IHZhbGlkKHZhbHVlc1t5dCAqIGR4ICsgeHRdKTtcbiAgICAgIGlmICh4ID4gMCAmJiB4IDwgZHggJiYgeHQgPT09IHgpIHtcbiAgICAgICAgcG9pbnRbMF0gPSBzbW9vdGgxKHgsIHZhbGlkKHZhbHVlc1t5dCAqIGR4ICsgeHQgLSAxXSksIHYxLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoeSA+IDAgJiYgeSA8IGR5ICYmIHl0ID09PSB5KSB7XG4gICAgICAgIHBvaW50WzFdID0gc21vb3RoMSh5LCB2YWxpZCh2YWx1ZXNbKHl0IC0gMSkgKiBkeCArIHh0XSksIHYxLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb250b3Vycy5jb250b3VyID0gY29udG91cjtcblxuICBjb250b3Vycy5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguZmxvb3IoX1swXSksIF8xID0gTWF0aC5mbG9vcihfWzFdKTtcbiAgICBpZiAoIShfMCA+PSAwICYmIF8xID49IDApKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpemVcIik7XG4gICAgcmV0dXJuIGR4ID0gXzAsIGR5ID0gXzEsIGNvbnRvdXJzO1xuICB9O1xuXG4gIGNvbnRvdXJzLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgY29udG91cnMpIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIGNvbnRvdXJzLnNtb290aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzbW9vdGggPSBfID8gc21vb3RoTGluZWFyIDogbm9vcCwgY29udG91cnMpIDogc21vb3RoID09PSBzbW9vdGhMaW5lYXI7XG4gIH07XG5cbiAgcmV0dXJuIGNvbnRvdXJzO1xufVxuXG4vLyBXaGVuIGNvbXB1dGluZyB0aGUgZXh0ZW50LCBpZ25vcmUgaW5maW5pdGUgdmFsdWVzIChhcyB3ZWxsIGFzIGludmFsaWQgb25lcykuXG5mdW5jdGlvbiBmaW5pdGUoeCkge1xuICByZXR1cm4gaXNGaW5pdGUoeCkgPyB4IDogTmFOO1xufVxuXG4vLyBJcyB0aGUgKHBvc3NpYmx5IGludmFsaWQpIHggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSAoa25vd24gdmFsaWQpIHZhbHVlP1xuLy8gVHJlYXQgYW55IGludmFsaWQgdmFsdWUgYXMgYmVsb3cgbmVnYXRpdmUgaW5maW5pdHkuXG5mdW5jdGlvbiBhYm92ZSh4LCB2YWx1ZSkge1xuICByZXR1cm4geCA9PSBudWxsID8gZmFsc2UgOiAreCA+PSB2YWx1ZTtcbn1cblxuLy8gRHVyaW5nIHNtb290aGluZywgdHJlYXQgYW55IGludmFsaWQgdmFsdWUgYXMgbmVnYXRpdmUgaW5maW5pdHkuXG5mdW5jdGlvbiB2YWxpZCh2KSB7XG4gIHJldHVybiB2ID09IG51bGwgfHwgaXNOYU4odiA9ICt2KSA/IC1JbmZpbml0eSA6IHY7XG59XG5cbmZ1bmN0aW9uIHNtb290aDEoeCwgdjAsIHYxLCB2YWx1ZSkge1xuICBjb25zdCBhID0gdmFsdWUgLSB2MDtcbiAgY29uc3QgYiA9IHYxIC0gdjA7XG4gIGNvbnN0IGQgPSBpc0Zpbml0ZShhKSB8fCBpc0Zpbml0ZShiKSA/IGEgLyBiIDogTWF0aC5zaWduKGEpIC8gTWF0aC5zaWduKGIpO1xuICByZXR1cm4gaXNOYU4oZCkgPyB4IDogeCArIGQgLSAwLjU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/contours.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/density.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-contour/src/density.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/blur.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/max.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-contour/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-contour/src/constant.js\");\n/* harmony import */ var _contours_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contours.js */ \"../../../node_modules/d3-contour/src/contours.js\");\n\n\n\n\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(20);\n\n function grid(data) {\n var values = new Float32Array(n * m),\n pow2k = Math.pow(2, -k),\n i = -1;\n\n for (const d of data) {\n var xi = (x(d, ++i, data) + o) * pow2k,\n yi = (y(d, i, data) + o) * pow2k,\n wi = +weight(d, i, data);\n if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\n var x0 = Math.floor(xi),\n y0 = Math.floor(yi),\n xt = xi - x0 - 0.5,\n yt = yi - y0 - 0.5;\n values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\n values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\n values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\n values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\n }\n }\n\n (0,d3_array__WEBPACK_IMPORTED_MODULE_1__.blur2)({data: values, width: n, height: m}, r * pow2k);\n return values;\n }\n\n function density(data) {\n var values = grid(data),\n tz = threshold(values),\n pow4k = Math.pow(2, 2 * k);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Number.MIN_VALUE, (0,d3_array__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(values) / pow4k, tz);\n }\n\n return (0,_contours_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])()\n .size([n, m])\n .thresholds(tz.map(d => d * pow4k))\n (values)\n .map((c, i) => (c.value = +tz[i], transform(c)));\n }\n\n density.contours = function(data) {\n var values = grid(data),\n contours = (0,_contours_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])().size([n, m]),\n pow4k = Math.pow(2, 2 * k),\n contour = value => {\n value = +value;\n var c = transform(contours.contour(values, value * pow4k));\n c.value = value; // preserve exact threshold value\n return c;\n };\n Object.defineProperty(contour, \"max\", {get: () => (0,d3_array__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(values) / pow4k});\n return contour;\n };\n\n function transform(geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0], _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_array_js__WEBPACK_IMPORTED_MODULE_5__.slice.call(_)) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\n };\n\n return density;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2RlbnNpdHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUEyQztBQUNWO0FBQ0k7QUFDQTs7QUFFckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isd0RBQVE7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLCtDQUFLLEVBQUUsa0NBQWtDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsb0RBQUssbUJBQW1CLG9EQUFHO0FBQ3RDOztBQUVBLFdBQVcsd0RBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHdEQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSwyQ0FBMkMsV0FBVyxvREFBRyxpQkFBaUI7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUVBQWlFLHdEQUFRO0FBQ3pFOztBQUVBO0FBQ0EsaUVBQWlFLHdEQUFRO0FBQ3pFOztBQUVBO0FBQ0Esc0VBQXNFLHdEQUFRO0FBQzlFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEZBQTRGLHdEQUFRLENBQUMsaURBQVUsT0FBTyx3REFBUTtBQUM5SDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2RlbnNpdHkuanM/Mjc5OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2JsdXIyLCBtYXgsIHRpY2tzfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBDb250b3VycyBmcm9tIFwiLi9jb250b3Vycy5qc1wiO1xuXG5mdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0WShkKSB7XG4gIHJldHVybiBkWzFdO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0V2VpZ2h0KCkge1xuICByZXR1cm4gMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4ID0gZGVmYXVsdFgsXG4gICAgICB5ID0gZGVmYXVsdFksXG4gICAgICB3ZWlnaHQgPSBkZWZhdWx0V2VpZ2h0LFxuICAgICAgZHggPSA5NjAsXG4gICAgICBkeSA9IDUwMCxcbiAgICAgIHIgPSAyMCwgLy8gYmx1ciByYWRpdXNcbiAgICAgIGsgPSAyLCAvLyBsb2cyKGdyaWQgY2VsbCBzaXplKVxuICAgICAgbyA9IHIgKiAzLCAvLyBncmlkIG9mZnNldCwgdG8gcGFkIGZvciBibHVyXG4gICAgICBuID0gKGR4ICsgbyAqIDIpID4+IGssIC8vIGdyaWQgd2lkdGhcbiAgICAgIG0gPSAoZHkgKyBvICogMikgPj4gaywgLy8gZ3JpZCBoZWlnaHRcbiAgICAgIHRocmVzaG9sZCA9IGNvbnN0YW50KDIwKTtcblxuICBmdW5jdGlvbiBncmlkKGRhdGEpIHtcbiAgICB2YXIgdmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheShuICogbSksXG4gICAgICAgIHBvdzJrID0gTWF0aC5wb3coMiwgLWspLFxuICAgICAgICBpID0gLTE7XG5cbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0YSkge1xuICAgICAgdmFyIHhpID0gKHgoZCwgKytpLCBkYXRhKSArIG8pICogcG93MmssXG4gICAgICAgICAgeWkgPSAoeShkLCBpLCBkYXRhKSArIG8pICogcG93MmssXG4gICAgICAgICAgd2kgPSArd2VpZ2h0KGQsIGksIGRhdGEpO1xuICAgICAgaWYgKHdpICYmIHhpID49IDAgJiYgeGkgPCBuICYmIHlpID49IDAgJiYgeWkgPCBtKSB7XG4gICAgICAgIHZhciB4MCA9IE1hdGguZmxvb3IoeGkpLFxuICAgICAgICAgICAgeTAgPSBNYXRoLmZsb29yKHlpKSxcbiAgICAgICAgICAgIHh0ID0geGkgLSB4MCAtIDAuNSxcbiAgICAgICAgICAgIHl0ID0geWkgLSB5MCAtIDAuNTtcbiAgICAgICAgdmFsdWVzW3gwICsgeTAgKiBuXSArPSAoMSAtIHh0KSAqICgxIC0geXQpICogd2k7XG4gICAgICAgIHZhbHVlc1t4MCArIDEgKyB5MCAqIG5dICs9IHh0ICogKDEgLSB5dCkgKiB3aTtcbiAgICAgICAgdmFsdWVzW3gwICsgMSArICh5MCArIDEpICogbl0gKz0geHQgKiB5dCAqIHdpO1xuICAgICAgICB2YWx1ZXNbeDAgKyAoeTAgKyAxKSAqIG5dICs9ICgxIC0geHQpICogeXQgKiB3aTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBibHVyMih7ZGF0YTogdmFsdWVzLCB3aWR0aDogbiwgaGVpZ2h0OiBtfSwgciAqIHBvdzJrKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVuc2l0eShkYXRhKSB7XG4gICAgdmFyIHZhbHVlcyA9IGdyaWQoZGF0YSksXG4gICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcyksXG4gICAgICAgIHBvdzRrID0gTWF0aC5wb3coMiwgMiAqIGspO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB0eiA9IHRpY2tzKE51bWJlci5NSU5fVkFMVUUsIG1heCh2YWx1ZXMpIC8gcG93NGssIHR6KTtcbiAgICB9XG5cbiAgICByZXR1cm4gQ29udG91cnMoKVxuICAgICAgICAuc2l6ZShbbiwgbV0pXG4gICAgICAgIC50aHJlc2hvbGRzKHR6Lm1hcChkID0+IGQgKiBwb3c0aykpXG4gICAgICAodmFsdWVzKVxuICAgICAgICAubWFwKChjLCBpKSA9PiAoYy52YWx1ZSA9ICt0eltpXSwgdHJhbnNmb3JtKGMpKSk7XG4gIH1cblxuICBkZW5zaXR5LmNvbnRvdXJzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHZhciB2YWx1ZXMgPSBncmlkKGRhdGEpLFxuICAgICAgICBjb250b3VycyA9IENvbnRvdXJzKCkuc2l6ZShbbiwgbV0pLFxuICAgICAgICBwb3c0ayA9IE1hdGgucG93KDIsIDIgKiBrKSxcbiAgICAgICAgY29udG91ciA9IHZhbHVlID0+IHtcbiAgICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcbiAgICAgICAgICB2YXIgYyA9IHRyYW5zZm9ybShjb250b3Vycy5jb250b3VyKHZhbHVlcywgdmFsdWUgKiBwb3c0aykpO1xuICAgICAgICAgIGMudmFsdWUgPSB2YWx1ZTsgLy8gcHJlc2VydmUgZXhhY3QgdGhyZXNob2xkIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRvdXIsIFwibWF4XCIsIHtnZXQ6ICgpID0+IG1heCh2YWx1ZXMpIC8gcG93NGt9KTtcbiAgICByZXR1cm4gY29udG91cjtcbiAgfTtcblxuICBmdW5jdGlvbiB0cmFuc2Zvcm0oZ2VvbWV0cnkpIHtcbiAgICBnZW9tZXRyeS5jb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVBvbHlnb24pO1xuICAgIHJldHVybiBnZW9tZXRyeTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvbHlnb24oY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVJpbmcpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtUmluZyhjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzLmZvckVhY2godHJhbnNmb3JtUG9pbnQpO1xuICB9XG5cbiAgLy8gVE9ETyBPcHRpbWl6ZS5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlc1swXSA9IGNvb3JkaW5hdGVzWzBdICogTWF0aC5wb3coMiwgaykgLSBvO1xuICAgIGNvb3JkaW5hdGVzWzFdID0gY29vcmRpbmF0ZXNbMV0gKiBNYXRoLnBvdygyLCBrKSAtIG87XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgbyA9IHIgKiAzO1xuICAgIG4gPSAoZHggKyBvICogMikgPj4gaztcbiAgICBtID0gKGR5ICsgbyAqIDIpID4+IGs7XG4gICAgcmV0dXJuIGRlbnNpdHk7XG4gIH1cblxuICBkZW5zaXR5LnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBkZW5zaXR5KSA6IHg7XG4gIH07XG5cbiAgZGVuc2l0eS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB5O1xuICB9O1xuXG4gIGRlbnNpdHkud2VpZ2h0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdlaWdodCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBkZW5zaXR5KSA6IHdlaWdodDtcbiAgfTtcblxuICBkZW5zaXR5LnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW2R4LCBkeV07XG4gICAgdmFyIF8wID0gK19bMF0sIF8xID0gK19bMV07XG4gICAgaWYgKCEoXzAgPj0gMCAmJiBfMSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaXplXCIpO1xuICAgIHJldHVybiBkeCA9IF8wLCBkeSA9IF8xLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LmNlbGxTaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIDEgPDwgaztcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAxKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjZWxsIHNpemVcIik7XG4gICAgcmV0dXJuIGsgPSBNYXRoLmZsb29yKE1hdGgubG9nKF8pIC8gTWF0aC5MTjIpLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgZGVuc2l0eSkgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgZGVuc2l0eS5iYW5kd2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHIgKiAociArIDEpKTtcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiYW5kd2lkdGhcIik7XG4gICAgcmV0dXJuIHIgPSAoTWF0aC5zcXJ0KDQgKiBfICogXyArIDEpIC0gMSkgLyAyLCByZXNpemUoKTtcbiAgfTtcblxuICByZXR1cm4gZGVuc2l0eTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/density.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/index.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-contour/src/index.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"contourDensity\": () => (/* reexport safe */ _density_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"contours\": () => (/* reexport safe */ _contours_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _contours_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./contours.js */ \"../../../node_modules/d3-contour/src/contours.js\");\n/* harmony import */ var _density_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./density.js */ \"../../../node_modules/d3-contour/src/density.js\");\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Q7QUFDSyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvaW5kZXguanM/Njk3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgY29udG91cnN9IGZyb20gXCIuL2NvbnRvdXJzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY29udG91ckRlbnNpdHl9IGZyb20gXCIuL2RlbnNpdHkuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-contour/src/noop.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-contour/src/noop.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL25vb3AuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLHNDQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9ub29wLmpzP2NjMzYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7fVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-contour/src/noop.js\n"); /***/ }), /***/ "../../../node_modules/d3-delaunay/src/delaunay.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-delaunay/src/delaunay.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Delaunay)\n/* harmony export */ });\n/* harmony import */ var delaunator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! delaunator */ \"../../../node_modules/delaunator/index.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-delaunay/src/path.js\");\n/* harmony import */ var _polygon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./polygon.js */ \"../../../node_modules/d3-delaunay/src/polygon.js\");\n/* harmony import */ var _voronoi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./voronoi.js */ \"../../../node_modules/d3-delaunay/src/voronoi.js\");\n\n\n\n\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nclass Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new delaunator__WEBPACK_IMPORTED_MODULE_0__[\"default\"](points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new delaunator__WEBPACK_IMPORTED_MODULE_0__[\"default\"](points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n inedges[hull[0]] = 1;\n if (hull.length === 2) {\n inedges[hull[1]] = 0;\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n }\n }\n }\n voronoi(bounds) {\n return new _voronoi_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r) {\n if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n r = r == undefined ? 2 : +r;\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new _polygon_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new _polygon_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9kZWxhdW5heS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFvQztBQUNQO0FBQ007QUFDQTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxtQkFBbUI7QUFDNUIsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGtEQUFVO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLHdCQUF3QjtBQUNoRSxpR0FBaUc7QUFDakc7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE9BQU87QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0RBQVU7QUFDdkMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBLDBDQUEwQyxPQUFPO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbURBQU87QUFDdEI7QUFDQTtBQUNBLFdBQVcsNERBQTREOztBQUV2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5REFBeUQ7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0RBQUk7QUFDdkQsV0FBVyw4QkFBOEI7QUFDekMsMENBQTBDLE9BQU87QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0RBQUk7QUFDdkQsV0FBVyxRQUFRO0FBQ25CLHVDQUF1QyxPQUFPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELGdEQUFJO0FBQ3ZELFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbURBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0RBQUk7QUFDdkQsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbURBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9kZWxhdW5heS5qcz8xN2EwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEZWxhdW5hdG9yIGZyb20gXCJkZWxhdW5hdG9yXCI7XG5pbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQgUG9seWdvbiBmcm9tIFwiLi9wb2x5Z29uLmpzXCI7XG5pbXBvcnQgVm9yb25vaSBmcm9tIFwiLi92b3Jvbm9pLmpzXCI7XG5cbmNvbnN0IHRhdSA9IDIgKiBNYXRoLlBJLCBwb3cgPSBNYXRoLnBvdztcblxuZnVuY3Rpb24gcG9pbnRYKHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmZ1bmN0aW9uIHBvaW50WShwKSB7XG4gIHJldHVybiBwWzFdO1xufVxuXG4vLyBBIHRyaWFuZ3VsYXRpb24gaXMgY29sbGluZWFyIGlmIGFsbCBpdHMgdHJpYW5nbGVzIGhhdmUgYSBub24tbnVsbCBhcmVhXG5mdW5jdGlvbiBjb2xsaW5lYXIoZCkge1xuICBjb25zdCB7dHJpYW5nbGVzLCBjb29yZHN9ID0gZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICBjb25zdCBhID0gMiAqIHRyaWFuZ2xlc1tpXSxcbiAgICAgICAgICBiID0gMiAqIHRyaWFuZ2xlc1tpICsgMV0sXG4gICAgICAgICAgYyA9IDIgKiB0cmlhbmdsZXNbaSArIDJdLFxuICAgICAgICAgIGNyb3NzID0gKGNvb3Jkc1tjXSAtIGNvb3Jkc1thXSkgKiAoY29vcmRzW2IgKyAxXSAtIGNvb3Jkc1thICsgMV0pXG4gICAgICAgICAgICAgICAgLSAoY29vcmRzW2JdIC0gY29vcmRzW2FdKSAqIChjb29yZHNbYyArIDFdIC0gY29vcmRzW2EgKyAxXSk7XG4gICAgaWYgKGNyb3NzID4gMWUtMTApIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaml0dGVyKHgsIHksIHIpIHtcbiAgcmV0dXJuIFt4ICsgTWF0aC5zaW4oeCArIHkpICogciwgeSArIE1hdGguY29zKHggLSB5KSAqIHJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxhdW5heSB7XG4gIHN0YXRpYyBmcm9tKHBvaW50cywgZnggPSBwb2ludFgsIGZ5ID0gcG9pbnRZLCB0aGF0KSB7XG4gICAgcmV0dXJuIG5ldyBEZWxhdW5heShcImxlbmd0aFwiIGluIHBvaW50c1xuICAgICAgICA/IGZsYXRBcnJheShwb2ludHMsIGZ4LCBmeSwgdGhhdClcbiAgICAgICAgOiBGbG9hdDY0QXJyYXkuZnJvbShmbGF0SXRlcmFibGUocG9pbnRzLCBmeCwgZnksIHRoYXQpKSk7XG4gIH1cbiAgY29uc3RydWN0b3IocG9pbnRzKSB7XG4gICAgdGhpcy5fZGVsYXVuYXRvciA9IG5ldyBEZWxhdW5hdG9yKHBvaW50cyk7XG4gICAgdGhpcy5pbmVkZ2VzID0gbmV3IEludDMyQXJyYXkocG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgIHRoaXMuX2h1bGxJbmRleCA9IG5ldyBJbnQzMkFycmF5KHBvaW50cy5sZW5ndGggLyAyKTtcbiAgICB0aGlzLnBvaW50cyA9IHRoaXMuX2RlbGF1bmF0b3IuY29vcmRzO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5fZGVsYXVuYXRvci51cGRhdGUoKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgX2luaXQoKSB7XG4gICAgY29uc3QgZCA9IHRoaXMuX2RlbGF1bmF0b3IsIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgLy8gY2hlY2sgZm9yIGNvbGxpbmVhclxuICAgIGlmIChkLmh1bGwgJiYgZC5odWxsLmxlbmd0aCA+IDIgJiYgY29sbGluZWFyKGQpKSB7XG4gICAgICB0aGlzLmNvbGxpbmVhciA9IEludDMyQXJyYXkuZnJvbSh7bGVuZ3RoOiBwb2ludHMubGVuZ3RoLzJ9LCAoXyxpKSA9PiBpKVxuICAgICAgICAuc29ydCgoaSwgaikgPT4gcG9pbnRzWzIgKiBpXSAtIHBvaW50c1syICogal0gfHwgcG9pbnRzWzIgKiBpICsgMV0gLSBwb2ludHNbMiAqIGogKyAxXSk7IC8vIGZvciBleGFjdCBuZWlnaGJvcnNcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbGxpbmVhclswXSwgZiA9IHRoaXMuY29sbGluZWFyW3RoaXMuY29sbGluZWFyLmxlbmd0aCAtIDFdLFxuICAgICAgICBib3VuZHMgPSBbIHBvaW50c1syICogZV0sIHBvaW50c1syICogZSArIDFdLCBwb2ludHNbMiAqIGZdLCBwb2ludHNbMiAqIGYgKyAxXSBdLFxuICAgICAgICByID0gMWUtOCAqIE1hdGguaHlwb3QoYm91bmRzWzNdIC0gYm91bmRzWzFdLCBib3VuZHNbMl0gLSBib3VuZHNbMF0pO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSBwb2ludHMubGVuZ3RoIC8gMjsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBwID0gaml0dGVyKHBvaW50c1syICogaV0sIHBvaW50c1syICogaSArIDFdLCByKTtcbiAgICAgICAgcG9pbnRzWzIgKiBpXSA9IHBbMF07XG4gICAgICAgIHBvaW50c1syICogaSArIDFdID0gcFsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2RlbGF1bmF0b3IgPSBuZXcgRGVsYXVuYXRvcihwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5jb2xsaW5lYXI7XG4gICAgfVxuXG4gICAgY29uc3QgaGFsZmVkZ2VzID0gdGhpcy5oYWxmZWRnZXMgPSB0aGlzLl9kZWxhdW5hdG9yLmhhbGZlZGdlcztcbiAgICBjb25zdCBodWxsID0gdGhpcy5odWxsID0gdGhpcy5fZGVsYXVuYXRvci5odWxsO1xuICAgIGNvbnN0IHRyaWFuZ2xlcyA9IHRoaXMudHJpYW5nbGVzID0gdGhpcy5fZGVsYXVuYXRvci50cmlhbmdsZXM7XG4gICAgY29uc3QgaW5lZGdlcyA9IHRoaXMuaW5lZGdlcy5maWxsKC0xKTtcbiAgICBjb25zdCBodWxsSW5kZXggPSB0aGlzLl9odWxsSW5kZXguZmlsbCgtMSk7XG5cbiAgICAvLyBDb21wdXRlIGFuIGluZGV4IGZyb20gZWFjaCBwb2ludCB0byBhbiAoYXJiaXRyYXJ5KSBpbmNvbWluZyBoYWxmZWRnZVxuICAgIC8vIFVzZWQgdG8gZ2l2ZSB0aGUgZmlyc3QgbmVpZ2hib3Igb2YgZWFjaCBwb2ludDsgZm9yIHRoaXMgcmVhc29uLFxuICAgIC8vIG9uIHRoZSBodWxsIHdlIGdpdmUgcHJpb3JpdHkgdG8gZXh0ZXJpb3IgaGFsZmVkZ2VzXG4gICAgZm9yIChsZXQgZSA9IDAsIG4gPSBoYWxmZWRnZXMubGVuZ3RoOyBlIDwgbjsgKytlKSB7XG4gICAgICBjb25zdCBwID0gdHJpYW5nbGVzW2UgJSAzID09PSAyID8gZSAtIDIgOiBlICsgMV07XG4gICAgICBpZiAoaGFsZmVkZ2VzW2VdID09PSAtMSB8fCBpbmVkZ2VzW3BdID09PSAtMSkgaW5lZGdlc1twXSA9IGU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gaHVsbC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGh1bGxJbmRleFtodWxsW2ldXSA9IGk7XG4gICAgfVxuXG4gICAgLy8gZGVnZW5lcmF0ZSBjYXNlOiAxIG9yIDIgKGRpc3RpbmN0KSBwb2ludHNcbiAgICBpZiAoaHVsbC5sZW5ndGggPD0gMiAmJiBodWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudHJpYW5nbGVzID0gbmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSk7XG4gICAgICB0aGlzLmhhbGZlZGdlcyA9IG5ldyBJbnQzMkFycmF5KDMpLmZpbGwoLTEpO1xuICAgICAgdGhpcy50cmlhbmdsZXNbMF0gPSBodWxsWzBdO1xuICAgICAgaW5lZGdlc1todWxsWzBdXSA9IDE7XG4gICAgICBpZiAoaHVsbC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaW5lZGdlc1todWxsWzFdXSA9IDA7XG4gICAgICAgIHRoaXMudHJpYW5nbGVzWzFdID0gaHVsbFsxXTtcbiAgICAgICAgdGhpcy50cmlhbmdsZXNbMl0gPSBodWxsWzFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB2b3Jvbm9pKGJvdW5kcykge1xuICAgIHJldHVybiBuZXcgVm9yb25vaSh0aGlzLCBib3VuZHMpO1xuICB9XG4gICpuZWlnaGJvcnMoaSkge1xuICAgIGNvbnN0IHtpbmVkZ2VzLCBodWxsLCBfaHVsbEluZGV4LCBoYWxmZWRnZXMsIHRyaWFuZ2xlcywgY29sbGluZWFyfSA9IHRoaXM7XG5cbiAgICAvLyBkZWdlbmVyYXRlIGNhc2Ugd2l0aCBzZXZlcmFsIGNvbGxpbmVhciBwb2ludHNcbiAgICBpZiAoY29sbGluZWFyKSB7XG4gICAgICBjb25zdCBsID0gY29sbGluZWFyLmluZGV4T2YoaSk7XG4gICAgICBpZiAobCA+IDApIHlpZWxkIGNvbGxpbmVhcltsIC0gMV07XG4gICAgICBpZiAobCA8IGNvbGxpbmVhci5sZW5ndGggLSAxKSB5aWVsZCBjb2xsaW5lYXJbbCArIDFdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGUwID0gaW5lZGdlc1tpXTtcbiAgICBpZiAoZTAgPT09IC0xKSByZXR1cm47IC8vIGNvaW5jaWRlbnQgcG9pbnRcbiAgICBsZXQgZSA9IGUwLCBwMCA9IC0xO1xuICAgIGRvIHtcbiAgICAgIHlpZWxkIHAwID0gdHJpYW5nbGVzW2VdO1xuICAgICAgZSA9IGUgJSAzID09PSAyID8gZSAtIDIgOiBlICsgMTtcbiAgICAgIGlmICh0cmlhbmdsZXNbZV0gIT09IGkpIHJldHVybjsgLy8gYmFkIHRyaWFuZ3VsYXRpb25cbiAgICAgIGUgPSBoYWxmZWRnZXNbZV07XG4gICAgICBpZiAoZSA9PT0gLTEpIHtcbiAgICAgICAgY29uc3QgcCA9IGh1bGxbKF9odWxsSW5kZXhbaV0gKyAxKSAlIGh1bGwubGVuZ3RoXTtcbiAgICAgICAgaWYgKHAgIT09IHAwKSB5aWVsZCBwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZSAhPT0gZTApO1xuICB9XG4gIGZpbmQoeCwgeSwgaSA9IDApIHtcbiAgICBpZiAoKHggPSAreCwgeCAhPT0geCkgfHwgKHkgPSAreSwgeSAhPT0geSkpIHJldHVybiAtMTtcbiAgICBjb25zdCBpMCA9IGk7XG4gICAgbGV0IGM7XG4gICAgd2hpbGUgKChjID0gdGhpcy5fc3RlcChpLCB4LCB5KSkgPj0gMCAmJiBjICE9PSBpICYmIGMgIT09IGkwKSBpID0gYztcbiAgICByZXR1cm4gYztcbiAgfVxuICBfc3RlcChpLCB4LCB5KSB7XG4gICAgY29uc3Qge2luZWRnZXMsIGh1bGwsIF9odWxsSW5kZXgsIGhhbGZlZGdlcywgdHJpYW5nbGVzLCBwb2ludHN9ID0gdGhpcztcbiAgICBpZiAoaW5lZGdlc1tpXSA9PT0gLTEgfHwgIXBvaW50cy5sZW5ndGgpIHJldHVybiAoaSArIDEpICUgKHBvaW50cy5sZW5ndGggPj4gMSk7XG4gICAgbGV0IGMgPSBpO1xuICAgIGxldCBkYyA9IHBvdyh4IC0gcG9pbnRzW2kgKiAyXSwgMikgKyBwb3coeSAtIHBvaW50c1tpICogMiArIDFdLCAyKTtcbiAgICBjb25zdCBlMCA9IGluZWRnZXNbaV07XG4gICAgbGV0IGUgPSBlMDtcbiAgICBkbyB7XG4gICAgICBsZXQgdCA9IHRyaWFuZ2xlc1tlXTtcbiAgICAgIGNvbnN0IGR0ID0gcG93KHggLSBwb2ludHNbdCAqIDJdLCAyKSArIHBvdyh5IC0gcG9pbnRzW3QgKiAyICsgMV0sIDIpO1xuICAgICAgaWYgKGR0IDwgZGMpIGRjID0gZHQsIGMgPSB0O1xuICAgICAgZSA9IGUgJSAzID09PSAyID8gZSAtIDIgOiBlICsgMTtcbiAgICAgIGlmICh0cmlhbmdsZXNbZV0gIT09IGkpIGJyZWFrOyAvLyBiYWQgdHJpYW5ndWxhdGlvblxuICAgICAgZSA9IGhhbGZlZGdlc1tlXTtcbiAgICAgIGlmIChlID09PSAtMSkge1xuICAgICAgICBlID0gaHVsbFsoX2h1bGxJbmRleFtpXSArIDEpICUgaHVsbC5sZW5ndGhdO1xuICAgICAgICBpZiAoZSAhPT0gdCkge1xuICAgICAgICAgIGlmIChwb3coeCAtIHBvaW50c1tlICogMl0sIDIpICsgcG93KHkgLSBwb2ludHNbZSAqIDIgKyAxXSwgMikgPCBkYykgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZSAhPT0gZTApO1xuICAgIHJldHVybiBjO1xuICB9XG4gIHJlbmRlcihjb250ZXh0KSB7XG4gICAgY29uc3QgYnVmZmVyID0gY29udGV4dCA9PSBudWxsID8gY29udGV4dCA9IG5ldyBQYXRoIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHtwb2ludHMsIGhhbGZlZGdlcywgdHJpYW5nbGVzfSA9IHRoaXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBoYWxmZWRnZXMubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCBqID0gaGFsZmVkZ2VzW2ldO1xuICAgICAgaWYgKGogPCBpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHRpID0gdHJpYW5nbGVzW2ldICogMjtcbiAgICAgIGNvbnN0IHRqID0gdHJpYW5nbGVzW2pdICogMjtcbiAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1t0aV0sIHBvaW50c1t0aSArIDFdKTtcbiAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1t0al0sIHBvaW50c1t0aiArIDFdKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJIdWxsKGNvbnRleHQpO1xuICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLnZhbHVlKCk7XG4gIH1cbiAgcmVuZGVyUG9pbnRzKGNvbnRleHQsIHIpIHtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkICYmICghY29udGV4dCB8fCB0eXBlb2YgY29udGV4dC5tb3ZlVG8gIT09IFwiZnVuY3Rpb25cIikpIHIgPSBjb250ZXh0LCBjb250ZXh0ID0gbnVsbDtcbiAgICByID0gciA9PSB1bmRlZmluZWQgPyAyIDogK3I7XG4gICAgY29uc3QgYnVmZmVyID0gY29udGV4dCA9PSBudWxsID8gY29udGV4dCA9IG5ldyBQYXRoIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHtwb2ludHN9ID0gdGhpcztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IHggPSBwb2ludHNbaV0sIHkgPSBwb2ludHNbaSArIDFdO1xuICAgICAgY29udGV4dC5tb3ZlVG8oeCArIHIsIHkpO1xuICAgICAgY29udGV4dC5hcmMoeCwgeSwgciwgMCwgdGF1KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXIudmFsdWUoKTtcbiAgfVxuICByZW5kZXJIdWxsKGNvbnRleHQpIHtcbiAgICBjb25zdCBidWZmZXIgPSBjb250ZXh0ID09IG51bGwgPyBjb250ZXh0ID0gbmV3IFBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qge2h1bGwsIHBvaW50c30gPSB0aGlzO1xuICAgIGNvbnN0IGggPSBodWxsWzBdICogMiwgbiA9IGh1bGwubGVuZ3RoO1xuICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1toXSwgcG9pbnRzW2ggKyAxXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGggPSAyICogaHVsbFtpXTtcbiAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1toXSwgcG9pbnRzW2ggKyAxXSk7XG4gICAgfVxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXIudmFsdWUoKTtcbiAgfVxuICBodWxsUG9seWdvbigpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gbmV3IFBvbHlnb247XG4gICAgdGhpcy5yZW5kZXJIdWxsKHBvbHlnb24pO1xuICAgIHJldHVybiBwb2x5Z29uLnZhbHVlKCk7XG4gIH1cbiAgcmVuZGVyVHJpYW5nbGUoaSwgY29udGV4dCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGNvbnRleHQgPT0gbnVsbCA/IGNvbnRleHQgPSBuZXcgUGF0aCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB7cG9pbnRzLCB0cmlhbmdsZXN9ID0gdGhpcztcbiAgICBjb25zdCB0MCA9IHRyaWFuZ2xlc1tpICo9IDNdICogMjtcbiAgICBjb25zdCB0MSA9IHRyaWFuZ2xlc1tpICsgMV0gKiAyO1xuICAgIGNvbnN0IHQyID0gdHJpYW5nbGVzW2kgKyAyXSAqIDI7XG4gICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzW3QwXSwgcG9pbnRzW3QwICsgMV0pO1xuICAgIGNvbnRleHQubGluZVRvKHBvaW50c1t0MV0sIHBvaW50c1t0MSArIDFdKTtcbiAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbdDJdLCBwb2ludHNbdDIgKyAxXSk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci52YWx1ZSgpO1xuICB9XG4gICp0cmlhbmdsZVBvbHlnb25zKCkge1xuICAgIGNvbnN0IHt0cmlhbmdsZXN9ID0gdGhpcztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHRyaWFuZ2xlcy5sZW5ndGggLyAzOyBpIDwgbjsgKytpKSB7XG4gICAgICB5aWVsZCB0aGlzLnRyaWFuZ2xlUG9seWdvbihpKTtcbiAgICB9XG4gIH1cbiAgdHJpYW5nbGVQb2x5Z29uKGkpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gbmV3IFBvbHlnb247XG4gICAgdGhpcy5yZW5kZXJUcmlhbmdsZShpLCBwb2x5Z29uKTtcbiAgICByZXR1cm4gcG9seWdvbi52YWx1ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXRBcnJheShwb2ludHMsIGZ4LCBmeSwgdGhhdCkge1xuICBjb25zdCBuID0gcG9pbnRzLmxlbmd0aDtcbiAgY29uc3QgYXJyYXkgPSBuZXcgRmxvYXQ2NEFycmF5KG4gKiAyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgIGFycmF5W2kgKiAyXSA9IGZ4LmNhbGwodGhhdCwgcCwgaSwgcG9pbnRzKTtcbiAgICBhcnJheVtpICogMiArIDFdID0gZnkuY2FsbCh0aGF0LCBwLCBpLCBwb2ludHMpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24qIGZsYXRJdGVyYWJsZShwb2ludHMsIGZ4LCBmeSwgdGhhdCkge1xuICBsZXQgaSA9IDA7XG4gIGZvciAoY29uc3QgcCBvZiBwb2ludHMpIHtcbiAgICB5aWVsZCBmeC5jYWxsKHRoYXQsIHAsIGksIHBvaW50cyk7XG4gICAgeWllbGQgZnkuY2FsbCh0aGF0LCBwLCBpLCBwb2ludHMpO1xuICAgICsraTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-delaunay/src/delaunay.js\n"); /***/ }), /***/ "../../../node_modules/d3-delaunay/src/index.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-delaunay/src/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Delaunay\": () => (/* reexport safe */ _delaunay_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"Voronoi\": () => (/* reexport safe */ _voronoi_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _delaunay_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./delaunay.js */ \"../../../node_modules/d3-delaunay/src/delaunay.js\");\n/* harmony import */ var _voronoi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./voronoi.js */ \"../../../node_modules/d3-delaunay/src/voronoi.js\");\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtEO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9pbmRleC5qcz8wZjdlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBEZWxhdW5heX0gZnJvbSBcIi4vZGVsYXVuYXkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBWb3Jvbm9pfSBmcm9tIFwiLi92b3Jvbm9pLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-delaunay/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-delaunay/src/path.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-delaunay/src/path.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Path)\n/* harmony export */ });\nconst epsilon = 1e-6;\n\nclass Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9wYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFZTtBQUNmO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlCQUF5QixHQUFHLHlCQUF5QjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWMsR0FBRyxjQUFjO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxHQUFHLEdBQUcsR0FBRztBQUNsRDtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsR0FBRyxFQUFFLFNBQVMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLGNBQWMsR0FBRyxjQUFjO0FBQy9GO0FBQ0E7QUFDQSxrQkFBa0IseUJBQXlCLEdBQUcseUJBQXlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9wYXRoLmpzP2IxNzIiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXBzaWxvbiA9IDFlLTY7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhdGgge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gICAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgICB0aGlzLl8gPSBcIlwiO1xuICB9XG4gIG1vdmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fICs9IGBNJHt0aGlzLl94MCA9IHRoaXMuX3gxID0gK3h9LCR7dGhpcy5feTAgPSB0aGlzLl95MSA9ICt5fWA7XG4gIH1cbiAgY2xvc2VQYXRoKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH1cbiAgbGluZVRvKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gYEwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGFyYyh4LCB5LCByKSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArcjtcbiAgICBjb25zdCB4MCA9IHggKyByO1xuICAgIGNvbnN0IHkwID0geTtcbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1c1wiKTtcbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHRoaXMuXyArPSBgTSR7eDB9LCR7eTB9YDtcbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgaWYgKCFyKSByZXR1cm47XG4gICAgdGhpcy5fICs9IGBBJHtyfSwke3J9LDAsMSwxLCR7eCAtIHJ9LCR7eX1BJHtyfSwke3J9LDAsMSwxLCR7dGhpcy5feDEgPSB4MH0sJHt0aGlzLl95MSA9IHkwfWA7XG4gIH1cbiAgcmVjdCh4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IGBNJHt0aGlzLl94MCA9IHRoaXMuX3gxID0gK3h9LCR7dGhpcy5feTAgPSB0aGlzLl95MSA9ICt5fWgkeyt3fXYkeytofWgkey13fVpgO1xuICB9XG4gIHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl8gfHwgbnVsbDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-delaunay/src/path.js\n"); /***/ }), /***/ "../../../node_modules/d3-delaunay/src/polygon.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-delaunay/src/polygon.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Polygon)\n/* harmony export */ });\nclass Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy9wb2x5Z29uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kZWxhdW5heS9zcmMvcG9seWdvbi5qcz9jZTNjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbHlnb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl8gPSBbXTtcbiAgfVxuICBtb3ZlVG8oeCwgeSkge1xuICAgIHRoaXMuXy5wdXNoKFt4LCB5XSk7XG4gIH1cbiAgY2xvc2VQYXRoKCkge1xuICAgIHRoaXMuXy5wdXNoKHRoaXMuX1swXS5zbGljZSgpKTtcbiAgfVxuICBsaW5lVG8oeCwgeSkge1xuICAgIHRoaXMuXy5wdXNoKFt4LCB5XSk7XG4gIH1cbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuXy5sZW5ndGggPyB0aGlzLl8gOiBudWxsO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-delaunay/src/polygon.js\n"); /***/ }), /***/ "../../../node_modules/d3-delaunay/src/voronoi.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-delaunay/src/voronoi.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Voronoi)\n/* harmony export */ });\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-delaunay/src/path.js\");\n/* harmony import */ var _polygon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./polygon.js */ \"../../../node_modules/d3-delaunay/src/polygon.js\");\n\n\n\nclass Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n let bx, by; // lazily computed barycenter of the hull\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (Math.abs(ab) < 1e-9) {\n // For a degenerate triangle, the circumcenter is at the infinity, in a\n // direction orthogonal to the halfedge and away from the “center” of\n // the diagram , defined as the hull’s barycenter.\n if (bx === undefined) {\n bx = by = 0;\n for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n bx /= hull.length, by /= hull.length;\n }\n const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n x = (x1 + x3) / 2 - a * ey;\n y = (y1 + y3) / 2 + a * ex;\n } else {\n const d = 1 / ab;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new _path_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new _polygon_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] === cj[aj]\n && ci[ai + 1] === cj[aj + 1]\n && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return this._simplify(V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points));\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1 = 0;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n // for more robustness, always consider the segment in the same order\n const flip = c0 < c1;\n if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n while (true) {\n if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n // undefined, the conditional statement will be executed.\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n _simplify(P) {\n if (P && P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n P.splice(j, 2), i -= 2;\n }\n }\n if (!P.length) P = null;\n }\n return P;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRlbGF1bmF5L3NyYy92b3Jvbm9pLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE2QjtBQUNNOztBQUVwQjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVyx3QkFBd0IsV0FBVztBQUN6RCxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxnREFBSTtBQUN2RCxXQUFXLFdBQVcseUJBQXlCLDBCQUEwQjtBQUN6RTtBQUNBLDBDQUEwQyxPQUFPO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0RBQUk7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsZ0RBQUk7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXLFNBQVM7QUFDL0IsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtREFBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxTQUFTO0FBQzlELHlDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCLGdDQUFnQztBQUNyRTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUYsT0FBTztBQUN4RjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxVQUFVO0FBQzVDLGdFQUFnRSxPQUFPO0FBQ3ZFLGtDQUFrQyxVQUFVO0FBQzVDLGdFQUFnRSxPQUFPO0FBQ3ZFLGtDQUFrQyxVQUFVO0FBQzVDLGdFQUFnRSxPQUFPO0FBQ3ZFLGtDQUFrQyxVQUFVO0FBQzVDLGdFQUFnRSxPQUFPO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLE1BQU0sbUJBQW1CO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsTUFBTSxtQkFBbUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZGVsYXVuYXkvc3JjL3Zvcm9ub2kuanM/NTQ4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQgUG9seWdvbiBmcm9tIFwiLi9wb2x5Z29uLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZvcm9ub2kge1xuICBjb25zdHJ1Y3RvcihkZWxhdW5heSwgW3htaW4sIHltaW4sIHhtYXgsIHltYXhdID0gWzAsIDAsIDk2MCwgNTAwXSkge1xuICAgIGlmICghKCh4bWF4ID0gK3htYXgpID49ICh4bWluID0gK3htaW4pKSB8fCAhKCh5bWF4ID0gK3ltYXgpID49ICh5bWluID0gK3ltaW4pKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBib3VuZHNcIik7XG4gICAgdGhpcy5kZWxhdW5heSA9IGRlbGF1bmF5O1xuICAgIHRoaXMuX2NpcmN1bWNlbnRlcnMgPSBuZXcgRmxvYXQ2NEFycmF5KGRlbGF1bmF5LnBvaW50cy5sZW5ndGggKiAyKTtcbiAgICB0aGlzLnZlY3RvcnMgPSBuZXcgRmxvYXQ2NEFycmF5KGRlbGF1bmF5LnBvaW50cy5sZW5ndGggKiAyKTtcbiAgICB0aGlzLnhtYXggPSB4bWF4LCB0aGlzLnhtaW4gPSB4bWluO1xuICAgIHRoaXMueW1heCA9IHltYXgsIHRoaXMueW1pbiA9IHltaW47XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLmRlbGF1bmF5LnVwZGF0ZSgpO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfaW5pdCgpIHtcbiAgICBjb25zdCB7ZGVsYXVuYXk6IHtwb2ludHMsIGh1bGwsIHRyaWFuZ2xlc30sIHZlY3RvcnN9ID0gdGhpcztcbiAgICBsZXQgYngsIGJ5OyAvLyBsYXppbHkgY29tcHV0ZWQgYmFyeWNlbnRlciBvZiB0aGUgaHVsbFxuXG4gICAgLy8gQ29tcHV0ZSBjaXJjdW1jZW50ZXJzLlxuICAgIGNvbnN0IGNpcmN1bWNlbnRlcnMgPSB0aGlzLmNpcmN1bWNlbnRlcnMgPSB0aGlzLl9jaXJjdW1jZW50ZXJzLnN1YmFycmF5KDAsIHRyaWFuZ2xlcy5sZW5ndGggLyAzICogMik7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBuID0gdHJpYW5nbGVzLmxlbmd0aCwgeCwgeTsgaSA8IG47IGkgKz0gMywgaiArPSAyKSB7XG4gICAgICBjb25zdCB0MSA9IHRyaWFuZ2xlc1tpXSAqIDI7XG4gICAgICBjb25zdCB0MiA9IHRyaWFuZ2xlc1tpICsgMV0gKiAyO1xuICAgICAgY29uc3QgdDMgPSB0cmlhbmdsZXNbaSArIDJdICogMjtcbiAgICAgIGNvbnN0IHgxID0gcG9pbnRzW3QxXTtcbiAgICAgIGNvbnN0IHkxID0gcG9pbnRzW3QxICsgMV07XG4gICAgICBjb25zdCB4MiA9IHBvaW50c1t0Ml07XG4gICAgICBjb25zdCB5MiA9IHBvaW50c1t0MiArIDFdO1xuICAgICAgY29uc3QgeDMgPSBwb2ludHNbdDNdO1xuICAgICAgY29uc3QgeTMgPSBwb2ludHNbdDMgKyAxXTtcblxuICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgY29uc3QgZHkgPSB5MiAtIHkxO1xuICAgICAgY29uc3QgZXggPSB4MyAtIHgxO1xuICAgICAgY29uc3QgZXkgPSB5MyAtIHkxO1xuICAgICAgY29uc3QgYWIgPSAoZHggKiBleSAtIGR5ICogZXgpICogMjtcblxuICAgICAgaWYgKE1hdGguYWJzKGFiKSA8IDFlLTkpIHtcbiAgICAgICAgLy8gRm9yIGEgZGVnZW5lcmF0ZSB0cmlhbmdsZSwgdGhlIGNpcmN1bWNlbnRlciBpcyBhdCB0aGUgaW5maW5pdHksIGluIGFcbiAgICAgICAgLy8gZGlyZWN0aW9uIG9ydGhvZ29uYWwgdG8gdGhlIGhhbGZlZGdlIGFuZCBhd2F5IGZyb20gdGhlIOKAnGNlbnRlcuKAnSBvZlxuICAgICAgICAvLyB0aGUgZGlhZ3JhbSA8YngsIGJ5PiwgZGVmaW5lZCBhcyB0aGUgaHVsbOKAmXMgYmFyeWNlbnRlci5cbiAgICAgICAgaWYgKGJ4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBieCA9IGJ5ID0gMDtcbiAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaHVsbCkgYnggKz0gcG9pbnRzW2kgKiAyXSwgYnkgKz0gcG9pbnRzW2kgKiAyICsgMV07XG4gICAgICAgICAgYnggLz0gaHVsbC5sZW5ndGgsIGJ5IC89IGh1bGwubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGEgPSAxZTkgKiBNYXRoLnNpZ24oKGJ4IC0geDEpICogZXkgLSAoYnkgLSB5MSkgKiBleCk7XG4gICAgICAgIHggPSAoeDEgKyB4MykgLyAyIC0gYSAqIGV5O1xuICAgICAgICB5ID0gKHkxICsgeTMpIC8gMiArIGEgKiBleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGQgPSAxIC8gYWI7XG4gICAgICAgIGNvbnN0IGJsID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgIGNvbnN0IGNsID0gZXggKiBleCArIGV5ICogZXk7XG4gICAgICAgIHggPSB4MSArIChleSAqIGJsIC0gZHkgKiBjbCkgKiBkO1xuICAgICAgICB5ID0geTEgKyAoZHggKiBjbCAtIGV4ICogYmwpICogZDtcbiAgICAgIH1cbiAgICAgIGNpcmN1bWNlbnRlcnNbal0gPSB4O1xuICAgICAgY2lyY3VtY2VudGVyc1tqICsgMV0gPSB5O1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgZXh0ZXJpb3IgY2VsbCByYXlzLlxuICAgIGxldCBoID0gaHVsbFtodWxsLmxlbmd0aCAtIDFdO1xuICAgIGxldCBwMCwgcDEgPSBoICogNDtcbiAgICBsZXQgeDAsIHgxID0gcG9pbnRzWzIgKiBoXTtcbiAgICBsZXQgeTAsIHkxID0gcG9pbnRzWzIgKiBoICsgMV07XG4gICAgdmVjdG9ycy5maWxsKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaHVsbC5sZW5ndGg7ICsraSkge1xuICAgICAgaCA9IGh1bGxbaV07XG4gICAgICBwMCA9IHAxLCB4MCA9IHgxLCB5MCA9IHkxO1xuICAgICAgcDEgPSBoICogNCwgeDEgPSBwb2ludHNbMiAqIGhdLCB5MSA9IHBvaW50c1syICogaCArIDFdO1xuICAgICAgdmVjdG9yc1twMCArIDJdID0gdmVjdG9yc1twMV0gPSB5MCAtIHkxO1xuICAgICAgdmVjdG9yc1twMCArIDNdID0gdmVjdG9yc1twMSArIDFdID0geDEgLSB4MDtcbiAgICB9XG4gIH1cbiAgcmVuZGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCBidWZmZXIgPSBjb250ZXh0ID09IG51bGwgPyBjb250ZXh0ID0gbmV3IFBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qge2RlbGF1bmF5OiB7aGFsZmVkZ2VzLCBpbmVkZ2VzLCBodWxsfSwgY2lyY3VtY2VudGVycywgdmVjdG9yc30gPSB0aGlzO1xuICAgIGlmIChodWxsLmxlbmd0aCA8PSAxKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGhhbGZlZGdlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGogPSBoYWxmZWRnZXNbaV07XG4gICAgICBpZiAoaiA8IGkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgdGkgPSBNYXRoLmZsb29yKGkgLyAzKSAqIDI7XG4gICAgICBjb25zdCB0aiA9IE1hdGguZmxvb3IoaiAvIDMpICogMjtcbiAgICAgIGNvbnN0IHhpID0gY2lyY3VtY2VudGVyc1t0aV07XG4gICAgICBjb25zdCB5aSA9IGNpcmN1bWNlbnRlcnNbdGkgKyAxXTtcbiAgICAgIGNvbnN0IHhqID0gY2lyY3VtY2VudGVyc1t0al07XG4gICAgICBjb25zdCB5aiA9IGNpcmN1bWNlbnRlcnNbdGogKyAxXTtcbiAgICAgIHRoaXMuX3JlbmRlclNlZ21lbnQoeGksIHlpLCB4aiwgeWosIGNvbnRleHQpO1xuICAgIH1cbiAgICBsZXQgaDAsIGgxID0gaHVsbFtodWxsLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaHVsbC5sZW5ndGg7ICsraSkge1xuICAgICAgaDAgPSBoMSwgaDEgPSBodWxsW2ldO1xuICAgICAgY29uc3QgdCA9IE1hdGguZmxvb3IoaW5lZGdlc1toMV0gLyAzKSAqIDI7XG4gICAgICBjb25zdCB4ID0gY2lyY3VtY2VudGVyc1t0XTtcbiAgICAgIGNvbnN0IHkgPSBjaXJjdW1jZW50ZXJzW3QgKyAxXTtcbiAgICAgIGNvbnN0IHYgPSBoMCAqIDQ7XG4gICAgICBjb25zdCBwID0gdGhpcy5fcHJvamVjdCh4LCB5LCB2ZWN0b3JzW3YgKyAyXSwgdmVjdG9yc1t2ICsgM10pO1xuICAgICAgaWYgKHApIHRoaXMuX3JlbmRlclNlZ21lbnQoeCwgeSwgcFswXSwgcFsxXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLnZhbHVlKCk7XG4gIH1cbiAgcmVuZGVyQm91bmRzKGNvbnRleHQpIHtcbiAgICBjb25zdCBidWZmZXIgPSBjb250ZXh0ID09IG51bGwgPyBjb250ZXh0ID0gbmV3IFBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29udGV4dC5yZWN0KHRoaXMueG1pbiwgdGhpcy55bWluLCB0aGlzLnhtYXggLSB0aGlzLnhtaW4sIHRoaXMueW1heCAtIHRoaXMueW1pbik7XG4gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXIudmFsdWUoKTtcbiAgfVxuICByZW5kZXJDZWxsKGksIGNvbnRleHQpIHtcbiAgICBjb25zdCBidWZmZXIgPSBjb250ZXh0ID09IG51bGwgPyBjb250ZXh0ID0gbmV3IFBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcG9pbnRzID0gdGhpcy5fY2xpcChpKTtcbiAgICBpZiAocG9pbnRzID09PSBudWxsIHx8ICFwb2ludHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgIGxldCBuID0gcG9pbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAocG9pbnRzWzBdID09PSBwb2ludHNbbi0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1tuLTFdICYmIG4gPiAxKSBuIC09IDI7XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgIGlmIChwb2ludHNbaV0gIT09IHBvaW50c1tpLTJdIHx8IHBvaW50c1tpKzFdICE9PSBwb2ludHNbaS0xXSlcbiAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKTtcbiAgICB9XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci52YWx1ZSgpO1xuICB9XG4gICpjZWxsUG9seWdvbnMoKSB7XG4gICAgY29uc3Qge2RlbGF1bmF5OiB7cG9pbnRzfX0gPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gcG9pbnRzLmxlbmd0aCAvIDI7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGxQb2x5Z29uKGkpO1xuICAgICAgaWYgKGNlbGwpIGNlbGwuaW5kZXggPSBpLCB5aWVsZCBjZWxsO1xuICAgIH1cbiAgfVxuICBjZWxsUG9seWdvbihpKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IG5ldyBQb2x5Z29uO1xuICAgIHRoaXMucmVuZGVyQ2VsbChpLCBwb2x5Z29uKTtcbiAgICByZXR1cm4gcG9seWdvbi52YWx1ZSgpO1xuICB9XG4gIF9yZW5kZXJTZWdtZW50KHgwLCB5MCwgeDEsIHkxLCBjb250ZXh0KSB7XG4gICAgbGV0IFM7XG4gICAgY29uc3QgYzAgPSB0aGlzLl9yZWdpb25jb2RlKHgwLCB5MCk7XG4gICAgY29uc3QgYzEgPSB0aGlzLl9yZWdpb25jb2RlKHgxLCB5MSk7XG4gICAgaWYgKGMwID09PSAwICYmIGMxID09PSAwKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICB9IGVsc2UgaWYgKFMgPSB0aGlzLl9jbGlwU2VnbWVudCh4MCwgeTAsIHgxLCB5MSwgYzAsIGMxKSkge1xuICAgICAgY29udGV4dC5tb3ZlVG8oU1swXSwgU1sxXSk7XG4gICAgICBjb250ZXh0LmxpbmVUbyhTWzJdLCBTWzNdKTtcbiAgICB9XG4gIH1cbiAgY29udGFpbnMoaSwgeCwgeSkge1xuICAgIGlmICgoeCA9ICt4LCB4ICE9PSB4KSB8fCAoeSA9ICt5LCB5ICE9PSB5KSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRlbGF1bmF5Ll9zdGVwKGksIHgsIHkpID09PSBpO1xuICB9XG4gICpuZWlnaGJvcnMoaSkge1xuICAgIGNvbnN0IGNpID0gdGhpcy5fY2xpcChpKTtcbiAgICBpZiAoY2kpIGZvciAoY29uc3QgaiBvZiB0aGlzLmRlbGF1bmF5Lm5laWdoYm9ycyhpKSkge1xuICAgICAgY29uc3QgY2ogPSB0aGlzLl9jbGlwKGopO1xuICAgICAgLy8gZmluZCB0aGUgY29tbW9uIGVkZ2VcbiAgICAgIGlmIChjaikgbG9vcDogZm9yIChsZXQgYWkgPSAwLCBsaSA9IGNpLmxlbmd0aDsgYWkgPCBsaTsgYWkgKz0gMikge1xuICAgICAgICBmb3IgKGxldCBhaiA9IDAsIGxqID0gY2oubGVuZ3RoOyBhaiA8IGxqOyBhaiArPSAyKSB7XG4gICAgICAgICAgaWYgKGNpW2FpXSA9PT0gY2pbYWpdXG4gICAgICAgICAgICAgICYmIGNpW2FpICsgMV0gPT09IGNqW2FqICsgMV1cbiAgICAgICAgICAgICAgJiYgY2lbKGFpICsgMikgJSBsaV0gPT09IGNqWyhhaiArIGxqIC0gMikgJSBsal1cbiAgICAgICAgICAgICAgJiYgY2lbKGFpICsgMykgJSBsaV0gPT09IGNqWyhhaiArIGxqIC0gMSkgJSBsal0pIHtcbiAgICAgICAgICAgIHlpZWxkIGo7XG4gICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBfY2VsbChpKSB7XG4gICAgY29uc3Qge2NpcmN1bWNlbnRlcnMsIGRlbGF1bmF5OiB7aW5lZGdlcywgaGFsZmVkZ2VzLCB0cmlhbmdsZXN9fSA9IHRoaXM7XG4gICAgY29uc3QgZTAgPSBpbmVkZ2VzW2ldO1xuICAgIGlmIChlMCA9PT0gLTEpIHJldHVybiBudWxsOyAvLyBjb2luY2lkZW50IHBvaW50XG4gICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgbGV0IGUgPSBlMDtcbiAgICBkbyB7XG4gICAgICBjb25zdCB0ID0gTWF0aC5mbG9vcihlIC8gMyk7XG4gICAgICBwb2ludHMucHVzaChjaXJjdW1jZW50ZXJzW3QgKiAyXSwgY2lyY3VtY2VudGVyc1t0ICogMiArIDFdKTtcbiAgICAgIGUgPSBlICUgMyA9PT0gMiA/IGUgLSAyIDogZSArIDE7XG4gICAgICBpZiAodHJpYW5nbGVzW2VdICE9PSBpKSBicmVhazsgLy8gYmFkIHRyaWFuZ3VsYXRpb25cbiAgICAgIGUgPSBoYWxmZWRnZXNbZV07XG4gICAgfSB3aGlsZSAoZSAhPT0gZTAgJiYgZSAhPT0gLTEpO1xuICAgIHJldHVybiBwb2ludHM7XG4gIH1cbiAgX2NsaXAoaSkge1xuICAgIC8vIGRlZ2VuZXJhdGUgY2FzZSAoMSB2YWxpZCBwb2ludDogcmV0dXJuIHRoZSBib3gpXG4gICAgaWYgKGkgPT09IDAgJiYgdGhpcy5kZWxhdW5heS5odWxsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIFt0aGlzLnhtYXgsIHRoaXMueW1pbiwgdGhpcy54bWF4LCB0aGlzLnltYXgsIHRoaXMueG1pbiwgdGhpcy55bWF4LCB0aGlzLnhtaW4sIHRoaXMueW1pbl07XG4gICAgfVxuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuX2NlbGwoaSk7XG4gICAgaWYgKHBvaW50cyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qge3ZlY3RvcnM6IFZ9ID0gdGhpcztcbiAgICBjb25zdCB2ID0gaSAqIDQ7XG4gICAgcmV0dXJuIHRoaXMuX3NpbXBsaWZ5KFZbdl0gfHwgVlt2ICsgMV1cbiAgICAgICAgPyB0aGlzLl9jbGlwSW5maW5pdGUoaSwgcG9pbnRzLCBWW3ZdLCBWW3YgKyAxXSwgVlt2ICsgMl0sIFZbdiArIDNdKVxuICAgICAgICA6IHRoaXMuX2NsaXBGaW5pdGUoaSwgcG9pbnRzKSk7XG4gIH1cbiAgX2NsaXBGaW5pdGUoaSwgcG9pbnRzKSB7XG4gICAgY29uc3QgbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IFAgPSBudWxsO1xuICAgIGxldCB4MCwgeTAsIHgxID0gcG9pbnRzW24gLSAyXSwgeTEgPSBwb2ludHNbbiAtIDFdO1xuICAgIGxldCBjMCwgYzEgPSB0aGlzLl9yZWdpb25jb2RlKHgxLCB5MSk7XG4gICAgbGV0IGUwLCBlMSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqICs9IDIpIHtcbiAgICAgIHgwID0geDEsIHkwID0geTEsIHgxID0gcG9pbnRzW2pdLCB5MSA9IHBvaW50c1tqICsgMV07XG4gICAgICBjMCA9IGMxLCBjMSA9IHRoaXMuX3JlZ2lvbmNvZGUoeDEsIHkxKTtcbiAgICAgIGlmIChjMCA9PT0gMCAmJiBjMSA9PT0gMCkge1xuICAgICAgICBlMCA9IGUxLCBlMSA9IDA7XG4gICAgICAgIGlmIChQKSBQLnB1c2goeDEsIHkxKTtcbiAgICAgICAgZWxzZSBQID0gW3gxLCB5MV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgUywgc3gwLCBzeTAsIHN4MSwgc3kxO1xuICAgICAgICBpZiAoYzAgPT09IDApIHtcbiAgICAgICAgICBpZiAoKFMgPSB0aGlzLl9jbGlwU2VnbWVudCh4MCwgeTAsIHgxLCB5MSwgYzAsIGMxKSkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgIFtzeDAsIHN5MCwgc3gxLCBzeTFdID0gUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoKFMgPSB0aGlzLl9jbGlwU2VnbWVudCh4MSwgeTEsIHgwLCB5MCwgYzEsIGMwKSkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgIFtzeDEsIHN5MSwgc3gwLCBzeTBdID0gUztcbiAgICAgICAgICBlMCA9IGUxLCBlMSA9IHRoaXMuX2VkZ2Vjb2RlKHN4MCwgc3kwKTtcbiAgICAgICAgICBpZiAoZTAgJiYgZTEpIHRoaXMuX2VkZ2UoaSwgZTAsIGUxLCBQLCBQLmxlbmd0aCk7XG4gICAgICAgICAgaWYgKFApIFAucHVzaChzeDAsIHN5MCk7XG4gICAgICAgICAgZWxzZSBQID0gW3N4MCwgc3kwXTtcbiAgICAgICAgfVxuICAgICAgICBlMCA9IGUxLCBlMSA9IHRoaXMuX2VkZ2Vjb2RlKHN4MSwgc3kxKTtcbiAgICAgICAgaWYgKGUwICYmIGUxKSB0aGlzLl9lZGdlKGksIGUwLCBlMSwgUCwgUC5sZW5ndGgpO1xuICAgICAgICBpZiAoUCkgUC5wdXNoKHN4MSwgc3kxKTtcbiAgICAgICAgZWxzZSBQID0gW3N4MSwgc3kxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFApIHtcbiAgICAgIGUwID0gZTEsIGUxID0gdGhpcy5fZWRnZWNvZGUoUFswXSwgUFsxXSk7XG4gICAgICBpZiAoZTAgJiYgZTEpIHRoaXMuX2VkZ2UoaSwgZTAsIGUxLCBQLCBQLmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGksICh0aGlzLnhtaW4gKyB0aGlzLnhtYXgpIC8gMiwgKHRoaXMueW1pbiArIHRoaXMueW1heCkgLyAyKSkge1xuICAgICAgcmV0dXJuIFt0aGlzLnhtYXgsIHRoaXMueW1pbiwgdGhpcy54bWF4LCB0aGlzLnltYXgsIHRoaXMueG1pbiwgdGhpcy55bWF4LCB0aGlzLnhtaW4sIHRoaXMueW1pbl07XG4gICAgfVxuICAgIHJldHVybiBQO1xuICB9XG4gIF9jbGlwU2VnbWVudCh4MCwgeTAsIHgxLCB5MSwgYzAsIGMxKSB7XG4gICAgLy8gZm9yIG1vcmUgcm9idXN0bmVzcywgYWx3YXlzIGNvbnNpZGVyIHRoZSBzZWdtZW50IGluIHRoZSBzYW1lIG9yZGVyXG4gICAgY29uc3QgZmxpcCA9IGMwIDwgYzE7XG4gICAgaWYgKGZsaXApIFt4MCwgeTAsIHgxLCB5MSwgYzAsIGMxXSA9IFt4MSwgeTEsIHgwLCB5MCwgYzEsIGMwXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGMwID09PSAwICYmIGMxID09PSAwKSByZXR1cm4gZmxpcCA/IFt4MSwgeTEsIHgwLCB5MF0gOiBbeDAsIHkwLCB4MSwgeTFdO1xuICAgICAgaWYgKGMwICYgYzEpIHJldHVybiBudWxsO1xuICAgICAgbGV0IHgsIHksIGMgPSBjMCB8fCBjMTtcbiAgICAgIGlmIChjICYgMGIxMDAwKSB4ID0geDAgKyAoeDEgLSB4MCkgKiAodGhpcy55bWF4IC0geTApIC8gKHkxIC0geTApLCB5ID0gdGhpcy55bWF4O1xuICAgICAgZWxzZSBpZiAoYyAmIDBiMDEwMCkgeCA9IHgwICsgKHgxIC0geDApICogKHRoaXMueW1pbiAtIHkwKSAvICh5MSAtIHkwKSwgeSA9IHRoaXMueW1pbjtcbiAgICAgIGVsc2UgaWYgKGMgJiAwYjAwMTApIHkgPSB5MCArICh5MSAtIHkwKSAqICh0aGlzLnhtYXggLSB4MCkgLyAoeDEgLSB4MCksIHggPSB0aGlzLnhtYXg7XG4gICAgICBlbHNlIHkgPSB5MCArICh5MSAtIHkwKSAqICh0aGlzLnhtaW4gLSB4MCkgLyAoeDEgLSB4MCksIHggPSB0aGlzLnhtaW47XG4gICAgICBpZiAoYzApIHgwID0geCwgeTAgPSB5LCBjMCA9IHRoaXMuX3JlZ2lvbmNvZGUoeDAsIHkwKTtcbiAgICAgIGVsc2UgeDEgPSB4LCB5MSA9IHksIGMxID0gdGhpcy5fcmVnaW9uY29kZSh4MSwgeTEpO1xuICAgIH1cbiAgfVxuICBfY2xpcEluZmluaXRlKGksIHBvaW50cywgdngwLCB2eTAsIHZ4biwgdnluKSB7XG4gICAgbGV0IFAgPSBBcnJheS5mcm9tKHBvaW50cyksIHA7XG4gICAgaWYgKHAgPSB0aGlzLl9wcm9qZWN0KFBbMF0sIFBbMV0sIHZ4MCwgdnkwKSkgUC51bnNoaWZ0KHBbMF0sIHBbMV0pO1xuICAgIGlmIChwID0gdGhpcy5fcHJvamVjdChQW1AubGVuZ3RoIC0gMl0sIFBbUC5sZW5ndGggLSAxXSwgdnhuLCB2eW4pKSBQLnB1c2gocFswXSwgcFsxXSk7XG4gICAgaWYgKFAgPSB0aGlzLl9jbGlwRmluaXRlKGksIFApKSB7XG4gICAgICBmb3IgKGxldCBqID0gMCwgbiA9IFAubGVuZ3RoLCBjMCwgYzEgPSB0aGlzLl9lZGdlY29kZShQW24gLSAyXSwgUFtuIC0gMV0pOyBqIDwgbjsgaiArPSAyKSB7XG4gICAgICAgIGMwID0gYzEsIGMxID0gdGhpcy5fZWRnZWNvZGUoUFtqXSwgUFtqICsgMV0pO1xuICAgICAgICBpZiAoYzAgJiYgYzEpIGogPSB0aGlzLl9lZGdlKGksIGMwLCBjMSwgUCwgaiksIG4gPSBQLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoaSwgKHRoaXMueG1pbiArIHRoaXMueG1heCkgLyAyLCAodGhpcy55bWluICsgdGhpcy55bWF4KSAvIDIpKSB7XG4gICAgICBQID0gW3RoaXMueG1pbiwgdGhpcy55bWluLCB0aGlzLnhtYXgsIHRoaXMueW1pbiwgdGhpcy54bWF4LCB0aGlzLnltYXgsIHRoaXMueG1pbiwgdGhpcy55bWF4XTtcbiAgICB9XG4gICAgcmV0dXJuIFA7XG4gIH1cbiAgX2VkZ2UoaSwgZTAsIGUxLCBQLCBqKSB7XG4gICAgd2hpbGUgKGUwICE9PSBlMSkge1xuICAgICAgbGV0IHgsIHk7XG4gICAgICBzd2l0Y2ggKGUwKSB7XG4gICAgICAgIGNhc2UgMGIwMTAxOiBlMCA9IDBiMDEwMDsgY29udGludWU7IC8vIHRvcC1sZWZ0XG4gICAgICAgIGNhc2UgMGIwMTAwOiBlMCA9IDBiMDExMCwgeCA9IHRoaXMueG1heCwgeSA9IHRoaXMueW1pbjsgYnJlYWs7IC8vIHRvcFxuICAgICAgICBjYXNlIDBiMDExMDogZTAgPSAwYjAwMTA7IGNvbnRpbnVlOyAvLyB0b3AtcmlnaHRcbiAgICAgICAgY2FzZSAwYjAwMTA6IGUwID0gMGIxMDEwLCB4ID0gdGhpcy54bWF4LCB5ID0gdGhpcy55bWF4OyBicmVhazsgLy8gcmlnaHRcbiAgICAgICAgY2FzZSAwYjEwMTA6IGUwID0gMGIxMDAwOyBjb250aW51ZTsgLy8gYm90dG9tLXJpZ2h0XG4gICAgICAgIGNhc2UgMGIxMDAwOiBlMCA9IDBiMTAwMSwgeCA9IHRoaXMueG1pbiwgeSA9IHRoaXMueW1heDsgYnJlYWs7IC8vIGJvdHRvbVxuICAgICAgICBjYXNlIDBiMTAwMTogZTAgPSAwYjAwMDE7IGNvbnRpbnVlOyAvLyBib3R0b20tbGVmdFxuICAgICAgICBjYXNlIDBiMDAwMTogZTAgPSAwYjAxMDEsIHggPSB0aGlzLnhtaW4sIHkgPSB0aGlzLnltaW47IGJyZWFrOyAvLyBsZWZ0XG4gICAgICB9XG4gICAgICAvLyBOb3RlOiB0aGlzIGltcGxpY2l0bHkgY2hlY2tzIGZvciBvdXQgb2YgYm91bmRzOiBpZiBQW2pdIG9yIFBbaisxXSBhcmVcbiAgICAgIC8vIHVuZGVmaW5lZCwgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgICAgaWYgKChQW2pdICE9PSB4IHx8IFBbaiArIDFdICE9PSB5KSAmJiB0aGlzLmNvbnRhaW5zKGksIHgsIHkpKSB7XG4gICAgICAgIFAuc3BsaWNlKGosIDAsIHgsIHkpLCBqICs9IDI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqO1xuICB9XG4gIF9wcm9qZWN0KHgwLCB5MCwgdngsIHZ5KSB7XG4gICAgbGV0IHQgPSBJbmZpbml0eSwgYywgeCwgeTtcbiAgICBpZiAodnkgPCAwKSB7IC8vIHRvcFxuICAgICAgaWYgKHkwIDw9IHRoaXMueW1pbikgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoKGMgPSAodGhpcy55bWluIC0geTApIC8gdnkpIDwgdCkgeSA9IHRoaXMueW1pbiwgeCA9IHgwICsgKHQgPSBjKSAqIHZ4O1xuICAgIH0gZWxzZSBpZiAodnkgPiAwKSB7IC8vIGJvdHRvbVxuICAgICAgaWYgKHkwID49IHRoaXMueW1heCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoKGMgPSAodGhpcy55bWF4IC0geTApIC8gdnkpIDwgdCkgeSA9IHRoaXMueW1heCwgeCA9IHgwICsgKHQgPSBjKSAqIHZ4O1xuICAgIH1cbiAgICBpZiAodnggPiAwKSB7IC8vIHJpZ2h0XG4gICAgICBpZiAoeDAgPj0gdGhpcy54bWF4KSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICgoYyA9ICh0aGlzLnhtYXggLSB4MCkgLyB2eCkgPCB0KSB4ID0gdGhpcy54bWF4LCB5ID0geTAgKyAodCA9IGMpICogdnk7XG4gICAgfSBlbHNlIGlmICh2eCA8IDApIHsgLy8gbGVmdFxuICAgICAgaWYgKHgwIDw9IHRoaXMueG1pbikgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoKGMgPSAodGhpcy54bWluIC0geDApIC8gdngpIDwgdCkgeCA9IHRoaXMueG1pbiwgeSA9IHkwICsgKHQgPSBjKSAqIHZ5O1xuICAgIH1cbiAgICByZXR1cm4gW3gsIHldO1xuICB9XG4gIF9lZGdlY29kZSh4LCB5KSB7XG4gICAgcmV0dXJuICh4ID09PSB0aGlzLnhtaW4gPyAwYjAwMDFcbiAgICAgICAgOiB4ID09PSB0aGlzLnhtYXggPyAwYjAwMTAgOiAwYjAwMDApXG4gICAgICAgIHwgKHkgPT09IHRoaXMueW1pbiA/IDBiMDEwMFxuICAgICAgICA6IHkgPT09IHRoaXMueW1heCA/IDBiMTAwMCA6IDBiMDAwMCk7XG4gIH1cbiAgX3JlZ2lvbmNvZGUoeCwgeSkge1xuICAgIHJldHVybiAoeCA8IHRoaXMueG1pbiA/IDBiMDAwMVxuICAgICAgICA6IHggPiB0aGlzLnhtYXggPyAwYjAwMTAgOiAwYjAwMDApXG4gICAgICAgIHwgKHkgPCB0aGlzLnltaW4gPyAwYjAxMDBcbiAgICAgICAgOiB5ID4gdGhpcy55bWF4ID8gMGIxMDAwIDogMGIwMDAwKTtcbiAgfVxuICBfc2ltcGxpZnkoUCkge1xuICAgIGlmIChQICYmIFAubGVuZ3RoID4gNCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBQLmxlbmd0aDsgaSs9IDIpIHtcbiAgICAgICAgY29uc3QgaiA9IChpICsgMikgJSBQLmxlbmd0aCwgayA9IChpICsgNCkgJSBQLmxlbmd0aDtcbiAgICAgICAgaWYgKFBbaV0gPT09IFBbal0gJiYgUFtqXSA9PT0gUFtrXSB8fCBQW2kgKyAxXSA9PT0gUFtqICsgMV0gJiYgUFtqICsgMV0gPT09IFBbayArIDFdKSB7XG4gICAgICAgICAgUC5zcGxpY2UoaiwgMiksIGkgLT0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFQLmxlbmd0aCkgUCA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBQO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-delaunay/src/voronoi.js\n"); /***/ }), /***/ "../../../node_modules/d3-dispatch/src/dispatch.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-dispatch/src/dispatch.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dispatch);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsWUFBWTs7QUFFWjtBQUNBLDhDQUE4QyxLQUFLLE9BQU87QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtRkFBbUYsT0FBTztBQUMxRjtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZELEdBQUc7QUFDSDtBQUNBO0FBQ0Esb0RBQW9ELE9BQU87QUFDM0Q7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0QjtBQUMvRDtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzP2FiMzQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dispatch/src/dispatch.js\n"); /***/ }), /***/ "../../../node_modules/d3-dispatch/src/index.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-dispatch/src/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dispatch\": () => (/* reexport safe */ _dispatch_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dispatch.js */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzPzY1ODUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIGRpc3BhdGNofSBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dispatch/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/constant.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-drag/src/constant.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2NvbnN0YW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2NvbnN0YW50LmpzPzI1MTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/drag.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-drag/src/drag.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var _nodrag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nodrag.js */ \"../../../node_modules/d3-drag/src/nodrag.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent.js */ \"../../../node_modules/d3-drag/src/noevent.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-drag/src/constant.js\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event.js */ \"../../../node_modules/d3-drag/src/event.js\");\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.view)\n .on(\"mousemove.drag\", mousemoved, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event.view);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.view).on(\"mousemove.drag mouseup.drag\", null);\n (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_3__.yesdrag)(event.view, mousemoving);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_1__.nopropagation)(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new _event_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new _event_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"](type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2RyYWcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBcUM7QUFDUTtBQUNEO0FBQ3VDO0FBQzlDO0FBQ0Y7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQix3QkFBd0I7QUFDOUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLGtCQUFrQix1REFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxtREFBVTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQU07QUFDVix3Q0FBd0MsMERBQWlCO0FBQ3pELHNDQUFzQywwREFBaUI7QUFDdkQsSUFBSSxzREFBTTtBQUNWLElBQUksMERBQWE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksdURBQU87QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHdEQUFNO0FBQ1YsSUFBSSxtREFBTztBQUNYLElBQUksdURBQU87QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQSxRQUFRLDBEQUFhO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBLFFBQVEsdURBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMscUJBQXFCLFFBQVE7QUFDdkUsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQSxRQUFRLDBEQUFhO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLHdEQUFPO0FBQ25COztBQUVBLG9DQUFvQyxpREFBUztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFLDJEQUEyRDtBQUMzRCx5QkFBeUIsd0RBQU8seUNBQXlDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpREFBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSx3REFBUTtBQUM5RTs7QUFFQTtBQUNBLHlFQUF5RSx3REFBUTtBQUNqRjs7QUFFQTtBQUNBLHVFQUF1RSx3REFBUTtBQUMvRTs7QUFFQTtBQUNBLHlFQUF5RSx3REFBUTtBQUNqRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZHJhZy5qcz9kNzA0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtzZWxlY3QsIHBvaW50ZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBub2RyYWcsIHt5ZXNkcmFnfSBmcm9tIFwiLi9ub2RyYWcuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9ucGFzc2l2ZSwgbm9ucGFzc2l2ZWNhcHR1cmUsIG5vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IERyYWdFdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb250YWluZXIoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdWJqZWN0KGV2ZW50LCBkKSB7XG4gIHJldHVybiBkID09IG51bGwgPyB7eDogZXZlbnQueCwgeTogZXZlbnQueX0gOiBkO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IChcIm9udG91Y2hzdGFydFwiIGluIHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICBjb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLFxuICAgICAgc3ViamVjdCA9IGRlZmF1bHRTdWJqZWN0LFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIGdlc3R1cmVzID0ge30sXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiZHJhZ1wiLCBcImVuZFwiKSxcbiAgICAgIGFjdGl2ZSA9IDAsXG4gICAgICBtb3VzZWRvd254LFxuICAgICAgbW91c2Vkb3dueSxcbiAgICAgIG1vdXNlbW92aW5nLFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDA7XG5cbiAgZnVuY3Rpb24gZHJhZyhzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmRyYWdcIiwgbW91c2Vkb3duZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsIHRvdWNoc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmRyYWdcIiwgdG91Y2htb3ZlZCwgbm9ucGFzc2l2ZSlcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKGV2ZW50LCBkKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuY2FsbCh0aGlzLCBldmVudCwgZCkpIHJldHVybjtcbiAgICB2YXIgZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KHRoaXMsIGNvbnRhaW5lci5jYWxsKHRoaXMsIGV2ZW50LCBkKSwgZXZlbnQsIGQsIFwibW91c2VcIik7XG4gICAgaWYgKCFnZXN0dXJlKSByZXR1cm47XG4gICAgc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAub24oXCJtb3VzZW1vdmUuZHJhZ1wiLCBtb3VzZW1vdmVkLCBub25wYXNzaXZlY2FwdHVyZSlcbiAgICAgIC5vbihcIm1vdXNldXAuZHJhZ1wiLCBtb3VzZXVwcGVkLCBub25wYXNzaXZlY2FwdHVyZSk7XG4gICAgbm9kcmFnKGV2ZW50LnZpZXcpO1xuICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgIG1vdXNlbW92aW5nID0gZmFsc2U7XG4gICAgbW91c2Vkb3dueCA9IGV2ZW50LmNsaWVudFg7XG4gICAgbW91c2Vkb3dueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgZ2VzdHVyZShcInN0YXJ0XCIsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlbW92ZWQoZXZlbnQpIHtcbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBpZiAoIW1vdXNlbW92aW5nKSB7XG4gICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0gbW91c2Vkb3dueCwgZHkgPSBldmVudC5jbGllbnRZIC0gbW91c2Vkb3dueTtcbiAgICAgIG1vdXNlbW92aW5nID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICB9XG4gICAgZ2VzdHVyZXMubW91c2UoXCJkcmFnXCIsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNldXBwZWQoZXZlbnQpIHtcbiAgICBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWdcIiwgbnVsbCk7XG4gICAgeWVzZHJhZyhldmVudC52aWV3LCBtb3VzZW1vdmluZyk7XG4gICAgbm9ldmVudChldmVudCk7XG4gICAgZ2VzdHVyZXMubW91c2UoXCJlbmRcIiwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKGV2ZW50LCBkKSB7XG4gICAgaWYgKCFmaWx0ZXIuY2FsbCh0aGlzLCBldmVudCwgZCkpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBjID0gY29udGFpbmVyLmNhbGwodGhpcywgZXZlbnQsIGQpLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KHRoaXMsIGMsIGV2ZW50LCBkLCB0b3VjaGVzW2ldLmlkZW50aWZpZXIsIHRvdWNoZXNbaV0pKSB7XG4gICAgICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgICBnZXN0dXJlKFwic3RhcnRcIiwgZXZlbnQsIHRvdWNoZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoZXZlbnQpIHtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICAgIGdlc3R1cmUoXCJkcmFnXCIsIGV2ZW50LCB0b3VjaGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKGV2ZW50KSB7XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCA1MDApOyAvLyBHaG9zdCBjbGlja3MgYXJlIGRlbGF5ZWQhXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgICBnZXN0dXJlKFwiZW5kXCIsIGV2ZW50LCB0b3VjaGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiZWZvcmVzdGFydCh0aGF0LCBjb250YWluZXIsIGV2ZW50LCBkLCBpZGVudGlmaWVyLCB0b3VjaCkge1xuICAgIHZhciBkaXNwYXRjaCA9IGxpc3RlbmVycy5jb3B5KCksXG4gICAgICAgIHAgPSBwb2ludGVyKHRvdWNoIHx8IGV2ZW50LCBjb250YWluZXIpLCBkeCwgZHksXG4gICAgICAgIHM7XG5cbiAgICBpZiAoKHMgPSBzdWJqZWN0LmNhbGwodGhhdCwgbmV3IERyYWdFdmVudChcImJlZm9yZXN0YXJ0XCIsIHtcbiAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICB0YXJnZXQ6IGRyYWcsXG4gICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgeDogcFswXSxcbiAgICAgICAgeTogcFsxXSxcbiAgICAgICAgZHg6IDAsXG4gICAgICAgIGR5OiAwLFxuICAgICAgICBkaXNwYXRjaFxuICAgICAgfSksIGQpKSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBkeCA9IHMueCAtIHBbMF0gfHwgMDtcbiAgICBkeSA9IHMueSAtIHBbMV0gfHwgMDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBnZXN0dXJlKHR5cGUsIGV2ZW50LCB0b3VjaCkge1xuICAgICAgdmFyIHAwID0gcCwgbjtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwic3RhcnRcIjogZ2VzdHVyZXNbaWRlbnRpZmllcl0gPSBnZXN0dXJlLCBuID0gYWN0aXZlKys7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiZW5kXCI6IGRlbGV0ZSBnZXN0dXJlc1tpZGVudGlmaWVyXSwgLS1hY3RpdmU7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgICAgY2FzZSBcImRyYWdcIjogcCA9IHBvaW50ZXIodG91Y2ggfHwgZXZlbnQsIGNvbnRhaW5lciksIG4gPSBhY3RpdmU7IGJyZWFrO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2guY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhhdCxcbiAgICAgICAgbmV3IERyYWdFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHN1YmplY3Q6IHMsXG4gICAgICAgICAgdGFyZ2V0OiBkcmFnLFxuICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgYWN0aXZlOiBuLFxuICAgICAgICAgIHg6IHBbMF0gKyBkeCxcbiAgICAgICAgICB5OiBwWzFdICsgZHksXG4gICAgICAgICAgZHg6IHBbMF0gLSBwMFswXSxcbiAgICAgICAgICBkeTogcFsxXSAtIHAwWzFdLFxuICAgICAgICAgIGRpc3BhdGNoXG4gICAgICAgIH0pLFxuICAgICAgICBkXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBkcmFnLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGRyYWcpIDogZmlsdGVyO1xuICB9O1xuXG4gIGRyYWcuY29udGFpbmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRhaW5lciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGRyYWcpIDogY29udGFpbmVyO1xuICB9O1xuXG4gIGRyYWcuc3ViamVjdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdWJqZWN0ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgZHJhZykgOiBzdWJqZWN0O1xuICB9O1xuXG4gIGRyYWcudG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgZHJhZykgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgZHJhZy5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBkcmFnIDogdmFsdWU7XG4gIH07XG5cbiAgZHJhZy5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCBkcmFnKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgcmV0dXJuIGRyYWc7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/drag.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/event.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-drag/src/event.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DragEvent)\n/* harmony export */ });\nfunction DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2V2ZW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0Qsa0JBQWtCLHlEQUF5RDtBQUMzRSxjQUFjLHFEQUFxRDtBQUNuRSxhQUFhLG9EQUFvRDtBQUNqRSxpQkFBaUIsd0RBQXdEO0FBQ3pFLGFBQWEsb0RBQW9EO0FBQ2pFLFFBQVEsK0NBQStDO0FBQ3ZELFFBQVEsK0NBQStDO0FBQ3ZELFNBQVMsZ0RBQWdEO0FBQ3pELFNBQVMsZ0RBQWdEO0FBQ3pELFFBQVE7QUFDUixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2V2ZW50LmpzPzE1NmYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHR5cGUsIHtcbiAgc291cmNlRXZlbnQsXG4gIHN1YmplY3QsXG4gIHRhcmdldCxcbiAgaWRlbnRpZmllcixcbiAgYWN0aXZlLFxuICB4LCB5LCBkeCwgZHksXG4gIGRpc3BhdGNoXG59KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICB0eXBlOiB7dmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc291cmNlRXZlbnQ6IHt2YWx1ZTogc291cmNlRXZlbnQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc3ViamVjdDoge3ZhbHVlOiBzdWJqZWN0LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHRhcmdldDoge3ZhbHVlOiB0YXJnZXQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgaWRlbnRpZmllcjoge3ZhbHVlOiBpZGVudGlmaWVyLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIGFjdGl2ZToge3ZhbHVlOiBhY3RpdmUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgeDoge3ZhbHVlOiB4LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHk6IHt2YWx1ZTogeSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBkeDoge3ZhbHVlOiBkeCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBkeToge3ZhbHVlOiBkeSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBfOiB7dmFsdWU6IGRpc3BhdGNofVxuICB9KTtcbn1cblxuRHJhZ0V2ZW50LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSB0aGlzLl8ub24uYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/event.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-drag/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"drag\": () => (/* reexport safe */ _drag_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"dragDisable\": () => (/* reexport safe */ _nodrag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"dragEnable\": () => (/* reexport safe */ _nodrag_js__WEBPACK_IMPORTED_MODULE_1__.yesdrag)\n/* harmony export */ });\n/* harmony import */ var _drag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag.js */ \"../../../node_modules/d3-drag/src/drag.js\");\n/* harmony import */ var _nodrag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodrag.js */ \"../../../node_modules/d3-drag/src/nodrag.js\");\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTBDO0FBQ2dDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9pbmRleC5qcz9iNDk5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBkcmFnfSBmcm9tIFwiLi9kcmFnLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZHJhZ0Rpc2FibGUsIHllc2RyYWcgYXMgZHJhZ0VuYWJsZX0gZnJvbSBcIi4vbm9kcmFnLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/nodrag.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-drag/src/nodrag.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"yesdrag\": () => (/* binding */ yesdrag)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/select.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent.js */ \"../../../node_modules/d3-drag/src/noevent.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(view) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(view).on(\"dragstart.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", _noevent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _noevent_js__WEBPACK_IMPORTED_MODULE_1__.nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZHJhZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9DO0FBQ29COztBQUV4RCw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLGtCQUFrQix3REFBTSw0QkFBNEIsbURBQU8sRUFBRSwwREFBaUI7QUFDOUU7QUFDQSxxQ0FBcUMsbURBQU8sRUFBRSwwREFBaUI7QUFDL0QsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSxrQkFBa0Isd0RBQU07QUFDeEI7QUFDQSwrQkFBK0IsbURBQU8sRUFBRSwwREFBaUI7QUFDekQsNEJBQTRCLG1DQUFtQztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZHJhZy5qcz85ZmFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgbm9ldmVudCwge25vbnBhc3NpdmVjYXB0dXJlfSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZpZXcpIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG5vZXZlbnQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgfSBlbHNlIHtcbiAgICByb290Ll9fbm9zZWxlY3QgPSByb290LnN0eWxlLk1velVzZXJTZWxlY3Q7XG4gICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHllc2RyYWcodmlldywgbm9jbGljaykge1xuICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gIGlmIChub2NsaWNrKSB7XG4gICAgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBudWxsKTsgfSwgMCk7XG4gIH1cbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IHJvb3QuX19ub3NlbGVjdDtcbiAgICBkZWxldGUgcm9vdC5fX25vc2VsZWN0O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/nodrag.js\n"); /***/ }), /***/ "../../../node_modules/d3-drag/src/noevent.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-drag/src/noevent.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"nonpassive\": () => (/* binding */ nonpassive),\n/* harmony export */ \"nonpassivecapture\": () => (/* binding */ nonpassivecapture),\n/* harmony export */ \"nopropagation\": () => (/* binding */ nopropagation)\n/* harmony export */ });\n// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nconst nonpassive = {passive: false};\nconst nonpassivecapture = {capture: true, passive: false};\n\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZXZlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDTyxvQkFBb0I7QUFDcEIsMkJBQTJCOztBQUUzQjtBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2V2ZW50LmpzPzAzMzIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbm9ldmVudCB0byBlbnN1cmUgdGhhdCB3ZSBjYW5cbi8vIHByZXZlbnREZWZhdWx0IG9uIHRoZSBldmVudC5cbmV4cG9ydCBjb25zdCBub25wYXNzaXZlID0ge3Bhc3NpdmU6IGZhbHNlfTtcbmV4cG9ydCBjb25zdCBub25wYXNzaXZlY2FwdHVyZSA9IHtjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZX07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-drag/src/noevent.js\n"); /***/ }), /***/ "../../../node_modules/d3-dsv/src/autoType.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-dsv/src/autoType.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ autoType)\n/* harmony export */ });\nfunction autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvYXV0b1R5cGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvYXV0b1R5cGUuanM/NzFmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvVHlwZShvYmplY3QpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldLnRyaW0oKSwgbnVtYmVyLCBtO1xuICAgIGlmICghdmFsdWUpIHZhbHVlID0gbnVsbDtcbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHZhbHVlID0gdHJ1ZTtcbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB2YWx1ZSA9IGZhbHNlO1xuICAgIGVsc2UgaWYgKHZhbHVlID09PSBcIk5hTlwiKSB2YWx1ZSA9IE5hTjtcbiAgICBlbHNlIGlmICghaXNOYU4obnVtYmVyID0gK3ZhbHVlKSkgdmFsdWUgPSBudW1iZXI7XG4gICAgZWxzZSBpZiAobSA9IHZhbHVlLm1hdGNoKC9eKFstK11cXGR7Mn0pP1xcZHs0fSgtXFxkezJ9KC1cXGR7Mn0pPyk/KFRcXGR7Mn06XFxkezJ9KDpcXGR7Mn0oXFwuXFxkezN9KT8pPyhafFstK11cXGR7Mn06XFxkezJ9KT8pPyQvKSkge1xuICAgICAgaWYgKGZpeHR6ICYmICEhbVs0XSAmJiAhbVs3XSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8tL2csIFwiL1wiKS5yZXBsYWNlKC9ULywgXCIgXCIpO1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgY29udGludWU7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtZHN2L2lzc3Vlcy80NVxuY29uc3QgZml4dHogPSBuZXcgRGF0ZShcIjIwMTktMDEtMDFUMDA6MDBcIikuZ2V0SG91cnMoKSB8fCBuZXcgRGF0ZShcIjIwMTktMDctMDFUMDA6MDBcIikuZ2V0SG91cnMoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dsv/src/autoType.js\n"); /***/ }), /***/ "../../../node_modules/d3-dsv/src/csv.js": /*!***********************************************!*\ !*** ../../../node_modules/d3-dsv/src/csv.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"csvFormat\": () => (/* binding */ csvFormat),\n/* harmony export */ \"csvFormatBody\": () => (/* binding */ csvFormatBody),\n/* harmony export */ \"csvFormatRow\": () => (/* binding */ csvFormatRow),\n/* harmony export */ \"csvFormatRows\": () => (/* binding */ csvFormatRows),\n/* harmony export */ \"csvFormatValue\": () => (/* binding */ csvFormatValue),\n/* harmony export */ \"csvParse\": () => (/* binding */ csvParse),\n/* harmony export */ \"csvParseRows\": () => (/* binding */ csvParseRows)\n/* harmony export */ });\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ \"../../../node_modules/d3-dsv/src/dsv.js\");\n\n\nvar csv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\",\");\n\nvar csvParse = csv.parse;\nvar csvParseRows = csv.parseRows;\nvar csvFormat = csv.format;\nvar csvFormatBody = csv.formatBody;\nvar csvFormatRows = csv.formatRows;\nvar csvFormatRow = csv.formatRow;\nvar csvFormatValue = csv.formatValue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvY3N2LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTJCOztBQUUzQixVQUFVLG1EQUFHOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2Nzdi5qcz8zYjY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2LmpzXCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRCb2R5ID0gY3N2LmZvcm1hdEJvZHk7XG5leHBvcnQgdmFyIGNzdkZvcm1hdFJvd3MgPSBjc3YuZm9ybWF0Um93cztcbmV4cG9ydCB2YXIgY3N2Rm9ybWF0Um93ID0gY3N2LmZvcm1hdFJvdztcbmV4cG9ydCB2YXIgY3N2Rm9ybWF0VmFsdWUgPSBjc3YuZm9ybWF0VmFsdWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dsv/src/csv.js\n"); /***/ }), /***/ "../../../node_modules/d3-dsv/src/dsv.js": /*!***********************************************!*\ !*** ../../../node_modules/d3-dsv/src/dsv.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvZHN2LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxZQUFZO0FBQ1osWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLEdBQUcsZ0JBQWdCO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFlBQVk7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsWUFBWTtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanM/YWQ3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgRU9MID0ge30sXG4gICAgRU9GID0ge30sXG4gICAgUVVPVEUgPSAzNCxcbiAgICBORVdMSU5FID0gMTAsXG4gICAgUkVUVVJOID0gMTM7XG5cbmZ1bmN0aW9uIG9iamVjdENvbnZlcnRlcihjb2x1bW5zKSB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oXCJkXCIsIFwicmV0dXJuIHtcIiArIGNvbHVtbnMubWFwKGZ1bmN0aW9uKG5hbWUsIGkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobmFtZSkgKyBcIjogZFtcIiArIGkgKyBcIl0gfHwgXFxcIlxcXCJcIjtcbiAgfSkuam9pbihcIixcIikgKyBcIn1cIik7XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUNvbnZlcnRlcihjb2x1bW5zLCBmKSB7XG4gIHZhciBvYmplY3QgPSBvYmplY3RDb252ZXJ0ZXIoY29sdW1ucyk7XG4gIHJldHVybiBmdW5jdGlvbihyb3csIGkpIHtcbiAgICByZXR1cm4gZihvYmplY3Qocm93KSwgaSwgY29sdW1ucyk7XG4gIH07XG59XG5cbi8vIENvbXB1dGUgdW5pcXVlIGNvbHVtbnMgaW4gb3JkZXIgb2YgZGlzY292ZXJ5LlxuZnVuY3Rpb24gaW5mZXJDb2x1bW5zKHJvd3MpIHtcbiAgdmFyIGNvbHVtblNldCA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBjb2x1bW5zID0gW107XG5cbiAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdykge1xuICAgIGZvciAodmFyIGNvbHVtbiBpbiByb3cpIHtcbiAgICAgIGlmICghKGNvbHVtbiBpbiBjb2x1bW5TZXQpKSB7XG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW5TZXRbY29sdW1uXSA9IGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29sdW1ucztcbn1cblxuZnVuY3Rpb24gcGFkKHZhbHVlLCB3aWR0aCkge1xuICB2YXIgcyA9IHZhbHVlICsgXCJcIiwgbGVuZ3RoID0gcy5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oMCkgKyBzIDogcztcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyIDwgMCA/IFwiLVwiICsgcGFkKC15ZWFyLCA2KVxuICAgIDogeWVhciA+IDk5OTkgPyBcIitcIiArIHBhZCh5ZWFyLCA2KVxuICAgIDogcGFkKHllYXIsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpLFxuICAgICAgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgICAgc2Vjb25kcyA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gXCJJbnZhbGlkIERhdGVcIlxuICAgICAgOiBmb3JtYXRZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgNCkgKyBcIi1cIiArIHBhZChkYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSArIFwiLVwiICsgcGFkKGRhdGUuZ2V0VVRDRGF0ZSgpLCAyKVxuICAgICAgKyAobWlsbGlzZWNvbmRzID8gXCJUXCIgKyBwYWQoaG91cnMsIDIpICsgXCI6XCIgKyBwYWQobWludXRlcywgMikgKyBcIjpcIiArIHBhZChzZWNvbmRzLCAyKSArIFwiLlwiICsgcGFkKG1pbGxpc2Vjb25kcywgMykgKyBcIlpcIlxuICAgICAgOiBzZWNvbmRzID8gXCJUXCIgKyBwYWQoaG91cnMsIDIpICsgXCI6XCIgKyBwYWQobWludXRlcywgMikgKyBcIjpcIiArIHBhZChzZWNvbmRzLCAyKSArIFwiWlwiXG4gICAgICA6IG1pbnV0ZXMgfHwgaG91cnMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiWlwiXG4gICAgICA6IFwiXCIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWxpbWl0ZXIpIHtcbiAgdmFyIHJlRm9ybWF0ID0gbmV3IFJlZ0V4cChcIltcXFwiXCIgKyBkZWxpbWl0ZXIgKyBcIlxcblxccl1cIiksXG4gICAgICBERUxJTUlURVIgPSBkZWxpbWl0ZXIuY2hhckNvZGVBdCgwKTtcblxuICBmdW5jdGlvbiBwYXJzZSh0ZXh0LCBmKSB7XG4gICAgdmFyIGNvbnZlcnQsIGNvbHVtbnMsIHJvd3MgPSBwYXJzZVJvd3ModGV4dCwgZnVuY3Rpb24ocm93LCBpKSB7XG4gICAgICBpZiAoY29udmVydCkgcmV0dXJuIGNvbnZlcnQocm93LCBpIC0gMSk7XG4gICAgICBjb2x1bW5zID0gcm93LCBjb252ZXJ0ID0gZiA/IGN1c3RvbUNvbnZlcnRlcihyb3csIGYpIDogb2JqZWN0Q29udmVydGVyKHJvdyk7XG4gICAgfSk7XG4gICAgcm93cy5jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93cyh0ZXh0LCBmKSB7XG4gICAgdmFyIHJvd3MgPSBbXSwgLy8gb3V0cHV0IHJvd3NcbiAgICAgICAgTiA9IHRleHQubGVuZ3RoLFxuICAgICAgICBJID0gMCwgLy8gY3VycmVudCBjaGFyYWN0ZXIgaW5kZXhcbiAgICAgICAgbiA9IDAsIC8vIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgICAgdCwgLy8gY3VycmVudCB0b2tlblxuICAgICAgICBlb2YgPSBOIDw9IDAsIC8vIGN1cnJlbnQgdG9rZW4gZm9sbG93ZWQgYnkgRU9GP1xuICAgICAgICBlb2wgPSBmYWxzZTsgLy8gY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0w/XG5cbiAgICAvLyBTdHJpcCB0aGUgdHJhaWxpbmcgbmV3bGluZS5cbiAgICBpZiAodGV4dC5jaGFyQ29kZUF0KE4gLSAxKSA9PT0gTkVXTElORSkgLS1OO1xuICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoTiAtIDEpID09PSBSRVRVUk4pIC0tTjtcblxuICAgIGZ1bmN0aW9uIHRva2VuKCkge1xuICAgICAgaWYgKGVvZikgcmV0dXJuIEVPRjtcbiAgICAgIGlmIChlb2wpIHJldHVybiBlb2wgPSBmYWxzZSwgRU9MO1xuXG4gICAgICAvLyBVbmVzY2FwZSBxdW90ZXMuXG4gICAgICB2YXIgaSwgaiA9IEksIGM7XG4gICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGopID09PSBRVU9URSkge1xuICAgICAgICB3aGlsZSAoSSsrIDwgTiAmJiB0ZXh0LmNoYXJDb2RlQXQoSSkgIT09IFFVT1RFIHx8IHRleHQuY2hhckNvZGVBdCgrK0kpID09PSBRVU9URSk7XG4gICAgICAgIGlmICgoaSA9IEkpID49IE4pIGVvZiA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKChjID0gdGV4dC5jaGFyQ29kZUF0KEkrKykpID09PSBORVdMSU5FKSBlb2wgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjID09PSBSRVRVUk4pIHsgZW9sID0gdHJ1ZTsgaWYgKHRleHQuY2hhckNvZGVBdChJKSA9PT0gTkVXTElORSkgKytJOyB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGogKyAxLCBpIC0gMSkucmVwbGFjZSgvXCJcIi9nLCBcIlxcXCJcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgbmV4dCBkZWxpbWl0ZXIgb3IgbmV3bGluZS5cbiAgICAgIHdoaWxlIChJIDwgTikge1xuICAgICAgICBpZiAoKGMgPSB0ZXh0LmNoYXJDb2RlQXQoaSA9IEkrKykpID09PSBORVdMSU5FKSBlb2wgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjID09PSBSRVRVUk4pIHsgZW9sID0gdHJ1ZTsgaWYgKHRleHQuY2hhckNvZGVBdChJKSA9PT0gTkVXTElORSkgKytJOyB9XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IERFTElNSVRFUikgY29udGludWU7XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGosIGkpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXR1cm4gbGFzdCB0b2tlbiBiZWZvcmUgRU9GLlxuICAgICAgcmV0dXJuIGVvZiA9IHRydWUsIHRleHQuc2xpY2UoaiwgTik7XG4gICAgfVxuXG4gICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkgIT09IEVPRikge1xuICAgICAgdmFyIHJvdyA9IFtdO1xuICAgICAgd2hpbGUgKHQgIT09IEVPTCAmJiB0ICE9PSBFT0YpIHJvdy5wdXNoKHQpLCB0ID0gdG9rZW4oKTtcbiAgICAgIGlmIChmICYmIChyb3cgPSBmKHJvdywgbisrKSkgPT0gbnVsbCkgY29udGludWU7XG4gICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWZvcm1hdEJvZHkocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiByb3dzLm1hcChmdW5jdGlvbihyb3cpIHtcbiAgICAgIHJldHVybiBjb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHJvd1tjb2x1bW5dKTtcbiAgICAgIH0pLmpvaW4oZGVsaW1pdGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdChyb3dzLCBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbHVtbnMgPT0gbnVsbCkgY29sdW1ucyA9IGluZmVyQ29sdW1ucyhyb3dzKTtcbiAgICByZXR1cm4gW2NvbHVtbnMubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcildLmNvbmNhdChwcmVmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbHVtbnMgPT0gbnVsbCkgY29sdW1ucyA9IGluZmVyQ29sdW1ucyhyb3dzKTtcbiAgICByZXR1cm4gcHJlZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93cyhyb3dzKSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZvcm1hdFJvdykuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFJvdyhyb3cpIHtcbiAgICByZXR1cm4gcm93Lm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCJcbiAgICAgICAgOiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBmb3JtYXREYXRlKHZhbHVlKVxuICAgICAgICA6IHJlRm9ybWF0LnRlc3QodmFsdWUgKz0gXCJcIikgPyBcIlxcXCJcIiArIHZhbHVlLnJlcGxhY2UoL1wiL2csIFwiXFxcIlxcXCJcIikgKyBcIlxcXCJcIlxuICAgICAgICA6IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgcGFyc2VSb3dzOiBwYXJzZVJvd3MsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZm9ybWF0Qm9keTogZm9ybWF0Qm9keSxcbiAgICBmb3JtYXRSb3dzOiBmb3JtYXRSb3dzLFxuICAgIGZvcm1hdFJvdzogZm9ybWF0Um93LFxuICAgIGZvcm1hdFZhbHVlOiBmb3JtYXRWYWx1ZVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dsv/src/dsv.js\n"); /***/ }), /***/ "../../../node_modules/d3-dsv/src/index.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-dsv/src/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"autoType\": () => (/* reexport safe */ _autoType_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"csvFormat\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormat),\n/* harmony export */ \"csvFormatBody\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatBody),\n/* harmony export */ \"csvFormatRow\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatRow),\n/* harmony export */ \"csvFormatRows\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatRows),\n/* harmony export */ \"csvFormatValue\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatValue),\n/* harmony export */ \"csvParse\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvParse),\n/* harmony export */ \"csvParseRows\": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvParseRows),\n/* harmony export */ \"dsvFormat\": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"tsvFormat\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormat),\n/* harmony export */ \"tsvFormatBody\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatBody),\n/* harmony export */ \"tsvFormatRow\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatRow),\n/* harmony export */ \"tsvFormatRows\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatRows),\n/* harmony export */ \"tsvFormatValue\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatValue),\n/* harmony export */ \"tsvParse\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvParse),\n/* harmony export */ \"tsvParseRows\": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvParseRows)\n/* harmony export */ });\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ \"../../../node_modules/d3-dsv/src/dsv.js\");\n/* harmony import */ var _csv_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./csv.js */ \"../../../node_modules/d3-dsv/src/csv.js\");\n/* harmony import */ var _tsv_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tsv.js */ \"../../../node_modules/d3-dsv/src/tsv.js\");\n/* harmony import */ var _autoType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./autoType.js */ \"../../../node_modules/d3-dsv/src/autoType.js\");\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDeUU7QUFDQTtBQUNyRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9pbmRleC5qcz8wZjFhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBkc3ZGb3JtYXR9IGZyb20gXCIuL2Rzdi5qc1wiO1xuZXhwb3J0IHtjc3ZQYXJzZSwgY3N2UGFyc2VSb3dzLCBjc3ZGb3JtYXQsIGNzdkZvcm1hdEJvZHksIGNzdkZvcm1hdFJvd3MsIGNzdkZvcm1hdFJvdywgY3N2Rm9ybWF0VmFsdWV9IGZyb20gXCIuL2Nzdi5qc1wiO1xuZXhwb3J0IHt0c3ZQYXJzZSwgdHN2UGFyc2VSb3dzLCB0c3ZGb3JtYXQsIHRzdkZvcm1hdEJvZHksIHRzdkZvcm1hdFJvd3MsIHRzdkZvcm1hdFJvdywgdHN2Rm9ybWF0VmFsdWV9IGZyb20gXCIuL3Rzdi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGF1dG9UeXBlfSBmcm9tIFwiLi9hdXRvVHlwZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dsv/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-dsv/src/tsv.js": /*!***********************************************!*\ !*** ../../../node_modules/d3-dsv/src/tsv.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"tsvFormat\": () => (/* binding */ tsvFormat),\n/* harmony export */ \"tsvFormatBody\": () => (/* binding */ tsvFormatBody),\n/* harmony export */ \"tsvFormatRow\": () => (/* binding */ tsvFormatRow),\n/* harmony export */ \"tsvFormatRows\": () => (/* binding */ tsvFormatRows),\n/* harmony export */ \"tsvFormatValue\": () => (/* binding */ tsvFormatValue),\n/* harmony export */ \"tsvParse\": () => (/* binding */ tsvParse),\n/* harmony export */ \"tsvParseRows\": () => (/* binding */ tsvParseRows)\n/* harmony export */ });\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ \"../../../node_modules/d3-dsv/src/dsv.js\");\n\n\nvar tsv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"\\t\");\n\nvar tsvParse = tsv.parse;\nvar tsvParseRows = tsv.parseRows;\nvar tsvFormat = tsv.format;\nvar tsvFormatBody = tsv.formatBody;\nvar tsvFormatRows = tsv.formatRows;\nvar tsvFormatRow = tsv.formatRow;\nvar tsvFormatValue = tsv.formatValue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvdHN2LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTJCOztBQUUzQixVQUFVLG1EQUFHOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL3Rzdi5qcz9kNmFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2LmpzXCI7XG5cbnZhciB0c3YgPSBkc3YoXCJcXHRcIik7XG5cbmV4cG9ydCB2YXIgdHN2UGFyc2UgPSB0c3YucGFyc2U7XG5leHBvcnQgdmFyIHRzdlBhcnNlUm93cyA9IHRzdi5wYXJzZVJvd3M7XG5leHBvcnQgdmFyIHRzdkZvcm1hdCA9IHRzdi5mb3JtYXQ7XG5leHBvcnQgdmFyIHRzdkZvcm1hdEJvZHkgPSB0c3YuZm9ybWF0Qm9keTtcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0Um93cyA9IHRzdi5mb3JtYXRSb3dzO1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3cgPSB0c3YuZm9ybWF0Um93O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRWYWx1ZSA9IHRzdi5mb3JtYXRWYWx1ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-dsv/src/tsv.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/back.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-ease/src/back.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"backIn\": () => (/* binding */ backIn),\n/* harmony export */ \"backInOut\": () => (/* binding */ backInOut),\n/* harmony export */ \"backOut\": () => (/* binding */ backOut)\n/* harmony export */ });\nvar overshoot = 1.70158;\n\nvar backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nvar backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nvar backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2JhY2suanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2JhY2suanM/YTgyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgb3ZlcnNob290ID0gMS43MDE1ODtcblxuZXhwb3J0IHZhciBiYWNrSW4gPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbih0KSB7XG4gICAgcmV0dXJuICh0ID0gK3QpICogdCAqIChzICogKHQgLSAxKSArIHQpO1xuICB9XG5cbiAgYmFja0luLm92ZXJzaG9vdCA9IGN1c3RvbTtcblxuICByZXR1cm4gYmFja0luO1xufSkob3ZlcnNob290KTtcblxuZXhwb3J0IHZhciBiYWNrT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShzKSB7XG4gIHMgPSArcztcblxuICBmdW5jdGlvbiBiYWNrT3V0KHQpIHtcbiAgICByZXR1cm4gLS10ICogdCAqICgodCArIDEpICogcyArIHQpICsgMTtcbiAgfVxuXG4gIGJhY2tPdXQub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrT3V0O1xufSkob3ZlcnNob290KTtcblxuZXhwb3J0IHZhciBiYWNrSW5PdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbk91dCh0KSB7XG4gICAgcmV0dXJuICgodCAqPSAyKSA8IDEgPyB0ICogdCAqICgocyArIDEpICogdCAtIHMpIDogKHQgLT0gMikgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAyKSAvIDI7XG4gIH1cblxuICBiYWNrSW5PdXQub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW5PdXQ7XG59KShvdmVyc2hvb3QpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/back.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/bounce.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-ease/src/bounce.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"bounceIn\": () => (/* binding */ bounceIn),\n/* harmony export */ \"bounceInOut\": () => (/* binding */ bounceInOut),\n/* harmony export */ \"bounceOut\": () => (/* binding */ bounceOut)\n/* harmony export */ });\nvar b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2JvdW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvYm91bmNlLmpzPzU3ZTAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGIxID0gNCAvIDExLFxuICAgIGIyID0gNiAvIDExLFxuICAgIGIzID0gOCAvIDExLFxuICAgIGI0ID0gMyAvIDQsXG4gICAgYjUgPSA5IC8gMTEsXG4gICAgYjYgPSAxMCAvIDExLFxuICAgIGI3ID0gMTUgLyAxNixcbiAgICBiOCA9IDIxIC8gMjIsXG4gICAgYjkgPSA2MyAvIDY0LFxuICAgIGIwID0gMSAvIGIxIC8gYjE7XG5cbmV4cG9ydCBmdW5jdGlvbiBib3VuY2VJbih0KSB7XG4gIHJldHVybiAxIC0gYm91bmNlT3V0KDEgLSB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZU91dCh0KSB7XG4gIHJldHVybiAodCA9ICt0KSA8IGIxID8gYjAgKiB0ICogdCA6IHQgPCBiMyA/IGIwICogKHQgLT0gYjIpICogdCArIGI0IDogdCA8IGI2ID8gYjAgKiAodCAtPSBiNSkgKiB0ICsgYjcgOiBiMCAqICh0IC09IGI4KSAqIHQgKyBiOTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZUluT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gMSAtIGJvdW5jZU91dCgxIC0gdCkgOiBib3VuY2VPdXQodCAtIDEpICsgMSkgLyAyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/bounce.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/circle.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-ease/src/circle.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"circleIn\": () => (/* binding */ circleIn),\n/* harmony export */ \"circleInOut\": () => (/* binding */ circleInOut),\n/* harmony export */ \"circleOut\": () => (/* binding */ circleOut)\n/* harmony export */ });\nfunction circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2NpcmNsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY2lyY2xlLmpzPzhiOTgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZUluKHQpIHtcbiAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZU91dCh0KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoMSAtIC0tdCAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyAxIC0gTWF0aC5zcXJ0KDEgLSB0ICogdCkgOiBNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKSAvIDI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/circle.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/cubic.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-ease/src/cubic.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cubicIn\": () => (/* binding */ cubicIn),\n/* harmony export */ \"cubicInOut\": () => (/* binding */ cubicInOut),\n/* harmony export */ \"cubicOut\": () => (/* binding */ cubicOut)\n/* harmony export */ });\nfunction cubicIn(t) {\n return t * t * t;\n}\n\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcz9kZmNlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/cubic.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/elastic.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-ease/src/elastic.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"elasticIn\": () => (/* binding */ elasticIn),\n/* harmony export */ \"elasticInOut\": () => (/* binding */ elasticInOut),\n/* harmony export */ \"elasticOut\": () => (/* binding */ elasticOut)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-ease/src/math.js\");\n\n\nvar tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nvar elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(-(--t)) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nvar elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nvar elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(-t) * Math.sin((s - t) / p)\n : 2 - a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUErQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQSxlQUFlLDhDQUFJO0FBQ25COztBQUVBLHNDQUFzQztBQUN0QyxtQ0FBbUM7O0FBRW5DO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0EsbUJBQW1CLDhDQUFJO0FBQ3ZCOztBQUVBLHVDQUF1QztBQUN2QyxvQ0FBb0M7O0FBRXBDO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0E7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCLGtCQUFrQiw4Q0FBSTtBQUN0Qjs7QUFFQSx5Q0FBeUM7QUFDekMsc0NBQXNDOztBQUV0QztBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanM/NDVmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RwbXR9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIHRhdSA9IDIgKiBNYXRoLlBJLFxuICAgIGFtcGxpdHVkZSA9IDEsXG4gICAgcGVyaW9kID0gMC4zO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbiA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW4odCkge1xuICAgIHJldHVybiBhICogdHBtdCgtKC0tdCkpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY0luLmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luLnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luO1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY091dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBhICogdHBtdCh0ID0gK3QpICogTWF0aC5zaW4oKHQgKyBzKSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY091dC5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNPdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgPSB0ICogMiAtIDEpIDwgMFxuICAgICAgICA/IGEgKiB0cG10KC10KSAqIE1hdGguc2luKChzIC0gdCkgLyBwKVxuICAgICAgICA6IDIgLSBhICogdHBtdCh0KSAqIE1hdGguc2luKChzICsgdCkgLyBwKSkgLyAyO1xuICB9XG5cbiAgZWxhc3RpY0luT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luT3V0LnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/elastic.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/exp.js": /*!************************************************!*\ !*** ../../../node_modules/d3-ease/src/exp.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"expIn\": () => (/* binding */ expIn),\n/* harmony export */ \"expInOut\": () => (/* binding */ expInOut),\n/* harmony export */ \"expOut\": () => (/* binding */ expOut)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-ease/src/math.js\");\n\n\nfunction expIn(t) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(1 - +t);\n}\n\nfunction expOut(t) {\n return 1 - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t);\n}\n\nfunction expInOut(t) {\n return ((t *= 2) <= 1 ? (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(1 - t) : 2 - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t - 1)) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2V4cC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStCOztBQUV4QjtBQUNQLFNBQVMsOENBQUk7QUFDYjs7QUFFTztBQUNQLGFBQWEsOENBQUk7QUFDakI7O0FBRU87QUFDUCwwQkFBMEIsOENBQUksY0FBYyw4Q0FBSTtBQUNoRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvZXhwLmpzPzZlOWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0cG10fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBJbih0KSB7XG4gIHJldHVybiB0cG10KDEgLSArdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBPdXQodCkge1xuICByZXR1cm4gMSAtIHRwbXQodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHRwbXQoMSAtIHQpIDogMiAtIHRwbXQodCAtIDEpKSAvIDI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/exp.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-ease/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"easeBack\": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backInOut),\n/* harmony export */ \"easeBackIn\": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backIn),\n/* harmony export */ \"easeBackInOut\": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backInOut),\n/* harmony export */ \"easeBackOut\": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backOut),\n/* harmony export */ \"easeBounce\": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceOut),\n/* harmony export */ \"easeBounceIn\": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceIn),\n/* harmony export */ \"easeBounceInOut\": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceInOut),\n/* harmony export */ \"easeBounceOut\": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceOut),\n/* harmony export */ \"easeCircle\": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleInOut),\n/* harmony export */ \"easeCircleIn\": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleIn),\n/* harmony export */ \"easeCircleInOut\": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleInOut),\n/* harmony export */ \"easeCircleOut\": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleOut),\n/* harmony export */ \"easeCubic\": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicInOut),\n/* harmony export */ \"easeCubicIn\": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicIn),\n/* harmony export */ \"easeCubicInOut\": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicInOut),\n/* harmony export */ \"easeCubicOut\": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicOut),\n/* harmony export */ \"easeElastic\": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticOut),\n/* harmony export */ \"easeElasticIn\": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticIn),\n/* harmony export */ \"easeElasticInOut\": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticInOut),\n/* harmony export */ \"easeElasticOut\": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticOut),\n/* harmony export */ \"easeExp\": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expInOut),\n/* harmony export */ \"easeExpIn\": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expIn),\n/* harmony export */ \"easeExpInOut\": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expInOut),\n/* harmony export */ \"easeExpOut\": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expOut),\n/* harmony export */ \"easeLinear\": () => (/* reexport safe */ _linear_js__WEBPACK_IMPORTED_MODULE_0__.linear),\n/* harmony export */ \"easePoly\": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyInOut),\n/* harmony export */ \"easePolyIn\": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyIn),\n/* harmony export */ \"easePolyInOut\": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyInOut),\n/* harmony export */ \"easePolyOut\": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyOut),\n/* harmony export */ \"easeQuad\": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadInOut),\n/* harmony export */ \"easeQuadIn\": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadIn),\n/* harmony export */ \"easeQuadInOut\": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadInOut),\n/* harmony export */ \"easeQuadOut\": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadOut),\n/* harmony export */ \"easeSin\": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinInOut),\n/* harmony export */ \"easeSinIn\": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinIn),\n/* harmony export */ \"easeSinInOut\": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinInOut),\n/* harmony export */ \"easeSinOut\": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinOut)\n/* harmony export */ });\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-ease/src/linear.js\");\n/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quad.js */ \"../../../node_modules/d3-ease/src/quad.js\");\n/* harmony import */ var _cubic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubic.js */ \"../../../node_modules/d3-ease/src/cubic.js\");\n/* harmony import */ var _poly_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./poly.js */ \"../../../node_modules/d3-ease/src/poly.js\");\n/* harmony import */ var _sin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sin.js */ \"../../../node_modules/d3-ease/src/sin.js\");\n/* harmony import */ var _exp_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exp.js */ \"../../../node_modules/d3-ease/src/exp.js\");\n/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./circle.js */ \"../../../node_modules/d3-ease/src/circle.js\");\n/* harmony import */ var _bounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bounce.js */ \"../../../node_modules/d3-ease/src/bounce.js\");\n/* harmony import */ var _back_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./back.js */ \"../../../node_modules/d3-ease/src/back.js\");\n/* harmony import */ var _elastic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./elastic.js */ \"../../../node_modules/d3-ease/src/elastic.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXFCOztBQU9GOztBQU9DOztBQU9EOztBQU9EOztBQU9BOztBQU9HOztBQU9BOztBQU9GOztBQU9HIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9pbmRleC5qcz9hNDllIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGxpbmVhciBhcyBlYXNlTGluZWFyXG59IGZyb20gXCIuL2xpbmVhci5qc1wiO1xuXG5leHBvcnQge1xuICBxdWFkSW5PdXQgYXMgZWFzZVF1YWQsXG4gIHF1YWRJbiBhcyBlYXNlUXVhZEluLFxuICBxdWFkT3V0IGFzIGVhc2VRdWFkT3V0LFxuICBxdWFkSW5PdXQgYXMgZWFzZVF1YWRJbk91dFxufSBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGN1YmljSW5PdXQgYXMgZWFzZUN1YmljLFxuICBjdWJpY0luIGFzIGVhc2VDdWJpY0luLFxuICBjdWJpY091dCBhcyBlYXNlQ3ViaWNPdXQsXG4gIGN1YmljSW5PdXQgYXMgZWFzZUN1YmljSW5PdXRcbn0gZnJvbSBcIi4vY3ViaWMuanNcIjtcblxuZXhwb3J0IHtcbiAgcG9seUluT3V0IGFzIGVhc2VQb2x5LFxuICBwb2x5SW4gYXMgZWFzZVBvbHlJbixcbiAgcG9seU91dCBhcyBlYXNlUG9seU91dCxcbiAgcG9seUluT3V0IGFzIGVhc2VQb2x5SW5PdXRcbn0gZnJvbSBcIi4vcG9seS5qc1wiO1xuXG5leHBvcnQge1xuICBzaW5Jbk91dCBhcyBlYXNlU2luLFxuICBzaW5JbiBhcyBlYXNlU2luSW4sXG4gIHNpbk91dCBhcyBlYXNlU2luT3V0LFxuICBzaW5Jbk91dCBhcyBlYXNlU2luSW5PdXRcbn0gZnJvbSBcIi4vc2luLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGV4cEluT3V0IGFzIGVhc2VFeHAsXG4gIGV4cEluIGFzIGVhc2VFeHBJbixcbiAgZXhwT3V0IGFzIGVhc2VFeHBPdXQsXG4gIGV4cEluT3V0IGFzIGVhc2VFeHBJbk91dFxufSBmcm9tIFwiLi9leHAuanNcIjtcblxuZXhwb3J0IHtcbiAgY2lyY2xlSW5PdXQgYXMgZWFzZUNpcmNsZSxcbiAgY2lyY2xlSW4gYXMgZWFzZUNpcmNsZUluLFxuICBjaXJjbGVPdXQgYXMgZWFzZUNpcmNsZU91dCxcbiAgY2lyY2xlSW5PdXQgYXMgZWFzZUNpcmNsZUluT3V0XG59IGZyb20gXCIuL2NpcmNsZS5qc1wiO1xuXG5leHBvcnQge1xuICBib3VuY2VPdXQgYXMgZWFzZUJvdW5jZSxcbiAgYm91bmNlSW4gYXMgZWFzZUJvdW5jZUluLFxuICBib3VuY2VPdXQgYXMgZWFzZUJvdW5jZU91dCxcbiAgYm91bmNlSW5PdXQgYXMgZWFzZUJvdW5jZUluT3V0XG59IGZyb20gXCIuL2JvdW5jZS5qc1wiO1xuXG5leHBvcnQge1xuICBiYWNrSW5PdXQgYXMgZWFzZUJhY2ssXG4gIGJhY2tJbiBhcyBlYXNlQmFja0luLFxuICBiYWNrT3V0IGFzIGVhc2VCYWNrT3V0LFxuICBiYWNrSW5PdXQgYXMgZWFzZUJhY2tJbk91dFxufSBmcm9tIFwiLi9iYWNrLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGVsYXN0aWNPdXQgYXMgZWFzZUVsYXN0aWMsXG4gIGVsYXN0aWNJbiBhcyBlYXNlRWxhc3RpY0luLFxuICBlbGFzdGljT3V0IGFzIGVhc2VFbGFzdGljT3V0LFxuICBlbGFzdGljSW5PdXQgYXMgZWFzZUVsYXN0aWNJbk91dFxufSBmcm9tIFwiLi9lbGFzdGljLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/linear.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-ease/src/linear.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"linear\": () => (/* binding */ linear)\n/* harmony export */ });\nconst linear = t => +t;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2xpbmVhci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2xpbmVhci5qcz82ZTI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBsaW5lYXIgPSB0ID0+ICt0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/linear.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/math.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-ease/src/math.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"tpmt\": () => (/* binding */ tpmt)\n/* harmony export */ });\n// tpmt is two power minus ten times t scaled to [0,1]\nfunction tpmt(x) {\n return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL21hdGguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ087QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9tYXRoLmpzPzMzODQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHBtdCBpcyB0d28gcG93ZXIgbWludXMgdGVuIHRpbWVzIHQgc2NhbGVkIHRvIFswLDFdXG5leHBvcnQgZnVuY3Rpb24gdHBtdCh4KSB7XG4gIHJldHVybiAoTWF0aC5wb3coMiwgLTEwICogeCkgLSAwLjAwMDk3NjU2MjUpICogMS4wMDA5Nzc1MTcxMDY1NDk0O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/math.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/poly.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-ease/src/poly.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"polyIn\": () => (/* binding */ polyIn),\n/* harmony export */ \"polyInOut\": () => (/* binding */ polyInOut),\n/* harmony export */ \"polyOut\": () => (/* binding */ polyOut)\n/* harmony export */ });\nvar exponent = 3;\n\nvar polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nvar polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nvar polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3BvbHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3BvbHkuanM/ZTlhNiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZXhwb25lbnQgPSAzO1xuXG5leHBvcnQgdmFyIHBvbHlJbiA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3codCwgZSk7XG4gIH1cblxuICBwb2x5SW4uZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlJbjtcbn0pKGV4cG9uZW50KTtcblxuZXhwb3J0IHZhciBwb2x5T3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5T3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCBlKTtcbiAgfVxuXG4gIHBvbHlPdXQuZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlPdXQ7XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seUluT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5SW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KHQsIGUpIDogMiAtIE1hdGgucG93KDIgLSB0LCBlKSkgLyAyO1xuICB9XG5cbiAgcG9seUluT3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW5PdXQ7XG59KShleHBvbmVudCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/poly.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/quad.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-ease/src/quad.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"quadIn\": () => (/* binding */ quadIn),\n/* harmony export */ \"quadInOut\": () => (/* binding */ quadInOut),\n/* harmony export */ \"quadOut\": () => (/* binding */ quadOut)\n/* harmony export */ });\nfunction quadIn(t) {\n return t * t;\n}\n\nfunction quadOut(t) {\n return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3F1YWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3F1YWQuanM/YTdjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcXVhZEluKHQpIHtcbiAgcmV0dXJuIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhZE91dCh0KSB7XG4gIHJldHVybiB0ICogKDIgLSB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YWRJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0IDogLS10ICogKDIgLSB0KSArIDEpIC8gMjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/quad.js\n"); /***/ }), /***/ "../../../node_modules/d3-ease/src/sin.js": /*!************************************************!*\ !*** ../../../node_modules/d3-ease/src/sin.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"sinIn\": () => (/* binding */ sinIn),\n/* harmony export */ \"sinInOut\": () => (/* binding */ sinInOut),\n/* harmony export */ \"sinOut\": () => (/* binding */ sinOut)\n/* harmony export */ });\nvar pi = Math.PI,\n halfPi = pi / 2;\n\nfunction sinIn(t) {\n return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nfunction sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nfunction sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3Npbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9zaW4uanM/MTc4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcGkgPSBNYXRoLlBJLFxuICAgIGhhbGZQaSA9IHBpIC8gMjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluKHQpIHtcbiAgcmV0dXJuICgrdCA9PT0gMSkgPyAxIDogMSAtIE1hdGguY29zKHQgKiBoYWxmUGkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2luT3V0KHQpIHtcbiAgcmV0dXJuIE1hdGguc2luKHQgKiBoYWxmUGkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2luSW5PdXQodCkge1xuICByZXR1cm4gKDEgLSBNYXRoLmNvcyhwaSAqIHQpKSAvIDI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-ease/src/sin.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/blob.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-fetch/src/blob.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9ibG9iLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvYmxvYi5qcz84NDFhIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlc3BvbnNlQmxvYihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlQmxvYik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/blob.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/buffer.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-fetch/src/buffer.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9idWZmZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9idWZmZXIuanM/NWNiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiByZXNwb25zZUFycmF5QnVmZmVyKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlQXJyYXlCdWZmZXIpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/buffer.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/dsv.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-fetch/src/dsv.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"csv\": () => (/* binding */ csv),\n/* harmony export */ \"default\": () => (/* binding */ dsv),\n/* harmony export */ \"tsv\": () => (/* binding */ tsv)\n/* harmony export */ });\n/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-dsv */ \"../../../node_modules/d3-dsv/src/dsv.js\");\n/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-dsv */ \"../../../node_modules/d3-dsv/src/csv.js\");\n/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-dsv */ \"../../../node_modules/d3-dsv/src/tsv.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.js */ \"../../../node_modules/d3-fetch/src/text.js\");\n\n\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return (0,_text_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nfunction dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = (0,d3_dsv__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(delimiter);\n return (0,_text_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nvar csv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_2__.csvParse);\nvar tsv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_3__.tsvParse);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9kc3YuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFxRDtBQUN4Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvREFBSTtBQUNmO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRWU7QUFDZjtBQUNBLGVBQWUsa0RBQVM7QUFDeEIsU0FBUyxvREFBSTtBQUNiO0FBQ0EsR0FBRztBQUNIOztBQUVPLG1CQUFtQiw0Q0FBUTtBQUMzQixtQkFBbUIsNENBQVEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9kc3YuanM/ZjA2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NzdlBhcnNlLCBkc3ZGb3JtYXQsIHRzdlBhcnNlfSBmcm9tIFwiZDMtZHN2XCI7XG5pbXBvcnQgdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5cbmZ1bmN0aW9uIGRzdlBhcnNlKHBhcnNlKSB7XG4gIHJldHVybiBmdW5jdGlvbihpbnB1dCwgaW5pdCwgcm93KSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGluaXQgPT09IFwiZnVuY3Rpb25cIikgcm93ID0gaW5pdCwgaW5pdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGV4dChpbnB1dCwgaW5pdCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHBhcnNlKHJlc3BvbnNlLCByb3cpO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkc3YoZGVsaW1pdGVyLCBpbnB1dCwgaW5pdCwgcm93KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBpbml0ID09PSBcImZ1bmN0aW9uXCIpIHJvdyA9IGluaXQsIGluaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBmb3JtYXQgPSBkc3ZGb3JtYXQoZGVsaW1pdGVyKTtcbiAgcmV0dXJuIHRleHQoaW5wdXQsIGluaXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZm9ybWF0LnBhcnNlKHJlc3BvbnNlLCByb3cpO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBjc3YgPSBkc3ZQYXJzZShjc3ZQYXJzZSk7XG5leHBvcnQgdmFyIHRzdiA9IGRzdlBhcnNlKHRzdlBhcnNlKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/dsv.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/image.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-fetch/src/image.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9pbWFnZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9pbWFnZS5qcz8wYTMzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2U7XG4gICAgZm9yICh2YXIga2V5IGluIGluaXQpIGltYWdlW2tleV0gPSBpbml0W2tleV07XG4gICAgaW1hZ2Uub25lcnJvciA9IHJlamVjdDtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsgcmVzb2x2ZShpbWFnZSk7IH07XG4gICAgaW1hZ2Uuc3JjID0gaW5wdXQ7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/image.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-fetch/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"blob\": () => (/* reexport safe */ _blob_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"buffer\": () => (/* reexport safe */ _buffer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"csv\": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__.csv),\n/* harmony export */ \"dsv\": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"html\": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__.html),\n/* harmony export */ \"image\": () => (/* reexport safe */ _image_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"json\": () => (/* reexport safe */ _json_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"svg\": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__.svg),\n/* harmony export */ \"text\": () => (/* reexport safe */ _text_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"tsv\": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__.tsv),\n/* harmony export */ \"xml\": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _blob_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blob.js */ \"../../../node_modules/d3-fetch/src/blob.js\");\n/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer.js */ \"../../../node_modules/d3-fetch/src/buffer.js\");\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dsv.js */ \"../../../node_modules/d3-fetch/src/dsv.js\");\n/* harmony import */ var _image_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./image.js */ \"../../../node_modules/d3-fetch/src/image.js\");\n/* harmony import */ var _json_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./json.js */ \"../../../node_modules/d3-fetch/src/json.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./text.js */ \"../../../node_modules/d3-fetch/src/text.js\");\n/* harmony import */ var _xml_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./xml.js */ \"../../../node_modules/d3-fetch/src/xml.js\");\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEM7QUFDSTtBQUNJO0FBQ047QUFDRjtBQUNBO0FBQ1MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9pbmRleC5qcz9iZTNiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBibG9ifSBmcm9tIFwiLi9ibG9iLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYnVmZmVyfSBmcm9tIFwiLi9idWZmZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkc3YsIGNzdiwgdHN2fSBmcm9tIFwiLi9kc3YuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbWFnZX0gZnJvbSBcIi4vaW1hZ2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBqc29ufSBmcm9tIFwiLi9qc29uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGV4dH0gZnJvbSBcIi4vdGV4dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHhtbCwgaHRtbCwgc3ZnfSBmcm9tIFwiLi94bWwuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/json.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-fetch/src/json.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) {\n return fetch(input, init).then(responseJson);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzP2E5YTMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcmVzcG9uc2VKc29uKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDUpIHJldHVybjtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlSnNvbik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/json.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/text.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-fetch/src/text.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) {\n return fetch(input, init).then(responseText);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy90ZXh0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvdGV4dC5qcz80ODJlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlc3BvbnNlVGV4dChyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlVGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/text.js\n"); /***/ }), /***/ "../../../node_modules/d3-fetch/src/xml.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-fetch/src/xml.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"html\": () => (/* binding */ html),\n/* harmony export */ \"svg\": () => (/* binding */ svg)\n/* harmony export */ });\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.js */ \"../../../node_modules/d3-fetch/src/text.js\");\n\n\nfunction parser(type) {\n return (input, init) => (0,_text_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parser(\"application/xml\"));\n\nvar html = parser(\"text/html\");\n\nvar svg = parser(\"image/svg+xml\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy94bWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2Qjs7QUFFN0I7QUFDQSwwQkFBMEIsb0RBQUk7QUFDOUI7QUFDQTs7QUFFQSxpRUFBZSx5QkFBeUIsRUFBQzs7QUFFbEM7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy94bWwuanM/YzE2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5cbmZ1bmN0aW9uIHBhcnNlcih0eXBlKSB7XG4gIHJldHVybiAoaW5wdXQsIGluaXQpID0+IHRleHQoaW5wdXQsIGluaXQpXG4gICAgLnRoZW4odGV4dCA9PiAobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHRleHQsIHR5cGUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VyKFwiYXBwbGljYXRpb24veG1sXCIpO1xuXG5leHBvcnQgdmFyIGh0bWwgPSBwYXJzZXIoXCJ0ZXh0L2h0bWxcIik7XG5cbmV4cG9ydCB2YXIgc3ZnID0gcGFyc2VyKFwiaW1hZ2Uvc3ZnK3htbFwiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-fetch/src/xml.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/center.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-force/src/center.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jZW50ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUEsNEVBQTRFLE9BQU87QUFDbkY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY2VudGVyLmpzP2ZmZjciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbm9kZXMsIHN0cmVuZ3RoID0gMTtcblxuICBpZiAoeCA9PSBudWxsKSB4ID0gMDtcbiAgaWYgKHkgPT0gbnVsbCkgeSA9IDA7XG5cbiAgZnVuY3Rpb24gZm9yY2UoKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHN4ID0gMCxcbiAgICAgICAgc3kgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBzeCArPSBub2RlLngsIHN5ICs9IG5vZGUueTtcbiAgICB9XG5cbiAgICBmb3IgKHN4ID0gKHN4IC8gbiAtIHgpICogc3RyZW5ndGgsIHN5ID0gKHN5IC8gbiAtIHkpICogc3RyZW5ndGgsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueCAtPSBzeCwgbm9kZS55IC09IHN5O1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9ICtfLCBmb3JjZSkgOiB4O1xuICB9O1xuXG4gIGZvcmNlLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9ICtfLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gK18sIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/center.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/collide.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-force/src/collide.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-quadtree */ \"../../../node_modules/d3-quadtree/src/quadtree.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n/* harmony import */ var _jiggle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jiggle.js */ \"../../../node_modules/d3-force/src/jiggle.js\");\n\n\n\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = (0,d3_quadtree__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(random), l += x * x;\n if (y === 0) y = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb2xsaWRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUM7QUFDQTtBQUNKOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLHdEQUFROztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixnQkFBZ0I7QUFDcEMsYUFBYSx1REFBUTtBQUNyQixrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHNEQUFNO0FBQ25DLDZCQUE2QixzREFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0Usd0RBQVE7QUFDOUU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbGxpZGUuanM/YTU0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3F1YWR0cmVlfSBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGUuanNcIjtcblxuZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkLnggKyBkLnZ4O1xufVxuXG5mdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGQueSArIGQudnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cykge1xuICB2YXIgbm9kZXMsXG4gICAgICByYWRpaSxcbiAgICAgIHJhbmRvbSxcbiAgICAgIHN0cmVuZ3RoID0gMSxcbiAgICAgIGl0ZXJhdGlvbnMgPSAxO1xuXG4gIGlmICh0eXBlb2YgcmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpIHJhZGl1cyA9IGNvbnN0YW50KHJhZGl1cyA9PSBudWxsID8gMSA6ICtyYWRpdXMpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKCkge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICB0cmVlLFxuICAgICAgICBub2RlLFxuICAgICAgICB4aSxcbiAgICAgICAgeWksXG4gICAgICAgIHJpLFxuICAgICAgICByaTI7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGl0ZXJhdGlvbnM7ICsraykge1xuICAgICAgdHJlZSA9IHF1YWR0cmVlKG5vZGVzLCB4LCB5KS52aXNpdEFmdGVyKHByZXBhcmUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHJpID0gcmFkaWlbbm9kZS5pbmRleF0sIHJpMiA9IHJpICogcmk7XG4gICAgICAgIHhpID0gbm9kZS54ICsgbm9kZS52eDtcbiAgICAgICAgeWkgPSBub2RlLnkgKyBub2RlLnZ5O1xuICAgICAgICB0cmVlLnZpc2l0KGFwcGx5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseShxdWFkLCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgdmFyIGRhdGEgPSBxdWFkLmRhdGEsIHJqID0gcXVhZC5yLCByID0gcmkgKyByajtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmluZGV4ID4gbm9kZS5pbmRleCkge1xuICAgICAgICAgIHZhciB4ID0geGkgLSBkYXRhLnggLSBkYXRhLnZ4LFxuICAgICAgICAgICAgICB5ID0geWkgLSBkYXRhLnkgLSBkYXRhLnZ5LFxuICAgICAgICAgICAgICBsID0geCAqIHggKyB5ICogeTtcbiAgICAgICAgICBpZiAobCA8IHIgKiByKSB7XG4gICAgICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUocmFuZG9tKSwgbCArPSB5ICogeTtcbiAgICAgICAgICAgIGwgPSAociAtIChsID0gTWF0aC5zcXJ0KGwpKSkgLyBsICogc3RyZW5ndGg7XG4gICAgICAgICAgICBub2RlLnZ4ICs9ICh4ICo9IGwpICogKHIgPSAocmogKj0gcmopIC8gKHJpMiArIHJqKSk7XG4gICAgICAgICAgICBub2RlLnZ5ICs9ICh5ICo9IGwpICogcjtcbiAgICAgICAgICAgIGRhdGEudnggLT0geCAqIChyID0gMSAtIHIpO1xuICAgICAgICAgICAgZGF0YS52eSAtPSB5ICogcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHgwID4geGkgKyByIHx8IHgxIDwgeGkgLSByIHx8IHkwID4geWkgKyByIHx8IHkxIDwgeWkgLSByO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUocXVhZCkge1xuICAgIGlmIChxdWFkLmRhdGEpIHJldHVybiBxdWFkLnIgPSByYWRpaVtxdWFkLmRhdGEuaW5kZXhdO1xuICAgIGZvciAodmFyIGkgPSBxdWFkLnIgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICBpZiAocXVhZFtpXSAmJiBxdWFkW2ldLnIgPiBxdWFkLnIpIHtcbiAgICAgICAgcXVhZC5yID0gcXVhZFtpXS5yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlO1xuICAgIHJhZGlpID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgcmFkaWlbbm9kZS5pbmRleF0gPSArcmFkaXVzKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfbm9kZXMsIF9yYW5kb20pIHtcbiAgICBub2RlcyA9IF9ub2RlcztcbiAgICByYW5kb20gPSBfcmFuZG9tO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5pdGVyYXRpb25zID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGl0ZXJhdGlvbnMgPSArXywgZm9yY2UpIDogaXRlcmF0aW9ucztcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9ICtfLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5yYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogcmFkaXVzO1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/collide.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-force/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcz8zY2M4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-force/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"forceCenter\": () => (/* reexport safe */ _center_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"forceCollide\": () => (/* reexport safe */ _collide_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"forceLink\": () => (/* reexport safe */ _link_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"forceManyBody\": () => (/* reexport safe */ _manyBody_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"forceRadial\": () => (/* reexport safe */ _radial_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"forceSimulation\": () => (/* reexport safe */ _simulation_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"forceX\": () => (/* reexport safe */ _x_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"forceY\": () => (/* reexport safe */ _y_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _center_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./center.js */ \"../../../node_modules/d3-force/src/center.js\");\n/* harmony import */ var _collide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./collide.js */ \"../../../node_modules/d3-force/src/collide.js\");\n/* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./link.js */ \"../../../node_modules/d3-force/src/link.js\");\n/* harmony import */ var _manyBody_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manyBody.js */ \"../../../node_modules/d3-force/src/manyBody.js\");\n/* harmony import */ var _radial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./radial.js */ \"../../../node_modules/d3-force/src/radial.js\");\n/* harmony import */ var _simulation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simulation.js */ \"../../../node_modules/d3-force/src/simulation.js\");\n/* harmony import */ var _x_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./x.js */ \"../../../node_modules/d3-force/src/x.js\");\n/* harmony import */ var _y_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./y.js */ \"../../../node_modules/d3-force/src/y.js\");\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0U7QUFDTjtBQUNRO0FBQ0o7QUFDUTtBQUNsQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvaW5kZXguanM/Nzk4MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgZm9yY2VDZW50ZXJ9IGZyb20gXCIuL2NlbnRlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlQ29sbGlkZX0gZnJvbSBcIi4vY29sbGlkZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlTGlua30gZnJvbSBcIi4vbGluay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlTWFueUJvZHl9IGZyb20gXCIuL21hbnlCb2R5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VSYWRpYWx9IGZyb20gXCIuL3JhZGlhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlU2ltdWxhdGlvbn0gZnJvbSBcIi4vc2ltdWxhdGlvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlWH0gZnJvbSBcIi4veC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcmNlWX0gZnJvbSBcIi4veS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/jiggle.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-force/src/jiggle.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(random) {\n return (random() - 0.5) * 1e-6;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanM/Y2ViYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYW5kb20pIHtcbiAgcmV0dXJuIChyYW5kb20oKSAtIDAuNSkgKiAxZS02O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/jiggle.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/lcg.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-force/src/lcg.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9sY2cuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGNnLmpzPzBlNDMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2NvbmdydWVudGlhbF9nZW5lcmF0b3IjUGFyYW1ldGVyc19pbl9jb21tb25fdXNlXG5jb25zdCBhID0gMTY2NDUyNTtcbmNvbnN0IGMgPSAxMDEzOTA0MjIzO1xuY29uc3QgbSA9IDQyOTQ5NjcyOTY7IC8vIDJeMzJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzID0gMTtcbiAgcmV0dXJuICgpID0+IChzID0gKGEgKiBzICsgYykgJSBtKSAvIG07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/lcg.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/link.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-force/src/link.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n/* harmony import */ var _jiggle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle.js */ \"../../../node_modules/d3-force/src/jiggle.js\");\n\n\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(random);\n y = target.y + target.vy - source.y - source.vy || (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9saW5rLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFxQztBQUNKOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0RBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxnQkFBZ0I7QUFDdEQsd0RBQXdELE9BQU87QUFDL0Q7QUFDQSwyREFBMkQsc0RBQU07QUFDakUsMkRBQTJELHNEQUFNO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcz8zN2QwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGUuanNcIjtcblxuZnVuY3Rpb24gaW5kZXgoZCkge1xuICByZXR1cm4gZC5pbmRleDtcbn1cblxuZnVuY3Rpb24gZmluZChub2RlQnlJZCwgbm9kZUlkKSB7XG4gIHZhciBub2RlID0gbm9kZUJ5SWQuZ2V0KG5vZGVJZCk7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKFwibm9kZSBub3QgZm91bmQ6IFwiICsgbm9kZUlkKTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxpbmtzKSB7XG4gIHZhciBpZCA9IGluZGV4LFxuICAgICAgc3RyZW5ndGggPSBkZWZhdWx0U3RyZW5ndGgsXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICBkaXN0YW5jZSA9IGNvbnN0YW50KDMwKSxcbiAgICAgIGRpc3RhbmNlcyxcbiAgICAgIG5vZGVzLFxuICAgICAgY291bnQsXG4gICAgICBiaWFzLFxuICAgICAgcmFuZG9tLFxuICAgICAgaXRlcmF0aW9ucyA9IDE7XG5cbiAgaWYgKGxpbmtzID09IG51bGwpIGxpbmtzID0gW107XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFN0cmVuZ3RoKGxpbmspIHtcbiAgICByZXR1cm4gMSAvIE1hdGgubWluKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSwgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgayA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsaW5rLCBzb3VyY2UsIHRhcmdldCwgeCwgeSwgbCwgYjsgaSA8IG47ICsraSkge1xuICAgICAgICBsaW5rID0gbGlua3NbaV0sIHNvdXJjZSA9IGxpbmsuc291cmNlLCB0YXJnZXQgPSBsaW5rLnRhcmdldDtcbiAgICAgICAgeCA9IHRhcmdldC54ICsgdGFyZ2V0LnZ4IC0gc291cmNlLnggLSBzb3VyY2UudnggfHwgamlnZ2xlKHJhbmRvbSk7XG4gICAgICAgIHkgPSB0YXJnZXQueSArIHRhcmdldC52eSAtIHNvdXJjZS55IC0gc291cmNlLnZ5IHx8IGppZ2dsZShyYW5kb20pO1xuICAgICAgICBsID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICBsID0gKGwgLSBkaXN0YW5jZXNbaV0pIC8gbCAqIGFscGhhICogc3RyZW5ndGhzW2ldO1xuICAgICAgICB4ICo9IGwsIHkgKj0gbDtcbiAgICAgICAgdGFyZ2V0LnZ4IC09IHggKiAoYiA9IGJpYXNbaV0pO1xuICAgICAgICB0YXJnZXQudnkgLT0geSAqIGI7XG4gICAgICAgIHNvdXJjZS52eCArPSB4ICogKGIgPSAxIC0gYik7XG4gICAgICAgIHNvdXJjZS52eSArPSB5ICogYjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIHZhciBpLFxuICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBtID0gbGlua3MubGVuZ3RoLFxuICAgICAgICBub2RlQnlJZCA9IG5ldyBNYXAobm9kZXMubWFwKChkLCBpKSA9PiBbaWQoZCwgaSwgbm9kZXMpLCBkXSkpLFxuICAgICAgICBsaW5rO1xuXG4gICAgZm9yIChpID0gMCwgY291bnQgPSBuZXcgQXJyYXkobik7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgbGluay5pbmRleCA9IGk7XG4gICAgICBpZiAodHlwZW9mIGxpbmsuc291cmNlICE9PSBcIm9iamVjdFwiKSBsaW5rLnNvdXJjZSA9IGZpbmQobm9kZUJ5SWQsIGxpbmsuc291cmNlKTtcbiAgICAgIGlmICh0eXBlb2YgbGluay50YXJnZXQgIT09IFwib2JqZWN0XCIpIGxpbmsudGFyZ2V0ID0gZmluZChub2RlQnlJZCwgbGluay50YXJnZXQpO1xuICAgICAgY291bnRbbGluay5zb3VyY2UuaW5kZXhdID0gKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSB8fCAwKSArIDE7XG4gICAgICBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gPSAoY291bnRbbGluay50YXJnZXQuaW5kZXhdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBiaWFzID0gbmV3IEFycmF5KG0pOyBpIDwgbTsgKytpKSB7XG4gICAgICBsaW5rID0gbGlua3NbaV0sIGJpYXNbaV0gPSBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gLyAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdICsgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgICB9XG5cbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobSksIGluaXRpYWxpemVTdHJlbmd0aCgpO1xuICAgIGRpc3RhbmNlcyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZURpc3RhbmNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplU3RyZW5ndGgoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9ICtzdHJlbmd0aChsaW5rc1tpXSwgaSwgbGlua3MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVEaXN0YW5jZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgZGlzdGFuY2VzW2ldID0gK2Rpc3RhbmNlKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF9ub2RlcywgX3JhbmRvbSkge1xuICAgIG5vZGVzID0gX25vZGVzO1xuICAgIHJhbmRvbSA9IF9yYW5kb207XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLmxpbmtzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxpbmtzID0gXywgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBsaW5rcztcbiAgfTtcblxuICBmb3JjZS5pZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IF8sIGZvcmNlKSA6IGlkO1xuICB9O1xuXG4gIGZvcmNlLml0ZXJhdGlvbnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaXRlcmF0aW9ucyA9ICtfLCBmb3JjZSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVTdHJlbmd0aCgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5kaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkaXN0YW5jZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplRGlzdGFuY2UoKSwgZm9yY2UpIDogZGlzdGFuY2U7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/link.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/manyBody.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-force/src/manyBody.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-quadtree */ \"../../../node_modules/d3-quadtree/src/quadtree.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n/* harmony import */ var _jiggle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jiggle.js */ \"../../../node_modules/d3-force/src/jiggle.js\");\n/* harmony import */ var _simulation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simulation.js */ \"../../../node_modules/d3-force/src/simulation.js\");\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var nodes,\n node,\n random,\n alpha,\n strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = (0,d3_quadtree__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodes, _simulation_js__WEBPACK_IMPORTED_MODULE_2__.x, _simulation_js__WEBPACK_IMPORTED_MODULE_2__.y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(random), l += x * x;\n if (y === 0) y = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(random), l += x * x;\n if (y === 0) y = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9tYW55Qm9keS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFxQztBQUNBO0FBQ0o7QUFDSTs7QUFFckMsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0RBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsdURBQVEsUUFBUSw2Q0FBQyxFQUFFLDZDQUFDO0FBQ3hELDJCQUEyQixPQUFPO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLE9BQU87QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBLHlCQUF5QixzREFBTTtBQUMvQix5QkFBeUIsc0RBQU07QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0EsdUJBQXVCLHNEQUFNO0FBQzdCLHVCQUF1QixzREFBTTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0Usd0RBQVE7QUFDaEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL21hbnlCb2R5LmpzP2ZhODUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlLmpzXCI7XG5pbXBvcnQge3gsIHl9IGZyb20gXCIuL3NpbXVsYXRpb24uanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIG5vZGUsXG4gICAgICByYW5kb20sXG4gICAgICBhbHBoYSxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoLTMwKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlTWluMiA9IDEsXG4gICAgICBkaXN0YW5jZU1heDIgPSBJbmZpbml0eSxcbiAgICAgIHRoZXRhMiA9IDAuODE7XG5cbiAgZnVuY3Rpb24gZm9yY2UoXykge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIoYWNjdW11bGF0ZSk7XG4gICAgZm9yIChhbHBoYSA9IF8sIGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHRyZWUudmlzaXQoYXBwbHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgc3RyZW5ndGhzW25vZGUuaW5kZXhdID0gK3N0cmVuZ3RoKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY3VtdWxhdGUocXVhZCkge1xuICAgIHZhciBzdHJlbmd0aCA9IDAsIHEsIGMsIHdlaWdodCA9IDAsIHgsIHksIGk7XG5cbiAgICAvLyBGb3IgaW50ZXJuYWwgbm9kZXMsIGFjY3VtdWxhdGUgZm9yY2VzIGZyb20gY2hpbGQgcXVhZHJhbnRzLlxuICAgIGlmIChxdWFkLmxlbmd0aCkge1xuICAgICAgZm9yICh4ID0geSA9IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGlmICgocSA9IHF1YWRbaV0pICYmIChjID0gTWF0aC5hYnMocS52YWx1ZSkpKSB7XG4gICAgICAgICAgc3RyZW5ndGggKz0gcS52YWx1ZSwgd2VpZ2h0ICs9IGMsIHggKz0gYyAqIHEueCwgeSArPSBjICogcS55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWFkLnggPSB4IC8gd2VpZ2h0O1xuICAgICAgcXVhZC55ID0geSAvIHdlaWdodDtcbiAgICB9XG5cbiAgICAvLyBGb3IgbGVhZiBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjb2luY2lkZW50IHF1YWRyYW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHEgPSBxdWFkO1xuICAgICAgcS54ID0gcS5kYXRhLng7XG4gICAgICBxLnkgPSBxLmRhdGEueTtcbiAgICAgIGRvIHN0cmVuZ3RoICs9IHN0cmVuZ3Roc1txLmRhdGEuaW5kZXhdO1xuICAgICAgd2hpbGUgKHEgPSBxLm5leHQpO1xuICAgIH1cblxuICAgIHF1YWQudmFsdWUgPSBzdHJlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgxLCBfLCB4Mikge1xuICAgIGlmICghcXVhZC52YWx1ZSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgeCA9IHF1YWQueCAtIG5vZGUueCxcbiAgICAgICAgeSA9IHF1YWQueSAtIG5vZGUueSxcbiAgICAgICAgdyA9IHgyIC0geDEsXG4gICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuXG4gICAgLy8gQXBwbHkgdGhlIEJhcm5lcy1IdXQgYXBwcm94aW1hdGlvbiBpZiBwb3NzaWJsZS5cbiAgICAvLyBMaW1pdCBmb3JjZXMgZm9yIHZlcnkgY2xvc2Ugbm9kZXM7IHJhbmRvbWl6ZSBkaXJlY3Rpb24gaWYgY29pbmNpZGVudC5cbiAgICBpZiAodyAqIHcgLyB0aGV0YTIgPCBsKSB7XG4gICAgICBpZiAobCA8IGRpc3RhbmNlTWF4Mikge1xuICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZShyYW5kb20pLCBsICs9IHkgKiB5O1xuICAgICAgICBpZiAobCA8IGRpc3RhbmNlTWluMikgbCA9IE1hdGguc3FydChkaXN0YW5jZU1pbjIgKiBsKTtcbiAgICAgICAgbm9kZS52eCArPSB4ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgICAgbm9kZS52eSArPSB5ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcHJvY2VzcyBwb2ludHMgZGlyZWN0bHkuXG4gICAgZWxzZSBpZiAocXVhZC5sZW5ndGggfHwgbCA+PSBkaXN0YW5jZU1heDIpIHJldHVybjtcblxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmIChxdWFkLmRhdGEgIT09IG5vZGUgfHwgcXVhZC5uZXh0KSB7XG4gICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUocmFuZG9tKSwgbCArPSB5ICogeTtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgIH1cblxuICAgIGRvIGlmIChxdWFkLmRhdGEgIT09IG5vZGUpIHtcbiAgICAgIHcgPSBzdHJlbmd0aHNbcXVhZC5kYXRhLmluZGV4XSAqIGFscGhhIC8gbDtcbiAgICAgIG5vZGUudnggKz0geCAqIHc7XG4gICAgICBub2RlLnZ5ICs9IHkgKiB3O1xuICAgIH0gd2hpbGUgKHF1YWQgPSBxdWFkLm5leHQpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF9ub2RlcywgX3JhbmRvbSkge1xuICAgIG5vZGVzID0gX25vZGVzO1xuICAgIHJhbmRvbSA9IF9yYW5kb207XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNaW4yID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1pbjIpO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlTWF4ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlTWF4MiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQoZGlzdGFuY2VNYXgyKTtcbiAgfTtcblxuICBmb3JjZS50aGV0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGV0YTIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KHRoZXRhMik7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/manyBody.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/radial.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-force/src/radial.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius, x, y) {\n var nodes,\n strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9yYWRpYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EsaUJBQWlCLHdEQUFRO0FBQ3pCO0FBQ0E7O0FBRUEsNkNBQTZDLHdEQUFRO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBLHNFQUFzRSx3REFBUTtBQUM5RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9yYWRpYWwuanM/YmI1NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFkaXVzLCB4LCB5KSB7XG4gIHZhciBub2RlcyxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHJhZGl1c2VzO1xuXG4gIGlmICh0eXBlb2YgcmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpIHJhZGl1cyA9IGNvbnN0YW50KCtyYWRpdXMpO1xuICBpZiAoeCA9PSBudWxsKSB4ID0gMDtcbiAgaWYgKHkgPT0gbnVsbCkgeSA9IDA7XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXSxcbiAgICAgICAgICBkeCA9IG5vZGUueCAtIHggfHwgMWUtNixcbiAgICAgICAgICBkeSA9IG5vZGUueSAtIHkgfHwgMWUtNixcbiAgICAgICAgICByID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSxcbiAgICAgICAgICBrID0gKHJhZGl1c2VzW2ldIC0gcikgKiBzdHJlbmd0aHNbaV0gKiBhbHBoYSAvIHI7XG4gICAgICBub2RlLnZ4ICs9IGR4ICogaztcbiAgICAgIG5vZGUudnkgKz0gZHkgKiBrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICByYWRpdXNlcyA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICByYWRpdXNlc1tpXSA9ICtyYWRpdXMobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHJhZGl1c2VzW2ldKSA/IDAgOiArc3RyZW5ndGgobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXywgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHJhZGl1cztcbiAgfTtcblxuICBmb3JjZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSArXywgZm9yY2UpIDogeDtcbiAgfTtcblxuICBmb3JjZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSArXywgZm9yY2UpIDogeTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/radial.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/simulation.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-force/src/simulation.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"x\": () => (/* binding */ x),\n/* harmony export */ \"y\": () => (/* binding */ y)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-timer */ \"../../../node_modules/d3-timer/src/timer.js\");\n/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lcg.js */ \"../../../node_modules/d3-force/src/lcg.js\");\n\n\n\n\nfunction x(d) {\n return d.x;\n}\n\nfunction y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = (0,d3_timer__WEBPACK_IMPORTED_MODULE_0__.timer)(step),\n event = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"tick\", \"end\"),\n random = (0,_lcg_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9zaW11bGF0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFxQztBQUNOO0FBQ0o7O0FBRXBCO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrQ0FBSztBQUNyQixjQUFjLHVEQUFRO0FBQ3RCLGVBQWUsbURBQUc7O0FBRWxCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9zaW11bGF0aW9uLmpzP2UzZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyfSBmcm9tIFwiZDMtdGltZXJcIjtcbmltcG9ydCBsY2cgZnJvbSBcIi4vbGNnLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55O1xufVxuXG52YXIgaW5pdGlhbFJhZGl1cyA9IDEwLFxuICAgIGluaXRpYWxBbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGVzKSB7XG4gIHZhciBzaW11bGF0aW9uLFxuICAgICAgYWxwaGEgPSAxLFxuICAgICAgYWxwaGFNaW4gPSAwLjAwMSxcbiAgICAgIGFscGhhRGVjYXkgPSAxIC0gTWF0aC5wb3coYWxwaGFNaW4sIDEgLyAzMDApLFxuICAgICAgYWxwaGFUYXJnZXQgPSAwLFxuICAgICAgdmVsb2NpdHlEZWNheSA9IDAuNixcbiAgICAgIGZvcmNlcyA9IG5ldyBNYXAoKSxcbiAgICAgIHN0ZXBwZXIgPSB0aW1lcihzdGVwKSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ0aWNrXCIsIFwiZW5kXCIpLFxuICAgICAgcmFuZG9tID0gbGNnKCk7XG5cbiAgaWYgKG5vZGVzID09IG51bGwpIG5vZGVzID0gW107XG5cbiAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICB0aWNrKCk7XG4gICAgZXZlbnQuY2FsbChcInRpY2tcIiwgc2ltdWxhdGlvbik7XG4gICAgaWYgKGFscGhhIDwgYWxwaGFNaW4pIHtcbiAgICAgIHN0ZXBwZXIuc3RvcCgpO1xuICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBzaW11bGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGl0ZXJhdGlvbnMpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuICAgIGlmIChpdGVyYXRpb25zID09PSB1bmRlZmluZWQpIGl0ZXJhdGlvbnMgPSAxO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGFscGhhICs9IChhbHBoYVRhcmdldCAtIGFscGhhKSAqIGFscGhhRGVjYXk7XG5cbiAgICAgIGZvcmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgICAgIGZvcmNlKGFscGhhKTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuZnggPT0gbnVsbCkgbm9kZS54ICs9IG5vZGUudnggKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnggPSBub2RlLmZ4LCBub2RlLnZ4ID0gMDtcbiAgICAgICAgaWYgKG5vZGUuZnkgPT0gbnVsbCkgbm9kZS55ICs9IG5vZGUudnkgKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnkgPSBub2RlLmZ5LCBub2RlLnZ5ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2ltdWxhdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLmluZGV4ID0gaTtcbiAgICAgIGlmIChub2RlLmZ4ICE9IG51bGwpIG5vZGUueCA9IG5vZGUuZng7XG4gICAgICBpZiAobm9kZS5meSAhPSBudWxsKSBub2RlLnkgPSBub2RlLmZ5O1xuICAgICAgaWYgKGlzTmFOKG5vZGUueCkgfHwgaXNOYU4obm9kZS55KSkge1xuICAgICAgICB2YXIgcmFkaXVzID0gaW5pdGlhbFJhZGl1cyAqIE1hdGguc3FydCgwLjUgKyBpKSwgYW5nbGUgPSBpICogaW5pdGlhbEFuZ2xlO1xuICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIG5vZGUueSA9IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihub2RlLnZ4KSB8fCBpc05hTihub2RlLnZ5KSkge1xuICAgICAgICBub2RlLnZ4ID0gbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZvcmNlKGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlLmluaXRpYWxpemUpIGZvcmNlLmluaXRpYWxpemUobm9kZXMsIHJhbmRvbSk7XG4gICAgcmV0dXJuIGZvcmNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZU5vZGVzKCk7XG5cbiAgcmV0dXJuIHNpbXVsYXRpb24gPSB7XG4gICAgdGljazogdGljayxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIucmVzdGFydChzdGVwKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5zdG9wKCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIG5vZGVzOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlcyA9IF8sIGluaXRpYWxpemVOb2RlcygpLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IG5vZGVzO1xuICAgIH0sXG5cbiAgICBhbHBoYTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYTtcbiAgICB9LFxuXG4gICAgYWxwaGFNaW46IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhTWluID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFNaW47XG4gICAgfSxcblxuICAgIGFscGhhRGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhRGVjYXkgPSArXywgc2ltdWxhdGlvbikgOiArYWxwaGFEZWNheTtcbiAgICB9LFxuXG4gICAgYWxwaGFUYXJnZXQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhVGFyZ2V0ID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFUYXJnZXQ7XG4gICAgfSxcblxuICAgIHZlbG9jaXR5RGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZlbG9jaXR5RGVjYXkgPSAxIC0gXywgc2ltdWxhdGlvbikgOiAxIC0gdmVsb2NpdHlEZWNheTtcbiAgICB9LFxuXG4gICAgcmFuZG9tU291cmNlOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5kb20gPSBfLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IHJhbmRvbTtcbiAgICB9LFxuXG4gICAgZm9yY2U6IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICgoXyA9PSBudWxsID8gZm9yY2VzLmRlbGV0ZShuYW1lKSA6IGZvcmNlcy5zZXQobmFtZSwgaW5pdGlhbGl6ZUZvcmNlKF8pKSksIHNpbXVsYXRpb24pIDogZm9yY2VzLmdldChuYW1lKTtcbiAgICB9LFxuXG4gICAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBkeCxcbiAgICAgICAgICBkeSxcbiAgICAgICAgICBkMixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGNsb3Nlc3Q7XG5cbiAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gICAgICBlbHNlIHJhZGl1cyAqPSByYWRpdXM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBkeCA9IHggLSBub2RlLng7XG4gICAgICAgIGR5ID0geSAtIG5vZGUueTtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgcmFkaXVzKSBjbG9zZXN0ID0gbm9kZSwgcmFkaXVzID0gZDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKGV2ZW50Lm9uKG5hbWUsIF8pLCBzaW11bGF0aW9uKSA6IGV2ZW50Lm9uKG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/simulation.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/x.js": /*!***********************************************!*\ !*** ../../../node_modules/d3-force/src/x.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n var strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : x;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy94LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQyw2QkFBZSxvQ0FBUztBQUN4QixpQkFBaUIsd0RBQVE7QUFDekI7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyx3REFBUTs7QUFFM0M7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveC5qcz9kY2UwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBub2RlcyxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHh6O1xuXG4gIGlmICh0eXBlb2YgeCAhPT0gXCJmdW5jdGlvblwiKSB4ID0gY29uc3RhbnQoeCA9PSBudWxsID8gMCA6ICt4KTtcblxuICBmdW5jdGlvbiBmb3JjZShhbHBoYSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUudnggKz0gKHh6W2ldIC0gbm9kZS54KSAqIHN0cmVuZ3Roc1tpXSAqIGFscGhhO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICB4eiA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTih4eltpXSA9ICt4KG5vZGVzW2ldLCBpLCBub2RlcykpID8gMCA6ICtzdHJlbmd0aChub2Rlc1tpXSwgaSwgbm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/x.js\n"); /***/ }), /***/ "../../../node_modules/d3-force/src/y.js": /*!***********************************************!*\ !*** ../../../node_modules/d3-force/src/y.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-force/src/constant.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(y) {\n var strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), initialize(), force) : y;\n };\n\n return force;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy95LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQyw2QkFBZSxvQ0FBUztBQUN4QixpQkFBaUIsd0RBQVE7QUFDekI7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyx3REFBUTs7QUFFM0M7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveS5qcz9kMTU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih5KSB7XG4gIHZhciBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBub2RlcyxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHl6O1xuXG4gIGlmICh0eXBlb2YgeSAhPT0gXCJmdW5jdGlvblwiKSB5ID0gY29uc3RhbnQoeSA9PSBudWxsID8gMCA6ICt5KTtcblxuICBmdW5jdGlvbiBmb3JjZShhbHBoYSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUudnkgKz0gKHl6W2ldIC0gbm9kZS55KSAqIHN0cmVuZ3Roc1tpXSAqIGFscGhhO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICB5eiA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTih5eltpXSA9ICt5KG5vZGVzW2ldLCBpLCBub2RlcykpID8gMCA6ICtzdHJlbmd0aChub2Rlc1tpXSwgaSwgbm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHk7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-force/src/y.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/defaultLocale.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-format/src/defaultLocale.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ defaultLocale),\n/* harmony export */ \"format\": () => (/* binding */ format),\n/* harmony export */ \"formatPrefix\": () => (/* binding */ formatPrefix)\n/* harmony export */ });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ \"../../../node_modules/d3-format/src/locale.js\");\n\n\nvar locale;\nvar format;\nvar formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nfunction defaultLocale(definition) {\n locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXVDOztBQUV2QztBQUNPO0FBQ0E7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVjO0FBQ2YsV0FBVyxzREFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzPzBhZTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/defaultLocale.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/exponent.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-format/src/exponent.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"../../../node_modules/d3-format/src/formatDecimal.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return x = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(Math.abs(x)), x ? x[1] : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBc0Q7O0FBRXRELDZCQUFlLG9DQUFTO0FBQ3hCLGFBQWEscUVBQWtCO0FBQy9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzPzkwNTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/exponent.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatDecimal.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-format/src/formatDecimal.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"formatDecimalParts\": () => (/* binding */ formatDecimalParts)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanM/MmRhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatDecimal.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatGroup.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-format/src/formatGroup.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzPzM1ODgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatGroup.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatNumerals.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-format/src/formatNumerals.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0TnVtZXJhbHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzP2VmYTYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatNumerals.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatPrefixAuto.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-format/src/formatPrefixAuto.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"prefixExponent\": () => (/* binding */ prefixExponent)\n/* harmony export */ });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"../../../node_modules/d3-format/src/formatDecimal.js\");\n\n\nvar prefixExponent;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, p) {\n var d = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7O0FBRS9DOztBQUVQLDZCQUFlLG9DQUFTO0FBQ3hCLFVBQVUscUVBQWtCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMscUVBQWtCLGdDQUFnQztBQUM5RiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzP2U5ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbFBhcnRzKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatPrefixAuto.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatRounded.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-format/src/formatRounded.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"../../../node_modules/d3-format/src/formatDecimal.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, p) {\n var d = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzRDs7QUFFdEQsNkJBQWUsb0NBQVM7QUFDeEIsVUFBVSxxRUFBa0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcz9lOGY2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatRounded.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatSpecifier.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-format/src/formatSpecifier.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FormatSpecifier\": () => (/* binding */ FormatSpecifier),\n/* harmony export */ \"default\": () => (/* binding */ formatSpecifier)\n/* harmony export */ });\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVEQUF1RDs7QUFFaEQ7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanM/YjU5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xuICB2YXIgbWF0Y2g7XG4gIHJldHVybiBuZXcgRm9ybWF0U3BlY2lmaWVyKHtcbiAgICBmaWxsOiBtYXRjaFsxXSxcbiAgICBhbGlnbjogbWF0Y2hbMl0sXG4gICAgc2lnbjogbWF0Y2hbM10sXG4gICAgc3ltYm9sOiBtYXRjaFs0XSxcbiAgICB6ZXJvOiBtYXRjaFs1XSxcbiAgICB3aWR0aDogbWF0Y2hbNl0sXG4gICAgY29tbWE6IG1hdGNoWzddLFxuICAgIHByZWNpc2lvbjogbWF0Y2hbOF0gJiYgbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgdHJpbTogbWF0Y2hbOV0sXG4gICAgdHlwZTogbWF0Y2hbMTBdXG4gIH0pO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5leHBvcnQgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICB0aGlzLmZpbGwgPSBzcGVjaWZpZXIuZmlsbCA9PT0gdW5kZWZpbmVkID8gXCIgXCIgOiBzcGVjaWZpZXIuZmlsbCArIFwiXCI7XG4gIHRoaXMuYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24gPT09IHVuZGVmaW5lZCA/IFwiPlwiIDogc3BlY2lmaWVyLmFsaWduICsgXCJcIjtcbiAgdGhpcy5zaWduID0gc3BlY2lmaWVyLnNpZ24gPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogc3BlY2lmaWVyLnNpZ24gKyBcIlwiO1xuICB0aGlzLnN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIuc3ltYm9sICsgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFzcGVjaWZpZXIuemVybztcbiAgdGhpcy53aWR0aCA9IHNwZWNpZmllci53aWR0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci53aWR0aDtcbiAgdGhpcy5jb21tYSA9ICEhc3BlY2lmaWVyLmNvbW1hO1xuICB0aGlzLnByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIucHJlY2lzaW9uO1xuICB0aGlzLnRyaW0gPSAhIXNwZWNpZmllci50cmltO1xuICB0aGlzLnR5cGUgPSBzcGVjaWZpZXIudHlwZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci50eXBlICsgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09PSB1bmRlZmluZWQgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatSpecifier.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatTrim.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-format/src/formatTrim.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSw2QkFBZSxvQ0FBUztBQUN4QixrREFBa0QsT0FBTztBQUN6RDtBQUNBLDZCQUE2QjtBQUM3QixzQ0FBc0MsUUFBUTtBQUM5QyxzQ0FBc0Msb0JBQW9CO0FBQzFEO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanM/YTIzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUcmltcyBpbnNpZ25pZmljYW50IHplcm9zLCBlLmcuLCByZXBsYWNlcyAxLjIwMDBrIHdpdGggMS4yay5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHMpIHtcbiAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xuICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatTrim.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/formatTypes.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-format/src/formatTypes.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ \"../../../node_modules/d3-format/src/formatDecimal.js\");\n/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatPrefixAuto.js */ \"../../../node_modules/d3-format/src/formatPrefixAuto.js\");\n/* harmony import */ var _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatRounded.js */ \"../../../node_modules/d3-format/src/formatRounded.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => (0,_formatRounded_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(x * 100, p),\n \"r\": _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n \"s\": _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUErQztBQUNNO0FBQ047O0FBRS9DLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsT0FBTyx5REFBYTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2REFBYTtBQUM5QixPQUFPLHlEQUFhO0FBQ3BCLE9BQU8sNERBQWdCO0FBQ3ZCO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanM/OGRkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6ICh4LCBwKSA9PiAoeCAqIDEwMCkudG9GaXhlZChwKSxcbiAgXCJiXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpLFxuICBcImNcIjogKHgpID0+IHggKyBcIlwiLFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6ICh4LCBwKSA9PiB4LnRvRXhwb25lbnRpYWwocCksXG4gIFwiZlwiOiAoeCwgcCkgPT4geC50b0ZpeGVkKHApLFxuICBcImdcIjogKHgsIHApID0+IHgudG9QcmVjaXNpb24ocCksXG4gIFwib1wiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KSxcbiAgXCJwXCI6ICh4LCBwKSA9PiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApLFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxcbiAgXCJ4XCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/formatTypes.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/identity.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-format/src/identity.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanM/MTI0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/index.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-format/src/index.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FormatSpecifier\": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__.FormatSpecifier),\n/* harmony export */ \"format\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.format),\n/* harmony export */ \"formatDefaultLocale\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"formatLocale\": () => (/* reexport safe */ _locale_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"formatPrefix\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.formatPrefix),\n/* harmony export */ \"formatSpecifier\": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"precisionFixed\": () => (/* reexport safe */ _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"precisionPrefix\": () => (/* reexport safe */ _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"precisionRound\": () => (/* reexport safe */ _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"../../../node_modules/d3-format/src/defaultLocale.js\");\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ \"../../../node_modules/d3-format/src/locale.js\");\n/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatSpecifier.js */ \"../../../node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony import */ var _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./precisionFixed.js */ \"../../../node_modules/d3-format/src/precisionFixed.js\");\n/* harmony import */ var _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./precisionPrefix.js */ \"../../../node_modules/d3-format/src/precisionPrefix.js\");\n/* harmony import */ var _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./precisionRound.js */ \"../../../node_modules/d3-format/src/precisionRound.js\");\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdGO0FBQ3BDO0FBQzZCO0FBQ25CO0FBQ0U7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcz84MDZlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXREZWZhdWx0TG9jYWxlLCBmb3JtYXQsIGZvcm1hdFByZWZpeH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdExvY2FsZX0gZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0U3BlY2lmaWVyLCBGb3JtYXRTcGVjaWZpZXJ9IGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvbkZpeGVkfSBmcm9tIFwiLi9wcmVjaXNpb25GaXhlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblByZWZpeH0gZnJvbSBcIi4vcHJlY2lzaW9uUHJlZml4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJlY2lzaW9uUm91bmR9IGZyb20gXCIuL3ByZWNpc2lvblJvdW5kLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/locale.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-format/src/locale.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./exponent.js */ \"../../../node_modules/d3-format/src/exponent.js\");\n/* harmony import */ var _formatGroup_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatGroup.js */ \"../../../node_modules/d3-format/src/formatGroup.js\");\n/* harmony import */ var _formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatNumerals.js */ \"../../../node_modules/d3-format/src/formatNumerals.js\");\n/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatSpecifier.js */ \"../../../node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony import */ var _formatTrim_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatTrim.js */ \"../../../node_modules/d3-format/src/formatTrim.js\");\n/* harmony import */ var _formatTypes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatTypes.js */ \"../../../node_modules/d3-format/src/formatTypes.js\");\n/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatPrefixAuto.js */ \"../../../node_modules/d3-format/src/formatPrefixAuto.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-format/src/identity.js\");\n\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : (0,_formatGroup_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : (0,_formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = (0,_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!_formatTypes_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"][type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = _formatTypes_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"][type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = (0,_formatTrim_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__.prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = (0,_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor((0,_exponent_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFxQztBQUNNO0FBQ007QUFDRTtBQUNWO0FBQ0U7QUFDVTtBQUNoQjs7QUFFckM7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QixnRkFBZ0Ysb0RBQVEsR0FBRywyREFBVztBQUN0RztBQUNBO0FBQ0E7QUFDQSxpREFBaUQsb0RBQVEsR0FBRyw4REFBYztBQUMxRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsK0RBQWU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVEQUFXOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1REFBVztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLDBEQUFVOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQsZ0VBQWM7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsc0lBQXNJO0FBQ3RJLHNFQUFzRTtBQUN0RTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLCtEQUFlO0FBQ2xELGdEQUFnRCx3REFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanM/ZjE3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIuKIklwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVN1ZmZpeCA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMCB8fCAxIC8gdmFsdWUgPCAwO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXG4gICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDAgJiYgc2lnbiAhPT0gXCIrXCIpIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/locale.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/precisionFixed.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-format/src/precisionFixed.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"../../../node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step) {\n return Math.max(0, -(0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Math.abs(step)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLDZCQUFlLG9DQUFTO0FBQ3hCLHNCQUFzQix3REFBUTtBQUM5QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcz84OWFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/precisionFixed.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/precisionPrefix.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-format/src/precisionPrefix.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"../../../node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor((0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) / 3))) * 3 - (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Math.abs(step)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQyw2QkFBZSxvQ0FBUztBQUN4Qix5REFBeUQsd0RBQVEscUJBQXFCLHdEQUFRO0FBQzlGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcz82MzNiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/precisionPrefix.js\n"); /***/ }), /***/ "../../../node_modules/d3-format/src/precisionRound.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-format/src/precisionRound.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ \"../../../node_modules/d3-format/src/exponent.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(max) - (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(step)) + 1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EscUJBQXFCLHdEQUFRLFFBQVEsd0RBQVE7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanM/ZDkxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-format/src/precisionRound.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/area.js": /*!************************************************!*\ !*** ../../../node_modules/d3-geo/src/area.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"areaRingSum\": () => (/* binding */ areaRingSum),\n/* harmony export */ \"areaStream\": () => (/* binding */ areaStream),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n\n\n\n\n\nvar areaRingSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n\n// hello?\n\nvar areaSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nvar areaStream = {\n point: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n polygonStart: function() {\n areaRingSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? _math_js__WEBPACK_IMPORTED_MODULE_2__.tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n },\n sphere: function() {\n areaSum.add(_math_js__WEBPACK_IMPORTED_MODULE_2__.tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians;\n lambda0 = lambda, cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(phi = phi / 2 + _math_js__WEBPACK_IMPORTED_MODULE_2__.quarterPi), sinPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians;\n phi = phi / 2 + _math_js__WEBPACK_IMPORTED_MODULE_2__.quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(phi),\n sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(adLambda),\n v = k * sdLambda * (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(adLambda);\n areaRingSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.atan2)(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) {\n areaSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object, areaStream);\n return areaSum * 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYXJlYS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQStCO0FBQ29DO0FBQ3RDO0FBQ0k7O0FBRTFCLHNCQUFzQiwyQ0FBSzs7QUFFbEM7O0FBRUEsa0JBQWtCLDJDQUFLO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCxTQUFTLGdEQUFJO0FBQ2IsYUFBYSxnREFBSTtBQUNqQixXQUFXLGdEQUFJO0FBQ2Y7QUFDQSxzQkFBc0IsMkNBQUs7QUFDM0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsK0JBQStCLHlDQUFHO0FBQ2xDLGlEQUFpRCxnREFBSTtBQUNyRCxHQUFHO0FBQ0g7QUFDQSxnQkFBZ0IseUNBQUc7QUFDbkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkNBQU8sU0FBUyw2Q0FBTztBQUNuQyw4QkFBOEIsNkNBQUcsaUJBQWlCLCtDQUFTLGFBQWEsNkNBQUc7QUFDM0U7O0FBRUE7QUFDQSxZQUFZLDZDQUFPLFNBQVMsNkNBQU87QUFDbkMsa0JBQWtCLCtDQUFTLEVBQUU7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQUc7QUFDbEIsZUFBZSw2Q0FBRztBQUNsQjtBQUNBLGlDQUFpQyw2Q0FBRztBQUNwQyx5QkFBeUIsNkNBQUc7QUFDNUIsa0JBQWtCLCtDQUFLOztBQUV2QjtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEIsZ0JBQWdCLDJDQUFLO0FBQ3JCLEVBQUUsc0RBQU07QUFDUjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2FyZWEuanM/YmE3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FkZGVyfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YXRhbjIsIGNvcywgcXVhcnRlclBpLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4vbm9vcC5qc1wiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcblxuZXhwb3J0IHZhciBhcmVhUmluZ1N1bSA9IG5ldyBBZGRlcigpO1xuXG4vLyBoZWxsbz9cblxudmFyIGFyZWFTdW0gPSBuZXcgQWRkZXIoKSxcbiAgICBsYW1iZGEwMCxcbiAgICBwaGkwMCxcbiAgICBsYW1iZGEwLFxuICAgIGNvc1BoaTAsXG4gICAgc2luUGhpMDtcblxuZXhwb3J0IHZhciBhcmVhU3RyZWFtID0ge1xuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBub29wLFxuICBsaW5lRW5kOiBub29wLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFSaW5nU3VtID0gbmV3IEFkZGVyKCk7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJlYVJpbmcgPSArYXJlYVJpbmdTdW07XG4gICAgYXJlYVN1bS5hZGQoYXJlYVJpbmcgPCAwID8gdGF1ICsgYXJlYVJpbmcgOiBhcmVhUmluZyk7XG4gICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmxpbmVFbmQgPSB0aGlzLnBvaW50ID0gbm9vcDtcbiAgfSxcbiAgc3BoZXJlOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3VtLmFkZCh0YXUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhcmVhUmluZ1N0YXJ0KCkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50Rmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGFyZWFSaW5nRW5kKCkge1xuICBhcmVhUG9pbnQobGFtYmRhMDAsIHBoaTAwKTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludDtcbiAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIGNvc1BoaTAgPSBjb3MocGhpID0gcGhpIC8gMiArIHF1YXJ0ZXJQaSksIHNpblBoaTAgPSBzaW4ocGhpKTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgcGhpID0gcGhpIC8gMiArIHF1YXJ0ZXJQaTsgLy8gaGFsZiB0aGUgYW5ndWxhciBkaXN0YW5jZSBmcm9tIHNvdXRoIHBvbGVcblxuICAvLyBTcGhlcmljYWwgZXhjZXNzIEUgZm9yIGEgc3BoZXJpY2FsIHRyaWFuZ2xlIHdpdGggdmVydGljZXM6IHNvdXRoIHBvbGUsXG4gIC8vIHByZXZpb3VzIHBvaW50LCBjdXJyZW50IHBvaW50LiAgVXNlcyBhIGZvcm11bGEgZGVyaXZlZCBmcm9tIENhZ25vbGnigJlzXG4gIC8vIHRoZW9yZW0uICBTZWUgVG9kaHVudGVyLCBTcGhlcmljYWwgVHJpZy4gKDE4NzEpLCBTZWMuIDEwMywgRXEuICgyKS5cbiAgdmFyIGRMYW1iZGEgPSBsYW1iZGEgLSBsYW1iZGEwLFxuICAgICAgc2RMYW1iZGEgPSBkTGFtYmRhID49IDAgPyAxIDogLTEsXG4gICAgICBhZExhbWJkYSA9IHNkTGFtYmRhICogZExhbWJkYSxcbiAgICAgIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBrID0gc2luUGhpMCAqIHNpblBoaSxcbiAgICAgIHUgPSBjb3NQaGkwICogY29zUGhpICsgayAqIGNvcyhhZExhbWJkYSksXG4gICAgICB2ID0gayAqIHNkTGFtYmRhICogc2luKGFkTGFtYmRhKTtcbiAgYXJlYVJpbmdTdW0uYWRkKGF0YW4yKHYsIHUpKTtcblxuICAvLyBBZHZhbmNlIHRoZSBwcmV2aW91cyBwb2ludHMuXG4gIGxhbWJkYTAgPSBsYW1iZGEsIGNvc1BoaTAgPSBjb3NQaGksIHNpblBoaTAgPSBzaW5QaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBhcmVhU3VtID0gbmV3IEFkZGVyKCk7XG4gIHN0cmVhbShvYmplY3QsIGFyZWFTdHJlYW0pO1xuICByZXR1cm4gYXJlYVN1bSAqIDI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/area.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/bounds.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-geo/src/bounds.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-geo/src/area.js\");\n/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cartesian.js */ \"../../../node_modules/d3-geo/src/cartesian.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n\n\n\n\n\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.polygonStart();\n },\n polygonEnd: function() {\n _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (_area_js__WEBPACK_IMPORTED_MODULE_1__.areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) phi1 = 90;\n else if (deltaSum < -_math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesian)([lambda * _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi * _math_js__WEBPACK_IMPORTED_MODULE_2__.radians]);\n if (p0) {\n var normal = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(equatorial, normal);\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianNormalizeInPlace)(inflection);\n inflection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees * sign,\n phii,\n antimeridian = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.lineEnd();\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(deltaSum) > _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYm91bmRzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErQjtBQUNtQjtBQUM2QztBQUN0QztBQUN4Qjs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQ0FBSztBQUN4QixJQUFJLDZEQUF1QjtBQUMzQixHQUFHO0FBQ0g7QUFDQSxJQUFJLDJEQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlEQUFXO0FBQ25CLHdCQUF3Qiw2Q0FBTztBQUMvQix5QkFBeUIsNkNBQU87QUFDaEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsd0RBQVMsV0FBVyw2Q0FBTyxRQUFRLDZDQUFPO0FBQ3BEO0FBQ0EsaUJBQWlCLDZEQUFjO0FBQy9CO0FBQ0EscUJBQXFCLDZEQUFjO0FBQ25DLElBQUksd0VBQXlCO0FBQzdCLGlCQUFpQix3REFBUztBQUMxQjtBQUNBO0FBQ0Esa0NBQWtDLDZDQUFPO0FBQ3pDO0FBQ0EsdUJBQXVCLDZDQUFHO0FBQzFCO0FBQ0EsNkJBQTZCLDZDQUFPO0FBQ3BDO0FBQ0EsTUFBTTtBQUNOLDhCQUE4Qiw2Q0FBTztBQUNyQztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDZDQUFHO0FBQ3BCLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRSxzREFBZ0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBLEVBQUUsMERBQW9CO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxFQUFFLHdEQUFrQjtBQUNwQixNQUFNLDZDQUFHLGFBQWEsNkNBQU87QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQSxFQUFFLHNEQUFNOztBQUVSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QyxPQUFPO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEVBQTRFLFFBQVE7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYm91bmRzLmpzPzFkYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZGRlcn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2FyZWFTdHJlYW0sIGFyZWFSaW5nU3VtfSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuLmpzXCI7XG5pbXBvcnQge2FicywgZGVncmVlcywgZXBzaWxvbiwgcmFkaWFuc30gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcblxudmFyIGxhbWJkYTAsIHBoaTAsIGxhbWJkYTEsIHBoaTEsIC8vIGJvdW5kc1xuICAgIGxhbWJkYTIsIC8vIHByZXZpb3VzIGxhbWJkYS1jb29yZGluYXRlXG4gICAgbGFtYmRhMDAsIHBoaTAwLCAvLyBmaXJzdCBwb2ludFxuICAgIHAwLCAvLyBwcmV2aW91cyAzRCBwb2ludFxuICAgIGRlbHRhU3VtLFxuICAgIHJhbmdlcyxcbiAgICByYW5nZTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IGJvdW5kc0xpbmVTdGFydCxcbiAgbGluZUVuZDogYm91bmRzTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNSaW5nUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc1JpbmdTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc1JpbmdFbmQ7XG4gICAgZGVsdGFTdW0gPSBuZXcgQWRkZXIoKTtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNQb2ludDtcbiAgICBib3VuZHNTdHJlYW0ubGluZVN0YXJ0ID0gYm91bmRzTGluZVN0YXJ0O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lRW5kID0gYm91bmRzTGluZUVuZDtcbiAgICBpZiAoYXJlYVJpbmdTdW0gPCAwKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKSwgcGhpMCA9IC0ocGhpMSA9IDkwKTtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA+IGVwc2lsb24pIHBoaTEgPSA5MDtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA8IC1lcHNpbG9uKSBwaGkwID0gLTkwO1xuICAgIHJhbmdlWzBdID0gbGFtYmRhMCwgcmFuZ2VbMV0gPSBsYW1iZGExO1xuICB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApLCBwaGkwID0gLShwaGkxID0gOTApO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludChsYW1iZGEsIHBoaSkge1xuICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbn1cblxuZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIHZhciBwID0gY2FydGVzaWFuKFtsYW1iZGEgKiByYWRpYW5zLCBwaGkgKiByYWRpYW5zXSk7XG4gIGlmIChwMCkge1xuICAgIHZhciBub3JtYWwgPSBjYXJ0ZXNpYW5Dcm9zcyhwMCwgcCksXG4gICAgICAgIGVxdWF0b3JpYWwgPSBbbm9ybWFsWzFdLCAtbm9ybWFsWzBdLCAwXSxcbiAgICAgICAgaW5mbGVjdGlvbiA9IGNhcnRlc2lhbkNyb3NzKGVxdWF0b3JpYWwsIG5vcm1hbCk7XG4gICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShpbmZsZWN0aW9uKTtcbiAgICBpbmZsZWN0aW9uID0gc3BoZXJpY2FsKGluZmxlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTIsXG4gICAgICAgIHNpZ24gPSBkZWx0YSA+IDAgPyAxIDogLTEsXG4gICAgICAgIGxhbWJkYWkgPSBpbmZsZWN0aW9uWzBdICogZGVncmVlcyAqIHNpZ24sXG4gICAgICAgIHBoaWksXG4gICAgICAgIGFudGltZXJpZGlhbiA9IGFicyhkZWx0YSkgPiAxODA7XG4gICAgaWYgKGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA+IHBoaTEpIHBoaTEgPSBwaGlpO1xuICAgIH0gZWxzZSBpZiAobGFtYmRhaSA9IChsYW1iZGFpICsgMzYwKSAlIDM2MCAtIDE4MCwgYW50aW1lcmlkaWFuIF4gKHNpZ24gKiBsYW1iZGEyIDwgbGFtYmRhaSAmJiBsYW1iZGFpIDwgc2lnbiAqIGxhbWJkYSkpIHtcbiAgICAgIHBoaWkgPSAtaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA8IHBoaTApIHBoaTAgPSBwaGlpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgICAgIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICAgIH1cbiAgICBpZiAoYW50aW1lcmlkaWFuKSB7XG4gICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMikge1xuICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxhbWJkYTEgPj0gbGFtYmRhMCkge1xuICAgICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMCkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTEpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobGFtYmRhID4gbGFtYmRhMikge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEwLCBsYW1iZGEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIH1cbiAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICBwMCA9IHAsIGxhbWJkYTIgPSBsYW1iZGE7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc0xpbmVTdGFydCgpIHtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lRW5kKCkge1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gIHAwID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGlmIChwMCkge1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTI7XG4gICAgZGVsdGFTdW0uYWRkKGFicyhkZWx0YSkgPiAxODAgPyBkZWx0YSArIChkZWx0YSA+IDAgPyAzNjAgOiAtMzYwKSA6IGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIH1cbiAgYXJlYVN0cmVhbS5wb2ludChsYW1iZGEsIHBoaSk7XG4gIGxpbmVQb2ludChsYW1iZGEsIHBoaSk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5saW5lU3RhcnQoKTtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ0VuZCgpIHtcbiAgYm91bmRzUmluZ1BvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG4gIGFyZWFTdHJlYW0ubGluZUVuZCgpO1xuICBpZiAoYWJzKGRlbHRhU3VtKSA+IGVwc2lsb24pIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApO1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgcDAgPSBudWxsO1xufVxuXG4vLyBGaW5kcyB0aGUgbGVmdC1yaWdodCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBsb25naXR1ZGVzLlxuLy8gVGhpcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgKGxhbWJkYTEgLSBsYW1iZGEwICsgMzYwwrApICUgMzYwwrAsIGV4Y2VwdCB0aGF0IHdlIHdhbnRcbi8vIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIMKxMTgwwrAgdG8gYmUgMzYwwrAuXG5mdW5jdGlvbiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSB7XG4gIHJldHVybiAobGFtYmRhMSAtPSBsYW1iZGEwKSA8IDAgPyBsYW1iZGExICsgMzYwIDogbGFtYmRhMTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuXG5mdW5jdGlvbiByYW5nZUNvbnRhaW5zKHJhbmdlLCB4KSB7XG4gIHJldHVybiByYW5nZVswXSA8PSByYW5nZVsxXSA/IHJhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXSA6IHggPCByYW5nZVswXSB8fCByYW5nZVsxXSA8IHg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZlYXR1cmUpIHtcbiAgdmFyIGksIG4sIGEsIGIsIG1lcmdlZCwgZGVsdGFNYXgsIGRlbHRhO1xuXG4gIHBoaTEgPSBsYW1iZGExID0gLShsYW1iZGEwID0gcGhpMCA9IEluZmluaXR5KTtcbiAgcmFuZ2VzID0gW107XG4gIHN0cmVhbShmZWF0dXJlLCBib3VuZHNTdHJlYW0pO1xuXG4gIC8vIEZpcnN0LCBzb3J0IHJhbmdlcyBieSB0aGVpciBtaW5pbXVtIGxvbmdpdHVkZXMuXG4gIGlmIChuID0gcmFuZ2VzLmxlbmd0aCkge1xuICAgIHJhbmdlcy5zb3J0KHJhbmdlQ29tcGFyZSk7XG5cbiAgICAvLyBUaGVuLCBtZXJnZSBhbnkgcmFuZ2VzIHRoYXQgb3ZlcmxhcC5cbiAgICBmb3IgKGkgPSAxLCBhID0gcmFuZ2VzWzBdLCBtZXJnZWQgPSBbYV07IGkgPCBuOyArK2kpIHtcbiAgICAgIGIgPSByYW5nZXNbaV07XG4gICAgICBpZiAocmFuZ2VDb250YWlucyhhLCBiWzBdKSB8fCByYW5nZUNvbnRhaW5zKGEsIGJbMV0pKSB7XG4gICAgICAgIGlmIChhbmdsZShhWzBdLCBiWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzFdID0gYlsxXTtcbiAgICAgICAgaWYgKGFuZ2xlKGJbMF0sIGFbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMF0gPSBiWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkLnB1c2goYSA9IGIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIGZpbmQgdGhlIGxhcmdlc3QgZ2FwIGJldHdlZW4gdGhlIG1lcmdlZCByYW5nZXMuXG4gICAgLy8gVGhlIGZpbmFsIGJvdW5kaW5nIGJveCB3aWxsIGJlIHRoZSBpbnZlcnNlIG9mIHRoaXMgZ2FwLlxuICAgIGZvciAoZGVsdGFNYXggPSAtSW5maW5pdHksIG4gPSBtZXJnZWQubGVuZ3RoIC0gMSwgaSA9IDAsIGEgPSBtZXJnZWRbbl07IGkgPD0gbjsgYSA9IGIsICsraSkge1xuICAgICAgYiA9IG1lcmdlZFtpXTtcbiAgICAgIGlmICgoZGVsdGEgPSBhbmdsZShhWzFdLCBiWzBdKSkgPiBkZWx0YU1heCkgZGVsdGFNYXggPSBkZWx0YSwgbGFtYmRhMCA9IGJbMF0sIGxhbWJkYTEgPSBhWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJhbmdlcyA9IHJhbmdlID0gbnVsbDtcblxuICByZXR1cm4gbGFtYmRhMCA9PT0gSW5maW5pdHkgfHwgcGhpMCA9PT0gSW5maW5pdHlcbiAgICAgID8gW1tOYU4sIE5hTl0sIFtOYU4sIE5hTl1dXG4gICAgICA6IFtbbGFtYmRhMCwgcGhpMF0sIFtsYW1iZGExLCBwaGkxXV07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/bounds.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/cartesian.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-geo/src/cartesian.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cartesian\": () => (/* binding */ cartesian),\n/* harmony export */ \"cartesianAddInPlace\": () => (/* binding */ cartesianAddInPlace),\n/* harmony export */ \"cartesianCross\": () => (/* binding */ cartesianCross),\n/* harmony export */ \"cartesianDot\": () => (/* binding */ cartesianDot),\n/* harmony export */ \"cartesianNormalizeInPlace\": () => (/* binding */ cartesianNormalizeInPlace),\n/* harmony export */ \"cartesianScale\": () => (/* binding */ cartesianScale),\n/* harmony export */ \"spherical\": () => (/* binding */ spherical)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\nfunction spherical(cartesian) {\n return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(cartesian[1], cartesian[0]), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi);\n return [cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda), cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi)];\n}\n\nfunction cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n var l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2FydGVzaWFuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQXNEOztBQUUvQztBQUNQLFVBQVUsK0NBQUssOEJBQThCLDhDQUFJO0FBQ2pEOztBQUVPO0FBQ1AsMERBQTBELDZDQUFHO0FBQzdELG1CQUFtQiw2Q0FBRyxtQkFBbUIsNkNBQUcsVUFBVSw2Q0FBRztBQUN6RDs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ087QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNPO0FBQ1AsVUFBVSw4Q0FBSTtBQUNkO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2FydGVzaWFuLmpzPzMyZDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNwaGVyaWNhbChjYXJ0ZXNpYW4pIHtcbiAgcmV0dXJuIFthdGFuMihjYXJ0ZXNpYW5bMV0sIGNhcnRlc2lhblswXSksIGFzaW4oY2FydGVzaWFuWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW4oc3BoZXJpY2FsKSB7XG4gIHZhciBsYW1iZGEgPSBzcGhlcmljYWxbMF0sIHBoaSA9IHNwaGVyaWNhbFsxXSwgY29zUGhpID0gY29zKHBoaSk7XG4gIHJldHVybiBbY29zUGhpICogY29zKGxhbWJkYSksIGNvc1BoaSAqIHNpbihsYW1iZGEpLCBzaW4ocGhpKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5Eb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQ3Jvc3MoYSwgYikge1xuICByZXR1cm4gW2FbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sIGFbMl0gKiBiWzBdIC0gYVswXSAqIGJbMl0sIGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF1dO1xufVxuXG4vLyBUT0RPIHJldHVybiBhXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQWRkSW5QbGFjZShhLCBiKSB7XG4gIGFbMF0gKz0gYlswXSwgYVsxXSArPSBiWzFdLCBhWzJdICs9IGJbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5TY2FsZSh2ZWN0b3IsIGspIHtcbiAgcmV0dXJuIFt2ZWN0b3JbMF0gKiBrLCB2ZWN0b3JbMV0gKiBrLCB2ZWN0b3JbMl0gKiBrXTtcbn1cblxuLy8gVE9ETyByZXR1cm4gZFxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoZCkge1xuICB2YXIgbCA9IHNxcnQoZFswXSAqIGRbMF0gKyBkWzFdICogZFsxXSArIGRbMl0gKiBkWzJdKTtcbiAgZFswXSAvPSBsLCBkWzFdIC89IGwsIGRbMl0gLz0gbDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/cartesian.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/centroid.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/centroid.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n\n\n\n\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi);\n centroidPointCartesian(cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda), cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda), (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi);\n x0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda);\n y0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda);\n z0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi),\n x = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda),\n y = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda),\n z = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi),\n w = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.atan2)((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi);\n x0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda);\n y0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda);\n z0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi),\n x = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda),\n y = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda),\n z = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.hypot)(cx, cy, cz),\n w = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new d3_array__WEBPACK_IMPORTED_MODULE_2__.Adder();\n Y2 = new d3_array__WEBPACK_IMPORTED_MODULE_2__.Adder();\n Z2 = new d3_array__WEBPACK_IMPORTED_MODULE_2__.Adder();\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.hypot)(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) x = X0, y = Y0, z = Z0;\n m = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.hypot)(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2) return [NaN, NaN];\n }\n\n return [(0,_math_js__WEBPACK_IMPORTED_MODULE_1__.atan2)(y, x) * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(z / m) * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2VudHJvaWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0I7QUFDbUU7QUFDckU7QUFDSTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQSxVQUFVLGdEQUFJO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksNkNBQU8sU0FBUyw2Q0FBTztBQUNuQyxlQUFlLDZDQUFHO0FBQ2xCLGtDQUFrQyw2Q0FBRyxtQkFBbUIsNkNBQUcsVUFBVSw2Q0FBRztBQUN4RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSw2Q0FBTyxTQUFTLDZDQUFPO0FBQ25DLGVBQWUsNkNBQUc7QUFDbEIsZ0JBQWdCLDZDQUFHO0FBQ25CLGdCQUFnQiw2Q0FBRztBQUNuQixPQUFPLDZDQUFHO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSw2Q0FBTyxTQUFTLDZDQUFPO0FBQ25DLGVBQWUsNkNBQUc7QUFDbEIsbUJBQW1CLDZDQUFHO0FBQ3RCLG1CQUFtQiw2Q0FBRztBQUN0QixVQUFVLDZDQUFHO0FBQ2IsVUFBVSwrQ0FBSyxDQUFDLDhDQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWSw2Q0FBTyxTQUFTLDZDQUFPO0FBQ25DO0FBQ0EsZUFBZSw2Q0FBRztBQUNsQixnQkFBZ0IsNkNBQUc7QUFDbkIsZ0JBQWdCLDZDQUFHO0FBQ25CLE9BQU8sNkNBQUc7QUFDVjtBQUNBOztBQUVBO0FBQ0EsWUFBWSw2Q0FBTyxTQUFTLDZDQUFPO0FBQ25DLGVBQWUsNkNBQUc7QUFDbEIsbUJBQW1CLDZDQUFHO0FBQ3RCLG1CQUFtQiw2Q0FBRztBQUN0QixVQUFVLDZDQUFHO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQ0FBSztBQUNmLFVBQVUsOENBQUk7QUFDZCx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkNBQUs7QUFDaEIsV0FBVywyQ0FBSztBQUNoQixXQUFXLDJDQUFLO0FBQ2hCLEVBQUUsc0RBQU07O0FBRVI7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrQ0FBSzs7QUFFZjtBQUNBLFVBQVUsOENBQVE7QUFDbEI7QUFDQTtBQUNBLGFBQWEsNkNBQU87QUFDcEIsUUFBUSwrQ0FBSztBQUNiO0FBQ0EsWUFBWSw4Q0FBUTtBQUNwQjs7QUFFQSxVQUFVLCtDQUFLLFNBQVMsNkNBQU8sRUFBRSw4Q0FBSSxVQUFVLDZDQUFPO0FBQ3REIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NlbnRyb2lkLmpzP2MzOTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZGRlcn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIGRlZ3JlZXMsIGVwc2lsb24sIGVwc2lsb24yLCBoeXBvdCwgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG52YXIgVzAsIFcxLFxuICAgIFgwLCBZMCwgWjAsXG4gICAgWDEsIFkxLCBaMSxcbiAgICBYMiwgWTIsIFoyLFxuICAgIGxhbWJkYTAwLCBwaGkwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICB4MCwgeTAsIHowOyAvLyBwcmV2aW91cyBwb2ludFxuXG52YXIgY2VudHJvaWRTdHJlYW0gPSB7XG4gIHNwaGVyZTogbm9vcCxcbiAgcG9pbnQ6IGNlbnRyb2lkUG9pbnQsXG4gIGxpbmVTdGFydDogY2VudHJvaWRMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGNlbnRyb2lkTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZFJpbmdTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZExpbmVTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRMaW5lRW5kO1xuICB9XG59O1xuXG4vLyBBcml0aG1ldGljIG1lYW4gb2YgQ2FydGVzaWFuIHZlY3RvcnMuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKGNvc1BoaSAqIGNvcyhsYW1iZGEpLCBjb3NQaGkgKiBzaW4obGFtYmRhKSwgc2luKHBoaSkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgsIHksIHopIHtcbiAgKytXMDtcbiAgWDAgKz0gKHggLSBYMCkgLyBXMDtcbiAgWTAgKz0gKHkgLSBZMCkgLyBXMDtcbiAgWjAgKz0gKHogLSBaMCkgLyBXMDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRMaW5lUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKTtcbiAgeDAgPSBjb3NQaGkgKiBjb3MobGFtYmRhKTtcbiAgeTAgPSBjb3NQaGkgKiBzaW4obGFtYmRhKTtcbiAgejAgPSBzaW4ocGhpKTtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZExpbmVQb2ludDtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICB4ID0gY29zUGhpICogY29zKGxhbWJkYSksXG4gICAgICB5ID0gY29zUGhpICogc2luKGxhbWJkYSksXG4gICAgICB6ID0gc2luKHBoaSksXG4gICAgICB3ID0gYXRhbjIoc3FydCgodyA9IHkwICogeiAtIHowICogeSkgKiB3ICsgKHcgPSB6MCAqIHggLSB4MCAqIHopICogdyArICh3ID0geDAgKiB5IC0geTAgKiB4KSAqIHcpLCB4MCAqIHggKyB5MCAqIHkgKyB6MCAqIHopO1xuICBXMSArPSB3O1xuICBYMSArPSB3ICogKHgwICsgKHgwID0geCkpO1xuICBZMSArPSB3ICogKHkwICsgKHkwID0geSkpO1xuICBaMSArPSB3ICogKHowICsgKHowID0geikpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVFbmQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbn1cblxuLy8gU2VlIEouIEUuIEJyb2NrLCBUaGUgSW5lcnRpYSBUZW5zb3IgZm9yIGEgU3BoZXJpY2FsIFRyaWFuZ2xlLFxuLy8gSi4gQXBwbGllZCBNZWNoYW5pY3MgNDIsIDIzOSAoMTk3NSkuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFJpbmdQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdFbmQoKSB7XG4gIGNlbnRyb2lkUmluZ1BvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFJpbmdQb2ludDtcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpO1xuICB4MCA9IGNvc1BoaSAqIGNvcyhsYW1iZGEpO1xuICB5MCA9IGNvc1BoaSAqIHNpbihsYW1iZGEpO1xuICB6MCA9IHNpbihwaGkpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHggPSBjb3NQaGkgKiBjb3MobGFtYmRhKSxcbiAgICAgIHkgPSBjb3NQaGkgKiBzaW4obGFtYmRhKSxcbiAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgIGN4ID0geTAgKiB6IC0gejAgKiB5LFxuICAgICAgY3kgPSB6MCAqIHggLSB4MCAqIHosXG4gICAgICBjeiA9IHgwICogeSAtIHkwICogeCxcbiAgICAgIG0gPSBoeXBvdChjeCwgY3ksIGN6KSxcbiAgICAgIHcgPSBhc2luKG0pLCAvLyBsaW5lIHdlaWdodCA9IGFuZ2xlXG4gICAgICB2ID0gbSAmJiAtdyAvIG07IC8vIGFyZWEgd2VpZ2h0IG11bHRpcGxpZXJcbiAgWDIuYWRkKHYgKiBjeCk7XG4gIFkyLmFkZCh2ICogY3kpO1xuICBaMi5hZGQodiAqIGN6KTtcbiAgVzEgKz0gdztcbiAgWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTtcbiAgWTEgKz0gdyAqICh5MCArICh5MCA9IHkpKTtcbiAgWjEgKz0gdyAqICh6MCArICh6MCA9IHopKTtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0KSB7XG4gIFcwID0gVzEgPVxuICBYMCA9IFkwID0gWjAgPVxuICBYMSA9IFkxID0gWjEgPSAwO1xuICBYMiA9IG5ldyBBZGRlcigpO1xuICBZMiA9IG5ldyBBZGRlcigpO1xuICBaMiA9IG5ldyBBZGRlcigpO1xuICBzdHJlYW0ob2JqZWN0LCBjZW50cm9pZFN0cmVhbSk7XG5cbiAgdmFyIHggPSArWDIsXG4gICAgICB5ID0gK1kyLFxuICAgICAgeiA9ICtaMixcbiAgICAgIG0gPSBoeXBvdCh4LCB5LCB6KTtcblxuICAvLyBJZiB0aGUgYXJlYS13ZWlnaHRlZCBjY2VudHJvaWQgaXMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbGVuZ3RoLXdlaWdodGVkIGNjZW50cm9pZC5cbiAgaWYgKG0gPCBlcHNpbG9uMikge1xuICAgIHggPSBYMSwgeSA9IFkxLCB6ID0gWjE7XG4gICAgLy8gSWYgdGhlIGZlYXR1cmUgaGFzIHplcm8gbGVuZ3RoLCBmYWxsIGJhY2sgdG8gYXJpdGhtZXRpYyBtZWFuIG9mIHBvaW50IHZlY3RvcnMuXG4gICAgaWYgKFcxIDwgZXBzaWxvbikgeCA9IFgwLCB5ID0gWTAsIHogPSBaMDtcbiAgICBtID0gaHlwb3QoeCwgeSwgeik7XG4gICAgLy8gSWYgdGhlIGZlYXR1cmUgc3RpbGwgaGFzIGFuIHVuZGVmaW5lZCBjY2VudHJvaWQsIHRoZW4gcmV0dXJuLlxuICAgIGlmIChtIDwgZXBzaWxvbjIpIHJldHVybiBbTmFOLCBOYU5dO1xuICB9XG5cbiAgcmV0dXJuIFthdGFuMih5LCB4KSAqIGRlZ3JlZXMsIGFzaW4oeiAvIG0pICogZGVncmVlc107XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/centroid.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/circle.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-geo/src/circle.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"circleStream\": () => (/* binding */ circleStream),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cartesian.js */ \"../../../node_modules/d3-geo/src/cartesian.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-geo/src/constant.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rotation.js */ \"../../../node_modules/d3-geo/src/rotation.js\");\n\n\n\n\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(radius),\n sinRadius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_1__.spherical)([cosRadius, -sinRadius * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(t), -sinRadius * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_1__.cartesian)(point), point[0] -= cosRadius;\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_1__.cartesianNormalizeInPlace)(point);\n var radius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.acos)(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + _math_js__WEBPACK_IMPORTED_MODULE_0__.tau - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) % _math_js__WEBPACK_IMPORTED_MODULE_0__.tau;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var center = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])([0, 0]),\n radius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(90),\n precision = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, x[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n p = precision.apply(this, arguments) * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians;\n ring = [];\n rotate = (0,_rotation_js__WEBPACK_IMPORTED_MODULE_3__.rotateRadians)(-c[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, -c[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), circle) : precision;\n };\n\n return circle;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErRTtBQUMxQztBQUNvQztBQUM3Qjs7QUFFNUM7QUFDTztBQUNQO0FBQ0Esa0JBQWtCLDZDQUFHO0FBQ3JCLGtCQUFrQiw2Q0FBRztBQUNyQjtBQUNBO0FBQ0EsOEJBQThCLHlDQUFHO0FBQ2pDO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSw2REFBNkQseUNBQUc7QUFDaEU7QUFDQSwwQkFBMEIsaUNBQWlDO0FBQzNELFlBQVksd0RBQVMsMEJBQTBCLDZDQUFHLGtCQUFrQiw2Q0FBRztBQUN2RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsd0RBQVM7QUFDbkIsRUFBRSx3RUFBeUI7QUFDM0IsZUFBZSw4Q0FBSTtBQUNuQiwrQ0FBK0MseUNBQUcsR0FBRyw2Q0FBTyxJQUFJLHlDQUFHO0FBQ25FOztBQUVBLDZCQUFlLHNDQUFXO0FBQzFCLGVBQWUsd0RBQVE7QUFDdkIsZUFBZSx3REFBUTtBQUN2QixrQkFBa0Isd0RBQVE7QUFDMUI7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBLFlBQVksNkNBQU8sVUFBVSw2Q0FBTztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLDZDQUFPO0FBQ25ELCtDQUErQyw2Q0FBTztBQUN0RDtBQUNBLGFBQWEsMkRBQWEsU0FBUyw2Q0FBTyxVQUFVLDZDQUFPO0FBQzNEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSx3REFBUTtBQUM5RTs7QUFFQTtBQUNBLHNFQUFzRSx3REFBUTtBQUM5RTs7QUFFQTtBQUNBLHlFQUF5RSx3REFBUTtBQUNqRjs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NpcmNsZS5qcz8yMDcyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y2FydGVzaWFuLCBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlLCBzcGhlcmljYWx9IGZyb20gXCIuL2NhcnRlc2lhbi5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQge2Fjb3MsIGNvcywgZGVncmVlcywgZXBzaWxvbiwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCB7cm90YXRlUmFkaWFuc30gZnJvbSBcIi4vcm90YXRpb24uanNcIjtcblxuLy8gR2VuZXJhdGVzIGEgY2lyY2xlIGNlbnRlcmVkIGF0IFswwrAsIDDCsF0sIHdpdGggYSBnaXZlbiByYWRpdXMgYW5kIHByZWNpc2lvbi5cbmV4cG9ydCBmdW5jdGlvbiBjaXJjbGVTdHJlYW0oc3RyZWFtLCByYWRpdXMsIGRlbHRhLCBkaXJlY3Rpb24sIHQwLCB0MSkge1xuICBpZiAoIWRlbHRhKSByZXR1cm47XG4gIHZhciBjb3NSYWRpdXMgPSBjb3MocmFkaXVzKSxcbiAgICAgIHNpblJhZGl1cyA9IHNpbihyYWRpdXMpLFxuICAgICAgc3RlcCA9IGRpcmVjdGlvbiAqIGRlbHRhO1xuICBpZiAodDAgPT0gbnVsbCkge1xuICAgIHQwID0gcmFkaXVzICsgZGlyZWN0aW9uICogdGF1O1xuICAgIHQxID0gcmFkaXVzIC0gc3RlcCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgdDAgPSBjaXJjbGVSYWRpdXMoY29zUmFkaXVzLCB0MCk7XG4gICAgdDEgPSBjaXJjbGVSYWRpdXMoY29zUmFkaXVzLCB0MSk7XG4gICAgaWYgKGRpcmVjdGlvbiA+IDAgPyB0MCA8IHQxIDogdDAgPiB0MSkgdDAgKz0gZGlyZWN0aW9uICogdGF1O1xuICB9XG4gIGZvciAodmFyIHBvaW50LCB0ID0gdDA7IGRpcmVjdGlvbiA+IDAgPyB0ID4gdDEgOiB0IDwgdDE7IHQgLT0gc3RlcCkge1xuICAgIHBvaW50ID0gc3BoZXJpY2FsKFtjb3NSYWRpdXMsIC1zaW5SYWRpdXMgKiBjb3ModCksIC1zaW5SYWRpdXMgKiBzaW4odCldKTtcbiAgICBzdHJlYW0ucG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBzaWduZWQgYW5nbGUgb2YgYSBjYXJ0ZXNpYW4gcG9pbnQgcmVsYXRpdmUgdG8gW2Nvc1JhZGl1cywgMCwgMF0uXG5mdW5jdGlvbiBjaXJjbGVSYWRpdXMoY29zUmFkaXVzLCBwb2ludCkge1xuICBwb2ludCA9IGNhcnRlc2lhbihwb2ludCksIHBvaW50WzBdIC09IGNvc1JhZGl1cztcbiAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShwb2ludCk7XG4gIHZhciByYWRpdXMgPSBhY29zKC1wb2ludFsxXSk7XG4gIHJldHVybiAoKC1wb2ludFsyXSA8IDAgPyAtcmFkaXVzIDogcmFkaXVzKSArIHRhdSAtIGVwc2lsb24pICUgdGF1O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNlbnRlciA9IGNvbnN0YW50KFswLCAwXSksXG4gICAgICByYWRpdXMgPSBjb25zdGFudCg5MCksXG4gICAgICBwcmVjaXNpb24gPSBjb25zdGFudCg2KSxcbiAgICAgIHJpbmcsXG4gICAgICByb3RhdGUsXG4gICAgICBzdHJlYW0gPSB7cG9pbnQ6IHBvaW50fTtcblxuICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7XG4gICAgcmluZy5wdXNoKHggPSByb3RhdGUoeCwgeSkpO1xuICAgIHhbMF0gKj0gZGVncmVlcywgeFsxXSAqPSBkZWdyZWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gY2lyY2xlKCkge1xuICAgIHZhciBjID0gY2VudGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHIgPSByYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSAqIHJhZGlhbnMsXG4gICAgICAgIHAgPSBwcmVjaXNpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSAqIHJhZGlhbnM7XG4gICAgcmluZyA9IFtdO1xuICAgIHJvdGF0ZSA9IHJvdGF0ZVJhZGlhbnMoLWNbMF0gKiByYWRpYW5zLCAtY1sxXSAqIHJhZGlhbnMsIDApLmludmVydDtcbiAgICBjaXJjbGVTdHJlYW0oc3RyZWFtLCByLCBwLCAxKTtcbiAgICBjID0ge3R5cGU6IFwiUG9seWdvblwiLCBjb29yZGluYXRlczogW3JpbmddfTtcbiAgICByaW5nID0gcm90YXRlID0gbnVsbDtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGNpcmNsZS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2VudGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChbK19bMF0sICtfWzFdXSksIGNpcmNsZSkgOiBjZW50ZXI7XG4gIH07XG5cbiAgY2lyY2xlLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgY2lyY2xlKSA6IHJhZGl1cztcbiAgfTtcblxuICBjaXJjbGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByZWNpc2lvbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBjaXJjbGUpIDogcHJlY2lzaW9uO1xuICB9O1xuXG4gIHJldHVybiBjaXJjbGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/circle.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/antimeridian.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/antimeridian.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/clip/index.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -_math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi]\n));\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? _math_js__WEBPACK_IMPORTED_MODULE_1__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.pi,\n delta = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(lambda1 - lambda0);\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(delta - _math_js__WEBPACK_IMPORTED_MODULE_1__.pi) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= _math_js__WEBPACK_IMPORTED_MODULE_1__.pi) { // line crosses antimeridian\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(lambda0 - sign0) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) lambda0 -= sign0 * _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; // handle degeneracies\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(lambda1 - sign1) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) lambda1 -= sign1 * _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda0 - lambda1);\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(sinLambda0Lambda1) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon\n ? (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.atan)(((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi0) * (cosPhi1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi1)) * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda1)\n - (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi1) * (cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi0)) * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi;\n stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi);\n stream.point(0, phi);\n stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi);\n stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, 0);\n stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -phi);\n stream.point(0, -phi);\n stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -phi);\n stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, 0);\n stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi);\n } else if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(from[0] - to[0]) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) {\n var lambda = from[0] < to[0] ? _math_js__WEBPACK_IMPORTED_MODULE_1__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9hbnRpbWVyaWRpYW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQThCO0FBQ3NDOztBQUVwRSxpRUFBZSxxREFBSTtBQUNuQixlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBLElBQUksd0NBQUUsR0FBRyw0Q0FBTTtBQUNmLENBQUMsRUFBQzs7QUFFRjtBQUNBLHdDQUF3QyxzQkFBc0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnQ0FBZ0Msd0NBQUUsSUFBSSx3Q0FBRTtBQUN4QyxrQkFBa0IsNkNBQUc7QUFDckIsVUFBVSw2Q0FBRyxTQUFTLHdDQUFFLElBQUksNkNBQU8sSUFBSTtBQUN2Qyw2REFBNkQsNENBQU0sSUFBSSw0Q0FBTTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFDQUFxQyx3Q0FBRSxJQUFJO0FBQ25ELFlBQVksNkNBQUcsb0JBQW9CLDZDQUFPLHFCQUFxQiw2Q0FBTyxFQUFFO0FBQ3hFLFlBQVksNkNBQUcsb0JBQW9CLDZDQUFPLHFCQUFxQiw2Q0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNkNBQUc7QUFDN0IsU0FBUyw2Q0FBRyxzQkFBc0IsNkNBQU87QUFDekMsUUFBUSw4Q0FBSSxFQUFFLDZDQUFHLG9CQUFvQiw2Q0FBRyxVQUFVLDZDQUFHO0FBQ3JELFlBQVksNkNBQUcsb0JBQW9CLDZDQUFHLFVBQVUsNkNBQUc7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBTTtBQUM1QixrQkFBa0Isd0NBQUU7QUFDcEI7QUFDQSxpQkFBaUIsd0NBQUU7QUFDbkIsaUJBQWlCLHdDQUFFO0FBQ25CLGlCQUFpQix3Q0FBRTtBQUNuQjtBQUNBLGtCQUFrQix3Q0FBRTtBQUNwQixrQkFBa0Isd0NBQUU7QUFDcEIsa0JBQWtCLHdDQUFFO0FBQ3BCLElBQUksU0FBUyw2Q0FBRyxvQkFBb0IsNkNBQU87QUFDM0MsbUNBQW1DLHdDQUFFLElBQUksd0NBQUU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYW50aW1lcmlkaWFuLmpzP2NhZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsaXAgZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBhdGFuLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgcGksIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xpcChcbiAgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxuICBjbGlwQW50aW1lcmlkaWFuTGluZSxcbiAgY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlLFxuICBbLXBpLCAtaGFsZlBpXVxuKTtcblxuLy8gVGFrZXMgYSBsaW5lIGFuZCBjdXRzIGludG8gdmlzaWJsZSBzZWdtZW50cy4gUmV0dXJuIHZhbHVlczogMCAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMgb3IgdGhlIGxpbmUgd2FzIGVtcHR5OyAxIC0gbm8gaW50ZXJzZWN0aW9uczsgMiAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMsIGFuZCB0aGUgZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHMgc2hvdWxkIGJlIHJlam9pbmVkLlxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkxpbmUoc3RyZWFtKSB7XG4gIHZhciBsYW1iZGEwID0gTmFOLFxuICAgICAgcGhpMCA9IE5hTixcbiAgICAgIHNpZ24wID0gTmFOLFxuICAgICAgY2xlYW47IC8vIG5vIGludGVyc2VjdGlvbnNcblxuICByZXR1cm4ge1xuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICBjbGVhbiA9IDE7XG4gICAgfSxcbiAgICBwb2ludDogZnVuY3Rpb24obGFtYmRhMSwgcGhpMSkge1xuICAgICAgdmFyIHNpZ24xID0gbGFtYmRhMSA+IDAgPyBwaSA6IC1waSxcbiAgICAgICAgICBkZWx0YSA9IGFicyhsYW1iZGExIC0gbGFtYmRhMCk7XG4gICAgICBpZiAoYWJzKGRlbHRhIC0gcGkpIDwgZXBzaWxvbikgeyAvLyBsaW5lIGNyb3NzZXMgYSBwb2xlXG4gICAgICAgIHN0cmVhbS5wb2ludChsYW1iZGEwLCBwaGkwID0gKHBoaTAgKyBwaGkxKSAvIDIgPiAwID8gaGFsZlBpIDogLWhhbGZQaSk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMCwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24xLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KGxhbWJkYTEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHNpZ24wICE9PSBzaWduMSAmJiBkZWx0YSA+PSBwaSkgeyAvLyBsaW5lIGNyb3NzZXMgYW50aW1lcmlkaWFuXG4gICAgICAgIGlmIChhYnMobGFtYmRhMCAtIHNpZ24wKSA8IGVwc2lsb24pIGxhbWJkYTAgLT0gc2lnbjAgKiBlcHNpbG9uOyAvLyBoYW5kbGUgZGVnZW5lcmFjaWVzXG4gICAgICAgIGlmIChhYnMobGFtYmRhMSAtIHNpZ24xKSA8IGVwc2lsb24pIGxhbWJkYTEgLT0gc2lnbjEgKiBlcHNpbG9uO1xuICAgICAgICBwaGkwID0gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24wLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICBzdHJlYW0ucG9pbnQoc2lnbjEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9XG4gICAgICBzdHJlYW0ucG9pbnQobGFtYmRhMCA9IGxhbWJkYTEsIHBoaTAgPSBwaGkxKTtcbiAgICAgIHNpZ24wID0gc2lnbjE7XG4gICAgfSxcbiAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICBsYW1iZGEwID0gcGhpMCA9IE5hTjtcbiAgICB9LFxuICAgIGNsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAyIC0gY2xlYW47IC8vIGlmIGludGVyc2VjdGlvbnMsIHJlam9pbiBmaXJzdCBhbmQgbGFzdCBzZWdtZW50c1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKSB7XG4gIHZhciBjb3NQaGkwLFxuICAgICAgY29zUGhpMSxcbiAgICAgIHNpbkxhbWJkYTBMYW1iZGExID0gc2luKGxhbWJkYTAgLSBsYW1iZGExKTtcbiAgcmV0dXJuIGFicyhzaW5MYW1iZGEwTGFtYmRhMSkgPiBlcHNpbG9uXG4gICAgICA/IGF0YW4oKHNpbihwaGkwKSAqIChjb3NQaGkxID0gY29zKHBoaTEpKSAqIHNpbihsYW1iZGExKVxuICAgICAgICAgIC0gc2luKHBoaTEpICogKGNvc1BoaTAgPSBjb3MocGhpMCkpICogc2luKGxhbWJkYTApKVxuICAgICAgICAgIC8gKGNvc1BoaTAgKiBjb3NQaGkxICogc2luTGFtYmRhMExhbWJkYTEpKVxuICAgICAgOiAocGhpMCArIHBoaTEpIC8gMjtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rpb24sIHN0cmVhbSkge1xuICB2YXIgcGhpO1xuICBpZiAoZnJvbSA9PSBudWxsKSB7XG4gICAgcGhpID0gZGlyZWN0aW9uICogaGFsZlBpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludChwaSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCAtcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgcGhpKTtcbiAgfSBlbHNlIGlmIChhYnMoZnJvbVswXSAtIHRvWzBdKSA+IGVwc2lsb24pIHtcbiAgICB2YXIgbGFtYmRhID0gZnJvbVswXSA8IHRvWzBdID8gcGkgOiAtcGk7XG4gICAgcGhpID0gZGlyZWN0aW9uICogbGFtYmRhIC8gMjtcbiAgICBzdHJlYW0ucG9pbnQoLWxhbWJkYSwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/antimeridian.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/buffer.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/buffer.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9idWZmZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEI7O0FBRTlCLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhLGdEQUFJO0FBQ2pCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2J1ZmZlci5qcz83OTNkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbGluZXMgPSBbXSxcbiAgICAgIGxpbmU7XG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHksIG0pIHtcbiAgICAgIGxpbmUucHVzaChbeCwgeSwgbV0pO1xuICAgIH0sXG4gICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA9IFtdKTtcbiAgICB9LFxuICAgIGxpbmVFbmQ6IG5vb3AsXG4gICAgcmVqb2luOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpLmNvbmNhdChsaW5lcy5zaGlmdCgpKSk7XG4gICAgfSxcbiAgICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxpbmVzO1xuICAgICAgbGluZXMgPSBbXTtcbiAgICAgIGxpbmUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/buffer.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/circle.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/circle.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cartesian.js */ \"../../../node_modules/d3-geo/src/cartesian.js\");\n/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../circle.js */ \"../../../node_modules/d3-geo/src/circle.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _pointEqual_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pointEqual.js */ \"../../../node_modules/d3-geo/src/pointEqual.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/clip/index.js\");\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius) {\n var cr = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(radius),\n delta = 6 * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n smallRadius = cr > 0,\n notHemisphere = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(cr) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n (0,_circle_js__WEBPACK_IMPORTED_MODULE_1__.circleStream)(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? _math_js__WEBPACK_IMPORTED_MODULE_0__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_0__.pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || (0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(point0, point2) || (0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !(0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesian)(a),\n pb = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesian)(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(pa, pb),\n n2n2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(n1, n2),\n A = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(n1, c1),\n B = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(n2, c2);\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(A, u),\n uu = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(u, u),\n t2 = w * w - uu * ((0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(t2),\n q = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(u, (-w - t) / uu);\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(q, A);\n q = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon,\n meridian = polar || delta < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(q[0] - lambda0) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(u, (-w + t) / uu);\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(q1, A);\n return [q, (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : _math_js__WEBPACK_IMPORTED_MODULE_0__.pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-_math_js__WEBPACK_IMPORTED_MODULE_0__.pi, radius - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9jaXJjbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdIO0FBQzlFO0FBQ3NCO0FBQ3RCO0FBQ1o7O0FBRTlCLDZCQUFlLG9DQUFTO0FBQ3hCLFdBQVcsNkNBQUc7QUFDZCxrQkFBa0IsNkNBQU87QUFDekI7QUFDQSxzQkFBc0IsNkNBQUcsT0FBTyw2Q0FBTyxFQUFFOztBQUV6QztBQUNBLElBQUksd0RBQVk7QUFDaEI7O0FBRUE7QUFDQSxXQUFXLDZDQUFHLFdBQVcsNkNBQUc7QUFDNUI7O0FBRUE7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHdDQUFFLElBQUksd0NBQUU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDBEQUFVLG9CQUFvQiwwREFBVTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDBEQUFVO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsd0RBQVM7QUFDdEIsYUFBYSx3REFBUzs7QUFFdEI7QUFDQTtBQUNBO0FBQ0EsYUFBYSw2REFBYztBQUMzQixlQUFlLDJEQUFZO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLDZEQUFjO0FBQzlCLFlBQVksNkRBQWM7QUFDMUIsWUFBWSw2REFBYztBQUMxQixJQUFJLGtFQUFtQjs7QUFFdkI7QUFDQTtBQUNBLFlBQVksMkRBQVk7QUFDeEIsYUFBYSwyREFBWTtBQUN6QiwyQkFBMkIsMkRBQVk7O0FBRXZDOztBQUVBLFlBQVksOENBQUk7QUFDaEIsWUFBWSw2REFBYztBQUMxQixJQUFJLGtFQUFtQjtBQUN2QixRQUFRLHdEQUFTOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0IsNkNBQUcsU0FBUyx3Q0FBRSxJQUFJLDZDQUFPO0FBQ3pDLG9DQUFvQyw2Q0FBTzs7QUFFM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDZDQUFHLG1CQUFtQiw2Q0FBTztBQUNuRTtBQUNBLGtCQUFrQix3Q0FBRTtBQUNwQixlQUFlLDZEQUFjO0FBQzdCLE1BQU0sa0VBQW1CO0FBQ3pCLGlCQUFpQix3REFBUztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx3Q0FBRTtBQUNyQztBQUNBLGdDQUFnQztBQUNoQyxvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLGlDQUFpQztBQUNqQztBQUNBOztBQUVBLFNBQVMscURBQUksZ0VBQWdFLHdDQUFFLFdBQVcsd0NBQUU7QUFDNUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9jaXJjbGUuanM/MmJlYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQWRkSW5QbGFjZSwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbkRvdCwgY2FydGVzaWFuU2NhbGUsIHNwaGVyaWNhbH0gZnJvbSBcIi4uL2NhcnRlc2lhbi5qc1wiO1xuaW1wb3J0IHtjaXJjbGVTdHJlYW19IGZyb20gXCIuLi9jaXJjbGUuanNcIjtcbmltcG9ydCB7YWJzLCBjb3MsIGVwc2lsb24sIHBpLCByYWRpYW5zLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHBvaW50RXF1YWwgZnJvbSBcIi4uL3BvaW50RXF1YWwuanNcIjtcbmltcG9ydCBjbGlwIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cykge1xuICB2YXIgY3IgPSBjb3MocmFkaXVzKSxcbiAgICAgIGRlbHRhID0gNiAqIHJhZGlhbnMsXG4gICAgICBzbWFsbFJhZGl1cyA9IGNyID4gMCxcbiAgICAgIG5vdEhlbWlzcGhlcmUgPSBhYnMoY3IpID4gZXBzaWxvbjsgLy8gVE9ETyBvcHRpbWlzZSBmb3IgdGhpcyBjb21tb24gY2FzZVxuXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rpb24sIHN0cmVhbSkge1xuICAgIGNpcmNsZVN0cmVhbShzdHJlYW0sIHJhZGl1cywgZGVsdGEsIGRpcmVjdGlvbiwgZnJvbSwgdG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaWJsZShsYW1iZGEsIHBoaSkge1xuICAgIHJldHVybiBjb3MobGFtYmRhKSAqIGNvcyhwaGkpID4gY3I7XG4gIH1cblxuICAvLyBUYWtlcyBhIGxpbmUgYW5kIGN1dHMgaW50byB2aXNpYmxlIHNlZ21lbnRzLiBSZXR1cm4gdmFsdWVzIHVzZWQgZm9yIHBvbHlnb25cbiAgLy8gY2xpcHBpbmc6IDAgLSB0aGVyZSB3ZXJlIGludGVyc2VjdGlvbnMgb3IgdGhlIGxpbmUgd2FzIGVtcHR5OyAxIC0gbm9cbiAgLy8gaW50ZXJzZWN0aW9ucyAyIC0gdGhlcmUgd2VyZSBpbnRlcnNlY3Rpb25zLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IHNlZ21lbnRzXG4gIC8vIHNob3VsZCBiZSByZWpvaW5lZC5cbiAgZnVuY3Rpb24gY2xpcExpbmUoc3RyZWFtKSB7XG4gICAgdmFyIHBvaW50MCwgLy8gcHJldmlvdXMgcG9pbnRcbiAgICAgICAgYzAsIC8vIGNvZGUgZm9yIHByZXZpb3VzIHBvaW50XG4gICAgICAgIHYwLCAvLyB2aXNpYmlsaXR5IG9mIHByZXZpb3VzIHBvaW50XG4gICAgICAgIHYwMCwgLy8gdmlzaWJpbGl0eSBvZiBmaXJzdCBwb2ludFxuICAgICAgICBjbGVhbjsgLy8gbm8gaW50ZXJzZWN0aW9uc1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2MDAgPSB2MCA9IGZhbHNlO1xuICAgICAgICBjbGVhbiA9IDE7XG4gICAgICB9LFxuICAgICAgcG9pbnQ6IGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgICAgIHZhciBwb2ludDEgPSBbbGFtYmRhLCBwaGldLFxuICAgICAgICAgICAgcG9pbnQyLFxuICAgICAgICAgICAgdiA9IHZpc2libGUobGFtYmRhLCBwaGkpLFxuICAgICAgICAgICAgYyA9IHNtYWxsUmFkaXVzXG4gICAgICAgICAgICAgID8gdiA/IDAgOiBjb2RlKGxhbWJkYSwgcGhpKVxuICAgICAgICAgICAgICA6IHYgPyBjb2RlKGxhbWJkYSArIChsYW1iZGEgPCAwID8gcGkgOiAtcGkpLCBwaGkpIDogMDtcbiAgICAgICAgaWYgKCFwb2ludDAgJiYgKHYwMCA9IHYwID0gdikpIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgaWYgKHYgIT09IHYwKSB7XG4gICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTtcbiAgICAgICAgICBpZiAoIXBvaW50MiB8fCBwb2ludEVxdWFsKHBvaW50MCwgcG9pbnQyKSB8fCBwb2ludEVxdWFsKHBvaW50MSwgcG9pbnQyKSlcbiAgICAgICAgICAgIHBvaW50MVsyXSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYgIT09IHYwKSB7XG4gICAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIGdvaW5nIGluXG4gICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQxLCBwb2ludDApO1xuICAgICAgICAgICAgc3RyZWFtLnBvaW50KHBvaW50MlswXSwgcG9pbnQyWzFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW5zaWRlIGdvaW5nIG91dFxuICAgICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTtcbiAgICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDJbMF0sIHBvaW50MlsxXSwgMik7XG4gICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludDAgPSBwb2ludDI7XG4gICAgICAgIH0gZWxzZSBpZiAobm90SGVtaXNwaGVyZSAmJiBwb2ludDAgJiYgc21hbGxSYWRpdXMgXiB2KSB7XG4gICAgICAgICAgdmFyIHQ7XG4gICAgICAgICAgLy8gSWYgdGhlIGNvZGVzIGZvciB0d28gcG9pbnRzIGFyZSBkaWZmZXJlbnQsIG9yIGFyZSBib3RoIHplcm8sXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIHRoaXMgc2VnbWVudCBpbnRlcnNlY3RzIHdpdGggdGhlIHNtYWxsIGNpcmNsZS5cbiAgICAgICAgICBpZiAoIShjICYgYzApICYmICh0ID0gaW50ZXJzZWN0KHBvaW50MSwgcG9pbnQwLCB0cnVlKSkpIHtcbiAgICAgICAgICAgIGNsZWFuID0gMDtcbiAgICAgICAgICAgIGlmIChzbWFsbFJhZGl1cykge1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzBdWzBdLCB0WzBdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnBvaW50KHRbMV1bMF0sIHRbMV1bMV0pO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnBvaW50KHRbMV1bMF0sIHRbMV1bMV0pO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzBdWzBdLCB0WzBdWzFdLCAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYgJiYgKCFwb2ludDAgfHwgIXBvaW50RXF1YWwocG9pbnQwLCBwb2ludDEpKSkge1xuICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDFbMF0sIHBvaW50MVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnQwID0gcG9pbnQxLCB2MCA9IHYsIGMwID0gYztcbiAgICAgIH0sXG4gICAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHYwKSBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICBwb2ludDAgPSBudWxsO1xuICAgICAgfSxcbiAgICAgIC8vIFJlam9pbiBmaXJzdCBhbmQgbGFzdCBzZWdtZW50cyBpZiB0aGVyZSB3ZXJlIGludGVyc2VjdGlvbnMgYW5kIHRoZSBmaXJzdFxuICAgICAgLy8gYW5kIGxhc3QgcG9pbnRzIHdlcmUgdmlzaWJsZS5cbiAgICAgIGNsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFuIHwgKCh2MDAgJiYgdjApIDw8IDEpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcnNlY3RzIHRoZSBncmVhdCBjaXJjbGUgYmV0d2VlbiBhIGFuZCBiIHdpdGggdGhlIGNsaXAgY2lyY2xlLlxuICBmdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgdHdvKSB7XG4gICAgdmFyIHBhID0gY2FydGVzaWFuKGEpLFxuICAgICAgICBwYiA9IGNhcnRlc2lhbihiKTtcblxuICAgIC8vIFdlIGhhdmUgdHdvIHBsYW5lcywgbjEucCA9IGQxIGFuZCBuMi5wID0gZDIuXG4gICAgLy8gRmluZCBpbnRlcnNlY3Rpb24gbGluZSBwKHQpID0gYzEgbjEgKyBjMiBuMiArIHQgKG4xIOKoryBuMikuXG4gICAgdmFyIG4xID0gWzEsIDAsIDBdLCAvLyBub3JtYWxcbiAgICAgICAgbjIgPSBjYXJ0ZXNpYW5Dcm9zcyhwYSwgcGIpLFxuICAgICAgICBuMm4yID0gY2FydGVzaWFuRG90KG4yLCBuMiksXG4gICAgICAgIG4xbjIgPSBuMlswXSwgLy8gY2FydGVzaWFuRG90KG4xLCBuMiksXG4gICAgICAgIGRldGVybWluYW50ID0gbjJuMiAtIG4xbjIgKiBuMW4yO1xuXG4gICAgLy8gVHdvIHBvbGFyIHBvaW50cy5cbiAgICBpZiAoIWRldGVybWluYW50KSByZXR1cm4gIXR3byAmJiBhO1xuXG4gICAgdmFyIGMxID0gIGNyICogbjJuMiAvIGRldGVybWluYW50LFxuICAgICAgICBjMiA9IC1jciAqIG4xbjIgLyBkZXRlcm1pbmFudCxcbiAgICAgICAgbjF4bjIgPSBjYXJ0ZXNpYW5Dcm9zcyhuMSwgbjIpLFxuICAgICAgICBBID0gY2FydGVzaWFuU2NhbGUobjEsIGMxKSxcbiAgICAgICAgQiA9IGNhcnRlc2lhblNjYWxlKG4yLCBjMik7XG4gICAgY2FydGVzaWFuQWRkSW5QbGFjZShBLCBCKTtcblxuICAgIC8vIFNvbHZlIHxwKHQpfF4yID0gMS5cbiAgICB2YXIgdSA9IG4xeG4yLFxuICAgICAgICB3ID0gY2FydGVzaWFuRG90KEEsIHUpLFxuICAgICAgICB1dSA9IGNhcnRlc2lhbkRvdCh1LCB1KSxcbiAgICAgICAgdDIgPSB3ICogdyAtIHV1ICogKGNhcnRlc2lhbkRvdChBLCBBKSAtIDEpO1xuXG4gICAgaWYgKHQyIDwgMCkgcmV0dXJuO1xuXG4gICAgdmFyIHQgPSBzcXJ0KHQyKSxcbiAgICAgICAgcSA9IGNhcnRlc2lhblNjYWxlKHUsICgtdyAtIHQpIC8gdXUpO1xuICAgIGNhcnRlc2lhbkFkZEluUGxhY2UocSwgQSk7XG4gICAgcSA9IHNwaGVyaWNhbChxKTtcblxuICAgIGlmICghdHdvKSByZXR1cm4gcTtcblxuICAgIC8vIFR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAgIHZhciBsYW1iZGEwID0gYVswXSxcbiAgICAgICAgbGFtYmRhMSA9IGJbMF0sXG4gICAgICAgIHBoaTAgPSBhWzFdLFxuICAgICAgICBwaGkxID0gYlsxXSxcbiAgICAgICAgejtcblxuICAgIGlmIChsYW1iZGExIDwgbGFtYmRhMCkgeiA9IGxhbWJkYTAsIGxhbWJkYTAgPSBsYW1iZGExLCBsYW1iZGExID0gejtcblxuICAgIHZhciBkZWx0YSA9IGxhbWJkYTEgLSBsYW1iZGEwLFxuICAgICAgICBwb2xhciA9IGFicyhkZWx0YSAtIHBpKSA8IGVwc2lsb24sXG4gICAgICAgIG1lcmlkaWFuID0gcG9sYXIgfHwgZGVsdGEgPCBlcHNpbG9uO1xuXG4gICAgaWYgKCFwb2xhciAmJiBwaGkxIDwgcGhpMCkgeiA9IHBoaTAsIHBoaTAgPSBwaGkxLCBwaGkxID0gejtcblxuICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpcnN0IHBvaW50IGlzIGJldHdlZW4gYSBhbmQgYi5cbiAgICBpZiAobWVyaWRpYW5cbiAgICAgICAgPyBwb2xhclxuICAgICAgICAgID8gcGhpMCArIHBoaTEgPiAwIF4gcVsxXSA8IChhYnMocVswXSAtIGxhbWJkYTApIDwgZXBzaWxvbiA/IHBoaTAgOiBwaGkxKVxuICAgICAgICAgIDogcGhpMCA8PSBxWzFdICYmIHFbMV0gPD0gcGhpMVxuICAgICAgICA6IGRlbHRhID4gcGkgXiAobGFtYmRhMCA8PSBxWzBdICYmIHFbMF0gPD0gbGFtYmRhMSkpIHtcbiAgICAgIHZhciBxMSA9IGNhcnRlc2lhblNjYWxlKHUsICgtdyArIHQpIC8gdXUpO1xuICAgICAgY2FydGVzaWFuQWRkSW5QbGFjZShxMSwgQSk7XG4gICAgICByZXR1cm4gW3EsIHNwaGVyaWNhbChxMSldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlcyBhIDQtYml0IHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgcG9pbnQgcmVsYXRpdmUgdG9cbiAgLy8gdGhlIHNtYWxsIGNpcmNsZSdzIGJvdW5kaW5nIGJveC5cbiAgZnVuY3Rpb24gY29kZShsYW1iZGEsIHBoaSkge1xuICAgIHZhciByID0gc21hbGxSYWRpdXMgPyByYWRpdXMgOiBwaSAtIHJhZGl1cyxcbiAgICAgICAgY29kZSA9IDA7XG4gICAgaWYgKGxhbWJkYSA8IC1yKSBjb2RlIHw9IDE7IC8vIGxlZnRcbiAgICBlbHNlIGlmIChsYW1iZGEgPiByKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG4gICAgaWYgKHBoaSA8IC1yKSBjb2RlIHw9IDQ7IC8vIGJlbG93XG4gICAgZWxzZSBpZiAocGhpID4gcikgY29kZSB8PSA4OyAvLyBhYm92ZVxuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNsaXAodmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzbWFsbFJhZGl1cyA/IFswLCAtcmFkaXVzXSA6IFstcGksIHJhZGl1cyAtIHBpXSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/circle.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/extent.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/extent.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _rectangle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rectangle.js */ \"../../../node_modules/d3-geo/src/clip/rectangle.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = (0,_rectangle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9leHRlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkM7O0FBRTNDLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrREFBK0QseURBQWE7QUFDNUUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9leHRlbnQuanM/ZTEwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi9yZWN0YW5nbGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB5MCA9IDAsXG4gICAgICB4MSA9IDk2MCxcbiAgICAgIHkxID0gNTAwLFxuICAgICAgY2FjaGUsXG4gICAgICBjYWNoZVN0cmVhbSxcbiAgICAgIGNsaXA7XG5cbiAgcmV0dXJuIGNsaXAgPSB7XG4gICAgc3RyZWFtOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IGNsaXBSZWN0YW5nbGUoeDAsIHkwLCB4MSwgeTEpKGNhY2hlU3RyZWFtID0gc3RyZWFtKTtcbiAgICB9LFxuICAgIGV4dGVudDogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXVswXSwgeTAgPSArX1swXVsxXSwgeDEgPSArX1sxXVswXSwgeTEgPSArX1sxXVsxXSwgY2FjaGUgPSBjYWNoZVN0cmVhbSA9IG51bGwsIGNsaXApIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgfVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/extent.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/index.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buffer.js */ \"../../../node_modules/d3-geo/src/clip/buffer.js\");\n/* harmony import */ var _rejoin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin.js */ \"../../../node_modules/d3-geo/src/clip/rejoin.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _polygonContains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../polygonContains.js */ \"../../../node_modules/d3-geo/src/polygonContains.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/merge.js\");\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = (0,_buffer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = (0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(segments);\n var startInside = (0,_polygonContains_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n (0,_rejoin_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - _math_js__WEBPACK_IMPORTED_MODULE_4__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_4__.epsilon : _math_js__WEBPACK_IMPORTED_MODULE_4__.halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - _math_js__WEBPACK_IMPORTED_MODULE_4__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_4__.epsilon : _math_js__WEBPACK_IMPORTED_MODULE_4__.halfPi - b[1]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBcUM7QUFDQTtBQUNNO0FBQ1M7QUFDckI7O0FBRS9CLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQSxxQkFBcUIsc0RBQVU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvREFBSztBQUN4QiwwQkFBMEIsK0RBQWU7QUFDekM7QUFDQTtBQUNBLFVBQVUsc0RBQVU7QUFDcEIsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE9BQU87QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsNENBQU0sR0FBRyw2Q0FBTyxHQUFHLDRDQUFNO0FBQzdELG9DQUFvQyw0Q0FBTSxHQUFHLDZDQUFPLEdBQUcsNENBQU07QUFDN0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9pbmRleC5qcz83MzA2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGlwQnVmZmVyIGZyb20gXCIuL2J1ZmZlci5qc1wiO1xuaW1wb3J0IGNsaXBSZWpvaW4gZnJvbSBcIi4vcmVqb2luLmpzXCI7XG5pbXBvcnQge2Vwc2lsb24sIGhhbGZQaX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBwb2x5Z29uQ29udGFpbnMgZnJvbSBcIi4uL3BvbHlnb25Db250YWlucy5qc1wiO1xuaW1wb3J0IHttZXJnZX0gZnJvbSBcImQzLWFycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50VmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzdGFydCkge1xuICByZXR1cm4gZnVuY3Rpb24oc2luaykge1xuICAgIHZhciBsaW5lID0gY2xpcExpbmUoc2luayksXG4gICAgICAgIHJpbmdCdWZmZXIgPSBjbGlwQnVmZmVyKCksXG4gICAgICAgIHJpbmdTaW5rID0gY2xpcExpbmUocmluZ0J1ZmZlciksXG4gICAgICAgIHBvbHlnb25TdGFydGVkID0gZmFsc2UsXG4gICAgICAgIHBvbHlnb24sXG4gICAgICAgIHNlZ21lbnRzLFxuICAgICAgICByaW5nO1xuXG4gICAgdmFyIGNsaXAgPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnRSaW5nO1xuICAgICAgICBjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtcbiAgICAgICAgY2xpcC5saW5lRW5kID0gcmluZ0VuZDtcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgcG9seWdvbiA9IFtdO1xuICAgICAgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnQ7XG4gICAgICAgIGNsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBjbGlwLmxpbmVFbmQgPSBsaW5lRW5kO1xuICAgICAgICBzZWdtZW50cyA9IG1lcmdlKHNlZ21lbnRzKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5zaWRlID0gcG9seWdvbkNvbnRhaW5zKHBvbHlnb24sIHN0YXJ0KTtcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHNpbmspO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5zaWRlKSB7XG4gICAgICAgICAgaWYgKCFwb2x5Z29uU3RhcnRlZCkgc2luay5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgIHNpbmsubGluZVN0YXJ0KCk7XG4gICAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgc2luayk7XG4gICAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25FbmQoKSwgcG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzaW5rLnBvbHlnb25TdGFydCgpO1xuICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzaW5rKTtcbiAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIHNpbmsucG9seWdvbkVuZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgaWYgKHBvaW50VmlzaWJsZShsYW1iZGEsIHBoaSkpIHNpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50TGluZShsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZS5wb2ludChsYW1iZGEsIHBoaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcC5wb2ludCA9IHBvaW50TGluZTtcbiAgICAgIGxpbmUubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIGNsaXAucG9pbnQgPSBwb2ludDtcbiAgICAgIGxpbmUubGluZUVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50UmluZyhsYW1iZGEsIHBoaSkge1xuICAgICAgcmluZy5wdXNoKFtsYW1iZGEsIHBoaV0pO1xuICAgICAgcmluZ1NpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHtcbiAgICAgIHJpbmdTaW5rLmxpbmVTdGFydCgpO1xuICAgICAgcmluZyA9IFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICBwb2ludFJpbmcocmluZ1swXVswXSwgcmluZ1swXVsxXSk7XG4gICAgICByaW5nU2luay5saW5lRW5kKCk7XG5cbiAgICAgIHZhciBjbGVhbiA9IHJpbmdTaW5rLmNsZWFuKCksXG4gICAgICAgICAgcmluZ1NlZ21lbnRzID0gcmluZ0J1ZmZlci5yZXN1bHQoKSxcbiAgICAgICAgICBpLCBuID0gcmluZ1NlZ21lbnRzLmxlbmd0aCwgbSxcbiAgICAgICAgICBzZWdtZW50LFxuICAgICAgICAgIHBvaW50O1xuXG4gICAgICByaW5nLnBvcCgpO1xuICAgICAgcG9seWdvbi5wdXNoKHJpbmcpO1xuICAgICAgcmluZyA9IG51bGw7XG5cbiAgICAgIGlmICghbikgcmV0dXJuO1xuXG4gICAgICAvLyBObyBpbnRlcnNlY3Rpb25zLlxuICAgICAgaWYgKGNsZWFuICYgMSkge1xuICAgICAgICBzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO1xuICAgICAgICBpZiAoKG0gPSBzZWdtZW50Lmxlbmd0aCAtIDEpID4gMCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHNpbmsucG9pbnQoKHBvaW50ID0gc2VnbWVudFtpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgICBzaW5rLmxpbmVFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlam9pbiBjb25uZWN0ZWQgc2VnbWVudHMuXG4gICAgICAvLyBUT0RPIHJldXNlIHJpbmdCdWZmZXIucmVqb2luKCk/XG4gICAgICBpZiAobiA+IDEgJiYgY2xlYW4gJiAyKSByaW5nU2VnbWVudHMucHVzaChyaW5nU2VnbWVudHMucG9wKCkuY29uY2F0KHJpbmdTZWdtZW50cy5zaGlmdCgpKSk7XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLmZpbHRlcih2YWxpZFNlZ21lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID4gMTtcbn1cblxuLy8gSW50ZXJzZWN0aW9ucyBhcmUgc29ydGVkIGFsb25nIHRoZSBjbGlwIGVkZ2UuIEZvciBib3RoIGFudGltZXJpZGlhbiBjdXR0aW5nXG4vLyBhbmQgY2lyY2xlIGNsaXBwaW5nLCB0aGUgc2FtZSBjb21wYXJpc29uIGlzIHVzZWQuXG5mdW5jdGlvbiBjb21wYXJlSW50ZXJzZWN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuICgoYSA9IGEueClbMF0gPCAwID8gYVsxXSAtIGhhbGZQaSAtIGVwc2lsb24gOiBoYWxmUGkgLSBhWzFdKVxuICAgICAgIC0gKChiID0gYi54KVswXSA8IDAgPyBiWzFdIC0gaGFsZlBpIC0gZXBzaWxvbiA6IGhhbGZQaSAtIGJbMV0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/line.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/line.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9saW5lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2xpbmUuanM/MjM2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgdDAgPSAwLFxuICAgICAgdDEgPSAxLFxuICAgICAgZHggPSBieCAtIGF4LFxuICAgICAgZHkgPSBieSAtIGF5LFxuICAgICAgcjtcblxuICByID0geDAgLSBheDtcbiAgaWYgKCFkeCAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR4O1xuICBpZiAoZHggPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeCA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHgxIC0gYXg7XG4gIGlmICghZHggJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIHIgPSB5MCAtIGF5O1xuICBpZiAoIWR5ICYmIHIgPiAwKSByZXR1cm47XG4gIHIgLz0gZHk7XG4gIGlmIChkeSA8IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9IGVsc2UgaWYgKGR5ID4gMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH1cblxuICByID0geTEgLSBheTtcbiAgaWYgKCFkeSAmJiByIDwgMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9XG5cbiAgaWYgKHQwID4gMCkgYVswXSA9IGF4ICsgdDAgKiBkeCwgYVsxXSA9IGF5ICsgdDAgKiBkeTtcbiAgaWYgKHQxIDwgMSkgYlswXSA9IGF4ICsgdDEgKiBkeCwgYlsxXSA9IGF5ICsgdDEgKiBkeTtcbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/line.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/rectangle.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/rectangle.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ clipRectangle)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer.js */ \"../../../node_modules/d3-geo/src/clip/buffer.js\");\n/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./line.js */ \"../../../node_modules/d3-geo/src/clip/line.js\");\n/* harmony import */ var _rejoin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin.js */ \"../../../node_modules/d3-geo/src/clip/rejoin.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/merge.js\");\n\n\n\n\n\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(p[0] - x0) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon ? direction > 0 ? 0 : 3\n : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(p[0] - x1) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon ? direction > 0 ? 2 : 1\n : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(p[1] - y0) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = (0,_buffer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = (0,d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n (0,_rejoin_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if ((0,_line_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWN0YW5nbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdDO0FBQ0g7QUFDSjtBQUNJO0FBQ047O0FBRS9COztBQUVBO0FBQ0E7O0FBRWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsNkNBQUcsY0FBYyw2Q0FBTztBQUNuQyxVQUFVLDZDQUFHLGNBQWMsNkNBQU87QUFDbEMsVUFBVSw2Q0FBRyxjQUFjLDZDQUFPO0FBQ2xDLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsc0RBQVU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDLE9BQU87QUFDakQsbUhBQW1ILE9BQU87QUFDMUg7QUFDQSwwQkFBMEI7QUFDMUIsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msb0RBQUs7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsc0RBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG9EQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVjdGFuZ2xlLmpzP2Q5NGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthYnMsIGVwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQgY2xpcEJ1ZmZlciBmcm9tIFwiLi9idWZmZXIuanNcIjtcbmltcG9ydCBjbGlwTGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5pbXBvcnQgY2xpcFJlam9pbiBmcm9tIFwiLi9yZWpvaW4uanNcIjtcbmltcG9ydCB7bWVyZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuXG52YXIgY2xpcE1heCA9IDFlOSwgY2xpcE1pbiA9IC1jbGlwTWF4O1xuXG4vLyBUT0RPIFVzZSBkMy1wb2x5Z29u4oCZcyBwb2x5Z29uQ29udGFpbnMgaGVyZSBmb3IgdGhlIHJpbmcgY2hlY2s/XG4vLyBUT0RPIEVsaW1pbmF0ZSBkdXBsaWNhdGUgYnVmZmVyaW5nIGluIGNsaXBCdWZmZXIgYW5kIHBvbHlnb24ucHVzaD9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpcFJlY3RhbmdsZSh4MCwgeTAsIHgxLCB5MSkge1xuXG4gIGZ1bmN0aW9uIHZpc2libGUoeCwgeSkge1xuICAgIHJldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYgeTAgPD0geSAmJiB5IDw9IHkxO1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSwgdG8sIGRpcmVjdGlvbiwgc3RyZWFtKSB7XG4gICAgdmFyIGEgPSAwLCBhMSA9IDA7XG4gICAgaWYgKGZyb20gPT0gbnVsbFxuICAgICAgICB8fCAoYSA9IGNvcm5lcihmcm9tLCBkaXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLCBkaXJlY3Rpb24pKVxuICAgICAgICB8fCBjb21wYXJlUG9pbnQoZnJvbSwgdG8pIDwgMCBeIGRpcmVjdGlvbiA+IDApIHtcbiAgICAgIGRvIHN0cmVhbS5wb2ludChhID09PSAwIHx8IGEgPT09IDMgPyB4MCA6IHgxLCBhID4gMSA/IHkxIDogeTApO1xuICAgICAgd2hpbGUgKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcm5lcihwLCBkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gYWJzKHBbMF0gLSB4MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDAgOiAzXG4gICAgICAgIDogYWJzKHBbMF0gLSB4MSkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDIgOiAxXG4gICAgICAgIDogYWJzKHBbMV0gLSB5MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDEgOiAwXG4gICAgICAgIDogZGlyZWN0aW9uID4gMCA/IDMgOiAyOyAvLyBhYnMocFsxXSAtIHkxKSA8IGVwc2lsb25cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVJbnRlcnNlY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlUG9pbnQoYS54LCBiLngpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZVBvaW50KGEsIGIpIHtcbiAgICB2YXIgY2EgPSBjb3JuZXIoYSwgMSksXG4gICAgICAgIGNiID0gY29ybmVyKGIsIDEpO1xuICAgIHJldHVybiBjYSAhPT0gY2IgPyBjYSAtIGNiXG4gICAgICAgIDogY2EgPT09IDAgPyBiWzFdIC0gYVsxXVxuICAgICAgICA6IGNhID09PSAxID8gYVswXSAtIGJbMF1cbiAgICAgICAgOiBjYSA9PT0gMiA/IGFbMV0gLSBiWzFdXG4gICAgICAgIDogYlswXSAtIGFbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSxcbiAgICAgICAgYnVmZmVyU3RyZWFtID0gY2xpcEJ1ZmZlcigpLFxuICAgICAgICBzZWdtZW50cyxcbiAgICAgICAgcG9seWdvbixcbiAgICAgICAgcmluZyxcbiAgICAgICAgeF9fLCB5X18sIHZfXywgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgeF8sIHlfLCB2XywgLy8gcHJldmlvdXMgcG9pbnRcbiAgICAgICAgZmlyc3QsXG4gICAgICAgIGNsZWFuO1xuXG4gICAgdmFyIGNsaXBTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IHBvbHlnb25TdGFydCxcbiAgICAgIHBvbHlnb25FbmQ6IHBvbHlnb25FbmRcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgaWYgKHZpc2libGUoeCwgeSkpIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2x5Z29uSW5zaWRlKCkge1xuICAgICAgdmFyIHdpbmRpbmcgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIHJpbmcgPSBwb2x5Z29uW2ldLCBqID0gMSwgbSA9IHJpbmcubGVuZ3RoLCBwb2ludCA9IHJpbmdbMF0sIGEwLCBhMSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTsgaiA8IG07ICsraikge1xuICAgICAgICAgIGEwID0gYjAsIGExID0gYjEsIHBvaW50ID0gcmluZ1tqXSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTtcbiAgICAgICAgICBpZiAoYTEgPD0geTEpIHsgaWYgKGIxID4geTEgJiYgKGIwIC0gYTApICogKHkxIC0gYTEpID4gKGIxIC0gYTEpICogKHgwIC0gYTApKSArK3dpbmRpbmc7IH1cbiAgICAgICAgICBlbHNlIHsgaWYgKGIxIDw9IHkxICYmIChiMCAtIGEwKSAqICh5MSAtIGExKSA8IChiMSAtIGExKSAqICh4MCAtIGEwKSkgLS13aW5kaW5nOyB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpbmRpbmc7XG4gICAgfVxuXG4gICAgLy8gQnVmZmVyIGdlb21ldHJ5IHdpdGhpbiBhIHBvbHlnb24gYW5kIHRoZW4gY2xpcCBpdCBlbiBtYXNzZS5cbiAgICBmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKSB7XG4gICAgICBhY3RpdmVTdHJlYW0gPSBidWZmZXJTdHJlYW0sIHNlZ21lbnRzID0gW10sIHBvbHlnb24gPSBbXSwgY2xlYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvbHlnb25FbmQoKSB7XG4gICAgICB2YXIgc3RhcnRJbnNpZGUgPSBwb2x5Z29uSW5zaWRlKCksXG4gICAgICAgICAgY2xlYW5JbnNpZGUgPSBjbGVhbiAmJiBzdGFydEluc2lkZSxcbiAgICAgICAgICB2aXNpYmxlID0gKHNlZ21lbnRzID0gbWVyZ2Uoc2VnbWVudHMpKS5sZW5ndGg7XG4gICAgICBpZiAoY2xlYW5JbnNpZGUgfHwgdmlzaWJsZSkge1xuICAgICAgICBzdHJlYW0ucG9seWdvblN0YXJ0KCk7XG4gICAgICAgIGlmIChjbGVhbkluc2lkZSkge1xuICAgICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzdHJlYW0pO1xuICAgICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSwgc2VnbWVudHMgPSBwb2x5Z29uID0gcmluZyA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcFN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29uLnB1c2gocmluZyA9IFtdKTtcbiAgICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgIHZfID0gZmFsc2U7XG4gICAgICB4XyA9IHlfID0gTmFOO1xuICAgIH1cblxuICAgIC8vIFRPRE8gcmF0aGVyIHRoYW4gc3BlY2lhbC1jYXNlIHBvbHlnb25zLCBzaW1wbHkgaGFuZGxlIHRoZW0gc2VwYXJhdGVseS5cbiAgICAvLyBJZGVhbGx5LCBjb2luY2lkZW50IGludGVyc2VjdGlvbiBwb2ludHMgc2hvdWxkIGJlIGppdHRlcmVkIHRvIGF2b2lkXG4gICAgLy8gY2xpcHBpbmcgaXNzdWVzLlxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICBpZiAoc2VnbWVudHMpIHtcbiAgICAgICAgbGluZVBvaW50KHhfXywgeV9fKTtcbiAgICAgICAgaWYgKHZfXyAmJiB2XykgYnVmZmVyU3RyZWFtLnJlam9pbigpO1xuICAgICAgICBzZWdtZW50cy5wdXNoKGJ1ZmZlclN0cmVhbS5yZXN1bHQoKSk7XG4gICAgICB9XG4gICAgICBjbGlwU3RyZWFtLnBvaW50ID0gcG9pbnQ7XG4gICAgICBpZiAodl8pIGFjdGl2ZVN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KHgsIHkpIHtcbiAgICAgIHZhciB2ID0gdmlzaWJsZSh4LCB5KTtcbiAgICAgIGlmIChwb2x5Z29uKSByaW5nLnB1c2goW3gsIHldKTtcbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICB4X18gPSB4LCB5X18gPSB5LCB2X18gPSB2O1xuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICYmIHZfKSBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBhID0gW3hfID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeF8pKSwgeV8gPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB5XykpXSxcbiAgICAgICAgICAgICAgYiA9IFt4ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeCkpLCB5ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeSkpXTtcbiAgICAgICAgICBpZiAoY2xpcExpbmUoYSwgYiwgeDAsIHkwLCB4MSwgeTEpKSB7XG4gICAgICAgICAgICBpZiAoIXZfKSB7XG4gICAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGFbMF0sIGFbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGJbMF0sIGJbMV0pO1xuICAgICAgICAgICAgaWYgKCF2KSBhY3RpdmVTdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICAgICAgICAgIGNsZWFuID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB4XyA9IHgsIHlfID0geSwgdl8gPSB2O1xuICAgIH1cblxuICAgIHJldHVybiBjbGlwU3RyZWFtO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/rectangle.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/clip/rejoin.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/clip/rejoin.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _pointEqual_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pointEqual.js */ \"../../../node_modules/d3-geo/src/pointEqual.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if ((0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWpvaW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ1A7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSwwREFBVTtBQUNsQjtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNkNBQU87QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsT0FBTztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE9BQU87QUFDaEQsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0Esc0NBQXNDLFFBQVE7QUFDOUMsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVqb2luLmpzP2IzN2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvaW50RXF1YWwgZnJvbSBcIi4uL3BvaW50RXF1YWwuanNcIjtcbmltcG9ydCB7ZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZnVuY3Rpb24gSW50ZXJzZWN0aW9uKHBvaW50LCBwb2ludHMsIG90aGVyLCBlbnRyeSkge1xuICB0aGlzLnggPSBwb2ludDtcbiAgdGhpcy56ID0gcG9pbnRzO1xuICB0aGlzLm8gPSBvdGhlcjsgLy8gYW5vdGhlciBpbnRlcnNlY3Rpb25cbiAgdGhpcy5lID0gZW50cnk7IC8vIGlzIGFuIGVudHJ5P1xuICB0aGlzLnYgPSBmYWxzZTsgLy8gdmlzaXRlZFxuICB0aGlzLm4gPSB0aGlzLnAgPSBudWxsOyAvLyBuZXh0ICYgcHJldmlvdXNcbn1cblxuLy8gQSBnZW5lcmFsaXplZCBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobTogZ2l2ZW4gYSBwb2x5Z29uIHRoYXQgaGFzIGJlZW4gY3V0XG4vLyBpbnRvIGl0cyB2aXNpYmxlIGxpbmUgc2VnbWVudHMsIGFuZCByZWpvaW5zIHRoZSBzZWdtZW50cyBieSBpbnRlcnBvbGF0aW5nXG4vLyBhbG9uZyB0aGUgY2xpcCBlZGdlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VnbWVudHMsIGNvbXBhcmVJbnRlcnNlY3Rpb24sIHN0YXJ0SW5zaWRlLCBpbnRlcnBvbGF0ZSwgc3RyZWFtKSB7XG4gIHZhciBzdWJqZWN0ID0gW10sXG4gICAgICBjbGlwID0gW10sXG4gICAgICBpLFxuICAgICAgbjtcblxuICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNlZ21lbnQpIHtcbiAgICBpZiAoKG4gPSBzZWdtZW50Lmxlbmd0aCAtIDEpIDw9IDApIHJldHVybjtcbiAgICB2YXIgbiwgcDAgPSBzZWdtZW50WzBdLCBwMSA9IHNlZ21lbnRbbl0sIHg7XG5cbiAgICBpZiAocG9pbnRFcXVhbChwMCwgcDEpKSB7XG4gICAgICBpZiAoIXAwWzJdICYmICFwMVsyXSkge1xuICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHN0cmVhbS5wb2ludCgocDAgPSBzZWdtZW50W2ldKVswXSwgcDBbMV0pO1xuICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZGVnZW5lcmF0ZSBjYXNlcyBieSBtb3ZpbmcgdGhlIHBvaW50XG4gICAgICBwMVswXSArPSAyICogZXBzaWxvbjtcbiAgICB9XG5cbiAgICBzdWJqZWN0LnB1c2goeCA9IG5ldyBJbnRlcnNlY3Rpb24ocDAsIHNlZ21lbnQsIG51bGwsIHRydWUpKTtcbiAgICBjbGlwLnB1c2goeC5vID0gbmV3IEludGVyc2VjdGlvbihwMCwgbnVsbCwgeCwgZmFsc2UpKTtcbiAgICBzdWJqZWN0LnB1c2goeCA9IG5ldyBJbnRlcnNlY3Rpb24ocDEsIHNlZ21lbnQsIG51bGwsIGZhbHNlKSk7XG4gICAgY2xpcC5wdXNoKHgubyA9IG5ldyBJbnRlcnNlY3Rpb24ocDEsIG51bGwsIHgsIHRydWUpKTtcbiAgfSk7XG5cbiAgaWYgKCFzdWJqZWN0Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIGNsaXAuc29ydChjb21wYXJlSW50ZXJzZWN0aW9uKTtcbiAgbGluayhzdWJqZWN0KTtcbiAgbGluayhjbGlwKTtcblxuICBmb3IgKGkgPSAwLCBuID0gY2xpcC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBjbGlwW2ldLmUgPSBzdGFydEluc2lkZSA9ICFzdGFydEluc2lkZTtcbiAgfVxuXG4gIHZhciBzdGFydCA9IHN1YmplY3RbMF0sXG4gICAgICBwb2ludHMsXG4gICAgICBwb2ludDtcblxuICB3aGlsZSAoMSkge1xuICAgIC8vIEZpbmQgZmlyc3QgdW52aXNpdGVkIGludGVyc2VjdGlvbi5cbiAgICB2YXIgY3VycmVudCA9IHN0YXJ0LFxuICAgICAgICBpc1N1YmplY3QgPSB0cnVlO1xuICAgIHdoaWxlIChjdXJyZW50LnYpIGlmICgoY3VycmVudCA9IGN1cnJlbnQubikgPT09IHN0YXJ0KSByZXR1cm47XG4gICAgcG9pbnRzID0gY3VycmVudC56O1xuICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICBkbyB7XG4gICAgICBjdXJyZW50LnYgPSBjdXJyZW50Lm8udiA9IHRydWU7XG4gICAgICBpZiAoY3VycmVudC5lKSB7XG4gICAgICAgIGlmIChpc1N1YmplY3QpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gcG9pbnRzLmxlbmd0aDsgaSA8IG47ICsraSkgc3RyZWFtLnBvaW50KChwb2ludCA9IHBvaW50c1tpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJyZW50LngsIGN1cnJlbnQubi54LCAxLCBzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTdWJqZWN0KSB7XG4gICAgICAgICAgcG9pbnRzID0gY3VycmVudC5wLno7XG4gICAgICAgICAgZm9yIChpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBzdHJlYW0ucG9pbnQoKHBvaW50ID0gcG9pbnRzW2ldKVswXSwgcG9pbnRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVycG9sYXRlKGN1cnJlbnQueCwgY3VycmVudC5wLngsIC0xLCBzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnA7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5vO1xuICAgICAgcG9pbnRzID0gY3VycmVudC56O1xuICAgICAgaXNTdWJqZWN0ID0gIWlzU3ViamVjdDtcbiAgICB9IHdoaWxlICghY3VycmVudC52KTtcbiAgICBzdHJlYW0ubGluZUVuZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmsoYXJyYXkpIHtcbiAgaWYgKCEobiA9IGFycmF5Lmxlbmd0aCkpIHJldHVybjtcbiAgdmFyIG4sXG4gICAgICBpID0gMCxcbiAgICAgIGEgPSBhcnJheVswXSxcbiAgICAgIGI7XG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgYS5uID0gYiA9IGFycmF5W2ldO1xuICAgIGIucCA9IGE7XG4gICAgYSA9IGI7XG4gIH1cbiAgYS5uID0gYiA9IGFycmF5WzBdO1xuICBiLnAgPSBhO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/clip/rejoin.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/compose.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-geo/src/compose.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29tcG9zZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jb21wb3NlLmpzP2Q1MjciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoeCwgeSkge1xuICAgIHJldHVybiB4ID0gYSh4LCB5KSwgYih4WzBdLCB4WzFdKTtcbiAgfVxuXG4gIGlmIChhLmludmVydCAmJiBiLmludmVydCkgY29tcG9zZS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPSBiLmludmVydCh4LCB5KSwgeCAmJiBhLmludmVydCh4WzBdLCB4WzFdKTtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/compose.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/constant.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/constant.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29uc3RhbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbnN0YW50LmpzP2ExYTYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/contains.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/contains.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _polygonContains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./polygonContains.js */ \"../../../node_modules/d3-geo/src/polygonContains.js\");\n/* harmony import */ var _distance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./distance.js */ \"../../../node_modules/d3-geo/src/distance.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ao, bo, ab;\n for (var i = 0, n = coordinates.length; i < n; i++) {\n bo = (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(coordinates[i], point);\n if (bo === 0) return true;\n if (i > 0) {\n ab = (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(coordinates[i], coordinates[i - 1]);\n if (\n ab > 0 &&\n ao <= ab &&\n bo <= ab &&\n (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2 * ab\n )\n return true;\n }\n ao = bo;\n }\n return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!(0,_polygonContains_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29udGFpbnMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRTtBQUNkO0FBQ047O0FBRTVDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyx3REFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLE9BQU87QUFDakQsU0FBUyx3REFBUTtBQUNqQjtBQUNBO0FBQ0EsV0FBVyx3REFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCw4Q0FBUTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsK0RBQWU7QUFDMUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLDZDQUFPLGFBQWEsNkNBQU87QUFDaEQ7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29udGFpbnMuanM/MWVjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkNvbnRhaW5zfSBmcm9tIFwiLi9wb2x5Z29uQ29udGFpbnMuanNcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBkaXN0YW5jZX0gZnJvbSBcIi4vZGlzdGFuY2UuanNcIjtcbmltcG9ydCB7ZXBzaWxvbjIsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIGNvbnRhaW5zT2JqZWN0VHlwZSA9IHtcbiAgRmVhdHVyZTogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHJldHVybiBjb250YWluc0dlb21ldHJ5KG9iamVjdC5nZW9tZXRyeSwgcG9pbnQpO1xuICB9LFxuICBGZWF0dXJlQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBmZWF0dXJlcyA9IG9iamVjdC5mZWF0dXJlcywgaSA9IC0xLCBuID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNHZW9tZXRyeShmZWF0dXJlc1tpXS5nZW9tZXRyeSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBjb250YWluc0dlb21ldHJ5VHlwZSA9IHtcbiAgU3BoZXJlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNQb2ludChvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlQb2ludDogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNQb2ludChjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNMaW5lKG9iamVjdC5jb29yZGluYXRlcywgcG9pbnQpO1xuICB9LFxuICBNdWx0aUxpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zTGluZShjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIFBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNQb2x5Z29uKG9iamVjdC5jb29yZGluYXRlcywgcG9pbnQpO1xuICB9LFxuICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zUG9seWdvbihjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIEdlb21ldHJ5Q29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBnZW9tZXRyaWVzID0gb2JqZWN0Lmdlb21ldHJpZXMsIGkgPSAtMSwgbiA9IGdlb21ldHJpZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNHZW9tZXRyeShnZW9tZXRyaWVzW2ldLCBwb2ludCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY29udGFpbnNHZW9tZXRyeShnZW9tZXRyeSwgcG9pbnQpIHtcbiAgcmV0dXJuIGdlb21ldHJ5ICYmIGNvbnRhaW5zR2VvbWV0cnlUeXBlLmhhc093blByb3BlcnR5KGdlb21ldHJ5LnR5cGUpXG4gICAgICA/IGNvbnRhaW5zR2VvbWV0cnlUeXBlW2dlb21ldHJ5LnR5cGVdKGdlb21ldHJ5LCBwb2ludClcbiAgICAgIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9pbnQoY29vcmRpbmF0ZXMsIHBvaW50KSB7XG4gIHJldHVybiBkaXN0YW5jZShjb29yZGluYXRlcywgcG9pbnQpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb250YWluc0xpbmUoY29vcmRpbmF0ZXMsIHBvaW50KSB7XG4gIHZhciBhbywgYm8sIGFiO1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgIGJvID0gZGlzdGFuY2UoY29vcmRpbmF0ZXNbaV0sIHBvaW50KTtcbiAgICBpZiAoYm8gPT09IDApIHJldHVybiB0cnVlO1xuICAgIGlmIChpID4gMCkge1xuICAgICAgYWIgPSBkaXN0YW5jZShjb29yZGluYXRlc1tpXSwgY29vcmRpbmF0ZXNbaSAtIDFdKTtcbiAgICAgIGlmIChcbiAgICAgICAgYWIgPiAwICYmXG4gICAgICAgIGFvIDw9IGFiICYmXG4gICAgICAgIGJvIDw9IGFiICYmXG4gICAgICAgIChhbyArIGJvIC0gYWIpICogKDEgLSBNYXRoLnBvdygoYW8gLSBibykgLyBhYiwgMikpIDwgZXBzaWxvbjIgKiBhYlxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYW8gPSBibztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9seWdvbihjb29yZGluYXRlcywgcG9pbnQpIHtcbiAgcmV0dXJuICEhcG9seWdvbkNvbnRhaW5zKGNvb3JkaW5hdGVzLm1hcChyaW5nUmFkaWFucyksIHBvaW50UmFkaWFucyhwb2ludCkpO1xufVxuXG5mdW5jdGlvbiByaW5nUmFkaWFucyhyaW5nKSB7XG4gIHJldHVybiByaW5nID0gcmluZy5tYXAocG9pbnRSYWRpYW5zKSwgcmluZy5wb3AoKSwgcmluZztcbn1cblxuZnVuY3Rpb24gcG9pbnRSYWRpYW5zKHBvaW50KSB7XG4gIHJldHVybiBbcG9pbnRbMF0gKiByYWRpYW5zLCBwb2ludFsxXSAqIHJhZGlhbnNdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gIHJldHVybiAob2JqZWN0ICYmIGNvbnRhaW5zT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSlcbiAgICAgID8gY29udGFpbnNPYmplY3RUeXBlW29iamVjdC50eXBlXVxuICAgICAgOiBjb250YWluc0dlb21ldHJ5KShvYmplY3QsIHBvaW50KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/contains.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/distance.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/distance.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./length.js */ \"../../../node_modules/d3-geo/src/length.js\");\n\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return (0,_length_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZGlzdGFuY2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUM7O0FBRWpDO0FBQ0EsY0FBYzs7QUFFZCw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EsU0FBUyxzREFBTTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2Rpc3RhbmNlLmpzPzkxODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxlbmd0aCBmcm9tIFwiLi9sZW5ndGguanNcIjtcblxudmFyIGNvb3JkaW5hdGVzID0gW251bGwsIG51bGxdLFxuICAgIG9iamVjdCA9IHt0eXBlOiBcIkxpbmVTdHJpbmdcIiwgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzfTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICBjb29yZGluYXRlc1swXSA9IGE7XG4gIGNvb3JkaW5hdGVzWzFdID0gYjtcbiAgcmV0dXJuIGxlbmd0aChvYmplY3QpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/distance.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/graticule.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-geo/src/graticule.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ graticule),\n/* harmony export */ \"graticule10\": () => (/* binding */ graticule10)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/range.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\nfunction graticuleX(y0, y1, dy) {\n var y = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(y0, y1 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x0, x1 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(X0 / DX) * DX, X1, DX).map(X)\n .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(x0 / dx) * dx, x1, dx).filter(function(x) { return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(x % DX) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; }).map(x))\n .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(y0 / dy) * dy, y1, dy).filter(function(y) { return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(y % DY) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon], [180, 90 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon]])\n .extentMinor([[-180, -80 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon], [180, 80 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon]]);\n}\n\nfunction graticule10() {\n return graticule()();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZ3JhdGljdWxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDYzs7QUFFN0M7QUFDQSxVQUFVLG9EQUFLLFVBQVUsNkNBQU87QUFDaEMsdUJBQXVCLDJCQUEyQixnQkFBZ0I7QUFDbEU7O0FBRUE7QUFDQSxVQUFVLG9EQUFLLFVBQVUsNkNBQU87QUFDaEMsdUJBQXVCLDJCQUEyQixnQkFBZ0I7QUFDbEU7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0EsV0FBVyxvREFBSyxDQUFDLDhDQUFJO0FBQ3JCLGdCQUFnQixvREFBSyxDQUFDLDhDQUFJO0FBQzFCLGdCQUFnQixvREFBSyxDQUFDLDhDQUFJLDZDQUE2QyxPQUFPLDZDQUFHLFdBQVcsNkNBQU8sR0FBRztBQUN0RyxnQkFBZ0Isb0RBQUssQ0FBQyw4Q0FBSSw2Q0FBNkMsT0FBTyw2Q0FBRyxXQUFXLDZDQUFPLEdBQUc7QUFDdEc7O0FBRUE7QUFDQSwrQ0FBK0MsUUFBUSxnREFBZ0Q7QUFDdkc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyw2Q0FBTyxjQUFjLDZDQUFPO0FBQzdELGlDQUFpQyw2Q0FBTyxjQUFjLDZDQUFPO0FBQzdEOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ncmF0aWN1bGUuanM/ZTI2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YWJzLCBjZWlsLCBlcHNpbG9ufSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdyYXRpY3VsZVgoeTAsIHkxLCBkeSkge1xuICB2YXIgeSA9IHJhbmdlKHkwLCB5MSAtIGVwc2lsb24sIGR5KS5jb25jYXQoeTEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4geS5tYXAoZnVuY3Rpb24oeSkgeyByZXR1cm4gW3gsIHldOyB9KTsgfTtcbn1cblxuZnVuY3Rpb24gZ3JhdGljdWxlWSh4MCwgeDEsIGR4KSB7XG4gIHZhciB4ID0gcmFuZ2UoeDAsIHgxIC0gZXBzaWxvbiwgZHgpLmNvbmNhdCh4MSk7XG4gIHJldHVybiBmdW5jdGlvbih5KSB7IHJldHVybiB4Lm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBbeCwgeV07IH0pOyB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncmF0aWN1bGUoKSB7XG4gIHZhciB4MSwgeDAsIFgxLCBYMCxcbiAgICAgIHkxLCB5MCwgWTEsIFkwLFxuICAgICAgZHggPSAxMCwgZHkgPSBkeCwgRFggPSA5MCwgRFkgPSAzNjAsXG4gICAgICB4LCB5LCBYLCBZLFxuICAgICAgcHJlY2lzaW9uID0gMi41O1xuXG4gIGZ1bmN0aW9uIGdyYXRpY3VsZSgpIHtcbiAgICByZXR1cm4ge3R5cGU6IFwiTXVsdGlMaW5lU3RyaW5nXCIsIGNvb3JkaW5hdGVzOiBsaW5lcygpfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVzKCkge1xuICAgIHJldHVybiByYW5nZShjZWlsKFgwIC8gRFgpICogRFgsIFgxLCBEWCkubWFwKFgpXG4gICAgICAgIC5jb25jYXQocmFuZ2UoY2VpbChZMCAvIERZKSAqIERZLCBZMSwgRFkpLm1hcChZKSlcbiAgICAgICAgLmNvbmNhdChyYW5nZShjZWlsKHgwIC8gZHgpICogZHgsIHgxLCBkeCkuZmlsdGVyKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFicyh4ICUgRFgpID4gZXBzaWxvbjsgfSkubWFwKHgpKVxuICAgICAgICAuY29uY2F0KHJhbmdlKGNlaWwoeTAgLyBkeSkgKiBkeSwgeTEsIGR5KS5maWx0ZXIoZnVuY3Rpb24oeSkgeyByZXR1cm4gYWJzKHkgJSBEWSkgPiBlcHNpbG9uOyB9KS5tYXAoeSkpO1xuICB9XG5cbiAgZ3JhdGljdWxlLmxpbmVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxpbmVzKCkubWFwKGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7IHJldHVybiB7dHlwZTogXCJMaW5lU3RyaW5nXCIsIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc307IH0pO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5vdXRsaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxuICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgWChYMCkuY29uY2F0KFxuICAgICAgICBZKFkxKS5zbGljZSgxKSxcbiAgICAgICAgWChYMSkucmV2ZXJzZSgpLnNsaWNlKDEpLFxuICAgICAgICBZKFkwKS5yZXZlcnNlKCkuc2xpY2UoMSkpXG4gICAgICBdXG4gICAgfTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGdyYXRpY3VsZS5leHRlbnRNaW5vcigpO1xuICAgIHJldHVybiBncmF0aWN1bGUuZXh0ZW50TWFqb3IoXykuZXh0ZW50TWlub3IoXyk7XG4gIH07XG5cbiAgZ3JhdGljdWxlLmV4dGVudE1ham9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtbWDAsIFkwXSwgW1gxLCBZMV1dO1xuICAgIFgwID0gK19bMF1bMF0sIFgxID0gK19bMV1bMF07XG4gICAgWTAgPSArX1swXVsxXSwgWTEgPSArX1sxXVsxXTtcbiAgICBpZiAoWDAgPiBYMSkgXyA9IFgwLCBYMCA9IFgxLCBYMSA9IF87XG4gICAgaWYgKFkwID4gWTEpIF8gPSBZMCwgWTAgPSBZMSwgWTEgPSBfO1xuICAgIHJldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7XG4gIH07XG5cbiAgZ3JhdGljdWxlLmV4dGVudE1pbm9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICAgIHgwID0gK19bMF1bMF0sIHgxID0gK19bMV1bMF07XG4gICAgeTAgPSArX1swXVsxXSwgeTEgPSArX1sxXVsxXTtcbiAgICBpZiAoeDAgPiB4MSkgXyA9IHgwLCB4MCA9IHgxLCB4MSA9IF87XG4gICAgaWYgKHkwID4geTEpIF8gPSB5MCwgeTAgPSB5MSwgeTEgPSBfO1xuICAgIHJldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7XG4gIH07XG5cbiAgZ3JhdGljdWxlLnN0ZXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3JhdGljdWxlLnN0ZXBNaW5vcigpO1xuICAgIHJldHVybiBncmF0aWN1bGUuc3RlcE1ham9yKF8pLnN0ZXBNaW5vcihfKTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcE1ham9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtEWCwgRFldO1xuICAgIERYID0gK19bMF0sIERZID0gK19bMV07XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcE1pbm9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIGR4ID0gK19bMF0sIGR5ID0gK19bMV07XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICBncmF0aWN1bGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHByZWNpc2lvbjtcbiAgICBwcmVjaXNpb24gPSArXztcbiAgICB4ID0gZ3JhdGljdWxlWCh5MCwgeTEsIDkwKTtcbiAgICB5ID0gZ3JhdGljdWxlWSh4MCwgeDEsIHByZWNpc2lvbik7XG4gICAgWCA9IGdyYXRpY3VsZVgoWTAsIFkxLCA5MCk7XG4gICAgWSA9IGdyYXRpY3VsZVkoWDAsIFgxLCBwcmVjaXNpb24pO1xuICAgIHJldHVybiBncmF0aWN1bGU7XG4gIH07XG5cbiAgcmV0dXJuIGdyYXRpY3VsZVxuICAgICAgLmV4dGVudE1ham9yKFtbLTE4MCwgLTkwICsgZXBzaWxvbl0sIFsxODAsIDkwIC0gZXBzaWxvbl1dKVxuICAgICAgLmV4dGVudE1pbm9yKFtbLTE4MCwgLTgwIC0gZXBzaWxvbl0sIFsxODAsIDgwICsgZXBzaWxvbl1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXRpY3VsZTEwKCkge1xuICByZXR1cm4gZ3JhdGljdWxlKCkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/graticule.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/identity.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/identity.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaWRlbnRpdHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9pZGVudGl0eS5qcz8zNGY4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHggPT4geDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/index.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-geo/src/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"geoAlbers\": () => (/* reexport safe */ _projection_albers_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"geoAlbersUsa\": () => (/* reexport safe */ _projection_albersUsa_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"geoArea\": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"geoAzimuthalEqualArea\": () => (/* reexport safe */ _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"geoAzimuthalEqualAreaRaw\": () => (/* reexport safe */ _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__.azimuthalEqualAreaRaw),\n/* harmony export */ \"geoAzimuthalEquidistant\": () => (/* reexport safe */ _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"geoAzimuthalEquidistantRaw\": () => (/* reexport safe */ _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__.azimuthalEquidistantRaw),\n/* harmony export */ \"geoBounds\": () => (/* reexport safe */ _bounds_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"geoCentroid\": () => (/* reexport safe */ _centroid_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"geoCircle\": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"geoClipAntimeridian\": () => (/* reexport safe */ _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"geoClipCircle\": () => (/* reexport safe */ _clip_circle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"geoClipExtent\": () => (/* reexport safe */ _clip_extent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"geoClipRectangle\": () => (/* reexport safe */ _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"geoConicConformal\": () => (/* reexport safe */ _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"geoConicConformalRaw\": () => (/* reexport safe */ _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__.conicConformalRaw),\n/* harmony export */ \"geoConicEqualArea\": () => (/* reexport safe */ _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]),\n/* harmony export */ \"geoConicEqualAreaRaw\": () => (/* reexport safe */ _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__.conicEqualAreaRaw),\n/* harmony export */ \"geoConicEquidistant\": () => (/* reexport safe */ _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]),\n/* harmony export */ \"geoConicEquidistantRaw\": () => (/* reexport safe */ _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__.conicEquidistantRaw),\n/* harmony export */ \"geoContains\": () => (/* reexport safe */ _contains_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"geoDistance\": () => (/* reexport safe */ _distance_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"geoEqualEarth\": () => (/* reexport safe */ _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"]),\n/* harmony export */ \"geoEqualEarthRaw\": () => (/* reexport safe */ _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__.equalEarthRaw),\n/* harmony export */ \"geoEquirectangular\": () => (/* reexport safe */ _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]),\n/* harmony export */ \"geoEquirectangularRaw\": () => (/* reexport safe */ _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__.equirectangularRaw),\n/* harmony export */ \"geoGnomonic\": () => (/* reexport safe */ _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"]),\n/* harmony export */ \"geoGnomonicRaw\": () => (/* reexport safe */ _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__.gnomonicRaw),\n/* harmony export */ \"geoGraticule\": () => (/* reexport safe */ _graticule_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"geoGraticule10\": () => (/* reexport safe */ _graticule_js__WEBPACK_IMPORTED_MODULE_10__.graticule10),\n/* harmony export */ \"geoIdentity\": () => (/* reexport safe */ _projection_identity_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"]),\n/* harmony export */ \"geoInterpolate\": () => (/* reexport safe */ _interpolate_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"geoLength\": () => (/* reexport safe */ _length_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"geoMercator\": () => (/* reexport safe */ _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"]),\n/* harmony export */ \"geoMercatorRaw\": () => (/* reexport safe */ _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__.mercatorRaw),\n/* harmony export */ \"geoNaturalEarth1\": () => (/* reexport safe */ _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"geoNaturalEarth1Raw\": () => (/* reexport safe */ _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__.naturalEarth1Raw),\n/* harmony export */ \"geoOrthographic\": () => (/* reexport safe */ _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"geoOrthographicRaw\": () => (/* reexport safe */ _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__.orthographicRaw),\n/* harmony export */ \"geoPath\": () => (/* reexport safe */ _path_index_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"geoProjection\": () => (/* reexport safe */ _projection_index_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"]),\n/* harmony export */ \"geoProjectionMutator\": () => (/* reexport safe */ _projection_index_js__WEBPACK_IMPORTED_MODULE_25__.projectionMutator),\n/* harmony export */ \"geoRotation\": () => (/* reexport safe */ _rotation_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"]),\n/* harmony export */ \"geoStereographic\": () => (/* reexport safe */ _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"geoStereographicRaw\": () => (/* reexport safe */ _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__.stereographicRaw),\n/* harmony export */ \"geoStream\": () => (/* reexport safe */ _stream_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"]),\n/* harmony export */ \"geoTransform\": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]),\n/* harmony export */ \"geoTransverseMercator\": () => (/* reexport safe */ _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"]),\n/* harmony export */ \"geoTransverseMercatorRaw\": () => (/* reexport safe */ _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__.transverseMercatorRaw)\n/* harmony export */ });\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-geo/src/area.js\");\n/* harmony import */ var _bounds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bounds.js */ \"../../../node_modules/d3-geo/src/bounds.js\");\n/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./centroid.js */ \"../../../node_modules/d3-geo/src/centroid.js\");\n/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./circle.js */ \"../../../node_modules/d3-geo/src/circle.js\");\n/* harmony import */ var _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clip/antimeridian.js */ \"../../../node_modules/d3-geo/src/clip/antimeridian.js\");\n/* harmony import */ var _clip_circle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./clip/circle.js */ \"../../../node_modules/d3-geo/src/clip/circle.js\");\n/* harmony import */ var _clip_extent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clip/extent.js */ \"../../../node_modules/d3-geo/src/clip/extent.js\");\n/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./clip/rectangle.js */ \"../../../node_modules/d3-geo/src/clip/rectangle.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./contains.js */ \"../../../node_modules/d3-geo/src/contains.js\");\n/* harmony import */ var _distance_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./distance.js */ \"../../../node_modules/d3-geo/src/distance.js\");\n/* harmony import */ var _graticule_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./graticule.js */ \"../../../node_modules/d3-geo/src/graticule.js\");\n/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./interpolate.js */ \"../../../node_modules/d3-geo/src/interpolate.js\");\n/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./length.js */ \"../../../node_modules/d3-geo/src/length.js\");\n/* harmony import */ var _path_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./path/index.js */ \"../../../node_modules/d3-geo/src/path/index.js\");\n/* harmony import */ var _projection_albers_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./projection/albers.js */ \"../../../node_modules/d3-geo/src/projection/albers.js\");\n/* harmony import */ var _projection_albersUsa_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./projection/albersUsa.js */ \"../../../node_modules/d3-geo/src/projection/albersUsa.js\");\n/* harmony import */ var _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./projection/azimuthalEqualArea.js */ \"../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js\");\n/* harmony import */ var _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./projection/azimuthalEquidistant.js */ \"../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js\");\n/* harmony import */ var _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./projection/conicConformal.js */ \"../../../node_modules/d3-geo/src/projection/conicConformal.js\");\n/* harmony import */ var _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./projection/conicEqualArea.js */ \"../../../node_modules/d3-geo/src/projection/conicEqualArea.js\");\n/* harmony import */ var _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./projection/conicEquidistant.js */ \"../../../node_modules/d3-geo/src/projection/conicEquidistant.js\");\n/* harmony import */ var _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./projection/equalEarth.js */ \"../../../node_modules/d3-geo/src/projection/equalEarth.js\");\n/* harmony import */ var _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./projection/equirectangular.js */ \"../../../node_modules/d3-geo/src/projection/equirectangular.js\");\n/* harmony import */ var _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./projection/gnomonic.js */ \"../../../node_modules/d3-geo/src/projection/gnomonic.js\");\n/* harmony import */ var _projection_identity_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./projection/identity.js */ \"../../../node_modules/d3-geo/src/projection/identity.js\");\n/* harmony import */ var _projection_index_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./projection/index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n/* harmony import */ var _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./projection/mercator.js */ \"../../../node_modules/d3-geo/src/projection/mercator.js\");\n/* harmony import */ var _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./projection/naturalEarth1.js */ \"../../../node_modules/d3-geo/src/projection/naturalEarth1.js\");\n/* harmony import */ var _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./projection/orthographic.js */ \"../../../node_modules/d3-geo/src/projection/orthographic.js\");\n/* harmony import */ var _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./projection/stereographic.js */ \"../../../node_modules/d3-geo/src/projection/stereographic.js\");\n/* harmony import */ var _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./projection/transverseMercator.js */ \"../../../node_modules/d3-geo/src/projection/transverseMercator.js\");\n/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rotation.js */ \"../../../node_modules/d3-geo/src/rotation.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./transform.js */ \"../../../node_modules/d3-geo/src/transform.js\");\n\n\n\n\n\n\n // DEPRECATED! Use d3.geoIdentity().clipExtent(…).\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNkM7QUFDSTtBQUNJO0FBQ0o7QUFDcUI7QUFDWjtBQUNBLENBQUM7QUFDSztBQUNYO0FBQ0E7QUFDaUM7QUFDM0I7QUFDVjtBQUNFO0FBQ1M7QUFDTTtBQUNxRTtBQUNRO0FBQ3hCO0FBQ0E7QUFDUTtBQUN4QjtBQUNvQjtBQUM1QjtBQUMvQjtBQUMwQztBQUNYO0FBQ29CO0FBQ0o7QUFDSTtBQUNvQjtBQUNsRjtBQUNKO0FBQ00iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW5kZXguanM/ZGExYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgZ2VvQXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0JvdW5kc30gZnJvbSBcIi4vYm91bmRzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2VudHJvaWR9IGZyb20gXCIuL2NlbnRyb2lkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2lyY2xlfSBmcm9tIFwiLi9jaXJjbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DbGlwQW50aW1lcmlkaWFufSBmcm9tIFwiLi9jbGlwL2FudGltZXJpZGlhbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBDaXJjbGV9IGZyb20gXCIuL2NsaXAvY2lyY2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcEV4dGVudH0gZnJvbSBcIi4vY2xpcC9leHRlbnQuanNcIjsgLy8gREVQUkVDQVRFRCEgVXNlIGQzLmdlb0lkZW50aXR5KCkuY2xpcEV4dGVudCjigKYpLlxuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBSZWN0YW5nbGV9IGZyb20gXCIuL2NsaXAvcmVjdGFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29udGFpbnN9IGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvRGlzdGFuY2V9IGZyb20gXCIuL2Rpc3RhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvR3JhdGljdWxlLCBncmF0aWN1bGUxMCBhcyBnZW9HcmF0aWN1bGUxMH0gZnJvbSBcIi4vZ3JhdGljdWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvSW50ZXJwb2xhdGV9IGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTGVuZ3RofSBmcm9tIFwiLi9sZW5ndGguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9QYXRofSBmcm9tIFwiLi9wYXRoL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQWxiZXJzfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2FsYmVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0FsYmVyc1VzYX0gZnJvbSBcIi4vcHJvamVjdGlvbi9hbGJlcnNVc2EuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BemltdXRoYWxFcXVhbEFyZWEsIGF6aW11dGhhbEVxdWFsQXJlYVJhdyBhcyBnZW9BemltdXRoYWxFcXVhbEFyZWFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQsIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3IGFzIGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWlkaXN0YW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNDb25mb3JtYWwsIGNvbmljQ29uZm9ybWFsUmF3IGFzIGdlb0NvbmljQ29uZm9ybWFsUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljQ29uZm9ybWFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNFcXVhbEFyZWEsIGNvbmljRXF1YWxBcmVhUmF3IGFzIGdlb0NvbmljRXF1YWxBcmVhUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljRXF1YWxBcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNFcXVpZGlzdGFudCwgY29uaWNFcXVpZGlzdGFudFJhdyBhcyBnZW9Db25pY0VxdWlkaXN0YW50UmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljRXF1aWRpc3RhbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9FcXVhbEVhcnRoLCBlcXVhbEVhcnRoUmF3IGFzIGdlb0VxdWFsRWFydGhSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vZXF1YWxFYXJ0aC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0VxdWlyZWN0YW5ndWxhciwgZXF1aXJlY3Rhbmd1bGFyUmF3IGFzIGdlb0VxdWlyZWN0YW5ndWxhclJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9lcXVpcmVjdGFuZ3VsYXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Hbm9tb25pYywgZ25vbW9uaWNSYXcgYXMgZ2VvR25vbW9uaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vZ25vbW9uaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9JZGVudGl0eX0gZnJvbSBcIi4vcHJvamVjdGlvbi9pZGVudGl0eS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1Byb2plY3Rpb24sIHByb2plY3Rpb25NdXRhdG9yIGFzIGdlb1Byb2plY3Rpb25NdXRhdG9yfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTWVyY2F0b3IsIG1lcmNhdG9yUmF3IGFzIGdlb01lcmNhdG9yUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL21lcmNhdG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTmF0dXJhbEVhcnRoMSwgbmF0dXJhbEVhcnRoMVJhdyBhcyBnZW9OYXR1cmFsRWFydGgxUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9PcnRob2dyYXBoaWMsIG9ydGhvZ3JhcGhpY1JhdyBhcyBnZW9PcnRob2dyYXBoaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vb3J0aG9ncmFwaGljLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvU3RlcmVvZ3JhcGhpYywgc3RlcmVvZ3JhcGhpY1JhdyBhcyBnZW9TdGVyZW9ncmFwaGljUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL3N0ZXJlb2dyYXBoaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9UcmFuc3ZlcnNlTWVyY2F0b3IsIHRyYW5zdmVyc2VNZXJjYXRvclJhdyBhcyBnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvUm90YXRpb259IGZyb20gXCIuL3JvdGF0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvU3RyZWFtfSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9UcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/interpolate.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/interpolate.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var x0 = a[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n y0 = a[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n x1 = b[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n y1 = b[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians,\n cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0),\n sy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0),\n cy1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y1),\n sy1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y1),\n kx0 = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x0),\n ky0 = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x0),\n kx1 = cy1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x1),\n ky1 = cy1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x1),\n d = 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.haversin)(y1 - y0) + cy0 * cy1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.haversin)(x1 - x0))),\n k = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(d);\n\n var interpolate = d ? function(t) {\n var B = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(t *= d) / k,\n A = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y, x) * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees,\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(z, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x * x + y * y)) * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees\n ];\n } : function() {\n return [x0 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, y0 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW50ZXJwb2xhdGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0Y7O0FBRWxGLDZCQUFlLG9DQUFTO0FBQ3hCLGtCQUFrQiw2Q0FBTztBQUN6QixrQkFBa0IsNkNBQU87QUFDekIsa0JBQWtCLDZDQUFPO0FBQ3pCLGtCQUFrQiw2Q0FBTztBQUN6QixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2Ysa0JBQWtCLDZDQUFHO0FBQ3JCLGtCQUFrQiw2Q0FBRztBQUNyQixrQkFBa0IsNkNBQUc7QUFDckIsa0JBQWtCLDZDQUFHO0FBQ3JCLGNBQWMsOENBQUksQ0FBQyw4Q0FBSSxDQUFDLGtEQUFRLHdCQUF3QixrREFBUTtBQUNoRSxVQUFVLDZDQUFHOztBQUViO0FBQ0EsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sK0NBQUssU0FBUyw2Q0FBTztBQUMzQixNQUFNLCtDQUFLLElBQUksOENBQUksbUJBQW1CLDZDQUFPO0FBQzdDO0FBQ0EsSUFBSTtBQUNKLGlCQUFpQiw2Q0FBTyxPQUFPLDZDQUFPO0FBQ3RDOztBQUVBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW50ZXJwb2xhdGUuanM/NGRkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIGRlZ3JlZXMsIGhhdmVyc2luLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgeDAgPSBhWzBdICogcmFkaWFucyxcbiAgICAgIHkwID0gYVsxXSAqIHJhZGlhbnMsXG4gICAgICB4MSA9IGJbMF0gKiByYWRpYW5zLFxuICAgICAgeTEgPSBiWzFdICogcmFkaWFucyxcbiAgICAgIGN5MCA9IGNvcyh5MCksXG4gICAgICBzeTAgPSBzaW4oeTApLFxuICAgICAgY3kxID0gY29zKHkxKSxcbiAgICAgIHN5MSA9IHNpbih5MSksXG4gICAgICBreDAgPSBjeTAgKiBjb3MoeDApLFxuICAgICAga3kwID0gY3kwICogc2luKHgwKSxcbiAgICAgIGt4MSA9IGN5MSAqIGNvcyh4MSksXG4gICAgICBreTEgPSBjeTEgKiBzaW4oeDEpLFxuICAgICAgZCA9IDIgKiBhc2luKHNxcnQoaGF2ZXJzaW4oeTEgLSB5MCkgKyBjeTAgKiBjeTEgKiBoYXZlcnNpbih4MSAtIHgwKSkpLFxuICAgICAgayA9IHNpbihkKTtcblxuICB2YXIgaW50ZXJwb2xhdGUgPSBkID8gZnVuY3Rpb24odCkge1xuICAgIHZhciBCID0gc2luKHQgKj0gZCkgLyBrLFxuICAgICAgICBBID0gc2luKGQgLSB0KSAvIGssXG4gICAgICAgIHggPSBBICoga3gwICsgQiAqIGt4MSxcbiAgICAgICAgeSA9IEEgKiBreTAgKyBCICoga3kxLFxuICAgICAgICB6ID0gQSAqIHN5MCArIEIgKiBzeTE7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHksIHgpICogZGVncmVlcyxcbiAgICAgIGF0YW4yKHosIHNxcnQoeCAqIHggKyB5ICogeSkpICogZGVncmVlc1xuICAgIF07XG4gIH0gOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW3gwICogZGVncmVlcywgeTAgKiBkZWdyZWVzXTtcbiAgfTtcblxuICBpbnRlcnBvbGF0ZS5kaXN0YW5jZSA9IGQ7XG5cbiAgcmV0dXJuIGludGVycG9sYXRlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/interpolate.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/length.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-geo/src/length.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n\n\n\n\n\nvar lengthSum,\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n point: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineStart: lengthLineStart,\n lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n polygonStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n polygonEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n lambda0 = lambda, sinPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi), cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians;\n var sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi),\n cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi),\n delta = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(lambda - lambda0),\n cosDelta = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(delta),\n sinDelta = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.atan2)((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) {\n lengthSum = new d3_array__WEBPACK_IMPORTED_MODULE_2__.Adder();\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object, lengthStream);\n return +lengthSum;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQStCO0FBQytCO0FBQ2pDO0FBQ0k7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxnREFBSTtBQUNkLFNBQVMsZ0RBQUk7QUFDYjtBQUNBLFdBQVcsZ0RBQUk7QUFDZixnQkFBZ0IsZ0RBQUk7QUFDcEIsY0FBYyxnREFBSTtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxnREFBSTtBQUNsRDs7QUFFQTtBQUNBLFlBQVksNkNBQU8sU0FBUyw2Q0FBTztBQUNuQyw4QkFBOEIsNkNBQUcsaUJBQWlCLDZDQUFHO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLDZDQUFPLFNBQVMsNkNBQU87QUFDbkMsZUFBZSw2Q0FBRztBQUNsQixlQUFlLDZDQUFHO0FBQ2xCLGNBQWMsNkNBQUc7QUFDakIsaUJBQWlCLDZDQUFHO0FBQ3BCLGlCQUFpQiw2Q0FBRztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0NBQUssQ0FBQyw4Q0FBSTtBQUMxQjtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCLGtCQUFrQiwyQ0FBSztBQUN2QixFQUFFLHNEQUFNO0FBQ1I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9sZW5ndGguanM/NGM1YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FkZGVyfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YWJzLCBhdGFuMiwgY29zLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3AuanNcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtLmpzXCI7XG5cbnZhciBsZW5ndGhTdW0sXG4gICAgbGFtYmRhMCxcbiAgICBzaW5QaGkwLFxuICAgIGNvc1BoaTA7XG5cbnZhciBsZW5ndGhTdHJlYW0gPSB7XG4gIHNwaGVyZTogbm9vcCxcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbGVuZ3RoTGluZVN0YXJ0LFxuICBsaW5lRW5kOiBub29wLFxuICBwb2x5Z29uU3RhcnQ6IG5vb3AsXG4gIHBvbHlnb25FbmQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVTdGFydCgpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgbGVuZ3RoU3RyZWFtLmxpbmVFbmQgPSBsZW5ndGhMaW5lRW5kO1xufVxuXG5mdW5jdGlvbiBsZW5ndGhMaW5lRW5kKCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBzaW5QaGkwID0gc2luKHBoaSksIGNvc1BoaTAgPSBjb3MocGhpKTtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgY29zUGhpID0gY29zKHBoaSksXG4gICAgICBkZWx0YSA9IGFicyhsYW1iZGEgLSBsYW1iZGEwKSxcbiAgICAgIGNvc0RlbHRhID0gY29zKGRlbHRhKSxcbiAgICAgIHNpbkRlbHRhID0gc2luKGRlbHRhKSxcbiAgICAgIHggPSBjb3NQaGkgKiBzaW5EZWx0YSxcbiAgICAgIHkgPSBjb3NQaGkwICogc2luUGhpIC0gc2luUGhpMCAqIGNvc1BoaSAqIGNvc0RlbHRhLFxuICAgICAgeiA9IHNpblBoaTAgKiBzaW5QaGkgKyBjb3NQaGkwICogY29zUGhpICogY29zRGVsdGE7XG4gIGxlbmd0aFN1bS5hZGQoYXRhbjIoc3FydCh4ICogeCArIHkgKiB5KSwgeikpO1xuICBsYW1iZGEwID0gbGFtYmRhLCBzaW5QaGkwID0gc2luUGhpLCBjb3NQaGkwID0gY29zUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgbGVuZ3RoU3VtID0gbmV3IEFkZGVyKCk7XG4gIHN0cmVhbShvYmplY3QsIGxlbmd0aFN0cmVhbSk7XG4gIHJldHVybiArbGVuZ3RoU3VtO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/length.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/math.js": /*!************************************************!*\ !*** ../../../node_modules/d3-geo/src/math.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"abs\": () => (/* binding */ abs),\n/* harmony export */ \"acos\": () => (/* binding */ acos),\n/* harmony export */ \"asin\": () => (/* binding */ asin),\n/* harmony export */ \"atan\": () => (/* binding */ atan),\n/* harmony export */ \"atan2\": () => (/* binding */ atan2),\n/* harmony export */ \"ceil\": () => (/* binding */ ceil),\n/* harmony export */ \"cos\": () => (/* binding */ cos),\n/* harmony export */ \"degrees\": () => (/* binding */ degrees),\n/* harmony export */ \"epsilon\": () => (/* binding */ epsilon),\n/* harmony export */ \"epsilon2\": () => (/* binding */ epsilon2),\n/* harmony export */ \"exp\": () => (/* binding */ exp),\n/* harmony export */ \"floor\": () => (/* binding */ floor),\n/* harmony export */ \"halfPi\": () => (/* binding */ halfPi),\n/* harmony export */ \"haversin\": () => (/* binding */ haversin),\n/* harmony export */ \"hypot\": () => (/* binding */ hypot),\n/* harmony export */ \"log\": () => (/* binding */ log),\n/* harmony export */ \"pi\": () => (/* binding */ pi),\n/* harmony export */ \"pow\": () => (/* binding */ pow),\n/* harmony export */ \"quarterPi\": () => (/* binding */ quarterPi),\n/* harmony export */ \"radians\": () => (/* binding */ radians),\n/* harmony export */ \"sign\": () => (/* binding */ sign),\n/* harmony export */ \"sin\": () => (/* binding */ sin),\n/* harmony export */ \"sqrt\": () => (/* binding */ sqrt),\n/* harmony export */ \"tan\": () => (/* binding */ tan),\n/* harmony export */ \"tau\": () => (/* binding */ tau)\n/* harmony export */ });\nvar epsilon = 1e-6;\nvar epsilon2 = 1e-12;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar quarterPi = pi / 4;\nvar tau = pi * 2;\n\nvar degrees = 180 / pi;\nvar radians = pi / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar floor = Math.floor;\nvar hypot = Math.hypot;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nfunction haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbWF0aC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanM/Y2FkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIGVwc2lsb24gPSAxZS02O1xuZXhwb3J0IHZhciBlcHNpbG9uMiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgcXVhcnRlclBpID0gcGkgLyA0O1xuZXhwb3J0IHZhciB0YXUgPSBwaSAqIDI7XG5cbmV4cG9ydCB2YXIgZGVncmVlcyA9IDE4MCAvIHBpO1xuZXhwb3J0IHZhciByYWRpYW5zID0gcGkgLyAxODA7XG5cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4gPSBNYXRoLmF0YW47XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIGNlaWwgPSBNYXRoLmNlaWw7XG5leHBvcnQgdmFyIGV4cCA9IE1hdGguZXhwO1xuZXhwb3J0IHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5leHBvcnQgdmFyIGh5cG90ID0gTWF0aC5oeXBvdDtcbmV4cG9ydCB2YXIgbG9nID0gTWF0aC5sb2c7XG5leHBvcnQgdmFyIHBvdyA9IE1hdGgucG93O1xuZXhwb3J0IHZhciBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCB2YXIgc2lnbiA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfTtcbmV4cG9ydCB2YXIgc3FydCA9IE1hdGguc3FydDtcbmV4cG9ydCB2YXIgdGFuID0gTWF0aC50YW47XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID4gMSA/IGhhbGZQaSA6IHggPCAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXZlcnNpbih4KSB7XG4gIHJldHVybiAoeCA9IHNpbih4IC8gMikpICogeDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/math.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/noop.js": /*!************************************************!*\ !*** ../../../node_modules/d3-geo/src/noop.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ noop)\n/* harmony export */ });\nfunction noop() {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbm9vcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbm9vcC5qcz8zMmY5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vb3AoKSB7fVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/noop.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/area.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/area.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n\n\n\n\nvar areaSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder(),\n areaRingSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n areaSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(areaRingSum));\n areaRingSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (areaStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9hcmVhLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDQTtBQUNEOztBQUU5QixrQkFBa0IsMkNBQUs7QUFDdkIsc0JBQXNCLDJDQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxnREFBSTtBQUNiLGFBQWEsZ0RBQUk7QUFDakIsV0FBVyxnREFBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLG1FQUFtRSxnREFBSTtBQUN2RSxnQkFBZ0IsNkNBQUc7QUFDbkIsc0JBQXNCLDJDQUFLO0FBQzNCLEdBQUc7QUFDSDtBQUNBO0FBQ0Esa0JBQWtCLDJDQUFLO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2FyZWEuanM/ZTM1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FkZGVyfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YWJzfSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxudmFyIGFyZWFTdW0gPSBuZXcgQWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IG5ldyBBZGRlcigpLFxuICAgIHgwMCxcbiAgICB5MDAsXG4gICAgeDAsXG4gICAgeTA7XG5cbnZhciBhcmVhU3RyZWFtID0ge1xuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBub29wLFxuICBsaW5lRW5kOiBub29wLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVJpbmdTdGFydDtcbiAgICBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhU3RyZWFtLnBvaW50ID0gbm9vcDtcbiAgICBhcmVhU3VtLmFkZChhYnMoYXJlYVJpbmdTdW0pKTtcbiAgICBhcmVhUmluZ1N1bSA9IG5ldyBBZGRlcigpO1xuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmVhID0gYXJlYVN1bSAvIDI7XG4gICAgYXJlYVN1bSA9IG5ldyBBZGRlcigpO1xuICAgIHJldHVybiBhcmVhO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhcmVhUmluZ1N0YXJ0KCkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50Rmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludEZpcnN0KHgsIHkpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludDtcbiAgeDAwID0geDAgPSB4LCB5MDAgPSB5MCA9IHk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludCh4LCB5KSB7XG4gIGFyZWFSaW5nU3VtLmFkZCh5MCAqIHggLSB4MCAqIHkpO1xuICB4MCA9IHgsIHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVJpbmdFbmQoKSB7XG4gIGFyZWFQb2ludCh4MDAsIHkwMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFyZWFTdHJlYW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/area.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/bounds.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/bounds.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n polygonStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n polygonEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (boundsStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9ib3VuZHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGdEQUFJO0FBQ2pCLFdBQVcsZ0RBQUk7QUFDZixnQkFBZ0IsZ0RBQUk7QUFDcEIsY0FBYyxnREFBSTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2JvdW5kcy5qcz8wMGJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbnZhciB4MCA9IEluZmluaXR5LFxuICAgIHkwID0geDAsXG4gICAgeDEgPSAteDAsXG4gICAgeTEgPSB4MTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcCxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm91bmRzID0gW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgeDEgPSB5MSA9IC0oeTAgPSB4MCA9IEluZmluaXR5KTtcbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludCh4LCB5KSB7XG4gIGlmICh4IDwgeDApIHgwID0geDtcbiAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gIGlmICh5ID4geTEpIHkxID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYm91bmRzU3RyZWFtO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/bounds.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/centroid.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/centroid.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (centroidStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jZW50cm9pZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyw4Q0FBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOENBQUk7O0FBRWQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jZW50cm9pZC5qcz8wODk4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuLy8gVE9ETyBFbmZvcmNlIHBvc2l0aXZlIGFyZWEgZm9yIGV4dGVyaW9yLCBuZWdhdGl2ZSBhcmVhIGZvciBpbnRlcmlvcj9cblxudmFyIFgwID0gMCxcbiAgICBZMCA9IDAsXG4gICAgWjAgPSAwLFxuICAgIFgxID0gMCxcbiAgICBZMSA9IDAsXG4gICAgWjEgPSAwLFxuICAgIFgyID0gMCxcbiAgICBZMiA9IDAsXG4gICAgWjIgPSAwLFxuICAgIHgwMCxcbiAgICB5MDAsXG4gICAgeDAsXG4gICAgeTA7XG5cbnZhciBjZW50cm9pZFN0cmVhbSA9IHtcbiAgcG9pbnQ6IGNlbnRyb2lkUG9pbnQsXG4gIGxpbmVTdGFydDogY2VudHJvaWRMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGNlbnRyb2lkTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZFJpbmdTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnQ7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZVN0YXJ0ID0gY2VudHJvaWRMaW5lU3RhcnQ7XG4gICAgY2VudHJvaWRTdHJlYW0ubGluZUVuZCA9IGNlbnRyb2lkTGluZUVuZDtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2VudHJvaWQgPSBaMiA/IFtYMiAvIFoyLCBZMiAvIFoyXVxuICAgICAgICA6IFoxID8gW1gxIC8gWjEsIFkxIC8gWjFdXG4gICAgICAgIDogWjAgPyBbWDAgLyBaMCwgWTAgLyBaMF1cbiAgICAgICAgOiBbTmFOLCBOYU5dO1xuICAgIFgwID0gWTAgPSBaMCA9XG4gICAgWDEgPSBZMSA9IFoxID1cbiAgICBYMiA9IFkyID0gWjIgPSAwO1xuICAgIHJldHVybiBjZW50cm9pZDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludCh4LCB5KSB7XG4gIFgwICs9IHg7XG4gIFkwICs9IHk7XG4gICsrWjA7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZVN0YXJ0KCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnRGaXJzdExpbmU7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnRGaXJzdExpbmUoeCwgeSkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnRMaW5lO1xuICBjZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludExpbmUoeCwgeSkge1xuICB2YXIgZHggPSB4IC0geDAsIGR5ID0geSAtIHkwLCB6ID0gc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIFgxICs9IHogKiAoeDAgKyB4KSAvIDI7XG4gIFkxICs9IHogKiAoeTAgKyB5KSAvIDI7XG4gIFoxICs9IHo7XG4gIGNlbnRyb2lkUG9pbnQoeDAgPSB4LCB5MCA9IHkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVFbmQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludEZpcnN0UmluZztcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nRW5kKCkge1xuICBjZW50cm9pZFBvaW50UmluZyh4MDAsIHkwMCk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnRGaXJzdFJpbmcoeCwgeSkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUG9pbnRSaW5nO1xuICBjZW50cm9pZFBvaW50KHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5KTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludFJpbmcoeCwgeSkge1xuICB2YXIgZHggPSB4IC0geDAsXG4gICAgICBkeSA9IHkgLSB5MCxcbiAgICAgIHogPSBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICBYMSArPSB6ICogKHgwICsgeCkgLyAyO1xuICBZMSArPSB6ICogKHkwICsgeSkgLyAyO1xuICBaMSArPSB6O1xuXG4gIHogPSB5MCAqIHggLSB4MCAqIHk7XG4gIFgyICs9IHogKiAoeDAgKyB4KTtcbiAgWTIgKz0geiAqICh5MCArIHkpO1xuICBaMiArPSB6ICogMztcbiAgY2VudHJvaWRQb2ludCh4MCA9IHgsIHkwID0geSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNlbnRyb2lkU3RyZWFtO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/centroid.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/context.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/context.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PathContext)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n\n\n\nfunction PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, _math_js__WEBPACK_IMPORTED_MODULE_0__.tau);\n break;\n }\n }\n },\n result: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jb250ZXh0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjtBQUNEOztBQUVmO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQseUNBQUc7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFVBQVUsZ0RBQUk7QUFDZCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NvbnRleHQuanM/MjYxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhdGhDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblBhdGhDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgX3JhZGl1czogNC41LFxuICBwb2ludFJhZGl1czogZnVuY3Rpb24oXykge1xuICAgIHJldHVybiB0aGlzLl9yYWRpdXMgPSBfLCB0aGlzO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgPT09IDApIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fcG9pbnQgPSBOYU47XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCArIHRoaXMuX3JhZGl1cywgeSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuYXJjKHgsIHksIHRoaXMuX3JhZGl1cywgMCwgdGF1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXN1bHQ6IG5vb3Bcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/context.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/index.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../identity.js */ \"../../../node_modules/d3-geo/src/identity.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-geo/src/path/area.js\");\n/* harmony import */ var _bounds_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds.js */ \"../../../node_modules/d3-geo/src/path/bounds.js\");\n/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./centroid.js */ \"../../../node_modules/d3-geo/src/path/centroid.js\");\n/* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context.js */ \"../../../node_modules/d3-geo/src/path/context.js\");\n/* harmony import */ var _measure_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./measure.js */ \"../../../node_modules/d3-geo/src/path/measure.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string.js */ \"../../../node_modules/d3-geo/src/path/string.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projectionStream(_area_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n return _area_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].result();\n };\n\n path.measure = function(object) {\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projectionStream(_measure_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n return _measure_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].result();\n };\n\n path.bounds = function(object) {\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projectionStream(_bounds_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n return _bounds_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].result();\n };\n\n path.centroid = function(object) {\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projectionStream(_centroid_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));\n return _centroid_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, _identity_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new _string_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](digits)) : new _context_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new _string_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"](digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBc0M7QUFDSjtBQUNEO0FBQ0k7QUFDSTtBQUNGO0FBQ0E7QUFDRjs7QUFFckMsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxzREFBTTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksc0RBQU0sMEJBQTBCLGdEQUFRO0FBQzVDLFdBQVcsdURBQWU7QUFDMUI7O0FBRUE7QUFDQSxJQUFJLHNEQUFNLDBCQUEwQixtREFBVztBQUMvQyxXQUFXLDBEQUFrQjtBQUM3Qjs7QUFFQTtBQUNBLElBQUksc0RBQU0sMEJBQTBCLGtEQUFVO0FBQzlDLFdBQVcseURBQWlCO0FBQzVCOztBQUVBO0FBQ0EsSUFBSSxzREFBTSwwQkFBMEIsb0RBQVk7QUFDaEQsV0FBVywyREFBbUI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxvREFBUTtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQsa0RBQVUsZ0JBQWdCLG1EQUFXO0FBQzFGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsRUFBRTtBQUMvRDtBQUNBO0FBQ0EsOENBQThDLGtEQUFVO0FBQ3hEO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2luZGV4LmpzP2Q0MzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuLi9pZGVudGl0eS5qc1wiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi4vc3RyZWFtLmpzXCI7XG5pbXBvcnQgcGF0aEFyZWEgZnJvbSBcIi4vYXJlYS5qc1wiO1xuaW1wb3J0IHBhdGhCb3VuZHMgZnJvbSBcIi4vYm91bmRzLmpzXCI7XG5pbXBvcnQgcGF0aENlbnRyb2lkIGZyb20gXCIuL2NlbnRyb2lkLmpzXCI7XG5pbXBvcnQgUGF0aENvbnRleHQgZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IHBhdGhNZWFzdXJlIGZyb20gXCIuL21lYXN1cmUuanNcIjtcbmltcG9ydCBQYXRoU3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcm9qZWN0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBkaWdpdHMgPSAzLFxuICAgICAgcG9pbnRSYWRpdXMgPSA0LjUsXG4gICAgICBwcm9qZWN0aW9uU3RyZWFtLFxuICAgICAgY29udGV4dFN0cmVhbTtcblxuICBmdW5jdGlvbiBwYXRoKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9pbnRSYWRpdXMgPT09IFwiZnVuY3Rpb25cIikgY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKGNvbnRleHRTdHJlYW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHRTdHJlYW0ucmVzdWx0KCk7XG4gIH1cblxuICBwYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhBcmVhKSk7XG4gICAgcmV0dXJuIHBhdGhBcmVhLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgubWVhc3VyZSA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHN0cmVhbShvYmplY3QsIHByb2plY3Rpb25TdHJlYW0ocGF0aE1lYXN1cmUpKTtcbiAgICByZXR1cm4gcGF0aE1lYXN1cmUucmVzdWx0KCk7XG4gIH07XG5cbiAgcGF0aC5ib3VuZHMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhCb3VuZHMpKTtcbiAgICByZXR1cm4gcGF0aEJvdW5kcy5yZXN1bHQoKTtcbiAgfTtcblxuICBwYXRoLmNlbnRyb2lkID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShwYXRoQ2VudHJvaWQpKTtcbiAgICByZXR1cm4gcGF0aENlbnRyb2lkLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgucHJvamVjdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwcm9qZWN0aW9uO1xuICAgIHByb2plY3Rpb25TdHJlYW0gPSBfID09IG51bGwgPyAocHJvamVjdGlvbiA9IG51bGwsIGlkZW50aXR5KSA6IChwcm9qZWN0aW9uID0gXykuc3RyZWFtO1xuICAgIHJldHVybiBwYXRoO1xuICB9O1xuXG4gIHBhdGguY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjb250ZXh0O1xuICAgIGNvbnRleHRTdHJlYW0gPSBfID09IG51bGwgPyAoY29udGV4dCA9IG51bGwsIG5ldyBQYXRoU3RyaW5nKGRpZ2l0cykpIDogbmV3IFBhdGhDb250ZXh0KGNvbnRleHQgPSBfKTtcbiAgICBpZiAodHlwZW9mIHBvaW50UmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpIGNvbnRleHRTdHJlYW0ucG9pbnRSYWRpdXMocG9pbnRSYWRpdXMpO1xuICAgIHJldHVybiBwYXRoO1xuICB9O1xuXG4gIHBhdGgucG9pbnRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcG9pbnRSYWRpdXM7XG4gICAgcG9pbnRSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IChjb250ZXh0U3RyZWFtLnBvaW50UmFkaXVzKCtfKSwgK18pO1xuICAgIHJldHVybiBwYXRoO1xuICB9O1xuXG4gIHBhdGguZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSBkaWdpdHMgPSBudWxsO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZCA9IE1hdGguZmxvb3IoXyk7XG4gICAgICBpZiAoIShkID49IDApKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7X31gKTtcbiAgICAgIGRpZ2l0cyA9IGQ7XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09PSBudWxsKSBjb250ZXh0U3RyZWFtID0gbmV3IFBhdGhTdHJpbmcoZGlnaXRzKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcblxuICByZXR1cm4gcGF0aC5wcm9qZWN0aW9uKHByb2plY3Rpb24pLmRpZ2l0cyhkaWdpdHMpLmNvbnRleHQoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/measure.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/measure.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-geo/src/noop.js\");\n\n\n\n\nvar lengthSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sqrt)(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lengthStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9tZWFzdXJlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDQztBQUNGOztBQUU5QixvQkFBb0IsMkNBQUs7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsZ0RBQUk7QUFDYjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx5QkFBeUIsZ0RBQUk7QUFDN0IsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esb0JBQW9CLDJDQUFLO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUFJO0FBQ3BCO0FBQ0E7O0FBRUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvbWVhc3VyZS5qcz9lZTI3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWRkZXJ9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxudmFyIGxlbmd0aFN1bSA9IG5ldyBBZGRlcigpLFxuICAgIGxlbmd0aFJpbmcsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxlbmd0aFJpbmcpIGxlbmd0aFBvaW50KHgwMCwgeTAwKTtcbiAgICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBub29wO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFJpbmcgPSB0cnVlO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gbnVsbDtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gK2xlbmd0aFN1bTtcbiAgICBsZW5ndGhTdW0gPSBuZXcgQWRkZXIoKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG59O1xuXG5mdW5jdGlvbiBsZW5ndGhQb2ludEZpcnN0KHgsIHkpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG4gIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5O1xufVxuXG5mdW5jdGlvbiBsZW5ndGhQb2ludCh4LCB5KSB7XG4gIHgwIC09IHgsIHkwIC09IHk7XG4gIGxlbmd0aFN1bS5hZGQoc3FydCh4MCAqIHgwICsgeTAgKiB5MCkpO1xuICB4MCA9IHgsIHkwID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGVuZ3RoU3RyZWFtO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/measure.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/path/string.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-geo/src/path/string.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PathString)\n/* harmony export */ });\n// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nclass PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9zdHJpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsVUFBVSxPQUFPLEdBQUcsRUFBRSxHQUFHLEdBQUcsVUFBVSxNQUFNO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxPQUFPO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlELE9BQU87QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9zdHJpbmcuanM/N2U5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaW1wbGUgY2FjaGluZyBmb3IgY29uc3RhbnQtcmFkaXVzIHBvaW50cy5cbmxldCBjYWNoZURpZ2l0cywgY2FjaGVBcHBlbmQsIGNhY2hlUmFkaXVzLCBjYWNoZUNpcmNsZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0aFN0cmluZyB7XG4gIGNvbnN0cnVjdG9yKGRpZ2l0cykge1xuICAgIHRoaXMuX2FwcGVuZCA9IGRpZ2l0cyA9PSBudWxsID8gYXBwZW5kIDogYXBwZW5kUm91bmQoZGlnaXRzKTtcbiAgICB0aGlzLl9yYWRpdXMgPSA0LjU7XG4gICAgdGhpcy5fID0gXCJcIjtcbiAgfVxuICBwb2ludFJhZGl1cyhfKSB7XG4gICAgdGhpcy5fcmFkaXVzID0gK187XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcG9seWdvblN0YXJ0KCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9XG4gIHBvbHlnb25FbmQoKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfVxuICBsaW5lU3RhcnQoKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9XG4gIGxpbmVFbmQoKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgPT09IDApIHRoaXMuXyArPSBcIlpcIjtcbiAgICB0aGlzLl9wb2ludCA9IE5hTjtcbiAgfVxuICBwb2ludCh4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX2FwcGVuZGBNJHt4fSwke3l9YDtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTCR7eH0sJHt5fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTSR7eH0sJHt5fWA7XG4gICAgICAgIGlmICh0aGlzLl9yYWRpdXMgIT09IGNhY2hlUmFkaXVzIHx8IHRoaXMuX2FwcGVuZCAhPT0gY2FjaGVBcHBlbmQpIHtcbiAgICAgICAgICBjb25zdCByID0gdGhpcy5fcmFkaXVzO1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl87XG4gICAgICAgICAgdGhpcy5fID0gXCJcIjsgLy8gc3Rhc2ggdGhlIG9sZCBzdHJpbmcgc28gd2UgY2FuIGNhY2hlIHRoZSBjaXJjbGUgcGF0aCBmcmFnbWVudFxuICAgICAgICAgIHRoaXMuX2FwcGVuZGBtMCwke3J9YSR7cn0sJHtyfSAwIDEsMSAwLCR7LTIgKiByfWEke3J9LCR7cn0gMCAxLDEgMCwkezIgKiByfXpgO1xuICAgICAgICAgIGNhY2hlUmFkaXVzID0gcjtcbiAgICAgICAgICBjYWNoZUFwcGVuZCA9IHRoaXMuX2FwcGVuZDtcbiAgICAgICAgICBjYWNoZUNpcmNsZSA9IHRoaXMuXztcbiAgICAgICAgICB0aGlzLl8gPSBzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuXyArPSBjYWNoZUNpcmNsZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlc3VsdCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl87XG4gICAgdGhpcy5fID0gXCJcIjtcbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kKHN0cmluZ3MpIHtcbiAgbGV0IGkgPSAxO1xuICB0aGlzLl8gKz0gc3RyaW5nc1swXTtcbiAgZm9yIChjb25zdCBqID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBqOyArK2kpIHtcbiAgICB0aGlzLl8gKz0gYXJndW1lbnRzW2ldICsgc3RyaW5nc1tpXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRSb3VuZChkaWdpdHMpIHtcbiAgY29uc3QgZCA9IE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgaWYgKCEoZCA+PSAwKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2RpZ2l0c31gKTtcbiAgaWYgKGQgPiAxNSkgcmV0dXJuIGFwcGVuZDtcbiAgaWYgKGQgIT09IGNhY2hlRGlnaXRzKSB7XG4gICAgY29uc3QgayA9IDEwICoqIGQ7XG4gICAgY2FjaGVEaWdpdHMgPSBkO1xuICAgIGNhY2hlQXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKHN0cmluZ3MpIHtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICAgICAgZm9yIChjb25zdCBqID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBqOyArK2kpIHtcbiAgICAgICAgdGhpcy5fICs9IE1hdGgucm91bmQoYXJndW1lbnRzW2ldICogaykgLyBrICsgc3RyaW5nc1tpXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBjYWNoZUFwcGVuZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/path/string.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/pointEqual.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-geo/src/pointEqual.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(a[0] - b[0]) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon && (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(a[1] - b[1]) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9pbnRFcXVhbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1Qzs7QUFFdkMsNkJBQWUsb0NBQVM7QUFDeEIsU0FBUyw2Q0FBRyxnQkFBZ0IsNkNBQU8sSUFBSSw2Q0FBRyxnQkFBZ0IsNkNBQU87QUFDakUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9pbnRFcXVhbC5qcz81MmE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWJzLCBlcHNpbG9ufSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGFicyhhWzBdIC0gYlswXSkgPCBlcHNpbG9uICYmIGFicyhhWzFdIC0gYlsxXSkgPCBlcHNpbG9uO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/pointEqual.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/polygonContains.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-geo/src/polygonContains.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/fsum.js\");\n/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cartesian.js */ \"../../../node_modules/d3-geo/src/cartesian.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\n\nfunction longitude(point) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(point[0]) <= _math_js__WEBPACK_IMPORTED_MODULE_0__.pi ? point[0] : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(point[0]) * (((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(point[0]) + _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) % _math_js__WEBPACK_IMPORTED_MODULE_0__.tau - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi),\n normal = [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda), -(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new d3_array__WEBPACK_IMPORTED_MODULE_1__.Adder();\n\n if (sinPhi === 1) phi = _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n else if (sinPhi === -1) phi = -_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + _math_js__WEBPACK_IMPORTED_MODULE_0__.quarterPi,\n sinPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi0),\n cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + _math_js__WEBPACK_IMPORTED_MODULE_0__.quarterPi,\n sinPhi1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi1),\n cosPhi1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(k * sign * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(absDelta), cosPhi0 * cosPhi1 + k * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(absDelta)));\n angle += antimeridian ? delta + sign * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianCross)((0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesian)(point0), (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesian)(point1));\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianNormalizeInPlace)(arc);\n var intersection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianCross)(normal, arc);\n (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianNormalizeInPlace)(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -_math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon || angle < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon && sum < -_math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon2) ^ (winding & 1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDcUQ7QUFDc0I7O0FBRTFHO0FBQ0EsU0FBUyw2Q0FBRyxjQUFjLHdDQUFFLGNBQWMsOENBQUksZUFBZSw2Q0FBRyxhQUFhLHdDQUFFLElBQUkseUNBQUcsR0FBRyx3Q0FBRTtBQUMzRjs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EsZUFBZSw2Q0FBRztBQUNsQixnQkFBZ0IsNkNBQUcsV0FBVyw2Q0FBRztBQUNqQztBQUNBOztBQUVBLGdCQUFnQiwyQ0FBSzs7QUFFckIsMEJBQTBCLDRDQUFNLEdBQUcsNkNBQU87QUFDMUMsaUNBQWlDLDRDQUFNLEdBQUcsNkNBQU87O0FBRWpELHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsK0NBQVM7QUFDeEMsa0JBQWtCLDZDQUFHO0FBQ3JCLGtCQUFrQiw2Q0FBRzs7QUFFckIsb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBLGlDQUFpQywrQ0FBUztBQUMxQyxvQkFBb0IsNkNBQUc7QUFDdkIsb0JBQW9CLDZDQUFHO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx3Q0FBRTtBQUN0Qzs7QUFFQSxjQUFjLCtDQUFLLFlBQVksNkNBQUcsb0NBQW9DLDZDQUFHO0FBQ3pFLDZDQUE2Qyx5Q0FBRzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDZEQUFjLENBQUMsd0RBQVMsVUFBVSx3REFBUztBQUM3RCxRQUFRLHdFQUF5QjtBQUNqQywyQkFBMkIsNkRBQWM7QUFDekMsUUFBUSx3RUFBeUI7QUFDakMsNERBQTRELDhDQUFJO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsNkNBQU8sWUFBWSw2Q0FBTyxXQUFXLDhDQUFRO0FBQ2hFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvbHlnb25Db250YWlucy5qcz8zZGIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWRkZXJ9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbkNyb3NzLCBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBlcHNpbG9uMiwgaGFsZlBpLCBwaSwgcXVhcnRlclBpLCBzaWduLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBsb25naXR1ZGUocG9pbnQpIHtcbiAgcmV0dXJuIGFicyhwb2ludFswXSkgPD0gcGkgPyBwb2ludFswXSA6IHNpZ24ocG9pbnRbMF0pICogKChhYnMocG9pbnRbMF0pICsgcGkpICUgdGF1IC0gcGkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbGFtYmRhID0gbG9uZ2l0dWRlKHBvaW50KSxcbiAgICAgIHBoaSA9IHBvaW50WzFdLFxuICAgICAgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBub3JtYWwgPSBbc2luKGxhbWJkYSksIC1jb3MobGFtYmRhKSwgMF0sXG4gICAgICBhbmdsZSA9IDAsXG4gICAgICB3aW5kaW5nID0gMDtcblxuICB2YXIgc3VtID0gbmV3IEFkZGVyKCk7XG5cbiAgaWYgKHNpblBoaSA9PT0gMSkgcGhpID0gaGFsZlBpICsgZXBzaWxvbjtcbiAgZWxzZSBpZiAoc2luUGhpID09PSAtMSkgcGhpID0gLWhhbGZQaSAtIGVwc2lsb247XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29uLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKG0gPSAocmluZyA9IHBvbHlnb25baV0pLmxlbmd0aCkpIGNvbnRpbnVlO1xuICAgIHZhciByaW5nLFxuICAgICAgICBtLFxuICAgICAgICBwb2ludDAgPSByaW5nW20gLSAxXSxcbiAgICAgICAgbGFtYmRhMCA9IGxvbmdpdHVkZShwb2ludDApLFxuICAgICAgICBwaGkwID0gcG9pbnQwWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgc2luUGhpMCA9IHNpbihwaGkwKSxcbiAgICAgICAgY29zUGhpMCA9IGNvcyhwaGkwKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqLCBsYW1iZGEwID0gbGFtYmRhMSwgc2luUGhpMCA9IHNpblBoaTEsIGNvc1BoaTAgPSBjb3NQaGkxLCBwb2ludDAgPSBwb2ludDEpIHtcbiAgICAgIHZhciBwb2ludDEgPSByaW5nW2pdLFxuICAgICAgICAgIGxhbWJkYTEgPSBsb25naXR1ZGUocG9pbnQxKSxcbiAgICAgICAgICBwaGkxID0gcG9pbnQxWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgICBzaW5QaGkxID0gc2luKHBoaTEpLFxuICAgICAgICAgIGNvc1BoaTEgPSBjb3MocGhpMSksXG4gICAgICAgICAgZGVsdGEgPSBsYW1iZGExIC0gbGFtYmRhMCxcbiAgICAgICAgICBzaWduID0gZGVsdGEgPj0gMCA/IDEgOiAtMSxcbiAgICAgICAgICBhYnNEZWx0YSA9IHNpZ24gKiBkZWx0YSxcbiAgICAgICAgICBhbnRpbWVyaWRpYW4gPSBhYnNEZWx0YSA+IHBpLFxuICAgICAgICAgIGsgPSBzaW5QaGkwICogc2luUGhpMTtcblxuICAgICAgc3VtLmFkZChhdGFuMihrICogc2lnbiAqIHNpbihhYnNEZWx0YSksIGNvc1BoaTAgKiBjb3NQaGkxICsgayAqIGNvcyhhYnNEZWx0YSkpKTtcbiAgICAgIGFuZ2xlICs9IGFudGltZXJpZGlhbiA/IGRlbHRhICsgc2lnbiAqIHRhdSA6IGRlbHRhO1xuXG4gICAgICAvLyBBcmUgdGhlIGxvbmdpdHVkZXMgZWl0aGVyIHNpZGUgb2YgdGhlIHBvaW504oCZcyBtZXJpZGlhbiAobGFtYmRhKSxcbiAgICAgIC8vIGFuZCBhcmUgdGhlIGxhdGl0dWRlcyBzbWFsbGVyIHRoYW4gdGhlIHBhcmFsbGVsIChwaGkpP1xuICAgICAgaWYgKGFudGltZXJpZGlhbiBeIGxhbWJkYTAgPj0gbGFtYmRhIF4gbGFtYmRhMSA+PSBsYW1iZGEpIHtcbiAgICAgICAgdmFyIGFyYyA9IGNhcnRlc2lhbkNyb3NzKGNhcnRlc2lhbihwb2ludDApLCBjYXJ0ZXNpYW4ocG9pbnQxKSk7XG4gICAgICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoYXJjKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGNhcnRlc2lhbkNyb3NzKG5vcm1hbCwgYXJjKTtcbiAgICAgICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShpbnRlcnNlY3Rpb24pO1xuICAgICAgICB2YXIgcGhpQXJjID0gKGFudGltZXJpZGlhbiBeIGRlbHRhID49IDAgPyAtMSA6IDEpICogYXNpbihpbnRlcnNlY3Rpb25bMl0pO1xuICAgICAgICBpZiAocGhpID4gcGhpQXJjIHx8IHBoaSA9PT0gcGhpQXJjICYmIChhcmNbMF0gfHwgYXJjWzFdKSkge1xuICAgICAgICAgIHdpbmRpbmcgKz0gYW50aW1lcmlkaWFuIF4gZGVsdGEgPj0gMCA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpcnN0LCBkZXRlcm1pbmUgd2hldGhlciB0aGUgU291dGggcG9sZSBpcyBpbnNpZGUgb3Igb3V0c2lkZTpcbiAgLy9cbiAgLy8gSXQgaXMgaW5zaWRlIGlmOlxuICAvLyAqIHRoZSBwb2x5Z29uIHdpbmRzIGFyb3VuZCBpdCBpbiBhIGNsb2Nrd2lzZSBkaXJlY3Rpb24uXG4gIC8vICogdGhlIHBvbHlnb24gZG9lcyBub3QgKGN1bXVsYXRpdmVseSkgd2luZCBhcm91bmQgaXQsIGJ1dCBoYXMgYSBuZWdhdGl2ZVxuICAvLyAgIChjb3VudGVyLWNsb2Nrd2lzZSkgYXJlYS5cbiAgLy9cbiAgLy8gU2Vjb25kLCBjb3VudCB0aGUgKHNpZ25lZCkgbnVtYmVyIG9mIHRpbWVzIGEgc2VnbWVudCBjcm9zc2VzIGEgbGFtYmRhXG4gIC8vIGZyb20gdGhlIHBvaW50IHRvIHRoZSBTb3V0aCBwb2xlLiAgSWYgaXQgaXMgemVybywgdGhlbiB0aGUgcG9pbnQgaXMgdGhlXG4gIC8vIHNhbWUgc2lkZSBhcyB0aGUgU291dGggcG9sZS5cblxuICByZXR1cm4gKGFuZ2xlIDwgLWVwc2lsb24gfHwgYW5nbGUgPCBlcHNpbG9uICYmIHN1bSA8IC1lcHNpbG9uMikgXiAod2luZGluZyAmIDEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/polygonContains.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/albers.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/albers.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _conicEqualArea_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conicEqualArea.js */ \"../../../node_modules/d3-geo/src/projection/conicEqualArea.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUQ7O0FBRWpELDZCQUFlLHNDQUFXO0FBQzFCLFNBQVMsOERBQWM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzLmpzPzQ4NGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmljRXF1YWxBcmVhIGZyb20gXCIuL2NvbmljRXF1YWxBcmVhLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY29uaWNFcXVhbEFyZWEoKVxuICAgICAgLnBhcmFsbGVscyhbMjkuNSwgNDUuNV0pXG4gICAgICAuc2NhbGUoMTA3MClcbiAgICAgIC50cmFuc2xhdGUoWzQ4MCwgMjUwXSlcbiAgICAgIC5yb3RhdGUoWzk2LCAwXSlcbiAgICAgIC5jZW50ZXIoWy0wLjYsIDM4LjddKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/albers.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/albersUsa.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/albersUsa.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _albers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./albers.js */ \"../../../node_modules/d3-geo/src/projection/albers.js\");\n/* harmony import */ var _conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conicEqualArea.js */ \"../../../node_modules/d3-geo/src/projection/conicEqualArea.js\");\n/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit.js */ \"../../../node_modules/d3-geo/src/projection/fit.js\");\n\n\n\n\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var cache,\n cacheStream,\n lower48 = (0,_albers_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), lower48Point,\n alaska = (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon, y + 0.120 * k + _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon], [x - 0.214 * k - _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon, y + 0.234 * k - _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon, y + 0.166 * k + _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon], [x - 0.115 * k - _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon, y + 0.234 * k - _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitExtent)(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitSize)(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitWidth)(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitHeight)(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnNVc2EuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbUM7QUFDRjtBQUNnQjtBQUNnQjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixZQUFZLHlDQUF5QztBQUNqRix5QkFBeUIsWUFBWSxzQ0FBc0M7QUFDM0UsNEJBQTRCLFlBQVkseUNBQXlDO0FBQ2pGLDBCQUEwQixZQUFZLHVDQUF1QztBQUM3RSwrQkFBK0IsWUFBWSw0Q0FBNEM7QUFDdkYsNkJBQTZCLFlBQVk7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBLGdCQUFnQixzREFBTTtBQUN0QixlQUFlLDhEQUFjO0FBQzdCLGVBQWUsOERBQWM7QUFDN0IsNEJBQTRCLHdCQUF3Qjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0MsNkNBQU8sa0JBQWtCLDZDQUFPLG9CQUFvQiw2Q0FBTyxrQkFBa0IsNkNBQU87QUFDMUg7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyw2Q0FBTyxrQkFBa0IsNkNBQU8sb0JBQW9CLDZDQUFPLGtCQUFrQiw2Q0FBTztBQUMxSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjs7QUFFQTtBQUNBLFdBQVcsZ0RBQU87QUFDbEI7O0FBRUE7QUFDQSxXQUFXLGlEQUFRO0FBQ25COztBQUVBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzVXNhLmpzP2FjOTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtlcHNpbG9ufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IGFsYmVycyBmcm9tIFwiLi9hbGJlcnMuanNcIjtcbmltcG9ydCBjb25pY0VxdWFsQXJlYSBmcm9tIFwiLi9jb25pY0VxdWFsQXJlYS5qc1wiO1xuaW1wb3J0IHtmaXRFeHRlbnQsIGZpdFNpemUsIGZpdFdpZHRoLCBmaXRIZWlnaHR9IGZyb20gXCIuL2ZpdC5qc1wiO1xuXG4vLyBUaGUgcHJvamVjdGlvbnMgbXVzdCBoYXZlIG11dHVhbGx5IGV4Y2x1c2l2ZSBjbGlwIHJlZ2lvbnMgb24gdGhlIHNwaGVyZSxcbi8vIGFzIHRoaXMgd2lsbCBhdm9pZCBlbWl0dGluZyBpbnRlcmxlYXZpbmcgbGluZXMgYW5kIHBvbHlnb25zLlxuZnVuY3Rpb24gbXVsdGlwbGV4KHN0cmVhbXMpIHtcbiAgdmFyIG4gPSBzdHJlYW1zLmxlbmd0aDtcbiAgcmV0dXJuIHtcbiAgICBwb2ludDogZnVuY3Rpb24oeCwgeSkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5wb2ludCh4LCB5KTsgfSxcbiAgICBzcGhlcmU6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5zcGhlcmUoKTsgfSxcbiAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5saW5lU3RhcnQoKTsgfSxcbiAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ubGluZUVuZCgpOyB9LFxuICAgIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnBvbHlnb25TdGFydCgpOyB9LFxuICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5wb2x5Z29uRW5kKCk7IH1cbiAgfTtcbn1cblxuLy8gQSBjb21wb3NpdGUgcHJvamVjdGlvbiBmb3IgdGhlIFVuaXRlZCBTdGF0ZXMsIGNvbmZpZ3VyZWQgYnkgZGVmYXVsdCBmb3Jcbi8vIDk2MMOXNTAwLiBUaGUgcHJvamVjdGlvbiBhbHNvIHdvcmtzIHF1aXRlIHdlbGwgYXQgOTYww5c2MDAgaWYgeW91IGNoYW5nZSB0aGVcbi8vIHNjYWxlIHRvIDEyODUgYW5kIGFkanVzdCB0aGUgdHJhbnNsYXRlIGFjY29yZGluZ2x5LiBUaGUgc2V0IG9mIHN0YW5kYXJkXG4vLyBwYXJhbGxlbHMgZm9yIGVhY2ggcmVnaW9uIGNvbWVzIGZyb20gVVNHUywgd2hpY2ggaXMgcHVibGlzaGVkIGhlcmU6XG4vLyBodHRwOi8vZWdzYy51c2dzLmdvdi9pc2IvcHVicy9NYXBQcm9qZWN0aW9ucy9wcm9qZWN0aW9ucy5odG1sI2FsYmVyc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtLFxuICAgICAgbG93ZXI0OCA9IGFsYmVycygpLCBsb3dlcjQ4UG9pbnQsXG4gICAgICBhbGFza2EgPSBjb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LCAwXSkuY2VudGVyKFstMiwgNTguNV0pLnBhcmFsbGVscyhbNTUsIDY1XSksIGFsYXNrYVBvaW50LCAvLyBFUFNHOjMzMzhcbiAgICAgIGhhd2FpaSA9IGNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsIDBdKS5jZW50ZXIoWy0zLCAxOS45XSkucGFyYWxsZWxzKFs4LCAxOF0pLCBoYXdhaWlQb2ludCwgLy8gRVNSSToxMDIwMDdcbiAgICAgIHBvaW50LCBwb2ludFN0cmVhbSA9IHtwb2ludDogZnVuY3Rpb24oeCwgeSkgeyBwb2ludCA9IFt4LCB5XTsgfX07XG5cbiAgZnVuY3Rpb24gYWxiZXJzVXNhKGNvb3JkaW5hdGVzKSB7XG4gICAgdmFyIHggPSBjb29yZGluYXRlc1swXSwgeSA9IGNvb3JkaW5hdGVzWzFdO1xuICAgIHJldHVybiBwb2ludCA9IG51bGwsXG4gICAgICAgIChsb3dlcjQ4UG9pbnQucG9pbnQoeCwgeSksIHBvaW50KVxuICAgICAgICB8fCAoYWxhc2thUG9pbnQucG9pbnQoeCwgeSksIHBvaW50KVxuICAgICAgICB8fCAoaGF3YWlpUG9pbnQucG9pbnQoeCwgeSksIHBvaW50KTtcbiAgfVxuXG4gIGFsYmVyc1VzYS5pbnZlcnQgPSBmdW5jdGlvbihjb29yZGluYXRlcykge1xuICAgIHZhciBrID0gbG93ZXI0OC5zY2FsZSgpLFxuICAgICAgICB0ID0gbG93ZXI0OC50cmFuc2xhdGUoKSxcbiAgICAgICAgeCA9IChjb29yZGluYXRlc1swXSAtIHRbMF0pIC8gayxcbiAgICAgICAgeSA9IChjb29yZGluYXRlc1sxXSAtIHRbMV0pIC8gaztcbiAgICByZXR1cm4gKHkgPj0gMC4xMjAgJiYgeSA8IDAuMjM0ICYmIHggPj0gLTAuNDI1ICYmIHggPCAtMC4yMTQgPyBhbGFza2FcbiAgICAgICAgOiB5ID49IDAuMTY2ICYmIHkgPCAwLjIzNCAmJiB4ID49IC0wLjIxNCAmJiB4IDwgLTAuMTE1ID8gaGF3YWlpXG4gICAgICAgIDogbG93ZXI0OCkuaW52ZXJ0KGNvb3JkaW5hdGVzKTtcbiAgfTtcblxuICBhbGJlcnNVc2Euc3RyZWFtID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgcmV0dXJuIGNhY2hlICYmIGNhY2hlU3RyZWFtID09PSBzdHJlYW0gPyBjYWNoZSA6IGNhY2hlID0gbXVsdGlwbGV4KFtsb3dlcjQ4LnN0cmVhbShjYWNoZVN0cmVhbSA9IHN0cmVhbSksIGFsYXNrYS5zdHJlYW0oc3RyZWFtKSwgaGF3YWlpLnN0cmVhbShzdHJlYW0pXSk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnByZWNpc2lvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnByZWNpc2lvbigpO1xuICAgIGxvd2VyNDgucHJlY2lzaW9uKF8pLCBhbGFza2EucHJlY2lzaW9uKF8pLCBoYXdhaWkucHJlY2lzaW9uKF8pO1xuICAgIHJldHVybiByZXNldCgpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnNjYWxlKCk7XG4gICAgbG93ZXI0OC5zY2FsZShfKSwgYWxhc2thLnNjYWxlKF8gKiAwLjM1KSwgaGF3YWlpLnNjYWxlKF8pO1xuICAgIHJldHVybiBhbGJlcnNVc2EudHJhbnNsYXRlKGxvd2VyNDgudHJhbnNsYXRlKCkpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG93ZXI0OC50cmFuc2xhdGUoKTtcbiAgICB2YXIgayA9IGxvd2VyNDguc2NhbGUoKSwgeCA9ICtfWzBdLCB5ID0gK19bMV07XG5cbiAgICBsb3dlcjQ4UG9pbnQgPSBsb3dlcjQ4XG4gICAgICAgIC50cmFuc2xhdGUoXylcbiAgICAgICAgLmNsaXBFeHRlbnQoW1t4IC0gMC40NTUgKiBrLCB5IC0gMC4yMzggKiBrXSwgW3ggKyAwLjQ1NSAqIGssIHkgKyAwLjIzOCAqIGtdXSlcbiAgICAgICAgLnN0cmVhbShwb2ludFN0cmVhbSk7XG5cbiAgICBhbGFza2FQb2ludCA9IGFsYXNrYVxuICAgICAgICAudHJhbnNsYXRlKFt4IC0gMC4zMDcgKiBrLCB5ICsgMC4yMDEgKiBrXSlcbiAgICAgICAgLmNsaXBFeHRlbnQoW1t4IC0gMC40MjUgKiBrICsgZXBzaWxvbiwgeSArIDAuMTIwICogayArIGVwc2lsb25dLCBbeCAtIDAuMjE0ICogayAtIGVwc2lsb24sIHkgKyAwLjIzNCAqIGsgLSBlcHNpbG9uXV0pXG4gICAgICAgIC5zdHJlYW0ocG9pbnRTdHJlYW0pO1xuXG4gICAgaGF3YWlpUG9pbnQgPSBoYXdhaWlcbiAgICAgICAgLnRyYW5zbGF0ZShbeCAtIDAuMjA1ICogaywgeSArIDAuMjEyICoga10pXG4gICAgICAgIC5jbGlwRXh0ZW50KFtbeCAtIDAuMjE0ICogayArIGVwc2lsb24sIHkgKyAwLjE2NiAqIGsgKyBlcHNpbG9uXSwgW3ggLSAwLjExNSAqIGsgLSBlcHNpbG9uLCB5ICsgMC4yMzQgKiBrIC0gZXBzaWxvbl1dKVxuICAgICAgICAuc3RyZWFtKHBvaW50U3RyZWFtKTtcblxuICAgIHJldHVybiByZXNldCgpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQoYWxiZXJzVXNhLCBleHRlbnQsIG9iamVjdCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdFNpemUgPSBmdW5jdGlvbihzaXplLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0U2l6ZShhbGJlcnNVc2EsIHNpemUsIG9iamVjdCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChhbGJlcnNVc2EsIHdpZHRoLCBvYmplY3QpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQoYWxiZXJzVXNhLCBoZWlnaHQsIG9iamVjdCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2FjaGUgPSBjYWNoZVN0cmVhbSA9IG51bGw7XG4gICAgcmV0dXJuIGFsYmVyc1VzYTtcbiAgfVxuXG4gIHJldHVybiBhbGJlcnNVc2Euc2NhbGUoMTA3MCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/albersUsa.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/azimuthal.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/azimuthal.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"azimuthalInvert\": () => (/* binding */ azimuthalInvert),\n/* harmony export */ \"azimuthalRaw\": () => (/* binding */ azimuthalRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\nfunction azimuthalRaw(scale) {\n return function(x, y) {\n var cx = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x),\n cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x),\n k * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y)\n ];\n }\n}\n\nfunction azimuthalInvert(angle) {\n return function(x, y) {\n var z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x * x + y * y),\n c = angle(z),\n sc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(c),\n cc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(c);\n return [\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(x * sc, z * cc),\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(z && y * sc / z)\n ];\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXVEOztBQUVoRDtBQUNQO0FBQ0EsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQUc7QUFDbEIsVUFBVSw2Q0FBRztBQUNiO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0EsWUFBWSw4Q0FBSTtBQUNoQjtBQUNBLGFBQWEsNkNBQUc7QUFDaEIsYUFBYSw2Q0FBRztBQUNoQjtBQUNBLE1BQU0sK0NBQUs7QUFDWCxNQUFNLDhDQUFJO0FBQ1Y7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsLmpzP2Y0N2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxSYXcoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgY3ggPSBjb3MoeCksXG4gICAgICAgIGN5ID0gY29zKHkpLFxuICAgICAgICBrID0gc2NhbGUoY3ggKiBjeSk7XG4gICAgICAgIGlmIChrID09PSBJbmZpbml0eSkgcmV0dXJuIFsyLCAwXTtcbiAgICByZXR1cm4gW1xuICAgICAgayAqIGN5ICogc2luKHgpLFxuICAgICAgayAqIHNpbih5KVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF6aW11dGhhbEludmVydChhbmdsZSkge1xuICByZXR1cm4gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciB6ID0gc3FydCh4ICogeCArIHkgKiB5KSxcbiAgICAgICAgYyA9IGFuZ2xlKHopLFxuICAgICAgICBzYyA9IHNpbihjKSxcbiAgICAgICAgY2MgPSBjb3MoYyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHggKiBzYywgeiAqIGNjKSxcbiAgICAgIGFzaW4oeiAmJiB5ICogc2MgLyB6KVxuICAgIF07XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/azimuthal.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js": /*!*************************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"azimuthalEqualAreaRaw\": () => (/* binding */ azimuthalEqualAreaRaw),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./azimuthal.js */ \"../../../node_modules/d3-geo/src/projection/azimuthal.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nvar azimuthalEqualAreaRaw = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalRaw)(function(cxcy) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalInvert)(function(z) {\n return 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(z / 2);\n});\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVhbEFyZWEuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDdUI7QUFDekI7O0FBRTdCLDRCQUE0QiwyREFBWTtBQUMvQyxTQUFTLDhDQUFJO0FBQ2IsQ0FBQzs7QUFFRCwrQkFBK0IsOERBQWU7QUFDOUMsYUFBYSw4Q0FBSTtBQUNqQixDQUFDOztBQUVELDZCQUFlLHNDQUFXO0FBQzFCLFNBQVMscURBQVU7QUFDbkI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzPzIyNTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWFsQXJlYVJhdyA9IGF6aW11dGhhbFJhdyhmdW5jdGlvbihjeGN5KSB7XG4gIHJldHVybiBzcXJ0KDIgLyAoMSArIGN4Y3kpKTtcbn0pO1xuXG5hemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhc2luKHogLyAyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1YWxBcmVhUmF3KVxuICAgICAgLnNjYWxlKDEyNC43NSlcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js": /*!***************************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"azimuthalEquidistantRaw\": () => (/* binding */ azimuthalEquidistantRaw),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./azimuthal.js */ \"../../../node_modules/d3-geo/src/projection/azimuthal.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nvar azimuthalEquidistantRaw = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalRaw)(function(c) {\n return (c = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.acos)(c)) && c / (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(c);\n});\n\nazimuthalEquidistantRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalInvert)(function(z) {\n return z;\n});\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVpZGlzdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFxQztBQUN3QjtBQUN6Qjs7QUFFN0IsOEJBQThCLDJEQUFZO0FBQ2pELGNBQWMsOENBQUksWUFBWSw2Q0FBRztBQUNqQyxDQUFDOztBQUVELGlDQUFpQyw4REFBZTtBQUNoRDtBQUNBLENBQUM7O0FBRUQsNkJBQWUsc0NBQVc7QUFDMUIsU0FBUyxxREFBVTtBQUNuQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVpZGlzdGFudC5qcz80MzA4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWNvcywgc2lufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGMpIHtcbiAgcmV0dXJuIChjID0gYWNvcyhjKSkgJiYgYyAvIHNpbihjKTtcbn0pO1xuXG5hemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gejtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcpXG4gICAgICAuc2NhbGUoNzkuNDE4OClcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/conic.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/conic.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"conicProjection\": () => (/* binding */ conicProjection)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\nfunction conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 3,\n m = (0,_index_js__WEBPACK_IMPORTED_MODULE_1__.projectionMutator)(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, phi1 = _[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians) : [phi0 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, phi1 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees];\n };\n\n return p;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pYy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZ0Q7QUFDSDs7QUFFdEM7QUFDUDtBQUNBLGFBQWEsd0NBQUU7QUFDZixVQUFVLDREQUFpQjtBQUMzQjs7QUFFQTtBQUNBLDhDQUE4Qyw2Q0FBTyxnQkFBZ0IsNkNBQU8sWUFBWSw2Q0FBTyxTQUFTLDZDQUFPO0FBQy9HOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pYy5qcz81OGIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVncmVlcywgcGksIHJhZGlhbnN9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge3Byb2plY3Rpb25NdXRhdG9yfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uaWNQcm9qZWN0aW9uKHByb2plY3RBdCkge1xuICB2YXIgcGhpMCA9IDAsXG4gICAgICBwaGkxID0gcGkgLyAzLFxuICAgICAgbSA9IHByb2plY3Rpb25NdXRhdG9yKHByb2plY3RBdCksXG4gICAgICBwID0gbShwaGkwLCBwaGkxKTtcblxuICBwLnBhcmFsbGVscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IG0ocGhpMCA9IF9bMF0gKiByYWRpYW5zLCBwaGkxID0gX1sxXSAqIHJhZGlhbnMpIDogW3BoaTAgKiBkZWdyZWVzLCBwaGkxICogZGVncmVlc107XG4gIH07XG5cbiAgcmV0dXJuIHA7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/conic.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/conicConformal.js": /*!*********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/conicConformal.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"conicConformalRaw\": () => (/* binding */ conicConformalRaw),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ \"../../../node_modules/d3-geo/src/projection/conic.js\");\n/* harmony import */ var _mercator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator.js */ \"../../../node_modules/d3-geo/src/projection/mercator.js\");\n\n\n\n\nfunction tany(y) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tan)((_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n var cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0),\n n = y0 === y1 ? (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0) : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.log)(cy0 / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y1)) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.log)(tany(y1) / tany(y0)),\n f = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.pow)(tany(y0), n) / n;\n\n if (!n) return _mercator_js__WEBPACK_IMPORTED_MODULE_1__.mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) y = -_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon; }\n else { if (y > _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) y = _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon; }\n var r = f / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.pow)(tany(y), n);\n return [r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(n * x), f - r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(n) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x * x + fy * fy),\n l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(x, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(fy)) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(fy);\n if (fy * n < 0)\n l -= _math_js__WEBPACK_IMPORTED_MODULE_0__.pi * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(x) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(fy);\n return [l / n, 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.pow)(f / r, 1 / n)) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi];\n };\n\n return project;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0NvbmZvcm1hbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFzRztBQUMzRDtBQUNEOztBQUUxQztBQUNBLFNBQVMsNkNBQUcsRUFBRSw0Q0FBTTtBQUNwQjs7QUFFTztBQUNQLFlBQVksNkNBQUc7QUFDZixzQkFBc0IsNkNBQUcsT0FBTyw2Q0FBRyxPQUFPLDZDQUFHLFFBQVEsNkNBQUc7QUFDeEQsZ0JBQWdCLDZDQUFHOztBQUVuQixpQkFBaUIscURBQVc7O0FBRTVCO0FBQ0EsaUJBQWlCLFNBQVMsNENBQU0sR0FBRyw2Q0FBTyxPQUFPLDRDQUFNLEdBQUcsNkNBQU87QUFDakUsV0FBVyxRQUFRLDRDQUFNLEdBQUcsNkNBQU8sTUFBTSw0Q0FBTSxHQUFHLDZDQUFPO0FBQ3pELGdCQUFnQiw2Q0FBRztBQUNuQixnQkFBZ0IsNkNBQUcsaUJBQWlCLDZDQUFHO0FBQ3ZDOztBQUVBO0FBQ0Esd0JBQXdCLDhDQUFJLE1BQU0sOENBQUk7QUFDdEMsVUFBVSwrQ0FBSyxJQUFJLDZDQUFHLFFBQVEsOENBQUk7QUFDbEM7QUFDQSxXQUFXLHdDQUFFLEdBQUcsOENBQUksTUFBTSw4Q0FBSTtBQUM5Qix1QkFBdUIsOENBQUksQ0FBQyw2Q0FBRyxrQkFBa0IsNENBQU07QUFDdkQ7O0FBRUE7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQixTQUFTLDBEQUFlO0FBQ3hCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljQ29uZm9ybWFsLmpzPzEzY2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthYnMsIGF0YW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgbG9nLCBwaSwgcG93LCBzaWduLCBzaW4sIHNxcnQsIHRhbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7Y29uaWNQcm9qZWN0aW9ufSBmcm9tIFwiLi9jb25pYy5qc1wiO1xuaW1wb3J0IHttZXJjYXRvclJhd30gZnJvbSBcIi4vbWVyY2F0b3IuanNcIjtcblxuZnVuY3Rpb24gdGFueSh5KSB7XG4gIHJldHVybiB0YW4oKGhhbGZQaSArIHkpIC8gMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0NvbmZvcm1hbFJhdyh5MCwgeTEpIHtcbiAgdmFyIGN5MCA9IGNvcyh5MCksXG4gICAgICBuID0geTAgPT09IHkxID8gc2luKHkwKSA6IGxvZyhjeTAgLyBjb3MoeTEpKSAvIGxvZyh0YW55KHkxKSAvIHRhbnkoeTApKSxcbiAgICAgIGYgPSBjeTAgKiBwb3codGFueSh5MCksIG4pIC8gbjtcblxuICBpZiAoIW4pIHJldHVybiBtZXJjYXRvclJhdztcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICBpZiAoZiA+IDApIHsgaWYgKHkgPCAtaGFsZlBpICsgZXBzaWxvbikgeSA9IC1oYWxmUGkgKyBlcHNpbG9uOyB9XG4gICAgZWxzZSB7IGlmICh5ID4gaGFsZlBpIC0gZXBzaWxvbikgeSA9IGhhbGZQaSAtIGVwc2lsb247IH1cbiAgICB2YXIgciA9IGYgLyBwb3codGFueSh5KSwgbik7XG4gICAgcmV0dXJuIFtyICogc2luKG4gKiB4KSwgZiAtIHIgKiBjb3MobiAqIHgpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBmeSA9IGYgLSB5LCByID0gc2lnbihuKSAqIHNxcnQoeCAqIHggKyBmeSAqIGZ5KSxcbiAgICAgIGwgPSBhdGFuMih4LCBhYnMoZnkpKSAqIHNpZ24oZnkpO1xuICAgIGlmIChmeSAqIG4gPCAwKVxuICAgICAgbCAtPSBwaSAqIHNpZ24oeCkgKiBzaWduKGZ5KTtcbiAgICByZXR1cm4gW2wgLyBuLCAyICogYXRhbihwb3coZiAvIHIsIDEgLyBuKSkgLSBoYWxmUGldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0NvbmZvcm1hbFJhdylcbiAgICAgIC5zY2FsZSgxMDkuNSlcbiAgICAgIC5wYXJhbGxlbHMoWzMwLCAzMF0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/conicConformal.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/conicEqualArea.js": /*!*********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/conicEqualArea.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"conicEqualAreaRaw\": () => (/* binding */ conicEqualAreaRaw),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ \"../../../node_modules/d3-geo/src/projection/conic.js\");\n/* harmony import */ var _cylindricalEqualArea_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cylindricalEqualArea.js */ \"../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js\");\n\n\n\n\nfunction conicEqualAreaRaw(y0, y1) {\n var sy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0), n = (sy0 + (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(n) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) return (0,_cylindricalEqualArea_js__WEBPACK_IMPORTED_MODULE_1__.cylindricalEqualAreaRaw)(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(c) / n;\n\n function project(x, y) {\n var r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(c - 2 * n * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y)) / n;\n return [r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x *= n), r0 - r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(x, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(r0y)) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(r0y);\n if (r0y * n < 0)\n l -= _math_js__WEBPACK_IMPORTED_MODULE_0__.pi * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(x) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(r0y);\n return [l / n, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWFsQXJlYS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErRTtBQUNwQztBQUN1Qjs7QUFFM0Q7QUFDUCxZQUFZLDZDQUFHLGlCQUFpQiw2Q0FBRzs7QUFFbkM7QUFDQSxNQUFNLDZDQUFHLE1BQU0sNkNBQU8sU0FBUyxpRkFBdUI7O0FBRXRELHdDQUF3Qyw4Q0FBSTs7QUFFNUM7QUFDQSxZQUFZLDhDQUFJLGFBQWEsNkNBQUc7QUFDaEMsZ0JBQWdCLDZDQUFHLG1CQUFtQiw2Q0FBRztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0EsWUFBWSwrQ0FBSyxJQUFJLDZDQUFHLFNBQVMsOENBQUk7QUFDckM7QUFDQSxXQUFXLHdDQUFFLEdBQUcsOENBQUksTUFBTSw4Q0FBSTtBQUM5QixtQkFBbUIsOENBQUk7QUFDdkI7O0FBRUE7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQixTQUFTLDBEQUFlO0FBQ3hCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljRXF1YWxBcmVhLmpzP2RlNDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthYnMsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIHBpLCBzaWduLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWMuanNcIjtcbmltcG9ydCB7Y3lsaW5kcmljYWxFcXVhbEFyZWFSYXd9IGZyb20gXCIuL2N5bGluZHJpY2FsRXF1YWxBcmVhLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0VxdWFsQXJlYVJhdyh5MCwgeTEpIHtcbiAgdmFyIHN5MCA9IHNpbih5MCksIG4gPSAoc3kwICsgc2luKHkxKSkgLyAyO1xuXG4gIC8vIEFyZSB0aGUgcGFyYWxsZWxzIHN5bW1ldHJpY2FsIGFyb3VuZCB0aGUgRXF1YXRvcj9cbiAgaWYgKGFicyhuKSA8IGVwc2lsb24pIHJldHVybiBjeWxpbmRyaWNhbEVxdWFsQXJlYVJhdyh5MCk7XG5cbiAgdmFyIGMgPSAxICsgc3kwICogKDIgKiBuIC0gc3kwKSwgcjAgPSBzcXJ0KGMpIC8gbjtcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICB2YXIgciA9IHNxcnQoYyAtIDIgKiBuICogc2luKHkpKSAvIG47XG4gICAgcmV0dXJuIFtyICogc2luKHggKj0gbiksIHIwIC0gciAqIGNvcyh4KV07XG4gIH1cblxuICBwcm9qZWN0LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgcjB5ID0gcjAgLSB5LFxuICAgICAgICBsID0gYXRhbjIoeCwgYWJzKHIweSkpICogc2lnbihyMHkpO1xuICAgIGlmIChyMHkgKiBuIDwgMClcbiAgICAgIGwgLT0gcGkgKiBzaWduKHgpICogc2lnbihyMHkpO1xuICAgIHJldHVybiBbbCAvIG4sIGFzaW4oKGMgLSAoeCAqIHggKyByMHkgKiByMHkpICogbiAqIG4pIC8gKDIgKiBuKSldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0VxdWFsQXJlYVJhdylcbiAgICAgIC5zY2FsZSgxNTUuNDI0KVxuICAgICAgLmNlbnRlcihbMCwgMzMuNjQ0Ml0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/conicEqualArea.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/conicEquidistant.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/conicEquidistant.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"conicEquidistantRaw\": () => (/* binding */ conicEquidistantRaw),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ \"../../../node_modules/d3-geo/src/projection/conic.js\");\n/* harmony import */ var _equirectangular_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./equirectangular.js */ \"../../../node_modules/d3-geo/src/projection/equirectangular.js\");\n\n\n\n\nfunction conicEquidistantRaw(y0, y1) {\n var cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0),\n n = y0 === y1 ? (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0) : (cy0 - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(n) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) return _equirectangular_js__WEBPACK_IMPORTED_MODULE_1__.equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(nx), g - gy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(x, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(gy)) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(gy);\n if (gy * n < 0)\n l -= _math_js__WEBPACK_IMPORTED_MODULE_0__.pi * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(x) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(gy);\n return [l / n, g - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sign)(n) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x * x + gy * gy)];\n };\n\n return project;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWlkaXN0YW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXlFO0FBQzlCO0FBQ2E7O0FBRWpEO0FBQ1AsWUFBWSw2Q0FBRztBQUNmLHNCQUFzQiw2Q0FBRyxjQUFjLDZDQUFHO0FBQzFDOztBQUVBLE1BQU0sNkNBQUcsTUFBTSw2Q0FBTyxTQUFTLG1FQUFrQjs7QUFFakQ7QUFDQTtBQUNBLGlCQUFpQiw2Q0FBRyxlQUFlLDZDQUFHO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxZQUFZLCtDQUFLLElBQUksNkNBQUcsUUFBUSw4Q0FBSTtBQUNwQztBQUNBLFdBQVcsd0NBQUUsR0FBRyw4Q0FBSSxNQUFNLDhDQUFJO0FBQzlCLHVCQUF1Qiw4Q0FBSSxNQUFNLDhDQUFJO0FBQ3JDOztBQUVBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUIsU0FBUywwREFBZTtBQUN4QjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWlkaXN0YW50LmpzP2I1ZDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthYnMsIGF0YW4yLCBjb3MsIGVwc2lsb24sIHBpLCBzaWduLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWMuanNcIjtcbmltcG9ydCB7ZXF1aXJlY3Rhbmd1bGFyUmF3fSBmcm9tIFwiLi9lcXVpcmVjdGFuZ3VsYXIuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmljRXF1aWRpc3RhbnRSYXcoeTAsIHkxKSB7XG4gIHZhciBjeTAgPSBjb3MoeTApLFxuICAgICAgbiA9IHkwID09PSB5MSA/IHNpbih5MCkgOiAoY3kwIC0gY29zKHkxKSkgLyAoeTEgLSB5MCksXG4gICAgICBnID0gY3kwIC8gbiArIHkwO1xuXG4gIGlmIChhYnMobikgPCBlcHNpbG9uKSByZXR1cm4gZXF1aXJlY3Rhbmd1bGFyUmF3O1xuXG4gIGZ1bmN0aW9uIHByb2plY3QoeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5LCBueCA9IG4gKiB4O1xuICAgIHJldHVybiBbZ3kgKiBzaW4obngpLCBnIC0gZ3kgKiBjb3MobngpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5LFxuICAgICAgICBsID0gYXRhbjIoeCwgYWJzKGd5KSkgKiBzaWduKGd5KTtcbiAgICBpZiAoZ3kgKiBuIDwgMClcbiAgICAgIGwgLT0gcGkgKiBzaWduKHgpICogc2lnbihneSk7XG4gICAgcmV0dXJuIFtsIC8gbiwgZyAtIHNpZ24obikgKiBzcXJ0KHggKiB4ICsgZ3kgKiBneSldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0VxdWlkaXN0YW50UmF3KVxuICAgICAgLnNjYWxlKDEzMS4xNTQpXG4gICAgICAuY2VudGVyKFswLCAxMy45Mzg5XSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/conicEquidistant.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js": /*!***************************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cylindricalEqualAreaRaw\": () => (/* binding */ cylindricalEqualAreaRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\nfunction cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(y * cosPhi0)];\n };\n\n return forward;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jeWxpbmRyaWNhbEVxdWFsQXJlYS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwQzs7QUFFbkM7QUFDUCxnQkFBZ0IsNkNBQUc7O0FBRW5CO0FBQ0EsOEJBQThCLDZDQUFHO0FBQ2pDOztBQUVBO0FBQ0EseUJBQXlCLDhDQUFJO0FBQzdCOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jeWxpbmRyaWNhbEVxdWFsQXJlYS5qcz8wOWIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXNpbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjeWxpbmRyaWNhbEVxdWFsQXJlYVJhdyhwaGkwKSB7XG4gIHZhciBjb3NQaGkwID0gY29zKHBoaTApO1xuXG4gIGZ1bmN0aW9uIGZvcndhcmQobGFtYmRhLCBwaGkpIHtcbiAgICByZXR1cm4gW2xhbWJkYSAqIGNvc1BoaTAsIHNpbihwaGkpIC8gY29zUGhpMF07XG4gIH1cblxuICBmb3J3YXJkLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gW3ggLyBjb3NQaGkwLCBhc2luKHkgKiBjb3NQaGkwKV07XG4gIH07XG5cbiAgcmV0dXJuIGZvcndhcmQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/equalEarth.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/equalEarth.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"equalEarthRaw\": () => (/* binding */ equalEarthRaw)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3) / 2,\n iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n var l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(M * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(l),\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(l) / M)\n ];\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(equalEarthRaw)\n .scale(177.158);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0M7QUFDMkI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBSTtBQUNaOztBQUVPO0FBQ1AsVUFBVSw4Q0FBSSxLQUFLLDZDQUFHO0FBQ3RCO0FBQ0EsYUFBYSw2Q0FBRztBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSw2Q0FBRyxVQUFVLDhDQUFRO0FBQzdCO0FBQ0E7QUFDQSwrREFBK0QsNkNBQUc7QUFDbEUsSUFBSSw4Q0FBSSxDQUFDLDZDQUFHO0FBQ1o7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQixTQUFTLHFEQUFVO0FBQ25CO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzP2NmNzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBjb3MsIGVwc2lsb24yLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbnZhciBBMSA9IDEuMzQwMjY0LFxuICAgIEEyID0gLTAuMDgxMTA2LFxuICAgIEEzID0gMC4wMDA4OTMsXG4gICAgQTQgPSAwLjAwMzc5NixcbiAgICBNID0gc3FydCgzKSAvIDIsXG4gICAgaXRlcmF0aW9ucyA9IDEyO1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxFYXJ0aFJhdyhsYW1iZGEsIHBoaSkge1xuICB2YXIgbCA9IGFzaW4oTSAqIHNpbihwaGkpKSwgbDIgPSBsICogbCwgbDYgPSBsMiAqIGwyICogbDI7XG4gIHJldHVybiBbXG4gICAgbGFtYmRhICogY29zKGwpIC8gKE0gKiAoQTEgKyAzICogQTIgKiBsMiArIGw2ICogKDcgKiBBMyArIDkgKiBBNCAqIGwyKSkpLFxuICAgIGwgKiAoQTEgKyBBMiAqIGwyICsgbDYgKiAoQTMgKyBBNCAqIGwyKSlcbiAgXTtcbn1cblxuZXF1YWxFYXJ0aFJhdy5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBsID0geSwgbDIgPSBsICogbCwgbDYgPSBsMiAqIGwyICogbDI7XG4gIGZvciAodmFyIGkgPSAwLCBkZWx0YSwgZnksIGZweTsgaSA8IGl0ZXJhdGlvbnM7ICsraSkge1xuICAgIGZ5ID0gbCAqIChBMSArIEEyICogbDIgKyBsNiAqIChBMyArIEE0ICogbDIpKSAtIHk7XG4gICAgZnB5ID0gQTEgKyAzICogQTIgKiBsMiArIGw2ICogKDcgKiBBMyArIDkgKiBBNCAqIGwyKTtcbiAgICBsIC09IGRlbHRhID0gZnkgLyBmcHksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICAgIGlmIChhYnMoZGVsdGEpIDwgZXBzaWxvbjIpIGJyZWFrO1xuICB9XG4gIHJldHVybiBbXG4gICAgTSAqIHggKiAoQTEgKyAzICogQTIgKiBsMiArIGw2ICogKDcgKiBBMyArIDkgKiBBNCAqIGwyKSkgLyBjb3MobCksXG4gICAgYXNpbihzaW4obCkgLyBNKVxuICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGVxdWFsRWFydGhSYXcpXG4gICAgICAuc2NhbGUoMTc3LjE1OCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/equalEarth.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/equirectangular.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/equirectangular.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"equirectangularRaw\": () => (/* binding */ equirectangularRaw)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\nfunction equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(equirectangularRaw)\n .scale(152.63);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVpcmVjdGFuZ3VsYXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9DOztBQUU3QjtBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUIsU0FBUyxxREFBVTtBQUNuQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzP2Q0MWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWlyZWN0YW5ndWxhclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgcGhpXTtcbn1cblxuZXF1aXJlY3Rhbmd1bGFyUmF3LmludmVydCA9IGVxdWlyZWN0YW5ndWxhclJhdztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGVxdWlyZWN0YW5ndWxhclJhdylcbiAgICAgIC5zY2FsZSgxNTIuNjMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/equirectangular.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/fit.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/fit.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"fitExtent\": () => (/* binding */ fitExtent),\n/* harmony export */ \"fitHeight\": () => (/* binding */ fitHeight),\n/* harmony export */ \"fitSize\": () => (/* binding */ fitSize),\n/* harmony export */ \"fitWidth\": () => (/* binding */ fitWidth)\n/* harmony export */ });\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream.js */ \"../../../node_modules/d3-geo/src/stream.js\");\n/* harmony import */ var _path_bounds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../path/bounds.js */ \"../../../node_modules/d3-geo/src/path/bounds.js\");\n\n\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, projection.stream(_path_bounds_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n fitBounds(_path_bounds_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9maXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWtEO0FBQ0w7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzREFBUywyQkFBMkIsdURBQVk7QUFDbEQsWUFBWSw4REFBbUI7QUFDL0I7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZml0LmpzP2U4OTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWZhdWx0IGFzIGdlb1N0cmVhbX0gZnJvbSBcIi4uL3N0cmVhbS5qc1wiO1xuaW1wb3J0IGJvdW5kc1N0cmVhbSBmcm9tIFwiLi4vcGF0aC9ib3VuZHMuanNcIjtcblxuZnVuY3Rpb24gZml0KHByb2plY3Rpb24sIGZpdEJvdW5kcywgb2JqZWN0KSB7XG4gIHZhciBjbGlwID0gcHJvamVjdGlvbi5jbGlwRXh0ZW50ICYmIHByb2plY3Rpb24uY2xpcEV4dGVudCgpO1xuICBwcm9qZWN0aW9uLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLCAwXSk7XG4gIGlmIChjbGlwICE9IG51bGwpIHByb2plY3Rpb24uY2xpcEV4dGVudChudWxsKTtcbiAgZ2VvU3RyZWFtKG9iamVjdCwgcHJvamVjdGlvbi5zdHJlYW0oYm91bmRzU3RyZWFtKSk7XG4gIGZpdEJvdW5kcyhib3VuZHNTdHJlYW0ucmVzdWx0KCkpO1xuICBpZiAoY2xpcCAhPSBudWxsKSBwcm9qZWN0aW9uLmNsaXBFeHRlbnQoY2xpcCk7XG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0RXh0ZW50KHByb2plY3Rpb24sIGV4dGVudCwgb2JqZWN0KSB7XG4gIHJldHVybiBmaXQocHJvamVjdGlvbiwgZnVuY3Rpb24oYikge1xuICAgIHZhciB3ID0gZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdLFxuICAgICAgICBoID0gZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdLFxuICAgICAgICBrID0gTWF0aC5taW4odyAvIChiWzFdWzBdIC0gYlswXVswXSksIGggLyAoYlsxXVsxXSAtIGJbMF1bMV0pKSxcbiAgICAgICAgeCA9ICtleHRlbnRbMF1bMF0gKyAodyAtIGsgKiAoYlsxXVswXSArIGJbMF1bMF0pKSAvIDIsXG4gICAgICAgIHkgPSArZXh0ZW50WzBdWzFdICsgKGggLSBrICogKGJbMV1bMV0gKyBiWzBdWzFdKSkgLyAyO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCkge1xuICByZXR1cm4gZml0RXh0ZW50KHByb2plY3Rpb24sIFtbMCwgMF0sIHNpemVdLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCkge1xuICByZXR1cm4gZml0KHByb2plY3Rpb24sIGZ1bmN0aW9uKGIpIHtcbiAgICB2YXIgdyA9ICt3aWR0aCxcbiAgICAgICAgayA9IHcgLyAoYlsxXVswXSAtIGJbMF1bMF0pLFxuICAgICAgICB4ID0gKHcgLSBrICogKGJbMV1bMF0gKyBiWzBdWzBdKSkgLyAyLFxuICAgICAgICB5ID0gLWsgKiBiWzBdWzFdO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpIHtcbiAgcmV0dXJuIGZpdChwcm9qZWN0aW9uLCBmdW5jdGlvbihiKSB7XG4gICAgdmFyIGggPSAraGVpZ2h0LFxuICAgICAgICBrID0gaCAvIChiWzFdWzFdIC0gYlswXVsxXSksXG4gICAgICAgIHggPSAtayAqIGJbMF1bMF0sXG4gICAgICAgIHkgPSAoaCAtIGsgKiAoYlsxXVsxXSArIGJbMF1bMV0pKSAvIDI7XG4gICAgcHJvamVjdGlvbi5zY2FsZSgxNTAgKiBrKS50cmFuc2xhdGUoW3gsIHldKTtcbiAgfSwgb2JqZWN0KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/fit.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/gnomonic.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/gnomonic.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"gnomonicRaw\": () => (/* binding */ gnomonicRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ \"../../../node_modules/d3-geo/src/projection/azimuthal.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nfunction gnomonicRaw(x, y) {\n var cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y), k = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x) * cy;\n return [cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x) / k, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y) / k];\n}\n\ngnomonicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(_math_js__WEBPACK_IMPORTED_MODULE_0__.atan);\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9nbm9tb25pYy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUEwQztBQUNLO0FBQ1g7O0FBRTdCO0FBQ1AsV0FBVyw2Q0FBRyxTQUFTLDZDQUFHO0FBQzFCLGVBQWUsNkNBQUcsU0FBUyw2Q0FBRztBQUM5Qjs7QUFFQSxxQkFBcUIsOERBQWUsQ0FBQywwQ0FBSTs7QUFFekMsNkJBQWUsc0NBQVc7QUFDMUIsU0FBUyxxREFBVTtBQUNuQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9nbm9tb25pYy5qcz81YWI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXRhbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ25vbW9uaWNSYXcoeCwgeSkge1xuICB2YXIgY3kgPSBjb3MoeSksIGsgPSBjb3MoeCkgKiBjeTtcbiAgcmV0dXJuIFtjeSAqIHNpbih4KSAvIGssIHNpbih5KSAvIGtdO1xufVxuXG5nbm9tb25pY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXRhbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihnbm9tb25pY1JhdylcbiAgICAgIC5zY2FsZSgxNDQuMDQ5KVxuICAgICAgLmNsaXBBbmdsZSg2MCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/gnomonic.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/identity.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/identity.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/rectangle.js */ \"../../../node_modules/d3-geo/src/clip/rectangle.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../identity.js */ \"../../../node_modules/d3-geo/src/identity.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transform.js */ \"../../../node_modules/d3-geo/src/transform.js\");\n/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fit.js */ \"../../../node_modules/d3-geo/src/projection/fit.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) : (0,_clip_rectangle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * _math_js__WEBPACK_IMPORTED_MODULE_3__.radians, sa = (0,_math_js__WEBPACK_IMPORTED_MODULE_3__.sin)(alpha), ca = (0,_math_js__WEBPACK_IMPORTED_MODULE_3__.cos)(alpha), reset()) : alpha * _math_js__WEBPACK_IMPORTED_MODULE_3__.degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitExtent)(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitSize)(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitWidth)(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitHeight)(projection, height, object);\n };\n\n return projection;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pZGVudGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBaUQ7QUFDWDtBQUNNO0FBQ3FCO0FBQ1g7O0FBRXRELDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDBEQUFXO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGlCQUFpQixvREFBUTtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRixvREFBUSxJQUFJLDhEQUFhO0FBQzFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsNkNBQU8sT0FBTyw2Q0FBRyxjQUFjLDZDQUFHLDRCQUE0Qiw2Q0FBTztBQUN0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjtBQUNBO0FBQ0EsV0FBVyxnREFBTztBQUNsQjtBQUNBO0FBQ0EsV0FBVyxpREFBUTtBQUNuQjtBQUNBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaWRlbnRpdHkuanM/NzJjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi4vY2xpcC9yZWN0YW5nbGUuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCB7Zml0RXh0ZW50LCBmaXRTaXplLCBmaXRXaWR0aCwgZml0SGVpZ2h0fSBmcm9tIFwiLi9maXQuanNcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgayA9IDEsIHR4ID0gMCwgdHkgPSAwLCBzeCA9IDEsIHN5ID0gMSwgLy8gc2NhbGUsIHRyYW5zbGF0ZSBhbmQgcmVmbGVjdFxuICAgICAgYWxwaGEgPSAwLCBjYSwgc2EsIC8vIGFuZ2xlXG4gICAgICB4MCA9IG51bGwsIHkwLCB4MSwgeTEsIC8vIGNsaXAgZXh0ZW50XG4gICAgICBreCA9IDEsIGt5ID0gMSxcbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybWVyKHtcbiAgICAgICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgICB2YXIgcCA9IHByb2plY3Rpb24oW3gsIHldKVxuICAgICAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHBbMF0sIHBbMV0pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHBvc3RjbGlwID0gaWRlbnRpdHksXG4gICAgICBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtO1xuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGt4ID0gayAqIHN4O1xuICAgIGt5ID0gayAqIHN5O1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvamVjdGlvbiAocCkge1xuICAgIHZhciB4ID0gcFswXSAqIGt4LCB5ID0gcFsxXSAqIGt5O1xuICAgIGlmIChhbHBoYSkge1xuICAgICAgdmFyIHQgPSB5ICogY2EgLSB4ICogc2E7XG4gICAgICB4ID0geCAqIGNhICsgeSAqIHNhO1xuICAgICAgeSA9IHQ7XG4gICAgfSAgICBcbiAgICByZXR1cm4gW3ggKyB0eCwgeSArIHR5XTtcbiAgfVxuICBwcm9qZWN0aW9uLmludmVydCA9IGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgeCA9IHBbMF0gLSB0eCwgeSA9IHBbMV0gLSB0eTtcbiAgICBpZiAoYWxwaGEpIHtcbiAgICAgIHZhciB0ID0geSAqIGNhICsgeCAqIHNhO1xuICAgICAgeCA9IHggKiBjYSAtIHkgKiBzYTtcbiAgICAgIHkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gW3ggLyBreCwgeSAvIGt5XTtcbiAgfTtcbiAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSB0cmFuc2Zvcm0ocG9zdGNsaXAoY2FjaGVTdHJlYW0gPSBzdHJlYW0pKTtcbiAgfTtcbiAgcHJvamVjdGlvbi5wb3N0Y2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8sIHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgcmVzZXQoKSkgOiBwb3N0Y2xpcDtcbiAgfTtcbiAgcHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXyA9PSBudWxsID8gKHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgaWRlbnRpdHkpIDogY2xpcFJlY3RhbmdsZSh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSwgcmVzZXQoKSkgOiB4MCA9PSBudWxsID8gbnVsbCA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICB9O1xuICBwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGsgPSArXywgcmVzZXQoKSkgOiBrO1xuICB9O1xuICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eCA9ICtfWzBdLCB0eSA9ICtfWzFdLCByZXNldCgpKSA6IFt0eCwgdHldO1xuICB9XG4gIHByb2plY3Rpb24uYW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSBfICUgMzYwICogcmFkaWFucywgc2EgPSBzaW4oYWxwaGEpLCBjYSA9IGNvcyhhbHBoYSksIHJlc2V0KCkpIDogYWxwaGEgKiBkZWdyZWVzO1xuICB9O1xuICBwcm9qZWN0aW9uLnJlZmxlY3RYID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN4ID0gXyA/IC0xIDogMSwgcmVzZXQoKSkgOiBzeCA8IDA7XG4gIH07XG4gIHByb2plY3Rpb24ucmVmbGVjdFkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3kgPSBfID8gLTEgOiAxLCByZXNldCgpKSA6IHN5IDwgMDtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQocHJvamVjdGlvbiwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFNpemUgPSBmdW5jdGlvbihzaXplLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0U2l6ZShwcm9qZWN0aW9uLCBzaXplLCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/index.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ projection),\n/* harmony export */ \"projectionMutator\": () => (/* binding */ projectionMutator)\n/* harmony export */ });\n/* harmony import */ var _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/antimeridian.js */ \"../../../node_modules/d3-geo/src/clip/antimeridian.js\");\n/* harmony import */ var _clip_circle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../clip/circle.js */ \"../../../node_modules/d3-geo/src/clip/circle.js\");\n/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../clip/rectangle.js */ \"../../../node_modules/d3-geo/src/clip/rectangle.js\");\n/* harmony import */ var _compose_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../compose.js */ \"../../../node_modules/d3-geo/src/compose.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../identity.js */ \"../../../node_modules/d3-geo/src/identity.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../rotation.js */ \"../../../node_modules/d3-geo/src/rotation.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transform.js */ \"../../../node_modules/d3-geo/src/transform.js\");\n/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fit.js */ \"../../../node_modules/d3-geo/src/projection/fit.js\");\n/* harmony import */ var _resample_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./resample.js */ \"../../../node_modules/d3-geo/src/projection/resample.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar transformRadians = (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({\n point: function(x, y) {\n this.stream.point(x * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, y * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(alpha),\n sinAlpha = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nfunction projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], // pre-clip angle\n x0 = null, y0, x1, y1, postclip = _identity_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? (0,_clip_circle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(theta = _ * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians) : (theta = null, _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]), reset()) : theta * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) : (0,_clip_rectangle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi = _[1] % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, recenter()) : [lambda * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, phi * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, deltaPhi = _[1] % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, deltaGamma = _.length > 2 ? _[2] % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians : 0, recenter()) : [deltaLambda * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, deltaPhi * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, deltaGamma * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, recenter()) : alpha * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = (0,_resample_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(projectTransform, delta2 = _ * _), reset()) : (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitExtent)(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitSize)(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitWidth)(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitHeight)(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = (0,_rotation_js__WEBPACK_IMPORTED_MODULE_8__.rotateRadians)(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = (0,_compose_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(project, transform);\n projectRotateTransform = (0,_compose_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(rotate, projectTransform);\n projectResample = (0,_resample_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBdUQ7QUFDWjtBQUNNO0FBQ2I7QUFDRTtBQUNzQjtBQUNmO0FBQ0Q7QUFDcUI7QUFDNUI7O0FBRXJDLHVCQUF1QiwwREFBVztBQUNsQztBQUNBLDBCQUEwQiw2Q0FBTyxNQUFNLDZDQUFPO0FBQzlDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLFNBQVMsMERBQVc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLDZDQUFHO0FBQ3BCLGlCQUFpQiw2Q0FBRztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmLHdDQUF3QyxpQkFBaUI7QUFDekQ7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDZEQUFnQjtBQUM5Qyx3Q0FBd0Msb0RBQVE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLDZDQUFPLGFBQWEsNkNBQU87QUFDeEU7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQyw2Q0FBTyxhQUFhLDZDQUFPO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDLDJEQUFVLGFBQWEsNkNBQU8sbUJBQW1CLDZEQUFnQixzQkFBc0IsNkNBQU87QUFDNUk7O0FBRUE7QUFDQSxpRkFBaUYsb0RBQVEsSUFBSSw4REFBYTtBQUMxRzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFELDZDQUFPLHFCQUFxQiw2Q0FBTywwQkFBMEIsNkNBQU8sUUFBUSw2Q0FBTztBQUN4STs7QUFFQTtBQUNBLDBEQUEwRCw2Q0FBTywwQkFBMEIsNkNBQU8sMkNBQTJDLDZDQUFPLG1DQUFtQyw2Q0FBTyxhQUFhLDZDQUFPLGVBQWUsNkNBQU87QUFDeE87O0FBRUE7QUFDQSxpREFBaUQsNkNBQU8sd0JBQXdCLDZDQUFPO0FBQ3ZGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQsd0RBQVEsK0NBQStDLDhDQUFJO0FBQzVHOztBQUVBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjs7QUFFQTtBQUNBLFdBQVcsZ0RBQU87QUFDbEI7O0FBRUE7QUFDQSxXQUFXLGlEQUFRO0FBQ25COztBQUVBO0FBQ0EsV0FBVyxrREFBUztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDJEQUFhO0FBQzFCLHVCQUF1Qix1REFBTztBQUM5Qiw2QkFBNkIsdURBQU87QUFDcEMsc0JBQXNCLHdEQUFRO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanM/ODA3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xpcEFudGltZXJpZGlhbiBmcm9tIFwiLi4vY2xpcC9hbnRpbWVyaWRpYW4uanNcIjtcbmltcG9ydCBjbGlwQ2lyY2xlIGZyb20gXCIuLi9jbGlwL2NpcmNsZS5qc1wiO1xuaW1wb3J0IGNsaXBSZWN0YW5nbGUgZnJvbSBcIi4uL2NsaXAvcmVjdGFuZ2xlLmpzXCI7XG5pbXBvcnQgY29tcG9zZSBmcm9tIFwiLi4vY29tcG9zZS5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuLi9pZGVudGl0eS5qc1wiO1xuaW1wb3J0IHtjb3MsIGRlZ3JlZXMsIHJhZGlhbnMsIHNpbiwgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7cm90YXRlUmFkaWFuc30gZnJvbSBcIi4uL3JvdGF0aW9uLmpzXCI7XG5pbXBvcnQge3RyYW5zZm9ybWVyfSBmcm9tIFwiLi4vdHJhbnNmb3JtLmpzXCI7XG5pbXBvcnQge2ZpdEV4dGVudCwgZml0U2l6ZSwgZml0V2lkdGgsIGZpdEhlaWdodH0gZnJvbSBcIi4vZml0LmpzXCI7XG5pbXBvcnQgcmVzYW1wbGUgZnJvbSBcIi4vcmVzYW1wbGUuanNcIjtcblxudmFyIHRyYW5zZm9ybVJhZGlhbnMgPSB0cmFuc2Zvcm1lcih7XG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5zdHJlYW0ucG9pbnQoeCAqIHJhZGlhbnMsIHkgKiByYWRpYW5zKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVJvdGF0ZShyb3RhdGUpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKHtcbiAgICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgdmFyIHIgPSByb3RhdGUoeCwgeSk7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoclswXSwgclsxXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2NhbGVUcmFuc2xhdGUoaywgZHgsIGR5LCBzeCwgc3kpIHtcbiAgZnVuY3Rpb24gdHJhbnNmb3JtKHgsIHkpIHtcbiAgICB4ICo9IHN4OyB5ICo9IHN5O1xuICAgIHJldHVybiBbZHggKyBrICogeCwgZHkgLSBrICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gWyh4IC0gZHgpIC8gayAqIHN4LCAoZHkgLSB5KSAvIGsgKiBzeV07XG4gIH07XG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cbmZ1bmN0aW9uIHNjYWxlVHJhbnNsYXRlUm90YXRlKGssIGR4LCBkeSwgc3gsIHN5LCBhbHBoYSkge1xuICBpZiAoIWFscGhhKSByZXR1cm4gc2NhbGVUcmFuc2xhdGUoaywgZHgsIGR5LCBzeCwgc3kpO1xuICB2YXIgY29zQWxwaGEgPSBjb3MoYWxwaGEpLFxuICAgICAgc2luQWxwaGEgPSBzaW4oYWxwaGEpLFxuICAgICAgYSA9IGNvc0FscGhhICogayxcbiAgICAgIGIgPSBzaW5BbHBoYSAqIGssXG4gICAgICBhaSA9IGNvc0FscGhhIC8gayxcbiAgICAgIGJpID0gc2luQWxwaGEgLyBrLFxuICAgICAgY2kgPSAoc2luQWxwaGEgKiBkeSAtIGNvc0FscGhhICogZHgpIC8gayxcbiAgICAgIGZpID0gKHNpbkFscGhhICogZHggKyBjb3NBbHBoYSAqIGR5KSAvIGs7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5KSB7XG4gICAgeCAqPSBzeDsgeSAqPSBzeTtcbiAgICByZXR1cm4gW2EgKiB4IC0gYiAqIHkgKyBkeCwgZHkgLSBiICogeCAtIGEgKiB5XTtcbiAgfVxuICB0cmFuc2Zvcm0uaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiBbc3ggKiAoYWkgKiB4IC0gYmkgKiB5ICsgY2kpLCBzeSAqIChmaSAtIGJpICogeCAtIGFpICogeSldO1xuICB9O1xuICByZXR1cm4gdHJhbnNmb3JtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9qZWN0aW9uKHByb2plY3QpIHtcbiAgcmV0dXJuIHByb2plY3Rpb25NdXRhdG9yKGZ1bmN0aW9uKCkgeyByZXR1cm4gcHJvamVjdDsgfSkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3Rpb25NdXRhdG9yKHByb2plY3RBdCkge1xuICB2YXIgcHJvamVjdCxcbiAgICAgIGsgPSAxNTAsIC8vIHNjYWxlXG4gICAgICB4ID0gNDgwLCB5ID0gMjUwLCAvLyB0cmFuc2xhdGVcbiAgICAgIGxhbWJkYSA9IDAsIHBoaSA9IDAsIC8vIGNlbnRlclxuICAgICAgZGVsdGFMYW1iZGEgPSAwLCBkZWx0YVBoaSA9IDAsIGRlbHRhR2FtbWEgPSAwLCByb3RhdGUsIC8vIHByZS1yb3RhdGVcbiAgICAgIGFscGhhID0gMCwgLy8gcG9zdC1yb3RhdGUgYW5nbGVcbiAgICAgIHN4ID0gMSwgLy8gcmVmbGVjdFhcbiAgICAgIHN5ID0gMSwgLy8gcmVmbGVjdFhcbiAgICAgIHRoZXRhID0gbnVsbCwgcHJlY2xpcCA9IGNsaXBBbnRpbWVyaWRpYW4sIC8vIHByZS1jbGlwIGFuZ2xlXG4gICAgICB4MCA9IG51bGwsIHkwLCB4MSwgeTEsIHBvc3RjbGlwID0gaWRlbnRpdHksIC8vIHBvc3QtY2xpcCBleHRlbnRcbiAgICAgIGRlbHRhMiA9IDAuNSwgLy8gcHJlY2lzaW9uXG4gICAgICBwcm9qZWN0UmVzYW1wbGUsXG4gICAgICBwcm9qZWN0VHJhbnNmb3JtLFxuICAgICAgcHJvamVjdFJvdGF0ZVRyYW5zZm9ybSxcbiAgICAgIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW07XG5cbiAgZnVuY3Rpb24gcHJvamVjdGlvbihwb2ludCkge1xuICAgIHJldHVybiBwcm9qZWN0Um90YXRlVHJhbnNmb3JtKHBvaW50WzBdICogcmFkaWFucywgcG9pbnRbMV0gKiByYWRpYW5zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmVydChwb2ludCkge1xuICAgIHBvaW50ID0gcHJvamVjdFJvdGF0ZVRyYW5zZm9ybS5pbnZlcnQocG9pbnRbMF0sIHBvaW50WzFdKTtcbiAgICByZXR1cm4gcG9pbnQgJiYgW3BvaW50WzBdICogZGVncmVlcywgcG9pbnRbMV0gKiBkZWdyZWVzXTtcbiAgfVxuXG4gIHByb2plY3Rpb24uc3RyZWFtID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgcmV0dXJuIGNhY2hlICYmIGNhY2hlU3RyZWFtID09PSBzdHJlYW0gPyBjYWNoZSA6IGNhY2hlID0gdHJhbnNmb3JtUmFkaWFucyh0cmFuc2Zvcm1Sb3RhdGUocm90YXRlKShwcmVjbGlwKHByb2plY3RSZXNhbXBsZShwb3N0Y2xpcChjYWNoZVN0cmVhbSA9IHN0cmVhbSkpKSkpO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucHJlY2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcmVjbGlwID0gXywgdGhldGEgPSB1bmRlZmluZWQsIHJlc2V0KCkpIDogcHJlY2xpcDtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnBvc3RjbGlwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXywgeDAgPSB5MCA9IHgxID0geTEgPSBudWxsLCByZXNldCgpKSA6IHBvc3RjbGlwO1xuICB9O1xuXG4gIHByb2plY3Rpb24uY2xpcEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByZWNsaXAgPSArXyA/IGNsaXBDaXJjbGUodGhldGEgPSBfICogcmFkaWFucykgOiAodGhldGEgPSBudWxsLCBjbGlwQW50aW1lcmlkaWFuKSwgcmVzZXQoKSkgOiB0aGV0YSAqIGRlZ3JlZXM7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXyA9PSBudWxsID8gKHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgaWRlbnRpdHkpIDogY2xpcFJlY3RhbmdsZSh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSwgcmVzZXQoKSkgOiB4MCA9PSBudWxsID8gbnVsbCA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICB9O1xuXG4gIHByb2plY3Rpb24uc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoayA9ICtfLCByZWNlbnRlcigpKSA6IGs7XG4gIH07XG5cbiAgcHJvamVjdGlvbi50cmFuc2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9ICtfWzBdLCB5ID0gK19bMV0sIHJlY2VudGVyKCkpIDogW3gsIHldO1xuICB9O1xuXG4gIHByb2plY3Rpb24uY2VudGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxhbWJkYSA9IF9bMF0gJSAzNjAgKiByYWRpYW5zLCBwaGkgPSBfWzFdICUgMzYwICogcmFkaWFucywgcmVjZW50ZXIoKSkgOiBbbGFtYmRhICogZGVncmVlcywgcGhpICogZGVncmVlc107XG4gIH07XG5cbiAgcHJvamVjdGlvbi5yb3RhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVsdGFMYW1iZGEgPSBfWzBdICUgMzYwICogcmFkaWFucywgZGVsdGFQaGkgPSBfWzFdICUgMzYwICogcmFkaWFucywgZGVsdGFHYW1tYSA9IF8ubGVuZ3RoID4gMiA/IF9bMl0gJSAzNjAgKiByYWRpYW5zIDogMCwgcmVjZW50ZXIoKSkgOiBbZGVsdGFMYW1iZGEgKiBkZWdyZWVzLCBkZWx0YVBoaSAqIGRlZ3JlZXMsIGRlbHRhR2FtbWEgKiBkZWdyZWVzXTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhID0gXyAlIDM2MCAqIHJhZGlhbnMsIHJlY2VudGVyKCkpIDogYWxwaGEgKiBkZWdyZWVzO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucmVmbGVjdFggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3ggPSBfID8gLTEgOiAxLCByZWNlbnRlcigpKSA6IHN4IDwgMDtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnJlZmxlY3RZID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN5ID0gXyA/IC0xIDogMSwgcmVjZW50ZXIoKSkgOiBzeSA8IDA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJvamVjdFJlc2FtcGxlID0gcmVzYW1wbGUocHJvamVjdFRyYW5zZm9ybSwgZGVsdGEyID0gXyAqIF8pLCByZXNldCgpKSA6IHNxcnQoZGVsdGEyKTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEV4dGVudCA9IGZ1bmN0aW9uKGV4dGVudCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEV4dGVudChwcm9qZWN0aW9uLCBleHRlbnQsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRTaXplID0gZnVuY3Rpb24oc2l6ZSwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFNpemUocHJvamVjdGlvbiwgc2l6ZSwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEhlaWdodChwcm9qZWN0aW9uLCBoZWlnaHQsIG9iamVjdCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjZW50ZXIoKSB7XG4gICAgdmFyIGNlbnRlciA9IHNjYWxlVHJhbnNsYXRlUm90YXRlKGssIDAsIDAsIHN4LCBzeSwgYWxwaGEpLmFwcGx5KG51bGwsIHByb2plY3QobGFtYmRhLCBwaGkpKSxcbiAgICAgICAgdHJhbnNmb3JtID0gc2NhbGVUcmFuc2xhdGVSb3RhdGUoaywgeCAtIGNlbnRlclswXSwgeSAtIGNlbnRlclsxXSwgc3gsIHN5LCBhbHBoYSk7XG4gICAgcm90YXRlID0gcm90YXRlUmFkaWFucyhkZWx0YUxhbWJkYSwgZGVsdGFQaGksIGRlbHRhR2FtbWEpO1xuICAgIHByb2plY3RUcmFuc2Zvcm0gPSBjb21wb3NlKHByb2plY3QsIHRyYW5zZm9ybSk7XG4gICAgcHJvamVjdFJvdGF0ZVRyYW5zZm9ybSA9IGNvbXBvc2Uocm90YXRlLCBwcm9qZWN0VHJhbnNmb3JtKTtcbiAgICBwcm9qZWN0UmVzYW1wbGUgPSByZXNhbXBsZShwcm9qZWN0VHJhbnNmb3JtLCBkZWx0YTIpO1xuICAgIHJldHVybiByZXNldCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2FjaGUgPSBjYWNoZVN0cmVhbSA9IG51bGw7XG4gICAgcmV0dXJuIHByb2plY3Rpb247XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcHJvamVjdCA9IHByb2plY3RBdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHByb2plY3Rpb24uaW52ZXJ0ID0gcHJvamVjdC5pbnZlcnQgJiYgaW52ZXJ0O1xuICAgIHJldHVybiByZWNlbnRlcigpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/mercator.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/mercator.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"mercatorProjection\": () => (/* binding */ mercatorProjection),\n/* harmony export */ \"mercatorRaw\": () => (/* binding */ mercatorRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rotation.js */ \"../../../node_modules/d3-geo/src/rotation.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nfunction mercatorRaw(lambda, phi) {\n return [lambda, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.log)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tan)((_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.exp)(y)) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi];\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / _math_js__WEBPACK_IMPORTED_MODULE_0__.tau);\n}\n\nfunction mercatorProjection(project) {\n var m = (0,_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = _math_js__WEBPACK_IMPORTED_MODULE_0__.pi * scale(),\n t = m((0,_rotation_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9tZXJjYXRvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBZ0U7QUFDMUI7QUFDRjs7QUFFN0I7QUFDUCxrQkFBa0IsNkNBQUcsQ0FBQyw2Q0FBRyxFQUFFLDRDQUFNO0FBQ2pDOztBQUVBO0FBQ0EsaUJBQWlCLDhDQUFJLENBQUMsNkNBQUcsT0FBTyw0Q0FBTTtBQUN0Qzs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBLG1CQUFtQix5Q0FBRztBQUN0Qjs7QUFFTztBQUNQLFVBQVUscURBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksd0NBQUU7QUFDZCxjQUFjLHdEQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL21lcmNhdG9yLmpzPzAyNTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthdGFuLCBleHAsIGhhbGZQaSwgbG9nLCBwaSwgdGFuLCB0YXV9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQgcm90YXRpb24gZnJvbSBcIi4uL3JvdGF0aW9uLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JSYXcobGFtYmRhLCBwaGkpIHtcbiAgcmV0dXJuIFtsYW1iZGEsIGxvZyh0YW4oKGhhbGZQaSArIHBoaSkgLyAyKSldO1xufVxuXG5tZXJjYXRvclJhdy5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIHJldHVybiBbeCwgMiAqIGF0YW4oZXhwKHkpKSAtIGhhbGZQaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG1lcmNhdG9yUHJvamVjdGlvbihtZXJjYXRvclJhdylcbiAgICAgIC5zY2FsZSg5NjEgLyB0YXUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JQcm9qZWN0aW9uKHByb2plY3QpIHtcbiAgdmFyIG0gPSBwcm9qZWN0aW9uKHByb2plY3QpLFxuICAgICAgY2VudGVyID0gbS5jZW50ZXIsXG4gICAgICBzY2FsZSA9IG0uc2NhbGUsXG4gICAgICB0cmFuc2xhdGUgPSBtLnRyYW5zbGF0ZSxcbiAgICAgIGNsaXBFeHRlbnQgPSBtLmNsaXBFeHRlbnQsXG4gICAgICB4MCA9IG51bGwsIHkwLCB4MSwgeTE7IC8vIGNsaXAgZXh0ZW50XG5cbiAgbS5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZShfKSwgcmVjbGlwKCkpIDogc2NhbGUoKTtcbiAgfTtcblxuICBtLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0cmFuc2xhdGUoXyksIHJlY2xpcCgpKSA6IHRyYW5zbGF0ZSgpO1xuICB9O1xuXG4gIG0uY2VudGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNlbnRlcihfKSwgcmVjbGlwKCkpIDogY2VudGVyKCk7XG4gIH07XG5cbiAgbS5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChfID09IG51bGwgPyB4MCA9IHkwID0geDEgPSB5MSA9IG51bGwgOiAoeDAgPSArX1swXVswXSwgeTAgPSArX1swXVsxXSwgeDEgPSArX1sxXVswXSwgeTEgPSArX1sxXVsxXSkpLCByZWNsaXAoKSkgOiB4MCA9PSBudWxsID8gbnVsbCA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlY2xpcCgpIHtcbiAgICB2YXIgayA9IHBpICogc2NhbGUoKSxcbiAgICAgICAgdCA9IG0ocm90YXRpb24obS5yb3RhdGUoKSkuaW52ZXJ0KFswLCAwXSkpO1xuICAgIHJldHVybiBjbGlwRXh0ZW50KHgwID09IG51bGxcbiAgICAgICAgPyBbW3RbMF0gLSBrLCB0WzFdIC0ga10sIFt0WzBdICsgaywgdFsxXSArIGtdXSA6IHByb2plY3QgPT09IG1lcmNhdG9yUmF3XG4gICAgICAgID8gW1tNYXRoLm1heCh0WzBdIC0gaywgeDApLCB5MF0sIFtNYXRoLm1pbih0WzBdICsgaywgeDEpLCB5MV1dXG4gICAgICAgIDogW1t4MCwgTWF0aC5tYXgodFsxXSAtIGssIHkwKV0sIFt4MSwgTWF0aC5taW4odFsxXSArIGssIHkxKV1dKTtcbiAgfVxuXG4gIHJldHVybiByZWNsaXAoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/mercator.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/naturalEarth1.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/naturalEarth1.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"naturalEarth1Raw\": () => (/* binding */ naturalEarth1Raw)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\nfunction naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(naturalEarth1Raw)\n .scale(175.295);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9uYXR1cmFsRWFydGgxLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0M7QUFDSTs7QUFFakM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLDZDQUFHLFVBQVUsNkNBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQixTQUFTLHFEQUFVO0FBQ25CO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9uYXR1cmFsRWFydGgxLmpzP2I5YTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBlcHNpbG9ufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbmF0dXJhbEVhcnRoMVJhdyhsYW1iZGEsIHBoaSkge1xuICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqICgwLjg3MDcgLSAwLjEzMTk3OSAqIHBoaTIgKyBwaGk0ICogKC0wLjAxMzc5MSArIHBoaTQgKiAoMC4wMDM5NzEgKiBwaGkyIC0gMC4wMDE1MjkgKiBwaGk0KSkpLFxuICAgIHBoaSAqICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKyBwaGk0ICogKC0wLjA0NDQ3NSArIDAuMDI4ODc0ICogcGhpMiAtIDAuMDA1OTE2ICogcGhpNCkpKVxuICBdO1xufVxuXG5uYXR1cmFsRWFydGgxUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIHBoaSA9IHksIGkgPSAyNSwgZGVsdGE7XG4gIGRvIHtcbiAgICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICAgIHBoaSAtPSBkZWx0YSA9IChwaGkgKiAoMS4wMDcyMjYgKyBwaGkyICogKDAuMDE1MDg1ICsgcGhpNCAqICgtMC4wNDQ0NzUgKyAwLjAyODg3NCAqIHBoaTIgLSAwLjAwNTkxNiAqIHBoaTQpKSkgLSB5KSAvXG4gICAgICAgICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKiAzICsgcGhpNCAqICgtMC4wNDQ0NzUgKiA3ICsgMC4wMjg4NzQgKiA5ICogcGhpMiAtIDAuMDA1OTE2ICogMTEgKiBwaGk0KSkpO1xuICB9IHdoaWxlIChhYnMoZGVsdGEpID4gZXBzaWxvbiAmJiAtLWkgPiAwKTtcbiAgcmV0dXJuIFtcbiAgICB4IC8gKDAuODcwNyArIChwaGkyID0gcGhpICogcGhpKSAqICgtMC4xMzE5NzkgKyBwaGkyICogKC0wLjAxMzc5MSArIHBoaTIgKiBwaGkyICogcGhpMiAqICgwLjAwMzk3MSAtIDAuMDAxNTI5ICogcGhpMikpKSksXG4gICAgcGhpXG4gIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24obmF0dXJhbEVhcnRoMVJhdylcbiAgICAgIC5zY2FsZSgxNzUuMjk1KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/naturalEarth1.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/orthographic.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/orthographic.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"orthographicRaw\": () => (/* binding */ orthographicRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ \"../../../node_modules/d3-geo/src/projection/azimuthal.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nfunction orthographicRaw(x, y) {\n return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y)];\n}\n\northographicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(_math_js__WEBPACK_IMPORTED_MODULE_0__.asin);\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9vcnRob2dyYXBoaWMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbUQ7QUFDSjtBQUNYOztBQUU3QjtBQUNQLFVBQVUsNkNBQUcsTUFBTSw2Q0FBRyxLQUFLLDZDQUFHO0FBQzlCOztBQUVBLHlCQUF5Qiw4REFBZSxDQUFDLDBDQUFJOztBQUU3Qyw2QkFBZSxzQ0FBVztBQUMxQixTQUFTLHFEQUFVO0FBQ25CO0FBQ0Esc0JBQXNCLDZDQUFPO0FBQzdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vb3J0aG9ncmFwaGljLmpzP2E3YjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthc2luLCBjb3MsIGVwc2lsb24sIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWwuanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcnRob2dyYXBoaWNSYXcoeCwgeSkge1xuICByZXR1cm4gW2Nvcyh5KSAqIHNpbih4KSwgc2luKHkpXTtcbn1cblxub3J0aG9ncmFwaGljUmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChhc2luKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKG9ydGhvZ3JhcGhpY1JhdylcbiAgICAgIC5zY2FsZSgyNDkuNSlcbiAgICAgIC5jbGlwQW5nbGUoOTAgKyBlcHNpbG9uKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/orthographic.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/resample.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/resample.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../cartesian.js */ \"../../../node_modules/d3-geo/src/cartesian.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transform.js */ \"../../../node_modules/d3-geo/src/transform.js\");\n\n\n\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(30 * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians); // cos(minimum angular distance)\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return (0,_transform_js__WEBPACK_IMPORTED_MODULE_1__.transformer)({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(a * a + b * b + c * c),\n phi2 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(c /= m),\n lambda2 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(c) - 1) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon || (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(lambda0 - lambda1) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon ? (lambda0 + lambda1) / 2 : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesian)([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9yZXNhbXBsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBDO0FBQytCO0FBQzdCOztBQUU1QztBQUNBLHFCQUFxQiw2Q0FBRyxNQUFNLDZDQUFPLEdBQUc7O0FBRXhDLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLDBEQUFXO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCLGlCQUFpQiw4Q0FBSTtBQUNyQixvQkFBb0IsNkNBQUcsQ0FBQyw2Q0FBRyxXQUFXLDZDQUFPLElBQUksNkNBQUcsc0JBQXNCLDZDQUFPLDZCQUE2QiwrQ0FBSztBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNkNBQUc7QUFDaEIsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHVCQUF1Qix1Q0FBdUM7QUFDL0YsK0JBQStCLHFCQUFxQjtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyx3REFBUztBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL3Jlc2FtcGxlLmpzPzQxODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjYXJ0ZXNpYW59IGZyb20gXCIuLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCByYWRpYW5zLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybS5qc1wiO1xuXG52YXIgbWF4RGVwdGggPSAxNiwgLy8gbWF4aW11bSBkZXB0aCBvZiBzdWJkaXZpc2lvblxuICAgIGNvc01pbkRpc3RhbmNlID0gY29zKDMwICogcmFkaWFucyk7IC8vIGNvcyhtaW5pbXVtIGFuZ3VsYXIgZGlzdGFuY2UpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHByb2plY3QsIGRlbHRhMikge1xuICByZXR1cm4gK2RlbHRhMiA/IHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikgOiByZXNhbXBsZU5vbmUocHJvamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlTm9uZShwcm9qZWN0KSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgdGhpcy5zdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzYW1wbGUocHJvamVjdCwgZGVsdGEyKSB7XG5cbiAgZnVuY3Rpb24gcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pIHtcbiAgICB2YXIgZHggPSB4MSAtIHgwLFxuICAgICAgICBkeSA9IHkxIC0geTAsXG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgaWYgKGQyID4gNCAqIGRlbHRhMiAmJiBkZXB0aC0tKSB7XG4gICAgICB2YXIgYSA9IGEwICsgYTEsXG4gICAgICAgICAgYiA9IGIwICsgYjEsXG4gICAgICAgICAgYyA9IGMwICsgYzEsXG4gICAgICAgICAgbSA9IHNxcnQoYSAqIGEgKyBiICogYiArIGMgKiBjKSxcbiAgICAgICAgICBwaGkyID0gYXNpbihjIC89IG0pLFxuICAgICAgICAgIGxhbWJkYTIgPSBhYnMoYWJzKGMpIC0gMSkgPCBlcHNpbG9uIHx8IGFicyhsYW1iZGEwIC0gbGFtYmRhMSkgPCBlcHNpbG9uID8gKGxhbWJkYTAgKyBsYW1iZGExKSAvIDIgOiBhdGFuMihiLCBhKSxcbiAgICAgICAgICBwID0gcHJvamVjdChsYW1iZGEyLCBwaGkyKSxcbiAgICAgICAgICB4MiA9IHBbMF0sXG4gICAgICAgICAgeTIgPSBwWzFdLFxuICAgICAgICAgIGR4MiA9IHgyIC0geDAsXG4gICAgICAgICAgZHkyID0geTIgLSB5MCxcbiAgICAgICAgICBkeiA9IGR5ICogZHgyIC0gZHggKiBkeTI7XG4gICAgICBpZiAoZHogKiBkeiAvIGQyID4gZGVsdGEyIC8vIHBlcnBlbmRpY3VsYXIgcHJvamVjdGVkIGRpc3RhbmNlXG4gICAgICAgICAgfHwgYWJzKChkeCAqIGR4MiArIGR5ICogZHkyKSAvIGQyIC0gMC41KSA+IDAuMyAvLyBtaWRwb2ludCBjbG9zZSB0byBhbiBlbmRcbiAgICAgICAgICB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSkgeyAvLyBhbmd1bGFyIGRpc3RhbmNlXG4gICAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDIsIHkyLCBsYW1iZGEyLCBhIC89IG0sIGIgLz0gbSwgYywgZGVwdGgsIHN0cmVhbSk7XG4gICAgICAgIHN0cmVhbS5wb2ludCh4MiwgeTIpO1xuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MiwgeTIsIGxhbWJkYTIsIGEsIGIsIGMsIHgxLCB5MSwgbGFtYmRhMSwgYTEsIGIxLCBjMSwgZGVwdGgsIHN0cmVhbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgbGFtYmRhMDAsIHgwMCwgeTAwLCBhMDAsIGIwMCwgYzAwLCAvLyBmaXJzdCBwb2ludFxuICAgICAgICBsYW1iZGEwLCB4MCwgeTAsIGEwLCBiMCwgYzA7IC8vIHByZXZpb3VzIHBvaW50XG5cbiAgICB2YXIgcmVzYW1wbGVTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvblN0YXJ0KCk7IHJlc2FtcGxlU3RyZWFtLmxpbmVTdGFydCA9IHJpbmdTdGFydDsgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvbkVuZCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7IH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgeCA9IHByb2plY3QoeCwgeSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgeDAgPSBOYU47XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgICAgIHZhciBjID0gY2FydGVzaWFuKFtsYW1iZGEsIHBoaV0pLCBwID0gcHJvamVjdChsYW1iZGEsIHBoaSk7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwID0gcFswXSwgeTAgPSBwWzFdLCBsYW1iZGEwID0gbGFtYmRhLCBhMCA9IGNbMF0sIGIwID0gY1sxXSwgYzAgPSBjWzJdLCBtYXhEZXB0aCwgc3RyZWFtKTtcbiAgICAgIHN0cmVhbS5wb2ludCh4MCwgeTApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHBvaW50O1xuICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nU3RhcnQoKSB7XG4gICAgICBsaW5lU3RhcnQoKTtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gcmluZ1BvaW50O1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IHJpbmdFbmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICBsaW5lUG9pbnQobGFtYmRhMDAgPSBsYW1iZGEsIHBoaSksIHgwMCA9IHgwLCB5MDAgPSB5MCwgYTAwID0gYTAsIGIwMCA9IGIwLCBjMDAgPSBjMDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwMCwgeTAwLCBsYW1iZGEwMCwgYTAwLCBiMDAsIGMwMCwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5saW5lRW5kID0gbGluZUVuZDtcbiAgICAgIGxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzYW1wbGVTdHJlYW07XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/resample.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/stereographic.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/stereographic.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"stereographicRaw\": () => (/* binding */ stereographicRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ \"../../../node_modules/d3-geo/src/projection/azimuthal.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-geo/src/projection/index.js\");\n\n\n\n\nfunction stereographicRaw(x, y) {\n var cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y), k = 1 + (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x) * cy;\n return [cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x) / k, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y) / k];\n}\n\nstereographicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(function(z) {\n return 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan)(z);\n});\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTBDO0FBQ0s7QUFDWDs7QUFFN0I7QUFDUCxXQUFXLDZDQUFHLGFBQWEsNkNBQUc7QUFDOUIsZUFBZSw2Q0FBRyxTQUFTLDZDQUFHO0FBQzlCOztBQUVBLDBCQUEwQiw4REFBZTtBQUN6QyxhQUFhLDhDQUFJO0FBQ2pCLENBQUM7O0FBRUQsNkJBQWUsc0NBQVc7QUFDMUIsU0FBUyxxREFBVTtBQUNuQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzPzNmMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthdGFuLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWwuanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVyZW9ncmFwaGljUmF3KHgsIHkpIHtcbiAgdmFyIGN5ID0gY29zKHkpLCBrID0gMSArIGNvcyh4KSAqIGN5O1xuICByZXR1cm4gW2N5ICogc2luKHgpIC8gaywgc2luKHkpIC8ga107XG59XG5cbnN0ZXJlb2dyYXBoaWNSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhdGFuKHopO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihzdGVyZW9ncmFwaGljUmF3KVxuICAgICAgLnNjYWxlKDI1MClcbiAgICAgIC5jbGlwQW5nbGUoMTQyKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/stereographic.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/projection/transverseMercator.js": /*!*************************************************************************!*\ !*** ../../../node_modules/d3-geo/src/projection/transverseMercator.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"transverseMercatorRaw\": () => (/* binding */ transverseMercatorRaw)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n/* harmony import */ var _mercator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator.js */ \"../../../node_modules/d3-geo/src/projection/mercator.js\");\n\n\n\nfunction transverseMercatorRaw(lambda, phi) {\n return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.log)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tan)((_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.exp)(x)) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi];\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var m = (0,_mercator_js__WEBPACK_IMPORTED_MODULE_1__.mercatorProjection)(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi90cmFuc3ZlcnNlTWVyY2F0b3IuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF1RDtBQUNOOztBQUUxQztBQUNQLFVBQVUsNkNBQUcsQ0FBQyw2Q0FBRyxFQUFFLDRDQUFNO0FBQ3pCOztBQUVBO0FBQ0Esa0JBQWtCLDhDQUFJLENBQUMsNkNBQUcsT0FBTyw0Q0FBTTtBQUN2Qzs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQixVQUFVLGdFQUFrQjtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzPzQ2OWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthdGFuLCBleHAsIGhhbGZQaSwgbG9nLCB0YW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge21lcmNhdG9yUHJvamVjdGlvbn0gZnJvbSBcIi4vbWVyY2F0b3IuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zdmVyc2VNZXJjYXRvclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xvZyh0YW4oKGhhbGZQaSArIHBoaSkgLyAyKSksIC1sYW1iZGFdO1xufVxuXG50cmFuc3ZlcnNlTWVyY2F0b3JSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gWy15LCAyICogYXRhbihleHAoeCkpIC0gaGFsZlBpXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbSA9IG1lcmNhdG9yUHJvamVjdGlvbih0cmFuc3ZlcnNlTWVyY2F0b3JSYXcpLFxuICAgICAgY2VudGVyID0gbS5jZW50ZXIsXG4gICAgICByb3RhdGUgPSBtLnJvdGF0ZTtcblxuICBtLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGNlbnRlcihbLV9bMV0sIF9bMF1dKSA6IChfID0gY2VudGVyKCksIFtfWzFdLCAtX1swXV0pO1xuICB9O1xuXG4gIG0ucm90YXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcm90YXRlKFtfWzBdLCBfWzFdLCBfLmxlbmd0aCA+IDIgPyBfWzJdICsgOTAgOiA5MF0pIDogKF8gPSByb3RhdGUoKSwgW19bMF0sIF9bMV0sIF9bMl0gLSA5MF0pO1xuICB9O1xuXG4gIHJldHVybiByb3RhdGUoWzAsIDAsIDkwXSlcbiAgICAgIC5zY2FsZSgxNTkuMTU1KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/projection/transverseMercator.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/rotation.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-geo/src/rotation.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"rotateRadians\": () => (/* binding */ rotateRadians)\n/* harmony export */ });\n/* harmony import */ var _compose_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose.js */ \"../../../node_modules/d3-geo/src/compose.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-geo/src/math.js\");\n\n\n\nfunction rotationIdentity(lambda, phi) {\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(lambda) > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) lambda -= Math.round(lambda / _math_js__WEBPACK_IMPORTED_MODULE_0__.tau) * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= _math_js__WEBPACK_IMPORTED_MODULE_0__.tau) ? (deltaPhi || deltaGamma ? (0,_compose_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(lambda) > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) lambda -= Math.round(lambda / _math_js__WEBPACK_IMPORTED_MODULE_0__.tau) * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(deltaPhi),\n sinDeltaPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(deltaPhi),\n cosDeltaGamma = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(deltaGamma),\n sinDeltaGamma = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi),\n x = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * cosPhi,\n y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda) * cosPhi,\n z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi),\n x = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * cosPhi,\n y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda) * cosPhi,\n z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(rotate) {\n rotate = rotateRadians(rotate[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, rotate[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, rotate.length > 2 ? rotate[2] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, coordinates[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians);\n return coordinates[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, coordinates[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians);\n return coordinates[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates;\n };\n\n return forward;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcm90YXRpb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtQztBQUM2Qzs7QUFFaEY7QUFDQSxNQUFNLDZDQUFHLFdBQVcsd0NBQUUsZ0NBQWdDLHlDQUFHLElBQUkseUNBQUc7QUFDaEU7QUFDQTs7QUFFQTs7QUFFTztBQUNQLHlCQUF5Qix5Q0FBRyw4QkFBOEIsdURBQU87QUFDakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSw2Q0FBRyxXQUFXLHdDQUFFLGdDQUFnQyx5Q0FBRyxJQUFJLHlDQUFHO0FBQ2xFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLDZDQUFHO0FBQ3ZCLG9CQUFvQiw2Q0FBRztBQUN2QixzQkFBc0IsNkNBQUc7QUFDekIsc0JBQXNCLDZDQUFHOztBQUV6QjtBQUNBLGlCQUFpQiw2Q0FBRztBQUNwQixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZjtBQUNBO0FBQ0EsTUFBTSwrQ0FBSztBQUNYLE1BQU0sOENBQUk7QUFDVjtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLDZDQUFHO0FBQ3BCLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmO0FBQ0E7QUFDQSxNQUFNLCtDQUFLO0FBQ1gsTUFBTSw4Q0FBSTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QixxQ0FBcUMsNkNBQU8sY0FBYyw2Q0FBTyxrQ0FBa0MsNkNBQU87O0FBRTFHO0FBQ0EsMENBQTBDLDZDQUFPLG1CQUFtQiw2Q0FBTztBQUMzRSw2QkFBNkIsNkNBQU8sb0JBQW9CLDZDQUFPO0FBQy9EOztBQUVBO0FBQ0EsaURBQWlELDZDQUFPLG1CQUFtQiw2Q0FBTztBQUNsRiw2QkFBNkIsNkNBQU8sb0JBQW9CLDZDQUFPO0FBQy9EOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcm90YXRpb24uanM/NmU3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tcG9zZSBmcm9tIFwiLi9jb21wb3NlLmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZGVncmVlcywgcGksIHJhZGlhbnMsIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHJvdGF0aW9uSWRlbnRpdHkobGFtYmRhLCBwaGkpIHtcbiAgaWYgKGFicyhsYW1iZGEpID4gcGkpIGxhbWJkYSAtPSBNYXRoLnJvdW5kKGxhbWJkYSAvIHRhdSkgKiB0YXU7XG4gIHJldHVybiBbbGFtYmRhLCBwaGldO1xufVxuXG5yb3RhdGlvbklkZW50aXR5LmludmVydCA9IHJvdGF0aW9uSWRlbnRpdHk7XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVSYWRpYW5zKGRlbHRhTGFtYmRhLCBkZWx0YVBoaSwgZGVsdGFHYW1tYSkge1xuICByZXR1cm4gKGRlbHRhTGFtYmRhICU9IHRhdSkgPyAoZGVsdGFQaGkgfHwgZGVsdGFHYW1tYSA/IGNvbXBvc2Uocm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpLCByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSlcbiAgICA6IHJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSlcbiAgICA6IChkZWx0YVBoaSB8fCBkZWx0YUdhbW1hID8gcm90YXRpb25QaGlHYW1tYShkZWx0YVBoaSwgZGVsdGFHYW1tYSlcbiAgICA6IHJvdGF0aW9uSWRlbnRpdHkpO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgbGFtYmRhICs9IGRlbHRhTGFtYmRhO1xuICAgIGlmIChhYnMobGFtYmRhKSA+IHBpKSBsYW1iZGEgLT0gTWF0aC5yb3VuZChsYW1iZGEgLyB0YXUpICogdGF1O1xuICAgIHJldHVybiBbbGFtYmRhLCBwaGldO1xuICB9O1xufVxuXG5mdW5jdGlvbiByb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSkge1xuICB2YXIgcm90YXRpb24gPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpO1xuICByb3RhdGlvbi5pbnZlcnQgPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoLWRlbHRhTGFtYmRhKTtcbiAgcmV0dXJuIHJvdGF0aW9uO1xufVxuXG5mdW5jdGlvbiByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSB7XG4gIHZhciBjb3NEZWx0YVBoaSA9IGNvcyhkZWx0YVBoaSksXG4gICAgICBzaW5EZWx0YVBoaSA9IHNpbihkZWx0YVBoaSksXG4gICAgICBjb3NEZWx0YUdhbW1hID0gY29zKGRlbHRhR2FtbWEpLFxuICAgICAgc2luRGVsdGFHYW1tYSA9IHNpbihkZWx0YUdhbW1hKTtcblxuICBmdW5jdGlvbiByb3RhdGlvbihsYW1iZGEsIHBoaSkge1xuICAgIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgICAgeCA9IGNvcyhsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB5ID0gc2luKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgICAgayA9IHogKiBjb3NEZWx0YVBoaSArIHggKiBzaW5EZWx0YVBoaTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeSAqIGNvc0RlbHRhR2FtbWEgLSBrICogc2luRGVsdGFHYW1tYSwgeCAqIGNvc0RlbHRhUGhpIC0geiAqIHNpbkRlbHRhUGhpKSxcbiAgICAgIGFzaW4oayAqIGNvc0RlbHRhR2FtbWEgKyB5ICogc2luRGVsdGFHYW1tYSlcbiAgICBdO1xuICB9XG5cbiAgcm90YXRpb24uaW52ZXJ0ID0gZnVuY3Rpb24obGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICAgIHggPSBjb3MobGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeSA9IHNpbihsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB6ID0gc2luKHBoaSksXG4gICAgICAgIGsgPSB6ICogY29zRGVsdGFHYW1tYSAtIHkgKiBzaW5EZWx0YUdhbW1hO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5ICogY29zRGVsdGFHYW1tYSArIHogKiBzaW5EZWx0YUdhbW1hLCB4ICogY29zRGVsdGFQaGkgKyBrICogc2luRGVsdGFQaGkpLFxuICAgICAgYXNpbihrICogY29zRGVsdGFQaGkgLSB4ICogc2luRGVsdGFQaGkpXG4gICAgXTtcbiAgfTtcblxuICByZXR1cm4gcm90YXRpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJvdGF0ZSkge1xuICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKHJvdGF0ZVswXSAqIHJhZGlhbnMsIHJvdGF0ZVsxXSAqIHJhZGlhbnMsIHJvdGF0ZS5sZW5ndGggPiAyID8gcm90YXRlWzJdICogcmFkaWFucyA6IDApO1xuXG4gIGZ1bmN0aW9uIGZvcndhcmQoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IHJvdGF0ZShjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9XG5cbiAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbihjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzID0gcm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9O1xuXG4gIHJldHVybiBmb3J3YXJkO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/rotation.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/stream.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-geo/src/stream.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvc3RyZWFtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9zdHJlYW0uanM/ZDAxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBzdHJlYW1HZW9tZXRyeShnZW9tZXRyeSwgc3RyZWFtKSB7XG4gIGlmIChnZW9tZXRyeSAmJiBzdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVydHkoZ2VvbWV0cnkudHlwZSkpIHtcbiAgICBzdHJlYW1HZW9tZXRyeVR5cGVbZ2VvbWV0cnkudHlwZV0oZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn1cblxudmFyIHN0cmVhbU9iamVjdFR5cGUgPSB7XG4gIEZlYXR1cmU6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtR2VvbWV0cnkob2JqZWN0Lmdlb21ldHJ5LCBzdHJlYW0pO1xuICB9LFxuICBGZWF0dXJlQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn07XG5cbnZhciBzdHJlYW1HZW9tZXRyeVR5cGUgPSB7XG4gIFNwaGVyZTogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW0uc3BoZXJlKCk7XG4gIH0sXG4gIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIG9iamVjdCA9IG9iamVjdC5jb29yZGluYXRlcztcbiAgICBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIHN0cmVhbSwgMCk7XG4gIH0sXG4gIE11bHRpTGluZVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAwKTtcbiAgfSxcbiAgUG9seWdvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW1Qb2x5Z29uKG9iamVjdC5jb29yZGluYXRlcywgc3RyZWFtKTtcbiAgfSxcbiAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0pO1xuICB9LFxuICBHZW9tZXRyeUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGdlb21ldHJpZXMgPSBvYmplY3QuZ2VvbWV0cmllcywgaSA9IC0xLCBuID0gZ2VvbWV0cmllcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIHN0cmVhbUdlb21ldHJ5KGdlb21ldHJpZXNbaV0sIHN0cmVhbSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHN0cmVhbUxpbmUoY29vcmRpbmF0ZXMsIHN0cmVhbSwgY2xvc2VkKSB7XG4gIHZhciBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGggLSBjbG9zZWQsIGNvb3JkaW5hdGU7XG4gIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgd2hpbGUgKCsraSA8IG4pIGNvb3JkaW5hdGUgPSBjb29yZGluYXRlc1tpXSwgc3RyZWFtLnBvaW50KGNvb3JkaW5hdGVbMF0sIGNvb3JkaW5hdGVbMV0sIGNvb3JkaW5hdGVbMl0pO1xuICBzdHJlYW0ubGluZUVuZCgpO1xufVxuXG5mdW5jdGlvbiBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzLCBzdHJlYW0pIHtcbiAgdmFyIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgc3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAxKTtcbiAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgaWYgKG9iamVjdCAmJiBzdHJlYW1PYmplY3RUeXBlLmhhc093blByb3BlcnR5KG9iamVjdC50eXBlKSkge1xuICAgIHN0cmVhbU9iamVjdFR5cGVbb2JqZWN0LnR5cGVdKG9iamVjdCwgc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW1HZW9tZXRyeShvYmplY3QsIHN0cmVhbSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/stream.js\n"); /***/ }), /***/ "../../../node_modules/d3-geo/src/transform.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-geo/src/transform.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"transformer\": () => (/* binding */ transformer)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nfunction transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvdHJhbnNmb3JtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRCx1QkFBdUIsdUJBQXVCO0FBQzlDLDBCQUEwQiwwQkFBMEI7QUFDcEQsd0JBQXdCLHdCQUF3QjtBQUNoRCw2QkFBNkIsNkJBQTZCO0FBQzFELDJCQUEyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy90cmFuc2Zvcm0uanM/NzJiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtZXRob2RzKSB7XG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiB0cmFuc2Zvcm1lcihtZXRob2RzKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIobWV0aG9kcykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIHMgPSBuZXcgVHJhbnNmb3JtU3RyZWFtO1xuICAgIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSBzW2tleV0gPSBtZXRob2RzW2tleV07XG4gICAgcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgcmV0dXJuIHM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbSgpIHt9XG5cblRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm1TdHJlYW0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuc3RyZWFtLnBvaW50KHgsIHkpOyB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5zcGhlcmUoKTsgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ubGluZVN0YXJ0KCk7IH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5saW5lRW5kKCk7IH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpOyB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpOyB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-geo/src/transform.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/accessors.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/accessors.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"optional\": () => (/* binding */ optional),\n/* harmony export */ \"required\": () => (/* binding */ required)\n/* harmony export */ });\nfunction optional(f) {\n return f == null ? null : required(f);\n}\n\nfunction required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYWNjZXNzb3JzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FjY2Vzc29ycy5qcz8wZWM4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbChmKSB7XG4gIHJldHVybiBmID09IG51bGwgPyBudWxsIDogcmVxdWlyZWQoZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChmKSB7XG4gIGlmICh0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/accessors.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/array.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/array.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"shuffle\": () => (/* binding */ shuffle)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nfunction shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYXJyYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FycmF5LmpzPzY1ZDIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXksIHJhbmRvbSkge1xuICBsZXQgbSA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHQsXG4gICAgICBpO1xuXG4gIHdoaWxlIChtKSB7XG4gICAgaSA9IHJhbmRvbSgpICogbS0tIHwgMDtcbiAgICB0ID0gYXJyYXlbbV07XG4gICAgYXJyYXlbbV0gPSBhcnJheVtpXTtcbiAgICBhcnJheVtpXSA9IHQ7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/cluster.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/cluster.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY2x1c3Rlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NsdXN0ZXIuanM/NmNhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuZnVuY3Rpb24gbWVhblgoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIGNoaWxkcmVuLnJlZHVjZShtZWFuWFJlZHVjZSwgMCkgLyBjaGlsZHJlbi5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIG1lYW5YUmVkdWNlKHgsIGMpIHtcbiAgcmV0dXJuIHggKyBjLng7XG59XG5cbmZ1bmN0aW9uIG1heFkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIDEgKyBjaGlsZHJlbi5yZWR1Y2UobWF4WVJlZHVjZSwgMCk7XG59XG5cbmZ1bmN0aW9uIG1heFlSZWR1Y2UoeSwgYykge1xuICByZXR1cm4gTWF0aC5tYXgoeSwgYy55KTtcbn1cblxuZnVuY3Rpb24gbGVhZkxlZnQobm9kZSkge1xuICB2YXIgY2hpbGRyZW47XG4gIHdoaWxlIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIG5vZGUgPSBjaGlsZHJlblswXTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGxlYWZSaWdodChub2RlKSB7XG4gIHZhciBjaGlsZHJlbjtcbiAgd2hpbGUgKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikgbm9kZSA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGNsdXN0ZXIocm9vdCkge1xuICAgIHZhciBwcmV2aW91c05vZGUsXG4gICAgICAgIHggPSAwO1xuXG4gICAgLy8gRmlyc3Qgd2FsaywgY29tcHV0aW5nIHRoZSBpbml0aWFsIHggJiB5IHZhbHVlcy5cbiAgICByb290LmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIG5vZGUueCA9IG1lYW5YKGNoaWxkcmVuKTtcbiAgICAgICAgbm9kZS55ID0gbWF4WShjaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnggPSBwcmV2aW91c05vZGUgPyB4ICs9IHNlcGFyYXRpb24obm9kZSwgcHJldmlvdXNOb2RlKSA6IDA7XG4gICAgICAgIG5vZGUueSA9IDA7XG4gICAgICAgIHByZXZpb3VzTm9kZSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbGVmdCA9IGxlYWZMZWZ0KHJvb3QpLFxuICAgICAgICByaWdodCA9IGxlYWZSaWdodChyb290KSxcbiAgICAgICAgeDAgPSBsZWZ0LnggLSBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgIHgxID0gcmlnaHQueCArIHNlcGFyYXRpb24ocmlnaHQsIGxlZnQpIC8gMjtcblxuICAgIC8vIFNlY29uZCB3YWxrLCBub3JtYWxpemluZyB4ICYgeSB0byB0aGUgZGVzaXJlZCBzaXplLlxuICAgIHJldHVybiByb290LmVhY2hBZnRlcihub2RlU2l6ZSA/IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIG5vZGUueCA9IChub2RlLnggLSByb290LngpICogZHg7XG4gICAgICBub2RlLnkgPSAocm9vdC55IC0gbm9kZS55KSAqIGR5O1xuICAgIH0gOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBub2RlLnggPSAobm9kZS54IC0geDApIC8gKHgxIC0geDApICogZHg7XG4gICAgICBub2RlLnkgPSAoMSAtIChyb290LnkgPyBub2RlLnkgLyByb290LnkgOiAxKSkgKiBkeTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsdXN0ZXIuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgY2x1c3RlcikgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIGNsdXN0ZXIuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBjbHVzdGVyKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgY2x1c3Rlci5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIGNsdXN0ZXIpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gY2x1c3Rlcjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/cluster.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/constant.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/constant.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"constantZero\": () => (/* binding */ constantZero),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction constantZero() {\n return 0;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY29uc3RhbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY29uc3RhbnQuanM/YzIyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29uc3RhbnRaZXJvKCkge1xuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js": /*!*********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanM/MmZiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/count.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/count.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.eachAfter(count);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2NvdW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2NvdW50LmpzPzFjMWQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gY291bnQobm9kZSkge1xuICB2YXIgc3VtID0gMCxcbiAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgIGkgPSBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGg7XG4gIGlmICghaSkgc3VtID0gMTtcbiAgZWxzZSB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgbm9kZS52YWx1ZSA9IHN1bTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihjb3VudCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/count.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return Array.from(this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcz84NjY4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/each.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/each.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2guanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcz8yOTdmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGF0KSB7XG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuICAgIGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/each.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js": /*!*********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcz81MjJhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGF0KSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIG5leHQgPSBbXSwgY2hpbGRyZW4sIGksIG4sIGluZGV4ID0gLTE7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBuZXh0LnB1c2gobm9kZSk7XG4gICAgaWYgKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgd2hpbGUgKG5vZGUgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2suY2FsbCh0aGF0LCBub2RlLCArK2luZGV4LCB0aGlzKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQmVmb3JlLmpzPzIxOTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIHRoYXQpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGksIGluZGV4ID0gLTE7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjay5jYWxsKHRoYXQsIG5vZGUsICsraW5kZXgsIHRoaXMpO1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/find.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/find.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2ZpbmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9maW5kLmpzPzExYmEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIHRoYXQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSB7XG4gICAgaWYgKGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcykpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/find.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Node\": () => (/* binding */ Node),\n/* harmony export */ \"computeHeight\": () => (/* binding */ computeHeight),\n/* harmony export */ \"default\": () => (/* binding */ hierarchy)\n/* harmony export */ });\n/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./count.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/count.js\");\n/* harmony import */ var _each_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./each.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/each.js\");\n/* harmony import */ var _eachBefore_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eachBefore.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js\");\n/* harmony import */ var _eachAfter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eachAfter.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js\");\n/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./find.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/find.js\");\n/* harmony import */ var _sum_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sum.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/sum.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/sort.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/path.js\");\n/* harmony import */ var _ancestors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ancestors.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js\");\n/* harmony import */ var _descendants_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./descendants.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js\");\n/* harmony import */ var _leaves_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./leaves.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js\");\n/* harmony import */ var _links_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./links.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/links.js\");\n/* harmony import */ var _iterator_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./iterator.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: _count_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n each: _each_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n eachAfter: _eachAfter_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n eachBefore: _eachBefore_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n find: _find_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n sum: _sum_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n sort: _sort_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n path: _path_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n ancestors: _ancestors_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n descendants: _descendants_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n leaves: _leaves_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n links: _links_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n copy: node_copy,\n [Symbol.iterator]: _iterator_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0M7QUFDRjtBQUNZO0FBQ0Y7QUFDVjtBQUNGO0FBQ0U7QUFDQTtBQUNVO0FBQ0k7QUFDVjtBQUNGO0FBQ007O0FBRTNCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFFBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsaURBQVU7QUFDbkIsUUFBUSxnREFBUztBQUNqQixhQUFhLHFEQUFjO0FBQzNCLGNBQWMsc0RBQWU7QUFDN0IsUUFBUSxnREFBUztBQUNqQixPQUFPLCtDQUFRO0FBQ2YsUUFBUSxnREFBUztBQUNqQixRQUFRLGdEQUFTO0FBQ2pCLGFBQWEscURBQWM7QUFDM0IsZUFBZSx1REFBZ0I7QUFDL0IsVUFBVSxtREFBVztBQUNyQixTQUFTLGtEQUFVO0FBQ25CO0FBQ0EscUJBQXFCLHFEQUFhO0FBQ2xDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9pbmRleC5qcz85NzIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50LmpzXCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZS5qc1wiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlci5qc1wiO1xuaW1wb3J0IG5vZGVfZmluZCBmcm9tIFwiLi9maW5kLmpzXCI7XG5pbXBvcnQgbm9kZV9zdW0gZnJvbSBcIi4vc3VtLmpzXCI7XG5pbXBvcnQgbm9kZV9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBub2RlX3BhdGggZnJvbSBcIi4vcGF0aC5qc1wiO1xuaW1wb3J0IG5vZGVfYW5jZXN0b3JzIGZyb20gXCIuL2FuY2VzdG9ycy5qc1wiO1xuaW1wb3J0IG5vZGVfZGVzY2VuZGFudHMgZnJvbSBcIi4vZGVzY2VuZGFudHMuanNcIjtcbmltcG9ydCBub2RlX2xlYXZlcyBmcm9tIFwiLi9sZWF2ZXMuanNcIjtcbmltcG9ydCBub2RlX2xpbmtzIGZyb20gXCIuL2xpbmtzLmpzXCI7XG5pbXBvcnQgbm9kZV9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBkYXRhID0gW3VuZGVmaW5lZCwgZGF0YV07XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIGNoaWxkcmVuID0gbWFwQ2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkcmVuID0gb2JqZWN0Q2hpbGRyZW47XG4gIH1cblxuICB2YXIgcm9vdCA9IG5ldyBOb2RlKGRhdGEpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3Jvb3RdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHMsXG4gICAgICBpLFxuICAgICAgbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IChjaGlsZHMgPSBBcnJheS5mcm9tKGNoaWxkcykpLmxlbmd0aCkpIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBjaGlsZHM7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IGNoaWxkc1tpXSA9IG5ldyBOb2RlKGNoaWxkc1tpXSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgICBjaGlsZC5kZXB0aCA9IG5vZGUuZGVwdGggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290LmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIG5vZGVfY29weSgpIHtcbiAgcmV0dXJuIGhpZXJhcmNoeSh0aGlzKS5lYWNoQmVmb3JlKGNvcHlEYXRhKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oZCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkKSA/IGRbMV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb3B5RGF0YShub2RlKSB7XG4gIGlmIChub2RlLmRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkgbm9kZS52YWx1ZSA9IG5vZGUuZGF0YS52YWx1ZTtcbiAgbm9kZS5kYXRhID0gbm9kZS5kYXRhLmRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSGVpZ2h0KG5vZGUpIHtcbiAgdmFyIGhlaWdodCA9IDA7XG4gIGRvIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudCkgJiYgKG5vZGUuaGVpZ2h0IDwgKytoZWlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vZGUoZGF0YSkge1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmRlcHRoID1cbiAgdGhpcy5oZWlnaHQgPSAwO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG59XG5cbk5vZGUucHJvdG90eXBlID0gaGllcmFyY2h5LnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE5vZGUsXG4gIGNvdW50OiBub2RlX2NvdW50LFxuICBlYWNoOiBub2RlX2VhY2gsXG4gIGVhY2hBZnRlcjogbm9kZV9lYWNoQWZ0ZXIsXG4gIGVhY2hCZWZvcmU6IG5vZGVfZWFjaEJlZm9yZSxcbiAgZmluZDogbm9kZV9maW5kLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBub2RlX2l0ZXJhdG9yXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function* __WEBPACK_DEFAULT_EXPORT__() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2l0ZXJhdG9yLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSx1Q0FBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaXRlcmF0b3IuanM/YTRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIHlpZWxkIG5vZGU7XG4gICAgICBpZiAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICBuZXh0LnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xlYXZlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanM/ZWQ1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxlYXZlcyA9IFtdO1xuICB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlYXZlcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/links.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/links.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLGtCQUFrQixrQ0FBa0M7QUFDcEQ7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanM/Y2NjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/links.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/path.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/path.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3BhdGguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvcGF0aC5qcz8wZWM0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVuZCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLFxuICAgICAgYW5jZXN0b3IgPSBsZWFzdENvbW1vbkFuY2VzdG9yKHN0YXJ0LCBlbmQpLFxuICAgICAgbm9kZXMgPSBbc3RhcnRdO1xuICB3aGlsZSAoc3RhcnQgIT09IGFuY2VzdG9yKSB7XG4gICAgc3RhcnQgPSBzdGFydC5wYXJlbnQ7XG4gICAgbm9kZXMucHVzaChzdGFydCk7XG4gIH1cbiAgdmFyIGsgPSBub2Rlcy5sZW5ndGg7XG4gIHdoaWxlIChlbmQgIT09IGFuY2VzdG9yKSB7XG4gICAgbm9kZXMuc3BsaWNlKGssIDAsIGVuZCk7XG4gICAgZW5kID0gZW5kLnBhcmVudDtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIGxlYXN0Q29tbW9uQW5jZXN0b3IoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIGE7XG4gIHZhciBhTm9kZXMgPSBhLmFuY2VzdG9ycygpLFxuICAgICAgYk5vZGVzID0gYi5hbmNlc3RvcnMoKSxcbiAgICAgIGMgPSBudWxsO1xuICBhID0gYU5vZGVzLnBvcCgpO1xuICBiID0gYk5vZGVzLnBvcCgpO1xuICB3aGlsZSAoYSA9PT0gYikge1xuICAgIGMgPSBhO1xuICAgIGEgPSBhTm9kZXMucG9wKCk7XG4gICAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgfVxuICByZXR1cm4gYztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/path.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/sort.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3NvcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzPzNhZWIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/sort.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/hierarchy/sum.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3N1bS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanM/NWFkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBzdW0gPSArdmFsdWUobm9kZS5kYXRhKSB8fCAwLFxuICAgICAgICBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIGkgPSBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGg7XG4gICAgd2hpbGUgKC0taSA+PSAwKSBzdW0gKz0gY2hpbGRyZW5baV0udmFsdWU7XG4gICAgbm9kZS52YWx1ZSA9IHN1bTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/hierarchy/sum.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/index.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/index.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Node\": () => (/* reexport safe */ _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_1__.Node),\n/* harmony export */ \"cluster\": () => (/* reexport safe */ _cluster_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"hierarchy\": () => (/* reexport safe */ _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"pack\": () => (/* reexport safe */ _pack_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"packEnclose\": () => (/* reexport safe */ _pack_enclose_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"packSiblings\": () => (/* reexport safe */ _pack_siblings_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"partition\": () => (/* reexport safe */ _partition_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"stratify\": () => (/* reexport safe */ _stratify_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"tree\": () => (/* reexport safe */ _tree_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"treemap\": () => (/* reexport safe */ _treemap_index_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"treemapBinary\": () => (/* reexport safe */ _treemap_binary_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"treemapDice\": () => (/* reexport safe */ _treemap_dice_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"treemapResquarify\": () => (/* reexport safe */ _treemap_resquarify_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"treemapSlice\": () => (/* reexport safe */ _treemap_slice_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"treemapSliceDice\": () => (/* reexport safe */ _treemap_sliceDice_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"treemapSquarify\": () => (/* reexport safe */ _treemap_squarify_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _cluster_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cluster.js */ \"../../../node_modules/d3-hierarchy/src/cluster.js\");\n/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/index.js\");\n/* harmony import */ var _pack_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pack/index.js */ \"../../../node_modules/d3-hierarchy/src/pack/index.js\");\n/* harmony import */ var _pack_siblings_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pack/siblings.js */ \"../../../node_modules/d3-hierarchy/src/pack/siblings.js\");\n/* harmony import */ var _pack_enclose_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pack/enclose.js */ \"../../../node_modules/d3-hierarchy/src/pack/enclose.js\");\n/* harmony import */ var _partition_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./partition.js */ \"../../../node_modules/d3-hierarchy/src/partition.js\");\n/* harmony import */ var _stratify_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stratify.js */ \"../../../node_modules/d3-hierarchy/src/stratify.js\");\n/* harmony import */ var _tree_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tree.js */ \"../../../node_modules/d3-hierarchy/src/tree.js\");\n/* harmony import */ var _treemap_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./treemap/index.js */ \"../../../node_modules/d3-hierarchy/src/treemap/index.js\");\n/* harmony import */ var _treemap_binary_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./treemap/binary.js */ \"../../../node_modules/d3-hierarchy/src/treemap/binary.js\");\n/* harmony import */ var _treemap_dice_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./treemap/dice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/dice.js\");\n/* harmony import */ var _treemap_slice_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./treemap/slice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/slice.js\");\n/* harmony import */ var _treemap_sliceDice_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./treemap/sliceDice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js\");\n/* harmony import */ var _treemap_squarify_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./treemap/squarify.js */ \"../../../node_modules/d3-hierarchy/src/treemap/squarify.js\");\n/* harmony import */ var _treemap_resquarify_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./treemap/resquarify.js */ \"../../../node_modules/d3-hierarchy/src/treemap/resquarify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUNnQjtBQUNoQjtBQUNXO0FBQ0Y7QUFDTDtBQUNGO0FBQ1I7QUFDWTtBQUNPO0FBQ0o7QUFDRTtBQUNRO0FBQ0Y7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9pbmRleC5qcz83NDQwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBjbHVzdGVyfSBmcm9tIFwiLi9jbHVzdGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGllcmFyY2h5LCBOb2RlfSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrfSBmcm9tIFwiLi9wYWNrL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja1NpYmxpbmdzfSBmcm9tIFwiLi9wYWNrL3NpYmxpbmdzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja0VuY2xvc2V9IGZyb20gXCIuL3BhY2svZW5jbG9zZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhcnRpdGlvbn0gZnJvbSBcIi4vcGFydGl0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RyYXRpZnl9IGZyb20gXCIuL3N0cmF0aWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZX0gZnJvbSBcIi4vdHJlZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXB9IGZyb20gXCIuL3RyZWVtYXAvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwQmluYXJ5fSBmcm9tIFwiLi90cmVlbWFwL2JpbmFyeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBEaWNlfSBmcm9tIFwiLi90cmVlbWFwL2RpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2V9IGZyb20gXCIuL3RyZWVtYXAvc2xpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2VEaWNlfSBmcm9tIFwiLi90cmVlbWFwL3NsaWNlRGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTcXVhcmlmeX0gZnJvbSBcIi4vdHJlZW1hcC9zcXVhcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBSZXNxdWFyaWZ5fSBmcm9tIFwiLi90cmVlbWFwL3Jlc3F1YXJpZnkuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/lcg.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/lcg.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvbGNnLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9sY2cuanM/ZDMyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lYXJfY29uZ3J1ZW50aWFsX2dlbmVyYXRvciNQYXJhbWV0ZXJzX2luX2NvbW1vbl91c2VcbmNvbnN0IGEgPSAxNjY0NTI1O1xuY29uc3QgYyA9IDEwMTM5MDQyMjM7XG5jb25zdCBtID0gNDI5NDk2NzI5NjsgLy8gMl4zMlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgbGV0IHMgPSAxO1xuICByZXR1cm4gKCkgPT4gKHMgPSAoYSAqIHMgKyBjKSAlIG0pIC8gbTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/lcg.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/pack/enclose.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/pack/enclose.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"packEncloseRandom\": () => (/* binding */ packEncloseRandom)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../array.js */ \"../../../node_modules/d3-hierarchy/src/array.js\");\n/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lcg.js */ \"../../../node_modules/d3-hierarchy/src/lcg.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(circles) {\n return packEncloseRandom(circles, (0,_lcg_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])());\n}\n\nfunction packEncloseRandom(circles, random) {\n var i = 0, n = (circles = (0,_array_js__WEBPACK_IMPORTED_MODULE_1__.shuffle)(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9lbmNsb3NlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0M7QUFDUjs7QUFFNUIsNkJBQWUsb0NBQVM7QUFDeEIsb0NBQW9DLG1EQUFHO0FBQ3ZDOztBQUVPO0FBQ1AsNEJBQTRCLGtEQUFPOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxrQkFBa0I7QUFDaEMsb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsY0FBYztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYWNrL2VuY2xvc2UuanM/MDVjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NodWZmbGV9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGxjZyBmcm9tIFwiLi4vbGNnLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNpcmNsZXMpIHtcbiAgcmV0dXJuIHBhY2tFbmNsb3NlUmFuZG9tKGNpcmNsZXMsIGxjZygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tFbmNsb3NlUmFuZG9tKGNpcmNsZXMsIHJhbmRvbSkge1xuICB2YXIgaSA9IDAsIG4gPSAoY2lyY2xlcyA9IHNodWZmbGUoQXJyYXkuZnJvbShjaXJjbGVzKSwgcmFuZG9tKSkubGVuZ3RoLCBCID0gW10sIHAsIGU7XG5cbiAgd2hpbGUgKGkgPCBuKSB7XG4gICAgcCA9IGNpcmNsZXNbaV07XG4gICAgaWYgKGUgJiYgZW5jbG9zZXNXZWFrKGUsIHApKSArK2k7XG4gICAgZWxzZSBlID0gZW5jbG9zZUJhc2lzKEIgPSBleHRlbmRCYXNpcyhCLCBwKSksIGkgPSAwO1xuICB9XG5cbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZEJhc2lzKEIsIHApIHtcbiAgdmFyIGksIGo7XG5cbiAgaWYgKGVuY2xvc2VzV2Vha0FsbChwLCBCKSkgcmV0dXJuIFtwXTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIEIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LlxuICBmb3IgKGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmIChlbmNsb3Nlc05vdChwLCBCW2ldKVxuICAgICAgICAmJiBlbmNsb3Nlc1dlYWtBbGwoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQikpIHtcbiAgICAgIHJldHVybiBbQltpXSwgcF07XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBCIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuXG4gIGZvciAoaSA9IDA7IGkgPCBCLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgQi5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGVuY2xvc2VzTm90KGVuY2xvc2VCYXNpczIoQltpXSwgQltqXSksIHApXG4gICAgICAgICAgJiYgZW5jbG9zZXNOb3QoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQltqXSlcbiAgICAgICAgICAmJiBlbmNsb3Nlc05vdChlbmNsb3NlQmFzaXMyKEJbal0sIHApLCBCW2ldKVxuICAgICAgICAgICYmIGVuY2xvc2VzV2Vha0FsbChlbmNsb3NlQmFzaXMzKEJbaV0sIEJbal0sIHApLCBCKSkge1xuICAgICAgICByZXR1cm4gW0JbaV0sIEJbal0sIHBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcuXG4gIHRocm93IG5ldyBFcnJvcjtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZXNOb3QoYSwgYikge1xuICB2YXIgZHIgPSBhLnIgLSBiLnIsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyIDwgMCB8fCBkciAqIGRyIDwgZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2VhayhhLCBiKSB7XG4gIHZhciBkciA9IGEuciAtIGIuciArIE1hdGgubWF4KGEuciwgYi5yLCAxKSAqIDFlLTksIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyID4gMCAmJiBkciAqIGRyID4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2Vha0FsbChhLCBCKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmICghZW5jbG9zZXNXZWFrKGEsIEJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBlbmNsb3NlQmFzaXMoQikge1xuICBzd2l0Y2ggKEIubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZW5jbG9zZUJhc2lzMShCWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBlbmNsb3NlQmFzaXMyKEJbMF0sIEJbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGVuY2xvc2VCYXNpczMoQlswXSwgQlsxXSwgQlsyXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMShhKSB7XG4gIHJldHVybiB7XG4gICAgeDogYS54LFxuICAgIHk6IGEueSxcbiAgICByOiBhLnJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMihhLCBiKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgyMSA9IHgyIC0geDEsIHkyMSA9IHkyIC0geTEsIHIyMSA9IHIyIC0gcjEsXG4gICAgICBsID0gTWF0aC5zcXJ0KHgyMSAqIHgyMSArIHkyMSAqIHkyMSk7XG4gIHJldHVybiB7XG4gICAgeDogKHgxICsgeDIgKyB4MjEgLyBsICogcjIxKSAvIDIsXG4gICAgeTogKHkxICsgeTIgKyB5MjEgLyBsICogcjIxKSAvIDIsXG4gICAgcjogKGwgKyByMSArIHIyKSAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMyhhLCBiLCBjKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgzID0gYy54LCB5MyA9IGMueSwgcjMgPSBjLnIsXG4gICAgICBhMiA9IHgxIC0geDIsXG4gICAgICBhMyA9IHgxIC0geDMsXG4gICAgICBiMiA9IHkxIC0geTIsXG4gICAgICBiMyA9IHkxIC0geTMsXG4gICAgICBjMiA9IHIyIC0gcjEsXG4gICAgICBjMyA9IHIzIC0gcjEsXG4gICAgICBkMSA9IHgxICogeDEgKyB5MSAqIHkxIC0gcjEgKiByMSxcbiAgICAgIGQyID0gZDEgLSB4MiAqIHgyIC0geTIgKiB5MiArIHIyICogcjIsXG4gICAgICBkMyA9IGQxIC0geDMgKiB4MyAtIHkzICogeTMgKyByMyAqIHIzLFxuICAgICAgYWIgPSBhMyAqIGIyIC0gYTIgKiBiMyxcbiAgICAgIHhhID0gKGIyICogZDMgLSBiMyAqIGQyKSAvIChhYiAqIDIpIC0geDEsXG4gICAgICB4YiA9IChiMyAqIGMyIC0gYjIgKiBjMykgLyBhYixcbiAgICAgIHlhID0gKGEzICogZDIgLSBhMiAqIGQzKSAvIChhYiAqIDIpIC0geTEsXG4gICAgICB5YiA9IChhMiAqIGMzIC0gYTMgKiBjMikgLyBhYixcbiAgICAgIEEgPSB4YiAqIHhiICsgeWIgKiB5YiAtIDEsXG4gICAgICBCID0gMiAqIChyMSArIHhhICogeGIgKyB5YSAqIHliKSxcbiAgICAgIEMgPSB4YSAqIHhhICsgeWEgKiB5YSAtIHIxICogcjEsXG4gICAgICByID0gLShNYXRoLmFicyhBKSA+IDFlLTYgPyAoQiArIE1hdGguc3FydChCICogQiAtIDQgKiBBICogQykpIC8gKDIgKiBBKSA6IEMgLyBCKTtcbiAgcmV0dXJuIHtcbiAgICB4OiB4MSArIHhhICsgeGIgKiByLFxuICAgIHk6IHkxICsgeWEgKyB5YiAqIHIsXG4gICAgcjogclxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/pack/enclose.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/pack/index.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/pack/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../accessors.js */ \"../../../node_modules/d3-hierarchy/src/accessors.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constant.js */ \"../../../node_modules/d3-hierarchy/src/constant.js\");\n/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lcg.js */ \"../../../node_modules/d3-hierarchy/src/lcg.js\");\n/* harmony import */ var _siblings_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./siblings.js */ \"../../../node_modules/d3-hierarchy/src/pack/siblings.js\");\n\n\n\n\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = _constant_js__WEBPACK_IMPORTED_MODULE_0__.constantZero;\n\n function pack(root) {\n const random = (0,_lcg_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(_constant_js__WEBPACK_IMPORTED_MODULE_0__.constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_2__.optional)(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = (0,_siblings_js__WEBPACK_IMPORTED_MODULE_3__.packSiblingsRandom)(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF5QztBQUNhO0FBQzFCO0FBQ3FCOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNEQUFZOztBQUU1QjtBQUNBLG1CQUFtQixtREFBRztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esd0NBQXdDLHNEQUFZO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0MsdURBQVE7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFLHdEQUFRO0FBQy9FOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsT0FBTztBQUNoQyxVQUFVLGdFQUFrQjtBQUM1Qix5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYWNrL2luZGV4LmpzPzJiMWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtvcHRpb25hbH0gZnJvbSBcIi4uL2FjY2Vzc29ycy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50LCB7Y29uc3RhbnRaZXJvfSBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBsY2cgZnJvbSBcIi4uL2xjZy5qc1wiO1xuaW1wb3J0IHtwYWNrU2libGluZ3NSYW5kb219IGZyb20gXCIuL3NpYmxpbmdzLmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSYWRpdXMoZCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KGQudmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJhZGl1cyA9IG51bGwsXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBwYWRkaW5nID0gY29uc3RhbnRaZXJvO1xuXG4gIGZ1bmN0aW9uIHBhY2socm9vdCkge1xuICAgIGNvbnN0IHJhbmRvbSA9IGxjZygpO1xuICAgIHJvb3QueCA9IGR4IC8gMiwgcm9vdC55ID0gZHkgLyAyO1xuICAgIGlmIChyYWRpdXMpIHtcbiAgICAgIHJvb3QuZWFjaEJlZm9yZShyYWRpdXNMZWFmKHJhZGl1cykpXG4gICAgICAgICAgLmVhY2hBZnRlcihwYWNrQ2hpbGRyZW5SYW5kb20ocGFkZGluZywgMC41LCByYW5kb20pKVxuICAgICAgICAgIC5lYWNoQmVmb3JlKHRyYW5zbGF0ZUNoaWxkKDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKHJhZGl1c0xlYWYoZGVmYXVsdFJhZGl1cykpXG4gICAgICAgICAgLmVhY2hBZnRlcihwYWNrQ2hpbGRyZW5SYW5kb20oY29uc3RhbnRaZXJvLCAxLCByYW5kb20pKVxuICAgICAgICAgIC5lYWNoQWZ0ZXIocGFja0NoaWxkcmVuUmFuZG9tKHBhZGRpbmcsIHJvb3QuciAvIE1hdGgubWluKGR4LCBkeSksIHJhbmRvbSkpXG4gICAgICAgICAgLmVhY2hCZWZvcmUodHJhbnNsYXRlQ2hpbGQoTWF0aC5taW4oZHgsIGR5KSAvICgyICogcm9vdC5yKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIHBhY2sucmFkaXVzID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IG9wdGlvbmFsKHgpLCBwYWNrKSA6IHJhZGl1cztcbiAgfTtcblxuICBwYWNrLnNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHggPSAreFswXSwgZHkgPSAreFsxXSwgcGFjaykgOiBbZHgsIGR5XTtcbiAgfTtcblxuICBwYWNrLnBhZGRpbmcgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZyA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCBwYWNrKSA6IHBhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIHBhY2s7XG59XG5cbmZ1bmN0aW9uIHJhZGl1c0xlYWYocmFkaXVzKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLnIgPSBNYXRoLm1heCgwLCArcmFkaXVzKG5vZGUpIHx8IDApO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFja0NoaWxkcmVuUmFuZG9tKHBhZGRpbmcsIGssIHJhbmRvbSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHZhciBjaGlsZHJlbixcbiAgICAgICAgICBpLFxuICAgICAgICAgIG4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgciA9IHBhZGRpbmcobm9kZSkgKiBrIHx8IDAsXG4gICAgICAgICAgZTtcblxuICAgICAgaWYgKHIpIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNoaWxkcmVuW2ldLnIgKz0gcjtcbiAgICAgIGUgPSBwYWNrU2libGluZ3NSYW5kb20oY2hpbGRyZW4sIHJhbmRvbSk7XG4gICAgICBpZiAocikgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY2hpbGRyZW5baV0uciAtPSByO1xuICAgICAgbm9kZS5yID0gZSArIHI7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVDaGlsZChrKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgIG5vZGUuciAqPSBrO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIG5vZGUueCA9IHBhcmVudC54ICsgayAqIG5vZGUueDtcbiAgICAgIG5vZGUueSA9IHBhcmVudC55ICsgayAqIG5vZGUueTtcbiAgICB9XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/pack/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/pack/siblings.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/pack/siblings.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"packSiblingsRandom\": () => (/* binding */ packSiblingsRandom)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array.js */ \"../../../node_modules/d3-hierarchy/src/array.js\");\n/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lcg.js */ \"../../../node_modules/d3-hierarchy/src/lcg.js\");\n/* harmony import */ var _enclose_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enclose.js */ \"../../../node_modules/d3-hierarchy/src/pack/enclose.js\");\n\n\n\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nfunction packSiblingsRandom(circles, random) {\n if (!(n = (circles = (0,_array_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = (0,_enclose_js__WEBPACK_IMPORTED_MODULE_1__.packEncloseRandom)(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(circles) {\n packSiblingsRandom(circles, (0,_lcg_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n return circles;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9zaWJsaW5ncy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFnQztBQUNKO0FBQ21COztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCx1QkFBdUIscURBQUs7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLHdDQUF3QyxJQUFJLDhEQUFpQjs7QUFFakY7QUFDQSxjQUFjLE9BQU87O0FBRXJCO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEIsOEJBQThCLG1EQUFHO0FBQ2pDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFjay9zaWJsaW5ncy5qcz80Y2VlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheSBmcm9tIFwiLi4vYXJyYXkuanNcIjtcbmltcG9ydCBsY2cgZnJvbSBcIi4uL2xjZy5qc1wiO1xuaW1wb3J0IHtwYWNrRW5jbG9zZVJhbmRvbX0gZnJvbSBcIi4vZW5jbG9zZS5qc1wiO1xuXG5mdW5jdGlvbiBwbGFjZShiLCBhLCBjKSB7XG4gIHZhciBkeCA9IGIueCAtIGEueCwgeCwgYTIsXG4gICAgICBkeSA9IGIueSAtIGEueSwgeSwgYjIsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICBpZiAoZDIpIHtcbiAgICBhMiA9IGEuciArIGMuciwgYTIgKj0gYTI7XG4gICAgYjIgPSBiLnIgKyBjLnIsIGIyICo9IGIyO1xuICAgIGlmIChhMiA+IGIyKSB7XG4gICAgICB4ID0gKGQyICsgYjIgLSBhMikgLyAoMiAqIGQyKTtcbiAgICAgIHkgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgYjIgLyBkMiAtIHggKiB4KSk7XG4gICAgICBjLnggPSBiLnggLSB4ICogZHggLSB5ICogZHk7XG4gICAgICBjLnkgPSBiLnkgLSB4ICogZHkgKyB5ICogZHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSAoZDIgKyBhMiAtIGIyKSAvICgyICogZDIpO1xuICAgICAgeSA9IE1hdGguc3FydChNYXRoLm1heCgwLCBhMiAvIGQyIC0geCAqIHgpKTtcbiAgICAgIGMueCA9IGEueCArIHggKiBkeCAtIHkgKiBkeTtcbiAgICAgIGMueSA9IGEueSArIHggKiBkeSArIHkgKiBkeDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYy54ID0gYS54ICsgYy5yO1xuICAgIGMueSA9IGEueTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RzKGEsIGIpIHtcbiAgdmFyIGRyID0gYS5yICsgYi5yIC0gMWUtNiwgZHggPSBiLnggLSBhLngsIGR5ID0gYi55IC0gYS55O1xuICByZXR1cm4gZHIgPiAwICYmIGRyICogZHIgPiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cblxuZnVuY3Rpb24gc2NvcmUobm9kZSkge1xuICB2YXIgYSA9IG5vZGUuXyxcbiAgICAgIGIgPSBub2RlLm5leHQuXyxcbiAgICAgIGFiID0gYS5yICsgYi5yLFxuICAgICAgZHggPSAoYS54ICogYi5yICsgYi54ICogYS5yKSAvIGFiLFxuICAgICAgZHkgPSAoYS55ICogYi5yICsgYi55ICogYS5yKSAvIGFiO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIE5vZGUoY2lyY2xlKSB7XG4gIHRoaXMuXyA9IGNpcmNsZTtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5wcmV2aW91cyA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrU2libGluZ3NSYW5kb20oY2lyY2xlcywgcmFuZG9tKSB7XG4gIGlmICghKG4gPSAoY2lyY2xlcyA9IGFycmF5KGNpcmNsZXMpKS5sZW5ndGgpKSByZXR1cm4gMDtcblxuICB2YXIgYSwgYiwgYywgbiwgYWEsIGNhLCBpLCBqLCBrLCBzaiwgc2s7XG5cbiAgLy8gUGxhY2UgdGhlIGZpcnN0IGNpcmNsZS5cbiAgYSA9IGNpcmNsZXNbMF0sIGEueCA9IDAsIGEueSA9IDA7XG4gIGlmICghKG4gPiAxKSkgcmV0dXJuIGEucjtcblxuICAvLyBQbGFjZSB0aGUgc2Vjb25kIGNpcmNsZS5cbiAgYiA9IGNpcmNsZXNbMV0sIGEueCA9IC1iLnIsIGIueCA9IGEuciwgYi55ID0gMDtcbiAgaWYgKCEobiA+IDIpKSByZXR1cm4gYS5yICsgYi5yO1xuXG4gIC8vIFBsYWNlIHRoZSB0aGlyZCBjaXJjbGUuXG4gIHBsYWNlKGIsIGEsIGMgPSBjaXJjbGVzWzJdKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBmcm9udC1jaGFpbiB1c2luZyB0aGUgZmlyc3QgdGhyZWUgY2lyY2xlcyBhLCBiIGFuZCBjLlxuICBhID0gbmV3IE5vZGUoYSksIGIgPSBuZXcgTm9kZShiKSwgYyA9IG5ldyBOb2RlKGMpO1xuICBhLm5leHQgPSBjLnByZXZpb3VzID0gYjtcbiAgYi5uZXh0ID0gYS5wcmV2aW91cyA9IGM7XG4gIGMubmV4dCA9IGIucHJldmlvdXMgPSBhO1xuXG4gIC8vIEF0dGVtcHQgdG8gcGxhY2UgZWFjaCByZW1haW5pbmcgY2lyY2xl4oCmXG4gIHBhY2s6IGZvciAoaSA9IDM7IGkgPCBuOyArK2kpIHtcbiAgICBwbGFjZShhLl8sIGIuXywgYyA9IGNpcmNsZXNbaV0pLCBjID0gbmV3IE5vZGUoYyk7XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGludGVyc2VjdGluZyBjaXJjbGUgb24gdGhlIGZyb250LWNoYWluLCBpZiBhbnkuXG4gICAgLy8g4oCcQ2xvc2VuZXNz4oCdIGlzIGRldGVybWluZWQgYnkgbGluZWFyIGRpc3RhbmNlIGFsb25nIHRoZSBmcm9udC1jaGFpbi5cbiAgICAvLyDigJxBaGVhZOKAnSBvciDigJxiZWhpbmTigJ0gaXMgbGlrZXdpc2UgZGV0ZXJtaW5lZCBieSBsaW5lYXIgZGlzdGFuY2UuXG4gICAgaiA9IGIubmV4dCwgayA9IGEucHJldmlvdXMsIHNqID0gYi5fLnIsIHNrID0gYS5fLnI7XG4gICAgZG8ge1xuICAgICAgaWYgKHNqIDw9IHNrKSB7XG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGouXywgYy5fKSkge1xuICAgICAgICAgIGIgPSBqLCBhLm5leHQgPSBiLCBiLnByZXZpb3VzID0gYSwgLS1pO1xuICAgICAgICAgIGNvbnRpbnVlIHBhY2s7XG4gICAgICAgIH1cbiAgICAgICAgc2ogKz0gai5fLnIsIGogPSBqLm5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW50ZXJzZWN0cyhrLl8sIGMuXykpIHtcbiAgICAgICAgICBhID0gaywgYS5uZXh0ID0gYiwgYi5wcmV2aW91cyA9IGEsIC0taTtcbiAgICAgICAgICBjb250aW51ZSBwYWNrO1xuICAgICAgICB9XG4gICAgICAgIHNrICs9IGsuXy5yLCBrID0gay5wcmV2aW91cztcbiAgICAgIH1cbiAgICB9IHdoaWxlIChqICE9PSBrLm5leHQpO1xuXG4gICAgLy8gU3VjY2VzcyEgSW5zZXJ0IHRoZSBuZXcgY2lyY2xlIGMgYmV0d2VlbiBhIGFuZCBiLlxuICAgIGMucHJldmlvdXMgPSBhLCBjLm5leHQgPSBiLCBhLm5leHQgPSBiLnByZXZpb3VzID0gYiA9IGM7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBuZXcgY2xvc2VzdCBjaXJjbGUgcGFpciB0byB0aGUgY2VudHJvaWQuXG4gICAgYWEgPSBzY29yZShhKTtcbiAgICB3aGlsZSAoKGMgPSBjLm5leHQpICE9PSBiKSB7XG4gICAgICBpZiAoKGNhID0gc2NvcmUoYykpIDwgYWEpIHtcbiAgICAgICAgYSA9IGMsIGFhID0gY2E7XG4gICAgICB9XG4gICAgfVxuICAgIGIgPSBhLm5leHQ7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBlbmNsb3NpbmcgY2lyY2xlIG9mIHRoZSBmcm9udCBjaGFpbi5cbiAgYSA9IFtiLl9dLCBjID0gYjsgd2hpbGUgKChjID0gYy5uZXh0KSAhPT0gYikgYS5wdXNoKGMuXyk7IGMgPSBwYWNrRW5jbG9zZVJhbmRvbShhLCByYW5kb20pO1xuXG4gIC8vIFRyYW5zbGF0ZSB0aGUgY2lyY2xlcyB0byBwdXQgdGhlIGVuY2xvc2luZyBjaXJjbGUgYXJvdW5kIHRoZSBvcmlnaW4uXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGEgPSBjaXJjbGVzW2ldLCBhLnggLT0gYy54LCBhLnkgLT0gYy55O1xuXG4gIHJldHVybiBjLnI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNpcmNsZXMpIHtcbiAgcGFja1NpYmxpbmdzUmFuZG9tKGNpcmNsZXMsIGxjZygpKTtcbiAgcmV0dXJuIGNpcmNsZXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/pack/siblings.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/partition.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/partition.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _treemap_round_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./treemap/round.js */ \"../../../node_modules/d3-hierarchy/src/treemap/round.js\");\n/* harmony import */ var _treemap_dice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./treemap/dice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/dice.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(_treemap_round_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n (0,_treemap_dice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFydGl0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyQztBQUNDOztBQUU1Qyw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix5REFBUztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNERBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYXJ0aXRpb24uanM/Y2EwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm91bmROb2RlIGZyb20gXCIuL3RyZWVtYXAvcm91bmQuanNcIjtcbmltcG9ydCB0cmVlbWFwRGljZSBmcm9tIFwiLi90cmVlbWFwL2RpY2UuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBwYWRkaW5nID0gMCxcbiAgICAgIHJvdW5kID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gcGFydGl0aW9uKHJvb3QpIHtcbiAgICB2YXIgbiA9IHJvb3QuaGVpZ2h0ICsgMTtcbiAgICByb290LngwID1cbiAgICByb290LnkwID0gcGFkZGluZztcbiAgICByb290LngxID0gZHg7XG4gICAgcm9vdC55MSA9IGR5IC8gbjtcbiAgICByb290LmVhY2hCZWZvcmUocG9zaXRpb25Ob2RlKGR5LCBuKSk7XG4gICAgaWYgKHJvdW5kKSByb290LmVhY2hCZWZvcmUocm91bmROb2RlKTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvc2l0aW9uTm9kZShkeSwgbikge1xuICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0cmVlbWFwRGljZShub2RlLCBub2RlLngwLCBkeSAqIChub2RlLmRlcHRoICsgMSkgLyBuLCBub2RlLngxLCBkeSAqIChub2RlLmRlcHRoICsgMikgLyBuKTtcbiAgICAgIH1cbiAgICAgIHZhciB4MCA9IG5vZGUueDAsXG4gICAgICAgICAgeTAgPSBub2RlLnkwLFxuICAgICAgICAgIHgxID0gbm9kZS54MSAtIHBhZGRpbmcsXG4gICAgICAgICAgeTEgPSBub2RlLnkxIC0gcGFkZGluZztcbiAgICAgIGlmICh4MSA8IHgwKSB4MCA9IHgxID0gKHgwICsgeDEpIC8gMjtcbiAgICAgIGlmICh5MSA8IHkwKSB5MCA9IHkxID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIG5vZGUueDAgPSB4MDtcbiAgICAgIG5vZGUueTAgPSB5MDtcbiAgICAgIG5vZGUueDEgPSB4MTtcbiAgICAgIG5vZGUueTEgPSB5MTtcbiAgICB9O1xuICB9XG5cbiAgcGFydGl0aW9uLnJvdW5kID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISF4LCBwYXJ0aXRpb24pIDogcm91bmQ7XG4gIH07XG5cbiAgcGFydGl0aW9uLnNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHggPSAreFswXSwgZHkgPSAreFsxXSwgcGFydGl0aW9uKSA6IFtkeCwgZHldO1xuICB9O1xuXG4gIHBhcnRpdGlvbi5wYWRkaW5nID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmcgPSAreCwgcGFydGl0aW9uKSA6IHBhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIHBhcnRpdGlvbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/partition.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/stratify.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/stratify.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./accessors.js */ \"../../../node_modules/d3-hierarchy/src/accessors.js\");\n/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/index.js\");\n\n\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(_hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.optional)(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.optional)(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.optional)(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvc3RyYXRpZnkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdDO0FBQ2lCOztBQUV6RCxlQUFlLFVBQVU7QUFDekIsa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsT0FBTztBQUN6QywwQ0FBMEMscURBQUk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsb0NBQW9DLE1BQU0sYUFBYSw4REFBYTtBQUN6RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsdURBQVE7QUFDNUM7O0FBRUE7QUFDQSwwQ0FBMEMsdURBQVE7QUFDbEQ7O0FBRUE7QUFDQSxzQ0FBc0MsdURBQVE7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBSztBQUNqQjtBQUNBO0FBQ0Esc0NBQXNDLEtBQUs7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9zdHJhdGlmeS5qcz84YWI2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b3B0aW9uYWx9IGZyb20gXCIuL2FjY2Vzc29ycy5qc1wiO1xuaW1wb3J0IHtOb2RlLCBjb21wdXRlSGVpZ2h0fSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcblxudmFyIHByZXJvb3QgPSB7ZGVwdGg6IC0xfSxcbiAgICBhbWJpZ3VvdXMgPSB7fSxcbiAgICBpbXB1dGVkID0ge307XG5cbmZ1bmN0aW9uIGRlZmF1bHRJZChkKSB7XG4gIHJldHVybiBkLmlkO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UGFyZW50SWQoZCkge1xuICByZXR1cm4gZC5wYXJlbnRJZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpZCA9IGRlZmF1bHRJZCxcbiAgICAgIHBhcmVudElkID0gZGVmYXVsdFBhcmVudElkLFxuICAgICAgcGF0aDtcblxuICBmdW5jdGlvbiBzdHJhdGlmeShkYXRhKSB7XG4gICAgdmFyIG5vZGVzID0gQXJyYXkuZnJvbShkYXRhKSxcbiAgICAgICAgY3VycmVudElkID0gaWQsXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJZCA9IHBhcmVudElkLFxuICAgICAgICBuLFxuICAgICAgICBkLFxuICAgICAgICBpLFxuICAgICAgICByb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG5vZGVJZCxcbiAgICAgICAgbm9kZUtleSxcbiAgICAgICAgbm9kZUJ5S2V5ID0gbmV3IE1hcDtcblxuICAgIGlmIChwYXRoICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IEkgPSBub2Rlcy5tYXAoKGQsIGkpID0+IG5vcm1hbGl6ZShwYXRoKGQsIGksIGRhdGEpKSk7XG4gICAgICBjb25zdCBQID0gSS5tYXAocGFyZW50b2YpO1xuICAgICAgY29uc3QgUyA9IG5ldyBTZXQoSSkuYWRkKFwiXCIpO1xuICAgICAgZm9yIChjb25zdCBpIG9mIFApIHtcbiAgICAgICAgaWYgKCFTLmhhcyhpKSkge1xuICAgICAgICAgIFMuYWRkKGkpO1xuICAgICAgICAgIEkucHVzaChpKTtcbiAgICAgICAgICBQLnB1c2gocGFyZW50b2YoaSkpO1xuICAgICAgICAgIG5vZGVzLnB1c2goaW1wdXRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRJZCA9IChfLCBpKSA9PiBJW2ldO1xuICAgICAgY3VycmVudFBhcmVudElkID0gKF8sIGkpID0+IFBbaV07XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbiA9IG5vZGVzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgZCA9IG5vZGVzW2ldLCBub2RlID0gbm9kZXNbaV0gPSBuZXcgTm9kZShkKTtcbiAgICAgIGlmICgobm9kZUlkID0gY3VycmVudElkKGQsIGksIGRhdGEpKSAhPSBudWxsICYmIChub2RlSWQgKz0gXCJcIikpIHtcbiAgICAgICAgbm9kZUtleSA9IG5vZGUuaWQgPSBub2RlSWQ7XG4gICAgICAgIG5vZGVCeUtleS5zZXQobm9kZUtleSwgbm9kZUJ5S2V5Lmhhcyhub2RlS2V5KSA/IGFtYmlndW91cyA6IG5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKChub2RlSWQgPSBjdXJyZW50UGFyZW50SWQoZCwgaSwgZGF0YSkpICE9IG51bGwgJiYgKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBub2RlLnBhcmVudCA9IG5vZGVJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICBpZiAobm9kZUlkID0gbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgcGFyZW50ID0gbm9kZUJ5S2V5LmdldChub2RlSWQpO1xuICAgICAgICBpZiAoIXBhcmVudCkgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50ID09PSBhbWJpZ3VvdXMpIHRocm93IG5ldyBFcnJvcihcImFtYmlndW91czogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgZWxzZSBwYXJlbnQuY2hpbGRyZW4gPSBbbm9kZV07XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJvb3QpIHRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIHJvb3RzXCIpO1xuICAgICAgICByb290ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIm5vIHJvb3RcIik7XG5cbiAgICAvLyBXaGVuIGltcHV0aW5nIGludGVybmFsIG5vZGVzLCBvbmx5IGludHJvZHVjZSByb290cyBpZiBuZWVkZWQuXG4gICAgLy8gVGhlbiByZXBsYWNlIHRoZSBpbXB1dGVkIG1hcmtlciBkYXRhIHdpdGggbnVsbC5cbiAgICBpZiAocGF0aCAhPSBudWxsKSB7XG4gICAgICB3aGlsZSAocm9vdC5kYXRhID09PSBpbXB1dGVkICYmIHJvb3QuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJvb3QgPSByb290LmNoaWxkcmVuWzBdLCAtLW47XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5kYXRhICE9PSBpbXB1dGVkKSBicmVhaztcbiAgICAgICAgbm9kZS5kYXRhID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb290LnBhcmVudCA9IHByZXJvb3Q7XG4gICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5kZXB0aCA9IG5vZGUucGFyZW50LmRlcHRoICsgMTsgLS1uOyB9KS5lYWNoQmVmb3JlKGNvbXB1dGVIZWlnaHQpO1xuICAgIHJvb3QucGFyZW50ID0gbnVsbDtcbiAgICBpZiAobiA+IDApIHRocm93IG5ldyBFcnJvcihcImN5Y2xlXCIpO1xuXG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBzdHJhdGlmeS5pZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IG9wdGlvbmFsKHgpLCBzdHJhdGlmeSkgOiBpZDtcbiAgfTtcblxuICBzdHJhdGlmeS5wYXJlbnRJZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYXJlbnRJZCA9IG9wdGlvbmFsKHgpLCBzdHJhdGlmeSkgOiBwYXJlbnRJZDtcbiAgfTtcblxuICBzdHJhdGlmeS5wYXRoID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhdGggPSBvcHRpb25hbCh4KSwgc3RyYXRpZnkpIDogcGF0aDtcbiAgfTtcblxuICByZXR1cm4gc3RyYXRpZnk7XG59XG5cbi8vIFRvIG5vcm1hbGl6ZSBhIHBhdGgsIHdlIGNvZXJjZSB0byBhIHN0cmluZywgc3RyaXAgdGhlIHRyYWlsaW5nIHNsYXNoIGlmIGFueVxuLy8gKGFzIGxvbmcgYXMgdGhlIHRyYWlsaW5nIHNsYXNoIGlzIG5vdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBhbm90aGVyIHNsYXNoKSxcbi8vIGFuZCBhZGQgbGVhZGluZyBzbGFzaCBpZiBtaXNzaW5nLlxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpIHtcbiAgcGF0aCA9IGAke3BhdGh9YDtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aDtcbiAgaWYgKHNsYXNoKHBhdGgsIGkgLSAxKSAmJiAhc2xhc2gocGF0aCwgaSAtIDIpKSBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gIHJldHVybiBwYXRoWzBdID09PSBcIi9cIiA/IHBhdGggOiBgLyR7cGF0aH1gO1xufVxuXG4vLyBXYWxrIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBmaXJzdCBzbGFzaCB0aGF0IGlzIG5vdCB0aGUgbGVhZGluZyBzbGFzaCwgZS5nLjpcbi8vIFwiL2Zvby9iYXJcIiDih6UgXCIvZm9vXCIsIFwiL2Zvb1wiIOKHpSBcIi9cIiwgXCIvXCIg4oamIFwiXCIuIChUaGUgcm9vdCBpcyBzcGVjaWFsLWNhc2VkXG4vLyBiZWNhdXNlIHRoZSBpZCBvZiB0aGUgcm9vdCBtdXN0IGJlIGEgdHJ1dGh5IHZhbHVlLilcbmZ1bmN0aW9uIHBhcmVudG9mKHBhdGgpIHtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGkgPCAyKSByZXR1cm4gXCJcIjtcbiAgd2hpbGUgKC0taSA+IDEpIGlmIChzbGFzaChwYXRoLCBpKSkgYnJlYWs7XG4gIHJldHVybiBwYXRoLnNsaWNlKDAsIGkpO1xufVxuXG4vLyBTbGFzaGVzIGNhbiBiZSBlc2NhcGVkOyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNsYXNoIGlzIGEgcGF0aCBkZWxpbWl0ZXIsIHdlXG4vLyBjb3VudCB0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBiYWNrc2xhc2hlcyBlc2NhcGluZyB0aGUgZm9yd2FyZCBzbGFzaDogYW4gb2RkXG4vLyBudW1iZXIgaW5kaWNhdGVzIGFuIGVzY2FwZWQgZm9yd2FyZCBzbGFzaC5cbmZ1bmN0aW9uIHNsYXNoKHBhdGgsIGkpIHtcbiAgaWYgKHBhdGhbaV0gPT09IFwiL1wiKSB7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChpID4gMCAmJiBwYXRoWy0taV0gPT09IFwiXFxcXFwiKSArK2s7XG4gICAgaWYgKChrICYgMSkgPT09IDApIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/stratify.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/tree.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/tree.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index.js */ \"../../../node_modules/d3-hierarchy/src/hierarchy/index.js\");\n\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(_hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwQzs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixpQkFBaUI7QUFDakIsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGlCQUFpQjtBQUNqQixjQUFjO0FBQ2Q7O0FBRUEsbUNBQW1DLCtEQUFjOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixRQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcz9kOTdmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Tm9kZX0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXBhcmF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEucGFyZW50ID09PSBiLnBhcmVudCA/IDEgOiAyO1xufVxuXG4vLyBmdW5jdGlvbiByYWRpYWxTZXBhcmF0aW9uKGEsIGIpIHtcbi8vICAgcmV0dXJuIChhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMikgLyBhLmRlcHRoO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGxlZnQgY29udG91ciBvZiBhIHN1YnRyZWUgKG9yXG4vLyBzdWJmb3Jlc3QpLiBJdCByZXR1cm5zIHRoZSBzdWNjZXNzb3Igb2YgdiBvbiB0aGlzIGNvbnRvdXIuIFRoaXMgc3VjY2Vzc29yIGlzXG4vLyBlaXRoZXIgZ2l2ZW4gYnkgdGhlIGxlZnRtb3N0IGNoaWxkIG9mIHYgb3IgYnkgdGhlIHRocmVhZCBvZiB2LiBUaGUgZnVuY3Rpb25cbi8vIHJldHVybnMgbnVsbCBpZiBhbmQgb25seSBpZiB2IGlzIG9uIHRoZSBoaWdoZXN0IGxldmVsIG9mIGl0cyBzdWJ0cmVlLlxuZnVuY3Rpb24gbmV4dExlZnQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlblswXSA6IHYudDtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB3b3JrcyBhbmFsb2dvdXNseSB0byBuZXh0TGVmdC5cbmZ1bmN0aW9uIG5leHRSaWdodCh2KSB7XG4gIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIDogdi50O1xufVxuXG4vLyBTaGlmdHMgdGhlIGN1cnJlbnQgc3VidHJlZSByb290ZWQgYXQgdysuIFRoaXMgaXMgZG9uZSBieSBpbmNyZWFzaW5nXG4vLyBwcmVsaW0odyspIGFuZCBtb2QodyspIGJ5IHNoaWZ0LlxuZnVuY3Rpb24gbW92ZVN1YnRyZWUod20sIHdwLCBzaGlmdCkge1xuICB2YXIgY2hhbmdlID0gc2hpZnQgLyAod3AuaSAtIHdtLmkpO1xuICB3cC5jIC09IGNoYW5nZTtcbiAgd3AucyArPSBzaGlmdDtcbiAgd20uYyArPSBjaGFuZ2U7XG4gIHdwLnogKz0gc2hpZnQ7XG4gIHdwLm0gKz0gc2hpZnQ7XG59XG5cbi8vIEFsbCBvdGhlciBzaGlmdHMsIGFwcGxpZWQgdG8gdGhlIHNtYWxsZXIgc3VidHJlZXMgYmV0d2VlbiB3LSBhbmQgdyssIGFyZVxuLy8gcGVyZm9ybWVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRvIHByZXBhcmUgdGhlIHNoaWZ0cywgd2UgaGF2ZSB0byBhZGp1c3Rcbi8vIGNoYW5nZSh3KyksIHNoaWZ0KHcrKSwgYW5kIGNoYW5nZSh3LSkuXG5mdW5jdGlvbiBleGVjdXRlU2hpZnRzKHYpIHtcbiAgdmFyIHNoaWZ0ID0gMCxcbiAgICAgIGNoYW5nZSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICBpID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgdztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdyA9IGNoaWxkcmVuW2ldO1xuICAgIHcueiArPSBzaGlmdDtcbiAgICB3Lm0gKz0gc2hpZnQ7XG4gICAgc2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO1xuICB9XG59XG5cbi8vIElmIHZpLeKAmXMgYW5jZXN0b3IgaXMgYSBzaWJsaW5nIG9mIHYsIHJldHVybnMgdmkt4oCZcyBhbmNlc3Rvci4gT3RoZXJ3aXNlLFxuLy8gcmV0dXJucyB0aGUgc3BlY2lmaWVkIChkZWZhdWx0KSBhbmNlc3Rvci5cbmZ1bmN0aW9uIG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSB7XG4gIHJldHVybiB2aW0uYS5wYXJlbnQgPT09IHYucGFyZW50ID8gdmltLmEgOiBhbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gVHJlZU5vZGUobm9kZSwgaSkge1xuICB0aGlzLl8gPSBub2RlO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG4gIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLkEgPSBudWxsOyAvLyBkZWZhdWx0IGFuY2VzdG9yXG4gIHRoaXMuYSA9IHRoaXM7IC8vIGFuY2VzdG9yXG4gIHRoaXMueiA9IDA7IC8vIHByZWxpbVxuICB0aGlzLm0gPSAwOyAvLyBtb2RcbiAgdGhpcy5jID0gMDsgLy8gY2hhbmdlXG4gIHRoaXMucyA9IDA7IC8vIHNoaWZ0XG4gIHRoaXMudCA9IG51bGw7IC8vIHRocmVhZFxuICB0aGlzLmkgPSBpOyAvLyBudW1iZXJcbn1cblxuVHJlZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIHRyZWVSb290KHJvb3QpIHtcbiAgdmFyIHRyZWUgPSBuZXcgVHJlZU5vZGUocm9vdCwgMCksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbdHJlZV0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuXy5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IG5ldyBBcnJheShuID0gY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXSA9IG5ldyBUcmVlTm9kZShjaGlsZHJlbltpXSwgaSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICh0cmVlLnBhcmVudCA9IG5ldyBUcmVlTm9kZShudWxsLCAwKSkuY2hpbGRyZW4gPSBbdHJlZV07XG4gIHJldHVybiB0cmVlO1xufVxuXG4vLyBOb2RlLWxpbmsgdHJlZSBkaWFncmFtIHVzaW5nIHRoZSBSZWluZ29sZC1UaWxmb3JkIFwidGlkeVwiIGFsZ29yaXRobVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJlZShyb290KSB7XG4gICAgdmFyIHQgPSB0cmVlUm9vdChyb290KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGxheW91dCB1c2luZyBCdWNoaGVpbSBldCBhbC7igJlzIGFsZ29yaXRobS5cbiAgICB0LmVhY2hBZnRlcihmaXJzdFdhbGspLCB0LnBhcmVudC5tID0gLXQuejtcbiAgICB0LmVhY2hCZWZvcmUoc2Vjb25kV2Fsayk7XG5cbiAgICAvLyBJZiBhIGZpeGVkIG5vZGUgc2l6ZSBpcyBzcGVjaWZpZWQsIHNjYWxlIHggYW5kIHkuXG4gICAgaWYgKG5vZGVTaXplKSByb290LmVhY2hCZWZvcmUoc2l6ZU5vZGUpO1xuXG4gICAgLy8gSWYgYSBmaXhlZCB0cmVlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5IGJhc2VkIG9uIHRoZSBleHRlbnQuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbGVmdC1tb3N0LCByaWdodC1tb3N0LCBhbmQgZGVwdGgtbW9zdCBub2RlcyBmb3IgZXh0ZW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHZhciBsZWZ0ID0gcm9vdCxcbiAgICAgICAgICByaWdodCA9IHJvb3QsXG4gICAgICAgICAgYm90dG9tID0gcm9vdDtcbiAgICAgIHJvb3QuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnggPCBsZWZ0LngpIGxlZnQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS54ID4gcmlnaHQueCkgcmlnaHQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aCkgYm90dG9tID0gbm9kZTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHMgPSBsZWZ0ID09PSByaWdodCA/IDEgOiBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgICAgdHggPSBzIC0gbGVmdC54LFxuICAgICAgICAgIGt4ID0gZHggLyAocmlnaHQueCArIHMgKyB0eCksXG4gICAgICAgICAga3kgPSBkeSAvIChib3R0b20uZGVwdGggfHwgMSk7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLnggPSAobm9kZS54ICsgdHgpICoga3g7XG4gICAgICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBreTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYSBwcmVsaW1pbmFyeSB4LWNvb3JkaW5hdGUgZm9yIHYuIEJlZm9yZSB0aGF0LCBGSVJTVCBXQUxLIGlzXG4gIC8vIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gdGhlIGNoaWxkcmVuIG9mIHYsIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uXG4gIC8vIEFQUE9SVElPTi4gQWZ0ZXIgc3BhY2luZyBvdXQgdGhlIGNoaWxkcmVuIGJ5IGNhbGxpbmcgRVhFQ1VURSBTSElGVFMsIHRoZVxuICAvLyBub2RlIHYgaXMgcGxhY2VkIHRvIHRoZSBtaWRwb2ludCBvZiBpdHMgb3V0ZXJtb3N0IGNoaWxkcmVuLlxuICBmdW5jdGlvbiBmaXJzdFdhbGsodikge1xuICAgIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICAgIHNpYmxpbmdzID0gdi5wYXJlbnQuY2hpbGRyZW4sXG4gICAgICAgIHcgPSB2LmkgPyBzaWJsaW5nc1t2LmkgLSAxXSA6IG51bGw7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBleGVjdXRlU2hpZnRzKHYpO1xuICAgICAgdmFyIG1pZHBvaW50ID0gKGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7XG4gICAgICBpZiAodykge1xuICAgICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICAgICAgdi5tID0gdi56IC0gbWlkcG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2LnogPSBtaWRwb2ludDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHcpIHtcbiAgICAgIHYueiA9IHcueiArIHNlcGFyYXRpb24odi5fLCB3Ll8pO1xuICAgIH1cbiAgICB2LnBhcmVudC5BID0gYXBwb3J0aW9uKHYsIHcsIHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYWxsIHJlYWwgeC1jb29yZGluYXRlcyBieSBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgcmVjdXJzaXZlbHkuXG4gIGZ1bmN0aW9uIHNlY29uZFdhbGsodikge1xuICAgIHYuXy54ID0gdi56ICsgdi5wYXJlbnQubTtcbiAgICB2Lm0gKz0gdi5wYXJlbnQubTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JlIG9mIHRoZSBhbGdvcml0aG0uIEhlcmUsIGEgbmV3IHN1YnRyZWUgaXMgY29tYmluZWQgd2l0aCB0aGVcbiAgLy8gcHJldmlvdXMgc3VidHJlZXMuIFRocmVhZHMgYXJlIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGluc2lkZSBhbmQgb3V0c2lkZVxuICAvLyBjb250b3VycyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZSB1cCB0byB0aGUgaGlnaGVzdCBjb21tb24gbGV2ZWwuIFRoZVxuICAvLyB2ZXJ0aWNlcyB1c2VkIGZvciB0aGUgdHJhdmVyc2FscyBhcmUgdmkrLCB2aS0sIHZvLSwgYW5kIHZvKywgd2hlcmUgdGhlXG4gIC8vIHN1cGVyc2NyaXB0IG8gbWVhbnMgb3V0c2lkZSBhbmQgaSBtZWFucyBpbnNpZGUsIHRoZSBzdWJzY3JpcHQgLSBtZWFucyBsZWZ0XG4gIC8vIHN1YnRyZWUgYW5kICsgbWVhbnMgcmlnaHQgc3VidHJlZS4gRm9yIHN1bW1pbmcgdXAgdGhlIG1vZGlmaWVycyBhbG9uZyB0aGVcbiAgLy8gY29udG91ciwgd2UgdXNlIHJlc3BlY3RpdmUgdmFyaWFibGVzIHNpKywgc2ktLCBzby0sIGFuZCBzbysuIFdoZW5ldmVyIHR3b1xuICAvLyBub2RlcyBvZiB0aGUgaW5zaWRlIGNvbnRvdXJzIGNvbmZsaWN0LCB3ZSBjb21wdXRlIHRoZSBsZWZ0IG9uZSBvZiB0aGVcbiAgLy8gZ3JlYXRlc3QgdW5jb21tb24gYW5jZXN0b3JzIHVzaW5nIHRoZSBmdW5jdGlvbiBBTkNFU1RPUiBhbmQgY2FsbCBNT1ZFXG4gIC8vIFNVQlRSRUUgdG8gc2hpZnQgdGhlIHN1YnRyZWUgYW5kIHByZXBhcmUgdGhlIHNoaWZ0cyBvZiBzbWFsbGVyIHN1YnRyZWVzLlxuICAvLyBGaW5hbGx5LCB3ZSBhZGQgYSBuZXcgdGhyZWFkIChpZiBuZWNlc3NhcnkpLlxuICBmdW5jdGlvbiBhcHBvcnRpb24odiwgdywgYW5jZXN0b3IpIHtcbiAgICBpZiAodykge1xuICAgICAgdmFyIHZpcCA9IHYsXG4gICAgICAgICAgdm9wID0gdixcbiAgICAgICAgICB2aW0gPSB3LFxuICAgICAgICAgIHZvbSA9IHZpcC5wYXJlbnQuY2hpbGRyZW5bMF0sXG4gICAgICAgICAgc2lwID0gdmlwLm0sXG4gICAgICAgICAgc29wID0gdm9wLm0sXG4gICAgICAgICAgc2ltID0gdmltLm0sXG4gICAgICAgICAgc29tID0gdm9tLm0sXG4gICAgICAgICAgc2hpZnQ7XG4gICAgICB3aGlsZSAodmltID0gbmV4dFJpZ2h0KHZpbSksIHZpcCA9IG5leHRMZWZ0KHZpcCksIHZpbSAmJiB2aXApIHtcbiAgICAgICAgdm9tID0gbmV4dExlZnQodm9tKTtcbiAgICAgICAgdm9wID0gbmV4dFJpZ2h0KHZvcCk7XG4gICAgICAgIHZvcC5hID0gdjtcbiAgICAgICAgc2hpZnQgPSB2aW0ueiArIHNpbSAtIHZpcC56IC0gc2lwICsgc2VwYXJhdGlvbih2aW0uXywgdmlwLl8pO1xuICAgICAgICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgICAgICAgbW92ZVN1YnRyZWUobmV4dEFuY2VzdG9yKHZpbSwgdiwgYW5jZXN0b3IpLCB2LCBzaGlmdCk7XG4gICAgICAgICAgc2lwICs9IHNoaWZ0O1xuICAgICAgICAgIHNvcCArPSBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBzaW0gKz0gdmltLm07XG4gICAgICAgIHNpcCArPSB2aXAubTtcbiAgICAgICAgc29tICs9IHZvbS5tO1xuICAgICAgICBzb3AgKz0gdm9wLm07XG4gICAgICB9XG4gICAgICBpZiAodmltICYmICFuZXh0UmlnaHQodm9wKSkge1xuICAgICAgICB2b3AudCA9IHZpbTtcbiAgICAgICAgdm9wLm0gKz0gc2ltIC0gc29wO1xuICAgICAgfVxuICAgICAgaWYgKHZpcCAmJiAhbmV4dExlZnQodm9tKSkge1xuICAgICAgICB2b20udCA9IHZpcDtcbiAgICAgICAgdm9tLm0gKz0gc2lwIC0gc29tO1xuICAgICAgICBhbmNlc3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpIHtcbiAgICBub2RlLnggKj0gZHg7XG4gICAgbm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O1xuICB9XG5cbiAgdHJlZS5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNlcGFyYXRpb24gPSB4LCB0cmVlKSA6IHNlcGFyYXRpb247XG4gIH07XG5cbiAgdHJlZS5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gZmFsc2UsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gbnVsbCA6IFtkeCwgZHldKTtcbiAgfTtcblxuICB0cmVlLm5vZGVTaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gdHJ1ZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgdHJlZSkgOiAobm9kZVNpemUgPyBbZHgsIGR5XSA6IG51bGwpO1xuICB9O1xuXG4gIHJldHVybiB0cmVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/tree.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/binary.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/binary.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9iaW5hcnkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9iaW5hcnkuanM/MGEzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIGksIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICBzdW0sIHN1bXMgPSBuZXcgQXJyYXkobiArIDEpO1xuXG4gIGZvciAoc3Vtc1swXSA9IHN1bSA9IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgc3Vtc1tpICsgMV0gPSBzdW0gKz0gbm9kZXNbaV0udmFsdWU7XG4gIH1cblxuICBwYXJ0aXRpb24oMCwgbiwgcGFyZW50LnZhbHVlLCB4MCwgeTAsIHgxLCB5MSk7XG5cbiAgZnVuY3Rpb24gcGFydGl0aW9uKGksIGosIHZhbHVlLCB4MCwgeTAsIHgxLCB5MSkge1xuICAgIGlmIChpID49IGogLSAxKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgbm9kZS54MCA9IHgwLCBub2RlLnkwID0geTA7XG4gICAgICBub2RlLngxID0geDEsIG5vZGUueTEgPSB5MTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVPZmZzZXQgPSBzdW1zW2ldLFxuICAgICAgICB2YWx1ZVRhcmdldCA9ICh2YWx1ZSAvIDIpICsgdmFsdWVPZmZzZXQsXG4gICAgICAgIGsgPSBpICsgMSxcbiAgICAgICAgaGkgPSBqIC0gMTtcblxuICAgIHdoaWxlIChrIDwgaGkpIHtcbiAgICAgIHZhciBtaWQgPSBrICsgaGkgPj4+IDE7XG4gICAgICBpZiAoc3Vtc1ttaWRdIDwgdmFsdWVUYXJnZXQpIGsgPSBtaWQgKyAxO1xuICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlVGFyZ2V0IC0gc3Vtc1trIC0gMV0pIDwgKHN1bXNba10gLSB2YWx1ZVRhcmdldCkgJiYgaSArIDEgPCBrKSAtLWs7XG5cbiAgICB2YXIgdmFsdWVMZWZ0ID0gc3Vtc1trXSAtIHZhbHVlT2Zmc2V0LFxuICAgICAgICB2YWx1ZVJpZ2h0ID0gdmFsdWUgLSB2YWx1ZUxlZnQ7XG5cbiAgICBpZiAoKHgxIC0geDApID4gKHkxIC0geTApKSB7XG4gICAgICB2YXIgeGsgPSB2YWx1ZSA/ICh4MCAqIHZhbHVlUmlnaHQgKyB4MSAqIHZhbHVlTGVmdCkgLyB2YWx1ZSA6IHgxO1xuICAgICAgcGFydGl0aW9uKGksIGssIHZhbHVlTGVmdCwgeDAsIHkwLCB4aywgeTEpO1xuICAgICAgcGFydGl0aW9uKGssIGosIHZhbHVlUmlnaHQsIHhrLCB5MCwgeDEsIHkxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHlrID0gdmFsdWUgPyAoeTAgKiB2YWx1ZVJpZ2h0ICsgeTEgKiB2YWx1ZUxlZnQpIC8gdmFsdWUgOiB5MTtcbiAgICAgIHBhcnRpdGlvbihpLCBrLCB2YWx1ZUxlZnQsIHgwLCB5MCwgeDEsIHlrKTtcbiAgICAgIHBhcnRpdGlvbihrLCBqLCB2YWx1ZVJpZ2h0LCB4MCwgeWssIHgxLCB5MSk7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/binary.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/dice.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/dice.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9kaWNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9kaWNlLmpzP2Y2Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBub2RlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIGsgPSBwYXJlbnQudmFsdWUgJiYgKHgxIC0geDApIC8gcGFyZW50LnZhbHVlO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLnkwID0geTAsIG5vZGUueTEgPSB5MTtcbiAgICBub2RlLngwID0geDAsIG5vZGUueDEgPSB4MCArPSBub2RlLnZhbHVlICogaztcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/dice.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/index.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/index.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./round.js */ \"../../../node_modules/d3-hierarchy/src/treemap/round.js\");\n/* harmony import */ var _squarify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./squarify.js */ \"../../../node_modules/d3-hierarchy/src/treemap/squarify.js\");\n/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../accessors.js */ \"../../../node_modules/d3-hierarchy/src/accessors.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant.js */ \"../../../node_modules/d3-hierarchy/src/constant.js\");\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var tile = _squarify_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero,\n paddingTop = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero,\n paddingRight = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero,\n paddingBottom = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero,\n paddingLeft = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(_round_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_3__.required)(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFtQztBQUNFO0FBQ0k7QUFDYTs7QUFFdEQsNkJBQWUsc0NBQVc7QUFDMUIsYUFBYSxvREFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzREFBWTtBQUNqQyxtQkFBbUIsc0RBQVk7QUFDL0IscUJBQXFCLHNEQUFZO0FBQ2pDLHNCQUFzQixzREFBWTtBQUNsQyxvQkFBb0Isc0RBQVk7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlEQUFTO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLHVEQUFRO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRFQUE0RSx3REFBUTtBQUNwRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwRUFBMEUsd0RBQVE7QUFDbEY7O0FBRUE7QUFDQSw0RUFBNEUsd0RBQVE7QUFDcEY7O0FBRUE7QUFDQSw2RUFBNkUsd0RBQVE7QUFDckY7O0FBRUE7QUFDQSwyRUFBMkUsd0RBQVE7QUFDbkY7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2luZGV4LmpzPzcwYTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvdW5kTm9kZSBmcm9tIFwiLi9yb3VuZC5qc1wiO1xuaW1wb3J0IHNxdWFyaWZ5IGZyb20gXCIuL3NxdWFyaWZ5LmpzXCI7XG5pbXBvcnQge3JlcXVpcmVkfSBmcm9tIFwiLi4vYWNjZXNzb3JzLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQsIHtjb25zdGFudFplcm99IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHRpbGUgPSBzcXVhcmlmeSxcbiAgICAgIHJvdW5kID0gZmFsc2UsXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBwYWRkaW5nU3RhY2sgPSBbMF0sXG4gICAgICBwYWRkaW5nSW5uZXIgPSBjb25zdGFudFplcm8sXG4gICAgICBwYWRkaW5nVG9wID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ1JpZ2h0ID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ0JvdHRvbSA9IGNvbnN0YW50WmVybyxcbiAgICAgIHBhZGRpbmdMZWZ0ID0gY29uc3RhbnRaZXJvO1xuXG4gIGZ1bmN0aW9uIHRyZWVtYXAocm9vdCkge1xuICAgIHJvb3QueDAgPVxuICAgIHJvb3QueTAgPSAwO1xuICAgIHJvb3QueDEgPSBkeDtcbiAgICByb290LnkxID0gZHk7XG4gICAgcm9vdC5lYWNoQmVmb3JlKHBvc2l0aW9uTm9kZSk7XG4gICAgcGFkZGluZ1N0YWNrID0gWzBdO1xuICAgIGlmIChyb3VuZCkgcm9vdC5lYWNoQmVmb3JlKHJvdW5kTm9kZSk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwb3NpdGlvbk5vZGUobm9kZSkge1xuICAgIHZhciBwID0gcGFkZGluZ1N0YWNrW25vZGUuZGVwdGhdLFxuICAgICAgICB4MCA9IG5vZGUueDAgKyBwLFxuICAgICAgICB5MCA9IG5vZGUueTAgKyBwLFxuICAgICAgICB4MSA9IG5vZGUueDEgLSBwLFxuICAgICAgICB5MSA9IG5vZGUueTEgLSBwO1xuICAgIGlmICh4MSA8IHgwKSB4MCA9IHgxID0gKHgwICsgeDEpIC8gMjtcbiAgICBpZiAoeTEgPCB5MCkgeTAgPSB5MSA9ICh5MCArIHkxKSAvIDI7XG4gICAgbm9kZS54MCA9IHgwO1xuICAgIG5vZGUueTAgPSB5MDtcbiAgICBub2RlLngxID0geDE7XG4gICAgbm9kZS55MSA9IHkxO1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBwID0gcGFkZGluZ1N0YWNrW25vZGUuZGVwdGggKyAxXSA9IHBhZGRpbmdJbm5lcihub2RlKSAvIDI7XG4gICAgICB4MCArPSBwYWRkaW5nTGVmdChub2RlKSAtIHA7XG4gICAgICB5MCArPSBwYWRkaW5nVG9wKG5vZGUpIC0gcDtcbiAgICAgIHgxIC09IHBhZGRpbmdSaWdodChub2RlKSAtIHA7XG4gICAgICB5MSAtPSBwYWRkaW5nQm90dG9tKG5vZGUpIC0gcDtcbiAgICAgIGlmICh4MSA8IHgwKSB4MCA9IHgxID0gKHgwICsgeDEpIC8gMjtcbiAgICAgIGlmICh5MSA8IHkwKSB5MCA9IHkxID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIHRpbGUobm9kZSwgeDAsIHkwLCB4MSwgeTEpO1xuICAgIH1cbiAgfVxuXG4gIHRyZWVtYXAucm91bmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIXgsIHRyZWVtYXApIDogcm91bmQ7XG4gIH07XG5cbiAgdHJlZW1hcC5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWVtYXApIDogW2R4LCBkeV07XG4gIH07XG5cbiAgdHJlZW1hcC50aWxlID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpbGUgPSByZXF1aXJlZCh4KSwgdHJlZW1hcCkgOiB0aWxlO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyZWVtYXAucGFkZGluZ0lubmVyKHgpLnBhZGRpbmdPdXRlcih4KSA6IHRyZWVtYXAucGFkZGluZ0lubmVyKCk7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ091dGVyID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdHJlZW1hcC5wYWRkaW5nVG9wKHgpLnBhZGRpbmdSaWdodCh4KS5wYWRkaW5nQm90dG9tKHgpLnBhZGRpbmdMZWZ0KHgpIDogdHJlZW1hcC5wYWRkaW5nVG9wKCk7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nVG9wID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdUb3AgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nVG9wO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ1JpZ2h0ID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdSaWdodCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdSaWdodDtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdCb3R0b20gPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0JvdHRvbSA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdCb3R0b207XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nTGVmdCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nTGVmdCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdMZWZ0O1xuICB9O1xuXG4gIHJldHVybiB0cmVlbWFwO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/resquarify.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/resquarify.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _dice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/dice.js\");\n/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/slice.js\");\n/* harmony import */ var _squarify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./squarify.js */ \"../../../node_modules/d3-hierarchy/src/treemap/squarify.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) (0,_dice_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else (0,_slice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = (0,_squarify_js__WEBPACK_IMPORTED_MODULE_2__.squarifyRatio)(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(_squarify_js__WEBPACK_IMPORTED_MODULE_2__.phi));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yZXNxdWFyaWZ5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0M7QUFDRTtBQUNXOztBQUVqRCxpRUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtELE9BQU87QUFDekQsc0JBQXNCLG9EQUFXO0FBQ2pDLGFBQWEscURBQVk7QUFDekI7QUFDQTtBQUNBLE1BQU07QUFDTixnQ0FBZ0MsMkRBQWE7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsRUFBRSw2Q0FBRyxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yZXNxdWFyaWZ5LmpzP2U1NDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRyZWVtYXBEaWNlIGZyb20gXCIuL2RpY2UuanNcIjtcbmltcG9ydCB0cmVlbWFwU2xpY2UgZnJvbSBcIi4vc2xpY2UuanNcIjtcbmltcG9ydCB7cGhpLCBzcXVhcmlmeVJhdGlvfSBmcm9tIFwiLi9zcXVhcmlmeS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHJhdGlvKSB7XG5cbiAgZnVuY3Rpb24gcmVzcXVhcmlmeShwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgaWYgKChyb3dzID0gcGFyZW50Ll9zcXVhcmlmeSkgJiYgKHJvd3MucmF0aW8gPT09IHJhdGlvKSkge1xuICAgICAgdmFyIHJvd3MsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIG5vZGVzLFxuICAgICAgICAgIGksXG4gICAgICAgICAgaiA9IC0xLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgbSA9IHJvd3MubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlID0gcGFyZW50LnZhbHVlO1xuXG4gICAgICB3aGlsZSAoKytqIDwgbSkge1xuICAgICAgICByb3cgPSByb3dzW2pdLCBub2RlcyA9IHJvdy5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gcm93LnZhbHVlID0gMCwgbiA9IG5vZGVzLmxlbmd0aDsgaSA8IG47ICsraSkgcm93LnZhbHVlICs9IG5vZGVzW2ldLnZhbHVlO1xuICAgICAgICBpZiAocm93LmRpY2UpIHRyZWVtYXBEaWNlKHJvdywgeDAsIHkwLCB4MSwgdmFsdWUgPyB5MCArPSAoeTEgLSB5MCkgKiByb3cudmFsdWUgLyB2YWx1ZSA6IHkxKTtcbiAgICAgICAgZWxzZSB0cmVlbWFwU2xpY2Uocm93LCB4MCwgeTAsIHZhbHVlID8geDAgKz0gKHgxIC0geDApICogcm93LnZhbHVlIC8gdmFsdWUgOiB4MSwgeTEpO1xuICAgICAgICB2YWx1ZSAtPSByb3cudmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudC5fc3F1YXJpZnkgPSByb3dzID0gc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG4gICAgICByb3dzLnJhdGlvID0gcmF0aW87XG4gICAgfVxuICB9XG5cbiAgcmVzcXVhcmlmeS5yYXRpbyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gY3VzdG9tKCh4ID0gK3gpID4gMSA/IHggOiAxKTtcbiAgfTtcblxuICByZXR1cm4gcmVzcXVhcmlmeTtcbn0pKHBoaSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/resquarify.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/round.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/round.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yb3VuZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3JvdW5kLmpzP2RmZWYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICBub2RlLngwID0gTWF0aC5yb3VuZChub2RlLngwKTtcbiAgbm9kZS55MCA9IE1hdGgucm91bmQobm9kZS55MCk7XG4gIG5vZGUueDEgPSBNYXRoLnJvdW5kKG5vZGUueDEpO1xuICBub2RlLnkxID0gTWF0aC5yb3VuZChub2RlLnkxKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/round.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/slice.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/slice.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc2xpY2UuanM/YjM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeTEgLSB5MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgxO1xuICAgIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/slice.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/dice.js\");\n/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/slice.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? _slice_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : _dice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(parent, x0, y0, x1, y1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZURpY2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCO0FBQ0U7O0FBRS9CLDZCQUFlLG9DQUFTO0FBQ3hCLHNCQUFzQixpREFBSyxHQUFHLGdEQUFJO0FBQ2xDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc2xpY2VEaWNlLmpzPzdmNzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRpY2UgZnJvbSBcIi4vZGljZS5qc1wiO1xuaW1wb3J0IHNsaWNlIGZyb20gXCIuL3NsaWNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgKHBhcmVudC5kZXB0aCAmIDEgPyBzbGljZSA6IGRpY2UpKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js\n"); /***/ }), /***/ "../../../node_modules/d3-hierarchy/src/treemap/squarify.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-hierarchy/src/treemap/squarify.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"phi\": () => (/* binding */ phi),\n/* harmony export */ \"squarifyRatio\": () => (/* binding */ squarifyRatio)\n/* harmony export */ });\n/* harmony import */ var _dice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/dice.js\");\n/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice.js */ \"../../../node_modules/d3-hierarchy/src/treemap/slice.js\");\n\n\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) (0,_dice_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else (0,_slice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zcXVhcmlmeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFvQztBQUNFOztBQUUvQjs7QUFFQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx1QkFBdUI7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQiw4REFBOEQ7QUFDbkYsa0JBQWtCLG9EQUFXO0FBQzdCLFNBQVMscURBQVk7QUFDckI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlFQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NxdWFyaWZ5LmpzP2E1ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRyZWVtYXBEaWNlIGZyb20gXCIuL2RpY2UuanNcIjtcbmltcG9ydCB0cmVlbWFwU2xpY2UgZnJvbSBcIi4vc2xpY2UuanNcIjtcblxuZXhwb3J0IHZhciBwaGkgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyO1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcm93cyA9IFtdLFxuICAgICAgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICByb3csXG4gICAgICBub2RlVmFsdWUsXG4gICAgICBpMCA9IDAsXG4gICAgICBpMSA9IDAsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgZHgsIGR5LFxuICAgICAgdmFsdWUgPSBwYXJlbnQudmFsdWUsXG4gICAgICBzdW1WYWx1ZSxcbiAgICAgIG1pblZhbHVlLFxuICAgICAgbWF4VmFsdWUsXG4gICAgICBuZXdSYXRpbyxcbiAgICAgIG1pblJhdGlvLFxuICAgICAgYWxwaGEsXG4gICAgICBiZXRhO1xuXG4gIHdoaWxlIChpMCA8IG4pIHtcbiAgICBkeCA9IHgxIC0geDAsIGR5ID0geTEgLSB5MDtcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgbm9uLWVtcHR5IG5vZGUuXG4gICAgZG8gc3VtVmFsdWUgPSBub2Rlc1tpMSsrXS52YWx1ZTsgd2hpbGUgKCFzdW1WYWx1ZSAmJiBpMSA8IG4pO1xuICAgIG1pblZhbHVlID0gbWF4VmFsdWUgPSBzdW1WYWx1ZTtcbiAgICBhbHBoYSA9IE1hdGgubWF4KGR5IC8gZHgsIGR4IC8gZHkpIC8gKHZhbHVlICogcmF0aW8pO1xuICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgbWluUmF0aW8gPSBNYXRoLm1heChtYXhWYWx1ZSAvIGJldGEsIGJldGEgLyBtaW5WYWx1ZSk7XG5cbiAgICAvLyBLZWVwIGFkZGluZyBub2RlcyB3aGlsZSB0aGUgYXNwZWN0IHJhdGlvIG1haW50YWlucyBvciBpbXByb3Zlcy5cbiAgICBmb3IgKDsgaTEgPCBuOyArK2kxKSB7XG4gICAgICBzdW1WYWx1ZSArPSBub2RlVmFsdWUgPSBub2Rlc1tpMV0udmFsdWU7XG4gICAgICBpZiAobm9kZVZhbHVlIDwgbWluVmFsdWUpIG1pblZhbHVlID0gbm9kZVZhbHVlO1xuICAgICAgaWYgKG5vZGVWYWx1ZSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KG1heFZhbHVlIC8gYmV0YSwgYmV0YSAvIG1pblZhbHVlKTtcbiAgICAgIGlmIChuZXdSYXRpbyA+IG1pblJhdGlvKSB7IHN1bVZhbHVlIC09IG5vZGVWYWx1ZTsgYnJlYWs7IH1cbiAgICAgIG1pblJhdGlvID0gbmV3UmF0aW87XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb24gYW5kIHJlY29yZCB0aGUgcm93IG9yaWVudGF0aW9uLlxuICAgIHJvd3MucHVzaChyb3cgPSB7dmFsdWU6IHN1bVZhbHVlLCBkaWNlOiBkeCA8IGR5LCBjaGlsZHJlbjogbm9kZXMuc2xpY2UoaTAsIGkxKX0pO1xuICAgIGlmIChyb3cuZGljZSkgdHJlZW1hcERpY2Uocm93LCB4MCwgeTAsIHgxLCB2YWx1ZSA/IHkwICs9IGR5ICogc3VtVmFsdWUgLyB2YWx1ZSA6IHkxKTtcbiAgICBlbHNlIHRyZWVtYXBTbGljZShyb3csIHgwLCB5MCwgdmFsdWUgPyB4MCArPSBkeCAqIHN1bVZhbHVlIC8gdmFsdWUgOiB4MSwgeTEpO1xuICAgIHZhbHVlIC09IHN1bVZhbHVlLCBpMCA9IGkxO1xuICB9XG5cbiAgcmV0dXJuIHJvd3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20ocmF0aW8pIHtcblxuICBmdW5jdGlvbiBzcXVhcmlmeShwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG4gIH1cblxuICBzcXVhcmlmeS5yYXRpbyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gY3VzdG9tKCh4ID0gK3gpID4gMSA/IHggOiAxKTtcbiAgfTtcblxuICByZXR1cm4gc3F1YXJpZnk7XG59KShwaGkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-hierarchy/src/treemap/squarify.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/array.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/array.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"genericArray\": () => (/* binding */ genericArray)\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./value.js */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./numberArray.js */ \"../../../node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return ((0,_numberArray_js__WEBPACK_IMPORTED_MODULE_0__.isNumberArray)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : genericArray)(a, b);\n}\n\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = (0,_value_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStCO0FBQzZCOztBQUU1RCw2QkFBZSxvQ0FBUztBQUN4QixVQUFVLDhEQUFhLE1BQU0sdURBQVc7QUFDeEM7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsUUFBUSxZQUFZLHFEQUFLO0FBQ3ZDLFNBQVMsUUFBUTs7QUFFakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcz80ZDliIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/basis.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/basis.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"basis\": () => (/* binding */ basis),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanM/N2U5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/basis.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/basisClosed.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/basisClosed.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-interpolate/src/basis.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__.basis)((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpc0Nsb3NlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpQzs7QUFFakMsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdEQUFLO0FBQ2hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpc0Nsb3NlZC5qcz84NzliIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/basisClosed.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/color.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/color.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ nogamma),\n/* harmony export */ \"gamma\": () => (/* binding */ gamma),\n/* harmony export */ \"hue\": () => (/* binding */ hue)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-interpolate/src/constant.js\");\n\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGtGQUFrRix3REFBUTtBQUMxRjs7QUFFTztBQUNQO0FBQ0EsMENBQTBDLHdEQUFRO0FBQ2xEO0FBQ0E7O0FBRWU7QUFDZjtBQUNBLDRCQUE0Qix3REFBUTtBQUNwQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzPzA3MGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/color.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/constant.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/constant.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanM/ZGNjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/cubehelix.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/cubehelix.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cubehelixLong\": () => (/* binding */ cubehelixLong),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/cubehelix.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start)).h, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(end)).h),\n s = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue));\nvar cubehelixLong = cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jdWJlaGVsaXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxRDtBQUNmOztBQUV0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0RBQWMsbUJBQW1CLG9EQUFjO0FBQzFFLGNBQWMscURBQUs7QUFDbkIsY0FBYyxxREFBSztBQUNuQixvQkFBb0IscURBQUs7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpRUFBZSxVQUFVLDBDQUFHLENBQUMsRUFBQztBQUN2Qiw4QkFBOEIsaURBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jdWJlaGVsaXguanM/MDJjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2N1YmVoZWxpeCBhcyBjb2xvckN1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeChodWUpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBjdWJlaGVsaXhHYW1tYSh5KSB7XG4gICAgeSA9ICt5O1xuXG4gICAgZnVuY3Rpb24gY3ViZWhlbGl4KHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9yQ3ViZWhlbGl4KHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9yQ3ViZWhlbGl4KGVuZCkpLmgpLFxuICAgICAgICAgIHMgPSBjb2xvcihzdGFydC5zLCBlbmQucyksXG4gICAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICAgIHN0YXJ0LnMgPSBzKHQpO1xuICAgICAgICBzdGFydC5sID0gbChNYXRoLnBvdyh0LCB5KSk7XG4gICAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjdWJlaGVsaXguZ2FtbWEgPSBjdWJlaGVsaXhHYW1tYTtcblxuICAgIHJldHVybiBjdWJlaGVsaXg7XG4gIH0pKDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdWJlaGVsaXgoaHVlKTtcbmV4cG9ydCB2YXIgY3ViZWhlbGl4TG9uZyA9IGN1YmVoZWxpeChjb2xvcik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/cubehelix.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/date.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/date.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcz82ODZiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/date.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/discrete.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/discrete.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kaXNjcmV0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Rpc2NyZXRlLmpzPzgxM2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/discrete.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/hcl.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/hcl.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"hclLong\": () => (/* binding */ hclLong)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/lab.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.hcl)(start)).h, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.hcl)(end)).h),\n c = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.c, end.c),\n l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue));\nvar hclLong = hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oY2wuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF5QztBQUNIOztBQUV0QztBQUNBO0FBQ0EseUJBQXlCLDZDQUFRLG1CQUFtQiw2Q0FBUTtBQUM1RCxZQUFZLHFEQUFLO0FBQ2pCLFlBQVkscURBQUs7QUFDakIsa0JBQWtCLHFEQUFLO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxJQUFJLDBDQUFHLENBQUMsRUFBQztBQUNqQixrQkFBa0IsaURBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oY2wuanM/Y2M4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2hjbCBhcyBjb2xvckhjbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhjbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhjbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IGNvbG9yKHN0YXJ0LmMsIGVuZC5jKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGNsKGh1ZSk7XG5leHBvcnQgdmFyIGhjbExvbmcgPSBoY2woY29sb3IpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/hcl.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/hsl.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/hsl.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"hslLong\": () => (/* binding */ hslLong)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.hsl)(start)).h, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.hsl)(end)).h),\n s = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue));\nvar hslLong = hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oc2wuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF5QztBQUNIOztBQUV0QztBQUNBO0FBQ0EseUJBQXlCLDZDQUFRLG1CQUFtQiw2Q0FBUTtBQUM1RCxZQUFZLHFEQUFLO0FBQ2pCLFlBQVkscURBQUs7QUFDakIsa0JBQWtCLHFEQUFLO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxJQUFJLDBDQUFHLENBQUMsRUFBQztBQUNqQixrQkFBa0IsaURBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oc2wuanM/MjAzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2hzbCBhcyBjb2xvckhzbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhzbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhzbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhzbChlbmQpKS5oKSxcbiAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaHNsKGh1ZSk7XG5leHBvcnQgdmFyIGhzbExvbmcgPSBoc2woY29sb3IpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/hsl.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/hue.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/hue.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var i = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.hue)(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9odWUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRS9CLDZCQUFlLG9DQUFTO0FBQ3hCLFVBQVUsOENBQUc7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHVlLmpzPzIwMWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSBodWUoK2EsICtiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgeCA9IGkodCk7XG4gICAgcmV0dXJuIHggLSAzNjAgKiBNYXRoLmZsb29yKHggLyAzNjApO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/hue.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/index.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/index.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"interpolate\": () => (/* reexport safe */ _value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"interpolateArray\": () => (/* reexport safe */ _array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"interpolateBasis\": () => (/* reexport safe */ _basis_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"interpolateBasisClosed\": () => (/* reexport safe */ _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"interpolateCubehelix\": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"interpolateCubehelixLong\": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__.cubehelixLong),\n/* harmony export */ \"interpolateDate\": () => (/* reexport safe */ _date_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"interpolateDiscrete\": () => (/* reexport safe */ _discrete_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"interpolateHcl\": () => (/* reexport safe */ _hcl_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"interpolateHclLong\": () => (/* reexport safe */ _hcl_js__WEBPACK_IMPORTED_MODULE_17__.hclLong),\n/* harmony export */ \"interpolateHsl\": () => (/* reexport safe */ _hsl_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"interpolateHslLong\": () => (/* reexport safe */ _hsl_js__WEBPACK_IMPORTED_MODULE_15__.hslLong),\n/* harmony export */ \"interpolateHue\": () => (/* reexport safe */ _hue_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"interpolateLab\": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"interpolateNumber\": () => (/* reexport safe */ _number_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"interpolateNumberArray\": () => (/* reexport safe */ _numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"interpolateObject\": () => (/* reexport safe */ _object_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"interpolateRgb\": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"interpolateRgbBasis\": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__.rgbBasis),\n/* harmony export */ \"interpolateRgbBasisClosed\": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__.rgbBasisClosed),\n/* harmony export */ \"interpolateRound\": () => (/* reexport safe */ _round_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"interpolateString\": () => (/* reexport safe */ _string_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"interpolateTransformCss\": () => (/* reexport safe */ _transform_index_js__WEBPACK_IMPORTED_MODULE_12__.interpolateTransformCss),\n/* harmony export */ \"interpolateTransformSvg\": () => (/* reexport safe */ _transform_index_js__WEBPACK_IMPORTED_MODULE_12__.interpolateTransformSvg),\n/* harmony export */ \"interpolateZoom\": () => (/* reexport safe */ _zoom_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"piecewise\": () => (/* reexport safe */ _piecewise_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]),\n/* harmony export */ \"quantize\": () => (/* reexport safe */ _quantize_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-interpolate/src/array.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-interpolate/src/basis.js\");\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ \"../../../node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date.js */ \"../../../node_modules/d3-interpolate/src/date.js\");\n/* harmony import */ var _discrete_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete.js */ \"../../../node_modules/d3-interpolate/src/discrete.js\");\n/* harmony import */ var _hue_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue.js */ \"../../../node_modules/d3-interpolate/src/hue.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ \"../../../node_modules/d3-interpolate/src/numberArray.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./object.js */ \"../../../node_modules/d3-interpolate/src/object.js\");\n/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./round.js */ \"../../../node_modules/d3-interpolate/src/round.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./string.js */ \"../../../node_modules/d3-interpolate/src/string.js\");\n/* harmony import */ var _transform_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./transform/index.js */ \"../../../node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./zoom.js */ \"../../../node_modules/d3-interpolate/src/zoom.js\");\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./rgb.js */ \"../../../node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var _hsl_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hsl.js */ \"../../../node_modules/d3-interpolate/src/hsl.js\");\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./lab.js */ \"../../../node_modules/d3-interpolate/src/lab.js\");\n/* harmony import */ var _hcl_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hcl.js */ \"../../../node_modules/d3-interpolate/src/hcl.js\");\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./cubehelix.js */ \"../../../node_modules/d3-interpolate/src/cubehelix.js\");\n/* harmony import */ var _piecewise_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./piecewise.js */ \"../../../node_modules/d3-interpolate/src/piecewise.js\");\n/* harmony import */ var _quantize_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./quantize.js */ \"../../../node_modules/d3-interpolate/src/quantize.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBa0Q7QUFDSztBQUNBO0FBQ1k7QUFDZDtBQUNRO0FBQ1Y7QUFDTTtBQUNVO0FBQ1Y7QUFDRjtBQUNFO0FBQzZCO0FBQ2pDO0FBQzRFO0FBQy9DO0FBQy9CO0FBQytCO0FBQ3dCO0FBQ3REO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcz85NWY1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZX0gZnJvbSBcIi4vdmFsdWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUFycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZURhdGV9IGZyb20gXCIuL2RhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZURpc2NyZXRlfSBmcm9tIFwiLi9kaXNjcmV0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSHVlfSBmcm9tIFwiLi9odWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU51bWJlcn0gZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9iamVjdH0gZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcIi4vcm91bmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5leHBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzLCBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Z30gZnJvbSBcIi4vdHJhbnNmb3JtL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVab29tfSBmcm9tIFwiLi96b29tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZ2IsIHJnYkJhc2lzIGFzIGludGVycG9sYXRlUmdiQmFzaXMsIHJnYkJhc2lzQ2xvc2VkIGFzIGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWR9IGZyb20gXCIuL3JnYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSHNsLCBoc2xMb25nIGFzIGludGVycG9sYXRlSHNsTG9uZ30gZnJvbSBcIi4vaHNsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVMYWJ9IGZyb20gXCIuL2xhYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlSGNsLCBoY2xMb25nIGFzIGludGVycG9sYXRlSGNsTG9uZ30gZnJvbSBcIi4vaGNsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXgsIGN1YmVoZWxpeExvbmcgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiLi9jdWJlaGVsaXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWVjZXdpc2V9IGZyb20gXCIuL3BpZWNld2lzZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHF1YW50aXplfSBmcm9tIFwiLi9xdWFudGl6ZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/lab.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/lab.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lab)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/lab.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction lab(start, end) {\n var l = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start)).l, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(end)).l),\n a = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start.a, end.a),\n b = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start.b, end.b),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXlDO0FBQ1Y7O0FBRWhCO0FBQ2YsVUFBVSxxREFBSyxVQUFVLG9EQUFRLG1CQUFtQixvREFBUTtBQUM1RCxVQUFVLHFEQUFLO0FBQ2YsVUFBVSxxREFBSztBQUNmLGdCQUFnQixxREFBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzPzNmZTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtsYWIgYXMgY29sb3JMYWJ9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yIGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihzdGFydCwgZW5kKSB7XG4gIHZhciBsID0gY29sb3IoKHN0YXJ0ID0gY29sb3JMYWIoc3RhcnQpKS5sLCAoZW5kID0gY29sb3JMYWIoZW5kKSkubCksXG4gICAgICBhID0gY29sb3Ioc3RhcnQuYSwgZW5kLmEpLFxuICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgc3RhcnQubCA9IGwodCk7XG4gICAgc3RhcnQuYSA9IGEodCk7XG4gICAgc3RhcnQuYiA9IGIodCk7XG4gICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/lab.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/number.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/number.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzPzMzYzMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/number.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/numberArray.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/numberArray.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"isNumberArray\": () => (/* binding */ isNumberArray)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nfunction isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanM/N2QzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/numberArray.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/object.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/object.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"../../../node_modules/d3-interpolate/src/value.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = (0,_value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRS9CLDZCQUFlLG9DQUFTO0FBQ3hCLFlBQVk7QUFDWixZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxxREFBSztBQUNsQixNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanM/ODkyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/object.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/piecewise.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/piecewise.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ piecewise)\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"../../../node_modules/d3-interpolate/src/value.js\");\n\n\nfunction piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = _value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9waWVjZXdpc2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEM7O0FBRTdCO0FBQ2YsZ0VBQWdFLGlEQUFLO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzPzYwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWZhdWx0IGFzIHZhbHVlfSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaWVjZXdpc2UoaW50ZXJwb2xhdGUsIHZhbHVlcykge1xuICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHZhbHVlcyA9IGludGVycG9sYXRlLCBpbnRlcnBvbGF0ZSA9IHZhbHVlO1xuICB2YXIgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMSwgdiA9IHZhbHVlc1swXSwgSSA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBuKTtcbiAgd2hpbGUgKGkgPCBuKSBJW2ldID0gaW50ZXJwb2xhdGUodiwgdiA9IHZhbHVlc1srK2ldKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKj0gbikpKTtcbiAgICByZXR1cm4gSVtpXSh0IC0gaSk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/piecewise.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/quantize.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/quantize.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9xdWFudGl6ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcXVhbnRpemUuanM/MWIwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnRlcnBvbGF0b3IsIG4pIHtcbiAgdmFyIHNhbXBsZXMgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBzYW1wbGVzW2ldID0gaW50ZXJwb2xhdG9yKGkgLyAobiAtIDEpKTtcbiAgcmV0dXJuIHNhbXBsZXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/quantize.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/rgb.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/rgb.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"rgbBasis\": () => (/* binding */ rgbBasis),\n/* harmony export */ \"rgbBasisClosed\": () => (/* binding */ rgbBasisClosed)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-interpolate/src/basis.js\");\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ \"../../../node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"../../../node_modules/d3-interpolate/src/color.js\");\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function rgbGamma(y) {\n var color = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.gamma)(y);\n\n function rgb(start, end) {\n var r = color((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(start)).r, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\nvar rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF5QztBQUNWO0FBQ1k7QUFDRDs7QUFFMUMsaUVBQWU7QUFDZixjQUFjLGdEQUFLOztBQUVuQjtBQUNBLDJCQUEyQiw2Q0FBUSxtQkFBbUIsNkNBQVE7QUFDOUQ7QUFDQTtBQUNBLGtCQUFrQixxREFBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxJQUFJLEVBQUM7O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QixjQUFjLDZDQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLHlCQUF5QixpREFBSztBQUM5QiwrQkFBK0IsdURBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanM/YjAwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/rgb.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/round.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/round.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcz85YzRjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/round.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/string.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/string.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-interpolate/src/number.js\");\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qyw0QkFBNEI7QUFDNUI7QUFDQSxNQUFNLE9BQU87QUFDYjtBQUNBLGNBQWMsU0FBUyxzREFBTSxTQUFTO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsT0FBTztBQUNwQztBQUNBLFNBQVM7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcz8xZGEzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/string.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/transform/decompose.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/transform/decompose.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"identity\": () => (/* binding */ identity)\n/* harmony export */ });\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcz9lMTU3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/transform/decompose.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/transform/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/transform/index.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"interpolateTransformCss\": () => (/* binding */ interpolateTransformCss),\n/* harmony export */ \"interpolateTransformSvg\": () => (/* binding */ interpolateTransformSvg)\n/* harmony export */ });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number.js */ \"../../../node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse.js */ \"../../../node_modules/d3-interpolate/src/transform/parse.js\");\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseSvg, \", \", \")\", \")\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNZOztBQUU5Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxhQUFhLHNEQUFNLFNBQVMsR0FBRyxhQUFhLHNEQUFNLFNBQVM7QUFDekUsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLGdDQUFnQztBQUNqRSxjQUFjLHNEQUFzRCxzREFBTSxPQUFPO0FBQ2pGLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMscURBQXFELHNEQUFNLE9BQU87QUFDaEYsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQWEsc0RBQU0sU0FBUyxHQUFHLGFBQWEsc0RBQU0sU0FBUztBQUN6RSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxtREFBbUQsK0NBQVE7QUFDM0QsbURBQW1ELCtDQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2luZGV4LmpzPzY0NGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/transform/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/transform/parse.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/transform/parse.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseCss\": () => (/* binding */ parseCss),\n/* harmony export */ \"parseSvg\": () => (/* binding */ parseSvg)\n/* harmony export */ });\n/* harmony import */ var _decompose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose.js */ \"../../../node_modules/d3-interpolate/src/transform/decompose.js\");\n\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nfunction parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity : (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nfunction parseSvg(value) {\n if (value == null) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity;\n value = value.matrix;\n return (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1EOztBQUVuRDs7QUFFQTtBQUNPO0FBQ1A7QUFDQSx3QkFBd0IsbURBQVEsR0FBRyx5REFBUztBQUM1Qzs7QUFFTztBQUNQLDRCQUE0QixtREFBUTtBQUNwQztBQUNBO0FBQ0EsaUVBQWlFLG1EQUFRO0FBQ3pFO0FBQ0EsU0FBUyx5REFBUztBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcz9lYmJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/transform/parse.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/value.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/value.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rgb.js */ \"../../../node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-interpolate/src/array.js\");\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./date.js */ \"../../../node_modules/d3-interpolate/src/date.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./object.js */ \"../../../node_modules/d3-interpolate/src/object.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./string.js */ \"../../../node_modules/d3-interpolate/src/string.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-interpolate/src/constant.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./numberArray.js */ \"../../../node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(b)\n : (t === \"number\" ? _number_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n : t === \"string\" ? ((c = (0,d3_color__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(b)) ? (b = c, _rgb_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]) : _string_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])\n : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? _rgb_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n : b instanceof Date ? _date_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n : (0,_numberArray_js__WEBPACK_IMPORTED_MODULE_6__.isNumberArray)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n : Array.isArray(b) ? _array_js__WEBPACK_IMPORTED_MODULE_7__.genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? _object_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n : _number_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(a, b);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ0o7QUFDYTtBQUNYO0FBQ0k7QUFDQTtBQUNBO0FBQ0k7QUFDdUI7O0FBRTVELDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0Esd0NBQXdDLHdEQUFRO0FBQ2hELDBCQUEwQixrREFBTTtBQUNoQywrQkFBK0Isb0RBQUssZUFBZSwrQ0FBRyxJQUFJLGtEQUFNO0FBQ2hFLHFCQUFxQixnREFBSyxHQUFHLCtDQUFHO0FBQ2hDLDRCQUE0QixnREFBSTtBQUNoQyxRQUFRLDhEQUFhLE1BQU0sdURBQVc7QUFDdEMsMkJBQTJCLG1EQUFZO0FBQ3ZDLDBGQUEwRixrREFBTTtBQUNoRyxRQUFRLGtEQUFNO0FBQ2QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcz8xYjQyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2IuanNcIjtcbmltcG9ydCB7Z2VuZXJpY0FycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZS5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/value.js\n"); /***/ }), /***/ "../../../node_modules/d3-interpolate/src/zoom.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-interpolate/src/zoom.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy96b29tLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLG1CQUFtQixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcz81ZWE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBlcHNpbG9uMiA9IDFlLTEyO1xuXG5mdW5jdGlvbiBjb3NoKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHNpbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpIC0gMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gdGFuaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCgyICogeCkpIC0gMSkgLyAoeCArIDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gem9vbVJobyhyaG8sIHJobzIsIHJobzQpIHtcblxuICAvLyBwMCA9IFt1eDAsIHV5MCwgdzBdXG4gIC8vIHAxID0gW3V4MSwgdXkxLCB3MV1cbiAgZnVuY3Rpb24gem9vbShwMCwgcDEpIHtcbiAgICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAwWzJdLFxuICAgICAgICB1eDEgPSBwMVswXSwgdXkxID0gcDFbMV0sIHcxID0gcDFbMl0sXG4gICAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgICBkeSA9IHV5MSAtIHV5MCxcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSxcbiAgICAgICAgaSxcbiAgICAgICAgUztcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdTAg4omFIHUxLlxuICAgIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgICBTID0gTWF0aC5sb2codzEgLyB3MCkgLyByaG87XG4gICAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHV4MCArIHQgKiBkeCxcbiAgICAgICAgICB1eTAgKyB0ICogZHksXG4gICAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmFsIGNhc2UuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZDEgPSBNYXRoLnNxcnQoZDIpLFxuICAgICAgICAgIGIwID0gKHcxICogdzEgLSB3MCAqIHcwICsgcmhvNCAqIGQyKSAvICgyICogdzAgKiByaG8yICogZDEpLFxuICAgICAgICAgIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvNCAqIGQyKSAvICgyICogdzEgKiByaG8yICogZDEpLFxuICAgICAgICAgIHIwID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxcbiAgICAgICAgICByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSk7XG4gICAgICBTID0gKHIxIC0gcjApIC8gcmhvO1xuICAgICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgdmFyIHMgPSB0ICogUyxcbiAgICAgICAgICAgIGNvc2hyMCA9IGNvc2gocjApLFxuICAgICAgICAgICAgdSA9IHcwIC8gKHJobzIgKiBkMSkgKiAoY29zaHIwICogdGFuaChyaG8gKiBzICsgcjApIC0gc2luaChyMCkpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHV4MCArIHUgKiBkeCxcbiAgICAgICAgICB1eTAgKyB1ICogZHksXG4gICAgICAgICAgdzAgKiBjb3NocjAgLyBjb3NoKHJobyAqIHMgKyByMClcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpLmR1cmF0aW9uID0gUyAqIDEwMDAgKiByaG8gLyBNYXRoLlNRUlQyO1xuXG4gICAgcmV0dXJuIGk7XG4gIH1cblxuICB6b29tLnJobyA9IGZ1bmN0aW9uKF8pIHtcbiAgICB2YXIgXzEgPSBNYXRoLm1heCgxZS0zLCArXyksIF8yID0gXzEgKiBfMSwgXzQgPSBfMiAqIF8yO1xuICAgIHJldHVybiB6b29tUmhvKF8xLCBfMiwgXzQpO1xuICB9O1xuXG4gIHJldHVybiB6b29tO1xufSkoTWF0aC5TUVJUMiwgMiwgNCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-interpolate/src/zoom.js\n"); /***/ }), /***/ "../../../node_modules/d3-path/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-path/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Path\": () => (/* reexport safe */ _path_js__WEBPACK_IMPORTED_MODULE_0__.Path),\n/* harmony export */ \"path\": () => (/* reexport safe */ _path_js__WEBPACK_IMPORTED_MODULE_0__.path),\n/* harmony export */ \"pathRound\": () => (/* reexport safe */ _path_js__WEBPACK_IMPORTED_MODULE_0__.pathRound)\n/* harmony export */ });\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-path/src/path.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL2luZGV4LmpzPzZkOGIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtQYXRoLCBwYXRoLCBwYXRoUm91bmR9IGZyb20gXCIuL3BhdGguanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-path/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-path/src/path.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-path/src/path.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Path\": () => (/* binding */ Path),\n/* harmony export */ \"path\": () => (/* binding */ path),\n/* harmony export */ \"pathRound\": () => (/* binding */ pathRound)\n/* harmony export */ });\nconst pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nclass Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nfunction path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nfunction pathRound(digits = 3) {\n return new Path(+digits);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9ELE9BQU87QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IseUJBQXlCLEdBQUcseUJBQXlCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYyxHQUFHLGNBQWM7QUFDbkQ7QUFDQTtBQUNBLG9CQUFvQixJQUFJLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxjQUFjO0FBQ2pFO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxjQUFjO0FBQy9FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRCxFQUFFOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLGNBQWMsR0FBRyxjQUFjO0FBQ3JEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYyxHQUFHLGNBQWM7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWUsR0FBRyxlQUFlO0FBQ3pEOztBQUVBLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxPQUFPLHlCQUF5QixHQUFHLDBCQUEwQixHQUFHLDBCQUEwQjtBQUN2SDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRCxFQUFFOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQixHQUFHLEdBQUcsR0FBRztBQUMvQjs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLEdBQUcsR0FBRyxHQUFHO0FBQy9COztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxHQUFHLEdBQUcsY0FBYyxHQUFHLGNBQWM7QUFDakg7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxLQUFLLFlBQVksR0FBRyxHQUFHLEdBQUcsZ0NBQWdDLEdBQUcsZ0NBQWdDO0FBQzFIO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUIsR0FBRyx5QkFBeUIsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanM/MWE4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBhcHBlbmQoc3RyaW5ncykge1xuICB0aGlzLl8gKz0gc3RyaW5nc1swXTtcbiAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHRoaXMuXyArPSBhcmd1bWVudHNbaV0gKyBzdHJpbmdzW2ldO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJvdW5kKGRpZ2l0cykge1xuICBsZXQgZCA9IE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgaWYgKCEoZCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtkaWdpdHN9YCk7XG4gIGlmIChkID4gMTUpIHJldHVybiBhcHBlbmQ7XG4gIGNvbnN0IGsgPSAxMCAqKiBkO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5ncykge1xuICAgIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxLCBuID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHRoaXMuXyArPSBNYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSAqIGspIC8gayArIHN0cmluZ3NbaV07XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aCB7XG4gIGNvbnN0cnVjdG9yKGRpZ2l0cykge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuXyA9IFwiXCI7XG4gICAgdGhpcy5fYXBwZW5kID0gZGlnaXRzID09IG51bGwgPyBhcHBlbmQgOiBhcHBlbmRSb3VuZChkaWdpdHMpO1xuICB9XG4gIG1vdmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwID0gdGhpcy5feDEgPSAreH0sJHt0aGlzLl95MCA9IHRoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBjbG9zZVBhdGgoKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fYXBwZW5kYFpgO1xuICAgIH1cbiAgfVxuICBsaW5lVG8oeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBxdWFkcmF0aWNDdXJ2ZVRvKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBRJHsreDF9LCR7K3kxfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgQyR7K3gxfSwkeyt5MX0sJHsreDJ9LCR7K3kyfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGFyY1RvKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9IHgxfSwke3RoaXMuX3kxID0geTF9YDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgbGV0IHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTCR7eDEgKyB0MDEgKiB4MDF9LCR7eTEgKyB0MDEgKiB5MDF9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwwLCR7Kyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApfSwke3RoaXMuX3gxID0geDEgKyB0MjEgKiB4MjF9LCR7dGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMX1gO1xuICAgIH1cbiAgfVxuICBhcmMoeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBNJHt4MH0sJHt5MH1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBBJHtyfSwke3J9LDAsMSwke2N3fSwke3ggLSBkeH0sJHt5IC0gZHl9QSR7cn0sJHtyfSwwLDEsJHtjd30sJHt0aGlzLl94MSA9IHgwfSwke3RoaXMuX3kxID0geTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwkeysoZGEgPj0gcGkpfSwke2N3fSwke3RoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSl9LCR7dGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKX1gO1xuICAgIH1cbiAgfVxuICByZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1oJHt3ID0gK3d9diR7K2h9aCR7LXd9WmA7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG4vLyBBbGxvdyBpbnN0YW5jZW9mIGQzLnBhdGhcbnBhdGgucHJvdG90eXBlID0gUGF0aC5wcm90b3R5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoUm91bmQoZGlnaXRzID0gMykge1xuICByZXR1cm4gbmV3IFBhdGgoK2RpZ2l0cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-path/src/path.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/area.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-polygon/src/area.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2FyZWEuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9hcmVhLmpzPzBiMDUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbikge1xuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgYSxcbiAgICAgIGIgPSBwb2x5Z29uW24gLSAxXSxcbiAgICAgIGFyZWEgPSAwO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgYSA9IGI7XG4gICAgYiA9IHBvbHlnb25baV07XG4gICAgYXJlYSArPSBhWzFdICogYlswXSAtIGFbMF0gKiBiWzFdO1xuICB9XG5cbiAgcmV0dXJuIGFyZWEgLyAyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/area.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/centroid.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-polygon/src/centroid.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) {\n var i = -1,\n n = polygon.length,\n x = 0,\n y = 0,\n a,\n b = polygon[n - 1],\n c,\n k = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n k += c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n\n return k *= 3, [x / k, y / k];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2NlbnRyb2lkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2NlbnRyb2lkLmpzPzExNzYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbikge1xuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgeCA9IDAsXG4gICAgICB5ID0gMCxcbiAgICAgIGEsXG4gICAgICBiID0gcG9seWdvbltuIC0gMV0sXG4gICAgICBjLFxuICAgICAgayA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBhID0gYjtcbiAgICBiID0gcG9seWdvbltpXTtcbiAgICBrICs9IGMgPSBhWzBdICogYlsxXSAtIGJbMF0gKiBhWzFdO1xuICAgIHggKz0gKGFbMF0gKyBiWzBdKSAqIGM7XG4gICAgeSArPSAoYVsxXSArIGJbMV0pICogYztcbiAgfVxuXG4gIHJldHVybiBrICo9IDMsIFt4IC8gaywgeSAvIGtdO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/centroid.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/contains.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-polygon/src/contains.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon, point) {\n var n = polygon.length,\n p = polygon[n - 1],\n x = point[0], y = point[1],\n x0 = p[0], y0 = p[1],\n x1, y1,\n inside = false;\n\n for (var i = 0; i < n; ++i) {\n p = polygon[i], x1 = p[0], y1 = p[1];\n if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n x0 = x1, y0 = y1;\n }\n\n return inside;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2NvbnRhaW5zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvY29udGFpbnMuanM/NGFjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgcCA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sXG4gICAgICB4MCA9IHBbMF0sIHkwID0gcFsxXSxcbiAgICAgIHgxLCB5MSxcbiAgICAgIGluc2lkZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgcCA9IHBvbHlnb25baV0sIHgxID0gcFswXSwgeTEgPSBwWzFdO1xuICAgIGlmICgoKHkxID4geSkgIT09ICh5MCA+IHkpKSAmJiAoeCA8ICh4MCAtIHgxKSAqICh5IC0geTEpIC8gKHkwIC0geTEpICsgeDEpKSBpbnNpZGUgPSAhaW5zaWRlO1xuICAgIHgwID0geDEsIHkwID0geTE7XG4gIH1cblxuICByZXR1cm4gaW5zaWRlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/contains.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/cross.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-polygon/src/cross.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2Nyb3NzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2Nyb3NzLmpzPzZlMWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUmV0dXJucyB0aGUgMkQgY3Jvc3MgcHJvZHVjdCBvZiBBQiBhbmQgQUMgdmVjdG9ycywgaS5lLiwgdGhlIHotY29tcG9uZW50IG9mXG4vLyB0aGUgM0QgY3Jvc3MgcHJvZHVjdCBpbiBhIHF1YWRyYW50IEkgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtICgreCBpc1xuLy8gcmlnaHQsICt5IGlzIHVwKS4gUmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIGlmIEFCQyBpcyBjb3VudGVyLWNsb2Nrd2lzZSxcbi8vIG5lZ2F0aXZlIGlmIGNsb2Nrd2lzZSwgYW5kIHplcm8gaWYgdGhlIHBvaW50cyBhcmUgY29sbGluZWFyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgYykge1xuICByZXR1cm4gKGJbMF0gLSBhWzBdKSAqIChjWzFdIC0gYVsxXSkgLSAoYlsxXSAtIGFbMV0pICogKGNbMF0gLSBhWzBdKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/cross.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/hull.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-polygon/src/hull.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cross_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cross.js */ \"../../../node_modules/d3-polygon/src/cross.js\");\n\n\nfunction lexicographicOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n const n = points.length,\n indexes = [0, 1];\n let size = 2, i;\n\n for (i = 2; i < n; ++i) {\n while (size > 1 && (0,_cross_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n indexes[size++] = i;\n }\n\n return indexes.slice(0, size); // remove popped points\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(points) {\n if ((n = points.length) < 3) return null;\n\n var i,\n n,\n sortedPoints = new Array(n),\n flippedPoints = new Array(n);\n\n for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n sortedPoints.sort(lexicographicOrder);\n for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n var upperIndexes = computeUpperHullIndexes(sortedPoints),\n lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n // Construct the hull polygon, removing possible duplicate endpoints.\n var skipLeft = lowerIndexes[0] === upperIndexes[0],\n skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n hull = [];\n\n // Add upper hull in right-to-l order.\n // Then add lower hull in left-to-right order.\n for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n return hull;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2h1bGwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLE9BQU87QUFDckIsdUJBQXVCLHFEQUFLO0FBQzVCO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsT0FBTztBQUNyQjtBQUNBLGNBQWMsT0FBTzs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVE7QUFDNUMsc0JBQXNCLHFDQUFxQzs7QUFFM0Q7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaHVsbC5qcz8yMDUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcm9zcyBmcm9tIFwiLi9jcm9zcy5qc1wiO1xuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljT3JkZXIoYSwgYikge1xuICByZXR1cm4gYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJbMV07XG59XG5cbi8vIENvbXB1dGVzIHRoZSB1cHBlciBjb252ZXggaHVsbCBwZXIgdGhlIG1vbm90b25lIGNoYWluIGFsZ29yaXRobS5cbi8vIEFzc3VtZXMgcG9pbnRzLmxlbmd0aCA+PSAzLCBpcyBzb3J0ZWQgYnkgeCwgdW5pcXVlIGluIHkuXG4vLyBSZXR1cm5zIGFuIGFycmF5IG9mIGluZGljZXMgaW50byBwb2ludHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbmZ1bmN0aW9uIGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKHBvaW50cykge1xuICBjb25zdCBuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgIGluZGV4ZXMgPSBbMCwgMV07XG4gIGxldCBzaXplID0gMiwgaTtcblxuICBmb3IgKGkgPSAyOyBpIDwgbjsgKytpKSB7XG4gICAgd2hpbGUgKHNpemUgPiAxICYmIGNyb3NzKHBvaW50c1tpbmRleGVzW3NpemUgLSAyXV0sIHBvaW50c1tpbmRleGVzW3NpemUgLSAxXV0sIHBvaW50c1tpXSkgPD0gMCkgLS1zaXplO1xuICAgIGluZGV4ZXNbc2l6ZSsrXSA9IGk7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlcy5zbGljZSgwLCBzaXplKTsgLy8gcmVtb3ZlIHBvcHBlZCBwb2ludHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9pbnRzKSB7XG4gIGlmICgobiA9IHBvaW50cy5sZW5ndGgpIDwgMykgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGksXG4gICAgICBuLFxuICAgICAgc29ydGVkUG9pbnRzID0gbmV3IEFycmF5KG4pLFxuICAgICAgZmxpcHBlZFBvaW50cyA9IG5ldyBBcnJheShuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBzb3J0ZWRQb2ludHNbaV0gPSBbK3BvaW50c1tpXVswXSwgK3BvaW50c1tpXVsxXSwgaV07XG4gIHNvcnRlZFBvaW50cy5zb3J0KGxleGljb2dyYXBoaWNPcmRlcik7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGZsaXBwZWRQb2ludHNbaV0gPSBbc29ydGVkUG9pbnRzW2ldWzBdLCAtc29ydGVkUG9pbnRzW2ldWzFdXTtcblxuICB2YXIgdXBwZXJJbmRleGVzID0gY29tcHV0ZVVwcGVySHVsbEluZGV4ZXMoc29ydGVkUG9pbnRzKSxcbiAgICAgIGxvd2VySW5kZXhlcyA9IGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKGZsaXBwZWRQb2ludHMpO1xuXG4gIC8vIENvbnN0cnVjdCB0aGUgaHVsbCBwb2x5Z29uLCByZW1vdmluZyBwb3NzaWJsZSBkdXBsaWNhdGUgZW5kcG9pbnRzLlxuICB2YXIgc2tpcExlZnQgPSBsb3dlckluZGV4ZXNbMF0gPT09IHVwcGVySW5kZXhlc1swXSxcbiAgICAgIHNraXBSaWdodCA9IGxvd2VySW5kZXhlc1tsb3dlckluZGV4ZXMubGVuZ3RoIC0gMV0gPT09IHVwcGVySW5kZXhlc1t1cHBlckluZGV4ZXMubGVuZ3RoIC0gMV0sXG4gICAgICBodWxsID0gW107XG5cbiAgLy8gQWRkIHVwcGVyIGh1bGwgaW4gcmlnaHQtdG8tbCBvcmRlci5cbiAgLy8gVGhlbiBhZGQgbG93ZXIgaHVsbCBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICBmb3IgKGkgPSB1cHBlckluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIGh1bGwucHVzaChwb2ludHNbc29ydGVkUG9pbnRzW3VwcGVySW5kZXhlc1tpXV1bMl1dKTtcbiAgZm9yIChpID0gK3NraXBMZWZ0OyBpIDwgbG93ZXJJbmRleGVzLmxlbmd0aCAtIHNraXBSaWdodDsgKytpKSBodWxsLnB1c2gocG9pbnRzW3NvcnRlZFBvaW50c1tsb3dlckluZGV4ZXNbaV1dWzJdXSk7XG5cbiAgcmV0dXJuIGh1bGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/hull.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/index.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-polygon/src/index.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"polygonArea\": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"polygonCentroid\": () => (/* reexport safe */ _centroid_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"polygonContains\": () => (/* reexport safe */ _contains_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"polygonHull\": () => (/* reexport safe */ _hull_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"polygonLength\": () => (/* reexport safe */ _length_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-polygon/src/area.js\");\n/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./centroid.js */ \"../../../node_modules/d3-polygon/src/centroid.js\");\n/* harmony import */ var _hull_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hull.js */ \"../../../node_modules/d3-polygon/src/hull.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contains.js */ \"../../../node_modules/d3-polygon/src/contains.js\");\n/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./length.js */ \"../../../node_modules/d3-polygon/src/length.js\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBaUQ7QUFDUTtBQUNSO0FBQ1E7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaW5kZXguanM/YzdjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkFyZWF9IGZyb20gXCIuL2FyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQ2VudHJvaWR9IGZyb20gXCIuL2NlbnRyb2lkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkh1bGx9IGZyb20gXCIuL2h1bGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQ29udGFpbnN9IGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkxlbmd0aH0gZnJvbSBcIi4vbGVuZ3RoLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-polygon/src/length.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-polygon/src/length.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.hypot(xa, ya);\n }\n\n return perimeter;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2xlbmd0aC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9sZW5ndGguanM/MGRhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uKSB7XG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICBiID0gcG9seWdvbltuIC0gMV0sXG4gICAgICB4YSxcbiAgICAgIHlhLFxuICAgICAgeGIgPSBiWzBdLFxuICAgICAgeWIgPSBiWzFdLFxuICAgICAgcGVyaW1ldGVyID0gMDtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHhhID0geGI7XG4gICAgeWEgPSB5YjtcbiAgICBiID0gcG9seWdvbltpXTtcbiAgICB4YiA9IGJbMF07XG4gICAgeWIgPSBiWzFdO1xuICAgIHhhIC09IHhiO1xuICAgIHlhIC09IHliO1xuICAgIHBlcmltZXRlciArPSBNYXRoLmh5cG90KHhhLCB5YSk7XG4gIH1cblxuICByZXR1cm4gcGVyaW1ldGVyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-polygon/src/length.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/add.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/add.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addAll\": () => (/* binding */ addAll),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9hZGQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELHFEQUFxRDtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCxxREFBcUQ7QUFDckQsSUFBSTtBQUNKO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvYWRkLmpzP2YxMDciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBjb25zdCB4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkKSxcbiAgICAgIHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpO1xuICByZXR1cm4gYWRkKHRoaXMuY292ZXIoeCwgeSksIHgsIHksIGQpO1xufVxuXG5mdW5jdGlvbiBhZGQodHJlZSwgeCwgeSwgZCkge1xuICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiB0cmVlOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgcGFyZW50LFxuICAgICAgbm9kZSA9IHRyZWUuX3Jvb3QsXG4gICAgICBsZWFmID0ge2RhdGE6IGR9LFxuICAgICAgeDAgPSB0cmVlLl94MCxcbiAgICAgIHkwID0gdHJlZS5feTAsXG4gICAgICB4MSA9IHRyZWUuX3gxLFxuICAgICAgeTEgPSB0cmVlLl95MSxcbiAgICAgIHhtLFxuICAgICAgeW0sXG4gICAgICB4cCxcbiAgICAgIHlwLFxuICAgICAgcmlnaHQsXG4gICAgICBib3R0b20sXG4gICAgICBpLFxuICAgICAgajtcblxuICAvLyBJZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW5pdGlhbGl6ZSB0aGUgcm9vdCBhcyBhIGxlYWYuXG4gIGlmICghbm9kZSkgcmV0dXJuIHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIEZpbmQgdGhlIGV4aXN0aW5nIGxlYWYgZm9yIHRoZSBuZXcgcG9pbnQsIG9yIGFkZCBpdC5cbiAgd2hpbGUgKG5vZGUubGVuZ3RoKSB7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gICAgaWYgKHBhcmVudCA9IG5vZGUsICEobm9kZSA9IG5vZGVbaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHRdKSkgcmV0dXJuIHBhcmVudFtpXSA9IGxlYWYsIHRyZWU7XG4gIH1cblxuICAvLyBJcyB0aGUgbmV3IHBvaW50IGlzIGV4YWN0bHkgY29pbmNpZGVudCB3aXRoIHRoZSBleGlzdGluZyBwb2ludD9cbiAgeHAgPSArdHJlZS5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSk7XG4gIHlwID0gK3RyZWUuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICBpZiAoeCA9PT0geHAgJiYgeSA9PT0geXApIHJldHVybiBsZWFmLm5leHQgPSBub2RlLCBwYXJlbnQgPyBwYXJlbnRbaV0gPSBsZWFmIDogdHJlZS5fcm9vdCA9IGxlYWYsIHRyZWU7XG5cbiAgLy8gT3RoZXJ3aXNlLCBzcGxpdCB0aGUgbGVhZiBub2RlIHVudGlsIHRoZSBvbGQgYW5kIG5ldyBwb2ludCBhcmUgc2VwYXJhdGVkLlxuICBkbyB7XG4gICAgcGFyZW50ID0gcGFyZW50ID8gcGFyZW50W2ldID0gbmV3IEFycmF5KDQpIDogdHJlZS5fcm9vdCA9IG5ldyBBcnJheSg0KTtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgfSB3aGlsZSAoKGkgPSBib3R0b20gPDwgMSB8IHJpZ2h0KSA9PT0gKGogPSAoeXAgPj0geW0pIDw8IDEgfCAoeHAgPj0geG0pKSk7XG4gIHJldHVybiBwYXJlbnRbal0gPSBub2RlLCBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQWxsKGRhdGEpIHtcbiAgdmFyIGQsIGksIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeHogPSBuZXcgQXJyYXkobiksXG4gICAgICB5eiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHgwID0gSW5maW5pdHksXG4gICAgICB5MCA9IEluZmluaXR5LFxuICAgICAgeDEgPSAtSW5maW5pdHksXG4gICAgICB5MSA9IC1JbmZpbml0eTtcblxuICAvLyBDb21wdXRlIHRoZSBwb2ludHMgYW5kIHRoZWlyIGV4dGVudC5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGlmIChpc05hTih4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkID0gZGF0YVtpXSkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgY29udGludWU7XG4gICAgeHpbaV0gPSB4O1xuICAgIHl6W2ldID0geTtcbiAgICBpZiAoeCA8IHgwKSB4MCA9IHg7XG4gICAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICAgIGlmICh5IDwgeTApIHkwID0geTtcbiAgICBpZiAoeSA+IHkxKSB5MSA9IHk7XG4gIH1cblxuICAvLyBJZiB0aGVyZSB3ZXJlIG5vICh2YWxpZCkgcG9pbnRzLCBhYm9ydC5cbiAgaWYgKHgwID4geDEgfHwgeTAgPiB5MSkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRXhwYW5kIHRoZSB0cmVlIHRvIGNvdmVyIHRoZSBuZXcgcG9pbnRzLlxuICB0aGlzLmNvdmVyKHgwLCB5MCkuY292ZXIoeDEsIHkxKTtcblxuICAvLyBBZGQgdGhlIG5ldyBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBhZGQodGhpcywgeHpbaV0sIHl6W2ldLCBkYXRhW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/add.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/cover.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/cover.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEIsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUMsMENBQTBDO0FBQzFDLDBDQUEwQztBQUMxQywwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2NvdmVyLmpzPzZiMzUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICBpZiAoaXNOYU4oeCA9ICt4KSB8fCBpc05hTih5ID0gK3kpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGhhcyBubyBleHRlbnQsIGluaXRpYWxpemUgdGhlbS5cbiAgLy8gSW50ZWdlciBleHRlbnQgYXJlIG5lY2Vzc2FyeSBzbyB0aGF0IGlmIHdlIGxhdGVyIGRvdWJsZSB0aGUgZXh0ZW50LFxuICAvLyB0aGUgZXhpc3RpbmcgcXVhZHJhbnQgYm91bmRhcmllcyBkb27igJl0IGNoYW5nZSBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgZXJyb3IhXG4gIGlmIChpc05hTih4MCkpIHtcbiAgICB4MSA9ICh4MCA9IE1hdGguZmxvb3IoeCkpICsgMTtcbiAgICB5MSA9ICh5MCA9IE1hdGguZmxvb3IoeSkpICsgMTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgZG91YmxlIHJlcGVhdGVkbHkgdG8gY292ZXIuXG4gIGVsc2Uge1xuICAgIHZhciB6ID0geDEgLSB4MCB8fCAxLFxuICAgICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBpO1xuXG4gICAgd2hpbGUgKHgwID4geCB8fCB4ID49IHgxIHx8IHkwID4geSB8fCB5ID49IHkxKSB7XG4gICAgICBpID0gKHkgPCB5MCkgPDwgMSB8ICh4IDwgeDApO1xuICAgICAgcGFyZW50ID0gbmV3IEFycmF5KDQpLCBwYXJlbnRbaV0gPSBub2RlLCBub2RlID0gcGFyZW50LCB6ICo9IDI7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSAwOiB4MSA9IHgwICsgeiwgeTEgPSB5MCArIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDE6IHgwID0geDEgLSB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogeDEgPSB4MCArIHosIHkwID0geTEgLSB6OyBicmVhaztcbiAgICAgICAgY2FzZSAzOiB4MCA9IHgxIC0geiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yb290ICYmIHRoaXMuX3Jvb3QubGVuZ3RoKSB0aGlzLl9yb290ID0gbm9kZTtcbiAgfVxuXG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/cover.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/data.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/data.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9kYXRhLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcz84ZjZkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YSA9IFtdO1xuICB0aGlzLnZpc2l0KGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBkbyBkYXRhLnB1c2gobm9kZS5kYXRhKTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gZGF0YTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/data.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/extent.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/extent.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9leHRlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzPzViMjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmNvdmVyKCtfWzBdWzBdLCArX1swXVsxXSkuY292ZXIoK19bMV1bMF0sICtfWzFdWzFdKVxuICAgICAgOiBpc05hTih0aGlzLl94MCkgPyB1bmRlZmluZWQgOiBbW3RoaXMuX3gwLCB0aGlzLl95MF0sIFt0aGlzLl94MSwgdGhpcy5feTFdXTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/extent.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/find.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/find.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ \"../../../node_modules/d3-quadtree/src/quad.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node[3], xm, ym, x2, y2),\n new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node[2], x1, ym, xm, y2),\n new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node[1], xm, y1, x2, ym),\n new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsZ0RBQUk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksZ0RBQUk7QUFDaEIsWUFBWSxnREFBSTtBQUNoQixZQUFZLGdEQUFJO0FBQ2hCLFlBQVksZ0RBQUk7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2ZpbmQuanM/NGY0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICB2YXIgZGF0YSxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEsXG4gICAgICB5MSxcbiAgICAgIHgyLFxuICAgICAgeTIsXG4gICAgICB4MyA9IHRoaXMuX3gxLFxuICAgICAgeTMgPSB0aGlzLl95MSxcbiAgICAgIHF1YWRzID0gW10sXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHEsXG4gICAgICBpO1xuXG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHgwLCB5MCwgeDMsIHkzKSk7XG4gIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gIGVsc2Uge1xuICAgIHgwID0geCAtIHJhZGl1cywgeTAgPSB5IC0gcmFkaXVzO1xuICAgIHgzID0geCArIHJhZGl1cywgeTMgPSB5ICsgcmFkaXVzO1xuICAgIHJhZGl1cyAqPSByYWRpdXM7XG4gIH1cblxuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG5cbiAgICAvLyBTdG9wIHNlYXJjaGluZyBpZiB0aGlzIHF1YWRyYW50IGNhbuKAmXQgY29udGFpbiBhIGNsb3NlciBub2RlLlxuICAgIGlmICghKG5vZGUgPSBxLm5vZGUpXG4gICAgICAgIHx8ICh4MSA9IHEueDApID4geDNcbiAgICAgICAgfHwgKHkxID0gcS55MCkgPiB5M1xuICAgICAgICB8fCAoeDIgPSBxLngxKSA8IHgwXG4gICAgICAgIHx8ICh5MiA9IHEueTEpIDwgeTApIGNvbnRpbnVlO1xuXG4gICAgLy8gQmlzZWN0IHRoZSBjdXJyZW50IHF1YWRyYW50LlxuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgxICsgeDIpIC8gMixcbiAgICAgICAgICB5bSA9ICh5MSArIHkyKSAvIDI7XG5cbiAgICAgIHF1YWRzLnB1c2goXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbM10sIHhtLCB5bSwgeDIsIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsyXSwgeDEsIHltLCB4bSwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzFdLCB4bSwgeTEsIHgyLCB5bSksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMF0sIHgxLCB5MSwgeG0sIHltKVxuICAgICAgKTtcblxuICAgICAgLy8gVmlzaXQgdGhlIGNsb3Nlc3QgcXVhZHJhbnQgZmlyc3QuXG4gICAgICBpZiAoaSA9ICh5ID49IHltKSA8PCAxIHwgKHggPj0geG0pKSB7XG4gICAgICAgIHEgPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV0gPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXSA9IHE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmlzaXQgdGhpcyBwb2ludC4gKFZpc2l0aW5nIGNvaW5jaWRlbnQgcG9pbnRzIGlzbuKAmXQgbmVjZXNzYXJ5ISlcbiAgICBlbHNlIHtcbiAgICAgIHZhciBkeCA9IHggLSArdGhpcy5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZHkgPSB5IC0gK3RoaXMuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICBpZiAoZDIgPCByYWRpdXMpIHtcbiAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQocmFkaXVzID0gZDIpO1xuICAgICAgICB4MCA9IHggLSBkLCB5MCA9IHkgLSBkO1xuICAgICAgICB4MyA9IHggKyBkLCB5MyA9IHkgKyBkO1xuICAgICAgICBkYXRhID0gbm9kZS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/find.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/index.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"quadtree\": () => (/* reexport safe */ _quadtree_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _quadtree_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quadtree.js */ \"../../../node_modules/d3-quadtree/src/quadtree.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2luZGV4LmpzP2Q2NmEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIHF1YWR0cmVlfSBmcm9tIFwiLi9xdWFkdHJlZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/quad.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/quad.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzPzQxYzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5ub2RlID0gbm9kZTtcbiAgdGhpcy54MCA9IHgwO1xuICB0aGlzLnkwID0geTA7XG4gIHRoaXMueDEgPSB4MTtcbiAgdGhpcy55MSA9IHkxO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/quad.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/quadtree.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/quadtree.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ quadtree)\n/* harmony export */ });\n/* harmony import */ var _add_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add.js */ \"../../../node_modules/d3-quadtree/src/add.js\");\n/* harmony import */ var _cover_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cover.js */ \"../../../node_modules/d3-quadtree/src/cover.js\");\n/* harmony import */ var _data_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./data.js */ \"../../../node_modules/d3-quadtree/src/data.js\");\n/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./extent.js */ \"../../../node_modules/d3-quadtree/src/extent.js\");\n/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./find.js */ \"../../../node_modules/d3-quadtree/src/find.js\");\n/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./remove.js */ \"../../../node_modules/d3-quadtree/src/remove.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./root.js */ \"../../../node_modules/d3-quadtree/src/root.js\");\n/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./size.js */ \"../../../node_modules/d3-quadtree/src/size.js\");\n/* harmony import */ var _visit_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./visit.js */ \"../../../node_modules/d3-quadtree/src/visit.js\");\n/* harmony import */ var _visitAfter_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./visitAfter.js */ \"../../../node_modules/d3-quadtree/src/visitAfter.js\");\n/* harmony import */ var _x_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./x.js */ \"../../../node_modules/d3-quadtree/src/x.js\");\n/* harmony import */ var _y_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./y.js */ \"../../../node_modules/d3-quadtree/src/y.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? _x_js__WEBPACK_IMPORTED_MODULE_0__.defaultX : x, y == null ? _y_js__WEBPACK_IMPORTED_MODULE_1__.defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = _add_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\ntreeProto.addAll = _add_js__WEBPACK_IMPORTED_MODULE_2__.addAll;\ntreeProto.cover = _cover_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\ntreeProto.data = _data_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\ntreeProto.extent = _extent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\ntreeProto.find = _find_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\ntreeProto.remove = _remove_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\ntreeProto.removeAll = _remove_js__WEBPACK_IMPORTED_MODULE_7__.removeAll;\ntreeProto.root = _root_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\ntreeProto.size = _size_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\ntreeProto.visit = _visit_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\ntreeProto.visitAfter = _visitAfter_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\ntreeProto.x = _x_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\ntreeProto.y = _y_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkdHJlZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQXlEO0FBQ3JCO0FBQ0Y7QUFDSTtBQUNKO0FBQ21DO0FBQ25DO0FBQ0E7QUFDRTtBQUNVO0FBQ047QUFDQTs7QUFFekI7QUFDZixzQ0FBc0MsMkNBQVEsa0JBQWtCLDJDQUFRO0FBQ3hFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxnQkFBZ0I7QUFDOUIsK0NBQStDO0FBQy9DO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxZQUFZLGdEQUFnRDtBQUM1RDtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0Esc0NBQXNDLHFEQUFxRDtBQUMzRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdCQUFnQiwrQ0FBUTtBQUN4QixtQkFBbUIsMkNBQVc7QUFDOUIsa0JBQWtCLGlEQUFVO0FBQzVCLGlCQUFpQixnREFBUztBQUMxQixtQkFBbUIsa0RBQVc7QUFDOUIsaUJBQWlCLGdEQUFTO0FBQzFCLG1CQUFtQixrREFBVztBQUM5QixzQkFBc0IsaURBQWM7QUFDcEMsaUJBQWlCLGdEQUFTO0FBQzFCLGlCQUFpQixnREFBUztBQUMxQixrQkFBa0Isa0RBQVU7QUFDNUIsdUJBQXVCLHVEQUFlO0FBQ3RDLGNBQWMsNkNBQU07QUFDcEIsY0FBYyw2Q0FBTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWR0cmVlLmpzPzQxZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRyZWVfYWRkLCB7YWRkQWxsIGFzIHRyZWVfYWRkQWxsfSBmcm9tIFwiLi9hZGQuanNcIjtcbmltcG9ydCB0cmVlX2NvdmVyIGZyb20gXCIuL2NvdmVyLmpzXCI7XG5pbXBvcnQgdHJlZV9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCB0cmVlX2V4dGVudCBmcm9tIFwiLi9leHRlbnQuanNcIjtcbmltcG9ydCB0cmVlX2ZpbmQgZnJvbSBcIi4vZmluZC5qc1wiO1xuaW1wb3J0IHRyZWVfcmVtb3ZlLCB7cmVtb3ZlQWxsIGFzIHRyZWVfcmVtb3ZlQWxsfSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmVlX3Jvb3QgZnJvbSBcIi4vcm9vdC5qc1wiO1xuaW1wb3J0IHRyZWVfc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgdHJlZV92aXNpdCBmcm9tIFwiLi92aXNpdC5qc1wiO1xuaW1wb3J0IHRyZWVfdmlzaXRBZnRlciBmcm9tIFwiLi92aXNpdEFmdGVyLmpzXCI7XG5pbXBvcnQgdHJlZV94LCB7ZGVmYXVsdFh9IGZyb20gXCIuL3guanNcIjtcbmltcG9ydCB0cmVlX3ksIHtkZWZhdWx0WX0gZnJvbSBcIi4veS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkdHJlZShub2RlcywgeCwgeSkge1xuICB2YXIgdHJlZSA9IG5ldyBRdWFkdHJlZSh4ID09IG51bGwgPyBkZWZhdWx0WCA6IHgsIHkgPT0gbnVsbCA/IGRlZmF1bHRZIDogeSwgTmFOLCBOYU4sIE5hTiwgTmFOKTtcbiAgcmV0dXJuIG5vZGVzID09IG51bGwgPyB0cmVlIDogdHJlZS5hZGRBbGwobm9kZXMpO1xufVxuXG5mdW5jdGlvbiBRdWFkdHJlZSh4LCB5LCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLl94ID0geDtcbiAgdGhpcy5feSA9IHk7XG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHRoaXMuX3Jvb3QgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxlYWZfY29weShsZWFmKSB7XG4gIHZhciBjb3B5ID0ge2RhdGE6IGxlYWYuZGF0YX0sIG5leHQgPSBjb3B5O1xuICB3aGlsZSAobGVhZiA9IGxlYWYubmV4dCkgbmV4dCA9IG5leHQubmV4dCA9IHtkYXRhOiBsZWFmLmRhdGF9O1xuICByZXR1cm4gY29weTtcbn1cblxudmFyIHRyZWVQcm90byA9IHF1YWR0cmVlLnByb3RvdHlwZSA9IFF1YWR0cmVlLnByb3RvdHlwZTtcblxudHJlZVByb3RvLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvcHkgPSBuZXcgUXVhZHRyZWUodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBub2RlcyxcbiAgICAgIGNoaWxkO1xuXG4gIGlmICghbm9kZSkgcmV0dXJuIGNvcHk7XG5cbiAgaWYgKCFub2RlLmxlbmd0aCkgcmV0dXJuIGNvcHkuX3Jvb3QgPSBsZWFmX2NvcHkobm9kZSksIGNvcHk7XG5cbiAgbm9kZXMgPSBbe3NvdXJjZTogbm9kZSwgdGFyZ2V0OiBjb3B5Ll9yb290ID0gbmV3IEFycmF5KDQpfV07XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKGNoaWxkID0gbm9kZS5zb3VyY2VbaV0pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxlbmd0aCkgbm9kZXMucHVzaCh7c291cmNlOiBjaGlsZCwgdGFyZ2V0OiBub2RlLnRhcmdldFtpXSA9IG5ldyBBcnJheSg0KX0pO1xuICAgICAgICBlbHNlIG5vZGUudGFyZ2V0W2ldID0gbGVhZl9jb3B5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn07XG5cbnRyZWVQcm90by5hZGQgPSB0cmVlX2FkZDtcbnRyZWVQcm90by5hZGRBbGwgPSB0cmVlX2FkZEFsbDtcbnRyZWVQcm90by5jb3ZlciA9IHRyZWVfY292ZXI7XG50cmVlUHJvdG8uZGF0YSA9IHRyZWVfZGF0YTtcbnRyZWVQcm90by5leHRlbnQgPSB0cmVlX2V4dGVudDtcbnRyZWVQcm90by5maW5kID0gdHJlZV9maW5kO1xudHJlZVByb3RvLnJlbW92ZSA9IHRyZWVfcmVtb3ZlO1xudHJlZVByb3RvLnJlbW92ZUFsbCA9IHRyZWVfcmVtb3ZlQWxsO1xudHJlZVByb3RvLnJvb3QgPSB0cmVlX3Jvb3Q7XG50cmVlUHJvdG8uc2l6ZSA9IHRyZWVfc2l6ZTtcbnRyZWVQcm90by52aXNpdCA9IHRyZWVfdmlzaXQ7XG50cmVlUHJvdG8udmlzaXRBZnRlciA9IHRyZWVfdmlzaXRBZnRlcjtcbnRyZWVQcm90by54ID0gdHJlZV94O1xudHJlZVByb3RvLnkgPSB0cmVlX3k7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/quadtree.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/remove.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/remove.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"removeAll\": () => (/* binding */ removeAll)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nfunction removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yZW1vdmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QiwyRkFBMkY7O0FBRTNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1AsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3JlbW92ZS5qcz80MzA2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgaWYgKGlzTmFOKHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQpKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgcGFyZW50LFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICByZXRhaW5lcixcbiAgICAgIHByZXZpb3VzLFxuICAgICAgbmV4dCxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTEsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHhtLFxuICAgICAgeW0sXG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbSxcbiAgICAgIGksXG4gICAgICBqO1xuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGVtcHR5LCBpbml0aWFsaXplIHRoZSByb290IGFzIGEgbGVhZi5cbiAgaWYgKCFub2RlKSByZXR1cm4gdGhpcztcblxuICAvLyBGaW5kIHRoZSBsZWFmIG5vZGUgZm9yIHRoZSBwb2ludC5cbiAgLy8gV2hpbGUgZGVzY2VuZGluZywgYWxzbyByZXRhaW4gdGhlIGRlZXBlc3QgcGFyZW50IHdpdGggYSBub24tcmVtb3ZlZCBzaWJsaW5nLlxuICBpZiAobm9kZS5sZW5ndGgpIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gICAgaWYgKCEocGFyZW50ID0gbm9kZSwgbm9kZSA9IG5vZGVbaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgYnJlYWs7XG4gICAgaWYgKHBhcmVudFsoaSArIDEpICYgM10gfHwgcGFyZW50WyhpICsgMikgJiAzXSB8fCBwYXJlbnRbKGkgKyAzKSAmIDNdKSByZXRhaW5lciA9IHBhcmVudCwgaiA9IGk7XG4gIH1cblxuICAvLyBGaW5kIHRoZSBwb2ludCB0byByZW1vdmUuXG4gIHdoaWxlIChub2RlLmRhdGEgIT09IGQpIGlmICghKHByZXZpb3VzID0gbm9kZSwgbm9kZSA9IG5vZGUubmV4dCkpIHJldHVybiB0aGlzO1xuICBpZiAobmV4dCA9IG5vZGUubmV4dCkgZGVsZXRlIG5vZGUubmV4dDtcblxuICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29pbmNpZGVudCBwb2ludHMsIHJlbW92ZSBqdXN0IHRoZSBwb2ludC5cbiAgaWYgKHByZXZpb3VzKSByZXR1cm4gKG5leHQgPyBwcmV2aW91cy5uZXh0ID0gbmV4dCA6IGRlbGV0ZSBwcmV2aW91cy5uZXh0KSwgdGhpcztcblxuICAvLyBJZiB0aGlzIGlzIHRoZSByb290IHBvaW50LCByZW1vdmUgaXQuXG4gIGlmICghcGFyZW50KSByZXR1cm4gdGhpcy5fcm9vdCA9IG5leHQsIHRoaXM7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVhZi5cbiAgbmV4dCA/IHBhcmVudFtpXSA9IG5leHQgOiBkZWxldGUgcGFyZW50W2ldO1xuXG4gIC8vIElmIHRoZSBwYXJlbnQgbm93IGNvbnRhaW5zIGV4YWN0bHkgb25lIGxlYWYsIGNvbGxhcHNlIHN1cGVyZmx1b3VzIHBhcmVudHMuXG4gIGlmICgobm9kZSA9IHBhcmVudFswXSB8fCBwYXJlbnRbMV0gfHwgcGFyZW50WzJdIHx8IHBhcmVudFszXSlcbiAgICAgICYmIG5vZGUgPT09IChwYXJlbnRbM10gfHwgcGFyZW50WzJdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMF0pXG4gICAgICAmJiAhbm9kZS5sZW5ndGgpIHtcbiAgICBpZiAocmV0YWluZXIpIHJldGFpbmVyW2pdID0gbm9kZTtcbiAgICBlbHNlIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGwoZGF0YSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEubGVuZ3RoOyBpIDwgbjsgKytpKSB0aGlzLnJlbW92ZShkYXRhW2ldKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/remove.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/root.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/root.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this._root;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcm9vdC5qcz85ZjQyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/root.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/size.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/size.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvc2l6ZS5qcz83MjEzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/size.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/visit.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/visit.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ \"../../../node_modules/d3-quadtree/src/quad.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE2Qjs7QUFFN0IsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSwyQkFBMkIsZ0RBQUk7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdEQUFJO0FBQzlDLDBDQUEwQyxnREFBSTtBQUM5QywwQ0FBMEMsZ0RBQUk7QUFDOUMsMENBQTBDLGdEQUFJO0FBQzlDO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXQuanM/ZjNhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBxdWFkcyA9IFtdLCBxLCBub2RlID0gdGhpcy5fcm9vdCwgY2hpbGQsIHgwLCB5MCwgeDEsIHkxO1xuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgaWYgKCFjYWxsYmFjayhub2RlID0gcS5ub2RlLCB4MCA9IHEueDAsIHkwID0gcS55MCwgeDEgPSBxLngxLCB5MSA9IHEueTEpICYmIG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsyXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHltLCB4bSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMV0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5MCwgeDEsIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/visit.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/visitAfter.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/visitAfter.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ \"../../../node_modules/d3-quadtree/src/quad.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdEFmdGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLGlDQUFpQyxnREFBSTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnREFBSTtBQUM5QywwQ0FBMEMsZ0RBQUk7QUFDOUMsMENBQTBDLGdEQUFJO0FBQzlDLDBDQUEwQyxnREFBSTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcz83MzIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIG5leHQgPSBbXSwgcTtcbiAgaWYgKHRoaXMuX3Jvb3QpIHF1YWRzLnB1c2gobmV3IFF1YWQodGhpcy5fcm9vdCwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpKTtcbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuICAgIHZhciBub2RlID0gcS5ub2RlO1xuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIGNoaWxkLCB4MCA9IHEueDAsIHkwID0gcS55MCwgeDEgPSBxLngxLCB5MSA9IHEueTEsIHhtID0gKHgwICsgeDEpIC8gMiwgeW0gPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVswXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHkwLCB4bSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMV0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5MCwgeDEsIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVszXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHltLCB4MSwgeTEpKTtcbiAgICB9XG4gICAgbmV4dC5wdXNoKHEpO1xuICB9XG4gIHdoaWxlIChxID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKHEubm9kZSwgcS54MCwgcS55MCwgcS54MSwgcS55MSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/visitAfter.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/x.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/x.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"defaultX\": () => (/* binding */ defaultX)\n/* harmony export */ });\nfunction defaultX(d) {\n return d[0];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy94LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy94LmpzPzYyMTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feCA9IF8sIHRoaXMpIDogdGhpcy5feDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/x.js\n"); /***/ }), /***/ "../../../node_modules/d3-quadtree/src/y.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-quadtree/src/y.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"defaultY\": () => (/* binding */ defaultY)\n/* harmony export */ });\nfunction defaultY(d) {\n return d[1];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy95LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy95LmpzPzFhMDAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feSA9IF8sIHRoaXMpIDogdGhpcy5feTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-quadtree/src/y.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/bates.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-random/src/bates.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _irwinHall_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./irwinHall.js */ \"../../../node_modules/d3-random/src/irwinHall.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomBates(source) {\n var I = _irwinHall_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source);\n\n function randomBates(n) {\n // use limiting distribution at n === 0\n if ((n = +n) === 0) return source;\n var randomIrwinHall = I(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmF0ZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStDO0FBQ1I7O0FBRXZDLGlFQUFlO0FBQ2YsVUFBVSw0REFBZ0I7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLEVBQUUseURBQWEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2JhdGVzLmpzPzAxN2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuaW1wb3J0IGlyd2luSGFsbCBmcm9tIFwiLi9pcndpbkhhbGwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUJhdGVzKHNvdXJjZSkge1xuICB2YXIgSSA9IGlyd2luSGFsbC5zb3VyY2Uoc291cmNlKTtcblxuICBmdW5jdGlvbiByYW5kb21CYXRlcyhuKSB7XG4gICAgLy8gdXNlIGxpbWl0aW5nIGRpc3RyaWJ1dGlvbiBhdCBuID09PSAwXG4gICAgaWYgKChuID0gK24pID09PSAwKSByZXR1cm4gc291cmNlO1xuICAgIHZhciByYW5kb21JcndpbkhhbGwgPSBJKG4pO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByYW5kb21JcndpbkhhbGwoKSAvIG47XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUJhdGVzLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUJhdGVzO1xuXG4gIHJldHVybiByYW5kb21CYXRlcztcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/bates.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/bernoulli.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-random/src/bernoulli.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomBernoulli(source) {\n function randomBernoulli(p) {\n if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n return function() {\n return Math.floor(source() + p);\n };\n }\n\n randomBernoulli.source = sourceRandomBernoulli;\n\n return randomBernoulli;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmVybm91bGxpLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmVybm91bGxpLmpzPzNkOTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tQmVybm91bGxpKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21CZXJub3VsbGkocCkge1xuICAgIGlmICgocCA9ICtwKSA8IDAgfHwgcCA+IDEpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiaW52YWxpZCBwXCIpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNvdXJjZSgpICsgcCk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUJlcm5vdWxsaS5zb3VyY2UgPSBzb3VyY2VSYW5kb21CZXJub3VsbGk7XG5cbiAgcmV0dXJuIHJhbmRvbUJlcm5vdWxsaTtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/bernoulli.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/beta.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-random/src/beta.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _gamma_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gamma.js */ \"../../../node_modules/d3-random/src/gamma.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomBeta(source) {\n var G = _gamma_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source);\n\n function randomBeta(alpha, beta) {\n var X = G(alpha),\n Y = G(beta);\n return function() {\n var x = X();\n return x === 0 ? 0 : x / (x + Y());\n };\n }\n\n randomBeta.source = sourceRandomBeta;\n\n return randomBeta;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmV0YS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0M7QUFDaEI7O0FBRS9CLGlFQUFlO0FBQ2YsVUFBVSx3REFBWTs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmV0YS5qcz8xZjhkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2UuanNcIjtcbmltcG9ydCBnYW1tYSBmcm9tIFwiLi9nYW1tYS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tQmV0YShzb3VyY2UpIHtcbiAgdmFyIEcgPSBnYW1tYS5zb3VyY2Uoc291cmNlKTtcblxuICBmdW5jdGlvbiByYW5kb21CZXRhKGFscGhhLCBiZXRhKSB7XG4gICAgdmFyIFggPSBHKGFscGhhKSxcbiAgICAgICAgWSA9IEcoYmV0YSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHggPSBYKCk7XG4gICAgICByZXR1cm4geCA9PT0gMCA/IDAgOiB4IC8gKHggKyBZKCkpO1xuICAgIH07XG4gIH1cblxuICByYW5kb21CZXRhLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUJldGE7XG5cbiAgcmV0dXJuIHJhbmRvbUJldGE7XG59KShkZWZhdWx0U291cmNlKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/beta.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/binomial.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-random/src/binomial.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _beta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./beta.js */ \"../../../node_modules/d3-random/src/beta.js\");\n/* harmony import */ var _geometric_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./geometric.js */ \"../../../node_modules/d3-random/src/geometric.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomBinomial(source) {\n var G = _geometric_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source),\n B = _beta_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].source(source);\n\n function randomBinomial(n, p) {\n n = +n;\n if ((p = +p) >= 1) return () => n;\n if (p <= 0) return () => 0;\n return function() {\n var acc = 0, nn = n, pp = p;\n while (nn * pp > 16 && nn * (1 - pp) > 16) {\n var i = Math.floor((nn + 1) * pp),\n y = B(i, nn - i + 1)();\n if (y <= pp) {\n acc += i;\n nn -= i;\n pp = (pp - y) / (1 - y);\n } else {\n nn = i - 1;\n pp /= y;\n }\n }\n var sign = pp < 0.5,\n pFinal = sign ? pp : 1 - pp,\n g = G(pFinal);\n for (var s = g(), k = 0; s <= nn; ++k) s += g();\n return acc + (sign ? k : nn - k);\n };\n }\n\n randomBinomial.source = sourceRandomBinomial;\n\n return randomBinomial;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmlub21pYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUErQztBQUNsQjtBQUNVOztBQUV2QyxpRUFBZTtBQUNmLFVBQVUsNERBQWdCO0FBQzFCLFVBQVUsdURBQVc7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLHlEQUFhLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9iaW5vbWlhbC5qcz9hOTQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2UuanNcIjtcbmltcG9ydCBiZXRhIGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCBnZW9tZXRyaWMgZnJvbSBcIi4vZ2VvbWV0cmljLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21CaW5vbWlhbChzb3VyY2UpIHtcbiAgdmFyIEcgPSBnZW9tZXRyaWMuc291cmNlKHNvdXJjZSksXG4gICAgICBCID0gYmV0YS5zb3VyY2Uoc291cmNlKTtcblxuICBmdW5jdGlvbiByYW5kb21CaW5vbWlhbChuLCBwKSB7XG4gICAgbiA9ICtuO1xuICAgIGlmICgocCA9ICtwKSA+PSAxKSByZXR1cm4gKCkgPT4gbjtcbiAgICBpZiAocCA8PSAwKSByZXR1cm4gKCkgPT4gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYWNjID0gMCwgbm4gPSBuLCBwcCA9IHA7XG4gICAgICB3aGlsZSAobm4gKiBwcCA+IDE2ICYmIG5uICogKDEgLSBwcCkgPiAxNikge1xuICAgICAgICB2YXIgaSA9IE1hdGguZmxvb3IoKG5uICsgMSkgKiBwcCksXG4gICAgICAgICAgICB5ID0gQihpLCBubiAtIGkgKyAxKSgpO1xuICAgICAgICBpZiAoeSA8PSBwcCkge1xuICAgICAgICAgIGFjYyArPSBpO1xuICAgICAgICAgIG5uIC09IGk7XG4gICAgICAgICAgcHAgPSAocHAgLSB5KSAvICgxIC0geSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm4gPSBpIC0gMTtcbiAgICAgICAgICBwcCAvPSB5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgc2lnbiA9IHBwIDwgMC41LFxuICAgICAgICAgIHBGaW5hbCA9IHNpZ24gPyBwcCA6IDEgLSBwcCxcbiAgICAgICAgICBnID0gRyhwRmluYWwpO1xuICAgICAgZm9yICh2YXIgcyA9IGcoKSwgayA9IDA7IHMgPD0gbm47ICsraykgcyArPSBnKCk7XG4gICAgICByZXR1cm4gYWNjICsgKHNpZ24gPyBrIDogbm4gLSBrKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tQmlub21pYWwuc291cmNlID0gc291cmNlUmFuZG9tQmlub21pYWw7XG5cbiAgcmV0dXJuIHJhbmRvbUJpbm9taWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/binomial.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/cauchy.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-random/src/cauchy.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomCauchy(source) {\n function randomCauchy(a, b) {\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n return a + b * Math.tan(Math.PI * source());\n };\n }\n\n randomCauchy.source = sourceRandomCauchy;\n\n return randomCauchy;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvY2F1Y2h5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLHlEQUFhLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9jYXVjaHkuanM/YjBhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21DYXVjaHkoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUNhdWNoeShhLCBiKSB7XG4gICAgYSA9IGEgPT0gbnVsbCA/IDAgOiArYTtcbiAgICBiID0gYiA9PSBudWxsID8gMSA6ICtiO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBhICsgYiAqIE1hdGgudGFuKE1hdGguUEkgKiBzb3VyY2UoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUNhdWNoeS5zb3VyY2UgPSBzb3VyY2VSYW5kb21DYXVjaHk7XG5cbiAgcmV0dXJuIHJhbmRvbUNhdWNoeTtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/cauchy.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/defaultSource.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-random/src/defaultSource.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Math.random);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanM/NjdiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBNYXRoLnJhbmRvbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/defaultSource.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/exponential.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-random/src/exponential.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log1p(-source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0M7O0FBRS9DLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanM/Y2IxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21FeHBvbmVudGlhbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tRXhwb25lbnRpYWwobGFtYmRhKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIC1NYXRoLmxvZzFwKC1zb3VyY2UoKSkgLyBsYW1iZGE7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUV4cG9uZW50aWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUV4cG9uZW50aWFsO1xuXG4gIHJldHVybiByYW5kb21FeHBvbmVudGlhbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/exponential.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/gamma.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-random/src/gamma.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _normal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./normal.js */ \"../../../node_modules/d3-random/src/normal.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomGamma(source) {\n var randomNormal = _normal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source)();\n\n function randomGamma(k, theta) {\n if ((k = +k) < 0) throw new RangeError(\"invalid k\");\n // degenerate distribution if k === 0\n if (k === 0) return () => 0;\n theta = theta == null ? 1 : +theta;\n // exponential distribution if k === 1\n if (k === 1) return () => -Math.log1p(-source()) * theta;\n\n var d = (k < 1 ? k + 1 : k) - 1 / 3,\n c = 1 / (3 * Math.sqrt(d)),\n multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1;\n return function() {\n do {\n do {\n var x = randomNormal(),\n v = 1 + c * x;\n } while (v <= 0);\n v *= v * v;\n var u = 1 - source();\n } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v)));\n return d * v * multiplier() * theta;\n };\n }\n\n randomGamma.source = sourceRandomGamma;\n\n return randomGamma;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZ2FtbWEuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStDO0FBQ2Q7O0FBRWpDLGlFQUFlO0FBQ2YscUJBQXFCLHlEQUFhOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLHlEQUFhLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9nYW1tYS5qcz83YjhlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2UuanNcIjtcbmltcG9ydCBub3JtYWwgZnJvbSBcIi4vbm9ybWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21HYW1tYShzb3VyY2UpIHtcbiAgdmFyIHJhbmRvbU5vcm1hbCA9IG5vcm1hbC5zb3VyY2Uoc291cmNlKSgpO1xuXG4gIGZ1bmN0aW9uIHJhbmRvbUdhbW1hKGssIHRoZXRhKSB7XG4gICAgaWYgKChrID0gK2spIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIGtcIik7XG4gICAgLy8gZGVnZW5lcmF0ZSBkaXN0cmlidXRpb24gaWYgayA9PT0gMFxuICAgIGlmIChrID09PSAwKSByZXR1cm4gKCkgPT4gMDtcbiAgICB0aGV0YSA9IHRoZXRhID09IG51bGwgPyAxIDogK3RoZXRhO1xuICAgIC8vIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbiBpZiBrID09PSAxXG4gICAgaWYgKGsgPT09IDEpIHJldHVybiAoKSA9PiAtTWF0aC5sb2cxcCgtc291cmNlKCkpICogdGhldGE7XG5cbiAgICB2YXIgZCA9IChrIDwgMSA/IGsgKyAxIDogaykgLSAxIC8gMyxcbiAgICAgICAgYyA9IDEgLyAoMyAqIE1hdGguc3FydChkKSksXG4gICAgICAgIG11bHRpcGxpZXIgPSBrIDwgMSA/ICgpID0+IE1hdGgucG93KHNvdXJjZSgpLCAxIC8gaykgOiAoKSA9PiAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB4ID0gcmFuZG9tTm9ybWFsKCksXG4gICAgICAgICAgICAgIHYgPSAxICsgYyAqIHg7XG4gICAgICAgIH0gd2hpbGUgKHYgPD0gMCk7XG4gICAgICAgIHYgKj0gdiAqIHY7XG4gICAgICAgIHZhciB1ID0gMSAtIHNvdXJjZSgpO1xuICAgICAgfSB3aGlsZSAodSA+PSAxIC0gMC4wMzMxICogeCAqIHggKiB4ICogeCAmJiBNYXRoLmxvZyh1KSA+PSAwLjUgKiB4ICogeCArIGQgKiAoMSAtIHYgKyBNYXRoLmxvZyh2KSkpO1xuICAgICAgcmV0dXJuIGQgKiB2ICogbXVsdGlwbGllcigpICogdGhldGE7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUdhbW1hLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUdhbW1hO1xuXG4gIHJldHVybiByYW5kb21HYW1tYTtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/gamma.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/geometric.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-random/src/geometric.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomGeometric(source) {\n function randomGeometric(p) {\n if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n if (p === 0) return () => Infinity;\n if (p === 1) return () => 1;\n p = Math.log1p(-p);\n return function() {\n return 1 + Math.floor(Math.log1p(-source()) / p);\n };\n }\n\n randomGeometric.source = sourceRandomGeometric;\n\n return randomGeometric;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZ2VvbWV0cmljLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZ2VvbWV0cmljLmpzPzE2NjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tR2VvbWV0cmljKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21HZW9tZXRyaWMocCkge1xuICAgIGlmICgocCA9ICtwKSA8IDAgfHwgcCA+IDEpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiaW52YWxpZCBwXCIpO1xuICAgIGlmIChwID09PSAwKSByZXR1cm4gKCkgPT4gSW5maW5pdHk7XG4gICAgaWYgKHAgPT09IDEpIHJldHVybiAoKSA9PiAxO1xuICAgIHAgPSBNYXRoLmxvZzFwKC1wKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gMSArIE1hdGguZmxvb3IoTWF0aC5sb2cxcCgtc291cmNlKCkpIC8gcCk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUdlb21ldHJpYy5zb3VyY2UgPSBzb3VyY2VSYW5kb21HZW9tZXRyaWM7XG5cbiAgcmV0dXJuIHJhbmRvbUdlb21ldHJpYztcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/geometric.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/index.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-random/src/index.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"randomBates\": () => (/* reexport safe */ _bates_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"randomBernoulli\": () => (/* reexport safe */ _bernoulli_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"randomBeta\": () => (/* reexport safe */ _beta_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"randomBinomial\": () => (/* reexport safe */ _binomial_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"randomCauchy\": () => (/* reexport safe */ _cauchy_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"randomExponential\": () => (/* reexport safe */ _exponential_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"randomGamma\": () => (/* reexport safe */ _gamma_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"randomGeometric\": () => (/* reexport safe */ _geometric_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"randomInt\": () => (/* reexport safe */ _int_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"randomIrwinHall\": () => (/* reexport safe */ _irwinHall_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"randomLcg\": () => (/* reexport safe */ _lcg_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"randomLogNormal\": () => (/* reexport safe */ _logNormal_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"randomLogistic\": () => (/* reexport safe */ _logistic_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"randomNormal\": () => (/* reexport safe */ _normal_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"randomPareto\": () => (/* reexport safe */ _pareto_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"randomPoisson\": () => (/* reexport safe */ _poisson_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"randomUniform\": () => (/* reexport safe */ _uniform_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"randomWeibull\": () => (/* reexport safe */ _weibull_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _uniform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./uniform.js */ \"../../../node_modules/d3-random/src/uniform.js\");\n/* harmony import */ var _int_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./int.js */ \"../../../node_modules/d3-random/src/int.js\");\n/* harmony import */ var _normal_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./normal.js */ \"../../../node_modules/d3-random/src/normal.js\");\n/* harmony import */ var _logNormal_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logNormal.js */ \"../../../node_modules/d3-random/src/logNormal.js\");\n/* harmony import */ var _bates_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./bates.js */ \"../../../node_modules/d3-random/src/bates.js\");\n/* harmony import */ var _irwinHall_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./irwinHall.js */ \"../../../node_modules/d3-random/src/irwinHall.js\");\n/* harmony import */ var _exponential_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./exponential.js */ \"../../../node_modules/d3-random/src/exponential.js\");\n/* harmony import */ var _pareto_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pareto.js */ \"../../../node_modules/d3-random/src/pareto.js\");\n/* harmony import */ var _bernoulli_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bernoulli.js */ \"../../../node_modules/d3-random/src/bernoulli.js\");\n/* harmony import */ var _geometric_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./geometric.js */ \"../../../node_modules/d3-random/src/geometric.js\");\n/* harmony import */ var _binomial_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./binomial.js */ \"../../../node_modules/d3-random/src/binomial.js\");\n/* harmony import */ var _gamma_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./gamma.js */ \"../../../node_modules/d3-random/src/gamma.js\");\n/* harmony import */ var _beta_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./beta.js */ \"../../../node_modules/d3-random/src/beta.js\");\n/* harmony import */ var _weibull_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./weibull.js */ \"../../../node_modules/d3-random/src/weibull.js\");\n/* harmony import */ var _cauchy_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./cauchy.js */ \"../../../node_modules/d3-random/src/cauchy.js\");\n/* harmony import */ var _logistic_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./logistic.js */ \"../../../node_modules/d3-random/src/logistic.js\");\n/* harmony import */ var _poisson_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./poisson.js */ \"../../../node_modules/d3-random/src/poisson.js\");\n/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./lcg.js */ \"../../../node_modules/d3-random/src/lcg.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXNEO0FBQ1I7QUFDTTtBQUNNO0FBQ1I7QUFDUTtBQUNJO0FBQ1Y7QUFDTTtBQUNBO0FBQ0Y7QUFDTjtBQUNGO0FBQ007QUFDRjtBQUNJO0FBQ0Y7QUFDUiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9pbmRleC5qcz8zY2Q1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21Vbmlmb3JtfSBmcm9tIFwiLi91bmlmb3JtLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tSW50fSBmcm9tIFwiLi9pbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21Ob3JtYWx9IGZyb20gXCIuL25vcm1hbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUxvZ05vcm1hbH0gZnJvbSBcIi4vbG9nTm9ybWFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tQmF0ZXN9IGZyb20gXCIuL2JhdGVzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tSXJ3aW5IYWxsfSBmcm9tIFwiLi9pcndpbkhhbGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21FeHBvbmVudGlhbH0gZnJvbSBcIi4vZXhwb25lbnRpYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21QYXJldG99IGZyb20gXCIuL3BhcmV0by5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUJlcm5vdWxsaX0gZnJvbSBcIi4vYmVybm91bGxpLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tR2VvbWV0cmljfSBmcm9tIFwiLi9nZW9tZXRyaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21CaW5vbWlhbH0gZnJvbSBcIi4vYmlub21pYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21HYW1tYX0gZnJvbSBcIi4vZ2FtbWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21CZXRhfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tV2VpYnVsbH0gZnJvbSBcIi4vd2VpYnVsbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUNhdWNoeX0gZnJvbSBcIi4vY2F1Y2h5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tTG9naXN0aWN9IGZyb20gXCIuL2xvZ2lzdGljLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tUG9pc3Nvbn0gZnJvbSBcIi4vcG9pc3Nvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUxjZ30gZnJvbSBcIi4vbGNnLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/int.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-random/src/int.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomInt(source) {\n function randomInt(min, max) {\n if (arguments.length < 2) max = min, min = 0;\n min = Math.floor(min);\n max = Math.floor(max) - min;\n return function() {\n return Math.floor(source() * max + min);\n };\n }\n\n randomInt.source = sourceRandomInt;\n\n return randomInt;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLEVBQUUseURBQWEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2ludC5qcz9kOTJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2UuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUludChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tSW50KG1pbiwgbWF4KSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSBtYXggPSBtaW4sIG1pbiA9IDA7XG4gICAgbWluID0gTWF0aC5mbG9vcihtaW4pO1xuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KSAtIG1pbjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihzb3VyY2UoKSAqIG1heCArIG1pbik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUludC5zb3VyY2UgPSBzb3VyY2VSYW5kb21JbnQ7XG5cbiAgcmV0dXJuIHJhbmRvbUludDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/int.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/irwinHall.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-random/src/irwinHall.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n if ((n = +n) <= 0) return () => 0;\n return function() {\n for (var sum = 0, i = n; i > 1; --i) sum += source();\n return sum + i * source();\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixPQUFPO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzPzlkZGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tSXJ3aW5IYWxsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21JcndpbkhhbGwobikge1xuICAgIGlmICgobiA9ICtuKSA8PSAwKSByZXR1cm4gKCkgPT4gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciBzdW0gPSAwLCBpID0gbjsgaSA+IDE7IC0taSkgc3VtICs9IHNvdXJjZSgpO1xuICAgICAgcmV0dXJuIHN1bSArIGkgKiBzb3VyY2UoKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tSXJ3aW5IYWxsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUlyd2luSGFsbDtcblxuICByZXR1cm4gcmFuZG9tSXJ3aW5IYWxsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/irwinHall.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/lcg.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-random/src/lcg.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lcg)\n/* harmony export */ });\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nfunction lcg(seed = Math.random()) {\n let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbGNnLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9sY2cuanM/MDI2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW5lYXJfY29uZ3J1ZW50aWFsX2dlbmVyYXRvciNQYXJhbWV0ZXJzX2luX2NvbW1vbl91c2VcbmNvbnN0IG11bCA9IDB4MTk2NjBEO1xuY29uc3QgaW5jID0gMHgzQzZFRjM1RjtcbmNvbnN0IGVwcyA9IDEgLyAweDEwMDAwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGNnKHNlZWQgPSBNYXRoLnJhbmRvbSgpKSB7XG4gIGxldCBzdGF0ZSA9ICgwIDw9IHNlZWQgJiYgc2VlZCA8IDEgPyBzZWVkIC8gZXBzIDogTWF0aC5hYnMoc2VlZCkpIHwgMDtcbiAgcmV0dXJuICgpID0+IChzdGF0ZSA9IG11bCAqIHN0YXRlICsgaW5jIHwgMCwgZXBzICogKHN0YXRlID4+PiAwKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/lcg.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/logNormal.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-random/src/logNormal.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _normal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./normal.js */ \"../../../node_modules/d3-random/src/normal.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomLogNormal(source) {\n var N = _normal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source);\n\n function randomLogNormal() {\n var randomNormal = N.apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9nTm9ybWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQztBQUNkOztBQUVqQyxpRUFBZTtBQUNmLFVBQVUseURBQWE7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9nTm9ybWFsLmpzPzNlOWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuaW1wb3J0IG5vcm1hbCBmcm9tIFwiLi9ub3JtYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUxvZ05vcm1hbChzb3VyY2UpIHtcbiAgdmFyIE4gPSBub3JtYWwuc291cmNlKHNvdXJjZSk7XG5cbiAgZnVuY3Rpb24gcmFuZG9tTG9nTm9ybWFsKCkge1xuICAgIHZhciByYW5kb21Ob3JtYWwgPSBOLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1hdGguZXhwKHJhbmRvbU5vcm1hbCgpKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTG9nTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUxvZ05vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTG9nTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/logNormal.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/logistic.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-random/src/logistic.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomLogistic(source) {\n function randomLogistic(a, b) {\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n var u = source();\n return a + b * Math.log(u / (1 - u));\n };\n }\n\n randomLogistic.source = sourceRandomLogistic;\n\n return randomLogistic;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9naXN0aWMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0M7O0FBRS9DLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9naXN0aWMuanM/MmEyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Mb2dpc3RpYyhzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTG9naXN0aWMoYSwgYikge1xuICAgIGEgPSBhID09IG51bGwgPyAwIDogK2E7XG4gICAgYiA9IGIgPT0gbnVsbCA/IDEgOiArYjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdSA9IHNvdXJjZSgpO1xuICAgICAgcmV0dXJuIGEgKyBiICogTWF0aC5sb2codSAvICgxIC0gdSkpO1xuICAgIH07XG4gIH1cblxuICByYW5kb21Mb2dpc3RpYy5zb3VyY2UgPSBzb3VyY2VSYW5kb21Mb2dpc3RpYztcblxuICByZXR1cm4gcmFuZG9tTG9naXN0aWM7XG59KShkZWZhdWx0U291cmNlKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/logistic.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/normal.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-random/src/normal.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbm9ybWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSx5REFBYSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbm9ybWFsLmpzPzQwMDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tTm9ybWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Ob3JtYWwobXUsIHNpZ21hKSB7XG4gICAgdmFyIHgsIHI7XG4gICAgbXUgPSBtdSA9PSBudWxsID8gMCA6ICttdTtcbiAgICBzaWdtYSA9IHNpZ21hID09IG51bGwgPyAxIDogK3NpZ21hO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB5O1xuXG4gICAgICAvLyBJZiBhdmFpbGFibGUsIHVzZSB0aGUgc2Vjb25kIHByZXZpb3VzbHktZ2VuZXJhdGVkIHVuaWZvcm0gcmFuZG9tLlxuICAgICAgaWYgKHggIT0gbnVsbCkgeSA9IHgsIHggPSBudWxsO1xuXG4gICAgICAvLyBPdGhlcndpc2UsIGdlbmVyYXRlIGEgbmV3IHggYW5kIHkuXG4gICAgICBlbHNlIGRvIHtcbiAgICAgICAgeCA9IHNvdXJjZSgpICogMiAtIDE7XG4gICAgICAgIHkgPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICByID0geCAqIHggKyB5ICogeTtcbiAgICAgIH0gd2hpbGUgKCFyIHx8IHIgPiAxKTtcblxuICAgICAgcmV0dXJuIG11ICsgc2lnbWEgKiB5ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbU5vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/normal.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/pareto.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-random/src/pareto.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomPareto(source) {\n function randomPareto(alpha) {\n if ((alpha = +alpha) < 0) throw new RangeError(\"invalid alpha\");\n alpha = 1 / -alpha;\n return function() {\n return Math.pow(1 - source(), alpha);\n };\n }\n\n randomPareto.source = sourceRandomPareto;\n\n return randomPareto;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvcGFyZXRvLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDOztBQUUvQyxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLHlEQUFhLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9wYXJldG8uanM/MzExMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21QYXJldG8oc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbVBhcmV0byhhbHBoYSkge1xuICAgIGlmICgoYWxwaGEgPSArYWxwaGEpIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbnZhbGlkIGFscGhhXCIpO1xuICAgIGFscGhhID0gMSAvIC1hbHBoYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coMSAtIHNvdXJjZSgpLCBhbHBoYSk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbVBhcmV0by5zb3VyY2UgPSBzb3VyY2VSYW5kb21QYXJldG87XG5cbiAgcmV0dXJuIHJhbmRvbVBhcmV0bztcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/pareto.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/poisson.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-random/src/poisson.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n/* harmony import */ var _binomial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./binomial.js */ \"../../../node_modules/d3-random/src/binomial.js\");\n/* harmony import */ var _gamma_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gamma.js */ \"../../../node_modules/d3-random/src/gamma.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomPoisson(source) {\n var G = _gamma_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].source(source),\n B = _binomial_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].source(source);\n\n function randomPoisson(lambda) {\n return function() {\n var acc = 0, l = lambda;\n while (l > 16) {\n var n = Math.floor(0.875 * l),\n t = G(n)();\n if (t > l) return acc + B(n - 1, l / t)();\n acc += n;\n l -= t;\n }\n for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source());\n return acc + k;\n };\n }\n\n randomPoisson.source = sourceRandomPoisson;\n\n return randomPoisson;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvcG9pc3Nvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ1Y7QUFDTjs7QUFFL0IsaUVBQWU7QUFDZixVQUFVLHdEQUFZO0FBQ3RCLFVBQVUsMkRBQWU7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELFFBQVE7QUFDMUQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLHlEQUFhLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9wb2lzc29uLmpzPzg5ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZS5qc1wiO1xuaW1wb3J0IGJpbm9taWFsIGZyb20gXCIuL2Jpbm9taWFsLmpzXCI7XG5pbXBvcnQgZ2FtbWEgZnJvbSBcIi4vZ2FtbWEuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbVBvaXNzb24oc291cmNlKSB7XG4gIHZhciBHID0gZ2FtbWEuc291cmNlKHNvdXJjZSksXG4gICAgICBCID0gYmlub21pYWwuc291cmNlKHNvdXJjZSk7XG5cbiAgZnVuY3Rpb24gcmFuZG9tUG9pc3NvbihsYW1iZGEpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYWNjID0gMCwgbCA9IGxhbWJkYTtcbiAgICAgIHdoaWxlIChsID4gMTYpIHtcbiAgICAgICAgdmFyIG4gPSBNYXRoLmZsb29yKDAuODc1ICogbCksXG4gICAgICAgICAgICB0ID0gRyhuKSgpO1xuICAgICAgICBpZiAodCA+IGwpIHJldHVybiBhY2MgKyBCKG4gLSAxLCBsIC8gdCkoKTtcbiAgICAgICAgYWNjICs9IG47XG4gICAgICAgIGwgLT0gdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIHMgPSAtTWF0aC5sb2cxcCgtc291cmNlKCkpLCBrID0gMDsgcyA8PSBsOyArK2spIHMgLT0gTWF0aC5sb2cxcCgtc291cmNlKCkpO1xuICAgICAgcmV0dXJuIGFjYyArIGs7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbVBvaXNzb24uc291cmNlID0gc291cmNlUmFuZG9tUG9pc3NvbjtcblxuICByZXR1cm4gcmFuZG9tUG9pc3Nvbjtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/poisson.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/uniform.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-random/src/uniform.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvdW5pZm9ybS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQzs7QUFFL0MsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLEVBQUUseURBQWEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL3VuaWZvcm0uanM/NDA2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Vbmlmb3JtKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Vbmlmb3JtKG1pbiwgbWF4KSB7XG4gICAgbWluID0gbWluID09IG51bGwgPyAwIDogK21pbjtcbiAgICBtYXggPSBtYXggPT0gbnVsbCA/IDEgOiArbWF4O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSBtYXggPSBtaW4sIG1pbiA9IDA7XG4gICAgZWxzZSBtYXggLT0gbWluO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzb3VyY2UoKSAqIG1heCArIG1pbjtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tVW5pZm9ybS5zb3VyY2UgPSBzb3VyY2VSYW5kb21Vbmlmb3JtO1xuXG4gIHJldHVybiByYW5kb21Vbmlmb3JtO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/uniform.js\n"); /***/ }), /***/ "../../../node_modules/d3-random/src/weibull.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-random/src/weibull.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defaultSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource.js */ \"../../../node_modules/d3-random/src/defaultSource.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomWeibull(source) {\n function randomWeibull(k, a, b) {\n var outerFunc;\n if ((k = +k) === 0) {\n outerFunc = x => -Math.log(x);\n } else {\n k = 1 / k;\n outerFunc = x => Math.pow(x, k);\n }\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n return a + b * outerFunc(-Math.log1p(-source()));\n };\n }\n\n randomWeibull.source = sourceRandomWeibull;\n\n return randomWeibull;\n})(_defaultSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvd2VpYnVsbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQzs7QUFFL0MsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLEVBQUUseURBQWEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL3dlaWJ1bGwuanM/MmZkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21XZWlidWxsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21XZWlidWxsKGssIGEsIGIpIHtcbiAgICB2YXIgb3V0ZXJGdW5jO1xuICAgIGlmICgoayA9ICtrKSA9PT0gMCkge1xuICAgICAgb3V0ZXJGdW5jID0geCA9PiAtTWF0aC5sb2coeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGsgPSAxIC8gaztcbiAgICAgIG91dGVyRnVuYyA9IHggPT4gTWF0aC5wb3coeCwgayk7XG4gICAgfVxuICAgIGEgPSBhID09IG51bGwgPyAwIDogK2E7XG4gICAgYiA9IGIgPT0gbnVsbCA/IDEgOiArYjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gYSArIGIgKiBvdXRlckZ1bmMoLU1hdGgubG9nMXAoLXNvdXJjZSgpKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbVdlaWJ1bGwuc291cmNlID0gc291cmNlUmFuZG9tV2VpYnVsbDtcblxuICByZXR1cm4gcmFuZG9tV2VpYnVsbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-random/src/weibull.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js": /*!**************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvQWNjZW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDOztBQUVsQyxpRUFBZSxzREFBTSxvREFBb0QsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9BY2NlbnQuanM/NzcwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2XCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js": /*!*************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvRGFyazIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0M7O0FBRWxDLGlFQUFlLHNEQUFNLG9EQUFvRCxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0RhcmsyLmpzPzU4ODMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NlwiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js": /*!**************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDOztBQUVsQyxpRUFBZSxzREFBTSw0RUFBNEUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYWlyZWQuanM/YjEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4XCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js": /*!***************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sMERBQTBELEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcz9jMmJiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjJcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js": /*!***************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sb0RBQW9ELEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMi5qcz8yZWVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2NcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0MS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sMERBQTBELEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0MS5qcz8zYjgzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTlcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sb0RBQW9ELEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcz83NDJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjNcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0My5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sNEVBQTRFLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0My5qcz85NGFlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmZcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvVGFibGVhdTEwLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDOztBQUVsQyxpRUFBZSxzREFBTSxnRUFBZ0UsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9UYWJsZWF1MTAuanM/ZDUwMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiXCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/categorical/category10.js": /*!******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/categorical/category10.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrQzs7QUFFbEMsaUVBQWUsc0RBQU0sZ0VBQWdFLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcz9mYWIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/categorical/category10.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/colors.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/colors.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanM/MzYxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgdmFyIG4gPSBzcGVjaWZpZXIubGVuZ3RoIC8gNiB8IDAsIGNvbG9ycyA9IG5ldyBBcnJheShuKSwgaSA9IDA7XG4gIHdoaWxlIChpIDwgbikgY29sb3JzW2ldID0gXCIjXCIgKyBzcGVjaWZpZXIuc2xpY2UoaSAqIDYsICsraSAqIDYpO1xuICByZXR1cm4gY29sb3JzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/colors.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9CckJHLmpzPzgzZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZDhiMzY1ZjVmNWY1NWFiNGFjXCIsXG4gIFwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxXCIsXG4gIFwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1BSR24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QUkduLmpzP2E1OTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiYWY4ZGMzZjdmN2Y3N2ZiZjdiXCIsXG4gIFwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3XCIsXG4gIFwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3XCIsXG4gIFwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3XCIsXG4gIFwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3XCIsXG4gIFwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3XCIsXG4gIFwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3XCIsXG4gIFwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiXCIsXG4gIFwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1BpWUcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QaVlHLmpzPzJiZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTlhM2M5ZjdmN2Y3YTFkNzZhXCIsXG4gIFwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2XCIsXG4gIFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QdU9yLmpzP2FkMDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiOTk4ZWMzZjdmN2Y3ZjFhMzQwXCIsXG4gIFwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxXCIsXG4gIFwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxXCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkQnUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEJ1LmpzP2M4NGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZjdmN2Y3NjdhOWNmXCIsXG4gIFwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkR3kuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEd5LmpzPzEwMDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZmZmZmZmOTk5OTk5XCIsXG4gIFwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ0o7O0FBRXZCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcz80YTVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxYmZkYlwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNlwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxHbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ0o7O0FBRXZCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxHbi5qcz8wMWE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxY2Y2MFwiLFxuICBcImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js": /*!**************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1NwZWN0cmFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFNOztBQUVaLGlFQUFlLG9EQUFJLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanM/N2M0YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5OWQ1OTRcIixcbiAgXCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmFcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/index.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/index.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"interpolateBlues\": () => (/* reexport safe */ _sequential_single_Blues_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"]),\n/* harmony export */ \"interpolateBrBG\": () => (/* reexport safe */ _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"interpolateBuGn\": () => (/* reexport safe */ _sequential_multi_BuGn_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]),\n/* harmony export */ \"interpolateBuPu\": () => (/* reexport safe */ _sequential_multi_BuPu_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]),\n/* harmony export */ \"interpolateCividis\": () => (/* reexport safe */ _sequential_multi_cividis_js__WEBPACK_IMPORTED_MODULE_37__[\"default\"]),\n/* harmony export */ \"interpolateCool\": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__.cool),\n/* harmony export */ \"interpolateCubehelixDefault\": () => (/* reexport safe */ _sequential_multi_cubehelix_js__WEBPACK_IMPORTED_MODULE_38__[\"default\"]),\n/* harmony export */ \"interpolateGnBu\": () => (/* reexport safe */ _sequential_multi_GnBu_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"]),\n/* harmony export */ \"interpolateGreens\": () => (/* reexport safe */ _sequential_single_Greens_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"]),\n/* harmony export */ \"interpolateGreys\": () => (/* reexport safe */ _sequential_single_Greys_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]),\n/* harmony export */ \"interpolateInferno\": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.inferno),\n/* harmony export */ \"interpolateMagma\": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.magma),\n/* harmony export */ \"interpolateOrRd\": () => (/* reexport safe */ _sequential_multi_OrRd_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]),\n/* harmony export */ \"interpolateOranges\": () => (/* reexport safe */ _sequential_single_Oranges_js__WEBPACK_IMPORTED_MODULE_36__[\"default\"]),\n/* harmony export */ \"interpolatePRGn\": () => (/* reexport safe */ _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"interpolatePiYG\": () => (/* reexport safe */ _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"interpolatePlasma\": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.plasma),\n/* harmony export */ \"interpolatePuBu\": () => (/* reexport safe */ _sequential_multi_PuBu_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"]),\n/* harmony export */ \"interpolatePuBuGn\": () => (/* reexport safe */ _sequential_multi_PuBuGn_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"]),\n/* harmony export */ \"interpolatePuOr\": () => (/* reexport safe */ _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"interpolatePuRd\": () => (/* reexport safe */ _sequential_multi_PuRd_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"]),\n/* harmony export */ \"interpolatePurples\": () => (/* reexport safe */ _sequential_single_Purples_js__WEBPACK_IMPORTED_MODULE_34__[\"default\"]),\n/* harmony export */ \"interpolateRainbow\": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__[\"default\"]),\n/* harmony export */ \"interpolateRdBu\": () => (/* reexport safe */ _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"interpolateRdGy\": () => (/* reexport safe */ _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"interpolateRdPu\": () => (/* reexport safe */ _sequential_multi_RdPu_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"]),\n/* harmony export */ \"interpolateRdYlBu\": () => (/* reexport safe */ _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"interpolateRdYlGn\": () => (/* reexport safe */ _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"interpolateReds\": () => (/* reexport safe */ _sequential_single_Reds_js__WEBPACK_IMPORTED_MODULE_35__[\"default\"]),\n/* harmony export */ \"interpolateSinebow\": () => (/* reexport safe */ _sequential_multi_sinebow_js__WEBPACK_IMPORTED_MODULE_40__[\"default\"]),\n/* harmony export */ \"interpolateSpectral\": () => (/* reexport safe */ _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"interpolateTurbo\": () => (/* reexport safe */ _sequential_multi_turbo_js__WEBPACK_IMPORTED_MODULE_41__[\"default\"]),\n/* harmony export */ \"interpolateViridis\": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__[\"default\"]),\n/* harmony export */ \"interpolateWarm\": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__.warm),\n/* harmony export */ \"interpolateYlGn\": () => (/* reexport safe */ _sequential_multi_YlGn_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"interpolateYlGnBu\": () => (/* reexport safe */ _sequential_multi_YlGnBu_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"interpolateYlOrBr\": () => (/* reexport safe */ _sequential_multi_YlOrBr_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"interpolateYlOrRd\": () => (/* reexport safe */ _sequential_multi_YlOrRd_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"]),\n/* harmony export */ \"schemeAccent\": () => (/* reexport safe */ _categorical_Accent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"schemeBlues\": () => (/* reexport safe */ _sequential_single_Blues_js__WEBPACK_IMPORTED_MODULE_31__.scheme),\n/* harmony export */ \"schemeBrBG\": () => (/* reexport safe */ _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__.scheme),\n/* harmony export */ \"schemeBuGn\": () => (/* reexport safe */ _sequential_multi_BuGn_js__WEBPACK_IMPORTED_MODULE_19__.scheme),\n/* harmony export */ \"schemeBuPu\": () => (/* reexport safe */ _sequential_multi_BuPu_js__WEBPACK_IMPORTED_MODULE_20__.scheme),\n/* harmony export */ \"schemeCategory10\": () => (/* reexport safe */ _categorical_category10_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"schemeDark2\": () => (/* reexport safe */ _categorical_Dark2_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"schemeGnBu\": () => (/* reexport safe */ _sequential_multi_GnBu_js__WEBPACK_IMPORTED_MODULE_21__.scheme),\n/* harmony export */ \"schemeGreens\": () => (/* reexport safe */ _sequential_single_Greens_js__WEBPACK_IMPORTED_MODULE_32__.scheme),\n/* harmony export */ \"schemeGreys\": () => (/* reexport safe */ _sequential_single_Greys_js__WEBPACK_IMPORTED_MODULE_33__.scheme),\n/* harmony export */ \"schemeOrRd\": () => (/* reexport safe */ _sequential_multi_OrRd_js__WEBPACK_IMPORTED_MODULE_22__.scheme),\n/* harmony export */ \"schemeOranges\": () => (/* reexport safe */ _sequential_single_Oranges_js__WEBPACK_IMPORTED_MODULE_36__.scheme),\n/* harmony export */ \"schemePRGn\": () => (/* reexport safe */ _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__.scheme),\n/* harmony export */ \"schemePaired\": () => (/* reexport safe */ _categorical_Paired_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"schemePastel1\": () => (/* reexport safe */ _categorical_Pastel1_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"schemePastel2\": () => (/* reexport safe */ _categorical_Pastel2_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"schemePiYG\": () => (/* reexport safe */ _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__.scheme),\n/* harmony export */ \"schemePuBu\": () => (/* reexport safe */ _sequential_multi_PuBu_js__WEBPACK_IMPORTED_MODULE_24__.scheme),\n/* harmony export */ \"schemePuBuGn\": () => (/* reexport safe */ _sequential_multi_PuBuGn_js__WEBPACK_IMPORTED_MODULE_23__.scheme),\n/* harmony export */ \"schemePuOr\": () => (/* reexport safe */ _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__.scheme),\n/* harmony export */ \"schemePuRd\": () => (/* reexport safe */ _sequential_multi_PuRd_js__WEBPACK_IMPORTED_MODULE_25__.scheme),\n/* harmony export */ \"schemePurples\": () => (/* reexport safe */ _sequential_single_Purples_js__WEBPACK_IMPORTED_MODULE_34__.scheme),\n/* harmony export */ \"schemeRdBu\": () => (/* reexport safe */ _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__.scheme),\n/* harmony export */ \"schemeRdGy\": () => (/* reexport safe */ _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__.scheme),\n/* harmony export */ \"schemeRdPu\": () => (/* reexport safe */ _sequential_multi_RdPu_js__WEBPACK_IMPORTED_MODULE_26__.scheme),\n/* harmony export */ \"schemeRdYlBu\": () => (/* reexport safe */ _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__.scheme),\n/* harmony export */ \"schemeRdYlGn\": () => (/* reexport safe */ _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__.scheme),\n/* harmony export */ \"schemeReds\": () => (/* reexport safe */ _sequential_single_Reds_js__WEBPACK_IMPORTED_MODULE_35__.scheme),\n/* harmony export */ \"schemeSet1\": () => (/* reexport safe */ _categorical_Set1_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"schemeSet2\": () => (/* reexport safe */ _categorical_Set2_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"schemeSet3\": () => (/* reexport safe */ _categorical_Set3_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"schemeSpectral\": () => (/* reexport safe */ _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__.scheme),\n/* harmony export */ \"schemeTableau10\": () => (/* reexport safe */ _categorical_Tableau10_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"schemeYlGn\": () => (/* reexport safe */ _sequential_multi_YlGn_js__WEBPACK_IMPORTED_MODULE_28__.scheme),\n/* harmony export */ \"schemeYlGnBu\": () => (/* reexport safe */ _sequential_multi_YlGnBu_js__WEBPACK_IMPORTED_MODULE_27__.scheme),\n/* harmony export */ \"schemeYlOrBr\": () => (/* reexport safe */ _sequential_multi_YlOrBr_js__WEBPACK_IMPORTED_MODULE_29__.scheme),\n/* harmony export */ \"schemeYlOrRd\": () => (/* reexport safe */ _sequential_multi_YlOrRd_js__WEBPACK_IMPORTED_MODULE_30__.scheme)\n/* harmony export */ });\n/* harmony import */ var _categorical_category10_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./categorical/category10.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/category10.js\");\n/* harmony import */ var _categorical_Accent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./categorical/Accent.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js\");\n/* harmony import */ var _categorical_Dark2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./categorical/Dark2.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js\");\n/* harmony import */ var _categorical_Paired_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./categorical/Paired.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js\");\n/* harmony import */ var _categorical_Pastel1_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./categorical/Pastel1.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js\");\n/* harmony import */ var _categorical_Pastel2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categorical/Pastel2.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js\");\n/* harmony import */ var _categorical_Set1_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./categorical/Set1.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js\");\n/* harmony import */ var _categorical_Set2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./categorical/Set2.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js\");\n/* harmony import */ var _categorical_Set3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./categorical/Set3.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js\");\n/* harmony import */ var _categorical_Tableau10_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./categorical/Tableau10.js */ \"../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js\");\n/* harmony import */ var _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diverging/BrBG.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js\");\n/* harmony import */ var _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diverging/PRGn.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js\");\n/* harmony import */ var _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diverging/PiYG.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js\");\n/* harmony import */ var _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diverging/PuOr.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js\");\n/* harmony import */ var _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging/RdBu.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js\");\n/* harmony import */ var _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diverging/RdGy.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js\");\n/* harmony import */ var _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diverging/RdYlBu.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js\");\n/* harmony import */ var _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diverging/RdYlGn.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js\");\n/* harmony import */ var _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./diverging/Spectral.js */ \"../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js\");\n/* harmony import */ var _sequential_multi_BuGn_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sequential-multi/BuGn.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js\");\n/* harmony import */ var _sequential_multi_BuPu_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sequential-multi/BuPu.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js\");\n/* harmony import */ var _sequential_multi_GnBu_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sequential-multi/GnBu.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js\");\n/* harmony import */ var _sequential_multi_OrRd_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sequential-multi/OrRd.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js\");\n/* harmony import */ var _sequential_multi_PuBuGn_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sequential-multi/PuBuGn.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js\");\n/* harmony import */ var _sequential_multi_PuBu_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sequential-multi/PuBu.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js\");\n/* harmony import */ var _sequential_multi_PuRd_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./sequential-multi/PuRd.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js\");\n/* harmony import */ var _sequential_multi_RdPu_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./sequential-multi/RdPu.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js\");\n/* harmony import */ var _sequential_multi_YlGnBu_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sequential-multi/YlGnBu.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js\");\n/* harmony import */ var _sequential_multi_YlGn_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sequential-multi/YlGn.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js\");\n/* harmony import */ var _sequential_multi_YlOrBr_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sequential-multi/YlOrBr.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js\");\n/* harmony import */ var _sequential_multi_YlOrRd_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sequential-multi/YlOrRd.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js\");\n/* harmony import */ var _sequential_single_Blues_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./sequential-single/Blues.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js\");\n/* harmony import */ var _sequential_single_Greens_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./sequential-single/Greens.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js\");\n/* harmony import */ var _sequential_single_Greys_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./sequential-single/Greys.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js\");\n/* harmony import */ var _sequential_single_Purples_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./sequential-single/Purples.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js\");\n/* harmony import */ var _sequential_single_Reds_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./sequential-single/Reds.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js\");\n/* harmony import */ var _sequential_single_Oranges_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sequential-single/Oranges.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js\");\n/* harmony import */ var _sequential_multi_cividis_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sequential-multi/cividis.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js\");\n/* harmony import */ var _sequential_multi_cubehelix_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./sequential-multi/cubehelix.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js\");\n/* harmony import */ var _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./sequential-multi/rainbow.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js\");\n/* harmony import */ var _sequential_multi_sinebow_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./sequential-multi/sinebow.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js\");\n/* harmony import */ var _sequential_multi_turbo_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./sequential-multi/turbo.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js\");\n/* harmony import */ var _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./sequential-multi/viridis.js */ \"../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF3RTtBQUNSO0FBQ0Y7QUFDRTtBQUNFO0FBQ0E7QUFDTjtBQUNBO0FBQ0E7QUFDVTtBQUNlO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNNO0FBQ0E7QUFDTTtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ007QUFDTjtBQUNBO0FBQ0E7QUFDTTtBQUNOO0FBQ007QUFDQTtBQUNGO0FBQ0c7QUFDSDtBQUNNO0FBQ1Q7QUFDUztBQUMxQjtBQUNXO0FBQ3VDO0FBQ2xEO0FBQ0o7QUFDMkYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvaW5kZXguanM/ZTJkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lQ2F0ZWdvcnkxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUFjY2VudH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvQWNjZW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lRGFyazJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0RhcmsyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFpcmVkfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYWlyZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwxLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0M30gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0My5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVRhYmxlYXUxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvVGFibGVhdTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCckJHLCBzY2hlbWUgYXMgc2NoZW1lQnJCR30gZnJvbSBcIi4vZGl2ZXJnaW5nL0JyQkcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBSR24sIHNjaGVtZSBhcyBzY2hlbWVQUkdufSBmcm9tIFwiLi9kaXZlcmdpbmcvUFJHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUGlZRywgc2NoZW1lIGFzIHNjaGVtZVBpWUd9IGZyb20gXCIuL2RpdmVyZ2luZy9QaVlHLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdU9yLCBzY2hlbWUgYXMgc2NoZW1lUHVPcn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1B1T3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkQnUsIHNjaGVtZSBhcyBzY2hlbWVSZEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRHeSwgc2NoZW1lIGFzIHNjaGVtZVJkR3l9IGZyb20gXCIuL2RpdmVyZ2luZy9SZEd5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsQnUsIHNjaGVtZSBhcyBzY2hlbWVSZFlsQnV9IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVJkWWxHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkWWxHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3BlY3RyYWwsIHNjaGVtZSBhcyBzY2hlbWVTcGVjdHJhbH0gZnJvbSBcIi4vZGl2ZXJnaW5nL1NwZWN0cmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdUduLCBzY2hlbWUgYXMgc2NoZW1lQnVHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdVB1LCBzY2hlbWUgYXMgc2NoZW1lQnVQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lR25CdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPclJkLCBzY2hlbWUgYXMgc2NoZW1lT3JSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1R24sIHNjaGVtZSBhcyBzY2hlbWVQdUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1LCBzY2hlbWUgYXMgc2NoZW1lUHVCdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdUJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdVJkLCBzY2hlbWUgYXMgc2NoZW1lUHVSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdVJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFB1LCBzY2hlbWUgYXMgc2NoZW1lUmRQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduQnUsIHNjaGVtZSBhcyBzY2hlbWVZbEduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduLCBzY2hlbWUgYXMgc2NoZW1lWWxHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yQnIsIHNjaGVtZSBhcyBzY2hlbWVZbE9yQnJ9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPckJyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yUmQsIHNjaGVtZSBhcyBzY2hlbWVZbE9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCbHVlcywgc2NoZW1lIGFzIHNjaGVtZUJsdWVzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR3JlZW5zLCBzY2hlbWUgYXMgc2NoZW1lR3JlZW5zfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmVlbnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZXlzLCBzY2hlbWUgYXMgc2NoZW1lR3JleXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0dyZXlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdXJwbGVzLCBzY2hlbWUgYXMgc2NoZW1lUHVycGxlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmVkcywgc2NoZW1lIGFzIHNjaGVtZVJlZHN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9yYW5nZXMsIHNjaGVtZSBhcyBzY2hlbWVPcmFuZ2VzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9PcmFuZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDaXZpZGlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL2NpdmlkaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvY3ViZWhlbGl4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSYWluYm93LCB3YXJtIGFzIGludGVycG9sYXRlV2FybSwgY29vbCBhcyBpbnRlcnBvbGF0ZUNvb2x9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU2luZWJvd30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVUdXJib30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS90dXJiby5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlVmlyaWRpcywgbWFnbWEgYXMgaW50ZXJwb2xhdGVNYWdtYSwgaW5mZXJubyBhcyBpbnRlcnBvbGF0ZUluZmVybm8sIHBsYXNtYSBhcyBpbnRlcnBvbGF0ZVBsYXNtYX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/ramp.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/ramp.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/rgb.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (scheme => (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_0__.rgbBasis)(scheme[scheme.length - 1]));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtRDs7QUFFbkQsaUVBQWUsVUFBVSx3REFBbUIsMkJBQTJCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcz81MjFmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNjaGVtZSA9PiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/ramp.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvQnVHbi5qcz85MTdlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVmOTk5ZDhjOTJjYTI1ZlwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvQnVQdS5qcz8wMDBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImUwZWNmNDllYmNkYTg4NTZhN1wiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZFwiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvR25CdS5qcz9hYzk1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImUwZjNkYmE4ZGRiNTQzYTJjYVwiLFxuICBcImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZVwiLFxuICBcImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhY1wiLFxuICBcImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhY1wiLFxuICBcImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZVwiLFxuICBcImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZVwiLFxuICBcImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvT3JSZC5qcz80ZmYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZThjOGZkYmI4NGUzNGEzM1wiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcz8wMmM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVjZTdmMmE2YmRkYjJiOGNiZVwiLFxuICBcImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMFwiLFxuICBcImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZFwiLFxuICBcImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZFwiLFxuICBcImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YlwiLFxuICBcImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YlwiLFxuICBcImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanM/ZmQ5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2UyZjBhNmJkZGIxYzkwOTlcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGFcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdVJkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcz80OGE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU3ZTFlZmM5OTRjN2RkMWM3N1wiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcz8xNTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZkZTBkZGZhOWZiNWM1MWI4YVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbi5qcz84NjgxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImY3ZmNiOWFkZGQ4ZTMxYTM1NFwiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0M1wiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduQnUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduQnUuanM/YzA4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZGY4YjE3ZmNkYmIyYzdmYjhcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYThcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanM/NjkzZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmY3YmNmZWM0NGZkOTVmMGVcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDJcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanM/NWRlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmVkYTBmZWIyNGNmMDNiMjBcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWNcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js": /*!********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9jaXZpZGlzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2NpdmlkaXMuanM/NmY3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gIHJldHVybiBcInJnYihcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoLTQuNTQgLSB0ICogKDM1LjM0IC0gdCAqICgyMzgxLjczIC0gdCAqICg2NDAyLjcgLSB0ICogKDcwMjQuNzIgLSB0ICogMjcxMC41NykpKSkpKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDMyLjQ5ICsgdCAqICgxNzAuNzMgKyB0ICogKDUyLjgyIC0gdCAqICgxMzEuNDYgLSB0ICogKDE3Ni41OCAtIHQgKiA2Ny4zNykpKSkpKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDgxLjI0ICsgdCAqICg0NDIuMzYgLSB0ICogKDI0ODIuNDMgLSB0ICogKDYxNjcuMjQgLSB0ICogKDY2MTQuOTQgLSB0ICogMjQ3NS42NykpKSkpKSlcbiAgICAgICsgXCIpXCI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js": /*!**********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/cubehelix.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/cubehelix.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,d3_interpolate__WEBPACK_IMPORTED_MODULE_0__.cubehelixLong)((0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(300, 0.5, 0.0), (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(-240, 0.5, 1.0)));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1DO0FBQ3FCOztBQUV4RCxpRUFBZSw2REFBd0IsQ0FBQyxvREFBUyxpQkFBaUIsb0RBQVMsaUJBQWlCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXguanM/MGJmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMzAwLCAwLjUsIDAuMCksIGN1YmVoZWxpeCgtMjQwLCAwLjUsIDEuMCkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js": /*!********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cool\": () => (/* binding */ cool),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"warm\": () => (/* binding */ warm)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/cubehelix.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/cubehelix.js\");\n\n\n\nvar warm = (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_0__.cubehelixLong)((0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(-100, 0.75, 0.35), (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(80, 1.50, 0.8));\n\nvar cool = (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_0__.cubehelixLong)((0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(260, 0.75, 0.35), (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(80, 1.50, 0.8));\n\nvar c = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9yYWluYm93LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW1DO0FBQ3FCOztBQUVqRCxXQUFXLDZEQUF3QixDQUFDLG9EQUFTLG9CQUFvQixvREFBUzs7QUFFMUUsV0FBVyw2REFBd0IsQ0FBQyxvREFBUyxtQkFBbUIsb0RBQVM7O0FBRWhGLFFBQVEsb0RBQVM7O0FBRWpCLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcz8xYWI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IHZhciB3YXJtID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgtMTAwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxuZXhwb3J0IHZhciBjb29sID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG52YXIgYyA9IGN1YmVoZWxpeCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIGlmICh0IDwgMCB8fCB0ID4gMSkgdCAtPSBNYXRoLmZsb29yKHQpO1xuICB2YXIgdHMgPSBNYXRoLmFicyh0IC0gMC41KTtcbiAgYy5oID0gMzYwICogdCAtIDEwMDtcbiAgYy5zID0gMS41IC0gMS41ICogdHM7XG4gIGMubCA9IDAuOCAtIDAuOSAqIHRzO1xuICByZXR1cm4gYyArIFwiXCI7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js": /*!********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/color.js\");\n\n\nvar c = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.rgb)(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3QixRQUFRLDZDQUFHO0FBQ1g7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3cuanM/NjI4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5cbnZhciBjID0gcmdiKCksXG4gICAgcGlfMV8zID0gTWF0aC5QSSAvIDMsXG4gICAgcGlfMl8zID0gTWF0aC5QSSAqIDIgLyAzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIHZhciB4O1xuICB0ID0gKDAuNSAtIHQpICogTWF0aC5QSTtcbiAgYy5yID0gMjU1ICogKHggPSBNYXRoLnNpbih0KSkgKiB4O1xuICBjLmcgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8xXzMpKSAqIHg7XG4gIGMuYiA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCArIHBpXzJfMykpICogeDtcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js": /*!******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS90dXJiby5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS90dXJiby5qcz8xM2FlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgcmV0dXJuIFwicmdiKFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgzNC42MSArIHQgKiAoMTE3Mi4zMyAtIHQgKiAoMTA3OTMuNTYgLSB0ICogKDMzMzAwLjEyIC0gdCAqICgzODM5NC40OSAtIHQgKiAxNDgyNS4wNSkpKSkpKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDIzLjMxICsgdCAqICg1NTcuMzMgKyB0ICogKDEyMjUuMzMgLSB0ICogKDM1NzQuOTYgLSB0ICogKDEwNzMuNzcgKyB0ICogNzA3LjU2KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMjcuMiArIHQgKiAoMzIxMS4xIC0gdCAqICgxNTMyNy45NyAtIHQgKiAoMjc4MTQgLSB0ICogKDIyNTY5LjE4IC0gdCAqIDY4MzguNjYpKSkpKSkpXG4gICAgICArIFwiKVwiO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js": /*!********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"inferno\": () => (/* binding */ inferno),\n/* harmony export */ \"magma\": () => (/* binding */ magma),\n/* harmony export */ \"plasma\": () => (/* binding */ plasma)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\")));\n\nvar magma = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nvar inferno = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nvar plasma = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsS0FBSyxzREFBTSxxZ0RBQXFnRCxFQUFDOztBQUV6aEQsaUJBQWlCLHNEQUFNOztBQUV2QixtQkFBbUIsc0RBQU07O0FBRXpCLGtCQUFrQixzREFBTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3ZpcmlkaXMuanM/YmZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZnVuY3Rpb24gcmFtcChyYW5nZSkge1xuICB2YXIgbiA9IHJhbmdlLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gcmFuZ2VbTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDEsIE1hdGguZmxvb3IodCAqIG4pKSldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCByYW1wKGNvbG9ycyhcIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNVwiKSk7XG5cbmV4cG9ydCB2YXIgbWFnbWEgPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZlwiKSk7XG5cbmV4cG9ydCB2YXIgaW5mZXJubyA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0XCIpKTtcblxuZXhwb3J0IHZhciBwbGFzbWEgPSByYW1wKGNvbG9ycyhcIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMVwiKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXMuanM/MGNlZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJkZWViZjc5ZWNhZTEzMTgyYmRcIixcbiAgXCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjVcIixcbiAgXCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWNcIixcbiAgXCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWNcIixcbiAgXCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTRcIixcbiAgXCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTRcIixcbiAgXCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js": /*!********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDSjs7QUFFdkI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0RBQU07O0FBRVosaUVBQWUsb0RBQUksUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qcz85Y2RjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NVwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanM/NTkwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmMGYwZjBiZGJkYmQ2MzYzNjNcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js": /*!*********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ0o7O0FBRXZCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFNOztBQUVaLGlFQUFlLG9EQUFJLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9PcmFuZ2VzLmpzP2Y2M2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js": /*!*********************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ0o7O0FBRXZCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFNOztBQUVaLGlFQUFlLG9EQUFJLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzPzliNzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWZlZGY1YmNiZGRjNzU2YmIxXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js": /*!******************************************************************************!*\ !*** ../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"scheme\": () => (/* binding */ scheme)\n/* harmony export */ });\n/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ \"../../../node_modules/d3-scale-chromatic/src/colors.js\");\n/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ \"../../../node_modules/d3-scale-chromatic/src/ramp.js\");\n\n\n\nvar scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scheme));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ0o7O0FBRXZCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFNOztBQUVaLGlFQUFlLG9EQUFJLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9SZWRzLmpzP2MyODUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlMGQyZmM5MjcyZGUyZDI2XCIsXG4gIFwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkXCIsXG4gIFwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1XCIsXG4gIFwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1XCIsXG4gIFwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkXCIsXG4gIFwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkXCIsXG4gIFwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/band.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-scale/src/band.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ band),\n/* harmony export */ \"point\": () => (/* binding */ point)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/range.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _ordinal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ordinal.js */ \"../../../node_modules/d3-scale/src/ordinal.js\");\n\n\n\n\nfunction band() {\n var scale = (0,_ordinal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = (0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTJDO0FBQ1A7QUFDRDs7QUFFcEI7QUFDZixjQUFjLHVEQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9EQUFRLHNCQUFzQiwwQkFBMEI7QUFDekU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxxREFBZTtBQUN4Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzPzg4MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyYW5nZSBhcyBzZXF1ZW5jZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByMCA9IDAsXG4gICAgICByMSA9IDEsXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHIxIDwgcjAsXG4gICAgICAgIHN0YXJ0ID0gcmV2ZXJzZSA/IHIxIDogcjAsXG4gICAgICAgIHN0b3AgPSByZXZlcnNlID8gcjAgOiByMTtcbiAgICBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgxLCBuIC0gcGFkZGluZ0lubmVyICsgcGFkZGluZ091dGVyICogMik7XG4gICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICBzdGFydCArPSAoc3RvcCAtIHN0YXJ0IC0gc3RlcCAqIChuIC0gcGFkZGluZ0lubmVyKSkgKiBhbGlnbjtcbiAgICBiYW5kd2lkdGggPSBzdGVwICogKDEgLSBwYWRkaW5nSW5uZXIpO1xuICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgIHZhciB2YWx1ZXMgPSBzZXF1ZW5jZShuKS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gc3RhcnQgKyBzdGVwICogaTsgfSk7XG4gICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3IwLCByMV0gPSBfLCByMCA9ICtyMCwgcjEgPSArcjEsIHJlc2NhbGUoKSkgOiBbcjAsIHIxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBbcjAsIHIxXSA9IF8sIHIwID0gK3IwLCByMSA9ICtyMSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuYmFuZHdpZHRoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgfTtcblxuICBzY2FsZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHN0ZXA7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWluKDEsIHBhZGRpbmdPdXRlciA9ICtfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgXyksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ091dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdPdXRlciA9ICtfLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKGRvbWFpbigpLCBbcjAsIHIxXSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgLnBhZGRpbmdPdXRlcihwYWRkaW5nT3V0ZXIpXG4gICAgICAgIC5hbGlnbihhbGlnbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShyZXNjYWxlKCksIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50aXNoKHNjYWxlKSB7XG4gIHZhciBjb3B5ID0gc2NhbGUuY29weTtcblxuICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ0lubmVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ091dGVyO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goY29weSgpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCgpIHtcbiAgcmV0dXJuIHBvaW50aXNoKGJhbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/band.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-scale/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ constants)\n/* harmony export */ });\nfunction constants(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzPzI0MzQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29uc3RhbnRzKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/continuous.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-scale/src/continuous.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"copy\": () => (/* binding */ copy),\n/* harmony export */ \"default\": () => (/* binding */ continuous),\n/* harmony export */ \"identity\": () => (/* binding */ identity),\n/* harmony export */ \"transformer\": () => (/* binding */ transformer)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/round.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-scale/src/constant.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-scale/src/number.js\");\n\n\n\n\n\nvar unit = [0, 1];\n\nfunction identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = (0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolate__WEBPACK_IMPORTED_MODULE_3__[\"default\"])))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, _number_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_5__[\"default\"], rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nfunction continuous() {\n return transformer()(identity, identity);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBZ0M7QUFDb0U7QUFDL0Q7QUFDSjs7QUFFakM7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsUUFBUSx3REFBUTtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksb0RBQU07QUFDbEI7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0Esb0JBQW9CLHNEQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3RkFBd0Ysc0RBQWlCO0FBQ3pHOztBQUVBO0FBQ0Esc0RBQXNELGtEQUFNO0FBQzVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRCxzREFBZ0I7QUFDaEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzP2YwNmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/continuous.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/diverging.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-scale/src/diverging.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ diverging),\n/* harmony export */ \"divergingLog\": () => (/* binding */ divergingLog),\n/* harmony export */ \"divergingPow\": () => (/* binding */ divergingPow),\n/* harmony export */ \"divergingSqrt\": () => (/* binding */ divergingSqrt),\n/* harmony export */ \"divergingSymlog\": () => (/* binding */ divergingSymlog)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/piecewise.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/round.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./log.js */ \"../../../node_modules/d3-scale/src/log.js\");\n/* harmony import */ var _sequential_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sequential.js */ \"../../../node_modules/d3-scale/src/sequential.js\");\n/* harmony import */ var _symlog_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symlog.js */ \"../../../node_modules/d3-scale/src/symlog.js\");\n/* harmony import */ var _pow_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./pow.js */ \"../../../node_modules/d3-scale/src/pow.js\");\n\n\n\n\n\n\n\n\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = _continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n\n scale.rangeRound = range(d3_interpolate__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nfunction diverging() {\n var scale = (0,_linear_js__WEBPACK_IMPORTED_MODULE_4__.linearish)(transformer()(_continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity));\n\n scale.copy = function() {\n return (0,_sequential_js__WEBPACK_IMPORTED_MODULE_5__.copy)(scale, diverging());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_6__.initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n var scale = (0,_log_js__WEBPACK_IMPORTED_MODULE_7__.loggish)(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return (0,_sequential_js__WEBPACK_IMPORTED_MODULE_5__.copy)(scale, divergingLog()).base(scale.base());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_6__.initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n var scale = (0,_symlog_js__WEBPACK_IMPORTED_MODULE_8__.symlogish)(transformer());\n\n scale.copy = function() {\n return (0,_sequential_js__WEBPACK_IMPORTED_MODULE_5__.copy)(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_6__.initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n var scale = (0,_pow_js__WEBPACK_IMPORTED_MODULE_9__.powish)(transformer());\n\n scale.copy = function() {\n return (0,_sequential_js__WEBPACK_IMPORTED_MODULE_5__.copy)(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_6__.initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9kaXZlcmdpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdFO0FBQy9CO0FBQ0U7QUFDTDtBQUNMO0FBQ0k7QUFDQztBQUNOOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvREFBUTtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSwwREFBUztBQUMzRTtBQUNBOztBQUVBLHNCQUFzQixzREFBVzs7QUFFakMsMkJBQTJCLHNEQUFnQjs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZixjQUFjLHFEQUFTLGVBQWUsb0RBQVE7O0FBRTlDO0FBQ0EsV0FBVyxvREFBSTtBQUNmOztBQUVBLFNBQVMsNERBQXNCO0FBQy9COztBQUVPO0FBQ1AsY0FBYyxnREFBTzs7QUFFckI7QUFDQSxXQUFXLG9EQUFJO0FBQ2Y7O0FBRUEsU0FBUyw0REFBc0I7QUFDL0I7O0FBRU87QUFDUCxjQUFjLHFEQUFTOztBQUV2QjtBQUNBLFdBQVcsb0RBQUk7QUFDZjs7QUFFQSxTQUFTLDREQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsK0NBQU07O0FBRXBCO0FBQ0EsV0FBVyxvREFBSTtBQUNmOztBQUVBLFNBQVMsNERBQXNCO0FBQy9COztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2RpdmVyZ2luZy5qcz9iMzk5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW50ZXJwb2xhdGUsIGludGVycG9sYXRlUm91bmQsIHBpZWNld2lzZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQge2NvcHl9IGZyb20gXCIuL3NlcXVlbnRpYWwuanNcIjtcbmltcG9ydCB7c3ltbG9naXNofSBmcm9tIFwiLi9zeW1sb2cuanNcIjtcbmltcG9ydCB7cG93aXNofSBmcm9tIFwiLi9wb3cuanNcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDAuNSxcbiAgICAgIHgyID0gMSxcbiAgICAgIHMgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIHQyLFxuICAgICAgazEwLFxuICAgICAgazIxLFxuICAgICAgaW50ZXJwb2xhdG9yID0gaWRlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBjbGFtcCA9IGZhbHNlLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogKHggPSAwLjUgKyAoKHggPSArdHJhbnNmb3JtKHgpKSAtIHQxKSAqIChzICogeCA8IHMgKiB0MSA/IGsxMCA6IGsyMSksIGludGVycG9sYXRvcihjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbeDAsIHgxLCB4Ml0gPSBfLCB0MCA9IHRyYW5zZm9ybSh4MCA9ICt4MCksIHQxID0gdHJhbnNmb3JtKHgxID0gK3gxKSwgdDIgPSB0cmFuc2Zvcm0oeDIgPSAreDIpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpLCBzID0gdDEgPCB0MCA/IC0xIDogMSwgc2NhbGUpIDogW3gwLCB4MSwgeDJdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJhbmdlKGludGVycG9sYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8pIHtcbiAgICAgIHZhciByMCwgcjEsIHIyO1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3IwLCByMSwgcjJdID0gXywgaW50ZXJwb2xhdG9yID0gcGllY2V3aXNlKGludGVycG9sYXRlLCBbcjAsIHIxLCByMl0pLCBzY2FsZSkgOiBbaW50ZXJwb2xhdG9yKDApLCBpbnRlcnBvbGF0b3IoMC41KSwgaW50ZXJwb2xhdG9yKDEpXTtcbiAgICB9O1xuICB9XG5cbiAgc2NhbGUucmFuZ2UgPSByYW5nZShpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IHJhbmdlKGludGVycG9sYXRlUm91bmQpO1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCB0MiA9IHQoeDIpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpLCBzID0gdDEgPCB0MCA/IC0xIDogMTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpdmVyZ2luZygpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZygpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ0xvZygpIHtcbiAgdmFyIHNjYWxlID0gbG9nZ2lzaCh0cmFuc2Zvcm1lcigpKS5kb21haW4oWzAuMSwgMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZ0xvZygpKS5iYXNlKHNjYWxlLmJhc2UoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdTeW1sb2coKSB7XG4gIHZhciBzY2FsZSA9IHN5bWxvZ2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZ1N5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1BvdygpIHtcbiAgdmFyIHNjYWxlID0gcG93aXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nUG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nU3FydCgpIHtcbiAgcmV0dXJuIGRpdmVyZ2luZ1Bvdy5hcHBseShudWxsLCBhcmd1bWVudHMpLmV4cG9uZW50KDAuNSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/diverging.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/identity.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-scale/src/identity.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ identity)\n/* harmony export */ });\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-scale/src/number.js\");\n\n\n\nfunction identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, _number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, _number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) : [0, 1];\n\n return (0,_linear_js__WEBPACK_IMPORTED_MODULE_1__.linearish)(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pZGVudGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0M7QUFDTDs7QUFFbEI7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxzREFBc0Qsa0RBQU07QUFDNUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsa0RBQU07O0FBRXZELFNBQVMscURBQVM7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pZGVudGl0eS5qcz8zYWUyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlkZW50aXR5KGRvbWFpbikge1xuICB2YXIgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHg7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBzY2FsZTtcblxuICBzY2FsZS5kb21haW4gPSBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpZGVudGl0eShkb21haW4pLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgZG9tYWluID0gYXJndW1lbnRzLmxlbmd0aCA/IEFycmF5LmZyb20oZG9tYWluLCBudW1iZXIpIDogWzAsIDFdO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-scale/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"scaleBand\": () => (/* reexport safe */ _band_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"scaleDiverging\": () => (/* reexport safe */ _diverging_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"scaleDivergingLog\": () => (/* reexport safe */ _diverging_js__WEBPACK_IMPORTED_MODULE_15__.divergingLog),\n/* harmony export */ \"scaleDivergingPow\": () => (/* reexport safe */ _diverging_js__WEBPACK_IMPORTED_MODULE_15__.divergingPow),\n/* harmony export */ \"scaleDivergingSqrt\": () => (/* reexport safe */ _diverging_js__WEBPACK_IMPORTED_MODULE_15__.divergingSqrt),\n/* harmony export */ \"scaleDivergingSymlog\": () => (/* reexport safe */ _diverging_js__WEBPACK_IMPORTED_MODULE_15__.divergingSymlog),\n/* harmony export */ \"scaleIdentity\": () => (/* reexport safe */ _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"scaleImplicit\": () => (/* reexport safe */ _ordinal_js__WEBPACK_IMPORTED_MODULE_5__.implicit),\n/* harmony export */ \"scaleLinear\": () => (/* reexport safe */ _linear_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"scaleLog\": () => (/* reexport safe */ _log_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"scaleOrdinal\": () => (/* reexport safe */ _ordinal_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"scalePoint\": () => (/* reexport safe */ _band_js__WEBPACK_IMPORTED_MODULE_0__.point),\n/* harmony export */ \"scalePow\": () => (/* reexport safe */ _pow_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"scaleQuantile\": () => (/* reexport safe */ _quantile_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"scaleQuantize\": () => (/* reexport safe */ _quantize_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"scaleRadial\": () => (/* reexport safe */ _radial_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"scaleSequential\": () => (/* reexport safe */ _sequential_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"scaleSequentialLog\": () => (/* reexport safe */ _sequential_js__WEBPACK_IMPORTED_MODULE_13__.sequentialLog),\n/* harmony export */ \"scaleSequentialPow\": () => (/* reexport safe */ _sequential_js__WEBPACK_IMPORTED_MODULE_13__.sequentialPow),\n/* harmony export */ \"scaleSequentialQuantile\": () => (/* reexport safe */ _sequentialQuantile_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"scaleSequentialSqrt\": () => (/* reexport safe */ _sequential_js__WEBPACK_IMPORTED_MODULE_13__.sequentialSqrt),\n/* harmony export */ \"scaleSequentialSymlog\": () => (/* reexport safe */ _sequential_js__WEBPACK_IMPORTED_MODULE_13__.sequentialSymlog),\n/* harmony export */ \"scaleSqrt\": () => (/* reexport safe */ _pow_js__WEBPACK_IMPORTED_MODULE_6__.sqrt),\n/* harmony export */ \"scaleSymlog\": () => (/* reexport safe */ _symlog_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"scaleThreshold\": () => (/* reexport safe */ _threshold_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"scaleTime\": () => (/* reexport safe */ _time_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"scaleUtc\": () => (/* reexport safe */ _utcTime_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"tickFormat\": () => (/* reexport safe */ _tickFormat_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _band_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./band.js */ \"../../../node_modules/d3-scale/src/band.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-scale/src/identity.js\");\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log.js */ \"../../../node_modules/d3-scale/src/log.js\");\n/* harmony import */ var _symlog_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog.js */ \"../../../node_modules/d3-scale/src/symlog.js\");\n/* harmony import */ var _ordinal_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ordinal.js */ \"../../../node_modules/d3-scale/src/ordinal.js\");\n/* harmony import */ var _pow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow.js */ \"../../../node_modules/d3-scale/src/pow.js\");\n/* harmony import */ var _radial_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./radial.js */ \"../../../node_modules/d3-scale/src/radial.js\");\n/* harmony import */ var _quantile_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./quantile.js */ \"../../../node_modules/d3-scale/src/quantile.js\");\n/* harmony import */ var _quantize_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./quantize.js */ \"../../../node_modules/d3-scale/src/quantize.js\");\n/* harmony import */ var _threshold_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./threshold.js */ \"../../../node_modules/d3-scale/src/threshold.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./time.js */ \"../../../node_modules/d3-scale/src/time.js\");\n/* harmony import */ var _utcTime_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utcTime.js */ \"../../../node_modules/d3-scale/src/utcTime.js\");\n/* harmony import */ var _sequential_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sequential.js */ \"../../../node_modules/d3-scale/src/sequential.js\");\n/* harmony import */ var _sequentialQuantile_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sequentialQuantile.js */ \"../../../node_modules/d3-scale/src/sequentialQuantile.js\");\n/* harmony import */ var _diverging_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diverging.js */ \"../../../node_modules/d3-scale/src/diverging.js\");\n/* harmony import */ var _tickFormat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./tickFormat.js */ \"../../../node_modules/d3-scale/src/tickFormat.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHbUI7O0FBSUk7O0FBSUY7O0FBSUg7O0FBSUc7O0FBS0M7O0FBS0o7O0FBSUc7O0FBSUU7O0FBSUE7O0FBSUM7O0FBSUw7O0FBSUc7O0FBUUc7O0FBSVE7O0FBUVQ7O0FBSUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbmRleC5qcz82OGRiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVSYWRpYWxcbn0gZnJvbSBcIi4vcmFkaWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmcuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/init.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-scale/src/init.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initInterpolator\": () => (/* binding */ initInterpolator),\n/* harmony export */ \"initRange\": () => (/* binding */ initRange)\n/* harmony export */ });\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanM/MGQ0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/init.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/linear.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-scale/src/linear.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ linear),\n/* harmony export */ \"linearish\": () => (/* binding */ linearish)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _tickFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickFormat.js */ \"../../../node_modules/d3-scale/src/tickFormat.js\");\n\n\n\n\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return (0,_tickFormat_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickIncrement)(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = (0,_continuous_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n scale.copy = function() {\n return (0,_continuous_js__WEBPACK_IMPORTED_MODULE_2__.copy)(scale, linear());\n };\n\n _init_js__WEBPACK_IMPORTED_MODULE_3__.initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQThDO0FBQ0c7QUFDYjtBQUNLOztBQUVsQztBQUNQOztBQUVBO0FBQ0E7QUFDQSxXQUFXLG9EQUFLO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxXQUFXLDBEQUFVO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVEQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRWU7QUFDZixjQUFjLDBEQUFVOztBQUV4QjtBQUNBLFdBQVcsb0RBQUk7QUFDZjs7QUFFQSxFQUFFLHFEQUFlOztBQUVqQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzPzljZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/linear.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/log.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-scale/src/log.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ log),\n/* harmony export */ \"loggish\": () => (/* binding */ loggish)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/defaultLocale.js\");\n/* harmony import */ var _nice_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nice.js */ \"../../../node_modules/d3-scale/src/nice.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\n\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nfunction loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(u, v, n);\n } else {\n z = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = (0,d3_format__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(specifier)).precision == null) specifier.trim = true;\n specifier = (0,d3_format__WEBPACK_IMPORTED_MODULE_2__.format)(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain((0,_nice_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nfunction log() {\n const scale = loggish((0,_continuous_js__WEBPACK_IMPORTED_MODULE_4__.transformer)()).domain([1, 10]);\n scale.copy = () => (0,_continuous_js__WEBPACK_IMPORTED_MODULE_4__.copy)(scale, log()).base(scale.base());\n _init_js__WEBPACK_IMPORTED_MODULE_5__.initRange.apply(scale, arguments);\n return scale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9sb2cuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBK0I7QUFDbUI7QUFDckI7QUFDcUI7QUFDZDs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEMsb0JBQW9CLFVBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsWUFBWSxRQUFRO0FBQzVCLDJCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxvREFBSztBQUNyQyxNQUFNO0FBQ04sVUFBVSxvREFBSztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxxREFBZTtBQUNyRCxrQkFBa0IsaURBQU07QUFDeEI7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0Isb0RBQUk7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVlO0FBQ2Ysd0JBQXdCLDJEQUFXO0FBQ25DLHFCQUFxQixvREFBSTtBQUN6QixFQUFFLHFEQUFlO0FBQ2pCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9sb2cuanM/NmQ0YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpY2tzfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRTcGVjaWZpZXJ9IGZyb20gXCJkMy1mb3JtYXRcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2UuanNcIjtcbmltcG9ydCB7Y29weSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxvZyh4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRXhwKHgpIHtcbiAgcmV0dXJuIE1hdGguZXhwKHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Mb2duKHgpIHtcbiAgcmV0dXJuIC1NYXRoLmxvZygteCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUV4cG4oeCkge1xuICByZXR1cm4gLU1hdGguZXhwKC14KTtcbn1cblxuZnVuY3Rpb24gcG93MTAoeCkge1xuICByZXR1cm4gaXNGaW5pdGUoeCkgPyArKFwiMWVcIiArIHgpIDogeCA8IDAgPyAwIDogeDtcbn1cblxuZnVuY3Rpb24gcG93cChiYXNlKSB7XG4gIHJldHVybiBiYXNlID09PSAxMCA/IHBvdzEwXG4gICAgICA6IGJhc2UgPT09IE1hdGguRSA/IE1hdGguZXhwXG4gICAgICA6IHggPT4gTWF0aC5wb3coYmFzZSwgeCk7XG59XG5cbmZ1bmN0aW9uIGxvZ3AoYmFzZSkge1xuICByZXR1cm4gYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5sb2dcbiAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgfHwgYmFzZSA9PT0gMiAmJiBNYXRoLmxvZzJcbiAgICAgIHx8IChiYXNlID0gTWF0aC5sb2coYmFzZSksIHggPT4gTWF0aC5sb2coeCkgLyBiYXNlKTtcbn1cblxuZnVuY3Rpb24gcmVmbGVjdChmKSB7XG4gIHJldHVybiAoeCwgaykgPT4gLWYoLXgsIGspO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nZ2lzaCh0cmFuc2Zvcm0pIHtcbiAgY29uc3Qgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApO1xuICBjb25zdCBkb21haW4gPSBzY2FsZS5kb21haW47XG4gIGxldCBiYXNlID0gMTA7XG4gIGxldCBsb2dzO1xuICBsZXQgcG93cztcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIGxvZ3MgPSBsb2dwKGJhc2UpLCBwb3dzID0gcG93cChiYXNlKTtcbiAgICBpZiAoZG9tYWluKClbMF0gPCAwKSB7XG4gICAgICBsb2dzID0gcmVmbGVjdChsb2dzKSwgcG93cyA9IHJlZmxlY3QocG93cyk7XG4gICAgICB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nbiwgdHJhbnNmb3JtRXhwbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1Mb2csIHRyYW5zZm9ybUV4cCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHNjYWxlLmJhc2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYmFzZSA9ICtfLCByZXNjYWxlKCkpIDogYmFzZTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBjb3VudCA9PiB7XG4gICAgY29uc3QgZCA9IGRvbWFpbigpO1xuICAgIGxldCB1ID0gZFswXTtcbiAgICBsZXQgdiA9IGRbZC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCByID0gdiA8IHU7XG5cbiAgICBpZiAocikgKFt1LCB2XSA9IFt2LCB1XSk7XG5cbiAgICBsZXQgaSA9IGxvZ3ModSk7XG4gICAgbGV0IGogPSBsb2dzKHYpO1xuICAgIGxldCBrO1xuICAgIGxldCB0O1xuICAgIGNvbnN0IG4gPSBjb3VudCA9PSBudWxsID8gMTAgOiArY291bnQ7XG4gICAgbGV0IHogPSBbXTtcblxuICAgIGlmICghKGJhc2UgJSAxKSAmJiBqIC0gaSA8IG4pIHtcbiAgICAgIGkgPSBNYXRoLmZsb29yKGkpLCBqID0gTWF0aC5jZWlsKGopO1xuICAgICAgaWYgKHUgPiAwKSBmb3IgKDsgaSA8PSBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gMTsgayA8IGJhc2U7ICsraykge1xuICAgICAgICAgIHQgPSBpIDwgMCA/IGsgLyBwb3dzKC1pKSA6IGsgKiBwb3dzKGkpO1xuICAgICAgICAgIGlmICh0IDwgdSkgY29udGludWU7XG4gICAgICAgICAgaWYgKHQgPiB2KSBicmVhaztcbiAgICAgICAgICB6LnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBmb3IgKDsgaSA8PSBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gYmFzZSAtIDE7IGsgPj0gMTsgLS1rKSB7XG4gICAgICAgICAgdCA9IGkgPiAwID8gayAvIHBvd3MoLWkpIDogayAqIHBvd3MoaSk7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHoubGVuZ3RoICogMiA8IG4pIHogPSB0aWNrcyh1LCB2LCBuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeiA9IHRpY2tzKGksIGosIE1hdGgubWluKGogLSBpLCBuKSkubWFwKHBvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gciA/IHoucmV2ZXJzZSgpIDogejtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gKGNvdW50LCBzcGVjaWZpZXIpID0+IHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcbiAgICBpZiAoc3BlY2lmaWVyID09IG51bGwpIHNwZWNpZmllciA9IGJhc2UgPT09IDEwID8gXCJzXCIgOiBcIixcIjtcbiAgICBpZiAodHlwZW9mIHNwZWNpZmllciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAoIShiYXNlICUgMSkgJiYgKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpKS5wcmVjaXNpb24gPT0gbnVsbCkgc3BlY2lmaWVyLnRyaW0gPSB0cnVlO1xuICAgICAgc3BlY2lmaWVyID0gZm9ybWF0KHNwZWNpZmllcik7XG4gICAgfVxuICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpIHJldHVybiBzcGVjaWZpZXI7XG4gICAgY29uc3QgayA9IE1hdGgubWF4KDEsIGJhc2UgKiBjb3VudCAvIHNjYWxlLnRpY2tzKCkubGVuZ3RoKTsgLy8gVE9ETyBmYXN0IGVzdGltYXRlP1xuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGxldCBpID0gZCAvIHBvd3MoTWF0aC5yb3VuZChsb2dzKGQpKSk7XG4gICAgICBpZiAoaSAqIGJhc2UgPCBiYXNlIC0gMC41KSBpICo9IGJhc2U7XG4gICAgICByZXR1cm4gaSA8PSBrID8gc3BlY2lmaWVyKGQpIDogXCJcIjtcbiAgICB9O1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGRvbWFpbihuaWNlKGRvbWFpbigpLCB7XG4gICAgICBmbG9vcjogeCA9PiBwb3dzKE1hdGguZmxvb3IobG9ncyh4KSkpLFxuICAgICAgY2VpbDogeCA9PiBwb3dzKE1hdGguY2VpbChsb2dzKHgpKSlcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2coKSB7XG4gIGNvbnN0IHNjYWxlID0gbG9nZ2lzaCh0cmFuc2Zvcm1lcigpKS5kb21haW4oWzEsIDEwXSk7XG4gIHNjYWxlLmNvcHkgPSAoKSA9PiBjb3B5KHNjYWxlLCBsb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBzY2FsZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/log.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/nice.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-scale/src/nice.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ nice)\n/* harmony export */ });\nfunction nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzPzk0NzgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmljZShkb21haW4sIGludGVydmFsKSB7XG4gIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpO1xuXG4gIHZhciBpMCA9IDAsXG4gICAgICBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLFxuICAgICAgeDAgPSBkb21haW5baTBdLFxuICAgICAgeDEgPSBkb21haW5baTFdLFxuICAgICAgdDtcblxuICBpZiAoeDEgPCB4MCkge1xuICAgIHQgPSBpMCwgaTAgPSBpMSwgaTEgPSB0O1xuICAgIHQgPSB4MCwgeDAgPSB4MSwgeDEgPSB0O1xuICB9XG5cbiAgZG9tYWluW2kwXSA9IGludGVydmFsLmZsb29yKHgwKTtcbiAgZG9tYWluW2kxXSA9IGludGVydmFsLmNlaWwoeDEpO1xuICByZXR1cm4gZG9tYWluO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/nice.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/number.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-scale/src/number.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ number)\n/* harmony export */ });\nfunction number(x) {\n return +x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcz80YzIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiAreDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/number.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/ordinal.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-scale/src/ordinal.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ordinal),\n/* harmony export */ \"implicit\": () => (/* binding */ implicit)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/internmap/src/index.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\nconst implicit = Symbol(\"implicit\");\n\nfunction ordinal() {\n var index = new d3_array__WEBPACK_IMPORTED_MODULE_0__.InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new d3_array__WEBPACK_IMPORTED_MODULE_0__.InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n _init_js__WEBPACK_IMPORTED_MODULE_1__.initRange.apply(scale, arguments);\n\n return scale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUM7QUFDQzs7QUFFN0I7O0FBRVE7QUFDZixrQkFBa0IsK0NBQVM7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QiwrQ0FBUztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxxREFBZTs7QUFFakI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanM/MjBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybk1hcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgY29uc3QgaW1wbGljaXQgPSBTeW1ib2woXCJpbXBsaWNpdFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbCgpIHtcbiAgdmFyIGluZGV4ID0gbmV3IEludGVybk1hcCgpLFxuICAgICAgZG9tYWluID0gW10sXG4gICAgICByYW5nZSA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKGQpIHtcbiAgICBsZXQgaSA9IGluZGV4LmdldChkKTtcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGQsIGkgPSBkb21haW4ucHVzaChkKSAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2VbaSAlIHJhbmdlLmxlbmd0aF07XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW10sIGluZGV4ID0gbmV3IEludGVybk1hcCgpO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgXykge1xuICAgICAgaWYgKGluZGV4Lmhhcyh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgaW5kZXguc2V0KHZhbHVlLCBkb21haW4ucHVzaCh2YWx1ZSkgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbChkb21haW4sIHJhbmdlKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/ordinal.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/pow.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-scale/src/pow.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ pow),\n/* harmony export */ \"powish\": () => (/* binding */ powish),\n/* harmony export */ \"sqrt\": () => (/* binding */ sqrt)\n/* harmony export */ });\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n var scale = transform(_continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity, _continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(_continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity, _continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return (0,_linear_js__WEBPACK_IMPORTED_MODULE_1__.linearish)(scale);\n}\n\nfunction pow() {\n var scale = powish((0,_continuous_js__WEBPACK_IMPORTED_MODULE_0__.transformer)());\n\n scale.copy = function() {\n return (0,_continuous_js__WEBPACK_IMPORTED_MODULE_0__.copy)(scale, pow()).exponent(scale.exponent());\n };\n\n _init_js__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9wb3cuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXNDO0FBQ3NCO0FBQ3hCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCx3QkFBd0Isb0RBQVEsRUFBRSxvREFBUTtBQUMxQzs7QUFFQTtBQUNBLHNDQUFzQyxvREFBUSxFQUFFLG9EQUFRO0FBQ3hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxxREFBUztBQUNsQjs7QUFFZTtBQUNmLHFCQUFxQiwyREFBVzs7QUFFaEM7QUFDQSxXQUFXLG9EQUFJO0FBQ2Y7O0FBRUEsRUFBRSxxREFBZTs7QUFFakI7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9wb3cuanM/OGYzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQge2NvcHksIGlkZW50aXR5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtUG93KGV4cG9uZW50KSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLU1hdGgucG93KC14LCBleHBvbmVudCkgOiBNYXRoLnBvdyh4LCBleHBvbmVudCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNxcnQoeCkge1xuICByZXR1cm4geCA8IDAgPyAtTWF0aC5zcXJ0KC14KSA6IE1hdGguc3FydCh4KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3F1YXJlKHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLXggKiB4IDogeCAqIHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3dpc2godHJhbnNmb3JtKSB7XG4gIHZhciBzY2FsZSA9IHRyYW5zZm9ybShpZGVudGl0eSwgaWRlbnRpdHkpLFxuICAgICAgZXhwb25lbnQgPSAxO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcmV0dXJuIGV4cG9uZW50ID09PSAxID8gdHJhbnNmb3JtKGlkZW50aXR5LCBpZGVudGl0eSlcbiAgICAgICAgOiBleHBvbmVudCA9PT0gMC41ID8gdHJhbnNmb3JtKHRyYW5zZm9ybVNxcnQsIHRyYW5zZm9ybVNxdWFyZSlcbiAgICAgICAgOiB0cmFuc2Zvcm0odHJhbnNmb3JtUG93KGV4cG9uZW50KSwgdHJhbnNmb3JtUG93KDEgLyBleHBvbmVudCkpO1xuICB9XG5cbiAgc2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXhwb25lbnQgPSArXywgcmVzY2FsZSgpKSA6IGV4cG9uZW50O1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHBvdygpKS5leHBvbmVudChzY2FsZS5leHBvbmVudCgpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3FydCgpIHtcbiAgcmV0dXJuIHBvdy5hcHBseShudWxsLCBhcmd1bWVudHMpLmV4cG9uZW50KDAuNSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/pow.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/quantile.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-scale/src/quantile.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ quantile)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/quantile.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\nfunction quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.quantileSorted)(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[(0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_3__.initRange.apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGlsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3RTtBQUNwQzs7QUFFckI7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msd0RBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RCxvREFBTTtBQUM5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnREFBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLHFEQUFlO0FBQ3hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpbGUuanM/MWQ1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FzY2VuZGluZywgYmlzZWN0LCBxdWFudGlsZVNvcnRlZCBhcyB0aHJlc2hvbGR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUoKSB7XG4gIHZhciBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAwLCBuID0gTWF0aC5tYXgoMSwgcmFuZ2UubGVuZ3RoKTtcbiAgICB0aHJlc2hvbGRzID0gbmV3IEFycmF5KG4gLSAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSB0aHJlc2hvbGQoZG9tYWluLCBpIC8gbik7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiByYW5nZVtiaXNlY3QodGhyZXNob2xkcywgeCldO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSkge1xuICAgIHZhciBpID0gcmFuZ2UuaW5kZXhPZih5KTtcbiAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dIDogW1xuICAgICAgaSA+IDAgPyB0aHJlc2hvbGRzW2kgLSAxXSA6IGRvbWFpblswXSxcbiAgICAgIGkgPCB0aHJlc2hvbGRzLmxlbmd0aCA/IHRocmVzaG9sZHNbaV0gOiBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdXG4gICAgXTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yIChsZXQgZCBvZiBfKSBpZiAoZCAhPSBudWxsICYmICFpc05hTihkID0gK2QpKSBkb21haW4ucHVzaChkKTtcbiAgICBkb21haW4uc29ydChhc2NlbmRpbmcpO1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLnF1YW50aWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aHJlc2hvbGRzLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBxdWFudGlsZSgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/quantile.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/quantize.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-scale/src/quantize.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ quantize)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[(0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_1__.initRange.apply((0,_linear_js__WEBPACK_IMPORTED_MODULE_2__.linearish)(scale), arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGl6ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWdDO0FBQ007QUFDRjs7QUFFckI7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsb0RBQU07QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxxREFBZSxDQUFDLHFEQUFTO0FBQ2xDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpemUuanM/OTYzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGl6ZSgpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMSxcbiAgICAgIG4gPSAxLFxuICAgICAgZG9tYWluID0gWzAuNV0sXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ICE9IG51bGwgJiYgeCA8PSB4ID8gcmFuZ2VbYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildIDogdW5rbm93bjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAtMTtcbiAgICBkb21haW4gPSBuZXcgQXJyYXkobik7XG4gICAgd2hpbGUgKCsraSA8IG4pIGRvbWFpbltpXSA9ICgoaSArIDEpICogeDEgLSAoaSAtIG4pICogeDApIC8gKG4gKyAxKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3gwLCB4MV0gPSBfLCB4MCA9ICt4MCwgeDEgPSAreDEsIHJlc2NhbGUoKSkgOiBbeDAsIHgxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChuID0gKHJhbmdlID0gQXJyYXkuZnJvbShfKSkubGVuZ3RoIC0gMSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSkge1xuICAgIHZhciBpID0gcmFuZ2UuaW5kZXhPZih5KTtcbiAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dXG4gICAgICAgIDogaSA8IDEgPyBbeDAsIGRvbWFpblswXV1cbiAgICAgICAgOiBpID49IG4gPyBbZG9tYWluW24gLSAxXSwgeDFdXG4gICAgICAgIDogW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUudGhyZXNob2xkcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHF1YW50aXplKClcbiAgICAgICAgLmRvbWFpbihbeDAsIHgxXSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGxpbmVhcmlzaChzY2FsZSksIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/quantize.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/radial.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-scale/src/radial.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ radial)\n/* harmony export */ });\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number.js */ \"../../../node_modules/d3-scale/src/number.js\");\n\n\n\n\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nfunction radial() {\n var squared = (0,_continuous_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, _number_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n _init_js__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments);\n\n return (0,_linear_js__WEBPACK_IMPORTED_MODULE_3__.linearish)(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9yYWRpYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBeUM7QUFDTDtBQUNFO0FBQ0w7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZixnQkFBZ0IsMERBQVU7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvRUFBb0Usa0RBQU07QUFDMUU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHFEQUFlOztBQUVqQixTQUFTLHFEQUFTO0FBQ2xCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcmFkaWFsLmpzPzZmYWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnRpbnVvdXMgZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmZ1bmN0aW9uIHNxdWFyZSh4KSB7XG4gIHJldHVybiBNYXRoLnNpZ24oeCkgKiB4ICogeDtcbn1cblxuZnVuY3Rpb24gdW5zcXVhcmUoeCkge1xuICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5zcXJ0KE1hdGguYWJzKHgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFkaWFsKCkge1xuICB2YXIgc3F1YXJlZCA9IGNvbnRpbnVvdXMoKSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHZhciB5ID0gdW5zcXVhcmUoc3F1YXJlZCh4KSk7XG4gICAgcmV0dXJuIGlzTmFOKHkpID8gdW5rbm93biA6IHJvdW5kID8gTWF0aC5yb3VuZCh5KSA6IHk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHNxdWFyZWQuaW52ZXJ0KHNxdWFyZSh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNxdWFyZWQuZG9tYWluKF8pLCBzY2FsZSkgOiBzcXVhcmVkLmRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNxdWFyZWQucmFuZ2UoKHJhbmdlID0gQXJyYXkuZnJvbShfLCBudW1iZXIpKS5tYXAoc3F1YXJlKSksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gc2NhbGUucmFuZ2UoXykucm91bmQodHJ1ZSk7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHNjYWxlKSA6IHJvdW5kO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNxdWFyZWQuY2xhbXAoXyksIHNjYWxlKSA6IHNxdWFyZWQuY2xhbXAoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcmFkaWFsKHNxdWFyZWQuZG9tYWluKCksIHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5jbGFtcChzcXVhcmVkLmNsYW1wKCkpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/radial.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/sequential.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-scale/src/sequential.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"copy\": () => (/* binding */ copy),\n/* harmony export */ \"default\": () => (/* binding */ sequential),\n/* harmony export */ \"sequentialLog\": () => (/* binding */ sequentialLog),\n/* harmony export */ \"sequentialPow\": () => (/* binding */ sequentialPow),\n/* harmony export */ \"sequentialSqrt\": () => (/* binding */ sequentialSqrt),\n/* harmony export */ \"sequentialSymlog\": () => (/* binding */ sequentialSymlog)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/round.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./log.js */ \"../../../node_modules/d3-scale/src/log.js\");\n/* harmony import */ var _symlog_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./symlog.js */ \"../../../node_modules/d3-scale/src/symlog.js\");\n/* harmony import */ var _pow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pow.js */ \"../../../node_modules/d3-scale/src/pow.js\");\n\n\n\n\n\n\n\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = _continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n scale.rangeRound = range(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction sequential() {\n var scale = (0,_linear_js__WEBPACK_IMPORTED_MODULE_3__.linearish)(transformer()(_continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_4__.initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n var scale = (0,_log_js__WEBPACK_IMPORTED_MODULE_5__.loggish)(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_4__.initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n var scale = (0,_symlog_js__WEBPACK_IMPORTED_MODULE_6__.symlogish)(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_4__.initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n var scale = (0,_pow_js__WEBPACK_IMPORTED_MODULE_7__.powish)(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_4__.initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTZEO0FBQ3BCO0FBQ0U7QUFDTDtBQUNMO0FBQ0s7QUFDTjs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0RBQVE7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixzREFBVzs7QUFFakMsMkJBQTJCLHNEQUFnQjs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZixjQUFjLHFEQUFTLGVBQWUsb0RBQVE7O0FBRTlDO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDREQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsZ0RBQU87O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDREQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMscURBQVM7O0FBRXZCO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDREQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsK0NBQU07O0FBRXBCO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDREQUFzQjtBQUMvQjs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsLmpzP2I0OTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiBpbnRlcnBvbGF0b3IoazEwID09PSAwID8gMC41IDogKHggPSAodHJhbnNmb3JtKHgpIC0gdDApICogazEwLCBjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbeDAsIHgxXSA9IF8sIHQwID0gdHJhbnNmb3JtKHgwID0gK3gwKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSAreDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKSwgc2NhbGUpIDogW3gwLCB4MV07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmFuZ2UoaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oXykge1xuICAgICAgdmFyIHIwLCByMTtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKFtyMCwgcjFdID0gXywgaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdGUocjAsIHIxKSwgc2NhbGUpIDogW2ludGVycG9sYXRvcigwKSwgaW50ZXJwb2xhdG9yKDEpXTtcbiAgICB9O1xuICB9XG5cbiAgc2NhbGUucmFuZ2UgPSByYW5nZShpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IHJhbmdlKGludGVycG9sYXRlUm91bmQpO1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/sequential.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/sequentialQuantile.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-scale/src/sequentialQuantile.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ sequentialQuantile)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ascending.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/quantile.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction sequentialQuantile() {\n var domain = [],\n interpolator = _continuous_js__WEBPACK_IMPORTED_MODULE_0__.identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator(((0,d3_array__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => (0,d3_array__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_4__.initInterpolator.apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsUXVhbnRpbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXFEO0FBQ1o7QUFDRTs7QUFFNUI7QUFDZjtBQUNBLHFCQUFxQixvREFBUTs7QUFFN0I7QUFDQSwwREFBMEQsb0RBQU07QUFDaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0RBQVM7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGNBQWMsWUFBWSxvREFBUTtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw0REFBc0I7QUFDL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsUXVhbnRpbGUuanM/YjYzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FzY2VuZGluZywgYmlzZWN0LCBxdWFudGlsZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbFF1YW50aWxlKCkge1xuICB2YXIgZG9tYWluID0gW10sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgaWYgKHggIT0gbnVsbCAmJiAhaXNOYU4oeCA9ICt4KSkgcmV0dXJuIGludGVycG9sYXRvcigoYmlzZWN0KGRvbWFpbiwgeCwgMSkgLSAxKSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdO1xuICAgIGZvciAobGV0IGQgb2YgXykgaWYgKGQgIT0gbnVsbCAmJiAhaXNOYU4oZCA9ICtkKSkgZG9tYWluLnB1c2goZCk7XG4gICAgZG9tYWluLnNvcnQoYXNjZW5kaW5nKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUuaW50ZXJwb2xhdG9yID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRvciA9IF8sIHNjYWxlKSA6IGludGVycG9sYXRvcjtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4ubWFwKChkLCBpKSA9PiBpbnRlcnBvbGF0b3IoaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpKTtcbiAgfTtcblxuICBzY2FsZS5xdWFudGlsZXMgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogbiArIDF9LCAoXywgaSkgPT4gcXVhbnRpbGUoZG9tYWluLCBpIC8gbikpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbFF1YW50aWxlKGludGVycG9sYXRvcikuZG9tYWluKGRvbWFpbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/sequentialQuantile.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/symlog.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-scale/src/symlog.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ symlog),\n/* harmony export */ \"symlogish\": () => (/* binding */ symlogish)\n/* harmony export */ });\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-scale/src/linear.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nfunction symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return (0,_linear_js__WEBPACK_IMPORTED_MODULE_0__.linearish)(scale);\n}\n\nfunction symlog() {\n var scale = symlogish((0,_continuous_js__WEBPACK_IMPORTED_MODULE_1__.transformer)());\n\n scale.copy = function() {\n return (0,_continuous_js__WEBPACK_IMPORTED_MODULE_1__.copy)(scale, symlog()).constant(scale.constant());\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zeW1sb2cuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDWTtBQUNkOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxxREFBUztBQUNsQjs7QUFFZTtBQUNmLHdCQUF3QiwyREFBVzs7QUFFbkM7QUFDQSxXQUFXLG9EQUFJO0FBQ2Y7O0FBRUEsU0FBUyxxREFBZTtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3N5bWxvZy5qcz8yNWE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7Y29weSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVN5bWxvZyhjKSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGguc2lnbih4KSAqIE1hdGgubG9nMXAoTWF0aC5hYnMoeCAvIGMpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3ltZXhwKGMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5leHBtMShNYXRoLmFicyh4KSkgKiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ltbG9naXNoKHRyYW5zZm9ybSkge1xuICB2YXIgYyA9IDEsIHNjYWxlID0gdHJhbnNmb3JtKHRyYW5zZm9ybVN5bWxvZyhjKSwgdHJhbnNmb3JtU3ltZXhwKGMpKTtcblxuICBzY2FsZS5jb25zdGFudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyYW5zZm9ybSh0cmFuc2Zvcm1TeW1sb2coYyA9ICtfKSwgdHJhbnNmb3JtU3ltZXhwKGMpKSA6IGM7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc3ltbG9nKCkpLmNvbnN0YW50KHNjYWxlLmNvbnN0YW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/symlog.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/threshold.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-scale/src/threshold.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ threshold)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisect.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\nfunction threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[(0,d3_array__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return _init_js__WEBPACK_IMPORTED_MODULE_1__.initRange.apply(scale, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aHJlc2hvbGQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdDO0FBQ0k7O0FBRXJCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsb0RBQU07QUFDN0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMscURBQWU7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aHJlc2hvbGQuanM/YTllZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJlc2hvbGQoKSB7XG4gIHZhciBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bixcbiAgICAgIG4gPSAxO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCAhPSBudWxsICYmIHggPD0geCA/IHJhbmdlW2Jpc2VjdChkb21haW4sIHgsIDAsIG4pXSA6IHVua25vd247XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGggLSAxKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkKClcbiAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/threshold.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/tickFormat.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-scale/src/tickFormat.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ tickFormat)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/formatSpecifier.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/precisionPrefix.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/defaultLocale.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/precisionRound.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/precisionFixed.js\");\n\n\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(start, stop, count),\n precision;\n specifier = (0,d3_format__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = (0,d3_format__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(step, value))) specifier.precision = precision;\n return (0,d3_format__WEBPACK_IMPORTED_MODULE_3__.formatPrefix)(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = (0,d3_format__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = (0,d3_format__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return (0,d3_format__WEBPACK_IMPORTED_MODULE_3__.format)(specifier);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBa0M7QUFDK0U7O0FBRWxHO0FBQ2YsYUFBYSxrREFBUTtBQUNyQjtBQUNBLGNBQWMscURBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsNERBQTRELHFEQUFlO0FBQzNFLGFBQWEsdURBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELHFEQUFjO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELHFEQUFjO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaURBQU07QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanM/NWVmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/tickFormat.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/time.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-scale/src/time.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"calendar\": () => (/* binding */ calendar),\n/* harmony export */ \"default\": () => (/* binding */ time)\n/* harmony export */ });\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/ticks.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/year.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/month.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/week.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/day.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/hour.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/minute.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/second.js\");\n/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-time-format */ \"../../../node_modules/d3-time-format/src/defaultLocale.js\");\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous.js */ \"../../../node_modules/d3-scale/src/continuous.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n/* harmony import */ var _nice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nice.js */ \"../../../node_modules/d3-scale/src/nice.js\");\n\n\n\n\n\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = (0,_continuous_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain((0,_nice_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return (0,_continuous_js__WEBPACK_IMPORTED_MODULE_0__.copy)(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nfunction time() {\n return _init_js__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(calendar(d3_time__WEBPACK_IMPORTED_MODULE_3__.timeTicks, d3_time__WEBPACK_IMPORTED_MODULE_3__.timeTickInterval, d3_time__WEBPACK_IMPORTED_MODULE_4__.timeYear, d3_time__WEBPACK_IMPORTED_MODULE_5__.timeMonth, d3_time__WEBPACK_IMPORTED_MODULE_6__.timeSunday, d3_time__WEBPACK_IMPORTED_MODULE_7__.timeDay, d3_time__WEBPACK_IMPORTED_MODULE_8__.timeHour, d3_time__WEBPACK_IMPORTED_MODULE_9__.timeMinute, d3_time__WEBPACK_IMPORTED_MODULE_10__.second, d3_time_format__WEBPACK_IMPORTED_MODULE_11__.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThIO0FBQ3BGO0FBQ087QUFDYjtBQUNQOztBQUU3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1AsY0FBYywwREFBVTtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixvREFBSTtBQUNqQzs7QUFFQTtBQUNBLFdBQVcsb0RBQUk7QUFDZjs7QUFFQTtBQUNBOztBQUVlO0FBQ2YsU0FBUyxxREFBZSxVQUFVLDhDQUFTLEVBQUUscURBQWdCLEVBQUUsNkNBQVEsRUFBRSw4Q0FBUyxFQUFFLCtDQUFRLEVBQUUsNENBQU8sRUFBRSw2Q0FBUSxFQUFFLCtDQUFVLEVBQUUsNENBQVUsRUFBRSx1REFBVTtBQUNuSiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpbWUuanM/M2JiOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2UuanNcIjtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCksXG4gICAgICBpbnZlcnQgPSBzY2FsZS5pbnZlcnQsXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgZm9ybWF0U2Vjb25kID0gZm9ybWF0KFwiOiVTXCIpLFxuICAgICAgZm9ybWF0TWludXRlID0gZm9ybWF0KFwiJUk6JU1cIiksXG4gICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICBmb3JtYXREYXkgPSBmb3JtYXQoXCIlYSAlZFwiKSxcbiAgICAgIGZvcm1hdFdlZWsgPSBmb3JtYXQoXCIlYiAlZFwiKSxcbiAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICBmb3JtYXRZZWFyID0gZm9ybWF0KFwiJVlcIik7XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihBcnJheS5mcm9tKF8sIG51bWJlcikpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGludGVydmFsID09IG51bGwgPyAxMCA6IGludGVydmFsKTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiBzcGVjaWZpZXIgPT0gbnVsbCA/IHRpY2tGb3JtYXQgOiBmb3JtYXQoc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIGlmICghaW50ZXJ2YWwgfHwgdHlwZW9mIGludGVydmFsLnJhbmdlICE9PSBcImZ1bmN0aW9uXCIpIGludGVydmFsID0gdGlja0ludGVydmFsKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICAgIHJldHVybiBpbnRlcnZhbCA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHRpY2tzLCB0aWNrSW50ZXJ2YWwsIHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmb3JtYXQpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWUoKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsLCB0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMjAwMCwgMCwgMSksIG5ldyBEYXRlKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/time.js\n"); /***/ }), /***/ "../../../node_modules/d3-scale/src/utcTime.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-scale/src/utcTime.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ utcTime)\n/* harmony export */ });\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/ticks.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/year.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/month.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/week.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/day.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/hour.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/minute.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/second.js\");\n/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-time-format */ \"../../../node_modules/d3-time-format/src/defaultLocale.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./time.js */ \"../../../node_modules/d3-scale/src/time.js\");\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./init.js */ \"../../../node_modules/d3-scale/src/init.js\");\n\n\n\n\n\nfunction utcTime() {\n return _init_js__WEBPACK_IMPORTED_MODULE_0__.initRange.apply((0,_time_js__WEBPACK_IMPORTED_MODULE_1__.calendar)(d3_time__WEBPACK_IMPORTED_MODULE_2__.utcTicks, d3_time__WEBPACK_IMPORTED_MODULE_2__.utcTickInterval, d3_time__WEBPACK_IMPORTED_MODULE_3__.utcYear, d3_time__WEBPACK_IMPORTED_MODULE_4__.utcMonth, d3_time__WEBPACK_IMPORTED_MODULE_5__.utcSunday, d3_time__WEBPACK_IMPORTED_MODULE_6__.utcDay, d3_time__WEBPACK_IMPORTED_MODULE_7__.utcHour, d3_time__WEBPACK_IMPORTED_MODULE_8__.utcMinute, d3_time__WEBPACK_IMPORTED_MODULE_9__.second, d3_time_format__WEBPACK_IMPORTED_MODULE_10__.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy91dGNUaW1lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFxSDtBQUM1RTtBQUNOO0FBQ0M7O0FBRXJCO0FBQ2YsU0FBUyxxREFBZSxDQUFDLGtEQUFRLENBQUMsNkNBQVEsRUFBRSxvREFBZSxFQUFFLDRDQUFPLEVBQUUsNkNBQVEsRUFBRSw4Q0FBTyxFQUFFLDJDQUFNLEVBQUUsNENBQU8sRUFBRSw4Q0FBUyxFQUFFLDJDQUFTLEVBQUUsc0RBQVM7QUFDekkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy91dGNUaW1lLmpzPzUzMzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1dGNZZWFyLCB1dGNNb250aCwgdXRjV2VlaywgdXRjRGF5LCB1dGNIb3VyLCB1dGNNaW51dGUsIHV0Y1NlY29uZCwgdXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7Y2FsZW5kYXJ9IGZyb20gXCIuL3RpbWUuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHV0Y1RpbWUoKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y0Zvcm1hdCkuZG9tYWluKFtEYXRlLlVUQygyMDAwLCAwLCAxKSwgRGF0ZS5VVEMoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-scale/src/utcTime.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/array.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-selection/src/array.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ array)\n/* harmony export */ });\n// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nfunction array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ2U7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2FycmF5LmpzP2QyOWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gR2l2ZW4gc29tZXRoaW5nIGFycmF5IGxpa2UgKG9yIG51bGwpLCByZXR1cm5zIHNvbWV0aGluZyB0aGF0IGlzIHN0cmljdGx5IGFuXG4vLyBhcnJheS4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGFycmF5LWxpa2Ugb2JqZWN0cyBwYXNzZWQgdG8gZDMuc2VsZWN0QWxsXG4vLyBvciBzZWxlY3Rpb24uc2VsZWN0QWxsIGFyZSBjb252ZXJ0ZWQgaW50byBwcm9wZXIgYXJyYXlzIHdoZW4gY3JlYXRpbmcgYVxuLy8gc2VsZWN0aW9uOyB3ZSBkb27igJl0IGV2ZXIgd2FudCB0byBjcmVhdGUgYSBzZWxlY3Rpb24gYmFja2VkIGJ5IGEgbGl2ZVxuLy8gSFRNTENvbGxlY3Rpb24gb3IgTm9kZUxpc3QuIEhvd2V2ZXIsIG5vdGUgdGhhdCBzZWxlY3Rpb24uc2VsZWN0QWxsIHdpbGwgdXNlIGFcbi8vIHN0YXRpYyBOb2RlTGlzdCBhcyBhIGdyb3VwLCBzaW5jZSBpdCBzYWZlbHkgZGVyaXZlZCBmcm9tIHF1ZXJ5U2VsZWN0b3JBbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcnJheSh4KSB7XG4gIHJldHVybiB4ID09IG51bGwgPyBbXSA6IEFycmF5LmlzQXJyYXkoeCkgPyB4IDogQXJyYXkuZnJvbSh4KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/constant.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-selection/src/constant.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY29uc3RhbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzPzVhMTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/create.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-selection/src/create.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator.js */ \"../../../node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select.js */ \"../../../node_modules/d3-selection/src/select.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n return (0,_select_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_creator_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(name).call(document.documentElement));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFtQztBQUNGOztBQUVqQyw2QkFBZSxvQ0FBUztBQUN4QixTQUFTLHNEQUFNLENBQUMsdURBQU87QUFDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRlLmpzP2I3YmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4vY3JlYXRvci5qc1wiO1xuaW1wb3J0IHNlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0KGNyZWF0b3IobmFtZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/create.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/creator.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-selection/src/creator.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespace.js */ \"../../../node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _namespaces_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces.js */ \"../../../node_modules/d3-selection/src/namespaces.js\");\n\n\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === _namespaces_js__WEBPACK_IMPORTED_MODULE_0__.xhtml && document.documentElement.namespaceURI === _namespaces_js__WEBPACK_IMPORTED_MODULE_0__.xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var fullname = (0,_namespace_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUM7QUFDRDs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaURBQUssOENBQThDLGlEQUFLO0FBQzNFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEIsaUJBQWlCLHlEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanM/NWM2OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZS5qc1wiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/creator.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/index.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-selection/src/index.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"create\": () => (/* reexport safe */ _create_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"creator\": () => (/* reexport safe */ _creator_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"local\": () => (/* reexport safe */ _local_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"matcher\": () => (/* reexport safe */ _matcher_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"namespace\": () => (/* reexport safe */ _namespace_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"namespaces\": () => (/* reexport safe */ _namespaces_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"pointer\": () => (/* reexport safe */ _pointer_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"pointers\": () => (/* reexport safe */ _pointers_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"select\": () => (/* reexport safe */ _select_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"selectAll\": () => (/* reexport safe */ _selectAll_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"selection\": () => (/* reexport safe */ _selection_index_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"selector\": () => (/* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"selectorAll\": () => (/* reexport safe */ _selectorAll_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"style\": () => (/* reexport safe */ _selection_style_js__WEBPACK_IMPORTED_MODULE_13__.styleValue),\n/* harmony export */ \"window\": () => (/* reexport safe */ _window_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _create_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create.js */ \"../../../node_modules/d3-selection/src/create.js\");\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator.js */ \"../../../node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _local_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local.js */ \"../../../node_modules/d3-selection/src/local.js\");\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./matcher.js */ \"../../../node_modules/d3-selection/src/matcher.js\");\n/* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./namespace.js */ \"../../../node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _namespaces_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./namespaces.js */ \"../../../node_modules/d3-selection/src/namespaces.js\");\n/* harmony import */ var _pointer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pointer.js */ \"../../../node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var _pointers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pointers.js */ \"../../../node_modules/d3-selection/src/pointers.js\");\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./select.js */ \"../../../node_modules/d3-selection/src/select.js\");\n/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selectAll.js */ \"../../../node_modules/d3-selection/src/selectAll.js\");\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selection/index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selector.js */ \"../../../node_modules/d3-selection/src/selector.js\");\n/* harmony import */ var _selectorAll_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selectorAll.js */ \"../../../node_modules/d3-selection/src/selectorAll.js\");\n/* harmony import */ var _selection_style_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./selection/style.js */ \"../../../node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _window_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./window.js */ \"../../../node_modules/d3-selection/src/window.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBQ0U7QUFDSjtBQUNJO0FBQ0k7QUFDRTtBQUNOO0FBQ0U7QUFDSjtBQUNNO0FBQ007QUFDUjtBQUNNO0FBQ0M7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcz8yMWE5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdGV9IGZyb20gXCIuL2NyZWF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0b3J9IGZyb20gXCIuL2NyZWF0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2NhbH0gZnJvbSBcIi4vbG9jYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXRjaGVyfSBmcm9tIFwiLi9tYXRjaGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlfSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2VzfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRlcn0gZnJvbSBcIi4vcG9pbnRlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50ZXJzfSBmcm9tIFwiLi9wb2ludGVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdH0gZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0QWxsfSBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rpb259IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yfSBmcm9tIFwiLi9zZWxlY3Rvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yQWxsfSBmcm9tIFwiLi9zZWxlY3RvckFsbC5qc1wiO1xuZXhwb3J0IHtzdHlsZVZhbHVlIGFzIHN0eWxlfSBmcm9tIFwiLi9zZWxlY3Rpb24vc3R5bGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB3aW5kb3d9IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/local.js": /*!*******************************************************!*\ !*** ../../../node_modules/d3-selection/src/local.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ local)\n/* harmony export */ });\nvar nextId = 0;\n\nfunction local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbG9jYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUVlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9sb2NhbC5qcz84MDM4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBuZXh0SWQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2NhbCgpIHtcbiAgcmV0dXJuIG5ldyBMb2NhbDtcbn1cblxuZnVuY3Rpb24gTG9jYWwoKSB7XG4gIHRoaXMuXyA9IFwiQFwiICsgKCsrbmV4dElkKS50b1N0cmluZygzNik7XG59XG5cbkxvY2FsLnByb3RvdHlwZSA9IGxvY2FsLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IExvY2FsLFxuICBnZXQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgaWQgPSB0aGlzLl87XG4gICAgd2hpbGUgKCEoaWQgaW4gbm9kZSkpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gICAgcmV0dXJuIG5vZGVbaWRdO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5vZGVbdGhpcy5fXSA9IHZhbHVlO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fIGluIG5vZGUgJiYgZGVsZXRlIG5vZGVbdGhpcy5fXTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/local.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/matcher.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-selection/src/matcher.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"childMatcher\": () => (/* binding */ childMatcher),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nfunction childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcz8wZTlkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkTWF0Y2hlcihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/matcher.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/namespace.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-selection/src/namespace.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespaces_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces.js */ \"../../../node_modules/d3-selection/src/namespaces.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return _namespaces_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProperty(prefix) ? {space: _namespaces_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"][prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlDOztBQUV6Qyw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EsU0FBUyxxRUFBeUIsWUFBWSxPQUFPLHNEQUFVLHVCQUF1QixRQUFRO0FBQzlGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcz9kZjRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuYW1lc3BhY2VzIGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XG4gIHJldHVybiBuYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7c3BhY2U6IG5hbWVzcGFjZXNbcHJlZml4XSwgbG9jYWw6IG5hbWV9IDogbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/namespace.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/namespaces.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-selection/src/namespaces.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"xhtml\": () => (/* binding */ xhtml)\n/* harmony export */ });\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPOztBQUVQLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzPzY4OWMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/namespaces.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/pointer.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-selection/src/pointer.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent.js */ \"../../../node_modules/d3-selection/src/sourceEvent.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event, node) {\n event = (0,_sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyQzs7QUFFM0MsNkJBQWUsb0NBQVM7QUFDeEIsVUFBVSwyREFBVztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludGVyLmpzP2YyYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50LCBub2RlKSB7XG4gIGV2ZW50ID0gc291cmNlRXZlbnQoZXZlbnQpO1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSBub2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKG5vZGUpIHtcbiAgICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcbiAgICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgICB2YXIgcG9pbnQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcbiAgICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICAgIHJldHVybiBbcG9pbnQueCwgcG9pbnQueV07XG4gICAgfVxuICAgIGlmIChub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgICAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG4gICAgfVxuICB9XG4gIHJldHVybiBbZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZXTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/pointer.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/pointers.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-selection/src/pointers.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _pointer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pointer.js */ \"../../../node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var _sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent.js */ \"../../../node_modules/d3-selection/src/sourceEvent.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = (0,_sourceEvent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => (0,_pointer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event, node));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlcnMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1DO0FBQ1E7O0FBRTNDLDZCQUFlLG9DQUFTO0FBQ3hCLHVCQUF1QjtBQUN2QixhQUFhLDJEQUFXO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx1REFBTztBQUM1QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludGVycy5qcz8wMmRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwb2ludGVyIGZyb20gXCIuL3BvaW50ZXIuanNcIjtcbmltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudHMsIG5vZGUpIHtcbiAgaWYgKGV2ZW50cy50YXJnZXQpIHsgLy8gaS5lLiwgaW5zdGFuY2VvZiBFdmVudCwgbm90IFRvdWNoTGlzdCBvciBpdGVyYWJsZVxuICAgIGV2ZW50cyA9IHNvdXJjZUV2ZW50KGV2ZW50cyk7XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50cy5jdXJyZW50VGFyZ2V0O1xuICAgIGV2ZW50cyA9IGV2ZW50cy50b3VjaGVzIHx8IFtldmVudHNdO1xuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKGV2ZW50cywgZXZlbnQgPT4gcG9pbnRlcihldmVudCwgbm9kZSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/pointers.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/select.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-selection/src/select.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return typeof selector === \"string\"\n ? new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([[document.querySelector(selector)]], [document.documentElement])\n : new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([[selector]], _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.root);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFEOztBQUVyRCw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLFlBQVksMERBQVM7QUFDckIsWUFBWSwwREFBUyxlQUFlLHFEQUFJO0FBQ3hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdC5qcz9iM2NiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/select.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selectAll.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-selection/src/selectAll.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-selection/src/array.js\");\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return typeof selector === \"string\"\n ? new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.Selection([(0,_array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(selector)], _selection_index_js__WEBPACK_IMPORTED_MODULE_0__.root);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0QWxsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjtBQUNzQjs7QUFFckQsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxZQUFZLDBEQUFTO0FBQ3JCLFlBQVksMERBQVMsRUFBRSxxREFBSyxhQUFhLHFEQUFJO0FBQzdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdEFsbC5qcz9kYmI2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW2FycmF5KHNlbGVjdG9yKV0sIHJvb3QpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selectAll.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/append.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/append.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator.js */ \"../../../node_modules/d3-selection/src/creator.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var create = typeof name === \"function\" ? name : (0,_creator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvQzs7QUFFcEMsNkJBQWUsb0NBQVM7QUFDeEIsbURBQW1ELHVEQUFPO0FBQzFEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcz9lZjI2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/append.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/attr.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/attr.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace.js */ \"../../../node_modules/d3-selection/src/namespace.js\");\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var fullname = (0,_namespace_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEIsaUJBQWlCLHlEQUFTOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcz9mZTU3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/attr.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/call.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/call.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanM/M2NhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/call.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/classed.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/classed.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcz8wN2MxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/classed.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/clone.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/clone.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbG9uZS5qcz9hZGY1Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/clone.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/data.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/data.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _enter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enter.js */ \"../../../node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant.js */ \"../../../node_modules/d3-selection/src/constant.js\");\n\n\n\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new _enter_js__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new _enter_js__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new _index_js__WEBPACK_IMPORTED_MODULE_2__.Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxQztBQUNBO0FBQ0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0I7QUFDekI7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLHFCQUFxQixnREFBUztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsU0FBUyxpQkFBaUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLGlCQUFpQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLHFCQUFxQixnREFBUztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyx3REFBUTs7QUFFbkQsdUdBQXVHLE9BQU87QUFDOUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsaUJBQWlCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0RBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanM/MzIzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IG5ldyBNYXAsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApICsgXCJcIjtcbiAgICAgIGlmIChub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWUuc2V0KGtleVZhbHVlLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKSArIFwiXCI7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWUpKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZS5kZWxldGUoa2V5VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZXNbaV0pID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdHVtKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX19kYXRhX187XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCBkYXR1bSk7XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gYXJyYXlsaWtlKHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuXG4vLyBHaXZlbiBzb21lIGRhdGEsIHRoaXMgcmV0dXJucyBhbiBhcnJheS1saWtlIHZpZXcgb2YgaXQ6IGFuIG9iamVjdCB0aGF0XG4vLyBleHBvc2VzIGEgbGVuZ3RoIHByb3BlcnR5IGFuZCBhbGxvd3MgbnVtZXJpYyBpbmRleGluZy4gTm90ZSB0aGF0IHVubGlrZVxuLy8gc2VsZWN0QWxsLCB0aGlzIGlzbuKAmXQgd29ycmllZCBhYm91dCDigJxsaXZl4oCdIGNvbGxlY3Rpb25zIGJlY2F1c2UgdGhlIHJlc3VsdGluZ1xuLy8gYXJyYXkgd2lsbCBvbmx5IGJlIHVzZWQgYnJpZWZseSB3aGlsZSBkYXRhIGlzIGJlaW5nIGJvdW5kLiAoSXQgaXMgcG9zc2libGUgdG9cbi8vIGNhdXNlIHRoZSBkYXRhIHRvIGNoYW5nZSB3aGlsZSBpdGVyYXRpbmcgYnkgdXNpbmcgYSBrZXkgZnVuY3Rpb24sIGJ1dCBwbGVhc2Vcbi8vIGRvbuKAmXQ7IHdl4oCZZCByYXRoZXIgYXZvaWQgYSBncmF0dWl0b3VzIGNvcHkuKVxuZnVuY3Rpb24gYXJyYXlsaWtlKGRhdGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIFwibGVuZ3RoXCIgaW4gZGF0YVxuICAgID8gZGF0YSAvLyBBcnJheSwgVHlwZWRBcnJheSwgTm9kZUxpc3QsIGFycmF5LWxpa2VcbiAgICA6IEFycmF5LmZyb20oZGF0YSk7IC8vIE1hcCwgU2V0LCBpdGVyYWJsZSwgc3RyaW5nLCBvciBhbnl0aGluZyBlbHNlXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/data.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/datum.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/datum.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanM/Yjk5MSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/datum.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/dispatch.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/dispatch.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _window_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window.js */ \"../../../node_modules/d3-selection/src/window.js\");\n\n\nfunction dispatchEvent(node, type, params) {\n var window = (0,_window_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Rpc3BhdGNoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDOztBQUV2QztBQUNBLGVBQWUsc0RBQVc7QUFDMUI7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanM/ZjhlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/dispatch.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/each.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/each.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTOztBQUV4Qiw0REFBNEQsT0FBTztBQUNuRSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcz9kNzIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/each.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/empty.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/empty.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return !this.node();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcz8wNTk0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/empty.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/enter.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/enter.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EnterNode\": () => (/* binding */ EnterNode),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sparse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse.js */ \"../../../node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(this._enter || this._groups.map(_sparse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBaUM7QUFDSTs7QUFFckMsNkJBQWUsc0NBQVc7QUFDMUIsYUFBYSxnREFBUyxpQ0FBaUMsa0RBQU07QUFDN0Q7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxzREFBc0Q7QUFDdkYsd0NBQXdDLGdEQUFnRDtBQUN4RixzQ0FBc0MsOENBQThDO0FBQ3BGLHlDQUF5QztBQUN6QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanM/YThhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/enter.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/exit.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/exit.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sparse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse.js */ \"../../../node_modules/d3-selection/src/selection/sparse.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(this._exit || this._groups.map(_sparse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]), this._parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWlDO0FBQ0k7O0FBRXJDLDZCQUFlLHNDQUFXO0FBQzFCLGFBQWEsZ0RBQVMsZ0NBQWdDLGtEQUFNO0FBQzVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzP2JiZjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/exit.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/filter.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/filter.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"../../../node_modules/d3-selection/src/matcher.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n if (typeof match !== \"function\") match = (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBcUM7QUFDRDs7QUFFcEMsNkJBQWUsb0NBQVM7QUFDeEIsMkNBQTJDLHVEQUFPOztBQUVsRCxzRkFBc0YsT0FBTztBQUM3Riw2RkFBNkYsT0FBTztBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsZ0RBQVM7QUFDdEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcz8yYjUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/filter.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/html.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/html.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcz9kYmJjIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/html.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Selection\": () => (/* binding */ Selection),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"root\": () => (/* binding */ root)\n/* harmony export */ });\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select.js */ \"../../../node_modules/d3-selection/src/selection/select.js\");\n/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll.js */ \"../../../node_modules/d3-selection/src/selection/selectAll.js\");\n/* harmony import */ var _selectChild_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectChild.js */ \"../../../node_modules/d3-selection/src/selection/selectChild.js\");\n/* harmony import */ var _selectChildren_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectChildren.js */ \"../../../node_modules/d3-selection/src/selection/selectChildren.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./filter.js */ \"../../../node_modules/d3-selection/src/selection/filter.js\");\n/* harmony import */ var _data_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data.js */ \"../../../node_modules/d3-selection/src/selection/data.js\");\n/* harmony import */ var _enter_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./enter.js */ \"../../../node_modules/d3-selection/src/selection/enter.js\");\n/* harmony import */ var _exit_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./exit.js */ \"../../../node_modules/d3-selection/src/selection/exit.js\");\n/* harmony import */ var _join_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./join.js */ \"../../../node_modules/d3-selection/src/selection/join.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./merge.js */ \"../../../node_modules/d3-selection/src/selection/merge.js\");\n/* harmony import */ var _order_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./order.js */ \"../../../node_modules/d3-selection/src/selection/order.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/d3-selection/src/selection/sort.js\");\n/* harmony import */ var _call_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./call.js */ \"../../../node_modules/d3-selection/src/selection/call.js\");\n/* harmony import */ var _nodes_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./nodes.js */ \"../../../node_modules/d3-selection/src/selection/nodes.js\");\n/* harmony import */ var _node_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./node.js */ \"../../../node_modules/d3-selection/src/selection/node.js\");\n/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./size.js */ \"../../../node_modules/d3-selection/src/selection/size.js\");\n/* harmony import */ var _empty_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./empty.js */ \"../../../node_modules/d3-selection/src/selection/empty.js\");\n/* harmony import */ var _each_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./each.js */ \"../../../node_modules/d3-selection/src/selection/each.js\");\n/* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./attr.js */ \"../../../node_modules/d3-selection/src/selection/attr.js\");\n/* harmony import */ var _style_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./style.js */ \"../../../node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _property_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./property.js */ \"../../../node_modules/d3-selection/src/selection/property.js\");\n/* harmony import */ var _classed_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./classed.js */ \"../../../node_modules/d3-selection/src/selection/classed.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./text.js */ \"../../../node_modules/d3-selection/src/selection/text.js\");\n/* harmony import */ var _html_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./html.js */ \"../../../node_modules/d3-selection/src/selection/html.js\");\n/* harmony import */ var _raise_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./raise.js */ \"../../../node_modules/d3-selection/src/selection/raise.js\");\n/* harmony import */ var _lower_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./lower.js */ \"../../../node_modules/d3-selection/src/selection/lower.js\");\n/* harmony import */ var _append_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./append.js */ \"../../../node_modules/d3-selection/src/selection/append.js\");\n/* harmony import */ var _insert_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./insert.js */ \"../../../node_modules/d3-selection/src/selection/insert.js\");\n/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./remove.js */ \"../../../node_modules/d3-selection/src/selection/remove.js\");\n/* harmony import */ var _clone_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./clone.js */ \"../../../node_modules/d3-selection/src/selection/clone.js\");\n/* harmony import */ var _datum_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./datum.js */ \"../../../node_modules/d3-selection/src/selection/datum.js\");\n/* harmony import */ var _on_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./on.js */ \"../../../node_modules/d3-selection/src/selection/on.js\");\n/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./dispatch.js */ \"../../../node_modules/d3-selection/src/selection/dispatch.js\");\n/* harmony import */ var _iterator_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./iterator.js */ \"../../../node_modules/d3-selection/src/selection/iterator.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: _select_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n selectAll: _selectAll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n selectChild: _selectChild_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n selectChildren: _selectChildren_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n filter: _filter_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n data: _data_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n enter: _enter_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n exit: _exit_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n join: _join_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n merge: _merge_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n selection: selection_selection,\n order: _order_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n sort: _sort_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n call: _call_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n nodes: _nodes_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n node: _node_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n size: _size_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n empty: _empty_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n each: _each_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n attr: _attr_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n style: _style_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n property: _property_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n classed: _classed_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n text: _text_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n html: _html_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n raise: _raise_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n lower: _lower_js__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n append: _append_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n insert: _insert_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n remove: _remove_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n clone: _clone_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n datum: _datum_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n on: _on_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n dispatch: _dispatch_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n [Symbol.iterator]: _iterator_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (selection);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMkM7QUFDTTtBQUNJO0FBQ007QUFDaEI7QUFDSjtBQUNFO0FBQ0Y7QUFDQTtBQUNFO0FBQ0E7QUFDRjtBQUNBO0FBQ0U7QUFDRjtBQUNBO0FBQ0U7QUFDRjtBQUNBO0FBQ0U7QUFDTTtBQUNGO0FBQ047QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDRjtBQUNBO0FBQ047QUFDWTtBQUNBOztBQUV4Qzs7QUFFQTtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGtEQUFnQjtBQUMxQixhQUFhLHFEQUFtQjtBQUNoQyxlQUFlLHVEQUFxQjtBQUNwQyxrQkFBa0IsMERBQXdCO0FBQzFDLFVBQVUsa0RBQWdCO0FBQzFCLFFBQVEsZ0RBQWM7QUFDdEIsU0FBUyxpREFBZTtBQUN4QixRQUFRLGdEQUFjO0FBQ3RCLFFBQVEsZ0RBQWM7QUFDdEIsU0FBUyxpREFBZTtBQUN4QjtBQUNBLFNBQVMsa0RBQWU7QUFDeEIsUUFBUSxpREFBYztBQUN0QixRQUFRLGlEQUFjO0FBQ3RCLFNBQVMsa0RBQWU7QUFDeEIsUUFBUSxpREFBYztBQUN0QixRQUFRLGlEQUFjO0FBQ3RCLFNBQVMsa0RBQWU7QUFDeEIsUUFBUSxpREFBYztBQUN0QixRQUFRLGlEQUFjO0FBQ3RCLFNBQVMsa0RBQWU7QUFDeEIsWUFBWSxxREFBa0I7QUFDOUIsV0FBVyxvREFBaUI7QUFDNUIsUUFBUSxpREFBYztBQUN0QixRQUFRLGlEQUFjO0FBQ3RCLFNBQVMsa0RBQWU7QUFDeEIsU0FBUyxrREFBZTtBQUN4QixVQUFVLG1EQUFnQjtBQUMxQixVQUFVLG1EQUFnQjtBQUMxQixVQUFVLG1EQUFnQjtBQUMxQixTQUFTLGtEQUFlO0FBQ3hCLFNBQVMsa0RBQWU7QUFDeEIsTUFBTSwrQ0FBWTtBQUNsQixZQUFZLHFEQUFrQjtBQUM5QixxQkFBcUIscURBQWtCO0FBQ3ZDOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanM/NjMyMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCBmcm9tIFwiLi9zZWxlY3RDaGlsZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbiBmcm9tIFwiLi9zZWxlY3RDaGlsZHJlbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXMuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2l0ZXJhdG9yIGZyb20gXCIuL2l0ZXJhdG9yLmpzXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX3NlbGVjdGlvbigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICBzZWxlY3Q6IHNlbGVjdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICBkYXRhOiBzZWxlY3Rpb25fZGF0YSxcbiAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gIGpvaW46IHNlbGVjdGlvbl9qb2luLFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHNlbGVjdGlvbl9zZWxlY3Rpb24sXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2gsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25faXRlcmF0b3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/insert.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/insert.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _creator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator.js */ \"../../../node_modules/d3-selection/src/creator.js\");\n/* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector.js */ \"../../../node_modules/d3-selection/src/selector.js\");\n\n\n\nfunction constantNull() {\n return null;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, before) {\n var create = typeof name === \"function\" ? name : (0,_creator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : (0,_selector_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0M7QUFDRTs7QUFFdEM7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCLG1EQUFtRCx1REFBTztBQUMxRCx1RkFBdUYsd0RBQVE7QUFDL0Y7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzPzU3OWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/insert.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/iterator.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/iterator.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function* __WEBPACK_DEFAULT_EXPORT__() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSx1Q0FBWTtBQUMzQiw0REFBNEQsT0FBTztBQUNuRSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaXRlcmF0b3IuanM/YWQ3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/iterator.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/join.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/join.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2pvaW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzPzMxNTgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/join.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/lower.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/lower.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(lower);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanM/Y2IxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/lower.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/merge.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/merge.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(merges, this._parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQyw2QkFBZSxvQ0FBUztBQUN4Qjs7QUFFQSwrSkFBK0osT0FBTztBQUN0Syx5SEFBeUgsT0FBTztBQUNoSTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsUUFBUTtBQUNqQjtBQUNBOztBQUVBLGFBQWEsZ0RBQVM7QUFDdEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzPzM4MDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/merge.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/node.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/node.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLHNDQUFXOztBQUUxQiw0REFBNEQsT0FBTztBQUNuRSx5REFBeUQsT0FBTztBQUNoRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzP2I0OTUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/node.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/nodes.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/nodes.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return Array.from(this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcz9jNTczIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/nodes.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/on.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/on.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQsNkJBQTZCLE9BQU87QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanM/NjE3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/on.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/order.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/order.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVzs7QUFFMUIsNkRBQTZELFFBQVE7QUFDckUsNkVBQTZFLFNBQVM7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzPzU1OGEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/order.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/property.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/property.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzPzUwNDIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcHJvcGVydHlSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXNbbmFtZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgIGVsc2UgdGhpc1tuYW1lXSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cbiAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/property.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/raise.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/raise.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(raise);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanM/NzQ2ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/raise.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/remove.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/remove.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.each(remove);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzPzI5NTUiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/remove.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/select.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/select.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../selector.js */ \"../../../node_modules/d3-selection/src/selector.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n if (typeof select !== \"function\") select = (0,_selector_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBcUM7QUFDQzs7QUFFdEMsNkJBQWUsb0NBQVM7QUFDeEIsNkNBQTZDLHdEQUFROztBQUVyRCxzRkFBc0YsT0FBTztBQUM3RixnSEFBZ0gsT0FBTztBQUN2SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxnREFBUztBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzPzE0Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/select.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/selectAll.js": /*!*********************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/selectAll.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array.js */ \"../../../node_modules/d3-selection/src/array.js\");\n/* harmony import */ var _selectorAll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selectorAll.js */ \"../../../node_modules/d3-selection/src/selectorAll.js\");\n\n\n\n\nfunction arrayAll(select) {\n return function() {\n return (0,_array_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = (0,_selectorAll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Selection(subgroups, parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFDO0FBQ0w7QUFDWTs7QUFFNUM7QUFDQTtBQUNBLFdBQVcscURBQUs7QUFDaEI7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLGdCQUFnQiwyREFBVzs7QUFFM0IsMEZBQTBGLE9BQU87QUFDakcsK0RBQStELE9BQU87QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsZ0RBQVM7QUFDdEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcz9jNDI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/selectAll.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/selectChild.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/selectChild.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"../../../node_modules/d3-selection/src/matcher.js\");\n\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__.childMatcher)(match)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTJDOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLHdEQUF3RCx5REFBWTtBQUNwRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanM/OTVkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbmQgPSBBcnJheS5wcm90b3R5cGUuZmluZDtcblxuZnVuY3Rpb24gY2hpbGRGaW5kKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmluZC5jYWxsKHRoaXMuY2hpbGRyZW4sIG1hdGNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hpbGRGaXJzdCgpIHtcbiAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChtYXRjaCA9PSBudWxsID8gY2hpbGRGaXJzdFxuICAgICAgOiBjaGlsZEZpbmQodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/selectChild.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/selectChildren.js": /*!**************************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/selectChildren.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _matcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher.js */ \"../../../node_modules/d3-selection/src/matcher.js\");\n\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : (0,_matcher_js__WEBPACK_IMPORTED_MODULE_0__.childMatcher)(match)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkcmVuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTJDOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLDZEQUE2RCx5REFBWTtBQUN6RSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanM/MWM2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/selectChildren.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/size.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/size.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLHNDQUFXO0FBQzFCO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanM/NjJkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgbGV0IHNpemUgPSAwO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykgKytzaXplOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJldHVybiBzaXplO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/size.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/sort.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/sort.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1RkFBdUYsT0FBTztBQUM5Rix5R0FBeUcsT0FBTztBQUNoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxnREFBUztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanM/YmIxYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/sort.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/sparse.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/sparse.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(update) {\n return new Array(update.length);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzPzM0NTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/sparse.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/style.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/style.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"styleValue\": () => (/* binding */ styleValue)\n/* harmony export */ });\n/* harmony import */ var _window_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window.js */ \"../../../node_modules/d3-selection/src/window.js\");\n\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || (0,_window_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSxTQUFTLHNEQUFXO0FBQ3BCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcz9lZWUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/style.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selection/text.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selection/text.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcz85YjIzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHRleHRSZW1vdmUoKSB7XG4gIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gdGV4dEZ1bmN0aW9uXG4gICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selection/text.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selector.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-selection/src/selector.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction none() {}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzPzcxY2EiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbm9uZSgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selector.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/selectorAll.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-selection/src/selectorAll.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction empty() {\n return [];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcz9mNjBjIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/selectorAll.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/sourceEvent.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-selection/src/sourceEvent.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzP2VjYzYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgbGV0IHNvdXJjZUV2ZW50O1xuICB3aGlsZSAoc291cmNlRXZlbnQgPSBldmVudC5zb3VyY2VFdmVudCkgZXZlbnQgPSBzb3VyY2VFdmVudDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/sourceEvent.js\n"); /***/ }), /***/ "../../../node_modules/d3-selection/src/window.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-selection/src/window.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcz8yOTQxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-selection/src/window.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/arc.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-shape/src/arc.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-shape/src/path.js\");\n\n\n\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = (0,_path_js__WEBPACK_IMPORTED_MODULE_2__.withPath)(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi,\n a1 = endAngle.apply(this, arguments) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi,\n da = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > _math_js__WEBPACK_IMPORTED_MODULE_0__.tau - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n context.moveTo(r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a0), r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n context.moveTo(r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a1), r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) && (padRadius ? +padRadius.apply(this, arguments) : (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(r0 * r0 + r1 * r1)),\n rc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n var p0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(rp / r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(ap)),\n p1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(rp / r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(ap));\n if ((da0 -= p0 * 2) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a01),\n y01 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a01),\n x10 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a10),\n y10 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a10);\n\n // Apply rounded corners?\n if (rc > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n var x11 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a11),\n y11 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a11),\n x00 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a00),\n y00 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.acos)((ax * bx + ay * by) / ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(ax * ax + ay * ay) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(bx * bx + by * by))) / 2),\n lc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(rc, (r0 - lc) / (kc - 1));\n rc1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y01, t0.x01), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y01, t0.x01), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y11, t1.x11), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) || !(da0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y01, t0.x01), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y01, t0.x01), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y11, t1.x11), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 2;\n return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a) * r, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxQztBQUNnRTtBQUNsRTs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyw2Q0FBTztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qiw4Q0FBSTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qiw4Q0FBSSxDQUFDLDZDQUFHO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0EscUJBQXFCLHdEQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtEQUFROztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDRDQUFNO0FBQ3ZELCtDQUErQyw0Q0FBTTtBQUNyRCxhQUFhLDZDQUFHO0FBQ2hCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDZDQUFPOztBQUV0QjtBQUNBLGtCQUFrQix5Q0FBRyxHQUFHLDZDQUFPO0FBQy9CLDBCQUEwQiw2Q0FBRyxXQUFXLDZDQUFHO0FBQzNDO0FBQ0EsZUFBZSw2Q0FBTztBQUN0Qiw0QkFBNEIsNkNBQUcsV0FBVyw2Q0FBRztBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZDQUFPLHNEQUFzRCw4Q0FBSTtBQUN0RixlQUFlLDZDQUFHLENBQUMsNkNBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDZDQUFPO0FBQ3RCLGlCQUFpQiw4Q0FBSSxXQUFXLDZDQUFHO0FBQ25DLGlCQUFpQiw4Q0FBSSxXQUFXLDZDQUFHO0FBQ25DLDhCQUE4Qiw2Q0FBTztBQUNyQztBQUNBLDhCQUE4Qiw2Q0FBTztBQUNyQztBQUNBOztBQUVBLHFCQUFxQiw2Q0FBRztBQUN4QixxQkFBcUIsNkNBQUc7QUFDeEIscUJBQXFCLDZDQUFHO0FBQ3hCLHFCQUFxQiw2Q0FBRzs7QUFFeEI7QUFDQSxlQUFlLDZDQUFPO0FBQ3RCLHVCQUF1Qiw2Q0FBRztBQUMxQix1QkFBdUIsNkNBQUc7QUFDMUIsdUJBQXVCLDZDQUFHO0FBQzFCLHVCQUF1Qiw2Q0FBRztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0NBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw2Q0FBRyxDQUFDLDhDQUFJLHdCQUF3Qiw4Q0FBSSxzQkFBc0IsOENBQUk7QUFDdkYscUJBQXFCLDhDQUFJO0FBQ3pCLGtCQUFrQiw2Q0FBRztBQUNyQixrQkFBa0IsNkNBQUc7QUFDckIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDZDQUFPOztBQUV6QjtBQUNBLHFCQUFxQiw2Q0FBTztBQUM1QjtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFELCtDQUFLLGtCQUFrQiwrQ0FBSzs7QUFFakY7QUFDQTtBQUNBLHlDQUF5QywrQ0FBSyxrQkFBa0IsK0NBQUs7QUFDckUsZ0NBQWdDLCtDQUFLLGtDQUFrQywrQ0FBSztBQUM1RSx5Q0FBeUMsK0NBQUssa0JBQWtCLCtDQUFLO0FBQ3JFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLDZDQUFPLGFBQWEsNkNBQU87O0FBRTVDO0FBQ0EscUJBQXFCLDZDQUFPO0FBQzVCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxREFBcUQsK0NBQUssa0JBQWtCLCtDQUFLOztBQUVqRjtBQUNBO0FBQ0EseUNBQXlDLCtDQUFLLGtCQUFrQiwrQ0FBSztBQUNyRSxnQ0FBZ0MsK0NBQUssa0NBQWtDLCtDQUFLO0FBQzVFLHlDQUF5QywrQ0FBSyxrQkFBa0IsK0NBQUs7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEZBQTBGLHdDQUFFO0FBQzVGLFlBQVksNkNBQUcsU0FBUyw2Q0FBRztBQUMzQjs7QUFFQTtBQUNBLDJFQUEyRSx3REFBUTtBQUNuRjs7QUFFQTtBQUNBLDJFQUEyRSx3REFBUTtBQUNuRjs7QUFFQTtBQUNBLDRFQUE0RSx3REFBUTtBQUNwRjs7QUFFQTtBQUNBLDRGQUE0Rix3REFBUTtBQUNwRzs7QUFFQTtBQUNBLDBFQUEwRSx3REFBUTtBQUNsRjs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBLHdFQUF3RSx3REFBUTtBQUNoRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyYy5qcz9lZWUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHthYnMsIGFjb3MsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgbWF4LCBtaW4sIHBpLCBzaW4sIHNxcnQsIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IHt3aXRoUGF0aH0gZnJvbSBcIi4vcGF0aC5qc1wiO1xuXG5mdW5jdGlvbiBhcmNJbm5lclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLmlubmVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNPdXRlclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLm91dGVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNTdGFydEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuc3RhcnRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjRW5kQW5nbGUoZCkge1xuICByZXR1cm4gZC5lbmRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjUGFkQW5nbGUoZCkge1xuICByZXR1cm4gZCAmJiBkLnBhZEFuZ2xlOyAvLyBOb3RlOiBvcHRpb25hbCFcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0KHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5Mykge1xuICB2YXIgeDEwID0geDEgLSB4MCwgeTEwID0geTEgLSB5MCxcbiAgICAgIHgzMiA9IHgzIC0geDIsIHkzMiA9IHkzIC0geTIsXG4gICAgICB0ID0geTMyICogeDEwIC0geDMyICogeTEwO1xuICBpZiAodCAqIHQgPCBlcHNpbG9uKSByZXR1cm47XG4gIHQgPSAoeDMyICogKHkwIC0geTIpIC0geTMyICogKHgwIC0geDIpKSAvIHQ7XG4gIHJldHVybiBbeDAgKyB0ICogeDEwLCB5MCArIHQgKiB5MTBdO1xufVxuXG4vLyBDb21wdXRlIHBlcnBlbmRpY3VsYXIgb2Zmc2V0IGxpbmUgb2YgbGVuZ3RoIHJjLlxuLy8gaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9DaXJjbGUtTGluZUludGVyc2VjdGlvbi5odG1sXG5mdW5jdGlvbiBjb3JuZXJUYW5nZW50cyh4MCwgeTAsIHgxLCB5MSwgcjEsIHJjLCBjdykge1xuICB2YXIgeDAxID0geDAgLSB4MSxcbiAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICBsbyA9IChjdyA/IHJjIDogLXJjKSAvIHNxcnQoeDAxICogeDAxICsgeTAxICogeTAxKSxcbiAgICAgIG94ID0gbG8gKiB5MDEsXG4gICAgICBveSA9IC1sbyAqIHgwMSxcbiAgICAgIHgxMSA9IHgwICsgb3gsXG4gICAgICB5MTEgPSB5MCArIG95LFxuICAgICAgeDEwID0geDEgKyBveCxcbiAgICAgIHkxMCA9IHkxICsgb3ksXG4gICAgICB4MDAgPSAoeDExICsgeDEwKSAvIDIsXG4gICAgICB5MDAgPSAoeTExICsgeTEwKSAvIDIsXG4gICAgICBkeCA9IHgxMCAtIHgxMSxcbiAgICAgIGR5ID0geTEwIC0geTExLFxuICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSxcbiAgICAgIHIgPSByMSAtIHJjLFxuICAgICAgRCA9IHgxMSAqIHkxMCAtIHgxMCAqIHkxMSxcbiAgICAgIGQgPSAoZHkgPCAwID8gLTEgOiAxKSAqIHNxcnQobWF4KDAsIHIgKiByICogZDIgLSBEICogRCkpLFxuICAgICAgY3gwID0gKEQgKiBkeSAtIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MCA9ICgtRCAqIGR4IC0gZHkgKiBkKSAvIGQyLFxuICAgICAgY3gxID0gKEQgKiBkeSArIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MSA9ICgtRCAqIGR4ICsgZHkgKiBkKSAvIGQyLFxuICAgICAgZHgwID0gY3gwIC0geDAwLFxuICAgICAgZHkwID0gY3kwIC0geTAwLFxuICAgICAgZHgxID0gY3gxIC0geDAwLFxuICAgICAgZHkxID0gY3kxIC0geTAwO1xuXG4gIC8vIFBpY2sgdGhlIGNsb3NlciBvZiB0aGUgdHdvIGludGVyc2VjdGlvbiBwb2ludHMuXG4gIC8vIFRPRE8gSXMgdGhlcmUgYSBmYXN0ZXIgd2F5IHRvIGRldGVybWluZSB3aGljaCBpbnRlcnNlY3Rpb24gdG8gdXNlP1xuICBpZiAoZHgwICogZHgwICsgZHkwICogZHkwID4gZHgxICogZHgxICsgZHkxICogZHkxKSBjeDAgPSBjeDEsIGN5MCA9IGN5MTtcblxuICByZXR1cm4ge1xuICAgIGN4OiBjeDAsXG4gICAgY3k6IGN5MCxcbiAgICB4MDE6IC1veCxcbiAgICB5MDE6IC1veSxcbiAgICB4MTE6IGN4MCAqIChyMSAvIHIgLSAxKSxcbiAgICB5MTE6IGN5MCAqIChyMSAvIHIgLSAxKVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGlubmVyUmFkaXVzID0gYXJjSW5uZXJSYWRpdXMsXG4gICAgICBvdXRlclJhZGl1cyA9IGFyY091dGVyUmFkaXVzLFxuICAgICAgY29ybmVyUmFkaXVzID0gY29uc3RhbnQoMCksXG4gICAgICBwYWRSYWRpdXMgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGFyY1N0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSA9IGFyY0VuZEFuZ2xlLFxuICAgICAgcGFkQW5nbGUgPSBhcmNQYWRBbmdsZSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGFyYyk7XG5cbiAgZnVuY3Rpb24gYXJjKCkge1xuICAgIHZhciBidWZmZXIsXG4gICAgICAgIHIsXG4gICAgICAgIHIwID0gK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHIxID0gK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGEwID0gc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gaGFsZlBpLFxuICAgICAgICBhMSA9IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGRhID0gYWJzKGExIC0gYTApLFxuICAgICAgICBjdyA9IGExID4gYTA7XG5cbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb3V0ZXIgcmFkaXVzIGlzIGFsd2F5cyBsYXJnZXIgdGhhbiB0aGUgaW5uZXIgcmFkaXVzLlxuICAgIGlmIChyMSA8IHIwKSByID0gcjEsIHIxID0gcjAsIHIwID0gcjtcblxuICAgIC8vIElzIGl0IGEgcG9pbnQ/XG4gICAgaWYgKCEocjEgPiBlcHNpbG9uKSkgY29udGV4dC5tb3ZlVG8oMCwgMCk7XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmNsZSBvciBhbm51bHVzP1xuICAgIGVsc2UgaWYgKGRhID4gdGF1IC0gZXBzaWxvbikge1xuICAgICAgY29udGV4dC5tb3ZlVG8ocjEgKiBjb3MoYTApLCByMSAqIHNpbihhMCkpO1xuICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjEsIGEwLCBhMSwgIWN3KTtcbiAgICAgIGlmIChyMCA+IGVwc2lsb24pIHtcbiAgICAgICAgY29udGV4dC5tb3ZlVG8ocjAgKiBjb3MoYTEpLCByMCAqIHNpbihhMSkpO1xuICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMCwgYTEsIGEwLCBjdyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3IgaXMgaXQgYSBjaXJjdWxhciBvciBhbm51bGFyIHNlY3Rvcj9cbiAgICBlbHNlIHtcbiAgICAgIHZhciBhMDEgPSBhMCxcbiAgICAgICAgICBhMTEgPSBhMSxcbiAgICAgICAgICBhMDAgPSBhMCxcbiAgICAgICAgICBhMTAgPSBhMSxcbiAgICAgICAgICBkYTAgPSBkYSxcbiAgICAgICAgICBkYTEgPSBkYSxcbiAgICAgICAgICBhcCA9IHBhZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLyAyLFxuICAgICAgICAgIHJwID0gKGFwID4gZXBzaWxvbikgJiYgKHBhZFJhZGl1cyA/ICtwYWRSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNxcnQocjAgKiByMCArIHIxICogcjEpKSxcbiAgICAgICAgICByYyA9IG1pbihhYnMocjEgLSByMCkgLyAyLCArY29ybmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpLFxuICAgICAgICAgIHJjMCA9IHJjLFxuICAgICAgICAgIHJjMSA9IHJjLFxuICAgICAgICAgIHQwLFxuICAgICAgICAgIHQxO1xuXG4gICAgICAvLyBBcHBseSBwYWRkaW5nPyBOb3RlIHRoYXQgc2luY2UgcjEg4omlIHIwLCBkYTEg4omlIGRhMC5cbiAgICAgIGlmIChycCA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHAwID0gYXNpbihycCAvIHIwICogc2luKGFwKSksXG4gICAgICAgICAgICBwMSA9IGFzaW4ocnAgLyByMSAqIHNpbihhcCkpO1xuICAgICAgICBpZiAoKGRhMCAtPSBwMCAqIDIpID4gZXBzaWxvbikgcDAgKj0gKGN3ID8gMSA6IC0xKSwgYTAwICs9IHAwLCBhMTAgLT0gcDA7XG4gICAgICAgIGVsc2UgZGEwID0gMCwgYTAwID0gYTEwID0gKGEwICsgYTEpIC8gMjtcbiAgICAgICAgaWYgKChkYTEgLT0gcDEgKiAyKSA+IGVwc2lsb24pIHAxICo9IChjdyA/IDEgOiAtMSksIGEwMSArPSBwMSwgYTExIC09IHAxO1xuICAgICAgICBlbHNlIGRhMSA9IDAsIGEwMSA9IGExMSA9IChhMCArIGExKSAvIDI7XG4gICAgICB9XG5cbiAgICAgIHZhciB4MDEgPSByMSAqIGNvcyhhMDEpLFxuICAgICAgICAgIHkwMSA9IHIxICogc2luKGEwMSksXG4gICAgICAgICAgeDEwID0gcjAgKiBjb3MoYTEwKSxcbiAgICAgICAgICB5MTAgPSByMCAqIHNpbihhMTApO1xuXG4gICAgICAvLyBBcHBseSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBpZiAocmMgPiBlcHNpbG9uKSB7XG4gICAgICAgIHZhciB4MTEgPSByMSAqIGNvcyhhMTEpLFxuICAgICAgICAgICAgeTExID0gcjEgKiBzaW4oYTExKSxcbiAgICAgICAgICAgIHgwMCA9IHIwICogY29zKGEwMCksXG4gICAgICAgICAgICB5MDAgPSByMCAqIHNpbihhMDApLFxuICAgICAgICAgICAgb2M7XG5cbiAgICAgICAgLy8gUmVzdHJpY3QgdGhlIGNvcm5lciByYWRpdXMgYWNjb3JkaW5nIHRvIHRoZSBzZWN0b3IgYW5nbGUuIElmIHRoaXNcbiAgICAgICAgLy8gaW50ZXJzZWN0aW9uIGZhaWxzLCBpdOKAmXMgcHJvYmFibHkgYmVjYXVzZSB0aGUgYXJjIGlzIHRvbyBzbWFsbCwgc29cbiAgICAgICAgLy8gZGlzYWJsZSB0aGUgY29ybmVyIHJhZGl1cyBlbnRpcmVseS5cbiAgICAgICAgaWYgKGRhIDwgcGkpIHtcbiAgICAgICAgICBpZiAob2MgPSBpbnRlcnNlY3QoeDAxLCB5MDEsIHgwMCwgeTAwLCB4MTEsIHkxMSwgeDEwLCB5MTApKSB7XG4gICAgICAgICAgICB2YXIgYXggPSB4MDEgLSBvY1swXSxcbiAgICAgICAgICAgICAgICBheSA9IHkwMSAtIG9jWzFdLFxuICAgICAgICAgICAgICAgIGJ4ID0geDExIC0gb2NbMF0sXG4gICAgICAgICAgICAgICAgYnkgPSB5MTEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgICBrYyA9IDEgLyBzaW4oYWNvcygoYXggKiBieCArIGF5ICogYnkpIC8gKHNxcnQoYXggKiBheCArIGF5ICogYXkpICogc3FydChieCAqIGJ4ICsgYnkgKiBieSkpKSAvIDIpLFxuICAgICAgICAgICAgICAgIGxjID0gc3FydChvY1swXSAqIG9jWzBdICsgb2NbMV0gKiBvY1sxXSk7XG4gICAgICAgICAgICByYzAgPSBtaW4ocmMsIChyMCAtIGxjKSAvIChrYyAtIDEpKTtcbiAgICAgICAgICAgIHJjMSA9IG1pbihyYywgKHIxIC0gbGMpIC8gKGtjICsgMSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYzAgPSByYzEgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJcyB0aGUgc2VjdG9yIGNvbGxhcHNlZCB0byBhIGxpbmU/XG4gICAgICBpZiAoIShkYTEgPiBlcHNpbG9uKSkgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIG91dGVyIHJpbmcgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzEgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDAwLCB5MDAsIHgwMSwgeTAxLCByMSwgcmMxLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDExLCB5MTEsIHgxMCwgeTEwLCByMSwgcmMxLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMSA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMSwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIG91dGVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpLCBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAxLCBhMTEsICFjdyk7XG5cbiAgICAgIC8vIElzIHRoZXJlIG5vIGlubmVyIHJpbmcsIGFuZCBpdOKAmXMgYSBjaXJjdWxhciBzZWN0b3I/XG4gICAgICAvLyBPciBwZXJoYXBzIGl04oCZcyBhbiBhbm51bGFyIHNlY3RvciBjb2xsYXBzZWQgZHVlIHRvIHBhZGRpbmc/XG4gICAgICBpZiAoIShyMCA+IGVwc2lsb24pIHx8ICEoZGEwID4gZXBzaWxvbikpIGNvbnRleHQubGluZVRvKHgxMCwgeTEwKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBpbm5lciByaW5nIChvciBwb2ludCkgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDEwLCB5MTAsIHgxMSwgeTExLCByMCwgLXJjMCwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgwMSwgeTAxLCB4MDAsIHkwMCwgcjAsIC1yYzAsIGN3KTtcblxuICAgICAgICBjb250ZXh0LmxpbmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMwIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCBjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzAsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBpbm5lciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMTAsIGEwMCwgY3cpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGFyYy5jZW50cm9pZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gKCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMixcbiAgICAgICAgYSA9ICgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK2VuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiAtIHBpIC8gMjtcbiAgICByZXR1cm4gW2NvcyhhKSAqIHIsIHNpbihhKSAqIHJdO1xuICB9O1xuXG4gIGFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogaW5uZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLm91dGVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG91dGVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBvdXRlclJhZGl1cztcbiAgfTtcblxuICBhcmMuY29ybmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvcm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogY29ybmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkUmFkaXVzID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgYXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBhcmMucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8pLCBhcmMpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gYXJjO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/arc.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/area.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/area.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-shape/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./curve/linear.js */ \"../../../node_modules/d3-shape/src/curve/linear.js\");\n/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./line.js */ \"../../../node_modules/d3-shape/src/line.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-shape/src/path.js\");\n/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./point.js */ \"../../../node_modules/d3-shape/src/point.js\");\n\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x0, y0, y1) {\n var x1 = null,\n defined = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(true),\n context = null,\n curve = _curve_linear_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n output = null,\n path = (0,_path_js__WEBPACK_IMPORTED_MODULE_2__.withPath)(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? _point_js__WEBPACK_IMPORTED_MODULE_3__.x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(0) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? _point_js__WEBPACK_IMPORTED_MODULE_3__.y : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = (0,_array_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return (0,_line_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDTTtBQUNPO0FBQ2Y7QUFDTTtBQUNpQjs7QUFFcEQsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxnQkFBZ0Isd0RBQVE7QUFDeEI7QUFDQSxjQUFjLHdEQUFXO0FBQ3pCO0FBQ0EsYUFBYSxrREFBUTs7QUFFckIsNERBQTRELHdDQUFNLEdBQUcsd0RBQVE7QUFDN0UsNERBQTRELHdEQUFRLE1BQU0sd0RBQVE7QUFDbEYsNERBQTRELHdDQUFNLEdBQUcsd0RBQVE7O0FBRTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFEQUFLO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsMEJBQTBCLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxvREFBSTtBQUNmOztBQUVBO0FBQ0Esa0VBQWtFLHdEQUFRO0FBQzFFOztBQUVBO0FBQ0Esa0VBQWtFLHdEQUFRO0FBQzFFOztBQUVBO0FBQ0EscUZBQXFGLHdEQUFRO0FBQzdGOztBQUVBO0FBQ0Esa0VBQWtFLHdEQUFRO0FBQzFFOztBQUVBO0FBQ0Esa0VBQWtFLHdEQUFRO0FBQzFFOztBQUVBO0FBQ0EscUZBQXFGLHdEQUFRO0FBQzdGOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1RUFBdUUsd0RBQVE7QUFDL0U7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJlYS5qcz9jNjhiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5pbXBvcnQgbGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeDAsIHkwLCB5MSkge1xuICB2YXIgeDEgPSBudWxsLFxuICAgICAgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbCxcbiAgICAgIHBhdGggPSB3aXRoUGF0aChhcmVhKTtcblxuICB4MCA9IHR5cGVvZiB4MCA9PT0gXCJmdW5jdGlvblwiID8geDAgOiAoeDAgPT09IHVuZGVmaW5lZCkgPyBwb2ludFggOiBjb25zdGFudCgreDApO1xuICB5MCA9IHR5cGVvZiB5MCA9PT0gXCJmdW5jdGlvblwiID8geTAgOiAoeTAgPT09IHVuZGVmaW5lZCkgPyBjb25zdGFudCgwKSA6IGNvbnN0YW50KCt5MCk7XG4gIHkxID0gdHlwZW9mIHkxID09PSBcImZ1bmN0aW9uXCIgPyB5MSA6ICh5MSA9PT0gdW5kZWZpbmVkKSA/IHBvaW50WSA6IGNvbnN0YW50KCt5MSk7XG5cbiAgZnVuY3Rpb24gYXJlYShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgeDB6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICB5MHogPSBuZXcgQXJyYXkobik7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSB7XG4gICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFTdGFydCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsgayA+PSBqOyAtLWspIHtcbiAgICAgICAgICAgIG91dHB1dC5wb2ludCh4MHpba10sIHkweltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFFbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSB7XG4gICAgICAgIHgweltpXSA9ICt4MChkLCBpLCBkYXRhKSwgeTB6W2ldID0gK3kwKGQsIGksIGRhdGEpO1xuICAgICAgICBvdXRwdXQucG9pbnQoeDEgPyAreDEoZCwgaSwgZGF0YSkgOiB4MHpbaV0sIHkxID8gK3kxKGQsIGksIGRhdGEpIDogeTB6W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYWxpbmUoKSB7XG4gICAgcmV0dXJuIGxpbmUoKS5kZWZpbmVkKGRlZmluZWQpLmN1cnZlKGN1cnZlKS5jb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgYXJlYS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHgxID0gbnVsbCwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MTtcbiAgfTtcblxuICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeTEgPSBudWxsLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkxO1xuICB9O1xuXG4gIGFyZWEubGluZVgwID1cbiAgYXJlYS5saW5lWTAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmxpbmVZMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTEpO1xuICB9O1xuXG4gIGFyZWEubGluZVgxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MSkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGFyZWEpIDogZGVmaW5lZDtcbiAgfTtcblxuICBhcmVhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGFyZWEpIDogY3VydmU7XG4gIH07XG5cbiAgYXJlYS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBhcmVhKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyZWE7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/area.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/areaRadial.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/areaRadial.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _curve_radial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./curve/radial.js */ \"../../../node_modules/d3-shape/src/curve/radial.js\");\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-shape/src/area.js\");\n/* harmony import */ var _lineRadial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lineRadial.js */ \"../../../node_modules/d3-shape/src/lineRadial.js\");\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var a = (0,_area_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().curve(_curve_radial_js__WEBPACK_IMPORTED_MODULE_1__.curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c((0,_curve_radial_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_)) : c()._curve;\n };\n\n return a;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhUmFkaWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBaUU7QUFDcEM7QUFDYzs7QUFFM0MsNkJBQWUsc0NBQVc7QUFDMUIsVUFBVSxvREFBSSxTQUFTLCtEQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPLDBEQUFVLFNBQVM7QUFDNUQsZ0NBQWdDLE9BQU8sMERBQVUsU0FBUztBQUMxRCxtQ0FBbUMsT0FBTywwREFBVSxTQUFTO0FBQzdELG1DQUFtQyxPQUFPLDBEQUFVLFNBQVM7O0FBRTdEO0FBQ0EsZ0NBQWdDLDREQUFXO0FBQzNDOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhUmFkaWFsLmpzPzA4OGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN1cnZlUmFkaWFsLCB7Y3VydmVSYWRpYWxMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL3JhZGlhbC5qc1wiO1xuaW1wb3J0IGFyZWEgZnJvbSBcIi4vYXJlYS5qc1wiO1xuaW1wb3J0IHtsaW5lUmFkaWFsfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgYSA9IGFyZWEoKS5jdXJ2ZShjdXJ2ZVJhZGlhbExpbmVhciksXG4gICAgICBjID0gYS5jdXJ2ZSxcbiAgICAgIHgwID0gYS5saW5lWDAsXG4gICAgICB4MSA9IGEubGluZVgxLFxuICAgICAgeTAgPSBhLmxpbmVZMCxcbiAgICAgIHkxID0gYS5saW5lWTE7XG5cbiAgYS5hbmdsZSA9IGEueCwgZGVsZXRlIGEueDtcbiAgYS5zdGFydEFuZ2xlID0gYS54MCwgZGVsZXRlIGEueDA7XG4gIGEuZW5kQW5nbGUgPSBhLngxLCBkZWxldGUgYS54MTtcbiAgYS5yYWRpdXMgPSBhLnksIGRlbGV0ZSBhLnk7XG4gIGEuaW5uZXJSYWRpdXMgPSBhLnkwLCBkZWxldGUgYS55MDtcbiAgYS5vdXRlclJhZGl1cyA9IGEueTEsIGRlbGV0ZSBhLnkxO1xuICBhLmxpbmVTdGFydEFuZ2xlID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHgwKCkpOyB9LCBkZWxldGUgYS5saW5lWDA7XG4gIGEubGluZUVuZEFuZ2xlID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHgxKCkpOyB9LCBkZWxldGUgYS5saW5lWDE7XG4gIGEubGluZUlubmVyUmFkaXVzID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHkwKCkpOyB9LCBkZWxldGUgYS5saW5lWTA7XG4gIGEubGluZU91dGVyUmFkaXVzID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHkxKCkpOyB9LCBkZWxldGUgYS5saW5lWTE7XG5cbiAgYS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGMoY3VydmVSYWRpYWwoXykpIDogYygpLl9jdXJ2ZTtcbiAgfTtcblxuICByZXR1cm4gYTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/areaRadial.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/array.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-shape/src/array.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"slice\": () => (/* binding */ slice)\n/* harmony export */ });\nvar slice = Array.prototype.slice;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPOztBQUVQLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcz80MWVhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIFwibGVuZ3RoXCIgaW4geFxuICAgID8geCAvLyBBcnJheSwgVHlwZWRBcnJheSwgTm9kZUxpc3QsIGFycmF5LWxpa2VcbiAgICA6IEFycmF5LmZyb20oeCk7IC8vIE1hcCwgU2V0LCBpdGVyYWJsZSwgc3RyaW5nLCBvciBhbnl0aGluZyBlbHNlXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/array.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/constant.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-shape/src/constant.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function constant() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcz8xMzIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/basis.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/basis.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Basis\": () => (/* binding */ Basis),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"point\": () => (/* binding */ point)\n/* harmony export */ });\nfunction point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nfunction Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new Basis(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLCtDQUErQztBQUMvQyx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixzRUFBc0U7QUFDckcsK0JBQStCO0FBQy9CLCtCQUErQixvRkFBb0Y7QUFDbkgsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzLmpzP2FkYmYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgICgyICogdGhhdC5feDAgKyB0aGF0Ll94MSkgLyAzLFxuICAgICgyICogdGhhdC5feTAgKyB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDIgKiB0aGF0Ll94MSkgLyAzLFxuICAgICh0aGF0Ll95MCArIDIgKiB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDQgKiB0aGF0Ll94MSArIHgpIC8gNixcbiAgICAodGhhdC5feTAgKyA0ICogdGhhdC5feTEgKyB5KSAvIDZcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhc2lzKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fY29udGV4dC5saW5lVG8oKDUgKiB0aGlzLl94MCArIHRoaXMuX3gxKSAvIDYsICg1ICogdGhpcy5feTAgKyB0aGlzLl95MSkgLyA2KTsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXMoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/basis.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/basisClosed.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/basisClosed.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-shape/src/noop.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-shape/src/curve/basis.js\");\n\n\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: (0,_basis_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new BasisClosed(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc0Nsb3NlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEI7QUFDRzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxnREFBSTtBQUNqQixXQUFXLGdEQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsNEJBQTRCO0FBQzNELCtCQUErQiw0QkFBNEI7QUFDM0QsK0JBQStCLDRCQUE0Qiw0RkFBNEY7QUFDdkosZUFBZSxnREFBSyxjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzQ2xvc2VkLmpzPzRiNjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcbmltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmZ1bmN0aW9uIEJhc2lzQ2xvc2VkKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzQ2xvc2VkLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBub29wLFxuICBhcmVhRW5kOiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9IHRoaXMuX3gzID0gdGhpcy5feDQgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyICsgMiAqIHRoaXMuX3gzKSAvIDMsICh0aGlzLl95MiArIDIgKiB0aGlzLl95MykgLyAzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzICsgMiAqIHRoaXMuX3gyKSAvIDMsICh0aGlzLl95MyArIDIgKiB0aGlzLl95MikgLyAzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MiwgdGhpcy5feTIpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MiA9IHgsIHRoaXMuX3kyID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5feDMgPSB4LCB0aGlzLl95MyA9IHk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g0ID0geCwgdGhpcy5feTQgPSB5OyB0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDAgKyA0ICogdGhpcy5feDEgKyB4KSAvIDYsICh0aGlzLl95MCArIDQgKiB0aGlzLl95MSArIHkpIC8gNik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXNDbG9zZWQoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/basisClosed.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/basisOpen.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/basisOpen.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-shape/src/curve/basis.js\");\n\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new BasisOpen(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc09wZW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQiwrQkFBK0Isb0ZBQW9GLDBFQUEwRTtBQUM3TCwrQkFBK0I7QUFDL0IsZUFBZSxnREFBSyxjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzT3Blbi5qcz82NzI2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmZ1bmN0aW9uIEJhc2lzT3Blbihjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpc09wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB2YXIgeDAgPSAodGhpcy5feDAgKyA0ICogdGhpcy5feDEgKyB4KSAvIDYsIHkwID0gKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2OyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeDAsIHkwKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgwLCB5MCk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzT3Blbihjb250ZXh0KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/basisOpen.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/bump.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/bump.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"bumpRadial\": () => (/* binding */ bumpRadial),\n/* harmony export */ \"bumpX\": () => (/* binding */ bumpX),\n/* harmony export */ \"bumpY\": () => (/* binding */ bumpY)\n/* harmony export */ });\n/* harmony import */ var _pointRadial_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pointRadial.js */ \"../../../node_modules/d3-shape/src/pointRadial.js\");\n\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this._x0, this._y0);\n const p1 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x, this._y0);\n const p3 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nfunction bumpX(context) {\n return new Bump(context, true);\n}\n\nfunction bumpY(context) {\n return new Bump(context, false);\n}\n\nfunction bumpRadial(context) {\n return new BumpRadial(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9idW1wLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLGlCQUFpQiwyREFBVztBQUM1QixpQkFBaUIsMkRBQVc7QUFDNUIsaUJBQWlCLDJEQUFXO0FBQzVCLGlCQUFpQiwyREFBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9idW1wLmpzPzczM2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5jbGFzcyBCdW1wIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgeCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX3ggPSB4O1xuICB9XG4gIGFyZWFTdGFydCgpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfVxuICBhcmVhRW5kKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH1cbiAgbGluZVN0YXJ0KCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfVxuICBsaW5lRW5kKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH1cbiAgcG9pbnQoeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDoge1xuICAgICAgICB0aGlzLl9wb2ludCA9IDE7XG4gICAgICAgIGlmICh0aGlzLl9saW5lKSB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgZWxzZSB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAodGhpcy5feCkgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwID0gKHRoaXMuX3gwICsgeCkgLyAyLCB0aGlzLl95MCwgdGhpcy5feDAsIHksIHgsIHkpO1xuICAgICAgICBlbHNlIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCwgdGhpcy5feTAgPSAodGhpcy5feTAgKyB5KSAvIDIsIHgsIHRoaXMuX3kwLCB4LCB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3gwID0geCwgdGhpcy5feTAgPSB5O1xuICB9XG59XG5cbmNsYXNzIEJ1bXBSYWRpYWwge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cbiAgbGluZVN0YXJ0KCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfVxuICBsaW5lRW5kKCkge31cbiAgcG9pbnQoeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIGlmICh0aGlzLl9wb2ludCA9PT0gMCkge1xuICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwMCA9IHBvaW50UmFkaWFsKHRoaXMuX3gwLCB0aGlzLl95MCk7XG4gICAgICBjb25zdCBwMSA9IHBvaW50UmFkaWFsKHRoaXMuX3gwLCB0aGlzLl95MCA9ICh0aGlzLl95MCArIHkpIC8gMik7XG4gICAgICBjb25zdCBwMiA9IHBvaW50UmFkaWFsKHgsIHRoaXMuX3kwKTtcbiAgICAgIGNvbnN0IHAzID0gcG9pbnRSYWRpYWwoeCwgeSk7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyguLi5wMCk7XG4gICAgICB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oLi4ucDEsIC4uLnAyLCAuLi5wMyk7XG4gICAgfVxuICAgIHRoaXMuX3gwID0geCwgdGhpcy5feTAgPSB5O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wWChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQnVtcChjb250ZXh0LCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXBZKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCdW1wKGNvbnRleHQsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXBSYWRpYWwoY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJ1bXBSYWRpYWwoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/bump.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/bundle.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/bundle.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"../../../node_modules/d3-shape/src/curve/basis.js\");\n\n\nfunction Bundle(context, beta) {\n this._basis = new _basis_js__WEBPACK_IMPORTED_MODULE_0__.Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new _basis_js__WEBPACK_IMPORTED_MODULE_0__.Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9idW5kbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUM7O0FBRWpDO0FBQ0Esb0JBQW9CLDRDQUFLO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTs7QUFFZjtBQUNBLDRCQUE0Qiw0Q0FBSztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcz8yZDBkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmZ1bmN0aW9uIEJ1bmRsZShjb250ZXh0LCBiZXRhKSB7XG4gIHRoaXMuX2Jhc2lzID0gbmV3IEJhc2lzKGNvbnRleHQpO1xuICB0aGlzLl9iZXRhID0gYmV0YTtcbn1cblxuQnVuZGxlLnByb3RvdHlwZSA9IHtcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gW107XG4gICAgdGhpcy5feSA9IFtdO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IHRoaXMuX3gsXG4gICAgICAgIHkgPSB0aGlzLl95LFxuICAgICAgICBqID0geC5sZW5ndGggLSAxO1xuXG4gICAgaWYgKGogPiAwKSB7XG4gICAgICB2YXIgeDAgPSB4WzBdLFxuICAgICAgICAgIHkwID0geVswXSxcbiAgICAgICAgICBkeCA9IHhbal0gLSB4MCxcbiAgICAgICAgICBkeSA9IHlbal0gLSB5MCxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgdDtcblxuICAgICAgd2hpbGUgKCsraSA8PSBqKSB7XG4gICAgICAgIHQgPSBpIC8gajtcbiAgICAgICAgdGhpcy5fYmFzaXMucG9pbnQoXG4gICAgICAgICAgdGhpcy5fYmV0YSAqIHhbaV0gKyAoMSAtIHRoaXMuX2JldGEpICogKHgwICsgdCAqIGR4KSxcbiAgICAgICAgICB0aGlzLl9iZXRhICogeVtpXSArICgxIC0gdGhpcy5fYmV0YSkgKiAoeTAgKyB0ICogZHkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVFbmQoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl94LnB1c2goK3gpO1xuICAgIHRoaXMuX3kucHVzaCgreSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYmV0YSkge1xuXG4gIGZ1bmN0aW9uIGJ1bmRsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGJldGEgPT09IDEgPyBuZXcgQmFzaXMoY29udGV4dCkgOiBuZXcgQnVuZGxlKGNvbnRleHQsIGJldGEpO1xuICB9XG5cbiAgYnVuZGxlLmJldGEgPSBmdW5jdGlvbihiZXRhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYmV0YSk7XG4gIH07XG5cbiAgcmV0dXJuIGJ1bmRsZTtcbn0pKDAuODUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/bundle.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/cardinal.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/cardinal.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cardinal\": () => (/* binding */ Cardinal),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"point\": () => (/* binding */ point)\n/* harmony export */ });\nfunction point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nfunction Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hELCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHNFQUFzRTtBQUNyRywrQkFBK0IsNEJBQTRCO0FBQzNELCtCQUErQjtBQUMvQixrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcz83YTdiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwb2ludCh0aGF0LCB4LCB5KSB7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhcbiAgICB0aGF0Ll94MSArIHRoYXQuX2sgKiAodGhhdC5feDIgLSB0aGF0Ll94MCksXG4gICAgdGhhdC5feTEgKyB0aGF0Ll9rICogKHRoYXQuX3kyIC0gdGhhdC5feTApLFxuICAgIHRoYXQuX3gyICsgdGhhdC5fayAqICh0aGF0Ll94MSAtIHgpLFxuICAgIHRoYXQuX3kyICsgdGhhdC5fayAqICh0aGF0Ll95MSAtIHkpLFxuICAgIHRoYXQuX3gyLFxuICAgIHRoYXQuX3kyXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYXJkaW5hbChjb250ZXh0LCB0ZW5zaW9uKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9rID0gKDEgLSB0ZW5zaW9uKSAvIDY7XG59XG5cbkNhcmRpbmFsLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5feDEgPSB4LCB0aGlzLl95MSA9IHk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/cardinal.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/cardinalClosed.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/cardinalClosed.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CardinalClosed\": () => (/* binding */ CardinalClosed),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-shape/src/noop.js\");\n/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal.js */ \"../../../node_modules/d3-shape/src/curve/cardinal.js\");\n\n\n\nfunction CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: (0,_cardinal_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbENsb3NlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQThCO0FBQ007O0FBRTdCO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxnREFBSTtBQUNqQixXQUFXLGdEQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDRCQUE0QjtBQUMzRCwrQkFBK0Isa0RBQWtEO0FBQ2pGLCtCQUErQiw0QkFBNEI7QUFDM0QsZUFBZSxtREFBSyxjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsSUFBSSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxDbG9zZWQuanM/MGRhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2FyZGluYWwuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDUsIHRoaXMuX3k1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHkpOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NSA9IHgsIHRoaXMuX3k1ID0geTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/cardinalClosed.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/cardinalOpen.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/cardinalOpen.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CardinalOpen\": () => (/* binding */ CardinalOpen),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinal.js */ \"../../../node_modules/d3-shape/src/curve/cardinal.js\");\n\n\nfunction CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: (0,_cardinal_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9DOztBQUU3QjtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQiwrQkFBK0Isa0dBQWtHO0FBQ2pJLCtCQUErQjtBQUMvQixlQUFlLG1EQUFLLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanM/Mzc3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxPcGVuKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxPcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/cardinalOpen.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/catmullRom.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/catmullRom.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"point\": () => (/* binding */ point)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal.js */ \"../../../node_modules/d3-shape/src/curve/cardinal.js\");\n\n\n\nfunction point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new _cardinal_js__WEBPACK_IMPORTED_MODULE_1__.Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUM7QUFDSTs7QUFFaEM7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsNkNBQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsNkNBQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hELDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCLHNFQUFzRTtBQUNyRywrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7O0FBRWY7QUFDQSx3REFBd0Qsa0RBQVE7QUFDaEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzPzk3ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtlcHNpbG9ufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHtDYXJkaW5hbH0gZnJvbSBcIi4vY2FyZGluYWwuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdmFyIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgeDIgPSB0aGF0Ll94MixcbiAgICAgIHkyID0gdGhhdC5feTI7XG5cbiAgaWYgKHRoYXQuX2wwMV9hID4gZXBzaWxvbikge1xuICAgIHZhciBhID0gMiAqIHRoYXQuX2wwMV8yYSArIDMgKiB0aGF0Ll9sMDFfYSAqIHRoYXQuX2wxMl9hICsgdGhhdC5fbDEyXzJhLFxuICAgICAgICBuID0gMyAqIHRoYXQuX2wwMV9hICogKHRoYXQuX2wwMV9hICsgdGhhdC5fbDEyX2EpO1xuICAgIHgxID0gKHgxICogYSAtIHRoYXQuX3gwICogdGhhdC5fbDEyXzJhICsgdGhhdC5feDIgKiB0aGF0Ll9sMDFfMmEpIC8gbjtcbiAgICB5MSA9ICh5MSAqIGEgLSB0aGF0Ll95MCAqIHRoYXQuX2wxMl8yYSArIHRoYXQuX3kyICogdGhhdC5fbDAxXzJhKSAvIG47XG4gIH1cblxuICBpZiAodGhhdC5fbDIzX2EgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGIgPSAyICogdGhhdC5fbDIzXzJhICsgMyAqIHRoYXQuX2wyM19hICogdGhhdC5fbDEyX2EgKyB0aGF0Ll9sMTJfMmEsXG4gICAgICAgIG0gPSAzICogdGhhdC5fbDIzX2EgKiAodGhhdC5fbDIzX2EgKyB0aGF0Ll9sMTJfYSk7XG4gICAgeDIgPSAoeDIgKiBiICsgdGhhdC5feDEgKiB0aGF0Ll9sMjNfMmEgLSB4ICogdGhhdC5fbDEyXzJhKSAvIG07XG4gICAgeTIgPSAoeTIgKiBiICsgdGhhdC5feTEgKiB0aGF0Ll9sMjNfMmEgLSB5ICogdGhhdC5fbDEyXzJhKSAvIG07XG4gIH1cblxuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHRoYXQuX3gyLCB0aGF0Ll95Mik7XG59XG5cbmZ1bmN0aW9uIENhdG11bGxSb20oY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb20ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYSA9XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhID1cbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMucG9pbnQodGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG5cbiAgICBpZiAodGhpcy5fcG9pbnQpIHtcbiAgICAgIHZhciB4MjMgPSB0aGlzLl94MiAtIHgsXG4gICAgICAgICAgeTIzID0gdGhpcy5feTIgLSB5O1xuICAgICAgdGhpcy5fbDIzX2EgPSBNYXRoLnNxcnQodGhpcy5fbDIzXzJhID0gTWF0aC5wb3coeDIzICogeDIzICsgeTIzICogeTIzLCB0aGlzLl9hbHBoYSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EsIHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2E7XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhLCB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmE7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShhbHBoYSkge1xuXG4gIGZ1bmN0aW9uIGNhdG11bGxSb20oY29udGV4dCkge1xuICAgIHJldHVybiBhbHBoYSA/IG5ldyBDYXRtdWxsUm9tKGNvbnRleHQsIGFscGhhKSA6IG5ldyBDYXJkaW5hbChjb250ZXh0LCAwKTtcbiAgfVxuXG4gIGNhdG11bGxSb20uYWxwaGEgPSBmdW5jdGlvbihhbHBoYSkge1xuICAgIHJldHVybiBjdXN0b20oK2FscGhhKTtcbiAgfTtcblxuICByZXR1cm4gY2F0bXVsbFJvbTtcbn0pKDAuNSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/catmullRom.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/catmullRomClosed.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/catmullRomClosed.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _cardinalClosed_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cardinalClosed.js */ \"../../../node_modules/d3-shape/src/curve/cardinalClosed.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-shape/src/noop.js\");\n/* harmony import */ var _catmullRom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./catmullRom.js */ \"../../../node_modules/d3-shape/src/curve/catmullRom.js\");\n\n\n\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: (0,_catmullRom_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed_js__WEBPACK_IMPORTED_MODULE_2__.CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUQ7QUFDckI7QUFDUTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLGdEQUFJO0FBQ2pCLFdBQVcsZ0RBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCLDRCQUE0QjtBQUMzRCwrQkFBK0Isa0RBQWtEO0FBQ2pGLCtCQUErQiw0QkFBNEI7QUFDM0QsZUFBZSxxREFBSyxjQUFjO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTs7QUFFZjtBQUNBLDhEQUE4RCw4REFBYztBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanM/NmZjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NhcmRpbmFsQ2xvc2VkfSBmcm9tIFwiLi9jYXJkaW5hbENsb3NlZC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcbmltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhdG11bGxSb20uanNcIjtcblxuZnVuY3Rpb24gQ2F0bXVsbFJvbUNsb3NlZChjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbUNsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID0gdGhpcy5feDUgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSB0aGlzLl95NSA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDUsIHRoaXMuX3k1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5feDMgPSB4LCB0aGlzLl95MyA9IHk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0ID0geCwgdGhpcy5feTQgPSB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5feDUgPSB4LCB0aGlzLl95NSA9IHk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EsIHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2E7XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhLCB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmE7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShhbHBoYSkge1xuXG4gIGZ1bmN0aW9uIGNhdG11bGxSb20oY29udGV4dCkge1xuICAgIHJldHVybiBhbHBoYSA/IG5ldyBDYXRtdWxsUm9tQ2xvc2VkKGNvbnRleHQsIGFscGhhKSA6IG5ldyBDYXJkaW5hbENsb3NlZChjb250ZXh0LCAwKTtcbiAgfVxuXG4gIGNhdG11bGxSb20uYWxwaGEgPSBmdW5jdGlvbihhbHBoYSkge1xuICAgIHJldHVybiBjdXN0b20oK2FscGhhKTtcbiAgfTtcblxuICByZXR1cm4gY2F0bXVsbFJvbTtcbn0pKDAuNSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/catmullRomClosed.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/catmullRomOpen.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/catmullRomOpen.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _cardinalOpen_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinalOpen.js */ \"../../../node_modules/d3-shape/src/curve/cardinalOpen.js\");\n/* harmony import */ var _catmullRom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./catmullRom.js */ \"../../../node_modules/d3-shape/src/curve/catmullRom.js\");\n\n\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: (0,_catmullRom_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen_js__WEBPACK_IMPORTED_MODULE_1__.CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0M7QUFDVDs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLCtCQUErQixrR0FBa0c7QUFDakksK0JBQStCO0FBQy9CLGVBQWUscURBQUssY0FBYztBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7O0FBRWY7QUFDQSw0REFBNEQsMERBQVk7QUFDeEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qcz81OWMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2FyZGluYWxPcGVufSBmcm9tIFwiLi9jYXJkaW5hbE9wZW4uanNcIjtcbmltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhdG11bGxSb20uanNcIjtcblxuZnVuY3Rpb24gQ2F0bXVsbFJvbU9wZW4oY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21PcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95MikgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5fcG9pbnQgPSA0OyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb21PcGVuKGNvbnRleHQsIGFscGhhKSA6IG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/catmullRomOpen.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/linear.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/linear.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new Linear(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isc0VBQXNFO0FBQ3JHLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanM/MDc1NyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/linear.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/linearClosed.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/linearClosed.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ \"../../../node_modules/d3-shape/src/noop.js\");\n\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new LinearClosed(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXJDbG9zZWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsZ0RBQUk7QUFDakIsV0FBVyxnREFBSTtBQUNmO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhckNsb3NlZC5qcz8xM2QxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmZ1bmN0aW9uIExpbmVhckNsb3NlZChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5MaW5lYXJDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHRoaXMuX3BvaW50KSB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICBlbHNlIHRoaXMuX3BvaW50ID0gMSwgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBMaW5lYXJDbG9zZWQoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/linearClosed.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/monotone.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/monotone.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"monotoneX\": () => (/* binding */ monotoneX),\n/* harmony export */ \"monotoneY\": () => (/* binding */ monotoneY)\n/* harmony export */ });\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n return new MonotoneY(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9tb25vdG9uZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0EsK0JBQStCLHNFQUFzRTtBQUNyRywrQkFBK0I7QUFDL0IsK0JBQStCLHdEQUF3RDtBQUN2RiwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQiw2QkFBNkI7QUFDeEQsMEJBQTBCLDRCQUE0QjtBQUN0RCwyQkFBMkIsNkJBQTZCO0FBQ3hELGtEQUFrRDtBQUNsRDs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanM/ZDExNSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHNsb3BlcyBvZiB0aGUgdGFuZ2VudHMgKEhlcm1pdGUtdHlwZSBpbnRlcnBvbGF0aW9uKSBiYXNlZCBvblxuLy8gdGhlIGZvbGxvd2luZyBwYXBlcjogU3RlZmZlbiwgTS4gMTk5MC4gQSBTaW1wbGUgTWV0aG9kIGZvciBNb25vdG9uaWNcbi8vIEludGVycG9sYXRpb24gaW4gT25lIERpbWVuc2lvbi4gQXN0cm9ub215IGFuZCBBc3Ryb3BoeXNpY3MsIFZvbC4gMjM5LCBOTy5cbi8vIE5PVihJSSksIFAuIDQ0MywgMTk5MC5cbmZ1bmN0aW9uIHNsb3BlMyh0aGF0LCB4MiwgeTIpIHtcbiAgdmFyIGgwID0gdGhhdC5feDEgLSB0aGF0Ll94MCxcbiAgICAgIGgxID0geDIgLSB0aGF0Ll94MSxcbiAgICAgIHMwID0gKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gKGgwIHx8IGgxIDwgMCAmJiAtMCksXG4gICAgICBzMSA9ICh5MiAtIHRoYXQuX3kxKSAvIChoMSB8fCBoMCA8IDAgJiYgLTApLFxuICAgICAgcCA9IChzMCAqIGgxICsgczEgKiBoMCkgLyAoaDAgKyBoMSk7XG4gIHJldHVybiAoc2lnbihzMCkgKyBzaWduKHMxKSkgKiBNYXRoLm1pbihNYXRoLmFicyhzMCksIE1hdGguYWJzKHMxKSwgMC41ICogTWF0aC5hYnMocCkpIHx8IDA7XG59XG5cbi8vIENhbGN1bGF0ZSBhIG9uZS1zaWRlZCBzbG9wZS5cbmZ1bmN0aW9uIHNsb3BlMih0aGF0LCB0KSB7XG4gIHZhciBoID0gdGhhdC5feDEgLSB0aGF0Ll94MDtcbiAgcmV0dXJuIGggPyAoMyAqICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIGggLSB0KSAvIDIgOiB0O1xufVxuXG4vLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViaWNfSGVybWl0ZV9zcGxpbmUjUmVwcmVzZW50YXRpb25zXG4vLyBcInlvdSBjYW4gZXhwcmVzcyBjdWJpYyBIZXJtaXRlIGludGVycG9sYXRpb24gaW4gdGVybXMgb2YgY3ViaWMgQsOpemllciBjdXJ2ZXNcbi8vIHdpdGggcmVzcGVjdCB0byB0aGUgZm91ciB2YWx1ZXMgcDAsIHAwICsgbTAgLyAzLCBwMSAtIG0xIC8gMywgcDFcIi5cbmZ1bmN0aW9uIHBvaW50KHRoYXQsIHQwLCB0MSkge1xuICB2YXIgeDAgPSB0aGF0Ll94MCxcbiAgICAgIHkwID0gdGhhdC5feTAsXG4gICAgICB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIGR4ID0gKHgxIC0geDApIC8gMztcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwICsgZHgsIHkwICsgZHggKiB0MCwgeDEgLSBkeCwgeTEgLSBkeCAqIHQxLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBNb25vdG9uZVgoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTW9ub3RvbmVYLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID1cbiAgICB0aGlzLl90MCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCBzbG9wZTIodGhpcywgdGhpcy5fdDApKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHQxID0gTmFOO1xuXG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHggPT09IHRoaXMuX3gxICYmIHkgPT09IHRoaXMuX3kxKSByZXR1cm47IC8vIElnbm9yZSBjb2luY2lkZW50IHBvaW50cy5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHBvaW50KHRoaXMsIHNsb3BlMih0aGlzLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSksIHQxKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB0aGlzLl90MCwgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICAgIHRoaXMuX3QwID0gdDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IG5ldyBSZWZsZWN0Q29udGV4dChjb250ZXh0KTtcbn1cblxuKE1vbm90b25lWS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vbm90b25lWC5wcm90b3R5cGUpKS5wb2ludCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgTW9ub3RvbmVYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsIHksIHgpO1xufTtcblxuZnVuY3Rpb24gUmVmbGVjdENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmbGVjdENvbnRleHQucHJvdG90eXBlID0ge1xuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5tb3ZlVG8oeSwgeCk7IH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7IHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7IH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0LmxpbmVUbyh5LCB4KTsgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHsgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHkxLCB4MSwgeTIsIHgyLCB5LCB4KTsgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVYKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVkoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/monotone.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/natural.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/natural.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new Natural(context);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFdBQVc7QUFDekI7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLGNBQWMsV0FBVztBQUN6QjtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzP2I4MWYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gTmF0dXJhbChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5OYXR1cmFsLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gW107XG4gICAgdGhpcy5feSA9IFtdO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IHRoaXMuX3gsXG4gICAgICAgIHkgPSB0aGlzLl95LFxuICAgICAgICBuID0geC5sZW5ndGg7XG5cbiAgICBpZiAobikge1xuICAgICAgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHhbMF0sIHlbMF0pIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeFswXSwgeVswXSk7XG4gICAgICBpZiAobiA9PT0gMikge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh4WzFdLCB5WzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBweCA9IGNvbnRyb2xQb2ludHMoeCksXG4gICAgICAgICAgICBweSA9IGNvbnRyb2xQb2ludHMoeSk7XG4gICAgICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAxOyBpMSA8IG47ICsraTAsICsraTEpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8ocHhbMF1baTBdLCBweVswXVtpMF0sIHB4WzFdW2kwXSwgcHlbMV1baTBdLCB4W2kxXSwgeVtpMV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgbiA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICAgIHRoaXMuX3ggPSB0aGlzLl95ID0gbnVsbDtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl94LnB1c2goK3gpO1xuICAgIHRoaXMuX3kucHVzaCgreSk7XG4gIH1cbn07XG5cbi8vIFNlZSBodHRwczovL3d3dy5wYXJ0aWNsZWluY2VsbC5jb20vMjAxMi9iZXppZXItc3BsaW5lcy8gZm9yIGRlcml2YXRpb24uXG5mdW5jdGlvbiBjb250cm9sUG9pbnRzKHgpIHtcbiAgdmFyIGksXG4gICAgICBuID0geC5sZW5ndGggLSAxLFxuICAgICAgbSxcbiAgICAgIGEgPSBuZXcgQXJyYXkobiksXG4gICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgciA9IG5ldyBBcnJheShuKTtcbiAgYVswXSA9IDAsIGJbMF0gPSAyLCByWzBdID0geFswXSArIDIgKiB4WzFdO1xuICBmb3IgKGkgPSAxOyBpIDwgbiAtIDE7ICsraSkgYVtpXSA9IDEsIGJbaV0gPSA0LCByW2ldID0gNCAqIHhbaV0gKyAyICogeFtpICsgMV07XG4gIGFbbiAtIDFdID0gMiwgYltuIC0gMV0gPSA3LCByW24gLSAxXSA9IDggKiB4W24gLSAxXSArIHhbbl07XG4gIGZvciAoaSA9IDE7IGkgPCBuOyArK2kpIG0gPSBhW2ldIC8gYltpIC0gMV0sIGJbaV0gLT0gbSwgcltpXSAtPSBtICogcltpIC0gMV07XG4gIGFbbiAtIDFdID0gcltuIC0gMV0gLyBiW24gLSAxXTtcbiAgZm9yIChpID0gbiAtIDI7IGkgPj0gMDsgLS1pKSBhW2ldID0gKHJbaV0gLSBhW2kgKyAxXSkgLyBiW2ldO1xuICBiW24gLSAxXSA9ICh4W25dICsgYVtuIC0gMV0pIC8gMjtcbiAgZm9yIChpID0gMDsgaSA8IG4gLSAxOyArK2kpIGJbaV0gPSAyICogeFtpICsgMV0gLSBhW2kgKyAxXTtcbiAgcmV0dXJuIFthLCBiXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IE5hdHVyYWwoY29udGV4dCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/natural.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/radial.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/radial.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"curveRadialLinear\": () => (/* binding */ curveRadialLinear),\n/* harmony export */ \"default\": () => (/* binding */ curveRadial)\n/* harmony export */ });\n/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear.js */ \"../../../node_modules/d3-shape/src/curve/linear.js\");\n\n\nvar curveRadialLinear = curveRadial(_linear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nfunction curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9yYWRpYWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXNDOztBQUUvQixvQ0FBb0Msa0RBQVc7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9yYWRpYWwuanM/MjgyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB2YXIgY3VydmVSYWRpYWxMaW5lYXIgPSBjdXJ2ZVJhZGlhbChjdXJ2ZUxpbmVhcik7XG5cbmZ1bmN0aW9uIFJhZGlhbChjdXJ2ZSkge1xuICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xufVxuXG5SYWRpYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmFyZWFTdGFydCgpO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5hcmVhRW5kKCk7XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUubGluZVN0YXJ0KCk7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmxpbmVFbmQoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKGEsIHIpIHtcbiAgICB0aGlzLl9jdXJ2ZS5wb2ludChyICogTWF0aC5zaW4oYSksIHIgKiAtTWF0aC5jb3MoYSkpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdXJ2ZVJhZGlhbChjdXJ2ZSkge1xuXG4gIGZ1bmN0aW9uIHJhZGlhbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBSYWRpYWwoY3VydmUoY29udGV4dCkpO1xuICB9XG5cbiAgcmFkaWFsLl9jdXJ2ZSA9IGN1cnZlO1xuXG4gIHJldHVybiByYWRpYWw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/radial.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/curve/step.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/curve/step.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"stepAfter\": () => (/* binding */ stepAfter),\n/* harmony export */ \"stepBefore\": () => (/* binding */ stepBefore)\n/* harmony export */ });\nfunction Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) {\n return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n return new Step(context, 1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9zdGVwLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isc0VBQXNFO0FBQ3JHLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9zdGVwLmpzPzE2NzciXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gU3RlcChjb250ZXh0LCB0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl90ID0gdDtcbn1cblxuU3RlcC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoMCA8IHRoaXMuX3QgJiYgdGhpcy5fdCA8IDEgJiYgdGhpcy5fcG9pbnQgPT09IDIpIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHRoaXMuX3kpO1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBpZiAodGhpcy5fbGluZSA+PSAwKSB0aGlzLl90ID0gMSAtIHRoaXMuX3QsIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3QgPD0gMCkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHkpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMuX3ggKiAoMSAtIHRoaXMuX3QpICsgeCAqIHRoaXMuX3Q7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHRoaXMuX3kpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5feCA9IHgsIHRoaXMuX3kgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwLjUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEJlZm9yZShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBBZnRlcihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAxKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/curve/step.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/descending.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/descending.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvZGVzY2VuZGluZy5qcz85NmM2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/descending.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/identity.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-shape/src/identity.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) {\n return d;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2lkZW50aXR5LmpzPzM1ZmEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICByZXR1cm4gZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/identity.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-shape/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"arc\": () => (/* reexport safe */ _arc_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"area\": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"areaRadial\": () => (/* reexport safe */ _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"curveBasis\": () => (/* reexport safe */ _curve_basis_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"]),\n/* harmony export */ \"curveBasisClosed\": () => (/* reexport safe */ _curve_basisClosed_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"]),\n/* harmony export */ \"curveBasisOpen\": () => (/* reexport safe */ _curve_basisOpen_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"]),\n/* harmony export */ \"curveBumpX\": () => (/* reexport safe */ _curve_bump_js__WEBPACK_IMPORTED_MODULE_25__.bumpX),\n/* harmony export */ \"curveBumpY\": () => (/* reexport safe */ _curve_bump_js__WEBPACK_IMPORTED_MODULE_25__.bumpY),\n/* harmony export */ \"curveBundle\": () => (/* reexport safe */ _curve_bundle_js__WEBPACK_IMPORTED_MODULE_26__[\"default\"]),\n/* harmony export */ \"curveCardinal\": () => (/* reexport safe */ _curve_cardinal_js__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"curveCardinalClosed\": () => (/* reexport safe */ _curve_cardinalClosed_js__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"curveCardinalOpen\": () => (/* reexport safe */ _curve_cardinalOpen_js__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"curveCatmullRom\": () => (/* reexport safe */ _curve_catmullRom_js__WEBPACK_IMPORTED_MODULE_32__[\"default\"]),\n/* harmony export */ \"curveCatmullRomClosed\": () => (/* reexport safe */ _curve_catmullRomClosed_js__WEBPACK_IMPORTED_MODULE_30__[\"default\"]),\n/* harmony export */ \"curveCatmullRomOpen\": () => (/* reexport safe */ _curve_catmullRomOpen_js__WEBPACK_IMPORTED_MODULE_31__[\"default\"]),\n/* harmony export */ \"curveLinear\": () => (/* reexport safe */ _curve_linear_js__WEBPACK_IMPORTED_MODULE_34__[\"default\"]),\n/* harmony export */ \"curveLinearClosed\": () => (/* reexport safe */ _curve_linearClosed_js__WEBPACK_IMPORTED_MODULE_33__[\"default\"]),\n/* harmony export */ \"curveMonotoneX\": () => (/* reexport safe */ _curve_monotone_js__WEBPACK_IMPORTED_MODULE_35__.monotoneX),\n/* harmony export */ \"curveMonotoneY\": () => (/* reexport safe */ _curve_monotone_js__WEBPACK_IMPORTED_MODULE_35__.monotoneY),\n/* harmony export */ \"curveNatural\": () => (/* reexport safe */ _curve_natural_js__WEBPACK_IMPORTED_MODULE_36__[\"default\"]),\n/* harmony export */ \"curveStep\": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_37__[\"default\"]),\n/* harmony export */ \"curveStepAfter\": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_37__.stepAfter),\n/* harmony export */ \"curveStepBefore\": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_37__.stepBefore),\n/* harmony export */ \"line\": () => (/* reexport safe */ _line_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"lineRadial\": () => (/* reexport safe */ _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"link\": () => (/* reexport safe */ _link_js__WEBPACK_IMPORTED_MODULE_7__.link),\n/* harmony export */ \"linkHorizontal\": () => (/* reexport safe */ _link_js__WEBPACK_IMPORTED_MODULE_7__.linkHorizontal),\n/* harmony export */ \"linkRadial\": () => (/* reexport safe */ _link_js__WEBPACK_IMPORTED_MODULE_7__.linkRadial),\n/* harmony export */ \"linkVertical\": () => (/* reexport safe */ _link_js__WEBPACK_IMPORTED_MODULE_7__.linkVertical),\n/* harmony export */ \"pie\": () => (/* reexport safe */ _pie_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"pointRadial\": () => (/* reexport safe */ _pointRadial_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ \"radialArea\": () => (/* reexport safe */ _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ \"radialLine\": () => (/* reexport safe */ _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"stack\": () => (/* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_38__[\"default\"]),\n/* harmony export */ \"stackOffsetDiverging\": () => (/* reexport safe */ _offset_diverging_js__WEBPACK_IMPORTED_MODULE_40__[\"default\"]),\n/* harmony export */ \"stackOffsetExpand\": () => (/* reexport safe */ _offset_expand_js__WEBPACK_IMPORTED_MODULE_39__[\"default\"]),\n/* harmony export */ \"stackOffsetNone\": () => (/* reexport safe */ _offset_none_js__WEBPACK_IMPORTED_MODULE_41__[\"default\"]),\n/* harmony export */ \"stackOffsetSilhouette\": () => (/* reexport safe */ _offset_silhouette_js__WEBPACK_IMPORTED_MODULE_42__[\"default\"]),\n/* harmony export */ \"stackOffsetWiggle\": () => (/* reexport safe */ _offset_wiggle_js__WEBPACK_IMPORTED_MODULE_43__[\"default\"]),\n/* harmony export */ \"stackOrderAppearance\": () => (/* reexport safe */ _order_appearance_js__WEBPACK_IMPORTED_MODULE_44__[\"default\"]),\n/* harmony export */ \"stackOrderAscending\": () => (/* reexport safe */ _order_ascending_js__WEBPACK_IMPORTED_MODULE_45__[\"default\"]),\n/* harmony export */ \"stackOrderDescending\": () => (/* reexport safe */ _order_descending_js__WEBPACK_IMPORTED_MODULE_46__[\"default\"]),\n/* harmony export */ \"stackOrderInsideOut\": () => (/* reexport safe */ _order_insideOut_js__WEBPACK_IMPORTED_MODULE_47__[\"default\"]),\n/* harmony export */ \"stackOrderNone\": () => (/* reexport safe */ _order_none_js__WEBPACK_IMPORTED_MODULE_48__[\"default\"]),\n/* harmony export */ \"stackOrderReverse\": () => (/* reexport safe */ _order_reverse_js__WEBPACK_IMPORTED_MODULE_49__[\"default\"]),\n/* harmony export */ \"symbol\": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"symbolAsterisk\": () => (/* reexport safe */ _symbol_asterisk_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"symbolCircle\": () => (/* reexport safe */ _symbol_circle_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"symbolCross\": () => (/* reexport safe */ _symbol_cross_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"symbolDiamond\": () => (/* reexport safe */ _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"symbolDiamond2\": () => (/* reexport safe */ _symbol_diamond2_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"symbolPlus\": () => (/* reexport safe */ _symbol_plus_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"symbolSquare\": () => (/* reexport safe */ _symbol_square_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"symbolSquare2\": () => (/* reexport safe */ _symbol_square2_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"symbolStar\": () => (/* reexport safe */ _symbol_star_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"symbolTimes\": () => (/* reexport safe */ _symbol_times_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"]),\n/* harmony export */ \"symbolTriangle\": () => (/* reexport safe */ _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"symbolTriangle2\": () => (/* reexport safe */ _symbol_triangle2_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]),\n/* harmony export */ \"symbolWye\": () => (/* reexport safe */ _symbol_wye_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]),\n/* harmony export */ \"symbolX\": () => (/* reexport safe */ _symbol_times_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"]),\n/* harmony export */ \"symbols\": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__.symbolsFill),\n/* harmony export */ \"symbolsFill\": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__.symbolsFill),\n/* harmony export */ \"symbolsStroke\": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__.symbolsStroke)\n/* harmony export */ });\n/* harmony import */ var _arc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arc.js */ \"../../../node_modules/d3-shape/src/arc.js\");\n/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ \"../../../node_modules/d3-shape/src/area.js\");\n/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line.js */ \"../../../node_modules/d3-shape/src/line.js\");\n/* harmony import */ var _pie_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pie.js */ \"../../../node_modules/d3-shape/src/pie.js\");\n/* harmony import */ var _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./areaRadial.js */ \"../../../node_modules/d3-shape/src/areaRadial.js\");\n/* harmony import */ var _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lineRadial.js */ \"../../../node_modules/d3-shape/src/lineRadial.js\");\n/* harmony import */ var _pointRadial_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pointRadial.js */ \"../../../node_modules/d3-shape/src/pointRadial.js\");\n/* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./link.js */ \"../../../node_modules/d3-shape/src/link.js\");\n/* harmony import */ var _symbol_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symbol.js */ \"../../../node_modules/d3-shape/src/symbol.js\");\n/* harmony import */ var _symbol_asterisk_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./symbol/asterisk.js */ \"../../../node_modules/d3-shape/src/symbol/asterisk.js\");\n/* harmony import */ var _symbol_circle_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./symbol/circle.js */ \"../../../node_modules/d3-shape/src/symbol/circle.js\");\n/* harmony import */ var _symbol_cross_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./symbol/cross.js */ \"../../../node_modules/d3-shape/src/symbol/cross.js\");\n/* harmony import */ var _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./symbol/diamond.js */ \"../../../node_modules/d3-shape/src/symbol/diamond.js\");\n/* harmony import */ var _symbol_diamond2_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./symbol/diamond2.js */ \"../../../node_modules/d3-shape/src/symbol/diamond2.js\");\n/* harmony import */ var _symbol_plus_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./symbol/plus.js */ \"../../../node_modules/d3-shape/src/symbol/plus.js\");\n/* harmony import */ var _symbol_square_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./symbol/square.js */ \"../../../node_modules/d3-shape/src/symbol/square.js\");\n/* harmony import */ var _symbol_square2_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./symbol/square2.js */ \"../../../node_modules/d3-shape/src/symbol/square2.js\");\n/* harmony import */ var _symbol_star_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./symbol/star.js */ \"../../../node_modules/d3-shape/src/symbol/star.js\");\n/* harmony import */ var _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./symbol/triangle.js */ \"../../../node_modules/d3-shape/src/symbol/triangle.js\");\n/* harmony import */ var _symbol_triangle2_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./symbol/triangle2.js */ \"../../../node_modules/d3-shape/src/symbol/triangle2.js\");\n/* harmony import */ var _symbol_wye_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./symbol/wye.js */ \"../../../node_modules/d3-shape/src/symbol/wye.js\");\n/* harmony import */ var _symbol_times_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./symbol/times.js */ \"../../../node_modules/d3-shape/src/symbol/times.js\");\n/* harmony import */ var _curve_basisClosed_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./curve/basisClosed.js */ \"../../../node_modules/d3-shape/src/curve/basisClosed.js\");\n/* harmony import */ var _curve_basisOpen_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./curve/basisOpen.js */ \"../../../node_modules/d3-shape/src/curve/basisOpen.js\");\n/* harmony import */ var _curve_basis_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./curve/basis.js */ \"../../../node_modules/d3-shape/src/curve/basis.js\");\n/* harmony import */ var _curve_bump_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./curve/bump.js */ \"../../../node_modules/d3-shape/src/curve/bump.js\");\n/* harmony import */ var _curve_bundle_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./curve/bundle.js */ \"../../../node_modules/d3-shape/src/curve/bundle.js\");\n/* harmony import */ var _curve_cardinalClosed_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./curve/cardinalClosed.js */ \"../../../node_modules/d3-shape/src/curve/cardinalClosed.js\");\n/* harmony import */ var _curve_cardinalOpen_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./curve/cardinalOpen.js */ \"../../../node_modules/d3-shape/src/curve/cardinalOpen.js\");\n/* harmony import */ var _curve_cardinal_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./curve/cardinal.js */ \"../../../node_modules/d3-shape/src/curve/cardinal.js\");\n/* harmony import */ var _curve_catmullRomClosed_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./curve/catmullRomClosed.js */ \"../../../node_modules/d3-shape/src/curve/catmullRomClosed.js\");\n/* harmony import */ var _curve_catmullRomOpen_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./curve/catmullRomOpen.js */ \"../../../node_modules/d3-shape/src/curve/catmullRomOpen.js\");\n/* harmony import */ var _curve_catmullRom_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./curve/catmullRom.js */ \"../../../node_modules/d3-shape/src/curve/catmullRom.js\");\n/* harmony import */ var _curve_linearClosed_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./curve/linearClosed.js */ \"../../../node_modules/d3-shape/src/curve/linearClosed.js\");\n/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./curve/linear.js */ \"../../../node_modules/d3-shape/src/curve/linear.js\");\n/* harmony import */ var _curve_monotone_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./curve/monotone.js */ \"../../../node_modules/d3-shape/src/curve/monotone.js\");\n/* harmony import */ var _curve_natural_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./curve/natural.js */ \"../../../node_modules/d3-shape/src/curve/natural.js\");\n/* harmony import */ var _curve_step_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./curve/step.js */ \"../../../node_modules/d3-shape/src/curve/step.js\");\n/* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./stack.js */ \"../../../node_modules/d3-shape/src/stack.js\");\n/* harmony import */ var _offset_expand_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./offset/expand.js */ \"../../../node_modules/d3-shape/src/offset/expand.js\");\n/* harmony import */ var _offset_diverging_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./offset/diverging.js */ \"../../../node_modules/d3-shape/src/offset/diverging.js\");\n/* harmony import */ var _offset_none_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./offset/none.js */ \"../../../node_modules/d3-shape/src/offset/none.js\");\n/* harmony import */ var _offset_silhouette_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./offset/silhouette.js */ \"../../../node_modules/d3-shape/src/offset/silhouette.js\");\n/* harmony import */ var _offset_wiggle_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./offset/wiggle.js */ \"../../../node_modules/d3-shape/src/offset/wiggle.js\");\n/* harmony import */ var _order_appearance_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./order/appearance.js */ \"../../../node_modules/d3-shape/src/order/appearance.js\");\n/* harmony import */ var _order_ascending_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./order/ascending.js */ \"../../../node_modules/d3-shape/src/order/ascending.js\");\n/* harmony import */ var _order_descending_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./order/descending.js */ \"../../../node_modules/d3-shape/src/order/descending.js\");\n/* harmony import */ var _order_insideOut_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./order/insideOut.js */ \"../../../node_modules/d3-shape/src/order/insideOut.js\");\n/* harmony import */ var _order_none_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./order/none.js */ \"../../../node_modules/d3-shape/src/order/none.js\");\n/* harmony import */ var _order_reverse_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./order/reverse.js */ \"../../../node_modules/d3-shape/src/order/reverse.js\");\n\n\n\n\n // Note: radialArea is deprecated!\n // Note: radialLine is deprecated!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF3QztBQUNFO0FBQ0E7QUFDRjtBQUNxQyxDQUFDO0FBQ0QsQ0FBQztBQUN0QjtBQUNpQjs7QUFFeUI7QUFDbkM7QUFDSjtBQUNGO0FBQ0k7QUFDRTtBQUNSO0FBQ0k7QUFDRTtBQUNOO0FBQ1E7QUFDRTtBQUNaO0FBQ3dCOztBQUVWO0FBQ0o7QUFDUjtBQUNrQjtBQUNoQjtBQUNnQjtBQUNKO0FBQ1I7QUFDZ0I7QUFDSjtBQUNSO0FBQ0k7QUFDWjtBQUNvQztBQUNsQztBQUNzRDs7QUFFckU7QUFDb0I7QUFDTTtBQUNWO0FBQ1k7QUFDUjtBQUNNO0FBQ0Y7QUFDRTtBQUNGO0FBQ1Y7QUFDTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2luZGV4LmpzP2U2MjgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIGFyY30gZnJvbSBcIi4vYXJjLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmV9IGZyb20gXCIuL2xpbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWV9IGZyb20gXCIuL3BpZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWFSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsQXJlYX0gZnJvbSBcIi4vYXJlYVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxBcmVhIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgbGluZVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxMaW5lfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbExpbmUgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2ludFJhZGlhbH0gZnJvbSBcIi4vcG9pbnRSYWRpYWwuanNcIjtcbmV4cG9ydCB7bGluaywgbGlua0hvcml6b250YWwsIGxpbmtWZXJ0aWNhbCwgbGlua1JhZGlhbH0gZnJvbSBcIi4vbGluay5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sLCBzeW1ib2xzU3Ryb2tlLCBzeW1ib2xzRmlsbCwgc3ltYm9sc0ZpbGwgYXMgc3ltYm9sc30gZnJvbSBcIi4vc3ltYm9sLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sQXN0ZXJpc2t9IGZyb20gXCIuL3N5bWJvbC9hc3Rlcmlzay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbERpYW1vbmQyfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xQbHVzfSBmcm9tIFwiLi9zeW1ib2wvcGx1cy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZTJ9IGZyb20gXCIuL3N5bWJvbC9zcXVhcmUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sU3Rhcn0gZnJvbSBcIi4vc3ltYm9sL3N0YXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xUcmlhbmdsZX0gZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGUyfSBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sV3llfSBmcm9tIFwiLi9zeW1ib2wvd3llLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVGltZXMsIGRlZmF1bHQgYXMgc3ltYm9sWH0gZnJvbSBcIi4vc3ltYm9sL3RpbWVzLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNPcGVufSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc09wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpcy5qc1wiO1xuZXhwb3J0IHtidW1wWCBhcyBjdXJ2ZUJ1bXBYLCBidW1wWSBhcyBjdXJ2ZUJ1bXBZfSBmcm9tIFwiLi9jdXJ2ZS9idW1wLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCdW5kbGV9IGZyb20gXCIuL2N1cnZlL2J1bmRsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbE9wZW59IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWx9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tT3Blbn0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbU9wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb219IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhckNsb3NlZH0gZnJvbSBcIi4vY3VydmUvbGluZWFyQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL2xpbmVhci5qc1wiO1xuZXhwb3J0IHttb25vdG9uZVggYXMgY3VydmVNb25vdG9uZVgsIG1vbm90b25lWSBhcyBjdXJ2ZU1vbm90b25lWX0gZnJvbSBcIi4vY3VydmUvbW9ub3RvbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZU5hdHVyYWx9IGZyb20gXCIuL2N1cnZlL25hdHVyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZVN0ZXAsIHN0ZXBBZnRlciBhcyBjdXJ2ZVN0ZXBBZnRlciwgc3RlcEJlZm9yZSBhcyBjdXJ2ZVN0ZXBCZWZvcmV9IGZyb20gXCIuL2N1cnZlL3N0ZXAuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrfSBmcm9tIFwiLi9zdGFjay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0RXhwYW5kfSBmcm9tIFwiLi9vZmZzZXQvZXhwYW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXREaXZlcmdpbmd9IGZyb20gXCIuL29mZnNldC9kaXZlcmdpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldE5vbmV9IGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRTaWxob3VldHRlfSBmcm9tIFwiLi9vZmZzZXQvc2lsaG91ZXR0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0V2lnZ2xlfSBmcm9tIFwiLi9vZmZzZXQvd2lnZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckFwcGVhcmFuY2V9IGZyb20gXCIuL29yZGVyL2FwcGVhcmFuY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9hc2NlbmRpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyRGVzY2VuZGluZ30gZnJvbSBcIi4vb3JkZXIvZGVzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJJbnNpZGVPdXR9IGZyb20gXCIuL29yZGVyL2luc2lkZU91dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJOb25lfSBmcm9tIFwiLi9vcmRlci9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlclJldmVyc2V9IGZyb20gXCIuL29yZGVyL3JldmVyc2UuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/line.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/line.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-shape/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./curve/linear.js */ \"../../../node_modules/d3-shape/src/curve/linear.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-shape/src/path.js\");\n/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./point.js */ \"../../../node_modules/d3-shape/src/point.js\");\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) {\n var defined = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(true),\n context = null,\n curve = _curve_linear_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n output = null,\n path = (0,_path_js__WEBPACK_IMPORTED_MODULE_2__.withPath)(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? _point_js__WEBPACK_IMPORTED_MODULE_3__.x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? _point_js__WEBPACK_IMPORTED_MODULE_3__.y : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(y);\n\n function line(data) {\n var i,\n n = (data = (0,_array_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErQjtBQUNNO0FBQ087QUFDVDtBQUNpQjs7QUFFcEQsNkJBQWUsb0NBQVM7QUFDeEIsZ0JBQWdCLHdEQUFRO0FBQ3hCO0FBQ0EsY0FBYyx3REFBVztBQUN6QjtBQUNBLGFBQWEsa0RBQVE7O0FBRXJCLHdEQUF3RCx3Q0FBTSxHQUFHLHdEQUFRO0FBQ3pFLHdEQUF3RCx3Q0FBTSxHQUFHLHdEQUFROztBQUV6RTtBQUNBO0FBQ0Esb0JBQW9CLHFEQUFLO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBLHVFQUF1RSx3REFBUTtBQUMvRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzPzFjMWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGxpbmUpO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/line.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/lineRadial.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/lineRadial.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"lineRadial\": () => (/* binding */ lineRadial)\n/* harmony export */ });\n/* harmony import */ var _curve_radial_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial.js */ \"../../../node_modules/d3-shape/src/curve/radial.js\");\n/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./line.js */ \"../../../node_modules/d3-shape/src/line.js\");\n\n\n\nfunction lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c((0,_curve_radial_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_)) : c()._curve;\n };\n\n return l;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return lineRadial((0,_line_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])().curve(_curve_radial_js__WEBPACK_IMPORTED_MODULE_0__.curveRadialLinear));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lUmFkaWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBaUU7QUFDcEM7O0FBRXRCO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyw0REFBVztBQUMzQzs7QUFFQTtBQUNBOztBQUVBLDZCQUFlLHNDQUFXO0FBQzFCLG9CQUFvQixvREFBSSxTQUFTLCtEQUFpQjtBQUNsRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmVSYWRpYWwuanM/MTUzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3VydmVSYWRpYWwsIHtjdXJ2ZVJhZGlhbExpbmVhcn0gZnJvbSBcIi4vY3VydmUvcmFkaWFsLmpzXCI7XG5pbXBvcnQgbGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFkaWFsKGwpIHtcbiAgdmFyIGMgPSBsLmN1cnZlO1xuXG4gIGwuYW5nbGUgPSBsLngsIGRlbGV0ZSBsLng7XG4gIGwucmFkaXVzID0gbC55LCBkZWxldGUgbC55O1xuXG4gIGwuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBjKGN1cnZlUmFkaWFsKF8pKSA6IGMoKS5fY3VydmU7XG4gIH07XG5cbiAgcmV0dXJuIGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbGluZVJhZGlhbChsaW5lKCkuY3VydmUoY3VydmVSYWRpYWxMaW5lYXIpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/lineRadial.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/link.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/link.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"link\": () => (/* binding */ link),\n/* harmony export */ \"linkHorizontal\": () => (/* binding */ linkHorizontal),\n/* harmony export */ \"linkRadial\": () => (/* binding */ linkRadial),\n/* harmony export */ \"linkVertical\": () => (/* binding */ linkVertical)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-shape/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _curve_bump_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./curve/bump.js */ \"../../../node_modules/d3-shape/src/curve/bump.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-shape/src/path.js\");\n/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./point.js */ \"../../../node_modules/d3-shape/src/point.js\");\n\n\n\n\n\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n let source = linkSource,\n target = linkTarget,\n x = _point_js__WEBPACK_IMPORTED_MODULE_0__.x,\n y = _point_js__WEBPACK_IMPORTED_MODULE_0__.y,\n context = null,\n output = null,\n path = (0,_path_js__WEBPACK_IMPORTED_MODULE_1__.withPath)(link);\n\n function link() {\n let buffer;\n const argv = _array_js__WEBPACK_IMPORTED_MODULE_2__.slice.call(arguments);\n const s = source.apply(this, argv);\n const t = target.apply(this, argv);\n if (context == null) output = curve(buffer = path());\n output.lineStart();\n argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\n argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\n output.lineEnd();\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n };\n\n return link;\n}\n\nfunction linkHorizontal() {\n return link(_curve_bump_js__WEBPACK_IMPORTED_MODULE_4__.bumpX);\n}\n\nfunction linkVertical() {\n return link(_curve_bump_js__WEBPACK_IMPORTED_MODULE_4__.bumpY);\n}\n\nfunction linkRadial() {\n const l = link(_curve_bump_js__WEBPACK_IMPORTED_MODULE_4__.bumpRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5rLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFpQztBQUNJO0FBQ29CO0FBQ3RCO0FBQ2lCOztBQUVwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBLFVBQVUsd0NBQU07QUFDaEIsVUFBVSx3Q0FBTTtBQUNoQjtBQUNBO0FBQ0EsYUFBYSxrREFBUTs7QUFFckI7QUFDQTtBQUNBLGlCQUFpQixpREFBVTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBLGlFQUFpRSx3REFBUTtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQLGNBQWMsaURBQUs7QUFDbkI7O0FBRU87QUFDUCxjQUFjLGlEQUFLO0FBQ25COztBQUVPO0FBQ1AsaUJBQWlCLHNEQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluay5qcz9iODY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YnVtcFgsIGJ1bXBZLCBidW1wUmFkaWFsfSBmcm9tIFwiLi9jdXJ2ZS9idW1wLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnQuanNcIjtcblxuZnVuY3Rpb24gbGlua1NvdXJjZShkKSB7XG4gIHJldHVybiBkLnNvdXJjZTtcbn1cblxuZnVuY3Rpb24gbGlua1RhcmdldChkKSB7XG4gIHJldHVybiBkLnRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmsoY3VydmUpIHtcbiAgbGV0IHNvdXJjZSA9IGxpbmtTb3VyY2UsXG4gICAgICB0YXJnZXQgPSBsaW5rVGFyZ2V0LFxuICAgICAgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIG91dHB1dCA9IG51bGwsXG4gICAgICBwYXRoID0gd2l0aFBhdGgobGluayk7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICBsZXQgYnVmZmVyO1xuICAgIGNvbnN0IGFyZ3YgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgY29uc3QgcyA9IHNvdXJjZS5hcHBseSh0aGlzLCBhcmd2KTtcbiAgICBjb25zdCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG4gICAgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgIGFyZ3ZbMF0gPSBzLCBvdXRwdXQucG9pbnQoK3guYXBwbHkodGhpcywgYXJndiksICt5LmFwcGx5KHRoaXMsIGFyZ3YpKTtcbiAgICBhcmd2WzBdID0gdCwgb3V0cHV0LnBvaW50KCt4LmFwcGx5KHRoaXMsIGFyZ3YpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgb3V0cHV0LmxpbmVFbmQoKTtcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluay5zb3VyY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc291cmNlID0gXywgbGluaykgOiBzb3VyY2U7XG4gIH07XG5cbiAgbGluay50YXJnZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFyZ2V0ID0gXywgbGluaykgOiB0YXJnZXQ7XG4gIH07XG5cbiAgbGluay54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB4O1xuICB9O1xuXG4gIGxpbmsueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmspIDogeTtcbiAgfTtcblxuICBsaW5rLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmspIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtIb3Jpem9udGFsKCkge1xuICByZXR1cm4gbGluayhidW1wWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGJ1bXBZKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtSYWRpYWwoKSB7XG4gIGNvbnN0IGwgPSBsaW5rKGJ1bXBSYWRpYWwpO1xuICBsLmFuZ2xlID0gbC54LCBkZWxldGUgbC54O1xuICBsLnJhZGl1cyA9IGwueSwgZGVsZXRlIGwueTtcbiAgcmV0dXJuIGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/link.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/math.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/math.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"abs\": () => (/* binding */ abs),\n/* harmony export */ \"acos\": () => (/* binding */ acos),\n/* harmony export */ \"asin\": () => (/* binding */ asin),\n/* harmony export */ \"atan2\": () => (/* binding */ atan2),\n/* harmony export */ \"cos\": () => (/* binding */ cos),\n/* harmony export */ \"epsilon\": () => (/* binding */ epsilon),\n/* harmony export */ \"halfPi\": () => (/* binding */ halfPi),\n/* harmony export */ \"max\": () => (/* binding */ max),\n/* harmony export */ \"min\": () => (/* binding */ min),\n/* harmony export */ \"pi\": () => (/* binding */ pi),\n/* harmony export */ \"sin\": () => (/* binding */ sin),\n/* harmony export */ \"sqrt\": () => (/* binding */ sqrt),\n/* harmony export */ \"tau\": () => (/* binding */ tau)\n/* harmony export */ });\nconst abs = Math.abs;\nconst atan2 = Math.atan2;\nconst cos = Math.cos;\nconst max = Math.max;\nconst min = Math.min;\nconst sin = Math.sin;\nconst sqrt = Math.sqrt;\n\nconst epsilon = 1e-12;\nconst pi = Math.PI;\nconst halfPi = pi / 2;\nconst tau = 2 * pi;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcz9jMDBkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgY29uc3QgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgY29uc3QgbWluID0gTWF0aC5taW47XG5leHBvcnQgY29uc3Qgc2luID0gTWF0aC5zaW47XG5leHBvcnQgY29uc3Qgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAxZS0xMjtcbmV4cG9ydCBjb25zdCBwaSA9IE1hdGguUEk7XG5leHBvcnQgY29uc3QgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IGNvbnN0IHRhdSA9IDIgKiBwaTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPj0gMSA/IGhhbGZQaSA6IHggPD0gLTEgPyAtaGFsZlBpIDogTWF0aC5hc2luKHgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/math.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/noop.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/noop.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxzQ0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL25vb3AuanM/MjgyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/noop.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/offset/diverging.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-shape/src/offset/diverging.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvZGl2ZXJnaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLG9FQUFvRSxPQUFPO0FBQzNFLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9kaXZlcmdpbmcuanM/NjUzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSkgcmV0dXJuO1xuICBmb3IgKHZhciBpLCBqID0gMCwgZCwgZHksIHlwLCB5biwgbiwgbSA9IHNlcmllc1tvcmRlclswXV0ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh5cCA9IHluID0gMCwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgoZHkgPSAoZCA9IHNlcmllc1tvcmRlcltpXV1bal0pWzFdIC0gZFswXSkgPiAwKSB7XG4gICAgICAgIGRbMF0gPSB5cCwgZFsxXSA9IHlwICs9IGR5O1xuICAgICAgfSBlbHNlIGlmIChkeSA8IDApIHtcbiAgICAgICAgZFsxXSA9IHluLCBkWzBdID0geW4gKz0gZHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkWzBdID0gMCwgZFsxXSA9IGR5O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/offset/diverging.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/offset/expand.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/offset/expand.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/offset/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series, order);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvZXhwYW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hELG9CQUFvQixPQUFPO0FBQzNCLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0EsRUFBRSxvREFBSTtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L2V4cGFuZC5qcz9mZGJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub25lIGZyb20gXCIuL25vbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgaSwgbiwgaiA9IDAsIG0gPSBzZXJpZXNbMF0ubGVuZ3RoLCB5OyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh5ID0gaSA9IDA7IGkgPCBuOyArK2kpIHkgKz0gc2VyaWVzW2ldW2pdWzFdIHx8IDA7XG4gICAgaWYgKHkpIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHNlcmllc1tpXVtqXVsxXSAvPSB5O1xuICB9XG4gIG5vbmUoc2VyaWVzLCBvcmRlcik7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/offset/expand.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/offset/none.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-shape/src/offset/none.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxrRUFBa0UsT0FBTztBQUN6RTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L25vbmUuanM/Nzg2OCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAxKSkgcmV0dXJuO1xuICBmb3IgKHZhciBpID0gMSwgaiwgczAsIHMxID0gc2VyaWVzW29yZGVyWzBdXSwgbiwgbSA9IHMxLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHMwID0gczEsIHMxID0gc2VyaWVzW29yZGVyW2ldXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICBzMVtqXVsxXSArPSBzMVtqXVswXSA9IGlzTmFOKHMwW2pdWzFdKSA/IHMwW2pdWzBdIDogczBbal1bMV07XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/offset/none.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/offset/silhouette.js": /*!***************************************************************!*\ !*** ../../../node_modules/d3-shape/src/offset/silhouette.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/offset/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series, order);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvc2lsaG91ZXR0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE2Qjs7QUFFN0IsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSwyREFBMkQsT0FBTztBQUNsRSwyQkFBMkIsT0FBTztBQUNsQztBQUNBO0FBQ0EsRUFBRSxvREFBSTtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L3NpbGhvdWV0dGUuanM/MmVhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIGogPSAwLCBzMCA9IHNlcmllc1tvcmRlclswXV0sIG4sIG0gPSBzMC5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBpID0gMCwgeSA9IDA7IGkgPCBuOyArK2kpIHkgKz0gc2VyaWVzW2ldW2pdWzFdIHx8IDA7XG4gICAgczBbal1bMV0gKz0gczBbal1bMF0gPSAteSAvIDI7XG4gIH1cbiAgbm9uZShzZXJpZXMsIG9yZGVyKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/offset/silhouette.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/offset/wiggle.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/offset/wiggle.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/offset/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series, order);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvd2lnZ2xlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE9BQU87QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0RBQUk7QUFDTiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC93aWdnbGUuanM/OTRlYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApIHx8ICEoKG0gPSAoczAgPSBzZXJpZXNbb3JkZXJbMF1dKS5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgeSA9IDAsIGogPSAxLCBzMCwgbSwgbjsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGkgPSAwLCBzMSA9IDAsIHMyID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIHNpID0gc2VyaWVzW29yZGVyW2ldXSxcbiAgICAgICAgICBzaWowID0gc2lbal1bMV0gfHwgMCxcbiAgICAgICAgICBzaWoxID0gc2lbaiAtIDFdWzFdIHx8IDAsXG4gICAgICAgICAgczMgPSAoc2lqMCAtIHNpajEpIC8gMjtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaTsgKytrKSB7XG4gICAgICAgIHZhciBzayA9IHNlcmllc1tvcmRlcltrXV0sXG4gICAgICAgICAgICBza2owID0gc2tbal1bMV0gfHwgMCxcbiAgICAgICAgICAgIHNrajEgPSBza1tqIC0gMV1bMV0gfHwgMDtcbiAgICAgICAgczMgKz0gc2tqMCAtIHNrajE7XG4gICAgICB9XG4gICAgICBzMSArPSBzaWowLCBzMiArPSBzMyAqIHNpajA7XG4gICAgfVxuICAgIHMwW2ogLSAxXVsxXSArPSBzMFtqIC0gMV1bMF0gPSB5O1xuICAgIGlmIChzMSkgeSAtPSBzMiAvIHMxO1xuICB9XG4gIHMwW2ogLSAxXVsxXSArPSBzMFtqIC0gMV1bMF0gPSB5O1xuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/offset/wiggle.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/appearance.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/appearance.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/order/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n var peaks = series.map(peak);\n return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hcHBlYXJhbmNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLFNBQVMsb0RBQUksK0JBQStCLDZCQUE2QjtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXBwZWFyYW5jZS5qcz9kMjM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBub25lIGZyb20gXCIuL25vbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHZhciBwZWFrcyA9IHNlcmllcy5tYXAocGVhayk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBwZWFrc1thXSAtIHBlYWtzW2JdOyB9KTtcbn1cblxuZnVuY3Rpb24gcGVhayhzZXJpZXMpIHtcbiAgdmFyIGkgPSAtMSwgaiA9IDAsIG4gPSBzZXJpZXMubGVuZ3RoLCB2aSwgdmogPSAtSW5maW5pdHk7XG4gIHdoaWxlICgrK2kgPCBuKSBpZiAoKHZpID0gK3Nlcmllc1tpXVsxXSkgPiB2aikgdmogPSB2aSwgaiA9IGk7XG4gIHJldHVybiBqO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/appearance.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/ascending.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/ascending.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"sum\": () => (/* binding */ sum)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/order/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n var sums = series.map(sum);\n return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nfunction sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hc2NlbmRpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBLFNBQVMsb0RBQUksK0JBQStCLDJCQUEyQjtBQUN2RTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXNjZW5kaW5nLmpzPzZjNmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIHN1bXMgPSBzZXJpZXMubWFwKHN1bSk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzdW1zW2FdIC0gc3Vtc1tiXTsgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW0oc2VyaWVzKSB7XG4gIHZhciBzID0gMCwgaSA9IC0xLCBuID0gc2VyaWVzLmxlbmd0aCwgdjtcbiAgd2hpbGUgKCsraSA8IG4pIGlmICh2ID0gK3Nlcmllc1tpXVsxXSkgcyArPSB2O1xuICByZXR1cm4gcztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/ascending.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/descending.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/descending.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-shape/src/order/ascending.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n return (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series).reverse();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9kZXNjZW5kaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDOztBQUV2Qyw2QkFBZSxvQ0FBUztBQUN4QixTQUFTLHlEQUFTO0FBQ2xCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvZGVzY2VuZGluZy5qcz8xZTMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICByZXR1cm4gYXNjZW5kaW5nKHNlcmllcykucmV2ZXJzZSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/descending.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/insideOut.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/insideOut.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _appearance_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appearance.js */ \"../../../node_modules/d3-shape/src/order/appearance.js\");\n/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ \"../../../node_modules/d3-shape/src/order/ascending.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(_ascending_js__WEBPACK_IMPORTED_MODULE_0__.sum),\n order = (0,_appearance_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9pbnNpZGVPdXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXlDO0FBQ047O0FBRW5DLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw4Q0FBRztBQUMzQixjQUFjLDBEQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvaW5zaWRlT3V0LmpzPzFiYmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcGVhcmFuY2UgZnJvbSBcIi4vYXBwZWFyYW5jZS5qc1wiO1xuaW1wb3J0IHtzdW19IGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIG4gPSBzZXJpZXMubGVuZ3RoLFxuICAgICAgaSxcbiAgICAgIGosXG4gICAgICBzdW1zID0gc2VyaWVzLm1hcChzdW0pLFxuICAgICAgb3JkZXIgPSBhcHBlYXJhbmNlKHNlcmllcyksXG4gICAgICB0b3AgPSAwLFxuICAgICAgYm90dG9tID0gMCxcbiAgICAgIHRvcHMgPSBbXSxcbiAgICAgIGJvdHRvbXMgPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgaiA9IG9yZGVyW2ldO1xuICAgIGlmICh0b3AgPCBib3R0b20pIHtcbiAgICAgIHRvcCArPSBzdW1zW2pdO1xuICAgICAgdG9wcy5wdXNoKGopO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3R0b20gKz0gc3Vtc1tqXTtcbiAgICAgIGJvdHRvbXMucHVzaChqKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm90dG9tcy5yZXZlcnNlKCkuY29uY2F0KHRvcHMpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/insideOut.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/none.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/none.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9ub25lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL25vbmUuanM/YzE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIG4gPSBzZXJpZXMubGVuZ3RoLCBvID0gbmV3IEFycmF5KG4pO1xuICB3aGlsZSAoLS1uID49IDApIG9bbl0gPSBuO1xuICByZXR1cm4gbztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/none.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/order/reverse.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/order/reverse.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ \"../../../node_modules/d3-shape/src/order/none.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) {\n return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(series).reverse();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9yZXZlcnNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUU3Qiw2QkFBZSxvQ0FBUztBQUN4QixTQUFTLG9EQUFJO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9yZXZlcnNlLmpzPzdlNWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgcmV0dXJuIG5vbmUoc2VyaWVzKS5yZXZlcnNlKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/order/reverse.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/path.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-shape/src/path.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"withPath\": () => (/* binding */ withPath)\n/* harmony export */ });\n/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ \"../../../node_modules/d3-path/src/path.js\");\n\n\nfunction withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new d3_path__WEBPACK_IMPORTED_MODULE_0__.Path(digits);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZCOztBQUV0QjtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsNkRBQTZELEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHlDQUFJO0FBQ3ZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcGF0aC5qcz9jNDMyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYXRoKHNoYXBlKSB7XG4gIGxldCBkaWdpdHMgPSAzO1xuXG4gIHNoYXBlLmRpZ2l0cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkaWdpdHM7XG4gICAgaWYgKF8gPT0gbnVsbCkge1xuICAgICAgZGlnaXRzID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZCA9IE1hdGguZmxvb3IoXyk7XG4gICAgICBpZiAoIShkID49IDApKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7X31gKTtcbiAgICAgIGRpZ2l0cyA9IGQ7XG4gICAgfVxuICAgIHJldHVybiBzaGFwZTtcbiAgfTtcblxuICByZXR1cm4gKCkgPT4gbmV3IFBhdGgoZGlnaXRzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/path.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/pie.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-shape/src/pie.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-shape/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _descending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./descending.js */ \"../../../node_modules/d3-shape/src/descending.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/d3-shape/src/identity.js\");\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var value = _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n sortValues = _descending_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n sort = null,\n startAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(0),\n endAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_math_js__WEBPACK_IMPORTED_MODULE_3__.tau),\n padAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(0);\n\n function pie(data) {\n var i,\n n = (data = (0,_array_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(_math_js__WEBPACK_IMPORTED_MODULE_3__.tau, Math.max(-_math_js__WEBPACK_IMPORTED_MODULE_3__.tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+_), pie) : padAngle;\n };\n\n return pie;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9waWUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQStCO0FBQ007QUFDSTtBQUNKO0FBQ1A7O0FBRTlCLDZCQUFlLHNDQUFXO0FBQzFCLGNBQWMsb0RBQVE7QUFDdEIsbUJBQW1CLHNEQUFVO0FBQzdCO0FBQ0EsbUJBQW1CLHdEQUFRO0FBQzNCLGlCQUFpQix3REFBUSxDQUFDLHlDQUFHO0FBQzdCLGlCQUFpQix3REFBUTs7QUFFekI7QUFDQTtBQUNBLG9CQUFvQixxREFBSztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IseUNBQUcsWUFBWSx5Q0FBRztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RCxzQ0FBc0M7QUFDOUYsdURBQXVELGdDQUFnQzs7QUFFdkY7QUFDQSxtREFBbUQsT0FBTztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRSx3REFBUTtBQUM3RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEVBQTBFLHdEQUFRO0FBQ2xGOztBQUVBO0FBQ0Esd0VBQXdFLHdEQUFRO0FBQ2hGOztBQUVBO0FBQ0Esd0VBQXdFLHdEQUFRO0FBQ2hGOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9waWUuanM/YWEyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXkgZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGRlc2NlbmRpbmcgZnJvbSBcIi4vZGVzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5pbXBvcnQge3RhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gaWRlbnRpdHksXG4gICAgICBzb3J0VmFsdWVzID0gZGVzY2VuZGluZyxcbiAgICAgIHNvcnQgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGNvbnN0YW50KDApLFxuICAgICAgZW5kQW5nbGUgPSBjb25zdGFudCh0YXUpLFxuICAgICAgcGFkQW5nbGUgPSBjb25zdGFudCgwKTtcblxuICBmdW5jdGlvbiBwaWUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gKGRhdGEgPSBhcnJheShkYXRhKSkubGVuZ3RoLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBzdW0gPSAwLFxuICAgICAgICBpbmRleCA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYXJjcyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYTAgPSArc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBkYSA9IE1hdGgubWluKHRhdSwgTWF0aC5tYXgoLXRhdSwgZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGEwKSksXG4gICAgICAgIGExLFxuICAgICAgICBwID0gTWF0aC5taW4oTWF0aC5hYnMoZGEpIC8gbiwgcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgIHBhID0gcCAqIChkYSA8IDAgPyAtMSA6IDEpLFxuICAgICAgICB2O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh2ID0gYXJjc1tpbmRleFtpXSA9IGldID0gK3ZhbHVlKGRhdGFbaV0sIGksIGRhdGEpKSA+IDApIHtcbiAgICAgICAgc3VtICs9IHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWxseSBzb3J0IHRoZSBhcmNzIGJ5IHByZXZpb3VzbHktY29tcHV0ZWQgdmFsdWVzIG9yIGJ5IGRhdGEuXG4gICAgaWYgKHNvcnRWYWx1ZXMgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0VmFsdWVzKGFyY3NbaV0sIGFyY3Nbal0pOyB9KTtcbiAgICBlbHNlIGlmIChzb3J0ICE9IG51bGwpIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gc29ydChkYXRhW2ldLCBkYXRhW2pdKTsgfSk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBhcmNzISBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlIG9yaWdpbmFsIGRhdGEncyBvcmRlci5cbiAgICBmb3IgKGkgPSAwLCBrID0gc3VtID8gKGRhIC0gbiAqIHBhKSAvIHN1bSA6IDA7IGkgPCBuOyArK2ksIGEwID0gYTEpIHtcbiAgICAgIGogPSBpbmRleFtpXSwgdiA9IGFyY3Nbal0sIGExID0gYTAgKyAodiA+IDAgPyB2ICogayA6IDApICsgcGEsIGFyY3Nbal0gPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbal0sXG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgc3RhcnRBbmdsZTogYTAsXG4gICAgICAgIGVuZEFuZ2xlOiBhMSxcbiAgICAgICAgcGFkQW5nbGU6IHBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyY3M7XG4gIH1cblxuICBwaWUudmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHZhbHVlO1xuICB9O1xuXG4gIHBpZS5zb3J0VmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnRWYWx1ZXMgPSBfLCBzb3J0ID0gbnVsbCwgcGllKSA6IHNvcnRWYWx1ZXM7XG4gIH07XG5cbiAgcGllLnNvcnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydCA9IF8sIHNvcnRWYWx1ZXMgPSBudWxsLCBwaWUpIDogc29ydDtcbiAgfTtcblxuICBwaWUuc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGFydEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBzdGFydEFuZ2xlO1xuICB9O1xuXG4gIHBpZS5lbmRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbmRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogZW5kQW5nbGU7XG4gIH07XG5cbiAgcGllLnBhZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBwYWRBbmdsZTtcbiAgfTtcblxuICByZXR1cm4gcGllO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/pie.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/point.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-shape/src/point.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"x\": () => (/* binding */ x),\n/* harmony export */ \"y\": () => (/* binding */ y)\n/* harmony export */ });\nfunction x(p) {\n return p[0];\n}\n\nfunction y(p) {\n return p[1];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcz84ZTRkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/point.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/pointRadial.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-shape/src/pointRadial.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludFJhZGlhbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50UmFkaWFsLmpzPzI1N2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gWyh5ID0gK3kpICogTWF0aC5jb3MoeCAtPSBNYXRoLlBJIC8gMiksIHkgKiBNYXRoLnNpbih4KV07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/pointRadial.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/stack.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-shape/src/stack.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./array.js */ \"../../../node_modules/d3-shape/src/array.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _offset_none_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset/none.js */ \"../../../node_modules/d3-shape/src/offset/none.js\");\n/* harmony import */ var _order_none_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./order/none.js */ \"../../../node_modules/d3-shape/src/order/none.js\");\n\n\n\n\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction stackSeries(key) {\n const series = [];\n series.key = key;\n return series;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var keys = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])([]),\n order = _order_none_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n offset = _offset_none_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n value = stackValue;\n\n function stack(data) {\n var sz = Array.from(keys.apply(this, arguments), stackSeries),\n i, n = sz.length, j = -1,\n oz;\n\n for (const d of data) {\n for (i = 0, ++j; i < n; ++i) {\n (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n }\n }\n\n for (i = 0, oz = (0,_array_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(order(sz)); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Array.from(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? _order_none_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Array.from(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? _offset_none_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : _, stack) : offset;\n };\n\n return stack;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zdGFjay5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErQjtBQUNNO0FBQ0s7QUFDRjs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUIsYUFBYSx3REFBUTtBQUNyQixjQUFjLHNEQUFTO0FBQ3ZCLGVBQWUsdURBQVU7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLHFEQUFLLGFBQWEsT0FBTztBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRSx3REFBUTtBQUM1RTs7QUFFQTtBQUNBLHFFQUFxRSx3REFBUTtBQUM3RTs7QUFFQTtBQUNBLG1EQUFtRCxzREFBUyxpQ0FBaUMsd0RBQVE7QUFDckc7O0FBRUE7QUFDQSxvREFBb0QsdURBQVU7QUFDOUQ7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N0YWNrLmpzPzk2OTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBvZmZzZXROb25lIGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5pbXBvcnQgb3JkZXJOb25lIGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcblxuZnVuY3Rpb24gc3RhY2tWYWx1ZShkLCBrZXkpIHtcbiAgcmV0dXJuIGRba2V5XTtcbn1cblxuZnVuY3Rpb24gc3RhY2tTZXJpZXMoa2V5KSB7XG4gIGNvbnN0IHNlcmllcyA9IFtdO1xuICBzZXJpZXMua2V5ID0ga2V5O1xuICByZXR1cm4gc2VyaWVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGtleXMgPSBjb25zdGFudChbXSksXG4gICAgICBvcmRlciA9IG9yZGVyTm9uZSxcbiAgICAgIG9mZnNldCA9IG9mZnNldE5vbmUsXG4gICAgICB2YWx1ZSA9IHN0YWNrVmFsdWU7XG5cbiAgZnVuY3Rpb24gc3RhY2soZGF0YSkge1xuICAgIHZhciBzeiA9IEFycmF5LmZyb20oa2V5cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzdGFja1NlcmllcyksXG4gICAgICAgIGksIG4gPSBzei5sZW5ndGgsIGogPSAtMSxcbiAgICAgICAgb3o7XG5cbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0YSkge1xuICAgICAgZm9yIChpID0gMCwgKytqOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIChzeltpXVtqXSA9IFswLCArdmFsdWUoZCwgc3pbaV0ua2V5LCBqLCBkYXRhKV0pLmRhdGEgPSBkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIG96ID0gYXJyYXkob3JkZXIoc3opKTsgaSA8IG47ICsraSkge1xuICAgICAgc3pbb3pbaV1dLmluZGV4ID0gaTtcbiAgICB9XG5cbiAgICBvZmZzZXQoc3osIG96KTtcbiAgICByZXR1cm4gc3o7XG4gIH1cblxuICBzdGFjay5rZXlzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGtleXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KEFycmF5LmZyb20oXykpLCBzdGFjaykgOiBrZXlzO1xuICB9O1xuXG4gIHN0YWNrLnZhbHVlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZhbHVlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHN0YWNrKSA6IHZhbHVlO1xuICB9O1xuXG4gIHN0YWNrLm9yZGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG9yZGVyID0gXyA9PSBudWxsID8gb3JkZXJOb25lIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChBcnJheS5mcm9tKF8pKSwgc3RhY2spIDogb3JkZXI7XG4gIH07XG5cbiAgc3RhY2sub2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG9mZnNldCA9IF8gPT0gbnVsbCA/IG9mZnNldE5vbmUgOiBfLCBzdGFjaykgOiBvZmZzZXQ7XG4gIH07XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/stack.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Symbol),\n/* harmony export */ \"symbolsFill\": () => (/* binding */ symbolsFill),\n/* harmony export */ \"symbolsStroke\": () => (/* binding */ symbolsStroke)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-shape/src/constant.js\");\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./path.js */ \"../../../node_modules/d3-shape/src/path.js\");\n/* harmony import */ var _symbol_asterisk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./symbol/asterisk.js */ \"../../../node_modules/d3-shape/src/symbol/asterisk.js\");\n/* harmony import */ var _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./symbol/circle.js */ \"../../../node_modules/d3-shape/src/symbol/circle.js\");\n/* harmony import */ var _symbol_cross_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./symbol/cross.js */ \"../../../node_modules/d3-shape/src/symbol/cross.js\");\n/* harmony import */ var _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/diamond.js */ \"../../../node_modules/d3-shape/src/symbol/diamond.js\");\n/* harmony import */ var _symbol_diamond2_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./symbol/diamond2.js */ \"../../../node_modules/d3-shape/src/symbol/diamond2.js\");\n/* harmony import */ var _symbol_plus_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./symbol/plus.js */ \"../../../node_modules/d3-shape/src/symbol/plus.js\");\n/* harmony import */ var _symbol_square_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./symbol/square.js */ \"../../../node_modules/d3-shape/src/symbol/square.js\");\n/* harmony import */ var _symbol_square2_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./symbol/square2.js */ \"../../../node_modules/d3-shape/src/symbol/square2.js\");\n/* harmony import */ var _symbol_star_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symbol/star.js */ \"../../../node_modules/d3-shape/src/symbol/star.js\");\n/* harmony import */ var _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symbol/triangle.js */ \"../../../node_modules/d3-shape/src/symbol/triangle.js\");\n/* harmony import */ var _symbol_triangle2_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./symbol/triangle2.js */ \"../../../node_modules/d3-shape/src/symbol/triangle2.js\");\n/* harmony import */ var _symbol_wye_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./symbol/wye.js */ \"../../../node_modules/d3-shape/src/symbol/wye.js\");\n/* harmony import */ var _symbol_times_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symbol/times.js */ \"../../../node_modules/d3-shape/src/symbol/times.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// These symbols are designed to be filled.\nconst symbolsFill = [\n _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n _symbol_cross_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n _symbol_square_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n _symbol_star_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n _symbol_wye_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nconst symbolsStroke = [\n _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n _symbol_plus_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n _symbol_times_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n _symbol_triangle2_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n _symbol_asterisk_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n _symbol_square2_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n _symbol_diamond2_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n];\n\nfunction Symbol(type, size) {\n let context = null,\n path = (0,_path_js__WEBPACK_IMPORTED_MODULE_13__.withPath)(symbol);\n\n type = typeof type === \"function\" ? type : (0,_constant_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(type || _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n size = typeof size === \"function\" ? size : (0,_constant_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXFDO0FBQ0Y7QUFDUztBQUNKO0FBQ0Y7QUFDSTtBQUNFO0FBQ1I7QUFDSTtBQUNFO0FBQ047QUFDUTtBQUNFO0FBQ1o7QUFDSTs7QUFFdEM7QUFDTztBQUNQLEVBQUUseURBQU07QUFDUixFQUFFLHdEQUFLO0FBQ1AsRUFBRSwwREFBTztBQUNULEVBQUUseURBQU07QUFDUixFQUFFLHVEQUFJO0FBQ04sRUFBRSwyREFBUTtBQUNWLEVBQUUsc0RBQUc7QUFDTDs7QUFFQTtBQUNPO0FBQ1AsRUFBRSx5REFBTTtBQUNSLEVBQUUsdURBQUk7QUFDTixFQUFFLHdEQUFLO0FBQ1AsRUFBRSw0REFBUztBQUNYLEVBQUUsNERBQVE7QUFDVixFQUFFLDJEQUFPO0FBQ1QsRUFBRSw0REFBUTtBQUNWOztBQUVlO0FBQ2Y7QUFDQSxhQUFhLG1EQUFROztBQUVyQiw2Q0FBNkMseURBQVEsU0FBUyx5REFBTTtBQUNwRSw2Q0FBNkMseURBQVE7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRSx5REFBUTtBQUM1RTs7QUFFQTtBQUNBLG9FQUFvRSx5REFBUTtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC5qcz85ZmNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt3aXRoUGF0aH0gZnJvbSBcIi4vcGF0aC5qc1wiO1xuaW1wb3J0IGFzdGVyaXNrIGZyb20gXCIuL3N5bWJvbC9hc3Rlcmlzay5qc1wiO1xuaW1wb3J0IGNpcmNsZSBmcm9tIFwiLi9zeW1ib2wvY2lyY2xlLmpzXCI7XG5pbXBvcnQgY3Jvc3MgZnJvbSBcIi4vc3ltYm9sL2Nyb3NzLmpzXCI7XG5pbXBvcnQgZGlhbW9uZCBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuaW1wb3J0IGRpYW1vbmQyIGZyb20gXCIuL3N5bWJvbC9kaWFtb25kMi5qc1wiO1xuaW1wb3J0IHBsdXMgZnJvbSBcIi4vc3ltYm9sL3BsdXMuanNcIjtcbmltcG9ydCBzcXVhcmUgZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuaW1wb3J0IHNxdWFyZTIgZnJvbSBcIi4vc3ltYm9sL3NxdWFyZTIuanNcIjtcbmltcG9ydCBzdGFyIGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5pbXBvcnQgdHJpYW5nbGUgZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5pbXBvcnQgdHJpYW5nbGUyIGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZTIuanNcIjtcbmltcG9ydCB3eWUgZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuaW1wb3J0IHRpbWVzIGZyb20gXCIuL3N5bWJvbC90aW1lcy5qc1wiO1xuXG4vLyBUaGVzZSBzeW1ib2xzIGFyZSBkZXNpZ25lZCB0byBiZSBmaWxsZWQuXG5leHBvcnQgY29uc3Qgc3ltYm9sc0ZpbGwgPSBbXG4gIGNpcmNsZSxcbiAgY3Jvc3MsXG4gIGRpYW1vbmQsXG4gIHNxdWFyZSxcbiAgc3RhcixcbiAgdHJpYW5nbGUsXG4gIHd5ZVxuXTtcblxuLy8gVGhlc2Ugc3ltYm9scyBhcmUgZGVzaWduZWQgdG8gYmUgc3Ryb2tlZCAod2l0aCBhIHdpZHRoIG9mIDEuNXB4IGFuZCByb3VuZCBjYXBzKS5cbmV4cG9ydCBjb25zdCBzeW1ib2xzU3Ryb2tlID0gW1xuICBjaXJjbGUsXG4gIHBsdXMsXG4gIHRpbWVzLFxuICB0cmlhbmdsZTIsXG4gIGFzdGVyaXNrLFxuICBzcXVhcmUyLFxuICBkaWFtb25kMlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ltYm9sKHR5cGUsIHNpemUpIHtcbiAgbGV0IGNvbnRleHQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKHN5bWJvbCk7XG5cbiAgdHlwZSA9IHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIgPyB0eXBlIDogY29uc3RhbnQodHlwZSB8fCBjaXJjbGUpO1xuICBzaXplID0gdHlwZW9mIHNpemUgPT09IFwiZnVuY3Rpb25cIiA/IHNpemUgOiBjb25zdGFudChzaXplID09PSB1bmRlZmluZWQgPyA2NCA6ICtzaXplKTtcblxuICBmdW5jdGlvbiBzeW1ib2woKSB7XG4gICAgbGV0IGJ1ZmZlcjtcbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG4gICAgdHlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmRyYXcoY29udGV4dCwgK3NpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBzeW1ib2wudHlwZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eXBlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgc3ltYm9sKSA6IHR5cGU7XG4gIH07XG5cbiAgc3ltYm9sLnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2l6ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBzeW1ib2wpIDogc2l6ZTtcbiAgfTtcblxuICBzeW1ib2wuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8sIHN5bWJvbCkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBzeW1ib2w7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/asterisk.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/asterisk.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst sqrt3 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size + (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvYXN0ZXJpc2suanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLGNBQWMsOENBQUk7O0FBRWxCLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJLFFBQVEsNkNBQUc7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2FzdGVyaXNrLmpzP2VjYjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHttaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmNvbnN0IHNxcnQzID0gc3FydCgzKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplICsgbWluKHNpemUgLyAyOCwgMC43NSkpICogMC41OTQzNjtcbiAgICBjb25zdCB0ID0gciAvIDI7XG4gICAgY29uc3QgdSA9IHQgKiBzcXJ0MztcbiAgICBjb250ZXh0Lm1vdmVUbygwLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbygwLCAtcik7XG4gICAgY29udGV4dC5tb3ZlVG8oLXUsIC10KTtcbiAgICBjb250ZXh0LmxpbmVUbyh1LCB0KTtcbiAgICBjb250ZXh0Lm1vdmVUbygtdSwgdCk7XG4gICAgY29udGV4dC5saW5lVG8odSwgLXQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/asterisk.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/circle.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/circle.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size / _math_js__WEBPACK_IMPORTED_MODULE_0__.pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, _math_js__WEBPACK_IMPORTED_MODULE_0__.tau);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY2lyY2xlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlDOztBQUV6QyxpRUFBZTtBQUNmO0FBQ0EsY0FBYyw4Q0FBSSxRQUFRLHdDQUFFO0FBQzVCO0FBQ0EsNEJBQTRCLHlDQUFHO0FBQy9CO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2NpcmNsZS5qcz80MjVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGksIHNxcnQsIHRhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplIC8gcGkpO1xuICAgIGNvbnRleHQubW92ZVRvKHIsIDApO1xuICAgIGNvbnRleHQuYXJjKDAsIDAsIHIsIDAsIHRhdSk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/circle.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/cross.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/cross.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY3Jvc3MuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY3Jvc3MuanM/MGU3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgciA9IHNxcnQoc2l6ZSAvIDUpIC8gMjtcbiAgICBjb250ZXh0Lm1vdmVUbygtMyAqIHIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAtMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIC0zICogcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKDMgKiByLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oMyAqIHIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIDMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtMyAqIHIsIHIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/cross.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/diamond.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/diamond.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst tan30 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(1 / 3);\nconst tan30_2 = tan30 * 2;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFaEMsY0FBYyw4Q0FBSTtBQUNsQjs7QUFFQSxpRUFBZTtBQUNmO0FBQ0EsY0FBYyw4Q0FBSTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9kaWFtb25kLmpzP2I1MDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCB0YW4zMCA9IHNxcnQoMSAvIDMpO1xuY29uc3QgdGFuMzBfMiA9IHRhbjMwICogMjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCB5ID0gc3FydChzaXplIC8gdGFuMzBfMik7XG4gICAgY29uc3QgeCA9IHkgKiB0YW4zMDtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCAteSk7XG4gICAgY29udGV4dC5saW5lVG8oeCwgMCk7XG4gICAgY29udGV4dC5saW5lVG8oMCwgeSk7XG4gICAgY29udGV4dC5saW5lVG8oLXgsIDApO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/diamond.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/diamond2.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/diamond2.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size) * 0.62625;\n context.moveTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.lineTo(-r, 0);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZDIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9kaWFtb25kMi5qcz9iYTE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplKSAqIDAuNjI2MjU7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIDApO1xuICAgIGNvbnRleHQubGluZVRvKDAsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAwKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/diamond2.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/plus.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/plus.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(size / 7, 2)) * 0.87559;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n context.moveTo(0, r);\n context.lineTo(0, -r);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvcGx1cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckMsaUVBQWU7QUFDZjtBQUNBLGNBQWMsOENBQUksUUFBUSw2Q0FBRztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3BsdXMuanM/NGNkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21pbiwgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplIC0gbWluKHNpemUgLyA3LCAyKSkgKiAwLjg3NTU5O1xuICAgIGNvbnRleHQubW92ZVRvKC1yLCAwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAwKTtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbygwLCAtcik7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/plus.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/square.js": /*!***********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/square.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const w = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdDOztBQUVoQyxpRUFBZTtBQUNmO0FBQ0EsY0FBYyw4Q0FBSTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzPzdlYjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHcgPSBzcXJ0KHNpemUpO1xuICAgIGNvbnN0IHggPSAtdyAvIDI7XG4gICAgY29udGV4dC5yZWN0KHgsIHgsIHcsIHcpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/square.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/square2.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/square2.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size) * 0.4431;\n context.moveTo(r, r);\n context.lineTo(r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, r);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlMi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnQzs7QUFFaEMsaUVBQWU7QUFDZjtBQUNBLGNBQWMsOENBQUk7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3NxdWFyZTIuanM/ZTE0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgciA9IHNxcnQoc2l6ZSkgKiAwLjQ0MzE7XG4gICAgY29udGV4dC5tb3ZlVG8ociwgcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIHIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/square2.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/star.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/star.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst ka = 0.89081309152928522810;\nconst kr = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(_math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 10) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(7 * _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 10);\nconst kx = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(_math_js__WEBPACK_IMPORTED_MODULE_0__.tau / 10) * kr;\nconst ky = -(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(_math_js__WEBPACK_IMPORTED_MODULE_0__.tau / 10) * kr;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (let i = 1; i < 5; ++i) {\n const a = _math_js__WEBPACK_IMPORTED_MODULE_0__.tau * i / 5;\n const c = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a);\n const s = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3Rhci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtRDs7QUFFbkQ7QUFDQSxXQUFXLDZDQUFHLENBQUMsd0NBQUUsU0FBUyw2Q0FBRyxLQUFLLHdDQUFFO0FBQ3BDLFdBQVcsNkNBQUcsQ0FBQyx5Q0FBRztBQUNsQixZQUFZLDZDQUFHLENBQUMseUNBQUc7O0FBRW5CLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0IsZ0JBQWdCLHlDQUFHO0FBQ25CLGdCQUFnQiw2Q0FBRztBQUNuQixnQkFBZ0IsNkNBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9zdGFyLmpzPzliZmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzaW4sIGNvcywgc3FydCwgcGksIHRhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuY29uc3Qga2EgPSAwLjg5MDgxMzA5MTUyOTI4NTIyODEwO1xuY29uc3Qga3IgPSBzaW4ocGkgLyAxMCkgLyBzaW4oNyAqIHBpIC8gMTApO1xuY29uc3Qga3ggPSBzaW4odGF1IC8gMTApICoga3I7XG5jb25zdCBreSA9IC1jb3ModGF1IC8gMTApICoga3I7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgciA9IHNxcnQoc2l6ZSAqIGthKTtcbiAgICBjb25zdCB4ID0ga3ggKiByO1xuICAgIGNvbnN0IHkgPSBreSAqIHI7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICBjb25zdCBhID0gdGF1ICogaSAvIDU7XG4gICAgICBjb25zdCBjID0gY29zKGEpO1xuICAgICAgY29uc3QgcyA9IHNpbihhKTtcbiAgICAgIGNvbnRleHQubGluZVRvKHMgKiByLCAtYyAqIHIpO1xuICAgICAgY29udGV4dC5saW5lVG8oYyAqIHggLSBzICogeSwgcyAqIHggKyBjICogeSk7XG4gICAgfVxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/star.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/times.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/times.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(size / 6, 1.7)) * 0.6189;\n context.moveTo(-r, -r);\n context.lineTo(r, r);\n context.moveTo(-r, r);\n context.lineTo(r, -r);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdGltZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJLFFBQVEsNkNBQUc7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC90aW1lcy5qcz8wMjA3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWluLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgLSBtaW4oc2l6ZSAvIDYsIDEuNykpICogMC42MTg5O1xuICAgIGNvbnRleHQubW92ZVRvKC1yLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgcik7XG4gICAgY29udGV4dC5tb3ZlVG8oLXIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIC1yKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/times.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/triangle.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/triangle.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst sqrt3 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const y = -(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDLGNBQWMsOENBQUk7O0FBRWxCLGlFQUFlO0FBQ2Y7QUFDQSxlQUFlLDhDQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanM/N2EyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmNvbnN0IHNxcnQzID0gc3FydCgzKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCB5ID0gLXNxcnQoc2l6ZSAvIChzcXJ0MyAqIDMpKTtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCB5ICogMik7XG4gICAgY29udGV4dC5saW5lVG8oLXNxcnQzICogeSwgLXkpO1xuICAgIGNvbnRleHQubGluZVRvKHNxcnQzICogeSwgLXkpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/triangle.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/triangle2.js": /*!**************************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/triangle2.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst sqrt3 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const s = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdDOztBQUVoQyxjQUFjLDhDQUFJOztBQUVsQixpRUFBZTtBQUNmO0FBQ0EsY0FBYyw4Q0FBSTtBQUNsQjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3RyaWFuZ2xlMi5qcz9iYTViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuY29uc3Qgc3FydDMgPSBzcXJ0KDMpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHMgPSBzcXJ0KHNpemUpICogMC42ODI0O1xuICAgIGNvbnN0IHQgPSBzICAvIDI7XG4gICAgY29uc3QgdSA9IChzICogc3FydDMpIC8gMjsgLy8gY29zKE1hdGguUEkgLyA2KVxuICAgIGNvbnRleHQubW92ZVRvKDAsIC1zKTtcbiAgICBjb250ZXh0LmxpbmVUbyh1LCB0KTtcbiAgICBjb250ZXh0LmxpbmVUbygtdSwgdCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/triangle2.js\n"); /***/ }), /***/ "../../../node_modules/d3-shape/src/symbol/wye.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-shape/src/symbol/wye.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ \"../../../node_modules/d3-shape/src/math.js\");\n\n\nconst c = -0.5;\nconst s = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3) / 2;\nconst k = 1 / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(12);\nconst a = (k / 2 + 1) * 3;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n draw(context, size) {\n const r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(size / a);\n const x0 = r / 2, y0 = r * k;\n const x1 = x0, y1 = r * k + r;\n const x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdDOztBQUVoQztBQUNBLFVBQVUsOENBQUk7QUFDZCxjQUFjLDhDQUFJO0FBQ2xCOztBQUVBLGlFQUFlO0FBQ2Y7QUFDQSxjQUFjLDhDQUFJO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzP2U4ZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCBjID0gLTAuNTtcbmNvbnN0IHMgPSBzcXJ0KDMpIC8gMjtcbmNvbnN0IGsgPSAxIC8gc3FydCgxMik7XG5jb25zdCBhID0gKGsgLyAyICsgMSkgKiAzO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgLyBhKTtcbiAgICBjb25zdCB4MCA9IHIgLyAyLCB5MCA9IHIgKiBrO1xuICAgIGNvbnN0IHgxID0geDAsIHkxID0gciAqIGsgKyByO1xuICAgIGNvbnN0IHgyID0gLXgxLCB5MiA9IHkxO1xuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCAtIHMgKiB5MCwgcyAqIHgwICsgYyAqIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgLSBzICogeTEsIHMgKiB4MSArIGMgKiB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyIC0gcyAqIHkyLCBzICogeDIgKyBjICogeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCArIHMgKiB5MCwgYyAqIHkwIC0gcyAqIHgwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgKyBzICogeTEsIGMgKiB5MSAtIHMgKiB4MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyICsgcyAqIHkyLCBjICogeTIgLSBzICogeDIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-shape/src/symbol/wye.js\n"); /***/ }), /***/ "../../../node_modules/d3-time-format/src/defaultLocale.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-time-format/src/defaultLocale.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ defaultLocale),\n/* harmony export */ \"timeFormat\": () => (/* binding */ timeFormat),\n/* harmony export */ \"timeParse\": () => (/* binding */ timeParse),\n/* harmony export */ \"utcFormat\": () => (/* binding */ utcFormat),\n/* harmony export */ \"utcParse\": () => (/* binding */ utcParse)\n/* harmony export */ });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ \"../../../node_modules/d3-time-format/src/locale.js\");\n\n\nvar locale;\nvar timeFormat;\nvar timeParse;\nvar utcFormat;\nvar utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale(definition) {\n locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF1Qzs7QUFFdkM7QUFDTztBQUNBO0FBQ0E7QUFDQTs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVjO0FBQ2YsV0FBVyxzREFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzPzhlZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time-format/src/defaultLocale.js\n"); /***/ }), /***/ "../../../node_modules/d3-time-format/src/index.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-time-format/src/index.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isoFormat\": () => (/* reexport safe */ _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"isoParse\": () => (/* reexport safe */ _isoParse_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"timeFormat\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.timeFormat),\n/* harmony export */ \"timeFormatDefaultLocale\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"timeFormatLocale\": () => (/* reexport safe */ _locale_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"timeParse\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.timeParse),\n/* harmony export */ \"utcFormat\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcFormat),\n/* harmony export */ \"utcParse\": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcParse)\n/* harmony export */ });\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"../../../node_modules/d3-time-format/src/defaultLocale.js\");\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ \"../../../node_modules/d3-time-format/src/locale.js\");\n/* harmony import */ var _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isoFormat.js */ \"../../../node_modules/d3-time-format/src/isoFormat.js\");\n/* harmony import */ var _isoParse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isoParse.js */ \"../../../node_modules/d3-time-format/src/isoParse.js\");\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBa0g7QUFDMUQ7QUFDSjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaW5kZXguanM/YWIwMyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgdGltZUZvcm1hdERlZmF1bHRMb2NhbGUsIHRpbWVGb3JtYXQsIHRpbWVQYXJzZSwgdXRjRm9ybWF0LCB1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRpbWVGb3JtYXRMb2NhbGV9IGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlzb0Zvcm1hdH0gZnJvbSBcIi4vaXNvRm9ybWF0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaXNvUGFyc2V9IGZyb20gXCIuL2lzb1BhcnNlLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time-format/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-time-format/src/isoFormat.js": /*!*************************************************************!*\ !*** ../../../node_modules/d3-time-format/src/isoFormat.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"isoSpecifier\": () => (/* binding */ isoSpecifier)\n/* harmony export */ });\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"../../../node_modules/d3-time-format/src/defaultLocale.js\");\n\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : (0,_defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcFormat)(isoSpecifier);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formatIso);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29Gb3JtYXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZDOztBQUV0Qzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sNERBQVM7O0FBRWYsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzPzQxYTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1dGNGb3JtYXR9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcblxuZXhwb3J0IHZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xuXG5mdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG52YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICA/IGZvcm1hdElzb05hdGl2ZVxuICAgIDogdXRjRm9ybWF0KGlzb1NwZWNpZmllcik7XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdElzbztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time-format/src/isoFormat.js\n"); /***/ }), /***/ "../../../node_modules/d3-time-format/src/isoParse.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-time-format/src/isoParse.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isoFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isoFormat.js */ \"../../../node_modules/d3-time-format/src/isoFormat.js\");\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ \"../../../node_modules/d3-time-format/src/defaultLocale.js\");\n\n\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : (0,_defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcParse)(_isoFormat_js__WEBPACK_IMPORTED_MODULE_1__.isoSpecifier);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parseIso);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEM7QUFDQTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sMkRBQVEsQ0FBQyx1REFBWTs7QUFFM0IsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvUGFyc2UuanM/ZTIyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzb1NwZWNpZmllcn0gZnJvbSBcIi4vaXNvRm9ybWF0LmpzXCI7XG5pbXBvcnQge3V0Y1BhcnNlfSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHBhcnNlSXNvTmF0aXZlKHN0cmluZykge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZyk7XG4gIHJldHVybiBpc05hTihkYXRlKSA/IG51bGwgOiBkYXRlO1xufVxuXG52YXIgcGFyc2VJc28gPSArbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIilcbiAgICA/IHBhcnNlSXNvTmF0aXZlXG4gICAgOiB1dGNQYXJzZShpc29TcGVjaWZpZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZUlzbztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time-format/src/isoParse.js\n"); /***/ }), /***/ "../../../node_modules/d3-time-format/src/locale.js": /*!**********************************************************!*\ !*** ../../../node_modules/d3-time-format/src/locale.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ formatLocale)\n/* harmony export */ });\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/week.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/day.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/year.js\");\n\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday.ceil(week) : (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday)(week);\n week = d3_time__WEBPACK_IMPORTED_MODULE_1__.utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__.timeMonday.ceil(week) : (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.timeMonday)(week);\n week = d3_time__WEBPACK_IMPORTED_MODULE_1__.timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_1__.timeDay.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.timeYear)(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.timeSunday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.timeYear)(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.timeThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.timeThursday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.timeYear)(d), d) + ((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.timeYear)(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.timeMonday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.timeYear)(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.timeThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_1__.utcDay.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.utcYear)(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcSunday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.utcYear)(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.utcYear)(d), d) + ((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.utcYear)(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_2__.utcYear)(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9sb2NhbGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVdpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWOztBQUVlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsbURBQWMsU0FBUyxrREFBUztBQUN4RSxpQkFBaUIsa0RBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0Esd0NBQXdDLG9EQUFlLFNBQVMsbURBQVU7QUFDMUUsaUJBQWlCLG1EQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsa0RBQWEsQ0FBQyxpREFBUTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxxREFBZ0IsQ0FBQyxpREFBUTtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLHFEQUFZLE1BQU0sc0RBQWlCO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQSxhQUFhLHVEQUFrQixDQUFDLGlEQUFRLFdBQVcsaURBQVE7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxxREFBZ0IsQ0FBQyxpREFBUTtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQ0FBZ0MscURBQVksTUFBTSxzREFBaUI7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaURBQVksQ0FBQyxnREFBTztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxvREFBZSxDQUFDLGdEQUFPO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsb0RBQVcsTUFBTSxxREFBZ0I7QUFDcEU7O0FBRUE7QUFDQTtBQUNBLGFBQWEsc0RBQWlCLENBQUMsZ0RBQU8sV0FBVyxnREFBTztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLG9EQUFlLENBQUMsZ0RBQU87QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLG9EQUFXLE1BQU0scURBQWdCO0FBQ2pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzP2NjNTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZVN1bmRheSxcbiAgdGltZU1vbmRheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lWWVhcixcbiAgdXRjRGF5LFxuICB1dGNTdW5kYXksXG4gIHV0Y01vbmRheSxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1llYXJcbn0gZnJvbSBcImQzLXRpbWVcIjtcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XG4gIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdE1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0WWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0RnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0UXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFVUQ1llYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdFVUQ0Z1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogcGFyc2VZZWFyLFxuICAgIFwiR1wiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcInFcIjogcGFyc2VRdWFydGVyLFxuICAgIFwiUVwiOiBwYXJzZVVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcInVcIjogcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IHBhcnNlV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBwYXJzZVdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IHBhcnNlTG9jYWxlRGF0ZSxcbiAgICBcIlhcIjogcGFyc2VMb2NhbGVUaW1lLFxuICAgIFwieVwiOiBwYXJzZVllYXIsXG4gICAgXCJZXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJaXCI6IHBhcnNlWm9uZSxcbiAgICBcIiVcIjogcGFyc2VMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIC8vIFRoZXNlIHJlY3Vyc2l2ZSBkaXJlY3RpdmUgZGVmaW5pdGlvbnMgbXVzdCBiZSBkZWZlcnJlZC5cbiAgZm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgZm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIHV0Y0Zvcm1hdHMpO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIsIGZvcm1hdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgdmFyIHN0cmluZyA9IFtdLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICBqID0gMCxcbiAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgICBjLFxuICAgICAgICAgIHBhZCxcbiAgICAgICAgICBmb3JtYXQ7XG5cbiAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcblxuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5jaGFyQ29kZUF0KGkpID09PSAzNykge1xuICAgICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xuICAgICAgICAgIGVsc2UgcGFkID0gYyA9PT0gXCJlXCIgPyBcIiBcIiA6IFwiMFwiO1xuICAgICAgICAgIGlmIChmb3JtYXQgPSBmb3JtYXRzW2NdKSBjID0gZm9ybWF0KGRhdGUsIHBhZCk7XG4gICAgICAgICAgc3RyaW5nLnB1c2goYyk7XG4gICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICByZXR1cm4gc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5ld1BhcnNlKHNwZWNpZmllciwgWikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciBkID0gbmV3RGF0ZSgxOTAwLCB1bmRlZmluZWQsIDEpLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcbiAgICAgICAgICB3ZWVrLCBkYXk7XG4gICAgICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcbiAgICAgIGlmIChcInNcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5zICogMTAwMCArIChcIkxcIiBpbiBkID8gZC5MIDogMCkpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxuICAgICAgaWYgKFogJiYgIShcIlpcIiBpbiBkKSkgZC5aID0gMDtcblxuICAgICAgLy8gVGhlIGFtLXBtIGZsYWcgaXMgMCBmb3IgQU0sIGFuZCAxIGZvciBQTS5cbiAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAvLyBJZiB0aGUgbW9udGggd2FzIG5vdCBzcGVjaWZpZWQsIGluaGVyaXQgZnJvbSB0aGUgcXVhcnRlci5cbiAgICAgIGlmIChkLm0gPT09IHVuZGVmaW5lZCkgZC5tID0gXCJxXCIgaW4gZCA/IGQucSA6IDA7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0RGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdGltZU1vbmRheS5jZWlsKHdlZWspIDogdGltZU1vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdGltZURheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0TW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldERhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXCJXXCIgaW4gZCB8fCBcIlVcIiBpbiBkKSB7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSBcInVcIiBpbiBkID8gZC51ICUgNyA6IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXRVVENEYXkoKSA6IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldERheSgpO1xuICAgICAgICBkLm0gPSAwO1xuICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5ICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkgKyA2KSAlIDc7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXG4gICAgICAvLyBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lLlxuICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XG4gICAgICAgIGQuTSArPSBkLlogJSAxMDA7XG4gICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXG4gICAgICByZXR1cm4gbG9jYWxEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldE1vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1F1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRVVENNb250aCgpIC8gMyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgZm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgdHJ1ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXiQqKz98W1xcXSgpLnt9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBNYXAobmFtZXMubWFwKChuYW1lLCBpKSA9PiBbbmFtZS50b0xvd2VyQ2FzZSgpLCBpXSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJJU08oZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVsbFllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDQpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vab25lKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVF1YXJ0ZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC5xID0gblswXSAqIDMgLSAzLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9udGhOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZk1vbnRoKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG91cjI0KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWludXRlcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWxsaXNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWNyb3NlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQucyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdGltZURheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKHRpbWVUaHVyc2RheS5jb3VudCh0aW1lWWVhcihkKSwgZCkgKyAodGltZVllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldERheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lTW9uZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHV0Y0RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRvdyA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gVVRDZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh1dGNUaHVyc2RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSArICh1dGNZZWFyKGQpLmdldFVUQ0RheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXRVVENEYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjTW9uZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xuICByZXR1cm4gXCIrMDAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcbiAgcmV0dXJuIFwiJVwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wKGQpIHtcbiAgcmV0dXJuICtkO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKCtkIC8gMTAwMCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time-format/src/locale.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/day.js": /*!************************************************!*\ !*** ../../../node_modules/d3-time/src/day.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeDay\": () => (/* binding */ timeDay),\n/* harmony export */ \"timeDays\": () => (/* binding */ timeDays),\n/* harmony export */ \"unixDay\": () => (/* binding */ unixDay),\n/* harmony export */ \"unixDays\": () => (/* binding */ unixDays),\n/* harmony export */ \"utcDay\": () => (/* binding */ utcDay),\n/* harmony export */ \"utcDays\": () => (/* binding */ utcDays)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n\n\n\nconst timeDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay,\n date => date.getDate() - 1\n);\n\nconst timeDays = timeDay.range;\n\nconst utcDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nconst utcDays = utcDay.range;\n\nconst unixDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay;\n}, (date) => {\n return Math.floor(date / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay);\n});\n\nconst unixDays = unixDay.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUEyQztBQUNlOztBQUVuRCxnQkFBZ0IsMERBQVk7QUFDbkM7QUFDQTtBQUNBLHlGQUF5Rix3REFBYyxJQUFJLHFEQUFXO0FBQ3RIO0FBQ0E7O0FBRU87O0FBRUEsZUFBZSwwREFBWTtBQUNsQztBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRCx5QkFBeUIscURBQVc7QUFDcEMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTTs7QUFFQSxnQkFBZ0IsMERBQVk7QUFDbkM7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0QseUJBQXlCLHFEQUFXO0FBQ3BDLENBQUM7QUFDRCwyQkFBMkIscURBQVc7QUFDdEMsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzPzA5Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXkgPSB0aW1lSW50ZXJ2YWwoXG4gIGRhdGUgPT4gZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSxcbiAgKGRhdGUsIHN0ZXApID0+IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApLFxuICAoc3RhcnQsIGVuZCkgPT4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheSxcbiAgZGF0ZSA9PiBkYXRlLmdldERhdGUoKSAtIDFcbik7XG5cbmV4cG9ydCBjb25zdCB0aW1lRGF5cyA9IHRpbWVEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5ID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25EYXkpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5cyA9IHVuaXhEYXkucmFuZ2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/day.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/duration.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-time/src/duration.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"durationDay\": () => (/* binding */ durationDay),\n/* harmony export */ \"durationHour\": () => (/* binding */ durationHour),\n/* harmony export */ \"durationMinute\": () => (/* binding */ durationMinute),\n/* harmony export */ \"durationMonth\": () => (/* binding */ durationMonth),\n/* harmony export */ \"durationSecond\": () => (/* binding */ durationSecond),\n/* harmony export */ \"durationWeek\": () => (/* binding */ durationWeek),\n/* harmony export */ \"durationYear\": () => (/* binding */ durationYear)\n/* harmony export */ });\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanM/YTViYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZHVyYXRpb25TZWNvbmQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQ7XG5leHBvcnQgY29uc3QgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/duration.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/hour.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-time/src/hour.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeHour\": () => (/* binding */ timeHour),\n/* harmony export */ \"timeHours\": () => (/* binding */ timeHours),\n/* harmony export */ \"utcHour\": () => (/* binding */ utcHour),\n/* harmony export */ \"utcHours\": () => (/* binding */ utcHours)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n\n\n\nconst timeHour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond - date.getMinutes() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nconst timeHours = timeHour.range;\n\nconst utcHour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nconst utcHours = utcHour.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTJDO0FBQ2dDOztBQUVwRSxpQkFBaUIsMERBQVk7QUFDcEMsbUVBQW1FLHdEQUFjLHVCQUF1Qix3REFBYztBQUN0SCxDQUFDO0FBQ0QsOEJBQThCLHNEQUFZO0FBQzFDLENBQUM7QUFDRCx5QkFBeUIsc0RBQVk7QUFDckMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTTs7QUFFQSxnQkFBZ0IsMERBQVk7QUFDbkM7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLHNEQUFZO0FBQzFDLENBQUM7QUFDRCx5QkFBeUIsc0RBQVk7QUFDckMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcz84YzI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91cnMgPSB0aW1lSG91ci5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/hour.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-time/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeDay\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.timeDay),\n/* harmony export */ \"timeDays\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.timeDays),\n/* harmony export */ \"timeFriday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeFriday),\n/* harmony export */ \"timeFridays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeFridays),\n/* harmony export */ \"timeHour\": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__.timeHour),\n/* harmony export */ \"timeHours\": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__.timeHours),\n/* harmony export */ \"timeInterval\": () => (/* reexport safe */ _interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval),\n/* harmony export */ \"timeMillisecond\": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.millisecond),\n/* harmony export */ \"timeMilliseconds\": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.milliseconds),\n/* harmony export */ \"timeMinute\": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__.timeMinute),\n/* harmony export */ \"timeMinutes\": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__.timeMinutes),\n/* harmony export */ \"timeMonday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeMonday),\n/* harmony export */ \"timeMondays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeMondays),\n/* harmony export */ \"timeMonth\": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__.timeMonth),\n/* harmony export */ \"timeMonths\": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__.timeMonths),\n/* harmony export */ \"timeSaturday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSaturday),\n/* harmony export */ \"timeSaturdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSaturdays),\n/* harmony export */ \"timeSecond\": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.second),\n/* harmony export */ \"timeSeconds\": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.seconds),\n/* harmony export */ \"timeSunday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSunday),\n/* harmony export */ \"timeSundays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSundays),\n/* harmony export */ \"timeThursday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeThursday),\n/* harmony export */ \"timeThursdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeThursdays),\n/* harmony export */ \"timeTickInterval\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_9__.timeTickInterval),\n/* harmony export */ \"timeTicks\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_9__.timeTicks),\n/* harmony export */ \"timeTuesday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeTuesday),\n/* harmony export */ \"timeTuesdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeTuesdays),\n/* harmony export */ \"timeWednesday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeWednesday),\n/* harmony export */ \"timeWednesdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeWednesdays),\n/* harmony export */ \"timeWeek\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSunday),\n/* harmony export */ \"timeWeeks\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.timeSundays),\n/* harmony export */ \"timeYear\": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__.timeYear),\n/* harmony export */ \"timeYears\": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__.timeYears),\n/* harmony export */ \"unixDay\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.unixDay),\n/* harmony export */ \"unixDays\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.unixDays),\n/* harmony export */ \"utcDay\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.utcDay),\n/* harmony export */ \"utcDays\": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.utcDays),\n/* harmony export */ \"utcFriday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcFriday),\n/* harmony export */ \"utcFridays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcFridays),\n/* harmony export */ \"utcHour\": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__.utcHour),\n/* harmony export */ \"utcHours\": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__.utcHours),\n/* harmony export */ \"utcMillisecond\": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.millisecond),\n/* harmony export */ \"utcMilliseconds\": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.milliseconds),\n/* harmony export */ \"utcMinute\": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__.utcMinute),\n/* harmony export */ \"utcMinutes\": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__.utcMinutes),\n/* harmony export */ \"utcMonday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcMonday),\n/* harmony export */ \"utcMondays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcMondays),\n/* harmony export */ \"utcMonth\": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__.utcMonth),\n/* harmony export */ \"utcMonths\": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__.utcMonths),\n/* harmony export */ \"utcSaturday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSaturday),\n/* harmony export */ \"utcSaturdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSaturdays),\n/* harmony export */ \"utcSecond\": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.second),\n/* harmony export */ \"utcSeconds\": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.seconds),\n/* harmony export */ \"utcSunday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSunday),\n/* harmony export */ \"utcSundays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSundays),\n/* harmony export */ \"utcThursday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcThursday),\n/* harmony export */ \"utcThursdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcThursdays),\n/* harmony export */ \"utcTickInterval\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_9__.utcTickInterval),\n/* harmony export */ \"utcTicks\": () => (/* reexport safe */ _ticks_js__WEBPACK_IMPORTED_MODULE_9__.utcTicks),\n/* harmony export */ \"utcTuesday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcTuesday),\n/* harmony export */ \"utcTuesdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcTuesdays),\n/* harmony export */ \"utcWednesday\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcWednesday),\n/* harmony export */ \"utcWednesdays\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcWednesdays),\n/* harmony export */ \"utcWeek\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSunday),\n/* harmony export */ \"utcWeeks\": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.utcSundays),\n/* harmony export */ \"utcYear\": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__.utcYear),\n/* harmony export */ \"utcYears\": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__.utcYears)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _millisecond_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./millisecond.js */ \"../../../node_modules/d3-time/src/millisecond.js\");\n/* harmony import */ var _second_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./second.js */ \"../../../node_modules/d3-time/src/second.js\");\n/* harmony import */ var _minute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minute.js */ \"../../../node_modules/d3-time/src/minute.js\");\n/* harmony import */ var _hour_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hour.js */ \"../../../node_modules/d3-time/src/hour.js\");\n/* harmony import */ var _day_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./day.js */ \"../../../node_modules/d3-time/src/day.js\");\n/* harmony import */ var _week_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./week.js */ \"../../../node_modules/d3-time/src/week.js\");\n/* harmony import */ var _month_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./month.js */ \"../../../node_modules/d3-time/src/month.js\");\n/* harmony import */ var _year_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./year.js */ \"../../../node_modules/d3-time/src/year.js\");\n/* harmony import */ var _ticks_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ticks.js */ \"../../../node_modules/d3-time/src/ticks.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXVCOztBQU9HOztBQU9MOztBQU9BOztBQU9GOztBQVNEOztBQW1DQzs7QUFPQzs7QUFPRDs7QUFPQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanM/MDgyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICB0aW1lSW50ZXJ2YWxcbn0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IHtcbiAgbWlsbGlzZWNvbmQgYXMgdXRjTWlsbGlzZWNvbmQsXG4gIG1pbGxpc2Vjb25kcyBhcyB1dGNNaWxsaXNlY29uZHMsXG4gIG1pbGxpc2Vjb25kIGFzIHRpbWVNaWxsaXNlY29uZCxcbiAgbWlsbGlzZWNvbmRzIGFzIHRpbWVNaWxsaXNlY29uZHNcbn0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgc2Vjb25kIGFzIHV0Y1NlY29uZCxcbiAgc2Vjb25kcyBhcyB1dGNTZWNvbmRzLFxuICBzZWNvbmQgYXMgdGltZVNlY29uZCxcbiAgc2Vjb25kcyBhcyB0aW1lU2Vjb25kc1xufSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZU1pbnV0ZSxcbiAgdGltZU1pbnV0ZXMsXG4gIHV0Y01pbnV0ZSxcbiAgdXRjTWludXRlc1xufSBmcm9tIFwiLi9taW51dGUuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZUhvdXIsXG4gIHRpbWVIb3VycyxcbiAgdXRjSG91cixcbiAgdXRjSG91cnNcbn0gZnJvbSBcIi4vaG91ci5qc1wiO1xuXG5leHBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdXRjRGF5LFxuICB1dGNEYXlzLFxuICB1bml4RGF5LFxuICB1bml4RGF5c1xufSBmcm9tIFwiLi9kYXkuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZVN1bmRheSBhcyB0aW1lV2VlayxcbiAgdGltZVN1bmRheXMgYXMgdGltZVdlZWtzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lU3VuZGF5cyxcbiAgdGltZU1vbmRheSxcbiAgdGltZU1vbmRheXMsXG4gIHRpbWVUdWVzZGF5LFxuICB0aW1lVHVlc2RheXMsXG4gIHRpbWVXZWRuZXNkYXksXG4gIHRpbWVXZWRuZXNkYXlzLFxuICB0aW1lVGh1cnNkYXksXG4gIHRpbWVUaHVyc2RheXMsXG4gIHRpbWVGcmlkYXksXG4gIHRpbWVGcmlkYXlzLFxuICB0aW1lU2F0dXJkYXksXG4gIHRpbWVTYXR1cmRheXMsXG4gIHV0Y1N1bmRheSBhcyB1dGNXZWVrLFxuICB1dGNTdW5kYXlzIGFzIHV0Y1dlZWtzLFxuICB1dGNTdW5kYXksXG4gIHV0Y1N1bmRheXMsXG4gIHV0Y01vbmRheSxcbiAgdXRjTW9uZGF5cyxcbiAgdXRjVHVlc2RheSxcbiAgdXRjVHVlc2RheXMsXG4gIHV0Y1dlZG5lc2RheSxcbiAgdXRjV2VkbmVzZGF5cyxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1RodXJzZGF5cyxcbiAgdXRjRnJpZGF5LFxuICB1dGNGcmlkYXlzLFxuICB1dGNTYXR1cmRheSxcbiAgdXRjU2F0dXJkYXlzXG59IGZyb20gXCIuL3dlZWsuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB1dGNNb250aCxcbiAgdXRjTW9udGhzXG59IGZyb20gXCIuL21vbnRoLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVZZWFyLFxuICB0aW1lWWVhcnMsXG4gIHV0Y1llYXIsXG4gIHV0Y1llYXJzXG59IGZyb20gXCIuL3llYXIuanNcIjtcblxuZXhwb3J0IHtcbiAgdXRjVGlja3MsXG4gIHV0Y1RpY2tJbnRlcnZhbCxcbiAgdGltZVRpY2tzLFxuICB0aW1lVGlja0ludGVydmFsXG59IGZyb20gXCIuL3RpY2tzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/interval.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-time/src/interval.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeInterval\": () => (/* binding */ timeInterval)\n/* harmony export */ });\nconst t0 = new Date, t1 = new Date;\n\nfunction timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCxVQUFVO0FBQ1Ysb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcz8wZDNhIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHQwID0gbmV3IERhdGUsIHQxID0gbmV3IERhdGU7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lSW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gKGRhdGUpID0+IHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLmNlaWwgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IChkYXRlKSA9PiB7XG4gICAgY29uc3QgZDAgPSBpbnRlcnZhbChkYXRlKSwgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IChkYXRlLCBzdGVwKSA9PiB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gKHN0YXJ0LCBzdG9wLCBzdGVwKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBsZXQgcHJldmlvdXM7XG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSAodGVzdCkgPT4ge1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XG4gICAgICAgIGlmIChzdGVwIDwgMCkgd2hpbGUgKCsrc3RlcCA8PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgKzEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IChzdGVwKSA9PiB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyAoZCkgPT4gZmllbGQoZCkgJSBzdGVwID09PSAwXG4gICAgICAgICAgICAgIDogKGQpID0+IGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/interval.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/millisecond.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-time/src/millisecond.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"millisecond\": () => (/* binding */ millisecond),\n/* harmony export */ \"milliseconds\": () => (/* binding */ milliseconds)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n\n\nconst millisecond = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nconst milliseconds = millisecond.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyQzs7QUFFcEMsb0JBQW9CLDBEQUFZO0FBQ3ZDO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywwREFBWTtBQUNyQjtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFTyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanM/Y2MyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kID0gdGltZUludGVydmFsKCgpID0+IHtcbiAgLy8gbm9vcFxufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kIC0gc3RhcnQ7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxubWlsbGlzZWNvbmQuZXZlcnkgPSAoaykgPT4ge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGspICogayk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/millisecond.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/minute.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-time/src/minute.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeMinute\": () => (/* binding */ timeMinute),\n/* harmony export */ \"timeMinutes\": () => (/* binding */ timeMinutes),\n/* harmony export */ \"utcMinute\": () => (/* binding */ utcMinute),\n/* harmony export */ \"utcMinutes\": () => (/* binding */ utcMinutes)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n\n\n\nconst timeMinute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nconst timeMinutes = timeMinute.range;\n\nconst utcMinute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nconst utcMinutes = utcMinute.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMkM7QUFDa0I7O0FBRXRELG1CQUFtQiwwREFBWTtBQUN0QyxtRUFBbUUsd0RBQWM7QUFDakYsQ0FBQztBQUNELDhCQUE4Qix3REFBYztBQUM1QyxDQUFDO0FBQ0QseUJBQXlCLHdEQUFjO0FBQ3ZDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU07O0FBRUEsa0JBQWtCLDBEQUFZO0FBQ3JDO0FBQ0EsQ0FBQztBQUNELDhCQUE4Qix3REFBYztBQUM1QyxDQUFDO0FBQ0QseUJBQXlCLHdEQUFjO0FBQ3ZDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcz8wMTUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQpO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVNaW51dGVzID0gdGltZU1pbnV0ZS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/minute.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/month.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-time/src/month.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeMonth\": () => (/* binding */ timeMonth),\n/* harmony export */ \"timeMonths\": () => (/* binding */ timeMonths),\n/* harmony export */ \"utcMonth\": () => (/* binding */ utcMonth),\n/* harmony export */ \"utcMonths\": () => (/* binding */ utcMonths)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n\n\nconst timeMonth = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nconst timeMonths = timeMonth.range;\n\nconst utcMonth = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nconst utcMonths = utcMonth.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTJDOztBQUVwQyxrQkFBa0IsMERBQVk7QUFDckM7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU07O0FBRUEsaUJBQWlCLDBEQUFZO0FBQ3BDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcz81Mjk3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVNb250aHMgPSB0aW1lTW9udGgucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/month.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/second.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-time/src/second.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"second\": () => (/* binding */ second),\n/* harmony export */ \"seconds\": () => (/* binding */ seconds)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n\n\n\nconst second = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nconst seconds = second.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTJDO0FBQ0U7O0FBRXRDLGVBQWUsMERBQVk7QUFDbEM7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLHdEQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsd0RBQWM7QUFDdkMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzPzgwOGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3Qgc2Vjb25kID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvblNlY29uZDtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/second.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/ticks.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-time/src/ticks.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeTickInterval\": () => (/* binding */ timeTickInterval),\n/* harmony export */ \"timeTicks\": () => (/* binding */ timeTicks),\n/* harmony export */ \"utcTickInterval\": () => (/* binding */ utcTickInterval),\n/* harmony export */ \"utcTicks\": () => (/* binding */ utcTicks)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/bisector.js\");\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/ticks.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n/* harmony import */ var _millisecond_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./millisecond.js */ \"../../../node_modules/d3-time/src/millisecond.js\");\n/* harmony import */ var _second_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./second.js */ \"../../../node_modules/d3-time/src/second.js\");\n/* harmony import */ var _minute_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./minute.js */ \"../../../node_modules/d3-time/src/minute.js\");\n/* harmony import */ var _hour_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hour.js */ \"../../../node_modules/d3-time/src/hour.js\");\n/* harmony import */ var _day_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./day.js */ \"../../../node_modules/d3-time/src/day.js\");\n/* harmony import */ var _week_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./week.js */ \"../../../node_modules/d3-time/src/week.js\");\n/* harmony import */ var _month_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./month.js */ \"../../../node_modules/d3-time/src/month.js\");\n/* harmony import */ var _year_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./year.js */ \"../../../node_modules/d3-time/src/year.js\");\n\n\n\n\n\n\n\n\n\n\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [_second_js__WEBPACK_IMPORTED_MODULE_0__.second, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond],\n [_second_js__WEBPACK_IMPORTED_MODULE_0__.second, 5, 5 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond],\n [_second_js__WEBPACK_IMPORTED_MODULE_0__.second, 15, 15 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond],\n [_second_js__WEBPACK_IMPORTED_MODULE_0__.second, 30, 30 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond],\n [minute, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute],\n [minute, 5, 5 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute],\n [minute, 15, 15 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute],\n [minute, 30, 30 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute],\n [ hour, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour ],\n [ hour, 3, 3 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour ],\n [ hour, 6, 6 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour ],\n [ hour, 12, 12 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour ],\n [ day, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay ],\n [ day, 2, 2 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay ],\n [ week, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationWeek ],\n [ month, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMonth ],\n [ month, 3, 3 * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMonth ],\n [ year, 1, _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = (0,d3_array__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every((0,d3_array__WEBPACK_IMPORTED_MODULE_3__.tickStep)(start / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationYear, stop / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationYear, count));\n if (i === 0) return _millisecond_js__WEBPACK_IMPORTED_MODULE_4__.millisecond.every(Math.max((0,d3_array__WEBPACK_IMPORTED_MODULE_3__.tickStep)(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(_year_js__WEBPACK_IMPORTED_MODULE_5__.utcYear, _month_js__WEBPACK_IMPORTED_MODULE_6__.utcMonth, _week_js__WEBPACK_IMPORTED_MODULE_7__.utcSunday, _day_js__WEBPACK_IMPORTED_MODULE_8__.unixDay, _hour_js__WEBPACK_IMPORTED_MODULE_9__.utcHour, _minute_js__WEBPACK_IMPORTED_MODULE_10__.utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(_year_js__WEBPACK_IMPORTED_MODULE_5__.timeYear, _month_js__WEBPACK_IMPORTED_MODULE_6__.timeMonth, _week_js__WEBPACK_IMPORTED_MODULE_7__.timeSunday, _day_js__WEBPACK_IMPORTED_MODULE_8__.timeDay, _hour_js__WEBPACK_IMPORTED_MODULE_9__.timeHour, _minute_js__WEBPACK_IMPORTED_MODULE_10__.timeMinute);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3RpY2tzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE0QztBQUN1RjtBQUN0RjtBQUNWO0FBQ2U7QUFDTjtBQUNGO0FBQ007QUFDRDtBQUNIOztBQUU1Qzs7QUFFQTtBQUNBLEtBQUssOENBQU0sV0FBVyx3REFBYztBQUNwQyxLQUFLLDhDQUFNLFdBQVcsd0RBQWM7QUFDcEMsS0FBSyw4Q0FBTSxXQUFXLHdEQUFjO0FBQ3BDLEtBQUssOENBQU0sV0FBVyx3REFBYztBQUNwQyxzQkFBc0Isd0RBQWM7QUFDcEMsc0JBQXNCLHdEQUFjO0FBQ3BDLHNCQUFzQix3REFBYztBQUNwQyxzQkFBc0Isd0RBQWM7QUFDcEMsc0JBQXNCLHNEQUFZO0FBQ2xDLHNCQUFzQixzREFBWTtBQUNsQyxzQkFBc0Isc0RBQVk7QUFDbEMsc0JBQXNCLHNEQUFZO0FBQ2xDLHNCQUFzQixxREFBVztBQUNqQyxzQkFBc0IscURBQVc7QUFDakMsc0JBQXNCLHNEQUFZO0FBQ2xDLHNCQUFzQix1REFBYTtBQUNuQyxzQkFBc0IsdURBQWE7QUFDbkMsc0JBQXNCLHNEQUFZO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsb0RBQVE7QUFDdEIsc0RBQXNELGtEQUFRLFNBQVMsc0RBQVksU0FBUyxzREFBWTtBQUN4Ryx3QkFBd0IsOERBQWlCLFVBQVUsa0RBQVE7QUFDM0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDLDZDQUFPLEVBQUUsK0NBQVEsRUFBRSwrQ0FBUyxFQUFFLDRDQUFPLEVBQUUsNkNBQU8sRUFBRSxrREFBUztBQUNwRyw2Q0FBNkMsOENBQVEsRUFBRSxnREFBUyxFQUFFLGdEQUFVLEVBQUUsNENBQU8sRUFBRSw4Q0FBUSxFQUFFLG1EQUFVOztBQUUzQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanM/ZWI4MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvbk1vbnRoLCBkdXJhdGlvblNlY29uZCwgZHVyYXRpb25XZWVrLCBkdXJhdGlvblllYXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQge21pbGxpc2Vjb25kfSBmcm9tIFwiLi9taWxsaXNlY29uZC5qc1wiO1xuaW1wb3J0IHtzZWNvbmR9IGZyb20gXCIuL3NlY29uZC5qc1wiO1xuaW1wb3J0IHt0aW1lTWludXRlLCB1dGNNaW51dGV9IGZyb20gXCIuL21pbnV0ZS5qc1wiO1xuaW1wb3J0IHt0aW1lSG91ciwgdXRjSG91cn0gZnJvbSBcIi4vaG91ci5qc1wiO1xuaW1wb3J0IHt0aW1lRGF5LCB1bml4RGF5fSBmcm9tIFwiLi9kYXkuanNcIjtcbmltcG9ydCB7dGltZVN1bmRheSwgdXRjU3VuZGF5fSBmcm9tIFwiLi93ZWVrLmpzXCI7XG5pbXBvcnQge3RpbWVNb250aCwgdXRjTW9udGh9IGZyb20gXCIuL21vbnRoLmpzXCI7XG5pbXBvcnQge3RpbWVZZWFyLCB1dGNZZWFyfSBmcm9tIFwiLi95ZWFyLmpzXCI7XG5cbmZ1bmN0aW9uIHRpY2tlcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUpIHtcblxuICBjb25zdCB0aWNrSW50ZXJ2YWxzID0gW1xuICAgIFtzZWNvbmQsICAxLCAgICAgIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAgNSwgIDUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDMwLCAzMCAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbbWludXRlLCAgMSwgICAgICBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDE1LCAxNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAzMCwgMzAgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICAzLCAgMyAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgNiwgIDYgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgICBkYXksICAxLCAgICAgIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICAgZGF5LCAgMiwgIDIgKiBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgIFsgbW9udGgsICAxLCAgICAgIGR1cmF0aW9uTW9udGggXSxcbiAgICBbIG1vbnRoLCAgMywgIDMgKiBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gIF07XG5cbiAgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydDtcbiAgICBpZiAocmV2ZXJzZSkgW3N0YXJ0LCBzdG9wXSA9IFtzdG9wLCBzdGFydF07XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBjb3VudCAmJiB0eXBlb2YgY291bnQucmFuZ2UgPT09IFwiZnVuY3Rpb25cIiA/IGNvdW50IDogdGlja0ludGVydmFsKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgY29uc3QgdGlja3MgPSBpbnRlcnZhbCA/IGludGVydmFsLnJhbmdlKHN0YXJ0LCArc3RvcCArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHJldmVyc2UgPyB0aWNrcy5yZXZlcnNlKCkgOiB0aWNrcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gY291bnQ7XG4gICAgY29uc3QgaSA9IGJpc2VjdG9yKChbLCwgc3RlcF0pID0+IHN0ZXApLnJpZ2h0KHRpY2tJbnRlcnZhbHMsIHRhcmdldCk7XG4gICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSByZXR1cm4geWVhci5ldmVyeSh0aWNrU3RlcChzdGFydCAvIGR1cmF0aW9uWWVhciwgc3RvcCAvIGR1cmF0aW9uWWVhciwgY291bnQpKTtcbiAgICBpZiAoaSA9PT0gMCkgcmV0dXJuIG1pbGxpc2Vjb25kLmV2ZXJ5KE1hdGgubWF4KHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksIDEpKTtcbiAgICBjb25zdCBbdCwgc3RlcF0gPSB0aWNrSW50ZXJ2YWxzW3RhcmdldCAvIHRpY2tJbnRlcnZhbHNbaSAtIDFdWzJdIDwgdGlja0ludGVydmFsc1tpXVsyXSAvIHRhcmdldCA/IGkgLSAxIDogaV07XG4gICAgcmV0dXJuIHQuZXZlcnkoc3RlcCk7XG4gIH1cblxuICByZXR1cm4gW3RpY2tzLCB0aWNrSW50ZXJ2YWxdO1xufVxuXG5jb25zdCBbdXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbF0gPSB0aWNrZXIodXRjWWVhciwgdXRjTW9udGgsIHV0Y1N1bmRheSwgdW5peERheSwgdXRjSG91ciwgdXRjTWludXRlKTtcbmNvbnN0IFt0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVTdW5kYXksIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlKTtcblxuZXhwb3J0IHt1dGNUaWNrcywgdXRjVGlja0ludGVydmFsLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/ticks.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/week.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-time/src/week.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeFriday\": () => (/* binding */ timeFriday),\n/* harmony export */ \"timeFridays\": () => (/* binding */ timeFridays),\n/* harmony export */ \"timeMonday\": () => (/* binding */ timeMonday),\n/* harmony export */ \"timeMondays\": () => (/* binding */ timeMondays),\n/* harmony export */ \"timeSaturday\": () => (/* binding */ timeSaturday),\n/* harmony export */ \"timeSaturdays\": () => (/* binding */ timeSaturdays),\n/* harmony export */ \"timeSunday\": () => (/* binding */ timeSunday),\n/* harmony export */ \"timeSundays\": () => (/* binding */ timeSundays),\n/* harmony export */ \"timeThursday\": () => (/* binding */ timeThursday),\n/* harmony export */ \"timeThursdays\": () => (/* binding */ timeThursdays),\n/* harmony export */ \"timeTuesday\": () => (/* binding */ timeTuesday),\n/* harmony export */ \"timeTuesdays\": () => (/* binding */ timeTuesdays),\n/* harmony export */ \"timeWednesday\": () => (/* binding */ timeWednesday),\n/* harmony export */ \"timeWednesdays\": () => (/* binding */ timeWednesdays),\n/* harmony export */ \"utcFriday\": () => (/* binding */ utcFriday),\n/* harmony export */ \"utcFridays\": () => (/* binding */ utcFridays),\n/* harmony export */ \"utcMonday\": () => (/* binding */ utcMonday),\n/* harmony export */ \"utcMondays\": () => (/* binding */ utcMondays),\n/* harmony export */ \"utcSaturday\": () => (/* binding */ utcSaturday),\n/* harmony export */ \"utcSaturdays\": () => (/* binding */ utcSaturdays),\n/* harmony export */ \"utcSunday\": () => (/* binding */ utcSunday),\n/* harmony export */ \"utcSundays\": () => (/* binding */ utcSundays),\n/* harmony export */ \"utcThursday\": () => (/* binding */ utcThursday),\n/* harmony export */ \"utcThursdays\": () => (/* binding */ utcThursdays),\n/* harmony export */ \"utcTuesday\": () => (/* binding */ utcTuesday),\n/* harmony export */ \"utcTuesdays\": () => (/* binding */ utcTuesdays),\n/* harmony export */ \"utcWednesday\": () => (/* binding */ utcWednesday),\n/* harmony export */ \"utcWednesdays\": () => (/* binding */ utcWednesdays)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-time/src/duration.js\");\n\n\n\nfunction timeWeekday(i) {\n return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationWeek;\n });\n}\n\nconst timeSunday = timeWeekday(0);\nconst timeMonday = timeWeekday(1);\nconst timeTuesday = timeWeekday(2);\nconst timeWednesday = timeWeekday(3);\nconst timeThursday = timeWeekday(4);\nconst timeFriday = timeWeekday(5);\nconst timeSaturday = timeWeekday(6);\n\nconst timeSundays = timeSunday.range;\nconst timeMondays = timeMonday.range;\nconst timeTuesdays = timeTuesday.range;\nconst timeWednesdays = timeWednesday.range;\nconst timeThursdays = timeThursday.range;\nconst timeFridays = timeFriday.range;\nconst timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationWeek;\n });\n}\n\nconst utcSunday = utcWeekday(0);\nconst utcMonday = utcWeekday(1);\nconst utcTuesday = utcWeekday(2);\nconst utcWednesday = utcWeekday(3);\nconst utcThursday = utcWeekday(4);\nconst utcFriday = utcWeekday(5);\nconst utcSaturday = utcWeekday(6);\n\nconst utcSundays = utcSunday.range;\nconst utcMondays = utcMonday.range;\nconst utcTuesdays = utcTuesday.range;\nconst utcWednesdays = utcWednesday.range;\nconst utcThursdays = utcThursday.range;\nconst utcFridays = utcFriday.range;\nconst utcSaturdays = utcSaturday.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3dlZWsuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTJDO0FBQ2dCOztBQUUzRDtBQUNBLFNBQVMsMERBQVk7QUFDckI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxrRkFBa0Ysd0RBQWMsSUFBSSxzREFBWTtBQUNoSCxHQUFHO0FBQ0g7O0FBRU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVA7QUFDQSxTQUFTLDBEQUFZO0FBQ3JCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsMkJBQTJCLHNEQUFZO0FBQ3ZDLEdBQUc7QUFDSDs7QUFFTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcz9lNDhlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/week.js\n"); /***/ }), /***/ "../../../node_modules/d3-time/src/year.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-time/src/year.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeYear\": () => (/* binding */ timeYear),\n/* harmony export */ \"timeYears\": () => (/* binding */ timeYears),\n/* harmony export */ \"utcYear\": () => (/* binding */ utcYear),\n/* harmony export */ \"utcYears\": () => (/* binding */ utcYears)\n/* harmony export */ });\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-time/src/interval.js\");\n\n\nconst timeYear = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nconst timeYears = timeYear.range;\n\nconst utcYear = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__.timeInterval)((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nconst utcYears = utcYear.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMkM7O0FBRXBDLGlCQUFpQiwwREFBWTtBQUNwQztBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsMkRBQTJELDBEQUFZO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFTzs7QUFFQSxnQkFBZ0IsMERBQVk7QUFDbkM7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDJEQUEyRCwwREFBWTtBQUN2RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanM/ZWU5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudGltZVllYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFycyA9IHRpbWVZZWFyLnJhbmdlO1xuXG5leHBvcnQgY29uc3QgdXRjWWVhciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-time/src/year.js\n"); /***/ }), /***/ "../../../node_modules/d3-timer/src/index.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-timer/src/index.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"interval\": () => (/* reexport safe */ _interval_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"now\": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.now),\n/* harmony export */ \"timeout\": () => (/* reexport safe */ _timeout_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ \"timer\": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.timer),\n/* harmony export */ \"timerFlush\": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.timerFlush)\n/* harmony export */ });\n/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ \"../../../node_modules/d3-timer/src/timer.js\");\n/* harmony import */ var _timeout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeout.js */ \"../../../node_modules/d3-timer/src/timeout.js\");\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interval.js */ \"../../../node_modules/d3-timer/src/interval.js\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlvQjs7QUFJRTs7QUFJQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2luZGV4LmpzPzZiZTIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgbm93LFxuICB0aW1lcixcbiAgdGltZXJGbHVzaFxufSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVvdXRcbn0gZnJvbSBcIi4vdGltZW91dC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-timer/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-timer/src/interval.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-timer/src/interval.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ \"../../../node_modules/d3-timer/src/timer.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) {\n var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__.Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? (0,_timer_js__WEBPACK_IMPORTED_MODULE_0__.now)() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbnRlcnZhbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzQzs7QUFFdEMsNkJBQWUsb0NBQVM7QUFDeEIsY0FBYyw0Q0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsOENBQUc7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbnRlcnZhbC5qcz8yOGE0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGltZXIsIG5vd30gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyLCB0b3RhbCA9IGRlbGF5O1xuICBpZiAoZGVsYXkgPT0gbnVsbCkgcmV0dXJuIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpLCB0O1xuICB0Ll9yZXN0YXJ0ID0gdC5yZXN0YXJ0O1xuICB0LnJlc3RhcnQgPSBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBkZWxheSA9ICtkZWxheSwgdGltZSA9IHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWU7XG4gICAgdC5fcmVzdGFydChmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICAgIGVsYXBzZWQgKz0gdG90YWw7XG4gICAgICB0Ll9yZXN0YXJ0KHRpY2ssIHRvdGFsICs9IGRlbGF5LCB0aW1lKTtcbiAgICAgIGNhbGxiYWNrKGVsYXBzZWQpO1xuICAgIH0sIGRlbGF5LCB0aW1lKTtcbiAgfVxuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-timer/src/interval.js\n"); /***/ }), /***/ "../../../node_modules/d3-timer/src/timeout.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-timer/src/timeout.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ \"../../../node_modules/d3-timer/src/timer.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) {\n var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__.Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlDOztBQUVqQyw2QkFBZSxvQ0FBUztBQUN4QixjQUFjLDRDQUFLO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzPzJjZGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-timer/src/timeout.js\n"); /***/ }), /***/ "../../../node_modules/d3-timer/src/timer.js": /*!***************************************************!*\ !*** ../../../node_modules/d3-timer/src/timer.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Timer\": () => (/* binding */ Timer),\n/* harmony export */ \"now\": () => (/* binding */ now),\n/* harmony export */ \"timer\": () => (/* binding */ timer),\n/* harmony export */ \"timerFlush\": () => (/* binding */ timerFlush)\n/* harmony export */ });\nvar frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nfunction timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzSUFBc0k7O0FBRS9IO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCxTQUFTO0FBQ1QsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZXIuanM/NDJiMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKHVuZGVmaW5lZCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-timer/src/timer.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/active.js": /*!*********************************************************!*\ !*** ../../../node_modules/d3-transition/src/active.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\nvar root = [null];\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.SCHEDULED && schedule.name === name) {\n return new _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2FjdGl2ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBaUQ7QUFDRTs7QUFFbkQ7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyw4REFBUztBQUNyRCxtQkFBbUIsNERBQVU7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2FjdGl2ZS5qcz8zNzY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHtTQ0hFRFVMRUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxudmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBpO1xuXG4gIGlmIChzY2hlZHVsZXMpIHtcbiAgICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLnN0YXRlID4gU0NIRURVTEVEICYmIHNjaGVkdWxlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKFtbbm9kZV1dLCByb290LCBuYW1lLCAraSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/active.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/index.js": /*!********************************************************!*\ !*** ../../../node_modules/d3-transition/src/index.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"active\": () => (/* reexport safe */ _active_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"interrupt\": () => (/* reexport safe */ _interrupt_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"transition\": () => (/* reexport safe */ _transition_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ \"../../../node_modules/d3-transition/src/selection/index.js\");\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _active_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./active.js */ \"../../../node_modules/d3-transition/src/active.js\");\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interrupt.js */ \"../../../node_modules/d3-transition/src/interrupt.js\");\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBOEI7QUFDOEI7QUFDZDtBQUNNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcz80ZDRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJhbnNpdGlvbn0gZnJvbSBcIi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFjdGl2ZX0gZnJvbSBcIi4vYWN0aXZlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJydXB0fSBmcm9tIFwiLi9pbnRlcnJ1cHQuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/interrupt.js": /*!************************************************************!*\ !*** ../../../node_modules/d3-transition/src/interrupt.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.STARTING && schedule.state < _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDING;\n schedule.state = _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpRTs7QUFFakUsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG1EQUFtRCxlQUFlO0FBQ2xFLDhCQUE4Qiw2REFBUSxxQkFBcUIsMkRBQU07QUFDakUscUJBQXFCLDBEQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcz9lMjQ0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U1RBUlRJTkcsIEVORElORywgRU5ERUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICBzY2hlZHVsZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVtcHR5ID0gdHJ1ZSxcbiAgICAgIGk7XG5cbiAgaWYgKCFzY2hlZHVsZXMpIHJldHVybjtcblxuICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuXG4gIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICBpZiAoKHNjaGVkdWxlID0gc2NoZWR1bGVzW2ldKS5uYW1lICE9PSBuYW1lKSB7IGVtcHR5ID0gZmFsc2U7IGNvbnRpbnVlOyB9XG4gICAgYWN0aXZlID0gc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORyAmJiBzY2hlZHVsZS5zdGF0ZSA8IEVORElORztcbiAgICBzY2hlZHVsZS5zdGF0ZSA9IEVOREVEO1xuICAgIHNjaGVkdWxlLnRpbWVyLnN0b3AoKTtcbiAgICBzY2hlZHVsZS5vbi5jYWxsKGFjdGl2ZSA/IFwiaW50ZXJydXB0XCIgOiBcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/interrupt.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/selection/index.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/selection/index.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interrupt.js */ \"../../../node_modules/d3-transition/src/selection/interrupt.js\");\n/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transition.js */ \"../../../node_modules/d3-transition/src/selection/transition.js\");\n\n\n\n\nd3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.interrupt = _interrupt_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nd3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.transition = _transition_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXVDO0FBQ1U7QUFDRTs7QUFFbkQsd0VBQTZCLEdBQUcscURBQW1CO0FBQ25ELHlFQUE4QixHQUFHLHNEQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzP2RlZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/selection/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/selection/interrupt.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/selection/interrupt.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interrupt.js */ \"../../../node_modules/d3-transition/src/interrupt.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n return this.each(function() {\n (0,_interrupt_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, name);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7O0FBRXhDLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0EsSUFBSSx5REFBUztBQUNiLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcz9mZTcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/selection/interrupt.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/selection/transition.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/selection/transition.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transition/index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../transition/schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-ease */ \"../../../node_modules/d3-ease/src/cubic.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ \"../../../node_modules/d3-timer/src/timer.js\");\n\n\n\n\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: d3_ease__WEBPACK_IMPORTED_MODULE_0__.cubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var id,\n timing;\n\n if (name instanceof _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition) {\n id = name._id, name = name._name;\n } else {\n id = (0,_transition_index_js__WEBPACK_IMPORTED_MODULE_1__.newId)(), (timing = defaultTiming).time = (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__.now)(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n (0,_transition_schedule_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new _transition_index_js__WEBPACK_IMPORTED_MODULE_1__.Transition(groups, this._parents, name, id);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXlEO0FBQ1I7QUFDVjtBQUNWOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0NBQWM7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBOztBQUVBLHNCQUFzQiw0REFBVTtBQUNoQztBQUNBLElBQUk7QUFDSixTQUFTLDJEQUFLLG9DQUFvQyw2Q0FBRztBQUNyRDs7QUFFQSw0REFBNEQsT0FBTztBQUNuRSwrREFBK0QsT0FBTztBQUN0RTtBQUNBLFFBQVEsbUVBQVE7QUFDaEI7QUFDQTtBQUNBOztBQUVBLGFBQWEsNERBQVU7QUFDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzPzMwMmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtpZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/selection/transition.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/attr.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/attr.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/namespace.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tween.js */ \"../../../node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interpolate.js */ \"../../../node_modules/d3-transition/src/transition/interpolate.js\");\n\n\n\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name), i = fullname === \"transform\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__.interpolateTransformSvg : _interpolate_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_3__.tweenValue)(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErRTtBQUN4QztBQUNEO0FBQ0s7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCLGlCQUFpQix3REFBUyx1Q0FBdUMsbUVBQW9CLEdBQUcsdURBQVc7QUFDbkc7QUFDQSxzRUFBc0UscURBQVU7QUFDaEY7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanM/YTYzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKSwgaSA9IGZ1bGxuYW1lID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHRoaXMuYXR0clR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKShmdWxsbmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcImF0dHIuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHZhbHVlID09IG51bGwgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKShmdWxsbmFtZSlcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKGZ1bGxuYW1lLCBpLCB2YWx1ZSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/attr.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/attrTween.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/attrTween.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/namespace.js\");\n\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0clR3ZWVuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0RBQVM7QUFDMUI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanM/MWUzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/attrTween.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/delay.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/delay.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction delayFunction(id, value) {\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).delay;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7O0FBRXhDO0FBQ0E7QUFDQSxJQUFJLGtEQUFJO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxrREFBSTtBQUNSO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlEQUFHO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanM/NjdmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZGVsYXlGdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlbGF5Q29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVsYXlGdW5jdGlvblxuICAgICAgICAgIDogZGVsYXlDb25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZGVsYXk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/delay.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/duration.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/duration.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction durationFunction(id, value) {\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).duration;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdUM7O0FBRXZDO0FBQ0E7QUFDQSxJQUFJLGlEQUFHO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxpREFBRztBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlEQUFHO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanM/ZGY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/duration.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/ease.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/ease.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).ease = value;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).ease;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpREFBRztBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBLFFBQVEsaURBQUc7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzPzk4ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/ease.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/easeVarying.js": /*!*************************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/easeVarying.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).ease = v;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZVZhcnlpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpREFBRztBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2VWYXJ5aW5nLmpzP2U3YjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGVhc2VWYXJ5aW5nKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLmVhY2goZWFzZVZhcnlpbmcodGhpcy5faWQsIHZhbHVlKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/easeVarying.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/end.js": /*!*****************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/end.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDOztBQUVsQyw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEMsZUFBZSxvQkFBb0I7O0FBRW5DO0FBQ0EscUJBQXFCLGlEQUFHO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanM/YTM3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/end.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/filter.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/filter.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/matcher.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) {\n if (typeof match !== \"function\") match = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_1__.Transition(subgroups, this._parents, this._name, this._id);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFxQztBQUNDOztBQUV0Qyw2QkFBZSxvQ0FBUztBQUN4QiwyQ0FBMkMsd0RBQU87O0FBRWxELHNGQUFzRixPQUFPO0FBQzdGLDZGQUE2RixPQUFPO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxpREFBVTtBQUN2QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9maWx0ZXIuanM/ODc2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/filter.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/index.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Transition\": () => (/* binding */ Transition),\n/* harmony export */ \"default\": () => (/* binding */ transition),\n/* harmony export */ \"newId\": () => (/* binding */ newId)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n/* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./attr.js */ \"../../../node_modules/d3-transition/src/transition/attr.js\");\n/* harmony import */ var _attrTween_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./attrTween.js */ \"../../../node_modules/d3-transition/src/transition/attrTween.js\");\n/* harmony import */ var _delay_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./delay.js */ \"../../../node_modules/d3-transition/src/transition/delay.js\");\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./duration.js */ \"../../../node_modules/d3-transition/src/transition/duration.js\");\n/* harmony import */ var _ease_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ease.js */ \"../../../node_modules/d3-transition/src/transition/ease.js\");\n/* harmony import */ var _easeVarying_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./easeVarying.js */ \"../../../node_modules/d3-transition/src/transition/easeVarying.js\");\n/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./filter.js */ \"../../../node_modules/d3-transition/src/transition/filter.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./merge.js */ \"../../../node_modules/d3-transition/src/transition/merge.js\");\n/* harmony import */ var _on_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./on.js */ \"../../../node_modules/d3-transition/src/transition/on.js\");\n/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./remove.js */ \"../../../node_modules/d3-transition/src/transition/remove.js\");\n/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select.js */ \"../../../node_modules/d3-transition/src/transition/select.js\");\n/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectAll.js */ \"../../../node_modules/d3-transition/src/transition/selectAll.js\");\n/* harmony import */ var _selection_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./selection.js */ \"../../../node_modules/d3-transition/src/transition/selection.js\");\n/* harmony import */ var _style_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./style.js */ \"../../../node_modules/d3-transition/src/transition/style.js\");\n/* harmony import */ var _styleTween_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./styleTween.js */ \"../../../node_modules/d3-transition/src/transition/styleTween.js\");\n/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./text.js */ \"../../../node_modules/d3-transition/src/transition/text.js\");\n/* harmony import */ var _textTween_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./textTween.js */ \"../../../node_modules/d3-transition/src/transition/textTween.js\");\n/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./transition.js */ \"../../../node_modules/d3-transition/src/transition/transition.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tween.js */ \"../../../node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _end_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./end.js */ \"../../../node_modules/d3-transition/src/transition/end.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nfunction transition(name) {\n return (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])().transition(name);\n}\n\nfunction newId() {\n return ++id;\n}\n\nvar selection_prototype = d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: _select_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n selectAll: _selectAll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: _filter_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n merge: _merge_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n selection: _selection_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n transition: _transition_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: _on_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n attr: _attr_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n attrTween: _attrTween_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n style: _style_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n styleTween: _styleTween_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n text: _text_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n textTween: _textTween_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n remove: _remove_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n tween: _tween_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n delay: _delay_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n duration: _duration_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n ease: _ease_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n easeVarying: _easeVarying_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n end: _end_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXVDO0FBQ0M7QUFDVTtBQUNSO0FBQ007QUFDUjtBQUNjO0FBQ1Y7QUFDRjtBQUNOO0FBQ1E7QUFDQTtBQUNNO0FBQ0E7QUFDUjtBQUNVO0FBQ1o7QUFDVTtBQUNFO0FBQ1Y7QUFDSjs7QUFFdEM7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlO0FBQ2YsU0FBUyx3REFBUztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7O0FBRUEsMEJBQTBCLDhEQUFtQjs7QUFFN0M7QUFDQTtBQUNBLFVBQVUsa0RBQWlCO0FBQzNCLGFBQWEscURBQW9CO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVLGtEQUFpQjtBQUMzQixTQUFTLGlEQUFnQjtBQUN6QixhQUFhLHFEQUFvQjtBQUNqQyxjQUFjLHNEQUFxQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDhDQUFhO0FBQ25CLFFBQVEsZ0RBQWU7QUFDdkIsYUFBYSxxREFBb0I7QUFDakMsU0FBUyxrREFBZ0I7QUFDekIsY0FBYyx1REFBcUI7QUFDbkMsUUFBUSxpREFBZTtBQUN2QixhQUFhLHNEQUFvQjtBQUNqQyxVQUFVLG1EQUFpQjtBQUMzQixTQUFTLGtEQUFnQjtBQUN6QixTQUFTLGtEQUFnQjtBQUN6QixZQUFZLHFEQUFtQjtBQUMvQixRQUFRLGlEQUFlO0FBQ3ZCLGVBQWUsd0RBQXNCO0FBQ3JDLE9BQU8sZ0RBQWM7QUFDckI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcz82ZDg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHRleHRUd2VlbjogdHJhbnNpdGlvbl90ZXh0VHdlZW4sXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZSxcbiAgZWFzZVZhcnlpbmc6IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmQsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25fcHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/interpolate.js": /*!*************************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/interpolate.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/color.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/string.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var c;\n return (typeof b === \"number\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n : (c = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(b)) ? (b = c, d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n : d3_interpolate__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(a, b);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0I7QUFDcUQ7O0FBRXBGLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0Esa0NBQWtDLHNEQUFpQjtBQUNuRCxxQkFBcUIsZ0RBQUssR0FBRyxzREFBYztBQUMzQyxhQUFhLG9EQUFLLGVBQWUsc0RBQWM7QUFDL0MsUUFBUSxzREFBaUI7QUFDekIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanM/MzhjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/interpolate.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/merge.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/merge.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(merges, this._parents, this._name, this._id);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vbWVyZ2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBc0M7O0FBRXRDLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBLGdLQUFnSyxPQUFPO0FBQ3ZLLHlIQUF5SCxPQUFPO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxRQUFRO0FBQ2pCO0FBQ0E7O0FBRUEsYUFBYSxpREFBVTtBQUN2QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcz85ZTJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHJhbnNpdGlvbikge1xuICBpZiAodHJhbnNpdGlvbi5faWQgIT09IHRoaXMuX2lkKSB0aHJvdyBuZXcgRXJyb3I7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHRyYW5zaXRpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/merge.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/on.js": /*!****************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/on.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? _schedule_js__WEBPACK_IMPORTED_MODULE_0__.init : _schedule_js__WEBPACK_IMPORTED_MODULE_0__.set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxvQ0FBb0MsOENBQUksR0FBRyw2Q0FBRztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCOztBQUVBO0FBQ0EsUUFBUSxpREFBRztBQUNYO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanM/M2U5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/on.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/remove.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/remove.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vcmVtb3ZlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcz9mMTcyIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/remove.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/schedule.js": /*!**********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/schedule.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CREATED\": () => (/* binding */ CREATED),\n/* harmony export */ \"ENDED\": () => (/* binding */ ENDED),\n/* harmony export */ \"ENDING\": () => (/* binding */ ENDING),\n/* harmony export */ \"RUNNING\": () => (/* binding */ RUNNING),\n/* harmony export */ \"SCHEDULED\": () => (/* binding */ SCHEDULED),\n/* harmony export */ \"STARTED\": () => (/* binding */ STARTED),\n/* harmony export */ \"STARTING\": () => (/* binding */ STARTING),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"get\": () => (/* binding */ get),\n/* harmony export */ \"init\": () => (/* binding */ init),\n/* harmony export */ \"set\": () => (/* binding */ set)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ \"../../../node_modules/d3-timer/src/timer.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ \"../../../node_modules/d3-timer/src/timeout.js\");\n\n\n\nvar emptyOn = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nfunction init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nfunction set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nfunction get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = (0,d3_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBcUM7QUFDRzs7QUFFeEMsY0FBYyx1REFBUTtBQUN0Qjs7QUFFTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFUCw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVPO0FBQ1A7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtDQUFLOztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QyxzQ0FBc0Msb0RBQU87O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseURBQXlEO0FBQ3pEO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0EsSUFBSSxvREFBTztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanM/NDUzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/schedule.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/select.js": /*!********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/select.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selector.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(subgroup[i], name, id, i, subgroup, (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id));\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Transition(subgroups, this._parents, name, id);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBc0M7QUFDQTtBQUNNOztBQUU1Qyw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBOztBQUVBLDZDQUE2Qyx3REFBUTs7QUFFckQsc0ZBQXNGLE9BQU87QUFDN0YsZ0hBQWdILE9BQU87QUFDdkg7QUFDQTtBQUNBO0FBQ0EsUUFBUSx3REFBUSxxQ0FBcUMsaURBQUc7QUFDeEQ7QUFDQTtBQUNBOztBQUVBLGFBQWEsaURBQVU7QUFDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzP2ZkMWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/select.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/selectAll.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/selectAll.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selectorAll.js\");\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_2__.Transition(subgroups, parents, name, id);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0QWxsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBeUM7QUFDSDtBQUNNOztBQUU1Qyw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBOztBQUVBLDZDQUE2Qyx3REFBVzs7QUFFeEQsMEZBQTBGLE9BQU87QUFDakcsK0RBQStELE9BQU87QUFDdEU7QUFDQSx5RkFBeUYsaURBQUcsd0NBQXdDLE9BQU87QUFDM0k7QUFDQSxZQUFZLHdEQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsaURBQVU7QUFDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0QWxsLmpzPzdjYTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/selectAll.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/selection.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/selection.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selection/index.js\");\n\n\nvar Selection = d3_selection__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.constructor;\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n return new Selection(this._groups, this._parents);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDOztBQUV2QyxnQkFBZ0IsMEVBQStCOztBQUUvQyw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcz9jNWRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/selection.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/style.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/style.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/selection/style.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tween.js */ \"../../../node_modules/d3-transition/src/transition/tween.js\");\n/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interpolate.js */ \"../../../node_modules/d3-transition/src/transition/interpolate.js\");\n\n\n\n\n\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name),\n string1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.styleValue)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.set)(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_2__.interpolateTransformCss : _interpolate_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_4__.tweenValue)(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQStFO0FBQzVDO0FBQ0Q7QUFDSTtBQUNLOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdEQUFLO0FBQ3ZCLG9EQUFvRCx3REFBSztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix3REFBSztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isd0RBQUs7QUFDdkI7QUFDQTtBQUNBLDZFQUE2RSx3REFBSztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpREFBRztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4Qix5Q0FBeUMsbUVBQW9CLEdBQUcsdURBQVc7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MscURBQVU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zdHlsZS5qcz8xNTRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/style.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/styleTween.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/styleTween.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcz8yM2ZlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/styleTween.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/text.js": /*!******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/text.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween.js */ \"../../../node_modules/d3-transition/src/transition/tween.js\");\n\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction((0,_tween_js__WEBPACK_IMPORTED_MODULE_0__.tweenValue)(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxxQkFBcUIscURBQVU7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzPzQwY2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/text.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/textTween.js": /*!***********************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/textTween.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dFR3ZWVuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanM/N2VhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/textTween.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/transition.js": /*!************************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/transition.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"../../../node_modules/d3-transition/src/transition/index.js\");\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var name = this._name,\n id0 = this._id,\n id1 = (0,_index_js__WEBPACK_IMPORTED_MODULE_0__.newId)();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id0);\n (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(groups, this._parents, name, id1);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNkM7QUFDRDs7QUFFNUMsNkJBQWUsc0NBQVc7QUFDMUI7QUFDQTtBQUNBLFlBQVksZ0RBQUs7O0FBRWpCLDREQUE0RCxPQUFPO0FBQ25FLCtEQUErRCxPQUFPO0FBQ3RFO0FBQ0Esc0JBQXNCLGlEQUFHO0FBQ3pCLFFBQVEsd0RBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLGFBQWEsaURBQVU7QUFDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcz9lMGIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/transition.js\n"); /***/ }), /***/ "../../../node_modules/d3-transition/src/transition/tween.js": /*!*******************************************************************!*\ !*** ../../../node_modules/d3-transition/src/transition/tween.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"tweenValue\": () => (/* binding */ tweenValue)\n/* harmony export */ });\n/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ \"../../../node_modules/d3-transition/src/transition/schedule.js\");\n\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(node, id).value[name];\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaURBQUc7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpREFBRztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5Qiw0QkFBNEIsT0FBTztBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0IsaURBQUc7QUFDbkIseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBLG1CQUFtQixpREFBRztBQUN0QiwyQ0FBMkM7QUFDM0MsR0FBRzs7QUFFSDtBQUNBLFdBQVcsaURBQUc7QUFDZDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3R3ZWVuLmpzPzliN2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-transition/src/transition/tween.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/constant.js": /*!*****************************************************!*\ !*** ../../../node_modules/d3-zoom/src/constant.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 default export */ const __WEBPACK_DEFAULT_EXPORT__ = (x => () => x);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2NvbnN0YW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2NvbnN0YW50LmpzPzFjZWYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/constant.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/event.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-zoom/src/event.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ZoomEvent)\n/* harmony export */ });\nfunction ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsV0FBVyxrREFBa0Q7QUFDN0Qsa0JBQWtCLHlEQUF5RDtBQUMzRSxhQUFhLG9EQUFvRDtBQUNqRSxnQkFBZ0IsdURBQXVEO0FBQ3ZFLFFBQVE7QUFDUixHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzP2VmYzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gWm9vbUV2ZW50KHR5cGUsIHtcbiAgc291cmNlRXZlbnQsXG4gIHRhcmdldCxcbiAgdHJhbnNmb3JtLFxuICBkaXNwYXRjaFxufSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG4gICAgdHlwZToge3ZhbHVlOiB0eXBlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHNvdXJjZUV2ZW50OiB7dmFsdWU6IHNvdXJjZUV2ZW50LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHRhcmdldDoge3ZhbHVlOiB0YXJnZXQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgdHJhbnNmb3JtOiB7dmFsdWU6IHRyYW5zZm9ybSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBfOiB7dmFsdWU6IGRpc3BhdGNofVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/event.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/index.js": /*!**************************************************!*\ !*** ../../../node_modules/d3-zoom/src/index.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ZoomTransform\": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__.Transform),\n/* harmony export */ \"zoom\": () => (/* reexport safe */ _zoom_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"zoomIdentity\": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__.identity),\n/* harmony export */ \"zoomTransform\": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom.js */ \"../../../node_modules/d3-zoom/src/zoom.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transform.js */ \"../../../node_modules/d3-zoom/src/transform.js\");\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEwQztBQUNvRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanM/ZDdjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgem9vbX0gZnJvbSBcIi4vem9vbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHpvb21UcmFuc2Zvcm0sIGlkZW50aXR5IGFzIHpvb21JZGVudGl0eSwgVHJhbnNmb3JtIGFzIFpvb21UcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/index.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/noevent.js": /*!****************************************************!*\ !*** ../../../node_modules/d3-zoom/src/noevent.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"nopropagation\": () => (/* binding */ nopropagation)\n/* harmony export */ });\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL25vZXZlbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9ub2V2ZW50LmpzPzYxOTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oZXZlbnQpIHtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/noevent.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/transform.js": /*!******************************************************!*\ !*** ../../../node_modules/d3-zoom/src/transform.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Transform\": () => (/* binding */ Transform),\n/* harmony export */ \"default\": () => (/* binding */ transform),\n/* harmony export */ \"identity\": () => (/* binding */ identity)\n/* harmony export */ });\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nvar identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nfunction transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3RyYW5zZm9ybS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVPOztBQUVQOztBQUVlO0FBQ2Y7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanM/NzQyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/transform.js\n"); /***/ }), /***/ "../../../node_modules/d3-zoom/src/zoom.js": /*!*************************************************!*\ !*** ../../../node_modules/d3-zoom/src/zoom.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/dispatch.js\");\n/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-drag */ \"../../../node_modules/d3-drag/src/nodrag.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/zoom.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/select.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/pointer.js\");\n/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-transition */ \"../../../node_modules/d3-transition/src/index.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/d3-zoom/src/constant.js\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ \"../../../node_modules/d3-zoom/src/event.js\");\n/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./transform.js */ \"../../../node_modules/d3-zoom/src/transform.js\");\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./noevent.js */ \"../../../node_modules/d3-zoom/src/noevent.js\");\n\n\n\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || _transform_js__WEBPACK_IMPORTED_MODULE_3__.identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(_transform_js__WEBPACK_IMPORTED_MODULE_3__.identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.that).datum();\n listeners.call(\n type,\n this.that,\n new _event_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n }\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n (0,d3_drag__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(event.view);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n g.mouse = [p, this.__zoom.invert(p)];\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n\n function mousemoved(event) {\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n (0,d3_drag__WEBPACK_IMPORTED_MODULE_9__.yesdrag)(event.view, g.moved);\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n if (duration > 0) (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).transition().duration(duration).call(schedule, t1, p0, event);\n else (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBcUM7QUFDVztBQUNEO0FBQ0Y7QUFDTDtBQUNIO0FBQ0Y7QUFDZ0I7QUFDQzs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsbURBQVE7QUFDaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxzQ0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNEQUFlO0FBQ25DLGtCQUFrQix1REFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsZUFBZTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDZEQUFrQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLCtDQUErQyxvREFBUztBQUN4RDs7QUFFQTtBQUNBO0FB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanM/MDMwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlWm9vbX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3NlbGVjdCwgcG9pbnRlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBab29tRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCB7VHJhbnNmb3JtLCBpZGVudGl0eX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG4vLyBleGNlcHQgZm9yIHBpbmNoLXRvLXpvb20sIHdoaWNoIGlzIHNlbnQgYXMgYSB3aGVlbCtjdHJsS2V5IGV2ZW50XG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKGV2ZW50KSB7XG4gIHJldHVybiAoIWV2ZW50LmN0cmxLZXkgfHwgZXZlbnQudHlwZSA9PT0gJ3doZWVsJykgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEV4dGVudCgpIHtcbiAgdmFyIGUgPSB0aGlzO1xuICBpZiAoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICBlID0gZS5vd25lclNWR0VsZW1lbnQgfHwgZTtcbiAgICBpZiAoZS5oYXNBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpKSB7XG4gICAgICBlID0gZS52aWV3Qm94LmJhc2VWYWw7XG4gICAgICByZXR1cm4gW1tlLngsIGUueV0sIFtlLnggKyBlLndpZHRoLCBlLnkgKyBlLmhlaWdodF1dO1xuICAgIH1cbiAgICByZXR1cm4gW1swLCAwXSwgW2Uud2lkdGguYmFzZVZhbC52YWx1ZSwgZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dO1xuICB9XG4gIHJldHVybiBbWzAsIDBdLCBbZS5jbGllbnRXaWR0aCwgZS5jbGllbnRIZWlnaHRdXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRyYW5zZm9ybSgpIHtcbiAgcmV0dXJuIHRoaXMuX196b29tIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0V2hlZWxEZWx0YShldmVudCkge1xuICByZXR1cm4gLWV2ZW50LmRlbHRhWSAqIChldmVudC5kZWx0YU1vZGUgPT09IDEgPyAwLjA1IDogZXZlbnQuZGVsdGFNb2RlID8gMSA6IDAuMDAyKSAqIChldmVudC5jdHJsS2V5ID8gMTAgOiAxKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnN0cmFpbih0cmFuc2Zvcm0sIGV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSB7XG4gIHZhciBkeDAgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMF1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzBdWzBdLFxuICAgICAgZHgxID0gdHJhbnNmb3JtLmludmVydFgoZXh0ZW50WzFdWzBdKSAtIHRyYW5zbGF0ZUV4dGVudFsxXVswXSxcbiAgICAgIGR5MCA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFswXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMV0sXG4gICAgICBkeTEgPSB0cmFuc2Zvcm0uaW52ZXJ0WShleHRlbnRbMV1bMV0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzFdO1xuICByZXR1cm4gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICBkeDEgPiBkeDAgPyAoZHgwICsgZHgxKSAvIDIgOiBNYXRoLm1pbigwLCBkeDApIHx8IE1hdGgubWF4KDAsIGR4MSksXG4gICAgZHkxID4gZHkwID8gKGR5MCArIGR5MSkgLyAyIDogTWF0aC5taW4oMCwgZHkwKSB8fCBNYXRoLm1heCgwLCBkeTEpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGV4dGVudCA9IGRlZmF1bHRFeHRlbnQsXG4gICAgICBjb25zdHJhaW4gPSBkZWZhdWx0Q29uc3RyYWluLFxuICAgICAgd2hlZWxEZWx0YSA9IGRlZmF1bHRXaGVlbERlbHRhLFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIHNjYWxlRXh0ZW50ID0gWzAsIEluZmluaXR5XSxcbiAgICAgIHRyYW5zbGF0ZUV4dGVudCA9IFtbLUluZmluaXR5LCAtSW5maW5pdHldLCBbSW5maW5pdHksIEluZmluaXR5XV0sXG4gICAgICBkdXJhdGlvbiA9IDI1MCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVab29tLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcInpvb21cIiwgXCJlbmRcIiksXG4gICAgICB0b3VjaHN0YXJ0aW5nLFxuICAgICAgdG91Y2hmaXJzdCxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgdG91Y2hEZWxheSA9IDUwMCxcbiAgICAgIHdoZWVsRGVsYXkgPSAxNTAsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDAsXG4gICAgICB0YXBEaXN0YW5jZSA9IDEwO1xuXG4gIGZ1bmN0aW9uIHpvb20oc2VsZWN0aW9uKSB7XG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5wcm9wZXJ0eShcIl9fem9vbVwiLCBkZWZhdWx0VHJhbnNmb3JtKVxuICAgICAgICAub24oXCJ3aGVlbC56b29tXCIsIHdoZWVsZWQsIHtwYXNzaXZlOiBmYWxzZX0pXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi56b29tXCIsIG1vdXNlZG93bmVkKVxuICAgICAgICAub24oXCJkYmxjbGljay56b29tXCIsIGRibGNsaWNrZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC56b29tXCIsIHRvdWNoc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLnpvb21cIiwgdG91Y2htb3ZlZClcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICB6b29tLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGNvbGxlY3Rpb24uc2VsZWN0aW9uID8gY29sbGVjdGlvbi5zZWxlY3Rpb24oKSA6IGNvbGxlY3Rpb247XG4gICAgc2VsZWN0aW9uLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pO1xuICAgIGlmIChjb2xsZWN0aW9uICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHNjaGVkdWxlKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGdlc3R1cmUodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgIC5ldmVudChldmVudClcbiAgICAgICAgICAuc3RhcnQoKVxuICAgICAgICAgIC56b29tKG51bGwsIHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwiZnVuY3Rpb25cIiA/IHRyYW5zZm9ybS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdHJhbnNmb3JtKVxuICAgICAgICAgIC5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB6b29tLnNjYWxlQnkgPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS5zY2FsZVRvKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgazAgPSB0aGlzLl9fem9vbS5rLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gazAgKiBrMTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS5zY2FsZVRvID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBrLCBwLCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgIHQwID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwLFxuICAgICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgICBrMSA9IHR5cGVvZiBrID09PSBcImZ1bmN0aW9uXCIgPyBrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodDAsIGsxKSwgcDAsIHAxKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0aGlzLl9fem9vbS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB4LFxuICAgICAgICB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogeVxuICAgICAgKSwgZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgbnVsbCwgZXZlbnQpO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIHgsIHksIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gcCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcCA9PT0gXCJmdW5jdGlvblwiID8gcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogcDtcbiAgICAgIHJldHVybiBjb25zdHJhaW4oaWRlbnRpdHkudHJhbnNsYXRlKHAwWzBdLCBwMFsxXSkuc2NhbGUodC5rKS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyAteC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyAteS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXlcbiAgICAgICksIGUsIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgcCwgZXZlbnQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHRyYW5zZm9ybSwgaykge1xuICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIGspKTtcbiAgICByZXR1cm4gayA9PT0gdHJhbnNmb3JtLmsgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKGssIHRyYW5zZm9ybS54LCB0cmFuc2Zvcm0ueSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUodHJhbnNmb3JtLCBwMCwgcDEpIHtcbiAgICB2YXIgeCA9IHAwWzBdIC0gcDFbMF0gKiB0cmFuc2Zvcm0uaywgeSA9IHAwWzFdIC0gcDFbMV0gKiB0cmFuc2Zvcm0uaztcbiAgICByZXR1cm4geCA9PT0gdHJhbnNmb3JtLnggJiYgeSA9PT0gdHJhbnNmb3JtLnkgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKHRyYW5zZm9ybS5rLCB4LCB5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRyb2lkKGV4dGVudCkge1xuICAgIHJldHVybiBbKCtleHRlbnRbMF1bMF0gKyArZXh0ZW50WzFdWzBdKSAvIDIsICgrZXh0ZW50WzBdWzFdICsgK2V4dGVudFsxXVsxXSkgLyAyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKHRyYW5zaXRpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdHJhbnNpdGlvblxuICAgICAgICAub24oXCJzdGFydC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLnN0YXJ0KCk7IH0pXG4gICAgICAgIC5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLmVuZCgpOyB9KVxuICAgICAgICAudHdlZW4oXCJ6b29tXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgZyA9IGdlc3R1cmUodGhhdCwgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgICBlID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpLFxuICAgICAgICAgICAgICBwID0gcG9pbnQgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyBwb2ludC5hcHBseSh0aGF0LCBhcmdzKSA6IHBvaW50LFxuICAgICAgICAgICAgICB3ID0gTWF0aC5tYXgoZVsxXVswXSAtIGVbMF1bMF0sIGVbMV1bMV0gLSBlWzBdWzFdKSxcbiAgICAgICAgICAgICAgYSA9IHRoYXQuX196b29tLFxuICAgICAgICAgICAgICBiID0gdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoYXQsIGFyZ3MpIDogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoYS5pbnZlcnQocCkuY29uY2F0KHcgLyBhLmspLCBiLmludmVydChwKS5jb25jYXQodyAvIGIuaykpO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCA9PT0gMSkgdCA9IGI7IC8vIEF2b2lkIHJvdW5kaW5nIGVycm9yIG9uIGVuZC5cbiAgICAgICAgICAgIGVsc2UgeyB2YXIgbCA9IGkodCksIGsgPSB3IC8gbFsyXTsgdCA9IG5ldyBUcmFuc2Zvcm0oaywgcFswXSAtIGxbMF0gKiBrLCBwWzFdIC0gbFsxXSAqIGspOyB9XG4gICAgICAgICAgICBnLnpvb20obnVsbCwgdCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXN0dXJlKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgcmV0dXJuICghY2xlYW4gJiYgdGhhdC5fX3pvb21pbmcpIHx8IG5ldyBHZXN0dXJlKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gR2VzdHVyZSh0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLnNvdXJjZUV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB0aGlzLnRhcHMgPSAwO1xuICB9XG5cbiAgR2VzdHVyZS5wcm90b3R5cGUgPSB7XG4gICAgZXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQpIHRoaXMuc291cmNlRXZlbnQgPSBldmVudDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHtcbiAgICAgICAgdGhpcy50aGF0Ll9fem9vbWluZyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB6b29tOiBmdW5jdGlvbihrZXksIHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHRoaXMubW91c2UgJiYga2V5ICE9PSBcIm1vdXNlXCIpIHRoaXMubW91c2VbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMubW91c2VbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gwICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMFsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDBbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gxICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDFbMF0pO1xuICAgICAgdGhpcy50aGF0Ll9fem9vbSA9IHRyYW5zZm9ybTtcbiAgICAgIHRoaXMuZW1pdChcInpvb21cIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZztcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgWm9vbUV2ZW50KHR5cGUsIHtcbiAgICAgICAgICBzb3VyY2VFdmVudDogdGhpcy5zb3VyY2VFdmVudCxcbiAgICAgICAgICB0YXJnZXQ6IHpvb20sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMudGhhdC5fX3pvb20sXG4gICAgICAgICAgZGlzcGF0Y2g6IGxpc3RlbmVyc1xuICAgICAgICB9KSxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gd2hlZWxlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIHQuayAqIE1hdGgucG93KDIsIHdoZWVsRGVsdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKSkpKSxcbiAgICAgICAgcCA9IHBvaW50ZXIoZXZlbnQpO1xuXG4gICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGJlZm9yZSwgcmV1c2UgaXQuXG4gICAgLy8gSWYgdGhlcmUgd2VyZSByZWNlbnQgd2hlZWwgZXZlbnRzLCByZXNldCB0aGUgd2hlZWwgaWRsZSB0aW1lb3V0LlxuICAgIGlmIChnLndoZWVsKSB7XG4gICAgICBpZiAoZy5tb3VzZVswXVswXSAhPT0gcFswXSB8fCBnLm1vdXNlWzBdWzFdICE9PSBwWzFdKSB7XG4gICAgICAgIGcubW91c2VbMV0gPSB0LmludmVydChnLm1vdXNlWzBdID0gcCk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoZy53aGVlbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyB3aGVlbCBldmVudCB3b27igJl0IHRyaWdnZXIgYSB0cmFuc2Zvcm0gY2hhbmdlLCBpZ25vcmUgaXQuXG4gICAgZWxzZSBpZiAodC5rID09PSBrKSByZXR1cm47XG5cbiAgICAvLyBPdGhlcndpc2UsIGNhcHR1cmUgdGhlIG1vdXNlIHBvaW50IGFuZCBsb2NhdGlvbiBhdCB0aGUgc3RhcnQuXG4gICAgZWxzZSB7XG4gICAgICBnLm1vdXNlID0gW3AsIHQuaW52ZXJ0KHApXTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBnLndoZWVsID0gc2V0VGltZW91dCh3aGVlbGlkbGVkLCB3aGVlbERlbGF5KTtcbiAgICBnLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQsIGspLCBnLm1vdXNlWzBdLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuXG4gICAgZnVuY3Rpb24gd2hlZWxpZGxlZCgpIHtcbiAgICAgIGcud2hlZWwgPSBudWxsO1xuICAgICAgZy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MsIHRydWUpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdiA9IHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS56b29tXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC56b29tXCIsIG1vdXNldXBwZWQsIHRydWUpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCwgY3VycmVudFRhcmdldCksXG4gICAgICAgIHgwID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTAgPSBldmVudC5jbGllbnRZO1xuXG4gICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgZy5tb3VzZSA9IFtwLCB0aGlzLl9fem9vbS5pbnZlcnQocCldO1xuICAgIGludGVycnVwdCh0aGlzKTtcbiAgICBnLnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKGV2ZW50KSB7XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICAgIGlmICghZy5tb3ZlZCkge1xuICAgICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0geDAsIGR5ID0gZXZlbnQuY2xpZW50WSAtIHkwO1xuICAgICAgICBnLm1vdmVkID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICAgIH1cbiAgICAgIGcuZXZlbnQoZXZlbnQpXG4gICAgICAgLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKGcudGhhdC5fX3pvb20sIGcubW91c2VbMF0gPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSwgZy5tb3VzZVsxXSksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VzZXVwcGVkKGV2ZW50KSB7XG4gICAgICB2Lm9uKFwibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tXCIsIG51bGwpO1xuICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBnLm1vdmVkKTtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgZy5ldmVudChldmVudCkuZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGJsY2xpY2tlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgcDAgPSBwb2ludGVyKGV2ZW50LmNoYW5nZWRUb3VjaGVzID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldmVudCwgdGhpcyksXG4gICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgazEgPSB0MC5rICogKGV2ZW50LnNoaWZ0S2V5ID8gMC41IDogMiksXG4gICAgICAgIHQxID0gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBleHRlbnQuYXBwbHkodGhpcywgYXJncyksIHRyYW5zbGF0ZUV4dGVudCk7XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBpZiAoZHVyYXRpb24gPiAwKSBzZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKS5jYWxsKHNjaGVkdWxlLCB0MSwgcDAsIGV2ZW50KTtcbiAgICBlbHNlIHNlbGVjdCh0aGlzKS5jYWxsKHpvb20udHJhbnNmb3JtLCB0MSwgcDAsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID09PSBuKS5ldmVudChldmVudCksXG4gICAgICAgIHN0YXJ0ZWQsIGksIHQsIHA7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXSwgcCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICBwID0gW3AsIHRoaXMuX196b29tLmludmVydChwKSwgdC5pZGVudGlmaWVyXTtcbiAgICAgIGlmICghZy50b3VjaDApIGcudG91Y2gwID0gcCwgc3RhcnRlZCA9IHRydWUsIGcudGFwcyA9IDEgKyAhIXRvdWNoc3RhcnRpbmc7XG4gICAgICBlbHNlIGlmICghZy50b3VjaDEgJiYgZy50b3VjaDBbMl0gIT09IHBbMl0pIGcudG91Y2gxID0gcCwgZy50YXBzID0gMDtcbiAgICB9XG5cbiAgICBpZiAodG91Y2hzdGFydGluZykgdG91Y2hzdGFydGluZyA9IGNsZWFyVGltZW91dCh0b3VjaHN0YXJ0aW5nKTtcblxuICAgIGlmIChzdGFydGVkKSB7XG4gICAgICBpZiAoZy50YXBzIDwgMikgdG91Y2hmaXJzdCA9IHBbMF0sIHRvdWNoc3RhcnRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaHN0YXJ0aW5nID0gbnVsbDsgfSwgdG91Y2hEZWxheSk7XG4gICAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgICBnLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghdGhpcy5fX3pvb21pbmcpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgdCwgcCwgbDtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMFswXSA9IHA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMVswXSA9IHA7XG4gICAgfVxuICAgIHQgPSBnLnRoYXQuX196b29tO1xuICAgIGlmIChnLnRvdWNoMSkge1xuICAgICAgdmFyIHAwID0gZy50b3VjaDBbMF0sIGwwID0gZy50b3VjaDBbMV0sXG4gICAgICAgICAgcDEgPSBnLnRvdWNoMVswXSwgbDEgPSBnLnRvdWNoMVsxXSxcbiAgICAgICAgICBkcCA9IChkcCA9IHAxWzBdIC0gcDBbMF0pICogZHAgKyAoZHAgPSBwMVsxXSAtIHAwWzFdKSAqIGRwLFxuICAgICAgICAgIGRsID0gKGRsID0gbDFbMF0gLSBsMFswXSkgKiBkbCArIChkbCA9IGwxWzFdIC0gbDBbMV0pICogZGw7XG4gICAgICB0ID0gc2NhbGUodCwgTWF0aC5zcXJ0KGRwIC8gZGwpKTtcbiAgICAgIHAgPSBbKHAwWzBdICsgcDFbMF0pIC8gMiwgKHAwWzFdICsgcDFbMV0pIC8gMl07XG4gICAgICBsID0gWyhsMFswXSArIGwxWzBdKSAvIDIsIChsMFsxXSArIGwxWzFdKSAvIDJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnLnRvdWNoMCkgcCA9IGcudG91Y2gwWzBdLCBsID0gZy50b3VjaDBbMV07XG4gICAgZWxzZSByZXR1cm47XG5cbiAgICBnLnpvb20oXCJ0b3VjaFwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHQsIHAsIGwpLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0O1xuXG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDE7XG4gICAgfVxuICAgIGlmIChnLnRvdWNoMSAmJiAhZy50b3VjaDApIGcudG91Y2gwID0gZy50b3VjaDEsIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICBpZiAoZy50b3VjaDApIGcudG91Y2gwWzFdID0gdGhpcy5fX3pvb20uaW52ZXJ0KGcudG91Y2gwWzBdKTtcbiAgICBlbHNlIHtcbiAgICAgIGcuZW5kKCk7XG4gICAgICAvLyBJZiB0aGlzIHdhcyBhIGRibHRhcCwgcmVyb3V0ZSB0byB0aGUgKG9wdGlvbmFsKSBkYmxjbGljay56b29tIGhhbmRsZXIuXG4gICAgICBpZiAoZy50YXBzID09PSAyKSB7XG4gICAgICAgIHQgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgICBpZiAoTWF0aC5oeXBvdCh0b3VjaGZpcnN0WzBdIC0gdFswXSwgdG91Y2hmaXJzdFsxXSAtIHRbMV0pIDwgdGFwRGlzdGFuY2UpIHtcbiAgICAgICAgICB2YXIgcCA9IHNlbGVjdCh0aGlzKS5vbihcImRibGNsaWNrLnpvb21cIik7XG4gICAgICAgICAgaWYgKHApIHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHpvb20ud2hlZWxEZWx0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3aGVlbERlbHRhID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHpvb20pIDogd2hlZWxEZWx0YTtcbiAgfTtcblxuICB6b29tLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIHpvb20pIDogZmlsdGVyO1xuICB9O1xuXG4gIHpvb20udG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgem9vbS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChbWytfWzBdWzBdLCArX1swXVsxXV0sIFsrX1sxXVswXSwgK19bMV1bMV1dXSksIHpvb20pIDogZXh0ZW50O1xuICB9O1xuXG4gIHpvb20uc2NhbGVFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGVFeHRlbnRbMF0gPSArX1swXSwgc2NhbGVFeHRlbnRbMV0gPSArX1sxXSwgem9vbSkgOiBbc2NhbGVFeHRlbnRbMF0sIHNjYWxlRXh0ZW50WzFdXTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0cmFuc2xhdGVFeHRlbnRbMF1bMF0gPSArX1swXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzBdID0gK19bMV1bMF0sIHRyYW5zbGF0ZUV4dGVudFswXVsxXSA9ICtfWzBdWzFdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV0gPSArX1sxXVsxXSwgem9vbSkgOiBbW3RyYW5zbGF0ZUV4dGVudFswXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdXSwgW3RyYW5zbGF0ZUV4dGVudFsxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzFdXV07XG4gIH07XG5cbiAgem9vbS5jb25zdHJhaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29uc3RyYWluID0gXywgem9vbSkgOiBjb25zdHJhaW47XG4gIH07XG5cbiAgem9vbS5kdXJhdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkdXJhdGlvbiA9ICtfLCB6b29tKSA6IGR1cmF0aW9uO1xuICB9O1xuXG4gIHpvb20uaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdGUgPSBfLCB6b29tKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHpvb20ub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gem9vbSA6IHZhbHVlO1xuICB9O1xuXG4gIHpvb20uY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGlja0Rpc3RhbmNlMiA9IChfID0gK18pICogXywgem9vbSkgOiBNYXRoLnNxcnQoY2xpY2tEaXN0YW5jZTIpO1xuICB9O1xuXG4gIHpvb20udGFwRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFwRGlzdGFuY2UgPSArXywgem9vbSkgOiB0YXBEaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/d3-zoom/src/zoom.js\n"); /***/ }), /***/ "../../../node_modules/d3/src/index.js": /*!*********************************************!*\ !*** ../../../node_modules/d3/src/index.js ***! \*********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Adder\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.Adder),\n/* harmony export */ \"Delaunay\": () => (/* reexport safe */ d3_delaunay__WEBPACK_IMPORTED_MODULE_6__.Delaunay),\n/* harmony export */ \"FormatSpecifier\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.FormatSpecifier),\n/* harmony export */ \"InternMap\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.InternMap),\n/* harmony export */ \"InternSet\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.InternSet),\n/* harmony export */ \"Node\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.Node),\n/* harmony export */ \"Path\": () => (/* reexport safe */ d3_path__WEBPACK_IMPORTED_MODULE_17__.Path),\n/* harmony export */ \"Voronoi\": () => (/* reexport safe */ d3_delaunay__WEBPACK_IMPORTED_MODULE_6__.Voronoi),\n/* harmony export */ \"ZoomTransform\": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_29__.ZoomTransform),\n/* harmony export */ \"active\": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_28__.active),\n/* harmony export */ \"arc\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.arc),\n/* harmony export */ \"area\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.area),\n/* harmony export */ \"areaRadial\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.areaRadial),\n/* harmony export */ \"ascending\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.ascending),\n/* harmony export */ \"autoType\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.autoType),\n/* harmony export */ \"axisBottom\": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_1__.axisBottom),\n/* harmony export */ \"axisLeft\": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_1__.axisLeft),\n/* harmony export */ \"axisRight\": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_1__.axisRight),\n/* harmony export */ \"axisTop\": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_1__.axisTop),\n/* harmony export */ \"bin\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bin),\n/* harmony export */ \"bisect\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect),\n/* harmony export */ \"bisectCenter\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bisectCenter),\n/* harmony export */ \"bisectLeft\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bisectLeft),\n/* harmony export */ \"bisectRight\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bisectRight),\n/* harmony export */ \"bisector\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.bisector),\n/* harmony export */ \"blob\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.blob),\n/* harmony export */ \"blur\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.blur),\n/* harmony export */ \"blur2\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.blur2),\n/* harmony export */ \"blurImage\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.blurImage),\n/* harmony export */ \"brush\": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_2__.brush),\n/* harmony export */ \"brushSelection\": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_2__.brushSelection),\n/* harmony export */ \"brushX\": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_2__.brushX),\n/* harmony export */ \"brushY\": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_2__.brushY),\n/* harmony export */ \"buffer\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.buffer),\n/* harmony export */ \"chord\": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_3__.chord),\n/* harmony export */ \"chordDirected\": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_3__.chordDirected),\n/* harmony export */ \"chordTranspose\": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_3__.chordTranspose),\n/* harmony export */ \"cluster\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.cluster),\n/* harmony export */ \"color\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.color),\n/* harmony export */ \"contourDensity\": () => (/* reexport safe */ d3_contour__WEBPACK_IMPORTED_MODULE_5__.contourDensity),\n/* harmony export */ \"contours\": () => (/* reexport safe */ d3_contour__WEBPACK_IMPORTED_MODULE_5__.contours),\n/* harmony export */ \"count\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.count),\n/* harmony export */ \"create\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.create),\n/* harmony export */ \"creator\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.creator),\n/* harmony export */ \"cross\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.cross),\n/* harmony export */ \"csv\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.csv),\n/* harmony export */ \"csvFormat\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvFormat),\n/* harmony export */ \"csvFormatBody\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvFormatBody),\n/* harmony export */ \"csvFormatRow\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvFormatRow),\n/* harmony export */ \"csvFormatRows\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvFormatRows),\n/* harmony export */ \"csvFormatValue\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvFormatValue),\n/* harmony export */ \"csvParse\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvParse),\n/* harmony export */ \"csvParseRows\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.csvParseRows),\n/* harmony export */ \"cubehelix\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.cubehelix),\n/* harmony export */ \"cumsum\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.cumsum),\n/* harmony export */ \"curveBasis\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBasis),\n/* harmony export */ \"curveBasisClosed\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBasisClosed),\n/* harmony export */ \"curveBasisOpen\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBasisOpen),\n/* harmony export */ \"curveBumpX\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBumpX),\n/* harmony export */ \"curveBumpY\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBumpY),\n/* harmony export */ \"curveBundle\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveBundle),\n/* harmony export */ \"curveCardinal\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCardinal),\n/* harmony export */ \"curveCardinalClosed\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCardinalClosed),\n/* harmony export */ \"curveCardinalOpen\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCardinalOpen),\n/* harmony export */ \"curveCatmullRom\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCatmullRom),\n/* harmony export */ \"curveCatmullRomClosed\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCatmullRomClosed),\n/* harmony export */ \"curveCatmullRomOpen\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveCatmullRomOpen),\n/* harmony export */ \"curveLinear\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveLinear),\n/* harmony export */ \"curveLinearClosed\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveLinearClosed),\n/* harmony export */ \"curveMonotoneX\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveMonotoneX),\n/* harmony export */ \"curveMonotoneY\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveMonotoneY),\n/* harmony export */ \"curveNatural\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveNatural),\n/* harmony export */ \"curveStep\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveStep),\n/* harmony export */ \"curveStepAfter\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveStepAfter),\n/* harmony export */ \"curveStepBefore\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.curveStepBefore),\n/* harmony export */ \"descending\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.descending),\n/* harmony export */ \"deviation\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.deviation),\n/* harmony export */ \"difference\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.difference),\n/* harmony export */ \"disjoint\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.disjoint),\n/* harmony export */ \"dispatch\": () => (/* reexport safe */ d3_dispatch__WEBPACK_IMPORTED_MODULE_7__.dispatch),\n/* harmony export */ \"drag\": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_8__.drag),\n/* harmony export */ \"dragDisable\": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_8__.dragDisable),\n/* harmony export */ \"dragEnable\": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_8__.dragEnable),\n/* harmony export */ \"dsv\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.dsv),\n/* harmony export */ \"dsvFormat\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.dsvFormat),\n/* harmony export */ \"easeBack\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBack),\n/* harmony export */ \"easeBackIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBackIn),\n/* harmony export */ \"easeBackInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBackInOut),\n/* harmony export */ \"easeBackOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBackOut),\n/* harmony export */ \"easeBounce\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBounce),\n/* harmony export */ \"easeBounceIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBounceIn),\n/* harmony export */ \"easeBounceInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBounceInOut),\n/* harmony export */ \"easeBounceOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeBounceOut),\n/* harmony export */ \"easeCircle\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCircle),\n/* harmony export */ \"easeCircleIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCircleIn),\n/* harmony export */ \"easeCircleInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCircleInOut),\n/* harmony export */ \"easeCircleOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCircleOut),\n/* harmony export */ \"easeCubic\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCubic),\n/* harmony export */ \"easeCubicIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCubicIn),\n/* harmony export */ \"easeCubicInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCubicInOut),\n/* harmony export */ \"easeCubicOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeCubicOut),\n/* harmony export */ \"easeElastic\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeElastic),\n/* harmony export */ \"easeElasticIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeElasticIn),\n/* harmony export */ \"easeElasticInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeElasticInOut),\n/* harmony export */ \"easeElasticOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeElasticOut),\n/* harmony export */ \"easeExp\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeExp),\n/* harmony export */ \"easeExpIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeExpIn),\n/* harmony export */ \"easeExpInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeExpInOut),\n/* harmony export */ \"easeExpOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeExpOut),\n/* harmony export */ \"easeLinear\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeLinear),\n/* harmony export */ \"easePoly\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easePoly),\n/* harmony export */ \"easePolyIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easePolyIn),\n/* harmony export */ \"easePolyInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easePolyInOut),\n/* harmony export */ \"easePolyOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easePolyOut),\n/* harmony export */ \"easeQuad\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeQuad),\n/* harmony export */ \"easeQuadIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeQuadIn),\n/* harmony export */ \"easeQuadInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeQuadInOut),\n/* harmony export */ \"easeQuadOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeQuadOut),\n/* harmony export */ \"easeSin\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeSin),\n/* harmony export */ \"easeSinIn\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeSinIn),\n/* harmony export */ \"easeSinInOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeSinInOut),\n/* harmony export */ \"easeSinOut\": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_10__.easeSinOut),\n/* harmony export */ \"every\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.every),\n/* harmony export */ \"extent\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.extent),\n/* harmony export */ \"fcumsum\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.fcumsum),\n/* harmony export */ \"filter\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.filter),\n/* harmony export */ \"flatGroup\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.flatGroup),\n/* harmony export */ \"flatRollup\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.flatRollup),\n/* harmony export */ \"forceCenter\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceCenter),\n/* harmony export */ \"forceCollide\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceCollide),\n/* harmony export */ \"forceLink\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceLink),\n/* harmony export */ \"forceManyBody\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceManyBody),\n/* harmony export */ \"forceRadial\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceRadial),\n/* harmony export */ \"forceSimulation\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceSimulation),\n/* harmony export */ \"forceX\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceX),\n/* harmony export */ \"forceY\": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_12__.forceY),\n/* harmony export */ \"format\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.format),\n/* harmony export */ \"formatDefaultLocale\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.formatDefaultLocale),\n/* harmony export */ \"formatLocale\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.formatLocale),\n/* harmony export */ \"formatPrefix\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.formatPrefix),\n/* harmony export */ \"formatSpecifier\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.formatSpecifier),\n/* harmony export */ \"fsum\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.fsum),\n/* harmony export */ \"geoAlbers\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAlbers),\n/* harmony export */ \"geoAlbersUsa\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAlbersUsa),\n/* harmony export */ \"geoArea\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoArea),\n/* harmony export */ \"geoAzimuthalEqualArea\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAzimuthalEqualArea),\n/* harmony export */ \"geoAzimuthalEqualAreaRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAzimuthalEqualAreaRaw),\n/* harmony export */ \"geoAzimuthalEquidistant\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAzimuthalEquidistant),\n/* harmony export */ \"geoAzimuthalEquidistantRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoAzimuthalEquidistantRaw),\n/* harmony export */ \"geoBounds\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoBounds),\n/* harmony export */ \"geoCentroid\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoCentroid),\n/* harmony export */ \"geoCircle\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoCircle),\n/* harmony export */ \"geoClipAntimeridian\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoClipAntimeridian),\n/* harmony export */ \"geoClipCircle\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoClipCircle),\n/* harmony export */ \"geoClipExtent\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoClipExtent),\n/* harmony export */ \"geoClipRectangle\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoClipRectangle),\n/* harmony export */ \"geoConicConformal\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicConformal),\n/* harmony export */ \"geoConicConformalRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicConformalRaw),\n/* harmony export */ \"geoConicEqualArea\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicEqualArea),\n/* harmony export */ \"geoConicEqualAreaRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicEqualAreaRaw),\n/* harmony export */ \"geoConicEquidistant\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicEquidistant),\n/* harmony export */ \"geoConicEquidistantRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoConicEquidistantRaw),\n/* harmony export */ \"geoContains\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoContains),\n/* harmony export */ \"geoDistance\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoDistance),\n/* harmony export */ \"geoEqualEarth\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoEqualEarth),\n/* harmony export */ \"geoEqualEarthRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoEqualEarthRaw),\n/* harmony export */ \"geoEquirectangular\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoEquirectangular),\n/* harmony export */ \"geoEquirectangularRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoEquirectangularRaw),\n/* harmony export */ \"geoGnomonic\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoGnomonic),\n/* harmony export */ \"geoGnomonicRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoGnomonicRaw),\n/* harmony export */ \"geoGraticule\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoGraticule),\n/* harmony export */ \"geoGraticule10\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoGraticule10),\n/* harmony export */ \"geoIdentity\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoIdentity),\n/* harmony export */ \"geoInterpolate\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoInterpolate),\n/* harmony export */ \"geoLength\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoLength),\n/* harmony export */ \"geoMercator\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoMercator),\n/* harmony export */ \"geoMercatorRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoMercatorRaw),\n/* harmony export */ \"geoNaturalEarth1\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoNaturalEarth1),\n/* harmony export */ \"geoNaturalEarth1Raw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoNaturalEarth1Raw),\n/* harmony export */ \"geoOrthographic\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoOrthographic),\n/* harmony export */ \"geoOrthographicRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoOrthographicRaw),\n/* harmony export */ \"geoPath\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoPath),\n/* harmony export */ \"geoProjection\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoProjection),\n/* harmony export */ \"geoProjectionMutator\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoProjectionMutator),\n/* harmony export */ \"geoRotation\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoRotation),\n/* harmony export */ \"geoStereographic\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoStereographic),\n/* harmony export */ \"geoStereographicRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoStereographicRaw),\n/* harmony export */ \"geoStream\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoStream),\n/* harmony export */ \"geoTransform\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoTransform),\n/* harmony export */ \"geoTransverseMercator\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoTransverseMercator),\n/* harmony export */ \"geoTransverseMercatorRaw\": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_14__.geoTransverseMercatorRaw),\n/* harmony export */ \"gray\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.gray),\n/* harmony export */ \"greatest\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.greatest),\n/* harmony export */ \"greatestIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.greatestIndex),\n/* harmony export */ \"group\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.group),\n/* harmony export */ \"groupSort\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.groupSort),\n/* harmony export */ \"groups\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.groups),\n/* harmony export */ \"hcl\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.hcl),\n/* harmony export */ \"hierarchy\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.hierarchy),\n/* harmony export */ \"histogram\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.histogram),\n/* harmony export */ \"hsl\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.hsl),\n/* harmony export */ \"html\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.html),\n/* harmony export */ \"image\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.image),\n/* harmony export */ \"index\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.index),\n/* harmony export */ \"indexes\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.indexes),\n/* harmony export */ \"interpolate\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolate),\n/* harmony export */ \"interpolateArray\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateArray),\n/* harmony export */ \"interpolateBasis\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateBasis),\n/* harmony export */ \"interpolateBasisClosed\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateBasisClosed),\n/* harmony export */ \"interpolateBlues\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateBlues),\n/* harmony export */ \"interpolateBrBG\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateBrBG),\n/* harmony export */ \"interpolateBuGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateBuGn),\n/* harmony export */ \"interpolateBuPu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateBuPu),\n/* harmony export */ \"interpolateCividis\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateCividis),\n/* harmony export */ \"interpolateCool\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateCool),\n/* harmony export */ \"interpolateCubehelix\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateCubehelix),\n/* harmony export */ \"interpolateCubehelixDefault\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateCubehelixDefault),\n/* harmony export */ \"interpolateCubehelixLong\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateCubehelixLong),\n/* harmony export */ \"interpolateDate\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateDate),\n/* harmony export */ \"interpolateDiscrete\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateDiscrete),\n/* harmony export */ \"interpolateGnBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateGnBu),\n/* harmony export */ \"interpolateGreens\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateGreens),\n/* harmony export */ \"interpolateGreys\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateGreys),\n/* harmony export */ \"interpolateHcl\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateHcl),\n/* harmony export */ \"interpolateHclLong\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateHclLong),\n/* harmony export */ \"interpolateHsl\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateHsl),\n/* harmony export */ \"interpolateHslLong\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateHslLong),\n/* harmony export */ \"interpolateHue\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateHue),\n/* harmony export */ \"interpolateInferno\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateInferno),\n/* harmony export */ \"interpolateLab\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateLab),\n/* harmony export */ \"interpolateMagma\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateMagma),\n/* harmony export */ \"interpolateNumber\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateNumber),\n/* harmony export */ \"interpolateNumberArray\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateNumberArray),\n/* harmony export */ \"interpolateObject\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateObject),\n/* harmony export */ \"interpolateOrRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateOrRd),\n/* harmony export */ \"interpolateOranges\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateOranges),\n/* harmony export */ \"interpolatePRGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePRGn),\n/* harmony export */ \"interpolatePiYG\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePiYG),\n/* harmony export */ \"interpolatePlasma\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePlasma),\n/* harmony export */ \"interpolatePuBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePuBu),\n/* harmony export */ \"interpolatePuBuGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePuBuGn),\n/* harmony export */ \"interpolatePuOr\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePuOr),\n/* harmony export */ \"interpolatePuRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePuRd),\n/* harmony export */ \"interpolatePurples\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolatePurples),\n/* harmony export */ \"interpolateRainbow\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRainbow),\n/* harmony export */ \"interpolateRdBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRdBu),\n/* harmony export */ \"interpolateRdGy\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRdGy),\n/* harmony export */ \"interpolateRdPu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRdPu),\n/* harmony export */ \"interpolateRdYlBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRdYlBu),\n/* harmony export */ \"interpolateRdYlGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateRdYlGn),\n/* harmony export */ \"interpolateReds\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateReds),\n/* harmony export */ \"interpolateRgb\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateRgb),\n/* harmony export */ \"interpolateRgbBasis\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateRgbBasis),\n/* harmony export */ \"interpolateRgbBasisClosed\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateRgbBasisClosed),\n/* harmony export */ \"interpolateRound\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateRound),\n/* harmony export */ \"interpolateSinebow\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateSinebow),\n/* harmony export */ \"interpolateSpectral\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateSpectral),\n/* harmony export */ \"interpolateString\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateString),\n/* harmony export */ \"interpolateTransformCss\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateTransformCss),\n/* harmony export */ \"interpolateTransformSvg\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateTransformSvg),\n/* harmony export */ \"interpolateTurbo\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateTurbo),\n/* harmony export */ \"interpolateViridis\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateViridis),\n/* harmony export */ \"interpolateWarm\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateWarm),\n/* harmony export */ \"interpolateYlGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateYlGn),\n/* harmony export */ \"interpolateYlGnBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateYlGnBu),\n/* harmony export */ \"interpolateYlOrBr\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateYlOrBr),\n/* harmony export */ \"interpolateYlOrRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.interpolateYlOrRd),\n/* harmony export */ \"interpolateZoom\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.interpolateZoom),\n/* harmony export */ \"interrupt\": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_28__.interrupt),\n/* harmony export */ \"intersection\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.intersection),\n/* harmony export */ \"interval\": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_27__.interval),\n/* harmony export */ \"isoFormat\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.isoFormat),\n/* harmony export */ \"isoParse\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.isoParse),\n/* harmony export */ \"json\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.json),\n/* harmony export */ \"lab\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.lab),\n/* harmony export */ \"lch\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.lch),\n/* harmony export */ \"least\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.least),\n/* harmony export */ \"leastIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.leastIndex),\n/* harmony export */ \"line\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.line),\n/* harmony export */ \"lineRadial\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.lineRadial),\n/* harmony export */ \"link\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.link),\n/* harmony export */ \"linkHorizontal\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.linkHorizontal),\n/* harmony export */ \"linkRadial\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.linkRadial),\n/* harmony export */ \"linkVertical\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.linkVertical),\n/* harmony export */ \"local\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.local),\n/* harmony export */ \"map\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.map),\n/* harmony export */ \"matcher\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.matcher),\n/* harmony export */ \"max\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.max),\n/* harmony export */ \"maxIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.maxIndex),\n/* harmony export */ \"mean\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.mean),\n/* harmony export */ \"median\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.median),\n/* harmony export */ \"medianIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.medianIndex),\n/* harmony export */ \"merge\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.merge),\n/* harmony export */ \"min\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.min),\n/* harmony export */ \"minIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.minIndex),\n/* harmony export */ \"mode\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.mode),\n/* harmony export */ \"namespace\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.namespace),\n/* harmony export */ \"namespaces\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.namespaces),\n/* harmony export */ \"nice\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.nice),\n/* harmony export */ \"now\": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_27__.now),\n/* harmony export */ \"pack\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.pack),\n/* harmony export */ \"packEnclose\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.packEnclose),\n/* harmony export */ \"packSiblings\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.packSiblings),\n/* harmony export */ \"pairs\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.pairs),\n/* harmony export */ \"partition\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.partition),\n/* harmony export */ \"path\": () => (/* reexport safe */ d3_path__WEBPACK_IMPORTED_MODULE_17__.path),\n/* harmony export */ \"pathRound\": () => (/* reexport safe */ d3_path__WEBPACK_IMPORTED_MODULE_17__.pathRound),\n/* harmony export */ \"permute\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.permute),\n/* harmony export */ \"pie\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.pie),\n/* harmony export */ \"piecewise\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.piecewise),\n/* harmony export */ \"pointRadial\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.pointRadial),\n/* harmony export */ \"pointer\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.pointer),\n/* harmony export */ \"pointers\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.pointers),\n/* harmony export */ \"polygonArea\": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_18__.polygonArea),\n/* harmony export */ \"polygonCentroid\": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_18__.polygonCentroid),\n/* harmony export */ \"polygonContains\": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_18__.polygonContains),\n/* harmony export */ \"polygonHull\": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_18__.polygonHull),\n/* harmony export */ \"polygonLength\": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_18__.polygonLength),\n/* harmony export */ \"precisionFixed\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.precisionFixed),\n/* harmony export */ \"precisionPrefix\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.precisionPrefix),\n/* harmony export */ \"precisionRound\": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_13__.precisionRound),\n/* harmony export */ \"quadtree\": () => (/* reexport safe */ d3_quadtree__WEBPACK_IMPORTED_MODULE_19__.quadtree),\n/* harmony export */ \"quantile\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.quantile),\n/* harmony export */ \"quantileIndex\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.quantileIndex),\n/* harmony export */ \"quantileSorted\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.quantileSorted),\n/* harmony export */ \"quantize\": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_16__.quantize),\n/* harmony export */ \"quickselect\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.quickselect),\n/* harmony export */ \"radialArea\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.radialArea),\n/* harmony export */ \"radialLine\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.radialLine),\n/* harmony export */ \"randomBates\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomBates),\n/* harmony export */ \"randomBernoulli\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomBernoulli),\n/* harmony export */ \"randomBeta\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomBeta),\n/* harmony export */ \"randomBinomial\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomBinomial),\n/* harmony export */ \"randomCauchy\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomCauchy),\n/* harmony export */ \"randomExponential\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomExponential),\n/* harmony export */ \"randomGamma\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomGamma),\n/* harmony export */ \"randomGeometric\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomGeometric),\n/* harmony export */ \"randomInt\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomInt),\n/* harmony export */ \"randomIrwinHall\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomIrwinHall),\n/* harmony export */ \"randomLcg\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomLcg),\n/* harmony export */ \"randomLogNormal\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomLogNormal),\n/* harmony export */ \"randomLogistic\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomLogistic),\n/* harmony export */ \"randomNormal\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomNormal),\n/* harmony export */ \"randomPareto\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomPareto),\n/* harmony export */ \"randomPoisson\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomPoisson),\n/* harmony export */ \"randomUniform\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomUniform),\n/* harmony export */ \"randomWeibull\": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_20__.randomWeibull),\n/* harmony export */ \"range\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.range),\n/* harmony export */ \"rank\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.rank),\n/* harmony export */ \"reduce\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.reduce),\n/* harmony export */ \"reverse\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.reverse),\n/* harmony export */ \"rgb\": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_4__.rgb),\n/* harmony export */ \"ribbon\": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_3__.ribbon),\n/* harmony export */ \"ribbonArrow\": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_3__.ribbonArrow),\n/* harmony export */ \"rollup\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.rollup),\n/* harmony export */ \"rollups\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.rollups),\n/* harmony export */ \"scaleBand\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleBand),\n/* harmony export */ \"scaleDiverging\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleDiverging),\n/* harmony export */ \"scaleDivergingLog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleDivergingLog),\n/* harmony export */ \"scaleDivergingPow\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleDivergingPow),\n/* harmony export */ \"scaleDivergingSqrt\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleDivergingSqrt),\n/* harmony export */ \"scaleDivergingSymlog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleDivergingSymlog),\n/* harmony export */ \"scaleIdentity\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleIdentity),\n/* harmony export */ \"scaleImplicit\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleImplicit),\n/* harmony export */ \"scaleLinear\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleLinear),\n/* harmony export */ \"scaleLog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleLog),\n/* harmony export */ \"scaleOrdinal\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleOrdinal),\n/* harmony export */ \"scalePoint\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scalePoint),\n/* harmony export */ \"scalePow\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scalePow),\n/* harmony export */ \"scaleQuantile\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleQuantile),\n/* harmony export */ \"scaleQuantize\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleQuantize),\n/* harmony export */ \"scaleRadial\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleRadial),\n/* harmony export */ \"scaleSequential\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequential),\n/* harmony export */ \"scaleSequentialLog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequentialLog),\n/* harmony export */ \"scaleSequentialPow\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequentialPow),\n/* harmony export */ \"scaleSequentialQuantile\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequentialQuantile),\n/* harmony export */ \"scaleSequentialSqrt\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequentialSqrt),\n/* harmony export */ \"scaleSequentialSymlog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSequentialSymlog),\n/* harmony export */ \"scaleSqrt\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSqrt),\n/* harmony export */ \"scaleSymlog\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleSymlog),\n/* harmony export */ \"scaleThreshold\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleThreshold),\n/* harmony export */ \"scaleTime\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleTime),\n/* harmony export */ \"scaleUtc\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.scaleUtc),\n/* harmony export */ \"scan\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.scan),\n/* harmony export */ \"schemeAccent\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeAccent),\n/* harmony export */ \"schemeBlues\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeBlues),\n/* harmony export */ \"schemeBrBG\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeBrBG),\n/* harmony export */ \"schemeBuGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeBuGn),\n/* harmony export */ \"schemeBuPu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeBuPu),\n/* harmony export */ \"schemeCategory10\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeCategory10),\n/* harmony export */ \"schemeDark2\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeDark2),\n/* harmony export */ \"schemeGnBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeGnBu),\n/* harmony export */ \"schemeGreens\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeGreens),\n/* harmony export */ \"schemeGreys\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeGreys),\n/* harmony export */ \"schemeOrRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeOrRd),\n/* harmony export */ \"schemeOranges\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeOranges),\n/* harmony export */ \"schemePRGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePRGn),\n/* harmony export */ \"schemePaired\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePaired),\n/* harmony export */ \"schemePastel1\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePastel1),\n/* harmony export */ \"schemePastel2\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePastel2),\n/* harmony export */ \"schemePiYG\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePiYG),\n/* harmony export */ \"schemePuBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePuBu),\n/* harmony export */ \"schemePuBuGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePuBuGn),\n/* harmony export */ \"schemePuOr\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePuOr),\n/* harmony export */ \"schemePuRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePuRd),\n/* harmony export */ \"schemePurples\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemePurples),\n/* harmony export */ \"schemeRdBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeRdBu),\n/* harmony export */ \"schemeRdGy\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeRdGy),\n/* harmony export */ \"schemeRdPu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeRdPu),\n/* harmony export */ \"schemeRdYlBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeRdYlBu),\n/* harmony export */ \"schemeRdYlGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeRdYlGn),\n/* harmony export */ \"schemeReds\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeReds),\n/* harmony export */ \"schemeSet1\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeSet1),\n/* harmony export */ \"schemeSet2\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeSet2),\n/* harmony export */ \"schemeSet3\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeSet3),\n/* harmony export */ \"schemeSpectral\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeSpectral),\n/* harmony export */ \"schemeTableau10\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeTableau10),\n/* harmony export */ \"schemeYlGn\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeYlGn),\n/* harmony export */ \"schemeYlGnBu\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeYlGnBu),\n/* harmony export */ \"schemeYlOrBr\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeYlOrBr),\n/* harmony export */ \"schemeYlOrRd\": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__.schemeYlOrRd),\n/* harmony export */ \"select\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.select),\n/* harmony export */ \"selectAll\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.selectAll),\n/* harmony export */ \"selection\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.selection),\n/* harmony export */ \"selector\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.selector),\n/* harmony export */ \"selectorAll\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.selectorAll),\n/* harmony export */ \"shuffle\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.shuffle),\n/* harmony export */ \"shuffler\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.shuffler),\n/* harmony export */ \"some\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.some),\n/* harmony export */ \"sort\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.sort),\n/* harmony export */ \"stack\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stack),\n/* harmony export */ \"stackOffsetDiverging\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOffsetDiverging),\n/* harmony export */ \"stackOffsetExpand\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOffsetExpand),\n/* harmony export */ \"stackOffsetNone\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOffsetNone),\n/* harmony export */ \"stackOffsetSilhouette\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOffsetSilhouette),\n/* harmony export */ \"stackOffsetWiggle\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOffsetWiggle),\n/* harmony export */ \"stackOrderAppearance\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderAppearance),\n/* harmony export */ \"stackOrderAscending\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderAscending),\n/* harmony export */ \"stackOrderDescending\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderDescending),\n/* harmony export */ \"stackOrderInsideOut\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderInsideOut),\n/* harmony export */ \"stackOrderNone\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderNone),\n/* harmony export */ \"stackOrderReverse\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.stackOrderReverse),\n/* harmony export */ \"stratify\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.stratify),\n/* harmony export */ \"style\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.style),\n/* harmony export */ \"subset\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.subset),\n/* harmony export */ \"sum\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.sum),\n/* harmony export */ \"superset\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.superset),\n/* harmony export */ \"svg\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.svg),\n/* harmony export */ \"symbol\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbol),\n/* harmony export */ \"symbolAsterisk\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolAsterisk),\n/* harmony export */ \"symbolCircle\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolCircle),\n/* harmony export */ \"symbolCross\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolCross),\n/* harmony export */ \"symbolDiamond\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolDiamond),\n/* harmony export */ \"symbolDiamond2\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolDiamond2),\n/* harmony export */ \"symbolPlus\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolPlus),\n/* harmony export */ \"symbolSquare\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolSquare),\n/* harmony export */ \"symbolSquare2\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolSquare2),\n/* harmony export */ \"symbolStar\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolStar),\n/* harmony export */ \"symbolTimes\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolTimes),\n/* harmony export */ \"symbolTriangle\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolTriangle),\n/* harmony export */ \"symbolTriangle2\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolTriangle2),\n/* harmony export */ \"symbolWye\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolWye),\n/* harmony export */ \"symbolX\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolX),\n/* harmony export */ \"symbols\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbols),\n/* harmony export */ \"symbolsFill\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolsFill),\n/* harmony export */ \"symbolsStroke\": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_24__.symbolsStroke),\n/* harmony export */ \"text\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.text),\n/* harmony export */ \"thresholdFreedmanDiaconis\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.thresholdFreedmanDiaconis),\n/* harmony export */ \"thresholdScott\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.thresholdScott),\n/* harmony export */ \"thresholdSturges\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.thresholdSturges),\n/* harmony export */ \"tickFormat\": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_21__.tickFormat),\n/* harmony export */ \"tickIncrement\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.tickIncrement),\n/* harmony export */ \"tickStep\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep),\n/* harmony export */ \"ticks\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.ticks),\n/* harmony export */ \"timeDay\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeDay),\n/* harmony export */ \"timeDays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeDays),\n/* harmony export */ \"timeFormat\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.timeFormat),\n/* harmony export */ \"timeFormatDefaultLocale\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.timeFormatDefaultLocale),\n/* harmony export */ \"timeFormatLocale\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.timeFormatLocale),\n/* harmony export */ \"timeFriday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeFriday),\n/* harmony export */ \"timeFridays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeFridays),\n/* harmony export */ \"timeHour\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeHour),\n/* harmony export */ \"timeHours\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeHours),\n/* harmony export */ \"timeInterval\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeInterval),\n/* harmony export */ \"timeMillisecond\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMillisecond),\n/* harmony export */ \"timeMilliseconds\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMilliseconds),\n/* harmony export */ \"timeMinute\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMinute),\n/* harmony export */ \"timeMinutes\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMinutes),\n/* harmony export */ \"timeMonday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMonday),\n/* harmony export */ \"timeMondays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMondays),\n/* harmony export */ \"timeMonth\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMonth),\n/* harmony export */ \"timeMonths\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeMonths),\n/* harmony export */ \"timeParse\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.timeParse),\n/* harmony export */ \"timeSaturday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSaturday),\n/* harmony export */ \"timeSaturdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSaturdays),\n/* harmony export */ \"timeSecond\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSecond),\n/* harmony export */ \"timeSeconds\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSeconds),\n/* harmony export */ \"timeSunday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSunday),\n/* harmony export */ \"timeSundays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeSundays),\n/* harmony export */ \"timeThursday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeThursday),\n/* harmony export */ \"timeThursdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeThursdays),\n/* harmony export */ \"timeTickInterval\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeTickInterval),\n/* harmony export */ \"timeTicks\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeTicks),\n/* harmony export */ \"timeTuesday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeTuesday),\n/* harmony export */ \"timeTuesdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeTuesdays),\n/* harmony export */ \"timeWednesday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeWednesday),\n/* harmony export */ \"timeWednesdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeWednesdays),\n/* harmony export */ \"timeWeek\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeWeek),\n/* harmony export */ \"timeWeeks\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeWeeks),\n/* harmony export */ \"timeYear\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeYear),\n/* harmony export */ \"timeYears\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.timeYears),\n/* harmony export */ \"timeout\": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_27__.timeout),\n/* harmony export */ \"timer\": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_27__.timer),\n/* harmony export */ \"timerFlush\": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_27__.timerFlush),\n/* harmony export */ \"transition\": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_28__.transition),\n/* harmony export */ \"transpose\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.transpose),\n/* harmony export */ \"tree\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.tree),\n/* harmony export */ \"treemap\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemap),\n/* harmony export */ \"treemapBinary\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapBinary),\n/* harmony export */ \"treemapDice\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapDice),\n/* harmony export */ \"treemapResquarify\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapResquarify),\n/* harmony export */ \"treemapSlice\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapSlice),\n/* harmony export */ \"treemapSliceDice\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapSliceDice),\n/* harmony export */ \"treemapSquarify\": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__.treemapSquarify),\n/* harmony export */ \"tsv\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.tsv),\n/* harmony export */ \"tsvFormat\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvFormat),\n/* harmony export */ \"tsvFormatBody\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvFormatBody),\n/* harmony export */ \"tsvFormatRow\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvFormatRow),\n/* harmony export */ \"tsvFormatRows\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvFormatRows),\n/* harmony export */ \"tsvFormatValue\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvFormatValue),\n/* harmony export */ \"tsvParse\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvParse),\n/* harmony export */ \"tsvParseRows\": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_9__.tsvParseRows),\n/* harmony export */ \"union\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.union),\n/* harmony export */ \"unixDay\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.unixDay),\n/* harmony export */ \"unixDays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.unixDays),\n/* harmony export */ \"utcDay\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcDay),\n/* harmony export */ \"utcDays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcDays),\n/* harmony export */ \"utcFormat\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.utcFormat),\n/* harmony export */ \"utcFriday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcFriday),\n/* harmony export */ \"utcFridays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcFridays),\n/* harmony export */ \"utcHour\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcHour),\n/* harmony export */ \"utcHours\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcHours),\n/* harmony export */ \"utcMillisecond\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMillisecond),\n/* harmony export */ \"utcMilliseconds\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMilliseconds),\n/* harmony export */ \"utcMinute\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMinute),\n/* harmony export */ \"utcMinutes\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMinutes),\n/* harmony export */ \"utcMonday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMonday),\n/* harmony export */ \"utcMondays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMondays),\n/* harmony export */ \"utcMonth\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMonth),\n/* harmony export */ \"utcMonths\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcMonths),\n/* harmony export */ \"utcParse\": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_26__.utcParse),\n/* harmony export */ \"utcSaturday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSaturday),\n/* harmony export */ \"utcSaturdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSaturdays),\n/* harmony export */ \"utcSecond\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSecond),\n/* harmony export */ \"utcSeconds\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSeconds),\n/* harmony export */ \"utcSunday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSunday),\n/* harmony export */ \"utcSundays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcSundays),\n/* harmony export */ \"utcThursday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcThursday),\n/* harmony export */ \"utcThursdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcThursdays),\n/* harmony export */ \"utcTickInterval\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcTickInterval),\n/* harmony export */ \"utcTicks\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcTicks),\n/* harmony export */ \"utcTuesday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcTuesday),\n/* harmony export */ \"utcTuesdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcTuesdays),\n/* harmony export */ \"utcWednesday\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcWednesday),\n/* harmony export */ \"utcWednesdays\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcWednesdays),\n/* harmony export */ \"utcWeek\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcWeek),\n/* harmony export */ \"utcWeeks\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcWeeks),\n/* harmony export */ \"utcYear\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcYear),\n/* harmony export */ \"utcYears\": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_25__.utcYears),\n/* harmony export */ \"variance\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.variance),\n/* harmony export */ \"window\": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_23__.window),\n/* harmony export */ \"xml\": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_11__.xml),\n/* harmony export */ \"zip\": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_0__.zip),\n/* harmony export */ \"zoom\": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_29__.zoom),\n/* harmony export */ \"zoomIdentity\": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_29__.zoomIdentity),\n/* harmony export */ \"zoomTransform\": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_29__.zoomTransform)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ \"../../../node_modules/d3-array/src/index.js\");\n/* harmony import */ var d3_axis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-axis */ \"../../../node_modules/d3-axis/src/index.js\");\n/* harmony import */ var d3_brush__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-brush */ \"../../../node_modules/d3-brush/src/index.js\");\n/* harmony import */ var d3_chord__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-chord */ \"../../../node_modules/d3-chord/src/index.js\");\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-color */ \"../../../node_modules/d3-color/src/index.js\");\n/* harmony import */ var d3_contour__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-contour */ \"../../../node_modules/d3-contour/src/index.js\");\n/* harmony import */ var d3_delaunay__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-delaunay */ \"../../../node_modules/d3-delaunay/src/index.js\");\n/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-dispatch */ \"../../../node_modules/d3-dispatch/src/index.js\");\n/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-drag */ \"../../../node_modules/d3-drag/src/index.js\");\n/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-dsv */ \"../../../node_modules/d3-dsv/src/index.js\");\n/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-ease */ \"../../../node_modules/d3-ease/src/index.js\");\n/* harmony import */ var d3_fetch__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-fetch */ \"../../../node_modules/d3-fetch/src/index.js\");\n/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! d3-force */ \"../../../node_modules/d3-force/src/index.js\");\n/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! d3-format */ \"../../../node_modules/d3-format/src/index.js\");\n/* harmony import */ var d3_geo__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! d3-geo */ \"../../../node_modules/d3-geo/src/index.js\");\n/* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! d3-hierarchy */ \"../../../node_modules/d3-hierarchy/src/index.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! d3-interpolate */ \"../../../node_modules/d3-interpolate/src/index.js\");\n/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! d3-path */ \"../../../node_modules/d3-path/src/index.js\");\n/* harmony import */ var d3_polygon__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! d3-polygon */ \"../../../node_modules/d3-polygon/src/index.js\");\n/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! d3-quadtree */ \"../../../node_modules/d3-quadtree/src/index.js\");\n/* harmony import */ var d3_random__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! d3-random */ \"../../../node_modules/d3-random/src/index.js\");\n/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! d3-scale */ \"../../../node_modules/d3-scale/src/index.js\");\n/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! d3-scale-chromatic */ \"../../../node_modules/d3-scale-chromatic/src/index.js\");\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! d3-selection */ \"../../../node_modules/d3-selection/src/index.js\");\n/* harmony import */ var d3_shape__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! d3-shape */ \"../../../node_modules/d3-shape/src/index.js\");\n/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! d3-time */ \"../../../node_modules/d3-time/src/index.js\");\n/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! d3-time-format */ \"../../../node_modules/d3-time-format/src/index.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! d3-timer */ \"../../../node_modules/d3-timer/src/index.js\");\n/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! d3-transition */ \"../../../node_modules/d3-transition/src/index.js\");\n/* harmony import */ var d3_zoom__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! d3-zoom */ \"../../../node_modules/d3-zoom/src/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUI7QUFDRDtBQUNDO0FBQ0E7QUFDQTtBQUNFO0FBQ0M7QUFDQTtBQUNKO0FBQ0Q7QUFDQztBQUNDO0FBQ0E7QUFDQztBQUNIO0FBQ007QUFDRTtBQUNQO0FBQ0c7QUFDQztBQUNGO0FBQ0Q7QUFDVTtBQUNOO0FBQ0o7QUFDRDtBQUNPO0FBQ047QUFDSztBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy9zcmMvaW5kZXguanM/MjQwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiZDMtYXJyYXlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1heGlzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYnJ1c2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jaG9yZFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29udG91clwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRlbGF1bmF5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kcmFnXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHN2XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZWFzZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZldGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9yY2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1nZW9cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBhdGhcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wb2x5Z29uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1yYW5kb21cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNoYXBlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtem9vbVwiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/d3/src/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/arrows.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/arrows.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"arrows\": () => (/* binding */ arrows),\n/* harmony export */ \"setArrows\": () => (/* binding */ setArrows)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\nvar arrows = {\n normal,\n vee,\n undirected,\n};\n\nfunction setArrows(value) {\n arrows = value;\n}\n\nfunction normal(parent, id, edge, type) {\n var marker = parent\n .append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto');\n\n var path = marker\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(path, edge[type + 'Style']);\n if (edge[type + 'Class']) {\n path.attr('class', edge[type + 'Class']);\n }\n}\n\nfunction vee(parent, id, edge, type) {\n var marker = parent\n .append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto');\n\n var path = marker\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(path, edge[type + 'Style']);\n if (edge[type + 'Class']) {\n path.attr('class', edge[type + 'Class']);\n }\n}\n\nfunction undirected(parent, id, edge, type) {\n var marker = parent\n .append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto');\n\n var path = marker\n .append('path')\n .attr('d', 'M 0 5 L 10 5')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(path, edge[type + 'Style']);\n if (edge[type + 'Class']) {\n path.attr('class', edge[type + 'Class']);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9hcnJvd3MuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtDOztBQUVMOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdEQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZ0RBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnREFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2Fycm93cy5qcz9kMTJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgYXJyb3dzLCBzZXRBcnJvd3MgfTtcblxudmFyIGFycm93cyA9IHtcbiAgbm9ybWFsLFxuICB2ZWUsXG4gIHVuZGlyZWN0ZWQsXG59O1xuXG5mdW5jdGlvbiBzZXRBcnJvd3ModmFsdWUpIHtcbiAgYXJyb3dzID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbChwYXJlbnQsIGlkLCBlZGdlLCB0eXBlKSB7XG4gIHZhciBtYXJrZXIgPSBwYXJlbnRcbiAgICAuYXBwZW5kKCdtYXJrZXInKVxuICAgIC5hdHRyKCdpZCcsIGlkKVxuICAgIC5hdHRyKCd2aWV3Qm94JywgJzAgMCAxMCAxMCcpXG4gICAgLmF0dHIoJ3JlZlgnLCA5KVxuICAgIC5hdHRyKCdyZWZZJywgNSlcbiAgICAuYXR0cignbWFya2VyVW5pdHMnLCAnc3Ryb2tlV2lkdGgnKVxuICAgIC5hdHRyKCdtYXJrZXJXaWR0aCcsIDgpXG4gICAgLmF0dHIoJ21hcmtlckhlaWdodCcsIDYpXG4gICAgLmF0dHIoJ29yaWVudCcsICdhdXRvJyk7XG5cbiAgdmFyIHBhdGggPSBtYXJrZXJcbiAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAuYXR0cignZCcsICdNIDAgMCBMIDEwIDUgTCAwIDEwIHonKVxuICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgMSlcbiAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMSwwJyk7XG4gIHV0aWwuYXBwbHlTdHlsZShwYXRoLCBlZGdlW3R5cGUgKyAnU3R5bGUnXSk7XG4gIGlmIChlZGdlW3R5cGUgKyAnQ2xhc3MnXSkge1xuICAgIHBhdGguYXR0cignY2xhc3MnLCBlZGdlW3R5cGUgKyAnQ2xhc3MnXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmVlKHBhcmVudCwgaWQsIGVkZ2UsIHR5cGUpIHtcbiAgdmFyIG1hcmtlciA9IHBhcmVudFxuICAgIC5hcHBlbmQoJ21hcmtlcicpXG4gICAgLmF0dHIoJ2lkJywgaWQpXG4gICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAwIDEwIDEwJylcbiAgICAuYXR0cigncmVmWCcsIDkpXG4gICAgLmF0dHIoJ3JlZlknLCA1KVxuICAgIC5hdHRyKCdtYXJrZXJVbml0cycsICdzdHJva2VXaWR0aCcpXG4gICAgLmF0dHIoJ21hcmtlcldpZHRoJywgOClcbiAgICAuYXR0cignbWFya2VySGVpZ2h0JywgNilcbiAgICAuYXR0cignb3JpZW50JywgJ2F1dG8nKTtcblxuICB2YXIgcGF0aCA9IG1hcmtlclxuICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgIC5hdHRyKCdkJywgJ00gMCAwIEwgMTAgNSBMIDAgMTAgTCA0IDUgeicpXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICcxLDAnKTtcbiAgdXRpbC5hcHBseVN0eWxlKHBhdGgsIGVkZ2VbdHlwZSArICdTdHlsZSddKTtcbiAgaWYgKGVkZ2VbdHlwZSArICdDbGFzcyddKSB7XG4gICAgcGF0aC5hdHRyKCdjbGFzcycsIGVkZ2VbdHlwZSArICdDbGFzcyddKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmRpcmVjdGVkKHBhcmVudCwgaWQsIGVkZ2UsIHR5cGUpIHtcbiAgdmFyIG1hcmtlciA9IHBhcmVudFxuICAgIC5hcHBlbmQoJ21hcmtlcicpXG4gICAgLmF0dHIoJ2lkJywgaWQpXG4gICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAwIDEwIDEwJylcbiAgICAuYXR0cigncmVmWCcsIDkpXG4gICAgLmF0dHIoJ3JlZlknLCA1KVxuICAgIC5hdHRyKCdtYXJrZXJVbml0cycsICdzdHJva2VXaWR0aCcpXG4gICAgLmF0dHIoJ21hcmtlcldpZHRoJywgOClcbiAgICAuYXR0cignbWFya2VySGVpZ2h0JywgNilcbiAgICAuYXR0cignb3JpZW50JywgJ2F1dG8nKTtcblxuICB2YXIgcGF0aCA9IG1hcmtlclxuICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgIC5hdHRyKCdkJywgJ00gMCA1IEwgMTAgNScpXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICcxLDAnKTtcbiAgdXRpbC5hcHBseVN0eWxlKHBhdGgsIGVkZ2VbdHlwZSArICdTdHlsZSddKTtcbiAgaWYgKGVkZ2VbdHlwZSArICdDbGFzcyddKSB7XG4gICAgcGF0aC5hdHRyKCdjbGFzcycsIGVkZ2VbdHlwZSArICdDbGFzcyddKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/arrows.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/create-clusters.js": /*!*************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/create-clusters.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createClusters\": () => (/* binding */ createClusters),\n/* harmony export */ \"setCreateClusters\": () => (/* binding */ setCreateClusters)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _label_add_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./label/add-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\n\nvar createClusters = function (selection, g) {\n var clusters = g.nodes().filter(function (v) {\n return _util_js__WEBPACK_IMPORTED_MODULE_2__.isSubgraph(g, v);\n });\n var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) {\n return v;\n });\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(svgClusters.exit(), g).style('opacity', 0).remove();\n\n var enterSelection = svgClusters\n .enter()\n .append('g')\n .attr('class', 'cluster')\n .attr('id', function (v) {\n var node = g.node(v);\n return node.id;\n })\n .style('opacity', 0)\n .each(function (v) {\n var node = g.node(v);\n var thisGroup = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n d3__WEBPACK_IMPORTED_MODULE_0__.select(this).append('rect');\n var labelGroup = thisGroup.append('g').attr('class', 'label');\n (0,_label_add_label_js__WEBPACK_IMPORTED_MODULE_1__.addLabel)(labelGroup, node, node.clusterLabelPos);\n });\n\n svgClusters = svgClusters.merge(enterSelection);\n\n svgClusters = _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(svgClusters, g).style('opacity', 1);\n\n svgClusters.selectAll('rect').each(function (c) {\n var node = g.node(c);\n var domCluster = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyStyle(domCluster, node.style);\n });\n\n return svgClusters;\n};\n\nfunction setCreateClusters(value) {\n createClusters = value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9jcmVhdGUtY2x1c3RlcnMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBeUI7QUFDdUI7QUFDZDs7QUFFVzs7QUFFN0M7QUFDQTtBQUNBLFdBQVcsZ0RBQWU7QUFDMUIsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUscURBQW9COztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0NBQVM7QUFDL0IsTUFBTSxzQ0FBUztBQUNmO0FBQ0EsTUFBTSw2REFBUTtBQUNkLEtBQUs7O0FBRUw7O0FBRUEsZ0JBQWdCLHFEQUFvQjs7QUFFcEM7QUFDQTtBQUNBLHFCQUFxQixzQ0FBUztBQUM5QixJQUFJLGdEQUFlO0FBQ25CLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9jcmVhdGUtY2x1c3RlcnMuanM/YjhiNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBhZGRMYWJlbCB9IGZyb20gJy4vbGFiZWwvYWRkLWxhYmVsLmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgY3JlYXRlQ2x1c3RlcnMsIHNldENyZWF0ZUNsdXN0ZXJzIH07XG5cbnZhciBjcmVhdGVDbHVzdGVycyA9IGZ1bmN0aW9uIChzZWxlY3Rpb24sIGcpIHtcbiAgdmFyIGNsdXN0ZXJzID0gZy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB1dGlsLmlzU3ViZ3JhcGgoZywgdik7XG4gIH0pO1xuICB2YXIgc3ZnQ2x1c3RlcnMgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKCdnLmNsdXN0ZXInKS5kYXRhKGNsdXN0ZXJzLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2O1xuICB9KTtcblxuICB1dGlsLmFwcGx5VHJhbnNpdGlvbihzdmdDbHVzdGVycy5leGl0KCksIGcpLnN0eWxlKCdvcGFjaXR5JywgMCkucmVtb3ZlKCk7XG5cbiAgdmFyIGVudGVyU2VsZWN0aW9uID0gc3ZnQ2x1c3RlcnNcbiAgICAuZW50ZXIoKVxuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5hdHRyKCdjbGFzcycsICdjbHVzdGVyJylcbiAgICAuYXR0cignaWQnLCBmdW5jdGlvbiAodikge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgICByZXR1cm4gbm9kZS5pZDtcbiAgICB9KVxuICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgLmVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgICAgdmFyIHRoaXNHcm91cCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgIGQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoJ3JlY3QnKTtcbiAgICAgIHZhciBsYWJlbEdyb3VwID0gdGhpc0dyb3VwLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2xhYmVsJyk7XG4gICAgICBhZGRMYWJlbChsYWJlbEdyb3VwLCBub2RlLCBub2RlLmNsdXN0ZXJMYWJlbFBvcyk7XG4gICAgfSk7XG5cbiAgc3ZnQ2x1c3RlcnMgPSBzdmdDbHVzdGVycy5tZXJnZShlbnRlclNlbGVjdGlvbik7XG5cbiAgc3ZnQ2x1c3RlcnMgPSB1dGlsLmFwcGx5VHJhbnNpdGlvbihzdmdDbHVzdGVycywgZykuc3R5bGUoJ29wYWNpdHknLCAxKTtcblxuICBzdmdDbHVzdGVycy5zZWxlY3RBbGwoJ3JlY3QnKS5lYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUoYyk7XG4gICAgdmFyIGRvbUNsdXN0ZXIgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgdXRpbC5hcHBseVN0eWxlKGRvbUNsdXN0ZXIsIG5vZGUuc3R5bGUpO1xuICB9KTtcblxuICByZXR1cm4gc3ZnQ2x1c3RlcnM7XG59O1xuXG5mdW5jdGlvbiBzZXRDcmVhdGVDbHVzdGVycyh2YWx1ZSkge1xuICBjcmVhdGVDbHVzdGVycyA9IHZhbHVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/create-clusters.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js": /*!****************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createEdgeLabels\": () => (/* binding */ createEdgeLabels),\n/* harmony export */ \"setCreateEdgeLabels\": () => (/* binding */ setCreateEdgeLabels)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _label_add_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./label/add-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\n\n\nlet createEdgeLabels = function (selection, g) {\n var svgEdgeLabels = selection\n .selectAll('g.edgeLabel')\n .data(g.edges(), function (e) {\n return _util_js__WEBPACK_IMPORTED_MODULE_2__.edgeToId(e);\n })\n .classed('update', true);\n\n svgEdgeLabels.exit().remove();\n svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0);\n\n svgEdgeLabels = selection.selectAll('g.edgeLabel');\n\n svgEdgeLabels.each(function (e) {\n var root = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n root.select('.label').remove();\n var edge = g.edge(e);\n var label = (0,_label_add_label_js__WEBPACK_IMPORTED_MODULE_1__.addLabel)(root, g.edge(e), 0).classed('label', true);\n var bbox = label.node().getBBox();\n\n if (edge.labelId) {\n label.attr('id', edge.labelId);\n }\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](edge, 'width')) {\n edge.width = bbox.width;\n }\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](edge, 'height')) {\n edge.height = bbox.height;\n }\n });\n\n var exitSelection;\n\n if (svgEdgeLabels.exit) {\n exitSelection = svgEdgeLabels.exit();\n } else {\n exitSelection = svgEdgeLabels.selectAll(null); // empty selection\n }\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(exitSelection, g).style('opacity', 0).remove();\n\n return svgEdgeLabels;\n};\n\nfunction setCreateEdgeLabels(value) {\n createEdgeLabels = value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9jcmVhdGUtZWRnZS1sYWJlbHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlCO0FBQ007QUFDaUI7QUFDZDs7QUFFZTs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhDQUFhO0FBQzFCLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZUFBZSxzQ0FBUztBQUN4QjtBQUNBO0FBQ0EsZ0JBQWdCLDZEQUFRO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osbURBQW1EO0FBQ25EOztBQUVBLEVBQUUscURBQW9COztBQUV0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2NyZWF0ZS1lZGdlLWxhYmVscy5qcz8yNGI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGFkZExhYmVsIH0gZnJvbSAnLi9sYWJlbC9hZGQtbGFiZWwuanMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBjcmVhdGVFZGdlTGFiZWxzLCBzZXRDcmVhdGVFZGdlTGFiZWxzIH07XG5cbmxldCBjcmVhdGVFZGdlTGFiZWxzID0gZnVuY3Rpb24gKHNlbGVjdGlvbiwgZykge1xuICB2YXIgc3ZnRWRnZUxhYmVscyA9IHNlbGVjdGlvblxuICAgIC5zZWxlY3RBbGwoJ2cuZWRnZUxhYmVsJylcbiAgICAuZGF0YShnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gdXRpbC5lZGdlVG9JZChlKTtcbiAgICB9KVxuICAgIC5jbGFzc2VkKCd1cGRhdGUnLCB0cnVlKTtcblxuICBzdmdFZGdlTGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcbiAgc3ZnRWRnZUxhYmVscy5lbnRlcigpLmFwcGVuZCgnZycpLmNsYXNzZWQoJ2VkZ2VMYWJlbCcsIHRydWUpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG5cbiAgc3ZnRWRnZUxhYmVscyA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoJ2cuZWRnZUxhYmVsJyk7XG5cbiAgc3ZnRWRnZUxhYmVscy5lYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHJvb3QgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgcm9vdC5zZWxlY3QoJy5sYWJlbCcpLnJlbW92ZSgpO1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIHZhciBsYWJlbCA9IGFkZExhYmVsKHJvb3QsIGcuZWRnZShlKSwgMCkuY2xhc3NlZCgnbGFiZWwnLCB0cnVlKTtcbiAgICB2YXIgYmJveCA9IGxhYmVsLm5vZGUoKS5nZXRCQm94KCk7XG5cbiAgICBpZiAoZWRnZS5sYWJlbElkKSB7XG4gICAgICBsYWJlbC5hdHRyKCdpZCcsIGVkZ2UubGFiZWxJZCk7XG4gICAgfVxuICAgIGlmICghXy5oYXMoZWRnZSwgJ3dpZHRoJykpIHtcbiAgICAgIGVkZ2Uud2lkdGggPSBiYm94LndpZHRoO1xuICAgIH1cbiAgICBpZiAoIV8uaGFzKGVkZ2UsICdoZWlnaHQnKSkge1xuICAgICAgZWRnZS5oZWlnaHQgPSBiYm94LmhlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBleGl0U2VsZWN0aW9uO1xuXG4gIGlmIChzdmdFZGdlTGFiZWxzLmV4aXQpIHtcbiAgICBleGl0U2VsZWN0aW9uID0gc3ZnRWRnZUxhYmVscy5leGl0KCk7XG4gIH0gZWxzZSB7XG4gICAgZXhpdFNlbGVjdGlvbiA9IHN2Z0VkZ2VMYWJlbHMuc2VsZWN0QWxsKG51bGwpOyAvLyBlbXB0eSBzZWxlY3Rpb25cbiAgfVxuXG4gIHV0aWwuYXBwbHlUcmFuc2l0aW9uKGV4aXRTZWxlY3Rpb24sIGcpLnN0eWxlKCdvcGFjaXR5JywgMCkucmVtb3ZlKCk7XG5cbiAgcmV0dXJuIHN2Z0VkZ2VMYWJlbHM7XG59O1xuXG5mdW5jdGlvbiBzZXRDcmVhdGVFZGdlTGFiZWxzKHZhbHVlKSB7XG4gIGNyZWF0ZUVkZ2VMYWJlbHMgPSB2YWx1ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js": /*!***************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createEdgePaths\": () => (/* binding */ createEdgePaths),\n/* harmony export */ \"setCreateEdgePaths\": () => (/* binding */ setCreateEdgePaths)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/uniqueId.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var _intersect_intersect_node_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intersect/intersect-node.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\n\n\nvar createEdgePaths = function (selection, g, arrows) {\n var previousPaths = selection\n .selectAll('g.edgePath')\n .data(g.edges(), function (e) {\n return _util_js__WEBPACK_IMPORTED_MODULE_2__.edgeToId(e);\n })\n .classed('update', true);\n\n var newPaths = enter(previousPaths, g);\n exit(previousPaths, g);\n\n var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths;\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(svgPaths, g).style('opacity', 1);\n\n // Save DOM element in the path group, and set ID and class\n svgPaths.each(function (e) {\n var domEdge = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n var edge = g.edge(e);\n edge.elem = this;\n\n if (edge.id) {\n domEdge.attr('id', edge.id);\n }\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyClass(\n domEdge,\n edge['class'],\n (domEdge.classed('update') ? 'update ' : '') + 'edgePath'\n );\n });\n\n svgPaths.selectAll('path.path').each(function (e) {\n var edge = g.edge(e);\n edge.arrowheadId = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('arrowhead');\n\n var domEdge = d3__WEBPACK_IMPORTED_MODULE_0__.select(this)\n .attr('marker-end', function () {\n return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')';\n })\n .style('fill', 'none');\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(domEdge, g).attr('d', function (e) {\n return calcPoints(g, e);\n });\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyStyle(domEdge, edge.style);\n });\n\n svgPaths.selectAll('defs *').remove();\n svgPaths.selectAll('defs').each(function (e) {\n var edge = g.edge(e);\n var arrowhead = arrows[edge.arrowhead];\n arrowhead(d3__WEBPACK_IMPORTED_MODULE_0__.select(this), edge.arrowheadId, edge, 'arrowhead');\n });\n\n return svgPaths;\n};\n\nfunction setCreateEdgePaths(value) {\n createEdgePaths = value;\n}\n\nfunction makeFragmentRef(url, fragmentId) {\n var baseUrl = url.split('#')[0];\n return baseUrl + '#' + fragmentId;\n}\n\nfunction calcPoints(g, e) {\n var edge = g.edge(e);\n var tail = g.node(e.v);\n var head = g.node(e.w);\n var points = edge.points.slice(1, edge.points.length - 1);\n points.unshift((0,_intersect_intersect_node_js__WEBPACK_IMPORTED_MODULE_1__.intersectNode)(tail, points[0]));\n points.push((0,_intersect_intersect_node_js__WEBPACK_IMPORTED_MODULE_1__.intersectNode)(head, points[points.length - 1]));\n\n return createLine(edge, points);\n}\n\nfunction createLine(edge, points) {\n // @ts-expect-error\n var line = (d3__WEBPACK_IMPORTED_MODULE_0__.line || d3__WEBPACK_IMPORTED_MODULE_0__.svg.line)()\n .x(function (d) {\n return d.x;\n })\n .y(function (d) {\n return d.y;\n });\n\n (line.curve || line.interpolate)(edge.curve);\n\n return line(points);\n}\n\nfunction getCoords(elem) {\n var bbox = elem.getBBox();\n var matrix = elem.ownerSVGElement\n .getScreenCTM()\n .inverse()\n .multiply(elem.getScreenCTM())\n .translate(bbox.width / 2, bbox.height / 2);\n return { x: matrix.e, y: matrix.f };\n}\n\nfunction enter(svgPaths, g) {\n var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0);\n svgPathsEnter\n .append('path')\n .attr('class', 'path')\n .attr('d', function (e) {\n var edge = g.edge(e);\n var sourceElem = g.node(e.v).elem;\n var points = lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](edge.points.length).map(function () {\n return getCoords(sourceElem);\n });\n return createLine(edge, points);\n });\n svgPathsEnter.append('defs');\n return svgPathsEnter;\n}\n\nfunction exit(svgPaths, g) {\n var svgPathExit = svgPaths.exit();\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(svgPathExit, g).style('opacity', 0).remove();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9jcmVhdGUtZWRnZS1wYXRocy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXlCO0FBQ007QUFDK0I7QUFDNUI7O0FBRWE7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4Q0FBYTtBQUMxQixLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUUscURBQW9COztBQUV0QjtBQUNBO0FBQ0Esa0JBQWtCLHNDQUFTO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLElBQUksZ0RBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSx1QkFBdUIsaURBQVU7O0FBRWpDLGtCQUFrQixzQ0FDTDtBQUNiO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsSUFBSSxxREFBb0I7QUFDeEI7QUFDQSxLQUFLOztBQUVMLElBQUksZ0RBQWU7QUFDbkIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsc0NBQVM7QUFDdkIsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDJFQUFhO0FBQzlCLGNBQWMsMkVBQWE7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsb0NBQU8sSUFBSSx3Q0FBVztBQUNwQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpREFBTztBQUMxQjtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUUscURBQW9CO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvY3JlYXRlLWVkZ2UtcGF0aHMuanM/ZGIxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBpbnRlcnNlY3ROb2RlIH0gZnJvbSAnLi9pbnRlcnNlY3QvaW50ZXJzZWN0LW5vZGUuanMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBjcmVhdGVFZGdlUGF0aHMsIHNldENyZWF0ZUVkZ2VQYXRocyB9O1xuXG52YXIgY3JlYXRlRWRnZVBhdGhzID0gZnVuY3Rpb24gKHNlbGVjdGlvbiwgZywgYXJyb3dzKSB7XG4gIHZhciBwcmV2aW91c1BhdGhzID0gc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbCgnZy5lZGdlUGF0aCcpXG4gICAgLmRhdGEoZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHV0aWwuZWRnZVRvSWQoZSk7XG4gICAgfSlcbiAgICAuY2xhc3NlZCgndXBkYXRlJywgdHJ1ZSk7XG5cbiAgdmFyIG5ld1BhdGhzID0gZW50ZXIocHJldmlvdXNQYXRocywgZyk7XG4gIGV4aXQocHJldmlvdXNQYXRocywgZyk7XG5cbiAgdmFyIHN2Z1BhdGhzID0gcHJldmlvdXNQYXRocy5tZXJnZSAhPT0gdW5kZWZpbmVkID8gcHJldmlvdXNQYXRocy5tZXJnZShuZXdQYXRocykgOiBwcmV2aW91c1BhdGhzO1xuICB1dGlsLmFwcGx5VHJhbnNpdGlvbihzdmdQYXRocywgZykuc3R5bGUoJ29wYWNpdHknLCAxKTtcblxuICAvLyBTYXZlIERPTSBlbGVtZW50IGluIHRoZSBwYXRoIGdyb3VwLCBhbmQgc2V0IElEIGFuZCBjbGFzc1xuICBzdmdQYXRocy5lYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGRvbUVkZ2UgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgZWRnZS5lbGVtID0gdGhpcztcblxuICAgIGlmIChlZGdlLmlkKSB7XG4gICAgICBkb21FZGdlLmF0dHIoJ2lkJywgZWRnZS5pZCk7XG4gICAgfVxuXG4gICAgdXRpbC5hcHBseUNsYXNzKFxuICAgICAgZG9tRWRnZSxcbiAgICAgIGVkZ2VbJ2NsYXNzJ10sXG4gICAgICAoZG9tRWRnZS5jbGFzc2VkKCd1cGRhdGUnKSA/ICd1cGRhdGUgJyA6ICcnKSArICdlZGdlUGF0aCdcbiAgICApO1xuICB9KTtcblxuICBzdmdQYXRocy5zZWxlY3RBbGwoJ3BhdGgucGF0aCcpLmVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBlZGdlLmFycm93aGVhZElkID0gXy51bmlxdWVJZCgnYXJyb3doZWFkJyk7XG5cbiAgICB2YXIgZG9tRWRnZSA9IGQzXG4gICAgICAuc2VsZWN0KHRoaXMpXG4gICAgICAuYXR0cignbWFya2VyLWVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICd1cmwoJyArIG1ha2VGcmFnbWVudFJlZihsb2NhdGlvbi5ocmVmLCBlZGdlLmFycm93aGVhZElkKSArICcpJztcbiAgICAgIH0pXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnbm9uZScpO1xuXG4gICAgdXRpbC5hcHBseVRyYW5zaXRpb24oZG9tRWRnZSwgZykuYXR0cignZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gY2FsY1BvaW50cyhnLCBlKTtcbiAgICB9KTtcblxuICAgIHV0aWwuYXBwbHlTdHlsZShkb21FZGdlLCBlZGdlLnN0eWxlKTtcbiAgfSk7XG5cbiAgc3ZnUGF0aHMuc2VsZWN0QWxsKCdkZWZzIConKS5yZW1vdmUoKTtcbiAgc3ZnUGF0aHMuc2VsZWN0QWxsKCdkZWZzJykuZWFjaChmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIHZhciBhcnJvd2hlYWQgPSBhcnJvd3NbZWRnZS5hcnJvd2hlYWRdO1xuICAgIGFycm93aGVhZChkMy5zZWxlY3QodGhpcyksIGVkZ2UuYXJyb3doZWFkSWQsIGVkZ2UsICdhcnJvd2hlYWQnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1BhdGhzO1xufTtcblxuZnVuY3Rpb24gc2V0Q3JlYXRlRWRnZVBhdGhzKHZhbHVlKSB7XG4gIGNyZWF0ZUVkZ2VQYXRocyA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBtYWtlRnJhZ21lbnRSZWYodXJsLCBmcmFnbWVudElkKSB7XG4gIHZhciBiYXNlVXJsID0gdXJsLnNwbGl0KCcjJylbMF07XG4gIHJldHVybiBiYXNlVXJsICsgJyMnICsgZnJhZ21lbnRJZDtcbn1cblxuZnVuY3Rpb24gY2FsY1BvaW50cyhnLCBlKSB7XG4gIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICB2YXIgdGFpbCA9IGcubm9kZShlLnYpO1xuICB2YXIgaGVhZCA9IGcubm9kZShlLncpO1xuICB2YXIgcG9pbnRzID0gZWRnZS5wb2ludHMuc2xpY2UoMSwgZWRnZS5wb2ludHMubGVuZ3RoIC0gMSk7XG4gIHBvaW50cy51bnNoaWZ0KGludGVyc2VjdE5vZGUodGFpbCwgcG9pbnRzWzBdKSk7XG4gIHBvaW50cy5wdXNoKGludGVyc2VjdE5vZGUoaGVhZCwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xuXG4gIHJldHVybiBjcmVhdGVMaW5lKGVkZ2UsIHBvaW50cyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmUoZWRnZSwgcG9pbnRzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgdmFyIGxpbmUgPSAoZDMubGluZSB8fCBkMy5zdmcubGluZSkoKVxuICAgIC54KGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC54O1xuICAgIH0pXG4gICAgLnkoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLnk7XG4gICAgfSk7XG5cbiAgKGxpbmUuY3VydmUgfHwgbGluZS5pbnRlcnBvbGF0ZSkoZWRnZS5jdXJ2ZSk7XG5cbiAgcmV0dXJuIGxpbmUocG9pbnRzKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29vcmRzKGVsZW0pIHtcbiAgdmFyIGJib3ggPSBlbGVtLmdldEJCb3goKTtcbiAgdmFyIG1hdHJpeCA9IGVsZW0ub3duZXJTVkdFbGVtZW50XG4gICAgLmdldFNjcmVlbkNUTSgpXG4gICAgLmludmVyc2UoKVxuICAgIC5tdWx0aXBseShlbGVtLmdldFNjcmVlbkNUTSgpKVxuICAgIC50cmFuc2xhdGUoYmJveC53aWR0aCAvIDIsIGJib3guaGVpZ2h0IC8gMik7XG4gIHJldHVybiB7IHg6IG1hdHJpeC5lLCB5OiBtYXRyaXguZiB9O1xufVxuXG5mdW5jdGlvbiBlbnRlcihzdmdQYXRocywgZykge1xuICB2YXIgc3ZnUGF0aHNFbnRlciA9IHN2Z1BhdGhzLmVudGVyKCkuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnZWRnZVBhdGgnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICBzdmdQYXRoc0VudGVyXG4gICAgLmFwcGVuZCgncGF0aCcpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ3BhdGgnKVxuICAgIC5hdHRyKCdkJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgICAgdmFyIHNvdXJjZUVsZW0gPSBnLm5vZGUoZS52KS5lbGVtO1xuICAgICAgdmFyIHBvaW50cyA9IF8ucmFuZ2UoZWRnZS5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0Q29vcmRzKHNvdXJjZUVsZW0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY3JlYXRlTGluZShlZGdlLCBwb2ludHMpO1xuICAgIH0pO1xuICBzdmdQYXRoc0VudGVyLmFwcGVuZCgnZGVmcycpO1xuICByZXR1cm4gc3ZnUGF0aHNFbnRlcjtcbn1cblxuZnVuY3Rpb24gZXhpdChzdmdQYXRocywgZykge1xuICB2YXIgc3ZnUGF0aEV4aXQgPSBzdmdQYXRocy5leGl0KCk7XG4gIHV0aWwuYXBwbHlUcmFuc2l0aW9uKHN2Z1BhdGhFeGl0LCBnKS5zdHlsZSgnb3BhY2l0eScsIDApLnJlbW92ZSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/create-nodes.js": /*!**********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/create-nodes.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createNodes\": () => (/* binding */ createNodes),\n/* harmony export */ \"setCreateNodes\": () => (/* binding */ setCreateNodes)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/pick.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _label_add_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./label/add-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\n\n\nvar createNodes = function (selection, g, shapes) {\n var simpleNodes = g.nodes().filter(function (v) {\n return !_util_js__WEBPACK_IMPORTED_MODULE_2__.isSubgraph(g, v);\n });\n var svgNodes = selection\n .selectAll('g.node')\n .data(simpleNodes, function (v) {\n return v;\n })\n .classed('update', true);\n\n svgNodes.exit().remove();\n\n svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0);\n\n svgNodes = selection.selectAll('g.node');\n\n svgNodes.each(function (v) {\n var node = g.node(v);\n var thisGroup = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyClass(\n thisGroup,\n node['class'],\n (thisGroup.classed('update') ? 'update ' : '') + 'node'\n );\n\n thisGroup.select('g.label').remove();\n var labelGroup = thisGroup.append('g').attr('class', 'label');\n var labelDom = (0,_label_add_label_js__WEBPACK_IMPORTED_MODULE_1__.addLabel)(labelGroup, node);\n var shape = shapes[node.shape];\n var bbox = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](labelDom.node().getBBox(), 'width', 'height');\n\n node.elem = this;\n\n if (node.id) {\n thisGroup.attr('id', node.id);\n }\n if (node.labelId) {\n labelGroup.attr('id', node.labelId);\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](node, 'width')) {\n bbox.width = node.width;\n }\n if (lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](node, 'height')) {\n bbox.height = node.height;\n }\n\n bbox.width += node.paddingLeft + node.paddingRight;\n bbox.height += node.paddingTop + node.paddingBottom;\n labelGroup.attr(\n 'transform',\n 'translate(' +\n (node.paddingLeft - node.paddingRight) / 2 +\n ',' +\n (node.paddingTop - node.paddingBottom) / 2 +\n ')'\n );\n\n var root = d3__WEBPACK_IMPORTED_MODULE_0__.select(this);\n root.select('.label-container').remove();\n var shapeSvg = shape(root, bbox, node).classed('label-container', true);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyStyle(shapeSvg, node.style);\n\n var shapeBBox = shapeSvg.node().getBBox();\n node.width = shapeBBox.width;\n node.height = shapeBBox.height;\n });\n\n var exitSelection;\n\n if (svgNodes.exit) {\n exitSelection = svgNodes.exit();\n } else {\n exitSelection = svgNodes.selectAll(null); // empty selection\n }\n\n _util_js__WEBPACK_IMPORTED_MODULE_2__.applyTransition(exitSelection, g).style('opacity', 0).remove();\n\n return svgNodes;\n};\n\nfunction setCreateNodes(value) {\n createNodes = value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9jcmVhdGUtbm9kZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF5QjtBQUNNO0FBQ2lCO0FBQ2Q7O0FBRUs7O0FBRXZDO0FBQ0E7QUFDQSxZQUFZLGdEQUFlO0FBQzNCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLHNDQUFTO0FBQzdCLElBQUksZ0RBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiw2REFBUTtBQUMzQjtBQUNBLGVBQWUsaURBQU07O0FBRXJCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTtBQUNBLFFBQVEsaURBQUs7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsc0NBQVM7QUFDeEI7QUFDQTtBQUNBLElBQUksZ0RBQWU7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSiw4Q0FBOEM7QUFDOUM7O0FBRUEsRUFBRSxxREFBb0I7O0FBRXRCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvY3JlYXRlLW5vZGVzLmpzPzhkM2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgYWRkTGFiZWwgfSBmcm9tICcuL2xhYmVsL2FkZC1sYWJlbC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IGNyZWF0ZU5vZGVzLCBzZXRDcmVhdGVOb2RlcyB9O1xuXG52YXIgY3JlYXRlTm9kZXMgPSBmdW5jdGlvbiAoc2VsZWN0aW9uLCBnLCBzaGFwZXMpIHtcbiAgdmFyIHNpbXBsZU5vZGVzID0gZy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgIHJldHVybiAhdXRpbC5pc1N1YmdyYXBoKGcsIHYpO1xuICB9KTtcbiAgdmFyIHN2Z05vZGVzID0gc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbCgnZy5ub2RlJylcbiAgICAuZGF0YShzaW1wbGVOb2RlcywgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pXG4gICAgLmNsYXNzZWQoJ3VwZGF0ZScsIHRydWUpO1xuXG4gIHN2Z05vZGVzLmV4aXQoKS5yZW1vdmUoKTtcblxuICBzdmdOb2Rlcy5lbnRlcigpLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ25vZGUnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuXG4gIHN2Z05vZGVzID0gc2VsZWN0aW9uLnNlbGVjdEFsbCgnZy5ub2RlJyk7XG5cbiAgc3ZnTm9kZXMuZWFjaChmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIHZhciB0aGlzR3JvdXAgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgdXRpbC5hcHBseUNsYXNzKFxuICAgICAgdGhpc0dyb3VwLFxuICAgICAgbm9kZVsnY2xhc3MnXSxcbiAgICAgICh0aGlzR3JvdXAuY2xhc3NlZCgndXBkYXRlJykgPyAndXBkYXRlICcgOiAnJykgKyAnbm9kZSdcbiAgICApO1xuXG4gICAgdGhpc0dyb3VwLnNlbGVjdCgnZy5sYWJlbCcpLnJlbW92ZSgpO1xuICAgIHZhciBsYWJlbEdyb3VwID0gdGhpc0dyb3VwLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2xhYmVsJyk7XG4gICAgdmFyIGxhYmVsRG9tID0gYWRkTGFiZWwobGFiZWxHcm91cCwgbm9kZSk7XG4gICAgdmFyIHNoYXBlID0gc2hhcGVzW25vZGUuc2hhcGVdO1xuICAgIHZhciBiYm94ID0gXy5waWNrKGxhYmVsRG9tLm5vZGUoKS5nZXRCQm94KCksICd3aWR0aCcsICdoZWlnaHQnKTtcblxuICAgIG5vZGUuZWxlbSA9IHRoaXM7XG5cbiAgICBpZiAobm9kZS5pZCkge1xuICAgICAgdGhpc0dyb3VwLmF0dHIoJ2lkJywgbm9kZS5pZCk7XG4gICAgfVxuICAgIGlmIChub2RlLmxhYmVsSWQpIHtcbiAgICAgIGxhYmVsR3JvdXAuYXR0cignaWQnLCBub2RlLmxhYmVsSWQpO1xuICAgIH1cblxuICAgIGlmIChfLmhhcyhub2RlLCAnd2lkdGgnKSkge1xuICAgICAgYmJveC53aWR0aCA9IG5vZGUud2lkdGg7XG4gICAgfVxuICAgIGlmIChfLmhhcyhub2RlLCAnaGVpZ2h0JykpIHtcbiAgICAgIGJib3guaGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgYmJveC53aWR0aCArPSBub2RlLnBhZGRpbmdMZWZ0ICsgbm9kZS5wYWRkaW5nUmlnaHQ7XG4gICAgYmJveC5oZWlnaHQgKz0gbm9kZS5wYWRkaW5nVG9wICsgbm9kZS5wYWRkaW5nQm90dG9tO1xuICAgIGxhYmVsR3JvdXAuYXR0cihcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgJ3RyYW5zbGF0ZSgnICtcbiAgICAgICAgKG5vZGUucGFkZGluZ0xlZnQgLSBub2RlLnBhZGRpbmdSaWdodCkgLyAyICtcbiAgICAgICAgJywnICtcbiAgICAgICAgKG5vZGUucGFkZGluZ1RvcCAtIG5vZGUucGFkZGluZ0JvdHRvbSkgLyAyICtcbiAgICAgICAgJyknXG4gICAgKTtcblxuICAgIHZhciByb290ID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgIHJvb3Quc2VsZWN0KCcubGFiZWwtY29udGFpbmVyJykucmVtb3ZlKCk7XG4gICAgdmFyIHNoYXBlU3ZnID0gc2hhcGUocm9vdCwgYmJveCwgbm9kZSkuY2xhc3NlZCgnbGFiZWwtY29udGFpbmVyJywgdHJ1ZSk7XG4gICAgdXRpbC5hcHBseVN0eWxlKHNoYXBlU3ZnLCBub2RlLnN0eWxlKTtcblxuICAgIHZhciBzaGFwZUJCb3ggPSBzaGFwZVN2Zy5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIG5vZGUud2lkdGggPSBzaGFwZUJCb3gud2lkdGg7XG4gICAgbm9kZS5oZWlnaHQgPSBzaGFwZUJCb3guaGVpZ2h0O1xuICB9KTtcblxuICB2YXIgZXhpdFNlbGVjdGlvbjtcblxuICBpZiAoc3ZnTm9kZXMuZXhpdCkge1xuICAgIGV4aXRTZWxlY3Rpb24gPSBzdmdOb2Rlcy5leGl0KCk7XG4gIH0gZWxzZSB7XG4gICAgZXhpdFNlbGVjdGlvbiA9IHN2Z05vZGVzLnNlbGVjdEFsbChudWxsKTsgLy8gZW1wdHkgc2VsZWN0aW9uXG4gIH1cblxuICB1dGlsLmFwcGx5VHJhbnNpdGlvbihleGl0U2VsZWN0aW9uLCBnKS5zdHlsZSgnb3BhY2l0eScsIDApLnJlbW92ZSgpO1xuXG4gIHJldHVybiBzdmdOb2Rlcztcbn07XG5cbmZ1bmN0aW9uIHNldENyZWF0ZU5vZGVzKHZhbHVlKSB7XG4gIGNyZWF0ZU5vZGVzID0gdmFsdWU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/create-nodes.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"circle\": () => (/* reexport module object */ _intersect_circle_js__WEBPACK_IMPORTED_MODULE_1__),\n/* harmony export */ \"ellipse\": () => (/* reexport module object */ _intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_2__),\n/* harmony export */ \"node\": () => (/* reexport module object */ _intersect_node_js__WEBPACK_IMPORTED_MODULE_0__),\n/* harmony export */ \"polygon\": () => (/* reexport module object */ _intersect_polygon_js__WEBPACK_IMPORTED_MODULE_3__),\n/* harmony export */ \"rect\": () => (/* reexport module object */ _intersect_rect_js__WEBPACK_IMPORTED_MODULE_4__)\n/* harmony export */ });\n/* harmony import */ var _intersect_node_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./intersect-node.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js\");\n/* harmony import */ var _intersect_circle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intersect-circle.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js\");\n/* harmony import */ var _intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./intersect-ellipse.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js\");\n/* harmony import */ var _intersect_polygon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./intersect-polygon.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js\");\n/* harmony import */ var _intersect_rect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./intersect-rect.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js\");\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUE0QztBQUNJO0FBQ0U7QUFDQTtBQUNOOztBQUVJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvaW50ZXJzZWN0L2luZGV4LmpzPzk2NDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbm9kZSBmcm9tICcuL2ludGVyc2VjdC1ub2RlLmpzJztcbmltcG9ydCAqIGFzIGNpcmNsZSBmcm9tICcuL2ludGVyc2VjdC1jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgZWxsaXBzZSBmcm9tICcuL2ludGVyc2VjdC1lbGxpcHNlLmpzJztcbmltcG9ydCAqIGFzIHBvbHlnb24gZnJvbSAnLi9pbnRlcnNlY3QtcG9seWdvbi5qcyc7XG5pbXBvcnQgKiBhcyByZWN0IGZyb20gJy4vaW50ZXJzZWN0LXJlY3QuanMnO1xuXG5leHBvcnQgeyBub2RlLCBjaXJjbGUsIGVsbGlwc2UsIHBvbHlnb24sIHJlY3QgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js": /*!************************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js ***! \************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectCircle\": () => (/* binding */ intersectCircle)\n/* harmony export */ });\n/* harmony import */ var _intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./intersect-ellipse.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js\");\n\n\n\n\nfunction intersectCircle(node, rx, point) {\n return (0,_intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_0__.intersectEllipse)(node, rx, rx, point);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWNpcmNsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwRDs7QUFFL0I7O0FBRTNCO0FBQ0EsU0FBUyx1RUFBZ0I7QUFDekIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWNpcmNsZS5qcz8zMGQ1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVyc2VjdEVsbGlwc2UgfSBmcm9tICcuL2ludGVyc2VjdC1lbGxpcHNlLmpzJztcblxuZXhwb3J0IHsgaW50ZXJzZWN0Q2lyY2xlIH07XG5cbmZ1bmN0aW9uIGludGVyc2VjdENpcmNsZShub2RlLCByeCwgcG9pbnQpIHtcbiAgcmV0dXJuIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ4LCBwb2ludCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js": /*!*************************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js ***! \*************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectEllipse\": () => (/* binding */ intersectEllipse)\n/* harmony export */ });\n\n\nfunction intersectEllipse(node, rx, ry, point) {\n // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n var cx = node.x;\n var cy = node.y;\n\n var px = cx - point.x;\n var py = cy - point.y;\n\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\n var dx = Math.abs((rx * ry * px) / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs((rx * ry * py) / det);\n if (point.y < cy) {\n dy = -dy;\n }\n\n return { x: cx + dx, y: cy + dy };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUE0Qjs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanM/ZDkxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBpbnRlcnNlY3RFbGxpcHNlIH07XG5cbmZ1bmN0aW9uIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ5LCBwb2ludCkge1xuICAvLyBGb3JtdWxhZSBmcm9tOiBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0VsbGlwc2UtTGluZUludGVyc2VjdGlvbi5odG1sXG5cbiAgdmFyIGN4ID0gbm9kZS54O1xuICB2YXIgY3kgPSBub2RlLnk7XG5cbiAgdmFyIHB4ID0gY3ggLSBwb2ludC54O1xuICB2YXIgcHkgPSBjeSAtIHBvaW50Lnk7XG5cbiAgdmFyIGRldCA9IE1hdGguc3FydChyeCAqIHJ4ICogcHkgKiBweSArIHJ5ICogcnkgKiBweCAqIHB4KTtcblxuICB2YXIgZHggPSBNYXRoLmFicygocnggKiByeSAqIHB4KSAvIGRldCk7XG4gIGlmIChwb2ludC54IDwgY3gpIHtcbiAgICBkeCA9IC1keDtcbiAgfVxuICB2YXIgZHkgPSBNYXRoLmFicygocnggKiByeSAqIHB5KSAvIGRldCk7XG4gIGlmIChwb2ludC55IDwgY3kpIHtcbiAgICBkeSA9IC1keTtcbiAgfVxuXG4gIHJldHVybiB7IHg6IGN4ICsgZHgsIHk6IGN5ICsgZHkgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js": /*!**********************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectLine\": () => (/* binding */ intersectLine)\n/* harmony export */ });\n\n\n/*\n * Returns the point at which two lines, p and q, intersect or returns\n * undefined if they do not intersect.\n */\nfunction intersectLine(p1, p2, q1, q2) {\n // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n // p7 and p473.\n\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n\n // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n // b1 y + c1 = 0.\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n\n // Compute r3 and r4.\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n\n // Check signs of r3 and r4. If both point 3 and point 4 lie on\n // same side of line 1, the line segments do not intersect.\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return /*DONT_INTERSECT*/;\n }\n\n // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n\n // Compute r1 and r2\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n\n // Check signs of r1 and r2. If both point 1 and point 2 lie\n // on same side of second line segment, the line segments do\n // not intersect.\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return /*DONT_INTERSECT*/;\n }\n\n // Line segments intersect: compute intersection point.\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return /*COLLINEAR*/;\n }\n\n offset = Math.abs(denom / 2);\n\n // The denom/2 is to get rounding instead of truncating. It\n // is added or subtracted to the numerator, depending upon the\n // sign of the numerator.\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n return { x: x, y: y };\n}\n\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWxpbmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LWxpbmUuanM/ZjIzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBpbnRlcnNlY3RMaW5lIH07XG5cbi8qXG4gKiBSZXR1cm5zIHRoZSBwb2ludCBhdCB3aGljaCB0d28gbGluZXMsIHAgYW5kIHEsIGludGVyc2VjdCBvciByZXR1cm5zXG4gKiB1bmRlZmluZWQgaWYgdGhleSBkbyBub3QgaW50ZXJzZWN0LlxuICovXG5mdW5jdGlvbiBpbnRlcnNlY3RMaW5lKHAxLCBwMiwgcTEsIHEyKSB7XG4gIC8vIEFsZ29yaXRobSBmcm9tIEouIEF2cm8sIChlZC4pIEdyYXBoaWNzIEdlbXMsIE5vIDIsIE1vcmdhbiBLYXVmbWFubiwgMTk5NCxcbiAgLy8gcDcgYW5kIHA0NzMuXG5cbiAgdmFyIGExLCBhMiwgYjEsIGIyLCBjMSwgYzI7XG4gIHZhciByMSwgcjIsIHIzLCByNDtcbiAgdmFyIGRlbm9tLCBvZmZzZXQsIG51bTtcbiAgdmFyIHgsIHk7XG5cbiAgLy8gQ29tcHV0ZSBhMSwgYjEsIGMxLCB3aGVyZSBsaW5lIGpvaW5pbmcgcG9pbnRzIDEgYW5kIDIgaXMgRih4LHkpID0gYTEgeCArXG4gIC8vIGIxIHkgKyBjMSA9IDAuXG4gIGExID0gcDIueSAtIHAxLnk7XG4gIGIxID0gcDEueCAtIHAyLng7XG4gIGMxID0gcDIueCAqIHAxLnkgLSBwMS54ICogcDIueTtcblxuICAvLyBDb21wdXRlIHIzIGFuZCByNC5cbiAgcjMgPSBhMSAqIHExLnggKyBiMSAqIHExLnkgKyBjMTtcbiAgcjQgPSBhMSAqIHEyLnggKyBiMSAqIHEyLnkgKyBjMTtcblxuICAvLyBDaGVjayBzaWducyBvZiByMyBhbmQgcjQuIElmIGJvdGggcG9pbnQgMyBhbmQgcG9pbnQgNCBsaWUgb25cbiAgLy8gc2FtZSBzaWRlIG9mIGxpbmUgMSwgdGhlIGxpbmUgc2VnbWVudHMgZG8gbm90IGludGVyc2VjdC5cbiAgaWYgKHIzICE9PSAwICYmIHI0ICE9PSAwICYmIHNhbWVTaWduKHIzLCByNCkpIHtcbiAgICByZXR1cm4gLypET05UX0lOVEVSU0VDVCovO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSBhMiwgYjIsIGMyIHdoZXJlIGxpbmUgam9pbmluZyBwb2ludHMgMyBhbmQgNCBpcyBHKHgseSkgPSBhMiB4ICsgYjIgeSArIGMyID0gMFxuICBhMiA9IHEyLnkgLSBxMS55O1xuICBiMiA9IHExLnggLSBxMi54O1xuICBjMiA9IHEyLnggKiBxMS55IC0gcTEueCAqIHEyLnk7XG5cbiAgLy8gQ29tcHV0ZSByMSBhbmQgcjJcbiAgcjEgPSBhMiAqIHAxLnggKyBiMiAqIHAxLnkgKyBjMjtcbiAgcjIgPSBhMiAqIHAyLnggKyBiMiAqIHAyLnkgKyBjMjtcblxuICAvLyBDaGVjayBzaWducyBvZiByMSBhbmQgcjIuIElmIGJvdGggcG9pbnQgMSBhbmQgcG9pbnQgMiBsaWVcbiAgLy8gb24gc2FtZSBzaWRlIG9mIHNlY29uZCBsaW5lIHNlZ21lbnQsIHRoZSBsaW5lIHNlZ21lbnRzIGRvXG4gIC8vIG5vdCBpbnRlcnNlY3QuXG4gIGlmIChyMSAhPT0gMCAmJiByMiAhPT0gMCAmJiBzYW1lU2lnbihyMSwgcjIpKSB7XG4gICAgcmV0dXJuIC8qRE9OVF9JTlRFUlNFQ1QqLztcbiAgfVxuXG4gIC8vIExpbmUgc2VnbWVudHMgaW50ZXJzZWN0OiBjb21wdXRlIGludGVyc2VjdGlvbiBwb2ludC5cbiAgZGVub20gPSBhMSAqIGIyIC0gYTIgKiBiMTtcbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuIC8qQ09MTElORUFSKi87XG4gIH1cblxuICBvZmZzZXQgPSBNYXRoLmFicyhkZW5vbSAvIDIpO1xuXG4gIC8vIFRoZSBkZW5vbS8yIGlzIHRvIGdldCByb3VuZGluZyBpbnN0ZWFkIG9mIHRydW5jYXRpbmcuIEl0XG4gIC8vIGlzIGFkZGVkIG9yIHN1YnRyYWN0ZWQgdG8gdGhlIG51bWVyYXRvciwgZGVwZW5kaW5nIHVwb24gdGhlXG4gIC8vIHNpZ24gb2YgdGhlIG51bWVyYXRvci5cbiAgbnVtID0gYjEgKiBjMiAtIGIyICogYzE7XG4gIHggPSBudW0gPCAwID8gKG51bSAtIG9mZnNldCkgLyBkZW5vbSA6IChudW0gKyBvZmZzZXQpIC8gZGVub207XG5cbiAgbnVtID0gYTIgKiBjMSAtIGExICogYzI7XG4gIHkgPSBudW0gPCAwID8gKG51bSAtIG9mZnNldCkgLyBkZW5vbSA6IChudW0gKyBvZmZzZXQpIC8gZGVub207XG5cbiAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xufVxuXG5mdW5jdGlvbiBzYW1lU2lnbihyMSwgcjIpIHtcbiAgcmV0dXJuIHIxICogcjIgPiAwO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js": /*!**********************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectNode\": () => (/* binding */ intersectNode)\n/* harmony export */ });\n\n\nfunction intersectNode(node, point) {\n return node.intersect(point);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LW5vZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUF5Qjs7QUFFekI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvaW50ZXJzZWN0L2ludGVyc2VjdC1ub2RlLmpzPzEyY2QiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgaW50ZXJzZWN0Tm9kZSB9O1xuXG5mdW5jdGlvbiBpbnRlcnNlY3ROb2RlKG5vZGUsIHBvaW50KSB7XG4gIHJldHVybiBub2RlLmludGVyc2VjdChwb2ludCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js": /*!*************************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js ***! \*************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectPolygon\": () => (/* binding */ intersectPolygon)\n/* harmony export */ });\n/* harmony import */ var _intersect_line_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./intersect-line.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js\");\n\n\n\n\n/*\n * Returns the point ({x, y}) at which the point argument intersects with the\n * node argument assuming that it has the shape specified by polygon.\n */\nfunction intersectPolygon(node, polyPoints, point) {\n var x1 = node.x;\n var y1 = node.y;\n\n var intersections = [];\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n polyPoints.forEach(function (entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect = (0,_intersect_line_js__WEBPACK_IMPORTED_MODULE_0__.intersectLine)(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n\n if (!intersections.length) {\n console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node);\n return node;\n }\n\n if (intersections.length > 1) {\n // More intersections, find the one nearest to edge end point\n intersections.sort(function (p, q) {\n var pdx = p.x - point.x;\n var pdy = p.y - point.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n var qdx = q.x - point.x;\n var qdy = q.y - point.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LXBvbHlnb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0Q7O0FBRXhCOztBQUU1QjtBQUNBLHVCQUF1QixLQUFLO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQSxvQkFBb0IsaUVBQWE7QUFDakM7QUFDQTtBQUNBLFFBQVEsK0JBQStCO0FBQ3ZDLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvaW50ZXJzZWN0L2ludGVyc2VjdC1wb2x5Z29uLmpzPzE4ZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZXJzZWN0TGluZSB9IGZyb20gJy4vaW50ZXJzZWN0LWxpbmUuanMnO1xuXG5leHBvcnQgeyBpbnRlcnNlY3RQb2x5Z29uIH07XG5cbi8qXG4gKiBSZXR1cm5zIHRoZSBwb2ludCAoe3gsIHl9KSBhdCB3aGljaCB0aGUgcG9pbnQgYXJndW1lbnQgaW50ZXJzZWN0cyB3aXRoIHRoZVxuICogbm9kZSBhcmd1bWVudCBhc3N1bWluZyB0aGF0IGl0IGhhcyB0aGUgc2hhcGUgc3BlY2lmaWVkIGJ5IHBvbHlnb24uXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9seVBvaW50cywgcG9pbnQpIHtcbiAgdmFyIHgxID0gbm9kZS54O1xuICB2YXIgeTEgPSBub2RlLnk7XG5cbiAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcblxuICB2YXIgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgdmFyIG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHBvbHlQb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZW50cnkueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIGVudHJ5LnkpO1xuICB9KTtcblxuICB2YXIgbGVmdCA9IHgxIC0gbm9kZS53aWR0aCAvIDIgLSBtaW5YO1xuICB2YXIgdG9wID0geTEgLSBub2RlLmhlaWdodCAvIDIgLSBtaW5ZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwMSA9IHBvbHlQb2ludHNbaV07XG4gICAgdmFyIHAyID0gcG9seVBvaW50c1tpIDwgcG9seVBvaW50cy5sZW5ndGggLSAxID8gaSArIDEgOiAwXTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gaW50ZXJzZWN0TGluZShcbiAgICAgIG5vZGUsXG4gICAgICBwb2ludCxcbiAgICAgIHsgeDogbGVmdCArIHAxLngsIHk6IHRvcCArIHAxLnkgfSxcbiAgICAgIHsgeDogbGVmdCArIHAyLngsIHk6IHRvcCArIHAyLnkgfVxuICAgICk7XG4gICAgaWYgKGludGVyc2VjdCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKCdOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUicsIG5vZGUpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIC8vIE1vcmUgaW50ZXJzZWN0aW9ucywgZmluZCB0aGUgb25lIG5lYXJlc3QgdG8gZWRnZSBlbmQgcG9pbnRcbiAgICBpbnRlcnNlY3Rpb25zLnNvcnQoZnVuY3Rpb24gKHAsIHEpIHtcbiAgICAgIHZhciBwZHggPSBwLnggLSBwb2ludC54O1xuICAgICAgdmFyIHBkeSA9IHAueSAtIHBvaW50Lnk7XG4gICAgICB2YXIgZGlzdHAgPSBNYXRoLnNxcnQocGR4ICogcGR4ICsgcGR5ICogcGR5KTtcblxuICAgICAgdmFyIHFkeCA9IHEueCAtIHBvaW50Lng7XG4gICAgICB2YXIgcWR5ID0gcS55IC0gcG9pbnQueTtcbiAgICAgIHZhciBkaXN0cSA9IE1hdGguc3FydChxZHggKiBxZHggKyBxZHkgKiBxZHkpO1xuXG4gICAgICByZXR1cm4gZGlzdHAgPCBkaXN0cSA/IC0xIDogZGlzdHAgPT09IGRpc3RxID8gMCA6IDE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvbnNbMF07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js": /*!**********************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"intersectRect\": () => (/* binding */ intersectRect)\n/* harmony export */ });\n\n\nfunction intersectRect(node, point) {\n var x = node.x;\n var y = node.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LXJlY3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUF5Qjs7QUFFekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2ludGVyc2VjdC9pbnRlcnNlY3QtcmVjdC5qcz9hMTM1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGludGVyc2VjdFJlY3QgfTtcblxuZnVuY3Rpb24gaW50ZXJzZWN0UmVjdChub2RlLCBwb2ludCkge1xuICB2YXIgeCA9IG5vZGUueDtcbiAgdmFyIHkgPSBub2RlLnk7XG5cbiAgLy8gUmVjdGFuZ2xlIGludGVyc2VjdGlvbiBhbGdvcml0aG0gZnJvbTpcbiAgLy8gaHR0cDovL21hdGguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzEwODExMy9maW5kLWVkZ2UtYmV0d2Vlbi10d28tYm94ZXNcbiAgdmFyIGR4ID0gcG9pbnQueCAtIHg7XG4gIHZhciBkeSA9IHBvaW50LnkgLSB5O1xuICB2YXIgdyA9IG5vZGUud2lkdGggLyAyO1xuICB2YXIgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcblxuICB2YXIgc3gsIHN5O1xuICBpZiAoTWF0aC5hYnMoZHkpICogdyA+IE1hdGguYWJzKGR4KSAqIGgpIHtcbiAgICAvLyBJbnRlcnNlY3Rpb24gaXMgdG9wIG9yIGJvdHRvbSBvZiByZWN0LlxuICAgIGlmIChkeSA8IDApIHtcbiAgICAgIGggPSAtaDtcbiAgICB9XG4gICAgc3ggPSBkeSA9PT0gMCA/IDAgOiAoaCAqIGR4KSAvIGR5O1xuICAgIHN5ID0gaDtcbiAgfSBlbHNlIHtcbiAgICAvLyBJbnRlcnNlY3Rpb24gaXMgbGVmdCBvciByaWdodCBvZiByZWN0LlxuICAgIGlmIChkeCA8IDApIHtcbiAgICAgIHcgPSAtdztcbiAgICB9XG4gICAgc3ggPSB3O1xuICAgIHN5ID0gZHggPT09IDAgPyAwIDogKHcgKiBkeSkgLyBkeDtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHggKyBzeCwgeTogeSArIHN5IH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js": /*!******************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addHtmlLabel\": () => (/* binding */ addHtmlLabel)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\nfunction addHtmlLabel(root, node) {\n var fo = root.append('foreignObject').attr('width', '100000');\n\n var div = fo.append('xhtml:div');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n\n var label = node.label;\n switch (typeof label) {\n case 'function':\n div.insert(label);\n break;\n case 'object':\n // Currently we assume this is a DOM object.\n div.insert(function () {\n return label;\n });\n break;\n default:\n div.html(label);\n }\n\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n\n var client = div.node().getBoundingClientRect();\n fo.attr('width', client.width).attr('height', client.height);\n\n return fo;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtaHRtbC1sYWJlbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtQzs7QUFFWDs7QUFFeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGdEQUFlO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtaHRtbC1sYWJlbC5qcz85YTY2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IGFkZEh0bWxMYWJlbCB9O1xuXG5mdW5jdGlvbiBhZGRIdG1sTGFiZWwocm9vdCwgbm9kZSkge1xuICB2YXIgZm8gPSByb290LmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpLmF0dHIoJ3dpZHRoJywgJzEwMDAwMCcpO1xuXG4gIHZhciBkaXYgPSBmby5hcHBlbmQoJ3hodG1sOmRpdicpO1xuICBkaXYuYXR0cigneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcpO1xuXG4gIHZhciBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIHN3aXRjaCAodHlwZW9mIGxhYmVsKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgZGl2Lmluc2VydChsYWJlbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGlzIGlzIGEgRE9NIG9iamVjdC5cbiAgICAgIGRpdi5pbnNlcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkaXYuaHRtbChsYWJlbCk7XG4gIH1cblxuICB1dGlsLmFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gIC8vIEZpeCBmb3IgZmlyZWZveFxuICBkaXYuc3R5bGUoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpO1xuXG4gIHZhciBjbGllbnQgPSBkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBmby5hdHRyKCd3aWR0aCcsIGNsaWVudC53aWR0aCkuYXR0cignaGVpZ2h0JywgY2xpZW50LmhlaWdodCk7XG5cbiAgcmV0dXJuIGZvO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js": /*!*************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addLabel\": () => (/* binding */ addLabel)\n/* harmony export */ });\n/* harmony import */ var _add_html_label_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-html-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\");\n/* harmony import */ var _add_svg_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-svg-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js\");\n/* harmony import */ var _add_text_label_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-text-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js\");\n\n\n\n\n\n\nfunction addLabel(root, node, location) {\n var label = node.label;\n var labelSvg = root.append('g');\n\n // Allow the label to be a string, a function that returns a DOM element, or\n // a DOM element itself.\n if (node.labelType === 'svg') {\n (0,_add_svg_label_js__WEBPACK_IMPORTED_MODULE_1__.addSVGLabel)(labelSvg, node);\n } else if (typeof label !== 'string' || node.labelType === 'html') {\n (0,_add_html_label_js__WEBPACK_IMPORTED_MODULE_0__.addHtmlLabel)(labelSvg, node);\n } else {\n (0,_add_text_label_js__WEBPACK_IMPORTED_MODULE_2__.addTextLabel)(labelSvg, node);\n }\n\n var labelBBox = labelSvg.node().getBBox();\n var y;\n switch (location) {\n case 'top':\n y = -node.height / 2;\n break;\n case 'bottom':\n y = node.height / 2 - labelBBox.height;\n break;\n default:\n y = -labelBBox.height / 2;\n }\n labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')');\n\n return labelSvg;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtbGFiZWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtRDtBQUNGO0FBQ0U7O0FBRS9COztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSSw4REFBVztBQUNmLElBQUk7QUFDSixJQUFJLGdFQUFZO0FBQ2hCLElBQUk7QUFDSixJQUFJLGdFQUFZO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtbGFiZWwuanM/M2IyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRIdG1sTGFiZWwgfSBmcm9tICcuL2FkZC1odG1sLWxhYmVsLmpzJztcbmltcG9ydCB7IGFkZFNWR0xhYmVsIH0gZnJvbSAnLi9hZGQtc3ZnLWxhYmVsLmpzJztcbmltcG9ydCB7IGFkZFRleHRMYWJlbCB9IGZyb20gJy4vYWRkLXRleHQtbGFiZWwuanMnO1xuXG5leHBvcnQgeyBhZGRMYWJlbCB9O1xuXG5mdW5jdGlvbiBhZGRMYWJlbChyb290LCBub2RlLCBsb2NhdGlvbikge1xuICB2YXIgbGFiZWwgPSBub2RlLmxhYmVsO1xuICB2YXIgbGFiZWxTdmcgPSByb290LmFwcGVuZCgnZycpO1xuXG4gIC8vIEFsbG93IHRoZSBsYWJlbCB0byBiZSBhIHN0cmluZywgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBET00gZWxlbWVudCwgb3JcbiAgLy8gYSBET00gZWxlbWVudCBpdHNlbGYuXG4gIGlmIChub2RlLmxhYmVsVHlwZSA9PT0gJ3N2ZycpIHtcbiAgICBhZGRTVkdMYWJlbChsYWJlbFN2Zywgbm9kZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJyB8fCBub2RlLmxhYmVsVHlwZSA9PT0gJ2h0bWwnKSB7XG4gICAgYWRkSHRtbExhYmVsKGxhYmVsU3ZnLCBub2RlKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRUZXh0TGFiZWwobGFiZWxTdmcsIG5vZGUpO1xuICB9XG5cbiAgdmFyIGxhYmVsQkJveCA9IGxhYmVsU3ZnLm5vZGUoKS5nZXRCQm94KCk7XG4gIHZhciB5O1xuICBzd2l0Y2ggKGxvY2F0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHkgPSAtbm9kZS5oZWlnaHQgLyAyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHkgPSBub2RlLmhlaWdodCAvIDIgLSBsYWJlbEJCb3guaGVpZ2h0O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHkgPSAtbGFiZWxCQm94LmhlaWdodCAvIDI7XG4gIH1cbiAgbGFiZWxTdmcuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgLWxhYmVsQkJveC53aWR0aCAvIDIgKyAnLCcgKyB5ICsgJyknKTtcblxuICByZXR1cm4gbGFiZWxTdmc7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addSVGLabel\": () => (/* binding */ addSVGLabel)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\nfunction addSVGLabel(root, node) {\n var domNode = root;\n\n domNode.node().appendChild(node.label);\n\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(domNode, node.labelStyle);\n\n return domNode;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtc3ZnLWxhYmVsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW1DOztBQUVaOztBQUV2QjtBQUNBOztBQUVBOztBQUVBLEVBQUUsZ0RBQWU7O0FBRWpCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtc3ZnLWxhYmVsLmpzPzgyMDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsLmpzJztcblxuZXhwb3J0IHsgYWRkU1ZHTGFiZWwgfTtcblxuZnVuY3Rpb24gYWRkU1ZHTGFiZWwocm9vdCwgbm9kZSkge1xuICB2YXIgZG9tTm9kZSA9IHJvb3Q7XG5cbiAgZG9tTm9kZS5ub2RlKCkuYXBwZW5kQ2hpbGQobm9kZS5sYWJlbCk7XG5cbiAgdXRpbC5hcHBseVN0eWxlKGRvbU5vZGUsIG5vZGUubGFiZWxTdHlsZSk7XG5cbiAgcmV0dXJuIGRvbU5vZGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js": /*!******************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addTextLabel\": () => (/* binding */ addTextLabel)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n/*\n * Attaches a text label to the specified root. Handles escape sequences.\n */\nfunction addTextLabel(root, node) {\n var domNode = root.append('text');\n\n var lines = processEscapeSequences(node.label).split('\\n');\n for (var i = 0; i < lines.length; i++) {\n domNode\n .append('tspan')\n .attr('xml:space', 'preserve')\n .attr('dy', '1em')\n .attr('x', '1')\n .text(lines[i]);\n }\n\n _util_js__WEBPACK_IMPORTED_MODULE_0__.applyStyle(domNode, node.labelStyle);\n\n return domNode;\n}\n\nfunction processEscapeSequences(text) {\n var newText = '';\n var escaped = false;\n var ch;\n for (var i = 0; i < text.length; ++i) {\n ch = text[i];\n if (escaped) {\n switch (ch) {\n case 'n':\n newText += '\\n';\n break;\n default:\n newText += ch;\n }\n escaped = false;\n } else if (ch === '\\\\') {\n escaped = true;\n } else {\n newText += ch;\n }\n }\n return newText;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9sYWJlbC9hZGQtdGV4dC1sYWJlbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtQzs7QUFFWDs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxnREFBZTs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2xhYmVsL2FkZC10ZXh0LWxhYmVsLmpzPzA2ZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsLmpzJztcblxuZXhwb3J0IHsgYWRkVGV4dExhYmVsIH07XG5cbi8qXG4gKiBBdHRhY2hlcyBhIHRleHQgbGFiZWwgdG8gdGhlIHNwZWNpZmllZCByb290LiBIYW5kbGVzIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIGFkZFRleHRMYWJlbChyb290LCBub2RlKSB7XG4gIHZhciBkb21Ob2RlID0gcm9vdC5hcHBlbmQoJ3RleHQnKTtcblxuICB2YXIgbGluZXMgPSBwcm9jZXNzRXNjYXBlU2VxdWVuY2VzKG5vZGUubGFiZWwpLnNwbGl0KCdcXG4nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGRvbU5vZGVcbiAgICAgIC5hcHBlbmQoJ3RzcGFuJylcbiAgICAgIC5hdHRyKCd4bWw6c3BhY2UnLCAncHJlc2VydmUnKVxuICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXG4gICAgICAuYXR0cigneCcsICcxJylcbiAgICAgIC50ZXh0KGxpbmVzW2ldKTtcbiAgfVxuXG4gIHV0aWwuYXBwbHlTdHlsZShkb21Ob2RlLCBub2RlLmxhYmVsU3R5bGUpO1xuXG4gIHJldHVybiBkb21Ob2RlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRXNjYXBlU2VxdWVuY2VzKHRleHQpIHtcbiAgdmFyIG5ld1RleHQgPSAnJztcbiAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcbiAgdmFyIGNoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHtcbiAgICBjaCA9IHRleHRbaV07XG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV3VGV4dCArPSAnXFxuJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBuZXdUZXh0ICs9IGNoO1xuICAgICAgfVxuICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1RleHQgKz0gY2g7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdUZXh0O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/position-clusters.js": /*!***************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/position-clusters.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"positionClusters\": () => (/* binding */ positionClusters)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\nfunction positionClusters(selection, g) {\n var created = selection.filter(function () {\n return !d3__WEBPACK_IMPORTED_MODULE_0__.select(this).classed('update');\n });\n\n function translate(v) {\n var node = g.node(v);\n return 'translate(' + node.x + ',' + node.y + ')';\n }\n\n created.attr('transform', translate);\n\n _util_js__WEBPACK_IMPORTED_MODULE_1__.applyTransition(selection, g).style('opacity', 1).attr('transform', translate);\n\n _util_js__WEBPACK_IMPORTED_MODULE_1__.applyTransition(created.selectAll('rect'), g)\n .attr('width', function (v) {\n return g.node(v).width;\n })\n .attr('height', function (v) {\n return g.node(v).height;\n })\n .attr('x', function (v) {\n var node = g.node(v);\n return -node.width / 2;\n })\n .attr('y', function (v) {\n var node = g.node(v);\n return -node.height / 2;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9wb3NpdGlvbi1jbHVzdGVycy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUI7QUFDUzs7QUFFTjs7QUFFNUI7QUFDQTtBQUNBLFlBQVksc0NBQVM7QUFDckIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLHFEQUFvQjs7QUFFdEIsRUFBRSxxREFDa0I7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9wb3NpdGlvbi1jbHVzdGVycy5qcz9kZDc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgcG9zaXRpb25DbHVzdGVycyB9O1xuXG5mdW5jdGlvbiBwb3NpdGlvbkNsdXN0ZXJzKHNlbGVjdGlvbiwgZykge1xuICB2YXIgY3JlYXRlZCA9IHNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ3VwZGF0ZScpO1xuICB9KTtcblxuICBmdW5jdGlvbiB0cmFuc2xhdGUodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyBub2RlLnggKyAnLCcgKyBub2RlLnkgKyAnKSc7XG4gIH1cblxuICBjcmVhdGVkLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG5cbiAgdXRpbC5hcHBseVRyYW5zaXRpb24oc2VsZWN0aW9uLCBnKS5zdHlsZSgnb3BhY2l0eScsIDEpLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG5cbiAgdXRpbFxuICAgIC5hcHBseVRyYW5zaXRpb24oY3JlYXRlZC5zZWxlY3RBbGwoJ3JlY3QnKSwgZylcbiAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS53aWR0aDtcbiAgICB9KVxuICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS5oZWlnaHQ7XG4gICAgfSlcbiAgICAuYXR0cigneCcsIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICAgIHJldHVybiAtbm9kZS53aWR0aCAvIDI7XG4gICAgfSlcbiAgICAuYXR0cigneScsIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICAgIHJldHVybiAtbm9kZS5oZWlnaHQgLyAyO1xuICAgIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/position-clusters.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js": /*!******************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"positionEdgeLabels\": () => (/* binding */ positionEdgeLabels)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\n\nfunction positionEdgeLabels(selection, g) {\n var created = selection.filter(function () {\n return !d3__WEBPACK_IMPORTED_MODULE_0__.select(this).classed('update');\n });\n\n function translate(e) {\n var edge = g.edge(e);\n return lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : '';\n }\n\n created.attr('transform', translate);\n\n _util_js__WEBPACK_IMPORTED_MODULE_1__.applyTransition(selection, g).style('opacity', 1).attr('transform', translate);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9wb3NpdGlvbi1lZGdlLWxhYmVscy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXlCO0FBQ007QUFDRzs7QUFFSjs7QUFFOUI7QUFDQTtBQUNBLFlBQVksc0NBQVM7QUFDckIsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsV0FBVyxpREFBSztBQUNoQjs7QUFFQTs7QUFFQSxFQUFFLHFEQUFvQjtBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL3Bvc2l0aW9uLWVkZ2UtbGFiZWxzLmpzPzRmZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBwb3NpdGlvbkVkZ2VMYWJlbHMgfTtcblxuZnVuY3Rpb24gcG9zaXRpb25FZGdlTGFiZWxzKHNlbGVjdGlvbiwgZykge1xuICB2YXIgY3JlYXRlZCA9IHNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ3VwZGF0ZScpO1xuICB9KTtcblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIHJldHVybiBfLmhhcyhlZGdlLCAneCcpID8gJ3RyYW5zbGF0ZSgnICsgZWRnZS54ICsgJywnICsgZWRnZS55ICsgJyknIDogJyc7XG4gIH1cblxuICBjcmVhdGVkLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG5cbiAgdXRpbC5hcHBseVRyYW5zaXRpb24oc2VsZWN0aW9uLCBnKS5zdHlsZSgnb3BhY2l0eScsIDEpLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/position-nodes.js": /*!************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/position-nodes.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"positionNodes\": () => (/* binding */ positionNodes)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n\n\n\n\n\nfunction positionNodes(selection, g) {\n var created = selection.filter(function () {\n return !d3__WEBPACK_IMPORTED_MODULE_0__.select(this).classed('update');\n });\n\n function translate(v) {\n var node = g.node(v);\n return 'translate(' + node.x + ',' + node.y + ')';\n }\n\n created.attr('transform', translate);\n\n _util_js__WEBPACK_IMPORTED_MODULE_1__.applyTransition(selection, g).style('opacity', 1).attr('transform', translate);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9wb3NpdGlvbi1ub2Rlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUI7QUFDUzs7QUFFVDs7QUFFekI7QUFDQTtBQUNBLFlBQVksc0NBQVM7QUFDckIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLHFEQUFvQjtBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL3Bvc2l0aW9uLW5vZGVzLmpzPzQxNjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBwb3NpdGlvbk5vZGVzIH07XG5cbmZ1bmN0aW9uIHBvc2l0aW9uTm9kZXMoc2VsZWN0aW9uLCBnKSB7XG4gIHZhciBjcmVhdGVkID0gc2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICFkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgndXBkYXRlJyk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIG5vZGUueCArICcsJyArIG5vZGUueSArICcpJztcbiAgfVxuXG4gIGNyZWF0ZWQuYXR0cigndHJhbnNmb3JtJywgdHJhbnNsYXRlKTtcblxuICB1dGlsLmFwcGx5VHJhbnNpdGlvbihzZWxlY3Rpb24sIGcpLnN0eWxlKCdvcGFjaXR5JywgMSkuYXR0cigndHJhbnNmb3JtJywgdHJhbnNsYXRlKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/position-nodes.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/render.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/render.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/defaults.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var _dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var _arrows_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./arrows.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/arrows.js\");\n/* harmony import */ var _create_clusters_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./create-clusters.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/create-clusters.js\");\n/* harmony import */ var _create_edge_labels_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./create-edge-labels.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js\");\n/* harmony import */ var _create_edge_paths_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./create-edge-paths.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js\");\n/* harmony import */ var _create_nodes_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./create-nodes.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/create-nodes.js\");\n/* harmony import */ var _position_clusters_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./position-clusters.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/position-clusters.js\");\n/* harmony import */ var _position_edge_labels_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./position-edge-labels.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js\");\n/* harmony import */ var _position_nodes_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./position-nodes.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/position-nodes.js\");\n/* harmony import */ var _shapes_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./shapes.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/shapes.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// This design is based on http://bost.ocks.org/mike/chart/.\nfunction render() {\n var fn = function (svg, g) {\n preProcessGraph(g);\n\n var outputGroup = createOrSelectGroup(svg, 'output');\n var clustersGroup = createOrSelectGroup(outputGroup, 'clusters');\n var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths');\n var edgeLabels = (0,_create_edge_labels_js__WEBPACK_IMPORTED_MODULE_4__.createEdgeLabels)(createOrSelectGroup(outputGroup, 'edgeLabels'), g);\n var nodes = (0,_create_nodes_js__WEBPACK_IMPORTED_MODULE_6__.createNodes)(createOrSelectGroup(outputGroup, 'nodes'), g, _shapes_js__WEBPACK_IMPORTED_MODULE_10__.shapes);\n\n (0,_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__.layout)(g);\n\n (0,_position_nodes_js__WEBPACK_IMPORTED_MODULE_9__.positionNodes)(nodes, g);\n (0,_position_edge_labels_js__WEBPACK_IMPORTED_MODULE_8__.positionEdgeLabels)(edgeLabels, g);\n (0,_create_edge_paths_js__WEBPACK_IMPORTED_MODULE_5__.createEdgePaths)(edgePathsGroup, g, _arrows_js__WEBPACK_IMPORTED_MODULE_2__.arrows);\n\n var clusters = (0,_create_clusters_js__WEBPACK_IMPORTED_MODULE_3__.createClusters)(clustersGroup, g);\n (0,_position_clusters_js__WEBPACK_IMPORTED_MODULE_7__.positionClusters)(clusters, g);\n\n postProcessGraph(g);\n };\n\n fn.createNodes = function (value) {\n if (!arguments.length) return _create_nodes_js__WEBPACK_IMPORTED_MODULE_6__.createNodes;\n (0,_create_nodes_js__WEBPACK_IMPORTED_MODULE_6__.setCreateNodes)(value);\n return fn;\n };\n\n fn.createClusters = function (value) {\n if (!arguments.length) return _create_clusters_js__WEBPACK_IMPORTED_MODULE_3__.createClusters;\n (0,_create_clusters_js__WEBPACK_IMPORTED_MODULE_3__.setCreateClusters)(value);\n return fn;\n };\n\n fn.createEdgeLabels = function (value) {\n if (!arguments.length) return _create_edge_labels_js__WEBPACK_IMPORTED_MODULE_4__.createEdgeLabels;\n (0,_create_edge_labels_js__WEBPACK_IMPORTED_MODULE_4__.setCreateEdgeLabels)(value);\n return fn;\n };\n\n fn.createEdgePaths = function (value) {\n if (!arguments.length) return _create_edge_paths_js__WEBPACK_IMPORTED_MODULE_5__.createEdgePaths;\n (0,_create_edge_paths_js__WEBPACK_IMPORTED_MODULE_5__.setCreateEdgePaths)(value);\n return fn;\n };\n\n fn.shapes = function (value) {\n if (!arguments.length) return _shapes_js__WEBPACK_IMPORTED_MODULE_10__.shapes;\n (0,_shapes_js__WEBPACK_IMPORTED_MODULE_10__.setShapes)(value);\n return fn;\n };\n\n fn.arrows = function (value) {\n if (!arguments.length) return _arrows_js__WEBPACK_IMPORTED_MODULE_2__.arrows;\n (0,_arrows_js__WEBPACK_IMPORTED_MODULE_2__.setArrows)(value);\n return fn;\n };\n\n return fn;\n}\n\nvar NODE_DEFAULT_ATTRS = {\n paddingLeft: 10,\n paddingRight: 10,\n paddingTop: 10,\n paddingBottom: 10,\n rx: 0,\n ry: 0,\n shape: 'rect',\n};\n\nvar EDGE_DEFAULT_ATTRS = {\n arrowhead: 'normal',\n curve: d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear,\n};\n\nfunction preProcessGraph(g) {\n g.nodes().forEach(function (v) {\n var node = g.node(v);\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'label') && !g.children(v).length) {\n node.label = v;\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'paddingX')) {\n lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](node, {\n paddingLeft: node.paddingX,\n paddingRight: node.paddingX,\n });\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'paddingY')) {\n lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](node, {\n paddingTop: node.paddingY,\n paddingBottom: node.paddingY,\n });\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'padding')) {\n lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](node, {\n paddingLeft: node.padding,\n paddingRight: node.padding,\n paddingTop: node.padding,\n paddingBottom: node.padding,\n });\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](node, NODE_DEFAULT_ATTRS);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"](['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) {\n node[k] = Number(node[k]);\n });\n\n // Save dimensions for restore during post-processing\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'width')) {\n node._prevWidth = node.width;\n }\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, 'height')) {\n node._prevHeight = node.height;\n }\n });\n\n g.edges().forEach(function (e) {\n var edge = g.edge(e);\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](edge, 'label')) {\n edge.label = '';\n }\n lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](edge, EDGE_DEFAULT_ATTRS);\n });\n}\n\nfunction postProcessGraph(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n\n // Restore original dimensions\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, '_prevWidth')) {\n node.width = node._prevWidth;\n } else {\n delete node.width;\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node, '_prevHeight')) {\n node.height = node._prevHeight;\n } else {\n delete node.height;\n }\n\n delete node._prevWidth;\n delete node._prevHeight;\n });\n}\n\nfunction createOrSelectGroup(root, name) {\n var selection = root.select('g.' + name);\n if (selection.empty()) {\n selection = root.append('g').attr('class', name);\n }\n return selection;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9yZW5kZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXlCO0FBQ007QUFDWTtBQUNLO0FBQ3lCO0FBQ087QUFDSDtBQUNiO0FBQ047QUFDSztBQUNYO0FBQ0o7O0FBRTlCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsd0VBQWdCO0FBQ3JDLGdCQUFnQiw2REFBVywrQ0FBK0MsK0NBQU07O0FBRWhGLElBQUksdURBQU07O0FBRVYsSUFBSSxpRUFBYTtBQUNqQixJQUFJLDRFQUFrQjtBQUN0QixJQUFJLHNFQUFlLG9CQUFvQiw4Q0FBTTs7QUFFN0MsbUJBQW1CLG1FQUFjO0FBQ2pDLElBQUksdUVBQWdCOztBQUVwQjtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLHlEQUFXO0FBQzdDLElBQUksZ0VBQWM7QUFDbEI7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQywrREFBYztBQUNoRCxJQUFJLHNFQUFpQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLG9FQUFnQjtBQUNsRCxJQUFJLDJFQUFtQjtBQUN2QjtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLGtFQUFlO0FBQ2pELElBQUkseUVBQWtCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsK0NBQU07QUFDeEMsSUFBSSxzREFBUztBQUNiO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsOENBQU07QUFDeEMsSUFBSSxxREFBUztBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsMkNBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxrREFBSztBQUNkO0FBQ0E7O0FBRUEsUUFBUSxrREFBSztBQUNiLE1BQU0sa0RBQVU7QUFDaEI7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxRQUFRLGtEQUFLO0FBQ2IsTUFBTSxrREFBVTtBQUNoQjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLFFBQVEsa0RBQUs7QUFDYixNQUFNLGtEQUFVO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLElBQUksa0RBQVU7O0FBRWQsSUFBSSxrREFBTTtBQUNWO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFFBQVEsa0RBQUs7QUFDYjtBQUNBO0FBQ0EsUUFBUSxrREFBSztBQUNiO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxTQUFTLGtEQUFLO0FBQ2Q7QUFDQTtBQUNBLElBQUksa0RBQVU7QUFDZCxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxFQUFFLGtEQUFNO0FBQ1I7O0FBRUE7QUFDQSxRQUFRLGtEQUFLO0FBQ2I7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSxRQUFRLGtEQUFLO0FBQ2I7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvcmVuZGVyLmpzP2E2ZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgbGF5b3V0IH0gZnJvbSAnLi4vZGFncmUvaW5kZXguanMnO1xuaW1wb3J0IHsgYXJyb3dzLCBzZXRBcnJvd3MgfSBmcm9tICcuL2Fycm93cy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbHVzdGVycywgc2V0Q3JlYXRlQ2x1c3RlcnMgfSBmcm9tICcuL2NyZWF0ZS1jbHVzdGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFZGdlTGFiZWxzLCBzZXRDcmVhdGVFZGdlTGFiZWxzIH0gZnJvbSAnLi9jcmVhdGUtZWRnZS1sYWJlbHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRWRnZVBhdGhzLCBzZXRDcmVhdGVFZGdlUGF0aHMgfSBmcm9tICcuL2NyZWF0ZS1lZGdlLXBhdGhzLmpzJztcbmltcG9ydCB7IGNyZWF0ZU5vZGVzLCBzZXRDcmVhdGVOb2RlcyB9IGZyb20gJy4vY3JlYXRlLW5vZGVzLmpzJztcbmltcG9ydCB7IHBvc2l0aW9uQ2x1c3RlcnMgfSBmcm9tICcuL3Bvc2l0aW9uLWNsdXN0ZXJzLmpzJztcbmltcG9ydCB7IHBvc2l0aW9uRWRnZUxhYmVscyB9IGZyb20gJy4vcG9zaXRpb24tZWRnZS1sYWJlbHMuanMnO1xuaW1wb3J0IHsgcG9zaXRpb25Ob2RlcyB9IGZyb20gJy4vcG9zaXRpb24tbm9kZXMuanMnO1xuaW1wb3J0IHsgc2hhcGVzLCBzZXRTaGFwZXMgfSBmcm9tICcuL3NoYXBlcy5qcyc7XG5cbmV4cG9ydCB7IHJlbmRlciB9O1xuXG4vLyBUaGlzIGRlc2lnbiBpcyBiYXNlZCBvbiBodHRwOi8vYm9zdC5vY2tzLm9yZy9taWtlL2NoYXJ0Ly5cbmZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIGZuID0gZnVuY3Rpb24gKHN2ZywgZykge1xuICAgIHByZVByb2Nlc3NHcmFwaChnKTtcblxuICAgIHZhciBvdXRwdXRHcm91cCA9IGNyZWF0ZU9yU2VsZWN0R3JvdXAoc3ZnLCAnb3V0cHV0Jyk7XG4gICAgdmFyIGNsdXN0ZXJzR3JvdXAgPSBjcmVhdGVPclNlbGVjdEdyb3VwKG91dHB1dEdyb3VwLCAnY2x1c3RlcnMnKTtcbiAgICB2YXIgZWRnZVBhdGhzR3JvdXAgPSBjcmVhdGVPclNlbGVjdEdyb3VwKG91dHB1dEdyb3VwLCAnZWRnZVBhdGhzJyk7XG4gICAgdmFyIGVkZ2VMYWJlbHMgPSBjcmVhdGVFZGdlTGFiZWxzKGNyZWF0ZU9yU2VsZWN0R3JvdXAob3V0cHV0R3JvdXAsICdlZGdlTGFiZWxzJyksIGcpO1xuICAgIHZhciBub2RlcyA9IGNyZWF0ZU5vZGVzKGNyZWF0ZU9yU2VsZWN0R3JvdXAob3V0cHV0R3JvdXAsICdub2RlcycpLCBnLCBzaGFwZXMpO1xuXG4gICAgbGF5b3V0KGcpO1xuXG4gICAgcG9zaXRpb25Ob2Rlcyhub2RlcywgZyk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWxzKGVkZ2VMYWJlbHMsIGcpO1xuICAgIGNyZWF0ZUVkZ2VQYXRocyhlZGdlUGF0aHNHcm91cCwgZywgYXJyb3dzKTtcblxuICAgIHZhciBjbHVzdGVycyA9IGNyZWF0ZUNsdXN0ZXJzKGNsdXN0ZXJzR3JvdXAsIGcpO1xuICAgIHBvc2l0aW9uQ2x1c3RlcnMoY2x1c3RlcnMsIGcpO1xuXG4gICAgcG9zdFByb2Nlc3NHcmFwaChnKTtcbiAgfTtcblxuICBmbi5jcmVhdGVOb2RlcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZU5vZGVzO1xuICAgIHNldENyZWF0ZU5vZGVzKHZhbHVlKTtcbiAgICByZXR1cm4gZm47XG4gIH07XG5cbiAgZm4uY3JlYXRlQ2x1c3RlcnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjcmVhdGVDbHVzdGVycztcbiAgICBzZXRDcmVhdGVDbHVzdGVycyh2YWx1ZSk7XG4gICAgcmV0dXJuIGZuO1xuICB9O1xuXG4gIGZuLmNyZWF0ZUVkZ2VMYWJlbHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjcmVhdGVFZGdlTGFiZWxzO1xuICAgIHNldENyZWF0ZUVkZ2VMYWJlbHModmFsdWUpO1xuICAgIHJldHVybiBmbjtcbiAgfTtcblxuICBmbi5jcmVhdGVFZGdlUGF0aHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjcmVhdGVFZGdlUGF0aHM7XG4gICAgc2V0Q3JlYXRlRWRnZVBhdGhzKHZhbHVlKTtcbiAgICByZXR1cm4gZm47XG4gIH07XG5cbiAgZm4uc2hhcGVzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVzO1xuICAgIHNldFNoYXBlcyh2YWx1ZSk7XG4gICAgcmV0dXJuIGZuO1xuICB9O1xuXG4gIGZuLmFycm93cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGFycm93cztcbiAgICBzZXRBcnJvd3ModmFsdWUpO1xuICAgIHJldHVybiBmbjtcbiAgfTtcblxuICByZXR1cm4gZm47XG59XG5cbnZhciBOT0RFX0RFRkFVTFRfQVRUUlMgPSB7XG4gIHBhZGRpbmdMZWZ0OiAxMCxcbiAgcGFkZGluZ1JpZ2h0OiAxMCxcbiAgcGFkZGluZ1RvcDogMTAsXG4gIHBhZGRpbmdCb3R0b206IDEwLFxuICByeDogMCxcbiAgcnk6IDAsXG4gIHNoYXBlOiAncmVjdCcsXG59O1xuXG52YXIgRURHRV9ERUZBVUxUX0FUVFJTID0ge1xuICBhcnJvd2hlYWQ6ICdub3JtYWwnLFxuICBjdXJ2ZTogZDMuY3VydmVMaW5lYXIsXG59O1xuXG5mdW5jdGlvbiBwcmVQcm9jZXNzR3JhcGgoZykge1xuICBnLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGlmICghXy5oYXMobm9kZSwgJ2xhYmVsJykgJiYgIWcuY2hpbGRyZW4odikubGVuZ3RoKSB7XG4gICAgICBub2RlLmxhYmVsID0gdjtcbiAgICB9XG5cbiAgICBpZiAoXy5oYXMobm9kZSwgJ3BhZGRpbmdYJykpIHtcbiAgICAgIF8uZGVmYXVsdHMobm9kZSwge1xuICAgICAgICBwYWRkaW5nTGVmdDogbm9kZS5wYWRkaW5nWCxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiBub2RlLnBhZGRpbmdYLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKF8uaGFzKG5vZGUsICdwYWRkaW5nWScpKSB7XG4gICAgICBfLmRlZmF1bHRzKG5vZGUsIHtcbiAgICAgICAgcGFkZGluZ1RvcDogbm9kZS5wYWRkaW5nWSxcbiAgICAgICAgcGFkZGluZ0JvdHRvbTogbm9kZS5wYWRkaW5nWSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChfLmhhcyhub2RlLCAncGFkZGluZycpKSB7XG4gICAgICBfLmRlZmF1bHRzKG5vZGUsIHtcbiAgICAgICAgcGFkZGluZ0xlZnQ6IG5vZGUucGFkZGluZyxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiBub2RlLnBhZGRpbmcsXG4gICAgICAgIHBhZGRpbmdUb3A6IG5vZGUucGFkZGluZyxcbiAgICAgICAgcGFkZGluZ0JvdHRvbTogbm9kZS5wYWRkaW5nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgXy5kZWZhdWx0cyhub2RlLCBOT0RFX0RFRkFVTFRfQVRUUlMpO1xuXG4gICAgXy5lYWNoKFsncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbSddLCBmdW5jdGlvbiAoaykge1xuICAgICAgbm9kZVtrXSA9IE51bWJlcihub2RlW2tdKTtcbiAgICB9KTtcblxuICAgIC8vIFNhdmUgZGltZW5zaW9ucyBmb3IgcmVzdG9yZSBkdXJpbmcgcG9zdC1wcm9jZXNzaW5nXG4gICAgaWYgKF8uaGFzKG5vZGUsICd3aWR0aCcpKSB7XG4gICAgICBub2RlLl9wcmV2V2lkdGggPSBub2RlLndpZHRoO1xuICAgIH1cbiAgICBpZiAoXy5oYXMobm9kZSwgJ2hlaWdodCcpKSB7XG4gICAgICBub2RlLl9wcmV2SGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgfVxuICB9KTtcblxuICBnLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmICghXy5oYXMoZWRnZSwgJ2xhYmVsJykpIHtcbiAgICAgIGVkZ2UubGFiZWwgPSAnJztcbiAgICB9XG4gICAgXy5kZWZhdWx0cyhlZGdlLCBFREdFX0RFRkFVTFRfQVRUUlMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zdFByb2Nlc3NHcmFwaChnKSB7XG4gIF8uZWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG5cbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGRpbWVuc2lvbnNcbiAgICBpZiAoXy5oYXMobm9kZSwgJ19wcmV2V2lkdGgnKSkge1xuICAgICAgbm9kZS53aWR0aCA9IG5vZGUuX3ByZXZXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG5vZGUud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKF8uaGFzKG5vZGUsICdfcHJldkhlaWdodCcpKSB7XG4gICAgICBub2RlLmhlaWdodCA9IG5vZGUuX3ByZXZIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBub2RlLmhlaWdodDtcbiAgICB9XG5cbiAgICBkZWxldGUgbm9kZS5fcHJldldpZHRoO1xuICAgIGRlbGV0ZSBub2RlLl9wcmV2SGVpZ2h0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JTZWxlY3RHcm91cChyb290LCBuYW1lKSB7XG4gIHZhciBzZWxlY3Rpb24gPSByb290LnNlbGVjdCgnZy4nICsgbmFtZSk7XG4gIGlmIChzZWxlY3Rpb24uZW1wdHkoKSkge1xuICAgIHNlbGVjdGlvbiA9IHJvb3QuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBuYW1lKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0aW9uO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/render.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/shapes.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/shapes.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setShapes\": () => (/* binding */ setShapes),\n/* harmony export */ \"shapes\": () => (/* binding */ shapes)\n/* harmony export */ });\n/* harmony import */ var _intersect_intersect_circle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./intersect/intersect-circle.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js\");\n/* harmony import */ var _intersect_intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intersect/intersect-ellipse.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js\");\n/* harmony import */ var _intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./intersect/intersect-polygon.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js\");\n/* harmony import */ var _intersect_intersect_rect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./intersect/intersect-rect.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js\");\n\n\n\n\n\n\n\nvar shapes = {\n rect,\n ellipse,\n circle,\n diamond,\n};\n\nfunction setShapes(value) {\n shapes = value;\n}\n\nfunction rect(parent, bbox, node) {\n var shapeSvg = parent\n .insert('rect', ':first-child')\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', -bbox.width / 2)\n .attr('y', -bbox.height / 2)\n .attr('width', bbox.width)\n .attr('height', bbox.height);\n\n node.intersect = function (point) {\n return (0,_intersect_intersect_rect_js__WEBPACK_IMPORTED_MODULE_3__.intersectRect)(node, point);\n };\n\n return shapeSvg;\n}\n\nfunction ellipse(parent, bbox, node) {\n var rx = bbox.width / 2;\n var ry = bbox.height / 2;\n var shapeSvg = parent\n .insert('ellipse', ':first-child')\n .attr('x', -bbox.width / 2)\n .attr('y', -bbox.height / 2)\n .attr('rx', rx)\n .attr('ry', ry);\n\n node.intersect = function (point) {\n return (0,_intersect_intersect_ellipse_js__WEBPACK_IMPORTED_MODULE_1__.intersectEllipse)(node, rx, ry, point);\n };\n\n return shapeSvg;\n}\n\nfunction circle(parent, bbox, node) {\n var r = Math.max(bbox.width, bbox.height) / 2;\n var shapeSvg = parent\n .insert('circle', ':first-child')\n .attr('x', -bbox.width / 2)\n .attr('y', -bbox.height / 2)\n .attr('r', r);\n\n node.intersect = function (point) {\n return (0,_intersect_intersect_circle_js__WEBPACK_IMPORTED_MODULE_0__.intersectCircle)(node, r, point);\n };\n\n return shapeSvg;\n}\n\n// Circumscribe an ellipse for the bounding box with a diamond shape. I derived\n// the function to calculate the diamond shape from:\n// http://mathforum.org/kb/message.jspa?messageID=3750236\nfunction diamond(parent, bbox, node) {\n var w = (bbox.width * Math.SQRT2) / 2;\n var h = (bbox.height * Math.SQRT2) / 2;\n var points = [\n { x: 0, y: -h },\n { x: -w, y: 0 },\n { x: 0, y: h },\n { x: w, y: 0 },\n ];\n var shapeSvg = parent.insert('polygon', ':first-child').attr(\n 'points',\n points\n .map(function (p) {\n return p.x + ',' + p.y;\n })\n .join(' ')\n );\n\n node.intersect = function (p) {\n return (0,_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_2__.intersectPolygon)(node, points, p);\n };\n\n return shapeSvg;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9zaGFwZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWtFO0FBQ0U7QUFDQTtBQUNOOztBQUVqQzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLDJFQUFhO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxpRkFBZ0I7QUFDM0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsK0VBQWU7QUFDMUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sYUFBYTtBQUNuQixNQUFNLGFBQWE7QUFDbkIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sWUFBWTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsaUZBQWdCO0FBQzNCOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9zaGFwZXMuanM/Yzg5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlcnNlY3RDaXJjbGUgfSBmcm9tICcuL2ludGVyc2VjdC9pbnRlcnNlY3QtY2lyY2xlLmpzJztcbmltcG9ydCB7IGludGVyc2VjdEVsbGlwc2UgfSBmcm9tICcuL2ludGVyc2VjdC9pbnRlcnNlY3QtZWxsaXBzZS5qcyc7XG5pbXBvcnQgeyBpbnRlcnNlY3RQb2x5Z29uIH0gZnJvbSAnLi9pbnRlcnNlY3QvaW50ZXJzZWN0LXBvbHlnb24uanMnO1xuaW1wb3J0IHsgaW50ZXJzZWN0UmVjdCB9IGZyb20gJy4vaW50ZXJzZWN0L2ludGVyc2VjdC1yZWN0LmpzJztcblxuZXhwb3J0IHsgc2hhcGVzLCBzZXRTaGFwZXMgfTtcblxudmFyIHNoYXBlcyA9IHtcbiAgcmVjdCxcbiAgZWxsaXBzZSxcbiAgY2lyY2xlLFxuICBkaWFtb25kLFxufTtcblxuZnVuY3Rpb24gc2V0U2hhcGVzKHZhbHVlKSB7XG4gIHNoYXBlcyA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZWN0KHBhcmVudCwgYmJveCwgbm9kZSkge1xuICB2YXIgc2hhcGVTdmcgPSBwYXJlbnRcbiAgICAuaW5zZXJ0KCdyZWN0JywgJzpmaXJzdC1jaGlsZCcpXG4gICAgLmF0dHIoJ3J4Jywgbm9kZS5yeClcbiAgICAuYXR0cigncnknLCBub2RlLnJ5KVxuICAgIC5hdHRyKCd4JywgLWJib3gud2lkdGggLyAyKVxuICAgIC5hdHRyKCd5JywgLWJib3guaGVpZ2h0IC8gMilcbiAgICAuYXR0cignd2lkdGgnLCBiYm94LndpZHRoKVxuICAgIC5hdHRyKCdoZWlnaHQnLCBiYm94LmhlaWdodCk7XG5cbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UmVjdChub2RlLCBwb2ludCk7XG4gIH07XG5cbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuXG5mdW5jdGlvbiBlbGxpcHNlKHBhcmVudCwgYmJveCwgbm9kZSkge1xuICB2YXIgcnggPSBiYm94LndpZHRoIC8gMjtcbiAgdmFyIHJ5ID0gYmJveC5oZWlnaHQgLyAyO1xuICB2YXIgc2hhcGVTdmcgPSBwYXJlbnRcbiAgICAuaW5zZXJ0KCdlbGxpcHNlJywgJzpmaXJzdC1jaGlsZCcpXG4gICAgLmF0dHIoJ3gnLCAtYmJveC53aWR0aCAvIDIpXG4gICAgLmF0dHIoJ3knLCAtYmJveC5oZWlnaHQgLyAyKVxuICAgIC5hdHRyKCdyeCcsIHJ4KVxuICAgIC5hdHRyKCdyeScsIHJ5KTtcblxuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uIChwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RFbGxpcHNlKG5vZGUsIHJ4LCByeSwgcG9pbnQpO1xuICB9O1xuXG4gIHJldHVybiBzaGFwZVN2Zztcbn1cblxuZnVuY3Rpb24gY2lyY2xlKHBhcmVudCwgYmJveCwgbm9kZSkge1xuICB2YXIgciA9IE1hdGgubWF4KGJib3gud2lkdGgsIGJib3guaGVpZ2h0KSAvIDI7XG4gIHZhciBzaGFwZVN2ZyA9IHBhcmVudFxuICAgIC5pbnNlcnQoJ2NpcmNsZScsICc6Zmlyc3QtY2hpbGQnKVxuICAgIC5hdHRyKCd4JywgLWJib3gud2lkdGggLyAyKVxuICAgIC5hdHRyKCd5JywgLWJib3guaGVpZ2h0IC8gMilcbiAgICAuYXR0cigncicsIHIpO1xuXG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdENpcmNsZShub2RlLCByLCBwb2ludCk7XG4gIH07XG5cbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuXG4vLyBDaXJjdW1zY3JpYmUgYW4gZWxsaXBzZSBmb3IgdGhlIGJvdW5kaW5nIGJveCB3aXRoIGEgZGlhbW9uZCBzaGFwZS4gSSBkZXJpdmVkXG4vLyB0aGUgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBkaWFtb25kIHNoYXBlIGZyb206XG4vLyBodHRwOi8vbWF0aGZvcnVtLm9yZy9rYi9tZXNzYWdlLmpzcGE/bWVzc2FnZUlEPTM3NTAyMzZcbmZ1bmN0aW9uIGRpYW1vbmQocGFyZW50LCBiYm94LCBub2RlKSB7XG4gIHZhciB3ID0gKGJib3gud2lkdGggKiBNYXRoLlNRUlQyKSAvIDI7XG4gIHZhciBoID0gKGJib3guaGVpZ2h0ICogTWF0aC5TUVJUMikgLyAyO1xuICB2YXIgcG9pbnRzID0gW1xuICAgIHsgeDogMCwgeTogLWggfSxcbiAgICB7IHg6IC13LCB5OiAwIH0sXG4gICAgeyB4OiAwLCB5OiBoIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gIF07XG4gIHZhciBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoJ3BvbHlnb24nLCAnOmZpcnN0LWNoaWxkJykuYXR0cihcbiAgICAncG9pbnRzJyxcbiAgICBwb2ludHNcbiAgICAgIC5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHAueCArICcsJyArIHAueTtcbiAgICAgIH0pXG4gICAgICAuam9pbignICcpXG4gICk7XG5cbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RQb2x5Z29uKG5vZGUsIHBvaW50cywgcCk7XG4gIH07XG5cbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/shapes.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre-js/util.js": /*!**************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre-js/util.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"applyClass\": () => (/* binding */ applyClass),\n/* harmony export */ \"applyStyle\": () => (/* binding */ applyStyle),\n/* harmony export */ \"applyTransition\": () => (/* binding */ applyTransition),\n/* harmony export */ \"edgeToId\": () => (/* binding */ edgeToId),\n/* harmony export */ \"isSubgraph\": () => (/* binding */ isSubgraph)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isPlainObject.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isFunction.js\");\n\n\n// Public utility functions\n\n\n/*\n * Returns true if the specified node in the graph is a subgraph node. A\n * subgraph node is one that contains other nodes.\n */\nfunction isSubgraph(g, v) {\n return !!g.children(v).length;\n}\n\nfunction edgeToId(e) {\n return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name);\n}\n\nvar ID_DELIM = /:/g;\nfunction escapeId(str) {\n return str ? String(str).replace(ID_DELIM, '\\\\:') : '';\n}\n\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\nfunction applyClass(dom, classFn, otherClasses) {\n if (classFn) {\n dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class'));\n }\n}\n\nfunction applyTransition(selection, g) {\n var graph = g.graph();\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](graph)) {\n var transition = graph.transition;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](transition)) {\n return transition(selection);\n }\n }\n\n return selection;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy91dGlsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7O0FBRS9CO0FBQ3lFOztBQUV6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsTUFBTSxpREFBZTtBQUNyQjtBQUNBLFFBQVEsaURBQVk7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy91dGlsLmpzP2VmZWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG4vLyBQdWJsaWMgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCB7IGlzU3ViZ3JhcGgsIGVkZ2VUb0lkLCBhcHBseVN0eWxlLCBhcHBseUNsYXNzLCBhcHBseVRyYW5zaXRpb24gfTtcblxuLypcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIG5vZGUgaW4gdGhlIGdyYXBoIGlzIGEgc3ViZ3JhcGggbm9kZS4gQVxuICogc3ViZ3JhcGggbm9kZSBpcyBvbmUgdGhhdCBjb250YWlucyBvdGhlciBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gaXNTdWJncmFwaChnLCB2KSB7XG4gIHJldHVybiAhIWcuY2hpbGRyZW4odikubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBlZGdlVG9JZChlKSB7XG4gIHJldHVybiBlc2NhcGVJZChlLnYpICsgJzonICsgZXNjYXBlSWQoZS53KSArICc6JyArIGVzY2FwZUlkKGUubmFtZSk7XG59XG5cbnZhciBJRF9ERUxJTSA9IC86L2c7XG5mdW5jdGlvbiBlc2NhcGVJZChzdHIpIHtcbiAgcmV0dXJuIHN0ciA/IFN0cmluZyhzdHIpLnJlcGxhY2UoSURfREVMSU0sICdcXFxcOicpIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZG9tLCBzdHlsZUZuKSB7XG4gIGlmIChzdHlsZUZuKSB7XG4gICAgZG9tLmF0dHIoJ3N0eWxlJywgc3R5bGVGbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlDbGFzcyhkb20sIGNsYXNzRm4sIG90aGVyQ2xhc3Nlcykge1xuICBpZiAoY2xhc3NGbikge1xuICAgIGRvbS5hdHRyKCdjbGFzcycsIGNsYXNzRm4pLmF0dHIoJ2NsYXNzJywgb3RoZXJDbGFzc2VzICsgJyAnICsgZG9tLmF0dHIoJ2NsYXNzJykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNpdGlvbihzZWxlY3Rpb24sIGcpIHtcbiAgdmFyIGdyYXBoID0gZy5ncmFwaCgpO1xuXG4gIGlmIChfLmlzUGxhaW5PYmplY3QoZ3JhcGgpKSB7XG4gICAgdmFyIHRyYW5zaXRpb24gPSBncmFwaC50cmFuc2l0aW9uO1xuICAgIGlmIChfLmlzRnVuY3Rpb24odHJhbnNpdGlvbikpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uKHNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre-js/util.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/acyclic.js": /*!**************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/acyclic.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"run\": () => (/* binding */ run),\n/* harmony export */ \"undo\": () => (/* binding */ undo)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/uniqueId.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _greedy_fas_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./greedy-fas.js */ \"../../../node_modules/dagre-d3-es/src/dagre/greedy-fas.js\");\n\n\n\n\n\nfunction run(g) {\n var fas = g.graph().acyclicer === 'greedy' ? (0,_greedy_fas_js__WEBPACK_IMPORTED_MODULE_0__.greedyFAS)(g, weightFn(g)) : dfsFAS(g);\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](fas, function (e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('rev'));\n });\n\n function weightFn(g) {\n return function (e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.outEdges(v), function (e) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.edges(), function (e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9hY3ljbGljLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUErQjtBQUNhOztBQUV2Qjs7QUFFckI7QUFDQSwrQ0FBK0MseURBQVM7QUFDeEQsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlEQUFVO0FBQ3pDLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpREFBUztBQUNiLFVBQVUsaURBQUs7QUFDZjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsRUFBRSxpREFBUztBQUNYO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9hY3ljbGljLmpzP2NmNjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZ3JlZWR5RkFTIH0gZnJvbSAnLi9ncmVlZHktZmFzLmpzJztcblxuZXhwb3J0IHsgcnVuLCB1bmRvIH07XG5cbmZ1bmN0aW9uIHJ1bihnKSB7XG4gIHZhciBmYXMgPSBnLmdyYXBoKCkuYWN5Y2xpY2VyID09PSAnZ3JlZWR5JyA/IGdyZWVkeUZBUyhnLCB3ZWlnaHRGbihnKSkgOiBkZnNGQVMoZyk7XG4gIF8uZm9yRWFjaChmYXMsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGcucmVtb3ZlRWRnZShlKTtcbiAgICBsYWJlbC5mb3J3YXJkTmFtZSA9IGUubmFtZTtcbiAgICBsYWJlbC5yZXZlcnNlZCA9IHRydWU7XG4gICAgZy5zZXRFZGdlKGUudywgZS52LCBsYWJlbCwgXy51bmlxdWVJZCgncmV2JykpO1xuICB9KTtcblxuICBmdW5jdGlvbiB3ZWlnaHRGbihnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZy5lZGdlKGUpLndlaWdodDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRmc0ZBUyhnKSB7XG4gIHZhciBmYXMgPSBbXTtcbiAgdmFyIHN0YWNrID0ge307XG4gIHZhciB2aXNpdGVkID0ge307XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBpZiAoXy5oYXModmlzaXRlZCwgdikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlzaXRlZFt2XSA9IHRydWU7XG4gICAgc3RhY2tbdl0gPSB0cnVlO1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF8uaGFzKHN0YWNrLCBlLncpKSB7XG4gICAgICAgIGZhcy5wdXNoKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGZzKGUudyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHN0YWNrW3ZdO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZGZzKTtcbiAgcmV0dXJuIGZhcztcbn1cblxuZnVuY3Rpb24gdW5kbyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGlmIChsYWJlbC5yZXZlcnNlZCkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuXG4gICAgICB2YXIgZm9yd2FyZE5hbWUgPSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGRlbGV0ZSBsYWJlbC5yZXZlcnNlZDtcbiAgICAgIGRlbGV0ZSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGcuc2V0RWRnZShlLncsIGUudiwgbGFiZWwsIGZvcndhcmROYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/acyclic.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/add-border-segments.js": /*!**************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/add-border-segments.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addBorderSegments\": () => (/* binding */ addBorderSegments)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](children, dfs);\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](node, 'minRank')) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n addBorderNode(g, 'borderRight', '_br', v, node, rank);\n }\n }\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = _util_js__WEBPACK_IMPORTED_MODULE_0__.addDummyNode(g, 'border', label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9hZGQtYm9yZGVyLXNlZ21lbnRzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDRzs7QUFFTDs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saURBQVM7QUFDZjs7QUFFQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTtBQUNBLGdFQUFnRSxnQkFBZ0I7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlEQUFTO0FBQ1g7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxhQUFhLGtEQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsV0FBVztBQUN2QztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvYWRkLWJvcmRlci1zZWdtZW50cy5qcz8yYjNiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgYWRkQm9yZGVyU2VnbWVudHMgfTtcblxuZnVuY3Rpb24gYWRkQm9yZGVyU2VnbWVudHMoZykge1xuICBmdW5jdGlvbiBkZnModikge1xuICAgIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odik7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgXy5mb3JFYWNoKGNoaWxkcmVuLCBkZnMpO1xuICAgIH1cblxuICAgIGlmIChfLmhhcyhub2RlLCAnbWluUmFuaycpKSB7XG4gICAgICBub2RlLmJvcmRlckxlZnQgPSBbXTtcbiAgICAgIG5vZGUuYm9yZGVyUmlnaHQgPSBbXTtcbiAgICAgIGZvciAodmFyIHJhbmsgPSBub2RlLm1pblJhbmssIG1heFJhbmsgPSBub2RlLm1heFJhbmsgKyAxOyByYW5rIDwgbWF4UmFuazsgKytyYW5rKSB7XG4gICAgICAgIGFkZEJvcmRlck5vZGUoZywgJ2JvcmRlckxlZnQnLCAnX2JsJywgdiwgbm9kZSwgcmFuayk7XG4gICAgICAgIGFkZEJvcmRlck5vZGUoZywgJ2JvcmRlclJpZ2h0JywgJ19icicsIHYsIG5vZGUsIHJhbmspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGRmcyk7XG59XG5cbmZ1bmN0aW9uIGFkZEJvcmRlck5vZGUoZywgcHJvcCwgcHJlZml4LCBzZywgc2dOb2RlLCByYW5rKSB7XG4gIHZhciBsYWJlbCA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgcmFuazogcmFuaywgYm9yZGVyVHlwZTogcHJvcCB9O1xuICB2YXIgcHJldiA9IHNnTm9kZVtwcm9wXVtyYW5rIC0gMV07XG4gIHZhciBjdXJyID0gdXRpbC5hZGREdW1teU5vZGUoZywgJ2JvcmRlcicsIGxhYmVsLCBwcmVmaXgpO1xuICBzZ05vZGVbcHJvcF1bcmFua10gPSBjdXJyO1xuICBnLnNldFBhcmVudChjdXJyLCBzZyk7XG4gIGlmIChwcmV2KSB7XG4gICAgZy5zZXRFZGdlKHByZXYsIGN1cnIsIHsgd2VpZ2h0OiAxIH0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/add-border-segments.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/coordinate-system.js": /*!************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/coordinate-system.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"adjust\": () => (/* binding */ adjust),\n/* harmony export */ \"undo\": () => (/* binding */ undo)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n\n\n\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'bt' || rankDir === 'rl') {\n reverseY(g);\n }\n\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.nodes(), function (v) {\n swapWidthHeightOne(g.node(v));\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.edges(), function (e) {\n swapWidthHeightOne(g.edge(e));\n });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.nodes(), function (v) {\n reverseYOne(g.node(v));\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](edge.points, reverseYOne);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](edge, 'y')) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.nodes(), function (v) {\n swapXYOne(g.node(v));\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](edge.points, swapXYOne);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](edge, 'x')) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9jb29yZGluYXRlLXN5c3RlbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStCOztBQUVQOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRztBQUNILEVBQUUsaURBQVM7QUFDWDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRzs7QUFFSCxFQUFFLGlEQUFTO0FBQ1g7QUFDQSxJQUFJLGlEQUFTO0FBQ2IsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRzs7QUFFSCxFQUFFLGlEQUFTO0FBQ1g7QUFDQSxJQUFJLGlEQUFTO0FBQ2IsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2Nvb3JkaW5hdGUtc3lzdGVtLmpzP2Q5NTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBhZGp1c3QsIHVuZG8gfTtcblxuZnVuY3Rpb24gYWRqdXN0KGcpIHtcbiAgdmFyIHJhbmtEaXIgPSBnLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmFua0RpciA9PT0gJ2xyJyB8fCByYW5rRGlyID09PSAncmwnKSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuZG8oZykge1xuICB2YXIgcmFua0RpciA9IGcuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYW5rRGlyID09PSAnYnQnIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICByZXZlcnNlWShnKTtcbiAgfVxuXG4gIGlmIChyYW5rRGlyID09PSAnbHInIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICBzd2FwWFkoZyk7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN3YXBXaWR0aEhlaWdodChnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0T25lKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHN3YXBXaWR0aEhlaWdodE9uZShnLmVkZ2UoZSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcFdpZHRoSGVpZ2h0T25lKGF0dHJzKSB7XG4gIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gIGF0dHJzLndpZHRoID0gYXR0cnMuaGVpZ2h0O1xuICBhdHRycy5oZWlnaHQgPSB3O1xufVxuXG5mdW5jdGlvbiByZXZlcnNlWShnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV2ZXJzZVlPbmUoZy5ub2RlKHYpKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBfLmZvckVhY2goZWRnZS5wb2ludHMsIHJldmVyc2VZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3knKSkge1xuICAgICAgcmV2ZXJzZVlPbmUoZWRnZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVlPbmUoYXR0cnMpIHtcbiAgYXR0cnMueSA9IC1hdHRycy55O1xufVxuXG5mdW5jdGlvbiBzd2FwWFkoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHN3YXBYWU9uZShnLm5vZGUodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIF8uZm9yRWFjaChlZGdlLnBvaW50cywgc3dhcFhZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgc3dhcFhZT25lKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3YXBYWU9uZShhdHRycykge1xuICB2YXIgeCA9IGF0dHJzLng7XG4gIGF0dHJzLnggPSBhdHRycy55O1xuICBhdHRycy55ID0geDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/coordinate-system.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/data/list.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/data/list.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"List\": () => (/* binding */ List)\n/* harmony export */ });\n/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\n\n\nclass List {\n constructor() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n }\n dequeue() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n }\n enqueue(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n }\n toString() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return '[' + strs.join(', ') + ']';\n }\n}\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== '_next' && k !== '_prev') {\n return v;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9kYXRhL2xpc3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2RhdGEvbGlzdC5qcz8yZDJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBDb3JtZW4sIGV0IGFsLixcbiAqIFwiSW50cm9kdWN0aW9uIHRvIEFsZ29yaXRobXNcIi5cbiAqL1xuXG5leHBvcnQgeyBMaXN0IH07XG5cbmNsYXNzIExpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgc2VudGluZWwgPSB7fTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IHNlbnRpbmVsLl9wcmV2ID0gc2VudGluZWw7XG4gICAgdGhpcy5fc2VudGluZWwgPSBzZW50aW5lbDtcbiAgfVxuICBkZXF1ZXVlKCkge1xuICAgIHZhciBzZW50aW5lbCA9IHRoaXMuX3NlbnRpbmVsO1xuICAgIHZhciBlbnRyeSA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIGlmIChlbnRyeSAhPT0gc2VudGluZWwpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG4gIGVucXVldWUoZW50cnkpIHtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICBpZiAoZW50cnkuX3ByZXYgJiYgZW50cnkuX25leHQpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgfVxuICAgIGVudHJ5Ll9uZXh0ID0gc2VudGluZWwuX25leHQ7XG4gICAgc2VudGluZWwuX25leHQuX3ByZXYgPSBlbnRyeTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IGVudHJ5O1xuICAgIGVudHJ5Ll9wcmV2ID0gc2VudGluZWw7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgdmFyIHN0cnMgPSBbXTtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICB2YXIgY3VyciA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIHdoaWxlIChjdXJyICE9PSBzZW50aW5lbCkge1xuICAgICAgc3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsIGZpbHRlck91dExpbmtzKSk7XG4gICAgICBjdXJyID0gY3Vyci5fcHJldjtcbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHN0cnMuam9pbignLCAnKSArICddJztcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmxpbmsoZW50cnkpIHtcbiAgZW50cnkuX3ByZXYuX25leHQgPSBlbnRyeS5fbmV4dDtcbiAgZW50cnkuX25leHQuX3ByZXYgPSBlbnRyeS5fcHJldjtcbiAgZGVsZXRlIGVudHJ5Ll9uZXh0O1xuICBkZWxldGUgZW50cnkuX3ByZXY7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck91dExpbmtzKGssIHYpIHtcbiAgaWYgKGsgIT09ICdfbmV4dCcgJiYgayAhPT0gJ19wcmV2Jykge1xuICAgIHJldHVybiB2O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/data/list.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/greedy-fas.js": /*!*****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/greedy-fas.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"greedyFAS\": () => (/* binding */ greedyFAS)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/constant.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/flatten.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _data_list_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./data/list.js */ \"../../../node_modules/dagre-d3-es/src/dagre/data/list.js\");\n\n\n\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\n\n\nvar DEFAULT_WEIGHT_FN = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](results, function (e) {\n return g.outEdges(e.v, e.w);\n })\n );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n while ((entry = sources.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](g.inEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](g.outEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry['in'] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](g.nodes(), function (v) {\n fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](g.edges(), function (e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n });\n\n var buckets = lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](maxOut + maxIn + 3).map(function () {\n return new _data_list_js__WEBPACK_IMPORTED_MODULE_1__.List();\n });\n var zeroIdx = maxIn + 1;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](fasGraph.nodes(), function (v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry['in']) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9ncmVlZHktZmFzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQStCO0FBQ2M7QUFDUDs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDcUI7O0FBRXJCLHdCQUF3QixpREFBVTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxpREFBUztBQUNsQixJQUFJLGlEQUFLO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIscURBQUs7QUFDMUI7QUFDQTs7QUFFQSxFQUFFLGlEQUFTO0FBQ1gsMEJBQTBCLHFCQUFxQjtBQUMvQyxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQkFBZ0IsaURBQU87QUFDdkIsZUFBZSwrQ0FBSTtBQUNuQixHQUFHO0FBQ0g7O0FBRUEsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRzs7QUFFSCxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2dyZWVkeS1mYXMuanM/NGE2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL2dyYXBobGliL2luZGV4LmpzJztcbmltcG9ydCB7IExpc3QgfSBmcm9tICcuL2RhdGEvbGlzdC5qcyc7XG5cbi8qXG4gKiBBIGdyZWVkeSBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBmZWVkYmFjayBhcmMgc2V0IGZvciBhIGdyYXBoLiBBIGZlZWRiYWNrXG4gKiBhcmMgc2V0IGlzIGEgc2V0IG9mIGVkZ2VzIHRoYXQgY2FuIGJlIHJlbW92ZWQgdG8gbWFrZSBhIGdyYXBoIGFjeWNsaWMuXG4gKiBUaGUgYWxnb3JpdGhtIGNvbWVzIGZyb206IFAuIEVhZGVzLCBYLiBMaW4sIGFuZCBXLiBGLiBTbXl0aCwgXCJBIGZhc3QgYW5kXG4gKiBlZmZlY3RpdmUgaGV1cmlzdGljIGZvciB0aGUgZmVlZGJhY2sgYXJjIHNldCBwcm9ibGVtLlwiIFRoaXMgaW1wbGVtZW50YXRpb25cbiAqIGFkanVzdHMgdGhhdCBmcm9tIHRoZSBwYXBlciB0byBhbGxvdyBmb3Igd2VpZ2h0ZWQgZWRnZXMuXG4gKi9cbmV4cG9ydCB7IGdyZWVkeUZBUyB9O1xuXG52YXIgREVGQVVMVF9XRUlHSFRfRk4gPSBfLmNvbnN0YW50KDEpO1xuXG5mdW5jdGlvbiBncmVlZHlGQVMoZywgd2VpZ2h0Rm4pIHtcbiAgaWYgKGcubm9kZUNvdW50KCkgPD0gMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgc3RhdGUgPSBidWlsZFN0YXRlKGcsIHdlaWdodEZuIHx8IERFRkFVTFRfV0VJR0hUX0ZOKTtcbiAgdmFyIHJlc3VsdHMgPSBkb0dyZWVkeUZBUyhzdGF0ZS5ncmFwaCwgc3RhdGUuYnVja2V0cywgc3RhdGUuemVyb0lkeCk7XG5cbiAgLy8gRXhwYW5kIG11bHRpLWVkZ2VzXG4gIHJldHVybiBfLmZsYXR0ZW4oXG4gICAgXy5tYXAocmVzdWx0cywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBnLm91dEVkZ2VzKGUudiwgZS53KTtcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBkb0dyZWVkeUZBUyhnLCBidWNrZXRzLCB6ZXJvSWR4KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciBzb3VyY2VzID0gYnVja2V0c1tidWNrZXRzLmxlbmd0aCAtIDFdO1xuICB2YXIgc2lua3MgPSBidWNrZXRzWzBdO1xuXG4gIHZhciBlbnRyeTtcbiAgd2hpbGUgKGcubm9kZUNvdW50KCkpIHtcbiAgICB3aGlsZSAoKGVudHJ5ID0gc2lua3MuZGVxdWV1ZSgpKSkge1xuICAgICAgcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSk7XG4gICAgfVxuICAgIHdoaWxlICgoZW50cnkgPSBzb3VyY2VzLmRlcXVldWUoKSkpIHtcbiAgICAgIHJlbW92ZU5vZGUoZywgYnVja2V0cywgemVyb0lkeCwgZW50cnkpO1xuICAgIH1cbiAgICBpZiAoZy5ub2RlQ291bnQoKSkge1xuICAgICAgZm9yICh2YXIgaSA9IGJ1Y2tldHMubGVuZ3RoIC0gMjsgaSA+IDA7IC0taSkge1xuICAgICAgICBlbnRyeSA9IGJ1Y2tldHNbaV0uZGVxdWV1ZSgpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSwgdHJ1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUoZywgYnVja2V0cywgemVyb0lkeCwgZW50cnksIGNvbGxlY3RQcmVkZWNlc3NvcnMpIHtcbiAgdmFyIHJlc3VsdHMgPSBjb2xsZWN0UHJlZGVjZXNzb3JzID8gW10gOiB1bmRlZmluZWQ7XG5cbiAgXy5mb3JFYWNoKGcuaW5FZGdlcyhlbnRyeS52KSwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgd2VpZ2h0ID0gZy5lZGdlKGVkZ2UpO1xuICAgIHZhciB1RW50cnkgPSBnLm5vZGUoZWRnZS52KTtcblxuICAgIGlmIChjb2xsZWN0UHJlZGVjZXNzb3JzKSB7XG4gICAgICByZXN1bHRzLnB1c2goeyB2OiBlZGdlLnYsIHc6IGVkZ2UudyB9KTtcbiAgICB9XG5cbiAgICB1RW50cnkub3V0IC09IHdlaWdodDtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgdUVudHJ5KTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcub3V0RWRnZXMoZW50cnkudiksIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgdmFyIHdlaWdodCA9IGcuZWRnZShlZGdlKTtcbiAgICB2YXIgdyA9IGVkZ2UudztcbiAgICB2YXIgd0VudHJ5ID0gZy5ub2RlKHcpO1xuICAgIHdFbnRyeVsnaW4nXSAtPSB3ZWlnaHQ7XG4gICAgYXNzaWduQnVja2V0KGJ1Y2tldHMsIHplcm9JZHgsIHdFbnRyeSk7XG4gIH0pO1xuXG4gIGcucmVtb3ZlTm9kZShlbnRyeS52KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdGF0ZShnLCB3ZWlnaHRGbikge1xuICB2YXIgZmFzR3JhcGggPSBuZXcgR3JhcGgoKTtcbiAgdmFyIG1heEluID0gMDtcbiAgdmFyIG1heE91dCA9IDA7XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBmYXNHcmFwaC5zZXROb2RlKHYsIHsgdjogdiwgaW46IDAsIG91dDogMCB9KTtcbiAgfSk7XG5cbiAgLy8gQWdncmVnYXRlIHdlaWdodHMgb24gbm9kZXMsIGJ1dCBhbHNvIHN1bSB0aGUgd2VpZ2h0cyBhY3Jvc3MgbXVsdGktZWRnZXNcbiAgLy8gaW50byBhIHNpbmdsZSBlZGdlIGZvciB0aGUgZmFzR3JhcGguXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHByZXZXZWlnaHQgPSBmYXNHcmFwaC5lZGdlKGUudiwgZS53KSB8fCAwO1xuICAgIHZhciB3ZWlnaHQgPSB3ZWlnaHRGbihlKTtcbiAgICB2YXIgZWRnZVdlaWdodCA9IHByZXZXZWlnaHQgKyB3ZWlnaHQ7XG4gICAgZmFzR3JhcGguc2V0RWRnZShlLnYsIGUudywgZWRnZVdlaWdodCk7XG4gICAgbWF4T3V0ID0gTWF0aC5tYXgobWF4T3V0LCAoZmFzR3JhcGgubm9kZShlLnYpLm91dCArPSB3ZWlnaHQpKTtcbiAgICBtYXhJbiA9IE1hdGgubWF4KG1heEluLCAoZmFzR3JhcGgubm9kZShlLncpWydpbiddICs9IHdlaWdodCkpO1xuICB9KTtcblxuICB2YXIgYnVja2V0cyA9IF8ucmFuZ2UobWF4T3V0ICsgbWF4SW4gKyAzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTGlzdCgpO1xuICB9KTtcbiAgdmFyIHplcm9JZHggPSBtYXhJbiArIDE7XG5cbiAgXy5mb3JFYWNoKGZhc0dyYXBoLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgYXNzaWduQnVja2V0KGJ1Y2tldHMsIHplcm9JZHgsIGZhc0dyYXBoLm5vZGUodikpO1xuICB9KTtcblxuICByZXR1cm4geyBncmFwaDogZmFzR3JhcGgsIGJ1Y2tldHM6IGJ1Y2tldHMsIHplcm9JZHg6IHplcm9JZHggfTtcbn1cblxuZnVuY3Rpb24gYXNzaWduQnVja2V0KGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5KSB7XG4gIGlmICghZW50cnkub3V0KSB7XG4gICAgYnVja2V0c1swXS5lbnF1ZXVlKGVudHJ5KTtcbiAgfSBlbHNlIGlmICghZW50cnlbJ2luJ10pIHtcbiAgICBidWNrZXRzW2J1Y2tldHMubGVuZ3RoIC0gMV0uZW5xdWV1ZShlbnRyeSk7XG4gIH0gZWxzZSB7XG4gICAgYnVja2V0c1tlbnRyeS5vdXQgLSBlbnRyeVsnaW4nXSArIHplcm9JZHhdLmVucXVldWUoZW50cnkpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/greedy-fas.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/index.js": /*!************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"acyclic\": () => (/* reexport module object */ _acyclic_js__WEBPACK_IMPORTED_MODULE_0__),\n/* harmony export */ \"layout\": () => (/* reexport safe */ _layout_js__WEBPACK_IMPORTED_MODULE_1__.layout),\n/* harmony export */ \"normalize\": () => (/* reexport module object */ _normalize_js__WEBPACK_IMPORTED_MODULE_2__),\n/* harmony export */ \"rank\": () => (/* reexport safe */ _rank_index_js__WEBPACK_IMPORTED_MODULE_3__.rank)\n/* harmony export */ });\n/* harmony import */ var _acyclic_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./acyclic.js */ \"../../../node_modules/dagre-d3-es/src/dagre/acyclic.js\");\n/* harmony import */ var _layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layout.js */ \"../../../node_modules/dagre-d3-es/src/dagre/layout.js\");\n/* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./normalize.js */ \"../../../node_modules/dagre-d3-es/src/dagre/normalize.js\");\n/* harmony import */ var _rank_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rank/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/index.js\");\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUF3QztBQUNIO0FBQ087QUFDTDs7QUFFSyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzP2I3MDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWN5Y2xpYyBmcm9tICcuL2FjeWNsaWMuanMnO1xuaW1wb3J0IHsgbGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQuanMnO1xuaW1wb3J0ICogYXMgbm9ybWFsaXplIGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IHJhbmsgfSBmcm9tICcuL3JhbmsvaW5kZXguanMnO1xuXG5leHBvcnQgeyBhY3ljbGljLCBub3JtYWxpemUsIHJhbmssIGxheW91dCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/layout.js": /*!*************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/layout.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"layout\": () => (/* binding */ layout)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/merge.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/pick.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/defaults.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/last.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/mapValues.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _add_border_segments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-border-segments.js */ \"../../../node_modules/dagre-d3-es/src/dagre/add-border-segments.js\");\n/* harmony import */ var _coordinate_system_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./coordinate-system.js */ \"../../../node_modules/dagre-d3-es/src/dagre/coordinate-system.js\");\n/* harmony import */ var _acyclic_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./acyclic.js */ \"../../../node_modules/dagre-d3-es/src/dagre/acyclic.js\");\n/* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./normalize.js */ \"../../../node_modules/dagre-d3-es/src/dagre/normalize.js\");\n/* harmony import */ var _rank_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./rank/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/index.js\");\n/* harmony import */ var _nesting_graph_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nesting-graph.js */ \"../../../node_modules/dagre-d3-es/src/dagre/nesting-graph.js\");\n/* harmony import */ var _order_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./order/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/index.js\");\n/* harmony import */ var _parent_dummy_chains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./parent-dummy-chains.js */ \"../../../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js\");\n/* harmony import */ var _position_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./position/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/position/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? _util_js__WEBPACK_IMPORTED_MODULE_10__.time : _util_js__WEBPACK_IMPORTED_MODULE_10__.notime;\n time('layout', function () {\n var layoutGraph = time(' buildLayoutGraph', function () {\n return buildLayoutGraph(g);\n });\n time(' runLayout', function () {\n runLayout(layoutGraph, time);\n });\n time(' updateInputGraph', function () {\n updateInputGraph(g, layoutGraph);\n });\n });\n}\n\nfunction runLayout(g, time) {\n time(' makeSpaceForEdgeLabels', function () {\n makeSpaceForEdgeLabels(g);\n });\n time(' removeSelfEdges', function () {\n removeSelfEdges(g);\n });\n time(' acyclic', function () {\n _acyclic_js__WEBPACK_IMPORTED_MODULE_3__.run(g);\n });\n time(' nestingGraph.run', function () {\n _nesting_graph_js__WEBPACK_IMPORTED_MODULE_6__.run(g);\n });\n time(' rank', function () {\n (0,_rank_index_js__WEBPACK_IMPORTED_MODULE_5__.rank)(_util_js__WEBPACK_IMPORTED_MODULE_10__.asNonCompoundGraph(g));\n });\n time(' injectEdgeLabelProxies', function () {\n injectEdgeLabelProxies(g);\n });\n time(' removeEmptyRanks', function () {\n _util_js__WEBPACK_IMPORTED_MODULE_10__.removeEmptyRanks(g);\n });\n time(' nestingGraph.cleanup', function () {\n _nesting_graph_js__WEBPACK_IMPORTED_MODULE_6__.cleanup(g);\n });\n time(' normalizeRanks', function () {\n _util_js__WEBPACK_IMPORTED_MODULE_10__.normalizeRanks(g);\n });\n time(' assignRankMinMax', function () {\n assignRankMinMax(g);\n });\n time(' removeEdgeLabelProxies', function () {\n removeEdgeLabelProxies(g);\n });\n time(' normalize.run', function () {\n _normalize_js__WEBPACK_IMPORTED_MODULE_4__.run(g);\n });\n time(' parentDummyChains', function () {\n (0,_parent_dummy_chains_js__WEBPACK_IMPORTED_MODULE_8__.parentDummyChains)(g);\n });\n time(' addBorderSegments', function () {\n (0,_add_border_segments_js__WEBPACK_IMPORTED_MODULE_1__.addBorderSegments)(g);\n });\n time(' order', function () {\n (0,_order_index_js__WEBPACK_IMPORTED_MODULE_7__.order)(g);\n });\n time(' insertSelfEdges', function () {\n insertSelfEdges(g);\n });\n time(' adjustCoordinateSystem', function () {\n _coordinate_system_js__WEBPACK_IMPORTED_MODULE_2__.adjust(g);\n });\n time(' position', function () {\n (0,_position_index_js__WEBPACK_IMPORTED_MODULE_9__.position)(g);\n });\n time(' positionSelfEdges', function () {\n positionSelfEdges(g);\n });\n time(' removeBorderNodes', function () {\n removeBorderNodes(g);\n });\n time(' normalize.undo', function () {\n _normalize_js__WEBPACK_IMPORTED_MODULE_4__.undo(g);\n });\n time(' fixupEdgeLabelCoords', function () {\n fixupEdgeLabelCoords(g);\n });\n time(' undoCoordinateSystem', function () {\n _coordinate_system_js__WEBPACK_IMPORTED_MODULE_2__.undo(g);\n });\n time(' translateGraph', function () {\n translateGraph(g);\n });\n time(' assignNodeIntersects', function () {\n assignNodeIntersects(g);\n });\n time(' reversePoints', function () {\n reversePointsForReversedEdges(g);\n });\n time(' acyclic.undo', function () {\n _acyclic_js__WEBPACK_IMPORTED_MODULE_3__.undo(g);\n });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](inputGraph.nodes(), function (v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](inputGraph.edges(), function (e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](layoutLabel, 'x')) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n minlen: 1,\n weight: 1,\n width: 0,\n height: 0,\n labeloffset: 10,\n labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(\n lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"]({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](graph, graphAttrs))\n );\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](inputGraph.nodes(), function (v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, lodash_es__WEBPACK_IMPORTED_MODULE_15__[\"default\"](selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](inputGraph.edges(), function (e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(\n e,\n lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"]({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](edge, edgeAttrs))\n );\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== 'c') {\n if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n _util_js__WEBPACK_IMPORTED_MODULE_10__.addDummyNode(g, 'edge-proxy', label, '_ep');\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n // @ts-expect-error\n maxRank = lodash_es__WEBPACK_IMPORTED_MODULE_16__[\"default\"](maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'edge-proxy') {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n getExtremes(g.node(v));\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](edge, 'x')) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](edge.points, function (p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](edge, 'x')) {\n edge.x -= minX;\n }\n if (lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](edge, 'y')) {\n edge.y -= minY;\n }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(_util_js__WEBPACK_IMPORTED_MODULE_10__.intersectRect(nodeV, p1));\n edge.points.push(_util_js__WEBPACK_IMPORTED_MODULE_10__.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](edge, 'x')) {\n if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case 'l':\n edge.x -= edge.width / 2 + edge.labeloffset;\n break;\n case 'r':\n edge.x += edge.width / 2 + edge.labeloffset;\n break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(lodash_es__WEBPACK_IMPORTED_MODULE_17__[\"default\"](node.borderLeft));\n var r = g.node(lodash_es__WEBPACK_IMPORTED_MODULE_17__[\"default\"](node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n if (g.node(v).dummy === 'border') {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.edges(), function (e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = _util_js__WEBPACK_IMPORTED_MODULE_10__.buildLayerMatrix(g);\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](layers, function (layer) {\n var orderShift = 0;\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](layer, function (v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](node.selfEdges, function (selfEdge) {\n _util_js__WEBPACK_IMPORTED_MODULE_10__.addDummyNode(\n g,\n 'selfedge',\n {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + ++orderShift,\n e: selfEdge.e,\n label: selfEdge.label,\n },\n '_se'\n );\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'selfedge') {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + (2 * dx) / 3, y: y - dy },\n { x: x + (5 * dx) / 6, y: y - dy },\n { x: x + dx, y: y },\n { x: x + (5 * dx) / 6, y: y + dy },\n { x: x + (2 * dx) / 3, y: y + dy },\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_18__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](attrs, function (v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9sYXlvdXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDYztBQUNnQjtBQUNGO0FBQ25CO0FBQ0k7QUFDTDtBQUNZO0FBQ1Y7QUFDb0I7QUFDZDtBQUNiOztBQUVoQjs7QUFFbEI7QUFDQSx3Q0FBd0MsMkNBQVMsR0FBRyw2Q0FBVztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLElBQUksNENBQVc7QUFDZixHQUFHO0FBQ0g7QUFDQSxJQUFJLGtEQUFnQjtBQUNwQixHQUFHO0FBQ0g7QUFDQSxJQUFJLG9EQUFJLENBQUMseURBQXVCO0FBQ2hDLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsSUFBSSx1REFBcUI7QUFDekIsR0FBRztBQUNIO0FBQ0EsSUFBSSxzREFBb0I7QUFDeEIsR0FBRztBQUNIO0FBQ0EsSUFBSSxxREFBbUI7QUFDdkIsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLElBQUksOENBQWE7QUFDakIsR0FBRztBQUNIO0FBQ0EsSUFBSSwwRUFBaUI7QUFDckIsR0FBRztBQUNIO0FBQ0EsSUFBSSwwRUFBaUI7QUFDckIsR0FBRztBQUNIO0FBQ0EsSUFBSSxzREFBSztBQUNULEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsSUFBSSx5REFBdUI7QUFDM0IsR0FBRztBQUNIO0FBQ0EsSUFBSSw0REFBUTtBQUNaLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxJQUFJLCtDQUFjO0FBQ2xCLEdBQUc7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O0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsRUFBRSxrREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGtEQUFNO0FBQzNCLHFCQUFxQixrREFBTTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSxrREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLEVBQUUsa0RBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHdCQUF3QjtBQUNwRDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsZUFBZSx1REFBcUI7QUFDcEMsRUFBRSxrREFBUztBQUNYO0FBQ0EsSUFBSSxrREFBUztBQUNiO0FBQ0E7QUFDQSxNQUFNLGtEQUFTO0FBQ2YsUUFBUSxtREFBaUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0EsRUFBRSxrREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxpQkFBaUI7QUFDM0IsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxTQUFTLGtEQUFXLENBQUMsa0RBQU07QUFDM0I7O0FBRUE7QUFDQTtBQUNBLEVBQUUsa0RBQVM7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvbGF5b3V0LmpzPzcwODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9ncmFwaGxpYi9pbmRleC5qcyc7XG5pbXBvcnQgeyBhZGRCb3JkZXJTZWdtZW50cyB9IGZyb20gJy4vYWRkLWJvcmRlci1zZWdtZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBjb29yZGluYXRlU3lzdGVtIGZyb20gJy4vY29vcmRpbmF0ZS1zeXN0ZW0uanMnO1xuaW1wb3J0ICogYXMgYWN5Y2xpYyBmcm9tICcuL2FjeWNsaWMuanMnO1xuaW1wb3J0ICogYXMgbm9ybWFsaXplIGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IHJhbmsgfSBmcm9tICcuL3JhbmsvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgbmVzdGluZ0dyYXBoIGZyb20gJy4vbmVzdGluZy1ncmFwaC5qcyc7XG5pbXBvcnQgeyBvcmRlciB9IGZyb20gJy4vb3JkZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgcGFyZW50RHVtbXlDaGFpbnMgfSBmcm9tICcuL3BhcmVudC1kdW1teS1jaGFpbnMuanMnO1xuaW1wb3J0IHsgcG9zaXRpb24gfSBmcm9tICcuL3Bvc2l0aW9uL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgbGF5b3V0IH07XG5cbmZ1bmN0aW9uIGxheW91dChnLCBvcHRzKSB7XG4gIHZhciB0aW1lID0gb3B0cyAmJiBvcHRzLmRlYnVnVGltaW5nID8gdXRpbC50aW1lIDogdXRpbC5ub3RpbWU7XG4gIHRpbWUoJ2xheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGF5b3V0R3JhcGggPSB0aW1lKCcgIGJ1aWxkTGF5b3V0R3JhcGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKTtcbiAgICB9KTtcbiAgICB0aW1lKCcgIHJ1bkxheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1bkxheW91dChsYXlvdXRHcmFwaCwgdGltZSk7XG4gICAgfSk7XG4gICAgdGltZSgnICB1cGRhdGVJbnB1dEdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlSW5wdXRHcmFwaChnLCBsYXlvdXRHcmFwaCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5MYXlvdXQoZywgdGltZSkge1xuICB0aW1lKCcgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscycsIGZ1bmN0aW9uICgpIHtcbiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJlbW92ZVNlbGZFZGdlcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVTZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYycsIGZ1bmN0aW9uICgpIHtcbiAgICBhY3ljbGljLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBuZXN0aW5nR3JhcGgucnVuJywgZnVuY3Rpb24gKCkge1xuICAgIG5lc3RpbmdHcmFwaC5ydW4oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmFuaycsIGZ1bmN0aW9uICgpIHtcbiAgICByYW5rKHV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRW1wdHlSYW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICB1dGlsLnJlbW92ZUVtcHR5UmFua3MoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgbmVzdGluZ0dyYXBoLmNsZWFudXAoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplUmFua3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5ub3JtYWxpemVSYW5rcyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhc3NpZ25SYW5rTWluTWF4JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnblJhbmtNaW5NYXgoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIG5vcm1hbGl6ZS5ydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBwYXJlbnREdW1teUNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJlbnREdW1teUNoYWlucyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhZGRCb3JkZXJTZWdtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBhZGRCb3JkZXJTZWdtZW50cyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBvcmRlcihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbnNlcnRTZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaW5zZXJ0U2VsZkVkZ2VzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS5hZGp1c3QoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb24oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb25TZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb25TZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlQm9yZGVyTm9kZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmVtb3ZlQm9yZGVyTm9kZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplLnVuZG8nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnVuZG8oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgZml4dXBFZGdlTGFiZWxDb29yZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZml4dXBFZGdlTGFiZWxDb29yZHMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS51bmRvKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHRyYW5zbGF0ZUdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgIHRyYW5zbGF0ZUdyYXBoKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJldmVyc2VQb2ludHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYy51bmRvJywgZnVuY3Rpb24gKCkge1xuICAgIGFjeWNsaWMudW5kbyhnKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBDb3BpZXMgZmluYWwgbGF5b3V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGxheW91dCBncmFwaCBiYWNrIHRvIHRoZSBpbnB1dFxuICogZ3JhcGguIFRoaXMgcHJvY2VzcyBvbmx5IGNvcGllcyB3aGl0ZWxpc3RlZCBhdHRyaWJ1dGVzIGZyb20gdGhlIGxheW91dCBncmFwaFxuICogdG8gdGhlIGlucHV0IGdyYXBoLCBzbyBpdCBzZXJ2ZXMgYXMgYSBnb29kIHBsYWNlIHRvIGRldGVybWluZSB3aGF0XG4gKiBhdHRyaWJ1dGVzIGNhbiBpbmZsdWVuY2UgbGF5b3V0LlxuICovXG5mdW5jdGlvbiB1cGRhdGVJbnB1dEdyYXBoKGlucHV0R3JhcGgsIGxheW91dEdyYXBoKSB7XG4gIF8uZm9yRWFjaChpbnB1dEdyYXBoLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGlucHV0TGFiZWwgPSBpbnB1dEdyYXBoLm5vZGUodik7XG4gICAgdmFyIGxheW91dExhYmVsID0gbGF5b3V0R3JhcGgubm9kZSh2KTtcblxuICAgIGlmIChpbnB1dExhYmVsKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcblxuICAgICAgaWYgKGxheW91dEdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgICBpbnB1dExhYmVsLndpZHRoID0gbGF5b3V0TGFiZWwud2lkdGg7XG4gICAgICAgIGlucHV0TGFiZWwuaGVpZ2h0ID0gbGF5b3V0TGFiZWwuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgaW5wdXRMYWJlbCA9IGlucHV0R3JhcGguZWRnZShlKTtcbiAgICB2YXIgbGF5b3V0TGFiZWwgPSBsYXlvdXRHcmFwaC5lZGdlKGUpO1xuXG4gICAgaW5wdXRMYWJlbC5wb2ludHMgPSBsYXlvdXRMYWJlbC5wb2ludHM7XG4gICAgaWYgKF8uaGFzKGxheW91dExhYmVsLCAneCcpKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG4gIGlucHV0R3JhcGguZ3JhcGgoKS53aWR0aCA9IGxheW91dEdyYXBoLmdyYXBoKCkud2lkdGg7XG4gIGlucHV0R3JhcGguZ3JhcGgoKS5oZWlnaHQgPSBsYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodDtcbn1cblxudmFyIGdyYXBoTnVtQXR0cnMgPSBbJ25vZGVzZXAnLCAnZWRnZXNlcCcsICdyYW5rc2VwJywgJ21hcmdpbngnLCAnbWFyZ2lueSddO1xudmFyIGdyYXBoRGVmYXVsdHMgPSB7IHJhbmtzZXA6IDUwLCBlZGdlc2VwOiAyMCwgbm9kZXNlcDogNTAsIHJhbmtkaXI6ICd0YicgfTtcbnZhciBncmFwaEF0dHJzID0gWydhY3ljbGljZXInLCAncmFua2VyJywgJ3JhbmtkaXInLCAnYWxpZ24nXTtcbnZhciBub2RlTnVtQXR0cnMgPSBbJ3dpZHRoJywgJ2hlaWdodCddO1xudmFyIG5vZGVEZWZhdWx0cyA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xudmFyIGVkZ2VOdW1BdHRycyA9IFsnbWlubGVuJywgJ3dlaWdodCcsICd3aWR0aCcsICdoZWlnaHQnLCAnbGFiZWxvZmZzZXQnXTtcbnZhciBlZGdlRGVmYXVsdHMgPSB7XG4gIG1pbmxlbjogMSxcbiAgd2VpZ2h0OiAxLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBsYWJlbG9mZnNldDogMTAsXG4gIGxhYmVscG9zOiAncicsXG59O1xudmFyIGVkZ2VBdHRycyA9IFsnbGFiZWxwb3MnXTtcblxuLypcbiAqIENvbnN0cnVjdHMgYSBuZXcgZ3JhcGggZnJvbSB0aGUgaW5wdXQgZ3JhcGgsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBsYXlvdXQuXG4gKiBUaGlzIHByb2Nlc3MgY29waWVzIG9ubHkgd2hpdGVsaXN0ZWQgYXR0cmlidXRlcyBmcm9tIHRoZSBpbnB1dCBncmFwaCB0byB0aGVcbiAqIGxheW91dCBncmFwaC4gVGh1cyB0aGlzIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIGdvb2QgcGxhY2UgdG8gZGV0ZXJtaW5lIHdoYXRcbiAqIGF0dHJpYnV0ZXMgY2FuIGluZmx1ZW5jZSBsYXlvdXQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCkge1xuICB2YXIgZyA9IG5ldyBHcmFwaCh7IG11bHRpZ3JhcGg6IHRydWUsIGNvbXBvdW5kOiB0cnVlIH0pO1xuICB2YXIgZ3JhcGggPSBjYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtcblxuICBnLnNldEdyYXBoKFxuICAgIF8ubWVyZ2Uoe30sIGdyYXBoRGVmYXVsdHMsIHNlbGVjdE51bWJlckF0dHJzKGdyYXBoLCBncmFwaE51bUF0dHJzKSwgXy5waWNrKGdyYXBoLCBncmFwaEF0dHJzKSlcbiAgKTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGgubm9kZSh2KSk7XG4gICAgZy5zZXROb2RlKHYsIF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSwgbm9kZU51bUF0dHJzKSwgbm9kZURlZmF1bHRzKSk7XG4gICAgZy5zZXRQYXJlbnQodiwgaW5wdXRHcmFwaC5wYXJlbnQodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGguZWRnZShlKSk7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZSxcbiAgICAgIF8ubWVyZ2Uoe30sIGVkZ2VEZWZhdWx0cywgc2VsZWN0TnVtYmVyQXR0cnMoZWRnZSwgZWRnZU51bUF0dHJzKSwgXy5waWNrKGVkZ2UsIGVkZ2VBdHRycykpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGc7XG59XG5cbi8qXG4gKiBUaGlzIGlkZWEgY29tZXMgZnJvbSB0aGUgR2Fuc25lciBwYXBlcjogdG8gYWNjb3VudCBmb3IgZWRnZSBsYWJlbHMgaW4gb3VyXG4gKiBsYXlvdXQgd2Ugc3BsaXQgZWFjaCByYW5rIGluIGhhbGYgYnkgZG91YmxpbmcgbWlubGVuIGFuZCBoYWx2aW5nIHJhbmtzZXAuXG4gKiBUaGVuIHdlIGNhbiBwbGFjZSBsYWJlbHMgYXQgdGhlc2UgbWlkLXBvaW50cyBiZXR3ZWVuIG5vZGVzLlxuICpcbiAqIFdlIGFsc28gYWRkIHNvbWUgbWluaW1hbCBwYWRkaW5nIHRvIHRoZSB3aWR0aCB0byBwdXNoIHRoZSBsYWJlbCBmb3IgdGhlIGVkZ2VcbiAqIGF3YXkgZnJvbSB0aGUgZWRnZSBpdHNlbGYgYSBiaXQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZykge1xuICB2YXIgZ3JhcGggPSBnLmdyYXBoKCk7XG4gIGdyYXBoLnJhbmtzZXAgLz0gMjtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBlZGdlLm1pbmxlbiAqPSAyO1xuICAgIGlmIChlZGdlLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkgIT09ICdjJykge1xuICAgICAgaWYgKGdyYXBoLnJhbmtkaXIgPT09ICdUQicgfHwgZ3JhcGgucmFua2RpciA9PT0gJ0JUJykge1xuICAgICAgICBlZGdlLndpZHRoICs9IGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlLmhlaWdodCArPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qXG4gKiBDcmVhdGVzIHRlbXBvcmFyeSBkdW1teSBub2RlcyB0aGF0IGNhcHR1cmUgdGhlIHJhbmsgaW4gd2hpY2ggZWFjaCBlZGdlJ3NcbiAqIGxhYmVsIGlzIGdvaW5nIHRvLCBpZiBpdCBoYXMgb25lIG9mIG5vbi16ZXJvIHdpZHRoIGFuZCBoZWlnaHQuIFdlIGRvIHRoaXNcbiAqIHNvIHRoYXQgd2UgY2FuIHNhZmVseSByZW1vdmUgZW1wdHkgcmFua3Mgd2hpbGUgcHJlc2VydmluZyBiYWxhbmNlIGZvciB0aGVcbiAqIGxhYmVsJ3MgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLndpZHRoICYmIGVkZ2UuaGVpZ2h0KSB7XG4gICAgICB2YXIgdiA9IGcubm9kZShlLnYpO1xuICAgICAgdmFyIHcgPSBnLm5vZGUoZS53KTtcbiAgICAgIHZhciBsYWJlbCA9IHsgcmFuazogKHcucmFuayAtIHYucmFuaykgLyAyICsgdi5yYW5rLCBlOiBlIH07XG4gICAgICB1dGlsLmFkZER1bW15Tm9kZShnLCAnZWRnZS1wcm94eScsIGxhYmVsLCAnX2VwJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzaWduUmFua01pbk1heChnKSB7XG4gIHZhciBtYXhSYW5rID0gMDtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAobm9kZS5ib3JkZXJUb3ApIHtcbiAgICAgIG5vZGUubWluUmFuayA9IGcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztcbiAgICAgIG5vZGUubWF4UmFuayA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSkucmFuaztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIG1heFJhbmsgPSBfLm1heChtYXhSYW5rLCBub2RlLm1heFJhbmspO1xuICAgIH1cbiAgfSk7XG4gIGcuZ3JhcGgoKS5tYXhSYW5rID0gbWF4UmFuaztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKG5vZGUuZHVtbXkgPT09ICdlZGdlLXByb3h5Jykge1xuICAgICAgZy5lZGdlKG5vZGUuZSkubGFiZWxSYW5rID0gbm9kZS5yYW5rO1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUdyYXBoKGcpIHtcbiAgdmFyIG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhYID0gMDtcbiAgdmFyIG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhZID0gMDtcbiAgdmFyIGdyYXBoTGFiZWwgPSBnLmdyYXBoKCk7XG4gIHZhciBtYXJnaW5YID0gZ3JhcGhMYWJlbC5tYXJnaW54IHx8IDA7XG4gIHZhciBtYXJnaW5ZID0gZ3JhcGhMYWJlbC5tYXJnaW55IHx8IDA7XG5cbiAgZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpIHtcbiAgICB2YXIgeCA9IGF0dHJzLng7XG4gICAgdmFyIHkgPSBhdHRycy55O1xuICAgIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gICAgdmFyIGggPSBhdHRycy5oZWlnaHQ7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHggLSB3IC8gMik7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHggKyB3IC8gMik7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHkgLSBoIC8gMik7XG4gICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkgKyBoIC8gMik7XG4gIH1cblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGdldEV4dHJlbWVzKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChfLmhhcyhlZGdlLCAneCcpKSB7XG4gICAgICBnZXRFeHRyZW1lcyhlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIG1pblggLT0gbWFyZ2luWDtcbiAgbWluWSAtPSBtYXJnaW5ZO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgbm9kZS54IC09IG1pblg7XG4gICAgbm9kZS55IC09IG1pblk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgXy5mb3JFYWNoKGVkZ2UucG9pbnRzLCBmdW5jdGlvbiAocCkge1xuICAgICAgcC54IC09IG1pblg7XG4gICAgICBwLnkgLT0gbWluWTtcbiAgICB9KTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgZWRnZS54IC09IG1pblg7XG4gICAgfVxuICAgIGlmIChfLmhhcyhlZGdlLCAneScpKSB7XG4gICAgICBlZGdlLnkgLT0gbWluWTtcbiAgICB9XG4gIH0pO1xuXG4gIGdyYXBoTGFiZWwud2lkdGggPSBtYXhYIC0gbWluWCArIG1hcmdpblg7XG4gIGdyYXBoTGFiZWwuaGVpZ2h0ID0gbWF4WSAtIG1pblkgKyBtYXJnaW5ZO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Ob2RlSW50ZXJzZWN0cyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgdmFyIG5vZGVWID0gZy5ub2RlKGUudik7XG4gICAgdmFyIG5vZGVXID0gZy5ub2RlKGUudyk7XG4gICAgdmFyIHAxLCBwMjtcbiAgICBpZiAoIWVkZ2UucG9pbnRzKSB7XG4gICAgICBlZGdlLnBvaW50cyA9IFtdO1xuICAgICAgcDEgPSBub2RlVztcbiAgICAgIHAyID0gbm9kZVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAxID0gZWRnZS5wb2ludHNbMF07XG4gICAgICBwMiA9IGVkZ2UucG9pbnRzW2VkZ2UucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBlZGdlLnBvaW50cy51bnNoaWZ0KHV0aWwuaW50ZXJzZWN0UmVjdChub2RlViwgcDEpKTtcbiAgICBlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVywgcDIpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpeHVwRWRnZUxhYmVsQ29vcmRzKGcpIHtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgaWYgKGVkZ2UubGFiZWxwb3MgPT09ICdsJyB8fCBlZGdlLmxhYmVscG9zID09PSAncicpIHtcbiAgICAgICAgZWRnZS53aWR0aCAtPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlZGdlLmxhYmVscG9zKSB7XG4gICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgIGVkZ2UueCAtPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgIGVkZ2UueCArPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLnJldmVyc2VkKSB7XG4gICAgICBlZGdlLnBvaW50cy5yZXZlcnNlKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGlmIChnLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgICB2YXIgdCA9IGcubm9kZShub2RlLmJvcmRlclRvcCk7XG4gICAgICB2YXIgYiA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSk7XG4gICAgICB2YXIgbCA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJMZWZ0KSk7XG4gICAgICB2YXIgciA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJSaWdodCkpO1xuXG4gICAgICBub2RlLndpZHRoID0gTWF0aC5hYnMoci54IC0gbC54KTtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5hYnMoYi55IC0gdC55KTtcbiAgICAgIG5vZGUueCA9IGwueCArIG5vZGUud2lkdGggLyAyO1xuICAgICAgbm9kZS55ID0gdC55ICsgbm9kZS5oZWlnaHQgLyAyO1xuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSAnYm9yZGVyJykge1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGZFZGdlcyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudiA9PT0gZS53KSB7XG4gICAgICB2YXIgbm9kZSA9IGcubm9kZShlLnYpO1xuICAgICAgaWYgKCFub2RlLnNlbGZFZGdlcykge1xuICAgICAgICBub2RlLnNlbGZFZGdlcyA9IFtdO1xuICAgICAgfVxuICAgICAgbm9kZS5zZWxmRWRnZXMucHVzaCh7IGU6IGUsIGxhYmVsOiBnLmVkZ2UoZSkgfSk7XG4gICAgICBnLnJlbW92ZUVkZ2UoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U2VsZkVkZ2VzKGcpIHtcbiAgdmFyIGxheWVycyA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKTtcbiAgXy5mb3JFYWNoKGxheWVycywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIG9yZGVyU2hpZnQgPSAwO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgICAgbm9kZS5vcmRlciA9IGkgKyBvcmRlclNoaWZ0O1xuICAgICAgXy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLCBmdW5jdGlvbiAoc2VsZkVkZ2UpIHtcbiAgICAgICAgdXRpbC5hZGREdW1teU5vZGUoXG4gICAgICAgICAgZyxcbiAgICAgICAgICAnc2VsZmVkZ2UnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoOiBzZWxmRWRnZS5sYWJlbC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogc2VsZkVkZ2UubGFiZWwuaGVpZ2h0LFxuICAgICAgICAgICAgcmFuazogbm9kZS5yYW5rLFxuICAgICAgICAgICAgb3JkZXI6IGkgKyArK29yZGVyU2hpZnQsXG4gICAgICAgICAgICBlOiBzZWxmRWRnZS5lLFxuICAgICAgICAgICAgbGFiZWw6IHNlbGZFZGdlLmxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ19zZSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIG5vZGUuc2VsZkVkZ2VzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGlmIChub2RlLmR1bW15ID09PSAnc2VsZmVkZ2UnKSB7XG4gICAgICB2YXIgc2VsZk5vZGUgPSBnLm5vZGUobm9kZS5lLnYpO1xuICAgICAgdmFyIHggPSBzZWxmTm9kZS54ICsgc2VsZk5vZGUud2lkdGggLyAyO1xuICAgICAgdmFyIHkgPSBzZWxmTm9kZS55O1xuICAgICAgdmFyIGR4ID0gbm9kZS54IC0geDtcbiAgICAgIHZhciBkeSA9IHNlbGZOb2RlLmhlaWdodCAvIDI7XG4gICAgICBnLnNldEVkZ2Uobm9kZS5lLCBub2RlLmxhYmVsKTtcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICAgIG5vZGUubGFiZWwucG9pbnRzID0gW1xuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyBkeCwgeTogeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgKyBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgKyBkeSB9LFxuICAgICAgXTtcbiAgICAgIG5vZGUubGFiZWwueCA9IG5vZGUueDtcbiAgICAgIG5vZGUubGFiZWwueSA9IG5vZGUueTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosIGF0dHJzKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyhfLnBpY2sob2JqLCBhdHRycyksIE51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhdHRycykge1xuICB2YXIgbmV3QXR0cnMgPSB7fTtcbiAgXy5mb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAodiwgaykge1xuICAgIG5ld0F0dHJzW2sudG9Mb3dlckNhc2UoKV0gPSB2O1xuICB9KTtcbiAgcmV0dXJuIG5ld0F0dHJzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/layout.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/nesting-graph.js": /*!********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/nesting-graph.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cleanup\": () => (/* binding */ cleanup),\n/* harmony export */ \"run\": () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/values.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/reduce.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = _util_js__WEBPACK_IMPORTED_MODULE_0__.addDummyNode(g, 'root', {}, '_root');\n var depths = treeDepths(g);\n var height = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.edges(), function (e) {\n g.edge(e).minlen *= nodeSep;\n });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.children(), function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = _util_js__WEBPACK_IMPORTED_MODULE_0__.addBorderNode(g, '_bt');\n var bottom = _util_js__WEBPACK_IMPORTED_MODULE_0__.addBorderNode(g, '_bb');\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](children, function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](children, function (child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.children(), function (v) {\n dfs(v, 1);\n });\n return depths;\n}\n\nfunction sumWeights(g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\n g.edges(),\n function (acc, e) {\n return acc + g.edge(e).weight;\n },\n 0\n );\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9uZXN0aW5nLWdyYXBoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDRzs7QUFFVjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrREFBaUIsY0FBYztBQUM1QztBQUNBLGVBQWUsaURBQUssQ0FBQyxpREFBUSxlQUFlO0FBQzVDOztBQUVBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBOztBQUVBLFlBQVksbURBQWtCO0FBQzlCLGVBQWUsbURBQWtCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsaURBQVM7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0EsMkJBQTJCLHVDQUF1QztBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGlEQUFTO0FBQ2Y7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLGlEQUFRO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9uZXN0aW5nLWdyYXBoLmpzPzIwYmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBydW4sIGNsZWFudXAgfTtcblxuLypcbiAqIEEgbmVzdGluZyBncmFwaCBjcmVhdGVzIGR1bW15IG5vZGVzIGZvciB0aGUgdG9wcyBhbmQgYm90dG9tcyBvZiBzdWJncmFwaHMsXG4gKiBhZGRzIGFwcHJvcHJpYXRlIGVkZ2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBjbHVzdGVyIG5vZGVzIGFyZSBwbGFjZWQgYmV0d2VlblxuICogdGhlc2UgYm91bmRyaWVzLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBncmFwaCBpcyBjb25uZWN0ZWQuXG4gKlxuICogSW4gYWRkaXRpb24gd2UgZW5zdXJlLCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIG1pbmxlbiBwcm9wZXJ0eSwgdGhhdCBub2Rlc1xuICogYW5kIHN1YmdyYXBoIGJvcmRlciBub2RlcyB0byBub3QgZW5kIHVwIG9uIHRoZSBzYW1lIHJhbmsuXG4gKlxuICogUHJlY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBpcyBhIERBR1xuICogICAgMi4gTm9kZXMgaW4gdGhlIGlucHV0IGdyYXBoIGhhcyBhIG1pbmxlbiBhdHRyaWJ1dGVcbiAqXG4gKiBQb3N0Y29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBpcyBjb25uZWN0ZWQuXG4gKiAgICAyLiBEdW1teSBub2RlcyBhcmUgYWRkZWQgZm9yIHRoZSB0b3BzIGFuZCBib3R0b21zIG9mIHN1YmdyYXBocy5cbiAqICAgIDMuIFRoZSBtaW5sZW4gYXR0cmlidXRlIGZvciBub2RlcyBpcyBhZGp1c3RlZCB0byBlbnN1cmUgbm9kZXMgZG8gbm90XG4gKiAgICAgICBnZXQgcGxhY2VkIG9uIHRoZSBzYW1lIHJhbmsgYXMgc3ViZ3JhcGggYm9yZGVyIG5vZGVzLlxuICpcbiAqIFRoZSBuZXN0aW5nIGdyYXBoIGlkZWEgY29tZXMgZnJvbSBTYW5kZXIsIFwiTGF5b3V0IG9mIENvbXBvdW5kIERpcmVjdGVkXG4gKiBHcmFwaHMuXCJcbiAqL1xuZnVuY3Rpb24gcnVuKGcpIHtcbiAgdmFyIHJvb3QgPSB1dGlsLmFkZER1bW15Tm9kZShnLCAncm9vdCcsIHt9LCAnX3Jvb3QnKTtcbiAgdmFyIGRlcHRocyA9IHRyZWVEZXB0aHMoZyk7XG4gIHZhciBoZWlnaHQgPSBfLm1heChfLnZhbHVlcyhkZXB0aHMpKSAtIDE7IC8vIE5vdGU6IGRlcHRocyBpcyBhbiBPYmplY3Qgbm90IGFuIGFycmF5XG4gIHZhciBub2RlU2VwID0gMiAqIGhlaWdodCArIDE7XG5cbiAgZy5ncmFwaCgpLm5lc3RpbmdSb290ID0gcm9vdDtcblxuICAvLyBNdWx0aXBseSBtaW5sZW4gYnkgbm9kZVNlcCB0byBhbGlnbiBub2RlcyBvbiBub24tYm9yZGVyIHJhbmtzLlxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIGcuZWRnZShlKS5taW5sZW4gKj0gbm9kZVNlcDtcbiAgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIGEgd2VpZ2h0IHRoYXQgaXMgc3VmZmljaWVudCB0byBrZWVwIHN1YmdyYXBocyB2ZXJ0aWNhbGx5IGNvbXBhY3RcbiAgdmFyIHdlaWdodCA9IHN1bVdlaWdodHMoZykgKyAxO1xuXG4gIC8vIENyZWF0ZSBib3JkZXIgbm9kZXMgYW5kIGxpbmsgdGhlbSB1cFxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgY2hpbGQpO1xuICB9KTtcblxuICAvLyBTYXZlIHRoZSBtdWx0aXBsaWVyIGZvciBub2RlIGxheWVycyBmb3IgbGF0ZXIgcmVtb3ZhbCBvZiBlbXB0eSBib3JkZXJcbiAgLy8gbGF5ZXJzLlxuICBnLmdyYXBoKCkubm9kZVJhbmtGYWN0b3IgPSBub2RlU2VwO1xufVxuXG5mdW5jdGlvbiBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgdikge1xuICB2YXIgY2hpbGRyZW4gPSBnLmNoaWxkcmVuKHYpO1xuICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGlmICh2ICE9PSByb290KSB7XG4gICAgICBnLnNldEVkZ2Uocm9vdCwgdiwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogbm9kZVNlcCB9KTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRvcCA9IHV0aWwuYWRkQm9yZGVyTm9kZShnLCAnX2J0Jyk7XG4gIHZhciBib3R0b20gPSB1dGlsLmFkZEJvcmRlck5vZGUoZywgJ19iYicpO1xuICB2YXIgbGFiZWwgPSBnLm5vZGUodik7XG5cbiAgZy5zZXRQYXJlbnQodG9wLCB2KTtcbiAgbGFiZWwuYm9yZGVyVG9wID0gdG9wO1xuICBnLnNldFBhcmVudChib3R0b20sIHYpO1xuICBsYWJlbC5ib3JkZXJCb3R0b20gPSBib3R0b207XG5cbiAgXy5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgY2hpbGQpO1xuXG4gICAgdmFyIGNoaWxkTm9kZSA9IGcubm9kZShjaGlsZCk7XG4gICAgdmFyIGNoaWxkVG9wID0gY2hpbGROb2RlLmJvcmRlclRvcCA/IGNoaWxkTm9kZS5ib3JkZXJUb3AgOiBjaGlsZDtcbiAgICB2YXIgY2hpbGRCb3R0b20gPSBjaGlsZE5vZGUuYm9yZGVyQm90dG9tID8gY2hpbGROb2RlLmJvcmRlckJvdHRvbSA6IGNoaWxkO1xuICAgIHZhciB0aGlzV2VpZ2h0ID0gY2hpbGROb2RlLmJvcmRlclRvcCA/IHdlaWdodCA6IDIgKiB3ZWlnaHQ7XG4gICAgdmFyIG1pbmxlbiA9IGNoaWxkVG9wICE9PSBjaGlsZEJvdHRvbSA/IDEgOiBoZWlnaHQgLSBkZXB0aHNbdl0gKyAxO1xuXG4gICAgZy5zZXRFZGdlKHRvcCwgY2hpbGRUb3AsIHtcbiAgICAgIHdlaWdodDogdGhpc1dlaWdodCxcbiAgICAgIG1pbmxlbjogbWlubGVuLFxuICAgICAgbmVzdGluZ0VkZ2U6IHRydWUsXG4gICAgfSk7XG5cbiAgICBnLnNldEVkZ2UoY2hpbGRCb3R0b20sIGJvdHRvbSwge1xuICAgICAgd2VpZ2h0OiB0aGlzV2VpZ2h0LFxuICAgICAgbWlubGVuOiBtaW5sZW4sXG4gICAgICBuZXN0aW5nRWRnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKCFnLnBhcmVudCh2KSkge1xuICAgIGcuc2V0RWRnZShyb290LCB0b3AsIHsgd2VpZ2h0OiAwLCBtaW5sZW46IGhlaWdodCArIGRlcHRoc1t2XSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmVlRGVwdGhzKGcpIHtcbiAgdmFyIGRlcHRocyA9IHt9O1xuICBmdW5jdGlvbiBkZnModiwgZGVwdGgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBnLmNoaWxkcmVuKHYpO1xuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIF8uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGRmcyhjaGlsZCwgZGVwdGggKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkZXB0aHNbdl0gPSBkZXB0aDtcbiAgfVxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBmdW5jdGlvbiAodikge1xuICAgIGRmcyh2LCAxKTtcbiAgfSk7XG4gIHJldHVybiBkZXB0aHM7XG59XG5cbmZ1bmN0aW9uIHN1bVdlaWdodHMoZykge1xuICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgZy5lZGdlcygpLFxuICAgIGZ1bmN0aW9uIChhY2MsIGUpIHtcbiAgICAgIHJldHVybiBhY2MgKyBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH0sXG4gICAgMFxuICApO1xufVxuXG5mdW5jdGlvbiBjbGVhbnVwKGcpIHtcbiAgdmFyIGdyYXBoTGFiZWwgPSBnLmdyYXBoKCk7XG4gIGcucmVtb3ZlTm9kZShncmFwaExhYmVsLm5lc3RpbmdSb290KTtcbiAgZGVsZXRlIGdyYXBoTGFiZWwubmVzdGluZ1Jvb3Q7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgaWYgKGVkZ2UubmVzdGluZ0VkZ2UpIHtcbiAgICAgIGcucmVtb3ZlRWRnZShlKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/nesting-graph.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/normalize.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/normalize.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"run\": () => (/* binding */ run),\n/* harmony export */ \"undo\": () => (/* binding */ undo)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.edges(), function (edge) {\n normalizeEdge(g, edge);\n });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0,\n height: 0,\n edgeLabel: edgeLabel,\n edgeObj: e,\n rank: vRank,\n };\n dummy = _util_js__WEBPACK_IMPORTED_MODULE_0__.addDummyNode(g, 'edge', attrs, '_d');\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n // @ts-expect-error\n attrs.dummy = 'edge-label';\n // @ts-expect-error\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === 'edge-label') {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9ub3JtYWxpemUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUErQjtBQUNHOztBQUViOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHVCQUF1QixlQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtEQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwwQkFBMEI7QUFDOUM7O0FBRUE7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsc0JBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL25vcm1hbGl6ZS5qcz8yMzBjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgcnVuLCB1bmRvIH07XG5cbi8qXG4gKiBCcmVha3MgYW55IGxvbmcgZWRnZXMgaW4gdGhlIGdyYXBoIGludG8gc2hvcnQgc2VnbWVudHMgdGhhdCBzcGFuIDEgbGF5ZXJcbiAqIGVhY2guIFRoaXMgb3BlcmF0aW9uIGlzIHVuZG9hYmxlIHdpdGggdGhlIGRlbm9ybWFsaXplIGZ1bmN0aW9uLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIFRoZSBpbnB1dCBncmFwaCBpcyBhIERBRy5cbiAqICAgIDIuIEVhY2ggbm9kZSBpbiB0aGUgZ3JhcGggaGFzIGEgXCJyYW5rXCIgcHJvcGVydHkuXG4gKlxuICogUG9zdC1jb25kaXRpb246XG4gKlxuICogICAgMS4gQWxsIGVkZ2VzIGluIHRoZSBncmFwaCBoYXZlIGEgbGVuZ3RoIG9mIDEuXG4gKiAgICAyLiBEdW1teSBub2RlcyBhcmUgYWRkZWQgd2hlcmUgZWRnZXMgaGF2ZSBiZWVuIHNwbGl0IGludG8gc2VnbWVudHMuXG4gKiAgICAzLiBUaGUgZ3JhcGggaXMgYXVnbWVudGVkIHdpdGggYSBcImR1bW15Q2hhaW5zXCIgYXR0cmlidXRlIHdoaWNoIGNvbnRhaW5zXG4gKiAgICAgICB0aGUgZmlyc3QgZHVtbXkgaW4gZWFjaCBjaGFpbiBvZiBkdW1teSBub2RlcyBwcm9kdWNlZC5cbiAqL1xuZnVuY3Rpb24gcnVuKGcpIHtcbiAgZy5ncmFwaCgpLmR1bW15Q2hhaW5zID0gW107XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgbm9ybWFsaXplRWRnZShnLCBlZGdlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVkZ2UoZywgZSkge1xuICB2YXIgdiA9IGUudjtcbiAgdmFyIHZSYW5rID0gZy5ub2RlKHYpLnJhbms7XG4gIHZhciB3ID0gZS53O1xuICB2YXIgd1JhbmsgPSBnLm5vZGUodykucmFuaztcbiAgdmFyIG5hbWUgPSBlLm5hbWU7XG4gIHZhciBlZGdlTGFiZWwgPSBnLmVkZ2UoZSk7XG4gIHZhciBsYWJlbFJhbmsgPSBlZGdlTGFiZWwubGFiZWxSYW5rO1xuXG4gIGlmICh3UmFuayA9PT0gdlJhbmsgKyAxKSByZXR1cm47XG5cbiAgZy5yZW1vdmVFZGdlKGUpO1xuXG4gIHZhciBkdW1teSwgYXR0cnMsIGk7XG4gIGZvciAoaSA9IDAsICsrdlJhbms7IHZSYW5rIDwgd1Jhbms7ICsraSwgKyt2UmFuaykge1xuICAgIGVkZ2VMYWJlbC5wb2ludHMgPSBbXTtcbiAgICBhdHRycyA9IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgZWRnZUxhYmVsOiBlZGdlTGFiZWwsXG4gICAgICBlZGdlT2JqOiBlLFxuICAgICAgcmFuazogdlJhbmssXG4gICAgfTtcbiAgICBkdW1teSA9IHV0aWwuYWRkRHVtbXlOb2RlKGcsICdlZGdlJywgYXR0cnMsICdfZCcpO1xuICAgIGlmICh2UmFuayA9PT0gbGFiZWxSYW5rKSB7XG4gICAgICBhdHRycy53aWR0aCA9IGVkZ2VMYWJlbC53aWR0aDtcbiAgICAgIGF0dHJzLmhlaWdodCA9IGVkZ2VMYWJlbC5oZWlnaHQ7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBhdHRycy5kdW1teSA9ICdlZGdlLWxhYmVsJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGF0dHJzLmxhYmVscG9zID0gZWRnZUxhYmVsLmxhYmVscG9zO1xuICAgIH1cbiAgICBnLnNldEVkZ2UodiwgZHVtbXksIHsgd2VpZ2h0OiBlZGdlTGFiZWwud2VpZ2h0IH0sIG5hbWUpO1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBnLmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChkdW1teSk7XG4gICAgfVxuICAgIHYgPSBkdW1teTtcbiAgfVxuXG4gIGcuc2V0RWRnZSh2LCB3LCB7IHdlaWdodDogZWRnZUxhYmVsLndlaWdodCB9LCBuYW1lKTtcbn1cblxuZnVuY3Rpb24gdW5kbyhnKSB7XG4gIF8uZm9yRWFjaChnLmdyYXBoKCkuZHVtbXlDaGFpbnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgdmFyIG9yaWdMYWJlbCA9IG5vZGUuZWRnZUxhYmVsO1xuICAgIHZhciB3O1xuICAgIGcuc2V0RWRnZShub2RlLmVkZ2VPYmosIG9yaWdMYWJlbCk7XG4gICAgd2hpbGUgKG5vZGUuZHVtbXkpIHtcbiAgICAgIHcgPSBnLnN1Y2Nlc3NvcnModilbMF07XG4gICAgICBnLnJlbW92ZU5vZGUodik7XG4gICAgICBvcmlnTGFiZWwucG9pbnRzLnB1c2goeyB4OiBub2RlLngsIHk6IG5vZGUueSB9KTtcbiAgICAgIGlmIChub2RlLmR1bW15ID09PSAnZWRnZS1sYWJlbCcpIHtcbiAgICAgICAgb3JpZ0xhYmVsLnggPSBub2RlLng7XG4gICAgICAgIG9yaWdMYWJlbC55ID0gbm9kZS55O1xuICAgICAgICBvcmlnTGFiZWwud2lkdGggPSBub2RlLndpZHRoO1xuICAgICAgICBvcmlnTGFiZWwuaGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgICB9XG4gICAgICB2ID0gdztcbiAgICAgIG5vZGUgPSBnLm5vZGUodik7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/normalize.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js": /*!*************************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js ***! \*************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addSubgraphConstraints\": () => (/* binding */ addSubgraphConstraints)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n\n\n\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](vs, function (v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9hZGQtc3ViZ3JhcGgtY29uc3RyYWludHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRUc7O0FBRWxDO0FBQ0EsZUFBZTtBQUNmOztBQUVBLEVBQUUsaURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDJCQUEyQjtBQUN0RDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cy5qcz83OTFmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgYWRkU3ViZ3JhcGhDb25zdHJhaW50cyB9O1xuXG5mdW5jdGlvbiBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGcsIGNnLCB2cykge1xuICB2YXIgcHJldiA9IHt9LFxuICAgIHJvb3RQcmV2O1xuXG4gIF8uZm9yRWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgY2hpbGQgPSBnLnBhcmVudCh2KSxcbiAgICAgIHBhcmVudCxcbiAgICAgIHByZXZDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHBhcmVudCA9IGcucGFyZW50KGNoaWxkKTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcHJldkNoaWxkID0gcHJldltwYXJlbnRdO1xuICAgICAgICBwcmV2W3BhcmVudF0gPSBjaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZDaGlsZCA9IHJvb3RQcmV2O1xuICAgICAgICByb290UHJldiA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZDaGlsZCAmJiBwcmV2Q2hpbGQgIT09IGNoaWxkKSB7XG4gICAgICAgIGNnLnNldEVkZ2UocHJldkNoaWxkLCBjaGlsZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLypcbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2ID8gZy5jaGlsZHJlbih2KSA6IGcuY2hpbGRyZW4oKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgIHN1YmdyYXBocyA9IFtdO1xuICAgICAgXy5lYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGRNaW4gPSBkZnMoY2hpbGQpO1xuICAgICAgICBpZiAoZy5jaGlsZHJlbihjaGlsZCkubGVuZ3RoKSB7XG4gICAgICAgICAgc3ViZ3JhcGhzLnB1c2goeyB2OiBjaGlsZCwgb3JkZXI6IGNoaWxkTWluIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgY2hpbGRNaW4pO1xuICAgICAgfSk7XG4gICAgICBfLnJlZHVjZShfLnNvcnRCeShzdWJncmFwaHMsIFwib3JkZXJcIiksIGZ1bmN0aW9uKHByZXYsIGN1cnIpIHtcbiAgICAgICAgY2cuc2V0RWRnZShwcmV2LnYsIGN1cnIudik7XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gZy5ub2RlKHYpLm9yZGVyO1xuICB9XG4gIGRmcyh1bmRlZmluZWQpO1xuICAqL1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/barycenter.js": /*!***********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/barycenter.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"barycenter\": () => (/* binding */ barycenter)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/reduce.js\");\n\n\n\n\nfunction barycenter(g, movable) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](movable, function (v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n inV,\n function (acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + edge.weight * nodeU.order,\n weight: acc.weight + edge.weight,\n };\n },\n { sum: 0, weight: 0 }\n );\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight,\n };\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9iYXJ5Y2VudGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjs7QUFFVDs7QUFFdEI7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7QUFDQTtBQUNBLGVBQWU7QUFDZixNQUFNO0FBQ04sbUJBQW1CLGlEQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2JhcnljZW50ZXIuanM/ZGE1NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGJhcnljZW50ZXIgfTtcblxuZnVuY3Rpb24gYmFyeWNlbnRlcihnLCBtb3ZhYmxlKSB7XG4gIHJldHVybiBfLm1hcChtb3ZhYmxlLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBpblYgPSBnLmluRWRnZXModik7XG4gICAgaWYgKCFpblYubGVuZ3RoKSB7XG4gICAgICByZXR1cm4geyB2OiB2IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSBfLnJlZHVjZShcbiAgICAgICAgaW5WLFxuICAgICAgICBmdW5jdGlvbiAoYWNjLCBlKSB7XG4gICAgICAgICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSksXG4gICAgICAgICAgICBub2RlVSA9IGcubm9kZShlLnYpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdW06IGFjYy5zdW0gKyBlZGdlLndlaWdodCAqIG5vZGVVLm9yZGVyLFxuICAgICAgICAgICAgd2VpZ2h0OiBhY2Mud2VpZ2h0ICsgZWRnZS53ZWlnaHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBzdW06IDAsIHdlaWdodDogMCB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2OiB2LFxuICAgICAgICBiYXJ5Y2VudGVyOiByZXN1bHQuc3VtIC8gcmVzdWx0LndlaWdodCxcbiAgICAgICAgd2VpZ2h0OiByZXN1bHQud2VpZ2h0LFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/barycenter.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js": /*!******************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"buildLayerGraph\": () => (/* binding */ buildLayerGraph)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/uniqueId.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n\n\n\n\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({ compound: true })\n .setGraph({ root: root })\n .setDefaultNodeLabel(function (v) {\n return g.node(v);\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g[relationship](v), function (e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](node, 'minRank')) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank],\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"]('_root'))));\n return v;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9idWlsZC1sYXllci1ncmFwaC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFDaUI7O0FBRXJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFLLEdBQUcsZ0JBQWdCO0FBQ3pDLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7QUFDQSxPQUFPOztBQUVQLEVBQUUsaURBQVM7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0saURBQVM7QUFDZjtBQUNBO0FBQ0Esb0JBQW9CLGlEQUFhO0FBQ2pDLCtCQUErQixtQ0FBbUM7QUFDbEUsT0FBTzs7QUFFUCxVQUFVLGlEQUFLO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixpREFBVTtBQUNsQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvYnVpbGQtbGF5ZXItZ3JhcGguanM/MjBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcblxuZXhwb3J0IHsgYnVpbGRMYXllckdyYXBoIH07XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgZ3JhcGggdGhhdCBjYW4gYmUgdXNlZCB0byBzb3J0IGEgbGF5ZXIgb2Ygbm9kZXMuIFRoZSBncmFwaCB3aWxsXG4gKiBjb250YWluIGFsbCBiYXNlIGFuZCBzdWJncmFwaCBub2RlcyBmcm9tIHRoZSByZXF1ZXN0IGxheWVyIGluIHRoZWlyIG9yaWdpbmFsXG4gKiBoaWVyYXJjaHkgYW5kIGFueSBlZGdlcyB0aGF0IGFyZSBpbmNpZGVudCBvbiB0aGVzZSBub2RlcyBhbmQgYXJlIG9mIHRoZSB0eXBlXG4gKiByZXF1ZXN0ZWQgYnkgdGhlIFwicmVsYXRpb25zaGlwXCIgcGFyYW1ldGVyLlxuICpcbiAqIE5vZGVzIGZyb20gdGhlIHJlcXVlc3RlZCByYW5rIHRoYXQgZG8gbm90IGhhdmUgcGFyZW50cyBhcmUgYXNzaWduZWQgYSByb290XG4gKiBub2RlIGluIHRoZSBvdXRwdXQgZ3JhcGgsIHdoaWNoIGlzIHNldCBpbiB0aGUgcm9vdCBncmFwaCBhdHRyaWJ1dGUuIFRoaXNcbiAqIG1ha2VzIGl0IGVhc3kgdG8gd2FsayB0aGUgaGllcmFyY2h5IG9mIG1vdmFibGUgbm9kZXMgZHVyaW5nIG9yZGVyaW5nLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBCYXNlIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXZlIGEgcmFuayBhdHRyaWJ1dGVcbiAqICAgIDMuIFN1YmdyYXBoIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXMgbWluUmFuayBhbmQgbWF4UmFuayBhdHRyaWJ1dGVzXG4gKiAgICA0LiBFZGdlcyBoYXZlIGFuIGFzc2lnbmVkIHdlaWdodFxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBPdXRwdXQgZ3JhcGggaGFzIGFsbCBub2RlcyBpbiB0aGUgbW92YWJsZSByYW5rIHdpdGggcHJlc2VydmVkXG4gKiAgICAgICBoaWVyYXJjaHkuXG4gKiAgICAyLiBSb290IG5vZGVzIGluIHRoZSBtb3ZhYmxlIGxheWVyIGFyZSBtYWRlIGNoaWxkcmVuIG9mIHRoZSBub2RlXG4gKiAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJvb3QgYXR0cmlidXRlIG9mIHRoZSBncmFwaC5cbiAqICAgIDMuIE5vbi1tb3ZhYmxlIG5vZGVzIGluY2lkZW50IG9uIG1vdmFibGUgbm9kZXMsIHNlbGVjdGVkIGJ5IHRoZVxuICogICAgICAgcmVsYXRpb25zaGlwIHBhcmFtZXRlciwgYXJlIGluY2x1ZGVkIGluIHRoZSBncmFwaCAod2l0aG91dCBoaWVyYXJjaHkpLlxuICogICAgNC4gRWRnZXMgaW5jaWRlbnQgb24gbW92YWJsZSBub2Rlcywgc2VsZWN0ZWQgYnkgdGhlIHJlbGF0aW9uc2hpcFxuICogICAgICAgcGFyYW1ldGVyLCBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBncmFwaC5cbiAqICAgIDUuIFRoZSB3ZWlnaHRzIGZvciBjb3BpZWQgZWRnZXMgYXJlIGFnZ3JlZ2F0ZWQgYXMgbmVlZCwgc2luY2UgdGhlIG91dHB1dFxuICogICAgICAgZ3JhcGggaXMgbm90IGEgbXVsdGktZ3JhcGguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApIHtcbiAgdmFyIHJvb3QgPSBjcmVhdGVSb290Tm9kZShnKSxcbiAgICByZXN1bHQgPSBuZXcgR3JhcGgoeyBjb21wb3VuZDogdHJ1ZSB9KVxuICAgICAgLnNldEdyYXBoKHsgcm9vdDogcm9vdCB9KVxuICAgICAgLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcubm9kZSh2KTtcbiAgICAgIH0pO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodiksXG4gICAgICBwYXJlbnQgPSBnLnBhcmVudCh2KTtcblxuICAgIGlmIChub2RlLnJhbmsgPT09IHJhbmsgfHwgKG5vZGUubWluUmFuayA8PSByYW5rICYmIHJhbmsgPD0gbm9kZS5tYXhSYW5rKSkge1xuICAgICAgcmVzdWx0LnNldE5vZGUodik7XG4gICAgICByZXN1bHQuc2V0UGFyZW50KHYsIHBhcmVudCB8fCByb290KTtcblxuICAgICAgLy8gVGhpcyBhc3N1bWVzIHdlIGhhdmUgb25seSBzaG9ydCBlZGdlcyFcbiAgICAgIF8uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciB1ID0gZS52ID09PSB2ID8gZS53IDogZS52LFxuICAgICAgICAgIGVkZ2UgPSByZXN1bHQuZWRnZSh1LCB2KSxcbiAgICAgICAgICB3ZWlnaHQgPSAhXy5pc1VuZGVmaW5lZChlZGdlKSA/IGVkZ2Uud2VpZ2h0IDogMDtcbiAgICAgICAgcmVzdWx0LnNldEVkZ2UodSwgdiwgeyB3ZWlnaHQ6IGcuZWRnZShlKS53ZWlnaHQgKyB3ZWlnaHQgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF8uaGFzKG5vZGUsICdtaW5SYW5rJykpIHtcbiAgICAgICAgcmVzdWx0LnNldE5vZGUodiwge1xuICAgICAgICAgIGJvcmRlckxlZnQ6IG5vZGUuYm9yZGVyTGVmdFtyYW5rXSxcbiAgICAgICAgICBib3JkZXJSaWdodDogbm9kZS5ib3JkZXJSaWdodFtyYW5rXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSb290Tm9kZShnKSB7XG4gIHZhciB2O1xuICB3aGlsZSAoZy5oYXNOb2RlKCh2ID0gXy51bmlxdWVJZCgnX3Jvb3QnKSkpKTtcbiAgcmV0dXJuIHY7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/cross-count.js": /*!************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/cross-count.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"crossCount\": () => (/* binding */ crossCount)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/zipObject.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/flatten.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/sortBy.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n\n\n\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](\n southLayer,\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](southLayer, function (v, i) {\n return i;\n })\n );\n var southEntries = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](northLayer, function (v) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.outEdges(v), function (e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }),\n 'pos'\n );\n })\n );\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](new Array(treeSize), function () {\n return 0;\n });\n\n // Calculate the weighted crossings\n var cc = 0;\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\n // @ts-expect-error\n southEntries.forEach(function (entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n // @ts-expect-error\n while (index > 0) {\n // @ts-expect-error\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n // @ts-expect-error\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n })\n );\n\n return cc;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9jcm9zcy1jb3VudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7O0FBRVQ7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaURBQVc7QUFDNUI7QUFDQSxJQUFJLGlEQUFLO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxxQkFBcUIsaURBQVM7QUFDOUIsSUFBSSxpREFBSztBQUNULGFBQWEsaURBQVE7QUFDckIsUUFBUSxpREFBSztBQUNiLG1CQUFtQjtBQUNuQixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpREFBSztBQUNsQjtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUUsaURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvY3Jvc3MtY291bnQuanM/ZjBiMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGNyb3NzQ291bnQgfTtcblxuLypcbiAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGxheWVyaW5nIChhbiBhcnJheSBvZiBsYXllcnMsIGVhY2ggd2l0aCBhbiBhcnJheSBvZlxuICogb3JkZXJlcmQgbm9kZXMpIGFuZCBhIGdyYXBoIGFuZCByZXR1cm5zIGEgd2VpZ2h0ZWQgY3Jvc3NpbmcgY291bnQuXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gSW5wdXQgZ3JhcGggbXVzdCBiZSBzaW1wbGUgKG5vdCBhIG11bHRpZ3JhcGgpLCBkaXJlY3RlZCwgYW5kIGluY2x1ZGVcbiAqICAgICAgIG9ubHkgc2ltcGxlIGVkZ2VzLlxuICogICAgMi4gRWRnZXMgaW4gdGhlIGlucHV0IGdyYXBoIG11c3QgaGF2ZSBhc3NpZ25lZCB3ZWlnaHRzLlxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBUaGUgZ3JhcGggYW5kIGxheWVyaW5nIG1hdHJpeCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gaXMgZGVyaXZlZCBmcm9tIEJhcnRoLCBldCBhbC4sIFwiQmlsYXllciBDcm9zcyBDb3VudGluZy5cIlxuICovXG5mdW5jdGlvbiBjcm9zc0NvdW50KGcsIGxheWVyaW5nKSB7XG4gIHZhciBjYyA9IDA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGF5ZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICBjYyArPSB0d29MYXllckNyb3NzQ291bnQoZywgbGF5ZXJpbmdbaSAtIDFdLCBsYXllcmluZ1tpXSk7XG4gIH1cbiAgcmV0dXJuIGNjO1xufVxuXG5mdW5jdGlvbiB0d29MYXllckNyb3NzQ291bnQoZywgbm9ydGhMYXllciwgc291dGhMYXllcikge1xuICAvLyBTb3J0IGFsbCBvZiB0aGUgZWRnZXMgYmV0d2VlbiB0aGUgbm9ydGggYW5kIHNvdXRoIGxheWVycyBieSB0aGVpciBwb3NpdGlvblxuICAvLyBpbiB0aGUgbm9ydGggbGF5ZXIgYW5kIHRoZW4gdGhlIHNvdXRoLiBNYXAgdGhlc2UgZWRnZXMgdG8gdGhlIHBvc2l0aW9uIG9mXG4gIC8vIHRoZWlyIGhlYWQgaW4gdGhlIHNvdXRoIGxheWVyLlxuICB2YXIgc291dGhQb3MgPSBfLnppcE9iamVjdChcbiAgICBzb3V0aExheWVyLFxuICAgIF8ubWFwKHNvdXRoTGF5ZXIsIGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9KVxuICApO1xuICB2YXIgc291dGhFbnRyaWVzID0gXy5mbGF0dGVuKFxuICAgIF8ubWFwKG5vcnRoTGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gXy5zb3J0QnkoXG4gICAgICAgIF8ubWFwKGcub3V0RWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcG9zOiBzb3V0aFBvc1tlLnddLCB3ZWlnaHQ6IGcuZWRnZShlKS53ZWlnaHQgfTtcbiAgICAgICAgfSksXG4gICAgICAgICdwb3MnXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgLy8gQnVpbGQgdGhlIGFjY3VtdWxhdG9yIHRyZWVcbiAgdmFyIGZpcnN0SW5kZXggPSAxO1xuICB3aGlsZSAoZmlyc3RJbmRleCA8IHNvdXRoTGF5ZXIubGVuZ3RoKSBmaXJzdEluZGV4IDw8PSAxO1xuICB2YXIgdHJlZVNpemUgPSAyICogZmlyc3RJbmRleCAtIDE7XG4gIGZpcnN0SW5kZXggLT0gMTtcbiAgdmFyIHRyZWUgPSBfLm1hcChuZXcgQXJyYXkodHJlZVNpemUpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgd2VpZ2h0ZWQgY3Jvc3NpbmdzXG4gIHZhciBjYyA9IDA7XG4gIF8uZm9yRWFjaChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgc291dGhFbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICB2YXIgaW5kZXggPSBlbnRyeS5wb3MgKyBmaXJzdEluZGV4O1xuICAgICAgdHJlZVtpbmRleF0gKz0gZW50cnkud2VpZ2h0O1xuICAgICAgdmFyIHdlaWdodFN1bSA9IDA7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgaWYgKGluZGV4ICUgMikge1xuICAgICAgICAgIHdlaWdodFN1bSArPSB0cmVlW2luZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpbmRleCA9IChpbmRleCAtIDEpID4+IDE7XG4gICAgICAgIHRyZWVbaW5kZXhdICs9IGVudHJ5LndlaWdodDtcbiAgICAgIH1cbiAgICAgIGNjICs9IGVudHJ5LndlaWdodCAqIHdlaWdodFN1bTtcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBjYztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/cross-count.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/index.js": /*!******************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/index.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"order\": () => (/* binding */ order)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/cloneDeep.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n/* harmony import */ var _add_subgraph_constraints_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-subgraph-constraints.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js\");\n/* harmony import */ var _build_layer_graph_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./build-layer-graph.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js\");\n/* harmony import */ var _cross_count_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cross-count.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/cross-count.js\");\n/* harmony import */ var _init_order_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./init-order.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/init-order.js\");\n/* harmony import */ var _sort_subgraph_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sort-subgraph.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js\");\n\n\n\n\n\n\n\n\n\n\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = _util_js__WEBPACK_IMPORTED_MODULE_1__.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](1, maxRank + 1), 'inEdges'),\n upLayerGraphs = buildLayerGraphs(g, lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](maxRank - 1, -1, -1), 'outEdges');\n\n var layering = (0,_init_order_js__WEBPACK_IMPORTED_MODULE_5__.initOrder)(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = _util_js__WEBPACK_IMPORTED_MODULE_1__.buildLayerMatrix(g);\n var cc = (0,_cross_count_js__WEBPACK_IMPORTED_MODULE_4__.crossCount)(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](ranks, function (rank) {\n return (0,_build_layer_graph_js__WEBPACK_IMPORTED_MODULE_3__.buildLayerGraph)(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph();\n lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](layerGraphs, function (lg) {\n var root = lg.graph().root;\n var sorted = (0,_sort_subgraph_js__WEBPACK_IMPORTED_MODULE_6__.sortSubgraph)(lg, root, cg, biasRight);\n lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](sorted.vs, function (v, i) {\n lg.node(v).order = i;\n });\n (0,_add_subgraph_constraints_js__WEBPACK_IMPORTED_MODULE_2__.addSubgraphConstraints)(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](layering, function (layer) {\n lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](layer, function (v, i) {\n g.node(v).order = i;\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDaUI7QUFDYjtBQUNvQztBQUNkO0FBQ1g7QUFDRjtBQUNNOztBQUVqQzs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkNBQVk7QUFDNUIsMENBQTBDLGlEQUFPO0FBQ2pELHdDQUF3QyxpREFBTzs7QUFFL0MsaUJBQWlCLHlEQUFTO0FBQzFCOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGNBQWM7QUFDOUM7O0FBRUEsZUFBZSxzREFBcUI7QUFDcEMsYUFBYSwyREFBVTtBQUN2QjtBQUNBO0FBQ0EsYUFBYSxpREFBVztBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVMsaURBQUs7QUFDZCxXQUFXLHNFQUFlO0FBQzFCLEdBQUc7QUFDSDs7QUFFQTtBQUNBLGVBQWUscURBQUs7QUFDcEIsRUFBRSxrREFBUztBQUNYO0FBQ0EsaUJBQWlCLCtEQUFZO0FBQzdCLElBQUksa0RBQVM7QUFDYjtBQUNBLEtBQUs7QUFDTCxJQUFJLG9GQUFzQjtBQUMxQixHQUFHO0FBQ0g7O0FBRUE7QUFDQSxFQUFFLGtEQUFTO0FBQ1gsSUFBSSxrREFBUztBQUNiO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2luZGV4LmpzP2QxZWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi8uLi9ncmFwaGxpYi9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgYWRkU3ViZ3JhcGhDb25zdHJhaW50cyB9IGZyb20gJy4vYWRkLXN1YmdyYXBoLWNvbnN0cmFpbnRzLmpzJztcbmltcG9ydCB7IGJ1aWxkTGF5ZXJHcmFwaCB9IGZyb20gJy4vYnVpbGQtbGF5ZXItZ3JhcGguanMnO1xuaW1wb3J0IHsgY3Jvc3NDb3VudCB9IGZyb20gJy4vY3Jvc3MtY291bnQuanMnO1xuaW1wb3J0IHsgaW5pdE9yZGVyIH0gZnJvbSAnLi9pbml0LW9yZGVyLmpzJztcbmltcG9ydCB7IHNvcnRTdWJncmFwaCB9IGZyb20gJy4vc29ydC1zdWJncmFwaC5qcyc7XG5cbmV4cG9ydCB7IG9yZGVyIH07XG5cbi8qXG4gKiBBcHBsaWVzIGhldXJpc3RpY3MgdG8gbWluaW1pemUgZWRnZSBjcm9zc2luZ3MgaW4gdGhlIGdyYXBoIGFuZCBzZXRzIHRoZSBiZXN0XG4gKiBvcmRlciBzb2x1dGlvbiBhcyBhbiBvcmRlciBhdHRyaWJ1dGUgb24gZWFjaCBub2RlLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG11c3QgYmUgREFHXG4gKiAgICAyLiBHcmFwaCBub2RlcyBtdXN0IGJlIG9iamVjdHMgd2l0aCBhIFwicmFua1wiIGF0dHJpYnV0ZVxuICogICAgMy4gR3JhcGggZWRnZXMgbXVzdCBoYXZlIHRoZSBcIndlaWdodFwiIGF0dHJpYnV0ZVxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBub2RlcyB3aWxsIGhhdmUgYW4gXCJvcmRlclwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGVcbiAqICAgICAgIGFsZ29yaXRobS5cbiAqL1xuZnVuY3Rpb24gb3JkZXIoZykge1xuICB2YXIgbWF4UmFuayA9IHV0aWwubWF4UmFuayhnKSxcbiAgICBkb3duTGF5ZXJHcmFwaHMgPSBidWlsZExheWVyR3JhcGhzKGcsIF8ucmFuZ2UoMSwgbWF4UmFuayArIDEpLCAnaW5FZGdlcycpLFxuICAgIHVwTGF5ZXJHcmFwaHMgPSBidWlsZExheWVyR3JhcGhzKGcsIF8ucmFuZ2UobWF4UmFuayAtIDEsIC0xLCAtMSksICdvdXRFZGdlcycpO1xuXG4gIHZhciBsYXllcmluZyA9IGluaXRPcmRlcihnKTtcbiAgYXNzaWduT3JkZXIoZywgbGF5ZXJpbmcpO1xuXG4gIHZhciBiZXN0Q0MgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgYmVzdDtcblxuICBmb3IgKHZhciBpID0gMCwgbGFzdEJlc3QgPSAwOyBsYXN0QmVzdCA8IDQ7ICsraSwgKytsYXN0QmVzdCkge1xuICAgIHN3ZWVwTGF5ZXJHcmFwaHMoaSAlIDIgPyBkb3duTGF5ZXJHcmFwaHMgOiB1cExheWVyR3JhcGhzLCBpICUgNCA+PSAyKTtcblxuICAgIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICAgIHZhciBjYyA9IGNyb3NzQ291bnQoZywgbGF5ZXJpbmcpO1xuICAgIGlmIChjYyA8IGJlc3RDQykge1xuICAgICAgbGFzdEJlc3QgPSAwO1xuICAgICAgYmVzdCA9IF8uY2xvbmVEZWVwKGxheWVyaW5nKTtcbiAgICAgIGJlc3RDQyA9IGNjO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbk9yZGVyKGcsIGJlc3QpO1xufVxuXG5mdW5jdGlvbiBidWlsZExheWVyR3JhcGhzKGcsIHJhbmtzLCByZWxhdGlvbnNoaXApIHtcbiAgcmV0dXJuIF8ubWFwKHJhbmtzLCBmdW5jdGlvbiAocmFuaykge1xuICAgIHJldHVybiBidWlsZExheWVyR3JhcGgoZywgcmFuaywgcmVsYXRpb25zaGlwKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3ZWVwTGF5ZXJHcmFwaHMobGF5ZXJHcmFwaHMsIGJpYXNSaWdodCkge1xuICB2YXIgY2cgPSBuZXcgR3JhcGgoKTtcbiAgXy5mb3JFYWNoKGxheWVyR3JhcGhzLCBmdW5jdGlvbiAobGcpIHtcbiAgICB2YXIgcm9vdCA9IGxnLmdyYXBoKCkucm9vdDtcbiAgICB2YXIgc29ydGVkID0gc29ydFN1YmdyYXBoKGxnLCByb290LCBjZywgYmlhc1JpZ2h0KTtcbiAgICBfLmZvckVhY2goc29ydGVkLnZzLCBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgbGcubm9kZSh2KS5vcmRlciA9IGk7XG4gICAgfSk7XG4gICAgYWRkU3ViZ3JhcGhDb25zdHJhaW50cyhsZywgY2csIHNvcnRlZC52cyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25PcmRlcihnLCBsYXllcmluZykge1xuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uIChsYXllcikge1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIGcubm9kZSh2KS5vcmRlciA9IGk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/init-order.js": /*!***********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/init-order.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initOrder\": () => (/* binding */ initOrder)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/sortBy.js\");\n\n\n\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.nodes(), function (v) {\n return !g.children(v).length;\n });\n var maxRank = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](simpleNodes, function (v) {\n return g.node(v).rank;\n })\n );\n var layers = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](maxRank + 1), function () {\n return [];\n });\n\n function dfs(v) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](g.successors(v), dfs);\n }\n\n var orderedVs = lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](simpleNodes, function (v) {\n return g.node(v).rank;\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](orderedVs, dfs);\n\n return layers;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9pbml0LW9yZGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQStCOztBQUVWOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpREFBUTtBQUM1QjtBQUNBLEdBQUc7QUFDSCxnQkFBZ0IsaURBQUs7QUFDckIsSUFBSSxpREFBSztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZUFBZSxpREFBSyxDQUFDLGlEQUFPO0FBQzVCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLFFBQVEsaURBQUs7QUFDYjtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlEQUFTO0FBQ2I7O0FBRUEsa0JBQWtCLGlEQUFRO0FBQzFCO0FBQ0EsR0FBRztBQUNILEVBQUUsaURBQVM7O0FBRVg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2luaXQtb3JkZXIuanM/ZDNiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGluaXRPcmRlciB9O1xuXG4vKlxuICogQXNzaWducyBhbiBpbml0aWFsIG9yZGVyIHZhbHVlIGZvciBlYWNoIG5vZGUgYnkgcGVyZm9ybWluZyBhIERGUyBzZWFyY2hcbiAqIHN0YXJ0aW5nIGZyb20gbm9kZXMgaW4gdGhlIGZpcnN0IHJhbmsuIE5vZGVzIGFyZSBhc3NpZ25lZCBhbiBvcmRlciBpbiB0aGVpclxuICogcmFuayBhcyB0aGV5IGFyZSBmaXJzdCB2aXNpdGVkLlxuICpcbiAqIFRoaXMgYXBwcm9hY2ggY29tZXMgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQSBUZWNobmlxdWUgZm9yIERyYXdpbmcgRGlyZWN0ZWRcbiAqIEdyYXBocy5cIlxuICpcbiAqIFJldHVybnMgYSBsYXllcmluZyBtYXRyaXggd2l0aCBhbiBhcnJheSBwZXIgbGF5ZXIgYW5kIGVhY2ggbGF5ZXIgc29ydGVkIGJ5XG4gKiB0aGUgb3JkZXIgb2YgaXRzIG5vZGVzLlxuICovXG5mdW5jdGlvbiBpbml0T3JkZXIoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuICB2YXIgc2ltcGxlTm9kZXMgPSBfLmZpbHRlcihnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuICFnLmNoaWxkcmVuKHYpLmxlbmd0aDtcbiAgfSk7XG4gIHZhciBtYXhSYW5rID0gXy5tYXgoXG4gICAgXy5tYXAoc2ltcGxlTm9kZXMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gICAgfSlcbiAgKTtcbiAgdmFyIGxheWVycyA9IF8ubWFwKF8ucmFuZ2UobWF4UmFuayArIDEpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGxheWVyc1tub2RlLnJhbmtdLnB1c2godik7XG4gICAgXy5mb3JFYWNoKGcuc3VjY2Vzc29ycyh2KSwgZGZzKTtcbiAgfVxuXG4gIHZhciBvcmRlcmVkVnMgPSBfLnNvcnRCeShzaW1wbGVOb2RlcywgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gIH0pO1xuICBfLmZvckVhY2gob3JkZXJlZFZzLCBkZnMpO1xuXG4gIHJldHVybiBsYXllcnM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/init-order.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js": /*!******************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"resolveConflicts\": () => (/* binding */ resolveConflicts)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/pick.js\");\n\n\n\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](entries, function (entry, i) {\n var tmp = (mappedEntries[entry.v] = {\n indegree: 0,\n in: [],\n out: [],\n vs: [entry.v],\n i: i,\n });\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](entry.barycenter)) {\n // @ts-expect-error\n tmp.barycenter = entry.barycenter;\n // @ts-expect-error\n tmp.weight = entry.weight;\n }\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](cg.edges(), function (e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](entryV) && !lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](mappedEntries, function (entry) {\n // @ts-expect-error\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function (uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](uEntry.barycenter) ||\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter\n ) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function (wEntry) {\n wEntry['in'].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](entry['in'].reverse(), handleIn(entry));\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](entry.out, handleOut(entry));\n }\n\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](entries, function (entry) {\n return !entry.merged;\n }),\n function (entry) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](entry, ['vs', 'i', 'barycenter', 'weight']);\n }\n );\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9yZXNvbHZlLWNvbmZsaWN0cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7O0FBRUg7O0FBRTVCO0FBQ0Esd0NBQXdDLHVCQUF1QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0JBQXNCO0FBQ3hELDhCQUE4QixFQUFFO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QywwQkFBMEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFNBQVMsaURBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQSxTQUFTLGlEQUFhLGFBQWEsaURBQWE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxrQkFBa0IsaURBQVE7QUFDMUI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaURBQWE7QUFDckIsUUFBUSxpREFBYTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlEQUFTO0FBQ2IsSUFBSSxpREFBUztBQUNiOztBQUVBLFNBQVMsaURBQUs7QUFDZCxJQUFJLGlEQUFRO0FBQ1o7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhLGlEQUFNO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvcmVzb2x2ZS1jb25mbGljdHMuanM/OTY5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IHJlc29sdmVDb25mbGljdHMgfTtcblxuLypcbiAqIEdpdmVuIGEgbGlzdCBvZiBlbnRyaWVzIG9mIHRoZSBmb3JtIHt2LCBiYXJ5Y2VudGVyLCB3ZWlnaHR9IGFuZCBhXG4gKiBjb25zdHJhaW50IGdyYXBoIHRoaXMgZnVuY3Rpb24gd2lsbCByZXNvbHZlIGFueSBjb25mbGljdHMgYmV0d2VlbiB0aGVcbiAqIGNvbnN0cmFpbnQgZ3JhcGggYW5kIHRoZSBiYXJ5Y2VudGVycyBmb3IgdGhlIGVudHJpZXMuIElmIHRoZSBiYXJ5Y2VudGVycyBmb3JcbiAqIGFuIGVudHJ5IHdvdWxkIHZpb2xhdGUgYSBjb25zdHJhaW50IGluIHRoZSBjb25zdHJhaW50IGdyYXBoIHRoZW4gd2UgY29hbGVzY2VcbiAqIHRoZSBub2RlcyBpbiB0aGUgY29uZmxpY3QgaW50byBhIG5ldyBub2RlIHRoYXQgcmVzcGVjdHMgdGhlIGNvbnRyYWludCBhbmRcbiAqIGFnZ3JlZ2F0ZXMgYmFyeWNlbnRlciBhbmQgd2VpZ2h0IGluZm9ybWF0aW9uLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIGluIEZvcnN0ZXIsIFwiQSBGYXN0IGFuZFxuICogU2ltcGxlIEh1ZXJpc3RpYyBmb3IgQ29uc3RyYWluZWQgVHdvLUxldmVsIENyb3NzaW5nIFJlZHVjdGlvbixcIiB0aG91Z2h0IGl0XG4gKiBkaWZmZXJzIGluIHNvbWUgc3BlY2lmaWMgZGV0YWlscy5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBFYWNoIGVudHJ5IGhhcyB0aGUgZm9ybSB7diwgYmFyeWNlbnRlciwgd2VpZ2h0fSwgb3IgaWYgdGhlIG5vZGUgaGFzXG4gKiAgICAgICBubyBiYXJ5Y2VudGVyLCB0aGVuIHt2fS5cbiAqXG4gKiBSZXR1cm5zOlxuICpcbiAqICAgIEEgbmV3IGxpc3Qgb2YgZW50cmllcyBvZiB0aGUgZm9ybSB7dnMsIGksIGJhcnljZW50ZXIsIHdlaWdodH0uIFRoZSBsaXN0XG4gKiAgICBgdnNgIG1heSBlaXRoZXIgYmUgYSBzaW5nbGV0b24gb3IgaXQgbWF5IGJlIGFuIGFnZ3JlZ2F0aW9uIG9mIG5vZGVzXG4gKiAgICBvcmRlcmVkIHN1Y2ggdGhhdCB0aGV5IGRvIG5vdCB2aW9sYXRlIGNvbnN0cmFpbnRzIGZyb20gdGhlIGNvbnN0cmFpbnRcbiAqICAgIGdyYXBoLiBUaGUgcHJvcGVydHkgYGlgIGlzIHRoZSBsb3dlc3Qgb3JpZ2luYWwgaW5kZXggb2YgYW55IG9mIHRoZVxuICogICAgZWxlbWVudHMgaW4gYHZzYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNvbmZsaWN0cyhlbnRyaWVzLCBjZykge1xuICB2YXIgbWFwcGVkRW50cmllcyA9IHt9O1xuICBfLmZvckVhY2goZW50cmllcywgZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gICAgdmFyIHRtcCA9IChtYXBwZWRFbnRyaWVzW2VudHJ5LnZdID0ge1xuICAgICAgaW5kZWdyZWU6IDAsXG4gICAgICBpbjogW10sXG4gICAgICBvdXQ6IFtdLFxuICAgICAgdnM6IFtlbnRyeS52XSxcbiAgICAgIGk6IGksXG4gICAgfSk7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVudHJ5LmJhcnljZW50ZXIpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB0bXAuYmFyeWNlbnRlciA9IGVudHJ5LmJhcnljZW50ZXI7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB0bXAud2VpZ2h0ID0gZW50cnkud2VpZ2h0O1xuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGNnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVudHJ5ViA9IG1hcHBlZEVudHJpZXNbZS52XTtcbiAgICB2YXIgZW50cnlXID0gbWFwcGVkRW50cmllc1tlLnddO1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlbnRyeVYpICYmICFfLmlzVW5kZWZpbmVkKGVudHJ5VykpIHtcbiAgICAgIGVudHJ5Vy5pbmRlZ3JlZSsrO1xuICAgICAgZW50cnlWLm91dC5wdXNoKG1hcHBlZEVudHJpZXNbZS53XSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgc291cmNlU2V0ID0gXy5maWx0ZXIobWFwcGVkRW50cmllcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiAhZW50cnkuaW5kZWdyZWU7XG4gIH0pO1xuXG4gIHJldHVybiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KTtcbn1cblxuZnVuY3Rpb24gZG9SZXNvbHZlQ29uZmxpY3RzKHNvdXJjZVNldCkge1xuICB2YXIgZW50cmllcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUluKHZFbnRyeSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodUVudHJ5KSB7XG4gICAgICBpZiAodUVudHJ5Lm1lcmdlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIF8uaXNVbmRlZmluZWQodUVudHJ5LmJhcnljZW50ZXIpIHx8XG4gICAgICAgIF8uaXNVbmRlZmluZWQodkVudHJ5LmJhcnljZW50ZXIpIHx8XG4gICAgICAgIHVFbnRyeS5iYXJ5Y2VudGVyID49IHZFbnRyeS5iYXJ5Y2VudGVyXG4gICAgICApIHtcbiAgICAgICAgbWVyZ2VFbnRyaWVzKHZFbnRyeSwgdUVudHJ5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlT3V0KHZFbnRyeSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAod0VudHJ5KSB7XG4gICAgICB3RW50cnlbJ2luJ10ucHVzaCh2RW50cnkpO1xuICAgICAgaWYgKC0td0VudHJ5LmluZGVncmVlID09PSAwKSB7XG4gICAgICAgIHNvdXJjZVNldC5wdXNoKHdFbnRyeSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHdoaWxlIChzb3VyY2VTZXQubGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gc291cmNlU2V0LnBvcCgpO1xuICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgXy5mb3JFYWNoKGVudHJ5WydpbiddLnJldmVyc2UoKSwgaGFuZGxlSW4oZW50cnkpKTtcbiAgICBfLmZvckVhY2goZW50cnkub3V0LCBoYW5kbGVPdXQoZW50cnkpKTtcbiAgfVxuXG4gIHJldHVybiBfLm1hcChcbiAgICBfLmZpbHRlcihlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIHJldHVybiAhZW50cnkubWVyZ2VkO1xuICAgIH0pLFxuICAgIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuIF8ucGljayhlbnRyeSwgWyd2cycsICdpJywgJ2JhcnljZW50ZXInLCAnd2VpZ2h0J10pO1xuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VFbnRyaWVzKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBzdW0gPSAwO1xuICB2YXIgd2VpZ2h0ID0gMDtcblxuICBpZiAodGFyZ2V0LndlaWdodCkge1xuICAgIHN1bSArPSB0YXJnZXQuYmFyeWNlbnRlciAqIHRhcmdldC53ZWlnaHQ7XG4gICAgd2VpZ2h0ICs9IHRhcmdldC53ZWlnaHQ7XG4gIH1cblxuICBpZiAoc291cmNlLndlaWdodCkge1xuICAgIHN1bSArPSBzb3VyY2UuYmFyeWNlbnRlciAqIHNvdXJjZS53ZWlnaHQ7XG4gICAgd2VpZ2h0ICs9IHNvdXJjZS53ZWlnaHQ7XG4gIH1cblxuICB0YXJnZXQudnMgPSBzb3VyY2UudnMuY29uY2F0KHRhcmdldC52cyk7XG4gIHRhcmdldC5iYXJ5Y2VudGVyID0gc3VtIC8gd2VpZ2h0O1xuICB0YXJnZXQud2VpZ2h0ID0gd2VpZ2h0O1xuICB0YXJnZXQuaSA9IE1hdGgubWluKHNvdXJjZS5pLCB0YXJnZXQuaSk7XG4gIHNvdXJjZS5tZXJnZWQgPSB0cnVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js": /*!**************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"sortSubgraph\": () => (/* binding */ sortSubgraph)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/flatten.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var _barycenter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./barycenter.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/barycenter.js\");\n/* harmony import */ var _resolve_conflicts_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./resolve-conflicts.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js\");\n/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sort.js */ \"../../../node_modules/dagre-d3-es/src/dagre/order/sort.js\");\n\n\n\n\n\n\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight : undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](movable, function (w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = (0,_barycenter_js__WEBPACK_IMPORTED_MODULE_0__.barycenter)(g, movable);\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](barycenters, function (entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](subgraphResult, 'barycenter')) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = (0,_resolve_conflicts_js__WEBPACK_IMPORTED_MODULE_1__.resolveConflicts)(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = (0,_sort_js__WEBPACK_IMPORTED_MODULE_2__.sort)(entries, biasRight);\n\n if (bl) {\n result.vs = lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"]([bl, result.vs, br]);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](result, 'barycenter')) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter =\n (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](entries, function (entry) {\n entry.vs = lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\n entry.vs.map(function (v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n })\n );\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](target.barycenter)) {\n target.barycenter =\n (target.barycenter * target.weight + other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9zb3J0LXN1YmdyYXBoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUErQjtBQUNjO0FBQ2E7QUFDekI7O0FBRVQ7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsaURBQVE7QUFDdEI7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsb0JBQW9CLDBEQUFVO0FBQzlCLEVBQUUsaURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlEQUFLO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxnQkFBZ0IsdUVBQWdCO0FBQ2hDOztBQUVBLGVBQWUsOENBQUk7O0FBRW5CO0FBQ0EsZ0JBQWdCLGlEQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaURBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxpREFBUztBQUNYLGVBQWUsaURBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLE9BQU8saURBQWE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9zb3J0LXN1YmdyYXBoLmpzP2MzOGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgYmFyeWNlbnRlciB9IGZyb20gJy4vYmFyeWNlbnRlci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlQ29uZmxpY3RzIH0gZnJvbSAnLi9yZXNvbHZlLWNvbmZsaWN0cy5qcyc7XG5pbXBvcnQgeyBzb3J0IH0gZnJvbSAnLi9zb3J0LmpzJztcblxuZXhwb3J0IHsgc29ydFN1YmdyYXBoIH07XG5cbmZ1bmN0aW9uIHNvcnRTdWJncmFwaChnLCB2LCBjZywgYmlhc1JpZ2h0KSB7XG4gIHZhciBtb3ZhYmxlID0gZy5jaGlsZHJlbih2KTtcbiAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gIHZhciBibCA9IG5vZGUgPyBub2RlLmJvcmRlckxlZnQgOiB1bmRlZmluZWQ7XG4gIHZhciBiciA9IG5vZGUgPyBub2RlLmJvcmRlclJpZ2h0IDogdW5kZWZpbmVkO1xuICB2YXIgc3ViZ3JhcGhzID0ge307XG5cbiAgaWYgKGJsKSB7XG4gICAgbW92YWJsZSA9IF8uZmlsdGVyKG1vdmFibGUsIGZ1bmN0aW9uICh3KSB7XG4gICAgICByZXR1cm4gdyAhPT0gYmwgJiYgdyAhPT0gYnI7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgYmFyeWNlbnRlcnMgPSBiYXJ5Y2VudGVyKGcsIG1vdmFibGUpO1xuICBfLmZvckVhY2goYmFyeWNlbnRlcnMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIGlmIChnLmNoaWxkcmVuKGVudHJ5LnYpLmxlbmd0aCkge1xuICAgICAgdmFyIHN1YmdyYXBoUmVzdWx0ID0gc29ydFN1YmdyYXBoKGcsIGVudHJ5LnYsIGNnLCBiaWFzUmlnaHQpO1xuICAgICAgc3ViZ3JhcGhzW2VudHJ5LnZdID0gc3ViZ3JhcGhSZXN1bHQ7XG4gICAgICBpZiAoXy5oYXMoc3ViZ3JhcGhSZXN1bHQsICdiYXJ5Y2VudGVyJykpIHtcbiAgICAgICAgbWVyZ2VCYXJ5Y2VudGVycyhlbnRyeSwgc3ViZ3JhcGhSZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGVudHJpZXMgPSByZXNvbHZlQ29uZmxpY3RzKGJhcnljZW50ZXJzLCBjZyk7XG4gIGV4cGFuZFN1YmdyYXBocyhlbnRyaWVzLCBzdWJncmFwaHMpO1xuXG4gIHZhciByZXN1bHQgPSBzb3J0KGVudHJpZXMsIGJpYXNSaWdodCk7XG5cbiAgaWYgKGJsKSB7XG4gICAgcmVzdWx0LnZzID0gXy5mbGF0dGVuKFtibCwgcmVzdWx0LnZzLCBicl0pO1xuICAgIGlmIChnLnByZWRlY2Vzc29ycyhibCkubGVuZ3RoKSB7XG4gICAgICB2YXIgYmxQcmVkID0gZy5ub2RlKGcucHJlZGVjZXNzb3JzKGJsKVswXSksXG4gICAgICAgIGJyUHJlZCA9IGcubm9kZShnLnByZWRlY2Vzc29ycyhicilbMF0pO1xuICAgICAgaWYgKCFfLmhhcyhyZXN1bHQsICdiYXJ5Y2VudGVyJykpIHtcbiAgICAgICAgcmVzdWx0LmJhcnljZW50ZXIgPSAwO1xuICAgICAgICByZXN1bHQud2VpZ2h0ID0gMDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5iYXJ5Y2VudGVyID1cbiAgICAgICAgKHJlc3VsdC5iYXJ5Y2VudGVyICogcmVzdWx0LndlaWdodCArIGJsUHJlZC5vcmRlciArIGJyUHJlZC5vcmRlcikgLyAocmVzdWx0LndlaWdodCArIDIpO1xuICAgICAgcmVzdWx0LndlaWdodCArPSAyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN1YmdyYXBocyhlbnRyaWVzLCBzdWJncmFwaHMpIHtcbiAgXy5mb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIGVudHJ5LnZzID0gXy5mbGF0dGVuKFxuICAgICAgZW50cnkudnMubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmIChzdWJncmFwaHNbdl0pIHtcbiAgICAgICAgICByZXR1cm4gc3ViZ3JhcGhzW3ZdLnZzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VCYXJ5Y2VudGVycyh0YXJnZXQsIG90aGVyKSB7XG4gIGlmICghXy5pc1VuZGVmaW5lZCh0YXJnZXQuYmFyeWNlbnRlcikpIHtcbiAgICB0YXJnZXQuYmFyeWNlbnRlciA9XG4gICAgICAodGFyZ2V0LmJhcnljZW50ZXIgKiB0YXJnZXQud2VpZ2h0ICsgb3RoZXIuYmFyeWNlbnRlciAqIG90aGVyLndlaWdodCkgL1xuICAgICAgKHRhcmdldC53ZWlnaHQgKyBvdGhlci53ZWlnaHQpO1xuICAgIHRhcmdldC53ZWlnaHQgKz0gb3RoZXIud2VpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHRhcmdldC5iYXJ5Y2VudGVyID0gb3RoZXIuYmFyeWNlbnRlcjtcbiAgICB0YXJnZXQud2VpZ2h0ID0gb3RoZXIud2VpZ2h0O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/order/sort.js": /*!*****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/order/sort.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"sort\": () => (/* binding */ sort)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/sortBy.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/flatten.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/last.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n\nfunction sort(entries, biasRight) {\n var parts = _util_js__WEBPACK_IMPORTED_MODULE_0__.partition(entries, function (entry) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](entry, 'barycenter');\n });\n var sortable = parts.lhs,\n unsortable = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](parts.rhs, function (entry) {\n return -entry.i;\n }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](vs) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function (entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9zb3J0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDSTs7QUFFbkI7O0FBRWhCO0FBQ0EsY0FBYywrQ0FBYztBQUM1QixXQUFXLGlEQUFLO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLGlCQUFpQixpREFBUTtBQUN6QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsaUJBQWlCLElBQUksaURBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0MsaURBQU07QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvc29ydC5qcz9lMGY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHNvcnQgfTtcblxuZnVuY3Rpb24gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpIHtcbiAgdmFyIHBhcnRzID0gdXRpbC5wYXJ0aXRpb24oZW50cmllcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIF8uaGFzKGVudHJ5LCAnYmFyeWNlbnRlcicpO1xuICB9KTtcbiAgdmFyIHNvcnRhYmxlID0gcGFydHMubGhzLFxuICAgIHVuc29ydGFibGUgPSBfLnNvcnRCeShwYXJ0cy5yaHMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuIC1lbnRyeS5pO1xuICAgIH0pLFxuICAgIHZzID0gW10sXG4gICAgc3VtID0gMCxcbiAgICB3ZWlnaHQgPSAwLFxuICAgIHZzSW5kZXggPSAwO1xuXG4gIHNvcnRhYmxlLnNvcnQoY29tcGFyZVdpdGhCaWFzKCEhYmlhc1JpZ2h0KSk7XG5cbiAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcblxuICBfLmZvckVhY2goc29ydGFibGUsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHZzSW5kZXggKz0gZW50cnkudnMubGVuZ3RoO1xuICAgIHZzLnB1c2goZW50cnkudnMpO1xuICAgIHN1bSArPSBlbnRyeS5iYXJ5Y2VudGVyICogZW50cnkud2VpZ2h0O1xuICAgIHdlaWdodCArPSBlbnRyeS53ZWlnaHQ7XG4gICAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcbiAgfSk7XG5cbiAgdmFyIHJlc3VsdCA9IHsgdnM6IF8uZmxhdHRlbih2cykgfTtcbiAgaWYgKHdlaWdodCkge1xuICAgIHJlc3VsdC5iYXJ5Y2VudGVyID0gc3VtIC8gd2VpZ2h0O1xuICAgIHJlc3VsdC53ZWlnaHQgPSB3ZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY29uc3VtZVVuc29ydGFibGUodnMsIHVuc29ydGFibGUsIGluZGV4KSB7XG4gIHZhciBsYXN0O1xuICB3aGlsZSAodW5zb3J0YWJsZS5sZW5ndGggJiYgKGxhc3QgPSBfLmxhc3QodW5zb3J0YWJsZSkpLmkgPD0gaW5kZXgpIHtcbiAgICB1bnNvcnRhYmxlLnBvcCgpO1xuICAgIHZzLnB1c2gobGFzdC52cyk7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVXaXRoQmlhcyhiaWFzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZW50cnlWLCBlbnRyeVcpIHtcbiAgICBpZiAoZW50cnlWLmJhcnljZW50ZXIgPCBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoZW50cnlWLmJhcnljZW50ZXIgPiBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuICFiaWFzID8gZW50cnlWLmkgLSBlbnRyeVcuaSA6IGVudHJ5Vy5pIC0gZW50cnlWLmk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/order/sort.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js": /*!**************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parentDummyChains\": () => (/* binding */ parentDummyChains)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n\n\n\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (\n pathIdx < path.length - 1 &&\n g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n ) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](g.children(), dfs);\n\n return result;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wYXJlbnQtZHVtbXktY2hhaW5zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStCOztBQUVGOztBQUU3QjtBQUNBOztBQUVBLEVBQUUsaURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksaURBQVM7QUFDYixrQkFBa0I7QUFDbEI7QUFDQSxFQUFFLGlEQUFTOztBQUVYO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wYXJlbnQtZHVtbXktY2hhaW5zLmpzPzI5NGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBwYXJlbnREdW1teUNoYWlucyB9O1xuXG5mdW5jdGlvbiBwYXJlbnREdW1teUNoYWlucyhnKSB7XG4gIHZhciBwb3N0b3JkZXJOdW1zID0gcG9zdG9yZGVyKGcpO1xuXG4gIF8uZm9yRWFjaChnLmdyYXBoKCkuZHVtbXlDaGFpbnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgdmFyIGVkZ2VPYmogPSBub2RlLmVkZ2VPYmo7XG4gICAgdmFyIHBhdGhEYXRhID0gZmluZFBhdGgoZywgcG9zdG9yZGVyTnVtcywgZWRnZU9iai52LCBlZGdlT2JqLncpO1xuICAgIHZhciBwYXRoID0gcGF0aERhdGEucGF0aDtcbiAgICB2YXIgbGNhID0gcGF0aERhdGEubGNhO1xuICAgIHZhciBwYXRoSWR4ID0gMDtcbiAgICB2YXIgcGF0aFYgPSBwYXRoW3BhdGhJZHhdO1xuICAgIHZhciBhc2NlbmRpbmcgPSB0cnVlO1xuXG4gICAgd2hpbGUgKHYgIT09IGVkZ2VPYmoudykge1xuICAgICAgbm9kZSA9IGcubm9kZSh2KTtcblxuICAgICAgaWYgKGFzY2VuZGluZykge1xuICAgICAgICB3aGlsZSAoKHBhdGhWID0gcGF0aFtwYXRoSWR4XSkgIT09IGxjYSAmJiBnLm5vZGUocGF0aFYpLm1heFJhbmsgPCBub2RlLnJhbmspIHtcbiAgICAgICAgICBwYXRoSWR4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aFYgPT09IGxjYSkge1xuICAgICAgICAgIGFzY2VuZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYXNjZW5kaW5nKSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICBwYXRoSWR4IDwgcGF0aC5sZW5ndGggLSAxICYmXG4gICAgICAgICAgZy5ub2RlKChwYXRoViA9IHBhdGhbcGF0aElkeCArIDFdKSkubWluUmFuayA8PSBub2RlLnJhbmtcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGF0aElkeCsrO1xuICAgICAgICB9XG4gICAgICAgIHBhdGhWID0gcGF0aFtwYXRoSWR4XTtcbiAgICAgIH1cblxuICAgICAgZy5zZXRQYXJlbnQodiwgcGF0aFYpO1xuICAgICAgdiA9IGcuc3VjY2Vzc29ycyh2KVswXTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBGaW5kIGEgcGF0aCBmcm9tIHYgdG8gdyB0aHJvdWdoIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIChMQ0EpLiBSZXR1cm4gdGhlXG4vLyBmdWxsIHBhdGggYW5kIHRoZSBMQ0EuXG5mdW5jdGlvbiBmaW5kUGF0aChnLCBwb3N0b3JkZXJOdW1zLCB2LCB3KSB7XG4gIHZhciB2UGF0aCA9IFtdO1xuICB2YXIgd1BhdGggPSBbXTtcbiAgdmFyIGxvdyA9IE1hdGgubWluKHBvc3RvcmRlck51bXNbdl0ubG93LCBwb3N0b3JkZXJOdW1zW3ddLmxvdyk7XG4gIHZhciBsaW0gPSBNYXRoLm1heChwb3N0b3JkZXJOdW1zW3ZdLmxpbSwgcG9zdG9yZGVyTnVtc1t3XS5saW0pO1xuICB2YXIgcGFyZW50O1xuICB2YXIgbGNhO1xuXG4gIC8vIFRyYXZlcnNlIHVwIGZyb20gdiB0byBmaW5kIHRoZSBMQ0FcbiAgcGFyZW50ID0gdjtcbiAgZG8ge1xuICAgIHBhcmVudCA9IGcucGFyZW50KHBhcmVudCk7XG4gICAgdlBhdGgucHVzaChwYXJlbnQpO1xuICB9IHdoaWxlIChwYXJlbnQgJiYgKHBvc3RvcmRlck51bXNbcGFyZW50XS5sb3cgPiBsb3cgfHwgbGltID4gcG9zdG9yZGVyTnVtc1twYXJlbnRdLmxpbSkpO1xuICBsY2EgPSBwYXJlbnQ7XG5cbiAgLy8gVHJhdmVyc2UgZnJvbSB3IHRvIExDQVxuICBwYXJlbnQgPSB3O1xuICB3aGlsZSAoKHBhcmVudCA9IGcucGFyZW50KHBhcmVudCkpICE9PSBsY2EpIHtcbiAgICB3UGF0aC5wdXNoKHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4geyBwYXRoOiB2UGF0aC5jb25jYXQod1BhdGgucmV2ZXJzZSgpKSwgbGNhOiBsY2EgfTtcbn1cblxuZnVuY3Rpb24gcG9zdG9yZGVyKGcpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgbGltID0gMDtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIHZhciBsb3cgPSBsaW07XG4gICAgXy5mb3JFYWNoKGcuY2hpbGRyZW4odiksIGRmcyk7XG4gICAgcmVzdWx0W3ZdID0geyBsb3c6IGxvdywgbGltOiBsaW0rKyB9O1xuICB9XG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGRmcyk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/position/bk.js": /*!******************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/position/bk.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addConflict\": () => (/* binding */ addConflict),\n/* harmony export */ \"alignCoordinates\": () => (/* binding */ alignCoordinates),\n/* harmony export */ \"balance\": () => (/* binding */ balance),\n/* harmony export */ \"findSmallestWidthAlignment\": () => (/* binding */ findSmallestWidthAlignment),\n/* harmony export */ \"findType1Conflicts\": () => (/* binding */ findType1Conflicts),\n/* harmony export */ \"findType2Conflicts\": () => (/* binding */ findType2Conflicts),\n/* harmony export */ \"hasConflict\": () => (/* binding */ hasConflict),\n/* harmony export */ \"horizontalCompaction\": () => (/* binding */ horizontalCompaction),\n/* harmony export */ \"positionX\": () => (/* binding */ positionX),\n/* harmony export */ \"verticalAlignment\": () => (/* binding */ verticalAlignment)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/last.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/reduce.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/find.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/sortBy.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/minBy.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/values.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forIn.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/min.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/mapValues.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/merge.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n\n\n\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\n\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](layer);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer, function (v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer.slice(scanPos, i + 1), function (scanNode) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.predecessors(scanNode), function (u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n // @ts-expect-error\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](southPos, southEnd), function (i) {\n v = south[i];\n if (g.node(v).dummy) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.predecessors(v), function (u) {\n var uNode = g.node(u);\n if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](south, function (v, southLookahead) {\n if (g.node(v).dummy === 'border') {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n // @ts-expect-error\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](g.predecessors(v), function (u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layering, function (layer) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer, function (v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layering, function (layer) {\n var prevIdx = -1;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer, function (v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](ws, function (w) {\n return pos[w];\n });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function (acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](align, function (v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layering, function (layer) {\n var u;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer, function (v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_11__[\"default\"](xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](alignTo),\n alignToMin = lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](alignToVals),\n alignToMax = lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"](alignToVals);\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](['u', 'd'], function (vert) {\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](['l', 'r'], function (horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](xs);\n delta = horiz === 'l' ? alignToMin - lodash_es__WEBPACK_IMPORTED_MODULE_12__[\"default\"](xsVals) : alignToMax - lodash_es__WEBPACK_IMPORTED_MODULE_13__[\"default\"](xsVals);\n\n if (delta) {\n xss[alignment] = lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](xs, function (x) {\n return x + delta;\n });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](xss.ul, function (ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_15__[\"default\"](xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = _util_js__WEBPACK_IMPORTED_MODULE_1__.buildLayerMatrix(g);\n var conflicts = lodash_es__WEBPACK_IMPORTED_MODULE_16__[\"default\"](findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](['u', 'd'], function (vert) {\n adjustedLayering = vert === 'u' ? layering : lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](layering).reverse();\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](['l', 'r'], function (horiz) {\n if (horiz === 'r') {\n adjustedLayering = lodash_es__WEBPACK_IMPORTED_MODULE_15__[\"default\"](adjustedLayering, function (inner) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](inner).reverse();\n });\n }\n\n var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n if (horiz === 'r') {\n xs = lodash_es__WEBPACK_IMPORTED_MODULE_14__[\"default\"](xs, function (x) {\n return -x;\n });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function (g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](vLabel, 'labelpos')) {\n switch (vLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = -vLabel.width / 2;\n break;\n case 'r':\n delta = vLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](wLabel, 'labelpos')) {\n switch (wLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = wLabel.width / 2;\n break;\n case 'r':\n delta = -wLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wb3NpdGlvbi9iay5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDaUI7QUFDYjs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7O0FBYUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixpREFBTTs7QUFFdkIsSUFBSSxpREFBUztBQUNiO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGlEQUFTO0FBQ2pCLFVBQVUsaURBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsRUFBRSxpREFBUTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxpREFBUyxDQUFDLGlEQUFPO0FBQ3JCO0FBQ0E7QUFDQSxRQUFRLGlEQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksaURBQVM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLEVBQUUsaURBQVE7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlEQUFNO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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RUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcG9zaXRpb24vYmsuanM/ZDgyMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5cbi8qXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjb29yZGluYXRlIGFzc2lnbm1lbnQgYmFzZWQgb24gQnJhbmRlcyBhbmQgS8O2cGYsIFwiRmFzdFxuICogYW5kIFNpbXBsZSBIb3Jpem9udGFsIENvb3JkaW5hdGUgQXNzaWdubWVudC5cIlxuICovXG5cbmV4cG9ydCB7XG4gIHBvc2l0aW9uWCxcbiAgZmluZFR5cGUxQ29uZmxpY3RzLFxuICBmaW5kVHlwZTJDb25mbGljdHMsXG4gIGFkZENvbmZsaWN0LFxuICBoYXNDb25mbGljdCxcbiAgdmVydGljYWxBbGlnbm1lbnQsXG4gIGhvcml6b250YWxDb21wYWN0aW9uLFxuICBhbGlnbkNvb3JkaW5hdGVzLFxuICBmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCxcbiAgYmFsYW5jZSxcbn07XG5cbi8qXG4gKiBNYXJrcyBhbGwgZWRnZXMgaW4gdGhlIGdyYXBoIHdpdGggYSB0eXBlLTEgY29uZmxpY3Qgd2l0aCB0aGUgXCJ0eXBlMUNvbmZsaWN0XCJcbiAqIHByb3BlcnR5LiBBIHR5cGUtMSBjb25mbGljdCBpcyBvbmUgd2hlcmUgYSBub24taW5uZXIgc2VnbWVudCBjcm9zc2VzIGFuXG4gKiBpbm5lciBzZWdtZW50LiBBbiBpbm5lciBzZWdtZW50IGlzIGFuIGVkZ2Ugd2l0aCBib3RoIGluY2lkZW50IG5vZGVzIG1hcmtlZFxuICogd2l0aCB0aGUgXCJkdW1teVwiIHByb3BlcnR5LlxuICpcbiAqIFRoaXMgYWxnb3JpdGhtIHNjYW5zIGxheWVyIGJ5IGxheWVyLCBzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQsIGZvciB0eXBlLTFcbiAqIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBjdXJyZW50IGxheWVyIGFuZCB0aGUgcHJldmlvdXMgbGF5ZXIuIEZvciBlYWNoIGxheWVyXG4gKiBpdCBzY2FucyB0aGUgbm9kZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0IHVudGlsIGl0IHJlYWNoZXMgb25lIHRoYXQgaXMgaW5jaWRlbnRcbiAqIG9uIGFuIGlubmVyIHNlZ21lbnQuIEl0IHRoZW4gc2NhbnMgcHJlZGVjZXNzb3JzIHRvIGRldGVybWluZSBpZiB0aGV5IGhhdmVcbiAqIGVkZ2VzIHRoYXQgY3Jvc3MgdGhhdCBpbm5lciBzZWdtZW50LiBBdCB0aGUgZW5kIGEgZmluYWwgc2NhbiBpcyBkb25lIGZvciBhbGxcbiAqIG5vZGVzIG9uIHRoZSBjdXJyZW50IHJhbmsgdG8gc2VlIGlmIHRoZXkgY3Jvc3MgdGhlIGxhc3QgdmlzaXRlZCBpbm5lclxuICogc2VnbWVudC5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSAoc2FmZWx5KSBhc3N1bWVzIHRoYXQgYSBkdW1teSBub2RlIHdpbGwgb25seSBiZSBpbmNpZGVudCBvbiBhXG4gKiBzaW5nbGUgbm9kZSBpbiB0aGUgbGF5ZXJzIGJlaW5nIHNjYW5uZWQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRUeXBlMUNvbmZsaWN0cyhnLCBsYXllcmluZykge1xuICB2YXIgY29uZmxpY3RzID0ge307XG5cbiAgZnVuY3Rpb24gdmlzaXRMYXllcihwcmV2TGF5ZXIsIGxheWVyKSB7XG4gICAgdmFyIC8vIGxhc3QgdmlzaXRlZCBub2RlIGluIHRoZSBwcmV2aW91cyBsYXllciB0aGF0IGlzIGluY2lkZW50IG9uIGFuIGlubmVyXG4gICAgICAvLyBzZWdtZW50LlxuICAgICAgazAgPSAwLFxuICAgICAgLy8gVHJhY2tzIHRoZSBsYXN0IG5vZGUgaW4gdGhpcyBsYXllciBzY2FubmVkIGZvciBjcm9zc2luZ3Mgd2l0aCBhIHR5cGUtMVxuICAgICAgLy8gc2VnbWVudC5cbiAgICAgIHNjYW5Qb3MgPSAwLFxuICAgICAgcHJldkxheWVyTGVuZ3RoID0gcHJldkxheWVyLmxlbmd0aCxcbiAgICAgIGxhc3ROb2RlID0gXy5sYXN0KGxheWVyKTtcblxuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHZhciB3ID0gZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZShnLCB2KSxcbiAgICAgICAgazEgPSB3ID8gZy5ub2RlKHcpLm9yZGVyIDogcHJldkxheWVyTGVuZ3RoO1xuXG4gICAgICBpZiAodyB8fCB2ID09PSBsYXN0Tm9kZSkge1xuICAgICAgICBfLmZvckVhY2gobGF5ZXIuc2xpY2Uoc2NhblBvcywgaSArIDEpLCBmdW5jdGlvbiAoc2Nhbk5vZGUpIHtcbiAgICAgICAgICBfLmZvckVhY2goZy5wcmVkZWNlc3NvcnMoc2Nhbk5vZGUpLCBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgdmFyIHVMYWJlbCA9IGcubm9kZSh1KSxcbiAgICAgICAgICAgICAgdVBvcyA9IHVMYWJlbC5vcmRlcjtcbiAgICAgICAgICAgIGlmICgodVBvcyA8IGswIHx8IGsxIDwgdVBvcykgJiYgISh1TGFiZWwuZHVtbXkgJiYgZy5ub2RlKHNjYW5Ob2RlKS5kdW1teSkpIHtcbiAgICAgICAgICAgICAgYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB1LCBzY2FuTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHNjYW5Qb3MgPSBpICsgMTtcbiAgICAgICAgazAgPSBrMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIF8ucmVkdWNlKGxheWVyaW5nLCB2aXNpdExheWVyKTtcbiAgcmV0dXJuIGNvbmZsaWN0cztcbn1cblxuZnVuY3Rpb24gZmluZFR5cGUyQ29uZmxpY3RzKGcsIGxheWVyaW5nKSB7XG4gIHZhciBjb25mbGljdHMgPSB7fTtcblxuICBmdW5jdGlvbiBzY2FuKHNvdXRoLCBzb3V0aFBvcywgc291dGhFbmQsIHByZXZOb3J0aEJvcmRlciwgbmV4dE5vcnRoQm9yZGVyKSB7XG4gICAgdmFyIHY7XG4gICAgXy5mb3JFYWNoKF8ucmFuZ2Uoc291dGhQb3MsIHNvdXRoRW5kKSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgIHYgPSBzb3V0aFtpXTtcbiAgICAgIGlmIChnLm5vZGUodikuZHVtbXkpIHtcbiAgICAgICAgXy5mb3JFYWNoKGcucHJlZGVjZXNzb3JzKHYpLCBmdW5jdGlvbiAodSkge1xuICAgICAgICAgIHZhciB1Tm9kZSA9IGcubm9kZSh1KTtcbiAgICAgICAgICBpZiAodU5vZGUuZHVtbXkgJiYgKHVOb2RlLm9yZGVyIDwgcHJldk5vcnRoQm9yZGVyIHx8IHVOb2RlLm9yZGVyID4gbmV4dE5vcnRoQm9yZGVyKSkge1xuICAgICAgICAgICAgYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB1LCB2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXRMYXllcihub3J0aCwgc291dGgpIHtcbiAgICB2YXIgcHJldk5vcnRoUG9zID0gLTEsXG4gICAgICBuZXh0Tm9ydGhQb3MsXG4gICAgICBzb3V0aFBvcyA9IDA7XG5cbiAgICBfLmZvckVhY2goc291dGgsIGZ1bmN0aW9uICh2LCBzb3V0aExvb2thaGVhZCkge1xuICAgICAgaWYgKGcubm9kZSh2KS5kdW1teSA9PT0gJ2JvcmRlcicpIHtcbiAgICAgICAgdmFyIHByZWRlY2Vzc29ycyA9IGcucHJlZGVjZXNzb3JzKHYpO1xuICAgICAgICBpZiAocHJlZGVjZXNzb3JzLmxlbmd0aCkge1xuICAgICAgICAgIG5leHROb3J0aFBvcyA9IGcubm9kZShwcmVkZWNlc3NvcnNbMF0pLm9yZGVyO1xuICAgICAgICAgIHNjYW4oc291dGgsIHNvdXRoUG9zLCBzb3V0aExvb2thaGVhZCwgcHJldk5vcnRoUG9zLCBuZXh0Tm9ydGhQb3MpO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBzb3V0aFBvcyA9IHNvdXRoTG9va2FoZWFkO1xuICAgICAgICAgIHByZXZOb3J0aFBvcyA9IG5leHROb3J0aFBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2Nhbihzb3V0aCwgc291dGhQb3MsIHNvdXRoLmxlbmd0aCwgbmV4dE5vcnRoUG9zLCBub3J0aC5sZW5ndGgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvdXRoO1xuICB9XG5cbiAgXy5yZWR1Y2UobGF5ZXJpbmcsIHZpc2l0TGF5ZXIpO1xuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG5mdW5jdGlvbiBmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlKGcsIHYpIHtcbiAgaWYgKGcubm9kZSh2KS5kdW1teSkge1xuICAgIHJldHVybiBfLmZpbmQoZy5wcmVkZWNlc3NvcnModiksIGZ1bmN0aW9uICh1KSB7XG4gICAgICByZXR1cm4gZy5ub2RlKHUpLmR1bW15O1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENvbmZsaWN0KGNvbmZsaWN0cywgdiwgdykge1xuICBpZiAodiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG5cbiAgdmFyIGNvbmZsaWN0c1YgPSBjb25mbGljdHNbdl07XG4gIGlmICghY29uZmxpY3RzVikge1xuICAgIGNvbmZsaWN0c1t2XSA9IGNvbmZsaWN0c1YgPSB7fTtcbiAgfVxuICBjb25mbGljdHNWW3ddID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uZmxpY3QoY29uZmxpY3RzLCB2LCB3KSB7XG4gIGlmICh2ID4gdykge1xuICAgIHZhciB0bXAgPSB2O1xuICAgIHYgPSB3O1xuICAgIHcgPSB0bXA7XG4gIH1cbiAgcmV0dXJuIF8uaGFzKGNvbmZsaWN0c1t2XSwgdyk7XG59XG5cbi8qXG4gKiBUcnkgdG8gYWxpZ24gbm9kZXMgaW50byB2ZXJ0aWNhbCBcImJsb2Nrc1wiIHdoZXJlIHBvc3NpYmxlLiBUaGlzIGFsZ29yaXRobVxuICogYXR0ZW1wdHMgdG8gYWxpZ24gYSBub2RlIHdpdGggb25lIG9mIGl0cyBtZWRpYW4gbmVpZ2hib3JzLiBJZiB0aGUgZWRnZVxuICogY29ubmVjdGluZyBhIG5laWdoYm9yIGlzIGEgdHlwZS0xIGNvbmZsaWN0IHRoZW4gd2UgaWdub3JlIHRoYXQgcG9zc2liaWxpdHkuXG4gKiBJZiBhIHByZXZpb3VzIG5vZGUgaGFzIGFscmVhZHkgZm9ybWVkIGEgYmxvY2sgd2l0aCBhIG5vZGUgYWZ0ZXIgdGhlIG5vZGVcbiAqIHdlJ3JlIHRyeWluZyB0byBmb3JtIGEgYmxvY2sgd2l0aCwgd2UgYWxzbyBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eSAtIG91clxuICogYmxvY2tzIHdvdWxkIGJlIHNwbGl0IGluIHRoYXQgc2NlbmFyaW8uXG4gKi9cbmZ1bmN0aW9uIHZlcnRpY2FsQWxpZ25tZW50KGcsIGxheWVyaW5nLCBjb25mbGljdHMsIG5laWdoYm9yRm4pIHtcbiAgdmFyIHJvb3QgPSB7fSxcbiAgICBhbGlnbiA9IHt9LFxuICAgIHBvcyA9IHt9O1xuXG4gIC8vIFdlIGNhY2hlIHRoZSBwb3NpdGlvbiBoZXJlIGJhc2VkIG9uIHRoZSBsYXllcmluZyBiZWNhdXNlIHRoZSBncmFwaCBhbmRcbiAgLy8gbGF5ZXJpbmcgbWF5IGJlIG91dCBvZiBzeW5jLiBUaGUgbGF5ZXJpbmcgbWF0cml4IGlzIG1hbmlwdWxhdGVkIHRvXG4gIC8vIGdlbmVyYXRlIGRpZmZlcmVudCBleHRyZW1lIGFsaWdubWVudHMuXG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodiwgb3JkZXIpIHtcbiAgICAgIHJvb3Rbdl0gPSB2O1xuICAgICAgYWxpZ25bdl0gPSB2O1xuICAgICAgcG9zW3ZdID0gb3JkZXI7XG4gICAgfSk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIHByZXZJZHggPSAtMTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgd3MgPSBuZWlnaGJvckZuKHYpO1xuICAgICAgaWYgKHdzLmxlbmd0aCkge1xuICAgICAgICB3cyA9IF8uc29ydEJ5KHdzLCBmdW5jdGlvbiAodykge1xuICAgICAgICAgIHJldHVybiBwb3Nbd107XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbXAgPSAod3MubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5mbG9vcihtcCksIGlsID0gTWF0aC5jZWlsKG1wKTsgaSA8PSBpbDsgKytpKSB7XG4gICAgICAgICAgdmFyIHcgPSB3c1tpXTtcbiAgICAgICAgICBpZiAoYWxpZ25bdl0gPT09IHYgJiYgcHJldklkeCA8IHBvc1t3XSAmJiAhaGFzQ29uZmxpY3QoY29uZmxpY3RzLCB2LCB3KSkge1xuICAgICAgICAgICAgYWxpZ25bd10gPSB2O1xuICAgICAgICAgICAgYWxpZ25bdl0gPSByb290W3ZdID0gcm9vdFt3XTtcbiAgICAgICAgICAgIHByZXZJZHggPSBwb3Nbd107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IHJvb3Q6IHJvb3QsIGFsaWduOiBhbGlnbiB9O1xufVxuXG5mdW5jdGlvbiBob3Jpem9udGFsQ29tcGFjdGlvbihnLCBsYXllcmluZywgcm9vdCwgYWxpZ24sIHJldmVyc2VTZXApIHtcbiAgLy8gVGhpcyBwb3J0aW9uIG9mIHRoZSBhbGdvcml0aG0gZGlmZmVycyBmcm9tIEJLIGR1ZSB0byBhIG51bWJlciBvZiBwcm9ibGVtcy5cbiAgLy8gSW5zdGVhZCBvZiB0aGVpciBhbGdvcml0aG0gd2UgY29uc3RydWN0IGEgbmV3IGJsb2NrIGdyYXBoIGFuZCBkbyB0d29cbiAgLy8gc3dlZXBzLiBUaGUgZmlyc3Qgc3dlZXAgcGxhY2VzIGJsb2NrcyB3aXRoIHRoZSBzbWFsbGVzdCBwb3NzaWJsZVxuICAvLyBjb29yZGluYXRlcy4gVGhlIHNlY29uZCBzd2VlcCByZW1vdmVzIHVudXNlZCBzcGFjZSBieSBtb3ZpbmcgYmxvY2tzIHRvIHRoZVxuICAvLyBncmVhdGVzdCBjb29yZGluYXRlcyB3aXRob3V0IHZpb2xhdGluZyBzZXBhcmF0aW9uLlxuICB2YXIgeHMgPSB7fSxcbiAgICBibG9ja0cgPSBidWlsZEJsb2NrR3JhcGgoZywgbGF5ZXJpbmcsIHJvb3QsIHJldmVyc2VTZXApLFxuICAgIGJvcmRlclR5cGUgPSByZXZlcnNlU2VwID8gJ2JvcmRlckxlZnQnIDogJ2JvcmRlclJpZ2h0JztcblxuICBmdW5jdGlvbiBpdGVyYXRlKHNldFhzRnVuYywgbmV4dE5vZGVzRnVuYykge1xuICAgIHZhciBzdGFjayA9IGJsb2NrRy5ub2RlcygpO1xuICAgIHZhciBlbGVtID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICB3aGlsZSAoZWxlbSkge1xuICAgICAgaWYgKHZpc2l0ZWRbZWxlbV0pIHtcbiAgICAgICAgc2V0WHNGdW5jKGVsZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlzaXRlZFtlbGVtXSA9IHRydWU7XG4gICAgICAgIHN0YWNrLnB1c2goZWxlbSk7XG4gICAgICAgIHN0YWNrID0gc3RhY2suY29uY2F0KG5leHROb2Rlc0Z1bmMoZWxlbSkpO1xuICAgICAgfVxuXG4gICAgICBlbGVtID0gc3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QgcGFzcywgYXNzaWduIHNtYWxsZXN0IGNvb3JkaW5hdGVzXG4gIGZ1bmN0aW9uIHBhc3MxKGVsZW0pIHtcbiAgICB4c1tlbGVtXSA9IGJsb2NrRy5pbkVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBlKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoYWNjLCB4c1tlLnZdICsgYmxvY2tHLmVkZ2UoZSkpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gU2Vjb25kIHBhc3MsIGFzc2lnbiBncmVhdGVzdCBjb29yZGluYXRlc1xuICBmdW5jdGlvbiBwYXNzMihlbGVtKSB7XG4gICAgdmFyIG1pbiA9IGJsb2NrRy5vdXRFZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKGFjYywgeHNbZS53XSAtIGJsb2NrRy5lZGdlKGUpKTtcbiAgICB9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgdmFyIG5vZGUgPSBnLm5vZGUoZWxlbSk7XG4gICAgaWYgKG1pbiAhPT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIG5vZGUuYm9yZGVyVHlwZSAhPT0gYm9yZGVyVHlwZSkge1xuICAgICAgeHNbZWxlbV0gPSBNYXRoLm1heCh4c1tlbGVtXSwgbWluKTtcbiAgICB9XG4gIH1cblxuICBpdGVyYXRlKHBhc3MxLCBibG9ja0cucHJlZGVjZXNzb3JzLmJpbmQoYmxvY2tHKSk7XG4gIGl0ZXJhdGUocGFzczIsIGJsb2NrRy5zdWNjZXNzb3JzLmJpbmQoYmxvY2tHKSk7XG5cbiAgLy8gQXNzaWduIHggY29vcmRpbmF0ZXMgdG8gYWxsIG5vZGVzXG4gIF8uZm9yRWFjaChhbGlnbiwgZnVuY3Rpb24gKHYpIHtcbiAgICB4c1t2XSA9IHhzW3Jvb3Rbdl1dO1xuICB9KTtcblxuICByZXR1cm4geHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQmxvY2tHcmFwaChnLCBsYXllcmluZywgcm9vdCwgcmV2ZXJzZVNlcCkge1xuICB2YXIgYmxvY2tHcmFwaCA9IG5ldyBHcmFwaCgpLFxuICAgIGdyYXBoTGFiZWwgPSBnLmdyYXBoKCksXG4gICAgc2VwRm4gPSBzZXAoZ3JhcGhMYWJlbC5ub2Rlc2VwLCBncmFwaExhYmVsLmVkZ2VzZXAsIHJldmVyc2VTZXApO1xuXG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIHU7XG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodikge1xuICAgICAgdmFyIHZSb290ID0gcm9vdFt2XTtcbiAgICAgIGJsb2NrR3JhcGguc2V0Tm9kZSh2Um9vdCk7XG4gICAgICBpZiAodSkge1xuICAgICAgICB2YXIgdVJvb3QgPSByb290W3VdLFxuICAgICAgICAgIHByZXZNYXggPSBibG9ja0dyYXBoLmVkZ2UodVJvb3QsIHZSb290KTtcbiAgICAgICAgYmxvY2tHcmFwaC5zZXRFZGdlKHVSb290LCB2Um9vdCwgTWF0aC5tYXgoc2VwRm4oZywgdiwgdSksIHByZXZNYXggfHwgMCkpO1xuICAgICAgfVxuICAgICAgdSA9IHY7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBibG9ja0dyYXBoO1xufVxuXG4vKlxuICogUmV0dXJucyB0aGUgYWxpZ25tZW50IHRoYXQgaGFzIHRoZSBzbWFsbGVzdCB3aWR0aCBvZiB0aGUgZ2l2ZW4gYWxpZ25tZW50cy5cbiAqL1xuZnVuY3Rpb24gZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQoZywgeHNzKSB7XG4gIHJldHVybiBfLm1pbkJ5KF8udmFsdWVzKHhzcyksIGZ1bmN0aW9uICh4cykge1xuICAgIHZhciBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgdmFyIG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuICAgIF8uZm9ySW4oeHMsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICB2YXIgaGFsZldpZHRoID0gd2lkdGgoZywgdikgLyAyO1xuXG4gICAgICBtYXggPSBNYXRoLm1heCh4ICsgaGFsZldpZHRoLCBtYXgpO1xuICAgICAgbWluID0gTWF0aC5taW4oeCAtIGhhbGZXaWR0aCwgbWluKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXggLSBtaW47XG4gIH0pO1xufVxuXG4vKlxuICogQWxpZ24gdGhlIGNvb3JkaW5hdGVzIG9mIGVhY2ggb2YgdGhlIGxheW91dCBhbGlnbm1lbnRzIHN1Y2ggdGhhdFxuICogbGVmdC1iaWFzZWQgYWxpZ25tZW50cyBoYXZlIHRoZWlyIG1pbmltdW0gY29vcmRpbmF0ZSBhdCB0aGUgc2FtZSBwb2ludCBhc1xuICogdGhlIG1pbmltdW0gY29vcmRpbmF0ZSBvZiB0aGUgc21hbGxlc3Qgd2lkdGggYWxpZ25tZW50IGFuZCByaWdodC1iaWFzZWRcbiAqIGFsaWdubWVudHMgaGF2ZSB0aGVpciBtYXhpbXVtIGNvb3JkaW5hdGUgYXQgdGhlIHNhbWUgcG9pbnQgYXMgdGhlIG1heGltdW1cbiAqIGNvb3JkaW5hdGUgb2YgdGhlIHNtYWxsZXN0IHdpZHRoIGFsaWdubWVudC5cbiAqL1xuZnVuY3Rpb24gYWxpZ25Db29yZGluYXRlcyh4c3MsIGFsaWduVG8pIHtcbiAgdmFyIGFsaWduVG9WYWxzID0gXy52YWx1ZXMoYWxpZ25UbyksXG4gICAgYWxpZ25Ub01pbiA9IF8ubWluKGFsaWduVG9WYWxzKSxcbiAgICBhbGlnblRvTWF4ID0gXy5tYXgoYWxpZ25Ub1ZhbHMpO1xuXG4gIF8uZm9yRWFjaChbJ3UnLCAnZCddLCBmdW5jdGlvbiAodmVydCkge1xuICAgIF8uZm9yRWFjaChbJ2wnLCAnciddLCBmdW5jdGlvbiAoaG9yaXopIHtcbiAgICAgIHZhciBhbGlnbm1lbnQgPSB2ZXJ0ICsgaG9yaXosXG4gICAgICAgIHhzID0geHNzW2FsaWdubWVudF0sXG4gICAgICAgIGRlbHRhO1xuICAgICAgaWYgKHhzID09PSBhbGlnblRvKSByZXR1cm47XG5cbiAgICAgIHZhciB4c1ZhbHMgPSBfLnZhbHVlcyh4cyk7XG4gICAgICBkZWx0YSA9IGhvcml6ID09PSAnbCcgPyBhbGlnblRvTWluIC0gXy5taW4oeHNWYWxzKSA6IGFsaWduVG9NYXggLSBfLm1heCh4c1ZhbHMpO1xuXG4gICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgeHNzW2FsaWdubWVudF0gPSBfLm1hcFZhbHVlcyh4cywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIGRlbHRhO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJhbGFuY2UoeHNzLCBhbGlnbikge1xuICByZXR1cm4gXy5tYXBWYWx1ZXMoeHNzLnVsLCBmdW5jdGlvbiAoaWdub3JlLCB2KSB7XG4gICAgaWYgKGFsaWduKSB7XG4gICAgICByZXR1cm4geHNzW2FsaWduLnRvTG93ZXJDYXNlKCldW3ZdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgeHMgPSBfLnNvcnRCeShfLm1hcCh4c3MsIHYpKTtcbiAgICAgIHJldHVybiAoeHNbMV0gKyB4c1syXSkgLyAyO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBvc2l0aW9uWChnKSB7XG4gIHZhciBsYXllcmluZyA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKTtcbiAgdmFyIGNvbmZsaWN0cyA9IF8ubWVyZ2UoZmluZFR5cGUxQ29uZmxpY3RzKGcsIGxheWVyaW5nKSwgZmluZFR5cGUyQ29uZmxpY3RzKGcsIGxheWVyaW5nKSk7XG5cbiAgdmFyIHhzcyA9IHt9O1xuICB2YXIgYWRqdXN0ZWRMYXllcmluZztcbiAgXy5mb3JFYWNoKFsndScsICdkJ10sIGZ1bmN0aW9uICh2ZXJ0KSB7XG4gICAgYWRqdXN0ZWRMYXllcmluZyA9IHZlcnQgPT09ICd1JyA/IGxheWVyaW5nIDogXy52YWx1ZXMobGF5ZXJpbmcpLnJldmVyc2UoKTtcbiAgICBfLmZvckVhY2goWydsJywgJ3InXSwgZnVuY3Rpb24gKGhvcml6KSB7XG4gICAgICBpZiAoaG9yaXogPT09ICdyJykge1xuICAgICAgICBhZGp1c3RlZExheWVyaW5nID0gXy5tYXAoYWRqdXN0ZWRMYXllcmluZywgZnVuY3Rpb24gKGlubmVyKSB7XG4gICAgICAgICAgcmV0dXJuIF8udmFsdWVzKGlubmVyKS5yZXZlcnNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmVpZ2hib3JGbiA9ICh2ZXJ0ID09PSAndScgPyBnLnByZWRlY2Vzc29ycyA6IGcuc3VjY2Vzc29ycykuYmluZChnKTtcbiAgICAgIHZhciBhbGlnbiA9IHZlcnRpY2FsQWxpZ25tZW50KGcsIGFkanVzdGVkTGF5ZXJpbmcsIGNvbmZsaWN0cywgbmVpZ2hib3JGbik7XG4gICAgICB2YXIgeHMgPSBob3Jpem9udGFsQ29tcGFjdGlvbihnLCBhZGp1c3RlZExheWVyaW5nLCBhbGlnbi5yb290LCBhbGlnbi5hbGlnbiwgaG9yaXogPT09ICdyJyk7XG4gICAgICBpZiAoaG9yaXogPT09ICdyJykge1xuICAgICAgICB4cyA9IF8ubWFwVmFsdWVzKHhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiAteDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB4c3NbdmVydCArIGhvcml6XSA9IHhzO1xuICAgIH0pO1xuICB9KTtcblxuICB2YXIgc21hbGxlc3RXaWR0aCA9IGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50KGcsIHhzcyk7XG4gIGFsaWduQ29vcmRpbmF0ZXMoeHNzLCBzbWFsbGVzdFdpZHRoKTtcbiAgcmV0dXJuIGJhbGFuY2UoeHNzLCBnLmdyYXBoKCkuYWxpZ24pO1xufVxuXG5mdW5jdGlvbiBzZXAobm9kZVNlcCwgZWRnZVNlcCwgcmV2ZXJzZVNlcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGcsIHYsIHcpIHtcbiAgICB2YXIgdkxhYmVsID0gZy5ub2RlKHYpO1xuICAgIHZhciB3TGFiZWwgPSBnLm5vZGUodyk7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGRlbHRhO1xuXG4gICAgc3VtICs9IHZMYWJlbC53aWR0aCAvIDI7XG4gICAgaWYgKF8uaGFzKHZMYWJlbCwgJ2xhYmVscG9zJykpIHtcbiAgICAgIHN3aXRjaCAodkxhYmVsLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnbCc6XG4gICAgICAgICAgZGVsdGEgPSAtdkxhYmVsLndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgZGVsdGEgPSB2TGFiZWwud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVsdGEpIHtcbiAgICAgIHN1bSArPSByZXZlcnNlU2VwID8gZGVsdGEgOiAtZGVsdGE7XG4gICAgfVxuICAgIGRlbHRhID0gMDtcblxuICAgIHN1bSArPSAodkxhYmVsLmR1bW15ID8gZWRnZVNlcCA6IG5vZGVTZXApIC8gMjtcbiAgICBzdW0gKz0gKHdMYWJlbC5kdW1teSA/IGVkZ2VTZXAgOiBub2RlU2VwKSAvIDI7XG5cbiAgICBzdW0gKz0gd0xhYmVsLndpZHRoIC8gMjtcbiAgICBpZiAoXy5oYXMod0xhYmVsLCAnbGFiZWxwb3MnKSkge1xuICAgICAgc3dpdGNoICh3TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdsJzpcbiAgICAgICAgICBkZWx0YSA9IHdMYWJlbC53aWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgIGRlbHRhID0gLXdMYWJlbC53aWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZWx0YSkge1xuICAgICAgc3VtICs9IHJldmVyc2VTZXAgPyBkZWx0YSA6IC1kZWx0YTtcbiAgICB9XG4gICAgZGVsdGEgPSAwO1xuXG4gICAgcmV0dXJuIHN1bTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gd2lkdGgoZywgdikge1xuICByZXR1cm4gZy5ub2RlKHYpLndpZHRoO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/position/bk.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/position/index.js": /*!*********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/position/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"position\": () => (/* binding */ position)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forOwn.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n/* harmony import */ var _bk_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bk.js */ \"../../../node_modules/dagre-d3-es/src/dagre/position/bk.js\");\n\n\n\n\n\n\nfunction position(g) {\n g = _util_js__WEBPACK_IMPORTED_MODULE_0__.asNonCompoundGraph(g);\n\n positionY(g);\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"]((0,_bk_js__WEBPACK_IMPORTED_MODULE_1__.positionX)(g), function (x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = _util_js__WEBPACK_IMPORTED_MODULE_0__.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layering, function (layer) {\n var maxHeight = lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](layer, function (v) {\n return g.node(v).height;\n })\n );\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](layer, function (v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wb3NpdGlvbi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQStCO0FBQ0k7QUFDQzs7QUFFaEI7O0FBRXBCO0FBQ0EsTUFBTSx3REFBdUI7O0FBRTdCO0FBQ0EsRUFBRSxpREFBUSxDQUFDLGlEQUFTO0FBQ3BCO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsaUJBQWlCLHNEQUFxQjtBQUN0QztBQUNBO0FBQ0EsRUFBRSxpREFBUztBQUNYLG9CQUFvQixpREFBSztBQUN6QixNQUFNLGlEQUFLO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJLGlEQUFTO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wb3NpdGlvbi9pbmRleC5qcz8zNmQ1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvblggfSBmcm9tICcuL2JrLmpzJztcblxuZXhwb3J0IHsgcG9zaXRpb24gfTtcblxuZnVuY3Rpb24gcG9zaXRpb24oZykge1xuICBnID0gdXRpbC5hc05vbkNvbXBvdW5kR3JhcGgoZyk7XG5cbiAgcG9zaXRpb25ZKGcpO1xuICBfLmZvck93bihwb3NpdGlvblgoZyksIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgZy5ub2RlKHYpLnggPSB4O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25ZKGcpIHtcbiAgdmFyIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICB2YXIgcmFua1NlcCA9IGcuZ3JhcGgoKS5yYW5rc2VwO1xuICB2YXIgcHJldlkgPSAwO1xuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uIChsYXllcikge1xuICAgIHZhciBtYXhIZWlnaHQgPSBfLm1heChcbiAgICAgIF8ubWFwKGxheWVyLCBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZy5ub2RlKHYpLmhlaWdodDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICBnLm5vZGUodikueSA9IHByZXZZICsgbWF4SGVpZ2h0IC8gMjtcbiAgICB9KTtcbiAgICBwcmV2WSArPSBtYXhIZWlnaHQgKyByYW5rU2VwO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/position/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js": /*!*************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"feasibleTree\": () => (/* binding */ feasibleTree)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/minBy.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/util.js\");\n\n\n\n\n\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.slack)(g, edge) : -(0,_util_js__WEBPACK_IMPORTED_MODULE_1__.slack)(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodeEdges(v), function (e) {\n var edgeV = e.v,\n w = v === edgeV ? e.w : edgeV;\n if (!t.hasNode(w) && !(0,_util_js__WEBPACK_IMPORTED_MODULE_1__.slack)(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.edges(), function (e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.slack)(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](t.nodes(), function (v) {\n g.node(v).rank += delta;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL2ZlYXNpYmxlLXRyZWUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0I7QUFDaUI7QUFDZDs7QUFFVjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMscURBQUssR0FBRyxpQkFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLCtDQUFLLGFBQWEsK0NBQUs7QUFDdkQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaURBQVM7QUFDYjtBQUNBO0FBQ0EsNEJBQTRCLCtDQUFLO0FBQ2pDLHVCQUF1QjtBQUN2QiwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpREFBTztBQUNoQjtBQUNBLGFBQWEsK0NBQUs7QUFDbEI7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL2ZlYXNpYmxlLXRyZWUuanM/NjE5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcbmltcG9ydCB7IHNsYWNrIH0gZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgZmVhc2libGVUcmVlIH07XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgc3Bhbm5pbmcgdHJlZSB3aXRoIHRpZ2h0IGVkZ2VzIGFuZCBhZGp1c3RlZCB0aGUgaW5wdXQgbm9kZSdzXG4gKiByYW5rcyB0byBhY2hpZXZlIHRoaXMuIEEgdGlnaHQgZWRnZSBpcyBvbmUgdGhhdCBpcyBoYXMgYSBsZW5ndGggdGhhdCBtYXRjaGVzXG4gKiBpdHMgXCJtaW5sZW5cIiBhdHRyaWJ1dGUuXG4gKlxuICogVGhlIGJhc2ljIHN0cnVjdHVyZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gR2Fuc25lciwgZXQgYWwuLCBcIkFcbiAqIFRlY2huaXF1ZSBmb3IgRHJhd2luZyBEaXJlY3RlZCBHcmFwaHMuXCJcbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBtdXN0IGJlIGEgREFHLlxuICogICAgMi4gR3JhcGggbXVzdCBiZSBjb25uZWN0ZWQuXG4gKiAgICAzLiBHcmFwaCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG5vZGUuXG4gKiAgICA1LiBHcmFwaCBub2RlcyBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGFzc2lnbmVkIGEgXCJyYW5rXCIgcHJvcGVydHkgdGhhdFxuICogICAgICAgcmVzcGVjdHMgdGhlIFwibWlubGVuXCIgcHJvcGVydHkgb2YgaW5jaWRlbnQgZWRnZXMuXG4gKiAgICA2LiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgYSBcIm1pbmxlblwiIHByb3BlcnR5LlxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAtIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSB0aGVpciByYW5rIGFkanVzdGVkIHRvIGVuc3VyZSB0aGF0IGFsbCBlZGdlcyBhcmVcbiAqICAgICAgdGlnaHQuXG4gKlxuICogUmV0dXJucyBhIHRyZWUgKHVuZGlyZWN0ZWQgZ3JhcGgpIHRoYXQgaXMgY29uc3RydWN0ZWQgdXNpbmcgb25seSBcInRpZ2h0XCJcbiAqIGVkZ2VzLlxuICovXG5mdW5jdGlvbiBmZWFzaWJsZVRyZWUoZykge1xuICB2YXIgdCA9IG5ldyBHcmFwaCh7IGRpcmVjdGVkOiBmYWxzZSB9KTtcblxuICAvLyBDaG9vc2UgYXJiaXRyYXJ5IG5vZGUgZnJvbSB3aGljaCB0byBzdGFydCBvdXIgdHJlZVxuICB2YXIgc3RhcnQgPSBnLm5vZGVzKClbMF07XG4gIHZhciBzaXplID0gZy5ub2RlQ291bnQoKTtcbiAgdC5zZXROb2RlKHN0YXJ0LCB7fSk7XG5cbiAgdmFyIGVkZ2UsIGRlbHRhO1xuICB3aGlsZSAodGlnaHRUcmVlKHQsIGcpIDwgc2l6ZSkge1xuICAgIGVkZ2UgPSBmaW5kTWluU2xhY2tFZGdlKHQsIGcpO1xuICAgIGRlbHRhID0gdC5oYXNOb2RlKGVkZ2UudikgPyBzbGFjayhnLCBlZGdlKSA6IC1zbGFjayhnLCBlZGdlKTtcbiAgICBzaGlmdFJhbmtzKHQsIGcsIGRlbHRhKTtcbiAgfVxuXG4gIHJldHVybiB0O1xufVxuXG4vKlxuICogRmluZHMgYSBtYXhpbWFsIHRyZWUgb2YgdGlnaHQgZWRnZXMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGVcbiAqIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRpZ2h0VHJlZSh0LCBnKSB7XG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgXy5mb3JFYWNoKGcubm9kZUVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGVkZ2VWID0gZS52LFxuICAgICAgICB3ID0gdiA9PT0gZWRnZVYgPyBlLncgOiBlZGdlVjtcbiAgICAgIGlmICghdC5oYXNOb2RlKHcpICYmICFzbGFjayhnLCBlKSkge1xuICAgICAgICB0LnNldE5vZGUodywge30pO1xuICAgICAgICB0LnNldEVkZ2Uodiwgdywge30pO1xuICAgICAgICBkZnModyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfLmZvckVhY2godC5ub2RlcygpLCBkZnMpO1xuICByZXR1cm4gdC5ub2RlQ291bnQoKTtcbn1cblxuLypcbiAqIEZpbmRzIHRoZSBlZGdlIHdpdGggdGhlIHNtYWxsZXN0IHNsYWNrIHRoYXQgaXMgaW5jaWRlbnQgb24gdHJlZSBhbmQgcmV0dXJuc1xuICogaXQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRNaW5TbGFja0VkZ2UodCwgZykge1xuICByZXR1cm4gXy5taW5CeShnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHQuaGFzTm9kZShlLnYpICE9PSB0Lmhhc05vZGUoZS53KSkge1xuICAgICAgcmV0dXJuIHNsYWNrKGcsIGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0UmFua3ModCwgZywgZGVsdGEpIHtcbiAgXy5mb3JFYWNoKHQubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBnLm5vZGUodikucmFuayArPSBkZWx0YTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/rank/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/rank/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"rank\": () => (/* binding */ rank)\n/* harmony export */ });\n/* harmony import */ var _feasible_tree_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./feasible-tree.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js\");\n/* harmony import */ var _network_simplex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./network-simplex.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/util.js\");\n\n\n\n\n\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch (g.graph().ranker) {\n case 'network-simplex':\n networkSimplexRanker(g);\n break;\n case 'tight-tree':\n tightTreeRanker(g);\n break;\n case 'longest-path':\n longestPathRanker(g);\n break;\n default:\n networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = _util_js__WEBPACK_IMPORTED_MODULE_2__.longestPath;\n\nfunction tightTreeRanker(g) {\n (0,_util_js__WEBPACK_IMPORTED_MODULE_2__.longestPath)(g);\n (0,_feasible_tree_js__WEBPACK_IMPORTED_MODULE_0__.feasibleTree)(g);\n}\n\nfunction networkSimplexRanker(g) {\n (0,_network_simplex_js__WEBPACK_IMPORTED_MODULE_1__.networkSimplex)(g);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Q7QUFDSTtBQUNkOztBQUV4Qjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsaURBQVc7O0FBRW5DO0FBQ0EsRUFBRSxxREFBVztBQUNiLEVBQUUsK0RBQVk7QUFDZDs7QUFFQTtBQUNBLEVBQUUsbUVBQWM7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL2luZGV4LmpzP2E3MzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmVhc2libGVUcmVlIH0gZnJvbSAnLi9mZWFzaWJsZS10cmVlLmpzJztcbmltcG9ydCB7IG5ldHdvcmtTaW1wbGV4IH0gZnJvbSAnLi9uZXR3b3JrLXNpbXBsZXguanMnO1xuaW1wb3J0IHsgbG9uZ2VzdFBhdGggfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyByYW5rIH07XG5cbi8qXG4gKiBBc3NpZ25zIGEgcmFuayB0byBlYWNoIG5vZGUgaW4gdGhlIGlucHV0IGdyYXBoIHRoYXQgcmVzcGVjdHMgdGhlIFwibWlubGVuXCJcbiAqIGNvbnN0cmFpbnQgc3BlY2lmaWVkIG9uIGVkZ2VzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogVGhpcyBiYXNpYyBzdHJ1Y3R1cmUgaXMgZGVyaXZlZCBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZSBmb3JcbiAqIERyYXdpbmcgRGlyZWN0ZWQgR3JhcGhzLlwiXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gR3JhcGggbXVzdCBiZSBhIGNvbm5lY3RlZCBEQUdcbiAqICAgIDIuIEdyYXBoIG5vZGVzIG11c3QgYmUgb2JqZWN0c1xuICogICAgMy4gR3JhcGggZWRnZXMgbXVzdCBoYXZlIFwid2VpZ2h0XCIgYW5kIFwibWlubGVuXCIgYXR0cmlidXRlc1xuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBub2RlcyB3aWxsIGhhdmUgYSBcInJhbmtcIiBhdHRyaWJ1dGUgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlXG4gKiAgICAgICBhbGdvcml0aG0uIFJhbmtzIGNhbiBzdGFydCBhdCBhbnkgaW5kZXggKGluY2x1ZGluZyBuZWdhdGl2ZSksIHdlJ2xsXG4gKiAgICAgICBmaXggdGhlbSB1cCBsYXRlci5cbiAqL1xuZnVuY3Rpb24gcmFuayhnKSB7XG4gIHN3aXRjaCAoZy5ncmFwaCgpLnJhbmtlcikge1xuICAgIGNhc2UgJ25ldHdvcmstc2ltcGxleCc6XG4gICAgICBuZXR3b3JrU2ltcGxleFJhbmtlcihnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RpZ2h0LXRyZWUnOlxuICAgICAgdGlnaHRUcmVlUmFua2VyKGcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbG9uZ2VzdC1wYXRoJzpcbiAgICAgIGxvbmdlc3RQYXRoUmFua2VyKGcpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpO1xuICB9XG59XG5cbi8vIEEgZmFzdCBhbmQgc2ltcGxlIHJhbmtlciwgYnV0IHJlc3VsdHMgYXJlIGZhciBmcm9tIG9wdGltYWwuXG52YXIgbG9uZ2VzdFBhdGhSYW5rZXIgPSBsb25nZXN0UGF0aDtcblxuZnVuY3Rpb24gdGlnaHRUcmVlUmFua2VyKGcpIHtcbiAgbG9uZ2VzdFBhdGgoZyk7XG4gIGZlYXNpYmxlVHJlZShnKTtcbn1cblxuZnVuY3Rpb24gbmV0d29ya1NpbXBsZXhSYW5rZXIoZykge1xuICBuZXR3b3JrU2ltcGxleChnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/rank/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js": /*!***************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"networkSimplex\": () => (/* binding */ networkSimplex)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/find.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/minBy.js\");\n/* harmony import */ var _graphlib_alg_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../graphlib/alg/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/index.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/util.js\");\n/* harmony import */ var _feasible_tree_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./feasible-tree.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/dagre-d3-es/src/dagre/rank/util.js\");\n\n\n\n\n\n\n\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.simplify)(g);\n (0,_util_js__WEBPACK_IMPORTED_MODULE_3__.longestPath)(g);\n var t = (0,_feasible_tree_js__WEBPACK_IMPORTED_MODULE_2__.feasibleTree)(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = _graphlib_alg_index_js__WEBPACK_IMPORTED_MODULE_0__.postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](vs, function (v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](g.nodeEdges(child), function (e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](tree.neighbors(v), function (w) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](tree.edges(), function (e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](g.edges(), function (edge) {\n return (\n flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel)\n );\n });\n\n return lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](candidates, function (edge) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_3__.slack)(g, edge);\n });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](t.nodes(), function (v) {\n return !g.node(v).parent;\n });\n var vs = _graphlib_alg_index_js__WEBPACK_IMPORTED_MODULE_0__.preorder(t, root);\n vs = vs.slice(1);\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](vs, function (v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL25ldHdvcmstc2ltcGxleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ29CO0FBQ2I7QUFDWTtBQUNIOztBQUVyQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFRO0FBQ2QsRUFBRSxxREFBVztBQUNiLFVBQVUsK0RBQVk7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZEQUFhO0FBQ3hCO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRSxpREFBUztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLGlEQUFTO0FBQ1gsU0FBUyxpREFBSztBQUNkO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxpREFBTTtBQUNmO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGlEQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxTQUFTLGlEQUFPO0FBQ2hCLFdBQVcsK0NBQUs7QUFDaEIsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxpREFBTTtBQUNuQjtBQUNBLEdBQUc7QUFDSCxXQUFXLDREQUFZO0FBQ3ZCO0FBQ0EsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL25ldHdvcmstc2ltcGxleC5qcz9hYmNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIGFsZyBmcm9tICcuLi8uLi9ncmFwaGxpYi9hbGcvaW5kZXguanMnO1xuaW1wb3J0IHsgc2ltcGxpZnkgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGZlYXNpYmxlVHJlZSB9IGZyb20gJy4vZmVhc2libGUtdHJlZS5qcyc7XG5pbXBvcnQgeyBsb25nZXN0UGF0aCwgc2xhY2sgfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBuZXR3b3JrU2ltcGxleCB9O1xuXG4vLyBFeHBvc2Ugc29tZSBpbnRlcm5hbHMgZm9yIHRlc3RpbmcgcHVycG9zZXNcbm5ldHdvcmtTaW1wbGV4LmluaXRMb3dMaW1WYWx1ZXMgPSBpbml0TG93TGltVmFsdWVzO1xubmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcyA9IGluaXRDdXRWYWx1ZXM7XG5uZXR3b3JrU2ltcGxleC5jYWxjQ3V0VmFsdWUgPSBjYWxjQ3V0VmFsdWU7XG5uZXR3b3JrU2ltcGxleC5sZWF2ZUVkZ2UgPSBsZWF2ZUVkZ2U7XG5uZXR3b3JrU2ltcGxleC5lbnRlckVkZ2UgPSBlbnRlckVkZ2U7XG5uZXR3b3JrU2ltcGxleC5leGNoYW5nZUVkZ2VzID0gZXhjaGFuZ2VFZGdlcztcblxuLypcbiAqIFRoZSBuZXR3b3JrIHNpbXBsZXggYWxnb3JpdGhtIGFzc2lnbnMgcmFua3MgdG8gZWFjaCBub2RlIGluIHRoZSBpbnB1dCBncmFwaFxuICogYW5kIGl0ZXJhdGl2ZWx5IGltcHJvdmVzIHRoZSByYW5raW5nIHRvIHJlZHVjZSB0aGUgbGVuZ3RoIG9mIGVkZ2VzLlxuICpcbiAqIFByZWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gVGhlIGlucHV0IGdyYXBoIG11c3QgYmUgYSBEQUcuXG4gKiAgICAyLiBBbGwgbm9kZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBhbiBvYmplY3QgdmFsdWUuXG4gKiAgICAzLiBBbGwgZWRnZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBcIm1pbmxlblwiIGFuZCBcIndlaWdodFwiIGF0dHJpYnV0ZXMuXG4gKlxuICogUG9zdGNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gQWxsIG5vZGVzIGluIHRoZSBncmFwaCB3aWxsIGhhdmUgYW4gYXNzaWduZWQgXCJyYW5rXCIgYXR0cmlidXRlIHRoYXQgaGFzXG4gKiAgICAgICBiZWVuIG9wdGltaXplZCBieSB0aGUgbmV0d29yayBzaW1wbGV4IGFsZ29yaXRobS4gUmFua3Mgc3RhcnQgYXQgMC5cbiAqXG4gKlxuICogQSByb3VnaCBza2V0Y2ggb2YgdGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxuICpcbiAqICAgIDEuIEFzc2lnbiBpbml0aWFsIHJhbmtzIHRvIGVhY2ggbm9kZS4gV2UgdXNlIHRoZSBsb25nZXN0IHBhdGggYWxnb3JpdGhtLFxuICogICAgICAgd2hpY2ggYXNzaWducyByYW5rcyB0byB0aGUgbG93ZXN0IHBvc2l0aW9uIHBvc3NpYmxlLiBJbiBnZW5lcmFsIHRoaXNcbiAqICAgICAgIGxlYWRzIHRvIHZlcnkgd2lkZSBib3R0b20gcmFua3MgYW5kIHVubmVjZXNzYXJpbHkgbG9uZyBlZGdlcy5cbiAqICAgIDIuIENvbnN0cnVjdCBhIGZlYXNpYmxlIHRpZ2h0IHRyZWUuIEEgdGlnaHQgdHJlZSBpcyBvbmUgc3VjaCB0aGF0IGFsbFxuICogICAgICAgZWRnZXMgaW4gdGhlIHRyZWUgaGF2ZSBubyBzbGFjayAoZGlmZmVyZW5jZSBiZXR3ZWVuIGxlbmd0aCBvZiBlZGdlXG4gKiAgICAgICBhbmQgbWlubGVuIGZvciB0aGUgZWRnZSkuIFRoaXMgYnkgaXRzZWxmIGdyZWF0bHkgaW1wcm92ZXMgdGhlIGFzc2lnbmVkXG4gKiAgICAgICByYW5raW5ncyBieSBzaG9ydGluZyBlZGdlcy5cbiAqICAgIDMuIEl0ZXJhdGl2ZWx5IGZpbmQgZWRnZXMgdGhhdCBoYXZlIG5lZ2F0aXZlIGN1dCB2YWx1ZXMuIEdlbmVyYWxseSBhXG4gKiAgICAgICBuZWdhdGl2ZSBjdXQgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGVkZ2UgY291bGQgYmUgcmVtb3ZlZCBhbmQgYSBuZXdcbiAqICAgICAgIHRyZWUgZWRnZSBjb3VsZCBiZSBhZGRlZCB0byBwcm9kdWNlIGEgbW9yZSBjb21wYWN0IGdyYXBoLlxuICpcbiAqIE11Y2ggb2YgdGhlIGFsZ29yaXRobXMgaGVyZSBhcmUgZGVyaXZlZCBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZVxuICogZm9yIERyYXdpbmcgRGlyZWN0ZWQgR3JhcGhzLlwiIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgcm91Z2hseSBmb2xsb3dzIHRoZVxuICogc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGFsZ29yaXRobS5cbiAqL1xuZnVuY3Rpb24gbmV0d29ya1NpbXBsZXgoZykge1xuICBnID0gc2ltcGxpZnkoZyk7XG4gIGxvbmdlc3RQYXRoKGcpO1xuICB2YXIgdCA9IGZlYXNpYmxlVHJlZShnKTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcblxuICB2YXIgZSwgZjtcbiAgd2hpbGUgKChlID0gbGVhdmVFZGdlKHQpKSkge1xuICAgIGYgPSBlbnRlckVkZ2UodCwgZywgZSk7XG4gICAgZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKTtcbiAgfVxufVxuXG4vKlxuICogSW5pdGlhbGl6ZXMgY3V0IHZhbHVlcyBmb3IgYWxsIGVkZ2VzIGluIHRoZSB0cmVlLlxuICovXG5mdW5jdGlvbiBpbml0Q3V0VmFsdWVzKHQsIGcpIHtcbiAgdmFyIHZzID0gYWxnLnBvc3RvcmRlcih0LCB0Lm5vZGVzKCkpO1xuICB2cyA9IHZzLnNsaWNlKDAsIHZzLmxlbmd0aCAtIDEpO1xuICBfLmZvckVhY2godnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgYXNzaWduQ3V0VmFsdWUodCwgZywgdik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DdXRWYWx1ZSh0LCBnLCBjaGlsZCkge1xuICB2YXIgY2hpbGRMYWIgPSB0Lm5vZGUoY2hpbGQpO1xuICB2YXIgcGFyZW50ID0gY2hpbGRMYWIucGFyZW50O1xuICB0LmVkZ2UoY2hpbGQsIHBhcmVudCkuY3V0dmFsdWUgPSBjYWxjQ3V0VmFsdWUodCwgZywgY2hpbGQpO1xufVxuXG4vKlxuICogR2l2ZW4gdGhlIHRpZ2h0IHRyZWUsIGl0cyBncmFwaCwgYW5kIGEgY2hpbGQgaW4gdGhlIGdyYXBoIGNhbGN1bGF0ZSBhbmRcbiAqIHJldHVybiB0aGUgY3V0IHZhbHVlIGZvciB0aGUgZWRnZSBiZXR3ZWVuIHRoZSBjaGlsZCBhbmQgaXRzIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gY2FsY0N1dFZhbHVlKHQsIGcsIGNoaWxkKSB7XG4gIHZhciBjaGlsZExhYiA9IHQubm9kZShjaGlsZCk7XG4gIHZhciBwYXJlbnQgPSBjaGlsZExhYi5wYXJlbnQ7XG4gIC8vIFRydWUgaWYgdGhlIGNoaWxkIGlzIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgZWRnZSBpbiB0aGUgZGlyZWN0ZWQgZ3JhcGhcbiAgdmFyIGNoaWxkSXNUYWlsID0gdHJ1ZTtcbiAgLy8gVGhlIGdyYXBoJ3MgdmlldyBvZiB0aGUgdHJlZSBlZGdlIHdlJ3JlIGluc3BlY3RpbmdcbiAgdmFyIGdyYXBoRWRnZSA9IGcuZWRnZShjaGlsZCwgcGFyZW50KTtcbiAgLy8gVGhlIGFjY3VtdWxhdGVkIGN1dCB2YWx1ZSBmb3IgdGhlIGVkZ2UgYmV0d2VlbiB0aGlzIG5vZGUgYW5kIGl0cyBwYXJlbnRcbiAgdmFyIGN1dFZhbHVlID0gMDtcblxuICBpZiAoIWdyYXBoRWRnZSkge1xuICAgIGNoaWxkSXNUYWlsID0gZmFsc2U7XG4gICAgZ3JhcGhFZGdlID0gZy5lZGdlKHBhcmVudCwgY2hpbGQpO1xuICB9XG5cbiAgY3V0VmFsdWUgPSBncmFwaEVkZ2Uud2VpZ2h0O1xuXG4gIF8uZm9yRWFjaChnLm5vZGVFZGdlcyhjaGlsZCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGlzT3V0RWRnZSA9IGUudiA9PT0gY2hpbGQsXG4gICAgICBvdGhlciA9IGlzT3V0RWRnZSA/IGUudyA6IGUudjtcblxuICAgIGlmIChvdGhlciAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgcG9pbnRzVG9IZWFkID0gaXNPdXRFZGdlID09PSBjaGlsZElzVGFpbCxcbiAgICAgICAgb3RoZXJXZWlnaHQgPSBnLmVkZ2UoZSkud2VpZ2h0O1xuXG4gICAgICBjdXRWYWx1ZSArPSBwb2ludHNUb0hlYWQgPyBvdGhlcldlaWdodCA6IC1vdGhlcldlaWdodDtcbiAgICAgIGlmIChpc1RyZWVFZGdlKHQsIGNoaWxkLCBvdGhlcikpIHtcbiAgICAgICAgdmFyIG90aGVyQ3V0VmFsdWUgPSB0LmVkZ2UoY2hpbGQsIG90aGVyKS5jdXR2YWx1ZTtcbiAgICAgICAgY3V0VmFsdWUgKz0gcG9pbnRzVG9IZWFkID8gLW90aGVyQ3V0VmFsdWUgOiBvdGhlckN1dFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGN1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUsIHJvb3QpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgcm9vdCA9IHRyZWUubm9kZXMoKVswXTtcbiAgfVxuICBkZnNBc3NpZ25Mb3dMaW0odHJlZSwge30sIDEsIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBkZnNBc3NpZ25Mb3dMaW0odHJlZSwgdmlzaXRlZCwgbmV4dExpbSwgdiwgcGFyZW50KSB7XG4gIHZhciBsb3cgPSBuZXh0TGltO1xuICB2YXIgbGFiZWwgPSB0cmVlLm5vZGUodik7XG5cbiAgdmlzaXRlZFt2XSA9IHRydWU7XG4gIF8uZm9yRWFjaCh0cmVlLm5laWdoYm9ycyh2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICBpZiAoIV8uaGFzKHZpc2l0ZWQsIHcpKSB7XG4gICAgICBuZXh0TGltID0gZGZzQXNzaWduTG93TGltKHRyZWUsIHZpc2l0ZWQsIG5leHRMaW0sIHcsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGFiZWwubG93ID0gbG93O1xuICBsYWJlbC5saW0gPSBuZXh0TGltKys7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBsYWJlbC5wYXJlbnQgPSBwYXJlbnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyB3aGVuIHdlIGluY3JlbWVudGFsbHkgdXBkYXRlIGxvdyBsaW1cbiAgICBkZWxldGUgbGFiZWwucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIG5leHRMaW07XG59XG5cbmZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKSB7XG4gIHJldHVybiBfLmZpbmQodHJlZS5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiB0cmVlLmVkZ2UoZSkuY3V0dmFsdWUgPCAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50ZXJFZGdlKHQsIGcsIGVkZ2UpIHtcbiAgdmFyIHYgPSBlZGdlLnY7XG4gIHZhciB3ID0gZWRnZS53O1xuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHdlIGFzc3VtZSB0aGF0IHYgaXMgdGhlIHRhaWwgYW5kIHcgaXMgdGhlXG4gIC8vIGhlYWQsIHNvIGlmIHdlIGRvbid0IGhhdmUgdGhpcyBlZGdlIGluIHRoZSBncmFwaCB3ZSBzaG91bGQgZmxpcCBpdCB0b1xuICAvLyBtYXRjaCB0aGUgY29ycmVjdCBvcmllbnRhdGlvbi5cbiAgaWYgKCFnLmhhc0VkZ2UodiwgdykpIHtcbiAgICB2ID0gZWRnZS53O1xuICAgIHcgPSBlZGdlLnY7XG4gIH1cblxuICB2YXIgdkxhYmVsID0gdC5ub2RlKHYpO1xuICB2YXIgd0xhYmVsID0gdC5ub2RlKHcpO1xuICB2YXIgdGFpbExhYmVsID0gdkxhYmVsO1xuICB2YXIgZmxpcCA9IGZhbHNlO1xuXG4gIC8vIElmIHRoZSByb290IGlzIGluIHRoZSB0YWlsIG9mIHRoZSBlZGdlIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBsb2dpYyB0aGF0XG4gIC8vIGNoZWNrcyBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgbm9kZXMgaW4gdGhlIGNhbmRpZGF0ZXMgZnVuY3Rpb24gYmVsb3cuXG4gIGlmICh2TGFiZWwubGltID4gd0xhYmVsLmxpbSkge1xuICAgIHRhaWxMYWJlbCA9IHdMYWJlbDtcbiAgICBmbGlwID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gXy5maWx0ZXIoZy5lZGdlcygpLCBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHJldHVybiAoXG4gICAgICBmbGlwID09PSBpc0Rlc2NlbmRhbnQodCwgdC5ub2RlKGVkZ2UudiksIHRhaWxMYWJlbCkgJiZcbiAgICAgIGZsaXAgIT09IGlzRGVzY2VuZGFudCh0LCB0Lm5vZGUoZWRnZS53KSwgdGFpbExhYmVsKVxuICAgICk7XG4gIH0pO1xuXG4gIHJldHVybiBfLm1pbkJ5KGNhbmRpZGF0ZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgcmV0dXJuIHNsYWNrKGcsIGVkZ2UpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKSB7XG4gIHZhciB2ID0gZS52O1xuICB2YXIgdyA9IGUudztcbiAgdC5yZW1vdmVFZGdlKHYsIHcpO1xuICB0LnNldEVkZ2UoZi52LCBmLncsIHt9KTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcbiAgdXBkYXRlUmFua3ModCwgZyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsIGcpIHtcbiAgdmFyIHJvb3QgPSBfLmZpbmQodC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiAhZy5ub2RlKHYpLnBhcmVudDtcbiAgfSk7XG4gIHZhciB2cyA9IGFsZy5wcmVvcmRlcih0LCByb290KTtcbiAgdnMgPSB2cy5zbGljZSgxKTtcbiAgXy5mb3JFYWNoKHZzLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBwYXJlbnQgPSB0Lm5vZGUodikucGFyZW50LFxuICAgICAgZWRnZSA9IGcuZWRnZSh2LCBwYXJlbnQpLFxuICAgICAgZmxpcHBlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICBlZGdlID0gZy5lZGdlKHBhcmVudCwgdik7XG4gICAgICBmbGlwcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnLm5vZGUodikucmFuayA9IGcubm9kZShwYXJlbnQpLnJhbmsgKyAoZmxpcHBlZCA/IGVkZ2UubWlubGVuIDogLWVkZ2UubWlubGVuKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVkZ2UgaXMgaW4gdGhlIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIGlzVHJlZUVkZ2UodHJlZSwgdSwgdikge1xuICByZXR1cm4gdHJlZS5oYXNFZGdlKHUsIHYpO1xufVxuXG4vKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyBkZXNjZW5kYW50IG9mIHRoZSByb290IG5vZGUgcGVyIHRoZVxuICogYXNzaWduZWQgbG93IGFuZCBsaW0gYXR0cmlidXRlcyBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaXNEZXNjZW5kYW50KHRyZWUsIHZMYWJlbCwgcm9vdExhYmVsKSB7XG4gIHJldHVybiByb290TGFiZWwubG93IDw9IHZMYWJlbC5saW0gJiYgdkxhYmVsLmxpbSA8PSByb290TGFiZWwubGltO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/rank/util.js": /*!****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/rank/util.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"longestPath\": () => (/* binding */ longestPath),\n/* harmony export */ \"slack\": () => (/* binding */ slack)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/min.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n\n\n\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.outEdges(v), function (e) {\n return dfs(e.w) - g.edge(e).minlen;\n })\n );\n\n if (\n rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null\n ) {\n // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL3V0aWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQStCOztBQUVEOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTtBQUNBOztBQUVBLGVBQWUsaURBQUs7QUFDcEIsTUFBTSxpREFBSztBQUNYO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLGlEQUFTO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL3V0aWwuanM/MDEyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGxvbmdlc3RQYXRoLCBzbGFjayB9O1xuXG4vKlxuICogSW5pdGlhbGl6ZXMgcmFua3MgZm9yIHRoZSBpbnB1dCBncmFwaCB1c2luZyB0aGUgbG9uZ2VzdCBwYXRoIGFsZ29yaXRobS4gVGhpc1xuICogYWxnb3JpdGhtIHNjYWxlcyB3ZWxsIGFuZCBpcyBmYXN0IGluIHByYWN0aWNlLCBpdCB5aWVsZHMgcmF0aGVyIHBvb3JcbiAqIHNvbHV0aW9ucy4gTm9kZXMgYXJlIHB1c2hlZCB0byB0aGUgbG93ZXN0IGxheWVyIHBvc3NpYmxlLCBsZWF2aW5nIHRoZSBib3R0b21cbiAqIHJhbmtzIHdpZGUgYW5kIGxlYXZpbmcgZWRnZXMgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5LiBIb3dldmVyLCBkdWUgdG8gaXRzXG4gKiBzcGVlZCwgdGhpcyBhbGdvcml0aG0gaXMgZ29vZCBmb3IgZ2V0dGluZyBhbiBpbml0aWFsIHJhbmtpbmcgdGhhdCBjYW4gYmUgZmVkXG4gKiBpbnRvIG90aGVyIGFsZ29yaXRobXMuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gZG9lcyBub3Qgbm9ybWFsaXplIGxheWVycyBiZWNhdXNlIGl0IHdpbGwgYmUgdXNlZCBieSBvdGhlclxuICogYWxnb3JpdGhtcyBpbiBtb3N0IGNhc2VzLiBJZiB1c2luZyB0aGlzIGFsZ29yaXRobSBkaXJlY3RseSwgYmUgc3VyZSB0b1xuICogcnVuIG5vcm1hbGl6ZSBhdCB0aGUgZW5kLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHLlxuICogICAgMi4gSW5wdXQgZ3JhcGggbm9kZSBsYWJlbHMgY2FuIGJlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEVhY2ggbm9kZSB3aWxsIGJlIGFzc2lnbiBhbiAodW5ub3JtYWxpemVkKSBcInJhbmtcIiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuXG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgdmFyIGxhYmVsID0gZy5ub2RlKHYpO1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgICAgcmV0dXJuIGxhYmVsLnJhbms7XG4gICAgfVxuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgdmFyIHJhbmsgPSBfLm1pbihcbiAgICAgIF8ubWFwKGcub3V0RWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBkZnMoZS53KSAtIGcuZWRnZShlKS5taW5sZW47XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICByYW5rID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtdKSBmb3IgTG9kYXNoIDNcbiAgICAgIHJhbmsgPT09IHVuZGVmaW5lZCB8fCAvLyByZXR1cm4gdmFsdWUgb2YgXy5tYXAoW10pIGZvciBMb2Rhc2ggNFxuICAgICAgcmFuayA9PT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtudWxsXSlcbiAgICAgIHJhbmsgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobGFiZWwucmFuayA9IHJhbmspO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcuc291cmNlcygpLCBkZnMpO1xufVxuXG4vKlxuICogUmV0dXJucyB0aGUgYW1vdW50IG9mIHNsYWNrIGZvciB0aGUgZ2l2ZW4gZWRnZS4gVGhlIHNsYWNrIGlzIGRlZmluZWQgYXMgdGhlXG4gKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxlbmd0aCBvZiB0aGUgZWRnZSBhbmQgaXRzIG1pbmltdW0gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzbGFjayhnLCBlKSB7XG4gIHJldHVybiBnLm5vZGUoZS53KS5yYW5rIC0gZy5ub2RlKGUudikucmFuayAtIGcuZWRnZShlKS5taW5sZW47XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/rank/util.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/dagre/util.js": /*!***********************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/dagre/util.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"addBorderNode\": () => (/* binding */ addBorderNode),\n/* harmony export */ \"addDummyNode\": () => (/* binding */ addDummyNode),\n/* harmony export */ \"asNonCompoundGraph\": () => (/* binding */ asNonCompoundGraph),\n/* harmony export */ \"buildLayerMatrix\": () => (/* binding */ buildLayerMatrix),\n/* harmony export */ \"intersectRect\": () => (/* binding */ intersectRect),\n/* harmony export */ \"maxRank\": () => (/* binding */ maxRank),\n/* harmony export */ \"normalizeRanks\": () => (/* binding */ normalizeRanks),\n/* harmony export */ \"notime\": () => (/* binding */ notime),\n/* harmony export */ \"partition\": () => (/* binding */ partition),\n/* harmony export */ \"predecessorWeights\": () => (/* binding */ predecessorWeights),\n/* harmony export */ \"removeEmptyRanks\": () => (/* binding */ removeEmptyRanks),\n/* harmony export */ \"simplify\": () => (/* binding */ simplify),\n/* harmony export */ \"successorWeights\": () => (/* binding */ successorWeights),\n/* harmony export */ \"time\": () => (/* binding */ time)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/uniqueId.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/zipObject.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/range.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/min.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/max.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/now.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n\n\n\n\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph().setGraph(g.graph());\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n simplified.setNode(v, g.node(v));\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.edges(), function (e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen),\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new _graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.edges(), function (e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n var sucs = {};\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.outEdges(v), function (e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n var preds = {};\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.inEdges(v), function (e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error('Not possible to find intersection inside of the rectangle');\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](maxRank(g) + 1), function () {\n return [];\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n var node = g.node(v);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](node, 'rank')) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n\n var layers = [];\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](layers, function (vs, i) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](vs, function (v) {\n g.node(v).rank += delta;\n });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0,\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](\n lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n var rank = g.node(v).rank;\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](rank)) {\n return rank;\n }\n })\n );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](collection, function (value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n try {\n return fn();\n } finally {\n console.log(name + ' time: ' + (lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"]() - start) + 'ms');\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS91dGlsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDYzs7QUFpQjNDOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaURBQVU7QUFDbEIsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFEQUFLO0FBQzVCLEVBQUUsaURBQVM7QUFDWDtBQUNBLEdBQUc7QUFDSCxFQUFFLGlEQUFTO0FBQ1gscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHFEQUFLLEdBQUcsOEJBQThCO0FBQzdELEVBQUUsaURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRSxpREFBUztBQUNYO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsaURBQUs7QUFDdkI7QUFDQSxJQUFJLGlEQUFTO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsU0FBUyxpREFBVztBQUNwQjs7QUFFQTtBQUNBLGtCQUFrQixpREFBSztBQUN2QjtBQUNBLElBQUksaURBQVM7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxTQUFTLGlEQUFXO0FBQ3BCOztBQUVBO0FBQ0EsMENBQTBDLEtBQUs7QUFDL0MsS0FBSyxvQkFBb0I7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlEQUFLLENBQUMsaURBQU87QUFDOUI7QUFDQSxHQUFHO0FBQ0gsRUFBRSxpREFBUztBQUNYO0FBQ0E7QUFDQSxTQUFTLGlEQUFhO0FBQ3RCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpREFBSztBQUNqQixJQUFJLGlEQUFLO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxpREFBSztBQUNwQixJQUFJLGlEQUFLO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUUsaURBQVM7QUFDWCxRQUFRLGlEQUFhO0FBQ3JCO0FBQ0EsTUFBTTtBQUNOLE1BQU0saURBQVM7QUFDZjtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxpREFBSztBQUNkLElBQUksaURBQUs7QUFDVDtBQUNBLFdBQVcsaURBQWE7QUFDeEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixFQUFFLGlEQUFTO0FBQ1g7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsa0RBQUs7QUFDbkI7QUFDQTtBQUNBLElBQUk7QUFDSixvQ0FBb0Msa0RBQUs7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS91dGlsLmpzPzZkYTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9ncmFwaGxpYi9pbmRleC5qcyc7XG5cbmV4cG9ydCB7XG4gIGFkZER1bW15Tm9kZSxcbiAgc2ltcGxpZnksXG4gIGFzTm9uQ29tcG91bmRHcmFwaCxcbiAgc3VjY2Vzc29yV2VpZ2h0cyxcbiAgcHJlZGVjZXNzb3JXZWlnaHRzLFxuICBpbnRlcnNlY3RSZWN0LFxuICBidWlsZExheWVyTWF0cml4LFxuICBub3JtYWxpemVSYW5rcyxcbiAgcmVtb3ZlRW1wdHlSYW5rcyxcbiAgYWRkQm9yZGVyTm9kZSxcbiAgbWF4UmFuayxcbiAgcGFydGl0aW9uLFxuICB0aW1lLFxuICBub3RpbWUsXG59O1xuXG4vKlxuICogQWRkcyBhIGR1bW15IG5vZGUgdG8gdGhlIGdyYXBoIGFuZCByZXR1cm4gdi5cbiAqL1xuZnVuY3Rpb24gYWRkRHVtbXlOb2RlKGcsIHR5cGUsIGF0dHJzLCBuYW1lKSB7XG4gIHZhciB2O1xuICBkbyB7XG4gICAgdiA9IF8udW5pcXVlSWQobmFtZSk7XG4gIH0gd2hpbGUgKGcuaGFzTm9kZSh2KSk7XG5cbiAgYXR0cnMuZHVtbXkgPSB0eXBlO1xuICBnLnNldE5vZGUodiwgYXR0cnMpO1xuICByZXR1cm4gdjtcbn1cblxuLypcbiAqIFJldHVybnMgYSBuZXcgZ3JhcGggd2l0aCBvbmx5IHNpbXBsZSBlZGdlcy4gSGFuZGxlcyBhZ2dyZWdhdGlvbiBvZiBkYXRhXG4gKiBhc3NvY2lhdGVkIHdpdGggbXVsdGktZWRnZXMuXG4gKi9cbmZ1bmN0aW9uIHNpbXBsaWZ5KGcpIHtcbiAgdmFyIHNpbXBsaWZpZWQgPSBuZXcgR3JhcGgoKS5zZXRHcmFwaChnLmdyYXBoKCkpO1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHNpbXBsaWZpZWQuc2V0Tm9kZSh2LCBnLm5vZGUodikpO1xuICB9KTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2ltcGxlTGFiZWwgPSBzaW1wbGlmaWVkLmVkZ2UoZS52LCBlLncpIHx8IHsgd2VpZ2h0OiAwLCBtaW5sZW46IDEgfTtcbiAgICB2YXIgbGFiZWwgPSBnLmVkZ2UoZSk7XG4gICAgc2ltcGxpZmllZC5zZXRFZGdlKGUudiwgZS53LCB7XG4gICAgICB3ZWlnaHQ6IHNpbXBsZUxhYmVsLndlaWdodCArIGxhYmVsLndlaWdodCxcbiAgICAgIG1pbmxlbjogTWF0aC5tYXgoc2ltcGxlTGFiZWwubWlubGVuLCBsYWJlbC5taW5sZW4pLFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHNpbXBsaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIGFzTm9uQ29tcG91bmRHcmFwaChnKSB7XG4gIHZhciBzaW1wbGlmaWVkID0gbmV3IEdyYXBoKHsgbXVsdGlncmFwaDogZy5pc011bHRpZ3JhcGgoKSB9KS5zZXRHcmFwaChnLmdyYXBoKCkpO1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGlmICghZy5jaGlsZHJlbih2KS5sZW5ndGgpIHtcbiAgICAgIHNpbXBsaWZpZWQuc2V0Tm9kZSh2LCBnLm5vZGUodikpO1xuICAgIH1cbiAgfSk7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgc2ltcGxpZmllZC5zZXRFZGdlKGUsIGcuZWRnZShlKSk7XG4gIH0pO1xuICByZXR1cm4gc2ltcGxpZmllZDtcbn1cblxuZnVuY3Rpb24gc3VjY2Vzc29yV2VpZ2h0cyhnKSB7XG4gIHZhciB3ZWlnaHRNYXAgPSBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIHN1Y3MgPSB7fTtcbiAgICBfLmZvckVhY2goZy5vdXRFZGdlcyh2KSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHN1Y3NbZS53XSA9IChzdWNzW2Uud10gfHwgMCkgKyBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBzdWNzO1xuICB9KTtcbiAgcmV0dXJuIF8uemlwT2JqZWN0KGcubm9kZXMoKSwgd2VpZ2h0TWFwKTtcbn1cblxuZnVuY3Rpb24gcHJlZGVjZXNzb3JXZWlnaHRzKGcpIHtcbiAgdmFyIHdlaWdodE1hcCA9IF8ubWFwKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgcHJlZHMgPSB7fTtcbiAgICBfLmZvckVhY2goZy5pbkVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcHJlZHNbZS52XSA9IChwcmVkc1tlLnZdIHx8IDApICsgZy5lZGdlKGUpLndlaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJlZHM7XG4gIH0pO1xuICByZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLCB3ZWlnaHRNYXApO1xufVxuXG4vKlxuICogRmluZHMgd2hlcmUgYSBsaW5lIHN0YXJ0aW5nIGF0IHBvaW50ICh7eCwgeX0pIHdvdWxkIGludGVyc2VjdCBhIHJlY3RhbmdsZVxuICogKHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSkgaWYgaXQgd2VyZSBwb2ludGluZyBhdCB0aGUgcmVjdGFuZ2xlJ3MgY2VudGVyLlxuICovXG5mdW5jdGlvbiBpbnRlcnNlY3RSZWN0KHJlY3QsIHBvaW50KSB7XG4gIHZhciB4ID0gcmVjdC54O1xuICB2YXIgeSA9IHJlY3QueTtcblxuICAvLyBSZWN0YW5nbGUgaW50ZXJzZWN0aW9uIGFsZ29yaXRobSBmcm9tOlxuICAvLyBodHRwOi8vbWF0aC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTA4MTEzL2ZpbmQtZWRnZS1iZXR3ZWVuLXR3by1ib3hlc1xuICB2YXIgZHggPSBwb2ludC54IC0geDtcbiAgdmFyIGR5ID0gcG9pbnQueSAtIHk7XG4gIHZhciB3ID0gcmVjdC53aWR0aCAvIDI7XG4gIHZhciBoID0gcmVjdC5oZWlnaHQgLyAyO1xuXG4gIGlmICghZHggJiYgIWR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUnKTtcbiAgfVxuXG4gIHZhciBzeCwgc3k7XG4gIGlmIChNYXRoLmFicyhkeSkgKiB3ID4gTWF0aC5hYnMoZHgpICogaCkge1xuICAgIC8vIEludGVyc2VjdGlvbiBpcyB0b3Agb3IgYm90dG9tIG9mIHJlY3QuXG4gICAgaWYgKGR5IDwgMCkge1xuICAgICAgaCA9IC1oO1xuICAgIH1cbiAgICBzeCA9IChoICogZHgpIC8gZHk7XG4gICAgc3kgPSBoO1xuICB9IGVsc2Uge1xuICAgIC8vIEludGVyc2VjdGlvbiBpcyBsZWZ0IG9yIHJpZ2h0IG9mIHJlY3QuXG4gICAgaWYgKGR4IDwgMCkge1xuICAgICAgdyA9IC13O1xuICAgIH1cbiAgICBzeCA9IHc7XG4gICAgc3kgPSAodyAqIGR5KSAvIGR4O1xuICB9XG5cbiAgcmV0dXJuIHsgeDogeCArIHN4LCB5OiB5ICsgc3kgfTtcbn1cblxuLypcbiAqIEdpdmVuIGEgREFHIHdpdGggZWFjaCBub2RlIGFzc2lnbmVkIFwicmFua1wiIGFuZCBcIm9yZGVyXCIgcHJvcGVydGllcywgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBwcm9kdWNlIGEgbWF0cml4IHdpdGggdGhlIGlkcyBvZiBlYWNoIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJNYXRyaXgoZykge1xuICB2YXIgbGF5ZXJpbmcgPSBfLm1hcChfLnJhbmdlKG1heFJhbmsoZykgKyAxKSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbXTtcbiAgfSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgdmFyIHJhbmsgPSBub2RlLnJhbms7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHJhbmspKSB7XG4gICAgICBsYXllcmluZ1tyYW5rXVtub2RlLm9yZGVyXSA9IHY7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxheWVyaW5nO1xufVxuXG4vKlxuICogQWRqdXN0cyB0aGUgcmFua3MgZm9yIGFsbCBub2RlcyBpbiB0aGUgZ3JhcGggc3VjaCB0aGF0IGFsbCBub2RlcyB2IGhhdmVcbiAqIHJhbmsodikgPj0gMCBhbmQgYXQgbGVhc3Qgb25lIG5vZGUgdyBoYXMgcmFuayh3KSA9IDAuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhbmtzKGcpIHtcbiAgdmFyIG1pbiA9IF8ubWluKFxuICAgIF8ubWFwKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBnLm5vZGUodikucmFuaztcbiAgICB9KVxuICApO1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGlmIChfLmhhcyhub2RlLCAncmFuaycpKSB7XG4gICAgICBub2RlLnJhbmsgLT0gbWluO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVtcHR5UmFua3MoZykge1xuICAvLyBSYW5rcyBtYXkgbm90IHN0YXJ0IGF0IDAsIHNvIHdlIG5lZWQgdG8gb2Zmc2V0IHRoZW1cbiAgdmFyIG9mZnNldCA9IF8ubWluKFxuICAgIF8ubWFwKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBnLm5vZGUodikucmFuaztcbiAgICB9KVxuICApO1xuXG4gIHZhciBsYXllcnMgPSBbXTtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgcmFuayA9IGcubm9kZSh2KS5yYW5rIC0gb2Zmc2V0O1xuICAgIGlmICghbGF5ZXJzW3JhbmtdKSB7XG4gICAgICBsYXllcnNbcmFua10gPSBbXTtcbiAgICB9XG4gICAgbGF5ZXJzW3JhbmtdLnB1c2godik7XG4gIH0pO1xuXG4gIHZhciBkZWx0YSA9IDA7XG4gIHZhciBub2RlUmFua0ZhY3RvciA9IGcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtcbiAgXy5mb3JFYWNoKGxheWVycywgZnVuY3Rpb24gKHZzLCBpKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQodnMpICYmIGkgJSBub2RlUmFua0ZhY3RvciAhPT0gMCkge1xuICAgICAgLS1kZWx0YTtcbiAgICB9IGVsc2UgaWYgKGRlbHRhKSB7XG4gICAgICBfLmZvckVhY2godnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGcubm9kZSh2KS5yYW5rICs9IGRlbHRhO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLCBwcmVmaXgsIHJhbmssIG9yZGVyKSB7XG4gIHZhciBub2RlID0ge1xuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMCxcbiAgfTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkge1xuICAgIG5vZGUucmFuayA9IHJhbms7XG4gICAgbm9kZS5vcmRlciA9IG9yZGVyO1xuICB9XG4gIHJldHVybiBhZGREdW1teU5vZGUoZywgJ2JvcmRlcicsIG5vZGUsIHByZWZpeCk7XG59XG5cbmZ1bmN0aW9uIG1heFJhbmsoZykge1xuICByZXR1cm4gXy5tYXgoXG4gICAgXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgdmFyIHJhbmsgPSBnLm5vZGUodikucmFuaztcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChyYW5rKSkge1xuICAgICAgICByZXR1cm4gcmFuaztcbiAgICAgIH1cbiAgICB9KVxuICApO1xufVxuXG4vKlxuICogUGFydGl0aW9uIGEgY29sbGVjdGlvbiBpbnRvIHR3byBncm91cHM6IGBsaHNgIGFuZCBgcmhzYC4gSWYgdGhlIHN1cHBsaWVkXG4gKiBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIGVudHJ5IGl0IGdvZXMgaW50byBgbGhzYC4gT3RoZXJ3aXNlIGl0IGdvZXNcbiAqIGludG8gYHJocy5cbiAqL1xuZnVuY3Rpb24gcGFydGl0aW9uKGNvbGxlY3Rpb24sIGZuKSB7XG4gIHZhciByZXN1bHQgPSB7IGxoczogW10sIHJoczogW10gfTtcbiAgXy5mb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChmbih2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdC5saHMucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5yaHMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLypcbiAqIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZm5gIHdpdGggYSB0aW1lci4gVGhlIHdyYXBwZXIgbG9ncyB0aGVcbiAqIHRpbWUgaXQgdGFrZXMgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRpbWUobmFtZSwgZm4pIHtcbiAgdmFyIHN0YXJ0ID0gXy5ub3coKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zb2xlLmxvZyhuYW1lICsgJyB0aW1lOiAnICsgKF8ubm93KCkgLSBzdGFydCkgKyAnbXMnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpbWUobmFtZSwgZm4pIHtcbiAgcmV0dXJuIGZuKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/dagre/util.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/components.js": /*!************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/components.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"components\": () => (/* binding */ components)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n\n\n\n\nfunction components(g) {\n var visited = {};\n var cmpts = [];\n var cmpt;\n\n function dfs(v) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](visited, v)) return;\n visited[v] = true;\n cmpt.push(v);\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.successors(v), dfs);\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.predecessors(v), dfs);\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.nodes(), function (v) {\n cmpt = [];\n dfs(v);\n if (cmpt.length) {\n cmpts.push(cmpt);\n }\n });\n\n return cmpts;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvY29tcG9uZW50cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0I7O0FBRVQ7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQSxJQUFJLGlEQUFNO0FBQ1YsSUFBSSxpREFBTTtBQUNWOztBQUVBLEVBQUUsaURBQU07QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2NvbXBvbmVudHMuanM/MGM0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGNvbXBvbmVudHMgfTtcblxuZnVuY3Rpb24gY29tcG9uZW50cyhnKSB7XG4gIHZhciB2aXNpdGVkID0ge307XG4gIHZhciBjbXB0cyA9IFtdO1xuICB2YXIgY21wdDtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuICAgIGNtcHQucHVzaCh2KTtcbiAgICBfLmVhY2goZy5zdWNjZXNzb3JzKHYpLCBkZnMpO1xuICAgIF8uZWFjaChnLnByZWRlY2Vzc29ycyh2KSwgZGZzKTtcbiAgfVxuXG4gIF8uZWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgY21wdCA9IFtdO1xuICAgIGRmcyh2KTtcbiAgICBpZiAoY21wdC5sZW5ndGgpIHtcbiAgICAgIGNtcHRzLnB1c2goY21wdCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY21wdHM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/components.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js": /*!*****************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dfs\": () => (/* binding */ dfs)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n\n\n\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v);\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](visited, v)) {\n visited[v] = true;\n\n if (!postorder) {\n acc.push(v);\n }\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) {\n acc.push(v);\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZGZzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7O0FBRWhCOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8saURBQVM7QUFDaEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRSxpREFBTTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsT0FBTyxpREFBSztBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksaURBQU07QUFDVjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2Rmcy5qcz85MDc5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgZGZzIH07XG5cbi8qXG4gKiBBIGhlbHBlciB0aGF0IHByZWZvcm1zIGEgcHJlLSBvciBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvbiB0aGUgaW5wdXQgZ3JhcGhcbiAqIGFuZCByZXR1cm5zIHRoZSBub2RlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHZpc2l0ZWQuIElmIHRoZSBncmFwaCBpc1xuICogdW5kaXJlY3RlZCB0aGVuIHRoaXMgYWxnb3JpdGhtIHdpbGwgbmF2aWdhdGUgdXNpbmcgbmVpZ2hib3JzLiBJZiB0aGUgZ3JhcGhcbiAqIGlzIGRpcmVjdGVkIHRoZW4gdGhpcyBhbGdvcml0aG0gd2lsbCBuYXZpZ2F0ZSB1c2luZyBzdWNjZXNzb3JzLlxuICpcbiAqIE9yZGVyIG11c3QgYmUgb25lIG9mIFwicHJlXCIgb3IgXCJwb3N0XCIuXG4gKi9cbmZ1bmN0aW9uIGRmcyhnLCB2cywgb3JkZXIpIHtcbiAgaWYgKCFfLmlzQXJyYXkodnMpKSB7XG4gICAgdnMgPSBbdnNdO1xuICB9XG5cbiAgdmFyIG5hdmlnYXRpb24gPSAoZy5pc0RpcmVjdGVkKCkgPyBnLnN1Y2Nlc3NvcnMgOiBnLm5laWdoYm9ycykuYmluZChnKTtcblxuICB2YXIgYWNjID0gW107XG4gIHZhciB2aXNpdGVkID0ge307XG4gIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoIWcuaGFzTm9kZSh2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICcgKyB2KTtcbiAgICB9XG5cbiAgICBkb0RmcyhnLCB2LCBvcmRlciA9PT0gJ3Bvc3QnLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpO1xuICB9KTtcbiAgcmV0dXJuIGFjYztcbn1cblxuZnVuY3Rpb24gZG9EZnMoZywgdiwgcG9zdG9yZGVyLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpIHtcbiAgaWYgKCFfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgaWYgKCFwb3N0b3JkZXIpIHtcbiAgICAgIGFjYy5wdXNoKHYpO1xuICAgIH1cbiAgICBfLmVhY2gobmF2aWdhdGlvbih2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICAgIGRvRGZzKGcsIHcsIHBvc3RvcmRlciwgdmlzaXRlZCwgbmF2aWdhdGlvbiwgYWNjKTtcbiAgICB9KTtcbiAgICBpZiAocG9zdG9yZGVyKSB7XG4gICAgICBhY2MucHVzaCh2KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js": /*!**************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dijkstraAll\": () => (/* binding */ dijkstraAll)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/transform.js\");\n/* harmony import */ var _dijkstra_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dijkstra.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js\");\n\n\n\n\n\nfunction dijkstraAll(g, weightFunc, edgeFunc) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n g.nodes(),\n function (acc, v) {\n acc[v] = (0,_dijkstra_js__WEBPACK_IMPORTED_MODULE_0__.dijkstra)(g, v, weightFunc, edgeFunc);\n },\n {}\n );\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZGlqa3N0cmEtYWxsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjtBQUNVOztBQUVsQjs7QUFFdkI7QUFDQSxTQUFTLGlEQUFXO0FBQ3BCO0FBQ0E7QUFDQSxlQUFlLHNEQUFRO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZGlqa3N0cmEtYWxsLmpzPzliMzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGlqa3N0cmEgfSBmcm9tICcuL2RpamtzdHJhLmpzJztcblxuZXhwb3J0IHsgZGlqa3N0cmFBbGwgfTtcblxuZnVuY3Rpb24gZGlqa3N0cmFBbGwoZywgd2VpZ2h0RnVuYywgZWRnZUZ1bmMpIHtcbiAgcmV0dXJuIF8udHJhbnNmb3JtKFxuICAgIGcubm9kZXMoKSxcbiAgICBmdW5jdGlvbiAoYWNjLCB2KSB7XG4gICAgICBhY2Nbdl0gPSBkaWprc3RyYShnLCB2LCB3ZWlnaHRGdW5jLCBlZGdlRnVuYyk7XG4gICAgfSxcbiAgICB7fVxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js": /*!**********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dijkstra\": () => (/* binding */ dijkstra)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/constant.js\");\n/* harmony import */ var _data_priority_queue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../data/priority-queue.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js\");\n\n\n\n\n\nvar DEFAULT_WEIGHT_FUNC = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n return runDijkstra(\n g,\n String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n }\n );\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n var results = {};\n var pq = new _data_priority_queue_js__WEBPACK_IMPORTED_MODULE_0__.PriorityQueue();\n var v, vEntry;\n\n var updateNeighbors = function (edge) {\n var w = edge.v !== v ? edge.v : edge.w;\n var wEntry = results[w];\n var weight = weightFn(edge);\n var distance = vEntry.distance + weight;\n\n if (weight < 0) {\n throw new Error(\n 'dijkstra does not allow negative edge weights. ' +\n 'Bad edge: ' +\n edge +\n ' Weight: ' +\n weight\n );\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance;\n wEntry.predecessor = v;\n pq.decrease(w, distance);\n }\n };\n\n g.nodes().forEach(function (v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n results[v] = { distance: distance };\n pq.add(v, distance);\n });\n\n while (pq.size() > 0) {\n v = pq.removeMin();\n vEntry = results[v];\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break;\n }\n\n edgeFn(v).forEach(updateNeighbors);\n }\n\n return results;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZGlqa3N0cmEuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStCO0FBQzJCOztBQUV0Qzs7QUFFcEIsMEJBQTBCLGlEQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLGtFQUFhO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2RpamtzdHJhLmpzPzRiNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgUHJpb3JpdHlRdWV1ZSB9IGZyb20gJy4uL2RhdGEvcHJpb3JpdHktcXVldWUuanMnO1xuXG5leHBvcnQgeyBkaWprc3RyYSB9O1xuXG52YXIgREVGQVVMVF9XRUlHSFRfRlVOQyA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICByZXR1cm4gcnVuRGlqa3N0cmEoXG4gICAgZyxcbiAgICBTdHJpbmcoc291cmNlKSxcbiAgICB3ZWlnaHRGbiB8fCBERUZBVUxUX1dFSUdIVF9GVU5DLFxuICAgIGVkZ2VGbiB8fFxuICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcub3V0RWRnZXModik7XG4gICAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICB2YXIgcmVzdWx0cyA9IHt9O1xuICB2YXIgcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZSgpO1xuICB2YXIgdiwgdkVudHJ5O1xuXG4gIHZhciB1cGRhdGVOZWlnaGJvcnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciB3ID0gZWRnZS52ICE9PSB2ID8gZWRnZS52IDogZWRnZS53O1xuICAgIHZhciB3RW50cnkgPSByZXN1bHRzW3ddO1xuICAgIHZhciB3ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICB2YXIgZGlzdGFuY2UgPSB2RW50cnkuZGlzdGFuY2UgKyB3ZWlnaHQ7XG5cbiAgICBpZiAod2VpZ2h0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiAnICtcbiAgICAgICAgICAnQmFkIGVkZ2U6ICcgK1xuICAgICAgICAgIGVkZ2UgK1xuICAgICAgICAgICcgV2VpZ2h0OiAnICtcbiAgICAgICAgICB3ZWlnaHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3RhbmNlIDwgd0VudHJ5LmRpc3RhbmNlKSB7XG4gICAgICB3RW50cnkuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgIHdFbnRyeS5wcmVkZWNlc3NvciA9IHY7XG4gICAgICBwcS5kZWNyZWFzZSh3LCBkaXN0YW5jZSk7XG4gICAgfVxuICB9O1xuXG4gIGcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGRpc3RhbmNlID0gdiA9PT0gc291cmNlID8gMCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICByZXN1bHRzW3ZdID0geyBkaXN0YW5jZTogZGlzdGFuY2UgfTtcbiAgICBwcS5hZGQodiwgZGlzdGFuY2UpO1xuICB9KTtcblxuICB3aGlsZSAocHEuc2l6ZSgpID4gMCkge1xuICAgIHYgPSBwcS5yZW1vdmVNaW4oKTtcbiAgICB2RW50cnkgPSByZXN1bHRzW3ZdO1xuICAgIGlmICh2RW50cnkuZGlzdGFuY2UgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZWRnZUZuKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js": /*!*************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"findCycles\": () => (/* binding */ findCycles)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var _tarjan_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tarjan.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js\");\n\n\n\n\n\nfunction findCycles(g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"]((0,_tarjan_js__WEBPACK_IMPORTED_MODULE_0__.tarjan)(g), function (cmpt) {\n return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZmluZC1jeWNsZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStCO0FBQ007O0FBRWY7O0FBRXRCO0FBQ0EsU0FBUyxpREFBUSxDQUFDLGtEQUFNO0FBQ3hCO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2ZpbmQtY3ljbGVzLmpzPzQxNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgdGFyamFuIH0gZnJvbSAnLi90YXJqYW4uanMnO1xuXG5leHBvcnQgeyBmaW5kQ3ljbGVzIH07XG5cbmZ1bmN0aW9uIGZpbmRDeWNsZXMoZykge1xuICByZXR1cm4gXy5maWx0ZXIodGFyamFuKGcpLCBmdW5jdGlvbiAoY21wdCkge1xuICAgIHJldHVybiBjbXB0Lmxlbmd0aCA+IDEgfHwgKGNtcHQubGVuZ3RoID09PSAxICYmIGcuaGFzRWRnZShjbXB0WzBdLCBjbXB0WzBdKSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js": /*!****************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"floydWarshall\": () => (/* binding */ floydWarshall)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/constant.js\");\n\n\n\n\nvar DEFAULT_WEIGHT_FUNC = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n return runFloydWarshall(\n g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n }\n );\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n var results = {};\n var nodes = g.nodes();\n\n nodes.forEach(function (v) {\n results[v] = {};\n results[v][v] = { distance: 0 };\n nodes.forEach(function (w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY };\n }\n });\n edgeFn(v).forEach(function (edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var d = weightFn(edge);\n results[v][w] = { distance: d, predecessor: v };\n });\n });\n\n nodes.forEach(function (k) {\n var rowK = results[k];\n nodes.forEach(function (i) {\n var rowI = results[i];\n nodes.forEach(function (j) {\n var ik = rowI[k];\n var kj = rowK[j];\n var ij = rowI[j];\n var altDistance = ik.distance + kj.distance;\n if (altDistance < ij.distance) {\n ij.distance = altDistance;\n ij.predecessor = kj.predecessor;\n }\n });\n });\n });\n\n return results;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZmxveWQtd2Fyc2hhbGwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRU47O0FBRXpCLDBCQUEwQixpREFBVTs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9mbG95ZC13YXJzaGFsbC5qcz9lNjNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgZmxveWRXYXJzaGFsbCB9O1xuXG52YXIgREVGQVVMVF9XRUlHSFRfRlVOQyA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGZsb3lkV2Fyc2hhbGwoZywgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICByZXR1cm4gcnVuRmxveWRXYXJzaGFsbChcbiAgICBnLFxuICAgIHdlaWdodEZuIHx8IERFRkFVTFRfV0VJR0hUX0ZVTkMsXG4gICAgZWRnZUZuIHx8XG4gICAgICBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZy5vdXRFZGdlcyh2KTtcbiAgICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gcnVuRmxveWRXYXJzaGFsbChnLCB3ZWlnaHRGbiwgZWRnZUZuKSB7XG4gIHZhciByZXN1bHRzID0ge307XG4gIHZhciBub2RlcyA9IGcubm9kZXMoKTtcblxuICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgcmVzdWx0c1t2XSA9IHt9O1xuICAgIHJlc3VsdHNbdl1bdl0gPSB7IGRpc3RhbmNlOiAwIH07XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAodykge1xuICAgICAgaWYgKHYgIT09IHcpIHtcbiAgICAgICAgcmVzdWx0c1t2XVt3XSA9IHsgZGlzdGFuY2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVkZ2VGbih2KS5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICB2YXIgdyA9IGVkZ2UudiA9PT0gdiA/IGVkZ2UudyA6IGVkZ2UudjtcbiAgICAgIHZhciBkID0gd2VpZ2h0Rm4oZWRnZSk7XG4gICAgICByZXN1bHRzW3ZdW3ddID0geyBkaXN0YW5jZTogZCwgcHJlZGVjZXNzb3I6IHYgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHZhciByb3dLID0gcmVzdWx0c1trXTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7XG4gICAgICB2YXIgcm93SSA9IHJlc3VsdHNbaV07XG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChqKSB7XG4gICAgICAgIHZhciBpayA9IHJvd0lba107XG4gICAgICAgIHZhciBraiA9IHJvd0tbal07XG4gICAgICAgIHZhciBpaiA9IHJvd0lbal07XG4gICAgICAgIHZhciBhbHREaXN0YW5jZSA9IGlrLmRpc3RhbmNlICsga2ouZGlzdGFuY2U7XG4gICAgICAgIGlmIChhbHREaXN0YW5jZSA8IGlqLmRpc3RhbmNlKSB7XG4gICAgICAgICAgaWouZGlzdGFuY2UgPSBhbHREaXN0YW5jZTtcbiAgICAgICAgICBpai5wcmVkZWNlc3NvciA9IGtqLnByZWRlY2Vzc29yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/index.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"components\": () => (/* reexport safe */ _components_js__WEBPACK_IMPORTED_MODULE_0__.components),\n/* harmony export */ \"dijkstra\": () => (/* reexport safe */ _dijkstra_js__WEBPACK_IMPORTED_MODULE_1__.dijkstra),\n/* harmony export */ \"dijkstraAll\": () => (/* reexport safe */ _dijkstra_all_js__WEBPACK_IMPORTED_MODULE_2__.dijkstraAll),\n/* harmony export */ \"findCycles\": () => (/* reexport safe */ _find_cycles_js__WEBPACK_IMPORTED_MODULE_3__.findCycles),\n/* harmony export */ \"floydWarshall\": () => (/* reexport safe */ _floyd_warshall_js__WEBPACK_IMPORTED_MODULE_4__.floydWarshall),\n/* harmony export */ \"isAcyclic\": () => (/* reexport safe */ _is_acyclic_js__WEBPACK_IMPORTED_MODULE_5__.isAcyclic),\n/* harmony export */ \"postorder\": () => (/* reexport safe */ _postorder_js__WEBPACK_IMPORTED_MODULE_6__.postorder),\n/* harmony export */ \"preorder\": () => (/* reexport safe */ _preorder_js__WEBPACK_IMPORTED_MODULE_7__.preorder),\n/* harmony export */ \"prim\": () => (/* reexport safe */ _prim_js__WEBPACK_IMPORTED_MODULE_8__.prim),\n/* harmony export */ \"tarjan\": () => (/* reexport safe */ _tarjan_js__WEBPACK_IMPORTED_MODULE_9__.tarjan),\n/* harmony export */ \"topsort\": () => (/* reexport safe */ _topsort_js__WEBPACK_IMPORTED_MODULE_10__.topsort)\n/* harmony export */ });\n/* harmony import */ var _components_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/components.js\");\n/* harmony import */ var _dijkstra_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dijkstra.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js\");\n/* harmony import */ var _dijkstra_all_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dijkstra-all.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js\");\n/* harmony import */ var _find_cycles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./find-cycles.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js\");\n/* harmony import */ var _floyd_warshall_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./floyd-warshall.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js\");\n/* harmony import */ var _is_acyclic_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./is-acyclic.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js\");\n/* harmony import */ var _postorder_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./postorder.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js\");\n/* harmony import */ var _preorder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./preorder.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js\");\n/* harmony import */ var _prim_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./prim.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/prim.js\");\n/* harmony import */ var _tarjan_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tarjan.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js\");\n/* harmony import */ var _topsort_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./topsort.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE2QztBQUNKO0FBQ087QUFDRjtBQUNNO0FBQ1I7QUFDRDtBQUNGO0FBQ1I7QUFDSTtBQUNFOztBQWNyQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9pbmRleC5qcz8xMzViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBvbmVudHMgfSBmcm9tICcuL2NvbXBvbmVudHMuanMnO1xuaW1wb3J0IHsgZGlqa3N0cmEgfSBmcm9tICcuL2RpamtzdHJhLmpzJztcbmltcG9ydCB7IGRpamtzdHJhQWxsIH0gZnJvbSAnLi9kaWprc3RyYS1hbGwuanMnO1xuaW1wb3J0IHsgZmluZEN5Y2xlcyB9IGZyb20gJy4vZmluZC1jeWNsZXMuanMnO1xuaW1wb3J0IHsgZmxveWRXYXJzaGFsbCB9IGZyb20gJy4vZmxveWQtd2Fyc2hhbGwuanMnO1xuaW1wb3J0IHsgaXNBY3ljbGljIH0gZnJvbSAnLi9pcy1hY3ljbGljLmpzJztcbmltcG9ydCB7IHBvc3RvcmRlciB9IGZyb20gJy4vcG9zdG9yZGVyLmpzJztcbmltcG9ydCB7IHByZW9yZGVyIH0gZnJvbSAnLi9wcmVvcmRlci5qcyc7XG5pbXBvcnQgeyBwcmltIH0gZnJvbSAnLi9wcmltLmpzJztcbmltcG9ydCB7IHRhcmphbiB9IGZyb20gJy4vdGFyamFuLmpzJztcbmltcG9ydCB7IHRvcHNvcnQgfSBmcm9tICcuL3RvcHNvcnQuanMnO1xuXG5leHBvcnQge1xuICBjb21wb25lbnRzLFxuICBkaWprc3RyYSxcbiAgZGlqa3N0cmFBbGwsXG4gIGZpbmRDeWNsZXMsXG4gIGZsb3lkV2Fyc2hhbGwsXG4gIGlzQWN5Y2xpYyxcbiAgcG9zdG9yZGVyLFxuICBwcmVvcmRlcixcbiAgcHJpbSxcbiAgdGFyamFuLFxuICB0b3Bzb3J0LFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js": /*!************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isAcyclic\": () => (/* binding */ isAcyclic)\n/* harmony export */ });\n/* harmony import */ var _topsort_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./topsort.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js\");\n\n\n\n\nfunction isAcyclic(g) {\n try {\n (0,_topsort_js__WEBPACK_IMPORTED_MODULE_0__.topsort)(g);\n } catch (e) {\n if (e instanceof _topsort_js__WEBPACK_IMPORTED_MODULE_0__.CycleException) {\n return false;\n }\n throw e;\n }\n return true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvaXMtYWN5Y2xpYy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1RDs7QUFFbEM7O0FBRXJCO0FBQ0E7QUFDQSxJQUFJLG9EQUFPO0FBQ1gsSUFBSTtBQUNKLHFCQUFxQix1REFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvaXMtYWN5Y2xpYy5qcz9lZTY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvcHNvcnQsIEN5Y2xlRXhjZXB0aW9uIH0gZnJvbSAnLi90b3Bzb3J0LmpzJztcblxuZXhwb3J0IHsgaXNBY3ljbGljIH07XG5cbmZ1bmN0aW9uIGlzQWN5Y2xpYyhnKSB7XG4gIHRyeSB7XG4gICAgdG9wc29ydChnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ3ljbGVFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js": /*!***********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"postorder\": () => (/* binding */ postorder)\n/* harmony export */ });\n/* harmony import */ var _dfs_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dfs.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js\");\n\n\n\n\nfunction postorder(g, vs) {\n return (0,_dfs_js__WEBPACK_IMPORTED_MODULE_0__.dfs)(g, vs, 'post');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcG9zdG9yZGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStCOztBQUVWOztBQUVyQjtBQUNBLFNBQVMsNENBQUc7QUFDWiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9wb3N0b3JkZXIuanM/OTFkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZnMgfSBmcm9tICcuL2Rmcy5qcyc7XG5cbmV4cG9ydCB7IHBvc3RvcmRlciB9O1xuXG5mdW5jdGlvbiBwb3N0b3JkZXIoZywgdnMpIHtcbiAgcmV0dXJuIGRmcyhnLCB2cywgJ3Bvc3QnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js": /*!**********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"preorder\": () => (/* binding */ preorder)\n/* harmony export */ });\n/* harmony import */ var _dfs_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dfs.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js\");\n\n\n\n\nfunction preorder(g, vs) {\n return (0,_dfs_js__WEBPACK_IMPORTED_MODULE_0__.dfs)(g, vs, 'pre');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcHJlb3JkZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0I7O0FBRVg7O0FBRXBCO0FBQ0EsU0FBUyw0Q0FBRztBQUNaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL3ByZW9yZGVyLmpzP2M4M2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGZzIH0gZnJvbSAnLi9kZnMuanMnO1xuXG5leHBvcnQgeyBwcmVvcmRlciB9O1xuXG5mdW5jdGlvbiBwcmVvcmRlcihnLCB2cykge1xuICByZXR1cm4gZGZzKGcsIHZzLCAncHJlJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/prim.js": /*!******************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/prim.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"prim\": () => (/* binding */ prim)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var _data_priority_queue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../data/priority-queue.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js\");\n/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../graph.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/graph.js\");\n\n\n\n\n\n\nfunction prim(g, weightFunc) {\n var result = new _graph_js__WEBPACK_IMPORTED_MODULE_1__.Graph();\n var parents = {};\n var pq = new _data_priority_queue_js__WEBPACK_IMPORTED_MODULE_0__.PriorityQueue();\n var v;\n\n function updateNeighbors(edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var pri = pq.priority(w);\n if (pri !== undefined) {\n var edgeWeight = weightFunc(edge);\n if (edgeWeight < pri) {\n parents[w] = v;\n pq.decrease(w, edgeWeight);\n }\n }\n }\n\n if (g.nodeCount() === 0) {\n return result;\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.nodes(), function (v) {\n pq.add(v, Number.POSITIVE_INFINITY);\n result.setNode(v);\n });\n\n // Start from an arbitrary node\n pq.decrease(g.nodes()[0], 0);\n\n var init = false;\n while (pq.size() > 0) {\n v = pq.removeMin();\n if (lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](parents, v)) {\n result.setEdge(v, parents[v]);\n } else if (init) {\n throw new Error('Input graph is not connected: ' + g);\n } else {\n init = true;\n }\n\n g.nodeEdges(v).forEach(updateNeighbors);\n }\n\n return result;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcHJpbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErQjtBQUMyQjtBQUN0Qjs7QUFFcEI7O0FBRWhCO0FBQ0EsbUJBQW1CLDRDQUFLO0FBQ3hCO0FBQ0EsZUFBZSxrRUFBYTtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlEQUFNO0FBQ1I7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcHJpbS5qcz8yNjlhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFByaW9yaXR5UXVldWUgfSBmcm9tICcuLi9kYXRhL3ByaW9yaXR5LXF1ZXVlLmpzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vZ3JhcGguanMnO1xuXG5leHBvcnQgeyBwcmltIH07XG5cbmZ1bmN0aW9uIHByaW0oZywgd2VpZ2h0RnVuYykge1xuICB2YXIgcmVzdWx0ID0gbmV3IEdyYXBoKCk7XG4gIHZhciBwYXJlbnRzID0ge307XG4gIHZhciBwcSA9IG5ldyBQcmlvcml0eVF1ZXVlKCk7XG4gIHZhciB2O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZU5laWdoYm9ycyhlZGdlKSB7XG4gICAgdmFyIHcgPSBlZGdlLnYgPT09IHYgPyBlZGdlLncgOiBlZGdlLnY7XG4gICAgdmFyIHByaSA9IHBxLnByaW9yaXR5KHcpO1xuICAgIGlmIChwcmkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGVkZ2VXZWlnaHQgPSB3ZWlnaHRGdW5jKGVkZ2UpO1xuICAgICAgaWYgKGVkZ2VXZWlnaHQgPCBwcmkpIHtcbiAgICAgICAgcGFyZW50c1t3XSA9IHY7XG4gICAgICAgIHBxLmRlY3JlYXNlKHcsIGVkZ2VXZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChnLm5vZGVDb3VudCgpID09PSAwKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF8uZWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcHEuYWRkKHYsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgcmVzdWx0LnNldE5vZGUodik7XG4gIH0pO1xuXG4gIC8vIFN0YXJ0IGZyb20gYW4gYXJiaXRyYXJ5IG5vZGVcbiAgcHEuZGVjcmVhc2UoZy5ub2RlcygpWzBdLCAwKTtcblxuICB2YXIgaW5pdCA9IGZhbHNlO1xuICB3aGlsZSAocHEuc2l6ZSgpID4gMCkge1xuICAgIHYgPSBwcS5yZW1vdmVNaW4oKTtcbiAgICBpZiAoXy5oYXMocGFyZW50cywgdikpIHtcbiAgICAgIHJlc3VsdC5zZXRFZGdlKHYsIHBhcmVudHNbdl0pO1xuICAgIH0gZWxzZSBpZiAoaW5pdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBncmFwaCBpcyBub3QgY29ubmVjdGVkOiAnICsgZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXQgPSB0cnVlO1xuICAgIH1cblxuICAgIGcubm9kZUVkZ2VzKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/prim.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js": /*!********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"tarjan\": () => (/* binding */ tarjan)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n\n\n\n\nfunction tarjan(g) {\n var index = 0;\n var stack = [];\n var visited = {}; // node id -> { onStack, lowlink, index }\n var results = [];\n\n function dfs(v) {\n var entry = (visited[v] = {\n onStack: true,\n lowlink: index,\n index: index++,\n });\n stack.push(v);\n\n g.successors(v).forEach(function (w) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](visited, w)) {\n dfs(w);\n entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);\n } else if (visited[w].onStack) {\n entry.lowlink = Math.min(entry.lowlink, visited[w].index);\n }\n });\n\n if (entry.lowlink === entry.index) {\n var cmpt = [];\n var w;\n do {\n w = stack.pop();\n visited[w].onStack = false;\n cmpt.push(w);\n } while (v !== w);\n results.push(cmpt);\n }\n }\n\n g.nodes().forEach(function (v) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](visited, v)) {\n dfs(v);\n }\n });\n\n return results;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvdGFyamFuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStCOztBQUViOztBQUVsQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxXQUFXLGlEQUFLO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvdGFyamFuLmpzPzY4MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyB0YXJqYW4gfTtcblxuZnVuY3Rpb24gdGFyamFuKGcpIHtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciB2aXNpdGVkID0ge307IC8vIG5vZGUgaWQgLT4geyBvblN0YWNrLCBsb3dsaW5rLCBpbmRleCB9XG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgZW50cnkgPSAodmlzaXRlZFt2XSA9IHtcbiAgICAgIG9uU3RhY2s6IHRydWUsXG4gICAgICBsb3dsaW5rOiBpbmRleCxcbiAgICAgIGluZGV4OiBpbmRleCsrLFxuICAgIH0pO1xuICAgIHN0YWNrLnB1c2godik7XG5cbiAgICBnLnN1Y2Nlc3NvcnModikuZm9yRWFjaChmdW5jdGlvbiAodykge1xuICAgICAgaWYgKCFfLmhhcyh2aXNpdGVkLCB3KSkge1xuICAgICAgICBkZnModyk7XG4gICAgICAgIGVudHJ5Lmxvd2xpbmsgPSBNYXRoLm1pbihlbnRyeS5sb3dsaW5rLCB2aXNpdGVkW3ddLmxvd2xpbmspO1xuICAgICAgfSBlbHNlIGlmICh2aXNpdGVkW3ddLm9uU3RhY2spIHtcbiAgICAgICAgZW50cnkubG93bGluayA9IE1hdGgubWluKGVudHJ5Lmxvd2xpbmssIHZpc2l0ZWRbd10uaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGVudHJ5Lmxvd2xpbmsgPT09IGVudHJ5LmluZGV4KSB7XG4gICAgICB2YXIgY21wdCA9IFtdO1xuICAgICAgdmFyIHc7XG4gICAgICBkbyB7XG4gICAgICAgIHcgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgdmlzaXRlZFt3XS5vblN0YWNrID0gZmFsc2U7XG4gICAgICAgIGNtcHQucHVzaCh3KTtcbiAgICAgIH0gd2hpbGUgKHYgIT09IHcpO1xuICAgICAgcmVzdWx0cy5wdXNoKGNtcHQpO1xuICAgIH1cbiAgfVxuXG4gIGcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKCFfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgICAgZGZzKHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js": /*!*********************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CycleException\": () => (/* binding */ CycleException),\n/* harmony export */ \"topsort\": () => (/* binding */ topsort)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/size.js\");\n\n\n\n\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](stack, node)) {\n throw new CycleException();\n }\n\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](visited, node)) {\n stack[node] = true;\n visited[node] = true;\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.sinks(), visit);\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvdG9wc29ydC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErQjs7QUFFSTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTs7QUFFQSxTQUFTLGlEQUFLO0FBQ2Q7QUFDQTtBQUNBLE1BQU0saURBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlEQUFNOztBQUVSLE1BQU0saURBQU07QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvdG9wc29ydC5qcz82MGU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgdG9wc29ydCwgQ3ljbGVFeGNlcHRpb24gfTtcblxudG9wc29ydC5DeWNsZUV4Y2VwdGlvbiA9IEN5Y2xlRXhjZXB0aW9uO1xuXG5mdW5jdGlvbiB0b3Bzb3J0KGcpIHtcbiAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgdmFyIHN0YWNrID0ge307XG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChfLmhhcyhzdGFjaywgbm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBDeWNsZUV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghXy5oYXModmlzaXRlZCwgbm9kZSkpIHtcbiAgICAgIHN0YWNrW25vZGVdID0gdHJ1ZTtcbiAgICAgIHZpc2l0ZWRbbm9kZV0gPSB0cnVlO1xuICAgICAgXy5lYWNoKGcucHJlZGVjZXNzb3JzKG5vZGUpLCB2aXNpdCk7XG4gICAgICBkZWxldGUgc3RhY2tbbm9kZV07XG4gICAgICByZXN1bHRzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgXy5lYWNoKGcuc2lua3MoKSwgdmlzaXQpO1xuXG4gIGlmIChfLnNpemUodmlzaXRlZCkgIT09IGcubm9kZUNvdW50KCkpIHtcbiAgICB0aHJvdyBuZXcgQ3ljbGVFeGNlcHRpb24oKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBDeWNsZUV4Y2VwdGlvbigpIHt9XG5DeWNsZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTsgLy8gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBFcnJvciB0byBwYXNzIHRlc3RpbmdcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PriorityQueue\": () => (/* binding */ PriorityQueue)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n\n\n\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nclass PriorityQueue {\n constructor() {\n this._arr = [];\n this._keyIndices = {};\n }\n /**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\n size() {\n return this._arr.length;\n }\n /**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\n keys() {\n return this._arr.map(function (x) {\n return x.key;\n });\n }\n /**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\n has(key) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._keyIndices, key);\n }\n /**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\n priority(key) {\n var index = this._keyIndices[key];\n if (index !== undefined) {\n return this._arr[index].priority;\n }\n }\n /**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\n min() {\n if (this.size() === 0) {\n throw new Error('Queue underflow');\n }\n return this._arr[0].key;\n }\n /**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\n add(key, priority) {\n var keyIndices = this._keyIndices;\n key = String(key);\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](keyIndices, key)) {\n var arr = this._arr;\n var index = arr.length;\n keyIndices[key] = index;\n arr.push({ key: key, priority: priority });\n this._decrease(index);\n return true;\n }\n return false;\n }\n /**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\n removeMin() {\n this._swap(0, this._arr.length - 1);\n var min = this._arr.pop();\n delete this._keyIndices[min.key];\n this._heapify(0);\n return min.key;\n }\n /**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\n decrease(key, priority) {\n var index = this._keyIndices[key];\n if (priority > this._arr[index].priority) {\n throw new Error(\n 'New priority is greater than current priority. ' +\n 'Key: ' +\n key +\n ' Old: ' +\n this._arr[index].priority +\n ' New: ' +\n priority\n );\n }\n this._arr[index].priority = priority;\n this._decrease(index);\n }\n _heapify(i) {\n var arr = this._arr;\n var l = 2 * i;\n var r = l + 1;\n var largest = i;\n if (l < arr.length) {\n largest = arr[l].priority < arr[largest].priority ? l : largest;\n if (r < arr.length) {\n largest = arr[r].priority < arr[largest].priority ? r : largest;\n }\n if (largest !== i) {\n this._swap(i, largest);\n this._heapify(largest);\n }\n }\n }\n _decrease(index) {\n var arr = this._arr;\n var priority = arr[index].priority;\n var parent;\n while (index !== 0) {\n parent = index >> 1;\n if (arr[parent].priority < priority) {\n break;\n }\n this._swap(index, parent);\n index = parent;\n }\n }\n _swap(i, j) {\n var arr = this._arr;\n var keyIndices = this._keyIndices;\n var origArrI = arr[i];\n var origArrJ = arr[j];\n arr[i] = origArrJ;\n arr[j] = origArrI;\n keyIndices[origArrJ.key] = i;\n keyIndices[origArrI.key] = j;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9kYXRhL3ByaW9yaXR5LXF1ZXVlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStCOztBQUVOOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaURBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEJBQThCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9kYXRhL3ByaW9yaXR5LXF1ZXVlLmpzPzllNzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBQcmlvcml0eVF1ZXVlIH07XG5cbi8qKlxuICogQSBtaW4tcHJpb3JpdHkgcXVldWUgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgYWxnb3JpdGhtIGlzIGRlcml2ZWQgZnJvbSBDb3JtZW4sXG4gKiBldCBhbC4sIFwiSW50cm9kdWN0aW9uIHRvIEFsZ29yaXRobXNcIi4gVGhlIGJhc2ljIGlkZWEgb2YgYSBtaW4tcHJpb3JpdHlcbiAqIHF1ZXVlIGlzIHRoYXQgeW91IGNhbiBlZmZpY2llbnRseSAoaW4gTygxKSB0aW1lKSBnZXQgdGhlIHNtYWxsZXN0IGtleSBpblxuICogdGhlIHF1ZXVlLiBBZGRpbmcgYW5kIHJlbW92aW5nIGVsZW1lbnRzIHRha2VzIE8obG9nIG4pIHRpbWUuIEEga2V5IGNhblxuICogaGF2ZSBpdHMgcHJpb3JpdHkgZGVjcmVhc2VkIGluIE8obG9nIG4pIHRpbWUuXG4gKi9cbmNsYXNzIFByaW9yaXR5UXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9hcnIgPSBbXTtcbiAgICB0aGlzLl9rZXlJbmRpY2VzID0ge307XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuIFRha2VzIGBPKDEpYCB0aW1lLlxuICAgKi9cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUga2V5cyB0aGF0IGFyZSBpbiB0aGUgcXVldWUuIFRha2VzIGBPKG4pYCB0aW1lLlxuICAgKi9cbiAga2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHgua2V5O1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiAqKmtleSoqIGlzIGluIHRoZSBxdWV1ZSBhbmQgYGZhbHNlYCBpZiBub3QuXG4gICAqL1xuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIF8uaGFzKHRoaXMuX2tleUluZGljZXMsIGtleSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByaW9yaXR5IGZvciAqKmtleSoqLiBJZiAqKmtleSoqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBxdWV1ZVxuICAgKiB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgdW5kZWZpbmVkYC4gVGFrZXMgYE8oMSlgIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICovXG4gIHByaW9yaXR5KGtleSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMuX2tleUluZGljZXNba2V5XTtcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FycltpbmRleF0ucHJpb3JpdHk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBrZXkgZm9yIHRoZSBtaW5pbXVtIGVsZW1lbnQgaW4gdGhpcyBxdWV1ZS4gSWYgdGhlIHF1ZXVlIGlzXG4gICAqIGVtcHR5IHRoaXMgZnVuY3Rpb24gdGhyb3dzIGFuIEVycm9yLiBUYWtlcyBgTygxKWAgdGltZS5cbiAgICovXG4gIG1pbigpIHtcbiAgICBpZiAodGhpcy5zaXplKCkgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVldWUgdW5kZXJmbG93Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcnJbMF0ua2V5O1xuICB9XG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgbmV3IGtleSBpbnRvIHRoZSBwcmlvcml0eSBxdWV1ZS4gSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cyBpblxuICAgKiB0aGUgcXVldWUgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWA7IG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBgdHJ1ZWAuXG4gICAqIFRha2VzIGBPKG4pYCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5IHRoZSBrZXkgdG8gYWRkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwcmlvcml0eSB0aGUgaW5pdGlhbCBwcmlvcml0eSBmb3IgdGhlIGtleVxuICAgKi9cbiAgYWRkKGtleSwgcHJpb3JpdHkpIHtcbiAgICB2YXIga2V5SW5kaWNlcyA9IHRoaXMuX2tleUluZGljZXM7XG4gICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgaWYgKCFfLmhhcyhrZXlJbmRpY2VzLCBrZXkpKSB7XG4gICAgICB2YXIgYXJyID0gdGhpcy5fYXJyO1xuICAgICAgdmFyIGluZGV4ID0gYXJyLmxlbmd0aDtcbiAgICAgIGtleUluZGljZXNba2V5XSA9IGluZGV4O1xuICAgICAgYXJyLnB1c2goeyBrZXk6IGtleSwgcHJpb3JpdHk6IHByaW9yaXR5IH0pO1xuICAgICAgdGhpcy5fZGVjcmVhc2UoaW5kZXgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3Qga2V5IGluIHRoZSBxdWV1ZS4gVGFrZXMgYE8obG9nIG4pYCB0aW1lLlxuICAgKi9cbiAgcmVtb3ZlTWluKCkge1xuICAgIHRoaXMuX3N3YXAoMCwgdGhpcy5fYXJyLmxlbmd0aCAtIDEpO1xuICAgIHZhciBtaW4gPSB0aGlzLl9hcnIucG9wKCk7XG4gICAgZGVsZXRlIHRoaXMuX2tleUluZGljZXNbbWluLmtleV07XG4gICAgdGhpcy5faGVhcGlmeSgwKTtcbiAgICByZXR1cm4gbWluLmtleTtcbiAgfVxuICAvKipcbiAgICogRGVjcmVhc2VzIHRoZSBwcmlvcml0eSBmb3IgKiprZXkqKiB0byAqKnByaW9yaXR5KiouIElmIHRoZSBuZXcgcHJpb3JpdHkgaXNcbiAgICogZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBwcmlvcml0eSwgdGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIEVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5IHRoZSBrZXkgZm9yIHdoaWNoIHRvIHJhaXNlIHByaW9yaXR5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwcmlvcml0eSB0aGUgbmV3IHByaW9yaXR5IGZvciB0aGUga2V5XG4gICAqL1xuICBkZWNyZWFzZShrZXksIHByaW9yaXR5KSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5fa2V5SW5kaWNlc1trZXldO1xuICAgIGlmIChwcmlvcml0eSA+IHRoaXMuX2FycltpbmRleF0ucHJpb3JpdHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ05ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gJyArXG4gICAgICAgICAgJ0tleTogJyArXG4gICAgICAgICAga2V5ICtcbiAgICAgICAgICAnIE9sZDogJyArXG4gICAgICAgICAgdGhpcy5fYXJyW2luZGV4XS5wcmlvcml0eSArXG4gICAgICAgICAgJyBOZXc6ICcgK1xuICAgICAgICAgIHByaW9yaXR5XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gICAgdGhpcy5fZGVjcmVhc2UoaW5kZXgpO1xuICB9XG4gIF9oZWFwaWZ5KGkpIHtcbiAgICB2YXIgYXJyID0gdGhpcy5fYXJyO1xuICAgIHZhciBsID0gMiAqIGk7XG4gICAgdmFyIHIgPSBsICsgMTtcbiAgICB2YXIgbGFyZ2VzdCA9IGk7XG4gICAgaWYgKGwgPCBhcnIubGVuZ3RoKSB7XG4gICAgICBsYXJnZXN0ID0gYXJyW2xdLnByaW9yaXR5IDwgYXJyW2xhcmdlc3RdLnByaW9yaXR5ID8gbCA6IGxhcmdlc3Q7XG4gICAgICBpZiAociA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgbGFyZ2VzdCA9IGFycltyXS5wcmlvcml0eSA8IGFycltsYXJnZXN0XS5wcmlvcml0eSA/IHIgOiBsYXJnZXN0O1xuICAgICAgfVxuICAgICAgaWYgKGxhcmdlc3QgIT09IGkpIHtcbiAgICAgICAgdGhpcy5fc3dhcChpLCBsYXJnZXN0KTtcbiAgICAgICAgdGhpcy5faGVhcGlmeShsYXJnZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2RlY3JlYXNlKGluZGV4KSB7XG4gICAgdmFyIGFyciA9IHRoaXMuX2FycjtcbiAgICB2YXIgcHJpb3JpdHkgPSBhcnJbaW5kZXhdLnByaW9yaXR5O1xuICAgIHZhciBwYXJlbnQ7XG4gICAgd2hpbGUgKGluZGV4ICE9PSAwKSB7XG4gICAgICBwYXJlbnQgPSBpbmRleCA+PiAxO1xuICAgICAgaWYgKGFycltwYXJlbnRdLnByaW9yaXR5IDwgcHJpb3JpdHkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLl9zd2FwKGluZGV4LCBwYXJlbnQpO1xuICAgICAgaW5kZXggPSBwYXJlbnQ7XG4gICAgfVxuICB9XG4gIF9zd2FwKGksIGopIHtcbiAgICB2YXIgYXJyID0gdGhpcy5fYXJyO1xuICAgIHZhciBrZXlJbmRpY2VzID0gdGhpcy5fa2V5SW5kaWNlcztcbiAgICB2YXIgb3JpZ0FyckkgPSBhcnJbaV07XG4gICAgdmFyIG9yaWdBcnJKID0gYXJyW2pdO1xuICAgIGFycltpXSA9IG9yaWdBcnJKO1xuICAgIGFycltqXSA9IG9yaWdBcnJJO1xuICAgIGtleUluZGljZXNbb3JpZ0Fyckoua2V5XSA9IGk7XG4gICAga2V5SW5kaWNlc1tvcmlnQXJySS5rZXldID0gajtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/graph.js": /*!***************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/graph.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Graph\": () => (/* binding */ Graph)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/has.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/constant.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/keys.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/filter.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isEmpty.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/union.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/values.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/reduce.js\");\n\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nclass Graph {\n constructor(opts = {}) {\n this._isDirected = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](opts, 'directed') ? opts.directed : true;\n this._isMultigraph = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](opts, 'multigraph') ? opts.multigraph : false;\n this._isCompound = lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](opts, 'compound') ? opts.compound : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](newDefault)) {\n newDefault = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this._nodes);\n }\n sources() {\n var self = this;\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.nodes(), function (v) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.nodes(), function (v) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_5__[\"default\"](self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._nodes, v);\n }\n removeNode(v) {\n var self = this;\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._nodes, v)) {\n var removeEdge = function (e) {\n self.removeEdge(self._edgeObjs[e]);\n };\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.children(v), function (child) {\n self.setParent(child);\n });\n delete this._children[v];\n }\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_8__[\"default\"](preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n lodash_es__WEBPACK_IMPORTED_MODULE_6__[\"default\"](copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](newDefault)) {\n newDefault = lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n lodash_es__WEBPACK_IMPORTED_MODULE_10__[\"default\"](vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return lodash_es__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](inV);\n if (!u) {\n return edges;\n }\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = lodash_es__WEBPACK_IMPORTED_MODULE_9__[\"default\"](outV);\n if (!w) {\n return edges;\n }\n return lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (lodash_es__WEBPACK_IMPORTED_MODULE_7__[\"default\"](name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9ncmFwaC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxXQUFXO0FBQy9FO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FLFdBQVc7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLHVCQUF1QjtBQUN2Qix1QkFBdUIsaURBQUs7QUFDNUIseUJBQXlCLGlEQUFLO0FBQzlCLHVCQUF1QixpREFBSzs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixpREFBVTs7QUFFekM7QUFDQSwrQkFBK0IsaURBQVU7O0FBRXpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaURBQVk7QUFDckIsbUJBQW1CLGlEQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlEQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaURBQVE7QUFDbkIsYUFBYSxpREFBUztBQUN0QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpREFBUTtBQUNuQixhQUFhLGlEQUFTO0FBQ3RCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaURBQU07QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlEQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaURBQVE7QUFDckI7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpREFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlEQUFRO0FBQ3JCO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsaURBQWE7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2dyYXBoLmpzP2FlOGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG52YXIgREVGQVVMVF9FREdFX05BTUUgPSAnXFx4MDAnO1xudmFyIEdSQVBIX05PREUgPSAnXFx4MDAnO1xudmFyIEVER0VfS0VZX0RFTElNID0gJ1xceDAxJztcblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cbmV4cG9ydCBjbGFzcyBHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHRoaXMuX2lzRGlyZWN0ZWQgPSBfLmhhcyhvcHRzLCAnZGlyZWN0ZWQnKSA/IG9wdHMuZGlyZWN0ZWQgOiB0cnVlO1xuICAgIHRoaXMuX2lzTXVsdGlncmFwaCA9IF8uaGFzKG9wdHMsICdtdWx0aWdyYXBoJykgPyBvcHRzLm11bHRpZ3JhcGggOiBmYWxzZTtcbiAgICB0aGlzLl9pc0NvbXBvdW5kID0gXy5oYXMob3B0cywgJ2NvbXBvdW5kJykgPyBvcHRzLmNvbXBvdW5kIDogZmFsc2U7XG5cbiAgICAvLyBMYWJlbCBmb3IgdGhlIGdyYXBoIGl0c2VsZlxuICAgIHRoaXMuX2xhYmVsID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gRGVmYXVsdHMgdG8gYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgbm9kZVxuICAgIHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbiA9IF8uY29uc3RhbnQodW5kZWZpbmVkKTtcblxuICAgIC8vIERlZmF1bHRzIHRvIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IGVkZ2VcbiAgICB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4gPSBfLmNvbnN0YW50KHVuZGVmaW5lZCk7XG5cbiAgICAvLyB2IC0+IGxhYmVsXG4gICAgdGhpcy5fbm9kZXMgPSB7fTtcblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAvLyB2IC0+IHBhcmVudFxuICAgICAgdGhpcy5fcGFyZW50ID0ge307XG5cbiAgICAgIC8vIHYgLT4gY2hpbGRyZW5cbiAgICAgIHRoaXMuX2NoaWxkcmVuID0ge307XG4gICAgICB0aGlzLl9jaGlsZHJlbltHUkFQSF9OT0RFXSA9IHt9O1xuICAgIH1cblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX2luID0ge307XG5cbiAgICAvLyB1IC0+IHYgLT4gTnVtYmVyXG4gICAgdGhpcy5fcHJlZHMgPSB7fTtcblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX291dCA9IHt9O1xuXG4gICAgLy8gdiAtPiB3IC0+IE51bWJlclxuICAgIHRoaXMuX3N1Y3MgPSB7fTtcblxuICAgIC8vIGUgLT4gZWRnZU9ialxuICAgIHRoaXMuX2VkZ2VPYmpzID0ge307XG5cbiAgICAvLyBlIC0+IGxhYmVsXG4gICAgdGhpcy5fZWRnZUxhYmVscyA9IHt9O1xuICB9XG4gIC8qID09PSBHcmFwaCBmdW5jdGlvbnMgPT09PT09PT09ICovXG4gIGlzRGlyZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWQ7XG4gIH1cbiAgaXNNdWx0aWdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLl9pc011bHRpZ3JhcGg7XG4gIH1cbiAgaXNDb21wb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb21wb3VuZDtcbiAgfVxuICBzZXRHcmFwaChsYWJlbCkge1xuICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICB9XG4gIC8qID09PSBOb2RlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHROb2RlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb3VudDtcbiAgfVxuICBub2RlcygpIHtcbiAgICByZXR1cm4gXy5rZXlzKHRoaXMuX25vZGVzKTtcbiAgfVxuICBzb3VyY2VzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIF8uaXNFbXB0eShzZWxmLl9pblt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2lua3MoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gXy5pc0VtcHR5KHNlbGYuX291dFt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2V0Tm9kZXModnMsIHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgc2VsZi5zZXROb2RlKHYsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuc2V0Tm9kZSh2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXROb2RlKHYsIHZhbHVlKSB7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX25vZGVzW3ZdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fbm9kZXNbdl0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHZhbHVlIDogdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHYpO1xuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aGlzLl9wYXJlbnRbdl0gPSBHUkFQSF9OT0RFO1xuICAgICAgdGhpcy5fY2hpbGRyZW5bdl0gPSB7fTtcbiAgICAgIHRoaXMuX2NoaWxkcmVuW0dSQVBIX05PREVdW3ZdID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faW5bdl0gPSB7fTtcbiAgICB0aGlzLl9wcmVkc1t2XSA9IHt9O1xuICAgIHRoaXMuX291dFt2XSA9IHt9O1xuICAgIHRoaXMuX3N1Y3Nbdl0gPSB7fTtcbiAgICArK3RoaXMuX25vZGVDb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlKHYpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZXNbdl07XG4gIH1cbiAgaGFzTm9kZSh2KSB7XG4gICAgcmV0dXJuIF8uaGFzKHRoaXMuX25vZGVzLCB2KTtcbiAgfVxuICByZW1vdmVOb2RlKHYpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgdmFyIHJlbW92ZUVkZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZWxmLnJlbW92ZUVkZ2Uoc2VsZi5fZWRnZU9ianNbZV0pO1xuICAgICAgfTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rlc1t2XTtcbiAgICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50W3ZdO1xuICAgICAgICBfLmVhY2godGhpcy5jaGlsZHJlbih2KSwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgc2VsZi5zZXRQYXJlbnQoY2hpbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgfVxuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9pblt2XSksIHJlbW92ZUVkZ2UpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3ByZWRzW3ZdO1xuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9vdXRbdl0pLCByZW1vdmVFZGdlKTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9vdXRbdl07XG4gICAgICBkZWxldGUgdGhpcy5fc3Vjc1t2XTtcbiAgICAgIC0tdGhpcy5fbm9kZUNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXRQYXJlbnQodiwgcGFyZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoJyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gR1JBUEhfTk9ERTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29lcmNlIHBhcmVudCB0byBzdHJpbmdcbiAgICAgIHBhcmVudCArPSAnJztcbiAgICAgIGZvciAodmFyIGFuY2VzdG9yID0gcGFyZW50OyAhXy5pc1VuZGVmaW5lZChhbmNlc3Rvcik7IGFuY2VzdG9yID0gdGhpcy5wYXJlbnQoYW5jZXN0b3IpKSB7XG4gICAgICAgIGlmIChhbmNlc3RvciA9PT0gdikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyAnICsgcGFyZW50ICsgJyBhcyBwYXJlbnQgb2YgJyArIHYgKyAnIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXROb2RlKHBhcmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXROb2RlKHYpO1xuICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgIHRoaXMuX3BhcmVudFt2XSA9IHBhcmVudDtcbiAgICB0aGlzLl9jaGlsZHJlbltwYXJlbnRdW3ZdID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodikge1xuICAgIGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdl1dW3ZdO1xuICB9XG4gIHBhcmVudCh2KSB7XG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLl9wYXJlbnRbdl07XG4gICAgICBpZiAocGFyZW50ICE9PSBHUkFQSF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNoaWxkcmVuKHYpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh2KSkge1xuICAgICAgdiA9IEdSQVBIX05PREU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBfLmtleXMoY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodiA9PT0gR1JBUEhfTk9ERSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzTm9kZSh2KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBwcmVkZWNlc3NvcnModikge1xuICAgIHZhciBwcmVkc1YgPSB0aGlzLl9wcmVkc1t2XTtcbiAgICBpZiAocHJlZHNWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHByZWRzVik7XG4gICAgfVxuICB9XG4gIHN1Y2Nlc3NvcnModikge1xuICAgIHZhciBzdWNzViA9IHRoaXMuX3N1Y3Nbdl07XG4gICAgaWYgKHN1Y3NWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHN1Y3NWKTtcbiAgICB9XG4gIH1cbiAgbmVpZ2hib3JzKHYpIHtcbiAgICB2YXIgcHJlZHMgPSB0aGlzLnByZWRlY2Vzc29ycyh2KTtcbiAgICBpZiAocHJlZHMpIHtcbiAgICAgIHJldHVybiBfLnVuaW9uKHByZWRzLCB0aGlzLnN1Y2Nlc3NvcnModikpO1xuICAgIH1cbiAgfVxuICBpc0xlYWYodikge1xuICAgIHZhciBuZWlnaGJvcnM7XG4gICAgaWYgKHRoaXMuaXNEaXJlY3RlZCgpKSB7XG4gICAgICBuZWlnaGJvcnMgPSB0aGlzLnN1Y2Nlc3NvcnModik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5laWdoYm9ycyA9IHRoaXMubmVpZ2hib3JzKHYpO1xuICAgIH1cbiAgICByZXR1cm4gbmVpZ2hib3JzLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBmaWx0ZXJOb2RlcyhmaWx0ZXIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIGNvcHkgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7XG4gICAgICBkaXJlY3RlZDogdGhpcy5faXNEaXJlY3RlZCxcbiAgICAgIG11bHRpZ3JhcGg6IHRoaXMuX2lzTXVsdGlncmFwaCxcbiAgICAgIGNvbXBvdW5kOiB0aGlzLl9pc0NvbXBvdW5kLFxuICAgIH0pO1xuXG4gICAgY29weS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh0aGlzLl9ub2RlcywgZnVuY3Rpb24gKHZhbHVlLCB2KSB7XG4gICAgICBpZiAoZmlsdGVyKHYpKSB7XG4gICAgICAgIGNvcHkuc2V0Tm9kZSh2LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfLmVhY2godGhpcy5fZWRnZU9ianMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoY29weS5oYXNOb2RlKGUudikgJiYgY29weS5oYXNOb2RlKGUudykpIHtcbiAgICAgICAgY29weS5zZXRFZGdlKGUsIHNlbGYuZWRnZShlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcGFyZW50cyA9IHt9O1xuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQodikge1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGYucGFyZW50KHYpO1xuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkIHx8IGNvcHkuaGFzTm9kZShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudHNbdl0gPSBwYXJlbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudCBpbiBwYXJlbnRzKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRzW3BhcmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICBfLmVhY2goY29weS5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgICBjb3B5LnNldFBhcmVudCh2LCBmaW5kUGFyZW50KHYpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xuICB9XG4gIC8qID09PSBFZGdlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHRFZGdlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBlZGdlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkZ2VDb3VudDtcbiAgfVxuICBlZGdlcygpIHtcbiAgICByZXR1cm4gXy52YWx1ZXModGhpcy5fZWRnZU9ianMpO1xuICB9XG4gIHNldFBhdGgodnMsIHZhbHVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIF8ucmVkdWNlKHZzLCBmdW5jdGlvbiAodiwgdykge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICBzZWxmLnNldEVkZ2UodiwgdywgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zZXRFZGdlKHYsIHcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHc7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLypcbiAgICogc2V0RWRnZSh2LCB3LCBbdmFsdWUsIFtuYW1lXV0pXG4gICAqIHNldEVkZ2UoeyB2LCB3LCBbbmFtZV0gfSwgW3ZhbHVlXSlcbiAgICovXG4gIHNldEVkZ2UoKSB7XG4gICAgdmFyIHYsIHcsIG5hbWUsIHZhbHVlO1xuICAgIHZhciB2YWx1ZVNwZWNpZmllZCA9IGZhbHNlO1xuICAgIHZhciBhcmcwID0gYXJndW1lbnRzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnb2JqZWN0JyAmJiBhcmcwICE9PSBudWxsICYmICd2JyBpbiBhcmcwKSB7XG4gICAgICB2ID0gYXJnMC52O1xuICAgICAgdyA9IGFyZzAudztcbiAgICAgIG5hbWUgPSBhcmcwLm5hbWU7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFsdWVTcGVjaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2ID0gYXJnMDtcbiAgICAgIHcgPSBhcmd1bWVudHNbMV07XG4gICAgICBuYW1lID0gYXJndW1lbnRzWzNdO1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdO1xuICAgICAgICB2YWx1ZVNwZWNpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdiA9ICcnICsgdjtcbiAgICB3ID0gJycgKyB3O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgbmFtZSA9ICcnICsgbmFtZTtcbiAgICB9XG5cbiAgICB2YXIgZSA9IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICBpZiAoXy5oYXModGhpcy5fZWRnZUxhYmVscywgZSkpIHtcbiAgICAgIGlmICh2YWx1ZVNwZWNpZmllZCkge1xuICAgICAgICB0aGlzLl9lZGdlTGFiZWxzW2VdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQobmFtZSkgJiYgIXRoaXMuX2lzTXVsdGlncmFwaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlJyk7XG4gICAgfVxuXG4gICAgLy8gSXQgZGlkbid0IGV4aXN0LCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdC5cbiAgICAvLyBGaXJzdCBlbnN1cmUgdGhlIG5vZGVzIGV4aXN0LlxuICAgIHRoaXMuc2V0Tm9kZSh2KTtcbiAgICB0aGlzLnNldE5vZGUodyk7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fZWRnZUxhYmVsc1tlXSA9IHZhbHVlU3BlY2lmaWVkID8gdmFsdWUgOiB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odiwgdywgbmFtZSk7XG5cbiAgICB2YXIgZWRnZU9iaiA9IGVkZ2VBcmdzVG9PYmoodGhpcy5faXNEaXJlY3RlZCwgdiwgdywgbmFtZSk7XG4gICAgLy8gRW5zdXJlIHdlIGFkZCB1bmRpcmVjdGVkIGVkZ2VzIGluIGEgY29uc2lzdGVudCB3YXkuXG4gICAgdiA9IGVkZ2VPYmoudjtcbiAgICB3ID0gZWRnZU9iai53O1xuXG4gICAgT2JqZWN0LmZyZWV6ZShlZGdlT2JqKTtcbiAgICB0aGlzLl9lZGdlT2Jqc1tlXSA9IGVkZ2VPYmo7XG4gICAgaW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fcHJlZHNbd10sIHYpO1xuICAgIGluY3JlbWVudE9ySW5pdEVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgIHRoaXMuX2luW3ddW2VdID0gZWRnZU9iajtcbiAgICB0aGlzLl9vdXRbdl1bZV0gPSBlZGdlT2JqO1xuICAgIHRoaXMuX2VkZ2VDb3VudCsrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGVkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICB9XG4gIGhhc0VkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiBfLmhhcyh0aGlzLl9lZGdlTGFiZWxzLCBlKTtcbiAgfVxuICByZW1vdmVFZGdlKHYsIHcsIG5hbWUpIHtcbiAgICB2YXIgZSA9XG4gICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgICAgID8gZWRnZU9ialRvSWQodGhpcy5faXNEaXJlY3RlZCwgYXJndW1lbnRzWzBdKVxuICAgICAgICA6IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICB2YXIgZWRnZSA9IHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgIGlmIChlZGdlKSB7XG4gICAgICB2ID0gZWRnZS52O1xuICAgICAgdyA9IGVkZ2UudztcbiAgICAgIGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgICAgZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9wcmVkc1t3XSwgdik7XG4gICAgICBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ddW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX291dFt2XVtlXTtcbiAgICAgIHRoaXMuX2VkZ2VDb3VudC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpbkVkZ2VzKHYsIHUpIHtcbiAgICB2YXIgaW5WID0gdGhpcy5faW5bdl07XG4gICAgaWYgKGluVikge1xuICAgICAgdmFyIGVkZ2VzID0gXy52YWx1ZXMoaW5WKTtcbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnYgPT09IHU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgb3V0RWRnZXModiwgdykge1xuICAgIHZhciBvdXRWID0gdGhpcy5fb3V0W3ZdO1xuICAgIGlmIChvdXRWKSB7XG4gICAgICB2YXIgZWRnZXMgPSBfLnZhbHVlcyhvdXRWKTtcbiAgICAgIGlmICghdykge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLncgPT09IHc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgbm9kZUVkZ2VzKHYsIHcpIHtcbiAgICB2YXIgaW5FZGdlcyA9IHRoaXMuaW5FZGdlcyh2LCB3KTtcbiAgICBpZiAoaW5FZGdlcykge1xuICAgICAgcmV0dXJuIGluRWRnZXMuY29uY2F0KHRoaXMub3V0RWRnZXModiwgdykpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBOdW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGdyYXBoLiBTaG91bGQgb25seSBiZSBjaGFuZ2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gKi9cbkdyYXBoLnByb3RvdHlwZS5fbm9kZUNvdW50ID0gMDtcblxuLyogTnVtYmVyIG9mIGVkZ2VzIGluIHRoZSBncmFwaC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBieSB0aGUgaW1wbGVtZW50YXRpb24uICovXG5HcmFwaC5wcm90b3R5cGUuX2VkZ2VDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGluY3JlbWVudE9ySW5pdEVudHJ5KG1hcCwgaykge1xuICBpZiAobWFwW2tdKSB7XG4gICAgbWFwW2tdKys7XG4gIH0gZWxzZSB7XG4gICAgbWFwW2tdID0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KG1hcCwgaykge1xuICBpZiAoIS0tbWFwW2tdKSB7XG4gICAgZGVsZXRlIG1hcFtrXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlZGdlQXJnc1RvSWQoaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHJldHVybiB2ICsgRURHRV9LRVlfREVMSU0gKyB3ICsgRURHRV9LRVlfREVMSU0gKyAoXy5pc1VuZGVmaW5lZChuYW1lKSA/IERFRkFVTFRfRURHRV9OQU1FIDogbmFtZSk7XG59XG5cbmZ1bmN0aW9uIGVkZ2VBcmdzVG9PYmooaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHZhciBlZGdlT2JqID0geyB2OiB2LCB3OiB3IH07XG4gIGlmIChuYW1lKSB7XG4gICAgZWRnZU9iai5uYW1lID0gbmFtZTtcbiAgfVxuICByZXR1cm4gZWRnZU9iajtcbn1cblxuZnVuY3Rpb24gZWRnZU9ialRvSWQoaXNEaXJlY3RlZCwgZWRnZU9iaikge1xuICByZXR1cm4gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsIGVkZ2VPYmoudiwgZWRnZU9iai53LCBlZGdlT2JqLm5hbWUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/graph.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/index.js": /*!***************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/index.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Graph\": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.Graph),\n/* harmony export */ \"version\": () => (/* binding */ version)\n/* harmony export */ });\n/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graph.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/graph.js\");\n// Includes only the \"core\" of graphlib\n\n\n\nconst version = '2.1.9-pre';\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFbUM7O0FBRW5DOztBQUUwQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzP2ZkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW5jbHVkZXMgb25seSB0aGUgXCJjb3JlXCIgb2YgZ3JhcGhsaWJcblxuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuL2dyYXBoLmpzJztcblxuY29uc3QgdmVyc2lvbiA9ICcyLjEuOS1wcmUnO1xuXG5leHBvcnQgeyBHcmFwaCwgdmVyc2lvbiB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/index.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/graphlib/json.js": /*!**************************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/graphlib/json.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"read\": () => (/* binding */ read),\n/* harmony export */ \"write\": () => (/* binding */ write)\n/* harmony export */ });\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/isUndefined.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/clone.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/map.js\");\n/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash-es */ \"../../../node_modules/lodash-es/forEach.js\");\n/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graph.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/graph.js\");\n\n\n\n\n\nfunction write(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound(),\n },\n nodes: writeNodes(g),\n edges: writeEdges(g),\n };\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](g.graph())) {\n json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__[\"default\"](g.graph());\n }\n return json;\n}\n\nfunction writeNodes(g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.nodes(), function (v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = { v: v };\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](nodeValue)) {\n node.value = nodeValue;\n }\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](parent)) {\n node.parent = parent;\n }\n return node;\n });\n}\n\nfunction writeEdges(g) {\n return lodash_es__WEBPACK_IMPORTED_MODULE_3__[\"default\"](g.edges(), function (e) {\n var edgeValue = g.edge(e);\n var edge = { v: e.v, w: e.w };\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](e.name)) {\n edge.name = e.name;\n }\n if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__[\"default\"](edgeValue)) {\n edge.value = edgeValue;\n }\n return edge;\n });\n}\n\nfunction read(json) {\n var g = new _graph_js__WEBPACK_IMPORTED_MODULE_0__.Graph(json.options).setGraph(json.value);\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](json.nodes, function (entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) {\n g.setParent(entry.v, entry.parent);\n }\n });\n lodash_es__WEBPACK_IMPORTED_MODULE_4__[\"default\"](json.edges, function (entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n });\n return g;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDSTs7QUFFWjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU8saURBQWE7QUFDcEIsaUJBQWlCLGlEQUFPO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVMsaURBQWE7QUFDdEI7QUFDQTtBQUNBLFNBQVMsaURBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVMsaURBQWE7QUFDdEI7QUFDQTtBQUNBLFNBQVMsaURBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsY0FBYyw0Q0FBSztBQUNuQixFQUFFLGlEQUFNO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRSxpREFBTTtBQUNSLGdCQUFnQiwwQ0FBMEM7QUFDMUQsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzPzM1YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuL2dyYXBoLmpzJztcblxuZXhwb3J0IHsgd3JpdGUsIHJlYWQgfTtcblxuZnVuY3Rpb24gd3JpdGUoZykge1xuICB2YXIganNvbiA9IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBkaXJlY3RlZDogZy5pc0RpcmVjdGVkKCksXG4gICAgICBtdWx0aWdyYXBoOiBnLmlzTXVsdGlncmFwaCgpLFxuICAgICAgY29tcG91bmQ6IGcuaXNDb21wb3VuZCgpLFxuICAgIH0sXG4gICAgbm9kZXM6IHdyaXRlTm9kZXMoZyksXG4gICAgZWRnZXM6IHdyaXRlRWRnZXMoZyksXG4gIH07XG4gIGlmICghXy5pc1VuZGVmaW5lZChnLmdyYXBoKCkpKSB7XG4gICAganNvbi52YWx1ZSA9IF8uY2xvbmUoZy5ncmFwaCgpKTtcbiAgfVxuICByZXR1cm4ganNvbjtcbn1cblxuZnVuY3Rpb24gd3JpdGVOb2RlcyhnKSB7XG4gIHJldHVybiBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGVWYWx1ZSA9IGcubm9kZSh2KTtcbiAgICB2YXIgcGFyZW50ID0gZy5wYXJlbnQodik7XG4gICAgdmFyIG5vZGUgPSB7IHY6IHYgfTtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQobm9kZVZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICB9XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmVudCkpIHtcbiAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRWRnZXMoZykge1xuICByZXR1cm4gXy5tYXAoZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlVmFsdWUgPSBnLmVkZ2UoZSk7XG4gICAgdmFyIGVkZ2UgPSB7IHY6IGUudiwgdzogZS53IH07XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGUubmFtZSkpIHtcbiAgICAgIGVkZ2UubmFtZSA9IGUubmFtZTtcbiAgICB9XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVkZ2VWYWx1ZSkpIHtcbiAgICAgIGVkZ2UudmFsdWUgPSBlZGdlVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBlZGdlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZChqc29uKSB7XG4gIHZhciBnID0gbmV3IEdyYXBoKGpzb24ub3B0aW9ucykuc2V0R3JhcGgoanNvbi52YWx1ZSk7XG4gIF8uZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBnLnNldE5vZGUoZW50cnkudiwgZW50cnkudmFsdWUpO1xuICAgIGlmIChlbnRyeS5wYXJlbnQpIHtcbiAgICAgIGcuc2V0UGFyZW50KGVudHJ5LnYsIGVudHJ5LnBhcmVudCk7XG4gICAgfVxuICB9KTtcbiAgXy5lYWNoKGpzb24uZWRnZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIGcuc2V0RWRnZSh7IHY6IGVudHJ5LnYsIHc6IGVudHJ5LncsIG5hbWU6IGVudHJ5Lm5hbWUgfSwgZW50cnkudmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGc7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/graphlib/json.js\n"); /***/ }), /***/ "../../../node_modules/dagre-d3-es/src/index.js": /*!******************************************************!*\ !*** ../../../node_modules/dagre-d3-es/src/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"graphlib\": () => (/* reexport module object */ _graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__),\n/* harmony export */ \"intersect\": () => (/* reexport module object */ _dagre_js_intersect_index_js__WEBPACK_IMPORTED_MODULE_2__),\n/* harmony export */ \"render\": () => (/* reexport safe */ _dagre_js_render_js__WEBPACK_IMPORTED_MODULE_0__.render)\n/* harmony export */ });\n/* harmony import */ var _dagre_js_render_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dagre-js/render.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/render.js\");\n/* harmony import */ var _graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _dagre_js_intersect_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dagre-js/intersect/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.js\");\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEM7QUFDRTs7QUFFVzs7QUFFcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9pbmRleC5qcz9lYjM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJy4vZGFncmUtanMvcmVuZGVyLmpzJztcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gJy4vZ3JhcGhsaWIvaW5kZXguanMnO1xuXG5pbXBvcnQgKiBhcyBpbnRlcnNlY3QgZnJvbSAnLi9kYWdyZS1qcy9pbnRlcnNlY3QvaW5kZXguanMnO1xuXG5leHBvcnQgeyBncmFwaGxpYiwgaW50ZXJzZWN0LCByZW5kZXIgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dagre-d3-es/src/index.js\n"); /***/ }), /***/ "../../../node_modules/decode-named-character-reference/index.dom.js": /*!***************************************************************************!*\ !*** ../../../node_modules/decode-named-character-reference/index.dom.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeNamedCharacterReference\": () => (/* binding */ decodeNamedCharacterReference)\n/* harmony export */ });\n/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nfunction decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ087QUFDUCw2Q0FBNkM7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLGlDQUFpQztBQUNqRTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcz9iMmI2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIGxpYj1cImRvbVwiIC8+XG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG5jb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfGZhbHNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUpIHtcbiAgY29uc3QgY2hhcmFjdGVyUmVmZXJlbmNlID0gJyYnICsgdmFsdWUgKyAnOydcbiAgZWxlbWVudC5pbm5lckhUTUwgPSBjaGFyYWN0ZXJSZWZlcmVuY2VcbiAgY29uc3QgY2hhciA9IGVsZW1lbnQudGV4dENvbnRlbnRcblxuICAvLyBTb21lIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGRvIG5vdCByZXF1aXJlIHRoZSBjbG9zaW5nIHNlbWljb2xvblxuICAvLyAoYCZub3RgLCBmb3IgaW5zdGFuY2UpLCB3aGljaCBsZWFkcyB0byBzaXR1YXRpb25zIHdoZXJlIHBhcnNpbmcgdGhlIGFzc3VtZWRcbiAgLy8gbmFtZWQgcmVmZXJlbmNlIG9mIGAmbm90aXQ7YCB3aWxsIHJlc3VsdCBpbiB0aGUgc3RyaW5nIGDCrGl0O2AuXG4gIC8vIFdoZW4gd2UgZW5jb3VudGVyIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGFmdGVyIHBhcnNpbmcsIGFuZCB0aGUgY2hhcmFjdGVyXG4gIC8vIHJlZmVyZW5jZSB0byBkZWNvZGUgd2FzIG5vdCBhIHNlbWljb2xvbiAoYCZzZW1pO2ApLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlXG4gIC8vIG1hdGNoaW5nIHdhcyBub3QgY29tcGxldGUuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IFR5cGVTY3JpcHQgaXMgd3JvbmcgdGhhdCBgdGV4dENvbnRlbnRgIG9uIGVsZW1lbnRzIGNhblxuICAvLyB5aWVsZCBgbnVsbGAuXG4gIGlmIChjaGFyLmNoYXJDb2RlQXQoY2hhci5sZW5ndGggLSAxKSA9PT0gNTkgLyogYDtgICovICYmIHZhbHVlICE9PSAnc2VtaScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIHRoZSBkZWNvZGVkIHN0cmluZyBpcyBlcXVhbCB0byB0aGUgaW5wdXQsIHRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhc1xuICAvLyBub3QgdmFsaWQuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IFR5cGVTY3JpcHQgaXMgd3JvbmcgdGhhdCBgdGV4dENvbnRlbnRgIG9uIGVsZW1lbnRzIGNhblxuICAvLyB5aWVsZCBgbnVsbGAuXG4gIHJldHVybiBjaGFyID09PSBjaGFyYWN0ZXJSZWZlcmVuY2UgPyBmYWxzZSA6IGNoYXJcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/decode-named-character-reference/index.dom.js\n"); /***/ }), /***/ "../../../node_modules/delaunator/index.js": /*!*************************************************!*\ !*** ../../../node_modules/delaunator/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Delaunator)\n/* harmony export */ });\n/* harmony import */ var robust_predicates__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! robust-predicates */ \"../../../node_modules/robust-predicates/index.js\");\n\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\n\n\nclass Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if ((0,robust_predicates__WEBPACK_IMPORTED_MODULE_0__.orient2d)(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], (0,robust_predicates__WEBPACK_IMPORTED_MODULE_0__.orient2d)(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], (0,robust_predicates__WEBPACK_IMPORTED_MODULE_0__.orient2d)(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], (0,robust_predicates__WEBPACK_IMPORTED_MODULE_0__.orient2d)(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlbGF1bmF0b3IvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7QUFDQTs7QUFFMkM7O0FBRTVCOztBQUVmO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLDZDQUE2QztBQUM3Qyw0Q0FBNEM7QUFDNUMsa0VBQWtFOztBQUVsRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGVBQWUsMEZBQTBGO0FBQ3pHOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLE9BQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsT0FBTztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksMkRBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdDQUFnQyxzQkFBc0I7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxvQkFBb0I7QUFDM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MsMkRBQVE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGtDQUFrQzs7QUFFdEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MsMkRBQVE7QUFDNUM7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QywyREFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsY0FBYztBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxzREFBc0Q7O0FBRXJFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzRUFBc0U7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsWUFBWTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWxhdW5hdG9yL2luZGV4LmpzPzkzMWIiXSwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbmNvbnN0IEVER0VfU1RBQ0sgPSBuZXcgVWludDMyQXJyYXkoNTEyKTtcblxuaW1wb3J0IHtvcmllbnQyZH0gZnJvbSAncm9idXN0LXByZWRpY2F0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxhdW5hdG9yIHtcblxuICAgIHN0YXRpYyBmcm9tKHBvaW50cywgZ2V0WCA9IGRlZmF1bHRHZXRYLCBnZXRZID0gZGVmYXVsdEdldFkpIHtcbiAgICAgICAgY29uc3QgbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IG5ldyBGbG9hdDY0QXJyYXkobiAqIDIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29vcmRzWzIgKiBpXSA9IGdldFgocCk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGkgKyAxXSA9IGdldFkocCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IERlbGF1bmF0b3IoY29vcmRzKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihjb29yZHMpIHtcbiAgICAgICAgY29uc3QgbiA9IGNvb3Jkcy5sZW5ndGggPj4gMTtcbiAgICAgICAgaWYgKG4gPiAwICYmIHR5cGVvZiBjb29yZHNbMF0gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGNvb3JkcyB0byBjb250YWluIG51bWJlcnMuJyk7XG5cbiAgICAgICAgdGhpcy5jb29yZHMgPSBjb29yZHM7XG5cbiAgICAgICAgLy8gYXJyYXlzIHRoYXQgd2lsbCBzdG9yZSB0aGUgdHJpYW5ndWxhdGlvbiBncmFwaFxuICAgICAgICBjb25zdCBtYXhUcmlhbmdsZXMgPSBNYXRoLm1heCgyICogbiAtIDUsIDApO1xuICAgICAgICB0aGlzLl90cmlhbmdsZXMgPSBuZXcgVWludDMyQXJyYXkobWF4VHJpYW5nbGVzICogMyk7XG4gICAgICAgIHRoaXMuX2hhbGZlZGdlcyA9IG5ldyBJbnQzMkFycmF5KG1heFRyaWFuZ2xlcyAqIDMpO1xuXG4gICAgICAgIC8vIHRlbXBvcmFyeSBhcnJheXMgZm9yIHRyYWNraW5nIHRoZSBlZGdlcyBvZiB0aGUgYWR2YW5jaW5nIGNvbnZleCBodWxsXG4gICAgICAgIHRoaXMuX2hhc2hTaXplID0gTWF0aC5jZWlsKE1hdGguc3FydChuKSk7XG4gICAgICAgIHRoaXMuX2h1bGxQcmV2ID0gbmV3IFVpbnQzMkFycmF5KG4pOyAvLyBlZGdlIHRvIHByZXYgZWRnZVxuICAgICAgICB0aGlzLl9odWxsTmV4dCA9IG5ldyBVaW50MzJBcnJheShuKTsgLy8gZWRnZSB0byBuZXh0IGVkZ2VcbiAgICAgICAgdGhpcy5faHVsbFRyaSA9IG5ldyBVaW50MzJBcnJheShuKTsgLy8gZWRnZSB0byBhZGphY2VudCB0cmlhbmdsZVxuICAgICAgICB0aGlzLl9odWxsSGFzaCA9IG5ldyBJbnQzMkFycmF5KHRoaXMuX2hhc2hTaXplKS5maWxsKC0xKTsgLy8gYW5ndWxhciBlZGdlIGhhc2hcblxuICAgICAgICAvLyB0ZW1wb3JhcnkgYXJyYXlzIGZvciBzb3J0aW5nIHBvaW50c1xuICAgICAgICB0aGlzLl9pZHMgPSBuZXcgVWludDMyQXJyYXkobik7XG4gICAgICAgIHRoaXMuX2Rpc3RzID0gbmV3IEZsb2F0NjRBcnJheShuKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3Qge2Nvb3JkcywgX2h1bGxQcmV2OiBodWxsUHJldiwgX2h1bGxOZXh0OiBodWxsTmV4dCwgX2h1bGxUcmk6IGh1bGxUcmksIF9odWxsSGFzaDogaHVsbEhhc2h9ID0gIHRoaXM7XG4gICAgICAgIGNvbnN0IG4gPSBjb29yZHMubGVuZ3RoID4+IDE7XG5cbiAgICAgICAgLy8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgcG9pbnQgaW5kaWNlczsgY2FsY3VsYXRlIGlucHV0IGRhdGEgYmJveFxuICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBjb29yZHNbMiAqIGldO1xuICAgICAgICAgICAgY29uc3QgeSA9IGNvb3Jkc1syICogaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgICAgIHRoaXMuX2lkc1tpXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3ggPSAobWluWCArIG1heFgpIC8gMjtcbiAgICAgICAgY29uc3QgY3kgPSAobWluWSArIG1heFkpIC8gMjtcblxuICAgICAgICBsZXQgbWluRGlzdCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgaTAsIGkxLCBpMjtcblxuICAgICAgICAvLyBwaWNrIGEgc2VlZCBwb2ludCBjbG9zZSB0byB0aGUgY2VudGVyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gZGlzdChjeCwgY3ksIGNvb3Jkc1syICogaV0sIGNvb3Jkc1syICogaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChkIDwgbWluRGlzdCkge1xuICAgICAgICAgICAgICAgIGkwID0gaTtcbiAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpMHggPSBjb29yZHNbMiAqIGkwXTtcbiAgICAgICAgY29uc3QgaTB5ID0gY29vcmRzWzIgKiBpMCArIDFdO1xuXG4gICAgICAgIG1pbkRpc3QgPSBJbmZpbml0eTtcblxuICAgICAgICAvLyBmaW5kIHRoZSBwb2ludCBjbG9zZXN0IHRvIHRoZSBzZWVkXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gaTApIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZCA9IGRpc3QoaTB4LCBpMHksIGNvb3Jkc1syICogaV0sIGNvb3Jkc1syICogaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChkIDwgbWluRGlzdCAmJiBkID4gMCkge1xuICAgICAgICAgICAgICAgIGkxID0gaTtcbiAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaTF4ID0gY29vcmRzWzIgKiBpMV07XG4gICAgICAgIGxldCBpMXkgPSBjb29yZHNbMiAqIGkxICsgMV07XG5cbiAgICAgICAgbGV0IG1pblJhZGl1cyA9IEluZmluaXR5O1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIHRoaXJkIHBvaW50IHdoaWNoIGZvcm1zIHRoZSBzbWFsbGVzdCBjaXJjdW1jaXJjbGUgd2l0aCB0aGUgZmlyc3QgdHdvXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gaTAgfHwgaSA9PT0gaTEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgciA9IGNpcmN1bXJhZGl1cyhpMHgsIGkweSwgaTF4LCBpMXksIGNvb3Jkc1syICogaV0sIGNvb3Jkc1syICogaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyIDwgbWluUmFkaXVzKSB7XG4gICAgICAgICAgICAgICAgaTIgPSBpO1xuICAgICAgICAgICAgICAgIG1pblJhZGl1cyA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkyeCA9IGNvb3Jkc1syICogaTJdO1xuICAgICAgICBsZXQgaTJ5ID0gY29vcmRzWzIgKiBpMiArIDFdO1xuXG4gICAgICAgIGlmIChtaW5SYWRpdXMgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAvLyBvcmRlciBjb2xsaW5lYXIgcG9pbnRzIGJ5IGR4IChvciBkeSBpZiBhbGwgeCBhcmUgaWRlbnRpY2FsKVxuICAgICAgICAgICAgLy8gYW5kIHJldHVybiB0aGUgbGlzdCBhcyBhIGh1bGxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdHNbaV0gPSAoY29vcmRzWzIgKiBpXSAtIGNvb3Jkc1swXSkgfHwgKGNvb3Jkc1syICogaSArIDFdIC0gY29vcmRzWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1aWNrc29ydCh0aGlzLl9pZHMsIHRoaXMuX2Rpc3RzLCAwLCBuIC0gMSk7XG4gICAgICAgICAgICBjb25zdCBodWxsID0gbmV3IFVpbnQzMkFycmF5KG4pO1xuICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGQwID0gLUluZmluaXR5OyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9pZHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3RzW2lkXSA+IGQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGh1bGxbaisrXSA9IGlkO1xuICAgICAgICAgICAgICAgICAgICBkMCA9IHRoaXMuX2Rpc3RzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmh1bGwgPSBodWxsLnN1YmFycmF5KDAsIGopO1xuICAgICAgICAgICAgdGhpcy50cmlhbmdsZXMgPSBuZXcgVWludDMyQXJyYXkoMCk7XG4gICAgICAgICAgICB0aGlzLmhhbGZlZGdlcyA9IG5ldyBVaW50MzJBcnJheSgwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN3YXAgdGhlIG9yZGVyIG9mIHRoZSBzZWVkIHBvaW50cyBmb3IgY291bnRlci1jbG9ja3dpc2Ugb3JpZW50YXRpb25cbiAgICAgICAgaWYgKG9yaWVudDJkKGkweCwgaTB5LCBpMXgsIGkxeSwgaTJ4LCBpMnkpIDwgMCkge1xuICAgICAgICAgICAgY29uc3QgaSA9IGkxO1xuICAgICAgICAgICAgY29uc3QgeCA9IGkxeDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBpMXk7XG4gICAgICAgICAgICBpMSA9IGkyO1xuICAgICAgICAgICAgaTF4ID0gaTJ4O1xuICAgICAgICAgICAgaTF5ID0gaTJ5O1xuICAgICAgICAgICAgaTIgPSBpO1xuICAgICAgICAgICAgaTJ4ID0geDtcbiAgICAgICAgICAgIGkyeSA9IHk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjZW50ZXIgPSBjaXJjdW1jZW50ZXIoaTB4LCBpMHksIGkxeCwgaTF5LCBpMngsIGkyeSk7XG4gICAgICAgIHRoaXMuX2N4ID0gY2VudGVyLng7XG4gICAgICAgIHRoaXMuX2N5ID0gY2VudGVyLnk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RzW2ldID0gZGlzdChjb29yZHNbMiAqIGldLCBjb29yZHNbMiAqIGkgKyAxXSwgY2VudGVyLngsIGNlbnRlci55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvcnQgdGhlIHBvaW50cyBieSBkaXN0YW5jZSBmcm9tIHRoZSBzZWVkIHRyaWFuZ2xlIGNpcmN1bWNlbnRlclxuICAgICAgICBxdWlja3NvcnQodGhpcy5faWRzLCB0aGlzLl9kaXN0cywgMCwgbiAtIDEpO1xuXG4gICAgICAgIC8vIHNldCB1cCB0aGUgc2VlZCB0cmlhbmdsZSBhcyB0aGUgc3RhcnRpbmcgaHVsbFxuICAgICAgICB0aGlzLl9odWxsU3RhcnQgPSBpMDtcbiAgICAgICAgbGV0IGh1bGxTaXplID0gMztcblxuICAgICAgICBodWxsTmV4dFtpMF0gPSBodWxsUHJldltpMl0gPSBpMTtcbiAgICAgICAgaHVsbE5leHRbaTFdID0gaHVsbFByZXZbaTBdID0gaTI7XG4gICAgICAgIGh1bGxOZXh0W2kyXSA9IGh1bGxQcmV2W2kxXSA9IGkwO1xuXG4gICAgICAgIGh1bGxUcmlbaTBdID0gMDtcbiAgICAgICAgaHVsbFRyaVtpMV0gPSAxO1xuICAgICAgICBodWxsVHJpW2kyXSA9IDI7XG5cbiAgICAgICAgaHVsbEhhc2guZmlsbCgtMSk7XG4gICAgICAgIGh1bGxIYXNoW3RoaXMuX2hhc2hLZXkoaTB4LCBpMHkpXSA9IGkwO1xuICAgICAgICBodWxsSGFzaFt0aGlzLl9oYXNoS2V5KGkxeCwgaTF5KV0gPSBpMTtcbiAgICAgICAgaHVsbEhhc2hbdGhpcy5faGFzaEtleShpMngsIGkyeSldID0gaTI7XG5cbiAgICAgICAgdGhpcy50cmlhbmdsZXNMZW4gPSAwO1xuICAgICAgICB0aGlzLl9hZGRUcmlhbmdsZShpMCwgaTEsIGkyLCAtMSwgLTEsIC0xKTtcblxuICAgICAgICBmb3IgKGxldCBrID0gMCwgeHAsIHlwOyBrIDwgdGhpcy5faWRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5faWRzW2tdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGNvb3Jkc1syICogaV07XG4gICAgICAgICAgICBjb25zdCB5ID0gY29vcmRzWzIgKiBpICsgMV07XG5cbiAgICAgICAgICAgIC8vIHNraXAgbmVhci1kdXBsaWNhdGUgcG9pbnRzXG4gICAgICAgICAgICBpZiAoayA+IDAgJiYgTWF0aC5hYnMoeCAtIHhwKSA8PSBFUFNJTE9OICYmIE1hdGguYWJzKHkgLSB5cCkgPD0gRVBTSUxPTikgY29udGludWU7XG4gICAgICAgICAgICB4cCA9IHg7XG4gICAgICAgICAgICB5cCA9IHk7XG5cbiAgICAgICAgICAgIC8vIHNraXAgc2VlZCB0cmlhbmdsZSBwb2ludHNcbiAgICAgICAgICAgIGlmIChpID09PSBpMCB8fCBpID09PSBpMSB8fCBpID09PSBpMikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYSB2aXNpYmxlIGVkZ2Ugb24gdGhlIGNvbnZleCBodWxsIHVzaW5nIGVkZ2UgaGFzaFxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBrZXkgPSB0aGlzLl9oYXNoS2V5KHgsIHkpOyBqIDwgdGhpcy5faGFzaFNpemU7IGorKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gaHVsbEhhc2hbKGtleSArIGopICUgdGhpcy5faGFzaFNpemVdO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCAhPT0gLTEgJiYgc3RhcnQgIT09IGh1bGxOZXh0W3N0YXJ0XSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0ID0gaHVsbFByZXZbc3RhcnRdO1xuICAgICAgICAgICAgbGV0IGUgPSBzdGFydCwgcTtcbiAgICAgICAgICAgIHdoaWxlIChxID0gaHVsbE5leHRbZV0sIG9yaWVudDJkKHgsIHksIGNvb3Jkc1syICogZV0sIGNvb3Jkc1syICogZSArIDFdLCBjb29yZHNbMiAqIHFdLCBjb29yZHNbMiAqIHEgKyAxXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgIGlmIChlID09PSBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlID09PSAtMSkgY29udGludWU7IC8vIGxpa2VseSBhIG5lYXItZHVwbGljYXRlIHBvaW50OyBza2lwIGl0XG5cbiAgICAgICAgICAgIC8vIGFkZCB0aGUgZmlyc3QgdHJpYW5nbGUgZnJvbSB0aGUgcG9pbnRcbiAgICAgICAgICAgIGxldCB0ID0gdGhpcy5fYWRkVHJpYW5nbGUoZSwgaSwgaHVsbE5leHRbZV0sIC0xLCAtMSwgaHVsbFRyaVtlXSk7XG5cbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGZsaXAgdHJpYW5nbGVzIGZyb20gdGhlIHBvaW50IHVudGlsIHRoZXkgc2F0aXNmeSB0aGUgRGVsYXVuYXkgY29uZGl0aW9uXG4gICAgICAgICAgICBodWxsVHJpW2ldID0gdGhpcy5fbGVnYWxpemUodCArIDIpO1xuICAgICAgICAgICAgaHVsbFRyaVtlXSA9IHQ7IC8vIGtlZXAgdHJhY2sgb2YgYm91bmRhcnkgdHJpYW5nbGVzIG9uIHRoZSBodWxsXG4gICAgICAgICAgICBodWxsU2l6ZSsrO1xuXG4gICAgICAgICAgICAvLyB3YWxrIGZvcndhcmQgdGhyb3VnaCB0aGUgaHVsbCwgYWRkaW5nIG1vcmUgdHJpYW5nbGVzIGFuZCBmbGlwcGluZyByZWN1cnNpdmVseVxuICAgICAgICAgICAgbGV0IG4gPSBodWxsTmV4dFtlXTtcbiAgICAgICAgICAgIHdoaWxlIChxID0gaHVsbE5leHRbbl0sIG9yaWVudDJkKHgsIHksIGNvb3Jkc1syICogbl0sIGNvb3Jkc1syICogbiArIDFdLCBjb29yZHNbMiAqIHFdLCBjb29yZHNbMiAqIHEgKyAxXSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgdCA9IHRoaXMuX2FkZFRyaWFuZ2xlKG4sIGksIHEsIGh1bGxUcmlbaV0sIC0xLCBodWxsVHJpW25dKTtcbiAgICAgICAgICAgICAgICBodWxsVHJpW2ldID0gdGhpcy5fbGVnYWxpemUodCArIDIpO1xuICAgICAgICAgICAgICAgIGh1bGxOZXh0W25dID0gbjsgLy8gbWFyayBhcyByZW1vdmVkXG4gICAgICAgICAgICAgICAgaHVsbFNpemUtLTtcbiAgICAgICAgICAgICAgICBuID0gcTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZCBmcm9tIHRoZSBvdGhlciBzaWRlLCBhZGRpbmcgbW9yZSB0cmlhbmdsZXMgYW5kIGZsaXBwaW5nXG4gICAgICAgICAgICBpZiAoZSA9PT0gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocSA9IGh1bGxQcmV2W2VdLCBvcmllbnQyZCh4LCB5LCBjb29yZHNbMiAqIHFdLCBjb29yZHNbMiAqIHEgKyAxXSwgY29vcmRzWzIgKiBlXSwgY29vcmRzWzIgKiBlICsgMV0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0ID0gdGhpcy5fYWRkVHJpYW5nbGUocSwgaSwgZSwgLTEsIGh1bGxUcmlbZV0sIGh1bGxUcmlbcV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWdhbGl6ZSh0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGh1bGxUcmlbcV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICBodWxsTmV4dFtlXSA9IGU7IC8vIG1hcmsgYXMgcmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgICBodWxsU2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaHVsbCBpbmRpY2VzXG4gICAgICAgICAgICB0aGlzLl9odWxsU3RhcnQgPSBodWxsUHJldltpXSA9IGU7XG4gICAgICAgICAgICBodWxsTmV4dFtlXSA9IGh1bGxQcmV2W25dID0gaTtcbiAgICAgICAgICAgIGh1bGxOZXh0W2ldID0gbjtcblxuICAgICAgICAgICAgLy8gc2F2ZSB0aGUgdHdvIG5ldyBlZGdlcyBpbiB0aGUgaGFzaCB0YWJsZVxuICAgICAgICAgICAgaHVsbEhhc2hbdGhpcy5faGFzaEtleSh4LCB5KV0gPSBpO1xuICAgICAgICAgICAgaHVsbEhhc2hbdGhpcy5faGFzaEtleShjb29yZHNbMiAqIGVdLCBjb29yZHNbMiAqIGUgKyAxXSldID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaHVsbCA9IG5ldyBVaW50MzJBcnJheShodWxsU2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBlID0gdGhpcy5faHVsbFN0YXJ0OyBpIDwgaHVsbFNpemU7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5odWxsW2ldID0gZTtcbiAgICAgICAgICAgIGUgPSBodWxsTmV4dFtlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyaW0gdHlwZWQgdHJpYW5nbGUgbWVzaCBhcnJheXNcbiAgICAgICAgdGhpcy50cmlhbmdsZXMgPSB0aGlzLl90cmlhbmdsZXMuc3ViYXJyYXkoMCwgdGhpcy50cmlhbmdsZXNMZW4pO1xuICAgICAgICB0aGlzLmhhbGZlZGdlcyA9IHRoaXMuX2hhbGZlZGdlcy5zdWJhcnJheSgwLCB0aGlzLnRyaWFuZ2xlc0xlbik7XG4gICAgfVxuXG4gICAgX2hhc2hLZXkoeCwgeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihwc2V1ZG9BbmdsZSh4IC0gdGhpcy5fY3gsIHkgLSB0aGlzLl9jeSkgKiB0aGlzLl9oYXNoU2l6ZSkgJSB0aGlzLl9oYXNoU2l6ZTtcbiAgICB9XG5cbiAgICBfbGVnYWxpemUoYSkge1xuICAgICAgICBjb25zdCB7X3RyaWFuZ2xlczogdHJpYW5nbGVzLCBfaGFsZmVkZ2VzOiBoYWxmZWRnZXMsIGNvb3Jkc30gPSB0aGlzO1xuXG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IGFyID0gMDtcblxuICAgICAgICAvLyByZWN1cnNpb24gZWxpbWluYXRlZCB3aXRoIGEgZml4ZWQtc2l6ZSBzdGFja1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgYiA9IGhhbGZlZGdlc1thXTtcblxuICAgICAgICAgICAgLyogaWYgdGhlIHBhaXIgb2YgdHJpYW5nbGVzIGRvZXNuJ3Qgc2F0aXNmeSB0aGUgRGVsYXVuYXkgY29uZGl0aW9uXG4gICAgICAgICAgICAgKiAocDEgaXMgaW5zaWRlIHRoZSBjaXJjdW1jaXJjbGUgb2YgW3AwLCBwbCwgcHJdKSwgZmxpcCB0aGVtLFxuICAgICAgICAgICAgICogdGhlbiBkbyB0aGUgc2FtZSBjaGVjay9mbGlwIHJlY3Vyc2l2ZWx5IGZvciB0aGUgbmV3IHBhaXIgb2YgdHJpYW5nbGVzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICAgICAgIHBsICAgICAgICAgICAgICAgICAgICBwbFxuICAgICAgICAgICAgICogICAgICAgICAgL3x8XFwgICAgICAgICAgICAgICAgICAvICBcXFxuICAgICAgICAgICAgICogICAgICAgYWwvIHx8IFxcYmwgICAgICAgICAgICBhbC8gICAgXFxhXG4gICAgICAgICAgICAgKiAgICAgICAgLyAgfHwgIFxcICAgICAgICAgICAgICAvICAgICAgXFxcbiAgICAgICAgICAgICAqICAgICAgIC8gIGF8fGIgIFxcICAgIGZsaXAgICAgL19fX2FyX19fXFxcbiAgICAgICAgICAgICAqICAgICBwMFxcICAgfHwgICAvcDEgICA9PiAgIHAwXFwtLS1ibC0tLS9wMVxuICAgICAgICAgICAgICogICAgICAgIFxcICB8fCAgLyAgICAgICAgICAgICAgXFwgICAgICAvXG4gICAgICAgICAgICAgKiAgICAgICBhclxcIHx8IC9iciAgICAgICAgICAgICBiXFwgICAgL2JyXG4gICAgICAgICAgICAgKiAgICAgICAgICBcXHx8LyAgICAgICAgICAgICAgICAgIFxcICAvXG4gICAgICAgICAgICAgKiAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICAgIHByXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGEwID0gYSAtIGEgJSAzO1xuICAgICAgICAgICAgYXIgPSBhMCArIChhICsgMikgJSAzO1xuXG4gICAgICAgICAgICBpZiAoYiA9PT0gLTEpIHsgLy8gY29udmV4IGh1bGwgZWRnZVxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcbiAgICAgICAgICAgICAgICBhID0gRURHRV9TVEFDS1stLWldO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiMCA9IGIgLSBiICUgMztcbiAgICAgICAgICAgIGNvbnN0IGFsID0gYTAgKyAoYSArIDEpICUgMztcbiAgICAgICAgICAgIGNvbnN0IGJsID0gYjAgKyAoYiArIDIpICUgMztcblxuICAgICAgICAgICAgY29uc3QgcDAgPSB0cmlhbmdsZXNbYXJdO1xuICAgICAgICAgICAgY29uc3QgcHIgPSB0cmlhbmdsZXNbYV07XG4gICAgICAgICAgICBjb25zdCBwbCA9IHRyaWFuZ2xlc1thbF07XG4gICAgICAgICAgICBjb25zdCBwMSA9IHRyaWFuZ2xlc1tibF07XG5cbiAgICAgICAgICAgIGNvbnN0IGlsbGVnYWwgPSBpbkNpcmNsZShcbiAgICAgICAgICAgICAgICBjb29yZHNbMiAqIHAwXSwgY29vcmRzWzIgKiBwMCArIDFdLFxuICAgICAgICAgICAgICAgIGNvb3Jkc1syICogcHJdLCBjb29yZHNbMiAqIHByICsgMV0sXG4gICAgICAgICAgICAgICAgY29vcmRzWzIgKiBwbF0sIGNvb3Jkc1syICogcGwgKyAxXSxcbiAgICAgICAgICAgICAgICBjb29yZHNbMiAqIHAxXSwgY29vcmRzWzIgKiBwMSArIDFdKTtcblxuICAgICAgICAgICAgaWYgKGlsbGVnYWwpIHtcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXNbYV0gPSBwMTtcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXNbYl0gPSBwMDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhibCA9IGhhbGZlZGdlc1tibF07XG5cbiAgICAgICAgICAgICAgICAvLyBlZGdlIHN3YXBwZWQgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGh1bGwgKHJhcmUpOyBmaXggdGhlIGhhbGZlZGdlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIGlmIChoYmwgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gdGhpcy5faHVsbFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faHVsbFRyaVtlXSA9PT0gYmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9odWxsVHJpW2VdID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLl9odWxsUHJldltlXTtcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZSAhPT0gdGhpcy5faHVsbFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbGluayhhLCBoYmwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmsoYiwgaGFsZmVkZ2VzW2FyXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGluayhhciwgYmwpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnIgPSBiMCArIChiICsgMSkgJSAzO1xuXG4gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd29ycnkgYWJvdXQgaGl0dGluZyB0aGUgY2FwOiBpdCBjYW4gb25seSBoYXBwZW4gb24gZXh0cmVtZWx5IGRlZ2VuZXJhdGUgaW5wdXRcbiAgICAgICAgICAgICAgICBpZiAoaSA8IEVER0VfU1RBQ0subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIEVER0VfU1RBQ0tbaSsrXSA9IGJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xuICAgICAgICAgICAgICAgIGEgPSBFREdFX1NUQUNLWy0taV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXI7XG4gICAgfVxuXG4gICAgX2xpbmsoYSwgYikge1xuICAgICAgICB0aGlzLl9oYWxmZWRnZXNbYV0gPSBiO1xuICAgICAgICBpZiAoYiAhPT0gLTEpIHRoaXMuX2hhbGZlZGdlc1tiXSA9IGE7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgbmV3IHRyaWFuZ2xlIGdpdmVuIHZlcnRleCBpbmRpY2VzIGFuZCBhZGphY2VudCBoYWxmLWVkZ2UgaWRzXG4gICAgX2FkZFRyaWFuZ2xlKGkwLCBpMSwgaTIsIGEsIGIsIGMpIHtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMudHJpYW5nbGVzTGVuO1xuXG4gICAgICAgIHRoaXMuX3RyaWFuZ2xlc1t0XSA9IGkwO1xuICAgICAgICB0aGlzLl90cmlhbmdsZXNbdCArIDFdID0gaTE7XG4gICAgICAgIHRoaXMuX3RyaWFuZ2xlc1t0ICsgMl0gPSBpMjtcblxuICAgICAgICB0aGlzLl9saW5rKHQsIGEpO1xuICAgICAgICB0aGlzLl9saW5rKHQgKyAxLCBiKTtcbiAgICAgICAgdGhpcy5fbGluayh0ICsgMiwgYyk7XG5cbiAgICAgICAgdGhpcy50cmlhbmdsZXNMZW4gKz0gMztcblxuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG59XG5cbi8vIG1vbm90b25pY2FsbHkgaW5jcmVhc2VzIHdpdGggcmVhbCBhbmdsZSwgYnV0IGRvZXNuJ3QgbmVlZCBleHBlbnNpdmUgdHJpZ29ub21ldHJ5XG5mdW5jdGlvbiBwc2V1ZG9BbmdsZShkeCwgZHkpIHtcbiAgICBjb25zdCBwID0gZHggLyAoTWF0aC5hYnMoZHgpICsgTWF0aC5hYnMoZHkpKTtcbiAgICByZXR1cm4gKGR5ID4gMCA/IDMgLSBwIDogMSArIHApIC8gNDsgLy8gWzAuLjFdXG59XG5cbmZ1bmN0aW9uIGRpc3QoYXgsIGF5LCBieCwgYnkpIHtcbiAgICBjb25zdCBkeCA9IGF4IC0gYng7XG4gICAgY29uc3QgZHkgPSBheSAtIGJ5O1xuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cblxuZnVuY3Rpb24gaW5DaXJjbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgY29uc3QgZHggPSBheCAtIHB4O1xuICAgIGNvbnN0IGR5ID0gYXkgLSBweTtcbiAgICBjb25zdCBleCA9IGJ4IC0gcHg7XG4gICAgY29uc3QgZXkgPSBieSAtIHB5O1xuICAgIGNvbnN0IGZ4ID0gY3ggLSBweDtcbiAgICBjb25zdCBmeSA9IGN5IC0gcHk7XG5cbiAgICBjb25zdCBhcCA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgIGNvbnN0IGJwID0gZXggKiBleCArIGV5ICogZXk7XG4gICAgY29uc3QgY3AgPSBmeCAqIGZ4ICsgZnkgKiBmeTtcblxuICAgIHJldHVybiBkeCAqIChleSAqIGNwIC0gYnAgKiBmeSkgLVxuICAgICAgICAgICBkeSAqIChleCAqIGNwIC0gYnAgKiBmeCkgK1xuICAgICAgICAgICBhcCAqIChleCAqIGZ5IC0gZXkgKiBmeCkgPCAwO1xufVxuXG5mdW5jdGlvbiBjaXJjdW1yYWRpdXMoYXgsIGF5LCBieCwgYnksIGN4LCBjeSkge1xuICAgIGNvbnN0IGR4ID0gYnggLSBheDtcbiAgICBjb25zdCBkeSA9IGJ5IC0gYXk7XG4gICAgY29uc3QgZXggPSBjeCAtIGF4O1xuICAgIGNvbnN0IGV5ID0gY3kgLSBheTtcblxuICAgIGNvbnN0IGJsID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgY29uc3QgY2wgPSBleCAqIGV4ICsgZXkgKiBleTtcbiAgICBjb25zdCBkID0gMC41IC8gKGR4ICogZXkgLSBkeSAqIGV4KTtcblxuICAgIGNvbnN0IHggPSAoZXkgKiBibCAtIGR5ICogY2wpICogZDtcbiAgICBjb25zdCB5ID0gKGR4ICogY2wgLSBleCAqIGJsKSAqIGQ7XG5cbiAgICByZXR1cm4geCAqIHggKyB5ICogeTtcbn1cblxuZnVuY3Rpb24gY2lyY3VtY2VudGVyKGF4LCBheSwgYngsIGJ5LCBjeCwgY3kpIHtcbiAgICBjb25zdCBkeCA9IGJ4IC0gYXg7XG4gICAgY29uc3QgZHkgPSBieSAtIGF5O1xuICAgIGNvbnN0IGV4ID0gY3ggLSBheDtcbiAgICBjb25zdCBleSA9IGN5IC0gYXk7XG5cbiAgICBjb25zdCBibCA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgIGNvbnN0IGNsID0gZXggKiBleCArIGV5ICogZXk7XG4gICAgY29uc3QgZCA9IDAuNSAvIChkeCAqIGV5IC0gZHkgKiBleCk7XG5cbiAgICBjb25zdCB4ID0gYXggKyAoZXkgKiBibCAtIGR5ICogY2wpICogZDtcbiAgICBjb25zdCB5ID0gYXkgKyAoZHggKiBjbCAtIGV4ICogYmwpICogZDtcblxuICAgIHJldHVybiB7eCwgeX07XG59XG5cbmZ1bmN0aW9uIHF1aWNrc29ydChpZHMsIGRpc3RzLCBsZWZ0LCByaWdodCkge1xuICAgIGlmIChyaWdodCAtIGxlZnQgPD0gMjApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxlZnQgKyAxOyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBpZHNbaV07XG4gICAgICAgICAgICBjb25zdCB0ZW1wRGlzdCA9IGRpc3RzW3RlbXBdO1xuICAgICAgICAgICAgbGV0IGogPSBpIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChqID49IGxlZnQgJiYgZGlzdHNbaWRzW2pdXSA+IHRlbXBEaXN0KSBpZHNbaiArIDFdID0gaWRzW2otLV07XG4gICAgICAgICAgICBpZHNbaiArIDFdID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lZGlhbiA9IChsZWZ0ICsgcmlnaHQpID4+IDE7XG4gICAgICAgIGxldCBpID0gbGVmdCArIDE7XG4gICAgICAgIGxldCBqID0gcmlnaHQ7XG4gICAgICAgIHN3YXAoaWRzLCBtZWRpYW4sIGkpO1xuICAgICAgICBpZiAoZGlzdHNbaWRzW2xlZnRdXSA+IGRpc3RzW2lkc1tyaWdodF1dKSBzd2FwKGlkcywgbGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoZGlzdHNbaWRzW2ldXSA+IGRpc3RzW2lkc1tyaWdodF1dKSBzd2FwKGlkcywgaSwgcmlnaHQpO1xuICAgICAgICBpZiAoZGlzdHNbaWRzW2xlZnRdXSA+IGRpc3RzW2lkc1tpXV0pIHN3YXAoaWRzLCBsZWZ0LCBpKTtcblxuICAgICAgICBjb25zdCB0ZW1wID0gaWRzW2ldO1xuICAgICAgICBjb25zdCB0ZW1wRGlzdCA9IGRpc3RzW3RlbXBdO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgZG8gaSsrOyB3aGlsZSAoZGlzdHNbaWRzW2ldXSA8IHRlbXBEaXN0KTtcbiAgICAgICAgICAgIGRvIGotLTsgd2hpbGUgKGRpc3RzW2lkc1tqXV0gPiB0ZW1wRGlzdCk7XG4gICAgICAgICAgICBpZiAoaiA8IGkpIGJyZWFrO1xuICAgICAgICAgICAgc3dhcChpZHMsIGksIGopO1xuICAgICAgICB9XG4gICAgICAgIGlkc1tsZWZ0ICsgMV0gPSBpZHNbal07XG4gICAgICAgIGlkc1tqXSA9IHRlbXA7XG5cbiAgICAgICAgaWYgKHJpZ2h0IC0gaSArIDEgPj0gaiAtIGxlZnQpIHtcbiAgICAgICAgICAgIHF1aWNrc29ydChpZHMsIGRpc3RzLCBpLCByaWdodCk7XG4gICAgICAgICAgICBxdWlja3NvcnQoaWRzLCBkaXN0cywgbGVmdCwgaiAtIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVpY2tzb3J0KGlkcywgZGlzdHMsIGxlZnQsIGogLSAxKTtcbiAgICAgICAgICAgIHF1aWNrc29ydChpZHMsIGRpc3RzLCBpLCByaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyLCBpLCBqKSB7XG4gICAgY29uc3QgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRHZXRYKHApIHtcbiAgICByZXR1cm4gcFswXTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRHZXRZKHApIHtcbiAgICByZXR1cm4gcFsxXTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/delaunator/index.js\n"); /***/ }), /***/ "../../../node_modules/dequal/dist/index.mjs": /*!***************************************************!*\ !*** ../../../node_modules/dequal/dist/index.mjs ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"dequal\": () => (/* binding */ dequal)\n/* harmony export */ });\nvar has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nfunction dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlcXVhbC9kaXN0L2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGVxdWFsL2Rpc3QvaW5kZXgubWpzPzQ4ODEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGZpbmQoaXRlciwgdGFyLCBrZXkpIHtcblx0Zm9yIChrZXkgb2YgaXRlci5rZXlzKCkpIHtcblx0XHRpZiAoZGVxdWFsKGtleSwgdGFyKSkgcmV0dXJuIGtleTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVxdWFsKGZvbywgYmFyKSB7XG5cdHZhciBjdG9yLCBsZW4sIHRtcDtcblx0aWYgKGZvbyA9PT0gYmFyKSByZXR1cm4gdHJ1ZTtcblxuXHRpZiAoZm9vICYmIGJhciAmJiAoY3Rvcj1mb28uY29uc3RydWN0b3IpID09PSBiYXIuY29uc3RydWN0b3IpIHtcblx0XHRpZiAoY3RvciA9PT0gRGF0ZSkgcmV0dXJuIGZvby5nZXRUaW1lKCkgPT09IGJhci5nZXRUaW1lKCk7XG5cdFx0aWYgKGN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGZvby50b1N0cmluZygpID09PSBiYXIudG9TdHJpbmcoKTtcblxuXHRcdGlmIChjdG9yID09PSBBcnJheSkge1xuXHRcdFx0aWYgKChsZW49Zm9vLmxlbmd0aCkgPT09IGJhci5sZW5ndGgpIHtcblx0XHRcdFx0d2hpbGUgKGxlbi0tICYmIGRlcXVhbChmb29bbGVuXSwgYmFyW2xlbl0pKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsZW4gPT09IC0xO1xuXHRcdH1cblxuXHRcdGlmIChjdG9yID09PSBTZXQpIHtcblx0XHRcdGlmIChmb28uc2l6ZSAhPT0gYmFyLnNpemUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZW4gb2YgZm9vKSB7XG5cdFx0XHRcdHRtcCA9IGxlbjtcblx0XHRcdFx0aWYgKHRtcCAmJiB0eXBlb2YgdG1wID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRtcCA9IGZpbmQoYmFyLCB0bXApO1xuXHRcdFx0XHRcdGlmICghdG1wKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFiYXIuaGFzKHRtcCkpIHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjdG9yID09PSBNYXApIHtcblx0XHRcdGlmIChmb28uc2l6ZSAhPT0gYmFyLnNpemUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZW4gb2YgZm9vKSB7XG5cdFx0XHRcdHRtcCA9IGxlblswXTtcblx0XHRcdFx0aWYgKHRtcCAmJiB0eXBlb2YgdG1wID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRtcCA9IGZpbmQoYmFyLCB0bXApO1xuXHRcdFx0XHRcdGlmICghdG1wKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFkZXF1YWwobGVuWzFdLCBiYXIuZ2V0KHRtcCkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcblx0XHRcdGZvbyA9IG5ldyBVaW50OEFycmF5KGZvbyk7XG5cdFx0XHRiYXIgPSBuZXcgVWludDhBcnJheShiYXIpO1xuXHRcdH0gZWxzZSBpZiAoY3RvciA9PT0gRGF0YVZpZXcpIHtcblx0XHRcdGlmICgobGVuPWZvby5ieXRlTGVuZ3RoKSA9PT0gYmFyLmJ5dGVMZW5ndGgpIHtcblx0XHRcdFx0d2hpbGUgKGxlbi0tICYmIGZvby5nZXRJbnQ4KGxlbikgPT09IGJhci5nZXRJbnQ4KGxlbikpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxlbiA9PT0gLTE7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5QnVmZmVyLmlzVmlldyhmb28pKSB7XG5cdFx0XHRpZiAoKGxlbj1mb28uYnl0ZUxlbmd0aCkgPT09IGJhci5ieXRlTGVuZ3RoKSB7XG5cdFx0XHRcdHdoaWxlIChsZW4tLSAmJiBmb29bbGVuXSA9PT0gYmFyW2xlbl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxlbiA9PT0gLTE7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdG9yIHx8IHR5cGVvZiBmb28gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRsZW4gPSAwO1xuXHRcdFx0Zm9yIChjdG9yIGluIGZvbykge1xuXHRcdFx0XHRpZiAoaGFzLmNhbGwoZm9vLCBjdG9yKSAmJiArK2xlbiAmJiAhaGFzLmNhbGwoYmFyLCBjdG9yKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZiAoIShjdG9yIGluIGJhcikgfHwgIWRlcXVhbChmb29bY3Rvcl0sIGJhcltjdG9yXSkpIHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhiYXIpLmxlbmd0aCA9PT0gbGVuO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmb28gIT09IGZvbyAmJiBiYXIgIT09IGJhcjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/dequal/dist/index.mjs\n"); /***/ }), /***/ "../../../node_modules/diff/lib/index.mjs": /*!************************************************!*\ !*** ../../../node_modules/diff/lib/index.mjs ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Diff\": () => (/* binding */ Diff),\n/* harmony export */ \"applyPatch\": () => (/* binding */ applyPatch),\n/* harmony export */ \"applyPatches\": () => (/* binding */ applyPatches),\n/* harmony export */ \"canonicalize\": () => (/* binding */ canonicalize),\n/* harmony export */ \"convertChangesToDMP\": () => (/* binding */ convertChangesToDMP),\n/* harmony export */ \"convertChangesToXML\": () => (/* binding */ convertChangesToXML),\n/* harmony export */ \"createPatch\": () => (/* binding */ createPatch),\n/* harmony export */ \"createTwoFilesPatch\": () => (/* binding */ createTwoFilesPatch),\n/* harmony export */ \"diffArrays\": () => (/* binding */ diffArrays),\n/* harmony export */ \"diffChars\": () => (/* binding */ diffChars),\n/* harmony export */ \"diffCss\": () => (/* binding */ diffCss),\n/* harmony export */ \"diffJson\": () => (/* binding */ diffJson),\n/* harmony export */ \"diffLines\": () => (/* binding */ diffLines),\n/* harmony export */ \"diffSentences\": () => (/* binding */ diffSentences),\n/* harmony export */ \"diffTrimmedLines\": () => (/* binding */ diffTrimmedLines),\n/* harmony export */ \"diffWords\": () => (/* binding */ diffWords),\n/* harmony export */ \"diffWordsWithSpace\": () => (/* binding */ diffWordsWithSpace),\n/* harmony export */ \"merge\": () => (/* binding */ merge),\n/* harmony export */ \"parsePatch\": () => (/* binding */ parsePatch),\n/* harmony export */ \"structuredPatch\": () => (/* binding */ structuredPatch)\n/* harmony export */ });\nfunction Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n this.options = options;\n var self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function () {\n callback(undefined, value);\n }, 0);\n return true;\n } else {\n return value;\n }\n } // Allow subclasses to massage the input prior to running\n\n\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n\n if (options.maxEditLength) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{\n value: this.join(newString),\n count: newString.length\n }]);\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath = void 0;\n\n var addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n\n\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n }\n },\n pushComponent: function pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n equals: function equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return value.split('');\n },\n join: function join(chars) {\n return chars.join('');\n }\n};\n\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n\n if (componentPos && components[componentPos - 1].added) {\n var tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n } // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n\n\n var lastComponent = components[componentLen - 1];\n\n if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n\n return defaults;\n}\n\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\n\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new Diff();\n\nwordDiff.equals = function (left, right) {\n if (this.options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n\n return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\n\nwordDiff.tokenize = function (value) {\n // All whitespace symbols except newline group into one token, each newline - in separate token\n var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n for (var i = 0; i < tokens.length - 1; i++) {\n // If we have an empty string in the next field and we have only word chars before and after, merge\n if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n tokens[i] += tokens[i + 2];\n tokens.splice(i + 1, 2);\n i--;\n }\n }\n\n return tokens;\n};\n\nfunction diffWords(oldStr, newStr, options) {\n options = generateOptions(options, {\n ignoreWhitespace: true\n });\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordDiff.diff(oldStr, newStr, options);\n}\n\nvar lineDiff = new Diff();\n\nlineDiff.tokenize = function (value) {\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n } // Merge the content and line separators into single tokens\n\n\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n\n if (i % 2 && !this.options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n if (this.options.ignoreWhitespace) {\n line = line.trim();\n }\n\n retLines.push(line);\n }\n }\n\n return retLines;\n};\n\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\n\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\n\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\n\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\n\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\n\njsonDiff.castInput = function (value) {\n var _this$options = this.options,\n undefinedReplacement = _this$options.undefinedReplacement,\n _this$options$stringi = _this$options.stringifyReplacer,\n stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _this$options$stringi;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\n\njsonDiff.equals = function (left, right) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n};\n\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n} // This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\n\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n\n if (replacer) {\n obj = replacer(key, obj);\n }\n\n var i;\n\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n\n var canonicalizedObj;\n\n if ('[object Array]' === objectPrototypeToString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n\n var sortedKeys = [],\n _key;\n\n for (_key in obj) {\n /* istanbul ignore else */\n if (obj.hasOwnProperty(_key)) {\n sortedKeys.push(_key);\n }\n }\n\n sortedKeys.sort();\n\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\n\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\n\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\n\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction parsePatch(uniDiff) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n list = [],\n i = 0;\n\n function parseIndex() {\n var index = {};\n list.push(index); // Parse diff metadata\n\n while (i < diffstr.length) {\n var line = diffstr[i]; // File header found, end parsing diff metadata\n\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n } // Diff index\n\n\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n if (header) {\n index.index = header[1];\n }\n\n i++;\n } // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n\n\n parseFileHeader(index);\n parseFileHeader(index); // Parse hunks\n\n index.hunks = [];\n\n while (i < diffstr.length) {\n var _line = diffstr[i];\n\n if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line && options.strict) {\n // Ignore unexpected content unless in strict mode\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n } // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n\n\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n } // Parses a hunk\n // This assumes that we are at the start of a hunk.\n\n\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: [],\n linedelimiters: []\n }; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n\n var addCount = 0,\n removeCount = 0;\n\n for (; i < diffstr.length; i++) {\n // Lines starting with '---' could be mistaken for the \"remove line\" operation\n // But they could be the header for the next file. Therefore prune such cases out.\n if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n break;\n }\n\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n break;\n }\n } // Handle the empty block count case\n\n\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n } // Perform optional sanity checking\n\n\n if (options.strict) {\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n }\n\n return hunk;\n }\n\n while (i < diffstr.length) {\n parseIndex();\n }\n\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n } // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n\n\n if (start + localOffset <= maxLine) {\n return localOffset;\n }\n\n forwardExhausted = true;\n }\n\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n } // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n\n\n if (minLine <= start - localOffset) {\n return -localOffset++;\n }\n\n backwardExhausted = true;\n return iterator();\n } // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n\n uniDiff = uniDiff[0];\n } // Apply the diff to the input\n\n\n var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n errorCount = 0,\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0,\n offset = 0,\n removeEOFNL,\n addEOFNL;\n /**\n * Checks if the hunk exactly fits on the provided location\n */\n\n\n function hunkFits(hunk, toPos) {\n for (var j = 0; j < hunk.lines.length; j++) {\n var line = hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line;\n\n if (operation === ' ' || operation === '-') {\n // Context sanity check\n if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n errorCount++;\n\n if (errorCount > fuzzFactor) {\n return false;\n }\n }\n\n toPos++;\n }\n }\n\n return true;\n } // Search best fit offsets for each hunk based on the previous ones\n\n\n for (var i = 0; i < hunks.length; i++) {\n var hunk = hunks[i],\n maxLine = lines.length - hunk.oldLines,\n localOffset = 0,\n toPos = offset + hunk.oldStart - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n\n for (; localOffset !== undefined; localOffset = iterator()) {\n if (hunkFits(hunk, toPos + localOffset)) {\n hunk.offset = offset += localOffset;\n break;\n }\n }\n\n if (localOffset === undefined) {\n return false;\n } // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n\n\n minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n } // Apply patch hunks\n\n\n var diffOffset = 0;\n\n for (var _i = 0; _i < hunks.length; _i++) {\n var _hunk = hunks[_i],\n _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n diffOffset += _hunk.newLines - _hunk.oldLines;\n\n for (var j = 0; j < _hunk.lines.length; j++) {\n var line = _hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line,\n delimiter = _hunk.linedelimiters[j];\n\n if (operation === ' ') {\n _toPos++;\n } else if (operation === '-') {\n lines.splice(_toPos, 1);\n delimiters.splice(_toPos, 1);\n /* istanbul ignore else */\n } else if (operation === '+') {\n lines.splice(_toPos, 0, content);\n delimiters.splice(_toPos, 0, delimiter);\n _toPos++;\n } else if (operation === '\\\\') {\n var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n if (previousOperation === '+') {\n removeEOFNL = true;\n } else if (previousOperation === '-') {\n addEOFNL = true;\n }\n }\n }\n } // Handle EOFNL insertion/removal\n\n\n if (removeEOFNL) {\n while (!lines[lines.length - 1]) {\n lines.pop();\n delimiters.pop();\n }\n } else if (addEOFNL) {\n lines.push('');\n delimiters.push('\\n');\n }\n\n for (var _k = 0; _k < lines.length - 1; _k++) {\n lines[_k] = lines[_k] + delimiters[_k];\n }\n\n return lines.join('');\n} // Wrapper that supports multiple file patches via callbacks.\n\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n var currentIndex = 0;\n\n function processIndex() {\n var index = uniDiff[currentIndex++];\n\n if (!index) {\n return options.complete();\n }\n\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n\n processIndex();\n });\n });\n }\n\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n\n var diff = diffLines(oldStr, newStr, options);\n\n if (!diff) {\n return;\n }\n\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n\n var _loop = function _loop(i) {\n var current = diff[i],\n lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n current.lines = lines;\n\n if (current.added || current.removed) {\n var _curRange;\n\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n } // Output our changes\n\n\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n }))); // Track the updated file position\n\n\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n\n var hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n\n if (i >= diff.length - 2 && lines.length <= options.context) {\n // EOF is inside this hunk\n var oldEOFNewline = /\\n$/.test(oldStr);\n var newEOFNewline = /\\n$/.test(newStr);\n var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n // special case: old has no eol and no trailing context; no-nl can end up before adds\n // however, if the old file is empty, do not output the no-nl line\n curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n }\n\n if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n curRange.push('\\\\ No newline at end of file');\n }\n }\n\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n\n for (var i = 0; i < diff.length; i++) {\n _loop(i);\n }\n\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n}\nfunction formatPatch(diff) {\n var ret = [];\n\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n\n return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n\n return ret;\n}\n\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n\n return structuredPatch(undefined, undefined, base, param);\n }\n\n return param;\n}\n\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\n\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\n\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\n\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\n\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n }; // Handle any leading content\n\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n } // Now push anything that may be remaining\n\n\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\n\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n\n return;\n }\n\n conflict(hunk, myChanges, theirChanges);\n}\n\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n\n if (theirChanges.merged) {\n var _hunk$lines6;\n\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\n\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\n\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\n\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\n\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n\n while (state.index < state.lines.length) {\n var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n\n return ret;\n}\n\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n if (match[0] === '+') {\n break;\n }\n\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++; // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n\n if (change[0] === '+') {\n conflicted = true;\n\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n\n if (conflicted) {\n return changes;\n }\n\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n\n return {\n merged: merged,\n changes: changes\n };\n}\n\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\n\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n\n state.index += delta;\n return true;\n}\n\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n\n ret.push([operation, change.value]);\n }\n\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n\n ret.push(escapeHTML(change.value));\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n }\n\n return ret.join('');\n}\n\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(//g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RpZmYvbGliL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTs7O0FBR047QUFDQSwrQ0FBK0MsNEJBQTRCO0FBQzNFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDViw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQSxvRkFBb0Y7O0FBRXBGO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGtCQUFrQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE1BQU07QUFDTjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0Esa0JBQWtCLFdBQVc7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixvQkFBb0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixvQkFBb0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QiwyQkFBMkI7QUFDM0IsMkJBQTJCO0FBQzNCLDZCQUE2QjtBQUM3QjtBQUNBOztBQUU2UiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGlmZi9saWIvaW5kZXgubWpzPzUxNTgiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gRGlmZigpIHt9XG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZjogZnVuY3Rpb24gZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuXG5cbiAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG4gICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZykpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcbiAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgZWRpdExlbmd0aCA9IDE7XG4gICAgdmFyIG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG5cbiAgICBpZiAob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgbmV3UG9zOiAtMSxcbiAgICAgIGNvbXBvbmVudHM6IFtdXG4gICAgfV07IC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG5cbiAgICB2YXIgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG5cbiAgICBpZiAoYmVzdFBhdGhbMF0ubmV3UG9zICsgMSA+PSBuZXdMZW4gJiYgb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcbiAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuICAgICAgcmV0dXJuIGRvbmUoW3tcbiAgICAgICAgdmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLFxuICAgICAgICBjb3VudDogbmV3U3RyaW5nLmxlbmd0aFxuICAgICAgfV0pO1xuICAgIH0gLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuXG5cbiAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcbiAgICAgIGZvciAodmFyIGRpYWdvbmFsUGF0aCA9IC0xICogZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoIDw9IGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCArPSAyKSB7XG4gICAgICAgIHZhciBiYXNlUGF0aCA9IHZvaWQgMDtcblxuICAgICAgICB2YXIgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgX29sZFBvcyA9IChyZW1vdmVQYXRoID8gcmVtb3ZlUGF0aC5uZXdQb3MgOiAwKSAtIGRpYWdvbmFsUGF0aDtcblxuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gX29sZFBvcyAmJiBfb2xkUG9zIDwgb2xkTGVuO1xuXG4gICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHBhdGggaXMgYSB0ZXJtaW5hbCB0aGVuIHBydW5lXG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuXG5cbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpIHtcbiAgICAgICAgICBiYXNlUGF0aCA9IGNsb25lUGF0aChyZW1vdmVQYXRoKTtcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlUGF0aCA9IGFkZFBhdGg7IC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG5cbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9vbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpOyAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuXG4gICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBfb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcbiAgICAgICAgICByZXR1cm4gZG9uZShidWlsZFZhbHVlcyhzZWxmLCBiYXNlUGF0aC5jb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgc2VsZi51c2VMb25nZXN0VG9rZW4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgdHJhY2sgdGhpcyBwYXRoIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBhbmQgY29udGludWUuXG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkaXRMZW5ndGgrKztcbiAgICB9IC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLCBvciB1bnRpbCB0aGUgZWRpdCBsZW5ndGggZXhjZWVkcyBvcHRpb25zLm1heEVkaXRMZW5ndGggKGlmIGdpdmVuKSxcbiAgICAvLyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cblxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAoZnVuY3Rpb24gZXhlYygpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICB2YXIgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcblxuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcHVzaENvbXBvbmVudDogZnVuY3Rpb24gcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIHZhciBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3QgJiYgbGFzdC5hZGRlZCA9PT0gYWRkZWQgJiYgbGFzdC5yZW1vdmVkID09PSByZW1vdmVkKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIGhlcmUgYXMgdGhlIGNvbXBvbmVudCBjbG9uZSBvcGVyYXRpb24gaXMganVzdFxuICAgICAgLy8gYXMgc2hhbGxvdyBhcnJheSBjbG9uZVxuICAgICAgY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdID0ge1xuICAgICAgICBjb3VudDogbGFzdC5jb3VudCArIDEsXG4gICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wdXNoKHtcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuICAgICAgICBjb21tb25Db3VudCA9IDA7XG5cbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICBjb3VudDogY29tbW9uQ291bnRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlICYmIGxlZnQudG9Mb3dlckNhc2UoKSA9PT0gcmlnaHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUVtcHR5OiBmdW5jdGlvbiByZW1vdmVFbXB0eShhcnJheSkge1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0OiBmdW5jdGlvbiBjYXN0SW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIHRva2VuaXplOiBmdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgdmFyIGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblxuICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkICYmIHVzZUxvbmdlc3RUb2tlbikge1xuICAgICAgICB2YXIgdmFsdWUgPSBuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgfVxuXG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50OyAvLyBDb21tb24gY2FzZVxuXG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50OyAvLyBSZXZlcnNlIGFkZCBhbmQgcmVtb3ZlIHNvIHJlbW92ZXMgYXJlIG91dHB1dCBmaXJzdCB0byBtYXRjaCBjb21tb24gY29udmVudGlvblxuICAgICAgLy8gVGhlIGRpZmZpbmcgYWxnb3JpdGhtIGlzIHRpZWQgdG8gYWRkIHRoZW4gcmVtb3ZlIG91dHB1dCBhbmQgdGhpcyBpcyB0aGUgc2ltcGxlc3RcbiAgICAgIC8vIHJvdXRlIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLlxuXG4gICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcbiAgICAgICAgdmFyIHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU3BlY2lhbCBjYXNlIGhhbmRsZSBmb3Igd2hlbiBvbmUgdGVybWluYWwgaXMgaWdub3JlZCAoaS5lLiB3aGl0ZXNwYWNlKS5cbiAgLy8gRm9yIHRoaXMgY2FzZSB3ZSBtZXJnZSB0aGUgdGVybWluYWwgaW50byB0aGUgcHJpb3Igc3RyaW5nIGFuZCBkcm9wIHRoZSBjaGFuZ2UuXG4gIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuXG5cbiAgdmFyIGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuXG4gIGlmIChjb21wb25lbnRMZW4gPiAxICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJyAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpICYmIGRpZmYuZXF1YWxzKCcnLCBsYXN0Q29tcG9uZW50LnZhbHVlKSkge1xuICAgIGNvbXBvbmVudHNbY29tcG9uZW50TGVuIC0gMl0udmFsdWUgKz0gbGFzdENvbXBvbmVudC52YWx1ZTtcbiAgICBjb21wb25lbnRzLnBvcCgpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIGNsb25lUGF0aChwYXRoKSB7XG4gIHJldHVybiB7XG4gICAgbmV3UG9zOiBwYXRoLm5ld1BvcyxcbiAgICBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMClcbiAgfTtcbn1cblxudmFyIGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZnVuY3Rpb24gZGlmZkNoYXJzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjaGFyYWN0ZXJEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRzO1xufVxuXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5cbnZhciBleHRlbmRlZFdvcmRDaGFycyA9IC9eW0EtWmEtelxceEMwLVxcdTAyQzZcXHUwMkM4LVxcdTAyRDdcXHUwMkRFLVxcdTAyRkZcXHUxRTAwLVxcdTFFRkZdKyQvO1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xudmFyIHdvcmREaWZmID0gbmV3IERpZmYoKTtcblxud29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlICYmICFyZVdoaXRlc3BhY2UudGVzdChsZWZ0KSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QocmlnaHQpO1xufTtcblxud29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KC8oW15cXFNcXHJcXG5dK3xbKClbXFxde30nXCJcXHJcXG5dfFxcYikvKTsgLy8gSm9pbiB0aGUgYm91bmRhcnkgc3BsaXRzIHRoYXQgd2UgZG8gbm90IGNvbnNpZGVyIHRvIGJlIGJvdW5kYXJpZXMuIFRoaXMgaXMgcHJpbWFyaWx5IHRoZSBleHRlbmRlZCBMYXRpbiBjaGFyYWN0ZXIgc2V0LlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2ldKSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpICsgMl0pKSB7XG4gICAgICB0b2tlbnNbaV0gKz0gdG9rZW5zW2kgKyAyXTtcbiAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDIpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59O1xuXG5mdW5jdGlvbiBkaWZmV29yZHMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhvcHRpb25zLCB7XG4gICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxudmFyIGxpbmVEaWZmID0gbmV3IERpZmYoKTtcblxubGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHJldExpbmVzID0gW10sXG4gICAgICBsaW5lc0FuZE5ld2xpbmVzID0gdmFsdWUuc3BsaXQoLyhcXG58XFxyXFxuKS8pOyAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcblxuICBpZiAoIWxpbmVzQW5kTmV3bGluZXNbbGluZXNBbmROZXdsaW5lcy5sZW5ndGggLSAxXSkge1xuICAgIGxpbmVzQW5kTmV3bGluZXMucG9wKCk7XG4gIH0gLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmZ1bmN0aW9uIGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGRpZmZUcmltbWVkTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gIHZhciBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKGNhbGxiYWNrLCB7XG4gICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuXG52YXIgc2VudGVuY2VEaWZmID0gbmV3IERpZmYoKTtcblxuc2VudGVuY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFxcUy4rP1suIT9dKSg/PVxccyt8JCkvKTtcbn07XG5cbmZ1bmN0aW9uIGRpZmZTZW50ZW5jZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzZW50ZW5jZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG52YXIgY3NzRGlmZiA9IG5ldyBEaWZmKCk7XG5cbmNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oW3t9OjssXXxcXHMrKS8pO1xufTtcblxuZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbnZhciBvYmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIganNvbkRpZmYgPSBuZXcgRGlmZigpOyAvLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuLy8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5cbmpzb25EaWZmLnVzZUxvbmdlc3RUb2tlbiA9IHRydWU7XG5qc29uRGlmZi50b2tlbml6ZSA9IGxpbmVEaWZmLnRva2VuaXplO1xuXG5qc29uRGlmZi5jYXN0SW5wdXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICB1bmRlZmluZWRSZXBsYWNlbWVudCA9IF90aGlzJG9wdGlvbnMudW5kZWZpbmVkUmVwbGFjZW1lbnQsXG4gICAgICBfdGhpcyRvcHRpb25zJHN0cmluZ2kgPSBfdGhpcyRvcHRpb25zLnN0cmluZ2lmeVJlcGxhY2VyLFxuICAgICAgc3RyaW5naWZ5UmVwbGFjZXIgPSBfdGhpcyRvcHRpb25zJHN0cmluZ2kgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZFJlcGxhY2VtZW50IDogdjtcbiAgfSA6IF90aGlzJG9wdGlvbnMkc3RyaW5naTtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KGNhbm9uaWNhbGl6ZSh2YWx1ZSwgbnVsbCwgbnVsbCwgc3RyaW5naWZ5UmVwbGFjZXIpLCBzdHJpbmdpZnlSZXBsYWNlciwgJyAgJyk7XG59O1xuXG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscy5jYWxsKGpzb25EaWZmLCBsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSk7XG59O1xuXG5mdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykge1xuICByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7XG59IC8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgXCJzdGFja1wiIG9mIGl0ZW1zIGJlaW5nIHByb2Nlc3NlZC4gQWNjZXB0cyBhbiBvcHRpb25hbCByZXBsYWNlclxuXG5mdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSkge1xuICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuICByZXBsYWNlbWVudFN0YWNrID0gcmVwbGFjZW1lbnRTdGFjayB8fCBbXTtcblxuICBpZiAocmVwbGFjZXIpIHtcbiAgICBvYmogPSByZXBsYWNlcihrZXksIG9iaik7XG4gIH1cblxuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoc3RhY2tbaV0gPT09IG9iaikge1xuICAgICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhY2tbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNhbm9uaWNhbGl6ZWRPYmo7XG5cbiAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqKSkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0gbmV3IEFycmF5KG9iai5sZW5ndGgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSk7XG4gICAgfVxuXG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmIChfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXG4gICAgdmFyIHNvcnRlZEtleXMgPSBbXSxcbiAgICAgICAgX2tleTtcblxuICAgIGZvciAoX2tleSBpbiBvYmopIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChfa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBfa2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbX2tleV0gPSBjYW5vbmljYWxpemUob2JqW19rZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIF9rZXkpO1xuICAgIH1cblxuICAgIHN0YWNrLnBvcCgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG9iajtcbiAgfVxuXG4gIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xufVxuXG52YXIgYXJyYXlEaWZmID0gbmV3IERpZmYoKTtcblxuYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zbGljZSgpO1xufTtcblxuYXJyYXlEaWZmLmpvaW4gPSBhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBkaWZmc3RyID0gdW5pRGlmZi5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSB1bmlEaWZmLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgIGxpc3QgPSBbXSxcbiAgICAgIGkgPSAwO1xuXG4gIGZ1bmN0aW9uIHBhcnNlSW5kZXgoKSB7XG4gICAgdmFyIGluZGV4ID0ge307XG4gICAgbGlzdC5wdXNoKGluZGV4KTsgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuXG4gICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgdmFyIGxpbmUgPSBkaWZmc3RyW2ldOyAvLyBGaWxlIGhlYWRlciBmb3VuZCwgZW5kIHBhcnNpbmcgZGlmZiBtZXRhZGF0YVxuXG4gICAgICBpZiAoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvLnRlc3QobGluZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIERpZmYgaW5kZXhcblxuXG4gICAgICB2YXIgaGVhZGVyID0gL14oPzpJbmRleDp8ZGlmZig/OiAtciBcXHcrKSspXFxzKyguKz8pXFxzKiQvLmV4ZWMobGluZSk7XG5cbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9IC8vIFBhcnNlIGZpbGUgaGVhZGVycyBpZiB0aGV5IGFyZSBkZWZpbmVkLiBVbmlmaWVkIGRpZmYgcmVxdWlyZXMgdGhlbSwgYnV0XG4gICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgaXNzdWVzIHRvIGhhdmUgYW4gaXNvbGF0ZWQgaHVuayB3aXRob3V0IGZpbGUgaGVhZGVyXG5cblxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTsgLy8gUGFyc2UgaHVua3NcblxuICAgIGluZGV4Lmh1bmtzID0gW107XG5cbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICB2YXIgX2xpbmUgPSBkaWZmc3RyW2ldO1xuXG4gICAgICBpZiAoL14oSW5kZXg6fGRpZmZ8XFwtXFwtXFwtfFxcK1xcK1xcKylcXHMvLnRlc3QoX2xpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KF9saW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAoX2xpbmUgJiYgb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgLy8gSWdub3JlIHVuZXhwZWN0ZWQgY29udGVudCB1bmxlc3MgaW4gc3RyaWN0IG1vZGVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG5cblxuICBmdW5jdGlvbiBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpIHtcbiAgICB2YXIgZmlsZUhlYWRlciA9IC9eKC0tLXxcXCtcXCtcXCspXFxzKyguKikkLy5leGVjKGRpZmZzdHJbaV0pO1xuXG4gICAgaWYgKGZpbGVIZWFkZXIpIHtcbiAgICAgIHZhciBrZXlQcmVmaXggPSBmaWxlSGVhZGVyWzFdID09PSAnLS0tJyA/ICdvbGQnIDogJ25ldyc7XG4gICAgICB2YXIgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgdmFyIGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuXG4gICAgICBpZiAoL15cIi4qXCIkLy50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIH1cblxuICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcbiAgICAgIGluZGV4W2tleVByZWZpeCArICdIZWFkZXInXSA9IChkYXRhWzFdIHx8ICcnKS50cmltKCk7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIFBhcnNlcyBhIGh1bmtcbiAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG5cblxuICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgdmFyIGNodW5rSGVhZGVySW5kZXggPSBpLFxuICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG4gICAgICAgIGNodW5rSGVhZGVyID0gY2h1bmtIZWFkZXJMaW5lLnNwbGl0KC9AQCAtKFxcZCspKD86LChcXGQrKSk/IFxcKyhcXGQrKSg/OiwoXFxkKykpPyBAQC8pO1xuICAgIHZhciBodW5rID0ge1xuICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG4gICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICBsaW5lczogW10sXG4gICAgICBsaW5lZGVsaW1pdGVyczogW11cbiAgICB9OyAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgIC8vIHRoZSBmaXJzdCBudW1iZXIgaXMgb25lIGxvd2VyIHRoYW4gb25lIHdvdWxkIGV4cGVjdC5cbiAgICAvLyBodHRwczovL3d3dy5hcnRpbWEuY29tL3dlYmxvZ3Mvdmlld3Bvc3QuanNwP3RocmVhZD0xNjQyOTNcblxuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0ICs9IDE7XG4gICAgfVxuXG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICB2YXIgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG5cbiAgICBmb3IgKDsgaSA8IGRpZmZzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG4gICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG4gICAgICBpZiAoZGlmZnN0cltpXS5pbmRleE9mKCctLS0gJykgPT09IDAgJiYgaSArIDIgPCBkaWZmc3RyLmxlbmd0aCAmJiBkaWZmc3RyW2kgKyAxXS5pbmRleE9mKCcrKysgJykgPT09IDAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIG9wZXJhdGlvbiA9IGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSBkaWZmc3RyLmxlbmd0aCAtIDEgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuICAgICAgICBodW5rLmxpbmVkZWxpbWl0ZXJzLnB1c2goZGVsaW1pdGVyc1tpXSB8fCAnXFxuJyk7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG5cblxuICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm9sZExpbmVzID0gMDtcbiAgICB9IC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG5cblxuICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuICAgICAgaWYgKGFkZENvdW50ICE9PSBodW5rLm5ld0xpbmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHVuaztcbiAgfVxuXG4gIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICBwYXJzZUluZGV4KCk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cblxuLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmZ1bmN0aW9uIGRpc3RhbmNlSXRlcmF0b3IgKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gaXRlcmF0b3IoKSB7XG4gICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoYmFja3dhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgbG9jYWxPZmZzZXQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gZmFsc2U7XG4gICAgICB9IC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG4gICAgICAvLyBhZnRlciBvZmZzZXQgbG9jYXRpb24gKG9yIGRlc2lyZWQgbG9jYXRpb24gb24gZmlyc3QgaXRlcmF0aW9uKVxuXG5cbiAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhY2t3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSB0cnVlO1xuICAgICAgfSAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuXG5cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9IC8vIFdlIHRyaWVkIHRvIGZpdCBodW5rIGJlZm9yZSB0ZXh0IGJlZ2lubmluZyBhbmQgYmV5b25kIHRleHQgbGVuZ3RoLCB0aGVuXG4gICAgLy8gaHVuayBjYW4ndCBmaXQgb24gdGhlIHRleHQuIFJldHVybiB1bmRlZmluZWRcblxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuXG5cbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHNvdXJjZS5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG4gICAgICBodW5rcyA9IHVuaURpZmYuaHVua3MsXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgZnVuY3Rpb24gKGxpbmVOdW1iZXIsIGxpbmUsIG9wZXJhdGlvbiwgcGF0Y2hDb250ZW50KSB7XG4gICAgcmV0dXJuIGxpbmUgPT09IHBhdGNoQ29udGVudDtcbiAgfSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuICAgICAgcmVtb3ZlRU9GTkwsXG4gICAgICBhZGRFT0ZOTDtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgaHVuayBleGFjdGx5IGZpdHMgb24gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnLFxuICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmU7XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAvLyBDb250ZXh0IHNhbml0eSBjaGVja1xuICAgICAgICBpZiAoIWNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG4gICAgICAgICAgZXJyb3JDb3VudCsrO1xuXG4gICAgICAgICAgaWYgKGVycm9yQ291bnQgPiBmdXp6RmFjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG9Qb3MrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcbiAgICB2YXIgaXRlcmF0b3IgPSBkaXN0YW5jZUl0ZXJhdG9yKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuICAgIGZvciAoOyBsb2NhbE9mZnNldCAhPT0gdW5kZWZpbmVkOyBsb2NhbE9mZnNldCA9IGl0ZXJhdG9yKCkpIHtcbiAgICAgIGlmIChodW5rRml0cyhodW5rLCB0b1BvcyArIGxvY2FsT2Zmc2V0KSkge1xuICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcblxuXG4gICAgbWluTGluZSA9IGh1bmsub2Zmc2V0ICsgaHVuay5vbGRTdGFydCArIGh1bmsub2xkTGluZXM7XG4gIH0gLy8gQXBwbHkgcGF0Y2ggaHVua3NcblxuXG4gIHZhciBkaWZmT2Zmc2V0ID0gMDtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaHVua3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIF9odW5rID0gaHVua3NbX2ldLFxuICAgICAgICBfdG9Qb3MgPSBfaHVuay5vbGRTdGFydCArIF9odW5rLm9mZnNldCArIGRpZmZPZmZzZXQgLSAxO1xuXG4gICAgZGlmZk9mZnNldCArPSBfaHVuay5uZXdMaW5lcyAtIF9odW5rLm9sZExpbmVzO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGxpbmUgPSBfaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnLFxuICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUsXG4gICAgICAgICAgZGVsaW1pdGVyID0gX2h1bmsubGluZWRlbGltaXRlcnNbal07XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICBfdG9Qb3MrKztcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMSk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDAsIGNvbnRlbnQpO1xuICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDAsIGRlbGltaXRlcik7XG4gICAgICAgIF90b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICB2YXIgcHJldmlvdXNPcGVyYXRpb24gPSBfaHVuay5saW5lc1tqIC0gMV0gPyBfaHVuay5saW5lc1tqIC0gMV1bMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChwcmV2aW91c09wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICBhZGRFT0ZOTCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSGFuZGxlIEVPRk5MIGluc2VydGlvbi9yZW1vdmFsXG5cblxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuXG4gIGZvciAodmFyIF9rID0gMDsgX2sgPCBsaW5lcy5sZW5ndGggLSAxOyBfaysrKSB7XG4gICAgbGluZXNbX2tdID0gbGluZXNbX2tdICsgZGVsaW1pdGVyc1tfa107XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignJyk7XG59IC8vIFdyYXBwZXIgdGhhdCBzdXBwb3J0cyBtdWx0aXBsZSBmaWxlIHBhdGNoZXMgdmlhIGNhbGxiYWNrcy5cblxuZnVuY3Rpb24gYXBwbHlQYXRjaGVzKHVuaURpZmYsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0luZGV4KCkge1xuICAgIHZhciBpbmRleCA9IHVuaURpZmZbY3VycmVudEluZGV4KytdO1xuXG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICB9XG5cbiAgICAgIHZhciB1cGRhdGVkQ29udGVudCA9IGFwcGx5UGF0Y2goZGF0YSwgaW5kZXgsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5wYXRjaGVkKGluZGV4LCB1cGRhdGVkQ29udGVudCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NJbmRleCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm9jZXNzSW5kZXgoKTtcbn1cblxuZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICB2YXIgZGlmZiA9IGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cbiAgaWYgKCFkaWZmKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGlmZi5wdXNoKHtcbiAgICB2YWx1ZTogJycsXG4gICAgbGluZXM6IFtdXG4gIH0pOyAvLyBBcHBlbmQgYW4gZW1wdHkgdmFsdWUgdG8gbWFrZSBjbGVhbnVwIGVhc2llclxuXG4gIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICByZXR1cm4gJyAnICsgZW50cnk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaHVua3MgPSBbXTtcbiAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG4gICAgICBjdXJSYW5nZSA9IFtdLFxuICAgICAgb2xkTGluZSA9IDEsXG4gICAgICBuZXdMaW5lID0gMTtcblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICBsaW5lcyA9IGN1cnJlbnQubGluZXMgfHwgY3VycmVudC52YWx1ZS5yZXBsYWNlKC9cXG4kLywgJycpLnNwbGl0KCdcXG4nKTtcbiAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG5cbiAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgIHZhciBfY3VyUmFuZ2U7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgcHJldmlvdXMgY29udGV4dCwgc3RhcnQgd2l0aCB0aGF0XG4gICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgdmFyIHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgb2xkUmFuZ2VTdGFydCA9IG9sZExpbmU7XG4gICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG5cblxuICAgICAgKF9jdXJSYW5nZSA9IGN1clJhbmdlKS5wdXNoLmFwcGx5KF9jdXJSYW5nZSwgX3RvQ29uc3VtYWJsZUFycmF5KGxpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIChjdXJyZW50LmFkZGVkID8gJysnIDogJy0nKSArIGVudHJ5O1xuICAgICAgfSkpKTsgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuXG5cbiAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcbiAgICAgIGlmIChvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgdmFyIF9jdXJSYW5nZTI7XG5cbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIChfY3VyUmFuZ2UyID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMiwgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX2N1clJhbmdlMztcblxuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIHZhciBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcblxuICAgICAgICAgIChfY3VyUmFuZ2UzID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG5cbiAgICAgICAgICB2YXIgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG4gICAgICAgICAgICBuZXdTdGFydDogbmV3UmFuZ2VTdGFydCxcbiAgICAgICAgICAgIG5ld0xpbmVzOiBuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplLFxuICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChpID49IGRpZmYubGVuZ3RoIC0gMiAmJiBsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuICAgICAgICAgICAgdmFyIG9sZEVPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChvbGRTdHIpO1xuICAgICAgICAgICAgdmFyIG5ld0VPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChuZXdTdHIpO1xuICAgICAgICAgICAgdmFyIG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcblxuICAgICAgICAgICAgaWYgKCFvbGRFT0ZOZXdsaW5lICYmIG5vTmxCZWZvcmVBZGRzICYmIG9sZFN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogb2xkIGhhcyBubyBlb2wgYW5kIG5vIHRyYWlsaW5nIGNvbnRleHQ7IG5vLW5sIGNhbiBlbmQgdXAgYmVmb3JlIGFkZHNcbiAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaWYgdGhlIG9sZCBmaWxlIGlzIGVtcHR5LCBkbyBub3Qgb3V0cHV0IHRoZSBuby1ubCBsaW5lXG4gICAgICAgICAgICAgIGN1clJhbmdlLnNwbGljZShodW5rLm9sZExpbmVzLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgY3VyUmFuZ2UucHVzaCgnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBjdXJSYW5nZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIF9sb29wKGkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsXG4gICAgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLFxuICAgIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgIGh1bmtzOiBodW5rc1xuICB9O1xufVxuZnVuY3Rpb24gZm9ybWF0UGF0Y2goZGlmZikge1xuICB2YXIgcmV0ID0gW107XG5cbiAgaWYgKGRpZmYub2xkRmlsZU5hbWUgPT0gZGlmZi5uZXdGaWxlTmFtZSkge1xuICAgIHJldC5wdXNoKCdJbmRleDogJyArIGRpZmYub2xkRmlsZU5hbWUpO1xuICB9XG5cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBodW5rID0gZGlmZi5odW5rc1tpXTsgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG5cbiAgICBpZiAoaHVuay5vbGRMaW5lcyA9PT0gMCkge1xuICAgICAgaHVuay5vbGRTdGFydCAtPSAxO1xuICAgIH1cblxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXMgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXMgKyAnIEBAJyk7XG4gICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXQuam9pbignXFxuJykgKyAnXFxuJztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFBhdGNoKHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykpO1xufVxuZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gY3JlYXRlVHdvRmlsZXNQYXRjaChmaWxlTmFtZSwgZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbn1cbmZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuICB2YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuICAgICAgb2xkTGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5vbGRMaW5lcyxcbiAgICAgIG5ld0xpbmVzID0gX2NhbGNPbGROZXdMaW5lQ291bnQubmV3TGluZXM7XG5cbiAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuICB2YXIgcmV0ID0ge307IC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cbiAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gIC8vIG1lYW5pbmcgaW4gdGhlaXIgb3duIGNvbnRleHQuXG5cbiAgaWYgKG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4KSB7XG4gICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gIH1cblxuICBpZiAobWluZS5uZXdGaWxlTmFtZSB8fCB0aGVpcnMubmV3RmlsZU5hbWUpIHtcbiAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiBvdXJzLCB1c2UgdGhlaXJzIChhbmQgb3VycyBpZiB0aGVpcnMgZG9lcyBub3QgZXhpc3QpXG4gICAgICByZXQub2xkRmlsZU5hbWUgPSB0aGVpcnMub2xkRmlsZU5hbWUgfHwgbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IHRoZWlycy5vbGRIZWFkZXIgfHwgbWluZS5vbGRIZWFkZXI7XG4gICAgICByZXQubmV3SGVhZGVyID0gdGhlaXJzLm5ld0hlYWRlciB8fCBtaW5lLm5ld0hlYWRlcjtcbiAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiB0aGVpcnMsIHVzZSBvdXJzXG4gICAgICByZXQub2xkRmlsZU5hbWUgPSBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSBtaW5lLm9sZEhlYWRlcjtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSBtaW5lLm5ld0hlYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm90aCBjaGFuZ2VkLi4uIGZpZ3VyZSBpdCBvdXRcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRGaWxlTmFtZSwgdGhlaXJzLm9sZEZpbGVOYW1lKTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkSGVhZGVyLCB0aGVpcnMub2xkSGVhZGVyKTtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3SGVhZGVyLCB0aGVpcnMubmV3SGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICByZXQuaHVua3MgPSBbXTtcbiAgdmFyIG1pbmVJbmRleCA9IDAsXG4gICAgICB0aGVpcnNJbmRleCA9IDAsXG4gICAgICBtaW5lT2Zmc2V0ID0gMCxcbiAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7XG4gICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICB9LFxuICAgICAgICB0aGVpcnNDdXJyZW50ID0gdGhlaXJzLmh1bmtzW3RoZWlyc0luZGV4XSB8fCB7XG4gICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICB9O1xuXG4gICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICBtaW5lSW5kZXgrKztcbiAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgIHZhciBtZXJnZWRIdW5rID0ge1xuICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG4gICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICBsaW5lczogW11cbiAgICAgIH07XG4gICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZUluZGV4Kys7XG4gICAgICByZXQuaHVua3MucHVzaChtZXJnZWRIdW5rKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBsb2FkUGF0Y2gocGFyYW0sIGJhc2UpIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoL15AQC9tLnRlc3QocGFyYW0pIHx8IC9eSW5kZXg6L20udGVzdChwYXJhbSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhdGNoKHBhcmFtKVswXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgYmFzZSByZWZlcmVuY2Ugb3IgcGFzcyBpbiBhIHBhdGNoJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG5mdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcbiAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgcmV0dXJuIG1pbmU7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBtaW5lOiBtaW5lLFxuICAgICAgdGhlaXJzOiB0aGVpcnNcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGh1bmtCZWZvcmUodGVzdCwgY2hlY2spIHtcbiAgcmV0dXJuIHRlc3Qub2xkU3RhcnQgPCBjaGVjay5vbGRTdGFydCAmJiB0ZXN0Lm9sZFN0YXJ0ICsgdGVzdC5vbGRMaW5lcyA8IGNoZWNrLm9sZFN0YXJ0O1xufVxuXG5mdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG4gIHJldHVybiB7XG4gICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsXG4gICAgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsXG4gICAgbmV3TGluZXM6IGh1bmsubmV3TGluZXMsXG4gICAgbGluZXM6IGh1bmsubGluZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VMaW5lcyhodW5rLCBtaW5lT2Zmc2V0LCBtaW5lTGluZXMsIHRoZWlyT2Zmc2V0LCB0aGVpckxpbmVzKSB7XG4gIC8vIFRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgY29uZmxpY3RlZCBodW5rLCBidXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBjb250ZXh0XG4gIC8vIGlzIHRoZSBvbmx5IG92ZXJsYXAgd2hlcmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtZXJnZSB0aGUgY29udGVudCBoZXJlLlxuICB2YXIgbWluZSA9IHtcbiAgICBvZmZzZXQ6IG1pbmVPZmZzZXQsXG4gICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICBpbmRleDogMFxuICB9LFxuICAgICAgdGhlaXIgPSB7XG4gICAgb2Zmc2V0OiB0aGVpck9mZnNldCxcbiAgICBsaW5lczogdGhlaXJMaW5lcyxcbiAgICBpbmRleDogMFxuICB9OyAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuXG4gIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTsgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXG4gIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcbiAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXM7XG5cbiAgICAgIC8vIE1pbmUgaW5zZXJ0ZWRcbiAgICAgIChfaHVuayRsaW5lcyA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXMsIF90b0NvbnN1bWFibGVBcnJheShjb2xsZWN0Q2hhbmdlKG1pbmUpKSk7XG4gICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICcrJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXMyO1xuXG4gICAgICAvLyBUaGVpcnMgaW5zZXJ0ZWRcbiAgICAgIChfaHVuayRsaW5lczIgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMiwgX3RvQ29uc3VtYWJsZUFycmF5KGNvbGxlY3RDaGFuZ2UodGhlaXIpKSk7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIHRoZWlyLCBtaW5lLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcbiAgICAgIGh1bmsubGluZXMucHVzaChtaW5lQ3VycmVudCk7XG4gICAgICBtaW5lLmluZGV4Kys7XG4gICAgICB0aGVpci5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfVxuICB9IC8vIE5vdyBwdXNoIGFueXRoaW5nIHRoYXQgbWF5IGJlIHJlbWFpbmluZ1xuXG5cbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcbiAgY2FsY0xpbmVDb3VudChodW5rKTtcbn1cblxuZnVuY3Rpb24gbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKSB7XG4gIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENoYW5nZSh0aGVpcik7XG5cbiAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgIGlmIChhcnJheVN0YXJ0c1dpdGgobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczM7XG5cbiAgICAgIChfaHVuayRsaW5lczMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMywgX3RvQ29uc3VtYWJsZUFycmF5KG15Q2hhbmdlcykpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChhcnJheVN0YXJ0c1dpdGgodGhlaXJDaGFuZ2VzLCBteUNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldChtaW5lLCB0aGVpckNoYW5nZXMsIHRoZWlyQ2hhbmdlcy5sZW5ndGggLSBteUNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgdmFyIF9odW5rJGxpbmVzNDtcblxuICAgICAgKF9odW5rJGxpbmVzNCA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM0LCBfdG9Db25zdW1hYmxlQXJyYXkodGhlaXJDaGFuZ2VzKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICB2YXIgX2h1bmskbGluZXM1O1xuXG4gICAgKF9odW5rJGxpbmVzNSA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM1LCBfdG9Db25zdW1hYmxlQXJyYXkobXlDaGFuZ2VzKSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIsIHN3YXApIHtcbiAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q29udGV4dCh0aGVpciwgbXlDaGFuZ2VzKTtcblxuICBpZiAodGhlaXJDaGFuZ2VzLm1lcmdlZCkge1xuICAgIHZhciBfaHVuayRsaW5lczY7XG5cbiAgICAoX2h1bmskbGluZXM2ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczYsIF90b0NvbnN1bWFibGVBcnJheSh0aGVpckNoYW5nZXMubWVyZ2VkKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgaHVuay5jb25mbGljdCA9IHRydWU7XG4gIGh1bmsubGluZXMucHVzaCh7XG4gICAgY29uZmxpY3Q6IHRydWUsXG4gICAgbWluZTogbWluZSxcbiAgICB0aGVpcnM6IHRoZWlyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRMZWFkaW5nKGh1bmssIGluc2VydCwgdGhlaXIpIHtcbiAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgaW5zZXJ0Lm9mZnNldCsrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICB2YXIgcmV0ID0gW10sXG4gICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgdmFyIGxpbmUgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF07IC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcbiAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG4gICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0KHN0YXRlLCBtYXRjaENoYW5nZXMpIHtcbiAgdmFyIGNoYW5nZXMgPSBbXSxcbiAgICAgIG1lcmdlZCA9IFtdLFxuICAgICAgbWF0Y2hJbmRleCA9IDAsXG4gICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuICAgICAgY29uZmxpY3RlZCA9IGZhbHNlO1xuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgIG1hdGNoID0gbWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdOyAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG5cbiAgICBpZiAobWF0Y2hbMF0gPT09ICcrJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29udGV4dENoYW5nZXMgPSBjb250ZXh0Q2hhbmdlcyB8fCBjaGFuZ2VbMF0gIT09ICcgJztcbiAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgbWF0Y2hJbmRleCsrOyAvLyBDb25zdW1lIGFueSBhZGRpdGlvbnMgaW4gdGhlIG90aGVyIGJsb2NrIGFzIGEgY29uZmxpY3QgdG8gYXR0ZW1wdFxuICAgIC8vIHRvIHB1bGwgaW4gdGhlIHJlbWFpbmluZyBjb250ZXh0IGFmdGVyIHRoaXNcblxuICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cbiAgICAgIHdoaWxlIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJyAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbmZsaWN0ZWQpIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgY2hhbmdlczogY2hhbmdlc1xuICB9O1xufVxuXG5mdW5jdGlvbiBhbGxSZW1vdmVzKGNoYW5nZXMpIHtcbiAgcmV0dXJuIGNoYW5nZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjaGFuZ2UpIHtcbiAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgfSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHNraXBSZW1vdmVTdXBlcnNldChzdGF0ZSwgcmVtb3ZlQ2hhbmdlcywgZGVsdGEpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7XG4gICAgdmFyIGNoYW5nZUNvbnRlbnQgPSByZW1vdmVDaGFuZ2VzW3JlbW92ZUNoYW5nZXMubGVuZ3RoIC0gZGVsdGEgKyBpXS5zdWJzdHIoMSk7XG5cbiAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lcykge1xuICB2YXIgb2xkTGluZXMgPSAwO1xuICB2YXIgbmV3TGluZXMgPSAwO1xuICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICB2YXIgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJy0nIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgb2xkTGluZXMrKztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9sZExpbmVzOiBvbGRMaW5lcyxcbiAgICBuZXdMaW5lczogbmV3TGluZXNcbiAgfTtcbn1cblxuLy8gU2VlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvd2lraS9BUElcbmZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICB2YXIgcmV0ID0gW10sXG4gICAgICBjaGFuZ2UsXG4gICAgICBvcGVyYXRpb247XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IDE7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgb3BlcmF0aW9uID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goW29wZXJhdGlvbiwgY2hhbmdlLnZhbHVlXSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvWE1MKGNoYW5nZXMpIHtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7XG4gIHZhciBuID0gcztcbiAgbiA9IG4ucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuICBuID0gbi5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbiAgcmV0dXJuIG47XG59XG5cbmV4cG9ydCB7IERpZmYsIGFwcGx5UGF0Y2gsIGFwcGx5UGF0Y2hlcywgY2Fub25pY2FsaXplLCBjb252ZXJ0Q2hhbmdlc1RvRE1QLCBjb252ZXJ0Q2hhbmdlc1RvWE1MLCBjcmVhdGVQYXRjaCwgY3JlYXRlVHdvRmlsZXNQYXRjaCwgZGlmZkFycmF5cywgZGlmZkNoYXJzLCBkaWZmQ3NzLCBkaWZmSnNvbiwgZGlmZkxpbmVzLCBkaWZmU2VudGVuY2VzLCBkaWZmVHJpbW1lZExpbmVzLCBkaWZmV29yZHMsIGRpZmZXb3Jkc1dpdGhTcGFjZSwgbWVyZ2UsIHBhcnNlUGF0Y2gsIHN0cnVjdHVyZWRQYXRjaCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/diff/lib/index.mjs\n"); /***/ }), /***/ "../../../node_modules/image-blob-reduce/dist/image-blob-reduce.esm.mjs": /*!******************************************************************************!*\ !*** ../../../node_modules/image-blob-reduce/dist/image-blob-reduce.esm.mjs ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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\n/*! image-blob-reduce 3.0.1 https://github.com/nodeca/image-blob-reduce @license MIT */\nvar assign$1 = function assign(to) {\n var from;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];\n }\n }\n\n return to;\n};\n\n\nfunction pick(from, props) {\n var to = {};\n\n props.forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];\n });\n\n return to;\n}\n\n\nfunction pick_pica_resize_options(from) {\n return pick(from, [\n 'alpha',\n 'unsharpAmount',\n 'unsharpRadius',\n 'unsharpThreshold',\n 'cancelToken'\n ]);\n}\n\n\nvar pick_1 = pick;\nvar pick_pica_resize_options_1 = pick_pica_resize_options;\n\nvar utils = {\n\tassign: assign$1,\n\tpick: pick_1,\n\tpick_pica_resize_options: pick_pica_resize_options_1\n};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/*!\n\npica\nhttps://github.com/nodeca/pica\n\n*/\n\nvar pica = createCommonjsModule(function (module, exports) {\n(function(f){{module.exports=f();}})(function(){return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof commonjsRequire&&commonjsRequire;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t);}return n[i].exports}for(var u=\"function\"==typeof commonjsRequire&&commonjsRequire,i=0;i= 0,\n wasm: __requested_features.indexOf('wasm') >= 0\n };\n Multimath.call(this, features);\n this.features = {\n js: features.js,\n wasm: features.wasm && this.has_wasm()\n };\n this.use(mm_unsharp_mask);\n this.use(mm_resize);\n}\n\ninherits(MathLib, Multimath);\n\nMathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {\n var result = this.resize(options, cache);\n\n if (options.unsharpAmount) {\n this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);\n }\n\n return result;\n};\n\nmodule.exports = MathLib;\n\n},{\"./mm_resize\":4,\"./mm_unsharp_mask\":9,\"inherits\":19,\"multimath\":20}],2:[function(_dereq_,module,exports){\n//var FIXED_FRAC_BITS = 14;\n\nfunction clampTo8(i) {\n return i < 0 ? 0 : i > 255 ? 255 : i;\n} // Convolve image in horizontal directions and transpose output. In theory,\n// transpose allow:\n//\n// - use the same convolver for both passes (this fails due different\n// types of input array and temporary buffer)\n// - making vertical pass by horisonltal lines inprove CPU cache use.\n//\n// But in real life this doesn't work :)\n//\n\n\nfunction convolveHorizontally(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Technically, convolvers are the same. But input array and temporary\n// buffer can be of different type (especially, in old browsers). So,\n// keep code in separate functions to avoid deoptimizations & speed loss.\n\n\nfunction convolveVertically(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n}\n\nmodule.exports = {\n convolveHorizontally: convolveHorizontally,\n convolveVertically: convolveVertically\n};\n\n},{}],3:[function(_dereq_,module,exports){\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAEXA2AAAGAGf39/f39/AGAHf39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMEAwABAgYGAX8AQQALB1cFEV9fd2FzbV9jYWxsX2N0b3JzAAAIY29udm9sdmUAAQpjb252b2x2ZUhWAAIMX19kc29faGFuZGxlAwAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAAK7AMDAwABC8YDAQ9/AkAgA0UNACAERQ0AA0AgDCENQQAhE0EAIQcDQCAHQQJqIQYCfyAHQQF0IAVqIgcuAQIiFEUEQEGAwAAhCEGAwAAhCUGAwAAhCkGAwAAhCyAGDAELIBIgBy4BAGohCEEAIQsgFCEHQQAhDiAGIQlBACEPQQAhEANAIAUgCUEBdGouAQAiESAAIAhBAnRqKAIAIgpBGHZsIBBqIRAgCkH/AXEgEWwgC2ohCyAKQRB2Qf8BcSARbCAPaiEPIApBCHZB/wFxIBFsIA5qIQ4gCEEBaiEIIAlBAWohCSAHQQFrIgcNAAsgC0GAQGshCCAOQYBAayEJIA9BgEBrIQogEEGAQGshCyAGIBRqCyEHIAEgDUECdGogCUEOdSIGQf8BIAZB/wFIGyIGQQAgBkEAShtBCHRBgP4DcSAKQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EQdEGAgPwHcSALQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EYdHJyIAhBDnUiBkH/ASAGQf8BSBsiBkEAIAZBAEobcjYCACADIA1qIQ0gE0EBaiITIARHDQALIAxBAWoiDCACbCESIAMgDEcNAAsLCx4AQQAgAiADIAQgBSAAEAEgAkEAIAQgBSAGIAEQAQs=';\n\n},{}],4:[function(_dereq_,module,exports){\n\nmodule.exports = {\n name: 'resize',\n fn: _dereq_('./resize'),\n wasm_fn: _dereq_('./resize_wasm'),\n wasm_src: _dereq_('./convolve_wasm_base64')\n};\n\n},{\"./convolve_wasm_base64\":3,\"./resize\":5,\"./resize_wasm\":8}],5:[function(_dereq_,module,exports){\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nvar convolveHorizontally = _dereq_('./convolve').convolveHorizontally;\n\nvar convolveVertically = _dereq_('./convolve').convolveVertically;\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nmodule.exports = function resize(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0;\n var offsetY = options.offsetY || 0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);\n var tmp = new Uint8Array(destW * srcH * 4); // To use single function we need src & tmp of the same type.\n // But src can be CanvasPixelArray, and tmp - Uint8Array. So, keep\n // vertical and horizontal passes separately to avoid deoptimization.\n\n convolveHorizontally(src, tmp, srcW, srcH, destW, filtersX);\n convolveVertically(tmp, dest, srcH, destW, destH, filtersY); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./convolve\":2,\"./resize_filter_gen\":6}],6:[function(_dereq_,module,exports){\n\nvar FILTER_INFO = _dereq_('./resize_filter_info'); // Precision of fixed FP values\n\n\nvar FIXED_FRAC_BITS = 14;\n\nfunction toFixedPoint(num) {\n return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));\n}\n\nmodule.exports = function resizeFilterGen(quality, srcSize, destSize, scale, offset) {\n var filterFunction = FILTER_INFO[quality].filter;\n var scaleInverted = 1.0 / scale;\n var scaleClamped = Math.min(1.0, scale); // For upscale\n // Filter window (averaging interval), scaled to src image\n\n var srcWindow = FILTER_INFO[quality].win / scaleClamped;\n var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;\n var leftNotEmpty, rightNotEmpty, filterShift, filterSize;\n var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);\n var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);\n var packedFilterPtr = 0;\n var slowCopy = !packedFilter.subarray || !packedFilter.set; // For each destination pixel calculate source range and built filter values\n\n for (destPixel = 0; destPixel < destSize; destPixel++) {\n // Scaling should be done relative to central pixel point\n srcPixel = (destPixel + 0.5) * scaleInverted + offset;\n srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));\n srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));\n filterElementSize = srcLast - srcFirst + 1;\n floatFilter = new Float32Array(filterElementSize);\n fxpFilter = new Int16Array(filterElementSize);\n total = 0.0; // Fill filter values for calculated range\n\n for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {\n floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);\n total += floatVal;\n floatFilter[idx] = floatVal;\n } // Normalize filter, convert to fixed point and accumulate conversion error\n\n\n filterTotal = 0;\n\n for (idx = 0; idx < floatFilter.length; idx++) {\n filterVal = floatFilter[idx] / total;\n filterTotal += filterVal;\n fxpFilter[idx] = toFixedPoint(filterVal);\n } // Compensate normalization error, to minimize brightness drift\n\n\n fxpFilter[destSize >> 1] += toFixedPoint(1.0 - filterTotal); //\n // Now pack filter to useable form\n //\n // 1. Trim heading and tailing zero values, and compensate shitf/length\n // 2. Put all to single array in this format:\n //\n // [ pos shift, data length, value1, value2, value3, ... ]\n //\n\n leftNotEmpty = 0;\n\n while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {\n leftNotEmpty++;\n }\n\n if (leftNotEmpty < fxpFilter.length) {\n rightNotEmpty = fxpFilter.length - 1;\n\n while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {\n rightNotEmpty--;\n }\n\n filterShift = srcFirst + leftNotEmpty;\n filterSize = rightNotEmpty - leftNotEmpty + 1;\n packedFilter[packedFilterPtr++] = filterShift; // shift\n\n packedFilter[packedFilterPtr++] = filterSize; // size\n\n if (!slowCopy) {\n packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);\n packedFilterPtr += filterSize;\n } else {\n // fallback for old IE < 11, without subarray/set methods\n for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {\n packedFilter[packedFilterPtr++] = fxpFilter[idx];\n }\n }\n } else {\n // zero data, write header only\n packedFilter[packedFilterPtr++] = 0; // shift\n\n packedFilter[packedFilterPtr++] = 0; // size\n }\n }\n\n return packedFilter;\n};\n\n},{\"./resize_filter_info\":7}],7:[function(_dereq_,module,exports){\n\nmodule.exports = [{\n // Nearest neibor (Box)\n win: 0.5,\n filter: function filter(x) {\n return x >= -0.5 && x < 0.5 ? 1.0 : 0.0;\n }\n}, {\n // Hamming\n win: 1.0,\n filter: function filter(x) {\n if (x <= -1.0 || x >= 1.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1.0));\n }\n}, {\n // Lanczos, win = 2\n win: 2.0,\n filter: function filter(x) {\n if (x <= -2.0 || x >= 2.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 2.0) / (xpi / 2.0);\n }\n}, {\n // Lanczos, win = 3\n win: 3.0,\n filter: function filter(x) {\n if (x <= -3.0 || x >= 3.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 3.0) / (xpi / 3.0);\n }\n}];\n\n},{}],8:[function(_dereq_,module,exports){\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nfunction asUint8Array(src) {\n return new Uint8Array(src.buffer, 0, src.byteLength);\n}\n\nvar IS_LE = true; // should not crash everything on module load in old browsers\n\ntry {\n IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;\n} catch (__) {}\n\nfunction copyInt16asLE(src, target, target_offset) {\n if (IS_LE) {\n target.set(asUint8Array(src), target_offset);\n return;\n }\n\n for (var ptr = target_offset, i = 0; i < src.length; i++) {\n var data = src[i];\n target[ptr++] = data & 0xFF;\n target[ptr++] = data >> 8 & 0xFF;\n }\n}\n\nmodule.exports = function resize_wasm(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0.0;\n var offsetY = options.offsetY || 0.0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY); // destination is 0 too.\n\n var src_offset = 0; // buffer between convolve passes\n\n var tmp_offset = this.__align(src_offset + Math.max(src.byteLength, dest.byteLength));\n\n var filtersX_offset = this.__align(tmp_offset + srcH * destW * 4);\n\n var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);\n\n var alloc_bytes = filtersY_offset + filtersY.byteLength;\n\n var instance = this.__instance('resize', alloc_bytes); //\n // Fill memory block with data to process\n //\n\n\n var mem = new Uint8Array(this.__memory.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer); // 32-bit copy is much faster in chrome\n\n var src32 = new Uint32Array(src.buffer);\n mem32.set(src32); // We should guarantee LE bytes order. Filters are not big, so\n // speed difference is not significant vs direct .set()\n\n copyInt16asLE(filtersX, mem, filtersX_offset);\n copyInt16asLE(filtersY, mem, filtersY_offset); //\n // Now call webassembly method\n // emsdk does method names with '_'\n\n var fn = instance.exports.convolveHV || instance.exports._convolveHV;\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH); //\n // Copy data back to typed array\n //\n // 32-bit copy is much faster in chrome\n\n var dest32 = new Uint32Array(dest.buffer);\n dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW)); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./resize_filter_gen\":6}],9:[function(_dereq_,module,exports){\n\nmodule.exports = {\n name: 'unsharp_mask',\n fn: _dereq_('./unsharp_mask'),\n wasm_fn: _dereq_('./unsharp_mask_wasm'),\n wasm_src: _dereq_('./unsharp_mask_wasm_base64')\n};\n\n},{\"./unsharp_mask\":10,\"./unsharp_mask_wasm\":11,\"./unsharp_mask_wasm_base64\":12}],10:[function(_dereq_,module,exports){\n\nvar glur_mono16 = _dereq_('glur/mono16');\n\nfunction hsv_v16(img, width, height) {\n var size = width * height;\n var out = new Uint16Array(size);\n var r, g, b, max;\n\n for (var i = 0; i < size; i++) {\n r = img[4 * i];\n g = img[4 * i + 1];\n b = img[4 * i + 2];\n max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;\n out[i] = max << 8;\n }\n\n return out;\n}\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n var v1, v2, vmul;\n var diff, iTimes4;\n\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var brightness = hsv_v16(img, width, height);\n var blured = new Uint16Array(brightness); // copy, because blur modify src\n\n glur_mono16(blured, width, height, radius);\n var amountFp = amount / 100 * 0x1000 + 0.5 | 0;\n var thresholdFp = threshold << 8;\n var size = width * height;\n /* eslint-disable indent */\n\n for (var i = 0; i < size; i++) {\n v1 = brightness[i];\n diff = v1 - blured[i];\n\n if (Math.abs(diff) >= thresholdFp) {\n // add unsharp mask to the brightness channel\n v2 = v1 + (amountFp * diff + 0x800 >> 12); // Both v1 and v2 are within [0.0 .. 255.0] (0000-FF00) range, never going into\n // [255.003 .. 255.996] (FF01-FFFF). This allows to round this value as (x+.5)|0\n // later without overflowing.\n\n v2 = v2 > 0xff00 ? 0xff00 : v2;\n v2 = v2 < 0x0000 ? 0x0000 : v2; // Avoid division by 0. V=0 means rgb(0,0,0), unsharp with unsharpAmount>0 cannot\n // change this value (because diff between colors gets inflated), so no need to verify correctness.\n\n v1 = v1 !== 0 ? v1 : 1; // Multiplying V in HSV model by a constant is equivalent to multiplying each component\n // in RGB by the same constant (same for HSL), see also:\n // https://beesbuzz.biz/code/16-hsv-color-transforms\n\n vmul = (v2 << 12) / v1 | 0; // Result will be in [0..255] range because:\n // - all numbers are positive\n // - r,g,b <= (v1/256)\n // - r,g,b,(v1/256),(v2/256) <= 255\n // So highest this number can get is X*255/X+0.5=255.5 which is < 256 and rounds down.\n\n iTimes4 = i * 4;\n img[iTimes4] = img[iTimes4] * vmul + 0x800 >> 12; // R\n\n img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 0x800 >> 12; // G\n\n img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 0x800 >> 12; // B\n }\n }\n};\n\n},{\"glur/mono16\":18}],11:[function(_dereq_,module,exports){\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var pixels = width * height;\n var img_bytes_cnt = pixels * 4;\n var hsv_bytes_cnt = pixels * 2;\n var blur_bytes_cnt = pixels * 2;\n var blur_line_byte_cnt = Math.max(width, height) * 4; // float32 array\n\n var blur_coeffs_byte_cnt = 8 * 4; // float32 array\n\n var img_offset = 0;\n var hsv_offset = img_bytes_cnt;\n var blur_offset = hsv_offset + hsv_bytes_cnt;\n var blur_tmp_offset = blur_offset + blur_bytes_cnt;\n var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;\n var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;\n\n var instance = this.__instance('unsharp_mask', img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {\n exp: Math.exp\n }); // 32-bit copy is much faster in chrome\n\n\n var img32 = new Uint32Array(img.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer);\n mem32.set(img32); // HSL\n\n var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;\n fn(img_offset, hsv_offset, width, height); // BLUR\n\n fn = instance.exports.blurMono16 || instance.exports._blurMono16;\n fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius); // UNSHARP\n\n fn = instance.exports.unsharp || instance.exports._unsharp;\n fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold); // 32-bit copy is much faster in chrome\n\n img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));\n};\n\n},{}],12:[function(_dereq_,module,exports){\n/* eslint-disable max-len */\n\nmodule.exports = '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';\n\n},{}],13:[function(_dereq_,module,exports){\n\nvar GC_INTERVAL = 100;\n\nfunction Pool(create, idle) {\n this.create = create;\n this.available = [];\n this.acquired = {};\n this.lastId = 1;\n this.timeoutId = 0;\n this.idle = idle || 2000;\n}\n\nPool.prototype.acquire = function () {\n var _this = this;\n\n var resource;\n\n if (this.available.length !== 0) {\n resource = this.available.pop();\n } else {\n resource = this.create();\n resource.id = this.lastId++;\n\n resource.release = function () {\n return _this.release(resource);\n };\n }\n\n this.acquired[resource.id] = resource;\n return resource;\n};\n\nPool.prototype.release = function (resource) {\n var _this2 = this;\n\n delete this.acquired[resource.id];\n resource.lastUsed = Date.now();\n this.available.push(resource);\n\n if (this.timeoutId === 0) {\n this.timeoutId = setTimeout(function () {\n return _this2.gc();\n }, GC_INTERVAL);\n }\n};\n\nPool.prototype.gc = function () {\n var _this3 = this;\n\n var now = Date.now();\n this.available = this.available.filter(function (resource) {\n if (now - resource.lastUsed > _this3.idle) {\n resource.destroy();\n return false;\n }\n\n return true;\n });\n\n if (this.available.length !== 0) {\n this.timeoutId = setTimeout(function () {\n return _this3.gc();\n }, GC_INTERVAL);\n } else {\n this.timeoutId = 0;\n }\n};\n\nmodule.exports = Pool;\n\n},{}],14:[function(_dereq_,module,exports){\n// min size = 1 can consume large amount of memory\n\nvar MIN_INNER_TILE_SIZE = 2;\n\nmodule.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {\n var scaleX = toWidth / fromWidth;\n var scaleY = toHeight / fromHeight; // derived from createRegions equation:\n // innerTileWidth = pixelFloor(srcTileSize * scaleX) - 2 * destTileBorder;\n\n var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize; // refuse to scale image multiple times by less than twice each time,\n // it could only happen because of invalid options\n\n if (minScale > 0.5) return [[toWidth, toHeight]];\n var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale)); // no additional resizes are necessary,\n // stageCount can be zero or be negative when enlarging the image\n\n if (stageCount <= 1) return [[toWidth, toHeight]];\n var result = [];\n\n for (var i = 0; i < stageCount; i++) {\n var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));\n var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));\n result.push([width, height]);\n }\n\n return result;\n};\n\n},{}],15:[function(_dereq_,module,exports){\n/*\n * pixelFloor and pixelCeil are modified versions of Math.floor and Math.ceil\n * functions which take into account floating point arithmetic errors.\n * Those errors can cause undesired increments/decrements of sizes and offsets:\n * Math.ceil(36 / (36 / 500)) = 501\n * pixelCeil(36 / (36 / 500)) = 500\n */\n\nvar PIXEL_EPSILON = 1e-5;\n\nfunction pixelFloor(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.floor(x);\n}\n\nfunction pixelCeil(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.ceil(x);\n}\n\nmodule.exports = function createRegions(options) {\n var scaleX = options.toWidth / options.width;\n var scaleY = options.toHeight / options.height;\n var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;\n var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder; // prevent infinite loop, this should never happen\n\n if (innerTileWidth < 1 || innerTileHeight < 1) {\n throw new Error('Internal error in pica: target tile width/height is too small.');\n }\n\n var x, y;\n var innerX, innerY, toTileWidth, toTileHeight;\n var tiles = [];\n var tile; // we go top-to-down instead of left-to-right to make image displayed from top to\n // doesn in the browser\n\n for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {\n for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {\n x = innerX - options.destTileBorder;\n\n if (x < 0) {\n x = 0;\n }\n\n toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;\n\n if (x + toTileWidth >= options.toWidth) {\n toTileWidth = options.toWidth - x;\n }\n\n y = innerY - options.destTileBorder;\n\n if (y < 0) {\n y = 0;\n }\n\n toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;\n\n if (y + toTileHeight >= options.toHeight) {\n toTileHeight = options.toHeight - y;\n }\n\n tile = {\n toX: x,\n toY: y,\n toWidth: toTileWidth,\n toHeight: toTileHeight,\n toInnerX: innerX,\n toInnerY: innerY,\n toInnerWidth: innerTileWidth,\n toInnerHeight: innerTileHeight,\n offsetX: x / scaleX - pixelFloor(x / scaleX),\n offsetY: y / scaleY - pixelFloor(y / scaleY),\n scaleX: scaleX,\n scaleY: scaleY,\n x: pixelFloor(x / scaleX),\n y: pixelFloor(y / scaleY),\n width: pixelCeil(toTileWidth / scaleX),\n height: pixelCeil(toTileHeight / scaleY)\n };\n tiles.push(tile);\n }\n }\n\n return tiles;\n};\n\n},{}],16:[function(_dereq_,module,exports){\n\nfunction objClass(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nmodule.exports.isCanvas = function isCanvas(element) {\n var cname = objClass(element);\n return cname === '[object HTMLCanvasElement]'\n /* browser */\n || cname === '[object OffscreenCanvas]' || cname === '[object Canvas]'\n /* node-canvas */\n ;\n};\n\nmodule.exports.isImage = function isImage(element) {\n return objClass(element) === '[object HTMLImageElement]';\n};\n\nmodule.exports.isImageBitmap = function isImageBitmap(element) {\n return objClass(element) === '[object ImageBitmap]';\n};\n\nmodule.exports.limiter = function limiter(concurrency) {\n var active = 0,\n queue = [];\n\n function roll() {\n if (active < concurrency && queue.length) {\n active++;\n queue.shift()();\n }\n }\n\n return function limit(fn) {\n return new Promise(function (resolve, reject) {\n queue.push(function () {\n fn().then(function (result) {\n resolve(result);\n active--;\n roll();\n }, function (err) {\n reject(err);\n active--;\n roll();\n });\n });\n roll();\n });\n };\n};\n\nmodule.exports.cib_quality_name = function cib_quality_name(num) {\n switch (num) {\n case 0:\n return 'pixelated';\n\n case 1:\n return 'low';\n\n case 2:\n return 'medium';\n }\n\n return 'high';\n};\n\nmodule.exports.cib_support = function cib_support(createCanvas) {\n return Promise.resolve().then(function () {\n if (typeof createImageBitmap === 'undefined') {\n return false;\n }\n\n var c = createCanvas(100, 100);\n return createImageBitmap(c, 0, 0, 100, 100, {\n resizeWidth: 10,\n resizeHeight: 10,\n resizeQuality: 'high'\n }).then(function (bitmap) {\n var status = bitmap.width === 10; // Branch below is filtered on upper level. We do not call resize\n // detection for basic ImageBitmap.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n // old Crome 51 has ImageBitmap without .close(). Then this code\n // will throw and return 'false' as expected.\n //\n\n bitmap.close();\n c = null;\n return status;\n });\n })[\"catch\"](function () {\n return false;\n });\n};\n\nmodule.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {\n return new Promise(function (resolve, reject) {\n if (typeof OffscreenCanvas === 'undefined') {\n // if OffscreenCanvas is present, we assume browser supports Worker and built-in Promise as well\n resolve(false);\n return;\n }\n\n function workerPayload(self) {\n if (typeof createImageBitmap === 'undefined') {\n self.postMessage(false);\n return;\n }\n\n Promise.resolve().then(function () {\n var canvas = new OffscreenCanvas(10, 10); // test that 2d context can be used in worker\n\n var ctx = canvas.getContext('2d');\n ctx.rect(0, 0, 1, 1); // test that cib can be used to return image bitmap from worker\n\n return createImageBitmap(canvas, 0, 0, 1, 1);\n }).then(function () {\n return self.postMessage(true);\n }, function () {\n return self.postMessage(false);\n });\n }\n\n var code = btoa(\"(\".concat(workerPayload.toString(), \")(self);\"));\n var w = new Worker(\"data:text/javascript;base64,\".concat(code));\n\n w.onmessage = function (ev) {\n return resolve(ev.data);\n };\n\n w.onerror = reject;\n }).then(function (result) {\n return result;\n }, function () {\n return false;\n });\n}; // Check if canvas.getContext('2d').getImageData can be used,\n// FireFox randomizes the output of that function in `privacy.resistFingerprinting` mode\n\n\nmodule.exports.can_use_canvas = function can_use_canvas(createCanvas) {\n var usable = false;\n\n try {\n var canvas = createCanvas(2, 1);\n var ctx = canvas.getContext('2d');\n var d = ctx.createImageData(2, 1);\n d.data[0] = 12;\n d.data[1] = 23;\n d.data[2] = 34;\n d.data[3] = 255;\n d.data[4] = 45;\n d.data[5] = 56;\n d.data[6] = 67;\n d.data[7] = 255;\n ctx.putImageData(d, 0, 0);\n d = null;\n d = ctx.getImageData(0, 0, 2, 1);\n\n if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {\n usable = true;\n }\n } catch (err) {}\n\n return usable;\n}; // Check if createImageBitmap(img, sx, sy, sw, sh) signature works correctly\n// with JPEG images oriented with Exif;\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n// TODO: remove after it's fixed in chrome for at least 2 releases\n\n\nmodule.exports.cib_can_use_region = function cib_can_use_region() {\n return new Promise(function (resolve) {\n if (typeof createImageBitmap === 'undefined') {\n resolve(false);\n return;\n }\n\n var image = new Image();\n image.src = 'data:image/jpeg;base64,' + '/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAA' + 'AABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9' + 'sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRc' + 'ZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoa' + 'GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRA' + 'f/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAA' + 'IQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAA' + 'AAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIB' + 'AT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAA' + 'AAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAA' + 'AAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQ' + 'QAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';\n\n image.onload = function () {\n createImageBitmap(image, 0, 0, image.width, image.height).then(function (bitmap) {\n if (bitmap.width === image.width && bitmap.height === image.height) {\n resolve(true);\n } else {\n resolve(false);\n }\n }, function () {\n return resolve(false);\n });\n };\n\n image.onerror = function () {\n return resolve(false);\n };\n });\n};\n\n},{}],17:[function(_dereq_,module,exports){\n\nmodule.exports = function () {\n var MathLib = _dereq_('./mathlib');\n\n var mathLib;\n /* eslint-disable no-undef */\n\n onmessage = function onmessage(ev) {\n var tileOpts = ev.data.opts;\n var returnBitmap = false;\n\n if (!tileOpts.src && tileOpts.srcBitmap) {\n var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);\n var ctx = canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n ctx.drawImage(tileOpts.srcBitmap, 0, 0);\n tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;\n canvas.width = canvas.height = 0;\n canvas = null;\n tileOpts.srcBitmap.close();\n tileOpts.srcBitmap = null;\n returnBitmap = true;\n }\n\n if (!mathLib) mathLib = new MathLib(ev.data.features); // Use multimath's sync auto-init. Avoid Promise use in old browsers,\n // because polyfills are not propagated to webworker.\n\n var data = mathLib.resizeAndUnsharp(tileOpts);\n\n if (returnBitmap) {\n var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);\n\n var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);\n\n var _ctx = _canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n\n _ctx.putImageData(toImageData, 0, 0);\n\n createImageBitmap(_canvas).then(function (bitmap) {\n postMessage({\n bitmap: bitmap\n }, [bitmap]);\n });\n } else {\n postMessage({\n data: data\n }, [data.buffer]);\n }\n };\n};\n\n},{\"./mathlib\":1}],18:[function(_dereq_,module,exports){\n// Calculate Gaussian blur of an image using IIR filter\n// The method is taken from Intel's white paper and code example attached to it:\n// https://software.intel.com/en-us/articles/iir-gaussian-blur-filter\n// -implementation-using-intel-advanced-vector-extensions\n\nvar a0, a1, a2, a3, b1, b2, left_corner, right_corner;\n\nfunction gaussCoef(sigma) {\n if (sigma < 0.5) {\n sigma = 0.5;\n }\n\n var a = Math.exp(0.726 * 0.726) / sigma,\n g1 = Math.exp(-a),\n g2 = Math.exp(-2 * a),\n k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);\n\n a0 = k;\n a1 = k * (a - 1) * g1;\n a2 = k * (a + 1) * g1;\n a3 = -k * g2;\n b1 = 2 * g1;\n b2 = -g2;\n left_corner = (a0 + a1) / (1 - b1 - b2);\n right_corner = (a2 + a3) / (1 - b1 - b2);\n\n // Attempt to force type to FP32.\n return new Float32Array([ a0, a1, a2, a3, b1, b2, left_corner, right_corner ]);\n}\n\nfunction convolveMono16(src, out, line, coeff, width, height) {\n // takes src image and writes the blurred and transposed result into out\n\n var prev_src, curr_src, curr_out, prev_out, prev_prev_out;\n var src_index, out_index, line_index;\n var i, j;\n var coeff_a0, coeff_a1, coeff_b1, coeff_b2;\n\n for (i = 0; i < height; i++) {\n src_index = i * width;\n out_index = i;\n line_index = 0;\n\n // left to right\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[6];\n prev_out = prev_prev_out;\n\n coeff_a0 = coeff[0];\n coeff_a1 = coeff[1];\n coeff_b1 = coeff[4];\n coeff_b2 = coeff[5];\n\n for (j = 0; j < width; j++) {\n curr_src = src[src_index];\n\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n prev_src = curr_src;\n\n line[line_index] = prev_out;\n line_index++;\n src_index++;\n }\n\n src_index--;\n line_index--;\n out_index += height * (width - 1);\n\n // right to left\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[7];\n prev_out = prev_prev_out;\n curr_src = prev_src;\n\n coeff_a0 = coeff[2];\n coeff_a1 = coeff[3];\n\n for (j = width - 1; j >= 0; j--) {\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n\n prev_src = curr_src;\n curr_src = src[src_index];\n\n out[out_index] = line[line_index] + prev_out;\n\n src_index--;\n line_index--;\n out_index -= height;\n }\n }\n}\n\n\nfunction blurMono16(src, width, height, radius) {\n // Quick exit on zero radius\n if (!radius) { return; }\n\n var out = new Uint16Array(src.length),\n tmp_line = new Float32Array(Math.max(width, height));\n\n var coeff = gaussCoef(radius);\n\n convolveMono16(src, out, tmp_line, coeff, width, height);\n convolveMono16(out, src, tmp_line, coeff, height, width);\n}\n\nmodule.exports = blurMono16;\n\n},{}],19:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n };\n}\n\n},{}],20:[function(_dereq_,module,exports){\n\n\nvar assign = _dereq_('object-assign');\nvar base64decode = _dereq_('./lib/base64decode');\nvar hasWebAssembly = _dereq_('./lib/wa_detect');\n\n\nvar DEFAULT_OPTIONS = {\n js: true,\n wasm: true\n};\n\n\nfunction MultiMath(options) {\n if (!(this instanceof MultiMath)) return new MultiMath(options);\n\n var opts = assign({}, DEFAULT_OPTIONS, options || {});\n\n this.options = opts;\n\n this.__cache = {};\n\n this.__init_promise = null;\n this.__modules = opts.modules || {};\n this.__memory = null;\n this.__wasm = {};\n\n this.__isLE = ((new Uint32Array((new Uint8Array([ 1, 0, 0, 0 ])).buffer))[0] === 1);\n\n if (!this.options.js && !this.options.wasm) {\n throw new Error('mathlib: at least \"js\" or \"wasm\" should be enabled');\n }\n}\n\n\nMultiMath.prototype.has_wasm = hasWebAssembly;\n\n\nMultiMath.prototype.use = function (module) {\n this.__modules[module.name] = module;\n\n // Pin the best possible implementation\n if (this.options.wasm && this.has_wasm() && module.wasm_fn) {\n this[module.name] = module.wasm_fn;\n } else {\n this[module.name] = module.fn;\n }\n\n return this;\n};\n\n\nMultiMath.prototype.init = function () {\n if (this.__init_promise) return this.__init_promise;\n\n if (!this.options.js && this.options.wasm && !this.has_wasm()) {\n return Promise.reject(new Error('mathlib: only \"wasm\" was enabled, but it\\'s not supported'));\n }\n\n var self = this;\n\n this.__init_promise = Promise.all(Object.keys(self.__modules).map(function (name) {\n var module = self.__modules[name];\n\n if (!self.options.wasm || !self.has_wasm() || !module.wasm_fn) return null;\n\n // If already compiled - exit\n if (self.__wasm[name]) return null;\n\n // Compile wasm source\n return WebAssembly.compile(self.__base64decode(module.wasm_src))\n .then(function (m) { self.__wasm[name] = m; });\n }))\n .then(function () { return self; });\n\n return this.__init_promise;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Methods below are for internal use from plugins\n\n\n// Simple decode base64 to typed array. Useful to load embedded webassembly\n// code. You probably don't need to call this method directly.\n//\nMultiMath.prototype.__base64decode = base64decode;\n\n\n// Increase current memory to include specified number of bytes. Do nothing if\n// size is already ok. You probably don't need to call this method directly,\n// because it will be invoked from `.__instance()`.\n//\nMultiMath.prototype.__reallocate = function mem_grow_to(bytes) {\n if (!this.__memory) {\n this.__memory = new WebAssembly.Memory({\n initial: Math.ceil(bytes / (64 * 1024))\n });\n return this.__memory;\n }\n\n var mem_size = this.__memory.buffer.byteLength;\n\n if (mem_size < bytes) {\n this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));\n }\n\n return this.__memory;\n};\n\n\n// Returns instantinated webassembly item by name, with specified memory size\n// and environment.\n// - use cache if available\n// - do sync module init, if async init was not called earlier\n// - allocate memory if not enougth\n// - can export functions to webassembly via \"env_extra\",\n// for example, { exp: Math.exp }\n//\nMultiMath.prototype.__instance = function instance(name, memsize, env_extra) {\n if (memsize) this.__reallocate(memsize);\n\n // If .init() was not called, do sync compile\n if (!this.__wasm[name]) {\n var module = this.__modules[name];\n this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module.wasm_src));\n }\n\n if (!this.__cache[name]) {\n var env_base = {\n memoryBase: 0,\n memory: this.__memory,\n tableBase: 0,\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n };\n\n this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {\n env: assign(env_base, env_extra || {})\n });\n }\n\n return this.__cache[name];\n};\n\n\n// Helper to calculate memory aligh for pointers. Webassembly does not require\n// this, but you may wish to experiment. Default base = 8;\n//\nMultiMath.prototype.__align = function align(number, base) {\n base = base || 8;\n var reminder = number % base;\n return number + (reminder ? base - reminder : 0);\n};\n\n\nmodule.exports = MultiMath;\n\n},{\"./lib/base64decode\":21,\"./lib/wa_detect\":22,\"object-assign\":23}],21:[function(_dereq_,module,exports){\n\n\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\nmodule.exports = function base64decode(str) {\n var input = str.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length;\n\n var out = new Uint8Array((max * 3) >> 2);\n\n // Collect by 6*4 bits (3 bytes)\n\n var bits = 0;\n var ptr = 0;\n\n for (var idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n }\n\n bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n var tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n } else if (tailbits === 18) {\n out[ptr++] = (bits >> 10) & 0xFF;\n out[ptr++] = (bits >> 2) & 0xFF;\n } else if (tailbits === 12) {\n out[ptr++] = (bits >> 4) & 0xFF;\n }\n\n return out;\n};\n\n},{}],22:[function(_dereq_,module,exports){\n\n\nvar wa;\n\n\nmodule.exports = function hasWebAssembly() {\n // use cache if called before;\n if (typeof wa !== 'undefined') return wa;\n\n wa = false;\n\n if (typeof WebAssembly === 'undefined') return wa;\n\n // If WebAssenbly is disabled, code can throw on compile\n try {\n // https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js\n // Additional check that WA internals are correct\n\n /* eslint-disable comma-spacing, max-len */\n var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);\n var module = new WebAssembly.Module(bin);\n var instance = new WebAssembly.Instance(module, {});\n\n // test storing to and loading from a non-zero location via a parameter.\n // Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations\n if (instance.exports.test(4) !== 0) wa = true;\n\n return wa;\n } catch (__) {}\n\n return wa;\n};\n\n},{}],23:[function(_dereq_,module,exports){\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],24:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],\"/index.js\":[function(_dereq_,module,exports){\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar assign = _dereq_('object-assign');\n\nvar webworkify = _dereq_('webworkify');\n\nvar MathLib = _dereq_('./lib/mathlib');\n\nvar Pool = _dereq_('./lib/pool');\n\nvar utils = _dereq_('./lib/utils');\n\nvar worker = _dereq_('./lib/worker');\n\nvar createStages = _dereq_('./lib/stepper');\n\nvar createRegions = _dereq_('./lib/tiler'); // Deduplicate pools & limiters with the same configs\n// when user creates multiple pica instances.\n\n\nvar singletones = {};\nvar NEED_SAFARI_FIX = false;\n\ntry {\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n NEED_SAFARI_FIX = navigator.userAgent.indexOf('Safari') >= 0;\n }\n} catch (e) {}\n\nvar concurrency = 1;\n\nif (typeof navigator !== 'undefined') {\n concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);\n}\n\nvar DEFAULT_PICA_OPTS = {\n tile: 1024,\n concurrency: concurrency,\n features: ['js', 'wasm', 'ww'],\n idle: 2000,\n createCanvas: function createCanvas(width, height) {\n var tmpCanvas = document.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n return tmpCanvas;\n }\n};\nvar DEFAULT_RESIZE_OPTS = {\n quality: 3,\n alpha: false,\n unsharpAmount: 0,\n unsharpRadius: 0.0,\n unsharpThreshold: 0\n};\nvar CAN_NEW_IMAGE_DATA = false;\nvar CAN_CREATE_IMAGE_BITMAP = false;\nvar CAN_USE_CANVAS_GET_IMAGE_DATA = false;\nvar CAN_USE_OFFSCREEN_CANVAS = false;\nvar CAN_USE_CIB_REGION_FOR_IMAGE = false;\n\nfunction workerFabric() {\n return {\n value: webworkify(worker),\n destroy: function destroy() {\n this.value.terminate();\n\n if (typeof window !== 'undefined') {\n var url = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n if (url && url.revokeObjectURL && this.value.objectURL) {\n url.revokeObjectURL(this.value.objectURL);\n }\n }\n }\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// API methods\n\n\nfunction Pica(options) {\n if (!(this instanceof Pica)) return new Pica(options);\n this.options = assign({}, DEFAULT_PICA_OPTS, options || {});\n var limiter_key = \"lk_\".concat(this.options.concurrency); // Share limiters to avoid multiple parallel workers when user creates\n // multiple pica instances.\n\n this.__limit = singletones[limiter_key] || utils.limiter(this.options.concurrency);\n if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit; // List of supported features, according to options & browser/node.js\n\n this.features = {\n js: false,\n // pure JS implementation, can be disabled for testing\n wasm: false,\n // webassembly implementation for heavy functions\n cib: false,\n // resize via createImageBitmap (only FF at this moment)\n ww: false // webworkers\n\n };\n this.__workersPool = null; // Store requested features for webworkers\n\n this.__requested_features = [];\n this.__mathlib = null;\n}\n\nPica.prototype.init = function () {\n var _this = this;\n\n if (this.__initPromise) return this.__initPromise; // Test if we can create ImageData without canvas and memory copy\n\n if (typeof ImageData !== 'undefined' && typeof Uint8ClampedArray !== 'undefined') {\n try {\n /* eslint-disable no-new */\n new ImageData(new Uint8ClampedArray(400), 10, 10);\n CAN_NEW_IMAGE_DATA = true;\n } catch (__) {}\n } // ImageBitmap can be effective in 2 places:\n //\n // 1. Threaded jpeg unpack (basic)\n // 2. Built-in resize (blocked due problem in chrome, see issue #89)\n //\n // For basic use we also need ImageBitmap wo support .close() method,\n // see https://developer.mozilla.org/ru/docs/Web/API/ImageBitmap\n\n\n if (typeof ImageBitmap !== 'undefined') {\n if (ImageBitmap.prototype && ImageBitmap.prototype.close) {\n CAN_CREATE_IMAGE_BITMAP = true;\n } else {\n this.debug('ImageBitmap does not support .close(), disabled');\n }\n }\n\n var features = this.options.features.slice();\n\n if (features.indexOf('all') >= 0) {\n features = ['cib', 'wasm', 'js', 'ww'];\n }\n\n this.__requested_features = features;\n this.__mathlib = new MathLib(features); // Check WebWorker support if requested\n\n if (features.indexOf('ww') >= 0) {\n if (typeof window !== 'undefined' && 'Worker' in window) {\n // IE <= 11 don't allow to create webworkers from string. We should check it.\n // https://connect.microsoft.com/IE/feedback/details/801810/web-workers-from-blob-urls-in-ie-10-and-11\n try {\n var wkr = _dereq_('webworkify')(function () {});\n\n wkr.terminate();\n this.features.ww = true; // pool uniqueness depends on pool config + webworker config\n\n var wpool_key = \"wp_\".concat(JSON.stringify(this.options));\n\n if (singletones[wpool_key]) {\n this.__workersPool = singletones[wpool_key];\n } else {\n this.__workersPool = new Pool(workerFabric, this.options.idle);\n singletones[wpool_key] = this.__workersPool;\n }\n } catch (__) {}\n }\n }\n\n var initMath = this.__mathlib.init().then(function (mathlib) {\n // Copy detected features\n assign(_this.features, mathlib.features);\n });\n\n var checkCibResize;\n\n if (!CAN_CREATE_IMAGE_BITMAP) {\n checkCibResize = Promise.resolve(false);\n } else {\n checkCibResize = utils.cib_support(this.options.createCanvas).then(function (status) {\n if (_this.features.cib && features.indexOf('cib') < 0) {\n _this.debug('createImageBitmap() resize supported, but disabled by config');\n\n return;\n }\n\n if (features.indexOf('cib') >= 0) _this.features.cib = status;\n });\n }\n\n CAN_USE_CANVAS_GET_IMAGE_DATA = utils.can_use_canvas(this.options.createCanvas);\n var checkOffscreenCanvas;\n\n if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf('ww') !== -1) {\n checkOffscreenCanvas = utils.worker_offscreen_canvas_support();\n } else {\n checkOffscreenCanvas = Promise.resolve(false);\n }\n\n checkOffscreenCanvas = checkOffscreenCanvas.then(function (result) {\n CAN_USE_OFFSCREEN_CANVAS = result;\n }); // we use createImageBitmap to crop image data and pass it to workers,\n // so need to check whether function works correctly;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n\n var checkCibRegion = utils.cib_can_use_region().then(function (result) {\n CAN_USE_CIB_REGION_FOR_IMAGE = result;\n }); // Init math lib. That's async because can load some\n\n this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function () {\n return _this;\n });\n return this.__initPromise;\n}; // Call resizer in webworker or locally, depending on config\n\n\nPica.prototype.__invokeResize = function (tileOpts, opts) {\n var _this2 = this;\n\n // Share cache between calls:\n //\n // - wasm instance\n // - wasm memory object\n //\n opts.__mathCache = opts.__mathCache || {};\n return Promise.resolve().then(function () {\n if (!_this2.features.ww) {\n // not possible to have ImageBitmap here if user disabled WW\n return {\n data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)\n };\n }\n\n return new Promise(function (resolve, reject) {\n var w = _this2.__workersPool.acquire();\n\n if (opts.cancelToken) opts.cancelToken[\"catch\"](function (err) {\n return reject(err);\n });\n\n w.value.onmessage = function (ev) {\n w.release();\n if (ev.data.err) reject(ev.data.err);else resolve(ev.data);\n };\n\n var transfer = [];\n if (tileOpts.src) transfer.push(tileOpts.src.buffer);\n if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);\n w.value.postMessage({\n opts: tileOpts,\n features: _this2.__requested_features,\n preload: {\n wasm_nodule: _this2.__mathlib.__\n }\n }, transfer);\n });\n });\n}; // this function can return promise if createImageBitmap is used\n\n\nPica.prototype.__extractTileData = function (tile, from, opts, stageEnv, extractTo) {\n if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && ( // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,\n // can use canvas because canvas doesn't have orientation;\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n utils.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {\n this.debug('Create tile for OffscreenCanvas');\n return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function (bitmap) {\n extractTo.srcBitmap = bitmap;\n return extractTo;\n });\n } // Extract tile RGBA buffer, depending on input type\n\n\n if (utils.isCanvas(from)) {\n if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext('2d', {\n alpha: Boolean(opts.alpha)\n }); // If input is Canvas - extract region data directly\n\n this.debug('Get tile pixel data');\n extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;\n return extractTo;\n } // If input is Image or decoded to ImageBitmap,\n // draw region to temporary canvas and extract data from it\n //\n // Note! Attempt to reuse this canvas causes significant slowdown in chrome\n //\n\n\n this.debug('Draw tile imageBitmap/image to temporary canvas');\n var tmpCanvas = this.options.createCanvas(tile.width, tile.height);\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.globalCompositeOperation = 'copy';\n tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);\n this.debug('Get tile pixel data');\n extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data; // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n return extractTo;\n};\n\nPica.prototype.__landTileData = function (tile, result, stageEnv) {\n var toImageData;\n this.debug('Convert raw rgba tile result to ImageData');\n\n if (result.bitmap) {\n stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);\n return null;\n }\n\n if (CAN_NEW_IMAGE_DATA) {\n // this branch is for modern browsers\n // If `new ImageData()` & Uint8ClampedArray suported\n toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);\n } else {\n // fallback for `node-canvas` and old browsers\n // (IE11 has ImageData but does not support `new ImageData()`)\n toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);\n\n if (toImageData.data.set) {\n toImageData.data.set(result.data);\n } else {\n // IE9 don't have `.set()`\n for (var i = toImageData.data.length - 1; i >= 0; i--) {\n toImageData.data[i] = result.data[i];\n }\n }\n }\n\n this.debug('Draw tile');\n\n if (NEED_SAFARI_FIX) {\n // Safari draws thin white stripes between tiles without this fix\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);\n } else {\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);\n }\n\n return null;\n};\n\nPica.prototype.__tileAndResize = function (from, to, opts) {\n var _this3 = this;\n\n var stageEnv = {\n srcCtx: null,\n srcImageBitmap: null,\n isImageBitmapReused: false,\n toCtx: null\n };\n\n var processTile = function processTile(tile) {\n return _this3.__limit(function () {\n if (opts.canceled) return opts.cancelToken;\n var tileOpts = {\n width: tile.width,\n height: tile.height,\n toWidth: tile.toWidth,\n toHeight: tile.toHeight,\n scaleX: tile.scaleX,\n scaleY: tile.scaleY,\n offsetX: tile.offsetX,\n offsetY: tile.offsetY,\n quality: opts.quality,\n alpha: opts.alpha,\n unsharpAmount: opts.unsharpAmount,\n unsharpRadius: opts.unsharpRadius,\n unsharpThreshold: opts.unsharpThreshold\n };\n\n _this3.debug('Invoke resize math');\n\n return Promise.resolve(tileOpts).then(function (tileOpts) {\n return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts);\n }).then(function (tileOpts) {\n _this3.debug('Invoke resize math');\n\n return _this3.__invokeResize(tileOpts, opts);\n }).then(function (result) {\n if (opts.canceled) return opts.cancelToken;\n stageEnv.srcImageData = null;\n return _this3.__landTileData(tile, result, stageEnv);\n });\n });\n }; // Need to normalize data source first. It can be canvas or image.\n // If image - try to decode in background if possible\n\n\n return Promise.resolve().then(function () {\n stageEnv.toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n if (utils.isCanvas(from)) return null;\n\n if (utils.isImageBitmap(from)) {\n stageEnv.srcImageBitmap = from;\n stageEnv.isImageBitmapReused = true;\n return null;\n }\n\n if (utils.isImage(from)) {\n // try do decode image in background for faster next operations;\n // if we're using offscreen canvas, cib is called per tile, so not needed here\n if (!CAN_CREATE_IMAGE_BITMAP) return null;\n\n _this3.debug('Decode image via createImageBitmap');\n\n return createImageBitmap(from).then(function (imageBitmap) {\n stageEnv.srcImageBitmap = imageBitmap;\n }) // Suppress error to use fallback, if method fails\n // https://github.com/nodeca/pica/issues/190\n\n /* eslint-disable no-unused-vars */\n [\"catch\"](function (e) {\n return null;\n });\n }\n\n throw new Error('Pica: \".from\" should be Image, Canvas or ImageBitmap');\n }).then(function () {\n if (opts.canceled) return opts.cancelToken;\n\n _this3.debug('Calculate tiles'); //\n // Here we are with \"normalized\" source,\n // follow to tiling\n //\n\n\n var regions = createRegions({\n width: opts.width,\n height: opts.height,\n srcTileSize: _this3.options.tile,\n toWidth: opts.toWidth,\n toHeight: opts.toHeight,\n destTileBorder: opts.__destTileBorder\n });\n var jobs = regions.map(function (tile) {\n return processTile(tile);\n });\n\n function cleanup(stageEnv) {\n if (stageEnv.srcImageBitmap) {\n if (!stageEnv.isImageBitmapReused) stageEnv.srcImageBitmap.close();\n stageEnv.srcImageBitmap = null;\n }\n }\n\n _this3.debug('Process tiles');\n\n return Promise.all(jobs).then(function () {\n _this3.debug('Finished!');\n\n cleanup(stageEnv);\n return to;\n }, function (err) {\n cleanup(stageEnv);\n throw err;\n });\n });\n};\n\nPica.prototype.__processStages = function (stages, from, to, opts) {\n var _this4 = this;\n\n if (opts.canceled) return opts.cancelToken;\n\n var _stages$shift = stages.shift(),\n _stages$shift2 = _slicedToArray(_stages$shift, 2),\n toWidth = _stages$shift2[0],\n toHeight = _stages$shift2[1];\n\n var isLastStage = stages.length === 0;\n opts = assign({}, opts, {\n toWidth: toWidth,\n toHeight: toHeight,\n // only use user-defined quality for the last stage,\n // use simpler (Hamming) filter for the first stages where\n // scale factor is large enough (more than 2-3)\n quality: isLastStage ? opts.quality : Math.min(1, opts.quality)\n });\n var tmpCanvas;\n\n if (!isLastStage) {\n // create temporary canvas\n tmpCanvas = this.options.createCanvas(toWidth, toHeight);\n }\n\n return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function () {\n if (isLastStage) return to;\n opts.width = toWidth;\n opts.height = toHeight;\n return _this4.__processStages(stages, tmpCanvas, to, opts);\n }).then(function (res) {\n if (tmpCanvas) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n tmpCanvas.width = tmpCanvas.height = 0;\n }\n\n return res;\n });\n};\n\nPica.prototype.__resizeViaCreateImageBitmap = function (from, to, opts) {\n var _this5 = this;\n\n var toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n this.debug('Resize via createImageBitmap()');\n return createImageBitmap(from, {\n resizeWidth: opts.toWidth,\n resizeHeight: opts.toHeight,\n resizeQuality: utils.cib_quality_name(opts.quality)\n }).then(function (imageBitmap) {\n if (opts.canceled) return opts.cancelToken; // if no unsharp - draw directly to output canvas\n\n if (!opts.unsharpAmount) {\n toCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n }\n\n _this5.debug('Unsharp result');\n\n var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);\n\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);\n\n _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);\n\n toCtx.putImageData(iData, 0, 0); // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n iData = tmpCtx = tmpCanvas = toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n });\n};\n\nPica.prototype.resize = function (from, to, options) {\n var _this6 = this;\n\n this.debug('Start resize...');\n var opts = assign({}, DEFAULT_RESIZE_OPTS);\n\n if (!isNaN(options)) {\n opts = assign(opts, {\n quality: options\n });\n } else if (options) {\n opts = assign(opts, options);\n }\n\n opts.toWidth = to.width;\n opts.toHeight = to.height;\n opts.width = from.naturalWidth || from.width;\n opts.height = from.naturalHeight || from.height; // Prevent stepper from infinite loop\n\n if (to.width === 0 || to.height === 0) {\n return Promise.reject(new Error(\"Invalid output size: \".concat(to.width, \"x\").concat(to.height)));\n }\n\n if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;\n opts.canceled = false;\n\n if (opts.cancelToken) {\n // Wrap cancelToken to avoid successive resolve & set flag\n opts.cancelToken = opts.cancelToken.then(function (data) {\n opts.canceled = true;\n throw data;\n }, function (err) {\n opts.canceled = true;\n throw err;\n });\n }\n\n var DEST_TILE_BORDER = 3; // Max possible filter window size\n\n opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));\n return this.init().then(function () {\n if (opts.canceled) return opts.cancelToken; // if createImageBitmap supports resize, just do it and return\n\n if (_this6.features.cib) {\n return _this6.__resizeViaCreateImageBitmap(from, to, opts);\n }\n\n if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {\n var err = new Error('Pica: cannot use getImageData on canvas, ' + \"make sure fingerprinting protection isn't enabled\");\n err.code = 'ERR_GET_IMAGE_DATA';\n throw err;\n } //\n // No easy way, let's resize manually via arrays\n //\n\n\n var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);\n return _this6.__processStages(stages, from, to, opts);\n });\n}; // RGBA buffer resize\n//\n\n\nPica.prototype.resizeBuffer = function (options) {\n var _this7 = this;\n\n var opts = assign({}, DEFAULT_RESIZE_OPTS, options);\n return this.init().then(function () {\n return _this7.__mathlib.resizeAndUnsharp(opts);\n });\n};\n\nPica.prototype.toBlob = function (canvas, mimeType, quality) {\n mimeType = mimeType || 'image/png';\n return new Promise(function (resolve) {\n if (canvas.toBlob) {\n canvas.toBlob(function (blob) {\n return resolve(blob);\n }, mimeType, quality);\n return;\n }\n\n if (canvas.convertToBlob) {\n resolve(canvas.convertToBlob({\n type: mimeType,\n quality: quality\n }));\n return;\n } // Fallback for old browsers\n\n\n var asString = atob(canvas.toDataURL(mimeType, quality).split(',')[1]);\n var len = asString.length;\n var asBuffer = new Uint8Array(len);\n\n for (var i = 0; i < len; i++) {\n asBuffer[i] = asString.charCodeAt(i);\n }\n\n resolve(new Blob([asBuffer], {\n type: mimeType\n }));\n });\n};\n\nPica.prototype.debug = function () {};\n\nmodule.exports = Pica;\n\n},{\"./lib/mathlib\":1,\"./lib/pool\":13,\"./lib/stepper\":14,\"./lib/tiler\":15,\"./lib/utils\":16,\"./lib/worker\":17,\"object-assign\":23,\"webworkify\":24}]},{},[])(\"/index.js\")\n});\n});\n\nvar image_traverse = createCommonjsModule(function (module) {\n\n//////////////////////////////////////////////////////////////////////////\n// Helpers\n//\nfunction error(message, code) {\n var err = new Error(message);\n err.code = code;\n return err;\n}\n\n\n// Convert number to 0xHH string\n//\nfunction to_hex(number) {\n var n = number.toString(16).toUpperCase();\n for (var i = 2 - n.length; i > 0; i--) n = '0' + n;\n return '0x' + n;\n}\n\n\nfunction utf8_encode(str) {\n try {\n return unescape(encodeURIComponent(str));\n } catch (_) {\n return str;\n }\n}\n\n\nfunction utf8_decode(str) {\n try {\n return decodeURIComponent(escape(str));\n } catch (_) {\n return str;\n }\n}\n\n\n// Check if input is a Uint8Array\n//\nfunction is_uint8array(bin) {\n return Object.prototype.toString.call(bin) === '[object Uint8Array]';\n}\n\n\n//////////////////////////////////////////////////////////////////////////\n// Exif parser\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - exif_start: Number - start of TIFF header (after Exif\\0\\0)\n// - exif_end: Number - end of Exif segment\n// - on_entry: Number - callback\n//\nfunction ExifParser(jpeg_bin, exif_start, exif_end) {\n // Uint8Array, exif without signature (which isn't included in offsets)\n this.input = jpeg_bin.subarray(exif_start, exif_end);\n\n // offset correction for `on_entry` callback\n this.start = exif_start;\n\n // Check TIFF header (includes byte alignment and first IFD offset)\n var sig = String.fromCharCode.apply(null, this.input.subarray(0, 4));\n\n if (sig !== 'II\\x2A\\0' && sig !== 'MM\\0\\x2A') {\n throw error('invalid TIFF signature', 'EBADDATA');\n }\n\n // true if motorola (big endian) byte alignment, false if intel\n this.big_endian = sig[0] === 'M';\n}\n\n\nExifParser.prototype.each = function (on_entry) {\n // allow premature exit\n this.aborted = false;\n\n var offset = this.read_uint32(4);\n\n this.ifds_to_read = [ {\n id: 0,\n offset: offset\n } ];\n\n while (this.ifds_to_read.length > 0 && !this.aborted) {\n var i = this.ifds_to_read.shift();\n if (!i.offset) continue;\n this.scan_ifd(i.id, i.offset, on_entry);\n }\n};\n\n\nExifParser.prototype.filter = function (on_entry) {\n var ifds = {};\n\n // make sure IFD0 always exists\n ifds.ifd0 = { id: 0, entries: [] };\n\n this.each(function (entry) {\n if (on_entry(entry) === false && !entry.is_subifd_link) return;\n if (entry.is_subifd_link && entry.count !== 1 && entry.format !== 4) return; // filter out bogus links\n\n if (!ifds['ifd' + entry.ifd]) {\n ifds['ifd' + entry.ifd] = { id: entry.ifd, entries: [] };\n }\n\n ifds['ifd' + entry.ifd].entries.push(entry);\n });\n\n // thumbnails are not supported just yet, so delete all information related to it\n delete ifds.ifd1;\n\n // Calculate output size\n var length = 8;\n Object.keys(ifds).forEach(function (ifd_no) {\n length += 2;\n\n ifds[ifd_no].entries.forEach(function (entry) {\n length += 12 + (entry.data_length > 4 ? Math.ceil(entry.data_length / 2) * 2 : 0);\n });\n\n length += 4;\n });\n\n this.output = new Uint8Array(length);\n this.output[0] = this.output[1] = (this.big_endian ? 'M' : 'I').charCodeAt(0);\n this.write_uint16(2, 0x2A);\n\n var offset = 8;\n var self = this;\n this.write_uint32(4, offset);\n\n Object.keys(ifds).forEach(function (ifd_no) {\n ifds[ifd_no].written_offset = offset;\n\n var ifd_start = offset;\n var ifd_end = ifd_start + 2 + ifds[ifd_no].entries.length * 12 + 4;\n offset = ifd_end;\n\n self.write_uint16(ifd_start, ifds[ifd_no].entries.length);\n\n ifds[ifd_no].entries.sort(function (a, b) {\n // IFD entries must be in order of increasing tag IDs\n return a.tag - b.tag;\n }).forEach(function (entry, idx) {\n var entry_offset = ifd_start + 2 + idx * 12;\n\n self.write_uint16(entry_offset, entry.tag);\n self.write_uint16(entry_offset + 2, entry.format);\n self.write_uint32(entry_offset + 4, entry.count);\n\n if (entry.is_subifd_link) {\n // filled in later\n if (ifds['ifd' + entry.tag]) ifds['ifd' + entry.tag].link_offset = entry_offset + 8;\n } else if (entry.data_length <= 4) {\n self.output.set(\n self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + 4),\n entry_offset + 8\n );\n } else {\n self.write_uint32(entry_offset + 8, offset);\n self.output.set(\n self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + entry.data_length),\n offset\n );\n offset += Math.ceil(entry.data_length / 2) * 2;\n }\n });\n\n var next_ifd = ifds['ifd' + (ifds[ifd_no].id + 1)];\n if (next_ifd) next_ifd.link_offset = ifd_end - 4;\n });\n\n Object.keys(ifds).forEach(function (ifd_no) {\n if (ifds[ifd_no].written_offset && ifds[ifd_no].link_offset) {\n self.write_uint32(ifds[ifd_no].link_offset, ifds[ifd_no].written_offset);\n }\n });\n\n if (this.output.length !== offset) throw error('internal error: incorrect buffer size allocated');\n\n return this.output;\n};\n\n\nExifParser.prototype.read_uint16 = function (offset) {\n var d = this.input;\n if (offset + 2 > d.length) throw error('unexpected EOF', 'EBADDATA');\n\n return this.big_endian ?\n d[offset] * 0x100 + d[offset + 1] :\n d[offset] + d[offset + 1] * 0x100;\n};\n\n\nExifParser.prototype.read_uint32 = function (offset) {\n var d = this.input;\n if (offset + 4 > d.length) throw error('unexpected EOF', 'EBADDATA');\n\n return this.big_endian ?\n d[offset] * 0x1000000 + d[offset + 1] * 0x10000 + d[offset + 2] * 0x100 + d[offset + 3] :\n d[offset] + d[offset + 1] * 0x100 + d[offset + 2] * 0x10000 + d[offset + 3] * 0x1000000;\n};\n\n\nExifParser.prototype.write_uint16 = function (offset, value) {\n var d = this.output;\n\n if (this.big_endian) {\n d[offset] = (value >>> 8) & 0xFF;\n d[offset + 1] = value & 0xFF;\n } else {\n d[offset] = value & 0xFF;\n d[offset + 1] = (value >>> 8) & 0xFF;\n }\n};\n\n\nExifParser.prototype.write_uint32 = function (offset, value) {\n var d = this.output;\n\n if (this.big_endian) {\n d[offset] = (value >>> 24) & 0xFF;\n d[offset + 1] = (value >>> 16) & 0xFF;\n d[offset + 2] = (value >>> 8) & 0xFF;\n d[offset + 3] = value & 0xFF;\n } else {\n d[offset] = value & 0xFF;\n d[offset + 1] = (value >>> 8) & 0xFF;\n d[offset + 2] = (value >>> 16) & 0xFF;\n d[offset + 3] = (value >>> 24) & 0xFF;\n }\n};\n\n\nExifParser.prototype.is_subifd_link = function (ifd, tag) {\n return (ifd === 0 && tag === 0x8769) || // SubIFD\n (ifd === 0 && tag === 0x8825) || // GPS Info\n (ifd === 0x8769 && tag === 0xA005); // Interop IFD\n};\n\n\n// Returns byte length of a single component of a given format\n//\nExifParser.prototype.exif_format_length = function (format) {\n switch (format) {\n case 1: // byte\n case 2: // ascii\n case 6: // sbyte\n case 7: // undefined\n return 1;\n\n case 3: // short\n case 8: // sshort\n return 2;\n\n case 4: // long\n case 9: // slong\n case 11: // float\n return 4;\n\n case 5: // rational\n case 10: // srational\n case 12: // double\n return 8;\n\n default:\n // unknown type\n return 0;\n }\n};\n\n\n// Reads Exif data\n//\nExifParser.prototype.exif_format_read = function (format, offset) {\n var v;\n\n switch (format) {\n case 1: // byte\n case 2: // ascii\n v = this.input[offset];\n return v;\n\n case 6: // sbyte\n v = this.input[offset];\n return v | (v & 0x80) * 0x1fffffe;\n\n case 3: // short\n v = this.read_uint16(offset);\n return v;\n\n case 8: // sshort\n v = this.read_uint16(offset);\n return v | (v & 0x8000) * 0x1fffe;\n\n case 4: // long\n v = this.read_uint32(offset);\n return v;\n\n case 9: // slong\n v = this.read_uint32(offset);\n return v | 0;\n\n case 5: // rational\n case 10: // srational\n case 11: // float\n case 12: // double\n return null; // not implemented\n\n case 7: // undefined\n return null; // blob\n\n default:\n // unknown type\n return null;\n }\n};\n\n\nExifParser.prototype.scan_ifd = function (ifd_no, offset, on_entry) {\n var entry_count = this.read_uint16(offset);\n\n offset += 2;\n\n for (var i = 0; i < entry_count; i++) {\n var tag = this.read_uint16(offset);\n var format = this.read_uint16(offset + 2);\n var count = this.read_uint32(offset + 4);\n\n var comp_length = this.exif_format_length(format);\n var data_length = count * comp_length;\n var data_offset = data_length <= 4 ? offset + 8 : this.read_uint32(offset + 8);\n var is_subifd_link = false;\n\n if (data_offset + data_length > this.input.length) {\n throw error('unexpected EOF', 'EBADDATA');\n }\n\n var value = [];\n var comp_offset = data_offset;\n\n for (var j = 0; j < count; j++, comp_offset += comp_length) {\n var item = this.exif_format_read(format, comp_offset);\n if (item === null) {\n value = null;\n break;\n }\n value.push(item);\n }\n\n if (Array.isArray(value) && format === 2) {\n try {\n value = utf8_decode(String.fromCharCode.apply(null, value));\n } catch (_) {\n value = null;\n }\n\n if (value && value[value.length - 1] === '\\0') value = value.slice(0, -1);\n }\n\n if (this.is_subifd_link(ifd_no, tag)) {\n if (Array.isArray(value) && Number.isInteger(value[0]) && value[0] > 0) {\n this.ifds_to_read.push({\n id: tag,\n offset: value[0]\n });\n is_subifd_link = true;\n }\n }\n\n var entry = {\n is_big_endian: this.big_endian,\n ifd: ifd_no,\n tag: tag,\n format: format,\n count: count,\n entry_offset: offset + this.start,\n data_length: data_length,\n data_offset: data_offset + this.start,\n value: value,\n is_subifd_link: is_subifd_link\n };\n\n if (on_entry(entry) === false) {\n this.aborted = true;\n return;\n }\n\n offset += 12;\n }\n\n if (ifd_no === 0) {\n this.ifds_to_read.push({\n id: 1,\n offset: this.read_uint32(offset)\n });\n }\n};\n\n\n// Check whether input is a JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n//\n// Returns true if it is and false otherwise\n//\nmodule.exports.is_jpeg = function (jpeg_bin) {\n return jpeg_bin.length >= 4 && jpeg_bin[0] === 0xFF && jpeg_bin[1] === 0xD8 && jpeg_bin[2] === 0xFF;\n};\n\n\n// Call an iterator on each segment in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_segment: Function - callback executed on each JPEG marker segment\n// - segment: Object\n// - code: Number - marker type (2nd byte, e.g. 0xE0 for APP0)\n// - offset: Number - offset of the first byte (0xFF) relative to `jpeg_bin` start\n// - length: Number - length of the entire marker segment including first two bytes and length\n// - 2 for standalone markers\n// - 4+length for markers with data\n//\n// Iteration stops when `EOI` (0xFFD9) marker is reached or if `on_segment`\n// function returns `false`.\n//\nmodule.exports.jpeg_segments_each = function (jpeg_bin, on_segment) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_segment !== 'function') {\n throw error('Invalid argument (on_segment), Function expected', 'EINVAL');\n }\n\n if (!module.exports.is_jpeg(jpeg_bin)) {\n throw error('Unknown file format', 'ENOTJPEG');\n }\n\n var offset = 0, length = jpeg_bin.length, inside_scan = false;\n\n for (;;) {\n var segment_code, segment_length;\n\n if (offset + 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n var byte1 = jpeg_bin[offset];\n var byte2 = jpeg_bin[offset + 1];\n\n if (byte1 === 0xFF && byte2 === 0xFF) {\n // padding\n segment_code = 0xFF;\n segment_length = 1;\n\n } else if (byte1 === 0xFF && byte2 !== 0) {\n // marker\n segment_code = byte2;\n segment_length = 2;\n\n if ((0xD0 <= segment_code && segment_code <= 0xD9) || segment_code === 0x01) ; else {\n if (offset + 3 >= length) throw error('Unexpected EOF', 'EBADDATA');\n segment_length += jpeg_bin[offset + 2] * 0x100 + jpeg_bin[offset + 3];\n if (segment_length < 2) throw error('Invalid segment length', 'EBADDATA');\n if (offset + segment_length - 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n }\n\n if (inside_scan) {\n if (segment_code >= 0xD0 && segment_code <= 0xD7) ; else {\n inside_scan = false;\n }\n }\n\n if (segment_code === 0xDA /* SOS */) inside_scan = true;\n } else if (inside_scan) {\n // entropy-encoded segment\n for (var pos = offset + 1; ; pos++) {\n // scan until we find FF\n if (pos >= length) throw error('Unexpected EOF', 'EBADDATA');\n if (jpeg_bin[pos] === 0xFF) {\n if (pos + 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n if (jpeg_bin[pos + 1] !== 0) {\n segment_code = 0;\n segment_length = pos - offset;\n break;\n }\n }\n }\n } else {\n throw error('Unexpected byte at segment start: ' + to_hex(byte1) +\n ' (offset ' + to_hex(offset) + ')', 'EBADDATA');\n }\n\n if (on_segment({ code: segment_code, offset: offset, length: segment_length }) === false) break;\n if (segment_code === 0xD9 /* EOI */) break;\n offset += segment_length;\n }\n};\n\n\n// Replace or remove segments in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_segment: Function - callback executed on each JPEG marker segment\n// - segment: Object\n// - code: Number - marker type (2nd byte, e.g. 0xE0 for APP0)\n// - offset: Number - offset of the first byte (0xFF) relative to `jpeg_bin` start\n// - length: Number - length of the entire marker segment including first two bytes and length\n// - 2 for standalone markers\n// - 4+length for markers with data\n//\n// `on_segment` function should return one of the following:\n// - `false` - segment is removed from the output\n// - Uint8Array - segment is replaced with the new data\n// - [ Uint8Array ] - segment is replaced with the new data\n// - anything else - segment is copied to the output as is\n//\n// Any data after `EOI` (0xFFD9) marker is removed.\n//\nmodule.exports.jpeg_segments_filter = function (jpeg_bin, on_segment) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_segment !== 'function') {\n throw error('Invalid argument (on_segment), Function expected', 'EINVAL');\n }\n\n var ranges = [];\n var out_length = 0;\n\n module.exports.jpeg_segments_each(jpeg_bin, function (segment) {\n var new_segment = on_segment(segment);\n\n if (is_uint8array(new_segment)) {\n ranges.push({ data: new_segment });\n out_length += new_segment.length;\n } else if (Array.isArray(new_segment)) {\n new_segment.filter(is_uint8array).forEach(function (s) {\n ranges.push({ data: s });\n out_length += s.length;\n });\n } else if (new_segment !== false) {\n var new_range = { start: segment.offset, end: segment.offset + segment.length };\n\n if (ranges.length > 0 && ranges[ranges.length - 1].end === new_range.start) {\n ranges[ranges.length - 1].end = new_range.end;\n } else {\n ranges.push(new_range);\n }\n\n out_length += segment.length;\n }\n });\n\n var result = new Uint8Array(out_length);\n var offset = 0;\n\n ranges.forEach(function (range) {\n var data = range.data || jpeg_bin.subarray(range.start, range.end);\n result.set(data, offset);\n offset += data.length;\n });\n\n return result;\n};\n\n\n// Call an iterator on each Exif entry in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_entry: Function - callback executed on each Exif entry\n// - entry: Object\n// - is_big_endian: Boolean - whether Exif uses big or little endian byte alignment\n// - ifd: Number - IFD identifier (0 for IFD0, 1 for IFD1, 0x8769 for SubIFD,\n// 0x8825 for GPS Info, 0xA005 for Interop IFD)\n// - tag: Number - exif entry tag (0x0110 - camera name, 0x0112 - orientation, etc. - see Exif spec)\n// - format: Number - exif entry format (1 - byte, 2 - ascii, 3 - short, etc. - see Exif spec)\n// - count: Number - number of components of the given format inside data\n// (usually 1, or string length for ascii format)\n// - entry_offset: Number - start of Exif entry (entry length is always 12, so not included)\n// - data_offset: Number - start of data attached to Exif entry (will overlap with entry if length <= 4)\n// - data_length: Number - length of data attached to Exif entry\n// - value: Array|String|Null - our best attempt at parsing data (not all formats supported right now)\n// - is_subifd_link: Boolean - whether this entry is recognized to be a link to subifd (can't filter these out)\n//\n// Iteration stops early if iterator returns `false`.\n//\n// If Exif wasn't found anywhere (before start of the image data, SOS),\n// iterator is never executed.\n//\nmodule.exports.jpeg_exif_tags_each = function (jpeg_bin, on_exif_entry) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_exif_entry !== 'function') {\n throw error('Invalid argument (on_exif_entry), Function expected', 'EINVAL');\n }\n\n /* eslint-disable consistent-return */\n module.exports.jpeg_segments_each(jpeg_bin, function (segment) {\n if (segment.code === 0xDA /* SOS */) return false;\n\n // look for APP1 segment and compare header with 'Exif\\0\\0'\n if (segment.code === 0xE1 && segment.length >= 10 &&\n jpeg_bin[segment.offset + 4] === 0x45 && jpeg_bin[segment.offset + 5] === 0x78 &&\n jpeg_bin[segment.offset + 6] === 0x69 && jpeg_bin[segment.offset + 7] === 0x66 &&\n jpeg_bin[segment.offset + 8] === 0x00 && jpeg_bin[segment.offset + 9] === 0x00) {\n\n new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length).each(on_exif_entry);\n return false;\n }\n });\n};\n\n\n// Remove Exif entries in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_entry: Function - callback executed on each Exif entry\n// - entry: Object\n// - is_big_endian: Boolean - whether Exif uses big or little endian byte alignment\n// - ifd: Number - IFD identifier (0 for IFD0, 1 for IFD1, 0x8769 for SubIFD,\n// 0x8825 for GPS Info, 0xA005 for Interop IFD)\n// - tag: Number - exif entry tag (0x0110 - camera name, 0x0112 - orientation, etc. - see Exif spec)\n// - format: Number - exif entry format (1 - byte, 2 - ascii, 3 - short, etc. - see Exif spec)\n// - count: Number - number of components of the given format inside data\n// (usually 1, or string length for ascii format)\n// - entry_offset: Number - start of Exif entry (entry length is always 12, so not included)\n// - data_offset: Number - start of data attached to Exif entry (will overlap with entry if length <= 4)\n// - data_length: Number - length of data attached to Exif entry\n// - value: Array|String|Null - our best attempt at parsing data (not all formats supported right now)\n// - is_subifd_link: Boolean - whether this entry is recognized to be a link to subifd (can't filter these out)\n//\n// This function removes following from Exif:\n// - all entries where iterator returned false (except subifd links which are mandatory)\n// - IFD1 and thumbnail image (the purpose of this function is to reduce file size,\n// so thumbnail is usually the first thing to go)\n// - all other data that isn't in IFD0, SubIFD, GPSIFD, InteropIFD\n// (theoretically possible proprietary extensions, I haven't seen any of these yet)\n//\n// Changing data inside Exif entries is NOT supported yet (modifying `entry` object inside callback may break stuff).\n//\n// If Exif wasn't found anywhere (before start of the image data, SOS),\n// iterator is never executed, and original JPEG is returned as is.\n//\nmodule.exports.jpeg_exif_tags_filter = function (jpeg_bin, on_exif_entry) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_exif_entry !== 'function') {\n throw error('Invalid argument (on_exif_entry), Function expected', 'EINVAL');\n }\n\n var stop_search = false;\n\n return module.exports.jpeg_segments_filter(jpeg_bin, function (segment) {\n if (stop_search) return;\n if (segment.code === 0xDA /* SOS */) stop_search = true;\n\n // look for APP1 segment and compare header with 'Exif\\0\\0'\n if (segment.code === 0xE1 && segment.length >= 10 &&\n jpeg_bin[segment.offset + 4] === 0x45 && jpeg_bin[segment.offset + 5] === 0x78 &&\n jpeg_bin[segment.offset + 6] === 0x69 && jpeg_bin[segment.offset + 7] === 0x66 &&\n jpeg_bin[segment.offset + 8] === 0x00 && jpeg_bin[segment.offset + 9] === 0x00) {\n\n var new_exif = new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length)\n .filter(on_exif_entry);\n if (!new_exif) return false;\n\n var header = new Uint8Array(10);\n\n header.set(jpeg_bin.slice(segment.offset, segment.offset + 10));\n header[2] = ((new_exif.length + 8) >>> 8) & 0xFF;\n header[3] = (new_exif.length + 8) & 0xFF;\n\n stop_search = true;\n return [ header, new_exif ];\n }\n });\n};\n\n\n// Inserts a custom comment marker segment into JPEG file.\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - comment: String\n//\n// Comment is inserted after first two bytes (FFD8, SOI).\n//\n// If JFIF (APP0) marker exists immediately after SOI (as mandated by the JFIF\n// spec), we insert comment after it instead.\n//\nmodule.exports.jpeg_add_comment = function (jpeg_bin, comment) {\n var comment_inserted = false, segment_count = 0;\n\n return module.exports.jpeg_segments_filter(jpeg_bin, function (segment) {\n segment_count++;\n if (segment_count === 1 && segment.code === 0xD8 /* SOI */) return;\n if (segment_count === 2 && segment.code === 0xE0 /* APP0 */) return;\n\n if (comment_inserted) return;\n comment = utf8_encode(comment);\n\n // comment segment\n var csegment = new Uint8Array(5 + comment.length);\n var offset = 0;\n\n csegment[offset++] = 0xFF;\n csegment[offset++] = 0xFE;\n csegment[offset++] = ((comment.length + 3) >>> 8) & 0xFF;\n csegment[offset++] = (comment.length + 3) & 0xFF;\n\n comment.split('').forEach(function (c) {\n csegment[offset++] = c.charCodeAt(0) & 0xFF;\n });\n\n csegment[offset++] = 0;\n comment_inserted = true;\n\n return [ csegment, jpeg_bin.subarray(segment.offset, segment.offset + segment.length) ];\n });\n};\n});\n\nfunction jpeg_patch_exif(env) {\n return this._getUint8Array(env.blob).then(function (data) {\n env.is_jpeg = image_traverse.is_jpeg(data);\n\n if (!env.is_jpeg) return Promise.resolve(env);\n\n env.orig_blob = env.blob;\n\n try {\n var exif_is_big_endian, orientation_offset;\n\n /* eslint-disable consistent-return */\n image_traverse.jpeg_exif_tags_each(data, function (entry) {\n if (entry.ifd === 0 && entry.tag === 0x112 && Array.isArray(entry.value)) {\n env.orientation = entry.value[0] || 1;\n exif_is_big_endian = entry.is_big_endian;\n orientation_offset = entry.data_offset;\n return false;\n }\n });\n\n if (orientation_offset) {\n var orientation_patch = exif_is_big_endian ?\n new Uint8Array([ 0, 1 ]) :\n new Uint8Array([ 1, 0 ]);\n\n env.blob = new Blob([\n data.slice(0, orientation_offset),\n orientation_patch,\n data.slice(orientation_offset + 2)\n ], { type: 'image/jpeg' });\n }\n } catch (_) {}\n\n return env;\n });\n}\n\n\nfunction jpeg_rotate_canvas(env) {\n if (!env.is_jpeg) return Promise.resolve(env);\n\n var orientation = env.orientation - 1;\n if (!orientation) return Promise.resolve(env);\n\n var canvas;\n\n if (orientation & 4) {\n canvas = this.pica.options.createCanvas(env.out_canvas.height, env.out_canvas.width);\n } else {\n canvas = this.pica.options.createCanvas(env.out_canvas.width, env.out_canvas.height);\n }\n\n var ctx = canvas.getContext('2d');\n\n ctx.save();\n\n if (orientation & 1) ctx.transform(-1, 0, 0, 1, canvas.width, 0);\n if (orientation & 2) ctx.transform(-1, 0, 0, -1, canvas.width, canvas.height);\n if (orientation & 4) ctx.transform(0, 1, 1, 0, 0, 0);\n\n ctx.drawImage(env.out_canvas, 0, 0);\n ctx.restore();\n\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n env.out_canvas.width = env.out_canvas.height = 0;\n\n env.out_canvas = canvas;\n\n return Promise.resolve(env);\n}\n\n\nfunction jpeg_attach_orig_segments(env) {\n if (!env.is_jpeg) return Promise.resolve(env);\n\n return Promise.all([\n this._getUint8Array(env.blob),\n this._getUint8Array(env.out_blob)\n ]).then(function (res) {\n var data = res[0];\n var data_out = res[1];\n\n if (!image_traverse.is_jpeg(data)) return Promise.resolve(env);\n\n var segments = [];\n\n image_traverse.jpeg_segments_each(data, function (segment) {\n if (segment.code === 0xDA /* SOS */) return false;\n segments.push(segment);\n });\n\n segments = segments\n .filter(function (segment) {\n // Drop ICC_PROFILE\n //\n if (segment.code === 0xE2) return false;\n\n // Keep all APPn segments excluding APP2 (ICC_PROFILE),\n // remove others because most of them depend on image data (DCT and such).\n //\n // APP0 - JFIF, APP1 - Exif, the rest are photoshop metadata and such\n //\n // See full list at https://www.w3.org/Graphics/JPEG/itu-t81.pdf (table B.1 on page 32)\n //\n if (segment.code >= 0xE0 && segment.code < 0xF0) return true;\n\n // Keep comments\n //\n if (segment.code === 0xFE) return true;\n\n return false;\n })\n .map(function (segment) {\n return data.slice(segment.offset, segment.offset + segment.length);\n });\n\n env.out_blob = new Blob(\n // intentionally omitting expected JFIF segment (offset 2 to 20)\n [ data_out.slice(0, 2) ].concat(segments).concat([ data_out.slice(20) ]),\n { type: 'image/jpeg' }\n );\n\n return env;\n });\n}\n\n\nfunction assign(reducer) {\n reducer.before('_blob_to_image', jpeg_patch_exif);\n reducer.after('_transform', jpeg_rotate_canvas);\n reducer.after('_create_blob', jpeg_attach_orig_segments);\n}\n\n\nvar jpeg_patch_exif_1 = jpeg_patch_exif;\nvar jpeg_rotate_canvas_1 = jpeg_rotate_canvas;\nvar jpeg_attach_orig_segments_1 = jpeg_attach_orig_segments;\nvar assign_1 = assign;\n\nvar jpeg_plugins = {\n\tjpeg_patch_exif: jpeg_patch_exif_1,\n\tjpeg_rotate_canvas: jpeg_rotate_canvas_1,\n\tjpeg_attach_orig_segments: jpeg_attach_orig_segments_1,\n\tassign: assign_1\n};\n\nfunction ImageBlobReduce(options) {\n if (!(this instanceof ImageBlobReduce)) return new ImageBlobReduce(options);\n\n options = options || {};\n\n this.pica = options.pica || pica({});\n this.initialized = false;\n\n this.utils = utils;\n}\n\n\nImageBlobReduce.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\nImageBlobReduce.prototype.init = function () {\n this.use(jpeg_plugins.assign);\n};\n\n\nImageBlobReduce.prototype.toBlob = function (blob, options) {\n var opts = utils.assign({ max: Infinity }, options);\n var env = {\n blob: blob,\n opts: opts\n };\n\n if (!this.initialized) {\n this.init();\n this.initialized = true;\n }\n\n return Promise.resolve(env)\n .then(this._blob_to_image)\n .then(this._calculate_size)\n .then(this._transform)\n .then(this._cleanup)\n .then(this._create_blob)\n .then(function (_env) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n _env.out_canvas.width = _env.out_canvas.height = 0;\n\n return _env.out_blob;\n });\n};\n\n\nImageBlobReduce.prototype.toCanvas = function (blob, options) {\n var opts = utils.assign({ max: Infinity }, options);\n var env = {\n blob: blob,\n opts: opts\n };\n\n if (!this.initialized) {\n this.init();\n this.initialized = true;\n }\n\n return Promise.resolve(env)\n .then(this._blob_to_image)\n .then(this._calculate_size)\n .then(this._transform)\n .then(this._cleanup)\n .then(function (_env) { return _env.out_canvas; });\n};\n\n\nImageBlobReduce.prototype.before = function (method_name, fn) {\n if (!this[method_name]) throw new Error('Method \"' + method_name + '\" does not exist');\n if (typeof fn !== 'function') throw new Error('Invalid argument \"fn\", function expected');\n\n var old_fn = this[method_name];\n var self = this;\n\n this[method_name] = function (env) {\n return fn.call(self, env).then(function (_env) {\n return old_fn.call(self, _env);\n });\n };\n\n return this;\n};\n\n\nImageBlobReduce.prototype.after = function (method_name, fn) {\n if (!this[method_name]) throw new Error('Method \"' + method_name + '\" does not exist');\n if (typeof fn !== 'function') throw new Error('Invalid argument \"fn\", function expected');\n\n var old_fn = this[method_name];\n var self = this;\n\n this[method_name] = function (env) {\n return old_fn.call(self, env).then(function (_env) {\n return fn.call(self, _env);\n });\n };\n\n return this;\n};\n\n\nImageBlobReduce.prototype._blob_to_image = function (env) {\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n env.image = document.createElement('img');\n env.image_url = URL.createObjectURL(env.blob);\n env.image.src = env.image_url;\n\n return new Promise(function (resolve, reject) {\n env.image.onerror = function () { reject(new Error('ImageBlobReduce: failed to create Image() from blob')); };\n env.image.onload = function () { resolve(env); };\n });\n};\n\n\nImageBlobReduce.prototype._calculate_size = function (env) {\n //\n // Note, if your need not \"symmetric\" resize logic, you MUST check\n // `env.orientation` (set by plugins) and swap width/height appropriately.\n //\n var scale_factor = env.opts.max / Math.max(env.image.width, env.image.height);\n\n if (scale_factor > 1) scale_factor = 1;\n\n env.transform_width = Math.max(Math.round(env.image.width * scale_factor), 1);\n env.transform_height = Math.max(Math.round(env.image.height * scale_factor), 1);\n\n // Info for user plugins, to check if scaling applied\n env.scale_factor = scale_factor;\n\n return Promise.resolve(env);\n};\n\n\nImageBlobReduce.prototype._transform = function (env) {\n env.out_canvas = this.pica.options.createCanvas(env.transform_width, env.transform_height);\n\n // Dim env temporary vars to prohibit use and avoid confusion when orientation\n // changed. You should take real size from canvas.\n env.transform_width = null;\n env.transform_height = null;\n\n // By default use alpha for png only\n var pica_opts = { alpha: env.blob.type === 'image/png' };\n\n // Extract pica options if been passed\n this.utils.assign(pica_opts, this.utils.pick_pica_resize_options(env.opts));\n\n return this.pica\n .resize(env.image, env.out_canvas, pica_opts)\n .then(function () { return env; });\n};\n\n\nImageBlobReduce.prototype._cleanup = function (env) {\n env.image.src = '';\n env.image = null;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n if (URL.revokeObjectURL) URL.revokeObjectURL(env.image_url);\n\n env.image_url = null;\n\n return Promise.resolve(env);\n};\n\n\nImageBlobReduce.prototype._create_blob = function (env) {\n return this.pica.toBlob(env.out_canvas, env.blob.type)\n .then(function (blob) {\n env.out_blob = blob;\n return env;\n });\n};\n\n\nImageBlobReduce.prototype._getUint8Array = function (blob) {\n if (blob.arrayBuffer) {\n return blob.arrayBuffer().then(function (buf) {\n return new Uint8Array(buf);\n });\n }\n\n return new Promise(function (resolve, reject) {\n var fr = new FileReader();\n\n fr.readAsArrayBuffer(blob);\n\n fr.onload = function () { resolve(new Uint8Array(fr.result)); };\n fr.onerror = function () {\n reject(new Error('ImageBlobReduce: failed to load data from input blob'));\n fr.abort();\n };\n fr.onabort = function () {\n reject(new Error('ImageBlobReduce: failed to load data from input blob (aborted)'));\n };\n });\n};\n\n\nImageBlobReduce.pica = pica;\n\nvar imageBlobReduce = ImageBlobReduce;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (imageBlobReduce);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ltYWdlLWJsb2ItcmVkdWNlL2Rpc3QvaW1hZ2UtYmxvYi1yZWR1Y2UuZXNtLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isc0JBQXNCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGNBQWMscUJBQXFCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsVUFBVSxVQUFVLDBEQUEwRCx3QkFBd0Isb0JBQW9CLDhDQUE4QyxrQ0FBa0MsWUFBWSxZQUFZLG1DQUFtQyxpQkFBaUIsZUFBZSx1QkFBdUIsb0JBQW9CLGtFQUFrRSxXQUFXLFlBQVksU0FBUyxTQUFTLEtBQUs7O0FBRXJpQjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUMsRUFBRSxtRUFBbUU7QUFDdEU7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QixpQkFBaUIsYUFBYTtBQUM5QixtQkFBbUI7O0FBRW5CLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QixhQUFhLGdCQUFnQjtBQUM3QiwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCLGlCQUFpQixhQUFhO0FBQzlCLG1CQUFtQjs7QUFFbkIsb0JBQW9CLGVBQWU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCLGFBQWEsZ0JBQWdCO0FBQzdCLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTs7QUFFQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSwwREFBMEQ7O0FBRTdEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSx1Q0FBdUM7O0FBRTFDLG1EQUFtRDs7O0FBR25EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RCxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQixrQ0FBa0MsZ0JBQWdCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04saUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRCxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLGlDQUFpQyxzQkFBc0I7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsMkNBQTJDOztBQUUzQywyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUMsRUFBRSx5QkFBeUI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsQ0FBQyxHQUFHOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLGdCQUFnQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFLHNCQUFzQjs7QUFFdEI7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEseURBQXlEO0FBQ3pEO0FBQ0E7OztBQUdBO0FBQ0EscURBQXFEOztBQUVyRDtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0EsOEVBQThFO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDLEVBQUUsd0JBQXdCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLDZFQUE2RTs7QUFFaEY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFVBQVU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFVBQVU7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUEsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdEOztBQUV4RCxnRUFBZ0U7O0FBRWhFLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyxFQUFFLGlCQUFpQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEOztBQUV4RCxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRyxHQUFHOzs7QUFHTjtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQSw2R0FBNkc7O0FBRTdHO0FBQ0EseUZBQXlGOztBQUV6RjtBQUNBOztBQUVBLENBQUMsR0FBRztBQUNKOztBQUVBOztBQUVBLENBQUMsR0FBRzs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQSwrRUFBK0U7QUFDL0U7O0FBRUE7QUFDQSx1RkFBdUY7QUFDdkY7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0ZBQStGOztBQUUvRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBLG1CQUFtQiwyQkFBMkI7QUFDOUMscUJBQXFCLDBCQUEwQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDs7QUFFQSxrRUFBa0U7QUFDbEUsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJEQUEyRDtBQUMzRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBLENBQUMsRUFBRSxjQUFjO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxZQUFZO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsV0FBVztBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRzs7O0FBR0o7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxzQkFBc0IsZ0NBQWdDOztBQUV0RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsd0JBQXdCO0FBQ25ELEdBQUc7QUFDSCx3QkFBd0IsY0FBYzs7QUFFdEM7QUFDQTs7O0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0NBQWdDO0FBQ3JFOztBQUVBO0FBQ0EsMkNBQTJDO0FBQzNDLEtBQUs7QUFDTDs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQSxDQUFDLEVBQUUsZ0VBQWdFOzs7QUFHbkU7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLEdBQUc7OztBQUdKOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQyxHQUFHO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEMsT0FBTztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLG1CQUFtQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckI7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQSxzREFBc0Q7QUFDdEQsK0NBQStDO0FBQy9DLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxZQUFZLEdBQUc7QUFDZjs7QUFFQTs7QUFFQSxpQ0FBaUMseUJBQXlCO0FBQzFELG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUMsR0FBRzs7QUFFSixrQ0FBa0M7O0FBRWxDLDhCQUE4Qjs7QUFFOUIsa0RBQWtELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Q7O0FBRTdTLHVDQUF1Qyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxvQkFBb0I7O0FBRXpLLHlDQUF5QywwR0FBMEcsd0JBQXdCLGVBQWUsZUFBZSxnQkFBZ0IsWUFBWSxNQUFNLHdCQUF3QiwrQkFBK0IsYUFBYSxxQkFBcUIsdUNBQXVDLGNBQWMsV0FBVyxZQUFZLFVBQVUsTUFBTSxtREFBbUQsVUFBVSxzQkFBc0I7O0FBRW5mLGdDQUFnQzs7QUFFaEM7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNENBQTRDO0FBQzVDOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQSwwQkFBMEIsa0NBQWtDO0FBQzVELDREQUE0RDtBQUM1RDs7QUFFQTtBQUNBLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscURBQXFEOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBLGlDQUFpQzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUcsR0FBRztBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUcsR0FBRzs7QUFFTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRTtBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztB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QUFHQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxxRkFBcUY7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLDREQUE0RDtBQUNqRjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esc0JBQXNCLFNBQVM7QUFDL0I7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw0QkFBNEIsZUFBZTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSw0QkFBNEIsZUFBZTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0QyxxQ0FBcUM7QUFDckMsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixhQUFhO0FBQ3JDOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7O0FBRUEsaUVBQWUsZUFBZSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pbWFnZS1ibG9iLXJlZHVjZS9kaXN0L2ltYWdlLWJsb2ItcmVkdWNlLmVzbS5tanM/NzI2ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qISBpbWFnZS1ibG9iLXJlZHVjZSAzLjAuMSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2ltYWdlLWJsb2ItcmVkdWNlIEBsaWNlbnNlIE1JVCAqL1xudmFyIGFzc2lnbiQxID0gZnVuY3Rpb24gYXNzaWduKHRvKSB7XG4gIHZhciBmcm9tO1xuXG4gIGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG4gICAgZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG87XG59O1xuXG5cbmZ1bmN0aW9uIHBpY2soZnJvbSwgcHJvcHMpIHtcbiAgdmFyIHRvID0ge307XG5cbiAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB0b1trZXldID0gZnJvbVtrZXldO1xuICB9KTtcblxuICByZXR1cm4gdG87XG59XG5cblxuZnVuY3Rpb24gcGlja19waWNhX3Jlc2l6ZV9vcHRpb25zKGZyb20pIHtcbiAgcmV0dXJuIHBpY2soZnJvbSwgW1xuICAgICdhbHBoYScsXG4gICAgJ3Vuc2hhcnBBbW91bnQnLFxuICAgICd1bnNoYXJwUmFkaXVzJyxcbiAgICAndW5zaGFycFRocmVzaG9sZCcsXG4gICAgJ2NhbmNlbFRva2VuJ1xuICBdKTtcbn1cblxuXG52YXIgcGlja18xID0gcGljaztcbnZhciBwaWNrX3BpY2FfcmVzaXplX29wdGlvbnNfMSA9IHBpY2tfcGljYV9yZXNpemVfb3B0aW9ucztcblxudmFyIHV0aWxzID0ge1xuXHRhc3NpZ246IGFzc2lnbiQxLFxuXHRwaWNrOiBwaWNrXzEsXG5cdHBpY2tfcGljYV9yZXNpemVfb3B0aW9uczogcGlja19waWNhX3Jlc2l6ZV9vcHRpb25zXzFcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuKSB7XG4gIHZhciBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH07XG5cdHJldHVybiBmbihtb2R1bGUsIG1vZHVsZS5leHBvcnRzKSwgbW9kdWxlLmV4cG9ydHM7XG59XG5cbmZ1bmN0aW9uIGNvbW1vbmpzUmVxdWlyZSAodGFyZ2V0KSB7XG5cdHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgXCInICsgdGFyZ2V0ICsgJ1wiLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIGJlaGF2ZSBwcm9wZXJseS4nKTtcbn1cblxuLyohXG5cbnBpY2Fcbmh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYVxuXG4qL1xuXG52YXIgcGljYSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbihmdW5jdGlvbihmKXt7bW9kdWxlLmV4cG9ydHM9ZigpO319KShmdW5jdGlvbigpe3JldHVybiAoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjb21tb25qc1JlcXVpcmUmJmNvbW1vbmpzUmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KTt9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgY29tbW9uanNSZXF1aXJlJiZjb21tb25qc1JlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxudmFyIGluaGVyaXRzID0gX2RlcmVxXygnaW5oZXJpdHMnKTtcblxudmFyIE11bHRpbWF0aCA9IF9kZXJlcV8oJ211bHRpbWF0aCcpO1xuXG52YXIgbW1fdW5zaGFycF9tYXNrID0gX2RlcmVxXygnLi9tbV91bnNoYXJwX21hc2snKTtcblxudmFyIG1tX3Jlc2l6ZSA9IF9kZXJlcV8oJy4vbW1fcmVzaXplJyk7XG5cbmZ1bmN0aW9uIE1hdGhMaWIocmVxdWVzdGVkX2ZlYXR1cmVzKSB7XG4gIHZhciBfX3JlcXVlc3RlZF9mZWF0dXJlcyA9IHJlcXVlc3RlZF9mZWF0dXJlcyB8fCBbXTtcblxuICB2YXIgZmVhdHVyZXMgPSB7XG4gICAganM6IF9fcmVxdWVzdGVkX2ZlYXR1cmVzLmluZGV4T2YoJ2pzJykgPj0gMCxcbiAgICB3YXNtOiBfX3JlcXVlc3RlZF9mZWF0dXJlcy5pbmRleE9mKCd3YXNtJykgPj0gMFxuICB9O1xuICBNdWx0aW1hdGguY2FsbCh0aGlzLCBmZWF0dXJlcyk7XG4gIHRoaXMuZmVhdHVyZXMgPSB7XG4gICAganM6IGZlYXR1cmVzLmpzLFxuICAgIHdhc206IGZlYXR1cmVzLndhc20gJiYgdGhpcy5oYXNfd2FzbSgpXG4gIH07XG4gIHRoaXMudXNlKG1tX3Vuc2hhcnBfbWFzayk7XG4gIHRoaXMudXNlKG1tX3Jlc2l6ZSk7XG59XG5cbmluaGVyaXRzKE1hdGhMaWIsIE11bHRpbWF0aCk7XG5cbk1hdGhMaWIucHJvdG90eXBlLnJlc2l6ZUFuZFVuc2hhcnAgPSBmdW5jdGlvbiByZXNpemVBbmRVbnNoYXJwKG9wdGlvbnMsIGNhY2hlKSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLnJlc2l6ZShvcHRpb25zLCBjYWNoZSk7XG5cbiAgaWYgKG9wdGlvbnMudW5zaGFycEFtb3VudCkge1xuICAgIHRoaXMudW5zaGFycF9tYXNrKHJlc3VsdCwgb3B0aW9ucy50b1dpZHRoLCBvcHRpb25zLnRvSGVpZ2h0LCBvcHRpb25zLnVuc2hhcnBBbW91bnQsIG9wdGlvbnMudW5zaGFycFJhZGl1cywgb3B0aW9ucy51bnNoYXJwVGhyZXNob2xkKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGhMaWI7XG5cbn0se1wiLi9tbV9yZXNpemVcIjo0LFwiLi9tbV91bnNoYXJwX21hc2tcIjo5LFwiaW5oZXJpdHNcIjoxOSxcIm11bHRpbWF0aFwiOjIwfV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vL3ZhciBGSVhFRF9GUkFDX0JJVFMgPSAxNDtcblxuZnVuY3Rpb24gY2xhbXBUbzgoaSkge1xuICByZXR1cm4gaSA8IDAgPyAwIDogaSA+IDI1NSA/IDI1NSA6IGk7XG59IC8vIENvbnZvbHZlIGltYWdlIGluIGhvcml6b250YWwgZGlyZWN0aW9ucyBhbmQgdHJhbnNwb3NlIG91dHB1dC4gSW4gdGhlb3J5LFxuLy8gdHJhbnNwb3NlIGFsbG93OlxuLy9cbi8vIC0gdXNlIHRoZSBzYW1lIGNvbnZvbHZlciBmb3IgYm90aCBwYXNzZXMgKHRoaXMgZmFpbHMgZHVlIGRpZmZlcmVudFxuLy8gICB0eXBlcyBvZiBpbnB1dCBhcnJheSBhbmQgdGVtcG9yYXJ5IGJ1ZmZlcilcbi8vIC0gbWFraW5nIHZlcnRpY2FsIHBhc3MgYnkgaG9yaXNvbmx0YWwgbGluZXMgaW5wcm92ZSBDUFUgY2FjaGUgdXNlLlxuLy9cbi8vIEJ1dCBpbiByZWFsIGxpZmUgdGhpcyBkb2Vzbid0IHdvcmsgOilcbi8vXG5cblxuZnVuY3Rpb24gY29udm9sdmVIb3Jpem9udGFsbHkoc3JjLCBkZXN0LCBzcmNXLCBzcmNILCBkZXN0VywgZmlsdGVycykge1xuICB2YXIgciwgZywgYiwgYTtcbiAgdmFyIGZpbHRlclB0ciwgZmlsdGVyU2hpZnQsIGZpbHRlclNpemU7XG4gIHZhciBzcmNQdHIsIHNyY1ksIGRlc3RYLCBmaWx0ZXJWYWw7XG4gIHZhciBzcmNPZmZzZXQgPSAwLFxuICAgICAgZGVzdE9mZnNldCA9IDA7IC8vIEZvciBlYWNoIHJvd1xuXG4gIGZvciAoc3JjWSA9IDA7IHNyY1kgPCBzcmNIOyBzcmNZKyspIHtcbiAgICBmaWx0ZXJQdHIgPSAwOyAvLyBBcHBseSBwcmVjb21wdXRlZCBmaWx0ZXJzIHRvIGVhY2ggZGVzdGluYXRpb24gcm93IHBvaW50XG5cbiAgICBmb3IgKGRlc3RYID0gMDsgZGVzdFggPCBkZXN0VzsgZGVzdFgrKykge1xuICAgICAgLy8gR2V0IHRoZSBmaWx0ZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBjdXJyZW50IG91dHB1dCBwaXhlbC5cbiAgICAgIGZpbHRlclNoaWZ0ID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107XG4gICAgICBmaWx0ZXJTaXplID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107XG4gICAgICBzcmNQdHIgPSBzcmNPZmZzZXQgKyBmaWx0ZXJTaGlmdCAqIDQgfCAwO1xuICAgICAgciA9IGcgPSBiID0gYSA9IDA7IC8vIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIHJvdyB0byBnZXQgdGhlIGRlc3RpbmF0aW9uIHBpeGVsIHIsIGcsIGIsIGFcblxuICAgICAgZm9yICg7IGZpbHRlclNpemUgPiAwOyBmaWx0ZXJTaXplLS0pIHtcbiAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107IC8vIFVzZSByZXZlcnNlIG9yZGVyIHRvIHdvcmthcm91bmQgZGVvcHRzIGluIG9sZCB2OCAobm9kZSB2LjEwKVxuICAgICAgICAvLyBCaWcgdGhhbmtzIHRvIEBtcmFsZXBoIChWeWFjaGVzbGF2IEVnb3JvdikgZm9yIHRoZSB0aXAuXG5cbiAgICAgICAgYSA9IGEgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyICsgM10gfCAwO1xuICAgICAgICBiID0gYiArIGZpbHRlclZhbCAqIHNyY1tzcmNQdHIgKyAyXSB8IDA7XG4gICAgICAgIGcgPSBnICsgZmlsdGVyVmFsICogc3JjW3NyY1B0ciArIDFdIHwgMDtcbiAgICAgICAgciA9IHIgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyXSB8IDA7XG4gICAgICAgIHNyY1B0ciA9IHNyY1B0ciArIDQgfCAwO1xuICAgICAgfSAvLyBCcmluZyB0aGlzIHZhbHVlIGJhY2sgaW4gcmFuZ2UuIEFsbCBvZiB0aGUgZmlsdGVyIHNjYWxpbmcgZmFjdG9yc1xuICAgICAgLy8gYXJlIGluIGZpeGVkIHBvaW50IHdpdGggRklYRURfRlJBQ19CSVRTIGJpdHMgb2YgZnJhY3Rpb25hbCBwYXJ0LlxuICAgICAgLy9cbiAgICAgIC8vICghKSBBZGQgMS8yIG9mIHZhbHVlIGJlZm9yZSBjbGFtcGluZyB0byBnZXQgcHJvcGVyIHJvdW5kaW5nLiBJbiBvdGhlclxuICAgICAgLy8gY2FzZSBicmlnaHRuZXNzIGxvc3Mgd2lsbCBiZSBub3RpY2VhYmxlIGlmIHlvdSByZXNpemUgaW1hZ2Ugd2l0aCB3aGl0ZVxuICAgICAgLy8gYm9yZGVyIGFuZCBwbGFjZSBpdCBvbiB3aGl0ZSBiYWNrZ3JvdW5kLlxuICAgICAgLy9cblxuXG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAzXSA9IGNsYW1wVG84KGEgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGNsYW1wVG84KGIgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IGNsYW1wVG84KGcgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gY2xhbXBUbzgociArICgxIDw8IDEzKSA+PiAxNFxuICAgICAgLypGSVhFRF9GUkFDX0JJVFMqL1xuICAgICAgKTtcbiAgICAgIGRlc3RPZmZzZXQgPSBkZXN0T2Zmc2V0ICsgc3JjSCAqIDQgfCAwO1xuICAgIH1cblxuICAgIGRlc3RPZmZzZXQgPSAoc3JjWSArIDEpICogNCB8IDA7XG4gICAgc3JjT2Zmc2V0ID0gKHNyY1kgKyAxKSAqIHNyY1cgKiA0IHwgMDtcbiAgfVxufSAvLyBUZWNobmljYWxseSwgY29udm9sdmVycyBhcmUgdGhlIHNhbWUuIEJ1dCBpbnB1dCBhcnJheSBhbmQgdGVtcG9yYXJ5XG4vLyBidWZmZXIgY2FuIGJlIG9mIGRpZmZlcmVudCB0eXBlIChlc3BlY2lhbGx5LCBpbiBvbGQgYnJvd3NlcnMpLiBTbyxcbi8vIGtlZXAgY29kZSBpbiBzZXBhcmF0ZSBmdW5jdGlvbnMgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb25zICYgc3BlZWQgbG9zcy5cblxuXG5mdW5jdGlvbiBjb252b2x2ZVZlcnRpY2FsbHkoc3JjLCBkZXN0LCBzcmNXLCBzcmNILCBkZXN0VywgZmlsdGVycykge1xuICB2YXIgciwgZywgYiwgYTtcbiAgdmFyIGZpbHRlclB0ciwgZmlsdGVyU2hpZnQsIGZpbHRlclNpemU7XG4gIHZhciBzcmNQdHIsIHNyY1ksIGRlc3RYLCBmaWx0ZXJWYWw7XG4gIHZhciBzcmNPZmZzZXQgPSAwLFxuICAgICAgZGVzdE9mZnNldCA9IDA7IC8vIEZvciBlYWNoIHJvd1xuXG4gIGZvciAoc3JjWSA9IDA7IHNyY1kgPCBzcmNIOyBzcmNZKyspIHtcbiAgICBmaWx0ZXJQdHIgPSAwOyAvLyBBcHBseSBwcmVjb21wdXRlZCBmaWx0ZXJzIHRvIGVhY2ggZGVzdGluYXRpb24gcm93IHBvaW50XG5cbiAgICBmb3IgKGRlc3RYID0gMDsgZGVzdFggPCBkZXN0VzsgZGVzdFgrKykge1xuICAgICAgLy8gR2V0IHRoZSBmaWx0ZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBjdXJyZW50IG91dHB1dCBwaXhlbC5cbiAgICAgIGZpbHRlclNoaWZ0ID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107XG4gICAgICBmaWx0ZXJTaXplID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107XG4gICAgICBzcmNQdHIgPSBzcmNPZmZzZXQgKyBmaWx0ZXJTaGlmdCAqIDQgfCAwO1xuICAgICAgciA9IGcgPSBiID0gYSA9IDA7IC8vIEFwcGx5IHRoZSBmaWx0ZXIgdG8gdGhlIHJvdyB0byBnZXQgdGhlIGRlc3RpbmF0aW9uIHBpeGVsIHIsIGcsIGIsIGFcblxuICAgICAgZm9yICg7IGZpbHRlclNpemUgPiAwOyBmaWx0ZXJTaXplLS0pIHtcbiAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyc1tmaWx0ZXJQdHIrK107IC8vIFVzZSByZXZlcnNlIG9yZGVyIHRvIHdvcmthcm91bmQgZGVvcHRzIGluIG9sZCB2OCAobm9kZSB2LjEwKVxuICAgICAgICAvLyBCaWcgdGhhbmtzIHRvIEBtcmFsZXBoIChWeWFjaGVzbGF2IEVnb3JvdikgZm9yIHRoZSB0aXAuXG5cbiAgICAgICAgYSA9IGEgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyICsgM10gfCAwO1xuICAgICAgICBiID0gYiArIGZpbHRlclZhbCAqIHNyY1tzcmNQdHIgKyAyXSB8IDA7XG4gICAgICAgIGcgPSBnICsgZmlsdGVyVmFsICogc3JjW3NyY1B0ciArIDFdIHwgMDtcbiAgICAgICAgciA9IHIgKyBmaWx0ZXJWYWwgKiBzcmNbc3JjUHRyXSB8IDA7XG4gICAgICAgIHNyY1B0ciA9IHNyY1B0ciArIDQgfCAwO1xuICAgICAgfSAvLyBCcmluZyB0aGlzIHZhbHVlIGJhY2sgaW4gcmFuZ2UuIEFsbCBvZiB0aGUgZmlsdGVyIHNjYWxpbmcgZmFjdG9yc1xuICAgICAgLy8gYXJlIGluIGZpeGVkIHBvaW50IHdpdGggRklYRURfRlJBQ19CSVRTIGJpdHMgb2YgZnJhY3Rpb25hbCBwYXJ0LlxuICAgICAgLy9cbiAgICAgIC8vICghKSBBZGQgMS8yIG9mIHZhbHVlIGJlZm9yZSBjbGFtcGluZyB0byBnZXQgcHJvcGVyIHJvdW5kaW5nLiBJbiBvdGhlclxuICAgICAgLy8gY2FzZSBicmlnaHRuZXNzIGxvc3Mgd2lsbCBiZSBub3RpY2VhYmxlIGlmIHlvdSByZXNpemUgaW1hZ2Ugd2l0aCB3aGl0ZVxuICAgICAgLy8gYm9yZGVyIGFuZCBwbGFjZSBpdCBvbiB3aGl0ZSBiYWNrZ3JvdW5kLlxuICAgICAgLy9cblxuXG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAzXSA9IGNsYW1wVG84KGEgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGNsYW1wVG84KGIgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IGNsYW1wVG84KGcgKyAoMSA8PCAxMykgPj4gMTRcbiAgICAgIC8qRklYRURfRlJBQ19CSVRTKi9cbiAgICAgICk7XG4gICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gY2xhbXBUbzgociArICgxIDw8IDEzKSA+PiAxNFxuICAgICAgLypGSVhFRF9GUkFDX0JJVFMqL1xuICAgICAgKTtcbiAgICAgIGRlc3RPZmZzZXQgPSBkZXN0T2Zmc2V0ICsgc3JjSCAqIDQgfCAwO1xuICAgIH1cblxuICAgIGRlc3RPZmZzZXQgPSAoc3JjWSArIDEpICogNCB8IDA7XG4gICAgc3JjT2Zmc2V0ID0gKHNyY1kgKyAxKSAqIHNyY1cgKiA0IHwgMDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udm9sdmVIb3Jpem9udGFsbHk6IGNvbnZvbHZlSG9yaXpvbnRhbGx5LFxuICBjb252b2x2ZVZlcnRpY2FsbHk6IGNvbnZvbHZlVmVydGljYWxseVxufTtcblxufSx7fV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQURBWmtlV3hwYm1zQUFBQUFBQUVYQTJBQUFHQUdmMzkvZjM5L0FHQUhmMzkvZjM5L2Z3QUNEd0VEWlc1MkJtMWxiVzl5ZVFJQUFBTUVBd0FCQWdZR0FYOEFRUUFMQjFjRkVWOWZkMkZ6YlY5allXeHNYMk4wYjNKekFBQUlZMjl1ZG05c2RtVUFBUXBqYjI1MmIyeDJaVWhXQUFJTVgxOWtjMjlmYUdGdVpHeGxBd0FZWDE5M1lYTnRYMkZ3Y0d4NVgyUmhkR0ZmY21Wc2IyTnpBQUFLN0FNREF3QUJDOFlEQVE5L0FrQWdBMFVOQUNBRVJRMEFBMEFnRENFTlFRQWhFMEVBSVFjRFFDQUhRUUpxSVFZQ2Z5QUhRUUYwSUFWcUlnY3VBUUlpRkVVRVFFR0F3QUFoQ0VHQXdBQWhDVUdBd0FBaENrR0F3QUFoQ3lBR0RBRUxJQklnQnk0QkFHb2hDRUVBSVFzZ0ZDRUhRUUFoRGlBR0lRbEJBQ0VQUVFBaEVBTkFJQVVnQ1VFQmRHb3VBUUFpRVNBQUlBaEJBblJxS0FJQUlncEJHSFpzSUJCcUlSQWdDa0gvQVhFZ0VXd2dDMm9oQ3lBS1FSQjJRZjhCY1NBUmJDQVBhaUVQSUFwQkNIWkIvd0Z4SUJGc0lBNXFJUTRnQ0VFQmFpRUlJQWxCQVdvaENTQUhRUUZySWdjTkFBc2dDMEdBUUdzaENDQU9RWUJBYXlFSklBOUJnRUJySVFvZ0VFR0FRR3NoQ3lBR0lCUnFDeUVISUFFZ0RVRUNkR29nQ1VFT2RTSUdRZjhCSUFaQi93RklHeUlHUVFBZ0JrRUFTaHRCQ0hSQmdQNERjU0FLUVE1MUlnWkIvd0VnQmtIL0FVZ2JJZ1pCQUNBR1FRQktHMEVRZEVHQWdQd0hjU0FMUVE1MUlnWkIvd0VnQmtIL0FVZ2JJZ1pCQUNBR1FRQktHMEVZZEhKeUlBaEJEblVpQmtIL0FTQUdRZjhCU0JzaUJrRUFJQVpCQUVvYmNqWUNBQ0FESUExcUlRMGdFMEVCYWlJVElBUkhEUUFMSUF4QkFXb2lEQ0FDYkNFU0lBTWdERWNOQUFzTEN4NEFRUUFnQWlBRElBUWdCU0FBRUFFZ0FrRUFJQVFnQlNBR0lBRVFBUXM9JztcblxufSx7fV0sNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBuYW1lOiAncmVzaXplJyxcbiAgZm46IF9kZXJlcV8oJy4vcmVzaXplJyksXG4gIHdhc21fZm46IF9kZXJlcV8oJy4vcmVzaXplX3dhc20nKSxcbiAgd2FzbV9zcmM6IF9kZXJlcV8oJy4vY29udm9sdmVfd2FzbV9iYXNlNjQnKVxufTtcblxufSx7XCIuL2NvbnZvbHZlX3dhc21fYmFzZTY0XCI6MyxcIi4vcmVzaXplXCI6NSxcIi4vcmVzaXplX3dhc21cIjo4fV0sNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cbnZhciBjcmVhdGVGaWx0ZXJzID0gX2RlcmVxXygnLi9yZXNpemVfZmlsdGVyX2dlbicpO1xuXG52YXIgY29udm9sdmVIb3Jpem9udGFsbHkgPSBfZGVyZXFfKCcuL2NvbnZvbHZlJykuY29udm9sdmVIb3Jpem9udGFsbHk7XG5cbnZhciBjb252b2x2ZVZlcnRpY2FsbHkgPSBfZGVyZXFfKCcuL2NvbnZvbHZlJykuY29udm9sdmVWZXJ0aWNhbGx5O1xuXG5mdW5jdGlvbiByZXNldEFscGhhKGRzdCwgd2lkdGgsIGhlaWdodCkge1xuICB2YXIgcHRyID0gMyxcbiAgICAgIGxlbiA9IHdpZHRoICogaGVpZ2h0ICogNCB8IDA7XG5cbiAgd2hpbGUgKHB0ciA8IGxlbikge1xuICAgIGRzdFtwdHJdID0gMHhGRjtcbiAgICBwdHIgPSBwdHIgKyA0IHwgMDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlc2l6ZShvcHRpb25zKSB7XG4gIHZhciBzcmMgPSBvcHRpb25zLnNyYztcbiAgdmFyIHNyY1cgPSBvcHRpb25zLndpZHRoO1xuICB2YXIgc3JjSCA9IG9wdGlvbnMuaGVpZ2h0O1xuICB2YXIgZGVzdFcgPSBvcHRpb25zLnRvV2lkdGg7XG4gIHZhciBkZXN0SCA9IG9wdGlvbnMudG9IZWlnaHQ7XG4gIHZhciBzY2FsZVggPSBvcHRpb25zLnNjYWxlWCB8fCBvcHRpb25zLnRvV2lkdGggLyBvcHRpb25zLndpZHRoO1xuICB2YXIgc2NhbGVZID0gb3B0aW9ucy5zY2FsZVkgfHwgb3B0aW9ucy50b0hlaWdodCAvIG9wdGlvbnMuaGVpZ2h0O1xuICB2YXIgb2Zmc2V0WCA9IG9wdGlvbnMub2Zmc2V0WCB8fCAwO1xuICB2YXIgb2Zmc2V0WSA9IG9wdGlvbnMub2Zmc2V0WSB8fCAwO1xuICB2YXIgZGVzdCA9IG9wdGlvbnMuZGVzdCB8fCBuZXcgVWludDhBcnJheShkZXN0VyAqIGRlc3RIICogNCk7XG4gIHZhciBxdWFsaXR5ID0gdHlwZW9mIG9wdGlvbnMucXVhbGl0eSA9PT0gJ3VuZGVmaW5lZCcgPyAzIDogb3B0aW9ucy5xdWFsaXR5O1xuICB2YXIgYWxwaGEgPSBvcHRpb25zLmFscGhhIHx8IGZhbHNlO1xuICB2YXIgZmlsdGVyc1ggPSBjcmVhdGVGaWx0ZXJzKHF1YWxpdHksIHNyY1csIGRlc3RXLCBzY2FsZVgsIG9mZnNldFgpLFxuICAgICAgZmlsdGVyc1kgPSBjcmVhdGVGaWx0ZXJzKHF1YWxpdHksIHNyY0gsIGRlc3RILCBzY2FsZVksIG9mZnNldFkpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoZGVzdFcgKiBzcmNIICogNCk7IC8vIFRvIHVzZSBzaW5nbGUgZnVuY3Rpb24gd2UgbmVlZCBzcmMgJiB0bXAgb2YgdGhlIHNhbWUgdHlwZS5cbiAgLy8gQnV0IHNyYyBjYW4gYmUgQ2FudmFzUGl4ZWxBcnJheSwgYW5kIHRtcCAtIFVpbnQ4QXJyYXkuIFNvLCBrZWVwXG4gIC8vIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHBhc3NlcyBzZXBhcmF0ZWx5IHRvIGF2b2lkIGRlb3B0aW1pemF0aW9uLlxuXG4gIGNvbnZvbHZlSG9yaXpvbnRhbGx5KHNyYywgdG1wLCBzcmNXLCBzcmNILCBkZXN0VywgZmlsdGVyc1gpO1xuICBjb252b2x2ZVZlcnRpY2FsbHkodG1wLCBkZXN0LCBzcmNILCBkZXN0VywgZGVzdEgsIGZpbHRlcnNZKTsgLy8gVGhhdCdzIGZhc3RlciB0aGFuIGRvaW5nIGNoZWNrcyBpbiBjb252b2x2ZXIuXG4gIC8vICEhISBOb3RlLCBjYW52YXMgZGF0YSBpcyBub3QgcHJlbXVsdGlwbGVkLiBXZSBkb24ndCBuZWVkIG90aGVyXG4gIC8vIGFscGhhIGNvcnJlY3Rpb25zLlxuXG4gIGlmICghYWxwaGEpIHJlc2V0QWxwaGEoZGVzdCwgZGVzdFcsIGRlc3RIKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG59LHtcIi4vY29udm9sdmVcIjoyLFwiLi9yZXNpemVfZmlsdGVyX2dlblwiOjZ9XSw2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxudmFyIEZJTFRFUl9JTkZPID0gX2RlcmVxXygnLi9yZXNpemVfZmlsdGVyX2luZm8nKTsgLy8gUHJlY2lzaW9uIG9mIGZpeGVkIEZQIHZhbHVlc1xuXG5cbnZhciBGSVhFRF9GUkFDX0JJVFMgPSAxNDtcblxuZnVuY3Rpb24gdG9GaXhlZFBvaW50KG51bSkge1xuICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAoKDEgPDwgRklYRURfRlJBQ19CSVRTKSAtIDEpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXNpemVGaWx0ZXJHZW4ocXVhbGl0eSwgc3JjU2l6ZSwgZGVzdFNpemUsIHNjYWxlLCBvZmZzZXQpIHtcbiAgdmFyIGZpbHRlckZ1bmN0aW9uID0gRklMVEVSX0lORk9bcXVhbGl0eV0uZmlsdGVyO1xuICB2YXIgc2NhbGVJbnZlcnRlZCA9IDEuMCAvIHNjYWxlO1xuICB2YXIgc2NhbGVDbGFtcGVkID0gTWF0aC5taW4oMS4wLCBzY2FsZSk7IC8vIEZvciB1cHNjYWxlXG4gIC8vIEZpbHRlciB3aW5kb3cgKGF2ZXJhZ2luZyBpbnRlcnZhbCksIHNjYWxlZCB0byBzcmMgaW1hZ2VcblxuICB2YXIgc3JjV2luZG93ID0gRklMVEVSX0lORk9bcXVhbGl0eV0ud2luIC8gc2NhbGVDbGFtcGVkO1xuICB2YXIgZGVzdFBpeGVsLCBzcmNQaXhlbCwgc3JjRmlyc3QsIHNyY0xhc3QsIGZpbHRlckVsZW1lbnRTaXplLCBmbG9hdEZpbHRlciwgZnhwRmlsdGVyLCB0b3RhbCwgcHhsLCBpZHgsIGZsb2F0VmFsLCBmaWx0ZXJUb3RhbCwgZmlsdGVyVmFsO1xuICB2YXIgbGVmdE5vdEVtcHR5LCByaWdodE5vdEVtcHR5LCBmaWx0ZXJTaGlmdCwgZmlsdGVyU2l6ZTtcbiAgdmFyIG1heEZpbHRlckVsZW1lbnRTaXplID0gTWF0aC5mbG9vcigoc3JjV2luZG93ICsgMSkgKiAyKTtcbiAgdmFyIHBhY2tlZEZpbHRlciA9IG5ldyBJbnQxNkFycmF5KChtYXhGaWx0ZXJFbGVtZW50U2l6ZSArIDIpICogZGVzdFNpemUpO1xuICB2YXIgcGFja2VkRmlsdGVyUHRyID0gMDtcbiAgdmFyIHNsb3dDb3B5ID0gIXBhY2tlZEZpbHRlci5zdWJhcnJheSB8fCAhcGFja2VkRmlsdGVyLnNldDsgLy8gRm9yIGVhY2ggZGVzdGluYXRpb24gcGl4ZWwgY2FsY3VsYXRlIHNvdXJjZSByYW5nZSBhbmQgYnVpbHQgZmlsdGVyIHZhbHVlc1xuXG4gIGZvciAoZGVzdFBpeGVsID0gMDsgZGVzdFBpeGVsIDwgZGVzdFNpemU7IGRlc3RQaXhlbCsrKSB7XG4gICAgLy8gU2NhbGluZyBzaG91bGQgYmUgZG9uZSByZWxhdGl2ZSB0byBjZW50cmFsIHBpeGVsIHBvaW50XG4gICAgc3JjUGl4ZWwgPSAoZGVzdFBpeGVsICsgMC41KSAqIHNjYWxlSW52ZXJ0ZWQgKyBvZmZzZXQ7XG4gICAgc3JjRmlyc3QgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNyY1BpeGVsIC0gc3JjV2luZG93KSk7XG4gICAgc3JjTGFzdCA9IE1hdGgubWluKHNyY1NpemUgLSAxLCBNYXRoLmNlaWwoc3JjUGl4ZWwgKyBzcmNXaW5kb3cpKTtcbiAgICBmaWx0ZXJFbGVtZW50U2l6ZSA9IHNyY0xhc3QgLSBzcmNGaXJzdCArIDE7XG4gICAgZmxvYXRGaWx0ZXIgPSBuZXcgRmxvYXQzMkFycmF5KGZpbHRlckVsZW1lbnRTaXplKTtcbiAgICBmeHBGaWx0ZXIgPSBuZXcgSW50MTZBcnJheShmaWx0ZXJFbGVtZW50U2l6ZSk7XG4gICAgdG90YWwgPSAwLjA7IC8vIEZpbGwgZmlsdGVyIHZhbHVlcyBmb3IgY2FsY3VsYXRlZCByYW5nZVxuXG4gICAgZm9yIChweGwgPSBzcmNGaXJzdCwgaWR4ID0gMDsgcHhsIDw9IHNyY0xhc3Q7IHB4bCsrLCBpZHgrKykge1xuICAgICAgZmxvYXRWYWwgPSBmaWx0ZXJGdW5jdGlvbigocHhsICsgMC41IC0gc3JjUGl4ZWwpICogc2NhbGVDbGFtcGVkKTtcbiAgICAgIHRvdGFsICs9IGZsb2F0VmFsO1xuICAgICAgZmxvYXRGaWx0ZXJbaWR4XSA9IGZsb2F0VmFsO1xuICAgIH0gLy8gTm9ybWFsaXplIGZpbHRlciwgY29udmVydCB0byBmaXhlZCBwb2ludCBhbmQgYWNjdW11bGF0ZSBjb252ZXJzaW9uIGVycm9yXG5cblxuICAgIGZpbHRlclRvdGFsID0gMDtcblxuICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgZmxvYXRGaWx0ZXIubGVuZ3RoOyBpZHgrKykge1xuICAgICAgZmlsdGVyVmFsID0gZmxvYXRGaWx0ZXJbaWR4XSAvIHRvdGFsO1xuICAgICAgZmlsdGVyVG90YWwgKz0gZmlsdGVyVmFsO1xuICAgICAgZnhwRmlsdGVyW2lkeF0gPSB0b0ZpeGVkUG9pbnQoZmlsdGVyVmFsKTtcbiAgICB9IC8vIENvbXBlbnNhdGUgbm9ybWFsaXphdGlvbiBlcnJvciwgdG8gbWluaW1pemUgYnJpZ2h0bmVzcyBkcmlmdFxuXG5cbiAgICBmeHBGaWx0ZXJbZGVzdFNpemUgPj4gMV0gKz0gdG9GaXhlZFBvaW50KDEuMCAtIGZpbHRlclRvdGFsKTsgLy9cbiAgICAvLyBOb3cgcGFjayBmaWx0ZXIgdG8gdXNlYWJsZSBmb3JtXG4gICAgLy9cbiAgICAvLyAxLiBUcmltIGhlYWRpbmcgYW5kIHRhaWxpbmcgemVybyB2YWx1ZXMsIGFuZCBjb21wZW5zYXRlIHNoaXRmL2xlbmd0aFxuICAgIC8vIDIuIFB1dCBhbGwgdG8gc2luZ2xlIGFycmF5IGluIHRoaXMgZm9ybWF0OlxuICAgIC8vXG4gICAgLy8gICAgWyBwb3Mgc2hpZnQsIGRhdGEgbGVuZ3RoLCB2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCAuLi4gXVxuICAgIC8vXG5cbiAgICBsZWZ0Tm90RW1wdHkgPSAwO1xuXG4gICAgd2hpbGUgKGxlZnROb3RFbXB0eSA8IGZ4cEZpbHRlci5sZW5ndGggJiYgZnhwRmlsdGVyW2xlZnROb3RFbXB0eV0gPT09IDApIHtcbiAgICAgIGxlZnROb3RFbXB0eSsrO1xuICAgIH1cblxuICAgIGlmIChsZWZ0Tm90RW1wdHkgPCBmeHBGaWx0ZXIubGVuZ3RoKSB7XG4gICAgICByaWdodE5vdEVtcHR5ID0gZnhwRmlsdGVyLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChyaWdodE5vdEVtcHR5ID4gMCAmJiBmeHBGaWx0ZXJbcmlnaHROb3RFbXB0eV0gPT09IDApIHtcbiAgICAgICAgcmlnaHROb3RFbXB0eS0tO1xuICAgICAgfVxuXG4gICAgICBmaWx0ZXJTaGlmdCA9IHNyY0ZpcnN0ICsgbGVmdE5vdEVtcHR5O1xuICAgICAgZmlsdGVyU2l6ZSA9IHJpZ2h0Tm90RW1wdHkgLSBsZWZ0Tm90RW1wdHkgKyAxO1xuICAgICAgcGFja2VkRmlsdGVyW3BhY2tlZEZpbHRlclB0cisrXSA9IGZpbHRlclNoaWZ0OyAvLyBzaGlmdFxuXG4gICAgICBwYWNrZWRGaWx0ZXJbcGFja2VkRmlsdGVyUHRyKytdID0gZmlsdGVyU2l6ZTsgLy8gc2l6ZVxuXG4gICAgICBpZiAoIXNsb3dDb3B5KSB7XG4gICAgICAgIHBhY2tlZEZpbHRlci5zZXQoZnhwRmlsdGVyLnN1YmFycmF5KGxlZnROb3RFbXB0eSwgcmlnaHROb3RFbXB0eSArIDEpLCBwYWNrZWRGaWx0ZXJQdHIpO1xuICAgICAgICBwYWNrZWRGaWx0ZXJQdHIgKz0gZmlsdGVyU2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBvbGQgSUUgPCAxMSwgd2l0aG91dCBzdWJhcnJheS9zZXQgbWV0aG9kc1xuICAgICAgICBmb3IgKGlkeCA9IGxlZnROb3RFbXB0eTsgaWR4IDw9IHJpZ2h0Tm90RW1wdHk7IGlkeCsrKSB7XG4gICAgICAgICAgcGFja2VkRmlsdGVyW3BhY2tlZEZpbHRlclB0cisrXSA9IGZ4cEZpbHRlcltpZHhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHplcm8gZGF0YSwgd3JpdGUgaGVhZGVyIG9ubHlcbiAgICAgIHBhY2tlZEZpbHRlcltwYWNrZWRGaWx0ZXJQdHIrK10gPSAwOyAvLyBzaGlmdFxuXG4gICAgICBwYWNrZWRGaWx0ZXJbcGFja2VkRmlsdGVyUHRyKytdID0gMDsgLy8gc2l6ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWNrZWRGaWx0ZXI7XG59O1xuXG59LHtcIi4vcmVzaXplX2ZpbHRlcl9pbmZvXCI6N31dLDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXG5tb2R1bGUuZXhwb3J0cyA9IFt7XG4gIC8vIE5lYXJlc3QgbmVpYm9yIChCb3gpXG4gIHdpbjogMC41LFxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcih4KSB7XG4gICAgcmV0dXJuIHggPj0gLTAuNSAmJiB4IDwgMC41ID8gMS4wIDogMC4wO1xuICB9XG59LCB7XG4gIC8vIEhhbW1pbmdcbiAgd2luOiAxLjAsXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHgpIHtcbiAgICBpZiAoeCA8PSAtMS4wIHx8IHggPj0gMS4wKSB7XG4gICAgICByZXR1cm4gMC4wO1xuICAgIH1cblxuICAgIGlmICh4ID4gLTEuMTkyMDkyOTBFLTA3ICYmIHggPCAxLjE5MjA5MjkwRS0wNykge1xuICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG5cbiAgICB2YXIgeHBpID0geCAqIE1hdGguUEk7XG4gICAgcmV0dXJuIE1hdGguc2luKHhwaSkgLyB4cGkgKiAoMC41NCArIDAuNDYgKiBNYXRoLmNvcyh4cGkgLyAxLjApKTtcbiAgfVxufSwge1xuICAvLyBMYW5jem9zLCB3aW4gPSAyXG4gIHdpbjogMi4wLFxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcih4KSB7XG4gICAgaWYgKHggPD0gLTIuMCB8fCB4ID49IDIuMCkge1xuICAgICAgcmV0dXJuIDAuMDtcbiAgICB9XG5cbiAgICBpZiAoeCA+IC0xLjE5MjA5MjkwRS0wNyAmJiB4IDwgMS4xOTIwOTI5MEUtMDcpIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuXG4gICAgdmFyIHhwaSA9IHggKiBNYXRoLlBJO1xuICAgIHJldHVybiBNYXRoLnNpbih4cGkpIC8geHBpICogTWF0aC5zaW4oeHBpIC8gMi4wKSAvICh4cGkgLyAyLjApO1xuICB9XG59LCB7XG4gIC8vIExhbmN6b3MsIHdpbiA9IDNcbiAgd2luOiAzLjAsXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHgpIHtcbiAgICBpZiAoeCA8PSAtMy4wIHx8IHggPj0gMy4wKSB7XG4gICAgICByZXR1cm4gMC4wO1xuICAgIH1cblxuICAgIGlmICh4ID4gLTEuMTkyMDkyOTBFLTA3ICYmIHggPCAxLjE5MjA5MjkwRS0wNykge1xuICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG5cbiAgICB2YXIgeHBpID0geCAqIE1hdGguUEk7XG4gICAgcmV0dXJuIE1hdGguc2luKHhwaSkgLyB4cGkgKiBNYXRoLnNpbih4cGkgLyAzLjApIC8gKHhwaSAvIDMuMCk7XG4gIH1cbn1dO1xuXG59LHt9XSw4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxudmFyIGNyZWF0ZUZpbHRlcnMgPSBfZGVyZXFfKCcuL3Jlc2l6ZV9maWx0ZXJfZ2VuJyk7XG5cbmZ1bmN0aW9uIHJlc2V0QWxwaGEoZHN0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHZhciBwdHIgPSAzLFxuICAgICAgbGVuID0gd2lkdGggKiBoZWlnaHQgKiA0IHwgMDtcblxuICB3aGlsZSAocHRyIDwgbGVuKSB7XG4gICAgZHN0W3B0cl0gPSAweEZGO1xuICAgIHB0ciA9IHB0ciArIDQgfCAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzVWludDhBcnJheShzcmMpIHtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNyYy5idWZmZXIsIDAsIHNyYy5ieXRlTGVuZ3RoKTtcbn1cblxudmFyIElTX0xFID0gdHJ1ZTsgLy8gc2hvdWxkIG5vdCBjcmFzaCBldmVyeXRoaW5nIG9uIG1vZHVsZSBsb2FkIGluIG9sZCBicm93c2Vyc1xuXG50cnkge1xuICBJU19MRSA9IG5ldyBVaW50MzJBcnJheShuZXcgVWludDhBcnJheShbMSwgMCwgMCwgMF0pLmJ1ZmZlcilbMF0gPT09IDE7XG59IGNhdGNoIChfXykge31cblxuZnVuY3Rpb24gY29weUludDE2YXNMRShzcmMsIHRhcmdldCwgdGFyZ2V0X29mZnNldCkge1xuICBpZiAoSVNfTEUpIHtcbiAgICB0YXJnZXQuc2V0KGFzVWludDhBcnJheShzcmMpLCB0YXJnZXRfb2Zmc2V0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKHZhciBwdHIgPSB0YXJnZXRfb2Zmc2V0LCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkYXRhID0gc3JjW2ldO1xuICAgIHRhcmdldFtwdHIrK10gPSBkYXRhICYgMHhGRjtcbiAgICB0YXJnZXRbcHRyKytdID0gZGF0YSA+PiA4ICYgMHhGRjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlc2l6ZV93YXNtKG9wdGlvbnMpIHtcbiAgdmFyIHNyYyA9IG9wdGlvbnMuc3JjO1xuICB2YXIgc3JjVyA9IG9wdGlvbnMud2lkdGg7XG4gIHZhciBzcmNIID0gb3B0aW9ucy5oZWlnaHQ7XG4gIHZhciBkZXN0VyA9IG9wdGlvbnMudG9XaWR0aDtcbiAgdmFyIGRlc3RIID0gb3B0aW9ucy50b0hlaWdodDtcbiAgdmFyIHNjYWxlWCA9IG9wdGlvbnMuc2NhbGVYIHx8IG9wdGlvbnMudG9XaWR0aCAvIG9wdGlvbnMud2lkdGg7XG4gIHZhciBzY2FsZVkgPSBvcHRpb25zLnNjYWxlWSB8fCBvcHRpb25zLnRvSGVpZ2h0IC8gb3B0aW9ucy5oZWlnaHQ7XG4gIHZhciBvZmZzZXRYID0gb3B0aW9ucy5vZmZzZXRYIHx8IDAuMDtcbiAgdmFyIG9mZnNldFkgPSBvcHRpb25zLm9mZnNldFkgfHwgMC4wO1xuICB2YXIgZGVzdCA9IG9wdGlvbnMuZGVzdCB8fCBuZXcgVWludDhBcnJheShkZXN0VyAqIGRlc3RIICogNCk7XG4gIHZhciBxdWFsaXR5ID0gdHlwZW9mIG9wdGlvbnMucXVhbGl0eSA9PT0gJ3VuZGVmaW5lZCcgPyAzIDogb3B0aW9ucy5xdWFsaXR5O1xuICB2YXIgYWxwaGEgPSBvcHRpb25zLmFscGhhIHx8IGZhbHNlO1xuICB2YXIgZmlsdGVyc1ggPSBjcmVhdGVGaWx0ZXJzKHF1YWxpdHksIHNyY1csIGRlc3RXLCBzY2FsZVgsIG9mZnNldFgpLFxuICAgICAgZmlsdGVyc1kgPSBjcmVhdGVGaWx0ZXJzKHF1YWxpdHksIHNyY0gsIGRlc3RILCBzY2FsZVksIG9mZnNldFkpOyAvLyBkZXN0aW5hdGlvbiBpcyAwIHRvby5cblxuICB2YXIgc3JjX29mZnNldCA9IDA7IC8vIGJ1ZmZlciBiZXR3ZWVuIGNvbnZvbHZlIHBhc3Nlc1xuXG4gIHZhciB0bXBfb2Zmc2V0ID0gdGhpcy5fX2FsaWduKHNyY19vZmZzZXQgKyBNYXRoLm1heChzcmMuYnl0ZUxlbmd0aCwgZGVzdC5ieXRlTGVuZ3RoKSk7XG5cbiAgdmFyIGZpbHRlcnNYX29mZnNldCA9IHRoaXMuX19hbGlnbih0bXBfb2Zmc2V0ICsgc3JjSCAqIGRlc3RXICogNCk7XG5cbiAgdmFyIGZpbHRlcnNZX29mZnNldCA9IHRoaXMuX19hbGlnbihmaWx0ZXJzWF9vZmZzZXQgKyBmaWx0ZXJzWC5ieXRlTGVuZ3RoKTtcblxuICB2YXIgYWxsb2NfYnl0ZXMgPSBmaWx0ZXJzWV9vZmZzZXQgKyBmaWx0ZXJzWS5ieXRlTGVuZ3RoO1xuXG4gIHZhciBpbnN0YW5jZSA9IHRoaXMuX19pbnN0YW5jZSgncmVzaXplJywgYWxsb2NfYnl0ZXMpOyAvL1xuICAvLyBGaWxsIG1lbW9yeSBibG9jayB3aXRoIGRhdGEgdG8gcHJvY2Vzc1xuICAvL1xuXG5cbiAgdmFyIG1lbSA9IG5ldyBVaW50OEFycmF5KHRoaXMuX19tZW1vcnkuYnVmZmVyKTtcbiAgdmFyIG1lbTMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX19tZW1vcnkuYnVmZmVyKTsgLy8gMzItYml0IGNvcHkgaXMgbXVjaCBmYXN0ZXIgaW4gY2hyb21lXG5cbiAgdmFyIHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIpO1xuICBtZW0zMi5zZXQoc3JjMzIpOyAvLyBXZSBzaG91bGQgZ3VhcmFudGVlIExFIGJ5dGVzIG9yZGVyLiBGaWx0ZXJzIGFyZSBub3QgYmlnLCBzb1xuICAvLyBzcGVlZCBkaWZmZXJlbmNlIGlzIG5vdCBzaWduaWZpY2FudCB2cyBkaXJlY3QgLnNldCgpXG5cbiAgY29weUludDE2YXNMRShmaWx0ZXJzWCwgbWVtLCBmaWx0ZXJzWF9vZmZzZXQpO1xuICBjb3B5SW50MTZhc0xFKGZpbHRlcnNZLCBtZW0sIGZpbHRlcnNZX29mZnNldCk7IC8vXG4gIC8vIE5vdyBjYWxsIHdlYmFzc2VtYmx5IG1ldGhvZFxuICAvLyBlbXNkayBkb2VzIG1ldGhvZCBuYW1lcyB3aXRoICdfJ1xuXG4gIHZhciBmbiA9IGluc3RhbmNlLmV4cG9ydHMuY29udm9sdmVIViB8fCBpbnN0YW5jZS5leHBvcnRzLl9jb252b2x2ZUhWO1xuICBmbihmaWx0ZXJzWF9vZmZzZXQsIGZpbHRlcnNZX29mZnNldCwgdG1wX29mZnNldCwgc3JjVywgc3JjSCwgZGVzdFcsIGRlc3RIKTsgLy9cbiAgLy8gQ29weSBkYXRhIGJhY2sgdG8gdHlwZWQgYXJyYXlcbiAgLy9cbiAgLy8gMzItYml0IGNvcHkgaXMgbXVjaCBmYXN0ZXIgaW4gY2hyb21lXG5cbiAgdmFyIGRlc3QzMiA9IG5ldyBVaW50MzJBcnJheShkZXN0LmJ1ZmZlcik7XG4gIGRlc3QzMi5zZXQobmV3IFVpbnQzMkFycmF5KHRoaXMuX19tZW1vcnkuYnVmZmVyLCAwLCBkZXN0SCAqIGRlc3RXKSk7IC8vIFRoYXQncyBmYXN0ZXIgdGhhbiBkb2luZyBjaGVja3MgaW4gY29udm9sdmVyLlxuICAvLyAhISEgTm90ZSwgY2FudmFzIGRhdGEgaXMgbm90IHByZW11bHRpcGxlZC4gV2UgZG9uJ3QgbmVlZCBvdGhlclxuICAvLyBhbHBoYSBjb3JyZWN0aW9ucy5cblxuICBpZiAoIWFscGhhKSByZXNldEFscGhhKGRlc3QsIGRlc3RXLCBkZXN0SCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxufSx7XCIuL3Jlc2l6ZV9maWx0ZXJfZ2VuXCI6Nn1dLDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZTogJ3Vuc2hhcnBfbWFzaycsXG4gIGZuOiBfZGVyZXFfKCcuL3Vuc2hhcnBfbWFzaycpLFxuICB3YXNtX2ZuOiBfZGVyZXFfKCcuL3Vuc2hhcnBfbWFza193YXNtJyksXG4gIHdhc21fc3JjOiBfZGVyZXFfKCcuL3Vuc2hhcnBfbWFza193YXNtX2Jhc2U2NCcpXG59O1xuXG59LHtcIi4vdW5zaGFycF9tYXNrXCI6MTAsXCIuL3Vuc2hhcnBfbWFza193YXNtXCI6MTEsXCIuL3Vuc2hhcnBfbWFza193YXNtX2Jhc2U2NFwiOjEyfV0sMTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXG52YXIgZ2x1cl9tb25vMTYgPSBfZGVyZXFfKCdnbHVyL21vbm8xNicpO1xuXG5mdW5jdGlvbiBoc3ZfdjE2KGltZywgd2lkdGgsIGhlaWdodCkge1xuICB2YXIgc2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICB2YXIgb3V0ID0gbmV3IFVpbnQxNkFycmF5KHNpemUpO1xuICB2YXIgciwgZywgYiwgbWF4O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgciA9IGltZ1s0ICogaV07XG4gICAgZyA9IGltZ1s0ICogaSArIDFdO1xuICAgIGIgPSBpbWdbNCAqIGkgKyAyXTtcbiAgICBtYXggPSByID49IGcgJiYgciA+PSBiID8gciA6IGcgPj0gYiAmJiBnID49IHIgPyBnIDogYjtcbiAgICBvdXRbaV0gPSBtYXggPDwgODtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5zaGFycChpbWcsIHdpZHRoLCBoZWlnaHQsIGFtb3VudCwgcmFkaXVzLCB0aHJlc2hvbGQpIHtcbiAgdmFyIHYxLCB2Miwgdm11bDtcbiAgdmFyIGRpZmYsIGlUaW1lczQ7XG5cbiAgaWYgKGFtb3VudCA9PT0gMCB8fCByYWRpdXMgPCAwLjUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmFkaXVzID4gMi4wKSB7XG4gICAgcmFkaXVzID0gMi4wO1xuICB9XG5cbiAgdmFyIGJyaWdodG5lc3MgPSBoc3ZfdjE2KGltZywgd2lkdGgsIGhlaWdodCk7XG4gIHZhciBibHVyZWQgPSBuZXcgVWludDE2QXJyYXkoYnJpZ2h0bmVzcyk7IC8vIGNvcHksIGJlY2F1c2UgYmx1ciBtb2RpZnkgc3JjXG5cbiAgZ2x1cl9tb25vMTYoYmx1cmVkLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpO1xuICB2YXIgYW1vdW50RnAgPSBhbW91bnQgLyAxMDAgKiAweDEwMDAgKyAwLjUgfCAwO1xuICB2YXIgdGhyZXNob2xkRnAgPSB0aHJlc2hvbGQgPDwgODtcbiAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICB2MSA9IGJyaWdodG5lc3NbaV07XG4gICAgZGlmZiA9IHYxIC0gYmx1cmVkW2ldO1xuXG4gICAgaWYgKE1hdGguYWJzKGRpZmYpID49IHRocmVzaG9sZEZwKSB7XG4gICAgICAvLyBhZGQgdW5zaGFycCBtYXNrIHRvIHRoZSBicmlnaHRuZXNzIGNoYW5uZWxcbiAgICAgIHYyID0gdjEgKyAoYW1vdW50RnAgKiBkaWZmICsgMHg4MDAgPj4gMTIpOyAvLyBCb3RoIHYxIGFuZCB2MiBhcmUgd2l0aGluIFswLjAgLi4gMjU1LjBdICgwMDAwLUZGMDApIHJhbmdlLCBuZXZlciBnb2luZyBpbnRvXG4gICAgICAvLyBbMjU1LjAwMyAuLiAyNTUuOTk2XSAoRkYwMS1GRkZGKS4gVGhpcyBhbGxvd3MgdG8gcm91bmQgdGhpcyB2YWx1ZSBhcyAoeCsuNSl8MFxuICAgICAgLy8gbGF0ZXIgd2l0aG91dCBvdmVyZmxvd2luZy5cblxuICAgICAgdjIgPSB2MiA+IDB4ZmYwMCA/IDB4ZmYwMCA6IHYyO1xuICAgICAgdjIgPSB2MiA8IDB4MDAwMCA/IDB4MDAwMCA6IHYyOyAvLyBBdm9pZCBkaXZpc2lvbiBieSAwLiBWPTAgbWVhbnMgcmdiKDAsMCwwKSwgdW5zaGFycCB3aXRoIHVuc2hhcnBBbW91bnQ+MCBjYW5ub3RcbiAgICAgIC8vIGNoYW5nZSB0aGlzIHZhbHVlIChiZWNhdXNlIGRpZmYgYmV0d2VlbiBjb2xvcnMgZ2V0cyBpbmZsYXRlZCksIHNvIG5vIG5lZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzLlxuXG4gICAgICB2MSA9IHYxICE9PSAwID8gdjEgOiAxOyAvLyBNdWx0aXBseWluZyBWIGluIEhTViBtb2RlbCBieSBhIGNvbnN0YW50IGlzIGVxdWl2YWxlbnQgdG8gbXVsdGlwbHlpbmcgZWFjaCBjb21wb25lbnRcbiAgICAgIC8vIGluIFJHQiBieSB0aGUgc2FtZSBjb25zdGFudCAoc2FtZSBmb3IgSFNMKSwgc2VlIGFsc286XG4gICAgICAvLyBodHRwczovL2JlZXNidXp6LmJpei9jb2RlLzE2LWhzdi1jb2xvci10cmFuc2Zvcm1zXG5cbiAgICAgIHZtdWwgPSAodjIgPDwgMTIpIC8gdjEgfCAwOyAvLyBSZXN1bHQgd2lsbCBiZSBpbiBbMC4uMjU1XSByYW5nZSBiZWNhdXNlOlxuICAgICAgLy8gIC0gYWxsIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgICAvLyAgLSByLGcsYiA8PSAodjEvMjU2KVxuICAgICAgLy8gIC0gcixnLGIsKHYxLzI1NiksKHYyLzI1NikgPD0gMjU1XG4gICAgICAvLyBTbyBoaWdoZXN0IHRoaXMgbnVtYmVyIGNhbiBnZXQgaXMgWCoyNTUvWCswLjU9MjU1LjUgd2hpY2ggaXMgPCAyNTYgYW5kIHJvdW5kcyBkb3duLlxuXG4gICAgICBpVGltZXM0ID0gaSAqIDQ7XG4gICAgICBpbWdbaVRpbWVzNF0gPSBpbWdbaVRpbWVzNF0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIFJcblxuICAgICAgaW1nW2lUaW1lczQgKyAxXSA9IGltZ1tpVGltZXM0ICsgMV0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIEdcblxuICAgICAgaW1nW2lUaW1lczQgKyAyXSA9IGltZ1tpVGltZXM0ICsgMl0gKiB2bXVsICsgMHg4MDAgPj4gMTI7IC8vIEJcbiAgICB9XG4gIH1cbn07XG5cbn0se1wiZ2x1ci9tb25vMTZcIjoxOH1dLDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bnNoYXJwKGltZywgd2lkdGgsIGhlaWdodCwgYW1vdW50LCByYWRpdXMsIHRocmVzaG9sZCkge1xuICBpZiAoYW1vdW50ID09PSAwIHx8IHJhZGl1cyA8IDAuNSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyYWRpdXMgPiAyLjApIHtcbiAgICByYWRpdXMgPSAyLjA7XG4gIH1cblxuICB2YXIgcGl4ZWxzID0gd2lkdGggKiBoZWlnaHQ7XG4gIHZhciBpbWdfYnl0ZXNfY250ID0gcGl4ZWxzICogNDtcbiAgdmFyIGhzdl9ieXRlc19jbnQgPSBwaXhlbHMgKiAyO1xuICB2YXIgYmx1cl9ieXRlc19jbnQgPSBwaXhlbHMgKiAyO1xuICB2YXIgYmx1cl9saW5lX2J5dGVfY250ID0gTWF0aC5tYXgod2lkdGgsIGhlaWdodCkgKiA0OyAvLyBmbG9hdDMyIGFycmF5XG5cbiAgdmFyIGJsdXJfY29lZmZzX2J5dGVfY250ID0gOCAqIDQ7IC8vIGZsb2F0MzIgYXJyYXlcblxuICB2YXIgaW1nX29mZnNldCA9IDA7XG4gIHZhciBoc3Zfb2Zmc2V0ID0gaW1nX2J5dGVzX2NudDtcbiAgdmFyIGJsdXJfb2Zmc2V0ID0gaHN2X29mZnNldCArIGhzdl9ieXRlc19jbnQ7XG4gIHZhciBibHVyX3RtcF9vZmZzZXQgPSBibHVyX29mZnNldCArIGJsdXJfYnl0ZXNfY250O1xuICB2YXIgYmx1cl9saW5lX29mZnNldCA9IGJsdXJfdG1wX29mZnNldCArIGJsdXJfYnl0ZXNfY250O1xuICB2YXIgYmx1cl9jb2VmZnNfb2Zmc2V0ID0gYmx1cl9saW5lX29mZnNldCArIGJsdXJfbGluZV9ieXRlX2NudDtcblxuICB2YXIgaW5zdGFuY2UgPSB0aGlzLl9faW5zdGFuY2UoJ3Vuc2hhcnBfbWFzaycsIGltZ19ieXRlc19jbnQgKyBoc3ZfYnl0ZXNfY250ICsgYmx1cl9ieXRlc19jbnQgKiAyICsgYmx1cl9saW5lX2J5dGVfY250ICsgYmx1cl9jb2VmZnNfYnl0ZV9jbnQsIHtcbiAgICBleHA6IE1hdGguZXhwXG4gIH0pOyAvLyAzMi1iaXQgY29weSBpcyBtdWNoIGZhc3RlciBpbiBjaHJvbWVcblxuXG4gIHZhciBpbWczMiA9IG5ldyBVaW50MzJBcnJheShpbWcuYnVmZmVyKTtcbiAgdmFyIG1lbTMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX19tZW1vcnkuYnVmZmVyKTtcbiAgbWVtMzIuc2V0KGltZzMyKTsgLy8gSFNMXG5cbiAgdmFyIGZuID0gaW5zdGFuY2UuZXhwb3J0cy5oc3ZfdjE2IHx8IGluc3RhbmNlLmV4cG9ydHMuX2hzdl92MTY7XG4gIGZuKGltZ19vZmZzZXQsIGhzdl9vZmZzZXQsIHdpZHRoLCBoZWlnaHQpOyAvLyBCTFVSXG5cbiAgZm4gPSBpbnN0YW5jZS5leHBvcnRzLmJsdXJNb25vMTYgfHwgaW5zdGFuY2UuZXhwb3J0cy5fYmx1ck1vbm8xNjtcbiAgZm4oaHN2X29mZnNldCwgYmx1cl9vZmZzZXQsIGJsdXJfdG1wX29mZnNldCwgYmx1cl9saW5lX29mZnNldCwgYmx1cl9jb2VmZnNfb2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpOyAvLyBVTlNIQVJQXG5cbiAgZm4gPSBpbnN0YW5jZS5leHBvcnRzLnVuc2hhcnAgfHwgaW5zdGFuY2UuZXhwb3J0cy5fdW5zaGFycDtcbiAgZm4oaW1nX29mZnNldCwgaW1nX29mZnNldCwgaHN2X29mZnNldCwgYmx1cl9vZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGFtb3VudCwgdGhyZXNob2xkKTsgLy8gMzItYml0IGNvcHkgaXMgbXVjaCBmYXN0ZXIgaW4gY2hyb21lXG5cbiAgaW1nMzIuc2V0KG5ldyBVaW50MzJBcnJheSh0aGlzLl9fbWVtb3J5LmJ1ZmZlciwgMCwgcGl4ZWxzKSk7XG59O1xuXG59LHt9XSwxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQURBWmtlV3hwYm1zQUFBQUFBQUUwQjJBQUFHQUVmMzkvZndCZ0JuOS9mMzkvZndCZ0NIOS9mMzkvZjM5L0FHQUlmMzkvZjM5L2YzMEFZQUo5ZndCZ0FYd0JmQUlaQWdObGJuWURaWGh3QUFZRFpXNTJCbTFsYlc5eWVRSUFBQU1IQmdBRkFnUUJBd1lHQVg4QVFRQUxCNG9CQ0JGZlgzZGhjMjFmWTJGc2JGOWpkRzl5Y3dBQkZsOWZZblZwYkdSZloyRjFjM05wWVc1ZlkyOWxabk1BQWc1ZlgyZGhkWE56TVRaZmJHbHVaUUFEQ21Kc2RYSk5iMjV2TVRZQUJBZG9jM1pmZGpFMkFBVUhkVzV6YUdGeWNBQUdERjlmWkhOdlgyaGhibVJzWlFNQUdGOWZkMkZ6YlY5aGNIQnNlVjlrWVhSaFgzSmxiRzlqY3dBQkNzVU1CZ01BQVF2V0FRRUhmQ0FCUk51R3VrT0NHdnMvSUFDN295SUNSQUFBQUFBQUFBREFvaEFBSWdXMmpEZ0NGQ0FCSUFLYUVBQWlBeUFEb0NJR3RqZ0NFQ0FCUkFBQUFBQUFBUEEvSUFPaElnUWdCS0lnQXlBQ0lBS2dva1FBQUFBQUFBRHdQNkFnQmFHaklnUzJPQUlBSUFFZ0JTQUVtcUlpQjdZNEFnd2dBU0FESUFKRUFBQUFBQUFBOEQrZ0lBU2lvaUlJdGpnQ0NDQUJJQU1nQWtRQUFBQUFBQUR3djZBZ0JLS2lJZ0syT0FJRUlBRWdCeUFJb0NBRlJBQUFBQUFBQVBBL0lBYWhvQ0lEbzdZNEFod2dBU0FFSUFLZ0lBT2p0amdDR0F1R0JRTUdmd2w4QW4wZ0F5b0NEQ0VWSUFNcUFnZ2hGaUFES2dJVXV5RVJJQU1xQWhDN0lSQUNRQ0FFUVFGcklnaEJBRWdpQ1FSQUlBSWhCeUFBSVFZTUFRc2dBaUFBTHdFQXVDSVBJQU1xQWhpN29pSU1JQkdpSWcwZ0RDQVFvaUFQSUFNcUFnUzdJaE9pSWhRZ0F5b0NBTHNpRWlBUG9xQ2dvQ0lPdGpnQ0FDQUNRUVJxSVFjZ0FFRUNhaUVHSUFoRkRRQWdDRUVCSUFoQkFVZ2JJZ3BCZjNNaEN3Si9JQVFnQ210QkFYRkZCRUFnRGlFTklBZ01BUXNnQWlBTklBNGdFS0lnRkNBU0lBQXZBUUs0SWcraW9LQ2dJZzIyT0FJRUlBSkJDR29oQnlBQVFRUnFJUVlnRGlFTUlBUkJBbXNMSVFJZ0MwRUFJQVJyUmcwQUEwQWdCeUFNSUJHaUlBMGdFS0lnRHlBVG9pQVNJQVl2QVFDNElnNmlvS0NnSWd5Mk9BSUFJQWNnRFNBUm9pQU1JQkNpSUE0Z0U2SWdFaUFHTHdFQ3VDSVBvcUNnb0NJTnRqZ0NCQ0FIUVFocUlRY2dCa0VFYWlFR0lBSkJBa29oQUNBQ1FRSnJJUUlnQUEwQUN3c0NRQ0FKRFFBZ0FTQUZJQWhzUVFGMGFpSUFBbjhnQmtFQ2F5OEJBQ0lDdUNJTklCVzdJaEtpSUEwZ0Zyc2lFNktnSUEwZ0F5b0NITHVpSWd3Z0VLS2dJQXdnRWFLZ0lnOGdCMEVFYXlJSEtnSUF1NkFpRGtRQUFBQUFBQUR3UVdNZ0RrUUFBQUFBQUFBQUFHWnhCRUFnRHFzTUFRdEJBQXM3QVFBZ0NFVU5BQ0FHUVFScklRWkJBQ0FGYTBFQmRDRUJBMEFDZnlBTklCS2lJQUpCLy84RGNiZ2lEU0FUb3FBZ0R5SU9JQkNpb0NBTUlCR2lvQ0lQSUFkQkJHc2lCeW9DQUx1Z0lneEVBQUFBQUFBQThFRmpJQXhFQUFBQUFBQUFBQUJtY1FSQUlBeXJEQUVMUVFBTElRTWdCaThCQUNFQ0lBQWdBV29pQUNBRE93RUFJQVpCQW1zaEJpQUlRUUZLSVFNZ0RpRU1JQWhCQVdzaENDQUREUUFMQ3d2UkFnSUJmd2Q4QWtBZ0IwTUFBQUFBV3cwQUlBUkUyNGE2UTRJYSt6OGdCME1BQUFBL2w3dWpJZ2xFQUFBQUFBQUFBTUNpRUFBaURMYU1PQUlVSUFRZ0Nab1FBQ0lLSUFxZ0lnMjJPQUlRSUFSRUFBQUFBQUFBOEQ4Z0NxRWlDeUFMb2lBS0lBa2dDYUNpUkFBQUFBQUFBUEEvb0NBTW9hTWlDN1k0QWdBZ0JDQU1JQXVhb2lJT3RqZ0NEQ0FFSUFvZ0NVUUFBQUFBQUFEd1A2QWdDNktpSWcrMk9BSUlJQVFnQ2lBSlJBQUFBQUFBQVBDL29DQUxvcUlpQ2JZNEFnUWdCQ0FPSUErZ0lBeEVBQUFBQUFBQThEOGdEYUdnSWdxanRqZ0NIQ0FFSUFzZ0NhQWdDcU8yT0FJWUlBWUVRQU5BSUFBZ0JTQUliRUVCZEdvZ0FpQUlRUUYwYWlBRElBUWdCU0FHRUFNZ0NFRUJhaUlJSUFaSERRQUxDeUFGUlEwQVFRQWhDQU5BSUFJZ0JpQUliRUVCZEdvZ0FTQUlRUUYwYWlBRElBUWdCaUFGRUFNZ0NFRUJhaUlJSUFWSERRQUxDd3R4QVFOL0lBSWdBMndpQlFSQUEwQWdBU0FBS0FJQUlnUkJFSFpCL3dGeElnSWdBaUFFUVFoMlFmOEJjU0lESUFNZ0JFSC9BWEVpQkVrYklBSWdBMHNiSWdZZ0JpQUVJQUlnQkVzYklBTWdCRXNiUVFoME93RUFJQUZCQW1vaEFTQUFRUVJxSVFBZ0JVRUJheUlGRFFBTEN3dVpBZ0lEZndGOElBUWdCV3doQkFKL0lBYXpRd0FBZ0VXVVF3QUF5RUtWdTBRQUFBQUFBQURnUDZBaUM1bEVBQUFBQUFBQTRFRmpCRUFnQzZvTUFRdEJnSUNBZ0hnTElRVWdCQVJBSUFkQkNIUWhDVUVBSVFZRFFDQUpJQUlnQmtFQmRDSUhhaThCQUNJQklBTWdCMm92QVFCcklnY2dCMEVmZFNJSWFpQUljMDBFUUNBQUlBWkJBblFpQ0dvaUNpQUZJQWRzUVlBUWFrRU1kU0FCYWlJSFFZRCtBeUFIUVlEK0EwZ2JJZ2RCQUNBSFFRQktHMEVNZENBQlFRRWdBUnR1SWdFZ0NpMEFBR3hCZ0JCcVFReDJPZ0FBSUFBZ0NFRUJjbW9pQnlBQklBY3RBQUJzUVlBUWFrRU1kam9BQUNBQUlBaEJBbkpxSWdjZ0FTQUhMUUFBYkVHQUVHcEJESFk2QUFBTElBWkJBV29pQmlBRVJ3MEFDd3NMJztcblxufSx7fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXG52YXIgR0NfSU5URVJWQUwgPSAxMDA7XG5cbmZ1bmN0aW9uIFBvb2woY3JlYXRlLCBpZGxlKSB7XG4gIHRoaXMuY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLmF2YWlsYWJsZSA9IFtdO1xuICB0aGlzLmFjcXVpcmVkID0ge307XG4gIHRoaXMubGFzdElkID0gMTtcbiAgdGhpcy50aW1lb3V0SWQgPSAwO1xuICB0aGlzLmlkbGUgPSBpZGxlIHx8IDIwMDA7XG59XG5cblBvb2wucHJvdG90eXBlLmFjcXVpcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlc291cmNlO1xuXG4gIGlmICh0aGlzLmF2YWlsYWJsZS5sZW5ndGggIT09IDApIHtcbiAgICByZXNvdXJjZSA9IHRoaXMuYXZhaWxhYmxlLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHJlc291cmNlID0gdGhpcy5jcmVhdGUoKTtcbiAgICByZXNvdXJjZS5pZCA9IHRoaXMubGFzdElkKys7XG5cbiAgICByZXNvdXJjZS5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnJlbGVhc2UocmVzb3VyY2UpO1xuICAgIH07XG4gIH1cblxuICB0aGlzLmFjcXVpcmVkW3Jlc291cmNlLmlkXSA9IHJlc291cmNlO1xuICByZXR1cm4gcmVzb3VyY2U7XG59O1xuXG5Qb29sLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIGRlbGV0ZSB0aGlzLmFjcXVpcmVkW3Jlc291cmNlLmlkXTtcbiAgcmVzb3VyY2UubGFzdFVzZWQgPSBEYXRlLm5vdygpO1xuICB0aGlzLmF2YWlsYWJsZS5wdXNoKHJlc291cmNlKTtcblxuICBpZiAodGhpcy50aW1lb3V0SWQgPT09IDApIHtcbiAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nYygpO1xuICAgIH0sIEdDX0lOVEVSVkFMKTtcbiAgfVxufTtcblxuUG9vbC5wcm90b3R5cGUuZ2MgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICB0aGlzLmF2YWlsYWJsZSA9IHRoaXMuYXZhaWxhYmxlLmZpbHRlcihmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICBpZiAobm93IC0gcmVzb3VyY2UubGFzdFVzZWQgPiBfdGhpczMuaWRsZSkge1xuICAgICAgcmVzb3VyY2UuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBpZiAodGhpcy5hdmFpbGFibGUubGVuZ3RoICE9PSAwKSB7XG4gICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczMuZ2MoKTtcbiAgICB9LCBHQ19JTlRFUlZBTCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy50aW1lb3V0SWQgPSAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2w7XG5cbn0se31dLDE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIG1pbiBzaXplID0gMSBjYW4gY29uc3VtZSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5XG5cbnZhciBNSU5fSU5ORVJfVElMRV9TSVpFID0gMjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVTdGFnZXMoZnJvbVdpZHRoLCBmcm9tSGVpZ2h0LCB0b1dpZHRoLCB0b0hlaWdodCwgc3JjVGlsZVNpemUsIGRlc3RUaWxlQm9yZGVyKSB7XG4gIHZhciBzY2FsZVggPSB0b1dpZHRoIC8gZnJvbVdpZHRoO1xuICB2YXIgc2NhbGVZID0gdG9IZWlnaHQgLyBmcm9tSGVpZ2h0OyAvLyBkZXJpdmVkIGZyb20gY3JlYXRlUmVnaW9ucyBlcXVhdGlvbjpcbiAgLy8gaW5uZXJUaWxlV2lkdGggPSBwaXhlbEZsb29yKHNyY1RpbGVTaXplICogc2NhbGVYKSAtIDIgKiBkZXN0VGlsZUJvcmRlcjtcblxuICB2YXIgbWluU2NhbGUgPSAoMiAqIGRlc3RUaWxlQm9yZGVyICsgTUlOX0lOTkVSX1RJTEVfU0laRSArIDEpIC8gc3JjVGlsZVNpemU7IC8vIHJlZnVzZSB0byBzY2FsZSBpbWFnZSBtdWx0aXBsZSB0aW1lcyBieSBsZXNzIHRoYW4gdHdpY2UgZWFjaCB0aW1lLFxuICAvLyBpdCBjb3VsZCBvbmx5IGhhcHBlbiBiZWNhdXNlIG9mIGludmFsaWQgb3B0aW9uc1xuXG4gIGlmIChtaW5TY2FsZSA+IDAuNSkgcmV0dXJuIFtbdG9XaWR0aCwgdG9IZWlnaHRdXTtcbiAgdmFyIHN0YWdlQ291bnQgPSBNYXRoLmNlaWwoTWF0aC5sb2coTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpKSAvIE1hdGgubG9nKG1pblNjYWxlKSk7IC8vIG5vIGFkZGl0aW9uYWwgcmVzaXplcyBhcmUgbmVjZXNzYXJ5LFxuICAvLyBzdGFnZUNvdW50IGNhbiBiZSB6ZXJvIG9yIGJlIG5lZ2F0aXZlIHdoZW4gZW5sYXJnaW5nIHRoZSBpbWFnZVxuXG4gIGlmIChzdGFnZUNvdW50IDw9IDEpIHJldHVybiBbW3RvV2lkdGgsIHRvSGVpZ2h0XV07XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlQ291bnQ7IGkrKykge1xuICAgIHZhciB3aWR0aCA9IE1hdGgucm91bmQoTWF0aC5wb3coTWF0aC5wb3coZnJvbVdpZHRoLCBzdGFnZUNvdW50IC0gaSAtIDEpICogTWF0aC5wb3codG9XaWR0aCwgaSArIDEpLCAxIC8gc3RhZ2VDb3VudCkpO1xuICAgIHZhciBoZWlnaHQgPSBNYXRoLnJvdW5kKE1hdGgucG93KE1hdGgucG93KGZyb21IZWlnaHQsIHN0YWdlQ291bnQgLSBpIC0gMSkgKiBNYXRoLnBvdyh0b0hlaWdodCwgaSArIDEpLCAxIC8gc3RhZ2VDb3VudCkpO1xuICAgIHJlc3VsdC5wdXNoKFt3aWR0aCwgaGVpZ2h0XSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxufSx7fV0sMTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLypcbiAqIHBpeGVsRmxvb3IgYW5kIHBpeGVsQ2VpbCBhcmUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgTWF0aC5mbG9vciBhbmQgTWF0aC5jZWlsXG4gKiBmdW5jdGlvbnMgd2hpY2ggdGFrZSBpbnRvIGFjY291bnQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBlcnJvcnMuXG4gKiBUaG9zZSBlcnJvcnMgY2FuIGNhdXNlIHVuZGVzaXJlZCBpbmNyZW1lbnRzL2RlY3JlbWVudHMgb2Ygc2l6ZXMgYW5kIG9mZnNldHM6XG4gKiBNYXRoLmNlaWwoMzYgLyAoMzYgLyA1MDApKSA9IDUwMVxuICogcGl4ZWxDZWlsKDM2IC8gKDM2IC8gNTAwKSkgPSA1MDBcbiAqL1xuXG52YXIgUElYRUxfRVBTSUxPTiA9IDFlLTU7XG5cbmZ1bmN0aW9uIHBpeGVsRmxvb3IoeCkge1xuICB2YXIgbmVhcmVzdCA9IE1hdGgucm91bmQoeCk7XG5cbiAgaWYgKE1hdGguYWJzKHggLSBuZWFyZXN0KSA8IFBJWEVMX0VQU0lMT04pIHtcbiAgICByZXR1cm4gbmVhcmVzdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKHgpO1xufVxuXG5mdW5jdGlvbiBwaXhlbENlaWwoeCkge1xuICB2YXIgbmVhcmVzdCA9IE1hdGgucm91bmQoeCk7XG5cbiAgaWYgKE1hdGguYWJzKHggLSBuZWFyZXN0KSA8IFBJWEVMX0VQU0lMT04pIHtcbiAgICByZXR1cm4gbmVhcmVzdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmNlaWwoeCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlUmVnaW9ucyhvcHRpb25zKSB7XG4gIHZhciBzY2FsZVggPSBvcHRpb25zLnRvV2lkdGggLyBvcHRpb25zLndpZHRoO1xuICB2YXIgc2NhbGVZID0gb3B0aW9ucy50b0hlaWdodCAvIG9wdGlvbnMuaGVpZ2h0O1xuICB2YXIgaW5uZXJUaWxlV2lkdGggPSBwaXhlbEZsb29yKG9wdGlvbnMuc3JjVGlsZVNpemUgKiBzY2FsZVgpIC0gMiAqIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXI7XG4gIHZhciBpbm5lclRpbGVIZWlnaHQgPSBwaXhlbEZsb29yKG9wdGlvbnMuc3JjVGlsZVNpemUgKiBzY2FsZVkpIC0gMiAqIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXI7IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG5cbiAgaWYgKGlubmVyVGlsZVdpZHRoIDwgMSB8fCBpbm5lclRpbGVIZWlnaHQgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvciBpbiBwaWNhOiB0YXJnZXQgdGlsZSB3aWR0aC9oZWlnaHQgaXMgdG9vIHNtYWxsLicpO1xuICB9XG5cbiAgdmFyIHgsIHk7XG4gIHZhciBpbm5lclgsIGlubmVyWSwgdG9UaWxlV2lkdGgsIHRvVGlsZUhlaWdodDtcbiAgdmFyIHRpbGVzID0gW107XG4gIHZhciB0aWxlOyAvLyB3ZSBnbyB0b3AtdG8tZG93biBpbnN0ZWFkIG9mIGxlZnQtdG8tcmlnaHQgdG8gbWFrZSBpbWFnZSBkaXNwbGF5ZWQgZnJvbSB0b3AgdG9cbiAgLy8gZG9lc24gaW4gdGhlIGJyb3dzZXJcblxuICBmb3IgKGlubmVyWSA9IDA7IGlubmVyWSA8IG9wdGlvbnMudG9IZWlnaHQ7IGlubmVyWSArPSBpbm5lclRpbGVIZWlnaHQpIHtcbiAgICBmb3IgKGlubmVyWCA9IDA7IGlubmVyWCA8IG9wdGlvbnMudG9XaWR0aDsgaW5uZXJYICs9IGlubmVyVGlsZVdpZHRoKSB7XG4gICAgICB4ID0gaW5uZXJYIC0gb3B0aW9ucy5kZXN0VGlsZUJvcmRlcjtcblxuICAgICAgaWYgKHggPCAwKSB7XG4gICAgICAgIHggPSAwO1xuICAgICAgfVxuXG4gICAgICB0b1RpbGVXaWR0aCA9IGlubmVyWCArIGlubmVyVGlsZVdpZHRoICsgb3B0aW9ucy5kZXN0VGlsZUJvcmRlciAtIHg7XG5cbiAgICAgIGlmICh4ICsgdG9UaWxlV2lkdGggPj0gb3B0aW9ucy50b1dpZHRoKSB7XG4gICAgICAgIHRvVGlsZVdpZHRoID0gb3B0aW9ucy50b1dpZHRoIC0geDtcbiAgICAgIH1cblxuICAgICAgeSA9IGlubmVyWSAtIG9wdGlvbnMuZGVzdFRpbGVCb3JkZXI7XG5cbiAgICAgIGlmICh5IDwgMCkge1xuICAgICAgICB5ID0gMDtcbiAgICAgIH1cblxuICAgICAgdG9UaWxlSGVpZ2h0ID0gaW5uZXJZICsgaW5uZXJUaWxlSGVpZ2h0ICsgb3B0aW9ucy5kZXN0VGlsZUJvcmRlciAtIHk7XG5cbiAgICAgIGlmICh5ICsgdG9UaWxlSGVpZ2h0ID49IG9wdGlvbnMudG9IZWlnaHQpIHtcbiAgICAgICAgdG9UaWxlSGVpZ2h0ID0gb3B0aW9ucy50b0hlaWdodCAtIHk7XG4gICAgICB9XG5cbiAgICAgIHRpbGUgPSB7XG4gICAgICAgIHRvWDogeCxcbiAgICAgICAgdG9ZOiB5LFxuICAgICAgICB0b1dpZHRoOiB0b1RpbGVXaWR0aCxcbiAgICAgICAgdG9IZWlnaHQ6IHRvVGlsZUhlaWdodCxcbiAgICAgICAgdG9Jbm5lclg6IGlubmVyWCxcbiAgICAgICAgdG9Jbm5lclk6IGlubmVyWSxcbiAgICAgICAgdG9Jbm5lcldpZHRoOiBpbm5lclRpbGVXaWR0aCxcbiAgICAgICAgdG9Jbm5lckhlaWdodDogaW5uZXJUaWxlSGVpZ2h0LFxuICAgICAgICBvZmZzZXRYOiB4IC8gc2NhbGVYIC0gcGl4ZWxGbG9vcih4IC8gc2NhbGVYKSxcbiAgICAgICAgb2Zmc2V0WTogeSAvIHNjYWxlWSAtIHBpeGVsRmxvb3IoeSAvIHNjYWxlWSksXG4gICAgICAgIHNjYWxlWDogc2NhbGVYLFxuICAgICAgICBzY2FsZVk6IHNjYWxlWSxcbiAgICAgICAgeDogcGl4ZWxGbG9vcih4IC8gc2NhbGVYKSxcbiAgICAgICAgeTogcGl4ZWxGbG9vcih5IC8gc2NhbGVZKSxcbiAgICAgICAgd2lkdGg6IHBpeGVsQ2VpbCh0b1RpbGVXaWR0aCAvIHNjYWxlWCksXG4gICAgICAgIGhlaWdodDogcGl4ZWxDZWlsKHRvVGlsZUhlaWdodCAvIHNjYWxlWSlcbiAgICAgIH07XG4gICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aWxlcztcbn07XG5cbn0se31dLDE2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxuZnVuY3Rpb24gb2JqQ2xhc3Mob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuaXNDYW52YXMgPSBmdW5jdGlvbiBpc0NhbnZhcyhlbGVtZW50KSB7XG4gIHZhciBjbmFtZSA9IG9iakNsYXNzKGVsZW1lbnQpO1xuICByZXR1cm4gY25hbWUgPT09ICdbb2JqZWN0IEhUTUxDYW52YXNFbGVtZW50XSdcbiAgLyogYnJvd3NlciAqL1xuICB8fCBjbmFtZSA9PT0gJ1tvYmplY3QgT2Zmc2NyZWVuQ2FudmFzXScgfHwgY25hbWUgPT09ICdbb2JqZWN0IENhbnZhc10nXG4gIC8qIG5vZGUtY2FudmFzICovXG4gIDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmlzSW1hZ2UgPSBmdW5jdGlvbiBpc0ltYWdlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIG9iakNsYXNzKGVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MSW1hZ2VFbGVtZW50XSc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pc0ltYWdlQml0bWFwID0gZnVuY3Rpb24gaXNJbWFnZUJpdG1hcChlbGVtZW50KSB7XG4gIHJldHVybiBvYmpDbGFzcyhlbGVtZW50KSA9PT0gJ1tvYmplY3QgSW1hZ2VCaXRtYXBdJztcbn07XG5cbm1vZHVsZS5leHBvcnRzLmxpbWl0ZXIgPSBmdW5jdGlvbiBsaW1pdGVyKGNvbmN1cnJlbmN5KSB7XG4gIHZhciBhY3RpdmUgPSAwLFxuICAgICAgcXVldWUgPSBbXTtcblxuICBmdW5jdGlvbiByb2xsKCkge1xuICAgIGlmIChhY3RpdmUgPCBjb25jdXJyZW5jeSAmJiBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGFjdGl2ZSsrO1xuICAgICAgcXVldWUuc2hpZnQoKSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBsaW1pdChmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBxdWV1ZS5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm4oKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgcm9sbCgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgcm9sbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcm9sbCgpO1xuICAgIH0pO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMuY2liX3F1YWxpdHlfbmFtZSA9IGZ1bmN0aW9uIGNpYl9xdWFsaXR5X25hbWUobnVtKSB7XG4gIHN3aXRjaCAobnVtKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuICdwaXhlbGF0ZWQnO1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuICdsb3cnO1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuICdtZWRpdW0nO1xuICB9XG5cbiAgcmV0dXJuICdoaWdoJztcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNpYl9zdXBwb3J0ID0gZnVuY3Rpb24gY2liX3N1cHBvcnQoY3JlYXRlQ2FudmFzKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBjID0gY3JlYXRlQ2FudmFzKDEwMCwgMTAwKTtcbiAgICByZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoYywgMCwgMCwgMTAwLCAxMDAsIHtcbiAgICAgIHJlc2l6ZVdpZHRoOiAxMCxcbiAgICAgIHJlc2l6ZUhlaWdodDogMTAsXG4gICAgICByZXNpemVRdWFsaXR5OiAnaGlnaCdcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChiaXRtYXApIHtcbiAgICAgIHZhciBzdGF0dXMgPSBiaXRtYXAud2lkdGggPT09IDEwOyAvLyBCcmFuY2ggYmVsb3cgaXMgZmlsdGVyZWQgb24gdXBwZXIgbGV2ZWwuIFdlIGRvIG5vdCBjYWxsIHJlc2l6ZVxuICAgICAgLy8gZGV0ZWN0aW9uIGZvciBiYXNpYyBJbWFnZUJpdG1hcC5cbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSW1hZ2VCaXRtYXBcbiAgICAgIC8vIG9sZCBDcm9tZSA1MSBoYXMgSW1hZ2VCaXRtYXAgd2l0aG91dCAuY2xvc2UoKS4gVGhlbiB0aGlzIGNvZGVcbiAgICAgIC8vIHdpbGwgdGhyb3cgYW5kIHJldHVybiAnZmFsc2UnIGFzIGV4cGVjdGVkLlxuICAgICAgLy9cblxuICAgICAgYml0bWFwLmNsb3NlKCk7XG4gICAgICBjID0gbnVsbDtcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfSk7XG4gIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53b3JrZXJfb2Zmc2NyZWVuX2NhbnZhc19zdXBwb3J0ID0gZnVuY3Rpb24gd29ya2VyX29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydCgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGlmIE9mZnNjcmVlbkNhbnZhcyBpcyBwcmVzZW50LCB3ZSBhc3N1bWUgYnJvd3NlciBzdXBwb3J0cyBXb3JrZXIgYW5kIGJ1aWx0LWluIFByb21pc2UgYXMgd2VsbFxuICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd29ya2VyUGF5bG9hZChzZWxmKSB7XG4gICAgICBpZiAodHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoMTAsIDEwKTsgLy8gdGVzdCB0aGF0IDJkIGNvbnRleHQgY2FuIGJlIHVzZWQgaW4gd29ya2VyXG5cbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHgucmVjdCgwLCAwLCAxLCAxKTsgLy8gdGVzdCB0aGF0IGNpYiBjYW4gYmUgdXNlZCB0byByZXR1cm4gaW1hZ2UgYml0bWFwIGZyb20gd29ya2VyXG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGNhbnZhcywgMCwgMCwgMSwgMSk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYucG9zdE1lc3NhZ2UodHJ1ZSk7XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLnBvc3RNZXNzYWdlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gYnRvYShcIihcIi5jb25jYXQod29ya2VyUGF5bG9hZC50b1N0cmluZygpLCBcIikoc2VsZik7XCIpKTtcbiAgICB2YXIgdyA9IG5ldyBXb3JrZXIoXCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsXCIuY29uY2F0KGNvZGUpKTtcblxuICAgIHcub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShldi5kYXRhKTtcbiAgICB9O1xuXG4gICAgdy5vbmVycm9yID0gcmVqZWN0O1xuICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn07IC8vIENoZWNrIGlmIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSBjYW4gYmUgdXNlZCxcbi8vIEZpcmVGb3ggcmFuZG9taXplcyB0aGUgb3V0cHV0IG9mIHRoYXQgZnVuY3Rpb24gaW4gYHByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmdgIG1vZGVcblxuXG5tb2R1bGUuZXhwb3J0cy5jYW5fdXNlX2NhbnZhcyA9IGZ1bmN0aW9uIGNhbl91c2VfY2FudmFzKGNyZWF0ZUNhbnZhcykge1xuICB2YXIgdXNhYmxlID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgY2FudmFzID0gY3JlYXRlQ2FudmFzKDIsIDEpO1xuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB2YXIgZCA9IGN0eC5jcmVhdGVJbWFnZURhdGEoMiwgMSk7XG4gICAgZC5kYXRhWzBdID0gMTI7XG4gICAgZC5kYXRhWzFdID0gMjM7XG4gICAgZC5kYXRhWzJdID0gMzQ7XG4gICAgZC5kYXRhWzNdID0gMjU1O1xuICAgIGQuZGF0YVs0XSA9IDQ1O1xuICAgIGQuZGF0YVs1XSA9IDU2O1xuICAgIGQuZGF0YVs2XSA9IDY3O1xuICAgIGQuZGF0YVs3XSA9IDI1NTtcbiAgICBjdHgucHV0SW1hZ2VEYXRhKGQsIDAsIDApO1xuICAgIGQgPSBudWxsO1xuICAgIGQgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDIsIDEpO1xuXG4gICAgaWYgKGQuZGF0YVswXSA9PT0gMTIgJiYgZC5kYXRhWzFdID09PSAyMyAmJiBkLmRhdGFbMl0gPT09IDM0ICYmIGQuZGF0YVszXSA9PT0gMjU1ICYmIGQuZGF0YVs0XSA9PT0gNDUgJiYgZC5kYXRhWzVdID09PSA1NiAmJiBkLmRhdGFbNl0gPT09IDY3ICYmIGQuZGF0YVs3XSA9PT0gMjU1KSB7XG4gICAgICB1c2FibGUgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7fVxuXG4gIHJldHVybiB1c2FibGU7XG59OyAvLyBDaGVjayBpZiBjcmVhdGVJbWFnZUJpdG1hcChpbWcsIHN4LCBzeSwgc3csIHNoKSBzaWduYXR1cmUgd29ya3MgY29ycmVjdGx5XG4vLyB3aXRoIEpQRUcgaW1hZ2VzIG9yaWVudGVkIHdpdGggRXhpZjtcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyMjA2NzFcbi8vIFRPRE86IHJlbW92ZSBhZnRlciBpdCdzIGZpeGVkIGluIGNocm9tZSBmb3IgYXQgbGVhc3QgMiByZWxlYXNlc1xuXG5cbm1vZHVsZS5leHBvcnRzLmNpYl9jYW5fdXNlX3JlZ2lvbiA9IGZ1bmN0aW9uIGNpYl9jYW5fdXNlX3JlZ2lvbigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9ICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcgKyAnLzlqLzRRQmlSWGhwWmdBQVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBWUFBQUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBJyArICdBQUJBQUFBVWdFb0FBTUFBQUFCQUFJQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQklBQUFBQVFBQUFFZ0FBQUFCLzknICsgJ3NBUXdBRUF3TUVBd01FQkFNRUJRUUVCUVlLQndZR0JnWU5DUW9JQ2c4TkVCQVBEUThPRVJNWUZCRVNGeElPRHhVY0ZSYycgKyAnWkdSc2JHeEFVSFI4ZEdoOFlHaHNhLzlzQVF3RUVCUVVHQlFZTUJ3Y01HaEVQRVJvYUdob2FHaG9hR2hvYUdob2FHaG9hJyArICdHaG9hR2hvYUdob2FHaG9hR2hvYUdob2FHaG9hR2hvYUdob2FHaG9hR2hvYS84SUFFUWdBQVFBQ0F3RVJBQUlSQVFNUkEnICsgJ2YvRUFCUUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBZi94QUFVQVFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzlvQURBTUJBQScgKyAnSVFBeEFBQUFGL1AvL0VBQlFRQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvMmdBSUFRRUFBUVVDZi8vRUFCUVJBUUFBQUFBJyArICdBQUFBQUFBQUFBQUFBQUFELzJnQUlBUU1CQVQ4QmYvL0VBQlFSQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUQvMmdBSUFRSUInICsgJ0FUOEJmLy9FQUJRUUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJnQUlBUUVBQmo4Q2YvL0VBQlFRQVFBQUFBQUFBQUFBQScgKyAnQUFBQUFBQUFBRC8yZ0FJQVFFQUFUOGhmLy9hQUF3REFRQUNBQU1BQUFBUUgvL0VBQlFSQVFBQUFBQUFBQUFBQUFBQUFBJyArICdBQUFBRC8yZ0FJQVFNQkFUOFFmLy9FQUJRUkFRQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJnQUlBUUlCQVQ4UWYvL0VBQlEnICsgJ1FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yZ0FJQVFFQUFUOFFmLy9aJztcblxuICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNyZWF0ZUltYWdlQml0bWFwKGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KS50aGVuKGZ1bmN0aW9uIChiaXRtYXApIHtcbiAgICAgICAgaWYgKGJpdG1hcC53aWR0aCA9PT0gaW1hZ2Uud2lkdGggJiYgYml0bWFwLmhlaWdodCA9PT0gaW1hZ2UuaGVpZ2h0KSB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlKGZhbHNlKTtcbiAgICB9O1xuICB9KTtcbn07XG5cbn0se31dLDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBNYXRoTGliID0gX2RlcmVxXygnLi9tYXRobGliJyk7XG5cbiAgdmFyIG1hdGhMaWI7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cbiAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKGV2KSB7XG4gICAgdmFyIHRpbGVPcHRzID0gZXYuZGF0YS5vcHRzO1xuICAgIHZhciByZXR1cm5CaXRtYXAgPSBmYWxzZTtcblxuICAgIGlmICghdGlsZU9wdHMuc3JjICYmIHRpbGVPcHRzLnNyY0JpdG1hcCkge1xuICAgICAgdmFyIGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXModGlsZU9wdHMud2lkdGgsIHRpbGVPcHRzLmhlaWdodCk7XG4gICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgICAgICBhbHBoYTogQm9vbGVhbih0aWxlT3B0cy5hbHBoYSlcbiAgICAgIH0pO1xuICAgICAgY3R4LmRyYXdJbWFnZSh0aWxlT3B0cy5zcmNCaXRtYXAsIDAsIDApO1xuICAgICAgdGlsZU9wdHMuc3JjID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB0aWxlT3B0cy53aWR0aCwgdGlsZU9wdHMuaGVpZ2h0KS5kYXRhO1xuICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICBjYW52YXMgPSBudWxsO1xuICAgICAgdGlsZU9wdHMuc3JjQml0bWFwLmNsb3NlKCk7XG4gICAgICB0aWxlT3B0cy5zcmNCaXRtYXAgPSBudWxsO1xuICAgICAgcmV0dXJuQml0bWFwID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGhMaWIpIG1hdGhMaWIgPSBuZXcgTWF0aExpYihldi5kYXRhLmZlYXR1cmVzKTsgLy8gVXNlIG11bHRpbWF0aCdzIHN5bmMgYXV0by1pbml0LiBBdm9pZCBQcm9taXNlIHVzZSBpbiBvbGQgYnJvd3NlcnMsXG4gICAgLy8gYmVjYXVzZSBwb2x5ZmlsbHMgYXJlIG5vdCBwcm9wYWdhdGVkIHRvIHdlYndvcmtlci5cblxuICAgIHZhciBkYXRhID0gbWF0aExpYi5yZXNpemVBbmRVbnNoYXJwKHRpbGVPcHRzKTtcblxuICAgIGlmIChyZXR1cm5CaXRtYXApIHtcbiAgICAgIHZhciB0b0ltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEpLCB0aWxlT3B0cy50b1dpZHRoLCB0aWxlT3B0cy50b0hlaWdodCk7XG5cbiAgICAgIHZhciBfY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh0aWxlT3B0cy50b1dpZHRoLCB0aWxlT3B0cy50b0hlaWdodCk7XG5cbiAgICAgIHZhciBfY3R4ID0gX2NhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgICAgYWxwaGE6IEJvb2xlYW4odGlsZU9wdHMuYWxwaGEpXG4gICAgICB9KTtcblxuICAgICAgX2N0eC5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEsIDAsIDApO1xuXG4gICAgICBjcmVhdGVJbWFnZUJpdG1hcChfY2FudmFzKS50aGVuKGZ1bmN0aW9uIChiaXRtYXApIHtcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGJpdG1hcDogYml0bWFwXG4gICAgICAgIH0sIFtiaXRtYXBdKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0TWVzc2FnZSh7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0sIFtkYXRhLmJ1ZmZlcl0pO1xuICAgIH1cbiAgfTtcbn07XG5cbn0se1wiLi9tYXRobGliXCI6MX1dLDE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbi8vIENhbGN1bGF0ZSBHYXVzc2lhbiBibHVyIG9mIGFuIGltYWdlIHVzaW5nIElJUiBmaWx0ZXJcbi8vIFRoZSBtZXRob2QgaXMgdGFrZW4gZnJvbSBJbnRlbCdzIHdoaXRlIHBhcGVyIGFuZCBjb2RlIGV4YW1wbGUgYXR0YWNoZWQgdG8gaXQ6XG4vLyBodHRwczovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9hcnRpY2xlcy9paXItZ2F1c3NpYW4tYmx1ci1maWx0ZXJcbi8vIC1pbXBsZW1lbnRhdGlvbi11c2luZy1pbnRlbC1hZHZhbmNlZC12ZWN0b3ItZXh0ZW5zaW9uc1xuXG52YXIgYTAsIGExLCBhMiwgYTMsIGIxLCBiMiwgbGVmdF9jb3JuZXIsIHJpZ2h0X2Nvcm5lcjtcblxuZnVuY3Rpb24gZ2F1c3NDb2VmKHNpZ21hKSB7XG4gIGlmIChzaWdtYSA8IDAuNSkge1xuICAgIHNpZ21hID0gMC41O1xuICB9XG5cbiAgdmFyIGEgPSBNYXRoLmV4cCgwLjcyNiAqIDAuNzI2KSAvIHNpZ21hLFxuICAgICAgZzEgPSBNYXRoLmV4cCgtYSksXG4gICAgICBnMiA9IE1hdGguZXhwKC0yICogYSksXG4gICAgICBrID0gKDEgLSBnMSkgKiAoMSAtIGcxKSAvICgxICsgMiAqIGEgKiBnMSAtIGcyKTtcblxuICBhMCA9IGs7XG4gIGExID0gayAqIChhIC0gMSkgKiBnMTtcbiAgYTIgPSBrICogKGEgKyAxKSAqIGcxO1xuICBhMyA9IC1rICogZzI7XG4gIGIxID0gMiAqIGcxO1xuICBiMiA9IC1nMjtcbiAgbGVmdF9jb3JuZXIgPSAoYTAgKyBhMSkgLyAoMSAtIGIxIC0gYjIpO1xuICByaWdodF9jb3JuZXIgPSAoYTIgKyBhMykgLyAoMSAtIGIxIC0gYjIpO1xuXG4gIC8vIEF0dGVtcHQgdG8gZm9yY2UgdHlwZSB0byBGUDMyLlxuICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbIGEwLCBhMSwgYTIsIGEzLCBiMSwgYjIsIGxlZnRfY29ybmVyLCByaWdodF9jb3JuZXIgXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZvbHZlTW9ubzE2KHNyYywgb3V0LCBsaW5lLCBjb2VmZiwgd2lkdGgsIGhlaWdodCkge1xuICAvLyB0YWtlcyBzcmMgaW1hZ2UgYW5kIHdyaXRlcyB0aGUgYmx1cnJlZCBhbmQgdHJhbnNwb3NlZCByZXN1bHQgaW50byBvdXRcblxuICB2YXIgcHJldl9zcmMsIGN1cnJfc3JjLCBjdXJyX291dCwgcHJldl9vdXQsIHByZXZfcHJldl9vdXQ7XG4gIHZhciBzcmNfaW5kZXgsIG91dF9pbmRleCwgbGluZV9pbmRleDtcbiAgdmFyIGksIGo7XG4gIHZhciBjb2VmZl9hMCwgY29lZmZfYTEsIGNvZWZmX2IxLCBjb2VmZl9iMjtcblxuICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBzcmNfaW5kZXggPSBpICogd2lkdGg7XG4gICAgb3V0X2luZGV4ID0gaTtcbiAgICBsaW5lX2luZGV4ID0gMDtcblxuICAgIC8vIGxlZnQgdG8gcmlnaHRcbiAgICBwcmV2X3NyYyA9IHNyY1tzcmNfaW5kZXhdO1xuICAgIHByZXZfcHJldl9vdXQgPSBwcmV2X3NyYyAqIGNvZWZmWzZdO1xuICAgIHByZXZfb3V0ID0gcHJldl9wcmV2X291dDtcblxuICAgIGNvZWZmX2EwID0gY29lZmZbMF07XG4gICAgY29lZmZfYTEgPSBjb2VmZlsxXTtcbiAgICBjb2VmZl9iMSA9IGNvZWZmWzRdO1xuICAgIGNvZWZmX2IyID0gY29lZmZbNV07XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgY3Vycl9zcmMgPSBzcmNbc3JjX2luZGV4XTtcblxuICAgICAgY3Vycl9vdXQgPSBjdXJyX3NyYyAqIGNvZWZmX2EwICtcbiAgICAgICAgICAgICAgICAgcHJldl9zcmMgKiBjb2VmZl9hMSArXG4gICAgICAgICAgICAgICAgIHByZXZfb3V0ICogY29lZmZfYjEgK1xuICAgICAgICAgICAgICAgICBwcmV2X3ByZXZfb3V0ICogY29lZmZfYjI7XG5cbiAgICAgIHByZXZfcHJldl9vdXQgPSBwcmV2X291dDtcbiAgICAgIHByZXZfb3V0ID0gY3Vycl9vdXQ7XG4gICAgICBwcmV2X3NyYyA9IGN1cnJfc3JjO1xuXG4gICAgICBsaW5lW2xpbmVfaW5kZXhdID0gcHJldl9vdXQ7XG4gICAgICBsaW5lX2luZGV4Kys7XG4gICAgICBzcmNfaW5kZXgrKztcbiAgICB9XG5cbiAgICBzcmNfaW5kZXgtLTtcbiAgICBsaW5lX2luZGV4LS07XG4gICAgb3V0X2luZGV4ICs9IGhlaWdodCAqICh3aWR0aCAtIDEpO1xuXG4gICAgLy8gcmlnaHQgdG8gbGVmdFxuICAgIHByZXZfc3JjID0gc3JjW3NyY19pbmRleF07XG4gICAgcHJldl9wcmV2X291dCA9IHByZXZfc3JjICogY29lZmZbN107XG4gICAgcHJldl9vdXQgPSBwcmV2X3ByZXZfb3V0O1xuICAgIGN1cnJfc3JjID0gcHJldl9zcmM7XG5cbiAgICBjb2VmZl9hMCA9IGNvZWZmWzJdO1xuICAgIGNvZWZmX2ExID0gY29lZmZbM107XG5cbiAgICBmb3IgKGogPSB3aWR0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICBjdXJyX291dCA9IGN1cnJfc3JjICogY29lZmZfYTAgK1xuICAgICAgICAgICAgICAgICBwcmV2X3NyYyAqIGNvZWZmX2ExICtcbiAgICAgICAgICAgICAgICAgcHJldl9vdXQgKiBjb2VmZl9iMSArXG4gICAgICAgICAgICAgICAgIHByZXZfcHJldl9vdXQgKiBjb2VmZl9iMjtcblxuICAgICAgcHJldl9wcmV2X291dCA9IHByZXZfb3V0O1xuICAgICAgcHJldl9vdXQgPSBjdXJyX291dDtcblxuICAgICAgcHJldl9zcmMgPSBjdXJyX3NyYztcbiAgICAgIGN1cnJfc3JjID0gc3JjW3NyY19pbmRleF07XG5cbiAgICAgIG91dFtvdXRfaW5kZXhdID0gbGluZVtsaW5lX2luZGV4XSArIHByZXZfb3V0O1xuXG4gICAgICBzcmNfaW5kZXgtLTtcbiAgICAgIGxpbmVfaW5kZXgtLTtcbiAgICAgIG91dF9pbmRleCAtPSBoZWlnaHQ7XG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gYmx1ck1vbm8xNihzcmMsIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICAvLyBRdWljayBleGl0IG9uIHplcm8gcmFkaXVzXG4gIGlmICghcmFkaXVzKSB7IHJldHVybjsgfVxuXG4gIHZhciBvdXQgICAgICA9IG5ldyBVaW50MTZBcnJheShzcmMubGVuZ3RoKSxcbiAgICAgIHRtcF9saW5lID0gbmV3IEZsb2F0MzJBcnJheShNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgdmFyIGNvZWZmID0gZ2F1c3NDb2VmKHJhZGl1cyk7XG5cbiAgY29udm9sdmVNb25vMTYoc3JjLCBvdXQsIHRtcF9saW5lLCBjb2VmZiwgd2lkdGgsIGhlaWdodCk7XG4gIGNvbnZvbHZlTW9ubzE2KG91dCwgc3JjLCB0bXBfbGluZSwgY29lZmYsIGhlaWdodCwgd2lkdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJsdXJNb25vMTY7XG5cbn0se31dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbmlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTtcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gICAgfVxuICB9O1xufVxuXG59LHt9XSwyMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cblxudmFyIGFzc2lnbiAgICAgICAgID0gX2RlcmVxXygnb2JqZWN0LWFzc2lnbicpO1xudmFyIGJhc2U2NGRlY29kZSAgID0gX2RlcmVxXygnLi9saWIvYmFzZTY0ZGVjb2RlJyk7XG52YXIgaGFzV2ViQXNzZW1ibHkgPSBfZGVyZXFfKCcuL2xpYi93YV9kZXRlY3QnKTtcblxuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBqczogdHJ1ZSxcbiAgd2FzbTogdHJ1ZVxufTtcblxuXG5mdW5jdGlvbiBNdWx0aU1hdGgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTXVsdGlNYXRoKSkgcmV0dXJuIG5ldyBNdWx0aU1hdGgob3B0aW9ucyk7XG5cbiAgdmFyIG9wdHMgPSBhc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgdGhpcy5vcHRpb25zICAgICAgICAgPSBvcHRzO1xuXG4gIHRoaXMuX19jYWNoZSAgICAgICAgID0ge307XG5cbiAgdGhpcy5fX2luaXRfcHJvbWlzZSAgPSBudWxsO1xuICB0aGlzLl9fbW9kdWxlcyAgICAgICA9IG9wdHMubW9kdWxlcyB8fCB7fTtcbiAgdGhpcy5fX21lbW9yeSAgICAgICAgPSBudWxsO1xuICB0aGlzLl9fd2FzbSAgICAgICAgICA9IHt9O1xuXG4gIHRoaXMuX19pc0xFID0gKChuZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFsgMSwgMCwgMCwgMCBdKSkuYnVmZmVyKSlbMF0gPT09IDEpO1xuXG4gIGlmICghdGhpcy5vcHRpb25zLmpzICYmICF0aGlzLm9wdGlvbnMud2FzbSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWF0aGxpYjogYXQgbGVhc3QgXCJqc1wiIG9yIFwid2FzbVwiIHNob3VsZCBiZSBlbmFibGVkJyk7XG4gIH1cbn1cblxuXG5NdWx0aU1hdGgucHJvdG90eXBlLmhhc193YXNtID0gaGFzV2ViQXNzZW1ibHk7XG5cblxuTXVsdGlNYXRoLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAobW9kdWxlKSB7XG4gIHRoaXMuX19tb2R1bGVzW21vZHVsZS5uYW1lXSA9IG1vZHVsZTtcblxuICAvLyBQaW4gdGhlIGJlc3QgcG9zc2libGUgaW1wbGVtZW50YXRpb25cbiAgaWYgKHRoaXMub3B0aW9ucy53YXNtICYmIHRoaXMuaGFzX3dhc20oKSAmJiBtb2R1bGUud2FzbV9mbikge1xuICAgIHRoaXNbbW9kdWxlLm5hbWVdID0gbW9kdWxlLndhc21fZm47XG4gIH0gZWxzZSB7XG4gICAgdGhpc1ttb2R1bGUubmFtZV0gPSBtb2R1bGUuZm47XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblxuTXVsdGlNYXRoLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fX2luaXRfcHJvbWlzZSkgcmV0dXJuIHRoaXMuX19pbml0X3Byb21pc2U7XG5cbiAgaWYgKCF0aGlzLm9wdGlvbnMuanMgJiYgdGhpcy5vcHRpb25zLndhc20gJiYgIXRoaXMuaGFzX3dhc20oKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ21hdGhsaWI6IG9ubHkgXCJ3YXNtXCIgd2FzIGVuYWJsZWQsIGJ1dCBpdFxcJ3Mgbm90IHN1cHBvcnRlZCcpKTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9faW5pdF9wcm9taXNlID0gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoc2VsZi5fX21vZHVsZXMpLm1hcChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBtb2R1bGUgPSBzZWxmLl9fbW9kdWxlc1tuYW1lXTtcblxuICAgIGlmICghc2VsZi5vcHRpb25zLndhc20gfHwgIXNlbGYuaGFzX3dhc20oKSB8fCAhbW9kdWxlLndhc21fZm4pIHJldHVybiBudWxsO1xuXG4gICAgLy8gSWYgYWxyZWFkeSBjb21waWxlZCAtIGV4aXRcbiAgICBpZiAoc2VsZi5fX3dhc21bbmFtZV0pIHJldHVybiBudWxsO1xuXG4gICAgLy8gQ29tcGlsZSB3YXNtIHNvdXJjZVxuICAgIHJldHVybiBXZWJBc3NlbWJseS5jb21waWxlKHNlbGYuX19iYXNlNjRkZWNvZGUobW9kdWxlLndhc21fc3JjKSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChtKSB7IHNlbGYuX193YXNtW25hbWVdID0gbTsgfSk7XG4gIH0pKVxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGY7IH0pO1xuXG4gIHJldHVybiB0aGlzLl9faW5pdF9wcm9taXNlO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTWV0aG9kcyBiZWxvdyBhcmUgZm9yIGludGVybmFsIHVzZSBmcm9tIHBsdWdpbnNcblxuXG4vLyBTaW1wbGUgZGVjb2RlIGJhc2U2NCB0byB0eXBlZCBhcnJheS4gVXNlZnVsIHRvIGxvYWQgZW1iZWRkZWQgd2ViYXNzZW1ibHlcbi8vIGNvZGUuIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHkuXG4vL1xuTXVsdGlNYXRoLnByb3RvdHlwZS5fX2Jhc2U2NGRlY29kZSA9IGJhc2U2NGRlY29kZTtcblxuXG4vLyBJbmNyZWFzZSBjdXJyZW50IG1lbW9yeSB0byBpbmNsdWRlIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuIERvIG5vdGhpbmcgaWZcbi8vIHNpemUgaXMgYWxyZWFkeSBvay4gWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSxcbi8vIGJlY2F1c2UgaXQgd2lsbCBiZSBpbnZva2VkIGZyb20gYC5fX2luc3RhbmNlKClgLlxuLy9cbk11bHRpTWF0aC5wcm90b3R5cGUuX19yZWFsbG9jYXRlID0gZnVuY3Rpb24gbWVtX2dyb3dfdG8oYnl0ZXMpIHtcbiAgaWYgKCF0aGlzLl9fbWVtb3J5KSB7XG4gICAgdGhpcy5fX21lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe1xuICAgICAgaW5pdGlhbDogTWF0aC5jZWlsKGJ5dGVzIC8gKDY0ICogMTAyNCkpXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX19tZW1vcnk7XG4gIH1cblxuICB2YXIgbWVtX3NpemUgPSB0aGlzLl9fbWVtb3J5LmJ1ZmZlci5ieXRlTGVuZ3RoO1xuXG4gIGlmIChtZW1fc2l6ZSA8IGJ5dGVzKSB7XG4gICAgdGhpcy5fX21lbW9yeS5ncm93KE1hdGguY2VpbCgoYnl0ZXMgLSBtZW1fc2l6ZSkgLyAoNjQgKiAxMDI0KSkpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX19tZW1vcnk7XG59O1xuXG5cbi8vIFJldHVybnMgaW5zdGFudGluYXRlZCB3ZWJhc3NlbWJseSBpdGVtIGJ5IG5hbWUsIHdpdGggc3BlY2lmaWVkIG1lbW9yeSBzaXplXG4vLyBhbmQgZW52aXJvbm1lbnQuXG4vLyAtIHVzZSBjYWNoZSBpZiBhdmFpbGFibGVcbi8vIC0gZG8gc3luYyBtb2R1bGUgaW5pdCwgaWYgYXN5bmMgaW5pdCB3YXMgbm90IGNhbGxlZCBlYXJsaWVyXG4vLyAtIGFsbG9jYXRlIG1lbW9yeSBpZiBub3QgZW5vdWd0aFxuLy8gLSBjYW4gZXhwb3J0IGZ1bmN0aW9ucyB0byB3ZWJhc3NlbWJseSB2aWEgXCJlbnZfZXh0cmFcIixcbi8vICAgZm9yIGV4YW1wbGUsIHsgZXhwOiBNYXRoLmV4cCB9XG4vL1xuTXVsdGlNYXRoLnByb3RvdHlwZS5fX2luc3RhbmNlID0gZnVuY3Rpb24gaW5zdGFuY2UobmFtZSwgbWVtc2l6ZSwgZW52X2V4dHJhKSB7XG4gIGlmIChtZW1zaXplKSB0aGlzLl9fcmVhbGxvY2F0ZShtZW1zaXplKTtcblxuICAvLyBJZiAuaW5pdCgpIHdhcyBub3QgY2FsbGVkLCBkbyBzeW5jIGNvbXBpbGVcbiAgaWYgKCF0aGlzLl9fd2FzbVtuYW1lXSkge1xuICAgIHZhciBtb2R1bGUgPSB0aGlzLl9fbW9kdWxlc1tuYW1lXTtcbiAgICB0aGlzLl9fd2FzbVtuYW1lXSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUodGhpcy5fX2Jhc2U2NGRlY29kZShtb2R1bGUud2FzbV9zcmMpKTtcbiAgfVxuXG4gIGlmICghdGhpcy5fX2NhY2hlW25hbWVdKSB7XG4gICAgdmFyIGVudl9iYXNlID0ge1xuICAgICAgbWVtb3J5QmFzZTogMCxcbiAgICAgIG1lbW9yeTogdGhpcy5fX21lbW9yeSxcbiAgICAgIHRhYmxlQmFzZTogMCxcbiAgICAgIHRhYmxlOiBuZXcgV2ViQXNzZW1ibHkuVGFibGUoeyBpbml0aWFsOiAwLCBlbGVtZW50OiAnYW55ZnVuYycgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5fX2NhY2hlW25hbWVdID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKHRoaXMuX193YXNtW25hbWVdLCB7XG4gICAgICBlbnY6IGFzc2lnbihlbnZfYmFzZSwgZW52X2V4dHJhIHx8IHt9KVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX19jYWNoZVtuYW1lXTtcbn07XG5cblxuLy8gSGVscGVyIHRvIGNhbGN1bGF0ZSBtZW1vcnkgYWxpZ2ggZm9yIHBvaW50ZXJzLiBXZWJhc3NlbWJseSBkb2VzIG5vdCByZXF1aXJlXG4vLyB0aGlzLCBidXQgeW91IG1heSB3aXNoIHRvIGV4cGVyaW1lbnQuIERlZmF1bHQgYmFzZSA9IDg7XG4vL1xuTXVsdGlNYXRoLnByb3RvdHlwZS5fX2FsaWduID0gZnVuY3Rpb24gYWxpZ24obnVtYmVyLCBiYXNlKSB7XG4gIGJhc2UgPSBiYXNlIHx8IDg7XG4gIHZhciByZW1pbmRlciA9IG51bWJlciAlIGJhc2U7XG4gIHJldHVybiBudW1iZXIgKyAocmVtaW5kZXIgPyBiYXNlIC0gcmVtaW5kZXIgOiAwKTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aU1hdGg7XG5cbn0se1wiLi9saWIvYmFzZTY0ZGVjb2RlXCI6MjEsXCIuL2xpYi93YV9kZXRlY3RcIjoyMixcIm9iamVjdC1hc3NpZ25cIjoyM31dLDIxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxuXG52YXIgQkFTRTY0X01BUCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2U2NGRlY29kZShzdHIpIHtcbiAgdmFyIGlucHV0ID0gc3RyLnJlcGxhY2UoL1tcXHJcXG49XS9nLCAnJyksIC8vIHJlbW92ZSBDUi9MRiAmIHBhZGRpbmcgdG8gc2ltcGxpZnkgc2NhblxuICAgICAgbWF4ICAgPSBpbnB1dC5sZW5ndGg7XG5cbiAgdmFyIG91dCA9IG5ldyBVaW50OEFycmF5KChtYXggKiAzKSA+PiAyKTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIHZhciBiaXRzID0gMDtcbiAgdmFyIHB0ciAgPSAwO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDQgPT09IDApICYmIGlkeCkge1xuICAgICAgb3V0W3B0cisrXSA9IChiaXRzID4+IDE2KSAmIDB4RkY7XG4gICAgICBvdXRbcHRyKytdID0gKGJpdHMgPj4gOCkgJiAweEZGO1xuICAgICAgb3V0W3B0cisrXSA9IGJpdHMgJiAweEZGO1xuICAgIH1cblxuICAgIGJpdHMgPSAoYml0cyA8PCA2KSB8IEJBU0U2NF9NQVAuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICB2YXIgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiAxNikgJiAweEZGO1xuICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiA4KSAmIDB4RkY7XG4gICAgb3V0W3B0cisrXSA9IGJpdHMgJiAweEZGO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiAxMCkgJiAweEZGO1xuICAgIG91dFtwdHIrK10gPSAoYml0cyA+PiAyKSAmIDB4RkY7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgb3V0W3B0cisrXSA9IChiaXRzID4+IDQpICYgMHhGRjtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG59LHt9XSwyMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cblxudmFyIHdhO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzV2ViQXNzZW1ibHkoKSB7XG4gIC8vIHVzZSBjYWNoZSBpZiBjYWxsZWQgYmVmb3JlO1xuICBpZiAodHlwZW9mIHdhICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdhO1xuXG4gIHdhID0gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBXZWJBc3NlbWJseSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3YTtcblxuICAvLyBJZiBXZWJBc3NlbmJseSBpcyBkaXNhYmxlZCwgY29kZSBjYW4gdGhyb3cgb24gY29tcGlsZVxuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9icmlvbi9taW4td2FzbS1mYWlsL2Jsb2IvbWFzdGVyL21pbi13YXNtLWZhaWwuaW4uanNcbiAgICAvLyBBZGRpdGlvbmFsIGNoZWNrIHRoYXQgV0EgaW50ZXJuYWxzIGFyZSBjb3JyZWN0XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21tYS1zcGFjaW5nLCBtYXgtbGVuICovXG4gICAgdmFyIGJpbiAgICAgID0gbmV3IFVpbnQ4QXJyYXkoWyAwLDk3LDExNSwxMDksMSwwLDAsMCwxLDYsMSw5NiwxLDEyNywxLDEyNywzLDIsMSwwLDUsMywxLDAsMSw3LDgsMSw0LDExNiwxMDEsMTE1LDExNiwwLDAsMTAsMTYsMSwxNCwwLDMyLDAsNjUsMSw1NCwyLDAsMzIsMCw0MCwyLDAsMTEgXSk7XG4gICAgdmFyIG1vZHVsZSAgID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pO1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHt9KTtcblxuICAgIC8vIHRlc3Qgc3RvcmluZyB0byBhbmQgbG9hZGluZyBmcm9tIGEgbm9uLXplcm8gbG9jYXRpb24gdmlhIGEgcGFyYW1ldGVyLlxuICAgIC8vIFNhZmFyaSBvbiBpT1MgMTEuMi41IHJldHVybnMgMCB1bmV4cGVjdGVkbHkgYXQgbm9uLXplcm8gbG9jYXRpb25zXG4gICAgaWYgKGluc3RhbmNlLmV4cG9ydHMudGVzdCg0KSAhPT0gMCkgd2EgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdhO1xuICB9IGNhdGNoIChfXykge31cblxuICByZXR1cm4gd2E7XG59O1xuXG59LHt9XSwyMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbn0se31dLDI0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbnZhciBidW5kbGVGbiA9IGFyZ3VtZW50c1szXTtcbnZhciBzb3VyY2VzID0gYXJndW1lbnRzWzRdO1xudmFyIGNhY2hlID0gYXJndW1lbnRzWzVdO1xuXG52YXIgc3RyaW5naWZ5ID0gSlNPTi5zdHJpbmdpZnk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBvcHRpb25zKSB7XG4gICAgdmFyIHdrZXk7XG4gICAgdmFyIGNhY2hlS2V5cyA9IE9iamVjdC5rZXlzKGNhY2hlKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FjaGVLZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gY2FjaGVLZXlzW2ldO1xuICAgICAgICB2YXIgZXhwID0gY2FjaGVba2V5XS5leHBvcnRzO1xuICAgICAgICAvLyBVc2luZyBiYWJlbCBhcyBhIHRyYW5zcGlsZXIgdG8gdXNlIGVzbW9kdWxlLCB0aGUgZXhwb3J0IHdpbGwgYWx3YXlzXG4gICAgICAgIC8vIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IGV4cG9ydCBhcyBhIHByb3BlcnR5IG9mIGl0LiBUbyBlbnN1cmVcbiAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGFwaSBhbmQgYmFiZWwgZXNtb2R1bGUgZXhwb3J0cyBhcmUgYm90aCBzdXBwb3J0ZWQgd2VcbiAgICAgICAgLy8gY2hlY2sgZm9yIGJvdGhcbiAgICAgICAgaWYgKGV4cCA9PT0gZm4gfHwgZXhwICYmIGV4cC5kZWZhdWx0ID09PSBmbikge1xuICAgICAgICAgICAgd2tleSA9IGtleTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF3a2V5KSB7XG4gICAgICAgIHdrZXkgPSBNYXRoLmZsb29yKE1hdGgucG93KDE2LCA4KSAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgdmFyIHdjYWNoZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNhY2hlS2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBjYWNoZUtleXNbaV07XG4gICAgICAgICAgICB3Y2FjaGVba2V5XSA9IGtleTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2VzW3drZXldID0gW1xuICAgICAgICAgICAgJ2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeycgKyBmbiArICcoc2VsZik7IH0nLFxuICAgICAgICAgICAgd2NhY2hlXG4gICAgICAgIF07XG4gICAgfVxuICAgIHZhciBza2V5ID0gTWF0aC5mbG9vcihNYXRoLnBvdygxNiwgOCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7XG5cbiAgICB2YXIgc2NhY2hlID0ge307IHNjYWNoZVt3a2V5XSA9IHdrZXk7XG4gICAgc291cmNlc1tza2V5XSA9IFtcbiAgICAgICAgJ2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeycgK1xuICAgICAgICAgICAgLy8gdHJ5IHRvIGNhbGwgZGVmYXVsdCBpZiBkZWZpbmVkIHRvIGFsc28gc3VwcG9ydCBiYWJlbCBlc21vZHVsZSBleHBvcnRzXG4gICAgICAgICAgICAndmFyIGYgPSByZXF1aXJlKCcgKyBzdHJpbmdpZnkod2tleSkgKyAnKTsnICtcbiAgICAgICAgICAgICcoZi5kZWZhdWx0ID8gZi5kZWZhdWx0IDogZikoc2VsZik7JyArXG4gICAgICAgICd9JyxcbiAgICAgICAgc2NhY2hlXG4gICAgXTtcblxuICAgIHZhciB3b3JrZXJTb3VyY2VzID0ge307XG4gICAgcmVzb2x2ZVNvdXJjZXMoc2tleSk7XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlU291cmNlcyhrZXkpIHtcbiAgICAgICAgd29ya2VyU291cmNlc1trZXldID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKHZhciBkZXBQYXRoIGluIHNvdXJjZXNba2V5XVsxXSkge1xuICAgICAgICAgICAgdmFyIGRlcEtleSA9IHNvdXJjZXNba2V5XVsxXVtkZXBQYXRoXTtcbiAgICAgICAgICAgIGlmICghd29ya2VyU291cmNlc1tkZXBLZXldKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVNvdXJjZXMoZGVwS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzcmMgPSAnKCcgKyBidW5kbGVGbiArICcpKHsnXG4gICAgICAgICsgT2JqZWN0LmtleXMod29ya2VyU291cmNlcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdpZnkoa2V5KSArICc6WydcbiAgICAgICAgICAgICAgICArIHNvdXJjZXNba2V5XVswXVxuICAgICAgICAgICAgICAgICsgJywnICsgc3RyaW5naWZ5KHNvdXJjZXNba2V5XVsxXSkgKyAnXSdcbiAgICAgICAgICAgIDtcbiAgICAgICAgfSkuam9pbignLCcpXG4gICAgICAgICsgJ30se30sWycgKyBzdHJpbmdpZnkoc2tleSkgKyAnXSknXG4gICAgO1xuXG4gICAgdmFyIFVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTCB8fCB3aW5kb3cubW96VVJMIHx8IHdpbmRvdy5tc1VSTDtcblxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3NyY10sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSk7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5iYXJlKSB7IHJldHVybiBibG9iOyB9XG4gICAgdmFyIHdvcmtlclVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKTtcbiAgICB3b3JrZXIub2JqZWN0VVJMID0gd29ya2VyVXJsO1xuICAgIHJldHVybiB3b3JrZXI7XG59O1xuXG59LHt9XSxcIi9pbmRleC5qc1wiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG52YXIgYXNzaWduID0gX2RlcmVxXygnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgd2Vid29ya2lmeSA9IF9kZXJlcV8oJ3dlYndvcmtpZnknKTtcblxudmFyIE1hdGhMaWIgPSBfZGVyZXFfKCcuL2xpYi9tYXRobGliJyk7XG5cbnZhciBQb29sID0gX2RlcmVxXygnLi9saWIvcG9vbCcpO1xuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL2xpYi91dGlscycpO1xuXG52YXIgd29ya2VyID0gX2RlcmVxXygnLi9saWIvd29ya2VyJyk7XG5cbnZhciBjcmVhdGVTdGFnZXMgPSBfZGVyZXFfKCcuL2xpYi9zdGVwcGVyJyk7XG5cbnZhciBjcmVhdGVSZWdpb25zID0gX2RlcmVxXygnLi9saWIvdGlsZXInKTsgLy8gRGVkdXBsaWNhdGUgcG9vbHMgJiBsaW1pdGVycyB3aXRoIHRoZSBzYW1lIGNvbmZpZ3Ncbi8vIHdoZW4gdXNlciBjcmVhdGVzIG11bHRpcGxlIHBpY2EgaW5zdGFuY2VzLlxuXG5cbnZhciBzaW5nbGV0b25lcyA9IHt9O1xudmFyIE5FRURfU0FGQVJJX0ZJWCA9IGZhbHNlO1xuXG50cnkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgIE5FRURfU0FGQVJJX0ZJWCA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignU2FmYXJpJykgPj0gMDtcbiAgfVxufSBjYXRjaCAoZSkge31cblxudmFyIGNvbmN1cnJlbmN5ID0gMTtcblxuaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbmN1cnJlbmN5ID0gTWF0aC5taW4obmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMSwgNCk7XG59XG5cbnZhciBERUZBVUxUX1BJQ0FfT1BUUyA9IHtcbiAgdGlsZTogMTAyNCxcbiAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICBmZWF0dXJlczogWydqcycsICd3YXNtJywgJ3d3J10sXG4gIGlkbGU6IDIwMDAsXG4gIGNyZWF0ZUNhbnZhczogZnVuY3Rpb24gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgdG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgdG1wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgdG1wQ2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICByZXR1cm4gdG1wQ2FudmFzO1xuICB9XG59O1xudmFyIERFRkFVTFRfUkVTSVpFX09QVFMgPSB7XG4gIHF1YWxpdHk6IDMsXG4gIGFscGhhOiBmYWxzZSxcbiAgdW5zaGFycEFtb3VudDogMCxcbiAgdW5zaGFycFJhZGl1czogMC4wLFxuICB1bnNoYXJwVGhyZXNob2xkOiAwXG59O1xudmFyIENBTl9ORVdfSU1BR0VfREFUQSA9IGZhbHNlO1xudmFyIENBTl9DUkVBVEVfSU1BR0VfQklUTUFQID0gZmFsc2U7XG52YXIgQ0FOX1VTRV9DQU5WQVNfR0VUX0lNQUdFX0RBVEEgPSBmYWxzZTtcbnZhciBDQU5fVVNFX09GRlNDUkVFTl9DQU5WQVMgPSBmYWxzZTtcbnZhciBDQU5fVVNFX0NJQl9SRUdJT05fRk9SX0lNQUdFID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHdvcmtlckZhYnJpYygpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogd2Vid29ya2lmeSh3b3JrZXIpLFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLnZhbHVlLnRlcm1pbmF0ZSgpO1xuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIHVybCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTCB8fCB3aW5kb3cubW96VVJMIHx8IHdpbmRvdy5tc1VSTDtcblxuICAgICAgICBpZiAodXJsICYmIHVybC5yZXZva2VPYmplY3RVUkwgJiYgdGhpcy52YWx1ZS5vYmplY3RVUkwpIHtcbiAgICAgICAgICB1cmwucmV2b2tlT2JqZWN0VVJMKHRoaXMudmFsdWUub2JqZWN0VVJMKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEFQSSBtZXRob2RzXG5cblxuZnVuY3Rpb24gUGljYShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQaWNhKSkgcmV0dXJuIG5ldyBQaWNhKG9wdGlvbnMpO1xuICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIERFRkFVTFRfUElDQV9PUFRTLCBvcHRpb25zIHx8IHt9KTtcbiAgdmFyIGxpbWl0ZXJfa2V5ID0gXCJsa19cIi5jb25jYXQodGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5KTsgLy8gU2hhcmUgbGltaXRlcnMgdG8gYXZvaWQgbXVsdGlwbGUgcGFyYWxsZWwgd29ya2VycyB3aGVuIHVzZXIgY3JlYXRlc1xuICAvLyBtdWx0aXBsZSBwaWNhIGluc3RhbmNlcy5cblxuICB0aGlzLl9fbGltaXQgPSBzaW5nbGV0b25lc1tsaW1pdGVyX2tleV0gfHwgdXRpbHMubGltaXRlcih0aGlzLm9wdGlvbnMuY29uY3VycmVuY3kpO1xuICBpZiAoIXNpbmdsZXRvbmVzW2xpbWl0ZXJfa2V5XSkgc2luZ2xldG9uZXNbbGltaXRlcl9rZXldID0gdGhpcy5fX2xpbWl0OyAvLyBMaXN0IG9mIHN1cHBvcnRlZCBmZWF0dXJlcywgYWNjb3JkaW5nIHRvIG9wdGlvbnMgJiBicm93c2VyL25vZGUuanNcblxuICB0aGlzLmZlYXR1cmVzID0ge1xuICAgIGpzOiBmYWxzZSxcbiAgICAvLyBwdXJlIEpTIGltcGxlbWVudGF0aW9uLCBjYW4gYmUgZGlzYWJsZWQgZm9yIHRlc3RpbmdcbiAgICB3YXNtOiBmYWxzZSxcbiAgICAvLyB3ZWJhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBmb3IgaGVhdnkgZnVuY3Rpb25zXG4gICAgY2liOiBmYWxzZSxcbiAgICAvLyByZXNpemUgdmlhIGNyZWF0ZUltYWdlQml0bWFwIChvbmx5IEZGIGF0IHRoaXMgbW9tZW50KVxuICAgIHd3OiBmYWxzZSAvLyB3ZWJ3b3JrZXJzXG5cbiAgfTtcbiAgdGhpcy5fX3dvcmtlcnNQb29sID0gbnVsbDsgLy8gU3RvcmUgcmVxdWVzdGVkIGZlYXR1cmVzIGZvciB3ZWJ3b3JrZXJzXG5cbiAgdGhpcy5fX3JlcXVlc3RlZF9mZWF0dXJlcyA9IFtdO1xuICB0aGlzLl9fbWF0aGxpYiA9IG51bGw7XG59XG5cblBpY2EucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHRoaXMuX19pbml0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX19pbml0UHJvbWlzZTsgLy8gVGVzdCBpZiB3ZSBjYW4gY3JlYXRlIEltYWdlRGF0YSB3aXRob3V0IGNhbnZhcyBhbmQgbWVtb3J5IGNvcHlcblxuICBpZiAodHlwZW9mIEltYWdlRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cbiAgICAgIG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDQwMCksIDEwLCAxMCk7XG4gICAgICBDQU5fTkVXX0lNQUdFX0RBVEEgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKF9fKSB7fVxuICB9IC8vIEltYWdlQml0bWFwIGNhbiBiZSBlZmZlY3RpdmUgaW4gMiBwbGFjZXM6XG4gIC8vXG4gIC8vIDEuIFRocmVhZGVkIGpwZWcgdW5wYWNrIChiYXNpYylcbiAgLy8gMi4gQnVpbHQtaW4gcmVzaXplIChibG9ja2VkIGR1ZSBwcm9ibGVtIGluIGNocm9tZSwgc2VlIGlzc3VlICM4OSlcbiAgLy9cbiAgLy8gRm9yIGJhc2ljIHVzZSB3ZSBhbHNvIG5lZWQgSW1hZ2VCaXRtYXAgd28gc3VwcG9ydCAuY2xvc2UoKSBtZXRob2QsXG4gIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9ydS9kb2NzL1dlYi9BUEkvSW1hZ2VCaXRtYXBcblxuXG4gIGlmICh0eXBlb2YgSW1hZ2VCaXRtYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKEltYWdlQml0bWFwLnByb3RvdHlwZSAmJiBJbWFnZUJpdG1hcC5wcm90b3R5cGUuY2xvc2UpIHtcbiAgICAgIENBTl9DUkVBVEVfSU1BR0VfQklUTUFQID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWJ1ZygnSW1hZ2VCaXRtYXAgZG9lcyBub3Qgc3VwcG9ydCAuY2xvc2UoKSwgZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmVhdHVyZXMgPSB0aGlzLm9wdGlvbnMuZmVhdHVyZXMuc2xpY2UoKTtcblxuICBpZiAoZmVhdHVyZXMuaW5kZXhPZignYWxsJykgPj0gMCkge1xuICAgIGZlYXR1cmVzID0gWydjaWInLCAnd2FzbScsICdqcycsICd3dyddO1xuICB9XG5cbiAgdGhpcy5fX3JlcXVlc3RlZF9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICB0aGlzLl9fbWF0aGxpYiA9IG5ldyBNYXRoTGliKGZlYXR1cmVzKTsgLy8gQ2hlY2sgV2ViV29ya2VyIHN1cHBvcnQgaWYgcmVxdWVzdGVkXG5cbiAgaWYgKGZlYXR1cmVzLmluZGV4T2YoJ3d3JykgPj0gMCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAnV29ya2VyJyBpbiB3aW5kb3cpIHtcbiAgICAgIC8vIElFIDw9IDExIGRvbid0IGFsbG93IHRvIGNyZWF0ZSB3ZWJ3b3JrZXJzIGZyb20gc3RyaW5nLiBXZSBzaG91bGQgY2hlY2sgaXQuXG4gICAgICAvLyBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzgwMTgxMC93ZWItd29ya2Vycy1mcm9tLWJsb2ItdXJscy1pbi1pZS0xMC1hbmQtMTFcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB3a3IgPSBfZGVyZXFfKCd3ZWJ3b3JraWZ5JykoZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgIHdrci50ZXJtaW5hdGUoKTtcbiAgICAgICAgdGhpcy5mZWF0dXJlcy53dyA9IHRydWU7IC8vIHBvb2wgdW5pcXVlbmVzcyBkZXBlbmRzIG9uIHBvb2wgY29uZmlnICsgd2Vid29ya2VyIGNvbmZpZ1xuXG4gICAgICAgIHZhciB3cG9vbF9rZXkgPSBcIndwX1wiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMpKTtcblxuICAgICAgICBpZiAoc2luZ2xldG9uZXNbd3Bvb2xfa2V5XSkge1xuICAgICAgICAgIHRoaXMuX193b3JrZXJzUG9vbCA9IHNpbmdsZXRvbmVzW3dwb29sX2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fX3dvcmtlcnNQb29sID0gbmV3IFBvb2wod29ya2VyRmFicmljLCB0aGlzLm9wdGlvbnMuaWRsZSk7XG4gICAgICAgICAgc2luZ2xldG9uZXNbd3Bvb2xfa2V5XSA9IHRoaXMuX193b3JrZXJzUG9vbDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX18pIHt9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRNYXRoID0gdGhpcy5fX21hdGhsaWIuaW5pdCgpLnRoZW4oZnVuY3Rpb24gKG1hdGhsaWIpIHtcbiAgICAvLyBDb3B5IGRldGVjdGVkIGZlYXR1cmVzXG4gICAgYXNzaWduKF90aGlzLmZlYXR1cmVzLCBtYXRobGliLmZlYXR1cmVzKTtcbiAgfSk7XG5cbiAgdmFyIGNoZWNrQ2liUmVzaXplO1xuXG4gIGlmICghQ0FOX0NSRUFURV9JTUFHRV9CSVRNQVApIHtcbiAgICBjaGVja0NpYlJlc2l6ZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2tDaWJSZXNpemUgPSB1dGlscy5jaWJfc3VwcG9ydCh0aGlzLm9wdGlvbnMuY3JlYXRlQ2FudmFzKS50aGVuKGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgIGlmIChfdGhpcy5mZWF0dXJlcy5jaWIgJiYgZmVhdHVyZXMuaW5kZXhPZignY2liJykgPCAwKSB7XG4gICAgICAgIF90aGlzLmRlYnVnKCdjcmVhdGVJbWFnZUJpdG1hcCgpIHJlc2l6ZSBzdXBwb3J0ZWQsIGJ1dCBkaXNhYmxlZCBieSBjb25maWcnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChmZWF0dXJlcy5pbmRleE9mKCdjaWInKSA+PSAwKSBfdGhpcy5mZWF0dXJlcy5jaWIgPSBzdGF0dXM7XG4gICAgfSk7XG4gIH1cblxuICBDQU5fVVNFX0NBTlZBU19HRVRfSU1BR0VfREFUQSA9IHV0aWxzLmNhbl91c2VfY2FudmFzKHRoaXMub3B0aW9ucy5jcmVhdGVDYW52YXMpO1xuICB2YXIgY2hlY2tPZmZzY3JlZW5DYW52YXM7XG5cbiAgaWYgKENBTl9DUkVBVEVfSU1BR0VfQklUTUFQICYmIENBTl9ORVdfSU1BR0VfREFUQSAmJiBmZWF0dXJlcy5pbmRleE9mKCd3dycpICE9PSAtMSkge1xuICAgIGNoZWNrT2Zmc2NyZWVuQ2FudmFzID0gdXRpbHMud29ya2VyX29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydCgpO1xuICB9IGVsc2Uge1xuICAgIGNoZWNrT2Zmc2NyZWVuQ2FudmFzID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfVxuXG4gIGNoZWNrT2Zmc2NyZWVuQ2FudmFzID0gY2hlY2tPZmZzY3JlZW5DYW52YXMudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgQ0FOX1VTRV9PRkZTQ1JFRU5fQ0FOVkFTID0gcmVzdWx0O1xuICB9KTsgLy8gd2UgdXNlIGNyZWF0ZUltYWdlQml0bWFwIHRvIGNyb3AgaW1hZ2UgZGF0YSBhbmQgcGFzcyBpdCB0byB3b3JrZXJzLFxuICAvLyBzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5O1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjIwNjcxXG5cbiAgdmFyIGNoZWNrQ2liUmVnaW9uID0gdXRpbHMuY2liX2Nhbl91c2VfcmVnaW9uKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgQ0FOX1VTRV9DSUJfUkVHSU9OX0ZPUl9JTUFHRSA9IHJlc3VsdDtcbiAgfSk7IC8vIEluaXQgbWF0aCBsaWIuIFRoYXQncyBhc3luYyBiZWNhdXNlIGNhbiBsb2FkIHNvbWVcblxuICB0aGlzLl9faW5pdFByb21pc2UgPSBQcm9taXNlLmFsbChbaW5pdE1hdGgsIGNoZWNrQ2liUmVzaXplLCBjaGVja09mZnNjcmVlbkNhbnZhcywgY2hlY2tDaWJSZWdpb25dKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0pO1xuICByZXR1cm4gdGhpcy5fX2luaXRQcm9taXNlO1xufTsgLy8gQ2FsbCByZXNpemVyIGluIHdlYndvcmtlciBvciBsb2NhbGx5LCBkZXBlbmRpbmcgb24gY29uZmlnXG5cblxuUGljYS5wcm90b3R5cGUuX19pbnZva2VSZXNpemUgPSBmdW5jdGlvbiAodGlsZU9wdHMsIG9wdHMpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgLy8gU2hhcmUgY2FjaGUgYmV0d2VlbiBjYWxsczpcbiAgLy9cbiAgLy8gLSB3YXNtIGluc3RhbmNlXG4gIC8vIC0gd2FzbSBtZW1vcnkgb2JqZWN0XG4gIC8vXG4gIG9wdHMuX19tYXRoQ2FjaGUgPSBvcHRzLl9fbWF0aENhY2hlIHx8IHt9O1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFfdGhpczIuZmVhdHVyZXMud3cpIHtcbiAgICAgIC8vIG5vdCBwb3NzaWJsZSB0byBoYXZlIEltYWdlQml0bWFwIGhlcmUgaWYgdXNlciBkaXNhYmxlZCBXV1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogX3RoaXMyLl9fbWF0aGxpYi5yZXNpemVBbmRVbnNoYXJwKHRpbGVPcHRzLCBvcHRzLl9fbWF0aENhY2hlKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHcgPSBfdGhpczIuX193b3JrZXJzUG9vbC5hY3F1aXJlKCk7XG5cbiAgICAgIGlmIChvcHRzLmNhbmNlbFRva2VuKSBvcHRzLmNhbmNlbFRva2VuW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgdy52YWx1ZS5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgdy5yZWxlYXNlKCk7XG4gICAgICAgIGlmIChldi5kYXRhLmVycikgcmVqZWN0KGV2LmRhdGEuZXJyKTtlbHNlIHJlc29sdmUoZXYuZGF0YSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgdHJhbnNmZXIgPSBbXTtcbiAgICAgIGlmICh0aWxlT3B0cy5zcmMpIHRyYW5zZmVyLnB1c2godGlsZU9wdHMuc3JjLmJ1ZmZlcik7XG4gICAgICBpZiAodGlsZU9wdHMuc3JjQml0bWFwKSB0cmFuc2Zlci5wdXNoKHRpbGVPcHRzLnNyY0JpdG1hcCk7XG4gICAgICB3LnZhbHVlLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgb3B0czogdGlsZU9wdHMsXG4gICAgICAgIGZlYXR1cmVzOiBfdGhpczIuX19yZXF1ZXN0ZWRfZmVhdHVyZXMsXG4gICAgICAgIHByZWxvYWQ6IHtcbiAgICAgICAgICB3YXNtX25vZHVsZTogX3RoaXMyLl9fbWF0aGxpYi5fX1xuICAgICAgICB9XG4gICAgICB9LCB0cmFuc2Zlcik7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8gdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIHByb21pc2UgaWYgY3JlYXRlSW1hZ2VCaXRtYXAgaXMgdXNlZFxuXG5cblBpY2EucHJvdG90eXBlLl9fZXh0cmFjdFRpbGVEYXRhID0gZnVuY3Rpb24gKHRpbGUsIGZyb20sIG9wdHMsIHN0YWdlRW52LCBleHRyYWN0VG8pIHtcbiAgaWYgKHRoaXMuZmVhdHVyZXMud3cgJiYgQ0FOX1VTRV9PRkZTQ1JFRU5fQ0FOVkFTICYmICggLy8gY3JlYXRlSW1hZ2VCaXRtYXAgZG9lc24ndCB3b3JrIGZvciBpbWFnZXMgKEltYWdlLCBJbWFnZUJpdG1hcCkgd2l0aCBFeGlmIG9yaWVudGF0aW9uIGluIENocm9tZSxcbiAgLy8gY2FuIHVzZSBjYW52YXMgYmVjYXVzZSBjYW52YXMgZG9lc24ndCBoYXZlIG9yaWVudGF0aW9uO1xuICAvLyBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTIyMDY3MVxuICB1dGlscy5pc0NhbnZhcyhmcm9tKSB8fCBDQU5fVVNFX0NJQl9SRUdJT05fRk9SX0lNQUdFKSkge1xuICAgIHRoaXMuZGVidWcoJ0NyZWF0ZSB0aWxlIGZvciBPZmZzY3JlZW5DYW52YXMnKTtcbiAgICByZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoc3RhZ2VFbnYuc3JjSW1hZ2VCaXRtYXAgfHwgZnJvbSwgdGlsZS54LCB0aWxlLnksIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0KS50aGVuKGZ1bmN0aW9uIChiaXRtYXApIHtcbiAgICAgIGV4dHJhY3RUby5zcmNCaXRtYXAgPSBiaXRtYXA7XG4gICAgICByZXR1cm4gZXh0cmFjdFRvO1xuICAgIH0pO1xuICB9IC8vIEV4dHJhY3QgdGlsZSBSR0JBIGJ1ZmZlciwgZGVwZW5kaW5nIG9uIGlucHV0IHR5cGVcblxuXG4gIGlmICh1dGlscy5pc0NhbnZhcyhmcm9tKSkge1xuICAgIGlmICghc3RhZ2VFbnYuc3JjQ3R4KSBzdGFnZUVudi5zcmNDdHggPSBmcm9tLmdldENvbnRleHQoJzJkJywge1xuICAgICAgYWxwaGE6IEJvb2xlYW4ob3B0cy5hbHBoYSlcbiAgICB9KTsgLy8gSWYgaW5wdXQgaXMgQ2FudmFzIC0gZXh0cmFjdCByZWdpb24gZGF0YSBkaXJlY3RseVxuXG4gICAgdGhpcy5kZWJ1ZygnR2V0IHRpbGUgcGl4ZWwgZGF0YScpO1xuICAgIGV4dHJhY3RUby5zcmMgPSBzdGFnZUVudi5zcmNDdHguZ2V0SW1hZ2VEYXRhKHRpbGUueCwgdGlsZS55LCB0aWxlLndpZHRoLCB0aWxlLmhlaWdodCkuZGF0YTtcbiAgICByZXR1cm4gZXh0cmFjdFRvO1xuICB9IC8vIElmIGlucHV0IGlzIEltYWdlIG9yIGRlY29kZWQgdG8gSW1hZ2VCaXRtYXAsXG4gIC8vIGRyYXcgcmVnaW9uIHRvIHRlbXBvcmFyeSBjYW52YXMgYW5kIGV4dHJhY3QgZGF0YSBmcm9tIGl0XG4gIC8vXG4gIC8vIE5vdGUhIEF0dGVtcHQgdG8gcmV1c2UgdGhpcyBjYW52YXMgY2F1c2VzIHNpZ25pZmljYW50IHNsb3dkb3duIGluIGNocm9tZVxuICAvL1xuXG5cbiAgdGhpcy5kZWJ1ZygnRHJhdyB0aWxlIGltYWdlQml0bWFwL2ltYWdlIHRvIHRlbXBvcmFyeSBjYW52YXMnKTtcbiAgdmFyIHRtcENhbnZhcyA9IHRoaXMub3B0aW9ucy5jcmVhdGVDYW52YXModGlsZS53aWR0aCwgdGlsZS5oZWlnaHQpO1xuICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgIGFscGhhOiBCb29sZWFuKG9wdHMuYWxwaGEpXG4gIH0pO1xuICB0bXBDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2NvcHknO1xuICB0bXBDdHguZHJhd0ltYWdlKHN0YWdlRW52LnNyY0ltYWdlQml0bWFwIHx8IGZyb20sIHRpbGUueCwgdGlsZS55LCB0aWxlLndpZHRoLCB0aWxlLmhlaWdodCwgMCwgMCwgdGlsZS53aWR0aCwgdGlsZS5oZWlnaHQpO1xuICB0aGlzLmRlYnVnKCdHZXQgdGlsZSBwaXhlbCBkYXRhJyk7XG4gIGV4dHJhY3RUby5zcmMgPSB0bXBDdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHRpbGUud2lkdGgsIHRpbGUuaGVpZ2h0KS5kYXRhOyAvLyBTYWZhcmkgMTIgd29ya2Fyb3VuZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3BpY2EvaXNzdWVzLzE5OVxuXG4gIHRtcENhbnZhcy53aWR0aCA9IHRtcENhbnZhcy5oZWlnaHQgPSAwO1xuICByZXR1cm4gZXh0cmFjdFRvO1xufTtcblxuUGljYS5wcm90b3R5cGUuX19sYW5kVGlsZURhdGEgPSBmdW5jdGlvbiAodGlsZSwgcmVzdWx0LCBzdGFnZUVudikge1xuICB2YXIgdG9JbWFnZURhdGE7XG4gIHRoaXMuZGVidWcoJ0NvbnZlcnQgcmF3IHJnYmEgdGlsZSByZXN1bHQgdG8gSW1hZ2VEYXRhJyk7XG5cbiAgaWYgKHJlc3VsdC5iaXRtYXApIHtcbiAgICBzdGFnZUVudi50b0N0eC5kcmF3SW1hZ2UocmVzdWx0LmJpdG1hcCwgdGlsZS50b1gsIHRpbGUudG9ZKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChDQU5fTkVXX0lNQUdFX0RBVEEpIHtcbiAgICAvLyB0aGlzIGJyYW5jaCBpcyBmb3IgbW9kZXJuIGJyb3dzZXJzXG4gICAgLy8gSWYgYG5ldyBJbWFnZURhdGEoKWAgJiBVaW50OENsYW1wZWRBcnJheSBzdXBvcnRlZFxuICAgIHRvSW1hZ2VEYXRhID0gbmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkocmVzdWx0LmRhdGEpLCB0aWxlLnRvV2lkdGgsIHRpbGUudG9IZWlnaHQpO1xuICB9IGVsc2Uge1xuICAgIC8vIGZhbGxiYWNrIGZvciBgbm9kZS1jYW52YXNgIGFuZCBvbGQgYnJvd3NlcnNcbiAgICAvLyAoSUUxMSBoYXMgSW1hZ2VEYXRhIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGBuZXcgSW1hZ2VEYXRhKClgKVxuICAgIHRvSW1hZ2VEYXRhID0gc3RhZ2VFbnYudG9DdHguY3JlYXRlSW1hZ2VEYXRhKHRpbGUudG9XaWR0aCwgdGlsZS50b0hlaWdodCk7XG5cbiAgICBpZiAodG9JbWFnZURhdGEuZGF0YS5zZXQpIHtcbiAgICAgIHRvSW1hZ2VEYXRhLmRhdGEuc2V0KHJlc3VsdC5kYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSUU5IGRvbid0IGhhdmUgYC5zZXQoKWBcbiAgICAgIGZvciAodmFyIGkgPSB0b0ltYWdlRGF0YS5kYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRvSW1hZ2VEYXRhLmRhdGFbaV0gPSByZXN1bHQuZGF0YVtpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLmRlYnVnKCdEcmF3IHRpbGUnKTtcblxuICBpZiAoTkVFRF9TQUZBUklfRklYKSB7XG4gICAgLy8gU2FmYXJpIGRyYXdzIHRoaW4gd2hpdGUgc3RyaXBlcyBiZXR3ZWVuIHRpbGVzIHdpdGhvdXQgdGhpcyBmaXhcbiAgICBzdGFnZUVudi50b0N0eC5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEsIHRpbGUudG9YLCB0aWxlLnRvWSwgdGlsZS50b0lubmVyWCAtIHRpbGUudG9YLCB0aWxlLnRvSW5uZXJZIC0gdGlsZS50b1ksIHRpbGUudG9Jbm5lcldpZHRoICsgMWUtNSwgdGlsZS50b0lubmVySGVpZ2h0ICsgMWUtNSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhZ2VFbnYudG9DdHgucHV0SW1hZ2VEYXRhKHRvSW1hZ2VEYXRhLCB0aWxlLnRvWCwgdGlsZS50b1ksIHRpbGUudG9Jbm5lclggLSB0aWxlLnRvWCwgdGlsZS50b0lubmVyWSAtIHRpbGUudG9ZLCB0aWxlLnRvSW5uZXJXaWR0aCwgdGlsZS50b0lubmVySGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuUGljYS5wcm90b3R5cGUuX190aWxlQW5kUmVzaXplID0gZnVuY3Rpb24gKGZyb20sIHRvLCBvcHRzKSB7XG4gIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gIHZhciBzdGFnZUVudiA9IHtcbiAgICBzcmNDdHg6IG51bGwsXG4gICAgc3JjSW1hZ2VCaXRtYXA6IG51bGwsXG4gICAgaXNJbWFnZUJpdG1hcFJldXNlZDogZmFsc2UsXG4gICAgdG9DdHg6IG51bGxcbiAgfTtcblxuICB2YXIgcHJvY2Vzc1RpbGUgPSBmdW5jdGlvbiBwcm9jZXNzVGlsZSh0aWxlKSB7XG4gICAgcmV0dXJuIF90aGlzMy5fX2xpbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjtcbiAgICAgIHZhciB0aWxlT3B0cyA9IHtcbiAgICAgICAgd2lkdGg6IHRpbGUud2lkdGgsXG4gICAgICAgIGhlaWdodDogdGlsZS5oZWlnaHQsXG4gICAgICAgIHRvV2lkdGg6IHRpbGUudG9XaWR0aCxcbiAgICAgICAgdG9IZWlnaHQ6IHRpbGUudG9IZWlnaHQsXG4gICAgICAgIHNjYWxlWDogdGlsZS5zY2FsZVgsXG4gICAgICAgIHNjYWxlWTogdGlsZS5zY2FsZVksXG4gICAgICAgIG9mZnNldFg6IHRpbGUub2Zmc2V0WCxcbiAgICAgICAgb2Zmc2V0WTogdGlsZS5vZmZzZXRZLFxuICAgICAgICBxdWFsaXR5OiBvcHRzLnF1YWxpdHksXG4gICAgICAgIGFscGhhOiBvcHRzLmFscGhhLFxuICAgICAgICB1bnNoYXJwQW1vdW50OiBvcHRzLnVuc2hhcnBBbW91bnQsXG4gICAgICAgIHVuc2hhcnBSYWRpdXM6IG9wdHMudW5zaGFycFJhZGl1cyxcbiAgICAgICAgdW5zaGFycFRocmVzaG9sZDogb3B0cy51bnNoYXJwVGhyZXNob2xkXG4gICAgICB9O1xuXG4gICAgICBfdGhpczMuZGVidWcoJ0ludm9rZSByZXNpemUgbWF0aCcpO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRpbGVPcHRzKS50aGVuKGZ1bmN0aW9uICh0aWxlT3B0cykge1xuICAgICAgICByZXR1cm4gX3RoaXMzLl9fZXh0cmFjdFRpbGVEYXRhKHRpbGUsIGZyb20sIG9wdHMsIHN0YWdlRW52LCB0aWxlT3B0cyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh0aWxlT3B0cykge1xuICAgICAgICBfdGhpczMuZGVidWcoJ0ludm9rZSByZXNpemUgbWF0aCcpO1xuXG4gICAgICAgIHJldHVybiBfdGhpczMuX19pbnZva2VSZXNpemUodGlsZU9wdHMsIG9wdHMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjtcbiAgICAgICAgc3RhZ2VFbnYuc3JjSW1hZ2VEYXRhID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5fX2xhbmRUaWxlRGF0YSh0aWxlLCByZXN1bHQsIHN0YWdlRW52KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9OyAvLyBOZWVkIHRvIG5vcm1hbGl6ZSBkYXRhIHNvdXJjZSBmaXJzdC4gSXQgY2FuIGJlIGNhbnZhcyBvciBpbWFnZS5cbiAgLy8gSWYgaW1hZ2UgLSB0cnkgdG8gZGVjb2RlIGluIGJhY2tncm91bmQgaWYgcG9zc2libGVcblxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBzdGFnZUVudi50b0N0eCA9IHRvLmdldENvbnRleHQoJzJkJywge1xuICAgICAgYWxwaGE6IEJvb2xlYW4ob3B0cy5hbHBoYSlcbiAgICB9KTtcbiAgICBpZiAodXRpbHMuaXNDYW52YXMoZnJvbSkpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHV0aWxzLmlzSW1hZ2VCaXRtYXAoZnJvbSkpIHtcbiAgICAgIHN0YWdlRW52LnNyY0ltYWdlQml0bWFwID0gZnJvbTtcbiAgICAgIHN0YWdlRW52LmlzSW1hZ2VCaXRtYXBSZXVzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzSW1hZ2UoZnJvbSkpIHtcbiAgICAgIC8vIHRyeSBkbyBkZWNvZGUgaW1hZ2UgaW4gYmFja2dyb3VuZCBmb3IgZmFzdGVyIG5leHQgb3BlcmF0aW9ucztcbiAgICAgIC8vIGlmIHdlJ3JlIHVzaW5nIG9mZnNjcmVlbiBjYW52YXMsIGNpYiBpcyBjYWxsZWQgcGVyIHRpbGUsIHNvIG5vdCBuZWVkZWQgaGVyZVxuICAgICAgaWYgKCFDQU5fQ1JFQVRFX0lNQUdFX0JJVE1BUCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIF90aGlzMy5kZWJ1ZygnRGVjb2RlIGltYWdlIHZpYSBjcmVhdGVJbWFnZUJpdG1hcCcpO1xuXG4gICAgICByZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoZnJvbSkudGhlbihmdW5jdGlvbiAoaW1hZ2VCaXRtYXApIHtcbiAgICAgICAgc3RhZ2VFbnYuc3JjSW1hZ2VCaXRtYXAgPSBpbWFnZUJpdG1hcDtcbiAgICAgIH0pIC8vIFN1cHByZXNzIGVycm9yIHRvIHVzZSBmYWxsYmFjaywgaWYgbWV0aG9kIGZhaWxzXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3BpY2EvaXNzdWVzLzE5MFxuXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpY2E6IFwiLmZyb21cIiBzaG91bGQgYmUgSW1hZ2UsIENhbnZhcyBvciBJbWFnZUJpdG1hcCcpO1xuICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAob3B0cy5jYW5jZWxlZCkgcmV0dXJuIG9wdHMuY2FuY2VsVG9rZW47XG5cbiAgICBfdGhpczMuZGVidWcoJ0NhbGN1bGF0ZSB0aWxlcycpOyAvL1xuICAgIC8vIEhlcmUgd2UgYXJlIHdpdGggXCJub3JtYWxpemVkXCIgc291cmNlLFxuICAgIC8vIGZvbGxvdyB0byB0aWxpbmdcbiAgICAvL1xuXG5cbiAgICB2YXIgcmVnaW9ucyA9IGNyZWF0ZVJlZ2lvbnMoe1xuICAgICAgd2lkdGg6IG9wdHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IG9wdHMuaGVpZ2h0LFxuICAgICAgc3JjVGlsZVNpemU6IF90aGlzMy5vcHRpb25zLnRpbGUsXG4gICAgICB0b1dpZHRoOiBvcHRzLnRvV2lkdGgsXG4gICAgICB0b0hlaWdodDogb3B0cy50b0hlaWdodCxcbiAgICAgIGRlc3RUaWxlQm9yZGVyOiBvcHRzLl9fZGVzdFRpbGVCb3JkZXJcbiAgICB9KTtcbiAgICB2YXIgam9icyA9IHJlZ2lvbnMubWFwKGZ1bmN0aW9uICh0aWxlKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc1RpbGUodGlsZSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwKHN0YWdlRW52KSB7XG4gICAgICBpZiAoc3RhZ2VFbnYuc3JjSW1hZ2VCaXRtYXApIHtcbiAgICAgICAgaWYgKCFzdGFnZUVudi5pc0ltYWdlQml0bWFwUmV1c2VkKSBzdGFnZUVudi5zcmNJbWFnZUJpdG1hcC5jbG9zZSgpO1xuICAgICAgICBzdGFnZUVudi5zcmNJbWFnZUJpdG1hcCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMzLmRlYnVnKCdQcm9jZXNzIHRpbGVzJyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoam9icykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMuZGVidWcoJ0ZpbmlzaGVkIScpO1xuXG4gICAgICBjbGVhbnVwKHN0YWdlRW52KTtcbiAgICAgIHJldHVybiB0bztcbiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjbGVhbnVwKHN0YWdlRW52KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5QaWNhLnByb3RvdHlwZS5fX3Byb2Nlc3NTdGFnZXMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBmcm9tLCB0bywgb3B0cykge1xuICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICBpZiAob3B0cy5jYW5jZWxlZCkgcmV0dXJuIG9wdHMuY2FuY2VsVG9rZW47XG5cbiAgdmFyIF9zdGFnZXMkc2hpZnQgPSBzdGFnZXMuc2hpZnQoKSxcbiAgICAgIF9zdGFnZXMkc2hpZnQyID0gX3NsaWNlZFRvQXJyYXkoX3N0YWdlcyRzaGlmdCwgMiksXG4gICAgICB0b1dpZHRoID0gX3N0YWdlcyRzaGlmdDJbMF0sXG4gICAgICB0b0hlaWdodCA9IF9zdGFnZXMkc2hpZnQyWzFdO1xuXG4gIHZhciBpc0xhc3RTdGFnZSA9IHN0YWdlcy5sZW5ndGggPT09IDA7XG4gIG9wdHMgPSBhc3NpZ24oe30sIG9wdHMsIHtcbiAgICB0b1dpZHRoOiB0b1dpZHRoLFxuICAgIHRvSGVpZ2h0OiB0b0hlaWdodCxcbiAgICAvLyBvbmx5IHVzZSB1c2VyLWRlZmluZWQgcXVhbGl0eSBmb3IgdGhlIGxhc3Qgc3RhZ2UsXG4gICAgLy8gdXNlIHNpbXBsZXIgKEhhbW1pbmcpIGZpbHRlciBmb3IgdGhlIGZpcnN0IHN0YWdlcyB3aGVyZVxuICAgIC8vIHNjYWxlIGZhY3RvciBpcyBsYXJnZSBlbm91Z2ggKG1vcmUgdGhhbiAyLTMpXG4gICAgcXVhbGl0eTogaXNMYXN0U3RhZ2UgPyBvcHRzLnF1YWxpdHkgOiBNYXRoLm1pbigxLCBvcHRzLnF1YWxpdHkpXG4gIH0pO1xuICB2YXIgdG1wQ2FudmFzO1xuXG4gIGlmICghaXNMYXN0U3RhZ2UpIHtcbiAgICAvLyBjcmVhdGUgdGVtcG9yYXJ5IGNhbnZhc1xuICAgIHRtcENhbnZhcyA9IHRoaXMub3B0aW9ucy5jcmVhdGVDYW52YXModG9XaWR0aCwgdG9IZWlnaHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX190aWxlQW5kUmVzaXplKGZyb20sIGlzTGFzdFN0YWdlID8gdG8gOiB0bXBDYW52YXMsIG9wdHMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0xhc3RTdGFnZSkgcmV0dXJuIHRvO1xuICAgIG9wdHMud2lkdGggPSB0b1dpZHRoO1xuICAgIG9wdHMuaGVpZ2h0ID0gdG9IZWlnaHQ7XG4gICAgcmV0dXJuIF90aGlzNC5fX3Byb2Nlc3NTdGFnZXMoc3RhZ2VzLCB0bXBDYW52YXMsIHRvLCBvcHRzKTtcbiAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgaWYgKHRtcENhbnZhcykge1xuICAgICAgLy8gU2FmYXJpIDEyIHdvcmthcm91bmRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGljYS9pc3N1ZXMvMTk5XG4gICAgICB0bXBDYW52YXMud2lkdGggPSB0bXBDYW52YXMuaGVpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn07XG5cblBpY2EucHJvdG90eXBlLl9fcmVzaXplVmlhQ3JlYXRlSW1hZ2VCaXRtYXAgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIG9wdHMpIHtcbiAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgdmFyIHRvQ3R4ID0gdG8uZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgYWxwaGE6IEJvb2xlYW4ob3B0cy5hbHBoYSlcbiAgfSk7XG4gIHRoaXMuZGVidWcoJ1Jlc2l6ZSB2aWEgY3JlYXRlSW1hZ2VCaXRtYXAoKScpO1xuICByZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAoZnJvbSwge1xuICAgIHJlc2l6ZVdpZHRoOiBvcHRzLnRvV2lkdGgsXG4gICAgcmVzaXplSGVpZ2h0OiBvcHRzLnRvSGVpZ2h0LFxuICAgIHJlc2l6ZVF1YWxpdHk6IHV0aWxzLmNpYl9xdWFsaXR5X25hbWUob3B0cy5xdWFsaXR5KVxuICB9KS50aGVuKGZ1bmN0aW9uIChpbWFnZUJpdG1hcCkge1xuICAgIGlmIChvcHRzLmNhbmNlbGVkKSByZXR1cm4gb3B0cy5jYW5jZWxUb2tlbjsgLy8gaWYgbm8gdW5zaGFycCAtIGRyYXcgZGlyZWN0bHkgdG8gb3V0cHV0IGNhbnZhc1xuXG4gICAgaWYgKCFvcHRzLnVuc2hhcnBBbW91bnQpIHtcbiAgICAgIHRvQ3R4LmRyYXdJbWFnZShpbWFnZUJpdG1hcCwgMCwgMCk7XG4gICAgICBpbWFnZUJpdG1hcC5jbG9zZSgpO1xuICAgICAgdG9DdHggPSBudWxsO1xuXG4gICAgICBfdGhpczUuZGVidWcoJ0ZpbmlzaGVkIScpO1xuXG4gICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgX3RoaXM1LmRlYnVnKCdVbnNoYXJwIHJlc3VsdCcpO1xuXG4gICAgdmFyIHRtcENhbnZhcyA9IF90aGlzNS5vcHRpb25zLmNyZWF0ZUNhbnZhcyhvcHRzLnRvV2lkdGgsIG9wdHMudG9IZWlnaHQpO1xuXG4gICAgdmFyIHRtcEN0eCA9IHRtcENhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgIGFscGhhOiBCb29sZWFuKG9wdHMuYWxwaGEpXG4gICAgfSk7XG4gICAgdG1wQ3R4LmRyYXdJbWFnZShpbWFnZUJpdG1hcCwgMCwgMCk7XG4gICAgaW1hZ2VCaXRtYXAuY2xvc2UoKTtcbiAgICB2YXIgaURhdGEgPSB0bXBDdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIG9wdHMudG9XaWR0aCwgb3B0cy50b0hlaWdodCk7XG5cbiAgICBfdGhpczUuX19tYXRobGliLnVuc2hhcnBfbWFzayhpRGF0YS5kYXRhLCBvcHRzLnRvV2lkdGgsIG9wdHMudG9IZWlnaHQsIG9wdHMudW5zaGFycEFtb3VudCwgb3B0cy51bnNoYXJwUmFkaXVzLCBvcHRzLnVuc2hhcnBUaHJlc2hvbGQpO1xuXG4gICAgdG9DdHgucHV0SW1hZ2VEYXRhKGlEYXRhLCAwLCAwKTsgLy8gU2FmYXJpIDEyIHdvcmthcm91bmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3BpY2EvaXNzdWVzLzE5OVxuXG4gICAgdG1wQ2FudmFzLndpZHRoID0gdG1wQ2FudmFzLmhlaWdodCA9IDA7XG4gICAgaURhdGEgPSB0bXBDdHggPSB0bXBDYW52YXMgPSB0b0N0eCA9IG51bGw7XG5cbiAgICBfdGhpczUuZGVidWcoJ0ZpbmlzaGVkIScpO1xuXG4gICAgcmV0dXJuIHRvO1xuICB9KTtcbn07XG5cblBpY2EucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgb3B0aW9ucykge1xuICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICB0aGlzLmRlYnVnKCdTdGFydCByZXNpemUuLi4nKTtcbiAgdmFyIG9wdHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUkVTSVpFX09QVFMpO1xuXG4gIGlmICghaXNOYU4ob3B0aW9ucykpIHtcbiAgICBvcHRzID0gYXNzaWduKG9wdHMsIHtcbiAgICAgIHF1YWxpdHk6IG9wdGlvbnNcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgb3B0cyA9IGFzc2lnbihvcHRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIG9wdHMudG9XaWR0aCA9IHRvLndpZHRoO1xuICBvcHRzLnRvSGVpZ2h0ID0gdG8uaGVpZ2h0O1xuICBvcHRzLndpZHRoID0gZnJvbS5uYXR1cmFsV2lkdGggfHwgZnJvbS53aWR0aDtcbiAgb3B0cy5oZWlnaHQgPSBmcm9tLm5hdHVyYWxIZWlnaHQgfHwgZnJvbS5oZWlnaHQ7IC8vIFByZXZlbnQgc3RlcHBlciBmcm9tIGluZmluaXRlIGxvb3BcblxuICBpZiAodG8ud2lkdGggPT09IDAgfHwgdG8uaGVpZ2h0ID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgb3V0cHV0IHNpemU6IFwiLmNvbmNhdCh0by53aWR0aCwgXCJ4XCIpLmNvbmNhdCh0by5oZWlnaHQpKSk7XG4gIH1cblxuICBpZiAob3B0cy51bnNoYXJwUmFkaXVzID4gMikgb3B0cy51bnNoYXJwUmFkaXVzID0gMjtcbiAgb3B0cy5jYW5jZWxlZCA9IGZhbHNlO1xuXG4gIGlmIChvcHRzLmNhbmNlbFRva2VuKSB7XG4gICAgLy8gV3JhcCBjYW5jZWxUb2tlbiB0byBhdm9pZCBzdWNjZXNzaXZlIHJlc29sdmUgJiBzZXQgZmxhZ1xuICAgIG9wdHMuY2FuY2VsVG9rZW4gPSBvcHRzLmNhbmNlbFRva2VuLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIG9wdHMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgdGhyb3cgZGF0YTtcbiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBvcHRzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBERVNUX1RJTEVfQk9SREVSID0gMzsgLy8gTWF4IHBvc3NpYmxlIGZpbHRlciB3aW5kb3cgc2l6ZVxuXG4gIG9wdHMuX19kZXN0VGlsZUJvcmRlciA9IE1hdGguY2VpbChNYXRoLm1heChERVNUX1RJTEVfQk9SREVSLCAyLjUgKiBvcHRzLnVuc2hhcnBSYWRpdXMgfCAwKSk7XG4gIHJldHVybiB0aGlzLmluaXQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAob3B0cy5jYW5jZWxlZCkgcmV0dXJuIG9wdHMuY2FuY2VsVG9rZW47IC8vIGlmIGNyZWF0ZUltYWdlQml0bWFwIHN1cHBvcnRzIHJlc2l6ZSwganVzdCBkbyBpdCBhbmQgcmV0dXJuXG5cbiAgICBpZiAoX3RoaXM2LmZlYXR1cmVzLmNpYikge1xuICAgICAgcmV0dXJuIF90aGlzNi5fX3Jlc2l6ZVZpYUNyZWF0ZUltYWdlQml0bWFwKGZyb20sIHRvLCBvcHRzKTtcbiAgICB9XG5cbiAgICBpZiAoIUNBTl9VU0VfQ0FOVkFTX0dFVF9JTUFHRV9EQVRBKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdQaWNhOiBjYW5ub3QgdXNlIGdldEltYWdlRGF0YSBvbiBjYW52YXMsICcgKyBcIm1ha2Ugc3VyZSBmaW5nZXJwcmludGluZyBwcm90ZWN0aW9uIGlzbid0IGVuYWJsZWRcIik7XG4gICAgICBlcnIuY29kZSA9ICdFUlJfR0VUX0lNQUdFX0RBVEEnO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gLy9cbiAgICAvLyBObyBlYXN5IHdheSwgbGV0J3MgcmVzaXplIG1hbnVhbGx5IHZpYSBhcnJheXNcbiAgICAvL1xuXG5cbiAgICB2YXIgc3RhZ2VzID0gY3JlYXRlU3RhZ2VzKG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0LCBvcHRzLnRvV2lkdGgsIG9wdHMudG9IZWlnaHQsIF90aGlzNi5vcHRpb25zLnRpbGUsIG9wdHMuX19kZXN0VGlsZUJvcmRlcik7XG4gICAgcmV0dXJuIF90aGlzNi5fX3Byb2Nlc3NTdGFnZXMoc3RhZ2VzLCBmcm9tLCB0bywgb3B0cyk7XG4gIH0pO1xufTsgLy8gUkdCQSBidWZmZXIgcmVzaXplXG4vL1xuXG5cblBpY2EucHJvdG90eXBlLnJlc2l6ZUJ1ZmZlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gIHZhciBvcHRzID0gYXNzaWduKHt9LCBERUZBVUxUX1JFU0laRV9PUFRTLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRoaXMuaW5pdCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGhpczcuX19tYXRobGliLnJlc2l6ZUFuZFVuc2hhcnAob3B0cyk7XG4gIH0pO1xufTtcblxuUGljYS5wcm90b3R5cGUudG9CbG9iID0gZnVuY3Rpb24gKGNhbnZhcywgbWltZVR5cGUsIHF1YWxpdHkpIHtcbiAgbWltZVR5cGUgPSBtaW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgaWYgKGNhbnZhcy50b0Jsb2IpIHtcbiAgICAgIGNhbnZhcy50b0Jsb2IoZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYmxvYik7XG4gICAgICB9LCBtaW1lVHlwZSwgcXVhbGl0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNhbnZhcy5jb252ZXJ0VG9CbG9iKSB7XG4gICAgICByZXNvbHZlKGNhbnZhcy5jb252ZXJ0VG9CbG9iKHtcbiAgICAgICAgdHlwZTogbWltZVR5cGUsXG4gICAgICAgIHF1YWxpdHk6IHF1YWxpdHlcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZhbGxiYWNrIGZvciBvbGQgYnJvd3NlcnNcblxuXG4gICAgdmFyIGFzU3RyaW5nID0gYXRvYihjYW52YXMudG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KS5zcGxpdCgnLCcpWzFdKTtcbiAgICB2YXIgbGVuID0gYXNTdHJpbmcubGVuZ3RoO1xuICAgIHZhciBhc0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KGxlbik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhc0J1ZmZlcltpXSA9IGFzU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZShuZXcgQmxvYihbYXNCdWZmZXJdLCB7XG4gICAgICB0eXBlOiBtaW1lVHlwZVxuICAgIH0pKTtcbiAgfSk7XG59O1xuXG5QaWNhLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBpY2E7XG5cbn0se1wiLi9saWIvbWF0aGxpYlwiOjEsXCIuL2xpYi9wb29sXCI6MTMsXCIuL2xpYi9zdGVwcGVyXCI6MTQsXCIuL2xpYi90aWxlclwiOjE1LFwiLi9saWIvdXRpbHNcIjoxNixcIi4vbGliL3dvcmtlclwiOjE3LFwib2JqZWN0LWFzc2lnblwiOjIzLFwid2Vid29ya2lmeVwiOjI0fV19LHt9LFtdKShcIi9pbmRleC5qc1wiKVxufSk7XG59KTtcblxudmFyIGltYWdlX3RyYXZlcnNlID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSGVscGVyc1xuLy9cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgdmFyIGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyLmNvZGUgPSBjb2RlO1xuICByZXR1cm4gZXJyO1xufVxuXG5cbi8vIENvbnZlcnQgbnVtYmVyIHRvIDB4SEggc3RyaW5nXG4vL1xuZnVuY3Rpb24gdG9faGV4KG51bWJlcikge1xuICB2YXIgbiA9IG51bWJlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgZm9yICh2YXIgaSA9IDIgLSBuLmxlbmd0aDsgaSA+IDA7IGktLSkgbiA9ICcwJyArIG47XG4gIHJldHVybiAnMHgnICsgbjtcbn1cblxuXG5mdW5jdGlvbiB1dGY4X2VuY29kZShzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHV0ZjhfZGVjb2RlKHN0cikge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHN0cikpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbi8vIENoZWNrIGlmIGlucHV0IGlzIGEgVWludDhBcnJheVxuLy9cbmZ1bmN0aW9uIGlzX3VpbnQ4YXJyYXkoYmluKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYmluKSA9PT0gJ1tvYmplY3QgVWludDhBcnJheV0nO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBFeGlmIHBhcnNlclxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46ICAgVWludDhBcnJheSAtIGpwZWcgZmlsZVxuLy8gIC0gZXhpZl9zdGFydDogTnVtYmVyICAgICAtIHN0YXJ0IG9mIFRJRkYgaGVhZGVyIChhZnRlciBFeGlmXFwwXFwwKVxuLy8gIC0gZXhpZl9lbmQ6ICAgTnVtYmVyICAgICAtIGVuZCBvZiBFeGlmIHNlZ21lbnRcbi8vICAtIG9uX2VudHJ5OiAgIE51bWJlciAgICAgLSBjYWxsYmFja1xuLy9cbmZ1bmN0aW9uIEV4aWZQYXJzZXIoanBlZ19iaW4sIGV4aWZfc3RhcnQsIGV4aWZfZW5kKSB7XG4gIC8vIFVpbnQ4QXJyYXksIGV4aWYgd2l0aG91dCBzaWduYXR1cmUgKHdoaWNoIGlzbid0IGluY2x1ZGVkIGluIG9mZnNldHMpXG4gIHRoaXMuaW5wdXQgICAgICA9IGpwZWdfYmluLnN1YmFycmF5KGV4aWZfc3RhcnQsIGV4aWZfZW5kKTtcblxuICAvLyBvZmZzZXQgY29ycmVjdGlvbiBmb3IgYG9uX2VudHJ5YCBjYWxsYmFja1xuICB0aGlzLnN0YXJ0ICAgICAgPSBleGlmX3N0YXJ0O1xuXG4gIC8vIENoZWNrIFRJRkYgaGVhZGVyIChpbmNsdWRlcyBieXRlIGFsaWdubWVudCBhbmQgZmlyc3QgSUZEIG9mZnNldClcbiAgdmFyIHNpZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdGhpcy5pbnB1dC5zdWJhcnJheSgwLCA0KSk7XG5cbiAgaWYgKHNpZyAhPT0gJ0lJXFx4MkFcXDAnICYmIHNpZyAhPT0gJ01NXFwwXFx4MkEnKSB7XG4gICAgdGhyb3cgZXJyb3IoJ2ludmFsaWQgVElGRiBzaWduYXR1cmUnLCAnRUJBRERBVEEnKTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgbW90b3JvbGEgKGJpZyBlbmRpYW4pIGJ5dGUgYWxpZ25tZW50LCBmYWxzZSBpZiBpbnRlbFxuICB0aGlzLmJpZ19lbmRpYW4gPSBzaWdbMF0gPT09ICdNJztcbn1cblxuXG5FeGlmUGFyc2VyLnByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24gKG9uX2VudHJ5KSB7XG4gIC8vIGFsbG93IHByZW1hdHVyZSBleGl0XG4gIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuXG4gIHZhciBvZmZzZXQgPSB0aGlzLnJlYWRfdWludDMyKDQpO1xuXG4gIHRoaXMuaWZkc190b19yZWFkID0gWyB7XG4gICAgaWQ6ICAgICAwLFxuICAgIG9mZnNldDogb2Zmc2V0XG4gIH0gXTtcblxuICB3aGlsZSAodGhpcy5pZmRzX3RvX3JlYWQubGVuZ3RoID4gMCAmJiAhdGhpcy5hYm9ydGVkKSB7XG4gICAgdmFyIGkgPSB0aGlzLmlmZHNfdG9fcmVhZC5zaGlmdCgpO1xuICAgIGlmICghaS5vZmZzZXQpIGNvbnRpbnVlO1xuICAgIHRoaXMuc2Nhbl9pZmQoaS5pZCwgaS5vZmZzZXQsIG9uX2VudHJ5KTtcbiAgfVxufTtcblxuXG5FeGlmUGFyc2VyLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiAob25fZW50cnkpIHtcbiAgdmFyIGlmZHMgPSB7fTtcblxuICAvLyBtYWtlIHN1cmUgSUZEMCBhbHdheXMgZXhpc3RzXG4gIGlmZHMuaWZkMCA9IHsgaWQ6IDAsIGVudHJpZXM6IFtdIH07XG5cbiAgdGhpcy5lYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIGlmIChvbl9lbnRyeShlbnRyeSkgPT09IGZhbHNlICYmICFlbnRyeS5pc19zdWJpZmRfbGluaykgcmV0dXJuO1xuICAgIGlmIChlbnRyeS5pc19zdWJpZmRfbGluayAmJiBlbnRyeS5jb3VudCAhPT0gMSAmJiBlbnRyeS5mb3JtYXQgIT09IDQpIHJldHVybjsgLy8gZmlsdGVyIG91dCBib2d1cyBsaW5rc1xuXG4gICAgaWYgKCFpZmRzWydpZmQnICsgZW50cnkuaWZkXSkge1xuICAgICAgaWZkc1snaWZkJyArIGVudHJ5LmlmZF0gPSB7IGlkOiBlbnRyeS5pZmQsIGVudHJpZXM6IFtdIH07XG4gICAgfVxuXG4gICAgaWZkc1snaWZkJyArIGVudHJ5LmlmZF0uZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfSk7XG5cbiAgLy8gdGh1bWJuYWlscyBhcmUgbm90IHN1cHBvcnRlZCBqdXN0IHlldCwgc28gZGVsZXRlIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGl0XG4gIGRlbGV0ZSBpZmRzLmlmZDE7XG5cbiAgLy8gQ2FsY3VsYXRlIG91dHB1dCBzaXplXG4gIHZhciBsZW5ndGggPSA4O1xuICBPYmplY3Qua2V5cyhpZmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZmRfbm8pIHtcbiAgICBsZW5ndGggKz0gMjtcblxuICAgIGlmZHNbaWZkX25vXS5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICBsZW5ndGggKz0gMTIgKyAoZW50cnkuZGF0YV9sZW5ndGggPiA0ID8gTWF0aC5jZWlsKGVudHJ5LmRhdGFfbGVuZ3RoIC8gMikgKiAyIDogMCk7XG4gICAgfSk7XG5cbiAgICBsZW5ndGggKz0gNDtcbiAgfSk7XG5cbiAgdGhpcy5vdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICB0aGlzLm91dHB1dFswXSA9IHRoaXMub3V0cHV0WzFdID0gKHRoaXMuYmlnX2VuZGlhbiA/ICdNJyA6ICdJJykuY2hhckNvZGVBdCgwKTtcbiAgdGhpcy53cml0ZV91aW50MTYoMiwgMHgyQSk7XG5cbiAgdmFyIG9mZnNldCA9IDg7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy53cml0ZV91aW50MzIoNCwgb2Zmc2V0KTtcblxuICBPYmplY3Qua2V5cyhpZmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZmRfbm8pIHtcbiAgICBpZmRzW2lmZF9ub10ud3JpdHRlbl9vZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICB2YXIgaWZkX3N0YXJ0ID0gb2Zmc2V0O1xuICAgIHZhciBpZmRfZW5kICAgPSBpZmRfc3RhcnQgKyAyICsgaWZkc1tpZmRfbm9dLmVudHJpZXMubGVuZ3RoICogMTIgKyA0O1xuICAgIG9mZnNldCA9IGlmZF9lbmQ7XG5cbiAgICBzZWxmLndyaXRlX3VpbnQxNihpZmRfc3RhcnQsIGlmZHNbaWZkX25vXS5lbnRyaWVzLmxlbmd0aCk7XG5cbiAgICBpZmRzW2lmZF9ub10uZW50cmllcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBJRkQgZW50cmllcyBtdXN0IGJlIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgdGFnIElEc1xuICAgICAgcmV0dXJuIGEudGFnIC0gYi50YWc7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoZW50cnksIGlkeCkge1xuICAgICAgdmFyIGVudHJ5X29mZnNldCA9IGlmZF9zdGFydCArIDIgKyBpZHggKiAxMjtcblxuICAgICAgc2VsZi53cml0ZV91aW50MTYoZW50cnlfb2Zmc2V0LCBlbnRyeS50YWcpO1xuICAgICAgc2VsZi53cml0ZV91aW50MTYoZW50cnlfb2Zmc2V0ICsgMiwgZW50cnkuZm9ybWF0KTtcbiAgICAgIHNlbGYud3JpdGVfdWludDMyKGVudHJ5X29mZnNldCArIDQsIGVudHJ5LmNvdW50KTtcblxuICAgICAgaWYgKGVudHJ5LmlzX3N1YmlmZF9saW5rKSB7XG4gICAgICAgIC8vIGZpbGxlZCBpbiBsYXRlclxuICAgICAgICBpZiAoaWZkc1snaWZkJyArIGVudHJ5LnRhZ10pIGlmZHNbJ2lmZCcgKyBlbnRyeS50YWddLmxpbmtfb2Zmc2V0ID0gZW50cnlfb2Zmc2V0ICsgODtcbiAgICAgIH0gZWxzZSBpZiAoZW50cnkuZGF0YV9sZW5ndGggPD0gNCkge1xuICAgICAgICBzZWxmLm91dHB1dC5zZXQoXG4gICAgICAgICAgc2VsZi5pbnB1dC5zdWJhcnJheShlbnRyeS5kYXRhX29mZnNldCAtIHNlbGYuc3RhcnQsIGVudHJ5LmRhdGFfb2Zmc2V0IC0gc2VsZi5zdGFydCArIDQpLFxuICAgICAgICAgIGVudHJ5X29mZnNldCArIDhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYud3JpdGVfdWludDMyKGVudHJ5X29mZnNldCArIDgsIG9mZnNldCk7XG4gICAgICAgIHNlbGYub3V0cHV0LnNldChcbiAgICAgICAgICBzZWxmLmlucHV0LnN1YmFycmF5KGVudHJ5LmRhdGFfb2Zmc2V0IC0gc2VsZi5zdGFydCwgZW50cnkuZGF0YV9vZmZzZXQgLSBzZWxmLnN0YXJ0ICsgZW50cnkuZGF0YV9sZW5ndGgpLFxuICAgICAgICAgIG9mZnNldFxuICAgICAgICApO1xuICAgICAgICBvZmZzZXQgKz0gTWF0aC5jZWlsKGVudHJ5LmRhdGFfbGVuZ3RoIC8gMikgKiAyO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIG5leHRfaWZkID0gaWZkc1snaWZkJyArIChpZmRzW2lmZF9ub10uaWQgKyAxKV07XG4gICAgaWYgKG5leHRfaWZkKSBuZXh0X2lmZC5saW5rX29mZnNldCA9IGlmZF9lbmQgLSA0O1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhpZmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZmRfbm8pIHtcbiAgICBpZiAoaWZkc1tpZmRfbm9dLndyaXR0ZW5fb2Zmc2V0ICYmIGlmZHNbaWZkX25vXS5saW5rX29mZnNldCkge1xuICAgICAgc2VsZi53cml0ZV91aW50MzIoaWZkc1tpZmRfbm9dLmxpbmtfb2Zmc2V0LCBpZmRzW2lmZF9ub10ud3JpdHRlbl9vZmZzZXQpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHRoaXMub3V0cHV0Lmxlbmd0aCAhPT0gb2Zmc2V0KSB0aHJvdyBlcnJvcignaW50ZXJuYWwgZXJyb3I6IGluY29ycmVjdCBidWZmZXIgc2l6ZSBhbGxvY2F0ZWQnKTtcblxuICByZXR1cm4gdGhpcy5vdXRwdXQ7XG59O1xuXG5cbkV4aWZQYXJzZXIucHJvdG90eXBlLnJlYWRfdWludDE2ID0gZnVuY3Rpb24gKG9mZnNldCkge1xuICB2YXIgZCA9IHRoaXMuaW5wdXQ7XG4gIGlmIChvZmZzZXQgKyAyID4gZC5sZW5ndGgpIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIEVPRicsICdFQkFEREFUQScpO1xuXG4gIHJldHVybiB0aGlzLmJpZ19lbmRpYW4gP1xuICAgIGRbb2Zmc2V0XSAqIDB4MTAwICsgZFtvZmZzZXQgKyAxXSA6XG4gICAgZFtvZmZzZXRdICsgZFtvZmZzZXQgKyAxXSAqIDB4MTAwO1xufTtcblxuXG5FeGlmUGFyc2VyLnByb3RvdHlwZS5yZWFkX3VpbnQzMiA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgdmFyIGQgPSB0aGlzLmlucHV0O1xuICBpZiAob2Zmc2V0ICsgNCA+IGQubGVuZ3RoKSB0aHJvdyBlcnJvcigndW5leHBlY3RlZCBFT0YnLCAnRUJBRERBVEEnKTtcblxuICByZXR1cm4gdGhpcy5iaWdfZW5kaWFuID9cbiAgICBkW29mZnNldF0gKiAweDEwMDAwMDAgKyBkW29mZnNldCArIDFdICogMHgxMDAwMCArIGRbb2Zmc2V0ICsgMl0gKiAweDEwMCArIGRbb2Zmc2V0ICsgM10gOlxuICAgIGRbb2Zmc2V0XSArIGRbb2Zmc2V0ICsgMV0gKiAweDEwMCArIGRbb2Zmc2V0ICsgMl0gKiAweDEwMDAwICsgZFtvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMDtcbn07XG5cblxuRXhpZlBhcnNlci5wcm90b3R5cGUud3JpdGVfdWludDE2ID0gZnVuY3Rpb24gKG9mZnNldCwgdmFsdWUpIHtcbiAgdmFyIGQgPSB0aGlzLm91dHB1dDtcblxuICBpZiAodGhpcy5iaWdfZW5kaWFuKSB7XG4gICAgZFtvZmZzZXRdICAgICA9ICh2YWx1ZSA+Pj4gOCkgJiAweEZGO1xuICAgIGRbb2Zmc2V0ICsgMV0gPSB2YWx1ZSAmIDB4RkY7XG4gIH0gZWxzZSB7XG4gICAgZFtvZmZzZXRdICAgICA9IHZhbHVlICYgMHhGRjtcbiAgICBkW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KSAmIDB4RkY7XG4gIH1cbn07XG5cblxuRXhpZlBhcnNlci5wcm90b3R5cGUud3JpdGVfdWludDMyID0gZnVuY3Rpb24gKG9mZnNldCwgdmFsdWUpIHtcbiAgdmFyIGQgPSB0aGlzLm91dHB1dDtcblxuICBpZiAodGhpcy5iaWdfZW5kaWFuKSB7XG4gICAgZFtvZmZzZXRdICAgICA9ICh2YWx1ZSA+Pj4gMjQpICYgMHhGRjtcbiAgICBkW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNikgJiAweEZGO1xuICAgIGRbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpICYgMHhGRjtcbiAgICBkW29mZnNldCArIDNdID0gdmFsdWUgJiAweEZGO1xuICB9IGVsc2Uge1xuICAgIGRbb2Zmc2V0XSAgICAgPSB2YWx1ZSAmIDB4RkY7XG4gICAgZFtvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOCkgJiAweEZGO1xuICAgIGRbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KSAmIDB4RkY7XG4gICAgZFtvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpICYgMHhGRjtcbiAgfVxufTtcblxuXG5FeGlmUGFyc2VyLnByb3RvdHlwZS5pc19zdWJpZmRfbGluayA9IGZ1bmN0aW9uIChpZmQsIHRhZykge1xuICByZXR1cm4gKGlmZCA9PT0gMCAmJiB0YWcgPT09IDB4ODc2OSkgfHwgLy8gU3ViSUZEXG4gICAgICAgICAoaWZkID09PSAwICYmIHRhZyA9PT0gMHg4ODI1KSB8fCAvLyBHUFMgSW5mb1xuICAgICAgICAgKGlmZCA9PT0gMHg4NzY5ICYmIHRhZyA9PT0gMHhBMDA1KTsgLy8gSW50ZXJvcCBJRkRcbn07XG5cblxuLy8gUmV0dXJucyBieXRlIGxlbmd0aCBvZiBhIHNpbmdsZSBjb21wb25lbnQgb2YgYSBnaXZlbiBmb3JtYXRcbi8vXG5FeGlmUGFyc2VyLnByb3RvdHlwZS5leGlmX2Zvcm1hdF9sZW5ndGggPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAxOiAvLyBieXRlXG4gICAgY2FzZSAyOiAvLyBhc2NpaVxuICAgIGNhc2UgNjogLy8gc2J5dGVcbiAgICBjYXNlIDc6IC8vIHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIDE7XG5cbiAgICBjYXNlIDM6IC8vIHNob3J0XG4gICAgY2FzZSA4OiAvLyBzc2hvcnRcbiAgICAgIHJldHVybiAyO1xuXG4gICAgY2FzZSA0OiAgLy8gbG9uZ1xuICAgIGNhc2UgOTogIC8vIHNsb25nXG4gICAgY2FzZSAxMTogLy8gZmxvYXRcbiAgICAgIHJldHVybiA0O1xuXG4gICAgY2FzZSA1OiAgLy8gcmF0aW9uYWxcbiAgICBjYXNlIDEwOiAvLyBzcmF0aW9uYWxcbiAgICBjYXNlIDEyOiAvLyBkb3VibGVcbiAgICAgIHJldHVybiA4O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHVua25vd24gdHlwZVxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cblxuLy8gUmVhZHMgRXhpZiBkYXRhXG4vL1xuRXhpZlBhcnNlci5wcm90b3R5cGUuZXhpZl9mb3JtYXRfcmVhZCA9IGZ1bmN0aW9uIChmb3JtYXQsIG9mZnNldCkge1xuICB2YXIgdjtcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgMTogLy8gYnl0ZVxuICAgIGNhc2UgMjogLy8gYXNjaWlcbiAgICAgIHYgPSB0aGlzLmlucHV0W29mZnNldF07XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgNjogLy8gc2J5dGVcbiAgICAgIHYgPSB0aGlzLmlucHV0W29mZnNldF07XG4gICAgICByZXR1cm4gdiB8ICh2ICYgMHg4MCkgKiAweDFmZmZmZmU7XG5cbiAgICBjYXNlIDM6IC8vIHNob3J0XG4gICAgICB2ID0gdGhpcy5yZWFkX3VpbnQxNihvZmZzZXQpO1xuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlIDg6IC8vIHNzaG9ydFxuICAgICAgdiA9IHRoaXMucmVhZF91aW50MTYob2Zmc2V0KTtcbiAgICAgIHJldHVybiB2IHwgKHYgJiAweDgwMDApICogMHgxZmZmZTtcblxuICAgIGNhc2UgNDogLy8gbG9uZ1xuICAgICAgdiA9IHRoaXMucmVhZF91aW50MzIob2Zmc2V0KTtcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSA5OiAvLyBzbG9uZ1xuICAgICAgdiA9IHRoaXMucmVhZF91aW50MzIob2Zmc2V0KTtcbiAgICAgIHJldHVybiB2IHwgMDtcblxuICAgIGNhc2UgNTogIC8vIHJhdGlvbmFsXG4gICAgY2FzZSAxMDogLy8gc3JhdGlvbmFsXG4gICAgY2FzZSAxMTogLy8gZmxvYXRcbiAgICBjYXNlIDEyOiAvLyBkb3VibGVcbiAgICAgIHJldHVybiBudWxsOyAvLyBub3QgaW1wbGVtZW50ZWRcblxuICAgIGNhc2UgNzogLy8gdW5kZWZpbmVkXG4gICAgICByZXR1cm4gbnVsbDsgLy8gYmxvYlxuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHVua25vd24gdHlwZVxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cblxuRXhpZlBhcnNlci5wcm90b3R5cGUuc2Nhbl9pZmQgPSBmdW5jdGlvbiAoaWZkX25vLCBvZmZzZXQsIG9uX2VudHJ5KSB7XG4gIHZhciBlbnRyeV9jb3VudCA9IHRoaXMucmVhZF91aW50MTYob2Zmc2V0KTtcblxuICBvZmZzZXQgKz0gMjtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJ5X2NvdW50OyBpKyspIHtcbiAgICB2YXIgdGFnICAgID0gdGhpcy5yZWFkX3VpbnQxNihvZmZzZXQpO1xuICAgIHZhciBmb3JtYXQgPSB0aGlzLnJlYWRfdWludDE2KG9mZnNldCArIDIpO1xuICAgIHZhciBjb3VudCAgPSB0aGlzLnJlYWRfdWludDMyKG9mZnNldCArIDQpO1xuXG4gICAgdmFyIGNvbXBfbGVuZ3RoICAgID0gdGhpcy5leGlmX2Zvcm1hdF9sZW5ndGgoZm9ybWF0KTtcbiAgICB2YXIgZGF0YV9sZW5ndGggICAgPSBjb3VudCAqIGNvbXBfbGVuZ3RoO1xuICAgIHZhciBkYXRhX29mZnNldCAgICA9IGRhdGFfbGVuZ3RoIDw9IDQgPyBvZmZzZXQgKyA4IDogdGhpcy5yZWFkX3VpbnQzMihvZmZzZXQgKyA4KTtcbiAgICB2YXIgaXNfc3ViaWZkX2xpbmsgPSBmYWxzZTtcblxuICAgIGlmIChkYXRhX29mZnNldCArIGRhdGFfbGVuZ3RoID4gdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIEVPRicsICdFQkFEREFUQScpO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IFtdO1xuICAgIHZhciBjb21wX29mZnNldCA9IGRhdGFfb2Zmc2V0O1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb3VudDsgaisrLCBjb21wX29mZnNldCArPSBjb21wX2xlbmd0aCkge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLmV4aWZfZm9ybWF0X3JlYWQoZm9ybWF0LCBjb21wX29mZnNldCk7XG4gICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWUucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgZm9ybWF0ID09PSAyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZSA9IHV0ZjhfZGVjb2RlKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXDAnKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc19zdWJpZmRfbGluayhpZmRfbm8sIHRhZykpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlWzBdKSAmJiB2YWx1ZVswXSA+IDApIHtcbiAgICAgICAgdGhpcy5pZmRzX3RvX3JlYWQucHVzaCh7XG4gICAgICAgICAgaWQ6ICAgICB0YWcsXG4gICAgICAgICAgb2Zmc2V0OiB2YWx1ZVswXVxuICAgICAgICB9KTtcbiAgICAgICAgaXNfc3ViaWZkX2xpbmsgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIGlzX2JpZ19lbmRpYW46ICB0aGlzLmJpZ19lbmRpYW4sXG4gICAgICBpZmQ6ICAgICAgICAgICAgaWZkX25vLFxuICAgICAgdGFnOiAgICAgICAgICAgIHRhZyxcbiAgICAgIGZvcm1hdDogICAgICAgICBmb3JtYXQsXG4gICAgICBjb3VudDogICAgICAgICAgY291bnQsXG4gICAgICBlbnRyeV9vZmZzZXQ6ICAgb2Zmc2V0ICsgdGhpcy5zdGFydCxcbiAgICAgIGRhdGFfbGVuZ3RoOiAgICBkYXRhX2xlbmd0aCxcbiAgICAgIGRhdGFfb2Zmc2V0OiAgICBkYXRhX29mZnNldCArIHRoaXMuc3RhcnQsXG4gICAgICB2YWx1ZTogICAgICAgICAgdmFsdWUsXG4gICAgICBpc19zdWJpZmRfbGluazogaXNfc3ViaWZkX2xpbmtcbiAgICB9O1xuXG4gICAgaWYgKG9uX2VudHJ5KGVudHJ5KSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb2Zmc2V0ICs9IDEyO1xuICB9XG5cbiAgaWYgKGlmZF9ubyA9PT0gMCkge1xuICAgIHRoaXMuaWZkc190b19yZWFkLnB1c2goe1xuICAgICAgaWQ6ICAgICAxLFxuICAgICAgb2Zmc2V0OiB0aGlzLnJlYWRfdWludDMyKG9mZnNldClcbiAgICB9KTtcbiAgfVxufTtcblxuXG4vLyBDaGVjayB3aGV0aGVyIGlucHV0IGlzIGEgSlBFRyBpbWFnZVxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46IFVpbnQ4QXJyYXkgLSBqcGVnIGZpbGVcbi8vXG4vLyBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYW5kIGZhbHNlIG90aGVyd2lzZVxuLy9cbm1vZHVsZS5leHBvcnRzLmlzX2pwZWcgPSBmdW5jdGlvbiAoanBlZ19iaW4pIHtcbiAgcmV0dXJuIGpwZWdfYmluLmxlbmd0aCA+PSA0ICYmIGpwZWdfYmluWzBdID09PSAweEZGICYmIGpwZWdfYmluWzFdID09PSAweEQ4ICYmIGpwZWdfYmluWzJdID09PSAweEZGO1xufTtcblxuXG4vLyBDYWxsIGFuIGl0ZXJhdG9yIG9uIGVhY2ggc2VnbWVudCBpbiB0aGUgZ2l2ZW4gSlBFRyBpbWFnZVxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46ICAgVWludDhBcnJheSAtIGpwZWcgZmlsZVxuLy8gIC0gb25fc2VnbWVudDogRnVuY3Rpb24gLSBjYWxsYmFjayBleGVjdXRlZCBvbiBlYWNoIEpQRUcgbWFya2VyIHNlZ21lbnRcbi8vICAgIC0gc2VnbWVudDogIE9iamVjdFxuLy8gICAgICAtIGNvZGU6ICAgTnVtYmVyIC0gbWFya2VyIHR5cGUgKDJuZCBieXRlLCBlLmcuIDB4RTAgZm9yIEFQUDApXG4vLyAgICAgIC0gb2Zmc2V0OiBOdW1iZXIgLSBvZmZzZXQgb2YgdGhlIGZpcnN0IGJ5dGUgKDB4RkYpIHJlbGF0aXZlIHRvIGBqcGVnX2JpbmAgc3RhcnRcbi8vICAgICAgLSBsZW5ndGg6IE51bWJlciAtIGxlbmd0aCBvZiB0aGUgZW50aXJlIG1hcmtlciBzZWdtZW50IGluY2x1ZGluZyBmaXJzdCB0d28gYnl0ZXMgYW5kIGxlbmd0aFxuLy8gICAgICAgIC0gMiBmb3Igc3RhbmRhbG9uZSBtYXJrZXJzXG4vLyAgICAgICAgLSA0K2xlbmd0aCBmb3IgbWFya2VycyB3aXRoIGRhdGFcbi8vXG4vLyBJdGVyYXRpb24gc3RvcHMgd2hlbiBgRU9JYCAoMHhGRkQ5KSBtYXJrZXIgaXMgcmVhY2hlZCBvciBpZiBgb25fc2VnbWVudGBcbi8vIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYC5cbi8vXG5tb2R1bGUuZXhwb3J0cy5qcGVnX3NlZ21lbnRzX2VhY2ggPSBmdW5jdGlvbiAoanBlZ19iaW4sIG9uX3NlZ21lbnQpIHtcbiAgaWYgKCFpc191aW50OGFycmF5KGpwZWdfYmluKSkge1xuICAgIHRocm93IGVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IChqcGVnX2JpbiksIFVpbnQ4QXJyYXkgZXhwZWN0ZWQnLCAnRUlOVkFMJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9uX3NlZ21lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBlcnJvcignSW52YWxpZCBhcmd1bWVudCAob25fc2VnbWVudCksIEZ1bmN0aW9uIGV4cGVjdGVkJywgJ0VJTlZBTCcpO1xuICB9XG5cbiAgaWYgKCFtb2R1bGUuZXhwb3J0cy5pc19qcGVnKGpwZWdfYmluKSkge1xuICAgIHRocm93IGVycm9yKCdVbmtub3duIGZpbGUgZm9ybWF0JywgJ0VOT1RKUEVHJyk7XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gMCwgbGVuZ3RoID0ganBlZ19iaW4ubGVuZ3RoLCBpbnNpZGVfc2NhbiA9IGZhbHNlO1xuXG4gIGZvciAoOzspIHtcbiAgICB2YXIgc2VnbWVudF9jb2RlLCBzZWdtZW50X2xlbmd0aDtcblxuICAgIGlmIChvZmZzZXQgKyAxID49IGxlbmd0aCkgdGhyb3cgZXJyb3IoJ1VuZXhwZWN0ZWQgRU9GJywgJ0VCQUREQVRBJyk7XG4gICAgdmFyIGJ5dGUxID0ganBlZ19iaW5bb2Zmc2V0XTtcbiAgICB2YXIgYnl0ZTIgPSBqcGVnX2JpbltvZmZzZXQgKyAxXTtcblxuICAgIGlmIChieXRlMSA9PT0gMHhGRiAmJiBieXRlMiA9PT0gMHhGRikge1xuICAgICAgLy8gcGFkZGluZ1xuICAgICAgc2VnbWVudF9jb2RlID0gMHhGRjtcbiAgICAgIHNlZ21lbnRfbGVuZ3RoID0gMTtcblxuICAgIH0gZWxzZSBpZiAoYnl0ZTEgPT09IDB4RkYgJiYgYnl0ZTIgIT09IDApIHtcbiAgICAgIC8vIG1hcmtlclxuICAgICAgc2VnbWVudF9jb2RlID0gYnl0ZTI7XG4gICAgICBzZWdtZW50X2xlbmd0aCA9IDI7XG5cbiAgICAgIGlmICgoMHhEMCA8PSBzZWdtZW50X2NvZGUgJiYgc2VnbWVudF9jb2RlIDw9IDB4RDkpIHx8IHNlZ21lbnRfY29kZSA9PT0gMHgwMSkgOyBlbHNlIHtcbiAgICAgICAgaWYgKG9mZnNldCArIDMgPj0gbGVuZ3RoKSB0aHJvdyBlcnJvcignVW5leHBlY3RlZCBFT0YnLCAnRUJBRERBVEEnKTtcbiAgICAgICAgc2VnbWVudF9sZW5ndGggKz0ganBlZ19iaW5bb2Zmc2V0ICsgMl0gKiAweDEwMCArIGpwZWdfYmluW29mZnNldCArIDNdO1xuICAgICAgICBpZiAoc2VnbWVudF9sZW5ndGggPCAyKSB0aHJvdyBlcnJvcignSW52YWxpZCBzZWdtZW50IGxlbmd0aCcsICdFQkFEREFUQScpO1xuICAgICAgICBpZiAob2Zmc2V0ICsgc2VnbWVudF9sZW5ndGggLSAxID49IGxlbmd0aCkgdGhyb3cgZXJyb3IoJ1VuZXhwZWN0ZWQgRU9GJywgJ0VCQUREQVRBJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnNpZGVfc2Nhbikge1xuICAgICAgICBpZiAoc2VnbWVudF9jb2RlID49IDB4RDAgJiYgc2VnbWVudF9jb2RlIDw9IDB4RDcpIDsgZWxzZSB7XG4gICAgICAgICAgaW5zaWRlX3NjYW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudF9jb2RlID09PSAweERBIC8qIFNPUyAqLykgaW5zaWRlX3NjYW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaW5zaWRlX3NjYW4pIHtcbiAgICAgIC8vIGVudHJvcHktZW5jb2RlZCBzZWdtZW50XG4gICAgICBmb3IgKHZhciBwb3MgPSBvZmZzZXQgKyAxOyA7IHBvcysrKSB7XG4gICAgICAgIC8vIHNjYW4gdW50aWwgd2UgZmluZCBGRlxuICAgICAgICBpZiAocG9zID49IGxlbmd0aCkgdGhyb3cgZXJyb3IoJ1VuZXhwZWN0ZWQgRU9GJywgJ0VCQUREQVRBJyk7XG4gICAgICAgIGlmIChqcGVnX2Jpbltwb3NdID09PSAweEZGKSB7XG4gICAgICAgICAgaWYgKHBvcyArIDEgPj0gbGVuZ3RoKSB0aHJvdyBlcnJvcignVW5leHBlY3RlZCBFT0YnLCAnRUJBRERBVEEnKTtcbiAgICAgICAgICBpZiAoanBlZ19iaW5bcG9zICsgMV0gIT09IDApIHtcbiAgICAgICAgICAgIHNlZ21lbnRfY29kZSA9IDA7XG4gICAgICAgICAgICBzZWdtZW50X2xlbmd0aCA9IHBvcyAtIG9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcignVW5leHBlY3RlZCBieXRlIGF0IHNlZ21lbnQgc3RhcnQ6ICcgKyB0b19oZXgoYnl0ZTEpICtcbiAgICAgICAgJyAob2Zmc2V0ICcgKyB0b19oZXgob2Zmc2V0KSArICcpJywgJ0VCQUREQVRBJyk7XG4gICAgfVxuXG4gICAgaWYgKG9uX3NlZ21lbnQoeyBjb2RlOiBzZWdtZW50X2NvZGUsIG9mZnNldDogb2Zmc2V0LCBsZW5ndGg6IHNlZ21lbnRfbGVuZ3RoIH0pID09PSBmYWxzZSkgYnJlYWs7XG4gICAgaWYgKHNlZ21lbnRfY29kZSA9PT0gMHhEOSAvKiBFT0kgKi8pIGJyZWFrO1xuICAgIG9mZnNldCArPSBzZWdtZW50X2xlbmd0aDtcbiAgfVxufTtcblxuXG4vLyBSZXBsYWNlIG9yIHJlbW92ZSBzZWdtZW50cyBpbiB0aGUgZ2l2ZW4gSlBFRyBpbWFnZVxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46ICAgVWludDhBcnJheSAtIGpwZWcgZmlsZVxuLy8gIC0gb25fc2VnbWVudDogRnVuY3Rpb24gLSBjYWxsYmFjayBleGVjdXRlZCBvbiBlYWNoIEpQRUcgbWFya2VyIHNlZ21lbnRcbi8vICAgIC0gc2VnbWVudDogIE9iamVjdFxuLy8gICAgICAtIGNvZGU6ICAgTnVtYmVyIC0gbWFya2VyIHR5cGUgKDJuZCBieXRlLCBlLmcuIDB4RTAgZm9yIEFQUDApXG4vLyAgICAgIC0gb2Zmc2V0OiBOdW1iZXIgLSBvZmZzZXQgb2YgdGhlIGZpcnN0IGJ5dGUgKDB4RkYpIHJlbGF0aXZlIHRvIGBqcGVnX2JpbmAgc3RhcnRcbi8vICAgICAgLSBsZW5ndGg6IE51bWJlciAtIGxlbmd0aCBvZiB0aGUgZW50aXJlIG1hcmtlciBzZWdtZW50IGluY2x1ZGluZyBmaXJzdCB0d28gYnl0ZXMgYW5kIGxlbmd0aFxuLy8gICAgICAgIC0gMiBmb3Igc3RhbmRhbG9uZSBtYXJrZXJzXG4vLyAgICAgICAgLSA0K2xlbmd0aCBmb3IgbWFya2VycyB3aXRoIGRhdGFcbi8vXG4vLyBgb25fc2VnbWVudGAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbi8vICAtIGBmYWxzZWAgICAgICAgIC0gc2VnbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIG91dHB1dFxuLy8gIC0gVWludDhBcnJheSAgICAgLSBzZWdtZW50IGlzIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBkYXRhXG4vLyAgLSBbIFVpbnQ4QXJyYXkgXSAtIHNlZ21lbnQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IGRhdGFcbi8vICAtIGFueXRoaW5nIGVsc2UgIC0gc2VnbWVudCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dCBhcyBpc1xuLy9cbi8vIEFueSBkYXRhIGFmdGVyIGBFT0lgICgweEZGRDkpIG1hcmtlciBpcyByZW1vdmVkLlxuLy9cbm1vZHVsZS5leHBvcnRzLmpwZWdfc2VnbWVudHNfZmlsdGVyID0gZnVuY3Rpb24gKGpwZWdfYmluLCBvbl9zZWdtZW50KSB7XG4gIGlmICghaXNfdWludDhhcnJheShqcGVnX2JpbikpIHtcbiAgICB0aHJvdyBlcnJvcignSW52YWxpZCBhcmd1bWVudCAoanBlZ19iaW4pLCBVaW50OEFycmF5IGV4cGVjdGVkJywgJ0VJTlZBTCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvbl9zZWdtZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgZXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgKG9uX3NlZ21lbnQpLCBGdW5jdGlvbiBleHBlY3RlZCcsICdFSU5WQUwnKTtcbiAgfVxuXG4gIHZhciByYW5nZXMgPSBbXTtcbiAgdmFyIG91dF9sZW5ndGggPSAwO1xuXG4gIG1vZHVsZS5leHBvcnRzLmpwZWdfc2VnbWVudHNfZWFjaChqcGVnX2JpbiwgZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICB2YXIgbmV3X3NlZ21lbnQgPSBvbl9zZWdtZW50KHNlZ21lbnQpO1xuXG4gICAgaWYgKGlzX3VpbnQ4YXJyYXkobmV3X3NlZ21lbnQpKSB7XG4gICAgICByYW5nZXMucHVzaCh7IGRhdGE6IG5ld19zZWdtZW50IH0pO1xuICAgICAgb3V0X2xlbmd0aCArPSBuZXdfc2VnbWVudC5sZW5ndGg7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ld19zZWdtZW50KSkge1xuICAgICAgbmV3X3NlZ21lbnQuZmlsdGVyKGlzX3VpbnQ4YXJyYXkpLmZvckVhY2goZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmFuZ2VzLnB1c2goeyBkYXRhOiBzIH0pO1xuICAgICAgICBvdXRfbGVuZ3RoICs9IHMubGVuZ3RoO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChuZXdfc2VnbWVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBuZXdfcmFuZ2UgPSB7IHN0YXJ0OiBzZWdtZW50Lm9mZnNldCwgZW5kOiBzZWdtZW50Lm9mZnNldCArIHNlZ21lbnQubGVuZ3RoIH07XG5cbiAgICAgIGlmIChyYW5nZXMubGVuZ3RoID4gMCAmJiByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdLmVuZCA9PT0gbmV3X3JhbmdlLnN0YXJ0KSB7XG4gICAgICAgIHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV0uZW5kID0gbmV3X3JhbmdlLmVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlcy5wdXNoKG5ld19yYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIG91dF9sZW5ndGggKz0gc2VnbWVudC5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkob3V0X2xlbmd0aCk7XG4gIHZhciBvZmZzZXQgPSAwO1xuXG4gIHJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHZhciBkYXRhID0gcmFuZ2UuZGF0YSB8fCBqcGVnX2Jpbi5zdWJhcnJheShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICByZXN1bHQuc2V0KGRhdGEsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLyBDYWxsIGFuIGl0ZXJhdG9yIG9uIGVhY2ggRXhpZiBlbnRyeSBpbiB0aGUgZ2l2ZW4gSlBFRyBpbWFnZVxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46IFVpbnQ4QXJyYXkgLSBqcGVnIGZpbGVcbi8vICAtIG9uX2VudHJ5OiBGdW5jdGlvbiAtIGNhbGxiYWNrIGV4ZWN1dGVkIG9uIGVhY2ggRXhpZiBlbnRyeVxuLy8gICAgLSBlbnRyeTogIE9iamVjdFxuLy8gICAgICAtIGlzX2JpZ19lbmRpYW46ICBCb29sZWFuIC0gd2hldGhlciBFeGlmIHVzZXMgYmlnIG9yIGxpdHRsZSBlbmRpYW4gYnl0ZSBhbGlnbm1lbnRcbi8vICAgICAgLSBpZmQ6ICAgICAgICAgICAgTnVtYmVyICAtIElGRCBpZGVudGlmaWVyICgwIGZvciBJRkQwLCAxIGZvciBJRkQxLCAweDg3NjkgZm9yIFN1YklGRCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI1IGZvciBHUFMgSW5mbywgMHhBMDA1IGZvciBJbnRlcm9wIElGRClcbi8vICAgICAgLSB0YWc6ICAgICAgICAgICAgTnVtYmVyICAtIGV4aWYgZW50cnkgdGFnICgweDAxMTAgLSBjYW1lcmEgbmFtZSwgMHgwMTEyIC0gb3JpZW50YXRpb24sIGV0Yy4gLSBzZWUgRXhpZiBzcGVjKVxuLy8gICAgICAtIGZvcm1hdDogICAgICAgICBOdW1iZXIgIC0gZXhpZiBlbnRyeSBmb3JtYXQgKDEgLSBieXRlLCAyIC0gYXNjaWksIDMgLSBzaG9ydCwgZXRjLiAtIHNlZSBFeGlmIHNwZWMpXG4vLyAgICAgIC0gY291bnQ6ICAgICAgICAgIE51bWJlciAgLSBudW1iZXIgb2YgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4gZm9ybWF0IGluc2lkZSBkYXRhXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c3VhbGx5IDEsIG9yIHN0cmluZyBsZW5ndGggZm9yIGFzY2lpIGZvcm1hdClcbi8vICAgICAgLSBlbnRyeV9vZmZzZXQ6ICAgTnVtYmVyICAtIHN0YXJ0IG9mIEV4aWYgZW50cnkgKGVudHJ5IGxlbmd0aCBpcyBhbHdheXMgMTIsIHNvIG5vdCBpbmNsdWRlZClcbi8vICAgICAgLSBkYXRhX29mZnNldDogICAgTnVtYmVyICAtIHN0YXJ0IG9mIGRhdGEgYXR0YWNoZWQgdG8gRXhpZiBlbnRyeSAod2lsbCBvdmVybGFwIHdpdGggZW50cnkgaWYgbGVuZ3RoIDw9IDQpXG4vLyAgICAgIC0gZGF0YV9sZW5ndGg6ICAgIE51bWJlciAgLSBsZW5ndGggb2YgZGF0YSBhdHRhY2hlZCB0byBFeGlmIGVudHJ5XG4vLyAgICAgIC0gdmFsdWU6ICAgICAgICAgIEFycmF5fFN0cmluZ3xOdWxsIC0gb3VyIGJlc3QgYXR0ZW1wdCBhdCBwYXJzaW5nIGRhdGEgKG5vdCBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgcmlnaHQgbm93KVxuLy8gICAgICAtIGlzX3N1YmlmZF9saW5rOiBCb29sZWFuIC0gd2hldGhlciB0aGlzIGVudHJ5IGlzIHJlY29nbml6ZWQgdG8gYmUgYSBsaW5rIHRvIHN1YmlmZCAoY2FuJ3QgZmlsdGVyIHRoZXNlIG91dClcbi8vXG4vLyBJdGVyYXRpb24gc3RvcHMgZWFybHkgaWYgaXRlcmF0b3IgcmV0dXJucyBgZmFsc2VgLlxuLy9cbi8vIElmIEV4aWYgd2Fzbid0IGZvdW5kIGFueXdoZXJlIChiZWZvcmUgc3RhcnQgb2YgdGhlIGltYWdlIGRhdGEsIFNPUyksXG4vLyBpdGVyYXRvciBpcyBuZXZlciBleGVjdXRlZC5cbi8vXG5tb2R1bGUuZXhwb3J0cy5qcGVnX2V4aWZfdGFnc19lYWNoID0gZnVuY3Rpb24gKGpwZWdfYmluLCBvbl9leGlmX2VudHJ5KSB7XG4gIGlmICghaXNfdWludDhhcnJheShqcGVnX2JpbikpIHtcbiAgICB0aHJvdyBlcnJvcignSW52YWxpZCBhcmd1bWVudCAoanBlZ19iaW4pLCBVaW50OEFycmF5IGV4cGVjdGVkJywgJ0VJTlZBTCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvbl9leGlmX2VudHJ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgZXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgKG9uX2V4aWZfZW50cnkpLCBGdW5jdGlvbiBleHBlY3RlZCcsICdFSU5WQUwnKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4gIG1vZHVsZS5leHBvcnRzLmpwZWdfc2VnbWVudHNfZWFjaChqcGVnX2JpbiwgZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICBpZiAoc2VnbWVudC5jb2RlID09PSAweERBIC8qIFNPUyAqLykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gbG9vayBmb3IgQVBQMSBzZWdtZW50IGFuZCBjb21wYXJlIGhlYWRlciB3aXRoICdFeGlmXFwwXFwwJ1xuICAgIGlmIChzZWdtZW50LmNvZGUgPT09IDB4RTEgJiYgc2VnbWVudC5sZW5ndGggPj0gMTAgJiZcbiAgICAgICAganBlZ19iaW5bc2VnbWVudC5vZmZzZXQgKyA0XSA9PT0gMHg0NSAmJiBqcGVnX2JpbltzZWdtZW50Lm9mZnNldCArIDVdID09PSAweDc4ICYmXG4gICAgICAgIGpwZWdfYmluW3NlZ21lbnQub2Zmc2V0ICsgNl0gPT09IDB4NjkgJiYganBlZ19iaW5bc2VnbWVudC5vZmZzZXQgKyA3XSA9PT0gMHg2NiAmJlxuICAgICAgICBqcGVnX2JpbltzZWdtZW50Lm9mZnNldCArIDhdID09PSAweDAwICYmIGpwZWdfYmluW3NlZ21lbnQub2Zmc2V0ICsgOV0gPT09IDB4MDApIHtcblxuICAgICAgbmV3IEV4aWZQYXJzZXIoanBlZ19iaW4sIHNlZ21lbnQub2Zmc2V0ICsgMTAsIHNlZ21lbnQub2Zmc2V0ICsgc2VnbWVudC5sZW5ndGgpLmVhY2gob25fZXhpZl9lbnRyeSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLy8gUmVtb3ZlIEV4aWYgZW50cmllcyBpbiB0aGUgZ2l2ZW4gSlBFRyBpbWFnZVxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46IFVpbnQ4QXJyYXkgLSBqcGVnIGZpbGVcbi8vICAtIG9uX2VudHJ5OiBGdW5jdGlvbiAtIGNhbGxiYWNrIGV4ZWN1dGVkIG9uIGVhY2ggRXhpZiBlbnRyeVxuLy8gICAgLSBlbnRyeTogIE9iamVjdFxuLy8gICAgICAtIGlzX2JpZ19lbmRpYW46ICBCb29sZWFuIC0gd2hldGhlciBFeGlmIHVzZXMgYmlnIG9yIGxpdHRsZSBlbmRpYW4gYnl0ZSBhbGlnbm1lbnRcbi8vICAgICAgLSBpZmQ6ICAgICAgICAgICAgTnVtYmVyICAtIElGRCBpZGVudGlmaWVyICgwIGZvciBJRkQwLCAxIGZvciBJRkQxLCAweDg3NjkgZm9yIFN1YklGRCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyNSBmb3IgR1BTIEluZm8sIDB4QTAwNSBmb3IgSW50ZXJvcCBJRkQpXG4vLyAgICAgIC0gdGFnOiAgICAgICAgICAgIE51bWJlciAgLSBleGlmIGVudHJ5IHRhZyAoMHgwMTEwIC0gY2FtZXJhIG5hbWUsIDB4MDExMiAtIG9yaWVudGF0aW9uLCBldGMuIC0gc2VlIEV4aWYgc3BlYylcbi8vICAgICAgLSBmb3JtYXQ6ICAgICAgICAgTnVtYmVyICAtIGV4aWYgZW50cnkgZm9ybWF0ICgxIC0gYnl0ZSwgMiAtIGFzY2lpLCAzIC0gc2hvcnQsIGV0Yy4gLSBzZWUgRXhpZiBzcGVjKVxuLy8gICAgICAtIGNvdW50OiAgICAgICAgICBOdW1iZXIgIC0gbnVtYmVyIG9mIGNvbXBvbmVudHMgb2YgdGhlIGdpdmVuIGZvcm1hdCBpbnNpZGUgZGF0YVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzdWFsbHkgMSwgb3Igc3RyaW5nIGxlbmd0aCBmb3IgYXNjaWkgZm9ybWF0KVxuLy8gICAgICAtIGVudHJ5X29mZnNldDogICBOdW1iZXIgIC0gc3RhcnQgb2YgRXhpZiBlbnRyeSAoZW50cnkgbGVuZ3RoIGlzIGFsd2F5cyAxMiwgc28gbm90IGluY2x1ZGVkKVxuLy8gICAgICAtIGRhdGFfb2Zmc2V0OiAgICBOdW1iZXIgIC0gc3RhcnQgb2YgZGF0YSBhdHRhY2hlZCB0byBFeGlmIGVudHJ5ICh3aWxsIG92ZXJsYXAgd2l0aCBlbnRyeSBpZiBsZW5ndGggPD0gNClcbi8vICAgICAgLSBkYXRhX2xlbmd0aDogICAgTnVtYmVyICAtIGxlbmd0aCBvZiBkYXRhIGF0dGFjaGVkIHRvIEV4aWYgZW50cnlcbi8vICAgICAgLSB2YWx1ZTogICAgICAgICAgQXJyYXl8U3RyaW5nfE51bGwgLSBvdXIgYmVzdCBhdHRlbXB0IGF0IHBhcnNpbmcgZGF0YSAobm90IGFsbCBmb3JtYXRzIHN1cHBvcnRlZCByaWdodCBub3cpXG4vLyAgICAgIC0gaXNfc3ViaWZkX2xpbms6IEJvb2xlYW4gLSB3aGV0aGVyIHRoaXMgZW50cnkgaXMgcmVjb2duaXplZCB0byBiZSBhIGxpbmsgdG8gc3ViaWZkIChjYW4ndCBmaWx0ZXIgdGhlc2Ugb3V0KVxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBmb2xsb3dpbmcgZnJvbSBFeGlmOlxuLy8gIC0gYWxsIGVudHJpZXMgd2hlcmUgaXRlcmF0b3IgcmV0dXJuZWQgZmFsc2UgKGV4Y2VwdCBzdWJpZmQgbGlua3Mgd2hpY2ggYXJlIG1hbmRhdG9yeSlcbi8vICAtIElGRDEgYW5kIHRodW1ibmFpbCBpbWFnZSAodGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWR1Y2UgZmlsZSBzaXplLFxuLy8gICAgc28gdGh1bWJuYWlsIGlzIHVzdWFsbHkgdGhlIGZpcnN0IHRoaW5nIHRvIGdvKVxuLy8gIC0gYWxsIG90aGVyIGRhdGEgdGhhdCBpc24ndCBpbiBJRkQwLCBTdWJJRkQsIEdQU0lGRCwgSW50ZXJvcElGRFxuLy8gICAgKHRoZW9yZXRpY2FsbHkgcG9zc2libGUgcHJvcHJpZXRhcnkgZXh0ZW5zaW9ucywgSSBoYXZlbid0IHNlZW4gYW55IG9mIHRoZXNlIHlldClcbi8vXG4vLyBDaGFuZ2luZyBkYXRhIGluc2lkZSBFeGlmIGVudHJpZXMgaXMgTk9UIHN1cHBvcnRlZCB5ZXQgKG1vZGlmeWluZyBgZW50cnlgIG9iamVjdCBpbnNpZGUgY2FsbGJhY2sgbWF5IGJyZWFrIHN0dWZmKS5cbi8vXG4vLyBJZiBFeGlmIHdhc24ndCBmb3VuZCBhbnl3aGVyZSAoYmVmb3JlIHN0YXJ0IG9mIHRoZSBpbWFnZSBkYXRhLCBTT1MpLFxuLy8gaXRlcmF0b3IgaXMgbmV2ZXIgZXhlY3V0ZWQsIGFuZCBvcmlnaW5hbCBKUEVHIGlzIHJldHVybmVkIGFzIGlzLlxuLy9cbm1vZHVsZS5leHBvcnRzLmpwZWdfZXhpZl90YWdzX2ZpbHRlciA9IGZ1bmN0aW9uIChqcGVnX2Jpbiwgb25fZXhpZl9lbnRyeSkge1xuICBpZiAoIWlzX3VpbnQ4YXJyYXkoanBlZ19iaW4pKSB7XG4gICAgdGhyb3cgZXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgKGpwZWdfYmluKSwgVWludDhBcnJheSBleHBlY3RlZCcsICdFSU5WQUwnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb25fZXhpZl9lbnRyeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IGVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IChvbl9leGlmX2VudHJ5KSwgRnVuY3Rpb24gZXhwZWN0ZWQnLCAnRUlOVkFMJyk7XG4gIH1cblxuICB2YXIgc3RvcF9zZWFyY2ggPSBmYWxzZTtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuanBlZ19zZWdtZW50c19maWx0ZXIoanBlZ19iaW4sIGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgaWYgKHN0b3Bfc2VhcmNoKSByZXR1cm47XG4gICAgaWYgKHNlZ21lbnQuY29kZSA9PT0gMHhEQSAvKiBTT1MgKi8pIHN0b3Bfc2VhcmNoID0gdHJ1ZTtcblxuICAgIC8vIGxvb2sgZm9yIEFQUDEgc2VnbWVudCBhbmQgY29tcGFyZSBoZWFkZXIgd2l0aCAnRXhpZlxcMFxcMCdcbiAgICBpZiAoc2VnbWVudC5jb2RlID09PSAweEUxICYmIHNlZ21lbnQubGVuZ3RoID49IDEwICYmXG4gICAgICAgIGpwZWdfYmluW3NlZ21lbnQub2Zmc2V0ICsgNF0gPT09IDB4NDUgJiYganBlZ19iaW5bc2VnbWVudC5vZmZzZXQgKyA1XSA9PT0gMHg3OCAmJlxuICAgICAgICBqcGVnX2JpbltzZWdtZW50Lm9mZnNldCArIDZdID09PSAweDY5ICYmIGpwZWdfYmluW3NlZ21lbnQub2Zmc2V0ICsgN10gPT09IDB4NjYgJiZcbiAgICAgICAganBlZ19iaW5bc2VnbWVudC5vZmZzZXQgKyA4XSA9PT0gMHgwMCAmJiBqcGVnX2JpbltzZWdtZW50Lm9mZnNldCArIDldID09PSAweDAwKSB7XG5cbiAgICAgIHZhciBuZXdfZXhpZiA9IG5ldyBFeGlmUGFyc2VyKGpwZWdfYmluLCBzZWdtZW50Lm9mZnNldCArIDEwLCBzZWdtZW50Lm9mZnNldCArIHNlZ21lbnQubGVuZ3RoKVxuICAgICAgICAuZmlsdGVyKG9uX2V4aWZfZW50cnkpO1xuICAgICAgaWYgKCFuZXdfZXhpZikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoMTApO1xuXG4gICAgICBoZWFkZXIuc2V0KGpwZWdfYmluLnNsaWNlKHNlZ21lbnQub2Zmc2V0LCBzZWdtZW50Lm9mZnNldCArIDEwKSk7XG4gICAgICBoZWFkZXJbMl0gPSAoKG5ld19leGlmLmxlbmd0aCArIDgpID4+PiA4KSAmIDB4RkY7XG4gICAgICBoZWFkZXJbM10gPSAobmV3X2V4aWYubGVuZ3RoICsgOCkgJiAweEZGO1xuXG4gICAgICBzdG9wX3NlYXJjaCA9IHRydWU7XG4gICAgICByZXR1cm4gWyBoZWFkZXIsIG5ld19leGlmIF07XG4gICAgfVxuICB9KTtcbn07XG5cblxuLy8gSW5zZXJ0cyBhIGN1c3RvbSBjb21tZW50IG1hcmtlciBzZWdtZW50IGludG8gSlBFRyBmaWxlLlxuLy9cbi8vIElucHV0OlxuLy8gIC0ganBlZ19iaW46IFVpbnQ4QXJyYXkgLSBqcGVnIGZpbGVcbi8vICAtIGNvbW1lbnQ6ICBTdHJpbmdcbi8vXG4vLyBDb21tZW50IGlzIGluc2VydGVkIGFmdGVyIGZpcnN0IHR3byBieXRlcyAoRkZEOCwgU09JKS5cbi8vXG4vLyBJZiBKRklGIChBUFAwKSBtYXJrZXIgZXhpc3RzIGltbWVkaWF0ZWx5IGFmdGVyIFNPSSAoYXMgbWFuZGF0ZWQgYnkgdGhlIEpGSUZcbi8vIHNwZWMpLCB3ZSBpbnNlcnQgY29tbWVudCBhZnRlciBpdCBpbnN0ZWFkLlxuLy9cbm1vZHVsZS5leHBvcnRzLmpwZWdfYWRkX2NvbW1lbnQgPSBmdW5jdGlvbiAoanBlZ19iaW4sIGNvbW1lbnQpIHtcbiAgdmFyIGNvbW1lbnRfaW5zZXJ0ZWQgPSBmYWxzZSwgc2VnbWVudF9jb3VudCA9IDA7XG5cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmpwZWdfc2VnbWVudHNfZmlsdGVyKGpwZWdfYmluLCBmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgIHNlZ21lbnRfY291bnQrKztcbiAgICBpZiAoc2VnbWVudF9jb3VudCA9PT0gMSAmJiBzZWdtZW50LmNvZGUgPT09IDB4RDggLyogU09JICAqLykgcmV0dXJuO1xuICAgIGlmIChzZWdtZW50X2NvdW50ID09PSAyICYmIHNlZ21lbnQuY29kZSA9PT0gMHhFMCAvKiBBUFAwICovKSByZXR1cm47XG5cbiAgICBpZiAoY29tbWVudF9pbnNlcnRlZCkgcmV0dXJuO1xuICAgIGNvbW1lbnQgPSB1dGY4X2VuY29kZShjb21tZW50KTtcblxuICAgIC8vIGNvbW1lbnQgc2VnbWVudFxuICAgIHZhciBjc2VnbWVudCA9IG5ldyBVaW50OEFycmF5KDUgKyBjb21tZW50Lmxlbmd0aCk7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBjc2VnbWVudFtvZmZzZXQrK10gPSAweEZGO1xuICAgIGNzZWdtZW50W29mZnNldCsrXSA9IDB4RkU7XG4gICAgY3NlZ21lbnRbb2Zmc2V0KytdID0gKChjb21tZW50Lmxlbmd0aCArIDMpID4+PiA4KSAmIDB4RkY7XG4gICAgY3NlZ21lbnRbb2Zmc2V0KytdID0gKGNvbW1lbnQubGVuZ3RoICsgMykgJiAweEZGO1xuXG4gICAgY29tbWVudC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgY3NlZ21lbnRbb2Zmc2V0KytdID0gYy5jaGFyQ29kZUF0KDApICYgMHhGRjtcbiAgICB9KTtcblxuICAgIGNzZWdtZW50W29mZnNldCsrXSA9IDA7XG4gICAgY29tbWVudF9pbnNlcnRlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gWyBjc2VnbWVudCwganBlZ19iaW4uc3ViYXJyYXkoc2VnbWVudC5vZmZzZXQsIHNlZ21lbnQub2Zmc2V0ICsgc2VnbWVudC5sZW5ndGgpIF07XG4gIH0pO1xufTtcbn0pO1xuXG5mdW5jdGlvbiBqcGVnX3BhdGNoX2V4aWYoZW52KSB7XG4gIHJldHVybiB0aGlzLl9nZXRVaW50OEFycmF5KGVudi5ibG9iKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZW52LmlzX2pwZWcgPSBpbWFnZV90cmF2ZXJzZS5pc19qcGVnKGRhdGEpO1xuXG4gICAgaWYgKCFlbnYuaXNfanBlZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnYpO1xuXG4gICAgZW52Lm9yaWdfYmxvYiA9IGVudi5ibG9iO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBleGlmX2lzX2JpZ19lbmRpYW4sIG9yaWVudGF0aW9uX29mZnNldDtcblxuICAgICAgLyogZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICAgIGltYWdlX3RyYXZlcnNlLmpwZWdfZXhpZl90YWdzX2VhY2goZGF0YSwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIGlmIChlbnRyeS5pZmQgPT09IDAgJiYgZW50cnkudGFnID09PSAweDExMiAmJiBBcnJheS5pc0FycmF5KGVudHJ5LnZhbHVlKSkge1xuICAgICAgICAgIGVudi5vcmllbnRhdGlvbiAgICA9IGVudHJ5LnZhbHVlWzBdIHx8IDE7XG4gICAgICAgICAgZXhpZl9pc19iaWdfZW5kaWFuID0gZW50cnkuaXNfYmlnX2VuZGlhbjtcbiAgICAgICAgICBvcmllbnRhdGlvbl9vZmZzZXQgPSBlbnRyeS5kYXRhX29mZnNldDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3JpZW50YXRpb25fb2Zmc2V0KSB7XG4gICAgICAgIHZhciBvcmllbnRhdGlvbl9wYXRjaCA9IGV4aWZfaXNfYmlnX2VuZGlhbiA/XG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoWyAwLCAxIF0pIDpcbiAgICAgICAgICBuZXcgVWludDhBcnJheShbIDEsIDAgXSk7XG5cbiAgICAgICAgZW52LmJsb2IgPSBuZXcgQmxvYihbXG4gICAgICAgICAgZGF0YS5zbGljZSgwLCBvcmllbnRhdGlvbl9vZmZzZXQpLFxuICAgICAgICAgIG9yaWVudGF0aW9uX3BhdGNoLFxuICAgICAgICAgIGRhdGEuc2xpY2Uob3JpZW50YXRpb25fb2Zmc2V0ICsgMilcbiAgICAgICAgXSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge31cblxuICAgIHJldHVybiBlbnY7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIGpwZWdfcm90YXRlX2NhbnZhcyhlbnYpIHtcbiAgaWYgKCFlbnYuaXNfanBlZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnYpO1xuXG4gIHZhciBvcmllbnRhdGlvbiA9IGVudi5vcmllbnRhdGlvbiAtIDE7XG4gIGlmICghb3JpZW50YXRpb24pIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW52KTtcblxuICB2YXIgY2FudmFzO1xuXG4gIGlmIChvcmllbnRhdGlvbiAmIDQpIHtcbiAgICBjYW52YXMgPSB0aGlzLnBpY2Eub3B0aW9ucy5jcmVhdGVDYW52YXMoZW52Lm91dF9jYW52YXMuaGVpZ2h0LCBlbnYub3V0X2NhbnZhcy53aWR0aCk7XG4gIH0gZWxzZSB7XG4gICAgY2FudmFzID0gdGhpcy5waWNhLm9wdGlvbnMuY3JlYXRlQ2FudmFzKGVudi5vdXRfY2FudmFzLndpZHRoLCBlbnYub3V0X2NhbnZhcy5oZWlnaHQpO1xuICB9XG5cbiAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gIGN0eC5zYXZlKCk7XG5cbiAgaWYgKG9yaWVudGF0aW9uICYgMSkgY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgMSwgY2FudmFzLndpZHRoLCAwKTtcbiAgaWYgKG9yaWVudGF0aW9uICYgMikgY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgLTEsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gIGlmIChvcmllbnRhdGlvbiAmIDQpIGN0eC50cmFuc2Zvcm0oMCwgMSwgMSwgMCwgMCwgMCk7XG5cbiAgY3R4LmRyYXdJbWFnZShlbnYub3V0X2NhbnZhcywgMCwgMCk7XG4gIGN0eC5yZXN0b3JlKCk7XG5cbiAgLy8gU2FmYXJpIDEyIHdvcmthcm91bmRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9waWNhL2lzc3Vlcy8xOTlcbiAgZW52Lm91dF9jYW52YXMud2lkdGggPSBlbnYub3V0X2NhbnZhcy5oZWlnaHQgPSAwO1xuXG4gIGVudi5vdXRfY2FudmFzID0gY2FudmFzO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW52KTtcbn1cblxuXG5mdW5jdGlvbiBqcGVnX2F0dGFjaF9vcmlnX3NlZ21lbnRzKGVudikge1xuICBpZiAoIWVudi5pc19qcGVnKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudik7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICB0aGlzLl9nZXRVaW50OEFycmF5KGVudi5ibG9iKSxcbiAgICB0aGlzLl9nZXRVaW50OEFycmF5KGVudi5vdXRfYmxvYilcbiAgXSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgdmFyIGRhdGEgPSByZXNbMF07XG4gICAgdmFyIGRhdGFfb3V0ID0gcmVzWzFdO1xuXG4gICAgaWYgKCFpbWFnZV90cmF2ZXJzZS5pc19qcGVnKGRhdGEpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudik7XG5cbiAgICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICAgIGltYWdlX3RyYXZlcnNlLmpwZWdfc2VnbWVudHNfZWFjaChkYXRhLCBmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgICAgaWYgKHNlZ21lbnQuY29kZSA9PT0gMHhEQSAvKiBTT1MgKi8pIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gICAgfSk7XG5cbiAgICBzZWdtZW50cyA9IHNlZ21lbnRzXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgICAgIC8vIERyb3AgSUNDX1BST0ZJTEVcbiAgICAgICAgLy9cbiAgICAgICAgaWYgKHNlZ21lbnQuY29kZSA9PT0gMHhFMikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIEtlZXAgYWxsIEFQUG4gc2VnbWVudHMgZXhjbHVkaW5nIEFQUDIgKElDQ19QUk9GSUxFKSxcbiAgICAgICAgLy8gcmVtb3ZlIG90aGVycyBiZWNhdXNlIG1vc3Qgb2YgdGhlbSBkZXBlbmQgb24gaW1hZ2UgZGF0YSAoRENUIGFuZCBzdWNoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQVBQMCAtIEpGSUYsIEFQUDEgLSBFeGlmLCB0aGUgcmVzdCBhcmUgcGhvdG9zaG9wIG1ldGFkYXRhIGFuZCBzdWNoXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZSBmdWxsIGxpc3QgYXQgaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0pQRUcvaXR1LXQ4MS5wZGYgKHRhYmxlIEIuMSBvbiBwYWdlIDMyKVxuICAgICAgICAvL1xuICAgICAgICBpZiAoc2VnbWVudC5jb2RlID49IDB4RTAgJiYgc2VnbWVudC5jb2RlIDwgMHhGMCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gS2VlcCBjb21tZW50c1xuICAgICAgICAvL1xuICAgICAgICBpZiAoc2VnbWVudC5jb2RlID09PSAweEZFKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcChmdW5jdGlvbiAoc2VnbWVudCkge1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZShzZWdtZW50Lm9mZnNldCwgc2VnbWVudC5vZmZzZXQgKyBzZWdtZW50Lmxlbmd0aCk7XG4gICAgICB9KTtcblxuICAgIGVudi5vdXRfYmxvYiA9IG5ldyBCbG9iKFxuICAgICAgLy8gaW50ZW50aW9uYWxseSBvbWl0dGluZyBleHBlY3RlZCBKRklGIHNlZ21lbnQgKG9mZnNldCAyIHRvIDIwKVxuICAgICAgWyBkYXRhX291dC5zbGljZSgwLCAyKSBdLmNvbmNhdChzZWdtZW50cykuY29uY2F0KFsgZGF0YV9vdXQuc2xpY2UoMjApIF0pLFxuICAgICAgeyB0eXBlOiAnaW1hZ2UvanBlZycgfVxuICAgICk7XG5cbiAgICByZXR1cm4gZW52O1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBhc3NpZ24ocmVkdWNlcikge1xuICByZWR1Y2VyLmJlZm9yZSgnX2Jsb2JfdG9faW1hZ2UnLCBqcGVnX3BhdGNoX2V4aWYpO1xuICByZWR1Y2VyLmFmdGVyKCdfdHJhbnNmb3JtJywgICAgICBqcGVnX3JvdGF0ZV9jYW52YXMpO1xuICByZWR1Y2VyLmFmdGVyKCdfY3JlYXRlX2Jsb2InLCAgICBqcGVnX2F0dGFjaF9vcmlnX3NlZ21lbnRzKTtcbn1cblxuXG52YXIganBlZ19wYXRjaF9leGlmXzEgPSBqcGVnX3BhdGNoX2V4aWY7XG52YXIganBlZ19yb3RhdGVfY2FudmFzXzEgPSBqcGVnX3JvdGF0ZV9jYW52YXM7XG52YXIganBlZ19hdHRhY2hfb3JpZ19zZWdtZW50c18xID0ganBlZ19hdHRhY2hfb3JpZ19zZWdtZW50cztcbnZhciBhc3NpZ25fMSA9IGFzc2lnbjtcblxudmFyIGpwZWdfcGx1Z2lucyA9IHtcblx0anBlZ19wYXRjaF9leGlmOiBqcGVnX3BhdGNoX2V4aWZfMSxcblx0anBlZ19yb3RhdGVfY2FudmFzOiBqcGVnX3JvdGF0ZV9jYW52YXNfMSxcblx0anBlZ19hdHRhY2hfb3JpZ19zZWdtZW50czoganBlZ19hdHRhY2hfb3JpZ19zZWdtZW50c18xLFxuXHRhc3NpZ246IGFzc2lnbl8xXG59O1xuXG5mdW5jdGlvbiBJbWFnZUJsb2JSZWR1Y2Uob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW1hZ2VCbG9iUmVkdWNlKSkgcmV0dXJuIG5ldyBJbWFnZUJsb2JSZWR1Y2Uob3B0aW9ucyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy5waWNhID0gb3B0aW9ucy5waWNhIHx8IHBpY2Eoe30pO1xuICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgdGhpcy51dGlscyA9IHV0aWxzO1xufVxuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKHBsdWdpbiAvKiwgcGFyYW1zLCAuLi4gKi8pIHtcbiAgdmFyIGFyZ3MgPSBbIHRoaXMgXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIHBsdWdpbi5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblxuSW1hZ2VCbG9iUmVkdWNlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnVzZShqcGVnX3BsdWdpbnMuYXNzaWduKTtcbn07XG5cblxuSW1hZ2VCbG9iUmVkdWNlLnByb3RvdHlwZS50b0Jsb2IgPSBmdW5jdGlvbiAoYmxvYiwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHV0aWxzLmFzc2lnbih7IG1heDogSW5maW5pdHkgfSwgb3B0aW9ucyk7XG4gIHZhciBlbnYgPSB7XG4gICAgYmxvYjogYmxvYixcbiAgICBvcHRzOiBvcHRzXG4gIH07XG5cbiAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudilcbiAgICAudGhlbih0aGlzLl9ibG9iX3RvX2ltYWdlKVxuICAgIC50aGVuKHRoaXMuX2NhbGN1bGF0ZV9zaXplKVxuICAgIC50aGVuKHRoaXMuX3RyYW5zZm9ybSlcbiAgICAudGhlbih0aGlzLl9jbGVhbnVwKVxuICAgIC50aGVuKHRoaXMuX2NyZWF0ZV9ibG9iKVxuICAgIC50aGVuKGZ1bmN0aW9uIChfZW52KSB7XG4gICAgICAvLyBTYWZhcmkgMTIgd29ya2Fyb3VuZFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9waWNhL2lzc3Vlcy8xOTlcbiAgICAgIF9lbnYub3V0X2NhbnZhcy53aWR0aCA9IF9lbnYub3V0X2NhbnZhcy5oZWlnaHQgPSAwO1xuXG4gICAgICByZXR1cm4gX2Vudi5vdXRfYmxvYjtcbiAgICB9KTtcbn07XG5cblxuSW1hZ2VCbG9iUmVkdWNlLnByb3RvdHlwZS50b0NhbnZhcyA9IGZ1bmN0aW9uIChibG9iLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gdXRpbHMuYXNzaWduKHsgbWF4OiBJbmZpbml0eSB9LCBvcHRpb25zKTtcbiAgdmFyIGVudiA9IHtcbiAgICBibG9iOiBibG9iLFxuICAgIG9wdHM6IG9wdHNcbiAgfTtcblxuICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW52KVxuICAgIC50aGVuKHRoaXMuX2Jsb2JfdG9faW1hZ2UpXG4gICAgLnRoZW4odGhpcy5fY2FsY3VsYXRlX3NpemUpXG4gICAgLnRoZW4odGhpcy5fdHJhbnNmb3JtKVxuICAgIC50aGVuKHRoaXMuX2NsZWFudXApXG4gICAgLnRoZW4oZnVuY3Rpb24gKF9lbnYpIHsgcmV0dXJuIF9lbnYub3V0X2NhbnZhczsgfSk7XG59O1xuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUuYmVmb3JlID0gZnVuY3Rpb24gKG1ldGhvZF9uYW1lLCBmbikge1xuICBpZiAoIXRoaXNbbWV0aG9kX25hbWVdKSB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBcIicgKyBtZXRob2RfbmFtZSArICdcIiBkb2VzIG5vdCBleGlzdCcpO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJmblwiLCBmdW5jdGlvbiBleHBlY3RlZCcpO1xuXG4gIHZhciBvbGRfZm4gPSB0aGlzW21ldGhvZF9uYW1lXTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXNbbWV0aG9kX25hbWVdID0gZnVuY3Rpb24gKGVudikge1xuICAgIHJldHVybiBmbi5jYWxsKHNlbGYsIGVudikudGhlbihmdW5jdGlvbiAoX2Vudikge1xuICAgICAgcmV0dXJuIG9sZF9mbi5jYWxsKHNlbGYsIF9lbnYpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuXG5JbWFnZUJsb2JSZWR1Y2UucHJvdG90eXBlLmFmdGVyID0gZnVuY3Rpb24gKG1ldGhvZF9uYW1lLCBmbikge1xuICBpZiAoIXRoaXNbbWV0aG9kX25hbWVdKSB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBcIicgKyBtZXRob2RfbmFtZSArICdcIiBkb2VzIG5vdCBleGlzdCcpO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJmblwiLCBmdW5jdGlvbiBleHBlY3RlZCcpO1xuXG4gIHZhciBvbGRfZm4gPSB0aGlzW21ldGhvZF9uYW1lXTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXNbbWV0aG9kX25hbWVdID0gZnVuY3Rpb24gKGVudikge1xuICAgIHJldHVybiBvbGRfZm4uY2FsbChzZWxmLCBlbnYpLnRoZW4oZnVuY3Rpb24gKF9lbnYpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHNlbGYsIF9lbnYpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuXG5JbWFnZUJsb2JSZWR1Y2UucHJvdG90eXBlLl9ibG9iX3RvX2ltYWdlID0gZnVuY3Rpb24gKGVudikge1xuICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJMO1xuXG4gIGVudi5pbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICBlbnYuaW1hZ2VfdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChlbnYuYmxvYik7XG4gIGVudi5pbWFnZS5zcmMgPSBlbnYuaW1hZ2VfdXJsO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZW52LmltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7IHJlamVjdChuZXcgRXJyb3IoJ0ltYWdlQmxvYlJlZHVjZTogZmFpbGVkIHRvIGNyZWF0ZSBJbWFnZSgpIGZyb20gYmxvYicpKTsgfTtcbiAgICBlbnYuaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkgeyByZXNvbHZlKGVudik7IH07XG4gIH0pO1xufTtcblxuXG5JbWFnZUJsb2JSZWR1Y2UucHJvdG90eXBlLl9jYWxjdWxhdGVfc2l6ZSA9IGZ1bmN0aW9uIChlbnYpIHtcbiAgLy9cbiAgLy8gTm90ZSwgaWYgeW91ciBuZWVkIG5vdCBcInN5bW1ldHJpY1wiIHJlc2l6ZSBsb2dpYywgeW91IE1VU1QgY2hlY2tcbiAgLy8gYGVudi5vcmllbnRhdGlvbmAgKHNldCBieSBwbHVnaW5zKSBhbmQgc3dhcCB3aWR0aC9oZWlnaHQgYXBwcm9wcmlhdGVseS5cbiAgLy9cbiAgdmFyIHNjYWxlX2ZhY3RvciA9IGVudi5vcHRzLm1heCAvIE1hdGgubWF4KGVudi5pbWFnZS53aWR0aCwgZW52LmltYWdlLmhlaWdodCk7XG5cbiAgaWYgKHNjYWxlX2ZhY3RvciA+IDEpIHNjYWxlX2ZhY3RvciA9IDE7XG5cbiAgZW52LnRyYW5zZm9ybV93aWR0aCA9IE1hdGgubWF4KE1hdGgucm91bmQoZW52LmltYWdlLndpZHRoICogc2NhbGVfZmFjdG9yKSwgMSk7XG4gIGVudi50cmFuc2Zvcm1faGVpZ2h0ID0gTWF0aC5tYXgoTWF0aC5yb3VuZChlbnYuaW1hZ2UuaGVpZ2h0ICogc2NhbGVfZmFjdG9yKSwgMSk7XG5cbiAgLy8gSW5mbyBmb3IgdXNlciBwbHVnaW5zLCB0byBjaGVjayBpZiBzY2FsaW5nIGFwcGxpZWRcbiAgZW52LnNjYWxlX2ZhY3RvciA9IHNjYWxlX2ZhY3RvcjtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudik7XG59O1xuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChlbnYpIHtcbiAgZW52Lm91dF9jYW52YXMgPSB0aGlzLnBpY2Eub3B0aW9ucy5jcmVhdGVDYW52YXMoZW52LnRyYW5zZm9ybV93aWR0aCwgZW52LnRyYW5zZm9ybV9oZWlnaHQpO1xuXG4gIC8vIERpbSBlbnYgdGVtcG9yYXJ5IHZhcnMgdG8gcHJvaGliaXQgdXNlIGFuZCBhdm9pZCBjb25mdXNpb24gd2hlbiBvcmllbnRhdGlvblxuICAvLyBjaGFuZ2VkLiBZb3Ugc2hvdWxkIHRha2UgcmVhbCBzaXplIGZyb20gY2FudmFzLlxuICBlbnYudHJhbnNmb3JtX3dpZHRoID0gbnVsbDtcbiAgZW52LnRyYW5zZm9ybV9oZWlnaHQgPSBudWxsO1xuXG4gIC8vIEJ5IGRlZmF1bHQgdXNlIGFscGhhIGZvciBwbmcgb25seVxuICB2YXIgcGljYV9vcHRzID0geyBhbHBoYTogZW52LmJsb2IudHlwZSA9PT0gJ2ltYWdlL3BuZycgfTtcblxuICAvLyBFeHRyYWN0IHBpY2Egb3B0aW9ucyBpZiBiZWVuIHBhc3NlZFxuICB0aGlzLnV0aWxzLmFzc2lnbihwaWNhX29wdHMsIHRoaXMudXRpbHMucGlja19waWNhX3Jlc2l6ZV9vcHRpb25zKGVudi5vcHRzKSk7XG5cbiAgcmV0dXJuIHRoaXMucGljYVxuICAgIC5yZXNpemUoZW52LmltYWdlLCBlbnYub3V0X2NhbnZhcywgcGljYV9vcHRzKVxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudjsgfSk7XG59O1xuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbiAoZW52KSB7XG4gIGVudi5pbWFnZS5zcmMgPSAnJztcbiAgZW52LmltYWdlID0gbnVsbDtcblxuICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJMO1xuICBpZiAoVVJMLnJldm9rZU9iamVjdFVSTCkgVVJMLnJldm9rZU9iamVjdFVSTChlbnYuaW1hZ2VfdXJsKTtcblxuICBlbnYuaW1hZ2VfdXJsID0gbnVsbDtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudik7XG59O1xuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUuX2NyZWF0ZV9ibG9iID0gZnVuY3Rpb24gKGVudikge1xuICByZXR1cm4gdGhpcy5waWNhLnRvQmxvYihlbnYub3V0X2NhbnZhcywgZW52LmJsb2IudHlwZSlcbiAgICAudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICAgICAgZW52Lm91dF9ibG9iID0gYmxvYjtcbiAgICAgIHJldHVybiBlbnY7XG4gICAgfSk7XG59O1xuXG5cbkltYWdlQmxvYlJlZHVjZS5wcm90b3R5cGUuX2dldFVpbnQ4QXJyYXkgPSBmdW5jdGlvbiAoYmxvYikge1xuICBpZiAoYmxvYi5hcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBibG9iLmFycmF5QnVmZmVyKCkudGhlbihmdW5jdGlvbiAoYnVmKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIGZyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuXG4gICAgZnIub25sb2FkID0gZnVuY3Rpb24gKCkgeyByZXNvbHZlKG5ldyBVaW50OEFycmF5KGZyLnJlc3VsdCkpOyB9O1xuICAgIGZyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZWplY3QobmV3IEVycm9yKCdJbWFnZUJsb2JSZWR1Y2U6IGZhaWxlZCB0byBsb2FkIGRhdGEgZnJvbSBpbnB1dCBibG9iJykpO1xuICAgICAgZnIuYWJvcnQoKTtcbiAgICB9O1xuICAgIGZyLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZWplY3QobmV3IEVycm9yKCdJbWFnZUJsb2JSZWR1Y2U6IGZhaWxlZCB0byBsb2FkIGRhdGEgZnJvbSBpbnB1dCBibG9iIChhYm9ydGVkKScpKTtcbiAgICB9O1xuICB9KTtcbn07XG5cblxuSW1hZ2VCbG9iUmVkdWNlLnBpY2EgPSBwaWNhO1xuXG52YXIgaW1hZ2VCbG9iUmVkdWNlID0gSW1hZ2VCbG9iUmVkdWNlO1xuXG5leHBvcnQgZGVmYXVsdCBpbWFnZUJsb2JSZWR1Y2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/image-blob-reduce/dist/image-blob-reduce.esm.mjs\n"); /***/ }), /***/ "../../../node_modules/internmap/src/index.js": /*!****************************************************!*\ !*** ../../../node_modules/internmap/src/index.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InternMap\": () => (/* binding */ InternMap),\n/* harmony export */ \"InternSet\": () => (/* binding */ InternSet)\n/* harmony export */ });\nclass InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nclass InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ludGVybm1hcC9zcmMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQSxtQ0FBbUMsVUFBVSxpQkFBaUIsU0FBUyxZQUFZO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxtQ0FBbUMsVUFBVSxpQkFBaUIsU0FBUyxZQUFZO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLGNBQWM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ludGVybm1hcC9zcmMvaW5kZXguanM/YTEwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSW50ZXJuTWFwIGV4dGVuZHMgTWFwIHtcbiAgY29uc3RydWN0b3IoZW50cmllcywga2V5ID0ga2V5b2YpIHtcbiAgICBzdXBlcigpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtfaW50ZXJuOiB7dmFsdWU6IG5ldyBNYXAoKX0sIF9rZXk6IHt2YWx1ZToga2V5fX0pO1xuICAgIGlmIChlbnRyaWVzICE9IG51bGwpIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICB9XG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KGludGVybl9nZXQodGhpcywga2V5KSk7XG4gIH1cbiAgaGFzKGtleSkge1xuICAgIHJldHVybiBzdXBlci5oYXMoaW50ZXJuX2dldCh0aGlzLCBrZXkpKTtcbiAgfVxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlci5zZXQoaW50ZXJuX3NldCh0aGlzLCBrZXkpLCB2YWx1ZSk7XG4gIH1cbiAgZGVsZXRlKGtleSkge1xuICAgIHJldHVybiBzdXBlci5kZWxldGUoaW50ZXJuX2RlbGV0ZSh0aGlzLCBrZXkpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJuU2V0IGV4dGVuZHMgU2V0IHtcbiAgY29uc3RydWN0b3IodmFsdWVzLCBrZXkgPSBrZXlvZikge1xuICAgIHN1cGVyKCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge19pbnRlcm46IHt2YWx1ZTogbmV3IE1hcCgpfSwgX2tleToge3ZhbHVlOiBrZXl9fSk7XG4gICAgaWYgKHZhbHVlcyAhPSBudWxsKSBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykgdGhpcy5hZGQodmFsdWUpO1xuICB9XG4gIGhhcyh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlci5oYXMoaW50ZXJuX2dldCh0aGlzLCB2YWx1ZSkpO1xuICB9XG4gIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlci5hZGQoaW50ZXJuX3NldCh0aGlzLCB2YWx1ZSkpO1xuICB9XG4gIGRlbGV0ZSh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlci5kZWxldGUoaW50ZXJuX2RlbGV0ZSh0aGlzLCB2YWx1ZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGVybl9nZXQoe19pbnRlcm4sIF9rZXl9LCB2YWx1ZSkge1xuICBjb25zdCBrZXkgPSBfa2V5KHZhbHVlKTtcbiAgcmV0dXJuIF9pbnRlcm4uaGFzKGtleSkgPyBfaW50ZXJuLmdldChrZXkpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGludGVybl9zZXQoe19pbnRlcm4sIF9rZXl9LCB2YWx1ZSkge1xuICBjb25zdCBrZXkgPSBfa2V5KHZhbHVlKTtcbiAgaWYgKF9pbnRlcm4uaGFzKGtleSkpIHJldHVybiBfaW50ZXJuLmdldChrZXkpO1xuICBfaW50ZXJuLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5fZGVsZXRlKHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIGlmIChfaW50ZXJuLmhhcyhrZXkpKSB7XG4gICAgdmFsdWUgPSBfaW50ZXJuLmdldChrZXkpO1xuICAgIF9pbnRlcm4uZGVsZXRlKGtleSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlvZih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/internmap/src/index.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/channels/index.js": /*!***********************************************************!*\ !*** ../../../node_modules/khroma/dist/channels/index.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type.js */ \"../../../node_modules/khroma/dist/channels/type.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/khroma/dist/constants.js\");\n/* IMPORT */\n\n\n\n/* MAIN */\nclass Channels {\n /* CONSTRUCTOR */\n constructor(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type = new _type_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n }\n /* API */\n set(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type.type = _constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.ALL;\n return this;\n }\n /* HELPERS */\n _ensureHSL() {\n const data = this.data;\n const { h, s, l } = data;\n if (h === undefined)\n data.h = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 'h');\n if (s === undefined)\n data.s = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 's');\n if (l === undefined)\n data.l = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 'l');\n }\n _ensureRGB() {\n const data = this.data;\n const { r, g, b } = data;\n if (r === undefined)\n data.r = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'r');\n if (g === undefined)\n data.g = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'g');\n if (b === undefined)\n data.b = _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'b');\n }\n /* GETTERS */\n get r() {\n const data = this.data;\n const r = data.r;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL) && r !== undefined)\n return r;\n this._ensureHSL();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'r');\n }\n get g() {\n const data = this.data;\n const g = data.g;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL) && g !== undefined)\n return g;\n this._ensureHSL();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'g');\n }\n get b() {\n const data = this.data;\n const b = data.b;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL) && b !== undefined)\n return b;\n this._ensureHSL();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.hsl2rgb(data, 'b');\n }\n get h() {\n const data = this.data;\n const h = data.h;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB) && h !== undefined)\n return h;\n this._ensureRGB();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 'h');\n }\n get s() {\n const data = this.data;\n const s = data.s;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB) && s !== undefined)\n return s;\n this._ensureRGB();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 's');\n }\n get l() {\n const data = this.data;\n const l = data.l;\n if (!this.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB) && l !== undefined)\n return l;\n this._ensureRGB();\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.rgb2hsl(data, 'l');\n }\n get a() {\n return this.data.a;\n }\n /* SETTERS */\n set r(r) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB);\n this.changed = true;\n this.data.r = r;\n }\n set g(g) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB);\n this.changed = true;\n this.data.g = g;\n }\n set b(b) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.RGB);\n this.changed = true;\n this.data.b = b;\n }\n set h(h) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL);\n this.changed = true;\n this.data.h = h;\n }\n set s(s) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL);\n this.changed = true;\n this.data.s = s;\n }\n set l(l) {\n this.type.set(_constants_js__WEBPACK_IMPORTED_MODULE_1__.TYPE.HSL);\n this.changed = true;\n this.data.l = l;\n }\n set a(a) {\n this.changed = true;\n this.data.a = a;\n }\n}\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Channels);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNrQztBQUNMO0FBQ1U7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLHdCQUF3QixnREFBSTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLHlCQUF5QixtREFBUTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQSxxQkFBcUIsdUVBQWlCO0FBQ3RDO0FBQ0EscUJBQXFCLHVFQUFpQjtBQUN0QztBQUNBLHFCQUFxQix1RUFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQSxxQkFBcUIsdUVBQWlCO0FBQ3RDO0FBQ0EscUJBQXFCLHVFQUFpQjtBQUN0QztBQUNBLHFCQUFxQix1RUFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtREFBUTtBQUNsQztBQUNBO0FBQ0EsZUFBZSx1RUFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbURBQVE7QUFDbEM7QUFDQTtBQUNBLGVBQWUsdUVBQWlCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1EQUFRO0FBQ2xDO0FBQ0E7QUFDQSxlQUFlLHVFQUFpQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtREFBUTtBQUNsQztBQUNBO0FBQ0EsZUFBZSx1RUFBaUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbURBQVE7QUFDbEM7QUFDQTtBQUNBLGVBQWUsdUVBQWlCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1EQUFRO0FBQ2xDO0FBQ0E7QUFDQSxlQUFlLHVFQUFpQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbURBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jaGFubmVscy9pbmRleC5qcz8xNTg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IFR5cGUgZnJvbSAnLi90eXBlLmpzJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY2xhc3MgQ2hhbm5lbHMge1xuICAgIC8qIENPTlNUUlVDVE9SICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgY29sb3IpIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsgLy9UU0NcbiAgICAgICAgdGhpcy50eXBlID0gbmV3IFR5cGUoKTtcbiAgICB9XG4gICAgLyogQVBJICovXG4gICAgc2V0KGRhdGEsIGNvbG9yKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7IC8vVFNDXG4gICAgICAgIHRoaXMudHlwZS50eXBlID0gVFlQRS5BTEw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKiBIRUxQRVJTICovXG4gICAgX2Vuc3VyZUhTTCgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgeyBoLCBzLCBsIH0gPSBkYXRhO1xuICAgICAgICBpZiAoaCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5oID0gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ2gnKTtcbiAgICAgICAgaWYgKHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEucyA9IF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdzJyk7XG4gICAgICAgIGlmIChsID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLmwgPSBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAnbCcpO1xuICAgIH1cbiAgICBfZW5zdXJlUkdCKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCB7IHIsIGcsIGIgfSA9IGRhdGE7XG4gICAgICAgIGlmIChyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLnIgPSBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAncicpO1xuICAgICAgICBpZiAoZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5nID0gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ2cnKTtcbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEuYiA9IF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdiJyk7XG4gICAgfVxuICAgIC8qIEdFVFRFUlMgKi9cbiAgICBnZXQgcigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgciA9IGRhdGEucjtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5IU0wpICYmIHIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB0aGlzLl9lbnN1cmVIU0woKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdyJyk7XG4gICAgfVxuICAgIGdldCBnKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBnID0gZGF0YS5nO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLkhTTCkgJiYgZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIGc7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUhTTCgpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ2cnKTtcbiAgICB9XG4gICAgZ2V0IGIoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IGIgPSBkYXRhLmI7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuSFNMKSAmJiBiICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgdGhpcy5fZW5zdXJlSFNMKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAnYicpO1xuICAgIH1cbiAgICBnZXQgaCgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgaCA9IGRhdGEuaDtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5SR0IpICYmIGggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICB0aGlzLl9lbnN1cmVSR0IoKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdoJyk7XG4gICAgfVxuICAgIGdldCBzKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBzID0gZGF0YS5zO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLlJHQikgJiYgcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVJHQigpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ3MnKTtcbiAgICB9XG4gICAgZ2V0IGwoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IGwgPSBkYXRhLmw7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuUkdCKSAmJiBsICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgdGhpcy5fZW5zdXJlUkdCKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAnbCcpO1xuICAgIH1cbiAgICBnZXQgYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hO1xuICAgIH1cbiAgICAvKiBTRVRURVJTICovXG4gICAgc2V0IHIocikge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuUkdCKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLnIgPSByO1xuICAgIH1cbiAgICBzZXQgZyhnKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5SR0IpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuZyA9IGc7XG4gICAgfVxuICAgIHNldCBiKGIpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLlJHQik7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5iID0gYjtcbiAgICB9XG4gICAgc2V0IGgoaCkge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuSFNMKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmggPSBoO1xuICAgIH1cbiAgICBzZXQgcyhzKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5IU0wpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEucyA9IHM7XG4gICAgfVxuICAgIHNldCBsKGwpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLkhTTCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5sID0gbDtcbiAgICB9XG4gICAgc2V0IGEoYSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuYSA9IGE7XG4gICAgfVxufVxuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBDaGFubmVscztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/channels/index.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/channels/reusable.js": /*!**************************************************************!*\ !*** ../../../node_modules/khroma/dist/channels/reusable.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! .//index.js */ \"../../../node_modules/khroma/dist/channels/index.js\");\n/* IMPORT */\n\n/* MAIN */\nconst channels = new _index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channels);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL3JldXNhYmxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDbUM7QUFDbkM7QUFDQSxxQkFBcUIsaURBQVEsR0FBRyx3QkFBd0I7QUFDeEQ7QUFDQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL3JldXNhYmxlLmpzPzE0NTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi8vaW5kZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgY2hhbm5lbHMgPSBuZXcgQ2hhbm5lbHMoeyByOiAwLCBnOiAwLCBiOiAwLCBhOiAwIH0sICd0cmFuc3BhcmVudCcpO1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBjaGFubmVscztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/channels/reusable.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/channels/type.js": /*!**********************************************************!*\ !*** ../../../node_modules/khroma/dist/channels/type.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/khroma/dist/constants.js\");\n/* IMPORT */\n\n/* MAIN */\nclass Type {\n constructor() {\n /* VARIABLES */\n this.type = _constants_js__WEBPACK_IMPORTED_MODULE_0__.TYPE.ALL;\n }\n /* API */\n get() {\n return this.type;\n }\n set(type) {\n if (this.type && this.type !== type)\n throw new Error('Cannot change both RGB and HSL channels at the same time');\n this.type = type;\n }\n reset() {\n this.type = _constants_js__WEBPACK_IMPORTED_MODULE_0__.TYPE.ALL;\n }\n is(type) {\n return this.type === type;\n }\n}\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Type);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL3R5cGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUN1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtREFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1EQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY2hhbm5lbHMvdHlwZS5qcz9kNDdmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jbGFzcyBUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyogVkFSSUFCTEVTICovXG4gICAgICAgIHRoaXMudHlwZSA9IFRZUEUuQUxMO1xuICAgIH1cbiAgICAvKiBBUEkgKi9cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgfVxuICAgIHNldCh0eXBlKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgJiYgdGhpcy50eXBlICE9PSB0eXBlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZScpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5BTEw7XG4gICAgfVxuICAgIGlzKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHlwZTtcbiAgICB9XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFR5cGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/channels/type.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/color/hex.js": /*!******************************************************!*\ !*** ../../../node_modules/khroma/dist/color/hex.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _channels_reusable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../channels/reusable.js */ \"../../../node_modules/khroma/dist/channels/reusable.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/khroma/dist/constants.js\");\n/* IMPORT */\n\n\n\n/* MAIN */\nconst Hex = {\n /* VARIABLES */\n re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,\n /* API */\n parse: (color) => {\n if (color.charCodeAt(0) !== 35)\n return; // '#'\n const match = color.match(Hex.re);\n if (!match)\n return;\n const hex = match[1];\n const dec = parseInt(hex, 16);\n const length = hex.length;\n const hasAlpha = length % 4 === 0;\n const isFullLength = length > 4;\n const multiplier = isFullLength ? 1 : 17;\n const bits = isFullLength ? 8 : 4;\n const bitsOffset = hasAlpha ? 0 : -1;\n const mask = isFullLength ? 255 : 15;\n return _channels_reusable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].set({\n r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,\n g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,\n b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,\n a: hasAlpha ? (dec & mask) * multiplier / 255 : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // #RRGGBBAA\n return `#${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(r)]}${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(g)]}${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(b)]}${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(a * 255)]}`;\n }\n else { // #RRGGBB\n return `#${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(r)]}${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(g)]}${_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEC2HEX[Math.round(b)]}`;\n }\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Hex);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNrQztBQUNxQjtBQUNiO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUVBQW9CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLGdCQUFnQixhQUFhO0FBQzdCLHFCQUFxQjtBQUNyQix1QkFBdUIsa0RBQU8sZ0JBQWdCLEVBQUUsa0RBQU8sZ0JBQWdCLEVBQUUsa0RBQU8sZ0JBQWdCLEVBQUUsa0RBQU8sc0JBQXNCO0FBQy9IO0FBQ0EsZUFBZTtBQUNmLHVCQUF1QixrREFBTyxnQkFBZ0IsRUFBRSxrREFBTyxnQkFBZ0IsRUFBRSxrREFBTyxnQkFBZ0I7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hleC5qcz84ZDU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuaW1wb3J0IHsgREVDMkhFWCB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBIZXggPSB7XG4gICAgLyogVkFSSUFCTEVTICovXG4gICAgcmU6IC9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2ksXG4gICAgLyogQVBJICovXG4gICAgcGFyc2U6IChjb2xvcikgPT4ge1xuICAgICAgICBpZiAoY29sb3IuY2hhckNvZGVBdCgwKSAhPT0gMzUpXG4gICAgICAgICAgICByZXR1cm47IC8vICcjJ1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbG9yLm1hdGNoKEhleC5yZSk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGhleCA9IG1hdGNoWzFdO1xuICAgICAgICBjb25zdCBkZWMgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaGV4Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgaGFzQWxwaGEgPSBsZW5ndGggJSA0ID09PSAwO1xuICAgICAgICBjb25zdCBpc0Z1bGxMZW5ndGggPSBsZW5ndGggPiA0O1xuICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gaXNGdWxsTGVuZ3RoID8gMSA6IDE3O1xuICAgICAgICBjb25zdCBiaXRzID0gaXNGdWxsTGVuZ3RoID8gOCA6IDQ7XG4gICAgICAgIGNvbnN0IGJpdHNPZmZzZXQgPSBoYXNBbHBoYSA/IDAgOiAtMTtcbiAgICAgICAgY29uc3QgbWFzayA9IGlzRnVsbExlbmd0aCA/IDI1NSA6IDE1O1xuICAgICAgICByZXR1cm4gQ2hhbm5lbHNSZXVzYWJsZS5zZXQoe1xuICAgICAgICAgICAgcjogKChkZWMgPj4gKGJpdHMgKiAoYml0c09mZnNldCArIDMpKSkgJiBtYXNrKSAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICBnOiAoKGRlYyA+PiAoYml0cyAqIChiaXRzT2Zmc2V0ICsgMikpKSAmIG1hc2spICogbXVsdGlwbGllcixcbiAgICAgICAgICAgIGI6ICgoZGVjID4+IChiaXRzICogKGJpdHNPZmZzZXQgKyAxKSkpICYgbWFzaykgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgYTogaGFzQWxwaGEgPyAoZGVjICYgbWFzaykgKiBtdWx0aXBsaWVyIC8gMjU1IDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IHIsIGcsIGIsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gI1JSR0dCQkFBXG4gICAgICAgICAgICByZXR1cm4gYCMke0RFQzJIRVhbTWF0aC5yb3VuZChyKV19JHtERUMySEVYW01hdGgucm91bmQoZyldfSR7REVDMkhFWFtNYXRoLnJvdW5kKGIpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChhICogMjU1KV19YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gI1JSR0dCQlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtERUMySEVYW01hdGgucm91bmQocildfSR7REVDMkhFWFtNYXRoLnJvdW5kKGcpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChiKV19YDtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IEhleDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/color/hex.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/color/hsl.js": /*!******************************************************!*\ !*** ../../../node_modules/khroma/dist/color/hsl.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _channels_reusable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../channels/reusable.js */ \"../../../node_modules/khroma/dist/channels/reusable.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst HSL = {\n /* VARIABLES */\n re: /^hsla?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(?:deg|grad|rad|turn)?)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(%)?))?\\s*?\\)$/i,\n hueRe: /^(.+?)(deg|grad|rad|turn)$/i,\n /* HELPERS */\n _hue2deg: (hue) => {\n const match = hue.match(HSL.hueRe);\n if (match) {\n const [, number, unit] = match;\n switch (unit) {\n case 'grad': return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.h(parseFloat(number) * .9);\n case 'rad': return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.h(parseFloat(number) * 180 / Math.PI);\n case 'turn': return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.h(parseFloat(number) * 360);\n }\n }\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.h(parseFloat(hue));\n },\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 104 && charCode !== 72)\n return; // 'h'/'H'\n const match = color.match(HSL.re);\n if (!match)\n return;\n const [, h, s, l, a, isAlphaPercentage] = match;\n return _channels_reusable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set({\n h: HSL._hue2deg(h),\n s: _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.s(parseFloat(s)),\n l: _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.l(parseFloat(l)),\n a: a ? _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { h, s, l, a } = channels;\n if (a < 1) { // HSLA\n return `hsla(${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(h)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(s)}%, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(l)}%, ${a})`;\n }\n else { // HSL\n return `hsl(${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(h)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(s)}%, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(l)}%)`;\n }\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HSL);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hzbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNrQztBQUNxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHVFQUFpQjtBQUNyRCxtQ0FBbUMsdUVBQWlCO0FBQ3BELG9DQUFvQyx1RUFBaUI7QUFDckQ7QUFDQTtBQUNBLGVBQWUsdUVBQWlCO0FBQ2hDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUVBQW9CO0FBQ25DO0FBQ0EsZUFBZSx1RUFBaUI7QUFDaEMsZUFBZSx1RUFBaUI7QUFDaEMsbUJBQW1CLHVFQUFpQjtBQUNwQyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0IscUJBQXFCO0FBQ3JCLDJCQUEyQixrRUFBWSxJQUFJLElBQUksa0VBQVksSUFBSSxLQUFLLGtFQUFZLElBQUksS0FBSyxFQUFFO0FBQzNGO0FBQ0EsZUFBZTtBQUNmLDBCQUEwQixrRUFBWSxJQUFJLElBQUksa0VBQVksSUFBSSxLQUFLLGtFQUFZLElBQUk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hzbC5qcz84YmJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSFNMID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXmhzbGE/XFwoXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmUtP1xcZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZS0/XFxkKyk/JSlcXHMqPyg/Oix8XFxzKVxccyo/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8lKSg/Olxccyo/KD86LHxcXC8pXFxzKj9cXCs/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8oJSk/KSk/XFxzKj9cXCkkL2ksXG4gICAgaHVlUmU6IC9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLFxuICAgIC8qIEhFTFBFUlMgKi9cbiAgICBfaHVlMmRlZzogKGh1ZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGh1ZS5tYXRjaChIU0wuaHVlUmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIG51bWJlciwgdW5pdF0gPSBtYXRjaDtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyYWQnOiByZXR1cm4gXy5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChudW1iZXIpICogLjkpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZCc6IHJldHVybiBfLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KG51bWJlcikgKiAxODAgLyBNYXRoLlBJKTtcbiAgICAgICAgICAgICAgICBjYXNlICd0dXJuJzogcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQobnVtYmVyKSAqIDM2MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoaHVlKSk7XG4gICAgfSxcbiAgICAvKiBBUEkgKi9cbiAgICBwYXJzZTogKGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY29sb3IuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKGNoYXJDb2RlICE9PSAxMDQgJiYgY2hhckNvZGUgIT09IDcyKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyAnaCcvJ0gnXG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29sb3IubWF0Y2goSFNMLnJlKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgWywgaCwgcywgbCwgYSwgaXNBbHBoYVBlcmNlbnRhZ2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBDaGFubmVsc1JldXNhYmxlLnNldCh7XG4gICAgICAgICAgICBoOiBIU0wuX2h1ZTJkZWcoaCksXG4gICAgICAgICAgICBzOiBfLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxcbiAgICAgICAgICAgIGw6IF8uY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQobCkpLFxuICAgICAgICAgICAgYTogYSA/IF8uY2hhbm5lbC5jbGFtcC5hKGlzQWxwaGFQZXJjZW50YWdlID8gcGFyc2VGbG9hdChhKSAvIDEwMCA6IHBhcnNlRmxvYXQoYSkpIDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gSFNMQVxuICAgICAgICAgICAgcmV0dXJuIGBoc2xhKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSwgJHthfSlgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBIU0xcbiAgICAgICAgICAgIHJldHVybiBgaHNsKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSlgO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgSFNMO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/color/hsl.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/color/index.js": /*!********************************************************!*\ !*** ../../../node_modules/khroma/dist/color/index.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _hex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hex.js */ \"../../../node_modules/khroma/dist/color/hex.js\");\n/* harmony import */ var _hsl_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hsl.js */ \"../../../node_modules/khroma/dist/color/hsl.js\");\n/* harmony import */ var _keyword_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keyword.js */ \"../../../node_modules/khroma/dist/color/keyword.js\");\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rgb.js */ \"../../../node_modules/khroma/dist/color/rgb.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/khroma/dist/constants.js\");\n/* IMPORT */\n\n\n\n\n\n\n/* MAIN */\nconst Color = {\n /* VARIABLES */\n format: {\n keyword: _keyword_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n hex: _hex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n rgba: _rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n hsl: _hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n hsla: _hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n },\n /* API */\n parse: (color) => {\n if (typeof color !== 'string')\n return color;\n const channels = _hex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].parse(color) || _rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].parse(color) || _hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].parse(color) || _keyword_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color); // Color providers ordered with performance in mind\n if (channels)\n return channels;\n throw new Error(`Unsupported color format: \"${color}\"`);\n },\n stringify: (channels) => {\n // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value\n if (!channels.changed && channels.color)\n return channels.color;\n if (channels.type.is(_constants_js__WEBPACK_IMPORTED_MODULE_4__.TYPE.HSL) || channels.data.r === undefined) {\n return _hsl_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].stringify(channels);\n }\n else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {\n return _rgb_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].stringify(channels);\n }\n else {\n return _hex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stringify(channels);\n }\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Color);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ2tDO0FBQ1A7QUFDQTtBQUNRO0FBQ1I7QUFDWTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixtREFBTztBQUN4QixhQUFhLCtDQUFHO0FBQ2hCLGFBQWEsK0NBQUc7QUFDaEIsY0FBYywrQ0FBRztBQUNqQixhQUFhLCtDQUFHO0FBQ2hCLGNBQWMsK0NBQUc7QUFDakIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHFEQUFTLFdBQVcscURBQVMsV0FBVyxxREFBUyxXQUFXLHlEQUFhLFNBQVM7QUFDM0c7QUFDQTtBQUNBLHNEQUFzRCxNQUFNO0FBQzVELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixtREFBUTtBQUNyQyxtQkFBbUIseURBQWE7QUFDaEM7QUFDQTtBQUNBLG1CQUFtQix5REFBYTtBQUNoQztBQUNBO0FBQ0EsbUJBQW1CLHlEQUFhO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsS0FBSyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9pbmRleC5qcz84MmJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IEhleCBmcm9tICcuL2hleC5qcyc7XG5pbXBvcnQgSFNMIGZyb20gJy4vaHNsLmpzJztcbmltcG9ydCBLZXl3b3JkIGZyb20gJy4va2V5d29yZC5qcyc7XG5pbXBvcnQgUkdCIGZyb20gJy4vcmdiLmpzJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgQ29sb3IgPSB7XG4gICAgLyogVkFSSUFCTEVTICovXG4gICAgZm9ybWF0OiB7XG4gICAgICAgIGtleXdvcmQ6IEtleXdvcmQsXG4gICAgICAgIGhleDogSGV4LFxuICAgICAgICByZ2I6IFJHQixcbiAgICAgICAgcmdiYTogUkdCLFxuICAgICAgICBoc2w6IEhTTCxcbiAgICAgICAgaHNsYTogSFNMXG4gICAgfSxcbiAgICAvKiBBUEkgKi9cbiAgICBwYXJzZTogKGNvbG9yKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29sb3IgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgICAgICBjb25zdCBjaGFubmVscyA9IEhleC5wYXJzZShjb2xvcikgfHwgUkdCLnBhcnNlKGNvbG9yKSB8fCBIU0wucGFyc2UoY29sb3IpIHx8IEtleXdvcmQucGFyc2UoY29sb3IpOyAvLyBDb2xvciBwcm92aWRlcnMgb3JkZXJlZCB3aXRoIHBlcmZvcm1hbmNlIGluIG1pbmRcbiAgICAgICAgaWYgKGNoYW5uZWxzKVxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogXCIke2NvbG9yfVwiYCk7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICAvLyBTQVNTIHJldHVybnMgYSBrZXl3b3JkIGlmIHBvc3NpYmxlLCBidXQgd2UgYXZvaWQgZG9pbmcgdGhhdCBhcyBpdCdzIHNsb3dlciBhbmQgZG9lc24ndCByZWFsbHkgYWRkIGFueSB2YWx1ZVxuICAgICAgICBpZiAoIWNoYW5uZWxzLmNoYW5nZWQgJiYgY2hhbm5lbHMuY29sb3IpXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbHMuY29sb3I7XG4gICAgICAgIGlmIChjaGFubmVscy50eXBlLmlzKFRZUEUuSFNMKSB8fCBjaGFubmVscy5kYXRhLnIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEhTTC5zdHJpbmdpZnkoY2hhbm5lbHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoYW5uZWxzLmEgPCAxIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNoYW5uZWxzLnIpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNoYW5uZWxzLmcpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNoYW5uZWxzLmIpKSB7XG4gICAgICAgICAgICByZXR1cm4gUkdCLnN0cmluZ2lmeShjaGFubmVscyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gSGV4LnN0cmluZ2lmeShjaGFubmVscyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBDb2xvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/color/index.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/color/keyword.js": /*!**********************************************************!*\ !*** ../../../node_modules/khroma/dist/color/keyword.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _hex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hex.js */ \"../../../node_modules/khroma/dist/color/hex.js\");\n/* IMPORT */\n\n/* MAIN */\nconst Keyword = {\n /* VARIABLES */\n colors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyanaqua: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n transparent: '#00000000',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n },\n /* API */\n parse: (color) => {\n color = color.toLowerCase();\n const hex = Keyword.colors[color];\n if (!hex)\n return;\n return _hex_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(hex);\n },\n stringify: (channels) => {\n const hex = _hex_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stringify(channels);\n for (const name in Keyword.colors) {\n if (Keyword.colors[name] === hex)\n return name;\n }\n return;\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Keyword);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2tleXdvcmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUMyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFEQUFTO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLG9CQUFvQix5REFBYTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9rZXl3b3JkLmpzPzU5MWUiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgSGV4IGZyb20gJy4vaGV4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IEtleXdvcmQgPSB7XG4gICAgLyogVkFSSUFCTEVTICovXG4gICAgY29sb3JzOiB7XG4gICAgICAgIGFsaWNlYmx1ZTogJyNmMGY4ZmYnLFxuICAgICAgICBhbnRpcXVld2hpdGU6ICcjZmFlYmQ3JyxcbiAgICAgICAgYXF1YTogJyMwMGZmZmYnLFxuICAgICAgICBhcXVhbWFyaW5lOiAnIzdmZmZkNCcsXG4gICAgICAgIGF6dXJlOiAnI2YwZmZmZicsXG4gICAgICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgICAgIGJpc3F1ZTogJyNmZmU0YzQnLFxuICAgICAgICBibGFjazogJyMwMDAwMDAnLFxuICAgICAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgICAgICBibHVlOiAnIzAwMDBmZicsXG4gICAgICAgIGJsdWV2aW9sZXQ6ICcjOGEyYmUyJyxcbiAgICAgICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICAgICAgYnVybHl3b29kOiAnI2RlYjg4NycsXG4gICAgICAgIGNhZGV0Ymx1ZTogJyM1ZjllYTAnLFxuICAgICAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgICAgIGNob2NvbGF0ZTogJyNkMjY5MWUnLFxuICAgICAgICBjb3JhbDogJyNmZjdmNTAnLFxuICAgICAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgICAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgICAgICBjcmltc29uOiAnI2RjMTQzYycsXG4gICAgICAgIGN5YW5hcXVhOiAnIzAwZmZmZicsXG4gICAgICAgIGRhcmtibHVlOiAnIzAwMDA4YicsXG4gICAgICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICAgICAgZGFya2dyYXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgICAgIGRhcmtraGFraTogJyNiZGI3NmInLFxuICAgICAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgICAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgICAgICBkYXJrb3JhbmdlOiAnI2ZmOGMwMCcsXG4gICAgICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICAgICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgICAgICBkYXJrc2FsbW9uOiAnI2U5OTY3YScsXG4gICAgICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgICAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgICAgIGRhcmtzbGF0ZWdyYXk6ICcjMmY0ZjRmJyxcbiAgICAgICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgICAgIGRhcmt2aW9sZXQ6ICcjOTQwMGQzJyxcbiAgICAgICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICAgICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICAgICAgZGltZ3JheTogJyM2OTY5NjknLFxuICAgICAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICAgICAgZmlyZWJyaWNrOiAnI2IyMjIyMicsXG4gICAgICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgICAgIGZ1Y2hzaWE6ICcjZmYwMGZmJyxcbiAgICAgICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICAgICAgZ29sZDogJyNmZmQ3MDAnLFxuICAgICAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICAgICAgZ3JheTogJyM4MDgwODAnLFxuICAgICAgICBncmVlbjogJyMwMDgwMDAnLFxuICAgICAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgICAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgICAgIGhvbmV5ZGV3OiAnI2YwZmZmMCcsXG4gICAgICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICAgICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgICAgIGluZGlnbzogJyM0YjAwODInLFxuICAgICAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgICAgICBraGFraTogJyNmMGU2OGMnLFxuICAgICAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgICAgICBsYXZlbmRlcmJsdXNoOiAnI2ZmZjBmNScsXG4gICAgICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgICAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICAgICAgbGlnaHRibHVlOiAnI2FkZDhlNicsXG4gICAgICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICAgICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodGdyZWVuOiAnIzkwZWU5MCcsXG4gICAgICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICAgICAgbGlnaHRzYWxtb246ICcjZmZhMDdhJyxcbiAgICAgICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgICAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyYXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICAgICAgbGlnaHR5ZWxsb3c6ICcjZmZmZmUwJyxcbiAgICAgICAgbGltZTogJyMwMGZmMDAnLFxuICAgICAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICAgICAgbGluZW46ICcjZmFmMGU2JyxcbiAgICAgICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgICAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICAgICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgICAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgICAgIG1lZGl1bW9yY2hpZDogJyNiYTU1ZDMnLFxuICAgICAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICAgICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICAgICAgbWVkaXVtc2xhdGVibHVlOiAnIzdiNjhlZScsXG4gICAgICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgICAgICBtZWRpdW12aW9sZXRyZWQ6ICcjYzcxNTg1JyxcbiAgICAgICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgICAgICBtaXN0eXJvc2U6ICcjZmZlNGUxJyxcbiAgICAgICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICAgICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICAgICAgbmF2eTogJyMwMDAwODAnLFxuICAgICAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgICAgIG9saXZlZHJhYjogJyM2YjhlMjMnLFxuICAgICAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICAgICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgICAgIG9yY2hpZDogJyNkYTcwZDYnLFxuICAgICAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgICAgICBwYWxldHVycXVvaXNlOiAnI2FmZWVlZScsXG4gICAgICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICAgICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgICAgICBwZWFjaHB1ZmY6ICcjZmZkYWI5JyxcbiAgICAgICAgcGVydTogJyNjZDg1M2YnLFxuICAgICAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgICAgIHBsdW06ICcjZGRhMGRkJyxcbiAgICAgICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgICAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICAgICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgICAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICAgICAgcm9zeWJyb3duOiAnI2JjOGY4ZicsXG4gICAgICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgICAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgICAgICBzYWxtb246ICcjZmE4MDcyJyxcbiAgICAgICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgICAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgICAgICBzZWFzaGVsbDogJyNmZmY1ZWUnLFxuICAgICAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICAgICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgICAgIHNreWJsdWU6ICcjODdjZWViJyxcbiAgICAgICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgICAgICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgICAgICAgc25vdzogJyNmZmZhZmEnLFxuICAgICAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgICAgICB0YW46ICcjZDJiNDhjJyxcbiAgICAgICAgdGVhbDogJyMwMDgwODAnLFxuICAgICAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgICAgIHRyYW5zcGFyZW50OiAnIzAwMDAwMDAwJyxcbiAgICAgICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgICAgIHZpb2xldDogJyNlZTgyZWUnLFxuICAgICAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgICAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgICAgICB3aGl0ZXNtb2tlOiAnI2Y1ZjVmNScsXG4gICAgICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgICAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gICAgfSxcbiAgICAvKiBBUEkgKi9cbiAgICBwYXJzZTogKGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbG9yID0gY29sb3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGV4ID0gS2V5d29yZC5jb2xvcnNbY29sb3JdO1xuICAgICAgICBpZiAoIWhleClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIEhleC5wYXJzZShoZXgpO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiAoY2hhbm5lbHMpID0+IHtcbiAgICAgICAgY29uc3QgaGV4ID0gSGV4LnN0cmluZ2lmeShjaGFubmVscyk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBLZXl3b3JkLmNvbG9ycykge1xuICAgICAgICAgICAgaWYgKEtleXdvcmQuY29sb3JzW25hbWVdID09PSBoZXgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IEtleXdvcmQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/color/keyword.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/color/rgb.js": /*!******************************************************!*\ !*** ../../../node_modules/khroma/dist/color/rgb.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _channels_reusable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../channels/reusable.js */ \"../../../node_modules/khroma/dist/channels/reusable.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst RGB = {\n /* VARIABLES */\n re: /^rgba?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?)))?\\s*?\\)$/i,\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 114 && charCode !== 82)\n return; // 'r'/'R'\n const match = color.match(RGB.re);\n if (!match)\n return;\n const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;\n return _channels_reusable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].set({\n r: _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),\n g: _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),\n b: _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),\n a: a ? _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // RGBA\n return `rgba(${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(r)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(g)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(b)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(a)})`;\n }\n else { // RGB\n return `rgb(${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(r)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(g)}, ${_utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(b)})`;\n }\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RGB);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL3JnYi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNrQztBQUNxQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpRUFBb0I7QUFDbkMsZUFBZSx1RUFBaUI7QUFDaEMsZUFBZSx1RUFBaUI7QUFDaEMsZUFBZSx1RUFBaUI7QUFDaEMsbUJBQW1CLHVFQUFpQjtBQUNwQyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0IscUJBQXFCO0FBQ3JCLDJCQUEyQixrRUFBWSxJQUFJLElBQUksa0VBQVksSUFBSSxJQUFJLGtFQUFZLElBQUksSUFBSSxrRUFBWSxJQUFJO0FBQ3ZHO0FBQ0EsZUFBZTtBQUNmLDBCQUEwQixrRUFBWSxJQUFJLElBQUksa0VBQVksSUFBSSxJQUFJLGtFQUFZLElBQUk7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL3JnYi5qcz8yN2ZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgUkdCID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXnJnYmE/XFwoXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmVcXGQrKT8oJT8pKVxccyo/KD86LHxcXHMpXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmVcXGQrKT8oJT8pKVxccyo/KD86LHxcXHMpXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmVcXGQrKT8oJT8pKSg/Olxccyo/KD86LHxcXC8pXFxzKj9cXCs/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplXFxkKyk/KCU/KSkpP1xccyo/XFwpJC9pLFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBjb2xvci5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAoY2hhckNvZGUgIT09IDExNCAmJiBjaGFyQ29kZSAhPT0gODIpXG4gICAgICAgICAgICByZXR1cm47IC8vICdyJy8nUidcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb2xvci5tYXRjaChSR0IucmUpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBbLCByLCBpc1JlZFBlcmNlbnRhZ2UsIGcsIGlzR3JlZW5QZXJjZW50YWdlLCBiLCBpc0JsdWVQZXJjZW50YWdlLCBhLCBpc0FscGhhUGVyY2VudGFnZV0gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIENoYW5uZWxzUmV1c2FibGUuc2V0KHtcbiAgICAgICAgICAgIHI6IF8uY2hhbm5lbC5jbGFtcC5yKGlzUmVkUGVyY2VudGFnZSA/IHBhcnNlRmxvYXQocikgKiAyLjU1IDogcGFyc2VGbG9hdChyKSksXG4gICAgICAgICAgICBnOiBfLmNoYW5uZWwuY2xhbXAuZyhpc0dyZWVuUGVyY2VudGFnZSA/IHBhcnNlRmxvYXQoZykgKiAyLjU1IDogcGFyc2VGbG9hdChnKSksXG4gICAgICAgICAgICBiOiBfLmNoYW5uZWwuY2xhbXAuYihpc0JsdWVQZXJjZW50YWdlID8gcGFyc2VGbG9hdChiKSAqIDIuNTUgOiBwYXJzZUZsb2F0KGIpKSxcbiAgICAgICAgICAgIGE6IGEgPyBfLmNoYW5uZWwuY2xhbXAuYShpc0FscGhhUGVyY2VudGFnZSA/IHBhcnNlRmxvYXQoYSkgLyAxMDAgOiBwYXJzZUZsb2F0KGEpKSA6IDFcbiAgICAgICAgfSwgY29sb3IpO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiAoY2hhbm5lbHMpID0+IHtcbiAgICAgICAgY29uc3QgeyByLCBnLCBiLCBhIH0gPSBjaGFubmVscztcbiAgICAgICAgaWYgKGEgPCAxKSB7IC8vIFJHQkFcbiAgICAgICAgICAgIHJldHVybiBgcmdiYSgke18ubGFuZy5yb3VuZChyKX0sICR7Xy5sYW5nLnJvdW5kKGcpfSwgJHtfLmxhbmcucm91bmQoYil9LCAke18ubGFuZy5yb3VuZChhKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gUkdCXG4gICAgICAgICAgICByZXR1cm4gYHJnYigke18ubGFuZy5yb3VuZChyKX0sICR7Xy5sYW5nLnJvdW5kKGcpfSwgJHtfLmxhbmcucm91bmQoYil9KWA7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBSR0I7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/color/rgb.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/constants.js": /*!******************************************************!*\ !*** ../../../node_modules/khroma/dist/constants.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DEC2HEX\": () => (/* binding */ DEC2HEX),\n/* harmony export */ \"TYPE\": () => (/* binding */ TYPE)\n/* harmony export */ });\n/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* IMPORT */\n\n/* MAIN */\nconst DEC2HEX = {};\nfor (let i = 0; i <= 255; i++)\n DEC2HEX[i] = _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance\nconst TYPE = {\n ALL: 0,\n RGB: 1,\n HSL: 2\n};\n/* EXPORT */\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbnN0YW50cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNpQztBQUNqQztBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUIsaUJBQWlCLG9FQUFjLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3lCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb25zdGFudHMuanM/MzlkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4vdXRpbHMvaW5kZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgREVDMkhFWCA9IHt9O1xuZm9yIChsZXQgaSA9IDA7IGkgPD0gMjU1OyBpKyspXG4gICAgREVDMkhFWFtpXSA9IF8udW5pdC5kZWMyaGV4KGkpOyAvLyBQb3B1bGF0aW5nIGR5bmFtaWNhbGx5LCBzdHJpa2luZyBhIGJhbGFuY2UgYmV0d2VlbiBjb2RlIHNpemUgYW5kIHBlcmZvcm1hbmNlXG5jb25zdCBUWVBFID0ge1xuICAgIEFMTDogMCxcbiAgICBSR0I6IDEsXG4gICAgSFNMOiAyXG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgeyBERUMySEVYLCBUWVBFIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/constants.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/adjust.js": /*!***********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/adjust.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* harmony import */ var _change_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./change.js */ \"../../../node_modules/khroma/dist/methods/change.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst adjust = (color, channels) => {\n const ch = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color);\n const changes = {};\n for (const c in channels) {\n if (!channels[c])\n continue;\n changes[c] = ch[c] + channels[c];\n }\n return (0,_change_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(color, changes);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (adjust);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvYWRqdXN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3NDO0FBQ0w7QUFDakM7QUFDQTtBQUNBLGVBQWUsNkRBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzREFBTTtBQUNqQjtBQUNBO0FBQ0EsaUVBQWUsTUFBTSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2FkanVzdC5qcz9jZjQ1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbmltcG9ydCBjaGFuZ2UgZnJvbSAnLi9jaGFuZ2UuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgYWRqdXN0ID0gKGNvbG9yLCBjaGFubmVscykgPT4ge1xuICAgIGNvbnN0IGNoID0gQ29sb3IucGFyc2UoY29sb3IpO1xuICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGMgaW4gY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKCFjaGFubmVsc1tjXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjaGFuZ2VzW2NdID0gY2hbY10gKyBjaGFubmVsc1tjXTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZShjb2xvciwgY2hhbmdlcyk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBhZGp1c3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/adjust.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/adjust_channel.js": /*!*******************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/adjust_channel.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst adjustChannel = (color, channel, amount) => {\n const channels = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color);\n const amountCurrent = channels[channel];\n const amountNext = _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp[channel](amountCurrent + amount);\n if (amountCurrent !== amountNext)\n channels[channel] = amountNext;\n return _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stringify(channels);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (adjustChannel);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvYWRqdXN0X2NoYW5uZWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDa0M7QUFDSTtBQUN0QztBQUNBO0FBQ0EscUJBQXFCLDZEQUFXO0FBQ2hDO0FBQ0EsdUJBQXVCLHFFQUFlO0FBQ3RDO0FBQ0E7QUFDQSxXQUFXLGlFQUFlO0FBQzFCO0FBQ0E7QUFDQSxpRUFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvYWRqdXN0X2NoYW5uZWwuanM/NDc3MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBhZGp1c3RDaGFubmVsID0gKGNvbG9yLCBjaGFubmVsLCBhbW91bnQpID0+IHtcbiAgICBjb25zdCBjaGFubmVscyA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBjb25zdCBhbW91bnRDdXJyZW50ID0gY2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3QgYW1vdW50TmV4dCA9IF8uY2hhbm5lbC5jbGFtcFtjaGFubmVsXShhbW91bnRDdXJyZW50ICsgYW1vdW50KTtcbiAgICBpZiAoYW1vdW50Q3VycmVudCAhPT0gYW1vdW50TmV4dClcbiAgICAgICAgY2hhbm5lbHNbY2hhbm5lbF0gPSBhbW91bnROZXh0O1xuICAgIHJldHVybiBDb2xvci5zdHJpbmdpZnkoY2hhbm5lbHMpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgYWRqdXN0Q2hhbm5lbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/adjust_channel.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/change.js": /*!***********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/change.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst change = (color, channels) => {\n const ch = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color);\n for (const c in channels) {\n ch[c] = _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.clamp[c](channels[c]);\n }\n return _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stringify(ch);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (change);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvY2hhbmdlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ2tDO0FBQ0k7QUFDdEM7QUFDQTtBQUNBLGVBQWUsNkRBQVc7QUFDMUI7QUFDQSxnQkFBZ0IscUVBQWU7QUFDL0I7QUFDQSxXQUFXLGlFQUFlO0FBQzFCO0FBQ0E7QUFDQSxpRUFBZSxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvY2hhbmdlLmpzPzhjNmYiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgY2hhbmdlID0gKGNvbG9yLCBjaGFubmVscykgPT4ge1xuICAgIGNvbnN0IGNoID0gQ29sb3IucGFyc2UoY29sb3IpO1xuICAgIGZvciAoY29uc3QgYyBpbiBjaGFubmVscykge1xuICAgICAgICBjaFtjXSA9IF8uY2hhbm5lbC5jbGFtcFtjXShjaGFubmVsc1tjXSk7XG4gICAgfVxuICAgIHJldHVybiBDb2xvci5zdHJpbmdpZnkoY2gpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgY2hhbmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/change.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/channel.js": /*!************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/channel.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst channel = (color, channel) => {\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].parse(color)[channel]);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvY2hhbm5lbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNrQztBQUNJO0FBQ3RDO0FBQ0E7QUFDQSxXQUFXLGtFQUFZLENBQUMsNkRBQVc7QUFDbkM7QUFDQTtBQUNBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9jaGFubmVsLmpzPzczZjEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgY2hhbm5lbCA9IChjb2xvciwgY2hhbm5lbCkgPT4ge1xuICAgIHJldHVybiBfLmxhbmcucm91bmQoQ29sb3IucGFyc2UoY29sb3IpW2NoYW5uZWxdKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGNoYW5uZWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/channel.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/darken.js": /*!***********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/darken.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjust_channel.js */ \"../../../node_modules/khroma/dist/methods/adjust_channel.js\");\n/* IMPORT */\n\n/* MAIN */\nconst darken = (color, amount) => {\n return (0,_adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(color, 'l', -amount);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (darken);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvZGFya2VuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDZ0Q7QUFDaEQ7QUFDQTtBQUNBLFdBQVcsOERBQWE7QUFDeEI7QUFDQTtBQUNBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9kYXJrZW4uanM/MmJkOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbmltcG9ydCBhZGp1c3RDaGFubmVsIGZyb20gJy4vYWRqdXN0X2NoYW5uZWwuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgZGFya2VuID0gKGNvbG9yLCBhbW91bnQpID0+IHtcbiAgICByZXR1cm4gYWRqdXN0Q2hhbm5lbChjb2xvciwgJ2wnLCAtYW1vdW50KTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGRhcmtlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/darken.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/invert.js": /*!***********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/invert.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* harmony import */ var _mix_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mix.js */ \"../../../node_modules/khroma/dist/methods/mix.js\");\n/* IMPORT */\n\n\n/* MAIN */\nconst invert = (color, weight = 100) => {\n const inverse = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color);\n inverse.r = 255 - inverse.r;\n inverse.g = 255 - inverse.g;\n inverse.b = 255 - inverse.b;\n return (0,_mix_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(inverse, color, weight);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (invert);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaW52ZXJ0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3NDO0FBQ1g7QUFDM0I7QUFDQTtBQUNBLG9CQUFvQiw2REFBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1EQUFHO0FBQ2Q7QUFDQTtBQUNBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9pbnZlcnQuanM/N2M0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vbWl4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGludmVydCA9IChjb2xvciwgd2VpZ2h0ID0gMTAwKSA9PiB7XG4gICAgY29uc3QgaW52ZXJzZSA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBpbnZlcnNlLnIgPSAyNTUgLSBpbnZlcnNlLnI7XG4gICAgaW52ZXJzZS5nID0gMjU1IC0gaW52ZXJzZS5nO1xuICAgIGludmVyc2UuYiA9IDI1NSAtIGludmVyc2UuYjtcbiAgICByZXR1cm4gbWl4KGludmVyc2UsIGNvbG9yLCB3ZWlnaHQpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgaW52ZXJ0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/invert.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/is_dark.js": /*!************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/is_dark.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _is_light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is_light.js */ \"../../../node_modules/khroma/dist/methods/is_light.js\");\n/* IMPORT */\n\n/* MAIN */\nconst isDark = (color) => {\n return !(0,_is_light_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(color);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isDark);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaXNfZGFyay5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ29DO0FBQ3BDO0FBQ0E7QUFDQSxZQUFZLHdEQUFPO0FBQ25CO0FBQ0E7QUFDQSxpRUFBZSxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaXNfZGFyay5qcz84MTBmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IGlzTGlnaHQgZnJvbSAnLi9pc19saWdodC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBpc0RhcmsgPSAoY29sb3IpID0+IHtcbiAgICByZXR1cm4gIWlzTGlnaHQoY29sb3IpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgaXNEYXJrO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/is_dark.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/is_light.js": /*!*************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/is_light.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _luminance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./luminance.js */ \"../../../node_modules/khroma/dist/methods/luminance.js\");\n/* IMPORT */\n\n/* MAIN */\nconst isLight = (color) => {\n return (0,_luminance_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(color) >= .5;\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isLight);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaXNfbGlnaHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUN1QztBQUN2QztBQUNBO0FBQ0EsV0FBVyx5REFBUztBQUNwQjtBQUNBO0FBQ0EsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2lzX2xpZ2h0LmpzPzQ0MTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgbHVtaW5hbmNlIGZyb20gJy4vbHVtaW5hbmNlLmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGlzTGlnaHQgPSAoY29sb3IpID0+IHtcbiAgICByZXR1cm4gbHVtaW5hbmNlKGNvbG9yKSA+PSAuNTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGlzTGlnaHQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/is_light.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/lighten.js": /*!************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/lighten.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjust_channel.js */ \"../../../node_modules/khroma/dist/methods/adjust_channel.js\");\n/* IMPORT */\n\n/* MAIN */\nconst lighten = (color, amount) => {\n return (0,_adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(color, 'l', amount);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lighten);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbGlnaHRlbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ2dEO0FBQ2hEO0FBQ0E7QUFDQSxXQUFXLDhEQUFhO0FBQ3hCO0FBQ0E7QUFDQSxpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbGlnaHRlbi5qcz81NDUwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIElNUE9SVCAqL1xuaW1wb3J0IGFkanVzdENoYW5uZWwgZnJvbSAnLi9hZGp1c3RfY2hhbm5lbC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBsaWdodGVuID0gKGNvbG9yLCBhbW91bnQpID0+IHtcbiAgICByZXR1cm4gYWRqdXN0Q2hhbm5lbChjb2xvciwgJ2wnLCBhbW91bnQpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgbGlnaHRlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/lighten.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/luminance.js": /*!**************************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/luminance.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* IMPORT */\n\n\n/* MAIN */\n//SOURCE: https://planetcalc.com/7779\nconst luminance = (color) => {\n const { r, g, b } = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color);\n const luminance = .2126 * _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.toLinear(r) + .7152 * _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.toLinear(g) + .0722 * _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].channel.toLinear(b);\n return _utils_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].lang.round(luminance);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (luminance);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbHVtaW5hbmNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ2tDO0FBQ0k7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVLEVBQUUsNkRBQVc7QUFDbkMsOEJBQThCLHdFQUFrQixjQUFjLHdFQUFrQixjQUFjLHdFQUFrQjtBQUNoSCxXQUFXLGtFQUFZO0FBQ3ZCO0FBQ0E7QUFDQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbHVtaW5hbmNlLmpzP2I3ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuLyogTUFJTiAqL1xuLy9TT1VSQ0U6IGh0dHBzOi8vcGxhbmV0Y2FsYy5jb20vNzc3OVxuY29uc3QgbHVtaW5hbmNlID0gKGNvbG9yKSA9PiB7XG4gICAgY29uc3QgeyByLCBnLCBiIH0gPSBDb2xvci5wYXJzZShjb2xvcik7XG4gICAgY29uc3QgbHVtaW5hbmNlID0gLjIxMjYgKiBfLmNoYW5uZWwudG9MaW5lYXIocikgKyAuNzE1MiAqIF8uY2hhbm5lbC50b0xpbmVhcihnKSArIC4wNzIyICogXy5jaGFubmVsLnRvTGluZWFyKGIpO1xuICAgIHJldHVybiBfLmxhbmcucm91bmQobHVtaW5hbmNlKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGx1bWluYW5jZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/luminance.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/mix.js": /*!********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/mix.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* harmony import */ var _rgba_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rgba.js */ \"../../../node_modules/khroma/dist/methods/rgba.js\");\n/* IMPORT */\n\n\n/* MAIN */\n//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756\nconst mix = (color1, color2, weight = 50) => {\n const { r: r1, g: g1, b: b1, a: a1 } = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color1);\n const { r: r2, g: g2, b: b2, a: a2 } = _color_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parse(color2);\n const weightScale = weight / 100;\n const weightNormalized = (weightScale * 2) - 1;\n const alphaDelta = a1 - a2;\n const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);\n const weight1 = (weight1combined + 1) / 2;\n const weight2 = 1 - weight1;\n const r = (r1 * weight1) + (r2 * weight2);\n const g = (g1 * weight1) + (g2 * weight2);\n const b = (b1 * weight1) + (b2 * weight2);\n const a = (a1 * weightScale) + (a2 * (1 - weightScale));\n return (0,_rgba_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(r, g, b, a);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mix);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbWl4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3NDO0FBQ1Q7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsWUFBWSw2QkFBNkIsRUFBRSw2REFBVztBQUN0RCxZQUFZLDZCQUE2QixFQUFFLDZEQUFXO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvREFBSTtBQUNmO0FBQ0E7QUFDQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvbWl4LmpzPzk2NTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuaW1wb3J0IHJnYmEgZnJvbSAnLi9yZ2JhLmpzJztcbi8qIE1BSU4gKi9cbi8vU09VUkNFOiBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9kYXJ0LXNhc3MvYmxvYi83NDU3ZDJlOWU3ZTYyM2Q5ODQ0ZmZkMDM3YTA3MGNmMzJkMzljMzQ4L2xpYi9zcmMvZnVuY3Rpb25zL2NvbG9yLmRhcnQjTDcxOC1MNzU2XG5jb25zdCBtaXggPSAoY29sb3IxLCBjb2xvcjIsIHdlaWdodCA9IDUwKSA9PiB7XG4gICAgY29uc3QgeyByOiByMSwgZzogZzEsIGI6IGIxLCBhOiBhMSB9ID0gQ29sb3IucGFyc2UoY29sb3IxKTtcbiAgICBjb25zdCB7IHI6IHIyLCBnOiBnMiwgYjogYjIsIGE6IGEyIH0gPSBDb2xvci5wYXJzZShjb2xvcjIpO1xuICAgIGNvbnN0IHdlaWdodFNjYWxlID0gd2VpZ2h0IC8gMTAwO1xuICAgIGNvbnN0IHdlaWdodE5vcm1hbGl6ZWQgPSAod2VpZ2h0U2NhbGUgKiAyKSAtIDE7XG4gICAgY29uc3QgYWxwaGFEZWx0YSA9IGExIC0gYTI7XG4gICAgY29uc3Qgd2VpZ2h0MWNvbWJpbmVkID0gKCh3ZWlnaHROb3JtYWxpemVkICogYWxwaGFEZWx0YSkgPT09IC0xKSA/IHdlaWdodE5vcm1hbGl6ZWQgOiAod2VpZ2h0Tm9ybWFsaXplZCArIGFscGhhRGVsdGEpIC8gKDEgKyB3ZWlnaHROb3JtYWxpemVkICogYWxwaGFEZWx0YSk7XG4gICAgY29uc3Qgd2VpZ2h0MSA9ICh3ZWlnaHQxY29tYmluZWQgKyAxKSAvIDI7XG4gICAgY29uc3Qgd2VpZ2h0MiA9IDEgLSB3ZWlnaHQxO1xuICAgIGNvbnN0IHIgPSAocjEgKiB3ZWlnaHQxKSArIChyMiAqIHdlaWdodDIpO1xuICAgIGNvbnN0IGcgPSAoZzEgKiB3ZWlnaHQxKSArIChnMiAqIHdlaWdodDIpO1xuICAgIGNvbnN0IGIgPSAoYjEgKiB3ZWlnaHQxKSArIChiMiAqIHdlaWdodDIpO1xuICAgIGNvbnN0IGEgPSAoYTEgKiB3ZWlnaHRTY2FsZSkgKyAoYTIgKiAoMSAtIHdlaWdodFNjYWxlKSk7XG4gICAgcmV0dXJuIHJnYmEociwgZywgYiwgYSk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBtaXg7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/mix.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/methods/rgba.js": /*!*********************************************************!*\ !*** ../../../node_modules/khroma/dist/methods/rgba.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _utils_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/index.js */ \"../../../node_modules/khroma/dist/utils/index.js\");\n/* harmony import */ var _channels_reusable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../channels/reusable.js */ \"../../../node_modules/khroma/dist/channels/reusable.js\");\n/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../color/index.js */ \"../../../node_modules/khroma/dist/color/index.js\");\n/* harmony import */ var _change_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./change.js */ \"../../../node_modules/khroma/dist/methods/change.js\");\n/* IMPORT */\n\n\n\n\n/* MAIN */\nconst rgba = (r, g, b = 0, a = 1) => {\n if (typeof r !== 'number')\n return (0,_change_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r, { a: g });\n const channels = _channels_reusable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set({\n r: _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.clamp.r(r),\n g: _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.clamp.g(g),\n b: _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.clamp.b(b),\n a: _utils_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].channel.clamp.a(a)\n });\n return _color_index_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].stringify(channels);\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (rgba);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvcmdiYS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ2tDO0FBQ3FCO0FBQ2pCO0FBQ0w7QUFDakM7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzREFBTSxNQUFNLE1BQU07QUFDakMscUJBQXFCLGlFQUFvQjtBQUN6QyxXQUFXLHVFQUFpQjtBQUM1QixXQUFXLHVFQUFpQjtBQUM1QixXQUFXLHVFQUFpQjtBQUM1QixXQUFXLHVFQUFpQjtBQUM1QixLQUFLO0FBQ0wsV0FBVyxpRUFBZTtBQUMxQjtBQUNBO0FBQ0EsaUVBQWUsSUFBSSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL3JnYmEuanM/Yjk3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDaGFubmVsc1JldXNhYmxlIGZyb20gJy4uL2NoYW5uZWxzL3JldXNhYmxlLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgY2hhbmdlIGZyb20gJy4vY2hhbmdlLmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IHJnYmEgPSAociwgZywgYiA9IDAsIGEgPSAxKSA9PiB7XG4gICAgaWYgKHR5cGVvZiByICE9PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIGNoYW5nZShyLCB7IGE6IGcgfSk7XG4gICAgY29uc3QgY2hhbm5lbHMgPSBDaGFubmVsc1JldXNhYmxlLnNldCh7XG4gICAgICAgIHI6IF8uY2hhbm5lbC5jbGFtcC5yKHIpLFxuICAgICAgICBnOiBfLmNoYW5uZWwuY2xhbXAuZyhnKSxcbiAgICAgICAgYjogXy5jaGFubmVsLmNsYW1wLmIoYiksXG4gICAgICAgIGE6IF8uY2hhbm5lbC5jbGFtcC5hKGEpXG4gICAgfSk7XG4gICAgcmV0dXJuIENvbG9yLnN0cmluZ2lmeShjaGFubmVscyk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCByZ2JhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/methods/rgba.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/utils/channel.js": /*!**********************************************************!*\ !*** ../../../node_modules/khroma/dist/utils/channel.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/* IMPORT */\n/* MAIN */\nconst Channel = {\n /* CLAMP */\n min: {\n r: 0,\n g: 0,\n b: 0,\n s: 0,\n l: 0,\n a: 0\n },\n max: {\n r: 255,\n g: 255,\n b: 255,\n h: 360,\n s: 100,\n l: 100,\n a: 1\n },\n clamp: {\n r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),\n g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),\n b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),\n h: (h) => h % 360,\n s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),\n l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),\n a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)\n },\n /* CONVERSION */\n //SOURCE: https://planetcalc.com/7779\n toLinear: (c) => {\n const n = c / 255;\n return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;\n },\n //SOURCE: https://gist.github.com/mjackson/5311256\n hue2rgb: (p, q, t) => {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n },\n hsl2rgb: ({ h, s, l }, channel) => {\n if (!s)\n return l * 2.55; // Achromatic\n h /= 360;\n s /= 100;\n l /= 100;\n const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);\n const p = 2 * l - q;\n switch (channel) {\n case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;\n case 'g': return Channel.hue2rgb(p, q, h) * 255;\n case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;\n }\n },\n rgb2hsl: ({ r, g, b }, channel) => {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n if (channel === 'l')\n return l * 100;\n if (max === min)\n return 0; // Achromatic\n const d = max - min;\n const s = (l > .5) ? d / (2 - max - min) : d / (max + min);\n if (channel === 's')\n return s * 100;\n switch (max) {\n case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;\n case g: return ((b - r) / d + 2) * 60;\n case b: return ((r - g) / d + 4) * 60;\n default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement\n }\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Channel);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2NoYW5uZWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2NoYW5uZWwuanM/MTk0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBJTVBPUlQgKi9cbi8qIE1BSU4gKi9cbmNvbnN0IENoYW5uZWwgPSB7XG4gICAgLyogQ0xBTVAgKi9cbiAgICBtaW46IHtcbiAgICAgICAgcjogMCxcbiAgICAgICAgZzogMCxcbiAgICAgICAgYjogMCxcbiAgICAgICAgczogMCxcbiAgICAgICAgbDogMCxcbiAgICAgICAgYTogMFxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICAgIHI6IDI1NSxcbiAgICAgICAgZzogMjU1LFxuICAgICAgICBiOiAyNTUsXG4gICAgICAgIGg6IDM2MCxcbiAgICAgICAgczogMTAwLFxuICAgICAgICBsOiAxMDAsXG4gICAgICAgIGE6IDFcbiAgICB9LFxuICAgIGNsYW1wOiB7XG4gICAgICAgIHI6IChyKSA9PiByID49IDI1NSA/IDI1NSA6IChyIDwgMCA/IDAgOiByKSxcbiAgICAgICAgZzogKGcpID0+IGcgPj0gMjU1ID8gMjU1IDogKGcgPCAwID8gMCA6IGcpLFxuICAgICAgICBiOiAoYikgPT4gYiA+PSAyNTUgPyAyNTUgOiAoYiA8IDAgPyAwIDogYiksXG4gICAgICAgIGg6IChoKSA9PiBoICUgMzYwLFxuICAgICAgICBzOiAocykgPT4gcyA+PSAxMDAgPyAxMDAgOiAocyA8IDAgPyAwIDogcyksXG4gICAgICAgIGw6IChsKSA9PiBsID49IDEwMCA/IDEwMCA6IChsIDwgMCA/IDAgOiBsKSxcbiAgICAgICAgYTogKGEpID0+IGEgPj0gMSA/IDEgOiAoYSA8IDAgPyAwIDogYSlcbiAgICB9LFxuICAgIC8qIENPTlZFUlNJT04gKi9cbiAgICAvL1NPVVJDRTogaHR0cHM6Ly9wbGFuZXRjYWxjLmNvbS83Nzc5XG4gICAgdG9MaW5lYXI6IChjKSA9PiB7XG4gICAgICAgIGNvbnN0IG4gPSBjIC8gMjU1O1xuICAgICAgICByZXR1cm4gYyA+IC4wMzkyOCA/IE1hdGgucG93KCgobiArIC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogbiAvIDEyLjkyO1xuICAgIH0sXG4gICAgLy9TT1VSQ0U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21qYWNrc29uLzUzMTEyNTZcbiAgICBodWUycmdiOiAocCwgcSwgdCkgPT4ge1xuICAgICAgICBpZiAodCA8IDApXG4gICAgICAgICAgICB0ICs9IDE7XG4gICAgICAgIGlmICh0ID4gMSlcbiAgICAgICAgICAgIHQgLT0gMTtcbiAgICAgICAgaWYgKHQgPCAxIC8gNilcbiAgICAgICAgICAgIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICBpZiAodCA8IDEgLyAyKVxuICAgICAgICAgICAgcmV0dXJuIHE7XG4gICAgICAgIGlmICh0IDwgMiAvIDMpXG4gICAgICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgaHNsMnJnYjogKHsgaCwgcywgbCB9LCBjaGFubmVsKSA9PiB7XG4gICAgICAgIGlmICghcylcbiAgICAgICAgICAgIHJldHVybiBsICogMi41NTsgLy8gQWNocm9tYXRpY1xuICAgICAgICBoIC89IDM2MDtcbiAgICAgICAgcyAvPSAxMDA7XG4gICAgICAgIGwgLz0gMTAwO1xuICAgICAgICBjb25zdCBxID0gKGwgPCAuNSkgPyBsICogKDEgKyBzKSA6IChsICsgcykgLSAobCAqIHMpO1xuICAgICAgICBjb25zdCBwID0gMiAqIGwgLSBxO1xuICAgICAgICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIGNhc2UgJ3InOiByZXR1cm4gQ2hhbm5lbC5odWUycmdiKHAsIHEsIGggKyAxIC8gMykgKiAyNTU7XG4gICAgICAgICAgICBjYXNlICdnJzogcmV0dXJuIENoYW5uZWwuaHVlMnJnYihwLCBxLCBoKSAqIDI1NTtcbiAgICAgICAgICAgIGNhc2UgJ2InOiByZXR1cm4gQ2hhbm5lbC5odWUycmdiKHAsIHEsIGggLSAxIC8gMykgKiAyNTU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJnYjJoc2w6ICh7IHIsIGcsIGIgfSwgY2hhbm5lbCkgPT4ge1xuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgICAgIGNvbnN0IGwgPSAobWF4ICsgbWluKSAvIDI7XG4gICAgICAgIGlmIChjaGFubmVsID09PSAnbCcpXG4gICAgICAgICAgICByZXR1cm4gbCAqIDEwMDtcbiAgICAgICAgaWYgKG1heCA9PT0gbWluKVxuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEFjaHJvbWF0aWNcbiAgICAgICAgY29uc3QgZCA9IG1heCAtIG1pbjtcbiAgICAgICAgY29uc3QgcyA9IChsID4gLjUpID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTtcbiAgICAgICAgaWYgKGNoYW5uZWwgPT09ICdzJylcbiAgICAgICAgICAgIHJldHVybiBzICogMTAwO1xuICAgICAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOiByZXR1cm4gKChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApKSAqIDYwO1xuICAgICAgICAgICAgY2FzZSBnOiByZXR1cm4gKChiIC0gcikgLyBkICsgMikgKiA2MDtcbiAgICAgICAgICAgIGNhc2UgYjogcmV0dXJuICgociAtIGcpIC8gZCArIDQpICogNjA7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gLTE7IC8vVFNDOiBUeXBlU2NyaXB0IGlzIHN0dXBpZCBhbmQgY29tcGxhaW5zIGlmIHRoZXJlIGlzbid0IHRoaXMgdXNlbGVzcyBkZWZhdWx0IHN0YXRlbWVudFxuICAgICAgICB9XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/utils/channel.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/utils/index.js": /*!********************************************************!*\ !*** ../../../node_modules/khroma/dist/utils/index.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _channel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./channel.js */ \"../../../node_modules/khroma/dist/utils/channel.js\");\n/* harmony import */ var _lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lang.js */ \"../../../node_modules/khroma/dist/utils/lang.js\");\n/* harmony import */ var _unit_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unit.js */ \"../../../node_modules/khroma/dist/utils/unit.js\");\n/* IMPORT */\n\n\n\n/* MAIN */\nconst Utils = {\n channel: _channel_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n lang: _lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n unit: _unit_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Utils);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNtQztBQUNOO0FBQ0E7QUFDN0I7QUFDQTtBQUNBLFdBQVc7QUFDWCxRQUFRO0FBQ1IsUUFBUTtBQUNSO0FBQ0E7QUFDQSxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2luZGV4LmpzPzAwMjUiXSwic291cmNlc0NvbnRlbnQiOlsiLyogSU1QT1JUICovXG5pbXBvcnQgY2hhbm5lbCBmcm9tICcuL2NoYW5uZWwuanMnO1xuaW1wb3J0IGxhbmcgZnJvbSAnLi9sYW5nLmpzJztcbmltcG9ydCB1bml0IGZyb20gJy4vdW5pdC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBVdGlscyA9IHtcbiAgICBjaGFubmVsLFxuICAgIGxhbmcsXG4gICAgdW5pdFxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVXRpbHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/utils/index.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/utils/lang.js": /*!*******************************************************!*\ !*** ../../../node_modules/khroma/dist/utils/lang.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/* MAIN */\nconst Lang = {\n /* API */\n clamp: (number, lower, upper) => {\n if (lower > upper)\n return Math.min(lower, Math.max(upper, number));\n return Math.min(upper, Math.max(lower, number));\n },\n round: (number) => {\n return Math.round(number * 10000000000) / 10000000000;\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Lang);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2xhbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL2xhbmcuanM/NDUwOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBNQUlOICovXG5jb25zdCBMYW5nID0ge1xuICAgIC8qIEFQSSAqL1xuICAgIGNsYW1wOiAobnVtYmVyLCBsb3dlciwgdXBwZXIpID0+IHtcbiAgICAgICAgaWYgKGxvd2VyID4gdXBwZXIpXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obG93ZXIsIE1hdGgubWF4KHVwcGVyLCBudW1iZXIpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgbnVtYmVyKSk7XG4gICAgfSxcbiAgICByb3VuZDogKG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiAxMDAwMDAwMDAwMCkgLyAxMDAwMDAwMDAwMDtcbiAgICB9XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBMYW5nO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/utils/lang.js\n"); /***/ }), /***/ "../../../node_modules/khroma/dist/utils/unit.js": /*!*******************************************************!*\ !*** ../../../node_modules/khroma/dist/utils/unit.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/* MAIN */\nconst Unit = {\n /* API */\n dec2hex: (dec) => {\n const hex = Math.round(dec).toString(16);\n return hex.length > 1 ? hex : `0${hex}`;\n }\n};\n/* EXPORT */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Unit);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL3VuaXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsSUFBSTtBQUM5QztBQUNBO0FBQ0E7QUFDQSxpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L3V0aWxzL3VuaXQuanM/ZGZiNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBNQUlOICovXG5jb25zdCBVbml0ID0ge1xuICAgIC8qIEFQSSAqL1xuICAgIGRlYzJoZXg6IChkZWMpID0+IHtcbiAgICAgICAgY29uc3QgaGV4ID0gTWF0aC5yb3VuZChkZWMpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggPiAxID8gaGV4IDogYDAke2hleH1gO1xuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFVuaXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/khroma/dist/utils/unit.js\n"); /***/ }), /***/ "../../../node_modules/kleur/index.mjs": /*!*********************************************!*\ !*** ../../../node_modules/kleur/index.mjs ***! \*********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.17.6\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}) || 0);\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ($);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tsZXVyL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBLElBQUksbURBQW1ELEVBQUUsc3FDQUFXLElBQUksQ0FBRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQixpQkFBaUIsTUFBTTtBQUN2Qiw2QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9rbGV1ci9pbmRleC5tanM/MTcxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmxldCBGT1JDRV9DT0xPUiwgTk9ERV9ESVNBQkxFX0NPTE9SUywgTk9fQ09MT1IsIFRFUk0sIGlzVFRZPXRydWU7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG5cdCh7IEZPUkNFX0NPTE9SLCBOT0RFX0RJU0FCTEVfQ09MT1JTLCBOT19DT0xPUiwgVEVSTSB9ID0gcHJvY2Vzcy5lbnYgfHwge30pO1xuXHRpc1RUWSA9IHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xufVxuXG5jb25zdCAkID0ge1xuXHRlbmFibGVkOiAhTk9ERV9ESVNBQkxFX0NPTE9SUyAmJiBOT19DT0xPUiA9PSBudWxsICYmIFRFUk0gIT09ICdkdW1iJyAmJiAoXG5cdFx0Rk9SQ0VfQ09MT1IgIT0gbnVsbCAmJiBGT1JDRV9DT0xPUiAhPT0gJzAnIHx8IGlzVFRZXG5cdCksXG5cblx0Ly8gbW9kaWZpZXJzXG5cdHJlc2V0OiBpbml0KDAsIDApLFxuXHRib2xkOiBpbml0KDEsIDIyKSxcblx0ZGltOiBpbml0KDIsIDIyKSxcblx0aXRhbGljOiBpbml0KDMsIDIzKSxcblx0dW5kZXJsaW5lOiBpbml0KDQsIDI0KSxcblx0aW52ZXJzZTogaW5pdCg3LCAyNyksXG5cdGhpZGRlbjogaW5pdCg4LCAyOCksXG5cdHN0cmlrZXRocm91Z2g6IGluaXQoOSwgMjkpLFxuXG5cdC8vIGNvbG9yc1xuXHRibGFjazogaW5pdCgzMCwgMzkpLFxuXHRyZWQ6IGluaXQoMzEsIDM5KSxcblx0Z3JlZW46IGluaXQoMzIsIDM5KSxcblx0eWVsbG93OiBpbml0KDMzLCAzOSksXG5cdGJsdWU6IGluaXQoMzQsIDM5KSxcblx0bWFnZW50YTogaW5pdCgzNSwgMzkpLFxuXHRjeWFuOiBpbml0KDM2LCAzOSksXG5cdHdoaXRlOiBpbml0KDM3LCAzOSksXG5cdGdyYXk6IGluaXQoOTAsIDM5KSxcblx0Z3JleTogaW5pdCg5MCwgMzkpLFxuXG5cdC8vIGJhY2tncm91bmQgY29sb3JzXG5cdGJnQmxhY2s6IGluaXQoNDAsIDQ5KSxcblx0YmdSZWQ6IGluaXQoNDEsIDQ5KSxcblx0YmdHcmVlbjogaW5pdCg0MiwgNDkpLFxuXHRiZ1llbGxvdzogaW5pdCg0MywgNDkpLFxuXHRiZ0JsdWU6IGluaXQoNDQsIDQ5KSxcblx0YmdNYWdlbnRhOiBpbml0KDQ1LCA0OSksXG5cdGJnQ3lhbjogaW5pdCg0NiwgNDkpLFxuXHRiZ1doaXRlOiBpbml0KDQ3LCA0OSlcbn07XG5cbmZ1bmN0aW9uIHJ1bihhcnIsIHN0cikge1xuXHRsZXQgaT0wLCB0bXAsIGJlZz0nJywgZW5kPScnO1xuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdHRtcCA9IGFycltpXTtcblx0XHRiZWcgKz0gdG1wLm9wZW47XG5cdFx0ZW5kICs9IHRtcC5jbG9zZTtcblx0XHRpZiAoISF+c3RyLmluZGV4T2YodG1wLmNsb3NlKSkge1xuXHRcdFx0c3RyID0gc3RyLnJlcGxhY2UodG1wLnJneCwgdG1wLmNsb3NlICsgdG1wLm9wZW4pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmVnICsgc3RyICsgZW5kO1xufVxuXG5mdW5jdGlvbiBjaGFpbihoYXMsIGtleXMpIHtcblx0bGV0IGN0eCA9IHsgaGFzLCBrZXlzIH07XG5cblx0Y3R4LnJlc2V0ID0gJC5yZXNldC5iaW5kKGN0eCk7XG5cdGN0eC5ib2xkID0gJC5ib2xkLmJpbmQoY3R4KTtcblx0Y3R4LmRpbSA9ICQuZGltLmJpbmQoY3R4KTtcblx0Y3R4Lml0YWxpYyA9ICQuaXRhbGljLmJpbmQoY3R4KTtcblx0Y3R4LnVuZGVybGluZSA9ICQudW5kZXJsaW5lLmJpbmQoY3R4KTtcblx0Y3R4LmludmVyc2UgPSAkLmludmVyc2UuYmluZChjdHgpO1xuXHRjdHguaGlkZGVuID0gJC5oaWRkZW4uYmluZChjdHgpO1xuXHRjdHguc3RyaWtldGhyb3VnaCA9ICQuc3RyaWtldGhyb3VnaC5iaW5kKGN0eCk7XG5cblx0Y3R4LmJsYWNrID0gJC5ibGFjay5iaW5kKGN0eCk7XG5cdGN0eC5yZWQgPSAkLnJlZC5iaW5kKGN0eCk7XG5cdGN0eC5ncmVlbiA9ICQuZ3JlZW4uYmluZChjdHgpO1xuXHRjdHgueWVsbG93ID0gJC55ZWxsb3cuYmluZChjdHgpO1xuXHRjdHguYmx1ZSA9ICQuYmx1ZS5iaW5kKGN0eCk7XG5cdGN0eC5tYWdlbnRhID0gJC5tYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmN5YW4gPSAkLmN5YW4uYmluZChjdHgpO1xuXHRjdHgud2hpdGUgPSAkLndoaXRlLmJpbmQoY3R4KTtcblx0Y3R4LmdyYXkgPSAkLmdyYXkuYmluZChjdHgpO1xuXHRjdHguZ3JleSA9ICQuZ3JleS5iaW5kKGN0eCk7XG5cblx0Y3R4LmJnQmxhY2sgPSAkLmJnQmxhY2suYmluZChjdHgpO1xuXHRjdHguYmdSZWQgPSAkLmJnUmVkLmJpbmQoY3R4KTtcblx0Y3R4LmJnR3JlZW4gPSAkLmJnR3JlZW4uYmluZChjdHgpO1xuXHRjdHguYmdZZWxsb3cgPSAkLmJnWWVsbG93LmJpbmQoY3R4KTtcblx0Y3R4LmJnQmx1ZSA9ICQuYmdCbHVlLmJpbmQoY3R4KTtcblx0Y3R4LmJnTWFnZW50YSA9ICQuYmdNYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmJnQ3lhbiA9ICQuYmdDeWFuLmJpbmQoY3R4KTtcblx0Y3R4LmJnV2hpdGUgPSAkLmJnV2hpdGUuYmluZChjdHgpO1xuXG5cdHJldHVybiBjdHg7XG59XG5cbmZ1bmN0aW9uIGluaXQob3BlbiwgY2xvc2UpIHtcblx0bGV0IGJsayA9IHtcblx0XHRvcGVuOiBgXFx4MWJbJHtvcGVufW1gLFxuXHRcdGNsb3NlOiBgXFx4MWJbJHtjbG9zZX1tYCxcblx0XHRyZ3g6IG5ldyBSZWdFeHAoYFxcXFx4MWJcXFxcWyR7Y2xvc2V9bWAsICdnJylcblx0fTtcblx0cmV0dXJuIGZ1bmN0aW9uICh0eHQpIHtcblx0XHRpZiAodGhpcyAhPT0gdm9pZCAwICYmIHRoaXMuaGFzICE9PSB2b2lkIDApIHtcblx0XHRcdCEhfnRoaXMuaGFzLmluZGV4T2Yob3BlbikgfHwgKHRoaXMuaGFzLnB1c2gob3BlbiksdGhpcy5rZXlzLnB1c2goYmxrKSk7XG5cdFx0XHRyZXR1cm4gdHh0ID09PSB2b2lkIDAgPyB0aGlzIDogJC5lbmFibGVkID8gcnVuKHRoaXMua2V5cywgdHh0KycnKSA6IHR4dCsnJztcblx0XHR9XG5cdFx0cmV0dXJuIHR4dCA9PT0gdm9pZCAwID8gY2hhaW4oW29wZW5dLCBbYmxrXSkgOiAkLmVuYWJsZWQgPyBydW4oW2Jsa10sIHR4dCsnJykgOiB0eHQrJyc7XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/kleur/index.mjs\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_DataView.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_DataView.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n\n/* Built-in method references that are verified to be native. */\nvar DataView = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'DataView');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DataView);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdDO0FBQ1Y7O0FBRTlCO0FBQ0EsZUFBZSx5REFBUyxDQUFDLGdEQUFJOztBQUU3QixpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanM/MzA2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRhVmlldztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_DataView.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Hash.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/_Hash.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _hashClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_hashClear.js */ \"../../../node_modules/lodash-es/_hashClear.js\");\n/* harmony import */ var _hashDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_hashDelete.js */ \"../../../node_modules/lodash-es/_hashDelete.js\");\n/* harmony import */ var _hashGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_hashGet.js */ \"../../../node_modules/lodash-es/_hashGet.js\");\n/* harmony import */ var _hashHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_hashHas.js */ \"../../../node_modules/lodash-es/_hashHas.js\");\n/* harmony import */ var _hashSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_hashSet.js */ \"../../../node_modules/lodash-es/_hashSet.js\");\n\n\n\n\n\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = _hashClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nHash.prototype['delete'] = _hashDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nHash.prototype.get = _hashGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nHash.prototype.has = _hashHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nHash.prototype.set = _hashSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Hash);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fSGFzaC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7QUFDRTtBQUNOO0FBQ0E7QUFDQTs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIscURBQVM7QUFDaEMsMkJBQTJCLHNEQUFVO0FBQ3JDLHFCQUFxQixtREFBTztBQUM1QixxQkFBcUIsbURBQU87QUFDNUIscUJBQXFCLG1EQUFPOztBQUU1QixpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fSGFzaC5qcz8wOTNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoYXNoQ2xlYXIgZnJvbSAnLi9faGFzaENsZWFyLmpzJztcbmltcG9ydCBoYXNoRGVsZXRlIGZyb20gJy4vX2hhc2hEZWxldGUuanMnO1xuaW1wb3J0IGhhc2hHZXQgZnJvbSAnLi9faGFzaEdldC5qcyc7XG5pbXBvcnQgaGFzaEhhcyBmcm9tICcuL19oYXNoSGFzLmpzJztcbmltcG9ydCBoYXNoU2V0IGZyb20gJy4vX2hhc2hTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuZXhwb3J0IGRlZmF1bHQgSGFzaDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Hash.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_ListCache.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_ListCache.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _listCacheClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_listCacheClear.js */ \"../../../node_modules/lodash-es/_listCacheClear.js\");\n/* harmony import */ var _listCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_listCacheDelete.js */ \"../../../node_modules/lodash-es/_listCacheDelete.js\");\n/* harmony import */ var _listCacheGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_listCacheGet.js */ \"../../../node_modules/lodash-es/_listCacheGet.js\");\n/* harmony import */ var _listCacheHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_listCacheHas.js */ \"../../../node_modules/lodash-es/_listCacheHas.js\");\n/* harmony import */ var _listCacheSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_listCacheSet.js */ \"../../../node_modules/lodash-es/_listCacheSet.js\");\n\n\n\n\n\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = _listCacheClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nListCache.prototype['delete'] = _listCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nListCache.prototype.get = _listCacheGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nListCache.prototype.has = _listCacheHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nListCache.prototype.set = _listCacheSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListCache);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTGlzdENhY2hlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFrRDtBQUNFO0FBQ047QUFDQTtBQUNBOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QiwwREFBYztBQUMxQyxnQ0FBZ0MsMkRBQWU7QUFDL0MsMEJBQTBCLHdEQUFZO0FBQ3RDLDBCQUEwQix3REFBWTtBQUN0QywwQkFBMEIsd0RBQVk7O0FBRXRDLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19MaXN0Q2FjaGUuanM/NTg0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbGlzdENhY2hlQ2xlYXIgZnJvbSAnLi9fbGlzdENhY2hlQ2xlYXIuanMnO1xuaW1wb3J0IGxpc3RDYWNoZURlbGV0ZSBmcm9tICcuL19saXN0Q2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IGxpc3RDYWNoZUdldCBmcm9tICcuL19saXN0Q2FjaGVHZXQuanMnO1xuaW1wb3J0IGxpc3RDYWNoZUhhcyBmcm9tICcuL19saXN0Q2FjaGVIYXMuanMnO1xuaW1wb3J0IGxpc3RDYWNoZVNldCBmcm9tICcuL19saXN0Q2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RDYWNoZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_ListCache.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Map.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/_Map.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n\n/* Built-in method references that are verified to be native. */\nvar Map = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Map');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Map);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF3QztBQUNWOztBQUU5QjtBQUNBLFVBQVUseURBQVMsQ0FBQyxnREFBSTs7QUFFeEIsaUVBQWUsR0FBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcz9hMWRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Map.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_MapCache.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_MapCache.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _mapCacheClear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_mapCacheClear.js */ \"../../../node_modules/lodash-es/_mapCacheClear.js\");\n/* harmony import */ var _mapCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_mapCacheDelete.js */ \"../../../node_modules/lodash-es/_mapCacheDelete.js\");\n/* harmony import */ var _mapCacheGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_mapCacheGet.js */ \"../../../node_modules/lodash-es/_mapCacheGet.js\");\n/* harmony import */ var _mapCacheHas_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_mapCacheHas.js */ \"../../../node_modules/lodash-es/_mapCacheHas.js\");\n/* harmony import */ var _mapCacheSet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_mapCacheSet.js */ \"../../../node_modules/lodash-es/_mapCacheSet.js\");\n\n\n\n\n\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = _mapCacheClear_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\nMapCache.prototype['delete'] = _mapCacheDelete_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nMapCache.prototype.get = _mapCacheGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nMapCache.prototype.has = _mapCacheHas_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nMapCache.prototype.set = _mapCacheSet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapCache);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTWFwQ2FjaGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWdEO0FBQ0U7QUFDTjtBQUNBO0FBQ0E7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLHlEQUFhO0FBQ3hDLCtCQUErQiwwREFBYztBQUM3Qyx5QkFBeUIsdURBQVc7QUFDcEMseUJBQXlCLHVEQUFXO0FBQ3BDLHlCQUF5Qix1REFBVzs7QUFFcEMsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcENhY2hlLmpzP2FjYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1hcENhY2hlQ2xlYXIgZnJvbSAnLi9fbWFwQ2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVEZWxldGUgZnJvbSAnLi9fbWFwQ2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IG1hcENhY2hlR2V0IGZyb20gJy4vX21hcENhY2hlR2V0LmpzJztcbmltcG9ydCBtYXBDYWNoZUhhcyBmcm9tICcuL19tYXBDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVTZXQgZnJvbSAnLi9fbWFwQ2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTWFwQ2FjaGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_MapCache.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Promise.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_Promise.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n\n/* Built-in method references that are verified to be native. */\nvar Promise = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Promise');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Promise);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fUHJvbWlzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7QUFDVjs7QUFFOUI7QUFDQSxjQUFjLHlEQUFTLENBQUMsZ0RBQUk7O0FBRTVCLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19Qcm9taXNlLmpzP2RhYmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Promise.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Set.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/_Set.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n\n/* Built-in method references that are verified to be native. */\nvar Set = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'Set');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Set);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF3QztBQUNWOztBQUU5QjtBQUNBLFVBQVUseURBQVMsQ0FBQyxnREFBSTs7QUFFeEIsaUVBQWUsR0FBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldC5qcz9kNzE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxuZXhwb3J0IGRlZmF1bHQgU2V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Set.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_SetCache.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_SetCache.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _MapCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_MapCache.js */ \"../../../node_modules/lodash-es/_MapCache.js\");\n/* harmony import */ var _setCacheAdd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_setCacheAdd.js */ \"../../../node_modules/lodash-es/_setCacheAdd.js\");\n/* harmony import */ var _setCacheHas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_setCacheHas.js */ \"../../../node_modules/lodash-es/_setCacheHas.js\");\n\n\n\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = _setCacheAdd_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nSetCache.prototype.has = _setCacheHas_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SetCache);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0Q2FjaGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFzQztBQUNNO0FBQ0E7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isb0RBQVE7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQsdURBQVc7QUFDOUQseUJBQXlCLHVEQUFXOztBQUVwQyxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0Q2FjaGUuanM/MjJhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuaW1wb3J0IHNldENhY2hlQWRkIGZyb20gJy4vX3NldENhY2hlQWRkLmpzJztcbmltcG9ydCBzZXRDYWNoZUhhcyBmcm9tICcuL19zZXRDYWNoZUhhcy5qcyc7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuZXhwb3J0IGRlZmF1bHQgU2V0Q2FjaGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_SetCache.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Stack.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/_Stack.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../../../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _stackClear_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_stackClear.js */ \"../../../node_modules/lodash-es/_stackClear.js\");\n/* harmony import */ var _stackDelete_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_stackDelete.js */ \"../../../node_modules/lodash-es/_stackDelete.js\");\n/* harmony import */ var _stackGet_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_stackGet.js */ \"../../../node_modules/lodash-es/_stackGet.js\");\n/* harmony import */ var _stackHas_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_stackHas.js */ \"../../../node_modules/lodash-es/_stackHas.js\");\n/* harmony import */ var _stackSet_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_stackSet.js */ \"../../../node_modules/lodash-es/_stackSet.js\");\n\n\n\n\n\n\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = _stackClear_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\nStack.prototype['delete'] = _stackDelete_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nStack.prototype.get = _stackGet_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nStack.prototype.has = _stackHas_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nStack.prototype.set = _stackSet_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Stack);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3RhY2suanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF3QztBQUNFO0FBQ0U7QUFDTjtBQUNBO0FBQ0E7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBLGlDQUFpQyxxREFBUztBQUMxQztBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLHNEQUFVO0FBQ2xDLDRCQUE0Qix1REFBVztBQUN2QyxzQkFBc0Isb0RBQVE7QUFDOUIsc0JBQXNCLG9EQUFRO0FBQzlCLHNCQUFzQixvREFBUTs7QUFFOUIsaUVBQWUsS0FBSyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzP2Y5NDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuaW1wb3J0IHN0YWNrQ2xlYXIgZnJvbSAnLi9fc3RhY2tDbGVhci5qcyc7XG5pbXBvcnQgc3RhY2tEZWxldGUgZnJvbSAnLi9fc3RhY2tEZWxldGUuanMnO1xuaW1wb3J0IHN0YWNrR2V0IGZyb20gJy4vX3N0YWNrR2V0LmpzJztcbmltcG9ydCBzdGFja0hhcyBmcm9tICcuL19zdGFja0hhcy5qcyc7XG5pbXBvcnQgc3RhY2tTZXQgZnJvbSAnLi9fc3RhY2tTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbmV4cG9ydCBkZWZhdWx0IFN0YWNrO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Stack.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Symbol.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/_Symbol.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n/** Built-in value references. */\nvar Symbol = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Symbol;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Symbol);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThCOztBQUU5QjtBQUNBLGFBQWEsdURBQVc7O0FBRXhCLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanM/Y2I3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Symbol.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_Uint8Array.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_Uint8Array.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n/** Built-in value references. */\nvar Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Uint8Array;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fVWludDhBcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qjs7QUFFOUI7QUFDQSxpQkFBaUIsMkRBQWU7O0FBRWhDLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzPzQwMTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_Uint8Array.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_WeakMap.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_WeakMap.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_root_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], 'WeakMap');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeakMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fV2Vha01hcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7QUFDVjs7QUFFOUI7QUFDQSxjQUFjLHlEQUFTLENBQUMsZ0RBQUk7O0FBRTVCLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19XZWFrTWFwLmpzPzBkMTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_WeakMap.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_apply.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/_apply.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (apply);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXBwbHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXBwbHkuanM/MTdkZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_apply.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayEach.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayEach.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlFYWNoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5RWFjaC5qcz80ZDk0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlFYWNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayEach.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayFilter.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayFilter.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanM/OTE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RmlsdGVyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayFilter.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayIncludes.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayIncludes.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIndexOf.js */ \"../../../node_modules/lodash-es/_baseIndexOf.js\");\n\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && (0,_baseIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, value, 0) > -1;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayIncludes);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlJbmNsdWRlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDJEQUFXO0FBQ2hDOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUluY2x1ZGVzLmpzP2RhN2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlJbmNsdWRlcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayIncludes.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayIncludesWith.js": /*!*************************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayIncludesWith.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayIncludesWith);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlJbmNsdWRlc1dpdGguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsR0FBRztBQUNkLFdBQVcsVUFBVTtBQUNyQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsaUJBQWlCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlJbmNsdWRlc1dpdGguanM/YTRjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUluY2x1ZGVzV2l0aDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayIncludesWith.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayLikeKeys.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayLikeKeys.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseTimes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_baseTimes.js */ \"../../../node_modules/lodash-es/_baseTimes.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArguments.js */ \"../../../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_isIndex.js */ \"../../../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isTypedArray.js */ \"../../../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value),\n isArg = !isArr && (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value),\n isBuff = !isArr && !isArg && (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value),\n isType = !isArr && !isArg && !isBuff && (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? (0,_baseTimes_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayLikeKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlMaWtlS2V5cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXdDO0FBQ0c7QUFDUjtBQUNFO0FBQ0Q7QUFDUzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsY0FBYyx1REFBTztBQUNyQix3QkFBd0IsMkRBQVc7QUFDbkMsbUNBQW1DLHdEQUFRO0FBQzNDLDhDQUE4Qyw0REFBWTtBQUMxRDtBQUNBLDZCQUE2Qix5REFBUztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzPzA0N2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayLikeKeys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayMap.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayMap.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzPzRkYmUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayMap.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayPush.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayPush.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzPzIxZGYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVB1c2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayPush.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arrayReduce.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_arrayReduce.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayReduce);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlSZWR1Y2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsR0FBRztBQUNkLFdBQVcsU0FBUztBQUNwQjtBQUNBLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVJlZHVjZS5qcz82MTEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlSZWR1Y2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arrayReduce.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_arraySome.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_arraySome.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arraySome);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzPzQ5NjUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlTb21lO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_arraySome.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_asciiSize.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_asciiSize.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseProperty.js */ \"../../../node_modules/lodash-es/_baseProperty.js\");\n\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = (0,_baseProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('length');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (asciiSize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNjaWlTaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQSxnQkFBZ0IsNERBQVk7O0FBRTVCLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc2NpaVNpemUuanM/YWMxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVByb3BlcnR5IGZyb20gJy4vX2Jhc2VQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAqL1xudmFyIGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzY2lpU2l6ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_asciiSize.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_assignMergeValue.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/_assignMergeValue.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseAssignValue.js */ \"../../../node_modules/lodash-es/_baseAssignValue.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n\n\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !(0,_eq_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object[key], value)) ||\n (value === undefined && !(key in object))) {\n (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key, value);\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignMergeValue);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduTWVyZ2VWYWx1ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFDM0I7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQSwrQkFBK0Isa0RBQUU7QUFDakM7QUFDQSxJQUFJLCtEQUFlO0FBQ25CO0FBQ0E7O0FBRUEsaUVBQWUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduTWVyZ2VWYWx1ZS5qcz9iNmZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduTWVyZ2VWYWx1ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_assignMergeValue.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_assignValue.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_assignValue.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseAssignValue.js */ \"../../../node_modules/lodash-es/_baseAssignValue.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(objValue, value)) ||\n (value === undefined && !(key in object))) {\n (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key, value);\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9EO0FBQzNCOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsa0RBQUU7QUFDOUM7QUFDQSxJQUFJLCtEQUFlO0FBQ25CO0FBQ0E7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzPzJlZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_assignValue.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_assocIndexOf.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_assocIndexOf.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if ((0,_eq_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assocIndexOf);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzb2NJbmRleE9mLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtEQUFFO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzb2NJbmRleE9mLmpzPzJmMjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NvY0luZGV4T2Y7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_assocIndexOf.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseAssign.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseAssign.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _copyObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_copyObject.js */ \"../../../node_modules/lodash-es/_copyObject.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && (0,_copyObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, (0,_keys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(source), object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssign);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMEM7QUFDYjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxtQkFBbUIsMERBQVUsU0FBUyxvREFBSTtBQUMxQzs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnbi5qcz81NmQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseAssign.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseAssignIn.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseAssignIn.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _copyObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_copyObject.js */ \"../../../node_modules/lodash-es/_copyObject.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && (0,_copyObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(source), object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnbkluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQztBQUNUOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLG1CQUFtQiwwREFBVSxTQUFTLHNEQUFNO0FBQzVDOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduSW4uanM/YzIwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25JbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseAssignIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseAssignValue.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseAssignValue.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defineProperty.js */ \"../../../node_modules/lodash-es/_defineProperty.js\");\n\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0EsNEJBQTRCLDBEQUFjO0FBQzFDLElBQUksOERBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzP2ZmM2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseAssignValue.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseClone.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseClone.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Stack_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_Stack.js */ \"../../../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./_arrayEach.js */ \"../../../node_modules/lodash-es/_arrayEach.js\");\n/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./_assignValue.js */ \"../../../node_modules/lodash-es/_assignValue.js\");\n/* harmony import */ var _baseAssign_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_baseAssign.js */ \"../../../node_modules/lodash-es/_baseAssign.js\");\n/* harmony import */ var _baseAssignIn_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_baseAssignIn.js */ \"../../../node_modules/lodash-es/_baseAssignIn.js\");\n/* harmony import */ var _cloneBuffer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_cloneBuffer.js */ \"../../../node_modules/lodash-es/_cloneBuffer.js\");\n/* harmony import */ var _copyArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_copyArray.js */ \"../../../node_modules/lodash-es/_copyArray.js\");\n/* harmony import */ var _copySymbols_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_copySymbols.js */ \"../../../node_modules/lodash-es/_copySymbols.js\");\n/* harmony import */ var _copySymbolsIn_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_copySymbolsIn.js */ \"../../../node_modules/lodash-es/_copySymbolsIn.js\");\n/* harmony import */ var _getAllKeys_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./_getAllKeys.js */ \"../../../node_modules/lodash-es/_getAllKeys.js\");\n/* harmony import */ var _getAllKeysIn_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./_getAllKeysIn.js */ \"../../../node_modules/lodash-es/_getAllKeysIn.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _initCloneArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_initCloneArray.js */ \"../../../node_modules/lodash-es/_initCloneArray.js\");\n/* harmony import */ var _initCloneByTag_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_initCloneByTag.js */ \"../../../node_modules/lodash-es/_initCloneByTag.js\");\n/* harmony import */ var _initCloneObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_initCloneObject.js */ \"../../../node_modules/lodash-es/_initCloneObject.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isMap_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./isMap.js */ \"../../../node_modules/lodash-es/isMap.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isSet_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./isSet.js */ \"../../../node_modules/lodash-es/isSet.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return value;\n }\n var isArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n if (isArr) {\n result = (0,_initCloneArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n if (!isDeep) {\n return (0,_copyArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value, result);\n }\n } else {\n var tag = (0,_getTag_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if ((0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value)) {\n return (0,_cloneBuffer_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : (0,_initCloneObject_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(value);\n if (!isDeep) {\n return isFlat\n ? (0,_copySymbolsIn_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(value, (0,_baseAssignIn_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(result, value))\n : (0,_copySymbols_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(value, (0,_baseAssign_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = (0,_initCloneByTag_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if ((0,_isSet_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if ((0,_isMap_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? _getAllKeysIn_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"] : _getAllKeys_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"])\n : (isFlat ? _keysIn_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"] : _keys_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]);\n\n var props = isArr ? undefined : keysFunc(value);\n (0,_arrayEach_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"])(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_21__[\"default\"])(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseClone);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsb25lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWdDO0FBQ1E7QUFDSTtBQUNGO0FBQ0k7QUFDRjtBQUNKO0FBQ0k7QUFDSTtBQUNOO0FBQ0k7QUFDWjtBQUNnQjtBQUNBO0FBQ0U7QUFDakI7QUFDRTtBQUNOO0FBQ007QUFDTjtBQUNGO0FBQ0k7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyx3REFBUTtBQUNmO0FBQ0E7QUFDQSxjQUFjLHVEQUFPO0FBQ3JCO0FBQ0EsYUFBYSw4REFBYztBQUMzQjtBQUNBLGFBQWEseURBQVM7QUFDdEI7QUFDQSxJQUFJO0FBQ0osY0FBYyxzREFBTTtBQUNwQjs7QUFFQSxRQUFRLHdEQUFRO0FBQ2hCLGFBQWEsMkRBQVc7QUFDeEI7QUFDQTtBQUNBLHVDQUF1QyxFQUFFLCtEQUFlO0FBQ3hEO0FBQ0E7QUFDQSxZQUFZLDZEQUFhLFFBQVEsNERBQVk7QUFDN0MsWUFBWSw0REFBVyxRQUFRLDJEQUFVO0FBQ3pDO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0RBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtEQUFLO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxzREFBSztBQUNYO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSSxTQUFTLHNEQUFLO0FBQ2xCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxnQkFBZ0IseURBQVksR0FBRyx1REFBVTtBQUN6QyxnQkFBZ0IsbURBQU0sR0FBRyxpREFBSTs7QUFFN0I7QUFDQSxFQUFFLDBEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksNERBQVc7QUFDZixHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsb25lLmpzP2Y1NTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbiBmcm9tICcuL19iYXNlQXNzaWduLmpzJztcbmltcG9ydCBiYXNlQXNzaWduSW4gZnJvbSAnLi9fYmFzZUFzc2lnbkluLmpzJztcbmltcG9ydCBjbG9uZUJ1ZmZlciBmcm9tICcuL19jbG9uZUJ1ZmZlci5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgY29weVN5bWJvbHMgZnJvbSAnLi9fY29weVN5bWJvbHMuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzSW4gZnJvbSAnLi9fY29weVN5bWJvbHNJbi5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5cyBmcm9tICcuL19nZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRBbGxLZXlzSW4gZnJvbSAnLi9fZ2V0QWxsS2V5c0luLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVBcnJheSBmcm9tICcuL19pbml0Q2xvbmVBcnJheS5qcyc7XG5pbXBvcnQgaW5pdENsb25lQnlUYWcgZnJvbSAnLi9faW5pdENsb25lQnlUYWcuanMnO1xuaW1wb3J0IGluaXRDbG9uZU9iamVjdCBmcm9tICcuL19pbml0Q2xvbmVPYmplY3QuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc01hcCBmcm9tICcuL2lzTWFwLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1NldCBmcm9tICcuL2lzU2V0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDbG9uZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseClone.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseCreate.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseCreate.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseCreate);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0RBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQ3JlYXRlLmpzP2Y4NzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ3JlYXRlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseCreate.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseEach.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseEach.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseForOwn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseForOwn.js */ \"../../../node_modules/lodash-es/_baseForOwn.js\");\n/* harmony import */ var _createBaseEach_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createBaseEach.js */ \"../../../node_modules/lodash-es/_createBaseEach.js\");\n\n\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = (0,_createBaseEach_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_baseForOwn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseEach);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUVhY2guanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ1E7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsVUFBVTtBQUNyQixhQUFhLGNBQWM7QUFDM0I7QUFDQSxlQUFlLDhEQUFjLENBQUMsc0RBQVU7O0FBRXhDLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRWFjaC5qcz8wZDg3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNyZWF0ZUJhc2VFYWNoIGZyb20gJy4vX2NyZWF0ZUJhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFYWNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseEach.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseExtremum.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseExtremum.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !(0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseExtremum);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUV4dHJlbXVtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyx3REFBUTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRXh0cmVtdW0uanM/NzFlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICApKSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRXh0cmVtdW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseExtremum.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseFilter.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseFilter.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseEach_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseEach.js */ \"../../../node_modules/lodash-es/_baseEach.js\");\n\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFilter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZpbHRlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsaUVBQWUsVUFBVSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGaWx0ZXIuanM/ZjBmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGaWx0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseFilter.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseFindIndex.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseFindIndex.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZpbmRJbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsYUFBYSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGaW5kSW5kZXguanM/Nzk4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbmRJbmRleDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseFindIndex.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseFlatten.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseFlatten.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayPush.js */ \"../../../node_modules/lodash-es/_arrayPush.js\");\n/* harmony import */ var _isFlattenable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isFlattenable.js */ \"../../../node_modules/lodash-es/_isFlattenable.js\");\n\n\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = _isFlattenable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFlatten);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZsYXR0ZW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdDO0FBQ1E7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLHlEQUFhO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixRQUFRLHlEQUFTO0FBQ2pCO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGbGF0dGVuLmpzP2UzMTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzRmxhdHRlbmFibGUgZnJvbSAnLi9faXNGbGF0dGVuYWJsZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRmxhdHRlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseFlatten.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseFor.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_baseFor.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _createBaseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createBaseFor.js */ \"../../../node_modules/lodash-es/_createBaseFor.js\");\n\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = (0,_createBaseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFor);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsY0FBYyw2REFBYTs7QUFFM0IsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3IuanM/NDkxOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlQmFzZUZvciBmcm9tICcuL19jcmVhdGVCYXNlRm9yLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseFor.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseForOwn.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseForOwn.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseFor.js */ \"../../../node_modules/lodash-es/_baseFor.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvck93bi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0M7QUFDUDs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsbUJBQW1CLHVEQUFPLG1CQUFtQixnREFBSTtBQUNqRDs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvck93bi5qcz84YTUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseForOwn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseGet.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_baseGet.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_castPath.js */ \"../../../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_toKey.js */ \"../../../node_modules/lodash-es/_toKey.js\");\n\n\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0M7QUFDTjs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0EsU0FBUyx3REFBUTs7QUFFakI7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixxREFBSztBQUN6QjtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanM/MGQ0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseGetAllKeys.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseGetAllKeys.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayPush.js */ \"../../../node_modules/lodash-es/_arrayPush.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(result, symbolsFunc(object));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdDO0FBQ0w7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxTQUFTLHVEQUFPLG9CQUFvQix5REFBUztBQUM3Qzs7QUFFQSxpRUFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanM/NWJlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseGetAllKeys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseGetTag.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseGetTag.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _getRawTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getRawTag.js */ \"../../../node_modules/lodash-es/_getRawTag.js\");\n/* harmony import */ var _objectToString_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_objectToString.js */ \"../../../node_modules/lodash-es/_objectToString.js\");\n\n\n\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? (0,_getRawTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)\n : (0,_objectToString_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetTag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ007QUFDVTs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGtEQUFNLEdBQUcsOERBQWtCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHlEQUFTO0FBQ2YsTUFBTSw4REFBYztBQUNwQjs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcz9hYzIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseGetTag.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseGt.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/_baseGt.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGt);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUd0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR3QuanM/NTAwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlR3QodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA+IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseGt.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseHas.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_baseHas.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsY0FBYztBQUN6QixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VIYXMuanM/YTAxNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc2Agd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUhhcyhvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VIYXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseHasIn.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseHasIn.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseHasIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGNBQWM7QUFDekIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSGFzSW4uanM/MGYyMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhc0luO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseHasIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIndexOf.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIndexOf.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFindIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseFindIndex.js */ \"../../../node_modules/lodash-es/_baseFindIndex.js\");\n/* harmony import */ var _baseIsNaN_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIsNaN.js */ \"../../../node_modules/lodash-es/_baseIsNaN.js\");\n/* harmony import */ var _strictIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_strictIndexOf.js */ \"../../../node_modules/lodash-es/_strictIndexOf.js\");\n\n\n\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? (0,_strictIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, value, fromIndex)\n : (0,_baseFindIndex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(array, _baseIsNaN_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], fromIndex);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIndexOf);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUluZGV4T2YuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRDtBQUNSO0FBQ1E7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0EsTUFBTSw2REFBYTtBQUNuQixNQUFNLDZEQUFhLFFBQVEscURBQVM7QUFDcEM7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJbmRleE9mLmpzPzQxOGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VGaW5kSW5kZXggZnJvbSAnLi9fYmFzZUZpbmRJbmRleC5qcyc7XG5pbXBvcnQgYmFzZUlzTmFOIGZyb20gJy4vX2Jhc2VJc05hTi5qcyc7XG5pbXBvcnQgc3RyaWN0SW5kZXhPZiBmcm9tICcuL19zdHJpY3RJbmRleE9mLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUluZGV4T2Y7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIndexOf.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsArguments.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsArguments.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) == argsTag;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsArguments);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQztBQUNHOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTLDREQUFZLFdBQVcsMERBQVU7QUFDMUM7O0FBRUEsaUVBQWUsZUFBZSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcz8wZTQzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsArguments.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsEqual.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsEqual.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsEqualDeep_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIsEqualDeep.js */ \"../../../node_modules/lodash-es/_baseIsEqualDeep.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && !(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other))) {\n return value !== value && other !== other;\n }\n return (0,_baseIsEqualDeep_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsEqual);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9EO0FBQ1A7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsNERBQVksWUFBWSw0REFBWTtBQUM5RTtBQUNBO0FBQ0EsU0FBUywrREFBZTtBQUN4Qjs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWwuanM/NGY2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsEqual.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsEqualDeep.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsEqualDeep.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Stack_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_Stack.js */ \"../../../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _equalArrays_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_equalArrays.js */ \"../../../node_modules/lodash-es/_equalArrays.js\");\n/* harmony import */ var _equalByTag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_equalByTag.js */ \"../../../node_modules/lodash-es/_equalByTag.js\");\n/* harmony import */ var _equalObjects_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_equalObjects.js */ \"../../../node_modules/lodash-es/_equalObjects.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isTypedArray.js */ \"../../../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object),\n othIsArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other),\n objTag = objIsArr ? arrayTag : (0,_getTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object),\n othTag = othIsArr ? arrayTag : (0,_getTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object)) {\n if (!(0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n return (objIsArr || (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object))\n ? (0,_equalArrays_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(object, other, bitmask, customizer, equalFunc, stack)\n : (0,_equalByTag_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n return (0,_equalObjects_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsEqualDeep);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFnQztBQUNZO0FBQ0Y7QUFDSTtBQUNaO0FBQ0M7QUFDRTtBQUNROztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLGlCQUFpQix1REFBTztBQUN4QixpQkFBaUIsdURBQU87QUFDeEIscUNBQXFDLHNEQUFNO0FBQzNDLHFDQUFxQyxzREFBTTs7QUFFM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHdEQUFRO0FBQzNCLFNBQVMsd0RBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlEQUFLO0FBQy9CLHdCQUF3Qiw0REFBWTtBQUNwQyxRQUFRLDJEQUFXO0FBQ25CLFFBQVEsMERBQVU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRCQUE0QixpREFBSztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaURBQUs7QUFDN0IsU0FBUyw0REFBWTtBQUNyQjs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzPzljZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBlcXVhbEFycmF5cyBmcm9tICcuL19lcXVhbEFycmF5cy5qcyc7XG5pbXBvcnQgZXF1YWxCeVRhZyBmcm9tICcuL19lcXVhbEJ5VGFnLmpzJztcbmltcG9ydCBlcXVhbE9iamVjdHMgZnJvbSAnLi9fZXF1YWxPYmplY3RzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsRGVlcDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsEqualDeep.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsMap.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsMap.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_getTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) == mapTag;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWFwLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFrQztBQUNXOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTLDREQUFZLFdBQVcsc0RBQU07QUFDdEM7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc01hcC5qcz9lM2JjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTWFwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsMap.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsMatch.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsMatch.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Stack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Stack.js */ \"../../../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _baseIsEqual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIsEqual.js */ \"../../../node_modules/lodash-es/_baseIsEqual.js\");\n\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? (0,_baseIsEqual_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsMatch);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdDO0FBQ1k7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sc0JBQXNCLGlEQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYywyREFBVztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNNYXRjaC5qcz8xYTY5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XG4gIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xuXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgc3JjVmFsdWUgPSBkYXRhWzFdO1xuXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTWF0Y2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsMatch.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsNaN.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsNaN.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsNaN);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmFOLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmFOLmpzPzNmNWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTmFOO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsNaN.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsNative.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsNative.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isFunction_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isFunction.js */ \"../../../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isMasked_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isMasked.js */ \"../../../node_modules/lodash-es/_isMasked.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _toSource_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_toSource.js */ \"../../../node_modules/lodash-es/_toSource.js\");\n\n\n\n\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) || (0,_isMasked_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n return false;\n }\n var pattern = (0,_isFunction_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) ? reIsNative : reIsHostCtor;\n return pattern.test((0,_toSource_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsNative);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXlDO0FBQ0g7QUFDRDtBQUNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsT0FBTyx3REFBUSxXQUFXLHdEQUFRO0FBQ2xDO0FBQ0E7QUFDQSxnQkFBZ0IsMERBQVU7QUFDMUIsc0JBQXNCLHdEQUFRO0FBQzlCOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanM/NmM0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsNative.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsSet.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsSet.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_getTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) == setTag;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzU2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFrQztBQUNXOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTLDREQUFZLFdBQVcsc0RBQU07QUFDdEM7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1NldC5qcz9lNTljIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzU2V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIsTypedArray.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIsTypedArray.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isLength.js */ \"../../../node_modules/lodash-es/isLength.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) &&\n (0,_isLength_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value.length) && !!typedArrayTags[(0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value)];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIsTypedArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBDO0FBQ0w7QUFDUTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0EsU0FBUyw0REFBWTtBQUNyQixJQUFJLHdEQUFRLG1DQUFtQywwREFBVTtBQUN6RDs7QUFFQSxpRUFBZSxnQkFBZ0IsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzPzQ0ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIsTypedArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseIteratee.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseIteratee.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseMatches_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseMatches.js */ \"../../../node_modules/lodash-es/_baseMatches.js\");\n/* harmony import */ var _baseMatchesProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseMatchesProperty.js */ \"../../../node_modules/lodash-es/_baseMatchesProperty.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _property_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./property.js */ \"../../../node_modules/lodash-es/property.js\");\n\n\n\n\n\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n }\n if (typeof value == 'object') {\n return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)\n ? (0,_baseMatchesProperty_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value[0], value[1])\n : (0,_baseMatches_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value);\n }\n return (0,_property_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseIteratee);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUl0ZXJhdGVlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE0QztBQUNnQjtBQUN2QjtBQUNGO0FBQ0U7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFRO0FBQ25CO0FBQ0E7QUFDQSxXQUFXLHVEQUFPO0FBQ2xCLFFBQVEsbUVBQW1CO0FBQzNCLFFBQVEsMkRBQVc7QUFDbkI7QUFDQSxTQUFTLHdEQUFRO0FBQ2pCOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXRlcmF0ZWUuanM/MTIyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZU1hdGNoZXMgZnJvbSAnLi9fYmFzZU1hdGNoZXMuanMnO1xuaW1wb3J0IGJhc2VNYXRjaGVzUHJvcGVydHkgZnJvbSAnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXRlcmF0ZWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseIteratee.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseKeys.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseKeys.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isPrototype_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isPrototype.js */ \"../../../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _nativeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_nativeKeys.js */ \"../../../node_modules/lodash-es/_nativeKeys.js\");\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!(0,_isPrototype_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return (0,_nativeKeys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTRDO0FBQ0Y7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLE9BQU8sMkRBQVc7QUFDbEIsV0FBVywwREFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzPzlkMmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseKeys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseKeysIn.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseKeysIn.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_isPrototype.js */ \"../../../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _nativeKeysIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_nativeKeysIn.js */ \"../../../node_modules/lodash-es/_nativeKeysIn.js\");\n\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return (0,_nativeKeysIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object);\n }\n var isProto = (0,_isPrototype_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseKeysIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFDO0FBQ087QUFDRTs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsT0FBTyx3REFBUTtBQUNmLFdBQVcsNERBQVk7QUFDdkI7QUFDQSxnQkFBZ0IsMkRBQVc7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsVUFBVSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanM/Mzc3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseKeysIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseLt.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/_baseLt.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseLt);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUx0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTHQuanM/ZGU3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlTHQodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA8IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTHQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseLt.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseMap.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_baseMap.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseEach.js */ \"../../../node_modules/lodash-es/_baseEach.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n\n\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection) ? Array(collection.length) : [];\n\n (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0M7QUFDSzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJEQUFXOztBQUUxQixFQUFFLHdEQUFRO0FBQ1Y7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hcC5qcz83YjNjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseMap.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseMatches.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseMatches.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsMatch_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIsMatch.js */ \"../../../node_modules/lodash-es/_baseIsMatch.js\");\n/* harmony import */ var _getMatchData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMatchData.js */ \"../../../node_modules/lodash-es/_getMatchData.js\");\n/* harmony import */ var _matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_matchesStrictComparable.js */ \"../../../node_modules/lodash-es/_matchesStrictComparable.js\");\n\n\n\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = (0,_getMatchData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return (0,_matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || (0,_baseIsMatch_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, source, matchData);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMatches);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0QztBQUNFO0FBQ3NCOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBLGtCQUFrQiw0REFBWTtBQUM5QjtBQUNBLFdBQVcsdUVBQXVCO0FBQ2xDO0FBQ0E7QUFDQSxnQ0FBZ0MsMkRBQVc7QUFDM0M7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanM/ZjZlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzTWF0Y2ggZnJvbSAnLi9fYmFzZUlzTWF0Y2guanMnO1xuaW1wb3J0IGdldE1hdGNoRGF0YSBmcm9tICcuL19nZXRNYXRjaERhdGEuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXRjaGVzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseMatches.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseMatchesProperty.js": /*!***************************************************************!*\ !*** ../../../node_modules/lodash-es/_baseMatchesProperty.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsEqual_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_baseIsEqual.js */ \"../../../node_modules/lodash-es/_baseIsEqual.js\");\n/* harmony import */ var _get_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./get.js */ \"../../../node_modules/lodash-es/get.js\");\n/* harmony import */ var _hasIn_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hasIn.js */ \"../../../node_modules/lodash-es/hasIn.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isKey.js */ \"../../../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _isStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isStrictComparable.js */ \"../../../node_modules/lodash-es/_isStrictComparable.js\");\n/* harmony import */ var _matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_matchesStrictComparable.js */ \"../../../node_modules/lodash-es/_matchesStrictComparable.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_toKey.js */ \"../../../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if ((0,_isKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path) && (0,_isStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(srcValue)) {\n return (0,_matchesStrictComparable_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_toKey_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(path), srcValue);\n }\n return function(object) {\n var objValue = (0,_get_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? (0,_hasIn_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(object, path)\n : (0,_baseIsEqual_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMatchesProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUE0QztBQUNqQjtBQUNJO0FBQ0M7QUFDMEI7QUFDVTtBQUNwQzs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsR0FBRztBQUNkLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsTUFBTSxxREFBSyxVQUFVLGtFQUFrQjtBQUN2QyxXQUFXLHVFQUF1QixDQUFDLHFEQUFLO0FBQ3hDO0FBQ0E7QUFDQSxtQkFBbUIsbURBQUc7QUFDdEI7QUFDQSxRQUFRLHFEQUFLO0FBQ2IsUUFBUSwyREFBVztBQUNuQjtBQUNBOztBQUVBLGlFQUFlLG1CQUFtQixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanM/ZTNlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseMatchesProperty.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseMerge.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseMerge.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Stack_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Stack.js */ \"../../../node_modules/lodash-es/_Stack.js\");\n/* harmony import */ var _assignMergeValue_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_assignMergeValue.js */ \"../../../node_modules/lodash-es/_assignMergeValue.js\");\n/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseFor.js */ \"../../../node_modules/lodash-es/_baseFor.js\");\n/* harmony import */ var _baseMergeDeep_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseMergeDeep.js */ \"../../../node_modules/lodash-es/_baseMergeDeep.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n/* harmony import */ var _safeGet_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_safeGet.js */ \"../../../node_modules/lodash-es/_safeGet.js\");\n\n\n\n\n\n\n\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, function(srcValue, key) {\n stack || (stack = new _Stack_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n if ((0,_isObject_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(srcValue)) {\n (0,_baseMergeDeep_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer((0,_safeGet_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n (0,_assignMergeValue_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(object, key, newValue);\n }\n }, _keysIn_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMerge);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQWdDO0FBQ3NCO0FBQ2xCO0FBQ1k7QUFDWDtBQUNKO0FBQ0c7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFPO0FBQ1QsMEJBQTBCLGlEQUFLO0FBQy9CLFFBQVEsd0RBQVE7QUFDaEIsTUFBTSw2REFBYTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdURBQU87QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnRUFBZ0I7QUFDdEI7QUFDQSxHQUFHLEVBQUUsa0RBQU07QUFDWDs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlLmpzP2U4ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgYmFzZU1lcmdlRGVlcCBmcm9tICcuL19iYXNlTWVyZ2VEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1lcmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseMerge.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseMergeDeep.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseMergeDeep.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assignMergeValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_assignMergeValue.js */ \"../../../node_modules/lodash-es/_assignMergeValue.js\");\n/* harmony import */ var _cloneBuffer_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_cloneBuffer.js */ \"../../../node_modules/lodash-es/_cloneBuffer.js\");\n/* harmony import */ var _cloneTypedArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_cloneTypedArray.js */ \"../../../node_modules/lodash-es/_cloneTypedArray.js\");\n/* harmony import */ var _copyArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_copyArray.js */ \"../../../node_modules/lodash-es/_copyArray.js\");\n/* harmony import */ var _initCloneObject_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./_initCloneObject.js */ \"../../../node_modules/lodash-es/_initCloneObject.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./isArguments.js */ \"../../../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isArrayLikeObject_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isArrayLikeObject.js */ \"../../../node_modules/lodash-es/isArrayLikeObject.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isFunction_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./isFunction.js */ \"../../../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isPlainObject_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./isPlainObject.js */ \"../../../node_modules/lodash-es/isPlainObject.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isTypedArray.js */ \"../../../node_modules/lodash-es/isTypedArray.js\");\n/* harmony import */ var _safeGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_safeGet.js */ \"../../../node_modules/lodash-es/_safeGet.js\");\n/* harmony import */ var _toPlainObject_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./toPlainObject.js */ \"../../../node_modules/lodash-es/toPlainObject.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = (0,_safeGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key),\n srcValue = (0,_safeGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n (0,_assignMergeValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(srcValue),\n isBuff = !isArr && (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(srcValue),\n isTyped = !isArr && !isBuff && (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(objValue)) {\n newValue = objValue;\n }\n else if ((0,_isArrayLikeObject_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(objValue)) {\n newValue = (0,_copyArray_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = (0,_cloneBuffer_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = (0,_cloneTypedArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if ((0,_isPlainObject_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(srcValue) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(srcValue)) {\n newValue = objValue;\n if ((0,_isArguments_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(objValue)) {\n newValue = (0,_toPlainObject_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(objValue);\n }\n else if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(objValue) || (0,_isFunction_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(objValue)) {\n newValue = (0,_initCloneObject_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n (0,_assignMergeValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key, newValue);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMergeDeep);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlRGVlcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXNEO0FBQ1Y7QUFDUTtBQUNaO0FBQ1k7QUFDVDtBQUNSO0FBQ29CO0FBQ2xCO0FBQ0k7QUFDSjtBQUNVO0FBQ0Y7QUFDVDtBQUNXOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVEQUFPO0FBQ3hCLGlCQUFpQix1REFBTztBQUN4Qjs7QUFFQTtBQUNBLElBQUksZ0VBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQkFBZ0IsdURBQU87QUFDdkIsMkJBQTJCLHdEQUFRO0FBQ25DLHVDQUF1Qyw0REFBWTs7QUFFbkQ7QUFDQTtBQUNBLFVBQVUsdURBQU87QUFDakI7QUFDQTtBQUNBLGVBQWUsaUVBQWlCO0FBQ2hDLG1CQUFtQix5REFBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkRBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLCtEQUFlO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDZEQUFhLGNBQWMsNERBQVc7QUFDbkQ7QUFDQSxVQUFVLDREQUFXO0FBQ3JCLG1CQUFtQiw4REFBYTtBQUNoQztBQUNBLGdCQUFnQix5REFBUSxjQUFjLDJEQUFVO0FBQ2hELG1CQUFtQixnRUFBZTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdFQUFnQjtBQUNsQjs7QUFFQSxpRUFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlRGVlcC5qcz80NDUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGNsb25lQnVmZmVyIGZyb20gJy4vX2Nsb25lQnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5pbXBvcnQgdG9QbGFpbk9iamVjdCBmcm9tICcuL3RvUGxhaW5PYmplY3QuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2VEZWVwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseMergeDeep.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseOrderBy.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseOrderBy.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayMap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayMap.js */ \"../../../node_modules/lodash-es/_arrayMap.js\");\n/* harmony import */ var _baseGet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseGet.js */ \"../../../node_modules/lodash-es/_baseGet.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_baseMap.js */ \"../../../node_modules/lodash-es/_baseMap.js\");\n/* harmony import */ var _baseSortBy_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_baseSortBy.js */ \"../../../node_modules/lodash-es/_baseSortBy.js\");\n/* harmony import */ var _baseUnary_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_baseUnary.js */ \"../../../node_modules/lodash-es/_baseUnary.js\");\n/* harmony import */ var _compareMultiple_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_compareMultiple.js */ \"../../../node_modules/lodash-es/_compareMultiple.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = (0,_arrayMap_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(iteratees, function(iteratee) {\n if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratee)) {\n return function(value) {\n return (0,_baseGet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [_identity_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]];\n }\n\n var index = -1;\n iteratees = (0,_arrayMap_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(iteratees, (0,_baseUnary_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_baseIteratee_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));\n\n var result = (0,_baseMap_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(collection, function(value, key, collection) {\n var criteria = (0,_arrayMap_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return (0,_baseSortBy_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(result, function(object, other) {\n return (0,_compareMultiple_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(object, other, orders);\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseOrderBy);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU9yZGVyQnkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFzQztBQUNGO0FBQ1U7QUFDVjtBQUNNO0FBQ0Y7QUFDWTtBQUNmO0FBQ0Y7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsOEJBQThCO0FBQ3pDLFdBQVcsVUFBVTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFRO0FBQ3hCLFVBQVUsdURBQU87QUFDakI7QUFDQSxpQkFBaUIsdURBQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSixpQkFBaUIsb0RBQVE7QUFDekI7O0FBRUE7QUFDQSxjQUFjLHdEQUFRLFlBQVkseURBQVMsQ0FBQyx3REFBWTs7QUFFeEQsZUFBZSx1REFBTztBQUN0QixtQkFBbUIsd0RBQVE7QUFDM0I7QUFDQSxLQUFLO0FBQ0wsYUFBYTtBQUNiLEdBQUc7O0FBRUgsU0FBUywwREFBVTtBQUNuQixXQUFXLCtEQUFlO0FBQzFCLEdBQUc7QUFDSDs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU9yZGVyQnkuanM/MzYyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZU1hcCBmcm9tICcuL19iYXNlTWFwLmpzJztcbmltcG9ydCBiYXNlU29ydEJ5IGZyb20gJy4vX2Jhc2VTb3J0QnkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvbXBhcmVNdWx0aXBsZSBmcm9tICcuL19jb21wYXJlTXVsdGlwbGUuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5vcmRlckJ5YCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpIHtcbiAgaWYgKGl0ZXJhdGVlcy5sZW5ndGgpIHtcbiAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoaXNBcnJheShpdGVyYXRlZSkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IC0xO1xuICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU9yZGVyQnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseOrderBy.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_basePick.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_basePick.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _basePickBy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_basePickBy.js */ \"../../../node_modules/lodash-es/_basePickBy.js\");\n/* harmony import */ var _hasIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hasIn.js */ \"../../../node_modules/lodash-es/hasIn.js\");\n\n\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return (0,_basePickBy_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, paths, function(value, path) {\n return (0,_hasIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, path);\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (basePick);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2suanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ1g7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsU0FBUywwREFBVTtBQUNuQixXQUFXLHFEQUFLO0FBQ2hCLEdBQUc7QUFDSDs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2suanM/Mjg2ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVBpY2tCeSBmcm9tICcuL19iYXNlUGlja0J5LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUGljaztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_basePick.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_basePickBy.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_basePickBy.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../../../node_modules/lodash-es/_baseGet.js\");\n/* harmony import */ var _baseSet_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseSet.js */ \"../../../node_modules/lodash-es/_baseSet.js\");\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_castPath.js */ \"../../../node_modules/lodash-es/_castPath.js\");\n\n\n\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = (0,_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n\n if (predicate(value, path)) {\n (0,_baseSet_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(result, (0,_castPath_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path, object), value);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (basePickBy);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2tCeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9DO0FBQ0E7QUFDRTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFPOztBQUV2QjtBQUNBLE1BQU0sdURBQU8sU0FBUyx3REFBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2tCeS5qcz9iMzBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_basePickBy.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseProperty.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseProperty.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHkuanM/NzI0OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseProperty.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_basePropertyDeep.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/_basePropertyDeep.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../../../node_modules/lodash-es/_baseGet.js\");\n\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return (0,_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (basePropertyDeep);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5RGVlcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQU87QUFDbEI7QUFDQTs7QUFFQSxpRUFBZSxnQkFBZ0IsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzPzc4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlEZWVwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_basePropertyDeep.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseRange.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseRange.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRange);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJhbmdlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSYW5nZS5qcz8xYmY1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVDZWlsID0gTWF0aC5jZWlsLFxuICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmdlYCBhbmQgYF8ucmFuZ2VSaWdodGAgd2hpY2ggZG9lc24ndFxuICogY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF0gPSBzdGFydDtcbiAgICBzdGFydCArPSBzdGVwO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseRange.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseReduce.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseReduce.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseReduce);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlZHVjZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLFVBQVU7QUFDckIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlZHVjZS5qcz9hNzYwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyBgZWFjaEZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdEFjY3VtIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IG9yIGxhc3QgZWxlbWVudCBvZlxuICogIGBjb2xsZWN0aW9uYCBhcyB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBlYWNoRnVuYykge1xuICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBhY2N1bXVsYXRvciA9IGluaXRBY2N1bVxuICAgICAgPyAoaW5pdEFjY3VtID0gZmFsc2UsIHZhbHVlKVxuICAgICAgOiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJlZHVjZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseReduce.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseRest.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseRest.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_overRest.js */ \"../../../node_modules/lodash-es/_overRest.js\");\n/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_setToString.js */ \"../../../node_modules/lodash-es/_setToString.js\");\n\n\n\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]), func + '');\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlc3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxQztBQUNDO0FBQ007O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBLFNBQVMsMkRBQVcsQ0FBQyx3REFBUSxjQUFjLG9EQUFRO0FBQ25EOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcz8zZWUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJlc3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseRest.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseSet.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_baseSet.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assignValue_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_assignValue.js */ \"../../../node_modules/lodash-es/_assignValue.js\");\n/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_castPath.js */ \"../../../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_isIndex.js */ \"../../../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_toKey.js */ \"../../../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return object;\n }\n path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = (0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(objValue)\n ? objValue\n : ((0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(path[index + 1]) ? [] : {});\n }\n }\n (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBNEM7QUFDTjtBQUNGO0FBQ0M7QUFDTDs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsR0FBRztBQUNkLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLE9BQU8sd0RBQVE7QUFDZjtBQUNBO0FBQ0EsU0FBUyx3REFBUTs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHFEQUFLO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix3REFBUTtBQUMzQjtBQUNBLGFBQWEsdURBQU8sMkJBQTJCO0FBQy9DO0FBQ0E7QUFDQSxJQUFJLDJEQUFXO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXQuanM/NWM2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseSetToString.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseSetToString.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant.js */ \"../../../node_modules/lodash-es/constant.js\");\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defineProperty.js */ \"../../../node_modules/lodash-es/_defineProperty.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n\n\n\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : function(func, string) {\n return (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(string),\n 'writable': true\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseSetToString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUM7QUFDYTtBQUNiOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0EsdUJBQXVCLDBEQUFjLEdBQUcsb0RBQVE7QUFDaEQsU0FBUyw4REFBYztBQUN2QjtBQUNBO0FBQ0EsYUFBYSx3REFBUTtBQUNyQjtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzPzVhODIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseSetToString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseSortBy.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseSortBy.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseSortBy);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNvcnRCeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNvcnRCeS5qcz81Nzg5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICogc29ydCBvcmRlciBvZiBgYXJyYXlgIGFuZCByZXBsYWNlcyBjcml0ZXJpYSBvYmplY3RzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZ1xuICogdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhcnJheVtsZW5ndGhdID0gYXJyYXlbbGVuZ3RoXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTb3J0Qnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseSortBy.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseTimes.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseTimes.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseTimes);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzP2Q2YmYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseTimes.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseToString.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseToString.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_arrayMap.js */ \"../../../node_modules/lodash-es/_arrayMap.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n\n\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return (0,_arrayMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value, baseToString) + '';\n }\n if ((0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseToString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWtDO0FBQ0k7QUFDSDtBQUNFOztBQUVyQztBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGtEQUFNLEdBQUcsNERBQWdCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx1REFBTztBQUNiO0FBQ0EsV0FBVyx3REFBUTtBQUNuQjtBQUNBLE1BQU0sd0RBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVG9TdHJpbmcuanM/MDQxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseToString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseTrim.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseTrim.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _trimmedEndIndex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_trimmedEndIndex.js */ \"../../../node_modules/lodash-es/_trimmedEndIndex.js\");\n\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, (0,_trimmedEndIndex_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseTrim);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRyaW0uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0Q7O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwrREFBZTtBQUNyQztBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcz85ZWVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cmltbWVkRW5kSW5kZXggZnJvbSAnLi9fdHJpbW1lZEVuZEluZGV4LmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdcbiAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVHJpbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseTrim.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseUnary.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseUnary.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseUnary);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanM/MjU3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseUnary.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseUniq.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_baseUniq.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _SetCache_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_SetCache.js */ \"../../../node_modules/lodash-es/_SetCache.js\");\n/* harmony import */ var _arrayIncludes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayIncludes.js */ \"../../../node_modules/lodash-es/_arrayIncludes.js\");\n/* harmony import */ var _arrayIncludesWith_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayIncludesWith.js */ \"../../../node_modules/lodash-es/_arrayIncludesWith.js\");\n/* harmony import */ var _cacheHas_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_cacheHas.js */ \"../../../node_modules/lodash-es/_cacheHas.js\");\n/* harmony import */ var _createSet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_createSet.js */ \"../../../node_modules/lodash-es/_createSet.js\");\n/* harmony import */ var _setToArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_setToArray.js */ \"../../../node_modules/lodash-es/_setToArray.js\");\n\n\n\n\n\n\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = _arrayIncludes_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = _arrayIncludesWith_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : (0,_createSet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(array);\n if (set) {\n return (0,_setToArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(set);\n }\n isCommon = false;\n includes = _cacheHas_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n seen = new _SetCache_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseUniq);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuaXEuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFzQztBQUNVO0FBQ1E7QUFDbEI7QUFDRTtBQUNFOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix5REFBYTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSw2REFBaUI7QUFDaEM7QUFDQTtBQUNBLGdDQUFnQyx5REFBUztBQUN6QztBQUNBLGFBQWEsMERBQVU7QUFDdkI7QUFDQTtBQUNBLGVBQWUsb0RBQVE7QUFDdkIsZUFBZSxvREFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5pcS5qcz8yMjcxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlcyBmcm9tICcuL19hcnJheUluY2x1ZGVzLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzV2l0aCBmcm9tICcuL19hcnJheUluY2x1ZGVzV2l0aC5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuaW1wb3J0IGNyZWF0ZVNldCBmcm9tICcuL19jcmVhdGVTZXQuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmlxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseUniq.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseValues.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_baseValues.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayMap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_arrayMap.js */ \"../../../node_modules/lodash-es/_arrayMap.js\");\n\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return (0,_arrayMap_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, function(key) {\n return object[key];\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseValues);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLFNBQVMsd0RBQVE7QUFDakI7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUVBQWUsVUFBVSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanM/OTBlZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseValues.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_baseZipObject.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_baseZipObject.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseZipObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVppcE9iamVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVppcE9iamVjdC5qcz83OWViIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hpY2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICBhc3NpZ25GdW5jKHJlc3VsdCwgcHJvcHNbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVppcE9iamVjdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_baseZipObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cacheHas.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_cacheHas.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NhY2hlSGFzLmpzP2U3MWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhY2hlSGFzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cacheHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_castFunction.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_castFunction.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdEZ1bmN0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsOENBQThDLG9EQUFRO0FBQ3REOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYXN0RnVuY3Rpb24uanM/ODFhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhc3RGdW5jdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_castFunction.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_castPath.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_castPath.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isKey.js */ \"../../../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _stringToPath_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_stringToPath.js */ \"../../../node_modules/lodash-es/_stringToPath.js\");\n/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./toString.js */ \"../../../node_modules/lodash-es/toString.js\");\n\n\n\n\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return value;\n }\n return (0,_isKey_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value, object) ? [value] : (0,_stringToPath_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_toString_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castPath);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbUM7QUFDSDtBQUNjO0FBQ1Q7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsTUFBTSx1REFBTztBQUNiO0FBQ0E7QUFDQSxTQUFTLHFEQUFLLDRCQUE0Qiw0REFBWSxDQUFDLHdEQUFRO0FBQy9EOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYXN0UGF0aC5qcz9jYzM0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IHN0cmluZ1RvUGF0aCBmcm9tICcuL19zdHJpbmdUb1BhdGguanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYXN0UGF0aDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_castPath.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneArrayBuffer.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneArrayBuffer.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Uint8Array.js */ \"../../../node_modules/lodash-es/_Uint8Array.js\");\n\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](arrayBuffer));\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sc0RBQVUsaUJBQWlCLHNEQUFVO0FBQzNDO0FBQ0E7O0FBRUEsaUVBQWUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcz84ZDRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVaW50OEFycmF5IGZyb20gJy4vX1VpbnQ4QXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lQXJyYXlCdWZmZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneArrayBuffer.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneBuffer.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneBuffer.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVCdWZmZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEI7O0FBRTlCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCLHVEQUFXO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZUJ1ZmZlci5qcz9hYTUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZUJ1ZmZlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneBuffer.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneDataView.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneDataView.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_cloneArrayBuffer.js */ \"../../../node_modules/lodash-es/_cloneArrayBuffer.js\");\n\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneDataView);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVEYXRhVmlldy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esd0JBQXdCLGdFQUFnQjtBQUN4QztBQUNBOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZURhdGFWaWV3LmpzP2Y1MTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lRGF0YVZpZXc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneDataView.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneRegExp.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneRegExp.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneRegExp);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVSZWdFeHAuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVSZWdFeHAuanM/MTkwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVJlZ0V4cDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneRegExp.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneSymbol.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneSymbol.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneSymbol);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVTeW1ib2wuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0M7O0FBRWxDO0FBQ0Esa0JBQWtCLGtEQUFNLEdBQUcsNERBQWdCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVTeW1ib2wuanM/MzE1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVTeW1ib2w7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneSymbol.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_cloneTypedArray.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_cloneTypedArray.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_cloneArrayBuffer.js */ \"../../../node_modules/lodash-es/_cloneArrayBuffer.js\");\n\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVUeXBlZEFycmF5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSx3QkFBd0IsZ0VBQWdCO0FBQ3hDO0FBQ0E7O0FBRUEsaUVBQWUsZUFBZSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lVHlwZWRBcnJheS5qcz9hNDA2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVR5cGVkQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_cloneTypedArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_compareAscending.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/_compareAscending.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (compareAscending);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29tcGFyZUFzY2VuZGluZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHdEQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isd0RBQVE7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29tcGFyZUFzY2VuZGluZy5qcz9lYWM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqXG4gKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wYXJlQXNjZW5kaW5nO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_compareAscending.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_compareMultiple.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_compareMultiple.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _compareAscending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_compareAscending.js */ \"../../../node_modules/lodash-es/_compareAscending.js\");\n\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = (0,_compareAscending_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (compareMultiple);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29tcGFyZU11bHRpcGxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsb0JBQW9CO0FBQy9CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnRUFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29tcGFyZU11bHRpcGxlLmpzP2I4ODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbXBhcmVBc2NlbmRpbmcgZnJvbSAnLi9fY29tcGFyZUFzY2VuZGluZy5qcyc7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAqXG4gKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICogb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICBsZW5ndGggPSBvYmpDcml0ZXJpYS5sZW5ndGgsXG4gICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICByZXR1cm4gcmVzdWx0ICogKG9yZGVyID09ICdkZXNjJyA/IC0xIDogMSk7XG4gICAgfVxuICB9XG4gIC8vIEZpeGVzIGFuIGBBcnJheSNzb3J0YCBidWcgaW4gdGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBhcHBsaWNhdGlvbnNcbiAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gIC8vXG4gIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gIC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhcmVNdWx0aXBsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_compareMultiple.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_copyArray.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_copyArray.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weUFycmF5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weUFycmF5LmpzP2E5ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlBcnJheTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_copyArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_copyObject.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_copyObject.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_assignValue.js */ \"../../../node_modules/lodash-es/_assignValue.js\");\n/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseAssignValue.js */ \"../../../node_modules/lodash-es/_baseAssignValue.js\");\n\n\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key, newValue);\n } else {\n (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, key, newValue);\n }\n }\n return object;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEM7QUFDUTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUSxVQUFVO0FBQzdCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwrREFBZTtBQUNyQixNQUFNO0FBQ04sTUFBTSwyREFBVztBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcz9iZGZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5T2JqZWN0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_copyObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_copySymbols.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_copySymbols.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _copyObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_copyObject.js */ \"../../../node_modules/lodash-es/_copyObject.js\");\n/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getSymbols.js */ \"../../../node_modules/lodash-es/_getSymbols.js\");\n\n\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return (0,_copyObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, (0,_getSymbols_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(source), object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copySymbols);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weVN5bWJvbHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ0E7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUSxVQUFVO0FBQzdCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsU0FBUywwREFBVSxTQUFTLDBEQUFVO0FBQ3RDOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5U3ltYm9scy5qcz9hMDYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weVN5bWJvbHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_copySymbols.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_copySymbolsIn.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_copySymbolsIn.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _copyObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_copyObject.js */ \"../../../node_modules/lodash-es/_copyObject.js\");\n/* harmony import */ var _getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_getSymbolsIn.js */ \"../../../node_modules/lodash-es/_getSymbolsIn.js\");\n\n\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return (0,_copyObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(source, (0,_getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(source), object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copySymbolsIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weVN5bWJvbHNJbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMEM7QUFDSTs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRLFVBQVU7QUFDN0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTLDBEQUFVLFNBQVMsNERBQVk7QUFDeEM7O0FBRUEsaUVBQWUsYUFBYSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlTeW1ib2xzSW4uanM/YzkxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBnZXRTeW1ib2xzSW4gZnJvbSAnLi9fZ2V0U3ltYm9sc0luLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9sc0luO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_copySymbolsIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_coreJsData.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_coreJsData.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"][\"__core-js_shared__\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (coreJsData);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qjs7QUFFOUI7QUFDQSxpQkFBaUIsc0VBQTBCOztBQUUzQyxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcz82MzgyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_coreJsData.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createAssigner.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_createAssigner.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseRest.js */ \"../../../node_modules/lodash-es/_baseRest.js\");\n/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isIterateeCall.js */ \"../../../node_modules/lodash-es/_isIterateeCall.js\");\n\n\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createAssigner);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXNDO0FBQ1k7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsU0FBUyx3REFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLDhEQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzPzQzNDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createAssigner.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createBaseEach.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_createBaseEach.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!(0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createBaseEach);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQmFzZUVhY2guanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsU0FBUztBQUNwQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywyREFBVztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VFYWNoLmpzP2IzMTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRWFjaDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createBaseEach.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createBaseFor.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_createBaseFor.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createBaseFor);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQmFzZUZvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQmFzZUZvci5qcz9hNzE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createBaseFor.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createFind.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_createFind.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!(0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection)) {\n var iteratee = (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(predicate, 3);\n collection = (0,_keys_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createFind);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlRmluZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQThDO0FBQ0g7QUFDZDs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywyREFBVztBQUNwQixxQkFBcUIsNERBQVk7QUFDakMsbUJBQW1CLG9EQUFJO0FBQ3ZCLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVGaW5kLmpzPzlhNTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmluZChmaW5kSW5kZXhGdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVGaW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createFind.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createRange.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_createRange.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseRange_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseRange.js */ \"../../../node_modules/lodash-es/_baseRange.js\");\n/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isIterateeCall.js */ \"../../../node_modules/lodash-es/_isIterateeCall.js\");\n/* harmony import */ var _toFinite_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toFinite.js */ \"../../../node_modules/lodash-es/toFinite.js\");\n\n\n\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = (0,_toFinite_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = (0,_toFinite_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : (0,_toFinite_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(step);\n return (0,_baseRange_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(start, end, step, fromRight);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createRange);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlUmFuZ2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3QztBQUNVO0FBQ2I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsOERBQWM7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sWUFBWSx3REFBUTtBQUNwQjtBQUNBLHlEQUF5RCx3REFBUTtBQUNqRSxXQUFXLHlEQUFTO0FBQ3BCO0FBQ0E7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZVJhbmdlLmpzP2ExM2YiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VSYW5nZSBmcm9tICcuL19iYXNlUmFuZ2UuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCB0b0Zpbml0ZSBmcm9tICcuL3RvRmluaXRlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYF8ucmFuZ2VgIG9yIGBfLnJhbmdlUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJhbmdlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSYW5nZShmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoc3RlcCAmJiB0eXBlb2Ygc3RlcCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgZW5kID0gc3RlcCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgfVxuICAgIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDogLTEpIDogdG9GaW5pdGUoc3RlcCk7XG4gICAgcmV0dXJuIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createRange.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_createSet.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_createSet.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Set_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Set.js */ \"../../../node_modules/lodash-es/_Set.js\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./noop.js */ \"../../../node_modules/lodash-es/noop.js\");\n/* harmony import */ var _setToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_setToArray.js */ \"../../../node_modules/lodash-es/_setToArray.js\");\n\n\n\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(_Set_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && (1 / (0,_setToArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(new _Set_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([,-0]))[1]) == INFINITY) ? _noop_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] : function(values) {\n return new _Set_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](values);\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlU2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBNEI7QUFDQztBQUNhOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGtCQUFrQiwrQ0FBRyxTQUFTLDBEQUFVLEtBQUssK0NBQUcsNEJBQTRCLGdEQUFJO0FBQ2hGLGFBQWEsK0NBQUc7QUFDaEI7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZVNldC5qcz8yMmY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXQgZnJvbSAnLi9fU2V0LmpzJztcbmltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_createSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_defineProperty.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_defineProperty.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n\n\nvar defineProperty = (function() {\n try {\n var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7O0FBRXhDO0FBQ0E7QUFDQSxlQUFlLHlEQUFTO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLElBQUk7QUFDSixDQUFDOztBQUVELGlFQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcz8xN2MxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_defineProperty.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_equalArrays.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_equalArrays.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _SetCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_SetCache.js */ \"../../../node_modules/lodash-es/_SetCache.js\");\n/* harmony import */ var _arraySome_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arraySome.js */ \"../../../node_modules/lodash-es/_arraySome.js\");\n/* harmony import */ var _cacheHas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_cacheHas.js */ \"../../../node_modules/lodash-es/_cacheHas.js\");\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!(0,_arraySome_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(other, function(othValue, othIndex) {\n if (!(0,_cacheHas_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (equalArrays);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFzQztBQUNFO0FBQ0Y7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxvREFBUTs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5REFBUztBQUNwQixpQkFBaUIsd0RBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEFycmF5cy5qcz85NWJkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsQXJyYXlzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_equalArrays.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_equalByTag.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_equalByTag.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Uint8Array.js */ \"../../../node_modules/lodash-es/_Uint8Array.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n/* harmony import */ var _equalArrays_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_equalArrays.js */ \"../../../node_modules/lodash-es/_equalArrays.js\");\n/* harmony import */ var _mapToArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_mapToArray.js */ \"../../../node_modules/lodash-es/_mapToArray.js\");\n/* harmony import */ var _setToArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_setToArray.js */ \"../../../node_modules/lodash-es/_setToArray.js\");\n\n\n\n\n\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](object), new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return (0,_eq_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = _mapToArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = _setToArray_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = (0,_equalArrays_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (equalByTag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQWtDO0FBQ1E7QUFDakI7QUFDbUI7QUFDRjtBQUNBOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixrREFBTSxHQUFHLDREQUFnQjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLHNEQUFVLGNBQWMsc0RBQVU7QUFDM0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtEQUFFOztBQUVmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLHNEQUFVOztBQUU5QjtBQUNBO0FBQ0EsNEJBQTRCLHNEQUFVOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiwyREFBVztBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEJ5VGFnLmpzPzcyMGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxCeVRhZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_equalByTag.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_equalObjects.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_equalObjects.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getAllKeys.js */ \"../../../node_modules/lodash-es/_getAllKeys.js\");\n\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = (0,_getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object),\n objLength = objProps.length,\n othProps = (0,_getAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (equalObjects);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxPYmplY3RzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwwREFBVTtBQUMzQjtBQUNBLGlCQUFpQiwwREFBVTtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcz9lM2YwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_equalObjects.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_flatRest.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_flatRest.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _flatten_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flatten.js */ \"../../../node_modules/lodash-es/flatten.js\");\n/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_overRest.js */ \"../../../node_modules/lodash-es/_overRest.js\");\n/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_setToString.js */ \"../../../node_modules/lodash-es/_setToString.js\");\n\n\n\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(func, undefined, _flatten_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]), func + '');\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatRest);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZmxhdFJlc3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtQztBQUNHO0FBQ007O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsU0FBUywyREFBVyxDQUFDLHdEQUFRLGtCQUFrQixtREFBTztBQUN0RDs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZmxhdFJlc3QuanM/MDZmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmxhdHRlbiBmcm9tICcuL2ZsYXR0ZW4uanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdFJlc3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_flatRest.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_freeGlobal.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_freeGlobal.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (freeGlobal);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcz9kOWM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_freeGlobal.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getAllKeys.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_getAllKeys.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetAllKeys.js */ \"../../../node_modules/lodash-es/_baseGetAllKeys.js\");\n/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getSymbols.js */ \"../../../node_modules/lodash-es/_getSymbols.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtEO0FBQ1I7QUFDYjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxTQUFTLDhEQUFjLFNBQVMsZ0RBQUksRUFBRSxzREFBVTtBQUNoRDs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcz9kOGNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEFsbEtleXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getAllKeys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getAllKeysIn.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_getAllKeysIn.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGetAllKeys.js */ \"../../../node_modules/lodash-es/_baseGetAllKeys.js\");\n/* harmony import */ var _getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getSymbolsIn.js */ \"../../../node_modules/lodash-es/_getSymbolsIn.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, _keysIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _getSymbolsIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeysIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5c0luLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Q7QUFDSjtBQUNiOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsU0FBUyw4REFBYyxTQUFTLGtEQUFNLEVBQUUsd0RBQVk7QUFDcEQ7O0FBRUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldEFsbEtleXNJbi5qcz8zNjllIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9sc0luIGZyb20gJy4vX2dldFN5bWJvbHNJbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5c0luO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getAllKeysIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getMapData.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_getMapData.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isKeyable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isKeyable.js */ \"../../../node_modules/lodash-es/_isKeyable.js\");\n\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return (0,_isKeyable_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getMapData);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlEQUFTO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcz81NDI2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0tleWFibGUgZnJvbSAnLi9faXNLZXlhYmxlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRNYXBEYXRhO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getMapData.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getMatchData.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_getMatchData.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isStrictComparable.js */ \"../../../node_modules/lodash-es/_isStrictComparable.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = (0,_keys_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, (0,_isStrictComparable_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)];\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getMatchData);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwRDtBQUM3Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxlQUFlLG9EQUFJO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0Msa0VBQWtCO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzP2MxNDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE1hdGNoRGF0YTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getMatchData.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getNative.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_getNative.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsNative_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIsNative.js */ \"../../../node_modules/lodash-es/_baseIsNative.js\");\n/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getValue.js */ \"../../../node_modules/lodash-es/_getValue.js\");\n\n\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = (0,_getValue_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, key);\n return (0,_baseIsNative_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) ? value : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getNative);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4QztBQUNSOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQSxjQUFjLHdEQUFRO0FBQ3RCLFNBQVMsNERBQVk7QUFDckI7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcz84MTJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlSXNOYXRpdmUgZnJvbSAnLi9fYmFzZUlzTmF0aXZlLmpzJztcbmltcG9ydCBnZXRWYWx1ZSBmcm9tICcuL19nZXRWYWx1ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE5hdGl2ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getNative.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getPrototype.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_getPrototype.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_overArg.js */ \"../../../node_modules/lodash-es/_overArg.js\");\n\n\n/** Built-in value references. */\nvar getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object.getPrototypeOf, Object);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW9DOztBQUVwQztBQUNBLG1CQUFtQix1REFBTzs7QUFFMUIsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcz83MzFmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getPrototype.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getRawTag.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_getRawTag.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getRawTag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLGtEQUFNLEdBQUcsOERBQWtCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcz82YjQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getRawTag.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getSymbols.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_getSymbols.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayFilter.js */ \"../../../node_modules/lodash-es/_arrayFilter.js\");\n/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stubArray.js */ \"../../../node_modules/lodash-es/stubArray.js\");\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEM7QUFDTDs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EscUNBQXFDLHFEQUFTO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywyREFBVztBQUNwQjtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcz9iNmEzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getSymbols.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getSymbolsIn.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_getSymbolsIn.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayPush.js */ \"../../../node_modules/lodash-es/_arrayPush.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_getPrototype.js */ \"../../../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getSymbols.js */ \"../../../node_modules/lodash-es/_getSymbols.js\");\n/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stubArray.js */ \"../../../node_modules/lodash-es/stubArray.js\");\n\n\n\n\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : function(object) {\n var result = [];\n while (object) {\n (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(result, (0,_getSymbols_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object));\n object = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object);\n }\n return result;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbolsIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9sc0luLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDO0FBQ007QUFDSjtBQUNIOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBLHVDQUF1QyxxREFBUztBQUNoRDtBQUNBO0FBQ0EsSUFBSSx5REFBUyxTQUFTLDBEQUFVO0FBQ2hDLGFBQWEsNERBQVk7QUFDekI7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRTeW1ib2xzSW4uanM/ZDJjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcbmltcG9ydCBzdHViQXJyYXkgZnJvbSAnLi9zdHViQXJyYXkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzSW47XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getSymbolsIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getTag.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/_getTag.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _DataView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_DataView.js */ \"../../../node_modules/lodash-es/_DataView.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_Map.js */ \"../../../node_modules/lodash-es/_Map.js\");\n/* harmony import */ var _Promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_Promise.js */ \"../../../node_modules/lodash-es/_Promise.js\");\n/* harmony import */ var _Set_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_Set.js */ \"../../../node_modules/lodash-es/_Set.js\");\n/* harmony import */ var _WeakMap_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_WeakMap.js */ \"../../../node_modules/lodash-es/_WeakMap.js\");\n/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _toSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_toSource.js */ \"../../../node_modules/lodash-es/_toSource.js\");\n\n\n\n\n\n\n\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_DataView_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n mapCtorString = (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_Map_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n promiseCtorString = (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_Promise_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n setCtorString = (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_Set_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n weakMapCtorString = (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_WeakMap_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = _baseGetTag_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((_DataView_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] && getTag(new _DataView_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](new ArrayBuffer(1))) != dataViewTag) ||\n (_Map_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"] && getTag(new _Map_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) != mapTag) ||\n (_Promise_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"] && getTag(_Promise_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].resolve()) != promiseTag) ||\n (_Set_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"] && getTag(new _Set_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]) != setTag) ||\n (_WeakMap_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"] && getTag(new _WeakMap_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) != weakMapTag)) {\n getTag = function(value) {\n var result = (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? (0,_toSource_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getTag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQXNDO0FBQ1Y7QUFDUTtBQUNSO0FBQ1E7QUFDTTtBQUNKOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx5QkFBeUIsd0RBQVEsQ0FBQyxvREFBUTtBQUMxQyxvQkFBb0Isd0RBQVEsQ0FBQywrQ0FBRztBQUNoQyx3QkFBd0Isd0RBQVEsQ0FBQyxtREFBTztBQUN4QyxvQkFBb0Isd0RBQVEsQ0FBQywrQ0FBRztBQUNoQyx3QkFBd0Isd0RBQVEsQ0FBQyxtREFBTzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQSxhQUFhLHNEQUFVOztBQUV2QjtBQUNBLEtBQUssb0RBQVEsZUFBZSxvREFBUTtBQUNwQyxLQUFLLCtDQUFHLGVBQWUsK0NBQUc7QUFDMUIsS0FBSyxtREFBTyxXQUFXLDJEQUFlO0FBQ3RDLEtBQUssK0NBQUcsZUFBZSwrQ0FBRztBQUMxQixLQUFLLG1EQUFPLGVBQWUsbURBQU87QUFDbEM7QUFDQSxpQkFBaUIsMERBQVU7QUFDM0I7QUFDQSw0QkFBNEIsd0RBQVE7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzP2Q3NjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERhdGFWaWV3IGZyb20gJy4vX0RhdGFWaWV3LmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJy4vX1Byb21pc2UuanMnO1xuaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi9fV2Vha01hcC5qcyc7XG5pbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRhZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getTag.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_getValue.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_getValue.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getValue);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzP2VkMzYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_getValue.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hasPath.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_hasPath.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_castPath.js */ \"../../../node_modules/lodash-es/_castPath.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isArguments.js */ \"../../../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_isIndex.js */ \"../../../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLength.js */ \"../../../node_modules/lodash-es/isLength.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_toKey.js */ \"../../../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(key, length) &&\n ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(object));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzUGF0aC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXNDO0FBQ0s7QUFDUjtBQUNDO0FBQ0M7QUFDTDs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLFNBQVMsd0RBQVE7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMscURBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHdEQUFRLFlBQVksdURBQU87QUFDaEQsS0FBSyx1REFBTyxZQUFZLDJEQUFXO0FBQ25DOztBQUVBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNQYXRoLmpzP2FkZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNQYXRoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hasPath.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hasUnicode.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_hasUnicode.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasUnicode);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzVW5pY29kZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzVW5pY29kZS5qcz9mNDFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNVbmljb2RlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hasUnicode.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hashClear.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_hashClear.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../../../node_modules/lodash-es/_nativeCreate.js\");\n\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? (0,_nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(null) : {};\n this.size = 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hashClear);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdEQUFZLEdBQUcsNERBQVk7QUFDN0M7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzPzFkZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hashClear.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hashDelete.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_hashDelete.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hashDelete);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoRGVsZXRlLmpzPzE5ZDkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hashDelete.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hashGet.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_hashGet.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../../../node_modules/lodash-es/_nativeCreate.js\");\n\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (_nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hashGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEdldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdEQUFZO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hHZXQuanM/ODljNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaEdldDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hashGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hashHas.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_hashHas.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../../../node_modules/lodash-es/_nativeCreate.js\");\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hashHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEhhcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsU0FBUyx3REFBWTtBQUNyQjs7QUFFQSxpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEhhcy5qcz8xMGRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoSGFzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hashHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_hashSet.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_hashSet.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nativeCreate.js */ \"../../../node_modules/lodash-es/_nativeCreate.js\");\n\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (_nativeCreate_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hashSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaFNldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3REFBWTtBQUMzQjtBQUNBOztBQUVBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoU2V0LmpzPzU0OWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaFNldDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_hashSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_initCloneArray.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_initCloneArray.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (initCloneArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faW5pdENsb25lQXJyYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZUFycmF5LmpzP2RhZTgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdENsb25lQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_initCloneArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_initCloneByTag.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_initCloneByTag.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_cloneArrayBuffer.js */ \"../../../node_modules/lodash-es/_cloneArrayBuffer.js\");\n/* harmony import */ var _cloneDataView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_cloneDataView.js */ \"../../../node_modules/lodash-es/_cloneDataView.js\");\n/* harmony import */ var _cloneRegExp_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_cloneRegExp.js */ \"../../../node_modules/lodash-es/_cloneRegExp.js\");\n/* harmony import */ var _cloneSymbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_cloneSymbol.js */ \"../../../node_modules/lodash-es/_cloneSymbol.js\");\n/* harmony import */ var _cloneTypedArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_cloneTypedArray.js */ \"../../../node_modules/lodash-es/_cloneTypedArray.js\");\n\n\n\n\n\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return (0,_cloneDataView_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return (0,_cloneTypedArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return (0,_cloneRegExp_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return (0,_cloneSymbol_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object);\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (initCloneByTag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faW5pdENsb25lQnlUYWcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXNEO0FBQ047QUFDSjtBQUNBO0FBQ1E7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdFQUFnQjs7QUFFN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSw2REFBYTs7QUFFMUI7QUFDQTtBQUNBO0FBQ0EsYUFBYSwrREFBZTs7QUFFNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLDJEQUFXOztBQUV4QjtBQUNBOztBQUVBO0FBQ0EsYUFBYSwyREFBVztBQUN4QjtBQUNBOztBQUVBLGlFQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVCeVRhZy5qcz85MmY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuaW1wb3J0IGNsb25lRGF0YVZpZXcgZnJvbSAnLi9fY2xvbmVEYXRhVmlldy5qcyc7XG5pbXBvcnQgY2xvbmVSZWdFeHAgZnJvbSAnLi9fY2xvbmVSZWdFeHAuanMnO1xuaW1wb3J0IGNsb25lU3ltYm9sIGZyb20gJy4vX2Nsb25lU3ltYm9sLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZUJ5VGFnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_initCloneByTag.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_initCloneObject.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_initCloneObject.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseCreate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseCreate.js */ \"../../../node_modules/lodash-es/_baseCreate.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getPrototype.js */ \"../../../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isPrototype.js */ \"../../../node_modules/lodash-es/_isPrototype.js\");\n\n\n\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !(0,_isPrototype_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object))\n ? (0,_baseCreate_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object))\n : {};\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (initCloneObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faW5pdENsb25lT2JqZWN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMEM7QUFDSTtBQUNGOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLHNEQUFzRCwyREFBVztBQUNqRSxNQUFNLDBEQUFVLENBQUMsNERBQVk7QUFDN0I7QUFDQTs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faW5pdENsb25lT2JqZWN0LmpzPzk1OTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZU9iamVjdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_initCloneObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isFlattenable.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_isFlattenable.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Symbol.js */ \"../../../node_modules/lodash-es/_Symbol.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isArguments.js */ \"../../../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n/** Built-in value references. */\nvar spreadableSymbol = _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? _Symbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isFlattenable);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNGbGF0dGVuYWJsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ1M7QUFDUjs7QUFFbkM7QUFDQSx1QkFBdUIsa0RBQU0sR0FBRyxxRUFBeUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTLHVEQUFPLFdBQVcsMkRBQVc7QUFDdEM7QUFDQTs7QUFFQSxpRUFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNGbGF0dGVuYWJsZS5qcz83YzRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZsYXR0ZW5hYmxlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isFlattenable.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isIndex.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_isIndex.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzPzBhNWIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isIndex.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isIterateeCall.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_isIterateeCall.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_isIndex.js */ \"../../../node_modules/lodash-es/_isIndex.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n\n\n\n\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(object[index], value);\n }\n return false;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBeUI7QUFDa0I7QUFDUDtBQUNDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxPQUFPLHdEQUFRO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJEQUFXLFlBQVksdURBQU87QUFDekM7QUFDQTtBQUNBLFdBQVcsa0RBQUU7QUFDYjtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzPzU5Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isIterateeCall.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isKey.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/_isKey.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1DO0FBQ0U7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLE1BQU0sdURBQU87QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix3REFBUTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0tleS5qcz9lYzI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNLZXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isKey.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isKeyable.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/_isKeyable.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKeyable);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXlhYmxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXlhYmxlLmpzP2FlMzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleWFibGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isKeyable.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isMasked.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_isMasked.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_coreJsData.js */ \"../../../node_modules/lodash-es/_coreJsData.js\");\n\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(_coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keys && _coreJsData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isMasked);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQSwwQkFBMEIsc0RBQVUsSUFBSSwyREFBZSxJQUFJLG9FQUF3QjtBQUNuRjtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcz8zMjQ1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isMasked.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isPrototype.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_isPrototype.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPrototype);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanM/OGY1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isPrototype.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_isStrictComparable.js": /*!**************************************************************!*\ !*** ../../../node_modules/lodash-es/_isStrictComparable.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isStrictComparable);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNTdHJpY3RDb21wYXJhYmxlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsd0RBQVE7QUFDckM7O0FBRUEsaUVBQWUsa0JBQWtCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNTdHJpY3RDb21wYXJhYmxlLmpzPzhkMTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_isStrictComparable.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_listCacheClear.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_listCacheClear.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (listCacheClear);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlQ2xlYXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUNsZWFyLmpzPzUzMzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_listCacheClear.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_listCacheDelete.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_listCacheDelete.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../../../node_modules/lodash-es/_assocIndexOf.js\");\n\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = (0,_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (listCacheDelete);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxjQUFjLDREQUFZOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxlQUFlLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzPzJmMWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_listCacheDelete.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_listCacheGet.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_listCacheGet.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../../../node_modules/lodash-es/_assocIndexOf.js\");\n\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = (0,_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (listCacheGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNERBQVk7O0FBRTFCO0FBQ0E7O0FBRUEsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcz9kYTVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_listCacheGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_listCacheHas.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_listCacheHas.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../../../node_modules/lodash-es/_assocIndexOf.js\");\n\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return (0,_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this.__data__, key) > -1;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (listCacheHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlSGFzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxTQUFTLDREQUFZO0FBQ3JCOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanM/ZTAxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzb2NJbmRleE9mIGZyb20gJy4vX2Fzc29jSW5kZXhPZi5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVIYXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_listCacheHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_listCacheSet.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_listCacheSet.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_assocIndexOf.js */ \"../../../node_modules/lodash-es/_assocIndexOf.js\");\n\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = (0,_assocIndexOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (listCacheSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlU2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNERBQVk7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlU2V0LmpzP2I5MDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_listCacheSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapCacheClear.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_mapCacheClear.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _Hash_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_Hash.js */ \"../../../node_modules/lodash-es/_Hash.js\");\n/* harmony import */ var _ListCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_ListCache.js */ \"../../../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Map.js */ \"../../../node_modules/lodash-es/_Map.js\");\n\n\n\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new _Hash_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'map': new (_Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || _ListCache_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n 'string': new _Hash_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapCacheClear);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVDbGVhci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQThCO0FBQ1U7QUFDWjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0RBQUk7QUFDcEIsZ0JBQWdCLCtDQUFHLElBQUkscURBQVM7QUFDaEMsa0JBQWtCLGdEQUFJO0FBQ3RCO0FBQ0E7O0FBRUEsaUVBQWUsYUFBYSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanM/ZGZiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapCacheClear.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapCacheDelete.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_mapCacheDelete.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../../../node_modules/lodash-es/_getMapData.js\");\n\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = (0,_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapCacheDelete);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLGVBQWUsMERBQVU7QUFDekI7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZURlbGV0ZS5qcz9lYzU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapCacheDelete.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapCacheGet.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_mapCacheGet.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../../../node_modules/lodash-es/_getMapData.js\");\n\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return (0,_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key).get(key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapCacheGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVHZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBLFNBQVMsMERBQVU7QUFDbkI7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlR2V0LmpzPzZiNTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE1hcERhdGEgZnJvbSAnLi9fZ2V0TWFwRGF0YS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVHZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapCacheGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapCacheHas.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_mapCacheHas.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../../../node_modules/lodash-es/_getMapData.js\");\n\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return (0,_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key).has(key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapCacheHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVIYXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLFNBQVMsMERBQVU7QUFDbkI7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlSGFzLmpzPzI1ZTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE1hcERhdGEgZnJvbSAnLi9fZ2V0TWFwRGF0YS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlSGFzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapCacheHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapCacheSet.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_mapCacheSet.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getMapData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getMapData.js */ \"../../../node_modules/lodash-es/_getMapData.js\");\n\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = (0,_getMapData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapCacheSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGFBQWEsMERBQVU7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlU2V0LmpzP2Q3ZjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE1hcERhdGEgZnJvbSAnLi9fZ2V0TWFwRGF0YS5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVTZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapCacheSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_mapToArray.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_mapToArray.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapToArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwVG9BcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwVG9BcnJheS5qcz9iZTQ0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcFRvQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_mapToArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_matchesStrictComparable.js": /*!*******************************************************************!*\ !*** ../../../node_modules/lodash-es/_matchesStrictComparable.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (matchesStrictComparable);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxHQUFHO0FBQ2QsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzPzViMzYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_matchesStrictComparable.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_memoizeCapped.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_memoizeCapped.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _memoize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./memoize.js */ \"../../../node_modules/lodash-es/memoize.js\");\n\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = (0,_memoize_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoizeCapped);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWVtb2l6ZUNhcHBlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtQzs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsZUFBZSx1REFBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tZW1vaXplQ2FwcGVkLmpzPzY5ODAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplQ2FwcGVkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_memoizeCapped.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_nativeCreate.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_nativeCreate.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_getNative.js */ \"../../../node_modules/lodash-es/_getNative.js\");\n\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object, 'create');\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nativeCreate);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdDOztBQUV4QztBQUNBLG1CQUFtQix5REFBUzs7QUFFNUIsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUNyZWF0ZS5qcz9hNWQwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_nativeCreate.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_nativeKeys.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_nativeKeys.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_overArg.js */ \"../../../node_modules/lodash-es/_overArg.js\");\n\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object.keys, Object);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nativeKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvQzs7QUFFcEM7QUFDQSxpQkFBaUIsdURBQU87O0FBRXhCLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzPzY5MDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_nativeKeys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_nativeKeysIn.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_nativeKeysIn.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nativeKeysIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanM/Zjk1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_nativeKeysIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_nodeUtil.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_nodeUtil.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_freeGlobal.js */ \"../../../node_modules/lodash-es/_freeGlobal.js\");\n\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nodeUtil);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEM7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLDhEQUFrQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixDQUFDOztBQUVELGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcz9kZTNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_nodeUtil.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_objectToString.js": /*!**********************************************************!*\ !*** ../../../node_modules/lodash-es/_objectToString.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (objectToString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcz9hZGQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1N0cmluZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_objectToString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_overArg.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_overArg.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (overArg);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanM/MDQ5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_overArg.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_overRest.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_overRest.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _apply_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_apply.js */ \"../../../node_modules/lodash-es/_apply.js\");\n\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return (0,_apply_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(func, this, otherArgs);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (overRest);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFLO0FBQ2hCO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzPzhhYjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlclJlc3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_overRest.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_root.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/_root.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_freeGlobal.js */ \"../../../node_modules/lodash-es/_freeGlobal.js\");\n\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] || freeSelf || Function('return this')();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (root);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBLFdBQVcsc0RBQVU7O0FBRXJCLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzP2RjNDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_root.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_safeGet.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/_safeGet.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (safeGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2FmZUdldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zYWZlR2V0LmpzPzQ5ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhZmVHZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_safeGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_setCacheAdd.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_setCacheAdd.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setCacheAdd);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanM/ODdmOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0Q2FjaGVBZGQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_setCacheAdd.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_setCacheHas.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_setCacheHas.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setCacheHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVIYXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVIYXMuanM/MGYxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlSGFzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_setCacheHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_setToArray.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_setToArray.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9BcnJheS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9BcnJheS5qcz82ZDE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_setToArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_setToString.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_setToString.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseSetToString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseSetToString.js */ \"../../../node_modules/lodash-es/_baseSetToString.js\");\n/* harmony import */ var _shortOut_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_shortOut.js */ \"../../../node_modules/lodash-es/_shortOut.js\");\n\n\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = (0,_shortOut_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_baseSetToString_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9TdHJpbmcuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9EO0FBQ2Q7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQSxrQkFBa0Isd0RBQVEsQ0FBQywyREFBZTs7QUFFMUMsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzPzZmYzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_setToString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_shortOut.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_shortOut.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (shortOut);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanM/ZDhkYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_shortOut.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stackClear.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_stackClear.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../../../node_modules/lodash-es/_ListCache.js\");\n\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n this.size = 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stackClear);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tDbGVhci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixxREFBUztBQUMvQjtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0NsZWFyLmpzP2U0NzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0NsZWFyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stackClear.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stackDelete.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_stackDelete.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stackDelete);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tEZWxldGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcz84ZDkyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stackDelete.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stackGet.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_stackGet.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stackGet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tHZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrR2V0LmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0dldDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stackGet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stackHas.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_stackHas.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stackHas);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrSGFzLmpzP2Y5NjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tIYXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stackHas.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stackSet.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_stackSet.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _ListCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ListCache.js */ \"../../../node_modules/lodash-es/_ListCache.js\");\n/* harmony import */ var _Map_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_Map.js */ \"../../../node_modules/lodash-es/_Map.js\");\n/* harmony import */ var _MapCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_MapCache.js */ \"../../../node_modules/lodash-es/_MapCache.js\");\n\n\n\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof _ListCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]) {\n var pairs = data.__data__;\n if (!_Map_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new _MapCache_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stackSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tTZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3QztBQUNaO0FBQ1U7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsR0FBRztBQUNkLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscURBQVM7QUFDL0I7QUFDQSxTQUFTLCtDQUFHO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isb0RBQVE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tTZXQuanM/NTIxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stackSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_strictIndexOf.js": /*!*********************************************************!*\ !*** ../../../node_modules/lodash-es/_strictIndexOf.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (strictIndexOf);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaWN0SW5kZXhPZi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEdBQUc7QUFDZCxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpY3RJbmRleE9mLmpzP2IxOTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpY3RJbmRleE9mO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_strictIndexOf.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stringSize.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/_stringSize.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _asciiSize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_asciiSize.js */ \"../../../node_modules/lodash-es/_asciiSize.js\");\n/* harmony import */ var _hasUnicode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_hasUnicode.js */ \"../../../node_modules/lodash-es/_hasUnicode.js\");\n/* harmony import */ var _unicodeSize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_unicodeSize.js */ \"../../../node_modules/lodash-es/_unicodeSize.js\");\n\n\n\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return (0,_hasUnicode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(string)\n ? (0,_unicodeSize_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(string)\n : (0,_asciiSize_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(string);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stringSize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nU2l6ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDO0FBQ0U7QUFDRTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTLDBEQUFVO0FBQ25CLE1BQU0sMkRBQVc7QUFDakIsTUFBTSx5REFBUztBQUNmOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpbmdTaXplLmpzP2ZiMWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzY2lpU2l6ZSBmcm9tICcuL19hc2NpaVNpemUuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgdW5pY29kZVNpemUgZnJvbSAnLi9fdW5pY29kZVNpemUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlU2l6ZShzdHJpbmcpXG4gICAgOiBhc2NpaVNpemUoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5nU2l6ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stringSize.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_stringToPath.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/_stringToPath.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _memoizeCapped_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_memoizeCapped.js */ \"../../../node_modules/lodash-es/_memoizeCapped.js\");\n\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = (0,_memoizeCapped_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stringToPath);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nVG9QYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdEOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsbUJBQW1CLDZEQUFhO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcz80N2U5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZW1vaXplQ2FwcGVkIGZyb20gJy4vX21lbW9pemVDYXBwZWQuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ1RvUGF0aDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_stringToPath.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_toKey.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/_toKey.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9LZXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLGVBQWU7QUFDNUI7QUFDQTtBQUNBLGtDQUFrQyx3REFBUTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcz9lYmRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvS2V5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_toKey.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_toSource.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/_toSource.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toSource);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanM/YjE0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU291cmNlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_toSource.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_trimmedEndIndex.js": /*!***********************************************************!*\ !*** ../../../node_modules/lodash-es/_trimmedEndIndex.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (trimmedEndIndex);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdHJpbW1lZEVuZEluZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsZUFBZSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RyaW1tZWRFbmRJbmRleC5qcz81MTU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdHJpbW1lZEVuZEluZGV4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_trimmedEndIndex.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/_unicodeSize.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/_unicodeSize.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (unicodeSize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdW5pY29kZVNpemUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3VuaWNvZGVTaXplLmpzPzZiNTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbnZhciByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggW3N0cmluZyBzeW1ib2xzXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlKS4gKi9cbnZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBzaXplIG9mIGEgVW5pY29kZSBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVNpemUoc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSByZVVuaWNvZGUubGFzdEluZGV4ID0gMDtcbiAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICArK3Jlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bmljb2RlU2l6ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/_unicodeSize.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/clone.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/clone.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseClone.js */ \"../../../node_modules/lodash-es/_baseClone.js\");\n\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, CLONE_SYMBOLS_FLAG);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jbG9uZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3Qzs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVEsSUFBSSxRQUFRO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMseURBQVM7QUFDbEI7O0FBRUEsaUVBQWUsS0FBSyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY2xvbmUuanM/NjE5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2hhbGxvdyBjbG9uZSBvZiBgdmFsdWVgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZVxuICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwczovL21kbi5pby9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobSlcbiAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcyxcbiAqIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZFxuICogYXJyYXlzLiBUaGUgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgYXJndW1lbnRzYCBvYmplY3RzIGFyZSBjbG9uZWRcbiAqIGFzIHBsYWluIG9iamVjdHMuIEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2hcbiAqIGFzIGVycm9yIG9iamVjdHMsIGZ1bmN0aW9ucywgRE9NIG5vZGVzLCBhbmQgV2Vha01hcHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZURlZXBcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gKlxuICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHZhbHVlKSB7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/clone.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/cloneDeep.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/cloneDeep.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseClone.js */ \"../../../node_modules/lodash-es/_baseClone.js\");\n\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneDeep);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jbG9uZURlZXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUSxJQUFJLFFBQVE7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5REFBUztBQUNsQjs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jbG9uZURlZXAuanM/YTBhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZVxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVEZWVwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/cloneDeep.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/constant.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/constant.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQSxZQUFZLFFBQVEsSUFBSSxRQUFRO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcz9kOWE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/constant.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/defaults.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/defaults.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseRest.js */ \"../../../node_modules/lodash-es/_baseRest.js\");\n/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eq.js */ \"../../../node_modules/lodash-es/eq.js\");\n/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isIterateeCall.js */ \"../../../node_modules/lodash-es/_isIterateeCall.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9kZWZhdWx0cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFzQztBQUNiO0FBQ3lCO0FBQ2pCOztBQUVqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsV0FBVztBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUTtBQUNoRCxXQUFXO0FBQ1g7QUFDQSxlQUFlLHdEQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLDhEQUFjO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixzREFBTTtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsa0RBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZGVmYXVsdHMuanM/Yjk2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/defaults.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/eq.js": /*!*********************************************!*\ !*** ../../../node_modules/lodash-es/eq.js ***! \*********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (eq);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLEVBQUUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzPzI5OWEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/eq.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/filter.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/filter.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayFilter.js */ \"../../../node_modules/lodash-es/_arrayFilter.js\");\n/* harmony import */ var _baseFilter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseFilter.js */ \"../../../node_modules/lodash-es/_baseFilter.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection) ? _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : _baseFilter_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(predicate, 3));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (filter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maWx0ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEM7QUFDRjtBQUNJO0FBQ1g7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sNkNBQTZDO0FBQ3BELE9BQU87QUFDUDtBQUNBO0FBQ0EsaUNBQWlDLG1CQUFtQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QztBQUNBO0FBQ0E7QUFDQSxhQUFhLHVEQUFPLGVBQWUsdURBQVcsR0FBRyxzREFBVTtBQUMzRCwwQkFBMEIsNERBQVk7QUFDdEM7O0FBRUEsaUVBQWUsTUFBTSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZmlsdGVyLmpzPzAwMmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlRmlsdGVyIGZyb20gJy4vX2Jhc2VGaWx0ZXIuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqIEBzZWUgXy5yZWplY3RcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaWx0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/filter.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/find.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/find.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _createFind_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createFind.js */ \"../../../node_modules/lodash-es/_createFind.js\");\n/* harmony import */ var _findIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./findIndex.js */ \"../../../node_modules/lodash-es/findIndex.js\");\n\n\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = (0,_createFind_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_findIndex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (find);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQztBQUNIOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsT0FBTyw4Q0FBOEM7QUFDckQsT0FBTywrQ0FBK0M7QUFDdEQsT0FBTztBQUNQO0FBQ0E7QUFDQSwrQkFBK0Isb0JBQW9CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBEQUFVLENBQUMscURBQVM7O0FBRS9CLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZpbmQuanM/YTQ0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlRmluZCBmcm9tICcuL19jcmVhdGVGaW5kLmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/find.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/findIndex.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/findIndex.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFindIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseFindIndex.js */ \"../../../node_modules/lodash-es/_baseFindIndex.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _toInteger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toInteger.js */ \"../../../node_modules/lodash-es/toInteger.js\");\n\n\n\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : (0,_toInteger_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return (0,_baseFindIndex_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(array, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(predicate, 3), index);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (findIndex);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maW5kSW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRDtBQUNGO0FBQ1A7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxPQUFPLG9DQUFvQztBQUMzQyxPQUFPLG9DQUFvQztBQUMzQyxPQUFPO0FBQ1A7QUFDQTtBQUNBLG9DQUFvQyw0QkFBNEI7QUFDaEU7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlDQUFpQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MseURBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsU0FBUyw2REFBYSxRQUFRLDREQUFZO0FBQzFDOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZpbmRJbmRleC5qcz9iYjgxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRmluZEluZGV4IGZyb20gJy4vX2Jhc2VGaW5kSW5kZXguanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRJbmRleDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/findIndex.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/flatten.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/flatten.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseFlatten.js */ \"../../../node_modules/lodash-es/_baseFlatten.js\");\n\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, 1) : [];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mbGF0dGVuLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMkRBQVc7QUFDN0I7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZmxhdHRlbi5qcz8yZjFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/flatten.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/forEach.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/forEach.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayEach.js */ \"../../../node_modules/lodash-es/_arrayEach.js\");\n/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseEach.js */ \"../../../node_modules/lodash-es/_baseEach.js\");\n/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_castFunction.js */ \"../../../node_modules/lodash-es/_castFunction.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(iteratee));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JFYWNoLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDO0FBQ0Y7QUFDUTtBQUNYOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsVUFBVTtBQUNyQixhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsZUFBZSxnQkFBZ0I7QUFDL0I7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsYUFBYSx1REFBTyxlQUFlLHFEQUFTLEdBQUcsb0RBQVE7QUFDdkQsMEJBQTBCLDREQUFZO0FBQ3RDOztBQUVBLGlFQUFlLE9BQU8sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZvckVhY2guanM/ZmM3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGNhc3RGdW5jdGlvbiBmcm9tICcuL19jYXN0RnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIGVsZW1lbnQuXG4gKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBhcmUgaXRlcmF0ZWQgbGlrZSBhcnJheXMuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNlIGBfLmZvckluYFxuICogb3IgYF8uZm9yT3duYCBmb3Igb2JqZWN0IGl0ZXJhdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAYWxpYXMgZWFjaFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKiBAc2VlIF8uZm9yRWFjaFJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZm9yRWFjaChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyBgMWAgdGhlbiBgMmAuXG4gKlxuICogXy5mb3JFYWNoKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICogICBjb25zb2xlLmxvZyhrZXkpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUVhY2ggOiBiYXNlRWFjaDtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgY2FzdEZ1bmN0aW9uKGl0ZXJhdGVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvckVhY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/forEach.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/forIn.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/forIn.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseFor.js */ \"../../../node_modules/lodash-es/_baseFor.js\");\n/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_castFunction.js */ \"../../../node_modules/lodash-es/_castFunction.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratee), _keysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JJbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW9DO0FBQ1U7QUFDYjs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdURBQU8sU0FBUyw0REFBWSxZQUFZLGtEQUFNO0FBQ3BEOztBQUVBLGlFQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZvckluLmpzP2JkNmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/forIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/forOwn.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/forOwn.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseForOwn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseForOwn.js */ \"../../../node_modules/lodash-es/_baseForOwn.js\");\n/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_castFunction.js */ \"../../../node_modules/lodash-es/_castFunction.js\");\n\n\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && (0,_baseForOwn_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratee));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forOwn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JPd24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ0k7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwwREFBVSxTQUFTLDREQUFZO0FBQ2xEOztBQUVBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Zvck93bi5qcz9iMWRmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNhc3RGdW5jdGlvbiBmcm9tICcuL19jYXN0RnVuY3Rpb24uanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFuZFxuICogaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gKiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9yT3duUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5mb3JPd24obmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICogICBjb25zb2xlLmxvZyhrZXkpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKS5cbiAqL1xuZnVuY3Rpb24gZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duKG9iamVjdCwgY2FzdEZ1bmN0aW9uKGl0ZXJhdGVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvck93bjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/forOwn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/get.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/get.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseGet.js */ \"../../../node_modules/lodash-es/_baseGet.js\");\n\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : (0,_baseGet_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (get);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsR0FBRztBQUNkLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0Esa0JBQWtCLFFBQVEsT0FBTyxVQUFVO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsdURBQU87QUFDbkQ7QUFDQTs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanM/OWU4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUdldCBmcm9tICcuL19iYXNlR2V0LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/get.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/has.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/has.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseHas_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseHas.js */ \"../../../node_modules/lodash-es/_baseHas.js\");\n/* harmony import */ var _hasPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_hasPath.js */ \"../../../node_modules/lodash-es/_hasPath.js\");\n\n\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && (0,_hasPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path, _baseHas_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (has);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9DO0FBQ0E7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsY0FBYztBQUN6QixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLGtCQUFrQixPQUFPO0FBQ3pCLDBCQUEwQixnQkFBZ0IsUUFBUSxHQUFHO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsdURBQU8sZUFBZSxtREFBTztBQUN4RDs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXMuanM/YzcyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUhhcyBmcm9tICcuL19iYXNlSGFzLmpzJztcbmltcG9ydCBoYXNQYXRoIGZyb20gJy4vX2hhc1BhdGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAqIHZhciBvdGhlciA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/has.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/hasIn.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/hasIn.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseHasIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseHasIn.js */ \"../../../node_modules/lodash-es/_baseHasIn.js\");\n/* harmony import */ var _hasPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_hasPath.js */ \"../../../node_modules/lodash-es/_hasPath.js\");\n\n\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && (0,_hasPath_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, path, _baseHasIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXNJbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7QUFDSjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0EsMkJBQTJCLGdCQUFnQixRQUFRLEdBQUc7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1REFBTyxlQUFlLHFEQUFTO0FBQzFEOztBQUVBLGlFQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2hhc0luLmpzPzYzNzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VIYXNJbiBmcm9tICcuL19iYXNlSGFzSW4uanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzSW47XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/hasIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/identity.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/identity.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcz8zZWE3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/identity.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isArguments.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/isArguments.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIsArguments.js */ \"../../../node_modules/lodash-es/_baseIsArguments.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = (0,_baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function() { return arguments; }()) ? _baseIsArguments_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : function(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArguments);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFDUDs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG1CQUFtQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLCtEQUFlLGNBQWMsbUJBQW1CLE1BQU0sMkRBQWU7QUFDdkYsU0FBUyw0REFBWTtBQUNyQjtBQUNBOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzPzhhZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isArguments.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isArray.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/isArray.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsT0FBTyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcz82ZjIzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isArrayLike.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/isArrayLike.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isFunction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isFunction.js */ \"../../../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isLength.js */ \"../../../node_modules/lodash-es/isLength.js\");\n\n\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.length) && !(0,_isFunction_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLike);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUM7QUFDSjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix3REFBUSxtQkFBbUIsMERBQVU7QUFDL0Q7O0FBRUEsaUVBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanM/YTZkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isArrayLike.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isArrayLikeObject.js": /*!************************************************************!*\ !*** ../../../node_modules/lodash-es/isArrayLikeObject.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZU9iamVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMkM7QUFDRTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNERBQVksV0FBVywyREFBVztBQUMzQzs7QUFFQSxpRUFBZSxpQkFBaUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlT2JqZWN0LmpzP2M1OGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2VPYmplY3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isArrayLikeObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isBuffer.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/isBuffer.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n/* harmony import */ var _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stubFalse.js */ \"../../../node_modules/lodash-es/stubFalse.js\");\n\n\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || _stubFalse_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isBuffer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEI7QUFDUzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsdURBQVc7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxxREFBUzs7QUFFMUMsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanM/MDViYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isBuffer.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isEmpty.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/isEmpty.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseKeys_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_baseKeys.js */ \"../../../node_modules/lodash-es/_baseKeys.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isArguments.js */ \"../../../node_modules/lodash-es/isArguments.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_isPrototype.js */ \"../../../node_modules/lodash-es/_isPrototype.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isTypedArray.js */ \"../../../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) &&\n ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) || (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(value) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value))) {\n return !value.length;\n }\n var tag = (0,_getTag_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if ((0,_isPrototype_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(value)) {\n return !(0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isEmpty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VtcHR5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFzQztBQUNKO0FBQ1M7QUFDUjtBQUNRO0FBQ047QUFDTztBQUNDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDJEQUFXO0FBQ2pCLE9BQU8sdURBQU87QUFDZCxRQUFRLHdEQUFRLFdBQVcsNERBQVksV0FBVywyREFBVztBQUM3RDtBQUNBO0FBQ0EsWUFBWSxzREFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLDJEQUFXO0FBQ2pCLFlBQVksd0RBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0VtcHR5LmpzPzczZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRW1wdHk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isEmpty.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isFunction.js": /*!*****************************************************!*\ !*** ../../../node_modules/lodash-es/isFunction.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n\n\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isFunction);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQztBQUNMOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sd0RBQVE7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMERBQVU7QUFDdEI7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzPzFkM2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isFunction.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isLength.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/isLength.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isLength);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanM/Njc0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isLength.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isMap.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/isMap.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIsMap.js */ \"../../../node_modules/lodash-es/_baseIsMap.js\");\n/* harmony import */ var _baseUnary_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseUnary.js */ \"../../../node_modules/lodash-es/_baseUnary.js\");\n/* harmony import */ var _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nodeUtil.js */ \"../../../node_modules/lodash-es/_nodeUtil.js\");\n\n\n\n\n/* Node.js helper references. */\nvar nodeIsMap = _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? (0,_baseUnary_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodeIsMap) : _baseIsMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc01hcC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDO0FBQ0E7QUFDRjs7QUFFdEM7QUFDQSxnQkFBZ0Isb0RBQVEsSUFBSSwwREFBYzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5REFBUyxjQUFjLHFEQUFTOztBQUV4RCxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc01hcC5qcz85ZGFmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlSXNNYXAgZnJvbSAnLi9fYmFzZUlzTWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isMap.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isObject.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/isObject.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzPzVhYjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isObjectLike.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/isObjectLike.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isObjectLike);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcz83MDk3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isObjectLike.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isPlainObject.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/isPlainObject.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_getPrototype.js */ \"../../../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) != objectTag) {\n return false;\n }\n var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMEM7QUFDSTtBQUNEOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixnQkFBZ0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw0REFBWSxXQUFXLDBEQUFVO0FBQ3hDO0FBQ0E7QUFDQSxjQUFjLDREQUFZO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanM/NmNkMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isPlainObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isSet.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/isSet.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsSet_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIsSet.js */ \"../../../node_modules/lodash-es/_baseIsSet.js\");\n/* harmony import */ var _baseUnary_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseUnary.js */ \"../../../node_modules/lodash-es/_baseUnary.js\");\n/* harmony import */ var _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nodeUtil.js */ \"../../../node_modules/lodash-es/_nodeUtil.js\");\n\n\n\n\n/* Node.js helper references. */\nvar nodeIsSet = _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? (0,_baseUnary_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodeIsSet) : _baseIsSet_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSet);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1NldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDO0FBQ0E7QUFDRjs7QUFFdEM7QUFDQSxnQkFBZ0Isb0RBQVEsSUFBSSwwREFBYzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5REFBUyxjQUFjLHFEQUFTOztBQUV4RCxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1NldC5qcz83ZTc2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlSXNTZXQgZnJvbSAnLi9fYmFzZUlzU2V0LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbmV4cG9ydCBkZWZhdWx0IGlzU2V0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isSet.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isString.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/isString.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!(0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value) == stringTag);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N0cmluZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBDO0FBQ1A7QUFDVTs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdURBQU8sV0FBVyw0REFBWSxXQUFXLDBEQUFVO0FBQ3pEOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3RyaW5nLmpzPzZlZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmluZztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isSymbol.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/isSymbol.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseGetTag.js */ \"../../../node_modules/lodash-es/_baseGetTag.js\");\n/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObjectLike.js */ \"../../../node_modules/lodash-es/isObjectLike.js\");\n\n\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value) == symbolTag);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMEM7QUFDRzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssNERBQVksV0FBVywwREFBVTtBQUN0Qzs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcz9mY2NmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isSymbol.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isTypedArray.js": /*!*******************************************************!*\ !*** ../../../node_modules/lodash-es/isTypedArray.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseIsTypedArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseIsTypedArray.js */ \"../../../node_modules/lodash-es/_baseIsTypedArray.js\");\n/* harmony import */ var _baseUnary_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseUnary.js */ \"../../../node_modules/lodash-es/_baseUnary.js\");\n/* harmony import */ var _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_nodeUtil.js */ \"../../../node_modules/lodash-es/_nodeUtil.js\");\n\n\n\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] && _nodeUtil_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? (0,_baseUnary_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(nodeIsTypedArray) : _baseIsTypedArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isTypedArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFzRDtBQUNkO0FBQ0Y7O0FBRXRDO0FBQ0EsdUJBQXVCLG9EQUFRLElBQUksaUVBQXFCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHlEQUFTLHFCQUFxQiw0REFBZ0I7O0FBRXBGLGlFQUFlLFlBQVksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcz8wNjcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isTypedArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/isUndefined.js": /*!******************************************************!*\ !*** ../../../node_modules/lodash-es/isUndefined.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1VuZGVmaW5lZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1VuZGVmaW5lZC5qcz80ZDA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1VuZGVmaW5lZCh2b2lkIDApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNVbmRlZmluZWQobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNVbmRlZmluZWQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/isUndefined.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/keys.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/keys.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayLikeKeys.js */ \"../../../node_modules/lodash-es/_arrayLikeKeys.js\");\n/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseKeys.js */ \"../../../node_modules/lodash-es/_baseKeys.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n\n\n\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBZ0Q7QUFDVjtBQUNLOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsMkRBQVcsV0FBVyw2REFBYSxXQUFXLHdEQUFRO0FBQy9EOztBQUVBLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanM/Nzk5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/keys.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/keysIn.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/keysIn.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayLikeKeys.js */ \"../../../node_modules/lodash-es/_arrayLikeKeys.js\");\n/* harmony import */ var _baseKeysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseKeysIn.js */ \"../../../node_modules/lodash-es/_baseKeysIn.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n\n\n\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, true) : (0,_baseKeysIn_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keysIn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRDtBQUNOO0FBQ0M7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDJEQUFXLFdBQVcsNkRBQWEsaUJBQWlCLDBEQUFVO0FBQ3ZFOztBQUVBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcz83ODc0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzSW4gZnJvbSAnLi9fYmFzZUtleXNJbi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzSW47XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/keysIn.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/last.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/last.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (last);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sYXN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2xhc3QuanM/OWZkYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGFzdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/last.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/map.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/map.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayMap.js */ \"../../../node_modules/lodash-es/_arrayMap.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseMap.js */ \"../../../node_modules/lodash-es/_baseMap.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(iteratee, 3));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDUTtBQUNWO0FBQ0Q7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLFVBQVU7QUFDckIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLE9BQU8sa0JBQWtCO0FBQ3pCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdURBQU8sZUFBZSxvREFBUSxHQUFHLG1EQUFPO0FBQ3JELDBCQUEwQiw0REFBWTtBQUN0Qzs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXAuanM/MmY0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VNYXAgZnJvbSAnLi9fYmFzZU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdXG4gKlxuICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICovXG5mdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/map.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/mapValues.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/mapValues.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseAssignValue.js */ \"../../../node_modules/lodash-es/_baseAssignValue.js\");\n/* harmony import */ var _baseForOwn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseForOwn.js */ \"../../../node_modules/lodash-es/_baseForOwn.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n\n\n\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(iteratee, 3);\n\n (0,_baseForOwn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, function(value, key, object) {\n (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mapValues);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXBWYWx1ZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFvRDtBQUNWO0FBQ0k7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsOEJBQThCO0FBQ2hELGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esb0NBQW9DLGVBQWU7QUFDbkQsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsYUFBYSw0REFBWTs7QUFFekIsRUFBRSwwREFBVTtBQUNaLElBQUksK0RBQWU7QUFDbkIsR0FBRztBQUNIO0FBQ0E7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWFwVmFsdWVzLmpzPzdkNzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXG4gKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gKiBAc2VlIF8ubWFwS2V5c1xuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICogfTtcbiAqXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBWYWx1ZXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/mapValues.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/max.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/max.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseExtremum.js */ \"../../../node_modules/lodash-es/_baseExtremum.js\");\n/* harmony import */ var _baseGt_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseGt.js */ \"../../../node_modules/lodash-es/_baseGt.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n\n\n\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? (0,_baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _baseGt_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (max);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE4QztBQUNaO0FBQ0c7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw0REFBWSxRQUFRLG9EQUFRLEVBQUUsa0RBQU07QUFDMUM7QUFDQTs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXguanM/ZmU1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUd0IGZyb20gJy4vX2Jhc2VHdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gOFxuICpcbiAqIF8ubWF4KFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlR3QpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1heDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/max.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/memoize.js": /*!**************************************************!*\ !*** ../../../node_modules/lodash-es/memoize.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _MapCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_MapCache.js */ \"../../../node_modules/lodash-es/_MapCache.js\");\n\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = _MapCache_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZW1vaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNDOztBQUV0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxvREFBUTtBQUNqRDtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLG9EQUFROztBQUV4QixpRUFBZSxPQUFPLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZW1vaXplLmpzPzdmNmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/memoize.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/merge.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/merge.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseMerge_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseMerge.js */ \"../../../node_modules/lodash-es/_baseMerge.js\");\n/* harmony import */ var _createAssigner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createAssigner.js */ \"../../../node_modules/lodash-es/_createAssigner.js\");\n\n\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = (0,_createAssigner_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(object, source, srcIndex) {\n (0,_baseMerge_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, source, srcIndex);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (merge);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZXJnZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7QUFDVTs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsV0FBVztBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRLElBQUksUUFBUTtBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVEsSUFBSSxRQUFRO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUSxnQkFBZ0IsSUFBSSxnQkFBZ0I7QUFDdkQ7QUFDQSxZQUFZLDhEQUFjO0FBQzFCLEVBQUUseURBQVM7QUFDWCxDQUFDOztBQUVELGlFQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL21lcmdlLmpzPzNmNTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/merge.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/min.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/min.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseExtremum.js */ \"../../../node_modules/lodash-es/_baseExtremum.js\");\n/* harmony import */ var _baseLt_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseLt.js */ \"../../../node_modules/lodash-es/_baseLt.js\");\n/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity.js */ \"../../../node_modules/lodash-es/identity.js\");\n\n\n\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? (0,_baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, _identity_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _baseLt_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (min);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE4QztBQUNaO0FBQ0c7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw0REFBWSxRQUFRLG9EQUFRLEVBQUUsa0RBQU07QUFDMUM7QUFDQTs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW4uanM/YTIyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUx0IGZyb20gJy4vX2Jhc2VMdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8ubWluKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/min.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/minBy.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/minBy.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseExtremum.js */ \"../../../node_modules/lodash-es/_baseExtremum.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _baseLt_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseLt.js */ \"../../../node_modules/lodash-es/_baseLt.js\");\n\n\n\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? (0,_baseExtremum_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(array, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratee, 2), _baseLt_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n : undefined;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (minBy);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW5CeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQThDO0FBQ0E7QUFDWjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsVUFBVTtBQUNyQixhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBLG9CQUFvQixRQUFRLElBQUksUUFBUTtBQUN4QztBQUNBLGtDQUFrQyxhQUFhO0FBQy9DLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsTUFBTSw0REFBWSxRQUFRLDREQUFZLGVBQWUsa0RBQU07QUFDM0Q7QUFDQTs7QUFFQSxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW5CeS5qcz8wZmI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTHQgZnJvbSAnLi9fYmFzZUx0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAqXG4gKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1pbkJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKi9cbmZ1bmN0aW9uIG1pbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtaW5CeTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/minBy.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/noop.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/noop.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (noop);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ub29wLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsSUFBSSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbm9vcC5qcz84MmZjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbmV4cG9ydCBkZWZhdWx0IG5vb3A7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/noop.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/now.js": /*!**********************************************!*\ !*** ../../../node_modules/lodash-es/now.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_root.js */ \"../../../node_modules/lodash-es/_root.js\");\n\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return _root_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].Date.now();\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (now);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ub3cuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5REFBYTtBQUN0Qjs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ub3cuanM/N2Q1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbm93O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/now.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/pick.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/pick.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _basePick_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_basePick.js */ \"../../../node_modules/lodash-es/_basePick.js\");\n/* harmony import */ var _flatRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_flatRest.js */ \"../../../node_modules/lodash-es/_flatRest.js\");\n\n\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = (0,_flatRest_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(object, paths) {\n return object == null ? {} : (0,_basePick_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object, paths);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pick);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9waWNrLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzQztBQUNBOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLHNCQUFzQjtBQUNqQyxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVyx3REFBUTtBQUNuQiw2QkFBNkIsRUFBRSx3REFBUTtBQUN2QyxDQUFDOztBQUVELGlFQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3BpY2suanM/Nzc4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVBpY2sgZnJvbSAnLi9fYmFzZVBpY2suanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/pick.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/property.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/property.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseProperty_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseProperty.js */ \"../../../node_modules/lodash-es/_baseProperty.js\");\n/* harmony import */ var _basePropertyDeep_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_basePropertyDeep.js */ \"../../../node_modules/lodash-es/_basePropertyDeep.js\");\n/* harmony import */ var _isKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_isKey.js */ \"../../../node_modules/lodash-es/_isKey.js\");\n/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_toKey.js */ \"../../../node_modules/lodash-es/_toKey.js\");\n\n\n\n\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return (0,_isKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(path) ? (0,_baseProperty_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((0,_toKey_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(path)) : (0,_basePropertyDeep_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(path);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (property);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9wcm9wZXJ0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE4QztBQUNRO0FBQ3RCO0FBQ0E7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxPQUFPLE9BQU8sVUFBVTtBQUN4QixPQUFPLE9BQU87QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFEQUFLLFNBQVMsNERBQVksQ0FBQyxxREFBSyxVQUFVLGdFQUFnQjtBQUNuRTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9wcm9wZXJ0eS5qcz84MDhlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHlEZWVwIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eURlZXAuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/property.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/range.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/range.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _createRange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_createRange.js */ \"../../../node_modules/lodash-es/_createRange.js\");\n\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = (0,_createRange_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (range);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9yYW5nZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwyREFBVzs7QUFFdkIsaUVBQWUsS0FBSyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcmFuZ2UuanM/NjVlOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlUmFuZ2UgZnJvbSAnLi9fY3JlYXRlUmFuZ2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/range.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/reduce.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/reduce.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayReduce_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_arrayReduce.js */ \"../../../node_modules/lodash-es/_arrayReduce.js\");\n/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_baseEach.js */ \"../../../node_modules/lodash-es/_baseEach.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _baseReduce_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseReduce.js */ \"../../../node_modules/lodash-es/_baseReduce.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n\n\n\n\n\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection) ? _arrayReduce_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : _baseReduce_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n initAccum = arguments.length < 3;\n\n return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(iteratee, 4), accumulator, initAccum, _baseEach_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (reduce);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9yZWR1Y2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTRDO0FBQ047QUFDUTtBQUNKO0FBQ1A7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsVUFBVTtBQUNyQixXQUFXLEdBQUc7QUFDZCxhQUFhLEdBQUc7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsY0FBYyx3QkFBd0I7QUFDdEM7QUFDQTtBQUNBLElBQUksSUFBSTtBQUNSLFdBQVcsOEJBQThCO0FBQ3pDO0FBQ0E7QUFDQSxhQUFhLHVEQUFPLGVBQWUsdURBQVcsR0FBRyxzREFBVTtBQUMzRDs7QUFFQSwwQkFBMEIsNERBQVksdUNBQXVDLG9EQUFRO0FBQ3JGOztBQUVBLGlFQUFlLE1BQU0sRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3JlZHVjZS5qcz85NDVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheVJlZHVjZSBmcm9tICcuL19hcnJheVJlZHVjZS5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZWR1Y2UgZnJvbSAnLi9fYmFzZVJlZHVjZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYCwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gKiB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czpcbiAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gKiBhbmQgYHNvcnRCeWBcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAc2VlIF8ucmVkdWNlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbihzdW0sIG4pIHtcbiAqICAgcmV0dXJuIHN1bSArIG47XG4gKiB9LCAwKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiAgIHJldHVybiByZXN1bHQ7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2UgOiBiYXNlUmVkdWNlLFxuICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWR1Y2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/reduce.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/size.js": /*!***********************************************!*\ !*** ../../../node_modules/lodash-es/size.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseKeys_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_baseKeys.js */ \"../../../node_modules/lodash-es/_baseKeys.js\");\n/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_getTag.js */ \"../../../node_modules/lodash-es/_getTag.js\");\n/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArrayLike.js */ \"../../../node_modules/lodash-es/isArrayLike.js\");\n/* harmony import */ var _isString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isString.js */ \"../../../node_modules/lodash-es/isString.js\");\n/* harmony import */ var _stringSize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_stringSize.js */ \"../../../node_modules/lodash-es/_stringSize.js\");\n\n\n\n\n\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(collection)) {\n return (0,_isString_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(collection) ? (0,_stringSize_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(collection) : collection.length;\n }\n var tag = (0,_getTag_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(collection).length;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (size);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFzQztBQUNKO0FBQ1M7QUFDTjtBQUNLOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwyREFBVztBQUNqQixXQUFXLHdEQUFRLGVBQWUsMERBQVU7QUFDNUM7QUFDQSxZQUFZLHNEQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0RBQVE7QUFDakI7O0FBRUEsaUVBQWUsSUFBSSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc2l6ZS5qcz83ZmZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgc3RyaW5nU2l6ZSBmcm9tICcuL19zdHJpbmdTaXplLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gKiB2YWx1ZXMgb3IgdGhlIG51bWJlciBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHNpemUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8uc2l6ZSgncGViYmxlcycpO1xuICogLy8gPT4gN1xuICovXG5mdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgIHJldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKSA/IHN0cmluZ1NpemUoY29sbGVjdGlvbikgOiBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKGNvbGxlY3Rpb24pO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtcbiAgfVxuICByZXR1cm4gYmFzZUtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaXplO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/size.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/sortBy.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/sortBy.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFlatten_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseFlatten.js */ \"../../../node_modules/lodash-es/_baseFlatten.js\");\n/* harmony import */ var _baseOrderBy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseOrderBy.js */ \"../../../node_modules/lodash-es/_baseOrderBy.js\");\n/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseRest.js */ \"../../../node_modules/lodash-es/_baseRest.js\");\n/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_isIterateeCall.js */ \"../../../node_modules/lodash-es/_isIterateeCall.js\");\n\n\n\n\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return (0,_baseOrderBy_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(collection, (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(iteratees, 1), []);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (sortBy);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zb3J0QnkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEM7QUFDQTtBQUNOO0FBQ1k7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLE9BQU8sNkJBQTZCO0FBQ3BDLE9BQU8sNkJBQTZCO0FBQ3BDLE9BQU8sNkJBQTZCO0FBQ3BDLE9BQU87QUFDUDtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3REFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw4REFBYztBQUNsQztBQUNBLElBQUksdUJBQXVCLDhEQUFjO0FBQ3pDO0FBQ0E7QUFDQSxTQUFTLDJEQUFXLGFBQWEsMkRBQVc7QUFDNUMsQ0FBQzs7QUFFRCxpRUFBZSxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zb3J0QnkuanM/ZTBiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VPcmRlckJ5IGZyb20gJy4vX2Jhc2VPcmRlckJ5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2ZcbiAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJ1IGVhY2ggaXRlcmF0ZWUuIFRoaXMgbWV0aG9kXG4gKiBwZXJmb3JtcyBhIHN0YWJsZSBzb3J0LCB0aGF0IGlzLCBpdCBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIHNvcnQgb3JkZXIgb2ZcbiAqIGVxdWFsIGVsZW1lbnRzLiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDMwIH0sXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH1cbiAqIF07XG4gKlxuICogXy5zb3J0QnkodXNlcnMsIFtmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXI7IH1dKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgMzBdXVxuICpcbiAqIF8uc29ydEJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzRdLCBbJ2Jhcm5leScsIDM2XSwgWydmcmVkJywgMzBdLCBbJ2ZyZWQnLCA0OF1dXG4gKi9cbnZhciBzb3J0QnkgPSBiYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZXMpIHtcbiAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gaXRlcmF0ZWVzLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0pKSB7XG4gICAgaXRlcmF0ZWVzID0gW107XG4gIH0gZWxzZSBpZiAobGVuZ3RoID4gMiAmJiBpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXNbMF0sIGl0ZXJhdGVlc1sxXSwgaXRlcmF0ZWVzWzJdKSkge1xuICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dO1xuICB9XG4gIHJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBiYXNlRmxhdHRlbihpdGVyYXRlZXMsIDEpLCBbXSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc29ydEJ5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/sortBy.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/stubArray.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/stubArray.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViQXJyYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJBcnJheS5qcz85ZWU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/stubArray.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/stubFalse.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/stubFalse.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubFalse);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzPzZiODciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViRmFsc2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/stubFalse.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/toFinite.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/toFinite.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _toNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toNumber.js */ \"../../../node_modules/lodash-es/toNumber.js\");\n\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = (0,_toNumber_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toFinite);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0Zpbml0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0RBQVE7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvRmluaXRlLmpzPzE2NjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9GaW5pdGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/toFinite.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/toInteger.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/toInteger.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _toFinite_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFinite.js */ \"../../../node_modules/lodash-es/toFinite.js\");\n\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = (0,_toFinite_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toInteger);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0ludGVnZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0RBQVE7QUFDdkI7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxTQUFTLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0ludGVnZXIuanM/MTkyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvSW50ZWdlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/toInteger.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/toNumber.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/toNumber.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseTrim_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseTrim.js */ \"../../../node_modules/lodash-es/_baseTrim.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isSymbol.js */ \"../../../node_modules/lodash-es/isSymbol.js\");\n\n\n\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if ((0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value)) {\n return NAN;\n }\n if ((0,_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = (0,_isObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = (0,_baseTrim_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toNumber);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNDO0FBQ0Q7QUFDQTs7QUFFckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0RBQVE7QUFDZDtBQUNBO0FBQ0EsTUFBTSx3REFBUTtBQUNkO0FBQ0EsWUFBWSx3REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0RBQVE7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcz9jOGY1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBiYXNlVHJpbSBmcm9tICcuL19iYXNlVHJpbS5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSBiYXNlVHJpbSh2YWx1ZSk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b051bWJlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/toNumber.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/toPlainObject.js": /*!********************************************************!*\ !*** ../../../node_modules/lodash-es/toPlainObject.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _copyObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_copyObject.js */ \"../../../node_modules/lodash-es/_copyObject.js\");\n/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keysIn.js */ \"../../../node_modules/lodash-es/keysIn.js\");\n\n\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return (0,_copyObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value, (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(value));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toPlainObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1BsYWluT2JqZWN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQztBQUNUOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsV0FBVztBQUNYO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUywwREFBVSxRQUFRLHNEQUFNO0FBQ2pDOztBQUVBLGlFQUFlLGFBQWEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvUGxhaW5PYmplY3QuanM/NWU5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvUGxhaW5PYmplY3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/toPlainObject.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/toString.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/toString.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseToString.js */ \"../../../node_modules/lodash-es/_baseToString.js\");\n\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : (0,_baseToString_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1N0cmluZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsNERBQVk7QUFDMUM7O0FBRUEsaUVBQWUsUUFBUSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanM/NTFhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/toString.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/transform.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/transform.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _arrayEach_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_arrayEach.js */ \"../../../node_modules/lodash-es/_arrayEach.js\");\n/* harmony import */ var _baseCreate_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_baseCreate.js */ \"../../../node_modules/lodash-es/_baseCreate.js\");\n/* harmony import */ var _baseForOwn_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_baseForOwn.js */ \"../../../node_modules/lodash-es/_baseForOwn.js\");\n/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_baseIteratee.js */ \"../../../node_modules/lodash-es/_baseIteratee.js\");\n/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_getPrototype.js */ \"../../../node_modules/lodash-es/_getPrototype.js\");\n/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray.js */ \"../../../node_modules/lodash-es/isArray.js\");\n/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isBuffer.js */ \"../../../node_modules/lodash-es/isBuffer.js\");\n/* harmony import */ var _isFunction_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isFunction.js */ \"../../../node_modules/lodash-es/isFunction.js\");\n/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isObject.js */ \"../../../node_modules/lodash-es/isObject.js\");\n/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isTypedArray.js */ \"../../../node_modules/lodash-es/isTypedArray.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n var isArr = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object),\n isArrLike = isArr || (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object) || (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(object);\n\n iteratee = (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if ((0,_isObject_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(object)) {\n accumulator = (0,_isFunction_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Ctor) ? (0,_baseCreate_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])((0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"] : _baseForOwn_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (transform);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90cmFuc2Zvcm0uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBd0M7QUFDRTtBQUNBO0FBQ0k7QUFDQTtBQUNYO0FBQ0U7QUFDSTtBQUNKO0FBQ1E7O0FBRTdDO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsR0FBRztBQUNkLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxpQkFBaUIsd0JBQXdCO0FBQ3pDO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsV0FBVztBQUNYO0FBQ0E7QUFDQSxjQUFjLHVEQUFPO0FBQ3JCLDJCQUEyQix3REFBUSxZQUFZLDREQUFZOztBQUUzRCxhQUFhLDREQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdEQUFRO0FBQ3JCLG9CQUFvQiwwREFBVSxTQUFTLDBEQUFVLENBQUMsNERBQVk7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscURBQVMsR0FBRyxzREFBVTtBQUNyQztBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RyYW5zZm9ybS5qcz8zOTc4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKipcbiAqIEFuIGFsdGVybmF0aXZlIHRvIGBfLnJlZHVjZWA7IHRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgYG9iamVjdGAgdG8gYSBuZXdcbiAqIGBhY2N1bXVsYXRvcmAgb2JqZWN0IHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBlYWNoIG9mIGl0cyBvd25cbiAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICogcG90ZW50aWFsbHkgbXV0YXRpbmcgdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBJZiBgYWNjdW11bGF0b3JgIGlzIG5vdFxuICogcHJvdmlkZWQsIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGBbW1Byb3RvdHlwZV1dYCB3aWxsIGJlIHVzZWQuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJhbnNmb3JtKFsyLCAzLCA0XSwgZnVuY3Rpb24ocmVzdWx0LCBuKSB7XG4gKiAgIHJlc3VsdC5wdXNoKG4gKj0gbik7XG4gKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICogfSwgW10pO1xuICogLy8gPT4gWzQsIDldXG4gKlxuICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICogfSwge30pO1xuICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgaXNBcnJMaWtlID0gaXNBcnIgfHwgaXNCdWZmZXIob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcblxuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgNCk7XG4gIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgdmFyIEN0b3IgPSBvYmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgIGlmIChpc0Fyckxpa2UpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgfVxuICB9XG4gIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIG9iamVjdCk7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zZm9ybTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/transform.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/union.js": /*!************************************************!*\ !*** ../../../node_modules/lodash-es/union.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseFlatten_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_baseFlatten.js */ \"../../../node_modules/lodash-es/_baseFlatten.js\");\n/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseRest.js */ \"../../../node_modules/lodash-es/_baseRest.js\");\n/* harmony import */ var _baseUniq_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_baseUniq.js */ \"../../../node_modules/lodash-es/_baseUniq.js\");\n/* harmony import */ var _isArrayLikeObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isArrayLikeObject.js */ \"../../../node_modules/lodash-es/isArrayLikeObject.js\");\n\n\n\n\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(function(arrays) {\n return (0,_baseUniq_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arrays, 1, _isArrayLikeObject_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], true));\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (union);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bmlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE0QztBQUNOO0FBQ0E7QUFDaUI7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0RBQVE7QUFDcEIsU0FBUyx3REFBUSxDQUFDLDJEQUFXLFlBQVksNkRBQWlCO0FBQzFELENBQUM7O0FBRUQsaUVBQWUsS0FBSyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdW5pb24uanM/MWU2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/union.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/uniqueId.js": /*!***************************************************!*\ !*** ../../../node_modules/lodash-es/uniqueId.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toString.js */ \"../../../node_modules/lodash-es/toString.js\");\n\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(prefix) + id;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bmlxdWVJZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxQzs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHdEQUFRO0FBQ2pCOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3VuaXF1ZUlkLmpzP2ZjYzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xudmFyIGlkQ291bnRlciA9IDA7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuaXF1ZSBJRC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlxdWVJZCgnY29udGFjdF8nKTtcbiAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAqXG4gKiBfLnVuaXF1ZUlkKCk7XG4gKiAvLyA9PiAnMTA1J1xuICovXG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gIHJldHVybiB0b1N0cmluZyhwcmVmaXgpICsgaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXF1ZUlkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/uniqueId.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/values.js": /*!*************************************************!*\ !*** ../../../node_modules/lodash-es/values.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _baseValues_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseValues.js */ \"../../../node_modules/lodash-es/_baseValues.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keys.js */ \"../../../node_modules/lodash-es/keys.js\");\n\n\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : (0,_baseValues_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(object, (0,_keys_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(object));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (values);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBDO0FBQ2I7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsMERBQVUsU0FBUyxvREFBSTtBQUN0RDs7QUFFQSxpRUFBZSxNQUFNLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy92YWx1ZXMuanM/MTgwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVZhbHVlcyBmcm9tICcuL19iYXNlVmFsdWVzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWx1ZXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/values.js\n"); /***/ }), /***/ "../../../node_modules/lodash-es/zipObject.js": /*!****************************************************!*\ !*** ../../../node_modules/lodash-es/zipObject.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; 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 _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_assignValue.js */ \"../../../node_modules/lodash-es/_assignValue.js\");\n/* harmony import */ var _baseZipObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_baseZipObject.js */ \"../../../node_modules/lodash-es/_baseZipObject.js\");\n\n\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return (0,_baseZipObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props || [], values || [], _assignValue_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (zipObject);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy96aXBPYmplY3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTRDO0FBQ0k7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVMsNkRBQWEsNEJBQTRCLHVEQUFXO0FBQzdEOztBQUVBLGlFQUFlLFNBQVMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3ppcE9iamVjdC5qcz81YTk1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZVppcE9iamVjdCBmcm9tICcuL19iYXNlWmlwT2JqZWN0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZyb21QYWlyc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyB0d28gYXJyYXlzLFxuICogb25lIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjQuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnppcE9iamVjdChbJ2EnLCAnYiddLCBbMSwgMl0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbmZ1bmN0aW9uIHppcE9iamVjdChwcm9wcywgdmFsdWVzKSB7XG4gIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGFzc2lnblZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgemlwT2JqZWN0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/lodash-es/zipObject.js\n"); /***/ }), /***/ "../../../node_modules/mdast-util-from-markdown/dev/lib/index.js": /*!***********************************************************************!*\ !*** ../../../node_modules/mdast-util-from-markdown/dev/lib/index.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"fromMarkdown\": () => (/* binding */ fromMarkdown)\n/* harmony export */ });\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/* harmony import */ var mdast_util_to_string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! mdast-util-to-string */ \"../../../node_modules/mdast-util-to-string/lib/index.js\");\n/* harmony import */ var micromark_lib_parse_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark/lib/parse.js */ \"../../../node_modules/micromark/dev/lib/parse.js\");\n/* harmony import */ var micromark_lib_preprocess_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark/lib/preprocess.js */ \"../../../node_modules/micromark/dev/lib/preprocess.js\");\n/* harmony import */ var micromark_lib_postprocess_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark/lib/postprocess.js */ \"../../../node_modules/micromark/dev/lib/postprocess.js\");\n/* harmony import */ var micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-util-decode-numeric-character-reference */ \"../../../node_modules/micromark-util-decode-numeric-character-reference/dev/index.js\");\n/* harmony import */ var micromark_util_decode_string__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-util-decode-string */ \"../../../node_modules/micromark-util-decode-string/dev/index.js\");\n/* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-util-normalize-identifier */ \"../../../node_modules/micromark-util-normalize-identifier/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var decode_named_character_reference__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! decode-named-character-reference */ \"../../../node_modules/decode-named-character-reference/index.dom.js\");\n/* harmony import */ var unist_util_stringify_position__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! unist-util-stringify-position */ \"../../../node_modules/unist-util-stringify-position/lib/index.js\");\n/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract} Parent\n *\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | undefined | null | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(key: Key) => CompileData[Key]} getData\n * Get data from the key/value store.\n * @property {(key: Key, value?: CompileData[Key]) => void} setData\n * Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n * Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n * Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n * Markdown to parse.\n * @param encoding\n * Character encoding for when `value` is `Buffer`.\n * @param options\n * Configuration.\n * @returns\n * mdast tree.\n */\nconst fromMarkdown =\n /**\n * @type {(\n * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n * ((value: Value, options?: Options | null | undefined) => Root)\n * )}\n */\n (\n /**\n * @param {Value} value\n * @param {Encoding | Options | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n */\n function (value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n\n return compiler(options)(\n (0,micromark_lib_postprocess_js__WEBPACK_IMPORTED_MODULE_1__.postprocess)(\n (0,micromark_lib_parse_js__WEBPACK_IMPORTED_MODULE_2__.parse)(options).document().write((0,micromark_lib_preprocess_js__WEBPACK_IMPORTED_MODULE_3__.preprocess)()(value, encoding, true))\n )\n )\n }\n )\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {type: 'root', children: []}\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n setData,\n getData\n }\n /** @type {Array} */\n const listStack = []\n let index = -1\n\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listOrdered ||\n events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listUnordered\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tail === 'number', 'expected list ot be open')\n index = prepareList(events, tail, index)\n }\n }\n }\n\n index = -1\n\n while (++index < events.length) {\n const handler = config[events[index][0]]\n\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {sliceSerialize: events[index][2].sliceSerialize},\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0 ? events[0][1].start : {line: 1, column: 1, offset: 0}\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {line: 1, column: 1, offset: 0}\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n\n return tree\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n\n while (++index <= length) {\n const event = events[index]\n\n if (\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listUnordered ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listOrdered ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.blockQuote\n ) {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n\n atMarker = undefined\n } else if (event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEndingBlank) {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n\n atMarker = undefined\n }\n } else if (\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemValue ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemMarker ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemPrefix ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemPrefixWhitespace\n ) {\n // Empty.\n } else {\n atMarker = undefined\n }\n\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemPrefix) ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listUnordered ||\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listOrdered))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n\n if (\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding ||\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEndingBlank\n ) {\n if (tailEvent[0] === 'exit') continue\n\n if (lineIndex) {\n events[lineIndex][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEndingBlank\n listSpread = true\n }\n\n tailEvent[1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix ||\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.blockQuotePrefix ||\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.blockQuotePrefixWhitespace ||\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.blockQuoteMarker ||\n tailEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemIndent\n ) {\n // Empty\n } else {\n break\n }\n }\n\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.listItemPrefix) {\n listItem = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }\n // @ts-expect-error: `listItem` is most definitely defined, TS...\n events.splice(index, 0, ['enter', listItem, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Set data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @param {CompileData[Key]} [value]\n * New value.\n * @returns {void}\n * Nothing.\n */\n function setData(key, value) {\n data[key] = value\n }\n\n /**\n * Get data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @returns {CompileData[Key]}\n * Value.\n */\n function getData(key) {\n return data[key]\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Node} create\n * Create a node.\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {void}\n */\n function buffer() {\n this.stack.push({type: 'fragment', children: []})\n }\n\n /**\n * @template {Node} Kind\n * Node type.\n * @this {CompileContext}\n * Context.\n * @param {Kind} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {Kind}\n * The given node.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(parent, 'expected `parent`')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)('children' in parent, 'expected `parent`')\n // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n parent.children.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n // @ts-expect-error: `end` will be patched later.\n node.position = {start: point(token.start)}\n return node\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {Node}\n * The closed node.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected `node`')\n const open = this.tokenStack.pop()\n\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n (0,unist_util_stringify_position__WEBPACK_IMPORTED_MODULE_5__.stringifyPosition)({start: token.start, end: token.end}) +\n '): it’s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type !== 'fragment', 'unexpected fragment `exit`ed')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.position, 'expected `position` to be defined')\n node.position.end = point(token.end)\n return node\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return (0,mdast_util_to_string__WEBPACK_IMPORTED_MODULE_6__.toString)(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n const ancestor = this.stack[this.stack.length - 2]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(ancestor, 'expected nodes on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(ancestor.type === 'list', 'expected list on stack')\n ancestor.start = Number.parseInt(\n this.sliceSerialize(token),\n micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_7__.constants.numericBaseDecimal\n )\n setData('expectingFirstListItemValue')\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'code', 'expected code on stack')\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'code', 'expected code on stack')\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return\n this.buffer()\n setData('flowCodeInside', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'code', 'expected code on stack')\n\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n setData('flowCodeInside')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'code', 'expected code on stack')\n\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'definition', 'expected definition on stack')\n\n node.label = label\n node.identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_8__.normalizeIdentifier)(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'definition', 'expected definition on stack')\n\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'definition', 'expected definition on stack')\n\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'heading', 'expected heading on stack')\n\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n depth === 1 ||\n depth === 2 ||\n depth === 3 ||\n depth === 4 ||\n depth === 5 ||\n depth === 6,\n 'expected `depth` between `1` and `6`'\n )\n\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'heading', 'expected heading on stack')\n\n node.depth =\n this.sliceSerialize(token).charCodeAt(0) === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_9__.codes.equalsTo ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)('children' in node, 'expected parent on stack')\n\n let tail = node.children[node.children.length - 1]\n\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n // @ts-expect-error: we’ll add `end` later.\n tail.position = {start: point(token.start)}\n // @ts-expect-error: Assume `parent` accepts `text`.\n node.children.push(tail)\n }\n\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(tail, 'expected a `node` to be on the stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)('value' in tail, 'expected a `literal` to be on the stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(tail.position, 'expected `node` to have an open position')\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(context, 'expected `node`')\n\n // If we’re at a hard break, include the line ending in there.\n if (getData('atHardBreak')) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)('children' in context, 'expected `parent`')\n const tail = context.children[context.children.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(tail.position, 'expected tail to have a starting position')\n tail.position.end = point(token.end)\n setData('atHardBreak')\n return\n }\n\n if (\n !getData('setextHeadingSlurpLineEnding') &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n setData('atHardBreak', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'html', 'expected html on stack')\n\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'html', 'expected html on stack')\n\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'inlineCode', 'expected inline code on stack')\n\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'link', 'expected link on stack')\n\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'image', 'expected image on stack')\n\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(ancestor, 'expected ancestor on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n ancestor.type === 'image' || ancestor.type === 'link',\n 'expected image or link on stack'\n )\n\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = (0,micromark_util_decode_string__WEBPACK_IMPORTED_MODULE_10__.decodeString)(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_8__.normalizeIdentifier)(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(fragment, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(fragment.type === 'fragment', 'expected fragment on stack')\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n node.type === 'image' || node.type === 'link',\n 'expected image or link on stack'\n )\n\n // Assume a reference.\n setData('inReference', true)\n\n if (node.type === 'link') {\n /** @type {Array} */\n // @ts-expect-error: Assume static phrasing content.\n const children = fragment.children\n\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n node.type === 'image' || node.type === 'link',\n 'expected image or link on stack'\n )\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n node.type === 'image' || node.type === 'link',\n 'expected image or link on stack'\n )\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n setData('inReference')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n setData('referenceType', 'collapsed')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n node.type === 'image' || node.type === 'link',\n 'expected image reference or link reference on stack'\n )\n\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_8__.normalizeIdentifier)(\n this.sliceSerialize(token)\n ).toLowerCase()\n setData('referenceType', 'full')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n token.type === 'characterReferenceMarkerNumeric' ||\n token.type === 'characterReferenceMarkerHexadecimal'\n )\n setData('characterReferenceType', token.type)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = getData('characterReferenceType')\n /** @type {string} */\n let value\n\n if (type) {\n value = (0,micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_11__.decodeNumericCharacterReference)(\n data,\n type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.characterReferenceMarkerNumeric\n ? micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_7__.constants.numericBaseDecimal\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_7__.constants.numericBaseHexadecimal\n )\n setData('characterReferenceType')\n } else {\n const result = (0,decode_named_character_reference__WEBPACK_IMPORTED_MODULE_12__.decodeNamedCharacterReference)(data)\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(result !== false, 'expected reference to decode')\n value = result\n }\n\n const tail = this.stack.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(tail, 'expected `node`')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(tail.position, 'expected `node.position`')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)('value' in tail, 'expected `node.value`')\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'link', 'expected link on stack')\n\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node, 'expected node on stack')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(node.type === 'link', 'expected link on stack')\n\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {type: 'blockquote', children: []}\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {type: 'code', lang: null, meta: null, value: ''}\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {type: 'inlineCode', value: ''}\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {type: 'emphasis', children: []}\n }\n\n /** @returns {Heading} */\n function heading() {\n // @ts-expect-error `depth` will be set later.\n return {type: 'heading', depth: undefined, children: []}\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {type: 'break'}\n }\n\n /** @returns {HTML} */\n function html() {\n return {type: 'html', value: ''}\n }\n\n /** @returns {Image} */\n function image() {\n return {type: 'image', title: null, url: '', alt: null}\n }\n\n /** @returns {Link} */\n function link() {\n return {type: 'link', title: null, url: '', children: []}\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {type: 'paragraph', children: []}\n }\n\n /** @returns {Strong} */\n function strong() {\n return {type: 'strong', children: []}\n }\n\n /** @returns {Text} */\n function text() {\n return {type: 'text', value: ''}\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {type: 'thematicBreak'}\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {line: d.line, column: d.column, offset: d.offset}\n}\n\n/**\n * @param {Config} combined\n * @param {Array>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n let index = -1\n\n while (++index < extensions.length) {\n const value = extensions[index]\n\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n\n for (key in extension) {\n if (own.call(extension, key)) {\n if (key === 'canContainEols') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'transforms') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'enter' || key === 'exit') {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n (0,unist_util_stringify_position__WEBPACK_IMPORTED_MODULE_5__.stringifyPosition)({start: left.start, end: left.end}) +\n '): a different token (`' +\n right.type +\n '`, ' +\n (0,unist_util_stringify_position__WEBPACK_IMPORTED_MODULE_5__.stringifyPosition)({start: right.start, end: right.end}) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n (0,unist_util_stringify_position__WEBPACK_IMPORTED_MODULE_5__.stringifyPosition)({start: right.start, end: right.end}) +\n ') is still open'\n )\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bi9kZXYvbGliL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLDZDQUE2QztBQUMxRCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLHNDQUFzQztBQUNuRDtBQUNBLGFBQWEsd0JBQXdCO0FBQ3JDLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUMsYUFBYSx1Q0FBdUM7QUFDcEQsYUFBYSx5QkFBeUI7QUFDdEMsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSw0QkFBNEI7QUFDekMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSw0QkFBNEI7QUFDekMsYUFBYSwwQkFBMEI7QUFDdkMsYUFBYSx5QkFBeUI7QUFDdEMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSw0QkFBNEI7QUFDekMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSwwQkFBMEI7QUFDdkMsYUFBYSwyQkFBMkI7QUFDeEMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSx3QkFBd0I7QUFDckMsYUFBYSxzQkFBc0I7QUFDbkMsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSxtQ0FBbUM7QUFDaEQ7O0FBRUE7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QixhQUFhLDRCQUE0QjtBQUN6QztBQUNBLGFBQWEsMENBQTBDLHFEQUFxRDtBQUM1Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBLFdBQVcsT0FBTztBQUNs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Q0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcscUNBQXFDO0FBQ2hELGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsV0FBVztBQUN0QixhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0ZBQWlCLEVBQUUsaUNBQWlDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0ZBQWlCLEVBQUUsbUNBQW1DO0FBQzlEO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGdGQUFpQixFQUFFLG1DQUFtQztBQUM5RDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2Rldi9saWIvaW5kZXguanM/ODVlYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRW5jb2Rpbmd9IEVuY29kaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV2ZW50fSBFdmVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5QYXJzZU9wdGlvbnN9IFBhcnNlT3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVmFsdWV9IFZhbHVlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5QYXJlbnR9IFVuaXN0UGFyZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUGhyYXNpbmdDb250ZW50fSBQaHJhc2luZ0NvbnRlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuU3RhdGljUGhyYXNpbmdDb250ZW50fSBTdGF0aWNQaHJhc2luZ0NvbnRlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuQ29udGVudH0gQ29udGVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5CcmVha30gQnJlYWtcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuQmxvY2txdW90ZX0gQmxvY2txdW90ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5Db2RlfSBDb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkRlZmluaXRpb259IERlZmluaXRpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuRW1waGFzaXN9IEVtcGhhc2lzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkhlYWRpbmd9IEhlYWRpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuSFRNTH0gSFRNTFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5JbWFnZX0gSW1hZ2VcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuSW1hZ2VSZWZlcmVuY2V9IEltYWdlUmVmZXJlbmNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLklubGluZUNvZGV9IElubGluZUNvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuTGlua30gTGlua1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5MaW5rUmVmZXJlbmNlfSBMaW5rUmVmZXJlbmNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkxpc3R9IExpc3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuTGlzdEl0ZW19IExpc3RJdGVtXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlBhcmFncmFwaH0gUGFyYWdyYXBoXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuU3Ryb25nfSBTdHJvbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuVGV4dH0gVGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5UaGVtYXRpY0JyZWFrfSBUaGVtYXRpY0JyZWFrXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJlZmVyZW5jZVR5cGV9IFJlZmVyZW5jZVR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuQ29tcGlsZURhdGF9IENvbXBpbGVEYXRhXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7Um9vdCB8IENvbnRlbnR9IE5vZGVcbiAqIEB0eXBlZGVmIHtFeHRyYWN0PE5vZGUsIFVuaXN0UGFyZW50Pn0gUGFyZW50XG4gKlxuICogQHR5cGVkZWYge09taXQ8VW5pc3RQYXJlbnQsICd0eXBlJyB8ICdjaGlsZHJlbic+ICYge3R5cGU6ICdmcmFnbWVudCcsIGNoaWxkcmVuOiBBcnJheTxQaHJhc2luZ0NvbnRlbnQ+fX0gRnJhZ21lbnRcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBUcmFuc2Zvcm1cbiAqICAgRXh0cmEgdHJhbnNmb3JtLCB0byBjaGFuZ2UgdGhlIEFTVCBhZnRlcndhcmRzLlxuICogQHBhcmFtIHtSb290fSB0cmVlXG4gKiAgIFRyZWUgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybnMge1Jvb3QgfCB1bmRlZmluZWQgfCBudWxsIHwgdm9pZH1cbiAqICAgTmV3IHRyZWUgb3Igbm90aGluZyAoaW4gd2hpY2ggY2FzZSB0aGUgY3VycmVudCB0cmVlIGlzIHVzZWQpLlxuICpcbiAqIEBjYWxsYmFjayBIYW5kbGVcbiAqICAgSGFuZGxlIGEgdG9rZW4uXG4gKiBAcGFyYW0ge0NvbXBpbGVDb250ZXh0fSB0aGlzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICogICBDdXJyZW50IHRva2VuLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIEhhbmRsZT59IEhhbmRsZXNcbiAqICAgVG9rZW4gdHlwZXMgbWFwcGluZyB0byBoYW5kbGVzXG4gKlxuICogQGNhbGxiYWNrIE9uRW50ZXJFcnJvclxuICogICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGByaWdodGAgdG9rZW4gaXMgb3BlbiwgYnV0IGl0IGlzIGNsb3NlZCAoYnkgdGhlXG4gKiAgIGBsZWZ0YCB0b2tlbikgb3IgYmVjYXVzZSB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LlxuICogQHBhcmFtIHtPbWl0PENvbXBpbGVDb250ZXh0LCAnc2xpY2VTZXJpYWxpemUnPn0gdGhpc1xuICogICBDb250ZXh0LlxuICogQHBhcmFtIHtUb2tlbiB8IHVuZGVmaW5lZH0gbGVmdFxuICogICBMZWZ0IHRva2VuLlxuICogQHBhcmFtIHtUb2tlbn0gcmlnaHRcbiAqICAgUmlnaHQgdG9rZW4uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqICAgTm90aGluZy5cbiAqXG4gKiBAY2FsbGJhY2sgT25FeGl0RXJyb3JcbiAqICAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBgcmlnaHRgIHRva2VuIGlzIG9wZW4gYnV0IGl0IGlzIGNsb3NlZCBieVxuICogICBleGl0aW5nIHRoZSBgbGVmdGAgdG9rZW4uXG4gKiBAcGFyYW0ge09taXQ8Q29tcGlsZUNvbnRleHQsICdzbGljZVNlcmlhbGl6ZSc+fSB0aGlzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1Rva2VufSBsZWZ0XG4gKiAgIExlZnQgdG9rZW4uXG4gKiBAcGFyYW0ge1Rva2VufSByaWdodFxuICogICBSaWdodCB0b2tlbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogICBOb3RoaW5nLlxuICpcbiAqIEB0eXBlZGVmIHtbVG9rZW4sIE9uRW50ZXJFcnJvciB8IHVuZGVmaW5lZF19IFRva2VuVHVwbGVcbiAqICAgT3BlbiB0b2tlbiBvbiB0aGUgc3RhY2ssIHdpdGggYW4gb3B0aW9uYWwgZXJyb3IgaGFuZGxlciBmb3Igd2hlblxuICogICB0aGF0IHRva2VuIGlzbuKAmXQgY2xvc2VkIHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ29uZmlnXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKlxuICogICBXZSBoYXZlIG91ciBkZWZhdWx0cywgYnV0IGV4dGVuc2lvbnMgd2lsbCBhZGQgbW9yZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gY2FuQ29udGFpbkVvbHNcbiAqICAgVG9rZW4gdHlwZXMgd2hlcmUgbGluZSBlbmRpbmdzIGFyZSB1c2VkLlxuICogQHByb3BlcnR5IHtIYW5kbGVzfSBlbnRlclxuICogICBPcGVuaW5nIGhhbmRsZXMuXG4gKiBAcHJvcGVydHkge0hhbmRsZXN9IGV4aXRcbiAqICAgQ2xvc2luZyBoYW5kbGVzLlxuICogQHByb3BlcnR5IHtBcnJheTxUcmFuc2Zvcm0+fSB0cmFuc2Zvcm1zXG4gKiAgIFRyZWUgdHJhbnNmb3Jtcy5cbiAqXG4gKiBAdHlwZWRlZiB7UGFydGlhbDxDb25maWc+fSBFeHRlbnNpb25cbiAqICAgQ2hhbmdlIGhvdyBtYXJrZG93biB0b2tlbnMgZnJvbSBtaWNyb21hcmsgYXJlIHR1cm5lZCBpbnRvIG1kYXN0LlxuICpcbiAqIEB0eXBlZGVmIENvbXBpbGVDb250ZXh0XG4gKiAgIG1kYXN0IGNvbXBpbGVyIGNvbnRleHQuXG4gKiBAcHJvcGVydHkge0FycmF5PE5vZGUgfCBGcmFnbWVudD59IHN0YWNrXG4gKiAgIFN0YWNrIG9mIG5vZGVzLlxuICogQHByb3BlcnR5IHtBcnJheTxUb2tlblR1cGxlPn0gdG9rZW5TdGFja1xuICogICBTdGFjayBvZiB0b2tlbnMuXG4gKiBAcHJvcGVydHkgezxLZXkgZXh0ZW5kcyBrZXlvZiBDb21waWxlRGF0YT4oa2V5OiBLZXkpID0+IENvbXBpbGVEYXRhW0tleV19IGdldERhdGFcbiAqICAgR2V0IGRhdGEgZnJvbSB0aGUga2V5L3ZhbHVlIHN0b3JlLlxuICogQHByb3BlcnR5IHs8S2V5IGV4dGVuZHMga2V5b2YgQ29tcGlsZURhdGE+KGtleTogS2V5LCB2YWx1ZT86IENvbXBpbGVEYXRhW0tleV0pID0+IHZvaWR9IHNldERhdGFcbiAqICAgU2V0IGRhdGEgaW50byB0aGUga2V5L3ZhbHVlIHN0b3JlLlxuICogQHByb3BlcnR5IHsodGhpczogQ29tcGlsZUNvbnRleHQpID0+IHZvaWR9IGJ1ZmZlclxuICogICBDYXB0dXJlIHNvbWUgb2YgdGhlIG91dHB1dCBkYXRhLlxuICogQHByb3BlcnR5IHsodGhpczogQ29tcGlsZUNvbnRleHQpID0+IHN0cmluZ30gcmVzdW1lXG4gKiAgIFN0b3AgY2FwdHVyaW5nIGFuZCBhY2Nlc3MgdGhlIG91dHB1dCBkYXRhLlxuICogQHByb3BlcnR5IHs8S2luZCBleHRlbmRzIE5vZGU+KHRoaXM6IENvbXBpbGVDb250ZXh0LCBub2RlOiBLaW5kLCB0b2tlbjogVG9rZW4sIG9uRXJyb3I/OiBPbkVudGVyRXJyb3IpID0+IEtpbmR9IGVudGVyXG4gKiAgIEVudGVyIGEgdG9rZW4uXG4gKiBAcHJvcGVydHkgeyh0aGlzOiBDb21waWxlQ29udGV4dCwgdG9rZW46IFRva2VuLCBvbkVycm9yPzogT25FeGl0RXJyb3IpID0+IE5vZGV9IGV4aXRcbiAqICAgRXhpdCBhIHRva2VuLlxuICogQHByb3BlcnR5IHtUb2tlbml6ZUNvbnRleHRbJ3NsaWNlU2VyaWFsaXplJ119IHNsaWNlU2VyaWFsaXplXG4gKiAgIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgdG9rZW4uXG4gKiBAcHJvcGVydHkge0NvbmZpZ30gY29uZmlnXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKlxuICogQHR5cGVkZWYgRnJvbU1hcmtkb3duT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uIGZvciBob3cgdG8gYnVpbGQgbWRhc3QuXG4gKiBAcHJvcGVydHkge0FycmF5PEV4dGVuc2lvbiB8IEFycmF5PEV4dGVuc2lvbj4+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW21kYXN0RXh0ZW5zaW9uc11cbiAqICAgRXh0ZW5zaW9ucyBmb3IgdGhpcyB1dGlsaXR5IHRvIGNoYW5nZSBob3cgdG9rZW5zIGFyZSB0dXJuZWQgaW50byBhIHRyZWUuXG4gKlxuICogQHR5cGVkZWYge1BhcnNlT3B0aW9ucyAmIEZyb21NYXJrZG93bk9wdGlvbnN9IE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqL1xuXG4vLyBUbyBkbzogbWljcm9tYXJrOiBjcmVhdGUgYSByZWdpc3RyeSBvZiB0b2tlbnM/XG4vLyBUbyBkbzogbmV4dCBtYWpvcjogZG9u4oCZdCByZXR1cm4gZ2l2ZW4gYE5vZGVgIGZyb20gYGVudGVyYC5cbi8vIFRvIGRvOiBuZXh0IG1ham9yOiByZW1vdmUgc2V0dGVyL2dldHRlci5cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICdtZGFzdC11dGlsLXRvLXN0cmluZydcbmltcG9ydCB7cGFyc2V9IGZyb20gJ21pY3JvbWFyay9saWIvcGFyc2UuanMnXG5pbXBvcnQge3ByZXByb2Nlc3N9IGZyb20gJ21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcydcbmltcG9ydCB7cG9zdHByb2Nlc3N9IGZyb20gJ21pY3JvbWFyay9saWIvcG9zdHByb2Nlc3MuanMnXG5pbXBvcnQge2RlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UnXG5pbXBvcnQge2RlY29kZVN0cmluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZydcbmltcG9ydCB7bm9ybWFsaXplSWRlbnRpZmllcn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7ZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJ2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlJ1xuaW1wb3J0IHtzdHJpbmdpZnlQb3NpdGlvbn0gZnJvbSAndW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24nXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogQHBhcmFtIHZhbHVlXG4gKiAgIE1hcmtkb3duIHRvIHBhcnNlLlxuICogQHBhcmFtIGVuY29kaW5nXG4gKiAgIENoYXJhY3RlciBlbmNvZGluZyBmb3Igd2hlbiBgdmFsdWVgIGlzIGBCdWZmZXJgLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zXG4gKiAgIG1kYXN0IHRyZWUuXG4gKi9cbmV4cG9ydCBjb25zdCBmcm9tTWFya2Rvd24gPVxuICAvKipcbiAgICogQHR5cGUgeyhcbiAgICogICAoKHZhbHVlOiBWYWx1ZSwgZW5jb2Rpbmc6IEVuY29kaW5nLCBvcHRpb25zPzogT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWQpID0+IFJvb3QpICZcbiAgICogICAoKHZhbHVlOiBWYWx1ZSwgb3B0aW9ucz86IE9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiBSb290KVxuICAgKiApfVxuICAgKi9cbiAgKFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VmFsdWV9IHZhbHVlXG4gICAgICogQHBhcmFtIHtFbmNvZGluZyB8IE9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5jb2RpbmddXG4gICAgICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gICAgICogQHJldHVybnMge1Jvb3R9XG4gICAgICovXG4gICAgZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3B0aW9ucyA9IGVuY29kaW5nXG4gICAgICAgIGVuY29kaW5nID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21waWxlcihvcHRpb25zKShcbiAgICAgICAgcG9zdHByb2Nlc3MoXG4gICAgICAgICAgcGFyc2Uob3B0aW9ucykuZG9jdW1lbnQoKS53cml0ZShwcmVwcm9jZXNzKCkodmFsdWUsIGVuY29kaW5nLCB0cnVlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cbiAgKVxuXG4vKipcbiAqIE5vdGUgdGhpcyBjb21waWxlciBvbmx5IHVuZGVyc3RhbmQgY29tcGxldGUgYnVmZmVyaW5nLCBub3Qgc3RyZWFtaW5nLlxuICpcbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICovXG5mdW5jdGlvbiBjb21waWxlcihvcHRpb25zKSB7XG4gIC8qKiBAdHlwZSB7Q29uZmlnfSAqL1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgdHJhbnNmb3JtczogW10sXG4gICAgY2FuQ29udGFpbkVvbHM6IFsnZW1waGFzaXMnLCAnZnJhZ21lbnQnLCAnaGVhZGluZycsICdwYXJhZ3JhcGgnLCAnc3Ryb25nJ10sXG4gICAgZW50ZXI6IHtcbiAgICAgIGF1dG9saW5rOiBvcGVuZXIobGluayksXG4gICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmVudGVyZGF0YSxcbiAgICAgIGF1dG9saW5rRW1haWw6IG9uZW50ZXJkYXRhLFxuICAgICAgYXR4SGVhZGluZzogb3BlbmVyKGhlYWRpbmcpLFxuICAgICAgYmxvY2tRdW90ZTogb3BlbmVyKGJsb2NrUXVvdGUpLFxuICAgICAgY2hhcmFjdGVyRXNjYXBlOiBvbmVudGVyZGF0YSxcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25lbnRlcmRhdGEsXG4gICAgICBjb2RlRmVuY2VkOiBvcGVuZXIoY29kZUZsb3cpLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogYnVmZmVyLFxuICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogYnVmZmVyLFxuICAgICAgY29kZUluZGVudGVkOiBvcGVuZXIoY29kZUZsb3csIGJ1ZmZlciksXG4gICAgICBjb2RlVGV4dDogb3BlbmVyKGNvZGVUZXh0LCBidWZmZXIpLFxuICAgICAgY29kZVRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGRhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgY29kZUZsb3dWYWx1ZTogb25lbnRlcmRhdGEsXG4gICAgICBkZWZpbml0aW9uOiBvcGVuZXIoZGVmaW5pdGlvbiksXG4gICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcixcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBlbXBoYXNpczogb3BlbmVyKGVtcGhhc2lzKSxcbiAgICAgIGhhcmRCcmVha0VzY2FwZTogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBoYXJkQnJlYWtUcmFpbGluZzogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBodG1sRmxvdzogb3BlbmVyKGh0bWwsIGJ1ZmZlciksXG4gICAgICBodG1sRmxvd0RhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgaHRtbFRleHQ6IG9wZW5lcihodG1sLCBidWZmZXIpLFxuICAgICAgaHRtbFRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGltYWdlOiBvcGVuZXIoaW1hZ2UpLFxuICAgICAgbGFiZWw6IGJ1ZmZlcixcbiAgICAgIGxpbms6IG9wZW5lcihsaW5rKSxcbiAgICAgIGxpc3RJdGVtOiBvcGVuZXIobGlzdEl0ZW0pLFxuICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsXG4gICAgICBsaXN0T3JkZXJlZDogb3BlbmVyKGxpc3QsIG9uZW50ZXJsaXN0b3JkZXJlZCksXG4gICAgICBsaXN0VW5vcmRlcmVkOiBvcGVuZXIobGlzdCksXG4gICAgICBwYXJhZ3JhcGg6IG9wZW5lcihwYXJhZ3JhcGgpLFxuICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLFxuICAgICAgcmVmZXJlbmNlU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBzZXRleHRIZWFkaW5nOiBvcGVuZXIoaGVhZGluZyksXG4gICAgICBzdHJvbmc6IG9wZW5lcihzdHJvbmcpLFxuICAgICAgdGhlbWF0aWNCcmVhazogb3BlbmVyKHRoZW1hdGljQnJlYWspXG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSxcbiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLFxuICAgICAgYXV0b2xpbms6IGNsb3NlcigpLFxuICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCxcbiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZXhpdGF1dG9saW5rcHJvdG9jb2wsXG4gICAgICBibG9ja1F1b3RlOiBjbG9zZXIoKSxcbiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLFxuICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSxcbiAgICAgIGNvZGVGZW5jZWQ6IGNsb3NlcihvbmV4aXRjb2RlZmVuY2VkKSxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZTogb25leGl0Y29kZWZlbmNlZGZlbmNlLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbyxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEsXG4gICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRkYXRhLFxuICAgICAgY29kZUluZGVudGVkOiBjbG9zZXIob25leGl0Y29kZWluZGVudGVkKSxcbiAgICAgIGNvZGVUZXh0OiBjbG9zZXIob25leGl0Y29kZXRleHQpLFxuICAgICAgY29kZVRleHREYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgZGF0YTogb25leGl0ZGF0YSxcbiAgICAgIGRlZmluaXRpb246IGNsb3NlcigpLFxuICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsXG4gICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyxcbiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nLFxuICAgICAgZW1waGFzaXM6IGNsb3NlcigpLFxuICAgICAgaGFyZEJyZWFrRXNjYXBlOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSxcbiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSxcbiAgICAgIGh0bWxGbG93OiBjbG9zZXIob25leGl0aHRtbGZsb3cpLFxuICAgICAgaHRtbEZsb3dEYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgaHRtbFRleHQ6IGNsb3NlcihvbmV4aXRodG1sdGV4dCksXG4gICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsXG4gICAgICBpbWFnZTogY2xvc2VyKG9uZXhpdGltYWdlKSxcbiAgICAgIGxhYmVsOiBvbmV4aXRsYWJlbCxcbiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LFxuICAgICAgbGluZUVuZGluZzogb25leGl0bGluZWVuZGluZyxcbiAgICAgIGxpbms6IGNsb3NlcihvbmV4aXRsaW5rKSxcbiAgICAgIGxpc3RJdGVtOiBjbG9zZXIoKSxcbiAgICAgIGxpc3RPcmRlcmVkOiBjbG9zZXIoKSxcbiAgICAgIGxpc3RVbm9yZGVyZWQ6IGNsb3NlcigpLFxuICAgICAgcGFyYWdyYXBoOiBjbG9zZXIoKSxcbiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLFxuICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcsXG4gICAgICByZXNvdXJjZTogb25leGl0cmVzb3VyY2UsXG4gICAgICBzZXRleHRIZWFkaW5nOiBjbG9zZXIob25leGl0c2V0ZXh0aGVhZGluZyksXG4gICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLFxuICAgICAgc2V0ZXh0SGVhZGluZ1RleHQ6IG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0LFxuICAgICAgc3Ryb25nOiBjbG9zZXIoKSxcbiAgICAgIHRoZW1hdGljQnJlYWs6IGNsb3NlcigpXG4gICAgfVxuICB9XG5cbiAgY29uZmlndXJlKGNvbmZpZywgKG9wdGlvbnMgfHwge30pLm1kYXN0RXh0ZW5zaW9ucyB8fCBbXSlcblxuICAvKiogQHR5cGUge0NvbXBpbGVEYXRhfSAqL1xuICBjb25zdCBkYXRhID0ge31cblxuICByZXR1cm4gY29tcGlsZVxuXG4gIC8qKlxuICAgKiBUdXJuIG1pY3JvbWFyayBldmVudHMgaW50byBhbiBtZGFzdCB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4gICAqICAgRXZlbnRzLlxuICAgKiBAcmV0dXJucyB7Um9vdH1cbiAgICogICBtZGFzdCB0cmVlLlxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGlsZShldmVudHMpIHtcbiAgICAvKiogQHR5cGUge1Jvb3R9ICovXG4gICAgbGV0IHRyZWUgPSB7dHlwZTogJ3Jvb3QnLCBjaGlsZHJlbjogW119XG4gICAgLyoqIEB0eXBlIHtPbWl0PENvbXBpbGVDb250ZXh0LCAnc2xpY2VTZXJpYWxpemUnPn0gKi9cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgc3RhY2s6IFt0cmVlXSxcbiAgICAgIHRva2VuU3RhY2s6IFtdLFxuICAgICAgY29uZmlnLFxuICAgICAgZW50ZXIsXG4gICAgICBleGl0LFxuICAgICAgYnVmZmVyLFxuICAgICAgcmVzdW1lLFxuICAgICAgc2V0RGF0YSxcbiAgICAgIGdldERhdGFcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXI+fSAqL1xuICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdXG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgICAgLy8gV2UgcHJlcHJvY2VzcyBsaXN0cyB0byBhZGQgYGxpc3RJdGVtYCB0b2tlbnMsIGFuZCB0byBpbmZlciB3aGV0aGVyXG4gICAgICAvLyBpdGVtcyB0aGUgbGlzdCBpdHNlbGYgYXJlIHNwcmVhZCBvdXQuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMubGlzdE9yZGVyZWQgfHxcbiAgICAgICAgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSB0eXBlcy5saXN0VW5vcmRlcmVkXG4gICAgICApIHtcbiAgICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICBsaXN0U3RhY2sucHVzaChpbmRleClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWlsID0gbGlzdFN0YWNrLnBvcCgpXG4gICAgICAgICAgYXNzZXJ0KHR5cGVvZiB0YWlsID09PSAnbnVtYmVyJywgJ2V4cGVjdGVkIGxpc3Qgb3QgYmUgb3BlbicpXG4gICAgICAgICAgaW5kZXggPSBwcmVwYXJlTGlzdChldmVudHMsIHRhaWwsIGluZGV4KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gY29uZmlnW2V2ZW50c1tpbmRleF1bMF1dXG5cbiAgICAgIGlmIChvd24uY2FsbChoYW5kbGVyLCBldmVudHNbaW5kZXhdWzFdLnR5cGUpKSB7XG4gICAgICAgIGhhbmRsZXJbZXZlbnRzW2luZGV4XVsxXS50eXBlXS5jYWxsKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7c2xpY2VTZXJpYWxpemU6IGV2ZW50c1tpbmRleF1bMl0uc2xpY2VTZXJpYWxpemV9LFxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICksXG4gICAgICAgICAgZXZlbnRzW2luZGV4XVsxXVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRva2VucyBzdGlsbCBiZWluZyBvcGVuLlxuICAgIGlmIChjb250ZXh0LnRva2VuU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQudG9rZW5TdGFja1tjb250ZXh0LnRva2VuU3RhY2subGVuZ3RoIC0gMV1cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0YWlsWzFdIHx8IGRlZmF1bHRPbkVycm9yXG4gICAgICBoYW5kbGVyLmNhbGwoY29udGV4dCwgdW5kZWZpbmVkLCB0YWlsWzBdKVxuICAgIH1cblxuICAgIC8vIEZpZ3VyZSBvdXQgYHJvb3RgIHBvc2l0aW9uLlxuICAgIHRyZWUucG9zaXRpb24gPSB7XG4gICAgICBzdGFydDogcG9pbnQoXG4gICAgICAgIGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzWzBdWzFdLnN0YXJ0IDoge2xpbmU6IDEsIGNvbHVtbjogMSwgb2Zmc2V0OiAwfVxuICAgICAgKSxcbiAgICAgIGVuZDogcG9pbnQoXG4gICAgICAgIGV2ZW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdWzFdLmVuZFxuICAgICAgICAgIDoge2xpbmU6IDEsIGNvbHVtbjogMSwgb2Zmc2V0OiAwfVxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIENhbGwgdHJhbnNmb3Jtcy5cbiAgICBpbmRleCA9IC0xXG4gICAgd2hpbGUgKCsraW5kZXggPCBjb25maWcudHJhbnNmb3Jtcy5sZW5ndGgpIHtcbiAgICAgIHRyZWUgPSBjb25maWcudHJhbnNmb3Jtc1tpbmRleF0odHJlZSkgfHwgdHJlZVxuICAgIH1cblxuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50c1xuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJlcGFyZUxpc3QoZXZlbnRzLCBzdGFydCwgbGVuZ3RoKSB7XG4gICAgbGV0IGluZGV4ID0gc3RhcnQgLSAxXG4gICAgbGV0IGNvbnRhaW5lckJhbGFuY2UgPSAtMVxuICAgIGxldCBsaXN0U3ByZWFkID0gZmFsc2VcbiAgICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBsaXN0SXRlbVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBsaW5lSW5kZXhcbiAgICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleFxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgYXRNYXJrZXJcblxuICAgIHdoaWxlICgrK2luZGV4IDw9IGxlbmd0aCkge1xuICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdXG5cbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdFVub3JkZXJlZCB8fFxuICAgICAgICBldmVudFsxXS50eXBlID09PSB0eXBlcy5saXN0T3JkZXJlZCB8fFxuICAgICAgICBldmVudFsxXS50eXBlID09PSB0eXBlcy5ibG9ja1F1b3RlXG4gICAgICApIHtcbiAgICAgICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgY29udGFpbmVyQmFsYW5jZSsrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tXG4gICAgICAgIH1cblxuICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZFxuICAgICAgfSBlbHNlIGlmIChldmVudFsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nQmxhbmspIHtcbiAgICAgICAgaWYgKGV2ZW50WzBdID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGlzdEl0ZW0gJiZcbiAgICAgICAgICAgICFhdE1hcmtlciAmJlxuICAgICAgICAgICAgIWNvbnRhaW5lckJhbGFuY2UgJiZcbiAgICAgICAgICAgICFmaXJzdEJsYW5rTGluZUluZGV4XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gaW5kZXhcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBldmVudFsxXS50eXBlID09PSB0eXBlcy5saW5lUHJlZml4IHx8XG4gICAgICAgIGV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmxpc3RJdGVtVmFsdWUgfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1NYXJrZXIgfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1QcmVmaXggfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlXG4gICAgICApIHtcbiAgICAgICAgLy8gRW1wdHkuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICghY29udGFpbmVyQmFsYW5jZSAmJlxuICAgICAgICAgIGV2ZW50WzBdID09PSAnZW50ZXInICYmXG4gICAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1QcmVmaXgpIHx8XG4gICAgICAgIChjb250YWluZXJCYWxhbmNlID09PSAtMSAmJlxuICAgICAgICAgIGV2ZW50WzBdID09PSAnZXhpdCcgJiZcbiAgICAgICAgICAoZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdFVub3JkZXJlZCB8fFxuICAgICAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gdHlwZXMubGlzdE9yZGVyZWQpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgIGxldCB0YWlsSW5kZXggPSBpbmRleFxuICAgICAgICAgIGxpbmVJbmRleCA9IHVuZGVmaW5lZFxuXG4gICAgICAgICAgd2hpbGUgKHRhaWxJbmRleC0tKSB7XG4gICAgICAgICAgICBjb25zdCB0YWlsRXZlbnQgPSBldmVudHNbdGFpbEluZGV4XVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nIHx8XG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nQmxhbmtcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAodGFpbEV2ZW50WzBdID09PSAnZXhpdCcpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgICAgaWYgKGxpbmVJbmRleCkge1xuICAgICAgICAgICAgICAgIGV2ZW50c1tsaW5lSW5kZXhdWzFdLnR5cGUgPSB0eXBlcy5saW5lRW5kaW5nQmxhbmtcbiAgICAgICAgICAgICAgICBsaXN0U3ByZWFkID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPSB0eXBlcy5saW5lRW5kaW5nXG4gICAgICAgICAgICAgIGxpbmVJbmRleCA9IHRhaWxJbmRleFxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmxpbmVQcmVmaXggfHxcbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmJsb2NrUXVvdGVQcmVmaXggfHxcbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIHx8XG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSB0eXBlcy5ibG9ja1F1b3RlTWFya2VyIHx8XG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSB0eXBlcy5saXN0SXRlbUluZGVudFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEVtcHR5XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpcnN0QmxhbmtMaW5lSW5kZXggJiZcbiAgICAgICAgICAgICghbGluZUluZGV4IHx8IGZpcnN0QmxhbmtMaW5lSW5kZXggPCBsaW5lSW5kZXgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsaXN0SXRlbS5fc3ByZWFkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpeCBwb3NpdGlvbi5cbiAgICAgICAgICBsaXN0SXRlbS5lbmQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBsaW5lSW5kZXggPyBldmVudHNbbGluZUluZGV4XVsxXS5zdGFydCA6IGV2ZW50WzFdLmVuZFxuICAgICAgICAgIClcblxuICAgICAgICAgIGV2ZW50cy5zcGxpY2UobGluZUluZGV4IHx8IGluZGV4LCAwLCBbJ2V4aXQnLCBsaXN0SXRlbSwgZXZlbnRbMl1dKVxuICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICBsZW5ndGgrK1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxpc3QgaXRlbS5cbiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmxpc3RJdGVtUHJlZml4KSB7XG4gICAgICAgICAgbGlzdEl0ZW0gPSB7XG4gICAgICAgICAgICB0eXBlOiAnbGlzdEl0ZW0nLFxuICAgICAgICAgICAgX3NwcmVhZDogZmFsc2UsXG4gICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRbMV0uc3RhcnQpLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgaW4gYSBzZWNvbmQuXG4gICAgICAgICAgICBlbmQ6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbGlzdEl0ZW1gIGlzIG1vc3QgZGVmaW5pdGVseSBkZWZpbmVkLCBUUy4uLlxuICAgICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgsIDAsIFsnZW50ZXInLCBsaXN0SXRlbSwgZXZlbnRbMl1dKVxuICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICBsZW5ndGgrK1xuICAgICAgICAgIGZpcnN0QmxhbmtMaW5lSW5kZXggPSB1bmRlZmluZWRcbiAgICAgICAgICBhdE1hcmtlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGV2ZW50c1tzdGFydF1bMV0uX3NwcmVhZCA9IGxpc3RTcHJlYWRcbiAgICByZXR1cm4gbGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7a2V5b2YgQ29tcGlsZURhdGF9IEtleVxuICAgKiAgIEZpZWxkIHR5cGUuXG4gICAqIEBwYXJhbSB7S2V5fSBrZXlcbiAgICogICBLZXkgb2YgZmllbGQuXG4gICAqIEBwYXJhbSB7Q29tcGlsZURhdGFbS2V5XX0gW3ZhbHVlXVxuICAgKiAgIE5ldyB2YWx1ZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldERhdGEoa2V5LCB2YWx1ZSkge1xuICAgIGRhdGFba2V5XSA9IHZhbHVlXG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7a2V5b2YgQ29tcGlsZURhdGF9IEtleVxuICAgKiAgIEZpZWxkIHR5cGUuXG4gICAqIEBwYXJhbSB7S2V5fSBrZXlcbiAgICogICBLZXkgb2YgZmllbGQuXG4gICAqIEByZXR1cm5zIHtDb21waWxlRGF0YVtLZXldfVxuICAgKiAgIFZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RGF0YShrZXkpIHtcbiAgICByZXR1cm4gZGF0YVtrZXldXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIG9wZW5lciBoYW5kbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7KHRva2VuOiBUb2tlbikgPT4gTm9kZX0gY3JlYXRlXG4gICAqICAgQ3JlYXRlIGEgbm9kZS5cbiAgICogQHBhcmFtIHtIYW5kbGV9IFthbmRdXG4gICAqICAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gYWxzbyBydW4uXG4gICAqIEByZXR1cm5zIHtIYW5kbGV9XG4gICAqICAgSGFuZGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gb3BlbmVyKGNyZWF0ZSwgYW5kKSB7XG4gICAgcmV0dXJuIG9wZW5cblxuICAgIC8qKlxuICAgICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHtcbiAgICAgIGVudGVyLmNhbGwodGhpcywgY3JlYXRlKHRva2VuKSwgdG9rZW4pXG4gICAgICBpZiAoYW5kKSBhbmQuY2FsbCh0aGlzLCB0b2tlbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGJ1ZmZlcigpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2goe3R5cGU6ICdmcmFnbWVudCcsIGNoaWxkcmVuOiBbXX0pXG4gIH1cblxuICAvKipcbiAgICogQHRlbXBsYXRlIHtOb2RlfSBLaW5kXG4gICAqICAgTm9kZSB0eXBlLlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqICAgQ29udGV4dC5cbiAgICogQHBhcmFtIHtLaW5kfSBub2RlXG4gICAqICAgTm9kZSB0byBlbnRlci5cbiAgICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAgICogICBDb3JyZXNwb25kaW5nIHRva2VuLlxuICAgKiBAcGFyYW0ge09uRW50ZXJFcnJvciB8IHVuZGVmaW5lZH0gW2Vycm9ySGFuZGxlcl1cbiAgICogICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhpcyB0b2tlbiBpcyBvcGVuLCBidXQgaXQgaXMgY2xvc2VkIGJ5IHNvbWV0aGluZyBlbHNlLlxuICAgKiBAcmV0dXJucyB7S2luZH1cbiAgICogICBUaGUgZ2l2ZW4gbm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIGVudGVyKG5vZGUsIHRva2VuLCBlcnJvckhhbmRsZXIpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQocGFyZW50LCAnZXhwZWN0ZWQgYHBhcmVudGAnKVxuICAgIGFzc2VydCgnY2hpbGRyZW4nIGluIHBhcmVudCwgJ2V4cGVjdGVkIGBwYXJlbnRgJylcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBBc3N1bWUgYE5vZGVgIGNhbiBleGlzdCBhcyBhIGNoaWxkIG9mIGBwYXJlbnRgLlxuICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpXG4gICAgdGhpcy5zdGFjay5wdXNoKG5vZGUpXG4gICAgdGhpcy50b2tlblN0YWNrLnB1c2goW3Rva2VuLCBlcnJvckhhbmRsZXJdKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBlbmRgIHdpbGwgYmUgcGF0Y2hlZCBsYXRlci5cbiAgICBub2RlLnBvc2l0aW9uID0ge3N0YXJ0OiBwb2ludCh0b2tlbi5zdGFydCl9XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9zZXIgaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0ge0hhbmRsZX0gW2FuZF1cbiAgICogICBPcHRpb25hbCBmdW5jdGlvbiB0byBhbHNvIHJ1bi5cbiAgICogQHJldHVybnMge0hhbmRsZX1cbiAgICogICBIYW5kbGUuXG4gICAqL1xuICBmdW5jdGlvbiBjbG9zZXIoYW5kKSB7XG4gICAgcmV0dXJuIGNsb3NlXG5cbiAgICAvKipcbiAgICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAgICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9zZSh0b2tlbikge1xuICAgICAgaWYgKGFuZCkgYW5kLmNhbGwodGhpcywgdG9rZW4pXG4gICAgICBleGl0LmNhbGwodGhpcywgdG9rZW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogICBDb250ZXh0LlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiAgIENvcnJlc3BvbmRpbmcgdG9rZW4uXG4gICAqIEBwYXJhbSB7T25FeGl0RXJyb3IgfCB1bmRlZmluZWR9IFtvbkV4aXRFcnJvcl1cbiAgICogICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW5vdGhlciB0b2tlbiBpcyBvcGVuLlxuICAgKiBAcmV0dXJucyB7Tm9kZX1cbiAgICogICBUaGUgY2xvc2VkIG5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiBleGl0KHRva2VuLCBvbkV4aXRFcnJvcikge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrLnBvcCgpXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBgbm9kZWAnKVxuICAgIGNvbnN0IG9wZW4gPSB0aGlzLnRva2VuU3RhY2sucG9wKClcblxuICAgIGlmICghb3Blbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGNsb3NlIGAnICtcbiAgICAgICAgICB0b2tlbi50eXBlICtcbiAgICAgICAgICAnYCAoJyArXG4gICAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe3N0YXJ0OiB0b2tlbi5zdGFydCwgZW5kOiB0b2tlbi5lbmR9KSArXG4gICAgICAgICAgJyk6IGl04oCZcyBub3Qgb3BlbidcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKG9wZW5bMF0udHlwZSAhPT0gdG9rZW4udHlwZSkge1xuICAgICAgaWYgKG9uRXhpdEVycm9yKSB7XG4gICAgICAgIG9uRXhpdEVycm9yLmNhbGwodGhpcywgdG9rZW4sIG9wZW5bMF0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gb3BlblsxXSB8fCBkZWZhdWx0T25FcnJvclxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgdG9rZW4sIG9wZW5bMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KG5vZGUudHlwZSAhPT0gJ2ZyYWdtZW50JywgJ3VuZXhwZWN0ZWQgZnJhZ21lbnQgYGV4aXRgZWQnKVxuICAgIGFzc2VydChub2RlLnBvc2l0aW9uLCAnZXhwZWN0ZWQgYHBvc2l0aW9uYCB0byBiZSBkZWZpbmVkJylcbiAgICBub2RlLnBvc2l0aW9uLmVuZCA9IHBvaW50KHRva2VuLmVuZClcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICByZXR1cm4gdG9TdHJpbmcodGhpcy5zdGFjay5wb3AoKSlcbiAgfVxuXG4gIC8vXG4gIC8vIEhhbmRsZXJzLlxuICAvL1xuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdG9yZGVyZWQoKSB7XG4gICAgc2V0RGF0YSgnZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikge1xuICAgIGlmIChnZXREYXRhKCdleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl1cbiAgICAgIGFzc2VydChhbmNlc3RvciwgJ2V4cGVjdGVkIG5vZGVzIG9uIHN0YWNrJylcbiAgICAgIGFzc2VydChhbmNlc3Rvci50eXBlID09PSAnbGlzdCcsICdleHBlY3RlZCBsaXN0IG9uIHN0YWNrJylcbiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KFxuICAgICAgICB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSxcbiAgICAgICAgY29uc3RhbnRzLm51bWVyaWNCYXNlRGVjaW1hbFxuICAgICAgKVxuICAgICAgc2V0RGF0YSgnZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlJylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbygpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChub2RlLnR5cGUgPT09ICdjb2RlJywgJ2V4cGVjdGVkIGNvZGUgb24gc3RhY2snKVxuICAgIG5vZGUubGFuZyA9IGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2NvZGUnLCAnZXhwZWN0ZWQgY29kZSBvbiBzdGFjaycpXG4gICAgbm9kZS5tZXRhID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHtcbiAgICAvLyBFeGl0IGlmIHRoaXMgaXMgdGhlIGNsb3NpbmcgZmVuY2UuXG4gICAgaWYgKGdldERhdGEoJ2Zsb3dDb2RlSW5zaWRlJykpIHJldHVyblxuICAgIHRoaXMuYnVmZmVyKClcbiAgICBzZXREYXRhKCdmbG93Q29kZUluc2lkZScsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChub2RlLnR5cGUgPT09ICdjb2RlJywgJ2V4cGVjdGVkIGNvZGUgb24gc3RhY2snKVxuXG4gICAgbm9kZS52YWx1ZSA9IGRhdGEucmVwbGFjZSgvXihcXHI/XFxufFxccil8KFxccj9cXG58XFxyKSQvZywgJycpXG4gICAgc2V0RGF0YSgnZmxvd0NvZGVJbnNpZGUnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVpbmRlbnRlZCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChub2RlLnR5cGUgPT09ICdjb2RlJywgJ2V4cGVjdGVkIGNvZGUgb24gc3RhY2snKVxuXG4gICAgbm9kZS52YWx1ZSA9IGRhdGEucmVwbGFjZSgvKFxccj9cXG58XFxyKSQvZywgJycpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2RlZmluaXRpb24nLCAnZXhwZWN0ZWQgZGVmaW5pdGlvbiBvbiBzdGFjaycpXG5cbiAgICBub2RlLmxhYmVsID0gbGFiZWxcbiAgICBub2RlLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICApLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQobm9kZS50eXBlID09PSAnZGVmaW5pdGlvbicsICdleHBlY3RlZCBkZWZpbml0aW9uIG9uIHN0YWNrJylcblxuICAgIG5vZGUudGl0bGUgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2RlZmluaXRpb24nLCAnZXhwZWN0ZWQgZGVmaW5pdGlvbiBvbiBzdGFjaycpXG5cbiAgICBub2RlLnVybCA9IGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQobm9kZS50eXBlID09PSAnaGVhZGluZycsICdleHBlY3RlZCBoZWFkaW5nIG9uIHN0YWNrJylcblxuICAgIGlmICghbm9kZS5kZXB0aCkge1xuICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGhcblxuICAgICAgYXNzZXJ0KFxuICAgICAgICBkZXB0aCA9PT0gMSB8fFxuICAgICAgICAgIGRlcHRoID09PSAyIHx8XG4gICAgICAgICAgZGVwdGggPT09IDMgfHxcbiAgICAgICAgICBkZXB0aCA9PT0gNCB8fFxuICAgICAgICAgIGRlcHRoID09PSA1IHx8XG4gICAgICAgICAgZGVwdGggPT09IDYsXG4gICAgICAgICdleHBlY3RlZCBgZGVwdGhgIGJldHdlZW4gYDFgIGFuZCBgNmAnXG4gICAgICApXG5cbiAgICAgIG5vZGUuZGVwdGggPSBkZXB0aFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCgpIHtcbiAgICBzZXREYXRhKCdzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2hlYWRpbmcnLCAnZXhwZWN0ZWQgaGVhZGluZyBvbiBzdGFjaycpXG5cbiAgICBub2RlLmRlcHRoID1cbiAgICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmNoYXJDb2RlQXQoMCkgPT09IGNvZGVzLmVxdWFsc1RvID8gMSA6IDJcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nKCkge1xuICAgIHNldERhdGEoJ3NldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25lbnRlcmRhdGEodG9rZW4pIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQoJ2NoaWxkcmVuJyBpbiBub2RlLCAnZXhwZWN0ZWQgcGFyZW50IG9uIHN0YWNrJylcblxuICAgIGxldCB0YWlsID0gbm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG5cbiAgICBpZiAoIXRhaWwgfHwgdGFpbC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyB0ZXh0IG5vZGUuXG4gICAgICB0YWlsID0gdGV4dCgpXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZeKAmWxsIGFkZCBgZW5kYCBsYXRlci5cbiAgICAgIHRhaWwucG9zaXRpb24gPSB7c3RhcnQ6IHBvaW50KHRva2VuLnN0YXJ0KX1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEFzc3VtZSBgcGFyZW50YCBhY2NlcHRzIGB0ZXh0YC5cbiAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaCh0YWlsKVxuICAgIH1cblxuICAgIHRoaXMuc3RhY2sucHVzaCh0YWlsKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpXG4gICAgYXNzZXJ0KHRhaWwsICdleHBlY3RlZCBhIGBub2RlYCB0byBiZSBvbiB0aGUgc3RhY2snKVxuICAgIGFzc2VydCgndmFsdWUnIGluIHRhaWwsICdleHBlY3RlZCBhIGBsaXRlcmFsYCB0byBiZSBvbiB0aGUgc3RhY2snKVxuICAgIGFzc2VydCh0YWlsLnBvc2l0aW9uLCAnZXhwZWN0ZWQgYG5vZGVgIHRvIGhhdmUgYW4gb3BlbiBwb3NpdGlvbicpXG4gICAgdGFpbC52YWx1ZSArPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKVxuICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQodG9rZW4uZW5kKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQoY29udGV4dCwgJ2V4cGVjdGVkIGBub2RlYCcpXG5cbiAgICAvLyBJZiB3ZeKAmXJlIGF0IGEgaGFyZCBicmVhaywgaW5jbHVkZSB0aGUgbGluZSBlbmRpbmcgaW4gdGhlcmUuXG4gICAgaWYgKGdldERhdGEoJ2F0SGFyZEJyZWFrJykpIHtcbiAgICAgIGFzc2VydCgnY2hpbGRyZW4nIGluIGNvbnRleHQsICdleHBlY3RlZCBgcGFyZW50YCcpXG4gICAgICBjb25zdCB0YWlsID0gY29udGV4dC5jaGlsZHJlbltjb250ZXh0LmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICBhc3NlcnQodGFpbC5wb3NpdGlvbiwgJ2V4cGVjdGVkIHRhaWwgdG8gaGF2ZSBhIHN0YXJ0aW5nIHBvc2l0aW9uJylcbiAgICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQodG9rZW4uZW5kKVxuICAgICAgc2V0RGF0YSgnYXRIYXJkQnJlYWsnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWdldERhdGEoJ3NldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcnKSAmJlxuICAgICAgY29uZmlnLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQudHlwZSlcbiAgICApIHtcbiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pXG4gICAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0aGFyZGJyZWFrKCkge1xuICAgIHNldERhdGEoJ2F0SGFyZEJyZWFrJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGh0bWxmbG93KCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2h0bWwnLCAnZXhwZWN0ZWQgaHRtbCBvbiBzdGFjaycpXG5cbiAgICBub2RlLnZhbHVlID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0aHRtbHRleHQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQobm9kZS50eXBlID09PSAnaHRtbCcsICdleHBlY3RlZCBodG1sIG9uIHN0YWNrJylcblxuICAgIG5vZGUudmFsdWUgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRjb2RldGV4dCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChub2RlLnR5cGUgPT09ICdpbmxpbmVDb2RlJywgJ2V4cGVjdGVkIGlubGluZSBjb2RlIG9uIHN0YWNrJylcblxuICAgIG5vZGUudmFsdWUgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRsaW5rKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChub2RlLnR5cGUgPT09ICdsaW5rJywgJ2V4cGVjdGVkIGxpbmsgb24gc3RhY2snKVxuXG4gICAgLy8gTm90ZTogdGhlcmUgYXJlIGFsc28gYGlkZW50aWZpZXJgIGFuZCBgbGFiZWxgIGZpZWxkcyBvbiB0aGlzIGxpbmsgbm9kZSFcbiAgICAvLyBUaGVzZSBhcmUgdXNlZCAvIGNsZWFuZWQgaGVyZS5cblxuICAgIC8vIFRvIGRvOiBjbGVhbi5cbiAgICBpZiAoZ2V0RGF0YSgnaW5SZWZlcmVuY2UnKSkge1xuICAgICAgLyoqIEB0eXBlIHtSZWZlcmVuY2VUeXBlfSAqL1xuICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IGdldERhdGEoJ3JlZmVyZW5jZVR5cGUnKSB8fCAnc2hvcnRjdXQnXG5cbiAgICAgIG5vZGUudHlwZSArPSAnUmVmZXJlbmNlJ1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgbm9kZS5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUudXJsXG4gICAgICBkZWxldGUgbm9kZS50aXRsZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5pZGVudGlmaWVyXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5sYWJlbFxuICAgIH1cblxuICAgIHNldERhdGEoJ3JlZmVyZW5jZVR5cGUnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0aW1hZ2UoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2ltYWdlJywgJ2V4cGVjdGVkIGltYWdlIG9uIHN0YWNrJylcblxuICAgIC8vIE5vdGU6IHRoZXJlIGFyZSBhbHNvIGBpZGVudGlmaWVyYCBhbmQgYGxhYmVsYCBmaWVsZHMgb24gdGhpcyBsaW5rIG5vZGUhXG4gICAgLy8gVGhlc2UgYXJlIHVzZWQgLyBjbGVhbmVkIGhlcmUuXG5cbiAgICAvLyBUbyBkbzogY2xlYW4uXG4gICAgaWYgKGdldERhdGEoJ2luUmVmZXJlbmNlJykpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVmZXJlbmNlVHlwZX0gKi9cbiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSBnZXREYXRhKCdyZWZlcmVuY2VUeXBlJykgfHwgJ3Nob3J0Y3V0J1xuXG4gICAgICBub2RlLnR5cGUgKz0gJ1JlZmVyZW5jZSdcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIG5vZGUucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGVcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIGRlbGV0ZSBub2RlLnVybFxuICAgICAgZGVsZXRlIG5vZGUudGl0bGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUuaWRlbnRpZmllclxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUubGFiZWxcbiAgICB9XG5cbiAgICBzZXREYXRhKCdyZWZlcmVuY2VUeXBlJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGxhYmVsdGV4dCh0b2tlbikge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pXG4gICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl1cbiAgICBhc3NlcnQoYW5jZXN0b3IsICdleHBlY3RlZCBhbmNlc3RvciBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KFxuICAgICAgYW5jZXN0b3IudHlwZSA9PT0gJ2ltYWdlJyB8fCBhbmNlc3Rvci50eXBlID09PSAnbGluaycsXG4gICAgICAnZXhwZWN0ZWQgaW1hZ2Ugb3IgbGluayBvbiBzdGFjaydcbiAgICApXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzdGFzaCB0aGlzIG9uIHRoZSBub2RlLCBhcyBpdCBtaWdodCBiZWNvbWUgYSByZWZlcmVuY2VcbiAgICAvLyBsYXRlci5cbiAgICBhbmNlc3Rvci5sYWJlbCA9IGRlY29kZVN0cmluZyhzdHJpbmcpXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc2FtZSBhcyBhYm92ZS5cbiAgICBhbmNlc3Rvci5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzdHJpbmcpLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGxhYmVsKCkge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KGZyYWdtZW50LCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KGZyYWdtZW50LnR5cGUgPT09ICdmcmFnbWVudCcsICdleHBlY3RlZCBmcmFnbWVudCBvbiBzdGFjaycpXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KFxuICAgICAgbm9kZS50eXBlID09PSAnaW1hZ2UnIHx8IG5vZGUudHlwZSA9PT0gJ2xpbmsnLFxuICAgICAgJ2V4cGVjdGVkIGltYWdlIG9yIGxpbmsgb24gc3RhY2snXG4gICAgKVxuXG4gICAgLy8gQXNzdW1lIGEgcmVmZXJlbmNlLlxuICAgIHNldERhdGEoJ2luUmVmZXJlbmNlJywgdHJ1ZSlcblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdsaW5rJykge1xuICAgICAgLyoqIEB0eXBlIHtBcnJheTxTdGF0aWNQaHJhc2luZ0NvbnRlbnQ+fSAqL1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogQXNzdW1lIHN0YXRpYyBwaHJhc2luZyBjb250ZW50LlxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBmcmFnbWVudC5jaGlsZHJlblxuXG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRyZW5cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5hbHQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQoXG4gICAgICBub2RlLnR5cGUgPT09ICdpbWFnZScgfHwgbm9kZS50eXBlID09PSAnbGluaycsXG4gICAgICAnZXhwZWN0ZWQgaW1hZ2Ugb3IgbGluayBvbiBzdGFjaydcbiAgICApXG4gICAgbm9kZS51cmwgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KFxuICAgICAgbm9kZS50eXBlID09PSAnaW1hZ2UnIHx8IG5vZGUudHlwZSA9PT0gJ2xpbmsnLFxuICAgICAgJ2V4cGVjdGVkIGltYWdlIG9yIGxpbmsgb24gc3RhY2snXG4gICAgKVxuICAgIG5vZGUudGl0bGUgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZSgpIHtcbiAgICBzZXREYXRhKCdpblJlZmVyZW5jZScpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmVudGVycmVmZXJlbmNlKCkge1xuICAgIHNldERhdGEoJ3JlZmVyZW5jZVR5cGUnLCAnY29sbGFwc2VkJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdHJlZmVyZW5jZXN0cmluZyh0b2tlbikge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBhc3NlcnQobm9kZSwgJ2V4cGVjdGVkIG5vZGUgb24gc3RhY2snKVxuICAgIGFzc2VydChcbiAgICAgIG5vZGUudHlwZSA9PT0gJ2ltYWdlJyB8fCBub2RlLnR5cGUgPT09ICdsaW5rJyxcbiAgICAgICdleHBlY3RlZCBpbWFnZSByZWZlcmVuY2Ugb3IgbGluayByZWZlcmVuY2Ugb24gc3RhY2snXG4gICAgKVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3Rhc2ggdGhpcyBvbiB0aGUgbm9kZSwgYXMgaXQgbWlnaHQgYmVjb21lIGEgcmVmZXJlbmNlXG4gICAgLy8gbGF0ZXIuXG4gICAgbm9kZS5sYWJlbCA9IGxhYmVsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc2FtZSBhcyBhYm92ZS5cbiAgICBub2RlLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICApLnRvTG93ZXJDYXNlKClcbiAgICBzZXREYXRhKCdyZWZlcmVuY2VUeXBlJywgJ2Z1bGwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyKHRva2VuKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgdG9rZW4udHlwZSA9PT0gJ2NoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMnIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09ICdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCdcbiAgICApXG4gICAgc2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScsIHRva2VuLnR5cGUpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUodG9rZW4pIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICBjb25zdCB0eXBlID0gZ2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScpXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IHZhbHVlXG5cbiAgICBpZiAodHlwZSkge1xuICAgICAgdmFsdWUgPSBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKFxuICAgICAgICBkYXRhLFxuICAgICAgICB0eXBlID09PSB0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljXG4gICAgICAgICAgPyBjb25zdGFudHMubnVtZXJpY0Jhc2VEZWNpbWFsXG4gICAgICAgICAgOiBjb25zdGFudHMubnVtZXJpY0Jhc2VIZXhhZGVjaW1hbFxuICAgICAgKVxuICAgICAgc2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKGRhdGEpXG4gICAgICBhc3NlcnQocmVzdWx0ICE9PSBmYWxzZSwgJ2V4cGVjdGVkIHJlZmVyZW5jZSB0byBkZWNvZGUnKVxuICAgICAgdmFsdWUgPSByZXN1bHRcbiAgICB9XG5cbiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFjay5wb3AoKVxuICAgIGFzc2VydCh0YWlsLCAnZXhwZWN0ZWQgYG5vZGVgJylcbiAgICBhc3NlcnQodGFpbC5wb3NpdGlvbiwgJ2V4cGVjdGVkIGBub2RlLnBvc2l0aW9uYCcpXG4gICAgYXNzZXJ0KCd2YWx1ZScgaW4gdGFpbCwgJ2V4cGVjdGVkIGBub2RlLnZhbHVlYCcpXG4gICAgdGFpbC52YWx1ZSArPSB2YWx1ZVxuICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQodG9rZW4uZW5kKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHtcbiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGFzc2VydChub2RlLCAnZXhwZWN0ZWQgbm9kZSBvbiBzdGFjaycpXG4gICAgYXNzZXJ0KG5vZGUudHlwZSA9PT0gJ2xpbmsnLCAnZXhwZWN0ZWQgbGluayBvbiBzdGFjaycpXG5cbiAgICBub2RlLnVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikge1xuICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbilcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgYXNzZXJ0KG5vZGUsICdleHBlY3RlZCBub2RlIG9uIHN0YWNrJylcbiAgICBhc3NlcnQobm9kZS50eXBlID09PSAnbGluaycsICdleHBlY3RlZCBsaW5rIG9uIHN0YWNrJylcblxuICAgIG5vZGUudXJsID0gJ21haWx0bzonICsgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgfVxuXG4gIC8vXG4gIC8vIENyZWF0ZXJzLlxuICAvL1xuXG4gIC8qKiBAcmV0dXJucyB7QmxvY2txdW90ZX0gKi9cbiAgZnVuY3Rpb24gYmxvY2tRdW90ZSgpIHtcbiAgICByZXR1cm4ge3R5cGU6ICdibG9ja3F1b3RlJywgY2hpbGRyZW46IFtdfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtDb2RlfSAqL1xuICBmdW5jdGlvbiBjb2RlRmxvdygpIHtcbiAgICByZXR1cm4ge3R5cGU6ICdjb2RlJywgbGFuZzogbnVsbCwgbWV0YTogbnVsbCwgdmFsdWU6ICcnfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtJbmxpbmVDb2RlfSAqL1xuICBmdW5jdGlvbiBjb2RlVGV4dCgpIHtcbiAgICByZXR1cm4ge3R5cGU6ICdpbmxpbmVDb2RlJywgdmFsdWU6ICcnfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtEZWZpbml0aW9ufSAqL1xuICBmdW5jdGlvbiBkZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZGVmaW5pdGlvbicsXG4gICAgICBpZGVudGlmaWVyOiAnJyxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICB1cmw6ICcnXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtFbXBoYXNpc30gKi9cbiAgZnVuY3Rpb24gZW1waGFzaXMoKSB7XG4gICAgcmV0dXJuIHt0eXBlOiAnZW1waGFzaXMnLCBjaGlsZHJlbjogW119XG4gIH1cblxuICAvKiogQHJldHVybnMge0hlYWRpbmd9ICovXG4gIGZ1bmN0aW9uIGhlYWRpbmcoKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZGVwdGhgIHdpbGwgYmUgc2V0IGxhdGVyLlxuICAgIHJldHVybiB7dHlwZTogJ2hlYWRpbmcnLCBkZXB0aDogdW5kZWZpbmVkLCBjaGlsZHJlbjogW119XG4gIH1cblxuICAvKiogQHJldHVybnMge0JyZWFrfSAqL1xuICBmdW5jdGlvbiBoYXJkQnJlYWsoKSB7XG4gICAgcmV0dXJuIHt0eXBlOiAnYnJlYWsnfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtIVE1MfSAqL1xuICBmdW5jdGlvbiBodG1sKCkge1xuICAgIHJldHVybiB7dHlwZTogJ2h0bWwnLCB2YWx1ZTogJyd9XG4gIH1cblxuICAvKiogQHJldHVybnMge0ltYWdlfSAqL1xuICBmdW5jdGlvbiBpbWFnZSgpIHtcbiAgICByZXR1cm4ge3R5cGU6ICdpbWFnZScsIHRpdGxlOiBudWxsLCB1cmw6ICcnLCBhbHQ6IG51bGx9XG4gIH1cblxuICAvKiogQHJldHVybnMge0xpbmt9ICovXG4gIGZ1bmN0aW9uIGxpbmsoKSB7XG4gICAgcmV0dXJuIHt0eXBlOiAnbGluaycsIHRpdGxlOiBudWxsLCB1cmw6ICcnLCBjaGlsZHJlbjogW119XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAgICogQHJldHVybnMge0xpc3R9XG4gICAqL1xuICBmdW5jdGlvbiBsaXN0KHRva2VuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIG9yZGVyZWQ6IHRva2VuLnR5cGUgPT09ICdsaXN0T3JkZXJlZCcsXG4gICAgICBzdGFydDogbnVsbCxcbiAgICAgIHNwcmVhZDogdG9rZW4uX3NwcmVhZCxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiBAcmV0dXJucyB7TGlzdEl0ZW19XG4gICAqL1xuICBmdW5jdGlvbiBsaXN0SXRlbSh0b2tlbikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGlzdEl0ZW0nLFxuICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLFxuICAgICAgY2hlY2tlZDogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UGFyYWdyYXBofSAqL1xuICBmdW5jdGlvbiBwYXJhZ3JhcGgoKSB7XG4gICAgcmV0dXJuIHt0eXBlOiAncGFyYWdyYXBoJywgY2hpbGRyZW46IFtdfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtTdHJvbmd9ICovXG4gIGZ1bmN0aW9uIHN0cm9uZygpIHtcbiAgICByZXR1cm4ge3R5cGU6ICdzdHJvbmcnLCBjaGlsZHJlbjogW119XG4gIH1cblxuICAvKiogQHJldHVybnMge1RleHR9ICovXG4gIGZ1bmN0aW9uIHRleHQoKSB7XG4gICAgcmV0dXJuIHt0eXBlOiAndGV4dCcsIHZhbHVlOiAnJ31cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7VGhlbWF0aWNCcmVha30gKi9cbiAgZnVuY3Rpb24gdGhlbWF0aWNCcmVhaygpIHtcbiAgICByZXR1cm4ge3R5cGU6ICd0aGVtYXRpY0JyZWFrJ31cbiAgfVxufVxuXG4vKipcbiAqIENvcHkgYSBwb2ludC1saWtlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IGRcbiAqICAgUG9pbnQtbGlrZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtQb2ludH1cbiAqICAgdW5pc3QgcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIHBvaW50KGQpIHtcbiAgcmV0dXJuIHtsaW5lOiBkLmxpbmUsIGNvbHVtbjogZC5jb2x1bW4sIG9mZnNldDogZC5vZmZzZXR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb25maWd9IGNvbWJpbmVkXG4gKiBAcGFyYW0ge0FycmF5PEV4dGVuc2lvbiB8IEFycmF5PEV4dGVuc2lvbj4+fSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlKGNvbWJpbmVkLCBleHRlbnNpb25zKSB7XG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXh0ZW5zaW9uc1tpbmRleF1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uZmlndXJlKGNvbWJpbmVkLCB2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0ZW5zaW9uKGNvbWJpbmVkLCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbmZpZ30gY29tYmluZWRcbiAqIEBwYXJhbSB7RXh0ZW5zaW9ufSBleHRlbnNpb25cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBleHRlbnNpb24oY29tYmluZWQsIGV4dGVuc2lvbikge1xuICAvKiogQHR5cGUge2tleW9mIEV4dGVuc2lvbn0gKi9cbiAgbGV0IGtleVxuXG4gIGZvciAoa2V5IGluIGV4dGVuc2lvbikge1xuICAgIGlmIChvd24uY2FsbChleHRlbnNpb24sIGtleSkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjYW5Db250YWluRW9scycpIHtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XVxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICBjb21iaW5lZFtrZXldLnB1c2goLi4ucmlnaHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndHJhbnNmb3JtcycpIHtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XVxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICBjb21iaW5lZFtrZXldLnB1c2goLi4ucmlnaHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJ2V4aXQnKSB7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uW2tleV1cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21iaW5lZFtrZXldLCByaWdodClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogQHR5cGUge09uRW50ZXJFcnJvcn0gKi9cbmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGxlZnQsIHJpZ2h0KSB7XG4gIGlmIChsZWZ0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjbG9zZSBgJyArXG4gICAgICAgIGxlZnQudHlwZSArXG4gICAgICAgICdgICgnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe3N0YXJ0OiBsZWZ0LnN0YXJ0LCBlbmQ6IGxlZnQuZW5kfSkgK1xuICAgICAgICAnKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAnICtcbiAgICAgICAgcmlnaHQudHlwZSArXG4gICAgICAgICdgLCAnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe3N0YXJ0OiByaWdodC5zdGFydCwgZW5kOiByaWdodC5lbmR9KSArXG4gICAgICAgICcpIGlzIG9wZW4nXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAnICtcbiAgICAgICAgcmlnaHQudHlwZSArXG4gICAgICAgICdgLCAnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe3N0YXJ0OiByaWdodC5zdGFydCwgZW5kOiByaWdodC5lbmR9KSArXG4gICAgICAgICcpIGlzIHN0aWxsIG9wZW4nXG4gICAgKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mdast-util-from-markdown/dev/lib/index.js\n"); /***/ }), /***/ "../../../node_modules/mdast-util-to-string/lib/index.js": /*!***************************************************************!*\ !*** ../../../node_modules/mdast-util-to-string/lib/index.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"toString\": () => (/* binding */ toString)\n/* harmony export */ });\n/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML.\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nfunction toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Node}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2xpYi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxhQUFhLDhDQUE4QztBQUMzRDtBQUNBO0FBQ0E7QUFDQSxjQUFjLDRCQUE0QjtBQUMxQztBQUNBLGNBQWMsNEJBQTRCO0FBQzFDO0FBQ0E7O0FBRUEsV0FBVyxTQUFTO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzPzI3YTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R8aW1wb3J0KCdtZGFzdCcpLkNvbnRlbnR9IE5vZGVcbiAqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmNsdWRlSW1hZ2VBbHQ9dHJ1ZV1cbiAqICAgV2hldGhlciB0byB1c2UgYGFsdGAgZm9yIGBpbWFnZWBzLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2luY2x1ZGVIdG1sPXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gdXNlIGB2YWx1ZWAgb2YgSFRNTC5cbiAqL1xuXG4vKiogQHR5cGUge09wdGlvbnN9ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSB7fVxuXG4vKipcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIGEgbm9kZSBvciBsaXN0IG9mIG5vZGVzLlxuICpcbiAqIFByZWZlcnMgdGhlIG5vZGXigJlzIHBsYWluLXRleHQgZmllbGRzLCBvdGhlcndpc2Ugc2VyaWFsaXplcyBpdHMgY2hpbGRyZW4sXG4gKiBhbmQgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGFycmF5LCBzZXJpYWxpemUgdGhlIG5vZGVzIGluIGl0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLCB0eXBpY2FsbHkgYE5vZGVgLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgYHZhbHVlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID1cbiAgICB0eXBlb2Ygc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0ID09PSAnYm9vbGVhbidcbiAgICAgID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0XG4gICAgICA6IHRydWVcbiAgY29uc3QgaW5jbHVkZUh0bWwgPVxuICAgIHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gJ2Jvb2xlYW4nID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlXG5cbiAgcmV0dXJuIG9uZSh2YWx1ZSwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbClcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvciBzZXZlcmFsIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlSW1hZ2VBbHRcbiAqICAgSW5jbHVkZSBpbWFnZSBgYWx0YHMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVIdG1sXG4gKiAgIEluY2x1ZGUgSFRNTC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gb25lKHZhbHVlLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7XG4gIGlmIChub2RlKHZhbHVlKSkge1xuICAgIGlmICgndmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gJ2h0bWwnICYmICFpbmNsdWRlSHRtbCA/ICcnIDogdmFsdWUudmFsdWVcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZUltYWdlQWx0ICYmICdhbHQnIGluIHZhbHVlICYmIHZhbHVlLmFsdCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmFsdFxuICAgIH1cblxuICAgIGlmICgnY2hpbGRyZW4nIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYWxsKHZhbHVlLmNoaWxkcmVuLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBhbGwodmFsdWUsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpXG4gIH1cblxuICByZXR1cm4gJydcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBsaXN0IG9mIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IHZhbHVlc1xuICogICBUaGluZyB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVJbWFnZUFsdFxuICogICBJbmNsdWRlIGltYWdlIGBhbHRgcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUh0bWxcbiAqICAgSW5jbHVkZSBIVE1MLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gYWxsKHZhbHVlcywgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCkge1xuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IG9uZSh2YWx1ZXNbaW5kZXhdLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGB2YWx1ZWAgbG9va3MgbGlrZSBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICBUaGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBOb2RlfVxuICogICBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub2RlLlxuICovXG5mdW5jdGlvbiBub2RlKHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mdast-util-to-string/lib/index.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/c4Diagram-9cddb37f.js": /*!****************************************************************!*\ !*** ../../../node_modules/mermaid/dist/c4Diagram-9cddb37f.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./svgDrawCommon-f26cad39.js */ \"../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 6], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 16], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 13], $V8 = [1, 14], $V9 = [1, 15], $Va = [1, 27], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 72], $Vh = [1, 73], $Vi = [1, 74], $Vj = [1, 75], $Vk = [1, 76], $Vl = [1, 77], $Vm = [1, 78], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 50], $VA = [1, 51], $VB = [1, 52], $VC = [1, 53], $VD = [1, 54], $VE = [1, 55], $VF = [1, 56], $VG = [1, 57], $VH = [1, 59], $VI = [1, 60], $VJ = [1, 61], $VK = [1, 62], $VL = [1, 63], $VM = [1, 64], $VN = [1, 65], $VO = [1, 66], $VP = [1, 67], $VQ = [1, 68], $VR = [1, 69], $VS = [24, 52], $VT = [24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VU = [15, 24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VV = [1, 94], $VW = [1, 95], $VX = [1, 96], $VY = [1, 97], $VZ = [15, 24, 52], $V_ = [7, 8, 9, 10, 18, 22, 25, 26, 27, 28], $V$ = [15, 24, 43, 52], $V01 = [15, 24, 43, 52, 86, 87, 89, 90], $V11 = [15, 43], $V21 = [44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"direction\": 5, \"directive\": 6, \"direction_tb\": 7, \"direction_bt\": 8, \"direction_rl\": 9, \"direction_lr\": 10, \"graphConfig\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \"NEWLINE\": 15, \":\": 16, \"argDirective\": 17, \"open_directive\": 18, \"type_directive\": 19, \"arg_directive\": 20, \"close_directive\": 21, \"C4_CONTEXT\": 22, \"statements\": 23, \"EOF\": 24, \"C4_CONTAINER\": 25, \"C4_COMPONENT\": 26, \"C4_DYNAMIC\": 27, \"C4_DEPLOYMENT\": 28, \"otherStatements\": 29, \"diagramStatements\": 30, \"otherStatement\": 31, \"title\": 32, \"accDescription\": 33, \"acc_title\": 34, \"acc_title_value\": 35, \"acc_descr\": 36, \"acc_descr_value\": 37, \"acc_descr_multiline_value\": 38, \"boundaryStatement\": 39, \"boundaryStartStatement\": 40, \"boundaryStopStatement\": 41, \"boundaryStart\": 42, \"LBRACE\": 43, \"ENTERPRISE_BOUNDARY\": 44, \"attributes\": 45, \"SYSTEM_BOUNDARY\": 46, \"BOUNDARY\": 47, \"CONTAINER_BOUNDARY\": 48, \"NODE\": 49, \"NODE_L\": 50, \"NODE_R\": 51, \"RBRACE\": 52, \"diagramStatement\": 53, \"PERSON\": 54, \"PERSON_EXT\": 55, \"SYSTEM\": 56, \"SYSTEM_DB\": 57, \"SYSTEM_QUEUE\": 58, \"SYSTEM_EXT\": 59, \"SYSTEM_EXT_DB\": 60, \"SYSTEM_EXT_QUEUE\": 61, \"CONTAINER\": 62, \"CONTAINER_DB\": 63, \"CONTAINER_QUEUE\": 64, \"CONTAINER_EXT\": 65, \"CONTAINER_EXT_DB\": 66, \"CONTAINER_EXT_QUEUE\": 67, \"COMPONENT\": 68, \"COMPONENT_DB\": 69, \"COMPONENT_QUEUE\": 70, \"COMPONENT_EXT\": 71, \"COMPONENT_EXT_DB\": 72, \"COMPONENT_EXT_QUEUE\": 73, \"REL\": 74, \"BIREL\": 75, \"REL_U\": 76, \"REL_D\": 77, \"REL_L\": 78, \"REL_R\": 79, \"REL_B\": 80, \"REL_INDEX\": 81, \"UPDATE_EL_STYLE\": 82, \"UPDATE_REL_STYLE\": 83, \"UPDATE_LAYOUT_CONFIG\": 84, \"attribute\": 85, \"STR\": 86, \"STR_KEY\": 87, \"STR_VALUE\": 88, \"ATTRIBUTE\": 89, \"ATTRIBUTE_EMPTY\": 90, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 7: \"direction_tb\", 8: \"direction_bt\", 9: \"direction_rl\", 10: \"direction_lr\", 15: \"NEWLINE\", 16: \":\", 18: \"open_directive\", 19: \"type_directive\", 20: \"arg_directive\", 21: \"close_directive\", 22: \"C4_CONTEXT\", 24: \"EOF\", 25: \"C4_CONTAINER\", 26: \"C4_COMPONENT\", 27: \"C4_DYNAMIC\", 28: \"C4_DEPLOYMENT\", 32: \"title\", 33: \"accDescription\", 34: \"acc_title\", 35: \"acc_title_value\", 36: \"acc_descr\", 37: \"acc_descr_value\", 38: \"acc_descr_multiline_value\", 43: \"LBRACE\", 44: \"ENTERPRISE_BOUNDARY\", 46: \"SYSTEM_BOUNDARY\", 47: \"BOUNDARY\", 48: \"CONTAINER_BOUNDARY\", 49: \"NODE\", 50: \"NODE_L\", 51: \"NODE_R\", 52: \"RBRACE\", 54: \"PERSON\", 55: \"PERSON_EXT\", 56: \"SYSTEM\", 57: \"SYSTEM_DB\", 58: \"SYSTEM_QUEUE\", 59: \"SYSTEM_EXT\", 60: \"SYSTEM_EXT_DB\", 61: \"SYSTEM_EXT_QUEUE\", 62: \"CONTAINER\", 63: \"CONTAINER_DB\", 64: \"CONTAINER_QUEUE\", 65: \"CONTAINER_EXT\", 66: \"CONTAINER_EXT_DB\", 67: \"CONTAINER_EXT_QUEUE\", 68: \"COMPONENT\", 69: \"COMPONENT_DB\", 70: \"COMPONENT_QUEUE\", 71: \"COMPONENT_EXT\", 72: \"COMPONENT_EXT_DB\", 73: \"COMPONENT_EXT_QUEUE\", 74: \"REL\", 75: \"BIREL\", 76: \"REL_U\", 77: \"REL_D\", 78: \"REL_L\", 79: \"REL_R\", 80: \"REL_B\", 81: \"REL_INDEX\", 82: \"UPDATE_EL_STYLE\", 83: \"UPDATE_REL_STYLE\", 84: \"UPDATE_LAYOUT_CONFIG\", 86: \"STR\", 87: \"STR_KEY\", 88: \"STR_VALUE\", 89: \"ATTRIBUTE\", 90: \"ATTRIBUTE_EMPTY\" },\n productions_: [0, [3, 1], [3, 1], [3, 2], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [6, 4], [6, 6], [12, 1], [13, 1], [17, 1], [14, 1], [11, 4], [11, 4], [11, 4], [11, 4], [11, 4], [23, 1], [23, 1], [23, 2], [29, 1], [29, 2], [29, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 1], [39, 3], [40, 3], [40, 3], [40, 4], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [41, 1], [30, 1], [30, 2], [30, 3], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 1], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [45, 1], [45, 2], [85, 1], [85, 2], [85, 1], [85, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.setDirection(\"TB\");\n break;\n case 5:\n yy.setDirection(\"BT\");\n break;\n case 6:\n yy.setDirection(\"RL\");\n break;\n case 7:\n yy.setDirection(\"LR\");\n break;\n case 11:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 12:\n break;\n case 13:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 14:\n yy.parseDirective(\"}%%\", \"close_directive\", \"c4Context\");\n break;\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n yy.setC4Type($$[$0 - 3]);\n break;\n case 26:\n yy.setTitle($$[$0].substring(6));\n this.$ = $$[$0].substring(6);\n break;\n case 27:\n yy.setAccDescription($$[$0].substring(15));\n this.$ = $$[$0].substring(15);\n break;\n case 28:\n this.$ = $$[$0].trim();\n yy.setTitle(this.$);\n break;\n case 29:\n case 30:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 35:\n case 36:\n $$[$0].splice(2, 0, \"ENTERPRISE\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 37:\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 38:\n $$[$0].splice(2, 0, \"CONTAINER\");\n yy.addContainerBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 39:\n yy.addDeploymentNode(\"node\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 40:\n yy.addDeploymentNode(\"nodeL\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.addDeploymentNode(\"nodeR\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 42:\n yy.popBoundaryParseStack();\n break;\n case 46:\n yy.addPersonOrSystem(\"person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 47:\n yy.addPersonOrSystem(\"external_person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 48:\n yy.addPersonOrSystem(\"system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 49:\n yy.addPersonOrSystem(\"system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 50:\n yy.addPersonOrSystem(\"system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 51:\n yy.addPersonOrSystem(\"external_system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 52:\n yy.addPersonOrSystem(\"external_system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 53:\n yy.addPersonOrSystem(\"external_system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 54:\n yy.addContainer(\"container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 55:\n yy.addContainer(\"container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 56:\n yy.addContainer(\"container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 57:\n yy.addContainer(\"external_container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 58:\n yy.addContainer(\"external_container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 59:\n yy.addContainer(\"external_container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 60:\n yy.addComponent(\"component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 61:\n yy.addComponent(\"component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 62:\n yy.addComponent(\"component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 63:\n yy.addComponent(\"external_component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 64:\n yy.addComponent(\"external_component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 65:\n yy.addComponent(\"external_component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 67:\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 68:\n yy.addRel(\"birel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 69:\n yy.addRel(\"rel_u\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 70:\n yy.addRel(\"rel_d\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 71:\n yy.addRel(\"rel_l\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 72:\n yy.addRel(\"rel_r\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 73:\n yy.addRel(\"rel_b\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 74:\n $$[$0].splice(0, 1);\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 75:\n yy.updateElStyle(\"update_el_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 76:\n yy.updateRelStyle(\"update_rel_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 77:\n yy.updateLayoutConfig(\"update_layout_config\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 78:\n this.$ = [$$[$0]];\n break;\n case 79:\n $$[$0].unshift($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 80:\n case 82:\n this.$ = $$[$0].trim();\n break;\n case 81:\n let kv = {};\n kv[$$[$0 - 1].trim()] = $$[$0].trim();\n this.$ = kv;\n break;\n case 83:\n this.$ = \"\";\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 3: 17, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [2, 8] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 1: [2, 7] }, { 13: 18, 19: [1, 19] }, { 15: [1, 20] }, { 15: [1, 21] }, { 15: [1, 22] }, { 15: [1, 23] }, { 15: [1, 24] }, { 19: [2, 11] }, { 1: [2, 3] }, { 14: 25, 16: [1, 26], 21: $Va }, o([16, 21], [2, 12]), { 23: 28, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 79, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 80, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 81, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 82, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 83] }, { 17: 84, 20: [1, 85] }, { 15: [2, 14] }, { 24: [1, 86] }, o($VS, [2, 20], { 53: 32, 39: 58, 40: 70, 42: 71, 30: 87, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VS, [2, 21]), o($VT, [2, 23], { 15: [1, 88] }), o($VS, [2, 43], { 15: [1, 89] }), o($VU, [2, 26]), o($VU, [2, 27]), { 35: [1, 90] }, { 37: [1, 91] }, o($VU, [2, 30]), { 45: 92, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 98, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 99, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 100, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 101, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 102, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 103, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 104, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 105, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 106, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 107, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 108, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 109, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 110, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 111, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 112, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 113, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 114, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 115, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 116, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, o($VZ, [2, 66]), { 45: 117, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 118, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 119, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 120, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 121, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 122, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 123, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 124, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 125, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 126, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 127, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 30: 128, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 130], 43: [1, 129] }, { 45: 131, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 132, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 133, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 134, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 135, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 136, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 137, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 24: [1, 138] }, { 24: [1, 139] }, { 24: [1, 140] }, { 24: [1, 141] }, o($V_, [2, 9]), { 14: 142, 21: $Va }, { 21: [2, 13] }, { 1: [2, 15] }, o($VS, [2, 22]), o($VT, [2, 24], { 31: 31, 29: 143, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf }), o($VS, [2, 44], { 29: 29, 30: 30, 31: 31, 53: 32, 39: 58, 40: 70, 42: 71, 23: 144, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VU, [2, 28]), o($VU, [2, 29]), o($VZ, [2, 46]), o($V$, [2, 78], { 85: 93, 45: 145, 86: $VV, 87: $VW, 89: $VX, 90: $VY }), o($V01, [2, 80]), { 88: [1, 146] }, o($V01, [2, 82]), o($V01, [2, 83]), o($VZ, [2, 47]), o($VZ, [2, 48]), o($VZ, [2, 49]), o($VZ, [2, 50]), o($VZ, [2, 51]), o($VZ, [2, 52]), o($VZ, [2, 53]), o($VZ, [2, 54]), o($VZ, [2, 55]), o($VZ, [2, 56]), o($VZ, [2, 57]), o($VZ, [2, 58]), o($VZ, [2, 59]), o($VZ, [2, 60]), o($VZ, [2, 61]), o($VZ, [2, 62]), o($VZ, [2, 63]), o($VZ, [2, 64]), o($VZ, [2, 65]), o($VZ, [2, 67]), o($VZ, [2, 68]), o($VZ, [2, 69]), o($VZ, [2, 70]), o($VZ, [2, 71]), o($VZ, [2, 72]), o($VZ, [2, 73]), o($VZ, [2, 74]), o($VZ, [2, 75]), o($VZ, [2, 76]), o($VZ, [2, 77]), { 41: 147, 52: [1, 148] }, { 15: [1, 149] }, { 43: [1, 150] }, o($V11, [2, 35]), o($V11, [2, 36]), o($V11, [2, 37]), o($V11, [2, 38]), o($V11, [2, 39]), o($V11, [2, 40]), o($V11, [2, 41]), { 1: [2, 16] }, { 1: [2, 17] }, { 1: [2, 18] }, { 1: [2, 19] }, { 15: [1, 151] }, o($VT, [2, 25]), o($VS, [2, 45]), o($V$, [2, 79]), o($V01, [2, 81]), o($VZ, [2, 31]), o($VZ, [2, 42]), o($V21, [2, 32]), o($V21, [2, 33], { 15: [1, 152] }), o($V_, [2, 10]), o($V21, [2, 34])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 5: [2, 8], 6: [2, 4], 7: [2, 5], 8: [2, 6], 9: [2, 7], 16: [2, 11], 17: [2, 3], 27: [2, 14], 85: [2, 13], 86: [2, 15], 138: [2, 16], 139: [2, 17], 140: [2, 18], 141: [2, 19] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c2 = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c2 + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 18;\n case 1:\n return 7;\n case 2:\n return 8;\n case 3:\n return 9;\n case 4:\n return 10;\n case 5:\n this.begin(\"type_directive\");\n return 19;\n case 6:\n this.popState();\n this.begin(\"arg_directive\");\n return 16;\n case 7:\n this.popState();\n this.popState();\n return 21;\n case 8:\n return 20;\n case 9:\n return 32;\n case 10:\n return 33;\n case 11:\n this.begin(\"acc_title\");\n return 34;\n case 12:\n this.popState();\n return \"acc_title_value\";\n case 13:\n this.begin(\"acc_descr\");\n return 36;\n case 14:\n this.popState();\n return \"acc_descr_value\";\n case 15:\n this.begin(\"acc_descr_multiline\");\n break;\n case 16:\n this.popState();\n break;\n case 17:\n return \"acc_descr_multiline_value\";\n case 18:\n break;\n case 19:\n c;\n break;\n case 20:\n return 15;\n case 21:\n break;\n case 22:\n return 22;\n case 23:\n return 25;\n case 24:\n return 26;\n case 25:\n return 27;\n case 26:\n return 28;\n case 27:\n this.begin(\"person_ext\");\n return 55;\n case 28:\n this.begin(\"person\");\n return 54;\n case 29:\n this.begin(\"system_ext_queue\");\n return 61;\n case 30:\n this.begin(\"system_ext_db\");\n return 60;\n case 31:\n this.begin(\"system_ext\");\n return 59;\n case 32:\n this.begin(\"system_queue\");\n return 58;\n case 33:\n this.begin(\"system_db\");\n return 57;\n case 34:\n this.begin(\"system\");\n return 56;\n case 35:\n this.begin(\"boundary\");\n return 47;\n case 36:\n this.begin(\"enterprise_boundary\");\n return 44;\n case 37:\n this.begin(\"system_boundary\");\n return 46;\n case 38:\n this.begin(\"container_ext_queue\");\n return 67;\n case 39:\n this.begin(\"container_ext_db\");\n return 66;\n case 40:\n this.begin(\"container_ext\");\n return 65;\n case 41:\n this.begin(\"container_queue\");\n return 64;\n case 42:\n this.begin(\"container_db\");\n return 63;\n case 43:\n this.begin(\"container\");\n return 62;\n case 44:\n this.begin(\"container_boundary\");\n return 48;\n case 45:\n this.begin(\"component_ext_queue\");\n return 73;\n case 46:\n this.begin(\"component_ext_db\");\n return 72;\n case 47:\n this.begin(\"component_ext\");\n return 71;\n case 48:\n this.begin(\"component_queue\");\n return 70;\n case 49:\n this.begin(\"component_db\");\n return 69;\n case 50:\n this.begin(\"component\");\n return 68;\n case 51:\n this.begin(\"node\");\n return 49;\n case 52:\n this.begin(\"node\");\n return 49;\n case 53:\n this.begin(\"node_l\");\n return 50;\n case 54:\n this.begin(\"node_r\");\n return 51;\n case 55:\n this.begin(\"rel\");\n return 74;\n case 56:\n this.begin(\"birel\");\n return 75;\n case 57:\n this.begin(\"rel_u\");\n return 76;\n case 58:\n this.begin(\"rel_u\");\n return 76;\n case 59:\n this.begin(\"rel_d\");\n return 77;\n case 60:\n this.begin(\"rel_d\");\n return 77;\n case 61:\n this.begin(\"rel_l\");\n return 78;\n case 62:\n this.begin(\"rel_l\");\n return 78;\n case 63:\n this.begin(\"rel_r\");\n return 79;\n case 64:\n this.begin(\"rel_r\");\n return 79;\n case 65:\n this.begin(\"rel_b\");\n return 80;\n case 66:\n this.begin(\"rel_index\");\n return 81;\n case 67:\n this.begin(\"update_el_style\");\n return 82;\n case 68:\n this.begin(\"update_rel_style\");\n return 83;\n case 69:\n this.begin(\"update_layout_config\");\n return 84;\n case 70:\n return \"EOF_IN_STRUCT\";\n case 71:\n this.begin(\"attribute\");\n return \"ATTRIBUTE_EMPTY\";\n case 72:\n this.begin(\"attribute\");\n break;\n case 73:\n this.popState();\n this.popState();\n break;\n case 74:\n return 90;\n case 75:\n break;\n case 76:\n return 90;\n case 77:\n this.begin(\"string\");\n break;\n case 78:\n this.popState();\n break;\n case 79:\n return \"STR\";\n case 80:\n this.begin(\"string_kv\");\n break;\n case 81:\n this.begin(\"string_kv_key\");\n return \"STR_KEY\";\n case 82:\n this.popState();\n this.begin(\"string_kv_value\");\n break;\n case 83:\n return \"STR_VALUE\";\n case 84:\n this.popState();\n this.popState();\n break;\n case 85:\n return \"STR\";\n case 86:\n return \"LBRACE\";\n case 87:\n return \"RBRACE\";\n case 88:\n return \"SPACE\";\n case 89:\n return \"EOL\";\n case 90:\n return 24;\n }\n },\n rules: [/^(?:%%\\{)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:((?:(?!\\}%%)[^:.])*))/, /^(?::)/, /^(?:\\}%%)/, /^(?:((?:(?!\\}%%).|\\n)*))/, /^(?:title\\s[^#\\n;]+)/, /^(?:accDescription\\s[^#\\n;]+)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:C4Context\\b)/, /^(?:C4Container\\b)/, /^(?:C4Component\\b)/, /^(?:C4Dynamic\\b)/, /^(?:C4Deployment\\b)/, /^(?:Person_Ext\\b)/, /^(?:Person\\b)/, /^(?:SystemQueue_Ext\\b)/, /^(?:SystemDb_Ext\\b)/, /^(?:System_Ext\\b)/, /^(?:SystemQueue\\b)/, /^(?:SystemDb\\b)/, /^(?:System\\b)/, /^(?:Boundary\\b)/, /^(?:Enterprise_Boundary\\b)/, /^(?:System_Boundary\\b)/, /^(?:ContainerQueue_Ext\\b)/, /^(?:ContainerDb_Ext\\b)/, /^(?:Container_Ext\\b)/, /^(?:ContainerQueue\\b)/, /^(?:ContainerDb\\b)/, /^(?:Container\\b)/, /^(?:Container_Boundary\\b)/, /^(?:ComponentQueue_Ext\\b)/, /^(?:ComponentDb_Ext\\b)/, /^(?:Component_Ext\\b)/, /^(?:ComponentQueue\\b)/, /^(?:ComponentDb\\b)/, /^(?:Component\\b)/, /^(?:Deployment_Node\\b)/, /^(?:Node\\b)/, /^(?:Node_L\\b)/, /^(?:Node_R\\b)/, /^(?:Rel\\b)/, /^(?:BiRel\\b)/, /^(?:Rel_Up\\b)/, /^(?:Rel_U\\b)/, /^(?:Rel_Down\\b)/, /^(?:Rel_D\\b)/, /^(?:Rel_Left\\b)/, /^(?:Rel_L\\b)/, /^(?:Rel_Right\\b)/, /^(?:Rel_R\\b)/, /^(?:Rel_Back\\b)/, /^(?:RelIndex\\b)/, /^(?:UpdateElementStyle\\b)/, /^(?:UpdateRelStyle\\b)/, /^(?:UpdateLayoutConfig\\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*[\"][\"])/, /^(?:[ ]*[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[ ]*[\\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[^,]+)/, /^(?:\\{)/, /^(?:\\})/, /^(?:[\\s]+)/, /^(?:[\\n\\r]+)/, /^(?:$)/],\n conditions: { \"acc_descr_multiline\": { \"rules\": [16, 17], \"inclusive\": false }, \"acc_descr\": { \"rules\": [14], \"inclusive\": false }, \"acc_title\": { \"rules\": [12], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [7, 8], \"inclusive\": false }, \"type_directive\": { \"rules\": [6, 7], \"inclusive\": false }, \"open_directive\": { \"rules\": [5], \"inclusive\": false }, \"string_kv_value\": { \"rules\": [83, 84], \"inclusive\": false }, \"string_kv_key\": { \"rules\": [82], \"inclusive\": false }, \"string_kv\": { \"rules\": [81], \"inclusive\": false }, \"string\": { \"rules\": [78, 79], \"inclusive\": false }, \"attribute\": { \"rules\": [73, 74, 75, 76, 77, 80, 85], \"inclusive\": false }, \"update_layout_config\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"update_rel_style\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"update_el_style\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_b\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_r\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_l\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_d\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_u\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"rel_bi\": { \"rules\": [], \"inclusive\": false }, \"rel\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"node_r\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"node_l\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"node\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"index\": { \"rules\": [], \"inclusive\": false }, \"rel_index\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"component_ext_queue\": { \"rules\": [], \"inclusive\": false }, \"component_ext_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"component_ext\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"component_queue\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"component_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"component\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container_boundary\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container_ext_queue\": { \"rules\": [], \"inclusive\": false }, \"container_ext_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container_ext\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container_queue\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"container\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"birel\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_boundary\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"enterprise_boundary\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"boundary\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_ext_queue\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_ext_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_ext\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_queue\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system_db\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"system\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"person_ext\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"person\": { \"rules\": [70, 71, 72, 73], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 88, 89, 90], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst c4Parser = parser;\nlet c4ShapeArray = [];\nlet boundaryParseStack = [\"\"];\nlet currentBoundaryParse = \"global\";\nlet parentBoundaryParse = \"\";\nlet boundarys = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n];\nlet rels = [];\nlet title = \"\";\nlet wrapEnabled = false;\nlet c4ShapeInRow$1 = 4;\nlet c4BoundaryInRow$1 = 2;\nvar c4Type;\nconst getC4Type = function() {\n return c4Type;\n};\nconst setC4Type = function(c4TypeParam) {\n let sanitizedText = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(c4TypeParam, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n c4Type = sanitizedText;\n};\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nconst addRel = function(type, from, to, label, techn, descr, sprite, tags, link) {\n if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) {\n return;\n }\n let rel = {};\n const old = rels.find((rel2) => rel2.from === from && rel2.to === to);\n if (old) {\n rel = old;\n } else {\n rels.push(rel);\n }\n rel.type = type;\n rel.from = from;\n rel.to = to;\n rel.label = { text: label };\n if (techn === void 0 || techn === null) {\n rel.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n rel[key] = { text: value };\n } else {\n rel.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n rel.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n rel[key] = { text: value };\n } else {\n rel.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n rel[key] = value;\n } else {\n rel.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n rel[key] = value;\n } else {\n rel.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n rel[key] = value;\n } else {\n rel.link = link;\n }\n rel.wrap = autoWrap();\n};\nconst addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let personOrSystem = {};\n const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);\n if (old && alias === old.alias) {\n personOrSystem = old;\n } else {\n personOrSystem.alias = alias;\n c4ShapeArray.push(personOrSystem);\n }\n if (label === void 0 || label === null) {\n personOrSystem.label = { text: \"\" };\n } else {\n personOrSystem.label = { text: label };\n }\n if (descr === void 0 || descr === null) {\n personOrSystem.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n personOrSystem[key] = { text: value };\n } else {\n personOrSystem.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.link = link;\n }\n personOrSystem.typeC4Shape = { text: typeC4Shape };\n personOrSystem.parentBoundary = currentBoundaryParse;\n personOrSystem.wrap = autoWrap();\n};\nconst addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let container = {};\n const old = c4ShapeArray.find((container2) => container2.alias === alias);\n if (old && alias === old.alias) {\n container = old;\n } else {\n container.alias = alias;\n c4ShapeArray.push(container);\n }\n if (label === void 0 || label === null) {\n container.label = { text: \"\" };\n } else {\n container.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n container.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n container[key] = { text: value };\n } else {\n container.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n container.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n container[key] = { text: value };\n } else {\n container.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n container[key] = value;\n } else {\n container.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n container[key] = value;\n } else {\n container.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n container[key] = value;\n } else {\n container.link = link;\n }\n container.wrap = autoWrap();\n container.typeC4Shape = { text: typeC4Shape };\n container.parentBoundary = currentBoundaryParse;\n};\nconst addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let component = {};\n const old = c4ShapeArray.find((component2) => component2.alias === alias);\n if (old && alias === old.alias) {\n component = old;\n } else {\n component.alias = alias;\n c4ShapeArray.push(component);\n }\n if (label === void 0 || label === null) {\n component.label = { text: \"\" };\n } else {\n component.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n component.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n component[key] = { text: value };\n } else {\n component.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n component.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n component[key] = { text: value };\n } else {\n component.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n component[key] = value;\n } else {\n component.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n component[key] = value;\n } else {\n component.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n component[key] = value;\n } else {\n component.link = link;\n }\n component.wrap = autoWrap();\n component.typeC4Shape = { text: typeC4Shape };\n component.parentBoundary = currentBoundaryParse;\n};\nconst addPersonOrSystemBoundary = function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundarys.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundarys.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"system\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst addContainerBoundary = function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundarys.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundarys.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"container\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundarys.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundarys.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"node\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (descr === void 0 || descr === null) {\n boundary.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n boundary[key] = { text: value };\n } else {\n boundary.descr = { text: descr };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.nodeType = nodeType;\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst popBoundaryParseStack = function() {\n currentBoundaryParse = parentBoundaryParse;\n boundaryParseStack.pop();\n parentBoundaryParse = boundaryParseStack.pop();\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {\n let old = c4ShapeArray.find((element) => element.alias === elementName);\n if (old === void 0) {\n old = boundarys.find((element) => element.alias === elementName);\n if (old === void 0) {\n return;\n }\n }\n if (bgColor !== void 0 && bgColor !== null) {\n if (typeof bgColor === \"object\") {\n let [key, value] = Object.entries(bgColor)[0];\n old[key] = value;\n } else {\n old.bgColor = bgColor;\n }\n }\n if (fontColor !== void 0 && fontColor !== null) {\n if (typeof fontColor === \"object\") {\n let [key, value] = Object.entries(fontColor)[0];\n old[key] = value;\n } else {\n old.fontColor = fontColor;\n }\n }\n if (borderColor !== void 0 && borderColor !== null) {\n if (typeof borderColor === \"object\") {\n let [key, value] = Object.entries(borderColor)[0];\n old[key] = value;\n } else {\n old.borderColor = borderColor;\n }\n }\n if (shadowing !== void 0 && shadowing !== null) {\n if (typeof shadowing === \"object\") {\n let [key, value] = Object.entries(shadowing)[0];\n old[key] = value;\n } else {\n old.shadowing = shadowing;\n }\n }\n if (shape !== void 0 && shape !== null) {\n if (typeof shape === \"object\") {\n let [key, value] = Object.entries(shape)[0];\n old[key] = value;\n } else {\n old.shape = shape;\n }\n }\n if (sprite !== void 0 && sprite !== null) {\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n old[key] = value;\n } else {\n old.sprite = sprite;\n }\n }\n if (techn !== void 0 && techn !== null) {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n old[key] = value;\n } else {\n old.techn = techn;\n }\n }\n if (legendText !== void 0 && legendText !== null) {\n if (typeof legendText === \"object\") {\n let [key, value] = Object.entries(legendText)[0];\n old[key] = value;\n } else {\n old.legendText = legendText;\n }\n }\n if (legendSprite !== void 0 && legendSprite !== null) {\n if (typeof legendSprite === \"object\") {\n let [key, value] = Object.entries(legendSprite)[0];\n old[key] = value;\n } else {\n old.legendSprite = legendSprite;\n }\n }\n};\nconst updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) {\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old === void 0) {\n return;\n }\n if (textColor !== void 0 && textColor !== null) {\n if (typeof textColor === \"object\") {\n let [key, value] = Object.entries(textColor)[0];\n old[key] = value;\n } else {\n old.textColor = textColor;\n }\n }\n if (lineColor !== void 0 && lineColor !== null) {\n if (typeof lineColor === \"object\") {\n let [key, value] = Object.entries(lineColor)[0];\n old[key] = value;\n } else {\n old.lineColor = lineColor;\n }\n }\n if (offsetX !== void 0 && offsetX !== null) {\n if (typeof offsetX === \"object\") {\n let [key, value] = Object.entries(offsetX)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetX = parseInt(offsetX);\n }\n }\n if (offsetY !== void 0 && offsetY !== null) {\n if (typeof offsetY === \"object\") {\n let [key, value] = Object.entries(offsetY)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetY = parseInt(offsetY);\n }\n }\n};\nconst updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n let c4ShapeInRowValue = c4ShapeInRow$1;\n let c4BoundaryInRowValue = c4BoundaryInRow$1;\n if (typeof c4ShapeInRowParam === \"object\") {\n const value = Object.values(c4ShapeInRowParam)[0];\n c4ShapeInRowValue = parseInt(value);\n } else {\n c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n }\n if (typeof c4BoundaryInRowParam === \"object\") {\n const value = Object.values(c4BoundaryInRowParam)[0];\n c4BoundaryInRowValue = parseInt(value);\n } else {\n c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n }\n if (c4ShapeInRowValue >= 1) {\n c4ShapeInRow$1 = c4ShapeInRowValue;\n }\n if (c4BoundaryInRowValue >= 1) {\n c4BoundaryInRow$1 = c4BoundaryInRowValue;\n }\n};\nconst getC4ShapeInRow = function() {\n return c4ShapeInRow$1;\n};\nconst getC4BoundaryInRow = function() {\n return c4BoundaryInRow$1;\n};\nconst getCurrentBoundaryParse = function() {\n return currentBoundaryParse;\n};\nconst getParentBoundaryParse = function() {\n return parentBoundaryParse;\n};\nconst getC4ShapeArray = function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return c4ShapeArray;\n } else {\n return c4ShapeArray.filter((personOrSystem) => {\n return personOrSystem.parentBoundary === parentBoundary;\n });\n }\n};\nconst getC4Shape = function(alias) {\n return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n};\nconst getC4ShapeKeys = function(parentBoundary) {\n return Object.keys(getC4ShapeArray(parentBoundary));\n};\nconst getBoundarys = function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return boundarys;\n } else {\n return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary);\n }\n};\nconst getRels = function() {\n return rels;\n};\nconst getTitle = function() {\n return title;\n};\nconst setWrap = function(wrapSetting) {\n wrapEnabled = wrapSetting;\n};\nconst autoWrap = function() {\n return wrapEnabled;\n};\nconst clear = function() {\n c4ShapeArray = [];\n boundarys = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n ];\n parentBoundaryParse = \"\";\n currentBoundaryParse = \"global\";\n boundaryParseStack = [\"\"];\n rels = [];\n boundaryParseStack = [\"\"];\n title = \"\";\n wrapEnabled = false;\n c4ShapeInRow$1 = 4;\n c4BoundaryInRow$1 = 2;\n};\nconst LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25\n};\nconst ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n};\nconst PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n};\nconst setTitle = function(txt) {\n let sanitizedText = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(txt, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n title = sanitizedText;\n};\nconst c4Db = {\n addPersonOrSystem,\n addPersonOrSystemBoundary,\n addContainer,\n addContainerBoundary,\n addComponent,\n addDeploymentNode,\n popBoundaryParseStack,\n addRel,\n updateElStyle,\n updateRelStyle,\n updateLayoutConfig,\n autoWrap,\n setWrap,\n getC4ShapeArray,\n getC4Shape,\n getC4ShapeKeys,\n getBoundarys,\n getCurrentBoundaryParse,\n getParentBoundaryParse,\n getRels,\n getTitle,\n getC4Type,\n getC4ShapeInRow,\n getC4BoundaryInRow,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b,\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().c4,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n setTitle,\n setC4Type\n // apply,\n};\nconst drawRect = function(elem, rectData) {\n return (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.d)(elem, rectData);\n};\nconst drawImage = function(elem, width, height, x, y, link) {\n const imageElem = elem.append(\"image\");\n imageElem.attr(\"width\", width);\n imageElem.attr(\"height\", height);\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n let sanitizedLink = link.startsWith(\"data:image/png;base64\") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__.sanitizeUrl)(link);\n imageElem.attr(\"xlink:href\", sanitizedLink);\n};\nconst drawRels$1 = (elem, rels2, conf2) => {\n const relsElem = elem.append(\"g\");\n let i = 0;\n for (let rel of rels2) {\n let textColor = rel.textColor ? rel.textColor : \"#444444\";\n let strokeColor = rel.lineColor ? rel.lineColor : \"#444444\";\n let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n let url = \"\";\n if (i === 0) {\n let line = relsElem.append(\"line\");\n line.attr(\"x1\", rel.startPoint.x);\n line.attr(\"y1\", rel.startPoint.y);\n line.attr(\"x2\", rel.endPoint.x);\n line.attr(\"y2\", rel.endPoint.y);\n line.attr(\"stroke-width\", \"1\");\n line.attr(\"stroke\", strokeColor);\n line.style(\"fill\", \"none\");\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n i = -1;\n } else {\n let line = relsElem.append(\"path\");\n line.attr(\"fill\", \"none\").attr(\"stroke-width\", \"1\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,starty Qcontrolx,controly stopx,stopy \".replaceAll(\"startx\", rel.startPoint.x).replaceAll(\"starty\", rel.startPoint.y).replaceAll(\n \"controlx\",\n rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4\n ).replaceAll(\"controly\", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll(\"stopx\", rel.endPoint.x).replaceAll(\"stopy\", rel.endPoint.y)\n );\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n }\n let messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n rel.label.text,\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY,\n rel.label.width,\n rel.label.height,\n { fill: textColor },\n messageConf\n );\n if (rel.techn && rel.techn.text !== \"\") {\n messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n \"[\" + rel.techn.text + \"]\",\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY,\n Math.max(rel.label.width, rel.techn.width),\n rel.techn.height,\n { fill: textColor, \"font-style\": \"italic\" },\n messageConf\n );\n }\n }\n};\nconst drawBoundary$1 = function(elem, boundary, conf2) {\n const boundaryElem = elem.append(\"g\");\n let fillColor = boundary.bgColor ? boundary.bgColor : \"none\";\n let strokeColor = boundary.borderColor ? boundary.borderColor : \"#444444\";\n let fontColor = boundary.fontColor ? boundary.fontColor : \"black\";\n let attrsValue = { \"stroke-width\": 1, \"stroke-dasharray\": \"7.0,7.0\" };\n if (boundary.nodeType) {\n attrsValue = { \"stroke-width\": 1 };\n }\n let rectData = {\n x: boundary.x,\n y: boundary.y,\n fill: fillColor,\n stroke: strokeColor,\n width: boundary.width,\n height: boundary.height,\n rx: 2.5,\n ry: 2.5,\n attrs: attrsValue\n };\n drawRect(boundaryElem, rectData);\n let boundaryConf = conf2.boundaryFont();\n boundaryConf.fontWeight = \"bold\";\n boundaryConf.fontSize = boundaryConf.fontSize + 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.label.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.label.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n if (boundary.type && boundary.type.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.type.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.type.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n if (boundary.descr && boundary.descr.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontSize = boundaryConf.fontSize - 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.descr.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.descr.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n};\nconst drawC4Shape = function(elem, c4Shape, conf2) {\n var _a;\n let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + \"_bg_color\"];\n let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + \"_border_color\"];\n let fontColor = c4Shape.fontColor ? c4Shape.fontColor : \"#FFFFFF\";\n let personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n break;\n case \"external_person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=\";\n break;\n }\n const c4ShapeElem = elem.append(\"g\");\n c4ShapeElem.attr(\"class\", \"person-man\");\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n case \"system\":\n case \"external_system\":\n case \"container\":\n case \"external_container\":\n case \"component\":\n case \"external_component\":\n rect.x = c4Shape.x;\n rect.y = c4Shape.y;\n rect.fill = fillColor;\n rect.width = c4Shape.width;\n rect.height = c4Shape.height;\n rect.stroke = strokeColor;\n rect.rx = 2.5;\n rect.ry = 2.5;\n rect.attrs = { \"stroke-width\": 0.5 };\n drawRect(c4ShapeElem, rect);\n break;\n case \"system_db\":\n case \"external_system_db\":\n case \"container_db\":\n case \"external_container_db\":\n case \"component_db\":\n case \"external_component_db\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2).replaceAll(\"height\", c4Shape.height)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2)\n );\n break;\n case \"system_queue\":\n case \"external_system_queue\":\n case \"container_queue\":\n case \"external_container_queue\":\n case \"component_queue\":\n case \"external_component_queue\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"width\", c4Shape.width).replaceAll(\"half\", c4Shape.height / 2)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half\".replaceAll(\"startx\", c4Shape.x + c4Shape.width).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.height / 2)\n );\n break;\n }\n let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text);\n c4ShapeElem.append(\"text\").attr(\"fill\", fontColor).attr(\"font-family\", c4ShapeFontConf.fontFamily).attr(\"font-size\", c4ShapeFontConf.fontSize - 2).attr(\"font-style\", \"italic\").attr(\"lengthAdjust\", \"spacing\").attr(\"textLength\", c4Shape.typeC4Shape.width).attr(\"x\", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr(\"y\", c4Shape.y + c4Shape.typeC4Shape.Y).text(\"<<\" + c4Shape.typeC4Shape.text + \">>\");\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n drawImage(\n c4ShapeElem,\n 48,\n 48,\n c4Shape.x + c4Shape.width / 2 - 24,\n c4Shape.y + c4Shape.image.Y,\n personImg\n );\n break;\n }\n let textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontWeight = \"bold\";\n textFontConf.fontSize = textFontConf.fontSize + 2;\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.label.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.label.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontColor = fontColor;\n if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.techn.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.techn.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n } else if (c4Shape.type && c4Shape.type.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.type.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.type.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n }\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n textFontConf = conf2.personFont();\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.descr.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.descr.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n }\n return c4Shape.height;\n};\nconst insertDatabaseIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"database\").attr(\"fill-rule\", \"evenodd\").attr(\"clip-rule\", \"evenodd\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"\n );\n};\nconst insertComputerIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"computer\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"\n );\n};\nconst insertClockIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"clock\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"\n );\n};\nconst insertArrowHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n};\nconst insertArrowEnd = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowend\").attr(\"refX\", 1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 10 0 L 0 5 L 10 10 z\");\n};\nconst insertArrowFilledHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"filled-head\").attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst insertDynamicNumber = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"sequencenumber\").attr(\"refX\", 15).attr(\"refY\", 15).attr(\"markerWidth\", 60).attr(\"markerHeight\", 40).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", 15).attr(\"cy\", 15).attr(\"r\", 6);\n};\nconst insertArrowCrossHead = function(elem) {\n const defs = elem.append(\"defs\");\n const marker = defs.append(\"marker\").attr(\"id\", \"crosshead\").attr(\"markerWidth\", 15).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").attr(\"refX\", 16).attr(\"refY\", 4);\n marker.append(\"path\").attr(\"fill\", \"black\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 9,2 V 6 L16,4 Z\");\n marker.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 0,1 L 6,7 M 6,1 L 0,7\");\n};\nconst getC4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n};\nconst _drawTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { fontSize, fontFamily, fontWeight } = conf2;\n const lines = content.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * fontSize - fontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).style(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").style(\"font-size\", fontSize).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily);\n text.append(\"tspan\").attr(\"dy\", dy).text(lines[i]).attr(\"alignment-baseline\", \"mathematical\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst svgDraw = {\n drawRect,\n drawBoundary: drawBoundary$1,\n drawC4Shape,\n drawRels: drawRels$1,\n drawImage,\n insertArrowHead,\n insertArrowEnd,\n insertArrowFilledHead,\n insertDynamicNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon\n};\nlet globalBoundaryMaxX = 0, globalBoundaryMaxY = 0;\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\nparser.yy = c4Db;\nlet conf = {};\nclass Bounds {\n constructor(diagObj) {\n this.name = \"\";\n this.data = {};\n this.data.startx = void 0;\n this.data.stopx = void 0;\n this.data.starty = void 0;\n this.data.stopy = void 0;\n this.data.widthLimit = void 0;\n this.nextData = {};\n this.nextData.startx = void 0;\n this.nextData.stopx = void 0;\n this.nextData.starty = void 0;\n this.nextData.stopy = void 0;\n this.nextData.cnt = 0;\n setConf(diagObj.db.getConfig());\n }\n setData(startx, stopx, starty, stopy) {\n this.nextData.startx = this.data.startx = startx;\n this.nextData.stopx = this.data.stopx = stopx;\n this.nextData.starty = this.data.starty = starty;\n this.nextData.stopy = this.data.stopy = stopy;\n }\n updateVal(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n }\n insert(c4Shape) {\n this.nextData.cnt = this.nextData.cnt + 1;\n let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;\n let _stopx = _startx + c4Shape.width;\n let _starty = this.nextData.starty + c4Shape.margin * 2;\n let _stopy = _starty + c4Shape.height;\n if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) {\n _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n _starty = this.nextData.stopy + c4Shape.margin * 2;\n this.nextData.stopx = _stopx = _startx + c4Shape.width;\n this.nextData.starty = this.nextData.stopy;\n this.nextData.stopy = _stopy = _starty + c4Shape.height;\n this.nextData.cnt = 1;\n }\n c4Shape.x = _startx;\n c4Shape.y = _starty;\n this.updateVal(this.data, \"startx\", _startx, Math.min);\n this.updateVal(this.data, \"starty\", _starty, Math.min);\n this.updateVal(this.data, \"stopx\", _stopx, Math.max);\n this.updateVal(this.data, \"stopy\", _stopy, Math.max);\n this.updateVal(this.nextData, \"startx\", _startx, Math.min);\n this.updateVal(this.nextData, \"starty\", _starty, Math.min);\n this.updateVal(this.nextData, \"stopx\", _stopx, Math.max);\n this.updateVal(this.nextData, \"stopy\", _stopy, Math.max);\n }\n init(diagObj) {\n this.name = \"\";\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n widthLimit: void 0\n };\n this.nextData = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n cnt: 0\n };\n setConf(diagObj.db.getConfig());\n }\n bumpLastMargin(margin) {\n this.data.stopx += margin;\n this.data.stopy += margin;\n }\n}\nconst setConf = function(cnf) {\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.f)(conf, cnf);\n if (cnf.fontFamily) {\n conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\nconst c4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n};\nconst boundaryFont = (cnf) => {\n return {\n fontFamily: cnf.boundaryFontFamily,\n fontSize: cnf.boundaryFontSize,\n fontWeight: cnf.boundaryFontWeight\n };\n};\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight\n };\n};\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n if (!c4Shape[textType].width) {\n if (c4ShapeTextWrap) {\n c4Shape[textType].text = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.w)(c4Shape[textType].text, textLimitWidth, textConf);\n c4Shape[textType].textLines = c4Shape[textType].text.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex).length;\n c4Shape[textType].width = textLimitWidth;\n c4Shape[textType].height = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.j)(c4Shape[textType].text, textConf);\n } else {\n let lines = c4Shape[textType].text.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex);\n c4Shape[textType].textLines = lines.length;\n let lineHeight = 0;\n c4Shape[textType].height = 0;\n c4Shape[textType].width = 0;\n for (const line of lines) {\n c4Shape[textType].width = Math.max(\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(line, textConf),\n c4Shape[textType].width\n );\n lineHeight = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.j)(line, textConf);\n c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n }\n }\n }\n}\nconst drawBoundary = function(diagram2, boundary, bounds) {\n boundary.x = bounds.data.startx;\n boundary.y = bounds.data.starty;\n boundary.width = bounds.data.stopx - bounds.data.startx;\n boundary.height = bounds.data.stopy - bounds.data.starty;\n boundary.label.y = conf.c4ShapeMargin - 35;\n let boundaryTextWrap = boundary.wrap && conf.wrap;\n let boundaryLabelConf = boundaryFont(conf);\n boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n boundaryLabelConf.fontWeight = \"bold\";\n let textLimitWidth = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(boundary.label.text, boundaryLabelConf);\n calcC4ShapeTextWH(\"label\", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n svgDraw.drawBoundary(diagram2, boundary, conf);\n};\nconst drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) {\n let Y = 0;\n for (const c4ShapeKey of c4ShapeKeys) {\n Y = 0;\n const c4Shape = c4ShapeArray2[c4ShapeKey];\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n c4Shape.typeC4Shape.width = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(\n \"<<\" + c4Shape.typeC4Shape.text + \">>\",\n c4ShapeTypeConf\n );\n c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n c4Shape.image = { width: 0, height: 0, Y: 0 };\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n break;\n }\n if (c4Shape.sprite) {\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n }\n let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n c4ShapeLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\"label\", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n c4Shape[\"label\"].Y = Y + 8;\n Y = c4Shape[\"label\"].Y + c4Shape[\"label\"].height;\n if (c4Shape.type && c4Shape.type.text !== \"\") {\n c4Shape.type.text = \"[\" + c4Shape.type.text + \"]\";\n let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"type\", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);\n c4Shape[\"type\"].Y = Y + 5;\n Y = c4Shape[\"type\"].Y + c4Shape[\"type\"].height;\n } else if (c4Shape.techn && c4Shape.techn.text !== \"\") {\n c4Shape.techn.text = \"[\" + c4Shape.techn.text + \"]\";\n let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n calcC4ShapeTextWH(\"techn\", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n c4Shape[\"techn\"].Y = Y + 5;\n Y = c4Shape[\"techn\"].Y + c4Shape[\"techn\"].height;\n }\n let rectHeight = Y;\n let rectWidth = c4Shape.label.width;\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"descr\", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n c4Shape[\"descr\"].Y = Y + 20;\n Y = c4Shape[\"descr\"].Y + c4Shape[\"descr\"].height;\n rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n rectHeight = Y - c4Shape[\"descr\"].textLines * 5;\n }\n rectWidth = rectWidth + conf.c4ShapePadding;\n c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n currentBounds.insert(c4Shape);\n svgDraw.drawC4Shape(diagram2, c4Shape, conf);\n }\n currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n};\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n}\nlet getIntersectPoint = function(fromNode, endPoint) {\n let x1 = fromNode.x;\n let y1 = fromNode.y;\n let x2 = endPoint.x;\n let y2 = endPoint.y;\n let fromCenterX = x1 + fromNode.width / 2;\n let fromCenterY = y1 + fromNode.height / 2;\n let dx = Math.abs(x1 - x2);\n let dy = Math.abs(y1 - y2);\n let tanDYX = dy / dx;\n let fromDYX = fromNode.height / fromNode.width;\n let returnPoint = null;\n if (y1 == y2 && x1 < x2) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n } else if (y1 == y2 && x1 > x2) {\n returnPoint = new Point(x1, fromCenterY);\n } else if (x1 == x2 && y1 < y2) {\n returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n } else if (x1 == x2 && y1 > y2) {\n returnPoint = new Point(fromCenterX, y1);\n }\n if (x1 > x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX - dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX + dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1);\n }\n } else if (x1 > x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX);\n } else {\n returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1);\n }\n }\n return returnPoint;\n};\nlet getIntersectPoints = function(fromNode, endNode) {\n let endIntersectPoint = { x: 0, y: 0 };\n endIntersectPoint.x = endNode.x + endNode.width / 2;\n endIntersectPoint.y = endNode.y + endNode.height / 2;\n let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n return { startPoint, endPoint };\n};\nconst drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) {\n let i = 0;\n for (let rel of rels2) {\n i = i + 1;\n let relTextWrap = rel.wrap && conf.wrap;\n let relConf = messageFont(conf);\n let diagramType = diagObj.db.getC4Type();\n if (diagramType === \"C4Dynamic\") {\n rel.label.text = i + \": \" + rel.label.text;\n }\n let textLimitWidth = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(rel.label.text, relConf);\n calcC4ShapeTextWH(\"label\", rel, relTextWrap, relConf, textLimitWidth);\n if (rel.techn && rel.techn.text !== \"\") {\n textLimitWidth = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(rel.techn.text, relConf);\n calcC4ShapeTextWH(\"techn\", rel, relTextWrap, relConf, textLimitWidth);\n }\n if (rel.descr && rel.descr.text !== \"\") {\n textLimitWidth = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.h)(rel.descr.text, relConf);\n calcC4ShapeTextWH(\"descr\", rel, relTextWrap, relConf, textLimitWidth);\n }\n let fromNode = getC4ShapeObj(rel.from);\n let endNode = getC4ShapeObj(rel.to);\n let points = getIntersectPoints(fromNode, endNode);\n rel.startPoint = points.startPoint;\n rel.endPoint = points.endPoint;\n }\n svgDraw.drawRels(diagram2, rels2, conf);\n};\nfunction drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {\n let currentBounds = new Bounds(diagObj);\n currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length);\n for (let [i, currentBoundary] of currentBoundaries.entries()) {\n let Y = 0;\n currentBoundary.image = { width: 0, height: 0, Y: 0 };\n if (currentBoundary.sprite) {\n currentBoundary.image.width = 48;\n currentBoundary.image.height = 48;\n currentBoundary.image.Y = Y;\n Y = currentBoundary.image.Y + currentBoundary.image.height;\n }\n let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n let currentBoundaryLabelConf = boundaryFont(conf);\n currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n currentBoundaryLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\n \"label\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryLabelConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"label\"].Y = Y + 8;\n Y = currentBoundary[\"label\"].Y + currentBoundary[\"label\"].height;\n if (currentBoundary.type && currentBoundary.type.text !== \"\") {\n currentBoundary.type.text = \"[\" + currentBoundary.type.text + \"]\";\n let currentBoundaryTypeConf = boundaryFont(conf);\n calcC4ShapeTextWH(\n \"type\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryTypeConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"type\"].Y = Y + 5;\n Y = currentBoundary[\"type\"].Y + currentBoundary[\"type\"].height;\n }\n if (currentBoundary.descr && currentBoundary.descr.text !== \"\") {\n let currentBoundaryDescrConf = boundaryFont(conf);\n currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n calcC4ShapeTextWH(\n \"descr\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryDescrConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"descr\"].Y = Y + 20;\n Y = currentBoundary[\"descr\"].Y + currentBoundary[\"descr\"].height;\n }\n if (i == 0 || i % c4BoundaryInRow === 0) {\n let _x = parentBounds.data.startx + conf.diagramMarginX;\n let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n currentBounds.setData(_x, _x, _y, _y);\n } else {\n let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx;\n let _y = currentBounds.data.starty;\n currentBounds.setData(_x, _x, _y, _y);\n }\n currentBounds.name = currentBoundary.alias;\n let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);\n let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);\n if (currentPersonOrSystemKeys.length > 0) {\n drawC4ShapeArray(\n currentBounds,\n diagram2,\n currentPersonOrSystemArray,\n currentPersonOrSystemKeys\n );\n }\n parentBoundaryAlias = currentBoundary.alias;\n let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias);\n if (nextCurrentBoundarys.length > 0) {\n drawInsideBoundary(\n diagram2,\n parentBoundaryAlias,\n currentBounds,\n nextCurrentBoundarys,\n diagObj\n );\n }\n if (currentBoundary.alias !== \"global\") {\n drawBoundary(diagram2, currentBoundary, currentBounds);\n }\n parentBounds.data.stopy = Math.max(\n currentBounds.data.stopy + conf.c4ShapeMargin,\n parentBounds.data.stopy\n );\n parentBounds.data.stopx = Math.max(\n currentBounds.data.stopx + conf.c4ShapeMargin,\n parentBounds.data.stopx\n );\n globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n }\n}\nconst draw = function(_text, id, _version, diagObj) {\n conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().c4;\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n let db = diagObj.db;\n diagObj.db.setWrap(conf.wrap);\n c4ShapeInRow = db.getC4ShapeInRow();\n c4BoundaryInRow = db.getC4BoundaryInRow();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`C:${JSON.stringify(conf, null, 2)}`);\n const diagram2 = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(`[id=\"${id}\"]`);\n svgDraw.insertComputerIcon(diagram2);\n svgDraw.insertDatabaseIcon(diagram2);\n svgDraw.insertClockIcon(diagram2);\n let screenBounds = new Bounds(diagObj);\n screenBounds.setData(\n conf.diagramMarginX,\n conf.diagramMarginX,\n conf.diagramMarginY,\n conf.diagramMarginY\n );\n screenBounds.data.widthLimit = screen.availWidth;\n globalBoundaryMaxX = conf.diagramMarginX;\n globalBoundaryMaxY = conf.diagramMarginY;\n const title2 = diagObj.db.getTitle();\n let currentBoundaries = diagObj.db.getBoundarys(\"\");\n drawInsideBoundary(diagram2, \"\", screenBounds, currentBoundaries, diagObj);\n svgDraw.insertArrowHead(diagram2);\n svgDraw.insertArrowEnd(diagram2);\n svgDraw.insertArrowCrossHead(diagram2);\n svgDraw.insertArrowFilledHead(diagram2);\n drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);\n screenBounds.data.stopx = globalBoundaryMaxX;\n screenBounds.data.stopy = globalBoundaryMaxY;\n const box = screenBounds.data;\n let boxHeight = box.stopy - box.starty;\n let height = boxHeight + 2 * conf.diagramMarginY;\n let boxWidth = box.stopx - box.startx;\n const width = boxWidth + 2 * conf.diagramMarginX;\n if (title2) {\n diagram2.append(\"text\").text(title2).attr(\"x\", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr(\"y\", box.starty + conf.diagramMarginY);\n }\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.i)(diagram2, height, width, conf.useMaxWidth);\n const extraVertForTitle = title2 ? 60 : 0;\n diagram2.attr(\n \"viewBox\",\n box.startx - conf.diagramMarginX + \" -\" + (conf.diagramMarginY + extraVertForTitle) + \" \" + width + \" \" + (height + extraVertForTitle)\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`models:`, box);\n};\nconst c4Renderer = {\n drawPersonOrSystemArray: drawC4ShapeArray,\n drawBoundary,\n setConf,\n draw\n};\nconst getStyles = (options) => `.person {\n stroke: ${options.personBorder};\n fill: ${options.personBkg};\n }\n`;\nconst c4Styles = getStyles;\nconst diagram = {\n parser: c4Parser,\n db: c4Db,\n renderer: c4Renderer,\n styles: c4Styles,\n init: (cnf) => {\n c4Renderer.setConf(cnf.c4);\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jNERpYWdyYW0tOWNkZGIzN2YuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBc1Q7QUFDMVI7QUFDb0Q7QUFDMUI7QUFDbkM7QUFDSjtBQUNJO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQixvc0RBQW9zRDtBQUNwdEQsa0JBQWtCLDJ3Q0FBMndDO0FBQzd4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxpQkFBaUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx5Q0FBeUM7QUFDakQ7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEseUNBQXlDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpQkFBaUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtQ0FBbUM7QUFDL0MsZ0NBQWdDLGtFQUFxQjtBQUNyRCxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsdURBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsdURBQVM7QUFDeEMsaUVBQWlFLGtFQUFxQjtBQUN0RjtBQUNBLGlDQUFpQyx1REFBbUI7QUFDcEQsTUFBTTtBQUNOLCtDQUErQyxrRUFBcUI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx1REFBa0I7QUFDNUI7QUFDQTtBQUNBLHFCQUFxQix1REFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFnQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx5REFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvYzREaWFncmFtLTljZGRiMzdmLmpzP2M0NTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcyBhcyBzZXRBY2NUaXRsZSwgZyBhcyBnZXRBY2NUaXRsZSwgYSBhcyBnZXRBY2NEZXNjcmlwdGlvbiwgYiBhcyBzZXRBY2NEZXNjcmlwdGlvbiwgYyBhcyBnZXRDb25maWcsIGQgYXMgc2FuaXRpemVUZXh0LCBtIGFzIG1lcm1haWRBUEksIGUgYXMgY29tbW9uLCBmIGFzIGFzc2lnbldpdGhEZXB0aCwgaCBhcyBjYWxjdWxhdGVUZXh0V2lkdGgsIGwgYXMgbG9nLCBpIGFzIGNvbmZpZ3VyZVN2Z1NpemUsIHcgYXMgd3JhcExhYmVsLCBqIGFzIGNhbGN1bGF0ZVRleHRIZWlnaHQgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGQgYXMgZHJhd1JlY3QkMSwgZyBhcyBnZXROb3RlUmVjdCB9IGZyb20gXCIuL3N2Z0RyYXdDb21tb24tZjI2Y2FkMzkuanNcIjtcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCA2XSwgJFYxID0gWzEsIDddLCAkVjIgPSBbMSwgOF0sICRWMyA9IFsxLCA5XSwgJFY0ID0gWzEsIDE2XSwgJFY1ID0gWzEsIDExXSwgJFY2ID0gWzEsIDEyXSwgJFY3ID0gWzEsIDEzXSwgJFY4ID0gWzEsIDE0XSwgJFY5ID0gWzEsIDE1XSwgJFZhID0gWzEsIDI3XSwgJFZiID0gWzEsIDMzXSwgJFZjID0gWzEsIDM0XSwgJFZkID0gWzEsIDM1XSwgJFZlID0gWzEsIDM2XSwgJFZmID0gWzEsIDM3XSwgJFZnID0gWzEsIDcyXSwgJFZoID0gWzEsIDczXSwgJFZpID0gWzEsIDc0XSwgJFZqID0gWzEsIDc1XSwgJFZrID0gWzEsIDc2XSwgJFZsID0gWzEsIDc3XSwgJFZtID0gWzEsIDc4XSwgJFZuID0gWzEsIDM4XSwgJFZvID0gWzEsIDM5XSwgJFZwID0gWzEsIDQwXSwgJFZxID0gWzEsIDQxXSwgJFZyID0gWzEsIDQyXSwgJFZzID0gWzEsIDQzXSwgJFZ0ID0gWzEsIDQ0XSwgJFZ1ID0gWzEsIDQ1XSwgJFZ2ID0gWzEsIDQ2XSwgJFZ3ID0gWzEsIDQ3XSwgJFZ4ID0gWzEsIDQ4XSwgJFZ5ID0gWzEsIDQ5XSwgJFZ6ID0gWzEsIDUwXSwgJFZBID0gWzEsIDUxXSwgJFZCID0gWzEsIDUyXSwgJFZDID0gWzEsIDUzXSwgJFZEID0gWzEsIDU0XSwgJFZFID0gWzEsIDU1XSwgJFZGID0gWzEsIDU2XSwgJFZHID0gWzEsIDU3XSwgJFZIID0gWzEsIDU5XSwgJFZJID0gWzEsIDYwXSwgJFZKID0gWzEsIDYxXSwgJFZLID0gWzEsIDYyXSwgJFZMID0gWzEsIDYzXSwgJFZNID0gWzEsIDY0XSwgJFZOID0gWzEsIDY1XSwgJFZPID0gWzEsIDY2XSwgJFZQID0gWzEsIDY3XSwgJFZRID0gWzEsIDY4XSwgJFZSID0gWzEsIDY5XSwgJFZTID0gWzI0LCA1Ml0sICRWVCA9IFsyNCwgNDQsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NF0sICRWVSA9IFsxNSwgMjQsIDQ0LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODRdLCAkVlYgPSBbMSwgOTRdLCAkVlcgPSBbMSwgOTVdLCAkVlggPSBbMSwgOTZdLCAkVlkgPSBbMSwgOTddLCAkVlogPSBbMTUsIDI0LCA1Ml0sICRWXyA9IFs3LCA4LCA5LCAxMCwgMTgsIDIyLCAyNSwgMjYsIDI3LCAyOF0sICRWJCA9IFsxNSwgMjQsIDQzLCA1Ml0sICRWMDEgPSBbMTUsIDI0LCA0MywgNTIsIDg2LCA4NywgODksIDkwXSwgJFYxMSA9IFsxNSwgNDNdLCAkVjIxID0gWzQ0LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJtZXJtYWlkRG9jXCI6IDQsIFwiZGlyZWN0aW9uXCI6IDUsIFwiZGlyZWN0aXZlXCI6IDYsIFwiZGlyZWN0aW9uX3RiXCI6IDcsIFwiZGlyZWN0aW9uX2J0XCI6IDgsIFwiZGlyZWN0aW9uX3JsXCI6IDksIFwiZGlyZWN0aW9uX2xyXCI6IDEwLCBcImdyYXBoQ29uZmlnXCI6IDExLCBcIm9wZW5EaXJlY3RpdmVcIjogMTIsIFwidHlwZURpcmVjdGl2ZVwiOiAxMywgXCJjbG9zZURpcmVjdGl2ZVwiOiAxNCwgXCJORVdMSU5FXCI6IDE1LCBcIjpcIjogMTYsIFwiYXJnRGlyZWN0aXZlXCI6IDE3LCBcIm9wZW5fZGlyZWN0aXZlXCI6IDE4LCBcInR5cGVfZGlyZWN0aXZlXCI6IDE5LCBcImFyZ19kaXJlY3RpdmVcIjogMjAsIFwiY2xvc2VfZGlyZWN0aXZlXCI6IDIxLCBcIkM0X0NPTlRFWFRcIjogMjIsIFwic3RhdGVtZW50c1wiOiAyMywgXCJFT0ZcIjogMjQsIFwiQzRfQ09OVEFJTkVSXCI6IDI1LCBcIkM0X0NPTVBPTkVOVFwiOiAyNiwgXCJDNF9EWU5BTUlDXCI6IDI3LCBcIkM0X0RFUExPWU1FTlRcIjogMjgsIFwib3RoZXJTdGF0ZW1lbnRzXCI6IDI5LCBcImRpYWdyYW1TdGF0ZW1lbnRzXCI6IDMwLCBcIm90aGVyU3RhdGVtZW50XCI6IDMxLCBcInRpdGxlXCI6IDMyLCBcImFjY0Rlc2NyaXB0aW9uXCI6IDMzLCBcImFjY190aXRsZVwiOiAzNCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzUsIFwiYWNjX2Rlc2NyXCI6IDM2LCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM4LCBcImJvdW5kYXJ5U3RhdGVtZW50XCI6IDM5LCBcImJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnRcIjogNDAsIFwiYm91bmRhcnlTdG9wU3RhdGVtZW50XCI6IDQxLCBcImJvdW5kYXJ5U3RhcnRcIjogNDIsIFwiTEJSQUNFXCI6IDQzLCBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIjogNDQsIFwiYXR0cmlidXRlc1wiOiA0NSwgXCJTWVNURU1fQk9VTkRBUllcIjogNDYsIFwiQk9VTkRBUllcIjogNDcsIFwiQ09OVEFJTkVSX0JPVU5EQVJZXCI6IDQ4LCBcIk5PREVcIjogNDksIFwiTk9ERV9MXCI6IDUwLCBcIk5PREVfUlwiOiA1MSwgXCJSQlJBQ0VcIjogNTIsIFwiZGlhZ3JhbVN0YXRlbWVudFwiOiA1MywgXCJQRVJTT05cIjogNTQsIFwiUEVSU09OX0VYVFwiOiA1NSwgXCJTWVNURU1cIjogNTYsIFwiU1lTVEVNX0RCXCI6IDU3LCBcIlNZU1RFTV9RVUVVRVwiOiA1OCwgXCJTWVNURU1fRVhUXCI6IDU5LCBcIlNZU1RFTV9FWFRfREJcIjogNjAsIFwiU1lTVEVNX0VYVF9RVUVVRVwiOiA2MSwgXCJDT05UQUlORVJcIjogNjIsIFwiQ09OVEFJTkVSX0RCXCI6IDYzLCBcIkNPTlRBSU5FUl9RVUVVRVwiOiA2NCwgXCJDT05UQUlORVJfRVhUXCI6IDY1LCBcIkNPTlRBSU5FUl9FWFRfREJcIjogNjYsIFwiQ09OVEFJTkVSX0VYVF9RVUVVRVwiOiA2NywgXCJDT01QT05FTlRcIjogNjgsIFwiQ09NUE9ORU5UX0RCXCI6IDY5LCBcIkNPTVBPTkVOVF9RVUVVRVwiOiA3MCwgXCJDT01QT05FTlRfRVhUXCI6IDcxLCBcIkNPTVBPTkVOVF9FWFRfREJcIjogNzIsIFwiQ09NUE9ORU5UX0VYVF9RVUVVRVwiOiA3MywgXCJSRUxcIjogNzQsIFwiQklSRUxcIjogNzUsIFwiUkVMX1VcIjogNzYsIFwiUkVMX0RcIjogNzcsIFwiUkVMX0xcIjogNzgsIFwiUkVMX1JcIjogNzksIFwiUkVMX0JcIjogODAsIFwiUkVMX0lOREVYXCI6IDgxLCBcIlVQREFURV9FTF9TVFlMRVwiOiA4MiwgXCJVUERBVEVfUkVMX1NUWUxFXCI6IDgzLCBcIlVQREFURV9MQVlPVVRfQ09ORklHXCI6IDg0LCBcImF0dHJpYnV0ZVwiOiA4NSwgXCJTVFJcIjogODYsIFwiU1RSX0tFWVwiOiA4NywgXCJTVFJfVkFMVUVcIjogODgsIFwiQVRUUklCVVRFXCI6IDg5LCBcIkFUVFJJQlVURV9FTVBUWVwiOiA5MCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDc6IFwiZGlyZWN0aW9uX3RiXCIsIDg6IFwiZGlyZWN0aW9uX2J0XCIsIDk6IFwiZGlyZWN0aW9uX3JsXCIsIDEwOiBcImRpcmVjdGlvbl9sclwiLCAxNTogXCJORVdMSU5FXCIsIDE2OiBcIjpcIiwgMTg6IFwib3Blbl9kaXJlY3RpdmVcIiwgMTk6IFwidHlwZV9kaXJlY3RpdmVcIiwgMjA6IFwiYXJnX2RpcmVjdGl2ZVwiLCAyMTogXCJjbG9zZV9kaXJlY3RpdmVcIiwgMjI6IFwiQzRfQ09OVEVYVFwiLCAyNDogXCJFT0ZcIiwgMjU6IFwiQzRfQ09OVEFJTkVSXCIsIDI2OiBcIkM0X0NPTVBPTkVOVFwiLCAyNzogXCJDNF9EWU5BTUlDXCIsIDI4OiBcIkM0X0RFUExPWU1FTlRcIiwgMzI6IFwidGl0bGVcIiwgMzM6IFwiYWNjRGVzY3JpcHRpb25cIiwgMzQ6IFwiYWNjX3RpdGxlXCIsIDM1OiBcImFjY190aXRsZV92YWx1ZVwiLCAzNjogXCJhY2NfZGVzY3JcIiwgMzc6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDM4OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgNDM6IFwiTEJSQUNFXCIsIDQ0OiBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIiwgNDY6IFwiU1lTVEVNX0JPVU5EQVJZXCIsIDQ3OiBcIkJPVU5EQVJZXCIsIDQ4OiBcIkNPTlRBSU5FUl9CT1VOREFSWVwiLCA0OTogXCJOT0RFXCIsIDUwOiBcIk5PREVfTFwiLCA1MTogXCJOT0RFX1JcIiwgNTI6IFwiUkJSQUNFXCIsIDU0OiBcIlBFUlNPTlwiLCA1NTogXCJQRVJTT05fRVhUXCIsIDU2OiBcIlNZU1RFTVwiLCA1NzogXCJTWVNURU1fREJcIiwgNTg6IFwiU1lTVEVNX1FVRVVFXCIsIDU5OiBcIlNZU1RFTV9FWFRcIiwgNjA6IFwiU1lTVEVNX0VYVF9EQlwiLCA2MTogXCJTWVNURU1fRVhUX1FVRVVFXCIsIDYyOiBcIkNPTlRBSU5FUlwiLCA2MzogXCJDT05UQUlORVJfREJcIiwgNjQ6IFwiQ09OVEFJTkVSX1FVRVVFXCIsIDY1OiBcIkNPTlRBSU5FUl9FWFRcIiwgNjY6IFwiQ09OVEFJTkVSX0VYVF9EQlwiLCA2NzogXCJDT05UQUlORVJfRVhUX1FVRVVFXCIsIDY4OiBcIkNPTVBPTkVOVFwiLCA2OTogXCJDT01QT05FTlRfREJcIiwgNzA6IFwiQ09NUE9ORU5UX1FVRVVFXCIsIDcxOiBcIkNPTVBPTkVOVF9FWFRcIiwgNzI6IFwiQ09NUE9ORU5UX0VYVF9EQlwiLCA3MzogXCJDT01QT05FTlRfRVhUX1FVRVVFXCIsIDc0OiBcIlJFTFwiLCA3NTogXCJCSVJFTFwiLCA3NjogXCJSRUxfVVwiLCA3NzogXCJSRUxfRFwiLCA3ODogXCJSRUxfTFwiLCA3OTogXCJSRUxfUlwiLCA4MDogXCJSRUxfQlwiLCA4MTogXCJSRUxfSU5ERVhcIiwgODI6IFwiVVBEQVRFX0VMX1NUWUxFXCIsIDgzOiBcIlVQREFURV9SRUxfU1RZTEVcIiwgODQ6IFwiVVBEQVRFX0xBWU9VVF9DT05GSUdcIiwgODY6IFwiU1RSXCIsIDg3OiBcIlNUUl9LRVlcIiwgODg6IFwiU1RSX1ZBTFVFXCIsIDg5OiBcIkFUVFJJQlVURVwiLCA5MDogXCJBVFRSSUJVVEVfRU1QVFlcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDFdLCBbMywgMl0sIFs1LCAxXSwgWzUsIDFdLCBbNSwgMV0sIFs1LCAxXSwgWzQsIDFdLCBbNiwgNF0sIFs2LCA2XSwgWzEyLCAxXSwgWzEzLCAxXSwgWzE3LCAxXSwgWzE0LCAxXSwgWzExLCA0XSwgWzExLCA0XSwgWzExLCA0XSwgWzExLCA0XSwgWzExLCA0XSwgWzIzLCAxXSwgWzIzLCAxXSwgWzIzLCAyXSwgWzI5LCAxXSwgWzI5LCAyXSwgWzI5LCAzXSwgWzMxLCAxXSwgWzMxLCAxXSwgWzMxLCAyXSwgWzMxLCAyXSwgWzMxLCAxXSwgWzM5LCAzXSwgWzQwLCAzXSwgWzQwLCAzXSwgWzQwLCA0XSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQyLCAyXSwgWzQxLCAxXSwgWzMwLCAxXSwgWzMwLCAyXSwgWzMwLCAzXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAxXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzUzLCAyXSwgWzQ1LCAxXSwgWzQ1LCAyXSwgWzg1LCAxXSwgWzg1LCAyXSwgWzg1LCAxXSwgWzg1LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiVEJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJCVFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlJMXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiTFJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCIlJXtcIiwgXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAkJFskMF0gPSAkJFskMF0udHJpbSgpLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCJ9JSVcIiwgXCJjbG9zZV9kaXJlY3RpdmVcIiwgXCJjNENvbnRleHRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkuc2V0QzRUeXBlKCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHl5LnNldFRpdGxlKCQkWyQwXS5zdWJzdHJpbmcoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24oJCRbJDBdLnN1YnN0cmluZygxNSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoMTUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0VGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgJCRbJDBdLnNwbGljZSgyLCAwLCBcIkVOVEVSUFJJU0VcIik7XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICQkWyQwXS5zcGxpY2UoMiwgMCwgXCJDT05UQUlORVJcIik7XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkuYWRkRGVwbG95bWVudE5vZGUoXCJub2RlXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIHl5LmFkZERlcGxveW1lbnROb2RlKFwibm9kZUxcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgeXkuYWRkRGVwbG95bWVudE5vZGUoXCJub2RlUlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICB5eS5wb3BCb3VuZGFyeVBhcnNlU3RhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcInBlcnNvblwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcImV4dGVybmFsX3BlcnNvblwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcInN5c3RlbVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcInN5c3RlbV9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcInN5c3RlbV9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcImV4dGVybmFsX3N5c3RlbVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcImV4dGVybmFsX3N5c3RlbV9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB5eS5hZGRQZXJzb25PclN5c3RlbShcImV4dGVybmFsX3N5c3RlbV9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJjb250YWluZXJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiY29udGFpbmVyX2RiXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImNvbnRhaW5lcl9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJleHRlcm5hbF9jb250YWluZXJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJjb21wb25lbnRcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiY29tcG9uZW50X2RiXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImNvbXBvbmVudF9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MzpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJleHRlcm5hbF9jb21wb25lbnRcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiZXh0ZXJuYWxfY29tcG9uZW50X2RiXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB5eS5hZGRSZWwoXCJyZWxcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgeXkuYWRkUmVsKFwiYmlyZWxcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsX3VcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsX2RcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsX2xcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsX3JcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsX2JcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgJCRbJDBdLnNwbGljZSgwLCAxKTtcbiAgICAgICAgICB5eS5hZGRSZWwoXCJyZWxcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgeXkudXBkYXRlRWxTdHlsZShcInVwZGF0ZV9lbF9zdHlsZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB5eS51cGRhdGVSZWxTdHlsZShcInVwZGF0ZV9yZWxfc3R5bGVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgeXkudXBkYXRlTGF5b3V0Q29uZmlnKFwidXBkYXRlX2xheW91dF9jb25maWdcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgJCRbJDBdLnVuc2hpZnQoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgbGV0IGt2ID0ge307XG4gICAgICAgICAga3ZbJCRbJDAgLSAxXS50cmltKCldID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB0aGlzLiQgPSBrdjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICB0aGlzLiQgPSBcIlwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDU6IDMsIDY6IDQsIDc6ICRWMCwgODogJFYxLCA5OiAkVjIsIDEwOiAkVjMsIDExOiA1LCAxMjogMTAsIDE4OiAkVjQsIDIyOiAkVjUsIDI1OiAkVjYsIDI2OiAkVjcsIDI3OiAkVjgsIDI4OiAkVjkgfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAzOiAxNywgNDogMiwgNTogMywgNjogNCwgNzogJFYwLCA4OiAkVjEsIDk6ICRWMiwgMTA6ICRWMywgMTE6IDUsIDEyOiAxMCwgMTg6ICRWNCwgMjI6ICRWNSwgMjU6ICRWNiwgMjY6ICRWNywgMjc6ICRWOCwgMjg6ICRWOSB9LCB7IDE6IFsyLCA4XSB9LCB7IDE6IFsyLCA0XSB9LCB7IDE6IFsyLCA1XSB9LCB7IDE6IFsyLCA2XSB9LCB7IDE6IFsyLCA3XSB9LCB7IDEzOiAxOCwgMTk6IFsxLCAxOV0gfSwgeyAxNTogWzEsIDIwXSB9LCB7IDE1OiBbMSwgMjFdIH0sIHsgMTU6IFsxLCAyMl0gfSwgeyAxNTogWzEsIDIzXSB9LCB7IDE1OiBbMSwgMjRdIH0sIHsgMTk6IFsyLCAxMV0gfSwgeyAxOiBbMiwgM10gfSwgeyAxNDogMjUsIDE2OiBbMSwgMjZdLCAyMTogJFZhIH0sIG8oWzE2LCAyMV0sIFsyLCAxMl0pLCB7IDIzOiAyOCwgMjk6IDI5LCAzMDogMzAsIDMxOiAzMSwgMzI6ICRWYiwgMzM6ICRWYywgMzQ6ICRWZCwgMzY6ICRWZSwgMzg6ICRWZiwgMzk6IDU4LCA0MDogNzAsIDQyOiA3MSwgNDQ6ICRWZywgNDY6ICRWaCwgNDc6ICRWaSwgNDg6ICRWaiwgNDk6ICRWaywgNTA6ICRWbCwgNTE6ICRWbSwgNTM6IDMyLCA1NDogJFZuLCA1NTogJFZvLCA1NjogJFZwLCA1NzogJFZxLCA1ODogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA2MzogJFZ3LCA2NDogJFZ4LCA2NTogJFZ5LCA2NjogJFZ6LCA2NzogJFZBLCA2ODogJFZCLCA2OTogJFZDLCA3MDogJFZELCA3MTogJFZFLCA3MjogJFZGLCA3MzogJFZHLCA3NDogJFZILCA3NTogJFZJLCA3NjogJFZKLCA3NzogJFZLLCA3ODogJFZMLCA3OTogJFZNLCA4MDogJFZOLCA4MTogJFZPLCA4MjogJFZQLCA4MzogJFZRLCA4NDogJFZSIH0sIHsgMjM6IDc5LCAyOTogMjksIDMwOiAzMCwgMzE6IDMxLCAzMjogJFZiLCAzMzogJFZjLCAzNDogJFZkLCAzNjogJFZlLCAzODogJFZmLCAzOTogNTgsIDQwOiA3MCwgNDI6IDcxLCA0NDogJFZnLCA0NjogJFZoLCA0NzogJFZpLCA0ODogJFZqLCA0OTogJFZrLCA1MDogJFZsLCA1MTogJFZtLCA1MzogMzIsIDU0OiAkVm4sIDU1OiAkVm8sIDU2OiAkVnAsIDU3OiAkVnEsIDU4OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDYzOiAkVncsIDY0OiAkVngsIDY1OiAkVnksIDY2OiAkVnosIDY3OiAkVkEsIDY4OiAkVkIsIDY5OiAkVkMsIDcwOiAkVkQsIDcxOiAkVkUsIDcyOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiAkVkksIDc2OiAkVkosIDc3OiAkVkssIDc4OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4sIDgxOiAkVk8sIDgyOiAkVlAsIDgzOiAkVlEsIDg0OiAkVlIgfSwgeyAyMzogODAsIDI5OiAyOSwgMzA6IDMwLCAzMTogMzEsIDMyOiAkVmIsIDMzOiAkVmMsIDM0OiAkVmQsIDM2OiAkVmUsIDM4OiAkVmYsIDM5OiA1OCwgNDA6IDcwLCA0MjogNzEsIDQ0OiAkVmcsIDQ2OiAkVmgsIDQ3OiAkVmksIDQ4OiAkVmosIDQ5OiAkVmssIDUwOiAkVmwsIDUxOiAkVm0sIDUzOiAzMiwgNTQ6ICRWbiwgNTU6ICRWbywgNTY6ICRWcCwgNTc6ICRWcSwgNTg6ICRWciwgNTk6ICRWcywgNjA6ICRWdCwgNjE6ICRWdSwgNjI6ICRWdiwgNjM6ICRWdywgNjQ6ICRWeCwgNjU6ICRWeSwgNjY6ICRWeiwgNjc6ICRWQSwgNjg6ICRWQiwgNjk6ICRWQywgNzA6ICRWRCwgNzE6ICRWRSwgNzI6ICRWRiwgNzM6ICRWRywgNzQ6ICRWSCwgNzU6ICRWSSwgNzY6ICRWSiwgNzc6ICRWSywgNzg6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiwgODE6ICRWTywgODI6ICRWUCwgODM6ICRWUSwgODQ6ICRWUiB9LCB7IDIzOiA4MSwgMjk6IDI5LCAzMDogMzAsIDMxOiAzMSwgMzI6ICRWYiwgMzM6ICRWYywgMzQ6ICRWZCwgMzY6ICRWZSwgMzg6ICRWZiwgMzk6IDU4LCA0MDogNzAsIDQyOiA3MSwgNDQ6ICRWZywgNDY6ICRWaCwgNDc6ICRWaSwgNDg6ICRWaiwgNDk6ICRWaywgNTA6ICRWbCwgNTE6ICRWbSwgNTM6IDMyLCA1NDogJFZuLCA1NTogJFZvLCA1NjogJFZwLCA1NzogJFZxLCA1ODogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA2MzogJFZ3LCA2NDogJFZ4LCA2NTogJFZ5LCA2NjogJFZ6LCA2NzogJFZBLCA2ODogJFZCLCA2OTogJFZDLCA3MDogJFZELCA3MTogJFZFLCA3MjogJFZGLCA3MzogJFZHLCA3NDogJFZILCA3NTogJFZJLCA3NjogJFZKLCA3NzogJFZLLCA3ODogJFZMLCA3OTogJFZNLCA4MDogJFZOLCA4MTogJFZPLCA4MjogJFZQLCA4MzogJFZRLCA4NDogJFZSIH0sIHsgMjM6IDgyLCAyOTogMjksIDMwOiAzMCwgMzE6IDMxLCAzMjogJFZiLCAzMzogJFZjLCAzNDogJFZkLCAzNjogJFZlLCAzODogJFZmLCAzOTogNTgsIDQwOiA3MCwgNDI6IDcxLCA0NDogJFZnLCA0NjogJFZoLCA0NzogJFZpLCA0ODogJFZqLCA0OTogJFZrLCA1MDogJFZsLCA1MTogJFZtLCA1MzogMzIsIDU0OiAkVm4sIDU1OiAkVm8sIDU2OiAkVnAsIDU3OiAkVnEsIDU4OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDYzOiAkVncsIDY0OiAkVngsIDY1OiAkVnksIDY2OiAkVnosIDY3OiAkVkEsIDY4OiAkVkIsIDY5OiAkVkMsIDcwOiAkVkQsIDcxOiAkVkUsIDcyOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiAkVkksIDc2OiAkVkosIDc3OiAkVkssIDc4OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4sIDgxOiAkVk8sIDgyOiAkVlAsIDgzOiAkVlEsIDg0OiAkVlIgfSwgeyAxNTogWzEsIDgzXSB9LCB7IDE3OiA4NCwgMjA6IFsxLCA4NV0gfSwgeyAxNTogWzIsIDE0XSB9LCB7IDI0OiBbMSwgODZdIH0sIG8oJFZTLCBbMiwgMjBdLCB7IDUzOiAzMiwgMzk6IDU4LCA0MDogNzAsIDQyOiA3MSwgMzA6IDg3LCA0NDogJFZnLCA0NjogJFZoLCA0NzogJFZpLCA0ODogJFZqLCA0OTogJFZrLCA1MDogJFZsLCA1MTogJFZtLCA1NDogJFZuLCA1NTogJFZvLCA1NjogJFZwLCA1NzogJFZxLCA1ODogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA2MzogJFZ3LCA2NDogJFZ4LCA2NTogJFZ5LCA2NjogJFZ6LCA2NzogJFZBLCA2ODogJFZCLCA2OTogJFZDLCA3MDogJFZELCA3MTogJFZFLCA3MjogJFZGLCA3MzogJFZHLCA3NDogJFZILCA3NTogJFZJLCA3NjogJFZKLCA3NzogJFZLLCA3ODogJFZMLCA3OTogJFZNLCA4MDogJFZOLCA4MTogJFZPLCA4MjogJFZQLCA4MzogJFZRLCA4NDogJFZSIH0pLCBvKCRWUywgWzIsIDIxXSksIG8oJFZULCBbMiwgMjNdLCB7IDE1OiBbMSwgODhdIH0pLCBvKCRWUywgWzIsIDQzXSwgeyAxNTogWzEsIDg5XSB9KSwgbygkVlUsIFsyLCAyNl0pLCBvKCRWVSwgWzIsIDI3XSksIHsgMzU6IFsxLCA5MF0gfSwgeyAzNzogWzEsIDkxXSB9LCBvKCRWVSwgWzIsIDMwXSksIHsgNDU6IDkyLCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogOTgsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiA5OSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwMCwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwMSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwMiwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwMywgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwNCwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwNSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwNiwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwNywgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwOCwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDEwOSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExMCwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExMSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExMiwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExMywgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExNCwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExNSwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIHsgNDU6IDExNiwgODU6IDkzLCA4NjogJFZWLCA4NzogJFZXLCA4OTogJFZYLCA5MDogJFZZIH0sIG8oJFZaLCBbMiwgNjZdKSwgeyA0NTogMTE3LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTE4LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTE5LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTIwLCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTIxLCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTIyLCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTIzLCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTI0LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTI1LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTI2LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyA0NTogMTI3LCA4NTogOTMsIDg2OiAkVlYsIDg3OiAkVlcsIDg5OiAkVlgsIDkwOiAkVlkgfSwgeyAzMDogMTI4LCAzOTogNTgsIDQwOiA3MCwgNDI6IDcxLCA0NDogJFZnLCA0NjogJFZoLCA0NzogJFZpLCA0ODogJFZqLCA0OTogJFZrLCA1MDogJFZsLCA1MTogJFZtLCA1MzogMzIsIDU0OiAkVm4sIDU1OiAkVm8sIDU2OiAkVnAsIDU3OiAkVnEsIDU4OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDYzOiAkVncsIDY0OiAkVngsIDY1OiAkVnksIDY2OiAkVnosIDY3OiAkVkEsIDY4OiAkVkIsIDY5OiAkVkMsIDcwOiAkVkQsIDcxOiAkVkUsIDcyOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiAkVkksIDc2OiAkVkosIDc3OiAkVkssIDc4OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4sIDgxOiAkVk8sIDgyOiAkVlAsIDgzOiAkVlEsIDg0OiAkVlIgfSwgeyAxNTogWzEsIDEzMF0sIDQzOiBbMSwgMTI5XSB9LCB7IDQ1OiAxMzEsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzIsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzMsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzQsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzUsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzYsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDQ1OiAxMzcsIDg1OiA5MywgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9LCB7IDI0OiBbMSwgMTM4XSB9LCB7IDI0OiBbMSwgMTM5XSB9LCB7IDI0OiBbMSwgMTQwXSB9LCB7IDI0OiBbMSwgMTQxXSB9LCBvKCRWXywgWzIsIDldKSwgeyAxNDogMTQyLCAyMTogJFZhIH0sIHsgMjE6IFsyLCAxM10gfSwgeyAxOiBbMiwgMTVdIH0sIG8oJFZTLCBbMiwgMjJdKSwgbygkVlQsIFsyLCAyNF0sIHsgMzE6IDMxLCAyOTogMTQzLCAzMjogJFZiLCAzMzogJFZjLCAzNDogJFZkLCAzNjogJFZlLCAzODogJFZmIH0pLCBvKCRWUywgWzIsIDQ0XSwgeyAyOTogMjksIDMwOiAzMCwgMzE6IDMxLCA1MzogMzIsIDM5OiA1OCwgNDA6IDcwLCA0MjogNzEsIDIzOiAxNDQsIDMyOiAkVmIsIDMzOiAkVmMsIDM0OiAkVmQsIDM2OiAkVmUsIDM4OiAkVmYsIDQ0OiAkVmcsIDQ2OiAkVmgsIDQ3OiAkVmksIDQ4OiAkVmosIDQ5OiAkVmssIDUwOiAkVmwsIDUxOiAkVm0sIDU0OiAkVm4sIDU1OiAkVm8sIDU2OiAkVnAsIDU3OiAkVnEsIDU4OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDYzOiAkVncsIDY0OiAkVngsIDY1OiAkVnksIDY2OiAkVnosIDY3OiAkVkEsIDY4OiAkVkIsIDY5OiAkVkMsIDcwOiAkVkQsIDcxOiAkVkUsIDcyOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiAkVkksIDc2OiAkVkosIDc3OiAkVkssIDc4OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4sIDgxOiAkVk8sIDgyOiAkVlAsIDgzOiAkVlEsIDg0OiAkVlIgfSksIG8oJFZVLCBbMiwgMjhdKSwgbygkVlUsIFsyLCAyOV0pLCBvKCRWWiwgWzIsIDQ2XSksIG8oJFYkLCBbMiwgNzhdLCB7IDg1OiA5MywgNDU6IDE0NSwgODY6ICRWViwgODc6ICRWVywgODk6ICRWWCwgOTA6ICRWWSB9KSwgbygkVjAxLCBbMiwgODBdKSwgeyA4ODogWzEsIDE0Nl0gfSwgbygkVjAxLCBbMiwgODJdKSwgbygkVjAxLCBbMiwgODNdKSwgbygkVlosIFsyLCA0N10pLCBvKCRWWiwgWzIsIDQ4XSksIG8oJFZaLCBbMiwgNDldKSwgbygkVlosIFsyLCA1MF0pLCBvKCRWWiwgWzIsIDUxXSksIG8oJFZaLCBbMiwgNTJdKSwgbygkVlosIFsyLCA1M10pLCBvKCRWWiwgWzIsIDU0XSksIG8oJFZaLCBbMiwgNTVdKSwgbygkVlosIFsyLCA1Nl0pLCBvKCRWWiwgWzIsIDU3XSksIG8oJFZaLCBbMiwgNThdKSwgbygkVlosIFsyLCA1OV0pLCBvKCRWWiwgWzIsIDYwXSksIG8oJFZaLCBbMiwgNjFdKSwgbygkVlosIFsyLCA2Ml0pLCBvKCRWWiwgWzIsIDYzXSksIG8oJFZaLCBbMiwgNjRdKSwgbygkVlosIFsyLCA2NV0pLCBvKCRWWiwgWzIsIDY3XSksIG8oJFZaLCBbMiwgNjhdKSwgbygkVlosIFsyLCA2OV0pLCBvKCRWWiwgWzIsIDcwXSksIG8oJFZaLCBbMiwgNzFdKSwgbygkVlosIFsyLCA3Ml0pLCBvKCRWWiwgWzIsIDczXSksIG8oJFZaLCBbMiwgNzRdKSwgbygkVlosIFsyLCA3NV0pLCBvKCRWWiwgWzIsIDc2XSksIG8oJFZaLCBbMiwgNzddKSwgeyA0MTogMTQ3LCA1MjogWzEsIDE0OF0gfSwgeyAxNTogWzEsIDE0OV0gfSwgeyA0MzogWzEsIDE1MF0gfSwgbygkVjExLCBbMiwgMzVdKSwgbygkVjExLCBbMiwgMzZdKSwgbygkVjExLCBbMiwgMzddKSwgbygkVjExLCBbMiwgMzhdKSwgbygkVjExLCBbMiwgMzldKSwgbygkVjExLCBbMiwgNDBdKSwgbygkVjExLCBbMiwgNDFdKSwgeyAxOiBbMiwgMTZdIH0sIHsgMTogWzIsIDE3XSB9LCB7IDE6IFsyLCAxOF0gfSwgeyAxOiBbMiwgMTldIH0sIHsgMTU6IFsxLCAxNTFdIH0sIG8oJFZULCBbMiwgMjVdKSwgbygkVlMsIFsyLCA0NV0pLCBvKCRWJCwgWzIsIDc5XSksIG8oJFYwMSwgWzIsIDgxXSksIG8oJFZaLCBbMiwgMzFdKSwgbygkVlosIFsyLCA0Ml0pLCBvKCRWMjEsIFsyLCAzMl0pLCBvKCRWMjEsIFsyLCAzM10sIHsgMTU6IFsxLCAxNTJdIH0pLCBvKCRWXywgWzIsIDEwXSksIG8oJFYyMSwgWzIsIDM0XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDI6IFsyLCAxXSwgMzogWzIsIDJdLCA1OiBbMiwgOF0sIDY6IFsyLCA0XSwgNzogWzIsIDVdLCA4OiBbMiwgNl0sIDk6IFsyLCA3XSwgMTY6IFsyLCAxMV0sIDE3OiBbMiwgM10sIDI3OiBbMiwgMTRdLCA4NTogWzIsIDEzXSwgODY6IFsyLCAxNV0sIDEzODogWzIsIDE2XSwgMTM5OiBbMiwgMTddLCAxNDA6IFsyLCAxOF0sIDE0MTogWzIsIDE5XSB9LFxuICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgdmFyIHN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBsZXhlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMyID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMyICsgXCJeXCI7XG4gICAgICB9LFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiBmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiBmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiBmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIGM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMjU7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJwZXJzb25fZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicGVyc29uXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MTtcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN5c3RlbV9leHRfZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzeXN0ZW1fZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU4O1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2RiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU3O1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYm91bmRhcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJlbnRlcnByaXNlX2JvdW5kYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2JvdW5kYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA2NztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbnRhaW5lcl9leHRfZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNjY7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb250YWluZXJfZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY1O1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2RiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYzO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2JvdW5kYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50X2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbXBvbmVudF9leHRfZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50X3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50X2RiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwibm9kZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm5vZGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlX2xcIik7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlX3JcIik7XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxcIik7XG4gICAgICAgICAgICByZXR1cm4gNzQ7XG4gICAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJiaXJlbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF91XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDc2O1xuICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3VcIik7XG4gICAgICAgICAgICByZXR1cm4gNzY7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfZFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3NztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9kXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDc3O1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX2xcIik7XG4gICAgICAgICAgICByZXR1cm4gNzg7XG4gICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3ODtcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9yXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDc5O1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3JcIik7XG4gICAgICAgICAgICByZXR1cm4gNzk7XG4gICAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA4MDtcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9pbmRleFwiKTtcbiAgICAgICAgICAgIHJldHVybiA4MTtcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9lbF9zdHlsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA4MjtcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9yZWxfc3R5bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gODM7XG4gICAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ1cGRhdGVfbGF5b3V0X2NvbmZpZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiA4NDtcbiAgICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgICAgcmV0dXJuIFwiRU9GX0lOX1NUUlVDVFwiO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYXR0cmlidXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVRUUklCVVRFX0VNUFRZXCI7XG4gICAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhdHRyaWJ1dGVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDczOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICAgIHJldHVybiA5MDtcbiAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICAgIHJldHVybiA5MDtcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdfa3ZcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ19rdl9rZXlcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJfS0VZXCI7XG4gICAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdfa3ZfdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSX1ZBTFVFXCI7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgICAgcmV0dXJuIFwiTEJSQUNFXCI7XG4gICAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICAgIHJldHVybiBcIlJCUkFDRVwiO1xuICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICByZXR1cm4gXCJTUEFDRVwiO1xuICAgICAgICAgIGNhc2UgODk6XG4gICAgICAgICAgICByZXR1cm4gXCJFT0xcIjtcbiAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS8sIC9eKD86LipkaXJlY3Rpb25cXHMrVEJbXlxcbl0qKS8sIC9eKD86LipkaXJlY3Rpb25cXHMrQlRbXlxcbl0qKS8sIC9eKD86LipkaXJlY3Rpb25cXHMrUkxbXlxcbl0qKS8sIC9eKD86LipkaXJlY3Rpb25cXHMrTFJbXlxcbl0qKS8sIC9eKD86KCg/Oig/IVxcfSUlKVteOi5dKSopKS8sIC9eKD86OikvLCAvXig/OlxcfSUlKS8sIC9eKD86KCg/Oig/IVxcfSUlKS58XFxuKSopKS8sIC9eKD86dGl0bGVcXHNbXiNcXG47XSspLywgL14oPzphY2NEZXNjcmlwdGlvblxcc1teI1xcbjtdKykvLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccyo6XFxzKikvLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS8sIC9eKD86YWNjRGVzY3JcXHMqXFx7XFxzKikvLCAvXig/OltcXH1dKS8sIC9eKD86W15cXH1dKikvLCAvXig/OiUlKD8hXFx7KSpbXlxcbl0qKFxccj9cXG4/KSspLywgL14oPzolJVteXFxuXSooXFxyP1xcbikqKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86QzRDb250ZXh0XFxiKS8sIC9eKD86QzRDb250YWluZXJcXGIpLywgL14oPzpDNENvbXBvbmVudFxcYikvLCAvXig/OkM0RHluYW1pY1xcYikvLCAvXig/OkM0RGVwbG95bWVudFxcYikvLCAvXig/OlBlcnNvbl9FeHRcXGIpLywgL14oPzpQZXJzb25cXGIpLywgL14oPzpTeXN0ZW1RdWV1ZV9FeHRcXGIpLywgL14oPzpTeXN0ZW1EYl9FeHRcXGIpLywgL14oPzpTeXN0ZW1fRXh0XFxiKS8sIC9eKD86U3lzdGVtUXVldWVcXGIpLywgL14oPzpTeXN0ZW1EYlxcYikvLCAvXig/OlN5c3RlbVxcYikvLCAvXig/OkJvdW5kYXJ5XFxiKS8sIC9eKD86RW50ZXJwcmlzZV9Cb3VuZGFyeVxcYikvLCAvXig/OlN5c3RlbV9Cb3VuZGFyeVxcYikvLCAvXig/OkNvbnRhaW5lclF1ZXVlX0V4dFxcYikvLCAvXig/OkNvbnRhaW5lckRiX0V4dFxcYikvLCAvXig/OkNvbnRhaW5lcl9FeHRcXGIpLywgL14oPzpDb250YWluZXJRdWV1ZVxcYikvLCAvXig/OkNvbnRhaW5lckRiXFxiKS8sIC9eKD86Q29udGFpbmVyXFxiKS8sIC9eKD86Q29udGFpbmVyX0JvdW5kYXJ5XFxiKS8sIC9eKD86Q29tcG9uZW50UXVldWVfRXh0XFxiKS8sIC9eKD86Q29tcG9uZW50RGJfRXh0XFxiKS8sIC9eKD86Q29tcG9uZW50X0V4dFxcYikvLCAvXig/OkNvbXBvbmVudFF1ZXVlXFxiKS8sIC9eKD86Q29tcG9uZW50RGJcXGIpLywgL14oPzpDb21wb25lbnRcXGIpLywgL14oPzpEZXBsb3ltZW50X05vZGVcXGIpLywgL14oPzpOb2RlXFxiKS8sIC9eKD86Tm9kZV9MXFxiKS8sIC9eKD86Tm9kZV9SXFxiKS8sIC9eKD86UmVsXFxiKS8sIC9eKD86QmlSZWxcXGIpLywgL14oPzpSZWxfVXBcXGIpLywgL14oPzpSZWxfVVxcYikvLCAvXig/OlJlbF9Eb3duXFxiKS8sIC9eKD86UmVsX0RcXGIpLywgL14oPzpSZWxfTGVmdFxcYikvLCAvXig/OlJlbF9MXFxiKS8sIC9eKD86UmVsX1JpZ2h0XFxiKS8sIC9eKD86UmVsX1JcXGIpLywgL14oPzpSZWxfQmFja1xcYikvLCAvXig/OlJlbEluZGV4XFxiKS8sIC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXFxiKS8sIC9eKD86VXBkYXRlUmVsU3R5bGVcXGIpLywgL14oPzpVcGRhdGVMYXlvdXRDb25maWdcXGIpLywgL14oPzokKS8sIC9eKD86WyhdWyBdKlssXSkvLCAvXig/OlsoXSkvLCAvXig/OlspXSkvLCAvXig/OiwsKS8sIC9eKD86LCkvLCAvXig/OlsgXSpbXCJdW1wiXSkvLCAvXig/OlsgXSpbXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OlteXCJdKikvLCAvXig/OlsgXSpbXFwkXSkvLCAvXig/OltePV0qKS8sIC9eKD86Wz1dWyBdKltcIl0pLywgL14oPzpbXlwiXSspLywgL14oPzpbXCJdKS8sIC9eKD86W14sXSspLywgL14oPzpcXHspLywgL14oPzpcXH0pLywgL14oPzpbXFxzXSspLywgL14oPzpbXFxuXFxyXSspLywgL14oPzokKS9dLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsxNiwgMTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzE0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xvc2VfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhcmdfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbNywgOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFs2LCA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ19rdl92YWx1ZVwiOiB7IFwicnVsZXNcIjogWzgzLCA4NF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nX2t2X2tleVwiOiB7IFwicnVsZXNcIjogWzgyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdfa3ZcIjogeyBcInJ1bGVzXCI6IFs4MV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbNzgsIDc5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhdHRyaWJ1dGVcIjogeyBcInJ1bGVzXCI6IFs3MywgNzQsIDc1LCA3NiwgNzcsIDgwLCA4NV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidXBkYXRlX2xheW91dF9jb25maWdcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidXBkYXRlX3JlbF9zdHlsZVwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ1cGRhdGVfZWxfc3R5bGVcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX2JcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX3JcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX2xcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX2RcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX3VcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicmVsX2JpXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibm9kZV9yXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm5vZGVfbFwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJub2RlXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImluZGV4XCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfaW5kZXhcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29tcG9uZW50X2V4dF9xdWV1ZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29tcG9uZW50X2V4dF9kYlwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZXh0XCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbXBvbmVudF9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZGJcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29tcG9uZW50XCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9ib3VuZGFyeVwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZXh0X3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZXh0X2RiXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9leHRcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyX3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9kYlwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYmlyZWxcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtX2JvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImVudGVycHJpc2VfYm91bmRhcnlcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYm91bmRhcnlcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtX2V4dF9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1fZXh0X2RiXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9leHRcIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtX3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbNzAsIDcxLCA3MiwgNzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9kYlwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1cIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicGVyc29uX2V4dFwiOiB7IFwicnVsZXNcIjogWzcwLCA3MSwgNzIsIDczXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJwZXJzb25cIjogeyBcInJ1bGVzXCI6IFs3MCwgNzEsIDcyLCA3M10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDksIDEwLCAxMSwgMTMsIDE1LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgODYsIDg3LCA4OCwgODksIDkwXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG5jb25zdCBjNFBhcnNlciA9IHBhcnNlcjtcbmxldCBjNFNoYXBlQXJyYXkgPSBbXTtcbmxldCBib3VuZGFyeVBhcnNlU3RhY2sgPSBbXCJcIl07XG5sZXQgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBcImdsb2JhbFwiO1xubGV0IHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBcIlwiO1xubGV0IGJvdW5kYXJ5cyA9IFtcbiAge1xuICAgIGFsaWFzOiBcImdsb2JhbFwiLFxuICAgIGxhYmVsOiB7IHRleHQ6IFwiZ2xvYmFsXCIgfSxcbiAgICB0eXBlOiB7IHRleHQ6IFwiZ2xvYmFsXCIgfSxcbiAgICB0YWdzOiBudWxsLFxuICAgIGxpbms6IG51bGwsXG4gICAgcGFyZW50Qm91bmRhcnk6IFwiXCJcbiAgfVxuXTtcbmxldCByZWxzID0gW107XG5sZXQgdGl0bGUgPSBcIlwiO1xubGV0IHdyYXBFbmFibGVkID0gZmFsc2U7XG5sZXQgYzRTaGFwZUluUm93JDEgPSA0O1xubGV0IGM0Qm91bmRhcnlJblJvdyQxID0gMjtcbnZhciBjNFR5cGU7XG5jb25zdCBnZXRDNFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0VHlwZTtcbn07XG5jb25zdCBzZXRDNFR5cGUgPSBmdW5jdGlvbihjNFR5cGVQYXJhbSkge1xuICBsZXQgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dChjNFR5cGVQYXJhbSwgZ2V0Q29uZmlnKCkpO1xuICBjNFR5cGUgPSBzYW5pdGl6ZWRUZXh0O1xufTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBhZGRSZWwgPSBmdW5jdGlvbih0eXBlLCBmcm9tLCB0bywgbGFiZWwsIHRlY2huLCBkZXNjciwgc3ByaXRlLCB0YWdzLCBsaW5rKSB7XG4gIGlmICh0eXBlID09PSB2b2lkIDAgfHwgdHlwZSA9PT0gbnVsbCB8fCBmcm9tID09PSB2b2lkIDAgfHwgZnJvbSA9PT0gbnVsbCB8fCB0byA9PT0gdm9pZCAwIHx8IHRvID09PSBudWxsIHx8IGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHJlbCA9IHt9O1xuICBjb25zdCBvbGQgPSByZWxzLmZpbmQoKHJlbDIpID0+IHJlbDIuZnJvbSA9PT0gZnJvbSAmJiByZWwyLnRvID09PSB0byk7XG4gIGlmIChvbGQpIHtcbiAgICByZWwgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgcmVscy5wdXNoKHJlbCk7XG4gIH1cbiAgcmVsLnR5cGUgPSB0eXBlO1xuICByZWwuZnJvbSA9IGZyb207XG4gIHJlbC50byA9IHRvO1xuICByZWwubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIGlmICh0ZWNobiA9PT0gdm9pZCAwIHx8IHRlY2huID09PSBudWxsKSB7XG4gICAgcmVsLnRlY2huID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0ZWNobiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRlY2huKVswXTtcbiAgICAgIHJlbFtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWwudGVjaG4gPSB7IHRleHQ6IHRlY2huIH07XG4gICAgfVxuICB9XG4gIGlmIChkZXNjciA9PT0gdm9pZCAwIHx8IGRlc2NyID09PSBudWxsKSB7XG4gICAgcmVsLmRlc2NyID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGRlc2NyKVswXTtcbiAgICAgIHJlbFtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWwuZGVzY3IgPSB7IHRleHQ6IGRlc2NyIH07XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Ygc3ByaXRlID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHNwcml0ZSlbMF07XG4gICAgcmVsW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZWwuc3ByaXRlID0gc3ByaXRlO1xuICB9XG4gIGlmICh0eXBlb2YgdGFncyA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVswXTtcbiAgICByZWxba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJlbC50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgcmVsW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZWwubGluayA9IGxpbms7XG4gIH1cbiAgcmVsLndyYXAgPSBhdXRvV3JhcCgpO1xufTtcbmNvbnN0IGFkZFBlcnNvbk9yU3lzdGVtID0gZnVuY3Rpb24odHlwZUM0U2hhcGUsIGFsaWFzLCBsYWJlbCwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHBlcnNvbk9yU3lzdGVtID0ge307XG4gIGNvbnN0IG9sZCA9IGM0U2hhcGVBcnJheS5maW5kKChwZXJzb25PclN5c3RlbTIpID0+IHBlcnNvbk9yU3lzdGVtMi5hbGlhcyA9PT0gYWxpYXMpO1xuICBpZiAob2xkICYmIGFsaWFzID09PSBvbGQuYWxpYXMpIHtcbiAgICBwZXJzb25PclN5c3RlbSA9IG9sZDtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5hbGlhcyA9IGFsaWFzO1xuICAgIGM0U2hhcGVBcnJheS5wdXNoKHBlcnNvbk9yU3lzdGVtKTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIHBlcnNvbk9yU3lzdGVtLmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgcGVyc29uT3JTeXN0ZW0ubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBwZXJzb25PclN5c3RlbS5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBwZXJzb25PclN5c3RlbVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwZXJzb25PclN5c3RlbS5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzcHJpdGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICBwZXJzb25PclN5c3RlbVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcGVyc29uT3JTeXN0ZW0uc3ByaXRlID0gc3ByaXRlO1xuICB9XG4gIGlmICh0eXBlb2YgdGFncyA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVswXTtcbiAgICBwZXJzb25PclN5c3RlbVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcGVyc29uT3JTeXN0ZW0udGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5saW5rID0gbGluaztcbiAgfVxuICBwZXJzb25PclN5c3RlbS50eXBlQzRTaGFwZSA9IHsgdGV4dDogdHlwZUM0U2hhcGUgfTtcbiAgcGVyc29uT3JTeXN0ZW0ucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgcGVyc29uT3JTeXN0ZW0ud3JhcCA9IGF1dG9XcmFwKCk7XG59O1xuY29uc3QgYWRkQ29udGFpbmVyID0gZnVuY3Rpb24odHlwZUM0U2hhcGUsIGFsaWFzLCBsYWJlbCwgdGVjaG4sIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBjb250YWluZXIgPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGNvbnRhaW5lcjIpID0+IGNvbnRhaW5lcjIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgY29udGFpbmVyID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5hbGlhcyA9IGFsaWFzO1xuICAgIGM0U2hhcGVBcnJheS5wdXNoKGNvbnRhaW5lcik7XG4gIH1cbiAgaWYgKGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHRlY2huID09PSB2b2lkIDAgfHwgdGVjaG4gPT09IG51bGwpIHtcbiAgICBjb250YWluZXIudGVjaG4gPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRlY2huID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGVjaG4pWzBdO1xuICAgICAgY29udGFpbmVyW2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci50ZWNobiA9IHsgdGV4dDogdGVjaG4gfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuZGVzY3IgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoZGVzY3IpWzBdO1xuICAgICAgY29udGFpbmVyW2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzcHJpdGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICBjb250YWluZXJba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGNvbnRhaW5lcltrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBjb250YWluZXJba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5saW5rID0gbGluaztcbiAgfVxuICBjb250YWluZXIud3JhcCA9IGF1dG9XcmFwKCk7XG4gIGNvbnRhaW5lci50eXBlQzRTaGFwZSA9IHsgdGV4dDogdHlwZUM0U2hhcGUgfTtcbiAgY29udGFpbmVyLnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG59O1xuY29uc3QgYWRkQ29tcG9uZW50ID0gZnVuY3Rpb24odHlwZUM0U2hhcGUsIGFsaWFzLCBsYWJlbCwgdGVjaG4sIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBjb21wb25lbnQgPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGNvbXBvbmVudDIpID0+IGNvbXBvbmVudDIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgY29tcG9uZW50ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5hbGlhcyA9IGFsaWFzO1xuICAgIGM0U2hhcGVBcnJheS5wdXNoKGNvbXBvbmVudCk7XG4gIH1cbiAgaWYgKGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHRlY2huID09PSB2b2lkIDAgfHwgdGVjaG4gPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQudGVjaG4gPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRlY2huID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGVjaG4pWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC50ZWNobiA9IHsgdGV4dDogdGVjaG4gfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQuZGVzY3IgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoZGVzY3IpWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzcHJpdGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGNvbXBvbmVudFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29tcG9uZW50LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5saW5rID0gbGluaztcbiAgfVxuICBjb21wb25lbnQud3JhcCA9IGF1dG9XcmFwKCk7XG4gIGNvbXBvbmVudC50eXBlQzRTaGFwZSA9IHsgdGV4dDogdHlwZUM0U2hhcGUgfTtcbiAgY29tcG9uZW50LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG59O1xuY29uc3QgYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSA9IGZ1bmN0aW9uKGFsaWFzLCBsYWJlbCwgdHlwZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGJvdW5kYXJ5ID0ge307XG4gIGNvbnN0IG9sZCA9IGJvdW5kYXJ5cy5maW5kKChib3VuZGFyeTIpID0+IGJvdW5kYXJ5Mi5hbGlhcyA9PT0gYWxpYXMpO1xuICBpZiAob2xkICYmIGFsaWFzID09PSBvbGQuYWxpYXMpIHtcbiAgICBib3VuZGFyeSA9IG9sZDtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5hbGlhcyA9IGFsaWFzO1xuICAgIGJvdW5kYXJ5cy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJzeXN0ZW1cIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHR5cGUpWzBdO1xuICAgICAgYm91bmRhcnlba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogdHlwZSB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBib3VuZGFyeVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGluayA9IGxpbms7XG4gIH1cbiAgYm91bmRhcnkucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgYm91bmRhcnkud3JhcCA9IGF1dG9XcmFwKCk7XG4gIHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBhbGlhcztcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59O1xuY29uc3QgYWRkQ29udGFpbmVyQm91bmRhcnkgPSBmdW5jdGlvbihhbGlhcywgbGFiZWwsIHR5cGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBib3VuZGFyeSA9IHt9O1xuICBjb25zdCBvbGQgPSBib3VuZGFyeXMuZmluZCgoYm91bmRhcnkyKSA9PiBib3VuZGFyeTIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgYm91bmRhcnkgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkuYWxpYXMgPSBhbGlhcztcbiAgICBib3VuZGFyeXMucHVzaChib3VuZGFyeSk7XG4gIH1cbiAgaWYgKGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS5sYWJlbCA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBsYWJlbCB9O1xuICB9XG4gIGlmICh0eXBlID09PSB2b2lkIDAgfHwgdHlwZSA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LnR5cGUgPSB7IHRleHQ6IFwiY29udGFpbmVyXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0eXBlKVswXTtcbiAgICAgIGJvdW5kYXJ5W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJ5LnR5cGUgPSB7IHRleHQ6IHR5cGUgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmxpbmsgPSBsaW5rO1xuICB9XG4gIGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5LndyYXAgPSBhdXRvV3JhcCgpO1xuICBwYXJlbnRCb3VuZGFyeVBhcnNlID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gYWxpYXM7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wdXNoKHBhcmVudEJvdW5kYXJ5UGFyc2UpO1xufTtcbmNvbnN0IGFkZERlcGxveW1lbnROb2RlID0gZnVuY3Rpb24obm9kZVR5cGUsIGFsaWFzLCBsYWJlbCwgdHlwZSwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGJvdW5kYXJ5ID0ge307XG4gIGNvbnN0IG9sZCA9IGJvdW5kYXJ5cy5maW5kKChib3VuZGFyeTIpID0+IGJvdW5kYXJ5Mi5hbGlhcyA9PT0gYWxpYXMpO1xuICBpZiAob2xkICYmIGFsaWFzID09PSBvbGQuYWxpYXMpIHtcbiAgICBib3VuZGFyeSA9IG9sZDtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5hbGlhcyA9IGFsaWFzO1xuICAgIGJvdW5kYXJ5cy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJub2RlXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0eXBlKVswXTtcbiAgICAgIGJvdW5kYXJ5W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJ5LnR5cGUgPSB7IHRleHQ6IHR5cGUgfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBib3VuZGFyeVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmxpbmsgPSBsaW5rO1xuICB9XG4gIGJvdW5kYXJ5Lm5vZGVUeXBlID0gbm9kZVR5cGU7XG4gIGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5LndyYXAgPSBhdXRvV3JhcCgpO1xuICBwYXJlbnRCb3VuZGFyeVBhcnNlID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gYWxpYXM7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wdXNoKHBhcmVudEJvdW5kYXJ5UGFyc2UpO1xufTtcbmNvbnN0IHBvcEJvdW5kYXJ5UGFyc2VTdGFjayA9IGZ1bmN0aW9uKCkge1xuICBjdXJyZW50Qm91bmRhcnlQYXJzZSA9IHBhcmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59O1xuY29uc3QgdXBkYXRlRWxTdHlsZSA9IGZ1bmN0aW9uKHR5cGVDNFNoYXBlLCBlbGVtZW50TmFtZSwgYmdDb2xvciwgZm9udENvbG9yLCBib3JkZXJDb2xvciwgc2hhZG93aW5nLCBzaGFwZSwgc3ByaXRlLCB0ZWNobiwgbGVnZW5kVGV4dCwgbGVnZW5kU3ByaXRlKSB7XG4gIGxldCBvbGQgPSBjNFNoYXBlQXJyYXkuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5hbGlhcyA9PT0gZWxlbWVudE5hbWUpO1xuICBpZiAob2xkID09PSB2b2lkIDApIHtcbiAgICBvbGQgPSBib3VuZGFyeXMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5hbGlhcyA9PT0gZWxlbWVudE5hbWUpO1xuICAgIGlmIChvbGQgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoYmdDb2xvciAhPT0gdm9pZCAwICYmIGJnQ29sb3IgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGJnQ29sb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhiZ0NvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5iZ0NvbG9yID0gYmdDb2xvcjtcbiAgICB9XG4gIH1cbiAgaWYgKGZvbnRDb2xvciAhPT0gdm9pZCAwICYmIGZvbnRDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgZm9udENvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoZm9udENvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChib3JkZXJDb2xvciAhPT0gdm9pZCAwICYmIGJvcmRlckNvbG9yICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBib3JkZXJDb2xvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGJvcmRlckNvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5ib3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuICBpZiAoc2hhZG93aW5nICE9PSB2b2lkIDAgJiYgc2hhZG93aW5nICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBzaGFkb3dpbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzaGFkb3dpbmcpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLnNoYWRvd2luZyA9IHNoYWRvd2luZztcbiAgICB9XG4gIH1cbiAgaWYgKHNoYXBlICE9PSB2b2lkIDAgJiYgc2hhcGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNoYXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc2hhcGUpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLnNoYXBlID0gc2hhcGU7XG4gICAgfVxuICB9XG4gIGlmIChzcHJpdGUgIT09IHZvaWQgMCAmJiBzcHJpdGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHNwcml0ZSlbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuc3ByaXRlID0gc3ByaXRlO1xuICAgIH1cbiAgfVxuICBpZiAodGVjaG4gIT09IHZvaWQgMCAmJiB0ZWNobiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdGVjaG4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZWNobilbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQudGVjaG4gPSB0ZWNobjtcbiAgICB9XG4gIH1cbiAgaWYgKGxlZ2VuZFRleHQgIT09IHZvaWQgMCAmJiBsZWdlbmRUZXh0ICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBsZWdlbmRUZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGVnZW5kVGV4dClbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQubGVnZW5kVGV4dCA9IGxlZ2VuZFRleHQ7XG4gICAgfVxuICB9XG4gIGlmIChsZWdlbmRTcHJpdGUgIT09IHZvaWQgMCAmJiBsZWdlbmRTcHJpdGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGxlZ2VuZFNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxlZ2VuZFNwcml0ZSlbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQubGVnZW5kU3ByaXRlID0gbGVnZW5kU3ByaXRlO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IHVwZGF0ZVJlbFN0eWxlID0gZnVuY3Rpb24odHlwZUM0U2hhcGUsIGZyb20sIHRvLCB0ZXh0Q29sb3IsIGxpbmVDb2xvciwgb2Zmc2V0WCwgb2Zmc2V0WSkge1xuICBjb25zdCBvbGQgPSByZWxzLmZpbmQoKHJlbCkgPT4gcmVsLmZyb20gPT09IGZyb20gJiYgcmVsLnRvID09PSB0byk7XG4gIGlmIChvbGQgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGV4dENvbG9yICE9PSB2b2lkIDAgJiYgdGV4dENvbG9yICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0Q29sb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZXh0Q29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLnRleHRDb2xvciA9IHRleHRDb2xvcjtcbiAgICB9XG4gIH1cbiAgaWYgKGxpbmVDb2xvciAhPT0gdm9pZCAwICYmIGxpbmVDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgbGluZUNvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluZUNvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5saW5lQ29sb3IgPSBsaW5lQ29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChvZmZzZXRYICE9PSB2b2lkIDAgJiYgb2Zmc2V0WCAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0WCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9mZnNldFgpWzBdO1xuICAgICAgb2xkW2tleV0gPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5vZmZzZXRYID0gcGFyc2VJbnQob2Zmc2V0WCk7XG4gICAgfVxuICB9XG4gIGlmIChvZmZzZXRZICE9PSB2b2lkIDAgJiYgb2Zmc2V0WSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0WSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9mZnNldFkpWzBdO1xuICAgICAgb2xkW2tleV0gPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5vZmZzZXRZID0gcGFyc2VJbnQob2Zmc2V0WSk7XG4gICAgfVxuICB9XG59O1xuY29uc3QgdXBkYXRlTGF5b3V0Q29uZmlnID0gZnVuY3Rpb24odHlwZUM0U2hhcGUsIGM0U2hhcGVJblJvd1BhcmFtLCBjNEJvdW5kYXJ5SW5Sb3dQYXJhbSkge1xuICBsZXQgYzRTaGFwZUluUm93VmFsdWUgPSBjNFNoYXBlSW5Sb3ckMTtcbiAgbGV0IGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gYzRCb3VuZGFyeUluUm93JDE7XG4gIGlmICh0eXBlb2YgYzRTaGFwZUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRTaGFwZUluUm93UGFyYW0pWzBdO1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRTaGFwZUluUm93UGFyYW0pO1xuICB9XG4gIGlmICh0eXBlb2YgYzRCb3VuZGFyeUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRCb3VuZGFyeUluUm93UGFyYW0pWzBdO1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRCb3VuZGFyeUluUm93UGFyYW0pO1xuICB9XG4gIGlmIChjNFNoYXBlSW5Sb3dWYWx1ZSA+PSAxKSB7XG4gICAgYzRTaGFwZUluUm93JDEgPSBjNFNoYXBlSW5Sb3dWYWx1ZTtcbiAgfVxuICBpZiAoYzRCb3VuZGFyeUluUm93VmFsdWUgPj0gMSkge1xuICAgIGM0Qm91bmRhcnlJblJvdyQxID0gYzRCb3VuZGFyeUluUm93VmFsdWU7XG4gIH1cbn07XG5jb25zdCBnZXRDNFNoYXBlSW5Sb3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0U2hhcGVJblJvdyQxO1xufTtcbmNvbnN0IGdldEM0Qm91bmRhcnlJblJvdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYzRCb3VuZGFyeUluUm93JDE7XG59O1xuY29uc3QgZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xufTtcbmNvbnN0IGdldFBhcmVudEJvdW5kYXJ5UGFyc2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHBhcmVudEJvdW5kYXJ5UGFyc2U7XG59O1xuY29uc3QgZ2V0QzRTaGFwZUFycmF5ID0gZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgaWYgKHBhcmVudEJvdW5kYXJ5ID09PSB2b2lkIDAgfHwgcGFyZW50Qm91bmRhcnkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYzRTaGFwZUFycmF5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjNFNoYXBlQXJyYXkuZmlsdGVyKChwZXJzb25PclN5c3RlbSkgPT4ge1xuICAgICAgcmV0dXJuIHBlcnNvbk9yU3lzdGVtLnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeTtcbiAgICB9KTtcbiAgfVxufTtcbmNvbnN0IGdldEM0U2hhcGUgPSBmdW5jdGlvbihhbGlhcykge1xuICByZXR1cm4gYzRTaGFwZUFycmF5LmZpbmQoKHBlcnNvbk9yU3lzdGVtKSA9PiBwZXJzb25PclN5c3RlbS5hbGlhcyA9PT0gYWxpYXMpO1xufTtcbmNvbnN0IGdldEM0U2hhcGVLZXlzID0gZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGdldEM0U2hhcGVBcnJheShwYXJlbnRCb3VuZGFyeSkpO1xufTtcbmNvbnN0IGdldEJvdW5kYXJ5cyA9IGZ1bmN0aW9uKHBhcmVudEJvdW5kYXJ5KSB7XG4gIGlmIChwYXJlbnRCb3VuZGFyeSA9PT0gdm9pZCAwIHx8IHBhcmVudEJvdW5kYXJ5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGJvdW5kYXJ5cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm91bmRhcnlzLmZpbHRlcigoYm91bmRhcnkpID0+IGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeSk7XG4gIH1cbn07XG5jb25zdCBnZXRSZWxzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByZWxzO1xufTtcbmNvbnN0IGdldFRpdGxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aXRsZTtcbn07XG5jb25zdCBzZXRXcmFwID0gZnVuY3Rpb24od3JhcFNldHRpbmcpIHtcbiAgd3JhcEVuYWJsZWQgPSB3cmFwU2V0dGluZztcbn07XG5jb25zdCBhdXRvV3JhcCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gd3JhcEVuYWJsZWQ7XG59O1xuY29uc3QgY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgYzRTaGFwZUFycmF5ID0gW107XG4gIGJvdW5kYXJ5cyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJnbG9iYWxcIixcbiAgICAgIGxhYmVsOiB7IHRleHQ6IFwiZ2xvYmFsXCIgfSxcbiAgICAgIHR5cGU6IHsgdGV4dDogXCJnbG9iYWxcIiB9LFxuICAgICAgdGFnczogbnVsbCxcbiAgICAgIGxpbms6IG51bGwsXG4gICAgICBwYXJlbnRCb3VuZGFyeTogXCJcIlxuICAgIH1cbiAgXTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IFwiXCI7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gXCJnbG9iYWxcIjtcbiAgYm91bmRhcnlQYXJzZVN0YWNrID0gW1wiXCJdO1xuICByZWxzID0gW107XG4gIGJvdW5kYXJ5UGFyc2VTdGFjayA9IFtcIlwiXTtcbiAgdGl0bGUgPSBcIlwiO1xuICB3cmFwRW5hYmxlZCA9IGZhbHNlO1xuICBjNFNoYXBlSW5Sb3ckMSA9IDQ7XG4gIGM0Qm91bmRhcnlJblJvdyQxID0gMjtcbn07XG5jb25zdCBMSU5FVFlQRSA9IHtcbiAgU09MSUQ6IDAsXG4gIERPVFRFRDogMSxcbiAgTk9URTogMixcbiAgU09MSURfQ1JPU1M6IDMsXG4gIERPVFRFRF9DUk9TUzogNCxcbiAgU09MSURfT1BFTjogNSxcbiAgRE9UVEVEX09QRU46IDYsXG4gIExPT1BfU1RBUlQ6IDEwLFxuICBMT09QX0VORDogMTEsXG4gIEFMVF9TVEFSVDogMTIsXG4gIEFMVF9FTFNFOiAxMyxcbiAgQUxUX0VORDogMTQsXG4gIE9QVF9TVEFSVDogMTUsXG4gIE9QVF9FTkQ6IDE2LFxuICBBQ1RJVkVfU1RBUlQ6IDE3LFxuICBBQ1RJVkVfRU5EOiAxOCxcbiAgUEFSX1NUQVJUOiAxOSxcbiAgUEFSX0FORDogMjAsXG4gIFBBUl9FTkQ6IDIxLFxuICBSRUNUX1NUQVJUOiAyMixcbiAgUkVDVF9FTkQ6IDIzLFxuICBTT0xJRF9QT0lOVDogMjQsXG4gIERPVFRFRF9QT0lOVDogMjVcbn07XG5jb25zdCBBUlJPV1RZUEUgPSB7XG4gIEZJTExFRDogMCxcbiAgT1BFTjogMVxufTtcbmNvbnN0IFBMQUNFTUVOVCA9IHtcbiAgTEVGVE9GOiAwLFxuICBSSUdIVE9GOiAxLFxuICBPVkVSOiAyXG59O1xuY29uc3Qgc2V0VGl0bGUgPSBmdW5jdGlvbih0eHQpIHtcbiAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSk7XG4gIHRpdGxlID0gc2FuaXRpemVkVGV4dDtcbn07XG5jb25zdCBjNERiID0ge1xuICBhZGRQZXJzb25PclN5c3RlbSxcbiAgYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSxcbiAgYWRkQ29udGFpbmVyLFxuICBhZGRDb250YWluZXJCb3VuZGFyeSxcbiAgYWRkQ29tcG9uZW50LFxuICBhZGREZXBsb3ltZW50Tm9kZSxcbiAgcG9wQm91bmRhcnlQYXJzZVN0YWNrLFxuICBhZGRSZWwsXG4gIHVwZGF0ZUVsU3R5bGUsXG4gIHVwZGF0ZVJlbFN0eWxlLFxuICB1cGRhdGVMYXlvdXRDb25maWcsXG4gIGF1dG9XcmFwLFxuICBzZXRXcmFwLFxuICBnZXRDNFNoYXBlQXJyYXksXG4gIGdldEM0U2hhcGUsXG4gIGdldEM0U2hhcGVLZXlzLFxuICBnZXRCb3VuZGFyeXMsXG4gIGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlLFxuICBnZXRQYXJlbnRCb3VuZGFyeVBhcnNlLFxuICBnZXRSZWxzLFxuICBnZXRUaXRsZSxcbiAgZ2V0QzRUeXBlLFxuICBnZXRDNFNoYXBlSW5Sb3csXG4gIGdldEM0Qm91bmRhcnlJblJvdyxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHBhcnNlRGlyZWN0aXZlLFxuICBnZXRDb25maWc6ICgpID0+IGdldENvbmZpZygpLmM0LFxuICBjbGVhcixcbiAgTElORVRZUEUsXG4gIEFSUk9XVFlQRSxcbiAgUExBQ0VNRU5ULFxuICBzZXRUaXRsZSxcbiAgc2V0QzRUeXBlXG4gIC8vIGFwcGx5LFxufTtcbmNvbnN0IGRyYXdSZWN0ID0gZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgcmV0dXJuIGRyYXdSZWN0JDEoZWxlbSwgcmVjdERhdGEpO1xufTtcbmNvbnN0IGRyYXdJbWFnZSA9IGZ1bmN0aW9uKGVsZW0sIHdpZHRoLCBoZWlnaHQsIHgsIHksIGxpbmspIHtcbiAgY29uc3QgaW1hZ2VFbGVtID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIGltYWdlRWxlbS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gIGltYWdlRWxlbS5hdHRyKFwieFwiLCB4KTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ5XCIsIHkpO1xuICBsZXQgc2FuaXRpemVkTGluayA9IGxpbmsuc3RhcnRzV2l0aChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NFwiKSA/IGxpbmsgOiBzYW5pdGl6ZVVybChsaW5rKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ4bGluazpocmVmXCIsIHNhbml0aXplZExpbmspO1xufTtcbmNvbnN0IGRyYXdSZWxzJDEgPSAoZWxlbSwgcmVsczIsIGNvbmYyKSA9PiB7XG4gIGNvbnN0IHJlbHNFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBsZXQgaSA9IDA7XG4gIGZvciAobGV0IHJlbCBvZiByZWxzMikge1xuICAgIGxldCB0ZXh0Q29sb3IgPSByZWwudGV4dENvbG9yID8gcmVsLnRleHRDb2xvciA6IFwiIzQ0NDQ0NFwiO1xuICAgIGxldCBzdHJva2VDb2xvciA9IHJlbC5saW5lQ29sb3IgPyByZWwubGluZUNvbG9yIDogXCIjNDQ0NDQ0XCI7XG4gICAgbGV0IG9mZnNldFggPSByZWwub2Zmc2V0WCA/IHBhcnNlSW50KHJlbC5vZmZzZXRYKSA6IDA7XG4gICAgbGV0IG9mZnNldFkgPSByZWwub2Zmc2V0WSA/IHBhcnNlSW50KHJlbC5vZmZzZXRZKSA6IDA7XG4gICAgbGV0IHVybCA9IFwiXCI7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGxldCBsaW5lID0gcmVsc0VsZW0uYXBwZW5kKFwibGluZVwiKTtcbiAgICAgIGxpbmUuYXR0cihcIngxXCIsIHJlbC5zdGFydFBvaW50LngpO1xuICAgICAgbGluZS5hdHRyKFwieTFcIiwgcmVsLnN0YXJ0UG9pbnQueSk7XG4gICAgICBsaW5lLmF0dHIoXCJ4MlwiLCByZWwuZW5kUG9pbnQueCk7XG4gICAgICBsaW5lLmF0dHIoXCJ5MlwiLCByZWwuZW5kUG9pbnQueSk7XG4gICAgICBsaW5lLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxXCIpO1xuICAgICAgbGluZS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKTtcbiAgICAgIGxpbmUuc3R5bGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgICAgIGlmIChyZWwudHlwZSAhPT0gXCJyZWxfYlwiKSB7XG4gICAgICAgIGxpbmUuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2hlYWQpXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbC50eXBlID09PSBcImJpcmVsXCIgfHwgcmVsLnR5cGUgPT09IFwicmVsX2JcIikge1xuICAgICAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2VuZClcIik7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaW5lID0gcmVsc0VsZW0uYXBwZW5kKFwicGF0aFwiKTtcbiAgICAgIGxpbmUuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxXCIpLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBcIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSBcIi5yZXBsYWNlQWxsKFwic3RhcnR4XCIsIHJlbC5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoXCJzdGFydHlcIiwgcmVsLnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbChcbiAgICAgICAgICBcImNvbnRyb2x4XCIsXG4gICAgICAgICAgcmVsLnN0YXJ0UG9pbnQueCArIChyZWwuZW5kUG9pbnQueCAtIHJlbC5zdGFydFBvaW50LngpIC8gMiAtIChyZWwuZW5kUG9pbnQueCAtIHJlbC5zdGFydFBvaW50LngpIC8gNFxuICAgICAgICApLnJlcGxhY2VBbGwoXCJjb250cm9seVwiLCByZWwuc3RhcnRQb2ludC55ICsgKHJlbC5lbmRQb2ludC55IC0gcmVsLnN0YXJ0UG9pbnQueSkgLyAyKS5yZXBsYWNlQWxsKFwic3RvcHhcIiwgcmVsLmVuZFBvaW50LngpLnJlcGxhY2VBbGwoXCJzdG9weVwiLCByZWwuZW5kUG9pbnQueSlcbiAgICAgICk7XG4gICAgICBpZiAocmVsLnR5cGUgIT09IFwicmVsX2JcIikge1xuICAgICAgICBsaW5lLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjYXJyb3doZWFkKVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWwudHlwZSA9PT0gXCJiaXJlbFwiIHx8IHJlbC50eXBlID09PSBcInJlbF9iXCIpIHtcbiAgICAgICAgbGluZS5hdHRyKFwibWFya2VyLXN0YXJ0XCIsIFwidXJsKFwiICsgdXJsICsgXCIjYXJyb3dlbmQpXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWVzc2FnZUNvbmYgPSBjb25mMi5tZXNzYWdlRm9udCgpO1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgcmVsLmxhYmVsLnRleHQsXG4gICAgICByZWxzRWxlbSxcbiAgICAgIE1hdGgubWluKHJlbC5zdGFydFBvaW50LngsIHJlbC5lbmRQb2ludC54KSArIE1hdGguYWJzKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyAyICsgb2Zmc2V0WCxcbiAgICAgIE1hdGgubWluKHJlbC5zdGFydFBvaW50LnksIHJlbC5lbmRQb2ludC55KSArIE1hdGguYWJzKHJlbC5lbmRQb2ludC55IC0gcmVsLnN0YXJ0UG9pbnQueSkgLyAyICsgb2Zmc2V0WSxcbiAgICAgIHJlbC5sYWJlbC53aWR0aCxcbiAgICAgIHJlbC5sYWJlbC5oZWlnaHQsXG4gICAgICB7IGZpbGw6IHRleHRDb2xvciB9LFxuICAgICAgbWVzc2FnZUNvbmZcbiAgICApO1xuICAgIGlmIChyZWwudGVjaG4gJiYgcmVsLnRlY2huLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIG1lc3NhZ2VDb25mID0gY29uZjIubWVzc2FnZUZvbnQoKTtcbiAgICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgICBcIltcIiArIHJlbC50ZWNobi50ZXh0ICsgXCJdXCIsXG4gICAgICAgIHJlbHNFbGVtLFxuICAgICAgICBNYXRoLm1pbihyZWwuc3RhcnRQb2ludC54LCByZWwuZW5kUG9pbnQueCkgKyBNYXRoLmFicyhyZWwuZW5kUG9pbnQueCAtIHJlbC5zdGFydFBvaW50LngpIC8gMiArIG9mZnNldFgsXG4gICAgICAgIE1hdGgubWluKHJlbC5zdGFydFBvaW50LnksIHJlbC5lbmRQb2ludC55KSArIE1hdGguYWJzKHJlbC5lbmRQb2ludC55IC0gcmVsLnN0YXJ0UG9pbnQueSkgLyAyICsgY29uZjIubWVzc2FnZUZvbnRTaXplICsgNSArIG9mZnNldFksXG4gICAgICAgIE1hdGgubWF4KHJlbC5sYWJlbC53aWR0aCwgcmVsLnRlY2huLndpZHRoKSxcbiAgICAgICAgcmVsLnRlY2huLmhlaWdodCxcbiAgICAgICAgeyBmaWxsOiB0ZXh0Q29sb3IsIFwiZm9udC1zdHlsZVwiOiBcIml0YWxpY1wiIH0sXG4gICAgICAgIG1lc3NhZ2VDb25mXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IGRyYXdCb3VuZGFyeSQxID0gZnVuY3Rpb24oZWxlbSwgYm91bmRhcnksIGNvbmYyKSB7XG4gIGNvbnN0IGJvdW5kYXJ5RWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgbGV0IGZpbGxDb2xvciA9IGJvdW5kYXJ5LmJnQ29sb3IgPyBib3VuZGFyeS5iZ0NvbG9yIDogXCJub25lXCI7XG4gIGxldCBzdHJva2VDb2xvciA9IGJvdW5kYXJ5LmJvcmRlckNvbG9yID8gYm91bmRhcnkuYm9yZGVyQ29sb3IgOiBcIiM0NDQ0NDRcIjtcbiAgbGV0IGZvbnRDb2xvciA9IGJvdW5kYXJ5LmZvbnRDb2xvciA/IGJvdW5kYXJ5LmZvbnRDb2xvciA6IFwiYmxhY2tcIjtcbiAgbGV0IGF0dHJzVmFsdWUgPSB7IFwic3Ryb2tlLXdpZHRoXCI6IDEsIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIjcuMCw3LjBcIiB9O1xuICBpZiAoYm91bmRhcnkubm9kZVR5cGUpIHtcbiAgICBhdHRyc1ZhbHVlID0geyBcInN0cm9rZS13aWR0aFwiOiAxIH07XG4gIH1cbiAgbGV0IHJlY3REYXRhID0ge1xuICAgIHg6IGJvdW5kYXJ5LngsXG4gICAgeTogYm91bmRhcnkueSxcbiAgICBmaWxsOiBmaWxsQ29sb3IsXG4gICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcbiAgICB3aWR0aDogYm91bmRhcnkud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZGFyeS5oZWlnaHQsXG4gICAgcng6IDIuNSxcbiAgICByeTogMi41LFxuICAgIGF0dHJzOiBhdHRyc1ZhbHVlXG4gIH07XG4gIGRyYXdSZWN0KGJvdW5kYXJ5RWxlbSwgcmVjdERhdGEpO1xuICBsZXQgYm91bmRhcnlDb25mID0gY29uZjIuYm91bmRhcnlGb250KCk7XG4gIGJvdW5kYXJ5Q29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gIGJvdW5kYXJ5Q29uZi5mb250U2l6ZSA9IGJvdW5kYXJ5Q29uZi5mb250U2l6ZSArIDI7XG4gIGJvdW5kYXJ5Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIGJvdW5kYXJ5LmxhYmVsLnRleHQsXG4gICAgYm91bmRhcnlFbGVtLFxuICAgIGJvdW5kYXJ5LngsXG4gICAgYm91bmRhcnkueSArIGJvdW5kYXJ5LmxhYmVsLlksXG4gICAgYm91bmRhcnkud2lkdGgsXG4gICAgYm91bmRhcnkuaGVpZ2h0LFxuICAgIHsgZmlsbDogXCIjNDQ0NDQ0XCIgfSxcbiAgICBib3VuZGFyeUNvbmZcbiAgKTtcbiAgaWYgKGJvdW5kYXJ5LnR5cGUgJiYgYm91bmRhcnkudHlwZS50ZXh0ICE9PSBcIlwiKSB7XG4gICAgYm91bmRhcnlDb25mID0gY29uZjIuYm91bmRhcnlGb250KCk7XG4gICAgYm91bmRhcnlDb25mLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICAgIGJvdW5kYXJ5LnR5cGUudGV4dCxcbiAgICAgIGJvdW5kYXJ5RWxlbSxcbiAgICAgIGJvdW5kYXJ5LngsXG4gICAgICBib3VuZGFyeS55ICsgYm91bmRhcnkudHlwZS5ZLFxuICAgICAgYm91bmRhcnkud2lkdGgsXG4gICAgICBib3VuZGFyeS5oZWlnaHQsXG4gICAgICB7IGZpbGw6IFwiIzQ0NDQ0NFwiIH0sXG4gICAgICBib3VuZGFyeUNvbmZcbiAgICApO1xuICB9XG4gIGlmIChib3VuZGFyeS5kZXNjciAmJiBib3VuZGFyeS5kZXNjci50ZXh0ICE9PSBcIlwiKSB7XG4gICAgYm91bmRhcnlDb25mID0gY29uZjIuYm91bmRhcnlGb250KCk7XG4gICAgYm91bmRhcnlDb25mLmZvbnRTaXplID0gYm91bmRhcnlDb25mLmZvbnRTaXplIC0gMjtcbiAgICBib3VuZGFyeUNvbmYuZm9udENvbG9yID0gZm9udENvbG9yO1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYm91bmRhcnkuZGVzY3IudGV4dCxcbiAgICAgIGJvdW5kYXJ5RWxlbSxcbiAgICAgIGJvdW5kYXJ5LngsXG4gICAgICBib3VuZGFyeS55ICsgYm91bmRhcnkuZGVzY3IuWSxcbiAgICAgIGJvdW5kYXJ5LndpZHRoLFxuICAgICAgYm91bmRhcnkuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBcIiM0NDQ0NDRcIiB9LFxuICAgICAgYm91bmRhcnlDb25mXG4gICAgKTtcbiAgfVxufTtcbmNvbnN0IGRyYXdDNFNoYXBlID0gZnVuY3Rpb24oZWxlbSwgYzRTaGFwZSwgY29uZjIpIHtcbiAgdmFyIF9hO1xuICBsZXQgZmlsbENvbG9yID0gYzRTaGFwZS5iZ0NvbG9yID8gYzRTaGFwZS5iZ0NvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYmdfY29sb3JcIl07XG4gIGxldCBzdHJva2VDb2xvciA9IGM0U2hhcGUuYm9yZGVyQ29sb3IgPyBjNFNoYXBlLmJvcmRlckNvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYm9yZGVyX2NvbG9yXCJdO1xuICBsZXQgZm9udENvbG9yID0gYzRTaGFwZS5mb250Q29sb3IgPyBjNFNoYXBlLmZvbnRDb2xvciA6IFwiI0ZGRkZGRlwiO1xuICBsZXQgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gIHN3aXRjaCAoYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KSB7XG4gICAgY2FzZSBcInBlcnNvblwiOlxuICAgICAgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgICBwZXJzb25JbWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUI2RWxFUVZSNFh1MllMWStFTUJDRzkrZFdyMGFqMFdnMEdvMUdvMCtqOFhkdjJ1VEN2djFncHQwZWJIS1B1aERhZVc0NjA1WjltSnZ4NEFkWFV5VFVkZDA4eit1NmZsbVdaUm5Ic1drYWZrOURwdEF3RFB1K2YwZUFZdHUyUEVhR1d1ajVmQ0lackJBQzJlTEJBblJDc0Vra3htZWFKcDdpREoyUU1EZEhzTGc4U3hLRkVKYUFvOGxBWG5tdU9GSWhUTXB4eEtBVGVibzRVaUZrbnVObzRPbmlTSVhReVJ4RUEzWXNuakdDVkVqVlhEN3lMVUFxeEJHVXlQdi9ZNFcyYmVNZ0d1UzdrVlFJQnljSDBmRCtvaTVwZXpRRVR4ZEhLbVFLR2sxZVFFWWxkSytqdzVHeFBmWjl6N01rMFFuaGYxVzFtM3cvL0VVbjVCRG1TWnNiUjQ0UVFMQkVxckJIcU9ybVNLYVFBeGRuTEFyQ3J4WmNNN0E3WktzNGlvUnE4TEZDK05wQzNXQ0JKc3ZwVnc1ZWRtOWlFWEZ1eU5meFhBZ1N3ZnJGUTFjMGlOZGE4QWRlanZVZ25rdE90SlFReG1jZkZ6R2dsYzVXVkNqN29EZ0ZxVTE4Ym9lRlNzNTJDVWg4TEU4QklWUURUMUFCckIwSHRnU0VZbFg1ZG9KbkN3djlUWG9jS0NhS2Jud2hkREtQcTRsZjNTd1UzSExxNFYvK1dZaEhWTWEvM2I0SWxmeWlrQWR1Q2tjQmM3bVEzL3ovUXEvY1R1aWtoa3pCMTJBZS9tY0pDOVUrVm84RWoxZ1dBdGdiZUdnRnNBTUhyNTBCSVdPTENiZXp2aHBCRlVkWTZFSnVKL1FEVzBYb01YNjB6WjBBQUFBQVNVVk9SSzVDWUlJPVwiO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgY29uc3QgYzRTaGFwZUVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGM0U2hhcGVFbGVtLmF0dHIoXCJjbGFzc1wiLCBcInBlcnNvbi1tYW5cIik7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICBzd2l0Y2ggKGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCkge1xuICAgIGNhc2UgXCJwZXJzb25cIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgY2FzZSBcInN5c3RlbVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9zeXN0ZW1cIjpcbiAgICBjYXNlIFwiY29udGFpbmVyXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbnRhaW5lclwiOlxuICAgIGNhc2UgXCJjb21wb25lbnRcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29tcG9uZW50XCI6XG4gICAgICByZWN0LnggPSBjNFNoYXBlLng7XG4gICAgICByZWN0LnkgPSBjNFNoYXBlLnk7XG4gICAgICByZWN0LmZpbGwgPSBmaWxsQ29sb3I7XG4gICAgICByZWN0LndpZHRoID0gYzRTaGFwZS53aWR0aDtcbiAgICAgIHJlY3QuaGVpZ2h0ID0gYzRTaGFwZS5oZWlnaHQ7XG4gICAgICByZWN0LnN0cm9rZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgcmVjdC5yeCA9IDIuNTtcbiAgICAgIHJlY3QucnkgPSAyLjU7XG4gICAgICByZWN0LmF0dHJzID0geyBcInN0cm9rZS13aWR0aFwiOiAwLjUgfTtcbiAgICAgIGRyYXdSZWN0KGM0U2hhcGVFbGVtLCByZWN0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzeXN0ZW1fZGJcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfc3lzdGVtX2RiXCI6XG4gICAgY2FzZSBcImNvbnRhaW5lcl9kYlwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9jb250YWluZXJfZGJcIjpcbiAgICBjYXNlIFwiY29tcG9uZW50X2RiXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbXBvbmVudF9kYlwiOlxuICAgICAgYzRTaGFwZUVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZmlsbFwiLCBmaWxsQ29sb3IpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVcIikuYXR0cihcInN0cm9rZVwiLCBzdHJva2VDb2xvcikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodFwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54KS5yZXBsYWNlQWxsKFwic3RhcnR5XCIsIGM0U2hhcGUueSkucmVwbGFjZUFsbChcImhhbGZcIiwgYzRTaGFwZS53aWR0aCAvIDIpLnJlcGxhY2VBbGwoXCJoZWlnaHRcIiwgYzRTaGFwZS5oZWlnaHQpXG4gICAgICApO1xuICAgICAgYzRTaGFwZUVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNVwiKS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNc3RhcnR4LHN0YXJ0eWMwLDEwIGhhbGYsMTAgaGFsZiwxMGMwLDAgaGFsZiwwIGhhbGYsLTEwXCIucmVwbGFjZUFsbChcInN0YXJ0eFwiLCBjNFNoYXBlLngpLnJlcGxhY2VBbGwoXCJzdGFydHlcIiwgYzRTaGFwZS55KS5yZXBsYWNlQWxsKFwiaGFsZlwiLCBjNFNoYXBlLndpZHRoIC8gMilcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3lzdGVtX3F1ZXVlXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX3N5c3RlbV9xdWV1ZVwiOlxuICAgIGNhc2UgXCJjb250YWluZXJfcXVldWVcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlXCI6XG4gICAgY2FzZSBcImNvbXBvbmVudF9xdWV1ZVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVcIjpcbiAgICAgIGM0U2hhcGVFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgZmlsbENvbG9yKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMC41XCIpLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBcIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZlwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54KS5yZXBsYWNlQWxsKFwic3RhcnR5XCIsIGM0U2hhcGUueSkucmVwbGFjZUFsbChcIndpZHRoXCIsIGM0U2hhcGUud2lkdGgpLnJlcGxhY2VBbGwoXCJoYWxmXCIsIGM0U2hhcGUuaGVpZ2h0IC8gMilcbiAgICAgICk7XG4gICAgICBjNFNoYXBlRWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMC41XCIpLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBcIk1zdGFydHgsc3RhcnR5Yy01LDAgLTUsaGFsZiAtNSxoYWxmYzAsaGFsZiA1LGhhbGYgNSxoYWxmXCIucmVwbGFjZUFsbChcInN0YXJ0eFwiLCBjNFNoYXBlLnggKyBjNFNoYXBlLndpZHRoKS5yZXBsYWNlQWxsKFwic3RhcnR5XCIsIGM0U2hhcGUueSkucmVwbGFjZUFsbChcImhhbGZcIiwgYzRTaGFwZS5oZWlnaHQgLyAyKVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGxldCBjNFNoYXBlRm9udENvbmYgPSBnZXRDNFNoYXBlRm9udChjb25mMiwgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KTtcbiAgYzRTaGFwZUVsZW0uYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiZmlsbFwiLCBmb250Q29sb3IpLmF0dHIoXCJmb250LWZhbWlseVwiLCBjNFNoYXBlRm9udENvbmYuZm9udEZhbWlseSkuYXR0cihcImZvbnQtc2l6ZVwiLCBjNFNoYXBlRm9udENvbmYuZm9udFNpemUgLSAyKS5hdHRyKFwiZm9udC1zdHlsZVwiLCBcIml0YWxpY1wiKS5hdHRyKFwibGVuZ3RoQWRqdXN0XCIsIFwic3BhY2luZ1wiKS5hdHRyKFwidGV4dExlbmd0aFwiLCBjNFNoYXBlLnR5cGVDNFNoYXBlLndpZHRoKS5hdHRyKFwieFwiLCBjNFNoYXBlLnggKyBjNFNoYXBlLndpZHRoIC8gMiAtIGM0U2hhcGUudHlwZUM0U2hhcGUud2lkdGggLyAyKS5hdHRyKFwieVwiLCBjNFNoYXBlLnkgKyBjNFNoYXBlLnR5cGVDNFNoYXBlLlkpLnRleHQoXCI8PFwiICsgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCI+PlwiKTtcbiAgc3dpdGNoIChjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpIHtcbiAgICBjYXNlIFwicGVyc29uXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX3BlcnNvblwiOlxuICAgICAgZHJhd0ltYWdlKFxuICAgICAgICBjNFNoYXBlRWxlbSxcbiAgICAgICAgNDgsXG4gICAgICAgIDQ4LFxuICAgICAgICBjNFNoYXBlLnggKyBjNFNoYXBlLndpZHRoIC8gMiAtIDI0LFxuICAgICAgICBjNFNoYXBlLnkgKyBjNFNoYXBlLmltYWdlLlksXG4gICAgICAgIHBlcnNvbkltZ1xuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGxldCB0ZXh0Rm9udENvbmYgPSBjb25mMltjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQgKyBcIkZvbnRcIl0oKTtcbiAgdGV4dEZvbnRDb25mLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgdGV4dEZvbnRDb25mLmZvbnRTaXplID0gdGV4dEZvbnRDb25mLmZvbnRTaXplICsgMjtcbiAgdGV4dEZvbnRDb25mLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgYzRTaGFwZS5sYWJlbC50ZXh0LFxuICAgIGM0U2hhcGVFbGVtLFxuICAgIGM0U2hhcGUueCxcbiAgICBjNFNoYXBlLnkgKyBjNFNoYXBlLmxhYmVsLlksXG4gICAgYzRTaGFwZS53aWR0aCxcbiAgICBjNFNoYXBlLmhlaWdodCxcbiAgICB7IGZpbGw6IGZvbnRDb2xvciB9LFxuICAgIHRleHRGb250Q29uZlxuICApO1xuICB0ZXh0Rm9udENvbmYgPSBjb25mMltjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQgKyBcIkZvbnRcIl0oKTtcbiAgdGV4dEZvbnRDb25mLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgaWYgKGM0U2hhcGUudGVjaG4gJiYgKChfYSA9IGM0U2hhcGUudGVjaG4pID09IG51bGwgPyB2b2lkIDAgOiBfYS50ZXh0KSAhPT0gXCJcIikge1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYzRTaGFwZS50ZWNobi50ZXh0LFxuICAgICAgYzRTaGFwZUVsZW0sXG4gICAgICBjNFNoYXBlLngsXG4gICAgICBjNFNoYXBlLnkgKyBjNFNoYXBlLnRlY2huLlksXG4gICAgICBjNFNoYXBlLndpZHRoLFxuICAgICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgICB7IGZpbGw6IGZvbnRDb2xvciwgXCJmb250LXN0eWxlXCI6IFwiaXRhbGljXCIgfSxcbiAgICAgIHRleHRGb250Q29uZlxuICAgICk7XG4gIH0gZWxzZSBpZiAoYzRTaGFwZS50eXBlICYmIGM0U2hhcGUudHlwZS50ZXh0ICE9PSBcIlwiKSB7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICBjNFNoYXBlLnR5cGUudGV4dCxcbiAgICAgIGM0U2hhcGVFbGVtLFxuICAgICAgYzRTaGFwZS54LFxuICAgICAgYzRTaGFwZS55ICsgYzRTaGFwZS50eXBlLlksXG4gICAgICBjNFNoYXBlLndpZHRoLFxuICAgICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgICB7IGZpbGw6IGZvbnRDb2xvciwgXCJmb250LXN0eWxlXCI6IFwiaXRhbGljXCIgfSxcbiAgICAgIHRleHRGb250Q29uZlxuICAgICk7XG4gIH1cbiAgaWYgKGM0U2hhcGUuZGVzY3IgJiYgYzRTaGFwZS5kZXNjci50ZXh0ICE9PSBcIlwiKSB7XG4gICAgdGV4dEZvbnRDb25mID0gY29uZjIucGVyc29uRm9udCgpO1xuICAgIHRleHRGb250Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICBjNFNoYXBlLmRlc2NyLnRleHQsXG4gICAgICBjNFNoYXBlRWxlbSxcbiAgICAgIGM0U2hhcGUueCxcbiAgICAgIGM0U2hhcGUueSArIGM0U2hhcGUuZGVzY3IuWSxcbiAgICAgIGM0U2hhcGUud2lkdGgsXG4gICAgICBjNFNoYXBlLmhlaWdodCxcbiAgICAgIHsgZmlsbDogZm9udENvbG9yIH0sXG4gICAgICB0ZXh0Rm9udENvbmZcbiAgICApO1xuICB9XG4gIHJldHVybiBjNFNoYXBlLmhlaWdodDtcbn07XG5jb25zdCBpbnNlcnREYXRhYmFzZUljb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiZGF0YWJhc2VcIikuYXR0cihcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIikuYXR0cihcImNsaXAtcnVsZVwiLCBcImV2ZW5vZGRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6XCJcbiAgKTtcbn07XG5jb25zdCBpbnNlcnRDb21wdXRlckljb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY29tcHV0ZXJcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3pcIlxuICApO1xufTtcbmNvbnN0IGluc2VydENsb2NrSWNvbiA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjbG9ja1wiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExelwiXG4gICk7XG59O1xuY29uc3QgaW5zZXJ0QXJyb3dIZWFkID0gZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImFycm93aGVhZFwiKS5hdHRyKFwicmVmWFwiLCA5KS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAgMCBMIDEwIDUgTCAwIDEwIHpcIik7XG59O1xuY29uc3QgaW5zZXJ0QXJyb3dFbmQgPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYXJyb3dlbmRcIikuYXR0cihcInJlZlhcIiwgMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgelwiKTtcbn07XG5jb25zdCBpbnNlcnRBcnJvd0ZpbGxlZEhlYWQgPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZmlsbGVkLWhlYWRcIikuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59O1xuY29uc3QgaW5zZXJ0RHluYW1pY051bWJlciA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJzZXF1ZW5jZW51bWJlclwiKS5hdHRyKFwicmVmWFwiLCAxNSkuYXR0cihcInJlZllcIiwgMTUpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA2MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCA0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCAxNSkuYXR0cihcImN5XCIsIDE1KS5hdHRyKFwiclwiLCA2KTtcbn07XG5jb25zdCBpbnNlcnRBcnJvd0Nyb3NzSGVhZCA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgY29uc3QgZGVmcyA9IGVsZW0uYXBwZW5kKFwiZGVmc1wiKTtcbiAgY29uc3QgbWFya2VyID0gZGVmcy5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiY3Jvc3NoZWFkXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxNSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCA4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hdHRyKFwicmVmWFwiLCAxNikuYXR0cihcInJlZllcIiwgNCk7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJmaWxsXCIsIFwiYmxhY2tcIikuYXR0cihcInN0cm9rZVwiLCBcIiMwMDAwMDBcIikuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMCwgMFwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB4XCIpLmF0dHIoXCJkXCIsIFwiTSA5LDIgViA2IEwxNiw0IFpcIik7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzAwMDAwMFwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIwLCAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcImRcIiwgXCJNIDAsMSBMIDYsNyBNIDYsMSBMIDAsN1wiKTtcbn07XG5jb25zdCBnZXRDNFNoYXBlRm9udCA9IChjbmYsIHR5cGVDNFNoYXBlKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9udEZhbWlseTogY25mW3R5cGVDNFNoYXBlICsgXCJGb250RmFtaWx5XCJdLFxuICAgIGZvbnRTaXplOiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRTaXplXCJdLFxuICAgIGZvbnRXZWlnaHQ6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udFdlaWdodFwiXVxuICB9O1xufTtcbmNvbnN0IF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycykge1xuICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSArIGhlaWdodCAvIDIgKyA1KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMikge1xuICAgIGNvbnN0IHsgZm9udFNpemUsIGZvbnRGYW1pbHksIGZvbnRXZWlnaHQgfSA9IGNvbmYyO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChjb21tb24ubGluZUJyZWFrUmVnZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGR5ID0gaSAqIGZvbnRTaXplIC0gZm9udFNpemUgKiAobGluZXMubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBmb250U2l6ZSkuc3R5bGUoXCJmb250LXdlaWdodFwiLCBmb250V2VpZ2h0KS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtYXRoZW1hdGljYWxcIik7XG4gICAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGJ5Rm8oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMikge1xuICAgIGNvbnN0IHMgPSBnLmFwcGVuZChcInN3aXRjaFwiKTtcbiAgICBjb25zdCBmID0gcy5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpO1xuICAgIGNvbnN0IHRleHQgPSBmLmFwcGVuZChcInhodG1sOmRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZVwiKS5zdHlsZShcImhlaWdodFwiLCBcIjEwMCVcIikuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgdGV4dC5hcHBlbmQoXCJkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKS5zdHlsZShcInRleHQtYWxpZ25cIiwgXCJjZW50ZXJcIikuc3R5bGUoXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIGJ5VHNwYW4oY29udGVudCwgcywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMik7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIGZ1bmN0aW9uIF9zZXRUZXh0QXR0cnModG9UZXh0LCBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICBpZiAoZnJvbVRleHRBdHRyc0RpY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB0b1RleHQuYXR0cihrZXksIGZyb21UZXh0QXR0cnNEaWN0W2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oY29uZjIpIHtcbiAgICByZXR1cm4gY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwib2xkXCIgPyBieVRleHQgOiBieVRzcGFuO1xuICB9O1xufSgpO1xuY29uc3Qgc3ZnRHJhdyA9IHtcbiAgZHJhd1JlY3QsXG4gIGRyYXdCb3VuZGFyeTogZHJhd0JvdW5kYXJ5JDEsXG4gIGRyYXdDNFNoYXBlLFxuICBkcmF3UmVsczogZHJhd1JlbHMkMSxcbiAgZHJhd0ltYWdlLFxuICBpbnNlcnRBcnJvd0hlYWQsXG4gIGluc2VydEFycm93RW5kLFxuICBpbnNlcnRBcnJvd0ZpbGxlZEhlYWQsXG4gIGluc2VydER5bmFtaWNOdW1iZXIsXG4gIGluc2VydEFycm93Q3Jvc3NIZWFkLFxuICBpbnNlcnREYXRhYmFzZUljb24sXG4gIGluc2VydENvbXB1dGVySWNvbixcbiAgaW5zZXJ0Q2xvY2tJY29uXG59O1xubGV0IGdsb2JhbEJvdW5kYXJ5TWF4WCA9IDAsIGdsb2JhbEJvdW5kYXJ5TWF4WSA9IDA7XG5sZXQgYzRTaGFwZUluUm93ID0gNDtcbmxldCBjNEJvdW5kYXJ5SW5Sb3cgPSAyO1xucGFyc2VyLnl5ID0gYzREYjtcbmxldCBjb25mID0ge307XG5jbGFzcyBCb3VuZHMge1xuICBjb25zdHJ1Y3RvcihkaWFnT2JqKSB7XG4gICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmRhdGEuc3RhcnR4ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS5zdG9weCA9IHZvaWQgMDtcbiAgICB0aGlzLmRhdGEuc3RhcnR5ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS5zdG9weSA9IHZvaWQgMDtcbiAgICB0aGlzLmRhdGEud2lkdGhMaW1pdCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHREYXRhID0ge307XG4gICAgdGhpcy5uZXh0RGF0YS5zdGFydHggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0RGF0YS5zdG9weCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHREYXRhLnN0YXJ0eSA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHREYXRhLnN0b3B5ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEuY250ID0gMDtcbiAgICBzZXRDb25mKGRpYWdPYmouZGIuZ2V0Q29uZmlnKCkpO1xuICB9XG4gIHNldERhdGEoc3RhcnR4LCBzdG9weCwgc3RhcnR5LCBzdG9weSkge1xuICAgIHRoaXMubmV4dERhdGEuc3RhcnR4ID0gdGhpcy5kYXRhLnN0YXJ0eCA9IHN0YXJ0eDtcbiAgICB0aGlzLm5leHREYXRhLnN0b3B4ID0gdGhpcy5kYXRhLnN0b3B4ID0gc3RvcHg7XG4gICAgdGhpcy5uZXh0RGF0YS5zdGFydHkgPSB0aGlzLmRhdGEuc3RhcnR5ID0gc3RhcnR5O1xuICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSB0aGlzLmRhdGEuc3RvcHkgPSBzdG9weTtcbiAgfVxuICB1cGRhdGVWYWwob2JqLCBrZXksIHZhbCwgZnVuKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIG9ialtrZXldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IGZ1bih2YWwsIG9ialtrZXldKTtcbiAgICB9XG4gIH1cbiAgaW5zZXJ0KGM0U2hhcGUpIHtcbiAgICB0aGlzLm5leHREYXRhLmNudCA9IHRoaXMubmV4dERhdGEuY250ICsgMTtcbiAgICBsZXQgX3N0YXJ0eCA9IHRoaXMubmV4dERhdGEuc3RhcnR4ID09PSB0aGlzLm5leHREYXRhLnN0b3B4ID8gdGhpcy5uZXh0RGF0YS5zdG9weCArIGM0U2hhcGUubWFyZ2luIDogdGhpcy5uZXh0RGF0YS5zdG9weCArIGM0U2hhcGUubWFyZ2luICogMjtcbiAgICBsZXQgX3N0b3B4ID0gX3N0YXJ0eCArIGM0U2hhcGUud2lkdGg7XG4gICAgbGV0IF9zdGFydHkgPSB0aGlzLm5leHREYXRhLnN0YXJ0eSArIGM0U2hhcGUubWFyZ2luICogMjtcbiAgICBsZXQgX3N0b3B5ID0gX3N0YXJ0eSArIGM0U2hhcGUuaGVpZ2h0O1xuICAgIGlmIChfc3RhcnR4ID49IHRoaXMuZGF0YS53aWR0aExpbWl0IHx8IF9zdG9weCA+PSB0aGlzLmRhdGEud2lkdGhMaW1pdCB8fCB0aGlzLm5leHREYXRhLmNudCA+IGM0U2hhcGVJblJvdykge1xuICAgICAgX3N0YXJ0eCA9IHRoaXMubmV4dERhdGEuc3RhcnR4ICsgYzRTaGFwZS5tYXJnaW4gKyBjb25mLm5leHRMaW5lUGFkZGluZ1g7XG4gICAgICBfc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weSArIGM0U2hhcGUubWFyZ2luICogMjtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHggPSBfc3RvcHggPSBfc3RhcnR4ICsgYzRTaGFwZS53aWR0aDtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weTtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSBfc3RvcHkgPSBfc3RhcnR5ICsgYzRTaGFwZS5oZWlnaHQ7XG4gICAgICB0aGlzLm5leHREYXRhLmNudCA9IDE7XG4gICAgfVxuICAgIGM0U2hhcGUueCA9IF9zdGFydHg7XG4gICAgYzRTaGFwZS55ID0gX3N0YXJ0eTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RvcHhcIiwgX3N0b3B4LCBNYXRoLm1heCk7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICAgIHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0YXJ0eVwiLCBfc3RhcnR5LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICB9XG4gIGluaXQoZGlhZ09iaikge1xuICAgIHRoaXMubmFtZSA9IFwiXCI7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgd2lkdGhMaW1pdDogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLm5leHREYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgY250OiAwXG4gICAgfTtcbiAgICBzZXRDb25mKGRpYWdPYmouZGIuZ2V0Q29uZmlnKCkpO1xuICB9XG4gIGJ1bXBMYXN0TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuZGF0YS5zdG9weCArPSBtYXJnaW47XG4gICAgdGhpcy5kYXRhLnN0b3B5ICs9IG1hcmdpbjtcbiAgfVxufVxuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKGNuZikge1xuICBhc3NpZ25XaXRoRGVwdGgoY29uZiwgY25mKTtcbiAgaWYgKGNuZi5mb250RmFtaWx5KSB7XG4gICAgY29uZi5wZXJzb25Gb250RmFtaWx5ID0gY29uZi5zeXN0ZW1Gb250RmFtaWx5ID0gY29uZi5tZXNzYWdlRm9udEZhbWlseSA9IGNuZi5mb250RmFtaWx5O1xuICB9XG4gIGlmIChjbmYuZm9udFNpemUpIHtcbiAgICBjb25mLnBlcnNvbkZvbnRTaXplID0gY29uZi5zeXN0ZW1Gb250U2l6ZSA9IGNvbmYubWVzc2FnZUZvbnRTaXplID0gY25mLmZvbnRTaXplO1xuICB9XG4gIGlmIChjbmYuZm9udFdlaWdodCkge1xuICAgIGNvbmYucGVyc29uRm9udFdlaWdodCA9IGNvbmYuc3lzdGVtRm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQgPSBjbmYuZm9udFdlaWdodDtcbiAgfVxufTtcbmNvbnN0IGM0U2hhcGVGb250ID0gKGNuZiwgdHlwZUM0U2hhcGUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRGYW1pbHlcIl0sXG4gICAgZm9udFNpemU6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udFNpemVcIl0sXG4gICAgZm9udFdlaWdodDogY25mW3R5cGVDNFNoYXBlICsgXCJGb250V2VpZ2h0XCJdXG4gIH07XG59O1xuY29uc3QgYm91bmRhcnlGb250ID0gKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5ib3VuZGFyeUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5ib3VuZGFyeUZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IGNuZi5ib3VuZGFyeUZvbnRXZWlnaHRcbiAgfTtcbn07XG5jb25zdCBtZXNzYWdlRm9udCA9IChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubWVzc2FnZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5tZXNzYWdlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm1lc3NhZ2VGb250V2VpZ2h0XG4gIH07XG59O1xuZnVuY3Rpb24gY2FsY0M0U2hhcGVUZXh0V0godGV4dFR5cGUsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgdGV4dENvbmYsIHRleHRMaW1pdFdpZHRoKSB7XG4gIGlmICghYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGgpIHtcbiAgICBpZiAoYzRTaGFwZVRleHRXcmFwKSB7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0ID0gd3JhcExhYmVsKGM0U2hhcGVbdGV4dFR5cGVdLnRleHQsIHRleHRMaW1pdFdpZHRoLCB0ZXh0Q29uZik7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0TGluZXMgPSBjNFNoYXBlW3RleHRUeXBlXS50ZXh0LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCkubGVuZ3RoO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGggPSB0ZXh0TGltaXRXaWR0aDtcbiAgICAgIGM0U2hhcGVbdGV4dFR5cGVdLmhlaWdodCA9IGNhbGN1bGF0ZVRleHRIZWlnaHQoYzRTaGFwZVt0ZXh0VHlwZV0udGV4dCwgdGV4dENvbmYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbGluZXMgPSBjNFNoYXBlW3RleHRUeXBlXS50ZXh0LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCk7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0TGluZXMgPSBsaW5lcy5sZW5ndGg7XG4gICAgICBsZXQgbGluZUhlaWdodCA9IDA7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS5oZWlnaHQgPSAwO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGggPSAwO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGM0U2hhcGVbdGV4dFR5cGVdLndpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgY2FsY3VsYXRlVGV4dFdpZHRoKGxpbmUsIHRleHRDb25mKSxcbiAgICAgICAgICBjNFNoYXBlW3RleHRUeXBlXS53aWR0aFxuICAgICAgICApO1xuICAgICAgICBsaW5lSGVpZ2h0ID0gY2FsY3VsYXRlVGV4dEhlaWdodChsaW5lLCB0ZXh0Q29uZik7XG4gICAgICAgIGM0U2hhcGVbdGV4dFR5cGVdLmhlaWdodCA9IGM0U2hhcGVbdGV4dFR5cGVdLmhlaWdodCArIGxpbmVIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5jb25zdCBkcmF3Qm91bmRhcnkgPSBmdW5jdGlvbihkaWFncmFtMiwgYm91bmRhcnksIGJvdW5kcykge1xuICBib3VuZGFyeS54ID0gYm91bmRzLmRhdGEuc3RhcnR4O1xuICBib3VuZGFyeS55ID0gYm91bmRzLmRhdGEuc3RhcnR5O1xuICBib3VuZGFyeS53aWR0aCA9IGJvdW5kcy5kYXRhLnN0b3B4IC0gYm91bmRzLmRhdGEuc3RhcnR4O1xuICBib3VuZGFyeS5oZWlnaHQgPSBib3VuZHMuZGF0YS5zdG9weSAtIGJvdW5kcy5kYXRhLnN0YXJ0eTtcbiAgYm91bmRhcnkubGFiZWwueSA9IGNvbmYuYzRTaGFwZU1hcmdpbiAtIDM1O1xuICBsZXQgYm91bmRhcnlUZXh0V3JhcCA9IGJvdW5kYXJ5LndyYXAgJiYgY29uZi53cmFwO1xuICBsZXQgYm91bmRhcnlMYWJlbENvbmYgPSBib3VuZGFyeUZvbnQoY29uZik7XG4gIGJvdW5kYXJ5TGFiZWxDb25mLmZvbnRTaXplID0gYm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgKyAyO1xuICBib3VuZGFyeUxhYmVsQ29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gIGxldCB0ZXh0TGltaXRXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChib3VuZGFyeS5sYWJlbC50ZXh0LCBib3VuZGFyeUxhYmVsQ29uZik7XG4gIGNhbGNDNFNoYXBlVGV4dFdIKFwibGFiZWxcIiwgYm91bmRhcnksIGJvdW5kYXJ5VGV4dFdyYXAsIGJvdW5kYXJ5TGFiZWxDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gIHN2Z0RyYXcuZHJhd0JvdW5kYXJ5KGRpYWdyYW0yLCBib3VuZGFyeSwgY29uZik7XG59O1xuY29uc3QgZHJhd0M0U2hhcGVBcnJheSA9IGZ1bmN0aW9uKGN1cnJlbnRCb3VuZHMsIGRpYWdyYW0yLCBjNFNoYXBlQXJyYXkyLCBjNFNoYXBlS2V5cykge1xuICBsZXQgWSA9IDA7XG4gIGZvciAoY29uc3QgYzRTaGFwZUtleSBvZiBjNFNoYXBlS2V5cykge1xuICAgIFkgPSAwO1xuICAgIGNvbnN0IGM0U2hhcGUgPSBjNFNoYXBlQXJyYXkyW2M0U2hhcGVLZXldO1xuICAgIGxldCBjNFNoYXBlVHlwZUNvbmYgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgIGM0U2hhcGVUeXBlQ29uZi5mb250U2l6ZSA9IGM0U2hhcGVUeXBlQ29uZi5mb250U2l6ZSAtIDI7XG4gICAgYzRTaGFwZS50eXBlQzRTaGFwZS53aWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChcbiAgICAgIFwiPDxcIiArIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCArIFwiPj5cIixcbiAgICAgIGM0U2hhcGVUeXBlQ29uZlxuICAgICk7XG4gICAgYzRTaGFwZS50eXBlQzRTaGFwZS5oZWlnaHQgPSBjNFNoYXBlVHlwZUNvbmYuZm9udFNpemUgKyAyO1xuICAgIGM0U2hhcGUudHlwZUM0U2hhcGUuWSA9IGNvbmYuYzRTaGFwZVBhZGRpbmc7XG4gICAgWSA9IGM0U2hhcGUudHlwZUM0U2hhcGUuWSArIGM0U2hhcGUudHlwZUM0U2hhcGUuaGVpZ2h0IC0gNDtcbiAgICBjNFNoYXBlLmltYWdlID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCBZOiAwIH07XG4gICAgc3dpdGNoIChjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpIHtcbiAgICAgIGNhc2UgXCJwZXJzb25cIjpcbiAgICAgIGNhc2UgXCJleHRlcm5hbF9wZXJzb25cIjpcbiAgICAgICAgYzRTaGFwZS5pbWFnZS53aWR0aCA9IDQ4O1xuICAgICAgICBjNFNoYXBlLmltYWdlLmhlaWdodCA9IDQ4O1xuICAgICAgICBjNFNoYXBlLmltYWdlLlkgPSBZO1xuICAgICAgICBZID0gYzRTaGFwZS5pbWFnZS5ZICsgYzRTaGFwZS5pbWFnZS5oZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoYzRTaGFwZS5zcHJpdGUpIHtcbiAgICAgIGM0U2hhcGUuaW1hZ2Uud2lkdGggPSA0ODtcbiAgICAgIGM0U2hhcGUuaW1hZ2UuaGVpZ2h0ID0gNDg7XG4gICAgICBjNFNoYXBlLmltYWdlLlkgPSBZO1xuICAgICAgWSA9IGM0U2hhcGUuaW1hZ2UuWSArIGM0U2hhcGUuaW1hZ2UuaGVpZ2h0O1xuICAgIH1cbiAgICBsZXQgYzRTaGFwZVRleHRXcmFwID0gYzRTaGFwZS53cmFwICYmIGNvbmYud3JhcDtcbiAgICBsZXQgdGV4dExpbWl0V2lkdGggPSBjb25mLndpZHRoIC0gY29uZi5jNFNoYXBlUGFkZGluZyAqIDI7XG4gICAgbGV0IGM0U2hhcGVMYWJlbENvbmYgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgIGM0U2hhcGVMYWJlbENvbmYuZm9udFNpemUgPSBjNFNoYXBlTGFiZWxDb25mLmZvbnRTaXplICsgMjtcbiAgICBjNFNoYXBlTGFiZWxDb25mLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICBjYWxjQzRTaGFwZVRleHRXSChcImxhYmVsXCIsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgYzRTaGFwZUxhYmVsQ29uZiwgdGV4dExpbWl0V2lkdGgpO1xuICAgIGM0U2hhcGVbXCJsYWJlbFwiXS5ZID0gWSArIDg7XG4gICAgWSA9IGM0U2hhcGVbXCJsYWJlbFwiXS5ZICsgYzRTaGFwZVtcImxhYmVsXCJdLmhlaWdodDtcbiAgICBpZiAoYzRTaGFwZS50eXBlICYmIGM0U2hhcGUudHlwZS50ZXh0ICE9PSBcIlwiKSB7XG4gICAgICBjNFNoYXBlLnR5cGUudGV4dCA9IFwiW1wiICsgYzRTaGFwZS50eXBlLnRleHQgKyBcIl1cIjtcbiAgICAgIGxldCBjNFNoYXBlVHlwZUNvbmYyID0gYzRTaGFwZUZvbnQoY29uZiwgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwidHlwZVwiLCBjNFNoYXBlLCBjNFNoYXBlVGV4dFdyYXAsIGM0U2hhcGVUeXBlQ29uZjIsIHRleHRMaW1pdFdpZHRoKTtcbiAgICAgIGM0U2hhcGVbXCJ0eXBlXCJdLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlW1widHlwZVwiXS5ZICsgYzRTaGFwZVtcInR5cGVcIl0uaGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAoYzRTaGFwZS50ZWNobiAmJiBjNFNoYXBlLnRlY2huLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGM0U2hhcGUudGVjaG4udGV4dCA9IFwiW1wiICsgYzRTaGFwZS50ZWNobi50ZXh0ICsgXCJdXCI7XG4gICAgICBsZXQgYzRTaGFwZVRlY2huQ29uZiA9IGM0U2hhcGVGb250KGNvbmYsIGM0U2hhcGUudGVjaG4udGV4dCk7XG4gICAgICBjYWxjQzRTaGFwZVRleHRXSChcInRlY2huXCIsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgYzRTaGFwZVRlY2huQ29uZiwgdGV4dExpbWl0V2lkdGgpO1xuICAgICAgYzRTaGFwZVtcInRlY2huXCJdLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlW1widGVjaG5cIl0uWSArIGM0U2hhcGVbXCJ0ZWNoblwiXS5oZWlnaHQ7XG4gICAgfVxuICAgIGxldCByZWN0SGVpZ2h0ID0gWTtcbiAgICBsZXQgcmVjdFdpZHRoID0gYzRTaGFwZS5sYWJlbC53aWR0aDtcbiAgICBpZiAoYzRTaGFwZS5kZXNjciAmJiBjNFNoYXBlLmRlc2NyLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGxldCBjNFNoYXBlRGVzY3JDb25mID0gYzRTaGFwZUZvbnQoY29uZiwgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwiZGVzY3JcIiwgYzRTaGFwZSwgYzRTaGFwZVRleHRXcmFwLCBjNFNoYXBlRGVzY3JDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgICBjNFNoYXBlW1wiZGVzY3JcIl0uWSA9IFkgKyAyMDtcbiAgICAgIFkgPSBjNFNoYXBlW1wiZGVzY3JcIl0uWSArIGM0U2hhcGVbXCJkZXNjclwiXS5oZWlnaHQ7XG4gICAgICByZWN0V2lkdGggPSBNYXRoLm1heChjNFNoYXBlLmxhYmVsLndpZHRoLCBjNFNoYXBlLmRlc2NyLndpZHRoKTtcbiAgICAgIHJlY3RIZWlnaHQgPSBZIC0gYzRTaGFwZVtcImRlc2NyXCJdLnRleHRMaW5lcyAqIDU7XG4gICAgfVxuICAgIHJlY3RXaWR0aCA9IHJlY3RXaWR0aCArIGNvbmYuYzRTaGFwZVBhZGRpbmc7XG4gICAgYzRTaGFwZS53aWR0aCA9IE1hdGgubWF4KGM0U2hhcGUud2lkdGggfHwgY29uZi53aWR0aCwgcmVjdFdpZHRoLCBjb25mLndpZHRoKTtcbiAgICBjNFNoYXBlLmhlaWdodCA9IE1hdGgubWF4KGM0U2hhcGUuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCByZWN0SGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYzRTaGFwZS5tYXJnaW4gPSBjNFNoYXBlLm1hcmdpbiB8fCBjb25mLmM0U2hhcGVNYXJnaW47XG4gICAgY3VycmVudEJvdW5kcy5pbnNlcnQoYzRTaGFwZSk7XG4gICAgc3ZnRHJhdy5kcmF3QzRTaGFwZShkaWFncmFtMiwgYzRTaGFwZSwgY29uZik7XG4gIH1cbiAgY3VycmVudEJvdW5kcy5idW1wTGFzdE1hcmdpbihjb25mLmM0U2hhcGVNYXJnaW4pO1xufTtcbmNsYXNzIFBvaW50IHtcbiAgY29uc3RydWN0b3IoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxufVxubGV0IGdldEludGVyc2VjdFBvaW50ID0gZnVuY3Rpb24oZnJvbU5vZGUsIGVuZFBvaW50KSB7XG4gIGxldCB4MSA9IGZyb21Ob2RlLng7XG4gIGxldCB5MSA9IGZyb21Ob2RlLnk7XG4gIGxldCB4MiA9IGVuZFBvaW50Lng7XG4gIGxldCB5MiA9IGVuZFBvaW50Lnk7XG4gIGxldCBmcm9tQ2VudGVyWCA9IHgxICsgZnJvbU5vZGUud2lkdGggLyAyO1xuICBsZXQgZnJvbUNlbnRlclkgPSB5MSArIGZyb21Ob2RlLmhlaWdodCAvIDI7XG4gIGxldCBkeCA9IE1hdGguYWJzKHgxIC0geDIpO1xuICBsZXQgZHkgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgbGV0IHRhbkRZWCA9IGR5IC8gZHg7XG4gIGxldCBmcm9tRFlYID0gZnJvbU5vZGUuaGVpZ2h0IC8gZnJvbU5vZGUud2lkdGg7XG4gIGxldCByZXR1cm5Qb2ludCA9IG51bGw7XG4gIGlmICh5MSA9PSB5MiAmJiB4MSA8IHgyKSB7XG4gICAgcmV0dXJuUG9pbnQgPSBuZXcgUG9pbnQoeDEgKyBmcm9tTm9kZS53aWR0aCwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHkxID09IHkyICYmIHgxID4geDIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxIDwgeTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEgKyBmcm9tTm9kZS5oZWlnaHQpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxID4geTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEpO1xuICB9XG4gIGlmICh4MSA+IHgyICYmIHkxIDwgeTIpIHtcbiAgICBpZiAoZnJvbURZWCA+PSB0YW5EWVgpIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KHgxLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCAtIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA8IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCArIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSAtIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KGZyb21DZW50ZXJYICsgZnJvbU5vZGUuaGVpZ2h0IC8gMiAqIGR4IC8gZHksIHkxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPiB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkgLSBmcm9tTm9kZS53aWR0aCAvIDIgKiB0YW5EWVgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCAtIGZyb21Ob2RlLmhlaWdodCAvIDIgKiBkeCAvIGR5LCB5MSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5Qb2ludDtcbn07XG5sZXQgZ2V0SW50ZXJzZWN0UG9pbnRzID0gZnVuY3Rpb24oZnJvbU5vZGUsIGVuZE5vZGUpIHtcbiAgbGV0IGVuZEludGVyc2VjdFBvaW50ID0geyB4OiAwLCB5OiAwIH07XG4gIGVuZEludGVyc2VjdFBvaW50LnggPSBlbmROb2RlLnggKyBlbmROb2RlLndpZHRoIC8gMjtcbiAgZW5kSW50ZXJzZWN0UG9pbnQueSA9IGVuZE5vZGUueSArIGVuZE5vZGUuaGVpZ2h0IC8gMjtcbiAgbGV0IHN0YXJ0UG9pbnQgPSBnZXRJbnRlcnNlY3RQb2ludChmcm9tTm9kZSwgZW5kSW50ZXJzZWN0UG9pbnQpO1xuICBlbmRJbnRlcnNlY3RQb2ludC54ID0gZnJvbU5vZGUueCArIGZyb21Ob2RlLndpZHRoIC8gMjtcbiAgZW5kSW50ZXJzZWN0UG9pbnQueSA9IGZyb21Ob2RlLnkgKyBmcm9tTm9kZS5oZWlnaHQgLyAyO1xuICBsZXQgZW5kUG9pbnQgPSBnZXRJbnRlcnNlY3RQb2ludChlbmROb2RlLCBlbmRJbnRlcnNlY3RQb2ludCk7XG4gIHJldHVybiB7IHN0YXJ0UG9pbnQsIGVuZFBvaW50IH07XG59O1xuY29uc3QgZHJhd1JlbHMgPSBmdW5jdGlvbihkaWFncmFtMiwgcmVsczIsIGdldEM0U2hhcGVPYmosIGRpYWdPYmopIHtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGxldCByZWwgb2YgcmVsczIpIHtcbiAgICBpID0gaSArIDE7XG4gICAgbGV0IHJlbFRleHRXcmFwID0gcmVsLndyYXAgJiYgY29uZi53cmFwO1xuICAgIGxldCByZWxDb25mID0gbWVzc2FnZUZvbnQoY29uZik7XG4gICAgbGV0IGRpYWdyYW1UeXBlID0gZGlhZ09iai5kYi5nZXRDNFR5cGUoKTtcbiAgICBpZiAoZGlhZ3JhbVR5cGUgPT09IFwiQzREeW5hbWljXCIpIHtcbiAgICAgIHJlbC5sYWJlbC50ZXh0ID0gaSArIFwiOiBcIiArIHJlbC5sYWJlbC50ZXh0O1xuICAgIH1cbiAgICBsZXQgdGV4dExpbWl0V2lkdGggPSBjYWxjdWxhdGVUZXh0V2lkdGgocmVsLmxhYmVsLnRleHQsIHJlbENvbmYpO1xuICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwibGFiZWxcIiwgcmVsLCByZWxUZXh0V3JhcCwgcmVsQ29uZiwgdGV4dExpbWl0V2lkdGgpO1xuICAgIGlmIChyZWwudGVjaG4gJiYgcmVsLnRlY2huLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIHRleHRMaW1pdFdpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKHJlbC50ZWNobi50ZXh0LCByZWxDb25mKTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwidGVjaG5cIiwgcmVsLCByZWxUZXh0V3JhcCwgcmVsQ29uZiwgdGV4dExpbWl0V2lkdGgpO1xuICAgIH1cbiAgICBpZiAocmVsLmRlc2NyICYmIHJlbC5kZXNjci50ZXh0ICE9PSBcIlwiKSB7XG4gICAgICB0ZXh0TGltaXRXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChyZWwuZGVzY3IudGV4dCwgcmVsQ29uZik7XG4gICAgICBjYWxjQzRTaGFwZVRleHRXSChcImRlc2NyXCIsIHJlbCwgcmVsVGV4dFdyYXAsIHJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICB9XG4gICAgbGV0IGZyb21Ob2RlID0gZ2V0QzRTaGFwZU9iaihyZWwuZnJvbSk7XG4gICAgbGV0IGVuZE5vZGUgPSBnZXRDNFNoYXBlT2JqKHJlbC50byk7XG4gICAgbGV0IHBvaW50cyA9IGdldEludGVyc2VjdFBvaW50cyhmcm9tTm9kZSwgZW5kTm9kZSk7XG4gICAgcmVsLnN0YXJ0UG9pbnQgPSBwb2ludHMuc3RhcnRQb2ludDtcbiAgICByZWwuZW5kUG9pbnQgPSBwb2ludHMuZW5kUG9pbnQ7XG4gIH1cbiAgc3ZnRHJhdy5kcmF3UmVscyhkaWFncmFtMiwgcmVsczIsIGNvbmYpO1xufTtcbmZ1bmN0aW9uIGRyYXdJbnNpZGVCb3VuZGFyeShkaWFncmFtMiwgcGFyZW50Qm91bmRhcnlBbGlhcywgcGFyZW50Qm91bmRzLCBjdXJyZW50Qm91bmRhcmllcywgZGlhZ09iaikge1xuICBsZXQgY3VycmVudEJvdW5kcyA9IG5ldyBCb3VuZHMoZGlhZ09iaik7XG4gIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0ID0gcGFyZW50Qm91bmRzLmRhdGEud2lkdGhMaW1pdCAvIE1hdGgubWluKGM0Qm91bmRhcnlJblJvdywgY3VycmVudEJvdW5kYXJpZXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgW2ksIGN1cnJlbnRCb3VuZGFyeV0gb2YgY3VycmVudEJvdW5kYXJpZXMuZW50cmllcygpKSB7XG4gICAgbGV0IFkgPSAwO1xuICAgIGN1cnJlbnRCb3VuZGFyeS5pbWFnZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgWTogMCB9O1xuICAgIGlmIChjdXJyZW50Qm91bmRhcnkuc3ByaXRlKSB7XG4gICAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2Uud2lkdGggPSA0ODtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS5pbWFnZS5oZWlnaHQgPSA0ODtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS5pbWFnZS5ZID0gWTtcbiAgICAgIFkgPSBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuWSArIGN1cnJlbnRCb3VuZGFyeS5pbWFnZS5oZWlnaHQ7XG4gICAgfVxuICAgIGxldCBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCA9IGN1cnJlbnRCb3VuZGFyeS53cmFwICYmIGNvbmYud3JhcDtcbiAgICBsZXQgY3VycmVudEJvdW5kYXJ5TGFiZWxDb25mID0gYm91bmRhcnlGb250KGNvbmYpO1xuICAgIGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZi5mb250U2l6ZSA9IGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZi5mb250U2l6ZSArIDI7XG4gICAgY3VycmVudEJvdW5kYXJ5TGFiZWxDb25mLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICBjYWxjQzRTaGFwZVRleHRXSChcbiAgICAgIFwibGFiZWxcIixcbiAgICAgIGN1cnJlbnRCb3VuZGFyeSxcbiAgICAgIGN1cnJlbnRCb3VuZGFyeVRleHRXcmFwLFxuICAgICAgY3VycmVudEJvdW5kYXJ5TGFiZWxDb25mLFxuICAgICAgY3VycmVudEJvdW5kcy5kYXRhLndpZHRoTGltaXRcbiAgICApO1xuICAgIGN1cnJlbnRCb3VuZGFyeVtcImxhYmVsXCJdLlkgPSBZICsgODtcbiAgICBZID0gY3VycmVudEJvdW5kYXJ5W1wibGFiZWxcIl0uWSArIGN1cnJlbnRCb3VuZGFyeVtcImxhYmVsXCJdLmhlaWdodDtcbiAgICBpZiAoY3VycmVudEJvdW5kYXJ5LnR5cGUgJiYgY3VycmVudEJvdW5kYXJ5LnR5cGUudGV4dCAhPT0gXCJcIikge1xuICAgICAgY3VycmVudEJvdW5kYXJ5LnR5cGUudGV4dCA9IFwiW1wiICsgY3VycmVudEJvdW5kYXJ5LnR5cGUudGV4dCArIFwiXVwiO1xuICAgICAgbGV0IGN1cnJlbnRCb3VuZGFyeVR5cGVDb25mID0gYm91bmRhcnlGb250KGNvbmYpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBjdXJyZW50Qm91bmRhcnksXG4gICAgICAgIGN1cnJlbnRCb3VuZGFyeVRleHRXcmFwLFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlUeXBlQ29uZixcbiAgICAgICAgY3VycmVudEJvdW5kcy5kYXRhLndpZHRoTGltaXRcbiAgICAgICk7XG4gICAgICBjdXJyZW50Qm91bmRhcnlbXCJ0eXBlXCJdLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjdXJyZW50Qm91bmRhcnlbXCJ0eXBlXCJdLlkgKyBjdXJyZW50Qm91bmRhcnlbXCJ0eXBlXCJdLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRCb3VuZGFyeS5kZXNjciAmJiBjdXJyZW50Qm91bmRhcnkuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgICAgbGV0IGN1cnJlbnRCb3VuZGFyeURlc2NyQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeURlc2NyQ29uZi5mb250U2l6ZSA9IGN1cnJlbnRCb3VuZGFyeURlc2NyQ29uZi5mb250U2l6ZSAtIDI7XG4gICAgICBjYWxjQzRTaGFwZVRleHRXSChcbiAgICAgICAgXCJkZXNjclwiLFxuICAgICAgICBjdXJyZW50Qm91bmRhcnksXG4gICAgICAgIGN1cnJlbnRCb3VuZGFyeVRleHRXcmFwLFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYsXG4gICAgICAgIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0XG4gICAgICApO1xuICAgICAgY3VycmVudEJvdW5kYXJ5W1wiZGVzY3JcIl0uWSA9IFkgKyAyMDtcbiAgICAgIFkgPSBjdXJyZW50Qm91bmRhcnlbXCJkZXNjclwiXS5ZICsgY3VycmVudEJvdW5kYXJ5W1wiZGVzY3JcIl0uaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoaSA9PSAwIHx8IGkgJSBjNEJvdW5kYXJ5SW5Sb3cgPT09IDApIHtcbiAgICAgIGxldCBfeCA9IHBhcmVudEJvdW5kcy5kYXRhLnN0YXJ0eCArIGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gICAgICBsZXQgX3kgPSBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSArIGNvbmYuZGlhZ3JhbU1hcmdpblkgKyBZO1xuICAgICAgY3VycmVudEJvdW5kcy5zZXREYXRhKF94LCBfeCwgX3ksIF95KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IF94ID0gY3VycmVudEJvdW5kcy5kYXRhLnN0b3B4ICE9PSBjdXJyZW50Qm91bmRzLmRhdGEuc3RhcnR4ID8gY3VycmVudEJvdW5kcy5kYXRhLnN0b3B4ICsgY29uZi5kaWFncmFtTWFyZ2luWCA6IGN1cnJlbnRCb3VuZHMuZGF0YS5zdGFydHg7XG4gICAgICBsZXQgX3kgPSBjdXJyZW50Qm91bmRzLmRhdGEuc3RhcnR5O1xuICAgICAgY3VycmVudEJvdW5kcy5zZXREYXRhKF94LCBfeCwgX3ksIF95KTtcbiAgICB9XG4gICAgY3VycmVudEJvdW5kcy5uYW1lID0gY3VycmVudEJvdW5kYXJ5LmFsaWFzO1xuICAgIGxldCBjdXJyZW50UGVyc29uT3JTeXN0ZW1BcnJheSA9IGRpYWdPYmouZGIuZ2V0QzRTaGFwZUFycmF5KGN1cnJlbnRCb3VuZGFyeS5hbGlhcyk7XG4gICAgbGV0IGN1cnJlbnRQZXJzb25PclN5c3RlbUtleXMgPSBkaWFnT2JqLmRiLmdldEM0U2hhcGVLZXlzKGN1cnJlbnRCb3VuZGFyeS5hbGlhcyk7XG4gICAgaWYgKGN1cnJlbnRQZXJzb25PclN5c3RlbUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgZHJhd0M0U2hhcGVBcnJheShcbiAgICAgICAgY3VycmVudEJvdW5kcyxcbiAgICAgICAgZGlhZ3JhbTIsXG4gICAgICAgIGN1cnJlbnRQZXJzb25PclN5c3RlbUFycmF5LFxuICAgICAgICBjdXJyZW50UGVyc29uT3JTeXN0ZW1LZXlzXG4gICAgICApO1xuICAgIH1cbiAgICBwYXJlbnRCb3VuZGFyeUFsaWFzID0gY3VycmVudEJvdW5kYXJ5LmFsaWFzO1xuICAgIGxldCBuZXh0Q3VycmVudEJvdW5kYXJ5cyA9IGRpYWdPYmouZGIuZ2V0Qm91bmRhcnlzKHBhcmVudEJvdW5kYXJ5QWxpYXMpO1xuICAgIGlmIChuZXh0Q3VycmVudEJvdW5kYXJ5cy5sZW5ndGggPiAwKSB7XG4gICAgICBkcmF3SW5zaWRlQm91bmRhcnkoXG4gICAgICAgIGRpYWdyYW0yLFxuICAgICAgICBwYXJlbnRCb3VuZGFyeUFsaWFzLFxuICAgICAgICBjdXJyZW50Qm91bmRzLFxuICAgICAgICBuZXh0Q3VycmVudEJvdW5kYXJ5cyxcbiAgICAgICAgZGlhZ09ialxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRCb3VuZGFyeS5hbGlhcyAhPT0gXCJnbG9iYWxcIikge1xuICAgICAgZHJhd0JvdW5kYXJ5KGRpYWdyYW0yLCBjdXJyZW50Qm91bmRhcnksIGN1cnJlbnRCb3VuZHMpO1xuICAgIH1cbiAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSA9IE1hdGgubWF4KFxuICAgICAgY3VycmVudEJvdW5kcy5kYXRhLnN0b3B5ICsgY29uZi5jNFNoYXBlTWFyZ2luLFxuICAgICAgcGFyZW50Qm91bmRzLmRhdGEuc3RvcHlcbiAgICApO1xuICAgIHBhcmVudEJvdW5kcy5kYXRhLnN0b3B4ID0gTWF0aC5tYXgoXG4gICAgICBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggKyBjb25mLmM0U2hhcGVNYXJnaW4sXG4gICAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weFxuICAgICk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhYID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhYLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weCk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhZID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhZLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSk7XG4gIH1cbn1cbmNvbnN0IGRyYXcgPSBmdW5jdGlvbihfdGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIGNvbmYgPSBnZXRDb25maWcoKS5jNDtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGxldCBkYiA9IGRpYWdPYmouZGI7XG4gIGRpYWdPYmouZGIuc2V0V3JhcChjb25mLndyYXApO1xuICBjNFNoYXBlSW5Sb3cgPSBkYi5nZXRDNFNoYXBlSW5Sb3coKTtcbiAgYzRCb3VuZGFyeUluUm93ID0gZGIuZ2V0QzRCb3VuZGFyeUluUm93KCk7XG4gIGxvZy5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KGNvbmYsIG51bGwsIDIpfWApO1xuICBjb25zdCBkaWFncmFtMiA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCkgOiBzZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIHN2Z0RyYXcuaW5zZXJ0Q29tcHV0ZXJJY29uKGRpYWdyYW0yKTtcbiAgc3ZnRHJhdy5pbnNlcnREYXRhYmFzZUljb24oZGlhZ3JhbTIpO1xuICBzdmdEcmF3Lmluc2VydENsb2NrSWNvbihkaWFncmFtMik7XG4gIGxldCBzY3JlZW5Cb3VuZHMgPSBuZXcgQm91bmRzKGRpYWdPYmopO1xuICBzY3JlZW5Cb3VuZHMuc2V0RGF0YShcbiAgICBjb25mLmRpYWdyYW1NYXJnaW5YLFxuICAgIGNvbmYuZGlhZ3JhbU1hcmdpblgsXG4gICAgY29uZi5kaWFncmFtTWFyZ2luWSxcbiAgICBjb25mLmRpYWdyYW1NYXJnaW5ZXG4gICk7XG4gIHNjcmVlbkJvdW5kcy5kYXRhLndpZHRoTGltaXQgPSBzY3JlZW4uYXZhaWxXaWR0aDtcbiAgZ2xvYmFsQm91bmRhcnlNYXhYID0gY29uZi5kaWFncmFtTWFyZ2luWDtcbiAgZ2xvYmFsQm91bmRhcnlNYXhZID0gY29uZi5kaWFncmFtTWFyZ2luWTtcbiAgY29uc3QgdGl0bGUyID0gZGlhZ09iai5kYi5nZXRUaXRsZSgpO1xuICBsZXQgY3VycmVudEJvdW5kYXJpZXMgPSBkaWFnT2JqLmRiLmdldEJvdW5kYXJ5cyhcIlwiKTtcbiAgZHJhd0luc2lkZUJvdW5kYXJ5KGRpYWdyYW0yLCBcIlwiLCBzY3JlZW5Cb3VuZHMsIGN1cnJlbnRCb3VuZGFyaWVzLCBkaWFnT2JqKTtcbiAgc3ZnRHJhdy5pbnNlcnRBcnJvd0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3Lmluc2VydEFycm93RW5kKGRpYWdyYW0yKTtcbiAgc3ZnRHJhdy5pbnNlcnRBcnJvd0Nyb3NzSGVhZChkaWFncmFtMik7XG4gIHN2Z0RyYXcuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGRpYWdyYW0yKTtcbiAgZHJhd1JlbHMoZGlhZ3JhbTIsIGRpYWdPYmouZGIuZ2V0UmVscygpLCBkaWFnT2JqLmRiLmdldEM0U2hhcGUsIGRpYWdPYmopO1xuICBzY3JlZW5Cb3VuZHMuZGF0YS5zdG9weCA9IGdsb2JhbEJvdW5kYXJ5TWF4WDtcbiAgc2NyZWVuQm91bmRzLmRhdGEuc3RvcHkgPSBnbG9iYWxCb3VuZGFyeU1heFk7XG4gIGNvbnN0IGJveCA9IHNjcmVlbkJvdW5kcy5kYXRhO1xuICBsZXQgYm94SGVpZ2h0ID0gYm94LnN0b3B5IC0gYm94LnN0YXJ0eTtcbiAgbGV0IGhlaWdodCA9IGJveEhlaWdodCArIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5ZO1xuICBsZXQgYm94V2lkdGggPSBib3guc3RvcHggLSBib3guc3RhcnR4O1xuICBjb25zdCB3aWR0aCA9IGJveFdpZHRoICsgMiAqIGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gIGlmICh0aXRsZTIpIHtcbiAgICBkaWFncmFtMi5hcHBlbmQoXCJ0ZXh0XCIpLnRleHQodGl0bGUyKS5hdHRyKFwieFwiLCAoYm94LnN0b3B4IC0gYm94LnN0YXJ0eCkgLyAyIC0gNCAqIGNvbmYuZGlhZ3JhbU1hcmdpblgpLmF0dHIoXCJ5XCIsIGJveC5zdGFydHkgKyBjb25mLmRpYWdyYW1NYXJnaW5ZKTtcbiAgfVxuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgY29uc3QgZXh0cmFWZXJ0Rm9yVGl0bGUgPSB0aXRsZTIgPyA2MCA6IDA7XG4gIGRpYWdyYW0yLmF0dHIoXG4gICAgXCJ2aWV3Qm94XCIsXG4gICAgYm94LnN0YXJ0eCAtIGNvbmYuZGlhZ3JhbU1hcmdpblggKyBcIiAtXCIgKyAoY29uZi5kaWFncmFtTWFyZ2luWSArIGV4dHJhVmVydEZvclRpdGxlKSArIFwiIFwiICsgd2lkdGggKyBcIiBcIiArIChoZWlnaHQgKyBleHRyYVZlcnRGb3JUaXRsZSlcbiAgKTtcbiAgbG9nLmRlYnVnKGBtb2RlbHM6YCwgYm94KTtcbn07XG5jb25zdCBjNFJlbmRlcmVyID0ge1xuICBkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTogZHJhd0M0U2hhcGVBcnJheSxcbiAgZHJhd0JvdW5kYXJ5LFxuICBzZXRDb25mLFxuICBkcmF3XG59O1xuY29uc3QgZ2V0U3R5bGVzID0gKG9wdGlvbnMpID0+IGAucGVyc29uIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5wZXJzb25Cb3JkZXJ9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5wZXJzb25Ca2d9O1xuICB9XG5gO1xuY29uc3QgYzRTdHlsZXMgPSBnZXRTdHlsZXM7XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXI6IGM0UGFyc2VyLFxuICBkYjogYzREYixcbiAgcmVuZGVyZXI6IGM0UmVuZGVyZXIsXG4gIHN0eWxlczogYzRTdHlsZXMsXG4gIGluaXQ6IChjbmYpID0+IHtcbiAgICBjNFJlbmRlcmVyLnNldENvbmYoY25mLmM0KTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/c4Diagram-9cddb37f.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/classDiagram-bc733c3b.js": /*!*******************************************************************!*\ !*** ../../../node_modules/mermaid/dist/classDiagram-bc733c3b.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./styles-aefe6593.js */ \"../../../node_modules/mermaid/dist/styles-aefe6593.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./svgDraw-0fcc813d.js */ \"../../../node_modules/mermaid/dist/svgDraw-0fcc813d.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlet idCache = {};\nconst padding = 20;\nconst getGraphId = function(label) {\n const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label);\n if (foundEntry) {\n return foundEntry[0];\n }\n};\nconst insertMarkers = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"extensionStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"extensionEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"compositionStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"compositionEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"aggregationStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"aggregationEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst draw = function(text, id, _version, diagObj) {\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().class;\n idCache = {};\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Rendering diagram \" + text);\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const diagram2 = root.select(`[id='${id}']`);\n insertMarkers(diagram2);\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__.Graph({\n multigraph: true\n });\n g.setGraph({\n isMultiGraph: true\n });\n g.setDefaultEdgeLabel(function() {\n return {};\n });\n const classes = diagObj.db.getClasses();\n const keys = Object.keys(classes);\n for (const key of keys) {\n const classDef = classes[key];\n const node = _svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_8__.s.drawClass(diagram2, classDef, conf, diagObj);\n idCache[node.id] = node;\n g.setNode(node.id, node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Org height: \" + node.height);\n }\n const relations = diagObj.db.getRelations();\n relations.forEach(function(relation) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\n \"tjoho\" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)\n );\n g.setEdge(\n getGraphId(relation.id1),\n getGraphId(relation.id2),\n {\n relation\n },\n relation.title || \"DEFAULT\"\n );\n });\n const notes = diagObj.db.getNotes();\n notes.forEach(function(note) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(`Adding note: ${JSON.stringify(note)}`);\n const node = _svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_8__.s.drawNote(diagram2, note, conf, diagObj);\n idCache[node.id] = node;\n g.setNode(node.id, node);\n if (note.class && note.class in classes) {\n g.setEdge(\n note.id,\n getGraphId(note.class),\n {\n relation: {\n id1: note.id,\n id2: note.class,\n relation: {\n type1: \"none\",\n type2: \"none\",\n lineType: 10\n }\n }\n },\n \"DEFAULT\"\n );\n }\n });\n (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__.layout)(g);\n g.nodes().forEach(function(v) {\n if (v !== void 0 && g.node(v) !== void 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Node \" + v + \": \" + JSON.stringify(g.node(v)));\n root.select(\"#\" + (diagObj.db.lookUpDomId(v) || v)).attr(\n \"transform\",\n \"translate(\" + (g.node(v).x - g.node(v).width / 2) + \",\" + (g.node(v).y - g.node(v).height / 2) + \" )\"\n );\n }\n });\n g.edges().forEach(function(e) {\n if (e !== void 0 && g.edge(e) !== void 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(g.edge(e)));\n _svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_8__.s.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj);\n }\n });\n const svgBounds = diagram2.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.i)(diagram2, height, width, conf.useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(`viewBox ${vBox}`);\n diagram2.attr(\"viewBox\", vBox);\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_9__.p,\n db: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_9__.d,\n renderer,\n styles: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_9__.s,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_9__.d.clear();\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jbGFzc0RpYWdyYW0tYmM3MzNjM2IuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBeUU7QUFDN0M7QUFDNEI7QUFDTTtBQUMwQjtBQUNuQztBQUNsQztBQUNKO0FBQ2tCO0FBQ2Q7QUFDSDtBQUNjO0FBQ2Q7QUFDYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdURBQVM7QUFDeEI7QUFDQSxFQUFFLHdEQUFRO0FBQ1Ysd0JBQXdCLHVEQUFTO0FBQ2pDO0FBQ0E7QUFDQSxxQkFBcUIsMENBQU07QUFDM0I7QUFDQSw2Q0FBNkMsMENBQU0sbURBQW1ELDBDQUFNO0FBQzVHLHVDQUF1QyxHQUFHO0FBQzFDO0FBQ0EsZ0JBQWdCLG9FQUFjO0FBQzlCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2REFBaUI7QUFDbEM7QUFDQTtBQUNBLElBQUksd0RBQVE7QUFDWjtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFRO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSSx5REFBUyxpQkFBaUIscUJBQXFCO0FBQ25ELGlCQUFpQiw0REFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsc0VBQU07QUFDUjtBQUNBO0FBQ0EsTUFBTSx5REFBUztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLE1BQU0seURBQVM7QUFDZixNQUFNLDREQUFnQjtBQUN0QjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFnQjtBQUNsQixrQkFBa0IsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE9BQU87QUFDcEYsRUFBRSx5REFBUyxZQUFZLEtBQUs7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLElBQUk7QUFDSjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBUTtBQUNaO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NsYXNzRGlhZ3JhbS1iYzczM2MzYi5qcz9jOWMyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHAgYXMgcGFyc2VyLCBkIGFzIGRiLCBzIGFzIHN0eWxlcyB9IGZyb20gXCIuL3N0eWxlcy1hZWZlNjU5My5qc1wiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjIGFzIGdldENvbmZpZywgbCBhcyBsb2csIGkgYXMgY29uZmlndXJlU3ZnU2l6ZSB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbmltcG9ydCB7IHMgYXMgc3ZnRHJhdyB9IGZyb20gXCIuL3N2Z0RyYXctMGZjYzgxM2QuanNcIjtcbmltcG9ydCBcInRzLWRlZGVudFwiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbmxldCBpZENhY2hlID0ge307XG5jb25zdCBwYWRkaW5nID0gMjA7XG5jb25zdCBnZXRHcmFwaElkID0gZnVuY3Rpb24obGFiZWwpIHtcbiAgY29uc3QgZm91bmRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKGlkQ2FjaGUpLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsxXS5sYWJlbCA9PT0gbGFiZWwpO1xuICBpZiAoZm91bmRFbnRyeSkge1xuICAgIHJldHVybiBmb3VuZEVudHJ5WzBdO1xuICB9XG59O1xuY29uc3QgaW5zZXJ0TWFya2VycyA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJleHRlbnNpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJleHRlbnNpb25cIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsNyBMMTgsMTMgViAxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZXh0ZW5zaW9uRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBWIDEzIEwxOCw3IFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiY29tcG9zaXRpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJleHRlbnNpb25cIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiY29tcG9zaXRpb25FbmRcIikuYXR0cihcInJlZlhcIiwgMTkpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhZ2dyZWdhdGlvblN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImV4dGVuc2lvblwiKS5hdHRyKFwicmVmWFwiLCAwKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhZ2dyZWdhdGlvbkVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImRlcGVuZGVuY3lTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJleHRlbnNpb25cIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJkZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IGRyYXcgPSBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpLmNsYXNzO1xuICBpZENhY2hlID0ge307XG4gIGxvZy5pbmZvKFwiUmVuZGVyaW5nIGRpYWdyYW0gXCIgKyB0ZXh0KTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRpYWdyYW0yID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICBpbnNlcnRNYXJrZXJzKGRpYWdyYW0yKTtcbiAgY29uc3QgZyA9IG5ldyBncmFwaGxpYi5HcmFwaCh7XG4gICAgbXVsdGlncmFwaDogdHJ1ZVxuICB9KTtcbiAgZy5zZXRHcmFwaCh7XG4gICAgaXNNdWx0aUdyYXBoOiB0cnVlXG4gIH0pO1xuICBnLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2xhc3Nlcyk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBjbGFzc0RlZiA9IGNsYXNzZXNba2V5XTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhdy5kcmF3Q2xhc3MoZGlhZ3JhbTIsIGNsYXNzRGVmLCBjb25mLCBkaWFnT2JqKTtcbiAgICBpZENhY2hlW25vZGUuaWRdID0gbm9kZTtcbiAgICBnLnNldE5vZGUobm9kZS5pZCwgbm9kZSk7XG4gICAgbG9nLmluZm8oXCJPcmcgaGVpZ2h0OiBcIiArIG5vZGUuaGVpZ2h0KTtcbiAgfVxuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICByZWxhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihyZWxhdGlvbikge1xuICAgIGxvZy5pbmZvKFxuICAgICAgXCJ0am9ob1wiICsgZ2V0R3JhcGhJZChyZWxhdGlvbi5pZDEpICsgZ2V0R3JhcGhJZChyZWxhdGlvbi5pZDIpICsgSlNPTi5zdHJpbmdpZnkocmVsYXRpb24pXG4gICAgKTtcbiAgICBnLnNldEVkZ2UoXG4gICAgICBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMSksXG4gICAgICBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMiksXG4gICAgICB7XG4gICAgICAgIHJlbGF0aW9uXG4gICAgICB9LFxuICAgICAgcmVsYXRpb24udGl0bGUgfHwgXCJERUZBVUxUXCJcbiAgICApO1xuICB9KTtcbiAgY29uc3Qgbm90ZXMgPSBkaWFnT2JqLmRiLmdldE5vdGVzKCk7XG4gIG5vdGVzLmZvckVhY2goZnVuY3Rpb24obm90ZSkge1xuICAgIGxvZy5kZWJ1ZyhgQWRkaW5nIG5vdGU6ICR7SlNPTi5zdHJpbmdpZnkobm90ZSl9YCk7XG4gICAgY29uc3Qgbm9kZSA9IHN2Z0RyYXcuZHJhd05vdGUoZGlhZ3JhbTIsIG5vdGUsIGNvbmYsIGRpYWdPYmopO1xuICAgIGlkQ2FjaGVbbm9kZS5pZF0gPSBub2RlO1xuICAgIGcuc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICBpZiAobm90ZS5jbGFzcyAmJiBub3RlLmNsYXNzIGluIGNsYXNzZXMpIHtcbiAgICAgIGcuc2V0RWRnZShcbiAgICAgICAgbm90ZS5pZCxcbiAgICAgICAgZ2V0R3JhcGhJZChub3RlLmNsYXNzKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGF0aW9uOiB7XG4gICAgICAgICAgICBpZDE6IG5vdGUuaWQsXG4gICAgICAgICAgICBpZDI6IG5vdGUuY2xhc3MsXG4gICAgICAgICAgICByZWxhdGlvbjoge1xuICAgICAgICAgICAgICB0eXBlMTogXCJub25lXCIsXG4gICAgICAgICAgICAgIHR5cGUyOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgbGluZVR5cGU6IDEwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkRFRkFVTFRcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICBsYXlvdXQoZyk7XG4gIGcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGcubm9kZSh2KSAhPT0gdm9pZCAwKSB7XG4gICAgICBsb2cuZGVidWcoXCJOb2RlIFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGcubm9kZSh2KSkpO1xuICAgICAgcm9vdC5zZWxlY3QoXCIjXCIgKyAoZGlhZ09iai5kYi5sb29rVXBEb21JZCh2KSB8fCB2KSkuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoZy5ub2RlKHYpLnggLSBnLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGcubm9kZSh2KS55IC0gZy5ub2RlKHYpLmhlaWdodCAvIDIpICsgXCIgKVwiXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG4gIGcuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoZSAhPT0gdm9pZCAwICYmIGcuZWRnZShlKSAhPT0gdm9pZCAwKSB7XG4gICAgICBsb2cuZGVidWcoXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShnLmVkZ2UoZSkpKTtcbiAgICAgIHN2Z0RyYXcuZHJhd0VkZ2UoZGlhZ3JhbTIsIGcuZWRnZShlKSwgZy5lZGdlKGUpLnJlbGF0aW9uLCBjb25mLCBkaWFnT2JqKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdmdCb3VuZHMgPSBkaWFncmFtMi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IHN2Z0JvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBzdmdCb3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoZGlhZ3JhbTIsIGhlaWdodCwgd2lkdGgsIGNvbmYudXNlTWF4V2lkdGgpO1xuICBjb25zdCB2Qm94ID0gYCR7c3ZnQm91bmRzLnggLSBwYWRkaW5nfSAke3N2Z0JvdW5kcy55IC0gcGFkZGluZ30gJHt3aWR0aH0gJHtoZWlnaHR9YDtcbiAgbG9nLmRlYnVnKGB2aWV3Qm94ICR7dkJveH1gKTtcbiAgZGlhZ3JhbTIuYXR0cihcInZpZXdCb3hcIiwgdkJveCk7XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIGRyYXdcbn07XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzLFxuICBpbml0OiAoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuY2xhc3MpIHtcbiAgICAgIGNuZi5jbGFzcyA9IHt9O1xuICAgIH1cbiAgICBjbmYuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIGRiLmNsZWFyKCk7XG4gIH1cbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/classDiagram-bc733c3b.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/classDiagram-v2-8931bdaf.js": /*!**********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/classDiagram-v2-8931bdaf.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./styles-aefe6593.js */ \"../../../node_modules/mermaid/dist/styles-aefe6593.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _index_a92ac404_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./index-a92ac404.js */ \"../../../node_modules/mermaid/dist/index-a92ac404.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/json.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/json.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst sanitizeText = (txt) => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(txt, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)());\nlet conf = {\n dividerMargin: 10,\n padding: 5,\n textHeight: 10,\n curve: void 0\n};\nconst addNamespaces = function(namespaces, g, _id, diagObj) {\n const keys = Object.keys(namespaces);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"keys:\", keys);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(namespaces);\n keys.forEach(function(id) {\n var _a, _b;\n const vertex = namespaces[id];\n const shape = \"rect\";\n const node = {\n shape,\n id: vertex.id,\n domId: vertex.domId,\n labelText: sanitizeText(vertex.id),\n labelStyle: \"\",\n style: \"fill: none; stroke: black\",\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n addClasses(vertex.classes, g, _id, diagObj, vertex.id);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"setNode\", node);\n });\n};\nconst addClasses = function(classes, g, _id, diagObj, parent) {\n const keys = Object.keys(classes);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"keys:\", keys);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(classes);\n keys.forEach(function(id) {\n var _a, _b;\n const vertex = classes[id];\n let cssClassStr = \"\";\n if (vertex.cssClasses.length > 0) {\n cssClassStr = cssClassStr + \" \" + vertex.cssClasses.join(\" \");\n }\n const styles2 = { labelStyle: \"\", style: \"\" };\n const vertexText = vertex.label ?? vertex.id;\n const radius = 0;\n const shape = \"class_box\";\n const node = {\n labelStyle: styles2.labelStyle,\n shape,\n labelText: sanitizeText(vertexText),\n classData: vertex,\n rx: radius,\n ry: radius,\n class: cssClassStr,\n style: styles2.style,\n id: vertex.id,\n domId: vertex.domId,\n tooltip: diagObj.db.getTooltip(vertex.id, parent) || \"\",\n haveCallback: vertex.haveCallback,\n link: vertex.link,\n width: vertex.type === \"group\" ? 500 : void 0,\n type: vertex.type,\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n if (parent) {\n g.setParent(vertex.id, parent);\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"setNode\", node);\n });\n};\nconst addNotes = function(notes, g, startEdgeId, classes) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(notes);\n notes.forEach(function(note, i) {\n var _a, _b;\n const vertex = note;\n const cssNoteStr = \"\";\n const styles2 = { labelStyle: \"\", style: \"\" };\n const vertexText = vertex.text;\n const radius = 0;\n const shape = \"note\";\n const node = {\n labelStyle: styles2.labelStyle,\n shape,\n labelText: sanitizeText(vertexText),\n noteData: vertex,\n rx: radius,\n ry: radius,\n class: cssNoteStr,\n style: styles2.style,\n id: vertex.id,\n domId: vertex.id,\n tooltip: \"\",\n type: \"note\",\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"setNode\", node);\n if (!vertex.class || !(vertex.class in classes)) {\n return;\n }\n const edgeId = startEdgeId + i;\n const edgeData = {\n id: `edgeNote${edgeId}`,\n //Set relationship style and line type\n classes: \"relation\",\n pattern: \"dotted\",\n // Set link type for rendering\n arrowhead: \"none\",\n //Set edge extra labels\n startLabelRight: \"\",\n endLabelLeft: \"\",\n //Set relation arrow types\n arrowTypeStart: \"none\",\n arrowTypeEnd: \"none\",\n style: \"fill:none\",\n labelStyle: \"\",\n curve: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear)\n };\n g.setEdge(vertex.id, vertex.class, edgeData, edgeId);\n });\n};\nconst addRelations = function(relations, g) {\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart;\n let cnt = 0;\n relations.forEach(function(edge) {\n var _a;\n cnt++;\n const edgeData = {\n //Set relationship style and line type\n classes: \"relation\",\n pattern: edge.relation.lineType == 1 ? \"dashed\" : \"solid\",\n id: \"id\" + cnt,\n // Set link type for rendering\n arrowhead: edge.type === \"arrow_open\" ? \"none\" : \"normal\",\n //Set edge extra labels\n startLabelRight: edge.relationTitle1 === \"none\" ? \"\" : edge.relationTitle1,\n endLabelLeft: edge.relationTitle2 === \"none\" ? \"\" : edge.relationTitle2,\n //Set relation arrow types\n arrowTypeStart: getArrowMarker(edge.relation.type1),\n arrowTypeEnd: getArrowMarker(edge.relation.type2),\n style: \"fill:none\",\n labelStyle: \"\",\n curve: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.o)(conf2 == null ? void 0 : conf2.curve, d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear)\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(edgeData, edge);\n if (edge.style !== void 0) {\n const styles2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.k)(edge.style);\n edgeData.style = styles2.style;\n edgeData.labelStyle = styles2.labelStyle;\n }\n edge.text = edge.title;\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n if (((_a = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart) == null ? void 0 : _a.htmlLabels) ?? (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().htmlLabels) {\n edgeData.labelType = \"html\";\n edgeData.label = '' + edge.text + \"\";\n } else {\n edgeData.labelType = \"text\";\n edgeData.label = edge.text.replace(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.lineBreakRegex, \"\\n\");\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n }\n }\n g.setEdge(edge.id1, edge.id2, edgeData, cnt);\n });\n};\nconst setConf = function(cnf) {\n conf = {\n ...conf,\n ...cnf\n };\n};\nconst draw = async function(text, id, _version, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"Drawing class - \", id);\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().flowchart ?? (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().class;\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().securityLevel;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"config:\", conf2);\n const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50;\n const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50;\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: diagObj.db.getDirection(),\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const namespaces = diagObj.db.getNamespaces();\n const classes = diagObj.db.getClasses();\n const relations = diagObj.db.getRelations();\n const notes = diagObj.db.getNotes();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(relations);\n addNamespaces(namespaces, g, id, diagObj);\n addClasses(classes, g, id, diagObj);\n addRelations(relations, g);\n addNotes(notes, g, relations.length + 1, classes);\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (\n // @ts-ignore Ignore type error for now\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body)\n ) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n await (0,_index_a92ac404_js__WEBPACK_IMPORTED_MODULE_9__.r)(\n element,\n g,\n [\"aggregation\", \"extension\", \"composition\", \"dependency\", \"lollipop\"],\n \"classDiagram\",\n id\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, \"classTitleText\", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle());\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.p)(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth);\n if (!(conf2 == null ? void 0 : conf2.htmlLabels)) {\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n};\nfunction getArrowMarker(type) {\n let marker;\n switch (type) {\n case 0:\n marker = \"aggregation\";\n break;\n case 1:\n marker = \"extension\";\n break;\n case 2:\n marker = \"composition\";\n break;\n case 3:\n marker = \"dependency\";\n break;\n case 4:\n marker = \"lollipop\";\n break;\n default:\n marker = \"none\";\n }\n return marker;\n}\nconst renderer = {\n setConf,\n draw\n};\nconst diagram = {\n parser: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_10__.p,\n db: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_10__.d,\n renderer,\n styles: _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_10__.s,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n _styles_aefe6593_js__WEBPACK_IMPORTED_MODULE_10__.d.clear();\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jbGFzc0RpYWdyYW0tdjItODkzMWJkYWYuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXlFO0FBQ2hDO0FBQ3FCO0FBQ3NHO0FBQ2xIO0FBQy9CO0FBQ0o7QUFDa0I7QUFDZDtBQUNIO0FBQ2M7QUFDZDtBQUNjO0FBQ1U7QUFDRTtBQUNiO0FBQ0s7QUFDQTtBQUNIO0FBQy9CLDhCQUE4QixnRUFBbUIsTUFBTSx1REFBUztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBUTtBQUNWLEVBQUUsd0RBQVE7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLHNCQUFzQix1REFBUyx1REFBdUQsdURBQVM7QUFDL0Y7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBUTtBQUNaLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1YsRUFBRSx3REFBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdURBQVMsdURBQXVELHVEQUFTO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFRO0FBQ1osR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1REFBUyx1REFBdUQsdURBQVM7QUFDL0Y7QUFDQTtBQUNBLElBQUksd0RBQVE7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE9BQU87QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVEQUFrQixhQUFhLDJDQUFXO0FBQ3ZEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGdCQUFnQix1REFBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdURBQWtCLHVDQUF1QywyQ0FBVztBQUNqRjtBQUNBLElBQUksd0RBQVE7QUFDWjtBQUNBLHNCQUFzQix1REFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsaUJBQWlCLHVEQUFTLG1EQUFtRCx1REFBUztBQUN0RjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsMkNBQTJDLGtFQUFxQjtBQUNoRTtBQUNBLDREQUE0RCxvQkFBb0I7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBUTtBQUNWLGdCQUFnQix1REFBUyxnQkFBZ0IsdURBQVM7QUFDbEQsd0JBQXdCLHVEQUFTO0FBQ2pDLEVBQUUsd0RBQVE7QUFDVjtBQUNBO0FBQ0EsZ0JBQWdCLG9FQUFjO0FBQzlCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVE7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMENBQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBTTtBQUNWLE1BQU0sMENBQU07QUFDWixrQ0FBa0MsR0FBRztBQUNyQztBQUNBLFFBQVEscURBQU07QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLCtEQUFpQjtBQUNuQixFQUFFLHVEQUFpQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsSUFBSTtBQUNKO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHlEQUFRO0FBQ1o7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2xhc3NEaWFncmFtLXYyLTg5MzFiZGFmLmpzP2NjNmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcCBhcyBwYXJzZXIsIGQgYXMgZGIsIHMgYXMgc3R5bGVzIH0gZnJvbSBcIi4vc3R5bGVzLWFlZmU2NTkzLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIGN1cnZlTGluZWFyIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBsIGFzIGxvZywgYyBhcyBnZXRDb25maWcsIHUgYXMgdXRpbHMsIHAgYXMgc2V0dXBHcmFwaFZpZXdib3gsIG8gYXMgaW50ZXJwb2xhdGVUb0N1cnZlLCBrIGFzIGdldFN0eWxlc0Zyb21BcnJheSwgZSBhcyBjb21tb24gfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyByIGFzIHJlbmRlciB9IGZyb20gXCIuL2luZGV4LWE5MmFjNDA0LmpzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgXCIuL2VkZ2VzLTQ5YWM0M2EyLmpzXCI7XG5pbXBvcnQgXCIuL2NyZWF0ZVRleHQtM2RmNjMwYjUuanNcIjtcbmltcG9ydCBcIm1kYXN0LXV0aWwtZnJvbS1tYXJrZG93blwiO1xuaW1wb3J0IFwiLi9zdmdEcmF3LTBmY2M4MTNkLmpzXCI7XG5jb25zdCBzYW5pdGl6ZVRleHQgPSAodHh0KSA9PiBjb21tb24uc2FuaXRpemVUZXh0KHR4dCwgZ2V0Q29uZmlnKCkpO1xubGV0IGNvbmYgPSB7XG4gIGRpdmlkZXJNYXJnaW46IDEwLFxuICBwYWRkaW5nOiA1LFxuICB0ZXh0SGVpZ2h0OiAxMCxcbiAgY3VydmU6IHZvaWQgMFxufTtcbmNvbnN0IGFkZE5hbWVzcGFjZXMgPSBmdW5jdGlvbihuYW1lc3BhY2VzLCBnLCBfaWQsIGRpYWdPYmopIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5hbWVzcGFjZXMpO1xuICBsb2cuaW5mbyhcImtleXM6XCIsIGtleXMpO1xuICBsb2cuaW5mbyhuYW1lc3BhY2VzKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB2ZXJ0ZXggPSBuYW1lc3BhY2VzW2lkXTtcbiAgICBjb25zdCBzaGFwZSA9IFwicmVjdFwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBzaGFwZSxcbiAgICAgIGlkOiB2ZXJ0ZXguaWQsXG4gICAgICBkb21JZDogdmVydGV4LmRvbUlkLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4LmlkKSxcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBzdHlsZTogXCJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrXCIsXG4gICAgICAvLyBUT0RPIFYxMDogRmxvd2NoYXJ0ID8gS2VlcGluZyBmbG93Y2hhcnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICBwYWRkaW5nOiAoKF9hID0gZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFkZGluZykgPz8gKChfYiA9IGdldENvbmZpZygpLmNsYXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2IucGFkZGluZylcbiAgICB9O1xuICAgIGcuc2V0Tm9kZSh2ZXJ0ZXguaWQsIG5vZGUpO1xuICAgIGFkZENsYXNzZXModmVydGV4LmNsYXNzZXMsIGcsIF9pZCwgZGlhZ09iaiwgdmVydGV4LmlkKTtcbiAgICBsb2cuaW5mbyhcInNldE5vZGVcIiwgbm9kZSk7XG4gIH0pO1xufTtcbmNvbnN0IGFkZENsYXNzZXMgPSBmdW5jdGlvbihjbGFzc2VzLCBnLCBfaWQsIGRpYWdPYmosIHBhcmVudCkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2xhc3Nlcyk7XG4gIGxvZy5pbmZvKFwia2V5czpcIiwga2V5cyk7XG4gIGxvZy5pbmZvKGNsYXNzZXMpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHZlcnRleCA9IGNsYXNzZXNbaWRdO1xuICAgIGxldCBjc3NDbGFzc1N0ciA9IFwiXCI7XG4gICAgaWYgKHZlcnRleC5jc3NDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNzc0NsYXNzU3RyID0gY3NzQ2xhc3NTdHIgKyBcIiBcIiArIHZlcnRleC5jc3NDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZXMyID0geyBsYWJlbFN0eWxlOiBcIlwiLCBzdHlsZTogXCJcIiB9O1xuICAgIGNvbnN0IHZlcnRleFRleHQgPSB2ZXJ0ZXgubGFiZWwgPz8gdmVydGV4LmlkO1xuICAgIGNvbnN0IHJhZGl1cyA9IDA7XG4gICAgY29uc3Qgc2hhcGUgPSBcImNsYXNzX2JveFwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZXMyLmxhYmVsU3R5bGUsXG4gICAgICBzaGFwZSxcbiAgICAgIGxhYmVsVGV4dDogc2FuaXRpemVUZXh0KHZlcnRleFRleHQpLFxuICAgICAgY2xhc3NEYXRhOiB2ZXJ0ZXgsXG4gICAgICByeDogcmFkaXVzLFxuICAgICAgcnk6IHJhZGl1cyxcbiAgICAgIGNsYXNzOiBjc3NDbGFzc1N0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMyLnN0eWxlLFxuICAgICAgaWQ6IHZlcnRleC5pZCxcbiAgICAgIGRvbUlkOiB2ZXJ0ZXguZG9tSWQsXG4gICAgICB0b29sdGlwOiBkaWFnT2JqLmRiLmdldFRvb2x0aXAodmVydGV4LmlkLCBwYXJlbnQpIHx8IFwiXCIsXG4gICAgICBoYXZlQ2FsbGJhY2s6IHZlcnRleC5oYXZlQ2FsbGJhY2ssXG4gICAgICBsaW5rOiB2ZXJ0ZXgubGluayxcbiAgICAgIHdpZHRoOiB2ZXJ0ZXgudHlwZSA9PT0gXCJncm91cFwiID8gNTAwIDogdm9pZCAwLFxuICAgICAgdHlwZTogdmVydGV4LnR5cGUsXG4gICAgICAvLyBUT0RPIFYxMDogRmxvd2NoYXJ0ID8gS2VlcGluZyBmbG93Y2hhcnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICBwYWRkaW5nOiAoKF9hID0gZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFkZGluZykgPz8gKChfYiA9IGdldENvbmZpZygpLmNsYXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2IucGFkZGluZylcbiAgICB9O1xuICAgIGcuc2V0Tm9kZSh2ZXJ0ZXguaWQsIG5vZGUpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGcuc2V0UGFyZW50KHZlcnRleC5pZCwgcGFyZW50KTtcbiAgICB9XG4gICAgbG9nLmluZm8oXCJzZXROb2RlXCIsIG5vZGUpO1xuICB9KTtcbn07XG5jb25zdCBhZGROb3RlcyA9IGZ1bmN0aW9uKG5vdGVzLCBnLCBzdGFydEVkZ2VJZCwgY2xhc3Nlcykge1xuICBsb2cuaW5mbyhub3Rlcyk7XG4gIG5vdGVzLmZvckVhY2goZnVuY3Rpb24obm90ZSwgaSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgdmVydGV4ID0gbm90ZTtcbiAgICBjb25zdCBjc3NOb3RlU3RyID0gXCJcIjtcbiAgICBjb25zdCBzdHlsZXMyID0geyBsYWJlbFN0eWxlOiBcIlwiLCBzdHlsZTogXCJcIiB9O1xuICAgIGNvbnN0IHZlcnRleFRleHQgPSB2ZXJ0ZXgudGV4dDtcbiAgICBjb25zdCByYWRpdXMgPSAwO1xuICAgIGNvbnN0IHNoYXBlID0gXCJub3RlXCI7XG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgIGxhYmVsU3R5bGU6IHN0eWxlczIubGFiZWxTdHlsZSxcbiAgICAgIHNoYXBlLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4VGV4dCksXG4gICAgICBub3RlRGF0YTogdmVydGV4LFxuICAgICAgcng6IHJhZGl1cyxcbiAgICAgIHJ5OiByYWRpdXMsXG4gICAgICBjbGFzczogY3NzTm90ZVN0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMyLnN0eWxlLFxuICAgICAgaWQ6IHZlcnRleC5pZCxcbiAgICAgIGRvbUlkOiB2ZXJ0ZXguaWQsXG4gICAgICB0b29sdGlwOiBcIlwiLFxuICAgICAgdHlwZTogXCJub3RlXCIsXG4gICAgICAvLyBUT0RPIFYxMDogRmxvd2NoYXJ0ID8gS2VlcGluZyBmbG93Y2hhcnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICBwYWRkaW5nOiAoKF9hID0gZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFkZGluZykgPz8gKChfYiA9IGdldENvbmZpZygpLmNsYXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2IucGFkZGluZylcbiAgICB9O1xuICAgIGcuc2V0Tm9kZSh2ZXJ0ZXguaWQsIG5vZGUpO1xuICAgIGxvZy5pbmZvKFwic2V0Tm9kZVwiLCBub2RlKTtcbiAgICBpZiAoIXZlcnRleC5jbGFzcyB8fCAhKHZlcnRleC5jbGFzcyBpbiBjbGFzc2VzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlZGdlSWQgPSBzdGFydEVkZ2VJZCArIGk7XG4gICAgY29uc3QgZWRnZURhdGEgPSB7XG4gICAgICBpZDogYGVkZ2VOb3RlJHtlZGdlSWR9YCxcbiAgICAgIC8vU2V0IHJlbGF0aW9uc2hpcCBzdHlsZSBhbmQgbGluZSB0eXBlXG4gICAgICBjbGFzc2VzOiBcInJlbGF0aW9uXCIsXG4gICAgICBwYXR0ZXJuOiBcImRvdHRlZFwiLFxuICAgICAgLy8gU2V0IGxpbmsgdHlwZSBmb3IgcmVuZGVyaW5nXG4gICAgICBhcnJvd2hlYWQ6IFwibm9uZVwiLFxuICAgICAgLy9TZXQgZWRnZSBleHRyYSBsYWJlbHNcbiAgICAgIHN0YXJ0TGFiZWxSaWdodDogXCJcIixcbiAgICAgIGVuZExhYmVsTGVmdDogXCJcIixcbiAgICAgIC8vU2V0IHJlbGF0aW9uIGFycm93IHR5cGVzXG4gICAgICBhcnJvd1R5cGVTdGFydDogXCJub25lXCIsXG4gICAgICBhcnJvd1R5cGVFbmQ6IFwibm9uZVwiLFxuICAgICAgc3R5bGU6IFwiZmlsbDpub25lXCIsXG4gICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgY3VydmU6IGludGVycG9sYXRlVG9DdXJ2ZShjb25mLmN1cnZlLCBjdXJ2ZUxpbmVhcilcbiAgICB9O1xuICAgIGcuc2V0RWRnZSh2ZXJ0ZXguaWQsIHZlcnRleC5jbGFzcywgZWRnZURhdGEsIGVkZ2VJZCk7XG4gIH0pO1xufTtcbmNvbnN0IGFkZFJlbGF0aW9ucyA9IGZ1bmN0aW9uKHJlbGF0aW9ucywgZykge1xuICBjb25zdCBjb25mMiA9IGdldENvbmZpZygpLmZsb3djaGFydDtcbiAgbGV0IGNudCA9IDA7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICB2YXIgX2E7XG4gICAgY250Kys7XG4gICAgY29uc3QgZWRnZURhdGEgPSB7XG4gICAgICAvL1NldCByZWxhdGlvbnNoaXAgc3R5bGUgYW5kIGxpbmUgdHlwZVxuICAgICAgY2xhc3NlczogXCJyZWxhdGlvblwiLFxuICAgICAgcGF0dGVybjogZWRnZS5yZWxhdGlvbi5saW5lVHlwZSA9PSAxID8gXCJkYXNoZWRcIiA6IFwic29saWRcIixcbiAgICAgIGlkOiBcImlkXCIgKyBjbnQsXG4gICAgICAvLyBTZXQgbGluayB0eXBlIGZvciByZW5kZXJpbmdcbiAgICAgIGFycm93aGVhZDogZWRnZS50eXBlID09PSBcImFycm93X29wZW5cIiA/IFwibm9uZVwiIDogXCJub3JtYWxcIixcbiAgICAgIC8vU2V0IGVkZ2UgZXh0cmEgbGFiZWxzXG4gICAgICBzdGFydExhYmVsUmlnaHQ6IGVkZ2UucmVsYXRpb25UaXRsZTEgPT09IFwibm9uZVwiID8gXCJcIiA6IGVkZ2UucmVsYXRpb25UaXRsZTEsXG4gICAgICBlbmRMYWJlbExlZnQ6IGVkZ2UucmVsYXRpb25UaXRsZTIgPT09IFwibm9uZVwiID8gXCJcIiA6IGVkZ2UucmVsYXRpb25UaXRsZTIsXG4gICAgICAvL1NldCByZWxhdGlvbiBhcnJvdyB0eXBlc1xuICAgICAgYXJyb3dUeXBlU3RhcnQ6IGdldEFycm93TWFya2VyKGVkZ2UucmVsYXRpb24udHlwZTEpLFxuICAgICAgYXJyb3dUeXBlRW5kOiBnZXRBcnJvd01hcmtlcihlZGdlLnJlbGF0aW9uLnR5cGUyKSxcbiAgICAgIHN0eWxlOiBcImZpbGw6bm9uZVwiLFxuICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgIGN1cnZlOiBpbnRlcnBvbGF0ZVRvQ3VydmUoY29uZjIgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmYyLmN1cnZlLCBjdXJ2ZUxpbmVhcilcbiAgICB9O1xuICAgIGxvZy5pbmZvKGVkZ2VEYXRhLCBlZGdlKTtcbiAgICBpZiAoZWRnZS5zdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICBjb25zdCBzdHlsZXMyID0gZ2V0U3R5bGVzRnJvbUFycmF5KGVkZ2Uuc3R5bGUpO1xuICAgICAgZWRnZURhdGEuc3R5bGUgPSBzdHlsZXMyLnN0eWxlO1xuICAgICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IHN0eWxlczIubGFiZWxTdHlsZTtcbiAgICB9XG4gICAgZWRnZS50ZXh0ID0gZWRnZS50aXRsZTtcbiAgICBpZiAoZWRnZS50ZXh0ID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChlZGdlLnN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIGVkZ2VEYXRhLmxhYmVscG9zID0gXCJjXCI7XG4gICAgICBpZiAoKChfYSA9IGdldENvbmZpZygpLmZsb3djaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmh0bWxMYWJlbHMpID8/IGdldENvbmZpZygpLmh0bWxMYWJlbHMpIHtcbiAgICAgICAgZWRnZURhdGEubGFiZWxUeXBlID0gXCJodG1sXCI7XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsID0gJzxzcGFuIGNsYXNzPVwiZWRnZUxhYmVsXCI+JyArIGVkZ2UudGV4dCArIFwiPC9zcGFuPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZURhdGEubGFiZWxUeXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsID0gZWRnZS50ZXh0LnJlcGxhY2UoY29tbW9uLmxpbmVCcmVha1JlZ2V4LCBcIlxcblwiKTtcbiAgICAgICAgaWYgKGVkZ2Uuc3R5bGUgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGVkZ2VEYXRhLnN0eWxlID0gZWRnZURhdGEuc3R5bGUgfHwgXCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IGVkZ2VEYXRhLmxhYmVsU3R5bGUucmVwbGFjZShcImNvbG9yOlwiLCBcImZpbGw6XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBnLnNldEVkZ2UoZWRnZS5pZDEsIGVkZ2UuaWQyLCBlZGdlRGF0YSwgY250KTtcbiAgfSk7XG59O1xuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKGNuZikge1xuICBjb25mID0ge1xuICAgIC4uLmNvbmYsXG4gICAgLi4uY25mXG4gIH07XG59O1xuY29uc3QgZHJhdyA9IGFzeW5jIGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBsb2cuaW5mbyhcIkRyYXdpbmcgY2xhc3MgLSBcIiwgaWQpO1xuICBjb25zdCBjb25mMiA9IGdldENvbmZpZygpLmZsb3djaGFydCA/PyBnZXRDb25maWcoKS5jbGFzcztcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxvZy5pbmZvKFwiY29uZmlnOlwiLCBjb25mMik7XG4gIGNvbnN0IG5vZGVTcGFjaW5nID0gKGNvbmYyID09IG51bGwgPyB2b2lkIDAgOiBjb25mMi5ub2RlU3BhY2luZykgPz8gNTA7XG4gIGNvbnN0IHJhbmtTcGFjaW5nID0gKGNvbmYyID09IG51bGwgPyB2b2lkIDAgOiBjb25mMi5yYW5rU3BhY2luZykgPz8gNTA7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIuR3JhcGgoe1xuICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgY29tcG91bmQ6IHRydWVcbiAgfSkuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IGRpYWdPYmouZGIuZ2V0RGlyZWN0aW9uKCksXG4gICAgbm9kZXNlcDogbm9kZVNwYWNpbmcsXG4gICAgcmFua3NlcDogcmFua1NwYWNpbmcsXG4gICAgbWFyZ2lueDogOCxcbiAgICBtYXJnaW55OiA4XG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgY29uc3QgbmFtZXNwYWNlcyA9IGRpYWdPYmouZGIuZ2V0TmFtZXNwYWNlcygpO1xuICBjb25zdCBjbGFzc2VzID0gZGlhZ09iai5kYi5nZXRDbGFzc2VzKCk7XG4gIGNvbnN0IHJlbGF0aW9ucyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zKCk7XG4gIGNvbnN0IG5vdGVzID0gZGlhZ09iai5kYi5nZXROb3RlcygpO1xuICBsb2cuaW5mbyhyZWxhdGlvbnMpO1xuICBhZGROYW1lc3BhY2VzKG5hbWVzcGFjZXMsIGcsIGlkLCBkaWFnT2JqKTtcbiAgYWRkQ2xhc3NlcyhjbGFzc2VzLCBnLCBpZCwgZGlhZ09iaik7XG4gIGFkZFJlbGF0aW9ucyhyZWxhdGlvbnMsIGcpO1xuICBhZGROb3Rlcyhub3RlcywgZywgcmVsYXRpb25zLmxlbmd0aCArIDEsIGNsYXNzZXMpO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyAoXG4gICAgLy8gQHRzLWlnbm9yZSBJZ25vcmUgdHlwZSBlcnJvciBmb3Igbm93XG4gICAgc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpXG4gICkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3QgZWxlbWVudCA9IHJvb3Quc2VsZWN0KFwiI1wiICsgaWQgKyBcIiBnXCIpO1xuICBhd2FpdCByZW5kZXIoXG4gICAgZWxlbWVudCxcbiAgICBnLFxuICAgIFtcImFnZ3JlZ2F0aW9uXCIsIFwiZXh0ZW5zaW9uXCIsIFwiY29tcG9zaXRpb25cIiwgXCJkZXBlbmRlbmN5XCIsIFwibG9sbGlwb3BcIl0sXG4gICAgXCJjbGFzc0RpYWdyYW1cIixcbiAgICBpZFxuICApO1xuICB1dGlscy5pbnNlcnRUaXRsZShzdmcsIFwiY2xhc3NUaXRsZVRleHRcIiwgKGNvbmYyID09IG51bGwgPyB2b2lkIDAgOiBjb25mMi50aXRsZVRvcE1hcmdpbikgPz8gNSwgZGlhZ09iai5kYi5nZXREaWFncmFtVGl0bGUoKSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KGcsIHN2ZywgY29uZjIgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmYyLmRpYWdyYW1QYWRkaW5nLCBjb25mMiA9PSBudWxsID8gdm9pZCAwIDogY29uZjIudXNlTWF4V2lkdGgpO1xuICBpZiAoIShjb25mMiA9PSBudWxsID8gdm9pZCAwIDogY29uZjIuaHRtbExhYmVscykpIHtcbiAgICBjb25zdCBkb2MgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50IDogZG9jdW1lbnQ7XG4gICAgY29uc3QgbGFiZWxzID0gZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD1cIicgKyBpZCArICdcIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtcbiAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgY29uc3QgZGltID0gbGFiZWwuZ2V0QkJveCgpO1xuICAgICAgY29uc3QgcmVjdCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCAwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgZGltLndpZHRoKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGRpbS5oZWlnaHQpO1xuICAgICAgbGFiZWwuaW5zZXJ0QmVmb3JlKHJlY3QsIGxhYmVsLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIGdldEFycm93TWFya2VyKHR5cGUpIHtcbiAgbGV0IG1hcmtlcjtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAwOlxuICAgICAgbWFya2VyID0gXCJhZ2dyZWdhdGlvblwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgbWFya2VyID0gXCJleHRlbnNpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIG1hcmtlciA9IFwiY29tcG9zaXRpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIG1hcmtlciA9IFwiZGVwZW5kZW5jeVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgbWFya2VyID0gXCJsb2xsaXBvcFwiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG1hcmtlciA9IFwibm9uZVwiO1xuICB9XG4gIHJldHVybiBtYXJrZXI7XG59XG5jb25zdCByZW5kZXJlciA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcbmNvbnN0IGRpYWdyYW0gPSB7XG4gIHBhcnNlcixcbiAgZGIsXG4gIHJlbmRlcmVyLFxuICBzdHlsZXMsXG4gIGluaXQ6IChjbmYpID0+IHtcbiAgICBpZiAoIWNuZi5jbGFzcykge1xuICAgICAgY25mLmNsYXNzID0ge307XG4gICAgfVxuICAgIGNuZi5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlID0gY25mLmFycm93TWFya2VyQWJzb2x1dGU7XG4gICAgZGIuY2xlYXIoKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/classDiagram-v2-8931bdaf.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/createText-3df630b5.js": /*!*****************************************************************!*\ !*** ../../../node_modules/mermaid/dist/createText-3df630b5.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"c\": () => (/* binding */ createText)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var mdast_util_from_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mdast-util-from-markdown */ \"../../../node_modules/mdast-util-from-markdown/dev/lib/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n\n\n\nfunction preprocessMarkdown(markdown) {\n const withoutMultipleNewlines = markdown.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = (0,ts_dedent__WEBPACK_IMPORTED_MODULE_0__.dedent)(withoutMultipleNewlines);\n return withoutExtraSpaces;\n}\nfunction markdownToLines(markdown) {\n const preprocessedMarkdown = preprocessMarkdown(markdown);\n const { children } = (0,mdast_util_from_markdown__WEBPACK_IMPORTED_MODULE_1__.fromMarkdown)(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.value.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"emphasis\") {\n node.children.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n }\n }\n children.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.children.forEach((contentNode) => {\n processNode(contentNode);\n });\n }\n });\n return lines;\n}\nfunction markdownToHTML(markdown) {\n const { children } = (0,mdast_util_from_markdown__WEBPACK_IMPORTED_MODULE_1__.fromMarkdown)(markdown);\n function output(node) {\n if (node.type === \"text\") {\n return node.value.replace(/\\n/g, \"
\");\n } else if (node.type === \"strong\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"emphasis\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `

${node.children.map(output).join(\"\")}

`;\n }\n return `Unsupported markdown: ${node.type}`;\n }\n return children.map(output).join(\"\");\n}\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlSpan(element, node, width, classes, addBackground = false) {\n const fo = element.append(\"foreignObject\");\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n `\n \" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"max-width\", width + \"px\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n fo.style(\"width\", bbox.width);\n fo.style(\"height\", bbox.height);\n return fo.node();\n}\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\nfunction computeWidthOfText(parentNode, lineHeight, text) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, [{ content: text, type: \"normal\" }]);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n let bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n structuredText.forEach((line) => {\n let fullStr = line.map((data) => data.content).join(\" \");\n let tempStr = \"\";\n let linesUnderWidth = [];\n let prevIndex = 0;\n if (computeWidthOfText(labelGroup, lineHeight, fullStr) <= width) {\n linesUnderWidth.push(fullStr);\n } else {\n for (let i = 0; i <= fullStr.length; i++) {\n tempStr = fullStr.slice(prevIndex, i);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_2__.l.info(tempStr, prevIndex, i);\n if (computeWidthOfText(labelGroup, lineHeight, tempStr) > width) {\n const subStr = fullStr.slice(prevIndex, i);\n const lastSpaceIndex = subStr.lastIndexOf(\" \");\n if (lastSpaceIndex > -1) {\n i = prevIndex + lastSpaceIndex + 1;\n }\n linesUnderWidth.push(fullStr.slice(prevIndex, i).trim());\n prevIndex = i;\n tempStr = null;\n }\n }\n if (tempStr != null) {\n linesUnderWidth.push(tempStr);\n }\n }\n const preparedLines = linesUnderWidth.map((w) => ({ content: w, type: line.type }));\n for (const preparedLine of preparedLines) {\n let tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, [preparedLine]);\n lineIndex++;\n }\n });\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", -padding).attr(\"y\", -padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"em\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\nconst createText = (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width,\n addSvgBackground = false\n} = {}) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_2__.l.info(\"createText\", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground);\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text);\n const node = {\n isNode,\n label: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_2__.H)(htmlText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground);\n return vertexNode;\n } else {\n const structuredText = markdownToLines(text);\n const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground);\n return svgLabel;\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jcmVhdGVUZXh0LTNkZjYzMGI1LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBc0U7QUFDZDtBQUNyQjtBQUNuQztBQUNBLHVEQUF1RCxHQUFHO0FBQzFELDZCQUE2QixpREFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsV0FBVyxFQUFFLHNFQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxpQ0FBaUM7QUFDdkU7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxVQUFVLFdBQVcsRUFBRSxzRUFBWTtBQUNuQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sd0JBQXdCLG1DQUFtQztBQUMzRCxNQUFNO0FBQ04sb0JBQW9CLG1DQUFtQztBQUN2RCxNQUFNO0FBQ04sbUJBQW1CLG1DQUFtQztBQUN0RDtBQUNBLG9DQUFvQyxVQUFVO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixZQUFZLEVBQUUsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLCtCQUErQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLHNCQUFzQixxQkFBcUI7QUFDM0M7QUFDQSxRQUFRLHdEQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCw2QkFBNkI7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOLEVBQUUsd0RBQVE7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdURBQWM7QUFDM0I7QUFDQSw0QkFBNEIsb0JBQW9CO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY3JlYXRlVGV4dC0zZGY2MzBiNS5qcz85ZjY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGwgYXMgbG9nLCBIIGFzIGRlY29kZUVudGl0aWVzIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IHsgZnJvbU1hcmtkb3duIH0gZnJvbSBcIm1kYXN0LXV0aWwtZnJvbS1tYXJrZG93blwiO1xuaW1wb3J0IHsgZGVkZW50IH0gZnJvbSBcInRzLWRlZGVudFwiO1xuZnVuY3Rpb24gcHJlcHJvY2Vzc01hcmtkb3duKG1hcmtkb3duKSB7XG4gIGNvbnN0IHdpdGhvdXRNdWx0aXBsZU5ld2xpbmVzID0gbWFya2Rvd24ucmVwbGFjZSgvXFxuezIsfS9nLCBcIlxcblwiKTtcbiAgY29uc3Qgd2l0aG91dEV4dHJhU3BhY2VzID0gZGVkZW50KHdpdGhvdXRNdWx0aXBsZU5ld2xpbmVzKTtcbiAgcmV0dXJuIHdpdGhvdXRFeHRyYVNwYWNlcztcbn1cbmZ1bmN0aW9uIG1hcmtkb3duVG9MaW5lcyhtYXJrZG93bikge1xuICBjb25zdCBwcmVwcm9jZXNzZWRNYXJrZG93biA9IHByZXByb2Nlc3NNYXJrZG93bihtYXJrZG93bik7XG4gIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGZyb21NYXJrZG93bihwcmVwcm9jZXNzZWRNYXJrZG93bik7XG4gIGNvbnN0IGxpbmVzID0gW1tdXTtcbiAgbGV0IGN1cnJlbnRMaW5lID0gMDtcbiAgZnVuY3Rpb24gcHJvY2Vzc05vZGUobm9kZSwgcGFyZW50VHlwZSA9IFwibm9ybWFsXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgY29uc3QgdGV4dExpbmVzID0gbm9kZS52YWx1ZS5zcGxpdChcIlxcblwiKTtcbiAgICAgIHRleHRMaW5lcy5mb3JFYWNoKCh0ZXh0TGluZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgY3VycmVudExpbmUrKztcbiAgICAgICAgICBsaW5lcy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0TGluZS5zcGxpdChcIiBcIikuZm9yRWFjaCgod29yZCkgPT4ge1xuICAgICAgICAgIGlmICh3b3JkKSB7XG4gICAgICAgICAgICBsaW5lc1tjdXJyZW50TGluZV0ucHVzaCh7IGNvbnRlbnQ6IHdvcmQsIHR5cGU6IHBhcmVudFR5cGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInN0cm9uZ1wiIHx8IG5vZGUudHlwZSA9PT0gXCJlbXBoYXNpc1wiKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlLCBub2RlLnR5cGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNoaWxkcmVuLmZvckVhY2goKHRyZWVOb2RlKSA9PiB7XG4gICAgaWYgKHRyZWVOb2RlLnR5cGUgPT09IFwicGFyYWdyYXBoXCIpIHtcbiAgICAgIHRyZWVOb2RlLmNoaWxkcmVuLmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtkb3duVG9IVE1MKG1hcmtkb3duKSB7XG4gIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGZyb21NYXJrZG93bihtYXJrZG93bik7XG4gIGZ1bmN0aW9uIG91dHB1dChub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlLnJlcGxhY2UoL1xcbi9nLCBcIjxici8+XCIpO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInN0cm9uZ1wiKSB7XG4gICAgICByZXR1cm4gYDxzdHJvbmc+JHtub2RlLmNoaWxkcmVuLm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9zdHJvbmc+YDtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJlbXBoYXNpc1wiKSB7XG4gICAgICByZXR1cm4gYDxlbT4ke25vZGUuY2hpbGRyZW4ubWFwKG91dHB1dCkuam9pbihcIlwiKX08L2VtPmA7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwicGFyYWdyYXBoXCIpIHtcbiAgICAgIHJldHVybiBgPHA+JHtub2RlLmNoaWxkcmVuLm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9wPmA7XG4gICAgfVxuICAgIHJldHVybiBgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7bm9kZS50eXBlfWA7XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuLm1hcChvdXRwdXQpLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBhcHBseVN0eWxlKGRvbSwgc3R5bGVGbikge1xuICBpZiAoc3R5bGVGbikge1xuICAgIGRvbS5hdHRyKFwic3R5bGVcIiwgc3R5bGVGbik7XG4gIH1cbn1cbmZ1bmN0aW9uIGFkZEh0bWxTcGFuKGVsZW1lbnQsIG5vZGUsIHdpZHRoLCBjbGFzc2VzLCBhZGRCYWNrZ3JvdW5kID0gZmFsc2UpIHtcbiAgY29uc3QgZm8gPSBlbGVtZW50LmFwcGVuZChcImZvcmVpZ25PYmplY3RcIik7XG4gIGNvbnN0IGRpdiA9IGZvLmFwcGVuZChcInhodG1sOmRpdlwiKTtcbiAgY29uc3QgbGFiZWwgPSBub2RlLmxhYmVsO1xuICBjb25zdCBsYWJlbENsYXNzID0gbm9kZS5pc05vZGUgPyBcIm5vZGVMYWJlbFwiIDogXCJlZGdlTGFiZWxcIjtcbiAgZGl2Lmh0bWwoXG4gICAgYFxuICAgIDxzcGFuIGNsYXNzPVwiJHtsYWJlbENsYXNzfSAke2NsYXNzZXN9XCIgYCArIChub2RlLmxhYmVsU3R5bGUgPyAnc3R5bGU9XCInICsgbm9kZS5sYWJlbFN0eWxlICsgJ1wiJyA6IFwiXCIpICsgXCI+XCIgKyBsYWJlbCArIFwiPC9zcGFuPlwiXG4gICk7XG4gIGFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKTtcbiAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJub3dyYXBcIik7XG4gIGRpdi5zdHlsZShcIm1heC13aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gIGRpdi5hdHRyKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpO1xuICBpZiAoYWRkQmFja2dyb3VuZCkge1xuICAgIGRpdi5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbEJrZ1wiKTtcbiAgfVxuICBsZXQgYmJveCA9IGRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGlmIChiYm94LndpZHRoID09PSB3aWR0aCkge1xuICAgIGRpdi5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZVwiKTtcbiAgICBkaXYuc3R5bGUoXCJ3aGl0ZS1zcGFjZVwiLCBcImJyZWFrLXNwYWNlc1wiKTtcbiAgICBkaXYuc3R5bGUoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgYmJveCA9IGRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cbiAgZm8uc3R5bGUoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgZm8uc3R5bGUoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICByZXR1cm4gZm8ubm9kZSgpO1xufVxuZnVuY3Rpb24gY3JlYXRlVHNwYW4odGV4dEVsZW1lbnQsIGxpbmVJbmRleCwgbGluZUhlaWdodCkge1xuICByZXR1cm4gdGV4dEVsZW1lbnQuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcImNsYXNzXCIsIFwidGV4dC1vdXRlci10c3BhblwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBsaW5lSW5kZXggKiBsaW5lSGVpZ2h0IC0gMC4xICsgXCJlbVwiKS5hdHRyKFwiZHlcIiwgbGluZUhlaWdodCArIFwiZW1cIik7XG59XG5mdW5jdGlvbiBjb21wdXRlV2lkdGhPZlRleHQocGFyZW50Tm9kZSwgbGluZUhlaWdodCwgdGV4dCkge1xuICBjb25zdCB0ZXN0RWxlbWVudCA9IHBhcmVudE5vZGUuYXBwZW5kKFwidGV4dFwiKTtcbiAgY29uc3QgdGVzdFNwYW4gPSBjcmVhdGVUc3Bhbih0ZXN0RWxlbWVudCwgMSwgbGluZUhlaWdodCk7XG4gIHVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzKHRlc3RTcGFuLCBbeyBjb250ZW50OiB0ZXh0LCB0eXBlOiBcIm5vcm1hbFwiIH1dKTtcbiAgY29uc3QgdGV4dExlbmd0aCA9IHRlc3RTcGFuLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgdGVzdEVsZW1lbnQucmVtb3ZlKCk7XG4gIHJldHVybiB0ZXh0TGVuZ3RoO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVkVGV4dCh3aWR0aCwgZywgc3RydWN0dXJlZFRleHQsIGFkZEJhY2tncm91bmQgPSBmYWxzZSkge1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gMS4xO1xuICBjb25zdCBsYWJlbEdyb3VwID0gZy5hcHBlbmQoXCJnXCIpO1xuICBsZXQgYmtnID0gbGFiZWxHcm91cC5pbnNlcnQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImJhY2tncm91bmRcIik7XG4gIGNvbnN0IHRleHRFbGVtZW50ID0gbGFiZWxHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIFwiLTEwLjFcIik7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICBzdHJ1Y3R1cmVkVGV4dC5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgbGV0IGZ1bGxTdHIgPSBsaW5lLm1hcCgoZGF0YSkgPT4gZGF0YS5jb250ZW50KS5qb2luKFwiIFwiKTtcbiAgICBsZXQgdGVtcFN0ciA9IFwiXCI7XG4gICAgbGV0IGxpbmVzVW5kZXJXaWR0aCA9IFtdO1xuICAgIGxldCBwcmV2SW5kZXggPSAwO1xuICAgIGlmIChjb21wdXRlV2lkdGhPZlRleHQobGFiZWxHcm91cCwgbGluZUhlaWdodCwgZnVsbFN0cikgPD0gd2lkdGgpIHtcbiAgICAgIGxpbmVzVW5kZXJXaWR0aC5wdXNoKGZ1bGxTdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBmdWxsU3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRlbXBTdHIgPSBmdWxsU3RyLnNsaWNlKHByZXZJbmRleCwgaSk7XG4gICAgICAgIGxvZy5pbmZvKHRlbXBTdHIsIHByZXZJbmRleCwgaSk7XG4gICAgICAgIGlmIChjb21wdXRlV2lkdGhPZlRleHQobGFiZWxHcm91cCwgbGluZUhlaWdodCwgdGVtcFN0cikgPiB3aWR0aCkge1xuICAgICAgICAgIGNvbnN0IHN1YlN0ciA9IGZ1bGxTdHIuc2xpY2UocHJldkluZGV4LCBpKTtcbiAgICAgICAgICBjb25zdCBsYXN0U3BhY2VJbmRleCA9IHN1YlN0ci5sYXN0SW5kZXhPZihcIiBcIik7XG4gICAgICAgICAgaWYgKGxhc3RTcGFjZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGkgPSBwcmV2SW5kZXggKyBsYXN0U3BhY2VJbmRleCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVzVW5kZXJXaWR0aC5wdXNoKGZ1bGxTdHIuc2xpY2UocHJldkluZGV4LCBpKS50cmltKCkpO1xuICAgICAgICAgIHByZXZJbmRleCA9IGk7XG4gICAgICAgICAgdGVtcFN0ciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wU3RyICE9IG51bGwpIHtcbiAgICAgICAgbGluZXNVbmRlcldpZHRoLnB1c2godGVtcFN0cik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHByZXBhcmVkTGluZXMgPSBsaW5lc1VuZGVyV2lkdGgubWFwKCh3KSA9PiAoeyBjb250ZW50OiB3LCB0eXBlOiBsaW5lLnR5cGUgfSkpO1xuICAgIGZvciAoY29uc3QgcHJlcGFyZWRMaW5lIG9mIHByZXBhcmVkTGluZXMpIHtcbiAgICAgIGxldCB0c3BhbiA9IGNyZWF0ZVRzcGFuKHRleHRFbGVtZW50LCBsaW5lSW5kZXgsIGxpbmVIZWlnaHQpO1xuICAgICAgdXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXModHNwYW4sIFtwcmVwYXJlZExpbmVdKTtcbiAgICAgIGxpbmVJbmRleCsrO1xuICAgIH1cbiAgfSk7XG4gIGlmIChhZGRCYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgYmJveCA9IHRleHRFbGVtZW50Lm5vZGUoKS5nZXRCQm94KCk7XG4gICAgY29uc3QgcGFkZGluZyA9IDI7XG4gICAgYmtnLmF0dHIoXCJ4XCIsIC1wYWRkaW5nKS5hdHRyKFwieVwiLCAtcGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyAyICogcGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIDIgKiBwYWRkaW5nKTtcbiAgICByZXR1cm4gbGFiZWxHcm91cC5ub2RlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHRFbGVtZW50Lm5vZGUoKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXModHNwYW4sIHdyYXBwZWRMaW5lKSB7XG4gIHRzcGFuLnRleHQoXCJcIik7XG4gIHdyYXBwZWRMaW5lLmZvckVhY2goKHdvcmQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5uZXJUc3BhbiA9IHRzcGFuLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJmb250LXN0eWxlXCIsIHdvcmQudHlwZSA9PT0gXCJlbVwiID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRleHQtaW5uZXItdHNwYW5cIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIHdvcmQudHlwZSA9PT0gXCJzdHJvbmdcIiA/IFwiYm9sZFwiIDogXCJub3JtYWxcIik7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICBpbm5lclRzcGFuLnRleHQod29yZC5jb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXJUc3Bhbi50ZXh0KFwiIFwiICsgd29yZC5jb250ZW50KTtcbiAgICB9XG4gIH0pO1xufVxuY29uc3QgY3JlYXRlVGV4dCA9IChlbCwgdGV4dCA9IFwiXCIsIHtcbiAgc3R5bGUgPSBcIlwiLFxuICBpc1RpdGxlID0gZmFsc2UsXG4gIGNsYXNzZXMgPSBcIlwiLFxuICB1c2VIdG1sTGFiZWxzID0gdHJ1ZSxcbiAgaXNOb2RlID0gdHJ1ZSxcbiAgd2lkdGgsXG4gIGFkZFN2Z0JhY2tncm91bmQgPSBmYWxzZVxufSA9IHt9KSA9PiB7XG4gIGxvZy5pbmZvKFwiY3JlYXRlVGV4dFwiLCB0ZXh0LCBzdHlsZSwgaXNUaXRsZSwgY2xhc3NlcywgdXNlSHRtbExhYmVscywgaXNOb2RlLCBhZGRTdmdCYWNrZ3JvdW5kKTtcbiAgaWYgKHVzZUh0bWxMYWJlbHMpIHtcbiAgICBjb25zdCBodG1sVGV4dCA9IG1hcmtkb3duVG9IVE1MKHRleHQpO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBpc05vZGUsXG4gICAgICBsYWJlbDogZGVjb2RlRW50aXRpZXMoaHRtbFRleHQpLnJlcGxhY2UoXG4gICAgICAgIC9mYVtibHJzXT86ZmEtW1xcdy1dKy9nLFxuICAgICAgICAocykgPT4gYDxpIGNsYXNzPScke3MucmVwbGFjZShcIjpcIiwgXCIgXCIpfSc+PC9pPmBcbiAgICAgICksXG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZS5yZXBsYWNlKFwiZmlsbDpcIiwgXCJjb2xvcjpcIilcbiAgICB9O1xuICAgIGxldCB2ZXJ0ZXhOb2RlID0gYWRkSHRtbFNwYW4oZWwsIG5vZGUsIHdpZHRoLCBjbGFzc2VzLCBhZGRTdmdCYWNrZ3JvdW5kKTtcbiAgICByZXR1cm4gdmVydGV4Tm9kZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmVkVGV4dCA9IG1hcmtkb3duVG9MaW5lcyh0ZXh0KTtcbiAgICBjb25zdCBzdmdMYWJlbCA9IGNyZWF0ZUZvcm1hdHRlZFRleHQod2lkdGgsIGVsLCBzdHJ1Y3R1cmVkVGV4dCwgYWRkU3ZnQmFja2dyb3VuZCk7XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVGV4dCBhcyBjXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/createText-3df630b5.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/edges-49ac43a2.js": /*!************************************************************!*\ !*** ../../../node_modules/mermaid/dist/edges-49ac43a2.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"a\": () => (/* binding */ insertMarkers$1),\n/* harmony export */ \"b\": () => (/* binding */ clear$1),\n/* harmony export */ \"c\": () => (/* binding */ createLabel$1),\n/* harmony export */ \"d\": () => (/* binding */ clear),\n/* harmony export */ \"e\": () => (/* binding */ insertNode),\n/* harmony export */ \"f\": () => (/* binding */ insertEdgeLabel),\n/* harmony export */ \"g\": () => (/* binding */ insertEdge),\n/* harmony export */ \"h\": () => (/* binding */ positionEdgeLabel),\n/* harmony export */ \"i\": () => (/* binding */ intersectRect$1),\n/* harmony export */ \"l\": () => (/* binding */ labelHelper),\n/* harmony export */ \"p\": () => (/* binding */ positionNode),\n/* harmony export */ \"s\": () => (/* binding */ setNodeElem),\n/* harmony export */ \"u\": () => (/* binding */ updateNodeBounds)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createText-3df630b5.js */ \"../../../node_modules/mermaid/dist/createText-3df630b5.js\");\n/* harmony import */ var _svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./svgDraw-0fcc813d.js */ \"../../../node_modules/mermaid/dist/svgDraw-0fcc813d.js\");\n\n\n\n\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\nconst extension = (elem, type, id) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n};\nconst composition = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst aggregation = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst dependency = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst lollipop = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"white\").attr(\"cx\", 6).attr(\"cy\", 7).attr(\"r\", 6);\n};\nconst point = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 10).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 0).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst circle$1 = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst cross = (elem, type) => {\n elem.append(\"marker\").attr(\"id\", type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n};\nconst barb = (elem, type) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n};\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle: circle$1,\n cross,\n barb\n};\nconst insertMarkers$1 = insertMarkers;\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlLabel(node) {\n const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n '\" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.H)(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\nconst createLabel$1 = createLabel;\nconst labelHelper = async (parent, node, _classes, isNode) => {\n let classes;\n const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels);\n if (!_classes) {\n classes = \"node default\";\n } else {\n classes = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = (0,_createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.H)(labelText), (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)()), {\n useHtmlLabels,\n width: node.width || (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n });\n } else {\n text = textNode.appendChild(\n createLabel$1(\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.H)(labelText), (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)()),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise(\n (res) => img.addEventListener(\"load\", function() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n })\n )\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n};\nconst updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\nfunction intersectCircle(node, rx, point2) {\n return intersectEllipse(node, rx, rx, point2);\n}\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect2 = intersectLine(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect2) {\n intersections.push(intersect2);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\nconst intersectRect = (node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n};\nconst intersectRect$1 = intersectRect;\nconst intersect = {\n node: intersectNode,\n circle: intersectCircle,\n ellipse: intersectEllipse,\n polygon: intersectPolygon,\n rect: intersectRect$1\n};\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst note$1 = note;\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"Intersect called\");\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst choice = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect.circle(node, 14, point2);\n };\n return shapeSvg;\n};\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n};\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = bbox.width + node.padding;\n const totalHeight = bbox.height + node.padding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.trace(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes(\"t\")) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\nconst rectWithTitle = (parent, node) => {\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n createLabel$1(textRows.join ? textRows.join(\"
\") : textRows, node.labelStyle, true, true)\n );\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Circle main\");\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n};\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, void 0, true);\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n};\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst start = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst end = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst class_box = (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations && node.classData.annotations[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"«\" + node.classData.annotations[0] + \"»\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true));\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach((str) => {\n const parsedInfo = (0,_svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_3__.p)(str);\n let parsedText = parsedInfo.displayText;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach((str) => {\n const parsedInfo = (0,_svgDraw_0fcc813d_js__WEBPACK_IMPORTED_MODULE_3__.p)(str);\n let displayText = parsedInfo.displayText;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n });\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst shapes = {\n rhombus: question,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note$1,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nlet nodeElems = {};\nconst insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, dir);\n } else {\n el = await shapes[node.shape](elem, node, dir);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n};\nconst setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nconst clear$1 = () => {\n nodeElems = {};\n};\nconst positionNode = (node) => {\n const el = nodeElems[node.id];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n};\nlet edgeLabels = {};\nlet terminalLabels = {};\nconst clear = () => {\n edgeLabels = {};\n terminalLabels = {};\n};\nconst insertEdgeLabel = (elem, edge) => {\n const useHtmlLabels = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? (0,_createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n }) : createLabel$1(edge.label, edge.labelStyle);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"abc82\", edge, edge.labelType);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\nfunction setTerminalWidth(fo, value) {\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\nconst positionEdgeLabel = (edge, paths) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Moving label abc78 \", edge.id, edge.label, edgeLabels[edge.id]);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc78\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n }\n};\nconst outsideNode = (node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n};\nconst intersection = (node, outsidePoint, insidePoint) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n};\nconst cutPathAtIntersect = (_points, boundryNode) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 cutPathAtIntersect\", _points, boundryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"abc88 checking point\", point2, boundryNode);\n if (!outsideNode(boundryNode, point2) && !isInside) {\n const inter = intersection(boundryNode, lastPointOutside, point2);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 inside\", point2, lastPointOutside, inter);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 intersection\", inter);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 no intersect\", inter, points);\n }\n isInside = true;\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 outside\", point2, lastPointOutside);\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"abc88 returning points\", points);\n return points;\n};\nconst insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) {\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"abc88 InsertEdge: \", edge);\n if (head.intersect && tail.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\n \"Last point\",\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve;\n if (diagramType === \"graph\" || diagramType === \"flowchart\") {\n curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__.curveBasis;\n } else {\n curve = d3__WEBPACK_IMPORTED_MODULE_0__.curveBasis;\n }\n const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__.line)().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"arrowTypeStart\", edge.arrowTypeStart);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"arrowTypeEnd\", edge.arrowTypeEnd);\n switch (edge.arrowTypeStart) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-crossStart)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-pointStart)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-barbStart)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-circleStart)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-aggregationStart)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-extensionStart)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-compositionStart)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-dependencyStart)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-lollipopStart)\");\n break;\n }\n switch (edge.arrowTypeEnd) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-crossEnd)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-pointEnd)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-barbEnd)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-circleEnd)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-aggregationEnd)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-extensionEnd)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-compositionEnd)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-dependencyEnd)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-lollipopEnd)\");\n break;\n }\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9lZGdlcy00OWFjNDNhMi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFvSTtBQUN0RjtBQUNhO0FBQ0Y7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSwwQ0FBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx1REFBUSxDQUFDLHVEQUFTO0FBQ3hCO0FBQ0EsSUFBSSx3REFBUTtBQUNaO0FBQ0E7QUFDQSxhQUFhLHVEQUFjO0FBQzNCO0FBQ0EsNEJBQTRCLG9CQUFvQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsdURBQVEsQ0FBQyx1REFBUztBQUNoRTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2VkZ2VzLTQ5YWM0M2EyLmpzPzZjYWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbCBhcyBsb2csIG4gYXMgZXZhbHVhdGUsIGMgYXMgZ2V0Q29uZmlnLCBIIGFzIGRlY29kZUVudGl0aWVzLCBkIGFzIHNhbml0aXplVGV4dCwgdSBhcyB1dGlscyB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbmltcG9ydCB7IHNlbGVjdCwgY3VydmVCYXNpcywgbGluZSB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgYyBhcyBjcmVhdGVUZXh0IH0gZnJvbSBcIi4vY3JlYXRlVGV4dC0zZGY2MzBiNS5qc1wiO1xuaW1wb3J0IHsgcCBhcyBwYXJzZU1lbWJlciB9IGZyb20gXCIuL3N2Z0RyYXctMGZjYzgxM2QuanNcIjtcbmNvbnN0IGluc2VydE1hcmtlcnMgPSAoZWxlbSwgbWFya2VyQXJyYXksIHR5cGUsIGlkKSA9PiB7XG4gIG1hcmtlckFycmF5LmZvckVhY2goKG1hcmtlck5hbWUpID0+IHtcbiAgICBtYXJrZXJzW21hcmtlck5hbWVdKGVsZW0sIHR5cGUsIGlkKTtcbiAgfSk7XG59O1xuY29uc3QgZXh0ZW5zaW9uID0gKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGxvZy50cmFjZShcIk1ha2luZyBtYXJrZXJzIGZvciBcIiwgaWQpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCB0eXBlICsgXCItZXh0ZW5zaW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGV4dGVuc2lvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCB0eXBlICsgXCItZXh0ZW5zaW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBleHRlbnNpb24gXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xufTtcbmNvbnN0IGNvbXBvc2l0aW9uID0gKGVsZW0sIHR5cGUpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgdHlwZSArIFwiLWNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNvbXBvc2l0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1jb21wb3NpdGlvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY29tcG9zaXRpb24gXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IGFnZ3JlZ2F0aW9uID0gKGVsZW0sIHR5cGUpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGFnZ3JlZ2F0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1hZ2dyZWdhdGlvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgYWdncmVnYXRpb24gXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IGRlcGVuZGVuY3kgPSAoZWxlbSwgdHlwZSkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCB0eXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgdHlwZSArIFwiLWRlcGVuZGVuY3lFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGRlcGVuZGVuY3kgXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn07XG5jb25zdCBsb2xsaXBvcCA9IChlbGVtLCB0eXBlKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1sb2xsaXBvcFN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBsb2xsaXBvcCBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDYpLmF0dHIoXCJjeVwiLCA3KS5hdHRyKFwiclwiLCA2KTtcbn07XG5jb25zdCBwb2ludCA9IChlbGVtLCB0eXBlKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCB0eXBlICsgXCItcG9pbnRFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgMTApLmF0dHIoXCJyZWZZXCIsIDUpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxMikuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxMikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCAwIEwgMTAgNSBMIDAgMTAgelwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgdHlwZSArIFwiLXBvaW50U3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgelwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufTtcbmNvbnN0IGNpcmNsZSQxID0gKGVsZW0sIHR5cGUpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1jaXJjbGVFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgMTEpLmF0dHIoXCJyZWZZXCIsIDUpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxMSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxMSkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCBcIjVcIikuYXR0cihcImN5XCIsIFwiNVwiKS5hdHRyKFwiclwiLCBcIjVcIikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dNYXJrZXJQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDEpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1jaXJjbGVTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIFwiNVwiKS5hdHRyKFwiY3lcIiwgXCI1XCIpLmF0dHIoXCJyXCIsIFwiNVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufTtcbmNvbnN0IGNyb3NzID0gKGVsZW0sIHR5cGUpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1jcm9zc0VuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAxMikuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCB0eXBlICsgXCItY3Jvc3NTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59O1xuY29uc3QgYmFyYiA9IChlbGVtLCB0eXBlKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIHR5cGUgKyBcIi1iYXJiRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTQpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInN0cm9rZVdpZHRoXCIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IG1hcmtlcnMgPSB7XG4gIGV4dGVuc2lvbixcbiAgY29tcG9zaXRpb24sXG4gIGFnZ3JlZ2F0aW9uLFxuICBkZXBlbmRlbmN5LFxuICBsb2xsaXBvcCxcbiAgcG9pbnQsXG4gIGNpcmNsZTogY2lyY2xlJDEsXG4gIGNyb3NzLFxuICBiYXJiXG59O1xuY29uc3QgaW5zZXJ0TWFya2VycyQxID0gaW5zZXJ0TWFya2VycztcbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZG9tLCBzdHlsZUZuKSB7XG4gIGlmIChzdHlsZUZuKSB7XG4gICAgZG9tLmF0dHIoXCJzdHlsZVwiLCBzdHlsZUZuKTtcbiAgfVxufVxuZnVuY3Rpb24gYWRkSHRtbExhYmVsKG5vZGUpIHtcbiAgY29uc3QgZm8gPSBzZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJmb3JlaWduT2JqZWN0XCIpKTtcbiAgY29uc3QgZGl2ID0gZm8uYXBwZW5kKFwieGh0bWw6ZGl2XCIpO1xuICBjb25zdCBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIGNvbnN0IGxhYmVsQ2xhc3MgPSBub2RlLmlzTm9kZSA/IFwibm9kZUxhYmVsXCIgOiBcImVkZ2VMYWJlbFwiO1xuICBkaXYuaHRtbChcbiAgICAnPHNwYW4gY2xhc3M9XCInICsgbGFiZWxDbGFzcyArICdcIiAnICsgKG5vZGUubGFiZWxTdHlsZSA/ICdzdHlsZT1cIicgKyBub2RlLmxhYmVsU3R5bGUgKyAnXCInIDogXCJcIikgKyBcIj5cIiArIGxhYmVsICsgXCI8L3NwYW4+XCJcbiAgKTtcbiAgYXBwbHlTdHlsZShkaXYsIG5vZGUubGFiZWxTdHlsZSk7XG4gIGRpdi5zdHlsZShcImRpc3BsYXlcIiwgXCJpbmxpbmUtYmxvY2tcIik7XG4gIGRpdi5zdHlsZShcIndoaXRlLXNwYWNlXCIsIFwibm93cmFwXCIpO1xuICBkaXYuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKTtcbiAgcmV0dXJuIGZvLm5vZGUoKTtcbn1cbmNvbnN0IGNyZWF0ZUxhYmVsID0gKF92ZXJ0ZXhUZXh0LCBzdHlsZSwgaXNUaXRsZSwgaXNOb2RlKSA9PiB7XG4gIGxldCB2ZXJ0ZXhUZXh0ID0gX3ZlcnRleFRleHQgfHwgXCJcIjtcbiAgaWYgKHR5cGVvZiB2ZXJ0ZXhUZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgdmVydGV4VGV4dCA9IHZlcnRleFRleHRbMF07XG4gIH1cbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIHZlcnRleFRleHQgPSB2ZXJ0ZXhUZXh0LnJlcGxhY2UoL1xcXFxufFxcbi9nLCBcIjxiciAvPlwiKTtcbiAgICBsb2cuaW5mbyhcInZlcnRleFRleHRcIiArIHZlcnRleFRleHQpO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBpc05vZGUsXG4gICAgICBsYWJlbDogZGVjb2RlRW50aXRpZXModmVydGV4VGV4dCkucmVwbGFjZShcbiAgICAgICAgL2ZhW2JscnNdPzpmYS1bXFx3LV0rL2csXG4gICAgICAgIChzKSA9PiBgPGkgY2xhc3M9JyR7cy5yZXBsYWNlKFwiOlwiLCBcIiBcIil9Jz48L2k+YFxuICAgICAgKSxcbiAgICAgIGxhYmVsU3R5bGU6IHN0eWxlLnJlcGxhY2UoXCJmaWxsOlwiLCBcImNvbG9yOlwiKVxuICAgIH07XG4gICAgbGV0IHZlcnRleE5vZGUgPSBhZGRIdG1sTGFiZWwobm9kZSk7XG4gICAgcmV0dXJuIHZlcnRleE5vZGU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3ZnTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRleHRcIik7XG4gICAgc3ZnTGFiZWwuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUucmVwbGFjZShcImNvbG9yOlwiLCBcImZpbGw6XCIpKTtcbiAgICBsZXQgcm93cyA9IFtdO1xuICAgIGlmICh0eXBlb2YgdmVydGV4VGV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcm93cyA9IHZlcnRleFRleHQuc3BsaXQoL1xcXFxufFxcbnw8YnJcXHMqXFwvPz4vZ2kpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2ZXJ0ZXhUZXh0KSkge1xuICAgICAgcm93cyA9IHZlcnRleFRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd3MgPSBbXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgdHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRzcGFuXCIpO1xuICAgICAgdHNwYW4uc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwgXCJ4bWw6c3BhY2VcIiwgXCJwcmVzZXJ2ZVwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcImR5XCIsIFwiMWVtXCIpO1xuICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgICBpZiAoaXNUaXRsZSkge1xuICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInRpdGxlLXJvd1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicm93XCIpO1xuICAgICAgfVxuICAgICAgdHNwYW4udGV4dENvbnRlbnQgPSByb3cudHJpbSgpO1xuICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgIH1cbiAgICByZXR1cm4gc3ZnTGFiZWw7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVMYWJlbCQxID0gY3JlYXRlTGFiZWw7XG5jb25zdCBsYWJlbEhlbHBlciA9IGFzeW5jIChwYXJlbnQsIG5vZGUsIF9jbGFzc2VzLCBpc05vZGUpID0+IHtcbiAgbGV0IGNsYXNzZXM7XG4gIGNvbnN0IHVzZUh0bWxMYWJlbHMgPSBub2RlLnVzZUh0bWxMYWJlbHMgfHwgZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBpZiAoIV9jbGFzc2VzKSB7XG4gICAgY2xhc3NlcyA9IFwibm9kZSBkZWZhdWx0XCI7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NlcyA9IF9jbGFzc2VzO1xuICB9XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzZXMpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWxcIikuYXR0cihcInN0eWxlXCIsIG5vZGUubGFiZWxTdHlsZSk7XG4gIGxldCBsYWJlbFRleHQ7XG4gIGlmIChub2RlLmxhYmVsVGV4dCA9PT0gdm9pZCAwKSB7XG4gICAgbGFiZWxUZXh0ID0gXCJcIjtcbiAgfSBlbHNlIHtcbiAgICBsYWJlbFRleHQgPSB0eXBlb2Ygbm9kZS5sYWJlbFRleHQgPT09IFwic3RyaW5nXCIgPyBub2RlLmxhYmVsVGV4dCA6IG5vZGUubGFiZWxUZXh0WzBdO1xuICB9XG4gIGNvbnN0IHRleHROb2RlID0gbGFiZWwubm9kZSgpO1xuICBsZXQgdGV4dDtcbiAgaWYgKG5vZGUubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIpIHtcbiAgICB0ZXh0ID0gY3JlYXRlVGV4dChsYWJlbCwgc2FuaXRpemVUZXh0KGRlY29kZUVudGl0aWVzKGxhYmVsVGV4dCksIGdldENvbmZpZygpKSwge1xuICAgICAgdXNlSHRtbExhYmVscyxcbiAgICAgIHdpZHRoOiBub2RlLndpZHRoIHx8IGdldENvbmZpZygpLmZsb3djaGFydC53cmFwcGluZ1dpZHRoLFxuICAgICAgY2xhc3NlczogXCJtYXJrZG93bi1ub2RlLWxhYmVsXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gdGV4dE5vZGUuYXBwZW5kQ2hpbGQoXG4gICAgICBjcmVhdGVMYWJlbCQxKFxuICAgICAgICBzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWxUZXh0KSwgZ2V0Q29uZmlnKCkpLFxuICAgICAgICBub2RlLmxhYmVsU3R5bGUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBpc05vZGVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QodGV4dCk7XG4gICAgY29uc3QgaW1hZ2VzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW1nXCIpO1xuICAgIGlmIChpbWFnZXMpIHtcbiAgICAgIGNvbnN0IG5vSW1nVGV4dCA9IGxhYmVsVGV4dC5yZXBsYWNlKC88aW1nW14+XSo+L2csIFwiXCIpLnRyaW0oKSA9PT0gXCJcIjtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uaW1hZ2VzXS5tYXAoXG4gICAgICAgICAgKGltZykgPT4gbmV3IFByb21pc2UoXG4gICAgICAgICAgICAocmVzKSA9PiBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcbiAgICAgICAgICAgICAgaWYgKG5vSW1nVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlGb250U2l6ZSA9IGdldENvbmZpZygpLmZvbnRTaXplID8gZ2V0Q29uZmlnKCkuZm9udFNpemUgOiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250U2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmxhcmdpbmdGYWN0b3IgPSA1O1xuICAgICAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IHBhcnNlSW50KGJvZHlGb250U2l6ZSwgMTApICogZW5sYXJnaW5nRmFjdG9yICsgXCJweFwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcyhpbWcpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC1iYm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH1cbiAgaWYgKG5vZGUuY2VudGVyTGFiZWwpIHtcbiAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICBsYWJlbC5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICByZXR1cm4geyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcsIGxhYmVsIH07XG59O1xuY29uc3QgdXBkYXRlTm9kZUJvdW5kcyA9IChub2RlLCBlbGVtZW50KSA9PiB7XG4gIGNvbnN0IGJib3ggPSBlbGVtZW50Lm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUud2lkdGggPSBiYm94LndpZHRoO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0O1xufTtcbmZ1bmN0aW9uIGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cykge1xuICByZXR1cm4gcGFyZW50Lmluc2VydChcInBvbHlnb25cIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcbiAgICBcInBvaW50c1wiLFxuICAgIHBvaW50cy5tYXAoZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQueCArIFwiLFwiICsgZC55O1xuICAgIH0pLmpvaW4oXCIgXCIpXG4gICkuYXR0cihcImNsYXNzXCIsIFwibGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtdyAvIDIgKyBcIixcIiArIGggLyAyICsgXCIpXCIpO1xufVxuZnVuY3Rpb24gaW50ZXJzZWN0Tm9kZShub2RlLCBwb2ludDIpIHtcbiAgcmV0dXJuIG5vZGUuaW50ZXJzZWN0KHBvaW50Mik7XG59XG5mdW5jdGlvbiBpbnRlcnNlY3RFbGxpcHNlKG5vZGUsIHJ4LCByeSwgcG9pbnQyKSB7XG4gIHZhciBjeCA9IG5vZGUueDtcbiAgdmFyIGN5ID0gbm9kZS55O1xuICB2YXIgcHggPSBjeCAtIHBvaW50Mi54O1xuICB2YXIgcHkgPSBjeSAtIHBvaW50Mi55O1xuICB2YXIgZGV0ID0gTWF0aC5zcXJ0KHJ4ICogcnggKiBweSAqIHB5ICsgcnkgKiByeSAqIHB4ICogcHgpO1xuICB2YXIgZHggPSBNYXRoLmFicyhyeCAqIHJ5ICogcHggLyBkZXQpO1xuICBpZiAocG9pbnQyLnggPCBjeCkge1xuICAgIGR4ID0gLWR4O1xuICB9XG4gIHZhciBkeSA9IE1hdGguYWJzKHJ4ICogcnkgKiBweSAvIGRldCk7XG4gIGlmIChwb2ludDIueSA8IGN5KSB7XG4gICAgZHkgPSAtZHk7XG4gIH1cbiAgcmV0dXJuIHsgeDogY3ggKyBkeCwgeTogY3kgKyBkeSB9O1xufVxuZnVuY3Rpb24gaW50ZXJzZWN0Q2lyY2xlKG5vZGUsIHJ4LCBwb2ludDIpIHtcbiAgcmV0dXJuIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ4LCBwb2ludDIpO1xufVxuZnVuY3Rpb24gaW50ZXJzZWN0TGluZShwMSwgcDIsIHExLCBxMikge1xuICB2YXIgYTEsIGEyLCBiMSwgYjIsIGMxLCBjMjtcbiAgdmFyIHIxLCByMiwgcjMsIHI0O1xuICB2YXIgZGVub20sIG9mZnNldCwgbnVtO1xuICB2YXIgeCwgeTtcbiAgYTEgPSBwMi55IC0gcDEueTtcbiAgYjEgPSBwMS54IC0gcDIueDtcbiAgYzEgPSBwMi54ICogcDEueSAtIHAxLnggKiBwMi55O1xuICByMyA9IGExICogcTEueCArIGIxICogcTEueSArIGMxO1xuICByNCA9IGExICogcTIueCArIGIxICogcTIueSArIGMxO1xuICBpZiAocjMgIT09IDAgJiYgcjQgIT09IDAgJiYgc2FtZVNpZ24ocjMsIHI0KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhMiA9IHEyLnkgLSBxMS55O1xuICBiMiA9IHExLnggLSBxMi54O1xuICBjMiA9IHEyLnggKiBxMS55IC0gcTEueCAqIHEyLnk7XG4gIHIxID0gYTIgKiBwMS54ICsgYjIgKiBwMS55ICsgYzI7XG4gIHIyID0gYTIgKiBwMi54ICsgYjIgKiBwMi55ICsgYzI7XG4gIGlmIChyMSAhPT0gMCAmJiByMiAhPT0gMCAmJiBzYW1lU2lnbihyMSwgcjIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG4gIGlmIChkZW5vbSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBvZmZzZXQgPSBNYXRoLmFicyhkZW5vbSAvIDIpO1xuICBudW0gPSBiMSAqIGMyIC0gYjIgKiBjMTtcbiAgeCA9IG51bSA8IDAgPyAobnVtIC0gb2Zmc2V0KSAvIGRlbm9tIDogKG51bSArIG9mZnNldCkgLyBkZW5vbTtcbiAgbnVtID0gYTIgKiBjMSAtIGExICogYzI7XG4gIHkgPSBudW0gPCAwID8gKG51bSAtIG9mZnNldCkgLyBkZW5vbSA6IChudW0gKyBvZmZzZXQpIC8gZGVub207XG4gIHJldHVybiB7IHgsIHkgfTtcbn1cbmZ1bmN0aW9uIHNhbWVTaWduKHIxLCByMikge1xuICByZXR1cm4gcjEgKiByMiA+IDA7XG59XG5mdW5jdGlvbiBpbnRlcnNlY3RQb2x5Z29uKG5vZGUsIHBvbHlQb2ludHMsIHBvaW50Mikge1xuICB2YXIgeDEgPSBub2RlLng7XG4gIHZhciB5MSA9IG5vZGUueTtcbiAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcbiAgdmFyIG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBpZiAodHlwZW9mIHBvbHlQb2ludHMuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcG9seVBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZW50cnkueCk7XG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZW50cnkueSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvbHlQb2ludHMueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvbHlQb2ludHMueSk7XG4gIH1cbiAgdmFyIGxlZnQgPSB4MSAtIG5vZGUud2lkdGggLyAyIC0gbWluWDtcbiAgdmFyIHRvcCA9IHkxIC0gbm9kZS5oZWlnaHQgLyAyIC0gbWluWTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2x5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAxID0gcG9seVBvaW50c1tpXTtcbiAgICB2YXIgcDIgPSBwb2x5UG9pbnRzW2kgPCBwb2x5UG9pbnRzLmxlbmd0aCAtIDEgPyBpICsgMSA6IDBdO1xuICAgIHZhciBpbnRlcnNlY3QyID0gaW50ZXJzZWN0TGluZShcbiAgICAgIG5vZGUsXG4gICAgICBwb2ludDIsXG4gICAgICB7IHg6IGxlZnQgKyBwMS54LCB5OiB0b3AgKyBwMS55IH0sXG4gICAgICB7IHg6IGxlZnQgKyBwMi54LCB5OiB0b3AgKyBwMi55IH1cbiAgICApO1xuICAgIGlmIChpbnRlcnNlY3QyKSB7XG4gICAgICBpbnRlcnNlY3Rpb25zLnB1c2goaW50ZXJzZWN0Mik7XG4gICAgfVxuICB9XG4gIGlmICghaW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgaW50ZXJzZWN0aW9ucy5zb3J0KGZ1bmN0aW9uKHAsIHEpIHtcbiAgICAgIHZhciBwZHggPSBwLnggLSBwb2ludDIueDtcbiAgICAgIHZhciBwZHkgPSBwLnkgLSBwb2ludDIueTtcbiAgICAgIHZhciBkaXN0cCA9IE1hdGguc3FydChwZHggKiBwZHggKyBwZHkgKiBwZHkpO1xuICAgICAgdmFyIHFkeCA9IHEueCAtIHBvaW50Mi54O1xuICAgICAgdmFyIHFkeSA9IHEueSAtIHBvaW50Mi55O1xuICAgICAgdmFyIGRpc3RxID0gTWF0aC5zcXJ0KHFkeCAqIHFkeCArIHFkeSAqIHFkeSk7XG4gICAgICByZXR1cm4gZGlzdHAgPCBkaXN0cSA/IC0xIDogZGlzdHAgPT09IGRpc3RxID8gMCA6IDE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvbnNbMF07XG59XG5jb25zdCBpbnRlcnNlY3RSZWN0ID0gKG5vZGUsIHBvaW50MikgPT4ge1xuICB2YXIgeCA9IG5vZGUueDtcbiAgdmFyIHkgPSBub2RlLnk7XG4gIHZhciBkeCA9IHBvaW50Mi54IC0geDtcbiAgdmFyIGR5ID0gcG9pbnQyLnkgLSB5O1xuICB2YXIgdyA9IG5vZGUud2lkdGggLyAyO1xuICB2YXIgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgdmFyIHN4LCBzeTtcbiAgaWYgKE1hdGguYWJzKGR5KSAqIHcgPiBNYXRoLmFicyhkeCkgKiBoKSB7XG4gICAgaWYgKGR5IDwgMCkge1xuICAgICAgaCA9IC1oO1xuICAgIH1cbiAgICBzeCA9IGR5ID09PSAwID8gMCA6IGggKiBkeCAvIGR5O1xuICAgIHN5ID0gaDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZHggPCAwKSB7XG4gICAgICB3ID0gLXc7XG4gICAgfVxuICAgIHN4ID0gdztcbiAgICBzeSA9IGR4ID09PSAwID8gMCA6IHcgKiBkeSAvIGR4O1xuICB9XG4gIHJldHVybiB7IHg6IHggKyBzeCwgeTogeSArIHN5IH07XG59O1xuY29uc3QgaW50ZXJzZWN0UmVjdCQxID0gaW50ZXJzZWN0UmVjdDtcbmNvbnN0IGludGVyc2VjdCA9IHtcbiAgbm9kZTogaW50ZXJzZWN0Tm9kZSxcbiAgY2lyY2xlOiBpbnRlcnNlY3RDaXJjbGUsXG4gIGVsbGlwc2U6IGludGVyc2VjdEVsbGlwc2UsXG4gIHBvbHlnb246IGludGVyc2VjdFBvbHlnb24sXG4gIHJlY3Q6IGludGVyc2VjdFJlY3QkMVxufTtcbmNvbnN0IG5vdGUgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHVzZUh0bWxMYWJlbHMgPSBub2RlLnVzZUh0bWxMYWJlbHMgfHwgZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM7XG4gIGlmICghdXNlSHRtbExhYmVscykge1xuICAgIG5vZGUuY2VudGVyTGFiZWwgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBcIm5vZGUgXCIgKyBub2RlLmNsYXNzZXMsXG4gICAgdHJ1ZVxuICApO1xuICBsb2cuaW5mbyhcIkNsYXNzZXMgPSBcIiwgbm9kZS5jbGFzc2VzKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICByZWN0Mi5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBub3RlJDEgPSBub3RlO1xuY29uc3QgcXVlc3Rpb24gPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcyA9IHcgKyBoO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBzIC8gMiwgeTogMCB9LFxuICAgIHsgeDogcywgeTogLXMgLyAyIH0sXG4gICAgeyB4OiBzIC8gMiwgeTogLXMgfSxcbiAgICB7IHg6IDAsIHk6IC1zIC8gMiB9XG4gIF07XG4gIGxvZy5pbmZvKFwiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKVwiKTtcbiAgY29uc3QgcXVlc3Rpb25FbGVtID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCBzLCBzLCBwb2ludHMpO1xuICBxdWVzdGlvbkVsZW0uYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHF1ZXN0aW9uRWxlbSk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgbG9nLndhcm4oXCJJbnRlcnNlY3QgY2FsbGVkXCIpO1xuICAgIHJldHVybiBpbnRlcnNlY3QucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBjaG9pY2UgPSAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0XCIpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCBzID0gMjg7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IHMgLyAyIH0sXG4gICAgeyB4OiBzIC8gMiwgeTogMCB9LFxuICAgIHsgeDogMCwgeTogLXMgLyAyIH0sXG4gICAgeyB4OiAtcyAvIDIsIHk6IDAgfVxuICBdO1xuICBjb25zdCBjaG9pY2UyID0gc2hhcGVTdmcuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKTtcbiAgY2hvaWNlMi5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMjgpLmF0dHIoXCJoZWlnaHRcIiwgMjgpO1xuICBub2RlLndpZHRoID0gMjg7XG4gIG5vZGUuaGVpZ2h0ID0gMjg7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5jaXJjbGUobm9kZSwgMTQsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBoZXhhZ29uID0gYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIHZvaWQgMCwgdHJ1ZSk7XG4gIGNvbnN0IGYgPSA0O1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbSArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgaGV4ID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBoZXguYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGhleCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IHJlY3RfbGVmdF9pbnZfYXJyb3cgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLWggLyAyLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogLWggLyAyLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgbm9kZS53aWR0aCA9IHcgKyBoO1xuICBub2RlLmhlaWdodCA9IGg7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IGxlYW5fcmlnaHQgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLTIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IGxlYW5fbGVmdCA9IGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCB2b2lkIDAsIHRydWUpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAyICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIDIgKiBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IC1oIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59O1xuY29uc3QgdHJhcGV6b2lkID0gYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIHZvaWQgMCwgdHJ1ZSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IC0yICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3QucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBpbnZfdHJhcGV6b2lkID0gYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIHZvaWQgMCwgdHJ1ZSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3QucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCByZWN0X3JpZ2h0X2ludl9hcnJvdyA9IGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCB2b2lkIDAsIHRydWUpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgaCAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyArIGggLyAyLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59O1xuY29uc3QgY3lsaW5kZXIgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHJ4ID0gdyAvIDI7XG4gIGNvbnN0IHJ5ID0gcnggLyAoMi41ICsgdyAvIDUwKTtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgcnkgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHNoYXBlID0gXCJNIDAsXCIgKyByeSArIFwiIGEgXCIgKyByeCArIFwiLFwiICsgcnkgKyBcIiAwLDAsMCBcIiArIHcgKyBcIiAwIGEgXCIgKyByeCArIFwiLFwiICsgcnkgKyBcIiAwLDAsMCBcIiArIC13ICsgXCIgMCBsIDAsXCIgKyBoICsgXCIgYSBcIiArIHJ4ICsgXCIsXCIgKyByeSArIFwiIDAsMCwwIFwiICsgdyArIFwiIDAgbCAwLFwiICsgLWg7XG4gIGNvbnN0IGVsID0gc2hhcGVTdmcuYXR0cihcImxhYmVsLW9mZnNldC15XCIsIHJ5KS5pbnNlcnQoXCJwYXRoXCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwiZFwiLCBzaGFwZSkuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgLShoIC8gMiArIHJ5KSArIFwiKVwiKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgY29uc3QgcG9zID0gaW50ZXJzZWN0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgICBjb25zdCB4ID0gcG9zLnggLSBub2RlLng7XG4gICAgaWYgKHJ4ICE9IDAgJiYgKE1hdGguYWJzKHgpIDwgbm9kZS53aWR0aCAvIDIgfHwgTWF0aC5hYnMoeCkgPT0gbm9kZS53aWR0aCAvIDIgJiYgTWF0aC5hYnMocG9zLnkgLSBub2RlLnkpID4gbm9kZS5oZWlnaHQgLyAyIC0gcnkpKSB7XG4gICAgICBsZXQgeSA9IHJ5ICogcnkgKiAoMSAtIHggKiB4IC8gKHJ4ICogcngpKTtcbiAgICAgIGlmICh5ICE9IDApIHtcbiAgICAgICAgeSA9IE1hdGguc3FydCh5KTtcbiAgICAgIH1cbiAgICAgIHkgPSByeSAtIHk7XG4gICAgICBpZiAocG9pbnQyLnkgLSBub2RlLnkgPiAwKSB7XG4gICAgICAgIHkgPSAteTtcbiAgICAgIH1cbiAgICAgIHBvcy55ICs9IHk7XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCByZWN0ID0gYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCB0b3RhbFdpZHRoID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCB0b3RhbFdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIHRvdGFsSGVpZ2h0KTtcbiAgaWYgKG5vZGUucHJvcHMpIHtcbiAgICBjb25zdCBwcm9wS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMobm9kZS5wcm9wcykpO1xuICAgIGlmIChub2RlLnByb3BzLmJvcmRlcnMpIHtcbiAgICAgIGFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycyhyZWN0Miwgbm9kZS5wcm9wcy5ib3JkZXJzLCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCk7XG4gICAgICBwcm9wS2V5cy5kZWxldGUoXCJib3JkZXJzXCIpO1xuICAgIH1cbiAgICBwcm9wS2V5cy5mb3JFYWNoKChwcm9wS2V5KSA9PiB7XG4gICAgICBsb2cud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7cHJvcEtleX1gKTtcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IGxhYmVsUmVjdCA9IGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBcImxhYmVsXCIsIHRydWUpO1xuICBsb2cudHJhY2UoXCJDbGFzc2VzID0gXCIsIG5vZGUuY2xhc3Nlcyk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IDA7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gMDtcbiAgcmVjdDIuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICBzaGFwZVN2Zy5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbCBlZGdlTGFiZWxcIik7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5mdW5jdGlvbiBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIGJvcmRlcnMsIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0KSB7XG4gIGNvbnN0IHN0cm9rZURhc2hBcnJheSA9IFtdO1xuICBjb25zdCBhZGRCb3JkZXIgPSAobGVuZ3RoKSA9PiB7XG4gICAgc3Ryb2tlRGFzaEFycmF5LnB1c2gobGVuZ3RoLCAwKTtcbiAgfTtcbiAgY29uc3Qgc2tpcEJvcmRlciA9IChsZW5ndGgpID0+IHtcbiAgICBzdHJva2VEYXNoQXJyYXkucHVzaCgwLCBsZW5ndGgpO1xuICB9O1xuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcInRcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgdG9wIGJvcmRlclwiKTtcbiAgICBhZGRCb3JkZXIodG90YWxXaWR0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2tpcEJvcmRlcih0b3RhbFdpZHRoKTtcbiAgfVxuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcInJcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgcmlnaHQgYm9yZGVyXCIpO1xuICAgIGFkZEJvcmRlcih0b3RhbEhlaWdodCk7XG4gIH0gZWxzZSB7XG4gICAgc2tpcEJvcmRlcih0b3RhbEhlaWdodCk7XG4gIH1cbiAgaWYgKGJvcmRlcnMuaW5jbHVkZXMoXCJiXCIpKSB7XG4gICAgbG9nLmRlYnVnKFwiYWRkIGJvdHRvbSBib3JkZXJcIik7XG4gICAgYWRkQm9yZGVyKHRvdGFsV2lkdGgpO1xuICB9IGVsc2Uge1xuICAgIHNraXBCb3JkZXIodG90YWxXaWR0aCk7XG4gIH1cbiAgaWYgKGJvcmRlcnMuaW5jbHVkZXMoXCJsXCIpKSB7XG4gICAgbG9nLmRlYnVnKFwiYWRkIGxlZnQgYm9yZGVyXCIpO1xuICAgIGFkZEJvcmRlcih0b3RhbEhlaWdodCk7XG4gIH0gZWxzZSB7XG4gICAgc2tpcEJvcmRlcih0b3RhbEhlaWdodCk7XG4gIH1cbiAgcmVjdDIuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgc3Ryb2tlRGFzaEFycmF5LmpvaW4oXCIgXCIpKTtcbn1cbmNvbnN0IHJlY3RXaXRoVGl0bGUgPSAocGFyZW50LCBub2RlKSA9PiB7XG4gIGxldCBjbGFzc2VzO1xuICBpZiAoIW5vZGUuY2xhc3Nlcykge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgZGVmYXVsdFwiO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgXCIgKyBub2RlLmNsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgaW5uZXJMaW5lID0gc2hhcGVTdmcuaW5zZXJ0KFwibGluZVwiKTtcbiAgY29uc3QgbGFiZWwgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBjb25zdCB0ZXh0MiA9IG5vZGUubGFiZWxUZXh0LmZsYXQgPyBub2RlLmxhYmVsVGV4dC5mbGF0KCkgOiBub2RlLmxhYmVsVGV4dDtcbiAgbGV0IHRpdGxlID0gXCJcIjtcbiAgaWYgKHR5cGVvZiB0ZXh0MiA9PT0gXCJvYmplY3RcIikge1xuICAgIHRpdGxlID0gdGV4dDJbMF07XG4gIH0gZWxzZSB7XG4gICAgdGl0bGUgPSB0ZXh0MjtcbiAgfVxuICBsb2cuaW5mbyhcIkxhYmVsIHRleHQgYWJjNzlcIiwgdGl0bGUsIHRleHQyLCB0eXBlb2YgdGV4dDIgPT09IFwib2JqZWN0XCIpO1xuICBjb25zdCB0ZXh0ID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsJDEodGl0bGUsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSkpO1xuICBsZXQgYmJveCA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gdGV4dC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdCh0ZXh0KTtcbiAgICBiYm94ID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICBkdi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgfVxuICBsb2cuaW5mbyhcIlRleHQgMlwiLCB0ZXh0Mik7XG4gIGNvbnN0IHRleHRSb3dzID0gdGV4dDIuc2xpY2UoMSwgdGV4dDIubGVuZ3RoKTtcbiAgbGV0IHRpdGxlQm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGRlc2NyID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKFxuICAgIGNyZWF0ZUxhYmVsJDEodGV4dFJvd3Muam9pbiA/IHRleHRSb3dzLmpvaW4oXCI8YnIvPlwiKSA6IHRleHRSb3dzLCBub2RlLmxhYmVsU3R5bGUsIHRydWUsIHRydWUpXG4gICk7XG4gIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICBjb25zdCBkaXYgPSBkZXNjci5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdChkZXNjcik7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBzZWxlY3QoZGVzY3IpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAvLyAodGl0bGVCb3gud2lkdGggLSBiYm94LndpZHRoKSAvIDIgK1xuICAgIChiYm94LndpZHRoID4gdGl0bGVCb3gud2lkdGggPyAwIDogKHRpdGxlQm94LndpZHRoIC0gYmJveC53aWR0aCkgLyAyKSArIFwiLCBcIiArICh0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZyArIDUpICsgXCIpXCJcbiAgKTtcbiAgc2VsZWN0KHRleHQpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAvLyAodGl0bGVCb3gud2lkdGggLSBiYm94LndpZHRoKSAvIDIgK1xuICAgIChiYm94LndpZHRoIDwgdGl0bGVCb3gud2lkdGggPyAwIDogLSh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgMClcIlxuICApO1xuICBiYm94ID0gbGFiZWwubm9kZSgpLmdldEJCb3goKTtcbiAgbGFiZWwuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgKC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIDMpICsgXCIpXCJcbiAgKTtcbiAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwib3V0ZXIgdGl0bGUtc3RhdGVcIikuYXR0cihcInhcIiwgLWJib3gud2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICBpbm5lckxpbmUuYXR0cihcImNsYXNzXCIsIFwiZGl2aWRlclwiKS5hdHRyKFwieDFcIiwgLWJib3gud2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ4MlwiLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nKS5hdHRyKFwieTFcIiwgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgdGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcpLmF0dHIoXCJ5MlwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyB0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZyk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3QucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59O1xuY29uc3Qgc3RhZGl1bSA9IGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCB2b2lkIDAsIHRydWUpO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgaCAvIDQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIGggLyAyKS5hdHRyKFwicnlcIiwgaCAvIDIpLmF0dHIoXCJ4XCIsIC13IC8gMikuYXR0cihcInlcIiwgLWggLyAyKS5hdHRyKFwid2lkdGhcIiwgdykuYXR0cihcImhlaWdodFwiLCBoKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBjaXJjbGUgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIHZvaWQgMCwgdHJ1ZSk7XG4gIGNvbnN0IGNpcmNsZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNpcmNsZTIuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInJcIiwgYmJveC53aWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICBsb2cuaW5mbyhcIkNpcmNsZSBtYWluXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIGxvZy5pbmZvKFwiQ2lyY2xlIGludGVyc2VjdFwiLCBub2RlLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nLCBwb2ludDIpO1xuICAgIHJldHVybiBpbnRlcnNlY3QuY2lyY2xlKG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBkb3VibGVjaXJjbGUgPSBhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIHZvaWQgMCwgdHJ1ZSk7XG4gIGNvbnN0IGdhcCA9IDU7XG4gIGNvbnN0IGNpcmNsZUdyb3VwID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3Qgb3V0ZXJDaXJjbGUgPSBjaXJjbGVHcm91cC5pbnNlcnQoXCJjaXJjbGVcIik7XG4gIGNvbnN0IGlubmVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIpO1xuICBvdXRlckNpcmNsZS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwiclwiLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nICsgZ2FwKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZyArIGdhcCAqIDIpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcgKyBnYXAgKiAyKTtcbiAgaW5uZXJDaXJjbGUuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInJcIiwgYmJveC53aWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICBsb2cuaW5mbyhcIkRvdWJsZUNpcmNsZSBtYWluXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIG91dGVyQ2lyY2xlKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICBsb2cuaW5mbyhcIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3RcIiwgbm9kZSwgYmJveC53aWR0aCAvIDIgKyBoYWxmUGFkZGluZyArIGdhcCwgcG9pbnQyKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0LmNpcmNsZShub2RlLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nICsgZ2FwLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59O1xuY29uc3Qgc3Vicm91dGluZSA9IGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCB2b2lkIDAsIHRydWUpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggfSxcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IC04LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogMCB9LFxuICAgIHsgeDogdyArIDgsIHk6IC1oIH0sXG4gICAgeyB4OiAtOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAwIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IHN0YXJ0ID0gKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgY29uc3QgY2lyY2xlMiA9IHNoYXBlU3ZnLmluc2VydChcImNpcmNsZVwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY2lyY2xlMi5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3QuY2lyY2xlKG5vZGUsIDcsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBmb3JrSm9pbiA9IChwYXJlbnQsIG5vZGUsIGRpcikgPT4ge1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgbGV0IHdpZHRoID0gNzA7XG4gIGxldCBoZWlnaHQgPSAxMDtcbiAgaWYgKGRpciA9PT0gXCJMUlwiKSB7XG4gICAgd2lkdGggPSAxMDtcbiAgICBoZWlnaHQgPSA3MDtcbiAgfVxuICBjb25zdCBzaGFwZSA9IHNoYXBlU3ZnLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgLTEgKiB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIC0xICogaGVpZ2h0IC8gMikuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCkuYXR0cihcImNsYXNzXCIsIFwiZm9yay1qb2luXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHNoYXBlKTtcbiAgbm9kZS5oZWlnaHQgPSBub2RlLmhlaWdodCArIG5vZGUucGFkZGluZyAvIDI7XG4gIG5vZGUud2lkdGggPSBub2RlLndpZHRoICsgbm9kZS5wYWRkaW5nIC8gMjtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IGVuZCA9IChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGlubmVyQ2lyY2xlID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCBjaXJjbGUyID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjaXJjbGUyLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLXN0YXJ0XCIpLmF0dHIoXCJyXCIsIDcpLmF0dHIoXCJ3aWR0aFwiLCAxNCkuYXR0cihcImhlaWdodFwiLCAxNCk7XG4gIGlubmVyQ2lyY2xlLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLWVuZFwiKS5hdHRyKFwiclwiLCA1KS5hdHRyKFwid2lkdGhcIiwgMTApLmF0dHIoXCJoZWlnaHRcIiwgMTApO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3QuY2lyY2xlKG5vZGUsIDcsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBjbGFzc19ib3ggPSAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgY29uc3Qgcm93UGFkZGluZyA9IDQ7XG4gIGNvbnN0IGxpbmVIZWlnaHQgPSA4O1xuICBsZXQgY2xhc3NlcztcbiAgaWYgKCFub2RlLmNsYXNzZXMpIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzO1xuICB9XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzZXMpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHRvcExpbmUgPSBzaGFwZVN2Zy5pbnNlcnQoXCJsaW5lXCIpO1xuICBjb25zdCBib3R0b21MaW5lID0gc2hhcGVTdmcuaW5zZXJ0KFwibGluZVwiKTtcbiAgbGV0IG1heFdpZHRoID0gMDtcbiAgbGV0IG1heEhlaWdodCA9IHJvd1BhZGRpbmc7XG4gIGNvbnN0IGxhYmVsQ29udGFpbmVyID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgbGV0IHZlcnRpY2FsUG9zID0gMDtcbiAgY29uc3QgaGFzSW50ZXJmYWNlID0gbm9kZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnMgJiYgbm9kZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF07XG4gIGNvbnN0IGludGVyZmFjZUxhYmVsVGV4dCA9IG5vZGUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdID8gXCLCq1wiICsgbm9kZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0gKyBcIsK7XCIgOiBcIlwiO1xuICBjb25zdCBpbnRlcmZhY2VMYWJlbCA9IGxhYmVsQ29udGFpbmVyLm5vZGUoKS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbCQxKGludGVyZmFjZUxhYmVsVGV4dCwgbm9kZS5sYWJlbFN0eWxlLCB0cnVlLCB0cnVlKSk7XG4gIGxldCBpbnRlcmZhY2VCQm94ID0gaW50ZXJmYWNlTGFiZWwuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gaW50ZXJmYWNlTGFiZWwuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QoaW50ZXJmYWNlTGFiZWwpO1xuICAgIGludGVyZmFjZUJCb3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGludGVyZmFjZUJCb3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgaW50ZXJmYWNlQkJveC5oZWlnaHQpO1xuICB9XG4gIGlmIChub2RlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSkge1xuICAgIG1heEhlaWdodCArPSBpbnRlcmZhY2VCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgbWF4V2lkdGggKz0gaW50ZXJmYWNlQkJveC53aWR0aDtcbiAgfVxuICBsZXQgY2xhc3NUaXRsZVN0cmluZyA9IG5vZGUuY2xhc3NEYXRhLmxhYmVsO1xuICBpZiAobm9kZS5jbGFzc0RhdGEudHlwZSAhPT0gdm9pZCAwICYmIG5vZGUuY2xhc3NEYXRhLnR5cGUgIT09IFwiXCIpIHtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpIHtcbiAgICAgIGNsYXNzVGl0bGVTdHJpbmcgKz0gXCImbHQ7XCIgKyBub2RlLmNsYXNzRGF0YS50eXBlICsgXCImZ3Q7XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzVGl0bGVTdHJpbmcgKz0gXCI8XCIgKyBub2RlLmNsYXNzRGF0YS50eXBlICsgXCI+XCI7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNsYXNzVGl0bGVMYWJlbCA9IGxhYmVsQ29udGFpbmVyLm5vZGUoKS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbCQxKGNsYXNzVGl0bGVTdHJpbmcsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSkpO1xuICBzZWxlY3QoY2xhc3NUaXRsZUxhYmVsKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc1RpdGxlXCIpO1xuICBsZXQgY2xhc3NUaXRsZUJCb3ggPSBjbGFzc1RpdGxlTGFiZWwuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gY2xhc3NUaXRsZUxhYmVsLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0KGNsYXNzVGl0bGVMYWJlbCk7XG4gICAgY2xhc3NUaXRsZUJCb3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGNsYXNzVGl0bGVCQm94LndpZHRoKTtcbiAgICBkdi5hdHRyKFwiaGVpZ2h0XCIsIGNsYXNzVGl0bGVCQm94LmhlaWdodCk7XG4gIH1cbiAgbWF4SGVpZ2h0ICs9IGNsYXNzVGl0bGVCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gIGlmIChjbGFzc1RpdGxlQkJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgbWF4V2lkdGggPSBjbGFzc1RpdGxlQkJveC53aWR0aDtcbiAgfVxuICBjb25zdCBjbGFzc0F0dHJpYnV0ZXMgPSBbXTtcbiAgbm9kZS5jbGFzc0RhdGEubWVtYmVycy5mb3JFYWNoKChzdHIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRJbmZvID0gcGFyc2VNZW1iZXIoc3RyKTtcbiAgICBsZXQgcGFyc2VkVGV4dCA9IHBhcnNlZEluZm8uZGlzcGxheVRleHQ7XG4gICAgaWYgKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSB7XG4gICAgICBwYXJzZWRUZXh0ID0gcGFyc2VkVGV4dC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbiAgICB9XG4gICAgY29uc3QgbGJsID0gbGFiZWxDb250YWluZXIubm9kZSgpLmFwcGVuZENoaWxkKFxuICAgICAgY3JlYXRlTGFiZWwkMShcbiAgICAgICAgcGFyc2VkVGV4dCxcbiAgICAgICAgcGFyc2VkSW5mby5jc3NTdHlsZSA/IHBhcnNlZEluZm8uY3NzU3R5bGUgOiBub2RlLmxhYmVsU3R5bGUsXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBiYm94ID0gbGJsLmdldEJCb3goKTtcbiAgICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgICBjb25zdCBkaXYgPSBsYmwuY2hpbGRyZW5bMF07XG4gICAgICBjb25zdCBkdiA9IHNlbGVjdChsYmwpO1xuICAgICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoYmJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IGJib3gud2lkdGg7XG4gICAgfVxuICAgIG1heEhlaWdodCArPSBiYm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgY2xhc3NBdHRyaWJ1dGVzLnB1c2gobGJsKTtcbiAgfSk7XG4gIG1heEhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBjb25zdCBjbGFzc01ldGhvZHMgPSBbXTtcbiAgbm9kZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChzdHIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRJbmZvID0gcGFyc2VNZW1iZXIoc3RyKTtcbiAgICBsZXQgZGlzcGxheVRleHQgPSBwYXJzZWRJbmZvLmRpc3BsYXlUZXh0O1xuICAgIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykge1xuICAgICAgZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbiAgICB9XG4gICAgY29uc3QgbGJsID0gbGFiZWxDb250YWluZXIubm9kZSgpLmFwcGVuZENoaWxkKFxuICAgICAgY3JlYXRlTGFiZWwkMShcbiAgICAgICAgZGlzcGxheVRleHQsXG4gICAgICAgIHBhcnNlZEluZm8uY3NzU3R5bGUgPyBwYXJzZWRJbmZvLmNzc1N0eWxlIDogbm9kZS5sYWJlbFN0eWxlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgYmJveCA9IGxibC5nZXRCQm94KCk7XG4gICAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgICAgY29uc3QgZGl2ID0gbGJsLmNoaWxkcmVuWzBdO1xuICAgICAgY29uc3QgZHYgPSBzZWxlY3QobGJsKTtcbiAgICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgICBkdi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKGJib3gud2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSBiYm94LndpZHRoO1xuICAgIH1cbiAgICBtYXhIZWlnaHQgKz0gYmJveC5oZWlnaHQgKyByb3dQYWRkaW5nO1xuICAgIGNsYXNzTWV0aG9kcy5wdXNoKGxibCk7XG4gIH0pO1xuICBtYXhIZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgaWYgKGhhc0ludGVyZmFjZSkge1xuICAgIGxldCBkaWZmWDIgPSAobWF4V2lkdGggLSBpbnRlcmZhY2VCQm94LndpZHRoKSAvIDI7XG4gICAgc2VsZWN0KGludGVyZmFjZUxhYmVsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArICgtMSAqIG1heFdpZHRoIC8gMiArIGRpZmZYMikgKyBcIiwgXCIgKyAtMSAqIG1heEhlaWdodCAvIDIgKyBcIilcIlxuICAgICk7XG4gICAgdmVydGljYWxQb3MgPSBpbnRlcmZhY2VCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gIH1cbiAgbGV0IGRpZmZYID0gKG1heFdpZHRoIC0gY2xhc3NUaXRsZUJCb3gud2lkdGgpIC8gMjtcbiAgc2VsZWN0KGNsYXNzVGl0bGVMYWJlbCkuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKCBcIiArICgtMSAqIG1heFdpZHRoIC8gMiArIGRpZmZYKSArIFwiLCBcIiArICgtMSAqIG1heEhlaWdodCAvIDIgKyB2ZXJ0aWNhbFBvcykgKyBcIilcIlxuICApO1xuICB2ZXJ0aWNhbFBvcyArPSBjbGFzc1RpdGxlQkJveC5oZWlnaHQgKyByb3dQYWRkaW5nO1xuICB0b3BMaW5lLmF0dHIoXCJjbGFzc1wiLCBcImRpdmlkZXJcIikuYXR0cihcIngxXCIsIC1tYXhXaWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIG1heFdpZHRoIC8gMiArIGhhbGZQYWRkaW5nKS5hdHRyKFwieTFcIiwgLW1heEhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIGxpbmVIZWlnaHQgKyB2ZXJ0aWNhbFBvcykuYXR0cihcInkyXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpO1xuICB2ZXJ0aWNhbFBvcyArPSBsaW5lSGVpZ2h0O1xuICBjbGFzc0F0dHJpYnV0ZXMuZm9yRWFjaCgobGJsKSA9PiB7XG4gICAgc2VsZWN0KGxibCkuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZSggXCIgKyAtbWF4V2lkdGggLyAyICsgXCIsIFwiICsgKC0xICogbWF4SGVpZ2h0IC8gMiArIHZlcnRpY2FsUG9zICsgbGluZUhlaWdodCAvIDIpICsgXCIpXCJcbiAgICApO1xuICAgIHZlcnRpY2FsUG9zICs9IGNsYXNzVGl0bGVCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gIH0pO1xuICB2ZXJ0aWNhbFBvcyArPSBsaW5lSGVpZ2h0O1xuICBib3R0b21MaW5lLmF0dHIoXCJjbGFzc1wiLCBcImRpdmlkZXJcIikuYXR0cihcIngxXCIsIC1tYXhXaWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIG1heFdpZHRoIC8gMiArIGhhbGZQYWRkaW5nKS5hdHRyKFwieTFcIiwgLW1heEhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIGxpbmVIZWlnaHQgKyB2ZXJ0aWNhbFBvcykuYXR0cihcInkyXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpO1xuICB2ZXJ0aWNhbFBvcyArPSBsaW5lSGVpZ2h0O1xuICBjbGFzc01ldGhvZHMuZm9yRWFjaCgobGJsKSA9PiB7XG4gICAgc2VsZWN0KGxibCkuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZSggXCIgKyAtbWF4V2lkdGggLyAyICsgXCIsIFwiICsgKC0xICogbWF4SGVpZ2h0IC8gMiArIHZlcnRpY2FsUG9zKSArIFwiKVwiXG4gICAgKTtcbiAgICB2ZXJ0aWNhbFBvcyArPSBjbGFzc1RpdGxlQkJveC5oZWlnaHQgKyByb3dQYWRkaW5nO1xuICB9KTtcbiAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwib3V0ZXIgdGl0bGUtc3RhdGVcIikuYXR0cihcInhcIiwgLW1heFdpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCAtKG1heEhlaWdodCAvIDIpIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBtYXhXaWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBtYXhIZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IHNoYXBlcyA9IHtcbiAgcmhvbWJ1czogcXVlc3Rpb24sXG4gIHF1ZXN0aW9uLFxuICByZWN0LFxuICBsYWJlbFJlY3QsXG4gIHJlY3RXaXRoVGl0bGUsXG4gIGNob2ljZSxcbiAgY2lyY2xlLFxuICBkb3VibGVjaXJjbGUsXG4gIHN0YWRpdW0sXG4gIGhleGFnb24sXG4gIHJlY3RfbGVmdF9pbnZfYXJyb3csXG4gIGxlYW5fcmlnaHQsXG4gIGxlYW5fbGVmdCxcbiAgdHJhcGV6b2lkLFxuICBpbnZfdHJhcGV6b2lkLFxuICByZWN0X3JpZ2h0X2ludl9hcnJvdyxcbiAgY3lsaW5kZXIsXG4gIHN0YXJ0LFxuICBlbmQsXG4gIG5vdGU6IG5vdGUkMSxcbiAgc3Vicm91dGluZSxcbiAgZm9yazogZm9ya0pvaW4sXG4gIGpvaW46IGZvcmtKb2luLFxuICBjbGFzc19ib3hcbn07XG5sZXQgbm9kZUVsZW1zID0ge307XG5jb25zdCBpbnNlcnROb2RlID0gYXN5bmMgKGVsZW0sIG5vZGUsIGRpcikgPT4ge1xuICBsZXQgbmV3RWw7XG4gIGxldCBlbDtcbiAgaWYgKG5vZGUubGluaykge1xuICAgIGxldCB0YXJnZXQ7XG4gICAgaWYgKGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICB0YXJnZXQgPSBcIl90b3BcIjtcbiAgICB9IGVsc2UgaWYgKG5vZGUubGlua1RhcmdldCkge1xuICAgICAgdGFyZ2V0ID0gbm9kZS5saW5rVGFyZ2V0IHx8IFwiX2JsYW5rXCI7XG4gICAgfVxuICAgIG5ld0VsID0gZWxlbS5pbnNlcnQoXCJzdmc6YVwiKS5hdHRyKFwieGxpbms6aHJlZlwiLCBub2RlLmxpbmspLmF0dHIoXCJ0YXJnZXRcIiwgdGFyZ2V0KTtcbiAgICBlbCA9IGF3YWl0IHNoYXBlc1tub2RlLnNoYXBlXShuZXdFbCwgbm9kZSwgZGlyKTtcbiAgfSBlbHNlIHtcbiAgICBlbCA9IGF3YWl0IHNoYXBlc1tub2RlLnNoYXBlXShlbGVtLCBub2RlLCBkaXIpO1xuICAgIG5ld0VsID0gZWw7XG4gIH1cbiAgaWYgKG5vZGUudG9vbHRpcCkge1xuICAgIGVsLmF0dHIoXCJ0aXRsZVwiLCBub2RlLnRvb2x0aXApO1xuICB9XG4gIGlmIChub2RlLmNsYXNzKSB7XG4gICAgZWwuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0IFwiICsgbm9kZS5jbGFzcyk7XG4gIH1cbiAgbm9kZUVsZW1zW25vZGUuaWRdID0gbmV3RWw7XG4gIGlmIChub2RlLmhhdmVDYWxsYmFjaykge1xuICAgIG5vZGVFbGVtc1tub2RlLmlkXS5hdHRyKFwiY2xhc3NcIiwgbm9kZUVsZW1zW25vZGUuaWRdLmF0dHIoXCJjbGFzc1wiKSArIFwiIGNsaWNrYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gbmV3RWw7XG59O1xuY29uc3Qgc2V0Tm9kZUVsZW0gPSAoZWxlbSwgbm9kZSkgPT4ge1xuICBub2RlRWxlbXNbbm9kZS5pZF0gPSBlbGVtO1xufTtcbmNvbnN0IGNsZWFyJDEgPSAoKSA9PiB7XG4gIG5vZGVFbGVtcyA9IHt9O1xufTtcbmNvbnN0IHBvc2l0aW9uTm9kZSA9IChub2RlKSA9PiB7XG4gIGNvbnN0IGVsID0gbm9kZUVsZW1zW25vZGUuaWRdO1xuICBsb2cudHJhY2UoXG4gICAgXCJUcmFuc2Zvcm1pbmcgbm9kZVwiLFxuICAgIG5vZGUuZGlmZixcbiAgICBub2RlLFxuICAgIFwidHJhbnNsYXRlKFwiICsgKG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gNSkgKyBcIiwgXCIgKyBub2RlLndpZHRoIC8gMiArIFwiKVwiXG4gICk7XG4gIGNvbnN0IHBhZGRpbmcgPSA4O1xuICBjb25zdCBkaWZmID0gbm9kZS5kaWZmIHx8IDA7XG4gIGlmIChub2RlLmNsdXN0ZXJOb2RlKSB7XG4gICAgZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggKyBkaWZmIC0gbm9kZS53aWR0aCAvIDIpICsgXCIsIFwiICsgKG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIHBhZGRpbmcpICsgXCIpXCJcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLnggKyBcIiwgXCIgKyBub2RlLnkgKyBcIilcIik7XG4gIH1cbiAgcmV0dXJuIGRpZmY7XG59O1xubGV0IGVkZ2VMYWJlbHMgPSB7fTtcbmxldCB0ZXJtaW5hbExhYmVscyA9IHt9O1xuY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gIGVkZ2VMYWJlbHMgPSB7fTtcbiAgdGVybWluYWxMYWJlbHMgPSB7fTtcbn07XG5jb25zdCBpbnNlcnRFZGdlTGFiZWwgPSAoZWxlbSwgZWRnZSkgPT4ge1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbEVsZW1lbnQgPSBlZGdlLmxhYmVsVHlwZSA9PT0gXCJtYXJrZG93blwiID8gY3JlYXRlVGV4dChlbGVtLCBlZGdlLmxhYmVsLCB7XG4gICAgc3R5bGU6IGVkZ2UubGFiZWxTdHlsZSxcbiAgICB1c2VIdG1sTGFiZWxzLFxuICAgIGFkZFN2Z0JhY2tncm91bmQ6IHRydWVcbiAgfSkgOiBjcmVhdGVMYWJlbCQxKGVkZ2UubGFiZWwsIGVkZ2UubGFiZWxTdHlsZSk7XG4gIGxvZy5pbmZvKFwiYWJjODJcIiwgZWRnZSwgZWRnZS5sYWJlbFR5cGUpO1xuICBjb25zdCBlZGdlTGFiZWwgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZUxhYmVsXCIpO1xuICBjb25zdCBsYWJlbCA9IGVkZ2VMYWJlbC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgbGV0IGJib3ggPSBsYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICBpZiAodXNlSHRtbExhYmVscykge1xuICAgIGNvbnN0IGRpdiA9IGxhYmVsRWxlbWVudC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdChsYWJlbEVsZW1lbnQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGxhYmVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtYmJveC53aWR0aCAvIDIgKyBcIiwgXCIgKyAtYmJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICBlZGdlTGFiZWxzW2VkZ2UuaWRdID0gZWRnZUxhYmVsO1xuICBlZGdlLndpZHRoID0gYmJveC53aWR0aDtcbiAgZWRnZS5oZWlnaHQgPSBiYm94LmhlaWdodDtcbiAgbGV0IGZvO1xuICBpZiAoZWRnZS5zdGFydExhYmVsTGVmdCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWwkMShlZGdlLnN0YXJ0TGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IHN0YXJ0RWRnZUxhYmVsTGVmdCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gc3RhcnRFZGdlTGFiZWxMZWZ0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBpbm5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoc3RhcnRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gc3RhcnRMYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIGlubmVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtc2xCb3gud2lkdGggLyAyICsgXCIsIFwiICsgLXNsQm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uc3RhcnRMZWZ0ID0gc3RhcnRFZGdlTGFiZWxMZWZ0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxSaWdodCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWwkMShlZGdlLnN0YXJ0TGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBzdGFydEVkZ2VMYWJlbFJpZ2h0ID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VUZXJtaW5hbHNcIik7XG4gICAgY29uc3QgaW5uZXIgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChzdGFydExhYmVsRWxlbWVudCk7XG4gICAgaW5uZXIubm9kZSgpLmFwcGVuZENoaWxkKHN0YXJ0TGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBzbEJveCA9IHN0YXJ0TGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbFJpZ2h0KTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbCQxKGVkZ2UuZW5kTGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IGVuZEVkZ2VMYWJlbExlZnQgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVRlcm1pbmFsc1wiKTtcbiAgICBjb25zdCBpbm5lciA9IGVuZEVkZ2VMYWJlbExlZnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbExlZnQubm9kZSgpLmFwcGVuZENoaWxkKGVuZExhYmVsRWxlbWVudCk7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kTGVmdCA9IGVuZEVkZ2VMYWJlbExlZnQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbCQxKGVkZ2UuZW5kTGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBlbmRFZGdlTGFiZWxSaWdodCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gZW5kRWRnZUxhYmVsUmlnaHQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZFJpZ2h0ID0gZW5kRWRnZUxhYmVsUmlnaHQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbFJpZ2h0KTtcbiAgfVxuICByZXR1cm4gbGFiZWxFbGVtZW50O1xufTtcbmZ1bmN0aW9uIHNldFRlcm1pbmFsV2lkdGgoZm8sIHZhbHVlKSB7XG4gIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyAmJiBmbykge1xuICAgIGZvLnN0eWxlLndpZHRoID0gdmFsdWUubGVuZ3RoICogOSArIFwicHhcIjtcbiAgICBmby5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgfVxufVxuY29uc3QgcG9zaXRpb25FZGdlTGFiZWwgPSAoZWRnZSwgcGF0aHMpID0+IHtcbiAgbG9nLmluZm8oXCJNb3ZpbmcgbGFiZWwgYWJjNzggXCIsIGVkZ2UuaWQsIGVkZ2UubGFiZWwsIGVkZ2VMYWJlbHNbZWRnZS5pZF0pO1xuICBsZXQgcGF0aCA9IHBhdGhzLnVwZGF0ZWRQYXRoID8gcGF0aHMudXBkYXRlZFBhdGggOiBwYXRocy5vcmlnaW5hbFBhdGg7XG4gIGlmIChlZGdlLmxhYmVsKSB7XG4gICAgY29uc3QgZWwgPSBlZGdlTGFiZWxzW2VkZ2UuaWRdO1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlscy5jYWxjTGFiZWxQb3NpdGlvbihwYXRoKTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBcIk1vdmluZyBsYWJlbCBcIiArIGVkZ2UubGFiZWwgKyBcIiBmcm9tIChcIixcbiAgICAgICAgeCxcbiAgICAgICAgXCIsXCIsXG4gICAgICAgIHksXG4gICAgICAgIFwiKSB0byAoXCIsXG4gICAgICAgIHBvcy54LFxuICAgICAgICBcIixcIixcbiAgICAgICAgcG9zLnksXG4gICAgICAgIFwiKSBhYmM3OFwiXG4gICAgICApO1xuICAgICAgaWYgKHBhdGhzLnVwZGF0ZWRQYXRoKSB7XG4gICAgICAgIHggPSBwb3MueDtcbiAgICAgICAgeSA9IHBvcy55O1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLCBcIiArIHkgKyBcIilcIik7XG4gIH1cbiAgaWYgKGVkZ2Uuc3RhcnRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0TGVmdDtcbiAgICBsZXQgeCA9IGVkZ2UueDtcbiAgICBsZXQgeSA9IGVkZ2UueTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgcG9zID0gdXRpbHMuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZVN0YXJ0ID8gMTAgOiAwLCBcInN0YXJ0X2xlZnRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsIFwiICsgeSArIFwiKVwiKTtcbiAgfVxuICBpZiAoZWRnZS5zdGFydExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oXG4gICAgICAgIGVkZ2UuYXJyb3dUeXBlU3RhcnQgPyAxMCA6IDAsXG4gICAgICAgIFwic3RhcnRfcmlnaHRcIixcbiAgICAgICAgcGF0aFxuICAgICAgKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIpXCIpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsTGVmdCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kTGVmdDtcbiAgICBsZXQgeCA9IGVkZ2UueDtcbiAgICBsZXQgeSA9IGVkZ2UueTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgcG9zID0gdXRpbHMuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZUVuZCA/IDEwIDogMCwgXCJlbmRfbGVmdFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIpXCIpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZFJpZ2h0O1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlscy5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGVkZ2UuYXJyb3dUeXBlRW5kID8gMTAgOiAwLCBcImVuZF9yaWdodFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIpXCIpO1xuICB9XG59O1xuY29uc3Qgb3V0c2lkZU5vZGUgPSAobm9kZSwgcG9pbnQyKSA9PiB7XG4gIGNvbnN0IHggPSBub2RlLng7XG4gIGNvbnN0IHkgPSBub2RlLnk7XG4gIGNvbnN0IGR4ID0gTWF0aC5hYnMocG9pbnQyLnggLSB4KTtcbiAgY29uc3QgZHkgPSBNYXRoLmFicyhwb2ludDIueSAtIHkpO1xuICBjb25zdCB3ID0gbm9kZS53aWR0aCAvIDI7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodCAvIDI7XG4gIGlmIChkeCA+PSB3IHx8IGR5ID49IGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgaW50ZXJzZWN0aW9uID0gKG5vZGUsIG91dHNpZGVQb2ludCwgaW5zaWRlUG9pbnQpID0+IHtcbiAgbG9nLndhcm4oYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkob3V0c2lkZVBvaW50KX1cbiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGluc2lkZVBvaW50KX1cbiAgbm9kZSAgICAgICAgOiB4OiR7bm9kZS54fSB5OiR7bm9kZS55fSB3OiR7bm9kZS53aWR0aH0gaDoke25vZGUuaGVpZ2h0fWApO1xuICBjb25zdCB4ID0gbm9kZS54O1xuICBjb25zdCB5ID0gbm9kZS55O1xuICBjb25zdCBkeCA9IE1hdGguYWJzKHggLSBpbnNpZGVQb2ludC54KTtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGggLyAyO1xuICBsZXQgciA9IGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCA/IHcgLSBkeCA6IHcgKyBkeDtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgY29uc3QgUSA9IE1hdGguYWJzKG91dHNpZGVQb2ludC55IC0gaW5zaWRlUG9pbnQueSk7XG4gIGNvbnN0IFIgPSBNYXRoLmFicyhvdXRzaWRlUG9pbnQueCAtIGluc2lkZVBvaW50LngpO1xuICBpZiAoTWF0aC5hYnMoeSAtIG91dHNpZGVQb2ludC55KSAqIHcgPiBNYXRoLmFicyh4IC0gb3V0c2lkZVBvaW50LngpICogaCkge1xuICAgIGxldCBxID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gb3V0c2lkZVBvaW50LnkgLSBoIC0geSA6IHkgLSBoIC0gb3V0c2lkZVBvaW50Lnk7XG4gICAgciA9IFIgKiBxIC8gUTtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICB4OiBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgciA6IGluc2lkZVBvaW50LnggLSBSICsgcixcbiAgICAgIHk6IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IGluc2lkZVBvaW50LnkgKyBRIC0gcSA6IGluc2lkZVBvaW50LnkgLSBRICsgcVxuICAgIH07XG4gICAgaWYgKHIgPT09IDApIHtcbiAgICAgIHJlcy54ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgICByZXMueSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICBpZiAoUiA9PT0gMCkge1xuICAgICAgcmVzLnggPSBvdXRzaWRlUG9pbnQueDtcbiAgICB9XG4gICAgaWYgKFEgPT09IDApIHtcbiAgICAgIHJlcy55ID0gb3V0c2lkZVBvaW50Lnk7XG4gICAgfVxuICAgIGxvZy53YXJuKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke1F9LCBxICR7cX0sIFIgJHtSfSwgciAke3J9YCwgcmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2Uge1xuICAgIGlmIChpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LngpIHtcbiAgICAgIHIgPSBvdXRzaWRlUG9pbnQueCAtIHcgLSB4O1xuICAgIH0gZWxzZSB7XG4gICAgICByID0geCAtIHcgLSBvdXRzaWRlUG9pbnQueDtcbiAgICB9XG4gICAgbGV0IHEgPSBRICogciAvIFI7XG4gICAgbGV0IF94ID0gaW5zaWRlUG9pbnQueCA8IG91dHNpZGVQb2ludC54ID8gaW5zaWRlUG9pbnQueCArIFIgLSByIDogaW5zaWRlUG9pbnQueCAtIFIgKyByO1xuICAgIGxldCBfeSA9IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IGluc2lkZVBvaW50LnkgKyBxIDogaW5zaWRlUG9pbnQueSAtIHE7XG4gICAgbG9nLndhcm4oYHNpZGVzIGNhbGMgYWJjODksIFEgJHtRfSwgcSAke3F9LCBSICR7Un0sIHIgJHtyfWAsIHsgX3gsIF95IH0pO1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICBfeCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgX3kgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIF94ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICBfeSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBfeCwgeTogX3kgfTtcbiAgfVxufTtcbmNvbnN0IGN1dFBhdGhBdEludGVyc2VjdCA9IChfcG9pbnRzLCBib3VuZHJ5Tm9kZSkgPT4ge1xuICBsb2cud2FybihcImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdFwiLCBfcG9pbnRzLCBib3VuZHJ5Tm9kZSk7XG4gIGxldCBwb2ludHMgPSBbXTtcbiAgbGV0IGxhc3RQb2ludE91dHNpZGUgPSBfcG9pbnRzWzBdO1xuICBsZXQgaXNJbnNpZGUgPSBmYWxzZTtcbiAgX3BvaW50cy5mb3JFYWNoKChwb2ludDIpID0+IHtcbiAgICBsb2cuaW5mbyhcImFiYzg4IGNoZWNraW5nIHBvaW50XCIsIHBvaW50MiwgYm91bmRyeU5vZGUpO1xuICAgIGlmICghb3V0c2lkZU5vZGUoYm91bmRyeU5vZGUsIHBvaW50MikgJiYgIWlzSW5zaWRlKSB7XG4gICAgICBjb25zdCBpbnRlciA9IGludGVyc2VjdGlvbihib3VuZHJ5Tm9kZSwgbGFzdFBvaW50T3V0c2lkZSwgcG9pbnQyKTtcbiAgICAgIGxvZy53YXJuKFwiYWJjODggaW5zaWRlXCIsIHBvaW50MiwgbGFzdFBvaW50T3V0c2lkZSwgaW50ZXIpO1xuICAgICAgbG9nLndhcm4oXCJhYmM4OCBpbnRlcnNlY3Rpb25cIiwgaW50ZXIpO1xuICAgICAgbGV0IHBvaW50UHJlc2VudCA9IGZhbHNlO1xuICAgICAgcG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgcG9pbnRQcmVzZW50ID0gcG9pbnRQcmVzZW50IHx8IHAueCA9PT0gaW50ZXIueCAmJiBwLnkgPT09IGludGVyLnk7XG4gICAgICB9KTtcbiAgICAgIGlmICghcG9pbnRzLnNvbWUoKGUpID0+IGUueCA9PT0gaW50ZXIueCAmJiBlLnkgPT09IGludGVyLnkpKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKGludGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKFwiYWJjODggbm8gaW50ZXJzZWN0XCIsIGludGVyLCBwb2ludHMpO1xuICAgICAgfVxuICAgICAgaXNJbnNpZGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihcImFiYzg4IG91dHNpZGVcIiwgcG9pbnQyLCBsYXN0UG9pbnRPdXRzaWRlKTtcbiAgICAgIGxhc3RQb2ludE91dHNpZGUgPSBwb2ludDI7XG4gICAgICBpZiAoIWlzSW5zaWRlKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHBvaW50Mik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgbG9nLndhcm4oXCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzXCIsIHBvaW50cyk7XG4gIHJldHVybiBwb2ludHM7XG59O1xuY29uc3QgaW5zZXJ0RWRnZSA9IGZ1bmN0aW9uKGVsZW0sIGUsIGVkZ2UsIGNsdXN0ZXJEYiwgZGlhZ3JhbVR5cGUsIGdyYXBoKSB7XG4gIGxldCBwb2ludHMgPSBlZGdlLnBvaW50cztcbiAgbGV0IHBvaW50c0hhc0NoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3QgdGFpbCA9IGdyYXBoLm5vZGUoZS52KTtcbiAgdmFyIGhlYWQgPSBncmFwaC5ub2RlKGUudyk7XG4gIGxvZy5pbmZvKFwiYWJjODggSW5zZXJ0RWRnZTogXCIsIGVkZ2UpO1xuICBpZiAoaGVhZC5pbnRlcnNlY3QgJiYgdGFpbC5pbnRlcnNlY3QpIHtcbiAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoMSwgZWRnZS5wb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgcG9pbnRzLnVuc2hpZnQodGFpbC5pbnRlcnNlY3QocG9pbnRzWzBdKSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBcIkxhc3QgcG9pbnRcIixcbiAgICAgIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICBoZWFkLFxuICAgICAgaGVhZC5pbnRlcnNlY3QocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSlcbiAgICApO1xuICAgIHBvaW50cy5wdXNoKGhlYWQuaW50ZXJzZWN0KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pKTtcbiAgfVxuICBpZiAoZWRnZS50b0NsdXN0ZXIpIHtcbiAgICBsb2cuaW5mbyhcInRvIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiW2VkZ2UudG9DbHVzdGVyXSk7XG4gICAgcG9pbnRzID0gY3V0UGF0aEF0SW50ZXJzZWN0KGVkZ2UucG9pbnRzLCBjbHVzdGVyRGJbZWRnZS50b0NsdXN0ZXJdLm5vZGUpO1xuICAgIHBvaW50c0hhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG4gIGlmIChlZGdlLmZyb21DbHVzdGVyKSB7XG4gICAgbG9nLmluZm8oXCJmcm9tIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiW2VkZ2UuZnJvbUNsdXN0ZXJdKTtcbiAgICBwb2ludHMgPSBjdXRQYXRoQXRJbnRlcnNlY3QocG9pbnRzLnJldmVyc2UoKSwgY2x1c3RlckRiW2VkZ2UuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKTtcbiAgICBwb2ludHNIYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBsaW5lRGF0YSA9IHBvaW50cy5maWx0ZXIoKHApID0+ICFOdW1iZXIuaXNOYU4ocC55KSk7XG4gIGxldCBjdXJ2ZTtcbiAgaWYgKGRpYWdyYW1UeXBlID09PSBcImdyYXBoXCIgfHwgZGlhZ3JhbVR5cGUgPT09IFwiZmxvd2NoYXJ0XCIpIHtcbiAgICBjdXJ2ZSA9IGVkZ2UuY3VydmUgfHwgY3VydmVCYXNpcztcbiAgfSBlbHNlIHtcbiAgICBjdXJ2ZSA9IGN1cnZlQmFzaXM7XG4gIH1cbiAgY29uc3QgbGluZUZ1bmN0aW9uID0gbGluZSgpLngoZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBkLng7XG4gIH0pLnkoZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBkLnk7XG4gIH0pLmN1cnZlKGN1cnZlKTtcbiAgbGV0IHN0cm9rZUNsYXNzZXM7XG4gIHN3aXRjaCAoZWRnZS50aGlja25lc3MpIHtcbiAgICBjYXNlIFwibm9ybWFsXCI6XG4gICAgICBzdHJva2VDbGFzc2VzID0gXCJlZGdlLXRoaWNrbmVzcy1ub3JtYWxcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0aGlja1wiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3MtdGhpY2tcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbnZpc2libGVcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcImVkZ2UtdGhpY2tuZXNzLXRoaWNrXCI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiXCI7XG4gIH1cbiAgc3dpdGNoIChlZGdlLnBhdHRlcm4pIHtcbiAgICBjYXNlIFwic29saWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLXNvbGlkXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZG90dGVkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1kb3R0ZWRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYXNoZWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLWRhc2hlZFwiO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgY29uc3Qgc3ZnUGF0aCA9IGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24obGluZURhdGEpKS5hdHRyKFwiaWRcIiwgZWRnZS5pZCkuYXR0cihcImNsYXNzXCIsIFwiIFwiICsgc3Ryb2tlQ2xhc3NlcyArIChlZGdlLmNsYXNzZXMgPyBcIiBcIiArIGVkZ2UuY2xhc3NlcyA6IFwiXCIpKS5hdHRyKFwic3R5bGVcIiwgZWRnZS5zdHlsZSk7XG4gIGxldCB1cmwgPSBcIlwiO1xuICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGUgfHwgZ2V0Q29uZmlnKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGxvZy5pbmZvKFwiYXJyb3dUeXBlU3RhcnRcIiwgZWRnZS5hcnJvd1R5cGVTdGFydCk7XG4gIGxvZy5pbmZvKFwiYXJyb3dUeXBlRW5kXCIsIGVkZ2UuYXJyb3dUeXBlRW5kKTtcbiAgc3dpdGNoIChlZGdlLmFycm93VHlwZVN0YXJ0KSB7XG4gICAgY2FzZSBcImFycm93X2Nyb3NzXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItY3Jvc3NTdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyb3dfcG9pbnRcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1wb2ludFN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJvd19iYXJiXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItYmFyYlN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJvd19jaXJjbGVcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jaXJjbGVTdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYWdncmVnYXRpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1hZ2dyZWdhdGlvblN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleHRlbnNpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1leHRlbnNpb25TdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29tcG9zaXRpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jb21wb3NpdGlvblN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZXBlbmRlbmN5XCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2xsaXBvcFwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLXN0YXJ0XCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWxvbGxpcG9wU3RhcnQpXCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3dpdGNoIChlZGdlLmFycm93VHlwZUVuZCkge1xuICAgIGNhc2UgXCJhcnJvd19jcm9zc1wiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jcm9zc0VuZClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyb3dfcG9pbnRcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItcG9pbnRFbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImFycm93X2JhcmJcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItYmFyYkVuZClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyb3dfY2lyY2xlXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWNpcmNsZUVuZClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYWdncmVnYXRpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItYWdncmVnYXRpb25FbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4dGVuc2lvblwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1leHRlbnNpb25FbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNvbXBvc2l0aW9uXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWNvbXBvc2l0aW9uRW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZXBlbmRlbmN5XCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWRlcGVuZGVuY3lFbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxvbGxpcG9wXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWxvbGxpcG9wRW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGxldCBwYXRocyA9IHt9O1xuICBpZiAocG9pbnRzSGFzQ2hhbmdlZCkge1xuICAgIHBhdGhzLnVwZGF0ZWRQYXRoID0gcG9pbnRzO1xuICB9XG4gIHBhdGhzLm9yaWdpbmFsUGF0aCA9IGVkZ2UucG9pbnRzO1xuICByZXR1cm4gcGF0aHM7XG59O1xuZXhwb3J0IHtcbiAgaW5zZXJ0TWFya2VycyQxIGFzIGEsXG4gIGNsZWFyJDEgYXMgYixcbiAgY3JlYXRlTGFiZWwkMSBhcyBjLFxuICBjbGVhciBhcyBkLFxuICBpbnNlcnROb2RlIGFzIGUsXG4gIGluc2VydEVkZ2VMYWJlbCBhcyBmLFxuICBpbnNlcnRFZGdlIGFzIGcsXG4gIHBvc2l0aW9uRWRnZUxhYmVsIGFzIGgsXG4gIGludGVyc2VjdFJlY3QkMSBhcyBpLFxuICBsYWJlbEhlbHBlciBhcyBsLFxuICBwb3NpdGlvbk5vZGUgYXMgcCxcbiAgc2V0Tm9kZUVsZW0gYXMgcyxcbiAgdXBkYXRlTm9kZUJvdW5kcyBhcyB1XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/edges-49ac43a2.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/erDiagram-f6946109.js": /*!****************************************************************!*\ !*** ../../../node_modules/mermaid/dist/erDiagram-f6946109.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! uuid */ \"../../../node_modules/uuid/dist/esm-browser/v5.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [1, 34], $Vf = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 48, 52], $Vg = [1, 46], $Vh = [30, 31, 49, 50], $Vi = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $Vj = [44, 45, 46, 47, 48], $Vk = [22, 37], $Vl = [1, 66], $Vm = [1, 65], $Vn = [22, 37, 39, 41];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"ER_DIAGRAM\": 4, \"document\": 5, \"EOF\": 6, \"directive\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NEWLINE\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \":\": 15, \"argDirective\": 16, \"entityName\": 17, \"relSpec\": 18, \"role\": 19, \"BLOCK_START\": 20, \"attributes\": 21, \"BLOCK_STOP\": 22, \"title\": 23, \"title_value\": 24, \"acc_title\": 25, \"acc_title_value\": 26, \"acc_descr\": 27, \"acc_descr_value\": 28, \"acc_descr_multiline_value\": 29, \"ALPHANUM\": 30, \"ENTITY_NAME\": 31, \"attribute\": 32, \"attributeType\": 33, \"attributeName\": 34, \"attributeKeyTypeList\": 35, \"attributeComment\": 36, \"ATTRIBUTE_WORD\": 37, \"attributeKeyType\": 38, \"COMMA\": 39, \"ATTRIBUTE_KEY\": 40, \"COMMENT\": 41, \"cardinality\": 42, \"relType\": 43, \"ZERO_OR_ONE\": 44, \"ZERO_OR_MORE\": 45, \"ONE_OR_MORE\": 46, \"ONLY_ONE\": 47, \"MD_PARENT\": 48, \"NON_IDENTIFYING\": 49, \"IDENTIFYING\": 50, \"WORD\": 51, \"open_directive\": 52, \"type_directive\": 53, \"arg_directive\": 54, \"close_directive\": 55, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"ER_DIAGRAM\", 6: \"EOF\", 9: \"SPACE\", 11: \"NEWLINE\", 15: \":\", 20: \"BLOCK_START\", 22: \"BLOCK_STOP\", 23: \"title\", 24: \"title_value\", 25: \"acc_title\", 26: \"acc_title_value\", 27: \"acc_descr\", 28: \"acc_descr_value\", 29: \"acc_descr_multiline_value\", 30: \"ALPHANUM\", 31: \"ENTITY_NAME\", 37: \"ATTRIBUTE_WORD\", 39: \"COMMA\", 40: \"ATTRIBUTE_KEY\", 41: \"COMMENT\", 44: \"ZERO_OR_ONE\", 45: \"ZERO_OR_MORE\", 46: \"ONE_OR_MORE\", 47: \"ONLY_ONE\", 48: \"MD_PARENT\", 49: \"NON_IDENTIFYING\", 50: \"IDENTIFYING\", 51: \"WORD\", 52: \"open_directive\", 53: \"type_directive\", 54: \"arg_directive\", 55: \"close_directive\" },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n break;\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 12:\n yy.addEntity($$[$0 - 4]);\n yy.addEntity($$[$0 - 2]);\n yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);\n break;\n case 13:\n yy.addEntity($$[$0 - 3]);\n yy.addAttributes($$[$0 - 3], $$[$0 - 1]);\n break;\n case 14:\n yy.addEntity($$[$0 - 2]);\n break;\n case 15:\n yy.addEntity($$[$0]);\n break;\n case 16:\n case 17:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 18:\n case 19:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 20:\n case 44:\n this.$ = $$[$0];\n break;\n case 21:\n case 42:\n case 43:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 22:\n case 30:\n this.$ = [$$[$0]];\n break;\n case 23:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 24:\n this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] };\n break;\n case 25:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] };\n break;\n case 26:\n this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 27:\n this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] };\n break;\n case 28:\n case 29:\n case 32:\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 33:\n this.$ = $$[$0].replace(/\"/g, \"\");\n break;\n case 34:\n this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };\n break;\n case 35:\n this.$ = yy.Cardinality.ZERO_OR_ONE;\n break;\n case 36:\n this.$ = yy.Cardinality.ZERO_OR_MORE;\n break;\n case 37:\n this.$ = yy.Cardinality.ONE_OR_MORE;\n break;\n case 38:\n this.$ = yy.Cardinality.ONLY_ONE;\n break;\n case 39:\n this.$ = yy.Cardinality.MD_PARENT;\n break;\n case 40:\n this.$ = yy.Identification.NON_IDENTIFYING;\n break;\n case 41:\n this.$ = yy.Identification.IDENTIFYING;\n break;\n case 45:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 46:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 47:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 48:\n yy.parseDirective(\"}%%\", \"close_directive\", \"er\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 13: 8, 53: [1, 9] }, { 53: [2, 45] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 55: $V9 }, o([15, 55], [2, 46]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }), { 24: [1, 35] }, { 26: [1, 36] }, { 28: [1, 37] }, o($V2, [2, 19]), o($Vf, [2, 20]), o($Vf, [2, 21]), { 11: [1, 38] }, { 16: 39, 54: [1, 40] }, { 11: [2, 48] }, o($V2, [2, 5]), { 17: 41, 30: $V7, 31: $V8 }, { 21: 42, 22: [1, 43], 32: 44, 33: 45, 37: $Vg }, { 43: 47, 49: [1, 48], 50: [1, 49] }, o($Vh, [2, 35]), o($Vh, [2, 36]), o($Vh, [2, 37]), o($Vh, [2, 38]), o($Vh, [2, 39]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vi, [2, 9]), { 14: 50, 55: $V9 }, { 55: [2, 47] }, { 15: [1, 51] }, { 22: [1, 52] }, o($V2, [2, 14]), { 21: 53, 22: [2, 22], 32: 44, 33: 45, 37: $Vg }, { 34: 54, 37: [1, 55] }, { 37: [2, 28] }, { 42: 56, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }, o($Vj, [2, 40]), o($Vj, [2, 41]), { 11: [1, 57] }, { 19: 58, 30: [1, 61], 31: [1, 60], 51: [1, 59] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vk, [2, 24], { 35: 62, 36: 63, 38: 64, 40: $Vl, 41: $Vm }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vi, [2, 10]), o($V2, [2, 12]), o($V2, [2, 42]), o($V2, [2, 43]), o($V2, [2, 44]), o($Vk, [2, 25], { 36: 67, 39: [1, 68], 41: $Vm }), o($Vk, [2, 26]), o($Vn, [2, 30]), o($Vk, [2, 33]), o($Vn, [2, 32]), o($Vk, [2, 27]), { 38: 69, 40: $Vl }, o($Vn, [2, 31])],\n defaultActions: { 5: [2, 45], 7: [2, 2], 25: [2, 48], 40: [2, 47], 46: [2, 28], 53: [2, 23] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 25;\n case 1:\n this.popState();\n return \"acc_title_value\";\n case 2:\n this.begin(\"acc_descr\");\n return 27;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n case 7:\n this.begin(\"open_directive\");\n return 52;\n case 8:\n this.begin(\"type_directive\");\n return 53;\n case 9:\n this.popState();\n this.begin(\"arg_directive\");\n return 15;\n case 10:\n this.popState();\n this.popState();\n return 55;\n case 11:\n return 54;\n case 12:\n return 11;\n case 13:\n break;\n case 14:\n return 9;\n case 15:\n return 31;\n case 16:\n return 51;\n case 17:\n return 4;\n case 18:\n this.begin(\"block\");\n return 20;\n case 19:\n return 39;\n case 20:\n break;\n case 21:\n return 40;\n case 22:\n return 37;\n case 23:\n return 37;\n case 24:\n return 41;\n case 25:\n break;\n case 26:\n this.popState();\n return 22;\n case 27:\n return yy_.yytext[0];\n case 28:\n return 44;\n case 29:\n return 46;\n case 30:\n return 46;\n case 31:\n return 46;\n case 32:\n return 44;\n case 33:\n return 44;\n case 34:\n return 45;\n case 35:\n return 45;\n case 36:\n return 45;\n case 37:\n return 45;\n case 38:\n return 45;\n case 39:\n return 46;\n case 40:\n return 45;\n case 41:\n return 46;\n case 42:\n return 47;\n case 43:\n return 47;\n case 44:\n return 47;\n case 45:\n return 47;\n case 46:\n return 44;\n case 47:\n return 45;\n case 48:\n return 46;\n case 49:\n return 48;\n case 50:\n return 49;\n case 51:\n return 50;\n case 52:\n return 50;\n case 53:\n return 49;\n case 54:\n return 49;\n case 55:\n return 49;\n case 56:\n return 30;\n case 57:\n return yy_.yytext[0];\n case 58:\n return 6;\n }\n },\n rules: [/^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:[\\s]+)/i, /^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i, /^(?:\"[^\"]*\")/i, /^(?:erDiagram\\b)/i, /^(?:\\{)/i, /^(?:,)/i, /^(?:\\s+)/i, /^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*)/i, /^(?:\"[^\"]*\")/i, /^(?:[\\n]+)/i, /^(?:\\})/i, /^(?:.)/i, /^(?:one or zero\\b)/i, /^(?:one or more\\b)/i, /^(?:one or many\\b)/i, /^(?:1\\+)/i, /^(?:\\|o\\b)/i, /^(?:zero or one\\b)/i, /^(?:zero or more\\b)/i, /^(?:zero or many\\b)/i, /^(?:0\\+)/i, /^(?:\\}o\\b)/i, /^(?:many\\(0\\))/i, /^(?:many\\(1\\))/i, /^(?:many\\b)/i, /^(?:\\}\\|)/i, /^(?:one\\b)/i, /^(?:only one\\b)/i, /^(?:1\\b)/i, /^(?:\\|\\|)/i, /^(?:o\\|)/i, /^(?:o\\{)/i, /^(?:\\|\\{)/i, /^(?:\\s*u\\b)/i, /^(?:\\.\\.)/i, /^(?:--)/i, /^(?:to\\b)/i, /^(?:optionally to\\b)/i, /^(?:\\.-)/i, /^(?:-\\.)/i, /^(?:[A-Za-z][A-Za-z0-9\\-_]*)/i, /^(?:.)/i, /^(?:$)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [5, 6], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3], \"inclusive\": false }, \"acc_title\": { \"rules\": [1], \"inclusive\": false }, \"open_directive\": { \"rules\": [8], \"inclusive\": false }, \"type_directive\": { \"rules\": [9, 10], \"inclusive\": false }, \"arg_directive\": { \"rules\": [10, 11], \"inclusive\": false }, \"block\": { \"rules\": [19, 20, 21, 22, 23, 24, 25, 26, 27], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst erParser = parser;\nlet entities = {};\nlet relationships = [];\nconst Cardinality = {\n ZERO_OR_ONE: \"ZERO_OR_ONE\",\n ZERO_OR_MORE: \"ZERO_OR_MORE\",\n ONE_OR_MORE: \"ONE_OR_MORE\",\n ONLY_ONE: \"ONLY_ONE\",\n MD_PARENT: \"MD_PARENT\"\n};\nconst Identification = {\n NON_IDENTIFYING: \"NON_IDENTIFYING\",\n IDENTIFYING: \"IDENTIFYING\"\n};\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.m.parseDirective(this, statement, context, type);\n};\nconst addEntity = function(name) {\n if (entities[name] === void 0) {\n entities[name] = { attributes: [] };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Added new entity :\", name);\n }\n return entities[name];\n};\nconst getEntities = () => entities;\nconst addAttributes = function(entityName, attribs) {\n let entity = addEntity(entityName);\n let i;\n for (i = attribs.length - 1; i >= 0; i--) {\n entity.attributes.push(attribs[i]);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Added attribute \", attribs[i].attributeName);\n }\n};\nconst addRelationship = function(entA, rolA, entB, rSpec) {\n let rel = {\n entityA: entA,\n roleA: rolA,\n entityB: entB,\n relSpec: rSpec\n };\n relationships.push(rel);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Added new relationship :\", rel);\n};\nconst getRelationships = () => relationships;\nconst clear = function() {\n entities = {};\n relationships = [];\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.v)();\n};\nconst erDb = {\n Cardinality,\n Identification,\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().er,\n addEntity,\n addAttributes,\n getEntities,\n addRelationship,\n getRelationships,\n clear,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.g,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.b,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.a,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.t\n};\nconst ERMarkers = {\n ONLY_ONE_START: \"ONLY_ONE_START\",\n ONLY_ONE_END: \"ONLY_ONE_END\",\n ZERO_OR_ONE_START: \"ZERO_OR_ONE_START\",\n ZERO_OR_ONE_END: \"ZERO_OR_ONE_END\",\n ONE_OR_MORE_START: \"ONE_OR_MORE_START\",\n ONE_OR_MORE_END: \"ONE_OR_MORE_END\",\n ZERO_OR_MORE_START: \"ZERO_OR_MORE_START\",\n ZERO_OR_MORE_END: \"ZERO_OR_MORE_END\",\n MD_PARENT_END: \"MD_PARENT_END\",\n MD_PARENT_START: \"MD_PARENT_START\"\n};\nconst insertMarkers = function(elem, conf2) {\n let marker;\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_START).attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.MD_PARENT_END).attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18 M15,0 L15,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONLY_ONE_END).attr(\"refX\", 18).attr(\"refY\", 9).attr(\"markerWidth\", 18).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,0 L3,18 M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_START).attr(\"refX\", 0).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 21).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M9,0 L9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_ONE_END).attr(\"refX\", 30).attr(\"refY\", 9).attr(\"markerWidth\", 30).attr(\"markerHeight\", 18).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 9).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,0 L21,18\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ONE_OR_MORE_END).attr(\"refX\", 27).attr(\"refY\", 18).attr(\"markerWidth\", 45).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\").append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_START).attr(\"refX\", 18).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 48).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M0,18 Q18,0 36,18 Q18,36 0,18\");\n marker = elem.append(\"defs\").append(\"marker\").attr(\"id\", ERMarkers.ZERO_OR_MORE_END).attr(\"refX\", 39).attr(\"refY\", 18).attr(\"markerWidth\", 57).attr(\"markerHeight\", 36).attr(\"orient\", \"auto\");\n marker.append(\"circle\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"white\").attr(\"cx\", 9).attr(\"cy\", 18).attr(\"r\", 6);\n marker.append(\"path\").attr(\"stroke\", conf2.stroke).attr(\"fill\", \"none\").attr(\"d\", \"M21,18 Q39,0 57,18 Q39,36 21,18\");\n return;\n};\nconst erMarkers = {\n ERMarkers,\n insertMarkers\n};\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\nlet conf = {};\nlet entityNameIds = /* @__PURE__ */ new Map();\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n const heightPadding = conf.entityPadding / 3;\n const widthPadding = conf.entityPadding / 3;\n const attrFontSize = conf.fontSize * 0.85;\n const labelBBox = entityTextNode.node().getBBox();\n const attributeNodes = [];\n let hasKeyType = false;\n let hasComment = false;\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeyWidth = 0;\n let maxCommentWidth = 0;\n let cumulativeHeight = labelBBox.height + heightPadding * 2;\n let attrNum = 1;\n attributes.forEach((item) => {\n if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) {\n hasKeyType = true;\n }\n if (item.attributeComment !== void 0) {\n hasComment = true;\n }\n });\n attributes.forEach((item) => {\n const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n let nodeHeight = 0;\n const attributeType = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.x)(item.attributeType);\n const typeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-type`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(attributeType);\n const nameNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-name`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeName);\n const attributeNode = {};\n attributeNode.tn = typeNode;\n attributeNode.nn = nameNode;\n const typeBBox = typeNode.node().getBBox();\n const nameBBox = nameNode.node().getBBox();\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n if (hasKeyType) {\n const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(\",\") : \"\";\n const keyTypeNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-key`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(keyTypeNodeText);\n attributeNode.kn = keyTypeNode;\n const keyTypeBBox = keyTypeNode.node().getBBox();\n maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n }\n if (hasComment) {\n const commentNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", `${attrPrefix}-comment`).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"left\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", attrFontSize + \"px\").text(item.attributeComment || \"\");\n attributeNode.cn = commentNode;\n const commentNodeBBox = commentNode.node().getBBox();\n maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n }\n attributeNode.height = nodeHeight;\n attributeNodes.push(attributeNode);\n cumulativeHeight += nodeHeight + heightPadding * 2;\n attrNum += 1;\n });\n let widthPaddingFactor = 4;\n if (hasKeyType) {\n widthPaddingFactor += 2;\n }\n if (hasComment) {\n widthPaddingFactor += 2;\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n const bBox = {\n width: Math.max(\n conf.minEntityWidth,\n Math.max(\n labelBBox.width + conf.entityPadding * 2,\n maxWidth + widthPadding * widthPaddingFactor\n )\n ),\n height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2)\n };\n if (attributes.length > 0) {\n const spareColumnWidth = Math.max(\n 0,\n (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n );\n entityTextNode.attr(\n \"transform\",\n \"translate(\" + bBox.width / 2 + \",\" + (heightPadding + labelBBox.height / 2) + \")\"\n );\n let heightOffset = labelBBox.height + heightPadding * 2;\n let attribStyle = \"attributeBoxOdd\";\n attributeNodes.forEach((attributeNode) => {\n const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n attributeNode.tn.attr(\"transform\", \"translate(\" + widthPadding + \",\" + alignY + \")\");\n const typeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", 0).attr(\"y\", heightOffset).attr(\"width\", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n const nameXOffset = parseFloat(typeRect.attr(\"x\")) + parseFloat(typeRect.attr(\"width\"));\n attributeNode.nn.attr(\n \"transform\",\n \"translate(\" + (nameXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const nameRect = groupNode.insert(\"rect\", \"#\" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", nameXOffset).attr(\"y\", heightOffset).attr(\"width\", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n let keyTypeAndCommentXOffset = parseFloat(nameRect.attr(\"x\")) + parseFloat(nameRect.attr(\"width\"));\n if (hasKeyType) {\n attributeNode.kn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n const keyTypeRect = groupNode.insert(\"rect\", \"#\" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr(\"x\")) + parseFloat(keyTypeRect.attr(\"width\"));\n }\n if (hasComment) {\n attributeNode.cn.attr(\n \"transform\",\n \"translate(\" + (keyTypeAndCommentXOffset + widthPadding) + \",\" + alignY + \")\"\n );\n groupNode.insert(\"rect\", \"#\" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, \"true\").attr(\"x\", keyTypeAndCommentXOffset).attr(\"y\", heightOffset).attr(\"width\", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr(\"height\", attributeNode.height + heightPadding * 2);\n }\n heightOffset += attributeNode.height + heightPadding * 2;\n attribStyle = attribStyle === \"attributeBoxOdd\" ? \"attributeBoxEven\" : \"attributeBoxOdd\";\n });\n } else {\n bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n entityTextNode.attr(\"transform\", \"translate(\" + bBox.width / 2 + \",\" + bBox.height / 2 + \")\");\n }\n return bBox;\n};\nconst drawEntities = function(svgNode, entities2, graph) {\n const keys = Object.keys(entities2);\n let firstOne;\n keys.forEach(function(entityName) {\n const entityId = generateId(entityName, \"entity\");\n entityNameIds.set(entityName, entityId);\n const groupNode = svgNode.append(\"g\").attr(\"id\", entityId);\n firstOne = firstOne === void 0 ? entityId : firstOne;\n const textId = \"text-\" + entityId;\n const textNode = groupNode.append(\"text\").classed(\"er entityLabel\", true).attr(\"id\", textId).attr(\"x\", 0).attr(\"y\", 0).style(\"dominant-baseline\", \"middle\").style(\"text-anchor\", \"middle\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(entityName);\n const { width: entityWidth, height: entityHeight } = drawAttributes(\n groupNode,\n textNode,\n entities2[entityName].attributes\n );\n const rectNode = groupNode.insert(\"rect\", \"#\" + textId).classed(\"er entityBox\", true).attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", entityWidth).attr(\"height\", entityHeight);\n const rectBBox = rectNode.node().getBBox();\n graph.setNode(entityId, {\n width: rectBBox.width,\n height: rectBBox.height,\n shape: \"rect\",\n id: entityId\n });\n });\n return firstOne;\n};\nconst adjustEntities = function(svgNode, graph) {\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n svgNode.select(\"#\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y - graph.node(v).height / 2) + \" )\"\n );\n }\n });\n};\nconst getEdgeName = function(rel) {\n return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, \"\");\n};\nconst addRelationships = function(relationships2, g) {\n relationships2.forEach(function(r) {\n g.setEdge(\n entityNameIds.get(r.entityA),\n entityNameIds.get(r.entityB),\n { relationship: r },\n getEdgeName(r)\n );\n });\n return relationships2;\n};\nlet relCnt = 0;\nconst drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) {\n relCnt++;\n const edge = g.edge(\n entityNameIds.get(rel.entityA),\n entityNameIds.get(rel.entityB),\n getEdgeName(rel)\n );\n const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_1__.line)().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(d3__WEBPACK_IMPORTED_MODULE_1__.curveBasis);\n const svgPath = svg.insert(\"path\", \"#\" + insert).classed(\"er relationshipLine\", true).attr(\"d\", lineFunction(edge.points)).style(\"stroke\", conf.stroke).style(\"fill\", \"none\");\n if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n svgPath.attr(\"stroke-dasharray\", \"8,8\");\n }\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n switch (rel.relSpec.cardA) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_END + \")\");\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_END + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_END + \")\");\n break;\n }\n switch (rel.relSpec.cardB) {\n case diagObj.db.Cardinality.ZERO_OR_ONE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_ONE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ZERO_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ZERO_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONE_OR_MORE:\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONE_OR_MORE_START + \")\"\n );\n break;\n case diagObj.db.Cardinality.ONLY_ONE:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.ONLY_ONE_START + \")\");\n break;\n case diagObj.db.Cardinality.MD_PARENT:\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + erMarkers.ERMarkers.MD_PARENT_START + \")\");\n break;\n }\n const len = svgPath.node().getTotalLength();\n const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n const labelId = \"rel\" + relCnt;\n const labelNode = svg.append(\"text\").classed(\"er relationshipLabel\", true).attr(\"id\", labelId).attr(\"x\", labelPoint.x).attr(\"y\", labelPoint.y).style(\"text-anchor\", \"middle\").style(\"dominant-baseline\", \"middle\").style(\"font-family\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().fontFamily).style(\"font-size\", conf.fontSize + \"px\").text(rel.roleA);\n const labelBBox = labelNode.node().getBBox();\n svg.insert(\"rect\", \"#\" + labelId).classed(\"er relationshipLabelBox\", true).attr(\"x\", labelPoint.x - labelBBox.width / 2).attr(\"y\", labelPoint.y - labelBBox.height / 2).attr(\"width\", labelBBox.width).attr(\"height\", labelBBox.height);\n};\nconst draw = function(text, id, _version, diagObj) {\n conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().er;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Drawing ER diagram\");\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"body\");\n const svg = root.select(`[id='${id}']`);\n erMarkers.insertMarkers(svg, conf);\n let g;\n g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({\n multigraph: true,\n directed: true,\n compound: false\n }).setGraph({\n rankdir: conf.layoutDirection,\n marginx: 20,\n marginy: 20,\n nodesep: 100,\n edgesep: 100,\n ranksep: 100\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n const relationships2 = addRelationships(diagObj.db.getRelationships(), g);\n (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__.layout)(g);\n adjustEntities(svg, g);\n relationships2.forEach(function(rel) {\n drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n });\n const padding = conf.diagramPadding;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.u.insertTitle(svg, \"entityTitleText\", conf.titleTopMargin, diagObj.db.getDiagramTitle());\n const svgBounds = svg.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, height, width, conf.useMaxWidth);\n svg.attr(\"viewBox\", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n};\nconst MERMAID_ERDIAGRAM_UUID = \"28e9f9db-3c8d-5aa5-9faf-44286ae5937c\";\nfunction generateId(str = \"\", prefix = \"\") {\n const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, \"\");\n return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${(0,uuid__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\n str,\n MERMAID_ERDIAGRAM_UUID\n )}`;\n}\nfunction strWithHyphen(str = \"\") {\n return str.length > 0 ? `${str}-` : \"\";\n}\nconst erRenderer = {\n setConf,\n draw\n};\nconst getStyles = (options) => `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${options.attributeBackgroundColorOdd};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${options.attributeBackgroundColorEven};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n \n`;\nconst erStyles = getStyles;\nconst diagram = {\n parser: erParser,\n db: erDb,\n renderer: erRenderer,\n styles: erStyles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9lckRpYWdyYW0tZjY5NDYxMDkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUEyUjtBQUM3TjtBQUNoQjtBQUNVO0FBQzlCO0FBQ1A7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQixnL0JBQWcvQjtBQUNoZ0Msa0JBQWtCLG9sQkFBb2xCO0FBQ3RtQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYyxvQ0FBb0MsSUFBSSxRQUFRLG1CQUFtQixNQUFNLEtBQUssb0NBQW9DLElBQUksbUJBQW1CLElBQUksYUFBYSxJQUFJLHlJQUF5SSxJQUFJLFdBQVcsSUFBSSw4QkFBOEIseUNBQXlDLFdBQVcscUJBQXFCLDZGQUE2RixxRUFBcUUsMEVBQTBFLEtBQUssYUFBYSxJQUFJLGFBQWEsSUFBSSxhQUFhLHVEQUF1RCxhQUFhLElBQUkscUJBQXFCLElBQUksYUFBYSxvQkFBb0IsMEJBQTBCLElBQUksOENBQThDLElBQUksa0NBQWtDLDRKQUE0SixpQkFBaUIsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEscUJBQXFCLDhDQUE4QyxJQUFJLHFCQUFxQixJQUFJLGFBQWEsSUFBSSxxREFBcUQsc0NBQXNDLGFBQWEsSUFBSSwrQ0FBK0MscUJBQXFCLGFBQWEsb0JBQW9CLDBDQUEwQyw4SkFBOEosOEJBQThCLDBGQUEwRixpQkFBaUI7QUFDdHpELHNCQUFzQiwyRUFBMkU7QUFDakc7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUCw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLG9JQUFvSSxnQkFBZ0Is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SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsc0VBQU07QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLCtEQUFpQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFnQjtBQUNsQix5QkFBeUIsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE9BQU87QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHNCQUFzQixFQUFFLDZCQUE2QixFQUFFLGdEQUFFO0FBQ3JFO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDZCQUE2QixJQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLGNBQWM7QUFDZDs7QUFFQTtBQUNBLFlBQVk7QUFDWixjQUFjO0FBQ2Q7O0FBRUE7QUFDQSxhQUFhO0FBQ2IsY0FBYztBQUNkOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFtQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQW1CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2VyRGlhZ3JhbS1mNjk0NjEwOS5qcz9mMDAyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIG0gYXMgbWVybWFpZEFQSSwgbCBhcyBsb2csIHYgYXMgY2xlYXIkMSwgdSBhcyB1dGlscywgaSBhcyBjb25maWd1cmVTdmdTaXplLCB4IGFzIHBhcnNlR2VuZXJpY1R5cGVzIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgc2VsZWN0LCBsaW5lLCBjdXJ2ZUJhc2lzIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB2NSB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpXG4gICAgICA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCAkVjAgPSBbMSwgMl0sICRWMSA9IFsxLCA1XSwgJFYyID0gWzYsIDksIDExLCAyMywgMjUsIDI3LCAyOSwgMzAsIDMxLCA1Ml0sICRWMyA9IFsxLCAxN10sICRWNCA9IFsxLCAxOF0sICRWNSA9IFsxLCAxOV0sICRWNiA9IFsxLCAyMF0sICRWNyA9IFsxLCAyMV0sICRWOCA9IFsxLCAyMl0sICRWOSA9IFsxLCAyNV0sICRWYSA9IFsxLCAzMF0sICRWYiA9IFsxLCAzMV0sICRWYyA9IFsxLCAzMl0sICRWZCA9IFsxLCAzM10sICRWZSA9IFsxLCAzNF0sICRWZiA9IFs2LCA5LCAxMSwgMTUsIDIwLCAyMywgMjUsIDI3LCAyOSwgMzAsIDMxLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDUyXSwgJFZnID0gWzEsIDQ2XSwgJFZoID0gWzMwLCAzMSwgNDksIDUwXSwgJFZpID0gWzQsIDYsIDksIDExLCAyMywgMjUsIDI3LCAyOSwgMzAsIDMxLCA1Ml0sICRWaiA9IFs0NCwgNDUsIDQ2LCA0NywgNDhdLCAkVmsgPSBbMjIsIDM3XSwgJFZsID0gWzEsIDY2XSwgJFZtID0gWzEsIDY1XSwgJFZuID0gWzIyLCAzNywgMzksIDQxXTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIkVSX0RJQUdSQU1cIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcIkVPRlwiOiA2LCBcImRpcmVjdGl2ZVwiOiA3LCBcImxpbmVcIjogOCwgXCJTUEFDRVwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJORVdMSU5FXCI6IDExLCBcIm9wZW5EaXJlY3RpdmVcIjogMTIsIFwidHlwZURpcmVjdGl2ZVwiOiAxMywgXCJjbG9zZURpcmVjdGl2ZVwiOiAxNCwgXCI6XCI6IDE1LCBcImFyZ0RpcmVjdGl2ZVwiOiAxNiwgXCJlbnRpdHlOYW1lXCI6IDE3LCBcInJlbFNwZWNcIjogMTgsIFwicm9sZVwiOiAxOSwgXCJCTE9DS19TVEFSVFwiOiAyMCwgXCJhdHRyaWJ1dGVzXCI6IDIxLCBcIkJMT0NLX1NUT1BcIjogMjIsIFwidGl0bGVcIjogMjMsIFwidGl0bGVfdmFsdWVcIjogMjQsIFwiYWNjX3RpdGxlXCI6IDI1LCBcImFjY190aXRsZV92YWx1ZVwiOiAyNiwgXCJhY2NfZGVzY3JcIjogMjcsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDI4LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMjksIFwiQUxQSEFOVU1cIjogMzAsIFwiRU5USVRZX05BTUVcIjogMzEsIFwiYXR0cmlidXRlXCI6IDMyLCBcImF0dHJpYnV0ZVR5cGVcIjogMzMsIFwiYXR0cmlidXRlTmFtZVwiOiAzNCwgXCJhdHRyaWJ1dGVLZXlUeXBlTGlzdFwiOiAzNSwgXCJhdHRyaWJ1dGVDb21tZW50XCI6IDM2LCBcIkFUVFJJQlVURV9XT1JEXCI6IDM3LCBcImF0dHJpYnV0ZUtleVR5cGVcIjogMzgsIFwiQ09NTUFcIjogMzksIFwiQVRUUklCVVRFX0tFWVwiOiA0MCwgXCJDT01NRU5UXCI6IDQxLCBcImNhcmRpbmFsaXR5XCI6IDQyLCBcInJlbFR5cGVcIjogNDMsIFwiWkVST19PUl9PTkVcIjogNDQsIFwiWkVST19PUl9NT1JFXCI6IDQ1LCBcIk9ORV9PUl9NT1JFXCI6IDQ2LCBcIk9OTFlfT05FXCI6IDQ3LCBcIk1EX1BBUkVOVFwiOiA0OCwgXCJOT05fSURFTlRJRllJTkdcIjogNDksIFwiSURFTlRJRllJTkdcIjogNTAsIFwiV09SRFwiOiA1MSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiA1MiwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiA1MywgXCJhcmdfZGlyZWN0aXZlXCI6IDU0LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiA1NSwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiRVJfRElBR1JBTVwiLCA2OiBcIkVPRlwiLCA5OiBcIlNQQUNFXCIsIDExOiBcIk5FV0xJTkVcIiwgMTU6IFwiOlwiLCAyMDogXCJCTE9DS19TVEFSVFwiLCAyMjogXCJCTE9DS19TVE9QXCIsIDIzOiBcInRpdGxlXCIsIDI0OiBcInRpdGxlX3ZhbHVlXCIsIDI1OiBcImFjY190aXRsZVwiLCAyNjogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMjc6IFwiYWNjX2Rlc2NyXCIsIDI4OiBcImFjY19kZXNjcl92YWx1ZVwiLCAyOTogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDMwOiBcIkFMUEhBTlVNXCIsIDMxOiBcIkVOVElUWV9OQU1FXCIsIDM3OiBcIkFUVFJJQlVURV9XT1JEXCIsIDM5OiBcIkNPTU1BXCIsIDQwOiBcIkFUVFJJQlVURV9LRVlcIiwgNDE6IFwiQ09NTUVOVFwiLCA0NDogXCJaRVJPX09SX09ORVwiLCA0NTogXCJaRVJPX09SX01PUkVcIiwgNDY6IFwiT05FX09SX01PUkVcIiwgNDc6IFwiT05MWV9PTkVcIiwgNDg6IFwiTURfUEFSRU5UXCIsIDQ5OiBcIk5PTl9JREVOVElGWUlOR1wiLCA1MDogXCJJREVOVElGWUlOR1wiLCA1MTogXCJXT1JEXCIsIDUyOiBcIm9wZW5fZGlyZWN0aXZlXCIsIDUzOiBcInR5cGVfZGlyZWN0aXZlXCIsIDU0OiBcImFyZ19kaXJlY3RpdmVcIiwgNTU6IFwiY2xvc2VfZGlyZWN0aXZlXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFszLCAyXSwgWzUsIDBdLCBbNSwgMl0sIFs4LCAyXSwgWzgsIDFdLCBbOCwgMV0sIFs4LCAxXSwgWzcsIDRdLCBbNywgNl0sIFsxMCwgMV0sIFsxMCwgNV0sIFsxMCwgNF0sIFsxMCwgM10sIFsxMCwgMV0sIFsxMCwgMl0sIFsxMCwgMl0sIFsxMCwgMl0sIFsxMCwgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsyMSwgMV0sIFsyMSwgMl0sIFszMiwgMl0sIFszMiwgM10sIFszMiwgM10sIFszMiwgNF0sIFszMywgMV0sIFszNCwgMV0sIFszNSwgMV0sIFszNSwgM10sIFszOCwgMV0sIFszNiwgMV0sIFsxOCwgM10sIFs0MiwgMV0sIFs0MiwgMV0sIFs0MiwgMV0sIFs0MiwgMV0sIFs0MiwgMV0sIFs0MywgMV0sIFs0MywgMV0sIFsxOSwgMV0sIFsxOSwgMV0sIFsxOSwgMV0sIFsxMiwgMV0sIFsxMywgMV0sIFsxNiwgMV0sIFsxNCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMCAtIDRdKTtcbiAgICAgICAgICB5eS5hZGRFbnRpdHkoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gNF0sICQkWyQwXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAzXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gM10pO1xuICAgICAgICAgIHl5LmFkZEF0dHJpYnV0ZXMoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICBjYXNlIDQyOlxuICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAkJFskMF0ucHVzaCgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgdGhpcy4kID0geyBhdHRyaWJ1dGVUeXBlOiAkJFskMCAtIDFdLCBhdHRyaWJ1dGVOYW1lOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB0aGlzLiQgPSB7IGF0dHJpYnV0ZVR5cGU6ICQkWyQwIC0gMl0sIGF0dHJpYnV0ZU5hbWU6ICQkWyQwIC0gMV0sIGF0dHJpYnV0ZUtleVR5cGVMaXN0OiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB0aGlzLiQgPSB7IGF0dHJpYnV0ZVR5cGU6ICQkWyQwIC0gMl0sIGF0dHJpYnV0ZU5hbWU6ICQkWyQwIC0gMV0sIGF0dHJpYnV0ZUNvbW1lbnQ6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHRoaXMuJCA9IHsgYXR0cmlidXRlVHlwZTogJCRbJDAgLSAzXSwgYXR0cmlidXRlTmFtZTogJCRbJDAgLSAyXSwgYXR0cmlidXRlS2V5VHlwZUxpc3Q6ICQkWyQwIC0gMV0sIGF0dHJpYnV0ZUNvbW1lbnQ6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAkJFskMCAtIDJdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB0aGlzLiQgPSB7IGNhcmRBOiAkJFskMF0sIHJlbFR5cGU6ICQkWyQwIC0gMV0sIGNhcmRCOiAkJFskMCAtIDJdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkNhcmRpbmFsaXR5Lk9OTFlfT05FO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgdGhpcy4kID0geXkuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCIlJXtcIiwgXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgJCRbJDBdID0gJCRbJDBdLnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwifSUlXCIsIFwiY2xvc2VfZGlyZWN0aXZlXCIsIFwiZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogJFYwLCA3OiAzLCAxMjogNCwgNTI6ICRWMSB9LCB7IDE6IFszXSB9LCBvKCRWMiwgWzIsIDNdLCB7IDU6IDYgfSksIHsgMzogNywgNDogJFYwLCA3OiAzLCAxMjogNCwgNTI6ICRWMSB9LCB7IDEzOiA4LCA1MzogWzEsIDldIH0sIHsgNTM6IFsyLCA0NV0gfSwgeyA2OiBbMSwgMTBdLCA3OiAxNSwgODogMTEsIDk6IFsxLCAxMl0sIDEwOiAxMywgMTE6IFsxLCAxNF0sIDEyOiA0LCAxNzogMTYsIDIzOiAkVjMsIDI1OiAkVjQsIDI3OiAkVjUsIDI5OiAkVjYsIDMwOiAkVjcsIDMxOiAkVjgsIDUyOiAkVjEgfSwgeyAxOiBbMiwgMl0gfSwgeyAxNDogMjMsIDE1OiBbMSwgMjRdLCA1NTogJFY5IH0sIG8oWzE1LCA1NV0sIFsyLCA0Nl0pLCBvKCRWMiwgWzIsIDhdLCB7IDE6IFsyLCAxXSB9KSwgbygkVjIsIFsyLCA0XSksIHsgNzogMTUsIDEwOiAyNiwgMTI6IDQsIDE3OiAxNiwgMjM6ICRWMywgMjU6ICRWNCwgMjc6ICRWNSwgMjk6ICRWNiwgMzA6ICRWNywgMzE6ICRWOCwgNTI6ICRWMSB9LCBvKCRWMiwgWzIsIDZdKSwgbygkVjIsIFsyLCA3XSksIG8oJFYyLCBbMiwgMTFdKSwgbygkVjIsIFsyLCAxNV0sIHsgMTg6IDI3LCA0MjogMjksIDIwOiBbMSwgMjhdLCA0NDogJFZhLCA0NTogJFZiLCA0NjogJFZjLCA0NzogJFZkLCA0ODogJFZlIH0pLCB7IDI0OiBbMSwgMzVdIH0sIHsgMjY6IFsxLCAzNl0gfSwgeyAyODogWzEsIDM3XSB9LCBvKCRWMiwgWzIsIDE5XSksIG8oJFZmLCBbMiwgMjBdKSwgbygkVmYsIFsyLCAyMV0pLCB7IDExOiBbMSwgMzhdIH0sIHsgMTY6IDM5LCA1NDogWzEsIDQwXSB9LCB7IDExOiBbMiwgNDhdIH0sIG8oJFYyLCBbMiwgNV0pLCB7IDE3OiA0MSwgMzA6ICRWNywgMzE6ICRWOCB9LCB7IDIxOiA0MiwgMjI6IFsxLCA0M10sIDMyOiA0NCwgMzM6IDQ1LCAzNzogJFZnIH0sIHsgNDM6IDQ3LCA0OTogWzEsIDQ4XSwgNTA6IFsxLCA0OV0gfSwgbygkVmgsIFsyLCAzNV0pLCBvKCRWaCwgWzIsIDM2XSksIG8oJFZoLCBbMiwgMzddKSwgbygkVmgsIFsyLCAzOF0pLCBvKCRWaCwgWzIsIDM5XSksIG8oJFYyLCBbMiwgMTZdKSwgbygkVjIsIFsyLCAxN10pLCBvKCRWMiwgWzIsIDE4XSksIG8oJFZpLCBbMiwgOV0pLCB7IDE0OiA1MCwgNTU6ICRWOSB9LCB7IDU1OiBbMiwgNDddIH0sIHsgMTU6IFsxLCA1MV0gfSwgeyAyMjogWzEsIDUyXSB9LCBvKCRWMiwgWzIsIDE0XSksIHsgMjE6IDUzLCAyMjogWzIsIDIyXSwgMzI6IDQ0LCAzMzogNDUsIDM3OiAkVmcgfSwgeyAzNDogNTQsIDM3OiBbMSwgNTVdIH0sIHsgMzc6IFsyLCAyOF0gfSwgeyA0MjogNTYsIDQ0OiAkVmEsIDQ1OiAkVmIsIDQ2OiAkVmMsIDQ3OiAkVmQsIDQ4OiAkVmUgfSwgbygkVmosIFsyLCA0MF0pLCBvKCRWaiwgWzIsIDQxXSksIHsgMTE6IFsxLCA1N10gfSwgeyAxOTogNTgsIDMwOiBbMSwgNjFdLCAzMTogWzEsIDYwXSwgNTE6IFsxLCA1OV0gfSwgbygkVjIsIFsyLCAxM10pLCB7IDIyOiBbMiwgMjNdIH0sIG8oJFZrLCBbMiwgMjRdLCB7IDM1OiA2MiwgMzY6IDYzLCAzODogNjQsIDQwOiAkVmwsIDQxOiAkVm0gfSksIG8oWzIyLCAzNywgNDAsIDQxXSwgWzIsIDI5XSksIG8oWzMwLCAzMV0sIFsyLCAzNF0pLCBvKCRWaSwgWzIsIDEwXSksIG8oJFYyLCBbMiwgMTJdKSwgbygkVjIsIFsyLCA0Ml0pLCBvKCRWMiwgWzIsIDQzXSksIG8oJFYyLCBbMiwgNDRdKSwgbygkVmssIFsyLCAyNV0sIHsgMzY6IDY3LCAzOTogWzEsIDY4XSwgNDE6ICRWbSB9KSwgbygkVmssIFsyLCAyNl0pLCBvKCRWbiwgWzIsIDMwXSksIG8oJFZrLCBbMiwgMzNdKSwgbygkVm4sIFsyLCAzMl0pLCBvKCRWaywgWzIsIDI3XSksIHsgMzg6IDY5LCA0MDogJFZsIH0sIG8oJFZuLCBbMiwgMzFdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgNTogWzIsIDQ1XSwgNzogWzIsIDJdLCAyNTogWzIsIDQ4XSwgNDA6IFsyLCA0N10sIDQ2OiBbMiwgMjhdLCA1MzogWzIsIDIzXSB9LFxuICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgdmFyIHN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBsZXhlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiBmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA1NTtcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYmxvY2tcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHJldHVybiA0MDtcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMzc7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIHl5Xy55eXRleHRbMF07XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gNDU7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgICByZXR1cm4geXlfLnl5dGV4dFswXTtcbiAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBydWxlczogWy9eKD86YWNjVGl0bGVcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqXFx7XFxzKikvaSwgL14oPzpbXFx9XSkvaSwgL14oPzpbXlxcfV0qKS9pLCAvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzpbXFxuXSspL2ksIC9eKD86XFxzKykvaSwgL14oPzpbXFxzXSspL2ksIC9eKD86XCJbXlwiJVxcclxcblxcdlxcYlxcXFxdK1wiKS9pLCAvXig/OlwiW15cIl0qXCIpL2ksIC9eKD86ZXJEaWFncmFtXFxiKS9pLCAvXig/OlxceykvaSwgL14oPzosKS9pLCAvXig/OlxccyspL2ksIC9eKD86XFxiKCg/OlBLKXwoPzpGSyl8KD86VUspKVxcYikvaSwgL14oPzooLio/KVt+XSguKj8pKlt+XSkvaSwgL14oPzpbQS1aYS16X11bQS1aYS16MC05XFwtX1xcW1xcXVxcKFxcKV0qKS9pLCAvXig/OlwiW15cIl0qXCIpL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OlxcfSkvaSwgL14oPzouKS9pLCAvXig/Om9uZSBvciB6ZXJvXFxiKS9pLCAvXig/Om9uZSBvciBtb3JlXFxiKS9pLCAvXig/Om9uZSBvciBtYW55XFxiKS9pLCAvXig/OjFcXCspL2ksIC9eKD86XFx8b1xcYikvaSwgL14oPzp6ZXJvIG9yIG9uZVxcYikvaSwgL14oPzp6ZXJvIG9yIG1vcmVcXGIpL2ksIC9eKD86emVybyBvciBtYW55XFxiKS9pLCAvXig/OjBcXCspL2ksIC9eKD86XFx9b1xcYikvaSwgL14oPzptYW55XFwoMFxcKSkvaSwgL14oPzptYW55XFwoMVxcKSkvaSwgL14oPzptYW55XFxiKS9pLCAvXig/OlxcfVxcfCkvaSwgL14oPzpvbmVcXGIpL2ksIC9eKD86b25seSBvbmVcXGIpL2ksIC9eKD86MVxcYikvaSwgL14oPzpcXHxcXHwpL2ksIC9eKD86b1xcfCkvaSwgL14oPzpvXFx7KS9pLCAvXig/OlxcfFxceykvaSwgL14oPzpcXHMqdVxcYikvaSwgL14oPzpcXC5cXC4pL2ksIC9eKD86LS0pL2ksIC9eKD86dG9cXGIpL2ksIC9eKD86b3B0aW9uYWxseSB0b1xcYikvaSwgL14oPzpcXC4tKS9pLCAvXig/Oi1cXC4pL2ksIC9eKD86W0EtWmEtel1bQS1aYS16MC05XFwtX10qKS9pLCAvXig/Oi4pL2ksIC9eKD86JCkvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzUsIDZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm9wZW5fZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFs5LCAxMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYXJnX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzEwLCAxMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYmxvY2tcIjogeyBcInJ1bGVzXCI6IFsxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMiwgNCwgNywgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4XSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG5jb25zdCBlclBhcnNlciA9IHBhcnNlcjtcbmxldCBlbnRpdGllcyA9IHt9O1xubGV0IHJlbGF0aW9uc2hpcHMgPSBbXTtcbmNvbnN0IENhcmRpbmFsaXR5ID0ge1xuICBaRVJPX09SX09ORTogXCJaRVJPX09SX09ORVwiLFxuICBaRVJPX09SX01PUkU6IFwiWkVST19PUl9NT1JFXCIsXG4gIE9ORV9PUl9NT1JFOiBcIk9ORV9PUl9NT1JFXCIsXG4gIE9OTFlfT05FOiBcIk9OTFlfT05FXCIsXG4gIE1EX1BBUkVOVDogXCJNRF9QQVJFTlRcIlxufTtcbmNvbnN0IElkZW50aWZpY2F0aW9uID0ge1xuICBOT05fSURFTlRJRllJTkc6IFwiTk9OX0lERU5USUZZSU5HXCIsXG4gIElERU5USUZZSU5HOiBcIklERU5USUZZSU5HXCJcbn07XG5jb25zdCBwYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSkge1xuICBtZXJtYWlkQVBJLnBhcnNlRGlyZWN0aXZlKHRoaXMsIHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSk7XG59O1xuY29uc3QgYWRkRW50aXR5ID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoZW50aXRpZXNbbmFtZV0gPT09IHZvaWQgMCkge1xuICAgIGVudGl0aWVzW25hbWVdID0geyBhdHRyaWJ1dGVzOiBbXSB9O1xuICAgIGxvZy5pbmZvKFwiQWRkZWQgbmV3IGVudGl0eSA6XCIsIG5hbWUpO1xuICB9XG4gIHJldHVybiBlbnRpdGllc1tuYW1lXTtcbn07XG5jb25zdCBnZXRFbnRpdGllcyA9ICgpID0+IGVudGl0aWVzO1xuY29uc3QgYWRkQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVudGl0eU5hbWUsIGF0dHJpYnMpIHtcbiAgbGV0IGVudGl0eSA9IGFkZEVudGl0eShlbnRpdHlOYW1lKTtcbiAgbGV0IGk7XG4gIGZvciAoaSA9IGF0dHJpYnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBlbnRpdHkuYXR0cmlidXRlcy5wdXNoKGF0dHJpYnNbaV0pO1xuICAgIGxvZy5kZWJ1ZyhcIkFkZGVkIGF0dHJpYnV0ZSBcIiwgYXR0cmlic1tpXS5hdHRyaWJ1dGVOYW1lKTtcbiAgfVxufTtcbmNvbnN0IGFkZFJlbGF0aW9uc2hpcCA9IGZ1bmN0aW9uKGVudEEsIHJvbEEsIGVudEIsIHJTcGVjKSB7XG4gIGxldCByZWwgPSB7XG4gICAgZW50aXR5QTogZW50QSxcbiAgICByb2xlQTogcm9sQSxcbiAgICBlbnRpdHlCOiBlbnRCLFxuICAgIHJlbFNwZWM6IHJTcGVjXG4gIH07XG4gIHJlbGF0aW9uc2hpcHMucHVzaChyZWwpO1xuICBsb2cuZGVidWcoXCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDpcIiwgcmVsKTtcbn07XG5jb25zdCBnZXRSZWxhdGlvbnNoaXBzID0gKCkgPT4gcmVsYXRpb25zaGlwcztcbmNvbnN0IGNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIGVudGl0aWVzID0ge307XG4gIHJlbGF0aW9uc2hpcHMgPSBbXTtcbiAgY2xlYXIkMSgpO1xufTtcbmNvbnN0IGVyRGIgPSB7XG4gIENhcmRpbmFsaXR5LFxuICBJZGVudGlmaWNhdGlvbixcbiAgcGFyc2VEaXJlY3RpdmUsXG4gIGdldENvbmZpZzogKCkgPT4gZ2V0Q29uZmlnKCkuZXIsXG4gIGFkZEVudGl0eSxcbiAgYWRkQXR0cmlidXRlcyxcbiAgZ2V0RW50aXRpZXMsXG4gIGFkZFJlbGF0aW9uc2hpcCxcbiAgZ2V0UmVsYXRpb25zaGlwcyxcbiAgY2xlYXIsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZVxufTtcbmNvbnN0IEVSTWFya2VycyA9IHtcbiAgT05MWV9PTkVfU1RBUlQ6IFwiT05MWV9PTkVfU1RBUlRcIixcbiAgT05MWV9PTkVfRU5EOiBcIk9OTFlfT05FX0VORFwiLFxuICBaRVJPX09SX09ORV9TVEFSVDogXCJaRVJPX09SX09ORV9TVEFSVFwiLFxuICBaRVJPX09SX09ORV9FTkQ6IFwiWkVST19PUl9PTkVfRU5EXCIsXG4gIE9ORV9PUl9NT1JFX1NUQVJUOiBcIk9ORV9PUl9NT1JFX1NUQVJUXCIsXG4gIE9ORV9PUl9NT1JFX0VORDogXCJPTkVfT1JfTU9SRV9FTkRcIixcbiAgWkVST19PUl9NT1JFX1NUQVJUOiBcIlpFUk9fT1JfTU9SRV9TVEFSVFwiLFxuICBaRVJPX09SX01PUkVfRU5EOiBcIlpFUk9fT1JfTU9SRV9FTkRcIixcbiAgTURfUEFSRU5UX0VORDogXCJNRF9QQVJFTlRfRU5EXCIsXG4gIE1EX1BBUkVOVF9TVEFSVDogXCJNRF9QQVJFTlRfU1RBUlRcIlxufTtcbmNvbnN0IGluc2VydE1hcmtlcnMgPSBmdW5jdGlvbihlbGVtLCBjb25mMikge1xuICBsZXQgbWFya2VyO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuTURfUEFSRU5UX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAwKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5PTkxZX09ORV9TVEFSVCkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgOSkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE4KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDE4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk9OTFlfT05FX0VORCkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTMsMCBMMywxOCBNOSwwIEw5LDE4XCIpO1xuICBtYXJrZXIgPSBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuWkVST19PUl9PTkVfU1RBUlQpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAzMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDIxKS5hdHRyKFwiY3lcIiwgOSkuYXR0cihcInJcIiwgNik7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNOSwwIEw5LDE4XCIpO1xuICBtYXJrZXIgPSBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKS5hdHRyKFwicmVmWFwiLCAzMCkuYXR0cihcInJlZllcIiwgOSkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDMwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDE4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKTtcbiAgbWFya2VyLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJ3aGl0ZVwiKS5hdHRyKFwiY3hcIiwgOSkuYXR0cihcImN5XCIsIDkpLmF0dHIoXCJyXCIsIDYpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTIxLDAgTDIxLDE4XCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQpLmF0dHIoXCJyZWZYXCIsIDE4KS5hdHRyKFwicmVmWVwiLCAxOCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDQ1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDM2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyN1wiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk9ORV9PUl9NT1JFX0VORCkuYXR0cihcInJlZlhcIiwgMjcpLmF0dHIoXCJyZWZZXCIsIDE4KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgNDUpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMzYpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMThcIik7XG4gIG1hcmtlciA9IGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQpLmF0dHIoXCJyZWZYXCIsIDE4KS5hdHRyKFwicmVmWVwiLCAxOCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDU3KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDM2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKTtcbiAgbWFya2VyLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJ3aGl0ZVwiKS5hdHRyKFwiY3hcIiwgNDgpLmF0dHIoXCJjeVwiLCAxOCkuYXR0cihcInJcIiwgNik7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOFwiKTtcbiAgbWFya2VyID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9FTkQpLmF0dHIoXCJyZWZYXCIsIDM5KS5hdHRyKFwicmVmWVwiLCAxOCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDU3KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDM2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKTtcbiAgbWFya2VyLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJ3aGl0ZVwiKS5hdHRyKFwiY3hcIiwgOSkuYXR0cihcImN5XCIsIDE4KS5hdHRyKFwiclwiLCA2KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMThcIik7XG4gIHJldHVybjtcbn07XG5jb25zdCBlck1hcmtlcnMgPSB7XG4gIEVSTWFya2VycyxcbiAgaW5zZXJ0TWFya2Vyc1xufTtcbmNvbnN0IEJBRF9JRF9DSEFSU19SRUdFWFAgPSAvW15cXGRBLVphLXpdKFxcVykqL2c7XG5sZXQgY29uZiA9IHt9O1xubGV0IGVudGl0eU5hbWVJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKGNuZikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY25mKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbmZba2V5XSA9IGNuZltrZXldO1xuICB9XG59O1xuY29uc3QgZHJhd0F0dHJpYnV0ZXMgPSAoZ3JvdXBOb2RlLCBlbnRpdHlUZXh0Tm9kZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBoZWlnaHRQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3Qgd2lkdGhQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3QgYXR0ckZvbnRTaXplID0gY29uZi5mb250U2l6ZSAqIDAuODU7XG4gIGNvbnN0IGxhYmVsQkJveCA9IGVudGl0eVRleHROb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IGF0dHJpYnV0ZU5vZGVzID0gW107XG4gIGxldCBoYXNLZXlUeXBlID0gZmFsc2U7XG4gIGxldCBoYXNDb21tZW50ID0gZmFsc2U7XG4gIGxldCBtYXhUeXBlV2lkdGggPSAwO1xuICBsZXQgbWF4TmFtZVdpZHRoID0gMDtcbiAgbGV0IG1heEtleVdpZHRoID0gMDtcbiAgbGV0IG1heENvbW1lbnRXaWR0aCA9IDA7XG4gIGxldCBjdW11bGF0aXZlSGVpZ2h0ID0gbGFiZWxCQm94LmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICBsZXQgYXR0ck51bSA9IDE7XG4gIGF0dHJpYnV0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgJiYgaXRlbS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBoYXNLZXlUeXBlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uYXR0cmlidXRlQ29tbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgICBoYXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBhdHRyaWJ1dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBjb25zdCBhdHRyUHJlZml4ID0gYCR7ZW50aXR5VGV4dE5vZGUubm9kZSgpLmlkfS1hdHRyLSR7YXR0ck51bX1gO1xuICAgIGxldCBub2RlSGVpZ2h0ID0gMDtcbiAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gcGFyc2VHZW5lcmljVHlwZXMoaXRlbS5hdHRyaWJ1dGVUeXBlKTtcbiAgICBjb25zdCB0eXBlTm9kZSA9IGdyb3VwTm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJlciBlbnRpdHlMYWJlbFwiLCB0cnVlKS5hdHRyKFwiaWRcIiwgYCR7YXR0clByZWZpeH0tdHlwZWApLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLnN0eWxlKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImxlZnRcIikuc3R5bGUoXCJmb250LWZhbWlseVwiLCBnZXRDb25maWcoKS5mb250RmFtaWx5KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBhdHRyRm9udFNpemUgKyBcInB4XCIpLnRleHQoYXR0cmlidXRlVHlwZSk7XG4gICAgY29uc3QgbmFtZU5vZGUgPSBncm91cE5vZGUuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgZW50aXR5TGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIGAke2F0dHJQcmVmaXh9LW5hbWVgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGl0ZW0uYXR0cmlidXRlTmFtZSk7XG4gICAgY29uc3QgYXR0cmlidXRlTm9kZSA9IHt9O1xuICAgIGF0dHJpYnV0ZU5vZGUudG4gPSB0eXBlTm9kZTtcbiAgICBhdHRyaWJ1dGVOb2RlLm5uID0gbmFtZU5vZGU7XG4gICAgY29uc3QgdHlwZUJCb3ggPSB0eXBlTm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGNvbnN0IG5hbWVCQm94ID0gbmFtZU5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBtYXhUeXBlV2lkdGggPSBNYXRoLm1heChtYXhUeXBlV2lkdGgsIHR5cGVCQm94LndpZHRoKTtcbiAgICBtYXhOYW1lV2lkdGggPSBNYXRoLm1heChtYXhOYW1lV2lkdGgsIG5hbWVCQm94LndpZHRoKTtcbiAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgodHlwZUJCb3guaGVpZ2h0LCBuYW1lQkJveC5oZWlnaHQpO1xuICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICBjb25zdCBrZXlUeXBlTm9kZVRleHQgPSBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgPyBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0LmpvaW4oXCIsXCIpIDogXCJcIjtcbiAgICAgIGNvbnN0IGtleVR5cGVOb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1rZXlgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGtleVR5cGVOb2RlVGV4dCk7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmtuID0ga2V5VHlwZU5vZGU7XG4gICAgICBjb25zdCBrZXlUeXBlQkJveCA9IGtleVR5cGVOb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICBtYXhLZXlXaWR0aCA9IE1hdGgubWF4KG1heEtleVdpZHRoLCBrZXlUeXBlQkJveC53aWR0aCk7XG4gICAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgobm9kZUhlaWdodCwga2V5VHlwZUJCb3guaGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1jb21tZW50YCkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibGVmdFwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGF0dHJGb250U2l6ZSArIFwicHhcIikudGV4dChpdGVtLmF0dHJpYnV0ZUNvbW1lbnQgfHwgXCJcIik7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmNuID0gY29tbWVudE5vZGU7XG4gICAgICBjb25zdCBjb21tZW50Tm9kZUJCb3ggPSBjb21tZW50Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgbWF4Q29tbWVudFdpZHRoID0gTWF0aC5tYXgobWF4Q29tbWVudFdpZHRoLCBjb21tZW50Tm9kZUJCb3gud2lkdGgpO1xuICAgICAgbm9kZUhlaWdodCA9IE1hdGgubWF4KG5vZGVIZWlnaHQsIGNvbW1lbnROb2RlQkJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVOb2RlLmhlaWdodCA9IG5vZGVIZWlnaHQ7XG4gICAgYXR0cmlidXRlTm9kZXMucHVzaChhdHRyaWJ1dGVOb2RlKTtcbiAgICBjdW11bGF0aXZlSGVpZ2h0ICs9IG5vZGVIZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMjtcbiAgICBhdHRyTnVtICs9IDE7XG4gIH0pO1xuICBsZXQgd2lkdGhQYWRkaW5nRmFjdG9yID0gNDtcbiAgaWYgKGhhc0tleVR5cGUpIHtcbiAgICB3aWR0aFBhZGRpbmdGYWN0b3IgKz0gMjtcbiAgfVxuICBpZiAoaGFzQ29tbWVudCkge1xuICAgIHdpZHRoUGFkZGluZ0ZhY3RvciArPSAyO1xuICB9XG4gIGNvbnN0IG1heFdpZHRoID0gbWF4VHlwZVdpZHRoICsgbWF4TmFtZVdpZHRoICsgbWF4S2V5V2lkdGggKyBtYXhDb21tZW50V2lkdGg7XG4gIGNvbnN0IGJCb3ggPSB7XG4gICAgd2lkdGg6IE1hdGgubWF4KFxuICAgICAgY29uZi5taW5FbnRpdHlXaWR0aCxcbiAgICAgIE1hdGgubWF4KFxuICAgICAgICBsYWJlbEJCb3gud2lkdGggKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyLFxuICAgICAgICBtYXhXaWR0aCArIHdpZHRoUGFkZGluZyAqIHdpZHRoUGFkZGluZ0ZhY3RvclxuICAgICAgKVxuICAgICksXG4gICAgaGVpZ2h0OiBhdHRyaWJ1dGVzLmxlbmd0aCA+IDAgPyBjdW11bGF0aXZlSGVpZ2h0IDogTWF0aC5tYXgoY29uZi5taW5FbnRpdHlIZWlnaHQsIGxhYmVsQkJveC5oZWlnaHQgKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyKVxuICB9O1xuICBpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3BhcmVDb2x1bW5XaWR0aCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIChiQm94LndpZHRoIC0gbWF4V2lkdGggLSB3aWR0aFBhZGRpbmcgKiB3aWR0aFBhZGRpbmdGYWN0b3IpIC8gKHdpZHRoUGFkZGluZ0ZhY3RvciAvIDIpXG4gICAgKTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIChoZWlnaHRQYWRkaW5nICsgbGFiZWxCQm94LmhlaWdodCAvIDIpICsgXCIpXCJcbiAgICApO1xuICAgIGxldCBoZWlnaHRPZmZzZXQgPSBsYWJlbEJCb3guaGVpZ2h0ICsgaGVpZ2h0UGFkZGluZyAqIDI7XG4gICAgbGV0IGF0dHJpYlN0eWxlID0gXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICBhdHRyaWJ1dGVOb2Rlcy5mb3JFYWNoKChhdHRyaWJ1dGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBhbGlnblkgPSBoZWlnaHRPZmZzZXQgKyBoZWlnaHRQYWRkaW5nICsgYXR0cmlidXRlTm9kZS5oZWlnaHQgLyAyO1xuICAgICAgYXR0cmlidXRlTm9kZS50bi5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgd2lkdGhQYWRkaW5nICsgXCIsXCIgKyBhbGlnblkgKyBcIilcIik7XG4gICAgICBjb25zdCB0eXBlUmVjdCA9IGdyb3VwTm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgYXR0cmlidXRlTm9kZS50bi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YXR0cmliU3R5bGV9YCwgdHJ1ZSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgaGVpZ2h0T2Zmc2V0KS5hdHRyKFwid2lkdGhcIiwgbWF4VHlwZVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICBjb25zdCBuYW1lWE9mZnNldCA9IHBhcnNlRmxvYXQodHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdCh0eXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgYXR0cmlidXRlTm9kZS5ubi5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArIChuYW1lWE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICApO1xuICAgICAgY29uc3QgbmFtZVJlY3QgPSBncm91cE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGF0dHJpYnV0ZU5vZGUubm4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2F0dHJpYlN0eWxlfWAsIHRydWUpLmF0dHIoXCJ4XCIsIG5hbWVYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhOYW1lV2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIGxldCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQgPSBwYXJzZUZsb2F0KG5hbWVSZWN0LmF0dHIoXCJ4XCIpKSArIHBhcnNlRmxvYXQobmFtZVJlY3QuYXR0cihcIndpZHRoXCIpKTtcbiAgICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICAgIGF0dHJpYnV0ZU5vZGUua24uYXR0cihcbiAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGtleVR5cGVBbmRDb21tZW50WE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleVR5cGVSZWN0ID0gZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmtuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCB0cnVlKS5hdHRyKFwieFwiLCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQpLmF0dHIoXCJ5XCIsIGhlaWdodE9mZnNldCkuYXR0cihcIndpZHRoXCIsIG1heEtleVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICAgIGtleVR5cGVBbmRDb21tZW50WE9mZnNldCA9IHBhcnNlRmxvYXQoa2V5VHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdChrZXlUeXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgICAgYXR0cmlidXRlTm9kZS5jbi5hdHRyKFxuICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoa2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0ICsgd2lkdGhQYWRkaW5nKSArIFwiLFwiICsgYWxpZ25ZICsgXCIpXCJcbiAgICAgICAgKTtcbiAgICAgICAgZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmNuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCBcInRydWVcIikuYXR0cihcInhcIiwga2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhDb21tZW50V2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIH1cbiAgICAgIGhlaWdodE9mZnNldCArPSBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICAgICAgYXR0cmliU3R5bGUgPSBhdHRyaWJTdHlsZSA9PT0gXCJhdHRyaWJ1dGVCb3hPZGRcIiA/IFwiYXR0cmlidXRlQm94RXZlblwiIDogXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiQm94LmhlaWdodCA9IE1hdGgubWF4KGNvbmYubWluRW50aXR5SGVpZ2h0LCBjdW11bGF0aXZlSGVpZ2h0KTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIGJCb3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICByZXR1cm4gYkJveDtcbn07XG5jb25zdCBkcmF3RW50aXRpZXMgPSBmdW5jdGlvbihzdmdOb2RlLCBlbnRpdGllczIsIGdyYXBoKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbnRpdGllczIpO1xuICBsZXQgZmlyc3RPbmU7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihlbnRpdHlOYW1lKSB7XG4gICAgY29uc3QgZW50aXR5SWQgPSBnZW5lcmF0ZUlkKGVudGl0eU5hbWUsIFwiZW50aXR5XCIpO1xuICAgIGVudGl0eU5hbWVJZHMuc2V0KGVudGl0eU5hbWUsIGVudGl0eUlkKTtcbiAgICBjb25zdCBncm91cE5vZGUgPSBzdmdOb2RlLmFwcGVuZChcImdcIikuYXR0cihcImlkXCIsIGVudGl0eUlkKTtcbiAgICBmaXJzdE9uZSA9IGZpcnN0T25lID09PSB2b2lkIDAgPyBlbnRpdHlJZCA6IGZpcnN0T25lO1xuICAgIGNvbnN0IHRleHRJZCA9IFwidGV4dC1cIiArIGVudGl0eUlkO1xuICAgIGNvbnN0IHRleHROb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCB0ZXh0SWQpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLnN0eWxlKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGNvbmYuZm9udFNpemUgKyBcInB4XCIpLnRleHQoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgeyB3aWR0aDogZW50aXR5V2lkdGgsIGhlaWdodDogZW50aXR5SGVpZ2h0IH0gPSBkcmF3QXR0cmlidXRlcyhcbiAgICAgIGdyb3VwTm9kZSxcbiAgICAgIHRleHROb2RlLFxuICAgICAgZW50aXRpZXMyW2VudGl0eU5hbWVdLmF0dHJpYnV0ZXNcbiAgICApO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyB0ZXh0SWQpLmNsYXNzZWQoXCJlciBlbnRpdHlCb3hcIiwgdHJ1ZSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuYXR0cihcIndpZHRoXCIsIGVudGl0eVdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGVudGl0eUhlaWdodCk7XG4gICAgY29uc3QgcmVjdEJCb3ggPSByZWN0Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGdyYXBoLnNldE5vZGUoZW50aXR5SWQsIHtcbiAgICAgIHdpZHRoOiByZWN0QkJveC53aWR0aCxcbiAgICAgIGhlaWdodDogcmVjdEJCb3guaGVpZ2h0LFxuICAgICAgc2hhcGU6IFwicmVjdFwiLFxuICAgICAgaWQ6IGVudGl0eUlkXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZmlyc3RPbmU7XG59O1xuY29uc3QgYWRqdXN0RW50aXRpZXMgPSBmdW5jdGlvbihzdmdOb2RlLCBncmFwaCkge1xuICBncmFwaC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZ3JhcGgubm9kZSh2KSAhPT0gdm9pZCAwKSB7XG4gICAgICBzdmdOb2RlLnNlbGVjdChcIiNcIiArIHYpLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGdyYXBoLm5vZGUodikueSAtIGdyYXBoLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBnZXRFZGdlTmFtZSA9IGZ1bmN0aW9uKHJlbCkge1xuICByZXR1cm4gKHJlbC5lbnRpdHlBICsgcmVsLnJvbGVBICsgcmVsLmVudGl0eUIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcbn07XG5jb25zdCBhZGRSZWxhdGlvbnNoaXBzID0gZnVuY3Rpb24ocmVsYXRpb25zaGlwczIsIGcpIHtcbiAgcmVsYXRpb25zaGlwczIuZm9yRWFjaChmdW5jdGlvbihyKSB7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZW50aXR5TmFtZUlkcy5nZXQoci5lbnRpdHlBKSxcbiAgICAgIGVudGl0eU5hbWVJZHMuZ2V0KHIuZW50aXR5QiksXG4gICAgICB7IHJlbGF0aW9uc2hpcDogciB9LFxuICAgICAgZ2V0RWRnZU5hbWUocilcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIHJlbGF0aW9uc2hpcHMyO1xufTtcbmxldCByZWxDbnQgPSAwO1xuY29uc3QgZHJhd1JlbGF0aW9uc2hpcEZyb21MYXlvdXQgPSBmdW5jdGlvbihzdmcsIHJlbCwgZywgaW5zZXJ0LCBkaWFnT2JqKSB7XG4gIHJlbENudCsrO1xuICBjb25zdCBlZGdlID0gZy5lZGdlKFxuICAgIGVudGl0eU5hbWVJZHMuZ2V0KHJlbC5lbnRpdHlBKSxcbiAgICBlbnRpdHlOYW1lSWRzLmdldChyZWwuZW50aXR5QiksXG4gICAgZ2V0RWRnZU5hbWUocmVsKVxuICApO1xuICBjb25zdCBsaW5lRnVuY3Rpb24gPSBsaW5lKCkueChmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueDtcbiAgfSkueShmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueTtcbiAgfSkuY3VydmUoY3VydmVCYXNpcyk7XG4gIGNvbnN0IHN2Z1BhdGggPSBzdmcuaW5zZXJ0KFwicGF0aFwiLCBcIiNcIiArIGluc2VydCkuY2xhc3NlZChcImVyIHJlbGF0aW9uc2hpcExpbmVcIiwgdHJ1ZSkuYXR0cihcImRcIiwgbGluZUZ1bmN0aW9uKGVkZ2UucG9pbnRzKSkuc3R5bGUoXCJzdHJva2VcIiwgY29uZi5zdHJva2UpLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gIGlmIChyZWwucmVsU3BlYy5yZWxUeXBlID09PSBkaWFnT2JqLmRiLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORykge1xuICAgIHN2Z1BhdGguYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI4LDhcIik7XG4gIH1cbiAgbGV0IHVybCA9IFwiXCI7XG4gIGlmIChjb25mLmFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBzd2l0Y2ggKHJlbC5yZWxTcGVjLmNhcmRBKSB7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzLkVSTWFya2Vycy5aRVJPX09SX09ORV9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzLkVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EICsgXCIpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzLkVSTWFya2Vycy5PTkVfT1JfTU9SRV9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnMuRVJNYXJrZXJzLk9OTFlfT05FX0VORCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGlhZ09iai5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnMuRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgfVxuICBzd2l0Y2ggKHJlbC5yZWxTcGVjLmNhcmRCKSB7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzLkVSTWFya2Vycy5aRVJPX09SX09ORV9TVEFSVCArIFwiKVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpcbiAgICAgIHN2Z1BhdGguYXR0cihcbiAgICAgICAgXCJtYXJrZXItc3RhcnRcIixcbiAgICAgICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vycy5FUk1hcmtlcnMuWkVST19PUl9NT1JFX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXG4gICAgICAgIFwibWFya2VyLXN0YXJ0XCIsXG4gICAgICAgIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnMuRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vycy5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLXN0YXJ0XCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnMuRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGNvbnN0IGxlbiA9IHN2Z1BhdGgubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCk7XG4gIGNvbnN0IGxhYmVsUG9pbnQgPSBzdmdQYXRoLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGxlbiAqIDAuNSk7XG4gIGNvbnN0IGxhYmVsSWQgPSBcInJlbFwiICsgcmVsQ250O1xuICBjb25zdCBsYWJlbE5vZGUgPSBzdmcuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgcmVsYXRpb25zaGlwTGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIGxhYmVsSWQpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCkuYXR0cihcInlcIiwgbGFiZWxQb2ludC55KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJmb250LWZhbWlseVwiLCBnZXRDb25maWcoKS5mb250RmFtaWx5KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBjb25mLmZvbnRTaXplICsgXCJweFwiKS50ZXh0KHJlbC5yb2xlQSk7XG4gIGNvbnN0IGxhYmVsQkJveCA9IGxhYmVsTm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBzdmcuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGxhYmVsSWQpLmNsYXNzZWQoXCJlciByZWxhdGlvbnNoaXBMYWJlbEJveFwiLCB0cnVlKS5hdHRyKFwieFwiLCBsYWJlbFBvaW50LnggLSBsYWJlbEJCb3gud2lkdGggLyAyKS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkgLSBsYWJlbEJCb3guaGVpZ2h0IC8gMikuYXR0cihcIndpZHRoXCIsIGxhYmVsQkJveC53aWR0aCkuYXR0cihcImhlaWdodFwiLCBsYWJlbEJCb3guaGVpZ2h0KTtcbn07XG5jb25zdCBkcmF3ID0gZnVuY3Rpb24odGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIGNvbmYgPSBnZXRDb25maWcoKS5lcjtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIEVSIGRpYWdyYW1cIik7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPScke2lkfSddYCk7XG4gIGVyTWFya2Vycy5pbnNlcnRNYXJrZXJzKHN2ZywgY29uZik7XG4gIGxldCBnO1xuICBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGRpcmVjdGVkOiB0cnVlLFxuICAgIGNvbXBvdW5kOiBmYWxzZVxuICB9KS5zZXRHcmFwaCh7XG4gICAgcmFua2RpcjogY29uZi5sYXlvdXREaXJlY3Rpb24sXG4gICAgbWFyZ2lueDogMjAsXG4gICAgbWFyZ2lueTogMjAsXG4gICAgbm9kZXNlcDogMTAwLFxuICAgIGVkZ2VzZXA6IDEwMCxcbiAgICByYW5rc2VwOiAxMDBcbiAgfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBjb25zdCBmaXJzdEVudGl0eSA9IGRyYXdFbnRpdGllcyhzdmcsIGRpYWdPYmouZGIuZ2V0RW50aXRpZXMoKSwgZyk7XG4gIGNvbnN0IHJlbGF0aW9uc2hpcHMyID0gYWRkUmVsYXRpb25zaGlwcyhkaWFnT2JqLmRiLmdldFJlbGF0aW9uc2hpcHMoKSwgZyk7XG4gIGxheW91dChnKTtcbiAgYWRqdXN0RW50aXRpZXMoc3ZnLCBnKTtcbiAgcmVsYXRpb25zaGlwczIuZm9yRWFjaChmdW5jdGlvbihyZWwpIHtcbiAgICBkcmF3UmVsYXRpb25zaGlwRnJvbUxheW91dChzdmcsIHJlbCwgZywgZmlyc3RFbnRpdHksIGRpYWdPYmopO1xuICB9KTtcbiAgY29uc3QgcGFkZGluZyA9IGNvbmYuZGlhZ3JhbVBhZGRpbmc7XG4gIHV0aWxzLmluc2VydFRpdGxlKHN2ZywgXCJlbnRpdHlUaXRsZVRleHRcIiwgY29uZi50aXRsZVRvcE1hcmdpbiwgZGlhZ09iai5kYi5nZXREaWFncmFtVGl0bGUoKSk7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Zy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IHN2Z0JvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBzdmdCb3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoc3ZnLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xufTtcbmNvbnN0IE1FUk1BSURfRVJESUFHUkFNX1VVSUQgPSBcIjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3Y1wiO1xuZnVuY3Rpb24gZ2VuZXJhdGVJZChzdHIgPSBcIlwiLCBwcmVmaXggPSBcIlwiKSB7XG4gIGNvbnN0IHNpbXBsaWZpZWRTdHIgPSBzdHIucmVwbGFjZShCQURfSURfQ0hBUlNfUkVHRVhQLCBcIlwiKTtcbiAgcmV0dXJuIGAke3N0cldpdGhIeXBoZW4ocHJlZml4KX0ke3N0cldpdGhIeXBoZW4oc2ltcGxpZmllZFN0cil9JHt2NShcbiAgICBzdHIsXG4gICAgTUVSTUFJRF9FUkRJQUdSQU1fVVVJRFxuICApfWA7XG59XG5mdW5jdGlvbiBzdHJXaXRoSHlwaGVuKHN0ciA9IFwiXCIpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiAwID8gYCR7c3RyfS1gIDogXCJcIjtcbn1cbmNvbnN0IGVyUmVuZGVyZXIgPSB7XG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5jb25zdCBnZXRTdHlsZXMgPSAob3B0aW9ucykgPT4gYFxuICAuZW50aXR5Qm94IHtcbiAgICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ307XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIH1cblxuICAuYXR0cmlidXRlQm94T2RkIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAgJHtvcHRpb25zLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW59O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy50ZXJ0aWFyeUNvbG9yfTtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgfVxuXG4gIC5lbnRpdHlUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9ICAgIFxuICAjTURfUEFSRU5UX1NUQVJUIHtcbiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgfVxuICAjTURfUEFSRU5UX0VORCB7XG4gICAgZmlsbDogI2Y1ZjVmNSAhaW1wb3J0YW50O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbiAgXG5gO1xuY29uc3QgZXJTdHlsZXMgPSBnZXRTdHlsZXM7XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXI6IGVyUGFyc2VyLFxuICBkYjogZXJEYixcbiAgcmVuZGVyZXI6IGVyUmVuZGVyZXIsXG4gIHN0eWxlczogZXJTdHlsZXNcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/erDiagram-f6946109.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js": /*!*************************************************************!*\ !*** ../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"d\": () => (/* binding */ db),\n/* harmony export */ \"f\": () => (/* binding */ flowDb),\n/* harmony export */ \"p\": () => (/* binding */ parser$1)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 62], $Vf = [1, 48], $Vg = [1, 52], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [1, 56], $Vn = [1, 63], $Vo = [1, 51], $Vp = [1, 53], $Vq = [1, 55], $Vr = [1, 59], $Vs = [1, 60], $Vt = [1, 41], $Vu = [1, 42], $Vv = [1, 43], $Vw = [1, 44], $Vx = [1, 61], $Vy = [1, 50], $Vz = [1, 54], $VA = [1, 57], $VB = [1, 58], $VC = [1, 49], $VD = [1, 66], $VE = [1, 71], $VF = [1, 20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $VG = [1, 75], $VH = [1, 74], $VI = [1, 76], $VJ = [20, 21, 23, 81, 82], $VK = [1, 99], $VL = [1, 104], $VM = [1, 107], $VN = [1, 108], $VO = [1, 101], $VP = [1, 106], $VQ = [1, 109], $VR = [1, 102], $VS = [1, 114], $VT = [1, 113], $VU = [1, 103], $VV = [1, 105], $VW = [1, 110], $VX = [1, 111], $VY = [1, 112], $VZ = [1, 115], $V_ = [20, 21, 22, 23, 81, 82], $V$ = [20, 21, 22, 23, 53, 81, 82], $V01 = [20, 21, 22, 23, 40, 52, 53, 55, 57, 59, 61, 63, 65, 66, 67, 69, 71, 73, 74, 76, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V11 = [20, 21, 23], $V21 = [20, 21, 23, 52, 66, 67, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V31 = [1, 12, 20, 21, 22, 23, 24, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V41 = [52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V51 = [1, 150], $V61 = [1, 158], $V71 = [1, 159], $V81 = [1, 160], $V91 = [1, 161], $Va1 = [1, 145], $Vb1 = [1, 146], $Vc1 = [1, 141], $Vd1 = [1, 142], $Ve1 = [1, 153], $Vf1 = [1, 154], $Vg1 = [1, 155], $Vh1 = [1, 156], $Vi1 = [1, 157], $Vj1 = [1, 162], $Vk1 = [1, 163], $Vl1 = [1, 148], $Vm1 = [1, 151], $Vn1 = [1, 147], $Vo1 = [1, 144], $Vp1 = [20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $Vq1 = [1, 166], $Vr1 = [20, 21, 22, 23, 26, 52, 66, 67, 92, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $Vs1 = [20, 21, 22, 23, 24, 26, 38, 40, 41, 42, 52, 56, 58, 60, 62, 64, 66, 67, 68, 70, 72, 73, 75, 77, 81, 82, 87, 88, 89, 90, 91, 92, 93, 96, 106, 107, 110, 112, 113, 114, 115, 123, 124, 125, 126, 127, 128], $Vt1 = [12, 21, 22, 24], $Vu1 = [22, 107], $Vv1 = [1, 251], $Vw1 = [1, 246], $Vx1 = [1, 247], $Vy1 = [1, 255], $Vz1 = [1, 252], $VA1 = [1, 249], $VB1 = [1, 248], $VC1 = [1, 250], $VD1 = [1, 253], $VE1 = [1, 254], $VF1 = [1, 256], $VG1 = [1, 274], $VH1 = [20, 21, 23, 107], $VI1 = [20, 21, 22, 23, 66, 67, 87, 103, 106, 107, 110, 111, 112, 113, 114];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"directive\": 5, \"openDirective\": 6, \"typeDirective\": 7, \"closeDirective\": 8, \"separator\": 9, \":\": 10, \"argDirective\": 11, \"open_directive\": 12, \"type_directive\": 13, \"arg_directive\": 14, \"close_directive\": 15, \"graphConfig\": 16, \"document\": 17, \"line\": 18, \"statement\": 19, \"SEMI\": 20, \"NEWLINE\": 21, \"SPACE\": 22, \"EOF\": 23, \"GRAPH\": 24, \"NODIR\": 25, \"DIR\": 26, \"FirstStmtSeperator\": 27, \"ending\": 28, \"endToken\": 29, \"spaceList\": 30, \"spaceListNewline\": 31, \"verticeStatement\": 32, \"styleStatement\": 33, \"linkStyleStatement\": 34, \"classDefStatement\": 35, \"classStatement\": 36, \"clickStatement\": 37, \"subgraph\": 38, \"text\": 39, \"SQS\": 40, \"SQE\": 41, \"end\": 42, \"direction\": 43, \"acc_title\": 44, \"acc_title_value\": 45, \"acc_descr\": 46, \"acc_descr_value\": 47, \"acc_descr_multiline_value\": 48, \"link\": 49, \"node\": 50, \"vertex\": 51, \"AMP\": 52, \"STYLE_SEPARATOR\": 53, \"idString\": 54, \"DOUBLECIRCLESTART\": 55, \"DOUBLECIRCLEEND\": 56, \"PS\": 57, \"PE\": 58, \"(-\": 59, \"-)\": 60, \"STADIUMSTART\": 61, \"STADIUMEND\": 62, \"SUBROUTINESTART\": 63, \"SUBROUTINEEND\": 64, \"VERTEX_WITH_PROPS_START\": 65, \"ALPHA\": 66, \"COLON\": 67, \"PIPE\": 68, \"CYLINDERSTART\": 69, \"CYLINDEREND\": 70, \"DIAMOND_START\": 71, \"DIAMOND_STOP\": 72, \"TAGEND\": 73, \"TRAPSTART\": 74, \"TRAPEND\": 75, \"INVTRAPSTART\": 76, \"INVTRAPEND\": 77, \"linkStatement\": 78, \"arrowText\": 79, \"TESTSTR\": 80, \"START_LINK\": 81, \"LINK\": 82, \"textToken\": 83, \"STR\": 84, \"MD_STR\": 85, \"keywords\": 86, \"STYLE\": 87, \"LINKSTYLE\": 88, \"CLASSDEF\": 89, \"CLASS\": 90, \"CLICK\": 91, \"DOWN\": 92, \"UP\": 93, \"textNoTags\": 94, \"textNoTagsToken\": 95, \"DEFAULT\": 96, \"stylesOpt\": 97, \"alphaNum\": 98, \"CALLBACKNAME\": 99, \"CALLBACKARGS\": 100, \"HREF\": 101, \"LINK_TARGET\": 102, \"HEX\": 103, \"numList\": 104, \"INTERPOLATE\": 105, \"NUM\": 106, \"COMMA\": 107, \"style\": 108, \"styleComponent\": 109, \"MINUS\": 110, \"UNIT\": 111, \"BRKT\": 112, \"DOT\": 113, \"PCT\": 114, \"TAGSTART\": 115, \"alphaNumToken\": 116, \"idStringToken\": 117, \"alphaNumStatement\": 118, \"direction_tb\": 119, \"direction_bt\": 120, \"direction_rl\": 121, \"direction_lr\": 122, \"PUNCTUATION\": 123, \"UNICODE_TEXT\": 124, \"PLUS\": 125, \"EQUALS\": 126, \"MULT\": 127, \"UNDERSCORE\": 128, \"graphCodeTokens\": 129, \"ARROW_CROSS\": 130, \"ARROW_POINT\": 131, \"ARROW_CIRCLE\": 132, \"ARROW_OPEN\": 133, \"QUOTE\": 134, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 10: \":\", 12: \"open_directive\", 13: \"type_directive\", 14: \"arg_directive\", 15: \"close_directive\", 20: \"SEMI\", 21: \"NEWLINE\", 22: \"SPACE\", 23: \"EOF\", 24: \"GRAPH\", 25: \"NODIR\", 26: \"DIR\", 38: \"subgraph\", 40: \"SQS\", 41: \"SQE\", 42: \"end\", 44: \"acc_title\", 45: \"acc_title_value\", 46: \"acc_descr\", 47: \"acc_descr_value\", 48: \"acc_descr_multiline_value\", 52: \"AMP\", 53: \"STYLE_SEPARATOR\", 55: \"DOUBLECIRCLESTART\", 56: \"DOUBLECIRCLEEND\", 57: \"PS\", 58: \"PE\", 59: \"(-\", 60: \"-)\", 61: \"STADIUMSTART\", 62: \"STADIUMEND\", 63: \"SUBROUTINESTART\", 64: \"SUBROUTINEEND\", 65: \"VERTEX_WITH_PROPS_START\", 66: \"ALPHA\", 67: \"COLON\", 68: \"PIPE\", 69: \"CYLINDERSTART\", 70: \"CYLINDEREND\", 71: \"DIAMOND_START\", 72: \"DIAMOND_STOP\", 73: \"TAGEND\", 74: \"TRAPSTART\", 75: \"TRAPEND\", 76: \"INVTRAPSTART\", 77: \"INVTRAPEND\", 80: \"TESTSTR\", 81: \"START_LINK\", 82: \"LINK\", 84: \"STR\", 85: \"MD_STR\", 87: \"STYLE\", 88: \"LINKSTYLE\", 89: \"CLASSDEF\", 90: \"CLASS\", 91: \"CLICK\", 92: \"DOWN\", 93: \"UP\", 96: \"DEFAULT\", 99: \"CALLBACKNAME\", 100: \"CALLBACKARGS\", 101: \"HREF\", 102: \"LINK_TARGET\", 103: \"HEX\", 105: \"INTERPOLATE\", 106: \"NUM\", 107: \"COMMA\", 110: \"MINUS\", 111: \"UNIT\", 112: \"BRKT\", 113: \"DOT\", 114: \"PCT\", 115: \"TAGSTART\", 119: \"direction_tb\", 120: \"direction_bt\", 121: \"direction_rl\", 122: \"direction_lr\", 123: \"PUNCTUATION\", 124: \"UNICODE_TEXT\", 125: \"PLUS\", 126: \"EQUALS\", 127: \"MULT\", 128: \"UNDERSCORE\", 130: \"ARROW_CROSS\", 131: \"ARROW_POINT\", 132: \"ARROW_CIRCLE\", 133: \"ARROW_OPEN\", 134: \"QUOTE\" },\n productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [50, 1], [50, 5], [50, 3], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 8], [51, 4], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 4], [51, 4], [51, 1], [49, 2], [49, 3], [49, 3], [49, 1], [49, 3], [78, 1], [79, 3], [39, 1], [39, 2], [39, 1], [39, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [94, 1], [94, 2], [35, 5], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 2], [37, 4], [37, 4], [37, 6], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [104, 1], [104, 3], [97, 1], [97, 3], [108, 1], [108, 2], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [95, 1], [95, 1], [95, 1], [95, 1], [54, 1], [54, 2], [98, 1], [98, 2], [118, 1], [118, 1], [118, 1], [118, 1], [43, 1], [43, 1], [43, 1], [43, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 5:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 6:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 7:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 8:\n yy.parseDirective(\"}%%\", \"close_directive\", \"flowchart\");\n break;\n case 10:\n this.$ = [];\n break;\n case 11:\n if (!Array.isArray($$[$0]) || $$[$0].length > 0) {\n $$[$0 - 1].push($$[$0]);\n }\n this.$ = $$[$0 - 1];\n break;\n case 12:\n case 97:\n case 153:\n case 155:\n case 156:\n this.$ = $$[$0];\n break;\n case 19:\n yy.setDirection(\"TB\");\n this.$ = \"TB\";\n break;\n case 20:\n yy.setDirection($$[$0 - 1]);\n this.$ = $$[$0 - 1];\n break;\n case 35:\n this.$ = $$[$0 - 1].nodes;\n break;\n case 36:\n case 37:\n case 38:\n case 39:\n case 40:\n this.$ = [];\n break;\n case 41:\n this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);\n break;\n case 42:\n this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);\n break;\n case 43:\n this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);\n break;\n case 45:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 46:\n case 47:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 51:\n yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);\n this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };\n break;\n case 52:\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 53:\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };\n break;\n case 54:\n this.$ = { stmt: $$[$0], nodes: $$[$0] };\n break;\n case 55:\n this.$ = [$$[$0]];\n break;\n case 56:\n this.$ = $$[$0 - 4].concat($$[$0]);\n break;\n case 57:\n this.$ = [$$[$0 - 2]];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 58:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"square\");\n break;\n case 59:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"doublecircle\");\n break;\n case 60:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"circle\");\n break;\n case 61:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"ellipse\");\n break;\n case 62:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"stadium\");\n break;\n case 63:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"subroutine\");\n break;\n case 64:\n this.$ = $$[$0 - 7];\n yy.addVertex($$[$0 - 7], $$[$0 - 1], \"rect\", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));\n break;\n case 65:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"cylinder\");\n break;\n case 66:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"round\");\n break;\n case 67:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"diamond\");\n break;\n case 68:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"hexagon\");\n break;\n case 69:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"odd\");\n break;\n case 70:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"trapezoid\");\n break;\n case 71:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"inv_trapezoid\");\n break;\n case 72:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_right\");\n break;\n case 73:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_left\");\n break;\n case 74:\n this.$ = $$[$0];\n yy.addVertex($$[$0]);\n break;\n case 75:\n $$[$0 - 1].text = $$[$0];\n this.$ = $$[$0 - 1];\n break;\n case 76:\n case 77:\n $$[$0 - 2].text = $$[$0 - 1];\n this.$ = $$[$0 - 2];\n break;\n case 78:\n this.$ = $$[$0];\n break;\n case 79:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1] };\n break;\n case 80:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length };\n break;\n case 81:\n this.$ = $$[$0 - 1];\n break;\n case 82:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 83:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 84:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 85:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 98:\n case 154:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 99:\n case 100:\n this.$ = $$[$0 - 4];\n yy.addClass($$[$0 - 2], $$[$0]);\n break;\n case 101:\n this.$ = $$[$0 - 4];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 102:\n case 110:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 103:\n case 111:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 104:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 105:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 106:\n case 112:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 107:\n case 113:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 108:\n case 114:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n break;\n case 109:\n case 115:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 5], $$[$0 - 2]);\n break;\n case 116:\n this.$ = $$[$0 - 4];\n yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);\n break;\n case 117:\n case 119:\n this.$ = $$[$0 - 4];\n yy.updateLink($$[$0 - 2], $$[$0]);\n break;\n case 118:\n this.$ = $$[$0 - 4];\n yy.updateLink([$$[$0 - 2]], $$[$0]);\n break;\n case 120:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);\n yy.updateLink([$$[$0 - 6]], $$[$0]);\n break;\n case 121:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);\n yy.updateLink($$[$0 - 6], $$[$0]);\n break;\n case 122:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);\n break;\n case 123:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);\n break;\n case 124:\n case 126:\n this.$ = [$$[$0]];\n break;\n case 125:\n case 127:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 129:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 151:\n this.$ = $$[$0];\n break;\n case 152:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 157:\n this.$ = \"v\";\n break;\n case 158:\n this.$ = \"-\";\n break;\n case 159:\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 160:\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 161:\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 162:\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 8: 64, 10: [1, 65], 15: $VD }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 68], 21: [1, 69], 22: $VE, 27: 67, 30: 70 }, o($VF, [2, 11]), o($VF, [2, 12]), o($VF, [2, 13]), o($VF, [2, 14]), o($VF, [2, 15]), o($VF, [2, 16]), { 9: 72, 20: $VG, 21: $VH, 23: $VI, 49: 73, 78: 77, 81: [1, 78], 82: [1, 79] }, { 9: 80, 20: $VG, 21: $VH, 23: $VI }, { 9: 81, 20: $VG, 21: $VH, 23: $VI }, { 9: 82, 20: $VG, 21: $VH, 23: $VI }, { 9: 83, 20: $VG, 21: $VH, 23: $VI }, { 9: 84, 20: $VG, 21: $VH, 23: $VI }, { 9: 86, 20: $VG, 21: $VH, 22: [1, 85], 23: $VI }, o($VF, [2, 44]), { 45: [1, 87] }, { 47: [1, 88] }, o($VF, [2, 47]), o($VJ, [2, 54], { 30: 89, 22: $VE }), { 22: [1, 90] }, { 22: [1, 91] }, { 22: [1, 92] }, { 22: [1, 93] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 84: [1, 97], 92: $VO, 98: 96, 99: [1, 94], 101: [1, 95], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($VF, [2, 159]), o($VF, [2, 160]), o($VF, [2, 161]), o($VF, [2, 162]), o($V_, [2, 55], { 53: [1, 116] }), o($V$, [2, 74], { 117: 129, 40: [1, 117], 52: $Ve, 55: [1, 118], 57: [1, 119], 59: [1, 120], 61: [1, 121], 63: [1, 122], 65: [1, 123], 66: $Vf, 67: $Vg, 69: [1, 124], 71: [1, 125], 73: [1, 126], 74: [1, 127], 76: [1, 128], 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), o($V01, [2, 151]), o($V01, [2, 176]), o($V01, [2, 177]), o($V01, [2, 178]), o($V01, [2, 179]), o($V01, [2, 180]), o($V01, [2, 181]), o($V01, [2, 182]), o($V01, [2, 183]), o($V01, [2, 184]), o($V01, [2, 185]), o($V01, [2, 186]), o($V01, [2, 187]), o($V01, [2, 188]), o($V01, [2, 189]), o($V01, [2, 190]), o($V01, [2, 191]), { 9: 130, 20: $VG, 21: $VH, 23: $VI }, { 11: 131, 14: [1, 132] }, o($V11, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 133] }, o($V21, [2, 34], { 30: 134, 22: $VE }), o($VF, [2, 35]), { 50: 135, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V31, [2, 48]), o($V31, [2, 49]), o($V31, [2, 50]), o($V41, [2, 78], { 79: 136, 68: [1, 138], 80: [1, 137] }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 139, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o([52, 66, 67, 68, 80, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 80]), o($VF, [2, 36]), o($VF, [2, 37]), o($VF, [2, 38]), o($VF, [2, 39]), o($VF, [2, 40]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 164, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 165 }), o($VF, [2, 45]), o($VF, [2, 46]), o($VJ, [2, 53], { 52: $Vq1 }), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 167, 103: [1, 168], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 96: [1, 169], 104: 170, 106: [1, 171] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 96: [1, 172], 98: 173, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 174, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 102], { 22: [1, 175], 100: [1, 176] }), o($V11, [2, 106], { 22: [1, 177] }), o($V11, [2, 110], { 116: 100, 118: 179, 22: [1, 178], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 112], { 22: [1, 180] }), o($Vr1, [2, 153]), o($Vr1, [2, 155]), o($Vr1, [2, 156]), o($Vr1, [2, 157]), o($Vr1, [2, 158]), o($Vs1, [2, 163]), o($Vs1, [2, 164]), o($Vs1, [2, 165]), o($Vs1, [2, 166]), o($Vs1, [2, 167]), o($Vs1, [2, 168]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), o($Vs1, [2, 171]), o($Vs1, [2, 172]), o($Vs1, [2, 173]), o($Vs1, [2, 174]), o($Vs1, [2, 175]), { 52: $Ve, 54: 181, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 182, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 183, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 185, 42: $V91, 52: $VL, 57: [1, 184], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 186, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 187, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 188, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 66: [1, 189] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 190, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 191, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 71: [1, 192], 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 193, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 194, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 195, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V01, [2, 152]), o($Vt1, [2, 3]), { 8: 196, 15: $VD }, { 15: [2, 7] }, o($V4, [2, 28]), o($V21, [2, 33]), o($VJ, [2, 51], { 30: 197, 22: $VE }), o($V41, [2, 75], { 22: [1, 198] }), { 22: [1, 199] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 200, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 82: [1, 201], 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vs1, [2, 82]), o($Vs1, [2, 84]), o($Vs1, [2, 85]), o($Vs1, [2, 141]), o($Vs1, [2, 142]), o($Vs1, [2, 143]), o($Vs1, [2, 144]), o($Vs1, [2, 145]), o($Vs1, [2, 146]), o($Vs1, [2, 147]), o($Vs1, [2, 148]), o($Vs1, [2, 149]), o($Vs1, [2, 150]), o($Vs1, [2, 86]), o($Vs1, [2, 87]), o($Vs1, [2, 88]), o($Vs1, [2, 89]), o($Vs1, [2, 90]), o($Vs1, [2, 91]), o($Vs1, [2, 92]), o($Vs1, [2, 93]), o($Vs1, [2, 94]), o($Vs1, [2, 95]), o($Vs1, [2, 96]), { 9: 204, 20: $VG, 21: $VH, 22: $V51, 23: $VI, 24: $V61, 26: $V71, 38: $V81, 40: [1, 203], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 205], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $VE, 30: 206 }, { 22: [1, 207], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 208] }, { 22: [1, 209] }, { 22: [1, 210], 107: [1, 211] }, o($Vu1, [2, 124]), { 22: [1, 212] }, { 22: [1, 213], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 214], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 84: [1, 215] }, o($V11, [2, 104], { 22: [1, 216] }), { 84: [1, 217], 102: [1, 218] }, { 84: [1, 219] }, o($Vr1, [2, 154]), { 84: [1, 220], 102: [1, 221] }, o($V_, [2, 57], { 117: 129, 52: $Ve, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 222], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 56: [1, 223], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 224, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 225], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 60: [1, 226], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 62: [1, 227], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 64: [1, 228], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 67: [1, 229] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 70: [1, 230], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 231], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 232, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 233], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 234], 77: [1, 235], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 237], 77: [1, 236], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 9: 238, 20: $VG, 21: $VH, 23: $VI }, o($VJ, [2, 52], { 52: $Vq1 }), o($V41, [2, 77]), o($V41, [2, 76]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 68: [1, 239], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V41, [2, 79]), o($Vs1, [2, 83]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 240, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 241 }), o($VF, [2, 43]), { 51: 242, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 243, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 257, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 258, 103: $Vz1, 105: [1, 259], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 260, 103: $Vz1, 105: [1, 261], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 106: [1, 262] }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 263, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 264, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 265, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 103]), { 84: [1, 266] }, o($V11, [2, 107], { 22: [1, 267] }), o($V11, [2, 108]), o($V11, [2, 111]), o($V11, [2, 113], { 22: [1, 268] }), o($V11, [2, 114]), o($V$, [2, 58]), o($V$, [2, 59]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 269], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 66]), o($V$, [2, 61]), o($V$, [2, 62]), o($V$, [2, 63]), { 66: [1, 270] }, o($V$, [2, 65]), o($V$, [2, 67]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 271], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 69]), o($V$, [2, 70]), o($V$, [2, 72]), o($V$, [2, 71]), o($V$, [2, 73]), o($Vt1, [2, 4]), o([22, 52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 81]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 272], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 273], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V_, [2, 56]), o($V11, [2, 116], { 107: $VG1 }), o($VH1, [2, 126], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($VI1, [2, 128]), o($VI1, [2, 130]), o($VI1, [2, 131]), o($VI1, [2, 132]), o($VI1, [2, 133]), o($VI1, [2, 134]), o($VI1, [2, 135]), o($VI1, [2, 136]), o($VI1, [2, 137]), o($VI1, [2, 138]), o($VI1, [2, 139]), o($VI1, [2, 140]), o($V11, [2, 117], { 107: $VG1 }), o($V11, [2, 118], { 107: $VG1 }), { 22: [1, 276] }, o($V11, [2, 119], { 107: $VG1 }), { 22: [1, 277] }, o($Vu1, [2, 125]), o($V11, [2, 99], { 107: $VG1 }), o($V11, [2, 100], { 107: $VG1 }), o($V11, [2, 101], { 116: 100, 118: 179, 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 105]), { 102: [1, 278] }, { 102: [1, 279] }, { 58: [1, 280] }, { 68: [1, 281] }, { 72: [1, 282] }, { 9: 283, 20: $VG, 21: $VH, 23: $VI }, o($VF, [2, 42]), { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 108: 284, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($VI1, [2, 129]), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 285, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 286, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 109]), o($V11, [2, 115]), o($V$, [2, 60]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 287, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 68]), o($Vp1, $V5, { 17: 288 }), o($VH1, [2, 127], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($V11, [2, 122], { 116: 100, 118: 179, 22: [1, 289], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 123], { 116: 100, 118: 179, 22: [1, 290], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 291], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 292], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 293, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 294, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($V$, [2, 64]), o($VF, [2, 41]), o($V11, [2, 120], { 107: $VG1 }), o($V11, [2, 121], { 107: $VG1 })],\n defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 132: [2, 7] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex2() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex2();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex2() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 12;\n case 1:\n this.begin(\"type_directive\");\n return 13;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 10;\n case 3:\n this.popState();\n this.popState();\n return 15;\n case 4:\n return 14;\n case 5:\n this.begin(\"acc_title\");\n return 44;\n case 6:\n this.popState();\n return \"acc_title_value\";\n case 7:\n this.begin(\"acc_descr\");\n return 46;\n case 8:\n this.popState();\n return \"acc_descr_value\";\n case 9:\n this.begin(\"acc_descr_multiline\");\n break;\n case 10:\n this.popState();\n break;\n case 11:\n return \"acc_descr_multiline_value\";\n case 12:\n this.begin(\"md_string\");\n break;\n case 13:\n return \"MD_STR\";\n case 14:\n this.popState();\n break;\n case 15:\n this.begin(\"string\");\n break;\n case 16:\n this.popState();\n break;\n case 17:\n return \"STR\";\n case 18:\n return 87;\n case 19:\n return 96;\n case 20:\n return 88;\n case 21:\n return 105;\n case 22:\n return 89;\n case 23:\n return 90;\n case 24:\n this.begin(\"href\");\n break;\n case 25:\n this.popState();\n break;\n case 26:\n return 101;\n case 27:\n this.begin(\"callbackname\");\n break;\n case 28:\n this.popState();\n break;\n case 29:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 30:\n return 99;\n case 31:\n this.popState();\n break;\n case 32:\n return 100;\n case 33:\n this.begin(\"click\");\n break;\n case 34:\n this.popState();\n break;\n case 35:\n return 91;\n case 36:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 24;\n case 37:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 24;\n case 38:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 24;\n case 39:\n return 38;\n case 40:\n return 42;\n case 41:\n return 102;\n case 42:\n return 102;\n case 43:\n return 102;\n case 44:\n return 102;\n case 45:\n this.popState();\n return 25;\n case 46:\n this.popState();\n return 26;\n case 47:\n this.popState();\n return 26;\n case 48:\n this.popState();\n return 26;\n case 49:\n this.popState();\n return 26;\n case 50:\n this.popState();\n return 26;\n case 51:\n this.popState();\n return 26;\n case 52:\n this.popState();\n return 26;\n case 53:\n this.popState();\n return 26;\n case 54:\n this.popState();\n return 26;\n case 55:\n this.popState();\n return 26;\n case 56:\n return 119;\n case 57:\n return 120;\n case 58:\n return 121;\n case 59:\n return 122;\n case 60:\n return 106;\n case 61:\n return 112;\n case 62:\n return 53;\n case 63:\n return 67;\n case 64:\n return 52;\n case 65:\n return 20;\n case 66:\n return 107;\n case 67:\n return 127;\n case 68:\n return 82;\n case 69:\n return 82;\n case 70:\n return 82;\n case 71:\n return 82;\n case 72:\n return 81;\n case 73:\n return 81;\n case 74:\n return 81;\n case 75:\n return 59;\n case 76:\n return 60;\n case 77:\n return 61;\n case 78:\n return 62;\n case 79:\n return 63;\n case 80:\n return 64;\n case 81:\n return 65;\n case 82:\n return 69;\n case 83:\n return 70;\n case 84:\n return 55;\n case 85:\n return 56;\n case 86:\n return 110;\n case 87:\n return 113;\n case 88:\n return 128;\n case 89:\n return 125;\n case 90:\n return 114;\n case 91:\n return 126;\n case 92:\n return 126;\n case 93:\n return 115;\n case 94:\n return 73;\n case 95:\n return 93;\n case 96:\n return \"SEP\";\n case 97:\n return 92;\n case 98:\n return 66;\n case 99:\n return 75;\n case 100:\n return 74;\n case 101:\n return 77;\n case 102:\n return 76;\n case 103:\n return 123;\n case 104:\n return 124;\n case 105:\n return 68;\n case 106:\n return 57;\n case 107:\n return 58;\n case 108:\n return 40;\n case 109:\n return 41;\n case 110:\n return 71;\n case 111:\n return 72;\n case 112:\n return 134;\n case 113:\n return 21;\n case 114:\n return 22;\n case 115:\n return 23;\n }\n },\n rules: [/^(?:%%\\{)/, /^(?:((?:(?!\\}%%)[^:.])*))/, /^(?::)/, /^(?:\\}%%)/, /^(?:((?:(?!\\}%%).|\\n)*))/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:style\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\b)/, /^(?:class\\b)/, /^(?:href[\\s]+[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:click[\\s]+)/, /^(?:[\\s\\n])/, /^(?:[^\\s\\n]*)/, /^(?:flowchart-elk\\b)/, /^(?:graph\\b)/, /^(?:flowchart\\b)/, /^(?:subgraph\\b)/, /^(?:end\\b\\s*)/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:(\\r?\\n)*\\s*\\n)/, /^(?:\\s*LR\\b)/, /^(?:\\s*RL\\b)/, /^(?:\\s*TB\\b)/, /^(?:\\s*BT\\b)/, /^(?:\\s*TD\\b)/, /^(?:\\s*BR\\b)/, /^(?:\\s*<)/, /^(?:\\s*>)/, /^(?:\\s*\\^)/, /^(?:\\s*v\\b)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\\*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:\\(-)/, /^(?:-\\))/, /^(?:\\(\\[)/, /^(?:\\]\\))/, /^(?:\\[\\[)/, /^(?:\\]\\])/, /^(?:\\[\\|)/, /^(?:\\[\\()/, /^(?:\\)\\])/, /^(?:\\(\\(\\()/, /^(?:\\)\\)\\))/, /^(?:-)/, /^(?:\\.)/, /^(?:[\\_])/, /^(?:\\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:<)/, /^(?:>)/, /^(?:\\^)/, /^(?:\\\\\\|)/, /^(?:v\\b)/, /^(?:[A-Za-z]+)/, /^(?:\\\\\\])/, /^(?:\\[\\/)/, /^(?:\\/\\])/, /^(?:\\[\\\\)/, /^(?:[!\"#$%&'*+,-.`?\\\\_/])/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\|)/, /^(?:\\()/, /^(?:\\))/, /^(?:\\[)/, /^(?:\\])/, /^(?:\\{)/, /^(?:\\})/, /^(?:\")/, /^(?:(\\r?\\n)+)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"callbackargs\": { \"rules\": [31, 32], \"inclusive\": false }, \"callbackname\": { \"rules\": [28, 29, 30], \"inclusive\": false }, \"href\": { \"rules\": [25, 26], \"inclusive\": false }, \"click\": { \"rules\": [34, 35], \"inclusive\": false }, \"vertex\": { \"rules\": [], \"inclusive\": false }, \"dir\": { \"rules\": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [10, 11], \"inclusive\": false }, \"acc_descr\": { \"rules\": [8], \"inclusive\": false }, \"acc_title\": { \"rules\": [6], \"inclusive\": false }, \"md_string\": { \"rules\": [13, 14], \"inclusive\": false }, \"string\": { \"rules\": [16, 17], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 7, 9, 12, 15, 18, 19, 20, 21, 22, 23, 24, 27, 33, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst MERMAID_DOM_ID_PREFIX = \"flowchart-\";\nlet vertexCounter = 0;\nlet config = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)();\nlet vertices = {};\nlet edges = [];\nlet classes = {};\nlet subGraphs = [];\nlet subGraphLookup = {};\nlet tooltips = {};\nlet subCount = 0;\nlet firstGraphFlag = true;\nlet direction;\nlet version;\nlet funs = [];\nconst sanitizeText = (txt) => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config);\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type);\n};\nconst lookUpDomId = function(id) {\n const veritceKeys = Object.keys(vertices);\n for (const veritceKey of veritceKeys) {\n if (vertices[veritceKey].id === id) {\n return vertices[veritceKey].domId;\n }\n }\n return id;\n};\nconst addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) {\n let txt;\n let id = _id;\n if (id === void 0) {\n return;\n }\n if (id.trim().length === 0) {\n return;\n }\n if (vertices[id] === void 0) {\n vertices[id] = {\n id,\n labelType: \"text\",\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + vertexCounter,\n styles: [],\n classes: []\n };\n }\n vertexCounter++;\n if (textObj !== void 0) {\n config = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)();\n txt = sanitizeText(textObj.text.trim());\n vertices[id].labelType = textObj.type;\n if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n txt = txt.substring(1, txt.length - 1);\n }\n vertices[id].text = txt;\n } else {\n if (vertices[id].text === void 0) {\n vertices[id].text = _id;\n }\n }\n if (type !== void 0) {\n vertices[id].type = type;\n }\n if (style !== void 0 && style !== null) {\n style.forEach(function(s) {\n vertices[id].styles.push(s);\n });\n }\n if (classes2 !== void 0 && classes2 !== null) {\n classes2.forEach(function(s) {\n vertices[id].classes.push(s);\n });\n }\n if (dir !== void 0) {\n vertices[id].dir = dir;\n }\n if (vertices[id].props === void 0) {\n vertices[id].props = props;\n } else if (props !== void 0) {\n Object.assign(vertices[id].props, props);\n }\n};\nconst addSingleLink = function(_start, _end, type) {\n let start = _start;\n let end = _end;\n const edge = { start, end, type: void 0, text: \"\", labelType: \"text\" };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"abc78 Got edge...\", edge);\n const linkTextObj = type.text;\n if (linkTextObj !== void 0) {\n edge.text = sanitizeText(linkTextObj.text.trim());\n if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n edge.text = edge.text.substring(1, edge.text.length - 1);\n }\n edge.labelType = linkTextObj.type;\n }\n if (type !== void 0) {\n edge.type = type.type;\n edge.stroke = type.stroke;\n edge.length = type.length;\n }\n edges.push(edge);\n};\nconst addLink = function(_start, _end, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"addLink (abc78)\", _start, _end, type);\n let i, j;\n for (i = 0; i < _start.length; i++) {\n for (j = 0; j < _end.length; j++) {\n addSingleLink(_start[i], _end[j], type);\n }\n }\n};\nconst updateLinkInterpolate = function(positions, interp) {\n positions.forEach(function(pos) {\n if (pos === \"default\") {\n edges.defaultInterpolate = interp;\n } else {\n edges[pos].interpolate = interp;\n }\n });\n};\nconst updateLink = function(positions, style) {\n positions.forEach(function(pos) {\n if (pos === \"default\") {\n edges.defaultStyle = style;\n } else {\n if (_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray(\"fill\", style) === -1) {\n style.push(\"fill:none\");\n }\n edges[pos].style = style;\n }\n });\n};\nconst addClass = function(id, style) {\n if (classes[id] === void 0) {\n classes[id] = { id, styles: [], textStyles: [] };\n }\n if (style !== void 0 && style !== null) {\n style.forEach(function(s) {\n if (s.match(\"color\")) {\n const newStyle1 = s.replace(\"fill\", \"bgFill\");\n const newStyle2 = newStyle1.replace(\"color\", \"fill\");\n classes[id].textStyles.push(newStyle2);\n }\n classes[id].styles.push(s);\n });\n }\n};\nconst setDirection = function(dir) {\n direction = dir;\n if (direction.match(/.*/)) {\n direction = \"LR\";\n }\n if (direction.match(/.*v/)) {\n direction = \"TB\";\n }\n if (direction === \"TD\") {\n direction = \"TB\";\n }\n};\nconst setClass = function(ids, className) {\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (vertices[id] !== void 0) {\n vertices[id].classes.push(className);\n }\n if (subGraphLookup[id] !== void 0) {\n subGraphLookup[id].classes.push(className);\n }\n });\n};\nconst setTooltip = function(ids, tooltip) {\n ids.split(\",\").forEach(function(id) {\n if (tooltip !== void 0) {\n tooltips[version === \"gen-1\" ? lookUpDomId(id) : id] = sanitizeText(tooltip);\n }\n });\n};\nconst setClickFun = function(id, functionName, functionArgs) {\n let domId = lookUpDomId(id);\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n if (vertices[id] !== void 0) {\n vertices[id].haveCallback = true;\n funs.push(function() {\n const elem = document.querySelector(`[id=\"${domId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n function() {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n};\nconst setLink = function(ids, linkStr, target) {\n ids.split(\",\").forEach(function(id) {\n if (vertices[id] !== void 0) {\n vertices[id].link = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config);\n vertices[id].linkTarget = target;\n }\n });\n setClass(ids, \"clickable\");\n};\nconst getTooltip = function(id) {\n return tooltips[id];\n};\nconst setClickEvent = function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, \"clickable\");\n};\nconst bindFunctions = function(element) {\n funs.forEach(function(fun) {\n fun(element);\n });\n};\nconst getDirection = function() {\n return direction.trim();\n};\nconst getVertices = function() {\n return vertices;\n};\nconst getEdges = function() {\n return edges;\n};\nconst getClasses = function() {\n return classes;\n};\nconst setupToolTips = function(element) {\n let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", function() {\n const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(this);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.top - 14 + document.body.scrollTop + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", function() {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(this);\n el.classed(\"hover\", false);\n });\n};\nfuns.push(setupToolTips);\nconst clear = function(ver = \"gen-1\") {\n vertices = {};\n classes = {};\n edges = [];\n funs = [setupToolTips];\n subGraphs = [];\n subGraphLookup = {};\n subCount = 0;\n tooltips = [];\n firstGraphFlag = true;\n version = ver;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.v)();\n};\nconst setGen = (ver) => {\n version = ver || \"gen-2\";\n};\nconst defaultStyle = function() {\n return \"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;\";\n};\nconst addSubGraph = function(_id, list, _title) {\n let id = _id.text.trim();\n let title = _title.text;\n if (_id === _title && _title.text.match(/\\s/)) {\n id = void 0;\n }\n function uniq(a) {\n const prims = { boolean: {}, number: {}, string: {} };\n const objs = [];\n let dir2;\n const nodeList2 = a.filter(function(item) {\n const type = typeof item;\n if (item.stmt && item.stmt === \"dir\") {\n dir2 = item.value;\n return false;\n }\n if (item.trim() === \"\") {\n return false;\n }\n if (type in prims) {\n return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true;\n } else {\n return objs.includes(item) ? false : objs.push(item);\n }\n });\n return { nodeList: nodeList2, dir: dir2 };\n }\n let nodeList = [];\n const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list));\n nodeList = nl;\n if (version === \"gen-1\") {\n for (let i = 0; i < nodeList.length; i++) {\n nodeList[i] = lookUpDomId(nodeList[i]);\n }\n }\n id = id || \"subGraph\" + subCount;\n title = title || \"\";\n title = sanitizeText(title);\n subCount = subCount + 1;\n const subGraph = {\n id,\n nodes: nodeList,\n title: title.trim(),\n classes: [],\n dir,\n labelType: _title.type\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Adding\", subGraph.id, subGraph.nodes, subGraph.dir);\n subGraph.nodes = makeUniq(subGraph, subGraphs).nodes;\n subGraphs.push(subGraph);\n subGraphLookup[id] = subGraph;\n return id;\n};\nconst getPosForId = function(id) {\n for (const [i, subGraph] of subGraphs.entries()) {\n if (subGraph.id === id) {\n return i;\n }\n }\n return -1;\n};\nlet secCount = -1;\nconst posCrossRef = [];\nconst indexNodes2 = function(id, pos) {\n const nodes = subGraphs[pos].nodes;\n secCount = secCount + 1;\n if (secCount > 2e3) {\n return;\n }\n posCrossRef[secCount] = pos;\n if (subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n };\n }\n let count = 0;\n let posCount = 1;\n while (count < nodes.length) {\n const childPos = getPosForId(nodes[count]);\n if (childPos >= 0) {\n const res = indexNodes2(id, childPos);\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n };\n } else {\n posCount = posCount + res.count;\n }\n }\n count = count + 1;\n }\n return {\n result: false,\n count: posCount\n };\n};\nconst getDepthFirstPos = function(pos) {\n return posCrossRef[pos];\n};\nconst indexNodes = function() {\n secCount = -1;\n if (subGraphs.length > 0) {\n indexNodes2(\"none\", subGraphs.length - 1);\n }\n};\nconst getSubGraphs = function() {\n return subGraphs;\n};\nconst firstGraph = () => {\n if (firstGraphFlag) {\n firstGraphFlag = false;\n return true;\n }\n return false;\n};\nconst destructStartLink = (_str) => {\n let str = _str.trim();\n let type = \"arrow_open\";\n switch (str[0]) {\n case \"<\":\n type = \"arrow_point\";\n str = str.slice(1);\n break;\n case \"x\":\n type = \"arrow_cross\";\n str = str.slice(1);\n break;\n case \"o\":\n type = \"arrow_circle\";\n str = str.slice(1);\n break;\n }\n let stroke = \"normal\";\n if (str.includes(\"=\")) {\n stroke = \"thick\";\n }\n if (str.includes(\".\")) {\n stroke = \"dotted\";\n }\n return { type, stroke };\n};\nconst countChar = (char, str) => {\n const length = str.length;\n let count = 0;\n for (let i = 0; i < length; ++i) {\n if (str[i] === char) {\n ++count;\n }\n }\n return count;\n};\nconst destructEndLink = (_str) => {\n const str = _str.trim();\n let line = str.slice(0, -1);\n let type = \"arrow_open\";\n switch (str.slice(-1)) {\n case \"x\":\n type = \"arrow_cross\";\n if (str[0] === \"x\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \">\":\n type = \"arrow_point\";\n if (str[0] === \"<\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \"o\":\n type = \"arrow_circle\";\n if (str[0] === \"o\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n }\n let stroke = \"normal\";\n let length = line.length - 1;\n if (line[0] === \"=\") {\n stroke = \"thick\";\n }\n if (line[0] === \"~\") {\n stroke = \"invisible\";\n }\n let dots = countChar(\".\", line);\n if (dots) {\n stroke = \"dotted\";\n length = dots;\n }\n return { type, stroke, length };\n};\nconst destructLink = (_str, _startStr) => {\n const info = destructEndLink(_str);\n let startInfo;\n if (_startStr) {\n startInfo = destructStartLink(_startStr);\n if (startInfo.stroke !== info.stroke) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n if (startInfo.type === \"arrow_open\") {\n startInfo.type = info.type;\n } else {\n if (startInfo.type !== info.type) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n startInfo.type = \"double_\" + startInfo.type;\n }\n if (startInfo.type === \"double_arrow\") {\n startInfo.type = \"double_arrow_point\";\n }\n startInfo.length = info.length;\n return startInfo;\n }\n return info;\n};\nconst exists = (allSgs, _id) => {\n let res = false;\n allSgs.forEach((sg) => {\n const pos = sg.nodes.indexOf(_id);\n if (pos >= 0) {\n res = true;\n }\n });\n return res;\n};\nconst makeUniq = (sg, allSubgraphs) => {\n const res = [];\n sg.nodes.forEach((_id, pos) => {\n if (!exists(allSubgraphs, _id)) {\n res.push(sg.nodes[pos]);\n }\n });\n return { nodes: res };\n};\nconst lex = {\n firstGraph\n};\nconst flowDb = {\n parseDirective,\n defaultConfig: () => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.G.flowchart,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.g,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.b,\n addVertex,\n lookUpDomId,\n addLink,\n updateLinkInterpolate,\n updateLink,\n addClass,\n setDirection,\n setClass,\n setTooltip,\n getTooltip,\n setClickEvent,\n setLink,\n bindFunctions,\n getDirection,\n getVertices,\n getEdges,\n getClasses,\n clear,\n setGen,\n defaultStyle,\n addSubGraph,\n getDepthFirstPos,\n indexNodes,\n getSubGraphs,\n destructLink,\n lex,\n exists,\n makeUniq,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.t\n};\nconst db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n addClass,\n addLink,\n addSingleLink,\n addSubGraph,\n addVertex,\n bindFunctions,\n clear,\n default: flowDb,\n defaultStyle,\n destructLink,\n firstGraph,\n getClasses,\n getDepthFirstPos,\n getDirection,\n getEdges,\n getSubGraphs,\n getTooltip,\n getVertices,\n indexNodes,\n lex,\n lookUpDomId,\n parseDirective,\n setClass,\n setClickEvent,\n setDirection,\n setGen,\n setLink,\n updateLink,\n updateLinkInterpolate\n}, Symbol.toStringTag, { value: \"Module\" }));\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9mbG93RGItNmE1N2MxYjQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEI7QUFDaVA7QUFDN1E7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQix3d0VBQXd3RTtBQUN4eEUsa0JBQWtCLDQ3Q0FBNDdDO0FBQzk4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVcsWUFBWTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLGFBQWE7QUFDYjtBQUNBO0FBQ0EsVUFBVSxvQkFBb0I7QUFDOUI7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsNkRBQXVCO0FBQzlDLGFBQWE7QUFDYixhQUFhO0FBQ2IsbUJBQW1CO0FBQ25CLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0JBQXdCLGlCQUFpQjtBQUt4QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2Zsb3dEYi02YTU3YzFiNC5qcz9jNWM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgRyBhcyBkZWZhdWx0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIGMgYXMgZ2V0Q29uZmlnLCBtIGFzIG1lcm1haWRBUEksIGwgYXMgbG9nLCB1IGFzIHV0aWxzLCB2IGFzIGNsZWFyJDEsIGUgYXMgY29tbW9uIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KVxuICAgICAgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgJFYwID0gWzEsIDldLCAkVjEgPSBbMSwgN10sICRWMiA9IFsxLCA2XSwgJFYzID0gWzEsIDhdLCAkVjQgPSBbMSwgMjAsIDIxLCAyMiwgMjMsIDM4LCA0NCwgNDYsIDQ4LCA1MiwgNjYsIDY3LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sICRWNSA9IFsyLCAxMF0sICRWNiA9IFsxLCAyMF0sICRWNyA9IFsxLCAyMV0sICRWOCA9IFsxLCAyMl0sICRWOSA9IFsxLCAyM10sICRWYSA9IFsxLCAzMF0sICRWYiA9IFsxLCAzMl0sICRWYyA9IFsxLCAzM10sICRWZCA9IFsxLCAzNF0sICRWZSA9IFsxLCA2Ml0sICRWZiA9IFsxLCA0OF0sICRWZyA9IFsxLCA1Ml0sICRWaCA9IFsxLCAzNl0sICRWaSA9IFsxLCAzN10sICRWaiA9IFsxLCAzOF0sICRWayA9IFsxLCAzOV0sICRWbCA9IFsxLCA0MF0sICRWbSA9IFsxLCA1Nl0sICRWbiA9IFsxLCA2M10sICRWbyA9IFsxLCA1MV0sICRWcCA9IFsxLCA1M10sICRWcSA9IFsxLCA1NV0sICRWciA9IFsxLCA1OV0sICRWcyA9IFsxLCA2MF0sICRWdCA9IFsxLCA0MV0sICRWdSA9IFsxLCA0Ml0sICRWdiA9IFsxLCA0M10sICRWdyA9IFsxLCA0NF0sICRWeCA9IFsxLCA2MV0sICRWeSA9IFsxLCA1MF0sICRWeiA9IFsxLCA1NF0sICRWQSA9IFsxLCA1N10sICRWQiA9IFsxLCA1OF0sICRWQyA9IFsxLCA0OV0sICRWRCA9IFsxLCA2Nl0sICRWRSA9IFsxLCA3MV0sICRWRiA9IFsxLCAyMCwgMjEsIDIyLCAyMywgMzgsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNjYsIDY3LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sICRWRyA9IFsxLCA3NV0sICRWSCA9IFsxLCA3NF0sICRWSSA9IFsxLCA3Nl0sICRWSiA9IFsyMCwgMjEsIDIzLCA4MSwgODJdLCAkVksgPSBbMSwgOTldLCAkVkwgPSBbMSwgMTA0XSwgJFZNID0gWzEsIDEwN10sICRWTiA9IFsxLCAxMDhdLCAkVk8gPSBbMSwgMTAxXSwgJFZQID0gWzEsIDEwNl0sICRWUSA9IFsxLCAxMDldLCAkVlIgPSBbMSwgMTAyXSwgJFZTID0gWzEsIDExNF0sICRWVCA9IFsxLCAxMTNdLCAkVlUgPSBbMSwgMTAzXSwgJFZWID0gWzEsIDEwNV0sICRWVyA9IFsxLCAxMTBdLCAkVlggPSBbMSwgMTExXSwgJFZZID0gWzEsIDExMl0sICRWWiA9IFsxLCAxMTVdLCAkVl8gPSBbMjAsIDIxLCAyMiwgMjMsIDgxLCA4Ml0sICRWJCA9IFsyMCwgMjEsIDIyLCAyMywgNTMsIDgxLCA4Ml0sICRWMDEgPSBbMjAsIDIxLCAyMiwgMjMsIDQwLCA1MiwgNTMsIDU1LCA1NywgNTksIDYxLCA2MywgNjUsIDY2LCA2NywgNjksIDcxLCA3MywgNzQsIDc2LCA4MSwgODIsIDkyLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjhdLCAkVjExID0gWzIwLCAyMSwgMjNdLCAkVjIxID0gWzIwLCAyMSwgMjMsIDUyLCA2NiwgNjcsIDgxLCA4MiwgOTIsIDk2LCAxMDYsIDEwNywgMTEwLCAxMTIsIDExMywgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sICRWMzEgPSBbMSwgMTIsIDIwLCAyMSwgMjIsIDIzLCAyNCwgMzgsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNjYsIDY3LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sICRWNDEgPSBbNTIsIDY2LCA2NywgOTIsIDk2LCAxMDYsIDEwNywgMTEwLCAxMTIsIDExMywgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sICRWNTEgPSBbMSwgMTUwXSwgJFY2MSA9IFsxLCAxNThdLCAkVjcxID0gWzEsIDE1OV0sICRWODEgPSBbMSwgMTYwXSwgJFY5MSA9IFsxLCAxNjFdLCAkVmExID0gWzEsIDE0NV0sICRWYjEgPSBbMSwgMTQ2XSwgJFZjMSA9IFsxLCAxNDFdLCAkVmQxID0gWzEsIDE0Ml0sICRWZTEgPSBbMSwgMTUzXSwgJFZmMSA9IFsxLCAxNTRdLCAkVmcxID0gWzEsIDE1NV0sICRWaDEgPSBbMSwgMTU2XSwgJFZpMSA9IFsxLCAxNTddLCAkVmoxID0gWzEsIDE2Ml0sICRWazEgPSBbMSwgMTYzXSwgJFZsMSA9IFsxLCAxNDhdLCAkVm0xID0gWzEsIDE1MV0sICRWbjEgPSBbMSwgMTQ3XSwgJFZvMSA9IFsxLCAxNDRdLCAkVnAxID0gWzIwLCAyMSwgMjIsIDIzLCAzOCwgNDIsIDQ0LCA0NiwgNDgsIDUyLCA2NiwgNjcsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDk2LCAxMDYsIDEwNywgMTEwLCAxMTIsIDExMywgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4XSwgJFZxMSA9IFsxLCAxNjZdLCAkVnIxID0gWzIwLCAyMSwgMjIsIDIzLCAyNiwgNTIsIDY2LCA2NywgOTIsIDEwNiwgMTA3LCAxMTAsIDExMiwgMTEzLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4XSwgJFZzMSA9IFsyMCwgMjEsIDIyLCAyMywgMjQsIDI2LCAzOCwgNDAsIDQxLCA0MiwgNTIsIDU2LCA1OCwgNjAsIDYyLCA2NCwgNjYsIDY3LCA2OCwgNzAsIDcyLCA3MywgNzUsIDc3LCA4MSwgODIsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4XSwgJFZ0MSA9IFsxMiwgMjEsIDIyLCAyNF0sICRWdTEgPSBbMjIsIDEwN10sICRWdjEgPSBbMSwgMjUxXSwgJFZ3MSA9IFsxLCAyNDZdLCAkVngxID0gWzEsIDI0N10sICRWeTEgPSBbMSwgMjU1XSwgJFZ6MSA9IFsxLCAyNTJdLCAkVkExID0gWzEsIDI0OV0sICRWQjEgPSBbMSwgMjQ4XSwgJFZDMSA9IFsxLCAyNTBdLCAkVkQxID0gWzEsIDI1M10sICRWRTEgPSBbMSwgMjU0XSwgJFZGMSA9IFsxLCAyNTZdLCAkVkcxID0gWzEsIDI3NF0sICRWSDEgPSBbMjAsIDIxLCAyMywgMTA3XSwgJFZJMSA9IFsyMCwgMjEsIDIyLCAyMywgNjYsIDY3LCA4NywgMTAzLCAxMDYsIDEwNywgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTRdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwibWVybWFpZERvY1wiOiA0LCBcImRpcmVjdGl2ZVwiOiA1LCBcIm9wZW5EaXJlY3RpdmVcIjogNiwgXCJ0eXBlRGlyZWN0aXZlXCI6IDcsIFwiY2xvc2VEaXJlY3RpdmVcIjogOCwgXCJzZXBhcmF0b3JcIjogOSwgXCI6XCI6IDEwLCBcImFyZ0RpcmVjdGl2ZVwiOiAxMSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiAxMiwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiAxMywgXCJhcmdfZGlyZWN0aXZlXCI6IDE0LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiAxNSwgXCJncmFwaENvbmZpZ1wiOiAxNiwgXCJkb2N1bWVudFwiOiAxNywgXCJsaW5lXCI6IDE4LCBcInN0YXRlbWVudFwiOiAxOSwgXCJTRU1JXCI6IDIwLCBcIk5FV0xJTkVcIjogMjEsIFwiU1BBQ0VcIjogMjIsIFwiRU9GXCI6IDIzLCBcIkdSQVBIXCI6IDI0LCBcIk5PRElSXCI6IDI1LCBcIkRJUlwiOiAyNiwgXCJGaXJzdFN0bXRTZXBlcmF0b3JcIjogMjcsIFwiZW5kaW5nXCI6IDI4LCBcImVuZFRva2VuXCI6IDI5LCBcInNwYWNlTGlzdFwiOiAzMCwgXCJzcGFjZUxpc3ROZXdsaW5lXCI6IDMxLCBcInZlcnRpY2VTdGF0ZW1lbnRcIjogMzIsIFwic3R5bGVTdGF0ZW1lbnRcIjogMzMsIFwibGlua1N0eWxlU3RhdGVtZW50XCI6IDM0LCBcImNsYXNzRGVmU3RhdGVtZW50XCI6IDM1LCBcImNsYXNzU3RhdGVtZW50XCI6IDM2LCBcImNsaWNrU3RhdGVtZW50XCI6IDM3LCBcInN1YmdyYXBoXCI6IDM4LCBcInRleHRcIjogMzksIFwiU1FTXCI6IDQwLCBcIlNRRVwiOiA0MSwgXCJlbmRcIjogNDIsIFwiZGlyZWN0aW9uXCI6IDQzLCBcImFjY190aXRsZVwiOiA0NCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogNDUsIFwiYWNjX2Rlc2NyXCI6IDQ2LCBcImFjY19kZXNjcl92YWx1ZVwiOiA0NywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDQ4LCBcImxpbmtcIjogNDksIFwibm9kZVwiOiA1MCwgXCJ2ZXJ0ZXhcIjogNTEsIFwiQU1QXCI6IDUyLCBcIlNUWUxFX1NFUEFSQVRPUlwiOiA1MywgXCJpZFN0cmluZ1wiOiA1NCwgXCJET1VCTEVDSVJDTEVTVEFSVFwiOiA1NSwgXCJET1VCTEVDSVJDTEVFTkRcIjogNTYsIFwiUFNcIjogNTcsIFwiUEVcIjogNTgsIFwiKC1cIjogNTksIFwiLSlcIjogNjAsIFwiU1RBRElVTVNUQVJUXCI6IDYxLCBcIlNUQURJVU1FTkRcIjogNjIsIFwiU1VCUk9VVElORVNUQVJUXCI6IDYzLCBcIlNVQlJPVVRJTkVFTkRcIjogNjQsIFwiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlRcIjogNjUsIFwiQUxQSEFcIjogNjYsIFwiQ09MT05cIjogNjcsIFwiUElQRVwiOiA2OCwgXCJDWUxJTkRFUlNUQVJUXCI6IDY5LCBcIkNZTElOREVSRU5EXCI6IDcwLCBcIkRJQU1PTkRfU1RBUlRcIjogNzEsIFwiRElBTU9ORF9TVE9QXCI6IDcyLCBcIlRBR0VORFwiOiA3MywgXCJUUkFQU1RBUlRcIjogNzQsIFwiVFJBUEVORFwiOiA3NSwgXCJJTlZUUkFQU1RBUlRcIjogNzYsIFwiSU5WVFJBUEVORFwiOiA3NywgXCJsaW5rU3RhdGVtZW50XCI6IDc4LCBcImFycm93VGV4dFwiOiA3OSwgXCJURVNUU1RSXCI6IDgwLCBcIlNUQVJUX0xJTktcIjogODEsIFwiTElOS1wiOiA4MiwgXCJ0ZXh0VG9rZW5cIjogODMsIFwiU1RSXCI6IDg0LCBcIk1EX1NUUlwiOiA4NSwgXCJrZXl3b3Jkc1wiOiA4NiwgXCJTVFlMRVwiOiA4NywgXCJMSU5LU1RZTEVcIjogODgsIFwiQ0xBU1NERUZcIjogODksIFwiQ0xBU1NcIjogOTAsIFwiQ0xJQ0tcIjogOTEsIFwiRE9XTlwiOiA5MiwgXCJVUFwiOiA5MywgXCJ0ZXh0Tm9UYWdzXCI6IDk0LCBcInRleHROb1RhZ3NUb2tlblwiOiA5NSwgXCJERUZBVUxUXCI6IDk2LCBcInN0eWxlc09wdFwiOiA5NywgXCJhbHBoYU51bVwiOiA5OCwgXCJDQUxMQkFDS05BTUVcIjogOTksIFwiQ0FMTEJBQ0tBUkdTXCI6IDEwMCwgXCJIUkVGXCI6IDEwMSwgXCJMSU5LX1RBUkdFVFwiOiAxMDIsIFwiSEVYXCI6IDEwMywgXCJudW1MaXN0XCI6IDEwNCwgXCJJTlRFUlBPTEFURVwiOiAxMDUsIFwiTlVNXCI6IDEwNiwgXCJDT01NQVwiOiAxMDcsIFwic3R5bGVcIjogMTA4LCBcInN0eWxlQ29tcG9uZW50XCI6IDEwOSwgXCJNSU5VU1wiOiAxMTAsIFwiVU5JVFwiOiAxMTEsIFwiQlJLVFwiOiAxMTIsIFwiRE9UXCI6IDExMywgXCJQQ1RcIjogMTE0LCBcIlRBR1NUQVJUXCI6IDExNSwgXCJhbHBoYU51bVRva2VuXCI6IDExNiwgXCJpZFN0cmluZ1Rva2VuXCI6IDExNywgXCJhbHBoYU51bVN0YXRlbWVudFwiOiAxMTgsIFwiZGlyZWN0aW9uX3RiXCI6IDExOSwgXCJkaXJlY3Rpb25fYnRcIjogMTIwLCBcImRpcmVjdGlvbl9ybFwiOiAxMjEsIFwiZGlyZWN0aW9uX2xyXCI6IDEyMiwgXCJQVU5DVFVBVElPTlwiOiAxMjMsIFwiVU5JQ09ERV9URVhUXCI6IDEyNCwgXCJQTFVTXCI6IDEyNSwgXCJFUVVBTFNcIjogMTI2LCBcIk1VTFRcIjogMTI3LCBcIlVOREVSU0NPUkVcIjogMTI4LCBcImdyYXBoQ29kZVRva2Vuc1wiOiAxMjksIFwiQVJST1dfQ1JPU1NcIjogMTMwLCBcIkFSUk9XX1BPSU5UXCI6IDEzMSwgXCJBUlJPV19DSVJDTEVcIjogMTMyLCBcIkFSUk9XX09QRU5cIjogMTMzLCBcIlFVT1RFXCI6IDEzNCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDEwOiBcIjpcIiwgMTI6IFwib3Blbl9kaXJlY3RpdmVcIiwgMTM6IFwidHlwZV9kaXJlY3RpdmVcIiwgMTQ6IFwiYXJnX2RpcmVjdGl2ZVwiLCAxNTogXCJjbG9zZV9kaXJlY3RpdmVcIiwgMjA6IFwiU0VNSVwiLCAyMTogXCJORVdMSU5FXCIsIDIyOiBcIlNQQUNFXCIsIDIzOiBcIkVPRlwiLCAyNDogXCJHUkFQSFwiLCAyNTogXCJOT0RJUlwiLCAyNjogXCJESVJcIiwgMzg6IFwic3ViZ3JhcGhcIiwgNDA6IFwiU1FTXCIsIDQxOiBcIlNRRVwiLCA0MjogXCJlbmRcIiwgNDQ6IFwiYWNjX3RpdGxlXCIsIDQ1OiBcImFjY190aXRsZV92YWx1ZVwiLCA0NjogXCJhY2NfZGVzY3JcIiwgNDc6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDQ4OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgNTI6IFwiQU1QXCIsIDUzOiBcIlNUWUxFX1NFUEFSQVRPUlwiLCA1NTogXCJET1VCTEVDSVJDTEVTVEFSVFwiLCA1NjogXCJET1VCTEVDSVJDTEVFTkRcIiwgNTc6IFwiUFNcIiwgNTg6IFwiUEVcIiwgNTk6IFwiKC1cIiwgNjA6IFwiLSlcIiwgNjE6IFwiU1RBRElVTVNUQVJUXCIsIDYyOiBcIlNUQURJVU1FTkRcIiwgNjM6IFwiU1VCUk9VVElORVNUQVJUXCIsIDY0OiBcIlNVQlJPVVRJTkVFTkRcIiwgNjU6IFwiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlRcIiwgNjY6IFwiQUxQSEFcIiwgNjc6IFwiQ09MT05cIiwgNjg6IFwiUElQRVwiLCA2OTogXCJDWUxJTkRFUlNUQVJUXCIsIDcwOiBcIkNZTElOREVSRU5EXCIsIDcxOiBcIkRJQU1PTkRfU1RBUlRcIiwgNzI6IFwiRElBTU9ORF9TVE9QXCIsIDczOiBcIlRBR0VORFwiLCA3NDogXCJUUkFQU1RBUlRcIiwgNzU6IFwiVFJBUEVORFwiLCA3NjogXCJJTlZUUkFQU1RBUlRcIiwgNzc6IFwiSU5WVFJBUEVORFwiLCA4MDogXCJURVNUU1RSXCIsIDgxOiBcIlNUQVJUX0xJTktcIiwgODI6IFwiTElOS1wiLCA4NDogXCJTVFJcIiwgODU6IFwiTURfU1RSXCIsIDg3OiBcIlNUWUxFXCIsIDg4OiBcIkxJTktTVFlMRVwiLCA4OTogXCJDTEFTU0RFRlwiLCA5MDogXCJDTEFTU1wiLCA5MTogXCJDTElDS1wiLCA5MjogXCJET1dOXCIsIDkzOiBcIlVQXCIsIDk2OiBcIkRFRkFVTFRcIiwgOTk6IFwiQ0FMTEJBQ0tOQU1FXCIsIDEwMDogXCJDQUxMQkFDS0FSR1NcIiwgMTAxOiBcIkhSRUZcIiwgMTAyOiBcIkxJTktfVEFSR0VUXCIsIDEwMzogXCJIRVhcIiwgMTA1OiBcIklOVEVSUE9MQVRFXCIsIDEwNjogXCJOVU1cIiwgMTA3OiBcIkNPTU1BXCIsIDExMDogXCJNSU5VU1wiLCAxMTE6IFwiVU5JVFwiLCAxMTI6IFwiQlJLVFwiLCAxMTM6IFwiRE9UXCIsIDExNDogXCJQQ1RcIiwgMTE1OiBcIlRBR1NUQVJUXCIsIDExOTogXCJkaXJlY3Rpb25fdGJcIiwgMTIwOiBcImRpcmVjdGlvbl9idFwiLCAxMjE6IFwiZGlyZWN0aW9uX3JsXCIsIDEyMjogXCJkaXJlY3Rpb25fbHJcIiwgMTIzOiBcIlBVTkNUVUFUSU9OXCIsIDEyNDogXCJVTklDT0RFX1RFWFRcIiwgMTI1OiBcIlBMVVNcIiwgMTI2OiBcIkVRVUFMU1wiLCAxMjc6IFwiTVVMVFwiLCAxMjg6IFwiVU5ERVJTQ09SRVwiLCAxMzA6IFwiQVJST1dfQ1JPU1NcIiwgMTMxOiBcIkFSUk9XX1BPSU5UXCIsIDEzMjogXCJBUlJPV19DSVJDTEVcIiwgMTMzOiBcIkFSUk9XX09QRU5cIiwgMTM0OiBcIlFVT1RFXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgMV0sIFszLCAyXSwgWzUsIDRdLCBbNSwgNl0sIFs2LCAxXSwgWzcsIDFdLCBbMTEsIDFdLCBbOCwgMV0sIFs0LCAyXSwgWzE3LCAwXSwgWzE3LCAyXSwgWzE4LCAxXSwgWzE4LCAxXSwgWzE4LCAxXSwgWzE4LCAxXSwgWzE4LCAxXSwgWzE2LCAyXSwgWzE2LCAyXSwgWzE2LCAyXSwgWzE2LCAzXSwgWzI4LCAyXSwgWzI4LCAxXSwgWzI5LCAxXSwgWzI5LCAxXSwgWzI5LCAxXSwgWzI3LCAxXSwgWzI3LCAxXSwgWzI3LCAyXSwgWzMxLCAyXSwgWzMxLCAyXSwgWzMxLCAxXSwgWzMxLCAxXSwgWzMwLCAyXSwgWzMwLCAxXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCA5XSwgWzE5LCA2XSwgWzE5LCA0XSwgWzE5LCAxXSwgWzE5LCAyXSwgWzE5LCAyXSwgWzE5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzMyLCAzXSwgWzMyLCA0XSwgWzMyLCAyXSwgWzMyLCAxXSwgWzUwLCAxXSwgWzUwLCA1XSwgWzUwLCAzXSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA2XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA4XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA2XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCA0XSwgWzUxLCAxXSwgWzQ5LCAyXSwgWzQ5LCAzXSwgWzQ5LCAzXSwgWzQ5LCAxXSwgWzQ5LCAzXSwgWzc4LCAxXSwgWzc5LCAzXSwgWzM5LCAxXSwgWzM5LCAyXSwgWzM5LCAxXSwgWzM5LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzk0LCAxXSwgWzk0LCAyXSwgWzM1LCA1XSwgWzM1LCA1XSwgWzM2LCA1XSwgWzM3LCAyXSwgWzM3LCA0XSwgWzM3LCAzXSwgWzM3LCA1XSwgWzM3LCAyXSwgWzM3LCA0XSwgWzM3LCA0XSwgWzM3LCA2XSwgWzM3LCAyXSwgWzM3LCA0XSwgWzM3LCAyXSwgWzM3LCA0XSwgWzM3LCA0XSwgWzM3LCA2XSwgWzMzLCA1XSwgWzMzLCA1XSwgWzM0LCA1XSwgWzM0LCA1XSwgWzM0LCA5XSwgWzM0LCA5XSwgWzM0LCA3XSwgWzM0LCA3XSwgWzEwNCwgMV0sIFsxMDQsIDNdLCBbOTcsIDFdLCBbOTcsIDNdLCBbMTA4LCAxXSwgWzEwOCwgMl0sIFsxMDksIDFdLCBbMTA5LCAxXSwgWzEwOSwgMV0sIFsxMDksIDFdLCBbMTA5LCAxXSwgWzEwOSwgMV0sIFsxMDksIDFdLCBbMTA5LCAxXSwgWzEwOSwgMV0sIFsxMDksIDFdLCBbMTA5LCAxXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzk1LCAxXSwgWzk1LCAxXSwgWzk1LCAxXSwgWzk1LCAxXSwgWzU0LCAxXSwgWzU0LCAyXSwgWzk4LCAxXSwgWzk4LCAyXSwgWzExOCwgMV0sIFsxMTgsIDFdLCBbMTE4LCAxXSwgWzExOCwgMV0sIFs0MywgMV0sIFs0MywgMV0sIFs0MywgMV0sIFs0MywgMV0sIFsxMTYsIDFdLCBbMTE2LCAxXSwgWzExNiwgMV0sIFsxMTYsIDFdLCBbMTE2LCAxXSwgWzExNiwgMV0sIFsxMTYsIDFdLCBbMTE2LCAxXSwgWzExNiwgMV0sIFsxMTYsIDFdLCBbMTE2LCAxXSwgWzExNiwgMV0sIFsxMTYsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdLCBbMTI5LCAxXSwgWzEyOSwgMV0sIFsxMjksIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIiUle1wiLCBcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgJCRbJDBdID0gJCRbJDBdLnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCJ9JSVcIiwgXCJjbG9zZV9kaXJlY3RpdmVcIiwgXCJmbG93Y2hhcnRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KCQkWyQwXSkgfHwgJCRbJDBdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICBjYXNlIDk3OlxuICAgICAgICBjYXNlIDE1MzpcbiAgICAgICAgY2FzZSAxNTU6XG4gICAgICAgIGNhc2UgMTU2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSBcIlRCXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXS5ub2RlcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5hZGRTdWJHcmFwaCgkJFskMCAtIDZdLCAkJFskMCAtIDFdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5hZGRTdWJHcmFwaCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5hZGRTdWJHcmFwaCh2b2lkIDAsICQkWyQwIC0gMV0sIHZvaWQgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ2OlxuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICB5eS5hZGRMaW5rKCQkWyQwIC0gMl0uc3RtdCwgJCRbJDBdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwXSwgbm9kZXM6ICQkWyQwXS5jb25jYXQoJCRbJDAgLSAyXS5ub2RlcykgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB5eS5hZGRMaW5rKCQkWyQwIC0gM10uc3RtdCwgJCRbJDAgLSAxXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiAkJFskMCAtIDFdLCBub2RlczogJCRbJDAgLSAxXS5jb25jYXQoJCRbJDAgLSAzXS5ub2RlcykgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwIC0gMV0sIG5vZGVzOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiAkJFskMF0sIG5vZGVzOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdLmNvbmNhdCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDJdXTtcbiAgICAgICAgICB5eS5zZXRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwic3F1YXJlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwiZG91YmxlY2lyY2xlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNV07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gNV0sICQkWyQwIC0gMl0sIFwiY2lyY2xlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwiZWxsaXBzZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInN0YWRpdW1cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJzdWJyb3V0aW5lXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gN107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gN10sICQkWyQwIC0gMV0sIFwicmVjdFwiLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBPYmplY3QuZnJvbUVudHJpZXMoW1skJFskMCAtIDVdLCAkJFskMCAtIDNdXV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImN5bGluZGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwicm91bmRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJkaWFtb25kXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNV07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gNV0sICQkWyQwIC0gMl0sIFwiaGV4YWdvblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcIm9kZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInRyYXBlem9pZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImludl90cmFwZXpvaWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJsZWFuX3JpZ2h0XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwibGVhbl9sZWZ0XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICAkJFskMCAtIDFdLnRleHQgPSAkJFskMF07XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICAkJFskMCAtIDJdLnRleHQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHZhciBpbmYgPSB5eS5kZXN0cnVjdExpbmsoJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IFwidHlwZVwiOiBpbmYudHlwZSwgXCJzdHJva2VcIjogaW5mLnN0cm9rZSwgXCJsZW5ndGhcIjogaW5mLmxlbmd0aCwgXCJ0ZXh0XCI6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICB2YXIgaW5mID0geXkuZGVzdHJ1Y3RMaW5rKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBcInR5cGVcIjogaW5mLnR5cGUsIFwic3Ryb2tlXCI6IGluZi5zdHJva2UsIFwibGVuZ3RoXCI6IGluZi5sZW5ndGggfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcInRleHRcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDAgLSAxXS50ZXh0ICsgXCJcIiArICQkWyQwXSwgdHlwZTogJCRbJDAgLSAxXS50eXBlIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwibWFya2Rvd25cIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk4OlxuICAgICAgICBjYXNlIDE1NDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCJcIiArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OTpcbiAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnNldENsYXNzKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICBjYXNlIDExMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDNdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gM10sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSA0XSwgJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDRdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwNjpcbiAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICBjYXNlIDExMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDVdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSA1XSwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gNV0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDJdLCB2b2lkIDAsIHZvaWQgMCwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTc6XG4gICAgICAgIGNhc2UgMTE5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkudXBkYXRlTGluaygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoWyQkWyQwIC0gMl1dLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDhdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbJCRbJDAgLSA2XV0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoWyQkWyQwIC0gNl1dLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDhdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZSgkJFskMCAtIDZdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rKCQkWyQwIC0gNl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNl07XG4gICAgICAgICAgeXkudXBkYXRlTGlua0ludGVycG9sYXRlKFskJFskMCAtIDRdXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA2XTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjQ6XG4gICAgICAgIGNhc2UgMTI2OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgY2FzZSAxMjc6XG4gICAgICAgICAgJCRbJDAgLSAyXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1MjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCJcIiArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTc6XG4gICAgICAgICAgdGhpcy4kID0gXCJ2XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU4OlxuICAgICAgICAgIHRoaXMuJCA9IFwiLVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjA6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcImRpclwiLCB2YWx1ZTogXCJCVFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTYxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJkaXJcIiwgdmFsdWU6IFwiUkxcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2MjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAyLCA1OiAzLCA2OiA1LCAxMjogJFYwLCAxNjogNCwgMjE6ICRWMSwgMjI6ICRWMiwgMjQ6ICRWMyB9LCB7IDE6IFszXSB9LCB7IDE6IFsyLCAxXSB9LCB7IDM6IDEwLCA0OiAyLCA1OiAzLCA2OiA1LCAxMjogJFYwLCAxNjogNCwgMjE6ICRWMSwgMjI6ICRWMiwgMjQ6ICRWMyB9LCBvKCRWNCwgJFY1LCB7IDE3OiAxMSB9KSwgeyA3OiAxMiwgMTM6IFsxLCAxM10gfSwgeyAxNjogMTQsIDIxOiAkVjEsIDIyOiAkVjIsIDI0OiAkVjMgfSwgeyAxNjogMTUsIDIxOiAkVjEsIDIyOiAkVjIsIDI0OiAkVjMgfSwgeyAyNTogWzEsIDE2XSwgMjY6IFsxLCAxN10gfSwgeyAxMzogWzIsIDVdIH0sIHsgMTogWzIsIDJdIH0sIHsgMTogWzIsIDldLCAxODogMTgsIDE5OiAxOSwgMjA6ICRWNiwgMjE6ICRWNywgMjI6ICRWOCwgMjM6ICRWOSwgMzI6IDI0LCAzMzogMjUsIDM0OiAyNiwgMzU6IDI3LCAzNjogMjgsIDM3OiAyOSwgMzg6ICRWYSwgNDM6IDMxLCA0NDogJFZiLCA0NjogJFZjLCA0ODogJFZkLCA1MDogMzUsIDUxOiA0NSwgNTI6ICRWZSwgNTQ6IDQ2LCA2NjogJFZmLCA2NzogJFZnLCA4NzogJFZoLCA4ODogJFZpLCA4OTogJFZqLCA5MDogJFZrLCA5MTogJFZsLCA5MjogJFZtLCA5NjogJFZuLCAxMDY6ICRWbywgMTA3OiAkVnAsIDExMDogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDExNzogNDcsIDExOTogJFZ0LCAxMjA6ICRWdSwgMTIxOiAkVnYsIDEyMjogJFZ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIHsgODogNjQsIDEwOiBbMSwgNjVdLCAxNTogJFZEIH0sIG8oWzEwLCAxNV0sIFsyLCA2XSksIG8oJFY0LCBbMiwgMTddKSwgbygkVjQsIFsyLCAxOF0pLCBvKCRWNCwgWzIsIDE5XSksIHsgMjA6IFsxLCA2OF0sIDIxOiBbMSwgNjldLCAyMjogJFZFLCAyNzogNjcsIDMwOiA3MCB9LCBvKCRWRiwgWzIsIDExXSksIG8oJFZGLCBbMiwgMTJdKSwgbygkVkYsIFsyLCAxM10pLCBvKCRWRiwgWzIsIDE0XSksIG8oJFZGLCBbMiwgMTVdKSwgbygkVkYsIFsyLCAxNl0pLCB7IDk6IDcyLCAyMDogJFZHLCAyMTogJFZILCAyMzogJFZJLCA0OTogNzMsIDc4OiA3NywgODE6IFsxLCA3OF0sIDgyOiBbMSwgNzldIH0sIHsgOTogODAsIDIwOiAkVkcsIDIxOiAkVkgsIDIzOiAkVkkgfSwgeyA5OiA4MSwgMjA6ICRWRywgMjE6ICRWSCwgMjM6ICRWSSB9LCB7IDk6IDgyLCAyMDogJFZHLCAyMTogJFZILCAyMzogJFZJIH0sIHsgOTogODMsIDIwOiAkVkcsIDIxOiAkVkgsIDIzOiAkVkkgfSwgeyA5OiA4NCwgMjA6ICRWRywgMjE6ICRWSCwgMjM6ICRWSSB9LCB7IDk6IDg2LCAyMDogJFZHLCAyMTogJFZILCAyMjogWzEsIDg1XSwgMjM6ICRWSSB9LCBvKCRWRiwgWzIsIDQ0XSksIHsgNDU6IFsxLCA4N10gfSwgeyA0NzogWzEsIDg4XSB9LCBvKCRWRiwgWzIsIDQ3XSksIG8oJFZKLCBbMiwgNTRdLCB7IDMwOiA4OSwgMjI6ICRWRSB9KSwgeyAyMjogWzEsIDkwXSB9LCB7IDIyOiBbMSwgOTFdIH0sIHsgMjI6IFsxLCA5Ml0gfSwgeyAyMjogWzEsIDkzXSB9LCB7IDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDg0OiBbMSwgOTddLCA5MjogJFZPLCA5ODogOTYsIDk5OiBbMSwgOTRdLCAxMDE6IFsxLCA5NV0sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE2OiAxMDAsIDExODogOTgsIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkVkYsIFsyLCAxNTldKSwgbygkVkYsIFsyLCAxNjBdKSwgbygkVkYsIFsyLCAxNjFdKSwgbygkVkYsIFsyLCAxNjJdKSwgbygkVl8sIFsyLCA1NV0sIHsgNTM6IFsxLCAxMTZdIH0pLCBvKCRWJCwgWzIsIDc0XSwgeyAxMTc6IDEyOSwgNDA6IFsxLCAxMTddLCA1MjogJFZlLCA1NTogWzEsIDExOF0sIDU3OiBbMSwgMTE5XSwgNTk6IFsxLCAxMjBdLCA2MTogWzEsIDEyMV0sIDYzOiBbMSwgMTIyXSwgNjU6IFsxLCAxMjNdLCA2NjogJFZmLCA2NzogJFZnLCA2OTogWzEsIDEyNF0sIDcxOiBbMSwgMTI1XSwgNzM6IFsxLCAxMjZdLCA3NDogWzEsIDEyN10sIDc2OiBbMSwgMTI4XSwgOTI6ICRWbSwgOTY6ICRWbiwgMTA2OiAkVm8sIDEwNzogJFZwLCAxMTA6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0pLCBvKCRWMDEsIFsyLCAxNTFdKSwgbygkVjAxLCBbMiwgMTc2XSksIG8oJFYwMSwgWzIsIDE3N10pLCBvKCRWMDEsIFsyLCAxNzhdKSwgbygkVjAxLCBbMiwgMTc5XSksIG8oJFYwMSwgWzIsIDE4MF0pLCBvKCRWMDEsIFsyLCAxODFdKSwgbygkVjAxLCBbMiwgMTgyXSksIG8oJFYwMSwgWzIsIDE4M10pLCBvKCRWMDEsIFsyLCAxODRdKSwgbygkVjAxLCBbMiwgMTg1XSksIG8oJFYwMSwgWzIsIDE4Nl0pLCBvKCRWMDEsIFsyLCAxODddKSwgbygkVjAxLCBbMiwgMTg4XSksIG8oJFYwMSwgWzIsIDE4OV0pLCBvKCRWMDEsIFsyLCAxOTBdKSwgbygkVjAxLCBbMiwgMTkxXSksIHsgOTogMTMwLCAyMDogJFZHLCAyMTogJFZILCAyMzogJFZJIH0sIHsgMTE6IDEzMSwgMTQ6IFsxLCAxMzJdIH0sIG8oJFYxMSwgWzIsIDhdKSwgbygkVjQsIFsyLCAyMF0pLCBvKCRWNCwgWzIsIDI2XSksIG8oJFY0LCBbMiwgMjddKSwgeyAyMTogWzEsIDEzM10gfSwgbygkVjIxLCBbMiwgMzRdLCB7IDMwOiAxMzQsIDIyOiAkVkUgfSksIG8oJFZGLCBbMiwgMzVdKSwgeyA1MDogMTM1LCA1MTogNDUsIDUyOiAkVmUsIDU0OiA0NiwgNjY6ICRWZiwgNjc6ICRWZywgOTI6ICRWbSwgOTY6ICRWbiwgMTA2OiAkVm8sIDEwNzogJFZwLCAxMTA6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTc6IDQ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIG8oJFYzMSwgWzIsIDQ4XSksIG8oJFYzMSwgWzIsIDQ5XSksIG8oJFYzMSwgWzIsIDUwXSksIG8oJFY0MSwgWzIsIDc4XSwgeyA3OTogMTM2LCA2ODogWzEsIDEzOF0sIDgwOiBbMSwgMTM3XSB9KSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDEzOSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCBvKFs1MiwgNjYsIDY3LCA2OCwgODAsIDkyLCA5NiwgMTA2LCAxMDcsIDExMCwgMTEyLCAxMTMsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjhdLCBbMiwgODBdKSwgbygkVkYsIFsyLCAzNl0pLCBvKCRWRiwgWzIsIDM3XSksIG8oJFZGLCBbMiwgMzhdKSwgbygkVkYsIFsyLCAzOV0pLCBvKCRWRiwgWzIsIDQwXSksIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAxNjQsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkVnAxLCAkVjUsIHsgMTc6IDE2NSB9KSwgbygkVkYsIFsyLCA0NV0pLCBvKCRWRiwgWzIsIDQ2XSksIG8oJFZKLCBbMiwgNTNdLCB7IDUyOiAkVnExIH0pLCB7IDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDk4OiAxNjcsIDEwMzogWzEsIDE2OF0sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE2OiAxMDAsIDExODogOTgsIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyA5NjogWzEsIDE2OV0sIDEwNDogMTcwLCAxMDY6IFsxLCAxNzFdIH0sIHsgMjY6ICRWSywgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgOTI6ICRWTywgOTY6IFsxLCAxNzJdLCA5ODogMTczLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZSLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNjogMTAwLCAxMTg6IDk4LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjY6ICRWSywgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgOTI6ICRWTywgOTg6IDE3NCwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWUiwgMTEyOiAkVlMsIDExMzogJFZULCAxMTY6IDEwMCwgMTE4OiA5OCwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCBvKCRWMTEsIFsyLCAxMDJdLCB7IDIyOiBbMSwgMTc1XSwgMTAwOiBbMSwgMTc2XSB9KSwgbygkVjExLCBbMiwgMTA2XSwgeyAyMjogWzEsIDE3N10gfSksIG8oJFYxMSwgWzIsIDExMF0sIHsgMTE2OiAxMDAsIDExODogMTc5LCAyMjogWzEsIDE3OF0sIDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9KSwgbygkVjExLCBbMiwgMTEyXSwgeyAyMjogWzEsIDE4MF0gfSksIG8oJFZyMSwgWzIsIDE1M10pLCBvKCRWcjEsIFsyLCAxNTVdKSwgbygkVnIxLCBbMiwgMTU2XSksIG8oJFZyMSwgWzIsIDE1N10pLCBvKCRWcjEsIFsyLCAxNThdKSwgbygkVnMxLCBbMiwgMTYzXSksIG8oJFZzMSwgWzIsIDE2NF0pLCBvKCRWczEsIFsyLCAxNjVdKSwgbygkVnMxLCBbMiwgMTY2XSksIG8oJFZzMSwgWzIsIDE2N10pLCBvKCRWczEsIFsyLCAxNjhdKSwgbygkVnMxLCBbMiwgMTY5XSksIG8oJFZzMSwgWzIsIDE3MF0pLCBvKCRWczEsIFsyLCAxNzFdKSwgbygkVnMxLCBbMiwgMTcyXSksIG8oJFZzMSwgWzIsIDE3M10pLCBvKCRWczEsIFsyLCAxNzRdKSwgbygkVnMxLCBbMiwgMTc1XSksIHsgNTI6ICRWZSwgNTQ6IDE4MSwgNjY6ICRWZiwgNjc6ICRWZywgOTI6ICRWbSwgOTY6ICRWbiwgMTA2OiAkVm8sIDEwNzogJFZwLCAxMTA6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTc6IDQ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAxODIsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDE4MywgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCAzOTogMTg1LCA0MjogJFY5MSwgNTI6ICRWTCwgNTc6IFsxLCAxODRdLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDE4NiwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCAzOTogMTg3LCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMTQwLCA4NDogJFZjMSwgODU6ICRWZDEsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAxODgsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyA2NjogWzEsIDE4OV0gfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDE5MCwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCAzOTogMTkxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzE6IFsxLCAxOTJdLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDE5MywgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCAzOTogMTk0LCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMTQwLCA4NDogJFZjMSwgODU6ICRWZDEsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAxOTUsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkVjAxLCBbMiwgMTUyXSksIG8oJFZ0MSwgWzIsIDNdKSwgeyA4OiAxOTYsIDE1OiAkVkQgfSwgeyAxNTogWzIsIDddIH0sIG8oJFY0LCBbMiwgMjhdKSwgbygkVjIxLCBbMiwgMzNdKSwgbygkVkosIFsyLCA1MV0sIHsgMzA6IDE5NywgMjI6ICRWRSB9KSwgbygkVjQxLCBbMiwgNzVdLCB7IDIyOiBbMSwgMTk4XSB9KSwgeyAyMjogWzEsIDE5OV0gfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDIwMCwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MjogWzEsIDIwMV0sIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIG8oJFZzMSwgWzIsIDgyXSksIG8oJFZzMSwgWzIsIDg0XSksIG8oJFZzMSwgWzIsIDg1XSksIG8oJFZzMSwgWzIsIDE0MV0pLCBvKCRWczEsIFsyLCAxNDJdKSwgbygkVnMxLCBbMiwgMTQzXSksIG8oJFZzMSwgWzIsIDE0NF0pLCBvKCRWczEsIFsyLCAxNDVdKSwgbygkVnMxLCBbMiwgMTQ2XSksIG8oJFZzMSwgWzIsIDE0N10pLCBvKCRWczEsIFsyLCAxNDhdKSwgbygkVnMxLCBbMiwgMTQ5XSksIG8oJFZzMSwgWzIsIDE1MF0pLCBvKCRWczEsIFsyLCA4Nl0pLCBvKCRWczEsIFsyLCA4N10pLCBvKCRWczEsIFsyLCA4OF0pLCBvKCRWczEsIFsyLCA4OV0pLCBvKCRWczEsIFsyLCA5MF0pLCBvKCRWczEsIFsyLCA5MV0pLCBvKCRWczEsIFsyLCA5Ml0pLCBvKCRWczEsIFsyLCA5M10pLCBvKCRWczEsIFsyLCA5NF0pLCBvKCRWczEsIFsyLCA5NV0pLCBvKCRWczEsIFsyLCA5Nl0pLCB7IDk6IDIwNCwgMjA6ICRWRywgMjE6ICRWSCwgMjI6ICRWNTEsIDIzOiAkVkksIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDQwOiBbMSwgMjAzXSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAxODogMTgsIDE5OiAxOSwgMjA6ICRWNiwgMjE6ICRWNywgMjI6ICRWOCwgMjM6ICRWOSwgMzI6IDI0LCAzMzogMjUsIDM0OiAyNiwgMzU6IDI3LCAzNjogMjgsIDM3OiAyOSwgMzg6ICRWYSwgNDI6IFsxLCAyMDVdLCA0MzogMzEsIDQ0OiAkVmIsIDQ2OiAkVmMsIDQ4OiAkVmQsIDUwOiAzNSwgNTE6IDQ1LCA1MjogJFZlLCA1NDogNDYsIDY2OiAkVmYsIDY3OiAkVmcsIDg3OiAkVmgsIDg4OiAkVmksIDg5OiAkVmosIDkwOiAkVmssIDkxOiAkVmwsIDkyOiAkVm0sIDk2OiAkVm4sIDEwNjogJFZvLCAxMDc6ICRWcCwgMTEwOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcywgMTE3OiA0NywgMTE5OiAkVnQsIDEyMDogJFZ1LCAxMjE6ICRWdiwgMTIyOiAkVncsIDEyMzogJFZ4LCAxMjQ6ICRWeSwgMTI1OiAkVnosIDEyNjogJFZBLCAxMjc6ICRWQiwgMTI4OiAkVkMgfSwgeyAyMjogJFZFLCAzMDogMjA2IH0sIHsgMjI6IFsxLCAyMDddLCAyNjogJFZLLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA5MjogJFZPLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZSLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNjogMTAwLCAxMTg6IDE3OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiBbMSwgMjA4XSB9LCB7IDIyOiBbMSwgMjA5XSB9LCB7IDIyOiBbMSwgMjEwXSwgMTA3OiBbMSwgMjExXSB9LCBvKCRWdTEsIFsyLCAxMjRdKSwgeyAyMjogWzEsIDIxMl0gfSwgeyAyMjogWzEsIDIxM10sIDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE2OiAxMDAsIDExODogMTc5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6IFsxLCAyMTRdLCAyNjogJFZLLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA5MjogJFZPLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZSLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNjogMTAwLCAxMTg6IDE3OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDg0OiBbMSwgMjE1XSB9LCBvKCRWMTEsIFsyLCAxMDRdLCB7IDIyOiBbMSwgMjE2XSB9KSwgeyA4NDogWzEsIDIxN10sIDEwMjogWzEsIDIxOF0gfSwgeyA4NDogWzEsIDIxOV0gfSwgbygkVnIxLCBbMiwgMTU0XSksIHsgODQ6IFsxLCAyMjBdLCAxMDI6IFsxLCAyMjFdIH0sIG8oJFZfLCBbMiwgNTddLCB7IDExNzogMTI5LCA1MjogJFZlLCA2NjogJFZmLCA2NzogJFZnLCA5MjogJFZtLCA5NjogJFZuLCAxMDY6ICRWbywgMTA3OiAkVnAsIDExMDogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDEyMzogJFZ4LCAxMjQ6ICRWeSwgMTI1OiAkVnosIDEyNjogJFZBLCAxMjc6ICRWQiwgMTI4OiAkVkMgfSksIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDQxOiBbMSwgMjIyXSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDI6ICRWOTEsIDUyOiAkVkwsIDU2OiBbMSwgMjIzXSwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMjAyLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCAzOTogMjI0LCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMTQwLCA4NDogJFZjMSwgODU6ICRWZDEsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDQyOiAkVjkxLCA1MjogJFZMLCA1ODogWzEsIDIyNV0sIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDI6ICRWOTEsIDUyOiAkVkwsIDYwOiBbMSwgMjI2XSwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMjAyLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjI6IFsxLCAyMjddLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDQyOiAkVjkxLCA1MjogJFZMLCA2NDogWzEsIDIyOF0sIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyA2NzogWzEsIDIyOV0gfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDcwOiBbMSwgMjMwXSwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMjAyLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzI6IFsxLCAyMzFdLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAyMzIsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDE6IFsxLCAyMzNdLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMjAyLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNzM6ICRWYTEsIDc1OiBbMSwgMjM0XSwgNzc6IFsxLCAyMzVdLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA3NTogWzEsIDIzN10sIDc3OiBbMSwgMjM2XSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgOTogMjM4LCAyMDogJFZHLCAyMTogJFZILCAyMzogJFZJIH0sIG8oJFZKLCBbMiwgNTJdLCB7IDUyOiAkVnExIH0pLCBvKCRWNDEsIFsyLCA3N10pLCBvKCRWNDEsIFsyLCA3Nl0pLCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MjogJFY5MSwgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgNjg6IFsxLCAyMzldLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIG8oJFY0MSwgWzIsIDc5XSksIG8oJFZzMSwgWzIsIDgzXSksIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDM5OiAyNDAsIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAxNDAsIDg0OiAkVmMxLCA4NTogJFZkMSwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkVnAxLCAkVjUsIHsgMTc6IDI0MSB9KSwgbygkVkYsIFsyLCA0M10pLCB7IDUxOiAyNDIsIDUyOiAkVmUsIDU0OiA0NiwgNjY6ICRWZiwgNjc6ICRWZywgOTI6ICRWbSwgOTY6ICRWbiwgMTA2OiAkVm8sIDEwNzogJFZwLCAxMTA6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTc6IDQ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyNDMsIDEwMzogJFZ6MSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyNTcsIDEwMzogJFZ6MSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyNTgsIDEwMzogJFZ6MSwgMTA1OiBbMSwgMjU5XSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyNjAsIDEwMzogJFZ6MSwgMTA1OiBbMSwgMjYxXSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIHsgMTA2OiBbMSwgMjYyXSB9LCB7IDIyOiAkVnYxLCA2NjogJFZ3MSwgNjc6ICRWeDEsIDg3OiAkVnkxLCA5NzogMjYzLCAxMDM6ICRWejEsIDEwNjogJFZBMSwgMTA4OiAyNDQsIDEwOTogMjQ1LCAxMTA6ICRWQjEsIDExMTogJFZDMSwgMTEyOiAkVkQxLCAxMTM6ICRWRTEsIDExNDogJFZGMSB9LCB7IDIyOiAkVnYxLCA2NjogJFZ3MSwgNjc6ICRWeDEsIDg3OiAkVnkxLCA5NzogMjY0LCAxMDM6ICRWejEsIDEwNjogJFZBMSwgMTA4OiAyNDQsIDEwOTogMjQ1LCAxMTA6ICRWQjEsIDExMTogJFZDMSwgMTEyOiAkVkQxLCAxMTM6ICRWRTEsIDExNDogJFZGMSB9LCB7IDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDk4OiAyNjUsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE2OiAxMDAsIDExODogOTgsIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkVjExLCBbMiwgMTAzXSksIHsgODQ6IFsxLCAyNjZdIH0sIG8oJFYxMSwgWzIsIDEwN10sIHsgMjI6IFsxLCAyNjddIH0pLCBvKCRWMTEsIFsyLCAxMDhdKSwgbygkVjExLCBbMiwgMTExXSksIG8oJFYxMSwgWzIsIDExM10sIHsgMjI6IFsxLCAyNjhdIH0pLCBvKCRWMTEsIFsyLCAxMTRdKSwgbygkViQsIFsyLCA1OF0pLCBvKCRWJCwgWzIsIDU5XSksIHsgMjI6ICRWNTEsIDI0OiAkVjYxLCAyNjogJFY3MSwgMzg6ICRWODEsIDQyOiAkVjkxLCA1MjogJFZMLCA1ODogWzEsIDI2OV0sIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDIwMiwgODY6IDE1MiwgODc6ICRWZTEsIDg4OiAkVmYxLCA4OTogJFZnMSwgOTA6ICRWaDEsIDkxOiAkVmkxLCA5MjogJFZqMSwgOTM6ICRWazEsIDk1OiAxNDMsIDk2OiAkVmwxLCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZtMSwgMTEyOiAkVlMsIDExMzogJFZULCAxMTQ6ICRWbjEsIDExNTogJFZvMSwgMTE2OiAxNDksIDEyMzogJFZVLCAxMjQ6ICRWViwgMTI1OiAkVlcsIDEyNjogJFZYLCAxMjc6ICRWWSwgMTI4OiAkVlogfSwgbygkViQsIFsyLCA2Nl0pLCBvKCRWJCwgWzIsIDYxXSksIG8oJFYkLCBbMiwgNjJdKSwgbygkViQsIFsyLCA2M10pLCB7IDY2OiBbMSwgMjcwXSB9LCBvKCRWJCwgWzIsIDY1XSksIG8oJFYkLCBbMiwgNjddKSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDcyOiBbMSwgMjcxXSwgNzM6ICRWYTEsIDgxOiAkVmIxLCA4MzogMjAyLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCBvKCRWJCwgWzIsIDY5XSksIG8oJFYkLCBbMiwgNzBdKSwgbygkViQsIFsyLCA3Ml0pLCBvKCRWJCwgWzIsIDcxXSksIG8oJFYkLCBbMiwgNzNdKSwgbygkVnQxLCBbMiwgNF0pLCBvKFsyMiwgNTIsIDY2LCA2NywgOTIsIDk2LCAxMDYsIDEwNywgMTEwLCAxMTIsIDExMywgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOF0sIFsyLCA4MV0pLCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MTogWzEsIDI3Ml0sIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMTg6IDE4LCAxOTogMTksIDIwOiAkVjYsIDIxOiAkVjcsIDIyOiAkVjgsIDIzOiAkVjksIDMyOiAyNCwgMzM6IDI1LCAzNDogMjYsIDM1OiAyNywgMzY6IDI4LCAzNzogMjksIDM4OiAkVmEsIDQyOiBbMSwgMjczXSwgNDM6IDMxLCA0NDogJFZiLCA0NjogJFZjLCA0ODogJFZkLCA1MDogMzUsIDUxOiA0NSwgNTI6ICRWZSwgNTQ6IDQ2LCA2NjogJFZmLCA2NzogJFZnLCA4NzogJFZoLCA4ODogJFZpLCA4OTogJFZqLCA5MDogJFZrLCA5MTogJFZsLCA5MjogJFZtLCA5NjogJFZuLCAxMDY6ICRWbywgMTA3OiAkVnAsIDExMDogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDExNzogNDcsIDExOTogJFZ0LCAxMjA6ICRWdSwgMTIxOiAkVnYsIDEyMjogJFZ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIG8oJFZfLCBbMiwgNTZdKSwgbygkVjExLCBbMiwgMTE2XSwgeyAxMDc6ICRWRzEgfSksIG8oJFZIMSwgWzIsIDEyNl0sIHsgMTA5OiAyNzUsIDIyOiAkVnYxLCA2NjogJFZ3MSwgNjc6ICRWeDEsIDg3OiAkVnkxLCAxMDM6ICRWejEsIDEwNjogJFZBMSwgMTEwOiAkVkIxLCAxMTE6ICRWQzEsIDExMjogJFZEMSwgMTEzOiAkVkUxLCAxMTQ6ICRWRjEgfSksIG8oJFZJMSwgWzIsIDEyOF0pLCBvKCRWSTEsIFsyLCAxMzBdKSwgbygkVkkxLCBbMiwgMTMxXSksIG8oJFZJMSwgWzIsIDEzMl0pLCBvKCRWSTEsIFsyLCAxMzNdKSwgbygkVkkxLCBbMiwgMTM0XSksIG8oJFZJMSwgWzIsIDEzNV0pLCBvKCRWSTEsIFsyLCAxMzZdKSwgbygkVkkxLCBbMiwgMTM3XSksIG8oJFZJMSwgWzIsIDEzOF0pLCBvKCRWSTEsIFsyLCAxMzldKSwgbygkVkkxLCBbMiwgMTQwXSksIG8oJFYxMSwgWzIsIDExN10sIHsgMTA3OiAkVkcxIH0pLCBvKCRWMTEsIFsyLCAxMThdLCB7IDEwNzogJFZHMSB9KSwgeyAyMjogWzEsIDI3Nl0gfSwgbygkVjExLCBbMiwgMTE5XSwgeyAxMDc6ICRWRzEgfSksIHsgMjI6IFsxLCAyNzddIH0sIG8oJFZ1MSwgWzIsIDEyNV0pLCBvKCRWMTEsIFsyLCA5OV0sIHsgMTA3OiAkVkcxIH0pLCBvKCRWMTEsIFsyLCAxMDBdLCB7IDEwNzogJFZHMSB9KSwgbygkVjExLCBbMiwgMTAxXSwgeyAxMTY6IDEwMCwgMTE4OiAxNzksIDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9KSwgbygkVjExLCBbMiwgMTA1XSksIHsgMTAyOiBbMSwgMjc4XSB9LCB7IDEwMjogWzEsIDI3OV0gfSwgeyA1ODogWzEsIDI4MF0gfSwgeyA2ODogWzEsIDI4MV0gfSwgeyA3MjogWzEsIDI4Ml0gfSwgeyA5OiAyODMsIDIwOiAkVkcsIDIxOiAkVkgsIDIzOiAkVkkgfSwgbygkVkYsIFsyLCA0Ml0pLCB7IDIyOiAkVnYxLCA2NjogJFZ3MSwgNjc6ICRWeDEsIDg3OiAkVnkxLCAxMDM6ICRWejEsIDEwNjogJFZBMSwgMTA4OiAyODQsIDEwOTogMjQ1LCAxMTA6ICRWQjEsIDExMTogJFZDMSwgMTEyOiAkVkQxLCAxMTM6ICRWRTEsIDExNDogJFZGMSB9LCBvKCRWSTEsIFsyLCAxMjldKSwgeyAyNjogJFZLLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA5MjogJFZPLCA5ODogMjg1LCAxMDY6ICRWUCwgMTA3OiAkVlEsIDExMDogJFZSLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNjogMTAwLCAxMTg6IDk4LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMjY6ICRWSywgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgOTI6ICRWTywgOTg6IDI4NiwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWUiwgMTEyOiAkVlMsIDExMzogJFZULCAxMTY6IDEwMCwgMTE4OiA5OCwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCBvKCRWMTEsIFsyLCAxMDldKSwgbygkVjExLCBbMiwgMTE1XSksIG8oJFYkLCBbMiwgNjBdKSwgeyAyMjogJFY1MSwgMjQ6ICRWNjEsIDI2OiAkVjcxLCAzODogJFY4MSwgMzk6IDI4NywgNDI6ICRWOTEsIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDczOiAkVmExLCA4MTogJFZiMSwgODM6IDE0MCwgODQ6ICRWYzEsIDg1OiAkVmQxLCA4NjogMTUyLCA4NzogJFZlMSwgODg6ICRWZjEsIDg5OiAkVmcxLCA5MDogJFZoMSwgOTE6ICRWaTEsIDkyOiAkVmoxLCA5MzogJFZrMSwgOTU6IDE0MywgOTY6ICRWbDEsIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVm0xLCAxMTI6ICRWUywgMTEzOiAkVlQsIDExNDogJFZuMSwgMTE1OiAkVm8xLCAxMTY6IDE0OSwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9LCBvKCRWJCwgWzIsIDY4XSksIG8oJFZwMSwgJFY1LCB7IDE3OiAyODggfSksIG8oJFZIMSwgWzIsIDEyN10sIHsgMTA5OiAyNzUsIDIyOiAkVnYxLCA2NjogJFZ3MSwgNjc6ICRWeDEsIDg3OiAkVnkxLCAxMDM6ICRWejEsIDEwNjogJFZBMSwgMTEwOiAkVkIxLCAxMTE6ICRWQzEsIDExMjogJFZEMSwgMTEzOiAkVkUxLCAxMTQ6ICRWRjEgfSksIG8oJFYxMSwgWzIsIDEyMl0sIHsgMTE2OiAxMDAsIDExODogMTc5LCAyMjogWzEsIDI4OV0sIDI2OiAkVkssIDUyOiAkVkwsIDY2OiAkVk0sIDY3OiAkVk4sIDkyOiAkVk8sIDEwNjogJFZQLCAxMDc6ICRWUSwgMTEwOiAkVlIsIDExMjogJFZTLCAxMTM6ICRWVCwgMTIzOiAkVlUsIDEyNDogJFZWLCAxMjU6ICRWVywgMTI2OiAkVlgsIDEyNzogJFZZLCAxMjg6ICRWWiB9KSwgbygkVjExLCBbMiwgMTIzXSwgeyAxMTY6IDEwMCwgMTE4OiAxNzksIDIyOiBbMSwgMjkwXSwgMjY6ICRWSywgNTI6ICRWTCwgNjY6ICRWTSwgNjc6ICRWTiwgOTI6ICRWTywgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWUiwgMTEyOiAkVlMsIDExMzogJFZULCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0pLCB7IDIyOiAkVjUxLCAyNDogJFY2MSwgMjY6ICRWNzEsIDM4OiAkVjgxLCA0MTogWzEsIDI5MV0sIDQyOiAkVjkxLCA1MjogJFZMLCA2NjogJFZNLCA2NzogJFZOLCA3MzogJFZhMSwgODE6ICRWYjEsIDgzOiAyMDIsIDg2OiAxNTIsIDg3OiAkVmUxLCA4ODogJFZmMSwgODk6ICRWZzEsIDkwOiAkVmgxLCA5MTogJFZpMSwgOTI6ICRWajEsIDkzOiAkVmsxLCA5NTogMTQzLCA5NjogJFZsMSwgMTA2OiAkVlAsIDEwNzogJFZRLCAxMTA6ICRWbTEsIDExMjogJFZTLCAxMTM6ICRWVCwgMTE0OiAkVm4xLCAxMTU6ICRWbzEsIDExNjogMTQ5LCAxMjM6ICRWVSwgMTI0OiAkVlYsIDEyNTogJFZXLCAxMjY6ICRWWCwgMTI3OiAkVlksIDEyODogJFZaIH0sIHsgMTg6IDE4LCAxOTogMTksIDIwOiAkVjYsIDIxOiAkVjcsIDIyOiAkVjgsIDIzOiAkVjksIDMyOiAyNCwgMzM6IDI1LCAzNDogMjYsIDM1OiAyNywgMzY6IDI4LCAzNzogMjksIDM4OiAkVmEsIDQyOiBbMSwgMjkyXSwgNDM6IDMxLCA0NDogJFZiLCA0NjogJFZjLCA0ODogJFZkLCA1MDogMzUsIDUxOiA0NSwgNTI6ICRWZSwgNTQ6IDQ2LCA2NjogJFZmLCA2NzogJFZnLCA4NzogJFZoLCA4ODogJFZpLCA4OTogJFZqLCA5MDogJFZrLCA5MTogJFZsLCA5MjogJFZtLCA5NjogJFZuLCAxMDY6ICRWbywgMTA3OiAkVnAsIDExMDogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDExNzogNDcsIDExOTogJFZ0LCAxMjA6ICRWdSwgMTIxOiAkVnYsIDEyMjogJFZ3LCAxMjM6ICRWeCwgMTI0OiAkVnksIDEyNTogJFZ6LCAxMjY6ICRWQSwgMTI3OiAkVkIsIDEyODogJFZDIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyOTMsIDEwMzogJFZ6MSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIHsgMjI6ICRWdjEsIDY2OiAkVncxLCA2NzogJFZ4MSwgODc6ICRWeTEsIDk3OiAyOTQsIDEwMzogJFZ6MSwgMTA2OiAkVkExLCAxMDg6IDI0NCwgMTA5OiAyNDUsIDExMDogJFZCMSwgMTExOiAkVkMxLCAxMTI6ICRWRDEsIDExMzogJFZFMSwgMTE0OiAkVkYxIH0sIG8oJFYkLCBbMiwgNjRdKSwgbygkVkYsIFsyLCA0MV0pLCBvKCRWMTEsIFsyLCAxMjBdLCB7IDEwNzogJFZHMSB9KSwgbygkVjExLCBbMiwgMTIxXSwgeyAxMDc6ICRWRzEgfSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDI6IFsyLCAxXSwgOTogWzIsIDVdLCAxMDogWzIsIDJdLCAxMzI6IFsyLCA3XSB9LFxuICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleDIoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleDIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGxleGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiBmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiBmdW5jdGlvbiBsZXgyKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiBmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIFwiTURfU1RSXCI7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDg3O1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICByZXR1cm4gOTY7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiA4ODtcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIDEwNTtcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDg5O1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gOTA7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJocmVmXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gMTAxO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tuYW1lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2thcmdzXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiA5OTtcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiAxMDA7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjbGlja1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgcmV0dXJuIDkxO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICBpZiAoeXkubGV4LmZpcnN0R3JhcGgoKSkge1xuICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZGlyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICBpZiAoeXkubGV4LmZpcnN0R3JhcGgoKSkge1xuICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZGlyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICBpZiAoeXkubGV4LmZpcnN0R3JhcGgoKSkge1xuICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZGlyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI1O1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICAgIHJldHVybiAxMTk7XG4gICAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICAgIHJldHVybiAxMjA7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiAxMjE7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHJldHVybiAxMjI7XG4gICAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICAgIHJldHVybiAxMDY7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiAxMTI7XG4gICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIDY3O1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDEwNztcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgcmV0dXJuIDEyNztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgcmV0dXJuIDgyO1xuICAgICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgICByZXR1cm4gODI7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIHJldHVybiA4MjtcbiAgICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgICAgcmV0dXJuIDgyO1xuICAgICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgICByZXR1cm4gODE7XG4gICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgIHJldHVybiA4MTtcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgICByZXR1cm4gNTk7XG4gICAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgcmV0dXJuIDYxO1xuICAgICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgICByZXR1cm4gNjI7XG4gICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgICAgIHJldHVybiA2OTtcbiAgICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgY2FzZSA4NTpcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgICAgcmV0dXJuIDExMDtcbiAgICAgICAgICBjYXNlIDg3OlxuICAgICAgICAgICAgcmV0dXJuIDExMztcbiAgICAgICAgICBjYXNlIDg4OlxuICAgICAgICAgICAgcmV0dXJuIDEyODtcbiAgICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgICAgcmV0dXJuIDEyNTtcbiAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgcmV0dXJuIDExNDtcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgcmV0dXJuIDEyNjtcbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgcmV0dXJuIDEyNjtcbiAgICAgICAgICBjYXNlIDkzOlxuICAgICAgICAgICAgcmV0dXJuIDExNTtcbiAgICAgICAgICBjYXNlIDk0OlxuICAgICAgICAgICAgcmV0dXJuIDczO1xuICAgICAgICAgIGNhc2UgOTU6XG4gICAgICAgICAgICByZXR1cm4gOTM7XG4gICAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICAgIHJldHVybiBcIlNFUFwiO1xuICAgICAgICAgIGNhc2UgOTc6XG4gICAgICAgICAgICByZXR1cm4gOTI7XG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiA2NjtcbiAgICAgICAgICBjYXNlIDk5OlxuICAgICAgICAgICAgcmV0dXJuIDc1O1xuICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgcmV0dXJuIDc0O1xuICAgICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgICAgcmV0dXJuIDc3O1xuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgcmV0dXJuIDc2O1xuICAgICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgICAgcmV0dXJuIDEyMztcbiAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIHJldHVybiAxMjQ7XG4gICAgICAgICAgY2FzZSAxMDU6XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgY2FzZSAxMDY6XG4gICAgICAgICAgICByZXR1cm4gNTc7XG4gICAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgY2FzZSAxMTA6XG4gICAgICAgICAgICByZXR1cm4gNzE7XG4gICAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICByZXR1cm4gMTM0O1xuICAgICAgICAgIGNhc2UgMTEzOlxuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS8sIC9eKD86KCg/Oig/IVxcfSUlKVteOi5dKSopKS8sIC9eKD86OikvLCAvXig/OlxcfSUlKS8sIC9eKD86KCg/Oig/IVxcfSUlKS58XFxuKSopKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86W1wiXVtgXSkvLCAvXig/OlteYFwiXSspLywgL14oPzpbYF1bXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OltcIl0pLywgL14oPzpbXlwiXSopLywgL14oPzpzdHlsZVxcYikvLCAvXig/OmRlZmF1bHRcXGIpLywgL14oPzpsaW5rU3R5bGVcXGIpLywgL14oPzppbnRlcnBvbGF0ZVxcYikvLCAvXig/OmNsYXNzRGVmXFxiKS8sIC9eKD86Y2xhc3NcXGIpLywgL14oPzpocmVmW1xcc10rW1wiXSkvLCAvXig/OltcIl0pLywgL14oPzpbXlwiXSopLywgL14oPzpjYWxsW1xcc10rKS8sIC9eKD86XFwoW1xcc10qXFwpKS8sIC9eKD86XFwoKS8sIC9eKD86W14oXSopLywgL14oPzpcXCkpLywgL14oPzpbXildKikvLCAvXig/OmNsaWNrW1xcc10rKS8sIC9eKD86W1xcc1xcbl0pLywgL14oPzpbXlxcc1xcbl0qKS8sIC9eKD86Zmxvd2NoYXJ0LWVsa1xcYikvLCAvXig/OmdyYXBoXFxiKS8sIC9eKD86Zmxvd2NoYXJ0XFxiKS8sIC9eKD86c3ViZ3JhcGhcXGIpLywgL14oPzplbmRcXGJcXHMqKS8sIC9eKD86X3NlbGZcXGIpLywgL14oPzpfYmxhbmtcXGIpLywgL14oPzpfcGFyZW50XFxiKS8sIC9eKD86X3RvcFxcYikvLCAvXig/OihcXHI/XFxuKSpcXHMqXFxuKS8sIC9eKD86XFxzKkxSXFxiKS8sIC9eKD86XFxzKlJMXFxiKS8sIC9eKD86XFxzKlRCXFxiKS8sIC9eKD86XFxzKkJUXFxiKS8sIC9eKD86XFxzKlREXFxiKS8sIC9eKD86XFxzKkJSXFxiKS8sIC9eKD86XFxzKjwpLywgL14oPzpcXHMqPikvLCAvXig/OlxccypcXF4pLywgL14oPzpcXHMqdlxcYikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OlswLTldKykvLCAvXig/OiMpLywgL14oPzo6OjopLywgL14oPzo6KS8sIC9eKD86JikvLCAvXig/OjspLywgL14oPzosKS8sIC9eKD86XFwqKS8sIC9eKD86XFxzKlt4bzxdPy0tK1steG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/PT0rWz14bz5dXFxzKikvLCAvXig/OlxccypbeG88XT8tP1xcListW3hvPl0/XFxzKikvLCAvXig/Olxccyp+fltcXH5dK1xccyopLywgL14oPzpcXHMqW3hvPF0/LS1cXHMqKS8sIC9eKD86XFxzKlt4bzxdPz09XFxzKikvLCAvXig/OlxccypbeG88XT8tXFwuXFxzKikvLCAvXig/OlxcKC0pLywgL14oPzotXFwpKS8sIC9eKD86XFwoXFxbKS8sIC9eKD86XFxdXFwpKS8sIC9eKD86XFxbXFxbKS8sIC9eKD86XFxdXFxdKS8sIC9eKD86XFxbXFx8KS8sIC9eKD86XFxbXFwoKS8sIC9eKD86XFwpXFxdKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86XFwpXFwpXFwpKS8sIC9eKD86LSkvLCAvXig/OlxcLikvLCAvXig/OltcXF9dKS8sIC9eKD86XFwrKS8sIC9eKD86JSkvLCAvXig/Oj0pLywgL14oPzo9KS8sIC9eKD86PCkvLCAvXig/Oj4pLywgL14oPzpcXF4pLywgL14oPzpcXFxcXFx8KS8sIC9eKD86dlxcYikvLCAvXig/OltBLVphLXpdKykvLCAvXig/OlxcXFxcXF0pLywgL14oPzpcXFtcXC8pLywgL14oPzpcXC9cXF0pLywgL14oPzpcXFtcXFxcKS8sIC9eKD86WyFcIiMkJSYnKissLS5gP1xcXFxfL10pLywgL14oPzpbXFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XXxbXFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N118W1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XXxbXFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQV18W1xcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRV18W1xcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFdfFtcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwXXxbXFx1MDhBMi1cXHUwOEFDXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzddfFtcXHUwOTc5LVxcdTA5N0ZcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJdfFtcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFdfFtcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOV18W1xcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThdfFtcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENdfFtcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNdfFtcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XXxbXFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMF18W1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0RdfFtcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXXxbXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXXxbXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMV18W1xcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFdfFtcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNdfFtcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNl18W1xcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFdfFtcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXXxbXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXXxbXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMF18W1xcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBdfFtcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNdfFtcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFdfFtcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XXxbXFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNdfFtcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZdfFtcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZdfFtcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNdfFtcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRF18W1xcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RF18W1xcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNdfFtcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3Rl18W1xcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOF18W1xcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NF18W1xcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXXxbXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XXxbXFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXXxbXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NdfFtcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRdfFtcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NdfFtcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQl18W1xcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5N1xcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OF18W1xcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgwMVxcdUE4MDMtXFx1QTgwNV18W1xcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJdfFtcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QUEwMC1cXHVBQTI4XXxbXFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBODAtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XXxbXFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XXxbXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXXxbXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXXxbXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNl18W1xcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXXxbXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXXxbXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXXxbXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXSkvLCAvXig/OlxcfCkvLCAvXig/OlxcKCkvLCAvXig/OlxcKSkvLCAvXig/OlxcWykvLCAvXig/OlxcXSkvLCAvXig/OlxceykvLCAvXig/OlxcfSkvLCAvXig/OlwiKS8sIC9eKD86KFxccj9cXG4pKykvLCAvXig/OlxccykvLCAvXig/OiQpL10sXG4gICAgICBjb25kaXRpb25zOiB7IFwiY2xvc2VfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhcmdfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMywgNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsyLCAzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrYXJnc1wiOiB7IFwicnVsZXNcIjogWzMxLCAzMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2FsbGJhY2tuYW1lXCI6IHsgXCJydWxlc1wiOiBbMjgsIDI5LCAzMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiaHJlZlwiOiB7IFwicnVsZXNcIjogWzI1LCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xpY2tcIjogeyBcInJ1bGVzXCI6IFszNCwgMzVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInZlcnRleFwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiZGlyXCI6IHsgXCJydWxlc1wiOiBbNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTAsIDExXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJtZF9zdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsxMywgMTRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzE2LCAxN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDUsIDcsIDksIDEyLCAxNSwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI3LCAzMywgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xuY29uc3QgTUVSTUFJRF9ET01fSURfUFJFRklYID0gXCJmbG93Y2hhcnQtXCI7XG5sZXQgdmVydGV4Q291bnRlciA9IDA7XG5sZXQgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG5sZXQgdmVydGljZXMgPSB7fTtcbmxldCBlZGdlcyA9IFtdO1xubGV0IGNsYXNzZXMgPSB7fTtcbmxldCBzdWJHcmFwaHMgPSBbXTtcbmxldCBzdWJHcmFwaExvb2t1cCA9IHt9O1xubGV0IHRvb2x0aXBzID0ge307XG5sZXQgc3ViQ291bnQgPSAwO1xubGV0IGZpcnN0R3JhcGhGbGFnID0gdHJ1ZTtcbmxldCBkaXJlY3Rpb247XG5sZXQgdmVyc2lvbjtcbmxldCBmdW5zID0gW107XG5jb25zdCBzYW5pdGl6ZVRleHQgPSAodHh0KSA9PiBjb21tb24uc2FuaXRpemVUZXh0KHR4dCwgY29uZmlnKTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBsb29rVXBEb21JZCA9IGZ1bmN0aW9uKGlkKSB7XG4gIGNvbnN0IHZlcml0Y2VLZXlzID0gT2JqZWN0LmtleXModmVydGljZXMpO1xuICBmb3IgKGNvbnN0IHZlcml0Y2VLZXkgb2YgdmVyaXRjZUtleXMpIHtcbiAgICBpZiAodmVydGljZXNbdmVyaXRjZUtleV0uaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gdmVydGljZXNbdmVyaXRjZUtleV0uZG9tSWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBpZDtcbn07XG5jb25zdCBhZGRWZXJ0ZXggPSBmdW5jdGlvbihfaWQsIHRleHRPYmosIHR5cGUsIHN0eWxlLCBjbGFzc2VzMiwgZGlyLCBwcm9wcyA9IHt9KSB7XG4gIGxldCB0eHQ7XG4gIGxldCBpZCA9IF9pZDtcbiAgaWYgKGlkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZlcnRpY2VzW2lkXSA9PT0gdm9pZCAwKSB7XG4gICAgdmVydGljZXNbaWRdID0ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbFR5cGU6IFwidGV4dFwiLFxuICAgICAgZG9tSWQ6IE1FUk1BSURfRE9NX0lEX1BSRUZJWCArIGlkICsgXCItXCIgKyB2ZXJ0ZXhDb3VudGVyLFxuICAgICAgc3R5bGVzOiBbXSxcbiAgICAgIGNsYXNzZXM6IFtdXG4gICAgfTtcbiAgfVxuICB2ZXJ0ZXhDb3VudGVyKys7XG4gIGlmICh0ZXh0T2JqICE9PSB2b2lkIDApIHtcbiAgICBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICB0eHQgPSBzYW5pdGl6ZVRleHQodGV4dE9iai50ZXh0LnRyaW0oKSk7XG4gICAgdmVydGljZXNbaWRdLmxhYmVsVHlwZSA9IHRleHRPYmoudHlwZTtcbiAgICBpZiAodHh0WzBdID09PSAnXCInICYmIHR4dFt0eHQubGVuZ3RoIC0gMV0gPT09ICdcIicpIHtcbiAgICAgIHR4dCA9IHR4dC5zdWJzdHJpbmcoMSwgdHh0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICB2ZXJ0aWNlc1tpZF0udGV4dCA9IHR4dDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodmVydGljZXNbaWRdLnRleHQgPT09IHZvaWQgMCkge1xuICAgICAgdmVydGljZXNbaWRdLnRleHQgPSBfaWQ7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlICE9PSB2b2lkIDApIHtcbiAgICB2ZXJ0aWNlc1tpZF0udHlwZSA9IHR5cGU7XG4gIH1cbiAgaWYgKHN0eWxlICE9PSB2b2lkIDAgJiYgc3R5bGUgIT09IG51bGwpIHtcbiAgICBzdHlsZS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZlcnRpY2VzW2lkXS5zdHlsZXMucHVzaChzKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoY2xhc3NlczIgIT09IHZvaWQgMCAmJiBjbGFzc2VzMiAhPT0gbnVsbCkge1xuICAgIGNsYXNzZXMyLmZvckVhY2goZnVuY3Rpb24ocykge1xuICAgICAgdmVydGljZXNbaWRdLmNsYXNzZXMucHVzaChzKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoZGlyICE9PSB2b2lkIDApIHtcbiAgICB2ZXJ0aWNlc1tpZF0uZGlyID0gZGlyO1xuICB9XG4gIGlmICh2ZXJ0aWNlc1tpZF0ucHJvcHMgPT09IHZvaWQgMCkge1xuICAgIHZlcnRpY2VzW2lkXS5wcm9wcyA9IHByb3BzO1xuICB9IGVsc2UgaWYgKHByb3BzICE9PSB2b2lkIDApIHtcbiAgICBPYmplY3QuYXNzaWduKHZlcnRpY2VzW2lkXS5wcm9wcywgcHJvcHMpO1xuICB9XG59O1xuY29uc3QgYWRkU2luZ2xlTGluayA9IGZ1bmN0aW9uKF9zdGFydCwgX2VuZCwgdHlwZSkge1xuICBsZXQgc3RhcnQgPSBfc3RhcnQ7XG4gIGxldCBlbmQgPSBfZW5kO1xuICBjb25zdCBlZGdlID0geyBzdGFydCwgZW5kLCB0eXBlOiB2b2lkIDAsIHRleHQ6IFwiXCIsIGxhYmVsVHlwZTogXCJ0ZXh0XCIgfTtcbiAgbG9nLmluZm8oXCJhYmM3OCBHb3QgZWRnZS4uLlwiLCBlZGdlKTtcbiAgY29uc3QgbGlua1RleHRPYmogPSB0eXBlLnRleHQ7XG4gIGlmIChsaW5rVGV4dE9iaiAhPT0gdm9pZCAwKSB7XG4gICAgZWRnZS50ZXh0ID0gc2FuaXRpemVUZXh0KGxpbmtUZXh0T2JqLnRleHQudHJpbSgpKTtcbiAgICBpZiAoZWRnZS50ZXh0WzBdID09PSAnXCInICYmIGVkZ2UudGV4dFtlZGdlLnRleHQubGVuZ3RoIC0gMV0gPT09ICdcIicpIHtcbiAgICAgIGVkZ2UudGV4dCA9IGVkZ2UudGV4dC5zdWJzdHJpbmcoMSwgZWRnZS50ZXh0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICBlZGdlLmxhYmVsVHlwZSA9IGxpbmtUZXh0T2JqLnR5cGU7XG4gIH1cbiAgaWYgKHR5cGUgIT09IHZvaWQgMCkge1xuICAgIGVkZ2UudHlwZSA9IHR5cGUudHlwZTtcbiAgICBlZGdlLnN0cm9rZSA9IHR5cGUuc3Ryb2tlO1xuICAgIGVkZ2UubGVuZ3RoID0gdHlwZS5sZW5ndGg7XG4gIH1cbiAgZWRnZXMucHVzaChlZGdlKTtcbn07XG5jb25zdCBhZGRMaW5rID0gZnVuY3Rpb24oX3N0YXJ0LCBfZW5kLCB0eXBlKSB7XG4gIGxvZy5pbmZvKFwiYWRkTGluayAoYWJjNzgpXCIsIF9zdGFydCwgX2VuZCwgdHlwZSk7XG4gIGxldCBpLCBqO1xuICBmb3IgKGkgPSAwOyBpIDwgX3N0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChqID0gMDsgaiA8IF9lbmQubGVuZ3RoOyBqKyspIHtcbiAgICAgIGFkZFNpbmdsZUxpbmsoX3N0YXJ0W2ldLCBfZW5kW2pdLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCB1cGRhdGVMaW5rSW50ZXJwb2xhdGUgPSBmdW5jdGlvbihwb3NpdGlvbnMsIGludGVycCkge1xuICBwb3NpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwb3MpIHtcbiAgICBpZiAocG9zID09PSBcImRlZmF1bHRcIikge1xuICAgICAgZWRnZXMuZGVmYXVsdEludGVycG9sYXRlID0gaW50ZXJwO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlc1twb3NdLmludGVycG9sYXRlID0gaW50ZXJwO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgdXBkYXRlTGluayA9IGZ1bmN0aW9uKHBvc2l0aW9ucywgc3R5bGUpIHtcbiAgcG9zaXRpb25zLmZvckVhY2goZnVuY3Rpb24ocG9zKSB7XG4gICAgaWYgKHBvcyA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIGVkZ2VzLmRlZmF1bHRTdHlsZSA9IHN0eWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodXRpbHMuaXNTdWJzdHJpbmdJbkFycmF5KFwiZmlsbFwiLCBzdHlsZSkgPT09IC0xKSB7XG4gICAgICAgIHN0eWxlLnB1c2goXCJmaWxsOm5vbmVcIik7XG4gICAgICB9XG4gICAgICBlZGdlc1twb3NdLnN0eWxlID0gc3R5bGU7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBhZGRDbGFzcyA9IGZ1bmN0aW9uKGlkLCBzdHlsZSkge1xuICBpZiAoY2xhc3Nlc1tpZF0gPT09IHZvaWQgMCkge1xuICAgIGNsYXNzZXNbaWRdID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgfVxuICBpZiAoc3R5bGUgIT09IHZvaWQgMCAmJiBzdHlsZSAhPT0gbnVsbCkge1xuICAgIHN0eWxlLmZvckVhY2goZnVuY3Rpb24ocykge1xuICAgICAgaWYgKHMubWF0Y2goXCJjb2xvclwiKSkge1xuICAgICAgICBjb25zdCBuZXdTdHlsZTEgPSBzLnJlcGxhY2UoXCJmaWxsXCIsIFwiYmdGaWxsXCIpO1xuICAgICAgICBjb25zdCBuZXdTdHlsZTIgPSBuZXdTdHlsZTEucmVwbGFjZShcImNvbG9yXCIsIFwiZmlsbFwiKTtcbiAgICAgICAgY2xhc3Nlc1tpZF0udGV4dFN0eWxlcy5wdXNoKG5ld1N0eWxlMik7XG4gICAgICB9XG4gICAgICBjbGFzc2VzW2lkXS5zdHlsZXMucHVzaChzKTtcbiAgICB9KTtcbiAgfVxufTtcbmNvbnN0IHNldERpcmVjdGlvbiA9IGZ1bmN0aW9uKGRpcikge1xuICBkaXJlY3Rpb24gPSBkaXI7XG4gIGlmIChkaXJlY3Rpb24ubWF0Y2goLy4qPC8pKSB7XG4gICAgZGlyZWN0aW9uID0gXCJSTFwiO1xuICB9XG4gIGlmIChkaXJlY3Rpb24ubWF0Y2goLy4qXFxeLykpIHtcbiAgICBkaXJlY3Rpb24gPSBcIkJUXCI7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbi5tYXRjaCgvLio+LykpIHtcbiAgICBkaXJlY3Rpb24gPSBcIkxSXCI7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbi5tYXRjaCgvLip2LykpIHtcbiAgICBkaXJlY3Rpb24gPSBcIlRCXCI7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbiA9PT0gXCJURFwiKSB7XG4gICAgZGlyZWN0aW9uID0gXCJUQlwiO1xuICB9XG59O1xuY29uc3Qgc2V0Q2xhc3MgPSBmdW5jdGlvbihpZHMsIGNsYXNzTmFtZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmICh2ZXJ0aWNlc1tpZF0gIT09IHZvaWQgMCkge1xuICAgICAgdmVydGljZXNbaWRdLmNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgICBpZiAoc3ViR3JhcGhMb29rdXBbaWRdICE9PSB2b2lkIDApIHtcbiAgICAgIHN1YkdyYXBoTG9va3VwW2lkXS5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHNldFRvb2x0aXAgPSBmdW5jdGlvbihpZHMsIHRvb2x0aXApIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgaWYgKHRvb2x0aXAgIT09IHZvaWQgMCkge1xuICAgICAgdG9vbHRpcHNbdmVyc2lvbiA9PT0gXCJnZW4tMVwiID8gbG9va1VwRG9tSWQoaWQpIDogaWRdID0gc2FuaXRpemVUZXh0KHRvb2x0aXApO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3Qgc2V0Q2xpY2tGdW4gPSBmdW5jdGlvbihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpIHtcbiAgbGV0IGRvbUlkID0gbG9va1VwRG9tSWQoaWQpO1xuICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbk5hbWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgYXJnTGlzdCA9IFtdO1xuICBpZiAodHlwZW9mIGZ1bmN0aW9uQXJncyA9PT0gXCJzdHJpbmdcIikge1xuICAgIGFyZ0xpc3QgPSBmdW5jdGlvbkFyZ3Muc3BsaXQoLywoPz0oPzooPzpbXlwiXSpcIil7Mn0pKlteXCJdKiQpLyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaXRlbSA9IGFyZ0xpc3RbaV0udHJpbSgpO1xuICAgICAgaWYgKGl0ZW0uY2hhckF0KDApID09PSAnXCInICYmIGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09ICdcIicpIHtcbiAgICAgICAgaXRlbSA9IGl0ZW0uc3Vic3RyKDEsIGl0ZW0ubGVuZ3RoIC0gMik7XG4gICAgICB9XG4gICAgICBhcmdMaXN0W2ldID0gaXRlbTtcbiAgICB9XG4gIH1cbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgYXJnTGlzdC5wdXNoKGlkKTtcbiAgfVxuICBpZiAodmVydGljZXNbaWRdICE9PSB2b2lkIDApIHtcbiAgICB2ZXJ0aWNlc1tpZF0uaGF2ZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICBmdW5zLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtkb21JZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlscy5ydW5GdW5jKGZ1bmN0aW9uTmFtZSwgLi4uYXJnTGlzdCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuY29uc3Qgc2V0TGluayA9IGZ1bmN0aW9uKGlkcywgbGlua1N0ciwgdGFyZ2V0KSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGlmICh2ZXJ0aWNlc1tpZF0gIT09IHZvaWQgMCkge1xuICAgICAgdmVydGljZXNbaWRdLmxpbmsgPSB1dGlscy5mb3JtYXRVcmwobGlua1N0ciwgY29uZmlnKTtcbiAgICAgIHZlcnRpY2VzW2lkXS5saW5rVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbiAgfSk7XG4gIHNldENsYXNzKGlkcywgXCJjbGlja2FibGVcIik7XG59O1xuY29uc3QgZ2V0VG9vbHRpcCA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0b29sdGlwc1tpZF07XG59O1xuY29uc3Qgc2V0Q2xpY2tFdmVudCA9IGZ1bmN0aW9uKGlkcywgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgc2V0Q2xpY2tGdW4oaWQsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25BcmdzKTtcbiAgfSk7XG4gIHNldENsYXNzKGlkcywgXCJjbGlja2FibGVcIik7XG59O1xuY29uc3QgYmluZEZ1bmN0aW9ucyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgZnVucy5mb3JFYWNoKGZ1bmN0aW9uKGZ1bikge1xuICAgIGZ1bihlbGVtZW50KTtcbiAgfSk7XG59O1xuY29uc3QgZ2V0RGlyZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkaXJlY3Rpb24udHJpbSgpO1xufTtcbmNvbnN0IGdldFZlcnRpY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB2ZXJ0aWNlcztcbn07XG5jb25zdCBnZXRFZGdlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZWRnZXM7XG59O1xuY29uc3QgZ2V0Q2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBzZXR1cFRvb2xUaXBzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBsZXQgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCIubWVybWFpZFRvb2x0aXBcIik7XG4gIGlmICgodG9vbHRpcEVsZW0uX2dyb3VwcyB8fCB0b29sdGlwRWxlbSlbMF1bMF0gPT09IG51bGwpIHtcbiAgICB0b29sdGlwRWxlbSA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1lcm1haWRUb29sdGlwXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgfVxuICBjb25zdCBzdmcgPSBzZWxlY3QoZWxlbWVudCkuc2VsZWN0KFwic3ZnXCIpO1xuICBjb25zdCBub2RlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLm5vZGVcIik7XG4gIG5vZGVzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGVsID0gc2VsZWN0KHRoaXMpO1xuICAgIGNvbnN0IHRpdGxlID0gZWwuYXR0cihcInRpdGxlXCIpO1xuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0b29sdGlwRWxlbS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZShcIm9wYWNpdHlcIiwgXCIuOVwiKTtcbiAgICB0b29sdGlwRWxlbS50ZXh0KGVsLmF0dHIoXCJ0aXRsZVwiKSkuc3R5bGUoXCJsZWZ0XCIsIHdpbmRvdy5zY3JvbGxYICsgcmVjdC5sZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMiArIFwicHhcIikuc3R5bGUoXCJ0b3BcIiwgd2luZG93LnNjcm9sbFkgKyByZWN0LnRvcCAtIDE0ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyBcInB4XCIpO1xuICAgIHRvb2x0aXBFbGVtLmh0bWwodG9vbHRpcEVsZW0uaHRtbCgpLnJlcGxhY2UoLyZsdDticlxcLyZndDsvZywgXCI8YnIvPlwiKSk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIHRydWUpO1xuICB9KS5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgIHRvb2x0aXBFbGVtLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBlbC5jbGFzc2VkKFwiaG92ZXJcIiwgZmFsc2UpO1xuICB9KTtcbn07XG5mdW5zLnB1c2goc2V0dXBUb29sVGlwcyk7XG5jb25zdCBjbGVhciA9IGZ1bmN0aW9uKHZlciA9IFwiZ2VuLTFcIikge1xuICB2ZXJ0aWNlcyA9IHt9O1xuICBjbGFzc2VzID0ge307XG4gIGVkZ2VzID0gW107XG4gIGZ1bnMgPSBbc2V0dXBUb29sVGlwc107XG4gIHN1YkdyYXBocyA9IFtdO1xuICBzdWJHcmFwaExvb2t1cCA9IHt9O1xuICBzdWJDb3VudCA9IDA7XG4gIHRvb2x0aXBzID0gW107XG4gIGZpcnN0R3JhcGhGbGFnID0gdHJ1ZTtcbiAgdmVyc2lvbiA9IHZlcjtcbiAgY2xlYXIkMSgpO1xufTtcbmNvbnN0IHNldEdlbiA9ICh2ZXIpID0+IHtcbiAgdmVyc2lvbiA9IHZlciB8fCBcImdlbi0yXCI7XG59O1xuY29uc3QgZGVmYXVsdFN0eWxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBcImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7XCI7XG59O1xuY29uc3QgYWRkU3ViR3JhcGggPSBmdW5jdGlvbihfaWQsIGxpc3QsIF90aXRsZSkge1xuICBsZXQgaWQgPSBfaWQudGV4dC50cmltKCk7XG4gIGxldCB0aXRsZSA9IF90aXRsZS50ZXh0O1xuICBpZiAoX2lkID09PSBfdGl0bGUgJiYgX3RpdGxlLnRleHQubWF0Y2goL1xccy8pKSB7XG4gICAgaWQgPSB2b2lkIDA7XG4gIH1cbiAgZnVuY3Rpb24gdW5pcShhKSB7XG4gICAgY29uc3QgcHJpbXMgPSB7IGJvb2xlYW46IHt9LCBudW1iZXI6IHt9LCBzdHJpbmc6IHt9IH07XG4gICAgY29uc3Qgb2JqcyA9IFtdO1xuICAgIGxldCBkaXIyO1xuICAgIGNvbnN0IG5vZGVMaXN0MiA9IGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgaXRlbTtcbiAgICAgIGlmIChpdGVtLnN0bXQgJiYgaXRlbS5zdG10ID09PSBcImRpclwiKSB7XG4gICAgICAgIGRpcjIgPSBpdGVtLnZhbHVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgaW4gcHJpbXMpIHtcbiAgICAgICAgcmV0dXJuIHByaW1zW3R5cGVdLmhhc093blByb3BlcnR5KGl0ZW0pID8gZmFsc2UgOiBwcmltc1t0eXBlXVtpdGVtXSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2Jqcy5pbmNsdWRlcyhpdGVtKSA/IGZhbHNlIDogb2Jqcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IG5vZGVMaXN0OiBub2RlTGlzdDIsIGRpcjogZGlyMiB9O1xuICB9XG4gIGxldCBub2RlTGlzdCA9IFtdO1xuICBjb25zdCB7IG5vZGVMaXN0OiBubCwgZGlyIH0gPSB1bmlxKG5vZGVMaXN0LmNvbmNhdC5hcHBseShub2RlTGlzdCwgbGlzdCkpO1xuICBub2RlTGlzdCA9IG5sO1xuICBpZiAodmVyc2lvbiA9PT0gXCJnZW4tMVwiKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUxpc3RbaV0gPSBsb29rVXBEb21JZChub2RlTGlzdFtpXSk7XG4gICAgfVxuICB9XG4gIGlkID0gaWQgfHwgXCJzdWJHcmFwaFwiICsgc3ViQ291bnQ7XG4gIHRpdGxlID0gdGl0bGUgfHwgXCJcIjtcbiAgdGl0bGUgPSBzYW5pdGl6ZVRleHQodGl0bGUpO1xuICBzdWJDb3VudCA9IHN1YkNvdW50ICsgMTtcbiAgY29uc3Qgc3ViR3JhcGggPSB7XG4gICAgaWQsXG4gICAgbm9kZXM6IG5vZGVMaXN0LFxuICAgIHRpdGxlOiB0aXRsZS50cmltKCksXG4gICAgY2xhc3NlczogW10sXG4gICAgZGlyLFxuICAgIGxhYmVsVHlwZTogX3RpdGxlLnR5cGVcbiAgfTtcbiAgbG9nLmluZm8oXCJBZGRpbmdcIiwgc3ViR3JhcGguaWQsIHN1YkdyYXBoLm5vZGVzLCBzdWJHcmFwaC5kaXIpO1xuICBzdWJHcmFwaC5ub2RlcyA9IG1ha2VVbmlxKHN1YkdyYXBoLCBzdWJHcmFwaHMpLm5vZGVzO1xuICBzdWJHcmFwaHMucHVzaChzdWJHcmFwaCk7XG4gIHN1YkdyYXBoTG9va3VwW2lkXSA9IHN1YkdyYXBoO1xuICByZXR1cm4gaWQ7XG59O1xuY29uc3QgZ2V0UG9zRm9ySWQgPSBmdW5jdGlvbihpZCkge1xuICBmb3IgKGNvbnN0IFtpLCBzdWJHcmFwaF0gb2Ygc3ViR3JhcGhzLmVudHJpZXMoKSkge1xuICAgIGlmIChzdWJHcmFwaC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59O1xubGV0IHNlY0NvdW50ID0gLTE7XG5jb25zdCBwb3NDcm9zc1JlZiA9IFtdO1xuY29uc3QgaW5kZXhOb2RlczIgPSBmdW5jdGlvbihpZCwgcG9zKSB7XG4gIGNvbnN0IG5vZGVzID0gc3ViR3JhcGhzW3Bvc10ubm9kZXM7XG4gIHNlY0NvdW50ID0gc2VjQ291bnQgKyAxO1xuICBpZiAoc2VjQ291bnQgPiAyZTMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcG9zQ3Jvc3NSZWZbc2VjQ291bnRdID0gcG9zO1xuICBpZiAoc3ViR3JhcGhzW3Bvc10uaWQgPT09IGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogdHJ1ZSxcbiAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgfVxuICBsZXQgY291bnQgPSAwO1xuICBsZXQgcG9zQ291bnQgPSAxO1xuICB3aGlsZSAoY291bnQgPCBub2Rlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGlsZFBvcyA9IGdldFBvc0ZvcklkKG5vZGVzW2NvdW50XSk7XG4gICAgaWYgKGNoaWxkUG9zID49IDApIHtcbiAgICAgIGNvbnN0IHJlcyA9IGluZGV4Tm9kZXMyKGlkLCBjaGlsZFBvcyk7XG4gICAgICBpZiAocmVzLnJlc3VsdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3VsdDogdHJ1ZSxcbiAgICAgICAgICBjb3VudDogcG9zQ291bnQgKyByZXMuY291bnRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc0NvdW50ID0gcG9zQ291bnQgKyByZXMuY291bnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvdW50ID0gY291bnQgKyAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVzdWx0OiBmYWxzZSxcbiAgICBjb3VudDogcG9zQ291bnRcbiAgfTtcbn07XG5jb25zdCBnZXREZXB0aEZpcnN0UG9zID0gZnVuY3Rpb24ocG9zKSB7XG4gIHJldHVybiBwb3NDcm9zc1JlZltwb3NdO1xufTtcbmNvbnN0IGluZGV4Tm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgc2VjQ291bnQgPSAtMTtcbiAgaWYgKHN1YkdyYXBocy5sZW5ndGggPiAwKSB7XG4gICAgaW5kZXhOb2RlczIoXCJub25lXCIsIHN1YkdyYXBocy5sZW5ndGggLSAxKTtcbiAgfVxufTtcbmNvbnN0IGdldFN1YkdyYXBocyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3ViR3JhcGhzO1xufTtcbmNvbnN0IGZpcnN0R3JhcGggPSAoKSA9PiB7XG4gIGlmIChmaXJzdEdyYXBoRmxhZykge1xuICAgIGZpcnN0R3JhcGhGbGFnID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IGRlc3RydWN0U3RhcnRMaW5rID0gKF9zdHIpID0+IHtcbiAgbGV0IHN0ciA9IF9zdHIudHJpbSgpO1xuICBsZXQgdHlwZSA9IFwiYXJyb3dfb3BlblwiO1xuICBzd2l0Y2ggKHN0clswXSkge1xuICAgIGNhc2UgXCI8XCI6XG4gICAgICB0eXBlID0gXCJhcnJvd19wb2ludFwiO1xuICAgICAgc3RyID0gc3RyLnNsaWNlKDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInhcIjpcbiAgICAgIHR5cGUgPSBcImFycm93X2Nyb3NzXCI7XG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwib1wiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY2lyY2xlXCI7XG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICBicmVhaztcbiAgfVxuICBsZXQgc3Ryb2tlID0gXCJub3JtYWxcIjtcbiAgaWYgKHN0ci5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICBzdHJva2UgPSBcInRoaWNrXCI7XG4gIH1cbiAgaWYgKHN0ci5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICBzdHJva2UgPSBcImRvdHRlZFwiO1xuICB9XG4gIHJldHVybiB7IHR5cGUsIHN0cm9rZSB9O1xufTtcbmNvbnN0IGNvdW50Q2hhciA9IChjaGFyLCBzdHIpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmIChzdHJbaV0gPT09IGNoYXIpIHtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn07XG5jb25zdCBkZXN0cnVjdEVuZExpbmsgPSAoX3N0cikgPT4ge1xuICBjb25zdCBzdHIgPSBfc3RyLnRyaW0oKTtcbiAgbGV0IGxpbmUgPSBzdHIuc2xpY2UoMCwgLTEpO1xuICBsZXQgdHlwZSA9IFwiYXJyb3dfb3BlblwiO1xuICBzd2l0Y2ggKHN0ci5zbGljZSgtMSkpIHtcbiAgICBjYXNlIFwieFwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgIGlmIChzdHJbMF0gPT09IFwieFwiKSB7XG4gICAgICAgIHR5cGUgPSBcImRvdWJsZV9cIiArIHR5cGU7XG4gICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj5cIjpcbiAgICAgIHR5cGUgPSBcImFycm93X3BvaW50XCI7XG4gICAgICBpZiAoc3RyWzBdID09PSBcIjxcIikge1xuICAgICAgICB0eXBlID0gXCJkb3VibGVfXCIgKyB0eXBlO1xuICAgICAgICBsaW5lID0gbGluZS5zbGljZSgxKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvXCI6XG4gICAgICB0eXBlID0gXCJhcnJvd19jaXJjbGVcIjtcbiAgICAgIGlmIChzdHJbMF0gPT09IFwib1wiKSB7XG4gICAgICAgIHR5cGUgPSBcImRvdWJsZV9cIiArIHR5cGU7XG4gICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgbGV0IHN0cm9rZSA9IFwibm9ybWFsXCI7XG4gIGxldCBsZW5ndGggPSBsaW5lLmxlbmd0aCAtIDE7XG4gIGlmIChsaW5lWzBdID09PSBcIj1cIikge1xuICAgIHN0cm9rZSA9IFwidGhpY2tcIjtcbiAgfVxuICBpZiAobGluZVswXSA9PT0gXCJ+XCIpIHtcbiAgICBzdHJva2UgPSBcImludmlzaWJsZVwiO1xuICB9XG4gIGxldCBkb3RzID0gY291bnRDaGFyKFwiLlwiLCBsaW5lKTtcbiAgaWYgKGRvdHMpIHtcbiAgICBzdHJva2UgPSBcImRvdHRlZFwiO1xuICAgIGxlbmd0aCA9IGRvdHM7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZSwgc3Ryb2tlLCBsZW5ndGggfTtcbn07XG5jb25zdCBkZXN0cnVjdExpbmsgPSAoX3N0ciwgX3N0YXJ0U3RyKSA9PiB7XG4gIGNvbnN0IGluZm8gPSBkZXN0cnVjdEVuZExpbmsoX3N0cik7XG4gIGxldCBzdGFydEluZm87XG4gIGlmIChfc3RhcnRTdHIpIHtcbiAgICBzdGFydEluZm8gPSBkZXN0cnVjdFN0YXJ0TGluayhfc3RhcnRTdHIpO1xuICAgIGlmIChzdGFydEluZm8uc3Ryb2tlICE9PSBpbmZvLnN0cm9rZSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJJTlZBTElEXCIsIHN0cm9rZTogXCJJTlZBTElEXCIgfTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0SW5mby50eXBlID09PSBcImFycm93X29wZW5cIikge1xuICAgICAgc3RhcnRJbmZvLnR5cGUgPSBpbmZvLnR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydEluZm8udHlwZSAhPT0gaW5mby50eXBlKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiSU5WQUxJRFwiLCBzdHJva2U6IFwiSU5WQUxJRFwiIH07XG4gICAgICB9XG4gICAgICBzdGFydEluZm8udHlwZSA9IFwiZG91YmxlX1wiICsgc3RhcnRJbmZvLnR5cGU7XG4gICAgfVxuICAgIGlmIChzdGFydEluZm8udHlwZSA9PT0gXCJkb3VibGVfYXJyb3dcIikge1xuICAgICAgc3RhcnRJbmZvLnR5cGUgPSBcImRvdWJsZV9hcnJvd19wb2ludFwiO1xuICAgIH1cbiAgICBzdGFydEluZm8ubGVuZ3RoID0gaW5mby5sZW5ndGg7XG4gICAgcmV0dXJuIHN0YXJ0SW5mbztcbiAgfVxuICByZXR1cm4gaW5mbztcbn07XG5jb25zdCBleGlzdHMgPSAoYWxsU2dzLCBfaWQpID0+IHtcbiAgbGV0IHJlcyA9IGZhbHNlO1xuICBhbGxTZ3MuZm9yRWFjaCgoc2cpID0+IHtcbiAgICBjb25zdCBwb3MgPSBzZy5ub2Rlcy5pbmRleE9mKF9pZCk7XG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICByZXMgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59O1xuY29uc3QgbWFrZVVuaXEgPSAoc2csIGFsbFN1YmdyYXBocykgPT4ge1xuICBjb25zdCByZXMgPSBbXTtcbiAgc2cubm9kZXMuZm9yRWFjaCgoX2lkLCBwb3MpID0+IHtcbiAgICBpZiAoIWV4aXN0cyhhbGxTdWJncmFwaHMsIF9pZCkpIHtcbiAgICAgIHJlcy5wdXNoKHNnLm5vZGVzW3Bvc10pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7IG5vZGVzOiByZXMgfTtcbn07XG5jb25zdCBsZXggPSB7XG4gIGZpcnN0R3JhcGhcbn07XG5jb25zdCBmbG93RGIgPSB7XG4gIHBhcnNlRGlyZWN0aXZlLFxuICBkZWZhdWx0Q29uZmlnOiAoKSA9PiBkZWZhdWx0Q29uZmlnLmZsb3djaGFydCxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGFkZFZlcnRleCxcbiAgbG9va1VwRG9tSWQsXG4gIGFkZExpbmssXG4gIHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZSxcbiAgdXBkYXRlTGluayxcbiAgYWRkQ2xhc3MsXG4gIHNldERpcmVjdGlvbixcbiAgc2V0Q2xhc3MsXG4gIHNldFRvb2x0aXAsXG4gIGdldFRvb2x0aXAsXG4gIHNldENsaWNrRXZlbnQsXG4gIHNldExpbmssXG4gIGJpbmRGdW5jdGlvbnMsXG4gIGdldERpcmVjdGlvbixcbiAgZ2V0VmVydGljZXMsXG4gIGdldEVkZ2VzLFxuICBnZXRDbGFzc2VzLFxuICBjbGVhcixcbiAgc2V0R2VuLFxuICBkZWZhdWx0U3R5bGUsXG4gIGFkZFN1YkdyYXBoLFxuICBnZXREZXB0aEZpcnN0UG9zLFxuICBpbmRleE5vZGVzLFxuICBnZXRTdWJHcmFwaHMsXG4gIGRlc3RydWN0TGluayxcbiAgbGV4LFxuICBleGlzdHMsXG4gIG1ha2VVbmlxLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZVxufTtcbmNvbnN0IGRiID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoLyogQF9fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgYWRkQ2xhc3MsXG4gIGFkZExpbmssXG4gIGFkZFNpbmdsZUxpbmssXG4gIGFkZFN1YkdyYXBoLFxuICBhZGRWZXJ0ZXgsXG4gIGJpbmRGdW5jdGlvbnMsXG4gIGNsZWFyLFxuICBkZWZhdWx0OiBmbG93RGIsXG4gIGRlZmF1bHRTdHlsZSxcbiAgZGVzdHJ1Y3RMaW5rLFxuICBmaXJzdEdyYXBoLFxuICBnZXRDbGFzc2VzLFxuICBnZXREZXB0aEZpcnN0UG9zLFxuICBnZXREaXJlY3Rpb24sXG4gIGdldEVkZ2VzLFxuICBnZXRTdWJHcmFwaHMsXG4gIGdldFRvb2x0aXAsXG4gIGdldFZlcnRpY2VzLFxuICBpbmRleE5vZGVzLFxuICBsZXgsXG4gIGxvb2tVcERvbUlkLFxuICBwYXJzZURpcmVjdGl2ZSxcbiAgc2V0Q2xhc3MsXG4gIHNldENsaWNrRXZlbnQsXG4gIHNldERpcmVjdGlvbixcbiAgc2V0R2VuLFxuICBzZXRMaW5rLFxuICB1cGRhdGVMaW5rLFxuICB1cGRhdGVMaW5rSW50ZXJwb2xhdGVcbn0sIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogXCJNb2R1bGVcIiB9KSk7XG5leHBvcnQge1xuICBkYiBhcyBkLFxuICBmbG93RGIgYXMgZixcbiAgcGFyc2VyJDEgYXMgcFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/flowDiagram-93327f21.js": /*!******************************************************************!*\ !*** ../../../node_modules/mermaid/dist/flowDiagram-93327f21.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./flowDb-6a57c1b4.js */ \"../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es */ \"../../../node_modules/dagre-d3-es/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/util.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/util.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/label/add-html-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_intersect_intersect_rect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/intersect/intersect-rect.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js\");\n/* harmony import */ var _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./styles-5f89df53.js */ \"../../../node_modules/mermaid/dist/styles-5f89df53.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/json.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/json.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction question(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const s = (w + h) * 0.9;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n const shapeSvg = insertPolygonShape(parent, s, s, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction hexagon(parent, bbox, node) {\n const f = 4;\n const h = bbox.height;\n const m = h / f;\n const w = bbox.width + 2 * m;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction rect_left_inv_arrow(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction lean_right(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction lean_left(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction trapezoid(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction inv_trapezoid(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction rect_right_inv_arrow(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction stadium(parent, bbox, node) {\n const h = bbox.height;\n const w = bbox.width + h / 4;\n const shapeSvg = parent.insert(\"rect\", \":first-child\").attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_rect_js__WEBPACK_IMPORTED_MODULE_6__.intersectRect)(node, point);\n };\n return shapeSvg;\n}\nfunction subroutine(parent, bbox, node) {\n const w = bbox.width;\n const h = bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const shapeSvg = insertPolygonShape(parent, w, h, points);\n node.intersect = function(point) {\n return (0,dagre_d3_es_src_dagre_js_intersect_intersect_polygon_js__WEBPACK_IMPORTED_MODULE_5__.intersectPolygon)(node, points, point);\n };\n return shapeSvg;\n}\nfunction cylinder(parent, bbox, node) {\n const w = bbox.width;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const shapeSvg = parent.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n node.intersect = function(point) {\n const pos = (0,dagre_d3_es_src_dagre_js_intersect_intersect_rect_js__WEBPACK_IMPORTED_MODULE_6__.intersectRect)(node, point);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\nfunction addToRender(render2) {\n render2.shapes().question = question;\n render2.shapes().hexagon = hexagon;\n render2.shapes().stadium = stadium;\n render2.shapes().subroutine = subroutine;\n render2.shapes().cylinder = cylinder;\n render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow;\n render2.shapes().lean_right = lean_right;\n render2.shapes().lean_left = lean_left;\n render2.shapes().trapezoid = trapezoid;\n render2.shapes().inv_trapezoid = inv_trapezoid;\n render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow;\n}\nfunction addToRenderV2(addShape) {\n addShape({ question });\n addShape({ hexagon });\n addShape({ stadium });\n addShape({ subroutine });\n addShape({ cylinder });\n addShape({ rect_left_inv_arrow });\n addShape({ lean_right });\n addShape({ lean_left });\n addShape({ trapezoid });\n addShape({ inv_trapezoid });\n addShape({ rect_right_inv_arrow });\n}\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\nconst flowChartShapes = {\n addToRender,\n addToRenderV2\n};\nconst conf = {};\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst addVertices = function(vert, g, svgId, root, _doc, diagObj) {\n const svg = !root ? (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(`[id=\"${svgId}\"]`) : root.select(`[id=\"${svgId}\"]`);\n const doc = !_doc ? document : _doc;\n const keys = Object.keys(vert);\n keys.forEach(function(id) {\n const vertex = vert[id];\n let classStr = \"default\";\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(\" \");\n }\n const styles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.k)(vertex.styles);\n let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;\n let vertexNode;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.c)().flowchart.htmlLabels)) {\n const node = {\n label: vertexText.replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n )\n };\n vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__.addHtmlLabel)(svg, node).node();\n vertexNode.parentNode.removeChild(vertexNode);\n } else {\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", styles.labelStyle.replace(\"color:\", \"fill:\"));\n const rows = vertexText.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.e.lineBreakRegex);\n for (const row of rows) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"1\");\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n vertexNode = svgLabel;\n }\n let radious = 0;\n let _shape = \"\";\n switch (vertex.type) {\n case \"round\":\n radious = 5;\n _shape = \"rect\";\n break;\n case \"square\":\n _shape = \"rect\";\n break;\n case \"diamond\":\n _shape = \"question\";\n break;\n case \"hexagon\":\n _shape = \"hexagon\";\n break;\n case \"odd\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n _shape = \"lean_right\";\n break;\n case \"lean_left\":\n _shape = \"lean_left\";\n break;\n case \"trapezoid\":\n _shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n _shape = \"inv_trapezoid\";\n break;\n case \"odd_right\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n _shape = \"circle\";\n break;\n case \"ellipse\":\n _shape = \"ellipse\";\n break;\n case \"stadium\":\n _shape = \"stadium\";\n break;\n case \"subroutine\":\n _shape = \"subroutine\";\n break;\n case \"cylinder\":\n _shape = \"cylinder\";\n break;\n case \"group\":\n _shape = \"rect\";\n break;\n default:\n _shape = \"rect\";\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.warn(\"Adding node\", vertex.id, vertex.domId);\n g.setNode(diagObj.db.lookUpDomId(vertex.id), {\n labelType: \"svg\",\n labelStyle: styles.labelStyle,\n shape: _shape,\n label: vertexNode,\n rx: radious,\n ry: radious,\n class: classStr,\n style: styles.style,\n id: diagObj.db.lookUpDomId(vertex.id)\n });\n });\n};\nconst addEdges = function(edges, g, diagObj) {\n let cnt = 0;\n let defaultStyle;\n let defaultLabelStyle;\n if (edges.defaultStyle !== void 0) {\n const defaultStyles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.k)(edges.defaultStyle);\n defaultStyle = defaultStyles.style;\n defaultLabelStyle = defaultStyles.labelStyle;\n }\n edges.forEach(function(edge) {\n cnt++;\n const linkId = \"L-\" + edge.start + \"-\" + edge.end;\n const linkNameStart = \"LS-\" + edge.start;\n const linkNameEnd = \"LE-\" + edge.end;\n const edgeData = {};\n if (edge.type === \"arrow_open\") {\n edgeData.arrowhead = \"none\";\n } else {\n edgeData.arrowhead = \"normal\";\n }\n let style = \"\";\n let labelStyle = \"\";\n if (edge.style !== void 0) {\n const styles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.k)(edge.style);\n style = styles.style;\n labelStyle = styles.labelStyle;\n } else {\n switch (edge.stroke) {\n case \"normal\":\n style = \"fill:none\";\n if (defaultStyle !== void 0) {\n style = defaultStyle;\n }\n if (defaultLabelStyle !== void 0) {\n labelStyle = defaultLabelStyle;\n }\n break;\n case \"dotted\":\n style = \"fill:none;stroke-width:2px;stroke-dasharray:3;\";\n break;\n case \"thick\":\n style = \" stroke-width: 3.5px;fill:none\";\n break;\n }\n }\n edgeData.style = style;\n edgeData.labelStyle = labelStyle;\n if (edge.interpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n } else if (edges.defaultInterpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n } else {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n }\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.c)().flowchart.htmlLabels)) {\n edgeData.labelType = \"html\";\n edgeData.label = `${edge.text.replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n )}`;\n } else {\n edgeData.labelType = \"text\";\n edgeData.label = edge.text.replace(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.e.lineBreakRegex, \"\\n\");\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n }\n }\n edgeData.id = linkId;\n edgeData.class = linkNameStart + \" \" + linkNameEnd;\n edgeData.minlen = edge.length || 1;\n g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt);\n });\n};\nconst getClasses = function(text, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.info(\"Extracting classes\");\n diagObj.db.clear();\n try {\n diagObj.parse(text);\n return diagObj.db.getClasses();\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.error(e);\n return {};\n }\n};\nconst draw = function(text, id, _version, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.info(\"Drawing flowchart\");\n diagObj.db.clear();\n const { securityLevel, flowchart: conf2 } = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.c)();\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n try {\n diagObj.parser.parse(text);\n } catch (err) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.debug(\"Parsing failed\");\n }\n let dir = diagObj.db.getDirection();\n if (dir === void 0) {\n dir = \"TD\";\n }\n const nodeSpacing = conf2.nodeSpacing || 50;\n const rankSpacing = conf2.rankSpacing || 50;\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n let subG;\n const subGraphs = diagObj.db.getSubGraphs();\n for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) {\n subG = subGraphs[i2];\n diagObj.db.addVertex(subG.id, subG.title, \"group\", void 0, subG.classes);\n }\n const vert = diagObj.db.getVertices();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.warn(\"Get vertices\", vert);\n const edges = diagObj.db.getEdges();\n let i = 0;\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i];\n (0,d3__WEBPACK_IMPORTED_MODULE_1__.selectAll)(\"cluster\").append(\"text\");\n for (let j = 0; j < subG.nodes.length; j++) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.l.warn(\n \"Setting subgraph\",\n subG.nodes[j],\n diagObj.db.lookUpDomId(subG.nodes[j]),\n diagObj.db.lookUpDomId(subG.id)\n );\n g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id));\n }\n }\n addVertices(vert, g, id, root, doc, diagObj);\n addEdges(edges, g, diagObj);\n const render$1 = new dagre_d3_es__WEBPACK_IMPORTED_MODULE_2__.render();\n flowChartShapes.addToRender(render$1);\n render$1.arrows().none = function normal(parent, id2, edge, type) {\n const marker = parent.append(\"marker\").attr(\"id\", id2).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"strokeWidth\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 6).attr(\"orient\", \"auto\");\n const path = marker.append(\"path\").attr(\"d\", \"M 0 0 L 0 0 L 0 0 z\");\n (0,dagre_d3_es_src_dagre_js_util_js__WEBPACK_IMPORTED_MODULE_3__.applyStyle)(path, edge[type + \"Style\"]);\n };\n render$1.arrows().normal = function normal(parent, id2) {\n const marker = parent.append(\"marker\").attr(\"id\", id2).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"strokeWidth\").attr(\"markerWidth\", 8).attr(\"markerHeight\", 6).attr(\"orient\", \"auto\");\n marker.append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowheadPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n };\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n render$1(element, g);\n element.selectAll(\"g.node\").attr(\"title\", function() {\n return diagObj.db.getTooltip(this.id);\n });\n diagObj.db.indexNodes(\"subGraph\" + i);\n for (i = 0; i < subGraphs.length; i++) {\n subG = subGraphs[i];\n if (subG.title !== \"undefined\") {\n const clusterRects = doc.querySelectorAll(\n \"#\" + id + ' [id=\"' + diagObj.db.lookUpDomId(subG.id) + '\"] rect'\n );\n const clusterEl = doc.querySelectorAll(\n \"#\" + id + ' [id=\"' + diagObj.db.lookUpDomId(subG.id) + '\"]'\n );\n const xPos = clusterRects[0].x.baseVal.value;\n const yPos = clusterRects[0].y.baseVal.value;\n const _width = clusterRects[0].width.baseVal.value;\n const cluster = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(clusterEl[0]);\n const te = cluster.select(\".label\");\n te.attr(\"transform\", `translate(${xPos + _width / 2}, ${yPos + 14})`);\n te.attr(\"id\", id + \"Text\");\n for (let j = 0; j < subG.classes.length; j++) {\n clusterEl[0].classList.add(subG.classes[j]);\n }\n }\n }\n if (!conf2.htmlLabels) {\n const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_13__.p)(g, svg, conf2.diagramPadding, conf2.useMaxWidth);\n const keys = Object.keys(vert);\n keys.forEach(function(key) {\n const vertex = vert[key];\n if (vertex.link) {\n const node = root.select(\"#\" + id + ' [id=\"' + diagObj.db.lookUpDomId(key) + '\"]');\n if (node) {\n const link = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"class\", vertex.classes.join(\" \"));\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"href\", vertex.link);\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"rel\", \"noopener\");\n if (securityLevel === \"sandbox\") {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", \"_top\");\n } else if (vertex.linkTarget) {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", vertex.linkTarget);\n }\n const linkNode = node.insert(function() {\n return link;\n }, \":first-child\");\n const shape = node.select(\".label-container\");\n if (shape) {\n linkNode.append(function() {\n return shape.node();\n });\n }\n const label = node.select(\".label\");\n if (label) {\n linkNode.append(function() {\n return label.node();\n });\n }\n }\n }\n });\n};\nconst flowRenderer = {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n};\nconst diagram = {\n parser: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_14__.p,\n db: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_14__.f,\n renderer: _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_15__.f,\n styles: _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_15__.a,\n init: (cnf) => {\n if (!cnf.flowchart) {\n cnf.flowchart = {};\n }\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n flowRenderer.setConf(cnf.flowchart);\n _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_14__.f.clear();\n _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_14__.f.setGen(\"gen-1\");\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9mbG93RGlhZ3JhbS05MzMyN2YyMS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFnRTtBQUNGO0FBQ1Y7QUFDbUg7QUFDbEk7QUFDeUI7QUFDa0I7QUFDVztBQUNOO0FBQ1Q7QUFDekQ7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDRDtBQUNXO0FBQ0U7QUFDYjtBQUNLO0FBQ0E7QUFDSDtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUdBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sWUFBWTtBQUNsQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGFBQWE7QUFDbkIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUdBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sYUFBYTtBQUNuQixNQUFNLGtCQUFrQjtBQUN4QixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsV0FBVyx5R0FBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHlCQUF5QjtBQUMvQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsV0FBVyx5R0FBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLG9CQUFvQjtBQUMxQixN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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTSxtREFBTTtBQUNaLFlBQVksbURBQWM7QUFDMUIsVUFBVSxtREFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHlEQUFZO0FBQ2hCLElBQUksMERBQWE7QUFDakI7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvZmxvd0RpYWdyYW0tOTMzMjdmMjEuanM/ZGNkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwIGFzIHBhcnNlciwgZiBhcyBmbG93RGIgfSBmcm9tIFwiLi9mbG93RGItNmE1N2MxYjQuanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbGVjdCwgY3VydmVMaW5lYXIsIHNlbGVjdEFsbCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgayBhcyBnZXRTdHlsZXNGcm9tQXJyYXksIG4gYXMgZXZhbHVhdGUsIGMgYXMgZ2V0Q29uZmlnLCBlIGFzIGNvbW1vbiwgbCBhcyBsb2csIG8gYXMgaW50ZXJwb2xhdGVUb0N1cnZlLCBwIGFzIHNldHVwR3JhcGhWaWV3Ym94IH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcImRhZ3JlLWQzLWVzXCI7XG5pbXBvcnQgeyBhcHBseVN0eWxlIH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy91dGlsLmpzXCI7XG5pbXBvcnQgeyBhZGRIdG1sTGFiZWwgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2xhYmVsL2FkZC1odG1sLWxhYmVsLmpzXCI7XG5pbXBvcnQgeyBpbnRlcnNlY3RQb2x5Z29uIH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS1qcy9pbnRlcnNlY3QvaW50ZXJzZWN0LXBvbHlnb24uanNcIjtcbmltcG9ydCB7IGludGVyc2VjdFJlY3QgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2ludGVyc2VjdC9pbnRlcnNlY3QtcmVjdC5qc1wiO1xuaW1wb3J0IHsgZiBhcyBmbG93UmVuZGVyZXJWMiwgYSBhcyBmbG93U3R5bGVzIH0gZnJvbSBcIi4vc3R5bGVzLTVmODlkZjUzLmpzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgXCIuL2luZGV4LWE5MmFjNDA0LmpzXCI7XG5pbXBvcnQgXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgXCIuL2VkZ2VzLTQ5YWM0M2EyLmpzXCI7XG5pbXBvcnQgXCIuL2NyZWF0ZVRleHQtM2RmNjMwYjUuanNcIjtcbmltcG9ydCBcIm1kYXN0LXV0aWwtZnJvbS1tYXJrZG93blwiO1xuaW1wb3J0IFwiLi9zdmdEcmF3LTBmY2M4MTNkLmpzXCI7XG5mdW5jdGlvbiBxdWVzdGlvbihwYXJlbnQsIGJib3gsIG5vZGUpIHtcbiAgY29uc3QgdyA9IGJib3gud2lkdGg7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodDtcbiAgY29uc3QgcyA9ICh3ICsgaCkgKiAwLjk7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IHMgLyAyLCB5OiAwIH0sXG4gICAgeyB4OiBzLCB5OiAtcyAvIDIgfSxcbiAgICB7IHg6IHMgLyAyLCB5OiAtcyB9LFxuICAgIHsgeDogMCwgeTogLXMgLyAyIH1cbiAgXTtcbiAgY29uc3Qgc2hhcGVTdmcgPSBpbnNlcnRQb2x5Z29uU2hhcGUocGFyZW50LCBzLCBzLCBwb2ludHMpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn1cbmZ1bmN0aW9uIGhleGFnb24ocGFyZW50LCBiYm94LCBub2RlKSB7XG4gIGNvbnN0IGYgPSA0O1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQ7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbTtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3Qgc2hhcGVTdmcgPSBpbnNlcnRQb2x5Z29uU2hhcGUocGFyZW50LCB3LCBoLCBwb2ludHMpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn1cbmZ1bmN0aW9uIHJlY3RfbGVmdF9pbnZfYXJyb3cocGFyZW50LCBiYm94LCBub2RlKSB7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQ7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IC1oIC8gMiwgeTogMCB9LFxuICAgIHsgeDogdywgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggfSxcbiAgICB7IHg6IC1oIC8gMiwgeTogLWggfSxcbiAgICB7IHg6IDAsIHk6IC1oIC8gMiB9XG4gIF07XG4gIGNvbnN0IHNoYXBlU3ZnID0gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RQb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59XG5mdW5jdGlvbiBsZWFuX3JpZ2h0KHBhcmVudCwgYmJveCwgbm9kZSkge1xuICBjb25zdCB3ID0gYmJveC53aWR0aDtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBzaGFwZVN2ZyA9IGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gbGVhbl9sZWZ0KHBhcmVudCwgYmJveCwgbm9kZSkge1xuICBjb25zdCB3ID0gYmJveC53aWR0aDtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAyICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIDIgKiBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IC1oIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBzaGFwZVN2ZyA9IGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gdHJhcGV6b2lkKHBhcmVudCwgYmJveCwgbm9kZSkge1xuICBjb25zdCB3ID0gYmJveC53aWR0aDtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBzaGFwZVN2ZyA9IGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gaW52X3RyYXBlem9pZChwYXJlbnQsIGJib3gsIG5vZGUpIHtcbiAgY29uc3QgdyA9IGJib3gud2lkdGg7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodDtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIDIgKiBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IC0yICogaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3Qgc2hhcGVTdmcgPSBpbnNlcnRQb2x5Z29uU2hhcGUocGFyZW50LCB3LCBoLCBwb2ludHMpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn1cbmZ1bmN0aW9uIHJlY3RfcmlnaHRfaW52X2Fycm93KHBhcmVudCwgYmJveCwgbm9kZSkge1xuICBjb25zdCB3ID0gYmJveC53aWR0aDtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgaCAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyArIGggLyAyLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggfVxuICBdO1xuICBjb25zdCBzaGFwZVN2ZyA9IGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gc3RhZGl1bShwYXJlbnQsIGJib3gsIG5vZGUpIHtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0O1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIGggLyA0O1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJyeFwiLCBoIC8gMikuYXR0cihcInJ5XCIsIGggLyAyKS5hdHRyKFwieFwiLCAtdyAvIDIpLmF0dHIoXCJ5XCIsIC1oIC8gMikuYXR0cihcIndpZHRoXCIsIHcpLmF0dHIoXCJoZWlnaHRcIiwgaCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn1cbmZ1bmN0aW9uIHN1YnJvdXRpbmUocGFyZW50LCBiYm94LCBub2RlKSB7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQ7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogMCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyA4LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAtaCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfVxuICBdO1xuICBjb25zdCBzaGFwZVN2ZyA9IGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gY3lsaW5kZXIocGFyZW50LCBiYm94LCBub2RlKSB7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoO1xuICBjb25zdCByeCA9IHcgLyAyO1xuICBjb25zdCByeSA9IHJ4IC8gKDIuNSArIHcgLyA1MCk7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIHJ5O1xuICBjb25zdCBzaGFwZSA9IFwiTSAwLFwiICsgcnkgKyBcIiBhIFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgMCwwLDAgXCIgKyB3ICsgXCIgMCBhIFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgMCwwLDAgXCIgKyAtdyArIFwiIDAgbCAwLFwiICsgaCArIFwiIGEgXCIgKyByeCArIFwiLFwiICsgcnkgKyBcIiAwLDAsMCBcIiArIHcgKyBcIiAwIGwgMCxcIiArIC1oO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5hdHRyKFwibGFiZWwtb2Zmc2V0LXlcIiwgcnkpLmluc2VydChcInBhdGhcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImRcIiwgc2hhcGUpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtdyAvIDIgKyBcIixcIiArIC0oaCAvIDIgKyByeSkgKyBcIilcIik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICBjb25zdCBwb3MgPSBpbnRlcnNlY3RSZWN0KG5vZGUsIHBvaW50KTtcbiAgICBjb25zdCB4ID0gcG9zLnggLSBub2RlLng7XG4gICAgaWYgKHJ4ICE9IDAgJiYgKE1hdGguYWJzKHgpIDwgbm9kZS53aWR0aCAvIDIgfHwgTWF0aC5hYnMoeCkgPT0gbm9kZS53aWR0aCAvIDIgJiYgTWF0aC5hYnMocG9zLnkgLSBub2RlLnkpID4gbm9kZS5oZWlnaHQgLyAyIC0gcnkpKSB7XG4gICAgICBsZXQgeSA9IHJ5ICogcnkgKiAoMSAtIHggKiB4IC8gKHJ4ICogcngpKTtcbiAgICAgIGlmICh5ICE9IDApIHtcbiAgICAgICAgeSA9IE1hdGguc3FydCh5KTtcbiAgICAgIH1cbiAgICAgIHkgPSByeSAtIHk7XG4gICAgICBpZiAocG9pbnQueSAtIG5vZGUueSA+IDApIHtcbiAgICAgICAgeSA9IC15O1xuICAgICAgfVxuICAgICAgcG9zLnkgKz0geTtcbiAgICB9XG4gICAgcmV0dXJuIHBvcztcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufVxuZnVuY3Rpb24gYWRkVG9SZW5kZXIocmVuZGVyMikge1xuICByZW5kZXIyLnNoYXBlcygpLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gIHJlbmRlcjIuc2hhcGVzKCkuaGV4YWdvbiA9IGhleGFnb247XG4gIHJlbmRlcjIuc2hhcGVzKCkuc3RhZGl1bSA9IHN0YWRpdW07XG4gIHJlbmRlcjIuc2hhcGVzKCkuc3Vicm91dGluZSA9IHN1YnJvdXRpbmU7XG4gIHJlbmRlcjIuc2hhcGVzKCkuY3lsaW5kZXIgPSBjeWxpbmRlcjtcbiAgcmVuZGVyMi5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93ID0gcmVjdF9sZWZ0X2ludl9hcnJvdztcbiAgcmVuZGVyMi5zaGFwZXMoKS5sZWFuX3JpZ2h0ID0gbGVhbl9yaWdodDtcbiAgcmVuZGVyMi5zaGFwZXMoKS5sZWFuX2xlZnQgPSBsZWFuX2xlZnQ7XG4gIHJlbmRlcjIuc2hhcGVzKCkudHJhcGV6b2lkID0gdHJhcGV6b2lkO1xuICByZW5kZXIyLnNoYXBlcygpLmludl90cmFwZXpvaWQgPSBpbnZfdHJhcGV6b2lkO1xuICByZW5kZXIyLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93ID0gcmVjdF9yaWdodF9pbnZfYXJyb3c7XG59XG5mdW5jdGlvbiBhZGRUb1JlbmRlclYyKGFkZFNoYXBlKSB7XG4gIGFkZFNoYXBlKHsgcXVlc3Rpb24gfSk7XG4gIGFkZFNoYXBlKHsgaGV4YWdvbiB9KTtcbiAgYWRkU2hhcGUoeyBzdGFkaXVtIH0pO1xuICBhZGRTaGFwZSh7IHN1YnJvdXRpbmUgfSk7XG4gIGFkZFNoYXBlKHsgY3lsaW5kZXIgfSk7XG4gIGFkZFNoYXBlKHsgcmVjdF9sZWZ0X2ludl9hcnJvdyB9KTtcbiAgYWRkU2hhcGUoeyBsZWFuX3JpZ2h0IH0pO1xuICBhZGRTaGFwZSh7IGxlYW5fbGVmdCB9KTtcbiAgYWRkU2hhcGUoeyB0cmFwZXpvaWQgfSk7XG4gIGFkZFNoYXBlKHsgaW52X3RyYXBlem9pZCB9KTtcbiAgYWRkU2hhcGUoeyByZWN0X3JpZ2h0X2ludl9hcnJvdyB9KTtcbn1cbmZ1bmN0aW9uIGluc2VydFBvbHlnb25TaGFwZShwYXJlbnQsIHcsIGgsIHBvaW50cykge1xuICByZXR1cm4gcGFyZW50Lmluc2VydChcInBvbHlnb25cIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcbiAgICBcInBvaW50c1wiLFxuICAgIHBvaW50cy5tYXAoZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQueCArIFwiLFwiICsgZC55O1xuICAgIH0pLmpvaW4oXCIgXCIpXG4gICkuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgaCAvIDIgKyBcIilcIik7XG59XG5jb25zdCBmbG93Q2hhcnRTaGFwZXMgPSB7XG4gIGFkZFRvUmVuZGVyLFxuICBhZGRUb1JlbmRlclYyXG59O1xuY29uc3QgY29uZiA9IHt9O1xuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKGNuZikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY25mKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbmZba2V5XSA9IGNuZltrZXldO1xuICB9XG59O1xuY29uc3QgYWRkVmVydGljZXMgPSBmdW5jdGlvbih2ZXJ0LCBnLCBzdmdJZCwgcm9vdCwgX2RvYywgZGlhZ09iaikge1xuICBjb25zdCBzdmcgPSAhcm9vdCA/IHNlbGVjdChgW2lkPVwiJHtzdmdJZH1cIl1gKSA6IHJvb3Quc2VsZWN0KGBbaWQ9XCIke3N2Z0lkfVwiXWApO1xuICBjb25zdCBkb2MgPSAhX2RvYyA/IGRvY3VtZW50IDogX2RvYztcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZlcnQpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB2ZXJ0W2lkXTtcbiAgICBsZXQgY2xhc3NTdHIgPSBcImRlZmF1bHRcIjtcbiAgICBpZiAodmVydGV4LmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgY2xhc3NTdHIgPSB2ZXJ0ZXguY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzRnJvbUFycmF5KHZlcnRleC5zdHlsZXMpO1xuICAgIGxldCB2ZXJ0ZXhUZXh0ID0gdmVydGV4LnRleHQgIT09IHZvaWQgMCA/IHZlcnRleC50ZXh0IDogdmVydGV4LmlkO1xuICAgIGxldCB2ZXJ0ZXhOb2RlO1xuICAgIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgIGxhYmVsOiB2ZXJ0ZXhUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgL2ZhW2JscnNdPzpmYS1bXFx3LV0rL2csXG4gICAgICAgICAgKHMpID0+IGA8aSBjbGFzcz0nJHtzLnJlcGxhY2UoXCI6XCIsIFwiIFwiKX0nPjwvaT5gXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgICB2ZXJ0ZXhOb2RlID0gYWRkSHRtbExhYmVsKHN2Zywgbm9kZSkubm9kZSgpO1xuICAgICAgdmVydGV4Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHZlcnRleE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdmdMYWJlbCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRleHRcIik7XG4gICAgICBzdmdMYWJlbC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZXMubGFiZWxTdHlsZS5yZXBsYWNlKFwiY29sb3I6XCIsIFwiZmlsbDpcIikpO1xuICAgICAgY29uc3Qgcm93cyA9IHZlcnRleFRleHQuc3BsaXQoY29tbW9uLmxpbmVCcmVha1JlZ2V4KTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgY29uc3QgdHNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwgXCJ4bWw6c3BhY2VcIiwgXCJwcmVzZXJ2ZVwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiZHlcIiwgXCIxZW1cIik7XG4gICAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcInhcIiwgXCIxXCIpO1xuICAgICAgICB0c3Bhbi50ZXh0Q29udGVudCA9IHJvdztcbiAgICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgICAgfVxuICAgICAgdmVydGV4Tm9kZSA9IHN2Z0xhYmVsO1xuICAgIH1cbiAgICBsZXQgcmFkaW91cyA9IDA7XG4gICAgbGV0IF9zaGFwZSA9IFwiXCI7XG4gICAgc3dpdGNoICh2ZXJ0ZXgudHlwZSkge1xuICAgICAgY2FzZSBcInJvdW5kXCI6XG4gICAgICAgIHJhZGlvdXMgPSA1O1xuICAgICAgICBfc2hhcGUgPSBcInJlY3RcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgIF9zaGFwZSA9IFwicmVjdFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgIF9zaGFwZSA9IFwicXVlc3Rpb25cIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaGV4YWdvblwiOlxuICAgICAgICBfc2hhcGUgPSBcImhleGFnb25cIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib2RkXCI6XG4gICAgICAgIF9zaGFwZSA9IFwicmVjdF9sZWZ0X2ludl9hcnJvd1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsZWFuX3JpZ2h0XCI6XG4gICAgICAgIF9zaGFwZSA9IFwibGVhbl9yaWdodFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsZWFuX2xlZnRcIjpcbiAgICAgICAgX3NoYXBlID0gXCJsZWFuX2xlZnRcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidHJhcGV6b2lkXCI6XG4gICAgICAgIF9zaGFwZSA9IFwidHJhcGV6b2lkXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImludl90cmFwZXpvaWRcIjpcbiAgICAgICAgX3NoYXBlID0gXCJpbnZfdHJhcGV6b2lkXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9kZF9yaWdodFwiOlxuICAgICAgICBfc2hhcGUgPSBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgIF9zaGFwZSA9IFwiY2lyY2xlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgX3NoYXBlID0gXCJlbGxpcHNlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInN0YWRpdW1cIjpcbiAgICAgICAgX3NoYXBlID0gXCJzdGFkaXVtXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInN1YnJvdXRpbmVcIjpcbiAgICAgICAgX3NoYXBlID0gXCJzdWJyb3V0aW5lXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImN5bGluZGVyXCI6XG4gICAgICAgIF9zaGFwZSA9IFwiY3lsaW5kZXJcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZ3JvdXBcIjpcbiAgICAgICAgX3NoYXBlID0gXCJyZWN0XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgX3NoYXBlID0gXCJyZWN0XCI7XG4gICAgfVxuICAgIGxvZy53YXJuKFwiQWRkaW5nIG5vZGVcIiwgdmVydGV4LmlkLCB2ZXJ0ZXguZG9tSWQpO1xuICAgIGcuc2V0Tm9kZShkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHZlcnRleC5pZCksIHtcbiAgICAgIGxhYmVsVHlwZTogXCJzdmdcIixcbiAgICAgIGxhYmVsU3R5bGU6IHN0eWxlcy5sYWJlbFN0eWxlLFxuICAgICAgc2hhcGU6IF9zaGFwZSxcbiAgICAgIGxhYmVsOiB2ZXJ0ZXhOb2RlLFxuICAgICAgcng6IHJhZGlvdXMsXG4gICAgICByeTogcmFkaW91cyxcbiAgICAgIGNsYXNzOiBjbGFzc1N0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogZGlhZ09iai5kYi5sb29rVXBEb21JZCh2ZXJ0ZXguaWQpXG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGFkZEVkZ2VzID0gZnVuY3Rpb24oZWRnZXMsIGcsIGRpYWdPYmopIHtcbiAgbGV0IGNudCA9IDA7XG4gIGxldCBkZWZhdWx0U3R5bGU7XG4gIGxldCBkZWZhdWx0TGFiZWxTdHlsZTtcbiAgaWYgKGVkZ2VzLmRlZmF1bHRTdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IGdldFN0eWxlc0Zyb21BcnJheShlZGdlcy5kZWZhdWx0U3R5bGUpO1xuICAgIGRlZmF1bHRTdHlsZSA9IGRlZmF1bHRTdHlsZXMuc3R5bGU7XG4gICAgZGVmYXVsdExhYmVsU3R5bGUgPSBkZWZhdWx0U3R5bGVzLmxhYmVsU3R5bGU7XG4gIH1cbiAgZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKSB7XG4gICAgY250Kys7XG4gICAgY29uc3QgbGlua0lkID0gXCJMLVwiICsgZWRnZS5zdGFydCArIFwiLVwiICsgZWRnZS5lbmQ7XG4gICAgY29uc3QgbGlua05hbWVTdGFydCA9IFwiTFMtXCIgKyBlZGdlLnN0YXJ0O1xuICAgIGNvbnN0IGxpbmtOYW1lRW5kID0gXCJMRS1cIiArIGVkZ2UuZW5kO1xuICAgIGNvbnN0IGVkZ2VEYXRhID0ge307XG4gICAgaWYgKGVkZ2UudHlwZSA9PT0gXCJhcnJvd19vcGVuXCIpIHtcbiAgICAgIGVkZ2VEYXRhLmFycm93aGVhZCA9IFwibm9uZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlRGF0YS5hcnJvd2hlYWQgPSBcIm5vcm1hbFwiO1xuICAgIH1cbiAgICBsZXQgc3R5bGUgPSBcIlwiO1xuICAgIGxldCBsYWJlbFN0eWxlID0gXCJcIjtcbiAgICBpZiAoZWRnZS5zdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBnZXRTdHlsZXNGcm9tQXJyYXkoZWRnZS5zdHlsZSk7XG4gICAgICBzdHlsZSA9IHN0eWxlcy5zdHlsZTtcbiAgICAgIGxhYmVsU3R5bGUgPSBzdHlsZXMubGFiZWxTdHlsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChlZGdlLnN0cm9rZSkge1xuICAgICAgICBjYXNlIFwibm9ybWFsXCI6XG4gICAgICAgICAgc3R5bGUgPSBcImZpbGw6bm9uZVwiO1xuICAgICAgICAgIGlmIChkZWZhdWx0U3R5bGUgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgc3R5bGUgPSBkZWZhdWx0U3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWZhdWx0TGFiZWxTdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBsYWJlbFN0eWxlID0gZGVmYXVsdExhYmVsU3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZG90dGVkXCI6XG4gICAgICAgICAgc3R5bGUgPSBcImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MztcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRoaWNrXCI6XG4gICAgICAgICAgc3R5bGUgPSBcIiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBlZGdlRGF0YS5zdHlsZSA9IHN0eWxlO1xuICAgIGVkZ2VEYXRhLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlO1xuICAgIGlmIChlZGdlLmludGVycG9sYXRlICE9PSB2b2lkIDApIHtcbiAgICAgIGVkZ2VEYXRhLmN1cnZlID0gaW50ZXJwb2xhdGVUb0N1cnZlKGVkZ2UuaW50ZXJwb2xhdGUsIGN1cnZlTGluZWFyKTtcbiAgICB9IGVsc2UgaWYgKGVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZSAhPT0gdm9pZCAwKSB7XG4gICAgICBlZGdlRGF0YS5jdXJ2ZSA9IGludGVycG9sYXRlVG9DdXJ2ZShlZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGUsIGN1cnZlTGluZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZURhdGEuY3VydmUgPSBpbnRlcnBvbGF0ZVRvQ3VydmUoY29uZi5jdXJ2ZSwgY3VydmVMaW5lYXIpO1xuICAgIH1cbiAgICBpZiAoZWRnZS50ZXh0ID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChlZGdlLnN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIGVkZ2VEYXRhLmxhYmVscG9zID0gXCJjXCI7XG4gICAgICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsVHlwZSA9IFwiaHRtbFwiO1xuICAgICAgICBlZGdlRGF0YS5sYWJlbCA9IGA8c3BhbiBpZD1cIkwtJHtsaW5rSWR9XCIgY2xhc3M9XCJlZGdlTGFiZWwgTC0ke2xpbmtOYW1lU3RhcnR9JyBMLSR7bGlua05hbWVFbmR9XCIgc3R5bGU9XCIke2VkZ2VEYXRhLmxhYmVsU3R5bGV9XCI+JHtlZGdlLnRleHQucmVwbGFjZShcbiAgICAgICAgICAvZmFbYmxyc10/OmZhLVtcXHctXSsvZyxcbiAgICAgICAgICAocykgPT4gYDxpIGNsYXNzPScke3MucmVwbGFjZShcIjpcIiwgXCIgXCIpfSc+PC9pPmBcbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsVHlwZSA9IFwidGV4dFwiO1xuICAgICAgICBlZGdlRGF0YS5sYWJlbCA9IGVkZ2UudGV4dC5yZXBsYWNlKGNvbW1vbi5saW5lQnJlYWtSZWdleCwgXCJcXG5cIik7XG4gICAgICAgIGlmIChlZGdlLnN0eWxlID09PSB2b2lkIDApIHtcbiAgICAgICAgICBlZGdlRGF0YS5zdHlsZSA9IGVkZ2VEYXRhLnN0eWxlIHx8IFwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZVwiO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsU3R5bGUgPSBlZGdlRGF0YS5sYWJlbFN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWRnZURhdGEuaWQgPSBsaW5rSWQ7XG4gICAgZWRnZURhdGEuY2xhc3MgPSBsaW5rTmFtZVN0YXJ0ICsgXCIgXCIgKyBsaW5rTmFtZUVuZDtcbiAgICBlZGdlRGF0YS5taW5sZW4gPSBlZGdlLmxlbmd0aCB8fCAxO1xuICAgIGcuc2V0RWRnZShkaWFnT2JqLmRiLmxvb2tVcERvbUlkKGVkZ2Uuc3RhcnQpLCBkaWFnT2JqLmRiLmxvb2tVcERvbUlkKGVkZ2UuZW5kKSwgZWRnZURhdGEsIGNudCk7XG4gIH0pO1xufTtcbmNvbnN0IGdldENsYXNzZXMgPSBmdW5jdGlvbih0ZXh0LCBkaWFnT2JqKSB7XG4gIGxvZy5pbmZvKFwiRXh0cmFjdGluZyBjbGFzc2VzXCIpO1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIHRyeSB7XG4gICAgZGlhZ09iai5wYXJzZSh0ZXh0KTtcbiAgICByZXR1cm4gZGlhZ09iai5kYi5nZXRDbGFzc2VzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoZSk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuY29uc3QgZHJhdyA9IGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBsb2cuaW5mbyhcIkRyYXdpbmcgZmxvd2NoYXJ0XCIpO1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIGNvbnN0IHsgc2VjdXJpdHlMZXZlbCwgZmxvd2NoYXJ0OiBjb25mMiB9ID0gZ2V0Q29uZmlnKCk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgdHJ5IHtcbiAgICBkaWFnT2JqLnBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKFwiUGFyc2luZyBmYWlsZWRcIik7XG4gIH1cbiAgbGV0IGRpciA9IGRpYWdPYmouZGIuZ2V0RGlyZWN0aW9uKCk7XG4gIGlmIChkaXIgPT09IHZvaWQgMCkge1xuICAgIGRpciA9IFwiVERcIjtcbiAgfVxuICBjb25zdCBub2RlU3BhY2luZyA9IGNvbmYyLm5vZGVTcGFjaW5nIHx8IDUwO1xuICBjb25zdCByYW5rU3BhY2luZyA9IGNvbmYyLnJhbmtTcGFjaW5nIHx8IDUwO1xuICBjb25zdCBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGNvbXBvdW5kOiB0cnVlXG4gIH0pLnNldEdyYXBoKHtcbiAgICByYW5rZGlyOiBkaXIsXG4gICAgbm9kZXNlcDogbm9kZVNwYWNpbmcsXG4gICAgcmFua3NlcDogcmFua1NwYWNpbmcsXG4gICAgbWFyZ2lueDogOCxcbiAgICBtYXJnaW55OiA4XG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgbGV0IHN1Ykc7XG4gIGNvbnN0IHN1YkdyYXBocyA9IGRpYWdPYmouZGIuZ2V0U3ViR3JhcGhzKCk7XG4gIGZvciAobGV0IGkyID0gc3ViR3JhcGhzLmxlbmd0aCAtIDE7IGkyID49IDA7IGkyLS0pIHtcbiAgICBzdWJHID0gc3ViR3JhcGhzW2kyXTtcbiAgICBkaWFnT2JqLmRiLmFkZFZlcnRleChzdWJHLmlkLCBzdWJHLnRpdGxlLCBcImdyb3VwXCIsIHZvaWQgMCwgc3ViRy5jbGFzc2VzKTtcbiAgfVxuICBjb25zdCB2ZXJ0ID0gZGlhZ09iai5kYi5nZXRWZXJ0aWNlcygpO1xuICBsb2cud2FybihcIkdldCB2ZXJ0aWNlc1wiLCB2ZXJ0KTtcbiAgY29uc3QgZWRnZXMgPSBkaWFnT2JqLmRiLmdldEVkZ2VzKCk7XG4gIGxldCBpID0gMDtcbiAgZm9yIChpID0gc3ViR3JhcGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgc3ViRyA9IHN1YkdyYXBoc1tpXTtcbiAgICBzZWxlY3RBbGwoXCJjbHVzdGVyXCIpLmFwcGVuZChcInRleHRcIik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdWJHLm5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJTZXR0aW5nIHN1YmdyYXBoXCIsXG4gICAgICAgIHN1Ykcubm9kZXNbal0sXG4gICAgICAgIGRpYWdPYmouZGIubG9va1VwRG9tSWQoc3ViRy5ub2Rlc1tqXSksXG4gICAgICAgIGRpYWdPYmouZGIubG9va1VwRG9tSWQoc3ViRy5pZClcbiAgICAgICk7XG4gICAgICBnLnNldFBhcmVudChkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHN1Ykcubm9kZXNbal0pLCBkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHN1YkcuaWQpKTtcbiAgICB9XG4gIH1cbiAgYWRkVmVydGljZXModmVydCwgZywgaWQsIHJvb3QsIGRvYywgZGlhZ09iaik7XG4gIGFkZEVkZ2VzKGVkZ2VzLCBnLCBkaWFnT2JqKTtcbiAgY29uc3QgcmVuZGVyJDEgPSBuZXcgcmVuZGVyKCk7XG4gIGZsb3dDaGFydFNoYXBlcy5hZGRUb1JlbmRlcihyZW5kZXIkMSk7XG4gIHJlbmRlciQxLmFycm93cygpLm5vbmUgPSBmdW5jdGlvbiBub3JtYWwocGFyZW50LCBpZDIsIGVkZ2UsIHR5cGUpIHtcbiAgICBjb25zdCBtYXJrZXIgPSBwYXJlbnQuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZDIpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIDkpLmF0dHIoXCJyZWZZXCIsIDUpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInN0cm9rZVdpZHRoXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA4KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDYpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpO1xuICAgIGNvbnN0IHBhdGggPSBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCAwIEwgMCAwIEwgMCAwIHpcIik7XG4gICAgYXBwbHlTdHlsZShwYXRoLCBlZGdlW3R5cGUgKyBcIlN0eWxlXCJdKTtcbiAgfTtcbiAgcmVuZGVyJDEuYXJyb3dzKCkubm9ybWFsID0gZnVuY3Rpb24gbm9ybWFsKHBhcmVudCwgaWQyKSB7XG4gICAgY29uc3QgbWFya2VyID0gcGFyZW50LmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQyKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCA5KS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJzdHJva2VXaWR0aFwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgOCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCA2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKTtcbiAgICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCAwIEwgMTAgNSBMIDAgMTAgelwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd2hlYWRQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDEpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbiAgfTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGVsZW1lbnQgPSByb290LnNlbGVjdChcIiNcIiArIGlkICsgXCIgZ1wiKTtcbiAgcmVuZGVyJDEoZWxlbWVudCwgZyk7XG4gIGVsZW1lbnQuc2VsZWN0QWxsKFwiZy5ub2RlXCIpLmF0dHIoXCJ0aXRsZVwiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlhZ09iai5kYi5nZXRUb29sdGlwKHRoaXMuaWQpO1xuICB9KTtcbiAgZGlhZ09iai5kYi5pbmRleE5vZGVzKFwic3ViR3JhcGhcIiArIGkpO1xuICBmb3IgKGkgPSAwOyBpIDwgc3ViR3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3ViRyA9IHN1YkdyYXBoc1tpXTtcbiAgICBpZiAoc3ViRy50aXRsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3QgY2x1c3RlclJlY3RzID0gZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIFwiI1wiICsgaWQgKyAnIFtpZD1cIicgKyBkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHN1YkcuaWQpICsgJ1wiXSByZWN0J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsdXN0ZXJFbCA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBcIiNcIiArIGlkICsgJyBbaWQ9XCInICsgZGlhZ09iai5kYi5sb29rVXBEb21JZChzdWJHLmlkKSArICdcIl0nXG4gICAgICApO1xuICAgICAgY29uc3QgeFBvcyA9IGNsdXN0ZXJSZWN0c1swXS54LmJhc2VWYWwudmFsdWU7XG4gICAgICBjb25zdCB5UG9zID0gY2x1c3RlclJlY3RzWzBdLnkuYmFzZVZhbC52YWx1ZTtcbiAgICAgIGNvbnN0IF93aWR0aCA9IGNsdXN0ZXJSZWN0c1swXS53aWR0aC5iYXNlVmFsLnZhbHVlO1xuICAgICAgY29uc3QgY2x1c3RlciA9IHNlbGVjdChjbHVzdGVyRWxbMF0pO1xuICAgICAgY29uc3QgdGUgPSBjbHVzdGVyLnNlbGVjdChcIi5sYWJlbFwiKTtcbiAgICAgIHRlLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3hQb3MgKyBfd2lkdGggLyAyfSwgJHt5UG9zICsgMTR9KWApO1xuICAgICAgdGUuYXR0cihcImlkXCIsIGlkICsgXCJUZXh0XCIpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdWJHLmNsYXNzZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2x1c3RlckVsWzBdLmNsYXNzTGlzdC5hZGQoc3ViRy5jbGFzc2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFjb25mMi5odG1sTGFiZWxzKSB7XG4gICAgY29uc3QgbGFiZWxzID0gZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD1cIicgKyBpZCArICdcIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtcbiAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgY29uc3QgZGltID0gbGFiZWwuZ2V0QkJveCgpO1xuICAgICAgY29uc3QgcmVjdCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCAwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgZGltLndpZHRoKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGRpbS5oZWlnaHQpO1xuICAgICAgbGFiZWwuaW5zZXJ0QmVmb3JlKHJlY3QsIGxhYmVsLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgfVxuICBzZXR1cEdyYXBoVmlld2JveChnLCBzdmcsIGNvbmYyLmRpYWdyYW1QYWRkaW5nLCBjb25mMi51c2VNYXhXaWR0aCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2ZXJ0KTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGNvbnN0IHZlcnRleCA9IHZlcnRba2V5XTtcbiAgICBpZiAodmVydGV4LmxpbmspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSByb290LnNlbGVjdChcIiNcIiArIGlkICsgJyBbaWQ9XCInICsgZGlhZ09iai5kYi5sb29rVXBEb21JZChrZXkpICsgJ1wiXScpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImFcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNsYXNzXCIsIHZlcnRleC5jbGFzc2VzLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiaHJlZlwiLCB2ZXJ0ZXgubGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlbFwiLCBcIm5vb3BlbmVyXCIpO1xuICAgICAgICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0YXJnZXRcIiwgXCJfdG9wXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHZlcnRleC5saW5rVGFyZ2V0KSB7XG4gICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGFyZ2V0XCIsIHZlcnRleC5saW5rVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5rTm9kZSA9IG5vZGUuaW5zZXJ0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBsaW5rO1xuICAgICAgICB9LCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBub2RlLnNlbGVjdChcIi5sYWJlbC1jb250YWluZXJcIik7XG4gICAgICAgIGlmIChzaGFwZSkge1xuICAgICAgICAgIGxpbmtOb2RlLmFwcGVuZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBzaGFwZS5ub2RlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWwgPSBub2RlLnNlbGVjdChcIi5sYWJlbFwiKTtcbiAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgbGlua05vZGUuYXBwZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhYmVsLm5vZGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZmxvd1JlbmRlcmVyID0ge1xuICBzZXRDb25mLFxuICBhZGRWZXJ0aWNlcyxcbiAgYWRkRWRnZXMsXG4gIGdldENsYXNzZXMsXG4gIGRyYXdcbn07XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiOiBmbG93RGIsXG4gIHJlbmRlcmVyOiBmbG93UmVuZGVyZXJWMixcbiAgc3R5bGVzOiBmbG93U3R5bGVzLFxuICBpbml0OiAoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuZmxvd2NoYXJ0KSB7XG4gICAgICBjbmYuZmxvd2NoYXJ0ID0ge307XG4gICAgfVxuICAgIGNuZi5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIGZsb3dSZW5kZXJlci5zZXRDb25mKGNuZi5mbG93Y2hhcnQpO1xuICAgIGZsb3dEYi5jbGVhcigpO1xuICAgIGZsb3dEYi5zZXRHZW4oXCJnZW4tMVwiKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/flowDiagram-93327f21.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/flowDiagram-v2-476db779.js": /*!*********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/flowDiagram-v2-476db779.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./flowDb-6a57c1b4.js */ \"../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js\");\n/* harmony import */ var _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./styles-5f89df53.js */ \"../../../node_modules/mermaid/dist/styles-5f89df53.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/json.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/json.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/label/add-html-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst diagram = {\n parser: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.p,\n db: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.f,\n renderer: _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_10__.f,\n styles: _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_10__.a,\n init: (cnf) => {\n if (!cnf.flowchart) {\n cnf.flowchart = {};\n }\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_11__.q)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });\n _styles_5f89df53_js__WEBPACK_IMPORTED_MODULE_10__.f.setConf(cnf.flowchart);\n _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.f.clear();\n _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.f.setGen(\"gen-2\");\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9mbG93RGlhZ3JhbS12Mi00NzZkYjc3OS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQWdFO0FBQ1k7QUFDckI7QUFDM0M7QUFDK0I7QUFDZDtBQUNXO0FBQ0U7QUFDYjtBQUNLO0FBQ0E7QUFDZjtBQUNZO0FBQzJCO0FBQzFDO0FBQ0Q7QUFDa0I7QUFDZDtBQUNXO0FBQ2Q7QUFDYztBQUM5QjtBQUNBLFFBQVE7QUFDUixNQUFNLGtEQUFNO0FBQ1osWUFBWSxtREFBYztBQUMxQixVQUFVLG1EQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFTLEdBQUcsYUFBYSxnREFBZ0Q7QUFDN0UsSUFBSSwyREFBc0I7QUFDMUIsSUFBSSx3REFBWTtBQUNoQixJQUFJLHlEQUFhO0FBQ2pCO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2Zsb3dEaWFncmFtLXYyLTQ3NmRiNzc5LmpzPzI3MDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcCBhcyBwYXJzZXIsIGYgYXMgZmxvd0RiIH0gZnJvbSBcIi4vZmxvd0RiLTZhNTdjMWI0LmpzXCI7XG5pbXBvcnQgeyBmIGFzIGZsb3dSZW5kZXJlclYyLCBhIGFzIGZsb3dTdHlsZXMgfSBmcm9tIFwiLi9zdHlsZXMtNWY4OWRmNTMuanNcIjtcbmltcG9ydCB7IHEgYXMgc2V0Q29uZmlnIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IFwiZDNcIjtcbmltcG9ydCBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuaW1wb3J0IFwiLi9pbmRleC1hOTJhYzQwNC5qc1wiO1xuaW1wb3J0IFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvanNvbi5qc1wiO1xuaW1wb3J0IFwiLi9lZGdlcy00OWFjNDNhMi5qc1wiO1xuaW1wb3J0IFwiLi9jcmVhdGVUZXh0LTNkZjYzMGI1LmpzXCI7XG5pbXBvcnQgXCJtZGFzdC11dGlsLWZyb20tbWFya2Rvd25cIjtcbmltcG9ydCBcInRzLWRlZGVudFwiO1xuaW1wb3J0IFwiLi9zdmdEcmF3LTBmY2M4MTNkLmpzXCI7XG5pbXBvcnQgXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvbGFiZWwvYWRkLWh0bWwtbGFiZWwuanNcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiOiBmbG93RGIsXG4gIHJlbmRlcmVyOiBmbG93UmVuZGVyZXJWMixcbiAgc3R5bGVzOiBmbG93U3R5bGVzLFxuICBpbml0OiAoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuZmxvd2NoYXJ0KSB7XG4gICAgICBjbmYuZmxvd2NoYXJ0ID0ge307XG4gICAgfVxuICAgIGNuZi5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIHNldENvbmZpZyh7IGZsb3djaGFydDogeyBhcnJvd01hcmtlckFic29sdXRlOiBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSB9IH0pO1xuICAgIGZsb3dSZW5kZXJlclYyLnNldENvbmYoY25mLmZsb3djaGFydCk7XG4gICAgZmxvd0RiLmNsZWFyKCk7XG4gICAgZmxvd0RiLnNldEdlbihcImdlbi0yXCIpO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/flowDiagram-v2-476db779.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/flowchart-elk-definition-5082a990.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/mermaid/dist/flowchart-elk-definition-5082a990.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./flowDb-6a57c1b4.js */ \"../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./edges-49ac43a2.js */ \"../../../node_modules/mermaid/dist/edges-49ac43a2.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/label/add-html-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! elkjs/lib/elk.bundled.js */ \"../../../node_modules/elkjs/lib/elk.bundled.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst findCommonAncestor = (id1, id2, treeData) => {\n const { parentById } = treeData;\n const visited = /* @__PURE__ */ new Set();\n let currentId = id1;\n while (currentId) {\n visited.add(currentId);\n if (currentId === id2) {\n return currentId;\n }\n currentId = parentById[currentId];\n }\n currentId = id2;\n while (currentId) {\n if (visited.has(currentId)) {\n return currentId;\n }\n currentId = parentById[currentId];\n }\n return \"root\";\n};\nconst elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_2__();\nlet portPos = {};\nconst conf = {};\nlet nodeDb = {};\nconst addVertices = async function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) {\n const svg = root.select(`[id=\"${svgId}\"]`);\n const nodes = svg.insert(\"g\").attr(\"class\", \"nodes\");\n const keys = Object.keys(vert);\n await Promise.all(\n keys.map(async function(id) {\n const vertex = vert[id];\n let classStr = \"default\";\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n const styles2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.k)(vertex.styles);\n let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;\n const labelData = { width: 0, height: 0 };\n const ports = [\n {\n id: vertex.id + \"-west\",\n layoutOptions: {\n \"port.side\": \"WEST\"\n }\n },\n {\n id: vertex.id + \"-east\",\n layoutOptions: {\n \"port.side\": \"EAST\"\n }\n },\n {\n id: vertex.id + \"-south\",\n layoutOptions: {\n \"port.side\": \"SOUTH\"\n }\n },\n {\n id: vertex.id + \"-north\",\n layoutOptions: {\n \"port.side\": \"NORTH\"\n }\n }\n ];\n let radious = 0;\n let _shape = \"\";\n let layoutOptions = {};\n switch (vertex.type) {\n case \"round\":\n radious = 5;\n _shape = \"rect\";\n break;\n case \"square\":\n _shape = \"rect\";\n break;\n case \"diamond\":\n _shape = \"question\";\n layoutOptions = {\n portConstraints: \"FIXED_SIDE\"\n };\n break;\n case \"hexagon\":\n _shape = \"hexagon\";\n break;\n case \"odd\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n _shape = \"lean_right\";\n break;\n case \"lean_left\":\n _shape = \"lean_left\";\n break;\n case \"trapezoid\":\n _shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n _shape = \"inv_trapezoid\";\n break;\n case \"odd_right\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n _shape = \"circle\";\n break;\n case \"ellipse\":\n _shape = \"ellipse\";\n break;\n case \"stadium\":\n _shape = \"stadium\";\n break;\n case \"subroutine\":\n _shape = \"subroutine\";\n break;\n case \"cylinder\":\n _shape = \"cylinder\";\n break;\n case \"group\":\n _shape = \"rect\";\n break;\n case \"doublecircle\":\n _shape = \"doublecircle\";\n break;\n default:\n _shape = \"rect\";\n }\n const node = {\n labelStyle: styles2.labelStyle,\n shape: _shape,\n labelText: vertexText,\n labelType: vertex.labelType,\n rx: radious,\n ry: radious,\n class: classStr,\n style: styles2.style,\n id: vertex.id,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: diagObj.db.getTooltip(vertex.id) || \"\",\n domId: diagObj.db.lookUpDomId(vertex.id),\n haveCallback: vertex.haveCallback,\n width: vertex.type === \"group\" ? 500 : void 0,\n dir: vertex.dir,\n type: vertex.type,\n props: vertex.props,\n padding: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart.padding\n };\n let boundingBox;\n let nodeEl;\n if (node.type !== \"group\") {\n nodeEl = await (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_8__.e)(nodes, node, vertex.dir);\n boundingBox = nodeEl.node().getBBox();\n } else {\n doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const { shapeSvg, bbox } = await (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_8__.l)(nodes, node, void 0, true);\n labelData.width = bbox.width;\n labelData.wrappingWidth = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart.wrappingWidth;\n labelData.height = bbox.height;\n labelData.labelNode = shapeSvg.node();\n node.labelData = labelData;\n }\n const data = {\n id: vertex.id,\n ports: vertex.type === \"diamond\" ? ports : [],\n // labelStyle: styles.labelStyle,\n // shape: _shape,\n layoutOptions,\n labelText: vertexText,\n labelData,\n // labels: [{ text: vertexText }],\n // rx: radius,\n // ry: radius,\n // class: classStr,\n // style: styles.style,\n // link: vertex.link,\n // linkTarget: vertex.linkTarget,\n // tooltip: diagObj.db.getTooltip(vertex.id) || '',\n domId: diagObj.db.lookUpDomId(vertex.id),\n // haveCallback: vertex.haveCallback,\n width: boundingBox == null ? void 0 : boundingBox.width,\n height: boundingBox == null ? void 0 : boundingBox.height,\n // dir: vertex.dir,\n type: vertex.type,\n // props: vertex.props,\n // padding: getConfig().flowchart.padding,\n // boundingBox,\n el: nodeEl,\n parent: parentLookupDb.parentById[vertex.id]\n };\n nodeDb[node.id] = data;\n })\n );\n return graph;\n};\nconst getNextPosition = (position, edgeDirection, graphDirection) => {\n const portPos2 = {\n TB: {\n in: {\n north: \"north\"\n },\n out: {\n south: \"west\",\n west: \"east\",\n east: \"south\"\n }\n },\n LR: {\n in: {\n west: \"west\"\n },\n out: {\n east: \"south\",\n south: \"north\",\n north: \"east\"\n }\n },\n RL: {\n in: {\n east: \"east\"\n },\n out: {\n west: \"north\",\n north: \"south\",\n south: \"west\"\n }\n },\n BT: {\n in: {\n south: \"south\"\n },\n out: {\n north: \"east\",\n east: \"west\",\n west: \"north\"\n }\n }\n };\n portPos2.TD = portPos2.TB;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"abc88\", graphDirection, edgeDirection, position);\n return portPos2[graphDirection][edgeDirection][position];\n};\nconst getNextPort = (node, edgeDirection, graphDirection) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"getNextPort abc88\", { node, edgeDirection, graphDirection });\n if (!portPos[node]) {\n switch (graphDirection) {\n case \"TB\":\n case \"TD\":\n portPos[node] = {\n inPosition: \"north\",\n outPosition: \"south\"\n };\n break;\n case \"BT\":\n portPos[node] = {\n inPosition: \"south\",\n outPosition: \"north\"\n };\n break;\n case \"RL\":\n portPos[node] = {\n inPosition: \"east\",\n outPosition: \"west\"\n };\n break;\n case \"LR\":\n portPos[node] = {\n inPosition: \"west\",\n outPosition: \"east\"\n };\n break;\n }\n }\n const result = edgeDirection === \"in\" ? portPos[node].inPosition : portPos[node].outPosition;\n if (edgeDirection === \"in\") {\n portPos[node].inPosition = getNextPosition(\n portPos[node].inPosition,\n edgeDirection,\n graphDirection\n );\n } else {\n portPos[node].outPosition = getNextPosition(\n portPos[node].outPosition,\n edgeDirection,\n graphDirection\n );\n }\n return result;\n};\nconst getEdgeStartEndPoint = (edge, dir) => {\n let source = edge.start;\n let target = edge.end;\n const sourceId = source;\n const targetId = target;\n const startNode = nodeDb[source];\n const endNode = nodeDb[target];\n if (!startNode || !endNode) {\n return { source, target };\n }\n if (startNode.type === \"diamond\") {\n source = `${source}-${getNextPort(source, \"out\", dir)}`;\n }\n if (endNode.type === \"diamond\") {\n target = `${target}-${getNextPort(target, \"in\", dir)}`;\n }\n return { source, target, sourceId, targetId };\n};\nconst addEdges = function(edges, diagObj, graph, svg) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"abc78 edges = \", edges);\n const labelsEl = svg.insert(\"g\").attr(\"class\", \"edgeLabels\");\n let linkIdCnt = {};\n let dir = diagObj.db.getDirection();\n let defaultStyle;\n let defaultLabelStyle;\n if (edges.defaultStyle !== void 0) {\n const defaultStyles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.k)(edges.defaultStyle);\n defaultStyle = defaultStyles.style;\n defaultLabelStyle = defaultStyles.labelStyle;\n }\n edges.forEach(function(edge) {\n const linkIdBase = \"L-\" + edge.start + \"-\" + edge.end;\n if (linkIdCnt[linkIdBase] === void 0) {\n linkIdCnt[linkIdBase] = 0;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n } else {\n linkIdCnt[linkIdBase]++;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n }\n let linkId = linkIdBase + \"-\" + linkIdCnt[linkIdBase];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"abc78 new link id to be used is\", linkIdBase, linkId, linkIdCnt[linkIdBase]);\n const linkNameStart = \"LS-\" + edge.start;\n const linkNameEnd = \"LE-\" + edge.end;\n const edgeData = { style: \"\", labelStyle: \"\" };\n edgeData.minlen = edge.length || 1;\n if (edge.type === \"arrow_open\") {\n edgeData.arrowhead = \"none\";\n } else {\n edgeData.arrowhead = \"normal\";\n }\n edgeData.arrowTypeStart = \"arrow_open\";\n edgeData.arrowTypeEnd = \"arrow_open\";\n switch (edge.type) {\n case \"double_arrow_cross\":\n edgeData.arrowTypeStart = \"arrow_cross\";\n case \"arrow_cross\":\n edgeData.arrowTypeEnd = \"arrow_cross\";\n break;\n case \"double_arrow_point\":\n edgeData.arrowTypeStart = \"arrow_point\";\n case \"arrow_point\":\n edgeData.arrowTypeEnd = \"arrow_point\";\n break;\n case \"double_arrow_circle\":\n edgeData.arrowTypeStart = \"arrow_circle\";\n case \"arrow_circle\":\n edgeData.arrowTypeEnd = \"arrow_circle\";\n break;\n }\n let style = \"\";\n let labelStyle = \"\";\n switch (edge.stroke) {\n case \"normal\":\n style = \"fill:none;\";\n if (defaultStyle !== void 0) {\n style = defaultStyle;\n }\n if (defaultLabelStyle !== void 0) {\n labelStyle = defaultLabelStyle;\n }\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"solid\";\n break;\n case \"dotted\":\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"dotted\";\n edgeData.style = \"fill:none;stroke-width:2px;stroke-dasharray:3;\";\n break;\n case \"thick\":\n edgeData.thickness = \"thick\";\n edgeData.pattern = \"solid\";\n edgeData.style = \"stroke-width: 3.5px;fill:none;\";\n break;\n }\n if (edge.style !== void 0) {\n const styles2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.k)(edge.style);\n style = styles2.style;\n labelStyle = styles2.labelStyle;\n }\n edgeData.style = edgeData.style += style;\n edgeData.labelStyle = edgeData.labelStyle += labelStyle;\n if (edge.interpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear);\n } else if (edges.defaultInterpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear);\n } else {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear);\n }\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n }\n edgeData.labelType = edge.labelType;\n edgeData.label = edge.text.replace(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex, \"\\n\");\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none;\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n edgeData.id = linkId;\n edgeData.classes = \"flowchart-link \" + linkNameStart + \" \" + linkNameEnd;\n const labelEl = (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_8__.f)(labelsEl, edgeData);\n const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"abc78 source and target\", source, target);\n graph.edges.push({\n id: \"e\" + edge.start + edge.end,\n sources: [source],\n targets: [target],\n sourceId,\n targetId,\n labelEl,\n labels: [\n {\n width: edgeData.width,\n height: edgeData.height,\n orgWidth: edgeData.width,\n orgHeight: edgeData.height,\n text: edgeData.label,\n layoutOptions: {\n \"edgeLabels.inline\": \"true\",\n \"edgeLabels.placement\": \"CENTER\"\n }\n }\n ],\n edgeData\n });\n });\n return graph;\n};\nconst addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) {\n let url = \"\";\n if (arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n switch (edgeData.arrowTypeStart) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-crossStart)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-pointStart)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-barbStart)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-circleStart)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-aggregationStart)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-extensionStart)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-compositionStart)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-dependencyStart)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-start\", \"url(\" + url + \"#\" + diagramType + \"-lollipopStart)\");\n break;\n }\n switch (edgeData.arrowTypeEnd) {\n case \"arrow_cross\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-crossEnd)\");\n break;\n case \"arrow_point\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-pointEnd)\");\n break;\n case \"arrow_barb\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-barbEnd)\");\n break;\n case \"arrow_circle\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-circleEnd)\");\n break;\n case \"aggregation\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-aggregationEnd)\");\n break;\n case \"extension\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-extensionEnd)\");\n break;\n case \"composition\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-compositionEnd)\");\n break;\n case \"dependency\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-dependencyEnd)\");\n break;\n case \"lollipop\":\n svgPath.attr(\"marker-end\", \"url(\" + url + \"#\" + diagramType + \"-lollipopEnd)\");\n break;\n }\n};\nconst getClasses = function(text, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Extracting classes\");\n diagObj.db.clear(\"ver-2\");\n try {\n diagObj.parse(text);\n return diagObj.db.getClasses();\n } catch (e) {\n return {};\n }\n};\nconst addSubGraphs = function(db2) {\n const parentLookupDb = { parentById: {}, childrenById: {} };\n const subgraphs = db2.getSubGraphs();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Subgraphs - \", subgraphs);\n subgraphs.forEach(function(subgraph) {\n subgraph.nodes.forEach(function(node) {\n parentLookupDb.parentById[node] = subgraph.id;\n if (parentLookupDb.childrenById[subgraph.id] === void 0) {\n parentLookupDb.childrenById[subgraph.id] = [];\n }\n parentLookupDb.childrenById[subgraph.id].push(node);\n });\n });\n subgraphs.forEach(function(subgraph) {\n ({ id: subgraph.id });\n if (parentLookupDb.parentById[subgraph.id] !== void 0) {\n parentLookupDb.parentById[subgraph.id];\n }\n });\n return parentLookupDb;\n};\nconst calcOffset = function(src, dest, parentLookupDb) {\n const ancestor = findCommonAncestor(src, dest, parentLookupDb);\n if (ancestor === void 0 || ancestor === \"root\") {\n return { x: 0, y: 0 };\n }\n const ancestorOffset = nodeDb[ancestor].offset;\n return { x: ancestorOffset.posX, y: ancestorOffset.posY };\n};\nconst insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) {\n const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb);\n const src = edge.sections[0].startPoint;\n const dest = edge.sections[0].endPoint;\n const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : [];\n const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]);\n const points = [\n [src.x + offset.x, src.y + offset.y],\n ...segPoints,\n [dest.x + offset.x, dest.y + offset.y]\n ];\n const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__.line)().curve(d3__WEBPACK_IMPORTED_MODULE_0__.curveLinear);\n const edgePath = edgesEl.insert(\"path\").attr(\"d\", curve(points)).attr(\"class\", \"path \" + edgeData.classes).attr(\"fill\", \"none\");\n const edgeG = edgesEl.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(edgeG.node().appendChild(edge.labelEl));\n const box = edgeWithLabel.node().firstChild.getBoundingClientRect();\n edgeWithLabel.attr(\"width\", box.width);\n edgeWithLabel.attr(\"height\", box.height);\n edgeG.attr(\n \"transform\",\n `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})`\n );\n addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute);\n};\nconst insertChildren = (nodeArray, parentLookupDb) => {\n nodeArray.forEach((node) => {\n if (!node.children) {\n node.children = [];\n }\n const childIds = parentLookupDb.childrenById[node.id];\n if (childIds) {\n childIds.forEach((childId) => {\n node.children.push(nodeDb[childId]);\n });\n }\n insertChildren(node.children, parentLookupDb);\n });\n};\nconst draw = async function(text, id, _version, diagObj) {\n var _a;\n diagObj.db.clear();\n nodeDb = {};\n portPos = {};\n diagObj.db.setGen(\"gen-2\");\n diagObj.parser.parse(text);\n const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\").append(\"div\").attr(\"style\", \"height:400px\").attr(\"id\", \"cy\");\n let graph = {\n id: \"root\",\n layoutOptions: {\n \"elk.hierarchyHandling\": \"INCLUDE_CHILDREN\",\n \"org.eclipse.elk.padding\": \"[top=100, left=100, bottom=110, right=110]\",\n \"elk.layered.spacing.edgeNodeBetweenLayers\": \"30\",\n // 'elk.layered.mergeEdges': 'true',\n \"elk.direction\": \"DOWN\"\n // 'elk.ports.sameLayerEdges': true,\n // 'nodePlacement.strategy': 'SIMPLE',\n },\n children: [],\n edges: []\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Drawing flowchart using v3 renderer\", elk);\n let dir = diagObj.db.getDirection();\n switch (dir) {\n case \"BT\":\n graph.layoutOptions[\"elk.direction\"] = \"UP\";\n break;\n case \"TB\":\n graph.layoutOptions[\"elk.direction\"] = \"DOWN\";\n break;\n case \"LR\":\n graph.layoutOptions[\"elk.direction\"] = \"RIGHT\";\n break;\n case \"RL\":\n graph.layoutOptions[\"elk.direction\"] = \"LEFT\";\n break;\n }\n const { securityLevel, flowchart: conf2 } = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)();\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const svg = root.select(`[id=\"${id}\"]`);\n const markers = [\"point\", \"circle\", \"cross\"];\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_8__.a)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute);\n const vert = diagObj.db.getVertices();\n let subG;\n const subGraphs = diagObj.db.getSubGraphs();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Subgraphs - \", subGraphs);\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i];\n diagObj.db.addVertex(\n subG.id,\n { text: subG.title, type: subG.labelType },\n \"group\",\n void 0,\n subG.classes,\n subG.dir\n );\n }\n const subGraphsEl = svg.insert(\"g\").attr(\"class\", \"subgraphs\");\n const parentLookupDb = addSubGraphs(diagObj.db);\n graph = await addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph);\n const edgesEl = svg.insert(\"g\").attr(\"class\", \"edges edgePath\");\n const edges = diagObj.db.getEdges();\n graph = addEdges(edges, diagObj, graph, svg);\n const nodes = Object.keys(nodeDb);\n nodes.forEach((nodeId) => {\n const node = nodeDb[nodeId];\n if (!node.parent) {\n graph.children.push(node);\n }\n if (parentLookupDb.childrenById[nodeId] !== void 0) {\n node.labels = [\n {\n text: node.labelText,\n layoutOptions: {\n \"nodeLabels.placement\": \"[H_CENTER, V_TOP, INSIDE]\"\n },\n width: node.labelData.width,\n height: node.labelData.height\n // width: 100,\n // height: 100,\n }\n ];\n delete node.x;\n delete node.y;\n delete node.width;\n delete node.height;\n }\n });\n insertChildren(graph.children, parentLookupDb);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"after layout\", JSON.stringify(graph, null, 2));\n const g = await elk.layout(graph);\n drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"after layout\", g);\n (_a = g.edges) == null ? void 0 : _a.map((edge) => {\n insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb);\n });\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.p)({}, svg, conf2.diagramPadding, conf2.useMaxWidth);\n renderEl.remove();\n};\nconst drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => {\n nodeArray.forEach(function(node) {\n if (node) {\n nodeDb[node.id].offset = {\n posX: node.x + relX,\n posY: node.y + relY,\n x: relX,\n y: relY,\n depth,\n width: node.width,\n height: node.height\n };\n if (node.type === \"group\") {\n const subgraphEl = subgraphsEl.insert(\"g\").attr(\"class\", \"subgraph\");\n subgraphEl.insert(\"rect\").attr(\"class\", \"subgraph subgraph-lvl-\" + depth % 5 + \" node\").attr(\"x\", node.x + relX).attr(\"y\", node.y + relY).attr(\"width\", node.width).attr(\"height\", node.height);\n const label = subgraphEl.insert(\"g\").attr(\"class\", \"label\");\n const labelCentering = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart.htmlLabels ? node.labelData.width / 2 : 0;\n label.attr(\n \"transform\",\n `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})`\n );\n label.node().appendChild(node.labelData.labelNode);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Id (UGH)= \", node.type, node.labels);\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Id (UGH)= \", node.id);\n node.el.attr(\n \"transform\",\n `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})`\n );\n }\n }\n });\n nodeArray.forEach(function(node) {\n if (node && node.type === \"group\") {\n drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1);\n }\n });\n};\nconst renderer = {\n getClasses,\n draw\n};\nconst genSections = (options) => {\n let sections = \"\";\n for (let i = 0; i < 5; i++) {\n sections += `\n .subgraph-lvl-${i} {\n fill: ${options[`surface${i}`]};\n stroke: ${options[`surfacePeer${i}`]};\n }\n `;\n }\n return sections;\n};\nconst getStyles = (options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span {\n color: ${options.titleColor};\n }\n\n .label text,span {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${options.clusterBkg};\n stroke: ${options.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${genSections(options)}\n`;\nconst styles = getStyles;\nconst diagram = {\n db: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.d,\n renderer,\n parser: _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_9__.p,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9mbG93Y2hhcnQtZWxrLWRlZmluaXRpb24tNTA4MmE5OTAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBNEQ7QUFDYjtBQUNtRTtBQUN4RDtBQUM4RjtBQUM3RztBQUNUO0FBQ0E7QUFDZjtBQUNZO0FBQ2hCO0FBQ2tCO0FBQ2Q7QUFDSDtBQUNjO0FBQ2Q7QUFDYztBQUM5QjtBQUNBLFVBQVUsYUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscURBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsTUFBTTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1REFBa0I7QUFDeEM7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0Esa0JBQWtCO0FBQ2xCLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2Zsb3djaGFydC1lbGstZGVmaW5pdGlvbi01MDgyYTk5MC5qcz81OWM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGQgYXMgZGIsIHAgYXMgcGFyc2VyIH0gZnJvbSBcIi4vZmxvd0RiLTZhNTdjMWI0LmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIGN1cnZlTGluZWFyLCBsaW5lIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBhIGFzIGluc2VydE1hcmtlcnMsIGUgYXMgaW5zZXJ0Tm9kZSwgbCBhcyBsYWJlbEhlbHBlciwgZiBhcyBpbnNlcnRFZGdlTGFiZWwgfSBmcm9tIFwiLi9lZGdlcy00OWFjNDNhMi5qc1wiO1xuaW1wb3J0IFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlLWpzL2xhYmVsL2FkZC1odG1sLWxhYmVsLmpzXCI7XG5pbXBvcnQgeyBsIGFzIGxvZywgYyBhcyBnZXRDb25maWcsIHAgYXMgc2V0dXBHcmFwaFZpZXdib3gsIGsgYXMgZ2V0U3R5bGVzRnJvbUFycmF5LCBvIGFzIGludGVycG9sYXRlVG9DdXJ2ZSwgZSBhcyBjb21tb24gfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgRUxLIGZyb20gXCJlbGtqcy9saWIvZWxrLmJ1bmRsZWQuanNcIjtcbmltcG9ydCBcIi4vY3JlYXRlVGV4dC0zZGY2MzBiNS5qc1wiO1xuaW1wb3J0IFwibWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcIi4vc3ZnRHJhdy0wZmNjODEzZC5qc1wiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbmNvbnN0IGZpbmRDb21tb25BbmNlc3RvciA9IChpZDEsIGlkMiwgdHJlZURhdGEpID0+IHtcbiAgY29uc3QgeyBwYXJlbnRCeUlkIH0gPSB0cmVlRGF0YTtcbiAgY29uc3QgdmlzaXRlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGxldCBjdXJyZW50SWQgPSBpZDE7XG4gIHdoaWxlIChjdXJyZW50SWQpIHtcbiAgICB2aXNpdGVkLmFkZChjdXJyZW50SWQpO1xuICAgIGlmIChjdXJyZW50SWQgPT09IGlkMikge1xuICAgICAgcmV0dXJuIGN1cnJlbnRJZDtcbiAgICB9XG4gICAgY3VycmVudElkID0gcGFyZW50QnlJZFtjdXJyZW50SWRdO1xuICB9XG4gIGN1cnJlbnRJZCA9IGlkMjtcbiAgd2hpbGUgKGN1cnJlbnRJZCkge1xuICAgIGlmICh2aXNpdGVkLmhhcyhjdXJyZW50SWQpKSB7XG4gICAgICByZXR1cm4gY3VycmVudElkO1xuICAgIH1cbiAgICBjdXJyZW50SWQgPSBwYXJlbnRCeUlkW2N1cnJlbnRJZF07XG4gIH1cbiAgcmV0dXJuIFwicm9vdFwiO1xufTtcbmNvbnN0IGVsayA9IG5ldyBFTEsoKTtcbmxldCBwb3J0UG9zID0ge307XG5jb25zdCBjb25mID0ge307XG5sZXQgbm9kZURiID0ge307XG5jb25zdCBhZGRWZXJ0aWNlcyA9IGFzeW5jIGZ1bmN0aW9uKHZlcnQsIHN2Z0lkLCByb290LCBkb2MsIGRpYWdPYmosIHBhcmVudExvb2t1cERiLCBncmFwaCkge1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPVwiJHtzdmdJZH1cIl1gKTtcbiAgY29uc3Qgbm9kZXMgPSBzdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZlcnQpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBrZXlzLm1hcChhc3luYyBmdW5jdGlvbihpZCkge1xuICAgICAgY29uc3QgdmVydGV4ID0gdmVydFtpZF07XG4gICAgICBsZXQgY2xhc3NTdHIgPSBcImRlZmF1bHRcIjtcbiAgICAgIGlmICh2ZXJ0ZXguY2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNsYXNzU3RyID0gdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICB9XG4gICAgICBjbGFzc1N0ciA9IGNsYXNzU3RyICsgXCIgZmxvd2NoYXJ0LWxhYmVsXCI7XG4gICAgICBjb25zdCBzdHlsZXMyID0gZ2V0U3R5bGVzRnJvbUFycmF5KHZlcnRleC5zdHlsZXMpO1xuICAgICAgbGV0IHZlcnRleFRleHQgPSB2ZXJ0ZXgudGV4dCAhPT0gdm9pZCAwID8gdmVydGV4LnRleHQgOiB2ZXJ0ZXguaWQ7XG4gICAgICBjb25zdCBsYWJlbERhdGEgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICAgIGNvbnN0IHBvcnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHZlcnRleC5pZCArIFwiLXdlc3RcIixcbiAgICAgICAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICAgICAgICBcInBvcnQuc2lkZVwiOiBcIldFU1RcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiB2ZXJ0ZXguaWQgKyBcIi1lYXN0XCIsXG4gICAgICAgICAgbGF5b3V0T3B0aW9uczoge1xuICAgICAgICAgICAgXCJwb3J0LnNpZGVcIjogXCJFQVNUXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdmVydGV4LmlkICsgXCItc291dGhcIixcbiAgICAgICAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICAgICAgICBcInBvcnQuc2lkZVwiOiBcIlNPVVRIXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdmVydGV4LmlkICsgXCItbm9ydGhcIixcbiAgICAgICAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICAgICAgICBcInBvcnQuc2lkZVwiOiBcIk5PUlRIXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICBsZXQgcmFkaW91cyA9IDA7XG4gICAgICBsZXQgX3NoYXBlID0gXCJcIjtcbiAgICAgIGxldCBsYXlvdXRPcHRpb25zID0ge307XG4gICAgICBzd2l0Y2ggKHZlcnRleC50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICAgIHJhZGlvdXMgPSA1O1xuICAgICAgICAgIF9zaGFwZSA9IFwicmVjdFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJyZWN0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJxdWVzdGlvblwiO1xuICAgICAgICAgIGxheW91dE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwb3J0Q29uc3RyYWludHM6IFwiRklYRURfU0lERVwiXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImhleGFnb25cIjpcbiAgICAgICAgICBfc2hhcGUgPSBcImhleGFnb25cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9kZFwiOlxuICAgICAgICAgIF9zaGFwZSA9IFwicmVjdF9sZWZ0X2ludl9hcnJvd1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibGVhbl9yaWdodFwiOlxuICAgICAgICAgIF9zaGFwZSA9IFwibGVhbl9yaWdodFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibGVhbl9sZWZ0XCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJsZWFuX2xlZnRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyYXBlem9pZFwiOlxuICAgICAgICAgIF9zaGFwZSA9IFwidHJhcGV6b2lkXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnZfdHJhcGV6b2lkXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJpbnZfdHJhcGV6b2lkXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvZGRfcmlnaHRcIjpcbiAgICAgICAgICBfc2hhcGUgPSBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICAgIF9zaGFwZSA9IFwiY2lyY2xlXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJlbGxpcHNlXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFkaXVtXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJzdGFkaXVtXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdWJyb3V0aW5lXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJzdWJyb3V0aW5lXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjeWxpbmRlclwiOlxuICAgICAgICAgIF9zaGFwZSA9IFwiY3lsaW5kZXJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImdyb3VwXCI6XG4gICAgICAgICAgX3NoYXBlID0gXCJyZWN0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3VibGVjaXJjbGVcIjpcbiAgICAgICAgICBfc2hhcGUgPSBcImRvdWJsZWNpcmNsZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9zaGFwZSA9IFwicmVjdFwiO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgbGFiZWxTdHlsZTogc3R5bGVzMi5sYWJlbFN0eWxlLFxuICAgICAgICBzaGFwZTogX3NoYXBlLFxuICAgICAgICBsYWJlbFRleHQ6IHZlcnRleFRleHQsXG4gICAgICAgIGxhYmVsVHlwZTogdmVydGV4LmxhYmVsVHlwZSxcbiAgICAgICAgcng6IHJhZGlvdXMsXG4gICAgICAgIHJ5OiByYWRpb3VzLFxuICAgICAgICBjbGFzczogY2xhc3NTdHIsXG4gICAgICAgIHN0eWxlOiBzdHlsZXMyLnN0eWxlLFxuICAgICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgICBsaW5rOiB2ZXJ0ZXgubGluayxcbiAgICAgICAgbGlua1RhcmdldDogdmVydGV4LmxpbmtUYXJnZXQsXG4gICAgICAgIHRvb2x0aXA6IGRpYWdPYmouZGIuZ2V0VG9vbHRpcCh2ZXJ0ZXguaWQpIHx8IFwiXCIsXG4gICAgICAgIGRvbUlkOiBkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHZlcnRleC5pZCksXG4gICAgICAgIGhhdmVDYWxsYmFjazogdmVydGV4LmhhdmVDYWxsYmFjayxcbiAgICAgICAgd2lkdGg6IHZlcnRleC50eXBlID09PSBcImdyb3VwXCIgPyA1MDAgOiB2b2lkIDAsXG4gICAgICAgIGRpcjogdmVydGV4LmRpcixcbiAgICAgICAgdHlwZTogdmVydGV4LnR5cGUsXG4gICAgICAgIHByb3BzOiB2ZXJ0ZXgucHJvcHMsXG4gICAgICAgIHBhZGRpbmc6IGdldENvbmZpZygpLmZsb3djaGFydC5wYWRkaW5nXG4gICAgICB9O1xuICAgICAgbGV0IGJvdW5kaW5nQm94O1xuICAgICAgbGV0IG5vZGVFbDtcbiAgICAgIGlmIChub2RlLnR5cGUgIT09IFwiZ3JvdXBcIikge1xuICAgICAgICBub2RlRWwgPSBhd2FpdCBpbnNlcnROb2RlKG5vZGVzLCBub2RlLCB2ZXJ0ZXguZGlyKTtcbiAgICAgICAgYm91bmRpbmdCb3ggPSBub2RlRWwubm9kZSgpLmdldEJCb3goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRleHRcIik7XG4gICAgICAgIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKG5vZGVzLCBub2RlLCB2b2lkIDAsIHRydWUpO1xuICAgICAgICBsYWJlbERhdGEud2lkdGggPSBiYm94LndpZHRoO1xuICAgICAgICBsYWJlbERhdGEud3JhcHBpbmdXaWR0aCA9IGdldENvbmZpZygpLmZsb3djaGFydC53cmFwcGluZ1dpZHRoO1xuICAgICAgICBsYWJlbERhdGEuaGVpZ2h0ID0gYmJveC5oZWlnaHQ7XG4gICAgICAgIGxhYmVsRGF0YS5sYWJlbE5vZGUgPSBzaGFwZVN2Zy5ub2RlKCk7XG4gICAgICAgIG5vZGUubGFiZWxEYXRhID0gbGFiZWxEYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgaWQ6IHZlcnRleC5pZCxcbiAgICAgICAgcG9ydHM6IHZlcnRleC50eXBlID09PSBcImRpYW1vbmRcIiA/IHBvcnRzIDogW10sXG4gICAgICAgIC8vIGxhYmVsU3R5bGU6IHN0eWxlcy5sYWJlbFN0eWxlLFxuICAgICAgICAvLyBzaGFwZTogX3NoYXBlLFxuICAgICAgICBsYXlvdXRPcHRpb25zLFxuICAgICAgICBsYWJlbFRleHQ6IHZlcnRleFRleHQsXG4gICAgICAgIGxhYmVsRGF0YSxcbiAgICAgICAgLy8gbGFiZWxzOiBbeyB0ZXh0OiB2ZXJ0ZXhUZXh0IH1dLFxuICAgICAgICAvLyByeDogcmFkaXVzLFxuICAgICAgICAvLyByeTogcmFkaXVzLFxuICAgICAgICAvLyBjbGFzczogY2xhc3NTdHIsXG4gICAgICAgIC8vIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICAgIC8vIGxpbms6IHZlcnRleC5saW5rLFxuICAgICAgICAvLyBsaW5rVGFyZ2V0OiB2ZXJ0ZXgubGlua1RhcmdldCxcbiAgICAgICAgLy8gdG9vbHRpcDogZGlhZ09iai5kYi5nZXRUb29sdGlwKHZlcnRleC5pZCkgfHwgJycsXG4gICAgICAgIGRvbUlkOiBkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHZlcnRleC5pZCksXG4gICAgICAgIC8vIGhhdmVDYWxsYmFjazogdmVydGV4LmhhdmVDYWxsYmFjayxcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nQm94ID09IG51bGwgPyB2b2lkIDAgOiBib3VuZGluZ0JveC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ0JveCA9PSBudWxsID8gdm9pZCAwIDogYm91bmRpbmdCb3guaGVpZ2h0LFxuICAgICAgICAvLyBkaXI6IHZlcnRleC5kaXIsXG4gICAgICAgIHR5cGU6IHZlcnRleC50eXBlLFxuICAgICAgICAvLyBwcm9wczogdmVydGV4LnByb3BzLFxuICAgICAgICAvLyBwYWRkaW5nOiBnZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZyxcbiAgICAgICAgLy8gYm91bmRpbmdCb3gsXG4gICAgICAgIGVsOiBub2RlRWwsXG4gICAgICAgIHBhcmVudDogcGFyZW50TG9va3VwRGIucGFyZW50QnlJZFt2ZXJ0ZXguaWRdXG4gICAgICB9O1xuICAgICAgbm9kZURiW25vZGUuaWRdID0gZGF0YTtcbiAgICB9KVxuICApO1xuICByZXR1cm4gZ3JhcGg7XG59O1xuY29uc3QgZ2V0TmV4dFBvc2l0aW9uID0gKHBvc2l0aW9uLCBlZGdlRGlyZWN0aW9uLCBncmFwaERpcmVjdGlvbikgPT4ge1xuICBjb25zdCBwb3J0UG9zMiA9IHtcbiAgICBUQjoge1xuICAgICAgaW46IHtcbiAgICAgICAgbm9ydGg6IFwibm9ydGhcIlxuICAgICAgfSxcbiAgICAgIG91dDoge1xuICAgICAgICBzb3V0aDogXCJ3ZXN0XCIsXG4gICAgICAgIHdlc3Q6IFwiZWFzdFwiLFxuICAgICAgICBlYXN0OiBcInNvdXRoXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIExSOiB7XG4gICAgICBpbjoge1xuICAgICAgICB3ZXN0OiBcIndlc3RcIlxuICAgICAgfSxcbiAgICAgIG91dDoge1xuICAgICAgICBlYXN0OiBcInNvdXRoXCIsXG4gICAgICAgIHNvdXRoOiBcIm5vcnRoXCIsXG4gICAgICAgIG5vcnRoOiBcImVhc3RcIlxuICAgICAgfVxuICAgIH0sXG4gICAgUkw6IHtcbiAgICAgIGluOiB7XG4gICAgICAgIGVhc3Q6IFwiZWFzdFwiXG4gICAgICB9LFxuICAgICAgb3V0OiB7XG4gICAgICAgIHdlc3Q6IFwibm9ydGhcIixcbiAgICAgICAgbm9ydGg6IFwic291dGhcIixcbiAgICAgICAgc291dGg6IFwid2VzdFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBCVDoge1xuICAgICAgaW46IHtcbiAgICAgICAgc291dGg6IFwic291dGhcIlxuICAgICAgfSxcbiAgICAgIG91dDoge1xuICAgICAgICBub3J0aDogXCJlYXN0XCIsXG4gICAgICAgIGVhc3Q6IFwid2VzdFwiLFxuICAgICAgICB3ZXN0OiBcIm5vcnRoXCJcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHBvcnRQb3MyLlREID0gcG9ydFBvczIuVEI7XG4gIGxvZy5pbmZvKFwiYWJjODhcIiwgZ3JhcGhEaXJlY3Rpb24sIGVkZ2VEaXJlY3Rpb24sIHBvc2l0aW9uKTtcbiAgcmV0dXJuIHBvcnRQb3MyW2dyYXBoRGlyZWN0aW9uXVtlZGdlRGlyZWN0aW9uXVtwb3NpdGlvbl07XG59O1xuY29uc3QgZ2V0TmV4dFBvcnQgPSAobm9kZSwgZWRnZURpcmVjdGlvbiwgZ3JhcGhEaXJlY3Rpb24pID0+IHtcbiAgbG9nLmluZm8oXCJnZXROZXh0UG9ydCBhYmM4OFwiLCB7IG5vZGUsIGVkZ2VEaXJlY3Rpb24sIGdyYXBoRGlyZWN0aW9uIH0pO1xuICBpZiAoIXBvcnRQb3Nbbm9kZV0pIHtcbiAgICBzd2l0Y2ggKGdyYXBoRGlyZWN0aW9uKSB7XG4gICAgICBjYXNlIFwiVEJcIjpcbiAgICAgIGNhc2UgXCJURFwiOlxuICAgICAgICBwb3J0UG9zW25vZGVdID0ge1xuICAgICAgICAgIGluUG9zaXRpb246IFwibm9ydGhcIixcbiAgICAgICAgICBvdXRQb3NpdGlvbjogXCJzb3V0aFwiXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkJUXCI6XG4gICAgICAgIHBvcnRQb3Nbbm9kZV0gPSB7XG4gICAgICAgICAgaW5Qb3NpdGlvbjogXCJzb3V0aFwiLFxuICAgICAgICAgIG91dFBvc2l0aW9uOiBcIm5vcnRoXCJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUkxcIjpcbiAgICAgICAgcG9ydFBvc1tub2RlXSA9IHtcbiAgICAgICAgICBpblBvc2l0aW9uOiBcImVhc3RcIixcbiAgICAgICAgICBvdXRQb3NpdGlvbjogXCJ3ZXN0XCJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTFJcIjpcbiAgICAgICAgcG9ydFBvc1tub2RlXSA9IHtcbiAgICAgICAgICBpblBvc2l0aW9uOiBcIndlc3RcIixcbiAgICAgICAgICBvdXRQb3NpdGlvbjogXCJlYXN0XCJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGVkZ2VEaXJlY3Rpb24gPT09IFwiaW5cIiA/IHBvcnRQb3Nbbm9kZV0uaW5Qb3NpdGlvbiA6IHBvcnRQb3Nbbm9kZV0ub3V0UG9zaXRpb247XG4gIGlmIChlZGdlRGlyZWN0aW9uID09PSBcImluXCIpIHtcbiAgICBwb3J0UG9zW25vZGVdLmluUG9zaXRpb24gPSBnZXROZXh0UG9zaXRpb24oXG4gICAgICBwb3J0UG9zW25vZGVdLmluUG9zaXRpb24sXG4gICAgICBlZGdlRGlyZWN0aW9uLFxuICAgICAgZ3JhcGhEaXJlY3Rpb25cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHBvcnRQb3Nbbm9kZV0ub3V0UG9zaXRpb24gPSBnZXROZXh0UG9zaXRpb24oXG4gICAgICBwb3J0UG9zW25vZGVdLm91dFBvc2l0aW9uLFxuICAgICAgZWRnZURpcmVjdGlvbixcbiAgICAgIGdyYXBoRGlyZWN0aW9uXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGdldEVkZ2VTdGFydEVuZFBvaW50ID0gKGVkZ2UsIGRpcikgPT4ge1xuICBsZXQgc291cmNlID0gZWRnZS5zdGFydDtcbiAgbGV0IHRhcmdldCA9IGVkZ2UuZW5kO1xuICBjb25zdCBzb3VyY2VJZCA9IHNvdXJjZTtcbiAgY29uc3QgdGFyZ2V0SWQgPSB0YXJnZXQ7XG4gIGNvbnN0IHN0YXJ0Tm9kZSA9IG5vZGVEYltzb3VyY2VdO1xuICBjb25zdCBlbmROb2RlID0gbm9kZURiW3RhcmdldF07XG4gIGlmICghc3RhcnROb2RlIHx8ICFlbmROb2RlKSB7XG4gICAgcmV0dXJuIHsgc291cmNlLCB0YXJnZXQgfTtcbiAgfVxuICBpZiAoc3RhcnROb2RlLnR5cGUgPT09IFwiZGlhbW9uZFwiKSB7XG4gICAgc291cmNlID0gYCR7c291cmNlfS0ke2dldE5leHRQb3J0KHNvdXJjZSwgXCJvdXRcIiwgZGlyKX1gO1xuICB9XG4gIGlmIChlbmROb2RlLnR5cGUgPT09IFwiZGlhbW9uZFwiKSB7XG4gICAgdGFyZ2V0ID0gYCR7dGFyZ2V0fS0ke2dldE5leHRQb3J0KHRhcmdldCwgXCJpblwiLCBkaXIpfWA7XG4gIH1cbiAgcmV0dXJuIHsgc291cmNlLCB0YXJnZXQsIHNvdXJjZUlkLCB0YXJnZXRJZCB9O1xufTtcbmNvbnN0IGFkZEVkZ2VzID0gZnVuY3Rpb24oZWRnZXMsIGRpYWdPYmosIGdyYXBoLCBzdmcpIHtcbiAgbG9nLmluZm8oXCJhYmM3OCBlZGdlcyA9IFwiLCBlZGdlcyk7XG4gIGNvbnN0IGxhYmVsc0VsID0gc3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZUxhYmVsc1wiKTtcbiAgbGV0IGxpbmtJZENudCA9IHt9O1xuICBsZXQgZGlyID0gZGlhZ09iai5kYi5nZXREaXJlY3Rpb24oKTtcbiAgbGV0IGRlZmF1bHRTdHlsZTtcbiAgbGV0IGRlZmF1bHRMYWJlbFN0eWxlO1xuICBpZiAoZWRnZXMuZGVmYXVsdFN0eWxlICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBkZWZhdWx0U3R5bGVzID0gZ2V0U3R5bGVzRnJvbUFycmF5KGVkZ2VzLmRlZmF1bHRTdHlsZSk7XG4gICAgZGVmYXVsdFN0eWxlID0gZGVmYXVsdFN0eWxlcy5zdHlsZTtcbiAgICBkZWZhdWx0TGFiZWxTdHlsZSA9IGRlZmF1bHRTdHlsZXMubGFiZWxTdHlsZTtcbiAgfVxuICBlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICBjb25zdCBsaW5rSWRCYXNlID0gXCJMLVwiICsgZWRnZS5zdGFydCArIFwiLVwiICsgZWRnZS5lbmQ7XG4gICAgaWYgKGxpbmtJZENudFtsaW5rSWRCYXNlXSA9PT0gdm9pZCAwKSB7XG4gICAgICBsaW5rSWRDbnRbbGlua0lkQmFzZV0gPSAwO1xuICAgICAgbG9nLmluZm8oXCJhYmM3OCBuZXcgZW50cnlcIiwgbGlua0lkQmFzZSwgbGlua0lkQ250W2xpbmtJZEJhc2VdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlua0lkQ250W2xpbmtJZEJhc2VdKys7XG4gICAgICBsb2cuaW5mbyhcImFiYzc4IG5ldyBlbnRyeVwiLCBsaW5rSWRCYXNlLCBsaW5rSWRDbnRbbGlua0lkQmFzZV0pO1xuICAgIH1cbiAgICBsZXQgbGlua0lkID0gbGlua0lkQmFzZSArIFwiLVwiICsgbGlua0lkQ250W2xpbmtJZEJhc2VdO1xuICAgIGxvZy5pbmZvKFwiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpc1wiLCBsaW5rSWRCYXNlLCBsaW5rSWQsIGxpbmtJZENudFtsaW5rSWRCYXNlXSk7XG4gICAgY29uc3QgbGlua05hbWVTdGFydCA9IFwiTFMtXCIgKyBlZGdlLnN0YXJ0O1xuICAgIGNvbnN0IGxpbmtOYW1lRW5kID0gXCJMRS1cIiArIGVkZ2UuZW5kO1xuICAgIGNvbnN0IGVkZ2VEYXRhID0geyBzdHlsZTogXCJcIiwgbGFiZWxTdHlsZTogXCJcIiB9O1xuICAgIGVkZ2VEYXRhLm1pbmxlbiA9IGVkZ2UubGVuZ3RoIHx8IDE7XG4gICAgaWYgKGVkZ2UudHlwZSA9PT0gXCJhcnJvd19vcGVuXCIpIHtcbiAgICAgIGVkZ2VEYXRhLmFycm93aGVhZCA9IFwibm9uZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlRGF0YS5hcnJvd2hlYWQgPSBcIm5vcm1hbFwiO1xuICAgIH1cbiAgICBlZGdlRGF0YS5hcnJvd1R5cGVTdGFydCA9IFwiYXJyb3dfb3BlblwiO1xuICAgIGVkZ2VEYXRhLmFycm93VHlwZUVuZCA9IFwiYXJyb3dfb3BlblwiO1xuICAgIHN3aXRjaCAoZWRnZS50eXBlKSB7XG4gICAgICBjYXNlIFwiZG91YmxlX2Fycm93X2Nyb3NzXCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZVN0YXJ0ID0gXCJhcnJvd19jcm9zc1wiO1xuICAgICAgY2FzZSBcImFycm93X2Nyb3NzXCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZUVuZCA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZG91YmxlX2Fycm93X3BvaW50XCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZVN0YXJ0ID0gXCJhcnJvd19wb2ludFwiO1xuICAgICAgY2FzZSBcImFycm93X3BvaW50XCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZUVuZCA9IFwiYXJyb3dfcG9pbnRcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZG91YmxlX2Fycm93X2NpcmNsZVwiOlxuICAgICAgICBlZGdlRGF0YS5hcnJvd1R5cGVTdGFydCA9IFwiYXJyb3dfY2lyY2xlXCI7XG4gICAgICBjYXNlIFwiYXJyb3dfY2lyY2xlXCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZUVuZCA9IFwiYXJyb3dfY2lyY2xlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsZXQgc3R5bGUgPSBcIlwiO1xuICAgIGxldCBsYWJlbFN0eWxlID0gXCJcIjtcbiAgICBzd2l0Y2ggKGVkZ2Uuc3Ryb2tlKSB7XG4gICAgICBjYXNlIFwibm9ybWFsXCI6XG4gICAgICAgIHN0eWxlID0gXCJmaWxsOm5vbmU7XCI7XG4gICAgICAgIGlmIChkZWZhdWx0U3R5bGUgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHN0eWxlID0gZGVmYXVsdFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0TGFiZWxTdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgbGFiZWxTdHlsZSA9IGRlZmF1bHRMYWJlbFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2VEYXRhLnRoaWNrbmVzcyA9IFwibm9ybWFsXCI7XG4gICAgICAgIGVkZ2VEYXRhLnBhdHRlcm4gPSBcInNvbGlkXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRvdHRlZFwiOlxuICAgICAgICBlZGdlRGF0YS50aGlja25lc3MgPSBcIm5vcm1hbFwiO1xuICAgICAgICBlZGdlRGF0YS5wYXR0ZXJuID0gXCJkb3R0ZWRcIjtcbiAgICAgICAgZWRnZURhdGEuc3R5bGUgPSBcImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MztcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGhpY2tcIjpcbiAgICAgICAgZWRnZURhdGEudGhpY2tuZXNzID0gXCJ0aGlja1wiO1xuICAgICAgICBlZGdlRGF0YS5wYXR0ZXJuID0gXCJzb2xpZFwiO1xuICAgICAgICBlZGdlRGF0YS5zdHlsZSA9IFwic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7XCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoZWRnZS5zdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICBjb25zdCBzdHlsZXMyID0gZ2V0U3R5bGVzRnJvbUFycmF5KGVkZ2Uuc3R5bGUpO1xuICAgICAgc3R5bGUgPSBzdHlsZXMyLnN0eWxlO1xuICAgICAgbGFiZWxTdHlsZSA9IHN0eWxlczIubGFiZWxTdHlsZTtcbiAgICB9XG4gICAgZWRnZURhdGEuc3R5bGUgPSBlZGdlRGF0YS5zdHlsZSArPSBzdHlsZTtcbiAgICBlZGdlRGF0YS5sYWJlbFN0eWxlID0gZWRnZURhdGEubGFiZWxTdHlsZSArPSBsYWJlbFN0eWxlO1xuICAgIGlmIChlZGdlLmludGVycG9sYXRlICE9PSB2b2lkIDApIHtcbiAgICAgIGVkZ2VEYXRhLmN1cnZlID0gaW50ZXJwb2xhdGVUb0N1cnZlKGVkZ2UuaW50ZXJwb2xhdGUsIGN1cnZlTGluZWFyKTtcbiAgICB9IGVsc2UgaWYgKGVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZSAhPT0gdm9pZCAwKSB7XG4gICAgICBlZGdlRGF0YS5jdXJ2ZSA9IGludGVycG9sYXRlVG9DdXJ2ZShlZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGUsIGN1cnZlTGluZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZURhdGEuY3VydmUgPSBpbnRlcnBvbGF0ZVRvQ3VydmUoY29uZi5jdXJ2ZSwgY3VydmVMaW5lYXIpO1xuICAgIH1cbiAgICBpZiAoZWRnZS50ZXh0ID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChlZGdlLnN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZURhdGEuYXJyb3doZWFkU3R5bGUgPSBcImZpbGw6ICMzMzNcIjtcbiAgICAgIGVkZ2VEYXRhLmxhYmVscG9zID0gXCJjXCI7XG4gICAgfVxuICAgIGVkZ2VEYXRhLmxhYmVsVHlwZSA9IGVkZ2UubGFiZWxUeXBlO1xuICAgIGVkZ2VEYXRhLmxhYmVsID0gZWRnZS50ZXh0LnJlcGxhY2UoY29tbW9uLmxpbmVCcmVha1JlZ2V4LCBcIlxcblwiKTtcbiAgICBpZiAoZWRnZS5zdHlsZSA9PT0gdm9pZCAwKSB7XG4gICAgICBlZGdlRGF0YS5zdHlsZSA9IGVkZ2VEYXRhLnN0eWxlIHx8IFwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTtcIjtcbiAgICB9XG4gICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IGVkZ2VEYXRhLmxhYmVsU3R5bGUucmVwbGFjZShcImNvbG9yOlwiLCBcImZpbGw6XCIpO1xuICAgIGVkZ2VEYXRhLmlkID0gbGlua0lkO1xuICAgIGVkZ2VEYXRhLmNsYXNzZXMgPSBcImZsb3djaGFydC1saW5rIFwiICsgbGlua05hbWVTdGFydCArIFwiIFwiICsgbGlua05hbWVFbmQ7XG4gICAgY29uc3QgbGFiZWxFbCA9IGluc2VydEVkZ2VMYWJlbChsYWJlbHNFbCwgZWRnZURhdGEpO1xuICAgIGNvbnN0IHsgc291cmNlLCB0YXJnZXQsIHNvdXJjZUlkLCB0YXJnZXRJZCB9ID0gZ2V0RWRnZVN0YXJ0RW5kUG9pbnQoZWRnZSwgZGlyKTtcbiAgICBsb2cuZGVidWcoXCJhYmM3OCBzb3VyY2UgYW5kIHRhcmdldFwiLCBzb3VyY2UsIHRhcmdldCk7XG4gICAgZ3JhcGguZWRnZXMucHVzaCh7XG4gICAgICBpZDogXCJlXCIgKyBlZGdlLnN0YXJ0ICsgZWRnZS5lbmQsXG4gICAgICBzb3VyY2VzOiBbc291cmNlXSxcbiAgICAgIHRhcmdldHM6IFt0YXJnZXRdLFxuICAgICAgc291cmNlSWQsXG4gICAgICB0YXJnZXRJZCxcbiAgICAgIGxhYmVsRWwsXG4gICAgICBsYWJlbHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHdpZHRoOiBlZGdlRGF0YS53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGVkZ2VEYXRhLmhlaWdodCxcbiAgICAgICAgICBvcmdXaWR0aDogZWRnZURhdGEud2lkdGgsXG4gICAgICAgICAgb3JnSGVpZ2h0OiBlZGdlRGF0YS5oZWlnaHQsXG4gICAgICAgICAgdGV4dDogZWRnZURhdGEubGFiZWwsXG4gICAgICAgICAgbGF5b3V0T3B0aW9uczoge1xuICAgICAgICAgICAgXCJlZGdlTGFiZWxzLmlubGluZVwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZWRnZUxhYmVscy5wbGFjZW1lbnRcIjogXCJDRU5URVJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGVkZ2VEYXRhXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZ3JhcGg7XG59O1xuY29uc3QgYWRkTWFya2Vyc1RvRWRnZSA9IGZ1bmN0aW9uKHN2Z1BhdGgsIGVkZ2VEYXRhLCBkaWFncmFtVHlwZSwgYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBzd2l0Y2ggKGVkZ2VEYXRhLmFycm93VHlwZVN0YXJ0KSB7XG4gICAgY2FzZSBcImFycm93X2Nyb3NzXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItY3Jvc3NTdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyb3dfcG9pbnRcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1wb2ludFN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJvd19iYXJiXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItYmFyYlN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJvd19jaXJjbGVcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jaXJjbGVTdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYWdncmVnYXRpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1hZ2dyZWdhdGlvblN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleHRlbnNpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1leHRlbnNpb25TdGFydClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29tcG9zaXRpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jb21wb3NpdGlvblN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZXBlbmRlbmN5XCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0KVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2xsaXBvcFwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLXN0YXJ0XCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWxvbGxpcG9wU3RhcnQpXCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3dpdGNoIChlZGdlRGF0YS5hcnJvd1R5cGVFbmQpIHtcbiAgICBjYXNlIFwiYXJyb3dfY3Jvc3NcIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItY3Jvc3NFbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImFycm93X3BvaW50XCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLXBvaW50RW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJvd19iYXJiXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWJhcmJFbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImFycm93X2NpcmNsZVwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jaXJjbGVFbmQpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImFnZ3JlZ2F0aW9uXCI6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBkaWFncmFtVHlwZSArIFwiLWFnZ3JlZ2F0aW9uRW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleHRlbnNpb25cIjpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGRpYWdyYW1UeXBlICsgXCItZXh0ZW5zaW9uRW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjb21wb3NpdGlvblwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1jb21wb3NpdGlvbkVuZClcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGVwZW5kZW5jeVwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1kZXBlbmRlbmN5RW5kKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2xsaXBvcFwiOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZGlhZ3JhbVR5cGUgKyBcIi1sb2xsaXBvcEVuZClcIik7XG4gICAgICBicmVhaztcbiAgfVxufTtcbmNvbnN0IGdldENsYXNzZXMgPSBmdW5jdGlvbih0ZXh0LCBkaWFnT2JqKSB7XG4gIGxvZy5pbmZvKFwiRXh0cmFjdGluZyBjbGFzc2VzXCIpO1xuICBkaWFnT2JqLmRiLmNsZWFyKFwidmVyLTJcIik7XG4gIHRyeSB7XG4gICAgZGlhZ09iai5wYXJzZSh0ZXh0KTtcbiAgICByZXR1cm4gZGlhZ09iai5kYi5nZXRDbGFzc2VzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5jb25zdCBhZGRTdWJHcmFwaHMgPSBmdW5jdGlvbihkYjIpIHtcbiAgY29uc3QgcGFyZW50TG9va3VwRGIgPSB7IHBhcmVudEJ5SWQ6IHt9LCBjaGlsZHJlbkJ5SWQ6IHt9IH07XG4gIGNvbnN0IHN1YmdyYXBocyA9IGRiMi5nZXRTdWJHcmFwaHMoKTtcbiAgbG9nLmluZm8oXCJTdWJncmFwaHMgLSBcIiwgc3ViZ3JhcGhzKTtcbiAgc3ViZ3JhcGhzLmZvckVhY2goZnVuY3Rpb24oc3ViZ3JhcGgpIHtcbiAgICBzdWJncmFwaC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHBhcmVudExvb2t1cERiLnBhcmVudEJ5SWRbbm9kZV0gPSBzdWJncmFwaC5pZDtcbiAgICAgIGlmIChwYXJlbnRMb29rdXBEYi5jaGlsZHJlbkJ5SWRbc3ViZ3JhcGguaWRdID09PSB2b2lkIDApIHtcbiAgICAgICAgcGFyZW50TG9va3VwRGIuY2hpbGRyZW5CeUlkW3N1YmdyYXBoLmlkXSA9IFtdO1xuICAgICAgfVxuICAgICAgcGFyZW50TG9va3VwRGIuY2hpbGRyZW5CeUlkW3N1YmdyYXBoLmlkXS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9KTtcbiAgc3ViZ3JhcGhzLmZvckVhY2goZnVuY3Rpb24oc3ViZ3JhcGgpIHtcbiAgICAoeyBpZDogc3ViZ3JhcGguaWQgfSk7XG4gICAgaWYgKHBhcmVudExvb2t1cERiLnBhcmVudEJ5SWRbc3ViZ3JhcGguaWRdICE9PSB2b2lkIDApIHtcbiAgICAgIHBhcmVudExvb2t1cERiLnBhcmVudEJ5SWRbc3ViZ3JhcGguaWRdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwYXJlbnRMb29rdXBEYjtcbn07XG5jb25zdCBjYWxjT2Zmc2V0ID0gZnVuY3Rpb24oc3JjLCBkZXN0LCBwYXJlbnRMb29rdXBEYikge1xuICBjb25zdCBhbmNlc3RvciA9IGZpbmRDb21tb25BbmNlc3RvcihzcmMsIGRlc3QsIHBhcmVudExvb2t1cERiKTtcbiAgaWYgKGFuY2VzdG9yID09PSB2b2lkIDAgfHwgYW5jZXN0b3IgPT09IFwicm9vdFwiKSB7XG4gICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICB9XG4gIGNvbnN0IGFuY2VzdG9yT2Zmc2V0ID0gbm9kZURiW2FuY2VzdG9yXS5vZmZzZXQ7XG4gIHJldHVybiB7IHg6IGFuY2VzdG9yT2Zmc2V0LnBvc1gsIHk6IGFuY2VzdG9yT2Zmc2V0LnBvc1kgfTtcbn07XG5jb25zdCBpbnNlcnRFZGdlID0gZnVuY3Rpb24oZWRnZXNFbCwgZWRnZSwgZWRnZURhdGEsIGRpYWdPYmosIHBhcmVudExvb2t1cERiKSB7XG4gIGNvbnN0IG9mZnNldCA9IGNhbGNPZmZzZXQoZWRnZS5zb3VyY2VJZCwgZWRnZS50YXJnZXRJZCwgcGFyZW50TG9va3VwRGIpO1xuICBjb25zdCBzcmMgPSBlZGdlLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQ7XG4gIGNvbnN0IGRlc3QgPSBlZGdlLnNlY3Rpb25zWzBdLmVuZFBvaW50O1xuICBjb25zdCBzZWdtZW50cyA9IGVkZ2Uuc2VjdGlvbnNbMF0uYmVuZFBvaW50cyA/IGVkZ2Uuc2VjdGlvbnNbMF0uYmVuZFBvaW50cyA6IFtdO1xuICBjb25zdCBzZWdQb2ludHMgPSBzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IFtzZWdtZW50LnggKyBvZmZzZXQueCwgc2VnbWVudC55ICsgb2Zmc2V0LnldKTtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIFtzcmMueCArIG9mZnNldC54LCBzcmMueSArIG9mZnNldC55XSxcbiAgICAuLi5zZWdQb2ludHMsXG4gICAgW2Rlc3QueCArIG9mZnNldC54LCBkZXN0LnkgKyBvZmZzZXQueV1cbiAgXTtcbiAgY29uc3QgY3VydmUgPSBsaW5lKCkuY3VydmUoY3VydmVMaW5lYXIpO1xuICBjb25zdCBlZGdlUGF0aCA9IGVkZ2VzRWwuaW5zZXJ0KFwicGF0aFwiKS5hdHRyKFwiZFwiLCBjdXJ2ZShwb2ludHMpKS5hdHRyKFwiY2xhc3NcIiwgXCJwYXRoIFwiICsgZWRnZURhdGEuY2xhc3NlcykuYXR0cihcImZpbGxcIiwgXCJub25lXCIpO1xuICBjb25zdCBlZGdlRyA9IGVkZ2VzRWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlTGFiZWxcIik7XG4gIGNvbnN0IGVkZ2VXaXRoTGFiZWwgPSBzZWxlY3QoZWRnZUcubm9kZSgpLmFwcGVuZENoaWxkKGVkZ2UubGFiZWxFbCkpO1xuICBjb25zdCBib3ggPSBlZGdlV2l0aExhYmVsLm5vZGUoKS5maXJzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBlZGdlV2l0aExhYmVsLmF0dHIoXCJ3aWR0aFwiLCBib3gud2lkdGgpO1xuICBlZGdlV2l0aExhYmVsLmF0dHIoXCJoZWlnaHRcIiwgYm94LmhlaWdodCk7XG4gIGVkZ2VHLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBgdHJhbnNsYXRlKCR7ZWRnZS5sYWJlbHNbMF0ueCArIG9mZnNldC54fSwgJHtlZGdlLmxhYmVsc1swXS55ICsgb2Zmc2V0Lnl9KWBcbiAgKTtcbiAgYWRkTWFya2Vyc1RvRWRnZShlZGdlUGF0aCwgZWRnZURhdGEsIGRpYWdPYmoudHlwZSwgZGlhZ09iai5hcnJvd01hcmtlckFic29sdXRlKTtcbn07XG5jb25zdCBpbnNlcnRDaGlsZHJlbiA9IChub2RlQXJyYXksIHBhcmVudExvb2t1cERiKSA9PiB7XG4gIG5vZGVBcnJheS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkSWRzID0gcGFyZW50TG9va3VwRGIuY2hpbGRyZW5CeUlkW25vZGUuaWRdO1xuICAgIGlmIChjaGlsZElkcykge1xuICAgICAgY2hpbGRJZHMuZm9yRWFjaCgoY2hpbGRJZCkgPT4ge1xuICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2gobm9kZURiW2NoaWxkSWRdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpbnNlcnRDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBwYXJlbnRMb29rdXBEYik7XG4gIH0pO1xufTtcbmNvbnN0IGRyYXcgPSBhc3luYyBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgdmFyIF9hO1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIG5vZGVEYiA9IHt9O1xuICBwb3J0UG9zID0ge307XG4gIGRpYWdPYmouZGIuc2V0R2VuKFwiZ2VuLTJcIik7XG4gIGRpYWdPYmoucGFyc2VyLnBhcnNlKHRleHQpO1xuICBjb25zdCByZW5kZXJFbCA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJzdHlsZVwiLCBcImhlaWdodDo0MDBweFwiKS5hdHRyKFwiaWRcIiwgXCJjeVwiKTtcbiAgbGV0IGdyYXBoID0ge1xuICAgIGlkOiBcInJvb3RcIixcbiAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICBcImVsay5oaWVyYXJjaHlIYW5kbGluZ1wiOiBcIklOQ0xVREVfQ0hJTERSRU5cIixcbiAgICAgIFwib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmdcIjogXCJbdG9wPTEwMCwgbGVmdD0xMDAsIGJvdHRvbT0xMTAsIHJpZ2h0PTExMF1cIixcbiAgICAgIFwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnNcIjogXCIzMFwiLFxuICAgICAgLy8gJ2Vsay5sYXllcmVkLm1lcmdlRWRnZXMnOiAndHJ1ZScsXG4gICAgICBcImVsay5kaXJlY3Rpb25cIjogXCJET1dOXCJcbiAgICAgIC8vICdlbGsucG9ydHMuc2FtZUxheWVyRWRnZXMnOiB0cnVlLFxuICAgICAgLy8gJ25vZGVQbGFjZW1lbnQuc3RyYXRlZ3knOiAnU0lNUExFJyxcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBlZGdlczogW11cbiAgfTtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlclwiLCBlbGspO1xuICBsZXQgZGlyID0gZGlhZ09iai5kYi5nZXREaXJlY3Rpb24oKTtcbiAgc3dpdGNoIChkaXIpIHtcbiAgICBjYXNlIFwiQlRcIjpcbiAgICAgIGdyYXBoLmxheW91dE9wdGlvbnNbXCJlbGsuZGlyZWN0aW9uXCJdID0gXCJVUFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlRCXCI6XG4gICAgICBncmFwaC5sYXlvdXRPcHRpb25zW1wiZWxrLmRpcmVjdGlvblwiXSA9IFwiRE9XTlwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkxSXCI6XG4gICAgICBncmFwaC5sYXlvdXRPcHRpb25zW1wiZWxrLmRpcmVjdGlvblwiXSA9IFwiUklHSFRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJSTFwiOlxuICAgICAgZ3JhcGgubGF5b3V0T3B0aW9uc1tcImVsay5kaXJlY3Rpb25cIl0gPSBcIkxFRlRcIjtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGNvbnN0IHsgc2VjdXJpdHlMZXZlbCwgZmxvd2NoYXJ0OiBjb25mMiB9ID0gZ2V0Q29uZmlnKCk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IG1hcmtlcnMgPSBbXCJwb2ludFwiLCBcImNpcmNsZVwiLCBcImNyb3NzXCJdO1xuICBpbnNlcnRNYXJrZXJzKHN2ZywgbWFya2VycywgZGlhZ09iai50eXBlLCBkaWFnT2JqLmFycm93TWFya2VyQWJzb2x1dGUpO1xuICBjb25zdCB2ZXJ0ID0gZGlhZ09iai5kYi5nZXRWZXJ0aWNlcygpO1xuICBsZXQgc3ViRztcbiAgY29uc3Qgc3ViR3JhcGhzID0gZGlhZ09iai5kYi5nZXRTdWJHcmFwaHMoKTtcbiAgbG9nLmluZm8oXCJTdWJncmFwaHMgLSBcIiwgc3ViR3JhcGhzKTtcbiAgZm9yIChsZXQgaSA9IHN1YkdyYXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHN1YkcgPSBzdWJHcmFwaHNbaV07XG4gICAgZGlhZ09iai5kYi5hZGRWZXJ0ZXgoXG4gICAgICBzdWJHLmlkLFxuICAgICAgeyB0ZXh0OiBzdWJHLnRpdGxlLCB0eXBlOiBzdWJHLmxhYmVsVHlwZSB9LFxuICAgICAgXCJncm91cFwiLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3ViRy5jbGFzc2VzLFxuICAgICAgc3ViRy5kaXJcbiAgICApO1xuICB9XG4gIGNvbnN0IHN1YkdyYXBoc0VsID0gc3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwic3ViZ3JhcGhzXCIpO1xuICBjb25zdCBwYXJlbnRMb29rdXBEYiA9IGFkZFN1YkdyYXBocyhkaWFnT2JqLmRiKTtcbiAgZ3JhcGggPSBhd2FpdCBhZGRWZXJ0aWNlcyh2ZXJ0LCBpZCwgcm9vdCwgZG9jLCBkaWFnT2JqLCBwYXJlbnRMb29rdXBEYiwgZ3JhcGgpO1xuICBjb25zdCBlZGdlc0VsID0gc3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZXMgZWRnZVBhdGhcIik7XG4gIGNvbnN0IGVkZ2VzID0gZGlhZ09iai5kYi5nZXRFZGdlcygpO1xuICBncmFwaCA9IGFkZEVkZ2VzKGVkZ2VzLCBkaWFnT2JqLCBncmFwaCwgc3ZnKTtcbiAgY29uc3Qgbm9kZXMgPSBPYmplY3Qua2V5cyhub2RlRGIpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlSWQpID0+IHtcbiAgICBjb25zdCBub2RlID0gbm9kZURiW25vZGVJZF07XG4gICAgaWYgKCFub2RlLnBhcmVudCkge1xuICAgICAgZ3JhcGguY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB9XG4gICAgaWYgKHBhcmVudExvb2t1cERiLmNoaWxkcmVuQnlJZFtub2RlSWRdICE9PSB2b2lkIDApIHtcbiAgICAgIG5vZGUubGFiZWxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogbm9kZS5sYWJlbFRleHQsXG4gICAgICAgICAgbGF5b3V0T3B0aW9uczoge1xuICAgICAgICAgICAgXCJub2RlTGFiZWxzLnBsYWNlbWVudFwiOiBcIltIX0NFTlRFUiwgVl9UT1AsIElOU0lERV1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6IG5vZGUubGFiZWxEYXRhLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogbm9kZS5sYWJlbERhdGEuaGVpZ2h0XG4gICAgICAgICAgLy8gd2lkdGg6IDEwMCxcbiAgICAgICAgICAvLyBoZWlnaHQ6IDEwMCxcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIGRlbGV0ZSBub2RlLng7XG4gICAgICBkZWxldGUgbm9kZS55O1xuICAgICAgZGVsZXRlIG5vZGUud2lkdGg7XG4gICAgICBkZWxldGUgbm9kZS5oZWlnaHQ7XG4gICAgfVxuICB9KTtcbiAgaW5zZXJ0Q2hpbGRyZW4oZ3JhcGguY2hpbGRyZW4sIHBhcmVudExvb2t1cERiKTtcbiAgbG9nLmluZm8oXCJhZnRlciBsYXlvdXRcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgsIG51bGwsIDIpKTtcbiAgY29uc3QgZyA9IGF3YWl0IGVsay5sYXlvdXQoZ3JhcGgpO1xuICBkcmF3Tm9kZXMoMCwgMCwgZy5jaGlsZHJlbiwgc3ZnLCBzdWJHcmFwaHNFbCwgZGlhZ09iaiwgMCk7XG4gIGxvZy5pbmZvKFwiYWZ0ZXIgbGF5b3V0XCIsIGcpO1xuICAoX2EgPSBnLmVkZ2VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EubWFwKChlZGdlKSA9PiB7XG4gICAgaW5zZXJ0RWRnZShlZGdlc0VsLCBlZGdlLCBlZGdlLmVkZ2VEYXRhLCBkaWFnT2JqLCBwYXJlbnRMb29rdXBEYik7XG4gIH0pO1xuICBzZXR1cEdyYXBoVmlld2JveCh7fSwgc3ZnLCBjb25mMi5kaWFncmFtUGFkZGluZywgY29uZjIudXNlTWF4V2lkdGgpO1xuICByZW5kZXJFbC5yZW1vdmUoKTtcbn07XG5jb25zdCBkcmF3Tm9kZXMgPSAocmVsWCwgcmVsWSwgbm9kZUFycmF5LCBzdmcsIHN1YmdyYXBoc0VsLCBkaWFnT2JqLCBkZXB0aCkgPT4ge1xuICBub2RlQXJyYXkuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGVEYltub2RlLmlkXS5vZmZzZXQgPSB7XG4gICAgICAgIHBvc1g6IG5vZGUueCArIHJlbFgsXG4gICAgICAgIHBvc1k6IG5vZGUueSArIHJlbFksXG4gICAgICAgIHg6IHJlbFgsXG4gICAgICAgIHk6IHJlbFksXG4gICAgICAgIGRlcHRoLFxuICAgICAgICB3aWR0aDogbm9kZS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBub2RlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiZ3JvdXBcIikge1xuICAgICAgICBjb25zdCBzdWJncmFwaEVsID0gc3ViZ3JhcGhzRWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJzdWJncmFwaFwiKTtcbiAgICAgICAgc3ViZ3JhcGhFbC5pbnNlcnQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInN1YmdyYXBoIHN1YmdyYXBoLWx2bC1cIiArIGRlcHRoICUgNSArIFwiIG5vZGVcIikuYXR0cihcInhcIiwgbm9kZS54ICsgcmVsWCkuYXR0cihcInlcIiwgbm9kZS55ICsgcmVsWSkuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHN1YmdyYXBoRWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgICAgICAgY29uc3QgbGFiZWxDZW50ZXJpbmcgPSBnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyA/IG5vZGUubGFiZWxEYXRhLndpZHRoIC8gMiA6IDA7XG4gICAgICAgIGxhYmVsLmF0dHIoXG4gICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBgdHJhbnNsYXRlKCR7bm9kZS5sYWJlbHNbMF0ueCArIHJlbFggKyBub2RlLnggKyBsYWJlbENlbnRlcmluZ30sICR7bm9kZS5sYWJlbHNbMF0ueSArIHJlbFkgKyBub2RlLnkgKyAzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChub2RlLmxhYmVsRGF0YS5sYWJlbE5vZGUpO1xuICAgICAgICBsb2cuaW5mbyhcIklkIChVR0gpPSBcIiwgbm9kZS50eXBlLCBub2RlLmxhYmVscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhcIklkIChVR0gpPSBcIiwgbm9kZS5pZCk7XG4gICAgICAgIG5vZGUuZWwuYXR0cihcbiAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgIGB0cmFuc2xhdGUoJHtub2RlLnggKyByZWxYICsgbm9kZS53aWR0aCAvIDJ9LCAke25vZGUueSArIHJlbFkgKyBub2RlLmhlaWdodCAvIDJ9KWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBub2RlQXJyYXkuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICAgIGRyYXdOb2RlcyhyZWxYICsgbm9kZS54LCByZWxZICsgbm9kZS55LCBub2RlLmNoaWxkcmVuLCBzdmcsIHN1YmdyYXBoc0VsLCBkaWFnT2JqLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIGdldENsYXNzZXMsXG4gIGRyYXdcbn07XG5jb25zdCBnZW5TZWN0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gIGxldCBzZWN0aW9ucyA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgc2VjdGlvbnMgKz0gYFxuICAgICAgLnN1YmdyYXBoLWx2bC0ke2l9IHtcbiAgICAgICAgZmlsbDogJHtvcHRpb25zW2BzdXJmYWNlJHtpfWBdfTtcbiAgICAgICAgc3Ryb2tlOiAke29wdGlvbnNbYHN1cmZhY2VQZWVyJHtpfWBdfTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4gIHJldHVybiBzZWN0aW9ucztcbn07XG5jb25zdCBnZXRTdHlsZXMgPSAob3B0aW9ucykgPT4gYC5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBjb2xvcjogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHRleHQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCBzcGFuIHtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLmxhYmVsIHRleHQsc3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGNvbG9yOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hcnJvd2hlYWRDb2xvcn07XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC44NTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICAgIGZpbGw6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmNsdXN0ZXJCa2d9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmNsdXN0ZXJCb3JkZXJ9O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLmNsdXN0ZXIgc3BhbiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAvKiAuY2x1c3RlciBkaXYge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH0gKi9cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogJHtvcHRpb25zLnRlcnRpYXJ5Q29sb3J9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7b3B0aW9ucy5ib3JkZXIyfTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLmZsb3djaGFydFRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cbiAgLnN1YmdyYXBoIHtcbiAgICBzdHJva2Utd2lkdGg6MjtcbiAgICByeDozO1xuICB9XG4gIC8vIC5zdWJncmFwaC1sdmwtMSB7XG4gIC8vICAgZmlsbDojY2NjO1xuICAvLyAgIC8vIHN0cm9rZTpibGFjaztcbiAgLy8gfVxuXG4gIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgfVxuXG4gICR7Z2VuU2VjdGlvbnMob3B0aW9ucyl9XG5gO1xuY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgZGIsXG4gIHJlbmRlcmVyLFxuICBwYXJzZXIsXG4gIHN0eWxlc1xufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/flowchart-elk-definition-5082a990.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/ganttDiagram-7ce12d6b.js": /*!*******************************************************************!*\ !*** ../../../node_modules/mermaid/dist/ganttDiagram-7ce12d6b.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs/plugin/isoWeek.js */ \"../../../node_modules/dayjs/plugin/isoWeek.js\");\n/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs/plugin/customParseFormat.js */ \"../../../node_modules/dayjs/plugin/customParseFormat.js\");\n/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs/plugin/advancedFormat.js */ \"../../../node_modules/dayjs/plugin/advancedFormat.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 21], $Va = [1, 22], $Vb = [1, 23], $Vc = [1, 24], $Vd = [1, 25], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 29], $Vh = [1, 31], $Vi = [1, 34], $Vj = [5, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"directive\": 4, \"gantt\": 5, \"document\": 6, \"EOF\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NL\": 11, \"dateFormat\": 12, \"inclusiveEndDates\": 13, \"topAxis\": 14, \"axisFormat\": 15, \"tickInterval\": 16, \"excludes\": 17, \"includes\": 18, \"todayMarker\": 19, \"title\": 20, \"acc_title\": 21, \"acc_title_value\": 22, \"acc_descr\": 23, \"acc_descr_value\": 24, \"acc_descr_multiline_value\": 25, \"section\": 26, \"clickStatement\": 27, \"taskTxt\": 28, \"taskData\": 29, \"openDirective\": 30, \"typeDirective\": 31, \"closeDirective\": 32, \":\": 33, \"argDirective\": 34, \"click\": 35, \"callbackname\": 36, \"callbackargs\": 37, \"href\": 38, \"clickStatementDebug\": 39, \"open_directive\": 40, \"type_directive\": 41, \"arg_directive\": 42, \"close_directive\": 43, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"gantt\", 7: \"EOF\", 9: \"SPACE\", 11: \"NL\", 12: \"dateFormat\", 13: \"inclusiveEndDates\", 14: \"topAxis\", 15: \"axisFormat\", 16: \"tickInterval\", 17: \"excludes\", 18: \"includes\", 19: \"todayMarker\", 20: \"title\", 21: \"acc_title\", 22: \"acc_title_value\", 23: \"acc_descr\", 24: \"acc_descr_value\", 25: \"acc_descr_multiline_value\", 26: \"section\", 28: \"taskTxt\", 29: \"taskData\", 33: \":\", 35: \"click\", 36: \"callbackname\", 37: \"callbackargs\", 38: \"href\", 40: \"open_directive\", 41: \"type_directive\", 42: \"arg_directive\", 43: \"close_directive\" },\n productions_: [0, [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [8, 1], [8, 1], [8, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 1], [4, 4], [4, 6], [27, 2], [27, 3], [27, 3], [27, 4], [27, 3], [27, 4], [27, 2], [39, 2], [39, 3], [39, 3], [39, 4], [39, 3], [39, 4], [39, 2], [30, 1], [31, 1], [34, 1], [32, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 2:\n return $$[$0 - 1];\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 9:\n yy.setDateFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 10:\n yy.enableInclusiveEndDates();\n this.$ = $$[$0].substr(18);\n break;\n case 11:\n yy.TopAxis();\n this.$ = $$[$0].substr(8);\n break;\n case 12:\n yy.setAxisFormat($$[$0].substr(11));\n this.$ = $$[$0].substr(11);\n break;\n case 13:\n yy.setTickInterval($$[$0].substr(13));\n this.$ = $$[$0].substr(13);\n break;\n case 14:\n yy.setExcludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 15:\n yy.setIncludes($$[$0].substr(9));\n this.$ = $$[$0].substr(9);\n break;\n case 16:\n yy.setTodayMarker($$[$0].substr(12));\n this.$ = $$[$0].substr(12);\n break;\n case 17:\n yy.setDiagramTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n case 18:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 19:\n case 20:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 21:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 23:\n yy.addTask($$[$0 - 1], $$[$0]);\n this.$ = \"task\";\n break;\n case 27:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0], null);\n break;\n case 28:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 29:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null);\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 30:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setLink($$[$0 - 3], $$[$0]);\n break;\n case 31:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0], null);\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n break;\n case 32:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]);\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n break;\n case 33:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 34:\n case 40:\n this.$ = $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 35:\n case 36:\n case 38:\n this.$ = $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 37:\n case 39:\n this.$ = $$[$0 - 3] + \" \" + $$[$0 - 2] + \" \" + $$[$0 - 1] + \" \" + $$[$0];\n break;\n case 41:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 42:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 43:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 44:\n yy.parseDirective(\"}%%\", \"close_directive\", \"gantt\");\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: $V0, 30: 4, 40: $V1 }, { 1: [3] }, { 3: 6, 4: 2, 5: $V0, 30: 4, 40: $V1 }, o($V2, [2, 3], { 6: 7 }), { 31: 8, 41: [1, 9] }, { 41: [2, 41] }, { 1: [2, 1] }, { 4: 30, 7: [1, 10], 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, { 32: 32, 33: [1, 33], 43: $Vi }, o([33, 43], [2, 42]), o($V2, [2, 8], { 1: [2, 2] }), o($V2, [2, 4]), { 4: 30, 10: 35, 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 9]), o($V2, [2, 10]), o($V2, [2, 11]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), { 22: [1, 36] }, { 24: [1, 37] }, o($V2, [2, 20]), o($V2, [2, 21]), o($V2, [2, 22]), { 29: [1, 38] }, o($V2, [2, 24]), { 36: [1, 39], 38: [1, 40] }, { 11: [1, 41] }, { 34: 42, 42: [1, 43] }, { 11: [2, 44] }, o($V2, [2, 5]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 23]), o($V2, [2, 27], { 37: [1, 44], 38: [1, 45] }), o($V2, [2, 33], { 36: [1, 46] }), o($Vj, [2, 25]), { 32: 47, 43: $Vi }, { 43: [2, 43] }, o($V2, [2, 28], { 38: [1, 48] }), o($V2, [2, 29]), o($V2, [2, 31], { 37: [1, 49] }), { 11: [1, 50] }, o($V2, [2, 30]), o($V2, [2, 32]), o($Vj, [2, 26])],\n defaultActions: { 5: [2, 41], 6: [2, 1], 34: [2, 44], 43: [2, 43] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 40;\n case 1:\n this.begin(\"type_directive\");\n return 41;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 33;\n case 3:\n this.popState();\n this.popState();\n return 43;\n case 4:\n return 42;\n case 5:\n this.begin(\"acc_title\");\n return 21;\n case 6:\n this.popState();\n return \"acc_title_value\";\n case 7:\n this.begin(\"acc_descr\");\n return 23;\n case 8:\n this.popState();\n return \"acc_descr_value\";\n case 9:\n this.begin(\"acc_descr_multiline\");\n break;\n case 10:\n this.popState();\n break;\n case 11:\n return \"acc_descr_multiline_value\";\n case 12:\n break;\n case 13:\n break;\n case 14:\n break;\n case 15:\n return 11;\n case 16:\n break;\n case 17:\n break;\n case 18:\n break;\n case 19:\n this.begin(\"href\");\n break;\n case 20:\n this.popState();\n break;\n case 21:\n return 38;\n case 22:\n this.begin(\"callbackname\");\n break;\n case 23:\n this.popState();\n break;\n case 24:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 25:\n return 36;\n case 26:\n this.popState();\n break;\n case 27:\n return 37;\n case 28:\n this.begin(\"click\");\n break;\n case 29:\n this.popState();\n break;\n case 30:\n return 35;\n case 31:\n return 5;\n case 32:\n return 12;\n case 33:\n return 13;\n case 34:\n return 14;\n case 35:\n return 15;\n case 36:\n return 16;\n case 37:\n return 18;\n case 38:\n return 17;\n case 39:\n return 19;\n case 40:\n return \"date\";\n case 41:\n return 20;\n case 42:\n return \"accDescription\";\n case 43:\n return 26;\n case 44:\n return 28;\n case 45:\n return 29;\n case 46:\n return 33;\n case 47:\n return 7;\n case 48:\n return \"INVALID\";\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:%%(?!\\{)*[^\\n]*)/i, /^(?:[^\\}]%%*[^\\n]*)/i, /^(?:%%*[^\\n]*[\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:href[\\s]+[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:call[\\s]+)/i, /^(?:\\([\\s]*\\))/i, /^(?:\\()/i, /^(?:[^(]*)/i, /^(?:\\))/i, /^(?:[^)]*)/i, /^(?:click[\\s]+)/i, /^(?:[\\s\\n])/i, /^(?:[^\\s\\n]*)/i, /^(?:gantt\\b)/i, /^(?:dateFormat\\s[^#\\n;]+)/i, /^(?:inclusiveEndDates\\b)/i, /^(?:topAxis\\b)/i, /^(?:axisFormat\\s[^#\\n;]+)/i, /^(?:tickInterval\\s[^#\\n;]+)/i, /^(?:includes\\s[^#\\n;]+)/i, /^(?:excludes\\s[^#\\n;]+)/i, /^(?:todayMarker\\s[^\\n;]+)/i, /^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:accDescription\\s[^#\\n;]+)/i, /^(?:section\\s[^#:\\n;]+)/i, /^(?:[^#:\\n;]+)/i, /^(?::[^#\\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [10, 11], \"inclusive\": false }, \"acc_descr\": { \"rules\": [8], \"inclusive\": false }, \"acc_title\": { \"rules\": [6], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"callbackargs\": { \"rules\": [26, 27], \"inclusive\": false }, \"callbackname\": { \"rules\": [23, 24, 25], \"inclusive\": false }, \"href\": { \"rules\": [20, 21], \"inclusive\": false }, \"click\": { \"rules\": [29, 30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 22, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst ganttParser = parser;\ndayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__);\ndayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__);\ndayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__);\nlet dateFormat = \"\";\nlet axisFormat = \"\";\nlet tickInterval = void 0;\nlet todayMarker = \"\";\nlet includes = [];\nlet excludes = [];\nlet links = {};\nlet sections = [];\nlet tasks = [];\nlet currentSection = \"\";\nlet displayMode = \"\";\nconst tags = [\"active\", \"done\", \"crit\", \"milestone\"];\nlet funs = [];\nlet inclusiveEndDates = false;\nlet topAxis = false;\nlet lastOrder = 0;\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.m.parseDirective(this, statement, context, type);\n};\nconst clear = function() {\n sections = [];\n tasks = [];\n currentSection = \"\";\n funs = [];\n taskCnt = 0;\n lastTask = void 0;\n lastTaskID = void 0;\n rawTasks = [];\n dateFormat = \"\";\n axisFormat = \"\";\n displayMode = \"\";\n tickInterval = void 0;\n todayMarker = \"\";\n includes = [];\n excludes = [];\n inclusiveEndDates = false;\n topAxis = false;\n lastOrder = 0;\n links = {};\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.v)();\n};\nconst setAxisFormat = function(txt) {\n axisFormat = txt;\n};\nconst getAxisFormat = function() {\n return axisFormat;\n};\nconst setTickInterval = function(txt) {\n tickInterval = txt;\n};\nconst getTickInterval = function() {\n return tickInterval;\n};\nconst setTodayMarker = function(txt) {\n todayMarker = txt;\n};\nconst getTodayMarker = function() {\n return todayMarker;\n};\nconst setDateFormat = function(txt) {\n dateFormat = txt;\n};\nconst enableInclusiveEndDates = function() {\n inclusiveEndDates = true;\n};\nconst endDatesAreInclusive = function() {\n return inclusiveEndDates;\n};\nconst enableTopAxis = function() {\n topAxis = true;\n};\nconst topAxisEnabled = function() {\n return topAxis;\n};\nconst setDisplayMode = function(txt) {\n displayMode = txt;\n};\nconst getDisplayMode = function() {\n return displayMode;\n};\nconst getDateFormat = function() {\n return dateFormat;\n};\nconst setIncludes = function(txt) {\n includes = txt.toLowerCase().split(/[\\s,]+/);\n};\nconst getIncludes = function() {\n return includes;\n};\nconst setExcludes = function(txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/);\n};\nconst getExcludes = function() {\n return excludes;\n};\nconst getLinks = function() {\n return links;\n};\nconst addSection = function(txt) {\n currentSection = txt;\n sections.push(txt);\n};\nconst getSections = function() {\n return sections;\n};\nconst getTasks = function() {\n let allItemsProcessed = compileTasks();\n const maxDepth = 10;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n tasks = rawTasks;\n return tasks;\n};\nconst isInvalidDate = function(date, dateFormat2, excludes2, includes2) {\n if (includes2.includes(date.format(dateFormat2.trim()))) {\n return false;\n }\n if (date.isoWeekday() >= 6 && excludes2.includes(\"weekends\")) {\n return true;\n }\n if (excludes2.includes(date.format(\"dddd\").toLowerCase())) {\n return true;\n }\n return excludes2.includes(date.format(dateFormat2.trim()));\n};\nconst checkTaskDates = function(task, dateFormat2, excludes2, includes2) {\n if (!excludes2.length || task.manualEndTime) {\n return;\n }\n let startTime;\n if (task.startTime instanceof Date) {\n startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime);\n } else {\n startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true);\n }\n startTime = startTime.add(1, \"d\");\n let originalEndTime;\n if (task.endTime instanceof Date) {\n originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime);\n } else {\n originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true);\n }\n const [fixedEndTime, renderEndTime] = fixTaskDates(\n startTime,\n originalEndTime,\n dateFormat2,\n excludes2,\n includes2\n );\n task.endTime = fixedEndTime.toDate();\n task.renderEndTime = renderEndTime;\n};\nconst fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) {\n let invalid = false;\n let renderEndTime = null;\n while (startTime <= endTime) {\n if (!invalid) {\n renderEndTime = endTime.toDate();\n }\n invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2);\n if (invalid) {\n endTime = endTime.add(1, \"d\");\n }\n startTime = startTime.add(1, \"d\");\n }\n return [endTime, renderEndTime];\n};\nconst getStartDate = function(prevTime, dateFormat2, str) {\n str = str.trim();\n const re = /^after\\s+([\\d\\w- ]+)/;\n const afterStatement = re.exec(str.trim());\n if (afterStatement !== null) {\n let latestEndingTask = null;\n afterStatement[1].split(\" \").forEach(function(id) {\n let task = findTaskById(id);\n if (task !== void 0) {\n if (!latestEndingTask) {\n latestEndingTask = task;\n } else {\n if (task.endTime > latestEndingTask.endTime) {\n latestEndingTask = task;\n }\n }\n }\n });\n if (!latestEndingTask) {\n const dt = /* @__PURE__ */ new Date();\n dt.setHours(0, 0, 0, 0);\n return dt;\n } else {\n return latestEndingTask.endTime;\n }\n }\n let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true);\n if (mDate.isValid()) {\n return mDate.toDate();\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(\"Invalid date:\" + str);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(\"With date format:\" + dateFormat2.trim());\n const d = new Date(str);\n if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously\n // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304.\n // This can cause virtually infinite loops while rendering, so for the\n // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as\n // invalid.\n d.getFullYear() < -1e4 || d.getFullYear() > 1e4) {\n throw new Error(\"Invalid date:\" + str);\n }\n return d;\n }\n};\nconst parseDuration = function(str) {\n const statement = /^(\\d+(?:\\.\\d+)?)([Mdhmswy]|ms)$/.exec(str.trim());\n if (statement !== null) {\n return [Number.parseFloat(statement[1]), statement[2]];\n }\n return [NaN, \"ms\"];\n};\nconst getEndDate = function(prevTime, dateFormat2, str, inclusive = false) {\n str = str.trim();\n let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true);\n if (mDate.isValid()) {\n if (inclusive) {\n mDate = mDate.add(1, \"d\");\n }\n return mDate.toDate();\n }\n let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime);\n const [durationValue, durationUnit] = parseDuration(str);\n if (!Number.isNaN(durationValue)) {\n const newEndTime = endTime.add(durationValue, durationUnit);\n if (newEndTime.isValid()) {\n endTime = newEndTime;\n }\n }\n return endTime.toDate();\n};\nlet taskCnt = 0;\nconst parseId = function(idStr) {\n if (idStr === void 0) {\n taskCnt = taskCnt + 1;\n return \"task\" + taskCnt;\n }\n return idStr;\n};\nconst compileData = function(prevTask, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n let endTimeData = \"\";\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = prevTask.endTime;\n endTimeData = data[0];\n break;\n case 2:\n task.id = parseId();\n task.startTime = getStartDate(void 0, dateFormat, data[0]);\n endTimeData = data[1];\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = getStartDate(void 0, dateFormat, data[1]);\n endTimeData = data[2];\n break;\n }\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, \"YYYY-MM-DD\", true).isValid();\n checkTaskDates(task, dateFormat, excludes, includes);\n }\n return task;\n};\nconst parseData = function(prevTaskId, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === \":\") {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n const data = ds.split(\",\");\n const task = {};\n getTaskTags(data, task, tags);\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = {\n type: \"prevTaskEnd\",\n id: prevTaskId\n };\n task.endTime = {\n data: data[0]\n };\n break;\n case 2:\n task.id = parseId();\n task.startTime = {\n type: \"getStartDate\",\n startData: data[0]\n };\n task.endTime = {\n data: data[1]\n };\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = {\n type: \"getStartDate\",\n startData: data[1]\n };\n task.endTime = {\n data: data[2]\n };\n break;\n }\n return task;\n};\nlet lastTask;\nlet lastTaskID;\nlet rawTasks = [];\nconst taskDb = {};\nconst addTask = function(descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data },\n task: descr,\n classes: []\n };\n const taskInfo = parseData(lastTaskID, data);\n rawTask.raw.startTime = taskInfo.startTime;\n rawTask.raw.endTime = taskInfo.endTime;\n rawTask.id = taskInfo.id;\n rawTask.prevTaskId = lastTaskID;\n rawTask.active = taskInfo.active;\n rawTask.done = taskInfo.done;\n rawTask.crit = taskInfo.crit;\n rawTask.milestone = taskInfo.milestone;\n rawTask.order = lastOrder;\n lastOrder++;\n const pos = rawTasks.push(rawTask);\n lastTaskID = rawTask.id;\n taskDb[rawTask.id] = pos - 1;\n};\nconst findTaskById = function(id) {\n const pos = taskDb[id];\n return rawTasks[pos];\n};\nconst addTaskOrg = function(descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n const taskInfo = compileData(lastTask, data);\n newTask.startTime = taskInfo.startTime;\n newTask.endTime = taskInfo.endTime;\n newTask.id = taskInfo.id;\n newTask.active = taskInfo.active;\n newTask.done = taskInfo.done;\n newTask.crit = taskInfo.crit;\n newTask.milestone = taskInfo.milestone;\n lastTask = newTask;\n tasks.push(newTask);\n};\nconst compileTasks = function() {\n const compileTask = function(pos) {\n const task = rawTasks[pos];\n let startTime = \"\";\n switch (rawTasks[pos].raw.startTime.type) {\n case \"prevTaskEnd\": {\n const prevTask = findTaskById(task.prevTaskId);\n task.startTime = prevTask.endTime;\n break;\n }\n case \"getStartDate\":\n startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData);\n if (startTime) {\n rawTasks[pos].startTime = startTime;\n }\n break;\n }\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(\n rawTasks[pos].startTime,\n dateFormat,\n rawTasks[pos].raw.endTime.data,\n inclusiveEndDates\n );\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true;\n rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(\n rawTasks[pos].raw.endTime.data,\n \"YYYY-MM-DD\",\n true\n ).isValid();\n checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n }\n }\n return rawTasks[pos].processed;\n };\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\nconst setLink = function(ids, _linkStr) {\n let linkStr = _linkStr;\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().securityLevel !== \"loose\") {\n linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__.sanitizeUrl)(_linkStr);\n }\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n window.open(linkStr, \"_self\");\n });\n links[id] = linkStr;\n }\n });\n setClass(ids, \"clickable\");\n};\nconst setClass = function(ids, className) {\n ids.split(\",\").forEach(function(id) {\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n rawTask.classes.push(className);\n }\n });\n};\nconst setClickFun = function(id, functionName, functionArgs) {\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n let rawTask = findTaskById(id);\n if (rawTask !== void 0) {\n pushFun(id, () => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.u.runFunc(functionName, ...argList);\n });\n }\n};\nconst pushFun = function(id, callbackFunction) {\n funs.push(\n function() {\n const elem = document.querySelector(`[id=\"${id}\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n },\n function() {\n const elem = document.querySelector(`[id=\"${id}-text\"]`);\n if (elem !== null) {\n elem.addEventListener(\"click\", function() {\n callbackFunction();\n });\n }\n }\n );\n};\nconst setClickEvent = function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, \"clickable\");\n};\nconst bindFunctions = function(element) {\n funs.forEach(function(fun) {\n fun(element);\n });\n};\nconst ganttDb = {\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().gantt,\n clear,\n setDateFormat,\n getDateFormat,\n enableInclusiveEndDates,\n endDatesAreInclusive,\n enableTopAxis,\n topAxisEnabled,\n setAxisFormat,\n getAxisFormat,\n setTickInterval,\n getTickInterval,\n setTodayMarker,\n getTodayMarker,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.g,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.t,\n setDisplayMode,\n getDisplayMode,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.b,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.a,\n addSection,\n getSections,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setIncludes,\n getIncludes,\n setExcludes,\n getExcludes,\n setClickEvent,\n setLink,\n getLinks,\n bindFunctions,\n parseDuration,\n isInvalidDate\n};\nfunction getTaskTags(data, task, tags2) {\n let matchFound = true;\n while (matchFound) {\n matchFound = false;\n tags2.forEach(function(t) {\n const pattern = \"^\\\\s*\" + t + \"\\\\s*$\";\n const regex = new RegExp(pattern);\n if (data[0].match(regex)) {\n task[t] = true;\n data.shift(1);\n matchFound = true;\n }\n });\n }\n}\nconst setConf = function() {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(\"Something is calling, setConf, remove the call\");\n};\nconst getMaxIntersections = (tasks2, orderOffset) => {\n let timeline = [...tasks2].map(() => -Infinity);\n let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order);\n let maxIntersections = 0;\n for (const element of sorted) {\n for (let j = 0; j < timeline.length; j++) {\n if (element.startTime >= timeline[j]) {\n timeline[j] = element.endTime;\n element.order = j + orderOffset;\n if (j > maxIntersections) {\n maxIntersections = j;\n }\n break;\n }\n }\n }\n return maxIntersections;\n};\nlet w;\nconst draw = function(text, id, version, diagObj) {\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().gantt;\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const elem = doc.getElementById(id);\n w = elem.parentElement.offsetWidth;\n if (w === void 0) {\n w = 1200;\n }\n if (conf.useWidth !== void 0) {\n w = conf.useWidth;\n }\n const taskArray = diagObj.db.getTasks();\n let categories = [];\n for (const element of taskArray) {\n categories.push(element.type);\n }\n categories = checkUnique(categories);\n const categoryHeights = {};\n let h = 2 * conf.topPadding;\n if (diagObj.db.getDisplayMode() === \"compact\" || conf.displayMode === \"compact\") {\n const categoryElements = {};\n for (const element of taskArray) {\n if (categoryElements[element.section] === void 0) {\n categoryElements[element.section] = [element];\n } else {\n categoryElements[element.section].push(element);\n }\n }\n let intersections = 0;\n for (const category of Object.keys(categoryElements)) {\n const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1;\n intersections += categoryHeight;\n h += categoryHeight * (conf.barHeight + conf.barGap);\n categoryHeights[category] = categoryHeight;\n }\n } else {\n h += taskArray.length * (conf.barHeight + conf.barGap);\n for (const category of categories) {\n categoryHeights[category] = taskArray.filter((task) => task.type === category).length;\n }\n }\n elem.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n const svg = root.select(`[id=\"${id}\"]`);\n const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__.scaleTime)().domain([\n (0,d3__WEBPACK_IMPORTED_MODULE_5__.min)(taskArray, function(d) {\n return d.startTime;\n }),\n (0,d3__WEBPACK_IMPORTED_MODULE_5__.max)(taskArray, function(d) {\n return d.endTime;\n })\n ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n function taskCompare(a, b) {\n const taskA = a.startTime;\n const taskB = b.startTime;\n let result = 0;\n if (taskA > taskB) {\n result = 1;\n } else if (taskA < taskB) {\n result = -1;\n }\n return result;\n }\n taskArray.sort(taskCompare);\n makeGant(taskArray, w, h);\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, h, w, conf.useMaxWidth);\n svg.append(\"text\").text(diagObj.db.getDiagramTitle()).attr(\"x\", w / 2).attr(\"y\", conf.titleTopMargin).attr(\"class\", \"titleText\");\n function makeGant(tasks2, pageWidth, pageHeight) {\n const barHeight = conf.barHeight;\n const gap = barHeight + conf.barGap;\n const topPadding = conf.topPadding;\n const leftPadding = conf.leftPadding;\n const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__.scaleLinear)().domain([0, categories.length]).range([\"#00B9FA\", \"#F95002\"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__.interpolateHcl);\n drawExcludeDays(\n gap,\n topPadding,\n leftPadding,\n pageWidth,\n pageHeight,\n tasks2,\n diagObj.db.getExcludes(),\n diagObj.db.getIncludes()\n );\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth);\n vertLabels(gap, topPadding);\n drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n }\n function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) {\n const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))];\n const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2));\n svg.append(\"g\").selectAll(\"rect\").data(uniqueTasks).enter().append(\"rect\").attr(\"x\", 0).attr(\"y\", function(d, i) {\n i = d.order;\n return i * theGap + theTopPad - 2;\n }).attr(\"width\", function() {\n return w2 - conf.rightPadding / 2;\n }).attr(\"height\", theGap).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n return \"section section\" + i % conf.numberSectionStyles;\n }\n }\n return \"section section0\";\n });\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(theArray).enter();\n const links2 = diagObj.db.getLinks();\n rectangles.append(\"rect\").attr(\"id\", function(d) {\n return d.id;\n }).attr(\"rx\", 3).attr(\"ry\", 3).attr(\"x\", function(d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n }\n return timeScale(d.startTime) + theSidePad;\n }).attr(\"y\", function(d, i) {\n i = d.order;\n return i * theGap + theTopPad;\n }).attr(\"width\", function(d) {\n if (d.milestone) {\n return theBarHeight;\n }\n return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n }).attr(\"height\", theBarHeight).attr(\"transform-origin\", function(d, i) {\n i = d.order;\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + \"px \" + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + \"px\";\n }).attr(\"class\", function(d) {\n const res = \"task\";\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskClass = \"\";\n if (d.active) {\n if (d.crit) {\n taskClass += \" activeCrit\";\n } else {\n taskClass = \" active\";\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = \" doneCrit\";\n } else {\n taskClass = \" done\";\n }\n } else {\n if (d.crit) {\n taskClass += \" crit\";\n }\n }\n if (taskClass.length === 0) {\n taskClass = \" task\";\n }\n if (d.milestone) {\n taskClass = \" milestone \" + taskClass;\n }\n taskClass += secNum;\n taskClass += \" \" + classStr;\n return res + taskClass;\n });\n rectangles.append(\"text\").attr(\"id\", function(d) {\n return d.id + \"-text\";\n }).text(function(d) {\n return d.task;\n }).attr(\"font-size\", conf.fontSize).attr(\"x\", function(d) {\n let startX = timeScale(d.startTime);\n let endX = timeScale(d.renderEndTime || d.endTime);\n if (d.milestone) {\n startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n }\n if (d.milestone) {\n endX = startX + theBarHeight;\n }\n const textWidth = this.getBBox().width;\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return startX + theSidePad - 5;\n } else {\n return endX + theSidePad + 5;\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad;\n }\n }).attr(\"y\", function(d, i) {\n i = d.order;\n return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n }).attr(\"text-height\", theBarHeight).attr(\"class\", function(d) {\n const startX = timeScale(d.startTime);\n let endX = timeScale(d.endTime);\n if (d.milestone) {\n endX = startX + theBarHeight;\n }\n const textWidth = this.getBBox().width;\n let classStr = \"\";\n if (d.classes.length > 0) {\n classStr = d.classes.join(\" \");\n }\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n let taskType = \"\";\n if (d.active) {\n if (d.crit) {\n taskType = \"activeCritText\" + secNum;\n } else {\n taskType = \"activeText\" + secNum;\n }\n }\n if (d.done) {\n if (d.crit) {\n taskType = taskType + \" doneCritText\" + secNum;\n } else {\n taskType = taskType + \" doneText\" + secNum;\n }\n } else {\n if (d.crit) {\n taskType = taskType + \" critText\" + secNum;\n }\n }\n if (d.milestone) {\n taskType += \" milestoneText\";\n }\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w2) {\n return classStr + \" taskTextOutsideLeft taskTextOutside\" + secNum + \" \" + taskType;\n } else {\n return classStr + \" taskTextOutsideRight taskTextOutside\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n } else {\n return classStr + \" taskText taskText\" + secNum + \" \" + taskType + \" width-\" + textWidth;\n }\n });\n const securityLevel2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)().securityLevel;\n if (securityLevel2 === \"sandbox\") {\n let sandboxElement2;\n sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__.select)(\"#i\" + id);\n const doc2 = sandboxElement2.nodes()[0].contentDocument;\n rectangles.filter(function(d) {\n return links2[d.id] !== void 0;\n }).each(function(o) {\n var taskRect = doc2.querySelector(\"#\" + o.id);\n var taskText = doc2.querySelector(\"#\" + o.id + \"-text\");\n const oldParent = taskRect.parentNode;\n var Link = doc2.createElement(\"a\");\n Link.setAttribute(\"xlink:href\", links2[o.id]);\n Link.setAttribute(\"target\", \"_top\");\n oldParent.appendChild(Link);\n Link.appendChild(taskRect);\n Link.appendChild(taskText);\n });\n }\n }\n function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) {\n const minTime = tasks2.reduce(\n (min2, { startTime }) => min2 ? Math.min(min2, startTime) : startTime,\n 0\n );\n const maxTime = tasks2.reduce((max2, { endTime }) => max2 ? Math.max(max2, endTime) : endTime, 0);\n const dateFormat2 = diagObj.db.getDateFormat();\n if (!minTime || !maxTime) {\n return;\n }\n const excludeRanges = [];\n let range = null;\n let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime);\n while (d.valueOf() <= maxTime) {\n if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) {\n if (!range) {\n range = {\n start: d,\n end: d\n };\n } else {\n range.end = d;\n }\n } else {\n if (range) {\n excludeRanges.push(range);\n range = null;\n }\n }\n d = d.add(1, \"d\");\n }\n const rectangles = svg.append(\"g\").selectAll(\"rect\").data(excludeRanges).enter();\n rectangles.append(\"rect\").attr(\"id\", function(d2) {\n return \"exclude-\" + d2.start.format(\"YYYY-MM-DD\");\n }).attr(\"x\", function(d2) {\n return timeScale(d2.start) + theSidePad;\n }).attr(\"y\", conf.gridLineStartPadding).attr(\"width\", function(d2) {\n const renderEnd = d2.end.add(1, \"day\");\n return timeScale(renderEnd) - timeScale(d2.start);\n }).attr(\"height\", h2 - theTopPad - conf.gridLineStartPadding).attr(\"transform-origin\", function(d2, i) {\n return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + \"px \" + (i * theGap + 0.5 * h2).toString() + \"px\";\n }).attr(\"class\", \"exclude-range\");\n }\n function makeGrid(theSidePad, theTopPad, w2, h2) {\n let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__.axisBottom)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__.timeFormat)(diagObj.db.getAxisFormat() || conf.axisFormat || \"%Y-%m-%d\"));\n const reTickInterval = /^([1-9]\\d*)(minute|hour|day|week|month)$/;\n const resultTickInterval = reTickInterval.exec(\n diagObj.db.getTickInterval() || conf.tickInterval\n );\n if (resultTickInterval !== null) {\n const every = resultTickInterval[1];\n const interval = resultTickInterval[2];\n switch (interval) {\n case \"minute\":\n bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeMinute.every(every));\n break;\n case \"hour\":\n bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeHour.every(every));\n break;\n case \"day\":\n bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeDay.every(every));\n break;\n case \"week\":\n bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeWeek.every(every));\n break;\n case \"month\":\n bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeMonth.every(every));\n break;\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + (h2 - 50) + \")\").call(bottomXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10).attr(\"dy\", \"1em\");\n if (diagObj.db.topAxisEnabled() || conf.topAxis) {\n let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__.axisTop)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__.timeFormat)(diagObj.db.getAxisFormat() || conf.axisFormat || \"%Y-%m-%d\"));\n if (resultTickInterval !== null) {\n const every = resultTickInterval[1];\n const interval = resultTickInterval[2];\n switch (interval) {\n case \"minute\":\n topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeMinute.every(every));\n break;\n case \"hour\":\n topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeHour.every(every));\n break;\n case \"day\":\n topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeDay.every(every));\n break;\n case \"week\":\n topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeWeek.every(every));\n break;\n case \"month\":\n topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__.timeMonth.every(every));\n break;\n }\n }\n svg.append(\"g\").attr(\"class\", \"grid\").attr(\"transform\", \"translate(\" + theSidePad + \", \" + theTopPad + \")\").call(topXAxis).selectAll(\"text\").style(\"text-anchor\", \"middle\").attr(\"fill\", \"#000\").attr(\"stroke\", \"none\").attr(\"font-size\", 10);\n }\n }\n function vertLabels(theGap, theTopPad) {\n let prevGap = 0;\n const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]);\n svg.append(\"g\").selectAll(\"text\").data(numOccurances).enter().append(function(d) {\n const rows = d[0].split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.lineBreakRegex);\n const dy = -(rows.length - 1) / 2;\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"dy\", dy + \"em\");\n for (const [j, row] of rows.entries()) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttribute(\"alignment-baseline\", \"central\");\n tspan.setAttribute(\"x\", \"10\");\n if (j > 0) {\n tspan.setAttribute(\"dy\", \"1em\");\n }\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }).attr(\"x\", 10).attr(\"y\", function(d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurances[i - 1][1];\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad;\n }\n } else {\n return d[1] * theGap / 2 + theTopPad;\n }\n }).attr(\"font-size\", conf.sectionFontSize).attr(\"class\", function(d) {\n for (const [i, category] of categories.entries()) {\n if (d[0] === category) {\n return \"sectionTitle sectionTitle\" + i % conf.numberSectionStyles;\n }\n }\n return \"sectionTitle\";\n });\n }\n function drawToday(theSidePad, theTopPad, w2, h2) {\n const todayMarker2 = diagObj.db.getTodayMarker();\n if (todayMarker2 === \"off\") {\n return;\n }\n const todayG = svg.append(\"g\").attr(\"class\", \"today\");\n const today = /* @__PURE__ */ new Date();\n const todayLine = todayG.append(\"line\");\n todayLine.attr(\"x1\", timeScale(today) + theSidePad).attr(\"x2\", timeScale(today) + theSidePad).attr(\"y1\", conf.titleTopMargin).attr(\"y2\", h2 - conf.titleTopMargin).attr(\"class\", \"today\");\n if (todayMarker2 !== \"\") {\n todayLine.attr(\"style\", todayMarker2.replace(/,/g, \";\"));\n }\n }\n function checkUnique(arr) {\n const hash = {};\n const result = [];\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n hash[arr[i]] = true;\n result.push(arr[i]);\n }\n }\n return result;\n }\n};\nconst ganttRenderer = {\n setConf,\n draw\n};\nconst getStyles = (options) => `\n .mermaid-main-font {\n font-family: \"trebuchet ms\", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${options.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${options.sectionBkgColor};\n }\n\n .section2 {\n fill: ${options.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${options.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${options.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${options.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${options.fontFamily};\n fill: ${options.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${options.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${options.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${options.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${options.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${options.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${options.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${options.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${options.taskBkgColor};\n stroke: ${options.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${options.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${options.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${options.activeTaskBkgColor};\n stroke: ${options.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${options.doneTaskBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`;\nconst ganttStyles = getStyles;\nconst diagram = {\n parser: ganttParser,\n db: ganttDb,\n renderer: ganttRenderer,\n styles: ganttStyles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9nYW50dERpYWdyYW0tN2NlMTJkNmIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFzRDtBQUM1QjtBQUN5QjtBQUNvQjtBQUNOO0FBQytNO0FBQzdHO0FBQ2hKO0FBQ0E7QUFDSDtBQUNjO0FBQ2Q7QUFDYztBQUM5QjtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQixLQUFLO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVO0FBQ1YsZ0JBQWdCLDh2QkFBOHZCO0FBQzl3QixrQkFBa0IseWhCQUF5aEI7QUFDM2lCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLG9DQUFvQyxJQUFJLFFBQVEsSUFBSSxvQ0FBb0MsbUJBQW1CLE1BQU0sS0FBSyxtQkFBbUIsSUFBSSxhQUFhLElBQUksV0FBVyxJQUFJLDBOQUEwTixJQUFJLDhCQUE4Qix5Q0FBeUMsV0FBVyxxQkFBcUIsOEtBQThLLDRMQUE0TCxhQUFhLElBQUksYUFBYSx1REFBdUQsYUFBYSxxQkFBcUIsMEJBQTBCLElBQUksYUFBYSxJQUFJLHFCQUFxQixJQUFJLGFBQWEsdUZBQXVGLDBCQUEwQixxQkFBcUIsYUFBYSxzQkFBc0IsaUJBQWlCLElBQUksYUFBYSxvQkFBb0IsYUFBYSxzQ0FBc0MsYUFBYSxLQUFLLGFBQWE7QUFDdjJDLHNCQUFzQixpREFBaUQ7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7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O0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLDJCQUEyQix1REFBUztBQUNwQztBQUNBO0FBQ0Esd0JBQXdCLDBDQUFNO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUI7QUFDQTtBQUNBLDJDQUEy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QUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwyQkFBMkI7QUFDdkM7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDJCQUEyQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9nYW50dERpYWdyYW0tN2NlMTJkNmIuanM/NTkyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYW5pdGl6ZVVybCB9IGZyb20gXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGRheWpzSXNvV2VlayBmcm9tIFwiZGF5anMvcGx1Z2luL2lzb1dlZWsuanNcIjtcbmltcG9ydCBkYXlqc0N1c3RvbVBhcnNlRm9ybWF0IGZyb20gXCJkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQuanNcIjtcbmltcG9ydCBkYXlqc0FkdmFuY2VkRm9ybWF0IGZyb20gXCJkYXlqcy9wbHVnaW4vYWR2YW5jZWRGb3JtYXQuanNcIjtcbmltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIGIgYXMgc2V0QWNjRGVzY3JpcHRpb24sIGEgYXMgZ2V0QWNjRGVzY3JpcHRpb24sIG0gYXMgbWVybWFpZEFQSSwgdiBhcyBjbGVhciQxLCB1IGFzIHV0aWxzLCBsIGFzIGxvZywgaSBhcyBjb25maWd1cmVTdmdTaXplLCBlIGFzIGNvbW1vbiB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbmltcG9ydCB7IHNlbGVjdCwgc2NhbGVUaW1lLCBtaW4sIG1heCwgc2NhbGVMaW5lYXIsIGludGVycG9sYXRlSGNsLCBheGlzQm90dG9tLCB0aW1lRm9ybWF0LCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgYXhpc1RvcCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IFwidHMtZGVkZW50XCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCAzXSwgJFYxID0gWzEsIDVdLCAkVjIgPSBbNywgOSwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMywgMjUsIDI2LCAyOCwgMzUsIDQwXSwgJFYzID0gWzEsIDE1XSwgJFY0ID0gWzEsIDE2XSwgJFY1ID0gWzEsIDE3XSwgJFY2ID0gWzEsIDE4XSwgJFY3ID0gWzEsIDE5XSwgJFY4ID0gWzEsIDIwXSwgJFY5ID0gWzEsIDIxXSwgJFZhID0gWzEsIDIyXSwgJFZiID0gWzEsIDIzXSwgJFZjID0gWzEsIDI0XSwgJFZkID0gWzEsIDI1XSwgJFZlID0gWzEsIDI2XSwgJFZmID0gWzEsIDI3XSwgJFZnID0gWzEsIDI5XSwgJFZoID0gWzEsIDMxXSwgJFZpID0gWzEsIDM0XSwgJFZqID0gWzUsIDcsIDksIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjMsIDI1LCAyNiwgMjgsIDM1LCA0MF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJkaXJlY3RpdmVcIjogNCwgXCJnYW50dFwiOiA1LCBcImRvY3VtZW50XCI6IDYsIFwiRU9GXCI6IDcsIFwibGluZVwiOiA4LCBcIlNQQUNFXCI6IDksIFwic3RhdGVtZW50XCI6IDEwLCBcIk5MXCI6IDExLCBcImRhdGVGb3JtYXRcIjogMTIsIFwiaW5jbHVzaXZlRW5kRGF0ZXNcIjogMTMsIFwidG9wQXhpc1wiOiAxNCwgXCJheGlzRm9ybWF0XCI6IDE1LCBcInRpY2tJbnRlcnZhbFwiOiAxNiwgXCJleGNsdWRlc1wiOiAxNywgXCJpbmNsdWRlc1wiOiAxOCwgXCJ0b2RheU1hcmtlclwiOiAxOSwgXCJ0aXRsZVwiOiAyMCwgXCJhY2NfdGl0bGVcIjogMjEsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDIyLCBcImFjY19kZXNjclwiOiAyMywgXCJhY2NfZGVzY3JfdmFsdWVcIjogMjQsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAyNSwgXCJzZWN0aW9uXCI6IDI2LCBcImNsaWNrU3RhdGVtZW50XCI6IDI3LCBcInRhc2tUeHRcIjogMjgsIFwidGFza0RhdGFcIjogMjksIFwib3BlbkRpcmVjdGl2ZVwiOiAzMCwgXCJ0eXBlRGlyZWN0aXZlXCI6IDMxLCBcImNsb3NlRGlyZWN0aXZlXCI6IDMyLCBcIjpcIjogMzMsIFwiYXJnRGlyZWN0aXZlXCI6IDM0LCBcImNsaWNrXCI6IDM1LCBcImNhbGxiYWNrbmFtZVwiOiAzNiwgXCJjYWxsYmFja2FyZ3NcIjogMzcsIFwiaHJlZlwiOiAzOCwgXCJjbGlja1N0YXRlbWVudERlYnVnXCI6IDM5LCBcIm9wZW5fZGlyZWN0aXZlXCI6IDQwLCBcInR5cGVfZGlyZWN0aXZlXCI6IDQxLCBcImFyZ19kaXJlY3RpdmVcIjogNDIsIFwiY2xvc2VfZGlyZWN0aXZlXCI6IDQzLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNTogXCJnYW50dFwiLCA3OiBcIkVPRlwiLCA5OiBcIlNQQUNFXCIsIDExOiBcIk5MXCIsIDEyOiBcImRhdGVGb3JtYXRcIiwgMTM6IFwiaW5jbHVzaXZlRW5kRGF0ZXNcIiwgMTQ6IFwidG9wQXhpc1wiLCAxNTogXCJheGlzRm9ybWF0XCIsIDE2OiBcInRpY2tJbnRlcnZhbFwiLCAxNzogXCJleGNsdWRlc1wiLCAxODogXCJpbmNsdWRlc1wiLCAxOTogXCJ0b2RheU1hcmtlclwiLCAyMDogXCJ0aXRsZVwiLCAyMTogXCJhY2NfdGl0bGVcIiwgMjI6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDIzOiBcImFjY19kZXNjclwiLCAyNDogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMjU6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAyNjogXCJzZWN0aW9uXCIsIDI4OiBcInRhc2tUeHRcIiwgMjk6IFwidGFza0RhdGFcIiwgMzM6IFwiOlwiLCAzNTogXCJjbGlja1wiLCAzNjogXCJjYWxsYmFja25hbWVcIiwgMzc6IFwiY2FsbGJhY2thcmdzXCIsIDM4OiBcImhyZWZcIiwgNDA6IFwib3Blbl9kaXJlY3RpdmVcIiwgNDE6IFwidHlwZV9kaXJlY3RpdmVcIiwgNDI6IFwiYXJnX2RpcmVjdGl2ZVwiLCA0MzogXCJjbG9zZV9kaXJlY3RpdmVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDNdLCBbNiwgMF0sIFs2LCAyXSwgWzgsIDJdLCBbOCwgMV0sIFs4LCAxXSwgWzgsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDFdLCBbNCwgNF0sIFs0LCA2XSwgWzI3LCAyXSwgWzI3LCAzXSwgWzI3LCAzXSwgWzI3LCA0XSwgWzI3LCAzXSwgWzI3LCA0XSwgWzI3LCAyXSwgWzM5LCAyXSwgWzM5LCAzXSwgWzM5LCAzXSwgWzM5LCA0XSwgWzM5LCAzXSwgWzM5LCA0XSwgWzM5LCAyXSwgWzMwLCAxXSwgWzMxLCAxXSwgWzM0LCAxXSwgWzMyLCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB5eS5zZXREYXRlRm9ybWF0KCQkWyQwXS5zdWJzdHIoMTEpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB5eS5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LlRvcEF4aXMoKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LnNldEF4aXNGb3JtYXQoJCRbJDBdLnN1YnN0cigxMSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHl5LnNldFRpY2tJbnRlcnZhbCgkJFskMF0uc3Vic3RyKDEzKSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cigxMyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuc2V0RXhjbHVkZXMoJCRbJDBdLnN1YnN0cig5KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5zZXRJbmNsdWRlcygkJFskMF0uc3Vic3RyKDkpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LnNldFRvZGF5TWFya2VyKCQkWyQwXS5zdWJzdHIoMTIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDEyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHl5LmFkZFNlY3Rpb24oJCRbJDBdLnN1YnN0cig4KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5hZGRUYXNrKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gXCJ0YXNrXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMV0sICQkWyQwXSwgbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMF0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCIgXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXSArIFwiIFwiICsgJCRbJDAgLSAxXSArIFwiIFwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM10gKyBcIiBcIiArICQkWyQwIC0gMl0gKyBcIiBcIiArICQkWyQwIC0gMV0gKyBcIiBcIiArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIiUle1wiLCBcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJ0eXBlX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAkJFskMF0gPSAkJFskMF0udHJpbSgpLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCJ9JSVcIiwgXCJjbG9zZV9kaXJlY3RpdmVcIiwgXCJnYW50dFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAyLCA1OiAkVjAsIDMwOiA0LCA0MDogJFYxIH0sIHsgMTogWzNdIH0sIHsgMzogNiwgNDogMiwgNTogJFYwLCAzMDogNCwgNDA6ICRWMSB9LCBvKCRWMiwgWzIsIDNdLCB7IDY6IDcgfSksIHsgMzE6IDgsIDQxOiBbMSwgOV0gfSwgeyA0MTogWzIsIDQxXSB9LCB7IDE6IFsyLCAxXSB9LCB7IDQ6IDMwLCA3OiBbMSwgMTBdLCA4OiAxMSwgOTogWzEsIDEyXSwgMTA6IDEzLCAxMTogWzEsIDE0XSwgMTI6ICRWMywgMTM6ICRWNCwgMTQ6ICRWNSwgMTU6ICRWNiwgMTY6ICRWNywgMTc6ICRWOCwgMTg6ICRWOSwgMTk6ICRWYSwgMjA6ICRWYiwgMjE6ICRWYywgMjM6ICRWZCwgMjU6ICRWZSwgMjY6ICRWZiwgMjc6IDI4LCAyODogJFZnLCAzMDogNCwgMzU6ICRWaCwgNDA6ICRWMSB9LCB7IDMyOiAzMiwgMzM6IFsxLCAzM10sIDQzOiAkVmkgfSwgbyhbMzMsIDQzXSwgWzIsIDQyXSksIG8oJFYyLCBbMiwgOF0sIHsgMTogWzIsIDJdIH0pLCBvKCRWMiwgWzIsIDRdKSwgeyA0OiAzMCwgMTA6IDM1LCAxMjogJFYzLCAxMzogJFY0LCAxNDogJFY1LCAxNTogJFY2LCAxNjogJFY3LCAxNzogJFY4LCAxODogJFY5LCAxOTogJFZhLCAyMDogJFZiLCAyMTogJFZjLCAyMzogJFZkLCAyNTogJFZlLCAyNjogJFZmLCAyNzogMjgsIDI4OiAkVmcsIDMwOiA0LCAzNTogJFZoLCA0MDogJFYxIH0sIG8oJFYyLCBbMiwgNl0pLCBvKCRWMiwgWzIsIDddKSwgbygkVjIsIFsyLCA5XSksIG8oJFYyLCBbMiwgMTBdKSwgbygkVjIsIFsyLCAxMV0pLCBvKCRWMiwgWzIsIDEyXSksIG8oJFYyLCBbMiwgMTNdKSwgbygkVjIsIFsyLCAxNF0pLCBvKCRWMiwgWzIsIDE1XSksIG8oJFYyLCBbMiwgMTZdKSwgbygkVjIsIFsyLCAxN10pLCB7IDIyOiBbMSwgMzZdIH0sIHsgMjQ6IFsxLCAzN10gfSwgbygkVjIsIFsyLCAyMF0pLCBvKCRWMiwgWzIsIDIxXSksIG8oJFYyLCBbMiwgMjJdKSwgeyAyOTogWzEsIDM4XSB9LCBvKCRWMiwgWzIsIDI0XSksIHsgMzY6IFsxLCAzOV0sIDM4OiBbMSwgNDBdIH0sIHsgMTE6IFsxLCA0MV0gfSwgeyAzNDogNDIsIDQyOiBbMSwgNDNdIH0sIHsgMTE6IFsyLCA0NF0gfSwgbygkVjIsIFsyLCA1XSksIG8oJFYyLCBbMiwgMThdKSwgbygkVjIsIFsyLCAxOV0pLCBvKCRWMiwgWzIsIDIzXSksIG8oJFYyLCBbMiwgMjddLCB7IDM3OiBbMSwgNDRdLCAzODogWzEsIDQ1XSB9KSwgbygkVjIsIFsyLCAzM10sIHsgMzY6IFsxLCA0Nl0gfSksIG8oJFZqLCBbMiwgMjVdKSwgeyAzMjogNDcsIDQzOiAkVmkgfSwgeyA0MzogWzIsIDQzXSB9LCBvKCRWMiwgWzIsIDI4XSwgeyAzODogWzEsIDQ4XSB9KSwgbygkVjIsIFsyLCAyOV0pLCBvKCRWMiwgWzIsIDMxXSwgeyAzNzogWzEsIDQ5XSB9KSwgeyAxMTogWzEsIDUwXSB9LCBvKCRWMiwgWzIsIDMwXSksIG8oJFYyLCBbMiwgMzJdKSwgbygkVmosIFsyLCAyNl0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyA1OiBbMiwgNDFdLCA2OiBbMiwgMV0sIDM0OiBbMiwgNDRdLCA0MzogWzIsIDQzXSB9LFxuICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgdmFyIHN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBsZXhlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiBmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ0eXBlX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJocmVmXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja25hbWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja2FyZ3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xpY2tcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjRGVzY3JpcHRpb25cIjtcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDMzO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5WQUxJRFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86JSUoPyFcXHspKlteXFxuXSopL2ksIC9eKD86W15cXH1dJSUqW15cXG5dKikvaSwgL14oPzolJSpbXlxcbl0qW1xcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OiVbXlxcbl0qKS9pLCAvXig/OmhyZWZbXFxzXStbXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OmNhbGxbXFxzXSspL2ksIC9eKD86XFwoW1xcc10qXFwpKS9pLCAvXig/OlxcKCkvaSwgL14oPzpbXihdKikvaSwgL14oPzpcXCkpL2ksIC9eKD86W14pXSopL2ksIC9eKD86Y2xpY2tbXFxzXSspL2ksIC9eKD86W1xcc1xcbl0pL2ksIC9eKD86W15cXHNcXG5dKikvaSwgL14oPzpnYW50dFxcYikvaSwgL14oPzpkYXRlRm9ybWF0XFxzW14jXFxuO10rKS9pLCAvXig/OmluY2x1c2l2ZUVuZERhdGVzXFxiKS9pLCAvXig/OnRvcEF4aXNcXGIpL2ksIC9eKD86YXhpc0Zvcm1hdFxcc1teI1xcbjtdKykvaSwgL14oPzp0aWNrSW50ZXJ2YWxcXHNbXiNcXG47XSspL2ksIC9eKD86aW5jbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86ZXhjbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86dG9kYXlNYXJrZXJcXHNbXlxcbjtdKykvaSwgL14oPzpcXGRcXGRcXGRcXGQtXFxkXFxkLVxcZFxcZFxcYikvaSwgL14oPzp0aXRsZVxcc1teI1xcbjtdKykvaSwgL14oPzphY2NEZXNjcmlwdGlvblxcc1teI1xcbjtdKykvaSwgL14oPzpzZWN0aW9uXFxzW14jOlxcbjtdKykvaSwgL14oPzpbXiM6XFxuO10rKS9pLCAvXig/OjpbXiNcXG47XSspL2ksIC9eKD86OikvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsxMCwgMTFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYXJnX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzMsIDRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInR5cGVfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMiwgM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwib3Blbl9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsxXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjYWxsYmFja2FyZ3NcIjogeyBcInJ1bGVzXCI6IFsyNiwgMjddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrbmFtZVwiOiB7IFwicnVsZXNcIjogWzIzLCAyNCwgMjVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImhyZWZcIjogeyBcInJ1bGVzXCI6IFsyMCwgMjFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsaWNrXCI6IHsgXCJydWxlc1wiOiBbMjksIDMwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgNSwgNywgOSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMiwgMjgsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDhdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IGdhbnR0UGFyc2VyID0gcGFyc2VyO1xuZGF5anMuZXh0ZW5kKGRheWpzSXNvV2Vlayk7XG5kYXlqcy5leHRlbmQoZGF5anNDdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoZGF5anNBZHZhbmNlZEZvcm1hdCk7XG5sZXQgZGF0ZUZvcm1hdCA9IFwiXCI7XG5sZXQgYXhpc0Zvcm1hdCA9IFwiXCI7XG5sZXQgdGlja0ludGVydmFsID0gdm9pZCAwO1xubGV0IHRvZGF5TWFya2VyID0gXCJcIjtcbmxldCBpbmNsdWRlcyA9IFtdO1xubGV0IGV4Y2x1ZGVzID0gW107XG5sZXQgbGlua3MgPSB7fTtcbmxldCBzZWN0aW9ucyA9IFtdO1xubGV0IHRhc2tzID0gW107XG5sZXQgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xubGV0IGRpc3BsYXlNb2RlID0gXCJcIjtcbmNvbnN0IHRhZ3MgPSBbXCJhY3RpdmVcIiwgXCJkb25lXCIsIFwiY3JpdFwiLCBcIm1pbGVzdG9uZVwiXTtcbmxldCBmdW5zID0gW107XG5sZXQgaW5jbHVzaXZlRW5kRGF0ZXMgPSBmYWxzZTtcbmxldCB0b3BBeGlzID0gZmFsc2U7XG5sZXQgbGFzdE9yZGVyID0gMDtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBjbGVhciA9IGZ1bmN0aW9uKCkge1xuICBzZWN0aW9ucyA9IFtdO1xuICB0YXNrcyA9IFtdO1xuICBjdXJyZW50U2VjdGlvbiA9IFwiXCI7XG4gIGZ1bnMgPSBbXTtcbiAgdGFza0NudCA9IDA7XG4gIGxhc3RUYXNrID0gdm9pZCAwO1xuICBsYXN0VGFza0lEID0gdm9pZCAwO1xuICByYXdUYXNrcyA9IFtdO1xuICBkYXRlRm9ybWF0ID0gXCJcIjtcbiAgYXhpc0Zvcm1hdCA9IFwiXCI7XG4gIGRpc3BsYXlNb2RlID0gXCJcIjtcbiAgdGlja0ludGVydmFsID0gdm9pZCAwO1xuICB0b2RheU1hcmtlciA9IFwiXCI7XG4gIGluY2x1ZGVzID0gW107XG4gIGV4Y2x1ZGVzID0gW107XG4gIGluY2x1c2l2ZUVuZERhdGVzID0gZmFsc2U7XG4gIHRvcEF4aXMgPSBmYWxzZTtcbiAgbGFzdE9yZGVyID0gMDtcbiAgbGlua3MgPSB7fTtcbiAgY2xlYXIkMSgpO1xufTtcbmNvbnN0IHNldEF4aXNGb3JtYXQgPSBmdW5jdGlvbih0eHQpIHtcbiAgYXhpc0Zvcm1hdCA9IHR4dDtcbn07XG5jb25zdCBnZXRBeGlzRm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBheGlzRm9ybWF0O1xufTtcbmNvbnN0IHNldFRpY2tJbnRlcnZhbCA9IGZ1bmN0aW9uKHR4dCkge1xuICB0aWNrSW50ZXJ2YWwgPSB0eHQ7XG59O1xuY29uc3QgZ2V0VGlja0ludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aWNrSW50ZXJ2YWw7XG59O1xuY29uc3Qgc2V0VG9kYXlNYXJrZXIgPSBmdW5jdGlvbih0eHQpIHtcbiAgdG9kYXlNYXJrZXIgPSB0eHQ7XG59O1xuY29uc3QgZ2V0VG9kYXlNYXJrZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRvZGF5TWFya2VyO1xufTtcbmNvbnN0IHNldERhdGVGb3JtYXQgPSBmdW5jdGlvbih0eHQpIHtcbiAgZGF0ZUZvcm1hdCA9IHR4dDtcbn07XG5jb25zdCBlbmFibGVJbmNsdXNpdmVFbmREYXRlcyA9IGZ1bmN0aW9uKCkge1xuICBpbmNsdXNpdmVFbmREYXRlcyA9IHRydWU7XG59O1xuY29uc3QgZW5kRGF0ZXNBcmVJbmNsdXNpdmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluY2x1c2l2ZUVuZERhdGVzO1xufTtcbmNvbnN0IGVuYWJsZVRvcEF4aXMgPSBmdW5jdGlvbigpIHtcbiAgdG9wQXhpcyA9IHRydWU7XG59O1xuY29uc3QgdG9wQXhpc0VuYWJsZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRvcEF4aXM7XG59O1xuY29uc3Qgc2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbih0eHQpIHtcbiAgZGlzcGxheU1vZGUgPSB0eHQ7XG59O1xuY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRpc3BsYXlNb2RlO1xufTtcbmNvbnN0IGdldERhdGVGb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXQ7XG59O1xuY29uc3Qgc2V0SW5jbHVkZXMgPSBmdW5jdGlvbih0eHQpIHtcbiAgaW5jbHVkZXMgPSB0eHQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xccyxdKy8pO1xufTtcbmNvbnN0IGdldEluY2x1ZGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbmNsdWRlcztcbn07XG5jb25zdCBzZXRFeGNsdWRlcyA9IGZ1bmN0aW9uKHR4dCkge1xuICBleGNsdWRlcyA9IHR4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXFxzLF0rLyk7XG59O1xuY29uc3QgZ2V0RXhjbHVkZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGV4Y2x1ZGVzO1xufTtcbmNvbnN0IGdldExpbmtzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBsaW5rcztcbn07XG5jb25zdCBhZGRTZWN0aW9uID0gZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59O1xuY29uc3QgZ2V0U2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHNlY3Rpb25zO1xufTtcbmNvbnN0IGdldFRhc2tzID0gZnVuY3Rpb24oKSB7XG4gIGxldCBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICBjb25zdCBtYXhEZXB0aCA9IDEwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MgPSByYXdUYXNrcztcbiAgcmV0dXJuIHRhc2tzO1xufTtcbmNvbnN0IGlzSW52YWxpZERhdGUgPSBmdW5jdGlvbihkYXRlLCBkYXRlRm9ybWF0MiwgZXhjbHVkZXMyLCBpbmNsdWRlczIpIHtcbiAgaWYgKGluY2x1ZGVzMi5pbmNsdWRlcyhkYXRlLmZvcm1hdChkYXRlRm9ybWF0Mi50cmltKCkpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZGF0ZS5pc29XZWVrZGF5KCkgPj0gNiAmJiBleGNsdWRlczIuaW5jbHVkZXMoXCJ3ZWVrZW5kc1wiKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChleGNsdWRlczIuaW5jbHVkZXMoZGF0ZS5mb3JtYXQoXCJkZGRkXCIpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4Y2x1ZGVzMi5pbmNsdWRlcyhkYXRlLmZvcm1hdChkYXRlRm9ybWF0Mi50cmltKCkpKTtcbn07XG5jb25zdCBjaGVja1Rhc2tEYXRlcyA9IGZ1bmN0aW9uKHRhc2ssIGRhdGVGb3JtYXQyLCBleGNsdWRlczIsIGluY2x1ZGVzMikge1xuICBpZiAoIWV4Y2x1ZGVzMi5sZW5ndGggfHwgdGFzay5tYW51YWxFbmRUaW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBzdGFydFRpbWU7XG4gIGlmICh0YXNrLnN0YXJ0VGltZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBzdGFydFRpbWUgPSBkYXlqcyh0YXNrLnN0YXJ0VGltZSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gZGF5anModGFzay5zdGFydFRpbWUsIGRhdGVGb3JtYXQyLCB0cnVlKTtcbiAgfVxuICBzdGFydFRpbWUgPSBzdGFydFRpbWUuYWRkKDEsIFwiZFwiKTtcbiAgbGV0IG9yaWdpbmFsRW5kVGltZTtcbiAgaWYgKHRhc2suZW5kVGltZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBvcmlnaW5hbEVuZFRpbWUgPSBkYXlqcyh0YXNrLmVuZFRpbWUpO1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbmFsRW5kVGltZSA9IGRheWpzKHRhc2suZW5kVGltZSwgZGF0ZUZvcm1hdDIsIHRydWUpO1xuICB9XG4gIGNvbnN0IFtmaXhlZEVuZFRpbWUsIHJlbmRlckVuZFRpbWVdID0gZml4VGFza0RhdGVzKFxuICAgIHN0YXJ0VGltZSxcbiAgICBvcmlnaW5hbEVuZFRpbWUsXG4gICAgZGF0ZUZvcm1hdDIsXG4gICAgZXhjbHVkZXMyLFxuICAgIGluY2x1ZGVzMlxuICApO1xuICB0YXNrLmVuZFRpbWUgPSBmaXhlZEVuZFRpbWUudG9EYXRlKCk7XG4gIHRhc2sucmVuZGVyRW5kVGltZSA9IHJlbmRlckVuZFRpbWU7XG59O1xuY29uc3QgZml4VGFza0RhdGVzID0gZnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCBkYXRlRm9ybWF0MiwgZXhjbHVkZXMyLCBpbmNsdWRlczIpIHtcbiAgbGV0IGludmFsaWQgPSBmYWxzZTtcbiAgbGV0IHJlbmRlckVuZFRpbWUgPSBudWxsO1xuICB3aGlsZSAoc3RhcnRUaW1lIDw9IGVuZFRpbWUpIHtcbiAgICBpZiAoIWludmFsaWQpIHtcbiAgICAgIHJlbmRlckVuZFRpbWUgPSBlbmRUaW1lLnRvRGF0ZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkID0gaXNJbnZhbGlkRGF0ZShzdGFydFRpbWUsIGRhdGVGb3JtYXQyLCBleGNsdWRlczIsIGluY2x1ZGVzMik7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIGVuZFRpbWUgPSBlbmRUaW1lLmFkZCgxLCBcImRcIik7XG4gICAgfVxuICAgIHN0YXJ0VGltZSA9IHN0YXJ0VGltZS5hZGQoMSwgXCJkXCIpO1xuICB9XG4gIHJldHVybiBbZW5kVGltZSwgcmVuZGVyRW5kVGltZV07XG59O1xuY29uc3QgZ2V0U3RhcnREYXRlID0gZnVuY3Rpb24ocHJldlRpbWUsIGRhdGVGb3JtYXQyLCBzdHIpIHtcbiAgc3RyID0gc3RyLnRyaW0oKTtcbiAgY29uc3QgcmUgPSAvXmFmdGVyXFxzKyhbXFxkXFx3LSBdKykvO1xuICBjb25zdCBhZnRlclN0YXRlbWVudCA9IHJlLmV4ZWMoc3RyLnRyaW0oKSk7XG4gIGlmIChhZnRlclN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGxldCBsYXRlc3RFbmRpbmdUYXNrID0gbnVsbDtcbiAgICBhZnRlclN0YXRlbWVudFsxXS5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgICAgbGV0IHRhc2sgPSBmaW5kVGFza0J5SWQoaWQpO1xuICAgICAgaWYgKHRhc2sgIT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIWxhdGVzdEVuZGluZ1Rhc2spIHtcbiAgICAgICAgICBsYXRlc3RFbmRpbmdUYXNrID0gdGFzaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGFzay5lbmRUaW1lID4gbGF0ZXN0RW5kaW5nVGFzay5lbmRUaW1lKSB7XG4gICAgICAgICAgICBsYXRlc3RFbmRpbmdUYXNrID0gdGFzaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWxhdGVzdEVuZGluZ1Rhc2spIHtcbiAgICAgIGNvbnN0IGR0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gICAgICBkdC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxhdGVzdEVuZGluZ1Rhc2suZW5kVGltZTtcbiAgICB9XG4gIH1cbiAgbGV0IG1EYXRlID0gZGF5anMoc3RyLCBkYXRlRm9ybWF0Mi50cmltKCksIHRydWUpO1xuICBpZiAobURhdGUuaXNWYWxpZCgpKSB7XG4gICAgcmV0dXJuIG1EYXRlLnRvRGF0ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhcIkludmFsaWQgZGF0ZTpcIiArIHN0cik7XG4gICAgbG9nLmRlYnVnKFwiV2l0aCBkYXRlIGZvcm1hdDpcIiArIGRhdGVGb3JtYXQyLnRyaW0oKSk7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKHN0cik7XG4gICAgaWYgKGQgPT09IHZvaWQgMCB8fCBpc05hTihkLmdldFRpbWUoKSkgfHwgLy8gV2ViS2l0IGJyb3dzZXJzIGNhbiBtaXMtcGFyc2UgaW52YWxpZCBkYXRlcyB0byBiZSByaWRpY3Vsb3VzbHlcbiAgICAvLyBodWdlIG51bWJlcnMsIGUuZy4gbmV3IERhdGUoJzIwMjMwNCcpIGdldHMgcGFyc2VkIGFzIEphbnVhcnkgMSwgMjAyMzA0LlxuICAgIC8vIFRoaXMgY2FuIGNhdXNlIHZpcnR1YWxseSBpbmZpbml0ZSBsb29wcyB3aGlsZSByZW5kZXJpbmcsIHNvIGZvciB0aGVcbiAgICAvLyBwdXJwb3NlcyBvZiBHYW50dCBjaGFydHMgd2UnbGwganVzdCB0cmVhdCBhbnkgZGF0ZSBiZXlvbmQgMTAsMDAwIEFEL0JDIGFzXG4gICAgLy8gaW52YWxpZC5cbiAgICBkLmdldEZ1bGxZZWFyKCkgPCAtMWU0IHx8IGQuZ2V0RnVsbFllYXIoKSA+IDFlNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRlOlwiICsgc3RyKTtcbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cbn07XG5jb25zdCBwYXJzZUR1cmF0aW9uID0gZnVuY3Rpb24oc3RyKSB7XG4gIGNvbnN0IHN0YXRlbWVudCA9IC9eKFxcZCsoPzpcXC5cXGQrKT8pKFtNZGhtc3d5XXxtcykkLy5leGVjKHN0ci50cmltKCkpO1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtOdW1iZXIucGFyc2VGbG9hdChzdGF0ZW1lbnRbMV0pLCBzdGF0ZW1lbnRbMl1dO1xuICB9XG4gIHJldHVybiBbTmFOLCBcIm1zXCJdO1xufTtcbmNvbnN0IGdldEVuZERhdGUgPSBmdW5jdGlvbihwcmV2VGltZSwgZGF0ZUZvcm1hdDIsIHN0ciwgaW5jbHVzaXZlID0gZmFsc2UpIHtcbiAgc3RyID0gc3RyLnRyaW0oKTtcbiAgbGV0IG1EYXRlID0gZGF5anMoc3RyLCBkYXRlRm9ybWF0Mi50cmltKCksIHRydWUpO1xuICBpZiAobURhdGUuaXNWYWxpZCgpKSB7XG4gICAgaWYgKGluY2x1c2l2ZSkge1xuICAgICAgbURhdGUgPSBtRGF0ZS5hZGQoMSwgXCJkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbURhdGUudG9EYXRlKCk7XG4gIH1cbiAgbGV0IGVuZFRpbWUgPSBkYXlqcyhwcmV2VGltZSk7XG4gIGNvbnN0IFtkdXJhdGlvblZhbHVlLCBkdXJhdGlvblVuaXRdID0gcGFyc2VEdXJhdGlvbihzdHIpO1xuICBpZiAoIU51bWJlci5pc05hTihkdXJhdGlvblZhbHVlKSkge1xuICAgIGNvbnN0IG5ld0VuZFRpbWUgPSBlbmRUaW1lLmFkZChkdXJhdGlvblZhbHVlLCBkdXJhdGlvblVuaXQpO1xuICAgIGlmIChuZXdFbmRUaW1lLmlzVmFsaWQoKSkge1xuICAgICAgZW5kVGltZSA9IG5ld0VuZFRpbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmRUaW1lLnRvRGF0ZSgpO1xufTtcbmxldCB0YXNrQ250ID0gMDtcbmNvbnN0IHBhcnNlSWQgPSBmdW5jdGlvbihpZFN0cikge1xuICBpZiAoaWRTdHIgPT09IHZvaWQgMCkge1xuICAgIHRhc2tDbnQgPSB0YXNrQ250ICsgMTtcbiAgICByZXR1cm4gXCJ0YXNrXCIgKyB0YXNrQ250O1xuICB9XG4gIHJldHVybiBpZFN0cjtcbn07XG5jb25zdCBjb21waWxlRGF0YSA9IGZ1bmN0aW9uKHByZXZUYXNrLCBkYXRhU3RyKSB7XG4gIGxldCBkcztcbiAgaWYgKGRhdGFTdHIuc3Vic3RyKDAsIDEpID09PSBcIjpcIikge1xuICAgIGRzID0gZGF0YVN0ci5zdWJzdHIoMSwgZGF0YVN0ci5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRzID0gZGF0YVN0cjtcbiAgfVxuICBjb25zdCBkYXRhID0gZHMuc3BsaXQoXCIsXCIpO1xuICBjb25zdCB0YXNrID0ge307XG4gIGdldFRhc2tUYWdzKGRhdGEsIHRhc2ssIHRhZ3MpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhW2ldID0gZGF0YVtpXS50cmltKCk7XG4gIH1cbiAgbGV0IGVuZFRpbWVEYXRhID0gXCJcIjtcbiAgc3dpdGNoIChkYXRhLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKCk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHByZXZUYXNrLmVuZFRpbWU7XG4gICAgICBlbmRUaW1lRGF0YSA9IGRhdGFbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0YXNrLmlkID0gcGFyc2VJZCgpO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzBdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKGRhdGFbMF0pO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzFdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsyXTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChlbmRUaW1lRGF0YSkge1xuICAgIHRhc2suZW5kVGltZSA9IGdldEVuZERhdGUodGFzay5zdGFydFRpbWUsIGRhdGVGb3JtYXQsIGVuZFRpbWVEYXRhLCBpbmNsdXNpdmVFbmREYXRlcyk7XG4gICAgdGFzay5tYW51YWxFbmRUaW1lID0gZGF5anMoZW5kVGltZURhdGEsIFwiWVlZWS1NTS1ERFwiLCB0cnVlKS5pc1ZhbGlkKCk7XG4gICAgY2hlY2tUYXNrRGF0ZXModGFzaywgZGF0ZUZvcm1hdCwgZXhjbHVkZXMsIGluY2x1ZGVzKTtcbiAgfVxuICByZXR1cm4gdGFzaztcbn07XG5jb25zdCBwYXJzZURhdGEgPSBmdW5jdGlvbihwcmV2VGFza0lkLCBkYXRhU3RyKSB7XG4gIGxldCBkcztcbiAgaWYgKGRhdGFTdHIuc3Vic3RyKDAsIDEpID09PSBcIjpcIikge1xuICAgIGRzID0gZGF0YVN0ci5zdWJzdHIoMSwgZGF0YVN0ci5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRzID0gZGF0YVN0cjtcbiAgfVxuICBjb25zdCBkYXRhID0gZHMuc3BsaXQoXCIsXCIpO1xuICBjb25zdCB0YXNrID0ge307XG4gIGdldFRhc2tUYWdzKGRhdGEsIHRhc2ssIHRhZ3MpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhW2ldID0gZGF0YVtpXS50cmltKCk7XG4gIH1cbiAgc3dpdGNoIChkYXRhLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKCk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHtcbiAgICAgICAgdHlwZTogXCJwcmV2VGFza0VuZFwiLFxuICAgICAgICBpZDogcHJldlRhc2tJZFxuICAgICAgfTtcbiAgICAgIHRhc2suZW5kVGltZSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVswXVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKCk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHtcbiAgICAgICAgdHlwZTogXCJnZXRTdGFydERhdGVcIixcbiAgICAgICAgc3RhcnREYXRhOiBkYXRhWzBdXG4gICAgICB9O1xuICAgICAgdGFzay5lbmRUaW1lID0ge1xuICAgICAgICBkYXRhOiBkYXRhWzFdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgdGFzay5pZCA9IHBhcnNlSWQoZGF0YVswXSk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHtcbiAgICAgICAgdHlwZTogXCJnZXRTdGFydERhdGVcIixcbiAgICAgICAgc3RhcnREYXRhOiBkYXRhWzFdXG4gICAgICB9O1xuICAgICAgdGFzay5lbmRUaW1lID0ge1xuICAgICAgICBkYXRhOiBkYXRhWzJdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRhc2s7XG59O1xubGV0IGxhc3RUYXNrO1xubGV0IGxhc3RUYXNrSUQ7XG5sZXQgcmF3VGFza3MgPSBbXTtcbmNvbnN0IHRhc2tEYiA9IHt9O1xuY29uc3QgYWRkVGFzayA9IGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgcHJvY2Vzc2VkOiBmYWxzZSxcbiAgICBtYW51YWxFbmRUaW1lOiBmYWxzZSxcbiAgICByZW5kZXJFbmRUaW1lOiBudWxsLFxuICAgIHJhdzogeyBkYXRhIH0sXG4gICAgdGFzazogZGVzY3IsXG4gICAgY2xhc3NlczogW11cbiAgfTtcbiAgY29uc3QgdGFza0luZm8gPSBwYXJzZURhdGEobGFzdFRhc2tJRCwgZGF0YSk7XG4gIHJhd1Rhc2sucmF3LnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgcmF3VGFzay5yYXcuZW5kVGltZSA9IHRhc2tJbmZvLmVuZFRpbWU7XG4gIHJhd1Rhc2suaWQgPSB0YXNrSW5mby5pZDtcbiAgcmF3VGFzay5wcmV2VGFza0lkID0gbGFzdFRhc2tJRDtcbiAgcmF3VGFzay5hY3RpdmUgPSB0YXNrSW5mby5hY3RpdmU7XG4gIHJhd1Rhc2suZG9uZSA9IHRhc2tJbmZvLmRvbmU7XG4gIHJhd1Rhc2suY3JpdCA9IHRhc2tJbmZvLmNyaXQ7XG4gIHJhd1Rhc2subWlsZXN0b25lID0gdGFza0luZm8ubWlsZXN0b25lO1xuICByYXdUYXNrLm9yZGVyID0gbGFzdE9yZGVyO1xuICBsYXN0T3JkZXIrKztcbiAgY29uc3QgcG9zID0gcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbiAgbGFzdFRhc2tJRCA9IHJhd1Rhc2suaWQ7XG4gIHRhc2tEYltyYXdUYXNrLmlkXSA9IHBvcyAtIDE7XG59O1xuY29uc3QgZmluZFRhc2tCeUlkID0gZnVuY3Rpb24oaWQpIHtcbiAgY29uc3QgcG9zID0gdGFza0RiW2lkXTtcbiAgcmV0dXJuIHJhd1Rhc2tzW3Bvc107XG59O1xuY29uc3QgYWRkVGFza09yZyA9IGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IG5ld1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgZGVzY3JpcHRpb246IGRlc2NyLFxuICAgIHRhc2s6IGRlc2NyLFxuICAgIGNsYXNzZXM6IFtdXG4gIH07XG4gIGNvbnN0IHRhc2tJbmZvID0gY29tcGlsZURhdGEobGFzdFRhc2ssIGRhdGEpO1xuICBuZXdUYXNrLnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgbmV3VGFzay5lbmRUaW1lID0gdGFza0luZm8uZW5kVGltZTtcbiAgbmV3VGFzay5pZCA9IHRhc2tJbmZvLmlkO1xuICBuZXdUYXNrLmFjdGl2ZSA9IHRhc2tJbmZvLmFjdGl2ZTtcbiAgbmV3VGFzay5kb25lID0gdGFza0luZm8uZG9uZTtcbiAgbmV3VGFzay5jcml0ID0gdGFza0luZm8uY3JpdDtcbiAgbmV3VGFzay5taWxlc3RvbmUgPSB0YXNrSW5mby5taWxlc3RvbmU7XG4gIGxhc3RUYXNrID0gbmV3VGFzaztcbiAgdGFza3MucHVzaChuZXdUYXNrKTtcbn07XG5jb25zdCBjb21waWxlVGFza3MgPSBmdW5jdGlvbigpIHtcbiAgY29uc3QgY29tcGlsZVRhc2sgPSBmdW5jdGlvbihwb3MpIHtcbiAgICBjb25zdCB0YXNrID0gcmF3VGFza3NbcG9zXTtcbiAgICBsZXQgc3RhcnRUaW1lID0gXCJcIjtcbiAgICBzd2l0Y2ggKHJhd1Rhc2tzW3Bvc10ucmF3LnN0YXJ0VGltZS50eXBlKSB7XG4gICAgICBjYXNlIFwicHJldlRhc2tFbmRcIjoge1xuICAgICAgICBjb25zdCBwcmV2VGFzayA9IGZpbmRUYXNrQnlJZCh0YXNrLnByZXZUYXNrSWQpO1xuICAgICAgICB0YXNrLnN0YXJ0VGltZSA9IHByZXZUYXNrLmVuZFRpbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImdldFN0YXJ0RGF0ZVwiOlxuICAgICAgICBzdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCByYXdUYXNrc1twb3NdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKTtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSkge1xuICAgICAgICAgIHJhd1Rhc2tzW3Bvc10uc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAocmF3VGFza3NbcG9zXS5zdGFydFRpbWUpIHtcbiAgICAgIHJhd1Rhc2tzW3Bvc10uZW5kVGltZSA9IGdldEVuZERhdGUoXG4gICAgICAgIHJhd1Rhc2tzW3Bvc10uc3RhcnRUaW1lLFxuICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICByYXdUYXNrc1twb3NdLnJhdy5lbmRUaW1lLmRhdGEsXG4gICAgICAgIGluY2x1c2l2ZUVuZERhdGVzXG4gICAgICApO1xuICAgICAgaWYgKHJhd1Rhc2tzW3Bvc10uZW5kVGltZSkge1xuICAgICAgICByYXdUYXNrc1twb3NdLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgIHJhd1Rhc2tzW3Bvc10ubWFudWFsRW5kVGltZSA9IGRheWpzKFxuICAgICAgICAgIHJhd1Rhc2tzW3Bvc10ucmF3LmVuZFRpbWUuZGF0YSxcbiAgICAgICAgICBcIllZWVktTU0tRERcIixcbiAgICAgICAgICB0cnVlXG4gICAgICAgICkuaXNWYWxpZCgpO1xuICAgICAgICBjaGVja1Rhc2tEYXRlcyhyYXdUYXNrc1twb3NdLCBkYXRlRm9ybWF0LCBleGNsdWRlcywgaW5jbHVkZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH07XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn07XG5jb25zdCBzZXRMaW5rID0gZnVuY3Rpb24oaWRzLCBfbGlua1N0cikge1xuICBsZXQgbGlua1N0ciA9IF9saW5rU3RyO1xuICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgbGlua1N0ciA9IHNhbml0aXplVXJsKF9saW5rU3RyKTtcbiAgfVxuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgcmF3VGFzayA9IGZpbmRUYXNrQnlJZChpZCk7XG4gICAgaWYgKHJhd1Rhc2sgIT09IHZvaWQgMCkge1xuICAgICAgcHVzaEZ1bihpZCwgKCkgPT4ge1xuICAgICAgICB3aW5kb3cub3BlbihsaW5rU3RyLCBcIl9zZWxmXCIpO1xuICAgICAgfSk7XG4gICAgICBsaW5rc1tpZF0gPSBsaW5rU3RyO1xuICAgIH1cbiAgfSk7XG4gIHNldENsYXNzKGlkcywgXCJjbGlja2FibGVcIik7XG59O1xuY29uc3Qgc2V0Q2xhc3MgPSBmdW5jdGlvbihpZHMsIGNsYXNzTmFtZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgcmF3VGFzayA9IGZpbmRUYXNrQnlJZChpZCk7XG4gICAgaWYgKHJhd1Rhc2sgIT09IHZvaWQgMCkge1xuICAgICAgcmF3VGFzay5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHNldENsaWNrRnVuID0gZnVuY3Rpb24oaWQsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25BcmdzKSB7XG4gIGlmIChnZXRDb25maWcoKS5zZWN1cml0eUxldmVsICE9PSBcImxvb3NlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBhcmdMaXN0ID0gW107XG4gIGlmICh0eXBlb2YgZnVuY3Rpb25BcmdzID09PSBcInN0cmluZ1wiKSB7XG4gICAgYXJnTGlzdCA9IGZ1bmN0aW9uQXJncy5zcGxpdCgvLCg/PSg/Oig/OlteXCJdKlwiKXsyfSkqW15cIl0qJCkvKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBpdGVtID0gYXJnTGlzdFtpXS50cmltKCk7XG4gICAgICBpZiAoaXRlbS5jaGFyQXQoMCkgPT09ICdcIicgJiYgaXRlbS5jaGFyQXQoaXRlbS5sZW5ndGggLSAxKSA9PT0gJ1wiJykge1xuICAgICAgICBpdGVtID0gaXRlbS5zdWJzdHIoMSwgaXRlbS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGFyZ0xpc3RbaV0gPSBpdGVtO1xuICAgIH1cbiAgfVxuICBpZiAoYXJnTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBhcmdMaXN0LnB1c2goaWQpO1xuICB9XG4gIGxldCByYXdUYXNrID0gZmluZFRhc2tCeUlkKGlkKTtcbiAgaWYgKHJhd1Rhc2sgIT09IHZvaWQgMCkge1xuICAgIHB1c2hGdW4oaWQsICgpID0+IHtcbiAgICAgIHV0aWxzLnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICB9KTtcbiAgfVxufTtcbmNvbnN0IHB1c2hGdW4gPSBmdW5jdGlvbihpZCwgY2FsbGJhY2tGdW5jdGlvbikge1xuICBmdW5zLnB1c2goXG4gICAgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkfS10ZXh0XCJdYCk7XG4gICAgICBpZiAoZWxlbSAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn07XG5jb25zdCBzZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn07XG5jb25zdCBiaW5kRnVuY3Rpb25zID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBmdW5zLmZvckVhY2goZnVuY3Rpb24oZnVuKSB7XG4gICAgZnVuKGVsZW1lbnQpO1xuICB9KTtcbn07XG5jb25zdCBnYW50dERiID0ge1xuICBwYXJzZURpcmVjdGl2ZSxcbiAgZ2V0Q29uZmlnOiAoKSA9PiBnZXRDb25maWcoKS5nYW50dCxcbiAgY2xlYXIsXG4gIHNldERhdGVGb3JtYXQsXG4gIGdldERhdGVGb3JtYXQsXG4gIGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzLFxuICBlbmREYXRlc0FyZUluY2x1c2l2ZSxcbiAgZW5hYmxlVG9wQXhpcyxcbiAgdG9wQXhpc0VuYWJsZWQsXG4gIHNldEF4aXNGb3JtYXQsXG4gIGdldEF4aXNGb3JtYXQsXG4gIHNldFRpY2tJbnRlcnZhbCxcbiAgZ2V0VGlja0ludGVydmFsLFxuICBzZXRUb2RheU1hcmtlcixcbiAgZ2V0VG9kYXlNYXJrZXIsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldERpc3BsYXlNb2RlLFxuICBnZXREaXNwbGF5TW9kZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZWN0aW9uLFxuICBnZXRTZWN0aW9ucyxcbiAgZ2V0VGFza3MsXG4gIGFkZFRhc2ssXG4gIGZpbmRUYXNrQnlJZCxcbiAgYWRkVGFza09yZyxcbiAgc2V0SW5jbHVkZXMsXG4gIGdldEluY2x1ZGVzLFxuICBzZXRFeGNsdWRlcyxcbiAgZ2V0RXhjbHVkZXMsXG4gIHNldENsaWNrRXZlbnQsXG4gIHNldExpbmssXG4gIGdldExpbmtzLFxuICBiaW5kRnVuY3Rpb25zLFxuICBwYXJzZUR1cmF0aW9uLFxuICBpc0ludmFsaWREYXRlXG59O1xuZnVuY3Rpb24gZ2V0VGFza1RhZ3MoZGF0YSwgdGFzaywgdGFnczIpIHtcbiAgbGV0IG1hdGNoRm91bmQgPSB0cnVlO1xuICB3aGlsZSAobWF0Y2hGb3VuZCkge1xuICAgIG1hdGNoRm91bmQgPSBmYWxzZTtcbiAgICB0YWdzMi5mb3JFYWNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBcIl5cXFxccypcIiArIHQgKyBcIlxcXFxzKiRcIjtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgIGlmIChkYXRhWzBdLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICB0YXNrW3RdID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5zaGlmdCgxKTtcbiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNvbnN0IHNldENvbmYgPSBmdW5jdGlvbigpIHtcbiAgbG9nLmRlYnVnKFwiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbFwiKTtcbn07XG5jb25zdCBnZXRNYXhJbnRlcnNlY3Rpb25zID0gKHRhc2tzMiwgb3JkZXJPZmZzZXQpID0+IHtcbiAgbGV0IHRpbWVsaW5lID0gWy4uLnRhc2tzMl0ubWFwKCgpID0+IC1JbmZpbml0eSk7XG4gIGxldCBzb3J0ZWQgPSBbLi4udGFza3MyXS5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0VGltZSAtIGIuc3RhcnRUaW1lIHx8IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgbGV0IG1heEludGVyc2VjdGlvbnMgPSAwO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc29ydGVkKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aW1lbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGVsZW1lbnQuc3RhcnRUaW1lID49IHRpbWVsaW5lW2pdKSB7XG4gICAgICAgIHRpbWVsaW5lW2pdID0gZWxlbWVudC5lbmRUaW1lO1xuICAgICAgICBlbGVtZW50Lm9yZGVyID0gaiArIG9yZGVyT2Zmc2V0O1xuICAgICAgICBpZiAoaiA+IG1heEludGVyc2VjdGlvbnMpIHtcbiAgICAgICAgICBtYXhJbnRlcnNlY3Rpb25zID0gajtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heEludGVyc2VjdGlvbnM7XG59O1xubGV0IHc7XG5jb25zdCBkcmF3ID0gZnVuY3Rpb24odGV4dCwgaWQsIHZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpLmdhbnR0O1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBjb25zdCBlbGVtID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgdyA9IGVsZW0ucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgaWYgKHcgPT09IHZvaWQgMCkge1xuICAgIHcgPSAxMjAwO1xuICB9XG4gIGlmIChjb25mLnVzZVdpZHRoICE9PSB2b2lkIDApIHtcbiAgICB3ID0gY29uZi51c2VXaWR0aDtcbiAgfVxuICBjb25zdCB0YXNrQXJyYXkgPSBkaWFnT2JqLmRiLmdldFRhc2tzKCk7XG4gIGxldCBjYXRlZ29yaWVzID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YXNrQXJyYXkpIHtcbiAgICBjYXRlZ29yaWVzLnB1c2goZWxlbWVudC50eXBlKTtcbiAgfVxuICBjYXRlZ29yaWVzID0gY2hlY2tVbmlxdWUoY2F0ZWdvcmllcyk7XG4gIGNvbnN0IGNhdGVnb3J5SGVpZ2h0cyA9IHt9O1xuICBsZXQgaCA9IDIgKiBjb25mLnRvcFBhZGRpbmc7XG4gIGlmIChkaWFnT2JqLmRiLmdldERpc3BsYXlNb2RlKCkgPT09IFwiY29tcGFjdFwiIHx8IGNvbmYuZGlzcGxheU1vZGUgPT09IFwiY29tcGFjdFwiKSB7XG4gICAgY29uc3QgY2F0ZWdvcnlFbGVtZW50cyA9IHt9O1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YXNrQXJyYXkpIHtcbiAgICAgIGlmIChjYXRlZ29yeUVsZW1lbnRzW2VsZW1lbnQuc2VjdGlvbl0gPT09IHZvaWQgMCkge1xuICAgICAgICBjYXRlZ29yeUVsZW1lbnRzW2VsZW1lbnQuc2VjdGlvbl0gPSBbZWxlbWVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXRlZ29yeUVsZW1lbnRzW2VsZW1lbnQuc2VjdGlvbl0ucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGludGVyc2VjdGlvbnMgPSAwO1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgT2JqZWN0LmtleXMoY2F0ZWdvcnlFbGVtZW50cykpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5SGVpZ2h0ID0gZ2V0TWF4SW50ZXJzZWN0aW9ucyhjYXRlZ29yeUVsZW1lbnRzW2NhdGVnb3J5XSwgaW50ZXJzZWN0aW9ucykgKyAxO1xuICAgICAgaW50ZXJzZWN0aW9ucyArPSBjYXRlZ29yeUhlaWdodDtcbiAgICAgIGggKz0gY2F0ZWdvcnlIZWlnaHQgKiAoY29uZi5iYXJIZWlnaHQgKyBjb25mLmJhckdhcCk7XG4gICAgICBjYXRlZ29yeUhlaWdodHNbY2F0ZWdvcnldID0gY2F0ZWdvcnlIZWlnaHQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGggKz0gdGFza0FycmF5Lmxlbmd0aCAqIChjb25mLmJhckhlaWdodCArIGNvbmYuYmFyR2FwKTtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgIGNhdGVnb3J5SGVpZ2h0c1tjYXRlZ29yeV0gPSB0YXNrQXJyYXkuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLnR5cGUgPT09IGNhdGVnb3J5KS5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGVsZW0uc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBcIjAgMCBcIiArIHcgKyBcIiBcIiArIGgpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3QgdGltZVNjYWxlID0gc2NhbGVUaW1lKCkuZG9tYWluKFtcbiAgICBtaW4odGFza0FycmF5LCBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC5zdGFydFRpbWU7XG4gICAgfSksXG4gICAgbWF4KHRhc2tBcnJheSwgZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQuZW5kVGltZTtcbiAgICB9KVxuICBdKS5yYW5nZVJvdW5kKFswLCB3IC0gY29uZi5sZWZ0UGFkZGluZyAtIGNvbmYucmlnaHRQYWRkaW5nXSk7XG4gIGZ1bmN0aW9uIHRhc2tDb21wYXJlKGEsIGIpIHtcbiAgICBjb25zdCB0YXNrQSA9IGEuc3RhcnRUaW1lO1xuICAgIGNvbnN0IHRhc2tCID0gYi5zdGFydFRpbWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHRhc2tBID4gdGFza0IpIHtcbiAgICAgIHJlc3VsdCA9IDE7XG4gICAgfSBlbHNlIGlmICh0YXNrQSA8IHRhc2tCKSB7XG4gICAgICByZXN1bHQgPSAtMTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0YXNrQXJyYXkuc29ydCh0YXNrQ29tcGFyZSk7XG4gIG1ha2VHYW50KHRhc2tBcnJheSwgdywgaCk7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoc3ZnLCBoLCB3LCBjb25mLnVzZU1heFdpZHRoKTtcbiAgc3ZnLmFwcGVuZChcInRleHRcIikudGV4dChkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKFwieFwiLCB3IC8gMikuYXR0cihcInlcIiwgY29uZi50aXRsZVRvcE1hcmdpbikuYXR0cihcImNsYXNzXCIsIFwidGl0bGVUZXh0XCIpO1xuICBmdW5jdGlvbiBtYWtlR2FudCh0YXNrczIsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkge1xuICAgIGNvbnN0IGJhckhlaWdodCA9IGNvbmYuYmFySGVpZ2h0O1xuICAgIGNvbnN0IGdhcCA9IGJhckhlaWdodCArIGNvbmYuYmFyR2FwO1xuICAgIGNvbnN0IHRvcFBhZGRpbmcgPSBjb25mLnRvcFBhZGRpbmc7XG4gICAgY29uc3QgbGVmdFBhZGRpbmcgPSBjb25mLmxlZnRQYWRkaW5nO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihbMCwgY2F0ZWdvcmllcy5sZW5ndGhdKS5yYW5nZShbXCIjMDBCOUZBXCIsIFwiI0Y5NTAwMlwiXSkuaW50ZXJwb2xhdGUoaW50ZXJwb2xhdGVIY2wpO1xuICAgIGRyYXdFeGNsdWRlRGF5cyhcbiAgICAgIGdhcCxcbiAgICAgIHRvcFBhZGRpbmcsXG4gICAgICBsZWZ0UGFkZGluZyxcbiAgICAgIHBhZ2VXaWR0aCxcbiAgICAgIHBhZ2VIZWlnaHQsXG4gICAgICB0YXNrczIsXG4gICAgICBkaWFnT2JqLmRiLmdldEV4Y2x1ZGVzKCksXG4gICAgICBkaWFnT2JqLmRiLmdldEluY2x1ZGVzKClcbiAgICApO1xuICAgIG1ha2VHcmlkKGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICAgIGRyYXdSZWN0cyh0YXNrczIsIGdhcCwgdG9wUGFkZGluZywgbGVmdFBhZGRpbmcsIGJhckhlaWdodCwgY29sb3JTY2FsZSwgcGFnZVdpZHRoKTtcbiAgICB2ZXJ0TGFiZWxzKGdhcCwgdG9wUGFkZGluZyk7XG4gICAgZHJhd1RvZGF5KGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICB9XG4gIGZ1bmN0aW9uIGRyYXdSZWN0cyh0aGVBcnJheSwgdGhlR2FwLCB0aGVUb3BQYWQsIHRoZVNpZGVQYWQsIHRoZUJhckhlaWdodCwgdGhlQ29sb3JTY2FsZSwgdzIpIHtcbiAgICBjb25zdCB1bmlxdWVUYXNrT3JkZXJJZHMgPSBbLi4ubmV3IFNldCh0aGVBcnJheS5tYXAoKGl0ZW0pID0+IGl0ZW0ub3JkZXIpKV07XG4gICAgY29uc3QgdW5pcXVlVGFza3MgPSB1bmlxdWVUYXNrT3JkZXJJZHMubWFwKChpZDIpID0+IHRoZUFycmF5LmZpbmQoKGl0ZW0pID0+IGl0ZW0ub3JkZXIgPT09IGlkMikpO1xuICAgIHN2Zy5hcHBlbmQoXCJnXCIpLnNlbGVjdEFsbChcInJlY3RcIikuZGF0YSh1bmlxdWVUYXNrcykuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuIGkgKiB0aGVHYXAgKyB0aGVUb3BQYWQgLSAyO1xuICAgIH0pLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB3MiAtIGNvbmYucmlnaHRQYWRkaW5nIC8gMjtcbiAgICB9KS5hdHRyKFwiaGVpZ2h0XCIsIHRoZUdhcCkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZC50eXBlID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHJldHVybiBcInNlY3Rpb24gc2VjdGlvblwiICsgaSAlIGNvbmYubnVtYmVyU2VjdGlvblN0eWxlcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwic2VjdGlvbiBzZWN0aW9uMFwiO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXMgPSBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEodGhlQXJyYXkpLmVudGVyKCk7XG4gICAgY29uc3QgbGlua3MyID0gZGlhZ09iai5kYi5nZXRMaW5rcygpO1xuICAgIHJlY3RhbmdsZXMuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiaWRcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQuaWQ7XG4gICAgfSkuYXR0cihcInJ4XCIsIDMpLmF0dHIoXCJyeVwiLCAzKS5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkgKyB0aGVTaWRlUGFkICsgMC41ICogKHRpbWVTY2FsZShkLmVuZFRpbWUpIC0gdGltZVNjYWxlKGQuc3RhcnRUaW1lKSkgLSAwLjUgKiB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGltZVNjYWxlKGQuc3RhcnRUaW1lKSArIHRoZVNpZGVQYWQ7XG4gICAgfSkuYXR0cihcInlcIiwgZnVuY3Rpb24oZCwgaSkge1xuICAgICAgaSA9IGQub3JkZXI7XG4gICAgICByZXR1cm4gaSAqIHRoZUdhcCArIHRoZVRvcFBhZDtcbiAgICB9KS5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIHJldHVybiB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGltZVNjYWxlKGQucmVuZGVyRW5kVGltZSB8fCBkLmVuZFRpbWUpIC0gdGltZVNjYWxlKGQuc3RhcnRUaW1lKTtcbiAgICB9KS5hdHRyKFwiaGVpZ2h0XCIsIHRoZUJhckhlaWdodCkuYXR0cihcInRyYW5zZm9ybS1vcmlnaW5cIiwgZnVuY3Rpb24oZCwgaSkge1xuICAgICAgaSA9IGQub3JkZXI7XG4gICAgICByZXR1cm4gKHRpbWVTY2FsZShkLnN0YXJ0VGltZSkgKyB0aGVTaWRlUGFkICsgMC41ICogKHRpbWVTY2FsZShkLmVuZFRpbWUpIC0gdGltZVNjYWxlKGQuc3RhcnRUaW1lKSkpLnRvU3RyaW5nKCkgKyBcInB4IFwiICsgKGkgKiB0aGVHYXAgKyB0aGVUb3BQYWQgKyAwLjUgKiB0aGVCYXJIZWlnaHQpLnRvU3RyaW5nKCkgKyBcInB4XCI7XG4gICAgfSkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGNvbnN0IHJlcyA9IFwidGFza1wiO1xuICAgICAgbGV0IGNsYXNzU3RyID0gXCJcIjtcbiAgICAgIGlmIChkLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjbGFzc1N0ciA9IGQuY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWNOdW0gPSAwO1xuICAgICAgZm9yIChjb25zdCBbaSwgY2F0ZWdvcnldIG9mIGNhdGVnb3JpZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChkLnR5cGUgPT09IGNhdGVnb3J5KSB7XG4gICAgICAgICAgc2VjTnVtID0gaSAlIGNvbmYubnVtYmVyU2VjdGlvblN0eWxlcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHRhc2tDbGFzcyA9IFwiXCI7XG4gICAgICBpZiAoZC5hY3RpdmUpIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tDbGFzcyArPSBcIiBhY3RpdmVDcml0XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFza0NsYXNzID0gXCIgYWN0aXZlXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZC5kb25lKSB7XG4gICAgICAgIGlmIChkLmNyaXQpIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgPSBcIiBkb25lQ3JpdFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tDbGFzcyA9IFwiIGRvbmVcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tDbGFzcyArPSBcIiBjcml0XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXNrQ2xhc3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRhc2tDbGFzcyA9IFwiIHRhc2tcIjtcbiAgICAgIH1cbiAgICAgIGlmIChkLm1pbGVzdG9uZSkge1xuICAgICAgICB0YXNrQ2xhc3MgPSBcIiBtaWxlc3RvbmUgXCIgKyB0YXNrQ2xhc3M7XG4gICAgICB9XG4gICAgICB0YXNrQ2xhc3MgKz0gc2VjTnVtO1xuICAgICAgdGFza0NsYXNzICs9IFwiIFwiICsgY2xhc3NTdHI7XG4gICAgICByZXR1cm4gcmVzICsgdGFza0NsYXNzO1xuICAgIH0pO1xuICAgIHJlY3RhbmdsZXMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiaWRcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQuaWQgKyBcIi10ZXh0XCI7XG4gICAgfSkudGV4dChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC50YXNrO1xuICAgIH0pLmF0dHIoXCJmb250LXNpemVcIiwgY29uZi5mb250U2l6ZSkuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgbGV0IHN0YXJ0WCA9IHRpbWVTY2FsZShkLnN0YXJ0VGltZSk7XG4gICAgICBsZXQgZW5kWCA9IHRpbWVTY2FsZShkLnJlbmRlckVuZFRpbWUgfHwgZC5lbmRUaW1lKTtcbiAgICAgIGlmIChkLm1pbGVzdG9uZSkge1xuICAgICAgICBzdGFydFggKz0gMC41ICogKHRpbWVTY2FsZShkLmVuZFRpbWUpIC0gdGltZVNjYWxlKGQuc3RhcnRUaW1lKSkgLSAwLjUgKiB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgZW5kWCA9IHN0YXJ0WCArIHRoZUJhckhlaWdodDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IHRoaXMuZ2V0QkJveCgpLndpZHRoO1xuICAgICAgaWYgKHRleHRXaWR0aCA+IGVuZFggLSBzdGFydFgpIHtcbiAgICAgICAgaWYgKGVuZFggKyB0ZXh0V2lkdGggKyAxLjUgKiBjb25mLmxlZnRQYWRkaW5nID4gdzIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnRYICsgdGhlU2lkZVBhZCAtIDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGVuZFggKyB0aGVTaWRlUGFkICsgNTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChlbmRYIC0gc3RhcnRYKSAvIDIgKyBzdGFydFggKyB0aGVTaWRlUGFkO1xuICAgICAgfVxuICAgIH0pLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuIGkgKiB0aGVHYXAgKyBjb25mLmJhckhlaWdodCAvIDIgKyAoY29uZi5mb250U2l6ZSAvIDIgLSAyKSArIHRoZVRvcFBhZDtcbiAgICB9KS5hdHRyKFwidGV4dC1oZWlnaHRcIiwgdGhlQmFySGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgY29uc3Qgc3RhcnRYID0gdGltZVNjYWxlKGQuc3RhcnRUaW1lKTtcbiAgICAgIGxldCBlbmRYID0gdGltZVNjYWxlKGQuZW5kVGltZSk7XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgZW5kWCA9IHN0YXJ0WCArIHRoZUJhckhlaWdodDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IHRoaXMuZ2V0QkJveCgpLndpZHRoO1xuICAgICAgbGV0IGNsYXNzU3RyID0gXCJcIjtcbiAgICAgIGlmIChkLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjbGFzc1N0ciA9IGQuY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWNOdW0gPSAwO1xuICAgICAgZm9yIChjb25zdCBbaSwgY2F0ZWdvcnldIG9mIGNhdGVnb3JpZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChkLnR5cGUgPT09IGNhdGVnb3J5KSB7XG4gICAgICAgICAgc2VjTnVtID0gaSAlIGNvbmYubnVtYmVyU2VjdGlvblN0eWxlcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHRhc2tUeXBlID0gXCJcIjtcbiAgICAgIGlmIChkLmFjdGl2ZSkge1xuICAgICAgICBpZiAoZC5jcml0KSB7XG4gICAgICAgICAgdGFza1R5cGUgPSBcImFjdGl2ZUNyaXRUZXh0XCIgKyBzZWNOdW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFza1R5cGUgPSBcImFjdGl2ZVRleHRcIiArIHNlY051bTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGQuZG9uZSkge1xuICAgICAgICBpZiAoZC5jcml0KSB7XG4gICAgICAgICAgdGFza1R5cGUgPSB0YXNrVHlwZSArIFwiIGRvbmVDcml0VGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tUeXBlID0gdGFza1R5cGUgKyBcIiBkb25lVGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZC5jcml0KSB7XG4gICAgICAgICAgdGFza1R5cGUgPSB0YXNrVHlwZSArIFwiIGNyaXRUZXh0XCIgKyBzZWNOdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkLm1pbGVzdG9uZSkge1xuICAgICAgICB0YXNrVHlwZSArPSBcIiBtaWxlc3RvbmVUZXh0XCI7XG4gICAgICB9XG4gICAgICBpZiAodGV4dFdpZHRoID4gZW5kWCAtIHN0YXJ0WCkge1xuICAgICAgICBpZiAoZW5kWCArIHRleHRXaWR0aCArIDEuNSAqIGNvbmYubGVmdFBhZGRpbmcgPiB3Mikge1xuICAgICAgICAgIHJldHVybiBjbGFzc1N0ciArIFwiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlXCIgKyBzZWNOdW0gKyBcIiBcIiArIHRhc2tUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbGFzc1N0ciArIFwiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZVwiICsgc2VjTnVtICsgXCIgXCIgKyB0YXNrVHlwZSArIFwiIHdpZHRoLVwiICsgdGV4dFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2xhc3NTdHIgKyBcIiB0YXNrVGV4dCB0YXNrVGV4dFwiICsgc2VjTnVtICsgXCIgXCIgKyB0YXNrVHlwZSArIFwiIHdpZHRoLVwiICsgdGV4dFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3VyaXR5TGV2ZWwyID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgICBpZiAoc2VjdXJpdHlMZXZlbDIgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICBsZXQgc2FuZGJveEVsZW1lbnQyO1xuICAgICAgc2FuZGJveEVsZW1lbnQyID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgICAgIGNvbnN0IGRvYzIgPSBzYW5kYm94RWxlbWVudDIubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ7XG4gICAgICByZWN0YW5nbGVzLmZpbHRlcihmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBsaW5rczJbZC5pZF0gIT09IHZvaWQgMDtcbiAgICAgIH0pLmVhY2goZnVuY3Rpb24obykge1xuICAgICAgICB2YXIgdGFza1JlY3QgPSBkb2MyLnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBvLmlkKTtcbiAgICAgICAgdmFyIHRhc2tUZXh0ID0gZG9jMi5xdWVyeVNlbGVjdG9yKFwiI1wiICsgby5pZCArIFwiLXRleHRcIik7XG4gICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IHRhc2tSZWN0LnBhcmVudE5vZGU7XG4gICAgICAgIHZhciBMaW5rID0gZG9jMi5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgTGluay5zZXRBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIsIGxpbmtzMltvLmlkXSk7XG4gICAgICAgIExpbmsuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFwiX3RvcFwiKTtcbiAgICAgICAgb2xkUGFyZW50LmFwcGVuZENoaWxkKExpbmspO1xuICAgICAgICBMaW5rLmFwcGVuZENoaWxkKHRhc2tSZWN0KTtcbiAgICAgICAgTGluay5hcHBlbmRDaGlsZCh0YXNrVGV4dCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZHJhd0V4Y2x1ZGVEYXlzKHRoZUdhcCwgdGhlVG9wUGFkLCB0aGVTaWRlUGFkLCB3MiwgaDIsIHRhc2tzMiwgZXhjbHVkZXMyLCBpbmNsdWRlczIpIHtcbiAgICBjb25zdCBtaW5UaW1lID0gdGFza3MyLnJlZHVjZShcbiAgICAgIChtaW4yLCB7IHN0YXJ0VGltZSB9KSA9PiBtaW4yID8gTWF0aC5taW4obWluMiwgc3RhcnRUaW1lKSA6IHN0YXJ0VGltZSxcbiAgICAgIDBcbiAgICApO1xuICAgIGNvbnN0IG1heFRpbWUgPSB0YXNrczIucmVkdWNlKChtYXgyLCB7IGVuZFRpbWUgfSkgPT4gbWF4MiA/IE1hdGgubWF4KG1heDIsIGVuZFRpbWUpIDogZW5kVGltZSwgMCk7XG4gICAgY29uc3QgZGF0ZUZvcm1hdDIgPSBkaWFnT2JqLmRiLmdldERhdGVGb3JtYXQoKTtcbiAgICBpZiAoIW1pblRpbWUgfHwgIW1heFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZVJhbmdlcyA9IFtdO1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgbGV0IGQgPSBkYXlqcyhtaW5UaW1lKTtcbiAgICB3aGlsZSAoZC52YWx1ZU9mKCkgPD0gbWF4VGltZSkge1xuICAgICAgaWYgKGRpYWdPYmouZGIuaXNJbnZhbGlkRGF0ZShkLCBkYXRlRm9ybWF0MiwgZXhjbHVkZXMyLCBpbmNsdWRlczIpKSB7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBkLFxuICAgICAgICAgICAgZW5kOiBkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByYW5nZS5lbmQgPSBkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICBleGNsdWRlUmFuZ2VzLnB1c2gocmFuZ2UpO1xuICAgICAgICAgIHJhbmdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZCA9IGQuYWRkKDEsIFwiZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdGFuZ2xlcyA9IHN2Zy5hcHBlbmQoXCJnXCIpLnNlbGVjdEFsbChcInJlY3RcIikuZGF0YShleGNsdWRlUmFuZ2VzKS5lbnRlcigpO1xuICAgIHJlY3RhbmdsZXMuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiaWRcIiwgZnVuY3Rpb24oZDIpIHtcbiAgICAgIHJldHVybiBcImV4Y2x1ZGUtXCIgKyBkMi5zdGFydC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xuICAgIH0pLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uKGQyKSB7XG4gICAgICByZXR1cm4gdGltZVNjYWxlKGQyLnN0YXJ0KSArIHRoZVNpZGVQYWQ7XG4gICAgfSkuYXR0cihcInlcIiwgY29uZi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQyKSB7XG4gICAgICBjb25zdCByZW5kZXJFbmQgPSBkMi5lbmQuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgcmV0dXJuIHRpbWVTY2FsZShyZW5kZXJFbmQpIC0gdGltZVNjYWxlKGQyLnN0YXJ0KTtcbiAgICB9KS5hdHRyKFwiaGVpZ2h0XCIsIGgyIC0gdGhlVG9wUGFkIC0gY29uZi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cihcInRyYW5zZm9ybS1vcmlnaW5cIiwgZnVuY3Rpb24oZDIsIGkpIHtcbiAgICAgIHJldHVybiAodGltZVNjYWxlKGQyLnN0YXJ0KSArIHRoZVNpZGVQYWQgKyAwLjUgKiAodGltZVNjYWxlKGQyLmVuZCkgLSB0aW1lU2NhbGUoZDIuc3RhcnQpKSkudG9TdHJpbmcoKSArIFwicHggXCIgKyAoaSAqIHRoZUdhcCArIDAuNSAqIGgyKS50b1N0cmluZygpICsgXCJweFwiO1xuICAgIH0pLmF0dHIoXCJjbGFzc1wiLCBcImV4Y2x1ZGUtcmFuZ2VcIik7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUdyaWQodGhlU2lkZVBhZCwgdGhlVG9wUGFkLCB3MiwgaDIpIHtcbiAgICBsZXQgYm90dG9tWEF4aXMgPSBheGlzQm90dG9tKHRpbWVTY2FsZSkudGlja1NpemUoLWgyICsgdGhlVG9wUGFkICsgY29uZi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdCh0aW1lRm9ybWF0KGRpYWdPYmouZGIuZ2V0QXhpc0Zvcm1hdCgpIHx8IGNvbmYuYXhpc0Zvcm1hdCB8fCBcIiVZLSVtLSVkXCIpKTtcbiAgICBjb25zdCByZVRpY2tJbnRlcnZhbCA9IC9eKFsxLTldXFxkKikobWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC87XG4gICAgY29uc3QgcmVzdWx0VGlja0ludGVydmFsID0gcmVUaWNrSW50ZXJ2YWwuZXhlYyhcbiAgICAgIGRpYWdPYmouZGIuZ2V0VGlja0ludGVydmFsKCkgfHwgY29uZi50aWNrSW50ZXJ2YWxcbiAgICApO1xuICAgIGlmIChyZXN1bHRUaWNrSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV2ZXJ5ID0gcmVzdWx0VGlja0ludGVydmFsWzFdO1xuICAgICAgY29uc3QgaW50ZXJ2YWwgPSByZXN1bHRUaWNrSW50ZXJ2YWxbMl07XG4gICAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lTWludXRlLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgYm90dG9tWEF4aXMudGlja3ModGltZUhvdXIuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRheVwiOlxuICAgICAgICAgIGJvdHRvbVhBeGlzLnRpY2tzKHRpbWVEYXkuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lV2Vlay5ldmVyeShldmVyeSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lTW9udGguZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZ3JpZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhlU2lkZVBhZCArIFwiLCBcIiArIChoMiAtIDUwKSArIFwiKVwiKS5jYWxsKGJvdHRvbVhBeGlzKS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikuYXR0cihcImZpbGxcIiwgXCIjMDAwXCIpLmF0dHIoXCJzdHJva2VcIiwgXCJub25lXCIpLmF0dHIoXCJmb250LXNpemVcIiwgMTApLmF0dHIoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICBpZiAoZGlhZ09iai5kYi50b3BBeGlzRW5hYmxlZCgpIHx8IGNvbmYudG9wQXhpcykge1xuICAgICAgbGV0IHRvcFhBeGlzID0gYXhpc1RvcCh0aW1lU2NhbGUpLnRpY2tTaXplKC1oMiArIHRoZVRvcFBhZCArIGNvbmYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQodGltZUZvcm1hdChkaWFnT2JqLmRiLmdldEF4aXNGb3JtYXQoKSB8fCBjb25mLmF4aXNGb3JtYXQgfHwgXCIlWS0lbS0lZFwiKSk7XG4gICAgICBpZiAocmVzdWx0VGlja0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGV2ZXJ5ID0gcmVzdWx0VGlja0ludGVydmFsWzFdO1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHJlc3VsdFRpY2tJbnRlcnZhbFsyXTtcbiAgICAgICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVNaW51dGUuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyh0aW1lSG91ci5ldmVyeShldmVyeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImRheVwiOlxuICAgICAgICAgICAgdG9wWEF4aXMudGlja3ModGltZURheS5ldmVyeShldmVyeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVXZWVrLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVNb250aC5ldmVyeShldmVyeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImdyaWRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoZVNpZGVQYWQgKyBcIiwgXCIgKyB0aGVUb3BQYWQgKyBcIilcIikuY2FsbCh0b3BYQXhpcykuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJmaWxsXCIsIFwiIzAwMFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwibm9uZVwiKS5hdHRyKFwiZm9udC1zaXplXCIsIDEwKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdmVydExhYmVscyh0aGVHYXAsIHRoZVRvcFBhZCkge1xuICAgIGxldCBwcmV2R2FwID0gMDtcbiAgICBjb25zdCBudW1PY2N1cmFuY2VzID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlIZWlnaHRzKS5tYXAoKGQpID0+IFtkLCBjYXRlZ29yeUhlaWdodHNbZF1dKTtcbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEobnVtT2NjdXJhbmNlcykuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oZCkge1xuICAgICAgY29uc3Qgcm93cyA9IGRbMF0uc3BsaXQoY29tbW9uLmxpbmVCcmVha1JlZ2V4KTtcbiAgICAgIGNvbnN0IGR5ID0gLShyb3dzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGV4dFwiKTtcbiAgICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcImR5XCIsIGR5ICsgXCJlbVwiKTtcbiAgICAgIGZvciAoY29uc3QgW2osIHJvd10gb2Ygcm93cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdHNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjEwXCIpO1xuICAgICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0c3Bhbi50ZXh0Q29udGVudCA9IHJvdztcbiAgICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN2Z0xhYmVsO1xuICAgIH0pLmF0dHIoXCJ4XCIsIDEwKS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgICBwcmV2R2FwICs9IG51bU9jY3VyYW5jZXNbaSAtIDFdWzFdO1xuICAgICAgICAgIHJldHVybiBkWzFdICogdGhlR2FwIC8gMiArIHByZXZHYXAgKiB0aGVHYXAgKyB0aGVUb3BQYWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkWzFdICogdGhlR2FwIC8gMiArIHRoZVRvcFBhZDtcbiAgICAgIH1cbiAgICB9KS5hdHRyKFwiZm9udC1zaXplXCIsIGNvbmYuc2VjdGlvbkZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgZm9yIChjb25zdCBbaSwgY2F0ZWdvcnldIG9mIGNhdGVnb3JpZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChkWzBdID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHJldHVybiBcInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGVcIiArIGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInNlY3Rpb25UaXRsZVwiO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGRyYXdUb2RheSh0aGVTaWRlUGFkLCB0aGVUb3BQYWQsIHcyLCBoMikge1xuICAgIGNvbnN0IHRvZGF5TWFya2VyMiA9IGRpYWdPYmouZGIuZ2V0VG9kYXlNYXJrZXIoKTtcbiAgICBpZiAodG9kYXlNYXJrZXIyID09PSBcIm9mZlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvZGF5RyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRvZGF5XCIpO1xuICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdG9kYXlMaW5lID0gdG9kYXlHLmFwcGVuZChcImxpbmVcIik7XG4gICAgdG9kYXlMaW5lLmF0dHIoXCJ4MVwiLCB0aW1lU2NhbGUodG9kYXkpICsgdGhlU2lkZVBhZCkuYXR0cihcIngyXCIsIHRpbWVTY2FsZSh0b2RheSkgKyB0aGVTaWRlUGFkKS5hdHRyKFwieTFcIiwgY29uZi50aXRsZVRvcE1hcmdpbikuYXR0cihcInkyXCIsIGgyIC0gY29uZi50aXRsZVRvcE1hcmdpbikuYXR0cihcImNsYXNzXCIsIFwidG9kYXlcIik7XG4gICAgaWYgKHRvZGF5TWFya2VyMiAhPT0gXCJcIikge1xuICAgICAgdG9kYXlMaW5lLmF0dHIoXCJzdHlsZVwiLCB0b2RheU1hcmtlcjIucmVwbGFjZSgvLC9nLCBcIjtcIikpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja1VuaXF1ZShhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnIubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoYXNoLCBhcnJbaV0pKSB7XG4gICAgICAgIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFycltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5jb25zdCBnYW50dFJlbmRlcmVyID0ge1xuICBzZXRDb25mLFxuICBkcmF3XG59O1xuY29uc3QgZ2V0U3R5bGVzID0gKG9wdGlvbnMpID0+IGBcbiAgLm1lcm1haWQtbWFpbi1mb250IHtcbiAgICBmb250LWZhbWlseTogXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4gIC5leGNsdWRlLXJhbmdlIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZXhjbHVkZUJrZ0NvbG9yfTtcbiAgfVxuXG4gIC5zZWN0aW9uIHtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgb3BhY2l0eTogMC4yO1xuICB9XG5cbiAgLnNlY3Rpb24wIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2VjdGlvbkJrZ0NvbG9yfTtcbiAgfVxuXG4gIC5zZWN0aW9uMiB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlY3Rpb25Ca2dDb2xvcjJ9O1xuICB9XG5cbiAgLnNlY3Rpb24xLFxuICAuc2VjdGlvbjMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hbHRTZWN0aW9uQmtnQ29sb3J9O1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUwIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMSB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUzIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvblRpdGxlIHtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAke29wdGlvbnMuZ2FudHRGb250U2l6ZX07XG4gICAgLy8gdGV4dC1oZWlnaHQ6IDE0cHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG5cbiAgLyogR3JpZCBhbmQgYXhpcyAqL1xuXG4gIC5ncmlkIC50aWNrIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ncmlkQ29sb3J9O1xuICAgIG9wYWNpdHk6IDAuODtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gICAgdGV4dCB7XG4gICAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gICAgfVxuICB9XG5cbiAgLmdyaWQgcGF0aCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICB9XG5cblxuICAvKiBUb2RheSBsaW5lICovXG5cbiAgLnRvZGF5IHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnRvZGF5TGluZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuXG5cbiAgLyogVGFzayBzdHlsaW5nICovXG5cbiAgLyogRGVmYXVsdCB0YXNrICovXG5cbiAgLnRhc2sge1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC50YXNrVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHtcbiAgLy8gICBmb250LXNpemU6ICR7b3B0aW9ucy5nYW50dEZvbnRTaXplfTtcbiAgLy8gfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfTtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAke29wdGlvbnMuZ2FudHRGb250U2l6ZX07XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHREYXJrQ29sb3J9O1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gICAgLy8gZm9udC1zaXplOiAke29wdGlvbnMuZ2FudHRGb250U2l6ZX07XG4gIH1cblxuICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovXG4gIC50YXNrLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi9cblxuICAudGFza1RleHQwLFxuICAudGFza1RleHQxLFxuICAudGFza1RleHQyLFxuICAudGFza1RleHQzIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHRDb2xvcn07XG4gIH1cblxuICAudGFzazAsXG4gIC50YXNrMSxcbiAgLnRhc2syLFxuICAudGFzazMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnRhc2tCb3JkZXJDb2xvcn07XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMCxcbiAgLnRhc2tUZXh0T3V0c2lkZTJcbiAge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dE91dHNpZGVDb2xvcn07XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMSxcbiAgLnRhc2tUZXh0T3V0c2lkZTMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dE91dHNpZGVDb2xvcn07XG4gIH1cblxuXG4gIC8qIEFjdGl2ZSB0YXNrICovXG5cbiAgLmFjdGl2ZTAsXG4gIC5hY3RpdmUxLFxuICAuYWN0aXZlMixcbiAgLmFjdGl2ZTMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZlVGV4dDAsXG4gIC5hY3RpdmVUZXh0MSxcbiAgLmFjdGl2ZVRleHQyLFxuICAuYWN0aXZlVGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogQ29tcGxldGVkIHRhc2sgKi9cblxuICAuZG9uZTAsXG4gIC5kb25lMSxcbiAgLmRvbmUyLFxuICAuZG9uZTMge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmRvbmVUYXNrQm9yZGVyQ29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5kb25lVGFza0JrZ0NvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZVRleHQwLFxuICAuZG9uZVRleHQxLFxuICAuZG9uZVRleHQyLFxuICAuZG9uZVRleHQzIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovXG5cbiAgLmNyaXQwLFxuICAuY3JpdDEsXG4gIC5jcml0MixcbiAgLmNyaXQzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5jcml0Qm9yZGVyQ29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5jcml0QmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5hY3RpdmVDcml0MCxcbiAgLmFjdGl2ZUNyaXQxLFxuICAuYWN0aXZlQ3JpdDIsXG4gIC5hY3RpdmVDcml0MyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuY3JpdEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0aXZlVGFza0JrZ0NvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZUNyaXQwLFxuICAuZG9uZUNyaXQxLFxuICAuZG9uZUNyaXQyLFxuICAuZG9uZUNyaXQzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5jcml0Qm9yZGVyQ29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5kb25lVGFza0JrZ0NvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgfVxuXG4gIC5taWxlc3RvbmUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTtcbiAgfVxuXG4gIC5taWxlc3RvbmVUZXh0IHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgLmRvbmVDcml0VGV4dDAsXG4gIC5kb25lQ3JpdFRleHQxLFxuICAuZG9uZUNyaXRUZXh0MixcbiAgLmRvbmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDtcbiAgfVxuXG4gIC5hY3RpdmVDcml0VGV4dDAsXG4gIC5hY3RpdmVDcml0VGV4dDEsXG4gIC5hY3RpdmVDcml0VGV4dDIsXG4gIC5hY3RpdmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDtcbiAgfVxuXG4gIC50aXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9ICAgIDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuYDtcbmNvbnN0IGdhbnR0U3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBnYW50dFBhcnNlcixcbiAgZGI6IGdhbnR0RGIsXG4gIHJlbmRlcmVyOiBnYW50dFJlbmRlcmVyLFxuICBzdHlsZXM6IGdhbnR0U3R5bGVzXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/ganttDiagram-7ce12d6b.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/gitGraphDiagram-1e960c50.js": /*!**********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/gitGraphDiagram-1e960c50.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 4], $V1 = [1, 7], $V2 = [1, 5], $V3 = [1, 9], $V4 = [1, 6], $V5 = [2, 6], $V6 = [1, 16], $V7 = [6, 8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40, 50, 55], $V8 = [8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $V9 = [8, 13, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $Va = [1, 26], $Vb = [6, 8, 14, 50, 55], $Vc = [8, 14, 55], $Vd = [1, 53], $Ve = [1, 52], $Vf = [8, 14, 30, 33, 35, 38, 55], $Vg = [1, 67], $Vh = [1, 68], $Vi = [1, 69], $Vj = [8, 14, 33, 35, 42, 55];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"eol\": 4, \"directive\": 5, \"GG\": 6, \"document\": 7, \"EOF\": 8, \":\": 9, \"DIR\": 10, \"options\": 11, \"body\": 12, \"OPT\": 13, \"NL\": 14, \"line\": 15, \"statement\": 16, \"commitStatement\": 17, \"mergeStatement\": 18, \"cherryPickStatement\": 19, \"acc_title\": 20, \"acc_title_value\": 21, \"acc_descr\": 22, \"acc_descr_value\": 23, \"acc_descr_multiline_value\": 24, \"section\": 25, \"branchStatement\": 26, \"CHECKOUT\": 27, \"ref\": 28, \"BRANCH\": 29, \"ORDER\": 30, \"NUM\": 31, \"CHERRY_PICK\": 32, \"COMMIT_ID\": 33, \"STR\": 34, \"COMMIT_TAG\": 35, \"EMPTYSTR\": 36, \"MERGE\": 37, \"COMMIT_TYPE\": 38, \"commitType\": 39, \"COMMIT\": 40, \"commit_arg\": 41, \"COMMIT_MSG\": 42, \"NORMAL\": 43, \"REVERSE\": 44, \"HIGHLIGHT\": 45, \"openDirective\": 46, \"typeDirective\": 47, \"closeDirective\": 48, \"argDirective\": 49, \"open_directive\": 50, \"type_directive\": 51, \"arg_directive\": 52, \"close_directive\": 53, \"ID\": 54, \";\": 55, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"GG\", 8: \"EOF\", 9: \":\", 10: \"DIR\", 13: \"OPT\", 14: \"NL\", 20: \"acc_title\", 21: \"acc_title_value\", 22: \"acc_descr\", 23: \"acc_descr_value\", 24: \"acc_descr_multiline_value\", 25: \"section\", 27: \"CHECKOUT\", 29: \"BRANCH\", 30: \"ORDER\", 31: \"NUM\", 32: \"CHERRY_PICK\", 33: \"COMMIT_ID\", 34: \"STR\", 35: \"COMMIT_TAG\", 36: \"EMPTYSTR\", 37: \"MERGE\", 38: \"COMMIT_TYPE\", 40: \"COMMIT\", 42: \"COMMIT_MSG\", 43: \"NORMAL\", 44: \"REVERSE\", 45: \"HIGHLIGHT\", 50: \"open_directive\", 51: \"type_directive\", 52: \"arg_directive\", 53: \"close_directive\", 54: \"ID\", 55: \";\" },\n productions_: [0, [3, 2], [3, 2], [3, 3], [3, 4], [3, 5], [7, 0], [7, 2], [11, 2], [11, 1], [12, 0], [12, 2], [15, 2], [15, 1], [16, 1], [16, 1], [16, 1], [16, 2], [16, 2], [16, 1], [16, 1], [16, 1], [16, 2], [26, 2], [26, 4], [19, 3], [19, 5], [19, 5], [19, 5], [19, 5], [18, 2], [18, 4], [18, 4], [18, 4], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [17, 2], [17, 3], [17, 3], [17, 5], [17, 5], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [5, 3], [5, 5], [46, 1], [47, 1], [49, 1], [48, 1], [28, 1], [28, 1], [4, 1], [4, 1], [4, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n return $$[$0];\n case 4:\n return $$[$0 - 1];\n case 5:\n yy.setDirection($$[$0 - 3]);\n return $$[$0 - 1];\n case 7:\n yy.setOptions($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 8:\n $$[$0 - 1] += $$[$0];\n this.$ = $$[$0 - 1];\n break;\n case 10:\n this.$ = [];\n break;\n case 11:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 12:\n this.$ = $$[$0 - 1];\n break;\n case 17:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 18:\n case 19:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 20:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 22:\n yy.checkout($$[$0]);\n break;\n case 23:\n yy.branch($$[$0]);\n break;\n case 24:\n yy.branch($$[$0 - 2], $$[$0]);\n break;\n case 25:\n yy.cherryPick($$[$0], \"\", void 0);\n break;\n case 26:\n yy.cherryPick($$[$0 - 2], \"\", $$[$0]);\n break;\n case 27:\n case 29:\n yy.cherryPick($$[$0 - 2], \"\", \"\");\n break;\n case 28:\n yy.cherryPick($$[$0], \"\", $$[$0 - 2]);\n break;\n case 30:\n yy.merge($$[$0], \"\", \"\", \"\");\n break;\n case 31:\n yy.merge($$[$0 - 2], $$[$0], \"\", \"\");\n break;\n case 32:\n yy.merge($$[$0 - 2], \"\", $$[$0], \"\");\n break;\n case 33:\n yy.merge($$[$0 - 2], \"\", \"\", $$[$0]);\n break;\n case 34:\n yy.merge($$[$0 - 4], $$[$0], \"\", $$[$0 - 2]);\n break;\n case 35:\n yy.merge($$[$0 - 4], \"\", $$[$0], $$[$0 - 2]);\n break;\n case 36:\n yy.merge($$[$0 - 4], \"\", $$[$0 - 2], $$[$0]);\n break;\n case 37:\n yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], \"\");\n break;\n case 38:\n yy.merge($$[$0 - 4], $$[$0 - 2], \"\", $$[$0]);\n break;\n case 39:\n yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], \"\");\n break;\n case 40:\n yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 41:\n yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]);\n break;\n case 42:\n yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]);\n break;\n case 43:\n yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]);\n break;\n case 44:\n yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]);\n break;\n case 45:\n yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]);\n break;\n case 46:\n yy.commit($$[$0]);\n break;\n case 47:\n yy.commit(\"\", \"\", yy.commitType.NORMAL, $$[$0]);\n break;\n case 48:\n yy.commit(\"\", \"\", $$[$0], \"\");\n break;\n case 49:\n yy.commit(\"\", \"\", $$[$0], $$[$0 - 2]);\n break;\n case 50:\n yy.commit(\"\", \"\", $$[$0 - 2], $$[$0]);\n break;\n case 51:\n yy.commit(\"\", $$[$0], yy.commitType.NORMAL, \"\");\n break;\n case 52:\n yy.commit(\"\", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]);\n break;\n case 53:\n yy.commit(\"\", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]);\n break;\n case 54:\n yy.commit(\"\", $$[$0 - 2], $$[$0], \"\");\n break;\n case 55:\n yy.commit(\"\", $$[$0], $$[$0 - 2], \"\");\n break;\n case 56:\n yy.commit(\"\", $$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 57:\n yy.commit(\"\", $$[$0 - 4], $$[$0], $$[$0 - 2]);\n break;\n case 58:\n yy.commit(\"\", $$[$0 - 2], $$[$0 - 4], $$[$0]);\n break;\n case 59:\n yy.commit(\"\", $$[$0], $$[$0 - 4], $$[$0 - 2]);\n break;\n case 60:\n yy.commit(\"\", $$[$0], $$[$0 - 2], $$[$0 - 4]);\n break;\n case 61:\n yy.commit(\"\", $$[$0 - 2], $$[$0], $$[$0 - 4]);\n break;\n case 62:\n yy.commit($$[$0], \"\", yy.commitType.NORMAL, \"\");\n break;\n case 63:\n yy.commit($$[$0], \"\", yy.commitType.NORMAL, $$[$0 - 2]);\n break;\n case 64:\n yy.commit($$[$0 - 2], \"\", yy.commitType.NORMAL, $$[$0]);\n break;\n case 65:\n yy.commit($$[$0 - 2], \"\", $$[$0], \"\");\n break;\n case 66:\n yy.commit($$[$0], \"\", $$[$0 - 2], \"\");\n break;\n case 67:\n yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, \"\");\n break;\n case 68:\n yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, \"\");\n break;\n case 69:\n yy.commit($$[$0 - 4], \"\", $$[$0 - 2], $$[$0]);\n break;\n case 70:\n yy.commit($$[$0 - 4], \"\", $$[$0], $$[$0 - 2]);\n break;\n case 71:\n yy.commit($$[$0 - 2], \"\", $$[$0 - 4], $$[$0]);\n break;\n case 72:\n yy.commit($$[$0], \"\", $$[$0 - 4], $$[$0 - 2]);\n break;\n case 73:\n yy.commit($$[$0], \"\", $$[$0 - 2], $$[$0 - 4]);\n break;\n case 74:\n yy.commit($$[$0 - 2], \"\", $$[$0], $$[$0 - 4]);\n break;\n case 75:\n yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], \"\");\n break;\n case 76:\n yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], \"\");\n break;\n case 77:\n yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], \"\");\n break;\n case 78:\n yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], \"\");\n break;\n case 79:\n yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], \"\");\n break;\n case 80:\n yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], \"\");\n break;\n case 81:\n yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]);\n break;\n case 82:\n yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]);\n break;\n case 83:\n yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]);\n break;\n case 84:\n yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]);\n break;\n case 85:\n yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]);\n break;\n case 86:\n yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]);\n break;\n case 87:\n yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 88:\n yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]);\n break;\n case 89:\n yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]);\n break;\n case 90:\n yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]);\n break;\n case 91:\n yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]);\n break;\n case 92:\n yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]);\n break;\n case 93:\n yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]);\n break;\n case 94:\n yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]);\n break;\n case 95:\n yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]);\n break;\n case 96:\n yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]);\n break;\n case 97:\n yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]);\n break;\n case 98:\n yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]);\n break;\n case 99:\n yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]);\n break;\n case 100:\n yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]);\n break;\n case 101:\n yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]);\n break;\n case 102:\n yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]);\n break;\n case 103:\n yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]);\n break;\n case 104:\n yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]);\n break;\n case 105:\n yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]);\n break;\n case 106:\n yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]);\n break;\n case 107:\n yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]);\n break;\n case 108:\n yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]);\n break;\n case 109:\n yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]);\n break;\n case 110:\n yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]);\n break;\n case 111:\n this.$ = \"\";\n break;\n case 112:\n this.$ = $$[$0];\n break;\n case 113:\n this.$ = yy.commitType.NORMAL;\n break;\n case 114:\n this.$ = yy.commitType.REVERSE;\n break;\n case 115:\n this.$ = yy.commitType.HIGHLIGHT;\n break;\n case 118:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 119:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 120:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 121:\n yy.parseDirective(\"}%%\", \"close_directive\", \"gitGraph\");\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 7: 12, 8: $V5, 9: [1, 13], 10: [1, 14], 11: 15, 14: $V6 }, o($V7, [2, 124]), o($V7, [2, 125]), o($V7, [2, 126]), { 47: 17, 51: [1, 18] }, { 51: [2, 118] }, { 1: [2, 1] }, { 1: [2, 2] }, { 8: [1, 19] }, { 7: 20, 8: $V5, 11: 15, 14: $V6 }, { 9: [1, 21] }, o($V8, [2, 10], { 12: 22, 13: [1, 23] }), o($V9, [2, 9]), { 9: [1, 25], 48: 24, 53: $Va }, o([9, 53], [2, 119]), { 1: [2, 3] }, { 8: [1, 27] }, { 7: 28, 8: $V5, 11: 15, 14: $V6 }, { 8: [2, 7], 14: [1, 31], 15: 29, 16: 30, 17: 32, 18: 33, 19: 34, 20: [1, 35], 22: [1, 36], 24: [1, 37], 25: [1, 38], 26: 39, 27: [1, 40], 29: [1, 44], 32: [1, 43], 37: [1, 42], 40: [1, 41] }, o($V9, [2, 8]), o($Vb, [2, 116]), { 49: 45, 52: [1, 46] }, o($Vb, [2, 121]), { 1: [2, 4] }, { 8: [1, 47] }, o($V8, [2, 11]), { 4: 48, 8: $V1, 14: $V2, 55: $V4 }, o($V8, [2, 13]), o($Vc, [2, 14]), o($Vc, [2, 15]), o($Vc, [2, 16]), { 21: [1, 49] }, { 23: [1, 50] }, o($Vc, [2, 19]), o($Vc, [2, 20]), o($Vc, [2, 21]), { 28: 51, 34: $Vd, 54: $Ve }, o($Vc, [2, 111], { 41: 54, 33: [1, 57], 34: [1, 59], 35: [1, 55], 38: [1, 56], 42: [1, 58] }), { 28: 60, 34: $Vd, 54: $Ve }, { 33: [1, 61], 35: [1, 62] }, { 28: 63, 34: $Vd, 54: $Ve }, { 48: 64, 53: $Va }, { 53: [2, 120] }, { 1: [2, 5] }, o($V8, [2, 12]), o($Vc, [2, 17]), o($Vc, [2, 18]), o($Vc, [2, 22]), o($Vf, [2, 122]), o($Vf, [2, 123]), o($Vc, [2, 46]), { 34: [1, 65] }, { 39: 66, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 70] }, { 34: [1, 71] }, o($Vc, [2, 112]), o($Vc, [2, 30], { 33: [1, 72], 35: [1, 74], 38: [1, 73] }), { 34: [1, 75] }, { 34: [1, 76], 36: [1, 77] }, o($Vc, [2, 23], { 30: [1, 78] }), o($Vb, [2, 117]), o($Vc, [2, 47], { 33: [1, 80], 38: [1, 79], 42: [1, 81] }), o($Vc, [2, 48], { 33: [1, 83], 35: [1, 82], 42: [1, 84] }), o($Vj, [2, 113]), o($Vj, [2, 114]), o($Vj, [2, 115]), o($Vc, [2, 51], { 35: [1, 85], 38: [1, 86], 42: [1, 87] }), o($Vc, [2, 62], { 33: [1, 90], 35: [1, 88], 38: [1, 89] }), { 34: [1, 91] }, { 39: 92, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 93] }, o($Vc, [2, 25], { 35: [1, 94] }), { 33: [1, 95] }, { 33: [1, 96] }, { 31: [1, 97] }, { 39: 98, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 99] }, { 34: [1, 100] }, { 34: [1, 101] }, { 34: [1, 102] }, { 34: [1, 103] }, { 34: [1, 104] }, { 39: 105, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 106] }, { 34: [1, 107] }, { 39: 108, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 109] }, o($Vc, [2, 31], { 35: [1, 111], 38: [1, 110] }), o($Vc, [2, 32], { 33: [1, 113], 35: [1, 112] }), o($Vc, [2, 33], { 33: [1, 114], 38: [1, 115] }), { 34: [1, 116], 36: [1, 117] }, { 34: [1, 118] }, { 34: [1, 119] }, o($Vc, [2, 24]), o($Vc, [2, 49], { 33: [1, 120], 42: [1, 121] }), o($Vc, [2, 53], { 38: [1, 122], 42: [1, 123] }), o($Vc, [2, 63], { 33: [1, 125], 38: [1, 124] }), o($Vc, [2, 50], { 33: [1, 126], 42: [1, 127] }), o($Vc, [2, 55], { 35: [1, 128], 42: [1, 129] }), o($Vc, [2, 66], { 33: [1, 131], 35: [1, 130] }), o($Vc, [2, 52], { 38: [1, 132], 42: [1, 133] }), o($Vc, [2, 54], { 35: [1, 134], 42: [1, 135] }), o($Vc, [2, 67], { 35: [1, 137], 38: [1, 136] }), o($Vc, [2, 64], { 33: [1, 139], 38: [1, 138] }), o($Vc, [2, 65], { 33: [1, 141], 35: [1, 140] }), o($Vc, [2, 68], { 35: [1, 143], 38: [1, 142] }), { 39: 144, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 145] }, { 34: [1, 146] }, { 34: [1, 147] }, { 34: [1, 148] }, { 39: 149, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 26]), o($Vc, [2, 27]), o($Vc, [2, 28]), o($Vc, [2, 29]), { 34: [1, 150] }, { 34: [1, 151] }, { 39: 152, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 153] }, { 39: 154, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 155] }, { 34: [1, 156] }, { 34: [1, 157] }, { 34: [1, 158] }, { 34: [1, 159] }, { 34: [1, 160] }, { 34: [1, 161] }, { 39: 162, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 163] }, { 34: [1, 164] }, { 34: [1, 165] }, { 39: 166, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 167] }, { 39: 168, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 169] }, { 34: [1, 170] }, { 34: [1, 171] }, { 39: 172, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 173] }, o($Vc, [2, 37], { 35: [1, 174] }), o($Vc, [2, 38], { 38: [1, 175] }), o($Vc, [2, 36], { 33: [1, 176] }), o($Vc, [2, 39], { 35: [1, 177] }), o($Vc, [2, 34], { 38: [1, 178] }), o($Vc, [2, 35], { 33: [1, 179] }), o($Vc, [2, 60], { 42: [1, 180] }), o($Vc, [2, 73], { 33: [1, 181] }), o($Vc, [2, 61], { 42: [1, 182] }), o($Vc, [2, 84], { 38: [1, 183] }), o($Vc, [2, 74], { 33: [1, 184] }), o($Vc, [2, 83], { 38: [1, 185] }), o($Vc, [2, 59], { 42: [1, 186] }), o($Vc, [2, 72], { 33: [1, 187] }), o($Vc, [2, 58], { 42: [1, 188] }), o($Vc, [2, 78], { 35: [1, 189] }), o($Vc, [2, 71], { 33: [1, 190] }), o($Vc, [2, 77], { 35: [1, 191] }), o($Vc, [2, 57], { 42: [1, 192] }), o($Vc, [2, 85], { 38: [1, 193] }), o($Vc, [2, 56], { 42: [1, 194] }), o($Vc, [2, 79], { 35: [1, 195] }), o($Vc, [2, 80], { 35: [1, 196] }), o($Vc, [2, 86], { 38: [1, 197] }), o($Vc, [2, 70], { 33: [1, 198] }), o($Vc, [2, 81], { 38: [1, 199] }), o($Vc, [2, 69], { 33: [1, 200] }), o($Vc, [2, 75], { 35: [1, 201] }), o($Vc, [2, 76], { 35: [1, 202] }), o($Vc, [2, 82], { 38: [1, 203] }), { 34: [1, 204] }, { 39: 205, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 206] }, { 34: [1, 207] }, { 39: 208, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 209] }, { 34: [1, 210] }, { 34: [1, 211] }, { 34: [1, 212] }, { 39: 213, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 214] }, { 39: 215, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 216] }, { 34: [1, 217] }, { 34: [1, 218] }, { 34: [1, 219] }, { 34: [1, 220] }, { 34: [1, 221] }, { 34: [1, 222] }, { 39: 223, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 224] }, { 34: [1, 225] }, { 34: [1, 226] }, { 39: 227, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 228] }, { 39: 229, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 230] }, { 34: [1, 231] }, { 34: [1, 232] }, { 39: 233, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 40]), o($Vc, [2, 42]), o($Vc, [2, 41]), o($Vc, [2, 43]), o($Vc, [2, 45]), o($Vc, [2, 44]), o($Vc, [2, 101]), o($Vc, [2, 102]), o($Vc, [2, 99]), o($Vc, [2, 100]), o($Vc, [2, 104]), o($Vc, [2, 103]), o($Vc, [2, 108]), o($Vc, [2, 107]), o($Vc, [2, 106]), o($Vc, [2, 105]), o($Vc, [2, 110]), o($Vc, [2, 109]), o($Vc, [2, 98]), o($Vc, [2, 97]), o($Vc, [2, 96]), o($Vc, [2, 95]), o($Vc, [2, 93]), o($Vc, [2, 94]), o($Vc, [2, 92]), o($Vc, [2, 91]), o($Vc, [2, 90]), o($Vc, [2, 89]), o($Vc, [2, 87]), o($Vc, [2, 88])],\n defaultActions: { 9: [2, 118], 10: [2, 1], 11: [2, 2], 19: [2, 3], 27: [2, 4], 46: [2, 120], 47: [2, 5] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 50;\n case 1:\n this.begin(\"type_directive\");\n return 51;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 9;\n case 3:\n this.popState();\n this.popState();\n return 53;\n case 4:\n return 52;\n case 5:\n this.begin(\"acc_title\");\n return 20;\n case 6:\n this.popState();\n return \"acc_title_value\";\n case 7:\n this.begin(\"acc_descr\");\n return 22;\n case 8:\n this.popState();\n return \"acc_descr_value\";\n case 9:\n this.begin(\"acc_descr_multiline\");\n break;\n case 10:\n this.popState();\n break;\n case 11:\n return \"acc_descr_multiline_value\";\n case 12:\n return 14;\n case 13:\n break;\n case 14:\n break;\n case 15:\n return 6;\n case 16:\n return 40;\n case 17:\n return 33;\n case 18:\n return 38;\n case 19:\n return 42;\n case 20:\n return 43;\n case 21:\n return 44;\n case 22:\n return 45;\n case 23:\n return 35;\n case 24:\n return 29;\n case 25:\n return 30;\n case 26:\n return 37;\n case 27:\n return 32;\n case 28:\n return 27;\n case 29:\n return 10;\n case 30:\n return 10;\n case 31:\n return 9;\n case 32:\n return \"CARET\";\n case 33:\n this.begin(\"options\");\n break;\n case 34:\n this.popState();\n break;\n case 35:\n return 13;\n case 36:\n return 36;\n case 37:\n this.begin(\"string\");\n break;\n case 38:\n this.popState();\n break;\n case 39:\n return 34;\n case 40:\n return 31;\n case 41:\n return 54;\n case 42:\n return 8;\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:(\\r?\\n)+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:gitGraph\\b)/i, /^(?:commit(?=\\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\\b)/i, /^(?:REVERSE\\b)/i, /^(?:HIGHLIGHT\\b)/i, /^(?:tag:)/i, /^(?:branch(?=\\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\\s|$))/i, /^(?:cherry-pick(?=\\s|$))/i, /^(?:checkout(?=\\s|$))/i, /^(?:LR\\b)/i, /^(?:BT\\b)/i, /^(?::)/i, /^(?:\\^)/i, /^(?:options\\r?\\n)/i, /^(?:[ \\r\\n\\t]+end\\b)/i, /^(?:[\\s\\S]+(?=[ \\r\\n\\t]+end))/i, /^(?:[\"][\"])/i, /^(?:[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[0-9]+(?=\\s|$))/i, /^(?:\\w([-\\./\\w]*[-\\w])?)/i, /^(?:$)/i, /^(?:\\s+)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [10, 11], \"inclusive\": false }, \"acc_descr\": { \"rules\": [8], \"inclusive\": false }, \"acc_title\": { \"rules\": [6], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"options\": { \"rules\": [34, 35], \"inclusive\": false }, \"string\": { \"rules\": [38, 39], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 40, 41, 42, 43], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst gitGraphParser = parser;\nlet mainBranchName = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().gitGraph.mainBranchName;\nlet mainBranchOrder = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().gitGraph.mainBranchOrder;\nlet commits = {};\nlet head = null;\nlet branchesConfig = {};\nbranchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder };\nlet branches = {};\nbranches[mainBranchName] = head;\nlet curBranch = mainBranchName;\nlet direction = \"LR\";\nlet seq = 0;\nfunction getId() {\n return (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.y)({ length: 7 });\n}\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\nconst setDirection = function(dir) {\n direction = dir;\n};\nlet options = {};\nconst setOptions = function(rawOptString) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"options str\", rawOptString);\n rawOptString = rawOptString && rawOptString.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n options = JSON.parse(rawOptString);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while parsing gitGraph options\", e.message);\n }\n};\nconst getOptions = function() {\n return options;\n};\nconst commit = function(msg, id, type, tag) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Entering commit:\", msg, id, type, tag);\n id = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(id, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n msg = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(msg, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n tag = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(tag, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n const commit2 = {\n id: id ? id : seq + \"-\" + getId(),\n message: msg,\n seq: seq++,\n type: type ? type : commitType$1.NORMAL,\n tag: tag ? tag : \"\",\n parents: head == null ? [] : [head.id],\n branch: curBranch\n };\n head = commit2;\n commits[commit2.id] = commit2;\n branches[curBranch] = commit2.id;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"in pushCommit \" + commit2.id);\n};\nconst branch = function(name, order) {\n name = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(name, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n if (branches[name] === void 0) {\n branches[name] = head != null ? head.id : null;\n branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null };\n checkout(name);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"in createBranch\");\n } else {\n let error = new Error(\n 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ' + name + '\")'\n );\n error.hash = {\n text: \"branch \" + name,\n token: \"branch \" + name,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: ['\"checkout ' + name + '\"']\n };\n throw error;\n }\n};\nconst merge = function(otherBranch, custom_id, override_type, custom_tag) {\n otherBranch = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(otherBranch, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n custom_id = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(custom_id, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n const currentCommit = commits[branches[curBranch]];\n const otherCommit = commits[branches[otherBranch]];\n if (curBranch === otherBranch) {\n let error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: \"merge \" + otherBranch,\n token: \"merge \" + otherBranch,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"branch abc\"]\n };\n throw error;\n } else if (currentCommit === void 0 || !currentCommit) {\n let error = new Error(\n 'Incorrect usage of \"merge\". Current branch (' + curBranch + \")has no commits\"\n );\n error.hash = {\n text: \"merge \" + otherBranch,\n token: \"merge \" + otherBranch,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"commit\"]\n };\n throw error;\n } else if (branches[otherBranch] === void 0) {\n let error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: \"merge \" + otherBranch,\n token: \"merge \" + otherBranch,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"branch \" + otherBranch]\n };\n throw error;\n } else if (otherCommit === void 0 || !otherCommit) {\n let error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: \"merge \" + otherBranch,\n token: \"merge \" + otherBranch,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: ['\"commit\"']\n };\n throw error;\n } else if (currentCommit === otherCommit) {\n let error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: \"merge \" + otherBranch,\n token: \"merge \" + otherBranch,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"branch abc\"]\n };\n throw error;\n } else if (custom_id && commits[custom_id] !== void 0) {\n let error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + custom_id + \" already exists, use different custom Id\"\n );\n error.hash = {\n text: \"merge \" + otherBranch + custom_id + override_type + custom_tag,\n token: \"merge \" + otherBranch + custom_id + override_type + custom_tag,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\n \"merge \" + otherBranch + \" \" + custom_id + \"_UNIQUE \" + override_type + \" \" + custom_tag\n ]\n };\n throw error;\n }\n const commit2 = {\n id: custom_id ? custom_id : seq + \"-\" + getId(),\n message: \"merged branch \" + otherBranch + \" into \" + curBranch,\n seq: seq++,\n parents: [head == null ? null : head.id, branches[otherBranch]],\n branch: curBranch,\n type: commitType$1.MERGE,\n customType: override_type,\n customId: custom_id ? true : false,\n tag: custom_tag ? custom_tag : \"\"\n };\n head = commit2;\n commits[commit2.id] = commit2;\n branches[curBranch] = commit2.id;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(branches);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"in mergeBranch\");\n};\nconst cherryPick = function(sourceId, targetId, tag) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Entering cherryPick:\", sourceId, targetId, tag);\n sourceId = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(sourceId, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n targetId = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(targetId, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n tag = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(tag, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n if (!sourceId || commits[sourceId] === void 0) {\n let error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: \"cherryPick \" + sourceId + \" \" + targetId,\n token: \"cherryPick \" + sourceId + \" \" + targetId,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n let sourceCommit = commits[sourceId];\n let sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType$1.MERGE) {\n let error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit should not be a merge commit'\n );\n error.hash = {\n text: \"cherryPick \" + sourceId + \" \" + targetId,\n token: \"cherryPick \" + sourceId + \" \" + targetId,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n if (!targetId || commits[targetId] === void 0) {\n if (sourceCommitBranch === curBranch) {\n let error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: \"cherryPick \" + sourceId + \" \" + targetId,\n token: \"cherryPick \" + sourceId + \" \" + targetId,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = commits[branches[curBranch]];\n if (currentCommit === void 0 || !currentCommit) {\n let error = new Error(\n 'Incorrect usage of \"cherry-pick\". Current branch (' + curBranch + \")has no commits\"\n );\n error.hash = {\n text: \"cherryPick \" + sourceId + \" \" + targetId,\n token: \"cherryPick \" + sourceId + \" \" + targetId,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: seq + \"-\" + getId(),\n message: \"cherry-picked \" + sourceCommit + \" into \" + curBranch,\n seq: seq++,\n parents: [head == null ? null : head.id, sourceCommit.id],\n branch: curBranch,\n type: commitType$1.CHERRY_PICK,\n tag: tag ?? \"cherry-pick:\" + sourceCommit.id\n };\n head = commit2;\n commits[commit2.id] = commit2;\n branches[curBranch] = commit2.id;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(branches);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"in cherryPick\");\n }\n};\nconst checkout = function(branch2) {\n branch2 = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(branch2, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n if (branches[branch2] === void 0) {\n let error = new Error(\n 'Trying to checkout branch which is not yet created. (Help try using \"branch ' + branch2 + '\")'\n );\n error.hash = {\n text: \"checkout \" + branch2,\n token: \"checkout \" + branch2,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: ['\"branch ' + branch2 + '\"']\n };\n throw error;\n } else {\n curBranch = branch2;\n const id = branches[curBranch];\n head = commits[id];\n }\n};\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (let branch2 in branches) {\n if (branches[branch2] === commit2.id) {\n label.push(branch2);\n }\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2) {\n const newCommit = commits[commit2.parents[0]];\n upsert(commitArr, commit2, newCommit);\n commitArr.push(commits[commit2.parents[1]]);\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n const nextCommit = commits[commit2.parents];\n upsert(commitArr, commit2, nextCommit);\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\nconst prettyPrint = function() {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n};\nconst clear$1 = function() {\n commits = {};\n head = null;\n let mainBranch = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().gitGraph.mainBranchName;\n let mainBranchOrder2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().gitGraph.mainBranchOrder;\n branches = {};\n branches[mainBranch] = null;\n branchesConfig = {};\n branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 };\n curBranch = mainBranch;\n seq = 0;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst getBranchesAsObjArray = function() {\n const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => {\n if (branchConfig.order !== null) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`, 10)\n };\n }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name }));\n return branchesArray;\n};\nconst getBranches = function() {\n return branches;\n};\nconst getCommits = function() {\n return commits;\n};\nconst getCommitsArray = function() {\n const commitArr = Object.keys(commits).map(function(key) {\n return commits[key];\n });\n commitArr.forEach(function(o) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n};\nconst getCurrentBranch = function() {\n return curBranch;\n};\nconst getDirection = function() {\n return direction;\n};\nconst getHead = function() {\n return head;\n};\nconst commitType$1 = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\nconst gitGraphDb = {\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().gitGraph,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear$1,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t,\n commitType: commitType$1\n};\nlet allCommitsDict = {};\nconst commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\nconst THEME_COLOR_LIMIT = 8;\nlet branchPos = {};\nlet commitPos = {};\nlet lanes = [];\nlet maxPos = 0;\nconst clear = () => {\n branchPos = {};\n commitPos = {};\n allCommitsDict = {};\n maxPos = 0;\n lanes = [];\n};\nconst drawText = (txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n let rows = [];\n if (typeof txt === \"string\") {\n rows = txt.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(txt)) {\n rows = txt;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n};\nconst drawCommits = (svg, commits2, modifyGraph) => {\n const gitGraphConfig = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.z)().gitGraph;\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = 0;\n const keys = Object.keys(commits2);\n const sortedKeys = keys.sort((a, b) => {\n return commits2[a].seq - commits2[b].seq;\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits2[key];\n const y = branchPos[commit2.branch].pos;\n const x = pos + 10;\n if (modifyGraph) {\n let typeClass;\n let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== \"\" ? commit2.customType : commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n typeClass = \"commit-normal\";\n break;\n case commitType.REVERSE:\n typeClass = \"commit-reverse\";\n break;\n case commitType.HIGHLIGHT:\n typeClass = \"commit-highlight\";\n break;\n case commitType.MERGE:\n typeClass = \"commit-merge\";\n break;\n case commitType.CHERRY_PICK:\n typeClass = \"commit-cherry-pick\";\n break;\n default:\n typeClass = \"commit-normal\";\n }\n if (commitSymbolType === commitType.HIGHLIGHT) {\n const circle = gBullets.append(\"rect\");\n circle.attr(\"x\", x - 10);\n circle.attr(\"y\", y - 10);\n circle.attr(\"height\", 20);\n circle.attr(\"width\", 20);\n circle.attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", x - 6).attr(\"y\", y - 6).attr(\"height\", 12).attr(\"width\", 12).attr(\n \"class\",\n `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", x).attr(\"cy\", y).attr(\"r\", 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", x - 3).attr(\"cy\", y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", x + 3).attr(\"cy\", y + 2).attr(\"r\", 2.75).attr(\"fill\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", x + 3).attr(\"y1\", y + 1).attr(\"x2\", x).attr(\"y2\", y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", x - 3).attr(\"y1\", y + 1).attr(\"x2\", x).attr(\"y2\", y - 5).attr(\"stroke\", \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", x);\n circle.attr(\"cy\", y);\n circle.attr(\"r\", commit2.type === commitType.MERGE ? 9 : 10);\n circle.attr(\n \"class\",\n `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`\n );\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", x);\n circle2.attr(\"cy\", y);\n circle2.attr(\"r\", 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n cross.attr(\"d\", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`\n );\n }\n }\n }\n commitPos[commit2.id] = { x: pos + 10, y };\n if (modifyGraph) {\n const px = 4;\n const py = 2;\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n let bbox = text.node().getBBox();\n labelBkg.attr(\"x\", pos + 10 - bbox.width / 2 - py).attr(\"y\", y + 13.5).attr(\"width\", bbox.width + 2 * py).attr(\"height\", bbox.height + 2 * py);\n text.attr(\"x\", pos + 10 - bbox.width / 2);\n if (gitGraphConfig.rotateCommitLabel) {\n let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n let r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + y + \")\"\n );\n }\n }\n if (commit2.tag) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", y - 16).attr(\"class\", \"tag-label\").text(commit2.tag);\n let tagBbox = tag.node().getBBox();\n tag.attr(\"x\", pos + 10 - tagBbox.width / 2);\n const h2 = tagBbox.height / 2;\n const ly = y - 19.2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - tagBbox.width / 2 - px / 2},${ly + py}\n ${pos - tagBbox.width / 2 - px / 2},${ly - py}\n ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py}\n ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py}\n ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py}\n ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}`\n );\n hole.attr(\"cx\", pos - tagBbox.width / 2 + px / 2).attr(\"cy\", ly).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n }\n }\n pos += 50;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n};\nconst hasOverlappingCommits = (commit1, commit2, allCommits) => {\n const keys = Object.keys(allCommits);\n const overlappingComits = keys.filter((key) => {\n return allCommits[key].branch === commit2.branch && allCommits[key].seq > commit1.seq && allCommits[key].seq < commit2.seq;\n });\n return overlappingComits.length > 0;\n};\nconst findLane = (y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n};\nconst drawArrow = (svg, commit1, commit2, allCommits) => {\n const p1 = commitPos[commit1.id];\n const p2 = commitPos[commit2.id];\n const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos[commit2.branch].index;\n let lineDef;\n if (overlappingCommits) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n colorClassNum = branchPos[commit2.branch].index;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n arc = \"A 20 20, 0, 0, 0,\";\n radius = 20;\n offset = 20;\n colorClassNum = branchPos[commit2.branch].index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n if (p1.y > p2.y) {\n arc = \"A 20 20, 0, 0, 0,\";\n radius = 20;\n offset = 20;\n colorClassNum = branchPos[commit1.branch].index;\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n if (p1.y === p2.y) {\n colorClassNum = branchPos[commit1.branch].index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\"class\", \"arrow arrow\" + colorClassNum % THEME_COLOR_LIMIT);\n};\nconst drawArrows = (svg, commits2) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n Object.keys(commits2).forEach((key) => {\n const commit2 = commits2[key];\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits2[parent], commit2, commits2);\n });\n }\n });\n};\nconst drawBranches = (svg, branches2) => {\n const gitGraphConfig = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.z)().gitGraph;\n const g = svg.append(\"g\");\n branches2.forEach((branch2, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n const pos = branchPos[branch2.name].pos;\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", pos);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", pos);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n lanes.push(pos);\n let name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\"rx\", 4).attr(\"ry\", 4).attr(\"x\", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 8).attr(\"width\", bbox.width + 18).attr(\"height\", bbox.height + 4);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + \", \" + (pos - bbox.height / 2 - 1) + \")\"\n );\n bkg.attr(\"transform\", \"translate(-19, \" + (pos - bbox.height / 2) + \")\");\n });\n};\nconst draw = function(txt, id, ver, diagObj) {\n clear();\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.z)();\n const gitGraphConfig = conf.gitGraph;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n allCommitsDict = diagObj.db.getCommits();\n const branches2 = diagObj.db.getBranchesAsObjArray();\n let pos = 0;\n branches2.forEach((branch2, index) => {\n branchPos[branch2.name] = { pos, index };\n pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0);\n });\n const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(`[id=\"${id}\"]`);\n drawCommits(diagram2, allCommitsDict, false);\n if (gitGraphConfig.showBranches) {\n drawBranches(diagram2, branches2);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.insertTitle(\n diagram2,\n \"gitTitleText\",\n gitGraphConfig.titleTopMargin,\n diagObj.db.getDiagramTitle()\n );\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.A)(\n void 0,\n diagram2,\n gitGraphConfig.diagramPadding,\n gitGraphConfig.useMaxWidth ?? conf.useMaxWidth\n );\n};\nconst gitGraphRenderer = {\n draw\n};\nconst getStyles = (options2) => `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7].map(\n (i) => `\n .branch-label${i} { fill: ${options2[\"gitBranchLabel\" + i]}; }\n .commit${i} { stroke: ${options2[\"git\" + i]}; fill: ${options2[\"git\" + i]}; }\n .commit-highlight${i} { stroke: ${options2[\"gitInv\" + i]}; fill: ${options2[\"gitInv\" + i]}; }\n .label${i} { fill: ${options2[\"git\" + i]}; }\n .arrow${i} { stroke: ${options2[\"git\" + i]}; }\n `\n).join(\"\\n\")}\n\n .branch {\n stroke-width: 1;\n stroke: ${options2.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};}\n .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};}\n .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; }\n .tag-hole { fill: ${options2.textColor}; }\n\n .commit-merge {\n stroke: ${options2.primaryColor};\n fill: ${options2.primaryColor};\n }\n .commit-reverse {\n stroke: ${options2.primaryColor};\n fill: ${options2.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options2.primaryColor};\n fill: ${options2.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options2.textColor};\n }\n`;\nconst gitGraphStyles = getStyles;\nconst diagram = {\n parser: gitGraphParser,\n db: gitGraphDb,\n renderer: gitGraphRenderer,\n styles: gitGraphStyles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9naXRHcmFwaERpYWdyYW0tMWU5NjBjNTAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFnVDtBQUNwUjtBQUNUO0FBQ0o7QUFDa0I7QUFDZDtBQUNIO0FBQ2M7QUFDZDtBQUNjO0FBQzlCO0FBQ0E7QUFDQSxzQkFBc0IsZ0JBQWdCLEtBQUs7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMLFVBQVU7QUFDVixnQkFBZ0IsKzJCQUErMkIsZ0NBQWdDO0FBQy81QixrQkFBa0Isb2lCQUFvaUIsR0FBRztBQUN6akI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLG9FQUFvRSxJQUFJLFFBQVEsSUFBSSxxRUFBcUUsSUFBSSxxRUFBcUUsSUFBSSx5REFBeUQsMERBQTBELHFCQUFxQixJQUFJLGNBQWMsSUFBSSxXQUFXLElBQUksV0FBVyxJQUFJLFlBQVksSUFBSSxnQ0FBZ0MsSUFBSSxZQUFZLG9CQUFvQixxQkFBcUIscUJBQXFCLDZCQUE2QiwwQkFBMEIsV0FBVyxJQUFJLFlBQVksSUFBSSxnQ0FBZ0MsSUFBSSw2TEFBNkwsc0NBQXNDLHFCQUFxQixzQkFBc0IsV0FBVyxJQUFJLFlBQVkscUJBQXFCLGlDQUFpQyx3RUFBd0UsYUFBYSxJQUFJLGFBQWEsdURBQXVELDBCQUEwQixxQkFBcUIseUVBQXlFLEtBQUssMEJBQTBCLElBQUksMEJBQTBCLElBQUksMEJBQTBCLElBQUksaUJBQWlCLElBQUksY0FBYyxJQUFJLFdBQVcsNkhBQTZILGFBQWEsSUFBSSxtQ0FBbUMsSUFBSSxhQUFhLElBQUksYUFBYSxzQ0FBc0MsdUNBQXVDLEtBQUssYUFBYSxJQUFJLDBCQUEwQixvQkFBb0IsYUFBYSx1Q0FBdUMsdUNBQXVDLHFCQUFxQix1Q0FBdUMsMkVBQTJFLHVDQUF1QyxxQkFBcUIsdUNBQXVDLEtBQUssYUFBYSxJQUFJLG1DQUFtQyxJQUFJLGFBQWEsb0JBQW9CLGFBQWEsS0FBSyxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEsSUFBSSxtQ0FBbUMsSUFBSSxhQUFhLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLG9DQUFvQyxJQUFJLGNBQWMsb0JBQW9CLDRCQUE0QixxQkFBcUIsNEJBQTRCLHFCQUFxQiw0QkFBNEIsS0FBSyw0QkFBNEIsSUFBSSxjQUFjLElBQUksY0FBYyxxQ0FBcUMsNEJBQTRCLHFCQUFxQiw0QkFBNEIscUJBQXFCLDRCQUE0QixxQkFBcUIsNEJBQTRCLHFCQUFxQiw0QkFBNEIscUJBQXFCLDRCQUE0QixxQkFBcUIsNEJBQTRCLHFCQUFxQiw0QkFBNEIscUJBQXFCLDRCQUE0QixxQkFBcUIsNEJBQTRCLHFCQUFxQiw0QkFBNEIscUJBQXFCLDRCQUE0QixLQUFLLG9DQUFvQyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0Msd0VBQXdFLGNBQWMsSUFBSSxjQUFjLElBQUksb0NBQW9DLElBQUksY0FBYyxJQUFJLG9DQUFvQyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksb0NBQW9DLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksb0NBQW9DLElBQUksY0FBYyxvQkFBb0IsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxLQUFLLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLG9DQUFvQyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksb0NBQW9DLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLG9DQUFvQyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLG9DQUFvQyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGNBQWMsSUFBSSxvQ0FBb0M7QUFDdnpMLHNCQUFzQix1RkFBdUY7QUFDN0c7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFP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QUFXO0FBQzFCO0FBQ0EsRUFBRSx5REFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsR0FBRztBQUNILG1CQUFtQiwwQ0FBTSxTQUFTLEdBQUc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSwrREFBaUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsdURBQWlCO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLHVCQUF1QixLQUFLLFFBQVE7QUFDcEMsaUJBQWlCLEtBQUssVUFBVSxzQkFBc0IsUUFBUTtBQUM5RCwyQkFBMkIsS0FBSyxVQUFVLHlCQUF5QixRQUFRO0FBQzNFLGdCQUFnQixNQUFNLFFBQVE7QUFDOUIsZ0JBQWdCLEtBQUssVUFBVTtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGtCQUFrQixhQUFhLCtCQUErQixRQUFRO0FBQ3RFLHNCQUFzQixhQUFhLCtCQUErQixRQUFRLGlDQUFpQztBQUMzRyxlQUFlLGFBQWEsNEJBQTRCLFFBQVE7QUFDaEUsbUJBQW1CLFFBQVEsOEJBQThCLFVBQVU7QUFDbkUsY0FBYyxRQUFROztBQUV0QjtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUEsV0FBVyxpQkFBaUIsdUJBQXVCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2dpdEdyYXBoRGlhZ3JhbS0xZTk2MGM1MC5qcz9kYmIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIG0gYXMgbWVybWFpZEFQSSwgbCBhcyBsb2csIGUgYXMgY29tbW9uLCB2IGFzIGNsZWFyJDIsIHkgYXMgcmFuZG9tLCB6IGFzIGdldENvbmZpZyQxLCB1IGFzIHV0aWxzLCBBIGFzIHNldHVwR3JhcGhWaWV3Ym94IH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpXG4gICAgICA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCAkVjAgPSBbMSwgNF0sICRWMSA9IFsxLCA3XSwgJFYyID0gWzEsIDVdLCAkVjMgPSBbMSwgOV0sICRWNCA9IFsxLCA2XSwgJFY1ID0gWzIsIDZdLCAkVjYgPSBbMSwgMTZdLCAkVjcgPSBbNiwgOCwgMTQsIDIwLCAyMiwgMjQsIDI1LCAyNywgMjksIDMyLCAzNywgNDAsIDUwLCA1NV0sICRWOCA9IFs4LCAxNCwgMjAsIDIyLCAyNCwgMjUsIDI3LCAyOSwgMzIsIDM3LCA0MF0sICRWOSA9IFs4LCAxMywgMTQsIDIwLCAyMiwgMjQsIDI1LCAyNywgMjksIDMyLCAzNywgNDBdLCAkVmEgPSBbMSwgMjZdLCAkVmIgPSBbNiwgOCwgMTQsIDUwLCA1NV0sICRWYyA9IFs4LCAxNCwgNTVdLCAkVmQgPSBbMSwgNTNdLCAkVmUgPSBbMSwgNTJdLCAkVmYgPSBbOCwgMTQsIDMwLCAzMywgMzUsIDM4LCA1NV0sICRWZyA9IFsxLCA2N10sICRWaCA9IFsxLCA2OF0sICRWaSA9IFsxLCA2OV0sICRWaiA9IFs4LCAxNCwgMzMsIDM1LCA0MiwgNTVdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZW9sXCI6IDQsIFwiZGlyZWN0aXZlXCI6IDUsIFwiR0dcIjogNiwgXCJkb2N1bWVudFwiOiA3LCBcIkVPRlwiOiA4LCBcIjpcIjogOSwgXCJESVJcIjogMTAsIFwib3B0aW9uc1wiOiAxMSwgXCJib2R5XCI6IDEyLCBcIk9QVFwiOiAxMywgXCJOTFwiOiAxNCwgXCJsaW5lXCI6IDE1LCBcInN0YXRlbWVudFwiOiAxNiwgXCJjb21taXRTdGF0ZW1lbnRcIjogMTcsIFwibWVyZ2VTdGF0ZW1lbnRcIjogMTgsIFwiY2hlcnJ5UGlja1N0YXRlbWVudFwiOiAxOSwgXCJhY2NfdGl0bGVcIjogMjAsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDIxLCBcImFjY19kZXNjclwiOiAyMiwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMjMsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAyNCwgXCJzZWN0aW9uXCI6IDI1LCBcImJyYW5jaFN0YXRlbWVudFwiOiAyNiwgXCJDSEVDS09VVFwiOiAyNywgXCJyZWZcIjogMjgsIFwiQlJBTkNIXCI6IDI5LCBcIk9SREVSXCI6IDMwLCBcIk5VTVwiOiAzMSwgXCJDSEVSUllfUElDS1wiOiAzMiwgXCJDT01NSVRfSURcIjogMzMsIFwiU1RSXCI6IDM0LCBcIkNPTU1JVF9UQUdcIjogMzUsIFwiRU1QVFlTVFJcIjogMzYsIFwiTUVSR0VcIjogMzcsIFwiQ09NTUlUX1RZUEVcIjogMzgsIFwiY29tbWl0VHlwZVwiOiAzOSwgXCJDT01NSVRcIjogNDAsIFwiY29tbWl0X2FyZ1wiOiA0MSwgXCJDT01NSVRfTVNHXCI6IDQyLCBcIk5PUk1BTFwiOiA0MywgXCJSRVZFUlNFXCI6IDQ0LCBcIkhJR0hMSUdIVFwiOiA0NSwgXCJvcGVuRGlyZWN0aXZlXCI6IDQ2LCBcInR5cGVEaXJlY3RpdmVcIjogNDcsIFwiY2xvc2VEaXJlY3RpdmVcIjogNDgsIFwiYXJnRGlyZWN0aXZlXCI6IDQ5LCBcIm9wZW5fZGlyZWN0aXZlXCI6IDUwLCBcInR5cGVfZGlyZWN0aXZlXCI6IDUxLCBcImFyZ19kaXJlY3RpdmVcIjogNTIsIFwiY2xvc2VfZGlyZWN0aXZlXCI6IDUzLCBcIklEXCI6IDU0LCBcIjtcIjogNTUsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA2OiBcIkdHXCIsIDg6IFwiRU9GXCIsIDk6IFwiOlwiLCAxMDogXCJESVJcIiwgMTM6IFwiT1BUXCIsIDE0OiBcIk5MXCIsIDIwOiBcImFjY190aXRsZVwiLCAyMTogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMjI6IFwiYWNjX2Rlc2NyXCIsIDIzOiBcImFjY19kZXNjcl92YWx1ZVwiLCAyNDogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDI1OiBcInNlY3Rpb25cIiwgMjc6IFwiQ0hFQ0tPVVRcIiwgMjk6IFwiQlJBTkNIXCIsIDMwOiBcIk9SREVSXCIsIDMxOiBcIk5VTVwiLCAzMjogXCJDSEVSUllfUElDS1wiLCAzMzogXCJDT01NSVRfSURcIiwgMzQ6IFwiU1RSXCIsIDM1OiBcIkNPTU1JVF9UQUdcIiwgMzY6IFwiRU1QVFlTVFJcIiwgMzc6IFwiTUVSR0VcIiwgMzg6IFwiQ09NTUlUX1RZUEVcIiwgNDA6IFwiQ09NTUlUXCIsIDQyOiBcIkNPTU1JVF9NU0dcIiwgNDM6IFwiTk9STUFMXCIsIDQ0OiBcIlJFVkVSU0VcIiwgNDU6IFwiSElHSExJR0hUXCIsIDUwOiBcIm9wZW5fZGlyZWN0aXZlXCIsIDUxOiBcInR5cGVfZGlyZWN0aXZlXCIsIDUyOiBcImFyZ19kaXJlY3RpdmVcIiwgNTM6IFwiY2xvc2VfZGlyZWN0aXZlXCIsIDU0OiBcIklEXCIsIDU1OiBcIjtcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDJdLCBbMywgM10sIFszLCA0XSwgWzMsIDVdLCBbNywgMF0sIFs3LCAyXSwgWzExLCAyXSwgWzExLCAxXSwgWzEyLCAwXSwgWzEyLCAyXSwgWzE1LCAyXSwgWzE1LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAyXSwgWzE2LCAyXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAyXSwgWzI2LCAyXSwgWzI2LCA0XSwgWzE5LCAzXSwgWzE5LCA1XSwgWzE5LCA1XSwgWzE5LCA1XSwgWzE5LCA1XSwgWzE4LCAyXSwgWzE4LCA0XSwgWzE4LCA0XSwgWzE4LCA0XSwgWzE4LCA2XSwgWzE4LCA2XSwgWzE4LCA2XSwgWzE4LCA2XSwgWzE4LCA2XSwgWzE4LCA2XSwgWzE4LCA4XSwgWzE4LCA4XSwgWzE4LCA4XSwgWzE4LCA4XSwgWzE4LCA4XSwgWzE4LCA4XSwgWzE3LCAyXSwgWzE3LCAzXSwgWzE3LCAzXSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCAzXSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCAzXSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA3XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzE3LCA5XSwgWzQxLCAwXSwgWzQxLCAxXSwgWzM5LCAxXSwgWzM5LCAxXSwgWzM5LCAxXSwgWzUsIDNdLCBbNSwgNV0sIFs0NiwgMV0sIFs0NywgMV0sIFs0OSwgMV0sIFs0OCwgMV0sIFsyOCwgMV0sIFsyOCwgMV0sIFs0LCAxXSwgWzQsIDFdLCBbNCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiAkJFskMF07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gJCRbJDAgLSAxXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbigkJFskMCAtIDNdKTtcbiAgICAgICAgICByZXR1cm4gJCRbJDAgLSAxXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHl5LnNldE9wdGlvbnMoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgJCRbJDAgLSAxXSArPSAkJFskMF07XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgeXkuY2hlY2tvdXQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5icmFuY2goJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB5eS5icmFuY2goJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB5eS5jaGVycnlQaWNrKCQkWyQwXSwgXCJcIiwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB5eS5jaGVycnlQaWNrKCQkWyQwIC0gMl0sIFwiXCIsICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgeXkuY2hlcnJ5UGljaygkJFskMCAtIDJdLCBcIlwiLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICB5eS5jaGVycnlQaWNrKCQkWyQwXSwgXCJcIiwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDBdLCBcIlwiLCBcIlwiLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB5eS5tZXJnZSgkJFskMCAtIDJdLCAkJFskMF0sIFwiXCIsIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHl5Lm1lcmdlKCQkWyQwIC0gMl0sIFwiXCIsICQkWyQwXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDAgLSAyXSwgXCJcIiwgXCJcIiwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB5eS5tZXJnZSgkJFskMCAtIDRdLCAkJFskMF0sIFwiXCIsICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHl5Lm1lcmdlKCQkWyQwIC0gNF0sIFwiXCIsICQkWyQwXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDAgLSA0XSwgXCJcIiwgJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB5eS5tZXJnZSgkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMF0sIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIHl5Lm1lcmdlKCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sIFwiXCIsICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDAgLSA0XSwgJCRbJDBdLCAkJFskMCAtIDJdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB5eS5tZXJnZSgkJFskMCAtIDZdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHl5Lm1lcmdlKCQkWyQwIC0gNl0sICQkWyQwXSwgJCRbJDAgLSA0XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB5eS5tZXJnZSgkJFskMCAtIDZdLCAkJFskMCAtIDJdLCAkJFskMCAtIDRdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHl5Lm1lcmdlKCQkWyQwIC0gNl0sICQkWyQwXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgeXkubWVyZ2UoJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSwgJCRbJDBdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICB5eS5jb21taXQoXCJcIiwgXCJcIiwgeXkuY29tbWl0VHlwZS5OT1JNQUwsICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsIFwiXCIsICQkWyQwXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsIFwiXCIsICQkWyQwXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsIFwiXCIsICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwXSwgeXkuY29tbWl0VHlwZS5OT1JNQUwsIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgIHl5LmNvbW1pdChcIlwiLCAkJFskMCAtIDJdLCB5eS5jb21taXRUeXBlLk5PUk1BTCwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB5eS5jb21taXQoXCJcIiwgJCRbJDBdLCB5eS5jb21taXRUeXBlLk5PUk1BTCwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwIC0gMl0sICQkWyQwXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwXSwgJCRbJDAgLSAyXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwIC0gNF0sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwIC0gNF0sICQkWyQwXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwXSwgJCRbJDAgLSA0XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgeXkuY29tbWl0KFwiXCIsICQkWyQwIC0gMl0sICQkWyQwXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwXSwgXCJcIiwgeXkuY29tbWl0VHlwZS5OT1JNQUwsIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMF0sIFwiXCIsIHl5LmNvbW1pdFR5cGUuTk9STUFMLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgXCJcIiwgeXkuY29tbWl0VHlwZS5OT1JNQUwsICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwIC0gMl0sIFwiXCIsICQkWyQwXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwXSwgXCJcIiwgJCRbJDAgLSAyXSwgXCJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwXSwgJCRbJDAgLSAyXSwgeXkuY29tbWl0VHlwZS5OT1JNQUwsIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDJdLCAkJFskMF0sIHl5LmNvbW1pdFR5cGUuTk9STUFMLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgXCJcIiwgJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgXCJcIiwgJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgXCJcIiwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCBcIlwiLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCBcIlwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgXCJcIiwgJCRbJDBdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgJCRbJDBdLCAkJFskMCAtIDJdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgJCRbJDAgLSAyXSwgJCRbJDBdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDBdLCAkJFskMCAtIDRdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDJdLCAkJFskMCAtIDRdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDAgLSA0XSwgJCRbJDBdLCBcIlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgJCRbJDBdLCB5eS5jb21taXRUeXBlLk5PUk1BTCwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sIHl5LmNvbW1pdFR5cGUuTk9STUFMLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDJdLCAkJFskMF0sIHl5LmNvbW1pdFR5cGUuTk9STUFMLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDJdLCB5eS5jb21taXRUeXBlLk5PUk1BTCwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwXSwgJCRbJDAgLSA0XSwgeXkuY29tbWl0VHlwZS5OT1JNQUwsICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDJdLCAkJFskMCAtIDRdLCB5eS5jb21taXRUeXBlLk5PUk1BTCwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDBdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSwgJCRbJDBdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5MjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA2XSwgJCRbJDBdLCAkJFskMCAtIDJdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NDpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSA0XSwgJCRbJDAgLSA2XSwgJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDZdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDAgLSA2XSwgJCRbJDBdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDZdLCAkJFskMCAtIDJdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMCAtIDZdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwXSwgJCRbJDAgLSA2XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMF0sICQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwIC0gNl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDBdLCAkJFskMCAtIDRdLCAkJFskMCAtIDZdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sICQkWyQwXSwgJCRbJDAgLSA2XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA0OlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDRdLCAkJFskMF0sICQkWyQwIC0gMl0sICQkWyQwIC0gNl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDAgLSAyXSwgJCRbJDAgLSA0XSwgJCRbJDAgLSA2XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDY6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwXSwgJCRbJDAgLSA0XSwgJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDJdLCAkJFskMF0sICQkWyQwIC0gNl0sICQkWyQwIC0gNF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICB5eS5jb21taXQoJCRbJDBdLCAkJFskMCAtIDJdLCAkJFskMCAtIDZdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgeXkuY29tbWl0KCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sICQkWyQwIC0gNl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTEwOlxuICAgICAgICAgIHl5LmNvbW1pdCgkJFskMCAtIDRdLCAkJFskMF0sICQkWyQwIC0gNl0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICB0aGlzLiQgPSBcIlwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTEzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmNvbW1pdFR5cGUuTk9STUFMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5jb21taXRUeXBlLlJFVkVSU0U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmNvbW1pdFR5cGUuSElHSExJR0hUO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExODpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIiUle1wiLCBcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOTpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICQkWyQwXSA9ICQkWyQwXS50cmltKCkucmVwbGFjZSgvJy9nLCAnXCInKTtcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCJ9JSVcIiwgXCJjbG9zZV9kaXJlY3RpdmVcIiwgXCJnaXRHcmFwaFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAyLCA1OiAzLCA2OiAkVjAsIDg6ICRWMSwgMTQ6ICRWMiwgNDY6IDgsIDUwOiAkVjMsIDU1OiAkVjQgfSwgeyAxOiBbM10gfSwgeyAzOiAxMCwgNDogMiwgNTogMywgNjogJFYwLCA4OiAkVjEsIDE0OiAkVjIsIDQ2OiA4LCA1MDogJFYzLCA1NTogJFY0IH0sIHsgMzogMTEsIDQ6IDIsIDU6IDMsIDY6ICRWMCwgODogJFYxLCAxNDogJFYyLCA0NjogOCwgNTA6ICRWMywgNTU6ICRWNCB9LCB7IDc6IDEyLCA4OiAkVjUsIDk6IFsxLCAxM10sIDEwOiBbMSwgMTRdLCAxMTogMTUsIDE0OiAkVjYgfSwgbygkVjcsIFsyLCAxMjRdKSwgbygkVjcsIFsyLCAxMjVdKSwgbygkVjcsIFsyLCAxMjZdKSwgeyA0NzogMTcsIDUxOiBbMSwgMThdIH0sIHsgNTE6IFsyLCAxMThdIH0sIHsgMTogWzIsIDFdIH0sIHsgMTogWzIsIDJdIH0sIHsgODogWzEsIDE5XSB9LCB7IDc6IDIwLCA4OiAkVjUsIDExOiAxNSwgMTQ6ICRWNiB9LCB7IDk6IFsxLCAyMV0gfSwgbygkVjgsIFsyLCAxMF0sIHsgMTI6IDIyLCAxMzogWzEsIDIzXSB9KSwgbygkVjksIFsyLCA5XSksIHsgOTogWzEsIDI1XSwgNDg6IDI0LCA1MzogJFZhIH0sIG8oWzksIDUzXSwgWzIsIDExOV0pLCB7IDE6IFsyLCAzXSB9LCB7IDg6IFsxLCAyN10gfSwgeyA3OiAyOCwgODogJFY1LCAxMTogMTUsIDE0OiAkVjYgfSwgeyA4OiBbMiwgN10sIDE0OiBbMSwgMzFdLCAxNTogMjksIDE2OiAzMCwgMTc6IDMyLCAxODogMzMsIDE5OiAzNCwgMjA6IFsxLCAzNV0sIDIyOiBbMSwgMzZdLCAyNDogWzEsIDM3XSwgMjU6IFsxLCAzOF0sIDI2OiAzOSwgMjc6IFsxLCA0MF0sIDI5OiBbMSwgNDRdLCAzMjogWzEsIDQzXSwgMzc6IFsxLCA0Ml0sIDQwOiBbMSwgNDFdIH0sIG8oJFY5LCBbMiwgOF0pLCBvKCRWYiwgWzIsIDExNl0pLCB7IDQ5OiA0NSwgNTI6IFsxLCA0Nl0gfSwgbygkVmIsIFsyLCAxMjFdKSwgeyAxOiBbMiwgNF0gfSwgeyA4OiBbMSwgNDddIH0sIG8oJFY4LCBbMiwgMTFdKSwgeyA0OiA0OCwgODogJFYxLCAxNDogJFYyLCA1NTogJFY0IH0sIG8oJFY4LCBbMiwgMTNdKSwgbygkVmMsIFsyLCAxNF0pLCBvKCRWYywgWzIsIDE1XSksIG8oJFZjLCBbMiwgMTZdKSwgeyAyMTogWzEsIDQ5XSB9LCB7IDIzOiBbMSwgNTBdIH0sIG8oJFZjLCBbMiwgMTldKSwgbygkVmMsIFsyLCAyMF0pLCBvKCRWYywgWzIsIDIxXSksIHsgMjg6IDUxLCAzNDogJFZkLCA1NDogJFZlIH0sIG8oJFZjLCBbMiwgMTExXSwgeyA0MTogNTQsIDMzOiBbMSwgNTddLCAzNDogWzEsIDU5XSwgMzU6IFsxLCA1NV0sIDM4OiBbMSwgNTZdLCA0MjogWzEsIDU4XSB9KSwgeyAyODogNjAsIDM0OiAkVmQsIDU0OiAkVmUgfSwgeyAzMzogWzEsIDYxXSwgMzU6IFsxLCA2Ml0gfSwgeyAyODogNjMsIDM0OiAkVmQsIDU0OiAkVmUgfSwgeyA0ODogNjQsIDUzOiAkVmEgfSwgeyA1MzogWzIsIDEyMF0gfSwgeyAxOiBbMiwgNV0gfSwgbygkVjgsIFsyLCAxMl0pLCBvKCRWYywgWzIsIDE3XSksIG8oJFZjLCBbMiwgMThdKSwgbygkVmMsIFsyLCAyMl0pLCBvKCRWZiwgWzIsIDEyMl0pLCBvKCRWZiwgWzIsIDEyM10pLCBvKCRWYywgWzIsIDQ2XSksIHsgMzQ6IFsxLCA2NV0gfSwgeyAzOTogNjYsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDcwXSB9LCB7IDM0OiBbMSwgNzFdIH0sIG8oJFZjLCBbMiwgMTEyXSksIG8oJFZjLCBbMiwgMzBdLCB7IDMzOiBbMSwgNzJdLCAzNTogWzEsIDc0XSwgMzg6IFsxLCA3M10gfSksIHsgMzQ6IFsxLCA3NV0gfSwgeyAzNDogWzEsIDc2XSwgMzY6IFsxLCA3N10gfSwgbygkVmMsIFsyLCAyM10sIHsgMzA6IFsxLCA3OF0gfSksIG8oJFZiLCBbMiwgMTE3XSksIG8oJFZjLCBbMiwgNDddLCB7IDMzOiBbMSwgODBdLCAzODogWzEsIDc5XSwgNDI6IFsxLCA4MV0gfSksIG8oJFZjLCBbMiwgNDhdLCB7IDMzOiBbMSwgODNdLCAzNTogWzEsIDgyXSwgNDI6IFsxLCA4NF0gfSksIG8oJFZqLCBbMiwgMTEzXSksIG8oJFZqLCBbMiwgMTE0XSksIG8oJFZqLCBbMiwgMTE1XSksIG8oJFZjLCBbMiwgNTFdLCB7IDM1OiBbMSwgODVdLCAzODogWzEsIDg2XSwgNDI6IFsxLCA4N10gfSksIG8oJFZjLCBbMiwgNjJdLCB7IDMzOiBbMSwgOTBdLCAzNTogWzEsIDg4XSwgMzg6IFsxLCA4OV0gfSksIHsgMzQ6IFsxLCA5MV0gfSwgeyAzOTogOTIsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDkzXSB9LCBvKCRWYywgWzIsIDI1XSwgeyAzNTogWzEsIDk0XSB9KSwgeyAzMzogWzEsIDk1XSB9LCB7IDMzOiBbMSwgOTZdIH0sIHsgMzE6IFsxLCA5N10gfSwgeyAzOTogOTgsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDk5XSB9LCB7IDM0OiBbMSwgMTAwXSB9LCB7IDM0OiBbMSwgMTAxXSB9LCB7IDM0OiBbMSwgMTAyXSB9LCB7IDM0OiBbMSwgMTAzXSB9LCB7IDM0OiBbMSwgMTA0XSB9LCB7IDM5OiAxMDUsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDEwNl0gfSwgeyAzNDogWzEsIDEwN10gfSwgeyAzOTogMTA4LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAxMDldIH0sIG8oJFZjLCBbMiwgMzFdLCB7IDM1OiBbMSwgMTExXSwgMzg6IFsxLCAxMTBdIH0pLCBvKCRWYywgWzIsIDMyXSwgeyAzMzogWzEsIDExM10sIDM1OiBbMSwgMTEyXSB9KSwgbygkVmMsIFsyLCAzM10sIHsgMzM6IFsxLCAxMTRdLCAzODogWzEsIDExNV0gfSksIHsgMzQ6IFsxLCAxMTZdLCAzNjogWzEsIDExN10gfSwgeyAzNDogWzEsIDExOF0gfSwgeyAzNDogWzEsIDExOV0gfSwgbygkVmMsIFsyLCAyNF0pLCBvKCRWYywgWzIsIDQ5XSwgeyAzMzogWzEsIDEyMF0sIDQyOiBbMSwgMTIxXSB9KSwgbygkVmMsIFsyLCA1M10sIHsgMzg6IFsxLCAxMjJdLCA0MjogWzEsIDEyM10gfSksIG8oJFZjLCBbMiwgNjNdLCB7IDMzOiBbMSwgMTI1XSwgMzg6IFsxLCAxMjRdIH0pLCBvKCRWYywgWzIsIDUwXSwgeyAzMzogWzEsIDEyNl0sIDQyOiBbMSwgMTI3XSB9KSwgbygkVmMsIFsyLCA1NV0sIHsgMzU6IFsxLCAxMjhdLCA0MjogWzEsIDEyOV0gfSksIG8oJFZjLCBbMiwgNjZdLCB7IDMzOiBbMSwgMTMxXSwgMzU6IFsxLCAxMzBdIH0pLCBvKCRWYywgWzIsIDUyXSwgeyAzODogWzEsIDEzMl0sIDQyOiBbMSwgMTMzXSB9KSwgbygkVmMsIFsyLCA1NF0sIHsgMzU6IFsxLCAxMzRdLCA0MjogWzEsIDEzNV0gfSksIG8oJFZjLCBbMiwgNjddLCB7IDM1OiBbMSwgMTM3XSwgMzg6IFsxLCAxMzZdIH0pLCBvKCRWYywgWzIsIDY0XSwgeyAzMzogWzEsIDEzOV0sIDM4OiBbMSwgMTM4XSB9KSwgbygkVmMsIFsyLCA2NV0sIHsgMzM6IFsxLCAxNDFdLCAzNTogWzEsIDE0MF0gfSksIG8oJFZjLCBbMiwgNjhdLCB7IDM1OiBbMSwgMTQzXSwgMzg6IFsxLCAxNDJdIH0pLCB7IDM5OiAxNDQsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDE0NV0gfSwgeyAzNDogWzEsIDE0Nl0gfSwgeyAzNDogWzEsIDE0N10gfSwgeyAzNDogWzEsIDE0OF0gfSwgeyAzOTogMTQ5LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIG8oJFZjLCBbMiwgMjZdKSwgbygkVmMsIFsyLCAyN10pLCBvKCRWYywgWzIsIDI4XSksIG8oJFZjLCBbMiwgMjldKSwgeyAzNDogWzEsIDE1MF0gfSwgeyAzNDogWzEsIDE1MV0gfSwgeyAzOTogMTUyLCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAxNTNdIH0sIHsgMzk6IDE1NCwgNDM6ICRWZywgNDQ6ICRWaCwgNDU6ICRWaSB9LCB7IDM0OiBbMSwgMTU1XSB9LCB7IDM0OiBbMSwgMTU2XSB9LCB7IDM0OiBbMSwgMTU3XSB9LCB7IDM0OiBbMSwgMTU4XSB9LCB7IDM0OiBbMSwgMTU5XSB9LCB7IDM0OiBbMSwgMTYwXSB9LCB7IDM0OiBbMSwgMTYxXSB9LCB7IDM5OiAxNjIsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDE2M10gfSwgeyAzNDogWzEsIDE2NF0gfSwgeyAzNDogWzEsIDE2NV0gfSwgeyAzOTogMTY2LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAxNjddIH0sIHsgMzk6IDE2OCwgNDM6ICRWZywgNDQ6ICRWaCwgNDU6ICRWaSB9LCB7IDM0OiBbMSwgMTY5XSB9LCB7IDM0OiBbMSwgMTcwXSB9LCB7IDM0OiBbMSwgMTcxXSB9LCB7IDM5OiAxNzIsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDE3M10gfSwgbygkVmMsIFsyLCAzN10sIHsgMzU6IFsxLCAxNzRdIH0pLCBvKCRWYywgWzIsIDM4XSwgeyAzODogWzEsIDE3NV0gfSksIG8oJFZjLCBbMiwgMzZdLCB7IDMzOiBbMSwgMTc2XSB9KSwgbygkVmMsIFsyLCAzOV0sIHsgMzU6IFsxLCAxNzddIH0pLCBvKCRWYywgWzIsIDM0XSwgeyAzODogWzEsIDE3OF0gfSksIG8oJFZjLCBbMiwgMzVdLCB7IDMzOiBbMSwgMTc5XSB9KSwgbygkVmMsIFsyLCA2MF0sIHsgNDI6IFsxLCAxODBdIH0pLCBvKCRWYywgWzIsIDczXSwgeyAzMzogWzEsIDE4MV0gfSksIG8oJFZjLCBbMiwgNjFdLCB7IDQyOiBbMSwgMTgyXSB9KSwgbygkVmMsIFsyLCA4NF0sIHsgMzg6IFsxLCAxODNdIH0pLCBvKCRWYywgWzIsIDc0XSwgeyAzMzogWzEsIDE4NF0gfSksIG8oJFZjLCBbMiwgODNdLCB7IDM4OiBbMSwgMTg1XSB9KSwgbygkVmMsIFsyLCA1OV0sIHsgNDI6IFsxLCAxODZdIH0pLCBvKCRWYywgWzIsIDcyXSwgeyAzMzogWzEsIDE4N10gfSksIG8oJFZjLCBbMiwgNThdLCB7IDQyOiBbMSwgMTg4XSB9KSwgbygkVmMsIFsyLCA3OF0sIHsgMzU6IFsxLCAxODldIH0pLCBvKCRWYywgWzIsIDcxXSwgeyAzMzogWzEsIDE5MF0gfSksIG8oJFZjLCBbMiwgNzddLCB7IDM1OiBbMSwgMTkxXSB9KSwgbygkVmMsIFsyLCA1N10sIHsgNDI6IFsxLCAxOTJdIH0pLCBvKCRWYywgWzIsIDg1XSwgeyAzODogWzEsIDE5M10gfSksIG8oJFZjLCBbMiwgNTZdLCB7IDQyOiBbMSwgMTk0XSB9KSwgbygkVmMsIFsyLCA3OV0sIHsgMzU6IFsxLCAxOTVdIH0pLCBvKCRWYywgWzIsIDgwXSwgeyAzNTogWzEsIDE5Nl0gfSksIG8oJFZjLCBbMiwgODZdLCB7IDM4OiBbMSwgMTk3XSB9KSwgbygkVmMsIFsyLCA3MF0sIHsgMzM6IFsxLCAxOThdIH0pLCBvKCRWYywgWzIsIDgxXSwgeyAzODogWzEsIDE5OV0gfSksIG8oJFZjLCBbMiwgNjldLCB7IDMzOiBbMSwgMjAwXSB9KSwgbygkVmMsIFsyLCA3NV0sIHsgMzU6IFsxLCAyMDFdIH0pLCBvKCRWYywgWzIsIDc2XSwgeyAzNTogWzEsIDIwMl0gfSksIG8oJFZjLCBbMiwgODJdLCB7IDM4OiBbMSwgMjAzXSB9KSwgeyAzNDogWzEsIDIwNF0gfSwgeyAzOTogMjA1LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAyMDZdIH0sIHsgMzQ6IFsxLCAyMDddIH0sIHsgMzk6IDIwOCwgNDM6ICRWZywgNDQ6ICRWaCwgNDU6ICRWaSB9LCB7IDM0OiBbMSwgMjA5XSB9LCB7IDM0OiBbMSwgMjEwXSB9LCB7IDM0OiBbMSwgMjExXSB9LCB7IDM0OiBbMSwgMjEyXSB9LCB7IDM5OiAyMTMsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDIxNF0gfSwgeyAzOTogMjE1LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAyMTZdIH0sIHsgMzQ6IFsxLCAyMTddIH0sIHsgMzQ6IFsxLCAyMThdIH0sIHsgMzQ6IFsxLCAyMTldIH0sIHsgMzQ6IFsxLCAyMjBdIH0sIHsgMzQ6IFsxLCAyMjFdIH0sIHsgMzQ6IFsxLCAyMjJdIH0sIHsgMzk6IDIyMywgNDM6ICRWZywgNDQ6ICRWaCwgNDU6ICRWaSB9LCB7IDM0OiBbMSwgMjI0XSB9LCB7IDM0OiBbMSwgMjI1XSB9LCB7IDM0OiBbMSwgMjI2XSB9LCB7IDM5OiAyMjcsIDQzOiAkVmcsIDQ0OiAkVmgsIDQ1OiAkVmkgfSwgeyAzNDogWzEsIDIyOF0gfSwgeyAzOTogMjI5LCA0MzogJFZnLCA0NDogJFZoLCA0NTogJFZpIH0sIHsgMzQ6IFsxLCAyMzBdIH0sIHsgMzQ6IFsxLCAyMzFdIH0sIHsgMzQ6IFsxLCAyMzJdIH0sIHsgMzk6IDIzMywgNDM6ICRWZywgNDQ6ICRWaCwgNDU6ICRWaSB9LCBvKCRWYywgWzIsIDQwXSksIG8oJFZjLCBbMiwgNDJdKSwgbygkVmMsIFsyLCA0MV0pLCBvKCRWYywgWzIsIDQzXSksIG8oJFZjLCBbMiwgNDVdKSwgbygkVmMsIFsyLCA0NF0pLCBvKCRWYywgWzIsIDEwMV0pLCBvKCRWYywgWzIsIDEwMl0pLCBvKCRWYywgWzIsIDk5XSksIG8oJFZjLCBbMiwgMTAwXSksIG8oJFZjLCBbMiwgMTA0XSksIG8oJFZjLCBbMiwgMTAzXSksIG8oJFZjLCBbMiwgMTA4XSksIG8oJFZjLCBbMiwgMTA3XSksIG8oJFZjLCBbMiwgMTA2XSksIG8oJFZjLCBbMiwgMTA1XSksIG8oJFZjLCBbMiwgMTEwXSksIG8oJFZjLCBbMiwgMTA5XSksIG8oJFZjLCBbMiwgOThdKSwgbygkVmMsIFsyLCA5N10pLCBvKCRWYywgWzIsIDk2XSksIG8oJFZjLCBbMiwgOTVdKSwgbygkVmMsIFsyLCA5M10pLCBvKCRWYywgWzIsIDk0XSksIG8oJFZjLCBbMiwgOTJdKSwgbygkVmMsIFsyLCA5MV0pLCBvKCRWYywgWzIsIDkwXSksIG8oJFZjLCBbMiwgODldKSwgbygkVmMsIFsyLCA4N10pLCBvKCRWYywgWzIsIDg4XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDk6IFsyLCAxMThdLCAxMDogWzIsIDFdLCAxMTogWzIsIDJdLCAxOTogWzIsIDNdLCAyNzogWzIsIDRdLCA0NjogWzIsIDEyMF0sIDQ3OiBbMiwgNV0gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIDUyO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiA0MDtcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgcmV0dXJuIDMzO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgcmV0dXJuIDM1O1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiAzMDtcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiAyNztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA5O1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gXCJDQVJFVFwiO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwib3B0aW9uc1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIHJldHVybiAzNDtcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gNTQ7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86KFxccj9cXG4pKykvaSwgL14oPzojW15cXG5dKikvaSwgL14oPzolW15cXG5dKikvaSwgL14oPzpnaXRHcmFwaFxcYikvaSwgL14oPzpjb21taXQoPz1cXHN8JCkpL2ksIC9eKD86aWQ6KS9pLCAvXig/OnR5cGU6KS9pLCAvXig/Om1zZzopL2ksIC9eKD86Tk9STUFMXFxiKS9pLCAvXig/OlJFVkVSU0VcXGIpL2ksIC9eKD86SElHSExJR0hUXFxiKS9pLCAvXig/OnRhZzopL2ksIC9eKD86YnJhbmNoKD89XFxzfCQpKS9pLCAvXig/Om9yZGVyOikvaSwgL14oPzptZXJnZSg/PVxcc3wkKSkvaSwgL14oPzpjaGVycnktcGljayg/PVxcc3wkKSkvaSwgL14oPzpjaGVja291dCg/PVxcc3wkKSkvaSwgL14oPzpMUlxcYikvaSwgL14oPzpCVFxcYikvaSwgL14oPzo6KS9pLCAvXig/OlxcXikvaSwgL14oPzpvcHRpb25zXFxyP1xcbikvaSwgL14oPzpbIFxcclxcblxcdF0rZW5kXFxiKS9pLCAvXig/OltcXHNcXFNdKyg/PVsgXFxyXFxuXFx0XStlbmQpKS9pLCAvXig/OltcIl1bXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86WzAtOV0rKD89XFxzfCQpKS9pLCAvXig/OlxcdyhbLVxcLi9cXHddKlstXFx3XSk/KS9pLCAvXig/OiQpL2ksIC9eKD86XFxzKykvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzEwLCAxMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xvc2VfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhcmdfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMywgNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsyLCAzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm9wdGlvbnNcIjogeyBcInJ1bGVzXCI6IFszNCwgMzVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzM4LCAzOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDUsIDcsIDksIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNiwgMzcsIDQwLCA0MSwgNDIsIDQzXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG5jb25zdCBnaXRHcmFwaFBhcnNlciA9IHBhcnNlcjtcbmxldCBtYWluQnJhbmNoTmFtZSA9IGdldENvbmZpZygpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lO1xubGV0IG1haW5CcmFuY2hPcmRlciA9IGdldENvbmZpZygpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtcbmxldCBjb21taXRzID0ge307XG5sZXQgaGVhZCA9IG51bGw7XG5sZXQgYnJhbmNoZXNDb25maWcgPSB7fTtcbmJyYW5jaGVzQ29uZmlnW21haW5CcmFuY2hOYW1lXSA9IHsgbmFtZTogbWFpbkJyYW5jaE5hbWUsIG9yZGVyOiBtYWluQnJhbmNoT3JkZXIgfTtcbmxldCBicmFuY2hlcyA9IHt9O1xuYnJhbmNoZXNbbWFpbkJyYW5jaE5hbWVdID0gaGVhZDtcbmxldCBjdXJCcmFuY2ggPSBtYWluQnJhbmNoTmFtZTtcbmxldCBkaXJlY3Rpb24gPSBcIkxSXCI7XG5sZXQgc2VxID0gMDtcbmZ1bmN0aW9uIGdldElkKCkge1xuICByZXR1cm4gcmFuZG9tKHsgbGVuZ3RoOiA3IH0pO1xufVxuY29uc3QgcGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbihzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpIHtcbiAgbWVybWFpZEFQSS5wYXJzZURpcmVjdGl2ZSh0aGlzLCBzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpO1xufTtcbmZ1bmN0aW9uIHVuaXFCeShsaXN0LCBmbikge1xuICBjb25zdCByZWNvcmRNYXAgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGxpc3QucmVkdWNlKChvdXQsIGl0ZW0pID0+IHtcbiAgICBjb25zdCBrZXkgPSBmbihpdGVtKTtcbiAgICBpZiAoIXJlY29yZE1hcFtrZXldKSB7XG4gICAgICByZWNvcmRNYXBba2V5XSA9IHRydWU7XG4gICAgICBvdXQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSwgW10pO1xufVxuY29uc3Qgc2V0RGlyZWN0aW9uID0gZnVuY3Rpb24oZGlyKSB7XG4gIGRpcmVjdGlvbiA9IGRpcjtcbn07XG5sZXQgb3B0aW9ucyA9IHt9O1xuY29uc3Qgc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHJhd09wdFN0cmluZykge1xuICBsb2cuZGVidWcoXCJvcHRpb25zIHN0clwiLCByYXdPcHRTdHJpbmcpO1xuICByYXdPcHRTdHJpbmcgPSByYXdPcHRTdHJpbmcgJiYgcmF3T3B0U3RyaW5nLnRyaW0oKTtcbiAgcmF3T3B0U3RyaW5nID0gcmF3T3B0U3RyaW5nIHx8IFwie31cIjtcbiAgdHJ5IHtcbiAgICBvcHRpb25zID0gSlNPTi5wYXJzZShyYXdPcHRTdHJpbmcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zXCIsIGUubWVzc2FnZSk7XG4gIH1cbn07XG5jb25zdCBnZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBvcHRpb25zO1xufTtcbmNvbnN0IGNvbW1pdCA9IGZ1bmN0aW9uKG1zZywgaWQsIHR5cGUsIHRhZykge1xuICBsb2cuZGVidWcoXCJFbnRlcmluZyBjb21taXQ6XCIsIG1zZywgaWQsIHR5cGUsIHRhZyk7XG4gIGlkID0gY29tbW9uLnNhbml0aXplVGV4dChpZCwgZ2V0Q29uZmlnKCkpO1xuICBtc2cgPSBjb21tb24uc2FuaXRpemVUZXh0KG1zZywgZ2V0Q29uZmlnKCkpO1xuICB0YWcgPSBjb21tb24uc2FuaXRpemVUZXh0KHRhZywgZ2V0Q29uZmlnKCkpO1xuICBjb25zdCBjb21taXQyID0ge1xuICAgIGlkOiBpZCA/IGlkIDogc2VxICsgXCItXCIgKyBnZXRJZCgpLFxuICAgIG1lc3NhZ2U6IG1zZyxcbiAgICBzZXE6IHNlcSsrLFxuICAgIHR5cGU6IHR5cGUgPyB0eXBlIDogY29tbWl0VHlwZSQxLk5PUk1BTCxcbiAgICB0YWc6IHRhZyA/IHRhZyA6IFwiXCIsXG4gICAgcGFyZW50czogaGVhZCA9PSBudWxsID8gW10gOiBbaGVhZC5pZF0sXG4gICAgYnJhbmNoOiBjdXJCcmFuY2hcbiAgfTtcbiAgaGVhZCA9IGNvbW1pdDI7XG4gIGNvbW1pdHNbY29tbWl0Mi5pZF0gPSBjb21taXQyO1xuICBicmFuY2hlc1tjdXJCcmFuY2hdID0gY29tbWl0Mi5pZDtcbiAgbG9nLmRlYnVnKFwiaW4gcHVzaENvbW1pdCBcIiArIGNvbW1pdDIuaWQpO1xufTtcbmNvbnN0IGJyYW5jaCA9IGZ1bmN0aW9uKG5hbWUsIG9yZGVyKSB7XG4gIG5hbWUgPSBjb21tb24uc2FuaXRpemVUZXh0KG5hbWUsIGdldENvbmZpZygpKTtcbiAgaWYgKGJyYW5jaGVzW25hbWVdID09PSB2b2lkIDApIHtcbiAgICBicmFuY2hlc1tuYW1lXSA9IGhlYWQgIT0gbnVsbCA/IGhlYWQuaWQgOiBudWxsO1xuICAgIGJyYW5jaGVzQ29uZmlnW25hbWVdID0geyBuYW1lLCBvcmRlcjogb3JkZXIgPyBwYXJzZUludChvcmRlciwgMTApIDogbnVsbCB9O1xuICAgIGNoZWNrb3V0KG5hbWUpO1xuICAgIGxvZy5kZWJ1ZyhcImluIGNyZWF0ZUJyYW5jaFwiKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnVHJ5aW5nIHRvIGNyZWF0ZSBhbiBleGlzdGluZyBicmFuY2guIChIZWxwOiBFaXRoZXIgdXNlIGEgbmV3IG5hbWUgaWYgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGJyYW5jaCBvciB0cnkgdXNpbmcgXCJjaGVja291dCAnICsgbmFtZSArICdcIiknXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogXCJicmFuY2ggXCIgKyBuYW1lLFxuICAgICAgdG9rZW46IFwiYnJhbmNoIFwiICsgbmFtZSxcbiAgICAgIGxpbmU6IFwiMVwiLFxuICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgZXhwZWN0ZWQ6IFsnXCJjaGVja291dCAnICsgbmFtZSArICdcIiddXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IG1lcmdlID0gZnVuY3Rpb24ob3RoZXJCcmFuY2gsIGN1c3RvbV9pZCwgb3ZlcnJpZGVfdHlwZSwgY3VzdG9tX3RhZykge1xuICBvdGhlckJyYW5jaCA9IGNvbW1vbi5zYW5pdGl6ZVRleHQob3RoZXJCcmFuY2gsIGdldENvbmZpZygpKTtcbiAgY3VzdG9tX2lkID0gY29tbW9uLnNhbml0aXplVGV4dChjdXN0b21faWQsIGdldENvbmZpZygpKTtcbiAgY29uc3QgY3VycmVudENvbW1pdCA9IGNvbW1pdHNbYnJhbmNoZXNbY3VyQnJhbmNoXV07XG4gIGNvbnN0IG90aGVyQ29tbWl0ID0gY29tbWl0c1ticmFuY2hlc1tvdGhlckJyYW5jaF1dO1xuICBpZiAoY3VyQnJhbmNoID09PSBvdGhlckJyYW5jaCkge1xuICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBcIm1lcmdlIFwiICsgb3RoZXJCcmFuY2gsXG4gICAgICB0b2tlbjogXCJtZXJnZSBcIiArIG90aGVyQnJhbmNoLFxuICAgICAgbGluZTogXCIxXCIsXG4gICAgICBsb2M6IHsgZmlyc3RfbGluZTogMSwgbGFzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDEsIGxhc3RfY29sdW1uOiAxIH0sXG4gICAgICBleHBlY3RlZDogW1wiYnJhbmNoIGFiY1wiXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZWxzZSBpZiAoY3VycmVudENvbW1pdCA9PT0gdm9pZCAwIHx8ICFjdXJyZW50Q29tbWl0KSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEN1cnJlbnQgYnJhbmNoICgnICsgY3VyQnJhbmNoICsgXCIpaGFzIG5vIGNvbW1pdHNcIlxuICAgICk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IFwibWVyZ2UgXCIgKyBvdGhlckJyYW5jaCxcbiAgICAgIHRva2VuOiBcIm1lcmdlIFwiICsgb3RoZXJCcmFuY2gsXG4gICAgICBsaW5lOiBcIjFcIixcbiAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgIGV4cGVjdGVkOiBbXCJjb21taXRcIl1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9IGVsc2UgaWYgKGJyYW5jaGVzW290aGVyQnJhbmNoXSA9PT0gdm9pZCAwKSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcgKyBvdGhlckJyYW5jaCArIFwiKSBkb2VzIG5vdCBleGlzdFwiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogXCJtZXJnZSBcIiArIG90aGVyQnJhbmNoLFxuICAgICAgdG9rZW46IFwibWVyZ2UgXCIgKyBvdGhlckJyYW5jaCxcbiAgICAgIGxpbmU6IFwiMVwiLFxuICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgZXhwZWN0ZWQ6IFtcImJyYW5jaCBcIiArIG90aGVyQnJhbmNoXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZWxzZSBpZiAob3RoZXJDb21taXQgPT09IHZvaWQgMCB8fCAhb3RoZXJDb21taXQpIHtcbiAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJyArIG90aGVyQnJhbmNoICsgXCIpIGhhcyBubyBjb21taXRzXCJcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBcIm1lcmdlIFwiICsgb3RoZXJCcmFuY2gsXG4gICAgICB0b2tlbjogXCJtZXJnZSBcIiArIG90aGVyQnJhbmNoLFxuICAgICAgbGluZTogXCIxXCIsXG4gICAgICBsb2M6IHsgZmlyc3RfbGluZTogMSwgbGFzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDEsIGxhc3RfY29sdW1uOiAxIH0sXG4gICAgICBleHBlY3RlZDogWydcImNvbW1pdFwiJ11cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRDb21taXQgPT09IG90aGVyQ29tbWl0KSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJtZXJnZVwiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IFwibWVyZ2UgXCIgKyBvdGhlckJyYW5jaCxcbiAgICAgIHRva2VuOiBcIm1lcmdlIFwiICsgb3RoZXJCcmFuY2gsXG4gICAgICBsaW5lOiBcIjFcIixcbiAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgIGV4cGVjdGVkOiBbXCJicmFuY2ggYWJjXCJdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBlbHNlIGlmIChjdXN0b21faWQgJiYgY29tbWl0c1tjdXN0b21faWRdICE9PSB2b2lkIDApIHtcbiAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ29tbWl0IHdpdGggaWQ6JyArIGN1c3RvbV9pZCArIFwiIGFscmVhZHkgZXhpc3RzLCB1c2UgZGlmZmVyZW50IGN1c3RvbSBJZFwiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogXCJtZXJnZSBcIiArIG90aGVyQnJhbmNoICsgY3VzdG9tX2lkICsgb3ZlcnJpZGVfdHlwZSArIGN1c3RvbV90YWcsXG4gICAgICB0b2tlbjogXCJtZXJnZSBcIiArIG90aGVyQnJhbmNoICsgY3VzdG9tX2lkICsgb3ZlcnJpZGVfdHlwZSArIGN1c3RvbV90YWcsXG4gICAgICBsaW5lOiBcIjFcIixcbiAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgIGV4cGVjdGVkOiBbXG4gICAgICAgIFwibWVyZ2UgXCIgKyBvdGhlckJyYW5jaCArIFwiIFwiICsgY3VzdG9tX2lkICsgXCJfVU5JUVVFIFwiICsgb3ZlcnJpZGVfdHlwZSArIFwiIFwiICsgY3VzdG9tX3RhZ1xuICAgICAgXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3QgY29tbWl0MiA9IHtcbiAgICBpZDogY3VzdG9tX2lkID8gY3VzdG9tX2lkIDogc2VxICsgXCItXCIgKyBnZXRJZCgpLFxuICAgIG1lc3NhZ2U6IFwibWVyZ2VkIGJyYW5jaCBcIiArIG90aGVyQnJhbmNoICsgXCIgaW50byBcIiArIGN1ckJyYW5jaCxcbiAgICBzZXE6IHNlcSsrLFxuICAgIHBhcmVudHM6IFtoZWFkID09IG51bGwgPyBudWxsIDogaGVhZC5pZCwgYnJhbmNoZXNbb3RoZXJCcmFuY2hdXSxcbiAgICBicmFuY2g6IGN1ckJyYW5jaCxcbiAgICB0eXBlOiBjb21taXRUeXBlJDEuTUVSR0UsXG4gICAgY3VzdG9tVHlwZTogb3ZlcnJpZGVfdHlwZSxcbiAgICBjdXN0b21JZDogY3VzdG9tX2lkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHRhZzogY3VzdG9tX3RhZyA/IGN1c3RvbV90YWcgOiBcIlwiXG4gIH07XG4gIGhlYWQgPSBjb21taXQyO1xuICBjb21taXRzW2NvbW1pdDIuaWRdID0gY29tbWl0MjtcbiAgYnJhbmNoZXNbY3VyQnJhbmNoXSA9IGNvbW1pdDIuaWQ7XG4gIGxvZy5kZWJ1ZyhicmFuY2hlcyk7XG4gIGxvZy5kZWJ1ZyhcImluIG1lcmdlQnJhbmNoXCIpO1xufTtcbmNvbnN0IGNoZXJyeVBpY2sgPSBmdW5jdGlvbihzb3VyY2VJZCwgdGFyZ2V0SWQsIHRhZykge1xuICBsb2cuZGVidWcoXCJFbnRlcmluZyBjaGVycnlQaWNrOlwiLCBzb3VyY2VJZCwgdGFyZ2V0SWQsIHRhZyk7XG4gIHNvdXJjZUlkID0gY29tbW9uLnNhbml0aXplVGV4dChzb3VyY2VJZCwgZ2V0Q29uZmlnKCkpO1xuICB0YXJnZXRJZCA9IGNvbW1vbi5zYW5pdGl6ZVRleHQodGFyZ2V0SWQsIGdldENvbmZpZygpKTtcbiAgdGFnID0gY29tbW9uLnNhbml0aXplVGV4dCh0YWcsIGdldENvbmZpZygpKTtcbiAgaWYgKCFzb3VyY2VJZCB8fCBjb21taXRzW3NvdXJjZUlkXSA9PT0gdm9pZCAwKSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcImNoZXJyeVBpY2tcIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJ1xuICAgICk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IFwiY2hlcnJ5UGljayBcIiArIHNvdXJjZUlkICsgXCIgXCIgKyB0YXJnZXRJZCxcbiAgICAgIHRva2VuOiBcImNoZXJyeVBpY2sgXCIgKyBzb3VyY2VJZCArIFwiIFwiICsgdGFyZ2V0SWQsXG4gICAgICBsaW5lOiBcIjFcIixcbiAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGxldCBzb3VyY2VDb21taXQgPSBjb21taXRzW3NvdXJjZUlkXTtcbiAgbGV0IHNvdXJjZUNvbW1pdEJyYW5jaCA9IHNvdXJjZUNvbW1pdC5icmFuY2g7XG4gIGlmIChzb3VyY2VDb21taXQudHlwZSA9PT0gY29tbWl0VHlwZSQxLk1FUkdFKSB7XG4gICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcImNoZXJyeVBpY2tcIi4gU291cmNlIGNvbW1pdCBzaG91bGQgbm90IGJlIGEgbWVyZ2UgY29tbWl0J1xuICAgICk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IFwiY2hlcnJ5UGljayBcIiArIHNvdXJjZUlkICsgXCIgXCIgKyB0YXJnZXRJZCxcbiAgICAgIHRva2VuOiBcImNoZXJyeVBpY2sgXCIgKyBzb3VyY2VJZCArIFwiIFwiICsgdGFyZ2V0SWQsXG4gICAgICBsaW5lOiBcIjFcIixcbiAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmICghdGFyZ2V0SWQgfHwgY29tbWl0c1t0YXJnZXRJZF0gPT09IHZvaWQgMCkge1xuICAgIGlmIChzb3VyY2VDb21taXRCcmFuY2ggPT09IGN1ckJyYW5jaCkge1xuICAgICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5UGlja1wiLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnXG4gICAgICApO1xuICAgICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgICAgdGV4dDogXCJjaGVycnlQaWNrIFwiICsgc291cmNlSWQgKyBcIiBcIiArIHRhcmdldElkLFxuICAgICAgICB0b2tlbjogXCJjaGVycnlQaWNrIFwiICsgc291cmNlSWQgKyBcIiBcIiArIHRhcmdldElkLFxuICAgICAgICBsaW5lOiBcIjFcIixcbiAgICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgICBleHBlY3RlZDogW1wiY2hlcnJ5LXBpY2sgYWJjXCJdXG4gICAgICB9O1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRDb21taXQgPSBjb21taXRzW2JyYW5jaGVzW2N1ckJyYW5jaF1dO1xuICAgIGlmIChjdXJyZW50Q29tbWl0ID09PSB2b2lkIDAgfHwgIWN1cnJlbnRDb21taXQpIHtcbiAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcImNoZXJyeS1waWNrXCIuIEN1cnJlbnQgYnJhbmNoICgnICsgY3VyQnJhbmNoICsgXCIpaGFzIG5vIGNvbW1pdHNcIlxuICAgICAgKTtcbiAgICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICAgIHRleHQ6IFwiY2hlcnJ5UGljayBcIiArIHNvdXJjZUlkICsgXCIgXCIgKyB0YXJnZXRJZCxcbiAgICAgICAgdG9rZW46IFwiY2hlcnJ5UGljayBcIiArIHNvdXJjZUlkICsgXCIgXCIgKyB0YXJnZXRJZCxcbiAgICAgICAgbGluZTogXCIxXCIsXG4gICAgICAgIGxvYzogeyBmaXJzdF9saW5lOiAxLCBsYXN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMSwgbGFzdF9jb2x1bW46IDEgfSxcbiAgICAgICAgZXhwZWN0ZWQ6IFtcImNoZXJyeS1waWNrIGFiY1wiXVxuICAgICAgfTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBjb21taXQyID0ge1xuICAgICAgaWQ6IHNlcSArIFwiLVwiICsgZ2V0SWQoKSxcbiAgICAgIG1lc3NhZ2U6IFwiY2hlcnJ5LXBpY2tlZCBcIiArIHNvdXJjZUNvbW1pdCArIFwiIGludG8gXCIgKyBjdXJCcmFuY2gsXG4gICAgICBzZXE6IHNlcSsrLFxuICAgICAgcGFyZW50czogW2hlYWQgPT0gbnVsbCA/IG51bGwgOiBoZWFkLmlkLCBzb3VyY2VDb21taXQuaWRdLFxuICAgICAgYnJhbmNoOiBjdXJCcmFuY2gsXG4gICAgICB0eXBlOiBjb21taXRUeXBlJDEuQ0hFUlJZX1BJQ0ssXG4gICAgICB0YWc6IHRhZyA/PyBcImNoZXJyeS1waWNrOlwiICsgc291cmNlQ29tbWl0LmlkXG4gICAgfTtcbiAgICBoZWFkID0gY29tbWl0MjtcbiAgICBjb21taXRzW2NvbW1pdDIuaWRdID0gY29tbWl0MjtcbiAgICBicmFuY2hlc1tjdXJCcmFuY2hdID0gY29tbWl0Mi5pZDtcbiAgICBsb2cuZGVidWcoYnJhbmNoZXMpO1xuICAgIGxvZy5kZWJ1ZyhcImluIGNoZXJyeVBpY2tcIik7XG4gIH1cbn07XG5jb25zdCBjaGVja291dCA9IGZ1bmN0aW9uKGJyYW5jaDIpIHtcbiAgYnJhbmNoMiA9IGNvbW1vbi5zYW5pdGl6ZVRleHQoYnJhbmNoMiwgZ2V0Q29uZmlnKCkpO1xuICBpZiAoYnJhbmNoZXNbYnJhbmNoMl0gPT09IHZvaWQgMCkge1xuICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nIFwiYnJhbmNoICcgKyBicmFuY2gyICsgJ1wiKSdcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBcImNoZWNrb3V0IFwiICsgYnJhbmNoMixcbiAgICAgIHRva2VuOiBcImNoZWNrb3V0IFwiICsgYnJhbmNoMixcbiAgICAgIGxpbmU6IFwiMVwiLFxuICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgZXhwZWN0ZWQ6IFsnXCJicmFuY2ggJyArIGJyYW5jaDIgKyAnXCInXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAgY3VyQnJhbmNoID0gYnJhbmNoMjtcbiAgICBjb25zdCBpZCA9IGJyYW5jaGVzW2N1ckJyYW5jaF07XG4gICAgaGVhZCA9IGNvbW1pdHNbaWRdO1xuICB9XG59O1xuZnVuY3Rpb24gdXBzZXJ0KGFyciwga2V5LCBuZXdWYWwpIHtcbiAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZihrZXkpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgYXJyLnB1c2gobmV3VmFsKTtcbiAgfSBlbHNlIHtcbiAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBuZXdWYWwpO1xuICB9XG59XG5mdW5jdGlvbiBwcmV0dHlQcmludENvbW1pdEhpc3RvcnkoY29tbWl0QXJyKSB7XG4gIGNvbnN0IGNvbW1pdDIgPSBjb21taXRBcnIucmVkdWNlKChvdXQsIGNvbW1pdDMpID0+IHtcbiAgICBpZiAob3V0LnNlcSA+IGNvbW1pdDMuc2VxKSB7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICByZXR1cm4gY29tbWl0MztcbiAgfSwgY29tbWl0QXJyWzBdKTtcbiAgbGV0IGxpbmUgPSBcIlwiO1xuICBjb21taXRBcnIuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgaWYgKGMgPT09IGNvbW1pdDIpIHtcbiAgICAgIGxpbmUgKz0gXCJcdCpcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSArPSBcIlx0fFwiO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGxhYmVsID0gW2xpbmUsIGNvbW1pdDIuaWQsIGNvbW1pdDIuc2VxXTtcbiAgZm9yIChsZXQgYnJhbmNoMiBpbiBicmFuY2hlcykge1xuICAgIGlmIChicmFuY2hlc1ticmFuY2gyXSA9PT0gY29tbWl0Mi5pZCkge1xuICAgICAgbGFiZWwucHVzaChicmFuY2gyKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGxhYmVsLmpvaW4oXCIgXCIpKTtcbiAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID09IDIpIHtcbiAgICBjb25zdCBuZXdDb21taXQgPSBjb21taXRzW2NvbW1pdDIucGFyZW50c1swXV07XG4gICAgdXBzZXJ0KGNvbW1pdEFyciwgY29tbWl0MiwgbmV3Q29tbWl0KTtcbiAgICBjb21taXRBcnIucHVzaChjb21taXRzW2NvbW1pdDIucGFyZW50c1sxXV0pO1xuICB9IGVsc2UgaWYgKGNvbW1pdDIucGFyZW50cy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBuZXh0Q29tbWl0ID0gY29tbWl0c1tjb21taXQyLnBhcmVudHNdO1xuICAgIHVwc2VydChjb21taXRBcnIsIGNvbW1pdDIsIG5leHRDb21taXQpO1xuICB9XG4gIGNvbW1pdEFyciA9IHVuaXFCeShjb21taXRBcnIsIChjKSA9PiBjLmlkKTtcbiAgcHJldHR5UHJpbnRDb21taXRIaXN0b3J5KGNvbW1pdEFycik7XG59XG5jb25zdCBwcmV0dHlQcmludCA9IGZ1bmN0aW9uKCkge1xuICBsb2cuZGVidWcoY29tbWl0cyk7XG4gIGNvbnN0IG5vZGUgPSBnZXRDb21taXRzQXJyYXkoKVswXTtcbiAgcHJldHR5UHJpbnRDb21taXRIaXN0b3J5KFtub2RlXSk7XG59O1xuY29uc3QgY2xlYXIkMSA9IGZ1bmN0aW9uKCkge1xuICBjb21taXRzID0ge307XG4gIGhlYWQgPSBudWxsO1xuICBsZXQgbWFpbkJyYW5jaCA9IGdldENvbmZpZygpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lO1xuICBsZXQgbWFpbkJyYW5jaE9yZGVyMiA9IGdldENvbmZpZygpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtcbiAgYnJhbmNoZXMgPSB7fTtcbiAgYnJhbmNoZXNbbWFpbkJyYW5jaF0gPSBudWxsO1xuICBicmFuY2hlc0NvbmZpZyA9IHt9O1xuICBicmFuY2hlc0NvbmZpZ1ttYWluQnJhbmNoXSA9IHsgbmFtZTogbWFpbkJyYW5jaCwgb3JkZXI6IG1haW5CcmFuY2hPcmRlcjIgfTtcbiAgY3VyQnJhbmNoID0gbWFpbkJyYW5jaDtcbiAgc2VxID0gMDtcbiAgY2xlYXIkMigpO1xufTtcbmNvbnN0IGdldEJyYW5jaGVzQXNPYmpBcnJheSA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCBicmFuY2hlc0FycmF5ID0gT2JqZWN0LnZhbHVlcyhicmFuY2hlc0NvbmZpZykubWFwKChicmFuY2hDb25maWcsIGkpID0+IHtcbiAgICBpZiAoYnJhbmNoQ29uZmlnLm9yZGVyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYnJhbmNoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnJhbmNoQ29uZmlnLFxuICAgICAgb3JkZXI6IHBhcnNlRmxvYXQoYDAuJHtpfWAsIDEwKVxuICAgIH07XG4gIH0pLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAoKHsgbmFtZSB9KSA9PiAoeyBuYW1lIH0pKTtcbiAgcmV0dXJuIGJyYW5jaGVzQXJyYXk7XG59O1xuY29uc3QgZ2V0QnJhbmNoZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJyYW5jaGVzO1xufTtcbmNvbnN0IGdldENvbW1pdHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbW1pdHM7XG59O1xuY29uc3QgZ2V0Q29tbWl0c0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGNvbW1pdEFyciA9IE9iamVjdC5rZXlzKGNvbW1pdHMpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gY29tbWl0c1trZXldO1xuICB9KTtcbiAgY29tbWl0QXJyLmZvckVhY2goZnVuY3Rpb24obykge1xuICAgIGxvZy5kZWJ1ZyhvLmlkKTtcbiAgfSk7XG4gIGNvbW1pdEFyci5zb3J0KChhLCBiKSA9PiBhLnNlcSAtIGIuc2VxKTtcbiAgcmV0dXJuIGNvbW1pdEFycjtcbn07XG5jb25zdCBnZXRDdXJyZW50QnJhbmNoID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjdXJCcmFuY2g7XG59O1xuY29uc3QgZ2V0RGlyZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkaXJlY3Rpb247XG59O1xuY29uc3QgZ2V0SGVhZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gaGVhZDtcbn07XG5jb25zdCBjb21taXRUeXBlJDEgPSB7XG4gIE5PUk1BTDogMCxcbiAgUkVWRVJTRTogMSxcbiAgSElHSExJR0hUOiAyLFxuICBNRVJHRTogMyxcbiAgQ0hFUlJZX1BJQ0s6IDRcbn07XG5jb25zdCBnaXRHcmFwaERiID0ge1xuICBwYXJzZURpcmVjdGl2ZSxcbiAgZ2V0Q29uZmlnOiAoKSA9PiBnZXRDb25maWcoKS5naXRHcmFwaCxcbiAgc2V0RGlyZWN0aW9uLFxuICBzZXRPcHRpb25zLFxuICBnZXRPcHRpb25zLFxuICBjb21taXQsXG4gIGJyYW5jaCxcbiAgbWVyZ2UsXG4gIGNoZXJyeVBpY2ssXG4gIGNoZWNrb3V0LFxuICAvL3Jlc2V0LFxuICBwcmV0dHlQcmludCxcbiAgY2xlYXI6IGNsZWFyJDEsXG4gIGdldEJyYW5jaGVzQXNPYmpBcnJheSxcbiAgZ2V0QnJhbmNoZXMsXG4gIGdldENvbW1pdHMsXG4gIGdldENvbW1pdHNBcnJheSxcbiAgZ2V0Q3VycmVudEJyYW5jaCxcbiAgZ2V0RGlyZWN0aW9uLFxuICBnZXRIZWFkLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGNvbW1pdFR5cGU6IGNvbW1pdFR5cGUkMVxufTtcbmxldCBhbGxDb21taXRzRGljdCA9IHt9O1xuY29uc3QgY29tbWl0VHlwZSA9IHtcbiAgTk9STUFMOiAwLFxuICBSRVZFUlNFOiAxLFxuICBISUdITElHSFQ6IDIsXG4gIE1FUkdFOiAzLFxuICBDSEVSUllfUElDSzogNFxufTtcbmNvbnN0IFRIRU1FX0NPTE9SX0xJTUlUID0gODtcbmxldCBicmFuY2hQb3MgPSB7fTtcbmxldCBjb21taXRQb3MgPSB7fTtcbmxldCBsYW5lcyA9IFtdO1xubGV0IG1heFBvcyA9IDA7XG5jb25zdCBjbGVhciA9ICgpID0+IHtcbiAgYnJhbmNoUG9zID0ge307XG4gIGNvbW1pdFBvcyA9IHt9O1xuICBhbGxDb21taXRzRGljdCA9IHt9O1xuICBtYXhQb3MgPSAwO1xuICBsYW5lcyA9IFtdO1xufTtcbmNvbnN0IGRyYXdUZXh0ID0gKHR4dCkgPT4ge1xuICBjb25zdCBzdmdMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGV4dFwiKTtcbiAgbGV0IHJvd3MgPSBbXTtcbiAgaWYgKHR5cGVvZiB0eHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByb3dzID0gdHh0LnNwbGl0KC9cXFxcbnxcXG58PGJyXFxzKlxcLz8+L2dpKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR4dCkpIHtcbiAgICByb3dzID0gdHh0O1xuICB9IGVsc2Uge1xuICAgIHJvd3MgPSBbXTtcbiAgfVxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgdHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRzcGFuXCIpO1xuICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiZHlcIiwgXCIxZW1cIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyb3dcIik7XG4gICAgdHNwYW4udGV4dENvbnRlbnQgPSByb3cudHJpbSgpO1xuICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgfVxuICByZXR1cm4gc3ZnTGFiZWw7XG59O1xuY29uc3QgZHJhd0NvbW1pdHMgPSAoc3ZnLCBjb21taXRzMiwgbW9kaWZ5R3JhcGgpID0+IHtcbiAgY29uc3QgZ2l0R3JhcGhDb25maWcgPSBnZXRDb25maWckMSgpLmdpdEdyYXBoO1xuICBjb25zdCBnQnVsbGV0cyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1idWxsZXRzXCIpO1xuICBjb25zdCBnTGFiZWxzID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY29tbWl0LWxhYmVsc1wiKTtcbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb21taXRzMik7XG4gIGNvbnN0IHNvcnRlZEtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gY29tbWl0czJbYV0uc2VxIC0gY29tbWl0czJbYl0uc2VxO1xuICB9KTtcbiAgc29ydGVkS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb21taXQyID0gY29tbWl0czJba2V5XTtcbiAgICBjb25zdCB5ID0gYnJhbmNoUG9zW2NvbW1pdDIuYnJhbmNoXS5wb3M7XG4gICAgY29uc3QgeCA9IHBvcyArIDEwO1xuICAgIGlmIChtb2RpZnlHcmFwaCkge1xuICAgICAgbGV0IHR5cGVDbGFzcztcbiAgICAgIGxldCBjb21taXRTeW1ib2xUeXBlID0gY29tbWl0Mi5jdXN0b21UeXBlICE9PSB2b2lkIDAgJiYgY29tbWl0Mi5jdXN0b21UeXBlICE9PSBcIlwiID8gY29tbWl0Mi5jdXN0b21UeXBlIDogY29tbWl0Mi50eXBlO1xuICAgICAgc3dpdGNoIChjb21taXRTeW1ib2xUeXBlKSB7XG4gICAgICAgIGNhc2UgY29tbWl0VHlwZS5OT1JNQUw6XG4gICAgICAgICAgdHlwZUNsYXNzID0gXCJjb21taXQtbm9ybWFsXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY29tbWl0VHlwZS5SRVZFUlNFOlxuICAgICAgICAgIHR5cGVDbGFzcyA9IFwiY29tbWl0LXJldmVyc2VcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjb21taXRUeXBlLkhJR0hMSUdIVDpcbiAgICAgICAgICB0eXBlQ2xhc3MgPSBcImNvbW1pdC1oaWdobGlnaHRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjb21taXRUeXBlLk1FUkdFOlxuICAgICAgICAgIHR5cGVDbGFzcyA9IFwiY29tbWl0LW1lcmdlXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY29tbWl0VHlwZS5DSEVSUllfUElDSzpcbiAgICAgICAgICB0eXBlQ2xhc3MgPSBcImNvbW1pdC1jaGVycnktcGlja1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHR5cGVDbGFzcyA9IFwiY29tbWl0LW5vcm1hbFwiO1xuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuSElHSExJR0hUKSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IGdCdWxsZXRzLmFwcGVuZChcInJlY3RcIik7XG4gICAgICAgIGNpcmNsZS5hdHRyKFwieFwiLCB4IC0gMTApO1xuICAgICAgICBjaXJjbGUuYXR0cihcInlcIiwgeSAtIDEwKTtcbiAgICAgICAgY2lyY2xlLmF0dHIoXCJoZWlnaHRcIiwgMjApO1xuICAgICAgICBjaXJjbGUuYXR0cihcIndpZHRoXCIsIDIwKTtcbiAgICAgICAgY2lyY2xlLmF0dHIoXG4gICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgIGBjb21taXQgJHtjb21taXQyLmlkfSBjb21taXQtaGlnaGxpZ2h0JHticmFuY2hQb3NbY29tbWl0Mi5icmFuY2hdLmluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9ICR7dHlwZUNsYXNzfS1vdXRlcmBcbiAgICAgICAgKTtcbiAgICAgICAgZ0J1bGxldHMuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCB4IC0gNikuYXR0cihcInlcIiwgeSAtIDYpLmF0dHIoXCJoZWlnaHRcIiwgMTIpLmF0dHIoXCJ3aWR0aFwiLCAxMikuYXR0cihcbiAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgYGNvbW1pdCAke2NvbW1pdDIuaWR9IGNvbW1pdCR7YnJhbmNoUG9zW2NvbW1pdDIuYnJhbmNoXS5pbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUfSAke3R5cGVDbGFzc30taW5uZXJgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuQ0hFUlJZX1BJQ0spIHtcbiAgICAgICAgZ0J1bGxldHMuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCB4KS5hdHRyKFwiY3lcIiwgeSkuYXR0cihcInJcIiwgMTApLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgICAgIGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgeCAtIDMpLmF0dHIoXCJjeVwiLCB5ICsgMikuYXR0cihcInJcIiwgMi43NSkuYXR0cihcImZpbGxcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgICAgIGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgeCArIDMpLmF0dHIoXCJjeVwiLCB5ICsgMikuYXR0cihcInJcIiwgMi43NSkuYXR0cihcImZpbGxcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgICAgIGdCdWxsZXRzLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIHggKyAzKS5hdHRyKFwieTFcIiwgeSArIDEpLmF0dHIoXCJ4MlwiLCB4KS5hdHRyKFwieTJcIiwgeSAtIDUpLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgICAgIGdCdWxsZXRzLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIHggLSAzKS5hdHRyKFwieTFcIiwgeSArIDEpLmF0dHIoXCJ4MlwiLCB4KS5hdHRyKFwieTJcIiwgeSAtIDUpLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaXJjbGUgPSBnQnVsbGV0cy5hcHBlbmQoXCJjaXJjbGVcIik7XG4gICAgICAgIGNpcmNsZS5hdHRyKFwiY3hcIiwgeCk7XG4gICAgICAgIGNpcmNsZS5hdHRyKFwiY3lcIiwgeSk7XG4gICAgICAgIGNpcmNsZS5hdHRyKFwiclwiLCBjb21taXQyLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgPyA5IDogMTApO1xuICAgICAgICBjaXJjbGUuYXR0cihcbiAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgYGNvbW1pdCAke2NvbW1pdDIuaWR9IGNvbW1pdCR7YnJhbmNoUG9zW2NvbW1pdDIuYnJhbmNoXS5pbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UpIHtcbiAgICAgICAgICBjb25zdCBjaXJjbGUyID0gZ0J1bGxldHMuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICAgICAgICAgIGNpcmNsZTIuYXR0cihcImN4XCIsIHgpO1xuICAgICAgICAgIGNpcmNsZTIuYXR0cihcImN5XCIsIHkpO1xuICAgICAgICAgIGNpcmNsZTIuYXR0cihcInJcIiwgNik7XG4gICAgICAgICAgY2lyY2xlMi5hdHRyKFxuICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgYGNvbW1pdCAke3R5cGVDbGFzc30gJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaFBvc1tjb21taXQyLmJyYW5jaF0uaW5kZXggJSBUSEVNRV9DT0xPUl9MSU1JVH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWl0U3ltYm9sVHlwZSA9PT0gY29tbWl0VHlwZS5SRVZFUlNFKSB7XG4gICAgICAgICAgY29uc3QgY3Jvc3MgPSBnQnVsbGV0cy5hcHBlbmQoXCJwYXRoXCIpO1xuICAgICAgICAgIGNyb3NzLmF0dHIoXCJkXCIsIGBNICR7eCAtIDV9LCR7eSAtIDV9TCR7eCArIDV9LCR7eSArIDV9TSR7eCAtIDV9LCR7eSArIDV9TCR7eCArIDV9LCR7eSAtIDV9YCkuYXR0cihcbiAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgIGBjb21taXQgJHt0eXBlQ2xhc3N9ICR7Y29tbWl0Mi5pZH0gY29tbWl0JHticmFuY2hQb3NbY29tbWl0Mi5icmFuY2hdLmluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29tbWl0UG9zW2NvbW1pdDIuaWRdID0geyB4OiBwb3MgKyAxMCwgeSB9O1xuICAgIGlmIChtb2RpZnlHcmFwaCkge1xuICAgICAgY29uc3QgcHggPSA0O1xuICAgICAgY29uc3QgcHkgPSAyO1xuICAgICAgaWYgKGNvbW1pdDIudHlwZSAhPT0gY29tbWl0VHlwZS5DSEVSUllfUElDSyAmJiAoY29tbWl0Mi5jdXN0b21JZCAmJiBjb21taXQyLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgfHwgY29tbWl0Mi50eXBlICE9PSBjb21taXRUeXBlLk1FUkdFKSAmJiBnaXRHcmFwaENvbmZpZy5zaG93Q29tbWl0TGFiZWwpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGdMYWJlbHMuYXBwZW5kKFwiZ1wiKTtcbiAgICAgICAgY29uc3QgbGFiZWxCa2cgPSB3cmFwcGVyLmluc2VydChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsIFwiY29tbWl0LWxhYmVsLWJrZ1wiKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHdyYXBwZXIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBwb3MpLmF0dHIoXCJ5XCIsIHkgKyAyNSkuYXR0cihcImNsYXNzXCIsIFwiY29tbWl0LWxhYmVsXCIpLnRleHQoY29tbWl0Mi5pZCk7XG4gICAgICAgIGxldCBiYm94ID0gdGV4dC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgICBsYWJlbEJrZy5hdHRyKFwieFwiLCBwb3MgKyAxMCAtIGJib3gud2lkdGggLyAyIC0gcHkpLmF0dHIoXCJ5XCIsIHkgKyAxMy41KS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIDIgKiBweSkuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIDIgKiBweSk7XG4gICAgICAgIHRleHQuYXR0cihcInhcIiwgcG9zICsgMTAgLSBiYm94LndpZHRoIC8gMik7XG4gICAgICAgIGlmIChnaXRHcmFwaENvbmZpZy5yb3RhdGVDb21taXRMYWJlbCkge1xuICAgICAgICAgIGxldCByX3ggPSAtNy41IC0gKGJib3gud2lkdGggKyAxMCkgLyAyNSAqIDkuNTtcbiAgICAgICAgICBsZXQgcl95ID0gMTAgKyBiYm94LndpZHRoIC8gMjUgKiA4LjU7XG4gICAgICAgICAgd3JhcHBlci5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgcl94ICsgXCIsIFwiICsgcl95ICsgXCIpIHJvdGF0ZSgtNDUsIFwiICsgcG9zICsgXCIsIFwiICsgeSArIFwiKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdDIudGFnKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBnTGFiZWxzLmluc2VydChcInBvbHlnb25cIik7XG4gICAgICAgIGNvbnN0IGhvbGUgPSBnTGFiZWxzLmFwcGVuZChcImNpcmNsZVwiKTtcbiAgICAgICAgY29uc3QgdGFnID0gZ0xhYmVscy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIHkgLSAxNikuYXR0cihcImNsYXNzXCIsIFwidGFnLWxhYmVsXCIpLnRleHQoY29tbWl0Mi50YWcpO1xuICAgICAgICBsZXQgdGFnQmJveCA9IHRhZy5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgICB0YWcuYXR0cihcInhcIiwgcG9zICsgMTAgLSB0YWdCYm94LndpZHRoIC8gMik7XG4gICAgICAgIGNvbnN0IGgyID0gdGFnQmJveC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBseSA9IHkgLSAxOS4yO1xuICAgICAgICByZWN0LmF0dHIoXCJjbGFzc1wiLCBcInRhZy1sYWJlbC1ia2dcIikuYXR0cihcbiAgICAgICAgICBcInBvaW50c1wiLFxuICAgICAgICAgIGBcbiAgICAgICAgICAke3BvcyAtIHRhZ0Jib3gud2lkdGggLyAyIC0gcHggLyAyfSwke2x5ICsgcHl9XG4gICAgICAgICAgJHtwb3MgLSB0YWdCYm94LndpZHRoIC8gMiAtIHB4IC8gMn0sJHtseSAtIHB5fVxuICAgICAgICAgICR7cG9zICsgMTAgLSB0YWdCYm94LndpZHRoIC8gMiAtIHB4fSwke2x5IC0gaDIgLSBweX1cbiAgICAgICAgICAke3BvcyArIDEwICsgdGFnQmJveC53aWR0aCAvIDIgKyBweH0sJHtseSAtIGgyIC0gcHl9XG4gICAgICAgICAgJHtwb3MgKyAxMCArIHRhZ0Jib3gud2lkdGggLyAyICsgcHh9LCR7bHkgKyBoMiArIHB5fVxuICAgICAgICAgICR7cG9zICsgMTAgLSB0YWdCYm94LndpZHRoIC8gMiAtIHB4fSwke2x5ICsgaDIgKyBweX1gXG4gICAgICAgICk7XG4gICAgICAgIGhvbGUuYXR0cihcImN4XCIsIHBvcyAtIHRhZ0Jib3gud2lkdGggLyAyICsgcHggLyAyKS5hdHRyKFwiY3lcIiwgbHkpLmF0dHIoXCJyXCIsIDEuNSkuYXR0cihcImNsYXNzXCIsIFwidGFnLWhvbGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHBvcyArPSA1MDtcbiAgICBpZiAocG9zID4gbWF4UG9zKSB7XG4gICAgICBtYXhQb3MgPSBwb3M7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBoYXNPdmVybGFwcGluZ0NvbW1pdHMgPSAoY29tbWl0MSwgY29tbWl0MiwgYWxsQ29tbWl0cykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYWxsQ29tbWl0cyk7XG4gIGNvbnN0IG92ZXJsYXBwaW5nQ29taXRzID0ga2V5cy5maWx0ZXIoKGtleSkgPT4ge1xuICAgIHJldHVybiBhbGxDb21taXRzW2tleV0uYnJhbmNoID09PSBjb21taXQyLmJyYW5jaCAmJiBhbGxDb21taXRzW2tleV0uc2VxID4gY29tbWl0MS5zZXEgJiYgYWxsQ29tbWl0c1trZXldLnNlcSA8IGNvbW1pdDIuc2VxO1xuICB9KTtcbiAgcmV0dXJuIG92ZXJsYXBwaW5nQ29taXRzLmxlbmd0aCA+IDA7XG59O1xuY29uc3QgZmluZExhbmUgPSAoeTEsIHkyLCBkZXB0aCA9IDApID0+IHtcbiAgY29uc3QgY2FuZGlkYXRlID0geTEgKyBNYXRoLmFicyh5MSAtIHkyKSAvIDI7XG4gIGlmIChkZXB0aCA+IDUpIHtcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIGxldCBvayA9IGxhbmVzLmV2ZXJ5KChsYW5lKSA9PiBNYXRoLmFicyhsYW5lIC0gY2FuZGlkYXRlKSA+PSAxMCk7XG4gIGlmIChvaykge1xuICAgIGxhbmVzLnB1c2goY2FuZGlkYXRlKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIGNvbnN0IGRpZmYgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgcmV0dXJuIGZpbmRMYW5lKHkxLCB5MiAtIGRpZmYgLyA1LCBkZXB0aCArIDEpO1xufTtcbmNvbnN0IGRyYXdBcnJvdyA9IChzdmcsIGNvbW1pdDEsIGNvbW1pdDIsIGFsbENvbW1pdHMpID0+IHtcbiAgY29uc3QgcDEgPSBjb21taXRQb3NbY29tbWl0MS5pZF07XG4gIGNvbnN0IHAyID0gY29tbWl0UG9zW2NvbW1pdDIuaWRdO1xuICBjb25zdCBvdmVybGFwcGluZ0NvbW1pdHMgPSBoYXNPdmVybGFwcGluZ0NvbW1pdHMoY29tbWl0MSwgY29tbWl0MiwgYWxsQ29tbWl0cyk7XG4gIGxldCBhcmMgPSBcIlwiO1xuICBsZXQgYXJjMiA9IFwiXCI7XG4gIGxldCByYWRpdXMgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3NbY29tbWl0Mi5icmFuY2hdLmluZGV4O1xuICBsZXQgbGluZURlZjtcbiAgaWYgKG92ZXJsYXBwaW5nQ29tbWl0cykge1xuICAgIGFyYyA9IFwiQSAxMCAxMCwgMCwgMCwgMCxcIjtcbiAgICBhcmMyID0gXCJBIDEwIDEwLCAwLCAwLCAxLFwiO1xuICAgIHJhZGl1cyA9IDEwO1xuICAgIG9mZnNldCA9IDEwO1xuICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3NbY29tbWl0Mi5icmFuY2hdLmluZGV4O1xuICAgIGNvbnN0IGxpbmVZID0gcDEueSA8IHAyLnkgPyBmaW5kTGFuZShwMS55LCBwMi55KSA6IGZpbmRMYW5lKHAyLnksIHAxLnkpO1xuICAgIGlmIChwMS55IDwgcDIueSkge1xuICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtsaW5lWSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtsaW5lWX0gTCAke3AyLnggLSByYWRpdXN9ICR7bGluZVl9ICR7YXJjMn0gJHtwMi54fSAke2xpbmVZICsgb2Zmc2V0fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7bGluZVkgKyByYWRpdXN9ICR7YXJjMn0gJHtwMS54ICsgb2Zmc2V0fSAke2xpbmVZfSBMICR7cDIueCAtIHJhZGl1c30gJHtsaW5lWX0gJHthcmN9ICR7cDIueH0gJHtsaW5lWSAtIG9mZnNldH0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAocDEueSA8IHAyLnkpIHtcbiAgICAgIGFyYyA9IFwiQSAyMCAyMCwgMCwgMCwgMCxcIjtcbiAgICAgIHJhZGl1cyA9IDIwO1xuICAgICAgb2Zmc2V0ID0gMjA7XG4gICAgICBjb2xvckNsYXNzTnVtID0gYnJhbmNoUG9zW2NvbW1pdDIuYnJhbmNoXS5pbmRleDtcbiAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7cDIueSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgfVxuICAgIGlmIChwMS55ID4gcDIueSkge1xuICAgICAgYXJjID0gXCJBIDIwIDIwLCAwLCAwLCAwLFwiO1xuICAgICAgcmFkaXVzID0gMjA7XG4gICAgICBvZmZzZXQgPSAyMDtcbiAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3NbY29tbWl0MS5icmFuY2hdLmluZGV4O1xuICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICB9XG4gICAgaWYgKHAxLnkgPT09IHAyLnkpIHtcbiAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3NbY29tbWl0MS5icmFuY2hdLmluZGV4O1xuICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55IC0gcmFkaXVzfSAke2FyY30gJHtwMS54ICsgb2Zmc2V0fSAke3AyLnl9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICB9XG4gIH1cbiAgc3ZnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgbGluZURlZikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3cgYXJyb3dcIiArIGNvbG9yQ2xhc3NOdW0gJSBUSEVNRV9DT0xPUl9MSU1JVCk7XG59O1xuY29uc3QgZHJhd0Fycm93cyA9IChzdmcsIGNvbW1pdHMyKSA9PiB7XG4gIGNvbnN0IGdBcnJvd3MgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjb21taXQtYXJyb3dzXCIpO1xuICBPYmplY3Qua2V5cyhjb21taXRzMikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgY29tbWl0MiA9IGNvbW1pdHMyW2tleV07XG4gICAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29tbWl0Mi5wYXJlbnRzLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICBkcmF3QXJyb3coZ0Fycm93cywgY29tbWl0czJbcGFyZW50XSwgY29tbWl0MiwgY29tbWl0czIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBkcmF3QnJhbmNoZXMgPSAoc3ZnLCBicmFuY2hlczIpID0+IHtcbiAgY29uc3QgZ2l0R3JhcGhDb25maWcgPSBnZXRDb25maWckMSgpLmdpdEdyYXBoO1xuICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIik7XG4gIGJyYW5jaGVzMi5mb3JFYWNoKChicmFuY2gyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFkanVzdEluZGV4Rm9yVGhlbWUgPSBpbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUO1xuICAgIGNvbnN0IHBvcyA9IGJyYW5jaFBvc1ticmFuY2gyLm5hbWVdLnBvcztcbiAgICBjb25zdCBsaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpO1xuICAgIGxpbmUuYXR0cihcIngxXCIsIDApO1xuICAgIGxpbmUuYXR0cihcInkxXCIsIHBvcyk7XG4gICAgbGluZS5hdHRyKFwieDJcIiwgbWF4UG9zKTtcbiAgICBsaW5lLmF0dHIoXCJ5MlwiLCBwb3MpO1xuICAgIGxpbmUuYXR0cihcImNsYXNzXCIsIFwiYnJhbmNoIGJyYW5jaFwiICsgYWRqdXN0SW5kZXhGb3JUaGVtZSk7XG4gICAgbGFuZXMucHVzaChwb3MpO1xuICAgIGxldCBuYW1lID0gYnJhbmNoMi5uYW1lO1xuICAgIGNvbnN0IGxhYmVsRWxlbWVudCA9IGRyYXdUZXh0KG5hbWUpO1xuICAgIGNvbnN0IGJrZyA9IGcuaW5zZXJ0KFwicmVjdFwiKTtcbiAgICBjb25zdCBicmFuY2hMYWJlbCA9IGcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJicmFuY2hMYWJlbFwiKTtcbiAgICBjb25zdCBsYWJlbCA9IGJyYW5jaExhYmVsLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWwgYnJhbmNoLWxhYmVsXCIgKyBhZGp1c3RJbmRleEZvclRoZW1lKTtcbiAgICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICBsZXQgYmJveCA9IGxhYmVsRWxlbWVudC5nZXRCQm94KCk7XG4gICAgYmtnLmF0dHIoXCJjbGFzc1wiLCBcImJyYW5jaExhYmVsQmtnIGxhYmVsXCIgKyBhZGp1c3RJbmRleEZvclRoZW1lKS5hdHRyKFwicnhcIiwgNCkuYXR0cihcInJ5XCIsIDQpLmF0dHIoXCJ4XCIsIC1iYm94LndpZHRoIC0gNCAtIChnaXRHcmFwaENvbmZpZy5yb3RhdGVDb21taXRMYWJlbCA9PT0gdHJ1ZSA/IDMwIDogMCkpLmF0dHIoXCJ5XCIsIC1iYm94LmhlaWdodCAvIDIgKyA4KS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIDE4KS5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0ICsgNCk7XG4gICAgbGFiZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZShcIiArICgtYmJveC53aWR0aCAtIDE0IC0gKGdpdEdyYXBoQ29uZmlnLnJvdGF0ZUNvbW1pdExhYmVsID09PSB0cnVlID8gMzAgOiAwKSkgKyBcIiwgXCIgKyAocG9zIC0gYmJveC5oZWlnaHQgLyAyIC0gMSkgKyBcIilcIlxuICAgICk7XG4gICAgYmtnLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoLTE5LCBcIiArIChwb3MgLSBiYm94LmhlaWdodCAvIDIpICsgXCIpXCIpO1xuICB9KTtcbn07XG5jb25zdCBkcmF3ID0gZnVuY3Rpb24odHh0LCBpZCwgdmVyLCBkaWFnT2JqKSB7XG4gIGNsZWFyKCk7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWckMSgpO1xuICBjb25zdCBnaXRHcmFwaENvbmZpZyA9IGNvbmYuZ2l0R3JhcGg7XG4gIGxvZy5kZWJ1ZyhcImluIGdpdGdyYXBoIHJlbmRlcmVyXCIsIHR4dCArIFwiXFxuXCIsIFwiaWQ6XCIsIGlkLCB2ZXIpO1xuICBhbGxDb21taXRzRGljdCA9IGRpYWdPYmouZGIuZ2V0Q29tbWl0cygpO1xuICBjb25zdCBicmFuY2hlczIgPSBkaWFnT2JqLmRiLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1xuICBsZXQgcG9zID0gMDtcbiAgYnJhbmNoZXMyLmZvckVhY2goKGJyYW5jaDIsIGluZGV4KSA9PiB7XG4gICAgYnJhbmNoUG9zW2JyYW5jaDIubmFtZV0gPSB7IHBvcywgaW5kZXggfTtcbiAgICBwb3MgKz0gNTAgKyAoZ2l0R3JhcGhDb25maWcucm90YXRlQ29tbWl0TGFiZWwgPyA0MCA6IDApO1xuICB9KTtcbiAgY29uc3QgZGlhZ3JhbTIgPSBzZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGRyYXdDb21taXRzKGRpYWdyYW0yLCBhbGxDb21taXRzRGljdCwgZmFsc2UpO1xuICBpZiAoZ2l0R3JhcGhDb25maWcuc2hvd0JyYW5jaGVzKSB7XG4gICAgZHJhd0JyYW5jaGVzKGRpYWdyYW0yLCBicmFuY2hlczIpO1xuICB9XG4gIGRyYXdBcnJvd3MoZGlhZ3JhbTIsIGFsbENvbW1pdHNEaWN0KTtcbiAgZHJhd0NvbW1pdHMoZGlhZ3JhbTIsIGFsbENvbW1pdHNEaWN0LCB0cnVlKTtcbiAgdXRpbHMuaW5zZXJ0VGl0bGUoXG4gICAgZGlhZ3JhbTIsXG4gICAgXCJnaXRUaXRsZVRleHRcIixcbiAgICBnaXRHcmFwaENvbmZpZy50aXRsZVRvcE1hcmdpbixcbiAgICBkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpXG4gICk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KFxuICAgIHZvaWQgMCxcbiAgICBkaWFncmFtMixcbiAgICBnaXRHcmFwaENvbmZpZy5kaWFncmFtUGFkZGluZyxcbiAgICBnaXRHcmFwaENvbmZpZy51c2VNYXhXaWR0aCA/PyBjb25mLnVzZU1heFdpZHRoXG4gICk7XG59O1xuY29uc3QgZ2l0R3JhcGhSZW5kZXJlciA9IHtcbiAgZHJhd1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zMikgPT4gYFxuICAuY29tbWl0LWlkLFxuICAuY29tbWl0LW1zZyxcbiAgLmJyYW5jaC1sYWJlbCB7XG4gICAgZmlsbDogbGlnaHRncmV5O1xuICAgIGNvbG9yOiBsaWdodGdyZXk7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiAgJHtbMCwgMSwgMiwgMywgNCwgNSwgNiwgN10ubWFwKFxuICAoaSkgPT4gYFxuICAgICAgICAuYnJhbmNoLWxhYmVsJHtpfSB7IGZpbGw6ICR7b3B0aW9uczJbXCJnaXRCcmFuY2hMYWJlbFwiICsgaV19OyB9XG4gICAgICAgIC5jb21taXQke2l9IHsgc3Ryb2tlOiAke29wdGlvbnMyW1wiZ2l0XCIgKyBpXX07IGZpbGw6ICR7b3B0aW9uczJbXCJnaXRcIiArIGldfTsgfVxuICAgICAgICAuY29tbWl0LWhpZ2hsaWdodCR7aX0geyBzdHJva2U6ICR7b3B0aW9uczJbXCJnaXRJbnZcIiArIGldfTsgZmlsbDogJHtvcHRpb25zMltcImdpdEludlwiICsgaV19OyB9XG4gICAgICAgIC5sYWJlbCR7aX0gIHsgZmlsbDogJHtvcHRpb25zMltcImdpdFwiICsgaV19OyB9XG4gICAgICAgIC5hcnJvdyR7aX0geyBzdHJva2U6ICR7b3B0aW9uczJbXCJnaXRcIiArIGldfTsgfVxuICAgICAgICBgXG4pLmpvaW4oXCJcXG5cIil9XG5cbiAgLmJyYW5jaCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICAgIHN0cm9rZTogJHtvcHRpb25zMi5saW5lQ29sb3J9O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7XG4gIH1cbiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtvcHRpb25zMi5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtvcHRpb25zMi5jb21taXRMYWJlbENvbG9yfTt9XG4gIC5jb21taXQtbGFiZWwtYmtnIHsgZm9udC1zaXplOiAke29wdGlvbnMyLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMyLmNvbW1pdExhYmVsQmFja2dyb3VuZH07IG9wYWNpdHk6IDAuNTsgfVxuICAudGFnLWxhYmVsIHsgZm9udC1zaXplOiAke29wdGlvbnMyLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMyLnRhZ0xhYmVsQ29sb3J9O31cbiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke29wdGlvbnMyLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtvcHRpb25zMi50YWdMYWJlbEJvcmRlcn07IH1cbiAgLnRhZy1ob2xlIHsgZmlsbDogJHtvcHRpb25zMi50ZXh0Q29sb3J9OyB9XG5cbiAgLmNvbW1pdC1tZXJnZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMyLnByaW1hcnlDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zMi5wcmltYXJ5Q29sb3J9O1xuICB9XG4gIC5jb21taXQtcmV2ZXJzZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMyLnByaW1hcnlDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zMi5wcmltYXJ5Q29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMztcbiAgfVxuICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7XG4gIH1cbiAgLmNvbW1pdC1oaWdobGlnaHQtaW5uZXIge1xuICAgIHN0cm9rZTogJHtvcHRpb25zMi5wcmltYXJ5Q29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9uczIucHJpbWFyeUNvbG9yfTtcbiAgfVxuXG4gIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfVxuICAuZ2l0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMyLnRleHRDb2xvcn07XG4gIH1cbmA7XG5jb25zdCBnaXRHcmFwaFN0eWxlcyA9IGdldFN0eWxlcztcbmNvbnN0IGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogZ2l0R3JhcGhQYXJzZXIsXG4gIGRiOiBnaXRHcmFwaERiLFxuICByZW5kZXJlcjogZ2l0R3JhcGhSZW5kZXJlcixcbiAgc3R5bGVzOiBnaXRHcmFwaFN0eWxlc1xufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/gitGraphDiagram-1e960c50.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/index-a92ac404.js": /*!************************************************************!*\ !*** ../../../node_modules/mermaid/dist/index-a92ac404.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"r\": () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/json.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/json.js\");\n/* harmony import */ var _edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./edges-49ac43a2.js */ \"../../../node_modules/mermaid/dist/edges-49ac43a2.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createText-3df630b5.js */ \"../../../node_modules/mermaid/dist/createText-3df630b5.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n\n\n\n\n\n\n\nlet clusterDb = {};\nlet descendants = {};\nlet parents = {};\nconst clear$1 = () => {\n descendants = {};\n parents = {};\n clusterDb = {};\n};\nconst isDescendant = (id, ancenstorId) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"In isDecendant\", ancenstorId, \" \", id, \" = \", descendants[ancenstorId].includes(id));\n if (descendants[ancenstorId].includes(id)) {\n return true;\n }\n return false;\n};\nconst edgeInCluster = (edge, clusterId) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Decendants of \", clusterId, \" is \", descendants[clusterId]);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge is \", edge);\n if (edge.v === clusterId) {\n return false;\n }\n if (edge.w === clusterId) {\n return false;\n }\n if (!descendants[clusterId]) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Tilt, \", clusterId, \",not in decendants\");\n return false;\n }\n return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w);\n};\nconst copy = (clusterId, graph, newGraph, rootId) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\n \"Copying children of \",\n clusterId,\n \"root\",\n rootId,\n \"data\",\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\n \"Not Setting parent for node=\",\n node,\n \"cluster!==rootId\",\n clusterId !== rootId,\n \"node!==clusterId\",\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Copying Edges\", edges);\n edges.forEach((edge) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge data\", data2, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\n \"Skipping copy of edge \",\n edge.v,\n \"-->\",\n edge.w,\n \" rootId: \",\n rootId,\n \" clusterId:\",\n clusterId\n );\n }\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e);\n }\n });\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n};\nconst extractDescendants = (id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n for (const child of children) {\n parents[child] = id;\n res = [...res, ...extractDescendants(child, graph)];\n }\n return res;\n};\nconst findNonClusterChild = (id, graph) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Searching\", id);\n const children = graph.children(id);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"This is a valid node\", id);\n return id;\n }\n for (const child of children) {\n const _id = findNonClusterChild(child, graph);\n if (_id) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Found replacement for\", id, \" => \", _id);\n return _id;\n }\n }\n};\nconst getAnchorId = (id) => {\n if (!clusterDb[id]) {\n return id;\n }\n if (!clusterDb[id].externalConnections) {\n return id;\n }\n if (clusterDb[id]) {\n return clusterDb[id].id;\n }\n return id;\n};\nconst adjustClustersAndEdges = (graph, depth) => {\n if (!graph || depth > 10) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Opting out, no graph \");\n return;\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Opting in, graph \");\n }\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\n \"Cluster identified\",\n id,\n \" Replacement id in edges: \",\n findNonClusterChild(id, graph)\n );\n descendants[id] = extractDescendants(id, graph);\n clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) };\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Cluster identified\", id, descendants);\n edges.forEach((edge) => {\n if (edge.v !== id && edge.w !== id) {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n if (d1 ^ d2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Edge: \", edge, \" leaves cluster \", id);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Decendants of XXX \", id, \": \", descendants[id]);\n clusterDb[id].externalConnections = true;\n }\n }\n });\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Not a cluster \", id, descendants);\n }\n });\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\n \"Fix XXX\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb[e.v],\n \" --- \",\n clusterDb[e.w]\n );\n if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Fixing and trixing link to self - removing XXX\", e.v, e.w, e.name);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n const specialId = e.w + \"---\" + e.v;\n graph.setNode(specialId, {\n domId: specialId,\n id: specialId,\n labelStyle: \"\",\n labelText: edge.label,\n padding: 0,\n shape: \"labelRect\",\n style: \"\"\n });\n const edge1 = JSON.parse(JSON.stringify(edge));\n const edge2 = JSON.parse(JSON.stringify(edge));\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge2.label = \"\";\n edge1.fromCluster = e.v;\n edge2.toCluster = e.v;\n graph.setEdge(v, specialId, edge1, e.name + \"-cyclic-special\");\n graph.setEdge(specialId, w, edge2, e.name + \"-cyclic-special\");\n } else if (clusterDb[e.v] || clusterDb[e.w]) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n edge.toCluster = e.w;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Adjusted Graph\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n extractor(graph, 0);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb);\n};\nconst extractor = (graph, depth) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"extractor - \", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Nodes = \", nodes, depth);\n for (const node of nodes) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\n \"Extracting node\",\n node,\n clusterDb,\n clusterDb[node] && !clusterDb[node].externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children(\"D\"),\n \" Depth \",\n depth\n );\n if (!clusterDb[node]) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Not a cluster\", node, depth);\n } else if (!clusterDb[node].externalConnections && // !graph.parent(node) &&\n graph.children(node) && graph.children(node).length > 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\n \"Cluster without external connections, without a parent and with children\",\n node,\n depth\n );\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {\n dir = clusterDb[node].clusterData.dir;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Fixing dir\", clusterDb[node].clusterData.dir, dir);\n }\n const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n // Todo: set proper spacing\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Old graph before copy\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb[node].clusterData,\n labelText: clusterDb[node].labelText,\n graph: clusterGraph\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"New graph after copy node: (\", node, \")\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(clusterGraph));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(\"Old graph after copy\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\n \"Cluster ** \",\n node,\n \" **not meeting the criteria !externalConnections:\",\n !clusterDb[node].externalConnections,\n \" no parent: \",\n !graph.parent(node),\n \" children \",\n graph.children(node) && graph.children(node).length > 0,\n graph.children(\"D\"),\n depth\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb);\n }\n }\n nodes = graph.nodes();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"New list of nodes\", nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\" Now next level\", node, data);\n if (data.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n};\nconst sorter = (graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign(nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n return result;\n};\nconst sortNodesByHierarchy = (graph) => sorter(graph, graph.children());\nconst rect = (parent, node) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Creating subgraph rect for \", node.id, node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster\" + (node.class ? \" \" + node.class : \"\")).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const useHtmlLabels = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const text = node.labelType === \"markdown\" ? (0,_createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width;\n if (node.width <= bbox.width + padding) {\n node.diff = (bbox.width - node.width) / 2 - node.padding / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Data \", node, JSON.stringify(node));\n rect2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - width / 2).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width).attr(\"height\", node.height + padding);\n if (useHtmlLabels) {\n label.attr(\n \"transform\",\n // This puts the labal on top of the box instead of inside it\n \"translate(\" + (node.x - bbox.width / 2) + \", \" + (node.y - node.height / 2) + \")\"\n );\n } else {\n label.attr(\n \"transform\",\n // This puts the labal on top of the box instead of inside it\n \"translate(\" + node.x + \", \" + (node.y - node.height / 2) + \")\"\n );\n }\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point);\n };\n return shapeSvg;\n};\nconst noteGroup = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point);\n };\n return shapeSvg;\n};\nconst roundedWithTitle = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const innerRect = shapeSvg.append(\"rect\");\n const text = label.node().appendChild((0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n bbox = text.getBBox();\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (bbox.width + node.padding * 0 - node.width) / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n rect2.attr(\"class\", \"outer\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width + padding).attr(\"height\", node.height + padding);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr(\"width\", width + padding).attr(\"height\", node.height + padding - bbox.height - 3);\n label.attr(\n \"transform\",\n \"translate(\" + (node.x - bbox.width / 2) + \", \" + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + \")\"\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point);\n };\n return shapeSvg;\n};\nconst divider = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"class\", \"divider\").attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding);\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.diff = -node.padding / 2;\n node.intersect = function(point) {\n return (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point);\n };\n return shapeSvg;\n};\nconst shapes = { rect, roundedWithTitle, noteGroup, divider };\nlet clusterElems = {};\nconst insertCluster = (elem, node) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Inserting cluster\");\n const shape = node.shape || \"rect\";\n clusterElems[node.id] = shapes[shape](elem, node);\n};\nconst clear = () => {\n clusterElems = {};\n};\nconst recursiveRender = async (_elem, graph, diagramtype, parentCluster) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Graph in recursive render: XXX\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"No nodes found for\", graph);\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Recursive render XXX\", graph.nodes());\n }\n if (graph.edges().length > 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Recursive edges\", graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(\n graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Setting data for cluster XXX (\", v, \") \", data, parentCluster);\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node && node.clusterNode) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Cluster identified\", v, node.width, graph.node(v));\n const o = await recursiveRender(nodes, node.graph, diagramtype, graph.node(v));\n const newEl = o.elem;\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl);\n node.diff = o.diff || 0;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Node bounds (abc123)\", v, node, node.width, node.x, node.y);\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Recursive render complete \", newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Cluster - the non recursive path XXX\", v, node.id, node, graph);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph));\n clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node };\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Node - the non recursive path\", v, node.id, node);\n await (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir);\n }\n }\n })\n );\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Fix\", clusterDb, \"ids:\", e.v, e.w, \"Translateing: \", clusterDb[e.v], clusterDb[e.w]);\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge);\n });\n graph.edges().forEach(function(e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"#############################################\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"### Layout ###\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"#############################################\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph);\n (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__.layout)(graph);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Graph after layout:\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n let diff = 0;\n sortNodesByHierarchy(graph).forEach(function(v) {\n const node = graph.node(v);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Position \" + v + \": \" + JSON.stringify(graph.node(v)));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\n \"Position \" + v + \": (\" + node.x,\n \",\" + node.y,\n \") width: \",\n node.width,\n \" height: \",\n node.height\n );\n if (node && node.clusterNode) {\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.p)(node);\n } else {\n if (graph.children(v).length > 0) {\n insertCluster(clusters, node);\n clusterDb[node.id].node = node;\n } else {\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.p)(node);\n }\n }\n });\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n const paths = (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph);\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff);\n if (n.type === \"group\") {\n diff = n.diff;\n }\n });\n return { elem, diff };\n};\nconst render = async (elem, graph, markers, diagramtype, id) => {\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id);\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.b)();\n (0,_edges_49ac43a2_js__WEBPACK_IMPORTED_MODULE_6__.d)();\n clear();\n clear$1();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Graph at first:\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n adjustClustersAndEdges(graph);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(\"Graph after:\", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__.write(graph));\n await recursiveRender(elem, graph, diagramtype);\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9pbmRleC1hOTJhYzQwNC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUF3RDtBQUNTO0FBQ3NNO0FBQ3ZMO0FBQ2xCO0FBQ0g7QUFDL0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx5REFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVE7QUFDVixFQUFFLHdEQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHlEQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVE7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTSx3REFBUTtBQUNkO0FBQ0E7QUFDQSxRQUFRLHdEQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFFBQVEseURBQVM7QUFDakI7QUFDQSxRQUFRO0FBQ1IsUUFBUSx3REFBUTtBQUNoQixRQUFRLHlEQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0seURBQVM7QUFDZjtBQUNBLFFBQVEsd0RBQVE7QUFDaEI7QUFDQSxRQUFRLHdEQUFRO0FBQ2hCO0FBQ0E7QUFDQSxZQUFZLHdEQUFRO0FBQ3BCO0FBQ0EsWUFBWSx3REFBUTtBQUNwQixZQUFZO0FBQ1osWUFBWSx3REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixVQUFVLHlEQUFTO0FBQ25CO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSSx5REFBUztBQUNiO0FBQ0EsR0FBRztBQUNI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Q1osa0JBQWtCLHFEQUFVO0FBQzVCLElBQUkscURBQWlCO0FBQ3JCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSSx3REFBUTtBQUNaO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxXQUFXO0FBQ1g7QUFDQTtBQUNBLEVBQUUscURBQWE7QUFDZixFQUFFLHFEQUFPO0FBQ1QsRUFBRSxxREFBTztBQUNUO0FBQ0E7QUFDQSxFQUFFLHdEQUFRLG9CQUFvQixtRUFBa0I7QUFDaEQ7QUFDQSxFQUFFLHdEQUFRLGlCQUFpQixtRUFBa0I7QUFDN0M7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvaW5kZXgtYTkyYWM0MDQuanM/OTQ4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgeyBjIGFzIGNyZWF0ZUxhYmVsLCBpIGFzIGludGVyc2VjdFJlY3QsIGEgYXMgaW5zZXJ0TWFya2VycywgYiBhcyBjbGVhciQyLCBkIGFzIGNsZWFyJDMsIHUgYXMgdXBkYXRlTm9kZUJvdW5kcywgcyBhcyBzZXROb2RlRWxlbSwgZSBhcyBpbnNlcnROb2RlLCBmIGFzIGluc2VydEVkZ2VMYWJlbCwgcCBhcyBwb3NpdGlvbk5vZGUsIGcgYXMgaW5zZXJ0RWRnZSwgaCBhcyBwb3NpdGlvbkVkZ2VMYWJlbCB9IGZyb20gXCIuL2VkZ2VzLTQ5YWM0M2EyLmpzXCI7XG5pbXBvcnQgeyBsIGFzIGxvZywgbiBhcyBldmFsdWF0ZSwgYyBhcyBnZXRDb25maWcgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjIGFzIGNyZWF0ZVRleHQgfSBmcm9tIFwiLi9jcmVhdGVUZXh0LTNkZjYzMGI1LmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmxldCBjbHVzdGVyRGIgPSB7fTtcbmxldCBkZXNjZW5kYW50cyA9IHt9O1xubGV0IHBhcmVudHMgPSB7fTtcbmNvbnN0IGNsZWFyJDEgPSAoKSA9PiB7XG4gIGRlc2NlbmRhbnRzID0ge307XG4gIHBhcmVudHMgPSB7fTtcbiAgY2x1c3RlckRiID0ge307XG59O1xuY29uc3QgaXNEZXNjZW5kYW50ID0gKGlkLCBhbmNlbnN0b3JJZCkgPT4ge1xuICBsb2cudHJhY2UoXCJJbiBpc0RlY2VuZGFudFwiLCBhbmNlbnN0b3JJZCwgXCIgXCIsIGlkLCBcIiA9IFwiLCBkZXNjZW5kYW50c1thbmNlbnN0b3JJZF0uaW5jbHVkZXMoaWQpKTtcbiAgaWYgKGRlc2NlbmRhbnRzW2FuY2Vuc3RvcklkXS5pbmNsdWRlcyhpZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgZWRnZUluQ2x1c3RlciA9IChlZGdlLCBjbHVzdGVySWQpID0+IHtcbiAgbG9nLmluZm8oXCJEZWNlbmRhbnRzIG9mIFwiLCBjbHVzdGVySWQsIFwiIGlzIFwiLCBkZXNjZW5kYW50c1tjbHVzdGVySWRdKTtcbiAgbG9nLmluZm8oXCJFZGdlIGlzIFwiLCBlZGdlKTtcbiAgaWYgKGVkZ2UudiA9PT0gY2x1c3RlcklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlZGdlLncgPT09IGNsdXN0ZXJJZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIWRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0pIHtcbiAgICBsb2cuZGVidWcoXCJUaWx0LCBcIiwgY2x1c3RlcklkLCBcIixub3QgaW4gZGVjZW5kYW50c1wiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0uaW5jbHVkZXMoZWRnZS52KSB8fCBpc0Rlc2NlbmRhbnQoZWRnZS52LCBjbHVzdGVySWQpIHx8IGlzRGVzY2VuZGFudChlZGdlLncsIGNsdXN0ZXJJZCkgfHwgZGVzY2VuZGFudHNbY2x1c3RlcklkXS5pbmNsdWRlcyhlZGdlLncpO1xufTtcbmNvbnN0IGNvcHkgPSAoY2x1c3RlcklkLCBncmFwaCwgbmV3R3JhcGgsIHJvb3RJZCkgPT4ge1xuICBsb2cud2FybihcbiAgICBcIkNvcHlpbmcgY2hpbGRyZW4gb2YgXCIsXG4gICAgY2x1c3RlcklkLFxuICAgIFwicm9vdFwiLFxuICAgIHJvb3RJZCxcbiAgICBcImRhdGFcIixcbiAgICBncmFwaC5ub2RlKGNsdXN0ZXJJZCksXG4gICAgcm9vdElkXG4gICk7XG4gIGNvbnN0IG5vZGVzID0gZ3JhcGguY2hpbGRyZW4oY2x1c3RlcklkKSB8fCBbXTtcbiAgaWYgKGNsdXN0ZXJJZCAhPT0gcm9vdElkKSB7XG4gICAgbm9kZXMucHVzaChjbHVzdGVySWQpO1xuICB9XG4gIGxvZy53YXJuKFwiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZFwiLCBjbHVzdGVySWQsIFwibm9kZXNcIiwgbm9kZXMpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgaWYgKGdyYXBoLmNoaWxkcmVuKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvcHkobm9kZSwgZ3JhcGgsIG5ld0dyYXBoLCByb290SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gZ3JhcGgubm9kZShub2RlKTtcbiAgICAgIGxvZy5pbmZvKFwiY3AgXCIsIG5vZGUsIFwiIHRvIFwiLCByb290SWQsIFwiIHdpdGggcGFyZW50IFwiLCBjbHVzdGVySWQpO1xuICAgICAgbmV3R3JhcGguc2V0Tm9kZShub2RlLCBkYXRhKTtcbiAgICAgIGlmIChyb290SWQgIT09IGdyYXBoLnBhcmVudChub2RlKSkge1xuICAgICAgICBsb2cud2FybihcIlNldHRpbmcgcGFyZW50XCIsIG5vZGUsIGdyYXBoLnBhcmVudChub2RlKSk7XG4gICAgICAgIG5ld0dyYXBoLnNldFBhcmVudChub2RlLCBncmFwaC5wYXJlbnQobm9kZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGNsdXN0ZXJJZCAhPT0gcm9vdElkICYmIG5vZGUgIT09IGNsdXN0ZXJJZCkge1xuICAgICAgICBsb2cuZGVidWcoXCJTZXR0aW5nIHBhcmVudFwiLCBub2RlLCBjbHVzdGVySWQpO1xuICAgICAgICBuZXdHcmFwaC5zZXRQYXJlbnQobm9kZSwgY2x1c3RlcklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKFwiSW4gY29weSBcIiwgY2x1c3RlcklkLCBcInJvb3RcIiwgcm9vdElkLCBcImRhdGFcIiwgZ3JhcGgubm9kZShjbHVzdGVySWQpLCByb290SWQpO1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgXCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9XCIsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBcImNsdXN0ZXIhPT1yb290SWRcIixcbiAgICAgICAgICBjbHVzdGVySWQgIT09IHJvb3RJZCxcbiAgICAgICAgICBcIm5vZGUhPT1jbHVzdGVySWRcIixcbiAgICAgICAgICBub2RlICE9PSBjbHVzdGVySWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVkZ2VzID0gZ3JhcGguZWRnZXMobm9kZSk7XG4gICAgICBsb2cuZGVidWcoXCJDb3B5aW5nIEVkZ2VzXCIsIGVkZ2VzKTtcbiAgICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgICAgbG9nLmluZm8oXCJFZGdlXCIsIGVkZ2UpO1xuICAgICAgICBjb25zdCBkYXRhMiA9IGdyYXBoLmVkZ2UoZWRnZS52LCBlZGdlLncsIGVkZ2UubmFtZSk7XG4gICAgICAgIGxvZy5pbmZvKFwiRWRnZSBkYXRhXCIsIGRhdGEyLCByb290SWQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChlZGdlSW5DbHVzdGVyKGVkZ2UsIHJvb3RJZCkpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiQ29weWluZyBhcyBcIiwgZWRnZS52LCBlZGdlLncsIGRhdGEyLCBlZGdlLm5hbWUpO1xuICAgICAgICAgICAgbmV3R3JhcGguc2V0RWRnZShlZGdlLnYsIGVkZ2UudywgZGF0YTIsIGVkZ2UubmFtZSk7XG4gICAgICAgICAgICBsb2cuaW5mbyhcIm5ld0dyYXBoIGVkZ2VzIFwiLCBuZXdHcmFwaC5lZGdlcygpLCBuZXdHcmFwaC5lZGdlKG5ld0dyYXBoLmVkZ2VzKClbMF0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgICAgIFwiU2tpcHBpbmcgY29weSBvZiBlZGdlIFwiLFxuICAgICAgICAgICAgICBlZGdlLnYsXG4gICAgICAgICAgICAgIFwiLS0+XCIsXG4gICAgICAgICAgICAgIGVkZ2UudyxcbiAgICAgICAgICAgICAgXCIgcm9vdElkOiBcIixcbiAgICAgICAgICAgICAgcm9vdElkLFxuICAgICAgICAgICAgICBcIiBjbHVzdGVySWQ6XCIsXG4gICAgICAgICAgICAgIGNsdXN0ZXJJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2cuZGVidWcoXCJSZW1vdmluZyBub2RlXCIsIG5vZGUpO1xuICAgIGdyYXBoLnJlbW92ZU5vZGUobm9kZSk7XG4gIH0pO1xufTtcbmNvbnN0IGV4dHJhY3REZXNjZW5kYW50cyA9IChpZCwgZ3JhcGgpID0+IHtcbiAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihpZCk7XG4gIGxldCByZXMgPSBbLi4uY2hpbGRyZW5dO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgcGFyZW50c1tjaGlsZF0gPSBpZDtcbiAgICByZXMgPSBbLi4ucmVzLCAuLi5leHRyYWN0RGVzY2VuZGFudHMoY2hpbGQsIGdyYXBoKV07XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5jb25zdCBmaW5kTm9uQ2x1c3RlckNoaWxkID0gKGlkLCBncmFwaCkgPT4ge1xuICBsb2cudHJhY2UoXCJTZWFyY2hpbmdcIiwgaWQpO1xuICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKGlkKTtcbiAgbG9nLnRyYWNlKFwiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkIFwiLCBpZCwgY2hpbGRyZW4pO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoIDwgMSkge1xuICAgIGxvZy50cmFjZShcIlRoaXMgaXMgYSB2YWxpZCBub2RlXCIsIGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IF9pZCA9IGZpbmROb25DbHVzdGVyQ2hpbGQoY2hpbGQsIGdyYXBoKTtcbiAgICBpZiAoX2lkKSB7XG4gICAgICBsb2cudHJhY2UoXCJGb3VuZCByZXBsYWNlbWVudCBmb3JcIiwgaWQsIFwiID0+IFwiLCBfaWQpO1xuICAgICAgcmV0dXJuIF9pZDtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBnZXRBbmNob3JJZCA9IChpZCkgPT4ge1xuICBpZiAoIWNsdXN0ZXJEYltpZF0pIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgaWYgKCFjbHVzdGVyRGJbaWRdLmV4dGVybmFsQ29ubmVjdGlvbnMpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgaWYgKGNsdXN0ZXJEYltpZF0pIHtcbiAgICByZXR1cm4gY2x1c3RlckRiW2lkXS5pZDtcbiAgfVxuICByZXR1cm4gaWQ7XG59O1xuY29uc3QgYWRqdXN0Q2x1c3RlcnNBbmRFZGdlcyA9IChncmFwaCwgZGVwdGgpID0+IHtcbiAgaWYgKCFncmFwaCB8fCBkZXB0aCA+IDEwKSB7XG4gICAgbG9nLmRlYnVnKFwiT3B0aW5nIG91dCwgbm8gZ3JhcGggXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoXCJPcHRpbmcgaW4sIGdyYXBoIFwiKTtcbiAgfVxuICBncmFwaC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKGlkKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsXG4gICAgICAgIGlkLFxuICAgICAgICBcIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogXCIsXG4gICAgICAgIGZpbmROb25DbHVzdGVyQ2hpbGQoaWQsIGdyYXBoKVxuICAgICAgKTtcbiAgICAgIGRlc2NlbmRhbnRzW2lkXSA9IGV4dHJhY3REZXNjZW5kYW50cyhpZCwgZ3JhcGgpO1xuICAgICAgY2x1c3RlckRiW2lkXSA9IHsgaWQ6IGZpbmROb25DbHVzdGVyQ2hpbGQoaWQsIGdyYXBoKSwgY2x1c3RlckRhdGE6IGdyYXBoLm5vZGUoaWQpIH07XG4gICAgfVxuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihpZCk7XG4gICAgY29uc3QgZWRnZXMgPSBncmFwaC5lZGdlcygpO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cuZGVidWcoXCJDbHVzdGVyIGlkZW50aWZpZWRcIiwgaWQsIGRlc2NlbmRhbnRzKTtcbiAgICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgICAgaWYgKGVkZ2UudiAhPT0gaWQgJiYgZWRnZS53ICE9PSBpZCkge1xuICAgICAgICAgIGNvbnN0IGQxID0gaXNEZXNjZW5kYW50KGVkZ2UudiwgaWQpO1xuICAgICAgICAgIGNvbnN0IGQyID0gaXNEZXNjZW5kYW50KGVkZ2UudywgaWQpO1xuICAgICAgICAgIGlmIChkMSBeIGQyKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkVkZ2U6IFwiLCBlZGdlLCBcIiBsZWF2ZXMgY2x1c3RlciBcIiwgaWQpO1xuICAgICAgICAgICAgbG9nLndhcm4oXCJEZWNlbmRhbnRzIG9mIFhYWCBcIiwgaWQsIFwiOiBcIiwgZGVzY2VuZGFudHNbaWRdKTtcbiAgICAgICAgICAgIGNsdXN0ZXJEYltpZF0uZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKFwiTm90IGEgY2x1c3RlciBcIiwgaWQsIGRlc2NlbmRhbnRzKTtcbiAgICB9XG4gIH0pO1xuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgIGxldCB2ID0gZS52O1xuICAgIGxldCB3ID0gZS53O1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJGaXggWFhYXCIsXG4gICAgICBjbHVzdGVyRGIsXG4gICAgICBcImlkczpcIixcbiAgICAgIGUudixcbiAgICAgIGUudyxcbiAgICAgIFwiVHJhbnNsYXRpbmc6IFwiLFxuICAgICAgY2x1c3RlckRiW2Uudl0sXG4gICAgICBcIiAtLS0gXCIsXG4gICAgICBjbHVzdGVyRGJbZS53XVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJEYltlLnZdICYmIGNsdXN0ZXJEYltlLnddICYmIGNsdXN0ZXJEYltlLnZdID09PSBjbHVzdGVyRGJbZS53XSkge1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYXCIsIGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFhcIiwgZS52LCBlLncsIGUubmFtZSk7XG4gICAgICB2ID0gZ2V0QW5jaG9ySWQoZS52KTtcbiAgICAgIHcgPSBnZXRBbmNob3JJZChlLncpO1xuICAgICAgZ3JhcGgucmVtb3ZlRWRnZShlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIGNvbnN0IHNwZWNpYWxJZCA9IGUudyArIFwiLS0tXCIgKyBlLnY7XG4gICAgICBncmFwaC5zZXROb2RlKHNwZWNpYWxJZCwge1xuICAgICAgICBkb21JZDogc3BlY2lhbElkLFxuICAgICAgICBpZDogc3BlY2lhbElkLFxuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBsYWJlbFRleHQ6IGVkZ2UubGFiZWwsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHNoYXBlOiBcImxhYmVsUmVjdFwiLFxuICAgICAgICBzdHlsZTogXCJcIlxuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGdlMSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWRnZSkpO1xuICAgICAgY29uc3QgZWRnZTIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVkZ2UpKTtcbiAgICAgIGVkZ2UxLmxhYmVsID0gXCJcIjtcbiAgICAgIGVkZ2UxLmFycm93VHlwZUVuZCA9IFwibm9uZVwiO1xuICAgICAgZWRnZTIubGFiZWwgPSBcIlwiO1xuICAgICAgZWRnZTEuZnJvbUNsdXN0ZXIgPSBlLnY7XG4gICAgICBlZGdlMi50b0NsdXN0ZXIgPSBlLnY7XG4gICAgICBncmFwaC5zZXRFZGdlKHYsIHNwZWNpYWxJZCwgZWRnZTEsIGUubmFtZSArIFwiLWN5Y2xpYy1zcGVjaWFsXCIpO1xuICAgICAgZ3JhcGguc2V0RWRnZShzcGVjaWFsSWQsIHcsIGVkZ2UyLCBlLm5hbWUgKyBcIi1jeWNsaWMtc3BlY2lhbFwiKTtcbiAgICB9IGVsc2UgaWYgKGNsdXN0ZXJEYltlLnZdIHx8IGNsdXN0ZXJEYltlLnddKSB7XG4gICAgICBsb2cud2FybihcIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWFwiLCBlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIHYgPSBnZXRBbmNob3JJZChlLnYpO1xuICAgICAgdyA9IGdldEFuY2hvcklkKGUudyk7XG4gICAgICBncmFwaC5yZW1vdmVFZGdlKGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgaWYgKHYgIT09IGUudikge1xuICAgICAgICBlZGdlLmZyb21DbHVzdGVyID0gZS52O1xuICAgICAgfVxuICAgICAgaWYgKHcgIT09IGUudykge1xuICAgICAgICBlZGdlLnRvQ2x1c3RlciA9IGUudztcbiAgICAgIH1cbiAgICAgIGxvZy53YXJuKFwiRml4IFJlcGxhY2luZyB3aXRoIFhYWFwiLCB2LCB3LCBlLm5hbWUpO1xuICAgICAgZ3JhcGguc2V0RWRnZSh2LCB3LCBlZGdlLCBlLm5hbWUpO1xuICAgIH1cbiAgfSk7XG4gIGxvZy53YXJuKFwiQWRqdXN0ZWQgR3JhcGhcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gIGV4dHJhY3RvcihncmFwaCwgMCk7XG4gIGxvZy50cmFjZShjbHVzdGVyRGIpO1xufTtcbmNvbnN0IGV4dHJhY3RvciA9IChncmFwaCwgZGVwdGgpID0+IHtcbiAgbG9nLndhcm4oXCJleHRyYWN0b3IgLSBcIiwgZGVwdGgsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCksIGdyYXBoLmNoaWxkcmVuKFwiRFwiKSk7XG4gIGlmIChkZXB0aCA+IDEwKSB7XG4gICAgbG9nLmVycm9yKFwiQmFpbGluZyBvdXRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBub2RlcyA9IGdyYXBoLm5vZGVzKCk7XG4gIGxldCBoYXNDaGlsZHJlbiA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKG5vZGUpO1xuICAgIGhhc0NoaWxkcmVuID0gaGFzQ2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgfVxuICBpZiAoIWhhc0NoaWxkcmVuKSB7XG4gICAgbG9nLmRlYnVnKFwiRG9uZSwgbm8gbm9kZSBoYXMgY2hpbGRyZW5cIiwgZ3JhcGgubm9kZXMoKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy5kZWJ1ZyhcIk5vZGVzID0gXCIsIG5vZGVzLCBkZXB0aCk7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIFwiRXh0cmFjdGluZyBub2RlXCIsXG4gICAgICBub2RlLFxuICAgICAgY2x1c3RlckRiLFxuICAgICAgY2x1c3RlckRiW25vZGVdICYmICFjbHVzdGVyRGJbbm9kZV0uZXh0ZXJuYWxDb25uZWN0aW9ucyxcbiAgICAgICFncmFwaC5wYXJlbnQobm9kZSksXG4gICAgICBncmFwaC5ub2RlKG5vZGUpLFxuICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgXCIgRGVwdGggXCIsXG4gICAgICBkZXB0aFxuICAgICk7XG4gICAgaWYgKCFjbHVzdGVyRGJbbm9kZV0pIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vdCBhIGNsdXN0ZXJcIiwgbm9kZSwgZGVwdGgpO1xuICAgIH0gZWxzZSBpZiAoIWNsdXN0ZXJEYltub2RlXS5leHRlcm5hbENvbm5lY3Rpb25zICYmIC8vICFncmFwaC5wYXJlbnQobm9kZSkgJiZcbiAgICBncmFwaC5jaGlsZHJlbihub2RlKSAmJiBncmFwaC5jaGlsZHJlbihub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW5cIixcbiAgICAgICAgbm9kZSxcbiAgICAgICAgZGVwdGhcbiAgICAgICk7XG4gICAgICBjb25zdCBncmFwaFNldHRpbmdzID0gZ3JhcGguZ3JhcGgoKTtcbiAgICAgIGxldCBkaXIgPSBncmFwaFNldHRpbmdzLnJhbmtkaXIgPT09IFwiVEJcIiA/IFwiTFJcIiA6IFwiVEJcIjtcbiAgICAgIGlmIChjbHVzdGVyRGJbbm9kZV0gJiYgY2x1c3RlckRiW25vZGVdLmNsdXN0ZXJEYXRhICYmIGNsdXN0ZXJEYltub2RlXS5jbHVzdGVyRGF0YS5kaXIpIHtcbiAgICAgICAgZGlyID0gY2x1c3RlckRiW25vZGVdLmNsdXN0ZXJEYXRhLmRpcjtcbiAgICAgICAgbG9nLndhcm4oXCJGaXhpbmcgZGlyXCIsIGNsdXN0ZXJEYltub2RlXS5jbHVzdGVyRGF0YS5kaXIsIGRpcik7XG4gICAgICB9XG4gICAgICBjb25zdCBjbHVzdGVyR3JhcGggPSBuZXcgZ3JhcGhsaWIuR3JhcGgoe1xuICAgICAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgICAgICBjb21wb3VuZDogdHJ1ZVxuICAgICAgfSkuc2V0R3JhcGgoe1xuICAgICAgICByYW5rZGlyOiBkaXIsXG4gICAgICAgIC8vIFRvZG86IHNldCBwcm9wZXIgc3BhY2luZ1xuICAgICAgICBub2Rlc2VwOiA1MCxcbiAgICAgICAgcmFua3NlcDogNTAsXG4gICAgICAgIG1hcmdpbng6IDgsXG4gICAgICAgIG1hcmdpbnk6IDhcbiAgICAgIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICAgICAgbG9nLndhcm4oXCJPbGQgZ3JhcGggYmVmb3JlIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgICBjb3B5KG5vZGUsIGdyYXBoLCBjbHVzdGVyR3JhcGgsIG5vZGUpO1xuICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLCB7XG4gICAgICAgIGNsdXN0ZXJOb2RlOiB0cnVlLFxuICAgICAgICBpZDogbm9kZSxcbiAgICAgICAgY2x1c3RlckRhdGE6IGNsdXN0ZXJEYltub2RlXS5jbHVzdGVyRGF0YSxcbiAgICAgICAgbGFiZWxUZXh0OiBjbHVzdGVyRGJbbm9kZV0ubGFiZWxUZXh0LFxuICAgICAgICBncmFwaDogY2x1c3RlckdyYXBoXG4gICAgICB9KTtcbiAgICAgIGxvZy53YXJuKFwiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKFwiLCBub2RlLCBcIilcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGNsdXN0ZXJHcmFwaCkpO1xuICAgICAgbG9nLmRlYnVnKFwiT2xkIGdyYXBoIGFmdGVyIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBcIkNsdXN0ZXIgKiogXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIFwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOlwiLFxuICAgICAgICAhY2x1c3RlckRiW25vZGVdLmV4dGVybmFsQ29ubmVjdGlvbnMsXG4gICAgICAgIFwiIG5vIHBhcmVudDogXCIsXG4gICAgICAgICFncmFwaC5wYXJlbnQobm9kZSksXG4gICAgICAgIFwiIGNoaWxkcmVuIFwiLFxuICAgICAgICBncmFwaC5jaGlsZHJlbihub2RlKSAmJiBncmFwaC5jaGlsZHJlbihub2RlKS5sZW5ndGggPiAwLFxuICAgICAgICBncmFwaC5jaGlsZHJlbihcIkRcIiksXG4gICAgICAgIGRlcHRoXG4gICAgICApO1xuICAgICAgbG9nLmRlYnVnKGNsdXN0ZXJEYik7XG4gICAgfVxuICB9XG4gIG5vZGVzID0gZ3JhcGgubm9kZXMoKTtcbiAgbG9nLndhcm4oXCJOZXcgbGlzdCBvZiBub2Rlc1wiLCBub2Rlcyk7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGNvbnN0IGRhdGEgPSBncmFwaC5ub2RlKG5vZGUpO1xuICAgIGxvZy53YXJuKFwiIE5vdyBuZXh0IGxldmVsXCIsIG5vZGUsIGRhdGEpO1xuICAgIGlmIChkYXRhLmNsdXN0ZXJOb2RlKSB7XG4gICAgICBleHRyYWN0b3IoZGF0YS5ncmFwaCwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBzb3J0ZXIgPSAoZ3JhcGgsIG5vZGVzKSA9PiB7XG4gIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24obm9kZXMpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihub2RlKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBzb3J0ZXIoZ3JhcGgsIGNoaWxkcmVuKTtcbiAgICByZXN1bHQgPSBbLi4ucmVzdWx0LCAuLi5zb3J0ZWRdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBzb3J0Tm9kZXNCeUhpZXJhcmNoeSA9IChncmFwaCkgPT4gc29ydGVyKGdyYXBoLCBncmFwaC5jaGlsZHJlbigpKTtcbmNvbnN0IHJlY3QgPSAocGFyZW50LCBub2RlKSA9PiB7XG4gIGxvZy5pbmZvKFwiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgXCIsIG5vZGUuaWQsIG5vZGUpO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsdXN0ZXJcIiArIChub2RlLmNsYXNzID8gXCIgXCIgKyBub2RlLmNsYXNzIDogXCJcIikpLmF0dHIoXCJpZFwiLCBub2RlLmlkKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY2x1c3Rlci1sYWJlbFwiKTtcbiAgY29uc3QgdGV4dCA9IG5vZGUubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIgPyBjcmVhdGVUZXh0KGxhYmVsLCBub2RlLmxhYmVsVGV4dCwgeyBzdHlsZTogbm9kZS5sYWJlbFN0eWxlLCB1c2VIdG1sTGFiZWxzIH0pIDogbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsKG5vZGUubGFiZWxUZXh0LCBub2RlLmxhYmVsU3R5bGUsIHZvaWQgMCwgdHJ1ZSkpO1xuICBsZXQgYmJveCA9IHRleHQuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gdGV4dC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdCh0ZXh0KTtcbiAgICBiYm94ID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICBkdi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgfVxuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgY29uc3Qgd2lkdGggPSBub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBwYWRkaW5nID8gYmJveC53aWR0aCArIHBhZGRpbmcgOiBub2RlLndpZHRoO1xuICBpZiAobm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgcGFkZGluZykge1xuICAgIG5vZGUuZGlmZiA9IChiYm94LndpZHRoIC0gbm9kZS53aWR0aCkgLyAyIC0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nIC8gMjtcbiAgfVxuICBsb2cudHJhY2UoXCJEYXRhIFwiLCBub2RlLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gIHJlY3QyLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIHdpZHRoIC8gMikuYXR0cihcInlcIiwgbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCArIHBhZGRpbmcpO1xuICBpZiAodXNlSHRtbExhYmVscykge1xuICAgIGxhYmVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgLy8gVGhpcyBwdXRzIHRoZSBsYWJhbCBvbiB0b3Agb2YgdGhlIGJveCBpbnN0ZWFkIG9mIGluc2lkZSBpdFxuICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAobm9kZS54IC0gYmJveC53aWR0aCAvIDIpICsgXCIsIFwiICsgKG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMikgKyBcIilcIlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAvLyBUaGlzIHB1dHMgdGhlIGxhYmFsIG9uIHRvcCBvZiB0aGUgYm94IGluc3RlYWQgb2YgaW5zaWRlIGl0XG4gICAgICBcInRyYW5zbGF0ZShcIiArIG5vZGUueCArIFwiLCBcIiArIChub2RlLnkgLSBub2RlLmhlaWdodCAvIDIpICsgXCIpXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLndpZHRoID0gcmVjdEJveC53aWR0aDtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RSZWN0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IG5vdGVHcm91cCA9IChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub3RlLWNsdXN0ZXJcIikuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICByZWN0Mi5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLndpZHRoID0gcmVjdEJveC53aWR0aDtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RSZWN0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufTtcbmNvbnN0IHJvdW5kZWRXaXRoVGl0bGUgPSAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsXCIpO1xuICBjb25zdCBpbm5lclJlY3QgPSBzaGFwZVN2Zy5hcHBlbmQoXCJyZWN0XCIpO1xuICBjb25zdCB0ZXh0ID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsKG5vZGUubGFiZWxUZXh0LCBub2RlLmxhYmVsU3R5bGUsIHZvaWQgMCwgdHJ1ZSkpO1xuICBsZXQgYmJveCA9IHRleHQuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gdGV4dC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdCh0ZXh0KTtcbiAgICBiYm94ID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICBkdi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgfVxuICBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGggPD0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZyA/IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgOiBub2RlLndpZHRoO1xuICBpZiAobm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nKSB7XG4gICAgbm9kZS5kaWZmID0gKGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgKiAwIC0gbm9kZS53aWR0aCkgLyAyO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuZGlmZiA9IC1ub2RlLnBhZGRpbmcgLyAyO1xuICB9XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcIm91dGVyXCIpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIHdpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIHdpZHRoICsgcGFkZGluZykuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCArIHBhZGRpbmcpO1xuICBpbm5lclJlY3QuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIikuYXR0cihcInhcIiwgbm9kZS54IC0gd2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgYmJveC5oZWlnaHQgLSAxKS5hdHRyKFwid2lkdGhcIiwgd2lkdGggKyBwYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0ICsgcGFkZGluZyAtIGJib3guaGVpZ2h0IC0gMyk7XG4gIGxhYmVsLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggLSBiYm94LndpZHRoIC8gMikgKyBcIiwgXCIgKyAobm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gbm9kZS5wYWRkaW5nIC8gMyArIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykgPyA1IDogMykpICsgXCIpXCJcbiAgKTtcbiAgY29uc3QgcmVjdEJveCA9IHJlY3QyLm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0UmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn07XG5jb25zdCBkaXZpZGVyID0gKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBub2RlLmNsYXNzZXMpLmF0dHIoXCJpZFwiLCBub2RlLmlkKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwiZGl2aWRlclwiKS5hdHRyKFwieFwiLCBub2RlLnggLSBub2RlLndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBub2RlLndpZHRoICsgcGFkZGluZykuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCArIHBhZGRpbmcpO1xuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuZGlmZiA9IC1ub2RlLnBhZGRpbmcgLyAyO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdFJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59O1xuY29uc3Qgc2hhcGVzID0geyByZWN0LCByb3VuZGVkV2l0aFRpdGxlLCBub3RlR3JvdXAsIGRpdmlkZXIgfTtcbmxldCBjbHVzdGVyRWxlbXMgPSB7fTtcbmNvbnN0IGluc2VydENsdXN0ZXIgPSAoZWxlbSwgbm9kZSkgPT4ge1xuICBsb2cudHJhY2UoXCJJbnNlcnRpbmcgY2x1c3RlclwiKTtcbiAgY29uc3Qgc2hhcGUgPSBub2RlLnNoYXBlIHx8IFwicmVjdFwiO1xuICBjbHVzdGVyRWxlbXNbbm9kZS5pZF0gPSBzaGFwZXNbc2hhcGVdKGVsZW0sIG5vZGUpO1xufTtcbmNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICBjbHVzdGVyRWxlbXMgPSB7fTtcbn07XG5jb25zdCByZWN1cnNpdmVSZW5kZXIgPSBhc3luYyAoX2VsZW0sIGdyYXBoLCBkaWFncmFtdHlwZSwgcGFyZW50Q2x1c3RlcikgPT4ge1xuICBsb2cuaW5mbyhcIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWFwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpLCBwYXJlbnRDbHVzdGVyKTtcbiAgY29uc3QgZGlyID0gZ3JhcGguZ3JhcGgoKS5yYW5rZGlyO1xuICBsb2cudHJhY2UoXCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjpcIiwgZGlyKTtcbiAgY29uc3QgZWxlbSA9IF9lbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicm9vdFwiKTtcbiAgaWYgKCFncmFwaC5ub2RlcygpKSB7XG4gICAgbG9nLmluZm8oXCJObyBub2RlcyBmb3VuZCBmb3JcIiwgZ3JhcGgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIHJlbmRlciBYWFhcIiwgZ3JhcGgubm9kZXMoKSk7XG4gIH1cbiAgaWYgKGdyYXBoLmVkZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIGxvZy50cmFjZShcIlJlY3Vyc2l2ZSBlZGdlc1wiLCBncmFwaC5lZGdlKGdyYXBoLmVkZ2VzKClbMF0pKTtcbiAgfVxuICBjb25zdCBjbHVzdGVycyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyc1wiKTtcbiAgY29uc3QgZWRnZVBhdGhzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VQYXRoc1wiKTtcbiAgY29uc3QgZWRnZUxhYmVscyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlTGFiZWxzXCIpO1xuICBjb25zdCBub2RlcyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZ3JhcGgubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24odikge1xuICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLm5vZGUodik7XG4gICAgICBpZiAocGFyZW50Q2x1c3RlciAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBhcmVudENsdXN0ZXIuY2x1c3RlckRhdGEpKTtcbiAgICAgICAgbG9nLmluZm8oXCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYIChcIiwgdiwgXCIpIFwiLCBkYXRhLCBwYXJlbnRDbHVzdGVyKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShwYXJlbnRDbHVzdGVyLmlkLCBkYXRhKTtcbiAgICAgICAgaWYgKCFncmFwaC5wYXJlbnQodikpIHtcbiAgICAgICAgICBsb2cudHJhY2UoXCJTZXR0aW5nIHBhcmVudFwiLCB2LCBwYXJlbnRDbHVzdGVyLmlkKTtcbiAgICAgICAgICBncmFwaC5zZXRQYXJlbnQodiwgcGFyZW50Q2x1c3Rlci5pZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKFwiKEluc2VydCkgTm9kZSBYWFhcIiArIHYgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5ub2RlKHYpKSk7XG4gICAgICBpZiAobm9kZSAmJiBub2RlLmNsdXN0ZXJOb2RlKSB7XG4gICAgICAgIGxvZy5pbmZvKFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsIHYsIG5vZGUud2lkdGgsIGdyYXBoLm5vZGUodikpO1xuICAgICAgICBjb25zdCBvID0gYXdhaXQgcmVjdXJzaXZlUmVuZGVyKG5vZGVzLCBub2RlLmdyYXBoLCBkaWFncmFtdHlwZSwgZ3JhcGgubm9kZSh2KSk7XG4gICAgICAgIGNvbnN0IG5ld0VsID0gby5lbGVtO1xuICAgICAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIG5ld0VsKTtcbiAgICAgICAgbm9kZS5kaWZmID0gby5kaWZmIHx8IDA7XG4gICAgICAgIGxvZy5pbmZvKFwiTm9kZSBib3VuZHMgKGFiYzEyMylcIiwgdiwgbm9kZSwgbm9kZS53aWR0aCwgbm9kZS54LCBub2RlLnkpO1xuICAgICAgICBzZXROb2RlRWxlbShuZXdFbCwgbm9kZSk7XG4gICAgICAgIGxvZy53YXJuKFwiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSBcIiwgbmV3RWwsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2cuaW5mbyhcIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWFwiLCB2LCBub2RlLmlkLCBub2RlLCBncmFwaCk7XG4gICAgICAgICAgbG9nLmluZm8oZmluZE5vbkNsdXN0ZXJDaGlsZChub2RlLmlkLCBncmFwaCkpO1xuICAgICAgICAgIGNsdXN0ZXJEYltub2RlLmlkXSA9IHsgaWQ6IGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpLCBub2RlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oXCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aFwiLCB2LCBub2RlLmlkLCBub2RlKTtcbiAgICAgICAgICBhd2FpdCBpbnNlcnROb2RlKG5vZGVzLCBncmFwaC5ub2RlKHYpLCBkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgZ3JhcGguZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBlZGdlID0gZ3JhcGguZWRnZShlLnYsIGUudywgZS5uYW1lKTtcbiAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiwgZSwgXCIgXCIsIEpTT04uc3RyaW5naWZ5KGdyYXBoLmVkZ2UoZSkpKTtcbiAgICBsb2cuaW5mbyhcIkZpeFwiLCBjbHVzdGVyRGIsIFwiaWRzOlwiLCBlLnYsIGUudywgXCJUcmFuc2xhdGVpbmc6IFwiLCBjbHVzdGVyRGJbZS52XSwgY2x1c3RlckRiW2Uud10pO1xuICAgIGluc2VydEVkZ2VMYWJlbChlZGdlTGFiZWxzLCBlZGdlKTtcbiAgfSk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShlKSk7XG4gIH0pO1xuICBsb2cuaW5mbyhcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiKTtcbiAgbG9nLmluZm8oXCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyNcIik7XG4gIGxvZy5pbmZvKFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCIpO1xuICBsb2cuaW5mbyhncmFwaCk7XG4gIGxheW91dChncmFwaCk7XG4gIGxvZy5pbmZvKFwiR3JhcGggYWZ0ZXIgbGF5b3V0OlwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpKTtcbiAgbGV0IGRpZmYgPSAwO1xuICBzb3J0Tm9kZXNCeUhpZXJhcmNoeShncmFwaCkuZm9yRWFjaChmdW5jdGlvbih2KSB7XG4gICAgY29uc3Qgbm9kZSA9IGdyYXBoLm5vZGUodik7XG4gICAgbG9nLmluZm8oXCJQb3NpdGlvbiBcIiArIHYgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5ub2RlKHYpKSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBcIlBvc2l0aW9uIFwiICsgdiArIFwiOiAoXCIgKyBub2RlLngsXG4gICAgICBcIixcIiArIG5vZGUueSxcbiAgICAgIFwiKSB3aWR0aDogXCIsXG4gICAgICBub2RlLndpZHRoLFxuICAgICAgXCIgaGVpZ2h0OiBcIixcbiAgICAgIG5vZGUuaGVpZ2h0XG4gICAgKTtcbiAgICBpZiAobm9kZSAmJiBub2RlLmNsdXN0ZXJOb2RlKSB7XG4gICAgICBwb3NpdGlvbk5vZGUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChncmFwaC5jaGlsZHJlbih2KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluc2VydENsdXN0ZXIoY2x1c3RlcnMsIG5vZGUpO1xuICAgICAgICBjbHVzdGVyRGJbbm9kZS5pZF0ubm9kZSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3NpdGlvbk5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgZ3JhcGguZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBlZGdlID0gZ3JhcGguZWRnZShlKTtcbiAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGVkZ2UpLCBlZGdlKTtcbiAgICBjb25zdCBwYXRocyA9IGluc2VydEVkZ2UoZWRnZVBhdGhzLCBlLCBlZGdlLCBjbHVzdGVyRGIsIGRpYWdyYW10eXBlLCBncmFwaCk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWwoZWRnZSwgcGF0aHMpO1xuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBuID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyh2LCBuLnR5cGUsIG4uZGlmZik7XG4gICAgaWYgKG4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICBkaWZmID0gbi5kaWZmO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7IGVsZW0sIGRpZmYgfTtcbn07XG5jb25zdCByZW5kZXIgPSBhc3luYyAoZWxlbSwgZ3JhcGgsIG1hcmtlcnMsIGRpYWdyYW10eXBlLCBpZCkgPT4ge1xuICBpbnNlcnRNYXJrZXJzKGVsZW0sIG1hcmtlcnMsIGRpYWdyYW10eXBlLCBpZCk7XG4gIGNsZWFyJDIoKTtcbiAgY2xlYXIkMygpO1xuICBjbGVhcigpO1xuICBjbGVhciQxKCk7XG4gIGxvZy53YXJuKFwiR3JhcGggYXQgZmlyc3Q6XCIsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCkpO1xuICBhZGp1c3RDbHVzdGVyc0FuZEVkZ2VzKGdyYXBoKTtcbiAgbG9nLndhcm4oXCJHcmFwaCBhZnRlcjpcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gIGF3YWl0IHJlY3Vyc2l2ZVJlbmRlcihlbGVtLCBncmFwaCwgZGlhZ3JhbXR5cGUpO1xufTtcbmV4cG9ydCB7XG4gIHJlbmRlciBhcyByXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/index-a92ac404.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/infoDiagram-264bed3e.js": /*!******************************************************************!*\ !*** ../../../node_modules/mermaid/dist/infoDiagram-264bed3e.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [6, 9, 10];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"info\": 4, \"document\": 5, \"EOF\": 6, \"line\": 7, \"statement\": 8, \"NL\": 9, \"showInfo\": 10, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"info\", 6: \"EOF\", 9: \"NL\", 10: \"showInfo\" },\n productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n $$.length - 1;\n switch (yystate) {\n case 1:\n return yy;\n case 4:\n break;\n case 6:\n yy.setInfo(true);\n break;\n }\n },\n table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])],\n defaultActions: { 4: [2, 1] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 4;\n case 1:\n return 9;\n case 2:\n return \"space\";\n case 3:\n return 10;\n case 4:\n return 6;\n case 5:\n return \"TXT\";\n }\n },\n rules: [/^(?:info\\b)/i, /^(?:[\\s\\n\\r]+)/i, /^(?:[\\s]+)/i, /^(?:showInfo\\b)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nvar message = \"\";\nvar info = false;\nconst setMessage = (txt) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Setting message to: \" + txt);\n message = txt;\n};\nconst getMessage = () => {\n return message;\n};\nconst setInfo = (inf) => {\n info = inf;\n};\nconst getInfo = () => {\n return info;\n};\nconst db = {\n setMessage,\n getMessage,\n setInfo,\n getInfo,\n clear: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v\n // parseError\n};\nconst getStyles = () => ``;\nconst styles = getStyles;\nconst draw = (text, id, version) => {\n try {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Rendering info diagram\\n\" + text);\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(\"#\" + id);\n const g = svg.append(\"g\");\n g.append(\"text\").attr(\"x\", 100).attr(\"y\", 40).attr(\"class\", \"version\").attr(\"font-size\", \"32px\").style(\"text-anchor\", \"middle\").text(\"v \" + version);\n svg.attr(\"height\", 100);\n svg.attr(\"width\", 400);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"Error while rendering info diagram\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(e.message);\n }\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9pbmZvRGlhZ3JhbS0yNjRiZWQzZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTZFO0FBQ2pEO0FBQ1Q7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQix5SUFBeUk7QUFDekosa0JBQWtCLDBEQUEwRDtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYyxpQkFBaUIsSUFBSSxRQUFRLG1CQUFtQixNQUFNLEtBQUssOENBQThDLElBQUksV0FBVztBQUN0SSxzQkFBc0IsV0FBVztBQUNqQztBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsaUJBQWlCLDBCQUEwQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxvQkFBb0IsYUFBYTtBQUNqQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx5REFBUztBQUNiLDBCQUEwQix1REFBUztBQUNuQztBQUNBO0FBQ0EsdUJBQXVCLDBDQUFNO0FBQzdCO0FBQ0EsK0NBQStDLDBDQUFNLG1EQUFtRCwwQ0FBTTtBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUkseURBQVM7QUFDYixJQUFJLHlEQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvaW5mb0RpYWdyYW0tMjY0YmVkM2UuanM/ODNkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2IGFzIGNsZWFyLCBsIGFzIGxvZywgYyBhcyBnZXRDb25maWcgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCBcInRzLWRlZGVudFwiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFs2LCA5LCAxMF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJpbmZvXCI6IDQsIFwiZG9jdW1lbnRcIjogNSwgXCJFT0ZcIjogNiwgXCJsaW5lXCI6IDcsIFwic3RhdGVtZW50XCI6IDgsIFwiTkxcIjogOSwgXCJzaG93SW5mb1wiOiAxMCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiaW5mb1wiLCA2OiBcIkVPRlwiLCA5OiBcIk5MXCIsIDEwOiBcInNob3dJbmZvXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFs1LCAwXSwgWzUsIDJdLCBbNywgMV0sIFs3LCAxXSwgWzgsIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4geXk7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHl5LnNldEluZm8odHJ1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IDYsIDk6IFsxLCA3XSwgMTA6IFsxLCA4XSB9LCB7IDE6IFsyLCAxXSB9LCBvKCRWMCwgWzIsIDNdKSwgbygkVjAsIFsyLCA0XSksIG8oJFYwLCBbMiwgNV0pLCBvKCRWMCwgWzIsIDZdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgNDogWzIsIDFdIH0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICB2YXIgc3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGxleGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiBmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiBmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiBmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gXCJzcGFjZVwiO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAxMDtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gXCJUWFRcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiBbL14oPzppbmZvXFxiKS9pLCAvXig/OltcXHNcXG5cXHJdKykvaSwgL14oPzpbXFxzXSspL2ksIC9eKD86c2hvd0luZm9cXGIpL2ksIC9eKD86JCkvaSwgL14oPzouKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMiwgMywgNCwgNV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBQYXJzZXIucHJvdG90eXBlID0gcGFyc2VyMjtcbiAgcGFyc2VyMi5QYXJzZXIgPSBQYXJzZXI7XG4gIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KCk7XG5wYXJzZXIucGFyc2VyID0gcGFyc2VyO1xuY29uc3QgcGFyc2VyJDEgPSBwYXJzZXI7XG52YXIgbWVzc2FnZSA9IFwiXCI7XG52YXIgaW5mbyA9IGZhbHNlO1xuY29uc3Qgc2V0TWVzc2FnZSA9ICh0eHQpID0+IHtcbiAgbG9nLmRlYnVnKFwiU2V0dGluZyBtZXNzYWdlIHRvOiBcIiArIHR4dCk7XG4gIG1lc3NhZ2UgPSB0eHQ7XG59O1xuY29uc3QgZ2V0TWVzc2FnZSA9ICgpID0+IHtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuY29uc3Qgc2V0SW5mbyA9IChpbmYpID0+IHtcbiAgaW5mbyA9IGluZjtcbn07XG5jb25zdCBnZXRJbmZvID0gKCkgPT4ge1xuICByZXR1cm4gaW5mbztcbn07XG5jb25zdCBkYiA9IHtcbiAgc2V0TWVzc2FnZSxcbiAgZ2V0TWVzc2FnZSxcbiAgc2V0SW5mbyxcbiAgZ2V0SW5mbyxcbiAgY2xlYXJcbiAgLy8gcGFyc2VFcnJvclxufTtcbmNvbnN0IGdldFN0eWxlcyA9ICgpID0+IGBgO1xuY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3QgZHJhdyA9ICh0ZXh0LCBpZCwgdmVyc2lvbikgPT4ge1xuICB0cnkge1xuICAgIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyBpbmZvIGRpYWdyYW1cXG5cIiArIHRleHQpO1xuICAgIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICAgIGxldCBzYW5kYm94RWxlbWVudDtcbiAgICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgICBjb25zdCBzdmcgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIik7XG4gICAgZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDEwMCkuYXR0cihcInlcIiwgNDApLmF0dHIoXCJjbGFzc1wiLCBcInZlcnNpb25cIikuYXR0cihcImZvbnQtc2l6ZVwiLCBcIjMycHhcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KFwidiBcIiArIHZlcnNpb24pO1xuICAgIHN2Zy5hdHRyKFwiaGVpZ2h0XCIsIDEwMCk7XG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCA0MDApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbVwiKTtcbiAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKTtcbiAgfVxufTtcbmNvbnN0IHJlbmRlcmVyID0ge1xuICBkcmF3XG59O1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBwYXJzZXIkMSxcbiAgZGIsXG4gIHJlbmRlcmVyLFxuICBzdHlsZXNcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/infoDiagram-264bed3e.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/journeyDiagram-31be0096.js": /*!*********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/journeyDiagram-31be0096.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./svgDrawCommon-f26cad39.js */ \"../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 24, 26], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 24], $Va = [4, 6, 9, 11, 17, 18, 20, 22, 23, 24, 26];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"journey\": 4, \"document\": 5, \"EOF\": 6, \"directive\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NEWLINE\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \":\": 15, \"argDirective\": 16, \"title\": 17, \"acc_title\": 18, \"acc_title_value\": 19, \"acc_descr\": 20, \"acc_descr_value\": 21, \"acc_descr_multiline_value\": 22, \"section\": 23, \"taskName\": 24, \"taskData\": 25, \"open_directive\": 26, \"type_directive\": 27, \"arg_directive\": 28, \"close_directive\": 29, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"journey\", 6: \"EOF\", 9: \"SPACE\", 11: \"NEWLINE\", 15: \":\", 17: \"title\", 18: \"acc_title\", 19: \"acc_title_value\", 20: \"acc_descr\", 21: \"acc_descr_value\", 22: \"acc_descr_multiline_value\", 23: \"section\", 24: \"taskName\", 25: \"taskData\", 26: \"open_directive\", 27: \"type_directive\", 28: \"arg_directive\", 29: \"close_directive\" },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 11:\n yy.setDiagramTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n case 12:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 13:\n case 14:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 15:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 16:\n yy.addTask($$[$0 - 1], $$[$0]);\n this.$ = \"task\";\n break;\n case 18:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 19:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 20:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 21:\n yy.parseDirective(\"}%%\", \"close_directive\", \"journey\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 13: 8, 27: [1, 9] }, { 27: [2, 18] }, { 6: [1, 10], 7: 21, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, { 1: [2, 2] }, { 14: 22, 15: [1, 23], 29: $V9 }, o([15, 29], [2, 19]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 21, 10: 25, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 26] }, { 21: [1, 27] }, o($V2, [2, 14]), o($V2, [2, 15]), { 25: [1, 28] }, o($V2, [2, 17]), { 11: [1, 29] }, { 16: 30, 28: [1, 31] }, { 11: [2, 21] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 16]), o($Va, [2, 9]), { 14: 32, 29: $V9 }, { 29: [2, 20] }, { 11: [1, 33] }, o($Va, [2, 10])],\n defaultActions: { 5: [2, 18], 7: [2, 2], 24: [2, 21], 31: [2, 20] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 26;\n case 1:\n this.begin(\"type_directive\");\n return 27;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 15;\n case 3:\n this.popState();\n this.popState();\n return 29;\n case 4:\n return 28;\n case 5:\n break;\n case 6:\n break;\n case 7:\n return 11;\n case 8:\n break;\n case 9:\n break;\n case 10:\n return 4;\n case 11:\n return 17;\n case 12:\n this.begin(\"acc_title\");\n return 18;\n case 13:\n this.popState();\n return \"acc_title_value\";\n case 14:\n this.begin(\"acc_descr\");\n return 20;\n case 15:\n this.popState();\n return \"acc_descr_value\";\n case 16:\n this.begin(\"acc_descr_multiline\");\n break;\n case 17:\n this.popState();\n break;\n case 18:\n return \"acc_descr_multiline_value\";\n case 19:\n return 23;\n case 20:\n return 24;\n case 21:\n return 25;\n case 22:\n return 15;\n case 23:\n return 6;\n case 24:\n return \"INVALID\";\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:#[^\\n]*)/i, /^(?:journey\\b)/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:section\\s[^#:\\n;]+)/i, /^(?:[^#:\\n;]+)/i, /^(?::[^#\\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [17, 18], \"inclusive\": false }, \"acc_descr\": { \"rules\": [15], \"inclusive\": false }, \"acc_title\": { \"rules\": [13], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23, 24], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet currentSection = \"\";\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nconst clear = function() {\n sections.length = 0;\n tasks.length = 0;\n currentSection = \"\";\n rawTasks.length = 0;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst addSection = function(txt) {\n currentSection = txt;\n sections.push(txt);\n};\nconst getSections = function() {\n return sections;\n};\nconst getTasks = function() {\n let allItemsProcessed = compileTasks();\n const maxDepth = 100;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n tasks.push(...rawTasks);\n return tasks;\n};\nconst updateActors = function() {\n const tempActors = [];\n tasks.forEach((task) => {\n if (task.people) {\n tempActors.push(...task.people);\n }\n });\n const unique = new Set(tempActors);\n return [...unique].sort();\n};\nconst addTask = function(descr, taskData) {\n const pieces = taskData.substr(1).split(\":\");\n let score = 0;\n let peeps = [];\n if (pieces.length === 1) {\n score = Number(pieces[0]);\n peeps = [];\n } else {\n score = Number(pieces[0]);\n peeps = pieces[1].split(\",\");\n }\n const peopleList = peeps.map((s) => s.trim());\n const rawTask = {\n section: currentSection,\n type: currentSection,\n people: peopleList,\n task: descr,\n score\n };\n rawTasks.push(rawTask);\n};\nconst addTaskOrg = function(descr) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n tasks.push(newTask);\n};\nconst compileTasks = function() {\n const compileTask = function(pos) {\n return rawTasks[pos].processed;\n };\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\nconst getActors = function() {\n return updateActors();\n};\nconst db = {\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey,\n clear,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n addSection,\n getSections,\n getTasks,\n addTask,\n addTaskOrg,\n getActors\n};\nconst getStyles = (options) => `.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${options.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${options.textColor}\n }\n\n .legend {\n fill: ${options.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${options.textColor}\n }\n\n .face {\n ${options.faceColor ? `fill: ${options.faceColor}` : \"fill: #FFF8DC\"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${options.fillType0 ? `fill: ${options.fillType0}` : \"\"};\n }\n .task-type-1, .section-type-1 {\n ${options.fillType0 ? `fill: ${options.fillType1}` : \"\"};\n }\n .task-type-2, .section-type-2 {\n ${options.fillType0 ? `fill: ${options.fillType2}` : \"\"};\n }\n .task-type-3, .section-type-3 {\n ${options.fillType0 ? `fill: ${options.fillType3}` : \"\"};\n }\n .task-type-4, .section-type-4 {\n ${options.fillType0 ? `fill: ${options.fillType4}` : \"\"};\n }\n .task-type-5, .section-type-5 {\n ${options.fillType0 ? `fill: ${options.fillType5}` : \"\"};\n }\n .task-type-6, .section-type-6 {\n ${options.fillType0 ? `fill: ${options.fillType6}` : \"\"};\n }\n .task-type-7, .section-type-7 {\n ${options.fillType0 ? `fill: ${options.fillType7}` : \"\"};\n }\n\n .actor-0 {\n ${options.actor0 ? `fill: ${options.actor0}` : \"\"};\n }\n .actor-1 {\n ${options.actor1 ? `fill: ${options.actor1}` : \"\"};\n }\n .actor-2 {\n ${options.actor2 ? `fill: ${options.actor2}` : \"\"};\n }\n .actor-3 {\n ${options.actor3 ? `fill: ${options.actor3}` : \"\"};\n }\n .actor-4 {\n ${options.actor4 ? `fill: ${options.actor4}` : \"\"};\n }\n .actor-5 {\n ${options.actor5 ? `fill: ${options.actor5}` : \"\"};\n }\n`;\nconst styles = getStyles;\nconst drawRect = function(elem, rectData) {\n return (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.d)(elem, rectData);\n};\nconst drawFace = function(element, faceData) {\n const radius = 15;\n const circleElement = element.append(\"circle\").attr(\"cx\", faceData.cx).attr(\"cy\", faceData.cy).attr(\"class\", \"face\").attr(\"r\", radius).attr(\"stroke-width\", 2).attr(\"overflow\", \"visible\");\n const face = element.append(\"g\");\n face.append(\"circle\").attr(\"cx\", faceData.cx - radius / 3).attr(\"cy\", faceData.cy - radius / 3).attr(\"r\", 1.5).attr(\"stroke-width\", 2).attr(\"fill\", \"#666\").attr(\"stroke\", \"#666\");\n face.append(\"circle\").attr(\"cx\", faceData.cx + radius / 3).attr(\"cy\", faceData.cy - radius / 3).attr(\"r\", 1.5).attr(\"stroke-width\", 2).attr(\"fill\", \"#666\").attr(\"stroke\", \"#666\");\n function smile(face2) {\n const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);\n face2.append(\"path\").attr(\"class\", \"mouth\").attr(\"d\", arc$1).attr(\"transform\", \"translate(\" + faceData.cx + \",\" + (faceData.cy + 2) + \")\");\n }\n function sad(face2) {\n const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);\n face2.append(\"path\").attr(\"class\", \"mouth\").attr(\"d\", arc$1).attr(\"transform\", \"translate(\" + faceData.cx + \",\" + (faceData.cy + 7) + \")\");\n }\n function ambivalent(face2) {\n face2.append(\"line\").attr(\"class\", \"mouth\").attr(\"stroke\", 2).attr(\"x1\", faceData.cx - 5).attr(\"y1\", faceData.cy + 7).attr(\"x2\", faceData.cx + 5).attr(\"y2\", faceData.cy + 7).attr(\"class\", \"mouth\").attr(\"stroke-width\", \"1px\").attr(\"stroke\", \"#666\");\n }\n if (faceData.score > 3) {\n smile(face);\n } else if (faceData.score < 3) {\n sad(face);\n } else {\n ambivalent(face);\n }\n return circleElement;\n};\nconst drawCircle = function(element, circleData) {\n const circleElement = element.append(\"circle\");\n circleElement.attr(\"cx\", circleData.cx);\n circleElement.attr(\"cy\", circleData.cy);\n circleElement.attr(\"class\", \"actor-\" + circleData.pos);\n circleElement.attr(\"fill\", circleData.fill);\n circleElement.attr(\"stroke\", circleData.stroke);\n circleElement.attr(\"r\", circleData.r);\n if (circleElement.class !== void 0) {\n circleElement.attr(\"class\", circleElement.class);\n }\n if (circleData.title !== void 0) {\n circleElement.append(\"title\").text(circleData.title);\n }\n return circleElement;\n};\nconst drawText = function(elem, textData) {\n return (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.f)(elem, textData);\n};\nconst drawLabel = function(elem, txtObject) {\n function genPoints(x, y, width, height, cut) {\n return x + \",\" + y + \" \" + (x + width) + \",\" + y + \" \" + (x + width) + \",\" + (y + height - cut) + \" \" + (x + width - cut * 1.2) + \",\" + (y + height) + \" \" + x + \",\" + (y + height);\n }\n const polygon = elem.append(\"polygon\");\n polygon.attr(\"points\", genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n polygon.attr(\"class\", \"labelBox\");\n txtObject.y = txtObject.y + txtObject.labelMargin;\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n drawText(elem, txtObject);\n};\nconst drawSection = function(elem, section, conf2) {\n const g = elem.append(\"g\");\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n rect.x = section.x;\n rect.y = section.y;\n rect.fill = section.fill;\n rect.width = conf2.width * section.taskCount + // width of the tasks\n conf2.diagramMarginX * (section.taskCount - 1);\n rect.height = conf2.height;\n rect.class = \"journey-section section-type-\" + section.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n _drawTextCandidateFunc(conf2)(\n section.text,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: \"journey-section section-type-\" + section.num },\n conf2,\n section.colour\n );\n};\nlet taskCount = -1;\nconst drawTask = function(elem, task, conf2) {\n const center = task.x + conf2.width / 2;\n const g = elem.append(\"g\");\n taskCount++;\n const maxHeight = 300 + 5 * 30;\n g.append(\"line\").attr(\"id\", \"task\" + taskCount).attr(\"x1\", center).attr(\"y1\", task.y).attr(\"x2\", center).attr(\"y2\", maxHeight).attr(\"class\", \"task-line\").attr(\"stroke-width\", \"1px\").attr(\"stroke-dasharray\", \"4 2\").attr(\"stroke\", \"#666\");\n drawFace(g, {\n cx: center,\n cy: 300 + (5 - task.score) * 30,\n score: task.score\n });\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n rect.x = task.x;\n rect.y = task.y;\n rect.fill = task.fill;\n rect.width = conf2.width;\n rect.height = conf2.height;\n rect.class = \"task task-type-\" + task.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n let xPos = task.x + 14;\n task.people.forEach((person) => {\n const colour = task.actors[person].color;\n const circle = {\n cx: xPos,\n cy: task.y,\n r: 7,\n fill: colour,\n stroke: \"#000\",\n title: person,\n pos: task.actors[person].position\n };\n drawCircle(g, circle);\n xPos += 10;\n });\n _drawTextCandidateFunc(conf2)(\n task.task,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: \"task\" },\n conf2,\n task.colour\n );\n};\nconst drawBackgroundRect = function(elem, bounds2) {\n (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, bounds2);\n};\nconst _drawTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs, colour) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"font-color\", colour).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) {\n const { taskFontSize, taskFontFamily } = conf2;\n const lines = content.split(//gi);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).attr(\"fill\", colour).style(\"text-anchor\", \"middle\").style(\"font-size\", taskFontSize).style(\"font-family\", taskFontFamily);\n text.append(\"tspan\").attr(\"x\", x + width / 2).attr(\"dy\", dy).text(lines[i]);\n text.attr(\"y\", y + height / 2).attr(\"dominant-baseline\", \"central\").attr(\"alignment-baseline\", \"central\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const body = g.append(\"switch\");\n const f = body.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"position\", \"fixed\");\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").attr(\"class\", \"label\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, body, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (key in fromTextAttrsDict) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst initGraphics = function(graphics) {\n graphics.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 5).attr(\"refY\", 2).attr(\"markerWidth\", 6).attr(\"markerHeight\", 4).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0,0 V 4 L6,2 Z\");\n};\nconst svgDraw = {\n drawRect,\n drawCircle,\n drawSection,\n drawText,\n drawLabel,\n drawTask,\n drawBackgroundRect,\n initGraphics\n};\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n keys.forEach(function(key) {\n conf[key] = cnf[key];\n });\n};\nconst actors = {};\nfunction drawActorLegend(diagram2) {\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey;\n let yPos = 60;\n Object.keys(actors).forEach((person) => {\n const colour = actors[person].color;\n const circleData = {\n cx: 20,\n cy: yPos,\n r: 7,\n fill: colour,\n stroke: \"#000\",\n pos: actors[person].position\n };\n svgDraw.drawCircle(diagram2, circleData);\n const labelData = {\n x: 40,\n y: yPos + 7,\n fill: \"#666\",\n text: person,\n textMargin: conf2.boxTextMargin | 5\n };\n svgDraw.drawText(diagram2, labelData);\n yPos += 20;\n });\n}\nconst conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey;\nconst LEFT_MARGIN = conf.leftMargin;\nconst draw = function(text, id, version, diagObj) {\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey;\n diagObj.db.clear();\n diagObj.parser.parse(text + \"\\n\");\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n bounds.init();\n const diagram2 = root.select(\"#\" + id);\n svgDraw.initGraphics(diagram2);\n const tasks2 = diagObj.db.getTasks();\n const title = diagObj.db.getDiagramTitle();\n const actorNames = diagObj.db.getActors();\n for (const member in actors) {\n delete actors[member];\n }\n let actorPos = 0;\n actorNames.forEach((actorName) => {\n actors[actorName] = {\n color: conf2.actorColours[actorPos % conf2.actorColours.length],\n position: actorPos\n };\n actorPos++;\n });\n drawActorLegend(diagram2);\n bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50);\n drawTasks(diagram2, tasks2, 0);\n const box = bounds.getBounds();\n if (title) {\n diagram2.append(\"text\").text(title).attr(\"x\", LEFT_MARGIN).attr(\"font-size\", \"4ex\").attr(\"font-weight\", \"bold\").attr(\"y\", 25);\n }\n const height = box.stopy - box.starty + 2 * conf2.diagramMarginY;\n const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.i)(diagram2, height, width, conf2.useMaxWidth);\n diagram2.append(\"line\").attr(\"x1\", LEFT_MARGIN).attr(\"y1\", conf2.height * 4).attr(\"x2\", width - LEFT_MARGIN - 4).attr(\"y2\", conf2.height * 4).attr(\"stroke-width\", 4).attr(\"stroke\", \"black\").attr(\"marker-end\", \"url(#arrowhead)\");\n const extraVertForTitle = title ? 70 : 0;\n diagram2.attr(\"viewBox\", `${box.startx} -25 ${width} ${height + extraVertForTitle}`);\n diagram2.attr(\"preserveAspectRatio\", \"xMinYMin meet\");\n diagram2.attr(\"height\", height + extraVertForTitle + 25);\n};\nconst bounds = {\n data: {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0\n },\n verticalPos: 0,\n sequenceItems: [],\n init: function() {\n this.sequenceItems = [];\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0\n };\n this.verticalPos = 0;\n },\n updateVal: function(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function(startx, starty, stopx, stopy) {\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey;\n const _self = this;\n let cnt = 0;\n function updateFn(type) {\n return function updateItemBounds(item) {\n cnt++;\n const n = _self.sequenceItems.length - cnt + 1;\n _self.updateVal(item, \"starty\", starty - n * conf2.boxMargin, Math.min);\n _self.updateVal(item, \"stopy\", stopy + n * conf2.boxMargin, Math.max);\n _self.updateVal(bounds.data, \"startx\", startx - n * conf2.boxMargin, Math.min);\n _self.updateVal(bounds.data, \"stopx\", stopx + n * conf2.boxMargin, Math.max);\n if (!(type === \"activation\")) {\n _self.updateVal(item, \"startx\", startx - n * conf2.boxMargin, Math.min);\n _self.updateVal(item, \"stopx\", stopx + n * conf2.boxMargin, Math.max);\n _self.updateVal(bounds.data, \"starty\", starty - n * conf2.boxMargin, Math.min);\n _self.updateVal(bounds.data, \"stopy\", stopy + n * conf2.boxMargin, Math.max);\n }\n };\n }\n this.sequenceItems.forEach(updateFn());\n },\n insert: function(startx, starty, stopx, stopy) {\n const _startx = Math.min(startx, stopx);\n const _stopx = Math.max(startx, stopx);\n const _starty = Math.min(starty, stopy);\n const _stopy = Math.max(starty, stopy);\n this.updateVal(bounds.data, \"startx\", _startx, Math.min);\n this.updateVal(bounds.data, \"starty\", _starty, Math.min);\n this.updateVal(bounds.data, \"stopx\", _stopx, Math.max);\n this.updateVal(bounds.data, \"stopy\", _stopy, Math.max);\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n bumpVerticalPos: function(bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = this.verticalPos;\n },\n getVerticalPos: function() {\n return this.verticalPos;\n },\n getBounds: function() {\n return this.data;\n }\n};\nconst fills = conf.sectionFills;\nconst textColours = conf.sectionColours;\nconst drawTasks = function(diagram2, tasks2, verticalPos) {\n const conf2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().journey;\n let lastSection = \"\";\n const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY;\n const taskPos = verticalPos + sectionVHeight;\n let sectionNumber = 0;\n let fill = \"#CCC\";\n let colour = \"black\";\n let num = 0;\n for (const [i, task] of tasks2.entries()) {\n if (lastSection !== task.section) {\n fill = fills[sectionNumber % fills.length];\n num = sectionNumber % fills.length;\n colour = textColours[sectionNumber % textColours.length];\n let taskInSectionCount = 0;\n const currentSection2 = task.section;\n for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) {\n if (tasks2[taskIndex].section == currentSection2) {\n taskInSectionCount = taskInSectionCount + 1;\n } else {\n break;\n }\n }\n const section = {\n x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN,\n y: 50,\n text: task.section,\n fill,\n num,\n colour,\n taskCount: taskInSectionCount\n };\n svgDraw.drawSection(diagram2, section, conf2);\n lastSection = task.section;\n sectionNumber++;\n }\n const taskActors = task.people.reduce((acc, actorName) => {\n if (actors[actorName]) {\n acc[actorName] = actors[actorName];\n }\n return acc;\n }, {});\n task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN;\n task.y = taskPos;\n task.width = conf2.diagramMarginX;\n task.height = conf2.diagramMarginY;\n task.colour = colour;\n task.fill = fill;\n task.num = num;\n task.actors = taskActors;\n svgDraw.drawTask(diagram2, task, conf2);\n bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30);\n }\n};\nconst renderer = {\n setConf,\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles,\n init: (cnf) => {\n renderer.setConf(cnf.journey);\n db.clear();\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9qb3VybmV5RGlhZ3JhbS0zMWJlMDA5Ni5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUE2TztBQUM1TTtBQUMyRjtBQUN6RztBQUNKO0FBQ2tCO0FBQ2Q7QUFDSDtBQUNjO0FBQ2Q7QUFDYztBQUM5QjtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQixLQUFLO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVO0FBQ1YsZ0JBQWdCLGlnQkFBaWdCO0FBQ2poQixrQkFBa0IsNlVBQTZVO0FBQy9WO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWMsb0NBQW9DLElBQUksUUFBUSxtQkFBbUIsTUFBTSxLQUFLLG9DQUFvQyxJQUFJLG1CQUFtQixJQUFJLGFBQWEsSUFBSSxpSUFBaUksSUFBSSxXQUFXLElBQUksOEJBQThCLHlDQUF5QyxXQUFXLHFCQUFxQixxRkFBcUYscURBQXFELGFBQWEsSUFBSSxhQUFhLHNDQUFzQyxhQUFhLHFCQUFxQixhQUFhLElBQUkscUJBQXFCLElBQUksYUFBYSx1RkFBdUYsaUJBQWlCLElBQUksYUFBYSxJQUFJLGFBQWE7QUFDeDFCLHNCQUFzQixpREFBaUQ7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FB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a0JBQWtCLHVEQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkJBQTJCO0FBQ3pEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3Qvam91cm5leURpYWdyYW0tMzFiZTAwOTYuanM/ZWQxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjIGFzIGdldENvbmZpZywgciBhcyBzZXREaWFncmFtVGl0bGUsIHQgYXMgZ2V0RGlhZ3JhbVRpdGxlLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBtIGFzIG1lcm1haWRBUEksIHYgYXMgY2xlYXIkMSwgaSBhcyBjb25maWd1cmVTdmdTaXplIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IHsgYXJjLCBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGQgYXMgZHJhd1JlY3QkMSwgZiBhcyBkcmF3VGV4dCQxLCBhIGFzIGRyYXdCYWNrZ3JvdW5kUmVjdCQxLCBnIGFzIGdldE5vdGVSZWN0IH0gZnJvbSBcIi4vc3ZnRHJhd0NvbW1vbi1mMjZjYWQzOS5qc1wiO1xuaW1wb3J0IFwidHMtZGVkZW50XCI7XG5pbXBvcnQgXCJkYXlqc1wiO1xuaW1wb3J0IFwiQGJyYWludHJlZS9zYW5pdGl6ZS11cmxcIjtcbmltcG9ydCBcImRvbXB1cmlmeVwiO1xuaW1wb3J0IFwia2hyb21hXCI7XG5pbXBvcnQgXCJsb2Rhc2gtZXMvbWVtb2l6ZS5qc1wiO1xuaW1wb3J0IFwic3R5bGlzXCI7XG5pbXBvcnQgXCJsb2Rhc2gtZXMvaXNFbXB0eS5qc1wiO1xudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KVxuICAgICAgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgJFYwID0gWzEsIDJdLCAkVjEgPSBbMSwgNV0sICRWMiA9IFs2LCA5LCAxMSwgMTcsIDE4LCAyMCwgMjIsIDIzLCAyNCwgMjZdLCAkVjMgPSBbMSwgMTVdLCAkVjQgPSBbMSwgMTZdLCAkVjUgPSBbMSwgMTddLCAkVjYgPSBbMSwgMThdLCAkVjcgPSBbMSwgMTldLCAkVjggPSBbMSwgMjBdLCAkVjkgPSBbMSwgMjRdLCAkVmEgPSBbNCwgNiwgOSwgMTEsIDE3LCAxOCwgMjAsIDIyLCAyMywgMjQsIDI2XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImpvdXJuZXlcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcIkVPRlwiOiA2LCBcImRpcmVjdGl2ZVwiOiA3LCBcImxpbmVcIjogOCwgXCJTUEFDRVwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJORVdMSU5FXCI6IDExLCBcIm9wZW5EaXJlY3RpdmVcIjogMTIsIFwidHlwZURpcmVjdGl2ZVwiOiAxMywgXCJjbG9zZURpcmVjdGl2ZVwiOiAxNCwgXCI6XCI6IDE1LCBcImFyZ0RpcmVjdGl2ZVwiOiAxNiwgXCJ0aXRsZVwiOiAxNywgXCJhY2NfdGl0bGVcIjogMTgsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDE5LCBcImFjY19kZXNjclwiOiAyMCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMjEsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAyMiwgXCJzZWN0aW9uXCI6IDIzLCBcInRhc2tOYW1lXCI6IDI0LCBcInRhc2tEYXRhXCI6IDI1LCBcIm9wZW5fZGlyZWN0aXZlXCI6IDI2LCBcInR5cGVfZGlyZWN0aXZlXCI6IDI3LCBcImFyZ19kaXJlY3RpdmVcIjogMjgsIFwiY2xvc2VfZGlyZWN0aXZlXCI6IDI5LCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJqb3VybmV5XCIsIDY6IFwiRU9GXCIsIDk6IFwiU1BBQ0VcIiwgMTE6IFwiTkVXTElORVwiLCAxNTogXCI6XCIsIDE3OiBcInRpdGxlXCIsIDE4OiBcImFjY190aXRsZVwiLCAxOTogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMjA6IFwiYWNjX2Rlc2NyXCIsIDIxOiBcImFjY19kZXNjcl92YWx1ZVwiLCAyMjogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDIzOiBcInNlY3Rpb25cIiwgMjQ6IFwidGFza05hbWVcIiwgMjU6IFwidGFza0RhdGFcIiwgMjY6IFwib3Blbl9kaXJlY3RpdmVcIiwgMjc6IFwidHlwZV9kaXJlY3RpdmVcIiwgMjg6IFwiYXJnX2RpcmVjdGl2ZVwiLCAyOTogXCJjbG9zZV9kaXJlY3RpdmVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzMsIDJdLCBbNSwgMF0sIFs1LCAyXSwgWzgsIDJdLCBbOCwgMV0sIFs4LCAxXSwgWzgsIDFdLCBbNywgNF0sIFs3LCA2XSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEyLCAxXSwgWzEzLCAxXSwgWzE2LCAxXSwgWzE0LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkuc2V0RGlhZ3JhbVRpdGxlKCQkWyQwXS5zdWJzdHIoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgeXkuYWRkVGFzaygkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IFwidGFza1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwiJSV7XCIsIFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICQkWyQwXSA9ICQkWyQwXS50cmltKCkucmVwbGFjZSgvJy9nLCAnXCInKTtcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIn0lJVwiLCBcImNsb3NlX2RpcmVjdGl2ZVwiLCBcImpvdXJuZXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogJFYwLCA3OiAzLCAxMjogNCwgMjY6ICRWMSB9LCB7IDE6IFszXSB9LCBvKCRWMiwgWzIsIDNdLCB7IDU6IDYgfSksIHsgMzogNywgNDogJFYwLCA3OiAzLCAxMjogNCwgMjY6ICRWMSB9LCB7IDEzOiA4LCAyNzogWzEsIDldIH0sIHsgMjc6IFsyLCAxOF0gfSwgeyA2OiBbMSwgMTBdLCA3OiAyMSwgODogMTEsIDk6IFsxLCAxMl0sIDEwOiAxMywgMTE6IFsxLCAxNF0sIDEyOiA0LCAxNzogJFYzLCAxODogJFY0LCAyMDogJFY1LCAyMjogJFY2LCAyMzogJFY3LCAyNDogJFY4LCAyNjogJFYxIH0sIHsgMTogWzIsIDJdIH0sIHsgMTQ6IDIyLCAxNTogWzEsIDIzXSwgMjk6ICRWOSB9LCBvKFsxNSwgMjldLCBbMiwgMTldKSwgbygkVjIsIFsyLCA4XSwgeyAxOiBbMiwgMV0gfSksIG8oJFYyLCBbMiwgNF0pLCB7IDc6IDIxLCAxMDogMjUsIDEyOiA0LCAxNzogJFYzLCAxODogJFY0LCAyMDogJFY1LCAyMjogJFY2LCAyMzogJFY3LCAyNDogJFY4LCAyNjogJFYxIH0sIG8oJFYyLCBbMiwgNl0pLCBvKCRWMiwgWzIsIDddKSwgbygkVjIsIFsyLCAxMV0pLCB7IDE5OiBbMSwgMjZdIH0sIHsgMjE6IFsxLCAyN10gfSwgbygkVjIsIFsyLCAxNF0pLCBvKCRWMiwgWzIsIDE1XSksIHsgMjU6IFsxLCAyOF0gfSwgbygkVjIsIFsyLCAxN10pLCB7IDExOiBbMSwgMjldIH0sIHsgMTY6IDMwLCAyODogWzEsIDMxXSB9LCB7IDExOiBbMiwgMjFdIH0sIG8oJFYyLCBbMiwgNV0pLCBvKCRWMiwgWzIsIDEyXSksIG8oJFYyLCBbMiwgMTNdKSwgbygkVjIsIFsyLCAxNl0pLCBvKCRWYSwgWzIsIDldKSwgeyAxNDogMzIsIDI5OiAkVjkgfSwgeyAyOTogWzIsIDIwXSB9LCB7IDExOiBbMSwgMzNdIH0sIG8oJFZhLCBbMiwgMTBdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgNTogWzIsIDE4XSwgNzogWzIsIDJdLCAyNDogWzIsIDIxXSwgMzE6IFsyLCAyMF0gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAyODtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICByZXR1cm4gMTc7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5WQUxJRFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzolKD8hXFx7KVteXFxuXSopL2ksIC9eKD86W15cXH1dJSVbXlxcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OmpvdXJuZXlcXGIpL2ksIC9eKD86dGl0bGVcXHNbXiNcXG47XSspL2ksIC9eKD86YWNjVGl0bGVcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqXFx7XFxzKikvaSwgL14oPzpbXFx9XSkvaSwgL14oPzpbXlxcfV0qKS9pLCAvXig/OnNlY3Rpb25cXHNbXiM6XFxuO10rKS9pLCAvXig/OlteIzpcXG47XSspL2ksIC9eKD86OlteI1xcbjtdKykvaSwgL14oPzo6KS9pLCAvXig/OiQpL2ksIC9eKD86LikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwib3Blbl9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsxXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzIsIDNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFyZ19kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFszLCA0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTcsIDE4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFsxNV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMTNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTYsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjRdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xubGV0IGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbmNvbnN0IHNlY3Rpb25zID0gW107XG5jb25zdCB0YXNrcyA9IFtdO1xuY29uc3QgcmF3VGFza3MgPSBbXTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBjbGVhciA9IGZ1bmN0aW9uKCkge1xuICBzZWN0aW9ucy5sZW5ndGggPSAwO1xuICB0YXNrcy5sZW5ndGggPSAwO1xuICBjdXJyZW50U2VjdGlvbiA9IFwiXCI7XG4gIHJhd1Rhc2tzLmxlbmd0aCA9IDA7XG4gIGNsZWFyJDEoKTtcbn07XG5jb25zdCBhZGRTZWN0aW9uID0gZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59O1xuY29uc3QgZ2V0U2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHNlY3Rpb25zO1xufTtcbmNvbnN0IGdldFRhc2tzID0gZnVuY3Rpb24oKSB7XG4gIGxldCBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICBjb25zdCBtYXhEZXB0aCA9IDEwMDtcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgd2hpbGUgKCFhbGxJdGVtc1Byb2Nlc3NlZCAmJiBpdGVyYXRpb25Db3VudCA8IG1heERlcHRoKSB7XG4gICAgYWxsSXRlbXNQcm9jZXNzZWQgPSBjb21waWxlVGFza3MoKTtcbiAgICBpdGVyYXRpb25Db3VudCsrO1xuICB9XG4gIHRhc2tzLnB1c2goLi4ucmF3VGFza3MpO1xuICByZXR1cm4gdGFza3M7XG59O1xuY29uc3QgdXBkYXRlQWN0b3JzID0gZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHRlbXBBY3RvcnMgPSBbXTtcbiAgdGFza3MuZm9yRWFjaCgodGFzaykgPT4ge1xuICAgIGlmICh0YXNrLnBlb3BsZSkge1xuICAgICAgdGVtcEFjdG9ycy5wdXNoKC4uLnRhc2sucGVvcGxlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCB1bmlxdWUgPSBuZXcgU2V0KHRlbXBBY3RvcnMpO1xuICByZXR1cm4gWy4uLnVuaXF1ZV0uc29ydCgpO1xufTtcbmNvbnN0IGFkZFRhc2sgPSBmdW5jdGlvbihkZXNjciwgdGFza0RhdGEpIHtcbiAgY29uc3QgcGllY2VzID0gdGFza0RhdGEuc3Vic3RyKDEpLnNwbGl0KFwiOlwiKTtcbiAgbGV0IHNjb3JlID0gMDtcbiAgbGV0IHBlZXBzID0gW107XG4gIGlmIChwaWVjZXMubGVuZ3RoID09PSAxKSB7XG4gICAgc2NvcmUgPSBOdW1iZXIocGllY2VzWzBdKTtcbiAgICBwZWVwcyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIHNjb3JlID0gTnVtYmVyKHBpZWNlc1swXSk7XG4gICAgcGVlcHMgPSBwaWVjZXNbMV0uc3BsaXQoXCIsXCIpO1xuICB9XG4gIGNvbnN0IHBlb3BsZUxpc3QgPSBwZWVwcy5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgY29uc3QgcmF3VGFzayA9IHtcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICBwZW9wbGU6IHBlb3BsZUxpc3QsXG4gICAgdGFzazogZGVzY3IsXG4gICAgc2NvcmVcbiAgfTtcbiAgcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbn07XG5jb25zdCBhZGRUYXNrT3JnID0gZnVuY3Rpb24oZGVzY3IpIHtcbiAgY29uc3QgbmV3VGFzayA9IHtcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICBkZXNjcmlwdGlvbjogZGVzY3IsXG4gICAgdGFzazogZGVzY3IsXG4gICAgY2xhc3NlczogW11cbiAgfTtcbiAgdGFza3MucHVzaChuZXdUYXNrKTtcbn07XG5jb25zdCBjb21waWxlVGFza3MgPSBmdW5jdGlvbigpIHtcbiAgY29uc3QgY29tcGlsZVRhc2sgPSBmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH07XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn07XG5jb25zdCBnZXRBY3RvcnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHVwZGF0ZUFjdG9ycygpO1xufTtcbmNvbnN0IGRiID0ge1xuICBwYXJzZURpcmVjdGl2ZSxcbiAgZ2V0Q29uZmlnOiAoKSA9PiBnZXRDb25maWcoKS5qb3VybmV5LFxuICBjbGVhcixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZWN0aW9uLFxuICBnZXRTZWN0aW9ucyxcbiAgZ2V0VGFza3MsXG4gIGFkZFRhc2ssXG4gIGFkZFRhc2tPcmcsXG4gIGdldEFjdG9yc1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy50ZXh0Q29sb3J9XG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50ZXh0Q29sb3J9XG4gIH1cblxuICAuZmFjZSB7XG4gICAgJHtvcHRpb25zLmZhY2VDb2xvciA/IGBmaWxsOiAke29wdGlvbnMuZmFjZUNvbG9yfWAgOiBcImZpbGw6ICNGRkY4RENcIn07XG4gICAgc3Ryb2tlOiAjOTk5O1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ307XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYXJyb3doZWFkQ29sb3J9O1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6ICR7b3B0aW9ucy50ZXJ0aWFyeUNvbG9yfTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke29wdGlvbnMuYm9yZGVyMn07XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgfVxuXG4gIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGUwfWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlMX1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTJ9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGUzfWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlNH1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTV9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGU2fWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlN31gIDogXCJcIn07XG4gIH1cblxuICAuYWN0b3ItMCB7XG4gICAgJHtvcHRpb25zLmFjdG9yMCA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3IwfWAgOiBcIlwifTtcbiAgfVxuICAuYWN0b3ItMSB7XG4gICAgJHtvcHRpb25zLmFjdG9yMSA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3IxfWAgOiBcIlwifTtcbiAgfVxuICAuYWN0b3ItMiB7XG4gICAgJHtvcHRpb25zLmFjdG9yMiA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3IyfWAgOiBcIlwifTtcbiAgfVxuICAuYWN0b3ItMyB7XG4gICAgJHtvcHRpb25zLmFjdG9yMyA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3IzfWAgOiBcIlwifTtcbiAgfVxuICAuYWN0b3ItNCB7XG4gICAgJHtvcHRpb25zLmFjdG9yNCA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3I0fWAgOiBcIlwifTtcbiAgfVxuICAuYWN0b3ItNSB7XG4gICAgJHtvcHRpb25zLmFjdG9yNSA/IGBmaWxsOiAke29wdGlvbnMuYWN0b3I1fWAgOiBcIlwifTtcbiAgfVxuYDtcbmNvbnN0IHN0eWxlcyA9IGdldFN0eWxlcztcbmNvbnN0IGRyYXdSZWN0ID0gZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgcmV0dXJuIGRyYXdSZWN0JDEoZWxlbSwgcmVjdERhdGEpO1xufTtcbmNvbnN0IGRyYXdGYWNlID0gZnVuY3Rpb24oZWxlbWVudCwgZmFjZURhdGEpIHtcbiAgY29uc3QgcmFkaXVzID0gMTU7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgZmFjZURhdGEuY3gpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSkuYXR0cihcImNsYXNzXCIsIFwiZmFjZVwiKS5hdHRyKFwiclwiLCByYWRpdXMpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcIm92ZXJmbG93XCIsIFwidmlzaWJsZVwiKTtcbiAgY29uc3QgZmFjZSA9IGVsZW1lbnQuYXBwZW5kKFwiZ1wiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4IC0gcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4ICsgcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZnVuY3Rpb24gc21pbGUoZmFjZTIpIHtcbiAgICBjb25zdCBhcmMkMSA9IGFyYygpLnN0YXJ0QW5nbGUoTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDMgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjJDEpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgMikgKyBcIilcIik7XG4gIH1cbiAgZnVuY3Rpb24gc2FkKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjJDEgPSBhcmMoKS5zdGFydEFuZ2xlKDMgKiBNYXRoLlBJIC8gMikuZW5kQW5nbGUoNSAqIChNYXRoLlBJIC8gMikpLmlubmVyUmFkaXVzKHJhZGl1cyAvIDIpLm91dGVyUmFkaXVzKHJhZGl1cyAvIDIuMik7XG4gICAgZmFjZTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwiZFwiLCBhcmMkMSkuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGZhY2VEYXRhLmN4ICsgXCIsXCIgKyAoZmFjZURhdGEuY3kgKyA3KSArIFwiKVwiKTtcbiAgfVxuICBmdW5jdGlvbiBhbWJpdmFsZW50KGZhY2UyKSB7XG4gICAgZmFjZTIuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIDIpLmF0dHIoXCJ4MVwiLCBmYWNlRGF0YS5jeCAtIDUpLmF0dHIoXCJ5MVwiLCBmYWNlRGF0YS5jeSArIDcpLmF0dHIoXCJ4MlwiLCBmYWNlRGF0YS5jeCArIDUpLmF0dHIoXCJ5MlwiLCBmYWNlRGF0YS5jeSArIDcpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIH1cbiAgaWYgKGZhY2VEYXRhLnNjb3JlID4gMykge1xuICAgIHNtaWxlKGZhY2UpO1xuICB9IGVsc2UgaWYgKGZhY2VEYXRhLnNjb3JlIDwgMykge1xuICAgIHNhZChmYWNlKTtcbiAgfSBlbHNlIHtcbiAgICBhbWJpdmFsZW50KGZhY2UpO1xuICB9XG4gIHJldHVybiBjaXJjbGVFbGVtZW50O1xufTtcbmNvbnN0IGRyYXdDaXJjbGUgPSBmdW5jdGlvbihlbGVtZW50LCBjaXJjbGVEYXRhKSB7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY3hcIiwgY2lyY2xlRGF0YS5jeCk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImN5XCIsIGNpcmNsZURhdGEuY3kpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLVwiICsgY2lyY2xlRGF0YS5wb3MpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJmaWxsXCIsIGNpcmNsZURhdGEuZmlsbCk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcInN0cm9rZVwiLCBjaXJjbGVEYXRhLnN0cm9rZSk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcInJcIiwgY2lyY2xlRGF0YS5yKTtcbiAgaWYgKGNpcmNsZUVsZW1lbnQuY2xhc3MgIT09IHZvaWQgMCkge1xuICAgIGNpcmNsZUVsZW1lbnQuYXR0cihcImNsYXNzXCIsIGNpcmNsZUVsZW1lbnQuY2xhc3MpO1xuICB9XG4gIGlmIChjaXJjbGVEYXRhLnRpdGxlICE9PSB2b2lkIDApIHtcbiAgICBjaXJjbGVFbGVtZW50LmFwcGVuZChcInRpdGxlXCIpLnRleHQoY2lyY2xlRGF0YS50aXRsZSk7XG4gIH1cbiAgcmV0dXJuIGNpcmNsZUVsZW1lbnQ7XG59O1xuY29uc3QgZHJhd1RleHQgPSBmdW5jdGlvbihlbGVtLCB0ZXh0RGF0YSkge1xuICByZXR1cm4gZHJhd1RleHQkMShlbGVtLCB0ZXh0RGF0YSk7XG59O1xuY29uc3QgZHJhd0xhYmVsID0gZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBjb25zdCBwb2x5Z29uID0gZWxlbS5hcHBlbmQoXCJwb2x5Z29uXCIpO1xuICBwb2x5Z29uLmF0dHIoXCJwb2ludHNcIiwgZ2VuUG9pbnRzKHR4dE9iamVjdC54LCB0eHRPYmplY3QueSwgNTAsIDIwLCA3KSk7XG4gIHBvbHlnb24uYXR0cihcImNsYXNzXCIsIFwibGFiZWxCb3hcIik7XG4gIHR4dE9iamVjdC55ID0gdHh0T2JqZWN0LnkgKyB0eHRPYmplY3QubGFiZWxNYXJnaW47XG4gIHR4dE9iamVjdC54ID0gdHh0T2JqZWN0LnggKyAwLjUgKiB0eHRPYmplY3QubGFiZWxNYXJnaW47XG4gIGRyYXdUZXh0KGVsZW0sIHR4dE9iamVjdCk7XG59O1xuY29uc3QgZHJhd1NlY3Rpb24gPSBmdW5jdGlvbihlbGVtLCBzZWN0aW9uLCBjb25mMikge1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gc2VjdGlvbi54O1xuICByZWN0LnkgPSBzZWN0aW9uLnk7XG4gIHJlY3QuZmlsbCA9IHNlY3Rpb24uZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYyLndpZHRoICogc2VjdGlvbi50YXNrQ291bnQgKyAvLyB3aWR0aCBvZiB0aGUgdGFza3NcbiAgY29uZjIuZGlhZ3JhbU1hcmdpblggKiAoc2VjdGlvbi50YXNrQ291bnQgLSAxKTtcbiAgcmVjdC5oZWlnaHQgPSBjb25mMi5oZWlnaHQ7XG4gIHJlY3QuY2xhc3MgPSBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdChnLCByZWN0KTtcbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgc2VjdGlvbi50ZXh0LFxuICAgIGcsXG4gICAgcmVjdC54LFxuICAgIHJlY3QueSxcbiAgICByZWN0LndpZHRoLFxuICAgIHJlY3QuaGVpZ2h0LFxuICAgIHsgY2xhc3M6IFwiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS1cIiArIHNlY3Rpb24ubnVtIH0sXG4gICAgY29uZjIsXG4gICAgc2VjdGlvbi5jb2xvdXJcbiAgKTtcbn07XG5sZXQgdGFza0NvdW50ID0gLTE7XG5jb25zdCBkcmF3VGFzayA9IGZ1bmN0aW9uKGVsZW0sIHRhc2ssIGNvbmYyKSB7XG4gIGNvbnN0IGNlbnRlciA9IHRhc2sueCArIGNvbmYyLndpZHRoIC8gMjtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgdGFza0NvdW50Kys7XG4gIGNvbnN0IG1heEhlaWdodCA9IDMwMCArIDUgKiAzMDtcbiAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcInRhc2tcIiArIHRhc2tDb3VudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIHRhc2sueSkuYXR0cihcIngyXCIsIGNlbnRlcikuYXR0cihcInkyXCIsIG1heEhlaWdodCkuYXR0cihcImNsYXNzXCIsIFwidGFzay1saW5lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI0IDJcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIGRyYXdGYWNlKGcsIHtcbiAgICBjeDogY2VudGVyLFxuICAgIGN5OiAzMDAgKyAoNSAtIHRhc2suc2NvcmUpICogMzAsXG4gICAgc2NvcmU6IHRhc2suc2NvcmVcbiAgfSk7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSB0YXNrLng7XG4gIHJlY3QueSA9IHRhc2sueTtcbiAgcmVjdC5maWxsID0gdGFzay5maWxsO1xuICByZWN0LndpZHRoID0gY29uZjIud2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gY29uZjIuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gXCJ0YXNrIHRhc2stdHlwZS1cIiArIHRhc2subnVtO1xuICByZWN0LnJ4ID0gMztcbiAgcmVjdC5yeSA9IDM7XG4gIGRyYXdSZWN0KGcsIHJlY3QpO1xuICBsZXQgeFBvcyA9IHRhc2sueCArIDE0O1xuICB0YXNrLnBlb3BsZS5mb3JFYWNoKChwZXJzb24pID0+IHtcbiAgICBjb25zdCBjb2xvdXIgPSB0YXNrLmFjdG9yc1twZXJzb25dLmNvbG9yO1xuICAgIGNvbnN0IGNpcmNsZSA9IHtcbiAgICAgIGN4OiB4UG9zLFxuICAgICAgY3k6IHRhc2sueSxcbiAgICAgIHI6IDcsXG4gICAgICBmaWxsOiBjb2xvdXIsXG4gICAgICBzdHJva2U6IFwiIzAwMFwiLFxuICAgICAgdGl0bGU6IHBlcnNvbixcbiAgICAgIHBvczogdGFzay5hY3RvcnNbcGVyc29uXS5wb3NpdGlvblxuICAgIH07XG4gICAgZHJhd0NpcmNsZShnLCBjaXJjbGUpO1xuICAgIHhQb3MgKz0gMTA7XG4gIH0pO1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICB0YXNrLnRhc2ssXG4gICAgZyxcbiAgICByZWN0LngsXG4gICAgcmVjdC55LFxuICAgIHJlY3Qud2lkdGgsXG4gICAgcmVjdC5oZWlnaHQsXG4gICAgeyBjbGFzczogXCJ0YXNrXCIgfSxcbiAgICBjb25mMixcbiAgICB0YXNrLmNvbG91clxuICApO1xufTtcbmNvbnN0IGRyYXdCYWNrZ3JvdW5kUmVjdCA9IGZ1bmN0aW9uKGVsZW0sIGJvdW5kczIpIHtcbiAgZHJhd0JhY2tncm91bmRSZWN0JDEoZWxlbSwgYm91bmRzMik7XG59O1xuY29uc3QgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBieVRleHQoY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb2xvdXIpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyICsgNSkuc3R5bGUoXCJmb250LWNvbG9yXCIsIGNvbG91cikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBmdW5jdGlvbiBieVRzcGFuKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIsIGNvbG91cikge1xuICAgIGNvbnN0IHsgdGFza0ZvbnRTaXplLCB0YXNrRm9udEZhbWlseSB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC88YnJcXHMqXFwvPz4vZ2kpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGR5ID0gaSAqIHRhc2tGb250U2l6ZSAtIHRhc2tGb250U2l6ZSAqIChsaW5lcy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIGNvbG91cikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCB0YXNrRm9udFNpemUpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGFza0ZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgYm9keSA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBib2R5LmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCkuYXR0cihcInBvc2l0aW9uXCIsIFwiZml4ZWRcIik7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlXCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZS1jZWxsXCIpLnN0eWxlKFwidGV4dC1hbGlnblwiLCBcImNlbnRlclwiKS5zdHlsZShcInZlcnRpY2FsLWFsaWduXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBib2R5LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgICAgdG9UZXh0LmF0dHIoa2V5LCBmcm9tVGV4dEF0dHJzRGljdFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbmYyKSB7XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbmNvbnN0IGluaXRHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKSB7XG4gIGdyYXBoaWNzLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImFycm93aGVhZFwiKS5hdHRyKFwicmVmWFwiLCA1KS5hdHRyKFwicmVmWVwiLCAyKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgNikuYXR0cihcIm1hcmtlckhlaWdodFwiLCA0KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwLDAgViA0IEw2LDIgWlwiKTtcbn07XG5jb25zdCBzdmdEcmF3ID0ge1xuICBkcmF3UmVjdCxcbiAgZHJhd0NpcmNsZSxcbiAgZHJhd1NlY3Rpb24sXG4gIGRyYXdUZXh0LFxuICBkcmF3TGFiZWwsXG4gIGRyYXdUYXNrLFxuICBkcmF3QmFja2dyb3VuZFJlY3QsXG4gIGluaXRHcmFwaGljc1xufTtcbmNvbnN0IHNldENvbmYgPSBmdW5jdGlvbihjbmYpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNuZik7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBjb25mW2tleV0gPSBjbmZba2V5XTtcbiAgfSk7XG59O1xuY29uc3QgYWN0b3JzID0ge307XG5mdW5jdGlvbiBkcmF3QWN0b3JMZWdlbmQoZGlhZ3JhbTIpIHtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuICBsZXQgeVBvcyA9IDYwO1xuICBPYmplY3Qua2V5cyhhY3RvcnMpLmZvckVhY2goKHBlcnNvbikgPT4ge1xuICAgIGNvbnN0IGNvbG91ciA9IGFjdG9yc1twZXJzb25dLmNvbG9yO1xuICAgIGNvbnN0IGNpcmNsZURhdGEgPSB7XG4gICAgICBjeDogMjAsXG4gICAgICBjeTogeVBvcyxcbiAgICAgIHI6IDcsXG4gICAgICBmaWxsOiBjb2xvdXIsXG4gICAgICBzdHJva2U6IFwiIzAwMFwiLFxuICAgICAgcG9zOiBhY3RvcnNbcGVyc29uXS5wb3NpdGlvblxuICAgIH07XG4gICAgc3ZnRHJhdy5kcmF3Q2lyY2xlKGRpYWdyYW0yLCBjaXJjbGVEYXRhKTtcbiAgICBjb25zdCBsYWJlbERhdGEgPSB7XG4gICAgICB4OiA0MCxcbiAgICAgIHk6IHlQb3MgKyA3LFxuICAgICAgZmlsbDogXCIjNjY2XCIsXG4gICAgICB0ZXh0OiBwZXJzb24sXG4gICAgICB0ZXh0TWFyZ2luOiBjb25mMi5ib3hUZXh0TWFyZ2luIHwgNVxuICAgIH07XG4gICAgc3ZnRHJhdy5kcmF3VGV4dChkaWFncmFtMiwgbGFiZWxEYXRhKTtcbiAgICB5UG9zICs9IDIwO1xuICB9KTtcbn1cbmNvbnN0IGNvbmYgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuY29uc3QgTEVGVF9NQVJHSU4gPSBjb25mLmxlZnRNYXJnaW47XG5jb25zdCBkcmF3ID0gZnVuY3Rpb24odGV4dCwgaWQsIHZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIGRpYWdPYmoucGFyc2VyLnBhcnNlKHRleHQgKyBcIlxcblwiKTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGJvdW5kcy5pbml0KCk7XG4gIGNvbnN0IGRpYWdyYW0yID0gcm9vdC5zZWxlY3QoXCIjXCIgKyBpZCk7XG4gIHN2Z0RyYXcuaW5pdEdyYXBoaWNzKGRpYWdyYW0yKTtcbiAgY29uc3QgdGFza3MyID0gZGlhZ09iai5kYi5nZXRUYXNrcygpO1xuICBjb25zdCB0aXRsZSA9IGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGNvbnN0IGFjdG9yTmFtZXMgPSBkaWFnT2JqLmRiLmdldEFjdG9ycygpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBpbiBhY3RvcnMpIHtcbiAgICBkZWxldGUgYWN0b3JzW21lbWJlcl07XG4gIH1cbiAgbGV0IGFjdG9yUG9zID0gMDtcbiAgYWN0b3JOYW1lcy5mb3JFYWNoKChhY3Rvck5hbWUpID0+IHtcbiAgICBhY3RvcnNbYWN0b3JOYW1lXSA9IHtcbiAgICAgIGNvbG9yOiBjb25mMi5hY3RvckNvbG91cnNbYWN0b3JQb3MgJSBjb25mMi5hY3RvckNvbG91cnMubGVuZ3RoXSxcbiAgICAgIHBvc2l0aW9uOiBhY3RvclBvc1xuICAgIH07XG4gICAgYWN0b3JQb3MrKztcbiAgfSk7XG4gIGRyYXdBY3RvckxlZ2VuZChkaWFncmFtMik7XG4gIGJvdW5kcy5pbnNlcnQoMCwgMCwgTEVGVF9NQVJHSU4sIE9iamVjdC5rZXlzKGFjdG9ycykubGVuZ3RoICogNTApO1xuICBkcmF3VGFza3MoZGlhZ3JhbTIsIHRhc2tzMiwgMCk7XG4gIGNvbnN0IGJveCA9IGJvdW5kcy5nZXRCb3VuZHMoKTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBMRUZUX01BUkdJTikuYXR0cihcImZvbnQtc2l6ZVwiLCBcIjRleFwiKS5hdHRyKFwiZm9udC13ZWlnaHRcIiwgXCJib2xkXCIpLmF0dHIoXCJ5XCIsIDI1KTtcbiAgfVxuICBjb25zdCBoZWlnaHQgPSBib3guc3RvcHkgLSBib3guc3RhcnR5ICsgMiAqIGNvbmYyLmRpYWdyYW1NYXJnaW5ZO1xuICBjb25zdCB3aWR0aCA9IExFRlRfTUFSR0lOICsgYm94LnN0b3B4ICsgMiAqIGNvbmYyLmRpYWdyYW1NYXJnaW5YO1xuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHdpZHRoLCBjb25mMi51c2VNYXhXaWR0aCk7XG4gIGRpYWdyYW0yLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIExFRlRfTUFSR0lOKS5hdHRyKFwieTFcIiwgY29uZjIuaGVpZ2h0ICogNCkuYXR0cihcIngyXCIsIHdpZHRoIC0gTEVGVF9NQVJHSU4gLSA0KS5hdHRyKFwieTJcIiwgY29uZjIuaGVpZ2h0ICogNCkuYXR0cihcInN0cm9rZS13aWR0aFwiLCA0KS5hdHRyKFwic3Ryb2tlXCIsIFwiYmxhY2tcIikuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoI2Fycm93aGVhZClcIik7XG4gIGNvbnN0IGV4dHJhVmVydEZvclRpdGxlID0gdGl0bGUgPyA3MCA6IDA7XG4gIGRpYWdyYW0yLmF0dHIoXCJ2aWV3Qm94XCIsIGAke2JveC5zdGFydHh9IC0yNSAke3dpZHRofSAke2hlaWdodCArIGV4dHJhVmVydEZvclRpdGxlfWApO1xuICBkaWFncmFtMi5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaW5ZTWluIG1lZXRcIik7XG4gIGRpYWdyYW0yLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0ICsgZXh0cmFWZXJ0Rm9yVGl0bGUgKyAyNSk7XG59O1xuY29uc3QgYm91bmRzID0ge1xuICBkYXRhOiB7XG4gICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgc3RvcHg6IHZvaWQgMCxcbiAgICBzdGFydHk6IHZvaWQgMCxcbiAgICBzdG9weTogdm9pZCAwXG4gIH0sXG4gIHZlcnRpY2FsUG9zOiAwLFxuICBzZXF1ZW5jZUl0ZW1zOiBbXSxcbiAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zID0gW107XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLnZlcnRpY2FsUG9zID0gMDtcbiAgfSxcbiAgdXBkYXRlVmFsOiBmdW5jdGlvbihvYmosIGtleSwgdmFsLCBmdW4pIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gZnVuKHZhbCwgb2JqW2tleV0pO1xuICAgIH1cbiAgfSxcbiAgdXBkYXRlQm91bmRzOiBmdW5jdGlvbihzdGFydHgsIHN0YXJ0eSwgc3RvcHgsIHN0b3B5KSB7XG4gICAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuICAgIGNvbnN0IF9zZWxmID0gdGhpcztcbiAgICBsZXQgY250ID0gMDtcbiAgICBmdW5jdGlvbiB1cGRhdGVGbih0eXBlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlSXRlbUJvdW5kcyhpdGVtKSB7XG4gICAgICAgIGNudCsrO1xuICAgICAgICBjb25zdCBuID0gX3NlbGYuc2VxdWVuY2VJdGVtcy5sZW5ndGggLSBjbnQgKyAxO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdGFydHlcIiwgc3RhcnR5IC0gbiAqIGNvbmYyLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBzdGFydHggLSBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1pbik7XG4gICAgICAgIF9zZWxmLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKHVwZGF0ZUZuKCkpO1xuICB9LFxuICBpbnNlcnQ6IGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICBjb25zdCBfc3RhcnR4ID0gTWF0aC5taW4oc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0b3B4ID0gTWF0aC5tYXgoc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0YXJ0eSA9IE1hdGgubWluKHN0YXJ0eSwgc3RvcHkpO1xuICAgIGNvbnN0IF9zdG9weSA9IE1hdGgubWF4KHN0YXJ0eSwgc3RvcHkpO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBfc3RhcnR4LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weVwiLCBfc3RvcHksIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZUJvdW5kcyhfc3RhcnR4LCBfc3RhcnR5LCBfc3RvcHgsIF9zdG9weSk7XG4gIH0sXG4gIGJ1bXBWZXJ0aWNhbFBvczogZnVuY3Rpb24oYnVtcCkge1xuICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zICsgYnVtcDtcbiAgICB0aGlzLmRhdGEuc3RvcHkgPSB0aGlzLnZlcnRpY2FsUG9zO1xuICB9LFxuICBnZXRWZXJ0aWNhbFBvczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxQb3M7XG4gIH0sXG4gIGdldEJvdW5kczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxufTtcbmNvbnN0IGZpbGxzID0gY29uZi5zZWN0aW9uRmlsbHM7XG5jb25zdCB0ZXh0Q29sb3VycyA9IGNvbmYuc2VjdGlvbkNvbG91cnM7XG5jb25zdCBkcmF3VGFza3MgPSBmdW5jdGlvbihkaWFncmFtMiwgdGFza3MyLCB2ZXJ0aWNhbFBvcykge1xuICBjb25zdCBjb25mMiA9IGdldENvbmZpZygpLmpvdXJuZXk7XG4gIGxldCBsYXN0U2VjdGlvbiA9IFwiXCI7XG4gIGNvbnN0IHNlY3Rpb25WSGVpZ2h0ID0gY29uZjIuaGVpZ2h0ICogMiArIGNvbmYyLmRpYWdyYW1NYXJnaW5ZO1xuICBjb25zdCB0YXNrUG9zID0gdmVydGljYWxQb3MgKyBzZWN0aW9uVkhlaWdodDtcbiAgbGV0IHNlY3Rpb25OdW1iZXIgPSAwO1xuICBsZXQgZmlsbCA9IFwiI0NDQ1wiO1xuICBsZXQgY29sb3VyID0gXCJibGFja1wiO1xuICBsZXQgbnVtID0gMDtcbiAgZm9yIChjb25zdCBbaSwgdGFza10gb2YgdGFza3MyLmVudHJpZXMoKSkge1xuICAgIGlmIChsYXN0U2VjdGlvbiAhPT0gdGFzay5zZWN0aW9uKSB7XG4gICAgICBmaWxsID0gZmlsbHNbc2VjdGlvbk51bWJlciAlIGZpbGxzLmxlbmd0aF07XG4gICAgICBudW0gPSBzZWN0aW9uTnVtYmVyICUgZmlsbHMubGVuZ3RoO1xuICAgICAgY29sb3VyID0gdGV4dENvbG91cnNbc2VjdGlvbk51bWJlciAlIHRleHRDb2xvdXJzLmxlbmd0aF07XG4gICAgICBsZXQgdGFza0luU2VjdGlvbkNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uMiA9IHRhc2suc2VjdGlvbjtcbiAgICAgIGZvciAobGV0IHRhc2tJbmRleCA9IGk7IHRhc2tJbmRleCA8IHRhc2tzMi5sZW5ndGg7IHRhc2tJbmRleCsrKSB7XG4gICAgICAgIGlmICh0YXNrczJbdGFza0luZGV4XS5zZWN0aW9uID09IGN1cnJlbnRTZWN0aW9uMikge1xuICAgICAgICAgIHRhc2tJblNlY3Rpb25Db3VudCA9IHRhc2tJblNlY3Rpb25Db3VudCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB7XG4gICAgICAgIHg6IGkgKiBjb25mMi50YXNrTWFyZ2luICsgaSAqIGNvbmYyLndpZHRoICsgTEVGVF9NQVJHSU4sXG4gICAgICAgIHk6IDUwLFxuICAgICAgICB0ZXh0OiB0YXNrLnNlY3Rpb24sXG4gICAgICAgIGZpbGwsXG4gICAgICAgIG51bSxcbiAgICAgICAgY29sb3VyLFxuICAgICAgICB0YXNrQ291bnQ6IHRhc2tJblNlY3Rpb25Db3VudFxuICAgICAgfTtcbiAgICAgIHN2Z0RyYXcuZHJhd1NlY3Rpb24oZGlhZ3JhbTIsIHNlY3Rpb24sIGNvbmYyKTtcbiAgICAgIGxhc3RTZWN0aW9uID0gdGFzay5zZWN0aW9uO1xuICAgICAgc2VjdGlvbk51bWJlcisrO1xuICAgIH1cbiAgICBjb25zdCB0YXNrQWN0b3JzID0gdGFzay5wZW9wbGUucmVkdWNlKChhY2MsIGFjdG9yTmFtZSkgPT4ge1xuICAgICAgaWYgKGFjdG9yc1thY3Rvck5hbWVdKSB7XG4gICAgICAgIGFjY1thY3Rvck5hbWVdID0gYWN0b3JzW2FjdG9yTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICB0YXNrLnggPSBpICogY29uZjIudGFza01hcmdpbiArIGkgKiBjb25mMi53aWR0aCArIExFRlRfTUFSR0lOO1xuICAgIHRhc2sueSA9IHRhc2tQb3M7XG4gICAgdGFzay53aWR0aCA9IGNvbmYyLmRpYWdyYW1NYXJnaW5YO1xuICAgIHRhc2suaGVpZ2h0ID0gY29uZjIuZGlhZ3JhbU1hcmdpblk7XG4gICAgdGFzay5jb2xvdXIgPSBjb2xvdXI7XG4gICAgdGFzay5maWxsID0gZmlsbDtcbiAgICB0YXNrLm51bSA9IG51bTtcbiAgICB0YXNrLmFjdG9ycyA9IHRhc2tBY3RvcnM7XG4gICAgc3ZnRHJhdy5kcmF3VGFzayhkaWFncmFtMiwgdGFzaywgY29uZjIpO1xuICAgIGJvdW5kcy5pbnNlcnQodGFzay54LCB0YXNrLnksIHRhc2sueCArIHRhc2sud2lkdGggKyBjb25mMi50YXNrTWFyZ2luLCAzMDAgKyA1ICogMzApO1xuICB9XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXI6IHBhcnNlciQxLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlcyxcbiAgaW5pdDogKGNuZikgPT4ge1xuICAgIHJlbmRlcmVyLnNldENvbmYoY25mLmpvdXJuZXkpO1xuICAgIGRiLmNsZWFyKCk7XG4gIH1cbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/journeyDiagram-31be0096.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js": /*!**************************************************************!*\ !*** ../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"A\": () => (/* binding */ setupGraphViewbox),\n/* harmony export */ \"B\": () => (/* binding */ parseFontSize),\n/* harmony export */ \"C\": () => (/* binding */ getThemeVariables$2),\n/* harmony export */ \"D\": () => (/* binding */ defaultConfig$1),\n/* harmony export */ \"E\": () => (/* binding */ addFunction),\n/* harmony export */ \"F\": () => (/* binding */ generateId),\n/* harmony export */ \"G\": () => (/* binding */ defaultConfig),\n/* harmony export */ \"H\": () => (/* binding */ decodeEntities),\n/* harmony export */ \"I\": () => (/* binding */ commonDb$1),\n/* harmony export */ \"J\": () => (/* binding */ parseDirective$1),\n/* harmony export */ \"K\": () => (/* binding */ mermaid),\n/* harmony export */ \"Z\": () => (/* binding */ ZERO_WIDTH_SPACE),\n/* harmony export */ \"a\": () => (/* binding */ getAccDescription),\n/* harmony export */ \"b\": () => (/* binding */ setAccDescription),\n/* harmony export */ \"c\": () => (/* binding */ getConfig$1),\n/* harmony export */ \"d\": () => (/* binding */ sanitizeText$2),\n/* harmony export */ \"e\": () => (/* binding */ common$1),\n/* harmony export */ \"f\": () => (/* binding */ assignWithDepth$1),\n/* harmony export */ \"g\": () => (/* binding */ getAccTitle),\n/* harmony export */ \"h\": () => (/* binding */ calculateTextWidth),\n/* harmony export */ \"i\": () => (/* binding */ configureSvgSize),\n/* harmony export */ \"j\": () => (/* binding */ calculateTextHeight),\n/* harmony export */ \"k\": () => (/* binding */ getStylesFromArray),\n/* harmony export */ \"l\": () => (/* binding */ log$1),\n/* harmony export */ \"m\": () => (/* binding */ mermaidAPI),\n/* harmony export */ \"n\": () => (/* binding */ evaluate),\n/* harmony export */ \"o\": () => (/* binding */ interpolateToCurve),\n/* harmony export */ \"p\": () => (/* binding */ setupGraphViewbox$1),\n/* harmony export */ \"q\": () => (/* binding */ setConfig),\n/* harmony export */ \"r\": () => (/* binding */ setDiagramTitle),\n/* harmony export */ \"s\": () => (/* binding */ setAccTitle),\n/* harmony export */ \"t\": () => (/* binding */ getDiagramTitle),\n/* harmony export */ \"u\": () => (/* binding */ utils),\n/* harmony export */ \"v\": () => (/* binding */ clear),\n/* harmony export */ \"w\": () => (/* binding */ wrapLabel),\n/* harmony export */ \"x\": () => (/* binding */ parseGenericTypes),\n/* harmony export */ \"y\": () => (/* binding */ random),\n/* harmony export */ \"z\": () => (/* binding */ getConfig)\n/* harmony export */ });\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/adjust.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/invert.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/darken.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/lighten.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/is_dark.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/rgba.js\");\n/* harmony import */ var lodash_es_memoize_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lodash-es/memoize.js */ \"../../../node_modules/lodash-es/memoize.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! stylis */ \"../../../node_modules/stylis/src/Serializer.js\");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! stylis */ \"../../../node_modules/stylis/src/Parser.js\");\n/* harmony import */ var lodash_es_isEmpty_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! lodash-es/isEmpty.js */ \"../../../node_modules/lodash-es/isEmpty.js\");\n\n\n\n\n\n\n\n\n\nconst LEVELS = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n};\nconst log$1 = {\n trace: (..._args) => {\n },\n debug: (..._args) => {\n },\n info: (..._args) => {\n },\n warn: (..._args) => {\n },\n error: (..._args) => {\n },\n fatal: (..._args) => {\n }\n};\nconst setLogLevel$1 = function(level = \"fatal\") {\n let numericLevel = LEVELS.fatal;\n if (typeof level === \"string\") {\n level = level.toLowerCase();\n if (level in LEVELS) {\n numericLevel = LEVELS[level];\n }\n } else if (typeof level === \"number\") {\n numericLevel = level;\n }\n log$1.trace = () => {\n };\n log$1.debug = () => {\n };\n log$1.info = () => {\n };\n log$1.warn = () => {\n };\n log$1.error = () => {\n };\n log$1.fatal = () => {\n };\n if (numericLevel <= LEVELS.fatal) {\n log$1.fatal = console.error ? console.error.bind(console, format(\"FATAL\"), \"color: orange\") : console.log.bind(console, \"\\x1B[35m\", format(\"FATAL\"));\n }\n if (numericLevel <= LEVELS.error) {\n log$1.error = console.error ? console.error.bind(console, format(\"ERROR\"), \"color: orange\") : console.log.bind(console, \"\\x1B[31m\", format(\"ERROR\"));\n }\n if (numericLevel <= LEVELS.warn) {\n log$1.warn = console.warn ? console.warn.bind(console, format(\"WARN\"), \"color: orange\") : console.log.bind(console, `\\x1B[33m`, format(\"WARN\"));\n }\n if (numericLevel <= LEVELS.info) {\n log$1.info = console.info ? console.info.bind(console, format(\"INFO\"), \"color: lightblue\") : console.log.bind(console, \"\\x1B[34m\", format(\"INFO\"));\n }\n if (numericLevel <= LEVELS.debug) {\n log$1.debug = console.debug ? console.debug.bind(console, format(\"DEBUG\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"DEBUG\"));\n }\n if (numericLevel <= LEVELS.trace) {\n log$1.trace = console.debug ? console.debug.bind(console, format(\"TRACE\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"TRACE\"));\n }\n};\nconst format = (level) => {\n const time = dayjs__WEBPACK_IMPORTED_MODULE_1__().format(\"ss.SSS\");\n return `%c${time} : ${level} : `;\n};\nconst lineBreakRegex = //gi;\nconst getRows = (s) => {\n if (!s) {\n return [\"\"];\n }\n const str2 = breakToPlaceholder(s).replace(/\\\\n/g, \"#br#\");\n return str2.split(\"#br#\");\n};\nconst removeScript = (txt) => {\n return dompurify__WEBPACK_IMPORTED_MODULE_4__.sanitize(txt);\n};\nconst sanitizeMore = (text, config2) => {\n var _a;\n if (((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels) !== false) {\n const level = config2.securityLevel;\n if (level === \"antiscript\" || level === \"strict\") {\n text = removeScript(text);\n } else if (level !== \"loose\") {\n text = breakToPlaceholder(text);\n text = text.replace(//g, \">\");\n text = text.replace(/=/g, \"=\");\n text = placeholderToBreak(text);\n }\n }\n return text;\n};\nconst sanitizeText$2 = (text, config2) => {\n if (!text) {\n return text;\n }\n if (config2.dompurifyConfig) {\n text = dompurify__WEBPACK_IMPORTED_MODULE_4__.sanitize(sanitizeMore(text, config2), config2.dompurifyConfig).toString();\n } else {\n text = dompurify__WEBPACK_IMPORTED_MODULE_4__.sanitize(sanitizeMore(text, config2), {\n FORBID_TAGS: [\"style\"]\n }).toString();\n }\n return text;\n};\nconst sanitizeTextOrArray = (a, config2) => {\n if (typeof a === \"string\") {\n return sanitizeText$2(a, config2);\n }\n return a.flat().map((x) => sanitizeText$2(x, config2));\n};\nconst hasBreaks = (text) => {\n return lineBreakRegex.test(text);\n};\nconst splitBreaks = (text) => {\n return text.split(lineBreakRegex);\n};\nconst placeholderToBreak = (s) => {\n return s.replace(/#br#/g, \"
\");\n};\nconst breakToPlaceholder = (s) => {\n return s.replace(lineBreakRegex, \"#br#\");\n};\nconst getUrl = (useAbsolute) => {\n let url = \"\";\n if (useAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replaceAll(/\\(/g, \"\\\\(\");\n url = url.replaceAll(/\\)/g, \"\\\\)\");\n }\n return url;\n};\nconst evaluate = (val) => val === false || [\"false\", \"null\", \"0\"].includes(String(val).trim().toLowerCase()) ? false : true;\nconst getMax = function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n};\nconst getMin = function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n};\nconst parseGenericTypes = function(text) {\n let cleanedText = text;\n if (text.split(\"~\").length - 1 >= 2) {\n let newCleanedText = cleanedText;\n do {\n cleanedText = newCleanedText;\n newCleanedText = cleanedText.replace(/~([^\\s,:;]+)~/, \"<$1>\");\n } while (newCleanedText != cleanedText);\n return parseGenericTypes(newCleanedText);\n } else {\n return cleanedText;\n }\n};\nconst common$1 = {\n getRows,\n sanitizeText: sanitizeText$2,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin\n};\nconst mkBorder = (col, darkMode) => darkMode ? (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(col, { s: -40, l: 10 }) : (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(col, { s: -40, l: -10 });\nconst oldAttributeBackgroundColorOdd = \"#ffffff\";\nconst oldAttributeBackgroundColorEven = \"#f2f2f2\";\nlet Theme$4 = class Theme {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#fff4dd\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n }\n updateColors() {\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? \"#eee\" : \"#333\");\n this.secondaryColor = this.secondaryColor || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -120 });\n this.tertiaryColor = this.tertiaryColor || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 180, l: 5 });\n this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n this.noteBkgColor = this.noteBkgColor || \"#fff5ad\";\n this.noteTextColor = this.noteTextColor || \"#333\";\n this.secondaryTextColor = this.secondaryTextColor || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.tertiaryColor);\n this.lineColor = this.lineColor || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.arrowheadColor = this.arrowheadColor || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n this.border2 = this.border2 || this.tertiaryBorderColor;\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || \"grey\";\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.lineColor);\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || \"white\";\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.excludeBkgColor = this.excludeBkgColor || \"#eeeeee\";\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.primaryColor, 23);\n this.gridColor = this.gridColor || \"lightgrey\";\n this.doneTaskBkgColor = this.doneTaskBkgColor || \"lightgrey\";\n this.doneTaskBorderColor = this.doneTaskBorderColor || \"grey\";\n this.critBorderColor = this.critBorderColor || \"#ff8888\";\n this.critBkgColor = this.critBkgColor || \"red\";\n this.todayLineColor = this.todayLineColor || \"red\";\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || \"#003163\";\n this.personBorder = this.personBorder || this.primaryBorderColor;\n this.personBkg = this.personBkg || this.mainBkg;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.specialStateColor = this.lineColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 210, l: 150 });\n this.cScale9 = this.cScale9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 330 });\n if (this.darkMode) {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 75);\n }\n } else {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 25);\n }\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n const multiplier = this.darkMode ? -4 : -1;\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });\n }\n this.classText = this.classText || this.textColor;\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 64 });\n this.fillType3 = this.fillType3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 64 });\n this.fillType4 = this.fillType4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -64 });\n this.fillType5 = this.fillType5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: -64 });\n this.fillType6 = this.fillType6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 128 });\n this.fillType7 = this.fillType7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { l: -10 });\n this.pie6 = this.pie6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.tertiaryColor, { l: -10 });\n this.pie7 = this.pie7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -20 });\n this.pie11 = this.pie11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60, l: -20 });\n this.pie12 = this.pie12 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: -10 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || (0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(this.quadrant1Fill) ? (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.quadrant1Fill) : (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git7, 25);\n } else {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git0);\n this.gitInv1 = this.gitInv1 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git1);\n this.gitInv2 = this.gitInv2 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git2);\n this.gitInv3 = this.gitInv3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git3);\n this.gitInv4 = this.gitInv4 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git4);\n this.gitInv5 = this.gitInv5 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git5);\n this.gitInv6 = this.gitInv6 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git6);\n this.gitInv7 = this.gitInv7 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git7);\n this.branchLabelColor = this.branchLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$4 = (userOverrides) => {\n const theme2 = new Theme$4();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$3 = class Theme2 {\n constructor() {\n this.background = \"#333\";\n this.primaryColor = \"#1f2020\";\n this.secondaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.primaryColor, 16);\n this.tertiaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -160 });\n this.primaryBorderColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.primaryColor);\n this.secondaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.secondaryColor);\n this.tertiaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.tertiaryColor);\n this.lineColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.textColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.mainBkg = \"#1f2020\";\n this.secondBkg = \"calculated\";\n this.mainContrastColor = \"lightgrey\";\n this.darkTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])((0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(\"#323D47\"), 10);\n this.lineColor = \"calculated\";\n this.border1 = \"#81B1DB\";\n this.border2 = (0,khroma__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(255, 255, 255, 0.25);\n this.arrowheadColor = \"calculated\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#181818\";\n this.textColor = \"#ccc\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#F9FFFE\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"calculated\";\n this.activationBkgColor = \"calculated\";\n this.sequenceNumberColor = \"black\";\n this.sectionBkgColor = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(\"#EAE8D9\", 30);\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"#EAE8D9\";\n this.excludeBkgColor = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.sectionBkgColor, 10);\n this.taskBorderColor = (0,khroma__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(255, 255, 255, 70);\n this.taskBkgColor = \"calculated\";\n this.taskTextColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = (0,khroma__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(255, 255, 255, 50);\n this.activeTaskBkgColor = \"#81B1DB\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#E83737\";\n this.critBkgColor = \"#E83737\";\n this.taskTextDarkColor = \"calculated\";\n this.todayLineColor = \"#DB5757\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"calculated\";\n this.errorBkgColor = \"#a44141\";\n this.errorTextColor = \"#ddd\";\n }\n updateColors() {\n this.secondBkg = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.labelBackground, 25);\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.mainContrastColor;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.secondaryBorderColor;\n this.noteBkgColor = this.secondBkg;\n this.noteTextColor = this.secondaryTextColor;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#555\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#f4f4f4\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 64 });\n this.fillType3 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 64 });\n this.fillType4 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -64 });\n this.fillType5 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: -64 });\n this.fillType6 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 128 });\n this.fillType7 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 128 });\n this.cScale1 = this.cScale1 || \"#0b0000\";\n this.cScale2 = this.cScale2 || \"#4d1037\";\n this.cScale3 = this.cScale3 || \"#3f5258\";\n this.cScale4 = this.cScale4 || \"#4f2f1b\";\n this.cScale5 = this.cScale5 || \"#6e0a0a\";\n this.cScale6 = this.cScale6 || \"#3b0048\";\n this.cScale7 = this.cScale7 || \"#995a01\";\n this.cScale8 = this.cScale8 || \"#154706\";\n this.cScale9 = this.cScale9 || \"#161722\";\n this.cScale10 = this.cScale10 || \"#00296f\";\n this.cScale11 = this.cScale11 || \"#01629c\";\n this.cScale12 = this.cScale12 || \"#010029\";\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 330 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this[\"cScale\" + i], 10);\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || (0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(this.quadrant1Fill) ? (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.quadrant1Fill) : (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.classText = this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.secondaryColor, 20);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie2 || this.secondaryColor, 20);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie3 || this.tertiaryColor, 20);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -30 }), 20);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60 }), 20);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90 }), 10);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 }), 10);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.pie8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 }), 20);\n this.gitInv0 = this.gitInv0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git0);\n this.gitInv1 = this.gitInv1 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git1);\n this.gitInv2 = this.gitInv2 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git2);\n this.gitInv3 = this.gitInv3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git3);\n this.gitInv4 = this.gitInv4 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git4);\n this.gitInv5 = this.gitInv5 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git5);\n this.gitInv6 = this.gitInv6 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git6);\n this.gitInv7 = this.gitInv7 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.background, 12);\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.background, 2);\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$3 = (userOverrides) => {\n const theme2 = new Theme$3();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$2 = class Theme3 {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#ECECFF\";\n this.secondaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.secondaryColor = \"#ffffde\";\n this.tertiaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.primaryColor);\n this.secondaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.secondaryColor);\n this.tertiaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.tertiaryColor);\n this.lineColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.textColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.background = \"white\";\n this.mainBkg = \"#ECECFF\";\n this.secondBkg = \"#ffffde\";\n this.lineColor = \"#333333\";\n this.border1 = \"#9370DB\";\n this.border2 = \"#aaaa33\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#e8e8e8\";\n this.textColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"grey\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = \"calculated\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.sectionBkgColor = (0,khroma__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(102, 102, 255, 0.49);\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#fff400\";\n this.taskBorderColor = \"#534fbc\";\n this.taskBkgColor = \"#8a90dd\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"#534fbc\";\n this.activeTaskBkgColor = \"#bfc7ff\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n this.updateColors();\n }\n updateColors() {\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this[\"cScale\" + i], { h: 180 });\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, l: -(7 + i * 5) });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n if (this.labelTextColor !== \"calculated\") {\n this.cScaleLabel0 = this.cScaleLabel0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.cScaleLabel3 = this.cScaleLabel3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.labelTextColor;\n }\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n this.actorBorder = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 64 });\n this.fillType3 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 64 });\n this.fillType4 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -64 });\n this.fillType5 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: -64 });\n this.fillType6 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 128 });\n this.fillType7 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.tertiaryColor, { l: -40 });\n this.pie4 = this.pie4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.tertiaryColor, { l: -20 });\n this.pie7 = this.pie7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -20 });\n this.pie8 = this.pie8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60, l: -40 });\n this.pie9 = this.pie9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: -40 });\n this.pie10 = this.pie10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -40 });\n this.pie11 = this.pie11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90, l: -40 });\n this.pie12 = this.pie12 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: -30 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || (0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(this.quadrant1Fill) ? (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.quadrant1Fill) : (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git7, 25);\n } else {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])((0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git0), 25);\n this.gitInv1 = this.gitInv1 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git1);\n this.gitInv2 = this.gitInv2 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git2);\n this.gitInv3 = this.gitInv3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git3);\n this.gitInv4 = this.gitInv4 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git4);\n this.gitInv5 = this.gitInv5 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git5);\n this.gitInv6 = this.gitInv6 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git6);\n this.gitInv7 = this.gitInv7 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$2 = (userOverrides) => {\n const theme2 = new Theme$2();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$1 = class Theme4 {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#cde498\";\n this.secondaryColor = \"#cdffb2\";\n this.background = \"white\";\n this.mainBkg = \"#cde498\";\n this.secondBkg = \"#cdffb2\";\n this.lineColor = \"green\";\n this.border1 = \"#13540c\";\n this.border2 = \"#6eaa49\";\n this.arrowheadColor = \"green\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.tertiaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"#cde498\", 10);\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.primaryColor);\n this.secondaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.secondaryColor);\n this.tertiaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.primaryColor);\n this.lineColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.textColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#333\";\n this.edgeLabelBackground = \"#e8e8e8\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"grey\";\n this.signalColor = \"#333\";\n this.signalTextColor = \"#333\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"#326932\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"#6eaa49\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#6eaa49\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"#487e3a\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.actorBorder = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this[\"cScale\" + i], { h: 180 });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 64 });\n this.fillType3 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 64 });\n this.fillType4 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -64 });\n this.fillType5 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: -64 });\n this.fillType6 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 128 });\n this.fillType7 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { l: -30 });\n this.pie5 = this.pie5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.tertiaryColor, { h: 40, l: -40 });\n this.pie7 = this.pie7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60, l: -50 });\n this.pie11 = this.pie11 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60, l: -50 });\n this.pie12 = this.pie12 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120, l: -50 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || (0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(this.quadrant1Fill) ? (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.quadrant1Fill) : (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.git7, 25);\n } else {\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git0, 25);\n this.git1 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git1, 25);\n this.git2 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git2, 25);\n this.git3 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git3, 25);\n this.git4 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git4, 25);\n this.git5 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git5, 25);\n this.git6 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git6, 25);\n this.git7 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git0);\n this.gitInv1 = this.gitInv1 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git1);\n this.gitInv2 = this.gitInv2 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git2);\n this.gitInv3 = this.gitInv3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git3);\n this.gitInv4 = this.gitInv4 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git4);\n this.gitInv5 = this.gitInv5 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git5);\n this.gitInv6 = this.gitInv6 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git6);\n this.gitInv7 = this.gitInv7 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$1 = (userOverrides) => {\n const theme2 = new Theme$1();\n theme2.calculate(userOverrides);\n return theme2;\n};\nclass Theme5 {\n constructor() {\n this.primaryColor = \"#eee\";\n this.contrast = \"#707070\";\n this.secondaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.contrast, 55);\n this.background = \"#ffffff\";\n this.tertiaryColor = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.primaryColor);\n this.secondaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.secondaryColor);\n this.tertiaryTextColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.tertiaryColor);\n this.lineColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.textColor = (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.background);\n this.mainBkg = \"#eee\";\n this.secondBkg = \"calculated\";\n this.lineColor = \"#666\";\n this.border1 = \"#999\";\n this.border2 = \"calculated\";\n this.note = \"#ffa\";\n this.text = \"#333\";\n this.critical = \"#d42\";\n this.done = \"#bbb\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"white\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"calculated\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n this.secondBkg = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.contrast, 55);\n this.border2 = this.contrast;\n this.actorBorder = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.lineColor;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = \"#999\";\n this.noteBkgColor = \"#666\";\n this.noteTextColor = \"#fff\";\n this.cScale0 = this.cScale0 || \"#555\";\n this.cScale1 = this.cScale1 || \"#F4F4F4\";\n this.cScale2 = this.cScale2 || \"#555\";\n this.cScale3 = this.cScale3 || \"#BBB\";\n this.cScale4 = this.cScale4 || \"#777\";\n this.cScale5 = this.cScale5 || \"#999\";\n this.cScale6 = this.cScale6 || \"#DDD\";\n this.cScale7 = this.cScale7 || \"#FFF\";\n this.cScale8 = this.cScale8 || \"#DDD\";\n this.cScale9 = this.cScale9 || \"#BBB\";\n this.cScale10 = this.cScale10 || \"#999\";\n this.cScale11 = this.cScale11 || \"#777\";\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this[\"cScaleLabel0\"] = this[\"cScaleLabel0\"] || this.cScale1;\n this[\"cScaleLabel2\"] = this[\"cScaleLabel2\"] || this.cScale1;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.mainBkg, { l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n this.sectionBkgColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.contrast, 30);\n this.sectionBkgColor2 = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.contrast, 30);\n this.taskBorderColor = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.contrast, 10);\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.border1, 30);\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.critBkgColor, 10);\n this.todayLineColor = this.critBkgColor;\n this.transitionColor = this.transitionColor || \"#000\";\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f4f4f4\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.stateBorder = this.stateBorder || \"#000\";\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#222\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 64 });\n this.fillType3 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 64 });\n this.fillType4 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -64 });\n this.fillType5 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: -64 });\n this.fillType6 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 128 });\n this.fillType7 = (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.secondaryColor, { h: 128 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pie12 = this.pie0;\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || (0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(this.quadrant1Fill) ? (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(this.quadrant1Fill) : (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(this.pie1, 25) || this.primaryColor;\n this.git1 = this.pie2 || this.secondaryColor;\n this.git2 = this.pie3 || this.tertiaryColor;\n this.git3 = this.pie4 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -30 });\n this.git4 = this.pie5 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -60 });\n this.git5 = this.pie6 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: -90 });\n this.git6 = this.pie7 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 60 });\n this.git7 = this.pie8 || (0,khroma__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this.primaryColor, { h: 120 });\n this.gitInv0 = this.gitInv0 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git0);\n this.gitInv1 = this.gitInv1 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git1);\n this.gitInv2 = this.gitInv2 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git2);\n this.gitInv3 = this.gitInv3 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git3);\n this.gitInv4 = this.gitInv4 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git4);\n this.gitInv5 = this.gitInv5 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git5);\n this.gitInv6 = this.gitInv6 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git6);\n this.gitInv7 = this.gitInv7 || (0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this.git7);\n this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n this.gitBranchLabel0 = this.branchLabelColor;\n this.gitBranchLabel1 = \"white\";\n this.gitBranchLabel2 = this.branchLabelColor;\n this.gitBranchLabel3 = \"white\";\n this.gitBranchLabel4 = this.branchLabelColor;\n this.gitBranchLabel5 = this.branchLabelColor;\n this.gitBranchLabel6 = this.branchLabelColor;\n this.gitBranchLabel7 = this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\nconst getThemeVariables = (userOverrides) => {\n const theme2 = new Theme5();\n theme2.calculate(userOverrides);\n return theme2;\n};\nconst theme = {\n base: {\n getThemeVariables: getThemeVariables$4\n },\n dark: {\n getThemeVariables: getThemeVariables$3\n },\n default: {\n getThemeVariables: getThemeVariables$2\n },\n forest: {\n getThemeVariables: getThemeVariables$1\n },\n neutral: {\n getThemeVariables\n }\n};\nconst config = {\n /**\n * Theme , the CSS style sheet\n *\n * | Parameter | Description | Type | Required | Values |\n * | --------- | --------------- | ------ | -------- | ---------------------------------------------- |\n * | theme | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' |\n *\n * **Notes:** To disable any pre-defined mermaid theme, use \"null\".\n *\n * @example\n *\n * ```js\n * {\n * \"theme\": \"forest\",\n * \"themeCSS\": \".node rect { fill: red; }\"\n * }\n * ```\n */\n theme: \"default\",\n themeVariables: theme[\"default\"].getThemeVariables(),\n themeCSS: void 0,\n /* **maxTextSize** - The maximum allowed size of the users text diagram */\n maxTextSize: 5e4,\n darkMode: false,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- |\n * | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily |\n *\n * **Notes:** Default value: '\"trebuchet ms\", verdana, arial, sans-serif;'.\n */\n fontFamily: '\"trebuchet ms\", verdana, arial, sans-serif;',\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ----------------------------------------------------- | ---------------- | -------- | --------------------------------------------- |\n * | logLevel | This option decides the amount of logging to be used. | string \\| number | Required | 'trace','debug','info','warn','error','fatal' |\n *\n * **Notes:**\n *\n * - Trace: 0\n * - Debug: 1\n * - Info: 2\n * - Warn: 3\n * - Error: 4\n * - Fatal: 5 (default)\n */\n logLevel: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ |\n * | securityLevel | Level of trust for parsed diagram | string | Required | 'sandbox', 'strict', 'loose', 'antiscript' |\n *\n * **Notes**:\n *\n * - **strict**: (**default**) HTML tags in the text are encoded and click functionality is disabled.\n * - **antiscript**: HTML tags in text are allowed (only script elements are removed), and click\n * functionality is enabled.\n * - **loose**: HTML tags in text are allowed and click functionality is enabled.\n * - **sandbox**: With this security level, all rendering takes place in a sandboxed iframe. This\n * prevent any JavaScript from running in the context. This may hinder interactive functionality\n * of the diagram, like scripts, popups in the sequence diagram, links to other tabs or targets, etc.\n */\n securityLevel: \"strict\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | -------------------------------------------- | ------- | -------- | ----------- |\n * | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false |\n *\n * **Notes:** Default value: true\n */\n startOnLoad: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- |\n * | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false |\n *\n * **Notes**:\n *\n * This matters if you are using base tag settings.\n *\n * Default value: false\n */\n arrowMarkerAbsolute: false,\n /**\n * This option controls which currentConfig keys are considered _secure_ and can only be changed\n * via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the\n * `secure` keys in the current currentConfig. This prevents malicious graph directives from\n * overriding a site's default security.\n *\n * **Notes**:\n *\n * Default value: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']\n */\n secure: [\"secure\", \"securityLevel\", \"startOnLoad\", \"maxTextSize\"],\n /**\n * This option controls if the generated ids of nodes in the SVG are generated randomly or based\n * on a seed. If set to false, the IDs are generated based on the current date and thus are not\n * deterministic. This is the default behavior.\n *\n * **Notes**:\n *\n * This matters if your files are checked into source control e.g. git and should not change unless\n * content is changed.\n *\n * Default value: false\n */\n deterministicIds: false,\n /**\n * This option is the optional seed for deterministic ids. if set to undefined but\n * deterministicIds is true, a simple number iterator is used. You can set this attribute to base\n * the seed on a static string.\n */\n deterministicIDSeed: void 0,\n /** The object containing configurations specific for flowcharts */\n flowchart: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the flowchart | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |\n *\n * **Notes:**\n *\n * The amount of padding around the diagram as a whole so that embedded diagrams have margins,\n * expressed in pixels\n *\n * Default value: 8\n */\n diagramPadding: 8,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- |\n * | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false |\n *\n * **Notes:** Default value: true.\n */\n htmlLabels: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- |\n * | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number |\n *\n * **Notes:**\n *\n * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the\n * vertical spacing for LR as well as RL graphs.**\n *\n * Default value: 50\n */\n nodeSpacing: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- |\n * | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number |\n *\n * **Notes**:\n *\n * Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal\n * spacing for LR as well as RL graphs.\n *\n * Default value 50\n */\n rankSpacing: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- |\n * | curve | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' |\n *\n * **Notes:**\n *\n * Default Value: 'basis'\n */\n curve: \"basis\",\n // Only used in new experimental rendering\n // represents the padding between the labels and the shape\n padding: 15,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------- | ------- | -------- | ----------------------- |\n * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper, elk |\n *\n * **Notes:**\n *\n * Decides which rendering engine that is to be used for the rendering. Legal values are:\n * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid, elk for layout using\n * elkjs\n *\n * Default value: 'dagre-wrapper'\n */\n defaultRenderer: \"dagre-wrapper\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------- | ------- | -------- | ----------------------- |\n * | wrappingWidth | See notes | number | 4 | width of nodes where text is wrapped |\n *\n * **Notes:**\n *\n * When using markdown strings the text ius wrapped automatically, this\n * value sets the max width of a text before it continues on a new line.\n * Default value: 'dagre-wrapper'\n */\n wrappingWidth: 200\n },\n /** The object containing configurations specific for sequence diagrams */\n sequence: {\n hideUnusedParticipants: false,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------- | ------- | -------- | ------------------ |\n * | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value :10\n */\n activationWidth: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n diagramMarginX: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n diagramMarginY: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------- | ------- | -------- | ------------------ |\n * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n actorMargin: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------- | ------- | -------- | ------------------ |\n * | width | Width of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 150\n */\n width: 150,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | --------------------- | ------- | -------- | ------------------ |\n * | height | Height of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 65\n */\n height: 65,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ------------------------ | ------- | -------- | ------------------ |\n * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n boxMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 5\n */\n boxTextMargin: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ------------------- | ------- | -------- | ------------------ |\n * | noteMargin | margin around notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n noteMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ---------------------- | ------- | -------- | ------------------ |\n * | messageMargin | Space between messages | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 35\n */\n messageMargin: 35,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | --------------------------- | ------ | -------- | ------------------------- |\n * | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' |\n *\n * **Notes:** Default value: 'center'\n */\n messageAlign: \"center\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | --------------------------- | ------- | -------- | ----------- |\n * | mirrorActors | Mirror actors under diagram | boolean | Required | true, false |\n *\n * **Notes:** Default value: true\n */\n mirrorActors: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- |\n * | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False |\n *\n * **Notes:**\n *\n * Default value: false.\n */\n forceMenus: false,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |\n * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value |\n *\n * **Notes:**\n *\n * Depending on css styling this might need adjustment.\n *\n * Default value: 1\n */\n bottomMarginAdj: 1,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:** When this flag is set to true, the height and width is set to 100% and is then\n * scaling with the available space. If set to false, the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ------------------------------------ | ------- | -------- | ----------- |\n * | rightAngles | display curve arrows as right angles | boolean | Required | true, false |\n *\n * **Notes:**\n *\n * This will display arrows that start and begin at the same node as right angles, rather than a\n * curve\n *\n * Default value: false\n */\n rightAngles: false,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------- | ------------------------------- | ------- | -------- | ----------- |\n * | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false |\n *\n * **Notes:** Default value: false\n */\n showSequenceNumbers: false,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ |\n * | actorFontSize | This sets the font size of the actor's description | Integer | Require | Any Positive Value |\n *\n * **Notes:** **Default value 14**..\n */\n actorFontSize: 14,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- |\n * | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily |\n *\n * **Notes:** Default value: \"'Open Sans\", sans-serif'\n */\n actorFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of the actor's description\n *\n * **Notes:** Default value: 400.\n */\n actorFontWeight: 400,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ |\n * | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 14\n */\n noteFontSize: 14,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- |\n * | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily |\n *\n * **Notes:** Default value: ''\"trebuchet ms\", verdana, arial, sans-serif'\n */\n noteFontFamily: '\"trebuchet ms\", verdana, arial, sans-serif',\n /**\n * This sets the font weight of the note's description\n *\n * **Notes:** Default value: 400\n */\n noteFontWeight: 400,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- |\n * | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' |\n *\n * **Notes:** Default value: 'center'\n */\n noteAlign: \"center\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------------------------------------- | ------- | -------- | ------------------- |\n * | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number |\n *\n * **Notes:** Default value: 16\n */\n messageFontSize: 16,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- |\n * | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily |\n *\n * **Notes:** Default value: '\"trebuchet ms\", verdana, arial, sans-serif'\n */\n messageFontFamily: '\"trebuchet ms\", verdana, arial, sans-serif',\n /**\n * This sets the font weight of the message's description\n *\n * **Notes:** Default value: 400.\n */\n messageFontWeight: 400,\n /**\n * This sets the auto-wrap state for the diagram\n *\n * **Notes:** Default value: false.\n */\n wrap: false,\n /**\n * This sets the auto-wrap padding for the diagram (sides only)\n *\n * **Notes:** Default value: 0.\n */\n wrapPadding: 10,\n /**\n * This sets the width of the loop-box (loop, alt, opt, par)\n *\n * **Notes:** Default value: 50.\n */\n labelBoxWidth: 50,\n /**\n * This sets the height of the loop-box (loop, alt, opt, par)\n *\n * **Notes:** Default value: 20.\n */\n labelBoxHeight: 20,\n messageFont: function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n },\n noteFont: function() {\n return {\n fontFamily: this.noteFontFamily,\n fontSize: this.noteFontSize,\n fontWeight: this.noteFontWeight\n };\n },\n actorFont: function() {\n return {\n fontFamily: this.actorFontFamily,\n fontSize: this.actorFontSize,\n fontWeight: this.actorFontWeight\n };\n }\n },\n /** The object containing configurations specific for gantt diagrams */\n gantt: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ----------------------------------- | ------- | -------- | ------------------ |\n * | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 20\n */\n barHeight: 20,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ |\n * | barGap | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value |\n *\n * **Notes:** Default value: 4\n */\n barGap: 4,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ |\n * | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n topPadding: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ |\n * | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 75\n */\n rightPadding: 75,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ |\n * | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 75\n */\n leftPadding: 75,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n * | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 35\n */\n gridLineStartPadding: 35,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ----------- | ------- | -------- | ------------------ |\n * | fontSize | Font size | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 11\n */\n fontSize: 11,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------- | ------- | -------- | ------------------ |\n * | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 11\n */\n sectionFontSize: 11,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ |\n * | numberSectionStyles | The number of alternating section styles | Integer | 4 | Any Positive Value |\n *\n * **Notes:** Default value: 4\n */\n numberSectionStyles: 4,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ------------------------- | ------ | -------- | --------- |\n * | displayMode | Controls the display mode | string | 4 | 'compact' |\n *\n * **Notes**:\n *\n * - **compact**: Enables displaying multiple tasks on the same row.\n */\n displayMode: \"\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ---------------------------- | ---- | -------- | ---------------- |\n * | axisFormat | Date/time format of the axis | 3 | Required | Date in yy-mm-dd |\n *\n * **Notes:**\n *\n * This might need adjustment to match your locale and preferences\n *\n * Default value: '%Y-%m-%d'.\n */\n axisFormat: \"%Y-%m-%d\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | ------------| ------ | -------- | ------- |\n * | tickInterval | axis ticks | string | Optional | string |\n *\n * **Notes:**\n *\n * Pattern is /^([1-9][0-9]*)(minute|hour|day|week|month)$/\n *\n * Default value: undefined\n */\n tickInterval: void 0,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ----------- | ------- | -------- | ----------- |\n * | topAxis | See notes | Boolean | 4 | True, False |\n *\n * **Notes:** when this flag is set date labels will be added to the top of the chart\n *\n * **Default value false**.\n */\n topAxis: false,\n useWidth: void 0\n },\n /** The object containing configurations specific for journey diagrams */\n journey: {\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n diagramMarginX: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n diagramMarginY: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------- | ------- | -------- | ------------------ |\n * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n leftMargin: 150,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------- | ------- | -------- | ------------------ |\n * | width | Width of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 150\n */\n width: 150,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | --------------------- | ------- | -------- | ------------------ |\n * | height | Height of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 65\n */\n height: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ------------------------ | ------- | -------- | ------------------ |\n * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n boxMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 5\n */\n boxTextMargin: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ------------------- | ------- | -------- | ------------------ |\n * | noteMargin | Margin around notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n noteMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ----------------------- | ------- | -------- | ------------------ |\n * | messageMargin | Space between messages. | Integer | Required | Any Positive Value |\n *\n * **Notes:**\n *\n * Space between messages.\n *\n * Default value: 35\n */\n messageMargin: 35,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | --------------------------- | ---- | -------- | ------------------------- |\n * | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' |\n *\n * **Notes:** Default value: 'center'\n */\n messageAlign: \"center\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |\n * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value |\n *\n * **Notes:**\n *\n * Depending on css styling this might need adjustment.\n *\n * Default value: 1\n */\n bottomMarginAdj: 1,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------------------- | ---- | -------- | ----------- |\n * | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false |\n *\n * **Notes:**\n *\n * This will display arrows that start and begin at the same node as right angles, rather than a\n * curves\n *\n * Default value: false\n */\n rightAngles: false,\n taskFontSize: 14,\n taskFontFamily: '\"Open Sans\", sans-serif',\n taskMargin: 50,\n // width of activation box\n activationWidth: 10,\n // text placement as: tspan | fo | old only text as before\n textPlacement: \"fo\",\n actorColours: [\"#8FBC8F\", \"#7CFC00\", \"#00FFFF\", \"#20B2AA\", \"#B0E0E6\", \"#FFFFE0\"],\n sectionFills: [\"#191970\", \"#8B008B\", \"#4B0082\", \"#2F4F4F\", \"#800000\", \"#8B4513\", \"#00008B\"],\n sectionColours: [\"#fff\"]\n },\n /** The object containing configurations specific for timeline diagrams */\n timeline: {\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n diagramMarginX: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n diagramMarginY: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------- | ------- | -------- | ------------------ |\n * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n leftMargin: 150,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------- | ------- | -------- | ------------------ |\n * | width | Width of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 150\n */\n width: 150,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | --------------------- | ------- | -------- | ------------------ |\n * | height | Height of actor boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 65\n */\n height: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ------------------------ | ------- | -------- | ------------------ |\n * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n boxMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 5\n */\n boxTextMargin: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------- | ------------------- | ------- | -------- | ------------------ |\n * | noteMargin | Margin around notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n noteMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ----------------------- | ------- | -------- | ------------------ |\n * | messageMargin | Space between messages. | Integer | Required | Any Positive Value |\n *\n * **Notes:**\n *\n * Space between messages.\n *\n * Default value: 35\n */\n messageMargin: 35,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | --------------------------- | ---- | -------- | ------------------------- |\n * | messageAlign | Multiline message alignment | 3 | 4 | 'left', 'center', 'right' |\n *\n * **Notes:** Default value: 'center'\n */\n messageAlign: \"center\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |\n * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4 | Any Positive Value |\n *\n * **Notes:**\n *\n * Depending on css styling this might need adjustment.\n *\n * Default value: 1\n */\n bottomMarginAdj: 1,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | --------------------------------- | ---- | -------- | ----------- |\n * | rightAngles | Curved Arrows become Right Angles | 3 | 4 | true, false |\n *\n * **Notes:**\n *\n * This will display arrows that start and begin at the same node as right angles, rather than a\n * curves\n *\n * Default value: false\n */\n rightAngles: false,\n taskFontSize: 14,\n taskFontFamily: '\"Open Sans\", sans-serif',\n taskMargin: 50,\n // width of activation box\n activationWidth: 10,\n // text placement as: tspan | fo | old only text as before\n textPlacement: \"fo\",\n actorColours: [\"#8FBC8F\", \"#7CFC00\", \"#00FFFF\", \"#20B2AA\", \"#B0E0E6\", \"#FFFFE0\"],\n sectionFills: [\"#191970\", \"#8B008B\", \"#4B0082\", \"#2F4F4F\", \"#800000\", \"#8B4513\", \"#00008B\"],\n sectionColours: [\"#fff\"],\n disableMulticolor: false\n },\n class: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the class diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n arrowMarkerAbsolute: false,\n dividerMargin: 10,\n padding: 5,\n textHeight: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------- | ------- | -------- | ----------------------- |\n * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper |\n *\n * **Notes**:\n *\n * Decides which rendering engine that is to be used for the rendering. Legal values are:\n * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid\n *\n * Default value: 'dagre-d3'\n */\n defaultRenderer: \"dagre-wrapper\"\n },\n state: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the state diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n dividerMargin: 10,\n sizeUnit: 5,\n padding: 8,\n textHeight: 10,\n titleShift: -15,\n noteMargin: 10,\n forkWidth: 70,\n forkHeight: 7,\n // Used\n miniPadding: 2,\n // Font size factor, this is used to guess the width of the edges labels before rendering by dagre\n // layout. This might need updating if/when switching font\n fontSizeFactor: 5.02,\n fontSize: 24,\n labelHeight: 16,\n edgeLengthFactor: \"20\",\n compositTitleSize: 35,\n radius: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See notes | boolean | 4 | true, false |\n *\n * **Notes:**\n *\n * When this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------- | ------- | -------- | ----------------------- |\n * | defaultRenderer | See notes | boolean | 4 | dagre-d3, dagre-wrapper |\n *\n * **Notes:**\n *\n * Decides which rendering engine that is to be used for the rendering. Legal values are:\n * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid\n *\n * Default value: 'dagre-d3'\n */\n defaultRenderer: \"dagre-wrapper\"\n },\n /** The object containing configurations specific for entity relationship diagrams */\n er: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |\n *\n * **Notes:**\n *\n * The amount of padding around the diagram as a whole so that embedded diagrams have margins,\n * expressed in pixels\n *\n * Default value: 20\n */\n diagramPadding: 20,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- |\n * | layoutDirection | Directional bias for layout of entities. | string | Required | \"TB\", \"BT\", \"LR\", \"RL\" |\n *\n * **Notes:**\n *\n * 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left.\n *\n * T = top, B = bottom, L = left, and R = right.\n *\n * Default value: 'TB'\n */\n layoutDirection: \"TB\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------- | ------- | -------- | ------------------ |\n * | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value |\n *\n * **Notes:** Expressed in pixels. Default value: 100\n */\n minEntityWidth: 100,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------------------------------- | ------- | -------- | ------------------ |\n * | minEntityHeight | The minimum height of an entity box | Integer | 4 | Any Positive Value |\n *\n * **Notes:** Expressed in pixels Default value: 75\n */\n minEntityHeight: 75,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ |\n * | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4 | Any Positive Value |\n *\n * **Notes:**\n *\n * The minimum internal padding between text in an entity box and the enclosing box borders,\n * expressed in pixels.\n *\n * Default value: 15\n */\n entityPadding: 15,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ----------------------------------- | ------ | -------- | -------------------- |\n * | stroke | Stroke color of box edges and lines | string | 4 | Any recognized color |\n *\n * **Notes:** Default value: 'gray'\n */\n stroke: \"gray\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------------- | ------ | -------- | -------------------- |\n * | fill | Fill color of entity boxes | string | 4 | Any recognized color |\n *\n * **Notes:** Default value: 'honeydew'\n */\n fill: \"honeydew\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ------------------- | ------- | -------- | ------------------ |\n * | fontSize | Font Size in pixels | Integer | | Any Positive Value |\n *\n * **Notes:**\n *\n * Font size (expressed as an integer representing a number of pixels) Default value: 12\n */\n fontSize: 12,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:**\n *\n * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n * available space. If set to false, the diagram reserves its absolute width.\n *\n * Default value: true\n */\n useMaxWidth: true\n },\n /** The object containing configurations specific for pie diagrams */\n pie: {\n useWidth: void 0,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:**\n *\n * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n * available space. If set to false, the diagram reserves its absolute width.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | -------------------------------------------------------------------------------- | ------- | -------- | ------------------- |\n * | textPosition | Axial position of slice's label from zero at the center to 1 at the outside edge | Number | Optional | Decimal from 0 to 1 |\n *\n * **Notes:** Default value: 0.75\n */\n textPosition: 0.75\n },\n quadrantChart: {\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------- | ------- | -------- | ------------------- |\n * | chartWidth | Width of the chart | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 500\n */\n chartWidth: 500,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------- | ------- | -------- | ------------------- |\n * | chartHeight | Height of the chart | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 500\n */\n chartHeight: 500,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------ | ---------------------------------- | ------- | -------- | ------------------- |\n * | titlePadding | Chart title top and bottom padding | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 10\n */\n titlePadding: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------ | ---------------------------------- | ------- | -------- | ------------------- |\n * | titleFontSize | Chart title font size | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 20\n */\n titleFontSize: 20,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------- | ------- | -------- | ------------------- |\n * | quadrantPadding | Padding around the quadrant square | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n quadrantPadding: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------------------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------- |\n * | quadrantTextTopPadding | quadrant title padding from top if the quadrant is rendered on top | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n quadrantTextTopPadding: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------ | ---------------------------------- | ------- | -------- | ------------------- |\n * | quadrantLabelFontSize | quadrant title font size | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 16\n */\n quadrantLabelFontSize: 16,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------------------------- | ------------------------------------------------------------- | ------- | -------- | ------------------- |\n * | quadrantInternalBorderStrokeWidth | stroke width of edges of the box that are inside the quadrant | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 1\n */\n quadrantInternalBorderStrokeWidth: 1,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------------------------- | -------------------------------------------------------------- | ------- | -------- | ------------------- |\n * | quadrantExternalBorderStrokeWidth | stroke width of edges of the box that are outside the quadrant | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 2\n */\n quadrantExternalBorderStrokeWidth: 2,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------- | ------- | -------- | ------------------- |\n * | xAxisLabelPadding | Padding around x-axis labels | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n xAxisLabelPadding: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------ | ---------------------------------- | ------- | -------- | ------------------- |\n * | xAxisLabelFontSize | x-axis label font size | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 16\n */\n xAxisLabelFontSize: 16,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ------------------------------- | ------- | -------- | ------------------- |\n * | xAxisPosition | position of x-axis labels | string | Optional | 'top' or 'bottom' |\n *\n * **Notes:**\n * Default value: top\n */\n xAxisPosition: \"top\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ---------------------------------- | ------- | -------- | ------------------- |\n * | yAxisLabelPadding | Padding around y-axis labels | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n yAxisLabelPadding: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------------ | ---------------------------------- | ------- | -------- | ------------------- |\n * | yAxisLabelFontSize | y-axis label font size | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 16\n */\n yAxisLabelFontSize: 16,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ------------------------------- | ------- | -------- | ------------------- |\n * | yAxisPosition | position of y-axis labels | string | Optional | 'left' or 'right' |\n *\n * **Notes:**\n * Default value: left\n */\n yAxisPosition: \"left\",\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------------------- | -------------------------------------- | ------- | -------- | ------------------- |\n * | pointTextPadding | padding between point and point label | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n pointTextPadding: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ---------------------- | ---------------------- | ------- | -------- | ------------------- |\n * | pointTextPadding | point title font size | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 12\n */\n pointLabelFontSize: 12,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | ------------------------------- | ------- | -------- | ------------------- |\n * | pointRadius | radius of the point to be drawn | number | Optional | Any positive number |\n *\n * **Notes:**\n * Default value: 5\n */\n pointRadius: 5,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:**\n *\n * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n * available space. If set to false, the diagram reserves its absolute width.\n *\n * Default value: true\n */\n useMaxWidth: true\n },\n /** The object containing configurations specific for req diagrams */\n requirement: {\n useWidth: void 0,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:**\n *\n * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n * available space. If set to false, the diagram reserves its absolute width.\n *\n * Default value: true\n */\n useMaxWidth: true,\n rect_fill: \"#f9f9f9\",\n text_color: \"#333\",\n rect_border_size: \"0.5px\",\n rect_border_color: \"#bbb\",\n rect_min_width: 200,\n rect_min_height: 200,\n fontSize: 14,\n rect_padding: 10,\n line_height: 20\n },\n gitGraph: {\n /**\n * ### titleTopMargin\n *\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | titleTopMargin | Margin top for the text over the Git diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 25\n */\n titleTopMargin: 25,\n diagramPadding: 8,\n nodeLabel: {\n width: 75,\n height: 100,\n x: -25,\n y: 0\n },\n mainBranchName: \"main\",\n mainBranchOrder: 0,\n showCommitLabel: true,\n showBranches: true,\n rotateCommitLabel: true\n },\n /** The object containing configurations specific for c4 diagrams */\n c4: {\n useWidth: void 0,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n diagramMarginX: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ------------------------------------------- | ------- | -------- | ------------------ |\n * | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n diagramMarginY: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------- | --------------------- | ------- | -------- | ------------------ |\n * | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 50\n */\n c4ShapeMargin: 50,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | -------------- | ---------------------- | ------- | -------- | ------------------ |\n * | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 20\n */\n c4ShapePadding: 20,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | --------------------- | ------- | -------- | ------------------ |\n * | width | Width of person boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 216\n */\n width: 216,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ---------------------- | ------- | -------- | ------------------ |\n * | height | Height of person boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 60\n */\n height: 60,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------- | ------------------- | ------- | -------- | ------------------ |\n * | boxMargin | Margin around boxes | Integer | Required | Any Positive Value |\n *\n * **Notes:** Default value: 10\n */\n boxMargin: 10,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ----------- | ----------- | ------- | -------- | ----------- |\n * | useMaxWidth | See Notes | boolean | Required | true, false |\n *\n * **Notes:** When this flag is set to true, the height and width is set to 100% and is then\n * scaling with the available space. If set to false, the absolute space required is used.\n *\n * Default value: true\n */\n useMaxWidth: true,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | ------------ | ----------- | ------- | -------- | ------------------ |\n * | c4ShapeInRow | See Notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** How many shapes to place in each row.\n *\n * Default value: 4\n */\n c4ShapeInRow: 4,\n nextLinePaddingX: 0,\n /**\n * | Parameter | Description | Type | Required | Values |\n * | --------------- | ----------- | ------- | -------- | ------------------ |\n * | c4BoundaryInRow | See Notes | Integer | Required | Any Positive Value |\n *\n * **Notes:** How many boundaries to place in each row.\n *\n * Default value: 2\n */\n c4BoundaryInRow: 2,\n /**\n * This sets the font size of Person shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n personFontSize: 14,\n /**\n * This sets the font family of Person shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n personFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Person shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n personFontWeight: \"normal\",\n /**\n * This sets the font size of External Person shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_personFontSize: 14,\n /**\n * This sets the font family of External Person shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_personFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Person shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_personFontWeight: \"normal\",\n /**\n * This sets the font size of System shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n systemFontSize: 14,\n /**\n * This sets the font family of System shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n systemFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of System shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n systemFontWeight: \"normal\",\n /**\n * This sets the font size of External System shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_systemFontSize: 14,\n /**\n * This sets the font family of External System shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_systemFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External System shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_systemFontWeight: \"normal\",\n /**\n * This sets the font size of System DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n system_dbFontSize: 14,\n /**\n * This sets the font family of System DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n system_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of System DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n system_dbFontWeight: \"normal\",\n /**\n * This sets the font size of External System DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_system_dbFontSize: 14,\n /**\n * This sets the font family of External System DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_system_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External System DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_system_dbFontWeight: \"normal\",\n /**\n * This sets the font size of System Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n system_queueFontSize: 14,\n /**\n * This sets the font family of System Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n system_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of System Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n system_queueFontWeight: \"normal\",\n /**\n * This sets the font size of External System Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_system_queueFontSize: 14,\n /**\n * This sets the font family of External System Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_system_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External System Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_system_queueFontWeight: \"normal\",\n /**\n * This sets the font size of Boundary shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n boundaryFontSize: 14,\n /**\n * This sets the font family of Boundary shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n boundaryFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Boundary shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n boundaryFontWeight: \"normal\",\n /**\n * This sets the font size of Message shape for the diagram\n *\n * **Notes:** Default value: 12.\n */\n messageFontSize: 12,\n /**\n * This sets the font family of Message shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n messageFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Message shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n messageFontWeight: \"normal\",\n /**\n * This sets the font size of Container shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n containerFontSize: 14,\n /**\n * This sets the font family of Container shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n containerFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Container shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n containerFontWeight: \"normal\",\n /**\n * This sets the font size of External Container shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_containerFontSize: 14,\n /**\n * This sets the font family of External Container shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_containerFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Container shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_containerFontWeight: \"normal\",\n /**\n * This sets the font size of Container DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n container_dbFontSize: 14,\n /**\n * This sets the font family of Container DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n container_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Container DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n container_dbFontWeight: \"normal\",\n /**\n * This sets the font size of External Container DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_container_dbFontSize: 14,\n /**\n * This sets the font family of External Container DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_container_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Container DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_container_dbFontWeight: \"normal\",\n /**\n * This sets the font size of Container Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n container_queueFontSize: 14,\n /**\n * This sets the font family of Container Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n container_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Container Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n container_queueFontWeight: \"normal\",\n /**\n * This sets the font size of External Container Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_container_queueFontSize: 14,\n /**\n * This sets the font family of External Container Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_container_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Container Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_container_queueFontWeight: \"normal\",\n /**\n * This sets the font size of Component shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n componentFontSize: 14,\n /**\n * This sets the font family of Component shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n componentFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Component shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n componentFontWeight: \"normal\",\n /**\n * This sets the font size of External Component shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_componentFontSize: 14,\n /**\n * This sets the font family of External Component shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_componentFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Component shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_componentFontWeight: \"normal\",\n /**\n * This sets the font size of Component DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n component_dbFontSize: 14,\n /**\n * This sets the font family of Component DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n component_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Component DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n component_dbFontWeight: \"normal\",\n /**\n * This sets the font size of External Component DB shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_component_dbFontSize: 14,\n /**\n * This sets the font family of External Component DB shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_component_dbFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Component DB shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_component_dbFontWeight: \"normal\",\n /**\n * This sets the font size of Component Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n component_queueFontSize: 14,\n /**\n * This sets the font family of Component Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n component_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of Component Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n component_queueFontWeight: \"normal\",\n /**\n * This sets the font size of External Component Queue shape for the diagram\n *\n * **Notes:** Default value: 14.\n */\n external_component_queueFontSize: 14,\n /**\n * This sets the font family of External Component Queue shape for the diagram\n *\n * **Notes:** Default value: \"Open Sans\", sans-serif.\n */\n external_component_queueFontFamily: '\"Open Sans\", sans-serif',\n /**\n * This sets the font weight of External Component Queue shape for the diagram\n *\n * **Notes:** Default value: normal.\n */\n external_component_queueFontWeight: \"normal\",\n /**\n * This sets the auto-wrap state for the diagram\n *\n * **Notes:** Default value: true.\n */\n wrap: true,\n /**\n * This sets the auto-wrap padding for the diagram (sides only)\n *\n * **Notes:** Default value: 0.\n */\n wrapPadding: 10,\n personFont: function() {\n return {\n fontFamily: this.personFontFamily,\n fontSize: this.personFontSize,\n fontWeight: this.personFontWeight\n };\n },\n external_personFont: function() {\n return {\n fontFamily: this.external_personFontFamily,\n fontSize: this.external_personFontSize,\n fontWeight: this.external_personFontWeight\n };\n },\n systemFont: function() {\n return {\n fontFamily: this.systemFontFamily,\n fontSize: this.systemFontSize,\n fontWeight: this.systemFontWeight\n };\n },\n external_systemFont: function() {\n return {\n fontFamily: this.external_systemFontFamily,\n fontSize: this.external_systemFontSize,\n fontWeight: this.external_systemFontWeight\n };\n },\n system_dbFont: function() {\n return {\n fontFamily: this.system_dbFontFamily,\n fontSize: this.system_dbFontSize,\n fontWeight: this.system_dbFontWeight\n };\n },\n external_system_dbFont: function() {\n return {\n fontFamily: this.external_system_dbFontFamily,\n fontSize: this.external_system_dbFontSize,\n fontWeight: this.external_system_dbFontWeight\n };\n },\n system_queueFont: function() {\n return {\n fontFamily: this.system_queueFontFamily,\n fontSize: this.system_queueFontSize,\n fontWeight: this.system_queueFontWeight\n };\n },\n external_system_queueFont: function() {\n return {\n fontFamily: this.external_system_queueFontFamily,\n fontSize: this.external_system_queueFontSize,\n fontWeight: this.external_system_queueFontWeight\n };\n },\n containerFont: function() {\n return {\n fontFamily: this.containerFontFamily,\n fontSize: this.containerFontSize,\n fontWeight: this.containerFontWeight\n };\n },\n external_containerFont: function() {\n return {\n fontFamily: this.external_containerFontFamily,\n fontSize: this.external_containerFontSize,\n fontWeight: this.external_containerFontWeight\n };\n },\n container_dbFont: function() {\n return {\n fontFamily: this.container_dbFontFamily,\n fontSize: this.container_dbFontSize,\n fontWeight: this.container_dbFontWeight\n };\n },\n external_container_dbFont: function() {\n return {\n fontFamily: this.external_container_dbFontFamily,\n fontSize: this.external_container_dbFontSize,\n fontWeight: this.external_container_dbFontWeight\n };\n },\n container_queueFont: function() {\n return {\n fontFamily: this.container_queueFontFamily,\n fontSize: this.container_queueFontSize,\n fontWeight: this.container_queueFontWeight\n };\n },\n external_container_queueFont: function() {\n return {\n fontFamily: this.external_container_queueFontFamily,\n fontSize: this.external_container_queueFontSize,\n fontWeight: this.external_container_queueFontWeight\n };\n },\n componentFont: function() {\n return {\n fontFamily: this.componentFontFamily,\n fontSize: this.componentFontSize,\n fontWeight: this.componentFontWeight\n };\n },\n external_componentFont: function() {\n return {\n fontFamily: this.external_componentFontFamily,\n fontSize: this.external_componentFontSize,\n fontWeight: this.external_componentFontWeight\n };\n },\n component_dbFont: function() {\n return {\n fontFamily: this.component_dbFontFamily,\n fontSize: this.component_dbFontSize,\n fontWeight: this.component_dbFontWeight\n };\n },\n external_component_dbFont: function() {\n return {\n fontFamily: this.external_component_dbFontFamily,\n fontSize: this.external_component_dbFontSize,\n fontWeight: this.external_component_dbFontWeight\n };\n },\n component_queueFont: function() {\n return {\n fontFamily: this.component_queueFontFamily,\n fontSize: this.component_queueFontSize,\n fontWeight: this.component_queueFontWeight\n };\n },\n external_component_queueFont: function() {\n return {\n fontFamily: this.external_component_queueFontFamily,\n fontSize: this.external_component_queueFontSize,\n fontWeight: this.external_component_queueFontWeight\n };\n },\n boundaryFont: function() {\n return {\n fontFamily: this.boundaryFontFamily,\n fontSize: this.boundaryFontSize,\n fontWeight: this.boundaryFontWeight\n };\n },\n messageFont: function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n },\n // ' Colors\n // ' ##################################\n person_bg_color: \"#08427B\",\n person_border_color: \"#073B6F\",\n external_person_bg_color: \"#686868\",\n external_person_border_color: \"#8A8A8A\",\n system_bg_color: \"#1168BD\",\n system_border_color: \"#3C7FC0\",\n system_db_bg_color: \"#1168BD\",\n system_db_border_color: \"#3C7FC0\",\n system_queue_bg_color: \"#1168BD\",\n system_queue_border_color: \"#3C7FC0\",\n external_system_bg_color: \"#999999\",\n external_system_border_color: \"#8A8A8A\",\n external_system_db_bg_color: \"#999999\",\n external_system_db_border_color: \"#8A8A8A\",\n external_system_queue_bg_color: \"#999999\",\n external_system_queue_border_color: \"#8A8A8A\",\n container_bg_color: \"#438DD5\",\n container_border_color: \"#3C7FC0\",\n container_db_bg_color: \"#438DD5\",\n container_db_border_color: \"#3C7FC0\",\n container_queue_bg_color: \"#438DD5\",\n container_queue_border_color: \"#3C7FC0\",\n external_container_bg_color: \"#B3B3B3\",\n external_container_border_color: \"#A6A6A6\",\n external_container_db_bg_color: \"#B3B3B3\",\n external_container_db_border_color: \"#A6A6A6\",\n external_container_queue_bg_color: \"#B3B3B3\",\n external_container_queue_border_color: \"#A6A6A6\",\n component_bg_color: \"#85BBF0\",\n component_border_color: \"#78A8D8\",\n component_db_bg_color: \"#85BBF0\",\n component_db_border_color: \"#78A8D8\",\n component_queue_bg_color: \"#85BBF0\",\n component_queue_border_color: \"#78A8D8\",\n external_component_bg_color: \"#CCCCCC\",\n external_component_border_color: \"#BFBFBF\",\n external_component_db_bg_color: \"#CCCCCC\",\n external_component_db_border_color: \"#BFBFBF\",\n external_component_queue_bg_color: \"#CCCCCC\",\n external_component_queue_border_color: \"#BFBFBF\"\n },\n mindmap: {\n useMaxWidth: true,\n padding: 10,\n maxNodeWidth: 200\n },\n fontSize: 16\n};\nif (config.class) {\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute;\n}\nif (config.gitGraph) {\n config.gitGraph.arrowMarkerAbsolute = config.arrowMarkerAbsolute;\n}\nconst keyify = (obj, prefix = \"\") => Object.keys(obj).reduce((res, el) => {\n if (Array.isArray(obj[el])) {\n return res;\n } else if (typeof obj[el] === \"object\" && obj[el] !== null) {\n return [...res, prefix + el, ...keyify(obj[el], \"\")];\n }\n return [...res, prefix + el];\n}, []);\nconst configKeys = keyify(config, \"\");\nconst defaultConfig$1 = config;\n/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return typeof subject === \"undefined\" || subject === null;\n}\nfunction isObject(subject) {\n return typeof subject === \"object\" && subject !== null;\n}\nfunction toArray(sequence2) {\n if (Array.isArray(sequence2))\n return sequence2;\n else if (isNothing(sequence2))\n return [];\n return [sequence2];\n}\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n if (source) {\n sourceKeys = Object.keys(source);\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction repeat(string, count) {\n var result = \"\", cycle;\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n return result;\n}\nfunction isNegativeZero(number) {\n return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\nvar common = {\n isNothing: isNothing_1,\n isObject: isObject_1,\n toArray: toArray_1,\n repeat: repeat_1,\n isNegativeZero: isNegativeZero_1,\n extend: extend_1\n};\nfunction formatError(exception2, compact) {\n var where = \"\", message = exception2.reason || \"(unknown reason)\";\n if (!exception2.mark)\n return message;\n if (exception2.mark.name) {\n where += 'in \"' + exception2.mark.name + '\" ';\n }\n where += \"(\" + (exception2.mark.line + 1) + \":\" + (exception2.mark.column + 1) + \")\";\n if (!compact && exception2.mark.snippet) {\n where += \"\\n\\n\" + exception2.mark.snippet;\n }\n return message + \" \" + where;\n}\nfunction YAMLException$1(reason, mark) {\n Error.call(this);\n this.name = \"YAMLException\";\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack || \"\";\n }\n}\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + \": \" + formatError(this, compact);\n};\nvar exception = YAMLException$1;\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = \"\";\n var tail = \"\";\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n if (position - lineStart > maxHalfLength) {\n head = \" ... \";\n lineStart = position - maxHalfLength + head.length;\n }\n if (lineEnd - position > maxHalfLength) {\n tail = \" ...\";\n lineEnd = position + maxHalfLength - tail.length;\n }\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"→\") + tail,\n pos: position - lineStart + head.length\n // relative position\n };\n}\nfunction padStart(string, max) {\n return common.repeat(\" \", max - string.length) + string;\n}\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n if (!mark.buffer)\n return null;\n if (!options.maxLength)\n options.maxLength = 79;\n if (typeof options.indent !== \"number\")\n options.indent = 1;\n if (typeof options.linesBefore !== \"number\")\n options.linesBefore = 3;\n if (typeof options.linesAfter !== \"number\")\n options.linesAfter = 2;\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [0];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n while (match = re.exec(mark.buffer)) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n if (foundLineNo < 0)\n foundLineNo = lineStarts.length - 1;\n var result = \"\", i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0)\n break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n }\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\\n\";\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length)\n break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n }\n return result.replace(/\\n$/, \"\");\n}\nvar snippet = makeSnippet;\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n \"kind\",\n \"multi\",\n \"resolve\",\n \"construct\",\n \"instanceOf\",\n \"predicate\",\n \"represent\",\n \"representName\",\n \"defaultStyle\",\n \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n \"scalar\",\n \"sequence\",\n \"mapping\"\n];\nfunction compileStyleAliases(map2) {\n var result = {};\n if (map2 !== null) {\n Object.keys(map2).forEach(function(style) {\n map2[style].forEach(function(alias) {\n result[String(alias)] = style;\n });\n });\n }\n return result;\n}\nfunction Type$1(tag, options) {\n options = options || {};\n Object.keys(options).forEach(function(name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n this.options = options;\n this.tag = tag;\n this.kind = options[\"kind\"] || null;\n this.resolve = options[\"resolve\"] || function() {\n return true;\n };\n this.construct = options[\"construct\"] || function(data) {\n return data;\n };\n this.instanceOf = options[\"instanceOf\"] || null;\n this.predicate = options[\"predicate\"] || null;\n this.represent = options[\"represent\"] || null;\n this.representName = options[\"representName\"] || null;\n this.defaultStyle = options[\"defaultStyle\"] || null;\n this.multi = options[\"multi\"] || false;\n this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\nvar type = Type$1;\nfunction compileList(schema2, name) {\n var result = [];\n schema2[name].forEach(function(currentType) {\n var newIndex = result.length;\n result.forEach(function(previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n newIndex = previousIndex;\n }\n });\n result[newIndex] = currentType;\n });\n return result;\n}\nfunction compileMap() {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n function collectType(type2) {\n if (type2.multi) {\n result.multi[type2.kind].push(type2);\n result.multi[\"fallback\"].push(type2);\n } else {\n result[type2.kind][type2.tag] = result[\"fallback\"][type2.tag] = type2;\n }\n }\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\nSchema$1.prototype.extend = function extend2(definition) {\n var implicit = [];\n var explicit = [];\n if (definition instanceof type) {\n explicit.push(definition);\n } else if (Array.isArray(definition)) {\n explicit = explicit.concat(definition);\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n if (definition.implicit)\n implicit = implicit.concat(definition.implicit);\n if (definition.explicit)\n explicit = explicit.concat(definition.explicit);\n } else {\n throw new exception(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");\n }\n implicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n if (type$1.loadKind && type$1.loadKind !== \"scalar\") {\n throw new exception(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n }\n if (type$1.multi) {\n throw new exception(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n }\n });\n explicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n });\n var result = Object.create(Schema$1.prototype);\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n result.compiledImplicit = compileList(result, \"implicit\");\n result.compiledExplicit = compileList(result, \"explicit\");\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n return result;\n};\nvar schema = Schema$1;\nvar str = new type(\"tag:yaml.org,2002:str\", {\n kind: \"scalar\",\n construct: function(data) {\n return data !== null ? data : \"\";\n }\n});\nvar seq = new type(\"tag:yaml.org,2002:seq\", {\n kind: \"sequence\",\n construct: function(data) {\n return data !== null ? data : [];\n }\n});\nvar map = new type(\"tag:yaml.org,2002:map\", {\n kind: \"mapping\",\n construct: function(data) {\n return data !== null ? data : {};\n }\n});\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\nfunction resolveYamlNull(data) {\n if (data === null)\n return true;\n var max = data.length;\n return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\nfunction constructYamlNull() {\n return null;\n}\nfunction isNull(object) {\n return object === null;\n}\nvar _null = new type(\"tag:yaml.org,2002:null\", {\n kind: \"scalar\",\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function() {\n return \"~\";\n },\n lowercase: function() {\n return \"null\";\n },\n uppercase: function() {\n return \"NULL\";\n },\n camelcase: function() {\n return \"Null\";\n },\n empty: function() {\n return \"\";\n }\n },\n defaultStyle: \"lowercase\"\n});\nfunction resolveYamlBoolean(data) {\n if (data === null)\n return false;\n var max = data.length;\n return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\nfunction constructYamlBoolean(data) {\n return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\nvar bool = new type(\"tag:yaml.org,2002:bool\", {\n kind: \"scalar\",\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function(object) {\n return object ? \"true\" : \"false\";\n },\n uppercase: function(object) {\n return object ? \"TRUE\" : \"FALSE\";\n },\n camelcase: function(object) {\n return object ? \"True\" : \"False\";\n }\n },\n defaultStyle: \"lowercase\"\n});\nfunction isHexCode(c) {\n return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;\n}\nfunction isOctCode(c) {\n return 48 <= c && c <= 55;\n}\nfunction isDecCode(c) {\n return 48 <= c && c <= 57;\n}\nfunction resolveYamlInteger(data) {\n if (data === null)\n return false;\n var max = data.length, index = 0, hasDigits = false, ch;\n if (!max)\n return false;\n ch = data[index];\n if (ch === \"-\" || ch === \"+\") {\n ch = data[++index];\n }\n if (ch === \"0\") {\n if (index + 1 === max)\n return true;\n ch = data[++index];\n if (ch === \"b\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (ch !== \"0\" && ch !== \"1\")\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"x\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isHexCode(data.charCodeAt(index)))\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"o\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isOctCode(data.charCodeAt(index)))\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n }\n if (ch === \"_\")\n return false;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n if (!hasDigits || ch === \"_\")\n return false;\n return true;\n}\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n if (value.indexOf(\"_\") !== -1) {\n value = value.replace(/_/g, \"\");\n }\n ch = value[0];\n if (ch === \"-\" || ch === \"+\") {\n if (ch === \"-\")\n sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n if (value === \"0\")\n return 0;\n if (ch === \"0\") {\n if (value[1] === \"b\")\n return sign * parseInt(value.slice(2), 2);\n if (value[1] === \"x\")\n return sign * parseInt(value.slice(2), 16);\n if (value[1] === \"o\")\n return sign * parseInt(value.slice(2), 8);\n }\n return sign * parseInt(value, 10);\n}\nfunction isInteger(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 === 0 && !common.isNegativeZero(object));\n}\nvar int = new type(\"tag:yaml.org,2002:int\", {\n kind: \"scalar\",\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function(obj) {\n return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n },\n octal: function(obj) {\n return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n },\n decimal: function(obj) {\n return obj.toString(10);\n },\n /* eslint-disable max-len */\n hexadecimal: function(obj) {\n return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n }\n },\n defaultStyle: \"decimal\",\n styleAliases: {\n binary: [2, \"bin\"],\n octal: [8, \"oct\"],\n decimal: [10, \"dec\"],\n hexadecimal: [16, \"hex\"]\n }\n});\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n \"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\"\n);\nfunction resolveYamlFloat(data) {\n if (data === null)\n return false;\n if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === \"_\") {\n return false;\n }\n return true;\n}\nfunction constructYamlFloat(data) {\n var value, sign;\n value = data.replace(/_/g, \"\").toLowerCase();\n sign = value[0] === \"-\" ? -1 : 1;\n if (\"+-\".indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n if (value === \".inf\") {\n return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n } else if (value === \".nan\") {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n var res;\n if (isNaN(object)) {\n switch (style) {\n case \"lowercase\":\n return \".nan\";\n case \"uppercase\":\n return \".NAN\";\n case \"camelcase\":\n return \".NaN\";\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \".inf\";\n case \"uppercase\":\n return \".INF\";\n case \"camelcase\":\n return \".Inf\";\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \"-.inf\";\n case \"uppercase\":\n return \"-.INF\";\n case \"camelcase\":\n return \"-.Inf\";\n }\n } else if (common.isNegativeZero(object)) {\n return \"-0.0\";\n }\n res = object.toString(10);\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\nfunction isFloat(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\nvar float = new type(\"tag:yaml.org,2002:float\", {\n kind: \"scalar\",\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: \"lowercase\"\n});\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\nvar core = json;\nvar YAML_DATE_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"\n);\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\"\n);\nfunction resolveYamlTimestamp(data) {\n if (data === null)\n return false;\n if (YAML_DATE_REGEXP.exec(data) !== null)\n return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null)\n return true;\n return false;\n}\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null)\n match = YAML_TIMESTAMP_REGEXP.exec(data);\n if (match === null)\n throw new Error(\"Date resolve error\");\n year = +match[1];\n month = +match[2] - 1;\n day = +match[3];\n if (!match[4]) {\n return new Date(Date.UTC(year, month, day));\n }\n hour = +match[4];\n minute = +match[5];\n second = +match[6];\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) {\n fraction += \"0\";\n }\n fraction = +fraction;\n }\n if (match[9]) {\n tz_hour = +match[10];\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 6e4;\n if (match[9] === \"-\")\n delta = -delta;\n }\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n if (delta)\n date.setTime(date.getTime() - delta);\n return date;\n}\nfunction representYamlTimestamp(object) {\n return object.toISOString();\n}\nvar timestamp = new type(\"tag:yaml.org,2002:timestamp\", {\n kind: \"scalar\",\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\nfunction resolveYamlMerge(data) {\n return data === \"<<\" || data === null;\n}\nvar merge = new type(\"tag:yaml.org,2002:merge\", {\n kind: \"scalar\",\n resolve: resolveYamlMerge\n});\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n if (data === null)\n return false;\n var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n code = map2.indexOf(data.charAt(idx));\n if (code > 64)\n continue;\n if (code < 0)\n return false;\n bitlen += 6;\n }\n return bitlen % 8 === 0;\n}\nfunction constructYamlBinary(data) {\n var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];\n for (idx = 0; idx < max; idx++) {\n if (idx % 4 === 0 && idx) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n }\n bits = bits << 6 | map2.indexOf(input.charAt(idx));\n }\n tailbits = max % 4 * 6;\n if (tailbits === 0) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n } else if (tailbits === 18) {\n result.push(bits >> 10 & 255);\n result.push(bits >> 2 & 255);\n } else if (tailbits === 12) {\n result.push(bits >> 4 & 255);\n }\n return new Uint8Array(result);\n}\nfunction representYamlBinary(object) {\n var result = \"\", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n if (idx % 3 === 0 && idx) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n }\n bits = (bits << 8) + object[idx];\n }\n tail = max % 3;\n if (tail === 0) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n } else if (tail === 2) {\n result += map2[bits >> 10 & 63];\n result += map2[bits >> 4 & 63];\n result += map2[bits << 2 & 63];\n result += map2[64];\n } else if (tail === 1) {\n result += map2[bits >> 2 & 63];\n result += map2[bits << 4 & 63];\n result += map2[64];\n result += map2[64];\n }\n return result;\n}\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\nvar binary = new type(\"tag:yaml.org,2002:binary\", {\n kind: \"scalar\",\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n if (data === null)\n return true;\n var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n if (_toString$2.call(pair) !== \"[object Object]\")\n return false;\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey)\n pairHasKey = true;\n else\n return false;\n }\n }\n if (!pairHasKey)\n return false;\n if (objectKeys.indexOf(pairKey) === -1)\n objectKeys.push(pairKey);\n else\n return false;\n }\n return true;\n}\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\nvar omap = new type(\"tag:yaml.org,2002:omap\", {\n kind: \"sequence\",\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\nvar _toString$1 = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n if (data === null)\n return true;\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n if (_toString$1.call(pair) !== \"[object Object]\")\n return false;\n keys = Object.keys(pair);\n if (keys.length !== 1)\n return false;\n result[index] = [keys[0], pair[keys[0]]];\n }\n return true;\n}\nfunction constructYamlPairs(data) {\n if (data === null)\n return [];\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n keys = Object.keys(pair);\n result[index] = [keys[0], pair[keys[0]]];\n }\n return result;\n}\nvar pairs = new type(\"tag:yaml.org,2002:pairs\", {\n kind: \"sequence\",\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n if (data === null)\n return true;\n var key, object = data;\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null)\n return false;\n }\n }\n return true;\n}\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\nvar set = new type(\"tag:yaml.org,2002:set\", {\n kind: \"mapping\",\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction is_EOL(c) {\n return c === 10 || c === 13;\n}\nfunction is_WHITE_SPACE(c) {\n return c === 9 || c === 32;\n}\nfunction is_WS_OR_EOL(c) {\n return c === 9 || c === 32 || c === 10 || c === 13;\n}\nfunction is_FLOW_INDICATOR(c) {\n return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;\n}\nfunction fromHexCode(c) {\n var lc;\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n lc = c | 32;\n if (97 <= lc && lc <= 102) {\n return lc - 97 + 10;\n }\n return -1;\n}\nfunction escapedHexLen(c) {\n if (c === 120) {\n return 2;\n }\n if (c === 117) {\n return 4;\n }\n if (c === 85) {\n return 8;\n }\n return 0;\n}\nfunction fromDecimalCode(c) {\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n return -1;\n}\nfunction simpleEscapeSequence(c) {\n return c === 48 ? \"\\0\" : c === 97 ? \"\\x07\" : c === 98 ? \"\\b\" : c === 116 ? \"\t\" : c === 9 ? \"\t\" : c === 110 ? \"\\n\" : c === 118 ? \"\\v\" : c === 102 ? \"\\f\" : c === 114 ? \"\\r\" : c === 101 ? \"\\x1B\" : c === 32 ? \" \" : c === 34 ? '\"' : c === 47 ? \"/\" : c === 92 ? \"\\\\\" : c === 78 ? \"…\" : c === 95 ? \" \" : c === 76 ? \"\\u2028\" : c === 80 ? \"\\u2029\" : \"\";\n}\nfunction charFromCodepoint(c) {\n if (c <= 65535) {\n return String.fromCharCode(c);\n }\n return String.fromCharCode(\n (c - 65536 >> 10) + 55296,\n (c - 65536 & 1023) + 56320\n );\n}\nvar simpleEscapeCheck = new Array(256);\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nfunction State$1(input, options) {\n this.input = input;\n this.filename = options[\"filename\"] || null;\n this.schema = options[\"schema\"] || _default;\n this.onWarning = options[\"onWarning\"] || null;\n this.legacy = options[\"legacy\"] || false;\n this.json = options[\"json\"] || false;\n this.listener = options[\"listener\"] || null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n this.firstTabInLine = -1;\n this.documents = [];\n}\nfunction generateError(state2, message) {\n var mark = {\n name: state2.filename,\n buffer: state2.input.slice(0, -1),\n // omit trailing \\0\n position: state2.position,\n line: state2.line,\n column: state2.position - state2.lineStart\n };\n mark.snippet = snippet(mark);\n return new exception(message, mark);\n}\nfunction throwError(state2, message) {\n throw generateError(state2, message);\n}\nfunction throwWarning(state2, message) {\n if (state2.onWarning) {\n state2.onWarning.call(null, generateError(state2, message));\n }\n}\nvar directiveHandlers = {\n YAML: function handleYamlDirective(state2, name, args) {\n var match, major, minor;\n if (state2.version !== null) {\n throwError(state2, \"duplication of %YAML directive\");\n }\n if (args.length !== 1) {\n throwError(state2, \"YAML directive accepts exactly one argument\");\n }\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n if (match === null) {\n throwError(state2, \"ill-formed argument of the YAML directive\");\n }\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n if (major !== 1) {\n throwError(state2, \"unacceptable YAML version of the document\");\n }\n state2.version = args[0];\n state2.checkLineBreaks = minor < 2;\n if (minor !== 1 && minor !== 2) {\n throwWarning(state2, \"unsupported YAML version of the document\");\n }\n },\n TAG: function handleTagDirective(state2, name, args) {\n var handle, prefix;\n if (args.length !== 2) {\n throwError(state2, \"TAG directive accepts exactly two arguments\");\n }\n handle = args[0];\n prefix = args[1];\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state2, \"ill-formed tag handle (first argument) of the TAG directive\");\n }\n if (_hasOwnProperty$1.call(state2.tagMap, handle)) {\n throwError(state2, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state2, \"ill-formed tag prefix (second argument) of the TAG directive\");\n }\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state2, \"tag prefix is malformed: \" + prefix);\n }\n state2.tagMap[handle] = prefix;\n }\n};\nfunction captureSegment(state2, start, end, checkJson) {\n var _position, _length, _character, _result;\n if (start < end) {\n _result = state2.input.slice(start, end);\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {\n throwError(state2, \"expected valid JSON character\");\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state2, \"the stream contains non-printable characters\");\n }\n state2.result += _result;\n }\n}\nfunction mergeMappings(state2, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n if (!common.isObject(source)) {\n throwError(state2, \"cannot merge mappings; the provided source object is unacceptable\");\n }\n sourceKeys = Object.keys(source);\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\nfunction storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n var index, quantity;\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state2, \"nested arrays are not supported inside keys\");\n }\n if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n keyNode[index] = \"[object Object]\";\n }\n }\n }\n if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n keyNode = \"[object Object]\";\n }\n keyNode = String(keyNode);\n if (_result === null) {\n _result = {};\n }\n if (keyTag === \"tag:yaml.org,2002:merge\") {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state2, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state2, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state2.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {\n state2.line = startLine || state2.line;\n state2.lineStart = startLineStart || state2.lineStart;\n state2.position = startPos || state2.position;\n throwError(state2, \"duplicated mapping key\");\n }\n if (keyNode === \"__proto__\") {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n return _result;\n}\nfunction readLineBreak(state2) {\n var ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 10) {\n state2.position++;\n } else if (ch === 13) {\n state2.position++;\n if (state2.input.charCodeAt(state2.position) === 10) {\n state2.position++;\n }\n } else {\n throwError(state2, \"a line break is expected\");\n }\n state2.line += 1;\n state2.lineStart = state2.position;\n state2.firstTabInLine = -1;\n}\nfunction skipSeparationSpace(state2, allowComments, checkIndent) {\n var lineBreaks = 0, ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 9 && state2.firstTabInLine === -1) {\n state2.firstTabInLine = state2.position;\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (allowComments && ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 10 && ch !== 13 && ch !== 0);\n }\n if (is_EOL(ch)) {\n readLineBreak(state2);\n ch = state2.input.charCodeAt(state2.position);\n lineBreaks++;\n state2.lineIndent = 0;\n while (ch === 32) {\n state2.lineIndent++;\n ch = state2.input.charCodeAt(++state2.position);\n }\n } else {\n break;\n }\n }\n if (checkIndent !== -1 && lineBreaks !== 0 && state2.lineIndent < checkIndent) {\n throwWarning(state2, \"deficient indentation\");\n }\n return lineBreaks;\n}\nfunction testDocumentSeparator(state2) {\n var _position = state2.position, ch;\n ch = state2.input.charCodeAt(_position);\n if ((ch === 45 || ch === 46) && ch === state2.input.charCodeAt(_position + 1) && ch === state2.input.charCodeAt(_position + 2)) {\n _position += 3;\n ch = state2.input.charCodeAt(_position);\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n return false;\n}\nfunction writeFoldedLines(state2, count) {\n if (count === 1) {\n state2.result += \" \";\n } else if (count > 1) {\n state2.result += common.repeat(\"\\n\", count - 1);\n }\n}\nfunction readPlainScalar(state2, nodeIndent, withinFlowCollection) {\n var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state2.kind, _result = state2.result, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {\n return false;\n }\n if (ch === 63 || ch === 45) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n captureStart = captureEnd = state2.position;\n hasPendingContent = false;\n while (ch !== 0) {\n if (ch === 58) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n } else if (ch === 35) {\n preceding = state2.input.charCodeAt(state2.position - 1);\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n } else if (is_EOL(ch)) {\n _line = state2.line;\n _lineStart = state2.lineStart;\n _lineIndent = state2.lineIndent;\n skipSeparationSpace(state2, false, -1);\n if (state2.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state2.input.charCodeAt(state2.position);\n continue;\n } else {\n state2.position = captureEnd;\n state2.line = _line;\n state2.lineStart = _lineStart;\n state2.lineIndent = _lineIndent;\n break;\n }\n }\n if (hasPendingContent) {\n captureSegment(state2, captureStart, captureEnd, false);\n writeFoldedLines(state2, state2.line - _line);\n captureStart = captureEnd = state2.position;\n hasPendingContent = false;\n }\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state2.position + 1;\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n captureSegment(state2, captureStart, captureEnd, false);\n if (state2.result) {\n return true;\n }\n state2.kind = _kind;\n state2.result = _result;\n return false;\n}\nfunction readSingleQuotedScalar(state2, nodeIndent) {\n var ch, captureStart, captureEnd;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 39) {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n state2.position++;\n captureStart = captureEnd = state2.position;\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n if (ch === 39) {\n captureSegment(state2, captureStart, state2.position, true);\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 39) {\n captureStart = state2.position;\n state2.position++;\n captureEnd = state2.position;\n } else {\n return true;\n }\n } else if (is_EOL(ch)) {\n captureSegment(state2, captureStart, captureEnd, true);\n writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent));\n captureStart = captureEnd = state2.position;\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n throwError(state2, \"unexpected end of the document within a single quoted scalar\");\n } else {\n state2.position++;\n captureEnd = state2.position;\n }\n }\n throwError(state2, \"unexpected end of the stream within a single quoted scalar\");\n}\nfunction readDoubleQuotedScalar(state2, nodeIndent) {\n var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 34) {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n state2.position++;\n captureStart = captureEnd = state2.position;\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n if (ch === 34) {\n captureSegment(state2, captureStart, state2.position, true);\n state2.position++;\n return true;\n } else if (ch === 92) {\n captureSegment(state2, captureStart, state2.position, true);\n ch = state2.input.charCodeAt(++state2.position);\n if (is_EOL(ch)) {\n skipSeparationSpace(state2, false, nodeIndent);\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state2.result += simpleEscapeMap[ch];\n state2.position++;\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n for (; hexLength > 0; hexLength--) {\n ch = state2.input.charCodeAt(++state2.position);\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n } else {\n throwError(state2, \"expected hexadecimal character\");\n }\n }\n state2.result += charFromCodepoint(hexResult);\n state2.position++;\n } else {\n throwError(state2, \"unknown escape sequence\");\n }\n captureStart = captureEnd = state2.position;\n } else if (is_EOL(ch)) {\n captureSegment(state2, captureStart, captureEnd, true);\n writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent));\n captureStart = captureEnd = state2.position;\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n throwError(state2, \"unexpected end of the document within a double quoted scalar\");\n } else {\n state2.position++;\n captureEnd = state2.position;\n }\n }\n throwError(state2, \"unexpected end of the stream within a double quoted scalar\");\n}\nfunction readFlowCollection(state2, nodeIndent) {\n var readNext = true, _line, _lineStart, _pos, _tag = state2.tag, _result, _anchor = state2.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 91) {\n terminator = 93;\n isMapping = false;\n _result = [];\n } else if (ch === 123) {\n terminator = 125;\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(++state2.position);\n while (ch !== 0) {\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if (ch === terminator) {\n state2.position++;\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = isMapping ? \"mapping\" : \"sequence\";\n state2.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state2, \"missed comma between flow collection entries\");\n } else if (ch === 44) {\n throwError(state2, \"expected the node content, but found ','\");\n }\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n if (ch === 63) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state2.position++;\n skipSeparationSpace(state2, true, nodeIndent);\n }\n }\n _line = state2.line;\n _lineStart = state2.lineStart;\n _pos = state2.position;\n composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state2.tag;\n keyNode = state2.result;\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if ((isExplicitPair || state2.line === _line) && ch === 58) {\n isPair = true;\n ch = state2.input.charCodeAt(++state2.position);\n skipSeparationSpace(state2, true, nodeIndent);\n composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state2.result;\n }\n if (isMapping) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state2, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 44) {\n readNext = true;\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n readNext = false;\n }\n }\n throwError(state2, \"unexpected end of the stream within a flow collection\");\n}\nfunction readBlockScalar(state2, nodeIndent) {\n var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 124) {\n folding = false;\n } else if (ch === 62) {\n folding = true;\n } else {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n while (ch !== 0) {\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 43 || ch === 45) {\n if (CHOMPING_CLIP === chomping) {\n chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state2, \"repeat of a chomping mode identifier\");\n }\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state2, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state2, \"repeat of an indentation width identifier\");\n }\n } else {\n break;\n }\n }\n if (is_WHITE_SPACE(ch)) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (is_WHITE_SPACE(ch));\n if (ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (!is_EOL(ch) && ch !== 0);\n }\n }\n while (ch !== 0) {\n readLineBreak(state2);\n state2.lineIndent = 0;\n ch = state2.input.charCodeAt(state2.position);\n while ((!detectedIndent || state2.lineIndent < textIndent) && ch === 32) {\n state2.lineIndent++;\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (!detectedIndent && state2.lineIndent > textIndent) {\n textIndent = state2.lineIndent;\n }\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n if (state2.lineIndent < textIndent) {\n if (chomping === CHOMPING_KEEP) {\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) {\n state2.result += \"\\n\";\n }\n }\n break;\n }\n if (folding) {\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state2.result += common.repeat(\"\\n\", emptyLines + 1);\n } else if (emptyLines === 0) {\n if (didReadContent) {\n state2.result += \" \";\n }\n } else {\n state2.result += common.repeat(\"\\n\", emptyLines);\n }\n } else {\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n }\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state2.position;\n while (!is_EOL(ch) && ch !== 0) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n captureSegment(state2, captureStart, state2.position, false);\n }\n return true;\n}\nfunction readBlockSequence(state2, nodeIndent) {\n var _line, _tag = state2.tag, _anchor = state2.anchor, _result = [], following, detected = false, ch;\n if (state2.firstTabInLine !== -1)\n return false;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n if (state2.firstTabInLine !== -1) {\n state2.position = state2.firstTabInLine;\n throwError(state2, \"tab characters must not be used in indentation\");\n }\n if (ch !== 45) {\n break;\n }\n following = state2.input.charCodeAt(state2.position + 1);\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n detected = true;\n state2.position++;\n if (skipSeparationSpace(state2, true, -1)) {\n if (state2.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state2.input.charCodeAt(state2.position);\n continue;\n }\n }\n _line = state2.line;\n composeNode(state2, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state2.result);\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state2, \"bad indentation of a sequence entry\");\n } else if (state2.lineIndent < nodeIndent) {\n break;\n }\n }\n if (detected) {\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = \"sequence\";\n state2.result = _result;\n return true;\n }\n return false;\n}\nfunction readBlockMapping(state2, nodeIndent, flowIndent) {\n var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state2.tag, _anchor = state2.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n if (state2.firstTabInLine !== -1)\n return false;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n if (!atExplicitKey && state2.firstTabInLine !== -1) {\n state2.position = state2.firstTabInLine;\n throwError(state2, \"tab characters must not be used in indentation\");\n }\n following = state2.input.charCodeAt(state2.position + 1);\n _line = state2.line;\n if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {\n if (ch === 63) {\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n } else if (atExplicitKey) {\n atExplicitKey = false;\n allowCompact = true;\n } else {\n throwError(state2, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n }\n state2.position += 1;\n ch = following;\n } else {\n _keyLine = state2.line;\n _keyLineStart = state2.lineStart;\n _keyPos = state2.position;\n if (!composeNode(state2, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n break;\n }\n if (state2.line === _line) {\n ch = state2.input.charCodeAt(state2.position);\n while (is_WHITE_SPACE(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (ch === 58) {\n ch = state2.input.charCodeAt(++state2.position);\n if (!is_WS_OR_EOL(ch)) {\n throwError(state2, \"a whitespace character is expected after the key-value separator within a block mapping\");\n }\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state2.tag;\n keyNode = state2.result;\n } else if (detected) {\n throwError(state2, \"can not read an implicit mapping pair; a colon is missed\");\n } else {\n state2.tag = _tag;\n state2.anchor = _anchor;\n return true;\n }\n } else if (detected) {\n throwError(state2, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n } else {\n state2.tag = _tag;\n state2.anchor = _anchor;\n return true;\n }\n }\n if (state2.line === _line || state2.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state2.line;\n _keyLineStart = state2.lineStart;\n _keyPos = state2.position;\n }\n if (composeNode(state2, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state2.result;\n } else {\n valueNode = state2.result;\n }\n }\n if (!atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n }\n if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state2, \"bad indentation of a mapping entry\");\n } else if (state2.lineIndent < nodeIndent) {\n break;\n }\n }\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n if (detected) {\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = \"mapping\";\n state2.result = _result;\n }\n return detected;\n}\nfunction readTagProperty(state2) {\n var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 33)\n return false;\n if (state2.tag !== null) {\n throwError(state2, \"duplication of a tag property\");\n }\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 60) {\n isVerbatim = true;\n ch = state2.input.charCodeAt(++state2.position);\n } else if (ch === 33) {\n isNamed = true;\n tagHandle = \"!!\";\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n tagHandle = \"!\";\n }\n _position = state2.position;\n if (isVerbatim) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 0 && ch !== 62);\n if (state2.position < state2.length) {\n tagName = state2.input.slice(_position, state2.position);\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n throwError(state2, \"unexpected end of the stream within a verbatim tag\");\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n if (ch === 33) {\n if (!isNamed) {\n tagHandle = state2.input.slice(_position - 1, state2.position + 1);\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state2, \"named tag handle cannot contain such characters\");\n }\n isNamed = true;\n _position = state2.position + 1;\n } else {\n throwError(state2, \"tag suffix cannot contain exclamation marks\");\n }\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n tagName = state2.input.slice(_position, state2.position);\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state2, \"tag suffix cannot contain flow indicator characters\");\n }\n }\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state2, \"tag name cannot contain such characters: \" + tagName);\n }\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state2, \"tag name is malformed: \" + tagName);\n }\n if (isVerbatim) {\n state2.tag = tagName;\n } else if (_hasOwnProperty$1.call(state2.tagMap, tagHandle)) {\n state2.tag = state2.tagMap[tagHandle] + tagName;\n } else if (tagHandle === \"!\") {\n state2.tag = \"!\" + tagName;\n } else if (tagHandle === \"!!\") {\n state2.tag = \"tag:yaml.org,2002:\" + tagName;\n } else {\n throwError(state2, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n return true;\n}\nfunction readAnchorProperty(state2) {\n var _position, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 38)\n return false;\n if (state2.anchor !== null) {\n throwError(state2, \"duplication of an anchor property\");\n }\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (state2.position === _position) {\n throwError(state2, \"name of an anchor node must contain at least one character\");\n }\n state2.anchor = state2.input.slice(_position, state2.position);\n return true;\n}\nfunction readAlias(state2) {\n var _position, alias, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 42)\n return false;\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (state2.position === _position) {\n throwError(state2, \"name of an alias node must contain at least one character\");\n }\n alias = state2.input.slice(_position, state2.position);\n if (!_hasOwnProperty$1.call(state2.anchorMap, alias)) {\n throwError(state2, 'unidentified alias \"' + alias + '\"');\n }\n state2.result = state2.anchorMap[alias];\n skipSeparationSpace(state2, true, -1);\n return true;\n}\nfunction composeNode(state2, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;\n if (state2.listener !== null) {\n state2.listener(\"open\", state2);\n }\n state2.tag = null;\n state2.anchor = null;\n state2.kind = null;\n state2.result = null;\n allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n if (allowToSeek) {\n if (skipSeparationSpace(state2, true, -1)) {\n atNewLine = true;\n if (state2.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state2.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state2.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n if (indentStatus === 1) {\n while (readTagProperty(state2) || readAnchorProperty(state2)) {\n if (skipSeparationSpace(state2, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n if (state2.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state2.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state2.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n blockIndent = state2.position - state2.lineStart;\n if (indentStatus === 1) {\n if (allowBlockCollections && (readBlockSequence(state2, blockIndent) || readBlockMapping(state2, blockIndent, flowIndent)) || readFlowCollection(state2, flowIndent)) {\n hasContent = true;\n } else {\n if (allowBlockScalars && readBlockScalar(state2, flowIndent) || readSingleQuotedScalar(state2, flowIndent) || readDoubleQuotedScalar(state2, flowIndent)) {\n hasContent = true;\n } else if (readAlias(state2)) {\n hasContent = true;\n if (state2.tag !== null || state2.anchor !== null) {\n throwError(state2, \"alias node should not have any properties\");\n }\n } else if (readPlainScalar(state2, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n if (state2.tag === null) {\n state2.tag = \"?\";\n }\n }\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n }\n } else if (indentStatus === 0) {\n hasContent = allowBlockCollections && readBlockSequence(state2, blockIndent);\n }\n }\n if (state2.tag === null) {\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n } else if (state2.tag === \"?\") {\n if (state2.result !== null && state2.kind !== \"scalar\") {\n throwError(state2, 'unacceptable node kind for ! tag; it should be \"scalar\", not \"' + state2.kind + '\"');\n }\n for (typeIndex = 0, typeQuantity = state2.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type2 = state2.implicitTypes[typeIndex];\n if (type2.resolve(state2.result)) {\n state2.result = type2.construct(state2.result);\n state2.tag = type2.tag;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n break;\n }\n }\n } else if (state2.tag !== \"!\") {\n if (_hasOwnProperty$1.call(state2.typeMap[state2.kind || \"fallback\"], state2.tag)) {\n type2 = state2.typeMap[state2.kind || \"fallback\"][state2.tag];\n } else {\n type2 = null;\n typeList = state2.typeMap.multi[state2.kind || \"fallback\"];\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state2.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type2 = typeList[typeIndex];\n break;\n }\n }\n }\n if (!type2) {\n throwError(state2, \"unknown tag !<\" + state2.tag + \">\");\n }\n if (state2.result !== null && type2.kind !== state2.kind) {\n throwError(state2, \"unacceptable node kind for !<\" + state2.tag + '> tag; it should be \"' + type2.kind + '\", not \"' + state2.kind + '\"');\n }\n if (!type2.resolve(state2.result, state2.tag)) {\n throwError(state2, \"cannot resolve a node with !<\" + state2.tag + \"> explicit tag\");\n } else {\n state2.result = type2.construct(state2.result, state2.tag);\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n }\n }\n if (state2.listener !== null) {\n state2.listener(\"close\", state2);\n }\n return state2.tag !== null || state2.anchor !== null || hasContent;\n}\nfunction readDocument(state2) {\n var documentStart = state2.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n state2.version = null;\n state2.checkLineBreaks = state2.legacy;\n state2.tagMap = /* @__PURE__ */ Object.create(null);\n state2.anchorMap = /* @__PURE__ */ Object.create(null);\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n if (state2.lineIndent > 0 || ch !== 37) {\n break;\n }\n hasDirectives = true;\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n directiveName = state2.input.slice(_position, state2.position);\n directiveArgs = [];\n if (directiveName.length < 1) {\n throwError(state2, \"directive name must not be less than one character in length\");\n }\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 0 && !is_EOL(ch));\n break;\n }\n if (is_EOL(ch))\n break;\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n directiveArgs.push(state2.input.slice(_position, state2.position));\n }\n if (ch !== 0)\n readLineBreak(state2);\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state2, directiveName, directiveArgs);\n } else {\n throwWarning(state2, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n skipSeparationSpace(state2, true, -1);\n if (state2.lineIndent === 0 && state2.input.charCodeAt(state2.position) === 45 && state2.input.charCodeAt(state2.position + 1) === 45 && state2.input.charCodeAt(state2.position + 2) === 45) {\n state2.position += 3;\n skipSeparationSpace(state2, true, -1);\n } else if (hasDirectives) {\n throwError(state2, \"directives end mark is expected\");\n }\n composeNode(state2, state2.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state2, true, -1);\n if (state2.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state2.input.slice(documentStart, state2.position))) {\n throwWarning(state2, \"non-ASCII line breaks are interpreted as content\");\n }\n state2.documents.push(state2.result);\n if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n if (state2.input.charCodeAt(state2.position) === 46) {\n state2.position += 3;\n skipSeparationSpace(state2, true, -1);\n }\n return;\n }\n if (state2.position < state2.length - 1) {\n throwError(state2, \"end of the stream or a document separator is expected\");\n } else {\n return;\n }\n}\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n if (input.length !== 0) {\n if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {\n input += \"\\n\";\n }\n if (input.charCodeAt(0) === 65279) {\n input = input.slice(1);\n }\n }\n var state2 = new State$1(input, options);\n var nullpos = input.indexOf(\"\\0\");\n if (nullpos !== -1) {\n state2.position = nullpos;\n throwError(state2, \"null byte is not allowed in input\");\n }\n state2.input += \"\\0\";\n while (state2.input.charCodeAt(state2.position) === 32) {\n state2.lineIndent += 1;\n state2.position += 1;\n }\n while (state2.position < state2.length - 1) {\n readDocument(state2);\n }\n return state2.documents;\n}\nfunction loadAll$1(input, iterator2, options) {\n if (iterator2 !== null && typeof iterator2 === \"object\" && typeof options === \"undefined\") {\n options = iterator2;\n iterator2 = null;\n }\n var documents = loadDocuments(input, options);\n if (typeof iterator2 !== \"function\") {\n return documents;\n }\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator2(documents[index]);\n }\n}\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n if (documents.length === 0) {\n return void 0;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception(\"expected a single document in the stream, but found more\");\n}\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\nvar loader$j = {\n loadAll: loadAll_1,\n load: load_1\n};\nvar FAILSAFE_SCHEMA = failsafe;\nvar load = loader$j.load;\nconst frontMatterRegex = /^-{3}\\s*[\\n\\r](.*?)[\\n\\r]-{3}\\s*[\\n\\r]+/s;\nfunction extractFrontMatter(text, db) {\n var _a, _b;\n const matches = text.match(frontMatterRegex);\n if (matches) {\n const parsed = load(matches[1], {\n // To keep things simple, only allow strings, arrays, and plain objects.\n // https://www.yaml.org/spec/1.2/spec.html#id2802346\n schema: FAILSAFE_SCHEMA\n });\n if (parsed == null ? void 0 : parsed.title) {\n (_a = db.setDiagramTitle) == null ? void 0 : _a.call(db, parsed.title);\n }\n if (parsed == null ? void 0 : parsed.displayMode) {\n (_b = db.setDisplayMode) == null ? void 0 : _b.call(db, parsed.displayMode);\n }\n return text.slice(matches[0].length);\n } else {\n return text;\n }\n}\nconst assignWithDepth = function(dst, src, config2) {\n const { depth, clobber } = Object.assign({ depth: 2, clobber: false }, config2);\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach((s) => assignWithDepth(dst, s, config2));\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach((s) => {\n if (!dst.includes(s)) {\n dst.push(s);\n }\n });\n return dst;\n }\n if (dst === void 0 || depth <= 0) {\n if (dst !== void 0 && dst !== null && typeof dst === \"object\" && typeof src === \"object\") {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n if (src !== void 0 && typeof dst === \"object\" && typeof src === \"object\") {\n Object.keys(src).forEach((key) => {\n if (typeof src[key] === \"object\" && (dst[key] === void 0 || typeof dst[key] === \"object\")) {\n if (dst[key] === void 0) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n } else if (clobber || typeof dst[key] !== \"object\" && typeof src[key] !== \"object\") {\n dst[key] = src[key];\n }\n });\n }\n return dst;\n};\nconst assignWithDepth$1 = assignWithDepth;\nconst defaultConfig = Object.freeze(defaultConfig$1);\nlet siteConfig = assignWithDepth$1({}, defaultConfig);\nlet configFromInitialize;\nlet directives = [];\nlet currentConfig = assignWithDepth$1({}, defaultConfig);\nconst updateCurrentConfig = (siteCfg, _directives) => {\n let cfg = assignWithDepth$1({}, siteCfg);\n let sumOfDirectives = {};\n for (const d of _directives) {\n sanitize(d);\n sumOfDirectives = assignWithDepth$1(sumOfDirectives, d);\n }\n cfg = assignWithDepth$1(cfg, sumOfDirectives);\n if (sumOfDirectives.theme && sumOfDirectives.theme in theme) {\n const tmpConfigFromInitialize = assignWithDepth$1({}, configFromInitialize);\n const themeVariables = assignWithDepth$1(\n tmpConfigFromInitialize.themeVariables || {},\n sumOfDirectives.themeVariables\n );\n if (cfg.theme && cfg.theme in theme) {\n cfg.themeVariables = theme[cfg.theme].getThemeVariables(themeVariables);\n }\n }\n currentConfig = cfg;\n checkConfig(currentConfig);\n return currentConfig;\n};\nconst setSiteConfig = (conf) => {\n siteConfig = assignWithDepth$1({}, defaultConfig);\n siteConfig = assignWithDepth$1(siteConfig, conf);\n if (conf.theme && theme[conf.theme]) {\n siteConfig.themeVariables = theme[conf.theme].getThemeVariables(conf.themeVariables);\n }\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n};\nconst saveConfigFromInitialize = (conf) => {\n configFromInitialize = assignWithDepth$1({}, conf);\n};\nconst updateSiteConfig = (conf) => {\n siteConfig = assignWithDepth$1(siteConfig, conf);\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n};\nconst getSiteConfig = () => {\n return assignWithDepth$1({}, siteConfig);\n};\nconst setConfig = (conf) => {\n checkConfig(conf);\n assignWithDepth$1(currentConfig, conf);\n return getConfig$1();\n};\nconst getConfig$1 = () => {\n return assignWithDepth$1({}, currentConfig);\n};\nconst sanitize = (options) => {\n [\"secure\", ...siteConfig.secure ?? []].forEach((key) => {\n if (options[key] !== void 0) {\n log$1.debug(`Denied attempt to modify a secure key ${key}`, options[key]);\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (key.indexOf(\"__\") === 0) {\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (typeof options[key] === \"string\" && (options[key].includes(\"<\") || options[key].includes(\">\") || options[key].includes(\"url(data:\"))) {\n delete options[key];\n }\n if (typeof options[key] === \"object\") {\n sanitize(options[key]);\n }\n });\n};\nconst addDirective = (directive2) => {\n if (directive2.fontFamily) {\n if (!directive2.themeVariables) {\n directive2.themeVariables = { fontFamily: directive2.fontFamily };\n } else {\n if (!directive2.themeVariables.fontFamily) {\n directive2.themeVariables = { fontFamily: directive2.fontFamily };\n }\n }\n }\n directives.push(directive2);\n updateCurrentConfig(siteConfig, directives);\n};\nconst reset = (config2 = siteConfig) => {\n directives = [];\n updateCurrentConfig(config2, directives);\n};\nvar ConfigWarning = /* @__PURE__ */ ((ConfigWarning2) => {\n ConfigWarning2[\"LAZY_LOAD_DEPRECATED\"] = \"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.\";\n return ConfigWarning2;\n})(ConfigWarning || {});\nconst issuedWarnings = {};\nconst issueWarning = (warning) => {\n if (issuedWarnings[warning]) {\n return;\n }\n log$1.warn(ConfigWarning[warning]);\n issuedWarnings[warning] = true;\n};\nconst checkConfig = (config2) => {\n if (!config2) {\n return;\n }\n if (config2.lazyLoadedDiagrams || config2.loadExternalDiagramsAtStartup) {\n issueWarning(\"LAZY_LOAD_DEPRECATED\");\n }\n};\nconst d3Attrs = function(d3Elem, attrs) {\n for (let attr of attrs) {\n d3Elem.attr(attr[0], attr[1]);\n }\n};\nconst calculateSvgSizeAttrs = function(height, width, useMaxWidth) {\n let attrs = /* @__PURE__ */ new Map();\n if (useMaxWidth) {\n attrs.set(\"width\", \"100%\");\n attrs.set(\"style\", `max-width: ${width}px;`);\n } else {\n attrs.set(\"height\", height);\n attrs.set(\"width\", width);\n }\n return attrs;\n};\nconst configureSvgSize = function(svgElem, height, width, useMaxWidth) {\n const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n};\nconst setupGraphViewbox$1 = function(graph, svgElem, padding, useMaxWidth) {\n const svgBounds = svgElem.node().getBBox();\n const sWidth = svgBounds.width;\n const sHeight = svgBounds.height;\n log$1.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);\n let width = 0;\n let height = 0;\n log$1.info(`Graph bounds: ${width}x${height}`, graph);\n width = sWidth + padding * 2;\n height = sHeight + padding * 2;\n log$1.info(`Calculated bounds: ${width}x${height}`);\n configureSvgSize(svgElem, height, width, useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${svgBounds.width + 2 * padding} ${svgBounds.height + 2 * padding}`;\n svgElem.attr(\"viewBox\", vBox);\n};\nconst themes = {};\nconst getStyles$1 = (type2, userStyles, options) => {\n let diagramStyles = \"\";\n if (type2 in themes && themes[type2]) {\n diagramStyles = themes[type2](options);\n } else {\n log$1.warn(`No theme found for ${type2}`);\n }\n return ` & {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${options.errorBkgColor};\n }\n & .error-text {\n fill: ${options.errorTextColor};\n stroke: ${options.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n }\n & .marker.cross {\n stroke: ${options.lineColor};\n }\n\n & svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n\n ${diagramStyles}\n\n ${userStyles}\n`;\n};\nconst addStylesForDiagram = (type2, diagramTheme) => {\n themes[type2] = diagramTheme;\n};\nconst getStyles$2 = getStyles$1;\nlet title = \"\";\nlet diagramTitle = \"\";\nlet description = \"\";\nconst sanitizeText$1 = (txt) => sanitizeText$2(txt, getConfig$1());\nconst clear = function() {\n title = \"\";\n description = \"\";\n diagramTitle = \"\";\n};\nconst setAccTitle = function(txt) {\n title = sanitizeText$1(txt).replace(/^\\s+/g, \"\");\n};\nconst getAccTitle = function() {\n return title || diagramTitle;\n};\nconst setAccDescription = function(txt) {\n description = sanitizeText$1(txt).replace(/\\n\\s+/g, \"\\n\");\n};\nconst getAccDescription = function() {\n return description;\n};\nconst setDiagramTitle = function(txt) {\n diagramTitle = sanitizeText$1(txt);\n};\nconst getDiagramTitle = function() {\n return diagramTitle;\n};\nconst commonDb = {\n getAccTitle,\n setAccTitle,\n getDiagramTitle,\n setDiagramTitle,\n getAccDescription,\n setAccDescription,\n clear\n};\nconst commonDb$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n clear,\n default: commonDb,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n}, Symbol.toStringTag, { value: \"Module\" }));\nlet currentDirective = {};\nconst parseDirective$1 = function(p, statement, context, type2) {\n log$1.debug(\"parseDirective is being called\", statement, context, type2);\n try {\n if (statement !== void 0) {\n statement = statement.trim();\n switch (context) {\n case \"open_directive\":\n currentDirective = {};\n break;\n case \"type_directive\":\n if (!currentDirective) {\n throw new Error(\"currentDirective is undefined\");\n }\n currentDirective.type = statement.toLowerCase();\n break;\n case \"arg_directive\":\n if (!currentDirective) {\n throw new Error(\"currentDirective is undefined\");\n }\n currentDirective.args = JSON.parse(statement);\n break;\n case \"close_directive\":\n handleDirective(p, currentDirective, type2);\n currentDirective = void 0;\n break;\n }\n }\n } catch (error) {\n log$1.error(\n `Error while rendering sequenceDiagram directive: ${statement} jison context: ${context}`\n );\n log$1.error(error.message);\n }\n};\nconst handleDirective = function(p, directive2, type2) {\n log$1.info(`Directive type=${directive2.type} with args:`, directive2.args);\n switch (directive2.type) {\n case \"init\":\n case \"initialize\": {\n [\"config\"].forEach((prop) => {\n if (directive2.args[prop] !== void 0) {\n if (type2 === \"flowchart-v2\") {\n type2 = \"flowchart\";\n }\n directive2.args[type2] = directive2.args[prop];\n delete directive2.args[prop];\n }\n });\n log$1.info(\"sanitize in handleDirective\", directive2.args);\n directiveSanitizer(directive2.args);\n log$1.info(\"sanitize in handleDirective (done)\", directive2.args);\n addDirective(directive2.args);\n break;\n }\n case \"wrap\":\n case \"nowrap\":\n if (p && p[\"setWrap\"]) {\n p.setWrap(directive2.type === \"wrap\");\n }\n break;\n case \"themeCss\":\n log$1.warn(\"themeCss encountered\");\n break;\n default:\n log$1.warn(\n `Unhandled directive: source: '%%{${directive2.type}: ${JSON.stringify(\n directive2.args ? directive2.args : {}\n )}}%%`,\n directive2\n );\n break;\n }\n};\nconst log = log$1;\nconst setLogLevel = setLogLevel$1;\nconst getConfig = getConfig$1;\nconst sanitizeText = (text) => sanitizeText$2(text, getConfig());\nconst setupGraphViewbox = setupGraphViewbox$1;\nconst getCommonDb = () => {\n return commonDb$1;\n};\nconst parseDirective = (p, statement, context, type2) => parseDirective$1(p, statement, context, type2);\nconst diagrams = {};\nconst registerDiagram = (id2, diagram2, detector2) => {\n if (diagrams[id2]) {\n throw new Error(`Diagram ${id2} already registered.`);\n }\n diagrams[id2] = diagram2;\n if (detector2) {\n addDetector(id2, detector2);\n }\n addStylesForDiagram(id2, diagram2.styles);\n if (diagram2.injectUtils) {\n diagram2.injectUtils(\n log,\n setLogLevel,\n getConfig,\n sanitizeText,\n setupGraphViewbox,\n getCommonDb(),\n parseDirective\n );\n }\n};\nconst getDiagram = (name) => {\n if (name in diagrams) {\n return diagrams[name];\n }\n throw new Error(`Diagram ${name} not found.`);\n};\nclass UnknownDiagramError extends Error {\n constructor(message) {\n super(message);\n this.name = \"UnknownDiagramError\";\n }\n}\nconst directive$1 = /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nconst anyComment = /\\s*%%.*\\n/gm;\nconst detectors = {};\nconst detectType = function(text, config2) {\n text = text.replace(frontMatterRegex, \"\").replace(directive$1, \"\").replace(anyComment, \"\\n\");\n for (const [key, { detector: detector2 }] of Object.entries(detectors)) {\n const diagram2 = detector2(text, config2);\n if (diagram2) {\n return key;\n }\n }\n throw new UnknownDiagramError(\n `No diagram type detected matching given configuration for text: ${text}`\n );\n};\nconst registerLazyLoadedDiagrams = (...diagrams2) => {\n for (const { id: id2, detector: detector2, loader: loader2 } of diagrams2) {\n addDetector(id2, detector2, loader2);\n }\n};\nconst loadRegisteredDiagrams = async () => {\n log$1.debug(`Loading registered diagrams`);\n const results = await Promise.allSettled(\n Object.entries(detectors).map(async ([key, { detector: detector2, loader: loader2 }]) => {\n if (loader2) {\n try {\n getDiagram(key);\n } catch (error) {\n try {\n const { diagram: diagram2, id: id2 } = await loader2();\n registerDiagram(id2, diagram2, detector2);\n } catch (err) {\n log$1.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);\n delete detectors[key];\n throw err;\n }\n }\n }\n })\n );\n const failed = results.filter((result) => result.status === \"rejected\");\n if (failed.length > 0) {\n log$1.error(`Failed to load ${failed.length} external diagrams`);\n for (const res of failed) {\n log$1.error(res);\n }\n throw new Error(`Failed to load ${failed.length} external diagrams`);\n }\n};\nconst addDetector = (key, detector2, loader2) => {\n if (detectors[key]) {\n log$1.error(`Detector with key ${key} already exists`);\n } else {\n detectors[key] = { detector: detector2, loader: loader2 };\n }\n log$1.debug(`Detector with key ${key} added${loader2 ? \" with loader\" : \"\"}`);\n};\nconst getDiagramLoader = (key) => {\n return detectors[key].loader;\n};\nconst ZERO_WIDTH_SPACE = \"​\";\nconst d3CurveTypes = {\n curveBasis: d3__WEBPACK_IMPORTED_MODULE_3__.curveBasis,\n curveBasisClosed: d3__WEBPACK_IMPORTED_MODULE_3__.curveBasisClosed,\n curveBasisOpen: d3__WEBPACK_IMPORTED_MODULE_3__.curveBasisOpen,\n curveBumpX: d3__WEBPACK_IMPORTED_MODULE_3__.curveBumpX,\n curveBumpY: d3__WEBPACK_IMPORTED_MODULE_3__.curveBumpY,\n curveBundle: d3__WEBPACK_IMPORTED_MODULE_3__.curveBundle,\n curveCardinalClosed: d3__WEBPACK_IMPORTED_MODULE_3__.curveCardinalClosed,\n curveCardinalOpen: d3__WEBPACK_IMPORTED_MODULE_3__.curveCardinalOpen,\n curveCardinal: d3__WEBPACK_IMPORTED_MODULE_3__.curveCardinal,\n curveCatmullRomClosed: d3__WEBPACK_IMPORTED_MODULE_3__.curveCatmullRomClosed,\n curveCatmullRomOpen: d3__WEBPACK_IMPORTED_MODULE_3__.curveCatmullRomOpen,\n curveCatmullRom: d3__WEBPACK_IMPORTED_MODULE_3__.curveCatmullRom,\n curveLinear: d3__WEBPACK_IMPORTED_MODULE_3__.curveLinear,\n curveLinearClosed: d3__WEBPACK_IMPORTED_MODULE_3__.curveLinearClosed,\n curveMonotoneX: d3__WEBPACK_IMPORTED_MODULE_3__.curveMonotoneX,\n curveMonotoneY: d3__WEBPACK_IMPORTED_MODULE_3__.curveMonotoneY,\n curveNatural: d3__WEBPACK_IMPORTED_MODULE_3__.curveNatural,\n curveStep: d3__WEBPACK_IMPORTED_MODULE_3__.curveStep,\n curveStepAfter: d3__WEBPACK_IMPORTED_MODULE_3__.curveStepAfter,\n curveStepBefore: d3__WEBPACK_IMPORTED_MODULE_3__.curveStepBefore\n};\nconst directive = /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nconst directiveWithoutOpen = /\\s*(?:(\\w+)(?=:):|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nconst detectInit = function(text, config2) {\n const inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n let results = {};\n if (Array.isArray(inits)) {\n const args = inits.map((init2) => init2.args);\n directiveSanitizer(args);\n results = assignWithDepth$1(results, [...args]);\n } else {\n results = inits.args;\n }\n if (results) {\n let type2 = detectType(text, config2);\n [\"config\"].forEach((prop) => {\n if (results[prop] !== void 0) {\n if (type2 === \"flowchart-v2\") {\n type2 = \"flowchart\";\n }\n results[type2] = results[prop];\n delete results[prop];\n }\n });\n }\n return results;\n};\nconst detectDirective = function(text, type2 = null) {\n try {\n const commentWithoutDirectives = new RegExp(\n `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\n`,\n \"ig\"\n );\n text = text.trim().replace(commentWithoutDirectives, \"\").replace(/'/gm, '\"');\n log$1.debug(\n `Detecting diagram directive${type2 !== null ? \" type:\" + type2 : \"\"} based on the text:${text}`\n );\n let match;\n const result = [];\n while ((match = directive.exec(text)) !== null) {\n if (match.index === directive.lastIndex) {\n directive.lastIndex++;\n }\n if (match && !type2 || type2 && match[1] && match[1].match(type2) || type2 && match[2] && match[2].match(type2)) {\n const type22 = match[1] ? match[1] : match[2];\n const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({ type: type22, args });\n }\n }\n if (result.length === 0) {\n result.push({ type: text, args: null });\n }\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n log$1.error(\n `ERROR: ${error.message} - Unable to parse directive\n ${type2 !== null ? \" type:\" + type2 : \"\"} based on the text:${text}`\n );\n return { type: null, args: null };\n }\n};\nconst isSubstringInArray = function(str2, arr) {\n for (const [i, element] of arr.entries()) {\n if (element.match(str2)) {\n return i;\n }\n }\n return -1;\n};\nfunction interpolateToCurve(interpolate, defaultCurve) {\n if (!interpolate) {\n return defaultCurve;\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n return d3CurveTypes[curveName] || defaultCurve;\n}\nfunction formatUrl(linkStr, config2) {\n const url = linkStr.trim();\n if (url) {\n if (config2.securityLevel !== \"loose\") {\n return (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__.sanitizeUrl)(url);\n }\n return url;\n }\n}\nconst runFunc = (functionName, ...params) => {\n const arrPaths = functionName.split(\".\");\n const len = arrPaths.length - 1;\n const fnName = arrPaths[len];\n let obj = window;\n for (let i = 0; i < len; i++) {\n obj = obj[arrPaths[i]];\n if (!obj) {\n return;\n }\n }\n obj[fnName](...params);\n};\nfunction distance(p1, p2) {\n return p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0;\n}\nfunction traverseEdge(points) {\n let prevPoint;\n let totalDistance = 0;\n points.forEach((point) => {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n });\n let remainingDistance = totalDistance / 2;\n let center = void 0;\n prevPoint = void 0;\n points.forEach((point) => {\n if (prevPoint && !center) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n center = prevPoint;\n }\n if (distanceRatio >= 1) {\n center = { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n prevPoint = point;\n });\n return center;\n}\nfunction calcLabelPosition(points) {\n if (points.length === 1) {\n return points[0];\n }\n return traverseEdge(points);\n}\nconst calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => {\n let prevPoint;\n log$1.info(`our points ${JSON.stringify(points)}`);\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n const distanceToCardinalityPoint = 25;\n let remainingDistance = distanceToCardinalityPoint;\n let center;\n prevPoint = void 0;\n points.forEach((point) => {\n if (prevPoint && !center) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n center = prevPoint;\n }\n if (distanceRatio >= 1) {\n center = { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n prevPoint = point;\n });\n const d = isRelationTypePresent ? 10 : 5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n};\nfunction calcTerminalLabelPosition(terminalMarkerSize, position, _points) {\n let points = JSON.parse(JSON.stringify(_points));\n let prevPoint;\n log$1.info(\"our points\", points);\n if (position !== \"start_left\" && position !== \"start_right\") {\n points = points.reverse();\n }\n points.forEach((point) => {\n prevPoint = point;\n });\n const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n let remainingDistance = distanceToCardinalityPoint;\n let center;\n prevPoint = void 0;\n points.forEach((point) => {\n if (prevPoint && !center) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n center = prevPoint;\n }\n if (distanceRatio >= 1) {\n center = { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n prevPoint = point;\n });\n const d = 10 + terminalMarkerSize * 0.5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n if (position === \"start_left\") {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n }\n if (position === \"end_right\") {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n }\n if (position === \"end_left\") {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n }\n return cardinalityPosition;\n}\nfunction getStylesFromArray(arr) {\n let style = \"\";\n let labelStyle = \"\";\n for (const element of arr) {\n if (element !== void 0) {\n if (element.startsWith(\"color:\") || element.startsWith(\"text-align:\")) {\n labelStyle = labelStyle + element + \";\";\n } else {\n style = style + element + \";\";\n }\n }\n }\n return { style, labelStyle };\n}\nlet cnt = 0;\nconst generateId = () => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n};\nfunction makeid(length) {\n let result = \"\";\n const characters = \"0123456789abcdef\";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\nconst random = (options) => {\n return makeid(options.length);\n};\nconst getTextObj = function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n anchor: \"start\",\n style: \"#666\",\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: void 0\n };\n};\nconst drawSimpleText = function(elem, textData) {\n const nText = textData.text.replace(common$1.lineBreakRegex, \" \");\n const [, _fontSizePx] = parseFontSize(textData.fontSize);\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.style(\"text-anchor\", textData.anchor);\n textElem.style(\"font-family\", textData.fontFamily);\n textElem.style(\"font-size\", _fontSizePx);\n textElem.style(\"font-weight\", textData.fontWeight);\n textElem.attr(\"fill\", textData.fill);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.attr(\"fill\", textData.fill);\n span.text(nText);\n return textElem;\n};\nconst wrapLabel = (0,lodash_es_memoize_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(\n (label, maxWidth, config2) => {\n if (!label) {\n return label;\n }\n config2 = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", joinWith: \"
\" },\n config2\n );\n if (common$1.lineBreakRegex.test(label)) {\n return label;\n }\n const words = label.split(\" \");\n const completedLines = [];\n let nextLine = \"\";\n words.forEach((word, index) => {\n const wordLength = calculateTextWidth(`${word} `, config2);\n const nextLineLength = calculateTextWidth(nextLine, config2);\n if (wordLength > maxWidth) {\n const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, \"-\", config2);\n completedLines.push(nextLine, ...hyphenatedStrings);\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(\" \");\n }\n const currentWord = index + 1;\n const isLastWord = currentWord === words.length;\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter((line) => line !== \"\").join(config2.joinWith);\n },\n (label, maxWidth, config2) => `${label}${maxWidth}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}${config2.joinWith}`\n);\nconst breakString = (0,lodash_es_memoize_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(\n (word, maxWidth, hyphenCharacter = \"-\", config2) => {\n config2 = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", margin: 0 },\n config2\n );\n const characters = [...word];\n const lines = [];\n let currentLine = \"\";\n characters.forEach((character, index) => {\n const nextLine = `${currentLine}${character}`;\n const lineWidth = calculateTextWidth(nextLine, config2);\n if (lineWidth >= maxWidth) {\n const currentCharacter = index + 1;\n const isLastLine = characters.length === currentCharacter;\n const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = \"\";\n } else {\n currentLine = nextLine;\n }\n });\n return { hyphenatedStrings: lines, remainingWord: currentLine };\n },\n (word, maxWidth, hyphenCharacter = \"-\", config2) => `${word}${maxWidth}${hyphenCharacter}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`\n);\nfunction calculateTextHeight(text, config2) {\n config2 = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", margin: 15 },\n config2\n );\n return calculateTextDimensions(text, config2).height;\n}\nfunction calculateTextWidth(text, config2) {\n config2 = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: \"Arial\" }, config2);\n return calculateTextDimensions(text, config2).width;\n}\nconst calculateTextDimensions = (0,lodash_es_memoize_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(\n (text, config2) => {\n config2 = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: \"Arial\" }, config2);\n const { fontSize, fontFamily, fontWeight } = config2;\n if (!text) {\n return { width: 0, height: 0 };\n }\n const [, _fontSizePx] = parseFontSize(fontSize);\n const fontFamilies = [\"sans-serif\", fontFamily];\n const lines = text.split(common$1.lineBreakRegex);\n const dims = [];\n const body = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(\"body\");\n if (!body.remove) {\n return { width: 0, height: 0, lineHeight: 0 };\n }\n const g = body.append(\"svg\");\n for (const fontFamily2 of fontFamilies) {\n let cheight = 0;\n const dim = { width: 0, height: 0, lineHeight: 0 };\n for (const line of lines) {\n const textObj = getTextObj();\n textObj.text = line || ZERO_WIDTH_SPACE;\n const textElem = drawSimpleText(g, textObj).style(\"font-size\", _fontSizePx).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily2);\n const bBox = (textElem._groups || textElem)[0][0].getBBox();\n if (bBox.width === 0 && bBox.height === 0) {\n throw new Error(\"svg element not in render tree\");\n }\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cheight = Math.round(bBox.height);\n dim.height += cheight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight));\n }\n dims.push(dim);\n }\n g.remove();\n const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;\n return dims[index];\n },\n (text, config2) => `${text}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`\n);\nconst initIdGenerator = class iterator {\n constructor(deterministic, seed) {\n this.deterministic = deterministic;\n this.seed = seed;\n this.count = seed ? seed.length : 0;\n }\n next() {\n if (!this.deterministic) {\n return Date.now();\n }\n return this.count++;\n }\n};\nlet decoder;\nconst entityDecode = function(html) {\n decoder = decoder || document.createElement(\"div\");\n html = escape(html).replace(/%26/g, \"&\").replace(/%23/g, \"#\").replace(/%3B/g, \";\");\n decoder.innerHTML = html;\n return unescape(decoder.textContent);\n};\nconst directiveSanitizer = (args) => {\n log$1.debug(\"directiveSanitizer called with\", args);\n if (typeof args === \"object\") {\n if (args.length) {\n args.forEach((arg) => directiveSanitizer(arg));\n } else {\n Object.keys(args).forEach((key) => {\n log$1.debug(\"Checking key\", key);\n if (key.startsWith(\"__\")) {\n log$1.debug(\"sanitize deleting __ option\", key);\n delete args[key];\n }\n if (key.includes(\"proto\")) {\n log$1.debug(\"sanitize deleting proto option\", key);\n delete args[key];\n }\n if (key.includes(\"constr\")) {\n log$1.debug(\"sanitize deleting constr option\", key);\n delete args[key];\n }\n if (key.includes(\"themeCSS\")) {\n log$1.debug(\"sanitizing themeCss option\");\n args[key] = sanitizeCss(args[key]);\n }\n if (key.includes(\"fontFamily\")) {\n log$1.debug(\"sanitizing fontFamily option\");\n args[key] = sanitizeCss(args[key]);\n }\n if (key.includes(\"altFontFamily\")) {\n log$1.debug(\"sanitizing altFontFamily option\");\n args[key] = sanitizeCss(args[key]);\n }\n if (!configKeys.includes(key)) {\n log$1.debug(\"sanitize deleting option\", key);\n delete args[key];\n } else {\n if (typeof args[key] === \"object\") {\n log$1.debug(\"sanitize deleting object\", key);\n directiveSanitizer(args[key]);\n }\n }\n });\n }\n }\n if (args.themeVariables) {\n const kArr = Object.keys(args.themeVariables);\n for (const k of kArr) {\n const val = args.themeVariables[k];\n if (val && val.match && !val.match(/^[\\d \"#%(),.;A-Za-z]+$/)) {\n args.themeVariables[k] = \"\";\n }\n }\n }\n log$1.debug(\"After sanitization\", args);\n};\nconst sanitizeCss = (str2) => {\n let startCnt = 0;\n let endCnt = 0;\n for (const element of str2) {\n if (startCnt < endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n if (element === \"{\") {\n startCnt++;\n } else if (element === \"}\") {\n endCnt++;\n }\n }\n if (startCnt !== endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n return str2;\n};\nfunction isDetailedError(error) {\n return \"str\" in error;\n}\nfunction getErrorMessage(error) {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\nconst insertTitle = (parent, cssClass, titleTopMargin, title2) => {\n if (!title2) {\n return;\n }\n const bounds = parent.node().getBBox();\n parent.append(\"text\").text(title2).attr(\"x\", bounds.x + bounds.width / 2).attr(\"y\", -titleTopMargin).attr(\"class\", cssClass);\n};\nconst parseFontSize = (fontSize) => {\n if (typeof fontSize === \"number\") {\n return [fontSize, fontSize + \"px\"];\n }\n const fontSizeNumber = parseInt(fontSize, 10);\n if (Number.isNaN(fontSizeNumber)) {\n return [void 0, void 0];\n } else if (fontSize === String(fontSizeNumber)) {\n return [fontSizeNumber, fontSize + \"px\"];\n } else {\n return [fontSizeNumber, fontSize];\n }\n};\nconst utils = {\n assignWithDepth: assignWithDepth$1,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n calculateTextDimensions,\n detectInit,\n detectDirective,\n isSubstringInArray,\n interpolateToCurve,\n calcLabelPosition,\n calcCardinalityPosition,\n calcTerminalLabelPosition,\n formatUrl,\n getStylesFromArray,\n generateId,\n random,\n runFunc,\n entityDecode,\n initIdGenerator,\n directiveSanitizer,\n sanitizeCss,\n insertTitle,\n parseFontSize\n};\nconst version = \"10.2.3\";\nconst id$i = \"c4\";\nconst detector$i = (txt) => {\n return txt.match(/^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/) !== null;\n};\nconst loader$i = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./c4Diagram-9cddb37f.js */ \"../../../node_modules/mermaid/dist/c4Diagram-9cddb37f.js\"));\n return { id: id$i, diagram: diagram2 };\n};\nconst plugin$i = {\n id: id$i,\n detector: detector$i,\n loader: loader$i\n};\nconst c4 = plugin$i;\nconst id$h = \"flowchart\";\nconst detector$h = (txt, config2) => {\n var _a, _b;\n if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\" || ((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === \"elk\") {\n return false;\n }\n return txt.match(/^\\s*graph/) !== null;\n};\nconst loader$h = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./flowDiagram-93327f21.js */ \"../../../node_modules/mermaid/dist/flowDiagram-93327f21.js\"));\n return { id: id$h, diagram: diagram2 };\n};\nconst plugin$h = {\n id: id$h,\n detector: detector$h,\n loader: loader$h\n};\nconst flowchart = plugin$h;\nconst id$g = \"flowchart-v2\";\nconst detector$g = (txt, config2) => {\n var _a, _b, _c;\n if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"dagre-d3\" || ((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === \"elk\") {\n return false;\n }\n if (txt.match(/^\\s*graph/) !== null && ((_c = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _c.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return txt.match(/^\\s*flowchart/) !== null;\n};\nconst loader$g = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./flowDiagram-v2-476db779.js */ \"../../../node_modules/mermaid/dist/flowDiagram-v2-476db779.js\"));\n return { id: id$g, diagram: diagram2 };\n};\nconst plugin$g = {\n id: id$g,\n detector: detector$g,\n loader: loader$g\n};\nconst flowchartV2 = plugin$g;\nconst id$f = \"er\";\nconst detector$f = (txt) => {\n return txt.match(/^\\s*erDiagram/) !== null;\n};\nconst loader$f = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./erDiagram-f6946109.js */ \"../../../node_modules/mermaid/dist/erDiagram-f6946109.js\"));\n return { id: id$f, diagram: diagram2 };\n};\nconst plugin$f = {\n id: id$f,\n detector: detector$f,\n loader: loader$f\n};\nconst er = plugin$f;\nconst id$e = \"gitGraph\";\nconst detector$e = (txt) => {\n return txt.match(/^\\s*gitGraph/) !== null;\n};\nconst loader$e = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./gitGraphDiagram-1e960c50.js */ \"../../../node_modules/mermaid/dist/gitGraphDiagram-1e960c50.js\"));\n return { id: id$e, diagram: diagram2 };\n};\nconst plugin$e = {\n id: id$e,\n detector: detector$e,\n loader: loader$e\n};\nconst git = plugin$e;\nconst id$d = \"gantt\";\nconst detector$d = (txt) => {\n return txt.match(/^\\s*gantt/) !== null;\n};\nconst loader$d = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./ganttDiagram-7ce12d6b.js */ \"../../../node_modules/mermaid/dist/ganttDiagram-7ce12d6b.js\"));\n return { id: id$d, diagram: diagram2 };\n};\nconst plugin$d = {\n id: id$d,\n detector: detector$d,\n loader: loader$d\n};\nconst gantt = plugin$d;\nconst id$c = \"info\";\nconst detector$c = (txt) => {\n return txt.match(/^\\s*info/) !== null;\n};\nconst loader$c = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./infoDiagram-264bed3e.js */ \"../../../node_modules/mermaid/dist/infoDiagram-264bed3e.js\"));\n return { id: id$c, diagram: diagram2 };\n};\nconst plugin$c = {\n id: id$c,\n detector: detector$c,\n loader: loader$c\n};\nconst info = plugin$c;\nconst id$b = \"pie\";\nconst detector$b = (txt) => {\n return txt.match(/^\\s*pie/) !== null;\n};\nconst loader$b = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./pieDiagram-157505fe.js */ \"../../../node_modules/mermaid/dist/pieDiagram-157505fe.js\"));\n return { id: id$b, diagram: diagram2 };\n};\nconst plugin$b = {\n id: id$b,\n detector: detector$b,\n loader: loader$b\n};\nconst pie = plugin$b;\nconst id$a = \"quadrantChart\";\nconst detector$a = (txt) => {\n return txt.match(/^\\s*quadrantChart/) !== null;\n};\nconst loader$a = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./quadrantDiagram-fd70f2d0.js */ \"../../../node_modules/mermaid/dist/quadrantDiagram-fd70f2d0.js\"));\n return { id: id$a, diagram: diagram2 };\n};\nconst plugin$a = {\n id: id$a,\n detector: detector$a,\n loader: loader$a\n};\nconst quadrantChart = plugin$a;\nconst id$9 = \"requirement\";\nconst detector$9 = (txt) => {\n return txt.match(/^\\s*requirement(Diagram)?/) !== null;\n};\nconst loader$9 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./requirementDiagram-19c99588.js */ \"../../../node_modules/mermaid/dist/requirementDiagram-19c99588.js\"));\n return { id: id$9, diagram: diagram2 };\n};\nconst plugin$9 = {\n id: id$9,\n detector: detector$9,\n loader: loader$9\n};\nconst requirement = plugin$9;\nconst id$8 = \"sequence\";\nconst detector$8 = (txt) => {\n return txt.match(/^\\s*sequenceDiagram/) !== null;\n};\nconst loader$8 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./sequenceDiagram-5dfd0049.js */ \"../../../node_modules/mermaid/dist/sequenceDiagram-5dfd0049.js\"));\n return { id: id$8, diagram: diagram2 };\n};\nconst plugin$8 = {\n id: id$8,\n detector: detector$8,\n loader: loader$8\n};\nconst sequence = plugin$8;\nconst id$7 = \"class\";\nconst detector$7 = (txt, config2) => {\n var _a;\n if (((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return false;\n }\n return txt.match(/^\\s*classDiagram/) !== null;\n};\nconst loader$7 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./classDiagram-bc733c3b.js */ \"../../../node_modules/mermaid/dist/classDiagram-bc733c3b.js\"));\n return { id: id$7, diagram: diagram2 };\n};\nconst plugin$7 = {\n id: id$7,\n detector: detector$7,\n loader: loader$7\n};\nconst classDiagram = plugin$7;\nconst id$6 = \"classDiagram\";\nconst detector$6 = (txt, config2) => {\n var _a;\n if (txt.match(/^\\s*classDiagram/) !== null && ((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return txt.match(/^\\s*classDiagram-v2/) !== null;\n};\nconst loader$6 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./classDiagram-v2-8931bdaf.js */ \"../../../node_modules/mermaid/dist/classDiagram-v2-8931bdaf.js\"));\n return { id: id$6, diagram: diagram2 };\n};\nconst plugin$6 = {\n id: id$6,\n detector: detector$6,\n loader: loader$6\n};\nconst classDiagramV2 = plugin$6;\nconst id$5 = \"state\";\nconst detector$5 = (txt, config2) => {\n var _a;\n if (((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return false;\n }\n return txt.match(/^\\s*stateDiagram/) !== null;\n};\nconst loader$5 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./stateDiagram-133e3642.js */ \"../../../node_modules/mermaid/dist/stateDiagram-133e3642.js\"));\n return { id: id$5, diagram: diagram2 };\n};\nconst plugin$5 = {\n id: id$5,\n detector: detector$5,\n loader: loader$5\n};\nconst state = plugin$5;\nconst id$4 = \"stateDiagram\";\nconst detector$4 = (text, config2) => {\n var _a, _b;\n if (text.match(/^\\s*stateDiagram-v2/) !== null) {\n return true;\n }\n if (text.match(/^\\s*stateDiagram/) && ((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n if (text.match(/^\\s*stateDiagram/) && ((_b = config2 == null ? void 0 : config2.state) == null ? void 0 : _b.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return false;\n};\nconst loader$4 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./stateDiagram-v2-6371a76b.js */ \"../../../node_modules/mermaid/dist/stateDiagram-v2-6371a76b.js\"));\n return { id: id$4, diagram: diagram2 };\n};\nconst plugin$4 = {\n id: id$4,\n detector: detector$4,\n loader: loader$4\n};\nconst stateV2 = plugin$4;\nconst id$3 = \"journey\";\nconst detector$3 = (txt) => {\n return txt.match(/^\\s*journey/) !== null;\n};\nconst loader$3 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./journeyDiagram-31be0096.js */ \"../../../node_modules/mermaid/dist/journeyDiagram-31be0096.js\"));\n return { id: id$3, diagram: diagram2 };\n};\nconst plugin$3 = {\n id: id$3,\n detector: detector$3,\n loader: loader$3\n};\nconst journey = plugin$3;\nconst getStyles = () => ``;\nconst styles = getStyles;\nconst setConf = function() {\n};\nconst draw = (_text, id2, mermaidVersion) => {\n try {\n log$1.debug(\"Renering svg for syntax error\\n\");\n const svg = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(\"#\" + id2);\n const g = svg.append(\"g\");\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z\"\n );\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1440).attr(\"y\", 250).attr(\"font-size\", \"150px\").style(\"text-anchor\", \"middle\").text(\"Syntax error in text\");\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1250).attr(\"y\", 400).attr(\"font-size\", \"100px\").style(\"text-anchor\", \"middle\").text(\"mermaid version \" + mermaidVersion);\n svg.attr(\"height\", 100);\n svg.attr(\"width\", 500);\n svg.attr(\"viewBox\", \"768 0 912 512\");\n } catch (e) {\n log$1.error(\"Error while rendering info diagram\");\n log$1.error(getErrorMessage(e));\n }\n};\nconst errorRenderer = {\n setConf,\n draw\n};\nconst diagram = {\n db: {\n clear: () => {\n }\n },\n styles,\n renderer: errorRenderer,\n parser: {\n parser: { yy: {} },\n parse: () => {\n }\n },\n init: () => {\n }\n};\nconst errorDiagram = diagram;\nconst id$2 = \"flowchart-elk\";\nconst detector$2 = (txt, config2) => {\n var _a;\n if (\n // If diagram explicitly states flowchart-elk\n txt.match(/^\\s*flowchart-elk/) || // If a flowchart/graph diagram has their default renderer set to elk\n txt.match(/^\\s*flowchart|graph/) && ((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"elk\"\n ) {\n return true;\n }\n return false;\n};\nconst loader$2 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./flowchart-elk-definition-5082a990.js */ \"../../../node_modules/mermaid/dist/flowchart-elk-definition-5082a990.js\"));\n return { id: id$2, diagram: diagram2 };\n};\nconst plugin$2 = {\n id: id$2,\n detector: detector$2,\n loader: loader$2\n};\nconst flowchartElk = plugin$2;\nconst id$1 = \"timeline\";\nconst detector$1 = (txt) => {\n return txt.match(/^\\s*timeline/) !== null;\n};\nconst loader$1 = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./timeline-definition-5ed366f4.js */ \"../../../node_modules/mermaid/dist/timeline-definition-5ed366f4.js\"));\n return { id: id$1, diagram: diagram2 };\n};\nconst plugin$1 = {\n id: id$1,\n detector: detector$1,\n loader: loader$1\n};\nconst timeline = plugin$1;\nconst id = \"mindmap\";\nconst detector = (txt) => {\n return txt.match(/^\\s*mindmap/) !== null;\n};\nconst loader = async () => {\n const { diagram: diagram2 } = await __webpack_require__.e(/*! import() */ \"vendor\").then(__webpack_require__.bind(__webpack_require__, /*! ./mindmap-definition-4fc2557c.js */ \"../../../node_modules/mermaid/dist/mindmap-definition-4fc2557c.js\"));\n return { id, diagram: diagram2 };\n};\nconst plugin = {\n id,\n detector,\n loader\n};\nconst mindmap = plugin;\nlet hasLoadedDiagrams = false;\nconst addDiagrams = () => {\n if (hasLoadedDiagrams) {\n return;\n }\n hasLoadedDiagrams = true;\n registerDiagram(\"error\", errorDiagram, (text) => {\n return text.toLowerCase().trim() === \"error\";\n });\n registerDiagram(\n \"---\",\n // --- diagram type may appear if YAML front-matter is not parsed correctly\n {\n db: {\n clear: () => {\n }\n },\n styles: {},\n // should never be used\n renderer: {},\n // should never be used\n parser: {\n parser: { yy: {} },\n parse: () => {\n throw new Error(\n \"Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks\"\n );\n }\n },\n init: () => null\n // no op\n },\n (text) => {\n return text.toLowerCase().trimStart().startsWith(\"---\");\n }\n );\n registerLazyLoadedDiagrams(\n c4,\n classDiagramV2,\n classDiagram,\n er,\n gantt,\n info,\n pie,\n requirement,\n sequence,\n flowchartElk,\n flowchartV2,\n flowchart,\n mindmap,\n timeline,\n git,\n stateV2,\n state,\n journey,\n quadrantChart\n );\n};\nconst cleanupComments = (text) => {\n return text.trimStart().replace(/^\\s*%%(?!{)[^\\n]+\\n?/gm, \"\");\n};\nclass Diagram {\n constructor(text) {\n var _a, _b;\n this.text = text;\n this.type = \"graph\";\n this.text += \"\\n\";\n const cnf = getConfig$1();\n try {\n this.type = detectType(text, cnf);\n } catch (e) {\n this.type = \"error\";\n this.detectError = e;\n }\n const diagram2 = getDiagram(this.type);\n log$1.debug(\"Type \" + this.type);\n this.db = diagram2.db;\n (_b = (_a = this.db).clear) == null ? void 0 : _b.call(_a);\n this.renderer = diagram2.renderer;\n this.parser = diagram2.parser;\n const originalParse = this.parser.parse.bind(this.parser);\n this.parser.parse = (text2) => originalParse(cleanupComments(extractFrontMatter(text2, this.db)));\n this.parser.parser.yy = this.db;\n if (diagram2.init) {\n diagram2.init(cnf);\n log$1.info(\"Initialized diagram \" + this.type, cnf);\n }\n this.parse();\n }\n parse() {\n var _a, _b;\n if (this.detectError) {\n throw this.detectError;\n }\n (_b = (_a = this.db).clear) == null ? void 0 : _b.call(_a);\n this.parser.parse(this.text);\n }\n async render(id2, version2) {\n await this.renderer.draw(this.text, id2, version2, this);\n }\n getParser() {\n return this.parser;\n }\n getType() {\n return this.type;\n }\n}\nconst getDiagramFromText = async (text) => {\n const type2 = detectType(text, getConfig$1());\n try {\n getDiagram(type2);\n } catch (error) {\n const loader2 = getDiagramLoader(type2);\n if (!loader2) {\n throw new UnknownDiagramError(`Diagram ${type2} not found.`);\n }\n const { id: id2, diagram: diagram2 } = await loader2();\n registerDiagram(id2, diagram2);\n }\n return new Diagram(text);\n};\nlet interactionFunctions = [];\nconst addFunction = (func) => {\n interactionFunctions.push(func);\n};\nconst attachFunctions = () => {\n interactionFunctions.forEach((f) => {\n f();\n });\n interactionFunctions = [];\n};\nconst SVG_ROLE = \"graphics-document document\";\nfunction setA11yDiagramInfo(svg, diagramType) {\n svg.attr(\"role\", SVG_ROLE);\n if (!(0,lodash_es_isEmpty_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(diagramType)) {\n svg.attr(\"aria-roledescription\", diagramType);\n }\n}\nfunction addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {\n if (svg.insert === void 0) {\n return;\n }\n if (a11yTitle || a11yDesc) {\n if (a11yDesc) {\n const descId = \"chart-desc-\" + baseId;\n svg.attr(\"aria-describedby\", descId);\n svg.insert(\"desc\", \":first-child\").attr(\"id\", descId).text(a11yDesc);\n }\n if (a11yTitle) {\n const titleId = \"chart-title-\" + baseId;\n svg.attr(\"aria-labelledby\", titleId);\n svg.insert(\"title\", \":first-child\").attr(\"id\", titleId).text(a11yTitle);\n }\n } else {\n return;\n }\n}\nconst CLASSDEF_DIAGRAMS = [\n \"graph\",\n \"flowchart\",\n \"flowchart-v2\",\n \"flowchart-elk\",\n \"stateDiagram\",\n \"stateDiagram-v2\"\n];\nconst MAX_TEXTLENGTH = 5e4;\nconst MAX_TEXTLENGTH_EXCEEDED_MSG = \"graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa\";\nconst SECURITY_LVL_SANDBOX = \"sandbox\";\nconst SECURITY_LVL_LOOSE = \"loose\";\nconst XMLNS_SVG_STD = \"http://www.w3.org/2000/svg\";\nconst XMLNS_XLINK_STD = \"http://www.w3.org/1999/xlink\";\nconst XMLNS_XHTML_STD = \"http://www.w3.org/1999/xhtml\";\nconst IFRAME_WIDTH = \"100%\";\nconst IFRAME_HEIGHT = \"100%\";\nconst IFRAME_STYLES = \"border:0;margin:0;\";\nconst IFRAME_BODY_STYLE = \"margin:0\";\nconst IFRAME_SANDBOX_OPTS = \"allow-top-navigation-by-user-activation allow-popups\";\nconst IFRAME_NOT_SUPPORTED_MSG = 'The \"iframe\" tag is not supported by your browser.';\nconst DOMPURIFY_TAGS = [\"foreignobject\"];\nconst DOMPURIFY_ATTR = [\"dominant-baseline\"];\nasync function parse$1(text, parseOptions) {\n addDiagrams();\n try {\n const diagram2 = await getDiagramFromText(text);\n diagram2.parse();\n } catch (error) {\n if (parseOptions == null ? void 0 : parseOptions.suppressErrors) {\n return false;\n }\n throw error;\n }\n return true;\n}\nconst encodeEntities = function(text) {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, function(s) {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return \"fl°°\" + innerTxt + \"¶ß\";\n } else {\n return \"fl°\" + innerTxt + \"¶ß\";\n }\n });\n return txt;\n};\nconst decodeEntities = function(text) {\n return text.replace(/fl°°/g, \"&#\").replace(/fl°/g, \"&\").replace(/¶ß/g, \";\");\n};\nconst cssImportantStyles = (cssClass, element, cssClasses = []) => {\n return `\n.${cssClass} ${element} { ${cssClasses.join(\" !important; \")} !important; }`;\n};\nconst createCssStyles = (config2, graphType, classDefs = {}) => {\n var _a;\n let cssStyles = \"\";\n if (config2.themeCSS !== void 0) {\n cssStyles += `\n${config2.themeCSS}`;\n }\n if (config2.fontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-font-family: ${config2.fontFamily}}`;\n }\n if (config2.altFontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-alt-font-family: ${config2.altFontFamily}}`;\n }\n if (!(0,lodash_es_isEmpty_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(classDefs) && CLASSDEF_DIAGRAMS.includes(graphType)) {\n const htmlLabels = config2.htmlLabels || ((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels);\n const cssHtmlElements = [\"> *\", \"span\"];\n const cssShapeElements = [\"rect\", \"polygon\", \"ellipse\", \"circle\", \"path\"];\n const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;\n for (const classId in classDefs) {\n const styleClassDef = classDefs[classId];\n if (!(0,lodash_es_isEmpty_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(styleClassDef.styles)) {\n cssElements.forEach((cssElement) => {\n cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);\n });\n }\n if (!(0,lodash_es_isEmpty_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(styleClassDef.textStyles)) {\n cssStyles += cssImportantStyles(styleClassDef.id, \"tspan\", styleClassDef.textStyles);\n }\n }\n }\n return cssStyles;\n};\nconst createUserStyles = (config2, graphType, classDefs, svgId) => {\n const userCSSstyles = createCssStyles(config2, graphType, classDefs);\n const allStyles = getStyles$2(graphType, userCSSstyles, config2.themeVariables);\n return (0,stylis__WEBPACK_IMPORTED_MODULE_13__.serialize)((0,stylis__WEBPACK_IMPORTED_MODULE_14__.compile)(`${svgId}{${allStyles}}`), stylis__WEBPACK_IMPORTED_MODULE_13__.stringify);\n};\nconst cleanUpSvgCode = (svgCode = \"\", inSandboxMode, useArrowMarkerUrls) => {\n let cleanedUpSvg = svgCode;\n if (!useArrowMarkerUrls && !inSandboxMode) {\n cleanedUpSvg = cleanedUpSvg.replace(\n /marker-end=\"url\\([\\d+./:=?A-Za-z-]*?#/g,\n 'marker-end=\"url(#'\n );\n }\n cleanedUpSvg = decodeEntities(cleanedUpSvg);\n cleanedUpSvg = cleanedUpSvg.replace(/
/g, \"
\");\n return cleanedUpSvg;\n};\nconst putIntoIFrame = (svgCode = \"\", svgElement) => {\n const height = svgElement ? svgElement.viewBox.baseVal.height + \"px\" : IFRAME_HEIGHT;\n const base64encodedSrc = btoa('' + svgCode + \"\");\n return ``;\n};\nconst appendDivSvgG = (parentRoot, id2, enclosingDivId, divStyle, svgXlink) => {\n const enclosingDiv = parentRoot.append(\"div\");\n enclosingDiv.attr(\"id\", enclosingDivId);\n if (divStyle) {\n enclosingDiv.attr(\"style\", divStyle);\n }\n const svgNode = enclosingDiv.append(\"svg\").attr(\"id\", id2).attr(\"width\", \"100%\").attr(\"xmlns\", XMLNS_SVG_STD);\n if (svgXlink) {\n svgNode.attr(\"xmlns:xlink\", svgXlink);\n }\n svgNode.append(\"g\");\n return parentRoot;\n};\nfunction sandboxedIframe(parentNode, iFrameId) {\n return parentNode.append(\"iframe\").attr(\"id\", iFrameId).attr(\"style\", \"width: 100%; height: 100%;\").attr(\"sandbox\", \"\");\n}\nconst removeExistingElements = (doc, id2, divId, iFrameId) => {\n var _a, _b, _c;\n (_a = doc.getElementById(id2)) == null ? void 0 : _a.remove();\n (_b = doc.getElementById(divId)) == null ? void 0 : _b.remove();\n (_c = doc.getElementById(iFrameId)) == null ? void 0 : _c.remove();\n};\nconst render$1 = async function(id2, text, svgContainingElement) {\n var _a, _b, _c, _d;\n addDiagrams();\n reset();\n const graphInit = utils.detectInit(text);\n if (graphInit) {\n directiveSanitizer(graphInit);\n addDirective(graphInit);\n }\n const config2 = getConfig$1();\n log$1.debug(config2);\n if (text.length > ((config2 == null ? void 0 : config2.maxTextSize) ?? MAX_TEXTLENGTH)) {\n text = MAX_TEXTLENGTH_EXCEEDED_MSG;\n }\n text = text.replace(/\\r\\n?/g, \"\\n\");\n text = text.replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => \"<\" + tag + attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\") + \">\"\n );\n const idSelector = \"#\" + id2;\n const iFrameID = \"i\" + id2;\n const iFrameID_selector = \"#\" + iFrameID;\n const enclosingDivID = \"d\" + id2;\n const enclosingDivID_selector = \"#\" + enclosingDivID;\n let root = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(\"body\");\n const isSandboxed = config2.securityLevel === SECURITY_LVL_SANDBOX;\n const isLooseSecurityLevel = config2.securityLevel === SECURITY_LVL_LOOSE;\n const fontFamily = config2.fontFamily;\n if (svgContainingElement !== void 0) {\n if (svgContainingElement) {\n svgContainingElement.innerHTML = \"\";\n }\n if (isSandboxed) {\n const iframe = sandboxedIframe((0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(svgContainingElement), iFrameID);\n root = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(svgContainingElement);\n }\n appendDivSvgG(root, id2, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);\n } else {\n removeExistingElements(document, id2, enclosingDivID, iFrameID);\n if (isSandboxed) {\n const iframe = sandboxedIframe((0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(\"body\"), iFrameID);\n root = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(\"body\");\n }\n appendDivSvgG(root, id2, enclosingDivID);\n }\n text = encodeEntities(text);\n let diag;\n let parseEncounteredException;\n try {\n diag = await getDiagramFromText(text);\n } catch (error) {\n diag = new Diagram(\"error\");\n parseEncounteredException = error;\n }\n const element = root.select(enclosingDivID_selector).node();\n const graphType = diag.type;\n const svg = element.firstChild;\n const firstChild = svg.firstChild;\n const diagramClassDefs = CLASSDEF_DIAGRAMS.includes(graphType) ? diag.renderer.getClasses(text, diag) : {};\n const rules = createUserStyles(\n config2,\n graphType,\n // @ts-ignore convert renderer to TS.\n diagramClassDefs,\n idSelector\n );\n const style1 = document.createElement(\"style\");\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild);\n try {\n await diag.renderer.draw(text, id2, version, diag);\n } catch (e) {\n errorRenderer.draw(text, id2, version);\n throw e;\n }\n const svgNode = root.select(`${enclosingDivID_selector} svg`);\n const a11yTitle = (_b = (_a = diag.db).getAccTitle) == null ? void 0 : _b.call(_a);\n const a11yDescr = (_d = (_c = diag.db).getAccDescription) == null ? void 0 : _d.call(_c);\n addA11yInfo(graphType, svgNode, a11yTitle, a11yDescr);\n root.select(`[id=\"${id2}\"]`).selectAll(\"foreignobject > *\").attr(\"xmlns\", XMLNS_XHTML_STD);\n let svgCode = root.select(enclosingDivID_selector).node().innerHTML;\n log$1.debug(\"config.arrowMarkerAbsolute\", config2.arrowMarkerAbsolute);\n svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config2.arrowMarkerAbsolute));\n if (isSandboxed) {\n const svgEl = root.select(enclosingDivID_selector + \" svg\").node();\n svgCode = putIntoIFrame(svgCode, svgEl);\n } else if (!isLooseSecurityLevel) {\n svgCode = dompurify__WEBPACK_IMPORTED_MODULE_4__.sanitize(svgCode, {\n ADD_TAGS: DOMPURIFY_TAGS,\n ADD_ATTR: DOMPURIFY_ATTR\n });\n }\n attachFunctions();\n if (parseEncounteredException) {\n throw parseEncounteredException;\n }\n const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;\n const node = (0,d3__WEBPACK_IMPORTED_MODULE_3__.select)(tmpElementSelector).node();\n if (node && \"remove\" in node) {\n node.remove();\n }\n return {\n svg: svgCode,\n bindFunctions: diag.db.bindFunctions\n };\n};\nfunction initialize$1(options = {}) {\n var _a;\n if ((options == null ? void 0 : options.fontFamily) && !((_a = options.themeVariables) == null ? void 0 : _a.fontFamily)) {\n if (!options.themeVariables) {\n options.themeVariables = {};\n }\n options.themeVariables.fontFamily = options.fontFamily;\n }\n saveConfigFromInitialize(options);\n if ((options == null ? void 0 : options.theme) && options.theme in theme) {\n options.themeVariables = theme[options.theme].getThemeVariables(\n options.themeVariables\n );\n } else if (options) {\n options.themeVariables = theme.default.getThemeVariables(options.themeVariables);\n }\n const config2 = typeof options === \"object\" ? setSiteConfig(options) : getSiteConfig();\n setLogLevel$1(config2.logLevel);\n addDiagrams();\n}\nfunction addA11yInfo(graphType, svgNode, a11yTitle, a11yDescr) {\n setA11yDiagramInfo(svgNode, graphType);\n addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr(\"id\"));\n}\nconst mermaidAPI = Object.freeze({\n render: render$1,\n parse: parse$1,\n parseDirective: parseDirective$1,\n getDiagramFromText,\n initialize: initialize$1,\n getConfig: getConfig$1,\n setConfig,\n getSiteConfig,\n updateSiteConfig,\n reset: () => {\n reset();\n },\n globalReset: () => {\n reset(defaultConfig);\n },\n defaultConfig\n});\nsetLogLevel$1(getConfig$1().logLevel);\nreset(getConfig$1());\nconst handleError = (error, errors, parseError) => {\n log$1.warn(error);\n if (isDetailedError(error)) {\n if (parseError) {\n parseError(error.str, error.hash);\n }\n errors.push({ ...error, message: error.str, error });\n } else {\n if (parseError) {\n parseError(error);\n }\n if (error instanceof Error) {\n errors.push({\n str: error.message,\n message: error.message,\n hash: error.name,\n error\n });\n }\n }\n};\nconst run = async function(options = {\n querySelector: \".mermaid\"\n}) {\n try {\n await runThrowsErrors(options);\n } catch (e) {\n if (isDetailedError(e)) {\n log$1.error(e.str);\n }\n if (mermaid.parseError) {\n mermaid.parseError(e);\n }\n if (!options.suppressErrors) {\n log$1.error(\"Use the suppressErrors option to suppress these errors\");\n throw e;\n }\n }\n};\nconst runThrowsErrors = async function({ postRenderCallback, querySelector, nodes } = {\n querySelector: \".mermaid\"\n}) {\n const conf = mermaidAPI.getConfig();\n log$1.debug(`${!postRenderCallback ? \"No \" : \"\"}Callback function found`);\n let nodesToProcess;\n if (nodes) {\n nodesToProcess = nodes;\n } else if (querySelector) {\n nodesToProcess = document.querySelectorAll(querySelector);\n } else {\n throw new Error(\"Nodes and querySelector are both undefined\");\n }\n log$1.debug(`Found ${nodesToProcess.length} diagrams`);\n if ((conf == null ? void 0 : conf.startOnLoad) !== void 0) {\n log$1.debug(\"Start On Load: \" + (conf == null ? void 0 : conf.startOnLoad));\n mermaidAPI.updateSiteConfig({ startOnLoad: conf == null ? void 0 : conf.startOnLoad });\n }\n const idGenerator = new utils.initIdGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n let txt;\n const errors = [];\n for (const element of Array.from(nodesToProcess)) {\n log$1.info(\"Rendering diagram: \" + element.id);\n /*! Check if previously processed */\n if (element.getAttribute(\"data-processed\")) {\n continue;\n }\n element.setAttribute(\"data-processed\", \"true\");\n const id2 = `mermaid-${idGenerator.next()}`;\n txt = element.innerHTML;\n txt = (0,ts_dedent__WEBPACK_IMPORTED_MODULE_0__.dedent)(utils.entityDecode(txt)).trim().replace(//gi, \"
\");\n const init2 = utils.detectInit(txt);\n if (init2) {\n log$1.debug(\"Detected early reinit: \", init2);\n }\n try {\n const { svg, bindFunctions } = await render(id2, txt, element);\n element.innerHTML = svg;\n if (postRenderCallback) {\n await postRenderCallback(id2);\n }\n if (bindFunctions) {\n bindFunctions(element);\n }\n } catch (error) {\n handleError(error, errors, mermaid.parseError);\n }\n }\n if (errors.length > 0) {\n throw errors[0];\n }\n};\nconst initialize = function(config2) {\n mermaidAPI.initialize(config2);\n};\nconst init = async function(config2, nodes, callback) {\n log$1.warn(\"mermaid.init is deprecated. Please use run instead.\");\n if (config2) {\n initialize(config2);\n }\n const runOptions = { postRenderCallback: callback, querySelector: \".mermaid\" };\n if (typeof nodes === \"string\") {\n runOptions.querySelector = nodes;\n } else if (nodes) {\n if (nodes instanceof HTMLElement) {\n runOptions.nodes = [nodes];\n } else {\n runOptions.nodes = nodes;\n }\n }\n await run(runOptions);\n};\nconst registerExternalDiagrams = async (diagrams2, {\n lazyLoad = true\n} = {}) => {\n registerLazyLoadedDiagrams(...diagrams2);\n if (lazyLoad === false) {\n await loadRegisteredDiagrams();\n }\n};\nconst contentLoaded = function() {\n if (mermaid.startOnLoad) {\n const { startOnLoad } = mermaidAPI.getConfig();\n if (startOnLoad) {\n mermaid.run().catch((err) => log$1.error(\"Mermaid failed to initialize\", err));\n }\n }\n};\nif (typeof document !== \"undefined\") {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener(\"load\", contentLoaded, false);\n}\nconst setParseErrorHandler = function(parseErrorHandler) {\n mermaid.parseError = parseErrorHandler;\n};\nconst executionQueue = [];\nlet executionQueueRunning = false;\nconst executeQueue = async () => {\n if (executionQueueRunning) {\n return;\n }\n executionQueueRunning = true;\n while (executionQueue.length > 0) {\n const f = executionQueue.shift();\n if (f) {\n try {\n await f();\n } catch (e) {\n log$1.error(\"Error executing queue\", e);\n }\n }\n }\n executionQueueRunning = false;\n};\nconst parse = async (text, parseOptions) => {\n return new Promise((resolve, reject) => {\n const performCall = () => new Promise((res, rej) => {\n mermaidAPI.parse(text, parseOptions).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n var _a;\n log$1.error(\"Error parsing\", e);\n (_a = mermaid.parseError) == null ? void 0 : _a.call(mermaid, e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\nconst render = (id2, text, container) => {\n return new Promise((resolve, reject) => {\n const performCall = () => new Promise((res, rej) => {\n mermaidAPI.render(id2, text, container).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n var _a;\n log$1.error(\"Error parsing\", e);\n (_a = mermaid.parseError) == null ? void 0 : _a.call(mermaid, e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\nconst mermaid = {\n startOnLoad: true,\n mermaidAPI,\n parse,\n render,\n init,\n run,\n registerExternalDiagrams,\n initialize,\n parseError: void 0,\n contentLoaded,\n setParseErrorHandler,\n detectType\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9tZXJtYWlkLWIwYWQyZGUxLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1DO0FBQ1Q7QUFDNEI7QUFDdVM7QUFDM1Q7QUFDcUM7QUFDNUI7QUFDWTtBQUNaO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQ0FBSztBQUNwQixjQUFjLE1BQU0sSUFBSSxPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQ0FBa0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxxQ0FBcUMsc0JBQXNCO0FBQzNELHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0NBQWtCO0FBQzdCLElBQUk7QUFDSixXQUFXLCtDQUFrQjtBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsWUFBWTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFO0FBQzNFO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGdCQUFnQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGVBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDBCQUEwQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyx5QkFBeUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2YsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsZ0JBQWdCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixzR0FBc0csa0NBQWtDO0FBQ3hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsYUFBYTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsYUFBYTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQkFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLEVBQUU7QUFDekM7QUFDQSxzQ0FBc0MsRUFBRSxlQUFlLEVBQUUsWUFBWTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxxQkFBcUI7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQSxnREFBZ0Qsa0JBQWtCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msa0JBQWtCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsa0JBQWtCO0FBQ3JFO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDhFQUE4RTtBQUM5RSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0lBQWdJO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsOERBQThELHNCQUFzQjtBQUNwRjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YscUVBQXFFO0FBQ3JFLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixnRUFBZ0U7QUFDaEUsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLCtEQUErRDtBQUMvRDtBQUNBLG9FQUFvRSwwQkFBMEI7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsMERBQTBELDBCQUEwQjtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0JBQW9CLFFBQVEsb01BQW9DO0FBQzFFLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0JBQW9CLFFBQVEsME1BQXVDO0FBQzdFLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0JBQW9CLFFBQVEsb01BQW9DO0FBQzFFLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0JBQW9CLFFBQVEsME1BQXVDO0FBQzdFLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLG9CQUFvQixRQUFRLHdNQUFzQztBQUM1RSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwQ0FBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3Q0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9tZXJtYWlkLWIwYWQyZGUxLmpzPzJiNjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVkZW50IH0gZnJvbSBcInRzLWRlZGVudFwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgc2FuaXRpemVVcmwgfSBmcm9tIFwiQGJyYWludHJlZS9zYW5pdGl6ZS11cmxcIjtcbmltcG9ydCB7IHNlbGVjdCwgY3VydmVCYXNpcywgY3VydmVCYXNpc0Nsb3NlZCwgY3VydmVCYXNpc09wZW4sIGN1cnZlQnVtcFgsIGN1cnZlQnVtcFksIGN1cnZlQnVuZGxlLCBjdXJ2ZUNhcmRpbmFsQ2xvc2VkLCBjdXJ2ZUNhcmRpbmFsT3BlbiwgY3VydmVDYXJkaW5hbCwgY3VydmVDYXRtdWxsUm9tQ2xvc2VkLCBjdXJ2ZUNhdG11bGxSb21PcGVuLCBjdXJ2ZUNhdG11bGxSb20sIGN1cnZlTGluZWFyLCBjdXJ2ZUxpbmVhckNsb3NlZCwgY3VydmVNb25vdG9uZVgsIGN1cnZlTW9ub3RvbmVZLCBjdXJ2ZU5hdHVyYWwsIGN1cnZlU3RlcCwgY3VydmVTdGVwQWZ0ZXIsIGN1cnZlU3RlcEJlZm9yZSB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IERPTVB1cmlmeSBmcm9tIFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgeyBhZGp1c3QsIGludmVydCwgZGFya2VuLCBsaWdodGVuLCBpc0RhcmssIHJnYmEgfSBmcm9tIFwia2hyb21hXCI7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZSwgY29tcGlsZSwgc3RyaW5naWZ5IH0gZnJvbSBcInN0eWxpc1wiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5jb25zdCBMRVZFTFMgPSB7XG4gIHRyYWNlOiAwLFxuICBkZWJ1ZzogMSxcbiAgaW5mbzogMixcbiAgd2FybjogMyxcbiAgZXJyb3I6IDQsXG4gIGZhdGFsOiA1XG59O1xuY29uc3QgbG9nJDEgPSB7XG4gIHRyYWNlOiAoLi4uX2FyZ3MpID0+IHtcbiAgfSxcbiAgZGVidWc6ICguLi5fYXJncykgPT4ge1xuICB9LFxuICBpbmZvOiAoLi4uX2FyZ3MpID0+IHtcbiAgfSxcbiAgd2FybjogKC4uLl9hcmdzKSA9PiB7XG4gIH0sXG4gIGVycm9yOiAoLi4uX2FyZ3MpID0+IHtcbiAgfSxcbiAgZmF0YWw6ICguLi5fYXJncykgPT4ge1xuICB9XG59O1xuY29uc3Qgc2V0TG9nTGV2ZWwkMSA9IGZ1bmN0aW9uKGxldmVsID0gXCJmYXRhbFwiKSB7XG4gIGxldCBudW1lcmljTGV2ZWwgPSBMRVZFTFMuZmF0YWw7XG4gIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXZlbCA9IGxldmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxldmVsIGluIExFVkVMUykge1xuICAgICAgbnVtZXJpY0xldmVsID0gTEVWRUxTW2xldmVsXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiKSB7XG4gICAgbnVtZXJpY0xldmVsID0gbGV2ZWw7XG4gIH1cbiAgbG9nJDEudHJhY2UgPSAoKSA9PiB7XG4gIH07XG4gIGxvZyQxLmRlYnVnID0gKCkgPT4ge1xuICB9O1xuICBsb2ckMS5pbmZvID0gKCkgPT4ge1xuICB9O1xuICBsb2ckMS53YXJuID0gKCkgPT4ge1xuICB9O1xuICBsb2ckMS5lcnJvciA9ICgpID0+IHtcbiAgfTtcbiAgbG9nJDEuZmF0YWwgPSAoKSA9PiB7XG4gIH07XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLmZhdGFsKSB7XG4gICAgbG9nJDEuZmF0YWwgPSBjb25zb2xlLmVycm9yID8gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsIGZvcm1hdChcIkZBVEFMXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzVtXCIsIGZvcm1hdChcIkZBVEFMXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy5lcnJvcikge1xuICAgIGxvZyQxLmVycm9yID0gY29uc29sZS5lcnJvciA/IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLCBmb3JtYXQoXCJFUlJPUlwiKSwgXCJjb2xvcjogb3JhbmdlXCIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlLCBcIlxceDFCWzMxbVwiLCBmb3JtYXQoXCJFUlJPUlwiKSk7XG4gIH1cbiAgaWYgKG51bWVyaWNMZXZlbCA8PSBMRVZFTFMud2Fybikge1xuICAgIGxvZyQxLndhcm4gPSBjb25zb2xlLndhcm4gPyBjb25zb2xlLndhcm4uYmluZChjb25zb2xlLCBmb3JtYXQoXCJXQVJOXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIGBcXHgxQlszM21gLCBmb3JtYXQoXCJXQVJOXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy5pbmZvKSB7XG4gICAgbG9nJDEuaW5mbyA9IGNvbnNvbGUuaW5mbyA/IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUsIGZvcm1hdChcIklORk9cIiksIFwiY29sb3I6IGxpZ2h0Ymx1ZVwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszNG1cIiwgZm9ybWF0KFwiSU5GT1wiKSk7XG4gIH1cbiAgaWYgKG51bWVyaWNMZXZlbCA8PSBMRVZFTFMuZGVidWcpIHtcbiAgICBsb2ckMS5kZWJ1ZyA9IGNvbnNvbGUuZGVidWcgPyBjb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSwgZm9ybWF0KFwiREVCVUdcIiksIFwiY29sb3I6IGxpZ2h0Z3JlZW5cIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzJtXCIsIGZvcm1hdChcIkRFQlVHXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy50cmFjZSkge1xuICAgIGxvZyQxLnRyYWNlID0gY29uc29sZS5kZWJ1ZyA/IGNvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLCBmb3JtYXQoXCJUUkFDRVwiKSwgXCJjb2xvcjogbGlnaHRncmVlblwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszMm1cIiwgZm9ybWF0KFwiVFJBQ0VcIikpO1xuICB9XG59O1xuY29uc3QgZm9ybWF0ID0gKGxldmVsKSA9PiB7XG4gIGNvbnN0IHRpbWUgPSBkYXlqcygpLmZvcm1hdChcInNzLlNTU1wiKTtcbiAgcmV0dXJuIGAlYyR7dGltZX0gOiAke2xldmVsfSA6IGA7XG59O1xuY29uc3QgbGluZUJyZWFrUmVnZXggPSAvPGJyXFxzKlxcLz8+L2dpO1xuY29uc3QgZ2V0Um93cyA9IChzKSA9PiB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBbXCJcIl07XG4gIH1cbiAgY29uc3Qgc3RyMiA9IGJyZWFrVG9QbGFjZWhvbGRlcihzKS5yZXBsYWNlKC9cXFxcbi9nLCBcIiNiciNcIik7XG4gIHJldHVybiBzdHIyLnNwbGl0KFwiI2JyI1wiKTtcbn07XG5jb25zdCByZW1vdmVTY3JpcHQgPSAodHh0KSA9PiB7XG4gIHJldHVybiBET01QdXJpZnkuc2FuaXRpemUodHh0KTtcbn07XG5jb25zdCBzYW5pdGl6ZU1vcmUgPSAodGV4dCwgY29uZmlnMikgPT4ge1xuICB2YXIgX2E7XG4gIGlmICgoKF9hID0gY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5odG1sTGFiZWxzKSAhPT0gZmFsc2UpIHtcbiAgICBjb25zdCBsZXZlbCA9IGNvbmZpZzIuc2VjdXJpdHlMZXZlbDtcbiAgICBpZiAobGV2ZWwgPT09IFwiYW50aXNjcmlwdFwiIHx8IGxldmVsID09PSBcInN0cmljdFwiKSB7XG4gICAgICB0ZXh0ID0gcmVtb3ZlU2NyaXB0KHRleHQpO1xuICAgIH0gZWxzZSBpZiAobGV2ZWwgIT09IFwibG9vc2VcIikge1xuICAgICAgdGV4dCA9IGJyZWFrVG9QbGFjZWhvbGRlcih0ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpO1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPS9nLCBcIiZlcXVhbHM7XCIpO1xuICAgICAgdGV4dCA9IHBsYWNlaG9sZGVyVG9CcmVhayh0ZXh0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59O1xuY29uc3Qgc2FuaXRpemVUZXh0JDIgPSAodGV4dCwgY29uZmlnMikgPT4ge1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICBpZiAoY29uZmlnMi5kb21wdXJpZnlDb25maWcpIHtcbiAgICB0ZXh0ID0gRE9NUHVyaWZ5LnNhbml0aXplKHNhbml0aXplTW9yZSh0ZXh0LCBjb25maWcyKSwgY29uZmlnMi5kb21wdXJpZnlDb25maWcpLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IERPTVB1cmlmeS5zYW5pdGl6ZShzYW5pdGl6ZU1vcmUodGV4dCwgY29uZmlnMiksIHtcbiAgICAgIEZPUkJJRF9UQUdTOiBbXCJzdHlsZVwiXVxuICAgIH0pLnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59O1xuY29uc3Qgc2FuaXRpemVUZXh0T3JBcnJheSA9IChhLCBjb25maWcyKSA9PiB7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBzYW5pdGl6ZVRleHQkMihhLCBjb25maWcyKTtcbiAgfVxuICByZXR1cm4gYS5mbGF0KCkubWFwKCh4KSA9PiBzYW5pdGl6ZVRleHQkMih4LCBjb25maWcyKSk7XG59O1xuY29uc3QgaGFzQnJlYWtzID0gKHRleHQpID0+IHtcbiAgcmV0dXJuIGxpbmVCcmVha1JlZ2V4LnRlc3QodGV4dCk7XG59O1xuY29uc3Qgc3BsaXRCcmVha3MgPSAodGV4dCkgPT4ge1xuICByZXR1cm4gdGV4dC5zcGxpdChsaW5lQnJlYWtSZWdleCk7XG59O1xuY29uc3QgcGxhY2Vob2xkZXJUb0JyZWFrID0gKHMpID0+IHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvI2JyIy9nLCBcIjxici8+XCIpO1xufTtcbmNvbnN0IGJyZWFrVG9QbGFjZWhvbGRlciA9IChzKSA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UobGluZUJyZWFrUmVnZXgsIFwiI2JyI1wiKTtcbn07XG5jb25zdCBnZXRVcmwgPSAodXNlQWJzb2x1dGUpID0+IHtcbiAgbGV0IHVybCA9IFwiXCI7XG4gIGlmICh1c2VBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZUFsbCgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2VBbGwoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59O1xuY29uc3QgZXZhbHVhdGUgPSAodmFsKSA9PiB2YWwgPT09IGZhbHNlIHx8IFtcImZhbHNlXCIsIFwibnVsbFwiLCBcIjBcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbCkudHJpbSgpLnRvTG93ZXJDYXNlKCkpID8gZmFsc2UgOiB0cnVlO1xuY29uc3QgZ2V0TWF4ID0gZnVuY3Rpb24oLi4udmFsdWVzKSB7XG4gIGNvbnN0IG5ld1ZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuICFpc05hTih2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gTWF0aC5tYXgoLi4ubmV3VmFsdWVzKTtcbn07XG5jb25zdCBnZXRNaW4gPSBmdW5jdGlvbiguLi52YWx1ZXMpIHtcbiAgY29uc3QgbmV3VmFsdWVzID0gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBNYXRoLm1pbiguLi5uZXdWYWx1ZXMpO1xufTtcbmNvbnN0IHBhcnNlR2VuZXJpY1R5cGVzID0gZnVuY3Rpb24odGV4dCkge1xuICBsZXQgY2xlYW5lZFRleHQgPSB0ZXh0O1xuICBpZiAodGV4dC5zcGxpdChcIn5cIikubGVuZ3RoIC0gMSA+PSAyKSB7XG4gICAgbGV0IG5ld0NsZWFuZWRUZXh0ID0gY2xlYW5lZFRleHQ7XG4gICAgZG8ge1xuICAgICAgY2xlYW5lZFRleHQgPSBuZXdDbGVhbmVkVGV4dDtcbiAgICAgIG5ld0NsZWFuZWRUZXh0ID0gY2xlYW5lZFRleHQucmVwbGFjZSgvfihbXlxccyw6O10rKX4vLCBcIjwkMT5cIik7XG4gICAgfSB3aGlsZSAobmV3Q2xlYW5lZFRleHQgIT0gY2xlYW5lZFRleHQpO1xuICAgIHJldHVybiBwYXJzZUdlbmVyaWNUeXBlcyhuZXdDbGVhbmVkVGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNsZWFuZWRUZXh0O1xuICB9XG59O1xuY29uc3QgY29tbW9uJDEgPSB7XG4gIGdldFJvd3MsXG4gIHNhbml0aXplVGV4dDogc2FuaXRpemVUZXh0JDIsXG4gIHNhbml0aXplVGV4dE9yQXJyYXksXG4gIGhhc0JyZWFrcyxcbiAgc3BsaXRCcmVha3MsXG4gIGxpbmVCcmVha1JlZ2V4LFxuICByZW1vdmVTY3JpcHQsXG4gIGdldFVybCxcbiAgZXZhbHVhdGUsXG4gIGdldE1heCxcbiAgZ2V0TWluXG59O1xuY29uc3QgbWtCb3JkZXIgPSAoY29sLCBkYXJrTW9kZSkgPT4gZGFya01vZGUgPyBhZGp1c3QoY29sLCB7IHM6IC00MCwgbDogMTAgfSkgOiBhZGp1c3QoY29sLCB7IHM6IC00MCwgbDogLTEwIH0pO1xuY29uc3Qgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gXCIjZmZmZmZmXCI7XG5jb25zdCBvbGRBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuID0gXCIjZjJmMmYyXCI7XG5sZXQgVGhlbWUkNCA9IGNsYXNzIFRoZW1lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5wcmltYXJ5Q29sb3IgPSBcIiNmZmY0ZGRcIjtcbiAgICB0aGlzLm5vdGVCa2dDb2xvciA9IFwiI2ZmZjVhZFwiO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuVEhFTUVfQ09MT1JfTElNSVQgPSAxMjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5wcmltYXJ5VGV4dENvbG9yID0gdGhpcy5wcmltYXJ5VGV4dENvbG9yIHx8ICh0aGlzLmRhcmtNb2RlID8gXCIjZWVlXCIgOiBcIiMzMzNcIik7XG4gICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Q29sb3IgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0xMjAgfSk7XG4gICAgdGhpcy50ZXJ0aWFyeUNvbG9yID0gdGhpcy50ZXJ0aWFyeUNvbG9yIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxODAsIGw6IDUgfSk7XG4gICAgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLnByaW1hcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgfHwgbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yIHx8IG1rQm9yZGVyKHRoaXMudGVydGlhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLm5vdGVCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLm5vdGVCa2dDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSB0aGlzLm5vdGVCa2dDb2xvciB8fCBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLm5vdGVUZXh0Q29sb3IgfHwgXCIjMzMzXCI7XG4gICAgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IgPSB0aGlzLnNlY29uZGFyeVRleHRDb2xvciB8fCBpbnZlcnQodGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IHRoaXMudGVydGlhcnlUZXh0Q29sb3IgfHwgaW52ZXJ0KHRoaXMudGVydGlhcnlDb2xvcik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gdGhpcy5hcnJvd2hlYWRDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IHRoaXMudGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmJvcmRlcjIgPSB0aGlzLmJvcmRlcjIgfHwgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubm9kZUJrZyB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLm1haW5Ca2cgPSB0aGlzLm1haW5Ca2cgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ub2RlQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuY2x1c3RlckJrZyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5jbHVzdGVyQm9yZGVyIHx8IHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50aXRsZUNvbG9yID0gdGhpcy50aXRsZUNvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kIHx8ICh0aGlzLmRhcmtNb2RlID8gZGFya2VuKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDMwKSA6IHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMubm9kZVRleHRDb2xvciA9IHRoaXMubm9kZVRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IHRoaXMuYWN0b3JCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMuYWN0b3JCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5hY3RvckxpbmVDb2xvciB8fCBcImdyZXlcIjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmxhYmVsQm94QmtnQ29sb3IgfHwgdGhpcy5hY3RvckJrZztcbiAgICB0aGlzLnNpZ25hbENvbG9yID0gdGhpcy5zaWduYWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IHRoaXMuc2lnbmFsVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciB8fCB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLmxhYmVsVGV4dENvbG9yIHx8IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy5sb29wVGV4dENvbG9yIHx8IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3IgPSB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciB8fCBkYXJrZW4odGhpcy5zZWNvbmRhcnlDb2xvciwgMTApO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3IgPSB0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3IgfHwgaW52ZXJ0KHRoaXMubGluZUNvbG9yKTtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IHRoaXMuc2VjdGlvbkJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvciA9IHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yIHx8IFwid2hpdGVcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IHRoaXMuc2VjdGlvbkJrZ0NvbG9yIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gdGhpcy5zZWN0aW9uQmtnQ29sb3IyIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZXhjbHVkZUJrZ0NvbG9yID0gdGhpcy5leGNsdWRlQmtnQ29sb3IgfHwgXCIjZWVlZWVlXCI7XG4gICAgdGhpcy50YXNrQm9yZGVyQ29sb3IgPSB0aGlzLnRhc2tCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IHRoaXMudGFza0JrZ0NvbG9yIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yID0gdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3IgPSB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciB8fCBsaWdodGVuKHRoaXMucHJpbWFyeUNvbG9yLCAyMyk7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSB0aGlzLmdyaWRDb2xvciB8fCBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMuZG9uZVRhc2tCa2dDb2xvciB8fCBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvciA9IHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvciB8fCBcImdyZXlcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IHRoaXMuY3JpdEJvcmRlckNvbG9yIHx8IFwiI2ZmODg4OFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gdGhpcy5jcml0QmtnQ29sb3IgfHwgXCJyZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gdGhpcy50b2RheUxpbmVDb2xvciB8fCBcInJlZFwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IHRoaXMudGFza1RleHREYXJrQ29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yIHx8IFwiIzAwMzE2M1wiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wZXJzb25Cb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLnBlcnNvbkJrZyB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5jb21wb3NpdGVCb3JkZXIgPSB0aGlzLmNvbXBvc2l0ZUJvcmRlciB8fCB0aGlzLm5vZGVCb3JkZXI7XG4gICAgdGhpcy5pbm5lckVuZEJhY2tncm91bmQgPSB0aGlzLm5vZGVCb3JkZXI7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5zcGVjaWFsU3RhdGVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMCA9IHRoaXMuY1NjYWxlMCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTEgPSB0aGlzLmNTY2FsZTEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTIgPSB0aGlzLmNTY2FsZTIgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMyA9IHRoaXMuY1NjYWxlMyB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAgfSk7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmNTY2FsZTUgPSB0aGlzLmNTY2FsZTUgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDkwIH0pO1xuICAgIHRoaXMuY1NjYWxlNiA9IHRoaXMuY1NjYWxlNiB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuY1NjYWxlNyA9IHRoaXMuY1NjYWxlNyB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTUwIH0pO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMjEwLCBsOiAxNTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDMwMCB9KTtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIGlmICh0aGlzLmRhcmtNb2RlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgICB0aGlzW1wiY1NjYWxlXCIgKyBpXSA9IGRhcmtlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgNzUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgICB0aGlzW1wiY1NjYWxlXCIgKyBpXSA9IGRhcmtlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMjUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUludlwiICsgaV0gPSB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSB8fCBpbnZlcnQodGhpc1tcImNTY2FsZVwiICsgaV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgICAgdGhpc1tcImNTY2FsZVBlZXJcIiArIGldID0gdGhpc1tcImNTY2FsZVBlZXJcIiArIGldIHx8IGxpZ2h0ZW4odGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW4odGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPSB0aGlzLnNjYWxlTGFiZWxDb2xvciB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldID0gdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSB8fCB0aGlzLnNjYWxlTGFiZWxDb2xvcjtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGllciA9IHRoaXMuZGFya01vZGUgPyAtNCA6IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0KHRoaXMubWFpbkJrZywgeyBoOiAxODAsIHM6IC0xNSwgbDogbXVsdGlwbGllciAqICg1ICsgaSAqIDMpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0KHRoaXMubWFpbkJrZywgeyBoOiAxODAsIHM6IC0xNSwgbDogbXVsdGlwbGllciAqICg4ICsgaSAqIDMpIH0pO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzVGV4dCA9IHRoaXMuY2xhc3NUZXh0IHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUwID0gdGhpcy5maWxsVHlwZTAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTEgPSB0aGlzLmZpbGxUeXBlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUyID0gdGhpcy5maWxsVHlwZTIgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gdGhpcy5maWxsVHlwZTMgfHwgYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSB0aGlzLmZpbGxUeXBlNCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU1ID0gdGhpcy5maWxsVHlwZTUgfHwgYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gdGhpcy5maWxsVHlwZTYgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IHRoaXMuZmlsbFR5cGU3IHx8IGFkanVzdCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLnBpZTEgPSB0aGlzLnBpZTEgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5waWUyID0gdGhpcy5waWUyIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5waWUzID0gdGhpcy5waWUzIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLnBpZTQgPSB0aGlzLnBpZTQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTUgPSB0aGlzLnBpZTUgfHwgYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgbDogLTEwIH0pO1xuICAgIHRoaXMucGllNiA9IHRoaXMucGllNiB8fCBhZGp1c3QodGhpcy50ZXJ0aWFyeUNvbG9yLCB7IGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTcgPSB0aGlzLnBpZTcgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTkgPSB0aGlzLnBpZTkgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCwgbDogMCB9KTtcbiAgICB0aGlzLnBpZTEwID0gdGhpcy5waWUxMCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC0yMCB9KTtcbiAgICB0aGlzLnBpZTExID0gdGhpcy5waWUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCwgbDogLTEwIH0pO1xuICAgIHRoaXMucGllVGl0bGVUZXh0U2l6ZSA9IHRoaXMucGllVGl0bGVUZXh0U2l6ZSB8fCBcIjI1cHhcIjtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dENvbG9yID0gdGhpcy5waWVUaXRsZVRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRTaXplID0gdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yID0gdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dFNpemUgPSB0aGlzLnBpZUxlZ2VuZFRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dENvbG9yID0gdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVN0cm9rZUNvbG9yID0gdGhpcy5waWVTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVTdHJva2VXaWR0aCA9IHRoaXMucGllU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggPSB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllT3BhY2l0eSA9IHRoaXMucGllT3BhY2l0eSB8fCBcIjAuN1wiO1xuICAgIHRoaXMucXVhZHJhbnQxRmlsbCA9IHRoaXMucXVhZHJhbnQxRmlsbCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MkZpbGwgPSB0aGlzLnF1YWRyYW50MkZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDUsIGc6IDUsIGI6IDUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNGaWxsID0gdGhpcy5xdWFkcmFudDNGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTUsIGc6IDE1LCBiOiAxNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50MVRleHRGaWxsID0gdGhpcy5xdWFkcmFudDFUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtNSwgZzogLTUsIGI6IC01IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50M1RleHRGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xNSwgZzogLTE1LCBiOiAtMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludEZpbGwgfHwgaXNEYXJrKHRoaXMucXVhZHJhbnQxRmlsbCkgPyBsaWdodGVuKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4odGhpcy5xdWFkcmFudDFGaWxsKTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50VGl0bGVGaWxsID0gdGhpcy5xdWFkcmFudFRpdGxlRmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgPSB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSB8fCBcIjFcIjtcbiAgICB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yID0gdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkNvbG9yID0gdGhpcy5yZWxhdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgPSB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kIHx8ICh0aGlzLmRhcmtNb2RlID8gZGFya2VuKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDMwKSA6IHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbENvbG9yID0gdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmdpdDAgPSB0aGlzLmdpdDAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5naXQxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5naXQyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLmdpdDMgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02MCB9KTtcbiAgICB0aGlzLmdpdDUgPSB0aGlzLmdpdDUgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLmdpdDYgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIGlmICh0aGlzLmRhcmtNb2RlKSB7XG4gICAgICB0aGlzLmdpdDAgPSBsaWdodGVuKHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gbGlnaHRlbih0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4odGhpcy5naXQyLCAyNSk7XG4gICAgICB0aGlzLmdpdDMgPSBsaWdodGVuKHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gbGlnaHRlbih0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGxpZ2h0ZW4odGhpcy5naXQ1LCAyNSk7XG4gICAgICB0aGlzLmdpdDYgPSBsaWdodGVuKHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gbGlnaHRlbih0aGlzLmdpdDcsIDI1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5naXQwID0gZGFya2VuKHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gZGFya2VuKHRoaXMuZ2l0MSwgMjUpO1xuICAgICAgdGhpcy5naXQyID0gZGFya2VuKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gZGFya2VuKHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gZGFya2VuKHRoaXMuZ2l0NCwgMjUpO1xuICAgICAgdGhpcy5naXQ1ID0gZGFya2VuKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gZGFya2VuKHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gZGFya2VuKHRoaXMuZ2l0NywgMjUpO1xuICAgIH1cbiAgICB0aGlzLmdpdEludjAgPSB0aGlzLmdpdEludjAgfHwgaW52ZXJ0KHRoaXMuZ2l0MCk7XG4gICAgdGhpcy5naXRJbnYxID0gdGhpcy5naXRJbnYxIHx8IGludmVydCh0aGlzLmdpdDEpO1xuICAgIHRoaXMuZ2l0SW52MiA9IHRoaXMuZ2l0SW52MiB8fCBpbnZlcnQodGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0KHRoaXMuZ2l0Myk7XG4gICAgdGhpcy5naXRJbnY0ID0gdGhpcy5naXRJbnY0IHx8IGludmVydCh0aGlzLmdpdDQpO1xuICAgIHRoaXMuZ2l0SW52NSA9IHRoaXMuZ2l0SW52NSB8fCBpbnZlcnQodGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0KHRoaXMuZ2l0Nik7XG4gICAgdGhpcy5naXRJbnY3ID0gdGhpcy5naXRJbnY3IHx8IGludmVydCh0aGlzLmdpdDcpO1xuICAgIHRoaXMuYnJhbmNoTGFiZWxDb2xvciA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvciB8fCAodGhpcy5kYXJrTW9kZSA/IFwiYmxhY2tcIiA6IHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwwID0gdGhpcy5naXRCcmFuY2hMYWJlbDAgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwyID0gdGhpcy5naXRCcmFuY2hMYWJlbDIgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwzID0gdGhpcy5naXRCcmFuY2hMYWJlbDMgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5naXRCcmFuY2hMYWJlbDUgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw2ID0gdGhpcy5naXRCcmFuY2hMYWJlbDYgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiB8fCBvbGRBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xuY29uc3QgZ2V0VGhlbWVWYXJpYWJsZXMkNCA9ICh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lMiA9IG5ldyBUaGVtZSQ0KCk7XG4gIHRoZW1lMi5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTI7XG59O1xubGV0IFRoZW1lJDMgPSBjbGFzcyBUaGVtZTIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiMzMzNcIjtcbiAgICB0aGlzLnByaW1hcnlDb2xvciA9IFwiIzFmMjAyMFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuKHRoaXMucHJpbWFyeUNvbG9yLCAxNik7XG4gICAgdGhpcy50ZXJ0aWFyeUNvbG9yID0gYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0xNjAgfSk7XG4gICAgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IgPSBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMudGVydGlhcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydCh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMudGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy5tYWluQmtnID0gXCIjMWYyMDIwXCI7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm1haW5Db250cmFzdENvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRhcmtUZXh0Q29sb3IgPSBsaWdodGVuKGludmVydChcIiMzMjNENDdcIiksIDEwKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYm9yZGVyMSA9IFwiIzgxQjFEQlwiO1xuICAgIHRoaXMuYm9yZGVyMiA9IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250U2l6ZSA9IFwiMTZweFwiO1xuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kID0gXCIjMTgxODE4XCI7XG4gICAgdGhpcy50ZXh0Q29sb3IgPSBcIiNjY2NcIjtcbiAgICB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUID0gMTI7XG4gICAgdGhpcy5ub2RlQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5jbHVzdGVyQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kZWZhdWx0TGlua0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50aXRsZUNvbG9yID0gXCIjRjlGRkZFXCI7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxCb3hCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJrZ0NvbG9yID0gXCIjZmZmNWFkXCI7XG4gICAgdGhpcy5ub3RlVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IGRhcmtlbihcIiNFQUU4RDlcIiwgMzApO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjRUFFOEQ5XCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBkYXJrZW4odGhpcy5zZWN0aW9uQmtnQ29sb3IsIDEwKTtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHJnYmEoMjU1LCAyNTUsIDI1NSwgNzApO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSByZ2JhKDI1NSwgMjU1LCAyNTUsIDUwKTtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiIzgxQjFEQlwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gXCJncmV5XCI7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBcIiNFODM3MzdcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiI0U4MzczN1wiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCIjREI1NzU3XCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiNhNDQxNDFcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjZGRkXCI7XG4gIH1cbiAgdXBkYXRlQ29sb3JzKCkge1xuICAgIHRoaXMuc2Vjb25kQmtnID0gbGlnaHRlbih0aGlzLm1haW5Ca2csIDE2KTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5ub2RlQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLmNsdXN0ZXJCa2cgPSB0aGlzLnNlY29uZEJrZztcbiAgICB0aGlzLmNsdXN0ZXJCb3JkZXIgPSB0aGlzLmJvcmRlcjI7XG4gICAgdGhpcy5kZWZhdWx0TGlua0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gbGlnaHRlbih0aGlzLmxhYmVsQmFja2dyb3VuZCwgMjUpO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSB0aGlzLmJvcmRlcjE7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLnNpZ25hbENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gdGhpcy5hY3RvckJrZztcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMubm90ZUJrZ0NvbG9yID0gdGhpcy5zZWNvbmRCa2c7XG4gICAgdGhpcy5ub3RlVGV4dENvbG9yID0gdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3IgPSB0aGlzLmJvcmRlcjE7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSB0aGlzLnNlY29uZEJrZztcbiAgICB0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvciA9IHRoaXMuYmFja2dyb3VuZDtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IGxpZ2h0ZW4odGhpcy5tYWluQmtnLCAyMyk7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy5kYXJrVGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IHRoaXMuZGFya1RleHRDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25Db2xvciA9IHRoaXMudHJhbnNpdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVMYWJlbENvbG9yID0gdGhpcy5zdGF0ZUxhYmVsQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUJrZyA9IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yIHx8IHRoaXMuc3RhdGVCa2c7XG4gICAgdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kID0gdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kIHx8IHRoaXMuYmFja2dyb3VuZCB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5hbHRCYWNrZ3JvdW5kID0gdGhpcy5hbHRCYWNrZ3JvdW5kIHx8IFwiIzU1NVwiO1xuICAgIHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kID0gdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQm9yZGVyID0gdGhpcy5jb21wb3NpdGVCb3JkZXIgfHwgdGhpcy5ub2RlQm9yZGVyO1xuICAgIHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5zcGVjaWFsU3RhdGVDb2xvciA9IFwiI2Y0ZjRmNFwiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IHRoaXMuZXJyb3JCa2dDb2xvciB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5lcnJvclRleHRDb2xvciA9IHRoaXMuZXJyb3JUZXh0Q29sb3IgfHwgdGhpcy50ZXJ0aWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMCA9IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUxID0gdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMiA9IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlMyA9IGFkanVzdCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU0ID0gYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNSA9IGFkanVzdCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNiA9IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5maWxsVHlwZTcgPSBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IFwiIzBiMDAwMFwiO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCBcIiM0ZDEwMzdcIjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgXCIjM2Y1MjU4XCI7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IFwiIzRmMmYxYlwiO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBcIiM2ZTBhMGFcIjtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgXCIjM2IwMDQ4XCI7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IFwiIzk5NWEwMVwiO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBcIiMxNTQ3MDZcIjtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgXCIjMTYxNzIyXCI7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgXCIjMDAyOTZmXCI7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgXCIjMDE2MjljXCI7XG4gICAgdGhpcy5jU2NhbGUxMiA9IHRoaXMuY1NjYWxlMTIgfHwgXCIjMDEwMDI5XCI7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxNTAgfSk7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDMwMCB9KTtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGludmVydCh0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMTApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgdGhpc1tcInN1cmZhY2VcIiArIGldID0gdGhpc1tcInN1cmZhY2VcIiArIGldIHx8IGFkanVzdCh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSgtMTAgKyBpICogNCkgfSk7XG4gICAgICB0aGlzW1wic3VyZmFjZVBlZXJcIiArIGldID0gdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSB8fCBhZGp1c3QodGhpcy5tYWluQmtnLCB7IGg6IDMwLCBzOiAtMzAsIGw6IC0oLTcgKyBpICogNCkgfSk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wicGllXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVcIiArIGldO1xuICAgIH1cbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiA1LCBnOiA1LCBiOiA1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzRmlsbCA9IHRoaXMucXVhZHJhbnQzRmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTAsIGc6IDEwLCBiOiAxMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NEZpbGwgPSB0aGlzLnF1YWRyYW50NEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTUsIGc6IC01LCBiOiAtNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M1RleHRGaWxsID0gdGhpcy5xdWFkcmFudDNUZXh0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xMCwgZzogLTEwLCBiOiAtMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyayh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbih0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuY2xhc3NUZXh0ID0gdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCAodGhpcy5kYXJrTW9kZSA/IGRhcmtlbih0aGlzLnNlY29uZGFyeUNvbG9yLCAzMCkgOiB0aGlzLnNlY29uZGFyeUNvbG9yKTtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciA9IHRoaXMucmVsYXRpb25MYWJlbENvbG9yIHx8IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5naXQwID0gbGlnaHRlbih0aGlzLnNlY29uZGFyeUNvbG9yLCAyMCk7XG4gICAgdGhpcy5naXQxID0gbGlnaHRlbih0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvciwgMjApO1xuICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4odGhpcy5waWUzIHx8IHRoaXMudGVydGlhcnlDb2xvciwgMjApO1xuICAgIHRoaXMuZ2l0MyA9IGxpZ2h0ZW4odGhpcy5waWU0IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSksIDIwKTtcbiAgICB0aGlzLmdpdDQgPSBsaWdodGVuKHRoaXMucGllNSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pLCAyMCk7XG4gICAgdGhpcy5naXQ1ID0gbGlnaHRlbih0aGlzLnBpZTYgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KSwgMTApO1xuICAgIHRoaXMuZ2l0NiA9IGxpZ2h0ZW4odGhpcy5waWU3IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KSwgMTApO1xuICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4odGhpcy5waWU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSksIDIwKTtcbiAgICB0aGlzLmdpdEludjAgPSB0aGlzLmdpdEludjAgfHwgaW52ZXJ0KHRoaXMuZ2l0MCk7XG4gICAgdGhpcy5naXRJbnYxID0gdGhpcy5naXRJbnYxIHx8IGludmVydCh0aGlzLmdpdDEpO1xuICAgIHRoaXMuZ2l0SW52MiA9IHRoaXMuZ2l0SW52MiB8fCBpbnZlcnQodGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0KHRoaXMuZ2l0Myk7XG4gICAgdGhpcy5naXRJbnY0ID0gdGhpcy5naXRJbnY0IHx8IGludmVydCh0aGlzLmdpdDQpO1xuICAgIHRoaXMuZ2l0SW52NSA9IHRoaXMuZ2l0SW52NSB8fCBpbnZlcnQodGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0KHRoaXMuZ2l0Nik7XG4gICAgdGhpcy5naXRJbnY3ID0gdGhpcy5naXRJbnY3IHx8IGludmVydCh0aGlzLmdpdDcpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwwID0gdGhpcy5naXRCcmFuY2hMYWJlbDAgfHwgaW52ZXJ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDQgPSB0aGlzLmdpdEJyYW5jaExhYmVsNCB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5naXRCcmFuY2hMYWJlbDUgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDcgPSB0aGlzLmdpdEJyYW5jaExhYmVsNyB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgbGlnaHRlbih0aGlzLmJhY2tncm91bmQsIDEyKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgbGlnaHRlbih0aGlzLmJhY2tncm91bmQsIDIpO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xuY29uc3QgZ2V0VGhlbWVWYXJpYWJsZXMkMyA9ICh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lMiA9IG5ldyBUaGVtZSQzKCk7XG4gIHRoZW1lMi5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTI7XG59O1xubGV0IFRoZW1lJDIgPSBjbGFzcyBUaGVtZTMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiNmNGY0ZjRcIjtcbiAgICB0aGlzLnByaW1hcnlDb2xvciA9IFwiI0VDRUNGRlwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBcIiNmZmZmZGVcIjtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IG1rQm9yZGVyKHRoaXMucHJpbWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMudGVydGlhcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydCh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMudGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMubWFpbkJrZyA9IFwiI0VDRUNGRlwiO1xuICAgIHRoaXMuc2Vjb25kQmtnID0gXCIjZmZmZmRlXCI7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcIiMzMzMzMzNcIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiM5MzcwREJcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSBcIiNhYWFhMzNcIjtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gXCIjMzMzMzMzXCI7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRTaXplID0gXCIxNnB4XCI7XG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmQgPSBcIiNlOGU4ZThcIjtcbiAgICB0aGlzLnRleHRDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuVEhFTUVfQ09MT1JfTElNSVQgPSAxMjtcbiAgICB0aGlzLm5vZGVCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy5hY3RvckxpbmVDb2xvciA9IFwiZ3JleVwiO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxCb3hCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJrZ0NvbG9yID0gXCIjZmZmNWFkXCI7XG4gICAgdGhpcy5ub3RlVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3IgPSBcIiM2NjZcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciA9IFwiI2Y0ZjRmNFwiO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciA9IFwid2hpdGVcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q29sb3IgPSB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0RGFya0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudG9kYXlMaW5lQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IHJnYmEoMTAyLCAxMDIsIDI1NSwgMC40OSk7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjZmZmNDAwXCI7XG4gICAgdGhpcy50YXNrQm9yZGVyQ29sb3IgPSBcIiM1MzRmYmNcIjtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IFwiIzhhOTBkZFwiO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvciA9IFwiIzAwMzE2M1wiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yID0gXCIjNTM0ZmJjXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3IgPSBcIiNiZmM3ZmZcIjtcbiAgICB0aGlzLmdyaWRDb2xvciA9IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImdyZXlcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IFwiI2ZmODg4OFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnBlcnNvbkJvcmRlciA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucGVyc29uQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubGFiZWxDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjNTUyMjIyXCI7XG4gICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxNTAgfSk7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDMwMCB9KTtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMVwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMVwiXSB8fCBkYXJrZW4odGhpcy5zZWNvbmRhcnlDb2xvciwgNDUpO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMlwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMlwiXSB8fCBkYXJrZW4odGhpcy50ZXJ0aWFyeUNvbG9yLCA0MCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGFkanVzdCh0aGlzW1wiY1NjYWxlXCIgKyBpXSwgeyBoOiAxODAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0KHRoaXMubWFpbkJrZywgeyBoOiAzMCwgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0KHRoaXMubWFpbkJrZywgeyBoOiAzMCwgbDogLSg3ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLnNjYWxlTGFiZWxDb2xvciA9IHRoaXMuc2NhbGVMYWJlbENvbG9yICE9PSBcImNhbGN1bGF0ZWRcIiAmJiB0aGlzLnNjYWxlTGFiZWxDb2xvciA/IHRoaXMuc2NhbGVMYWJlbENvbG9yIDogdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICBpZiAodGhpcy5sYWJlbFRleHRDb2xvciAhPT0gXCJjYWxjdWxhdGVkXCIpIHtcbiAgICAgIHRoaXMuY1NjYWxlTGFiZWwwID0gdGhpcy5jU2NhbGVMYWJlbDAgfHwgaW52ZXJ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgICAgdGhpcy5jU2NhbGVMYWJlbDMgPSB0aGlzLmNTY2FsZUxhYmVsMyB8fCBpbnZlcnQodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgICB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldID0gdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSB0aGlzLmxhYmVsQmFja2dyb3VuZDtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gbGlnaHRlbih0aGlzLmJvcmRlcjEsIDIzKTtcbiAgICB0aGlzLmFjdG9yQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubGFiZWxCb3hCa2dDb2xvciA9IHRoaXMuYWN0b3JCa2c7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gdGhpcy5hY3RvckJvcmRlcjtcbiAgICB0aGlzLmxhYmVsVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gdGhpcy5ib3JkZXIyO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmMGYwZjBcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNCA9IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU3ID0gYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMucGllMSA9IHRoaXMucGllMSB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnBpZTIgPSB0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnBpZTMgPSB0aGlzLnBpZTMgfHwgYWRqdXN0KHRoaXMudGVydGlhcnlDb2xvciwgeyBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWU0ID0gdGhpcy5waWU0IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU1ID0gdGhpcy5waWU1IHx8IGFkanVzdCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGw6IC0zMCB9KTtcbiAgICB0aGlzLnBpZTYgPSB0aGlzLnBpZTYgfHwgYWRqdXN0KHRoaXMudGVydGlhcnlDb2xvciwgeyBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWU3ID0gdGhpcy5waWU3IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCwgbDogLTIwIH0pO1xuICAgIHRoaXMucGllOCA9IHRoaXMucGllOCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWU5ID0gdGhpcy5waWU5IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IC00MCB9KTtcbiAgICB0aGlzLnBpZTEwID0gdGhpcy5waWUxMCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC00MCB9KTtcbiAgICB0aGlzLnBpZTExID0gdGhpcy5waWUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCwgbDogLTMwIH0pO1xuICAgIHRoaXMucGllVGl0bGVUZXh0U2l6ZSA9IHRoaXMucGllVGl0bGVUZXh0U2l6ZSB8fCBcIjI1cHhcIjtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dENvbG9yID0gdGhpcy5waWVUaXRsZVRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRTaXplID0gdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yID0gdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dFNpemUgPSB0aGlzLnBpZUxlZ2VuZFRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dENvbG9yID0gdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVN0cm9rZUNvbG9yID0gdGhpcy5waWVTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVTdHJva2VXaWR0aCA9IHRoaXMucGllU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggPSB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllT3BhY2l0eSA9IHRoaXMucGllT3BhY2l0eSB8fCBcIjAuN1wiO1xuICAgIHRoaXMucXVhZHJhbnQxRmlsbCA9IHRoaXMucXVhZHJhbnQxRmlsbCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MkZpbGwgPSB0aGlzLnF1YWRyYW50MkZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDUsIGc6IDUsIGI6IDUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNGaWxsID0gdGhpcy5xdWFkcmFudDNGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTUsIGc6IDE1LCBiOiAxNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50MVRleHRGaWxsID0gdGhpcy5xdWFkcmFudDFUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtNSwgZzogLTUsIGI6IC01IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50M1RleHRGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xNSwgZzogLTE1LCBiOiAtMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludEZpbGwgfHwgaXNEYXJrKHRoaXMucXVhZHJhbnQxRmlsbCkgPyBsaWdodGVuKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4odGhpcy5xdWFkcmFudDFGaWxsKTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50VGl0bGVGaWxsID0gdGhpcy5xdWFkcmFudFRpdGxlRmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgPSB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSB8fCBcIjFcIjtcbiAgICB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yID0gdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkNvbG9yID0gdGhpcy5yZWxhdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgPSB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMubGFiZWxCYWNrZ3JvdW5kO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbENvbG9yID0gdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmdpdDAgPSB0aGlzLmdpdDAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5naXQxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5naXQyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLmdpdDMgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02MCB9KTtcbiAgICB0aGlzLmdpdDUgPSB0aGlzLmdpdDUgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLmdpdDYgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIGlmICh0aGlzLmRhcmtNb2RlKSB7XG4gICAgICB0aGlzLmdpdDAgPSBsaWdodGVuKHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gbGlnaHRlbih0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4odGhpcy5naXQyLCAyNSk7XG4gICAgICB0aGlzLmdpdDMgPSBsaWdodGVuKHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gbGlnaHRlbih0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGxpZ2h0ZW4odGhpcy5naXQ1LCAyNSk7XG4gICAgICB0aGlzLmdpdDYgPSBsaWdodGVuKHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gbGlnaHRlbih0aGlzLmdpdDcsIDI1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5naXQwID0gZGFya2VuKHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gZGFya2VuKHRoaXMuZ2l0MSwgMjUpO1xuICAgICAgdGhpcy5naXQyID0gZGFya2VuKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gZGFya2VuKHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gZGFya2VuKHRoaXMuZ2l0NCwgMjUpO1xuICAgICAgdGhpcy5naXQ1ID0gZGFya2VuKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gZGFya2VuKHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gZGFya2VuKHRoaXMuZ2l0NywgMjUpO1xuICAgIH1cbiAgICB0aGlzLmdpdEludjAgPSB0aGlzLmdpdEludjAgfHwgZGFya2VuKGludmVydCh0aGlzLmdpdDApLCAyNSk7XG4gICAgdGhpcy5naXRJbnYxID0gdGhpcy5naXRJbnYxIHx8IGludmVydCh0aGlzLmdpdDEpO1xuICAgIHRoaXMuZ2l0SW52MiA9IHRoaXMuZ2l0SW52MiB8fCBpbnZlcnQodGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0KHRoaXMuZ2l0Myk7XG4gICAgdGhpcy5naXRJbnY0ID0gdGhpcy5naXRJbnY0IHx8IGludmVydCh0aGlzLmdpdDQpO1xuICAgIHRoaXMuZ2l0SW52NSA9IHRoaXMuZ2l0SW52NSB8fCBpbnZlcnQodGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0KHRoaXMuZ2l0Nik7XG4gICAgdGhpcy5naXRJbnY3ID0gdGhpcy5naXRJbnY3IHx8IGludmVydCh0aGlzLmdpdDcpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwwID0gdGhpcy5naXRCcmFuY2hMYWJlbDAgfHwgaW52ZXJ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDQgPSB0aGlzLmdpdEJyYW5jaExhYmVsNCB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5naXRCcmFuY2hMYWJlbDUgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDcgPSB0aGlzLmdpdEJyYW5jaExhYmVsNyB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiB8fCBvbGRBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xuY29uc3QgZ2V0VGhlbWVWYXJpYWJsZXMkMiA9ICh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lMiA9IG5ldyBUaGVtZSQyKCk7XG4gIHRoZW1lMi5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTI7XG59O1xubGV0IFRoZW1lJDEgPSBjbGFzcyBUaGVtZTQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiNmNGY0ZjRcIjtcbiAgICB0aGlzLnByaW1hcnlDb2xvciA9IFwiI2NkZTQ5OFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBcIiNjZGZmYjJcIjtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5tYWluQmtnID0gXCIjY2RlNDk4XCI7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBcIiNjZGZmYjJcIjtcbiAgICB0aGlzLmxpbmVDb2xvciA9IFwiZ3JlZW5cIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiMxMzU0MGNcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSBcIiM2ZWFhNDlcIjtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gXCJncmVlblwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250U2l6ZSA9IFwiMTZweFwiO1xuICAgIHRoaXMudGVydGlhcnlDb2xvciA9IGxpZ2h0ZW4oXCIjY2RlNDk4XCIsIDEwKTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IG1rQm9yZGVyKHRoaXMucHJpbWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMudGVydGlhcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMubGluZUNvbG9yID0gaW52ZXJ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy50ZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUID0gMTI7XG4gICAgdGhpcy5ub2RlQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5jbHVzdGVyQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kZWZhdWx0TGlua0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50aXRsZUNvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gXCIjZThlOGU4XCI7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSBcImdyZXlcIjtcbiAgICB0aGlzLnNpZ25hbENvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5zaWduYWxUZXh0Q29sb3IgPSBcIiMzMzNcIjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSBcIiMzMjY5MzJcIjtcbiAgICB0aGlzLmxhYmVsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVCa2dDb2xvciA9IFwiI2ZmZjVhZFwiO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yID0gXCIjNjY2XCI7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSBcIiNmNGY0ZjRcIjtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IgPSBcIiM2ZWFhNDlcIjtcbiAgICB0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvciA9IFwid2hpdGVcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSBcIiM2ZWFhNDlcIjtcbiAgICB0aGlzLmV4Y2x1ZGVCa2dDb2xvciA9IFwiI2VlZWVlZVwiO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrQmtnQ29sb3IgPSBcIiM0ODdlM2FcIjtcbiAgICB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvciA9IFwid2hpdGVcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0RGFya0NvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcIiMwMDMxNjNcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gXCJncmV5XCI7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBcIiNmZjg4ODhcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwicmVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwicmVkXCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gXCIjNTUyMjIyXCI7XG4gICAgdGhpcy5lcnJvclRleHRDb2xvciA9IFwiIzU1MjIyMlwiO1xuICB9XG4gIHVwZGF0ZUNvbG9ycygpIHtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gZGFya2VuKHRoaXMubWFpbkJrZywgMjApO1xuICAgIHRoaXMuYWN0b3JCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gdGhpcy5hY3RvckJrZztcbiAgICB0aGlzLmxhYmVsVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gdGhpcy5ib3JkZXIyO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxNTAgfSk7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDMwMCB9KTtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMVwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMVwiXSB8fCBkYXJrZW4odGhpcy5zZWNvbmRhcnlDb2xvciwgNDUpO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMlwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMlwiXSB8fCBkYXJrZW4odGhpcy50ZXJ0aWFyeUNvbG9yLCA0MCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGFkanVzdCh0aGlzW1wiY1NjYWxlXCIgKyBpXSwgeyBoOiAxODAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgIT09IFwiY2FsY3VsYXRlZFwiICYmIHRoaXMuc2NhbGVMYWJlbENvbG9yID8gdGhpcy5zY2FsZUxhYmVsQ29sb3IgOiB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldID0gdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSB8fCB0aGlzLnNjYWxlTGFiZWxDb2xvcjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3QodGhpcy5tYWluQmtnLCB7IGg6IDMwLCBzOiAtMzAsIGw6IC0oNSArIGkgKiA1KSB9KTtcbiAgICAgIHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVBlZXJcIiArIGldIHx8IGFkanVzdCh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSg4ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLnRhc2tUZXh0Q29sb3IgPSB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciA9IHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUxhYmVsQ29sb3IgPSB0aGlzLnN0YXRlTGFiZWxDb2xvciB8fCB0aGlzLnN0YXRlQmtnIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlQmtnID0gdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciA9IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgdGhpcy5iYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmFsdEJhY2tncm91bmQgPSB0aGlzLmFsdEJhY2tncm91bmQgfHwgXCIjZjBmMGYwXCI7XG4gICAgdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5jb21wb3NpdGVCb3JkZXIgPSB0aGlzLmNvbXBvc2l0ZUJvcmRlciB8fCB0aGlzLm5vZGVCb3JkZXI7XG4gICAgdGhpcy5pbm5lckVuZEJhY2tncm91bmQgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNCA9IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU3ID0gYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMucGllMSA9IHRoaXMucGllMSB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnBpZTIgPSB0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnBpZTMgPSB0aGlzLnBpZTMgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMucGllNCA9IHRoaXMucGllNCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgbDogLTMwIH0pO1xuICAgIHRoaXMucGllNSA9IHRoaXMucGllNSB8fCBhZGp1c3QodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBsOiAtMzAgfSk7XG4gICAgdGhpcy5waWU2ID0gdGhpcy5waWU2IHx8IGFkanVzdCh0aGlzLnRlcnRpYXJ5Q29sb3IsIHsgaDogNDAsIGw6IC00MCB9KTtcbiAgICB0aGlzLnBpZTcgPSB0aGlzLnBpZTcgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTkgPSB0aGlzLnBpZTkgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCwgbDogMCB9KTtcbiAgICB0aGlzLnBpZTEwID0gdGhpcy5waWUxMCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC01MCB9KTtcbiAgICB0aGlzLnBpZTExID0gdGhpcy5waWUxMSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtNTAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCwgbDogLTUwIH0pO1xuICAgIHRoaXMucGllVGl0bGVUZXh0U2l6ZSA9IHRoaXMucGllVGl0bGVUZXh0U2l6ZSB8fCBcIjI1cHhcIjtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dENvbG9yID0gdGhpcy5waWVUaXRsZVRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRTaXplID0gdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yID0gdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dFNpemUgPSB0aGlzLnBpZUxlZ2VuZFRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dENvbG9yID0gdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVN0cm9rZUNvbG9yID0gdGhpcy5waWVTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVTdHJva2VXaWR0aCA9IHRoaXMucGllU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggPSB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllT3BhY2l0eSA9IHRoaXMucGllT3BhY2l0eSB8fCBcIjAuN1wiO1xuICAgIHRoaXMucXVhZHJhbnQxRmlsbCA9IHRoaXMucXVhZHJhbnQxRmlsbCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MkZpbGwgPSB0aGlzLnF1YWRyYW50MkZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDUsIGc6IDUsIGI6IDUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNGaWxsID0gdGhpcy5xdWFkcmFudDNGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTUsIGc6IDE1LCBiOiAxNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50MVRleHRGaWxsID0gdGhpcy5xdWFkcmFudDFUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtNSwgZzogLTUsIGI6IC01IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50M1RleHRGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xNSwgZzogLTE1LCBiOiAtMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludEZpbGwgfHwgaXNEYXJrKHRoaXMucXVhZHJhbnQxRmlsbCkgPyBsaWdodGVuKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4odGhpcy5xdWFkcmFudDFGaWxsKTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50VGl0bGVGaWxsID0gdGhpcy5xdWFkcmFudFRpdGxlRmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgPSB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgPSB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSB8fCBcIjFcIjtcbiAgICB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yID0gdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkNvbG9yID0gdGhpcy5yZWxhdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgPSB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZDtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciA9IHRoaXMucmVsYXRpb25MYWJlbENvbG9yIHx8IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5naXQwID0gdGhpcy5naXQwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MSA9IHRoaXMuZ2l0MSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MiA9IHRoaXMuZ2l0MiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQzID0gdGhpcy5naXQzIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSk7XG4gICAgdGhpcy5naXQ0ID0gdGhpcy5naXQ0IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSk7XG4gICAgdGhpcy5naXQ1ID0gdGhpcy5naXQ1IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtOTAgfSk7XG4gICAgdGhpcy5naXQ2ID0gdGhpcy5naXQ2IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmdpdDcgPSB0aGlzLmdpdDcgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KTtcbiAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgdGhpcy5naXQwID0gbGlnaHRlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGxpZ2h0ZW4odGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBsaWdodGVuKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gbGlnaHRlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGxpZ2h0ZW4odGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBsaWdodGVuKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gbGlnaHRlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4odGhpcy5naXQ3LCAyNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGRhcmtlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGRhcmtlbih0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGRhcmtlbih0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGRhcmtlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGRhcmtlbih0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGRhcmtlbih0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGRhcmtlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGRhcmtlbih0aGlzLmdpdDcsIDI1KTtcbiAgICB9XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQodGhpcy5naXQ3KTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwwIHx8IGludmVydCh0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwxIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDIgPSB0aGlzLmdpdEJyYW5jaExhYmVsMiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwzID0gdGhpcy5naXRCcmFuY2hMYWJlbDMgfHwgaW52ZXJ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDYgPSB0aGlzLmdpdEJyYW5jaExhYmVsNiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbmNvbnN0IGdldFRoZW1lVmFyaWFibGVzJDEgPSAodXNlck92ZXJyaWRlcykgPT4ge1xuICBjb25zdCB0aGVtZTIgPSBuZXcgVGhlbWUkMSgpO1xuICB0aGVtZTIuY2FsY3VsYXRlKHVzZXJPdmVycmlkZXMpO1xuICByZXR1cm4gdGhlbWUyO1xufTtcbmNsYXNzIFRoZW1lNSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gXCIjZWVlXCI7XG4gICAgdGhpcy5jb250cmFzdCA9IFwiIzcwNzA3MFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuKHRoaXMuY29udHJhc3QsIDU1KTtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiNmZmZmZmZcIjtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IG1rQm9yZGVyKHRoaXMucHJpbWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMudGVydGlhcnlUZXh0Q29sb3IgPSBpbnZlcnQodGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydCh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMudGV4dENvbG9yID0gaW52ZXJ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy5tYWluQmtnID0gXCIjZWVlXCI7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxpbmVDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYm9yZGVyMSA9IFwiIzk5OVwiO1xuICAgIHRoaXMuYm9yZGVyMiA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZSA9IFwiI2ZmYVwiO1xuICAgIHRoaXMudGV4dCA9IFwiIzMzM1wiO1xuICAgIHRoaXMuY3JpdGljYWwgPSBcIiNkNDJcIjtcbiAgICB0aGlzLmRvbmUgPSBcIiNiYmJcIjtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gXCIjMzMzMzMzXCI7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRTaXplID0gXCIxNnB4XCI7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwid2hpdGVcIjtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcIiMwMDMxNjNcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IFwiIzU1MjIyMlwiO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBsaWdodGVuKHRoaXMuY29udHJhc3QsIDU1KTtcbiAgICB0aGlzLmJvcmRlcjIgPSB0aGlzLmNvbnRyYXN0O1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBsaWdodGVuKHRoaXMuYm9yZGVyMSwgMjMpO1xuICAgIHRoaXMuYWN0b3JCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSBcIiM5OTlcIjtcbiAgICB0aGlzLm5vdGVCa2dDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IFwiI2ZmZlwiO1xuICAgIHRoaXMuY1NjYWxlMCA9IHRoaXMuY1NjYWxlMCB8fCBcIiM1NTVcIjtcbiAgICB0aGlzLmNTY2FsZTEgPSB0aGlzLmNTY2FsZTEgfHwgXCIjRjRGNEY0XCI7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IFwiIzU1NVwiO1xuICAgIHRoaXMuY1NjYWxlMyA9IHRoaXMuY1NjYWxlMyB8fCBcIiNCQkJcIjtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgXCIjNzc3XCI7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IFwiIzk5OVwiO1xuICAgIHRoaXMuY1NjYWxlNiA9IHRoaXMuY1NjYWxlNiB8fCBcIiNERERcIjtcbiAgICB0aGlzLmNTY2FsZTcgPSB0aGlzLmNTY2FsZTcgfHwgXCIjRkZGXCI7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IFwiI0RERFwiO1xuICAgIHRoaXMuY1NjYWxlOSA9IHRoaXMuY1NjYWxlOSB8fCBcIiNCQkJcIjtcbiAgICB0aGlzLmNTY2FsZTEwID0gdGhpcy5jU2NhbGUxMCB8fCBcIiM5OTlcIjtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBcIiM3NzdcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUludlwiICsgaV0gPSB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSB8fCBpbnZlcnQodGhpc1tcImNTY2FsZVwiICsgaV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgICAgdGhpc1tcImNTY2FsZVBlZXJcIiArIGldID0gdGhpc1tcImNTY2FsZVBlZXJcIiArIGldIHx8IGxpZ2h0ZW4odGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW4odGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPSB0aGlzLnNjYWxlTGFiZWxDb2xvciB8fCAodGhpcy5kYXJrTW9kZSA/IFwiYmxhY2tcIiA6IHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXNbXCJjU2NhbGVMYWJlbDBcIl0gPSB0aGlzW1wiY1NjYWxlTGFiZWwwXCJdIHx8IHRoaXMuY1NjYWxlMTtcbiAgICB0aGlzW1wiY1NjYWxlTGFiZWwyXCJdID0gdGhpc1tcImNTY2FsZUxhYmVsMlwiXSB8fCB0aGlzLmNTY2FsZTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gPSB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldIHx8IHRoaXMuc2NhbGVMYWJlbENvbG9yO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgdGhpc1tcInN1cmZhY2VcIiArIGldID0gdGhpc1tcInN1cmZhY2VcIiArIGldIHx8IGFkanVzdCh0aGlzLm1haW5Ca2csIHsgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0KHRoaXMubWFpbkJrZywgeyBsOiAtKDggKyBpICogNSkgfSk7XG4gICAgfVxuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSB0aGlzLmJvcmRlcjE7XG4gICAgdGhpcy5jbHVzdGVyQmtnID0gdGhpcy5zZWNvbmRCa2c7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5ib3JkZXIyO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvciA9IGxpZ2h0ZW4odGhpcy5jb250cmFzdCwgMzApO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yMiA9IGxpZ2h0ZW4odGhpcy5jb250cmFzdCwgMzApO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gZGFya2VuKHRoaXMuY29udHJhc3QsIDEwKTtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IHRoaXMuY29udHJhc3Q7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IHRoaXMudGV4dDtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gbGlnaHRlbih0aGlzLmJvcmRlcjEsIDMwKTtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSB0aGlzLmRvbmU7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jcml0QmtnQ29sb3IgPSB0aGlzLmNyaXRpY2FsO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gZGFya2VuKHRoaXMuY3JpdEJrZ0NvbG9yLCAxMCk7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IHRoaXMuY3JpdEJrZ0NvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgXCIjMDAwXCI7XG4gICAgdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciA9IHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUxhYmVsQ29sb3IgPSB0aGlzLnN0YXRlTGFiZWxDb2xvciB8fCB0aGlzLnN0YXRlQmtnIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlQmtnID0gdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciA9IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgdGhpcy5iYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmFsdEJhY2tncm91bmQgPSB0aGlzLmFsdEJhY2tncm91bmQgfHwgXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5zdGF0ZUJvcmRlciA9IHRoaXMuc3RhdGVCb3JkZXIgfHwgXCIjMDAwXCI7XG4gICAgdGhpcy5pbm5lckVuZEJhY2tncm91bmQgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gXCIjMjIyXCI7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuY2xhc3NUZXh0ID0gdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUwID0gdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTEgPSB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUyID0gYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU1ID0gYWRqdXN0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IGFkanVzdCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcInBpZVwiICsgaV0gPSB0aGlzW1wiY1NjYWxlXCIgKyBpXTtcbiAgICB9XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMDtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiA1LCBnOiA1LCBiOiA1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzRmlsbCA9IHRoaXMucXVhZHJhbnQzRmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTAsIGc6IDEwLCBiOiAxMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NEZpbGwgPSB0aGlzLnF1YWRyYW50NEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTUsIGc6IC01LCBiOiAtNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M1RleHRGaWxsID0gdGhpcy5xdWFkcmFudDNUZXh0RmlsbCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xMCwgZzogLTEwLCBiOiAtMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgfHwgYWRqdXN0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyayh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbih0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IGRhcmtlbih0aGlzLnBpZTEsIDI1KSB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmdpdDEgPSB0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDIgPSB0aGlzLnBpZTMgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MyA9IHRoaXMucGllNCB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTMwIH0pO1xuICAgIHRoaXMuZ2l0NCA9IHRoaXMucGllNSB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pO1xuICAgIHRoaXMuZ2l0NSA9IHRoaXMucGllNiB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwIH0pO1xuICAgIHRoaXMuZ2l0NiA9IHRoaXMucGllNyB8fCBhZGp1c3QodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAgfSk7XG4gICAgdGhpcy5naXQ3ID0gdGhpcy5waWU4IHx8IGFkanVzdCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQodGhpcy5naXQ3KTtcbiAgICB0aGlzLmJyYW5jaExhYmVsQ29sb3IgPSB0aGlzLmJyYW5jaExhYmVsQ29sb3IgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMSA9IFwid2hpdGVcIjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMyA9IFwid2hpdGVcIjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNCA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNyA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufVxuY29uc3QgZ2V0VGhlbWVWYXJpYWJsZXMgPSAodXNlck92ZXJyaWRlcykgPT4ge1xuICBjb25zdCB0aGVtZTIgPSBuZXcgVGhlbWU1KCk7XG4gIHRoZW1lMi5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTI7XG59O1xuY29uc3QgdGhlbWUgPSB7XG4gIGJhc2U6IHtcbiAgICBnZXRUaGVtZVZhcmlhYmxlczogZ2V0VGhlbWVWYXJpYWJsZXMkNFxuICB9LFxuICBkYXJrOiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXM6IGdldFRoZW1lVmFyaWFibGVzJDNcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlcyQyXG4gIH0sXG4gIGZvcmVzdDoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlcyQxXG4gIH0sXG4gIG5ldXRyYWw6IHtcbiAgICBnZXRUaGVtZVZhcmlhYmxlc1xuICB9XG59O1xuY29uc3QgY29uZmlnID0ge1xuICAvKipcbiAgICogVGhlbWUgLCB0aGUgQ1NTIHN0eWxlIHNoZWV0XG4gICAqXG4gICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgKiB8IHRoZW1lICAgICB8IEJ1aWx0IGluIFRoZW1lcyB8IHN0cmluZyB8IE9wdGlvbmFsIHwgJ2RlZmF1bHQnLCAnZm9yZXN0JywgJ2RhcmsnLCAnbmV1dHJhbCcsICdudWxsJyB8XG4gICAqXG4gICAqICoqTm90ZXM6KiogVG8gZGlzYWJsZSBhbnkgcHJlLWRlZmluZWQgbWVybWFpZCB0aGVtZSwgdXNlIFwibnVsbFwiLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB7XG4gICAqICAgXCJ0aGVtZVwiOiBcImZvcmVzdFwiLFxuICAgKiAgIFwidGhlbWVDU1NcIjogXCIubm9kZSByZWN0IHsgZmlsbDogcmVkOyB9XCJcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHRoZW1lOiBcImRlZmF1bHRcIixcbiAgdGhlbWVWYXJpYWJsZXM6IHRoZW1lW1wiZGVmYXVsdFwiXS5nZXRUaGVtZVZhcmlhYmxlcygpLFxuICB0aGVtZUNTUzogdm9pZCAwLFxuICAvKiAqKm1heFRleHRTaXplKiogLSBUaGUgbWF4aW11bSBhbGxvd2VkIHNpemUgb2YgdGhlIHVzZXJzIHRleHQgZGlhZ3JhbSAqL1xuICBtYXhUZXh0U2l6ZTogNWU0LFxuICBkYXJrTW9kZTogZmFsc2UsXG4gIC8qKlxuICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICB8XG4gICAqIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICogfCBmb250RmFtaWx5IHwgc3BlY2lmaWVzIHRoZSBmb250IHRvIGJlIHVzZWQgaW4gdGhlIHJlbmRlcmVkIGRpYWdyYW1zIHwgc3RyaW5nIHwgUmVxdWlyZWQgfCBBbnkgUG9zc2libGUgQ1NTIEZvbnRGYW1pbHkgfFxuICAgKlxuICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLlxuICAgKi9cbiAgZm9udEZhbWlseTogJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOycsXG4gIC8qKlxuICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAqIHwgbG9nTGV2ZWwgIHwgVGhpcyBvcHRpb24gZGVjaWRlcyB0aGUgYW1vdW50IG9mIGxvZ2dpbmcgdG8gYmUgdXNlZC4gfCBzdHJpbmcgXFx8IG51bWJlciB8IFJlcXVpcmVkIHwgJ3RyYWNlJywnZGVidWcnLCdpbmZvJywnd2FybicsJ2Vycm9yJywnZmF0YWwnIHxcbiAgICpcbiAgICogKipOb3RlczoqKlxuICAgKlxuICAgKiAtIFRyYWNlOiAwXG4gICAqIC0gRGVidWc6IDFcbiAgICogLSBJbmZvOiAyXG4gICAqIC0gV2FybjogM1xuICAgKiAtIEVycm9yOiA0XG4gICAqIC0gRmF0YWw6IDUgKGRlZmF1bHQpXG4gICAqL1xuICBsb2dMZXZlbDogNSxcbiAgLyoqXG4gICAqIHwgUGFyYW1ldGVyICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgKiB8IHNlY3VyaXR5TGV2ZWwgfCBMZXZlbCBvZiB0cnVzdCBmb3IgcGFyc2VkIGRpYWdyYW0gfCBzdHJpbmcgfCBSZXF1aXJlZCB8ICdzYW5kYm94JywgJ3N0cmljdCcsICdsb29zZScsICdhbnRpc2NyaXB0JyB8XG4gICAqXG4gICAqICoqTm90ZXMqKjpcbiAgICpcbiAgICogLSAqKnN0cmljdCoqOiAoKipkZWZhdWx0KiopIEhUTUwgdGFncyBpbiB0aGUgdGV4dCBhcmUgZW5jb2RlZCBhbmQgY2xpY2sgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC5cbiAgICogLSAqKmFudGlzY3JpcHQqKjogSFRNTCB0YWdzIGluIHRleHQgYXJlIGFsbG93ZWQgKG9ubHkgc2NyaXB0IGVsZW1lbnRzIGFyZSByZW1vdmVkKSwgYW5kIGNsaWNrXG4gICAqICAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLlxuICAgKiAtICoqbG9vc2UqKjogSFRNTCB0YWdzIGluIHRleHQgYXJlIGFsbG93ZWQgYW5kIGNsaWNrIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cbiAgICogLSAqKnNhbmRib3gqKjogV2l0aCB0aGlzIHNlY3VyaXR5IGxldmVsLCBhbGwgcmVuZGVyaW5nIHRha2VzIHBsYWNlIGluIGEgc2FuZGJveGVkIGlmcmFtZS4gVGhpc1xuICAgKiAgIHByZXZlbnQgYW55IEphdmFTY3JpcHQgZnJvbSBydW5uaW5nIGluIHRoZSBjb250ZXh0LiBUaGlzIG1heSBoaW5kZXIgaW50ZXJhY3RpdmUgZnVuY3Rpb25hbGl0eVxuICAgKiAgIG9mIHRoZSBkaWFncmFtLCBsaWtlIHNjcmlwdHMsIHBvcHVwcyBpbiB0aGUgc2VxdWVuY2UgZGlhZ3JhbSwgbGlua3MgdG8gb3RoZXIgdGFicyBvciB0YXJnZXRzLCBldGMuXG4gICAqL1xuICBzZWN1cml0eUxldmVsOiBcInN0cmljdFwiLFxuICAvKipcbiAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgfFxuICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAqIHwgc3RhcnRPbkxvYWQgfCBEaWN0YXRlcyB3aGV0aGVyIG1lcm1haWQgc3RhcnRzIG9uIFBhZ2UgbG9hZCB8IGJvb2xlYW4gfCBSZXF1aXJlZCB8IHRydWUsIGZhbHNlIHxcbiAgICpcbiAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiB0cnVlXG4gICAqL1xuICBzdGFydE9uTG9hZDogdHJ1ZSxcbiAgLyoqXG4gICAqIHwgUGFyYW1ldGVyICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAqIHwgYXJyb3dNYXJrZXJBYnNvbHV0ZSB8IENvbnRyb2xzIHdoZXRoZXIgb3IgYXJyb3cgbWFya2VycyBpbiBodG1sIGNvZGUgYXJlIGFic29sdXRlIHBhdGhzIG9yIGFuY2hvcnMgfCBib29sZWFuIHwgUmVxdWlyZWQgfCB0cnVlLCBmYWxzZSB8XG4gICAqXG4gICAqICoqTm90ZXMqKjpcbiAgICpcbiAgICogVGhpcyBtYXR0ZXJzIGlmIHlvdSBhcmUgdXNpbmcgYmFzZSB0YWcgc2V0dGluZ3MuXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAqL1xuICBhcnJvd01hcmtlckFic29sdXRlOiBmYWxzZSxcbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHdoaWNoIGN1cnJlbnRDb25maWcga2V5cyBhcmUgY29uc2lkZXJlZCBfc2VjdXJlXyBhbmQgY2FuIG9ubHkgYmUgY2hhbmdlZFxuICAgKiB2aWEgY2FsbCB0byBtZXJtYWlkQVBJLmluaXRpYWxpemUuIENhbGxzIHRvIG1lcm1haWRBUEkucmVpbml0aWFsaXplIGNhbm5vdCBtYWtlIGNoYW5nZXMgdG8gdGhlXG4gICAqIGBzZWN1cmVgIGtleXMgaW4gdGhlIGN1cnJlbnQgY3VycmVudENvbmZpZy4gVGhpcyBwcmV2ZW50cyBtYWxpY2lvdXMgZ3JhcGggZGlyZWN0aXZlcyBmcm9tXG4gICAqIG92ZXJyaWRpbmcgYSBzaXRlJ3MgZGVmYXVsdCBzZWN1cml0eS5cbiAgICpcbiAgICogKipOb3RlcyoqOlxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlOiBbJ3NlY3VyZScsICdzZWN1cml0eUxldmVsJywgJ3N0YXJ0T25Mb2FkJywgJ21heFRleHRTaXplJ11cbiAgICovXG4gIHNlY3VyZTogW1wic2VjdXJlXCIsIFwic2VjdXJpdHlMZXZlbFwiLCBcInN0YXJ0T25Mb2FkXCIsIFwibWF4VGV4dFNpemVcIl0sXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBjb250cm9scyBpZiB0aGUgZ2VuZXJhdGVkIGlkcyBvZiBub2RlcyBpbiB0aGUgU1ZHIGFyZSBnZW5lcmF0ZWQgcmFuZG9tbHkgb3IgYmFzZWRcbiAgICogb24gYSBzZWVkLiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBJRHMgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBkYXRlIGFuZCB0aHVzIGFyZSBub3RcbiAgICogZGV0ZXJtaW5pc3RpYy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgICpcbiAgICogKipOb3RlcyoqOlxuICAgKlxuICAgKiBUaGlzIG1hdHRlcnMgaWYgeW91ciBmaWxlcyBhcmUgY2hlY2tlZCBpbnRvIHNvdXJjZSBjb250cm9sIGUuZy4gZ2l0IGFuZCBzaG91bGQgbm90IGNoYW5nZSB1bmxlc3NcbiAgICogY29udGVudCBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgKi9cbiAgZGV0ZXJtaW5pc3RpY0lkczogZmFsc2UsXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBpcyB0aGUgb3B0aW9uYWwgc2VlZCBmb3IgZGV0ZXJtaW5pc3RpYyBpZHMuIGlmIHNldCB0byB1bmRlZmluZWQgYnV0XG4gICAqIGRldGVybWluaXN0aWNJZHMgaXMgdHJ1ZSwgYSBzaW1wbGUgbnVtYmVyIGl0ZXJhdG9yIGlzIHVzZWQuIFlvdSBjYW4gc2V0IHRoaXMgYXR0cmlidXRlIHRvIGJhc2VcbiAgICogdGhlIHNlZWQgb24gYSBzdGF0aWMgc3RyaW5nLlxuICAgKi9cbiAgZGV0ZXJtaW5pc3RpY0lEU2VlZDogdm9pZCAwLFxuICAvKiogVGhlIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIGZvciBmbG93Y2hhcnRzICovXG4gIGZsb3djaGFydDoge1xuICAgIC8qKlxuICAgICAqICMjIyB0aXRsZVRvcE1hcmdpblxuICAgICAqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHRpdGxlVG9wTWFyZ2luIHwgTWFyZ2luIHRvcCBmb3IgdGhlIHRleHQgb3ZlciB0aGUgZmxvd2NoYXJ0ICAgICB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDI1XG4gICAgICovXG4gICAgdGl0bGVUb3BNYXJnaW46IDI1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1QYWRkaW5nIHwgQW1vdW50IG9mIHBhZGRpbmcgYXJvdW5kIHRoZSBkaWFncmFtIGFzIGEgd2hvbGUgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogVGhlIGFtb3VudCBvZiBwYWRkaW5nIGFyb3VuZCB0aGUgZGlhZ3JhbSBhcyBhIHdob2xlIHNvIHRoYXQgZW1iZWRkZWQgZGlhZ3JhbXMgaGF2ZSBtYXJnaW5zLFxuICAgICAqIGV4cHJlc3NlZCBpbiBwaXhlbHNcbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDhcbiAgICAgKi9cbiAgICBkaWFncmFtUGFkZGluZzogOCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGh0bWxMYWJlbHMgfCBGbGFnIGZvciBzZXR0aW5nIHdoZXRoZXIgb3Igbm90IGEgaHRtbCB0YWcgc2hvdWxkIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBsYWJlbHMgb24gdGhlIGVkZ2VzLiB8IGJvb2xlYW4gfCBSZXF1aXJlZCB8IHRydWUsIGZhbHNlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogdHJ1ZS5cbiAgICAgKi9cbiAgICBodG1sTGFiZWxzOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBub2RlU3BhY2luZyB8IERlZmluZXMgdGhlIHNwYWNpbmcgYmV0d2VlbiBub2RlcyBvbiB0aGUgc2FtZSBsZXZlbCB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBwb3NpdGl2ZSBOdW1iZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogUGVydGFpbnMgdG8gaG9yaXpvbnRhbCBzcGFjaW5nIGZvciBUQiAodG9wIHRvIGJvdHRvbSkgb3IgQlQgKGJvdHRvbSB0byB0b3ApIGdyYXBocywgYW5kIHRoZVxuICAgICAqIHZlcnRpY2FsIHNwYWNpbmcgZm9yIExSIGFzIHdlbGwgYXMgUkwgZ3JhcGhzLioqXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiA1MFxuICAgICAqL1xuICAgIG5vZGVTcGFjaW5nOiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHJhbmtTcGFjaW5nIHwgRGVmaW5lcyB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIG9uIGRpZmZlcmVudCBsZXZlbHMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgTnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXMqKjpcbiAgICAgKlxuICAgICAqIFBlcnRhaW5zIHRvIHZlcnRpY2FsIHNwYWNpbmcgZm9yIFRCICh0b3AgdG8gYm90dG9tKSBvciBCVCAoYm90dG9tIHRvIHRvcCksIGFuZCB0aGUgaG9yaXpvbnRhbFxuICAgICAqIHNwYWNpbmcgZm9yIExSIGFzIHdlbGwgYXMgUkwgZ3JhcGhzLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZSA1MFxuICAgICAqL1xuICAgIHJhbmtTcGFjaW5nOiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgY3VydmUgICAgIHwgRGVmaW5lcyBob3cgbWVybWFpZCByZW5kZXJzIGN1cnZlcyBmb3IgZmxvd2NoYXJ0cy4gfCBzdHJpbmcgfCBSZXF1aXJlZCB8ICdiYXNpcycsICdsaW5lYXInLCAnY2FyZGluYWwnIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIERlZmF1bHQgVmFsdWU6ICdiYXNpcydcbiAgICAgKi9cbiAgICBjdXJ2ZTogXCJiYXNpc1wiLFxuICAgIC8vIE9ubHkgdXNlZCBpbiBuZXcgZXhwZXJpbWVudGFsIHJlbmRlcmluZ1xuICAgIC8vIHJlcHJlc2VudHMgdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgbGFiZWxzIGFuZCB0aGUgc2hhcGVcbiAgICBwYWRkaW5nOiAxNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdXNlTWF4V2lkdGggfCBTZWUgbm90ZXMgICB8IGJvb2xlYW4gfCA0ICAgICAgICB8IHRydWUsIGZhbHNlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBpcyBzZXQgdG8gMTAwJSBhbmQgaXMgdGhlbiBzY2FsaW5nIHdpdGggdGhlXG4gICAgICogYXZhaWxhYmxlIHNwYWNlIGlmIG5vdCB0aGUgYWJzb2x1dGUgc3BhY2UgcmVxdWlyZWQgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICB1c2VNYXhXaWR0aDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkZWZhdWx0UmVuZGVyZXIgfCBTZWUgbm90ZXMgICB8IGJvb2xlYW4gfCA0ICAgICAgICB8IGRhZ3JlLWQzLCBkYWdyZS13cmFwcGVyLCBlbGsgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogRGVjaWRlcyB3aGljaCByZW5kZXJpbmcgZW5naW5lIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlbmRlcmluZy4gTGVnYWwgdmFsdWVzIGFyZTpcbiAgICAgKiBkYWdyZS1kMyBkYWdyZS13cmFwcGVyIC0gd3JhcHBlciBmb3IgZGFncmUgaW1wbGVtZW50ZWQgaW4gbWVybWFpZCwgZWxrIGZvciBsYXlvdXQgdXNpbmdcbiAgICAgKiBlbGtqc1xuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogJ2RhZ3JlLXdyYXBwZXInXG4gICAgICovXG4gICAgZGVmYXVsdFJlbmRlcmVyOiBcImRhZ3JlLXdyYXBwZXJcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB3cmFwcGluZ1dpZHRoICAgfCBTZWUgbm90ZXMgICB8IG51bWJlciAgfCA0ICAgICAgICB8IHdpZHRoIG9mIG5vZGVzIHdoZXJlIHRleHQgaXMgd3JhcHBlZCB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBXaGVuIHVzaW5nIG1hcmtkb3duIHN0cmluZ3MgdGhlIHRleHQgaXVzIHdyYXBwZWQgYXV0b21hdGljYWxseSwgdGhpc1xuICAgICAqIHZhbHVlIHNldHMgdGhlIG1heCB3aWR0aCBvZiBhIHRleHQgYmVmb3JlIGl0IGNvbnRpbnVlcyBvbiBhIG5ldyBsaW5lLlxuICAgICAqIERlZmF1bHQgdmFsdWU6ICdkYWdyZS13cmFwcGVyJ1xuICAgICAqL1xuICAgIHdyYXBwaW5nV2lkdGg6IDIwMFxuICB9LFxuICAvKiogVGhlIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIGZvciBzZXF1ZW5jZSBkaWFncmFtcyAqL1xuICBzZXF1ZW5jZToge1xuICAgIGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGFjdGl2YXRpb25XaWR0aCB8IFdpZHRoIG9mIHRoZSBhY3RpdmF0aW9uIHJlY3QgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlIDoxMFxuICAgICAqL1xuICAgIGFjdGl2YXRpb25XaWR0aDogMTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1NYXJnaW5YIHwgTWFyZ2luIHRvIHRoZSByaWdodCBhbmQgbGVmdCBvZiB0aGUgc2VxdWVuY2UgZGlhZ3JhbSB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDUwXG4gICAgICovXG4gICAgZGlhZ3JhbU1hcmdpblg6IDUwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkaWFncmFtTWFyZ2luWSB8IE1hcmdpbiB0byB0aGUgb3ZlciBhbmQgdW5kZXIgdGhlIHNlcXVlbmNlIGRpYWdyYW0gfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxMFxuICAgICAqL1xuICAgIGRpYWdyYW1NYXJnaW5ZOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGFjdG9yTWFyZ2luIHwgTWFyZ2luIGJldHdlZW4gYWN0b3JzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNTBcbiAgICAgKi9cbiAgICBhY3Rvck1hcmdpbjogNTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB3aWR0aCAgICAgfCBXaWR0aCBvZiBhY3RvciBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE1MFxuICAgICAqL1xuICAgIHdpZHRoOiAxNTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGhlaWdodCAgICB8IEhlaWdodCBvZiBhY3RvciBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDY1XG4gICAgICovXG4gICAgaGVpZ2h0OiA2NSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYm94TWFyZ2luIHwgTWFyZ2luIGFyb3VuZCBsb29wIGJveGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBib3hNYXJnaW46IDEwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBib3hUZXh0TWFyZ2luIHwgTWFyZ2luIGFyb3VuZCB0aGUgdGV4dCBpbiBsb29wL2FsdC9vcHQgYm94ZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiA1XG4gICAgICovXG4gICAgYm94VGV4dE1hcmdpbjogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG5vdGVNYXJnaW4gfCBtYXJnaW4gYXJvdW5kIG5vdGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBub3RlTWFyZ2luOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG1lc3NhZ2VNYXJnaW4gfCBTcGFjZSBiZXR3ZWVuIG1lc3NhZ2VzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMzVcbiAgICAgKi9cbiAgICBtZXNzYWdlTWFyZ2luOiAzNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICB8IFR5cGUgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgbWVzc2FnZUFsaWduIHwgTXVsdGlsaW5lIG1lc3NhZ2UgYWxpZ25tZW50IHwgc3RyaW5nIHwgUmVxdWlyZWQgfCAnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogJ2NlbnRlcidcbiAgICAgKi9cbiAgICBtZXNzYWdlQWxpZ246IFwiY2VudGVyXCIsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCBtaXJyb3JBY3RvcnMgfCBNaXJyb3IgYWN0b3JzIHVuZGVyIGRpYWdyYW0gfCBib29sZWFuIHwgUmVxdWlyZWQgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICBtaXJyb3JBY3RvcnM6IHRydWUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCBmb3JjZU1lbnVzIHwgZm9yY2VzIGFjdG9yIHBvcHVwIG1lbnVzIHRvIGFsd2F5cyBiZSB2aXNpYmxlICh0byBzdXBwb3J0IEUyRSB0ZXN0aW5nKS4gfCBCb29sZWFuIHwgUmVxdWlyZWQgfCBUcnVlLCBGYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZS5cbiAgICAgKi9cbiAgICBmb3JjZU1lbnVzOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYm90dG9tTWFyZ2luQWRqIHwgUHJvbG9uZ3MgdGhlIGVkZ2Ugb2YgdGhlIGRpYWdyYW0gZG93bndhcmRzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIERlcGVuZGluZyBvbiBjc3Mgc3R5bGluZyB0aGlzIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDFcbiAgICAgKi9cbiAgICBib3R0b21NYXJnaW5BZGo6IDEsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHVzZU1heFdpZHRoIHwgU2VlIE5vdGVzICAgfCBib29sZWFuIHwgUmVxdWlyZWQgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBpcyBzZXQgdG8gMTAwJSBhbmQgaXMgdGhlblxuICAgICAqIHNjYWxpbmcgd2l0aCB0aGUgYXZhaWxhYmxlIHNwYWNlLiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBhYnNvbHV0ZSBzcGFjZSByZXF1aXJlZCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdHJ1ZVxuICAgICAqL1xuICAgIHVzZU1heFdpZHRoOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHJpZ2h0QW5nbGVzIHwgZGlzcGxheSBjdXJ2ZSBhcnJvd3MgYXMgcmlnaHQgYW5nbGVzIHwgYm9vbGVhbiB8IFJlcXVpcmVkIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogVGhpcyB3aWxsIGRpc3BsYXkgYXJyb3dzIHRoYXQgc3RhcnQgYW5kIGJlZ2luIGF0IHRoZSBzYW1lIG5vZGUgYXMgcmlnaHQgYW5nbGVzLCByYXRoZXIgdGhhbiBhXG4gICAgICogY3VydmVcbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgcmlnaHRBbmdsZXM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHNob3dTZXF1ZW5jZU51bWJlcnMgfCBUaGlzIHdpbGwgc2hvdyB0aGUgbm9kZSBudW1iZXJzIHwgYm9vbGVhbiB8IFJlcXVpcmVkIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIHNob3dTZXF1ZW5jZU51bWJlcnM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBhY3RvckZvbnRTaXplIHwgVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgdGhlIGFjdG9yJ3MgZGVzY3JpcHRpb24gfCBJbnRlZ2VyIHwgUmVxdWlyZSAgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiAqKkRlZmF1bHQgdmFsdWUgMTQqKi4uXG4gICAgICovXG4gICAgYWN0b3JGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGFjdG9yRm9udEZhbWlseSB8IFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgdGhlIGFjdG9yJ3MgZGVzY3JpcHRpb24gfCBzdHJpbmcgfCBSZXF1aXJlZCB8IEFueSBQb3NzaWJsZSBDU1MgRm9udEZhbWlseSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiJ09wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJ1xuICAgICAqL1xuICAgIGFjdG9yRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgdGhlIGFjdG9yJ3MgZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNDAwLlxuICAgICAqL1xuICAgIGFjdG9yRm9udFdlaWdodDogNDAwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgbm90ZUZvbnRTaXplIHwgVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgYWN0b3ItYXR0YWNoZWQgbm90ZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNFxuICAgICAqL1xuICAgIG5vdGVGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG5vdGVGb250RmFtaWx5IHwgVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBhY3Rvci1hdHRhY2hlZCBub3Rlcy4gfCBzdHJpbmcgfCBSZXF1aXJlZCB8IEFueSBQb3NzaWJsZSBDU1MgRm9udEZhbWlseSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6ICcnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnXG4gICAgICovXG4gICAgbm90ZUZvbnRGYW1pbHk6ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiB0aGUgbm90ZSdzIGRlc2NyaXB0aW9uXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDQwMFxuICAgICAqL1xuICAgIG5vdGVGb250V2VpZ2h0OiA0MDAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgbm90ZUFsaWduIHwgVGhpcyBzZXRzIHRoZSB0ZXh0IGFsaWdubWVudCBvZiBhY3Rvci1hdHRhY2hlZCBub3RlcyB8IHN0cmluZyB8IHJlcXVpcmVkIHwgJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JyB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6ICdjZW50ZXInXG4gICAgICovXG4gICAgbm90ZUFsaWduOiBcImNlbnRlclwiLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBtZXNzYWdlRm9udFNpemUgfCBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBhY3RvciBtZXNzYWdlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBOdW1iZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNlxuICAgICAqL1xuICAgIG1lc3NhZ2VGb250U2l6ZTogMTYsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBtZXNzYWdlRm9udEZhbWlseSB8IFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgYWN0b3IgbWVzc2FnZXMgfCBzdHJpbmcgfCBSZXF1aXJlZCB8IEFueSBQb3NzaWJsZSBDU1MgRm9udEZhbWlseSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZidcbiAgICAgKi9cbiAgICBtZXNzYWdlRm9udEZhbWlseTogJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIHRoZSBtZXNzYWdlJ3MgZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNDAwLlxuICAgICAqL1xuICAgIG1lc3NhZ2VGb250V2VpZ2h0OiA0MDAsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBhdXRvLXdyYXAgc3RhdGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IGZhbHNlLlxuICAgICAqL1xuICAgIHdyYXA6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgYXV0by13cmFwIHBhZGRpbmcgZm9yIHRoZSBkaWFncmFtIChzaWRlcyBvbmx5KVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAwLlxuICAgICAqL1xuICAgIHdyYXBQYWRkaW5nOiAxMCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBsb29wLWJveCAobG9vcCwgYWx0LCBvcHQsIHBhcilcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNTAuXG4gICAgICovXG4gICAgbGFiZWxCb3hXaWR0aDogNTAsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBoZWlnaHQgb2YgdGhlIGxvb3AtYm94IChsb29wLCBhbHQsIG9wdCwgcGFyKVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAyMC5cbiAgICAgKi9cbiAgICBsYWJlbEJveEhlaWdodDogMjAsXG4gICAgbWVzc2FnZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5tZXNzYWdlRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMubWVzc2FnZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLm1lc3NhZ2VGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgbm90ZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5ub3RlRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMubm90ZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLm5vdGVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgYWN0b3JGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuYWN0b3JGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5hY3RvckZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmFjdG9yRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9XG4gIH0sXG4gIC8qKiBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgZm9yIGdhbnR0IGRpYWdyYW1zICovXG4gIGdhbnR0OiB7XG4gICAgLyoqXG4gICAgICogIyMjIHRpdGxlVG9wTWFyZ2luXG4gICAgICpcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGl0bGVUb3BNYXJnaW4gfCBNYXJnaW4gdG9wIGZvciB0aGUgdGV4dCBvdmVyIHRoZSBnYW50dCBkaWFncmFtIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMjVcbiAgICAgKi9cbiAgICB0aXRsZVRvcE1hcmdpbjogMjUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBiYXJIZWlnaHQgfCBUaGUgaGVpZ2h0IG9mIHRoZSBiYXJzIGluIHRoZSBncmFwaCB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDIwXG4gICAgICovXG4gICAgYmFySGVpZ2h0OiAyMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBiYXJHYXAgICAgfCBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIGRpZmZlcmVudCBhY3Rpdml0aWVzIGluIHRoZSBnYW50dCBkaWFncmFtIHwgSW50ZWdlciB8IE9wdGlvbmFsIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNFxuICAgICAqL1xuICAgIGJhckdhcDogNCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdG9wUGFkZGluZyB8IE1hcmdpbiBiZXR3ZWVuIHRpdGxlIGFuZCBnYW50dCBkaWFncmFtIGFuZCBiZXR3ZWVuIGF4aXMgYW5kIGdhbnR0IGRpYWdyYW0uIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNTBcbiAgICAgKi9cbiAgICB0b3BQYWRkaW5nOiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHJpZ2h0UGFkZGluZyB8IFRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBzZWN0aW9uIG5hbWUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBhY3Rpdml0aWVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNzVcbiAgICAgKi9cbiAgICByaWdodFBhZGRpbmc6IDc1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBsZWZ0UGFkZGluZyB8IFRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBzZWN0aW9uIG5hbWUgdG8gdGhlIGxlZnQgb2YgdGhlIGFjdGl2aXRpZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiA3NVxuICAgICAqL1xuICAgIGxlZnRQYWRkaW5nOiA3NSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBncmlkTGluZVN0YXJ0UGFkZGluZyB8IFZlcnRpY2FsIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBncmlkIGxpbmVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMzVcbiAgICAgKi9cbiAgICBncmlkTGluZVN0YXJ0UGFkZGluZzogMzUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBmb250U2l6ZSAgfCBGb250IHNpemUgICB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDExXG4gICAgICovXG4gICAgZm9udFNpemU6IDExLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHNlY3Rpb25Gb250U2l6ZSB8IEZvbnQgc2l6ZSBmb3Igc2VjdGlvbnMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxMVxuICAgICAqL1xuICAgIHNlY3Rpb25Gb250U2l6ZTogMTEsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBudW1iZXJTZWN0aW9uU3R5bGVzIHwgVGhlIG51bWJlciBvZiBhbHRlcm5hdGluZyBzZWN0aW9uIHN0eWxlcyB8IEludGVnZXIgfCA0ICAgICAgICB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDRcbiAgICAgKi9cbiAgICBudW1iZXJTZWN0aW9uU3R5bGVzOiA0LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIHwgVHlwZSAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuICAgICAqIHwgZGlzcGxheU1vZGUgfCBDb250cm9scyB0aGUgZGlzcGxheSBtb2RlIHwgc3RyaW5nIHwgNCAgICAgICAgfCAnY29tcGFjdCcgfFxuICAgICAqXG4gICAgICogKipOb3RlcyoqOlxuICAgICAqXG4gICAgICogLSAqKmNvbXBhY3QqKjogRW5hYmxlcyBkaXNwbGF5aW5nIG11bHRpcGxlIHRhc2tzIG9uIHRoZSBzYW1lIHJvdy5cbiAgICAgKi9cbiAgICBkaXNwbGF5TW9kZTogXCJcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgIHwgVHlwZSB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYXhpc0Zvcm1hdCB8IERhdGUvdGltZSBmb3JtYXQgb2YgdGhlIGF4aXMgfCAzICAgIHwgUmVxdWlyZWQgfCBEYXRlIGluIHl5LW1tLWRkIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFRoaXMgbWlnaHQgbmVlZCBhZGp1c3RtZW50IHRvIG1hdGNoIHlvdXIgbG9jYWxlIGFuZCBwcmVmZXJlbmNlc1xuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogJyVZLSVtLSVkJy5cbiAgICAgKi9cbiAgICBheGlzRm9ybWF0OiBcIiVZLSVtLSVkXCIsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICB8IFJlcXVpcmVkIHwgVmFsdWVzICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS18IC0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLSB8XG4gICAgICogfCB0aWNrSW50ZXJ2YWwgfCBheGlzIHRpY2tzICB8IHN0cmluZyB8IE9wdGlvbmFsIHwgc3RyaW5nICB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBQYXR0ZXJuIGlzIC9eKFsxLTldWzAtOV0qKShtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkL1xuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICovXG4gICAgdGlja0ludGVydmFsOiB2b2lkIDAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHVzZU1heFdpZHRoIHwgU2VlIG5vdGVzICAgfCBib29sZWFuIHwgNCAgICAgICAgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggaXMgc2V0IHRvIDEwMCUgYW5kIGlzIHRoZW4gc2NhbGluZyB3aXRoIHRoZVxuICAgICAqIGF2YWlsYWJsZSBzcGFjZSBpZiBub3QgdGhlIGFic29sdXRlIHNwYWNlIHJlcXVpcmVkIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiB0cnVlXG4gICAgICovXG4gICAgdXNlTWF4V2lkdGg6IHRydWUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdG9wQXhpcyAgIHwgU2VlIG5vdGVzICAgfCBCb29sZWFuIHwgNCAgICAgICAgfCBUcnVlLCBGYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIHdoZW4gdGhpcyBmbGFnIGlzIHNldCBkYXRlIGxhYmVscyB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0b3Agb2YgdGhlIGNoYXJ0XG4gICAgICpcbiAgICAgKiAqKkRlZmF1bHQgdmFsdWUgZmFsc2UqKi5cbiAgICAgKi9cbiAgICB0b3BBeGlzOiBmYWxzZSxcbiAgICB1c2VXaWR0aDogdm9pZCAwXG4gIH0sXG4gIC8qKiBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgZm9yIGpvdXJuZXkgZGlhZ3JhbXMgKi9cbiAgam91cm5leToge1xuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkaWFncmFtTWFyZ2luWCB8IE1hcmdpbiB0byB0aGUgcmlnaHQgYW5kIGxlZnQgb2YgdGhlIHNlcXVlbmNlIGRpYWdyYW0gfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiA1MFxuICAgICAqL1xuICAgIGRpYWdyYW1NYXJnaW5YOiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkaWFncmFtTWFyZ2luWSB8IE1hcmdpbiB0byB0aGUgb3ZlciBhbmQgdW5kZXIgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBkaWFncmFtTWFyZ2luWTogMTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBhY3Rvck1hcmdpbiB8IE1hcmdpbiBiZXR3ZWVuIGFjdG9ycyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDUwXG4gICAgICovXG4gICAgbGVmdE1hcmdpbjogMTUwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgd2lkdGggICAgIHwgV2lkdGggb2YgYWN0b3IgYm94ZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNTBcbiAgICAgKi9cbiAgICB3aWR0aDogMTUwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBoZWlnaHQgICAgfCBIZWlnaHQgb2YgYWN0b3IgYm94ZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiA2NVxuICAgICAqL1xuICAgIGhlaWdodDogNTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGJveE1hcmdpbiB8IE1hcmdpbiBhcm91bmQgbG9vcCBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDEwXG4gICAgICovXG4gICAgYm94TWFyZ2luOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYm94VGV4dE1hcmdpbiB8IE1hcmdpbiBhcm91bmQgdGhlIHRleHQgaW4gbG9vcC9hbHQvb3B0IGJveGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNVxuICAgICAqL1xuICAgIGJveFRleHRNYXJnaW46IDUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgIHwgRGVzY3JpcHRpb24gICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBub3RlTWFyZ2luIHwgTWFyZ2luIGFyb3VuZCBub3RlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDEwXG4gICAgICovXG4gICAgbm90ZU1hcmdpbjogMTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG1lc3NhZ2VNYXJnaW4gfCBTcGFjZSBiZXR3ZWVuIG1lc3NhZ2VzLiB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBTcGFjZSBiZXR3ZWVuIG1lc3NhZ2VzLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMzVcbiAgICAgKi9cbiAgICBtZXNzYWdlTWFyZ2luOiAzNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICB8IFR5cGUgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBtZXNzYWdlQWxpZ24gfCBNdWx0aWxpbmUgbWVzc2FnZSBhbGlnbm1lbnQgfCAzICAgIHwgNCAgICAgICAgfCAnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogJ2NlbnRlcidcbiAgICAgKi9cbiAgICBtZXNzYWdlQWxpZ246IFwiY2VudGVyXCIsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGJvdHRvbU1hcmdpbkFkaiB8IFByb2xvbmdzIHRoZSBlZGdlIG9mIHRoZSBkaWFncmFtIGRvd253YXJkcyB8IEludGVnZXIgfCA0ICAgICAgICB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBEZXBlbmRpbmcgb24gY3NzIHN0eWxpbmcgdGhpcyBtaWdodCBuZWVkIGFkanVzdG1lbnQuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxXG4gICAgICovXG4gICAgYm90dG9tTWFyZ2luQWRqOiAxLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCB1c2VNYXhXaWR0aCB8IFNlZSBub3RlcyAgIHwgYm9vbGVhbiB8IDQgICAgICAgIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBoZWlnaHQgYW5kIHdpZHRoIGlzIHNldCB0byAxMDAlIGFuZCBpcyB0aGVuIHNjYWxpbmcgd2l0aCB0aGVcbiAgICAgKiBhdmFpbGFibGUgc3BhY2UgaWYgbm90IHRoZSBhYnNvbHV0ZSBzcGFjZSByZXF1aXJlZCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdHJ1ZVxuICAgICAqL1xuICAgIHVzZU1heFdpZHRoOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHJpZ2h0QW5nbGVzIHwgQ3VydmVkIEFycm93cyBiZWNvbWUgUmlnaHQgQW5nbGVzIHwgMyAgICB8IDQgICAgICAgIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogVGhpcyB3aWxsIGRpc3BsYXkgYXJyb3dzIHRoYXQgc3RhcnQgYW5kIGJlZ2luIGF0IHRoZSBzYW1lIG5vZGUgYXMgcmlnaHQgYW5nbGVzLCByYXRoZXIgdGhhbiBhXG4gICAgICogY3VydmVzXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIHJpZ2h0QW5nbGVzOiBmYWxzZSxcbiAgICB0YXNrRm9udFNpemU6IDE0LFxuICAgIHRhc2tGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgdGFza01hcmdpbjogNTAsXG4gICAgLy8gd2lkdGggb2YgYWN0aXZhdGlvbiBib3hcbiAgICBhY3RpdmF0aW9uV2lkdGg6IDEwLFxuICAgIC8vIHRleHQgcGxhY2VtZW50IGFzOiB0c3BhbiB8IGZvIHwgb2xkIG9ubHkgdGV4dCBhcyBiZWZvcmVcbiAgICB0ZXh0UGxhY2VtZW50OiBcImZvXCIsXG4gICAgYWN0b3JDb2xvdXJzOiBbXCIjOEZCQzhGXCIsIFwiIzdDRkMwMFwiLCBcIiMwMEZGRkZcIiwgXCIjMjBCMkFBXCIsIFwiI0IwRTBFNlwiLCBcIiNGRkZGRTBcIl0sXG4gICAgc2VjdGlvbkZpbGxzOiBbXCIjMTkxOTcwXCIsIFwiIzhCMDA4QlwiLCBcIiM0QjAwODJcIiwgXCIjMkY0RjRGXCIsIFwiIzgwMDAwMFwiLCBcIiM4QjQ1MTNcIiwgXCIjMDAwMDhCXCJdLFxuICAgIHNlY3Rpb25Db2xvdXJzOiBbXCIjZmZmXCJdXG4gIH0sXG4gIC8qKiBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgZm9yIHRpbWVsaW5lIGRpYWdyYW1zICovXG4gIHRpbWVsaW5lOiB7XG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1NYXJnaW5YIHwgTWFyZ2luIHRvIHRoZSByaWdodCBhbmQgbGVmdCBvZiB0aGUgc2VxdWVuY2UgZGlhZ3JhbSB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDUwXG4gICAgICovXG4gICAgZGlhZ3JhbU1hcmdpblg6IDUwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1NYXJnaW5ZIHwgTWFyZ2luIHRvIHRoZSBvdmVyIGFuZCB1bmRlciB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4gfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxMFxuICAgICAqL1xuICAgIGRpYWdyYW1NYXJnaW5ZOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGFjdG9yTWFyZ2luIHwgTWFyZ2luIGJldHdlZW4gYWN0b3JzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNTBcbiAgICAgKi9cbiAgICBsZWZ0TWFyZ2luOiAxNTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB3aWR0aCAgICAgfCBXaWR0aCBvZiBhY3RvciBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE1MFxuICAgICAqL1xuICAgIHdpZHRoOiAxNTAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGhlaWdodCAgICB8IEhlaWdodCBvZiBhY3RvciBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDY1XG4gICAgICovXG4gICAgaGVpZ2h0OiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYm94TWFyZ2luIHwgTWFyZ2luIGFyb3VuZCBsb29wIGJveGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBib3hNYXJnaW46IDEwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBib3hUZXh0TWFyZ2luIHwgTWFyZ2luIGFyb3VuZCB0aGUgdGV4dCBpbiBsb29wL2FsdC9vcHQgYm94ZXMgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiA1XG4gICAgICovXG4gICAgYm94VGV4dE1hcmdpbjogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgfCBEZXNjcmlwdGlvbiAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG5vdGVNYXJnaW4gfCBNYXJnaW4gYXJvdW5kIG5vdGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBub3RlTWFyZ2luOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgbWVzc2FnZU1hcmdpbiB8IFNwYWNlIGJldHdlZW4gbWVzc2FnZXMuIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFNwYWNlIGJldHdlZW4gbWVzc2FnZXMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAzNVxuICAgICAqL1xuICAgIG1lc3NhZ2VNYXJnaW46IDM1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgIHwgVHlwZSB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG1lc3NhZ2VBbGlnbiB8IE11bHRpbGluZSBtZXNzYWdlIGFsaWdubWVudCB8IDMgICAgfCA0ICAgICAgICB8ICdsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAnY2VudGVyJ1xuICAgICAqL1xuICAgIG1lc3NhZ2VBbGlnbjogXCJjZW50ZXJcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYm90dG9tTWFyZ2luQWRqIHwgUHJvbG9uZ3MgdGhlIGVkZ2Ugb2YgdGhlIGRpYWdyYW0gZG93bndhcmRzIHwgSW50ZWdlciB8IDQgICAgICAgIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIERlcGVuZGluZyBvbiBjc3Mgc3R5bGluZyB0aGlzIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDFcbiAgICAgKi9cbiAgICBib3R0b21NYXJnaW5BZGo6IDEsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHVzZU1heFdpZHRoIHwgU2VlIG5vdGVzICAgfCBib29sZWFuIHwgNCAgICAgICAgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggaXMgc2V0IHRvIDEwMCUgYW5kIGlzIHRoZW4gc2NhbGluZyB3aXRoIHRoZVxuICAgICAqIGF2YWlsYWJsZSBzcGFjZSBpZiBub3QgdGhlIGFic29sdXRlIHNwYWNlIHJlcXVpcmVkIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiB0cnVlXG4gICAgICovXG4gICAgdXNlTWF4V2lkdGg6IHRydWUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgcmlnaHRBbmdsZXMgfCBDdXJ2ZWQgQXJyb3dzIGJlY29tZSBSaWdodCBBbmdsZXMgfCAzICAgIHwgNCAgICAgICAgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgZGlzcGxheSBhcnJvd3MgdGhhdCBzdGFydCBhbmQgYmVnaW4gYXQgdGhlIHNhbWUgbm9kZSBhcyByaWdodCBhbmdsZXMsIHJhdGhlciB0aGFuIGFcbiAgICAgKiBjdXJ2ZXNcbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgcmlnaHRBbmdsZXM6IGZhbHNlLFxuICAgIHRhc2tGb250U2l6ZTogMTQsXG4gICAgdGFza0ZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICB0YXNrTWFyZ2luOiA1MCxcbiAgICAvLyB3aWR0aCBvZiBhY3RpdmF0aW9uIGJveFxuICAgIGFjdGl2YXRpb25XaWR0aDogMTAsXG4gICAgLy8gdGV4dCBwbGFjZW1lbnQgYXM6IHRzcGFuIHwgZm8gfCBvbGQgb25seSB0ZXh0IGFzIGJlZm9yZVxuICAgIHRleHRQbGFjZW1lbnQ6IFwiZm9cIixcbiAgICBhY3RvckNvbG91cnM6IFtcIiM4RkJDOEZcIiwgXCIjN0NGQzAwXCIsIFwiIzAwRkZGRlwiLCBcIiMyMEIyQUFcIiwgXCIjQjBFMEU2XCIsIFwiI0ZGRkZFMFwiXSxcbiAgICBzZWN0aW9uRmlsbHM6IFtcIiMxOTE5NzBcIiwgXCIjOEIwMDhCXCIsIFwiIzRCMDA4MlwiLCBcIiMyRjRGNEZcIiwgXCIjODAwMDAwXCIsIFwiIzhCNDUxM1wiLCBcIiMwMDAwOEJcIl0sXG4gICAgc2VjdGlvbkNvbG91cnM6IFtcIiNmZmZcIl0sXG4gICAgZGlzYWJsZU11bHRpY29sb3I6IGZhbHNlXG4gIH0sXG4gIGNsYXNzOiB7XG4gICAgLyoqXG4gICAgICogIyMjIHRpdGxlVG9wTWFyZ2luXG4gICAgICpcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGl0bGVUb3BNYXJnaW4gfCBNYXJnaW4gdG9wIGZvciB0aGUgdGV4dCBvdmVyIHRoZSBjbGFzcyBkaWFncmFtIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMjVcbiAgICAgKi9cbiAgICB0aXRsZVRvcE1hcmdpbjogMjUsXG4gICAgYXJyb3dNYXJrZXJBYnNvbHV0ZTogZmFsc2UsXG4gICAgZGl2aWRlck1hcmdpbjogMTAsXG4gICAgcGFkZGluZzogNSxcbiAgICB0ZXh0SGVpZ2h0OiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdXNlTWF4V2lkdGggfCBTZWUgbm90ZXMgICB8IGJvb2xlYW4gfCA0ICAgICAgICB8IHRydWUsIGZhbHNlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBpcyBzZXQgdG8gMTAwJSBhbmQgaXMgdGhlbiBzY2FsaW5nIHdpdGggdGhlXG4gICAgICogYXZhaWxhYmxlIHNwYWNlIGlmIG5vdCB0aGUgYWJzb2x1dGUgc3BhY2UgcmVxdWlyZWQgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICB1c2VNYXhXaWR0aDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkZWZhdWx0UmVuZGVyZXIgfCBTZWUgbm90ZXMgICB8IGJvb2xlYW4gfCA0ICAgICAgICB8IGRhZ3JlLWQzLCBkYWdyZS13cmFwcGVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXMqKjpcbiAgICAgKlxuICAgICAqIERlY2lkZXMgd2hpY2ggcmVuZGVyaW5nIGVuZ2luZSB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZW5kZXJpbmcuIExlZ2FsIHZhbHVlcyBhcmU6XG4gICAgICogZGFncmUtZDMgZGFncmUtd3JhcHBlciAtIHdyYXBwZXIgZm9yIGRhZ3JlIGltcGxlbWVudGVkIGluIG1lcm1haWRcbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6ICdkYWdyZS1kMydcbiAgICAgKi9cbiAgICBkZWZhdWx0UmVuZGVyZXI6IFwiZGFncmUtd3JhcHBlclwiXG4gIH0sXG4gIHN0YXRlOiB7XG4gICAgLyoqXG4gICAgICogIyMjIHRpdGxlVG9wTWFyZ2luXG4gICAgICpcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGl0bGVUb3BNYXJnaW4gfCBNYXJnaW4gdG9wIGZvciB0aGUgdGV4dCBvdmVyIHRoZSBzdGF0ZSBkaWFncmFtIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMjVcbiAgICAgKi9cbiAgICB0aXRsZVRvcE1hcmdpbjogMjUsXG4gICAgZGl2aWRlck1hcmdpbjogMTAsXG4gICAgc2l6ZVVuaXQ6IDUsXG4gICAgcGFkZGluZzogOCxcbiAgICB0ZXh0SGVpZ2h0OiAxMCxcbiAgICB0aXRsZVNoaWZ0OiAtMTUsXG4gICAgbm90ZU1hcmdpbjogMTAsXG4gICAgZm9ya1dpZHRoOiA3MCxcbiAgICBmb3JrSGVpZ2h0OiA3LFxuICAgIC8vIFVzZWRcbiAgICBtaW5pUGFkZGluZzogMixcbiAgICAvLyBGb250IHNpemUgZmFjdG9yLCB0aGlzIGlzIHVzZWQgdG8gZ3Vlc3MgdGhlIHdpZHRoIG9mIHRoZSBlZGdlcyBsYWJlbHMgYmVmb3JlIHJlbmRlcmluZyBieSBkYWdyZVxuICAgIC8vIGxheW91dC4gVGhpcyBtaWdodCBuZWVkIHVwZGF0aW5nIGlmL3doZW4gc3dpdGNoaW5nIGZvbnRcbiAgICBmb250U2l6ZUZhY3RvcjogNS4wMixcbiAgICBmb250U2l6ZTogMjQsXG4gICAgbGFiZWxIZWlnaHQ6IDE2LFxuICAgIGVkZ2VMZW5ndGhGYWN0b3I6IFwiMjBcIixcbiAgICBjb21wb3NpdFRpdGxlU2l6ZTogMzUsXG4gICAgcmFkaXVzOiA1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCB1c2VNYXhXaWR0aCB8IFNlZSBub3RlcyAgIHwgYm9vbGVhbiB8IDQgICAgICAgIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBoZWlnaHQgYW5kIHdpZHRoIGlzIHNldCB0byAxMDAlIGFuZCBpcyB0aGVuIHNjYWxpbmcgd2l0aCB0aGVcbiAgICAgKiBhdmFpbGFibGUgc3BhY2UgaWYgbm90IHRoZSBhYnNvbHV0ZSBzcGFjZSByZXF1aXJlZCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdHJ1ZVxuICAgICAqL1xuICAgIHVzZU1heFdpZHRoOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRlZmF1bHRSZW5kZXJlciB8IFNlZSBub3RlcyAgIHwgYm9vbGVhbiB8IDQgICAgICAgIHwgZGFncmUtZDMsIGRhZ3JlLXdyYXBwZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogRGVjaWRlcyB3aGljaCByZW5kZXJpbmcgZW5naW5lIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlbmRlcmluZy4gTGVnYWwgdmFsdWVzIGFyZTpcbiAgICAgKiBkYWdyZS1kMyBkYWdyZS13cmFwcGVyIC0gd3JhcHBlciBmb3IgZGFncmUgaW1wbGVtZW50ZWQgaW4gbWVybWFpZFxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogJ2RhZ3JlLWQzJ1xuICAgICAqL1xuICAgIGRlZmF1bHRSZW5kZXJlcjogXCJkYWdyZS13cmFwcGVyXCJcbiAgfSxcbiAgLyoqIFRoZSBvYmplY3QgY29udGFpbmluZyBjb25maWd1cmF0aW9ucyBzcGVjaWZpYyBmb3IgZW50aXR5IHJlbGF0aW9uc2hpcCBkaWFncmFtcyAqL1xuICBlcjoge1xuICAgIC8qKlxuICAgICAqICMjIyB0aXRsZVRvcE1hcmdpblxuICAgICAqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHRpdGxlVG9wTWFyZ2luIHwgTWFyZ2luIHRvcCBmb3IgdGhlIHRleHQgb3ZlciB0aGUgZGlhZ3JhbSAgICAgICB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDI1XG4gICAgICovXG4gICAgdGl0bGVUb3BNYXJnaW46IDI1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1QYWRkaW5nIHwgQW1vdW50IG9mIHBhZGRpbmcgYXJvdW5kIHRoZSBkaWFncmFtIGFzIGEgd2hvbGUgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogVGhlIGFtb3VudCBvZiBwYWRkaW5nIGFyb3VuZCB0aGUgZGlhZ3JhbSBhcyBhIHdob2xlIHNvIHRoYXQgZW1iZWRkZWQgZGlhZ3JhbXMgaGF2ZSBtYXJnaW5zLFxuICAgICAqIGV4cHJlc3NlZCBpbiBwaXhlbHNcbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDIwXG4gICAgICovXG4gICAgZGlhZ3JhbVBhZGRpbmc6IDIwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGxheW91dERpcmVjdGlvbiB8IERpcmVjdGlvbmFsIGJpYXMgZm9yIGxheW91dCBvZiBlbnRpdGllcy4gfCBzdHJpbmcgfCBSZXF1aXJlZCB8IFwiVEJcIiwgXCJCVFwiLCBcIkxSXCIsIFwiUkxcIiB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiAnVEInIGZvciBUb3AtQm90dG9tLCAnQlQnZm9yIEJvdHRvbS1Ub3AsICdMUicgZm9yIExlZnQtUmlnaHQsIG9yICdSTCcgZm9yIFJpZ2h0IHRvIExlZnQuXG4gICAgICpcbiAgICAgKiBUID0gdG9wLCBCID0gYm90dG9tLCBMID0gbGVmdCwgYW5kIFIgPSByaWdodC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6ICdUQidcbiAgICAgKi9cbiAgICBsYXlvdXREaXJlY3Rpb246IFwiVEJcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgbWluRW50aXR5V2lkdGggfCBUaGUgbWluaW11bSB3aWR0aCBvZiBhbiBlbnRpdHkgYm94IHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRXhwcmVzc2VkIGluIHBpeGVscy4gRGVmYXVsdCB2YWx1ZTogMTAwXG4gICAgICovXG4gICAgbWluRW50aXR5V2lkdGg6IDEwMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IG1pbkVudGl0eUhlaWdodCB8IFRoZSBtaW5pbXVtIGhlaWdodCBvZiBhbiBlbnRpdHkgYm94IHwgSW50ZWdlciB8IDQgICAgICAgIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRXhwcmVzc2VkIGluIHBpeGVscyBEZWZhdWx0IHZhbHVlOiA3NVxuICAgICAqL1xuICAgIG1pbkVudGl0eUhlaWdodDogNzUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgZW50aXR5UGFkZGluZyB8IE1pbmltdW0gaW50ZXJuYWwgcGFkZGluZyBiZXR3ZWVuIHRleHQgaW4gYm94IGFuZCBib3ggYm9yZGVycyB8IEludGVnZXIgfCA0ICAgICAgICB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBUaGUgbWluaW11bSBpbnRlcm5hbCBwYWRkaW5nIGJldHdlZW4gdGV4dCBpbiBhbiBlbnRpdHkgYm94IGFuZCB0aGUgZW5jbG9zaW5nIGJveCBib3JkZXJzLFxuICAgICAqIGV4cHJlc3NlZCBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxNVxuICAgICAqL1xuICAgIGVudGl0eVBhZGRpbmc6IDE1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBzdHJva2UgICAgfCBTdHJva2UgY29sb3Igb2YgYm94IGVkZ2VzIGFuZCBsaW5lcyB8IHN0cmluZyB8IDQgICAgICAgIHwgQW55IHJlY29nbml6ZWQgY29sb3IgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAnZ3JheSdcbiAgICAgKi9cbiAgICBzdHJva2U6IFwiZ3JheVwiLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgfCBUeXBlICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBmaWxsICAgICAgfCBGaWxsIGNvbG9yIG9mIGVudGl0eSBib3hlcyB8IHN0cmluZyB8IDQgICAgICAgIHwgQW55IHJlY29nbml6ZWQgY29sb3IgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAnaG9uZXlkZXcnXG4gICAgICovXG4gICAgZmlsbDogXCJob25leWRld1wiLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgRGVzY3JpcHRpb24gICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGZvbnRTaXplICB8IEZvbnQgU2l6ZSBpbiBwaXhlbHMgfCBJbnRlZ2VyIHwgICAgICAgICAgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogRm9udCBzaXplIChleHByZXNzZWQgYXMgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgYSBudW1iZXIgb2YgcGl4ZWxzKSBEZWZhdWx0IHZhbHVlOiAxMlxuICAgICAqL1xuICAgIGZvbnRTaXplOiAxMixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdXNlTWF4V2lkdGggfCBTZWUgTm90ZXMgICB8IGJvb2xlYW4gfCBSZXF1aXJlZCB8IHRydWUsIGZhbHNlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCB0aGUgZGlhZ3JhbSB3aWR0aCBpcyBsb2NrZWQgdG8gMTAwJSBhbmQgc2NhbGVkIGJhc2VkIG9uXG4gICAgICogYXZhaWxhYmxlIHNwYWNlLiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBkaWFncmFtIHJlc2VydmVzIGl0cyBhYnNvbHV0ZSB3aWR0aC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICB1c2VNYXhXaWR0aDogdHJ1ZVxuICB9LFxuICAvKiogVGhlIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIGZvciBwaWUgZGlhZ3JhbXMgKi9cbiAgcGllOiB7XG4gICAgdXNlV2lkdGg6IHZvaWQgMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdXNlTWF4V2lkdGggfCBTZWUgTm90ZXMgICB8IGJvb2xlYW4gfCBSZXF1aXJlZCB8IHRydWUsIGZhbHNlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKlxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCB0aGUgZGlhZ3JhbSB3aWR0aCBpcyBsb2NrZWQgdG8gMTAwJSBhbmQgc2NhbGVkIGJhc2VkIG9uXG4gICAgICogYXZhaWxhYmxlIHNwYWNlLiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBkaWFncmFtIHJlc2VydmVzIGl0cyBhYnNvbHV0ZSB3aWR0aC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICB1c2VNYXhXaWR0aDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGV4dFBvc2l0aW9uIHwgQXhpYWwgcG9zaXRpb24gb2Ygc2xpY2UncyBsYWJlbCBmcm9tIHplcm8gYXQgdGhlIGNlbnRlciB0byAxIGF0IHRoZSBvdXRzaWRlIGVkZ2UgfCBOdW1iZXIgIHwgT3B0aW9uYWwgfCBEZWNpbWFsIGZyb20gMCB0byAxIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMC43NVxuICAgICAqL1xuICAgIHRleHRQb3NpdGlvbjogMC43NVxuICB9LFxuICBxdWFkcmFudENoYXJ0OiB7XG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBjaGFydFdpZHRoICAgICAgfCBXaWR0aCBvZiB0aGUgY2hhcnQgICAgICAgICAgICAgICAgIHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogNTAwXG4gICAgICovXG4gICAgY2hhcnRXaWR0aDogNTAwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgY2hhcnRIZWlnaHQgICAgIHwgSGVpZ2h0IG9mIHRoZSBjaGFydCAgICAgICAgICAgICAgICB8IG51bWJlciAgfCBPcHRpb25hbCB8IEFueSBwb3NpdGl2ZSBudW1iZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDUwMFxuICAgICAqL1xuICAgIGNoYXJ0SGVpZ2h0OiA1MDAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB0aXRsZVBhZGRpbmcgICAgICAgfCBDaGFydCB0aXRsZSB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nIHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICB0aXRsZVBhZGRpbmc6IDEwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGl0bGVGb250U2l6ZSAgICAgIHwgQ2hhcnQgdGl0bGUgZm9udCBzaXplICAgICAgICAgICAgICB8IG51bWJlciAgfCBPcHRpb25hbCB8IEFueSBwb3NpdGl2ZSBudW1iZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDIwXG4gICAgICovXG4gICAgdGl0bGVGb250U2l6ZTogMjAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBxdWFkcmFudFBhZGRpbmcgfCBQYWRkaW5nIGFyb3VuZCB0aGUgcXVhZHJhbnQgc3F1YXJlIHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogNVxuICAgICAqL1xuICAgIHF1YWRyYW50UGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBxdWFkcmFudFRleHRUb3BQYWRkaW5nIHwgcXVhZHJhbnQgdGl0bGUgcGFkZGluZyBmcm9tIHRvcCBpZiB0aGUgcXVhZHJhbnQgaXMgcmVuZGVyZWQgb24gdG9wICAgICAgICAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiA1XG4gICAgICovXG4gICAgcXVhZHJhbnRUZXh0VG9wUGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLSAgICB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHF1YWRyYW50TGFiZWxGb250U2l6ZSB8IHF1YWRyYW50IHRpdGxlIGZvbnQgc2l6ZSAgICAgICAgICAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxNlxuICAgICAqL1xuICAgIHF1YWRyYW50TGFiZWxGb250U2l6ZTogMTYsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGggfCBzdHJva2Ugd2lkdGggb2YgZWRnZXMgb2YgdGhlIGJveCB0aGF0IGFyZSBpbnNpZGUgdGhlIHF1YWRyYW50IHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMVxuICAgICAqL1xuICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDogMSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoIHwgc3Ryb2tlIHdpZHRoIG9mIGVkZ2VzIG9mIHRoZSBib3ggdGhhdCBhcmUgb3V0c2lkZSB0aGUgcXVhZHJhbnQgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAyXG4gICAgICovXG4gICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOiAyLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0gICB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHhBeGlzTGFiZWxQYWRkaW5nIHwgUGFkZGluZyBhcm91bmQgeC1heGlzIGxhYmVscyAgICAgICB8IG51bWJlciAgfCBPcHRpb25hbCB8IEFueSBwb3NpdGl2ZSBudW1iZXIgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IDVcbiAgICAgKi9cbiAgICB4QXhpc0xhYmVsUGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHhBeGlzTGFiZWxGb250U2l6ZSB8IHgtYXhpcyBsYWJlbCBmb250IHNpemUgICAgICAgICAgICAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxNlxuICAgICAqL1xuICAgIHhBeGlzTGFiZWxGb250U2l6ZTogMTYsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHhBeGlzUG9zaXRpb24gfCBwb3NpdGlvbiBvZiB4LWF4aXMgbGFiZWxzICAgICAgIHwgc3RyaW5nICB8IE9wdGlvbmFsIHwgJ3RvcCcgb3IgJ2JvdHRvbScgICB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdG9wXG4gICAgICovXG4gICAgeEF4aXNQb3NpdGlvbjogXCJ0b3BcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tICAgfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB5QXhpc0xhYmVsUGFkZGluZyB8IFBhZGRpbmcgYXJvdW5kIHktYXhpcyBsYWJlbHMgICAgICAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiA1XG4gICAgICovXG4gICAgeUF4aXNMYWJlbFBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB5QXhpc0xhYmVsRm9udFNpemUgfCB5LWF4aXMgbGFiZWwgZm9udCBzaXplICAgICAgICAgICAgIHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMTZcbiAgICAgKi9cbiAgICB5QXhpc0xhYmVsRm9udFNpemU6IDE2LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCB5QXhpc1Bvc2l0aW9uIHwgcG9zaXRpb24gb2YgeS1heGlzIGxhYmVscyAgICAgICB8IHN0cmluZyAgfCBPcHRpb25hbCB8ICdsZWZ0JyBvciAncmlnaHQnICAgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IGxlZnRcbiAgICAgKi9cbiAgICB5QXhpc1Bvc2l0aW9uOiBcImxlZnRcIixcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBwb2ludFRleHRQYWRkaW5nICAgICAgIHwgcGFkZGluZyBiZXR3ZWVuIHBvaW50IGFuZCBwb2ludCBsYWJlbCAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiA1XG4gICAgICovXG4gICAgcG9pbnRUZXh0UGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgcG9pbnRUZXh0UGFkZGluZyAgICAgICB8IHBvaW50IHRpdGxlIGZvbnQgc2l6ZSAgfCBudW1iZXIgIHwgT3B0aW9uYWwgfCBBbnkgcG9zaXRpdmUgbnVtYmVyIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KipcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAxMlxuICAgICAqL1xuICAgIHBvaW50TGFiZWxGb250U2l6ZTogMTIsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHBvaW50UmFkaXVzICAgfCByYWRpdXMgb2YgdGhlIHBvaW50IHRvIGJlIGRyYXduIHwgbnVtYmVyICB8IE9wdGlvbmFsIHwgQW55IHBvc2l0aXZlIG51bWJlciB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogNVxuICAgICAqL1xuICAgIHBvaW50UmFkaXVzOiA1LFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCB1c2VNYXhXaWR0aCB8IFNlZSBOb3RlcyAgIHwgYm9vbGVhbiB8IFJlcXVpcmVkIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKlxuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBkaWFncmFtIHdpZHRoIGlzIGxvY2tlZCB0byAxMDAlIGFuZCBzY2FsZWQgYmFzZWQgb25cbiAgICAgKiBhdmFpbGFibGUgc3BhY2UuIElmIHNldCB0byBmYWxzZSwgdGhlIGRpYWdyYW0gcmVzZXJ2ZXMgaXRzIGFic29sdXRlIHdpZHRoLlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogdHJ1ZVxuICAgICAqL1xuICAgIHVzZU1heFdpZHRoOiB0cnVlXG4gIH0sXG4gIC8qKiBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgZm9yIHJlcSBkaWFncmFtcyAqL1xuICByZXF1aXJlbWVudDoge1xuICAgIHVzZVdpZHRoOiB2b2lkIDAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHVzZU1heFdpZHRoIHwgU2VlIE5vdGVzICAgfCBib29sZWFuIHwgUmVxdWlyZWQgfCB0cnVlLCBmYWxzZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqXG4gICAgICpcbiAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGRpYWdyYW0gd2lkdGggaXMgbG9ja2VkIHRvIDEwMCUgYW5kIHNjYWxlZCBiYXNlZCBvblxuICAgICAqIGF2YWlsYWJsZSBzcGFjZS4gSWYgc2V0IHRvIGZhbHNlLCB0aGUgZGlhZ3JhbSByZXNlcnZlcyBpdHMgYWJzb2x1dGUgd2lkdGguXG4gICAgICpcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiB0cnVlXG4gICAgICovXG4gICAgdXNlTWF4V2lkdGg6IHRydWUsXG4gICAgcmVjdF9maWxsOiBcIiNmOWY5ZjlcIixcbiAgICB0ZXh0X2NvbG9yOiBcIiMzMzNcIixcbiAgICByZWN0X2JvcmRlcl9zaXplOiBcIjAuNXB4XCIsXG4gICAgcmVjdF9ib3JkZXJfY29sb3I6IFwiI2JiYlwiLFxuICAgIHJlY3RfbWluX3dpZHRoOiAyMDAsXG4gICAgcmVjdF9taW5faGVpZ2h0OiAyMDAsXG4gICAgZm9udFNpemU6IDE0LFxuICAgIHJlY3RfcGFkZGluZzogMTAsXG4gICAgbGluZV9oZWlnaHQ6IDIwXG4gIH0sXG4gIGdpdEdyYXBoOiB7XG4gICAgLyoqXG4gICAgICogIyMjIHRpdGxlVG9wTWFyZ2luXG4gICAgICpcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgdGl0bGVUb3BNYXJnaW4gfCBNYXJnaW4gdG9wIGZvciB0aGUgdGV4dCBvdmVyIHRoZSBHaXQgZGlhZ3JhbSAgIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMjVcbiAgICAgKi9cbiAgICB0aXRsZVRvcE1hcmdpbjogMjUsXG4gICAgZGlhZ3JhbVBhZGRpbmc6IDgsXG4gICAgbm9kZUxhYmVsOiB7XG4gICAgICB3aWR0aDogNzUsXG4gICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgIHg6IC0yNSxcbiAgICAgIHk6IDBcbiAgICB9LFxuICAgIG1haW5CcmFuY2hOYW1lOiBcIm1haW5cIixcbiAgICBtYWluQnJhbmNoT3JkZXI6IDAsXG4gICAgc2hvd0NvbW1pdExhYmVsOiB0cnVlLFxuICAgIHNob3dCcmFuY2hlczogdHJ1ZSxcbiAgICByb3RhdGVDb21taXRMYWJlbDogdHJ1ZVxuICB9LFxuICAvKiogVGhlIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljIGZvciBjNCBkaWFncmFtcyAqL1xuICBjNDoge1xuICAgIHVzZVdpZHRoOiB2b2lkIDAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGRpYWdyYW1NYXJnaW5YIHwgTWFyZ2luIHRvIHRoZSByaWdodCBhbmQgbGVmdCBvZiB0aGUgYzQgZGlhZ3JhbSB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDUwXG4gICAgICovXG4gICAgZGlhZ3JhbU1hcmdpblg6IDUwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBkaWFncmFtTWFyZ2luWSB8IE1hcmdpbiB0byB0aGUgb3ZlciBhbmQgdW5kZXIgdGhlIGM0IGRpYWdyYW0gfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxMFxuICAgICAqL1xuICAgIGRpYWdyYW1NYXJnaW5ZOiAxMCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBjNFNoYXBlTWFyZ2luIHwgTWFyZ2luIGJldHdlZW4gc2hhcGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogNTBcbiAgICAgKi9cbiAgICBjNFNoYXBlTWFyZ2luOiA1MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYzRTaGFwZVBhZGRpbmcgfCBQYWRkaW5nIGJldHdlZW4gc2hhcGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMjBcbiAgICAgKi9cbiAgICBjNFNoYXBlUGFkZGluZzogMjAsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IHdpZHRoICAgICB8IFdpZHRoIG9mIHBlcnNvbiBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDIxNlxuICAgICAqL1xuICAgIHdpZHRoOiAyMTYsXG4gICAgLyoqXG4gICAgICogfCBQYXJhbWV0ZXIgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgaGVpZ2h0ICAgIHwgSGVpZ2h0IG9mIHBlcnNvbiBib3hlcyB8IEludGVnZXIgfCBSZXF1aXJlZCB8IEFueSBQb3NpdGl2ZSBWYWx1ZSB8XG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDYwXG4gICAgICovXG4gICAgaGVpZ2h0OiA2MCxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciB8IERlc2NyaXB0aW9uICAgICAgICAgfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBib3hNYXJnaW4gfCBNYXJnaW4gYXJvdW5kIGJveGVzIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTBcbiAgICAgKi9cbiAgICBib3hNYXJnaW46IDEwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgfCBEZXNjcmlwdGlvbiB8IFR5cGUgICAgfCBSZXF1aXJlZCB8IFZhbHVlcyAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8XG4gICAgICogfCB1c2VNYXhXaWR0aCB8IFNlZSBOb3RlcyAgIHwgYm9vbGVhbiB8IFJlcXVpcmVkIHwgdHJ1ZSwgZmFsc2UgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGhlaWdodCBhbmQgd2lkdGggaXMgc2V0IHRvIDEwMCUgYW5kIGlzIHRoZW5cbiAgICAgKiBzY2FsaW5nIHdpdGggdGhlIGF2YWlsYWJsZSBzcGFjZS4gSWYgc2V0IHRvIGZhbHNlLCB0aGUgYWJzb2x1dGUgc3BhY2UgcmVxdWlyZWQgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQgdmFsdWU6IHRydWVcbiAgICAgKi9cbiAgICB1c2VNYXhXaWR0aDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiB8IFBhcmFtZXRlciAgICB8IERlc2NyaXB0aW9uIHwgVHlwZSAgICB8IFJlcXVpcmVkIHwgVmFsdWVzICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGM0U2hhcGVJblJvdyB8IFNlZSBOb3RlcyAgIHwgSW50ZWdlciB8IFJlcXVpcmVkIHwgQW55IFBvc2l0aXZlIFZhbHVlIHxcbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogSG93IG1hbnkgc2hhcGVzIHRvIHBsYWNlIGluIGVhY2ggcm93LlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogNFxuICAgICAqL1xuICAgIGM0U2hhcGVJblJvdzogNCxcbiAgICBuZXh0TGluZVBhZGRpbmdYOiAwLFxuICAgIC8qKlxuICAgICAqIHwgUGFyYW1ldGVyICAgICAgIHwgRGVzY3JpcHRpb24gfCBUeXBlICAgIHwgUmVxdWlyZWQgfCBWYWx1ZXMgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYzRCb3VuZGFyeUluUm93IHwgU2VlIE5vdGVzICAgfCBJbnRlZ2VyIHwgUmVxdWlyZWQgfCBBbnkgUG9zaXRpdmUgVmFsdWUgfFxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBIb3cgbWFueSBib3VuZGFyaWVzIHRvIHBsYWNlIGluIGVhY2ggcm93LlxuICAgICAqXG4gICAgICogRGVmYXVsdCB2YWx1ZTogMlxuICAgICAqL1xuICAgIGM0Qm91bmRhcnlJblJvdzogMixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBQZXJzb24gc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIHBlcnNvbkZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIFBlcnNvbiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBwZXJzb25Gb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBQZXJzb24gc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBwZXJzb25Gb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIEV4dGVybmFsIFBlcnNvbiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfcGVyc29uRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgRXh0ZXJuYWwgUGVyc29uIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIEV4dGVybmFsIFBlcnNvbiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgU3lzdGVtIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBzeXN0ZW1Gb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBTeXN0ZW0gc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgc3lzdGVtRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgU3lzdGVtIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgc3lzdGVtRm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBFeHRlcm5hbCBTeXN0ZW0gc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIEV4dGVybmFsIFN5c3RlbSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBFeHRlcm5hbCBTeXN0ZW0gc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIFN5c3RlbSBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgc3lzdGVtX2RiRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgU3lzdGVtIERCIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIHN5c3RlbV9kYkZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIFN5c3RlbSBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIHN5c3RlbV9kYkZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgRXh0ZXJuYWwgU3lzdGVtIERCIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBFeHRlcm5hbCBTeXN0ZW0gREIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgRXh0ZXJuYWwgU3lzdGVtIERCIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBTeXN0ZW0gUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIHN5c3RlbV9xdWV1ZUZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIFN5c3RlbSBRdWV1ZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBzeXN0ZW1fcXVldWVGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBTeXN0ZW0gUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIEV4dGVybmFsIFN5c3RlbSBRdWV1ZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgRXh0ZXJuYWwgU3lzdGVtIFF1ZXVlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIEV4dGVybmFsIFN5c3RlbSBRdWV1ZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgQm91bmRhcnkgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGJvdW5kYXJ5Rm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgQm91bmRhcnkgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgYm91bmRhcnlGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBCb3VuZGFyeSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGJvdW5kYXJ5Rm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBNZXNzYWdlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxMi5cbiAgICAgKi9cbiAgICBtZXNzYWdlRm9udFNpemU6IDEyLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgTWVzc2FnZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBtZXNzYWdlRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgTWVzc2FnZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIG1lc3NhZ2VGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIENvbnRhaW5lciBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgY29udGFpbmVyRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgQ29udGFpbmVyIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGNvbnRhaW5lckZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIENvbnRhaW5lciBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGNvbnRhaW5lckZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgRXh0ZXJuYWwgQ29udGFpbmVyIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb250YWluZXJGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBFeHRlcm5hbCBDb250YWluZXIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgRXh0ZXJuYWwgQ29udGFpbmVyIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBDb250YWluZXIgREIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGNvbnRhaW5lcl9kYkZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIENvbnRhaW5lciBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBjb250YWluZXJfZGJGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBDb250YWluZXIgREIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBjb250YWluZXJfZGJGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIEV4dGVybmFsIENvbnRhaW5lciBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgRXh0ZXJuYWwgQ29udGFpbmVyIERCIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIEV4dGVybmFsIENvbnRhaW5lciBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgQ29udGFpbmVyIFF1ZXVlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBjb250YWluZXJfcXVldWVGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBDb250YWluZXIgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgQ29udGFpbmVyIFF1ZXVlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBFeHRlcm5hbCBDb250YWluZXIgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIEV4dGVybmFsIENvbnRhaW5lciBRdWV1ZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBFeHRlcm5hbCBDb250YWluZXIgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIENvbXBvbmVudCBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgY29tcG9uZW50Rm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgQ29tcG9uZW50IHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGNvbXBvbmVudEZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIENvbXBvbmVudCBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGNvbXBvbmVudEZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgRXh0ZXJuYWwgQ29tcG9uZW50IHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBFeHRlcm5hbCBDb21wb25lbnQgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgRXh0ZXJuYWwgQ29tcG9uZW50IHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBDb21wb25lbnQgREIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGNvbXBvbmVudF9kYkZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIENvbXBvbmVudCBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBjb21wb25lbnRfZGJGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBDb21wb25lbnQgREIgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBjb21wb25lbnRfZGJGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBzaXplIG9mIEV4dGVybmFsIENvbXBvbmVudCBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogMTQuXG4gICAgICovXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemU6IDE0LFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCBmYW1pbHkgb2YgRXh0ZXJuYWwgQ29tcG9uZW50IERCIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmLlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgd2VpZ2h0IG9mIEV4dGVybmFsIENvbXBvbmVudCBEQiBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogbm9ybWFsLlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHNpemUgb2YgQ29tcG9uZW50IFF1ZXVlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiAxNC5cbiAgICAgKi9cbiAgICBjb21wb25lbnRfcXVldWVGb250U2l6ZTogMTQsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IGZhbWlseSBvZiBDb21wb25lbnQgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYuXG4gICAgICovXG4gICAgY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseTogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgZm9udCB3ZWlnaHQgb2YgQ29tcG9uZW50IFF1ZXVlIHNoYXBlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiBub3JtYWwuXG4gICAgICovXG4gICAgY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgc2l6ZSBvZiBFeHRlcm5hbCBDb21wb25lbnQgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDE0LlxuICAgICAqL1xuICAgIGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOiAxNCxcbiAgICAvKipcbiAgICAgKiBUaGlzIHNldHMgdGhlIGZvbnQgZmFtaWx5IG9mIEV4dGVybmFsIENvbXBvbmVudCBRdWV1ZSBzaGFwZSBmb3IgdGhlIGRpYWdyYW1cbiAgICAgKlxuICAgICAqICoqTm90ZXM6KiogRGVmYXVsdCB2YWx1ZTogXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZi5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBmb250IHdlaWdodCBvZiBFeHRlcm5hbCBDb21wb25lbnQgUXVldWUgc2hhcGUgZm9yIHRoZSBkaWFncmFtXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IG5vcm1hbC5cbiAgICAgKi9cbiAgICBleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyB0aGUgYXV0by13cmFwIHN0YXRlIGZvciB0aGUgZGlhZ3JhbVxuICAgICAqXG4gICAgICogKipOb3RlczoqKiBEZWZhdWx0IHZhbHVlOiB0cnVlLlxuICAgICAqL1xuICAgIHdyYXA6IHRydWUsXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIHRoZSBhdXRvLXdyYXAgcGFkZGluZyBmb3IgdGhlIGRpYWdyYW0gKHNpZGVzIG9ubHkpXG4gICAgICpcbiAgICAgKiAqKk5vdGVzOioqIERlZmF1bHQgdmFsdWU6IDAuXG4gICAgICovXG4gICAgd3JhcFBhZGRpbmc6IDEwLFxuICAgIHBlcnNvbkZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5wZXJzb25Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5wZXJzb25Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5wZXJzb25Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgZXh0ZXJuYWxfcGVyc29uRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBzeXN0ZW1Gb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuc3lzdGVtRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuc3lzdGVtRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuc3lzdGVtRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIGV4dGVybmFsX3N5c3RlbUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgc3lzdGVtX2RiRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLnN5c3RlbV9kYkZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLnN5c3RlbV9kYkZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLnN5c3RlbV9kYkZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBleHRlcm5hbF9zeXN0ZW1fZGJGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIHN5c3RlbV9xdWV1ZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1fcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb250YWluZXJGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuY29udGFpbmVyRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuY29udGFpbmVyRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuY29udGFpbmVyRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIGV4dGVybmFsX2NvbnRhaW5lckZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgY29udGFpbmVyX2RiRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmNvbnRhaW5lcl9kYkZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmNvbnRhaW5lcl9kYkZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBleHRlcm5hbF9jb250YWluZXJfZGJGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvbnRhaW5lcl9xdWV1ZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21wb25lbnRGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuY29tcG9uZW50Rm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuY29tcG9uZW50Rm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuY29tcG9uZW50Rm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIGV4dGVybmFsX2NvbXBvbmVudEZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgY29tcG9uZW50X2RiRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmNvbXBvbmVudF9kYkZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmNvbXBvbmVudF9kYkZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRfZGJGb250OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXBvbmVudF9xdWV1ZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSxcbiAgICBib3VuZGFyeUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5ib3VuZGFyeUZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmJvdW5kYXJ5Rm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuYm91bmRhcnlGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgbWVzc2FnZUZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5tZXNzYWdlRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMubWVzc2FnZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLm1lc3NhZ2VGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sXG4gICAgLy8gJyBDb2xvcnNcbiAgICAvLyAnICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICBwZXJzb25fYmdfY29sb3I6IFwiIzA4NDI3QlwiLFxuICAgIHBlcnNvbl9ib3JkZXJfY29sb3I6IFwiIzA3M0I2RlwiLFxuICAgIGV4dGVybmFsX3BlcnNvbl9iZ19jb2xvcjogXCIjNjg2ODY4XCIsXG4gICAgZXh0ZXJuYWxfcGVyc29uX2JvcmRlcl9jb2xvcjogXCIjOEE4QThBXCIsXG4gICAgc3lzdGVtX2JnX2NvbG9yOiBcIiMxMTY4QkRcIixcbiAgICBzeXN0ZW1fYm9yZGVyX2NvbG9yOiBcIiMzQzdGQzBcIixcbiAgICBzeXN0ZW1fZGJfYmdfY29sb3I6IFwiIzExNjhCRFwiLFxuICAgIHN5c3RlbV9kYl9ib3JkZXJfY29sb3I6IFwiIzNDN0ZDMFwiLFxuICAgIHN5c3RlbV9xdWV1ZV9iZ19jb2xvcjogXCIjMTE2OEJEXCIsXG4gICAgc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjM0M3RkMwXCIsXG4gICAgZXh0ZXJuYWxfc3lzdGVtX2JnX2NvbG9yOiBcIiM5OTk5OTlcIixcbiAgICBleHRlcm5hbF9zeXN0ZW1fYm9yZGVyX2NvbG9yOiBcIiM4QThBOEFcIixcbiAgICBleHRlcm5hbF9zeXN0ZW1fZGJfYmdfY29sb3I6IFwiIzk5OTk5OVwiLFxuICAgIGV4dGVybmFsX3N5c3RlbV9kYl9ib3JkZXJfY29sb3I6IFwiIzhBOEE4QVwiLFxuICAgIGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9iZ19jb2xvcjogXCIjOTk5OTk5XCIsXG4gICAgZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjOEE4QThBXCIsXG4gICAgY29udGFpbmVyX2JnX2NvbG9yOiBcIiM0MzhERDVcIixcbiAgICBjb250YWluZXJfYm9yZGVyX2NvbG9yOiBcIiMzQzdGQzBcIixcbiAgICBjb250YWluZXJfZGJfYmdfY29sb3I6IFwiIzQzOERENVwiLFxuICAgIGNvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IFwiIzNDN0ZDMFwiLFxuICAgIGNvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjogXCIjNDM4REQ1XCIsXG4gICAgY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjM0M3RkMwXCIsXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyX2JnX2NvbG9yOiBcIiNCM0IzQjNcIixcbiAgICBleHRlcm5hbF9jb250YWluZXJfYm9yZGVyX2NvbG9yOiBcIiNBNkE2QTZcIixcbiAgICBleHRlcm5hbF9jb250YWluZXJfZGJfYmdfY29sb3I6IFwiI0IzQjNCM1wiLFxuICAgIGV4dGVybmFsX2NvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IFwiI0E2QTZBNlwiLFxuICAgIGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjogXCIjQjNCM0IzXCIsXG4gICAgZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjQTZBNkE2XCIsXG4gICAgY29tcG9uZW50X2JnX2NvbG9yOiBcIiM4NUJCRjBcIixcbiAgICBjb21wb25lbnRfYm9yZGVyX2NvbG9yOiBcIiM3OEE4RDhcIixcbiAgICBjb21wb25lbnRfZGJfYmdfY29sb3I6IFwiIzg1QkJGMFwiLFxuICAgIGNvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IFwiIzc4QThEOFwiLFxuICAgIGNvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjogXCIjODVCQkYwXCIsXG4gICAgY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjNzhBOEQ4XCIsXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50X2JnX2NvbG9yOiBcIiNDQ0NDQ0NcIixcbiAgICBleHRlcm5hbF9jb21wb25lbnRfYm9yZGVyX2NvbG9yOiBcIiNCRkJGQkZcIixcbiAgICBleHRlcm5hbF9jb21wb25lbnRfZGJfYmdfY29sb3I6IFwiI0NDQ0NDQ1wiLFxuICAgIGV4dGVybmFsX2NvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IFwiI0JGQkZCRlwiLFxuICAgIGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjogXCIjQ0NDQ0NDXCIsXG4gICAgZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjogXCIjQkZCRkJGXCJcbiAgfSxcbiAgbWluZG1hcDoge1xuICAgIHVzZU1heFdpZHRoOiB0cnVlLFxuICAgIHBhZGRpbmc6IDEwLFxuICAgIG1heE5vZGVXaWR0aDogMjAwXG4gIH0sXG4gIGZvbnRTaXplOiAxNlxufTtcbmlmIChjb25maWcuY2xhc3MpIHtcbiAgY29uZmlnLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGUgPSBjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbn1cbmlmIChjb25maWcuZ2l0R3JhcGgpIHtcbiAgY29uZmlnLmdpdEdyYXBoLmFycm93TWFya2VyQWJzb2x1dGUgPSBjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbn1cbmNvbnN0IGtleWlmeSA9IChvYmosIHByZWZpeCA9IFwiXCIpID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChyZXMsIGVsKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9ialtlbF0pKSB7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqW2VsXSA9PT0gXCJvYmplY3RcIiAmJiBvYmpbZWxdICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFsuLi5yZXMsIHByZWZpeCArIGVsLCAuLi5rZXlpZnkob2JqW2VsXSwgXCJcIildO1xuICB9XG4gIHJldHVybiBbLi4ucmVzLCBwcmVmaXggKyBlbF07XG59LCBbXSk7XG5jb25zdCBjb25maWdLZXlzID0ga2V5aWZ5KGNvbmZpZywgXCJcIik7XG5jb25zdCBkZWZhdWx0Q29uZmlnJDEgPSBjb25maWc7XG4vKiEganMteWFtbCA0LjEuMCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwgQGxpY2Vuc2UgTUlUICovXG5mdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdCkge1xuICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgc3ViamVjdCA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSBcIm9iamVjdFwiICYmIHN1YmplY3QgIT09IG51bGw7XG59XG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlMikge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZTIpKVxuICAgIHJldHVybiBzZXF1ZW5jZTI7XG4gIGVsc2UgaWYgKGlzTm90aGluZyhzZXF1ZW5jZTIpKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIFtzZXF1ZW5jZTJdO1xufVxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG4gIGlmIChzb3VyY2UpIHtcbiAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gXCJcIiwgY3ljbGU7XG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyKSB7XG4gIHJldHVybiBudW1iZXIgPT09IDAgJiYgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyO1xufVxudmFyIGlzTm90aGluZ18xID0gaXNOb3RoaW5nO1xudmFyIGlzT2JqZWN0XzEgPSBpc09iamVjdDtcbnZhciB0b0FycmF5XzEgPSB0b0FycmF5O1xudmFyIHJlcGVhdF8xID0gcmVwZWF0O1xudmFyIGlzTmVnYXRpdmVaZXJvXzEgPSBpc05lZ2F0aXZlWmVybztcbnZhciBleHRlbmRfMSA9IGV4dGVuZDtcbnZhciBjb21tb24gPSB7XG4gIGlzTm90aGluZzogaXNOb3RoaW5nXzEsXG4gIGlzT2JqZWN0OiBpc09iamVjdF8xLFxuICB0b0FycmF5OiB0b0FycmF5XzEsXG4gIHJlcGVhdDogcmVwZWF0XzEsXG4gIGlzTmVnYXRpdmVaZXJvOiBpc05lZ2F0aXZlWmVyb18xLFxuICBleHRlbmQ6IGV4dGVuZF8xXG59O1xuZnVuY3Rpb24gZm9ybWF0RXJyb3IoZXhjZXB0aW9uMiwgY29tcGFjdCkge1xuICB2YXIgd2hlcmUgPSBcIlwiLCBtZXNzYWdlID0gZXhjZXB0aW9uMi5yZWFzb24gfHwgXCIodW5rbm93biByZWFzb24pXCI7XG4gIGlmICghZXhjZXB0aW9uMi5tYXJrKVxuICAgIHJldHVybiBtZXNzYWdlO1xuICBpZiAoZXhjZXB0aW9uMi5tYXJrLm5hbWUpIHtcbiAgICB3aGVyZSArPSAnaW4gXCInICsgZXhjZXB0aW9uMi5tYXJrLm5hbWUgKyAnXCIgJztcbiAgfVxuICB3aGVyZSArPSBcIihcIiArIChleGNlcHRpb24yLm1hcmsubGluZSArIDEpICsgXCI6XCIgKyAoZXhjZXB0aW9uMi5tYXJrLmNvbHVtbiArIDEpICsgXCIpXCI7XG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24yLm1hcmsuc25pcHBldCkge1xuICAgIHdoZXJlICs9IFwiXFxuXFxuXCIgKyBleGNlcHRpb24yLm1hcmsuc25pcHBldDtcbiAgfVxuICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgd2hlcmU7XG59XG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubmFtZSA9IFwiWUFNTEV4Y2VwdGlvblwiO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJcIjtcbiAgfVxufVxuWUFNTEV4Y2VwdGlvbiQxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBZQU1MRXhjZXB0aW9uJDE7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoY29tcGFjdCkge1xuICByZXR1cm4gdGhpcy5uYW1lICsgXCI6IFwiICsgZm9ybWF0RXJyb3IodGhpcywgY29tcGFjdCk7XG59O1xudmFyIGV4Y2VwdGlvbiA9IFlBTUxFeGNlcHRpb24kMTtcbmZ1bmN0aW9uIGdldExpbmUoYnVmZmVyLCBsaW5lU3RhcnQsIGxpbmVFbmQsIHBvc2l0aW9uLCBtYXhMaW5lTGVuZ3RoKSB7XG4gIHZhciBoZWFkID0gXCJcIjtcbiAgdmFyIHRhaWwgPSBcIlwiO1xuICB2YXIgbWF4SGFsZkxlbmd0aCA9IE1hdGguZmxvb3IobWF4TGluZUxlbmd0aCAvIDIpIC0gMTtcbiAgaWYgKHBvc2l0aW9uIC0gbGluZVN0YXJ0ID4gbWF4SGFsZkxlbmd0aCkge1xuICAgIGhlYWQgPSBcIiAuLi4gXCI7XG4gICAgbGluZVN0YXJ0ID0gcG9zaXRpb24gLSBtYXhIYWxmTGVuZ3RoICsgaGVhZC5sZW5ndGg7XG4gIH1cbiAgaWYgKGxpbmVFbmQgLSBwb3NpdGlvbiA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICB0YWlsID0gXCIgLi4uXCI7XG4gICAgbGluZUVuZCA9IHBvc2l0aW9uICsgbWF4SGFsZkxlbmd0aCAtIHRhaWwubGVuZ3RoO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyOiBoZWFkICsgYnVmZmVyLnNsaWNlKGxpbmVTdGFydCwgbGluZUVuZCkucmVwbGFjZSgvXFx0L2csIFwi4oaSXCIpICsgdGFpbCxcbiAgICBwb3M6IHBvc2l0aW9uIC0gbGluZVN0YXJ0ICsgaGVhZC5sZW5ndGhcbiAgICAvLyByZWxhdGl2ZSBwb3NpdGlvblxuICB9O1xufVxuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoXCIgXCIsIG1heCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuZnVuY3Rpb24gbWFrZVNuaXBwZXQobWFyaywgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zIHx8IG51bGwpO1xuICBpZiAoIW1hcmsuYnVmZmVyKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAoIW9wdGlvbnMubWF4TGVuZ3RoKVxuICAgIG9wdGlvbnMubWF4TGVuZ3RoID0gNzk7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbmRlbnQgIT09IFwibnVtYmVyXCIpXG4gICAgb3B0aW9ucy5pbmRlbnQgPSAxO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNCZWZvcmUgIT09IFwibnVtYmVyXCIpXG4gICAgb3B0aW9ucy5saW5lc0JlZm9yZSA9IDM7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5saW5lc0FmdGVyICE9PSBcIm51bWJlclwiKVxuICAgIG9wdGlvbnMubGluZXNBZnRlciA9IDI7XG4gIHZhciByZSA9IC9cXHI/XFxufFxccnxcXDAvZztcbiAgdmFyIGxpbmVTdGFydHMgPSBbMF07XG4gIHZhciBsaW5lRW5kcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBmb3VuZExpbmVObyA9IC0xO1xuICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKG1hcmsuYnVmZmVyKSkge1xuICAgIGxpbmVFbmRzLnB1c2gobWF0Y2guaW5kZXgpO1xuICAgIGxpbmVTdGFydHMucHVzaChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgaWYgKG1hcmsucG9zaXRpb24gPD0gbWF0Y2guaW5kZXggJiYgZm91bmRMaW5lTm8gPCAwKSB7XG4gICAgICBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMjtcbiAgICB9XG4gIH1cbiAgaWYgKGZvdW5kTGluZU5vIDwgMClcbiAgICBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcbiAgdmFyIHJlc3VsdCA9IFwiXCIsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcbiAgZm9yIChpID0gMTsgaSA8PSBvcHRpb25zLmxpbmVzQmVmb3JlOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gLSBpIDwgMClcbiAgICAgIGJyZWFrO1xuICAgIGxpbmUgPSBnZXRMaW5lKFxuICAgICAgbWFyay5idWZmZXIsXG4gICAgICBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vIC0gaV0sXG4gICAgICBsaW5lRW5kc1tmb3VuZExpbmVObyAtIGldLFxuICAgICAgbWFyay5wb3NpdGlvbiAtIChsaW5lU3RhcnRzW2ZvdW5kTGluZU5vXSAtIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gLSBpXSksXG4gICAgICBtYXhMaW5lTGVuZ3RoXG4gICAgKTtcbiAgICByZXN1bHQgPSBjb21tb24ucmVwZWF0KFwiIFwiLCBvcHRpb25zLmluZGVudCkgKyBwYWRTdGFydCgobWFyay5saW5lIC0gaSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgKyBcIiB8IFwiICsgbGluZS5zdHIgKyBcIlxcblwiICsgcmVzdWx0O1xuICB9XG4gIGxpbmUgPSBnZXRMaW5lKG1hcmsuYnVmZmVyLCBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vXSwgbGluZUVuZHNbZm91bmRMaW5lTm9dLCBtYXJrLnBvc2l0aW9uLCBtYXhMaW5lTGVuZ3RoKTtcbiAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyAxKS50b1N0cmluZygpLCBsaW5lTm9MZW5ndGgpICsgXCIgfCBcIiArIGxpbmUuc3RyICsgXCJcXG5cIjtcbiAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCItXCIsIG9wdGlvbnMuaW5kZW50ICsgbGluZU5vTGVuZ3RoICsgMyArIGxpbmUucG9zKSArIFwiXlxcblwiO1xuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNBZnRlcjsgaSsrKSB7XG4gICAgaWYgKGZvdW5kTGluZU5vICsgaSA+PSBsaW5lRW5kcy5sZW5ndGgpXG4gICAgICBicmVhaztcbiAgICBsaW5lID0gZ2V0TGluZShcbiAgICAgIG1hcmsuYnVmZmVyLFxuICAgICAgbGluZVN0YXJ0c1tmb3VuZExpbmVObyArIGldLFxuICAgICAgbGluZUVuZHNbZm91bmRMaW5lTm8gKyBpXSxcbiAgICAgIG1hcmsucG9zaXRpb24gLSAobGluZVN0YXJ0c1tmb3VuZExpbmVOb10gLSBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vICsgaV0pLFxuICAgICAgbWF4TGluZUxlbmd0aFxuICAgICk7XG4gICAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArIFwiIHwgXCIgKyBsaW5lLnN0ciArIFwiXFxuXCI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9cXG4kLywgXCJcIik7XG59XG52YXIgc25pcHBldCA9IG1ha2VTbmlwcGV0O1xudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgXCJraW5kXCIsXG4gIFwibXVsdGlcIixcbiAgXCJyZXNvbHZlXCIsXG4gIFwiY29uc3RydWN0XCIsXG4gIFwiaW5zdGFuY2VPZlwiLFxuICBcInByZWRpY2F0ZVwiLFxuICBcInJlcHJlc2VudFwiLFxuICBcInJlcHJlc2VudE5hbWVcIixcbiAgXCJkZWZhdWx0U3R5bGVcIixcbiAgXCJzdHlsZUFsaWFzZXNcIlxuXTtcbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gIFwic2NhbGFyXCIsXG4gIFwic2VxdWVuY2VcIixcbiAgXCJtYXBwaW5nXCJcbl07XG5mdW5jdGlvbiBjb21waWxlU3R5bGVBbGlhc2VzKG1hcDIpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobWFwMiAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5rZXlzKG1hcDIpLmZvckVhY2goZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgIG1hcDJbc3R5bGVdLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHtcbiAgICAgICAgcmVzdWx0W1N0cmluZyhhbGlhcyldID0gc3R5bGU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gVHlwZSQxKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtpbmQgPSBvcHRpb25zW1wia2luZFwiXSB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgPSBvcHRpb25zW1wicmVzb2x2ZVwiXSB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgPSBvcHRpb25zW1wiY29uc3RydWN0XCJdIHx8IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbiAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9uc1tcImluc3RhbmNlT2ZcIl0gfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgPSBvcHRpb25zW1wicHJlZGljYXRlXCJdIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ID0gb3B0aW9uc1tcInJlcHJlc2VudFwiXSB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudE5hbWUgPSBvcHRpb25zW1wicmVwcmVzZW50TmFtZVwiXSB8fCBudWxsO1xuICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbXCJkZWZhdWx0U3R5bGVcIl0gfHwgbnVsbDtcbiAgdGhpcy5tdWx0aSA9IG9wdGlvbnNbXCJtdWx0aVwiXSB8fCBmYWxzZTtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgPSBjb21waWxlU3R5bGVBbGlhc2VzKG9wdGlvbnNbXCJzdHlsZUFsaWFzZXNcIl0gfHwgbnVsbCk7XG4gIGlmIChZQU1MX05PREVfS0lORFMuaW5kZXhPZih0aGlzLmtpbmQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBleGNlcHRpb24oJ1Vua25vd24ga2luZCBcIicgKyB0aGlzLmtpbmQgKyAnXCIgaXMgc3BlY2lmaWVkIGZvciBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICB9XG59XG52YXIgdHlwZSA9IFR5cGUkMTtcbmZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYTIsIG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBzY2hlbWEyW25hbWVdLmZvckVhY2goZnVuY3Rpb24oY3VycmVudFR5cGUpIHtcbiAgICB2YXIgbmV3SW5kZXggPSByZXN1bHQubGVuZ3RoO1xuICAgIHJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uKHByZXZpb3VzVHlwZSwgcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZyAmJiBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZCAmJiBwcmV2aW91c1R5cGUubXVsdGkgPT09IGN1cnJlbnRUeXBlLm11bHRpKSB7XG4gICAgICAgIG5ld0luZGV4ID0gcHJldmlvdXNJbmRleDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHRbbmV3SW5kZXhdID0gY3VycmVudFR5cGU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY29tcGlsZU1hcCgpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBzY2FsYXI6IHt9LFxuICAgIHNlcXVlbmNlOiB7fSxcbiAgICBtYXBwaW5nOiB7fSxcbiAgICBmYWxsYmFjazoge30sXG4gICAgbXVsdGk6IHtcbiAgICAgIHNjYWxhcjogW10sXG4gICAgICBzZXF1ZW5jZTogW10sXG4gICAgICBtYXBwaW5nOiBbXSxcbiAgICAgIGZhbGxiYWNrOiBbXVxuICAgIH1cbiAgfSwgaW5kZXgsIGxlbmd0aDtcbiAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZTIpIHtcbiAgICBpZiAodHlwZTIubXVsdGkpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVt0eXBlMi5raW5kXS5wdXNoKHR5cGUyKTtcbiAgICAgIHJlc3VsdC5tdWx0aVtcImZhbGxiYWNrXCJdLnB1c2godHlwZTIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdHlwZTIua2luZF1bdHlwZTIudGFnXSA9IHJlc3VsdFtcImZhbGxiYWNrXCJdW3R5cGUyLnRhZ10gPSB0eXBlMjtcbiAgICB9XG4gIH1cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgYXJndW1lbnRzW2luZGV4XS5mb3JFYWNoKGNvbGxlY3RUeXBlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gU2NoZW1hJDEoZGVmaW5pdGlvbikge1xuICByZXR1cm4gdGhpcy5leHRlbmQoZGVmaW5pdGlvbik7XG59XG5TY2hlbWEkMS5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kMihkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcbiAgaWYgKGRlZmluaXRpb24gaW5zdGFuY2VvZiB0eXBlKSB7XG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbik7XG4gIH0gZWxzZSBpZiAoZGVmaW5pdGlvbiAmJiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmltcGxpY2l0KSB8fCBBcnJheS5pc0FycmF5KGRlZmluaXRpb24uZXhwbGljaXQpKSkge1xuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KVxuICAgICAgaW1wbGljaXQgPSBpbXBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5pbXBsaWNpdCk7XG4gICAgaWYgKGRlZmluaXRpb24uZXhwbGljaXQpXG4gICAgICBleHBsaWNpdCA9IGV4cGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmV4cGxpY2l0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiU2NoZW1hLmV4dGVuZCBhcmd1bWVudCBzaG91bGQgYmUgYSBUeXBlLCBbIFR5cGUgXSwgb3IgYSBzY2hlbWEgZGVmaW5pdGlvbiAoeyBpbXBsaWNpdDogWy4uLl0sIGV4cGxpY2l0OiBbLi4uXSB9KVwiKTtcbiAgfVxuICBpbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUkMSkge1xuICAgIGlmICghKHR5cGUkMSBpbnN0YW5jZW9mIHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LlwiKTtcbiAgICB9XG4gICAgaWYgKHR5cGUkMS5sb2FkS2luZCAmJiB0eXBlJDEubG9hZEtpbmQgIT09IFwic2NhbGFyXCIpIHtcbiAgICAgIHRocm93IG5ldyBleGNlcHRpb24oXCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgfVxuICAgIGlmICh0eXBlJDEubXVsdGkpIHtcbiAgICAgIHRocm93IG5ldyBleGNlcHRpb24oXCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LlwiKTtcbiAgICB9XG4gIH0pO1xuICBleHBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUkMSkge1xuICAgIGlmICghKHR5cGUkMSBpbnN0YW5jZW9mIHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LlwiKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEkMS5wcm90b3R5cGUpO1xuICByZXN1bHQuaW1wbGljaXQgPSAodGhpcy5pbXBsaWNpdCB8fCBbXSkuY29uY2F0KGltcGxpY2l0KTtcbiAgcmVzdWx0LmV4cGxpY2l0ID0gKHRoaXMuZXhwbGljaXQgfHwgW10pLmNvbmNhdChleHBsaWNpdCk7XG4gIHJlc3VsdC5jb21waWxlZEltcGxpY2l0ID0gY29tcGlsZUxpc3QocmVzdWx0LCBcImltcGxpY2l0XCIpO1xuICByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgXCJleHBsaWNpdFwiKTtcbiAgcmVzdWx0LmNvbXBpbGVkVHlwZU1hcCA9IGNvbXBpbGVNYXAocmVzdWx0LmNvbXBpbGVkSW1wbGljaXQsIHJlc3VsdC5jb21waWxlZEV4cGxpY2l0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgc2NoZW1hID0gU2NoZW1hJDE7XG52YXIgc3RyID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBcIlwiO1xuICB9XG59KTtcbnZhciBzZXEgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOnNlcVwiLCB7XG4gIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgY29uc3RydWN0OiBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogW107XG4gIH1cbn0pO1xudmFyIG1hcCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXCIsIHtcbiAga2luZDogXCJtYXBwaW5nXCIsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9O1xuICB9XG59KTtcbnZhciBmYWlsc2FmZSA9IG5ldyBzY2hlbWEoe1xuICBleHBsaWNpdDogW1xuICAgIHN0cixcbiAgICBzZXEsXG4gICAgbWFwXG4gIF1cbn0pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcbiAgcmV0dXJuIG1heCA9PT0gMSAmJiBkYXRhID09PSBcIn5cIiB8fCBtYXggPT09IDQgJiYgKGRhdGEgPT09IFwibnVsbFwiIHx8IGRhdGEgPT09IFwiTnVsbFwiIHx8IGRhdGEgPT09IFwiTlVMTFwiKTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDtcbn1cbnZhciBfbnVsbCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6bnVsbFwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sTnVsbCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sTnVsbCxcbiAgcHJlZGljYXRlOiBpc051bGwsXG4gIHJlcHJlc2VudDoge1xuICAgIGNhbm9uaWNhbDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJ+XCI7XG4gICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIk5VTExcIjtcbiAgICB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJOdWxsXCI7XG4gICAgfSxcbiAgICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIlxufSk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcbiAgcmV0dXJuIG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gXCJ0cnVlXCIgfHwgZGF0YSA9PT0gXCJUcnVlXCIgfHwgZGF0YSA9PT0gXCJUUlVFXCIpIHx8IG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gXCJmYWxzZVwiIHx8IGRhdGEgPT09IFwiRmFsc2VcIiB8fCBkYXRhID09PSBcIkZBTFNFXCIpO1xufVxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gXCJ0cnVlXCIgfHwgZGF0YSA9PT0gXCJUcnVlXCIgfHwgZGF0YSA9PT0gXCJUUlVFXCI7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IEJvb2xlYW5dXCI7XG59XG52YXIgYm9vbCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6Ym9vbFwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbixcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbixcbiAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sXG4gIHJlcHJlc2VudDoge1xuICAgIGxvd2VyY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA/IFwiVFJVRVwiIDogXCJGQUxTRVwiO1xuICAgIH0sXG4gICAgY2FtZWxjYXNlOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPyBcIlRydWVcIiA6IFwiRmFsc2VcIjtcbiAgICB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIlxufSk7XG5mdW5jdGlvbiBpc0hleENvZGUoYykge1xuICByZXR1cm4gNDggPD0gYyAmJiBjIDw9IDU3IHx8IDY1IDw9IGMgJiYgYyA8PSA3MCB8fCA5NyA8PSBjICYmIGMgPD0gMTAyO1xufVxuZnVuY3Rpb24gaXNPY3RDb2RlKGMpIHtcbiAgcmV0dXJuIDQ4IDw9IGMgJiYgYyA8PSA1NTtcbn1cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTc7XG59XG5mdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aCwgaW5kZXggPSAwLCBoYXNEaWdpdHMgPSBmYWxzZSwgY2g7XG4gIGlmICghbWF4KVxuICAgIHJldHVybiBmYWxzZTtcbiAgY2ggPSBkYXRhW2luZGV4XTtcbiAgaWYgKGNoID09PSBcIi1cIiB8fCBjaCA9PT0gXCIrXCIpIHtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG4gIH1cbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIGlmIChpbmRleCArIDEgPT09IG1heClcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgICBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChjaCAhPT0gXCIwXCIgJiYgY2ggIT09IFwiMVwiKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cbiAgICBpZiAoY2ggPT09IFwieFwiKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cbiAgICBpZiAoY2ggPT09IFwib1wiKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghaXNPY3RDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cbiAgfVxuICBpZiAoY2ggPT09IFwiX1wiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09IFwiX1wiKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gXCJfXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgdmFyIHZhbHVlID0gZGF0YSwgc2lnbiA9IDEsIGNoO1xuICBpZiAodmFsdWUuaW5kZXhPZihcIl9cIikgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csIFwiXCIpO1xuICB9XG4gIGNoID0gdmFsdWVbMF07XG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgaWYgKGNoID09PSBcIi1cIilcbiAgICAgIHNpZ24gPSAtMTtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgIGNoID0gdmFsdWVbMF07XG4gIH1cbiAgaWYgKHZhbHVlID09PSBcIjBcIilcbiAgICByZXR1cm4gMDtcbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJiXCIpXG4gICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICBpZiAodmFsdWVbMV0gPT09IFwieFwiKVxuICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJvXCIpXG4gICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IE51bWJlcl1cIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxudmFyIGludCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6aW50XCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogPj0gMCA/IFwiMGJcIiArIG9iai50b1N0cmluZygyKSA6IFwiLTBiXCIgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7XG4gICAgfSxcbiAgICBvY3RhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID49IDAgPyBcIjBvXCIgKyBvYmoudG9TdHJpbmcoOCkgOiBcIi0wb1wiICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpO1xuICAgIH0sXG4gICAgZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTtcbiAgICB9LFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID49IDAgPyBcIjB4XCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgOiBcIi0weFwiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpO1xuICAgIH1cbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiBcImRlY2ltYWxcIixcbiAgc3R5bGVBbGlhc2VzOiB7XG4gICAgYmluYXJ5OiBbMiwgXCJiaW5cIl0sXG4gICAgb2N0YWw6IFs4LCBcIm9jdFwiXSxcbiAgICBkZWNpbWFsOiBbMTAsIFwiZGVjXCJdLFxuICAgIGhleGFkZWNpbWFsOiBbMTYsIFwiaGV4XCJdXG4gIH1cbn0pO1xudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gIFwiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcXFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFxcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKXxcXFxcLig/Om5hbnxOYU58TkFOKSkkXCJcbik7XG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8IC8vIFF1aWNrIGhhY2sgdG8gbm90IGFsbG93IGludGVnZXJzIGVuZCB3aXRoIGBfYFxuICAvLyBQcm9iYWJseSBzaG91bGQgdXBkYXRlIHJlZ2V4cCAmIGNoZWNrIHNwZWVkXG4gIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gXCJfXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ247XG4gIHZhbHVlID0gZGF0YS5yZXBsYWNlKC9fL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gPSB2YWx1ZVswXSA9PT0gXCItXCIgPyAtMSA6IDE7XG4gIGlmIChcIistXCIuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBcIi5pbmZcIikge1xuICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIi5uYW5cIikge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG59XG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxGbG9hdChvYmplY3QsIHN0eWxlKSB7XG4gIHZhciByZXM7XG4gIGlmIChpc05hTihvYmplY3QpKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBcImxvd2VyY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIubmFuXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5OQU5cIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLk5hTlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgXCJsb3dlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLmluZlwiO1xuICAgICAgY2FzZSBcInVwcGVyY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuSU5GXCI7XG4gICAgICBjYXNlIFwiY2FtZWxjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5JbmZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uaW5mXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uSU5GXCI7XG4gICAgICBjYXNlIFwiY2FtZWxjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi0uSW5mXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKSB7XG4gICAgcmV0dXJuIFwiLTAuMFwiO1xuICB9XG4gIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7XG4gIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKFwiZVwiLCBcIi5lXCIpIDogcmVzO1xufVxuZnVuY3Rpb24gaXNGbG9hdChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBcIltvYmplY3QgTnVtYmVyXVwiICYmIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cbnZhciBmbG9hdCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEZsb2F0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCxcbiAgcHJlZGljYXRlOiBpc0Zsb2F0LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxGbG9hdCxcbiAgZGVmYXVsdFN0eWxlOiBcImxvd2VyY2FzZVwiXG59KTtcbnZhciBqc29uID0gZmFpbHNhZmUuZXh0ZW5kKHtcbiAgaW1wbGljaXQ6IFtcbiAgICBfbnVsbCxcbiAgICBib29sLFxuICAgIGludCxcbiAgICBmbG9hdFxuICBdXG59KTtcbnZhciBjb3JlID0ganNvbjtcbnZhciBZQU1MX0RBVEVfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgXCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJFwiXG4pO1xudmFyIFlBTUxfVElNRVNUQU1QX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gIFwiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFxcXC4oWzAtOV0qKSk/KD86WyBcXFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyRcIlxuKTtcbmZ1bmN0aW9uIHJlc29sdmVZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSkgIT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICB2YXIgbWF0Y2gsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlO1xuICBtYXRjaCA9IFlBTUxfREFURV9SRUdFWFAuZXhlYyhkYXRhKTtcbiAgaWYgKG1hdGNoID09PSBudWxsKVxuICAgIG1hdGNoID0gWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRlIHJlc29sdmUgZXJyb3JcIik7XG4gIHllYXIgPSArbWF0Y2hbMV07XG4gIG1vbnRoID0gK21hdGNoWzJdIC0gMTtcbiAgZGF5ID0gK21hdGNoWzNdO1xuICBpZiAoIW1hdGNoWzRdKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXkpKTtcbiAgfVxuICBob3VyID0gK21hdGNoWzRdO1xuICBtaW51dGUgPSArbWF0Y2hbNV07XG4gIHNlY29uZCA9ICttYXRjaFs2XTtcbiAgaWYgKG1hdGNoWzddKSB7XG4gICAgZnJhY3Rpb24gPSBtYXRjaFs3XS5zbGljZSgwLCAzKTtcbiAgICB3aGlsZSAoZnJhY3Rpb24ubGVuZ3RoIDwgMykge1xuICAgICAgZnJhY3Rpb24gKz0gXCIwXCI7XG4gICAgfVxuICAgIGZyYWN0aW9uID0gK2ZyYWN0aW9uO1xuICB9XG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArbWF0Y2hbMTBdO1xuICAgIHR6X21pbnV0ZSA9ICsobWF0Y2hbMTFdIHx8IDApO1xuICAgIGRlbHRhID0gKHR6X2hvdXIgKiA2MCArIHR6X21pbnV0ZSkgKiA2ZTQ7XG4gICAgaWYgKG1hdGNoWzldID09PSBcIi1cIilcbiAgICAgIGRlbHRhID0gLWRlbHRhO1xuICB9XG4gIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTtcbiAgaWYgKGRlbHRhKVxuICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSAtIGRlbHRhKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5mdW5jdGlvbiByZXByZXNlbnRZYW1sVGltZXN0YW1wKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0LnRvSVNPU3RyaW5nKCk7XG59XG52YXIgdGltZXN0YW1wID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSBcIjw8XCIgfHwgZGF0YSA9PT0gbnVsbDtcbn1cbnZhciBtZXJnZSA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2VcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlXG59KTtcbnZhciBCQVNFNjRfTUFQID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxcblxcclwiO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBjb2RlLCBpZHgsIGJpdGxlbiA9IDAsIG1heCA9IGRhdGEubGVuZ3RoLCBtYXAyID0gQkFTRTY0X01BUDtcbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgY29kZSA9IG1hcDIuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcbiAgICBpZiAoY29kZSA+IDY0KVxuICAgICAgY29udGludWU7XG4gICAgaWYgKGNvZGUgPCAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGJpdGxlbiArPSA2O1xuICB9XG4gIHJldHVybiBiaXRsZW4gJSA4ID09PSAwO1xufVxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhKSB7XG4gIHZhciBpZHgsIHRhaWxiaXRzLCBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csIFwiXCIpLCBtYXggPSBpbnB1dC5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQLCBiaXRzID0gMCwgcmVzdWx0ID0gW107XG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxNiAmIDI1NSk7XG4gICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gICAgfVxuICAgIGJpdHMgPSBiaXRzIDw8IDYgfCBtYXAyLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG4gIHRhaWxiaXRzID0gbWF4ICUgNCAqIDY7XG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFwiXCIsIGJpdHMgPSAwLCBpZHgsIHRhaWwsIG1heCA9IG9iamVjdC5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQO1xuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gMTggJiA2M107XG4gICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDEyICYgNjNdO1xuICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiA2ICYgNjNdO1xuICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyAmIDYzXTtcbiAgICB9XG4gICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07XG4gIH1cbiAgdGFpbCA9IG1heCAlIDM7XG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxOCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDEyICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gNiAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzICYgNjNdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDIpIHtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDEwICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gNCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzIDw8IDIgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDIgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA8PCA0ICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyWzY0XTtcbiAgICByZXN1bHQgKz0gbWFwMls2NF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzQmluYXJ5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBVaW50OEFycmF5XVwiO1xufVxudmFyIGJpbmFyeSA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5XCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSxcbiAgcHJlZGljYXRlOiBpc0JpbmFyeSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5XG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX3RvU3RyaW5nJDIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksIG9iamVjdCA9IGRhdGE7XG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcbiAgICBpZiAoX3RvU3RyaW5nJDIuY2FsbChwYWlyKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikge1xuICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQzLmNhbGwocGFpciwgcGFpcktleSkpIHtcbiAgICAgICAgaWYgKCFwYWlySGFzS2V5KVxuICAgICAgICAgIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXBhaXJIYXNLZXkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpXG4gICAgICBvYmplY3RLZXlzLnB1c2gocGFpcktleSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTtcbn1cbnZhciBvbWFwID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIsIHtcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xudmFyIF90b1N0cmluZyQxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgdmFyIGluZGV4LCBsZW5ndGgsIHBhaXIsIGtleXMsIHJlc3VsdCwgb2JqZWN0ID0gZGF0YTtcbiAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcbiAgICBpZiAoX3RvU3RyaW5nJDEuY2FsbChwYWlyKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJlc3VsdFtpbmRleF0gPSBba2V5c1swXSwgcGFpcltrZXlzWzBdXV07XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbClcbiAgICByZXR1cm4gW107XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsIG9iamVjdCA9IGRhdGE7XG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuICAgIHJlc3VsdFtpbmRleF0gPSBba2V5c1swXSwgcGFpcltrZXlzWzBdXV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbnZhciBwYWlycyA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcIiwge1xuICBraW5kOiBcInNlcXVlbmNlXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICB2YXIga2V5LCBvYmplY3QgPSBkYXRhO1xuICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5JDIuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxTZXQoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTtcbn1cbnZhciBzZXQgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOnNldFwiLCB7XG4gIGtpbmQ6IFwibWFwcGluZ1wiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFNldCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sU2V0XG59KTtcbnZhciBfZGVmYXVsdCA9IGNvcmUuZXh0ZW5kKHtcbiAgaW1wbGljaXQ6IFtcbiAgICB0aW1lc3RhbXAsXG4gICAgbWVyZ2VcbiAgXSxcbiAgZXhwbGljaXQ6IFtcbiAgICBiaW5hcnksXG4gICAgb21hcCxcbiAgICBwYWlycyxcbiAgICBzZXRcbiAgXVxufSk7XG52YXIgX2hhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIENPTlRFWFRfRkxPV19JTiA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCA9IDI7XG52YXIgQ09OVEVYVF9CTE9DS19JTiA9IDM7XG52YXIgQ09OVEVYVF9CTE9DS19PVVQgPSA0O1xudmFyIENIT01QSU5HX0NMSVAgPSAxO1xudmFyIENIT01QSU5HX1NUUklQID0gMjtcbnZhciBDSE9NUElOR19LRUVQID0gMztcbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgPSAvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4ODRcXHg4Ni1cXHg5RlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXS87XG52YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1xceDg1XFx1MjAyOFxcdTIwMjldLztcbnZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyA9IC9bLFxcW1xcXVxce1xcfV0vO1xudmFyIFBBVFRFUk5fVEFHX0hBTkRMRSA9IC9eKD86IXwhIXwhW2EtelxcLV0rISkkL2k7XG52YXIgUEFUVEVSTl9UQUdfVVJJID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcbmZ1bmN0aW9uIF9jbGFzcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNfRU9MKGMpIHtcbiAgcmV0dXJuIGMgPT09IDEwIHx8IGMgPT09IDEzO1xufVxuZnVuY3Rpb24gaXNfV0hJVEVfU1BBQ0UoYykge1xuICByZXR1cm4gYyA9PT0gOSB8fCBjID09PSAzMjtcbn1cbmZ1bmN0aW9uIGlzX1dTX09SX0VPTChjKSB7XG4gIHJldHVybiBjID09PSA5IHx8IGMgPT09IDMyIHx8IGMgPT09IDEwIHx8IGMgPT09IDEzO1xufVxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gYyA9PT0gNDQgfHwgYyA9PT0gOTEgfHwgYyA9PT0gOTMgfHwgYyA9PT0gMTIzIHx8IGMgPT09IDEyNTtcbn1cbmZ1bmN0aW9uIGZyb21IZXhDb2RlKGMpIHtcbiAgdmFyIGxjO1xuICBpZiAoNDggPD0gYyAmJiBjIDw9IDU3KSB7XG4gICAgcmV0dXJuIGMgLSA0ODtcbiAgfVxuICBsYyA9IGMgfCAzMjtcbiAgaWYgKDk3IDw9IGxjICYmIGxjIDw9IDEwMikge1xuICAgIHJldHVybiBsYyAtIDk3ICsgMTA7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAxMjApIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICBpZiAoYyA9PT0gMTE3KSB7XG4gICAgcmV0dXJuIDQ7XG4gIH1cbiAgaWYgKGMgPT09IDg1KSB7XG4gICAgcmV0dXJuIDg7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoNDggPD0gYyAmJiBjIDw9IDU3KSB7XG4gICAgcmV0dXJuIGMgLSA0ODtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBzaW1wbGVFc2NhcGVTZXF1ZW5jZShjKSB7XG4gIHJldHVybiBjID09PSA0OCA/IFwiXFwwXCIgOiBjID09PSA5NyA/IFwiXFx4MDdcIiA6IGMgPT09IDk4ID8gXCJcXGJcIiA6IGMgPT09IDExNiA/IFwiXHRcIiA6IGMgPT09IDkgPyBcIlx0XCIgOiBjID09PSAxMTAgPyBcIlxcblwiIDogYyA9PT0gMTE4ID8gXCJcXHZcIiA6IGMgPT09IDEwMiA/IFwiXFxmXCIgOiBjID09PSAxMTQgPyBcIlxcclwiIDogYyA9PT0gMTAxID8gXCJcXHgxQlwiIDogYyA9PT0gMzIgPyBcIiBcIiA6IGMgPT09IDM0ID8gJ1wiJyA6IGMgPT09IDQ3ID8gXCIvXCIgOiBjID09PSA5MiA/IFwiXFxcXFwiIDogYyA9PT0gNzggPyBcIsKFXCIgOiBjID09PSA5NSA/IFwiwqBcIiA6IGMgPT09IDc2ID8gXCJcXHUyMDI4XCIgOiBjID09PSA4MCA/IFwiXFx1MjAyOVwiIDogXCJcIjtcbn1cbmZ1bmN0aW9uIGNoYXJGcm9tQ29kZXBvaW50KGMpIHtcbiAgaWYgKGMgPD0gNjU1MzUpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAoYyAtIDY1NTM2ID4+IDEwKSArIDU1Mjk2LFxuICAgIChjIC0gNjU1MzYgJiAxMDIzKSArIDU2MzIwXG4gICk7XG59XG52YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTtcbnZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cbmZ1bmN0aW9uIFN0YXRlJDEoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICB0aGlzLmZpbGVuYW1lID0gb3B0aW9uc1tcImZpbGVuYW1lXCJdIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hID0gb3B0aW9uc1tcInNjaGVtYVwiXSB8fCBfZGVmYXVsdDtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zW1wib25XYXJuaW5nXCJdIHx8IG51bGw7XG4gIHRoaXMubGVnYWN5ID0gb3B0aW9uc1tcImxlZ2FjeVwiXSB8fCBmYWxzZTtcbiAgdGhpcy5qc29uID0gb3B0aW9uc1tcImpzb25cIl0gfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgPSBvcHRpb25zW1wibGlzdGVuZXJcIl0gfHwgbnVsbDtcbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIHRoaXMubGluZSA9IDA7XG4gIHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuICB0aGlzLmRvY3VtZW50cyA9IFtdO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVFcnJvcihzdGF0ZTIsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogc3RhdGUyLmZpbGVuYW1lLFxuICAgIGJ1ZmZlcjogc3RhdGUyLmlucHV0LnNsaWNlKDAsIC0xKSxcbiAgICAvLyBvbWl0IHRyYWlsaW5nIFxcMFxuICAgIHBvc2l0aW9uOiBzdGF0ZTIucG9zaXRpb24sXG4gICAgbGluZTogc3RhdGUyLmxpbmUsXG4gICAgY29sdW1uOiBzdGF0ZTIucG9zaXRpb24gLSBzdGF0ZTIubGluZVN0YXJ0XG4gIH07XG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG4gIHJldHVybiBuZXcgZXhjZXB0aW9uKG1lc3NhZ2UsIG1hcmspO1xufVxuZnVuY3Rpb24gdGhyb3dFcnJvcihzdGF0ZTIsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZTIsIG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlMiwgbWVzc2FnZSkge1xuICBpZiAoc3RhdGUyLm9uV2FybmluZykge1xuICAgIHN0YXRlMi5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlMiwgbWVzc2FnZSkpO1xuICB9XG59XG52YXIgZGlyZWN0aXZlSGFuZGxlcnMgPSB7XG4gIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUyLCBuYW1lLCBhcmdzKSB7XG4gICAgdmFyIG1hdGNoLCBtYWpvciwgbWlub3I7XG4gICAgaWYgKHN0YXRlMi52ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudFwiKTtcbiAgICB9XG4gICAgbWF0Y2ggPSAvXihbMC05XSspXFwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gICAgaWYgKG1ham9yICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFwiKTtcbiAgICB9XG4gICAgc3RhdGUyLnZlcnNpb24gPSBhcmdzWzBdO1xuICAgIHN0YXRlMi5jaGVja0xpbmVCcmVha3MgPSBtaW5vciA8IDI7XG4gICAgaWYgKG1pbm9yICE9PSAxICYmIG1pbm9yICE9PSAyKSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUyLCBcInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcIik7XG4gICAgfVxuICB9LFxuICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZTIsIG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgaGFuZGxlLCBwcmVmaXg7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzXCIpO1xuICAgIH1cbiAgICBoYW5kbGUgPSBhcmdzWzBdO1xuICAgIHByZWZpeCA9IGFyZ3NbMV07XG4gICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZVwiKTtcbiAgICB9XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUyLnRhZ01hcCwgaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIicgKyBoYW5kbGUgKyAnXCIgdGFnIGhhbmRsZScpO1xuICAgIH1cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZVwiKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHByZWZpeCA9IGRlY29kZVVSSUNvbXBvbmVudChwcmVmaXgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6IFwiICsgcHJlZml4KTtcbiAgICB9XG4gICAgc3RhdGUyLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUyLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcbiAgaWYgKHN0YXJ0IDwgZW5kKSB7XG4gICAgX3Jlc3VsdCA9IHN0YXRlMi5pbnB1dC5zbGljZShzdGFydCwgZW5kKTtcbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDsgX3Bvc2l0aW9uIDwgX2xlbmd0aDsgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSA5IHx8IDMyIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAxMTE0MTExKSkge1xuICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICAgIHN0YXRlMi5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZTIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykge1xuICB2YXIgc291cmNlS2V5cywga2V5LCBpbmRleCwgcXVhbnRpdHk7XG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZVwiKTtcbiAgfVxuICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4IDwgcXVhbnRpdHk7IGluZGV4ICs9IDEpIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2luZGV4XTtcbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUyLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlLCBzdGFydExpbmUsIHN0YXJ0TGluZVN0YXJ0LCBzdGFydFBvcykge1xuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlKSkge1xuICAgIGtleU5vZGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrZXlOb2RlKTtcbiAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXNcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09IFwib2JqZWN0XCIgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgICBrZXlOb2RlW2luZGV4XSA9IFwiW29iamVjdCBPYmplY3RdXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gXCJvYmplY3RcIiAmJiBfY2xhc3Moa2V5Tm9kZSkgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICBrZXlOb2RlID0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgfVxuICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuICBpZiAoX3Jlc3VsdCA9PT0gbnVsbCkge1xuICAgIF9yZXN1bHQgPSB7fTtcbiAgfVxuICBpZiAoa2V5VGFnID09PSBcInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlXCIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZU5vZGUpKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSB2YWx1ZU5vZGUubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUyLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlMiwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIXN0YXRlMi5qc29uICYmICFfaGFzT3duUHJvcGVydHkkMS5jYWxsKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiYgX2hhc093blByb3BlcnR5JDEuY2FsbChfcmVzdWx0LCBrZXlOb2RlKSkge1xuICAgICAgc3RhdGUyLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUyLmxpbmU7XG4gICAgICBzdGF0ZTIubGluZVN0YXJ0ID0gc3RhcnRMaW5lU3RhcnQgfHwgc3RhdGUyLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlMi5wb3NpdGlvbiA9IHN0YXJ0UG9zIHx8IHN0YXRlMi5wb3NpdGlvbjtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIik7XG4gICAgfVxuICAgIGlmIChrZXlOb2RlID09PSBcIl9fcHJvdG9fX1wiKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVOb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdFtrZXlOb2RlXSA9IHZhbHVlTm9kZTtcbiAgICB9XG4gICAgZGVsZXRlIG92ZXJyaWRhYmxlS2V5c1trZXlOb2RlXTtcbiAgfVxuICByZXR1cm4gX3Jlc3VsdDtcbn1cbmZ1bmN0aW9uIHJlYWRMaW5lQnJlYWsoc3RhdGUyKSB7XG4gIHZhciBjaDtcbiAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICBpZiAoY2ggPT09IDEwKSB7XG4gICAgc3RhdGUyLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDEzKSB7XG4gICAgc3RhdGUyLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbikgPT09IDEwKSB7XG4gICAgICBzdGF0ZTIucG9zaXRpb24rKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkXCIpO1xuICB9XG4gIHN0YXRlMi5saW5lICs9IDE7XG4gIHN0YXRlMi5saW5lU3RhcnQgPSBzdGF0ZTIucG9zaXRpb247XG4gIHN0YXRlMi5maXJzdFRhYkluTGluZSA9IC0xO1xufVxuZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCwgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBpZiAoY2ggPT09IDkgJiYgc3RhdGUyLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZTIuZmlyc3RUYWJJbkxpbmUgPSBzdGF0ZTIucG9zaXRpb247XG4gICAgICB9XG4gICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICB9XG4gICAgaWYgKGFsbG93Q29tbWVudHMgJiYgY2ggPT09IDM1KSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgfSB3aGlsZSAoY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlMik7XG4gICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbik7XG4gICAgICBsaW5lQnJlYWtzKys7XG4gICAgICBzdGF0ZTIubGluZUluZGVudCA9IDA7XG4gICAgICB3aGlsZSAoY2ggPT09IDMyKSB7XG4gICAgICAgIHN0YXRlMi5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlMi5saW5lSW5kZW50IDwgY2hlY2tJbmRlbnQpIHtcbiAgICB0aHJvd1dhcm5pbmcoc3RhdGUyLCBcImRlZmljaWVudCBpbmRlbnRhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTIpIHtcbiAgdmFyIF9wb3NpdGlvbiA9IHN0YXRlMi5wb3NpdGlvbiwgY2g7XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgaWYgKChjaCA9PT0gNDUgfHwgY2ggPT09IDQ2KSAmJiBjaCA9PT0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiYgY2ggPT09IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG4gICAgX3Bvc2l0aW9uICs9IDM7XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gMCB8fCBpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTIsIGNvdW50KSB7XG4gIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHN0YXRlMi5yZXN1bHQgKz0gXCIgXCI7XG4gIH0gZWxzZSBpZiAoY291bnQgPiAxKSB7XG4gICAgc3RhdGUyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGNvdW50IC0gMSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZTIsIG5vZGVJbmRlbnQsIHdpdGhpbkZsb3dDb2xsZWN0aW9uKSB7XG4gIHZhciBwcmVjZWRpbmcsIGZvbGxvd2luZywgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoYXNQZW5kaW5nQ29udGVudCwgX2xpbmUsIF9saW5lU3RhcnQsIF9saW5lSW5kZW50LCBfa2luZCA9IHN0YXRlMi5raW5kLCBfcmVzdWx0ID0gc3RhdGUyLnJlc3VsdCwgY2g7XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgfHwgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8IGNoID09PSAzNSB8fCBjaCA9PT0gMzggfHwgY2ggPT09IDQyIHx8IGNoID09PSAzMyB8fCBjaCA9PT0gMTI0IHx8IGNoID09PSA2MiB8fCBjaCA9PT0gMzkgfHwgY2ggPT09IDM0IHx8IGNoID09PSAzNyB8fCBjaCA9PT0gNjQgfHwgY2ggPT09IDk2KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChjaCA9PT0gNjMgfHwgY2ggPT09IDQ1KSB7XG4gICAgZm9sbG93aW5nID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uICsgMSk7XG4gICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhdGUyLmtpbmQgPSBcInNjYWxhclwiO1xuICBzdGF0ZTIucmVzdWx0ID0gXCJcIjtcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSA1OCkge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uICsgMSk7XG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAzNSkge1xuICAgICAgcHJlY2VkaW5nID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uIC0gMSk7XG4gICAgICBpZiAoaXNfV1NfT1JfRU9MKHByZWNlZGluZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0ZTIucG9zaXRpb24gPT09IHN0YXRlMi5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMikgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUyLmxpbmU7XG4gICAgICBfbGluZVN0YXJ0ID0gc3RhdGUyLmxpbmVTdGFydDtcbiAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUyLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgZmFsc2UsIC0xKTtcbiAgICAgIGlmIChzdGF0ZTIubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlMi5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlMi5saW5lID0gX2xpbmU7XG4gICAgICAgIHN0YXRlMi5saW5lU3RhcnQgPSBfbGluZVN0YXJ0O1xuICAgICAgICBzdGF0ZTIubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTIsIHN0YXRlMi5saW5lIC0gX2xpbmUpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUyLnBvc2l0aW9uICsgMTtcbiAgICB9XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gIH1cbiAgY2FwdHVyZVNlZ21lbnQoc3RhdGUyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgaWYgKHN0YXRlMi5yZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0ZTIua2luZCA9IF9raW5kO1xuICBzdGF0ZTIucmVzdWx0ID0gX3Jlc3VsdDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZTIsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIGNoLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzOSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZTIua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlMi5yZXN1bHQgPSBcIlwiO1xuICBzdGF0ZTIucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgd2hpbGUgKChjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAzOSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUyLCBjYXB0dXJlU3RhcnQsIHN0YXRlMi5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgIGlmIChjaCA9PT0gMzkpIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUyLnBvc2l0aW9uO1xuICAgICAgICBzdGF0ZTIucG9zaXRpb24rKztcbiAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTIsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUyLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKHN0YXRlMi5wb3NpdGlvbiA9PT0gc3RhdGUyLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUyKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZTIucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTIucG9zaXRpb247XG4gICAgfVxuICB9XG4gIHRocm93RXJyb3Ioc3RhdGUyLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5mdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMiwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDtcbiAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICBpZiAoY2ggIT09IDM0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YXRlMi5raW5kID0gXCJzY2FsYXJcIjtcbiAgc3RhdGUyLnJlc3VsdCA9IFwiXCI7XG4gIHN0YXRlMi5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUyLnBvc2l0aW9uO1xuICB3aGlsZSAoKGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDM0KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTIsIGNhcHR1cmVTdGFydCwgc3RhdGUyLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHN0YXRlMi5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gOTIpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMiwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTIucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBzaW1wbGVFc2NhcGVDaGVja1tjaF0pIHtcbiAgICAgICAgc3RhdGUyLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2hdO1xuICAgICAgICBzdGF0ZTIucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHtcbiAgICAgICAgaGV4TGVuZ3RoID0gdG1wO1xuICAgICAgICBoZXhSZXN1bHQgPSAwO1xuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgICAgICAgaGV4UmVzdWx0ID0gKGhleFJlc3VsdCA8PCA0KSArIHRtcDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZTIucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7XG4gICAgICAgIHN0YXRlMi5wb3NpdGlvbisrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidW5rbm93biBlc2NhcGUgc2VxdWVuY2VcIik7XG4gICAgICB9XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUyLnBvc2l0aW9uO1xuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTIsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUyLCBmYWxzZSwgbm9kZUluZGVudCkpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKHN0YXRlMi5wb3NpdGlvbiA9PT0gc3RhdGUyLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUyKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZTIucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTIucG9zaXRpb247XG4gICAgfVxuICB9XG4gIHRocm93RXJyb3Ioc3RhdGUyLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUyLCBub2RlSW5kZW50KSB7XG4gIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zLCBfdGFnID0gc3RhdGUyLnRhZywgX3Jlc3VsdCwgX2FuY2hvciA9IHN0YXRlMi5hbmNob3IsIGZvbGxvd2luZywgdGVybWluYXRvciwgaXNQYWlyLCBpc0V4cGxpY2l0UGFpciwgaXNNYXBwaW5nLCBvdmVycmlkYWJsZUtleXMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwga2V5Tm9kZSwga2V5VGFnLCB2YWx1ZU5vZGUsIGNoO1xuICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbik7XG4gIGlmIChjaCA9PT0gOTEpIHtcbiAgICB0ZXJtaW5hdG9yID0gOTM7XG4gICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgX3Jlc3VsdCA9IFtdO1xuICB9IGVsc2UgaWYgKGNoID09PSAxMjMpIHtcbiAgICB0ZXJtaW5hdG9yID0gMTI1O1xuICAgIGlzTWFwcGluZyA9IHRydWU7XG4gICAgX3Jlc3VsdCA9IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3RhdGUyLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlMi5hbmNob3JNYXBbc3RhdGUyLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUyLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZTIudGFnID0gX3RhZztcbiAgICAgIHN0YXRlMi5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUyLmtpbmQgPSBpc01hcHBpbmcgPyBcIm1hcHBpbmdcIiA6IFwic2VxdWVuY2VcIjtcbiAgICAgIHN0YXRlMi5yZXN1bHQgPSBfcmVzdWx0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDQ0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnXCIpO1xuICAgIH1cbiAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuICAgIGlmIChjaCA9PT0gNjMpIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbiArIDEpO1xuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUyLnBvc2l0aW9uKys7XG4gICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUyLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2xpbmUgPSBzdGF0ZTIubGluZTtcbiAgICBfbGluZVN0YXJ0ID0gc3RhdGUyLmxpbmVTdGFydDtcbiAgICBfcG9zID0gc3RhdGUyLnBvc2l0aW9uO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlMiwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUyLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUyLnJlc3VsdDtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUyLmxpbmUgPT09IF9saW5lKSAmJiBjaCA9PT0gNTgpIHtcbiAgICAgIGlzUGFpciA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUyLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMiwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTIucmVzdWx0O1xuICAgIH1cbiAgICBpZiAoaXNNYXBwaW5nKSB7XG4gICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTIsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDQ0KSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb25cIik7XG59XG5mdW5jdGlvbiByZWFkQmxvY2tTY2FsYXIoc3RhdGUyLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoO1xuICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbik7XG4gIGlmIChjaCA9PT0gMTI0KSB7XG4gICAgZm9sZGluZyA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGNoID09PSA2Mikge1xuICAgIGZvbGRpbmcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZTIua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlMi5yZXN1bHQgPSBcIlwiO1xuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDQzIHx8IGNoID09PSA0NSkge1xuICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgIGNob21waW5nID0gY2ggPT09IDQzID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgZG8ge1xuICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgfSB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKTtcbiAgICBpZiAoY2ggPT09IDM1KSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgfSB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICByZWFkTGluZUJyZWFrKHN0YXRlMik7XG4gICAgc3RhdGUyLmxpbmVJbmRlbnQgPSAwO1xuICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgICB3aGlsZSAoKCFkZXRlY3RlZEluZGVudCB8fCBzdGF0ZTIubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmIGNoID09PSAzMikge1xuICAgICAgc3RhdGUyLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlMi5saW5lSW5kZW50ID4gdGV4dEluZGVudCkge1xuICAgICAgdGV4dEluZGVudCA9IHN0YXRlMi5saW5lSW5kZW50O1xuICAgIH1cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzdGF0ZTIubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHtcbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCJcXG5cIiwgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpO1xuICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkge1xuICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICBzdGF0ZTIucmVzdWx0ICs9IFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoZm9sZGluZykge1xuICAgICAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBhdE1vcmVJbmRlbnRlZCA9IHRydWU7XG4gICAgICAgIHN0YXRlMi5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlMi5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBlbXB0eUxpbmVzICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXMgPT09IDApIHtcbiAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7XG4gICAgICAgICAgc3RhdGUyLnJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCJcXG5cIiwgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpO1xuICAgIH1cbiAgICBkaWRSZWFkQ29udGVudCA9IHRydWU7XG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApIHtcbiAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgIH1cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTIsIGNhcHR1cmVTdGFydCwgc3RhdGUyLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTIsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIF9saW5lLCBfdGFnID0gc3RhdGUyLnRhZywgX2FuY2hvciA9IHN0YXRlMi5hbmNob3IsIF9yZXN1bHQgPSBbXSwgZm9sbG93aW5nLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDtcbiAgaWYgKHN0YXRlMi5maXJzdFRhYkluTGluZSAhPT0gLTEpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3RhdGUyLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlMi5hbmNob3JNYXBbc3RhdGUyLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKHN0YXRlMi5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlMi5wb3NpdGlvbiA9IHN0YXRlMi5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb25cIik7XG4gICAgfVxuICAgIGlmIChjaCAhPT0gNDUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBmb2xsb3dpbmcgPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24gKyAxKTtcbiAgICBpZiAoIWlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlMi5wb3NpdGlvbisrO1xuICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpKSB7XG4gICAgICBpZiAoc3RhdGUyLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIF9saW5lID0gc3RhdGUyLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUyLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgX3Jlc3VsdC5wdXNoKHN0YXRlMi5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUyLCB0cnVlLCAtMSk7XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgIGlmICgoc3RhdGUyLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlMi5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgY2ggIT09IDApIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5XCIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUyLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUyLnRhZyA9IF90YWc7XG4gICAgc3RhdGUyLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUyLmtpbmQgPSBcInNlcXVlbmNlXCI7XG4gICAgc3RhdGUyLnJlc3VsdCA9IF9yZXN1bHQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZTIsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZywgYWxsb3dDb21wYWN0LCBfbGluZSwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MsIF90YWcgPSBzdGF0ZTIudGFnLCBfYW5jaG9yID0gc3RhdGUyLmFuY2hvciwgX3Jlc3VsdCA9IHt9LCBvdmVycmlkYWJsZUtleXMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwga2V5VGFnID0gbnVsbCwga2V5Tm9kZSA9IG51bGwsIHZhbHVlTm9kZSA9IG51bGwsIGF0RXhwbGljaXRLZXkgPSBmYWxzZSwgZGV0ZWN0ZWQgPSBmYWxzZSwgY2g7XG4gIGlmIChzdGF0ZTIuZmlyc3RUYWJJbkxpbmUgIT09IC0xKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHN0YXRlMi5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZTIuYW5jaG9yTWFwW3N0YXRlMi5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbik7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmICghYXRFeHBsaWNpdEtleSAmJiBzdGF0ZTIuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSB7XG4gICAgICBzdGF0ZTIucG9zaXRpb24gPSBzdGF0ZTIuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uXCIpO1xuICAgIH1cbiAgICBmb2xsb3dpbmcgPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24gKyAxKTtcbiAgICBfbGluZSA9IHN0YXRlMi5saW5lO1xuICAgIGlmICgoY2ggPT09IDYzIHx8IGNoID09PSA1OCkgJiYgaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGlmIChjaCA9PT0gNjMpIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgICAgIGF0RXhwbGljaXRLZXkgPSB0cnVlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZTIucG9zaXRpb24gKz0gMTtcbiAgICAgIGNoID0gZm9sbG93aW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBfa2V5TGluZSA9IHN0YXRlMi5saW5lO1xuICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlMi5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUyLnBvc2l0aW9uO1xuICAgICAgaWYgKCFjb21wb3NlTm9kZShzdGF0ZTIsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZTIubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSA1OCkge1xuICAgICAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZTIudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZTIucmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUyLnRhZyA9IF90YWc7XG4gICAgICAgICAgc3RhdGUyLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUyLnRhZyA9IF90YWc7XG4gICAgICAgIHN0YXRlMi5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRlMi5saW5lID09PSBfbGluZSB8fCBzdGF0ZTIubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUyLmxpbmU7XG4gICAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZTIubGluZVN0YXJ0O1xuICAgICAgICBfa2V5UG9zID0gc3RhdGUyLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlMiwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdCkpIHtcbiAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgICBrZXlOb2RlID0gc3RhdGUyLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTIucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpO1xuICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoKHN0YXRlMi5saW5lID09PSBfbGluZSB8fCBzdGF0ZTIubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoICE9PSAwKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5XCIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUyLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZTIudGFnID0gX3RhZztcbiAgICBzdGF0ZTIuYW5jaG9yID0gX2FuY2hvcjtcbiAgICBzdGF0ZTIua2luZCA9IFwibWFwcGluZ1wiO1xuICAgIHN0YXRlMi5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG4gIHJldHVybiBkZXRlY3RlZDtcbn1cbmZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTIpIHtcbiAgdmFyIF9wb3NpdGlvbiwgaXNWZXJiYXRpbSA9IGZhbHNlLCBpc05hbWVkID0gZmFsc2UsIHRhZ0hhbmRsZSwgdGFnTmFtZSwgY2g7XG4gIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzMylcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChzdGF0ZTIudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHlcIik7XG4gIH1cbiAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gIGlmIChjaCA9PT0gNjApIHtcbiAgICBpc1ZlcmJhdGltID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMzMpIHtcbiAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICB0YWdIYW5kbGUgPSBcIiEhXCI7XG4gICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gXCIhXCI7XG4gIH1cbiAgX3Bvc2l0aW9uID0gc3RhdGUyLnBvc2l0aW9uO1xuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIGRvIHtcbiAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgIH0gd2hpbGUgKGNoICE9PSAwICYmIGNoICE9PSA2Mik7XG4gICAgaWYgKHN0YXRlMi5wb3NpdGlvbiA8IHN0YXRlMi5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTIucG9zaXRpb24pO1xuICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGlmIChjaCA9PT0gMzMpIHtcbiAgICAgICAgaWYgKCFpc05hbWVkKSB7XG4gICAgICAgICAgdGFnSGFuZGxlID0gc3RhdGUyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlMi5wb3NpdGlvbiArIDEpO1xuICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMi5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrc1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgfVxuICAgIHRhZ05hbWUgPSBzdGF0ZTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTIucG9zaXRpb24pO1xuICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICB9XG4gIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogXCIgKyB0YWdOYW1lKTtcbiAgfVxuICB0cnkge1xuICAgIHRhZ05hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodGFnTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogXCIgKyB0YWdOYW1lKTtcbiAgfVxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIHN0YXRlMi50YWcgPSB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUyLnRhZ01hcCwgdGFnSGFuZGxlKSkge1xuICAgIHN0YXRlMi50YWcgPSBzdGF0ZTIudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhXCIpIHtcbiAgICBzdGF0ZTIudGFnID0gXCIhXCIgKyB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhIVwiKSB7XG4gICAgc3RhdGUyLnRhZyA9IFwidGFnOnlhbWwub3JnLDIwMDI6XCIgKyB0YWdOYW1lO1xuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUyLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJyArIHRhZ0hhbmRsZSArICdcIicpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlMikge1xuICB2YXIgX3Bvc2l0aW9uLCBjaDtcbiAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pO1xuICBpZiAoY2ggIT09IDM4KVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHN0YXRlMi5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHlcIik7XG4gIH1cbiAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgfVxuICBpZiAoc3RhdGUyLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIpO1xuICB9XG4gIHN0YXRlMi5hbmNob3IgPSBzdGF0ZTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTIucG9zaXRpb24pO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlYWRBbGlhcyhzdGF0ZTIpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsIGNoO1xuICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbik7XG4gIGlmIChjaCAhPT0gNDIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUyLnBvc2l0aW9uO1xuICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkgJiYgIWlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICB9XG4gIGlmIChzdGF0ZTIucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlclwiKTtcbiAgfVxuICBhbGlhcyA9IHN0YXRlMi5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMi5wb3NpdGlvbik7XG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZTIuYW5jaG9yTWFwLCBhbGlhcykpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlMiwgJ3VuaWRlbnRpZmllZCBhbGlhcyBcIicgKyBhbGlhcyArICdcIicpO1xuICB9XG4gIHN0YXRlMi5yZXN1bHQgPSBzdGF0ZTIuYW5jaG9yTWFwW2FsaWFzXTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZTIsIHBhcmVudEluZGVudCwgbm9kZUNvbnRleHQsIGFsbG93VG9TZWVrLCBhbGxvd0NvbXBhY3QpIHtcbiAgdmFyIGFsbG93QmxvY2tTdHlsZXMsIGFsbG93QmxvY2tTY2FsYXJzLCBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsIGluZGVudFN0YXR1cyA9IDEsIGF0TmV3TGluZSA9IGZhbHNlLCBoYXNDb250ZW50ID0gZmFsc2UsIHR5cGVJbmRleCwgdHlwZVF1YW50aXR5LCB0eXBlTGlzdCwgdHlwZTIsIGZsb3dJbmRlbnQsIGJsb2NrSW5kZW50O1xuICBpZiAoc3RhdGUyLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUyLmxpc3RlbmVyKFwib3BlblwiLCBzdGF0ZTIpO1xuICB9XG4gIHN0YXRlMi50YWcgPSBudWxsO1xuICBzdGF0ZTIuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUyLmtpbmQgPSBudWxsO1xuICBzdGF0ZTIucmVzdWx0ID0gbnVsbDtcbiAgYWxsb3dCbG9ja1N0eWxlcyA9IGFsbG93QmxvY2tTY2FsYXJzID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfQkxPQ0tfSU4gPT09IG5vZGVDb250ZXh0O1xuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgIGlmIChzdGF0ZTIubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZTIubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlMi5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTIpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZTIpKSB7XG4gICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuICAgICAgICBpZiAoc3RhdGUyLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMi5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMi5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7XG4gICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDtcbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZTIucG9zaXRpb24gLSBzdGF0ZTIubGluZVN0YXJ0O1xuICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHtcbiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgKHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlMiwgYmxvY2tJbmRlbnQpIHx8IHJlYWRCbG9ja01hcHBpbmcoc3RhdGUyLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8IHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZTIsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFsbG93QmxvY2tTY2FsYXJzICYmIHJlYWRCbG9ja1NjYWxhcihzdGF0ZTIsIGZsb3dJbmRlbnQpIHx8IHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUyLCBmbG93SW5kZW50KSB8fCByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMiwgZmxvd0luZGVudCkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUyKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgIGlmIChzdGF0ZTIudGFnICE9PSBudWxsIHx8IHN0YXRlMi5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkUGxhaW5TY2FsYXIoc3RhdGUyLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgIGlmIChzdGF0ZTIudGFnID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZTIudGFnID0gXCI/XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZTIuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUyLmFuY2hvck1hcFtzdGF0ZTIuYW5jaG9yXSA9IHN0YXRlMi5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkge1xuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTIsIGJsb2NrSW5kZW50KTtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRlMi50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUyLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgc3RhdGUyLmFuY2hvck1hcFtzdGF0ZTIuYW5jaG9yXSA9IHN0YXRlMi5yZXN1bHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0YXRlMi50YWcgPT09IFwiP1wiKSB7XG4gICAgaWYgKHN0YXRlMi5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUyLmtpbmQgIT09IFwic2NhbGFyXCIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCAndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSBcInNjYWxhclwiLCBub3QgXCInICsgc3RhdGUyLmtpbmQgKyAnXCInKTtcbiAgICB9XG4gICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZTIuaW1wbGljaXRUeXBlcy5sZW5ndGg7IHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTsgdHlwZUluZGV4ICs9IDEpIHtcbiAgICAgIHR5cGUyID0gc3RhdGUyLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XTtcbiAgICAgIGlmICh0eXBlMi5yZXNvbHZlKHN0YXRlMi5yZXN1bHQpKSB7XG4gICAgICAgIHN0YXRlMi5yZXN1bHQgPSB0eXBlMi5jb25zdHJ1Y3Qoc3RhdGUyLnJlc3VsdCk7XG4gICAgICAgIHN0YXRlMi50YWcgPSB0eXBlMi50YWc7XG4gICAgICAgIGlmIChzdGF0ZTIuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUyLmFuY2hvck1hcFtzdGF0ZTIuYW5jaG9yXSA9IHN0YXRlMi5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0YXRlMi50YWcgIT09IFwiIVwiKSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUyLnR5cGVNYXBbc3RhdGUyLmtpbmQgfHwgXCJmYWxsYmFja1wiXSwgc3RhdGUyLnRhZykpIHtcbiAgICAgIHR5cGUyID0gc3RhdGUyLnR5cGVNYXBbc3RhdGUyLmtpbmQgfHwgXCJmYWxsYmFja1wiXVtzdGF0ZTIudGFnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZTIgPSBudWxsO1xuICAgICAgdHlwZUxpc3QgPSBzdGF0ZTIudHlwZU1hcC5tdWx0aVtzdGF0ZTIua2luZCB8fCBcImZhbGxiYWNrXCJdO1xuICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSB0eXBlTGlzdC5sZW5ndGg7IHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTsgdHlwZUluZGV4ICs9IDEpIHtcbiAgICAgICAgaWYgKHN0YXRlMi50YWcuc2xpY2UoMCwgdHlwZUxpc3RbdHlwZUluZGV4XS50YWcubGVuZ3RoKSA9PT0gdHlwZUxpc3RbdHlwZUluZGV4XS50YWcpIHtcbiAgICAgICAgICB0eXBlMiA9IHR5cGVMaXN0W3R5cGVJbmRleF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0eXBlMikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwidW5rbm93biB0YWcgITxcIiArIHN0YXRlMi50YWcgKyBcIj5cIik7XG4gICAgfVxuICAgIGlmIChzdGF0ZTIucmVzdWx0ICE9PSBudWxsICYmIHR5cGUyLmtpbmQgIT09IHN0YXRlMi5raW5kKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPFwiICsgc3RhdGUyLnRhZyArICc+IHRhZzsgaXQgc2hvdWxkIGJlIFwiJyArIHR5cGUyLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZTIua2luZCArICdcIicpO1xuICAgIH1cbiAgICBpZiAoIXR5cGUyLnJlc29sdmUoc3RhdGUyLnJlc3VsdCwgc3RhdGUyLnRhZykpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8XCIgKyBzdGF0ZTIudGFnICsgXCI+IGV4cGxpY2l0IHRhZ1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUyLnJlc3VsdCA9IHR5cGUyLmNvbnN0cnVjdChzdGF0ZTIucmVzdWx0LCBzdGF0ZTIudGFnKTtcbiAgICAgIGlmIChzdGF0ZTIuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlMi5hbmNob3JNYXBbc3RhdGUyLmFuY2hvcl0gPSBzdGF0ZTIucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RhdGUyLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUyLmxpc3RlbmVyKFwiY2xvc2VcIiwgc3RhdGUyKTtcbiAgfVxuICByZXR1cm4gc3RhdGUyLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZTIuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7XG59XG5mdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUyKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUyLnBvc2l0aW9uLCBfcG9zaXRpb24sIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MsIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSwgY2g7XG4gIHN0YXRlMi52ZXJzaW9uID0gbnVsbDtcbiAgc3RhdGUyLmNoZWNrTGluZUJyZWFrcyA9IHN0YXRlMi5sZWdhY3k7XG4gIHN0YXRlMi50YWdNYXAgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RhdGUyLmFuY2hvck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB3aGlsZSAoKGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpO1xuICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUyLnBvc2l0aW9uKTtcbiAgICBpZiAoc3RhdGUyLmxpbmVJbmRlbnQgPiAwIHx8IGNoICE9PSAzNykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgIF9wb3NpdGlvbiA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTIucG9zaXRpb24pO1xuICAgIH1cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUyLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoXCIpO1xuICAgIH1cbiAgICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgY2ggPSBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMi5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IDM1KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX0VPTChjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc19FT0woY2gpKVxuICAgICAgICBicmVhaztcbiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMi5wb3NpdGlvbjtcbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUyLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTIucG9zaXRpb24pKTtcbiAgICB9XG4gICAgaWYgKGNoICE9PSAwKVxuICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZTIpO1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUyLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlMiwgJ3Vua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlIFwiJyArIGRpcmVjdGl2ZU5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTIsIHRydWUsIC0xKTtcbiAgaWYgKHN0YXRlMi5saW5lSW5kZW50ID09PSAwICYmIHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbikgPT09IDQ1ICYmIHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbiArIDEpID09PSA0NSAmJiBzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24gKyAyKSA9PT0gNDUpIHtcbiAgICBzdGF0ZTIucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpO1xuICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlMiwgXCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkXCIpO1xuICB9XG4gIGNvbXBvc2VOb2RlKHN0YXRlMiwgc3RhdGUyLmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpO1xuICBpZiAoc3RhdGUyLmNoZWNrTGluZUJyZWFrcyAmJiBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUy50ZXN0KHN0YXRlMi5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZTIucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZTIsIFwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50XCIpO1xuICB9XG4gIHN0YXRlMi5kb2N1bWVudHMucHVzaChzdGF0ZTIucmVzdWx0KTtcbiAgaWYgKHN0YXRlMi5wb3NpdGlvbiA9PT0gc3RhdGUyLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUyKSkge1xuICAgIGlmIChzdGF0ZTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTIucG9zaXRpb24pID09PSA0Nikge1xuICAgICAgc3RhdGUyLnBvc2l0aW9uICs9IDM7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMiwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHN0YXRlMi5wb3NpdGlvbiA8IHN0YXRlMi5sZW5ndGggLSAxKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZTIsIFwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHtcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTAgJiYgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTMpIHtcbiAgICAgIGlucHV0ICs9IFwiXFxuXCI7XG4gICAgfVxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cbiAgdmFyIHN0YXRlMiA9IG5ldyBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKTtcbiAgdmFyIG51bGxwb3MgPSBpbnB1dC5pbmRleE9mKFwiXFwwXCIpO1xuICBpZiAobnVsbHBvcyAhPT0gLTEpIHtcbiAgICBzdGF0ZTIucG9zaXRpb24gPSBudWxscG9zO1xuICAgIHRocm93RXJyb3Ioc3RhdGUyLCBcIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dFwiKTtcbiAgfVxuICBzdGF0ZTIuaW5wdXQgKz0gXCJcXDBcIjtcbiAgd2hpbGUgKHN0YXRlMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMi5wb3NpdGlvbikgPT09IDMyKSB7XG4gICAgc3RhdGUyLmxpbmVJbmRlbnQgKz0gMTtcbiAgICBzdGF0ZTIucG9zaXRpb24gKz0gMTtcbiAgfVxuICB3aGlsZSAoc3RhdGUyLnBvc2l0aW9uIDwgc3RhdGUyLmxlbmd0aCAtIDEpIHtcbiAgICByZWFkRG9jdW1lbnQoc3RhdGUyKTtcbiAgfVxuICByZXR1cm4gc3RhdGUyLmRvY3VtZW50cztcbn1cbmZ1bmN0aW9uIGxvYWRBbGwkMShpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7XG4gIGlmIChpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yMiA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG9wdGlvbnMgPSBpdGVyYXRvcjI7XG4gICAgaXRlcmF0b3IyID0gbnVsbDtcbiAgfVxuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7XG4gIGlmICh0eXBlb2YgaXRlcmF0b3IyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzO1xuICB9XG4gIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpdGVyYXRvcjIoZG9jdW1lbnRzW2luZGV4XSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxvYWQkMShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7XG4gIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfSBlbHNlIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50c1swXTtcbiAgfVxuICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmVcIik7XG59XG52YXIgbG9hZEFsbF8xID0gbG9hZEFsbCQxO1xudmFyIGxvYWRfMSA9IGxvYWQkMTtcbnZhciBsb2FkZXIkaiA9IHtcbiAgbG9hZEFsbDogbG9hZEFsbF8xLFxuICBsb2FkOiBsb2FkXzFcbn07XG52YXIgRkFJTFNBRkVfU0NIRU1BID0gZmFpbHNhZmU7XG52YXIgbG9hZCA9IGxvYWRlciRqLmxvYWQ7XG5jb25zdCBmcm9udE1hdHRlclJlZ2V4ID0gL14tezN9XFxzKltcXG5cXHJdKC4qPylbXFxuXFxyXS17M31cXHMqW1xcblxccl0rL3M7XG5mdW5jdGlvbiBleHRyYWN0RnJvbnRNYXR0ZXIodGV4dCwgZGIpIHtcbiAgdmFyIF9hLCBfYjtcbiAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2goZnJvbnRNYXR0ZXJSZWdleCk7XG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3QgcGFyc2VkID0gbG9hZChtYXRjaGVzWzFdLCB7XG4gICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIG9ubHkgYWxsb3cgc3RyaW5ncywgYXJyYXlzLCBhbmQgcGxhaW4gb2JqZWN0cy5cbiAgICAgIC8vIGh0dHBzOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDIzNDZcbiAgICAgIHNjaGVtYTogRkFJTFNBRkVfU0NIRU1BXG4gICAgfSk7XG4gICAgaWYgKHBhcnNlZCA9PSBudWxsID8gdm9pZCAwIDogcGFyc2VkLnRpdGxlKSB7XG4gICAgICAoX2EgPSBkYi5zZXREaWFncmFtVGl0bGUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKGRiLCBwYXJzZWQudGl0bGUpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkID09IG51bGwgPyB2b2lkIDAgOiBwYXJzZWQuZGlzcGxheU1vZGUpIHtcbiAgICAgIChfYiA9IGRiLnNldERpc3BsYXlNb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChkYiwgcGFyc2VkLmRpc3BsYXlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQuc2xpY2UobWF0Y2hlc1swXS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5jb25zdCBhc3NpZ25XaXRoRGVwdGggPSBmdW5jdGlvbihkc3QsIHNyYywgY29uZmlnMikge1xuICBjb25zdCB7IGRlcHRoLCBjbG9iYmVyIH0gPSBPYmplY3QuYXNzaWduKHsgZGVwdGg6IDIsIGNsb2JiZXI6IGZhbHNlIH0sIGNvbmZpZzIpO1xuICBpZiAoQXJyYXkuaXNBcnJheShzcmMpICYmICFBcnJheS5pc0FycmF5KGRzdCkpIHtcbiAgICBzcmMuZm9yRWFjaCgocykgPT4gYXNzaWduV2l0aERlcHRoKGRzdCwgcywgY29uZmlnMikpO1xuICAgIHJldHVybiBkc3Q7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzcmMpICYmIEFycmF5LmlzQXJyYXkoZHN0KSkge1xuICAgIHNyYy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBpZiAoIWRzdC5pbmNsdWRlcyhzKSkge1xuICAgICAgICBkc3QucHVzaChzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZHN0O1xuICB9XG4gIGlmIChkc3QgPT09IHZvaWQgMCB8fCBkZXB0aCA8PSAwKSB7XG4gICAgaWYgKGRzdCAhPT0gdm9pZCAwICYmIGRzdCAhPT0gbnVsbCAmJiB0eXBlb2YgZHN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBzcmMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGRzdCwgc3JjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG4gIH1cbiAgaWYgKHNyYyAhPT0gdm9pZCAwICYmIHR5cGVvZiBkc3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHNyYyA9PT0gXCJvYmplY3RcIikge1xuICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHNyY1trZXldID09PSBcIm9iamVjdFwiICYmIChkc3Rba2V5XSA9PT0gdm9pZCAwIHx8IHR5cGVvZiBkc3Rba2V5XSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgaWYgKGRzdFtrZXldID09PSB2b2lkIDApIHtcbiAgICAgICAgICBkc3Rba2V5XSA9IEFycmF5LmlzQXJyYXkoc3JjW2tleV0pID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBkc3Rba2V5XSA9IGFzc2lnbldpdGhEZXB0aChkc3Rba2V5XSwgc3JjW2tleV0sIHsgZGVwdGg6IGRlcHRoIC0gMSwgY2xvYmJlciB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2xvYmJlciB8fCB0eXBlb2YgZHN0W2tleV0gIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHNyY1trZXldICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGRzdFtrZXldID0gc3JjW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGRzdDtcbn07XG5jb25zdCBhc3NpZ25XaXRoRGVwdGgkMSA9IGFzc2lnbldpdGhEZXB0aDtcbmNvbnN0IGRlZmF1bHRDb25maWcgPSBPYmplY3QuZnJlZXplKGRlZmF1bHRDb25maWckMSk7XG5sZXQgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBkZWZhdWx0Q29uZmlnKTtcbmxldCBjb25maWdGcm9tSW5pdGlhbGl6ZTtcbmxldCBkaXJlY3RpdmVzID0gW107XG5sZXQgY3VycmVudENvbmZpZyA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBkZWZhdWx0Q29uZmlnKTtcbmNvbnN0IHVwZGF0ZUN1cnJlbnRDb25maWcgPSAoc2l0ZUNmZywgX2RpcmVjdGl2ZXMpID0+IHtcbiAgbGV0IGNmZyA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBzaXRlQ2ZnKTtcbiAgbGV0IHN1bU9mRGlyZWN0aXZlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGQgb2YgX2RpcmVjdGl2ZXMpIHtcbiAgICBzYW5pdGl6ZShkKTtcbiAgICBzdW1PZkRpcmVjdGl2ZXMgPSBhc3NpZ25XaXRoRGVwdGgkMShzdW1PZkRpcmVjdGl2ZXMsIGQpO1xuICB9XG4gIGNmZyA9IGFzc2lnbldpdGhEZXB0aCQxKGNmZywgc3VtT2ZEaXJlY3RpdmVzKTtcbiAgaWYgKHN1bU9mRGlyZWN0aXZlcy50aGVtZSAmJiBzdW1PZkRpcmVjdGl2ZXMudGhlbWUgaW4gdGhlbWUpIHtcbiAgICBjb25zdCB0bXBDb25maWdGcm9tSW5pdGlhbGl6ZSA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBjb25maWdGcm9tSW5pdGlhbGl6ZSk7XG4gICAgY29uc3QgdGhlbWVWYXJpYWJsZXMgPSBhc3NpZ25XaXRoRGVwdGgkMShcbiAgICAgIHRtcENvbmZpZ0Zyb21Jbml0aWFsaXplLnRoZW1lVmFyaWFibGVzIHx8IHt9LFxuICAgICAgc3VtT2ZEaXJlY3RpdmVzLnRoZW1lVmFyaWFibGVzXG4gICAgKTtcbiAgICBpZiAoY2ZnLnRoZW1lICYmIGNmZy50aGVtZSBpbiB0aGVtZSkge1xuICAgICAgY2ZnLnRoZW1lVmFyaWFibGVzID0gdGhlbWVbY2ZnLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0aGVtZVZhcmlhYmxlcyk7XG4gICAgfVxuICB9XG4gIGN1cnJlbnRDb25maWcgPSBjZmc7XG4gIGNoZWNrQ29uZmlnKGN1cnJlbnRDb25maWcpO1xuICByZXR1cm4gY3VycmVudENvbmZpZztcbn07XG5jb25zdCBzZXRTaXRlQ29uZmlnID0gKGNvbmYpID0+IHtcbiAgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBkZWZhdWx0Q29uZmlnKTtcbiAgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aCQxKHNpdGVDb25maWcsIGNvbmYpO1xuICBpZiAoY29uZi50aGVtZSAmJiB0aGVtZVtjb25mLnRoZW1lXSkge1xuICAgIHNpdGVDb25maWcudGhlbWVWYXJpYWJsZXMgPSB0aGVtZVtjb25mLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhjb25mLnRoZW1lVmFyaWFibGVzKTtcbiAgfVxuICB1cGRhdGVDdXJyZW50Q29uZmlnKHNpdGVDb25maWcsIGRpcmVjdGl2ZXMpO1xuICByZXR1cm4gc2l0ZUNvbmZpZztcbn07XG5jb25zdCBzYXZlQ29uZmlnRnJvbUluaXRpYWxpemUgPSAoY29uZikgPT4ge1xuICBjb25maWdGcm9tSW5pdGlhbGl6ZSA9IGFzc2lnbldpdGhEZXB0aCQxKHt9LCBjb25mKTtcbn07XG5jb25zdCB1cGRhdGVTaXRlQ29uZmlnID0gKGNvbmYpID0+IHtcbiAgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aCQxKHNpdGVDb25maWcsIGNvbmYpO1xuICB1cGRhdGVDdXJyZW50Q29uZmlnKHNpdGVDb25maWcsIGRpcmVjdGl2ZXMpO1xuICByZXR1cm4gc2l0ZUNvbmZpZztcbn07XG5jb25zdCBnZXRTaXRlQ29uZmlnID0gKCkgPT4ge1xuICByZXR1cm4gYXNzaWduV2l0aERlcHRoJDEoe30sIHNpdGVDb25maWcpO1xufTtcbmNvbnN0IHNldENvbmZpZyA9IChjb25mKSA9PiB7XG4gIGNoZWNrQ29uZmlnKGNvbmYpO1xuICBhc3NpZ25XaXRoRGVwdGgkMShjdXJyZW50Q29uZmlnLCBjb25mKTtcbiAgcmV0dXJuIGdldENvbmZpZyQxKCk7XG59O1xuY29uc3QgZ2V0Q29uZmlnJDEgPSAoKSA9PiB7XG4gIHJldHVybiBhc3NpZ25XaXRoRGVwdGgkMSh7fSwgY3VycmVudENvbmZpZyk7XG59O1xuY29uc3Qgc2FuaXRpemUgPSAob3B0aW9ucykgPT4ge1xuICBbXCJzZWN1cmVcIiwgLi4uc2l0ZUNvbmZpZy5zZWN1cmUgPz8gW11dLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChvcHRpb25zW2tleV0gIT09IHZvaWQgMCkge1xuICAgICAgbG9nJDEuZGVidWcoYERlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgJHtrZXl9YCwgb3B0aW9uc1trZXldKTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGtleS5pbmRleE9mKFwiX19cIikgPT09IDApIHtcbiAgICAgIGRlbGV0ZSBvcHRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09IFwic3RyaW5nXCIgJiYgKG9wdGlvbnNba2V5XS5pbmNsdWRlcyhcIjxcIikgfHwgb3B0aW9uc1trZXldLmluY2x1ZGVzKFwiPlwiKSB8fCBvcHRpb25zW2tleV0uaW5jbHVkZXMoXCJ1cmwoZGF0YTpcIikpKSB7XG4gICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnNba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgc2FuaXRpemUob3B0aW9uc1trZXldKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGFkZERpcmVjdGl2ZSA9IChkaXJlY3RpdmUyKSA9PiB7XG4gIGlmIChkaXJlY3RpdmUyLmZvbnRGYW1pbHkpIHtcbiAgICBpZiAoIWRpcmVjdGl2ZTIudGhlbWVWYXJpYWJsZXMpIHtcbiAgICAgIGRpcmVjdGl2ZTIudGhlbWVWYXJpYWJsZXMgPSB7IGZvbnRGYW1pbHk6IGRpcmVjdGl2ZTIuZm9udEZhbWlseSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWRpcmVjdGl2ZTIudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseSkge1xuICAgICAgICBkaXJlY3RpdmUyLnRoZW1lVmFyaWFibGVzID0geyBmb250RmFtaWx5OiBkaXJlY3RpdmUyLmZvbnRGYW1pbHkgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGlyZWN0aXZlcy5wdXNoKGRpcmVjdGl2ZTIpO1xuICB1cGRhdGVDdXJyZW50Q29uZmlnKHNpdGVDb25maWcsIGRpcmVjdGl2ZXMpO1xufTtcbmNvbnN0IHJlc2V0ID0gKGNvbmZpZzIgPSBzaXRlQ29uZmlnKSA9PiB7XG4gIGRpcmVjdGl2ZXMgPSBbXTtcbiAgdXBkYXRlQ3VycmVudENvbmZpZyhjb25maWcyLCBkaXJlY3RpdmVzKTtcbn07XG52YXIgQ29uZmlnV2FybmluZyA9IC8qIEBfX1BVUkVfXyAqLyAoKENvbmZpZ1dhcm5pbmcyKSA9PiB7XG4gIENvbmZpZ1dhcm5pbmcyW1wiTEFaWV9MT0FEX0RFUFJFQ0FURURcIl0gPSBcIlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC5cIjtcbiAgcmV0dXJuIENvbmZpZ1dhcm5pbmcyO1xufSkoQ29uZmlnV2FybmluZyB8fCB7fSk7XG5jb25zdCBpc3N1ZWRXYXJuaW5ncyA9IHt9O1xuY29uc3QgaXNzdWVXYXJuaW5nID0gKHdhcm5pbmcpID0+IHtcbiAgaWYgKGlzc3VlZFdhcm5pbmdzW3dhcm5pbmddKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZyQxLndhcm4oQ29uZmlnV2FybmluZ1t3YXJuaW5nXSk7XG4gIGlzc3VlZFdhcm5pbmdzW3dhcm5pbmddID0gdHJ1ZTtcbn07XG5jb25zdCBjaGVja0NvbmZpZyA9IChjb25maWcyKSA9PiB7XG4gIGlmICghY29uZmlnMikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29uZmlnMi5sYXp5TG9hZGVkRGlhZ3JhbXMgfHwgY29uZmlnMi5sb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCkge1xuICAgIGlzc3VlV2FybmluZyhcIkxBWllfTE9BRF9ERVBSRUNBVEVEXCIpO1xuICB9XG59O1xuY29uc3QgZDNBdHRycyA9IGZ1bmN0aW9uKGQzRWxlbSwgYXR0cnMpIHtcbiAgZm9yIChsZXQgYXR0ciBvZiBhdHRycykge1xuICAgIGQzRWxlbS5hdHRyKGF0dHJbMF0sIGF0dHJbMV0pO1xuICB9XG59O1xuY29uc3QgY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzID0gZnVuY3Rpb24oaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpIHtcbiAgbGV0IGF0dHJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgaWYgKHVzZU1heFdpZHRoKSB7XG4gICAgYXR0cnMuc2V0KFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIGF0dHJzLnNldChcInN0eWxlXCIsIGBtYXgtd2lkdGg6ICR7d2lkdGh9cHg7YCk7XG4gIH0gZWxzZSB7XG4gICAgYXR0cnMuc2V0KFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gICAgYXR0cnMuc2V0KFwid2lkdGhcIiwgd2lkdGgpO1xuICB9XG4gIHJldHVybiBhdHRycztcbn07XG5jb25zdCBjb25maWd1cmVTdmdTaXplID0gZnVuY3Rpb24oc3ZnRWxlbSwgaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpIHtcbiAgY29uc3QgYXR0cnMgPSBjYWxjdWxhdGVTdmdTaXplQXR0cnMoaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpO1xuICBkM0F0dHJzKHN2Z0VsZW0sIGF0dHJzKTtcbn07XG5jb25zdCBzZXR1cEdyYXBoVmlld2JveCQxID0gZnVuY3Rpb24oZ3JhcGgsIHN2Z0VsZW0sIHBhZGRpbmcsIHVzZU1heFdpZHRoKSB7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Z0VsZW0ubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgc1dpZHRoID0gc3ZnQm91bmRzLndpZHRoO1xuICBjb25zdCBzSGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodDtcbiAgbG9nJDEuaW5mbyhgU1ZHIGJvdW5kczogJHtzV2lkdGh9eCR7c0hlaWdodH1gLCBzdmdCb3VuZHMpO1xuICBsZXQgd2lkdGggPSAwO1xuICBsZXQgaGVpZ2h0ID0gMDtcbiAgbG9nJDEuaW5mbyhgR3JhcGggYm91bmRzOiAke3dpZHRofXgke2hlaWdodH1gLCBncmFwaCk7XG4gIHdpZHRoID0gc1dpZHRoICsgcGFkZGluZyAqIDI7XG4gIGhlaWdodCA9IHNIZWlnaHQgKyBwYWRkaW5nICogMjtcbiAgbG9nJDEuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7d2lkdGh9eCR7aGVpZ2h0fWApO1xuICBjb25maWd1cmVTdmdTaXplKHN2Z0VsZW0sIGhlaWdodCwgd2lkdGgsIHVzZU1heFdpZHRoKTtcbiAgY29uc3QgdkJveCA9IGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLndpZHRoICsgMiAqIHBhZGRpbmd9ICR7c3ZnQm91bmRzLmhlaWdodCArIDIgKiBwYWRkaW5nfWA7XG4gIHN2Z0VsZW0uYXR0cihcInZpZXdCb3hcIiwgdkJveCk7XG59O1xuY29uc3QgdGhlbWVzID0ge307XG5jb25zdCBnZXRTdHlsZXMkMSA9ICh0eXBlMiwgdXNlclN0eWxlcywgb3B0aW9ucykgPT4ge1xuICBsZXQgZGlhZ3JhbVN0eWxlcyA9IFwiXCI7XG4gIGlmICh0eXBlMiBpbiB0aGVtZXMgJiYgdGhlbWVzW3R5cGUyXSkge1xuICAgIGRpYWdyYW1TdHlsZXMgPSB0aGVtZXNbdHlwZTJdKG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGxvZyQxLndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke3R5cGUyfWApO1xuICB9XG4gIHJldHVybiBgICYge1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gICAgZm9udC1zaXplOiAke29wdGlvbnMuZm9udFNpemV9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9XG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAmIC5lcnJvci1pY29uIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZXJyb3JCa2dDb2xvcn07XG4gIH1cbiAgJiAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmVycm9yVGV4dENvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5lcnJvclRleHRDb2xvcn07XG4gIH1cblxuICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG4gICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDMuNXB4XG4gIH1cbiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgJiAubWFya2VyIHtcbiAgICBmaWxsOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICB9XG4gICYgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgfVxuXG4gICYgc3ZnIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLmZvbnRTaXplfTtcbiAgfVxuXG4gICR7ZGlhZ3JhbVN0eWxlc31cblxuICAke3VzZXJTdHlsZXN9XG5gO1xufTtcbmNvbnN0IGFkZFN0eWxlc0ZvckRpYWdyYW0gPSAodHlwZTIsIGRpYWdyYW1UaGVtZSkgPT4ge1xuICB0aGVtZXNbdHlwZTJdID0gZGlhZ3JhbVRoZW1lO1xufTtcbmNvbnN0IGdldFN0eWxlcyQyID0gZ2V0U3R5bGVzJDE7XG5sZXQgdGl0bGUgPSBcIlwiO1xubGV0IGRpYWdyYW1UaXRsZSA9IFwiXCI7XG5sZXQgZGVzY3JpcHRpb24gPSBcIlwiO1xuY29uc3Qgc2FuaXRpemVUZXh0JDEgPSAodHh0KSA9PiBzYW5pdGl6ZVRleHQkMih0eHQsIGdldENvbmZpZyQxKCkpO1xuY29uc3QgY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdGl0bGUgPSBcIlwiO1xuICBkZXNjcmlwdGlvbiA9IFwiXCI7XG4gIGRpYWdyYW1UaXRsZSA9IFwiXCI7XG59O1xuY29uc3Qgc2V0QWNjVGl0bGUgPSBmdW5jdGlvbih0eHQpIHtcbiAgdGl0bGUgPSBzYW5pdGl6ZVRleHQkMSh0eHQpLnJlcGxhY2UoL15cXHMrL2csIFwiXCIpO1xufTtcbmNvbnN0IGdldEFjY1RpdGxlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aXRsZSB8fCBkaWFncmFtVGl0bGU7XG59O1xuY29uc3Qgc2V0QWNjRGVzY3JpcHRpb24gPSBmdW5jdGlvbih0eHQpIHtcbiAgZGVzY3JpcHRpb24gPSBzYW5pdGl6ZVRleHQkMSh0eHQpLnJlcGxhY2UoL1xcblxccysvZywgXCJcXG5cIik7XG59O1xuY29uc3QgZ2V0QWNjRGVzY3JpcHRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRlc2NyaXB0aW9uO1xufTtcbmNvbnN0IHNldERpYWdyYW1UaXRsZSA9IGZ1bmN0aW9uKHR4dCkge1xuICBkaWFncmFtVGl0bGUgPSBzYW5pdGl6ZVRleHQkMSh0eHQpO1xufTtcbmNvbnN0IGdldERpYWdyYW1UaXRsZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZGlhZ3JhbVRpdGxlO1xufTtcbmNvbnN0IGNvbW1vbkRiID0ge1xuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGNsZWFyXG59O1xuY29uc3QgY29tbW9uRGIkMSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGNsZWFyLFxuICBkZWZhdWx0OiBjb21tb25EYixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpO1xubGV0IGN1cnJlbnREaXJlY3RpdmUgPSB7fTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlJDEgPSBmdW5jdGlvbihwLCBzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUyKSB7XG4gIGxvZyQxLmRlYnVnKFwicGFyc2VEaXJlY3RpdmUgaXMgYmVpbmcgY2FsbGVkXCIsIHN0YXRlbWVudCwgY29udGV4dCwgdHlwZTIpO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZW1lbnQgIT09IHZvaWQgMCkge1xuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnRyaW0oKTtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIFwib3Blbl9kaXJlY3RpdmVcIjpcbiAgICAgICAgICBjdXJyZW50RGlyZWN0aXZlID0ge307XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0eXBlX2RpcmVjdGl2ZVwiOlxuICAgICAgICAgIGlmICghY3VycmVudERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY3VycmVudERpcmVjdGl2ZSBpcyB1bmRlZmluZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnREaXJlY3RpdmUudHlwZSA9IHN0YXRlbWVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXJnX2RpcmVjdGl2ZVwiOlxuICAgICAgICAgIGlmICghY3VycmVudERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY3VycmVudERpcmVjdGl2ZSBpcyB1bmRlZmluZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnREaXJlY3RpdmUuYXJncyA9IEpTT04ucGFyc2Uoc3RhdGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNsb3NlX2RpcmVjdGl2ZVwiOlxuICAgICAgICAgIGhhbmRsZURpcmVjdGl2ZShwLCBjdXJyZW50RGlyZWN0aXZlLCB0eXBlMik7XG4gICAgICAgICAgY3VycmVudERpcmVjdGl2ZSA9IHZvaWQgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nJDEuZXJyb3IoXG4gICAgICBgRXJyb3Igd2hpbGUgcmVuZGVyaW5nIHNlcXVlbmNlRGlhZ3JhbSBkaXJlY3RpdmU6ICR7c3RhdGVtZW50fSBqaXNvbiBjb250ZXh0OiAke2NvbnRleHR9YFxuICAgICk7XG4gICAgbG9nJDEuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gIH1cbn07XG5jb25zdCBoYW5kbGVEaXJlY3RpdmUgPSBmdW5jdGlvbihwLCBkaXJlY3RpdmUyLCB0eXBlMikge1xuICBsb2ckMS5pbmZvKGBEaXJlY3RpdmUgdHlwZT0ke2RpcmVjdGl2ZTIudHlwZX0gd2l0aCBhcmdzOmAsIGRpcmVjdGl2ZTIuYXJncyk7XG4gIHN3aXRjaCAoZGlyZWN0aXZlMi50eXBlKSB7XG4gICAgY2FzZSBcImluaXRcIjpcbiAgICBjYXNlIFwiaW5pdGlhbGl6ZVwiOiB7XG4gICAgICBbXCJjb25maWdcIl0uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICBpZiAoZGlyZWN0aXZlMi5hcmdzW3Byb3BdICE9PSB2b2lkIDApIHtcbiAgICAgICAgICBpZiAodHlwZTIgPT09IFwiZmxvd2NoYXJ0LXYyXCIpIHtcbiAgICAgICAgICAgIHR5cGUyID0gXCJmbG93Y2hhcnRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlyZWN0aXZlMi5hcmdzW3R5cGUyXSA9IGRpcmVjdGl2ZTIuYXJnc1twcm9wXTtcbiAgICAgICAgICBkZWxldGUgZGlyZWN0aXZlMi5hcmdzW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZyQxLmluZm8oXCJzYW5pdGl6ZSBpbiBoYW5kbGVEaXJlY3RpdmVcIiwgZGlyZWN0aXZlMi5hcmdzKTtcbiAgICAgIGRpcmVjdGl2ZVNhbml0aXplcihkaXJlY3RpdmUyLmFyZ3MpO1xuICAgICAgbG9nJDEuaW5mbyhcInNhbml0aXplIGluIGhhbmRsZURpcmVjdGl2ZSAoZG9uZSlcIiwgZGlyZWN0aXZlMi5hcmdzKTtcbiAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmUyLmFyZ3MpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJ3cmFwXCI6XG4gICAgY2FzZSBcIm5vd3JhcFwiOlxuICAgICAgaWYgKHAgJiYgcFtcInNldFdyYXBcIl0pIHtcbiAgICAgICAgcC5zZXRXcmFwKGRpcmVjdGl2ZTIudHlwZSA9PT0gXCJ3cmFwXCIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRoZW1lQ3NzXCI6XG4gICAgICBsb2ckMS53YXJuKFwidGhlbWVDc3MgZW5jb3VudGVyZWRcIik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nJDEud2FybihcbiAgICAgICAgYFVuaGFuZGxlZCBkaXJlY3RpdmU6IHNvdXJjZTogJyUleyR7ZGlyZWN0aXZlMi50eXBlfTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBkaXJlY3RpdmUyLmFyZ3MgPyBkaXJlY3RpdmUyLmFyZ3MgOiB7fVxuICAgICAgICApfX0lJWAsXG4gICAgICAgIGRpcmVjdGl2ZTJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxufTtcbmNvbnN0IGxvZyA9IGxvZyQxO1xuY29uc3Qgc2V0TG9nTGV2ZWwgPSBzZXRMb2dMZXZlbCQxO1xuY29uc3QgZ2V0Q29uZmlnID0gZ2V0Q29uZmlnJDE7XG5jb25zdCBzYW5pdGl6ZVRleHQgPSAodGV4dCkgPT4gc2FuaXRpemVUZXh0JDIodGV4dCwgZ2V0Q29uZmlnKCkpO1xuY29uc3Qgc2V0dXBHcmFwaFZpZXdib3ggPSBzZXR1cEdyYXBoVmlld2JveCQxO1xuY29uc3QgZ2V0Q29tbW9uRGIgPSAoKSA9PiB7XG4gIHJldHVybiBjb21tb25EYiQxO1xufTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gKHAsIHN0YXRlbWVudCwgY29udGV4dCwgdHlwZTIpID0+IHBhcnNlRGlyZWN0aXZlJDEocCwgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlMik7XG5jb25zdCBkaWFncmFtcyA9IHt9O1xuY29uc3QgcmVnaXN0ZXJEaWFncmFtID0gKGlkMiwgZGlhZ3JhbTIsIGRldGVjdG9yMikgPT4ge1xuICBpZiAoZGlhZ3JhbXNbaWQyXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2lkMn0gYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICB9XG4gIGRpYWdyYW1zW2lkMl0gPSBkaWFncmFtMjtcbiAgaWYgKGRldGVjdG9yMikge1xuICAgIGFkZERldGVjdG9yKGlkMiwgZGV0ZWN0b3IyKTtcbiAgfVxuICBhZGRTdHlsZXNGb3JEaWFncmFtKGlkMiwgZGlhZ3JhbTIuc3R5bGVzKTtcbiAgaWYgKGRpYWdyYW0yLmluamVjdFV0aWxzKSB7XG4gICAgZGlhZ3JhbTIuaW5qZWN0VXRpbHMoXG4gICAgICBsb2csXG4gICAgICBzZXRMb2dMZXZlbCxcbiAgICAgIGdldENvbmZpZyxcbiAgICAgIHNhbml0aXplVGV4dCxcbiAgICAgIHNldHVwR3JhcGhWaWV3Ym94LFxuICAgICAgZ2V0Q29tbW9uRGIoKSxcbiAgICAgIHBhcnNlRGlyZWN0aXZlXG4gICAgKTtcbiAgfVxufTtcbmNvbnN0IGdldERpYWdyYW0gPSAobmFtZSkgPT4ge1xuICBpZiAobmFtZSBpbiBkaWFncmFtcykge1xuICAgIHJldHVybiBkaWFncmFtc1tuYW1lXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYERpYWdyYW0gJHtuYW1lfSBub3QgZm91bmQuYCk7XG59O1xuY2xhc3MgVW5rbm93bkRpYWdyYW1FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkRpYWdyYW1FcnJvclwiO1xuICB9XG59XG5jb25zdCBkaXJlY3RpdmUkMSA9IC8lezJ9e1xccyooPzooXFx3KylcXHMqOnwoXFx3KykpXFxzKig/OihcXHcrKXwoKD86KD8hfSV7Mn0pLnxcXHI/XFxuKSopKT9cXHMqKD86fSV7Mn0pPy9naTtcbmNvbnN0IGFueUNvbW1lbnQgPSAvXFxzKiUlLipcXG4vZ207XG5jb25zdCBkZXRlY3RvcnMgPSB7fTtcbmNvbnN0IGRldGVjdFR5cGUgPSBmdW5jdGlvbih0ZXh0LCBjb25maWcyKSB7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoZnJvbnRNYXR0ZXJSZWdleCwgXCJcIikucmVwbGFjZShkaXJlY3RpdmUkMSwgXCJcIikucmVwbGFjZShhbnlDb21tZW50LCBcIlxcblwiKTtcbiAgZm9yIChjb25zdCBba2V5LCB7IGRldGVjdG9yOiBkZXRlY3RvcjIgfV0gb2YgT2JqZWN0LmVudHJpZXMoZGV0ZWN0b3JzKSkge1xuICAgIGNvbnN0IGRpYWdyYW0yID0gZGV0ZWN0b3IyKHRleHQsIGNvbmZpZzIpO1xuICAgIGlmIChkaWFncmFtMikge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IFVua25vd25EaWFncmFtRXJyb3IoXG4gICAgYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3RleHR9YFxuICApO1xufTtcbmNvbnN0IHJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zID0gKC4uLmRpYWdyYW1zMikgPT4ge1xuICBmb3IgKGNvbnN0IHsgaWQ6IGlkMiwgZGV0ZWN0b3I6IGRldGVjdG9yMiwgbG9hZGVyOiBsb2FkZXIyIH0gb2YgZGlhZ3JhbXMyKSB7XG4gICAgYWRkRGV0ZWN0b3IoaWQyLCBkZXRlY3RvcjIsIGxvYWRlcjIpO1xuICB9XG59O1xuY29uc3QgbG9hZFJlZ2lzdGVyZWREaWFncmFtcyA9IGFzeW5jICgpID0+IHtcbiAgbG9nJDEuZGVidWcoYExvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtc2ApO1xuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIE9iamVjdC5lbnRyaWVzKGRldGVjdG9ycykubWFwKGFzeW5jIChba2V5LCB7IGRldGVjdG9yOiBkZXRlY3RvcjIsIGxvYWRlcjogbG9hZGVyMiB9XSkgPT4ge1xuICAgICAgaWYgKGxvYWRlcjIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBnZXREaWFncmFtKGtleSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIsIGlkOiBpZDIgfSA9IGF3YWl0IGxvYWRlcjIoKTtcbiAgICAgICAgICAgIHJlZ2lzdGVyRGlhZ3JhbShpZDIsIGRpYWdyYW0yLCBkZXRlY3RvcjIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nJDEuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtrZXl9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKTtcbiAgICAgICAgICAgIGRlbGV0ZSBkZXRlY3RvcnNba2V5XTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xuICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpO1xuICBpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICBsb2ckMS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtmYWlsZWQubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApO1xuICAgIGZvciAoY29uc3QgcmVzIG9mIGZhaWxlZCkge1xuICAgICAgbG9nJDEuZXJyb3IocmVzKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2ZhaWxlZC5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7XG4gIH1cbn07XG5jb25zdCBhZGREZXRlY3RvciA9IChrZXksIGRldGVjdG9yMiwgbG9hZGVyMikgPT4ge1xuICBpZiAoZGV0ZWN0b3JzW2tleV0pIHtcbiAgICBsb2ckMS5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtrZXl9IGFscmVhZHkgZXhpc3RzYCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0ZWN0b3JzW2tleV0gPSB7IGRldGVjdG9yOiBkZXRlY3RvcjIsIGxvYWRlcjogbG9hZGVyMiB9O1xuICB9XG4gIGxvZyQxLmRlYnVnKGBEZXRlY3RvciB3aXRoIGtleSAke2tleX0gYWRkZWQke2xvYWRlcjIgPyBcIiB3aXRoIGxvYWRlclwiIDogXCJcIn1gKTtcbn07XG5jb25zdCBnZXREaWFncmFtTG9hZGVyID0gKGtleSkgPT4ge1xuICByZXR1cm4gZGV0ZWN0b3JzW2tleV0ubG9hZGVyO1xufTtcbmNvbnN0IFpFUk9fV0lEVEhfU1BBQ0UgPSBcIuKAi1wiO1xuY29uc3QgZDNDdXJ2ZVR5cGVzID0ge1xuICBjdXJ2ZUJhc2lzLFxuICBjdXJ2ZUJhc2lzQ2xvc2VkLFxuICBjdXJ2ZUJhc2lzT3BlbixcbiAgY3VydmVCdW1wWCxcbiAgY3VydmVCdW1wWSxcbiAgY3VydmVCdW5kbGUsXG4gIGN1cnZlQ2FyZGluYWxDbG9zZWQsXG4gIGN1cnZlQ2FyZGluYWxPcGVuLFxuICBjdXJ2ZUNhcmRpbmFsLFxuICBjdXJ2ZUNhdG11bGxSb21DbG9zZWQsXG4gIGN1cnZlQ2F0bXVsbFJvbU9wZW4sXG4gIGN1cnZlQ2F0bXVsbFJvbSxcbiAgY3VydmVMaW5lYXIsXG4gIGN1cnZlTGluZWFyQ2xvc2VkLFxuICBjdXJ2ZU1vbm90b25lWCxcbiAgY3VydmVNb25vdG9uZVksXG4gIGN1cnZlTmF0dXJhbCxcbiAgY3VydmVTdGVwLFxuICBjdXJ2ZVN0ZXBBZnRlcixcbiAgY3VydmVTdGVwQmVmb3JlXG59O1xuY29uc3QgZGlyZWN0aXZlID0gLyV7Mn17XFxzKig/OihcXHcrKVxccyo6fChcXHcrKSlcXHMqKD86KFxcdyspfCgoPzooPyF9JXsyfSkufFxccj9cXG4pKikpP1xccyooPzp9JXsyfSk/L2dpO1xuY29uc3QgZGlyZWN0aXZlV2l0aG91dE9wZW4gPSAvXFxzKig/OihcXHcrKSg/PTopOnwoXFx3KykpXFxzKig/OihcXHcrKXwoKD86KD8hfSV7Mn0pLnxcXHI/XFxuKSopKT9cXHMqKD86fSV7Mn0pPy9naTtcbmNvbnN0IGRldGVjdEluaXQgPSBmdW5jdGlvbih0ZXh0LCBjb25maWcyKSB7XG4gIGNvbnN0IGluaXRzID0gZGV0ZWN0RGlyZWN0aXZlKHRleHQsIC8oPzppbml0XFxiKXwoPzppbml0aWFsaXplXFxiKS8pO1xuICBsZXQgcmVzdWx0cyA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbml0cykpIHtcbiAgICBjb25zdCBhcmdzID0gaW5pdHMubWFwKChpbml0MikgPT4gaW5pdDIuYXJncyk7XG4gICAgZGlyZWN0aXZlU2FuaXRpemVyKGFyZ3MpO1xuICAgIHJlc3VsdHMgPSBhc3NpZ25XaXRoRGVwdGgkMShyZXN1bHRzLCBbLi4uYXJnc10pO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSBpbml0cy5hcmdzO1xuICB9XG4gIGlmIChyZXN1bHRzKSB7XG4gICAgbGV0IHR5cGUyID0gZGV0ZWN0VHlwZSh0ZXh0LCBjb25maWcyKTtcbiAgICBbXCJjb25maWdcIl0uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdHNbcHJvcF0gIT09IHZvaWQgMCkge1xuICAgICAgICBpZiAodHlwZTIgPT09IFwiZmxvd2NoYXJ0LXYyXCIpIHtcbiAgICAgICAgICB0eXBlMiA9IFwiZmxvd2NoYXJ0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0c1t0eXBlMl0gPSByZXN1bHRzW3Byb3BdO1xuICAgICAgICBkZWxldGUgcmVzdWx0c1twcm9wXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5jb25zdCBkZXRlY3REaXJlY3RpdmUgPSBmdW5jdGlvbih0ZXh0LCB0eXBlMiA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb21tZW50V2l0aG91dERpcmVjdGl2ZXMgPSBuZXcgUmVnRXhwKFxuICAgICAgYFslXXsyfSg/IVt7XSR7ZGlyZWN0aXZlV2l0aG91dE9wZW4uc291cmNlfSkoPz1bfV1bJV17Mn0pLipcbmAsXG4gICAgICBcImlnXCJcbiAgICApO1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKS5yZXBsYWNlKGNvbW1lbnRXaXRob3V0RGlyZWN0aXZlcywgXCJcIikucmVwbGFjZSgvJy9nbSwgJ1wiJyk7XG4gICAgbG9nJDEuZGVidWcoXG4gICAgICBgRGV0ZWN0aW5nIGRpYWdyYW0gZGlyZWN0aXZlJHt0eXBlMiAhPT0gbnVsbCA/IFwiIHR5cGU6XCIgKyB0eXBlMiA6IFwiXCJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7dGV4dH1gXG4gICAgKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgd2hpbGUgKChtYXRjaCA9IGRpcmVjdGl2ZS5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG1hdGNoLmluZGV4ID09PSBkaXJlY3RpdmUubGFzdEluZGV4KSB7XG4gICAgICAgIGRpcmVjdGl2ZS5sYXN0SW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmIChtYXRjaCAmJiAhdHlwZTIgfHwgdHlwZTIgJiYgbWF0Y2hbMV0gJiYgbWF0Y2hbMV0ubWF0Y2godHlwZTIpIHx8IHR5cGUyICYmIG1hdGNoWzJdICYmIG1hdGNoWzJdLm1hdGNoKHR5cGUyKSkge1xuICAgICAgICBjb25zdCB0eXBlMjIgPSBtYXRjaFsxXSA/IG1hdGNoWzFdIDogbWF0Y2hbMl07XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBtYXRjaFszXSA/IG1hdGNoWzNdLnRyaW0oKSA6IG1hdGNoWzRdID8gSlNPTi5wYXJzZShtYXRjaFs0XS50cmltKCkpIDogbnVsbDtcbiAgICAgICAgcmVzdWx0LnB1c2goeyB0eXBlOiB0eXBlMjIsIGFyZ3MgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQucHVzaCh7IHR5cGU6IHRleHQsIGFyZ3M6IG51bGwgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyQxLmVycm9yKFxuICAgICAgYEVSUk9SOiAke2Vycm9yLm1lc3NhZ2V9IC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZVxuICAgICAgJHt0eXBlMiAhPT0gbnVsbCA/IFwiIHR5cGU6XCIgKyB0eXBlMiA6IFwiXCJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7dGV4dH1gXG4gICAgKTtcbiAgICByZXR1cm4geyB0eXBlOiBudWxsLCBhcmdzOiBudWxsIH07XG4gIH1cbn07XG5jb25zdCBpc1N1YnN0cmluZ0luQXJyYXkgPSBmdW5jdGlvbihzdHIyLCBhcnIpIHtcbiAgZm9yIChjb25zdCBbaSwgZWxlbWVudF0gb2YgYXJyLmVudHJpZXMoKSkge1xuICAgIGlmIChlbGVtZW50Lm1hdGNoKHN0cjIpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcbmZ1bmN0aW9uIGludGVycG9sYXRlVG9DdXJ2ZShpbnRlcnBvbGF0ZSwgZGVmYXVsdEN1cnZlKSB7XG4gIGlmICghaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZGVmYXVsdEN1cnZlO1xuICB9XG4gIGNvbnN0IGN1cnZlTmFtZSA9IGBjdXJ2ZSR7aW50ZXJwb2xhdGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpbnRlcnBvbGF0ZS5zbGljZSgxKX1gO1xuICByZXR1cm4gZDNDdXJ2ZVR5cGVzW2N1cnZlTmFtZV0gfHwgZGVmYXVsdEN1cnZlO1xufVxuZnVuY3Rpb24gZm9ybWF0VXJsKGxpbmtTdHIsIGNvbmZpZzIpIHtcbiAgY29uc3QgdXJsID0gbGlua1N0ci50cmltKCk7XG4gIGlmICh1cmwpIHtcbiAgICBpZiAoY29uZmlnMi5zZWN1cml0eUxldmVsICE9PSBcImxvb3NlXCIpIHtcbiAgICAgIHJldHVybiBzYW5pdGl6ZVVybCh1cmwpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG59XG5jb25zdCBydW5GdW5jID0gKGZ1bmN0aW9uTmFtZSwgLi4ucGFyYW1zKSA9PiB7XG4gIGNvbnN0IGFyclBhdGhzID0gZnVuY3Rpb25OYW1lLnNwbGl0KFwiLlwiKTtcbiAgY29uc3QgbGVuID0gYXJyUGF0aHMubGVuZ3RoIC0gMTtcbiAgY29uc3QgZm5OYW1lID0gYXJyUGF0aHNbbGVuXTtcbiAgbGV0IG9iaiA9IHdpbmRvdztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG9iaiA9IG9ialthcnJQYXRoc1tpXV07XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgb2JqW2ZuTmFtZV0oLi4ucGFyYW1zKTtcbn07XG5mdW5jdGlvbiBkaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIHAxICYmIHAyID8gTWF0aC5zcXJ0KE1hdGgucG93KHAyLnggLSBwMS54LCAyKSArIE1hdGgucG93KHAyLnkgLSBwMS55LCAyKSkgOiAwO1xufVxuZnVuY3Rpb24gdHJhdmVyc2VFZGdlKHBvaW50cykge1xuICBsZXQgcHJldlBvaW50O1xuICBsZXQgdG90YWxEaXN0YW5jZSA9IDA7XG4gIHBvaW50cy5mb3JFYWNoKChwb2ludCkgPT4ge1xuICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2UocG9pbnQsIHByZXZQb2ludCk7XG4gICAgcHJldlBvaW50ID0gcG9pbnQ7XG4gIH0pO1xuICBsZXQgcmVtYWluaW5nRGlzdGFuY2UgPSB0b3RhbERpc3RhbmNlIC8gMjtcbiAgbGV0IGNlbnRlciA9IHZvaWQgMDtcbiAgcHJldlBvaW50ID0gdm9pZCAwO1xuICBwb2ludHMuZm9yRWFjaCgocG9pbnQpID0+IHtcbiAgICBpZiAocHJldlBvaW50ICYmICFjZW50ZXIpIHtcbiAgICAgIGNvbnN0IHZlY3RvckRpc3RhbmNlID0gZGlzdGFuY2UocG9pbnQsIHByZXZQb2ludCk7XG4gICAgICBpZiAodmVjdG9yRGlzdGFuY2UgPCByZW1haW5pbmdEaXN0YW5jZSkge1xuICAgICAgICByZW1haW5pbmdEaXN0YW5jZSAtPSB2ZWN0b3JEaXN0YW5jZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlUmF0aW8gPSByZW1haW5pbmdEaXN0YW5jZSAvIHZlY3RvckRpc3RhbmNlO1xuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA8PSAwKSB7XG4gICAgICAgICAgY2VudGVyID0gcHJldlBvaW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXN0YW5jZVJhdGlvID49IDEpIHtcbiAgICAgICAgICBjZW50ZXIgPSB7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA+IDAgJiYgZGlzdGFuY2VSYXRpbyA8IDEpIHtcbiAgICAgICAgICBjZW50ZXIgPSB7XG4gICAgICAgICAgICB4OiAoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnggKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueCxcbiAgICAgICAgICAgIHk6ICgxIC0gZGlzdGFuY2VSYXRpbykgKiBwcmV2UG9pbnQueSArIGRpc3RhbmNlUmF0aW8gKiBwb2ludC55XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwcmV2UG9pbnQgPSBwb2ludDtcbiAgfSk7XG4gIHJldHVybiBjZW50ZXI7XG59XG5mdW5jdGlvbiBjYWxjTGFiZWxQb3NpdGlvbihwb2ludHMpIHtcbiAgaWYgKHBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gcG9pbnRzWzBdO1xuICB9XG4gIHJldHVybiB0cmF2ZXJzZUVkZ2UocG9pbnRzKTtcbn1cbmNvbnN0IGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uID0gKGlzUmVsYXRpb25UeXBlUHJlc2VudCwgcG9pbnRzLCBpbml0aWFsUG9zaXRpb24pID0+IHtcbiAgbGV0IHByZXZQb2ludDtcbiAgbG9nJDEuaW5mbyhgb3VyIHBvaW50cyAke0pTT04uc3RyaW5naWZ5KHBvaW50cyl9YCk7XG4gIGlmIChwb2ludHNbMF0gIT09IGluaXRpYWxQb3NpdGlvbikge1xuICAgIHBvaW50cyA9IHBvaW50cy5yZXZlcnNlKCk7XG4gIH1cbiAgY29uc3QgZGlzdGFuY2VUb0NhcmRpbmFsaXR5UG9pbnQgPSAyNTtcbiAgbGV0IHJlbWFpbmluZ0Rpc3RhbmNlID0gZGlzdGFuY2VUb0NhcmRpbmFsaXR5UG9pbnQ7XG4gIGxldCBjZW50ZXI7XG4gIHByZXZQb2ludCA9IHZvaWQgMDtcbiAgcG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiB7XG4gICAgaWYgKHByZXZQb2ludCAmJiAhY2VudGVyKSB7XG4gICAgICBjb25zdCB2ZWN0b3JEaXN0YW5jZSA9IGRpc3RhbmNlKHBvaW50LCBwcmV2UG9pbnQpO1xuICAgICAgaWYgKHZlY3RvckRpc3RhbmNlIDwgcmVtYWluaW5nRGlzdGFuY2UpIHtcbiAgICAgICAgcmVtYWluaW5nRGlzdGFuY2UgLT0gdmVjdG9yRGlzdGFuY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkaXN0YW5jZVJhdGlvID0gcmVtYWluaW5nRGlzdGFuY2UgLyB2ZWN0b3JEaXN0YW5jZTtcbiAgICAgICAgaWYgKGRpc3RhbmNlUmF0aW8gPD0gMCkge1xuICAgICAgICAgIGNlbnRlciA9IHByZXZQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA+PSAxKSB7XG4gICAgICAgICAgY2VudGVyID0geyB4OiBwb2ludC54LCB5OiBwb2ludC55IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3RhbmNlUmF0aW8gPiAwICYmIGRpc3RhbmNlUmF0aW8gPCAxKSB7XG4gICAgICAgICAgY2VudGVyID0ge1xuICAgICAgICAgICAgeDogKDEgLSBkaXN0YW5jZVJhdGlvKSAqIHByZXZQb2ludC54ICsgZGlzdGFuY2VSYXRpbyAqIHBvaW50LngsXG4gICAgICAgICAgICB5OiAoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnkgKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcHJldlBvaW50ID0gcG9pbnQ7XG4gIH0pO1xuICBjb25zdCBkID0gaXNSZWxhdGlvblR5cGVQcmVzZW50ID8gMTAgOiA1O1xuICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIocG9pbnRzWzBdLnkgLSBjZW50ZXIueSwgcG9pbnRzWzBdLnggLSBjZW50ZXIueCk7XG4gIGNvbnN0IGNhcmRpbmFsaXR5UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcbiAgY2FyZGluYWxpdHlQb3NpdGlvbi54ID0gTWF0aC5zaW4oYW5nbGUpICogZCArIChwb2ludHNbMF0ueCArIGNlbnRlci54KSAvIDI7XG4gIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSkgKiBkICsgKHBvaW50c1swXS55ICsgY2VudGVyLnkpIC8gMjtcbiAgcmV0dXJuIGNhcmRpbmFsaXR5UG9zaXRpb247XG59O1xuZnVuY3Rpb24gY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0ZXJtaW5hbE1hcmtlclNpemUsIHBvc2l0aW9uLCBfcG9pbnRzKSB7XG4gIGxldCBwb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KF9wb2ludHMpKTtcbiAgbGV0IHByZXZQb2ludDtcbiAgbG9nJDEuaW5mbyhcIm91ciBwb2ludHNcIiwgcG9pbnRzKTtcbiAgaWYgKHBvc2l0aW9uICE9PSBcInN0YXJ0X2xlZnRcIiAmJiBwb3NpdGlvbiAhPT0gXCJzdGFydF9yaWdodFwiKSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLnJldmVyc2UoKTtcbiAgfVxuICBwb2ludHMuZm9yRWFjaCgocG9pbnQpID0+IHtcbiAgICBwcmV2UG9pbnQgPSBwb2ludDtcbiAgfSk7XG4gIGNvbnN0IGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50ID0gMjUgKyB0ZXJtaW5hbE1hcmtlclNpemU7XG4gIGxldCByZW1haW5pbmdEaXN0YW5jZSA9IGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50O1xuICBsZXQgY2VudGVyO1xuICBwcmV2UG9pbnQgPSB2b2lkIDA7XG4gIHBvaW50cy5mb3JFYWNoKChwb2ludCkgPT4ge1xuICAgIGlmIChwcmV2UG9pbnQgJiYgIWNlbnRlcikge1xuICAgICAgY29uc3QgdmVjdG9yRGlzdGFuY2UgPSBkaXN0YW5jZShwb2ludCwgcHJldlBvaW50KTtcbiAgICAgIGlmICh2ZWN0b3JEaXN0YW5jZSA8IHJlbWFpbmluZ0Rpc3RhbmNlKSB7XG4gICAgICAgIHJlbWFpbmluZ0Rpc3RhbmNlIC09IHZlY3RvckRpc3RhbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VSYXRpbyA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gdmVjdG9yRGlzdGFuY2U7XG4gICAgICAgIGlmIChkaXN0YW5jZVJhdGlvIDw9IDApIHtcbiAgICAgICAgICBjZW50ZXIgPSBwcmV2UG9pbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3RhbmNlUmF0aW8gPj0gMSkge1xuICAgICAgICAgIGNlbnRlciA9IHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXN0YW5jZVJhdGlvID4gMCAmJiBkaXN0YW5jZVJhdGlvIDwgMSkge1xuICAgICAgICAgIGNlbnRlciA9IHtcbiAgICAgICAgICAgIHg6ICgxIC0gZGlzdGFuY2VSYXRpbykgKiBwcmV2UG9pbnQueCArIGRpc3RhbmNlUmF0aW8gKiBwb2ludC54LFxuICAgICAgICAgICAgeTogKDEgLSBkaXN0YW5jZVJhdGlvKSAqIHByZXZQb2ludC55ICsgZGlzdGFuY2VSYXRpbyAqIHBvaW50LnlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZQb2ludCA9IHBvaW50O1xuICB9KTtcbiAgY29uc3QgZCA9IDEwICsgdGVybWluYWxNYXJrZXJTaXplICogMC41O1xuICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIocG9pbnRzWzBdLnkgLSBjZW50ZXIueSwgcG9pbnRzWzBdLnggLSBjZW50ZXIueCk7XG4gIGNvbnN0IGNhcmRpbmFsaXR5UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcbiAgY2FyZGluYWxpdHlQb3NpdGlvbi54ID0gTWF0aC5zaW4oYW5nbGUpICogZCArIChwb2ludHNbMF0ueCArIGNlbnRlci54KSAvIDI7XG4gIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSkgKiBkICsgKHBvaW50c1swXS55ICsgY2VudGVyLnkpIC8gMjtcbiAgaWYgKHBvc2l0aW9uID09PSBcInN0YXJ0X2xlZnRcIikge1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueCA9IE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMjtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnkgPSAtTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJKSAqIGQgKyAocG9pbnRzWzBdLnkgKyBjZW50ZXIueSkgLyAyO1xuICB9XG4gIGlmIChwb3NpdGlvbiA9PT0gXCJlbmRfcmlnaHRcIikge1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueCA9IE1hdGguc2luKGFuZ2xlIC0gTWF0aC5QSSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMiAtIDU7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi55ID0gLU1hdGguY29zKGFuZ2xlIC0gTWF0aC5QSSkgKiBkICsgKHBvaW50c1swXS55ICsgY2VudGVyLnkpIC8gMiAtIDU7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSBcImVuZF9sZWZ0XCIpIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMiAtIDU7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi55ID0gLU1hdGguY29zKGFuZ2xlKSAqIGQgKyAocG9pbnRzWzBdLnkgKyBjZW50ZXIueSkgLyAyIC0gNTtcbiAgfVxuICByZXR1cm4gY2FyZGluYWxpdHlQb3NpdGlvbjtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlc0Zyb21BcnJheShhcnIpIHtcbiAgbGV0IHN0eWxlID0gXCJcIjtcbiAgbGV0IGxhYmVsU3R5bGUgPSBcIlwiO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyKSB7XG4gICAgaWYgKGVsZW1lbnQgIT09IHZvaWQgMCkge1xuICAgICAgaWYgKGVsZW1lbnQuc3RhcnRzV2l0aChcImNvbG9yOlwiKSB8fCBlbGVtZW50LnN0YXJ0c1dpdGgoXCJ0ZXh0LWFsaWduOlwiKSkge1xuICAgICAgICBsYWJlbFN0eWxlID0gbGFiZWxTdHlsZSArIGVsZW1lbnQgKyBcIjtcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgKyBlbGVtZW50ICsgXCI7XCI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHN0eWxlLCBsYWJlbFN0eWxlIH07XG59XG5sZXQgY250ID0gMDtcbmNvbnN0IGdlbmVyYXRlSWQgPSAoKSA9PiB7XG4gIGNudCsrO1xuICByZXR1cm4gXCJpZC1cIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxMikgKyBcIi1cIiArIGNudDtcbn07XG5mdW5jdGlvbiBtYWtlaWQobGVuZ3RoKSB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBjb25zdCBjaGFyYWN0ZXJzID0gXCIwMTIzNDU2Nzg5YWJjZGVmXCI7XG4gIGNvbnN0IGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmNvbnN0IHJhbmRvbSA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBtYWtlaWQob3B0aW9ucy5sZW5ndGgpO1xufTtcbmNvbnN0IGdldFRleHRPYmogPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgZmlsbDogdm9pZCAwLFxuICAgIGFuY2hvcjogXCJzdGFydFwiLFxuICAgIHN0eWxlOiBcIiM2NjZcIixcbiAgICB3aWR0aDogMTAwLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHRleHRNYXJnaW46IDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDAsXG4gICAgdmFsaWduOiB2b2lkIDBcbiAgfTtcbn07XG5jb25zdCBkcmF3U2ltcGxlVGV4dCA9IGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIGNvbnN0IG5UZXh0ID0gdGV4dERhdGEudGV4dC5yZXBsYWNlKGNvbW1vbiQxLmxpbmVCcmVha1JlZ2V4LCBcIiBcIik7XG4gIGNvbnN0IFssIF9mb250U2l6ZVB4XSA9IHBhcnNlRm9udFNpemUodGV4dERhdGEuZm9udFNpemUpO1xuICBjb25zdCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gIHRleHRFbGVtLmF0dHIoXCJ5XCIsIHRleHREYXRhLnkpO1xuICB0ZXh0RWxlbS5zdHlsZShcInRleHQtYW5jaG9yXCIsIHRleHREYXRhLmFuY2hvcik7XG4gIHRleHRFbGVtLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGV4dERhdGEuZm9udEZhbWlseSk7XG4gIHRleHRFbGVtLnN0eWxlKFwiZm9udC1zaXplXCIsIF9mb250U2l6ZVB4KTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXdlaWdodFwiLCB0ZXh0RGF0YS5mb250V2VpZ2h0KTtcbiAgdGV4dEVsZW0uYXR0cihcImZpbGxcIiwgdGV4dERhdGEuZmlsbCk7XG4gIGlmICh0ZXh0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgdGV4dEVsZW0uYXR0cihcImNsYXNzXCIsIHRleHREYXRhLmNsYXNzKTtcbiAgfVxuICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gIHNwYW4uYXR0cihcInhcIiwgdGV4dERhdGEueCArIHRleHREYXRhLnRleHRNYXJnaW4gKiAyKTtcbiAgc3Bhbi5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgc3Bhbi50ZXh0KG5UZXh0KTtcbiAgcmV0dXJuIHRleHRFbGVtO1xufTtcbmNvbnN0IHdyYXBMYWJlbCA9IG1lbW9pemUoXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZzIpID0+IHtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuICAgIGNvbmZpZzIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgeyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDQwMCwgZm9udEZhbWlseTogXCJBcmlhbFwiLCBqb2luV2l0aDogXCI8YnIvPlwiIH0sXG4gICAgICBjb25maWcyXG4gICAgKTtcbiAgICBpZiAoY29tbW9uJDEubGluZUJyZWFrUmVnZXgudGVzdChsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG4gICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdChcIiBcIik7XG4gICAgY29uc3QgY29tcGxldGVkTGluZXMgPSBbXTtcbiAgICBsZXQgbmV4dExpbmUgPSBcIlwiO1xuICAgIHdvcmRzLmZvckVhY2goKHdvcmQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB3b3JkTGVuZ3RoID0gY2FsY3VsYXRlVGV4dFdpZHRoKGAke3dvcmR9IGAsIGNvbmZpZzIpO1xuICAgICAgY29uc3QgbmV4dExpbmVMZW5ndGggPSBjYWxjdWxhdGVUZXh0V2lkdGgobmV4dExpbmUsIGNvbmZpZzIpO1xuICAgICAgaWYgKHdvcmRMZW5ndGggPiBtYXhXaWR0aCkge1xuICAgICAgICBjb25zdCB7IGh5cGhlbmF0ZWRTdHJpbmdzLCByZW1haW5pbmdXb3JkIH0gPSBicmVha1N0cmluZyh3b3JkLCBtYXhXaWR0aCwgXCItXCIsIGNvbmZpZzIpO1xuICAgICAgICBjb21wbGV0ZWRMaW5lcy5wdXNoKG5leHRMaW5lLCAuLi5oeXBoZW5hdGVkU3RyaW5ncyk7XG4gICAgICAgIG5leHRMaW5lID0gcmVtYWluaW5nV29yZDtcbiAgICAgIH0gZWxzZSBpZiAobmV4dExpbmVMZW5ndGggKyB3b3JkTGVuZ3RoID49IG1heFdpZHRoKSB7XG4gICAgICAgIGNvbXBsZXRlZExpbmVzLnB1c2gobmV4dExpbmUpO1xuICAgICAgICBuZXh0TGluZSA9IHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0TGluZSA9IFtuZXh0TGluZSwgd29yZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudFdvcmQgPSBpbmRleCArIDE7XG4gICAgICBjb25zdCBpc0xhc3RXb3JkID0gY3VycmVudFdvcmQgPT09IHdvcmRzLmxlbmd0aDtcbiAgICAgIGlmIChpc0xhc3RXb3JkKSB7XG4gICAgICAgIGNvbXBsZXRlZExpbmVzLnB1c2gobmV4dExpbmUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21wbGV0ZWRMaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUgIT09IFwiXCIpLmpvaW4oY29uZmlnMi5qb2luV2l0aCk7XG4gIH0sXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZzIpID0+IGAke2xhYmVsfSR7bWF4V2lkdGh9JHtjb25maWcyLmZvbnRTaXplfSR7Y29uZmlnMi5mb250V2VpZ2h0fSR7Y29uZmlnMi5mb250RmFtaWx5fSR7Y29uZmlnMi5qb2luV2l0aH1gXG4pO1xuY29uc3QgYnJlYWtTdHJpbmcgPSBtZW1vaXplKFxuICAod29yZCwgbWF4V2lkdGgsIGh5cGhlbkNoYXJhY3RlciA9IFwiLVwiLCBjb25maWcyKSA9PiB7XG4gICAgY29uZmlnMiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIsIG1hcmdpbjogMCB9LFxuICAgICAgY29uZmlnMlxuICAgICk7XG4gICAgY29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGxldCBjdXJyZW50TGluZSA9IFwiXCI7XG4gICAgY2hhcmFjdGVycy5mb3JFYWNoKChjaGFyYWN0ZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuZXh0TGluZSA9IGAke2N1cnJlbnRMaW5lfSR7Y2hhcmFjdGVyfWA7XG4gICAgICBjb25zdCBsaW5lV2lkdGggPSBjYWxjdWxhdGVUZXh0V2lkdGgobmV4dExpbmUsIGNvbmZpZzIpO1xuICAgICAgaWYgKGxpbmVXaWR0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5kZXggKyAxO1xuICAgICAgICBjb25zdCBpc0xhc3RMaW5lID0gY2hhcmFjdGVycy5sZW5ndGggPT09IGN1cnJlbnRDaGFyYWN0ZXI7XG4gICAgICAgIGNvbnN0IGh5cGhlbmF0ZWROZXh0TGluZSA9IGAke25leHRMaW5lfSR7aHlwaGVuQ2hhcmFjdGVyfWA7XG4gICAgICAgIGxpbmVzLnB1c2goaXNMYXN0TGluZSA/IG5leHRMaW5lIDogaHlwaGVuYXRlZE5leHRMaW5lKTtcbiAgICAgICAgY3VycmVudExpbmUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudExpbmUgPSBuZXh0TGluZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyBoeXBoZW5hdGVkU3RyaW5nczogbGluZXMsIHJlbWFpbmluZ1dvcmQ6IGN1cnJlbnRMaW5lIH07XG4gIH0sXG4gICh3b3JkLCBtYXhXaWR0aCwgaHlwaGVuQ2hhcmFjdGVyID0gXCItXCIsIGNvbmZpZzIpID0+IGAke3dvcmR9JHttYXhXaWR0aH0ke2h5cGhlbkNoYXJhY3Rlcn0ke2NvbmZpZzIuZm9udFNpemV9JHtjb25maWcyLmZvbnRXZWlnaHR9JHtjb25maWcyLmZvbnRGYW1pbHl9YFxuKTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVRleHRIZWlnaHQodGV4dCwgY29uZmlnMikge1xuICBjb25maWcyID0gT2JqZWN0LmFzc2lnbihcbiAgICB7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIsIG1hcmdpbjogMTUgfSxcbiAgICBjb25maWcyXG4gICk7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcyKS5oZWlnaHQ7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVUZXh0V2lkdGgodGV4dCwgY29uZmlnMikge1xuICBjb25maWcyID0gT2JqZWN0LmFzc2lnbih7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIgfSwgY29uZmlnMik7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcyKS53aWR0aDtcbn1cbmNvbnN0IGNhbGN1bGF0ZVRleHREaW1lbnNpb25zID0gbWVtb2l6ZShcbiAgKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgICBjb25maWcyID0gT2JqZWN0LmFzc2lnbih7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIgfSwgY29uZmlnMik7XG4gICAgY29uc3QgeyBmb250U2l6ZSwgZm9udEZhbWlseSwgZm9udFdlaWdodCB9ID0gY29uZmlnMjtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICB9XG4gICAgY29uc3QgWywgX2ZvbnRTaXplUHhdID0gcGFyc2VGb250U2l6ZShmb250U2l6ZSk7XG4gICAgY29uc3QgZm9udEZhbWlsaWVzID0gW1wic2Fucy1zZXJpZlwiLCBmb250RmFtaWx5XTtcbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoY29tbW9uJDEubGluZUJyZWFrUmVnZXgpO1xuICAgIGNvbnN0IGRpbXMgPSBbXTtcbiAgICBjb25zdCBib2R5ID0gc2VsZWN0KFwiYm9keVwiKTtcbiAgICBpZiAoIWJvZHkucmVtb3ZlKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCBsaW5lSGVpZ2h0OiAwIH07XG4gICAgfVxuICAgIGNvbnN0IGcgPSBib2R5LmFwcGVuZChcInN2Z1wiKTtcbiAgICBmb3IgKGNvbnN0IGZvbnRGYW1pbHkyIG9mIGZvbnRGYW1pbGllcykge1xuICAgICAgbGV0IGNoZWlnaHQgPSAwO1xuICAgICAgY29uc3QgZGltID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCBsaW5lSGVpZ2h0OiAwIH07XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgY29uc3QgdGV4dE9iaiA9IGdldFRleHRPYmooKTtcbiAgICAgICAgdGV4dE9iai50ZXh0ID0gbGluZSB8fCBaRVJPX1dJRFRIX1NQQUNFO1xuICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRyYXdTaW1wbGVUZXh0KGcsIHRleHRPYmopLnN0eWxlKFwiZm9udC1zaXplXCIsIF9mb250U2l6ZVB4KS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIGZvbnRXZWlnaHQpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZm9udEZhbWlseTIpO1xuICAgICAgICBjb25zdCBiQm94ID0gKHRleHRFbGVtLl9ncm91cHMgfHwgdGV4dEVsZW0pWzBdWzBdLmdldEJCb3goKTtcbiAgICAgICAgaWYgKGJCb3gud2lkdGggPT09IDAgJiYgYkJveC5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZGltLndpZHRoID0gTWF0aC5yb3VuZChNYXRoLm1heChkaW0ud2lkdGgsIGJCb3gud2lkdGgpKTtcbiAgICAgICAgY2hlaWdodCA9IE1hdGgucm91bmQoYkJveC5oZWlnaHQpO1xuICAgICAgICBkaW0uaGVpZ2h0ICs9IGNoZWlnaHQ7XG4gICAgICAgIGRpbS5saW5lSGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLm1heChkaW0ubGluZUhlaWdodCwgY2hlaWdodCkpO1xuICAgICAgfVxuICAgICAgZGltcy5wdXNoKGRpbSk7XG4gICAgfVxuICAgIGcucmVtb3ZlKCk7XG4gICAgY29uc3QgaW5kZXggPSBpc05hTihkaW1zWzFdLmhlaWdodCkgfHwgaXNOYU4oZGltc1sxXS53aWR0aCkgfHwgaXNOYU4oZGltc1sxXS5saW5lSGVpZ2h0KSB8fCBkaW1zWzBdLmhlaWdodCA+IGRpbXNbMV0uaGVpZ2h0ICYmIGRpbXNbMF0ud2lkdGggPiBkaW1zWzFdLndpZHRoICYmIGRpbXNbMF0ubGluZUhlaWdodCA+IGRpbXNbMV0ubGluZUhlaWdodCA/IDAgOiAxO1xuICAgIHJldHVybiBkaW1zW2luZGV4XTtcbiAgfSxcbiAgKHRleHQsIGNvbmZpZzIpID0+IGAke3RleHR9JHtjb25maWcyLmZvbnRTaXplfSR7Y29uZmlnMi5mb250V2VpZ2h0fSR7Y29uZmlnMi5mb250RmFtaWx5fWBcbik7XG5jb25zdCBpbml0SWRHZW5lcmF0b3IgPSBjbGFzcyBpdGVyYXRvciB7XG4gIGNvbnN0cnVjdG9yKGRldGVybWluaXN0aWMsIHNlZWQpIHtcbiAgICB0aGlzLmRldGVybWluaXN0aWMgPSBkZXRlcm1pbmlzdGljO1xuICAgIHRoaXMuc2VlZCA9IHNlZWQ7XG4gICAgdGhpcy5jb3VudCA9IHNlZWQgPyBzZWVkLmxlbmd0aCA6IDA7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMuZGV0ZXJtaW5pc3RpYykge1xuICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvdW50Kys7XG4gIH1cbn07XG5sZXQgZGVjb2RlcjtcbmNvbnN0IGVudGl0eURlY29kZSA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgZGVjb2RlciA9IGRlY29kZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgaHRtbCA9IGVzY2FwZShodG1sKS5yZXBsYWNlKC8lMjYvZywgXCImXCIpLnJlcGxhY2UoLyUyMy9nLCBcIiNcIikucmVwbGFjZSgvJTNCL2csIFwiO1wiKTtcbiAgZGVjb2Rlci5pbm5lckhUTUwgPSBodG1sO1xuICByZXR1cm4gdW5lc2NhcGUoZGVjb2Rlci50ZXh0Q29udGVudCk7XG59O1xuY29uc3QgZGlyZWN0aXZlU2FuaXRpemVyID0gKGFyZ3MpID0+IHtcbiAgbG9nJDEuZGVidWcoXCJkaXJlY3RpdmVTYW5pdGl6ZXIgY2FsbGVkIHdpdGhcIiwgYXJncyk7XG4gIGlmICh0eXBlb2YgYXJncyA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgYXJncy5mb3JFYWNoKChhcmcpID0+IGRpcmVjdGl2ZVNhbml0aXplcihhcmcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoYXJncykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGxvZyQxLmRlYnVnKFwiQ2hlY2tpbmcga2V5XCIsIGtleSk7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIl9fXCIpKSB7XG4gICAgICAgICAgbG9nJDEuZGVidWcoXCJzYW5pdGl6ZSBkZWxldGluZyBfXyBvcHRpb25cIiwga2V5KTtcbiAgICAgICAgICBkZWxldGUgYXJnc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXMoXCJwcm90b1wiKSkge1xuICAgICAgICAgIGxvZyQxLmRlYnVnKFwic2FuaXRpemUgZGVsZXRpbmcgcHJvdG8gb3B0aW9uXCIsIGtleSk7XG4gICAgICAgICAgZGVsZXRlIGFyZ3Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiY29uc3RyXCIpKSB7XG4gICAgICAgICAgbG9nJDEuZGVidWcoXCJzYW5pdGl6ZSBkZWxldGluZyBjb25zdHIgb3B0aW9uXCIsIGtleSk7XG4gICAgICAgICAgZGVsZXRlIGFyZ3Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKFwidGhlbWVDU1NcIikpIHtcbiAgICAgICAgICBsb2ckMS5kZWJ1ZyhcInNhbml0aXppbmcgdGhlbWVDc3Mgb3B0aW9uXCIpO1xuICAgICAgICAgIGFyZ3Nba2V5XSA9IHNhbml0aXplQ3NzKGFyZ3Nba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcyhcImZvbnRGYW1pbHlcIikpIHtcbiAgICAgICAgICBsb2ckMS5kZWJ1ZyhcInNhbml0aXppbmcgZm9udEZhbWlseSBvcHRpb25cIik7XG4gICAgICAgICAgYXJnc1trZXldID0gc2FuaXRpemVDc3MoYXJnc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiYWx0Rm9udEZhbWlseVwiKSkge1xuICAgICAgICAgIGxvZyQxLmRlYnVnKFwic2FuaXRpemluZyBhbHRGb250RmFtaWx5IG9wdGlvblwiKTtcbiAgICAgICAgICBhcmdzW2tleV0gPSBzYW5pdGl6ZUNzcyhhcmdzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uZmlnS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgbG9nJDEuZGVidWcoXCJzYW5pdGl6ZSBkZWxldGluZyBvcHRpb25cIiwga2V5KTtcbiAgICAgICAgICBkZWxldGUgYXJnc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1trZXldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBsb2ckMS5kZWJ1ZyhcInNhbml0aXplIGRlbGV0aW5nIG9iamVjdFwiLCBrZXkpO1xuICAgICAgICAgICAgZGlyZWN0aXZlU2FuaXRpemVyKGFyZ3Nba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGFyZ3MudGhlbWVWYXJpYWJsZXMpIHtcbiAgICBjb25zdCBrQXJyID0gT2JqZWN0LmtleXMoYXJncy50aGVtZVZhcmlhYmxlcyk7XG4gICAgZm9yIChjb25zdCBrIG9mIGtBcnIpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3MudGhlbWVWYXJpYWJsZXNba107XG4gICAgICBpZiAodmFsICYmIHZhbC5tYXRjaCAmJiAhdmFsLm1hdGNoKC9eW1xcZCBcIiMlKCksLjtBLVphLXpdKyQvKSkge1xuICAgICAgICBhcmdzLnRoZW1lVmFyaWFibGVzW2tdID0gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nJDEuZGVidWcoXCJBZnRlciBzYW5pdGl6YXRpb25cIiwgYXJncyk7XG59O1xuY29uc3Qgc2FuaXRpemVDc3MgPSAoc3RyMikgPT4ge1xuICBsZXQgc3RhcnRDbnQgPSAwO1xuICBsZXQgZW5kQ250ID0gMDtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHN0cjIpIHtcbiAgICBpZiAoc3RhcnRDbnQgPCBlbmRDbnQpIHtcbiAgICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT09IFwie1wiKSB7XG4gICAgICBzdGFydENudCsrO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gXCJ9XCIpIHtcbiAgICAgIGVuZENudCsrO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhcnRDbnQgIT09IGVuZENudCkge1xuICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgfVxuICByZXR1cm4gc3RyMjtcbn07XG5mdW5jdGlvbiBpc0RldGFpbGVkRXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIFwic3RyXCIgaW4gZXJyb3I7XG59XG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbn1cbmNvbnN0IGluc2VydFRpdGxlID0gKHBhcmVudCwgY3NzQ2xhc3MsIHRpdGxlVG9wTWFyZ2luLCB0aXRsZTIpID0+IHtcbiAgaWYgKCF0aXRsZTIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYm91bmRzID0gcGFyZW50Lm5vZGUoKS5nZXRCQm94KCk7XG4gIHBhcmVudC5hcHBlbmQoXCJ0ZXh0XCIpLnRleHQodGl0bGUyKS5hdHRyKFwieFwiLCBib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIC10aXRsZVRvcE1hcmdpbikuYXR0cihcImNsYXNzXCIsIGNzc0NsYXNzKTtcbn07XG5jb25zdCBwYXJzZUZvbnRTaXplID0gKGZvbnRTaXplKSA9PiB7XG4gIGlmICh0eXBlb2YgZm9udFNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gW2ZvbnRTaXplLCBmb250U2l6ZSArIFwicHhcIl07XG4gIH1cbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSBwYXJzZUludChmb250U2l6ZSwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKGZvbnRTaXplTnVtYmVyKSkge1xuICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdO1xuICB9IGVsc2UgaWYgKGZvbnRTaXplID09PSBTdHJpbmcoZm9udFNpemVOdW1iZXIpKSB7XG4gICAgcmV0dXJuIFtmb250U2l6ZU51bWJlciwgZm9udFNpemUgKyBcInB4XCJdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbZm9udFNpemVOdW1iZXIsIGZvbnRTaXplXTtcbiAgfVxufTtcbmNvbnN0IHV0aWxzID0ge1xuICBhc3NpZ25XaXRoRGVwdGg6IGFzc2lnbldpdGhEZXB0aCQxLFxuICB3cmFwTGFiZWwsXG4gIGNhbGN1bGF0ZVRleHRIZWlnaHQsXG4gIGNhbGN1bGF0ZVRleHRXaWR0aCxcbiAgY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMsXG4gIGRldGVjdEluaXQsXG4gIGRldGVjdERpcmVjdGl2ZSxcbiAgaXNTdWJzdHJpbmdJbkFycmF5LFxuICBpbnRlcnBvbGF0ZVRvQ3VydmUsXG4gIGNhbGNMYWJlbFBvc2l0aW9uLFxuICBjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbixcbiAgY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbixcbiAgZm9ybWF0VXJsLFxuICBnZXRTdHlsZXNGcm9tQXJyYXksXG4gIGdlbmVyYXRlSWQsXG4gIHJhbmRvbSxcbiAgcnVuRnVuYyxcbiAgZW50aXR5RGVjb2RlLFxuICBpbml0SWRHZW5lcmF0b3IsXG4gIGRpcmVjdGl2ZVNhbml0aXplcixcbiAgc2FuaXRpemVDc3MsXG4gIGluc2VydFRpdGxlLFxuICBwYXJzZUZvbnRTaXplXG59O1xuY29uc3QgdmVyc2lvbiA9IFwiMTAuMi4zXCI7XG5jb25zdCBpZCRpID0gXCJjNFwiO1xuY29uc3QgZGV0ZWN0b3IkaSA9ICh0eHQpID0+IHtcbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypDNENvbnRleHR8QzRDb250YWluZXJ8QzRDb21wb25lbnR8QzREeW5hbWljfEM0RGVwbG95bWVudC8pICE9PSBudWxsO1xufTtcbmNvbnN0IGxvYWRlciRpID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2M0RGlhZ3JhbS05Y2RkYjM3Zi5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJGksIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJGkgPSB7XG4gIGlkOiBpZCRpLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkaSxcbiAgbG9hZGVyOiBsb2FkZXIkaVxufTtcbmNvbnN0IGM0ID0gcGx1Z2luJGk7XG5jb25zdCBpZCRoID0gXCJmbG93Y2hhcnRcIjtcbmNvbnN0IGRldGVjdG9yJGggPSAodHh0LCBjb25maWcyKSA9PiB7XG4gIHZhciBfYSwgX2I7XG4gIGlmICgoKF9hID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kZWZhdWx0UmVuZGVyZXIpID09PSBcImRhZ3JlLXdyYXBwZXJcIiB8fCAoKF9iID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5kZWZhdWx0UmVuZGVyZXIpID09PSBcImVsa1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqZ3JhcGgvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkaCA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9mbG93RGlhZ3JhbS05MzMyN2YyMS5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJGgsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJGggPSB7XG4gIGlkOiBpZCRoLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkaCxcbiAgbG9hZGVyOiBsb2FkZXIkaFxufTtcbmNvbnN0IGZsb3djaGFydCA9IHBsdWdpbiRoO1xuY29uc3QgaWQkZyA9IFwiZmxvd2NoYXJ0LXYyXCI7XG5jb25zdCBkZXRlY3RvciRnID0gKHR4dCwgY29uZmlnMikgPT4ge1xuICB2YXIgX2EsIF9iLCBfYztcbiAgaWYgKCgoX2EgPSBjb25maWcyID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcyLmZsb3djaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRSZW5kZXJlcikgPT09IFwiZGFncmUtZDNcIiB8fCAoKF9iID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5kZWZhdWx0UmVuZGVyZXIpID09PSBcImVsa1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eHQubWF0Y2goL15cXHMqZ3JhcGgvKSAhPT0gbnVsbCAmJiAoKF9jID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5kZWZhdWx0UmVuZGVyZXIpID09PSBcImRhZ3JlLXdyYXBwZXJcIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqZmxvd2NoYXJ0LykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyJGcgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vZmxvd0RpYWdyYW0tdjItNDc2ZGI3NzkuanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCRnLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiRnID0ge1xuICBpZDogaWQkZyxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJGcsXG4gIGxvYWRlcjogbG9hZGVyJGdcbn07XG5jb25zdCBmbG93Y2hhcnRWMiA9IHBsdWdpbiRnO1xuY29uc3QgaWQkZiA9IFwiZXJcIjtcbmNvbnN0IGRldGVjdG9yJGYgPSAodHh0KSA9PiB7XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqZXJEaWFncmFtLykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyJGYgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vZXJEaWFncmFtLWY2OTQ2MTA5LmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkZiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kZiA9IHtcbiAgaWQ6IGlkJGYsXG4gIGRldGVjdG9yOiBkZXRlY3RvciRmLFxuICBsb2FkZXI6IGxvYWRlciRmXG59O1xuY29uc3QgZXIgPSBwbHVnaW4kZjtcbmNvbnN0IGlkJGUgPSBcImdpdEdyYXBoXCI7XG5jb25zdCBkZXRlY3RvciRlID0gKHR4dCkgPT4ge1xuICByZXR1cm4gdHh0Lm1hdGNoKC9eXFxzKmdpdEdyYXBoLykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyJGUgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vZ2l0R3JhcGhEaWFncmFtLTFlOTYwYzUwLmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkZSwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kZSA9IHtcbiAgaWQ6IGlkJGUsXG4gIGRldGVjdG9yOiBkZXRlY3RvciRlLFxuICBsb2FkZXI6IGxvYWRlciRlXG59O1xuY29uc3QgZ2l0ID0gcGx1Z2luJGU7XG5jb25zdCBpZCRkID0gXCJnYW50dFwiO1xuY29uc3QgZGV0ZWN0b3IkZCA9ICh0eHQpID0+IHtcbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypnYW50dC8pICE9PSBudWxsO1xufTtcbmNvbnN0IGxvYWRlciRkID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2dhbnR0RGlhZ3JhbS03Y2UxMmQ2Yi5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJGQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJGQgPSB7XG4gIGlkOiBpZCRkLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkZCxcbiAgbG9hZGVyOiBsb2FkZXIkZFxufTtcbmNvbnN0IGdhbnR0ID0gcGx1Z2luJGQ7XG5jb25zdCBpZCRjID0gXCJpbmZvXCI7XG5jb25zdCBkZXRlY3RvciRjID0gKHR4dCkgPT4ge1xuICByZXR1cm4gdHh0Lm1hdGNoKC9eXFxzKmluZm8vKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkYyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9pbmZvRGlhZ3JhbS0yNjRiZWQzZS5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJGMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJGMgPSB7XG4gIGlkOiBpZCRjLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkYyxcbiAgbG9hZGVyOiBsb2FkZXIkY1xufTtcbmNvbnN0IGluZm8gPSBwbHVnaW4kYztcbmNvbnN0IGlkJGIgPSBcInBpZVwiO1xuY29uc3QgZGV0ZWN0b3IkYiA9ICh0eHQpID0+IHtcbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypwaWUvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkYiA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9waWVEaWFncmFtLTE1NzUwNWZlLmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkYiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kYiA9IHtcbiAgaWQ6IGlkJGIsXG4gIGRldGVjdG9yOiBkZXRlY3RvciRiLFxuICBsb2FkZXI6IGxvYWRlciRiXG59O1xuY29uc3QgcGllID0gcGx1Z2luJGI7XG5jb25zdCBpZCRhID0gXCJxdWFkcmFudENoYXJ0XCI7XG5jb25zdCBkZXRlY3RvciRhID0gKHR4dCkgPT4ge1xuICByZXR1cm4gdHh0Lm1hdGNoKC9eXFxzKnF1YWRyYW50Q2hhcnQvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkYSA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9xdWFkcmFudERpYWdyYW0tZmQ3MGYyZDAuanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCRhLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiRhID0ge1xuICBpZDogaWQkYSxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJGEsXG4gIGxvYWRlcjogbG9hZGVyJGFcbn07XG5jb25zdCBxdWFkcmFudENoYXJ0ID0gcGx1Z2luJGE7XG5jb25zdCBpZCQ5ID0gXCJyZXF1aXJlbWVudFwiO1xuY29uc3QgZGV0ZWN0b3IkOSA9ICh0eHQpID0+IHtcbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypyZXF1aXJlbWVudChEaWFncmFtKT8vKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkOSA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9yZXF1aXJlbWVudERpYWdyYW0tMTljOTk1ODguanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCQ5LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiQ5ID0ge1xuICBpZDogaWQkOSxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJDksXG4gIGxvYWRlcjogbG9hZGVyJDlcbn07XG5jb25zdCByZXF1aXJlbWVudCA9IHBsdWdpbiQ5O1xuY29uc3QgaWQkOCA9IFwic2VxdWVuY2VcIjtcbmNvbnN0IGRldGVjdG9yJDggPSAodHh0KSA9PiB7XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqc2VxdWVuY2VEaWFncmFtLykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyJDggPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vc2VxdWVuY2VEaWFncmFtLTVkZmQwMDQ5LmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkOCwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kOCA9IHtcbiAgaWQ6IGlkJDgsXG4gIGRldGVjdG9yOiBkZXRlY3RvciQ4LFxuICBsb2FkZXI6IGxvYWRlciQ4XG59O1xuY29uc3Qgc2VxdWVuY2UgPSBwbHVnaW4kODtcbmNvbnN0IGlkJDcgPSBcImNsYXNzXCI7XG5jb25zdCBkZXRlY3RvciQ3ID0gKHR4dCwgY29uZmlnMikgPT4ge1xuICB2YXIgX2E7XG4gIGlmICgoKF9hID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5jbGFzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRSZW5kZXJlcikgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqY2xhc3NEaWFncmFtLykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyJDcgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2xhc3NEaWFncmFtLWJjNzMzYzNiLmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkNywgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kNyA9IHtcbiAgaWQ6IGlkJDcsXG4gIGRldGVjdG9yOiBkZXRlY3RvciQ3LFxuICBsb2FkZXI6IGxvYWRlciQ3XG59O1xuY29uc3QgY2xhc3NEaWFncmFtID0gcGx1Z2luJDc7XG5jb25zdCBpZCQ2ID0gXCJjbGFzc0RpYWdyYW1cIjtcbmNvbnN0IGRldGVjdG9yJDYgPSAodHh0LCBjb25maWcyKSA9PiB7XG4gIHZhciBfYTtcbiAgaWYgKHR4dC5tYXRjaCgvXlxccypjbGFzc0RpYWdyYW0vKSAhPT0gbnVsbCAmJiAoKF9hID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5jbGFzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRSZW5kZXJlcikgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypjbGFzc0RpYWdyYW0tdjIvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkNiA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jbGFzc0RpYWdyYW0tdjItODkzMWJkYWYuanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCQ2LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiQ2ID0ge1xuICBpZDogaWQkNixcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJDYsXG4gIGxvYWRlcjogbG9hZGVyJDZcbn07XG5jb25zdCBjbGFzc0RpYWdyYW1WMiA9IHBsdWdpbiQ2O1xuY29uc3QgaWQkNSA9IFwic3RhdGVcIjtcbmNvbnN0IGRldGVjdG9yJDUgPSAodHh0LCBjb25maWcyKSA9PiB7XG4gIHZhciBfYTtcbiAgaWYgKCgoX2EgPSBjb25maWcyID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcyLnN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZGVmYXVsdFJlbmRlcmVyKSA9PT0gXCJkYWdyZS13cmFwcGVyXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccypzdGF0ZURpYWdyYW0vKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkNSA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9zdGF0ZURpYWdyYW0tMTMzZTM2NDIuanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCQ1LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiQ1ID0ge1xuICBpZDogaWQkNSxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJDUsXG4gIGxvYWRlcjogbG9hZGVyJDVcbn07XG5jb25zdCBzdGF0ZSA9IHBsdWdpbiQ1O1xuY29uc3QgaWQkNCA9IFwic3RhdGVEaWFncmFtXCI7XG5jb25zdCBkZXRlY3RvciQ0ID0gKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgdmFyIF9hLCBfYjtcbiAgaWYgKHRleHQubWF0Y2goL15cXHMqc3RhdGVEaWFncmFtLXYyLykgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGV4dC5tYXRjaCgvXlxccypzdGF0ZURpYWdyYW0vKSAmJiAoKF9hID0gY29uZmlnMiA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnMi5zdGF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRSZW5kZXJlcikgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRleHQubWF0Y2goL15cXHMqc3RhdGVEaWFncmFtLykgJiYgKChfYiA9IGNvbmZpZzIgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZzIuc3RhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5kZWZhdWx0UmVuZGVyZXIpID09PSBcImRhZ3JlLXdyYXBwZXJcIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBsb2FkZXIkNCA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9zdGF0ZURpYWdyYW0tdjItNjM3MWE3NmIuanNcIik7XG4gIHJldHVybiB7IGlkOiBpZCQ0LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufTtcbmNvbnN0IHBsdWdpbiQ0ID0ge1xuICBpZDogaWQkNCxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yJDQsXG4gIGxvYWRlcjogbG9hZGVyJDRcbn07XG5jb25zdCBzdGF0ZVYyID0gcGx1Z2luJDQ7XG5jb25zdCBpZCQzID0gXCJqb3VybmV5XCI7XG5jb25zdCBkZXRlY3RvciQzID0gKHR4dCkgPT4ge1xuICByZXR1cm4gdHh0Lm1hdGNoKC9eXFxzKmpvdXJuZXkvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkMyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9qb3VybmV5RGlhZ3JhbS0zMWJlMDA5Ni5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJDMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJDMgPSB7XG4gIGlkOiBpZCQzLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkMyxcbiAgbG9hZGVyOiBsb2FkZXIkM1xufTtcbmNvbnN0IGpvdXJuZXkgPSBwbHVnaW4kMztcbmNvbnN0IGdldFN0eWxlcyA9ICgpID0+IGBgO1xuY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKCkge1xufTtcbmNvbnN0IGRyYXcgPSAoX3RleHQsIGlkMiwgbWVybWFpZFZlcnNpb24pID0+IHtcbiAgdHJ5IHtcbiAgICBsb2ckMS5kZWJ1ZyhcIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXFxuXCIpO1xuICAgIGNvbnN0IHN2ZyA9IHNlbGVjdChcIiNcIiArIGlkMik7XG4gICAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICAgIGcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci1pY29uXCIpLmF0dHIoXG4gICAgICBcImRcIixcbiAgICAgIFwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2elwiXG4gICAgKTtcbiAgICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgICAgXCJkXCIsXG4gICAgICBcIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnpcIlxuICAgICk7XG4gICAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICAgIFwiZFwiLFxuICAgICAgXCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2elwiXG4gICAgKTtcbiAgICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgICAgXCJkXCIsXG4gICAgICBcIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6XCJcbiAgICApO1xuICAgIGcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci1pY29uXCIpLmF0dHIoXG4gICAgICBcImRcIixcbiAgICAgIFwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2elwiXG4gICAgKTtcbiAgICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgICAgXCJkXCIsXG4gICAgICBcIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1elwiXG4gICAgKTtcbiAgICBnLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItdGV4dFwiKS5hdHRyKFwieFwiLCAxNDQwKS5hdHRyKFwieVwiLCAyNTApLmF0dHIoXCJmb250LXNpemVcIiwgXCIxNTBweFwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnRleHQoXCJTeW50YXggZXJyb3IgaW4gdGV4dFwiKTtcbiAgICBnLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItdGV4dFwiKS5hdHRyKFwieFwiLCAxMjUwKS5hdHRyKFwieVwiLCA0MDApLmF0dHIoXCJmb250LXNpemVcIiwgXCIxMDBweFwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnRleHQoXCJtZXJtYWlkIHZlcnNpb24gXCIgKyBtZXJtYWlkVmVyc2lvbik7XG4gICAgc3ZnLmF0dHIoXCJoZWlnaHRcIiwgMTAwKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIDUwMCk7XG4gICAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIFwiNzY4IDAgOTEyIDUxMlwiKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZyQxLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbVwiKTtcbiAgICBsb2ckMS5lcnJvcihnZXRFcnJvck1lc3NhZ2UoZSkpO1xuICB9XG59O1xuY29uc3QgZXJyb3JSZW5kZXJlciA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcbmNvbnN0IGRpYWdyYW0gPSB7XG4gIGRiOiB7XG4gICAgY2xlYXI6ICgpID0+IHtcbiAgICB9XG4gIH0sXG4gIHN0eWxlcyxcbiAgcmVuZGVyZXI6IGVycm9yUmVuZGVyZXIsXG4gIHBhcnNlcjoge1xuICAgIHBhcnNlcjogeyB5eToge30gfSxcbiAgICBwYXJzZTogKCkgPT4ge1xuICAgIH1cbiAgfSxcbiAgaW5pdDogKCkgPT4ge1xuICB9XG59O1xuY29uc3QgZXJyb3JEaWFncmFtID0gZGlhZ3JhbTtcbmNvbnN0IGlkJDIgPSBcImZsb3djaGFydC1lbGtcIjtcbmNvbnN0IGRldGVjdG9yJDIgPSAodHh0LCBjb25maWcyKSA9PiB7XG4gIHZhciBfYTtcbiAgaWYgKFxuICAgIC8vIElmIGRpYWdyYW0gZXhwbGljaXRseSBzdGF0ZXMgZmxvd2NoYXJ0LWVsa1xuICAgIHR4dC5tYXRjaCgvXlxccypmbG93Y2hhcnQtZWxrLykgfHwgLy8gSWYgYSBmbG93Y2hhcnQvZ3JhcGggZGlhZ3JhbSBoYXMgdGhlaXIgZGVmYXVsdCByZW5kZXJlciBzZXQgdG8gZWxrXG4gICAgdHh0Lm1hdGNoKC9eXFxzKmZsb3djaGFydHxncmFwaC8pICYmICgoX2EgPSBjb25maWcyID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcyLmZsb3djaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRSZW5kZXJlcikgPT09IFwiZWxrXCJcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IGxvYWRlciQyID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2Zsb3djaGFydC1lbGstZGVmaW5pdGlvbi01MDgyYTk5MC5qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkJDIsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luJDIgPSB7XG4gIGlkOiBpZCQyLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IkMixcbiAgbG9hZGVyOiBsb2FkZXIkMlxufTtcbmNvbnN0IGZsb3djaGFydEVsayA9IHBsdWdpbiQyO1xuY29uc3QgaWQkMSA9IFwidGltZWxpbmVcIjtcbmNvbnN0IGRldGVjdG9yJDEgPSAodHh0KSA9PiB7XG4gIHJldHVybiB0eHQubWF0Y2goL15cXHMqdGltZWxpbmUvKSAhPT0gbnVsbDtcbn07XG5jb25zdCBsb2FkZXIkMSA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi90aW1lbGluZS1kZWZpbml0aW9uLTVlZDM2NmY0LmpzXCIpO1xuICByZXR1cm4geyBpZDogaWQkMSwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn07XG5jb25zdCBwbHVnaW4kMSA9IHtcbiAgaWQ6IGlkJDEsXG4gIGRldGVjdG9yOiBkZXRlY3RvciQxLFxuICBsb2FkZXI6IGxvYWRlciQxXG59O1xuY29uc3QgdGltZWxpbmUgPSBwbHVnaW4kMTtcbmNvbnN0IGlkID0gXCJtaW5kbWFwXCI7XG5jb25zdCBkZXRlY3RvciA9ICh0eHQpID0+IHtcbiAgcmV0dXJuIHR4dC5tYXRjaCgvXlxccyptaW5kbWFwLykgIT09IG51bGw7XG59O1xuY29uc3QgbG9hZGVyID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL21pbmRtYXAtZGVmaW5pdGlvbi00ZmMyNTU3Yy5qc1wiKTtcbiAgcmV0dXJuIHsgaWQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59O1xuY29uc3QgcGx1Z2luID0ge1xuICBpZCxcbiAgZGV0ZWN0b3IsXG4gIGxvYWRlclxufTtcbmNvbnN0IG1pbmRtYXAgPSBwbHVnaW47XG5sZXQgaGFzTG9hZGVkRGlhZ3JhbXMgPSBmYWxzZTtcbmNvbnN0IGFkZERpYWdyYW1zID0gKCkgPT4ge1xuICBpZiAoaGFzTG9hZGVkRGlhZ3JhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFzTG9hZGVkRGlhZ3JhbXMgPSB0cnVlO1xuICByZWdpc3RlckRpYWdyYW0oXCJlcnJvclwiLCBlcnJvckRpYWdyYW0sICh0ZXh0KSA9PiB7XG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IFwiZXJyb3JcIjtcbiAgfSk7XG4gIHJlZ2lzdGVyRGlhZ3JhbShcbiAgICBcIi0tLVwiLFxuICAgIC8vIC0tLSBkaWFncmFtIHR5cGUgbWF5IGFwcGVhciBpZiBZQU1MIGZyb250LW1hdHRlciBpcyBub3QgcGFyc2VkIGNvcnJlY3RseVxuICAgIHtcbiAgICAgIGRiOiB7XG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdHlsZXM6IHt9LFxuICAgICAgLy8gc2hvdWxkIG5ldmVyIGJlIHVzZWRcbiAgICAgIHJlbmRlcmVyOiB7fSxcbiAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB1c2VkXG4gICAgICBwYXJzZXI6IHtcbiAgICAgICAgcGFyc2VyOiB7IHl5OiB7fSB9LFxuICAgICAgICBwYXJzZTogKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogKCkgPT4gbnVsbFxuICAgICAgLy8gbm8gb3BcbiAgICB9LFxuICAgICh0ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoXCItLS1cIik7XG4gICAgfVxuICApO1xuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyhcbiAgICBjNCxcbiAgICBjbGFzc0RpYWdyYW1WMixcbiAgICBjbGFzc0RpYWdyYW0sXG4gICAgZXIsXG4gICAgZ2FudHQsXG4gICAgaW5mbyxcbiAgICBwaWUsXG4gICAgcmVxdWlyZW1lbnQsXG4gICAgc2VxdWVuY2UsXG4gICAgZmxvd2NoYXJ0RWxrLFxuICAgIGZsb3djaGFydFYyLFxuICAgIGZsb3djaGFydCxcbiAgICBtaW5kbWFwLFxuICAgIHRpbWVsaW5lLFxuICAgIGdpdCxcbiAgICBzdGF0ZVYyLFxuICAgIHN0YXRlLFxuICAgIGpvdXJuZXksXG4gICAgcXVhZHJhbnRDaGFydFxuICApO1xufTtcbmNvbnN0IGNsZWFudXBDb21tZW50cyA9ICh0ZXh0KSA9PiB7XG4gIHJldHVybiB0ZXh0LnRyaW1TdGFydCgpLnJlcGxhY2UoL15cXHMqJSUoPyF7KVteXFxuXStcXG4/L2dtLCBcIlwiKTtcbn07XG5jbGFzcyBEaWFncmFtIHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLnR5cGUgPSBcImdyYXBoXCI7XG4gICAgdGhpcy50ZXh0ICs9IFwiXFxuXCI7XG4gICAgY29uc3QgY25mID0gZ2V0Q29uZmlnJDEoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy50eXBlID0gZGV0ZWN0VHlwZSh0ZXh0LCBjbmYpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZGV0ZWN0RXJyb3IgPSBlO1xuICAgIH1cbiAgICBjb25zdCBkaWFncmFtMiA9IGdldERpYWdyYW0odGhpcy50eXBlKTtcbiAgICBsb2ckMS5kZWJ1ZyhcIlR5cGUgXCIgKyB0aGlzLnR5cGUpO1xuICAgIHRoaXMuZGIgPSBkaWFncmFtMi5kYjtcbiAgICAoX2IgPSAoX2EgPSB0aGlzLmRiKS5jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIHRoaXMucmVuZGVyZXIgPSBkaWFncmFtMi5yZW5kZXJlcjtcbiAgICB0aGlzLnBhcnNlciA9IGRpYWdyYW0yLnBhcnNlcjtcbiAgICBjb25zdCBvcmlnaW5hbFBhcnNlID0gdGhpcy5wYXJzZXIucGFyc2UuYmluZCh0aGlzLnBhcnNlcik7XG4gICAgdGhpcy5wYXJzZXIucGFyc2UgPSAodGV4dDIpID0+IG9yaWdpbmFsUGFyc2UoY2xlYW51cENvbW1lbnRzKGV4dHJhY3RGcm9udE1hdHRlcih0ZXh0MiwgdGhpcy5kYikpKTtcbiAgICB0aGlzLnBhcnNlci5wYXJzZXIueXkgPSB0aGlzLmRiO1xuICAgIGlmIChkaWFncmFtMi5pbml0KSB7XG4gICAgICBkaWFncmFtMi5pbml0KGNuZik7XG4gICAgICBsb2ckMS5pbmZvKFwiSW5pdGlhbGl6ZWQgZGlhZ3JhbSBcIiArIHRoaXMudHlwZSwgY25mKTtcbiAgICB9XG4gICAgdGhpcy5wYXJzZSgpO1xuICB9XG4gIHBhcnNlKCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKHRoaXMuZGV0ZWN0RXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuZGV0ZWN0RXJyb3I7XG4gICAgfVxuICAgIChfYiA9IChfYSA9IHRoaXMuZGIpLmNsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KTtcbiAgfVxuICBhc3luYyByZW5kZXIoaWQyLCB2ZXJzaW9uMikge1xuICAgIGF3YWl0IHRoaXMucmVuZGVyZXIuZHJhdyh0aGlzLnRleHQsIGlkMiwgdmVyc2lvbjIsIHRoaXMpO1xuICB9XG4gIGdldFBhcnNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXI7XG4gIH1cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG59XG5jb25zdCBnZXREaWFncmFtRnJvbVRleHQgPSBhc3luYyAodGV4dCkgPT4ge1xuICBjb25zdCB0eXBlMiA9IGRldGVjdFR5cGUodGV4dCwgZ2V0Q29uZmlnJDEoKSk7XG4gIHRyeSB7XG4gICAgZ2V0RGlhZ3JhbSh0eXBlMik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbG9hZGVyMiA9IGdldERpYWdyYW1Mb2FkZXIodHlwZTIpO1xuICAgIGlmICghbG9hZGVyMikge1xuICAgICAgdGhyb3cgbmV3IFVua25vd25EaWFncmFtRXJyb3IoYERpYWdyYW0gJHt0eXBlMn0gbm90IGZvdW5kLmApO1xuICAgIH1cbiAgICBjb25zdCB7IGlkOiBpZDIsIGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBsb2FkZXIyKCk7XG4gICAgcmVnaXN0ZXJEaWFncmFtKGlkMiwgZGlhZ3JhbTIpO1xuICB9XG4gIHJldHVybiBuZXcgRGlhZ3JhbSh0ZXh0KTtcbn07XG5sZXQgaW50ZXJhY3Rpb25GdW5jdGlvbnMgPSBbXTtcbmNvbnN0IGFkZEZ1bmN0aW9uID0gKGZ1bmMpID0+IHtcbiAgaW50ZXJhY3Rpb25GdW5jdGlvbnMucHVzaChmdW5jKTtcbn07XG5jb25zdCBhdHRhY2hGdW5jdGlvbnMgPSAoKSA9PiB7XG4gIGludGVyYWN0aW9uRnVuY3Rpb25zLmZvckVhY2goKGYpID0+IHtcbiAgICBmKCk7XG4gIH0pO1xuICBpbnRlcmFjdGlvbkZ1bmN0aW9ucyA9IFtdO1xufTtcbmNvbnN0IFNWR19ST0xFID0gXCJncmFwaGljcy1kb2N1bWVudCBkb2N1bWVudFwiO1xuZnVuY3Rpb24gc2V0QTExeURpYWdyYW1JbmZvKHN2ZywgZGlhZ3JhbVR5cGUpIHtcbiAgc3ZnLmF0dHIoXCJyb2xlXCIsIFNWR19ST0xFKTtcbiAgaWYgKCFpc0VtcHR5KGRpYWdyYW1UeXBlKSkge1xuICAgIHN2Zy5hdHRyKFwiYXJpYS1yb2xlZGVzY3JpcHRpb25cIiwgZGlhZ3JhbVR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBhZGRTVkdhMTF5VGl0bGVEZXNjcmlwdGlvbihzdmcsIGExMXlUaXRsZSwgYTExeURlc2MsIGJhc2VJZCkge1xuICBpZiAoc3ZnLmluc2VydCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhMTF5VGl0bGUgfHwgYTExeURlc2MpIHtcbiAgICBpZiAoYTExeURlc2MpIHtcbiAgICAgIGNvbnN0IGRlc2NJZCA9IFwiY2hhcnQtZGVzYy1cIiArIGJhc2VJZDtcbiAgICAgIHN2Zy5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjSWQpO1xuICAgICAgc3ZnLmluc2VydChcImRlc2NcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIGRlc2NJZCkudGV4dChhMTF5RGVzYyk7XG4gICAgfVxuICAgIGlmIChhMTF5VGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlSWQgPSBcImNoYXJ0LXRpdGxlLVwiICsgYmFzZUlkO1xuICAgICAgc3ZnLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIiwgdGl0bGVJZCk7XG4gICAgICBzdmcuaW5zZXJ0KFwidGl0bGVcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIHRpdGxlSWQpLnRleHQoYTExeVRpdGxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5jb25zdCBDTEFTU0RFRl9ESUFHUkFNUyA9IFtcbiAgXCJncmFwaFwiLFxuICBcImZsb3djaGFydFwiLFxuICBcImZsb3djaGFydC12MlwiLFxuICBcImZsb3djaGFydC1lbGtcIixcbiAgXCJzdGF0ZURpYWdyYW1cIixcbiAgXCJzdGF0ZURpYWdyYW0tdjJcIlxuXTtcbmNvbnN0IE1BWF9URVhUTEVOR1RIID0gNWU0O1xuY29uc3QgTUFYX1RFWFRMRU5HVEhfRVhDRUVERURfTVNHID0gXCJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhXCI7XG5jb25zdCBTRUNVUklUWV9MVkxfU0FOREJPWCA9IFwic2FuZGJveFwiO1xuY29uc3QgU0VDVVJJVFlfTFZMX0xPT1NFID0gXCJsb29zZVwiO1xuY29uc3QgWE1MTlNfU1ZHX1NURCA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmNvbnN0IFhNTE5TX1hMSU5LX1NURCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiO1xuY29uc3QgWE1MTlNfWEhUTUxfU1REID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5jb25zdCBJRlJBTUVfV0lEVEggPSBcIjEwMCVcIjtcbmNvbnN0IElGUkFNRV9IRUlHSFQgPSBcIjEwMCVcIjtcbmNvbnN0IElGUkFNRV9TVFlMRVMgPSBcImJvcmRlcjowO21hcmdpbjowO1wiO1xuY29uc3QgSUZSQU1FX0JPRFlfU1RZTEUgPSBcIm1hcmdpbjowXCI7XG5jb25zdCBJRlJBTUVfU0FOREJPWF9PUFRTID0gXCJhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb24gYWxsb3ctcG9wdXBzXCI7XG5jb25zdCBJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0cgPSAnVGhlIFwiaWZyYW1lXCIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLic7XG5jb25zdCBET01QVVJJRllfVEFHUyA9IFtcImZvcmVpZ25vYmplY3RcIl07XG5jb25zdCBET01QVVJJRllfQVRUUiA9IFtcImRvbWluYW50LWJhc2VsaW5lXCJdO1xuYXN5bmMgZnVuY3Rpb24gcGFyc2UkMSh0ZXh0LCBwYXJzZU9wdGlvbnMpIHtcbiAgYWRkRGlhZ3JhbXMoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaWFncmFtMiA9IGF3YWl0IGdldERpYWdyYW1Gcm9tVGV4dCh0ZXh0KTtcbiAgICBkaWFncmFtMi5wYXJzZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChwYXJzZU9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcnNlT3B0aW9ucy5zdXBwcmVzc0Vycm9ycykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmNvbnN0IGVuY29kZUVudGl0aWVzID0gZnVuY3Rpb24odGV4dCkge1xuICBsZXQgdHh0ID0gdGV4dDtcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL3N0eWxlLio6XFxTKiMuKjsvZywgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCAtIDEpO1xuICB9KTtcbiAgdHh0ID0gdHh0LnJlcGxhY2UoL2NsYXNzRGVmLio6XFxTKiMuKjsvZywgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCAtIDEpO1xuICB9KTtcbiAgdHh0ID0gdHh0LnJlcGxhY2UoLyNcXHcrOy9nLCBmdW5jdGlvbihzKSB7XG4gICAgY29uc3QgaW5uZXJUeHQgPSBzLnN1YnN0cmluZygxLCBzLmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGlzSW50ID0gL15cXCs/XFxkKyQvLnRlc3QoaW5uZXJUeHQpO1xuICAgIGlmIChpc0ludCkge1xuICAgICAgcmV0dXJuIFwi76yCwrDCsFwiICsgaW5uZXJUeHQgKyBcIsK2w59cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwi76yCwrBcIiArIGlubmVyVHh0ICsgXCLCtsOfXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR4dDtcbn07XG5jb25zdCBkZWNvZGVFbnRpdGllcyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgv76yCwrDCsC9nLCBcIiYjXCIpLnJlcGxhY2UoL++sgsKwL2csIFwiJlwiKS5yZXBsYWNlKC/CtsOfL2csIFwiO1wiKTtcbn07XG5jb25zdCBjc3NJbXBvcnRhbnRTdHlsZXMgPSAoY3NzQ2xhc3MsIGVsZW1lbnQsIGNzc0NsYXNzZXMgPSBbXSkgPT4ge1xuICByZXR1cm4gYFxuLiR7Y3NzQ2xhc3N9ICR7ZWxlbWVudH0geyAke2Nzc0NsYXNzZXMuam9pbihcIiAhaW1wb3J0YW50OyBcIil9ICFpbXBvcnRhbnQ7IH1gO1xufTtcbmNvbnN0IGNyZWF0ZUNzc1N0eWxlcyA9IChjb25maWcyLCBncmFwaFR5cGUsIGNsYXNzRGVmcyA9IHt9KSA9PiB7XG4gIHZhciBfYTtcbiAgbGV0IGNzc1N0eWxlcyA9IFwiXCI7XG4gIGlmIChjb25maWcyLnRoZW1lQ1NTICE9PSB2b2lkIDApIHtcbiAgICBjc3NTdHlsZXMgKz0gYFxuJHtjb25maWcyLnRoZW1lQ1NTfWA7XG4gIH1cbiAgaWYgKGNvbmZpZzIuZm9udEZhbWlseSAhPT0gdm9pZCAwKSB7XG4gICAgY3NzU3R5bGVzICs9IGBcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2NvbmZpZzIuZm9udEZhbWlseX19YDtcbiAgfVxuICBpZiAoY29uZmlnMi5hbHRGb250RmFtaWx5ICE9PSB2b2lkIDApIHtcbiAgICBjc3NTdHlsZXMgKz0gYFxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAke2NvbmZpZzIuYWx0Rm9udEZhbWlseX19YDtcbiAgfVxuICBpZiAoIWlzRW1wdHkoY2xhc3NEZWZzKSAmJiBDTEFTU0RFRl9ESUFHUkFNUy5pbmNsdWRlcyhncmFwaFR5cGUpKSB7XG4gICAgY29uc3QgaHRtbExhYmVscyA9IGNvbmZpZzIuaHRtbExhYmVscyB8fCAoKF9hID0gY29uZmlnMi5mbG93Y2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5odG1sTGFiZWxzKTtcbiAgICBjb25zdCBjc3NIdG1sRWxlbWVudHMgPSBbXCI+ICpcIiwgXCJzcGFuXCJdO1xuICAgIGNvbnN0IGNzc1NoYXBlRWxlbWVudHMgPSBbXCJyZWN0XCIsIFwicG9seWdvblwiLCBcImVsbGlwc2VcIiwgXCJjaXJjbGVcIiwgXCJwYXRoXCJdO1xuICAgIGNvbnN0IGNzc0VsZW1lbnRzID0gaHRtbExhYmVscyA/IGNzc0h0bWxFbGVtZW50cyA6IGNzc1NoYXBlRWxlbWVudHM7XG4gICAgZm9yIChjb25zdCBjbGFzc0lkIGluIGNsYXNzRGVmcykge1xuICAgICAgY29uc3Qgc3R5bGVDbGFzc0RlZiA9IGNsYXNzRGVmc1tjbGFzc0lkXTtcbiAgICAgIGlmICghaXNFbXB0eShzdHlsZUNsYXNzRGVmLnN0eWxlcykpIHtcbiAgICAgICAgY3NzRWxlbWVudHMuZm9yRWFjaCgoY3NzRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNzc1N0eWxlcyArPSBjc3NJbXBvcnRhbnRTdHlsZXMoc3R5bGVDbGFzc0RlZi5pZCwgY3NzRWxlbWVudCwgc3R5bGVDbGFzc0RlZi5zdHlsZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNFbXB0eShzdHlsZUNsYXNzRGVmLnRleHRTdHlsZXMpKSB7XG4gICAgICAgIGNzc1N0eWxlcyArPSBjc3NJbXBvcnRhbnRTdHlsZXMoc3R5bGVDbGFzc0RlZi5pZCwgXCJ0c3BhblwiLCBzdHlsZUNsYXNzRGVmLnRleHRTdHlsZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3NzU3R5bGVzO1xufTtcbmNvbnN0IGNyZWF0ZVVzZXJTdHlsZXMgPSAoY29uZmlnMiwgZ3JhcGhUeXBlLCBjbGFzc0RlZnMsIHN2Z0lkKSA9PiB7XG4gIGNvbnN0IHVzZXJDU1NzdHlsZXMgPSBjcmVhdGVDc3NTdHlsZXMoY29uZmlnMiwgZ3JhcGhUeXBlLCBjbGFzc0RlZnMpO1xuICBjb25zdCBhbGxTdHlsZXMgPSBnZXRTdHlsZXMkMihncmFwaFR5cGUsIHVzZXJDU1NzdHlsZXMsIGNvbmZpZzIudGhlbWVWYXJpYWJsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoYCR7c3ZnSWR9eyR7YWxsU3R5bGVzfX1gKSwgc3RyaW5naWZ5KTtcbn07XG5jb25zdCBjbGVhblVwU3ZnQ29kZSA9IChzdmdDb2RlID0gXCJcIiwgaW5TYW5kYm94TW9kZSwgdXNlQXJyb3dNYXJrZXJVcmxzKSA9PiB7XG4gIGxldCBjbGVhbmVkVXBTdmcgPSBzdmdDb2RlO1xuICBpZiAoIXVzZUFycm93TWFya2VyVXJscyAmJiAhaW5TYW5kYm94TW9kZSkge1xuICAgIGNsZWFuZWRVcFN2ZyA9IGNsZWFuZWRVcFN2Zy5yZXBsYWNlKFxuICAgICAgL21hcmtlci1lbmQ9XCJ1cmxcXChbXFxkKy4vOj0/QS1aYS16LV0qPyMvZyxcbiAgICAgICdtYXJrZXItZW5kPVwidXJsKCMnXG4gICAgKTtcbiAgfVxuICBjbGVhbmVkVXBTdmcgPSBkZWNvZGVFbnRpdGllcyhjbGVhbmVkVXBTdmcpO1xuICBjbGVhbmVkVXBTdmcgPSBjbGVhbmVkVXBTdmcucmVwbGFjZSgvPGJyPi9nLCBcIjxici8+XCIpO1xuICByZXR1cm4gY2xlYW5lZFVwU3ZnO1xufTtcbmNvbnN0IHB1dEludG9JRnJhbWUgPSAoc3ZnQ29kZSA9IFwiXCIsIHN2Z0VsZW1lbnQpID0+IHtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnRWxlbWVudCA/IHN2Z0VsZW1lbnQudmlld0JveC5iYXNlVmFsLmhlaWdodCArIFwicHhcIiA6IElGUkFNRV9IRUlHSFQ7XG4gIGNvbnN0IGJhc2U2NGVuY29kZWRTcmMgPSBidG9hKCc8Ym9keSBzdHlsZT1cIicgKyBJRlJBTUVfQk9EWV9TVFlMRSArICdcIj4nICsgc3ZnQ29kZSArIFwiPC9ib2R5PlwiKTtcbiAgcmV0dXJuIGA8aWZyYW1lIHN0eWxlPVwid2lkdGg6JHtJRlJBTUVfV0lEVEh9O2hlaWdodDoke2hlaWdodH07JHtJRlJBTUVfU1RZTEVTfVwiIHNyYz1cImRhdGE6dGV4dC9odG1sO2Jhc2U2NCwke2Jhc2U2NGVuY29kZWRTcmN9XCIgc2FuZGJveD1cIiR7SUZSQU1FX1NBTkRCT1hfT1BUU31cIj5cbiAgJHtJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0d9XG48L2lmcmFtZT5gO1xufTtcbmNvbnN0IGFwcGVuZERpdlN2Z0cgPSAocGFyZW50Um9vdCwgaWQyLCBlbmNsb3NpbmdEaXZJZCwgZGl2U3R5bGUsIHN2Z1hsaW5rKSA9PiB7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdiA9IHBhcmVudFJvb3QuYXBwZW5kKFwiZGl2XCIpO1xuICBlbmNsb3NpbmdEaXYuYXR0cihcImlkXCIsIGVuY2xvc2luZ0RpdklkKTtcbiAgaWYgKGRpdlN0eWxlKSB7XG4gICAgZW5jbG9zaW5nRGl2LmF0dHIoXCJzdHlsZVwiLCBkaXZTdHlsZSk7XG4gIH1cbiAgY29uc3Qgc3ZnTm9kZSA9IGVuY2xvc2luZ0Rpdi5hcHBlbmQoXCJzdmdcIikuYXR0cihcImlkXCIsIGlkMikuYXR0cihcIndpZHRoXCIsIFwiMTAwJVwiKS5hdHRyKFwieG1sbnNcIiwgWE1MTlNfU1ZHX1NURCk7XG4gIGlmIChzdmdYbGluaykge1xuICAgIHN2Z05vZGUuYXR0cihcInhtbG5zOnhsaW5rXCIsIHN2Z1hsaW5rKTtcbiAgfVxuICBzdmdOb2RlLmFwcGVuZChcImdcIik7XG4gIHJldHVybiBwYXJlbnRSb290O1xufTtcbmZ1bmN0aW9uIHNhbmRib3hlZElmcmFtZShwYXJlbnROb2RlLCBpRnJhbWVJZCkge1xuICByZXR1cm4gcGFyZW50Tm9kZS5hcHBlbmQoXCJpZnJhbWVcIikuYXR0cihcImlkXCIsIGlGcmFtZUlkKS5hdHRyKFwic3R5bGVcIiwgXCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiKS5hdHRyKFwic2FuZGJveFwiLCBcIlwiKTtcbn1cbmNvbnN0IHJlbW92ZUV4aXN0aW5nRWxlbWVudHMgPSAoZG9jLCBpZDIsIGRpdklkLCBpRnJhbWVJZCkgPT4ge1xuICB2YXIgX2EsIF9iLCBfYztcbiAgKF9hID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkMikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5yZW1vdmUoKTtcbiAgKF9iID0gZG9jLmdldEVsZW1lbnRCeUlkKGRpdklkKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnJlbW92ZSgpO1xuICAoX2MgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaUZyYW1lSWQpKSA9PSBudWxsID8gdm9pZCAwIDogX2MucmVtb3ZlKCk7XG59O1xuY29uc3QgcmVuZGVyJDEgPSBhc3luYyBmdW5jdGlvbihpZDIsIHRleHQsIHN2Z0NvbnRhaW5pbmdFbGVtZW50KSB7XG4gIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgYWRkRGlhZ3JhbXMoKTtcbiAgcmVzZXQoKTtcbiAgY29uc3QgZ3JhcGhJbml0ID0gdXRpbHMuZGV0ZWN0SW5pdCh0ZXh0KTtcbiAgaWYgKGdyYXBoSW5pdCkge1xuICAgIGRpcmVjdGl2ZVNhbml0aXplcihncmFwaEluaXQpO1xuICAgIGFkZERpcmVjdGl2ZShncmFwaEluaXQpO1xuICB9XG4gIGNvbnN0IGNvbmZpZzIgPSBnZXRDb25maWckMSgpO1xuICBsb2ckMS5kZWJ1Zyhjb25maWcyKTtcbiAgaWYgKHRleHQubGVuZ3RoID4gKChjb25maWcyID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcyLm1heFRleHRTaXplKSA/PyBNQVhfVEVYVExFTkdUSCkpIHtcbiAgICB0ZXh0ID0gTUFYX1RFWFRMRU5HVEhfRVhDRUVERURfTVNHO1xuICB9XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoXG4gICAgLzwoXFx3KykoW14+XSopPi9nLFxuICAgIChtYXRjaCwgdGFnLCBhdHRyaWJ1dGVzKSA9PiBcIjxcIiArIHRhZyArIGF0dHJpYnV0ZXMucmVwbGFjZSgvPVwiKFteXCJdKilcIi9nLCBcIj0nJDEnXCIpICsgXCI+XCJcbiAgKTtcbiAgY29uc3QgaWRTZWxlY3RvciA9IFwiI1wiICsgaWQyO1xuICBjb25zdCBpRnJhbWVJRCA9IFwiaVwiICsgaWQyO1xuICBjb25zdCBpRnJhbWVJRF9zZWxlY3RvciA9IFwiI1wiICsgaUZyYW1lSUQ7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdklEID0gXCJkXCIgKyBpZDI7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yID0gXCIjXCIgKyBlbmNsb3NpbmdEaXZJRDtcbiAgbGV0IHJvb3QgPSBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBpc1NhbmRib3hlZCA9IGNvbmZpZzIuc2VjdXJpdHlMZXZlbCA9PT0gU0VDVVJJVFlfTFZMX1NBTkRCT1g7XG4gIGNvbnN0IGlzTG9vc2VTZWN1cml0eUxldmVsID0gY29uZmlnMi5zZWN1cml0eUxldmVsID09PSBTRUNVUklUWV9MVkxfTE9PU0U7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSBjb25maWcyLmZvbnRGYW1pbHk7XG4gIGlmIChzdmdDb250YWluaW5nRWxlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHN2Z0NvbnRhaW5pbmdFbGVtZW50KSB7XG4gICAgICBzdmdDb250YWluaW5nRWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAoaXNTYW5kYm94ZWQpIHtcbiAgICAgIGNvbnN0IGlmcmFtZSA9IHNhbmRib3hlZElmcmFtZShzZWxlY3Qoc3ZnQ29udGFpbmluZ0VsZW1lbnQpLCBpRnJhbWVJRCk7XG4gICAgICByb290ID0gc2VsZWN0KGlmcmFtZS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTtcbiAgICAgIHJvb3Qubm9kZSgpLnN0eWxlLm1hcmdpbiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3QgPSBzZWxlY3Qoc3ZnQ29udGFpbmluZ0VsZW1lbnQpO1xuICAgIH1cbiAgICBhcHBlbmREaXZTdmdHKHJvb3QsIGlkMiwgZW5jbG9zaW5nRGl2SUQsIGBmb250LWZhbWlseTogJHtmb250RmFtaWx5fWAsIFhNTE5TX1hMSU5LX1NURCk7XG4gIH0gZWxzZSB7XG4gICAgcmVtb3ZlRXhpc3RpbmdFbGVtZW50cyhkb2N1bWVudCwgaWQyLCBlbmNsb3NpbmdEaXZJRCwgaUZyYW1lSUQpO1xuICAgIGlmIChpc1NhbmRib3hlZCkge1xuICAgICAgY29uc3QgaWZyYW1lID0gc2FuZGJveGVkSWZyYW1lKHNlbGVjdChcImJvZHlcIiksIGlGcmFtZUlEKTtcbiAgICAgIHJvb3QgPSBzZWxlY3QoaWZyYW1lLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpO1xuICAgICAgcm9vdC5ub2RlKCkuc3R5bGUubWFyZ2luID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdCA9IHNlbGVjdChcImJvZHlcIik7XG4gICAgfVxuICAgIGFwcGVuZERpdlN2Z0cocm9vdCwgaWQyLCBlbmNsb3NpbmdEaXZJRCk7XG4gIH1cbiAgdGV4dCA9IGVuY29kZUVudGl0aWVzKHRleHQpO1xuICBsZXQgZGlhZztcbiAgbGV0IHBhcnNlRW5jb3VudGVyZWRFeGNlcHRpb247XG4gIHRyeSB7XG4gICAgZGlhZyA9IGF3YWl0IGdldERpYWdyYW1Gcm9tVGV4dCh0ZXh0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBkaWFnID0gbmV3IERpYWdyYW0oXCJlcnJvclwiKTtcbiAgICBwYXJzZUVuY291bnRlcmVkRXhjZXB0aW9uID0gZXJyb3I7XG4gIH1cbiAgY29uc3QgZWxlbWVudCA9IHJvb3Quc2VsZWN0KGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yKS5ub2RlKCk7XG4gIGNvbnN0IGdyYXBoVHlwZSA9IGRpYWcudHlwZTtcbiAgY29uc3Qgc3ZnID0gZWxlbWVudC5maXJzdENoaWxkO1xuICBjb25zdCBmaXJzdENoaWxkID0gc3ZnLmZpcnN0Q2hpbGQ7XG4gIGNvbnN0IGRpYWdyYW1DbGFzc0RlZnMgPSBDTEFTU0RFRl9ESUFHUkFNUy5pbmNsdWRlcyhncmFwaFR5cGUpID8gZGlhZy5yZW5kZXJlci5nZXRDbGFzc2VzKHRleHQsIGRpYWcpIDoge307XG4gIGNvbnN0IHJ1bGVzID0gY3JlYXRlVXNlclN0eWxlcyhcbiAgICBjb25maWcyLFxuICAgIGdyYXBoVHlwZSxcbiAgICAvLyBAdHMtaWdub3JlIGNvbnZlcnQgcmVuZGVyZXIgdG8gVFMuXG4gICAgZGlhZ3JhbUNsYXNzRGVmcyxcbiAgICBpZFNlbGVjdG9yXG4gICk7XG4gIGNvbnN0IHN0eWxlMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgc3R5bGUxLmlubmVySFRNTCA9IHJ1bGVzO1xuICBzdmcuaW5zZXJ0QmVmb3JlKHN0eWxlMSwgZmlyc3RDaGlsZCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGlhZy5yZW5kZXJlci5kcmF3KHRleHQsIGlkMiwgdmVyc2lvbiwgZGlhZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclJlbmRlcmVyLmRyYXcodGV4dCwgaWQyLCB2ZXJzaW9uKTtcbiAgICB0aHJvdyBlO1xuICB9XG4gIGNvbnN0IHN2Z05vZGUgPSByb290LnNlbGVjdChgJHtlbmNsb3NpbmdEaXZJRF9zZWxlY3Rvcn0gc3ZnYCk7XG4gIGNvbnN0IGExMXlUaXRsZSA9IChfYiA9IChfYSA9IGRpYWcuZGIpLmdldEFjY1RpdGxlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gIGNvbnN0IGExMXlEZXNjciA9IChfZCA9IChfYyA9IGRpYWcuZGIpLmdldEFjY0Rlc2NyaXB0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2QuY2FsbChfYyk7XG4gIGFkZEExMXlJbmZvKGdyYXBoVHlwZSwgc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IpO1xuICByb290LnNlbGVjdChgW2lkPVwiJHtpZDJ9XCJdYCkuc2VsZWN0QWxsKFwiZm9yZWlnbm9iamVjdCA+ICpcIikuYXR0cihcInhtbG5zXCIsIFhNTE5TX1hIVE1MX1NURCk7XG4gIGxldCBzdmdDb2RlID0gcm9vdC5zZWxlY3QoZW5jbG9zaW5nRGl2SURfc2VsZWN0b3IpLm5vZGUoKS5pbm5lckhUTUw7XG4gIGxvZyQxLmRlYnVnKFwiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGVcIiwgY29uZmlnMi5hcnJvd01hcmtlckFic29sdXRlKTtcbiAgc3ZnQ29kZSA9IGNsZWFuVXBTdmdDb2RlKHN2Z0NvZGUsIGlzU2FuZGJveGVkLCBldmFsdWF0ZShjb25maWcyLmFycm93TWFya2VyQWJzb2x1dGUpKTtcbiAgaWYgKGlzU2FuZGJveGVkKSB7XG4gICAgY29uc3Qgc3ZnRWwgPSByb290LnNlbGVjdChlbmNsb3NpbmdEaXZJRF9zZWxlY3RvciArIFwiIHN2Z1wiKS5ub2RlKCk7XG4gICAgc3ZnQ29kZSA9IHB1dEludG9JRnJhbWUoc3ZnQ29kZSwgc3ZnRWwpO1xuICB9IGVsc2UgaWYgKCFpc0xvb3NlU2VjdXJpdHlMZXZlbCkge1xuICAgIHN2Z0NvZGUgPSBET01QdXJpZnkuc2FuaXRpemUoc3ZnQ29kZSwge1xuICAgICAgQUREX1RBR1M6IERPTVBVUklGWV9UQUdTLFxuICAgICAgQUREX0FUVFI6IERPTVBVUklGWV9BVFRSXG4gICAgfSk7XG4gIH1cbiAgYXR0YWNoRnVuY3Rpb25zKCk7XG4gIGlmIChwYXJzZUVuY291bnRlcmVkRXhjZXB0aW9uKSB7XG4gICAgdGhyb3cgcGFyc2VFbmNvdW50ZXJlZEV4Y2VwdGlvbjtcbiAgfVxuICBjb25zdCB0bXBFbGVtZW50U2VsZWN0b3IgPSBpc1NhbmRib3hlZCA/IGlGcmFtZUlEX3NlbGVjdG9yIDogZW5jbG9zaW5nRGl2SURfc2VsZWN0b3I7XG4gIGNvbnN0IG5vZGUgPSBzZWxlY3QodG1wRWxlbWVudFNlbGVjdG9yKS5ub2RlKCk7XG4gIGlmIChub2RlICYmIFwicmVtb3ZlXCIgaW4gbm9kZSkge1xuICAgIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdmc6IHN2Z0NvZGUsXG4gICAgYmluZEZ1bmN0aW9uczogZGlhZy5kYi5iaW5kRnVuY3Rpb25zXG4gIH07XG59O1xuZnVuY3Rpb24gaW5pdGlhbGl6ZSQxKG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2E7XG4gIGlmICgob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5mb250RmFtaWx5KSAmJiAhKChfYSA9IG9wdGlvbnMudGhlbWVWYXJpYWJsZXMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb250RmFtaWx5KSkge1xuICAgIGlmICghb3B0aW9ucy50aGVtZVZhcmlhYmxlcykge1xuICAgICAgb3B0aW9ucy50aGVtZVZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkgPSBvcHRpb25zLmZvbnRGYW1pbHk7XG4gIH1cbiAgc2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplKG9wdGlvbnMpO1xuICBpZiAoKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhlbWUpICYmIG9wdGlvbnMudGhlbWUgaW4gdGhlbWUpIHtcbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzID0gdGhlbWVbb3B0aW9ucy50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoXG4gICAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzXG4gICAgKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucy50aGVtZVZhcmlhYmxlcyA9IHRoZW1lLmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMob3B0aW9ucy50aGVtZVZhcmlhYmxlcyk7XG4gIH1cbiAgY29uc3QgY29uZmlnMiA9IHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiID8gc2V0U2l0ZUNvbmZpZyhvcHRpb25zKSA6IGdldFNpdGVDb25maWcoKTtcbiAgc2V0TG9nTGV2ZWwkMShjb25maWcyLmxvZ0xldmVsKTtcbiAgYWRkRGlhZ3JhbXMoKTtcbn1cbmZ1bmN0aW9uIGFkZEExMXlJbmZvKGdyYXBoVHlwZSwgc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IpIHtcbiAgc2V0QTExeURpYWdyYW1JbmZvKHN2Z05vZGUsIGdyYXBoVHlwZSk7XG4gIGFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uKHN2Z05vZGUsIGExMXlUaXRsZSwgYTExeURlc2NyLCBzdmdOb2RlLmF0dHIoXCJpZFwiKSk7XG59XG5jb25zdCBtZXJtYWlkQVBJID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlbmRlcjogcmVuZGVyJDEsXG4gIHBhcnNlOiBwYXJzZSQxLFxuICBwYXJzZURpcmVjdGl2ZTogcGFyc2VEaXJlY3RpdmUkMSxcbiAgZ2V0RGlhZ3JhbUZyb21UZXh0LFxuICBpbml0aWFsaXplOiBpbml0aWFsaXplJDEsXG4gIGdldENvbmZpZzogZ2V0Q29uZmlnJDEsXG4gIHNldENvbmZpZyxcbiAgZ2V0U2l0ZUNvbmZpZyxcbiAgdXBkYXRlU2l0ZUNvbmZpZyxcbiAgcmVzZXQ6ICgpID0+IHtcbiAgICByZXNldCgpO1xuICB9LFxuICBnbG9iYWxSZXNldDogKCkgPT4ge1xuICAgIHJlc2V0KGRlZmF1bHRDb25maWcpO1xuICB9LFxuICBkZWZhdWx0Q29uZmlnXG59KTtcbnNldExvZ0xldmVsJDEoZ2V0Q29uZmlnJDEoKS5sb2dMZXZlbCk7XG5yZXNldChnZXRDb25maWckMSgpKTtcbmNvbnN0IGhhbmRsZUVycm9yID0gKGVycm9yLCBlcnJvcnMsIHBhcnNlRXJyb3IpID0+IHtcbiAgbG9nJDEud2FybihlcnJvcik7XG4gIGlmIChpc0RldGFpbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgIHBhcnNlRXJyb3IoZXJyb3Iuc3RyLCBlcnJvci5oYXNoKTtcbiAgICB9XG4gICAgZXJyb3JzLnB1c2goeyAuLi5lcnJvciwgbWVzc2FnZTogZXJyb3Iuc3RyLCBlcnJvciB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgcGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIHN0cjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgaGFzaDogZXJyb3IubmFtZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IHJ1biA9IGFzeW5jIGZ1bmN0aW9uKG9wdGlvbnMgPSB7XG4gIHF1ZXJ5U2VsZWN0b3I6IFwiLm1lcm1haWRcIlxufSkge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1blRocm93c0Vycm9ycyhvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChpc0RldGFpbGVkRXJyb3IoZSkpIHtcbiAgICAgIGxvZyQxLmVycm9yKGUuc3RyKTtcbiAgICB9XG4gICAgaWYgKG1lcm1haWQucGFyc2VFcnJvcikge1xuICAgICAgbWVybWFpZC5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuc3VwcHJlc3NFcnJvcnMpIHtcbiAgICAgIGxvZyQxLmVycm9yKFwiVXNlIHRoZSBzdXBwcmVzc0Vycm9ycyBvcHRpb24gdG8gc3VwcHJlc3MgdGhlc2UgZXJyb3JzXCIpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBydW5UaHJvd3NFcnJvcnMgPSBhc3luYyBmdW5jdGlvbih7IHBvc3RSZW5kZXJDYWxsYmFjaywgcXVlcnlTZWxlY3Rvciwgbm9kZXMgfSA9IHtcbiAgcXVlcnlTZWxlY3RvcjogXCIubWVybWFpZFwiXG59KSB7XG4gIGNvbnN0IGNvbmYgPSBtZXJtYWlkQVBJLmdldENvbmZpZygpO1xuICBsb2ckMS5kZWJ1ZyhgJHshcG9zdFJlbmRlckNhbGxiYWNrID8gXCJObyBcIiA6IFwiXCJ9Q2FsbGJhY2sgZnVuY3Rpb24gZm91bmRgKTtcbiAgbGV0IG5vZGVzVG9Qcm9jZXNzO1xuICBpZiAobm9kZXMpIHtcbiAgICBub2Rlc1RvUHJvY2VzcyA9IG5vZGVzO1xuICB9IGVsc2UgaWYgKHF1ZXJ5U2VsZWN0b3IpIHtcbiAgICBub2Rlc1RvUHJvY2VzcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZXMgYW5kIHF1ZXJ5U2VsZWN0b3IgYXJlIGJvdGggdW5kZWZpbmVkXCIpO1xuICB9XG4gIGxvZyQxLmRlYnVnKGBGb3VuZCAke25vZGVzVG9Qcm9jZXNzLmxlbmd0aH0gZGlhZ3JhbXNgKTtcbiAgaWYgKChjb25mID09IG51bGwgPyB2b2lkIDAgOiBjb25mLnN0YXJ0T25Mb2FkKSAhPT0gdm9pZCAwKSB7XG4gICAgbG9nJDEuZGVidWcoXCJTdGFydCBPbiBMb2FkOiBcIiArIChjb25mID09IG51bGwgPyB2b2lkIDAgOiBjb25mLnN0YXJ0T25Mb2FkKSk7XG4gICAgbWVybWFpZEFQSS51cGRhdGVTaXRlQ29uZmlnKHsgc3RhcnRPbkxvYWQ6IGNvbmYgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmYuc3RhcnRPbkxvYWQgfSk7XG4gIH1cbiAgY29uc3QgaWRHZW5lcmF0b3IgPSBuZXcgdXRpbHMuaW5pdElkR2VuZXJhdG9yKGNvbmYuZGV0ZXJtaW5pc3RpY0lkcywgY29uZi5kZXRlcm1pbmlzdGljSURTZWVkKTtcbiAgbGV0IHR4dDtcbiAgY29uc3QgZXJyb3JzID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBBcnJheS5mcm9tKG5vZGVzVG9Qcm9jZXNzKSkge1xuICAgIGxvZyQxLmluZm8oXCJSZW5kZXJpbmcgZGlhZ3JhbTogXCIgKyBlbGVtZW50LmlkKTtcbiAgICAvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9cbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByb2Nlc3NlZFwiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1wcm9jZXNzZWRcIiwgXCJ0cnVlXCIpO1xuICAgIGNvbnN0IGlkMiA9IGBtZXJtYWlkLSR7aWRHZW5lcmF0b3IubmV4dCgpfWA7XG4gICAgdHh0ID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgdHh0ID0gZGVkZW50KHV0aWxzLmVudGl0eURlY29kZSh0eHQpKS50cmltKCkucmVwbGFjZSgvPGJyXFxzKlxcLz8+L2dpLCBcIjxici8+XCIpO1xuICAgIGNvbnN0IGluaXQyID0gdXRpbHMuZGV0ZWN0SW5pdCh0eHQpO1xuICAgIGlmIChpbml0Mikge1xuICAgICAgbG9nJDEuZGVidWcoXCJEZXRlY3RlZCBlYXJseSByZWluaXQ6IFwiLCBpbml0Mik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHN2ZywgYmluZEZ1bmN0aW9ucyB9ID0gYXdhaXQgcmVuZGVyKGlkMiwgdHh0LCBlbGVtZW50KTtcbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gc3ZnO1xuICAgICAgaWYgKHBvc3RSZW5kZXJDYWxsYmFjaykge1xuICAgICAgICBhd2FpdCBwb3N0UmVuZGVyQ2FsbGJhY2soaWQyKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kRnVuY3Rpb25zKSB7XG4gICAgICAgIGJpbmRGdW5jdGlvbnMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBlcnJvcnMsIG1lcm1haWQucGFyc2VFcnJvcik7XG4gICAgfVxuICB9XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IGVycm9yc1swXTtcbiAgfVxufTtcbmNvbnN0IGluaXRpYWxpemUgPSBmdW5jdGlvbihjb25maWcyKSB7XG4gIG1lcm1haWRBUEkuaW5pdGlhbGl6ZShjb25maWcyKTtcbn07XG5jb25zdCBpbml0ID0gYXN5bmMgZnVuY3Rpb24oY29uZmlnMiwgbm9kZXMsIGNhbGxiYWNrKSB7XG4gIGxvZyQxLndhcm4oXCJtZXJtYWlkLmluaXQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBydW4gaW5zdGVhZC5cIik7XG4gIGlmIChjb25maWcyKSB7XG4gICAgaW5pdGlhbGl6ZShjb25maWcyKTtcbiAgfVxuICBjb25zdCBydW5PcHRpb25zID0geyBwb3N0UmVuZGVyQ2FsbGJhY2s6IGNhbGxiYWNrLCBxdWVyeVNlbGVjdG9yOiBcIi5tZXJtYWlkXCIgfTtcbiAgaWYgKHR5cGVvZiBub2RlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJ1bk9wdGlvbnMucXVlcnlTZWxlY3RvciA9IG5vZGVzO1xuICB9IGVsc2UgaWYgKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubm9kZXMgPSBbbm9kZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBydW5PcHRpb25zLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICB9XG4gIGF3YWl0IHJ1bihydW5PcHRpb25zKTtcbn07XG5jb25zdCByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgPSBhc3luYyAoZGlhZ3JhbXMyLCB7XG4gIGxhenlMb2FkID0gdHJ1ZVxufSA9IHt9KSA9PiB7XG4gIHJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zKC4uLmRpYWdyYW1zMik7XG4gIGlmIChsYXp5TG9hZCA9PT0gZmFsc2UpIHtcbiAgICBhd2FpdCBsb2FkUmVnaXN0ZXJlZERpYWdyYW1zKCk7XG4gIH1cbn07XG5jb25zdCBjb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7XG4gIGlmIChtZXJtYWlkLnN0YXJ0T25Mb2FkKSB7XG4gICAgY29uc3QgeyBzdGFydE9uTG9hZCB9ID0gbWVybWFpZEFQSS5nZXRDb25maWcoKTtcbiAgICBpZiAoc3RhcnRPbkxvYWQpIHtcbiAgICAgIG1lcm1haWQucnVuKCkuY2F0Y2goKGVycikgPT4gbG9nJDEuZXJyb3IoXCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplXCIsIGVycikpO1xuICAgIH1cbiAgfVxufTtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLyohXG4gICAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvblxuICAgKi9cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGNvbnRlbnRMb2FkZWQsIGZhbHNlKTtcbn1cbmNvbnN0IHNldFBhcnNlRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24ocGFyc2VFcnJvckhhbmRsZXIpIHtcbiAgbWVybWFpZC5wYXJzZUVycm9yID0gcGFyc2VFcnJvckhhbmRsZXI7XG59O1xuY29uc3QgZXhlY3V0aW9uUXVldWUgPSBbXTtcbmxldCBleGVjdXRpb25RdWV1ZVJ1bm5pbmcgPSBmYWxzZTtcbmNvbnN0IGV4ZWN1dGVRdWV1ZSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGV4ZWN1dGlvblF1ZXVlUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuICBleGVjdXRpb25RdWV1ZVJ1bm5pbmcgPSB0cnVlO1xuICB3aGlsZSAoZXhlY3V0aW9uUXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGYgPSBleGVjdXRpb25RdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChmKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZyQxLmVycm9yKFwiRXJyb3IgZXhlY3V0aW5nIHF1ZXVlXCIsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBleGVjdXRpb25RdWV1ZVJ1bm5pbmcgPSBmYWxzZTtcbn07XG5jb25zdCBwYXJzZSA9IGFzeW5jICh0ZXh0LCBwYXJzZU9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwZXJmb3JtQ2FsbCA9ICgpID0+IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgbWVybWFpZEFQSS5wYXJzZSh0ZXh0LCBwYXJzZU9wdGlvbnMpLnRoZW4oXG4gICAgICAgIChyKSA9PiB7XG4gICAgICAgICAgcmVzKHIpO1xuICAgICAgICAgIHJlc29sdmUocik7XG4gICAgICAgIH0sXG4gICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGxvZyQxLmVycm9yKFwiRXJyb3IgcGFyc2luZ1wiLCBlKTtcbiAgICAgICAgICAoX2EgPSBtZXJtYWlkLnBhcnNlRXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKG1lcm1haWQsIGUpO1xuICAgICAgICAgIHJlaihlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgZXhlY3V0aW9uUXVldWUucHVzaChwZXJmb3JtQ2FsbCk7XG4gICAgZXhlY3V0ZVF1ZXVlKCkuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG59O1xuY29uc3QgcmVuZGVyID0gKGlkMiwgdGV4dCwgY29udGFpbmVyKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcGVyZm9ybUNhbGwgPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIG1lcm1haWRBUEkucmVuZGVyKGlkMiwgdGV4dCwgY29udGFpbmVyKS50aGVuKFxuICAgICAgICAocikgPT4ge1xuICAgICAgICAgIHJlcyhyKTtcbiAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICB9LFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICBsb2ckMS5lcnJvcihcIkVycm9yIHBhcnNpbmdcIiwgZSk7XG4gICAgICAgICAgKF9hID0gbWVybWFpZC5wYXJzZUVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChtZXJtYWlkLCBlKTtcbiAgICAgICAgICByZWooZSk7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICAgIGV4ZWN1dGlvblF1ZXVlLnB1c2gocGVyZm9ybUNhbGwpO1xuICAgIGV4ZWN1dGVRdWV1ZSgpLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xufTtcbmNvbnN0IG1lcm1haWQgPSB7XG4gIHN0YXJ0T25Mb2FkOiB0cnVlLFxuICBtZXJtYWlkQVBJLFxuICBwYXJzZSxcbiAgcmVuZGVyLFxuICBpbml0LFxuICBydW4sXG4gIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyxcbiAgaW5pdGlhbGl6ZSxcbiAgcGFyc2VFcnJvcjogdm9pZCAwLFxuICBjb250ZW50TG9hZGVkLFxuICBzZXRQYXJzZUVycm9ySGFuZGxlcixcbiAgZGV0ZWN0VHlwZVxufTtcbmV4cG9ydCB7XG4gIHNldHVwR3JhcGhWaWV3Ym94IGFzIEEsXG4gIHBhcnNlRm9udFNpemUgYXMgQixcbiAgZ2V0VGhlbWVWYXJpYWJsZXMkMiBhcyBDLFxuICBkZWZhdWx0Q29uZmlnJDEgYXMgRCxcbiAgYWRkRnVuY3Rpb24gYXMgRSxcbiAgZ2VuZXJhdGVJZCBhcyBGLFxuICBkZWZhdWx0Q29uZmlnIGFzIEcsXG4gIGRlY29kZUVudGl0aWVzIGFzIEgsXG4gIGNvbW1vbkRiJDEgYXMgSSxcbiAgcGFyc2VEaXJlY3RpdmUkMSBhcyBKLFxuICBtZXJtYWlkIGFzIEssXG4gIFpFUk9fV0lEVEhfU1BBQ0UgYXMgWixcbiAgZ2V0QWNjRGVzY3JpcHRpb24gYXMgYSxcbiAgc2V0QWNjRGVzY3JpcHRpb24gYXMgYixcbiAgZ2V0Q29uZmlnJDEgYXMgYyxcbiAgc2FuaXRpemVUZXh0JDIgYXMgZCxcbiAgY29tbW9uJDEgYXMgZSxcbiAgYXNzaWduV2l0aERlcHRoJDEgYXMgZixcbiAgZ2V0QWNjVGl0bGUgYXMgZyxcbiAgY2FsY3VsYXRlVGV4dFdpZHRoIGFzIGgsXG4gIGNvbmZpZ3VyZVN2Z1NpemUgYXMgaSxcbiAgY2FsY3VsYXRlVGV4dEhlaWdodCBhcyBqLFxuICBnZXRTdHlsZXNGcm9tQXJyYXkgYXMgayxcbiAgbG9nJDEgYXMgbCxcbiAgbWVybWFpZEFQSSBhcyBtLFxuICBldmFsdWF0ZSBhcyBuLFxuICBpbnRlcnBvbGF0ZVRvQ3VydmUgYXMgbyxcbiAgc2V0dXBHcmFwaFZpZXdib3gkMSBhcyBwLFxuICBzZXRDb25maWcgYXMgcSxcbiAgc2V0RGlhZ3JhbVRpdGxlIGFzIHIsXG4gIHNldEFjY1RpdGxlIGFzIHMsXG4gIGdldERpYWdyYW1UaXRsZSBhcyB0LFxuICB1dGlscyBhcyB1LFxuICBjbGVhciBhcyB2LFxuICB3cmFwTGFiZWwgYXMgdyxcbiAgcGFyc2VHZW5lcmljVHlwZXMgYXMgeCxcbiAgcmFuZG9tIGFzIHksXG4gIGdldENvbmZpZyBhcyB6XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/mindmap-definition-4fc2557c.js": /*!*************************************************************************!*\ !*** ../../../node_modules/mermaid/dist/mindmap-definition-4fc2557c.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./createText-3df630b5.js */ \"../../../node_modules/mermaid/dist/createText-3df630b5.js\");\n/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cytoscape/dist/cytoscape.umd.js */ \"../../../node_modules/cytoscape/dist/cytoscape.umd.js\");\n/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! cytoscape-cose-bilkent */ \"../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/is_dark.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/lighten.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/darken.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mindMap\": 4, \"spaceLines\": 5, \"SPACELINE\": 6, \"NL\": 7, \"MINDMAP\": 8, \"document\": 9, \"stop\": 10, \"EOF\": 11, \"statement\": 12, \"SPACELIST\": 13, \"node\": 14, \"ICON\": 15, \"CLASS\": 16, \"nodeWithId\": 17, \"nodeWithoutId\": 18, \"NODE_DSTART\": 19, \"NODE_DESCR\": 20, \"NODE_DEND\": 21, \"NODE_ID\": 22, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"SPACELINE\", 7: \"NL\", 8: \"MINDMAP\", 11: \"EOF\", 13: \"SPACELIST\", 15: \"ICON\", 16: \"CLASS\", 19: \"NODE_DSTART\", 20: \"NODE_DESCR\", 21: \"NODE_DEND\", 22: \"NODE_ID\" },\n productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 6:\n case 7:\n return yy;\n case 8:\n yy.getLogger().trace(\"Stop NL \");\n break;\n case 9:\n yy.getLogger().trace(\"Stop EOF \");\n break;\n case 11:\n yy.getLogger().trace(\"Stop NL2 \");\n break;\n case 12:\n yy.getLogger().trace(\"Stop EOF2 \");\n break;\n case 15:\n yy.getLogger().info(\"Node: \", $$[$0].id);\n yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type);\n break;\n case 16:\n yy.getLogger().trace(\"Icon: \", $$[$0]);\n yy.decorateNode({ icon: $$[$0] });\n break;\n case 17:\n case 21:\n yy.decorateNode({ class: $$[$0] });\n break;\n case 18:\n yy.getLogger().trace(\"SPACELIST\");\n break;\n case 19:\n yy.getLogger().trace(\"Node: \", $$[$0].id);\n yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type);\n break;\n case 20:\n yy.decorateNode({ icon: $$[$0] });\n break;\n case 25:\n yy.getLogger().trace(\"node found ..\", $$[$0 - 2]);\n this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };\n break;\n case 26:\n this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT };\n break;\n case 27:\n yy.getLogger().trace(\"node found ..\", $$[$0 - 3]);\n this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) };\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])],\n defaultActions: { 2: [2, 1], 6: [2, 2] },\n parseError: function parseError2(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError2(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n yy.getLogger().trace(\"Found comment\", yy_.yytext);\n return 6;\n case 1:\n return 8;\n case 2:\n this.begin(\"CLASS\");\n break;\n case 3:\n this.popState();\n return 16;\n case 4:\n this.popState();\n break;\n case 5:\n yy.getLogger().trace(\"Begin icon\");\n this.begin(\"ICON\");\n break;\n case 6:\n yy.getLogger().trace(\"SPACELINE\");\n return 6;\n case 7:\n return 7;\n case 8:\n return 15;\n case 9:\n yy.getLogger().trace(\"end icon\");\n this.popState();\n break;\n case 10:\n yy.getLogger().trace(\"Exploding node\");\n this.begin(\"NODE\");\n return 19;\n case 11:\n yy.getLogger().trace(\"Cloud\");\n this.begin(\"NODE\");\n return 19;\n case 12:\n yy.getLogger().trace(\"Explosion Bang\");\n this.begin(\"NODE\");\n return 19;\n case 13:\n yy.getLogger().trace(\"Cloud Bang\");\n this.begin(\"NODE\");\n return 19;\n case 14:\n this.begin(\"NODE\");\n return 19;\n case 15:\n this.begin(\"NODE\");\n return 19;\n case 16:\n this.begin(\"NODE\");\n return 19;\n case 17:\n this.begin(\"NODE\");\n return 19;\n case 18:\n return 13;\n case 19:\n return 22;\n case 20:\n return 11;\n case 21:\n this.begin(\"NSTR2\");\n break;\n case 22:\n return \"NODE_DESCR\";\n case 23:\n this.popState();\n break;\n case 24:\n yy.getLogger().trace(\"Starting NSTR\");\n this.begin(\"NSTR\");\n break;\n case 25:\n yy.getLogger().trace(\"description:\", yy_.yytext);\n return \"NODE_DESCR\";\n case 26:\n this.popState();\n break;\n case 27:\n this.popState();\n yy.getLogger().trace(\"node end ))\");\n return \"NODE_DEND\";\n case 28:\n this.popState();\n yy.getLogger().trace(\"node end )\");\n return \"NODE_DEND\";\n case 29:\n this.popState();\n yy.getLogger().trace(\"node end ...\", yy_.yytext);\n return \"NODE_DEND\";\n case 30:\n this.popState();\n yy.getLogger().trace(\"node end ((\");\n return \"NODE_DEND\";\n case 31:\n this.popState();\n yy.getLogger().trace(\"node end (-\");\n return \"NODE_DEND\";\n case 32:\n this.popState();\n yy.getLogger().trace(\"node end (-\");\n return \"NODE_DEND\";\n case 33:\n this.popState();\n yy.getLogger().trace(\"node end ((\");\n return \"NODE_DEND\";\n case 34:\n this.popState();\n yy.getLogger().trace(\"node end ((\");\n return \"NODE_DEND\";\n case 35:\n yy.getLogger().trace(\"Long description:\", yy_.yytext);\n return 20;\n case 36:\n yy.getLogger().trace(\"Long description:\", yy_.yytext);\n return 20;\n }\n },\n rules: [/^(?:\\s*%%.*)/i, /^(?:mindmap\\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\\n)/i, /^(?:::icon\\()/i, /^(?:[\\s]+[\\n])/i, /^(?:[\\n]+)/i, /^(?:[^\\)]+)/i, /^(?:\\))/i, /^(?:-\\))/i, /^(?:\\(-)/i, /^(?:\\)\\))/i, /^(?:\\))/i, /^(?:\\(\\()/i, /^(?:\\{\\{)/i, /^(?:\\()/i, /^(?:\\[)/i, /^(?:[\\s]+)/i, /^(?:[^\\(\\[\\n\\-\\)\\{\\}]+)/i, /^(?:$)/i, /^(?:[\"][`])/i, /^(?:[^`\"]+)/i, /^(?:[`][\"])/i, /^(?:[\"])/i, /^(?:[^\"]+)/i, /^(?:[\"])/i, /^(?:[\\)]\\))/i, /^(?:[\\)])/i, /^(?:[\\]])/i, /^(?:\\}\\})/i, /^(?:\\(-)/i, /^(?:-\\))/i, /^(?:\\(\\()/i, /^(?:\\()/i, /^(?:[^\\)\\]\\(\\}]+)/i, /^(?:.+(?!\\(\\())/i],\n conditions: { \"CLASS\": { \"rules\": [3, 4], \"inclusive\": false }, \"ICON\": { \"rules\": [8, 9], \"inclusive\": false }, \"NSTR2\": { \"rules\": [22, 23], \"inclusive\": false }, \"NSTR\": { \"rules\": [25, 26], \"inclusive\": false }, \"NODE\": { \"rules\": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst mindmapParser = parser;\nconst sanitizeText = (text) => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.d)(text, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)());\nlet nodes = [];\nlet cnt = 0;\nlet elements = {};\nconst clear = () => {\n nodes = [];\n cnt = 0;\n elements = {};\n};\nconst getParent = function(level) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n if (nodes[i].level < level) {\n return nodes[i];\n }\n }\n return null;\n};\nconst getMindmap = () => {\n return nodes.length > 0 ? nodes[0] : null;\n};\nconst addNode = (level, id, descr, type) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"addNode\", level, id, descr, type);\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)();\n const node = {\n id: cnt++,\n nodeId: sanitizeText(id),\n level,\n descr: sanitizeText(descr),\n type,\n children: [],\n width: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().mindmap.maxNodeWidth\n };\n switch (node.type) {\n case nodeType.ROUNDED_RECT:\n node.padding = 2 * conf.mindmap.padding;\n break;\n case nodeType.RECT:\n node.padding = 2 * conf.mindmap.padding;\n break;\n case nodeType.HEXAGON:\n node.padding = 2 * conf.mindmap.padding;\n break;\n default:\n node.padding = conf.mindmap.padding;\n }\n const parent = getParent(level);\n if (parent) {\n parent.children.push(node);\n nodes.push(node);\n } else {\n if (nodes.length === 0) {\n nodes.push(node);\n } else {\n let error = new Error(\n 'There can be only one root. No parent could be found for (\"' + node.descr + '\")'\n );\n error.hash = {\n text: \"branch \" + name,\n token: \"branch \" + name,\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: ['\"checkout ' + name + '\"']\n };\n throw error;\n }\n }\n};\nconst nodeType = {\n DEFAULT: 0,\n NO_BORDER: 0,\n ROUNDED_RECT: 1,\n RECT: 2,\n CIRCLE: 3,\n CLOUD: 4,\n BANG: 5,\n HEXAGON: 6\n};\nconst getType = (startStr, endStr) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"In get type\", startStr, endStr);\n switch (startStr) {\n case \"[\":\n return nodeType.RECT;\n case \"(\":\n return endStr === \")\" ? nodeType.ROUNDED_RECT : nodeType.CLOUD;\n case \"((\":\n return nodeType.CIRCLE;\n case \")\":\n return nodeType.CLOUD;\n case \"))\":\n return nodeType.BANG;\n case \"{{\":\n return nodeType.HEXAGON;\n default:\n return nodeType.DEFAULT;\n }\n};\nconst setElementForId = (id, element) => {\n elements[id] = element;\n};\nconst decorateNode = (decoration) => {\n const node = nodes[nodes.length - 1];\n if (decoration && decoration.icon) {\n node.icon = sanitizeText(decoration.icon);\n }\n if (decoration && decoration.class) {\n node.class = sanitizeText(decoration.class);\n }\n};\nconst type2Str = (type) => {\n switch (type) {\n case nodeType.DEFAULT:\n return \"no-border\";\n case nodeType.RECT:\n return \"rect\";\n case nodeType.ROUNDED_RECT:\n return \"rounded-rect\";\n case nodeType.CIRCLE:\n return \"circle\";\n case nodeType.CLOUD:\n return \"cloud\";\n case nodeType.BANG:\n return \"bang\";\n case nodeType.HEXAGON:\n return \"hexgon\";\n default:\n return \"no-border\";\n }\n};\nlet parseError;\nconst setErrorHandler = (handler) => {\n parseError = handler;\n};\nconst getLogger = () => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l;\nconst getNodeById = (id) => nodes[id];\nconst getElementById = (id) => elements[id];\nconst mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n addNode,\n clear,\n decorateNode,\n getElementById,\n getLogger,\n getMindmap,\n getNodeById,\n getType,\n nodeType,\n get parseError() {\n return parseError;\n },\n sanitizeText,\n setElementForId,\n setErrorHandler,\n type2Str\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst MAX_SECTIONS = 12;\nconst defaultBkg = function(elem, node, section) {\n const rd = 5;\n elem.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\n \"d\",\n `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z`\n );\n elem.append(\"line\").attr(\"class\", \"node-line-\" + section).attr(\"x1\", 0).attr(\"y1\", node.height).attr(\"x2\", node.width).attr(\"y2\", node.height);\n};\nconst rectBkg = function(elem, node) {\n elem.append(\"rect\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\"height\", node.height).attr(\"width\", node.width);\n};\nconst cloudBkg = function(elem, node) {\n const w = node.width;\n const h = node.height;\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n elem.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\n \"d\",\n `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0}\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n\n H0 V0 Z`\n );\n};\nconst bangBkg = function(elem, node) {\n const w = node.width;\n const h = node.height;\n const r = 0.15 * w;\n elem.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\n \"d\",\n `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1}\n a${r},${r} 1 0,0 ${w * 0.25},${0}\n a${r},${r} 1 0,0 ${w * 0.25},${0}\n a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1}\n\n a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34}\n a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15}\n a${r},${r} 1 0,0 ${-1 * w * 0.25},${0}\n a${r},${r} 1 0,0 ${-1 * w * 0.25},${0}\n a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34}\n a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33}\n\n H0 V0 Z`\n );\n};\nconst circleBkg = function(elem, node) {\n elem.append(\"circle\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\"r\", node.width / 2);\n};\nfunction insertPolygonShape(parent, w, h, points, node) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"transform\", \"translate(\" + (node.width - w) / 2 + \", \" + h + \")\");\n}\nconst hexagonBkg = function(elem, node) {\n const h = node.height;\n const f = 4;\n const m = h / f;\n const w = node.width - node.padding + 2 * m;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n insertPolygonShape(elem, w, h, points, node);\n};\nconst roundedRectBkg = function(elem, node) {\n elem.append(\"rect\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + type2Str(node.type)).attr(\"height\", node.height).attr(\"rx\", node.padding).attr(\"ry\", node.padding).attr(\"width\", node.width);\n};\nconst drawNode = function(elem, node, fullSection, conf) {\n const htmlLabels = conf.htmlLabels;\n const section = fullSection % (MAX_SECTIONS - 1);\n const nodeElem = elem.append(\"g\");\n node.section = section;\n let sectionClass = \"section-\" + section;\n if (section < 0) {\n sectionClass += \" section-root\";\n }\n nodeElem.attr(\"class\", (node.class ? node.class + \" \" : \"\") + \"mindmap-node \" + sectionClass);\n const bkgElem = nodeElem.append(\"g\");\n const textElem = nodeElem.append(\"g\");\n const description = node.descr.replace(/()/g, \"\\n\");\n (0,_createText_3df630b5_js__WEBPACK_IMPORTED_MODULE_8__.c)(textElem, description, {\n useHtmlLabels: htmlLabels,\n width: node.width,\n classes: \"mindmap-node-label\"\n });\n if (!htmlLabels) {\n textElem.attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\");\n }\n const bbox = textElem.node().getBBox();\n const fontSize = conf.fontSize.replace ? conf.fontSize.replace(\"px\", \"\") : conf.fontSize;\n node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n node.width = bbox.width + 2 * node.padding;\n if (node.icon) {\n if (node.type === nodeType.CIRCLE) {\n node.height += 50;\n node.width += 50;\n const icon = nodeElem.append(\"foreignObject\").attr(\"height\", \"50px\").attr(\"width\", node.width).attr(\"style\", \"text-align: center;\");\n icon.append(\"div\").attr(\"class\", \"icon-container\").append(\"i\").attr(\"class\", \"node-icon-\" + section + \" \" + node.icon);\n textElem.attr(\n \"transform\",\n \"translate(\" + node.width / 2 + \", \" + (node.height / 2 - 1.5 * node.padding) + \")\"\n );\n } else {\n node.width += 50;\n const orgHeight = node.height;\n node.height = Math.max(orgHeight, 60);\n const heightDiff = Math.abs(node.height - orgHeight);\n const icon = nodeElem.append(\"foreignObject\").attr(\"width\", \"60px\").attr(\"height\", node.height).attr(\"style\", \"text-align: center;margin-top:\" + heightDiff / 2 + \"px;\");\n icon.append(\"div\").attr(\"class\", \"icon-container\").append(\"i\").attr(\"class\", \"node-icon-\" + section + \" \" + node.icon);\n textElem.attr(\n \"transform\",\n \"translate(\" + (25 + node.width / 2) + \", \" + (heightDiff / 2 + node.padding / 2) + \")\"\n );\n }\n } else {\n if (!htmlLabels) {\n const dx = node.width / 2;\n const dy = node.padding / 2;\n textElem.attr(\"transform\", \"translate(\" + dx + \", \" + dy + \")\");\n } else {\n const dx = (node.width - bbox.width) / 2;\n const dy = (node.height - bbox.height) / 2;\n textElem.attr(\"transform\", \"translate(\" + dx + \", \" + dy + \")\");\n }\n }\n switch (node.type) {\n case nodeType.DEFAULT:\n defaultBkg(bkgElem, node, section);\n break;\n case nodeType.ROUNDED_RECT:\n roundedRectBkg(bkgElem, node);\n break;\n case nodeType.RECT:\n rectBkg(bkgElem, node);\n break;\n case nodeType.CIRCLE:\n bkgElem.attr(\"transform\", \"translate(\" + node.width / 2 + \", \" + +node.height / 2 + \")\");\n circleBkg(bkgElem, node);\n break;\n case nodeType.CLOUD:\n cloudBkg(bkgElem, node);\n break;\n case nodeType.BANG:\n bangBkg(bkgElem, node);\n break;\n case nodeType.HEXAGON:\n hexagonBkg(bkgElem, node);\n break;\n }\n setElementForId(node.id, nodeElem);\n return node.height;\n};\nconst drawEdge = function drawEdge2(edgesElem, mindmap, parent, depth, fullSection) {\n const section = fullSection % (MAX_SECTIONS - 1);\n const sx = parent.x + parent.width / 2;\n const sy = parent.y + parent.height / 2;\n const ex = mindmap.x + mindmap.width / 2;\n const ey = mindmap.y + mindmap.height / 2;\n const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2;\n const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2;\n const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx;\n const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy;\n edgesElem.append(\"path\").attr(\n \"d\",\n parent.direction === \"TB\" || parent.direction === \"BT\" ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}`\n ).attr(\"class\", \"edge section-edge-\" + section + \" edge-depth-\" + depth);\n};\nconst positionNode = function(node) {\n const nodeElem = getElementById(node.id);\n const x = node.x || 0;\n const y = node.y || 0;\n nodeElem.attr(\"transform\", \"translate(\" + x + \",\" + y + \")\");\n};\nconst svgDraw = { drawNode, positionNode, drawEdge };\ncytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__);\nfunction drawNodes(svg, mindmap, section, conf) {\n svgDraw.drawNode(svg, mindmap, section, conf);\n if (mindmap.children) {\n mindmap.children.forEach((child, index) => {\n drawNodes(svg, child, section < 0 ? index : section, conf);\n });\n }\n}\nfunction drawEdges(edgesEl, cy) {\n cy.edges().map((edge, id) => {\n const data = edge.data();\n if (edge[0]._private.bodyBounds) {\n const bounds = edge[0]._private.rscratch;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.trace(\"Edge: \", id, data);\n edgesEl.insert(\"path\").attr(\n \"d\",\n `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} `\n ).attr(\"class\", \"edge section-edge-\" + data.section + \" edge-depth-\" + data.depth);\n }\n });\n}\nfunction addNodes(mindmap, cy, conf, level) {\n cy.add({\n group: \"nodes\",\n data: {\n id: mindmap.id,\n labelText: mindmap.descr,\n height: mindmap.height,\n width: mindmap.width,\n level,\n nodeId: mindmap.id,\n padding: mindmap.padding,\n type: mindmap.type\n },\n position: {\n x: mindmap.x,\n y: mindmap.y\n }\n });\n if (mindmap.children) {\n mindmap.children.forEach((child) => {\n addNodes(child, cy, conf, level + 1);\n cy.add({\n group: \"edges\",\n data: {\n id: `${mindmap.id}_${child.id}`,\n source: mindmap.id,\n target: child.id,\n depth: level,\n section: child.section\n }\n });\n });\n }\n}\nfunction layoutMindmap(node, conf) {\n return new Promise((resolve) => {\n const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__({\n container: document.getElementById(\"cy\"),\n // container to render in\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"bezier\"\n }\n }\n ]\n });\n renderEl.remove();\n addNodes(node, cy, conf, 0);\n cy.nodes().forEach(function(n) {\n n.layoutDimensions = () => {\n const data = n.data();\n return { w: data.width, h: data.height };\n };\n });\n cy.layout({\n name: \"cose-bilkent\",\n quality: \"proof\",\n // headless: true,\n styleEnabled: false,\n animate: false\n }).run();\n cy.ready((e) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Ready\", e);\n resolve(cy);\n });\n });\n}\nfunction positionNodes(cy) {\n cy.nodes().map((node, id) => {\n const data = node.data();\n data.x = node.position().x;\n data.y = node.position().y;\n svgDraw.positionNode(data);\n const el = getElementById(data.nodeId);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Id:\", id, \"Position: (\", node.position().x, \", \", node.position().y, \")\", data);\n el.attr(\n \"transform\",\n `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})`\n );\n el.attr(\"attr\", `apa-${id})`);\n });\n}\nconst draw = async (text, id, version, diagObj) => {\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)();\n conf.htmlLabels = false;\n diagObj.db.clear();\n diagObj.parser.parse(text);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Rendering mindmap diagram\\n\" + text, diagObj.parser);\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(\"#\" + id);\n svg.append(\"g\");\n const mm = diagObj.db.getMindmap();\n const edgesElem = svg.append(\"g\");\n edgesElem.attr(\"class\", \"mindmap-edges\");\n const nodesElem = svg.append(\"g\");\n nodesElem.attr(\"class\", \"mindmap-nodes\");\n drawNodes(nodesElem, mm, -1, conf);\n const cy = await layoutMindmap(mm, conf);\n drawEdges(edgesElem, cy);\n positionNodes(cy);\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.p)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth);\n};\nconst mindmapRenderer = {\n draw\n};\nconst genSections = (options) => {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n options[\"lineColor\" + i] = options[\"lineColor\" + i] || options[\"cScaleInv\" + i];\n if ((0,khroma__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(options[\"lineColor\" + i])) {\n options[\"lineColor\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(options[\"lineColor\" + i], 20);\n } else {\n options[\"lineColor\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(options[\"lineColor\" + i], 20);\n }\n }\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n const sw = \"\" + (17 - 3 * i);\n sections += `\n .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path {\n fill: ${options[\"cScale\" + i]};\n }\n .section-${i - 1} text {\n fill: ${options[\"cScaleLabel\" + i]};\n }\n .node-icon-${i - 1} {\n font-size: 40px;\n color: ${options[\"cScaleLabel\" + i]};\n }\n .section-edge-${i - 1}{\n stroke: ${options[\"cScale\" + i]};\n }\n .edge-depth-${i - 1}{\n stroke-width: ${sw};\n }\n .section-${i - 1} line {\n stroke: ${options[\"cScaleInv\" + i]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `;\n }\n return sections;\n};\nconst getStyles = (options) => `\n .edge {\n stroke-width: 3;\n }\n ${genSections(options)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${options.git0};\n }\n .section-root text {\n fill: ${options.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`;\nconst mindmapStyles = getStyles;\nconst diagram = {\n db: mindmapDb,\n renderer: mindmapRenderer,\n parser: mindmapParser,\n styles: mindmapStyles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9taW5kbWFwLWRlZmluaXRpb24tNGZjMjU1N2MuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUE4RztBQUNsRjtBQUMrQjtBQUNIO0FBQ1A7QUFDQTtBQUM5QjtBQUNKO0FBQ2tCO0FBQ2Q7QUFDVztBQUNkO0FBQ2M7QUFDSTtBQUNsQztBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQixLQUFLO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVO0FBQ1YsZ0JBQWdCLGdWQUFnVjtBQUNoVyxrQkFBa0IsNktBQTZLO0FBQy9MO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGNBQWM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGVBQWU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGNBQWM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYyxxQ0FBcUMsSUFBSSxRQUFRLElBQUksV0FBVyxJQUFJLG9DQUFvQyxJQUFJLHVHQUF1RyxvQkFBb0IsV0FBVyxvQ0FBb0MsZ0dBQWdHLElBQUksNEZBQTRGLElBQUksaUNBQWlDLG9CQUFvQixvRUFBb0UsMkhBQTJILGFBQWEsS0FBSyxhQUFhLElBQUksaUNBQWlDLElBQUksZ0dBQWdHLG9CQUFvQixpQkFBaUIseUdBQXlHLGFBQWEsSUFBSSxhQUFhLG9CQUFvQixpQkFBaUIsdUNBQXVDLGFBQWE7QUFDem9DLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QVEsY0FBYyxHQUFHO0FBQzVDLFNBQVMsR0FBRyxHQUFHLElBQUksUUFBUSxhQUFhLEdBQUc7QUFDM0MsU0FBUyxHQUFHLEdBQUcsSUFBSSxRQUFRLGNBQWMsR0FBRzs7QUFFNUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxRQUFRLGFBQWEsR0FBRztBQUMzQyxTQUFTLEdBQUcsR0FBRyxJQUFJLFFBQVEsUUFBUSxHQUFHOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEVBQUUsR0FBRyxHQUFHLFFBQVEsU0FBUyxHQUFHO0FBQ3pDLFNBQVMsRUFBRSxHQUFHLEdBQUcsUUFBUSxTQUFTLEdBQUc7QUFDckMsU0FBUyxFQUFFLEdBQUcsR0FBRyxRQUFRLFNBQVMsR0FBRztBQUNyQyxTQUFTLEVBQUUsR0FBRyxHQUFHLFFBQVEsU0FBUyxHQUFHOztBQUVyQyxTQUFTLEVBQUUsR0FBRyxHQUFHLFFBQVEsU0FBUyxHQUFHO0FBQ3JDLFNBQVMsUUFBUSxHQUFHLFNBQVMsUUFBUSxFQUFFLEdBQUc7QUFDMUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxRQUFRLGNBQWMsR0FBRzs7QUFFMUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxRQUFRLGNBQWMsR0FBRztBQUMxQyxTQUFTLEVBQUUsR0FBRyxHQUFHLFFBQVEsY0FBYyxHQUFHO0FBQzFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsUUFBUSxjQUFjLEdBQUc7QUFDMUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxRQUFRLGNBQWMsR0FBRzs7QUFFMUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxRQUFRLGFBQWEsR0FBRztBQUN6QyxTQUFTLFFBQVEsR0FBRyxTQUFTLFFBQVEsRUFBRSxHQUFHO0FBQzFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsUUFBUSxRQUFRLEdBQUc7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QzNCO0FBQ0EsNkNBQTZDLDBDQUFNLG1EQUFtRCwwQ0FBTTtBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx1REFBaUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLCtCQUErQjtBQUNqRDtBQUNBLFFBQVEsa0RBQU07QUFDZCxpQ0FBaUMsbURBQU87QUFDeEMsTUFBTTtBQUNOLGlDQUFpQyxtREFBTTtBQUN2QztBQUNBO0FBQ0Esa0JBQWtCLCtCQUErQjtBQUNqRDtBQUNBO0FBQ0EsZUFBZSxPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixPQUFPLG1CQUFtQixPQUFPLG9CQUFvQixPQUFPO0FBQzNILGNBQWM7QUFDZDtBQUNBLGVBQWUsT0FBTztBQUN0QixhQUFhO0FBQ2I7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxvQkFBb0I7QUFDcEIsZ0JBQWdCO0FBQ2hCO0FBQ0Esa0JBQWtCO0FBQ2xCLHNCQUFzQjtBQUN0QjtBQUNBLGVBQWUsT0FBTztBQUN0QixnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L21pbmRtYXAtZGVmaW5pdGlvbi00ZmMyNTU3Yy5qcz85NzEwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGQgYXMgc2FuaXRpemVUZXh0JDEsIGMgYXMgZ2V0Q29uZmlnLCBsIGFzIGxvZywgcCBhcyBzZXR1cEdyYXBoVmlld2JveCB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgYyBhcyBjcmVhdGVUZXh0IH0gZnJvbSBcIi4vY3JlYXRlVGV4dC0zZGY2MzBiNS5qc1wiO1xuaW1wb3J0IGN5dG9zY2FwZSBmcm9tIFwiY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLnVtZC5qc1wiO1xuaW1wb3J0IGNvc2VCaWxrZW50IGZyb20gXCJjeXRvc2NhcGUtY29zZS1iaWxrZW50XCI7XG5pbXBvcnQgeyBpc0RhcmssIGxpZ2h0ZW4sIGRhcmtlbiB9IGZyb20gXCJraHJvbWFcIjtcbmltcG9ydCBcInRzLWRlZGVudFwiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgXCJtZGFzdC11dGlsLWZyb20tbWFya2Rvd25cIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCA0XSwgJFYxID0gWzEsIDEzXSwgJFYyID0gWzEsIDEyXSwgJFYzID0gWzEsIDE1XSwgJFY0ID0gWzEsIDE2XSwgJFY1ID0gWzEsIDIwXSwgJFY2ID0gWzEsIDE5XSwgJFY3ID0gWzYsIDcsIDhdLCAkVjggPSBbMSwgMjZdLCAkVjkgPSBbMSwgMjRdLCAkVmEgPSBbMSwgMjVdLCAkVmIgPSBbNiwgNywgMTFdLCAkVmMgPSBbMSwgNiwgMTMsIDE1LCAxNiwgMTksIDIyXSwgJFZkID0gWzEsIDMzXSwgJFZlID0gWzEsIDM0XSwgJFZmID0gWzEsIDYsIDcsIDExLCAxMywgMTUsIDE2LCAxOSwgMjJdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwibWluZE1hcFwiOiA0LCBcInNwYWNlTGluZXNcIjogNSwgXCJTUEFDRUxJTkVcIjogNiwgXCJOTFwiOiA3LCBcIk1JTkRNQVBcIjogOCwgXCJkb2N1bWVudFwiOiA5LCBcInN0b3BcIjogMTAsIFwiRU9GXCI6IDExLCBcInN0YXRlbWVudFwiOiAxMiwgXCJTUEFDRUxJU1RcIjogMTMsIFwibm9kZVwiOiAxNCwgXCJJQ09OXCI6IDE1LCBcIkNMQVNTXCI6IDE2LCBcIm5vZGVXaXRoSWRcIjogMTcsIFwibm9kZVdpdGhvdXRJZFwiOiAxOCwgXCJOT0RFX0RTVEFSVFwiOiAxOSwgXCJOT0RFX0RFU0NSXCI6IDIwLCBcIk5PREVfREVORFwiOiAyMSwgXCJOT0RFX0lEXCI6IDIyLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNjogXCJTUEFDRUxJTkVcIiwgNzogXCJOTFwiLCA4OiBcIk1JTkRNQVBcIiwgMTE6IFwiRU9GXCIsIDEzOiBcIlNQQUNFTElTVFwiLCAxNTogXCJJQ09OXCIsIDE2OiBcIkNMQVNTXCIsIDE5OiBcIk5PREVfRFNUQVJUXCIsIDIwOiBcIk5PREVfREVTQ1JcIiwgMjE6IFwiTk9ERV9ERU5EXCIsIDIyOiBcIk5PREVfSURcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDJdLCBbNSwgMV0sIFs1LCAyXSwgWzUsIDJdLCBbNCwgMl0sIFs0LCAzXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzksIDNdLCBbOSwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxNCwgMV0sIFsxNCwgMV0sIFsxOCwgM10sIFsxNywgMV0sIFsxNywgNF1dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHl5O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIE5MIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU3RvcCBFT0YgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU3RvcCBOTDIgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU3RvcCBFT0YyIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5pbmZvKFwiTm9kZTogXCIsICQkWyQwXS5pZCk7XG4gICAgICAgICAgeXkuYWRkTm9kZSgkJFskMCAtIDFdLmxlbmd0aCwgJCRbJDBdLmlkLCAkJFskMF0uZGVzY3IsICQkWyQwXS50eXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkljb246IFwiLCAkJFskMF0pO1xuICAgICAgICAgIHl5LmRlY29yYXRlTm9kZSh7IGljb246ICQkWyQwXSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB5eS5kZWNvcmF0ZU5vZGUoeyBjbGFzczogJCRbJDBdIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU1BBQ0VMSVNUXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiTm9kZTogXCIsICQkWyQwXS5pZCk7XG4gICAgICAgICAgeXkuYWRkTm9kZSgwLCAkJFskMF0uaWQsICQkWyQwXS5kZXNjciwgJCRbJDBdLnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHl5LmRlY29yYXRlTm9kZSh7IGljb246ICQkWyQwXSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZm91bmQgLi5cIiwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDAgLSAxXSwgZGVzY3I6ICQkWyQwIC0gMV0sIHR5cGU6IHl5LmdldFR5cGUoJCRbJDAgLSAyXSwgJCRbJDBdKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgaWQ6ICQkWyQwXSwgZGVzY3I6ICQkWyQwXSwgdHlwZTogeXkubm9kZVR5cGUuREVGQVVMVCB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBmb3VuZCAuLlwiLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkOiAkJFskMCAtIDNdLCBkZXNjcjogJCRbJDAgLSAxXSwgdHlwZTogeXkuZ2V0VHlwZSgkJFskMCAtIDJdLCAkJFskMF0pIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogMywgNjogWzEsIDVdLCA4OiAkVjAgfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyA0OiA2LCA2OiBbMSwgN10sIDc6IFsxLCA4XSwgODogJFYwIH0sIHsgNjogJFYxLCA3OiBbMSwgMTBdLCA5OiA5LCAxMjogMTEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVjcsIFsyLCAzXSksIHsgMTogWzIsIDJdIH0sIG8oJFY3LCBbMiwgNF0pLCBvKCRWNywgWzIsIDVdKSwgeyAxOiBbMiwgNl0sIDY6ICRWMSwgMTI6IDIxLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFYxLCA5OiAyMiwgMTI6IDExLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAyMywgMTE6ICRWYSB9LCBvKCRWYiwgWzIsIDIyXSwgeyAxNzogMTcsIDE4OiAxOCwgMTQ6IDI3LCAxNTogWzEsIDI4XSwgMTY6IFsxLCAyOV0sIDE5OiAkVjUsIDIyOiAkVjYgfSksIG8oJFZiLCBbMiwgMThdKSwgbygkVmIsIFsyLCAxOV0pLCBvKCRWYiwgWzIsIDIwXSksIG8oJFZiLCBbMiwgMjFdKSwgbygkVmIsIFsyLCAyM10pLCBvKCRWYiwgWzIsIDI0XSksIG8oJFZiLCBbMiwgMjZdLCB7IDE5OiBbMSwgMzBdIH0pLCB7IDIwOiBbMSwgMzFdIH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAzMiwgMTE6ICRWYSB9LCB7IDE6IFsyLCA3XSwgNjogJFYxLCAxMjogMjEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVmMsIFsyLCAxNF0sIHsgNzogJFZkLCAxMTogJFZlIH0pLCBvKCRWZiwgWzIsIDhdKSwgbygkVmYsIFsyLCA5XSksIG8oJFZmLCBbMiwgMTBdKSwgbygkVmIsIFsyLCAxNV0pLCBvKCRWYiwgWzIsIDE2XSksIG8oJFZiLCBbMiwgMTddKSwgeyAyMDogWzEsIDM1XSB9LCB7IDIxOiBbMSwgMzZdIH0sIG8oJFZjLCBbMiwgMTNdLCB7IDc6ICRWZCwgMTE6ICRWZSB9KSwgbygkVmYsIFsyLCAxMV0pLCBvKCRWZiwgWzIsIDEyXSksIHsgMjE6IFsxLCAzN10gfSwgbygkVmIsIFsyLCAyNV0pLCBvKCRWYiwgWzIsIDI3XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDI6IFsyLCAxXSwgNjogWzIsIDJdIH0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcjIoc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgdmFyIHN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBsZXhlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yMihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiRm91bmQgY29tbWVudFwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJDTEFTU1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkJlZ2luIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiSUNPTlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU1BBQ0VMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiZW5kIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJFeHBsb2Rpbmcgbm9kZVwiKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkNsb3VkXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiRXhwbG9zaW9uIEJhbmdcIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJDbG91ZCBCYW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDExO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTlNUUjJcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERVNDUlwiO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdGFydGluZyBOU1RSXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5TVFJcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJkZXNjcmlwdGlvbjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFU0NSXCI7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICkpXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kIC4uLlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKC1cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJub2RlIGVuZCAoLVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJMb25nIGRlc2NyaXB0aW9uOlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJMb25nIGRlc2NyaXB0aW9uOlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiBbL14oPzpcXHMqJSUuKikvaSwgL14oPzptaW5kbWFwXFxiKS9pLCAvXig/Ojo6OikvaSwgL14oPzouKykvaSwgL14oPzpcXG4pL2ksIC9eKD86OjppY29uXFwoKS9pLCAvXig/OltcXHNdK1tcXG5dKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpbXlxcKV0rKS9pLCAvXig/OlxcKSkvaSwgL14oPzotXFwpKS9pLCAvXig/OlxcKC0pL2ksIC9eKD86XFwpXFwpKS9pLCAvXig/OlxcKSkvaSwgL14oPzpcXChcXCgpL2ksIC9eKD86XFx7XFx7KS9pLCAvXig/OlxcKCkvaSwgL14oPzpcXFspL2ksIC9eKD86W1xcc10rKS9pLCAvXig/OlteXFwoXFxbXFxuXFwtXFwpXFx7XFx9XSspL2ksIC9eKD86JCkvaSwgL14oPzpbXCJdW2BdKS9pLCAvXig/OlteYFwiXSspL2ksIC9eKD86W2BdW1wiXSkvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKykvaSwgL14oPzpbXCJdKS9pLCAvXig/OltcXCldXFwpKS9pLCAvXig/OltcXCldKS9pLCAvXig/OltcXF1dKS9pLCAvXig/OlxcfVxcfSkvaSwgL14oPzpcXCgtKS9pLCAvXig/Oi1cXCkpL2ksIC9eKD86XFwoXFwoKS9pLCAvXig/OlxcKCkvaSwgL14oPzpbXlxcKVxcXVxcKFxcfV0rKS9pLCAvXig/Oi4rKD8hXFwoXFwoKSkvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiQ0xBU1NcIjogeyBcInJ1bGVzXCI6IFszLCA0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJQ09OXCI6IHsgXCJydWxlc1wiOiBbOCwgOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTlNUUjJcIjogeyBcInJ1bGVzXCI6IFsyMiwgMjNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIk5TVFJcIjogeyBcInJ1bGVzXCI6IFsyNSwgMjZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIk5PREVcIjogeyBcInJ1bGVzXCI6IFsyMSwgMjQsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMiwgNSwgNiwgNywgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG5jb25zdCBtaW5kbWFwUGFyc2VyID0gcGFyc2VyO1xuY29uc3Qgc2FuaXRpemVUZXh0ID0gKHRleHQpID0+IHNhbml0aXplVGV4dCQxKHRleHQsIGdldENvbmZpZygpKTtcbmxldCBub2RlcyA9IFtdO1xubGV0IGNudCA9IDA7XG5sZXQgZWxlbWVudHMgPSB7fTtcbmNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICBub2RlcyA9IFtdO1xuICBjbnQgPSAwO1xuICBlbGVtZW50cyA9IHt9O1xufTtcbmNvbnN0IGdldFBhcmVudCA9IGZ1bmN0aW9uKGxldmVsKSB7XG4gIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChub2Rlc1tpXS5sZXZlbCA8IGxldmVsKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IGdldE1pbmRtYXAgPSAoKSA9PiB7XG4gIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gbm9kZXNbMF0gOiBudWxsO1xufTtcbmNvbnN0IGFkZE5vZGUgPSAobGV2ZWwsIGlkLCBkZXNjciwgdHlwZSkgPT4ge1xuICBsb2cuaW5mbyhcImFkZE5vZGVcIiwgbGV2ZWwsIGlkLCBkZXNjciwgdHlwZSk7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgY29uc3Qgbm9kZSA9IHtcbiAgICBpZDogY250KyssXG4gICAgbm9kZUlkOiBzYW5pdGl6ZVRleHQoaWQpLFxuICAgIGxldmVsLFxuICAgIGRlc2NyOiBzYW5pdGl6ZVRleHQoZGVzY3IpLFxuICAgIHR5cGUsXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIHdpZHRoOiBnZXRDb25maWcoKS5taW5kbWFwLm1heE5vZGVXaWR0aFxuICB9O1xuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2Ugbm9kZVR5cGUuUk9VTkRFRF9SRUNUOlxuICAgICAgbm9kZS5wYWRkaW5nID0gMiAqIGNvbmYubWluZG1hcC5wYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBub2RlVHlwZS5SRUNUOlxuICAgICAgbm9kZS5wYWRkaW5nID0gMiAqIGNvbmYubWluZG1hcC5wYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBub2RlVHlwZS5IRVhBR09OOlxuICAgICAgbm9kZS5wYWRkaW5nID0gMiAqIGNvbmYubWluZG1hcC5wYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5vZGUucGFkZGluZyA9IGNvbmYubWluZG1hcC5wYWRkaW5nO1xuICB9XG4gIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChsZXZlbCk7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yIChcIicgKyBub2RlLmRlc2NyICsgJ1wiKSdcbiAgICAgICk7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBcImJyYW5jaCBcIiArIG5hbWUsXG4gICAgICAgIHRva2VuOiBcImJyYW5jaCBcIiArIG5hbWUsXG4gICAgICAgIGxpbmU6IFwiMVwiLFxuICAgICAgICBsb2M6IHsgZmlyc3RfbGluZTogMSwgbGFzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDEsIGxhc3RfY29sdW1uOiAxIH0sXG4gICAgICAgIGV4cGVjdGVkOiBbJ1wiY2hlY2tvdXQgJyArIG5hbWUgKyAnXCInXVxuICAgICAgfTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IG5vZGVUeXBlID0ge1xuICBERUZBVUxUOiAwLFxuICBOT19CT1JERVI6IDAsXG4gIFJPVU5ERURfUkVDVDogMSxcbiAgUkVDVDogMixcbiAgQ0lSQ0xFOiAzLFxuICBDTE9VRDogNCxcbiAgQkFORzogNSxcbiAgSEVYQUdPTjogNlxufTtcbmNvbnN0IGdldFR5cGUgPSAoc3RhcnRTdHIsIGVuZFN0cikgPT4ge1xuICBsb2cuZGVidWcoXCJJbiBnZXQgdHlwZVwiLCBzdGFydFN0ciwgZW5kU3RyKTtcbiAgc3dpdGNoIChzdGFydFN0cikge1xuICAgIGNhc2UgXCJbXCI6XG4gICAgICByZXR1cm4gbm9kZVR5cGUuUkVDVDtcbiAgICBjYXNlIFwiKFwiOlxuICAgICAgcmV0dXJuIGVuZFN0ciA9PT0gXCIpXCIgPyBub2RlVHlwZS5ST1VOREVEX1JFQ1QgOiBub2RlVHlwZS5DTE9VRDtcbiAgICBjYXNlIFwiKChcIjpcbiAgICAgIHJldHVybiBub2RlVHlwZS5DSVJDTEU7XG4gICAgY2FzZSBcIilcIjpcbiAgICAgIHJldHVybiBub2RlVHlwZS5DTE9VRDtcbiAgICBjYXNlIFwiKSlcIjpcbiAgICAgIHJldHVybiBub2RlVHlwZS5CQU5HO1xuICAgIGNhc2UgXCJ7e1wiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkhFWEFHT047XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBub2RlVHlwZS5ERUZBVUxUO1xuICB9XG59O1xuY29uc3Qgc2V0RWxlbWVudEZvcklkID0gKGlkLCBlbGVtZW50KSA9PiB7XG4gIGVsZW1lbnRzW2lkXSA9IGVsZW1lbnQ7XG59O1xuY29uc3QgZGVjb3JhdGVOb2RlID0gKGRlY29yYXRpb24pID0+IHtcbiAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdO1xuICBpZiAoZGVjb3JhdGlvbiAmJiBkZWNvcmF0aW9uLmljb24pIHtcbiAgICBub2RlLmljb24gPSBzYW5pdGl6ZVRleHQoZGVjb3JhdGlvbi5pY29uKTtcbiAgfVxuICBpZiAoZGVjb3JhdGlvbiAmJiBkZWNvcmF0aW9uLmNsYXNzKSB7XG4gICAgbm9kZS5jbGFzcyA9IHNhbml0aXplVGV4dChkZWNvcmF0aW9uLmNsYXNzKTtcbiAgfVxufTtcbmNvbnN0IHR5cGUyU3RyID0gKHR5cGUpID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBub2RlVHlwZS5ERUZBVUxUOlxuICAgICAgcmV0dXJuIFwibm8tYm9yZGVyXCI7XG4gICAgY2FzZSBub2RlVHlwZS5SRUNUOlxuICAgICAgcmV0dXJuIFwicmVjdFwiO1xuICAgIGNhc2Ugbm9kZVR5cGUuUk9VTkRFRF9SRUNUOlxuICAgICAgcmV0dXJuIFwicm91bmRlZC1yZWN0XCI7XG4gICAgY2FzZSBub2RlVHlwZS5DSVJDTEU6XG4gICAgICByZXR1cm4gXCJjaXJjbGVcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkNMT1VEOlxuICAgICAgcmV0dXJuIFwiY2xvdWRcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkJBTkc6XG4gICAgICByZXR1cm4gXCJiYW5nXCI7XG4gICAgY2FzZSBub2RlVHlwZS5IRVhBR09OOlxuICAgICAgcmV0dXJuIFwiaGV4Z29uXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIm5vLWJvcmRlclwiO1xuICB9XG59O1xubGV0IHBhcnNlRXJyb3I7XG5jb25zdCBzZXRFcnJvckhhbmRsZXIgPSAoaGFuZGxlcikgPT4ge1xuICBwYXJzZUVycm9yID0gaGFuZGxlcjtcbn07XG5jb25zdCBnZXRMb2dnZXIgPSAoKSA9PiBsb2c7XG5jb25zdCBnZXROb2RlQnlJZCA9IChpZCkgPT4gbm9kZXNbaWRdO1xuY29uc3QgZ2V0RWxlbWVudEJ5SWQgPSAoaWQpID0+IGVsZW1lbnRzW2lkXTtcbmNvbnN0IG1pbmRtYXBEYiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGFkZE5vZGUsXG4gIGNsZWFyLFxuICBkZWNvcmF0ZU5vZGUsXG4gIGdldEVsZW1lbnRCeUlkLFxuICBnZXRMb2dnZXIsXG4gIGdldE1pbmRtYXAsXG4gIGdldE5vZGVCeUlkLFxuICBnZXRUeXBlLFxuICBub2RlVHlwZSxcbiAgZ2V0IHBhcnNlRXJyb3IoKSB7XG4gICAgcmV0dXJuIHBhcnNlRXJyb3I7XG4gIH0sXG4gIHNhbml0aXplVGV4dCxcbiAgc2V0RWxlbWVudEZvcklkLFxuICBzZXRFcnJvckhhbmRsZXIsXG4gIHR5cGUyU3RyXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpO1xuY29uc3QgTUFYX1NFQ1RJT05TID0gMTI7XG5jb25zdCBkZWZhdWx0QmtnID0gZnVuY3Rpb24oZWxlbSwgbm9kZSwgc2VjdGlvbikge1xuICBjb25zdCByZCA9IDU7XG4gIGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsgbm9kZS5pZCkuYXR0cihcImNsYXNzXCIsIFwibm9kZS1ia2cgbm9kZS1cIiArIHR5cGUyU3RyKG5vZGUudHlwZSkpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgYE0wICR7bm9kZS5oZWlnaHQgLSByZH0gdiR7LW5vZGUuaGVpZ2h0ICsgMiAqIHJkfSBxMCwtNSA1LC01IGgke25vZGUud2lkdGggLSAyICogcmR9IHE1LDAgNSw1IHYke25vZGUuaGVpZ2h0IC0gcmR9IEgwIFpgXG4gICk7XG4gIGVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWxpbmUtXCIgKyBzZWN0aW9uKS5hdHRyKFwieDFcIiwgMCkuYXR0cihcInkxXCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwieDJcIiwgbm9kZS53aWR0aCkuYXR0cihcInkyXCIsIG5vZGUuaGVpZ2h0KTtcbn07XG5jb25zdCByZWN0QmtnID0gZnVuY3Rpb24oZWxlbSwgbm9kZSkge1xuICBlbGVtLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyB0eXBlMlN0cihub2RlLnR5cGUpKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCk7XG59O1xuY29uc3QgY2xvdWRCa2cgPSBmdW5jdGlvbihlbGVtLCBub2RlKSB7XG4gIGNvbnN0IHcgPSBub2RlLndpZHRoO1xuICBjb25zdCBoID0gbm9kZS5oZWlnaHQ7XG4gIGNvbnN0IHIxID0gMC4xNSAqIHc7XG4gIGNvbnN0IHIyID0gMC4yNSAqIHc7XG4gIGNvbnN0IHIzID0gMC4zNSAqIHc7XG4gIGNvbnN0IHI0ID0gMC4yICogdztcbiAgZWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZyBub2RlLVwiICsgdHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgMCBhJHtyMX0sJHtyMX0gMCAwLDEgJHt3ICogMC4yNX0sJHstMSAqIHcgKiAwLjF9XG4gICAgICBhJHtyM30sJHtyM30gMSAwLDEgJHt3ICogMC40fSwkey0xICogdyAqIDAuMX1cbiAgICAgIGEke3IyfSwke3IyfSAxIDAsMSAke3cgKiAwLjM1fSwkezEgKiB3ICogMC4yfVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHt3ICogMC4xNX0sJHsxICogaCAqIDAuMzV9XG4gICAgICBhJHtyNH0sJHtyNH0gMSAwLDEgJHstMSAqIHcgKiAwLjE1fSwkezEgKiBoICogMC42NX1cblxuICAgICAgYSR7cjJ9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHt3ICogMC4xNX1cbiAgICAgIGEke3IzfSwke3IzfSAxIDAsMSAkey0xICogdyAqIDAuNX0sJHswfVxuICAgICAgYSR7cjF9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHstMSAqIHcgKiAwLjE1fVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHstMSAqIHcgKiAwLjF9LCR7LTEgKiBoICogMC4zNX1cbiAgICAgIGEke3I0fSwke3I0fSAxIDAsMSAke3cgKiAwLjF9LCR7LTEgKiBoICogMC42NX1cblxuICAgIEgwIFYwIFpgXG4gICk7XG59O1xuY29uc3QgYmFuZ0JrZyA9IGZ1bmN0aW9uKGVsZW0sIG5vZGUpIHtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGg7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodDtcbiAgY29uc3QgciA9IDAuMTUgKiB3O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyB0eXBlMlN0cihub2RlLnR5cGUpKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIGBNMCAwIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHstMSAqIGggKiAwLjF9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMjV9LCR7MH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAke3cgKiAwLjI1fSwkezEgKiBoICogMC4xfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7MSAqIGggKiAwLjM0fVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHtoICogMC4xNX1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHstMSAqIHcgKiAwLjI1fSwkezB9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMjV9LCR7LTEgKiBoICogMC4xNX1cblxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMX0sJHstMSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7LTEgKiBoICogMC4zNH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4xfSwkey0xICogaCAqIDAuMzN9XG5cbiAgICBIMCBWMCBaYFxuICApO1xufTtcbmNvbnN0IGNpcmNsZUJrZyA9IGZ1bmN0aW9uKGVsZW0sIG5vZGUpIHtcbiAgZWxlbS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyB0eXBlMlN0cihub2RlLnR5cGUpKS5hdHRyKFwiclwiLCBub2RlLndpZHRoIC8gMik7XG59O1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzLCBub2RlKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKG5vZGUud2lkdGggLSB3KSAvIDIgKyBcIiwgXCIgKyBoICsgXCIpXCIpO1xufVxuY29uc3QgaGV4YWdvbkJrZyA9IGZ1bmN0aW9uKGVsZW0sIG5vZGUpIHtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0O1xuICBjb25zdCBmID0gNDtcbiAgY29uc3QgbSA9IGggLyBmO1xuICBjb25zdCB3ID0gbm9kZS53aWR0aCAtIG5vZGUucGFkZGluZyArIDIgKiBtO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBtLCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggLyAyIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogLWggfSxcbiAgICB7IHg6IG0sIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCAvIDIgfVxuICBdO1xuICBpbnNlcnRQb2x5Z29uU2hhcGUoZWxlbSwgdywgaCwgcG9pbnRzLCBub2RlKTtcbn07XG5jb25zdCByb3VuZGVkUmVjdEJrZyA9IGZ1bmN0aW9uKGVsZW0sIG5vZGUpIHtcbiAgZWxlbS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZyBub2RlLVwiICsgdHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCkuYXR0cihcInJ4XCIsIG5vZGUucGFkZGluZykuYXR0cihcInJ5XCIsIG5vZGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpO1xufTtcbmNvbnN0IGRyYXdOb2RlID0gZnVuY3Rpb24oZWxlbSwgbm9kZSwgZnVsbFNlY3Rpb24sIGNvbmYpIHtcbiAgY29uc3QgaHRtbExhYmVscyA9IGNvbmYuaHRtbExhYmVscztcbiAgY29uc3Qgc2VjdGlvbiA9IGZ1bGxTZWN0aW9uICUgKE1BWF9TRUNUSU9OUyAtIDEpO1xuICBjb25zdCBub2RlRWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgbm9kZS5zZWN0aW9uID0gc2VjdGlvbjtcbiAgbGV0IHNlY3Rpb25DbGFzcyA9IFwic2VjdGlvbi1cIiArIHNlY3Rpb247XG4gIGlmIChzZWN0aW9uIDwgMCkge1xuICAgIHNlY3Rpb25DbGFzcyArPSBcIiBzZWN0aW9uLXJvb3RcIjtcbiAgfVxuICBub2RlRWxlbS5hdHRyKFwiY2xhc3NcIiwgKG5vZGUuY2xhc3MgPyBub2RlLmNsYXNzICsgXCIgXCIgOiBcIlwiKSArIFwibWluZG1hcC1ub2RlIFwiICsgc2VjdGlvbkNsYXNzKTtcbiAgY29uc3QgYmtnRWxlbSA9IG5vZGVFbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHRleHRFbGVtID0gbm9kZUVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBub2RlLmRlc2NyLnJlcGxhY2UoLyg8YnJcXC8qPikvZywgXCJcXG5cIik7XG4gIGNyZWF0ZVRleHQodGV4dEVsZW0sIGRlc2NyaXB0aW9uLCB7XG4gICAgdXNlSHRtbExhYmVsczogaHRtbExhYmVscyxcbiAgICB3aWR0aDogbm9kZS53aWR0aCxcbiAgICBjbGFzc2VzOiBcIm1pbmRtYXAtbm9kZS1sYWJlbFwiXG4gIH0pO1xuICBpZiAoIWh0bWxMYWJlbHMpIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpO1xuICB9XG4gIGNvbnN0IGJib3ggPSB0ZXh0RWxlbS5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCBmb250U2l6ZSA9IGNvbmYuZm9udFNpemUucmVwbGFjZSA/IGNvbmYuZm9udFNpemUucmVwbGFjZShcInB4XCIsIFwiXCIpIDogY29uZi5mb250U2l6ZTtcbiAgbm9kZS5oZWlnaHQgPSBiYm94LmhlaWdodCArIGZvbnRTaXplICogMS4xICogMC41ICsgbm9kZS5wYWRkaW5nO1xuICBub2RlLndpZHRoID0gYmJveC53aWR0aCArIDIgKiBub2RlLnBhZGRpbmc7XG4gIGlmIChub2RlLmljb24pIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBub2RlVHlwZS5DSVJDTEUpIHtcbiAgICAgIG5vZGUuaGVpZ2h0ICs9IDUwO1xuICAgICAgbm9kZS53aWR0aCArPSA1MDtcbiAgICAgIGNvbnN0IGljb24gPSBub2RlRWxlbS5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJoZWlnaHRcIiwgXCI1MHB4XCIpLmF0dHIoXCJ3aWR0aFwiLCBub2RlLndpZHRoKS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO1xuICAgICAgaWNvbi5hcHBlbmQoXCJkaXZcIikuYXR0cihcImNsYXNzXCIsIFwiaWNvbi1jb250YWluZXJcIikuYXBwZW5kKFwiaVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWljb24tXCIgKyBzZWN0aW9uICsgXCIgXCIgKyBub2RlLmljb24pO1xuICAgICAgdGV4dEVsZW0uYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLndpZHRoIC8gMiArIFwiLCBcIiArIChub2RlLmhlaWdodCAvIDIgLSAxLjUgKiBub2RlLnBhZGRpbmcpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUud2lkdGggKz0gNTA7XG4gICAgICBjb25zdCBvcmdIZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5tYXgob3JnSGVpZ2h0LCA2MCk7XG4gICAgICBjb25zdCBoZWlnaHREaWZmID0gTWF0aC5hYnMobm9kZS5oZWlnaHQgLSBvcmdIZWlnaHQpO1xuICAgICAgY29uc3QgaWNvbiA9IG5vZGVFbGVtLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcIndpZHRoXCIsIFwiNjBweFwiKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDpcIiArIGhlaWdodERpZmYgLyAyICsgXCJweDtcIik7XG4gICAgICBpY29uLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiY2xhc3NcIiwgXCJpY29uLWNvbnRhaW5lclwiKS5hcHBlbmQoXCJpXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtaWNvbi1cIiArIHNlY3Rpb24gKyBcIiBcIiArIG5vZGUuaWNvbik7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArICgyNSArIG5vZGUud2lkdGggLyAyKSArIFwiLCBcIiArIChoZWlnaHREaWZmIC8gMiArIG5vZGUucGFkZGluZyAvIDIpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghaHRtbExhYmVscykge1xuICAgICAgY29uc3QgZHggPSBub2RlLndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGR5ID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwiLCBcIiArIGR5ICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkeCA9IChub2RlLndpZHRoIC0gYmJveC53aWR0aCkgLyAyO1xuICAgICAgY29uc3QgZHkgPSAobm9kZS5oZWlnaHQgLSBiYm94LmhlaWdodCkgLyAyO1xuICAgICAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCIsIFwiICsgZHkgKyBcIilcIik7XG4gICAgfVxuICB9XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBub2RlVHlwZS5ERUZBVUxUOlxuICAgICAgZGVmYXVsdEJrZyhia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugbm9kZVR5cGUuUk9VTkRFRF9SRUNUOlxuICAgICAgcm91bmRlZFJlY3RCa2coYmtnRWxlbSwgbm9kZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5vZGVUeXBlLlJFQ1Q6XG4gICAgICByZWN0QmtnKGJrZ0VsZW0sIG5vZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBub2RlVHlwZS5DSVJDTEU6XG4gICAgICBia2dFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLndpZHRoIC8gMiArIFwiLCBcIiArICtub2RlLmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgICBjaXJjbGVCa2coYmtnRWxlbSwgbm9kZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5vZGVUeXBlLkNMT1VEOlxuICAgICAgY2xvdWRCa2coYmtnRWxlbSwgbm9kZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5vZGVUeXBlLkJBTkc6XG4gICAgICBiYW5nQmtnKGJrZ0VsZW0sIG5vZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBub2RlVHlwZS5IRVhBR09OOlxuICAgICAgaGV4YWdvbkJrZyhia2dFbGVtLCBub2RlKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHNldEVsZW1lbnRGb3JJZChub2RlLmlkLCBub2RlRWxlbSk7XG4gIHJldHVybiBub2RlLmhlaWdodDtcbn07XG5jb25zdCBkcmF3RWRnZSA9IGZ1bmN0aW9uIGRyYXdFZGdlMihlZGdlc0VsZW0sIG1pbmRtYXAsIHBhcmVudCwgZGVwdGgsIGZ1bGxTZWN0aW9uKSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBmdWxsU2VjdGlvbiAlIChNQVhfU0VDVElPTlMgLSAxKTtcbiAgY29uc3Qgc3ggPSBwYXJlbnQueCArIHBhcmVudC53aWR0aCAvIDI7XG4gIGNvbnN0IHN5ID0gcGFyZW50LnkgKyBwYXJlbnQuaGVpZ2h0IC8gMjtcbiAgY29uc3QgZXggPSBtaW5kbWFwLnggKyBtaW5kbWFwLndpZHRoIC8gMjtcbiAgY29uc3QgZXkgPSBtaW5kbWFwLnkgKyBtaW5kbWFwLmhlaWdodCAvIDI7XG4gIGNvbnN0IG14ID0gZXggPiBzeCA/IHN4ICsgTWF0aC5hYnMoc3ggLSBleCkgLyAyIDogc3ggLSBNYXRoLmFicyhzeCAtIGV4KSAvIDI7XG4gIGNvbnN0IG15ID0gZXkgPiBzeSA/IHN5ICsgTWF0aC5hYnMoc3kgLSBleSkgLyAyIDogc3kgLSBNYXRoLmFicyhzeSAtIGV5KSAvIDI7XG4gIGNvbnN0IHF4ID0gZXggPiBzeCA/IE1hdGguYWJzKHN4IC0gbXgpIC8gMiArIHN4IDogLU1hdGguYWJzKHN4IC0gbXgpIC8gMiArIHN4O1xuICBjb25zdCBxeSA9IGV5ID4gc3kgPyBNYXRoLmFicyhzeSAtIG15KSAvIDIgKyBzeSA6IC1NYXRoLmFicyhzeSAtIG15KSAvIDIgKyBzeTtcbiAgZWRnZXNFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICBcImRcIixcbiAgICBwYXJlbnQuZGlyZWN0aW9uID09PSBcIlRCXCIgfHwgcGFyZW50LmRpcmVjdGlvbiA9PT0gXCJCVFwiID8gYE0ke3N4fSwke3N5fSBRJHtzeH0sJHtxeX0gJHtteH0sJHtteX0gVCR7ZXh9LCR7ZXl9YCA6IGBNJHtzeH0sJHtzeX0gUSR7cXh9LCR7c3l9ICR7bXh9LCR7bXl9IFQke2V4fSwke2V5fWBcbiAgKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlIHNlY3Rpb24tZWRnZS1cIiArIHNlY3Rpb24gKyBcIiBlZGdlLWRlcHRoLVwiICsgZGVwdGgpO1xufTtcbmNvbnN0IHBvc2l0aW9uTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgY29uc3Qgbm9kZUVsZW0gPSBnZXRFbGVtZW50QnlJZChub2RlLmlkKTtcbiAgY29uc3QgeCA9IG5vZGUueCB8fCAwO1xuICBjb25zdCB5ID0gbm9kZS55IHx8IDA7XG4gIG5vZGVFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsXCIgKyB5ICsgXCIpXCIpO1xufTtcbmNvbnN0IHN2Z0RyYXcgPSB7IGRyYXdOb2RlLCBwb3NpdGlvbk5vZGUsIGRyYXdFZGdlIH07XG5jeXRvc2NhcGUudXNlKGNvc2VCaWxrZW50KTtcbmZ1bmN0aW9uIGRyYXdOb2RlcyhzdmcsIG1pbmRtYXAsIHNlY3Rpb24sIGNvbmYpIHtcbiAgc3ZnRHJhdy5kcmF3Tm9kZShzdmcsIG1pbmRtYXAsIHNlY3Rpb24sIGNvbmYpO1xuICBpZiAobWluZG1hcC5jaGlsZHJlbikge1xuICAgIG1pbmRtYXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBkcmF3Tm9kZXMoc3ZnLCBjaGlsZCwgc2VjdGlvbiA8IDAgPyBpbmRleCA6IHNlY3Rpb24sIGNvbmYpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBkcmF3RWRnZXMoZWRnZXNFbCwgY3kpIHtcbiAgY3kuZWRnZXMoKS5tYXAoKGVkZ2UsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGVkZ2UuZGF0YSgpO1xuICAgIGlmIChlZGdlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICBsb2cudHJhY2UoXCJFZGdlOiBcIiwgaWQsIGRhdGEpO1xuICAgICAgZWRnZXNFbC5pbnNlcnQoXCJwYXRoXCIpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBgTSAke2JvdW5kcy5zdGFydFh9LCR7Ym91bmRzLnN0YXJ0WX0gTCAke2JvdW5kcy5taWRYfSwke2JvdW5kcy5taWRZfSBMJHtib3VuZHMuZW5kWH0sJHtib3VuZHMuZW5kWX0gYFxuICAgICAgKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlIHNlY3Rpb24tZWRnZS1cIiArIGRhdGEuc2VjdGlvbiArIFwiIGVkZ2UtZGVwdGgtXCIgKyBkYXRhLmRlcHRoKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gYWRkTm9kZXMobWluZG1hcCwgY3ksIGNvbmYsIGxldmVsKSB7XG4gIGN5LmFkZCh7XG4gICAgZ3JvdXA6IFwibm9kZXNcIixcbiAgICBkYXRhOiB7XG4gICAgICBpZDogbWluZG1hcC5pZCxcbiAgICAgIGxhYmVsVGV4dDogbWluZG1hcC5kZXNjcixcbiAgICAgIGhlaWdodDogbWluZG1hcC5oZWlnaHQsXG4gICAgICB3aWR0aDogbWluZG1hcC53aWR0aCxcbiAgICAgIGxldmVsLFxuICAgICAgbm9kZUlkOiBtaW5kbWFwLmlkLFxuICAgICAgcGFkZGluZzogbWluZG1hcC5wYWRkaW5nLFxuICAgICAgdHlwZTogbWluZG1hcC50eXBlXG4gICAgfSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgeDogbWluZG1hcC54LFxuICAgICAgeTogbWluZG1hcC55XG4gICAgfVxuICB9KTtcbiAgaWYgKG1pbmRtYXAuY2hpbGRyZW4pIHtcbiAgICBtaW5kbWFwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBhZGROb2RlcyhjaGlsZCwgY3ksIGNvbmYsIGxldmVsICsgMSk7XG4gICAgICBjeS5hZGQoe1xuICAgICAgICBncm91cDogXCJlZGdlc1wiLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaWQ6IGAke21pbmRtYXAuaWR9XyR7Y2hpbGQuaWR9YCxcbiAgICAgICAgICBzb3VyY2U6IG1pbmRtYXAuaWQsXG4gICAgICAgICAgdGFyZ2V0OiBjaGlsZC5pZCxcbiAgICAgICAgICBkZXB0aDogbGV2ZWwsXG4gICAgICAgICAgc2VjdGlvbjogY2hpbGQuc2VjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbGF5b3V0TWluZG1hcChub2RlLCBjb25mKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHJlbmRlckVsID0gc2VsZWN0KFwiYm9keVwiKS5hcHBlbmQoXCJkaXZcIikuYXR0cihcImlkXCIsIFwiY3lcIikuYXR0cihcInN0eWxlXCIsIFwiZGlzcGxheTpub25lXCIpO1xuICAgIGNvbnN0IGN5ID0gY3l0b3NjYXBlKHtcbiAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjeVwiKSxcbiAgICAgIC8vIGNvbnRhaW5lciB0byByZW5kZXIgaW5cbiAgICAgIHN0eWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RvcjogXCJlZGdlXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwiY3VydmUtc3R5bGVcIjogXCJiZXppZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJlbmRlckVsLnJlbW92ZSgpO1xuICAgIGFkZE5vZGVzKG5vZGUsIGN5LCBjb25mLCAwKTtcbiAgICBjeS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgbi5sYXlvdXREaW1lbnNpb25zID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gbi5kYXRhKCk7XG4gICAgICAgIHJldHVybiB7IHc6IGRhdGEud2lkdGgsIGg6IGRhdGEuaGVpZ2h0IH07XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGN5LmxheW91dCh7XG4gICAgICBuYW1lOiBcImNvc2UtYmlsa2VudFwiLFxuICAgICAgcXVhbGl0eTogXCJwcm9vZlwiLFxuICAgICAgLy8gaGVhZGxlc3M6IHRydWUsXG4gICAgICBzdHlsZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgYW5pbWF0ZTogZmFsc2VcbiAgICB9KS5ydW4oKTtcbiAgICBjeS5yZWFkeSgoZSkgPT4ge1xuICAgICAgbG9nLmluZm8oXCJSZWFkeVwiLCBlKTtcbiAgICAgIHJlc29sdmUoY3kpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHBvc2l0aW9uTm9kZXMoY3kpIHtcbiAgY3kubm9kZXMoKS5tYXAoKG5vZGUsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IG5vZGUuZGF0YSgpO1xuICAgIGRhdGEueCA9IG5vZGUucG9zaXRpb24oKS54O1xuICAgIGRhdGEueSA9IG5vZGUucG9zaXRpb24oKS55O1xuICAgIHN2Z0RyYXcucG9zaXRpb25Ob2RlKGRhdGEpO1xuICAgIGNvbnN0IGVsID0gZ2V0RWxlbWVudEJ5SWQoZGF0YS5ub2RlSWQpO1xuICAgIGxvZy5pbmZvKFwiSWQ6XCIsIGlkLCBcIlBvc2l0aW9uOiAoXCIsIG5vZGUucG9zaXRpb24oKS54LCBcIiwgXCIsIG5vZGUucG9zaXRpb24oKS55LCBcIilcIiwgZGF0YSk7XG4gICAgZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBgdHJhbnNsYXRlKCR7bm9kZS5wb3NpdGlvbigpLnggLSBkYXRhLndpZHRoIC8gMn0sICR7bm9kZS5wb3NpdGlvbigpLnkgLSBkYXRhLmhlaWdodCAvIDJ9KWBcbiAgICApO1xuICAgIGVsLmF0dHIoXCJhdHRyXCIsIGBhcGEtJHtpZH0pYCk7XG4gIH0pO1xufVxuY29uc3QgZHJhdyA9IGFzeW5jICh0ZXh0LCBpZCwgdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBjb25zdCBjb25mID0gZ2V0Q29uZmlnKCk7XG4gIGNvbmYuaHRtbExhYmVscyA9IGZhbHNlO1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIGRpYWdPYmoucGFyc2VyLnBhcnNlKHRleHQpO1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtXFxuXCIgKyB0ZXh0LCBkaWFnT2JqLnBhcnNlcik7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IG1tID0gZGlhZ09iai5kYi5nZXRNaW5kbWFwKCk7XG4gIGNvbnN0IGVkZ2VzRWxlbSA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBlZGdlc0VsZW0uYXR0cihcImNsYXNzXCIsIFwibWluZG1hcC1lZGdlc1wiKTtcbiAgY29uc3Qgbm9kZXNFbGVtID0gc3ZnLmFwcGVuZChcImdcIik7XG4gIG5vZGVzRWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJtaW5kbWFwLW5vZGVzXCIpO1xuICBkcmF3Tm9kZXMobm9kZXNFbGVtLCBtbSwgLTEsIGNvbmYpO1xuICBjb25zdCBjeSA9IGF3YWl0IGxheW91dE1pbmRtYXAobW0sIGNvbmYpO1xuICBkcmF3RWRnZXMoZWRnZXNFbGVtLCBjeSk7XG4gIHBvc2l0aW9uTm9kZXMoY3kpO1xuICBzZXR1cEdyYXBoVmlld2JveCh2b2lkIDAsIHN2ZywgY29uZi5taW5kbWFwLnBhZGRpbmcsIGNvbmYubWluZG1hcC51c2VNYXhXaWR0aCk7XG59O1xuY29uc3QgbWluZG1hcFJlbmRlcmVyID0ge1xuICBkcmF3XG59O1xuY29uc3QgZ2VuU2VjdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICBsZXQgc2VjdGlvbnMgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gfHwgb3B0aW9uc1tcImNTY2FsZUludlwiICsgaV07XG4gICAgaWYgKGlzRGFyayhvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSkpIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gbGlnaHRlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSA9IGRhcmtlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIGNvbnN0IHN3ID0gXCJcIiArICgxNyAtIDMgKiBpKTtcbiAgICBzZWN0aW9ucyArPSBgXG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gcmVjdCwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCwgLnNlY3Rpb24tJHtpIC0gMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2kgLSAxfSBwb2x5Z29uLCAuc2VjdGlvbi0ke2kgLSAxfSBwYXRoICB7XG4gICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gdGV4dCB7XG4gICAgIGZpbGw6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5ub2RlLWljb24tJHtpIC0gMX0ge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgY29sb3I6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLWVkZ2UtJHtpIC0gMX17XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZVwiICsgaV19O1xuICAgIH1cbiAgICAuZWRnZS1kZXB0aC0ke2kgLSAxfXtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtzd307XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IGxpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVJbnZcIiArIGldfSA7XG4gICAgICBzdHJva2Utd2lkdGg6IDM7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7XG4gICAgICBmaWxsOiBsaWdodGdyYXk7XG4gICAgfVxuICAgIC5kaXNhYmxlZCB0ZXh0IHtcbiAgICAgIGZpbGw6ICNlZmVmZWY7XG4gICAgfVxuICAgIGA7XG4gIH1cbiAgcmV0dXJuIHNlY3Rpb25zO1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgXG4gIC5lZGdlIHtcbiAgICBzdHJva2Utd2lkdGg6IDM7XG4gIH1cbiAgJHtnZW5TZWN0aW9ucyhvcHRpb25zKX1cbiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0MH07XG4gIH1cbiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0QnJhbmNoTGFiZWwwfTtcbiAgfVxuICAuaWNvbi1jb250YWluZXIge1xuICAgIGhlaWdodDoxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuZWRnZSB7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAubWluZG1hcC1ub2RlLWxhYmVsIHtcbiAgICBkeTogMWVtO1xuICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlO1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbmA7XG5jb25zdCBtaW5kbWFwU3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgZGI6IG1pbmRtYXBEYixcbiAgcmVuZGVyZXI6IG1pbmRtYXBSZW5kZXJlcixcbiAgcGFyc2VyOiBtaW5kbWFwUGFyc2VyLFxuICBzdHlsZXM6IG1pbmRtYXBTdHlsZXNcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/mindmap-definition-4fc2557c.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/pieDiagram-157505fe.js": /*!*****************************************************************!*\ !*** ../../../node_modules/mermaid/dist/pieDiagram-157505fe.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 4], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 9], $V5 = [1, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V6 = [2, 5], $V7 = [1, 6, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V8 = [26, 27, 28], $V9 = [2, 8], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 28], $Vh = [6, 26, 27, 28, 29];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"eol\": 4, \"directive\": 5, \"PIE\": 6, \"document\": 7, \"showData\": 8, \"line\": 9, \"statement\": 10, \"txt\": 11, \"value\": 12, \"title\": 13, \"title_value\": 14, \"acc_title\": 15, \"acc_title_value\": 16, \"acc_descr\": 17, \"acc_descr_value\": 18, \"acc_descr_multiline_value\": 19, \"section\": 20, \"openDirective\": 21, \"typeDirective\": 22, \"closeDirective\": 23, \":\": 24, \"argDirective\": 25, \"NEWLINE\": 26, \";\": 27, \"EOF\": 28, \"open_directive\": 29, \"type_directive\": 30, \"arg_directive\": 31, \"close_directive\": 32, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"PIE\", 8: \"showData\", 11: \"txt\", 12: \"value\", 13: \"title\", 14: \"title_value\", 15: \"acc_title\", 16: \"acc_title_value\", 17: \"acc_descr\", 18: \"acc_descr_value\", 19: \"acc_descr_multiline_value\", 20: \"section\", 24: \":\", 26: \"NEWLINE\", 27: \";\", 28: \"EOF\", 29: \"open_directive\", 30: \"type_directive\", 31: \"arg_directive\", 32: \"close_directive\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [3, 3], [7, 0], [7, 2], [9, 2], [10, 0], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [5, 3], [5, 5], [4, 1], [4, 1], [4, 1], [21, 1], [22, 1], [25, 1], [23, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.setShowData(true);\n break;\n case 7:\n this.$ = $$[$0 - 1];\n break;\n case 9:\n yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0]));\n break;\n case 10:\n this.$ = $$[$0].trim();\n yy.setDiagramTitle(this.$);\n break;\n case 11:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 12:\n case 13:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 14:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 21:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 22:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 23:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 24:\n yy.parseDirective(\"}%%\", \"close_directive\", \"pie\");\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, o($V5, $V6, { 7: 12, 8: [1, 13] }), o($V7, [2, 18]), o($V7, [2, 19]), o($V7, [2, 20]), { 22: 14, 30: [1, 15] }, { 30: [2, 21] }, { 1: [2, 1] }, { 1: [2, 2] }, o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 3], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($V5, $V6, { 7: 25 }), { 23: 26, 24: [1, 27], 32: $Vg }, o([24, 32], [2, 22]), o($V5, [2, 6]), { 4: 29, 26: $V1, 27: $V2, 28: $V3 }, { 12: [1, 30] }, { 14: [1, 31] }, { 16: [1, 32] }, { 18: [1, 33] }, o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 4], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($Vh, [2, 16]), { 25: 34, 31: [1, 35] }, o($Vh, [2, 24]), o($V5, [2, 7]), o($V8, [2, 9]), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 23: 36, 32: $Vg }, { 32: [2, 23] }, o($Vh, [2, 17])],\n defaultActions: { 9: [2, 21], 10: [2, 1], 11: [2, 2], 35: [2, 23] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 29;\n case 1:\n this.begin(\"type_directive\");\n return 30;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 24;\n case 3:\n this.popState();\n this.popState();\n return 32;\n case 4:\n return 31;\n case 5:\n break;\n case 6:\n break;\n case 7:\n return 26;\n case 8:\n break;\n case 9:\n break;\n case 10:\n this.begin(\"title\");\n return 13;\n case 11:\n this.popState();\n return \"title_value\";\n case 12:\n this.begin(\"acc_title\");\n return 15;\n case 13:\n this.popState();\n return \"acc_title_value\";\n case 14:\n this.begin(\"acc_descr\");\n return 17;\n case 15:\n this.popState();\n return \"acc_descr_value\";\n case 16:\n this.begin(\"acc_descr_multiline\");\n break;\n case 17:\n this.popState();\n break;\n case 18:\n return \"acc_descr_multiline_value\";\n case 19:\n this.begin(\"string\");\n break;\n case 20:\n this.popState();\n break;\n case 21:\n return \"txt\";\n case 22:\n return 6;\n case 23:\n return 8;\n case 24:\n return \"value\";\n case 25:\n return 28;\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n\\r]+)/i, /^(?:%%[^\\n]*)/i, /^(?:[\\s]+)/i, /^(?:title\\b)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:pie\\b)/i, /^(?:showData\\b)/i, /^(?::[\\s]*[\\d]+(?:\\.[\\d]+)?)/i, /^(?:$)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [17, 18], \"inclusive\": false }, \"acc_descr\": { \"rules\": [15], \"inclusive\": false }, \"acc_title\": { \"rules\": [13], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"title\": { \"rules\": [11], \"inclusive\": false }, \"string\": { \"rules\": [20, 21], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 7, 8, 9, 10, 12, 14, 16, 19, 22, 23, 24, 25], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet sections = {};\nlet showData = false;\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nconst addSection = function(id, value) {\n id = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(id, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n if (sections[id] === void 0) {\n sections[id] = value;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Added new section :\", id);\n }\n};\nconst getSections = () => sections;\nconst setShowData = function(toggle) {\n showData = toggle;\n};\nconst getShowData = function() {\n return showData;\n};\nconst cleanupValue = function(value) {\n if (value.substring(0, 1) === \":\") {\n value = value.substring(1).trim();\n return Number(value.trim());\n } else {\n return Number(value.trim());\n }\n};\nconst clear = function() {\n sections = {};\n showData = false;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst db = {\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().pie,\n addSection,\n getSections,\n cleanupValue,\n clear,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t,\n setShowData,\n getShowData,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b\n};\nconst getStyles = (options) => `\n .pieCircle{\n stroke: ${options.pieStrokeColor};\n stroke-width : ${options.pieStrokeWidth};\n opacity : ${options.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${options.pieOuterStrokeColor};\n stroke-width: ${options.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${options.pieTitleTextSize};\n fill: ${options.pieTitleTextColor};\n font-family: ${options.fontFamily};\n }\n .slice {\n font-family: ${options.fontFamily};\n fill: ${options.pieSectionTextColor};\n font-size:${options.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${options.pieLegendTextColor};\n font-family: ${options.fontFamily};\n font-size: ${options.pieLegendTextSize};\n }\n`;\nconst styles = getStyles;\nlet conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\nlet width;\nconst height = 450;\nconst draw = (txt, id, _version, diagObj) => {\n var _a;\n try {\n conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Rendering info diagram\\n\" + txt);\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n diagObj.db.clear();\n diagObj.parser.parse(txt);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Parsed info diagram\");\n const elem = doc.getElementById(id);\n width = elem.parentElement.offsetWidth;\n if (width === void 0) {\n width = 1200;\n }\n if (conf.useWidth !== void 0) {\n width = conf.useWidth;\n }\n if (conf.pie.useWidth !== void 0) {\n width = conf.pie.useWidth;\n }\n const diagram2 = root.select(\"#\" + id);\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.i)(diagram2, height, width, conf.pie.useMaxWidth);\n elem.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n var margin = 40;\n var legendRectSize = 18;\n var legendSpacing = 4;\n var radius = Math.min(width, height) / 2 - margin;\n var svg = diagram2.append(\"g\").attr(\"transform\", \"translate(\" + width / 2 + \",\" + height / 2 + \")\");\n var data = diagObj.db.getSections();\n var sum = 0;\n Object.keys(data).forEach(function(key) {\n sum += data[key];\n });\n const themeVariables = conf.themeVariables;\n var myGeneratedColors = [\n themeVariables.pie1,\n themeVariables.pie2,\n themeVariables.pie3,\n themeVariables.pie4,\n themeVariables.pie5,\n themeVariables.pie6,\n themeVariables.pie7,\n themeVariables.pie8,\n themeVariables.pie9,\n themeVariables.pie10,\n themeVariables.pie11,\n themeVariables.pie12\n ];\n const textPosition = ((_a = conf.pie) == null ? void 0 : _a.textPosition) ?? 0.75;\n let [outerStrokeWidth] = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.B)(themeVariables.pieOuterStrokeWidth);\n outerStrokeWidth ?? (outerStrokeWidth = 2);\n var color = (0,d3__WEBPACK_IMPORTED_MODULE_0__.scaleOrdinal)().range(myGeneratedColors);\n var pieData = Object.entries(data).map(function(el, idx) {\n return {\n order: idx,\n name: el[0],\n value: el[1]\n };\n });\n var pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.pie)().value(function(d) {\n return d.value;\n }).sort(function(a, b) {\n return a.order - b.order;\n });\n var dataReady = pie$1(pieData);\n var arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().innerRadius(0).outerRadius(radius);\n var labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().innerRadius(radius * textPosition).outerRadius(radius * textPosition);\n svg.append(\"circle\").attr(\"cx\", 0).attr(\"cy\", 0).attr(\"r\", radius + outerStrokeWidth / 2).attr(\"class\", \"pieOuterCircle\");\n svg.selectAll(\"mySlices\").data(dataReady).enter().append(\"path\").attr(\"d\", arcGenerator).attr(\"fill\", function(d) {\n return color(d.data.name);\n }).attr(\"class\", \"pieCircle\");\n svg.selectAll(\"mySlices\").data(dataReady).enter().append(\"text\").text(function(d) {\n return (d.data.value / sum * 100).toFixed(0) + \"%\";\n }).attr(\"transform\", function(d) {\n return \"translate(\" + labelArcGenerator.centroid(d) + \")\";\n }).style(\"text-anchor\", \"middle\").attr(\"class\", \"slice\");\n svg.append(\"text\").text(diagObj.db.getDiagramTitle()).attr(\"x\", 0).attr(\"y\", -(height - 50) / 2).attr(\"class\", \"pieTitleText\");\n var legend = svg.selectAll(\".legend\").data(color.domain()).enter().append(\"g\").attr(\"class\", \"legend\").attr(\"transform\", function(d, i) {\n const height2 = legendRectSize + legendSpacing;\n const offset = height2 * color.domain().length / 2;\n const horizontal = 12 * legendRectSize;\n const vertical = i * height2 - offset;\n return \"translate(\" + horizontal + \",\" + vertical + \")\";\n });\n legend.append(\"rect\").attr(\"width\", legendRectSize).attr(\"height\", legendRectSize).style(\"fill\", color).style(\"stroke\", color);\n legend.data(dataReady).append(\"text\").attr(\"x\", legendRectSize + legendSpacing).attr(\"y\", legendRectSize - legendSpacing).text(function(d) {\n if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) {\n return d.data.name + \" [\" + d.data.value + \"]\";\n } else {\n return d.data.name;\n }\n });\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"Error while rendering info diagram\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(e);\n }\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9waWVEaWFncmFtLTE1NzUwNWZlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBd1I7QUFDcE87QUFDakM7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQiw0WkFBNFosbUlBQW1JO0FBQy9pQixrQkFBa0IsMlBBQTJQLHNHQUFzRztBQUNuWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLHFFQUFxRSxJQUFJLFFBQVEsSUFBSSxzRUFBc0UsSUFBSSxzRUFBc0UsZ0JBQWdCLG1CQUFtQix3REFBd0QscUJBQXFCLElBQUksYUFBYSxJQUFJLFdBQVcsSUFBSSxXQUFXLGdCQUFnQix1R0FBdUcsaUJBQWlCLE9BQU8sS0FBSyw4QkFBOEIsMENBQTBDLGtDQUFrQyxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEsbUVBQW1FLHVHQUF1RyxzQkFBc0IscUJBQXFCLHdHQUF3RyxpQkFBaUIsSUFBSSxhQUFhO0FBQ25qQyxzQkFBc0IsaURBQWlEO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7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eURBQVM7QUFDYiwwQkFBMEIsdURBQVM7QUFDbkM7QUFDQTtBQUNBLHVCQUF1QiwwQ0FBTTtBQUM3QjtBQUNBLCtDQUErQywwQ0FBTSxtREFBbUQsMENBQU07QUFDOUc7QUFDQTtBQUNBO0FBQ0EsSUFBSSx5REFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksdURBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHVEQUFhO0FBQzFDO0FBQ0EsZ0JBQWdCLGdEQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQkFBZ0IsdUNBQUc7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSx1QkFBdUIsdUNBQUc7QUFDMUIsNEJBQTRCLHVDQUFHO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKLElBQUkseURBQVM7QUFDYixJQUFJLHlEQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvcGllRGlhZ3JhbS0xNTc1MDVmZS5qcz9iYmZhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIGEgYXMgZ2V0QWNjRGVzY3JpcHRpb24sIGIgYXMgc2V0QWNjRGVzY3JpcHRpb24sIG0gYXMgbWVybWFpZEFQSSwgZSBhcyBjb21tb24sIGwgYXMgbG9nLCB2IGFzIGNsZWFyJDEsIGkgYXMgY29uZmlndXJlU3ZnU2l6ZSwgQiBhcyBwYXJzZUZvbnRTaXplIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xuaW1wb3J0IHsgc2VsZWN0LCBzY2FsZU9yZGluYWwsIHBpZSwgYXJjIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpXG4gICAgICA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCAkVjAgPSBbMSwgNF0sICRWMSA9IFsxLCA1XSwgJFYyID0gWzEsIDZdLCAkVjMgPSBbMSwgN10sICRWNCA9IFsxLCA5XSwgJFY1ID0gWzEsIDExLCAxMywgMTUsIDE3LCAxOSwgMjAsIDI2LCAyNywgMjgsIDI5XSwgJFY2ID0gWzIsIDVdLCAkVjcgPSBbMSwgNiwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMCwgMjYsIDI3LCAyOCwgMjldLCAkVjggPSBbMjYsIDI3LCAyOF0sICRWOSA9IFsyLCA4XSwgJFZhID0gWzEsIDE4XSwgJFZiID0gWzEsIDE5XSwgJFZjID0gWzEsIDIwXSwgJFZkID0gWzEsIDIxXSwgJFZlID0gWzEsIDIyXSwgJFZmID0gWzEsIDIzXSwgJFZnID0gWzEsIDI4XSwgJFZoID0gWzYsIDI2LCAyNywgMjgsIDI5XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImVvbFwiOiA0LCBcImRpcmVjdGl2ZVwiOiA1LCBcIlBJRVwiOiA2LCBcImRvY3VtZW50XCI6IDcsIFwic2hvd0RhdGFcIjogOCwgXCJsaW5lXCI6IDksIFwic3RhdGVtZW50XCI6IDEwLCBcInR4dFwiOiAxMSwgXCJ2YWx1ZVwiOiAxMiwgXCJ0aXRsZVwiOiAxMywgXCJ0aXRsZV92YWx1ZVwiOiAxNCwgXCJhY2NfdGl0bGVcIjogMTUsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDE2LCBcImFjY19kZXNjclwiOiAxNywgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTgsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxOSwgXCJzZWN0aW9uXCI6IDIwLCBcIm9wZW5EaXJlY3RpdmVcIjogMjEsIFwidHlwZURpcmVjdGl2ZVwiOiAyMiwgXCJjbG9zZURpcmVjdGl2ZVwiOiAyMywgXCI6XCI6IDI0LCBcImFyZ0RpcmVjdGl2ZVwiOiAyNSwgXCJORVdMSU5FXCI6IDI2LCBcIjtcIjogMjcsIFwiRU9GXCI6IDI4LCBcIm9wZW5fZGlyZWN0aXZlXCI6IDI5LCBcInR5cGVfZGlyZWN0aXZlXCI6IDMwLCBcImFyZ19kaXJlY3RpdmVcIjogMzEsIFwiY2xvc2VfZGlyZWN0aXZlXCI6IDMyLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNjogXCJQSUVcIiwgODogXCJzaG93RGF0YVwiLCAxMTogXCJ0eHRcIiwgMTI6IFwidmFsdWVcIiwgMTM6IFwidGl0bGVcIiwgMTQ6IFwidGl0bGVfdmFsdWVcIiwgMTU6IFwiYWNjX3RpdGxlXCIsIDE2OiBcImFjY190aXRsZV92YWx1ZVwiLCAxNzogXCJhY2NfZGVzY3JcIiwgMTg6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDE5OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjA6IFwic2VjdGlvblwiLCAyNDogXCI6XCIsIDI2OiBcIk5FV0xJTkVcIiwgMjc6IFwiO1wiLCAyODogXCJFT0ZcIiwgMjk6IFwib3Blbl9kaXJlY3RpdmVcIiwgMzA6IFwidHlwZV9kaXJlY3RpdmVcIiwgMzE6IFwiYXJnX2RpcmVjdGl2ZVwiLCAzMjogXCJjbG9zZV9kaXJlY3RpdmVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDJdLCBbMywgMl0sIFszLCAzXSwgWzcsIDBdLCBbNywgMl0sIFs5LCAyXSwgWzEwLCAwXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzUsIDNdLCBbNSwgNV0sIFs0LCAxXSwgWzQsIDFdLCBbNCwgMV0sIFsyMSwgMV0sIFsyMiwgMV0sIFsyNSwgMV0sIFsyMywgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHl5LnNldFNob3dEYXRhKHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHl5LmFkZFNlY3Rpb24oJCRbJDAgLSAxXSwgeXkuY2xlYW51cFZhbHVlKCQkWyQwXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCIlJXtcIiwgXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgJCRbJDBdID0gJCRbJDBdLnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwifSUlXCIsIFwiY2xvc2VfZGlyZWN0aXZlXCIsIFwicGllXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDU6IDMsIDY6ICRWMCwgMjE6IDgsIDI2OiAkVjEsIDI3OiAkVjIsIDI4OiAkVjMsIDI5OiAkVjQgfSwgeyAxOiBbM10gfSwgeyAzOiAxMCwgNDogMiwgNTogMywgNjogJFYwLCAyMTogOCwgMjY6ICRWMSwgMjc6ICRWMiwgMjg6ICRWMywgMjk6ICRWNCB9LCB7IDM6IDExLCA0OiAyLCA1OiAzLCA2OiAkVjAsIDIxOiA4LCAyNjogJFYxLCAyNzogJFYyLCAyODogJFYzLCAyOTogJFY0IH0sIG8oJFY1LCAkVjYsIHsgNzogMTIsIDg6IFsxLCAxM10gfSksIG8oJFY3LCBbMiwgMThdKSwgbygkVjcsIFsyLCAxOV0pLCBvKCRWNywgWzIsIDIwXSksIHsgMjI6IDE0LCAzMDogWzEsIDE1XSB9LCB7IDMwOiBbMiwgMjFdIH0sIHsgMTogWzIsIDFdIH0sIHsgMTogWzIsIDJdIH0sIG8oJFY4LCAkVjksIHsgMjE6IDgsIDk6IDE2LCAxMDogMTcsIDU6IDI0LCAxOiBbMiwgM10sIDExOiAkVmEsIDEzOiAkVmIsIDE1OiAkVmMsIDE3OiAkVmQsIDE5OiAkVmUsIDIwOiAkVmYsIDI5OiAkVjQgfSksIG8oJFY1LCAkVjYsIHsgNzogMjUgfSksIHsgMjM6IDI2LCAyNDogWzEsIDI3XSwgMzI6ICRWZyB9LCBvKFsyNCwgMzJdLCBbMiwgMjJdKSwgbygkVjUsIFsyLCA2XSksIHsgNDogMjksIDI2OiAkVjEsIDI3OiAkVjIsIDI4OiAkVjMgfSwgeyAxMjogWzEsIDMwXSB9LCB7IDE0OiBbMSwgMzFdIH0sIHsgMTY6IFsxLCAzMl0gfSwgeyAxODogWzEsIDMzXSB9LCBvKCRWOCwgWzIsIDEzXSksIG8oJFY4LCBbMiwgMTRdKSwgbygkVjgsIFsyLCAxNV0pLCBvKCRWOCwgJFY5LCB7IDIxOiA4LCA5OiAxNiwgMTA6IDE3LCA1OiAyNCwgMTogWzIsIDRdLCAxMTogJFZhLCAxMzogJFZiLCAxNTogJFZjLCAxNzogJFZkLCAxOTogJFZlLCAyMDogJFZmLCAyOTogJFY0IH0pLCBvKCRWaCwgWzIsIDE2XSksIHsgMjU6IDM0LCAzMTogWzEsIDM1XSB9LCBvKCRWaCwgWzIsIDI0XSksIG8oJFY1LCBbMiwgN10pLCBvKCRWOCwgWzIsIDldKSwgbygkVjgsIFsyLCAxMF0pLCBvKCRWOCwgWzIsIDExXSksIG8oJFY4LCBbMiwgMTJdKSwgeyAyMzogMzYsIDMyOiAkVmcgfSwgeyAzMjogWzIsIDIzXSB9LCBvKCRWaCwgWzIsIDE3XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDk6IFsyLCAyMV0sIDEwOiBbMiwgMV0sIDExOiBbMiwgMl0sIDM1OiBbMiwgMjNdIH0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICB2YXIgc3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGxleGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiBmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiBmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiBmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcInRpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIFwidHh0XCI7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIFwidmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbXFxuXFxyXSspL2ksIC9eKD86JSVbXlxcbl0qKS9pLCAvXig/OltcXHNdKykvaSwgL14oPzp0aXRsZVxcYikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKikvaSwgL14oPzpwaWVcXGIpL2ksIC9eKD86c2hvd0RhdGFcXGIpL2ksIC9eKD86OltcXHNdKltcXGRdKyg/OlxcLltcXGRdKyk/KS9pLCAvXig/OiQpL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsxNywgMThdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzE1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsxM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xvc2VfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhcmdfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMywgNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsyLCAzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInRpdGxlXCI6IHsgXCJydWxlc1wiOiBbMTFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzIwLCAyMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDUsIDYsIDcsIDgsIDksIDEwLCAxMiwgMTQsIDE2LCAxOSwgMjIsIDIzLCAyNCwgMjVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xubGV0IHNlY3Rpb25zID0ge307XG5sZXQgc2hvd0RhdGEgPSBmYWxzZTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBhZGRTZWN0aW9uID0gZnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIGlkID0gY29tbW9uLnNhbml0aXplVGV4dChpZCwgZ2V0Q29uZmlnKCkpO1xuICBpZiAoc2VjdGlvbnNbaWRdID09PSB2b2lkIDApIHtcbiAgICBzZWN0aW9uc1tpZF0gPSB2YWx1ZTtcbiAgICBsb2cuZGVidWcoXCJBZGRlZCBuZXcgc2VjdGlvbiA6XCIsIGlkKTtcbiAgfVxufTtcbmNvbnN0IGdldFNlY3Rpb25zID0gKCkgPT4gc2VjdGlvbnM7XG5jb25zdCBzZXRTaG93RGF0YSA9IGZ1bmN0aW9uKHRvZ2dsZSkge1xuICBzaG93RGF0YSA9IHRvZ2dsZTtcbn07XG5jb25zdCBnZXRTaG93RGF0YSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2hvd0RhdGE7XG59O1xuY29uc3QgY2xlYW51cFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKHZhbHVlLnN1YnN0cmluZygwLCAxKSA9PT0gXCI6XCIpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxKS50cmltKCk7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZS50cmltKCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUudHJpbSgpKTtcbiAgfVxufTtcbmNvbnN0IGNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zID0ge307XG4gIHNob3dEYXRhID0gZmFsc2U7XG4gIGNsZWFyJDEoKTtcbn07XG5jb25zdCBkYiA9IHtcbiAgcGFyc2VEaXJlY3RpdmUsXG4gIGdldENvbmZpZzogKCkgPT4gZ2V0Q29uZmlnKCkucGllLFxuICBhZGRTZWN0aW9uLFxuICBnZXRTZWN0aW9ucyxcbiAgY2xlYW51cFZhbHVlLFxuICBjbGVhcixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0U2hvd0RhdGEsXG4gIGdldFNob3dEYXRhLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb25cbn07XG5jb25zdCBnZXRTdHlsZXMgPSAob3B0aW9ucykgPT4gYFxuICAucGllQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZVN0cm9rZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGggOiAke29wdGlvbnMucGllU3Ryb2tlV2lkdGh9O1xuICAgIG9wYWNpdHkgOiAke29wdGlvbnMucGllT3BhY2l0eX07XG4gIH1cbiAgLnBpZU91dGVyQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlV2lkdGh9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgLnBpZVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6ICR7b3B0aW9ucy5waWVUaXRsZVRleHRTaXplfTtcbiAgICBmaWxsOiAke29wdGlvbnMucGllVGl0bGVUZXh0Q29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIH1cbiAgLnNsaWNlIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5waWVTZWN0aW9uVGV4dENvbG9yfTtcbiAgICBmb250LXNpemU6JHtvcHRpb25zLnBpZVNlY3Rpb25UZXh0U2l6ZX07XG4gICAgLy8gZmlsbDogd2hpdGU7XG4gIH1cbiAgLmxlZ2VuZCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMucGllTGVnZW5kVGV4dENvbG9yfTtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLnBpZUxlZ2VuZFRleHRTaXplfTtcbiAgfVxuYDtcbmNvbnN0IHN0eWxlcyA9IGdldFN0eWxlcztcbmxldCBjb25mID0gZ2V0Q29uZmlnKCk7XG5sZXQgd2lkdGg7XG5jb25zdCBoZWlnaHQgPSA0NTA7XG5jb25zdCBkcmF3ID0gKHR4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIHZhciBfYTtcbiAgdHJ5IHtcbiAgICBjb25mID0gZ2V0Q29uZmlnKCk7XG4gICAgbG9nLmRlYnVnKFwiUmVuZGVyaW5nIGluZm8gZGlhZ3JhbVxcblwiICsgdHh0KTtcbiAgICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gICAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gICAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICAgIGRpYWdPYmouZGIuY2xlYXIoKTtcbiAgICBkaWFnT2JqLnBhcnNlci5wYXJzZSh0eHQpO1xuICAgIGxvZy5kZWJ1ZyhcIlBhcnNlZCBpbmZvIGRpYWdyYW1cIik7XG4gICAgY29uc3QgZWxlbSA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgd2lkdGggPSBlbGVtLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHdpZHRoID09PSB2b2lkIDApIHtcbiAgICAgIHdpZHRoID0gMTIwMDtcbiAgICB9XG4gICAgaWYgKGNvbmYudXNlV2lkdGggIT09IHZvaWQgMCkge1xuICAgICAgd2lkdGggPSBjb25mLnVzZVdpZHRoO1xuICAgIH1cbiAgICBpZiAoY29uZi5waWUudXNlV2lkdGggIT09IHZvaWQgMCkge1xuICAgICAgd2lkdGggPSBjb25mLnBpZS51c2VXaWR0aDtcbiAgICB9XG4gICAgY29uc3QgZGlhZ3JhbTIgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHdpZHRoLCBjb25mLnBpZS51c2VNYXhXaWR0aCk7XG4gICAgZWxlbS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIFwiICsgd2lkdGggKyBcIiBcIiArIGhlaWdodCk7XG4gICAgdmFyIG1hcmdpbiA9IDQwO1xuICAgIHZhciBsZWdlbmRSZWN0U2l6ZSA9IDE4O1xuICAgIHZhciBsZWdlbmRTcGFjaW5nID0gNDtcbiAgICB2YXIgcmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIC0gbWFyZ2luO1xuICAgIHZhciBzdmcgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB3aWR0aCAvIDIgKyBcIixcIiArIGhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgdmFyIGRhdGEgPSBkaWFnT2JqLmRiLmdldFNlY3Rpb25zKCk7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHN1bSArPSBkYXRhW2tleV07XG4gICAgfSk7XG4gICAgY29uc3QgdGhlbWVWYXJpYWJsZXMgPSBjb25mLnRoZW1lVmFyaWFibGVzO1xuICAgIHZhciBteUdlbmVyYXRlZENvbG9ycyA9IFtcbiAgICAgIHRoZW1lVmFyaWFibGVzLnBpZTEsXG4gICAgICB0aGVtZVZhcmlhYmxlcy5waWUyLFxuICAgICAgdGhlbWVWYXJpYWJsZXMucGllMyxcbiAgICAgIHRoZW1lVmFyaWFibGVzLnBpZTQsXG4gICAgICB0aGVtZVZhcmlhYmxlcy5waWU1LFxuICAgICAgdGhlbWVWYXJpYWJsZXMucGllNixcbiAgICAgIHRoZW1lVmFyaWFibGVzLnBpZTcsXG4gICAgICB0aGVtZVZhcmlhYmxlcy5waWU4LFxuICAgICAgdGhlbWVWYXJpYWJsZXMucGllOSxcbiAgICAgIHRoZW1lVmFyaWFibGVzLnBpZTEwLFxuICAgICAgdGhlbWVWYXJpYWJsZXMucGllMTEsXG4gICAgICB0aGVtZVZhcmlhYmxlcy5waWUxMlxuICAgIF07XG4gICAgY29uc3QgdGV4dFBvc2l0aW9uID0gKChfYSA9IGNvbmYucGllKSA9PSBudWxsID8gdm9pZCAwIDogX2EudGV4dFBvc2l0aW9uKSA/PyAwLjc1O1xuICAgIGxldCBbb3V0ZXJTdHJva2VXaWR0aF0gPSBwYXJzZUZvbnRTaXplKHRoZW1lVmFyaWFibGVzLnBpZU91dGVyU3Ryb2tlV2lkdGgpO1xuICAgIG91dGVyU3Ryb2tlV2lkdGggPz8gKG91dGVyU3Ryb2tlV2lkdGggPSAyKTtcbiAgICB2YXIgY29sb3IgPSBzY2FsZU9yZGluYWwoKS5yYW5nZShteUdlbmVyYXRlZENvbG9ycyk7XG4gICAgdmFyIHBpZURhdGEgPSBPYmplY3QuZW50cmllcyhkYXRhKS5tYXAoZnVuY3Rpb24oZWwsIGlkeCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3JkZXI6IGlkeCxcbiAgICAgICAgbmFtZTogZWxbMF0sXG4gICAgICAgIHZhbHVlOiBlbFsxXVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB2YXIgcGllJDEgPSBwaWUoKS52YWx1ZShmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC52YWx1ZTtcbiAgICB9KS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjtcbiAgICB9KTtcbiAgICB2YXIgZGF0YVJlYWR5ID0gcGllJDEocGllRGF0YSk7XG4gICAgdmFyIGFyY0dlbmVyYXRvciA9IGFyYygpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHJhZGl1cyk7XG4gICAgdmFyIGxhYmVsQXJjR2VuZXJhdG9yID0gYXJjKCkuaW5uZXJSYWRpdXMocmFkaXVzICogdGV4dFBvc2l0aW9uKS5vdXRlclJhZGl1cyhyYWRpdXMgKiB0ZXh0UG9zaXRpb24pO1xuICAgIHN2Zy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIDApLmF0dHIoXCJjeVwiLCAwKS5hdHRyKFwiclwiLCByYWRpdXMgKyBvdXRlclN0cm9rZVdpZHRoIC8gMikuYXR0cihcImNsYXNzXCIsIFwicGllT3V0ZXJDaXJjbGVcIik7XG4gICAgc3ZnLnNlbGVjdEFsbChcIm15U2xpY2VzXCIpLmRhdGEoZGF0YVJlYWR5KS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgYXJjR2VuZXJhdG9yKS5hdHRyKFwiZmlsbFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gY29sb3IoZC5kYXRhLm5hbWUpO1xuICAgIH0pLmF0dHIoXCJjbGFzc1wiLCBcInBpZUNpcmNsZVwiKTtcbiAgICBzdmcuc2VsZWN0QWxsKFwibXlTbGljZXNcIikuZGF0YShkYXRhUmVhZHkpLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS50ZXh0KGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiAoZC5kYXRhLnZhbHVlIC8gc3VtICogMTAwKS50b0ZpeGVkKDApICsgXCIlXCI7XG4gICAgfSkuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyBsYWJlbEFyY0dlbmVyYXRvci5jZW50cm9pZChkKSArIFwiKVwiO1xuICAgIH0pLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikuYXR0cihcImNsYXNzXCIsIFwic2xpY2VcIik7XG4gICAgc3ZnLmFwcGVuZChcInRleHRcIikudGV4dChkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAtKGhlaWdodCAtIDUwKSAvIDIpLmF0dHIoXCJjbGFzc1wiLCBcInBpZVRpdGxlVGV4dFwiKTtcbiAgICB2YXIgbGVnZW5kID0gc3ZnLnNlbGVjdEFsbChcIi5sZWdlbmRcIikuZGF0YShjb2xvci5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxlZ2VuZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGNvbnN0IGhlaWdodDIgPSBsZWdlbmRSZWN0U2l6ZSArIGxlZ2VuZFNwYWNpbmc7XG4gICAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHQyICogY29sb3IuZG9tYWluKCkubGVuZ3RoIC8gMjtcbiAgICAgIGNvbnN0IGhvcml6b250YWwgPSAxMiAqIGxlZ2VuZFJlY3RTaXplO1xuICAgICAgY29uc3QgdmVydGljYWwgPSBpICogaGVpZ2h0MiAtIG9mZnNldDtcbiAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGhvcml6b250YWwgKyBcIixcIiArIHZlcnRpY2FsICsgXCIpXCI7XG4gICAgfSk7XG4gICAgbGVnZW5kLmFwcGVuZChcInJlY3RcIikuYXR0cihcIndpZHRoXCIsIGxlZ2VuZFJlY3RTaXplKS5hdHRyKFwiaGVpZ2h0XCIsIGxlZ2VuZFJlY3RTaXplKS5zdHlsZShcImZpbGxcIiwgY29sb3IpLnN0eWxlKFwic3Ryb2tlXCIsIGNvbG9yKTtcbiAgICBsZWdlbmQuZGF0YShkYXRhUmVhZHkpLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgbGVnZW5kUmVjdFNpemUgKyBsZWdlbmRTcGFjaW5nKS5hdHRyKFwieVwiLCBsZWdlbmRSZWN0U2l6ZSAtIGxlZ2VuZFNwYWNpbmcpLnRleHQoZnVuY3Rpb24oZCkge1xuICAgICAgaWYgKGRpYWdPYmouZGIuZ2V0U2hvd0RhdGEoKSB8fCBjb25mLnNob3dEYXRhIHx8IGNvbmYucGllLnNob3dEYXRhKSB7XG4gICAgICAgIHJldHVybiBkLmRhdGEubmFtZSArIFwiIFtcIiArIGQuZGF0YS52YWx1ZSArIFwiXVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGQuZGF0YS5uYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbVwiKTtcbiAgICBsb2cuZXJyb3IoZSk7XG4gIH1cbn07XG5jb25zdCByZW5kZXJlciA9IHtcbiAgZHJhd1xufTtcbmNvbnN0IGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogcGFyc2VyJDEsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/pieDiagram-157505fe.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/quadrantDiagram-fd70f2d0.js": /*!**********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/quadrantDiagram-fd70f2d0.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [1, 10], $V6 = [1, 5, 14, 16, 18, 20, 21, 26, 28, 29, 30, 31, 32, 38, 39, 40, 41, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], $V7 = [1, 5, 7, 14, 16, 18, 20, 21, 26, 28, 29, 30, 31, 32, 38, 39, 40, 41, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], $V8 = [38, 39, 40], $V9 = [2, 8], $Va = [1, 19], $Vb = [1, 23], $Vc = [1, 24], $Vd = [1, 25], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 37], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 52], $VA = [1, 67], $VB = [1, 68], $VC = [5, 23, 27, 38, 39, 40, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61], $VD = [5, 7, 38, 39, 40, 41];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"eol\": 4, \"SPACE\": 5, \"directive\": 6, \"QUADRANT\": 7, \"document\": 8, \"line\": 9, \"statement\": 10, \"axisDetails\": 11, \"quadrantDetails\": 12, \"points\": 13, \"title\": 14, \"title_value\": 15, \"acc_title\": 16, \"acc_title_value\": 17, \"acc_descr\": 18, \"acc_descr_value\": 19, \"acc_descr_multiline_value\": 20, \"section\": 21, \"text\": 22, \"point_start\": 23, \"point_x\": 24, \"point_y\": 25, \"X-AXIS\": 26, \"AXIS-TEXT-DELIMITER\": 27, \"Y-AXIS\": 28, \"QUADRANT_1\": 29, \"QUADRANT_2\": 30, \"QUADRANT_3\": 31, \"QUADRANT_4\": 32, \"openDirective\": 33, \"typeDirective\": 34, \"closeDirective\": 35, \":\": 36, \"argDirective\": 37, \"NEWLINE\": 38, \"SEMI\": 39, \"EOF\": 40, \"open_directive\": 41, \"type_directive\": 42, \"arg_directive\": 43, \"close_directive\": 44, \"alphaNumToken\": 45, \"textNoTagsToken\": 46, \"STR\": 47, \"MD_STR\": 48, \"alphaNum\": 49, \"PUNCTUATION\": 50, \"AMP\": 51, \"NUM\": 52, \"ALPHA\": 53, \"COMMA\": 54, \"PLUS\": 55, \"EQUALS\": 56, \"MULT\": 57, \"DOT\": 58, \"BRKT\": 59, \"UNDERSCORE\": 60, \"MINUS\": 61, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"SPACE\", 7: \"QUADRANT\", 14: \"title\", 15: \"title_value\", 16: \"acc_title\", 17: \"acc_title_value\", 18: \"acc_descr\", 19: \"acc_descr_value\", 20: \"acc_descr_multiline_value\", 21: \"section\", 23: \"point_start\", 24: \"point_x\", 25: \"point_y\", 26: \"X-AXIS\", 27: \"AXIS-TEXT-DELIMITER\", 28: \"Y-AXIS\", 29: \"QUADRANT_1\", 30: \"QUADRANT_2\", 31: \"QUADRANT_3\", 32: \"QUADRANT_4\", 36: \":\", 38: \"NEWLINE\", 39: \"SEMI\", 40: \"EOF\", 41: \"open_directive\", 42: \"type_directive\", 43: \"arg_directive\", 44: \"close_directive\", 47: \"STR\", 48: \"MD_STR\", 50: \"PUNCTUATION\", 51: \"AMP\", 52: \"NUM\", 53: \"ALPHA\", 54: \"COMMA\", 55: \"PLUS\", 56: \"EQUALS\", 57: \"MULT\", 58: \"DOT\", 59: \"BRKT\", 60: \"UNDERSCORE\", 61: \"MINUS\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [10, 0], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [13, 4], [11, 4], [11, 3], [11, 2], [11, 4], [11, 3], [11, 2], [12, 2], [12, 2], [12, 2], [12, 2], [6, 3], [6, 5], [4, 1], [4, 1], [4, 1], [33, 1], [34, 1], [37, 1], [35, 1], [22, 1], [22, 2], [22, 1], [22, 1], [49, 1], [49, 2], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [46, 1], [46, 1], [46, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 13:\n this.$ = $$[$0].trim();\n yy.setDiagramTitle(this.$);\n break;\n case 14:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 15:\n case 16:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 17:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 19:\n yy.addPoint($$[$0 - 3], $$[$0 - 1], $$[$0]);\n break;\n case 20:\n yy.setXAxisLeftText($$[$0 - 2]);\n yy.setXAxisRightText($$[$0]);\n break;\n case 21:\n $$[$0 - 1].text += \" ⟶ \";\n yy.setXAxisLeftText($$[$0 - 1]);\n break;\n case 22:\n yy.setXAxisLeftText($$[$0]);\n break;\n case 23:\n yy.setYAxisBottomText($$[$0 - 2]);\n yy.setYAxisTopText($$[$0]);\n break;\n case 24:\n $$[$0 - 1].text += \" ⟶ \";\n yy.setYAxisBottomText($$[$0 - 1]);\n break;\n case 25:\n yy.setYAxisBottomText($$[$0]);\n break;\n case 26:\n yy.setQuadrant1Text($$[$0]);\n break;\n case 27:\n yy.setQuadrant2Text($$[$0]);\n break;\n case 28:\n yy.setQuadrant3Text($$[$0]);\n break;\n case 29:\n yy.setQuadrant4Text($$[$0]);\n break;\n case 35:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 36:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 37:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 38:\n yy.parseDirective(\"}%%\", \"close_directive\", \"quadrantChart\");\n break;\n case 39:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 40:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 41:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 42:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 43:\n this.$ = $$[$0];\n break;\n case 44:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 1: [3] }, { 3: 11, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 3: 12, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 3: 13, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, o($V6, [2, 5], { 8: 14 }), o($V7, [2, 32]), o($V7, [2, 33]), o($V7, [2, 34]), { 34: 15, 42: [1, 16] }, { 42: [2, 35] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($V8, $V9, { 33: 9, 9: 17, 10: 18, 11: 20, 12: 21, 13: 22, 6: 28, 22: 35, 45: 36, 1: [2, 4], 5: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 20: $Ve, 21: $Vf, 26: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 32: $Vl, 41: $V5, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), { 35: 50, 36: [1, 51], 44: $Vz }, o([36, 44], [2, 36]), o($V6, [2, 6]), { 4: 53, 38: $V2, 39: $V3, 40: $V4 }, o($V8, $V9, { 33: 9, 11: 20, 12: 21, 13: 22, 6: 28, 22: 35, 45: 36, 10: 54, 5: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 20: $Ve, 21: $Vf, 26: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 32: $Vl, 41: $V5, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 15: [1, 55] }, { 17: [1, 56] }, { 19: [1, 57] }, o($V8, [2, 16]), o($V8, [2, 17]), o($V8, [2, 18]), { 22: 58, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 59, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 60, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 61, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 62, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 63, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 5: $VA, 23: [1, 64], 45: 66, 46: 65, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }, o($VC, [2, 39]), o($VC, [2, 41]), o($VC, [2, 42]), o($VC, [2, 45]), o($VC, [2, 46]), o($VC, [2, 47]), o($VC, [2, 48]), o($VC, [2, 49]), o($VC, [2, 50]), o($VC, [2, 51]), o($VC, [2, 52]), o($VC, [2, 53]), o($VC, [2, 54]), o($VC, [2, 55]), o($VD, [2, 30]), { 37: 69, 43: [1, 70] }, o($VD, [2, 38]), o($V6, [2, 7]), o($V8, [2, 9]), o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, [2, 22], { 46: 65, 45: 66, 5: $VA, 27: [1, 71], 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 25], { 46: 65, 45: 66, 5: $VA, 27: [1, 72], 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 26], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 27], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 28], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 29], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), { 24: [1, 73] }, o($VC, [2, 40]), o($VC, [2, 56]), o($VC, [2, 57]), o($VC, [2, 58]), { 35: 74, 44: $Vz }, { 44: [2, 37] }, o($V8, [2, 21], { 45: 36, 22: 75, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), o($V8, [2, 24], { 45: 36, 22: 76, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), { 25: [1, 77] }, o($VD, [2, 31]), o($V8, [2, 20], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 23], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 19])],\n defaultActions: { 10: [2, 35], 11: [2, 1], 12: [2, 2], 13: [2, 3], 70: [2, 37] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 41;\n case 1:\n this.begin(\"type_directive\");\n return 42;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 36;\n case 3:\n this.popState();\n this.popState();\n return 44;\n case 4:\n return 43;\n case 5:\n break;\n case 6:\n break;\n case 7:\n return 38;\n case 8:\n break;\n case 9:\n this.begin(\"title\");\n return 14;\n case 10:\n this.popState();\n return \"title_value\";\n case 11:\n this.begin(\"acc_title\");\n return 16;\n case 12:\n this.popState();\n return \"acc_title_value\";\n case 13:\n this.begin(\"acc_descr\");\n return 18;\n case 14:\n this.popState();\n return \"acc_descr_value\";\n case 15:\n this.begin(\"acc_descr_multiline\");\n break;\n case 16:\n this.popState();\n break;\n case 17:\n return \"acc_descr_multiline_value\";\n case 18:\n return 26;\n case 19:\n return 28;\n case 20:\n return 27;\n case 21:\n return 29;\n case 22:\n return 30;\n case 23:\n return 31;\n case 24:\n return 32;\n case 25:\n this.begin(\"md_string\");\n break;\n case 26:\n return \"MD_STR\";\n case 27:\n this.popState();\n break;\n case 28:\n this.begin(\"string\");\n break;\n case 29:\n this.popState();\n break;\n case 30:\n return \"STR\";\n case 31:\n this.begin(\"point_start\");\n return 23;\n case 32:\n this.begin(\"point_x\");\n return 24;\n case 33:\n this.popState();\n break;\n case 34:\n this.popState();\n this.begin(\"point_y\");\n break;\n case 35:\n this.popState();\n return 25;\n case 36:\n return 7;\n case 37:\n return 53;\n case 38:\n return \"COLON\";\n case 39:\n return 55;\n case 40:\n return 54;\n case 41:\n return 56;\n case 42:\n return 56;\n case 43:\n return 57;\n case 44:\n return 59;\n case 45:\n return 60;\n case 46:\n return 58;\n case 47:\n return 51;\n case 48:\n return 61;\n case 49:\n return 52;\n case 50:\n return 5;\n case 51:\n return 39;\n case 52:\n return 50;\n case 53:\n return 40;\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n\\r]+)/i, /^(?:%%[^\\n]*)/i, /^(?:title\\b)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:[\"][`])/i, /^(?:[^`\"]+)/i, /^(?:[`][\"])/i, /^(?:[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:\\s*:\\s*\\[\\s*)/i, /^(?:(1)|(0(.\\d+)?))/i, /^(?:\\s*\\] *)/i, /^(?:\\s*,\\s*)/i, /^(?:(1)|(0(.\\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\\*)/i, /^(?:#)/i, /^(?:[\\_])/i, /^(?:\\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\\s)/i, /^(?:;)/i, /^(?:[!\"#$%&'*+,-.`?\\\\_/])/i, /^(?:$)/i],\n conditions: { \"point_y\": { \"rules\": [35], \"inclusive\": false }, \"point_x\": { \"rules\": [34], \"inclusive\": false }, \"point_start\": { \"rules\": [32, 33], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [16, 17], \"inclusive\": false }, \"acc_descr\": { \"rules\": [14], \"inclusive\": false }, \"acc_title\": { \"rules\": [12], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"title\": { \"rules\": [10], \"inclusive\": false }, \"md_string\": { \"rules\": [26, 27], \"inclusive\": false }, \"string\": { \"rules\": [29, 30], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 7, 8, 9, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 28, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst defaultThemeVariables = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.C)();\nclass QuadrantBuilder {\n constructor() {\n this.config = this.getDefaultConfig();\n this.themeConfig = this.getDefaultThemeConfig();\n this.data = this.getDefaultData();\n }\n getDefaultData() {\n return {\n titleText: \"\",\n quadrant1Text: \"\",\n quadrant2Text: \"\",\n quadrant3Text: \"\",\n quadrant4Text: \"\",\n xAxisLeftText: \"\",\n xAxisRightText: \"\",\n yAxisBottomText: \"\",\n yAxisTopText: \"\",\n points: []\n };\n }\n getDefaultConfig() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;\n return {\n showXAxis: true,\n showYAxis: true,\n showTitle: true,\n chartHeight: ((_a = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _a.chartWidth) || 500,\n chartWidth: ((_b = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _b.chartHeight) || 500,\n titlePadding: ((_c = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _c.titlePadding) || 10,\n titleFontSize: ((_d = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20,\n quadrantPadding: ((_e = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5,\n xAxisLabelPadding: ((_f = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5,\n yAxisLabelPadding: ((_g = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5,\n xAxisLabelFontSize: ((_h = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16,\n yAxisLabelFontSize: ((_i = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16,\n quadrantLabelFontSize: ((_j = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16,\n quadrantTextTopPadding: ((_k = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5,\n pointTextPadding: ((_l = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5,\n pointLabelFontSize: ((_m = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12,\n pointRadius: ((_n = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _n.pointRadius) || 5,\n xAxisPosition: ((_o = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _o.xAxisPosition) || \"top\",\n yAxisPosition: ((_p = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _p.yAxisPosition) || \"left\",\n quadrantInternalBorderStrokeWidth: ((_q = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1,\n quadrantExternalBorderStrokeWidth: ((_r = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.D.quadrantChart) == null ? void 0 : _r.quadrantExternalBorderStrokeWidth) || 2\n };\n }\n getDefaultThemeConfig() {\n return {\n quadrant1Fill: defaultThemeVariables.quadrant1Fill,\n quadrant2Fill: defaultThemeVariables.quadrant2Fill,\n quadrant3Fill: defaultThemeVariables.quadrant3Fill,\n quadrant4Fill: defaultThemeVariables.quadrant4Fill,\n quadrant1TextFill: defaultThemeVariables.quadrant1TextFill,\n quadrant2TextFill: defaultThemeVariables.quadrant2TextFill,\n quadrant3TextFill: defaultThemeVariables.quadrant3TextFill,\n quadrant4TextFill: defaultThemeVariables.quadrant4TextFill,\n quadrantPointFill: defaultThemeVariables.quadrantPointFill,\n quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill,\n quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill,\n quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill,\n quadrantTitleFill: defaultThemeVariables.quadrantTitleFill,\n quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill,\n quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill\n };\n }\n clear() {\n this.config = this.getDefaultConfig();\n this.themeConfig = this.getDefaultThemeConfig();\n this.data = this.getDefaultData();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.info(\"clear called\");\n }\n setData(data) {\n this.data = { ...this.data, ...data };\n }\n addPoints(points) {\n this.data.points = [...points, ...this.data.points];\n }\n setConfig(config2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.trace(\"setConfig called with: \", config2);\n this.config = { ...this.config, ...config2 };\n }\n setThemeConfig(themeConfig) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.trace(\"setThemeConfig called with: \", themeConfig);\n this.themeConfig = { ...this.themeConfig, ...themeConfig };\n }\n calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) {\n const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize;\n const xAxisSpace = {\n top: xAxisPosition === \"top\" && showXAxis ? xAxisSpaceCalculation : 0,\n bottom: xAxisPosition === \"bottom\" && showXAxis ? xAxisSpaceCalculation : 0\n };\n const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize;\n const yAxisSpace = {\n left: this.config.yAxisPosition === \"left\" && showYAxis ? yAxisSpaceCalculation : 0,\n right: this.config.yAxisPosition === \"right\" && showYAxis ? yAxisSpaceCalculation : 0\n };\n const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2;\n const titleSpace = {\n top: showTitle ? titleSpaceCalculation : 0\n };\n const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left;\n const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top;\n const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right;\n const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top;\n const quadrantHalfWidth = quadrantWidth / 2;\n const quadrantHalfHeight = quadrantHeight / 2;\n const quadrantSpace = {\n quadrantLeft,\n quadrantTop,\n quadrantWidth,\n quadrantHalfWidth,\n quadrantHeight,\n quadrantHalfHeight\n };\n return {\n xAxisSpace,\n yAxisSpace,\n titleSpace,\n quadrantSpace\n };\n }\n getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) {\n const { quadrantSpace, titleSpace } = spaceData;\n const {\n quadrantHalfHeight,\n quadrantHeight,\n quadrantLeft,\n quadrantHalfWidth,\n quadrantTop,\n quadrantWidth\n } = quadrantSpace;\n const drawAxisLabelInMiddle = this.data.points.length === 0;\n const axisLabels = [];\n if (this.data.xAxisLeftText && showXAxis) {\n axisLabels.push({\n text: this.data.xAxisLeftText,\n fill: this.themeConfig.quadrantXAxisTextFill,\n x: quadrantLeft + (drawAxisLabelInMiddle ? quadrantHalfWidth / 2 : 0),\n y: xAxisPosition === \"top\" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding,\n fontSize: this.config.xAxisLabelFontSize,\n verticalPos: drawAxisLabelInMiddle ? \"center\" : \"left\",\n horizontalPos: \"top\",\n rotation: 0\n });\n }\n if (this.data.xAxisRightText && showXAxis) {\n axisLabels.push({\n text: this.data.xAxisRightText,\n fill: this.themeConfig.quadrantXAxisTextFill,\n x: quadrantLeft + quadrantHalfWidth + (drawAxisLabelInMiddle ? quadrantHalfWidth / 2 : 0),\n y: xAxisPosition === \"top\" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding,\n fontSize: this.config.xAxisLabelFontSize,\n verticalPos: drawAxisLabelInMiddle ? \"center\" : \"left\",\n horizontalPos: \"top\",\n rotation: 0\n });\n }\n if (this.data.yAxisBottomText && showYAxis) {\n axisLabels.push({\n text: this.data.yAxisBottomText,\n fill: this.themeConfig.quadrantYAxisTextFill,\n x: this.config.yAxisPosition === \"left\" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding,\n y: quadrantTop + quadrantHeight - (drawAxisLabelInMiddle ? quadrantHalfHeight / 2 : 0),\n fontSize: this.config.yAxisLabelFontSize,\n verticalPos: drawAxisLabelInMiddle ? \"center\" : \"left\",\n horizontalPos: \"top\",\n rotation: -90\n });\n }\n if (this.data.yAxisTopText && showYAxis) {\n axisLabels.push({\n text: this.data.yAxisTopText,\n fill: this.themeConfig.quadrantYAxisTextFill,\n x: this.config.yAxisPosition === \"left\" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding,\n y: quadrantTop + quadrantHalfHeight - (drawAxisLabelInMiddle ? quadrantHalfHeight / 2 : 0),\n fontSize: this.config.yAxisLabelFontSize,\n verticalPos: drawAxisLabelInMiddle ? \"center\" : \"left\",\n horizontalPos: \"top\",\n rotation: -90\n });\n }\n return axisLabels;\n }\n getQuadrants(spaceData) {\n const { quadrantSpace } = spaceData;\n const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace;\n const quadrants = [\n {\n text: {\n text: this.data.quadrant1Text,\n fill: this.themeConfig.quadrant1TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: \"center\",\n horizontalPos: \"middle\",\n rotation: 0\n },\n x: quadrantLeft + quadrantHalfWidth,\n y: quadrantTop,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant1Fill\n },\n {\n text: {\n text: this.data.quadrant2Text,\n fill: this.themeConfig.quadrant2TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: \"center\",\n horizontalPos: \"middle\",\n rotation: 0\n },\n x: quadrantLeft,\n y: quadrantTop,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant2Fill\n },\n {\n text: {\n text: this.data.quadrant3Text,\n fill: this.themeConfig.quadrant3TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: \"center\",\n horizontalPos: \"middle\",\n rotation: 0\n },\n x: quadrantLeft,\n y: quadrantTop + quadrantHalfHeight,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant3Fill\n },\n {\n text: {\n text: this.data.quadrant4Text,\n fill: this.themeConfig.quadrant4TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: \"center\",\n horizontalPos: \"middle\",\n rotation: 0\n },\n x: quadrantLeft + quadrantHalfWidth,\n y: quadrantTop + quadrantHalfHeight,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant4Fill\n }\n ];\n for (const quadrant of quadrants) {\n quadrant.text.x = quadrant.x + quadrant.width / 2;\n if (this.data.points.length === 0) {\n quadrant.text.y = quadrant.y + quadrant.height / 2;\n quadrant.text.horizontalPos = \"middle\";\n } else {\n quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding;\n quadrant.text.horizontalPos = \"top\";\n }\n }\n return quadrants;\n }\n getQuadrantPoints(spaceData) {\n const { quadrantSpace } = spaceData;\n const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace;\n const xAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__.scaleLinear)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]);\n const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__.scaleLinear)().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]);\n const points = this.data.points.map((point) => {\n const props = {\n x: xAxis(point.x),\n y: yAxis(point.y),\n fill: this.themeConfig.quadrantPointFill,\n radius: this.config.pointRadius,\n text: {\n text: point.text,\n fill: this.themeConfig.quadrantPointTextFill,\n x: xAxis(point.x),\n y: yAxis(point.y) + this.config.pointTextPadding,\n verticalPos: \"center\",\n horizontalPos: \"top\",\n fontSize: this.config.pointLabelFontSize,\n rotation: 0\n }\n };\n return props;\n });\n return points;\n }\n getBorders(spaceData) {\n const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2;\n const { quadrantSpace } = spaceData;\n const {\n quadrantHalfHeight,\n quadrantHeight,\n quadrantLeft,\n quadrantHalfWidth,\n quadrantTop,\n quadrantWidth\n } = quadrantSpace;\n const borderLines = [\n // top border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft - halfExternalBorderWidth,\n y1: quadrantTop,\n x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,\n y2: quadrantTop\n },\n // right border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft + quadrantWidth,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft + quadrantWidth,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth\n },\n // bottom border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft - halfExternalBorderWidth,\n y1: quadrantTop + quadrantHeight,\n x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,\n y2: quadrantTop + quadrantHeight\n },\n // left border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth\n },\n // vertical inner border\n {\n strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,\n strokeWidth: this.config.quadrantInternalBorderStrokeWidth,\n x1: quadrantLeft + quadrantHalfWidth,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft + quadrantHalfWidth,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth\n },\n // horizontal inner border\n {\n strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,\n strokeWidth: this.config.quadrantInternalBorderStrokeWidth,\n x1: quadrantLeft + halfExternalBorderWidth,\n y1: quadrantTop + quadrantHalfHeight,\n x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth,\n y2: quadrantTop + quadrantHalfHeight\n }\n ];\n return borderLines;\n }\n getTitle(showTitle) {\n if (showTitle) {\n return {\n text: this.data.titleText,\n fill: this.themeConfig.quadrantTitleFill,\n fontSize: this.config.titleFontSize,\n horizontalPos: \"top\",\n verticalPos: \"center\",\n rotation: 0,\n y: this.config.titlePadding,\n x: this.config.chartWidth / 2\n };\n }\n return;\n }\n build() {\n const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText);\n const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText);\n const showTitle = this.config.showTitle && !!this.data.titleText;\n const xAxisPosition = this.data.points.length > 0 ? \"bottom\" : this.config.xAxisPosition;\n const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle);\n return {\n points: this.getQuadrantPoints(calculatedSpace),\n quadrants: this.getQuadrants(calculatedSpace),\n axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace),\n borderLines: this.getBorders(calculatedSpace),\n title: this.getTitle(showTitle)\n };\n }\n}\nconst config = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\nfunction textSanitizer(text) {\n return (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.trim(), config);\n}\nconst quadrantBuilder = new QuadrantBuilder();\nfunction setQuadrant1Text(textObj) {\n quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) });\n}\nfunction setQuadrant2Text(textObj) {\n quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) });\n}\nfunction setQuadrant3Text(textObj) {\n quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) });\n}\nfunction setQuadrant4Text(textObj) {\n quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) });\n}\nfunction setXAxisLeftText(textObj) {\n quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) });\n}\nfunction setXAxisRightText(textObj) {\n quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) });\n}\nfunction setYAxisTopText(textObj) {\n quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) });\n}\nfunction setYAxisBottomText(textObj) {\n quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) });\n}\nfunction addPoint(textObj, x, y) {\n quadrantBuilder.addPoints([{ x, y, text: textSanitizer(textObj.text) }]);\n}\nfunction setWidth(width) {\n quadrantBuilder.setConfig({ chartWidth: width });\n}\nfunction setHeight(height) {\n quadrantBuilder.setConfig({ chartHeight: height });\n}\nfunction getQuadrantData() {\n const config2 = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\n const { themeVariables, quadrantChart: quadrantChartConfig } = config2;\n if (quadrantChartConfig) {\n quadrantBuilder.setConfig(quadrantChartConfig);\n }\n quadrantBuilder.setThemeConfig({\n quadrant1Fill: themeVariables.quadrant1Fill,\n quadrant2Fill: themeVariables.quadrant2Fill,\n quadrant3Fill: themeVariables.quadrant3Fill,\n quadrant4Fill: themeVariables.quadrant4Fill,\n quadrant1TextFill: themeVariables.quadrant1TextFill,\n quadrant2TextFill: themeVariables.quadrant2TextFill,\n quadrant3TextFill: themeVariables.quadrant3TextFill,\n quadrant4TextFill: themeVariables.quadrant4TextFill,\n quadrantPointFill: themeVariables.quadrantPointFill,\n quadrantPointTextFill: themeVariables.quadrantPointTextFill,\n quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill,\n quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill,\n quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill,\n quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill,\n quadrantTitleFill: themeVariables.quadrantTitleFill\n });\n quadrantBuilder.setData({ titleText: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t)() });\n return quadrantBuilder.build();\n}\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nconst clear = function() {\n quadrantBuilder.clear();\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst db = {\n setWidth,\n setHeight,\n setQuadrant1Text,\n setQuadrant2Text,\n setQuadrant3Text,\n setQuadrant4Text,\n setXAxisLeftText,\n setXAxisRightText,\n setYAxisTopText,\n setYAxisBottomText,\n addPoint,\n getQuadrantData,\n parseDirective,\n clear,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b\n};\nconst draw = (txt, id, _version, diagObj) => {\n var _a, _b, _c;\n function getDominantBaseLine(horizontalPos) {\n return horizontalPos === \"top\" ? \"hanging\" : \"middle\";\n }\n function getTextAnchor(verticalPos) {\n return verticalPos === \"left\" ? \"start\" : \"middle\";\n }\n function getTransformation(data) {\n return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`;\n }\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Rendering quadrant chart\\n\" + txt);\n const securityLevel = conf.securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n const group = svg.append(\"g\").attr(\"class\", \"main\");\n const width = ((_a = conf.quadrantChart) == null ? void 0 : _a.chartWidth) || 500;\n const height = ((_b = conf.quadrantChart) == null ? void 0 : _b.chartHeight) || 500;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, height, width, ((_c = conf.quadrantChart) == null ? void 0 : _c.useMaxWidth) || true);\n svg.attr(\"viewBox\", \"0 0 \" + width + \" \" + height);\n diagObj.db.setHeight(height);\n diagObj.db.setWidth(width);\n const quadrantData = diagObj.db.getQuadrantData();\n const quadrantsGroup = group.append(\"g\").attr(\"class\", \"quadrants\");\n const borderGroup = group.append(\"g\").attr(\"class\", \"border\");\n const dataPointGroup = group.append(\"g\").attr(\"class\", \"data-points\");\n const labelGroup = group.append(\"g\").attr(\"class\", \"labels\");\n const titleGroup = group.append(\"g\").attr(\"class\", \"title\");\n if (quadrantData.title) {\n titleGroup.append(\"text\").attr(\"x\", 0).attr(\"y\", 0).attr(\"fill\", quadrantData.title.fill).attr(\"font-size\", quadrantData.title.fontSize).attr(\"dominant-baseline\", getDominantBaseLine(quadrantData.title.horizontalPos)).attr(\"text-anchor\", getTextAnchor(quadrantData.title.verticalPos)).attr(\"transform\", getTransformation(quadrantData.title)).text(quadrantData.title.text);\n }\n if (quadrantData.borderLines) {\n borderGroup.selectAll(\"line\").data(quadrantData.borderLines).enter().append(\"line\").attr(\"x1\", (data) => data.x1).attr(\"y1\", (data) => data.y1).attr(\"x2\", (data) => data.x2).attr(\"y2\", (data) => data.y2).style(\"stroke\", (data) => data.strokeFill).style(\"stroke-width\", (data) => data.strokeWidth);\n }\n const quadrants = quadrantsGroup.selectAll(\"g.quadrant\").data(quadrantData.quadrants).enter().append(\"g\").attr(\"class\", \"quadrant\");\n quadrants.append(\"rect\").attr(\"x\", (data) => data.x).attr(\"y\", (data) => data.y).attr(\"width\", (data) => data.width).attr(\"height\", (data) => data.height).attr(\"fill\", (data) => data.fill);\n quadrants.append(\"text\").attr(\"x\", 0).attr(\"y\", 0).attr(\"fill\", (data) => data.text.fill).attr(\"font-size\", (data) => data.text.fontSize).attr(\n \"dominant-baseline\",\n (data) => getDominantBaseLine(data.text.horizontalPos)\n ).attr(\"text-anchor\", (data) => getTextAnchor(data.text.verticalPos)).attr(\"transform\", (data) => getTransformation(data.text)).text((data) => data.text.text);\n const labels = labelGroup.selectAll(\"g.label\").data(quadrantData.axisLabels).enter().append(\"g\").attr(\"class\", \"label\");\n labels.append(\"text\").attr(\"x\", 0).attr(\"y\", 0).text((data) => data.text).attr(\"fill\", (data) => data.fill).attr(\"font-size\", (data) => data.fontSize).attr(\"dominant-baseline\", (data) => getDominantBaseLine(data.horizontalPos)).attr(\"text-anchor\", (data) => getTextAnchor(data.verticalPos)).attr(\"transform\", (data) => getTransformation(data));\n const dataPoints = dataPointGroup.selectAll(\"g.data-point\").data(quadrantData.points).enter().append(\"g\").attr(\"class\", \"data-point\");\n dataPoints.append(\"circle\").attr(\"cx\", (data) => data.x).attr(\"cy\", (data) => data.y).attr(\"r\", (data) => data.radius).attr(\"fill\", (data) => data.fill);\n dataPoints.append(\"text\").attr(\"x\", 0).attr(\"y\", 0).text((data) => data.text.text).attr(\"fill\", (data) => data.text.fill).attr(\"font-size\", (data) => data.text.fontSize).attr(\n \"dominant-baseline\",\n (data) => getDominantBaseLine(data.text.horizontalPos)\n ).attr(\"text-anchor\", (data) => getTextAnchor(data.text.verticalPos)).attr(\"transform\", (data) => getTransformation(data.text));\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles: () => \"\"\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9xdWFkcmFudERpYWdyYW0tZmQ3MGYyZDAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFzVDtBQUM3UTtBQUN0QjtBQUNKO0FBQ2tCO0FBQ2Q7QUFDSDtBQUNjO0FBQ2Q7QUFDYztBQUM5QjtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQixLQUFLO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVO0FBQ1YsZ0JBQWdCLG8vQkFBby9CO0FBQ3BnQyxrQkFBa0Isc3JCQUFzckI7QUFDeHNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLDZFQUE2RSxJQUFJLFFBQVEsSUFBSSw4RUFBOEUsSUFBSSw4RUFBOEUsSUFBSSw4RUFBOEUsbUJBQW1CLE9BQU8sd0RBQXdELHFCQUFxQixJQUFJLGFBQWEsSUFBSSxXQUFXLElBQUksV0FBVyxJQUFJLFdBQVcsZ0JBQWdCLHlUQUF5VCxLQUFLLDhCQUE4QiwwQ0FBMEMsa0NBQWtDLGdCQUFnQix1U0FBdVMsd0RBQXdELGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSx1REFBdUQscUlBQXFJLElBQUkscUlBQXFJLElBQUkscUlBQXFJLElBQUkscUlBQXFJLElBQUkscUlBQXFJLElBQUkscUlBQXFJLElBQUksaUpBQWlKLG1RQUFtUSxxQkFBcUIsd0hBQXdILGlKQUFpSixxQkFBcUIsaUpBQWlKLHFCQUFxQixvSUFBb0kscUJBQXFCLG9JQUFvSSxxQkFBcUIsb0lBQW9JLHFCQUFxQixvSUFBb0ksS0FBSyxhQUFhLHdFQUF3RSxpQkFBaUIsSUFBSSxhQUFhLG9CQUFvQixxSUFBcUkscUJBQXFCLHFJQUFxSSxLQUFLLGFBQWEscUNBQXFDLG9JQUFvSSxxQkFBcUIsb0lBQW9JO0FBQ3A0SSxzQkFBc0IsOERBQThEO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNB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QUFlLHVEQUFTO0FBQ3hCLEVBQUUseURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMENBQU07QUFDM0I7QUFDQSw2Q0FBNkMsMENBQU0sbURBQW1ELDBDQUFNO0FBQzVHLGtDQUFrQyxHQUFHO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLEVBQUUsdURBQWdCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvcXVhZHJhbnREaWFncmFtLWZkNzBmMmQwLmpzPzNjNjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQyBhcyBnZXRUaGVtZVZhcmlhYmxlcywgRCBhcyBkZWZhdWx0Q29uZmlnLCBsIGFzIGxvZywgcyBhcyBzZXRBY2NUaXRsZSwgZyBhcyBnZXRBY2NUaXRsZSwgciBhcyBzZXREaWFncmFtVGl0bGUsIHQgYXMgZ2V0RGlhZ3JhbVRpdGxlLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCBjIGFzIGdldENvbmZpZywgbSBhcyBtZXJtYWlkQVBJLCB2IGFzIGNsZWFyJDEsIGQgYXMgc2FuaXRpemVUZXh0LCBpIGFzIGNvbmZpZ3VyZVN2Z1NpemUgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciwgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpXG4gICAgICA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCAkVjAgPSBbMSwgM10sICRWMSA9IFsxLCA1XSwgJFYyID0gWzEsIDZdLCAkVjMgPSBbMSwgN10sICRWNCA9IFsxLCA4XSwgJFY1ID0gWzEsIDEwXSwgJFY2ID0gWzEsIDUsIDE0LCAxNiwgMTgsIDIwLCAyMSwgMjYsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzgsIDM5LCA0MCwgNDEsIDQ3LCA0OCwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwXSwgJFY3ID0gWzEsIDUsIDcsIDE0LCAxNiwgMTgsIDIwLCAyMSwgMjYsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzgsIDM5LCA0MCwgNDEsIDQ3LCA0OCwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwXSwgJFY4ID0gWzM4LCAzOSwgNDBdLCAkVjkgPSBbMiwgOF0sICRWYSA9IFsxLCAxOV0sICRWYiA9IFsxLCAyM10sICRWYyA9IFsxLCAyNF0sICRWZCA9IFsxLCAyNV0sICRWZSA9IFsxLCAyNl0sICRWZiA9IFsxLCAyN10sICRWZyA9IFsxLCAyOV0sICRWaCA9IFsxLCAzMF0sICRWaSA9IFsxLCAzMV0sICRWaiA9IFsxLCAzMl0sICRWayA9IFsxLCAzM10sICRWbCA9IFsxLCAzNF0sICRWbSA9IFsxLCAzN10sICRWbiA9IFsxLCAzOF0sICRWbyA9IFsxLCAzOV0sICRWcCA9IFsxLCA0MF0sICRWcSA9IFsxLCA0MV0sICRWciA9IFsxLCA0Ml0sICRWcyA9IFsxLCA0M10sICRWdCA9IFsxLCA0NF0sICRWdSA9IFsxLCA0NV0sICRWdiA9IFsxLCA0Nl0sICRWdyA9IFsxLCA0N10sICRWeCA9IFsxLCA0OF0sICRWeSA9IFsxLCA0OV0sICRWeiA9IFsxLCA1Ml0sICRWQSA9IFsxLCA2N10sICRWQiA9IFsxLCA2OF0sICRWQyA9IFs1LCAyMywgMjcsIDM4LCAzOSwgNDAsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjFdLCAkVkQgPSBbNSwgNywgMzgsIDM5LCA0MCwgNDFdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZW9sXCI6IDQsIFwiU1BBQ0VcIjogNSwgXCJkaXJlY3RpdmVcIjogNiwgXCJRVUFEUkFOVFwiOiA3LCBcImRvY3VtZW50XCI6IDgsIFwibGluZVwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJheGlzRGV0YWlsc1wiOiAxMSwgXCJxdWFkcmFudERldGFpbHNcIjogMTIsIFwicG9pbnRzXCI6IDEzLCBcInRpdGxlXCI6IDE0LCBcInRpdGxlX3ZhbHVlXCI6IDE1LCBcImFjY190aXRsZVwiOiAxNiwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMTcsIFwiYWNjX2Rlc2NyXCI6IDE4LCBcImFjY19kZXNjcl92YWx1ZVwiOiAxOSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDIwLCBcInNlY3Rpb25cIjogMjEsIFwidGV4dFwiOiAyMiwgXCJwb2ludF9zdGFydFwiOiAyMywgXCJwb2ludF94XCI6IDI0LCBcInBvaW50X3lcIjogMjUsIFwiWC1BWElTXCI6IDI2LCBcIkFYSVMtVEVYVC1ERUxJTUlURVJcIjogMjcsIFwiWS1BWElTXCI6IDI4LCBcIlFVQURSQU5UXzFcIjogMjksIFwiUVVBRFJBTlRfMlwiOiAzMCwgXCJRVUFEUkFOVF8zXCI6IDMxLCBcIlFVQURSQU5UXzRcIjogMzIsIFwib3BlbkRpcmVjdGl2ZVwiOiAzMywgXCJ0eXBlRGlyZWN0aXZlXCI6IDM0LCBcImNsb3NlRGlyZWN0aXZlXCI6IDM1LCBcIjpcIjogMzYsIFwiYXJnRGlyZWN0aXZlXCI6IDM3LCBcIk5FV0xJTkVcIjogMzgsIFwiU0VNSVwiOiAzOSwgXCJFT0ZcIjogNDAsIFwib3Blbl9kaXJlY3RpdmVcIjogNDEsIFwidHlwZV9kaXJlY3RpdmVcIjogNDIsIFwiYXJnX2RpcmVjdGl2ZVwiOiA0MywgXCJjbG9zZV9kaXJlY3RpdmVcIjogNDQsIFwiYWxwaGFOdW1Ub2tlblwiOiA0NSwgXCJ0ZXh0Tm9UYWdzVG9rZW5cIjogNDYsIFwiU1RSXCI6IDQ3LCBcIk1EX1NUUlwiOiA0OCwgXCJhbHBoYU51bVwiOiA0OSwgXCJQVU5DVFVBVElPTlwiOiA1MCwgXCJBTVBcIjogNTEsIFwiTlVNXCI6IDUyLCBcIkFMUEhBXCI6IDUzLCBcIkNPTU1BXCI6IDU0LCBcIlBMVVNcIjogNTUsIFwiRVFVQUxTXCI6IDU2LCBcIk1VTFRcIjogNTcsIFwiRE9UXCI6IDU4LCBcIkJSS1RcIjogNTksIFwiVU5ERVJTQ09SRVwiOiA2MCwgXCJNSU5VU1wiOiA2MSwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDU6IFwiU1BBQ0VcIiwgNzogXCJRVUFEUkFOVFwiLCAxNDogXCJ0aXRsZVwiLCAxNTogXCJ0aXRsZV92YWx1ZVwiLCAxNjogXCJhY2NfdGl0bGVcIiwgMTc6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDE4OiBcImFjY19kZXNjclwiLCAxOTogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMjA6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAyMTogXCJzZWN0aW9uXCIsIDIzOiBcInBvaW50X3N0YXJ0XCIsIDI0OiBcInBvaW50X3hcIiwgMjU6IFwicG9pbnRfeVwiLCAyNjogXCJYLUFYSVNcIiwgMjc6IFwiQVhJUy1URVhULURFTElNSVRFUlwiLCAyODogXCJZLUFYSVNcIiwgMjk6IFwiUVVBRFJBTlRfMVwiLCAzMDogXCJRVUFEUkFOVF8yXCIsIDMxOiBcIlFVQURSQU5UXzNcIiwgMzI6IFwiUVVBRFJBTlRfNFwiLCAzNjogXCI6XCIsIDM4OiBcIk5FV0xJTkVcIiwgMzk6IFwiU0VNSVwiLCA0MDogXCJFT0ZcIiwgNDE6IFwib3Blbl9kaXJlY3RpdmVcIiwgNDI6IFwidHlwZV9kaXJlY3RpdmVcIiwgNDM6IFwiYXJnX2RpcmVjdGl2ZVwiLCA0NDogXCJjbG9zZV9kaXJlY3RpdmVcIiwgNDc6IFwiU1RSXCIsIDQ4OiBcIk1EX1NUUlwiLCA1MDogXCJQVU5DVFVBVElPTlwiLCA1MTogXCJBTVBcIiwgNTI6IFwiTlVNXCIsIDUzOiBcIkFMUEhBXCIsIDU0OiBcIkNPTU1BXCIsIDU1OiBcIlBMVVNcIiwgNTY6IFwiRVFVQUxTXCIsIDU3OiBcIk1VTFRcIiwgNTg6IFwiRE9UXCIsIDU5OiBcIkJSS1RcIiwgNjA6IFwiVU5ERVJTQ09SRVwiLCA2MTogXCJNSU5VU1wiIH0sXG4gICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDJdLCBbMywgMl0sIFszLCAyXSwgWzMsIDJdLCBbOCwgMF0sIFs4LCAyXSwgWzksIDJdLCBbMTAsIDBdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTMsIDRdLCBbMTEsIDRdLCBbMTEsIDNdLCBbMTEsIDJdLCBbMTEsIDRdLCBbMTEsIDNdLCBbMTEsIDJdLCBbMTIsIDJdLCBbMTIsIDJdLCBbMTIsIDJdLCBbMTIsIDJdLCBbNiwgM10sIFs2LCA1XSwgWzQsIDFdLCBbNCwgMV0sIFs0LCAxXSwgWzMzLCAxXSwgWzM0LCAxXSwgWzM3LCAxXSwgWzM1LCAxXSwgWzIyLCAxXSwgWzIyLCAyXSwgWzIyLCAxXSwgWzIyLCAxXSwgWzQ5LCAxXSwgWzQ5LCAyXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ1LCAxXSwgWzQ2LCAxXSwgWzQ2LCAxXSwgWzQ2LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB5eS5zZXRYQXhpc0xlZnRUZXh0KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnNldFhBeGlzUmlnaHRUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ICs9IFwiIOKftiBcIjtcbiAgICAgICAgICB5eS5zZXRYQXhpc0xlZnRUZXh0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHl5LnNldFhBeGlzTGVmdFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5zZXRZQXhpc0JvdHRvbVRleHQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0WUF4aXNUb3BUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ICs9IFwiIOKftiBcIjtcbiAgICAgICAgICB5eS5zZXRZQXhpc0JvdHRvbVRleHQoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgeXkuc2V0WUF4aXNCb3R0b21UZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgeXkuc2V0UXVhZHJhbnQxVGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHl5LnNldFF1YWRyYW50MlRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICB5eS5zZXRRdWFkcmFudDNUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgeXkuc2V0UXVhZHJhbnQ0VGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwiJSV7XCIsIFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICQkWyQwXSA9ICQkWyQwXS50cmltKCkucmVwbGFjZSgvJy9nLCAnXCInKTtcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIn0lJVwiLCBcImNsb3NlX2RpcmVjdGl2ZVwiLCBcInF1YWRyYW50Q2hhcnRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMCAtIDFdLnRleHQgKyBcIlwiICsgJCRbJDBdLCB0eXBlOiAkJFskMCAtIDFdLnR5cGUgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJtYXJrZG93blwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyBcIlwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDU6ICRWMCwgNjogNCwgNzogJFYxLCAzMzogOSwgMzg6ICRWMiwgMzk6ICRWMywgNDA6ICRWNCwgNDE6ICRWNSB9LCB7IDE6IFszXSB9LCB7IDM6IDExLCA0OiAyLCA1OiAkVjAsIDY6IDQsIDc6ICRWMSwgMzM6IDksIDM4OiAkVjIsIDM5OiAkVjMsIDQwOiAkVjQsIDQxOiAkVjUgfSwgeyAzOiAxMiwgNDogMiwgNTogJFYwLCA2OiA0LCA3OiAkVjEsIDMzOiA5LCAzODogJFYyLCAzOTogJFYzLCA0MDogJFY0LCA0MTogJFY1IH0sIHsgMzogMTMsIDQ6IDIsIDU6ICRWMCwgNjogNCwgNzogJFYxLCAzMzogOSwgMzg6ICRWMiwgMzk6ICRWMywgNDA6ICRWNCwgNDE6ICRWNSB9LCBvKCRWNiwgWzIsIDVdLCB7IDg6IDE0IH0pLCBvKCRWNywgWzIsIDMyXSksIG8oJFY3LCBbMiwgMzNdKSwgbygkVjcsIFsyLCAzNF0pLCB7IDM0OiAxNSwgNDI6IFsxLCAxNl0gfSwgeyA0MjogWzIsIDM1XSB9LCB7IDE6IFsyLCAxXSB9LCB7IDE6IFsyLCAyXSB9LCB7IDE6IFsyLCAzXSB9LCBvKCRWOCwgJFY5LCB7IDMzOiA5LCA5OiAxNywgMTA6IDE4LCAxMTogMjAsIDEyOiAyMSwgMTM6IDIyLCA2OiAyOCwgMjI6IDM1LCA0NTogMzYsIDE6IFsyLCA0XSwgNTogJFZhLCAxNDogJFZiLCAxNjogJFZjLCAxODogJFZkLCAyMDogJFZlLCAyMTogJFZmLCAyNjogJFZnLCAyODogJFZoLCAyOTogJFZpLCAzMDogJFZqLCAzMTogJFZrLCAzMjogJFZsLCA0MTogJFY1LCA0NzogJFZtLCA0ODogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1MjogJFZxLCA1MzogJFZyLCA1NDogJFZzLCA1NTogJFZ0LCA1NjogJFZ1LCA1NzogJFZ2LCA1ODogJFZ3LCA1OTogJFZ4LCA2MDogJFZ5IH0pLCB7IDM1OiA1MCwgMzY6IFsxLCA1MV0sIDQ0OiAkVnogfSwgbyhbMzYsIDQ0XSwgWzIsIDM2XSksIG8oJFY2LCBbMiwgNl0pLCB7IDQ6IDUzLCAzODogJFYyLCAzOTogJFYzLCA0MDogJFY0IH0sIG8oJFY4LCAkVjksIHsgMzM6IDksIDExOiAyMCwgMTI6IDIxLCAxMzogMjIsIDY6IDI4LCAyMjogMzUsIDQ1OiAzNiwgMTA6IDU0LCA1OiAkVmEsIDE0OiAkVmIsIDE2OiAkVmMsIDE4OiAkVmQsIDIwOiAkVmUsIDIxOiAkVmYsIDI2OiAkVmcsIDI4OiAkVmgsIDI5OiAkVmksIDMwOiAkVmosIDMxOiAkVmssIDMyOiAkVmwsIDQxOiAkVjUsIDQ3OiAkVm0sIDQ4OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnkgfSksIG8oJFY4LCBbMiwgMTBdKSwgbygkVjgsIFsyLCAxMV0pLCBvKCRWOCwgWzIsIDEyXSksIHsgMTU6IFsxLCA1NV0gfSwgeyAxNzogWzEsIDU2XSB9LCB7IDE5OiBbMSwgNTddIH0sIG8oJFY4LCBbMiwgMTZdKSwgbygkVjgsIFsyLCAxN10pLCBvKCRWOCwgWzIsIDE4XSksIHsgMjI6IDU4LCA0NTogMzYsIDQ3OiAkVm0sIDQ4OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnkgfSwgeyAyMjogNTksIDQ1OiAzNiwgNDc6ICRWbSwgNDg6ICRWbiwgNTA6ICRWbywgNTE6ICRWcCwgNTI6ICRWcSwgNTM6ICRWciwgNTQ6ICRWcywgNTU6ICRWdCwgNTY6ICRWdSwgNTc6ICRWdiwgNTg6ICRWdywgNTk6ICRWeCwgNjA6ICRWeSB9LCB7IDIyOiA2MCwgNDU6IDM2LCA0NzogJFZtLCA0ODogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1MjogJFZxLCA1MzogJFZyLCA1NDogJFZzLCA1NTogJFZ0LCA1NjogJFZ1LCA1NzogJFZ2LCA1ODogJFZ3LCA1OTogJFZ4LCA2MDogJFZ5IH0sIHsgMjI6IDYxLCA0NTogMzYsIDQ3OiAkVm0sIDQ4OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnkgfSwgeyAyMjogNjIsIDQ1OiAzNiwgNDc6ICRWbSwgNDg6ICRWbiwgNTA6ICRWbywgNTE6ICRWcCwgNTI6ICRWcSwgNTM6ICRWciwgNTQ6ICRWcywgNTU6ICRWdCwgNTY6ICRWdSwgNTc6ICRWdiwgNTg6ICRWdywgNTk6ICRWeCwgNjA6ICRWeSB9LCB7IDIyOiA2MywgNDU6IDM2LCA0NzogJFZtLCA0ODogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1MjogJFZxLCA1MzogJFZyLCA1NDogJFZzLCA1NTogJFZ0LCA1NjogJFZ1LCA1NzogJFZ2LCA1ODogJFZ3LCA1OTogJFZ4LCA2MDogJFZ5IH0sIHsgNTogJFZBLCAyMzogWzEsIDY0XSwgNDU6IDY2LCA0NjogNjUsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSwgbygkVkMsIFsyLCAzOV0pLCBvKCRWQywgWzIsIDQxXSksIG8oJFZDLCBbMiwgNDJdKSwgbygkVkMsIFsyLCA0NV0pLCBvKCRWQywgWzIsIDQ2XSksIG8oJFZDLCBbMiwgNDddKSwgbygkVkMsIFsyLCA0OF0pLCBvKCRWQywgWzIsIDQ5XSksIG8oJFZDLCBbMiwgNTBdKSwgbygkVkMsIFsyLCA1MV0pLCBvKCRWQywgWzIsIDUyXSksIG8oJFZDLCBbMiwgNTNdKSwgbygkVkMsIFsyLCA1NF0pLCBvKCRWQywgWzIsIDU1XSksIG8oJFZELCBbMiwgMzBdKSwgeyAzNzogNjksIDQzOiBbMSwgNzBdIH0sIG8oJFZELCBbMiwgMzhdKSwgbygkVjYsIFsyLCA3XSksIG8oJFY4LCBbMiwgOV0pLCBvKCRWOCwgWzIsIDEzXSksIG8oJFY4LCBbMiwgMTRdKSwgbygkVjgsIFsyLCAxNV0pLCBvKCRWOCwgWzIsIDIyXSwgeyA0NjogNjUsIDQ1OiA2NiwgNTogJFZBLCAyNzogWzEsIDcxXSwgNTA6ICRWbywgNTE6ICRWcCwgNTI6ICRWcSwgNTM6ICRWciwgNTQ6ICRWcywgNTU6ICRWdCwgNTY6ICRWdSwgNTc6ICRWdiwgNTg6ICRWdywgNTk6ICRWeCwgNjA6ICRWeSwgNjE6ICRWQiB9KSwgbygkVjgsIFsyLCAyNV0sIHsgNDY6IDY1LCA0NTogNjYsIDU6ICRWQSwgMjc6IFsxLCA3Ml0sIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMjZdLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMjddLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMjhdLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMjldLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIHsgMjQ6IFsxLCA3M10gfSwgbygkVkMsIFsyLCA0MF0pLCBvKCRWQywgWzIsIDU2XSksIG8oJFZDLCBbMiwgNTddKSwgbygkVkMsIFsyLCA1OF0pLCB7IDM1OiA3NCwgNDQ6ICRWeiB9LCB7IDQ0OiBbMiwgMzddIH0sIG8oJFY4LCBbMiwgMjFdLCB7IDQ1OiAzNiwgMjI6IDc1LCA0NzogJFZtLCA0ODogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1MjogJFZxLCA1MzogJFZyLCA1NDogJFZzLCA1NTogJFZ0LCA1NjogJFZ1LCA1NzogJFZ2LCA1ODogJFZ3LCA1OTogJFZ4LCA2MDogJFZ5IH0pLCBvKCRWOCwgWzIsIDI0XSwgeyA0NTogMzYsIDIyOiA3NiwgNDc6ICRWbSwgNDg6ICRWbiwgNTA6ICRWbywgNTE6ICRWcCwgNTI6ICRWcSwgNTM6ICRWciwgNTQ6ICRWcywgNTU6ICRWdCwgNTY6ICRWdSwgNTc6ICRWdiwgNTg6ICRWdywgNTk6ICRWeCwgNjA6ICRWeSB9KSwgeyAyNTogWzEsIDc3XSB9LCBvKCRWRCwgWzIsIDMxXSksIG8oJFY4LCBbMiwgMjBdLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMjNdLCB7IDQ2OiA2NSwgNDU6IDY2LCA1OiAkVkEsIDUwOiAkVm8sIDUxOiAkVnAsIDUyOiAkVnEsIDUzOiAkVnIsIDU0OiAkVnMsIDU1OiAkVnQsIDU2OiAkVnUsIDU3OiAkVnYsIDU4OiAkVncsIDU5OiAkVngsIDYwOiAkVnksIDYxOiAkVkIgfSksIG8oJFY4LCBbMiwgMTldKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMTA6IFsyLCAzNV0sIDExOiBbMiwgMV0sIDEyOiBbMiwgMl0sIDEzOiBbMiwgM10sIDcwOiBbMiwgMzddIH0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICB2YXIgc3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGxleGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiBmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiBmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiBmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIDM4O1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ0aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwidGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyODtcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiAzMDtcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgcmV0dXJuIFwiTURfU1RSXCI7XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBvaW50X3N0YXJ0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicG9pbnRfeFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJwb2ludF95XCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgcmV0dXJuIFwiQ09MT05cIjtcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICByZXR1cm4gNTQ7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICByZXR1cm4gNTc7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIHJldHVybiA1OTtcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIDYwO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgcmV0dXJuIDYxO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVsZXM6IFsvXig/OiUlXFx7KS9pLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvaSwgL14oPzo6KS9pLCAvXig/OlxcfSUlKS9pLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbXFxuXFxyXSspL2ksIC9eKD86JSVbXlxcbl0qKS9pLCAvXig/OnRpdGxlXFxiKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzogKngtYXhpcyAqKS9pLCAvXig/OiAqeS1heGlzICopL2ksIC9eKD86ICotLSs+ICopL2ksIC9eKD86ICpxdWFkcmFudC0xICopL2ksIC9eKD86ICpxdWFkcmFudC0yICopL2ksIC9eKD86ICpxdWFkcmFudC0zICopL2ksIC9eKD86ICpxdWFkcmFudC00ICopL2ksIC9eKD86W1wiXVtgXSkvaSwgL14oPzpbXmBcIl0rKS9pLCAvXig/OltgXVtcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKikvaSwgL14oPzpcXHMqOlxccypcXFtcXHMqKS9pLCAvXig/OigxKXwoMCguXFxkKyk/KSkvaSwgL14oPzpcXHMqXFxdICopL2ksIC9eKD86XFxzKixcXHMqKS9pLCAvXig/OigxKXwoMCguXFxkKyk/KSkvaSwgL14oPzogKnF1YWRyYW50Q2hhcnQgKikvaSwgL14oPzpbQS1aYS16XSspL2ksIC9eKD86OikvaSwgL14oPzpcXCspL2ksIC9eKD86LCkvaSwgL14oPzo9KS9pLCAvXig/Oj0pL2ksIC9eKD86XFwqKS9pLCAvXig/OiMpL2ksIC9eKD86W1xcX10pL2ksIC9eKD86XFwuKS9pLCAvXig/OiYpL2ksIC9eKD86LSkvaSwgL14oPzpbMC05XSspL2ksIC9eKD86XFxzKS9pLCAvXig/OjspL2ksIC9eKD86WyFcIiMkJSYnKissLS5gP1xcXFxfL10pL2ksIC9eKD86JCkvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwicG9pbnRfeVwiOiB7IFwicnVsZXNcIjogWzM1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJwb2ludF94XCI6IHsgXCJydWxlc1wiOiBbMzRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInBvaW50X3N0YXJ0XCI6IHsgXCJydWxlc1wiOiBbMzIsIDMzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTYsIDE3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFsxNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMTJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYXJnX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzMsIDRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInR5cGVfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMiwgM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwib3Blbl9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsxXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0aXRsZVwiOiB7IFwicnVsZXNcIjogWzEwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJtZF9zdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyNiwgMjddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzI5LCAzMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDUsIDYsIDcsIDgsIDksIDExLCAxMywgMTUsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjgsIDMxLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG5jb25zdCBwYXJzZXIkMSA9IHBhcnNlcjtcbmNvbnN0IGRlZmF1bHRUaGVtZVZhcmlhYmxlcyA9IGdldFRoZW1lVmFyaWFibGVzKCk7XG5jbGFzcyBRdWFkcmFudEJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdENvbmZpZygpO1xuICAgIHRoaXMudGhlbWVDb25maWcgPSB0aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZ2V0RGVmYXVsdERhdGEoKTtcbiAgfVxuICBnZXREZWZhdWx0RGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGVUZXh0OiBcIlwiLFxuICAgICAgcXVhZHJhbnQxVGV4dDogXCJcIixcbiAgICAgIHF1YWRyYW50MlRleHQ6IFwiXCIsXG4gICAgICBxdWFkcmFudDNUZXh0OiBcIlwiLFxuICAgICAgcXVhZHJhbnQ0VGV4dDogXCJcIixcbiAgICAgIHhBeGlzTGVmdFRleHQ6IFwiXCIsXG4gICAgICB4QXhpc1JpZ2h0VGV4dDogXCJcIixcbiAgICAgIHlBeGlzQm90dG9tVGV4dDogXCJcIixcbiAgICAgIHlBeGlzVG9wVGV4dDogXCJcIixcbiAgICAgIHBvaW50czogW11cbiAgICB9O1xuICB9XG4gIGdldERlZmF1bHRDb25maWcoKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2ksIF9qLCBfaywgX2wsIF9tLCBfbiwgX28sIF9wLCBfcSwgX3I7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dYQXhpczogdHJ1ZSxcbiAgICAgIHNob3dZQXhpczogdHJ1ZSxcbiAgICAgIHNob3dUaXRsZTogdHJ1ZSxcbiAgICAgIGNoYXJ0SGVpZ2h0OiAoKF9hID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2hhcnRXaWR0aCkgfHwgNTAwLFxuICAgICAgY2hhcnRXaWR0aDogKChfYiA9IGRlZmF1bHRDb25maWcucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNoYXJ0SGVpZ2h0KSB8fCA1MDAsXG4gICAgICB0aXRsZVBhZGRpbmc6ICgoX2MgPSBkZWZhdWx0Q29uZmlnLnF1YWRyYW50Q2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYy50aXRsZVBhZGRpbmcpIHx8IDEwLFxuICAgICAgdGl0bGVGb250U2l6ZTogKChfZCA9IGRlZmF1bHRDb25maWcucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLnRpdGxlRm9udFNpemUpIHx8IDIwLFxuICAgICAgcXVhZHJhbnRQYWRkaW5nOiAoKF9lID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2UucXVhZHJhbnRQYWRkaW5nKSB8fCA1LFxuICAgICAgeEF4aXNMYWJlbFBhZGRpbmc6ICgoX2YgPSBkZWZhdWx0Q29uZmlnLnF1YWRyYW50Q2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfZi54QXhpc0xhYmVsUGFkZGluZykgfHwgNSxcbiAgICAgIHlBeGlzTGFiZWxQYWRkaW5nOiAoKF9nID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2cueUF4aXNMYWJlbFBhZGRpbmcpIHx8IDUsXG4gICAgICB4QXhpc0xhYmVsRm9udFNpemU6ICgoX2ggPSBkZWZhdWx0Q29uZmlnLnF1YWRyYW50Q2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfaC54QXhpc0xhYmVsRm9udFNpemUpIHx8IDE2LFxuICAgICAgeUF4aXNMYWJlbEZvbnRTaXplOiAoKF9pID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2kueUF4aXNMYWJlbEZvbnRTaXplKSB8fCAxNixcbiAgICAgIHF1YWRyYW50TGFiZWxGb250U2l6ZTogKChfaiA9IGRlZmF1bHRDb25maWcucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9qLnF1YWRyYW50TGFiZWxGb250U2l6ZSkgfHwgMTYsXG4gICAgICBxdWFkcmFudFRleHRUb3BQYWRkaW5nOiAoKF9rID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2sucXVhZHJhbnRUZXh0VG9wUGFkZGluZykgfHwgNSxcbiAgICAgIHBvaW50VGV4dFBhZGRpbmc6ICgoX2wgPSBkZWZhdWx0Q29uZmlnLnF1YWRyYW50Q2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfbC5wb2ludFRleHRQYWRkaW5nKSB8fCA1LFxuICAgICAgcG9pbnRMYWJlbEZvbnRTaXplOiAoKF9tID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX20ucG9pbnRMYWJlbEZvbnRTaXplKSB8fCAxMixcbiAgICAgIHBvaW50UmFkaXVzOiAoKF9uID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX24ucG9pbnRSYWRpdXMpIHx8IDUsXG4gICAgICB4QXhpc1Bvc2l0aW9uOiAoKF9vID0gZGVmYXVsdENvbmZpZy5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX28ueEF4aXNQb3NpdGlvbikgfHwgXCJ0b3BcIixcbiAgICAgIHlBeGlzUG9zaXRpb246ICgoX3AgPSBkZWZhdWx0Q29uZmlnLnF1YWRyYW50Q2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfcC55QXhpc1Bvc2l0aW9uKSB8fCBcImxlZnRcIixcbiAgICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDogKChfcSA9IGRlZmF1bHRDb25maWcucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9xLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCkgfHwgMSxcbiAgICAgIHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDogKChfciA9IGRlZmF1bHRDb25maWcucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCkgfHwgMlxuICAgIH07XG4gIH1cbiAgZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBxdWFkcmFudDFGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQxRmlsbCxcbiAgICAgIHF1YWRyYW50MkZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDJGaWxsLFxuICAgICAgcXVhZHJhbnQzRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50M0ZpbGwsXG4gICAgICBxdWFkcmFudDRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQ0RmlsbCxcbiAgICAgIHF1YWRyYW50MVRleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQxVGV4dEZpbGwsXG4gICAgICBxdWFkcmFudDJUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50MlRleHRGaWxsLFxuICAgICAgcXVhZHJhbnQzVGV4dEZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDNUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50NFRleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQ0VGV4dEZpbGwsXG4gICAgICBxdWFkcmFudFBvaW50RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50UG9pbnRGaWxsLFxuICAgICAgcXVhZHJhbnRQb2ludFRleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRQb2ludFRleHRGaWxsLFxuICAgICAgcXVhZHJhbnRYQXhpc1RleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRYQXhpc1RleHRGaWxsLFxuICAgICAgcXVhZHJhbnRZQXhpc1RleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRZQXhpc1RleHRGaWxsLFxuICAgICAgcXVhZHJhbnRUaXRsZUZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudFRpdGxlRmlsbCxcbiAgICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICBxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsXG4gICAgfTtcbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdENvbmZpZygpO1xuICAgIHRoaXMudGhlbWVDb25maWcgPSB0aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZ2V0RGVmYXVsdERhdGEoKTtcbiAgICBsb2cuaW5mbyhcImNsZWFyIGNhbGxlZFwiKTtcbiAgfVxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSB7IC4uLnRoaXMuZGF0YSwgLi4uZGF0YSB9O1xuICB9XG4gIGFkZFBvaW50cyhwb2ludHMpIHtcbiAgICB0aGlzLmRhdGEucG9pbnRzID0gWy4uLnBvaW50cywgLi4udGhpcy5kYXRhLnBvaW50c107XG4gIH1cbiAgc2V0Q29uZmlnKGNvbmZpZzIpIHtcbiAgICBsb2cudHJhY2UoXCJzZXRDb25maWcgY2FsbGVkIHdpdGg6IFwiLCBjb25maWcyKTtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIC4uLmNvbmZpZzIgfTtcbiAgfVxuICBzZXRUaGVtZUNvbmZpZyh0aGVtZUNvbmZpZykge1xuICAgIGxvZy50cmFjZShcInNldFRoZW1lQ29uZmlnIGNhbGxlZCB3aXRoOiBcIiwgdGhlbWVDb25maWcpO1xuICAgIHRoaXMudGhlbWVDb25maWcgPSB7IC4uLnRoaXMudGhlbWVDb25maWcsIC4uLnRoZW1lQ29uZmlnIH07XG4gIH1cbiAgY2FsY3VsYXRlU3BhY2UoeEF4aXNQb3NpdGlvbiwgc2hvd1hBeGlzLCBzaG93WUF4aXMsIHNob3dUaXRsZSkge1xuICAgIGNvbnN0IHhBeGlzU3BhY2VDYWxjdWxhdGlvbiA9IHRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nICogMiArIHRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZTtcbiAgICBjb25zdCB4QXhpc1NwYWNlID0ge1xuICAgICAgdG9wOiB4QXhpc1Bvc2l0aW9uID09PSBcInRvcFwiICYmIHNob3dYQXhpcyA/IHhBeGlzU3BhY2VDYWxjdWxhdGlvbiA6IDAsXG4gICAgICBib3R0b206IHhBeGlzUG9zaXRpb24gPT09IFwiYm90dG9tXCIgJiYgc2hvd1hBeGlzID8geEF4aXNTcGFjZUNhbGN1bGF0aW9uIDogMFxuICAgIH07XG4gICAgY29uc3QgeUF4aXNTcGFjZUNhbGN1bGF0aW9uID0gdGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcgKiAyICsgdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplO1xuICAgIGNvbnN0IHlBeGlzU3BhY2UgPSB7XG4gICAgICBsZWZ0OiB0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uID09PSBcImxlZnRcIiAmJiBzaG93WUF4aXMgPyB5QXhpc1NwYWNlQ2FsY3VsYXRpb24gOiAwLFxuICAgICAgcmlnaHQ6IHRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb24gPT09IFwicmlnaHRcIiAmJiBzaG93WUF4aXMgPyB5QXhpc1NwYWNlQ2FsY3VsYXRpb24gOiAwXG4gICAgfTtcbiAgICBjb25zdCB0aXRsZVNwYWNlQ2FsY3VsYXRpb24gPSB0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplICsgdGhpcy5jb25maWcudGl0bGVQYWRkaW5nICogMjtcbiAgICBjb25zdCB0aXRsZVNwYWNlID0ge1xuICAgICAgdG9wOiBzaG93VGl0bGUgPyB0aXRsZVNwYWNlQ2FsY3VsYXRpb24gOiAwXG4gICAgfTtcbiAgICBjb25zdCBxdWFkcmFudExlZnQgPSB0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcgKyB5QXhpc1NwYWNlLmxlZnQ7XG4gICAgY29uc3QgcXVhZHJhbnRUb3AgPSB0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcgKyB4QXhpc1NwYWNlLnRvcCArIHRpdGxlU3BhY2UudG9wO1xuICAgIGNvbnN0IHF1YWRyYW50V2lkdGggPSB0aGlzLmNvbmZpZy5jaGFydFdpZHRoIC0gdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nICogMiAtIHlBeGlzU3BhY2UubGVmdCAtIHlBeGlzU3BhY2UucmlnaHQ7XG4gICAgY29uc3QgcXVhZHJhbnRIZWlnaHQgPSB0aGlzLmNvbmZpZy5jaGFydEhlaWdodCAtIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyAqIDIgLSB4QXhpc1NwYWNlLnRvcCAtIHhBeGlzU3BhY2UuYm90dG9tIC0gdGl0bGVTcGFjZS50b3A7XG4gICAgY29uc3QgcXVhZHJhbnRIYWxmV2lkdGggPSBxdWFkcmFudFdpZHRoIC8gMjtcbiAgICBjb25zdCBxdWFkcmFudEhhbGZIZWlnaHQgPSBxdWFkcmFudEhlaWdodCAvIDI7XG4gICAgY29uc3QgcXVhZHJhbnRTcGFjZSA9IHtcbiAgICAgIHF1YWRyYW50TGVmdCxcbiAgICAgIHF1YWRyYW50VG9wLFxuICAgICAgcXVhZHJhbnRXaWR0aCxcbiAgICAgIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgcXVhZHJhbnRIZWlnaHQsXG4gICAgICBxdWFkcmFudEhhbGZIZWlnaHRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB4QXhpc1NwYWNlLFxuICAgICAgeUF4aXNTcGFjZSxcbiAgICAgIHRpdGxlU3BhY2UsXG4gICAgICBxdWFkcmFudFNwYWNlXG4gICAgfTtcbiAgfVxuICBnZXRBeGlzTGFiZWxzKHhBeGlzUG9zaXRpb24sIHNob3dYQXhpcywgc2hvd1lBeGlzLCBzcGFjZURhdGEpIHtcbiAgICBjb25zdCB7IHF1YWRyYW50U3BhY2UsIHRpdGxlU3BhY2UgfSA9IHNwYWNlRGF0YTtcbiAgICBjb25zdCB7XG4gICAgICBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICBxdWFkcmFudEhlaWdodCxcbiAgICAgIHF1YWRyYW50TGVmdCxcbiAgICAgIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgcXVhZHJhbnRUb3AsXG4gICAgICBxdWFkcmFudFdpZHRoXG4gICAgfSA9IHF1YWRyYW50U3BhY2U7XG4gICAgY29uc3QgZHJhd0F4aXNMYWJlbEluTWlkZGxlID0gdGhpcy5kYXRhLnBvaW50cy5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgYXhpc0xhYmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCAmJiBzaG93WEF4aXMpIHtcbiAgICAgIGF4aXNMYWJlbHMucHVzaCh7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgKGRyYXdBeGlzTGFiZWxJbk1pZGRsZSA/IHF1YWRyYW50SGFsZldpZHRoIC8gMiA6IDApLFxuICAgICAgICB5OiB4QXhpc1Bvc2l0aW9uID09PSBcInRvcFwiID8gdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyB0aXRsZVNwYWNlLnRvcCA6IHRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSxcbiAgICAgICAgdmVydGljYWxQb3M6IGRyYXdBeGlzTGFiZWxJbk1pZGRsZSA/IFwiY2VudGVyXCIgOiBcImxlZnRcIixcbiAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgcm90YXRpb246IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0ICYmIHNob3dYQXhpcykge1xuICAgICAgYXhpc0xhYmVscy5wdXNoKHtcbiAgICAgICAgdGV4dDogdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRIYWxmV2lkdGggKyAoZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gcXVhZHJhbnRIYWxmV2lkdGggLyAyIDogMCksXG4gICAgICAgIHk6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgPyB0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZyArIHRpdGxlU3BhY2UudG9wIDogdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0ICsgdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0ICYmIHNob3dZQXhpcykge1xuICAgICAgYXhpc0xhYmVscy5wdXNoKHtcbiAgICAgICAgdGV4dDogdGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwsXG4gICAgICAgIHg6IHRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb24gPT09IFwibGVmdFwiID8gdGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcgOiB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyArIHF1YWRyYW50TGVmdCArIHF1YWRyYW50V2lkdGggKyB0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIZWlnaHQgLSAoZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gcXVhZHJhbnRIYWxmSGVpZ2h0IC8gMiA6IDApLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogLTkwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS55QXhpc1RvcFRleHQgJiYgc2hvd1lBeGlzKSB7XG4gICAgICBheGlzTGFiZWxzLnB1c2goe1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEueUF4aXNUb3BUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyA6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQgLSAoZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gcXVhZHJhbnRIYWxmSGVpZ2h0IC8gMiA6IDApLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd0F4aXNMYWJlbEluTWlkZGxlID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogLTkwXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGF4aXNMYWJlbHM7XG4gIH1cbiAgZ2V0UXVhZHJhbnRzKHNwYWNlRGF0YSkge1xuICAgIGNvbnN0IHsgcXVhZHJhbnRTcGFjZSB9ID0gc3BhY2VEYXRhO1xuICAgIGNvbnN0IHsgcXVhZHJhbnRIYWxmSGVpZ2h0LCBxdWFkcmFudExlZnQsIHF1YWRyYW50SGFsZldpZHRoLCBxdWFkcmFudFRvcCB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCBxdWFkcmFudHMgPSBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgcm90YXRpb246IDBcbiAgICAgICAgfSxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wLFxuICAgICAgICB3aWR0aDogcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIGhlaWdodDogcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLmRhdGEucXVhZHJhbnQyVGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgcm90YXRpb246IDBcbiAgICAgICAgfSxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0LFxuICAgICAgICB5OiBxdWFkcmFudFRvcCxcbiAgICAgICAgd2lkdGg6IHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogdGhpcy5kYXRhLnF1YWRyYW50M1RleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDNUZXh0RmlsbCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIHdpZHRoOiBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDoge1xuICAgICAgICAgIHRleHQ6IHRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LFxuICAgICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0VGV4dEZpbGwsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJtaWRkbGVcIixcbiAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICB9LFxuICAgICAgICB4OiBxdWFkcmFudExlZnQgKyBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIHdpZHRoOiBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbFxuICAgICAgfVxuICAgIF07XG4gICAgZm9yIChjb25zdCBxdWFkcmFudCBvZiBxdWFkcmFudHMpIHtcbiAgICAgIHF1YWRyYW50LnRleHQueCA9IHF1YWRyYW50LnggKyBxdWFkcmFudC53aWR0aCAvIDI7XG4gICAgICBpZiAodGhpcy5kYXRhLnBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcXVhZHJhbnQudGV4dC55ID0gcXVhZHJhbnQueSArIHF1YWRyYW50LmhlaWdodCAvIDI7XG4gICAgICAgIHF1YWRyYW50LnRleHQuaG9yaXpvbnRhbFBvcyA9IFwibWlkZGxlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWFkcmFudC50ZXh0LnkgPSBxdWFkcmFudC55ICsgdGhpcy5jb25maWcucXVhZHJhbnRUZXh0VG9wUGFkZGluZztcbiAgICAgICAgcXVhZHJhbnQudGV4dC5ob3Jpem9udGFsUG9zID0gXCJ0b3BcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1YWRyYW50cztcbiAgfVxuICBnZXRRdWFkcmFudFBvaW50cyhzcGFjZURhdGEpIHtcbiAgICBjb25zdCB7IHF1YWRyYW50U3BhY2UgfSA9IHNwYWNlRGF0YTtcbiAgICBjb25zdCB7IHF1YWRyYW50SGVpZ2h0LCBxdWFkcmFudExlZnQsIHF1YWRyYW50VG9wLCBxdWFkcmFudFdpZHRoIH0gPSBxdWFkcmFudFNwYWNlO1xuICAgIGNvbnN0IHhBeGlzID0gc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIDFdKS5yYW5nZShbcXVhZHJhbnRMZWZ0LCBxdWFkcmFudFdpZHRoICsgcXVhZHJhbnRMZWZ0XSk7XG4gICAgY29uc3QgeUF4aXMgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihbMCwgMV0pLnJhbmdlKFtxdWFkcmFudEhlaWdodCArIHF1YWRyYW50VG9wLCBxdWFkcmFudFRvcF0pO1xuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuZGF0YS5wb2ludHMubWFwKChwb2ludCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIHg6IHhBeGlzKHBvaW50LngpLFxuICAgICAgICB5OiB5QXhpcyhwb2ludC55KSxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50RmlsbCxcbiAgICAgICAgcmFkaXVzOiB0aGlzLmNvbmZpZy5wb2ludFJhZGl1cyxcbiAgICAgICAgdGV4dDoge1xuICAgICAgICAgIHRleHQ6IHBvaW50LnRleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwsXG4gICAgICAgICAgeDogeEF4aXMocG9pbnQueCksXG4gICAgICAgICAgeTogeUF4aXMocG9pbnQueSkgKyB0aGlzLmNvbmZpZy5wb2ludFRleHRQYWRkaW5nLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH0pO1xuICAgIHJldHVybiBwb2ludHM7XG4gIH1cbiAgZ2V0Qm9yZGVycyhzcGFjZURhdGEpIHtcbiAgICBjb25zdCBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCA9IHRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCAvIDI7XG4gICAgY29uc3QgeyBxdWFkcmFudFNwYWNlIH0gPSBzcGFjZURhdGE7XG4gICAgY29uc3Qge1xuICAgICAgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgcXVhZHJhbnRIZWlnaHQsXG4gICAgICBxdWFkcmFudExlZnQsXG4gICAgICBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgIHF1YWRyYW50VG9wLFxuICAgICAgcXVhZHJhbnRXaWR0aFxuICAgIH0gPSBxdWFkcmFudFNwYWNlO1xuICAgIGNvbnN0IGJvcmRlckxpbmVzID0gW1xuICAgICAgLy8gdG9wIGJvcmRlclxuICAgICAge1xuICAgICAgICBzdHJva2VGaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLFxuICAgICAgICB4MTogcXVhZHJhbnRMZWZ0IC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkxOiBxdWFkcmFudFRvcCxcbiAgICAgICAgeDI6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50V2lkdGggKyBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeTI6IHF1YWRyYW50VG9wXG4gICAgICB9LFxuICAgICAgLy8gcmlnaHQgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoLFxuICAgICAgICB5MTogcXVhZHJhbnRUb3AgKyBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeDI6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50V2lkdGgsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0IC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGhcbiAgICAgIH0sXG4gICAgICAvLyBib3R0b20gYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgLSBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIZWlnaHQsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0XG4gICAgICB9LFxuICAgICAgLy8gbGVmdCBib3JkZXJcbiAgICAgIHtcbiAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCxcbiAgICAgICAgeDE6IHF1YWRyYW50TGVmdCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0IC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGhcbiAgICAgIH0sXG4gICAgICAvLyB2ZXJ0aWNhbCBpbm5lciBib3JkZXJcbiAgICAgIHtcbiAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCxcbiAgICAgICAgeDE6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICB5MTogcXVhZHJhbnRUb3AgKyBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeDI6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoXG4gICAgICB9LFxuICAgICAgLy8gaG9yaXpvbnRhbCBpbm5lciBib3JkZXJcbiAgICAgIHtcbiAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCxcbiAgICAgICAgeDE6IHF1YWRyYW50TGVmdCArIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoIC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGFsZkhlaWdodFxuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIGJvcmRlckxpbmVzO1xuICB9XG4gIGdldFRpdGxlKHNob3dUaXRsZSkge1xuICAgIGlmIChzaG93VGl0bGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS50aXRsZVRleHQsXG4gICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIHk6IHRoaXMuY29uZmlnLnRpdGxlUGFkZGluZyxcbiAgICAgICAgeDogdGhpcy5jb25maWcuY2hhcnRXaWR0aCAvIDJcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBidWlsZCgpIHtcbiAgICBjb25zdCBzaG93WEF4aXMgPSB0aGlzLmNvbmZpZy5zaG93WEF4aXMgJiYgISEodGhpcy5kYXRhLnhBeGlzTGVmdFRleHQgfHwgdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KTtcbiAgICBjb25zdCBzaG93WUF4aXMgPSB0aGlzLmNvbmZpZy5zaG93WUF4aXMgJiYgISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dCB8fCB0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KTtcbiAgICBjb25zdCBzaG93VGl0bGUgPSB0aGlzLmNvbmZpZy5zaG93VGl0bGUgJiYgISF0aGlzLmRhdGEudGl0bGVUZXh0O1xuICAgIGNvbnN0IHhBeGlzUG9zaXRpb24gPSB0aGlzLmRhdGEucG9pbnRzLmxlbmd0aCA+IDAgPyBcImJvdHRvbVwiIDogdGhpcy5jb25maWcueEF4aXNQb3NpdGlvbjtcbiAgICBjb25zdCBjYWxjdWxhdGVkU3BhY2UgPSB0aGlzLmNhbGN1bGF0ZVNwYWNlKHhBeGlzUG9zaXRpb24sIHNob3dYQXhpcywgc2hvd1lBeGlzLCBzaG93VGl0bGUpO1xuICAgIHJldHVybiB7XG4gICAgICBwb2ludHM6IHRoaXMuZ2V0UXVhZHJhbnRQb2ludHMoY2FsY3VsYXRlZFNwYWNlKSxcbiAgICAgIHF1YWRyYW50czogdGhpcy5nZXRRdWFkcmFudHMoY2FsY3VsYXRlZFNwYWNlKSxcbiAgICAgIGF4aXNMYWJlbHM6IHRoaXMuZ2V0QXhpc0xhYmVscyh4QXhpc1Bvc2l0aW9uLCBzaG93WEF4aXMsIHNob3dZQXhpcywgY2FsY3VsYXRlZFNwYWNlKSxcbiAgICAgIGJvcmRlckxpbmVzOiB0aGlzLmdldEJvcmRlcnMoY2FsY3VsYXRlZFNwYWNlKSxcbiAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKHNob3dUaXRsZSlcbiAgICB9O1xuICB9XG59XG5jb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbmZ1bmN0aW9uIHRleHRTYW5pdGl6ZXIodGV4dCkge1xuICByZXR1cm4gc2FuaXRpemVUZXh0KHRleHQudHJpbSgpLCBjb25maWcpO1xufVxuY29uc3QgcXVhZHJhbnRCdWlsZGVyID0gbmV3IFF1YWRyYW50QnVpbGRlcigpO1xuZnVuY3Rpb24gc2V0UXVhZHJhbnQxVGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQxVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0UXVhZHJhbnQyVGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQyVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0UXVhZHJhbnQzVGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQzVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0UXVhZHJhbnQ0VGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQ0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0WEF4aXNMZWZ0VGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgeEF4aXNMZWZ0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0WEF4aXNSaWdodFRleHQodGV4dE9iaikge1xuICBxdWFkcmFudEJ1aWxkZXIuc2V0RGF0YSh7IHhBeGlzUmlnaHRUZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfSk7XG59XG5mdW5jdGlvbiBzZXRZQXhpc1RvcFRleHQodGV4dE9iaikge1xuICBxdWFkcmFudEJ1aWxkZXIuc2V0RGF0YSh7IHlBeGlzVG9wVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuZnVuY3Rpb24gc2V0WUF4aXNCb3R0b21UZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB5QXhpc0JvdHRvbVRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbmZ1bmN0aW9uIGFkZFBvaW50KHRleHRPYmosIHgsIHkpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLmFkZFBvaW50cyhbeyB4LCB5LCB0ZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfV0pO1xufVxuZnVuY3Rpb24gc2V0V2lkdGgod2lkdGgpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldENvbmZpZyh7IGNoYXJ0V2lkdGg6IHdpZHRoIH0pO1xufVxuZnVuY3Rpb24gc2V0SGVpZ2h0KGhlaWdodCkge1xuICBxdWFkcmFudEJ1aWxkZXIuc2V0Q29uZmlnKHsgY2hhcnRIZWlnaHQ6IGhlaWdodCB9KTtcbn1cbmZ1bmN0aW9uIGdldFF1YWRyYW50RGF0YSgpIHtcbiAgY29uc3QgY29uZmlnMiA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBxdWFkcmFudENoYXJ0OiBxdWFkcmFudENoYXJ0Q29uZmlnIH0gPSBjb25maWcyO1xuICBpZiAocXVhZHJhbnRDaGFydENvbmZpZykge1xuICAgIHF1YWRyYW50QnVpbGRlci5zZXRDb25maWcocXVhZHJhbnRDaGFydENvbmZpZyk7XG4gIH1cbiAgcXVhZHJhbnRCdWlsZGVyLnNldFRoZW1lQ29uZmlnKHtcbiAgICBxdWFkcmFudDFGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFGaWxsLFxuICAgIHF1YWRyYW50MkZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50MkZpbGwsXG4gICAgcXVhZHJhbnQzRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQzRmlsbCxcbiAgICBxdWFkcmFudDRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRGaWxsLFxuICAgIHF1YWRyYW50MVRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFUZXh0RmlsbCxcbiAgICBxdWFkcmFudDJUZXh0RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQyVGV4dEZpbGwsXG4gICAgcXVhZHJhbnQzVGV4dEZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50M1RleHRGaWxsLFxuICAgIHF1YWRyYW50NFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRUZXh0RmlsbCxcbiAgICBxdWFkcmFudFBvaW50RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRQb2ludEZpbGwsXG4gICAgcXVhZHJhbnRQb2ludFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFBvaW50VGV4dEZpbGwsXG4gICAgcXVhZHJhbnRYQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRZQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICBxdWFkcmFudFRpdGxlRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRUaXRsZUZpbGxcbiAgfSk7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgdGl0bGVUZXh0OiBnZXREaWFncmFtVGl0bGUoKSB9KTtcbiAgcmV0dXJuIHF1YWRyYW50QnVpbGRlci5idWlsZCgpO1xufVxuY29uc3QgcGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbihzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpIHtcbiAgbWVybWFpZEFQSS5wYXJzZURpcmVjdGl2ZSh0aGlzLCBzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpO1xufTtcbmNvbnN0IGNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIHF1YWRyYW50QnVpbGRlci5jbGVhcigpO1xuICBjbGVhciQxKCk7XG59O1xuY29uc3QgZGIgPSB7XG4gIHNldFdpZHRoLFxuICBzZXRIZWlnaHQsXG4gIHNldFF1YWRyYW50MVRleHQsXG4gIHNldFF1YWRyYW50MlRleHQsXG4gIHNldFF1YWRyYW50M1RleHQsXG4gIHNldFF1YWRyYW50NFRleHQsXG4gIHNldFhBeGlzTGVmdFRleHQsXG4gIHNldFhBeGlzUmlnaHRUZXh0LFxuICBzZXRZQXhpc1RvcFRleHQsXG4gIHNldFlBeGlzQm90dG9tVGV4dCxcbiAgYWRkUG9pbnQsXG4gIGdldFF1YWRyYW50RGF0YSxcbiAgcGFyc2VEaXJlY3RpdmUsXG4gIGNsZWFyLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb25cbn07XG5jb25zdCBkcmF3ID0gKHR4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIHZhciBfYSwgX2IsIF9jO1xuICBmdW5jdGlvbiBnZXREb21pbmFudEJhc2VMaW5lKGhvcml6b250YWxQb3MpIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbFBvcyA9PT0gXCJ0b3BcIiA/IFwiaGFuZ2luZ1wiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBmdW5jdGlvbiBnZXRUZXh0QW5jaG9yKHZlcnRpY2FsUG9zKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUG9zID09PSBcImxlZnRcIiA/IFwic3RhcnRcIiA6IFwibWlkZGxlXCI7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YSkge1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZGF0YS54fSwgJHtkYXRhLnl9KSByb3RhdGUoJHtkYXRhLnJvdGF0aW9uIHx8IDB9KWA7XG4gIH1cbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpO1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnRcXG5cIiArIHR4dCk7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBjb25mLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IHN2ZyA9IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCBncm91cCA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1haW5cIik7XG4gIGNvbnN0IHdpZHRoID0gKChfYSA9IGNvbmYucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNoYXJ0V2lkdGgpIHx8IDUwMDtcbiAgY29uc3QgaGVpZ2h0ID0gKChfYiA9IGNvbmYucXVhZHJhbnRDaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNoYXJ0SGVpZ2h0KSB8fCA1MDA7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoc3ZnLCBoZWlnaHQsIHdpZHRoLCAoKF9jID0gY29uZi5xdWFkcmFudENoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2MudXNlTWF4V2lkdGgpIHx8IHRydWUpO1xuICBzdmcuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgXCIgKyB3aWR0aCArIFwiIFwiICsgaGVpZ2h0KTtcbiAgZGlhZ09iai5kYi5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgZGlhZ09iai5kYi5zZXRXaWR0aCh3aWR0aCk7XG4gIGNvbnN0IHF1YWRyYW50RGF0YSA9IGRpYWdPYmouZGIuZ2V0UXVhZHJhbnREYXRhKCk7XG4gIGNvbnN0IHF1YWRyYW50c0dyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJxdWFkcmFudHNcIik7XG4gIGNvbnN0IGJvcmRlckdyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3JkZXJcIik7XG4gIGNvbnN0IGRhdGFQb2ludEdyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJkYXRhLXBvaW50c1wiKTtcbiAgY29uc3QgbGFiZWxHcm91cCA9IGdyb3VwLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWxzXCIpO1xuICBjb25zdCB0aXRsZUdyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZVwiKTtcbiAgaWYgKHF1YWRyYW50RGF0YS50aXRsZSkge1xuICAgIHRpdGxlR3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5hdHRyKFwiZmlsbFwiLCBxdWFkcmFudERhdGEudGl0bGUuZmlsbCkuYXR0cihcImZvbnQtc2l6ZVwiLCBxdWFkcmFudERhdGEudGl0bGUuZm9udFNpemUpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBnZXREb21pbmFudEJhc2VMaW5lKHF1YWRyYW50RGF0YS50aXRsZS5ob3Jpem9udGFsUG9zKSkuYXR0cihcInRleHQtYW5jaG9yXCIsIGdldFRleHRBbmNob3IocXVhZHJhbnREYXRhLnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cihcInRyYW5zZm9ybVwiLCBnZXRUcmFuc2Zvcm1hdGlvbihxdWFkcmFudERhdGEudGl0bGUpKS50ZXh0KHF1YWRyYW50RGF0YS50aXRsZS50ZXh0KTtcbiAgfVxuICBpZiAocXVhZHJhbnREYXRhLmJvcmRlckxpbmVzKSB7XG4gICAgYm9yZGVyR3JvdXAuc2VsZWN0QWxsKFwibGluZVwiKS5kYXRhKHF1YWRyYW50RGF0YS5ib3JkZXJMaW5lcykuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCAoZGF0YSkgPT4gZGF0YS54MSkuYXR0cihcInkxXCIsIChkYXRhKSA9PiBkYXRhLnkxKS5hdHRyKFwieDJcIiwgKGRhdGEpID0+IGRhdGEueDIpLmF0dHIoXCJ5MlwiLCAoZGF0YSkgPT4gZGF0YS55Mikuc3R5bGUoXCJzdHJva2VcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlRmlsbCkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlV2lkdGgpO1xuICB9XG4gIGNvbnN0IHF1YWRyYW50cyA9IHF1YWRyYW50c0dyb3VwLnNlbGVjdEFsbChcImcucXVhZHJhbnRcIikuZGF0YShxdWFkcmFudERhdGEucXVhZHJhbnRzKS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicXVhZHJhbnRcIik7XG4gIHF1YWRyYW50cy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIChkYXRhKSA9PiBkYXRhLngpLmF0dHIoXCJ5XCIsIChkYXRhKSA9PiBkYXRhLnkpLmF0dHIoXCJ3aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS53aWR0aCkuYXR0cihcImhlaWdodFwiLCAoZGF0YSkgPT4gZGF0YS5oZWlnaHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpO1xuICBxdWFkcmFudHMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5hdHRyKFwiZmlsbFwiLCAoZGF0YSkgPT4gZGF0YS50ZXh0LmZpbGwpLmF0dHIoXCJmb250LXNpemVcIiwgKGRhdGEpID0+IGRhdGEudGV4dC5mb250U2l6ZSkuYXR0cihcbiAgICBcImRvbWluYW50LWJhc2VsaW5lXCIsXG4gICAgKGRhdGEpID0+IGdldERvbWluYW50QmFzZUxpbmUoZGF0YS50ZXh0Lmhvcml6b250YWxQb3MpXG4gICkuYXR0cihcInRleHQtYW5jaG9yXCIsIChkYXRhKSA9PiBnZXRUZXh0QW5jaG9yKGRhdGEudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGRhdGEpID0+IGdldFRyYW5zZm9ybWF0aW9uKGRhdGEudGV4dCkpLnRleHQoKGRhdGEpID0+IGRhdGEudGV4dC50ZXh0KTtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxHcm91cC5zZWxlY3RBbGwoXCJnLmxhYmVsXCIpLmRhdGEocXVhZHJhbnREYXRhLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgbGFiZWxzLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0KS5hdHRyKFwiZmlsbFwiLCAoZGF0YSkgPT4gZGF0YS5maWxsKS5hdHRyKFwiZm9udC1zaXplXCIsIChkYXRhKSA9PiBkYXRhLmZvbnRTaXplKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgKGRhdGEpID0+IGdldERvbWluYW50QmFzZUxpbmUoZGF0YS5ob3Jpem9udGFsUG9zKSkuYXR0cihcInRleHQtYW5jaG9yXCIsIChkYXRhKSA9PiBnZXRUZXh0QW5jaG9yKGRhdGEudmVydGljYWxQb3MpKS5hdHRyKFwidHJhbnNmb3JtXCIsIChkYXRhKSA9PiBnZXRUcmFuc2Zvcm1hdGlvbihkYXRhKSk7XG4gIGNvbnN0IGRhdGFQb2ludHMgPSBkYXRhUG9pbnRHcm91cC5zZWxlY3RBbGwoXCJnLmRhdGEtcG9pbnRcIikuZGF0YShxdWFkcmFudERhdGEucG9pbnRzKS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZGF0YS1wb2ludFwiKTtcbiAgZGF0YVBvaW50cy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIChkYXRhKSA9PiBkYXRhLngpLmF0dHIoXCJjeVwiLCAoZGF0YSkgPT4gZGF0YS55KS5hdHRyKFwiclwiLCAoZGF0YSkgPT4gZGF0YS5yYWRpdXMpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpO1xuICBkYXRhUG9pbnRzLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0LnRleHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLnRleHQuZmlsbCkuYXR0cihcImZvbnQtc2l6ZVwiLCAoZGF0YSkgPT4gZGF0YS50ZXh0LmZvbnRTaXplKS5hdHRyKFxuICAgIFwiZG9taW5hbnQtYmFzZWxpbmVcIixcbiAgICAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLnRleHQuaG9yaXpvbnRhbFBvcylcbiAgKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGRhdGEpID0+IGdldFRleHRBbmNob3IoZGF0YS50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cihcInRyYW5zZm9ybVwiLCAoZGF0YSkgPT4gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YS50ZXh0KSk7XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIGRyYXdcbn07XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXI6IHBhcnNlciQxLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlczogKCkgPT4gXCJcIlxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/quadrantDiagram-fd70f2d0.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/requirementDiagram-19c99588.js": /*!*************************************************************************!*\ !*** ../../../node_modules/mermaid/dist/requirementDiagram-19c99588.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [5, 6, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72], $V6 = [1, 22], $V7 = [2, 13], $V8 = [1, 26], $V9 = [1, 27], $Va = [1, 28], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 24], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 36], $Vi = [71, 72], $Vj = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 60, 62, 71, 72], $Vk = [1, 56], $Vl = [1, 57], $Vm = [1, 58], $Vn = [1, 59], $Vo = [1, 60], $Vp = [1, 61], $Vq = [1, 62], $Vr = [62, 63], $Vs = [1, 74], $Vt = [1, 70], $Vu = [1, 71], $Vv = [1, 72], $Vw = [1, 73], $Vx = [1, 75], $Vy = [1, 79], $Vz = [1, 80], $VA = [1, 77], $VB = [1, 78], $VC = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"directive\": 4, \"NEWLINE\": 5, \"RD\": 6, \"diagram\": 7, \"EOF\": 8, \"openDirective\": 9, \"typeDirective\": 10, \"closeDirective\": 11, \":\": 12, \"argDirective\": 13, \"acc_title\": 14, \"acc_title_value\": 15, \"acc_descr\": 16, \"acc_descr_value\": 17, \"acc_descr_multiline_value\": 18, \"open_directive\": 19, \"type_directive\": 20, \"arg_directive\": 21, \"close_directive\": 22, \"requirementDef\": 23, \"elementDef\": 24, \"relationshipDef\": 25, \"requirementType\": 26, \"requirementName\": 27, \"STRUCT_START\": 28, \"requirementBody\": 29, \"ID\": 30, \"COLONSEP\": 31, \"id\": 32, \"TEXT\": 33, \"text\": 34, \"RISK\": 35, \"riskLevel\": 36, \"VERIFYMTHD\": 37, \"verifyType\": 38, \"STRUCT_STOP\": 39, \"REQUIREMENT\": 40, \"FUNCTIONAL_REQUIREMENT\": 41, \"INTERFACE_REQUIREMENT\": 42, \"PERFORMANCE_REQUIREMENT\": 43, \"PHYSICAL_REQUIREMENT\": 44, \"DESIGN_CONSTRAINT\": 45, \"LOW_RISK\": 46, \"MED_RISK\": 47, \"HIGH_RISK\": 48, \"VERIFY_ANALYSIS\": 49, \"VERIFY_DEMONSTRATION\": 50, \"VERIFY_INSPECTION\": 51, \"VERIFY_TEST\": 52, \"ELEMENT\": 53, \"elementName\": 54, \"elementBody\": 55, \"TYPE\": 56, \"type\": 57, \"DOCREF\": 58, \"ref\": 59, \"END_ARROW_L\": 60, \"relationship\": 61, \"LINE\": 62, \"END_ARROW_R\": 63, \"CONTAINS\": 64, \"COPIES\": 65, \"DERIVES\": 66, \"SATISFIES\": 67, \"VERIFIES\": 68, \"REFINES\": 69, \"TRACES\": 70, \"unqString\": 71, \"qString\": 72, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"NEWLINE\", 6: \"RD\", 8: \"EOF\", 12: \":\", 14: \"acc_title\", 15: \"acc_title_value\", 16: \"acc_descr\", 17: \"acc_descr_value\", 18: \"acc_descr_multiline_value\", 19: \"open_directive\", 20: \"type_directive\", 21: \"arg_directive\", 22: \"close_directive\", 28: \"STRUCT_START\", 30: \"ID\", 31: \"COLONSEP\", 33: \"TEXT\", 35: \"RISK\", 37: \"VERIFYMTHD\", 39: \"STRUCT_STOP\", 40: \"REQUIREMENT\", 41: \"FUNCTIONAL_REQUIREMENT\", 42: \"INTERFACE_REQUIREMENT\", 43: \"PERFORMANCE_REQUIREMENT\", 44: \"PHYSICAL_REQUIREMENT\", 45: \"DESIGN_CONSTRAINT\", 46: \"LOW_RISK\", 47: \"MED_RISK\", 48: \"HIGH_RISK\", 49: \"VERIFY_ANALYSIS\", 50: \"VERIFY_DEMONSTRATION\", 51: \"VERIFY_INSPECTION\", 52: \"VERIFY_TEST\", 53: \"ELEMENT\", 56: \"TYPE\", 58: \"DOCREF\", 60: \"END_ARROW_L\", 62: \"LINE\", 63: \"END_ARROW_R\", 64: \"CONTAINS\", 65: \"COPIES\", 66: \"DERIVES\", 67: \"SATISFIES\", 68: \"VERIFIES\", 69: \"REFINES\", 70: \"TRACES\", 71: \"unqString\", 72: \"qString\" },\n productions_: [0, [3, 3], [3, 2], [3, 4], [4, 3], [4, 5], [4, 2], [4, 2], [4, 1], [9, 1], [10, 1], [13, 1], [11, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [23, 5], [29, 5], [29, 5], [29, 5], [29, 5], [29, 2], [29, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [36, 1], [36, 1], [36, 1], [38, 1], [38, 1], [38, 1], [38, 1], [24, 5], [55, 5], [55, 5], [55, 2], [55, 1], [25, 5], [25, 5], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [27, 1], [27, 1], [32, 1], [32, 1], [34, 1], [34, 1], [54, 1], [54, 1], [57, 1], [57, 1], [59, 1], [59, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 6:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 7:\n case 8:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 9:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 10:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 11:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 12:\n yy.parseDirective(\"}%%\", \"close_directive\", \"pie\");\n break;\n case 13:\n this.$ = [];\n break;\n case 19:\n yy.addRequirement($$[$0 - 3], $$[$0 - 4]);\n break;\n case 20:\n yy.setNewReqId($$[$0 - 2]);\n break;\n case 21:\n yy.setNewReqText($$[$0 - 2]);\n break;\n case 22:\n yy.setNewReqRisk($$[$0 - 2]);\n break;\n case 23:\n yy.setNewReqVerifyMethod($$[$0 - 2]);\n break;\n case 26:\n this.$ = yy.RequirementType.REQUIREMENT;\n break;\n case 27:\n this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT;\n break;\n case 28:\n this.$ = yy.RequirementType.INTERFACE_REQUIREMENT;\n break;\n case 29:\n this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT;\n break;\n case 30:\n this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT;\n break;\n case 31:\n this.$ = yy.RequirementType.DESIGN_CONSTRAINT;\n break;\n case 32:\n this.$ = yy.RiskLevel.LOW_RISK;\n break;\n case 33:\n this.$ = yy.RiskLevel.MED_RISK;\n break;\n case 34:\n this.$ = yy.RiskLevel.HIGH_RISK;\n break;\n case 35:\n this.$ = yy.VerifyType.VERIFY_ANALYSIS;\n break;\n case 36:\n this.$ = yy.VerifyType.VERIFY_DEMONSTRATION;\n break;\n case 37:\n this.$ = yy.VerifyType.VERIFY_INSPECTION;\n break;\n case 38:\n this.$ = yy.VerifyType.VERIFY_TEST;\n break;\n case 39:\n yy.addElement($$[$0 - 3]);\n break;\n case 40:\n yy.setNewElementType($$[$0 - 2]);\n break;\n case 41:\n yy.setNewElementDocRef($$[$0 - 2]);\n break;\n case 44:\n yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]);\n break;\n case 45:\n yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]);\n break;\n case 46:\n this.$ = yy.Relationships.CONTAINS;\n break;\n case 47:\n this.$ = yy.Relationships.COPIES;\n break;\n case 48:\n this.$ = yy.Relationships.DERIVES;\n break;\n case 49:\n this.$ = yy.Relationships.SATISFIES;\n break;\n case 50:\n this.$ = yy.Relationships.VERIFIES;\n break;\n case 51:\n this.$ = yy.Relationships.REFINES;\n break;\n case 52:\n this.$ = yy.Relationships.TRACES;\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: [1, 9], 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 5: [1, 11] }, { 10: 12, 20: [1, 13] }, { 15: [1, 14] }, { 17: [1, 15] }, o($V5, [2, 8]), { 20: [2, 9] }, { 3: 16, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [2, 2] }, { 4: 21, 5: $V6, 7: 17, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 11: 34, 12: [1, 35], 22: $Vh }, o([12, 22], [2, 10]), o($V5, [2, 6]), o($V5, [2, 7]), { 1: [2, 1] }, { 8: [1, 37] }, { 4: 21, 5: $V6, 7: 38, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 39, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 40, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 41, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 42, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 27: 43, 71: [1, 44], 72: [1, 45] }, { 54: 46, 71: [1, 47], 72: [1, 48] }, { 60: [1, 49], 62: [1, 50] }, o($Vi, [2, 26]), o($Vi, [2, 27]), o($Vi, [2, 28]), o($Vi, [2, 29]), o($Vi, [2, 30]), o($Vi, [2, 31]), o($Vj, [2, 55]), o($Vj, [2, 56]), o($V5, [2, 4]), { 13: 51, 21: [1, 52] }, o($V5, [2, 12]), { 1: [2, 3] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 8: [2, 17] }, { 8: [2, 18] }, { 28: [1, 53] }, { 28: [2, 53] }, { 28: [2, 54] }, { 28: [1, 54] }, { 28: [2, 59] }, { 28: [2, 60] }, { 61: 55, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 61: 63, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 11: 64, 22: $Vh }, { 22: [2, 11] }, { 5: [1, 65] }, { 5: [1, 66] }, { 62: [1, 67] }, o($Vr, [2, 46]), o($Vr, [2, 47]), o($Vr, [2, 48]), o($Vr, [2, 49]), o($Vr, [2, 50]), o($Vr, [2, 51]), o($Vr, [2, 52]), { 63: [1, 68] }, o($V5, [2, 5]), { 5: $Vs, 29: 69, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 76, 56: $VA, 58: $VB }, { 32: 81, 71: $Vf, 72: $Vg }, { 32: 82, 71: $Vf, 72: $Vg }, o($VC, [2, 19]), { 31: [1, 83] }, { 31: [1, 84] }, { 31: [1, 85] }, { 31: [1, 86] }, { 5: $Vs, 29: 87, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, o($VC, [2, 25]), o($VC, [2, 39]), { 31: [1, 88] }, { 31: [1, 89] }, { 5: $Vy, 39: $Vz, 55: 90, 56: $VA, 58: $VB }, o($VC, [2, 43]), o($VC, [2, 44]), o($VC, [2, 45]), { 32: 91, 71: $Vf, 72: $Vg }, { 34: 92, 71: [1, 93], 72: [1, 94] }, { 36: 95, 46: [1, 96], 47: [1, 97], 48: [1, 98] }, { 38: 99, 49: [1, 100], 50: [1, 101], 51: [1, 102], 52: [1, 103] }, o($VC, [2, 24]), { 57: 104, 71: [1, 105], 72: [1, 106] }, { 59: 107, 71: [1, 108], 72: [1, 109] }, o($VC, [2, 42]), { 5: [1, 110] }, { 5: [1, 111] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [1, 112] }, { 5: [2, 32] }, { 5: [2, 33] }, { 5: [2, 34] }, { 5: [1, 113] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [2, 38] }, { 5: [1, 114] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [1, 115] }, { 5: [2, 63] }, { 5: [2, 64] }, { 5: $Vs, 29: 116, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 117, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 118, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 119, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 120, 56: $VA, 58: $VB }, { 5: $Vy, 39: $Vz, 55: 121, 56: $VA, 58: $VB }, o($VC, [2, 20]), o($VC, [2, 21]), o($VC, [2, 22]), o($VC, [2, 23]), o($VC, [2, 40]), o($VC, [2, 41])],\n defaultActions: { 8: [2, 9], 10: [2, 2], 16: [2, 1], 37: [2, 3], 38: [2, 14], 39: [2, 15], 40: [2, 16], 41: [2, 17], 42: [2, 18], 44: [2, 53], 45: [2, 54], 47: [2, 59], 48: [2, 60], 52: [2, 11], 93: [2, 57], 94: [2, 58], 96: [2, 32], 97: [2, 33], 98: [2, 34], 100: [2, 35], 101: [2, 36], 102: [2, 37], 103: [2, 38], 105: [2, 61], 106: [2, 62], 108: [2, 63], 109: [2, 64] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 19;\n case 1:\n this.begin(\"type_directive\");\n return 20;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 12;\n case 3:\n this.popState();\n this.popState();\n return 22;\n case 4:\n return 21;\n case 5:\n return \"title\";\n case 6:\n this.begin(\"acc_title\");\n return 14;\n case 7:\n this.popState();\n return \"acc_title_value\";\n case 8:\n this.begin(\"acc_descr\");\n return 16;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n case 13:\n return 5;\n case 14:\n break;\n case 15:\n break;\n case 16:\n break;\n case 17:\n return 8;\n case 18:\n return 6;\n case 19:\n return 28;\n case 20:\n return 39;\n case 21:\n return 31;\n case 22:\n return 30;\n case 23:\n return 33;\n case 24:\n return 35;\n case 25:\n return 37;\n case 26:\n return 40;\n case 27:\n return 41;\n case 28:\n return 42;\n case 29:\n return 43;\n case 30:\n return 44;\n case 31:\n return 45;\n case 32:\n return 46;\n case 33:\n return 47;\n case 34:\n return 48;\n case 35:\n return 49;\n case 36:\n return 50;\n case 37:\n return 51;\n case 38:\n return 52;\n case 39:\n return 53;\n case 40:\n return 64;\n case 41:\n return 65;\n case 42:\n return 66;\n case 43:\n return 67;\n case 44:\n return 68;\n case 45:\n return 69;\n case 46:\n return 70;\n case 47:\n return 56;\n case 48:\n return 58;\n case 49:\n return 60;\n case 50:\n return 63;\n case 51:\n return 62;\n case 52:\n this.begin(\"string\");\n break;\n case 53:\n this.popState();\n break;\n case 54:\n return \"qString\";\n case 55:\n yy_.yytext = yy_.yytext.trim();\n return 71;\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:(\\r?\\n)+)/i, /^(?:\\s+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\\b)/i, /^(?:\\{)/i, /^(?:\\})/i, /^(?::)/i, /^(?:id\\b)/i, /^(?:text\\b)/i, /^(?:risk\\b)/i, /^(?:verifyMethod\\b)/i, /^(?:requirement\\b)/i, /^(?:functionalRequirement\\b)/i, /^(?:interfaceRequirement\\b)/i, /^(?:performanceRequirement\\b)/i, /^(?:physicalRequirement\\b)/i, /^(?:designConstraint\\b)/i, /^(?:low\\b)/i, /^(?:medium\\b)/i, /^(?:high\\b)/i, /^(?:analysis\\b)/i, /^(?:demonstration\\b)/i, /^(?:inspection\\b)/i, /^(?:test\\b)/i, /^(?:element\\b)/i, /^(?:contains\\b)/i, /^(?:copies\\b)/i, /^(?:derives\\b)/i, /^(?:satisfies\\b)/i, /^(?:verifies\\b)/i, /^(?:refines\\b)/i, /^(?:traces\\b)/i, /^(?:type\\b)/i, /^(?:docref\\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:[\"])/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[\\w][^\\r\\n\\{\\<\\>\\-\\=]*)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [11, 12], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9], \"inclusive\": false }, \"acc_title\": { \"rules\": [7], \"inclusive\": false }, \"close_directive\": { \"rules\": [], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"unqString\": { \"rules\": [], \"inclusive\": false }, \"token\": { \"rules\": [], \"inclusive\": false }, \"string\": { \"rules\": [53, 54], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 55], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet relations = [];\nlet latestRequirement = {};\nlet requirements = {};\nlet latestElement = {};\nlet elements = {};\nconst RequirementType = {\n REQUIREMENT: \"Requirement\",\n FUNCTIONAL_REQUIREMENT: \"Functional Requirement\",\n INTERFACE_REQUIREMENT: \"Interface Requirement\",\n PERFORMANCE_REQUIREMENT: \"Performance Requirement\",\n PHYSICAL_REQUIREMENT: \"Physical Requirement\",\n DESIGN_CONSTRAINT: \"Design Constraint\"\n};\nconst RiskLevel = {\n LOW_RISK: \"Low\",\n MED_RISK: \"Medium\",\n HIGH_RISK: \"High\"\n};\nconst VerifyType = {\n VERIFY_ANALYSIS: \"Analysis\",\n VERIFY_DEMONSTRATION: \"Demonstration\",\n VERIFY_INSPECTION: \"Inspection\",\n VERIFY_TEST: \"Test\"\n};\nconst Relationships = {\n CONTAINS: \"contains\",\n COPIES: \"copies\",\n DERIVES: \"derives\",\n SATISFIES: \"satisfies\",\n VERIFIES: \"verifies\",\n REFINES: \"refines\",\n TRACES: \"traces\"\n};\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.m.parseDirective(this, statement, context, type);\n};\nconst addRequirement = (name, type) => {\n if (requirements[name] === void 0) {\n requirements[name] = {\n name,\n type,\n id: latestRequirement.id,\n text: latestRequirement.text,\n risk: latestRequirement.risk,\n verifyMethod: latestRequirement.verifyMethod\n };\n }\n latestRequirement = {};\n return requirements[name];\n};\nconst getRequirements = () => requirements;\nconst setNewReqId = (id) => {\n if (latestRequirement !== void 0) {\n latestRequirement.id = id;\n }\n};\nconst setNewReqText = (text) => {\n if (latestRequirement !== void 0) {\n latestRequirement.text = text;\n }\n};\nconst setNewReqRisk = (risk) => {\n if (latestRequirement !== void 0) {\n latestRequirement.risk = risk;\n }\n};\nconst setNewReqVerifyMethod = (verifyMethod) => {\n if (latestRequirement !== void 0) {\n latestRequirement.verifyMethod = verifyMethod;\n }\n};\nconst addElement = (name) => {\n if (elements[name] === void 0) {\n elements[name] = {\n name,\n type: latestElement.type,\n docRef: latestElement.docRef\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Added new requirement: \", name);\n }\n latestElement = {};\n return elements[name];\n};\nconst getElements = () => elements;\nconst setNewElementType = (type) => {\n if (latestElement !== void 0) {\n latestElement.type = type;\n }\n};\nconst setNewElementDocRef = (docRef) => {\n if (latestElement !== void 0) {\n latestElement.docRef = docRef;\n }\n};\nconst addRelationship = (type, src, dst) => {\n relations.push({\n type,\n src,\n dst\n });\n};\nconst getRelationships = () => relations;\nconst clear = () => {\n relations = [];\n latestRequirement = {};\n requirements = {};\n latestElement = {};\n elements = {};\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.v)();\n};\nconst db = {\n RequirementType,\n RiskLevel,\n VerifyType,\n Relationships,\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().req,\n addRequirement,\n getRequirements,\n setNewReqId,\n setNewReqText,\n setNewReqRisk,\n setNewReqVerifyMethod,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.g,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.b,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.a,\n addElement,\n getElements,\n setNewElementType,\n setNewElementDocRef,\n addRelationship,\n getRelationships,\n clear\n};\nconst getStyles = (options) => `\n\n marker {\n fill: ${options.relationColor};\n stroke: ${options.relationColor};\n }\n\n marker.cross {\n stroke: ${options.lineColor};\n }\n\n svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n\n .reqBox {\n fill: ${options.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${options.requirementBorderColor};\n stroke-width: ${options.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${options.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${options.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${options.requirementBorderColor};\n stroke-width: ${options.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${options.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${options.relationLabelColor};\n }\n\n`;\nconst styles = getStyles;\nconst ReqMarkers = {\n CONTAINS: \"contains\",\n ARROW: \"arrow\"\n};\nconst insertLineEndings = (parentNode, conf2) => {\n let containsNode = parentNode.append(\"defs\").append(\"marker\").attr(\"id\", ReqMarkers.CONTAINS + \"_line_ending\").attr(\"refX\", 0).attr(\"refY\", conf2.line_height / 2).attr(\"markerWidth\", conf2.line_height).attr(\"markerHeight\", conf2.line_height).attr(\"orient\", \"auto\").append(\"g\");\n containsNode.append(\"circle\").attr(\"cx\", conf2.line_height / 2).attr(\"cy\", conf2.line_height / 2).attr(\"r\", conf2.line_height / 2).attr(\"fill\", \"none\");\n containsNode.append(\"line\").attr(\"x1\", 0).attr(\"x2\", conf2.line_height).attr(\"y1\", conf2.line_height / 2).attr(\"y2\", conf2.line_height / 2).attr(\"stroke-width\", 1);\n containsNode.append(\"line\").attr(\"y1\", 0).attr(\"y2\", conf2.line_height).attr(\"x1\", conf2.line_height / 2).attr(\"x2\", conf2.line_height / 2).attr(\"stroke-width\", 1);\n parentNode.append(\"defs\").append(\"marker\").attr(\"id\", ReqMarkers.ARROW + \"_line_ending\").attr(\"refX\", conf2.line_height).attr(\"refY\", 0.5 * conf2.line_height).attr(\"markerWidth\", conf2.line_height).attr(\"markerHeight\", conf2.line_height).attr(\"orient\", \"auto\").append(\"path\").attr(\n \"d\",\n `M0,0\n L${conf2.line_height},${conf2.line_height / 2}\n M${conf2.line_height},${conf2.line_height / 2}\n L0,${conf2.line_height}`\n ).attr(\"stroke-width\", 1);\n};\nconst markers = {\n ReqMarkers,\n insertLineEndings\n};\nlet conf = {};\nlet relCnt = 0;\nconst newRectNode = (parentNode, id) => {\n return parentNode.insert(\"rect\", \"#\" + id).attr(\"class\", \"req reqBox\").attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", conf.rect_min_width + \"px\").attr(\"height\", conf.rect_min_height + \"px\");\n};\nconst newTitleNode = (parentNode, id, txts) => {\n let x = conf.rect_min_width / 2;\n let title = parentNode.append(\"text\").attr(\"class\", \"req reqLabel reqTitle\").attr(\"id\", id).attr(\"x\", x).attr(\"y\", conf.rect_padding).attr(\"dominant-baseline\", \"hanging\");\n let i = 0;\n txts.forEach((textStr) => {\n if (i == 0) {\n title.append(\"tspan\").attr(\"text-anchor\", \"middle\").attr(\"x\", conf.rect_min_width / 2).attr(\"dy\", 0).text(textStr);\n } else {\n title.append(\"tspan\").attr(\"text-anchor\", \"middle\").attr(\"x\", conf.rect_min_width / 2).attr(\"dy\", conf.line_height * 0.75).text(textStr);\n }\n i++;\n });\n let yPadding = 1.5 * conf.rect_padding;\n let linePadding = i * conf.line_height * 0.75;\n let totalY = yPadding + linePadding;\n parentNode.append(\"line\").attr(\"class\", \"req-title-line\").attr(\"x1\", \"0\").attr(\"x2\", conf.rect_min_width).attr(\"y1\", totalY).attr(\"y2\", totalY);\n return {\n titleNode: title,\n y: totalY\n };\n};\nconst newBodyNode = (parentNode, id, txts, yStart) => {\n let body = parentNode.append(\"text\").attr(\"class\", \"req reqLabel\").attr(\"id\", id).attr(\"x\", conf.rect_padding).attr(\"y\", yStart).attr(\"dominant-baseline\", \"hanging\");\n let currentRow = 0;\n const charLimit = 30;\n let wrappedTxts = [];\n txts.forEach((textStr) => {\n let currentTextLen = textStr.length;\n while (currentTextLen > charLimit && currentRow < 3) {\n let firstPart = textStr.substring(0, charLimit);\n textStr = textStr.substring(charLimit, textStr.length);\n currentTextLen = textStr.length;\n wrappedTxts[wrappedTxts.length] = firstPart;\n currentRow++;\n }\n if (currentRow == 3) {\n let lastStr = wrappedTxts[wrappedTxts.length - 1];\n wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + \"...\";\n } else {\n wrappedTxts[wrappedTxts.length] = textStr;\n }\n currentRow = 0;\n });\n wrappedTxts.forEach((textStr) => {\n body.append(\"tspan\").attr(\"x\", conf.rect_padding).attr(\"dy\", conf.line_height).text(textStr);\n });\n return body;\n};\nconst addEdgeLabel = (parentNode, svgPath, conf2, txt) => {\n const len = svgPath.node().getTotalLength();\n const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n const labelId = \"rel\" + relCnt;\n relCnt++;\n const labelNode = parentNode.append(\"text\").attr(\"class\", \"req relationshipLabel\").attr(\"id\", labelId).attr(\"x\", labelPoint.x).attr(\"y\", labelPoint.y).attr(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").text(txt);\n const labelBBox = labelNode.node().getBBox();\n parentNode.insert(\"rect\", \"#\" + labelId).attr(\"class\", \"req reqLabelBox\").attr(\"x\", labelPoint.x - labelBBox.width / 2).attr(\"y\", labelPoint.y - labelBBox.height / 2).attr(\"width\", labelBBox.width).attr(\"height\", labelBBox.height).attr(\"fill\", \"white\").attr(\"fill-opacity\", \"85%\");\n};\nconst drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) {\n const edge = g.edge(elementString(rel.src), elementString(rel.dst));\n const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__.line)().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n });\n const svgPath = svg.insert(\"path\", \"#\" + insert).attr(\"class\", \"er relationshipLine\").attr(\"d\", lineFunction(edge.points)).attr(\"fill\", \"none\");\n if (rel.type == diagObj.db.Relationships.CONTAINS) {\n svgPath.attr(\n \"marker-start\",\n \"url(\" + _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.getUrl(conf.arrowMarkerAbsolute) + \"#\" + rel.type + \"_line_ending)\"\n );\n } else {\n svgPath.attr(\"stroke-dasharray\", \"10,7\");\n svgPath.attr(\n \"marker-end\",\n \"url(\" + _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.getUrl(conf.arrowMarkerAbsolute) + \"#\" + markers.ReqMarkers.ARROW + \"_line_ending)\"\n );\n }\n addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`);\n return;\n};\nconst drawReqs = (reqs, graph, svgNode) => {\n Object.keys(reqs).forEach((reqName) => {\n let req = reqs[reqName];\n reqName = elementString(reqName);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Added new requirement: \", reqName);\n const groupNode = svgNode.append(\"g\").attr(\"id\", reqName);\n const textId = \"req-\" + reqName;\n const rectNode = newRectNode(groupNode, textId);\n let titleNodeInfo = newTitleNode(groupNode, reqName + \"_title\", [\n `<<${req.type}>>`,\n `${req.name}`\n ]);\n newBodyNode(\n groupNode,\n reqName + \"_body\",\n [\n `Id: ${req.id}`,\n `Text: ${req.text}`,\n `Risk: ${req.risk}`,\n `Verification: ${req.verifyMethod}`\n ],\n titleNodeInfo.y\n );\n const rectBBox = rectNode.node().getBBox();\n graph.setNode(reqName, {\n width: rectBBox.width,\n height: rectBBox.height,\n shape: \"rect\",\n id: reqName\n });\n });\n};\nconst drawElements = (els, graph, svgNode) => {\n Object.keys(els).forEach((elName) => {\n let el = els[elName];\n const id = elementString(elName);\n const groupNode = svgNode.append(\"g\").attr(\"id\", id);\n const textId = \"element-\" + id;\n const rectNode = newRectNode(groupNode, textId);\n let titleNodeInfo = newTitleNode(groupNode, textId + \"_title\", [`<>`, `${elName}`]);\n newBodyNode(\n groupNode,\n textId + \"_body\",\n [`Type: ${el.type || \"Not Specified\"}`, `Doc Ref: ${el.docRef || \"None\"}`],\n titleNodeInfo.y\n );\n const rectBBox = rectNode.node().getBBox();\n graph.setNode(id, {\n width: rectBBox.width,\n height: rectBBox.height,\n shape: \"rect\",\n id\n });\n });\n};\nconst addRelationships = (relationships, g) => {\n relationships.forEach(function(r) {\n let src = elementString(r.src);\n let dst = elementString(r.dst);\n g.setEdge(src, dst, { relationship: r });\n });\n return relationships;\n};\nconst adjustEntities = function(svgNode, graph) {\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n svgNode.select(\"#\" + v);\n svgNode.select(\"#\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y - graph.node(v).height / 2) + \" )\"\n );\n }\n });\n return;\n};\nconst elementString = (str) => {\n return str.replace(/\\s/g, \"\").replace(/\\./g, \"_\");\n};\nconst draw = (text, id, _version, diagObj) => {\n conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().requirement;\n diagObj.db.clear();\n diagObj.parser.parse(text);\n const securityLevel = conf.securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(`[id='${id}']`);\n markers.insertLineEndings(svg, conf);\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__.Graph({\n multigraph: false,\n compound: false,\n directed: true\n }).setGraph({\n rankdir: conf.layoutDirection,\n marginx: 20,\n marginy: 20,\n nodesep: 100,\n edgesep: 100,\n ranksep: 100\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n let requirements2 = diagObj.db.getRequirements();\n let elements2 = diagObj.db.getElements();\n let relationships = diagObj.db.getRelationships();\n drawReqs(requirements2, g, svg);\n drawElements(elements2, g, svg);\n addRelationships(relationships, g);\n (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__.layout)(g);\n adjustEntities(svg, g);\n relationships.forEach(function(rel) {\n drawRelationshipFromLayout(svg, rel, g, id, diagObj);\n });\n const padding = conf.rect_padding;\n const svgBounds = svg.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, height, width, conf.useMaxWidth);\n svg.attr(\"viewBox\", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9yZXF1aXJlbWVudERpYWdyYW0tMTljOTk1ODguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXdOO0FBQ3RMO0FBQ3NCO0FBQ007QUFDM0M7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQixzeUNBQXN5QztBQUN0ekMsa0JBQWtCLGs0QkFBazRCO0FBQ3A1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWMsOERBQThELElBQUksUUFBUSxJQUFJLDBFQUEwRSxJQUFJLFlBQVksSUFBSSxxQkFBcUIsSUFBSSxhQUFhLElBQUksYUFBYSxvQkFBb0IsWUFBWSxJQUFJLCtEQUErRCxJQUFJLFdBQVcsSUFBSSxpTUFBaU0sSUFBSSw4QkFBOEIsMERBQTBELFdBQVcsSUFBSSxZQUFZLElBQUksaU1BQWlNLElBQUksaU1BQWlNLElBQUksaU1BQWlNLElBQUksaU1BQWlNLElBQUksaU1BQWlNLElBQUksa0NBQWtDLElBQUksa0NBQWtDLElBQUksMEJBQTBCLDRKQUE0SixxQkFBcUIscUJBQXFCLFdBQVcsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLHVFQUF1RSxJQUFJLHVFQUF1RSxJQUFJLGlCQUFpQixJQUFJLGFBQWEsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLGFBQWEsMkhBQTJILGFBQWEsb0JBQW9CLDZEQUE2RCxJQUFJLDJDQUEyQyxJQUFJLDBCQUEwQixJQUFJLDBCQUEwQixxQkFBcUIsYUFBYSxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLDZEQUE2RCxzQ0FBc0MsYUFBYSxJQUFJLGFBQWEsSUFBSSwyQ0FBMkMsdURBQXVELDBCQUEwQixJQUFJLGtDQUFrQyxJQUFJLCtDQUErQyxJQUFJLGdFQUFnRSxxQkFBcUIscUNBQXFDLElBQUkscUNBQXFDLHFCQUFxQixhQUFhLElBQUksYUFBYSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksYUFBYSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLGFBQWEsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksYUFBYSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksYUFBYSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksOERBQThELElBQUksOERBQThELElBQUksOERBQThELElBQUksOERBQThELElBQUksNENBQTRDLElBQUksNENBQTRDO0FBQ242SCxzQkFBc0Isa1dBQWtXO0FBQ3hYO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNGQUFzRixPQUFPO0FBQzdGO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyQkFBMkIsZUFBZSxvQkFBb0I7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixpQkFBaUI7QUFDM0MsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx1REFBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDBDQUFNO0FBQzNCO0FBQ0EsNkNBQTZDLDBDQUFNLG1EQUFtRCwwQ0FBTTtBQUM1RyxrQ0FBa0MsR0FBRztBQUNyQztBQUNBLGdCQUFnQixvRUFBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsc0VBQU07QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFnQjtBQUNsQix5QkFBeUIsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE9BQU87QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L3JlcXVpcmVtZW50RGlhZ3JhbS0xOWM5OTU4OC5qcz9iM2RiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBnIGFzIGdldEFjY1RpdGxlLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBtIGFzIG1lcm1haWRBUEksIGwgYXMgbG9nLCB2IGFzIGNsZWFyJDEsIGkgYXMgY29uZmlndXJlU3ZnU2l6ZSwgZSBhcyBjb21tb24gfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIGxpbmUgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGxheW91dCB9IGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcbmltcG9ydCBcInRzLWRlZGVudFwiO1xuaW1wb3J0IFwiZGF5anNcIjtcbmltcG9ydCBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCAzXSwgJFYxID0gWzEsIDVdLCAkVjIgPSBbMSwgNl0sICRWMyA9IFsxLCA3XSwgJFY0ID0gWzEsIDhdLCAkVjUgPSBbNSwgNiwgOCwgMTQsIDE2LCAxOCwgMTksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDUzLCA3MSwgNzJdLCAkVjYgPSBbMSwgMjJdLCAkVjcgPSBbMiwgMTNdLCAkVjggPSBbMSwgMjZdLCAkVjkgPSBbMSwgMjddLCAkVmEgPSBbMSwgMjhdLCAkVmIgPSBbMSwgMjldLCAkVmMgPSBbMSwgMzBdLCAkVmQgPSBbMSwgMzFdLCAkVmUgPSBbMSwgMjRdLCAkVmYgPSBbMSwgMzJdLCAkVmcgPSBbMSwgMzNdLCAkVmggPSBbMSwgMzZdLCAkVmkgPSBbNzEsIDcyXSwgJFZqID0gWzUsIDgsIDE0LCAxNiwgMTgsIDE5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA1MywgNjAsIDYyLCA3MSwgNzJdLCAkVmsgPSBbMSwgNTZdLCAkVmwgPSBbMSwgNTddLCAkVm0gPSBbMSwgNThdLCAkVm4gPSBbMSwgNTldLCAkVm8gPSBbMSwgNjBdLCAkVnAgPSBbMSwgNjFdLCAkVnEgPSBbMSwgNjJdLCAkVnIgPSBbNjIsIDYzXSwgJFZzID0gWzEsIDc0XSwgJFZ0ID0gWzEsIDcwXSwgJFZ1ID0gWzEsIDcxXSwgJFZ2ID0gWzEsIDcyXSwgJFZ3ID0gWzEsIDczXSwgJFZ4ID0gWzEsIDc1XSwgJFZ5ID0gWzEsIDc5XSwgJFZ6ID0gWzEsIDgwXSwgJFZBID0gWzEsIDc3XSwgJFZCID0gWzEsIDc4XSwgJFZDID0gWzUsIDgsIDE0LCAxNiwgMTgsIDE5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA1MywgNzEsIDcyXTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImRpcmVjdGl2ZVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJSRFwiOiA2LCBcImRpYWdyYW1cIjogNywgXCJFT0ZcIjogOCwgXCJvcGVuRGlyZWN0aXZlXCI6IDksIFwidHlwZURpcmVjdGl2ZVwiOiAxMCwgXCJjbG9zZURpcmVjdGl2ZVwiOiAxMSwgXCI6XCI6IDEyLCBcImFyZ0RpcmVjdGl2ZVwiOiAxMywgXCJhY2NfdGl0bGVcIjogMTQsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDE1LCBcImFjY19kZXNjclwiOiAxNiwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTcsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxOCwgXCJvcGVuX2RpcmVjdGl2ZVwiOiAxOSwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiAyMCwgXCJhcmdfZGlyZWN0aXZlXCI6IDIxLCBcImNsb3NlX2RpcmVjdGl2ZVwiOiAyMiwgXCJyZXF1aXJlbWVudERlZlwiOiAyMywgXCJlbGVtZW50RGVmXCI6IDI0LCBcInJlbGF0aW9uc2hpcERlZlwiOiAyNSwgXCJyZXF1aXJlbWVudFR5cGVcIjogMjYsIFwicmVxdWlyZW1lbnROYW1lXCI6IDI3LCBcIlNUUlVDVF9TVEFSVFwiOiAyOCwgXCJyZXF1aXJlbWVudEJvZHlcIjogMjksIFwiSURcIjogMzAsIFwiQ09MT05TRVBcIjogMzEsIFwiaWRcIjogMzIsIFwiVEVYVFwiOiAzMywgXCJ0ZXh0XCI6IDM0LCBcIlJJU0tcIjogMzUsIFwicmlza0xldmVsXCI6IDM2LCBcIlZFUklGWU1USERcIjogMzcsIFwidmVyaWZ5VHlwZVwiOiAzOCwgXCJTVFJVQ1RfU1RPUFwiOiAzOSwgXCJSRVFVSVJFTUVOVFwiOiA0MCwgXCJGVU5DVElPTkFMX1JFUVVJUkVNRU5UXCI6IDQxLCBcIklOVEVSRkFDRV9SRVFVSVJFTUVOVFwiOiA0MiwgXCJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVFwiOiA0MywgXCJQSFlTSUNBTF9SRVFVSVJFTUVOVFwiOiA0NCwgXCJERVNJR05fQ09OU1RSQUlOVFwiOiA0NSwgXCJMT1dfUklTS1wiOiA0NiwgXCJNRURfUklTS1wiOiA0NywgXCJISUdIX1JJU0tcIjogNDgsIFwiVkVSSUZZX0FOQUxZU0lTXCI6IDQ5LCBcIlZFUklGWV9ERU1PTlNUUkFUSU9OXCI6IDUwLCBcIlZFUklGWV9JTlNQRUNUSU9OXCI6IDUxLCBcIlZFUklGWV9URVNUXCI6IDUyLCBcIkVMRU1FTlRcIjogNTMsIFwiZWxlbWVudE5hbWVcIjogNTQsIFwiZWxlbWVudEJvZHlcIjogNTUsIFwiVFlQRVwiOiA1NiwgXCJ0eXBlXCI6IDU3LCBcIkRPQ1JFRlwiOiA1OCwgXCJyZWZcIjogNTksIFwiRU5EX0FSUk9XX0xcIjogNjAsIFwicmVsYXRpb25zaGlwXCI6IDYxLCBcIkxJTkVcIjogNjIsIFwiRU5EX0FSUk9XX1JcIjogNjMsIFwiQ09OVEFJTlNcIjogNjQsIFwiQ09QSUVTXCI6IDY1LCBcIkRFUklWRVNcIjogNjYsIFwiU0FUSVNGSUVTXCI6IDY3LCBcIlZFUklGSUVTXCI6IDY4LCBcIlJFRklORVNcIjogNjksIFwiVFJBQ0VTXCI6IDcwLCBcInVucVN0cmluZ1wiOiA3MSwgXCJxU3RyaW5nXCI6IDcyLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNTogXCJORVdMSU5FXCIsIDY6IFwiUkRcIiwgODogXCJFT0ZcIiwgMTI6IFwiOlwiLCAxNDogXCJhY2NfdGl0bGVcIiwgMTU6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDE2OiBcImFjY19kZXNjclwiLCAxNzogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMTg6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAxOTogXCJvcGVuX2RpcmVjdGl2ZVwiLCAyMDogXCJ0eXBlX2RpcmVjdGl2ZVwiLCAyMTogXCJhcmdfZGlyZWN0aXZlXCIsIDIyOiBcImNsb3NlX2RpcmVjdGl2ZVwiLCAyODogXCJTVFJVQ1RfU1RBUlRcIiwgMzA6IFwiSURcIiwgMzE6IFwiQ09MT05TRVBcIiwgMzM6IFwiVEVYVFwiLCAzNTogXCJSSVNLXCIsIDM3OiBcIlZFUklGWU1USERcIiwgMzk6IFwiU1RSVUNUX1NUT1BcIiwgNDA6IFwiUkVRVUlSRU1FTlRcIiwgNDE6IFwiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVFwiLCA0MjogXCJJTlRFUkZBQ0VfUkVRVUlSRU1FTlRcIiwgNDM6IFwiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlRcIiwgNDQ6IFwiUEhZU0lDQUxfUkVRVUlSRU1FTlRcIiwgNDU6IFwiREVTSUdOX0NPTlNUUkFJTlRcIiwgNDY6IFwiTE9XX1JJU0tcIiwgNDc6IFwiTUVEX1JJU0tcIiwgNDg6IFwiSElHSF9SSVNLXCIsIDQ5OiBcIlZFUklGWV9BTkFMWVNJU1wiLCA1MDogXCJWRVJJRllfREVNT05TVFJBVElPTlwiLCA1MTogXCJWRVJJRllfSU5TUEVDVElPTlwiLCA1MjogXCJWRVJJRllfVEVTVFwiLCA1MzogXCJFTEVNRU5UXCIsIDU2OiBcIlRZUEVcIiwgNTg6IFwiRE9DUkVGXCIsIDYwOiBcIkVORF9BUlJPV19MXCIsIDYyOiBcIkxJTkVcIiwgNjM6IFwiRU5EX0FSUk9XX1JcIiwgNjQ6IFwiQ09OVEFJTlNcIiwgNjU6IFwiQ09QSUVTXCIsIDY2OiBcIkRFUklWRVNcIiwgNjc6IFwiU0FUSVNGSUVTXCIsIDY4OiBcIlZFUklGSUVTXCIsIDY5OiBcIlJFRklORVNcIiwgNzA6IFwiVFJBQ0VTXCIsIDcxOiBcInVucVN0cmluZ1wiLCA3MjogXCJxU3RyaW5nXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFszLCAyXSwgWzMsIDRdLCBbNCwgM10sIFs0LCA1XSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAxXSwgWzksIDFdLCBbMTAsIDFdLCBbMTMsIDFdLCBbMTEsIDFdLCBbNywgMF0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAyXSwgWzcsIDJdLCBbMjMsIDVdLCBbMjksIDVdLCBbMjksIDVdLCBbMjksIDVdLCBbMjksIDVdLCBbMjksIDJdLCBbMjksIDFdLCBbMjYsIDFdLCBbMjYsIDFdLCBbMjYsIDFdLCBbMjYsIDFdLCBbMjYsIDFdLCBbMjYsIDFdLCBbMzYsIDFdLCBbMzYsIDFdLCBbMzYsIDFdLCBbMzgsIDFdLCBbMzgsIDFdLCBbMzgsIDFdLCBbMzgsIDFdLCBbMjQsIDVdLCBbNTUsIDVdLCBbNTUsIDVdLCBbNTUsIDJdLCBbNTUsIDFdLCBbMjUsIDVdLCBbMjUsIDVdLCBbNjEsIDFdLCBbNjEsIDFdLCBbNjEsIDFdLCBbNjEsIDFdLCBbNjEsIDFdLCBbNjEsIDFdLCBbNjEsIDFdLCBbMjcsIDFdLCBbMjcsIDFdLCBbMzIsIDFdLCBbMzIsIDFdLCBbMzQsIDFdLCBbMzQsIDFdLCBbNTQsIDFdLCBbNTQsIDFdLCBbNTcsIDFdLCBbNTcsIDFdLCBbNTksIDFdLCBbNTksIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwiJSV7XCIsIFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICQkWyQwXSA9ICQkWyQwXS50cmltKCkucmVwbGFjZSgvJy9nLCAnXCInKTtcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIn0lJVwiLCBcImNsb3NlX2RpcmVjdGl2ZVwiLCBcInBpZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB5eS5hZGRSZXF1aXJlbWVudCgkJFskMCAtIDNdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB5eS5zZXROZXdSZXFJZCgkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB5eS5zZXROZXdSZXFUZXh0KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHl5LnNldE5ld1JlcVJpc2soJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgeXkuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJpc2tMZXZlbC5MT1dfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SaXNrTGV2ZWwuTUVEX1JJU0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmlza0xldmVsLkhJR0hfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgdGhpcy4kID0geXkuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5hZGRFbGVtZW50KCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnRUeXBlKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnREb2NSZWYoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5DT05UQUlOUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkNPUElFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkRFUklWRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5WRVJJRklFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLlJFRklORVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5UUkFDRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNjogJFYwLCA5OiA0LCAxNDogJFYxLCAxNjogJFYyLCAxODogJFYzLCAxOTogJFY0IH0sIHsgMTogWzNdIH0sIHsgMzogMTAsIDQ6IDIsIDU6IFsxLCA5XSwgNjogJFYwLCA5OiA0LCAxNDogJFYxLCAxNjogJFYyLCAxODogJFYzLCAxOTogJFY0IH0sIHsgNTogWzEsIDExXSB9LCB7IDEwOiAxMiwgMjA6IFsxLCAxM10gfSwgeyAxNTogWzEsIDE0XSB9LCB7IDE3OiBbMSwgMTVdIH0sIG8oJFY1LCBbMiwgOF0pLCB7IDIwOiBbMiwgOV0gfSwgeyAzOiAxNiwgNDogMiwgNjogJFYwLCA5OiA0LCAxNDogJFYxLCAxNjogJFYyLCAxODogJFYzLCAxOTogJFY0IH0sIHsgMTogWzIsIDJdIH0sIHsgNDogMjEsIDU6ICRWNiwgNzogMTcsIDg6ICRWNywgOTogNCwgMTQ6ICRWMSwgMTY6ICRWMiwgMTg6ICRWMywgMTk6ICRWNCwgMjM6IDE4LCAyNDogMTksIDI1OiAyMCwgMjY6IDIzLCAzMjogMjUsIDQwOiAkVjgsIDQxOiAkVjksIDQyOiAkVmEsIDQzOiAkVmIsIDQ0OiAkVmMsIDQ1OiAkVmQsIDUzOiAkVmUsIDcxOiAkVmYsIDcyOiAkVmcgfSwgeyAxMTogMzQsIDEyOiBbMSwgMzVdLCAyMjogJFZoIH0sIG8oWzEyLCAyMl0sIFsyLCAxMF0pLCBvKCRWNSwgWzIsIDZdKSwgbygkVjUsIFsyLCA3XSksIHsgMTogWzIsIDFdIH0sIHsgODogWzEsIDM3XSB9LCB7IDQ6IDIxLCA1OiAkVjYsIDc6IDM4LCA4OiAkVjcsIDk6IDQsIDE0OiAkVjEsIDE2OiAkVjIsIDE4OiAkVjMsIDE5OiAkVjQsIDIzOiAxOCwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMywgMzI6IDI1LCA0MDogJFY4LCA0MTogJFY5LCA0MjogJFZhLCA0MzogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA1MzogJFZlLCA3MTogJFZmLCA3MjogJFZnIH0sIHsgNDogMjEsIDU6ICRWNiwgNzogMzksIDg6ICRWNywgOTogNCwgMTQ6ICRWMSwgMTY6ICRWMiwgMTg6ICRWMywgMTk6ICRWNCwgMjM6IDE4LCAyNDogMTksIDI1OiAyMCwgMjY6IDIzLCAzMjogMjUsIDQwOiAkVjgsIDQxOiAkVjksIDQyOiAkVmEsIDQzOiAkVmIsIDQ0OiAkVmMsIDQ1OiAkVmQsIDUzOiAkVmUsIDcxOiAkVmYsIDcyOiAkVmcgfSwgeyA0OiAyMSwgNTogJFY2LCA3OiA0MCwgODogJFY3LCA5OiA0LCAxNDogJFYxLCAxNjogJFYyLCAxODogJFYzLCAxOTogJFY0LCAyMzogMTgsIDI0OiAxOSwgMjU6IDIwLCAyNjogMjMsIDMyOiAyNSwgNDA6ICRWOCwgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNTM6ICRWZSwgNzE6ICRWZiwgNzI6ICRWZyB9LCB7IDQ6IDIxLCA1OiAkVjYsIDc6IDQxLCA4OiAkVjcsIDk6IDQsIDE0OiAkVjEsIDE2OiAkVjIsIDE4OiAkVjMsIDE5OiAkVjQsIDIzOiAxOCwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMywgMzI6IDI1LCA0MDogJFY4LCA0MTogJFY5LCA0MjogJFZhLCA0MzogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA1MzogJFZlLCA3MTogJFZmLCA3MjogJFZnIH0sIHsgNDogMjEsIDU6ICRWNiwgNzogNDIsIDg6ICRWNywgOTogNCwgMTQ6ICRWMSwgMTY6ICRWMiwgMTg6ICRWMywgMTk6ICRWNCwgMjM6IDE4LCAyNDogMTksIDI1OiAyMCwgMjY6IDIzLCAzMjogMjUsIDQwOiAkVjgsIDQxOiAkVjksIDQyOiAkVmEsIDQzOiAkVmIsIDQ0OiAkVmMsIDQ1OiAkVmQsIDUzOiAkVmUsIDcxOiAkVmYsIDcyOiAkVmcgfSwgeyAyNzogNDMsIDcxOiBbMSwgNDRdLCA3MjogWzEsIDQ1XSB9LCB7IDU0OiA0NiwgNzE6IFsxLCA0N10sIDcyOiBbMSwgNDhdIH0sIHsgNjA6IFsxLCA0OV0sIDYyOiBbMSwgNTBdIH0sIG8oJFZpLCBbMiwgMjZdKSwgbygkVmksIFsyLCAyN10pLCBvKCRWaSwgWzIsIDI4XSksIG8oJFZpLCBbMiwgMjldKSwgbygkVmksIFsyLCAzMF0pLCBvKCRWaSwgWzIsIDMxXSksIG8oJFZqLCBbMiwgNTVdKSwgbygkVmosIFsyLCA1Nl0pLCBvKCRWNSwgWzIsIDRdKSwgeyAxMzogNTEsIDIxOiBbMSwgNTJdIH0sIG8oJFY1LCBbMiwgMTJdKSwgeyAxOiBbMiwgM10gfSwgeyA4OiBbMiwgMTRdIH0sIHsgODogWzIsIDE1XSB9LCB7IDg6IFsyLCAxNl0gfSwgeyA4OiBbMiwgMTddIH0sIHsgODogWzIsIDE4XSB9LCB7IDI4OiBbMSwgNTNdIH0sIHsgMjg6IFsyLCA1M10gfSwgeyAyODogWzIsIDU0XSB9LCB7IDI4OiBbMSwgNTRdIH0sIHsgMjg6IFsyLCA1OV0gfSwgeyAyODogWzIsIDYwXSB9LCB7IDYxOiA1NSwgNjQ6ICRWaywgNjU6ICRWbCwgNjY6ICRWbSwgNjc6ICRWbiwgNjg6ICRWbywgNjk6ICRWcCwgNzA6ICRWcSB9LCB7IDYxOiA2MywgNjQ6ICRWaywgNjU6ICRWbCwgNjY6ICRWbSwgNjc6ICRWbiwgNjg6ICRWbywgNjk6ICRWcCwgNzA6ICRWcSB9LCB7IDExOiA2NCwgMjI6ICRWaCB9LCB7IDIyOiBbMiwgMTFdIH0sIHsgNTogWzEsIDY1XSB9LCB7IDU6IFsxLCA2Nl0gfSwgeyA2MjogWzEsIDY3XSB9LCBvKCRWciwgWzIsIDQ2XSksIG8oJFZyLCBbMiwgNDddKSwgbygkVnIsIFsyLCA0OF0pLCBvKCRWciwgWzIsIDQ5XSksIG8oJFZyLCBbMiwgNTBdKSwgbygkVnIsIFsyLCA1MV0pLCBvKCRWciwgWzIsIDUyXSksIHsgNjM6IFsxLCA2OF0gfSwgbygkVjUsIFsyLCA1XSksIHsgNTogJFZzLCAyOTogNjksIDMwOiAkVnQsIDMzOiAkVnUsIDM1OiAkVnYsIDM3OiAkVncsIDM5OiAkVnggfSwgeyA1OiAkVnksIDM5OiAkVnosIDU1OiA3NiwgNTY6ICRWQSwgNTg6ICRWQiB9LCB7IDMyOiA4MSwgNzE6ICRWZiwgNzI6ICRWZyB9LCB7IDMyOiA4MiwgNzE6ICRWZiwgNzI6ICRWZyB9LCBvKCRWQywgWzIsIDE5XSksIHsgMzE6IFsxLCA4M10gfSwgeyAzMTogWzEsIDg0XSB9LCB7IDMxOiBbMSwgODVdIH0sIHsgMzE6IFsxLCA4Nl0gfSwgeyA1OiAkVnMsIDI5OiA4NywgMzA6ICRWdCwgMzM6ICRWdSwgMzU6ICRWdiwgMzc6ICRWdywgMzk6ICRWeCB9LCBvKCRWQywgWzIsIDI1XSksIG8oJFZDLCBbMiwgMzldKSwgeyAzMTogWzEsIDg4XSB9LCB7IDMxOiBbMSwgODldIH0sIHsgNTogJFZ5LCAzOTogJFZ6LCA1NTogOTAsIDU2OiAkVkEsIDU4OiAkVkIgfSwgbygkVkMsIFsyLCA0M10pLCBvKCRWQywgWzIsIDQ0XSksIG8oJFZDLCBbMiwgNDVdKSwgeyAzMjogOTEsIDcxOiAkVmYsIDcyOiAkVmcgfSwgeyAzNDogOTIsIDcxOiBbMSwgOTNdLCA3MjogWzEsIDk0XSB9LCB7IDM2OiA5NSwgNDY6IFsxLCA5Nl0sIDQ3OiBbMSwgOTddLCA0ODogWzEsIDk4XSB9LCB7IDM4OiA5OSwgNDk6IFsxLCAxMDBdLCA1MDogWzEsIDEwMV0sIDUxOiBbMSwgMTAyXSwgNTI6IFsxLCAxMDNdIH0sIG8oJFZDLCBbMiwgMjRdKSwgeyA1NzogMTA0LCA3MTogWzEsIDEwNV0sIDcyOiBbMSwgMTA2XSB9LCB7IDU5OiAxMDcsIDcxOiBbMSwgMTA4XSwgNzI6IFsxLCAxMDldIH0sIG8oJFZDLCBbMiwgNDJdKSwgeyA1OiBbMSwgMTEwXSB9LCB7IDU6IFsxLCAxMTFdIH0sIHsgNTogWzIsIDU3XSB9LCB7IDU6IFsyLCA1OF0gfSwgeyA1OiBbMSwgMTEyXSB9LCB7IDU6IFsyLCAzMl0gfSwgeyA1OiBbMiwgMzNdIH0sIHsgNTogWzIsIDM0XSB9LCB7IDU6IFsxLCAxMTNdIH0sIHsgNTogWzIsIDM1XSB9LCB7IDU6IFsyLCAzNl0gfSwgeyA1OiBbMiwgMzddIH0sIHsgNTogWzIsIDM4XSB9LCB7IDU6IFsxLCAxMTRdIH0sIHsgNTogWzIsIDYxXSB9LCB7IDU6IFsyLCA2Ml0gfSwgeyA1OiBbMSwgMTE1XSB9LCB7IDU6IFsyLCA2M10gfSwgeyA1OiBbMiwgNjRdIH0sIHsgNTogJFZzLCAyOTogMTE2LCAzMDogJFZ0LCAzMzogJFZ1LCAzNTogJFZ2LCAzNzogJFZ3LCAzOTogJFZ4IH0sIHsgNTogJFZzLCAyOTogMTE3LCAzMDogJFZ0LCAzMzogJFZ1LCAzNTogJFZ2LCAzNzogJFZ3LCAzOTogJFZ4IH0sIHsgNTogJFZzLCAyOTogMTE4LCAzMDogJFZ0LCAzMzogJFZ1LCAzNTogJFZ2LCAzNzogJFZ3LCAzOTogJFZ4IH0sIHsgNTogJFZzLCAyOTogMTE5LCAzMDogJFZ0LCAzMzogJFZ1LCAzNTogJFZ2LCAzNzogJFZ3LCAzOTogJFZ4IH0sIHsgNTogJFZ5LCAzOTogJFZ6LCA1NTogMTIwLCA1NjogJFZBLCA1ODogJFZCIH0sIHsgNTogJFZ5LCAzOTogJFZ6LCA1NTogMTIxLCA1NjogJFZBLCA1ODogJFZCIH0sIG8oJFZDLCBbMiwgMjBdKSwgbygkVkMsIFsyLCAyMV0pLCBvKCRWQywgWzIsIDIyXSksIG8oJFZDLCBbMiwgMjNdKSwgbygkVkMsIFsyLCA0MF0pLCBvKCRWQywgWzIsIDQxXSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDg6IFsyLCA5XSwgMTA6IFsyLCAyXSwgMTY6IFsyLCAxXSwgMzc6IFsyLCAzXSwgMzg6IFsyLCAxNF0sIDM5OiBbMiwgMTVdLCA0MDogWzIsIDE2XSwgNDE6IFsyLCAxN10sIDQyOiBbMiwgMThdLCA0NDogWzIsIDUzXSwgNDU6IFsyLCA1NF0sIDQ3OiBbMiwgNTldLCA0ODogWzIsIDYwXSwgNTI6IFsyLCAxMV0sIDkzOiBbMiwgNTddLCA5NDogWzIsIDU4XSwgOTY6IFsyLCAzMl0sIDk3OiBbMiwgMzNdLCA5ODogWzIsIDM0XSwgMTAwOiBbMiwgMzVdLCAxMDE6IFsyLCAzNl0sIDEwMjogWzIsIDM3XSwgMTAzOiBbMiwgMzhdLCAxMDU6IFsyLCA2MV0sIDEwNjogWzIsIDYyXSwgMTA4OiBbMiwgNjNdLCAxMDk6IFsyLCA2NF0gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gXCJ0aXRsZVwiO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiA2NjtcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDY3O1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiA2OTtcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNTY7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiA1ODtcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDYwO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gNjM7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiA2MjtcbiAgICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIFwicVN0cmluZ1wiO1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gNzE7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBydWxlczogWy9eKD86JSVcXHspL2ksIC9eKD86KCg/Oig/IVxcfSUlKVteOi5dKSopKS9pLCAvXig/OjopL2ksIC9eKD86XFx9JSUpL2ksIC9eKD86KCg/Oig/IVxcfSUlKS58XFxuKSopKS9pLCAvXig/OnRpdGxlXFxzW14jXFxuO10rKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzooXFxyP1xcbikrKS9pLCAvXig/OlxccyspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JVteXFxuXSopL2ksIC9eKD86JCkvaSwgL14oPzpyZXF1aXJlbWVudERpYWdyYW1cXGIpL2ksIC9eKD86XFx7KS9pLCAvXig/OlxcfSkvaSwgL14oPzo6KS9pLCAvXig/OmlkXFxiKS9pLCAvXig/OnRleHRcXGIpL2ksIC9eKD86cmlza1xcYikvaSwgL14oPzp2ZXJpZnlNZXRob2RcXGIpL2ksIC9eKD86cmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XFxiKS9pLCAvXig/OmludGVyZmFjZVJlcXVpcmVtZW50XFxiKS9pLCAvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxcYikvaSwgL14oPzpkZXNpZ25Db25zdHJhaW50XFxiKS9pLCAvXig/Omxvd1xcYikvaSwgL14oPzptZWRpdW1cXGIpL2ksIC9eKD86aGlnaFxcYikvaSwgL14oPzphbmFseXNpc1xcYikvaSwgL14oPzpkZW1vbnN0cmF0aW9uXFxiKS9pLCAvXig/Omluc3BlY3Rpb25cXGIpL2ksIC9eKD86dGVzdFxcYikvaSwgL14oPzplbGVtZW50XFxiKS9pLCAvXig/OmNvbnRhaW5zXFxiKS9pLCAvXig/OmNvcGllc1xcYikvaSwgL14oPzpkZXJpdmVzXFxiKS9pLCAvXig/OnNhdGlzZmllc1xcYikvaSwgL14oPzp2ZXJpZmllc1xcYikvaSwgL14oPzpyZWZpbmVzXFxiKS9pLCAvXig/OnRyYWNlc1xcYikvaSwgL14oPzp0eXBlXFxiKS9pLCAvXig/OmRvY3JlZlxcYikvaSwgL14oPzo8LSkvaSwgL14oPzotPikvaSwgL14oPzotKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86W1xcd11bXlxcclxcblxce1xcPFxcPlxcLVxcPV0qKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTEsIDEyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjbG9zZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFyZ19kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFszLCA0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzIsIDNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm9wZW5fZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidW5xU3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0b2tlblwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbNTMsIDU0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgNSwgNiwgOCwgMTAsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBQYXJzZXIucHJvdG90eXBlID0gcGFyc2VyMjtcbiAgcGFyc2VyMi5QYXJzZXIgPSBQYXJzZXI7XG4gIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KCk7XG5wYXJzZXIucGFyc2VyID0gcGFyc2VyO1xuY29uc3QgcGFyc2VyJDEgPSBwYXJzZXI7XG5sZXQgcmVsYXRpb25zID0gW107XG5sZXQgbGF0ZXN0UmVxdWlyZW1lbnQgPSB7fTtcbmxldCByZXF1aXJlbWVudHMgPSB7fTtcbmxldCBsYXRlc3RFbGVtZW50ID0ge307XG5sZXQgZWxlbWVudHMgPSB7fTtcbmNvbnN0IFJlcXVpcmVtZW50VHlwZSA9IHtcbiAgUkVRVUlSRU1FTlQ6IFwiUmVxdWlyZW1lbnRcIixcbiAgRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDogXCJGdW5jdGlvbmFsIFJlcXVpcmVtZW50XCIsXG4gIElOVEVSRkFDRV9SRVFVSVJFTUVOVDogXCJJbnRlcmZhY2UgUmVxdWlyZW1lbnRcIixcbiAgUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IFwiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnRcIixcbiAgUEhZU0lDQUxfUkVRVUlSRU1FTlQ6IFwiUGh5c2ljYWwgUmVxdWlyZW1lbnRcIixcbiAgREVTSUdOX0NPTlNUUkFJTlQ6IFwiRGVzaWduIENvbnN0cmFpbnRcIlxufTtcbmNvbnN0IFJpc2tMZXZlbCA9IHtcbiAgTE9XX1JJU0s6IFwiTG93XCIsXG4gIE1FRF9SSVNLOiBcIk1lZGl1bVwiLFxuICBISUdIX1JJU0s6IFwiSGlnaFwiXG59O1xuY29uc3QgVmVyaWZ5VHlwZSA9IHtcbiAgVkVSSUZZX0FOQUxZU0lTOiBcIkFuYWx5c2lzXCIsXG4gIFZFUklGWV9ERU1PTlNUUkFUSU9OOiBcIkRlbW9uc3RyYXRpb25cIixcbiAgVkVSSUZZX0lOU1BFQ1RJT046IFwiSW5zcGVjdGlvblwiLFxuICBWRVJJRllfVEVTVDogXCJUZXN0XCJcbn07XG5jb25zdCBSZWxhdGlvbnNoaXBzID0ge1xuICBDT05UQUlOUzogXCJjb250YWluc1wiLFxuICBDT1BJRVM6IFwiY29waWVzXCIsXG4gIERFUklWRVM6IFwiZGVyaXZlc1wiLFxuICBTQVRJU0ZJRVM6IFwic2F0aXNmaWVzXCIsXG4gIFZFUklGSUVTOiBcInZlcmlmaWVzXCIsXG4gIFJFRklORVM6IFwicmVmaW5lc1wiLFxuICBUUkFDRVM6IFwidHJhY2VzXCJcbn07XG5jb25zdCBwYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSkge1xuICBtZXJtYWlkQVBJLnBhcnNlRGlyZWN0aXZlKHRoaXMsIHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSk7XG59O1xuY29uc3QgYWRkUmVxdWlyZW1lbnQgPSAobmFtZSwgdHlwZSkgPT4ge1xuICBpZiAocmVxdWlyZW1lbnRzW25hbWVdID09PSB2b2lkIDApIHtcbiAgICByZXF1aXJlbWVudHNbbmFtZV0gPSB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZSxcbiAgICAgIGlkOiBsYXRlc3RSZXF1aXJlbWVudC5pZCxcbiAgICAgIHRleHQ6IGxhdGVzdFJlcXVpcmVtZW50LnRleHQsXG4gICAgICByaXNrOiBsYXRlc3RSZXF1aXJlbWVudC5yaXNrLFxuICAgICAgdmVyaWZ5TWV0aG9kOiBsYXRlc3RSZXF1aXJlbWVudC52ZXJpZnlNZXRob2RcbiAgICB9O1xuICB9XG4gIGxhdGVzdFJlcXVpcmVtZW50ID0ge307XG4gIHJldHVybiByZXF1aXJlbWVudHNbbmFtZV07XG59O1xuY29uc3QgZ2V0UmVxdWlyZW1lbnRzID0gKCkgPT4gcmVxdWlyZW1lbnRzO1xuY29uc3Qgc2V0TmV3UmVxSWQgPSAoaWQpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC5pZCA9IGlkO1xuICB9XG59O1xuY29uc3Qgc2V0TmV3UmVxVGV4dCA9ICh0ZXh0KSA9PiB7XG4gIGlmIChsYXRlc3RSZXF1aXJlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgbGF0ZXN0UmVxdWlyZW1lbnQudGV4dCA9IHRleHQ7XG4gIH1cbn07XG5jb25zdCBzZXROZXdSZXFSaXNrID0gKHJpc2spID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC5yaXNrID0gcmlzaztcbiAgfVxufTtcbmNvbnN0IHNldE5ld1JlcVZlcmlmeU1ldGhvZCA9ICh2ZXJpZnlNZXRob2QpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC52ZXJpZnlNZXRob2QgPSB2ZXJpZnlNZXRob2Q7XG4gIH1cbn07XG5jb25zdCBhZGRFbGVtZW50ID0gKG5hbWUpID0+IHtcbiAgaWYgKGVsZW1lbnRzW25hbWVdID09PSB2b2lkIDApIHtcbiAgICBlbGVtZW50c1tuYW1lXSA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiBsYXRlc3RFbGVtZW50LnR5cGUsXG4gICAgICBkb2NSZWY6IGxhdGVzdEVsZW1lbnQuZG9jUmVmXG4gICAgfTtcbiAgICBsb2cuaW5mbyhcIkFkZGVkIG5ldyByZXF1aXJlbWVudDogXCIsIG5hbWUpO1xuICB9XG4gIGxhdGVzdEVsZW1lbnQgPSB7fTtcbiAgcmV0dXJuIGVsZW1lbnRzW25hbWVdO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzID0gKCkgPT4gZWxlbWVudHM7XG5jb25zdCBzZXROZXdFbGVtZW50VHlwZSA9ICh0eXBlKSA9PiB7XG4gIGlmIChsYXRlc3RFbGVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RFbGVtZW50LnR5cGUgPSB0eXBlO1xuICB9XG59O1xuY29uc3Qgc2V0TmV3RWxlbWVudERvY1JlZiA9IChkb2NSZWYpID0+IHtcbiAgaWYgKGxhdGVzdEVsZW1lbnQgIT09IHZvaWQgMCkge1xuICAgIGxhdGVzdEVsZW1lbnQuZG9jUmVmID0gZG9jUmVmO1xuICB9XG59O1xuY29uc3QgYWRkUmVsYXRpb25zaGlwID0gKHR5cGUsIHNyYywgZHN0KSA9PiB7XG4gIHJlbGF0aW9ucy5wdXNoKHtcbiAgICB0eXBlLFxuICAgIHNyYyxcbiAgICBkc3RcbiAgfSk7XG59O1xuY29uc3QgZ2V0UmVsYXRpb25zaGlwcyA9ICgpID0+IHJlbGF0aW9ucztcbmNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICByZWxhdGlvbnMgPSBbXTtcbiAgbGF0ZXN0UmVxdWlyZW1lbnQgPSB7fTtcbiAgcmVxdWlyZW1lbnRzID0ge307XG4gIGxhdGVzdEVsZW1lbnQgPSB7fTtcbiAgZWxlbWVudHMgPSB7fTtcbiAgY2xlYXIkMSgpO1xufTtcbmNvbnN0IGRiID0ge1xuICBSZXF1aXJlbWVudFR5cGUsXG4gIFJpc2tMZXZlbCxcbiAgVmVyaWZ5VHlwZSxcbiAgUmVsYXRpb25zaGlwcyxcbiAgcGFyc2VEaXJlY3RpdmUsXG4gIGdldENvbmZpZzogKCkgPT4gZ2V0Q29uZmlnKCkucmVxLFxuICBhZGRSZXF1aXJlbWVudCxcbiAgZ2V0UmVxdWlyZW1lbnRzLFxuICBzZXROZXdSZXFJZCxcbiAgc2V0TmV3UmVxVGV4dCxcbiAgc2V0TmV3UmVxUmlzayxcbiAgc2V0TmV3UmVxVmVyaWZ5TWV0aG9kLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgYWRkRWxlbWVudCxcbiAgZ2V0RWxlbWVudHMsXG4gIHNldE5ld0VsZW1lbnRUeXBlLFxuICBzZXROZXdFbGVtZW50RG9jUmVmLFxuICBhZGRSZWxhdGlvbnNoaXAsXG4gIGdldFJlbGF0aW9uc2hpcHMsXG4gIGNsZWFyXG59O1xuY29uc3QgZ2V0U3R5bGVzID0gKG9wdGlvbnMpID0+IGBcblxuICBtYXJrZXIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5yZWxhdGlvbkNvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5yZWxhdGlvbkNvbG9yfTtcbiAgfVxuXG4gIG1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6ICR7b3B0aW9ucy5mb250U2l6ZX07XG4gIH1cblxuICAucmVxQm94IHtcbiAgICBmaWxsOiAke29wdGlvbnMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTtcbiAgICBmaWxsLW9wYWNpdHk6IDEuMDtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6ICR7b3B0aW9ucy5yZXF1aXJlbWVudEJvcmRlclNpemV9O1xuICB9XG4gIFxuICAucmVxVGl0bGUsIC5yZXFMYWJlbHtcbiAgICBmaWxsOiAgJHtvcHRpb25zLnJlcXVpcmVtZW50VGV4dENvbG9yfTtcbiAgfVxuICAucmVxTGFiZWxCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZH07XG4gICAgZmlsbC1vcGFjaXR5OiAxLjA7XG4gIH1cblxuICAucmVxLXRpdGxlLWxpbmUge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlbGF0aW9uQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgfVxuICAucmVsYXRpb25zaGlwTGFiZWwge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5yZWxhdGlvbkxhYmVsQ29sb3J9O1xuICB9XG5cbmA7XG5jb25zdCBzdHlsZXMgPSBnZXRTdHlsZXM7XG5jb25zdCBSZXFNYXJrZXJzID0ge1xuICBDT05UQUlOUzogXCJjb250YWluc1wiLFxuICBBUlJPVzogXCJhcnJvd1wiXG59O1xuY29uc3QgaW5zZXJ0TGluZUVuZGluZ3MgPSAocGFyZW50Tm9kZSwgY29uZjIpID0+IHtcbiAgbGV0IGNvbnRhaW5zTm9kZSA9IHBhcmVudE5vZGUuYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFJlcU1hcmtlcnMuQ09OVEFJTlMgKyBcIl9saW5lX2VuZGluZ1wiKS5hdHRyKFwicmVmWFwiLCAwKS5hdHRyKFwicmVmWVwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCBjb25mMi5saW5lX2hlaWdodCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCBjb25mMi5saW5lX2hlaWdodCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiZ1wiKTtcbiAgY29udGFpbnNOb2RlLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwiY3lcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwiclwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgY29udGFpbnNOb2RlLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIDApLmF0dHIoXCJ4MlwiLCBjb25mMi5saW5lX2hlaWdodCkuYXR0cihcInkxXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcInkyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcbiAgY29udGFpbnNOb2RlLmFwcGVuZChcImxpbmVcIikuYXR0cihcInkxXCIsIDApLmF0dHIoXCJ5MlwiLCBjb25mMi5saW5lX2hlaWdodCkuYXR0cihcIngxXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcIngyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcbiAgcGFyZW50Tm9kZS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgUmVxTWFya2Vycy5BUlJPVyArIFwiX2xpbmVfZW5kaW5nXCIpLmF0dHIoXCJyZWZYXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwicmVmWVwiLCAwLjUgKiBjb25mMi5saW5lX2hlaWdodCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgYE0wLDBcbiAgICAgIEwke2NvbmYyLmxpbmVfaGVpZ2h0fSwke2NvbmYyLmxpbmVfaGVpZ2h0IC8gMn1cbiAgICAgIE0ke2NvbmYyLmxpbmVfaGVpZ2h0fSwke2NvbmYyLmxpbmVfaGVpZ2h0IC8gMn1cbiAgICAgIEwwLCR7Y29uZjIubGluZV9oZWlnaHR9YFxuICApLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG59O1xuY29uc3QgbWFya2VycyA9IHtcbiAgUmVxTWFya2VycyxcbiAgaW5zZXJ0TGluZUVuZGluZ3Ncbn07XG5sZXQgY29uZiA9IHt9O1xubGV0IHJlbENudCA9IDA7XG5jb25zdCBuZXdSZWN0Tm9kZSA9IChwYXJlbnROb2RlLCBpZCkgPT4ge1xuICByZXR1cm4gcGFyZW50Tm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgaWQpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZXFCb3hcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuYXR0cihcIndpZHRoXCIsIGNvbmYucmVjdF9taW5fd2lkdGggKyBcInB4XCIpLmF0dHIoXCJoZWlnaHRcIiwgY29uZi5yZWN0X21pbl9oZWlnaHQgKyBcInB4XCIpO1xufTtcbmNvbnN0IG5ld1RpdGxlTm9kZSA9IChwYXJlbnROb2RlLCBpZCwgdHh0cykgPT4ge1xuICBsZXQgeCA9IGNvbmYucmVjdF9taW5fd2lkdGggLyAyO1xuICBsZXQgdGl0bGUgPSBwYXJlbnROb2RlLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIFwicmVxIHJlcUxhYmVsIHJlcVRpdGxlXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgY29uZi5yZWN0X3BhZGRpbmcpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImhhbmdpbmdcIik7XG4gIGxldCBpID0gMDtcbiAgdHh0cy5mb3JFYWNoKCh0ZXh0U3RyKSA9PiB7XG4gICAgaWYgKGkgPT0gMCkge1xuICAgICAgdGl0bGUuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ4XCIsIGNvbmYucmVjdF9taW5fd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgMCkudGV4dCh0ZXh0U3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ4XCIsIGNvbmYucmVjdF9taW5fd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgY29uZi5saW5lX2hlaWdodCAqIDAuNzUpLnRleHQodGV4dFN0cik7XG4gICAgfVxuICAgIGkrKztcbiAgfSk7XG4gIGxldCB5UGFkZGluZyA9IDEuNSAqIGNvbmYucmVjdF9wYWRkaW5nO1xuICBsZXQgbGluZVBhZGRpbmcgPSBpICogY29uZi5saW5lX2hlaWdodCAqIDAuNzU7XG4gIGxldCB0b3RhbFkgPSB5UGFkZGluZyArIGxpbmVQYWRkaW5nO1xuICBwYXJlbnROb2RlLmFwcGVuZChcImxpbmVcIikuYXR0cihcImNsYXNzXCIsIFwicmVxLXRpdGxlLWxpbmVcIikuYXR0cihcIngxXCIsIFwiMFwiKS5hdHRyKFwieDJcIiwgY29uZi5yZWN0X21pbl93aWR0aCkuYXR0cihcInkxXCIsIHRvdGFsWSkuYXR0cihcInkyXCIsIHRvdGFsWSk7XG4gIHJldHVybiB7XG4gICAgdGl0bGVOb2RlOiB0aXRsZSxcbiAgICB5OiB0b3RhbFlcbiAgfTtcbn07XG5jb25zdCBuZXdCb2R5Tm9kZSA9IChwYXJlbnROb2RlLCBpZCwgdHh0cywgeVN0YXJ0KSA9PiB7XG4gIGxldCBib2R5ID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZXFMYWJlbFwiKS5hdHRyKFwiaWRcIiwgaWQpLmF0dHIoXCJ4XCIsIGNvbmYucmVjdF9wYWRkaW5nKS5hdHRyKFwieVwiLCB5U3RhcnQpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImhhbmdpbmdcIik7XG4gIGxldCBjdXJyZW50Um93ID0gMDtcbiAgY29uc3QgY2hhckxpbWl0ID0gMzA7XG4gIGxldCB3cmFwcGVkVHh0cyA9IFtdO1xuICB0eHRzLmZvckVhY2goKHRleHRTdHIpID0+IHtcbiAgICBsZXQgY3VycmVudFRleHRMZW4gPSB0ZXh0U3RyLmxlbmd0aDtcbiAgICB3aGlsZSAoY3VycmVudFRleHRMZW4gPiBjaGFyTGltaXQgJiYgY3VycmVudFJvdyA8IDMpIHtcbiAgICAgIGxldCBmaXJzdFBhcnQgPSB0ZXh0U3RyLnN1YnN0cmluZygwLCBjaGFyTGltaXQpO1xuICAgICAgdGV4dFN0ciA9IHRleHRTdHIuc3Vic3RyaW5nKGNoYXJMaW1pdCwgdGV4dFN0ci5sZW5ndGgpO1xuICAgICAgY3VycmVudFRleHRMZW4gPSB0ZXh0U3RyLmxlbmd0aDtcbiAgICAgIHdyYXBwZWRUeHRzW3dyYXBwZWRUeHRzLmxlbmd0aF0gPSBmaXJzdFBhcnQ7XG4gICAgICBjdXJyZW50Um93Kys7XG4gICAgfVxuICAgIGlmIChjdXJyZW50Um93ID09IDMpIHtcbiAgICAgIGxldCBsYXN0U3RyID0gd3JhcHBlZFR4dHNbd3JhcHBlZFR4dHMubGVuZ3RoIC0gMV07XG4gICAgICB3cmFwcGVkVHh0c1t3cmFwcGVkVHh0cy5sZW5ndGggLSAxXSA9IGxhc3RTdHIuc3Vic3RyaW5nKDAsIGxhc3RTdHIubGVuZ3RoIC0gNCkgKyBcIi4uLlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB3cmFwcGVkVHh0c1t3cmFwcGVkVHh0cy5sZW5ndGhdID0gdGV4dFN0cjtcbiAgICB9XG4gICAgY3VycmVudFJvdyA9IDA7XG4gIH0pO1xuICB3cmFwcGVkVHh0cy5mb3JFYWNoKCh0ZXh0U3RyKSA9PiB7XG4gICAgYm9keS5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCBjb25mLnJlY3RfcGFkZGluZykuYXR0cihcImR5XCIsIGNvbmYubGluZV9oZWlnaHQpLnRleHQodGV4dFN0cik7XG4gIH0pO1xuICByZXR1cm4gYm9keTtcbn07XG5jb25zdCBhZGRFZGdlTGFiZWwgPSAocGFyZW50Tm9kZSwgc3ZnUGF0aCwgY29uZjIsIHR4dCkgPT4ge1xuICBjb25zdCBsZW4gPSBzdmdQYXRoLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpO1xuICBjb25zdCBsYWJlbFBvaW50ID0gc3ZnUGF0aC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChsZW4gKiAwLjUpO1xuICBjb25zdCBsYWJlbElkID0gXCJyZWxcIiArIHJlbENudDtcbiAgcmVsQ250Kys7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHBhcmVudE5vZGUuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJyZXEgcmVsYXRpb25zaGlwTGFiZWxcIikuYXR0cihcImlkXCIsIGxhYmVsSWQpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCkuYXR0cihcInlcIiwgbGFiZWxQb2ludC55KS5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnRleHQodHh0KTtcbiAgY29uc3QgbGFiZWxCQm94ID0gbGFiZWxOb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gIHBhcmVudE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGxhYmVsSWQpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZXFMYWJlbEJveFwiKS5hdHRyKFwieFwiLCBsYWJlbFBvaW50LnggLSBsYWJlbEJCb3gud2lkdGggLyAyKS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkgLSBsYWJlbEJCb3guaGVpZ2h0IC8gMikuYXR0cihcIndpZHRoXCIsIGxhYmVsQkJveC53aWR0aCkuYXR0cihcImhlaWdodFwiLCBsYWJlbEJCb3guaGVpZ2h0KS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwgXCI4NSVcIik7XG59O1xuY29uc3QgZHJhd1JlbGF0aW9uc2hpcEZyb21MYXlvdXQgPSBmdW5jdGlvbihzdmcsIHJlbCwgZywgaW5zZXJ0LCBkaWFnT2JqKSB7XG4gIGNvbnN0IGVkZ2UgPSBnLmVkZ2UoZWxlbWVudFN0cmluZyhyZWwuc3JjKSwgZWxlbWVudFN0cmluZyhyZWwuZHN0KSk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KTtcbiAgY29uc3Qgc3ZnUGF0aCA9IHN2Zy5pbnNlcnQoXCJwYXRoXCIsIFwiI1wiICsgaW5zZXJ0KS5hdHRyKFwiY2xhc3NcIiwgXCJlciByZWxhdGlvbnNoaXBMaW5lXCIpLmF0dHIoXCJkXCIsIGxpbmVGdW5jdGlvbihlZGdlLnBvaW50cykpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgaWYgKHJlbC50eXBlID09IGRpYWdPYmouZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUykge1xuICAgIHN2Z1BhdGguYXR0cihcbiAgICAgIFwibWFya2VyLXN0YXJ0XCIsXG4gICAgICBcInVybChcIiArIGNvbW1vbi5nZXRVcmwoY29uZi5hcnJvd01hcmtlckFic29sdXRlKSArIFwiI1wiICsgcmVsLnR5cGUgKyBcIl9saW5lX2VuZGluZylcIlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEwLDdcIik7XG4gICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgXCJtYXJrZXItZW5kXCIsXG4gICAgICBcInVybChcIiArIGNvbW1vbi5nZXRVcmwoY29uZi5hcnJvd01hcmtlckFic29sdXRlKSArIFwiI1wiICsgbWFya2Vycy5SZXFNYXJrZXJzLkFSUk9XICsgXCJfbGluZV9lbmRpbmcpXCJcbiAgICApO1xuICB9XG4gIGFkZEVkZ2VMYWJlbChzdmcsIHN2Z1BhdGgsIGNvbmYsIGA8PCR7cmVsLnR5cGV9Pj5gKTtcbiAgcmV0dXJuO1xufTtcbmNvbnN0IGRyYXdSZXFzID0gKHJlcXMsIGdyYXBoLCBzdmdOb2RlKSA9PiB7XG4gIE9iamVjdC5rZXlzKHJlcXMpLmZvckVhY2goKHJlcU5hbWUpID0+IHtcbiAgICBsZXQgcmVxID0gcmVxc1tyZXFOYW1lXTtcbiAgICByZXFOYW1lID0gZWxlbWVudFN0cmluZyhyZXFOYW1lKTtcbiAgICBsb2cuaW5mbyhcIkFkZGVkIG5ldyByZXF1aXJlbWVudDogXCIsIHJlcU5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgcmVxTmFtZSk7XG4gICAgY29uc3QgdGV4dElkID0gXCJyZXEtXCIgKyByZXFOYW1lO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgcmVxTmFtZSArIFwiX3RpdGxlXCIsIFtcbiAgICAgIGA8PCR7cmVxLnR5cGV9Pj5gLFxuICAgICAgYCR7cmVxLm5hbWV9YFxuICAgIF0pO1xuICAgIG5ld0JvZHlOb2RlKFxuICAgICAgZ3JvdXBOb2RlLFxuICAgICAgcmVxTmFtZSArIFwiX2JvZHlcIixcbiAgICAgIFtcbiAgICAgICAgYElkOiAke3JlcS5pZH1gLFxuICAgICAgICBgVGV4dDogJHtyZXEudGV4dH1gLFxuICAgICAgICBgUmlzazogJHtyZXEucmlza31gLFxuICAgICAgICBgVmVyaWZpY2F0aW9uOiAke3JlcS52ZXJpZnlNZXRob2R9YFxuICAgICAgXSxcbiAgICAgIHRpdGxlTm9kZUluZm8ueVxuICAgICk7XG4gICAgY29uc3QgcmVjdEJCb3ggPSByZWN0Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGdyYXBoLnNldE5vZGUocmVxTmFtZSwge1xuICAgICAgd2lkdGg6IHJlY3RCQm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWN0QkJveC5oZWlnaHQsXG4gICAgICBzaGFwZTogXCJyZWN0XCIsXG4gICAgICBpZDogcmVxTmFtZVxuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkcmF3RWxlbWVudHMgPSAoZWxzLCBncmFwaCwgc3ZnTm9kZSkgPT4ge1xuICBPYmplY3Qua2V5cyhlbHMpLmZvckVhY2goKGVsTmFtZSkgPT4ge1xuICAgIGxldCBlbCA9IGVsc1tlbE5hbWVdO1xuICAgIGNvbnN0IGlkID0gZWxlbWVudFN0cmluZyhlbE5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgaWQpO1xuICAgIGNvbnN0IHRleHRJZCA9IFwiZWxlbWVudC1cIiArIGlkO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgdGV4dElkICsgXCJfdGl0bGVcIiwgW2A8PEVsZW1lbnQ+PmAsIGAke2VsTmFtZX1gXSk7XG4gICAgbmV3Qm9keU5vZGUoXG4gICAgICBncm91cE5vZGUsXG4gICAgICB0ZXh0SWQgKyBcIl9ib2R5XCIsXG4gICAgICBbYFR5cGU6ICR7ZWwudHlwZSB8fCBcIk5vdCBTcGVjaWZpZWRcIn1gLCBgRG9jIFJlZjogJHtlbC5kb2NSZWYgfHwgXCJOb25lXCJ9YF0sXG4gICAgICB0aXRsZU5vZGVJbmZvLnlcbiAgICApO1xuICAgIGNvbnN0IHJlY3RCQm94ID0gcmVjdE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBncmFwaC5zZXROb2RlKGlkLCB7XG4gICAgICB3aWR0aDogcmVjdEJCb3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3RCQm94LmhlaWdodCxcbiAgICAgIHNoYXBlOiBcInJlY3RcIixcbiAgICAgIGlkXG4gICAgfSk7XG4gIH0pO1xufTtcbmNvbnN0IGFkZFJlbGF0aW9uc2hpcHMgPSAocmVsYXRpb25zaGlwcywgZykgPT4ge1xuICByZWxhdGlvbnNoaXBzLmZvckVhY2goZnVuY3Rpb24ocikge1xuICAgIGxldCBzcmMgPSBlbGVtZW50U3RyaW5nKHIuc3JjKTtcbiAgICBsZXQgZHN0ID0gZWxlbWVudFN0cmluZyhyLmRzdCk7XG4gICAgZy5zZXRFZGdlKHNyYywgZHN0LCB7IHJlbGF0aW9uc2hpcDogciB9KTtcbiAgfSk7XG4gIHJldHVybiByZWxhdGlvbnNoaXBzO1xufTtcbmNvbnN0IGFkanVzdEVudGl0aWVzID0gZnVuY3Rpb24oc3ZnTm9kZSwgZ3JhcGgpIHtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGdyYXBoLm5vZGUodikgIT09IHZvaWQgMCkge1xuICAgICAgc3ZnTm9kZS5zZWxlY3QoXCIjXCIgKyB2KTtcbiAgICAgIHN2Z05vZGUuc2VsZWN0KFwiI1wiICsgdikuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoZ3JhcGgubm9kZSh2KS54IC0gZ3JhcGgubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZ3JhcGgubm9kZSh2KS55IC0gZ3JhcGgubm9kZSh2KS5oZWlnaHQgLyAyKSArIFwiIClcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm47XG59O1xuY29uc3QgZWxlbWVudFN0cmluZyA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMvZywgXCJcIikucmVwbGFjZSgvXFwuL2csIFwiX1wiKTtcbn07XG5jb25zdCBkcmF3ID0gKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBjb25mID0gZ2V0Q29uZmlnKCkucmVxdWlyZW1lbnQ7XG4gIGRpYWdPYmouZGIuY2xlYXIoKTtcbiAgZGlhZ09iai5wYXJzZXIucGFyc2UodGV4dCk7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBjb25mLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IHN2ZyA9IHJvb3Quc2VsZWN0KGBbaWQ9JyR7aWR9J11gKTtcbiAgbWFya2Vycy5pbnNlcnRMaW5lRW5kaW5ncyhzdmcsIGNvbmYpO1xuICBjb25zdCBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiBmYWxzZSxcbiAgICBjb21wb3VuZDogZmFsc2UsXG4gICAgZGlyZWN0ZWQ6IHRydWVcbiAgfSkuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IGNvbmYubGF5b3V0RGlyZWN0aW9uLFxuICAgIG1hcmdpbng6IDIwLFxuICAgIG1hcmdpbnk6IDIwLFxuICAgIG5vZGVzZXA6IDEwMCxcbiAgICBlZGdlc2VwOiAxMDAsXG4gICAgcmFua3NlcDogMTAwXG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgbGV0IHJlcXVpcmVtZW50czIgPSBkaWFnT2JqLmRiLmdldFJlcXVpcmVtZW50cygpO1xuICBsZXQgZWxlbWVudHMyID0gZGlhZ09iai5kYi5nZXRFbGVtZW50cygpO1xuICBsZXQgcmVsYXRpb25zaGlwcyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zaGlwcygpO1xuICBkcmF3UmVxcyhyZXF1aXJlbWVudHMyLCBnLCBzdmcpO1xuICBkcmF3RWxlbWVudHMoZWxlbWVudHMyLCBnLCBzdmcpO1xuICBhZGRSZWxhdGlvbnNoaXBzKHJlbGF0aW9uc2hpcHMsIGcpO1xuICBsYXlvdXQoZyk7XG4gIGFkanVzdEVudGl0aWVzKHN2ZywgZyk7XG4gIHJlbGF0aW9uc2hpcHMuZm9yRWFjaChmdW5jdGlvbihyZWwpIHtcbiAgICBkcmF3UmVsYXRpb25zaGlwRnJvbUxheW91dChzdmcsIHJlbCwgZywgaWQsIGRpYWdPYmopO1xuICB9KTtcbiAgY29uc3QgcGFkZGluZyA9IGNvbmYucmVjdF9wYWRkaW5nO1xuICBjb25zdCBzdmdCb3VuZHMgPSBzdmcubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBzdmdCb3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBgJHtzdmdCb3VuZHMueCAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLnkgLSBwYWRkaW5nfSAke3dpZHRofSAke2hlaWdodH1gKTtcbn07XG5jb25zdCByZW5kZXJlciA9IHtcbiAgZHJhd1xufTtcbmNvbnN0IGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogcGFyc2VyJDEsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/requirementDiagram-19c99588.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/sequenceDiagram-5dfd0049.js": /*!**********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/sequenceDiagram-5dfd0049.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./svgDrawCommon-f26cad39.js */ \"../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 19], $V8 = [1, 21], $V9 = [1, 22], $Va = [1, 23], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 34], $Vh = [1, 35], $Vi = [1, 36], $Vj = [1, 37], $Vk = [1, 38], $Vl = [1, 39], $Vm = [1, 40], $Vn = [1, 41], $Vo = [1, 43], $Vp = [1, 44], $Vq = [1, 46], $Vr = [1, 47], $Vs = [1, 48], $Vt = [1, 49], $Vu = [1, 50], $Vv = [1, 51], $Vw = [1, 54], $Vx = [1, 4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 52, 53, 54, 55, 57, 58, 63, 64, 65, 66, 74, 84], $Vy = [4, 5, 21, 55, 57], $Vz = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 55, 57, 58, 63, 64, 65, 66, 74, 84], $VA = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 54, 55, 57, 58, 63, 64, 65, 66, 74, 84], $VB = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 53, 55, 57, 58, 63, 64, 65, 66, 74, 84], $VC = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 52, 55, 57, 58, 63, 64, 65, 66, 74, 84], $VD = [72, 73, 74], $VE = [1, 128], $VF = [1, 4, 5, 7, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 52, 53, 54, 55, 57, 58, 63, 64, 65, 66, 74, 84];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"SPACE\": 4, \"NEWLINE\": 5, \"directive\": 6, \"SD\": 7, \"document\": 8, \"line\": 9, \"statement\": 10, \"box_section\": 11, \"box_line\": 12, \"participant_statement\": 13, \"openDirective\": 14, \"typeDirective\": 15, \"closeDirective\": 16, \":\": 17, \"argDirective\": 18, \"box\": 19, \"restOfLine\": 20, \"end\": 21, \"signal\": 22, \"autonumber\": 23, \"NUM\": 24, \"off\": 25, \"activate\": 26, \"actor\": 27, \"deactivate\": 28, \"note_statement\": 29, \"links_statement\": 30, \"link_statement\": 31, \"properties_statement\": 32, \"details_statement\": 33, \"title\": 34, \"legacy_title\": 35, \"acc_title\": 36, \"acc_title_value\": 37, \"acc_descr\": 38, \"acc_descr_value\": 39, \"acc_descr_multiline_value\": 40, \"loop\": 41, \"rect\": 42, \"opt\": 43, \"alt\": 44, \"else_sections\": 45, \"par\": 46, \"par_sections\": 47, \"par_over\": 48, \"critical\": 49, \"option_sections\": 50, \"break\": 51, \"option\": 52, \"and\": 53, \"else\": 54, \"participant\": 55, \"AS\": 56, \"participant_actor\": 57, \"note\": 58, \"placement\": 59, \"text2\": 60, \"over\": 61, \"actor_pair\": 62, \"links\": 63, \"link\": 64, \"properties\": 65, \"details\": 66, \"spaceList\": 67, \",\": 68, \"left_of\": 69, \"right_of\": 70, \"signaltype\": 71, \"+\": 72, \"-\": 73, \"ACTOR\": 74, \"SOLID_OPEN_ARROW\": 75, \"DOTTED_OPEN_ARROW\": 76, \"SOLID_ARROW\": 77, \"DOTTED_ARROW\": 78, \"SOLID_CROSS\": 79, \"DOTTED_CROSS\": 80, \"SOLID_POINT\": 81, \"DOTTED_POINT\": 82, \"TXT\": 83, \"open_directive\": 84, \"type_directive\": 85, \"arg_directive\": 86, \"close_directive\": 87, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACE\", 5: \"NEWLINE\", 7: \"SD\", 17: \":\", 19: \"box\", 20: \"restOfLine\", 21: \"end\", 23: \"autonumber\", 24: \"NUM\", 25: \"off\", 26: \"activate\", 28: \"deactivate\", 34: \"title\", 35: \"legacy_title\", 36: \"acc_title\", 37: \"acc_title_value\", 38: \"acc_descr\", 39: \"acc_descr_value\", 40: \"acc_descr_multiline_value\", 41: \"loop\", 42: \"rect\", 43: \"opt\", 44: \"alt\", 46: \"par\", 48: \"par_over\", 49: \"critical\", 51: \"break\", 52: \"option\", 53: \"and\", 54: \"else\", 55: \"participant\", 56: \"AS\", 57: \"participant_actor\", 58: \"note\", 61: \"over\", 63: \"links\", 64: \"link\", 65: \"properties\", 66: \"details\", 68: \",\", 69: \"left_of\", 70: \"right_of\", 72: \"+\", 73: \"-\", 74: \"ACTOR\", 75: \"SOLID_OPEN_ARROW\", 76: \"DOTTED_OPEN_ARROW\", 77: \"SOLID_ARROW\", 78: \"DOTTED_ARROW\", 79: \"SOLID_CROSS\", 80: \"DOTTED_CROSS\", 81: \"SOLID_POINT\", 82: \"DOTTED_POINT\", 83: \"TXT\", 84: \"open_directive\", 85: \"type_directive\", 86: \"arg_directive\", 87: \"close_directive\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [11, 0], [11, 2], [12, 2], [12, 1], [12, 1], [6, 4], [6, 6], [10, 1], [10, 4], [10, 2], [10, 4], [10, 3], [10, 3], [10, 2], [10, 3], [10, 3], [10, 2], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 1], [50, 1], [50, 4], [47, 1], [47, 4], [45, 1], [45, 4], [13, 5], [13, 3], [13, 5], [13, 3], [29, 4], [29, 4], [30, 3], [31, 3], [32, 3], [33, 3], [67, 2], [67, 1], [62, 3], [62, 1], [59, 1], [59, 1], [22, 5], [22, 5], [22, 4], [27, 1], [71, 1], [71, 1], [71, 1], [71, 1], [71, 1], [71, 1], [71, 1], [71, 1], [60, 1], [14, 1], [15, 1], [18, 1], [16, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.apply($$[$0]);\n return $$[$0];\n case 5:\n case 10:\n this.$ = [];\n break;\n case 6:\n case 11:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 7:\n case 8:\n case 12:\n case 13:\n this.$ = $$[$0];\n break;\n case 9:\n case 14:\n this.$ = [];\n break;\n case 18:\n $$[$0 - 1].unshift({ type: \"boxStart\", boxData: yy.parseBoxData($$[$0 - 2]) });\n $$[$0 - 1].push({ type: \"boxEnd\", boxText: $$[$0 - 2] });\n this.$ = $$[$0 - 1];\n break;\n case 20:\n this.$ = { type: \"sequenceIndex\", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };\n break;\n case 21:\n this.$ = { type: \"sequenceIndex\", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };\n break;\n case 22:\n this.$ = { type: \"sequenceIndex\", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER };\n break;\n case 23:\n this.$ = { type: \"sequenceIndex\", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };\n break;\n case 24:\n this.$ = { type: \"activeStart\", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] };\n break;\n case 25:\n this.$ = { type: \"activeEnd\", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] };\n break;\n case 31:\n yy.setDiagramTitle($$[$0].substring(6));\n this.$ = $$[$0].substring(6);\n break;\n case 32:\n yy.setDiagramTitle($$[$0].substring(7));\n this.$ = $$[$0].substring(7);\n break;\n case 33:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 34:\n case 35:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 36:\n $$[$0 - 1].unshift({ type: \"loopStart\", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START });\n $$[$0 - 1].push({ type: \"loopEnd\", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END });\n this.$ = $$[$0 - 1];\n break;\n case 37:\n $$[$0 - 1].unshift({ type: \"rectStart\", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START });\n $$[$0 - 1].push({ type: \"rectEnd\", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END });\n this.$ = $$[$0 - 1];\n break;\n case 38:\n $$[$0 - 1].unshift({ type: \"optStart\", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START });\n $$[$0 - 1].push({ type: \"optEnd\", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END });\n this.$ = $$[$0 - 1];\n break;\n case 39:\n $$[$0 - 1].unshift({ type: \"altStart\", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START });\n $$[$0 - 1].push({ type: \"altEnd\", signalType: yy.LINETYPE.ALT_END });\n this.$ = $$[$0 - 1];\n break;\n case 40:\n $$[$0 - 1].unshift({ type: \"parStart\", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START });\n $$[$0 - 1].push({ type: \"parEnd\", signalType: yy.LINETYPE.PAR_END });\n this.$ = $$[$0 - 1];\n break;\n case 41:\n $$[$0 - 1].unshift({ type: \"parStart\", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START });\n $$[$0 - 1].push({ type: \"parEnd\", signalType: yy.LINETYPE.PAR_END });\n this.$ = $$[$0 - 1];\n break;\n case 42:\n $$[$0 - 1].unshift({ type: \"criticalStart\", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START });\n $$[$0 - 1].push({ type: \"criticalEnd\", signalType: yy.LINETYPE.CRITICAL_END });\n this.$ = $$[$0 - 1];\n break;\n case 43:\n $$[$0 - 1].unshift({ type: \"breakStart\", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START });\n $$[$0 - 1].push({ type: \"breakEnd\", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END });\n this.$ = $$[$0 - 1];\n break;\n case 46:\n this.$ = $$[$0 - 3].concat([{ type: \"option\", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]);\n break;\n case 48:\n this.$ = $$[$0 - 3].concat([{ type: \"and\", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]);\n break;\n case 50:\n this.$ = $$[$0 - 3].concat([{ type: \"else\", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]);\n break;\n case 51:\n $$[$0 - 3].type = \"addParticipant\";\n $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);\n this.$ = $$[$0 - 3];\n break;\n case 52:\n $$[$0 - 1].type = \"addParticipant\";\n this.$ = $$[$0 - 1];\n break;\n case 53:\n $$[$0 - 3].type = \"addActor\";\n $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);\n this.$ = $$[$0 - 3];\n break;\n case 54:\n $$[$0 - 1].type = \"addActor\";\n this.$ = $$[$0 - 1];\n break;\n case 55:\n this.$ = [$$[$0 - 1], { type: \"addNote\", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }];\n break;\n case 56:\n $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2);\n $$[$0 - 2][0] = $$[$0 - 2][0].actor;\n $$[$0 - 2][1] = $$[$0 - 2][1].actor;\n this.$ = [$$[$0 - 1], { type: \"addNote\", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }];\n break;\n case 57:\n this.$ = [$$[$0 - 1], { type: \"addLinks\", actor: $$[$0 - 1].actor, text: $$[$0] }];\n break;\n case 58:\n this.$ = [$$[$0 - 1], { type: \"addALink\", actor: $$[$0 - 1].actor, text: $$[$0] }];\n break;\n case 59:\n this.$ = [$$[$0 - 1], { type: \"addProperties\", actor: $$[$0 - 1].actor, text: $$[$0] }];\n break;\n case 60:\n this.$ = [$$[$0 - 1], { type: \"addDetails\", actor: $$[$0 - 1].actor, text: $$[$0] }];\n break;\n case 63:\n this.$ = [$$[$0 - 2], $$[$0]];\n break;\n case 64:\n this.$ = $$[$0];\n break;\n case 65:\n this.$ = yy.PLACEMENT.LEFTOF;\n break;\n case 66:\n this.$ = yy.PLACEMENT.RIGHTOF;\n break;\n case 67:\n this.$ = [\n $$[$0 - 4],\n $$[$0 - 1],\n { type: \"addMessage\", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] },\n { type: \"activeStart\", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }\n ];\n break;\n case 68:\n this.$ = [\n $$[$0 - 4],\n $$[$0 - 1],\n { type: \"addMessage\", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] },\n { type: \"activeEnd\", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] }\n ];\n break;\n case 69:\n this.$ = [$$[$0 - 3], $$[$0 - 1], { type: \"addMessage\", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }];\n break;\n case 70:\n this.$ = { type: \"addParticipant\", actor: $$[$0] };\n break;\n case 71:\n this.$ = yy.LINETYPE.SOLID_OPEN;\n break;\n case 72:\n this.$ = yy.LINETYPE.DOTTED_OPEN;\n break;\n case 73:\n this.$ = yy.LINETYPE.SOLID;\n break;\n case 74:\n this.$ = yy.LINETYPE.DOTTED;\n break;\n case 75:\n this.$ = yy.LINETYPE.SOLID_CROSS;\n break;\n case 76:\n this.$ = yy.LINETYPE.DOTTED_CROSS;\n break;\n case 77:\n this.$ = yy.LINETYPE.SOLID_POINT;\n break;\n case 78:\n this.$ = yy.LINETYPE.DOTTED_POINT;\n break;\n case 79:\n this.$ = yy.parseMessage($$[$0].trim().substring(1));\n break;\n case 80:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 81:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 82:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 83:\n yy.parseDirective(\"}%%\", \"close_directive\", \"sequence\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 84: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 84: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 84: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 84: $V3 }, o([1, 4, 5, 19, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 49, 51, 55, 57, 58, 63, 64, 65, 66, 74, 84], $V4, { 8: 11 }), { 15: 12, 85: [1, 13] }, { 85: [2, 80] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 16: 52, 17: [1, 53], 87: $Vw }, o([17, 87], [2, 81]), o($Vx, [2, 6]), { 6: 42, 10: 55, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, o($Vx, [2, 8]), o($Vx, [2, 9]), o($Vx, [2, 17]), { 20: [1, 56] }, { 5: [1, 57] }, { 5: [1, 60], 24: [1, 58], 25: [1, 59] }, { 27: 61, 74: $Vv }, { 27: 62, 74: $Vv }, { 5: [1, 63] }, { 5: [1, 64] }, { 5: [1, 65] }, { 5: [1, 66] }, { 5: [1, 67] }, o($Vx, [2, 31]), o($Vx, [2, 32]), { 37: [1, 68] }, { 39: [1, 69] }, o($Vx, [2, 35]), { 20: [1, 70] }, { 20: [1, 71] }, { 20: [1, 72] }, { 20: [1, 73] }, { 20: [1, 74] }, { 20: [1, 75] }, { 20: [1, 76] }, { 20: [1, 77] }, o($Vx, [2, 44]), { 27: 78, 74: $Vv }, { 27: 79, 74: $Vv }, { 71: 80, 75: [1, 81], 76: [1, 82], 77: [1, 83], 78: [1, 84], 79: [1, 85], 80: [1, 86], 81: [1, 87], 82: [1, 88] }, { 59: 89, 61: [1, 90], 69: [1, 91], 70: [1, 92] }, { 27: 93, 74: $Vv }, { 27: 94, 74: $Vv }, { 27: 95, 74: $Vv }, { 27: 96, 74: $Vv }, o([5, 56, 68, 75, 76, 77, 78, 79, 80, 81, 82, 83], [2, 70]), { 5: [1, 97] }, { 18: 98, 86: [1, 99] }, { 5: [2, 83] }, o($Vx, [2, 7]), o($Vy, [2, 10], { 11: 100 }), o($Vx, [2, 19]), { 5: [1, 102], 24: [1, 101] }, { 5: [1, 103] }, o($Vx, [2, 23]), { 5: [1, 104] }, { 5: [1, 105] }, o($Vx, [2, 26]), o($Vx, [2, 27]), o($Vx, [2, 28]), o($Vx, [2, 29]), o($Vx, [2, 30]), o($Vx, [2, 33]), o($Vx, [2, 34]), o($Vz, $V4, { 8: 106 }), o($Vz, $V4, { 8: 107 }), o($Vz, $V4, { 8: 108 }), o($VA, $V4, { 45: 109, 8: 110 }), o($VB, $V4, { 47: 111, 8: 112 }), o($VB, $V4, { 8: 112, 47: 113 }), o($VC, $V4, { 50: 114, 8: 115 }), o($Vz, $V4, { 8: 116 }), { 5: [1, 118], 56: [1, 117] }, { 5: [1, 120], 56: [1, 119] }, { 27: 123, 72: [1, 121], 73: [1, 122], 74: $Vv }, o($VD, [2, 71]), o($VD, [2, 72]), o($VD, [2, 73]), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), o($VD, [2, 77]), o($VD, [2, 78]), { 27: 124, 74: $Vv }, { 27: 126, 62: 125, 74: $Vv }, { 74: [2, 65] }, { 74: [2, 66] }, { 60: 127, 83: $VE }, { 60: 129, 83: $VE }, { 60: 130, 83: $VE }, { 60: 131, 83: $VE }, o($VF, [2, 15]), { 16: 132, 87: $Vw }, { 87: [2, 82] }, { 4: [1, 135], 5: [1, 137], 12: 134, 13: 136, 21: [1, 133], 55: $Vo, 57: $Vp }, { 5: [1, 138] }, o($Vx, [2, 21]), o($Vx, [2, 22]), o($Vx, [2, 24]), o($Vx, [2, 25]), { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 139], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 140], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 141], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 21: [1, 142] }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 49], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 54: [1, 143], 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 21: [1, 144] }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 47], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 53: [1, 145], 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 21: [1, 146] }, { 21: [1, 147] }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 45], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 52: [1, 148], 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 4: $V5, 5: $V6, 6: 42, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 149], 22: 20, 23: $V8, 26: $V9, 27: 45, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 49: $Vm, 51: $Vn, 55: $Vo, 57: $Vp, 58: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 66: $Vu, 74: $Vv, 84: $V3 }, { 20: [1, 150] }, o($Vx, [2, 52]), { 20: [1, 151] }, o($Vx, [2, 54]), { 27: 152, 74: $Vv }, { 27: 153, 74: $Vv }, { 60: 154, 83: $VE }, { 60: 155, 83: $VE }, { 60: 156, 83: $VE }, { 68: [1, 157], 83: [2, 64] }, { 5: [2, 57] }, { 5: [2, 79] }, { 5: [2, 58] }, { 5: [2, 59] }, { 5: [2, 60] }, { 5: [1, 158] }, o($Vx, [2, 18]), o($Vy, [2, 11]), { 13: 159, 55: $Vo, 57: $Vp }, o($Vy, [2, 13]), o($Vy, [2, 14]), o($Vx, [2, 20]), o($Vx, [2, 36]), o($Vx, [2, 37]), o($Vx, [2, 38]), o($Vx, [2, 39]), { 20: [1, 160] }, o($Vx, [2, 40]), { 20: [1, 161] }, o($Vx, [2, 41]), o($Vx, [2, 42]), { 20: [1, 162] }, o($Vx, [2, 43]), { 5: [1, 163] }, { 5: [1, 164] }, { 60: 165, 83: $VE }, { 60: 166, 83: $VE }, { 5: [2, 69] }, { 5: [2, 55] }, { 5: [2, 56] }, { 27: 167, 74: $Vv }, o($VF, [2, 16]), o($Vy, [2, 12]), o($VA, $V4, { 8: 110, 45: 168 }), o($VB, $V4, { 8: 112, 47: 169 }), o($VC, $V4, { 8: 115, 50: 170 }), o($Vx, [2, 51]), o($Vx, [2, 53]), { 5: [2, 67] }, { 5: [2, 68] }, { 83: [2, 63] }, { 21: [2, 50] }, { 21: [2, 48] }, { 21: [2, 46] }],\n defaultActions: { 7: [2, 80], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 83], 91: [2, 65], 92: [2, 66], 99: [2, 82], 127: [2, 57], 128: [2, 79], 129: [2, 58], 130: [2, 59], 131: [2, 60], 154: [2, 69], 155: [2, 55], 156: [2, 56], 165: [2, 67], 166: [2, 68], 167: [2, 63], 168: [2, 50], 169: [2, 48], 170: [2, 46] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 84;\n case 1:\n this.begin(\"type_directive\");\n return 85;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 17;\n case 3:\n this.popState();\n this.popState();\n return 87;\n case 4:\n return 86;\n case 5:\n return 5;\n case 6:\n break;\n case 7:\n break;\n case 8:\n break;\n case 9:\n break;\n case 10:\n break;\n case 11:\n return 24;\n case 12:\n this.begin(\"LINE\");\n return 19;\n case 13:\n this.begin(\"ID\");\n return 55;\n case 14:\n this.begin(\"ID\");\n return 57;\n case 15:\n yy_.yytext = yy_.yytext.trim();\n this.begin(\"ALIAS\");\n return 74;\n case 16:\n this.popState();\n this.popState();\n this.begin(\"LINE\");\n return 56;\n case 17:\n this.popState();\n this.popState();\n return 5;\n case 18:\n this.begin(\"LINE\");\n return 41;\n case 19:\n this.begin(\"LINE\");\n return 42;\n case 20:\n this.begin(\"LINE\");\n return 43;\n case 21:\n this.begin(\"LINE\");\n return 44;\n case 22:\n this.begin(\"LINE\");\n return 54;\n case 23:\n this.begin(\"LINE\");\n return 46;\n case 24:\n this.begin(\"LINE\");\n return 48;\n case 25:\n this.begin(\"LINE\");\n return 53;\n case 26:\n this.begin(\"LINE\");\n return 49;\n case 27:\n this.begin(\"LINE\");\n return 52;\n case 28:\n this.begin(\"LINE\");\n return 51;\n case 29:\n this.popState();\n return 20;\n case 30:\n return 21;\n case 31:\n return 69;\n case 32:\n return 70;\n case 33:\n return 63;\n case 34:\n return 64;\n case 35:\n return 65;\n case 36:\n return 66;\n case 37:\n return 61;\n case 38:\n return 58;\n case 39:\n this.begin(\"ID\");\n return 26;\n case 40:\n this.begin(\"ID\");\n return 28;\n case 41:\n return 34;\n case 42:\n return 35;\n case 43:\n this.begin(\"acc_title\");\n return 36;\n case 44:\n this.popState();\n return \"acc_title_value\";\n case 45:\n this.begin(\"acc_descr\");\n return 38;\n case 46:\n this.popState();\n return \"acc_descr_value\";\n case 47:\n this.begin(\"acc_descr_multiline\");\n break;\n case 48:\n this.popState();\n break;\n case 49:\n return \"acc_descr_multiline_value\";\n case 50:\n return 7;\n case 51:\n return 23;\n case 52:\n return 25;\n case 53:\n return 68;\n case 54:\n return 5;\n case 55:\n yy_.yytext = yy_.yytext.trim();\n return 74;\n case 56:\n return 77;\n case 57:\n return 78;\n case 58:\n return 75;\n case 59:\n return 76;\n case 60:\n return 79;\n case 61:\n return 80;\n case 62:\n return 81;\n case 63:\n return 82;\n case 64:\n return 83;\n case 65:\n return 72;\n case 66:\n return 73;\n case 67:\n return 5;\n case 68:\n return \"INVALID\";\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:((?!\\n)\\s)+)/i, /^(?:#[^\\n]*)/i, /^(?:%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[0-9]+(?=[ \\n]+))/i, /^(?:box\\b)/i, /^(?:participant\\b)/i, /^(?:actor\\b)/i, /^(?:[^\\->:\\n,;]+?([\\-]*[^\\->:\\n,;]+?)*?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i, /^(?:as\\b)/i, /^(?:(?:))/i, /^(?:loop\\b)/i, /^(?:rect\\b)/i, /^(?:opt\\b)/i, /^(?:alt\\b)/i, /^(?:else\\b)/i, /^(?:par\\b)/i, /^(?:par_over\\b)/i, /^(?:and\\b)/i, /^(?:critical\\b)/i, /^(?:option\\b)/i, /^(?:break\\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\\n;]*)/i, /^(?:end\\b)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:links\\b)/i, /^(?:link\\b)/i, /^(?:properties\\b)/i, /^(?:details\\b)/i, /^(?:over\\b)/i, /^(?:note\\b)/i, /^(?:activate\\b)/i, /^(?:deactivate\\b)/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:title:\\s[^#\\n;]+)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:sequenceDiagram\\b)/i, /^(?:autonumber\\b)/i, /^(?:off\\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\\+\\->:\\n,;]+((?!(-x|--x|-\\)|--\\)))[\\-]*[^\\+\\->:\\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\\)])/i, /^(?:--[\\)])/i, /^(?::(?:(?:no)?wrap)?[^#\\n;]+)/i, /^(?:\\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"acc_descr_multiline\": { \"rules\": [48, 49], \"inclusive\": false }, \"acc_descr\": { \"rules\": [46], \"inclusive\": false }, \"acc_title\": { \"rules\": [44], \"inclusive\": false }, \"open_directive\": { \"rules\": [1, 8], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3, 8], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4, 8], \"inclusive\": false }, \"ID\": { \"rules\": [7, 8, 15], \"inclusive\": false }, \"ALIAS\": { \"rules\": [7, 8, 16, 17], \"inclusive\": false }, \"LINE\": { \"rules\": [7, 8, 29], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet prevActor = void 0;\nlet actors = {};\nlet boxes = [];\nlet messages = [];\nlet sequenceNumbersEnabled = false;\nlet wrapEnabled;\nlet currentBox = void 0;\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type);\n};\nconst addBox = function(data) {\n boxes.push({\n name: data.text,\n wrap: data.wrap === void 0 && autoWrap() || !!data.wrap,\n fill: data.color,\n actorKeys: []\n });\n currentBox = boxes.slice(-1)[0];\n};\nconst addActor = function(id, name, description, type) {\n let assignedBox = currentBox;\n const old = actors[id];\n if (old) {\n if (currentBox && old.box && currentBox !== old.box) {\n throw new Error(\n \"A same participant should only be defined in one Box: \" + old.name + \" can't be in '\" + old.box.name + \"' and in '\" + currentBox.name + \"' at the same time.\"\n );\n }\n assignedBox = old.box ? old.box : currentBox;\n old.box = assignedBox;\n if (old && name === old.name && description == null) {\n return;\n }\n }\n if (description == null || description.text == null) {\n description = { text: name, wrap: null, type };\n }\n if (type == null || description.text == null) {\n description = { text: name, wrap: null, type };\n }\n actors[id] = {\n box: assignedBox,\n name,\n description: description.text,\n wrap: description.wrap === void 0 && autoWrap() || !!description.wrap,\n prevActor,\n links: {},\n properties: {},\n actorCnt: null,\n rectData: null,\n type: type || \"participant\"\n };\n if (prevActor && actors[prevActor]) {\n actors[prevActor].nextActor = id;\n }\n if (currentBox) {\n currentBox.actorKeys.push(id);\n }\n prevActor = id;\n};\nconst activationCount = (part) => {\n let i;\n let count = 0;\n for (i = 0; i < messages.length; i++) {\n if (messages[i].type === LINETYPE.ACTIVE_START && messages[i].from.actor === part) {\n count++;\n }\n if (messages[i].type === LINETYPE.ACTIVE_END && messages[i].from.actor === part) {\n count--;\n }\n }\n return count;\n};\nconst addMessage = function(idFrom, idTo, message, answer) {\n messages.push({\n from: idFrom,\n to: idTo,\n message: message.text,\n wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,\n answer\n });\n};\nconst addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType) {\n if (messageType === LINETYPE.ACTIVE_END) {\n const cnt = activationCount(idFrom.actor);\n if (cnt < 1) {\n let error = new Error(\"Trying to inactivate an inactive participant (\" + idFrom.actor + \")\");\n error.hash = {\n text: \"->>-\",\n token: \"->>-\",\n line: \"1\",\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"'ACTIVE_PARTICIPANT'\"]\n };\n throw error;\n }\n }\n messages.push({\n from: idFrom,\n to: idTo,\n message: message.text,\n wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,\n type: messageType\n });\n return true;\n};\nconst hasAtLeastOneBox = function() {\n return boxes.length > 0;\n};\nconst hasAtLeastOneBoxWithTitle = function() {\n return boxes.some((b) => b.name);\n};\nconst getMessages = function() {\n return messages;\n};\nconst getBoxes = function() {\n return boxes;\n};\nconst getActors = function() {\n return actors;\n};\nconst getActor = function(id) {\n return actors[id];\n};\nconst getActorKeys = function() {\n return Object.keys(actors);\n};\nconst enableSequenceNumbers = function() {\n sequenceNumbersEnabled = true;\n};\nconst disableSequenceNumbers = function() {\n sequenceNumbersEnabled = false;\n};\nconst showSequenceNumbers = () => sequenceNumbersEnabled;\nconst setWrap = function(wrapSetting) {\n wrapEnabled = wrapSetting;\n};\nconst autoWrap = () => {\n if (wrapEnabled !== void 0) {\n return wrapEnabled;\n }\n return (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().sequence.wrap;\n};\nconst clear = function() {\n actors = {};\n boxes = [];\n messages = [];\n sequenceNumbersEnabled = false;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst parseMessage = function(str) {\n const _str = str.trim();\n const message = {\n text: _str.replace(/^:?(?:no)?wrap:/, \"\").trim(),\n wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"parseMessage:\", message);\n return message;\n};\nconst parseBoxData = function(str) {\n const match = str.match(/^((?:rgba?|hsla?)\\s*\\(.*\\)|\\w*)(.*)$/);\n let color = match != null && match[1] ? match[1].trim() : \"transparent\";\n let title = match != null && match[2] ? match[2].trim() : void 0;\n if (window && window.CSS) {\n if (!window.CSS.supports(\"color\", color)) {\n color = \"transparent\";\n title = str.trim();\n }\n } else {\n const style = new Option().style;\n style.color = color;\n if (style.color !== color) {\n color = \"transparent\";\n title = str.trim();\n }\n }\n const boxData = {\n color,\n text: title !== void 0 ? (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(title.replace(/^:?(?:no)?wrap:/, \"\"), (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)()) : void 0,\n wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0\n };\n return boxData;\n};\nconst LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32\n};\nconst ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n};\nconst PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n};\nconst addNote = function(actor, placement, message) {\n ({\n actor,\n placement,\n message: message.text,\n wrap: message.wrap === void 0 && autoWrap() || !!message.wrap\n });\n const actors2 = [].concat(actor, actor);\n messages.push({\n from: actors2[0],\n to: actors2[1],\n message: message.text,\n wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,\n type: LINETYPE.NOTE,\n placement\n });\n};\nconst addLinks = function(actorId, text) {\n const actor = getActor(actorId);\n try {\n let sanitizedText = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.text, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n sanitizedText = sanitizedText.replace(/&/g, \"&\");\n sanitizedText = sanitizedText.replace(/=/g, \"=\");\n const links = JSON.parse(sanitizedText);\n insertLinks(actor, links);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while parsing actor link text\", e);\n }\n};\nconst addALink = function(actorId, text) {\n const actor = getActor(actorId);\n try {\n const links = {};\n let sanitizedText = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.text, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n var sep = sanitizedText.indexOf(\"@\");\n sanitizedText = sanitizedText.replace(/&/g, \"&\");\n sanitizedText = sanitizedText.replace(/=/g, \"=\");\n var label = sanitizedText.slice(0, sep - 1).trim();\n var link = sanitizedText.slice(sep + 1).trim();\n links[label] = link;\n insertLinks(actor, links);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while parsing actor link text\", e);\n }\n};\nfunction insertLinks(actor, links) {\n if (actor.links == null) {\n actor.links = links;\n } else {\n for (let key in links) {\n actor.links[key] = links[key];\n }\n }\n}\nconst addProperties = function(actorId, text) {\n const actor = getActor(actorId);\n try {\n let sanitizedText = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.text, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n const properties = JSON.parse(sanitizedText);\n insertProperties(actor, properties);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while parsing actor properties text\", e);\n }\n};\nfunction insertProperties(actor, properties) {\n if (actor.properties == null) {\n actor.properties = properties;\n } else {\n for (let key in properties) {\n actor.properties[key] = properties[key];\n }\n }\n}\nfunction boxEnd() {\n currentBox = void 0;\n}\nconst addDetails = function(actorId, text) {\n const actor = getActor(actorId);\n const elem = document.getElementById(text.text);\n try {\n const text2 = elem.innerHTML;\n const details = JSON.parse(text2);\n if (details[\"properties\"]) {\n insertProperties(actor, details[\"properties\"]);\n }\n if (details[\"links\"]) {\n insertLinks(actor, details[\"links\"]);\n }\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while parsing actor details text\", e);\n }\n};\nconst getActorProperty = function(actor, key) {\n if (actor !== void 0 && actor.properties !== void 0) {\n return actor.properties[key];\n }\n return void 0;\n};\nconst apply = function(param) {\n if (Array.isArray(param)) {\n param.forEach(function(item) {\n apply(item);\n });\n } else {\n switch (param.type) {\n case \"sequenceIndex\":\n messages.push({\n from: void 0,\n to: void 0,\n message: {\n start: param.sequenceIndex,\n step: param.sequenceIndexStep,\n visible: param.sequenceVisible\n },\n wrap: false,\n type: param.signalType\n });\n break;\n case \"addParticipant\":\n addActor(param.actor, param.actor, param.description, \"participant\");\n break;\n case \"addActor\":\n addActor(param.actor, param.actor, param.description, \"actor\");\n break;\n case \"activeStart\":\n addSignal(param.actor, void 0, void 0, param.signalType);\n break;\n case \"activeEnd\":\n addSignal(param.actor, void 0, void 0, param.signalType);\n break;\n case \"addNote\":\n addNote(param.actor, param.placement, param.text);\n break;\n case \"addLinks\":\n addLinks(param.actor, param.text);\n break;\n case \"addALink\":\n addALink(param.actor, param.text);\n break;\n case \"addProperties\":\n addProperties(param.actor, param.text);\n break;\n case \"addDetails\":\n addDetails(param.actor, param.text);\n break;\n case \"addMessage\":\n addSignal(param.from, param.to, param.msg, param.signalType);\n break;\n case \"boxStart\":\n addBox(param.boxData);\n break;\n case \"boxEnd\":\n boxEnd();\n break;\n case \"loopStart\":\n addSignal(void 0, void 0, param.loopText, param.signalType);\n break;\n case \"loopEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"rectStart\":\n addSignal(void 0, void 0, param.color, param.signalType);\n break;\n case \"rectEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"optStart\":\n addSignal(void 0, void 0, param.optText, param.signalType);\n break;\n case \"optEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"altStart\":\n addSignal(void 0, void 0, param.altText, param.signalType);\n break;\n case \"else\":\n addSignal(void 0, void 0, param.altText, param.signalType);\n break;\n case \"altEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"setAccTitle\":\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s)(param.text);\n break;\n case \"parStart\":\n addSignal(void 0, void 0, param.parText, param.signalType);\n break;\n case \"and\":\n addSignal(void 0, void 0, param.parText, param.signalType);\n break;\n case \"parEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"criticalStart\":\n addSignal(void 0, void 0, param.criticalText, param.signalType);\n break;\n case \"option\":\n addSignal(void 0, void 0, param.optionText, param.signalType);\n break;\n case \"criticalEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n case \"breakStart\":\n addSignal(void 0, void 0, param.breakText, param.signalType);\n break;\n case \"breakEnd\":\n addSignal(void 0, void 0, void 0, param.signalType);\n break;\n }\n }\n};\nconst db = {\n addActor,\n addMessage,\n addSignal,\n addLinks,\n addDetails,\n addProperties,\n autoWrap,\n setWrap,\n enableSequenceNumbers,\n disableSequenceNumbers,\n showSequenceNumbers,\n getMessages,\n getActors,\n getActor,\n getActorKeys,\n getActorProperty,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.g,\n getBoxes,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.t,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.r,\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)().sequence,\n clear,\n parseMessage,\n parseBoxData,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n addNote,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.s,\n apply,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.b,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.a,\n hasAtLeastOneBox,\n hasAtLeastOneBoxWithTitle\n};\nconst getStyles = (options) => `.actor {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${options.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${options.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${options.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${options.signalColor};\n }\n\n #arrowhead path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .sequenceNumber {\n fill: ${options.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${options.signalColor};\n }\n\n #crosshead path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .messageText {\n fill: ${options.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${options.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${options.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${options.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation1 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation2 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${options.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n stroke-width: 2px;\n }\n`;\nconst styles = getStyles;\nconst drawRect = function(elem, rectData) {\n return (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.d)(elem, rectData);\n};\nconst addPopupInteraction = (id, actorCnt2) => {\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.E)(() => {\n const arr = document.querySelectorAll(id);\n if (arr.length === 0) {\n return;\n }\n arr[0].addEventListener(\"mouseover\", function() {\n popupMenuUpFunc(\"actor\" + actorCnt2 + \"_popup\");\n });\n arr[0].addEventListener(\"mouseout\", function() {\n popupMenuDownFunc(\"actor\" + actorCnt2 + \"_popup\");\n });\n });\n};\nconst drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) {\n if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) {\n return { height: 0, width: 0 };\n }\n const links = actor.links;\n const actorCnt2 = actor.actorCnt;\n const rectData = actor.rectData;\n var displayValue = \"none\";\n if (forceMenus) {\n displayValue = \"block !important\";\n }\n const g = elem.append(\"g\");\n g.attr(\"id\", \"actor\" + actorCnt2 + \"_popup\");\n g.attr(\"class\", \"actorPopupMenu\");\n g.attr(\"display\", displayValue);\n addPopupInteraction(\"#actor\" + actorCnt2 + \"_popup\", actorCnt2);\n var actorClass = \"\";\n if (rectData.class !== void 0) {\n actorClass = \" \" + rectData.class;\n }\n let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;\n const rectElem = g.append(\"rect\");\n rectElem.attr(\"class\", \"actorPopupMenuPanel\" + actorClass);\n rectElem.attr(\"x\", rectData.x);\n rectElem.attr(\"y\", rectData.height);\n rectElem.attr(\"fill\", rectData.fill);\n rectElem.attr(\"stroke\", rectData.stroke);\n rectElem.attr(\"width\", menuWidth);\n rectElem.attr(\"height\", rectData.height);\n rectElem.attr(\"rx\", rectData.rx);\n rectElem.attr(\"ry\", rectData.ry);\n if (links != null) {\n var linkY = 20;\n for (let key in links) {\n var linkElem = g.append(\"a\");\n var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__.sanitizeUrl)(links[key]);\n linkElem.attr(\"xlink:href\", sanitizedLink);\n linkElem.attr(\"target\", \"_blank\");\n _drawMenuItemTextCandidateFunc(textAttrs)(\n key,\n linkElem,\n rectData.x + 10,\n rectData.height + linkY,\n menuWidth,\n 20,\n { class: \"actor\" },\n textAttrs\n );\n linkY += 30;\n }\n }\n rectElem.attr(\"height\", linkY);\n return { height: rectData.height + linkY, width: menuWidth };\n};\nconst popupMenu = function(popid) {\n return \"var pu = document.getElementById('\" + popid + \"'); if (pu != null) { pu.style.display = 'block'; }\";\n};\nconst popdownMenu = function(popid) {\n return \"var pu = document.getElementById('\" + popid + \"'); if (pu != null) { pu.style.display = 'none'; }\";\n};\nconst popupMenuUpFunc = function(popupId) {\n var pu = document.getElementById(popupId);\n if (pu != null) {\n pu.style.display = \"block\";\n }\n};\nconst popupMenuDownFunc = function(popupId) {\n var pu = document.getElementById(popupId);\n if (pu != null) {\n pu.style.display = \"none\";\n }\n};\nconst drawText = function(elem, textData) {\n let prevTextHeight = 0;\n let textHeight = 0;\n const lines = textData.text.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex);\n const [_textFontSize, _textFontSizePx] = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.B)(textData.fontSize);\n let textElems = [];\n let dy = 0;\n let yfunc = () => textData.y;\n if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {\n switch (textData.valign) {\n case \"top\":\n case \"start\":\n yfunc = () => Math.round(textData.y + textData.textMargin);\n break;\n case \"middle\":\n case \"center\":\n yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);\n break;\n case \"bottom\":\n case \"end\":\n yfunc = () => Math.round(\n textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin\n );\n break;\n }\n }\n if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) {\n switch (textData.anchor) {\n case \"left\":\n case \"start\":\n textData.x = Math.round(textData.x + textData.textMargin);\n textData.anchor = \"start\";\n textData.dominantBaseline = \"middle\";\n textData.alignmentBaseline = \"middle\";\n break;\n case \"middle\":\n case \"center\":\n textData.x = Math.round(textData.x + textData.width / 2);\n textData.anchor = \"middle\";\n textData.dominantBaseline = \"middle\";\n textData.alignmentBaseline = \"middle\";\n break;\n case \"right\":\n case \"end\":\n textData.x = Math.round(textData.x + textData.width - textData.textMargin);\n textData.anchor = \"end\";\n textData.dominantBaseline = \"middle\";\n textData.alignmentBaseline = \"middle\";\n break;\n }\n }\n for (let [i, line] of lines.entries()) {\n if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) {\n dy = i * _textFontSize;\n }\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", yfunc());\n if (textData.anchor !== void 0) {\n textElem.attr(\"text-anchor\", textData.anchor).attr(\"dominant-baseline\", textData.dominantBaseline).attr(\"alignment-baseline\", textData.alignmentBaseline);\n }\n if (textData.fontFamily !== void 0) {\n textElem.style(\"font-family\", textData.fontFamily);\n }\n if (_textFontSizePx !== void 0) {\n textElem.style(\"font-size\", _textFontSizePx);\n }\n if (textData.fontWeight !== void 0) {\n textElem.style(\"font-weight\", textData.fontWeight);\n }\n if (textData.fill !== void 0) {\n textElem.attr(\"fill\", textData.fill);\n }\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n if (textData.dy !== void 0) {\n textElem.attr(\"dy\", textData.dy);\n } else if (dy !== 0) {\n textElem.attr(\"dy\", dy);\n }\n const text = line || _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.Z;\n if (textData.tspan) {\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x);\n if (textData.fill !== void 0) {\n span.attr(\"fill\", textData.fill);\n }\n span.text(text);\n } else {\n textElem.text(text);\n }\n if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height;\n prevTextHeight = textHeight;\n }\n textElems.push(textElem);\n }\n return textElems;\n};\nconst drawLabel = function(elem, txtObject) {\n function genPoints(x, y, width, height, cut) {\n return x + \",\" + y + \" \" + (x + width) + \",\" + y + \" \" + (x + width) + \",\" + (y + height - cut) + \" \" + (x + width - cut * 1.2) + \",\" + (y + height) + \" \" + x + \",\" + (y + height);\n }\n const polygon = elem.append(\"polygon\");\n polygon.attr(\"points\", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));\n polygon.attr(\"class\", \"labelBox\");\n txtObject.y = txtObject.y + txtObject.height / 2;\n drawText(elem, txtObject);\n return polygon;\n};\nlet actorCnt = -1;\nconst fixLifeLineHeights = (diagram2, bounds2) => {\n if (!diagram2.selectAll) {\n return;\n }\n diagram2.selectAll(\".actor-line\").attr(\"class\", \"200\").attr(\"y2\", bounds2 - 55);\n};\nconst drawActorTypeParticipant = function(elem, actor, conf2, isFooter) {\n const center = actor.x + actor.width / 2;\n const centerY = actor.y + 5;\n const boxpluslineGroup = elem.append(\"g\");\n var g = boxpluslineGroup;\n if (!isFooter) {\n actorCnt++;\n g.append(\"line\").attr(\"id\", \"actor\" + actorCnt).attr(\"x1\", center).attr(\"y1\", centerY).attr(\"x2\", center).attr(\"y2\", 2e3).attr(\"class\", \"actor-line\").attr(\"stroke-width\", \"0.5px\").attr(\"stroke\", \"#999\");\n g = boxpluslineGroup.append(\"g\");\n actor.actorCnt = actorCnt;\n if (actor.links != null) {\n g.attr(\"id\", \"root-\" + actorCnt);\n addPopupInteraction(\"#root-\" + actorCnt, actorCnt);\n }\n }\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n var cssclass = \"actor\";\n if (actor.properties != null && actor.properties[\"class\"]) {\n cssclass = actor.properties[\"class\"];\n } else {\n rect.fill = \"#eaeaea\";\n }\n rect.x = actor.x;\n rect.y = actor.y;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.rx = 3;\n rect.ry = 3;\n const rectElem = drawRect(g, rect);\n actor.rectData = rect;\n if (actor.properties != null && actor.properties[\"icon\"]) {\n const iconSrc = actor.properties[\"icon\"].trim();\n if (iconSrc.charAt(0) === \"@\") {\n (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n } else {\n (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n }\n }\n _drawTextCandidateFunc(conf2)(\n actor.description,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: \"actor\" },\n conf2\n );\n let height = actor.height;\n if (rectElem.node) {\n const bounds2 = rectElem.node().getBBox();\n actor.height = bounds2.height;\n height = bounds2.height;\n }\n return height;\n};\nconst drawActorTypeActor = function(elem, actor, conf2, isFooter) {\n const center = actor.x + actor.width / 2;\n const centerY = actor.y + 80;\n if (!isFooter) {\n actorCnt++;\n elem.append(\"line\").attr(\"id\", \"actor\" + actorCnt).attr(\"x1\", center).attr(\"y1\", centerY).attr(\"x2\", center).attr(\"y2\", 2e3).attr(\"class\", \"actor-line\").attr(\"stroke-width\", \"0.5px\").attr(\"stroke\", \"#999\");\n }\n const actElem = elem.append(\"g\");\n actElem.attr(\"class\", \"actor-man\");\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n rect.x = actor.x;\n rect.y = actor.y;\n rect.fill = \"#eaeaea\";\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = \"actor\";\n rect.rx = 3;\n rect.ry = 3;\n actElem.append(\"line\").attr(\"id\", \"actor-man-torso\" + actorCnt).attr(\"x1\", center).attr(\"y1\", actor.y + 25).attr(\"x2\", center).attr(\"y2\", actor.y + 45);\n actElem.append(\"line\").attr(\"id\", \"actor-man-arms\" + actorCnt).attr(\"x1\", center - 18).attr(\"y1\", actor.y + 33).attr(\"x2\", center + 18).attr(\"y2\", actor.y + 33);\n actElem.append(\"line\").attr(\"x1\", center - 18).attr(\"y1\", actor.y + 60).attr(\"x2\", center).attr(\"y2\", actor.y + 45);\n actElem.append(\"line\").attr(\"x1\", center).attr(\"y1\", actor.y + 45).attr(\"x2\", center + 16).attr(\"y2\", actor.y + 60);\n const circle = actElem.append(\"circle\");\n circle.attr(\"cx\", actor.x + actor.width / 2);\n circle.attr(\"cy\", actor.y + 10);\n circle.attr(\"r\", 15);\n circle.attr(\"width\", actor.width);\n circle.attr(\"height\", actor.height);\n const bounds2 = actElem.node().getBBox();\n actor.height = bounds2.height;\n _drawTextCandidateFunc(conf2)(\n actor.description,\n actElem,\n rect.x,\n rect.y + 35,\n rect.width,\n rect.height,\n { class: \"actor\" },\n conf2\n );\n return actor.height;\n};\nconst drawActor = function(elem, actor, conf2, isFooter) {\n switch (actor.type) {\n case \"actor\":\n return drawActorTypeActor(elem, actor, conf2, isFooter);\n case \"participant\":\n return drawActorTypeParticipant(elem, actor, conf2, isFooter);\n }\n};\nconst drawBox = function(elem, box, conf2) {\n const boxplustextGroup = elem.append(\"g\");\n const g = boxplustextGroup;\n drawBackgroundRect(g, box);\n if (box.name) {\n _drawTextCandidateFunc(conf2)(\n box.name,\n g,\n box.x,\n box.y + (box.textMaxHeight || 0) / 2,\n box.width,\n 0,\n { class: \"text\" },\n conf2\n );\n }\n g.lower();\n};\nconst anchorElement = function(elem) {\n return elem.append(\"g\");\n};\nconst drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) {\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n const g = bounds2.anchored;\n rect.x = bounds2.startx;\n rect.y = bounds2.starty;\n rect.class = \"activation\" + actorActivations2 % 3;\n rect.width = bounds2.stopx - bounds2.startx;\n rect.height = verticalPos - bounds2.starty;\n drawRect(g, rect);\n};\nconst drawLoop = function(elem, loopModel, labelText, conf2) {\n const {\n boxMargin,\n boxTextMargin,\n labelBoxHeight,\n labelBoxWidth,\n messageFontFamily: fontFamily,\n messageFontSize: fontSize,\n messageFontWeight: fontWeight\n } = conf2;\n const g = elem.append(\"g\");\n const drawLoopLine = function(startx, starty, stopx, stopy) {\n return g.append(\"line\").attr(\"x1\", startx).attr(\"y1\", starty).attr(\"x2\", stopx).attr(\"y2\", stopy).attr(\"class\", \"loopLine\");\n };\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);\n drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);\n if (loopModel.sections !== void 0) {\n loopModel.sections.forEach(function(item) {\n drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(\n \"stroke-dasharray\",\n \"3, 3\"\n );\n });\n }\n let txt = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.e)();\n txt.text = labelText;\n txt.x = loopModel.startx;\n txt.y = loopModel.starty;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.anchor = \"middle\";\n txt.valign = \"middle\";\n txt.tspan = false;\n txt.width = labelBoxWidth || 50;\n txt.height = labelBoxHeight || 20;\n txt.textMargin = boxTextMargin;\n txt.class = \"labelText\";\n drawLabel(g, txt);\n txt = getTextObj();\n txt.text = loopModel.title;\n txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.starty + boxMargin + boxTextMargin;\n txt.anchor = \"middle\";\n txt.valign = \"middle\";\n txt.textMargin = boxTextMargin;\n txt.class = \"loopText\";\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = true;\n let textElem = drawText(g, txt);\n if (loopModel.sectionTitles !== void 0) {\n loopModel.sectionTitles.forEach(function(item, idx) {\n if (item.message) {\n txt.text = item.message;\n txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;\n txt.class = \"loopText\";\n txt.anchor = \"middle\";\n txt.valign = \"middle\";\n txt.tspan = false;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = loopModel.wrap;\n textElem = drawText(g, txt);\n let sectionHeight = Math.round(\n textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)\n );\n loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);\n }\n });\n }\n loopModel.height = Math.round(loopModel.stopy - loopModel.starty);\n return g;\n};\nconst drawBackgroundRect = function(elem, bounds2) {\n (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, bounds2);\n};\nconst insertDatabaseIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"database\").attr(\"fill-rule\", \"evenodd\").attr(\"clip-rule\", \"evenodd\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"\n );\n};\nconst insertComputerIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"computer\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"\n );\n};\nconst insertClockIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"clock\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"\n );\n};\nconst insertArrowHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n};\nconst insertArrowFilledHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"filled-head\").attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst insertSequenceNumber = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"sequencenumber\").attr(\"refX\", 15).attr(\"refY\", 15).attr(\"markerWidth\", 60).attr(\"markerHeight\", 40).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", 15).attr(\"cy\", 15).attr(\"r\", 6);\n};\nconst insertArrowCrossHead = function(elem) {\n const defs = elem.append(\"defs\");\n const marker = defs.append(\"marker\").attr(\"id\", \"crosshead\").attr(\"markerWidth\", 15).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").attr(\"refX\", 4).attr(\"refY\", 5);\n marker.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1pt\").attr(\"d\", \"M 1,2 L 6,7 M 6,2 L 1,7\");\n};\nconst getTextObj = function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n anchor: void 0,\n style: \"#666\",\n width: void 0,\n height: void 0,\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true,\n valign: void 0\n };\n};\nconst getNoteRect = function() {\n return {\n x: 0,\n y: 0,\n fill: \"#EDF2AE\",\n stroke: \"#666\",\n width: 100,\n anchor: \"start\",\n height: 100,\n rx: 0,\n ry: 0\n };\n};\nconst _drawTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;\n const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.B)(actorFontSize);\n const lines = content.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).style(\"text-anchor\", \"middle\").style(\"font-size\", _actorFontSizePx).style(\"font-weight\", actorFontWeight).style(\"font-family\", actorFontFamily);\n text.append(\"tspan\").attr(\"x\", x + width / 2).attr(\"dy\", dy).text(lines[i]);\n text.attr(\"y\", y + height / 2).attr(\"dominant-baseline\", \"central\").attr(\"alignment-baseline\", \"central\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst _drawMenuItemTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x).attr(\"y\", y).style(\"text-anchor\", \"start\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;\n const lines = content.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x).attr(\"y\", y).style(\"text-anchor\", \"start\").style(\"font-size\", actorFontSize).style(\"font-weight\", actorFontWeight).style(\"font-family\", actorFontFamily);\n text.append(\"tspan\").attr(\"x\", x).attr(\"dy\", dy).text(lines[i]);\n text.attr(\"y\", y + height / 2).attr(\"dominant-baseline\", \"central\").attr(\"alignment-baseline\", \"central\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst svgDraw = {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n drawBox,\n drawPopup,\n anchorElement,\n drawActivation,\n drawLoop,\n drawBackgroundRect,\n insertArrowHead,\n insertArrowFilledHead,\n insertSequenceNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon,\n getTextObj,\n getNoteRect,\n popupMenu,\n popdownMenu,\n fixLifeLineHeights,\n sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__.sanitizeUrl\n};\nlet conf = {};\nconst bounds = {\n data: {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0\n },\n verticalPos: 0,\n sequenceItems: [],\n activations: [],\n models: {\n getHeight: function() {\n return Math.max.apply(\n null,\n this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)\n ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h));\n },\n clear: function() {\n this.actors = [];\n this.boxes = [];\n this.loops = [];\n this.messages = [];\n this.notes = [];\n },\n addBox: function(boxModel) {\n this.boxes.push(boxModel);\n },\n addActor: function(actorModel) {\n this.actors.push(actorModel);\n },\n addLoop: function(loopModel) {\n this.loops.push(loopModel);\n },\n addMessage: function(msgModel) {\n this.messages.push(msgModel);\n },\n addNote: function(noteModel) {\n this.notes.push(noteModel);\n },\n lastActor: function() {\n return this.actors[this.actors.length - 1];\n },\n lastLoop: function() {\n return this.loops[this.loops.length - 1];\n },\n lastMessage: function() {\n return this.messages[this.messages.length - 1];\n },\n lastNote: function() {\n return this.notes[this.notes.length - 1];\n },\n actors: [],\n boxes: [],\n loops: [],\n messages: [],\n notes: []\n },\n init: function() {\n this.sequenceItems = [];\n this.activations = [];\n this.models.clear();\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0\n };\n this.verticalPos = 0;\n setConf((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)());\n },\n updateVal: function(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function(startx, starty, stopx, stopy) {\n const _self = this;\n let cnt = 0;\n function updateFn(type) {\n return function updateItemBounds(item) {\n cnt++;\n const n = _self.sequenceItems.length - cnt + 1;\n _self.updateVal(item, \"starty\", starty - n * conf.boxMargin, Math.min);\n _self.updateVal(item, \"stopy\", stopy + n * conf.boxMargin, Math.max);\n _self.updateVal(bounds.data, \"startx\", startx - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, \"stopx\", stopx + n * conf.boxMargin, Math.max);\n if (!(type === \"activation\")) {\n _self.updateVal(item, \"startx\", startx - n * conf.boxMargin, Math.min);\n _self.updateVal(item, \"stopx\", stopx + n * conf.boxMargin, Math.max);\n _self.updateVal(bounds.data, \"starty\", starty - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, \"stopy\", stopy + n * conf.boxMargin, Math.max);\n }\n };\n }\n this.sequenceItems.forEach(updateFn());\n this.activations.forEach(updateFn(\"activation\"));\n },\n insert: function(startx, starty, stopx, stopy) {\n const _startx = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(startx, stopx);\n const _stopx = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(startx, stopx);\n const _starty = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(starty, stopy);\n const _stopy = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(starty, stopy);\n this.updateVal(bounds.data, \"startx\", _startx, Math.min);\n this.updateVal(bounds.data, \"starty\", _starty, Math.min);\n this.updateVal(bounds.data, \"stopx\", _stopx, Math.max);\n this.updateVal(bounds.data, \"stopy\", _stopy, Math.max);\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n newActivation: function(message, diagram2, actors2) {\n const actorRect = actors2[message.from.actor];\n const stackedSize = actorActivations(message.from.actor).length || 0;\n const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2;\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: void 0,\n actor: message.from.actor,\n anchored: svgDraw.anchorElement(diagram2)\n });\n },\n endActivation: function(message) {\n const lastActorActivationIdx = this.activations.map(function(activation) {\n return activation.actor;\n }).lastIndexOf(message.from.actor);\n return this.activations.splice(lastActorActivationIdx, 1)[0];\n },\n createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) {\n return {\n startx: void 0,\n starty: this.verticalPos,\n stopx: void 0,\n stopy: void 0,\n title: title.message,\n wrap: title.wrap,\n width: title.width,\n height: 0,\n fill\n };\n },\n newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) {\n this.sequenceItems.push(this.createLoop(title, fill));\n },\n endLoop: function() {\n return this.sequenceItems.pop();\n },\n isLoopOverlap: function() {\n return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false;\n },\n addSectionToLoop: function(message) {\n const loop = this.sequenceItems.pop();\n loop.sections = loop.sections || [];\n loop.sectionTitles = loop.sectionTitles || [];\n loop.sections.push({ y: bounds.getVerticalPos(), height: 0 });\n loop.sectionTitles.push(message);\n this.sequenceItems.push(loop);\n },\n saveVerticalPos: function() {\n if (this.isLoopOverlap()) {\n this.savedVerticalPos = this.verticalPos;\n }\n },\n resetVerticalPos: function() {\n if (this.isLoopOverlap()) {\n this.verticalPos = this.savedVerticalPos;\n }\n },\n bumpVerticalPos: function(bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(this.data.stopy, this.verticalPos);\n },\n getVerticalPos: function() {\n return this.verticalPos;\n },\n getBounds: function() {\n return { bounds: this.data, models: this.models };\n }\n};\nconst drawNote = function(elem, noteModel) {\n bounds.bumpVerticalPos(conf.boxMargin);\n noteModel.height = conf.boxMargin;\n noteModel.starty = bounds.getVerticalPos();\n const rect = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.g)();\n rect.x = noteModel.startx;\n rect.y = noteModel.starty;\n rect.width = noteModel.width || conf.width;\n rect.class = \"note\";\n const g = elem.append(\"g\");\n const rectElem = svgDraw.drawRect(g, rect);\n const textObj = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.e)();\n textObj.x = noteModel.startx;\n textObj.y = noteModel.starty;\n textObj.width = rect.width;\n textObj.dy = \"1em\";\n textObj.text = noteModel.message;\n textObj.class = \"noteText\";\n textObj.fontFamily = conf.noteFontFamily;\n textObj.fontSize = conf.noteFontSize;\n textObj.fontWeight = conf.noteFontWeight;\n textObj.anchor = conf.noteAlign;\n textObj.textMargin = conf.noteMargin;\n textObj.valign = \"center\";\n const textElem = drawText(g, textObj);\n const textHeight = Math.round(\n textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)\n );\n rectElem.attr(\"height\", textHeight + 2 * conf.noteMargin);\n noteModel.height += textHeight + 2 * conf.noteMargin;\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin);\n noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin;\n noteModel.stopx = noteModel.startx + rect.width;\n bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);\n bounds.models.addNote(noteModel);\n};\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight\n };\n};\nconst noteFont = (cnf) => {\n return {\n fontFamily: cnf.noteFontFamily,\n fontSize: cnf.noteFontSize,\n fontWeight: cnf.noteFontWeight\n };\n};\nconst actorFont = (cnf) => {\n return {\n fontFamily: cnf.actorFontFamily,\n fontSize: cnf.actorFontSize,\n fontWeight: cnf.actorFontWeight\n };\n};\nfunction boundMessage(_diagram, msgModel) {\n bounds.bumpVerticalPos(10);\n const { startx, stopx, message } = msgModel;\n const lines = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.splitBreaks(message).length;\n const textDims = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(message, messageFont(conf));\n const lineHeight = textDims.height / lines;\n msgModel.height += lineHeight;\n bounds.bumpVerticalPos(lineHeight);\n let lineStartY;\n let totalOffset = textDims.height - 10;\n const textWidth = textDims.width;\n if (startx === stopx) {\n lineStartY = bounds.getVerticalPos() + totalOffset;\n if (!conf.rightAngles) {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n }\n totalOffset += 30;\n const dx = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(textWidth / 2, conf.width / 2);\n bounds.insert(\n startx - dx,\n bounds.getVerticalPos() - 10 + totalOffset,\n stopx + dx,\n bounds.getVerticalPos() + 30 + totalOffset\n );\n } else {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n bounds.insert(startx, lineStartY - 10, stopx, lineStartY);\n }\n bounds.bumpVerticalPos(totalOffset);\n msgModel.height += totalOffset;\n msgModel.stopy = msgModel.starty + msgModel.height;\n bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);\n return lineStartY;\n}\nconst drawMessage = function(diagram2, msgModel, lineStartY, diagObj) {\n const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel;\n const textDims = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(message, messageFont(conf));\n const textObj = (0,_svgDrawCommon_f26cad39_js__WEBPACK_IMPORTED_MODULE_6__.e)();\n textObj.x = startx;\n textObj.y = starty + 10;\n textObj.width = stopx - startx;\n textObj.class = \"messageText\";\n textObj.dy = \"1em\";\n textObj.text = message;\n textObj.fontFamily = conf.messageFontFamily;\n textObj.fontSize = conf.messageFontSize;\n textObj.fontWeight = conf.messageFontWeight;\n textObj.anchor = conf.messageAlign;\n textObj.valign = \"center\";\n textObj.textMargin = conf.wrapPadding;\n textObj.tspan = false;\n drawText(diagram2, textObj);\n const textWidth = textDims.width;\n let line;\n if (startx === stopx) {\n if (conf.rightAngles) {\n line = diagram2.append(\"path\").attr(\n \"d\",\n `M ${startx},${lineStartY} H ${startx + _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}`\n );\n } else {\n line = diagram2.append(\"path\").attr(\n \"d\",\n \"M \" + startx + \",\" + lineStartY + \" C \" + (startx + 60) + \",\" + (lineStartY - 10) + \" \" + (startx + 60) + \",\" + (lineStartY + 30) + \" \" + startx + \",\" + (lineStartY + 20)\n );\n }\n } else {\n line = diagram2.append(\"line\");\n line.attr(\"x1\", startx);\n line.attr(\"y1\", lineStartY);\n line.attr(\"x2\", stopx);\n line.attr(\"y2\", lineStartY);\n }\n if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) {\n line.style(\"stroke-dasharray\", \"3, 3\");\n line.attr(\"class\", \"messageLine1\");\n } else {\n line.attr(\"class\", \"messageLine0\");\n }\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n line.attr(\"stroke-width\", 2);\n line.attr(\"stroke\", \"none\");\n line.style(\"fill\", \"none\");\n if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) {\n line.attr(\"marker-end\", \"url(\" + url + \"#filled-head)\");\n }\n if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) {\n line.attr(\"marker-end\", \"url(\" + url + \"#crosshead)\");\n }\n if (sequenceVisible || conf.showSequenceNumbers) {\n line.attr(\"marker-start\", \"url(\" + url + \"#sequencenumber)\");\n diagram2.append(\"text\").attr(\"x\", startx).attr(\"y\", lineStartY + 4).attr(\"font-family\", \"sans-serif\").attr(\"font-size\", \"12px\").attr(\"text-anchor\", \"middle\").attr(\"class\", \"sequenceNumber\").text(sequenceIndex);\n }\n};\nconst drawActors = function(diagram2, actors2, actorKeys, verticalPos, configuration, messages2, isFooter) {\n if (configuration.hideUnusedParticipants === true) {\n const newActors = /* @__PURE__ */ new Set();\n messages2.forEach((message) => {\n newActors.add(message.from);\n newActors.add(message.to);\n });\n actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));\n }\n let prevWidth = 0;\n let prevMargin = 0;\n let maxHeight = 0;\n let prevBox = void 0;\n for (const actorKey of actorKeys) {\n const actor = actors2[actorKey];\n const box = actor.box;\n if (prevBox && prevBox != box) {\n if (!isFooter) {\n bounds.models.addBox(prevBox);\n }\n prevMargin += conf.boxMargin + prevBox.margin;\n }\n if (box && box != prevBox) {\n if (!isFooter) {\n box.x = prevWidth + prevMargin;\n box.y = verticalPos;\n }\n prevMargin += box.margin;\n }\n actor.width = actor.width || conf.width;\n actor.height = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(actor.height || conf.height, conf.height);\n actor.margin = actor.margin || conf.actorMargin;\n actor.x = prevWidth + prevMargin;\n actor.y = bounds.getVerticalPos();\n const height = svgDraw.drawActor(diagram2, actor, conf, isFooter);\n maxHeight = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(maxHeight, height);\n bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);\n prevWidth += actor.width + prevMargin;\n if (actor.box) {\n actor.box.width = prevWidth + box.margin - actor.box.x;\n }\n prevMargin = actor.margin;\n prevBox = actor.box;\n bounds.models.addActor(actor);\n }\n if (prevBox && !isFooter) {\n bounds.models.addBox(prevBox);\n }\n bounds.bumpVerticalPos(maxHeight);\n};\nconst drawActorsPopup = function(diagram2, actors2, actorKeys, doc) {\n let maxHeight = 0;\n let maxWidth = 0;\n for (const actorKey of actorKeys) {\n const actor = actors2[actorKey];\n const minMenuWidth = getRequiredPopupWidth(actor);\n const menuDimensions = svgDraw.drawPopup(\n diagram2,\n actor,\n minMenuWidth,\n conf,\n conf.forceMenus,\n doc\n );\n if (menuDimensions.height > maxHeight) {\n maxHeight = menuDimensions.height;\n }\n if (menuDimensions.width + actor.x > maxWidth) {\n maxWidth = menuDimensions.width + actor.x;\n }\n }\n return { maxHeight, maxWidth };\n};\nconst setConf = function(cnf) {\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.f)(conf, cnf);\n if (cnf.fontFamily) {\n conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\nconst actorActivations = function(actor) {\n return bounds.activations.filter(function(activation) {\n return activation.actor === actor;\n });\n};\nconst activationBounds = function(actor, actors2) {\n const actorObj = actors2[actor];\n const activations = actorActivations(actor);\n const left = activations.reduce(function(acc, activation) {\n return _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(acc, activation.startx);\n }, actorObj.x + actorObj.width / 2);\n const right = activations.reduce(function(acc, activation) {\n return _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(acc, activation.stopx);\n }, actorObj.x + actorObj.width / 2);\n return [left, right];\n};\nfunction adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {\n bounds.bumpVerticalPos(preMargin);\n let heightAdjust = postMargin;\n if (msg.id && msg.message && loopWidths[msg.id]) {\n const loopWidth = loopWidths[msg.id].width;\n const textConf = messageFont(conf);\n msg.message = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf);\n msg.width = loopWidth;\n msg.wrap = true;\n const textDims = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(msg.message, textConf);\n const totalOffset = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(textDims.height, conf.labelBoxHeight);\n heightAdjust = postMargin + totalOffset;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`${totalOffset} - ${msg.message}`);\n }\n addLoopFn(msg);\n bounds.bumpVerticalPos(heightAdjust);\n}\nconst draw = function(_text, id, _version, diagObj) {\n const { securityLevel, sequence } = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\n conf = sequence;\n diagObj.db.clear();\n diagObj.parser.parse(_text);\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n bounds.init();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(diagObj.db);\n const diagram2 = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(`[id=\"${id}\"]`);\n const actors2 = diagObj.db.getActors();\n const boxes2 = diagObj.db.getBoxes();\n const actorKeys = diagObj.db.getActorKeys();\n const messages2 = diagObj.db.getMessages();\n const title = diagObj.db.getDiagramTitle();\n const hasBoxes = diagObj.db.hasAtLeastOneBox();\n const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();\n const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors2, messages2, diagObj);\n conf.height = calculateActorMargins(actors2, maxMessageWidthPerActor, boxes2);\n svgDraw.insertComputerIcon(diagram2);\n svgDraw.insertDatabaseIcon(diagram2);\n svgDraw.insertClockIcon(diagram2);\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n if (hasBoxTitles) {\n bounds.bumpVerticalPos(boxes2[0].textMaxHeight);\n }\n }\n drawActors(diagram2, actors2, actorKeys, 0, conf, messages2, false);\n const loopWidths = calculateLoopBounds(messages2, actors2, maxMessageWidthPerActor, diagObj);\n svgDraw.insertArrowHead(diagram2);\n svgDraw.insertArrowCrossHead(diagram2);\n svgDraw.insertArrowFilledHead(diagram2);\n svgDraw.insertSequenceNumber(diagram2);\n function activeEnd(msg, verticalPos) {\n const activationData = bounds.endActivation(msg);\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6;\n verticalPos += 12;\n }\n svgDraw.drawActivation(\n diagram2,\n activationData,\n verticalPos,\n conf,\n actorActivations(msg.from.actor).length\n );\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);\n }\n let sequenceIndex = 1;\n let sequenceIndexStep = 1;\n const messagesToDraw = [];\n messages2.forEach(function(msg) {\n let loopModel, noteModel, msgModel;\n switch (msg.type) {\n case diagObj.db.LINETYPE.NOTE:\n bounds.resetVerticalPos();\n noteModel = msg.noteModel;\n drawNote(diagram2, noteModel);\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram2, actors2);\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.LOOP_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"loop\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.RECT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin,\n (message) => bounds.newLoop(void 0, message.message)\n );\n break;\n case diagObj.db.LINETYPE.RECT_END:\n loopModel = bounds.endLoop();\n svgDraw.drawBackgroundRect(diagram2, loopModel);\n bounds.models.addLoop(loopModel);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.OPT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.OPT_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"opt\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.ALT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"alt\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n bounds.saveVerticalPos();\n break;\n case diagObj.db.LINETYPE.PAR_AND:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.PAR_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"par\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.AUTONUMBER:\n sequenceIndex = msg.message.start || sequenceIndex;\n sequenceIndexStep = msg.message.step || sequenceIndexStep;\n if (msg.message.visible) {\n diagObj.db.enableSequenceNumbers();\n } else {\n diagObj.db.disableSequenceNumbers();\n }\n break;\n case diagObj.db.LINETYPE.CRITICAL_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"critical\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.BREAK_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.BREAK_END:\n loopModel = bounds.endLoop();\n svgDraw.drawLoop(diagram2, loopModel, \"break\", conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n default:\n try {\n bounds.resetVerticalPos();\n msgModel = msg.msgModel;\n msgModel.starty = bounds.getVerticalPos();\n msgModel.sequenceIndex = sequenceIndex;\n msgModel.sequenceVisible = diagObj.db.showSequenceNumbers();\n const lineStartY = boundMessage(diagram2, msgModel);\n messagesToDraw.push({ messageModel: msgModel, lineStartY });\n bounds.models.addMessage(msgModel);\n } catch (e) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.error(\"error while drawing message\", e);\n }\n }\n if ([\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT\n ].includes(msg.type)) {\n sequenceIndex = sequenceIndex + sequenceIndexStep;\n }\n });\n messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj));\n if (conf.mirrorActors) {\n bounds.bumpVerticalPos(conf.boxMargin * 2);\n drawActors(diagram2, actors2, actorKeys, bounds.getVerticalPos(), conf, messages2, true);\n bounds.bumpVerticalPos(conf.boxMargin);\n fixLifeLineHeights(diagram2, bounds.getVerticalPos());\n }\n bounds.models.boxes.forEach(function(box2) {\n box2.height = bounds.getVerticalPos() - box2.y;\n bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height);\n box2.startx = box2.x;\n box2.starty = box2.y;\n box2.stopx = box2.startx + box2.width;\n box2.stopy = box2.starty + box2.height;\n box2.stroke = \"rgb(0,0,0, 0.5)\";\n svgDraw.drawBox(diagram2, box2, conf);\n });\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n }\n const requiredBoxSize = drawActorsPopup(diagram2, actors2, actorKeys, doc);\n const { bounds: box } = bounds.getBounds();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"For line height fix Querying: #\" + id + \" .actor-line\");\n const actorLines = (0,d3__WEBPACK_IMPORTED_MODULE_0__.selectAll)(\"#\" + id + \" .actor-line\");\n actorLines.attr(\"y2\", box.stopy);\n let boxHeight = box.stopy - box.starty;\n if (boxHeight < requiredBoxSize.maxHeight) {\n boxHeight = requiredBoxSize.maxHeight;\n }\n let height = boxHeight + 2 * conf.diagramMarginY;\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj;\n }\n let boxWidth = box.stopx - box.startx;\n if (boxWidth < requiredBoxSize.maxWidth) {\n boxWidth = requiredBoxSize.maxWidth;\n }\n const width = boxWidth + 2 * conf.diagramMarginX;\n if (title) {\n diagram2.append(\"text\").text(title).attr(\"x\", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr(\"y\", -25);\n }\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.i)(diagram2, height, width, conf.useMaxWidth);\n const extraVertForTitle = title ? 40 : 0;\n diagram2.attr(\n \"viewBox\",\n box.startx - conf.diagramMarginX + \" -\" + (conf.diagramMarginY + extraVertForTitle) + \" \" + width + \" \" + (height + extraVertForTitle)\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`models:`, bounds.models);\n};\nfunction getMaxMessageWidthPerActor(actors2, messages2, diagObj) {\n const maxMessageWidthPerActor = {};\n messages2.forEach(function(msg) {\n if (actors2[msg.to] && actors2[msg.from]) {\n const actor = actors2[msg.to];\n if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {\n return;\n }\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {\n return;\n }\n const isNote = msg.placement !== void 0;\n const isMessage = !isNote;\n const textFont = isNote ? noteFont(conf) : messageFont(conf);\n const wrappedMessage = msg.wrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message;\n const messageDimensions = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(wrappedMessage, textFont);\n const messageWidth = messageDimensions.width + 2 * conf.wrapPadding;\n if (isMessage && msg.from === actor.nextActor) {\n maxMessageWidthPerActor[msg.to] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === actor.prevActor) {\n maxMessageWidthPerActor[msg.from] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === msg.to) {\n maxMessageWidthPerActor[msg.from] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n maxMessageWidthPerActor[msg.to] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth / 2\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n maxMessageWidthPerActor[msg.from] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n maxMessageWidthPerActor[actor.prevActor] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {\n if (actor.prevActor) {\n maxMessageWidthPerActor[actor.prevActor] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth / 2\n );\n }\n if (actor.nextActor) {\n maxMessageWidthPerActor[msg.from] = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n }\n }\n }\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"maxMessageWidthPerActor:\", maxMessageWidthPerActor);\n return maxMessageWidthPerActor;\n}\nconst getRequiredPopupWidth = function(actor) {\n let requiredPopupWidth = 0;\n const textFont = actorFont(conf);\n for (const key in actor.links) {\n const labelDimensions = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(key, textFont);\n const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin;\n if (requiredPopupWidth < labelWidth) {\n requiredPopupWidth = labelWidth;\n }\n }\n return requiredPopupWidth;\n};\nfunction calculateActorMargins(actors2, actorToMessageWidth, boxes2) {\n let maxHeight = 0;\n Object.keys(actors2).forEach((prop) => {\n const actor = actors2[prop];\n if (actor.wrap) {\n actor.description = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(\n actor.description,\n conf.width - 2 * conf.wrapPadding,\n actorFont(conf)\n );\n }\n const actDims = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(actor.description, actorFont(conf));\n actor.width = actor.wrap ? conf.width : _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding);\n actor.height = actor.wrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(actDims.height, conf.height) : conf.height;\n maxHeight = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(maxHeight, actor.height);\n });\n for (const actorKey in actorToMessageWidth) {\n const actor = actors2[actorKey];\n if (!actor) {\n continue;\n }\n const nextActor = actors2[actor.nextActor];\n if (!nextActor) {\n const messageWidth2 = actorToMessageWidth[actorKey];\n const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2;\n actor.margin = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(actorWidth2, conf.actorMargin);\n continue;\n }\n const messageWidth = actorToMessageWidth[actorKey];\n const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2;\n actor.margin = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(actorWidth, conf.actorMargin);\n }\n let maxBoxHeight = 0;\n boxes2.forEach((box) => {\n const textFont = messageFont(conf);\n let totalWidth = box.actorKeys.reduce((total, aKey) => {\n return total += actors2[aKey].width + (actors2[aKey].margin || 0);\n }, 0);\n totalWidth -= 2 * conf.boxTextMargin;\n if (box.wrap) {\n box.name = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont);\n }\n const boxMsgDimensions = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(box.name, textFont);\n maxBoxHeight = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(boxMsgDimensions.height, maxBoxHeight);\n const minWidth = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding);\n box.margin = conf.boxTextMargin;\n if (totalWidth < minWidth) {\n const missing = (minWidth - totalWidth) / 2;\n box.margin += missing;\n }\n });\n boxes2.forEach((box) => box.textMaxHeight = maxBoxHeight);\n return _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(maxHeight, conf.height);\n}\nconst buildNoteModel = function(msg, actors2, diagObj) {\n const startx = actors2[msg.from].x;\n const stopx = actors2[msg.to].x;\n const shouldWrap = msg.wrap && msg.message;\n let textDimensions = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(\n shouldWrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message,\n noteFont(conf)\n );\n const noteModel = {\n width: shouldWrap ? conf.width : _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin),\n height: 0,\n startx: actors2[msg.from].x,\n stopx: 0,\n starty: 0,\n stopy: 0,\n message: msg.message\n };\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n noteModel.width = shouldWrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, textDimensions.width) : _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n actors2[msg.from].width / 2 + actors2[msg.to].width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx + (actors2[msg.from].width + conf.actorMargin) / 2;\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n noteModel.width = shouldWrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n actors2[msg.from].width / 2 + actors2[msg.to].width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx - noteModel.width + (actors2[msg.from].width - conf.actorMargin) / 2;\n } else if (msg.to === msg.from) {\n textDimensions = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(\n shouldWrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(\n msg.message,\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, actors2[msg.from].width),\n noteFont(conf)\n ) : msg.message,\n noteFont(conf)\n );\n noteModel.width = shouldWrap ? _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(conf.width, actors2[msg.from].width) : _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n actors2[msg.from].width,\n conf.width,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx + (actors2[msg.from].width - noteModel.width) / 2;\n } else {\n noteModel.width = Math.abs(startx + actors2[msg.from].width / 2 - (stopx + actors2[msg.to].width / 2)) + conf.actorMargin;\n noteModel.startx = startx < stopx ? startx + actors2[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors2[msg.to].width / 2 - conf.actorMargin / 2;\n }\n if (shouldWrap) {\n noteModel.message = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(\n msg.message,\n noteModel.width - 2 * conf.wrapPadding,\n noteFont(conf)\n );\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\n `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`\n );\n return noteModel;\n};\nconst buildMessageModel = function(msg, actors2, diagObj) {\n let process = false;\n if ([\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT\n ].includes(msg.type)) {\n process = true;\n }\n if (!process) {\n return {};\n }\n const fromBounds = activationBounds(msg.from, actors2);\n const toBounds = activationBounds(msg.to, actors2);\n const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0;\n const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;\n const allBounds = [...fromBounds, ...toBounds];\n const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);\n if (msg.wrap && msg.message) {\n msg.message = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.wrapLabel(\n msg.message,\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width),\n messageFont(conf)\n );\n }\n const msgDims = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.calculateTextDimensions(msg.message, messageFont(conf));\n return {\n width: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,\n boundedWidth + 2 * conf.wrapPadding,\n conf.width\n ),\n height: 0,\n startx: fromBounds[fromIdx],\n stopx: toBounds[toIdx],\n starty: 0,\n stopy: 0,\n message: msg.message,\n type: msg.type,\n wrap: msg.wrap,\n fromBounds: Math.min.apply(null, allBounds),\n toBounds: Math.max.apply(null, allBounds)\n };\n};\nconst calculateLoopBounds = function(messages2, actors2, _maxWidthPerActor, diagObj) {\n const loops = {};\n const stack = [];\n let current, noteModel, msgModel;\n messages2.forEach(function(msg) {\n msg.id = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.u.random({ length: 10 });\n switch (msg.type) {\n case diagObj.db.LINETYPE.LOOP_START:\n case diagObj.db.LINETYPE.ALT_START:\n case diagObj.db.LINETYPE.OPT_START:\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n case diagObj.db.LINETYPE.CRITICAL_START:\n case diagObj.db.LINETYPE.BREAK_START:\n stack.push({\n id: msg.id,\n msg: msg.message,\n from: Number.MAX_SAFE_INTEGER,\n to: Number.MIN_SAFE_INTEGER,\n width: 0\n });\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n case diagObj.db.LINETYPE.PAR_AND:\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n if (msg.message) {\n current = stack.pop();\n loops[current.id] = current;\n loops[msg.id] = current;\n stack.push(current);\n }\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n case diagObj.db.LINETYPE.ALT_END:\n case diagObj.db.LINETYPE.OPT_END:\n case diagObj.db.LINETYPE.PAR_END:\n case diagObj.db.LINETYPE.CRITICAL_END:\n case diagObj.db.LINETYPE.BREAK_END:\n current = stack.pop();\n loops[current.id] = current;\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n {\n const actorRect = actors2[msg.from ? msg.from.actor : msg.to.actor];\n const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;\n const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2;\n const toAdd = {\n startx: x,\n stopx: x + conf.activationWidth,\n actor: msg.from.actor,\n enabled: true\n };\n bounds.activations.push(toAdd);\n }\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n {\n const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor);\n delete bounds.activations.splice(lastActorActivationIdx, 1)[0];\n }\n break;\n }\n const isNote = msg.placement !== void 0;\n if (isNote) {\n noteModel = buildNoteModel(msg, actors2, diagObj);\n msg.noteModel = noteModel;\n stack.forEach((stk) => {\n current = stk;\n current.from = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(current.from, noteModel.startx);\n current.to = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(current.to, noteModel.startx + noteModel.width);\n current.width = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth;\n });\n } else {\n msgModel = buildMessageModel(msg, actors2, diagObj);\n msg.msgModel = msgModel;\n if (msgModel.startx && msgModel.stopx && stack.length > 0) {\n stack.forEach((stk) => {\n current = stk;\n if (msgModel.startx === msgModel.stopx) {\n const from = actors2[msg.from];\n const to = actors2[msg.to];\n current.from = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(\n from.x - msgModel.width / 2,\n from.x - from.width / 2,\n current.from\n );\n current.to = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(\n to.x + msgModel.width / 2,\n to.x + from.width / 2,\n current.to\n );\n current.width = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth;\n } else {\n current.from = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMin(msgModel.startx, current.from);\n current.to = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(msgModel.stopx, current.to);\n current.width = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth;\n }\n });\n }\n }\n });\n bounds.activations = [];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"Loop type widths:\", loops);\n return loops;\n};\nconst renderer = {\n bounds,\n drawActors,\n drawActorsPopup,\n setConf,\n draw\n};\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zZXF1ZW5jZURpYWdyYW0tNWRmZDAwNDkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBc1g7QUFDL1U7QUFDaUk7QUFDbEg7QUFDbkM7QUFDSjtBQUNJO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQix5N0NBQXk3QztBQUN6OEMsa0JBQWtCLCs1QkFBKzVCO0FBQ2o3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isd0RBQXdEO0FBQ3ZGLDRCQUE0QixxQ0FBcUM7QUFDakU7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw4RkFBOEY7QUFDN0gsNEJBQTRCLHlFQUF5RTtBQUNyRztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsMkZBQTJGO0FBQzFILDRCQUE0Qix1RkFBdUY7QUFDbkg7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDJGQUEyRjtBQUMxSCw0QkFBNEIsdUZBQXVGO0FBQ25IO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwyRkFBMkY7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUCw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsdUJBQXVCLG1CQUFtQixrQ0FBa0MscUJBQXFCLDRGQUE0RixxQkFBcUIsOEdBQThHLG1CQUFtQixvQ0FBb0MsMlBBQTJQLG1PQUFtTywwQkFBMEIsNkhBQTZILGdCQUFnQixlQUFlLHdGQUF3RixzQkFBc0IseUNBQXlDLHFKQUFxSjtBQUN2ekMsb0JBQW9CLHlCQUF5Qix1Q0FBdUMsaUJBQWlCLG1DQUFtQyxpQkFBaUIsbUNBQW1DLHNCQUFzQixxQ0FBcUMsc0JBQXNCLHdDQUF3QyxxQkFBcUIsd0NBQXdDLFVBQVUseUNBQXlDLGFBQWEsNkNBQTZDLFlBQVkseUNBQXlDLGVBQWU7QUFDbmlCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGtFQUF5QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxxREFBcUQsNEJBQTRCO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhEQUE4RDtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx1REFBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFPO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsdURBQVksdUNBQXVDLHVEQUFTO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHVEQUFZLFlBQVksdURBQVM7QUFDekQsZ0RBQWdEO0FBQ2hELG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUkseURBQVM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQVksWUFBWSx1REFBUztBQUN6RDtBQUNBLGdEQUFnRDtBQUNoRCxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osSUFBSSx5REFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1REFBWSxZQUFZLHVEQUFTO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osSUFBSSx5REFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJLHlEQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1REFBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCO0FBQ0EsbUJBQW1CLHVEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsbUJBQW1CO0FBQ25CLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0EsWUFBWTtBQUNaLGNBQWM7QUFDZDs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBLFlBQVk7QUFDWixjQUFjO0FBQ2Q7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWixjQUFjO0FBQ2Q7O0FBRUE7QUFDQSxZQUFZO0FBQ1osY0FBYztBQUNkOztBQUVBO0FBQ0EsWUFBWTtBQUNaLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNkRBQVU7QUFDbkI7QUFDQTtBQUNBLEVBQUUsdURBQVc7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsb0VBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSw2REFBNkQsa0JBQWtCLDZCQUE2QjtBQUM1RztBQUNBO0FBQ0EsNkRBQTZELGtCQUFrQiw0QkFBNEI7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msa0VBQXFCO0FBQ3pELDJDQUEyQyx1REFBYTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EseUJBQXlCLG1EQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkRBQWE7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDZEQUFpQjtBQUN2QixNQUFNO0FBQ04sTUFBTSw2REFBUztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sZ0JBQWdCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2REFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGdCQUFnQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2REFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLDZEQUFZO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsNkRBQW9CO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtEQUFrRDtBQUM5RCwrQ0FBK0MsdURBQWE7QUFDNUQsZ0NBQWdDLGtFQUFxQjtBQUNyRCxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksa0RBQWtEO0FBQzlELGdDQUFnQyxrRUFBcUI7QUFDckQsb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVEQUFTO0FBQ3JCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxvQkFBb0IsMERBQWE7QUFDakMsbUJBQW1CLDBEQUFhO0FBQ2hDLG9CQUFvQiwwREFBYTtBQUNqQyxtQkFBbUIsMERBQWE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsaUNBQWlDLDZDQUE2QztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILDhCQUE4Qiw2Q0FBNkM7QUFDM0U7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHVDQUF1QztBQUNoRTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxzQkFBc0IsMERBQWE7QUFDbkMsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2REFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNkRBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUseUJBQXlCO0FBQ25DLGdCQUFnQiwrREFBa0I7QUFDbEMsbUJBQW1CLDJFQUE2QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMERBQWE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHVFQUF1RTtBQUNqRixtQkFBbUIsMkVBQTZCO0FBQ2hELGtCQUFrQiw2REFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPLEdBQUcsWUFBWSxJQUFJLFNBQVMsMERBQWEsaUNBQWlDLElBQUksaUJBQWlCLElBQUksT0FBTztBQUMvSDtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBEQUFhO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDBEQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLEVBQUUsdURBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMERBQWE7QUFDeEIsR0FBRztBQUNIO0FBQ0EsV0FBVywwREFBYTtBQUN4QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2REFBZSxLQUFLLFlBQVk7QUFDbEQ7QUFDQTtBQUNBLHFCQUFxQiwyRUFBNkI7QUFDbEQsd0JBQXdCLDBEQUFhO0FBQ3JDO0FBQ0EsSUFBSSx5REFBUyxJQUFJLGFBQWEsSUFBSSxZQUFZO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBCQUEwQixFQUFFLHVEQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMENBQU07QUFDM0I7QUFDQSw2Q0FBNkMsMENBQU0sbURBQW1ELDBDQUFNO0FBQzVHO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1gscUVBQXFFLEdBQUcsT0FBTywwQ0FBTSxTQUFTLEdBQUc7QUFDakc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMERBQWE7QUFDcEMscUJBQXFCLDBEQUFhO0FBQ2xDLHdCQUF3QiwwREFBYTtBQUNyQyxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMERBQWE7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsMERBQWE7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMERBQWE7QUFDekMsWUFBWTtBQUNaLDJCQUEyQiwwREFBYTtBQUN4Qyx5QkFBeUIsMERBQWE7QUFDdEMsNEJBQTRCLDBEQUFhO0FBQ3pDO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zZXF1ZW5jZURpYWdyYW0tNWRmZDAwNDkuanM/NDliYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnIGFzIGdldEFjY1RpdGxlLCB0IGFzIGdldERpYWdyYW1UaXRsZSwgciBhcyBzZXREaWFncmFtVGl0bGUsIGMgYXMgZ2V0Q29uZmlnLCBzIGFzIHNldEFjY1RpdGxlLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBtIGFzIG1lcm1haWRBUEksIHYgYXMgY2xlYXIkMSwgbCBhcyBsb2csIGQgYXMgc2FuaXRpemVUZXh0LCBlIGFzIGNvbW1vbiwgQiBhcyBwYXJzZUZvbnRTaXplLCBFIGFzIGFkZEZ1bmN0aW9uLCBaIGFzIFpFUk9fV0lEVEhfU1BBQ0UsIGYgYXMgYXNzaWduV2l0aERlcHRoLCBpIGFzIGNvbmZpZ3VyZVN2Z1NpemUsIHUgYXMgdXRpbHMgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIHNlbGVjdEFsbCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgZCBhcyBkcmF3UmVjdCQxLCBhIGFzIGRyYXdCYWNrZ3JvdW5kUmVjdCQxLCBiIGFzIGRyYXdFbWJlZGRlZEltYWdlLCBjIGFzIGRyYXdJbWFnZSwgZSBhcyBnZXRUZXh0T2JqJDEsIGcgYXMgZ2V0Tm90ZVJlY3QkMSB9IGZyb20gXCIuL3N2Z0RyYXdDb21tb24tZjI2Y2FkMzkuanNcIjtcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJkb21wdXJpZnlcIjtcbmltcG9ydCBcImtocm9tYVwiO1xuaW1wb3J0IFwibG9kYXNoLWVzL21lbW9pemUuanNcIjtcbmltcG9ydCBcInN0eWxpc1wiO1xuaW1wb3J0IFwibG9kYXNoLWVzL2lzRW1wdHkuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCAyXSwgJFYxID0gWzEsIDNdLCAkVjIgPSBbMSwgNV0sICRWMyA9IFsxLCA3XSwgJFY0ID0gWzIsIDVdLCAkVjUgPSBbMSwgMTVdLCAkVjYgPSBbMSwgMTddLCAkVjcgPSBbMSwgMTldLCAkVjggPSBbMSwgMjFdLCAkVjkgPSBbMSwgMjJdLCAkVmEgPSBbMSwgMjNdLCAkVmIgPSBbMSwgMjldLCAkVmMgPSBbMSwgMzBdLCAkVmQgPSBbMSwgMzFdLCAkVmUgPSBbMSwgMzJdLCAkVmYgPSBbMSwgMzNdLCAkVmcgPSBbMSwgMzRdLCAkVmggPSBbMSwgMzVdLCAkVmkgPSBbMSwgMzZdLCAkVmogPSBbMSwgMzddLCAkVmsgPSBbMSwgMzhdLCAkVmwgPSBbMSwgMzldLCAkVm0gPSBbMSwgNDBdLCAkVm4gPSBbMSwgNDFdLCAkVm8gPSBbMSwgNDNdLCAkVnAgPSBbMSwgNDRdLCAkVnEgPSBbMSwgNDZdLCAkVnIgPSBbMSwgNDddLCAkVnMgPSBbMSwgNDhdLCAkVnQgPSBbMSwgNDldLCAkVnUgPSBbMSwgNTBdLCAkVnYgPSBbMSwgNTFdLCAkVncgPSBbMSwgNTRdLCAkVnggPSBbMSwgNCwgNSwgMTksIDIxLCAyMywgMjYsIDI4LCAzNCwgMzUsIDM2LCAzOCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NiwgNDgsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU3LCA1OCwgNjMsIDY0LCA2NSwgNjYsIDc0LCA4NF0sICRWeSA9IFs0LCA1LCAyMSwgNTUsIDU3XSwgJFZ6ID0gWzQsIDUsIDE5LCAyMSwgMjMsIDI2LCAyOCwgMzQsIDM1LCAzNiwgMzgsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDYsIDQ4LCA0OSwgNTEsIDU1LCA1NywgNTgsIDYzLCA2NCwgNjUsIDY2LCA3NCwgODRdLCAkVkEgPSBbNCwgNSwgMTksIDIxLCAyMywgMjYsIDI4LCAzNCwgMzUsIDM2LCAzOCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NiwgNDgsIDQ5LCA1MSwgNTQsIDU1LCA1NywgNTgsIDYzLCA2NCwgNjUsIDY2LCA3NCwgODRdLCAkVkIgPSBbNCwgNSwgMTksIDIxLCAyMywgMjYsIDI4LCAzNCwgMzUsIDM2LCAzOCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NiwgNDgsIDQ5LCA1MSwgNTMsIDU1LCA1NywgNTgsIDYzLCA2NCwgNjUsIDY2LCA3NCwgODRdLCAkVkMgPSBbNCwgNSwgMTksIDIxLCAyMywgMjYsIDI4LCAzNCwgMzUsIDM2LCAzOCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NiwgNDgsIDQ5LCA1MSwgNTIsIDU1LCA1NywgNTgsIDYzLCA2NCwgNjUsIDY2LCA3NCwgODRdLCAkVkQgPSBbNzIsIDczLCA3NF0sICRWRSA9IFsxLCAxMjhdLCAkVkYgPSBbMSwgNCwgNSwgNywgMTksIDIxLCAyMywgMjYsIDI4LCAzNCwgMzUsIDM2LCAzOCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NiwgNDgsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU3LCA1OCwgNjMsIDY0LCA2NSwgNjYsIDc0LCA4NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJTUEFDRVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJkaXJlY3RpdmVcIjogNiwgXCJTRFwiOiA3LCBcImRvY3VtZW50XCI6IDgsIFwibGluZVwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJib3hfc2VjdGlvblwiOiAxMSwgXCJib3hfbGluZVwiOiAxMiwgXCJwYXJ0aWNpcGFudF9zdGF0ZW1lbnRcIjogMTMsIFwib3BlbkRpcmVjdGl2ZVwiOiAxNCwgXCJ0eXBlRGlyZWN0aXZlXCI6IDE1LCBcImNsb3NlRGlyZWN0aXZlXCI6IDE2LCBcIjpcIjogMTcsIFwiYXJnRGlyZWN0aXZlXCI6IDE4LCBcImJveFwiOiAxOSwgXCJyZXN0T2ZMaW5lXCI6IDIwLCBcImVuZFwiOiAyMSwgXCJzaWduYWxcIjogMjIsIFwiYXV0b251bWJlclwiOiAyMywgXCJOVU1cIjogMjQsIFwib2ZmXCI6IDI1LCBcImFjdGl2YXRlXCI6IDI2LCBcImFjdG9yXCI6IDI3LCBcImRlYWN0aXZhdGVcIjogMjgsIFwibm90ZV9zdGF0ZW1lbnRcIjogMjksIFwibGlua3Nfc3RhdGVtZW50XCI6IDMwLCBcImxpbmtfc3RhdGVtZW50XCI6IDMxLCBcInByb3BlcnRpZXNfc3RhdGVtZW50XCI6IDMyLCBcImRldGFpbHNfc3RhdGVtZW50XCI6IDMzLCBcInRpdGxlXCI6IDM0LCBcImxlZ2FjeV90aXRsZVwiOiAzNSwgXCJhY2NfdGl0bGVcIjogMzYsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDM3LCBcImFjY19kZXNjclwiOiAzOCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMzksIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiA0MCwgXCJsb29wXCI6IDQxLCBcInJlY3RcIjogNDIsIFwib3B0XCI6IDQzLCBcImFsdFwiOiA0NCwgXCJlbHNlX3NlY3Rpb25zXCI6IDQ1LCBcInBhclwiOiA0NiwgXCJwYXJfc2VjdGlvbnNcIjogNDcsIFwicGFyX292ZXJcIjogNDgsIFwiY3JpdGljYWxcIjogNDksIFwib3B0aW9uX3NlY3Rpb25zXCI6IDUwLCBcImJyZWFrXCI6IDUxLCBcIm9wdGlvblwiOiA1MiwgXCJhbmRcIjogNTMsIFwiZWxzZVwiOiA1NCwgXCJwYXJ0aWNpcGFudFwiOiA1NSwgXCJBU1wiOiA1NiwgXCJwYXJ0aWNpcGFudF9hY3RvclwiOiA1NywgXCJub3RlXCI6IDU4LCBcInBsYWNlbWVudFwiOiA1OSwgXCJ0ZXh0MlwiOiA2MCwgXCJvdmVyXCI6IDYxLCBcImFjdG9yX3BhaXJcIjogNjIsIFwibGlua3NcIjogNjMsIFwibGlua1wiOiA2NCwgXCJwcm9wZXJ0aWVzXCI6IDY1LCBcImRldGFpbHNcIjogNjYsIFwic3BhY2VMaXN0XCI6IDY3LCBcIixcIjogNjgsIFwibGVmdF9vZlwiOiA2OSwgXCJyaWdodF9vZlwiOiA3MCwgXCJzaWduYWx0eXBlXCI6IDcxLCBcIitcIjogNzIsIFwiLVwiOiA3MywgXCJBQ1RPUlwiOiA3NCwgXCJTT0xJRF9PUEVOX0FSUk9XXCI6IDc1LCBcIkRPVFRFRF9PUEVOX0FSUk9XXCI6IDc2LCBcIlNPTElEX0FSUk9XXCI6IDc3LCBcIkRPVFRFRF9BUlJPV1wiOiA3OCwgXCJTT0xJRF9DUk9TU1wiOiA3OSwgXCJET1RURURfQ1JPU1NcIjogODAsIFwiU09MSURfUE9JTlRcIjogODEsIFwiRE9UVEVEX1BPSU5UXCI6IDgyLCBcIlRYVFwiOiA4MywgXCJvcGVuX2RpcmVjdGl2ZVwiOiA4NCwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiA4NSwgXCJhcmdfZGlyZWN0aXZlXCI6IDg2LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiA4NywgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiU1BBQ0VcIiwgNTogXCJORVdMSU5FXCIsIDc6IFwiU0RcIiwgMTc6IFwiOlwiLCAxOTogXCJib3hcIiwgMjA6IFwicmVzdE9mTGluZVwiLCAyMTogXCJlbmRcIiwgMjM6IFwiYXV0b251bWJlclwiLCAyNDogXCJOVU1cIiwgMjU6IFwib2ZmXCIsIDI2OiBcImFjdGl2YXRlXCIsIDI4OiBcImRlYWN0aXZhdGVcIiwgMzQ6IFwidGl0bGVcIiwgMzU6IFwibGVnYWN5X3RpdGxlXCIsIDM2OiBcImFjY190aXRsZVwiLCAzNzogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzg6IFwiYWNjX2Rlc2NyXCIsIDM5OiBcImFjY19kZXNjcl92YWx1ZVwiLCA0MDogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDQxOiBcImxvb3BcIiwgNDI6IFwicmVjdFwiLCA0MzogXCJvcHRcIiwgNDQ6IFwiYWx0XCIsIDQ2OiBcInBhclwiLCA0ODogXCJwYXJfb3ZlclwiLCA0OTogXCJjcml0aWNhbFwiLCA1MTogXCJicmVha1wiLCA1MjogXCJvcHRpb25cIiwgNTM6IFwiYW5kXCIsIDU0OiBcImVsc2VcIiwgNTU6IFwicGFydGljaXBhbnRcIiwgNTY6IFwiQVNcIiwgNTc6IFwicGFydGljaXBhbnRfYWN0b3JcIiwgNTg6IFwibm90ZVwiLCA2MTogXCJvdmVyXCIsIDYzOiBcImxpbmtzXCIsIDY0OiBcImxpbmtcIiwgNjU6IFwicHJvcGVydGllc1wiLCA2NjogXCJkZXRhaWxzXCIsIDY4OiBcIixcIiwgNjk6IFwibGVmdF9vZlwiLCA3MDogXCJyaWdodF9vZlwiLCA3MjogXCIrXCIsIDczOiBcIi1cIiwgNzQ6IFwiQUNUT1JcIiwgNzU6IFwiU09MSURfT1BFTl9BUlJPV1wiLCA3NjogXCJET1RURURfT1BFTl9BUlJPV1wiLCA3NzogXCJTT0xJRF9BUlJPV1wiLCA3ODogXCJET1RURURfQVJST1dcIiwgNzk6IFwiU09MSURfQ1JPU1NcIiwgODA6IFwiRE9UVEVEX0NST1NTXCIsIDgxOiBcIlNPTElEX1BPSU5UXCIsIDgyOiBcIkRPVFRFRF9QT0lOVFwiLCA4MzogXCJUWFRcIiwgODQ6IFwib3Blbl9kaXJlY3RpdmVcIiwgODU6IFwidHlwZV9kaXJlY3RpdmVcIiwgODY6IFwiYXJnX2RpcmVjdGl2ZVwiLCA4NzogXCJjbG9zZV9kaXJlY3RpdmVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDJdLCBbMywgMl0sIFszLCAyXSwgWzgsIDBdLCBbOCwgMl0sIFs5LCAyXSwgWzksIDFdLCBbOSwgMV0sIFsxMSwgMF0sIFsxMSwgMl0sIFsxMiwgMl0sIFsxMiwgMV0sIFsxMiwgMV0sIFs2LCA0XSwgWzYsIDZdLCBbMTAsIDFdLCBbMTAsIDRdLCBbMTAsIDJdLCBbMTAsIDRdLCBbMTAsIDNdLCBbMTAsIDNdLCBbMTAsIDJdLCBbMTAsIDNdLCBbMTAsIDNdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDFdLCBbNTAsIDFdLCBbNTAsIDRdLCBbNDcsIDFdLCBbNDcsIDRdLCBbNDUsIDFdLCBbNDUsIDRdLCBbMTMsIDVdLCBbMTMsIDNdLCBbMTMsIDVdLCBbMTMsIDNdLCBbMjksIDRdLCBbMjksIDRdLCBbMzAsIDNdLCBbMzEsIDNdLCBbMzIsIDNdLCBbMzMsIDNdLCBbNjcsIDJdLCBbNjcsIDFdLCBbNjIsIDNdLCBbNjIsIDFdLCBbNTksIDFdLCBbNTksIDFdLCBbMjIsIDVdLCBbMjIsIDVdLCBbMjIsIDRdLCBbMjcsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNzEsIDFdLCBbNjAsIDFdLCBbMTQsIDFdLCBbMTUsIDFdLCBbMTgsIDFdLCBbMTYsIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB5eS5hcHBseSgkJFskMF0pO1xuICAgICAgICAgIHJldHVybiAkJFskMF07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDEyOlxuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiYm94U3RhcnRcIiwgYm94RGF0YTogeXkucGFyc2VCb3hEYXRhKCQkWyQwIC0gMl0pIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYm94RW5kXCIsIGJveFRleHQ6ICQkWyQwIC0gMl0gfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZUluZGV4OiBOdW1iZXIoJCRbJDAgLSAyXSksIHNlcXVlbmNlSW5kZXhTdGVwOiBOdW1iZXIoJCRbJDAgLSAxXSksIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlSW5kZXg6IE51bWJlcigkJFskMCAtIDFdKSwgc2VxdWVuY2VJbmRleFN0ZXA6IDEsIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlVmlzaWJsZTogZmFsc2UsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZVZpc2libGU6IHRydWUsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhY3RpdmVFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX0VORCwgYWN0b3I6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg3KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwibG9vcFN0YXJ0XCIsIGxvb3BUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkxPT1BfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJsb29wRW5kXCIsIGxvb3BUZXh0OiAkJFskMCAtIDJdLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5MT09QX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwicmVjdFN0YXJ0XCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJyZWN0RW5kXCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfRU5EIH0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgJCRbJDAgLSAxXS51bnNoaWZ0KHsgdHlwZTogXCJvcHRTdGFydFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9TVEFSVCB9KTtcbiAgICAgICAgICAkJFskMCAtIDFdLnB1c2goeyB0eXBlOiBcIm9wdEVuZFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImFsdFN0YXJ0XCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYWx0RW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFMVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwicGFyRW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX09WRVJfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJwYXJFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiY3JpdGljYWxTdGFydFwiLCBjcml0aWNhbFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJjcml0aWNhbEVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5DUklUSUNBTF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImJyZWFrU3RhcnRcIiwgYnJlYWtUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkJSRUFLX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYnJlYWtFbmRcIiwgb3B0VGV4dDogeXkucGFyc2VNZXNzYWdlKCQkWyQwIC0gMl0pLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5CUkVBS19FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcIm9wdGlvblwiLCBvcHRpb25UZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTiB9LCAkJFskMF1dKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcImFuZFwiLCBwYXJUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9BTkQgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXS5jb25jYXQoW3sgdHlwZTogXCJlbHNlXCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX0VMU0UgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgJCRbJDAgLSAzXS50eXBlID0gXCJhZGRQYXJ0aWNpcGFudFwiO1xuICAgICAgICAgICQkWyQwIC0gM10uZGVzY3JpcHRpb24gPSB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMCAtIDFdLnR5cGUgPSBcImFkZFBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAkJFskMCAtIDNdLnR5cGUgPSBcImFkZEFjdG9yXCI7XG4gICAgICAgICAgJCRbJDAgLSAzXS5kZXNjcmlwdGlvbiA9IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICQkWyQwIC0gMV0udHlwZSA9IFwiYWRkQWN0b3JcIjtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkTm90ZVwiLCBwbGFjZW1lbnQ6ICQkWyQwIC0gMl0sIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgJCRbJDAgLSAyXSA9IFtdLmNvbmNhdCgkJFskMCAtIDFdLCAkJFskMCAtIDFdKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICAkJFskMCAtIDJdWzBdID0gJCRbJDAgLSAyXVswXS5hY3RvcjtcbiAgICAgICAgICAkJFskMCAtIDJdWzFdID0gJCRbJDAgLSAyXVsxXS5hY3RvcjtcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZE5vdGVcIiwgcGxhY2VtZW50OiB5eS5QTEFDRU1FTlQuT1ZFUiwgYWN0b3I6ICQkWyQwIC0gMl0uc2xpY2UoMCwgMiksIHRleHQ6ICQkWyQwXSB9XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZExpbmtzXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGRBTGlua1wiLCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciwgdGV4dDogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkUHJvcGVydGllc1wiLCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciwgdGV4dDogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkRGV0YWlsc1wiLCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciwgdGV4dDogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDJdLCAkJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5QTEFDRU1FTlQuTEVGVE9GO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlBMQUNFTUVOVC5SSUdIVE9GO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIHRoaXMuJCA9IFtcbiAgICAgICAgICAgICQkWyQwIC0gNF0sXG4gICAgICAgICAgICAkJFskMCAtIDFdLFxuICAgICAgICAgICAgeyB0eXBlOiBcImFkZE1lc3NhZ2VcIiwgZnJvbTogJCRbJDAgLSA0XS5hY3RvciwgdG86ICQkWyQwIC0gMV0uYWN0b3IsIHNpZ25hbFR5cGU6ICQkWyQwIC0gM10sIG1zZzogJCRbJDBdIH0sXG4gICAgICAgICAgICB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXSB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2ODpcbiAgICAgICAgICB0aGlzLiQgPSBbXG4gICAgICAgICAgICAkJFskMCAtIDRdLFxuICAgICAgICAgICAgJCRbJDAgLSAxXSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJhZGRNZXNzYWdlXCIsIGZyb206ICQkWyQwIC0gNF0uYWN0b3IsIHRvOiAkJFskMCAtIDFdLmFjdG9yLCBzaWduYWxUeXBlOiAkJFskMCAtIDNdLCBtc2c6ICQkWyQwXSB9LFxuICAgICAgICAgICAgeyB0eXBlOiBcImFjdGl2ZUVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5BQ1RJVkVfRU5ELCBhY3RvcjogJCRbJDAgLSA0XSB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZE1lc3NhZ2VcIiwgZnJvbTogJCRbJDAgLSAzXS5hY3RvciwgdG86ICQkWyQwIC0gMV0uYWN0b3IsIHNpZ25hbFR5cGU6ICQkWyQwIC0gMl0sIG1zZzogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhZGRQYXJ0aWNpcGFudFwiLCBhY3RvcjogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5TT0xJRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfQ1JPU1M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuRE9UVEVEX0NST1NTO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkxJTkVUWVBFLlNPTElEX1BPSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5wYXJzZU1lc3NhZ2UoJCRbJDBdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwiJSV7XCIsIFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcInR5cGVfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICQkWyQwXSA9ICQkWyQwXS50cmltKCkucmVwbGFjZSgvJy9nLCAnXCInKTtcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIn0lJVwiLCBcImNsb3NlX2RpcmVjdGl2ZVwiLCBcInNlcXVlbmNlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6ICRWMCwgNTogJFYxLCA2OiA0LCA3OiAkVjIsIDE0OiA2LCA4NDogJFYzIH0sIHsgMTogWzNdIH0sIHsgMzogOCwgNDogJFYwLCA1OiAkVjEsIDY6IDQsIDc6ICRWMiwgMTQ6IDYsIDg0OiAkVjMgfSwgeyAzOiA5LCA0OiAkVjAsIDU6ICRWMSwgNjogNCwgNzogJFYyLCAxNDogNiwgODQ6ICRWMyB9LCB7IDM6IDEwLCA0OiAkVjAsIDU6ICRWMSwgNjogNCwgNzogJFYyLCAxNDogNiwgODQ6ICRWMyB9LCBvKFsxLCA0LCA1LCAxOSwgMjMsIDI2LCAyOCwgMzQsIDM1LCAzNiwgMzgsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDYsIDQ4LCA0OSwgNTEsIDU1LCA1NywgNTgsIDYzLCA2NCwgNjUsIDY2LCA3NCwgODRdLCAkVjQsIHsgODogMTEgfSksIHsgMTU6IDEyLCA4NTogWzEsIDEzXSB9LCB7IDg1OiBbMiwgODBdIH0sIHsgMTogWzIsIDFdIH0sIHsgMTogWzIsIDJdIH0sIHsgMTogWzIsIDNdIH0sIHsgMTogWzIsIDRdLCA0OiAkVjUsIDU6ICRWNiwgNjogNDIsIDk6IDE0LCAxMDogMTYsIDEzOiAxOCwgMTQ6IDYsIDE5OiAkVjcsIDIyOiAyMCwgMjM6ICRWOCwgMjY6ICRWOSwgMjc6IDQ1LCAyODogJFZhLCAyOTogMjQsIDMwOiAyNSwgMzE6IDI2LCAzMjogMjcsIDMzOiAyOCwgMzQ6ICRWYiwgMzU6ICRWYywgMzY6ICRWZCwgMzg6ICRWZSwgNDA6ICRWZiwgNDE6ICRWZywgNDI6ICRWaCwgNDM6ICRWaSwgNDQ6ICRWaiwgNDY6ICRWaywgNDg6ICRWbCwgNDk6ICRWbSwgNTE6ICRWbiwgNTU6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNjM6ICRWciwgNjQ6ICRWcywgNjU6ICRWdCwgNjY6ICRWdSwgNzQ6ICRWdiwgODQ6ICRWMyB9LCB7IDE2OiA1MiwgMTc6IFsxLCA1M10sIDg3OiAkVncgfSwgbyhbMTcsIDg3XSwgWzIsIDgxXSksIG8oJFZ4LCBbMiwgNl0pLCB7IDY6IDQyLCAxMDogNTUsIDEzOiAxOCwgMTQ6IDYsIDE5OiAkVjcsIDIyOiAyMCwgMjM6ICRWOCwgMjY6ICRWOSwgMjc6IDQ1LCAyODogJFZhLCAyOTogMjQsIDMwOiAyNSwgMzE6IDI2LCAzMjogMjcsIDMzOiAyOCwgMzQ6ICRWYiwgMzU6ICRWYywgMzY6ICRWZCwgMzg6ICRWZSwgNDA6ICRWZiwgNDE6ICRWZywgNDI6ICRWaCwgNDM6ICRWaSwgNDQ6ICRWaiwgNDY6ICRWaywgNDg6ICRWbCwgNDk6ICRWbSwgNTE6ICRWbiwgNTU6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNjM6ICRWciwgNjQ6ICRWcywgNjU6ICRWdCwgNjY6ICRWdSwgNzQ6ICRWdiwgODQ6ICRWMyB9LCBvKCRWeCwgWzIsIDhdKSwgbygkVngsIFsyLCA5XSksIG8oJFZ4LCBbMiwgMTddKSwgeyAyMDogWzEsIDU2XSB9LCB7IDU6IFsxLCA1N10gfSwgeyA1OiBbMSwgNjBdLCAyNDogWzEsIDU4XSwgMjU6IFsxLCA1OV0gfSwgeyAyNzogNjEsIDc0OiAkVnYgfSwgeyAyNzogNjIsIDc0OiAkVnYgfSwgeyA1OiBbMSwgNjNdIH0sIHsgNTogWzEsIDY0XSB9LCB7IDU6IFsxLCA2NV0gfSwgeyA1OiBbMSwgNjZdIH0sIHsgNTogWzEsIDY3XSB9LCBvKCRWeCwgWzIsIDMxXSksIG8oJFZ4LCBbMiwgMzJdKSwgeyAzNzogWzEsIDY4XSB9LCB7IDM5OiBbMSwgNjldIH0sIG8oJFZ4LCBbMiwgMzVdKSwgeyAyMDogWzEsIDcwXSB9LCB7IDIwOiBbMSwgNzFdIH0sIHsgMjA6IFsxLCA3Ml0gfSwgeyAyMDogWzEsIDczXSB9LCB7IDIwOiBbMSwgNzRdIH0sIHsgMjA6IFsxLCA3NV0gfSwgeyAyMDogWzEsIDc2XSB9LCB7IDIwOiBbMSwgNzddIH0sIG8oJFZ4LCBbMiwgNDRdKSwgeyAyNzogNzgsIDc0OiAkVnYgfSwgeyAyNzogNzksIDc0OiAkVnYgfSwgeyA3MTogODAsIDc1OiBbMSwgODFdLCA3NjogWzEsIDgyXSwgNzc6IFsxLCA4M10sIDc4OiBbMSwgODRdLCA3OTogWzEsIDg1XSwgODA6IFsxLCA4Nl0sIDgxOiBbMSwgODddLCA4MjogWzEsIDg4XSB9LCB7IDU5OiA4OSwgNjE6IFsxLCA5MF0sIDY5OiBbMSwgOTFdLCA3MDogWzEsIDkyXSB9LCB7IDI3OiA5MywgNzQ6ICRWdiB9LCB7IDI3OiA5NCwgNzQ6ICRWdiB9LCB7IDI3OiA5NSwgNzQ6ICRWdiB9LCB7IDI3OiA5NiwgNzQ6ICRWdiB9LCBvKFs1LCA1NiwgNjgsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODNdLCBbMiwgNzBdKSwgeyA1OiBbMSwgOTddIH0sIHsgMTg6IDk4LCA4NjogWzEsIDk5XSB9LCB7IDU6IFsyLCA4M10gfSwgbygkVngsIFsyLCA3XSksIG8oJFZ5LCBbMiwgMTBdLCB7IDExOiAxMDAgfSksIG8oJFZ4LCBbMiwgMTldKSwgeyA1OiBbMSwgMTAyXSwgMjQ6IFsxLCAxMDFdIH0sIHsgNTogWzEsIDEwM10gfSwgbygkVngsIFsyLCAyM10pLCB7IDU6IFsxLCAxMDRdIH0sIHsgNTogWzEsIDEwNV0gfSwgbygkVngsIFsyLCAyNl0pLCBvKCRWeCwgWzIsIDI3XSksIG8oJFZ4LCBbMiwgMjhdKSwgbygkVngsIFsyLCAyOV0pLCBvKCRWeCwgWzIsIDMwXSksIG8oJFZ4LCBbMiwgMzNdKSwgbygkVngsIFsyLCAzNF0pLCBvKCRWeiwgJFY0LCB7IDg6IDEwNiB9KSwgbygkVnosICRWNCwgeyA4OiAxMDcgfSksIG8oJFZ6LCAkVjQsIHsgODogMTA4IH0pLCBvKCRWQSwgJFY0LCB7IDQ1OiAxMDksIDg6IDExMCB9KSwgbygkVkIsICRWNCwgeyA0NzogMTExLCA4OiAxMTIgfSksIG8oJFZCLCAkVjQsIHsgODogMTEyLCA0NzogMTEzIH0pLCBvKCRWQywgJFY0LCB7IDUwOiAxMTQsIDg6IDExNSB9KSwgbygkVnosICRWNCwgeyA4OiAxMTYgfSksIHsgNTogWzEsIDExOF0sIDU2OiBbMSwgMTE3XSB9LCB7IDU6IFsxLCAxMjBdLCA1NjogWzEsIDExOV0gfSwgeyAyNzogMTIzLCA3MjogWzEsIDEyMV0sIDczOiBbMSwgMTIyXSwgNzQ6ICRWdiB9LCBvKCRWRCwgWzIsIDcxXSksIG8oJFZELCBbMiwgNzJdKSwgbygkVkQsIFsyLCA3M10pLCBvKCRWRCwgWzIsIDc0XSksIG8oJFZELCBbMiwgNzVdKSwgbygkVkQsIFsyLCA3Nl0pLCBvKCRWRCwgWzIsIDc3XSksIG8oJFZELCBbMiwgNzhdKSwgeyAyNzogMTI0LCA3NDogJFZ2IH0sIHsgMjc6IDEyNiwgNjI6IDEyNSwgNzQ6ICRWdiB9LCB7IDc0OiBbMiwgNjVdIH0sIHsgNzQ6IFsyLCA2Nl0gfSwgeyA2MDogMTI3LCA4MzogJFZFIH0sIHsgNjA6IDEyOSwgODM6ICRWRSB9LCB7IDYwOiAxMzAsIDgzOiAkVkUgfSwgeyA2MDogMTMxLCA4MzogJFZFIH0sIG8oJFZGLCBbMiwgMTVdKSwgeyAxNjogMTMyLCA4NzogJFZ3IH0sIHsgODc6IFsyLCA4Ml0gfSwgeyA0OiBbMSwgMTM1XSwgNTogWzEsIDEzN10sIDEyOiAxMzQsIDEzOiAxMzYsIDIxOiBbMSwgMTMzXSwgNTU6ICRWbywgNTc6ICRWcCB9LCB7IDU6IFsxLCAxMzhdIH0sIG8oJFZ4LCBbMiwgMjFdKSwgbygkVngsIFsyLCAyMl0pLCBvKCRWeCwgWzIsIDI0XSksIG8oJFZ4LCBbMiwgMjVdKSwgeyA0OiAkVjUsIDU6ICRWNiwgNjogNDIsIDk6IDE0LCAxMDogMTYsIDEzOiAxOCwgMTQ6IDYsIDE5OiAkVjcsIDIxOiBbMSwgMTM5XSwgMjI6IDIwLCAyMzogJFY4LCAyNjogJFY5LCAyNzogNDUsIDI4OiAkVmEsIDI5OiAyNCwgMzA6IDI1LCAzMTogMjYsIDMyOiAyNywgMzM6IDI4LCAzNDogJFZiLCAzNTogJFZjLCAzNjogJFZkLCAzODogJFZlLCA0MDogJFZmLCA0MTogJFZnLCA0MjogJFZoLCA0MzogJFZpLCA0NDogJFZqLCA0NjogJFZrLCA0ODogJFZsLCA0OTogJFZtLCA1MTogJFZuLCA1NTogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA2MzogJFZyLCA2NDogJFZzLCA2NTogJFZ0LCA2NjogJFZ1LCA3NDogJFZ2LCA4NDogJFYzIH0sIHsgNDogJFY1LCA1OiAkVjYsIDY6IDQyLCA5OiAxNCwgMTA6IDE2LCAxMzogMTgsIDE0OiA2LCAxOTogJFY3LCAyMTogWzEsIDE0MF0sIDIyOiAyMCwgMjM6ICRWOCwgMjY6ICRWOSwgMjc6IDQ1LCAyODogJFZhLCAyOTogMjQsIDMwOiAyNSwgMzE6IDI2LCAzMjogMjcsIDMzOiAyOCwgMzQ6ICRWYiwgMzU6ICRWYywgMzY6ICRWZCwgMzg6ICRWZSwgNDA6ICRWZiwgNDE6ICRWZywgNDI6ICRWaCwgNDM6ICRWaSwgNDQ6ICRWaiwgNDY6ICRWaywgNDg6ICRWbCwgNDk6ICRWbSwgNTE6ICRWbiwgNTU6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNjM6ICRWciwgNjQ6ICRWcywgNjU6ICRWdCwgNjY6ICRWdSwgNzQ6ICRWdiwgODQ6ICRWMyB9LCB7IDQ6ICRWNSwgNTogJFY2LCA2OiA0MiwgOTogMTQsIDEwOiAxNiwgMTM6IDE4LCAxNDogNiwgMTk6ICRWNywgMjE6IFsxLCAxNDFdLCAyMjogMjAsIDIzOiAkVjgsIDI2OiAkVjksIDI3OiA0NSwgMjg6ICRWYSwgMjk6IDI0LCAzMDogMjUsIDMxOiAyNiwgMzI6IDI3LCAzMzogMjgsIDM0OiAkVmIsIDM1OiAkVmMsIDM2OiAkVmQsIDM4OiAkVmUsIDQwOiAkVmYsIDQxOiAkVmcsIDQyOiAkVmgsIDQzOiAkVmksIDQ0OiAkVmosIDQ2OiAkVmssIDQ4OiAkVmwsIDQ5OiAkVm0sIDUxOiAkVm4sIDU1OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDYzOiAkVnIsIDY0OiAkVnMsIDY1OiAkVnQsIDY2OiAkVnUsIDc0OiAkVnYsIDg0OiAkVjMgfSwgeyAyMTogWzEsIDE0Ml0gfSwgeyA0OiAkVjUsIDU6ICRWNiwgNjogNDIsIDk6IDE0LCAxMDogMTYsIDEzOiAxOCwgMTQ6IDYsIDE5OiAkVjcsIDIxOiBbMiwgNDldLCAyMjogMjAsIDIzOiAkVjgsIDI2OiAkVjksIDI3OiA0NSwgMjg6ICRWYSwgMjk6IDI0LCAzMDogMjUsIDMxOiAyNiwgMzI6IDI3LCAzMzogMjgsIDM0OiAkVmIsIDM1OiAkVmMsIDM2OiAkVmQsIDM4OiAkVmUsIDQwOiAkVmYsIDQxOiAkVmcsIDQyOiAkVmgsIDQzOiAkVmksIDQ0OiAkVmosIDQ2OiAkVmssIDQ4OiAkVmwsIDQ5OiAkVm0sIDUxOiAkVm4sIDU0OiBbMSwgMTQzXSwgNTU6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNjM6ICRWciwgNjQ6ICRWcywgNjU6ICRWdCwgNjY6ICRWdSwgNzQ6ICRWdiwgODQ6ICRWMyB9LCB7IDIxOiBbMSwgMTQ0XSB9LCB7IDQ6ICRWNSwgNTogJFY2LCA2OiA0MiwgOTogMTQsIDEwOiAxNiwgMTM6IDE4LCAxNDogNiwgMTk6ICRWNywgMjE6IFsyLCA0N10sIDIyOiAyMCwgMjM6ICRWOCwgMjY6ICRWOSwgMjc6IDQ1LCAyODogJFZhLCAyOTogMjQsIDMwOiAyNSwgMzE6IDI2LCAzMjogMjcsIDMzOiAyOCwgMzQ6ICRWYiwgMzU6ICRWYywgMzY6ICRWZCwgMzg6ICRWZSwgNDA6ICRWZiwgNDE6ICRWZywgNDI6ICRWaCwgNDM6ICRWaSwgNDQ6ICRWaiwgNDY6ICRWaywgNDg6ICRWbCwgNDk6ICRWbSwgNTE6ICRWbiwgNTM6IFsxLCAxNDVdLCA1NTogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA2MzogJFZyLCA2NDogJFZzLCA2NTogJFZ0LCA2NjogJFZ1LCA3NDogJFZ2LCA4NDogJFYzIH0sIHsgMjE6IFsxLCAxNDZdIH0sIHsgMjE6IFsxLCAxNDddIH0sIHsgNDogJFY1LCA1OiAkVjYsIDY6IDQyLCA5OiAxNCwgMTA6IDE2LCAxMzogMTgsIDE0OiA2LCAxOTogJFY3LCAyMTogWzIsIDQ1XSwgMjI6IDIwLCAyMzogJFY4LCAyNjogJFY5LCAyNzogNDUsIDI4OiAkVmEsIDI5OiAyNCwgMzA6IDI1LCAzMTogMjYsIDMyOiAyNywgMzM6IDI4LCAzNDogJFZiLCAzNTogJFZjLCAzNjogJFZkLCAzODogJFZlLCA0MDogJFZmLCA0MTogJFZnLCA0MjogJFZoLCA0MzogJFZpLCA0NDogJFZqLCA0NjogJFZrLCA0ODogJFZsLCA0OTogJFZtLCA1MTogJFZuLCA1MjogWzEsIDE0OF0sIDU1OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDYzOiAkVnIsIDY0OiAkVnMsIDY1OiAkVnQsIDY2OiAkVnUsIDc0OiAkVnYsIDg0OiAkVjMgfSwgeyA0OiAkVjUsIDU6ICRWNiwgNjogNDIsIDk6IDE0LCAxMDogMTYsIDEzOiAxOCwgMTQ6IDYsIDE5OiAkVjcsIDIxOiBbMSwgMTQ5XSwgMjI6IDIwLCAyMzogJFY4LCAyNjogJFY5LCAyNzogNDUsIDI4OiAkVmEsIDI5OiAyNCwgMzA6IDI1LCAzMTogMjYsIDMyOiAyNywgMzM6IDI4LCAzNDogJFZiLCAzNTogJFZjLCAzNjogJFZkLCAzODogJFZlLCA0MDogJFZmLCA0MTogJFZnLCA0MjogJFZoLCA0MzogJFZpLCA0NDogJFZqLCA0NjogJFZrLCA0ODogJFZsLCA0OTogJFZtLCA1MTogJFZuLCA1NTogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA2MzogJFZyLCA2NDogJFZzLCA2NTogJFZ0LCA2NjogJFZ1LCA3NDogJFZ2LCA4NDogJFYzIH0sIHsgMjA6IFsxLCAxNTBdIH0sIG8oJFZ4LCBbMiwgNTJdKSwgeyAyMDogWzEsIDE1MV0gfSwgbygkVngsIFsyLCA1NF0pLCB7IDI3OiAxNTIsIDc0OiAkVnYgfSwgeyAyNzogMTUzLCA3NDogJFZ2IH0sIHsgNjA6IDE1NCwgODM6ICRWRSB9LCB7IDYwOiAxNTUsIDgzOiAkVkUgfSwgeyA2MDogMTU2LCA4MzogJFZFIH0sIHsgNjg6IFsxLCAxNTddLCA4MzogWzIsIDY0XSB9LCB7IDU6IFsyLCA1N10gfSwgeyA1OiBbMiwgNzldIH0sIHsgNTogWzIsIDU4XSB9LCB7IDU6IFsyLCA1OV0gfSwgeyA1OiBbMiwgNjBdIH0sIHsgNTogWzEsIDE1OF0gfSwgbygkVngsIFsyLCAxOF0pLCBvKCRWeSwgWzIsIDExXSksIHsgMTM6IDE1OSwgNTU6ICRWbywgNTc6ICRWcCB9LCBvKCRWeSwgWzIsIDEzXSksIG8oJFZ5LCBbMiwgMTRdKSwgbygkVngsIFsyLCAyMF0pLCBvKCRWeCwgWzIsIDM2XSksIG8oJFZ4LCBbMiwgMzddKSwgbygkVngsIFsyLCAzOF0pLCBvKCRWeCwgWzIsIDM5XSksIHsgMjA6IFsxLCAxNjBdIH0sIG8oJFZ4LCBbMiwgNDBdKSwgeyAyMDogWzEsIDE2MV0gfSwgbygkVngsIFsyLCA0MV0pLCBvKCRWeCwgWzIsIDQyXSksIHsgMjA6IFsxLCAxNjJdIH0sIG8oJFZ4LCBbMiwgNDNdKSwgeyA1OiBbMSwgMTYzXSB9LCB7IDU6IFsxLCAxNjRdIH0sIHsgNjA6IDE2NSwgODM6ICRWRSB9LCB7IDYwOiAxNjYsIDgzOiAkVkUgfSwgeyA1OiBbMiwgNjldIH0sIHsgNTogWzIsIDU1XSB9LCB7IDU6IFsyLCA1Nl0gfSwgeyAyNzogMTY3LCA3NDogJFZ2IH0sIG8oJFZGLCBbMiwgMTZdKSwgbygkVnksIFsyLCAxMl0pLCBvKCRWQSwgJFY0LCB7IDg6IDExMCwgNDU6IDE2OCB9KSwgbygkVkIsICRWNCwgeyA4OiAxMTIsIDQ3OiAxNjkgfSksIG8oJFZDLCAkVjQsIHsgODogMTE1LCA1MDogMTcwIH0pLCBvKCRWeCwgWzIsIDUxXSksIG8oJFZ4LCBbMiwgNTNdKSwgeyA1OiBbMiwgNjddIH0sIHsgNTogWzIsIDY4XSB9LCB7IDgzOiBbMiwgNjNdIH0sIHsgMjE6IFsyLCA1MF0gfSwgeyAyMTogWzIsIDQ4XSB9LCB7IDIxOiBbMiwgNDZdIH1dLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDc6IFsyLCA4MF0sIDg6IFsyLCAxXSwgOTogWzIsIDJdLCAxMDogWzIsIDNdLCA1NDogWzIsIDgzXSwgOTE6IFsyLCA2NV0sIDkyOiBbMiwgNjZdLCA5OTogWzIsIDgyXSwgMTI3OiBbMiwgNTddLCAxMjg6IFsyLCA3OV0sIDEyOTogWzIsIDU4XSwgMTMwOiBbMiwgNTldLCAxMzE6IFsyLCA2MF0sIDE1NDogWzIsIDY5XSwgMTU1OiBbMiwgNTVdLCAxNTY6IFsyLCA1Nl0sIDE2NTogWzIsIDY3XSwgMTY2OiBbMiwgNjhdLCAxNjc6IFsyLCA2M10sIDE2ODogWzIsIDUwXSwgMTY5OiBbMiwgNDhdLCAxNzA6IFsyLCA0Nl0gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA4NDtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gODU7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTc7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDg3O1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiA4NjtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIkxJTkVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NTtcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU3O1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC50cmltKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiQUxJQVNcIik7XG4gICAgICAgICAgICByZXR1cm4gNzQ7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIkxJTkVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIkxJTkVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIkxJTkVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIkxJTkVcIik7XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNzA7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiA2NjtcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDYxO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICByZXR1cm4gMjU7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiA3NDtcbiAgICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgICAgcmV0dXJuIDc3O1xuICAgICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgICByZXR1cm4gNzg7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgcmV0dXJuIDc2O1xuICAgICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgICByZXR1cm4gNzk7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiA4MDtcbiAgICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgICByZXR1cm4gODI7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHJldHVybiA4MztcbiAgICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgICAgcmV0dXJuIDcyO1xuICAgICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICByZXR1cm4gXCJJTlZBTElEXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBydWxlczogWy9eKD86JSVcXHspL2ksIC9eKD86KCg/Oig/IVxcfSUlKVteOi5dKSopKS9pLCAvXig/OjopL2ksIC9eKD86XFx9JSUpL2ksIC9eKD86KCg/Oig/IVxcfSUlKS58XFxuKSopKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OigoPyFcXG4pXFxzKSspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbMC05XSsoPz1bIFxcbl0rKSkvaSwgL14oPzpib3hcXGIpL2ksIC9eKD86cGFydGljaXBhbnRcXGIpL2ksIC9eKD86YWN0b3JcXGIpL2ksIC9eKD86W15cXC0+Olxcbiw7XSs/KFtcXC1dKlteXFwtPjpcXG4sO10rPykqPyg/PSgoPyFcXG4pXFxzKSthcyg/IVxcbilcXHN8WyNcXG47XXwkKSkvaSwgL14oPzphc1xcYikvaSwgL14oPzooPzopKS9pLCAvXig/Omxvb3BcXGIpL2ksIC9eKD86cmVjdFxcYikvaSwgL14oPzpvcHRcXGIpL2ksIC9eKD86YWx0XFxiKS9pLCAvXig/OmVsc2VcXGIpL2ksIC9eKD86cGFyXFxiKS9pLCAvXig/OnBhcl9vdmVyXFxiKS9pLCAvXig/OmFuZFxcYikvaSwgL14oPzpjcml0aWNhbFxcYikvaSwgL14oPzpvcHRpb25cXGIpL2ksIC9eKD86YnJlYWtcXGIpL2ksIC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcXG47XSopL2ksIC9eKD86ZW5kXFxiKS9pLCAvXig/OmxlZnQgb2ZcXGIpL2ksIC9eKD86cmlnaHQgb2ZcXGIpL2ksIC9eKD86bGlua3NcXGIpL2ksIC9eKD86bGlua1xcYikvaSwgL14oPzpwcm9wZXJ0aWVzXFxiKS9pLCAvXig/OmRldGFpbHNcXGIpL2ksIC9eKD86b3ZlclxcYikvaSwgL14oPzpub3RlXFxiKS9pLCAvXig/OmFjdGl2YXRlXFxiKS9pLCAvXig/OmRlYWN0aXZhdGVcXGIpL2ksIC9eKD86dGl0bGVcXHNbXiNcXG47XSspL2ksIC9eKD86dGl0bGU6XFxzW14jXFxuO10rKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzpzZXF1ZW5jZURpYWdyYW1cXGIpL2ksIC9eKD86YXV0b251bWJlclxcYikvaSwgL14oPzpvZmZcXGIpL2ksIC9eKD86LCkvaSwgL14oPzo7KS9pLCAvXig/OlteXFwrXFwtPjpcXG4sO10rKCg/ISgteHwtLXh8LVxcKXwtLVxcKSkpW1xcLV0qW15cXCtcXC0+Olxcbiw7XSspKikvaSwgL14oPzotPj4pL2ksIC9eKD86LS0+PikvaSwgL14oPzotPikvaSwgL14oPzotLT4pL2ksIC9eKD86LVt4XSkvaSwgL14oPzotLVt4XSkvaSwgL14oPzotW1xcKV0pL2ksIC9eKD86LS1bXFwpXSkvaSwgL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xcbjtdKykvaSwgL14oPzpcXCspL2ksIC9eKD86LSkvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs0OCwgNDldLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzQ2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs0NF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwib3Blbl9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsxLCA4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzIsIDMsIDhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFyZ19kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFszLCA0LCA4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJRFwiOiB7IFwicnVsZXNcIjogWzcsIDgsIDE1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJBTElBU1wiOiB7IFwicnVsZXNcIjogWzcsIDgsIDE2LCAxN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTElORVwiOiB7IFwicnVsZXNcIjogWzcsIDgsIDI5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgNSwgNiwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDUsIDQ3LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBQYXJzZXIucHJvdG90eXBlID0gcGFyc2VyMjtcbiAgcGFyc2VyMi5QYXJzZXIgPSBQYXJzZXI7XG4gIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KCk7XG5wYXJzZXIucGFyc2VyID0gcGFyc2VyO1xuY29uc3QgcGFyc2VyJDEgPSBwYXJzZXI7XG5sZXQgcHJldkFjdG9yID0gdm9pZCAwO1xubGV0IGFjdG9ycyA9IHt9O1xubGV0IGJveGVzID0gW107XG5sZXQgbWVzc2FnZXMgPSBbXTtcbmxldCBzZXF1ZW5jZU51bWJlcnNFbmFibGVkID0gZmFsc2U7XG5sZXQgd3JhcEVuYWJsZWQ7XG5sZXQgY3VycmVudEJveCA9IHZvaWQgMDtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBhZGRCb3ggPSBmdW5jdGlvbihkYXRhKSB7XG4gIGJveGVzLnB1c2goe1xuICAgIG5hbWU6IGRhdGEudGV4dCxcbiAgICB3cmFwOiBkYXRhLndyYXAgPT09IHZvaWQgMCAmJiBhdXRvV3JhcCgpIHx8ICEhZGF0YS53cmFwLFxuICAgIGZpbGw6IGRhdGEuY29sb3IsXG4gICAgYWN0b3JLZXlzOiBbXVxuICB9KTtcbiAgY3VycmVudEJveCA9IGJveGVzLnNsaWNlKC0xKVswXTtcbn07XG5jb25zdCBhZGRBY3RvciA9IGZ1bmN0aW9uKGlkLCBuYW1lLCBkZXNjcmlwdGlvbiwgdHlwZSkge1xuICBsZXQgYXNzaWduZWRCb3ggPSBjdXJyZW50Qm94O1xuICBjb25zdCBvbGQgPSBhY3RvcnNbaWRdO1xuICBpZiAob2xkKSB7XG4gICAgaWYgKGN1cnJlbnRCb3ggJiYgb2xkLmJveCAmJiBjdXJyZW50Qm94ICE9PSBvbGQuYm94KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogXCIgKyBvbGQubmFtZSArIFwiIGNhbid0IGJlIGluICdcIiArIG9sZC5ib3gubmFtZSArIFwiJyBhbmQgaW4gJ1wiICsgY3VycmVudEJveC5uYW1lICsgXCInIGF0IHRoZSBzYW1lIHRpbWUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGFzc2lnbmVkQm94ID0gb2xkLmJveCA/IG9sZC5ib3ggOiBjdXJyZW50Qm94O1xuICAgIG9sZC5ib3ggPSBhc3NpZ25lZEJveDtcbiAgICBpZiAob2xkICYmIG5hbWUgPT09IG9sZC5uYW1lICYmIGRlc2NyaXB0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyaXB0aW9uID09IG51bGwgfHwgZGVzY3JpcHRpb24udGV4dCA9PSBudWxsKSB7XG4gICAgZGVzY3JpcHRpb24gPSB7IHRleHQ6IG5hbWUsIHdyYXA6IG51bGwsIHR5cGUgfTtcbiAgfVxuICBpZiAodHlwZSA9PSBudWxsIHx8IGRlc2NyaXB0aW9uLnRleHQgPT0gbnVsbCkge1xuICAgIGRlc2NyaXB0aW9uID0geyB0ZXh0OiBuYW1lLCB3cmFwOiBudWxsLCB0eXBlIH07XG4gIH1cbiAgYWN0b3JzW2lkXSA9IHtcbiAgICBib3g6IGFzc2lnbmVkQm94LFxuICAgIG5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnRleHQsXG4gICAgd3JhcDogZGVzY3JpcHRpb24ud3JhcCA9PT0gdm9pZCAwICYmIGF1dG9XcmFwKCkgfHwgISFkZXNjcmlwdGlvbi53cmFwLFxuICAgIHByZXZBY3RvcixcbiAgICBsaW5rczoge30sXG4gICAgcHJvcGVydGllczoge30sXG4gICAgYWN0b3JDbnQ6IG51bGwsXG4gICAgcmVjdERhdGE6IG51bGwsXG4gICAgdHlwZTogdHlwZSB8fCBcInBhcnRpY2lwYW50XCJcbiAgfTtcbiAgaWYgKHByZXZBY3RvciAmJiBhY3RvcnNbcHJldkFjdG9yXSkge1xuICAgIGFjdG9yc1twcmV2QWN0b3JdLm5leHRBY3RvciA9IGlkO1xuICB9XG4gIGlmIChjdXJyZW50Qm94KSB7XG4gICAgY3VycmVudEJveC5hY3RvcktleXMucHVzaChpZCk7XG4gIH1cbiAgcHJldkFjdG9yID0gaWQ7XG59O1xuY29uc3QgYWN0aXZhdGlvbkNvdW50ID0gKHBhcnQpID0+IHtcbiAgbGV0IGk7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtZXNzYWdlc1tpXS50eXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfU1RBUlQgJiYgbWVzc2FnZXNbaV0uZnJvbS5hY3RvciA9PT0gcGFydCkge1xuICAgICAgY291bnQrKztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VzW2ldLnR5cGUgPT09IExJTkVUWVBFLkFDVElWRV9FTkQgJiYgbWVzc2FnZXNbaV0uZnJvbS5hY3RvciA9PT0gcGFydCkge1xuICAgICAgY291bnQtLTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufTtcbmNvbnN0IGFkZE1lc3NhZ2UgPSBmdW5jdGlvbihpZEZyb20sIGlkVG8sIG1lc3NhZ2UsIGFuc3dlcikge1xuICBtZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZS50ZXh0LFxuICAgIHdyYXA6IG1lc3NhZ2Uud3JhcCA9PT0gdm9pZCAwICYmIGF1dG9XcmFwKCkgfHwgISFtZXNzYWdlLndyYXAsXG4gICAgYW5zd2VyXG4gIH0pO1xufTtcbmNvbnN0IGFkZFNpZ25hbCA9IGZ1bmN0aW9uKGlkRnJvbSwgaWRUbywgbWVzc2FnZSA9IHsgdGV4dDogdm9pZCAwLCB3cmFwOiB2b2lkIDAgfSwgbWVzc2FnZVR5cGUpIHtcbiAgaWYgKG1lc3NhZ2VUeXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfRU5EKSB7XG4gICAgY29uc3QgY250ID0gYWN0aXZhdGlvbkNvdW50KGlkRnJvbS5hY3Rvcik7XG4gICAgaWYgKGNudCA8IDEpIHtcbiAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50IChcIiArIGlkRnJvbS5hY3RvciArIFwiKVwiKTtcbiAgICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICAgIHRleHQ6IFwiLT4+LVwiLFxuICAgICAgICB0b2tlbjogXCItPj4tXCIsXG4gICAgICAgIGxpbmU6IFwiMVwiLFxuICAgICAgICBsb2M6IHsgZmlyc3RfbGluZTogMSwgbGFzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDEsIGxhc3RfY29sdW1uOiAxIH0sXG4gICAgICAgIGV4cGVjdGVkOiBbXCInQUNUSVZFX1BBUlRJQ0lQQU5UJ1wiXVxuICAgICAgfTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBtZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZS50ZXh0LFxuICAgIHdyYXA6IG1lc3NhZ2Uud3JhcCA9PT0gdm9pZCAwICYmIGF1dG9XcmFwKCkgfHwgISFtZXNzYWdlLndyYXAsXG4gICAgdHlwZTogbWVzc2FnZVR5cGVcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufTtcbmNvbnN0IGhhc0F0TGVhc3RPbmVCb3ggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJveGVzLmxlbmd0aCA+IDA7XG59O1xuY29uc3QgaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYm94ZXMuc29tZSgoYikgPT4gYi5uYW1lKTtcbn07XG5jb25zdCBnZXRNZXNzYWdlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbWVzc2FnZXM7XG59O1xuY29uc3QgZ2V0Qm94ZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJveGVzO1xufTtcbmNvbnN0IGdldEFjdG9ycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYWN0b3JzO1xufTtcbmNvbnN0IGdldEFjdG9yID0gZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIGFjdG9yc1tpZF07XG59O1xuY29uc3QgZ2V0QWN0b3JLZXlzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhY3RvcnMpO1xufTtcbmNvbnN0IGVuYWJsZVNlcXVlbmNlTnVtYmVycyA9IGZ1bmN0aW9uKCkge1xuICBzZXF1ZW5jZU51bWJlcnNFbmFibGVkID0gdHJ1ZTtcbn07XG5jb25zdCBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzID0gZnVuY3Rpb24oKSB7XG4gIHNlcXVlbmNlTnVtYmVyc0VuYWJsZWQgPSBmYWxzZTtcbn07XG5jb25zdCBzaG93U2VxdWVuY2VOdW1iZXJzID0gKCkgPT4gc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDtcbmNvbnN0IHNldFdyYXAgPSBmdW5jdGlvbih3cmFwU2V0dGluZykge1xuICB3cmFwRW5hYmxlZCA9IHdyYXBTZXR0aW5nO1xufTtcbmNvbnN0IGF1dG9XcmFwID0gKCkgPT4ge1xuICBpZiAod3JhcEVuYWJsZWQgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiB3cmFwRW5hYmxlZDtcbiAgfVxuICByZXR1cm4gZ2V0Q29uZmlnKCkuc2VxdWVuY2Uud3JhcDtcbn07XG5jb25zdCBjbGVhciA9IGZ1bmN0aW9uKCkge1xuICBhY3RvcnMgPSB7fTtcbiAgYm94ZXMgPSBbXTtcbiAgbWVzc2FnZXMgPSBbXTtcbiAgc2VxdWVuY2VOdW1iZXJzRW5hYmxlZCA9IGZhbHNlO1xuICBjbGVhciQxKCk7XG59O1xuY29uc3QgcGFyc2VNZXNzYWdlID0gZnVuY3Rpb24oc3RyKSB7XG4gIGNvbnN0IF9zdHIgPSBzdHIudHJpbSgpO1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIHRleHQ6IF9zdHIucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywgXCJcIikudHJpbSgpLFxuICAgIHdyYXA6IF9zdHIubWF0Y2goL146P3dyYXA6LykgIT09IG51bGwgPyB0cnVlIDogX3N0ci5tYXRjaCgvXjo/bm93cmFwOi8pICE9PSBudWxsID8gZmFsc2UgOiB2b2lkIDBcbiAgfTtcbiAgbG9nLmRlYnVnKFwicGFyc2VNZXNzYWdlOlwiLCBtZXNzYWdlKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuY29uc3QgcGFyc2VCb3hEYXRhID0gZnVuY3Rpb24oc3RyKSB7XG4gIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKC9eKCg/OnJnYmE/fGhzbGE/KVxccypcXCguKlxcKXxcXHcqKSguKikkLyk7XG4gIGxldCBjb2xvciA9IG1hdGNoICE9IG51bGwgJiYgbWF0Y2hbMV0gPyBtYXRjaFsxXS50cmltKCkgOiBcInRyYW5zcGFyZW50XCI7XG4gIGxldCB0aXRsZSA9IG1hdGNoICE9IG51bGwgJiYgbWF0Y2hbMl0gPyBtYXRjaFsyXS50cmltKCkgOiB2b2lkIDA7XG4gIGlmICh3aW5kb3cgJiYgd2luZG93LkNTUykge1xuICAgIGlmICghd2luZG93LkNTUy5zdXBwb3J0cyhcImNvbG9yXCIsIGNvbG9yKSkge1xuICAgICAgY29sb3IgPSBcInRyYW5zcGFyZW50XCI7XG4gICAgICB0aXRsZSA9IHN0ci50cmltKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0eWxlID0gbmV3IE9wdGlvbigpLnN0eWxlO1xuICAgIHN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgaWYgKHN0eWxlLmNvbG9yICE9PSBjb2xvcikge1xuICAgICAgY29sb3IgPSBcInRyYW5zcGFyZW50XCI7XG4gICAgICB0aXRsZSA9IHN0ci50cmltKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGJveERhdGEgPSB7XG4gICAgY29sb3IsXG4gICAgdGV4dDogdGl0bGUgIT09IHZvaWQgMCA/IHNhbml0aXplVGV4dCh0aXRsZS5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCBcIlwiKSwgZ2V0Q29uZmlnKCkpIDogdm9pZCAwLFxuICAgIHdyYXA6IHRpdGxlICE9PSB2b2lkIDAgPyB0aXRsZS5tYXRjaCgvXjo/d3JhcDovKSAhPT0gbnVsbCA/IHRydWUgOiB0aXRsZS5tYXRjaCgvXjo/bm93cmFwOi8pICE9PSBudWxsID8gZmFsc2UgOiB2b2lkIDAgOiB2b2lkIDBcbiAgfTtcbiAgcmV0dXJuIGJveERhdGE7XG59O1xuY29uc3QgTElORVRZUEUgPSB7XG4gIFNPTElEOiAwLFxuICBET1RURUQ6IDEsXG4gIE5PVEU6IDIsXG4gIFNPTElEX0NST1NTOiAzLFxuICBET1RURURfQ1JPU1M6IDQsXG4gIFNPTElEX09QRU46IDUsXG4gIERPVFRFRF9PUEVOOiA2LFxuICBMT09QX1NUQVJUOiAxMCxcbiAgTE9PUF9FTkQ6IDExLFxuICBBTFRfU1RBUlQ6IDEyLFxuICBBTFRfRUxTRTogMTMsXG4gIEFMVF9FTkQ6IDE0LFxuICBPUFRfU1RBUlQ6IDE1LFxuICBPUFRfRU5EOiAxNixcbiAgQUNUSVZFX1NUQVJUOiAxNyxcbiAgQUNUSVZFX0VORDogMTgsXG4gIFBBUl9TVEFSVDogMTksXG4gIFBBUl9BTkQ6IDIwLFxuICBQQVJfRU5EOiAyMSxcbiAgUkVDVF9TVEFSVDogMjIsXG4gIFJFQ1RfRU5EOiAyMyxcbiAgU09MSURfUE9JTlQ6IDI0LFxuICBET1RURURfUE9JTlQ6IDI1LFxuICBBVVRPTlVNQkVSOiAyNixcbiAgQ1JJVElDQUxfU1RBUlQ6IDI3LFxuICBDUklUSUNBTF9PUFRJT046IDI4LFxuICBDUklUSUNBTF9FTkQ6IDI5LFxuICBCUkVBS19TVEFSVDogMzAsXG4gIEJSRUFLX0VORDogMzEsXG4gIFBBUl9PVkVSX1NUQVJUOiAzMlxufTtcbmNvbnN0IEFSUk9XVFlQRSA9IHtcbiAgRklMTEVEOiAwLFxuICBPUEVOOiAxXG59O1xuY29uc3QgUExBQ0VNRU5UID0ge1xuICBMRUZUT0Y6IDAsXG4gIFJJR0hUT0Y6IDEsXG4gIE9WRVI6IDJcbn07XG5jb25zdCBhZGROb3RlID0gZnVuY3Rpb24oYWN0b3IsIHBsYWNlbWVudCwgbWVzc2FnZSkge1xuICAoe1xuICAgIGFjdG9yLFxuICAgIHBsYWNlbWVudCxcbiAgICBtZXNzYWdlOiBtZXNzYWdlLnRleHQsXG4gICAgd3JhcDogbWVzc2FnZS53cmFwID09PSB2b2lkIDAgJiYgYXV0b1dyYXAoKSB8fCAhIW1lc3NhZ2Uud3JhcFxuICB9KTtcbiAgY29uc3QgYWN0b3JzMiA9IFtdLmNvbmNhdChhY3RvciwgYWN0b3IpO1xuICBtZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBhY3RvcnMyWzBdLFxuICAgIHRvOiBhY3RvcnMyWzFdLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UudGV4dCxcbiAgICB3cmFwOiBtZXNzYWdlLndyYXAgPT09IHZvaWQgMCAmJiBhdXRvV3JhcCgpIHx8ICEhbWVzc2FnZS53cmFwLFxuICAgIHR5cGU6IExJTkVUWVBFLk5PVEUsXG4gICAgcGxhY2VtZW50XG4gIH0pO1xufTtcbmNvbnN0IGFkZExpbmtzID0gZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICB0cnkge1xuICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVUZXh0KHRleHQudGV4dCwgZ2V0Q29uZmlnKCkpO1xuICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UoLyZhbXA7L2csIFwiJlwiKTtcbiAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5yZXBsYWNlKC8mZXF1YWxzOy9nLCBcIj1cIik7XG4gICAgY29uc3QgbGlua3MgPSBKU09OLnBhcnNlKHNhbml0aXplZFRleHQpO1xuICAgIGluc2VydExpbmtzKGFjdG9yLCBsaW5rcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dFwiLCBlKTtcbiAgfVxufTtcbmNvbnN0IGFkZEFMaW5rID0gZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICB0cnkge1xuICAgIGNvbnN0IGxpbmtzID0ge307XG4gICAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZVRleHQodGV4dC50ZXh0LCBnZXRDb25maWcoKSk7XG4gICAgdmFyIHNlcCA9IHNhbml0aXplZFRleHQuaW5kZXhPZihcIkBcIik7XG4gICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQucmVwbGFjZSgvJmFtcDsvZywgXCImXCIpO1xuICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UoLyZlcXVhbHM7L2csIFwiPVwiKTtcbiAgICB2YXIgbGFiZWwgPSBzYW5pdGl6ZWRUZXh0LnNsaWNlKDAsIHNlcCAtIDEpLnRyaW0oKTtcbiAgICB2YXIgbGluayA9IHNhbml0aXplZFRleHQuc2xpY2Uoc2VwICsgMSkudHJpbSgpO1xuICAgIGxpbmtzW2xhYmVsXSA9IGxpbms7XG4gICAgaW5zZXJ0TGlua3MoYWN0b3IsIGxpbmtzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihcImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0XCIsIGUpO1xuICB9XG59O1xuZnVuY3Rpb24gaW5zZXJ0TGlua3MoYWN0b3IsIGxpbmtzKSB7XG4gIGlmIChhY3Rvci5saW5rcyA9PSBudWxsKSB7XG4gICAgYWN0b3IubGlua3MgPSBsaW5rcztcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBrZXkgaW4gbGlua3MpIHtcbiAgICAgIGFjdG9yLmxpbmtzW2tleV0gPSBsaW5rc1trZXldO1xuICAgIH1cbiAgfVxufVxuY29uc3QgYWRkUHJvcGVydGllcyA9IGZ1bmN0aW9uKGFjdG9ySWQsIHRleHQpIHtcbiAgY29uc3QgYWN0b3IgPSBnZXRBY3RvcihhY3RvcklkKTtcbiAgdHJ5IHtcbiAgICBsZXQgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dCh0ZXh0LnRleHQsIGdldENvbmZpZygpKTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gSlNPTi5wYXJzZShzYW5pdGl6ZWRUZXh0KTtcbiAgICBpbnNlcnRQcm9wZXJ0aWVzKGFjdG9yLCBwcm9wZXJ0aWVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihcImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0XCIsIGUpO1xuICB9XG59O1xuZnVuY3Rpb24gaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgcHJvcGVydGllcykge1xuICBpZiAoYWN0b3IucHJvcGVydGllcyA9PSBudWxsKSB7XG4gICAgYWN0b3IucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgIGFjdG9yLnByb3BlcnRpZXNba2V5XSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJveEVuZCgpIHtcbiAgY3VycmVudEJveCA9IHZvaWQgMDtcbn1cbmNvbnN0IGFkZERldGFpbHMgPSBmdW5jdGlvbihhY3RvcklkLCB0ZXh0KSB7XG4gIGNvbnN0IGFjdG9yID0gZ2V0QWN0b3IoYWN0b3JJZCk7XG4gIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0ZXh0LnRleHQpO1xuICB0cnkge1xuICAgIGNvbnN0IHRleHQyID0gZWxlbS5pbm5lckhUTUw7XG4gICAgY29uc3QgZGV0YWlscyA9IEpTT04ucGFyc2UodGV4dDIpO1xuICAgIGlmIChkZXRhaWxzW1wicHJvcGVydGllc1wiXSkge1xuICAgICAgaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgZGV0YWlsc1tcInByb3BlcnRpZXNcIl0pO1xuICAgIH1cbiAgICBpZiAoZGV0YWlsc1tcImxpbmtzXCJdKSB7XG4gICAgICBpbnNlcnRMaW5rcyhhY3RvciwgZGV0YWlsc1tcImxpbmtzXCJdKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dFwiLCBlKTtcbiAgfVxufTtcbmNvbnN0IGdldEFjdG9yUHJvcGVydHkgPSBmdW5jdGlvbihhY3Rvciwga2V5KSB7XG4gIGlmIChhY3RvciAhPT0gdm9pZCAwICYmIGFjdG9yLnByb3BlcnRpZXMgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBhY3Rvci5wcm9wZXJ0aWVzW2tleV07XG4gIH1cbiAgcmV0dXJuIHZvaWQgMDtcbn07XG5jb25zdCBhcHBseSA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgIHBhcmFtLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgYXBwbHkoaXRlbSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChwYXJhbS50eXBlKSB7XG4gICAgICBjYXNlIFwic2VxdWVuY2VJbmRleFwiOlxuICAgICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICBmcm9tOiB2b2lkIDAsXG4gICAgICAgICAgdG86IHZvaWQgMCxcbiAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICBzdGFydDogcGFyYW0uc2VxdWVuY2VJbmRleCxcbiAgICAgICAgICAgIHN0ZXA6IHBhcmFtLnNlcXVlbmNlSW5kZXhTdGVwLFxuICAgICAgICAgICAgdmlzaWJsZTogcGFyYW0uc2VxdWVuY2VWaXNpYmxlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3cmFwOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiBwYXJhbS5zaWduYWxUeXBlXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRQYXJ0aWNpcGFudFwiOlxuICAgICAgICBhZGRBY3RvcihwYXJhbS5hY3RvciwgcGFyYW0uYWN0b3IsIHBhcmFtLmRlc2NyaXB0aW9uLCBcInBhcnRpY2lwYW50XCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRBY3RvclwiOlxuICAgICAgICBhZGRBY3RvcihwYXJhbS5hY3RvciwgcGFyYW0uYWN0b3IsIHBhcmFtLmRlc2NyaXB0aW9uLCBcImFjdG9yXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhY3RpdmVTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwocGFyYW0uYWN0b3IsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWN0aXZlRW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5hY3Rvciwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGROb3RlXCI6XG4gICAgICAgIGFkZE5vdGUocGFyYW0uYWN0b3IsIHBhcmFtLnBsYWNlbWVudCwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZExpbmtzXCI6XG4gICAgICAgIGFkZExpbmtzKHBhcmFtLmFjdG9yLCBwYXJhbS50ZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkQUxpbmtcIjpcbiAgICAgICAgYWRkQUxpbmsocGFyYW0uYWN0b3IsIHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRQcm9wZXJ0aWVzXCI6XG4gICAgICAgIGFkZFByb3BlcnRpZXMocGFyYW0uYWN0b3IsIHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGREZXRhaWxzXCI6XG4gICAgICAgIGFkZERldGFpbHMocGFyYW0uYWN0b3IsIHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRNZXNzYWdlXCI6XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5mcm9tLCBwYXJhbS50bywgcGFyYW0ubXNnLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm94U3RhcnRcIjpcbiAgICAgICAgYWRkQm94KHBhcmFtLmJveERhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJib3hFbmRcIjpcbiAgICAgICAgYm94RW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxvb3BTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmxvb3BUZXh0LCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibG9vcEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlY3RTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmNvbG9yLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVjdEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdFN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0ub3B0VGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFsdFN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0uYWx0VGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImVsc2VcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5hbHRUZXh0LCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWx0RW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2V0QWNjVGl0bGVcIjpcbiAgICAgICAgc2V0QWNjVGl0bGUocGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBhclN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0ucGFyVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLnBhclRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwYXJFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjcml0aWNhbFN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0uY3JpdGljYWxUZXh0LCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0ub3B0aW9uVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNyaXRpY2FsRW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJlYWtTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmJyZWFrVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyZWFrRW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuY29uc3QgZGIgPSB7XG4gIGFkZEFjdG9yLFxuICBhZGRNZXNzYWdlLFxuICBhZGRTaWduYWwsXG4gIGFkZExpbmtzLFxuICBhZGREZXRhaWxzLFxuICBhZGRQcm9wZXJ0aWVzLFxuICBhdXRvV3JhcCxcbiAgc2V0V3JhcCxcbiAgZW5hYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBzaG93U2VxdWVuY2VOdW1iZXJzLFxuICBnZXRNZXNzYWdlcyxcbiAgZ2V0QWN0b3JzLFxuICBnZXRBY3RvcixcbiAgZ2V0QWN0b3JLZXlzLFxuICBnZXRBY3RvclByb3BlcnR5LFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Qm94ZXMsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBwYXJzZURpcmVjdGl2ZSxcbiAgZ2V0Q29uZmlnOiAoKSA9PiBnZXRDb25maWcoKS5zZXF1ZW5jZSxcbiAgY2xlYXIsXG4gIHBhcnNlTWVzc2FnZSxcbiAgcGFyc2VCb3hEYXRhLFxuICBMSU5FVFlQRSxcbiAgQVJST1dUWVBFLFxuICBQTEFDRU1FTlQsXG4gIGFkZE5vdGUsXG4gIHNldEFjY1RpdGxlLFxuICBhcHBseSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBoYXNBdExlYXN0T25lQm94LFxuICBoYXNBdExlYXN0T25lQm94V2l0aFRpdGxlXG59O1xuY29uc3QgZ2V0U3R5bGVzID0gKG9wdGlvbnMpID0+IGAuYWN0b3Ige1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckxpbmVDb2xvcn07XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlcXVlbmNlTnVtYmVyQ29sb3J9O1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNpZ25hbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCa2dDb2xvcn07XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5sYWJlbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLmxvb3BUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCb3JkZXJDb2xvcn07XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm90ZUJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubm90ZUJrZ0NvbG9yfTtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5hY3RvclBvcHVwTWVudVBhbmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDNweCA1cHggMnB4IHJnYigwIDAgMCAvIDAuNCkpO1xufVxuICAuYWN0b3ItbWFuIGxpbmUge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG4gIC5hY3Rvci1tYW4gY2lyY2xlLCBsaW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckJvcmRlcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuYDtcbmNvbnN0IHN0eWxlcyA9IGdldFN0eWxlcztcbmNvbnN0IGRyYXdSZWN0ID0gZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgcmV0dXJuIGRyYXdSZWN0JDEoZWxlbSwgcmVjdERhdGEpO1xufTtcbmNvbnN0IGFkZFBvcHVwSW50ZXJhY3Rpb24gPSAoaWQsIGFjdG9yQ250MikgPT4ge1xuICBhZGRGdW5jdGlvbigoKSA9PiB7XG4gICAgY29uc3QgYXJyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpZCk7XG4gICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJyWzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBwb3B1cE1lbnVVcEZ1bmMoXCJhY3RvclwiICsgYWN0b3JDbnQyICsgXCJfcG9wdXBcIik7XG4gICAgfSk7XG4gICAgYXJyWzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHBvcHVwTWVudURvd25GdW5jKFwiYWN0b3JcIiArIGFjdG9yQ250MiArIFwiX3BvcHVwXCIpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkcmF3UG9wdXAgPSBmdW5jdGlvbihlbGVtLCBhY3RvciwgbWluTWVudVdpZHRoLCB0ZXh0QXR0cnMsIGZvcmNlTWVudXMpIHtcbiAgaWYgKGFjdG9yLmxpbmtzID09PSB2b2lkIDAgfHwgYWN0b3IubGlua3MgPT09IG51bGwgfHwgT2JqZWN0LmtleXMoYWN0b3IubGlua3MpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGhlaWdodDogMCwgd2lkdGg6IDAgfTtcbiAgfVxuICBjb25zdCBsaW5rcyA9IGFjdG9yLmxpbmtzO1xuICBjb25zdCBhY3RvckNudDIgPSBhY3Rvci5hY3RvckNudDtcbiAgY29uc3QgcmVjdERhdGEgPSBhY3Rvci5yZWN0RGF0YTtcbiAgdmFyIGRpc3BsYXlWYWx1ZSA9IFwibm9uZVwiO1xuICBpZiAoZm9yY2VNZW51cykge1xuICAgIGRpc3BsYXlWYWx1ZSA9IFwiYmxvY2sgIWltcG9ydGFudFwiO1xuICB9XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGcuYXR0cihcImlkXCIsIFwiYWN0b3JcIiArIGFjdG9yQ250MiArIFwiX3BvcHVwXCIpO1xuICBnLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yUG9wdXBNZW51XCIpO1xuICBnLmF0dHIoXCJkaXNwbGF5XCIsIGRpc3BsYXlWYWx1ZSk7XG4gIGFkZFBvcHVwSW50ZXJhY3Rpb24oXCIjYWN0b3JcIiArIGFjdG9yQ250MiArIFwiX3BvcHVwXCIsIGFjdG9yQ250Mik7XG4gIHZhciBhY3RvckNsYXNzID0gXCJcIjtcbiAgaWYgKHJlY3REYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICBhY3RvckNsYXNzID0gXCIgXCIgKyByZWN0RGF0YS5jbGFzcztcbiAgfVxuICBsZXQgbWVudVdpZHRoID0gcmVjdERhdGEud2lkdGggPiBtaW5NZW51V2lkdGggPyByZWN0RGF0YS53aWR0aCA6IG1pbk1lbnVXaWR0aDtcbiAgY29uc3QgcmVjdEVsZW0gPSBnLmFwcGVuZChcInJlY3RcIik7XG4gIHJlY3RFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yUG9wdXBNZW51UGFuZWxcIiArIGFjdG9yQ2xhc3MpO1xuICByZWN0RWxlbS5hdHRyKFwieFwiLCByZWN0RGF0YS54KTtcbiAgcmVjdEVsZW0uYXR0cihcInlcIiwgcmVjdERhdGEuaGVpZ2h0KTtcbiAgcmVjdEVsZW0uYXR0cihcImZpbGxcIiwgcmVjdERhdGEuZmlsbCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJzdHJva2VcIiwgcmVjdERhdGEuc3Ryb2tlKTtcbiAgcmVjdEVsZW0uYXR0cihcIndpZHRoXCIsIG1lbnVXaWR0aCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJoZWlnaHRcIiwgcmVjdERhdGEuaGVpZ2h0KTtcbiAgcmVjdEVsZW0uYXR0cihcInJ4XCIsIHJlY3REYXRhLnJ4KTtcbiAgcmVjdEVsZW0uYXR0cihcInJ5XCIsIHJlY3REYXRhLnJ5KTtcbiAgaWYgKGxpbmtzICE9IG51bGwpIHtcbiAgICB2YXIgbGlua1kgPSAyMDtcbiAgICBmb3IgKGxldCBrZXkgaW4gbGlua3MpIHtcbiAgICAgIHZhciBsaW5rRWxlbSA9IGcuYXBwZW5kKFwiYVwiKTtcbiAgICAgIHZhciBzYW5pdGl6ZWRMaW5rID0gc2FuaXRpemVVcmwobGlua3Nba2V5XSk7XG4gICAgICBsaW5rRWxlbS5hdHRyKFwieGxpbms6aHJlZlwiLCBzYW5pdGl6ZWRMaW5rKTtcbiAgICAgIGxpbmtFbGVtLmF0dHIoXCJ0YXJnZXRcIiwgXCJfYmxhbmtcIik7XG4gICAgICBfZHJhd01lbnVJdGVtVGV4dENhbmRpZGF0ZUZ1bmModGV4dEF0dHJzKShcbiAgICAgICAga2V5LFxuICAgICAgICBsaW5rRWxlbSxcbiAgICAgICAgcmVjdERhdGEueCArIDEwLFxuICAgICAgICByZWN0RGF0YS5oZWlnaHQgKyBsaW5rWSxcbiAgICAgICAgbWVudVdpZHRoLFxuICAgICAgICAyMCxcbiAgICAgICAgeyBjbGFzczogXCJhY3RvclwiIH0sXG4gICAgICAgIHRleHRBdHRyc1xuICAgICAgKTtcbiAgICAgIGxpbmtZICs9IDMwO1xuICAgIH1cbiAgfVxuICByZWN0RWxlbS5hdHRyKFwiaGVpZ2h0XCIsIGxpbmtZKTtcbiAgcmV0dXJuIHsgaGVpZ2h0OiByZWN0RGF0YS5oZWlnaHQgKyBsaW5rWSwgd2lkdGg6IG1lbnVXaWR0aCB9O1xufTtcbmNvbnN0IHBvcHVwTWVudSA9IGZ1bmN0aW9uKHBvcGlkKSB7XG4gIHJldHVybiBcInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdcIiArIHBvcGlkICsgXCInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH1cIjtcbn07XG5jb25zdCBwb3Bkb3duTWVudSA9IGZ1bmN0aW9uKHBvcGlkKSB7XG4gIHJldHVybiBcInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdcIiArIHBvcGlkICsgXCInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfVwiO1xufTtcbmNvbnN0IHBvcHVwTWVudVVwRnVuYyA9IGZ1bmN0aW9uKHBvcHVwSWQpIHtcbiAgdmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9wdXBJZCk7XG4gIGlmIChwdSAhPSBudWxsKSB7XG4gICAgcHUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgfVxufTtcbmNvbnN0IHBvcHVwTWVudURvd25GdW5jID0gZnVuY3Rpb24ocG9wdXBJZCkge1xuICB2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwb3B1cElkKTtcbiAgaWYgKHB1ICE9IG51bGwpIHtcbiAgICBwdS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIH1cbn07XG5jb25zdCBkcmF3VGV4dCA9IGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIGxldCBwcmV2VGV4dEhlaWdodCA9IDA7XG4gIGxldCB0ZXh0SGVpZ2h0ID0gMDtcbiAgY29uc3QgbGluZXMgPSB0ZXh0RGF0YS50ZXh0LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCk7XG4gIGNvbnN0IFtfdGV4dEZvbnRTaXplLCBfdGV4dEZvbnRTaXplUHhdID0gcGFyc2VGb250U2l6ZSh0ZXh0RGF0YS5mb250U2l6ZSk7XG4gIGxldCB0ZXh0RWxlbXMgPSBbXTtcbiAgbGV0IGR5ID0gMDtcbiAgbGV0IHlmdW5jID0gKCkgPT4gdGV4dERhdGEueTtcbiAgaWYgKHRleHREYXRhLnZhbGlnbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luID4gMCkge1xuICAgIHN3aXRjaCAodGV4dERhdGEudmFsaWduKSB7XG4gICAgICBjYXNlIFwidG9wXCI6XG4gICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgeWZ1bmMgPSAoKSA9PiBNYXRoLnJvdW5kKHRleHREYXRhLnkgKyB0ZXh0RGF0YS50ZXh0TWFyZ2luKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIHlmdW5jID0gKCkgPT4gTWF0aC5yb3VuZCh0ZXh0RGF0YS55ICsgKHByZXZUZXh0SGVpZ2h0ICsgdGV4dEhlaWdodCArIHRleHREYXRhLnRleHRNYXJnaW4pIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICB5ZnVuYyA9ICgpID0+IE1hdGgucm91bmQoXG4gICAgICAgICAgdGV4dERhdGEueSArIChwcmV2VGV4dEhlaWdodCArIHRleHRIZWlnaHQgKyAyICogdGV4dERhdGEudGV4dE1hcmdpbikgLSB0ZXh0RGF0YS50ZXh0TWFyZ2luXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAodGV4dERhdGEuYW5jaG9yICE9PSB2b2lkIDAgJiYgdGV4dERhdGEudGV4dE1hcmdpbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLndpZHRoICE9PSB2b2lkIDApIHtcbiAgICBzd2l0Y2ggKHRleHREYXRhLmFuY2hvcikge1xuICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICB0ZXh0RGF0YS54ID0gTWF0aC5yb3VuZCh0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbik7XG4gICAgICAgIHRleHREYXRhLmFuY2hvciA9IFwic3RhcnRcIjtcbiAgICAgICAgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIHRleHREYXRhLmFsaWdubWVudEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIHRleHREYXRhLnggPSBNYXRoLnJvdW5kKHRleHREYXRhLnggKyB0ZXh0RGF0YS53aWR0aCAvIDIpO1xuICAgICAgICB0ZXh0RGF0YS5hbmNob3IgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0ZXh0RGF0YS5kb21pbmFudEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdGV4dERhdGEuYWxpZ25tZW50QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICB0ZXh0RGF0YS54ID0gTWF0aC5yb3VuZCh0ZXh0RGF0YS54ICsgdGV4dERhdGEud2lkdGggLSB0ZXh0RGF0YS50ZXh0TWFyZ2luKTtcbiAgICAgICAgdGV4dERhdGEuYW5jaG9yID0gXCJlbmRcIjtcbiAgICAgICAgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIHRleHREYXRhLmFsaWdubWVudEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IFtpLCBsaW5lXSBvZiBsaW5lcy5lbnRyaWVzKCkpIHtcbiAgICBpZiAodGV4dERhdGEudGV4dE1hcmdpbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gPT09IDAgJiYgX3RleHRGb250U2l6ZSAhPT0gdm9pZCAwKSB7XG4gICAgICBkeSA9IGkgKiBfdGV4dEZvbnRTaXplO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwidGV4dFwiKTtcbiAgICB0ZXh0RWxlbS5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgICB0ZXh0RWxlbS5hdHRyKFwieVwiLCB5ZnVuYygpKTtcbiAgICBpZiAodGV4dERhdGEuYW5jaG9yICE9PSB2b2lkIDApIHtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCB0ZXh0RGF0YS5hbmNob3IpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCB0ZXh0RGF0YS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIHRleHREYXRhLmFsaWdubWVudEJhc2VsaW5lKTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmZvbnRGYW1pbHkgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uc3R5bGUoXCJmb250LWZhbWlseVwiLCB0ZXh0RGF0YS5mb250RmFtaWx5KTtcbiAgICB9XG4gICAgaWYgKF90ZXh0Rm9udFNpemVQeCAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5zdHlsZShcImZvbnQtc2l6ZVwiLCBfdGV4dEZvbnRTaXplUHgpO1xuICAgIH1cbiAgICBpZiAodGV4dERhdGEuZm9udFdlaWdodCAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIHRleHREYXRhLmZvbnRXZWlnaHQpO1xuICAgIH1cbiAgICBpZiAodGV4dERhdGEuZmlsbCAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJjbGFzc1wiLCB0ZXh0RGF0YS5jbGFzcyk7XG4gICAgfVxuICAgIGlmICh0ZXh0RGF0YS5keSAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgdGV4dERhdGEuZHkpO1xuICAgIH0gZWxzZSBpZiAoZHkgIT09IDApIHtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJkeVwiLCBkeSk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSBsaW5lIHx8IFpFUk9fV0lEVEhfU1BBQ0U7XG4gICAgaWYgKHRleHREYXRhLnRzcGFuKSB7XG4gICAgICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gICAgICBzcGFuLmF0dHIoXCJ4XCIsIHRleHREYXRhLngpO1xuICAgICAgaWYgKHRleHREYXRhLmZpbGwgIT09IHZvaWQgMCkge1xuICAgICAgICBzcGFuLmF0dHIoXCJmaWxsXCIsIHRleHREYXRhLmZpbGwpO1xuICAgICAgfVxuICAgICAgc3Bhbi50ZXh0KHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0RWxlbS50ZXh0KHRleHQpO1xuICAgIH1cbiAgICBpZiAodGV4dERhdGEudmFsaWduICE9PSB2b2lkIDAgJiYgdGV4dERhdGEudGV4dE1hcmdpbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gPiAwKSB7XG4gICAgICB0ZXh0SGVpZ2h0ICs9ICh0ZXh0RWxlbS5fZ3JvdXBzIHx8IHRleHRFbGVtKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0O1xuICAgICAgcHJldlRleHRIZWlnaHQgPSB0ZXh0SGVpZ2h0O1xuICAgIH1cbiAgICB0ZXh0RWxlbXMucHVzaCh0ZXh0RWxlbSk7XG4gIH1cbiAgcmV0dXJuIHRleHRFbGVtcztcbn07XG5jb25zdCBkcmF3TGFiZWwgPSBmdW5jdGlvbihlbGVtLCB0eHRPYmplY3QpIHtcbiAgZnVuY3Rpb24gZ2VuUG9pbnRzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGN1dCkge1xuICAgIHJldHVybiB4ICsgXCIsXCIgKyB5ICsgXCIgXCIgKyAoeCArIHdpZHRoKSArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArICh5ICsgaGVpZ2h0IC0gY3V0KSArIFwiIFwiICsgKHggKyB3aWR0aCAtIGN1dCAqIDEuMikgKyBcIixcIiArICh5ICsgaGVpZ2h0KSArIFwiIFwiICsgeCArIFwiLFwiICsgKHkgKyBoZWlnaHQpO1xuICB9XG4gIGNvbnN0IHBvbHlnb24gPSBlbGVtLmFwcGVuZChcInBvbHlnb25cIik7XG4gIHBvbHlnb24uYXR0cihcInBvaW50c1wiLCBnZW5Qb2ludHModHh0T2JqZWN0LngsIHR4dE9iamVjdC55LCB0eHRPYmplY3Qud2lkdGgsIHR4dE9iamVjdC5oZWlnaHQsIDcpKTtcbiAgcG9seWdvbi5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbEJveFwiKTtcbiAgdHh0T2JqZWN0LnkgPSB0eHRPYmplY3QueSArIHR4dE9iamVjdC5oZWlnaHQgLyAyO1xuICBkcmF3VGV4dChlbGVtLCB0eHRPYmplY3QpO1xuICByZXR1cm4gcG9seWdvbjtcbn07XG5sZXQgYWN0b3JDbnQgPSAtMTtcbmNvbnN0IGZpeExpZmVMaW5lSGVpZ2h0cyA9IChkaWFncmFtMiwgYm91bmRzMikgPT4ge1xuICBpZiAoIWRpYWdyYW0yLnNlbGVjdEFsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBkaWFncmFtMi5zZWxlY3RBbGwoXCIuYWN0b3ItbGluZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCIyMDBcIikuYXR0cihcInkyXCIsIGJvdW5kczIgLSA1NSk7XG59O1xuY29uc3QgZHJhd0FjdG9yVHlwZVBhcnRpY2lwYW50ID0gZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3IueSArIDU7XG4gIGNvbnN0IGJveHBsdXNsaW5lR3JvdXAgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIHZhciBnID0gYm94cGx1c2xpbmVHcm91cDtcbiAgaWYgKCFpc0Zvb3Rlcikge1xuICAgIGFjdG9yQ250Kys7XG4gICAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGNlbnRlclkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCAyZTMpLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLWxpbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNXB4XCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjOTk5XCIpO1xuICAgIGcgPSBib3hwbHVzbGluZUdyb3VwLmFwcGVuZChcImdcIik7XG4gICAgYWN0b3IuYWN0b3JDbnQgPSBhY3RvckNudDtcbiAgICBpZiAoYWN0b3IubGlua3MgIT0gbnVsbCkge1xuICAgICAgZy5hdHRyKFwiaWRcIiwgXCJyb290LVwiICsgYWN0b3JDbnQpO1xuICAgICAgYWRkUG9wdXBJbnRlcmFjdGlvbihcIiNyb290LVwiICsgYWN0b3JDbnQsIGFjdG9yQ250KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0JDEoKTtcbiAgdmFyIGNzc2NsYXNzID0gXCJhY3RvclwiO1xuICBpZiAoYWN0b3IucHJvcGVydGllcyAhPSBudWxsICYmIGFjdG9yLnByb3BlcnRpZXNbXCJjbGFzc1wiXSkge1xuICAgIGNzc2NsYXNzID0gYWN0b3IucHJvcGVydGllc1tcImNsYXNzXCJdO1xuICB9IGVsc2Uge1xuICAgIHJlY3QuZmlsbCA9IFwiI2VhZWFlYVwiO1xuICB9XG4gIHJlY3QueCA9IGFjdG9yLng7XG4gIHJlY3QueSA9IGFjdG9yLnk7XG4gIHJlY3Qud2lkdGggPSBhY3Rvci53aWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBhY3Rvci5oZWlnaHQ7XG4gIHJlY3QuY2xhc3MgPSBjc3NjbGFzcztcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBjb25zdCByZWN0RWxlbSA9IGRyYXdSZWN0KGcsIHJlY3QpO1xuICBhY3Rvci5yZWN0RGF0YSA9IHJlY3Q7XG4gIGlmIChhY3Rvci5wcm9wZXJ0aWVzICE9IG51bGwgJiYgYWN0b3IucHJvcGVydGllc1tcImljb25cIl0pIHtcbiAgICBjb25zdCBpY29uU3JjID0gYWN0b3IucHJvcGVydGllc1tcImljb25cIl0udHJpbSgpO1xuICAgIGlmIChpY29uU3JjLmNoYXJBdCgwKSA9PT0gXCJAXCIpIHtcbiAgICAgIGRyYXdFbWJlZGRlZEltYWdlKGcsIHJlY3QueCArIHJlY3Qud2lkdGggLSAyMCwgcmVjdC55ICsgMTAsIGljb25TcmMuc3Vic3RyKDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhd0ltYWdlKGcsIHJlY3QueCArIHJlY3Qud2lkdGggLSAyMCwgcmVjdC55ICsgMTAsIGljb25TcmMpO1xuICAgIH1cbiAgfVxuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcImFjdG9yXCIgfSxcbiAgICBjb25mMlxuICApO1xuICBsZXQgaGVpZ2h0ID0gYWN0b3IuaGVpZ2h0O1xuICBpZiAocmVjdEVsZW0ubm9kZSkge1xuICAgIGNvbnN0IGJvdW5kczIgPSByZWN0RWxlbS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGFjdG9yLmhlaWdodCA9IGJvdW5kczIuaGVpZ2h0O1xuICAgIGhlaWdodCA9IGJvdW5kczIuaGVpZ2h0O1xuICB9XG4gIHJldHVybiBoZWlnaHQ7XG59O1xuY29uc3QgZHJhd0FjdG9yVHlwZUFjdG9yID0gZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3IueSArIDgwO1xuICBpZiAoIWlzRm9vdGVyKSB7XG4gICAgYWN0b3JDbnQrKztcbiAgICBlbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcImlkXCIsIFwiYWN0b3JcIiArIGFjdG9yQ250KS5hdHRyKFwieDFcIiwgY2VudGVyKS5hdHRyKFwieTFcIiwgY2VudGVyWSkuYXR0cihcIngyXCIsIGNlbnRlcikuYXR0cihcInkyXCIsIDJlMykuYXR0cihcImNsYXNzXCIsIFwiYWN0b3ItbGluZVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMC41cHhcIikuYXR0cihcInN0cm9rZVwiLCBcIiM5OTlcIik7XG4gIH1cbiAgY29uc3QgYWN0RWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgYWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhY3Rvci1tYW5cIik7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCQxKCk7XG4gIHJlY3QueCA9IGFjdG9yLng7XG4gIHJlY3QueSA9IGFjdG9yLnk7XG4gIHJlY3QuZmlsbCA9IFwiI2VhZWFlYVwiO1xuICByZWN0LndpZHRoID0gYWN0b3Iud2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gYWN0b3IuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gXCJhY3RvclwiO1xuICByZWN0LnJ4ID0gMztcbiAgcmVjdC5yeSA9IDM7XG4gIGFjdEVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiaWRcIiwgXCJhY3Rvci1tYW4tdG9yc29cIiArIGFjdG9yQ250KS5hdHRyKFwieDFcIiwgY2VudGVyKS5hdHRyKFwieTFcIiwgYWN0b3IueSArIDI1KS5hdHRyKFwieDJcIiwgY2VudGVyKS5hdHRyKFwieTJcIiwgYWN0b3IueSArIDQ1KTtcbiAgYWN0RWxlbS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yLW1hbi1hcm1zXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlciAtIDE4KS5hdHRyKFwieTFcIiwgYWN0b3IueSArIDMzKS5hdHRyKFwieDJcIiwgY2VudGVyICsgMTgpLmF0dHIoXCJ5MlwiLCBhY3Rvci55ICsgMzMpO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIGNlbnRlciAtIDE4KS5hdHRyKFwieTFcIiwgYWN0b3IueSArIDYwKS5hdHRyKFwieDJcIiwgY2VudGVyKS5hdHRyKFwieTJcIiwgYWN0b3IueSArIDQ1KTtcbiAgYWN0RWxlbS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBjZW50ZXIpLmF0dHIoXCJ5MVwiLCBhY3Rvci55ICsgNDUpLmF0dHIoXCJ4MlwiLCBjZW50ZXIgKyAxNikuYXR0cihcInkyXCIsIGFjdG9yLnkgKyA2MCk7XG4gIGNvbnN0IGNpcmNsZSA9IGFjdEVsZW0uYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGUuYXR0cihcImN4XCIsIGFjdG9yLnggKyBhY3Rvci53aWR0aCAvIDIpO1xuICBjaXJjbGUuYXR0cihcImN5XCIsIGFjdG9yLnkgKyAxMCk7XG4gIGNpcmNsZS5hdHRyKFwiclwiLCAxNSk7XG4gIGNpcmNsZS5hdHRyKFwid2lkdGhcIiwgYWN0b3Iud2lkdGgpO1xuICBjaXJjbGUuYXR0cihcImhlaWdodFwiLCBhY3Rvci5oZWlnaHQpO1xuICBjb25zdCBib3VuZHMyID0gYWN0RWxlbS5ub2RlKCkuZ2V0QkJveCgpO1xuICBhY3Rvci5oZWlnaHQgPSBib3VuZHMyLmhlaWdodDtcbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgYWN0b3IuZGVzY3JpcHRpb24sXG4gICAgYWN0RWxlbSxcbiAgICByZWN0LngsXG4gICAgcmVjdC55ICsgMzUsXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcImFjdG9yXCIgfSxcbiAgICBjb25mMlxuICApO1xuICByZXR1cm4gYWN0b3IuaGVpZ2h0O1xufTtcbmNvbnN0IGRyYXdBY3RvciA9IGZ1bmN0aW9uKGVsZW0sIGFjdG9yLCBjb25mMiwgaXNGb290ZXIpIHtcbiAgc3dpdGNoIChhY3Rvci50eXBlKSB7XG4gICAgY2FzZSBcImFjdG9yXCI6XG4gICAgICByZXR1cm4gZHJhd0FjdG9yVHlwZUFjdG9yKGVsZW0sIGFjdG9yLCBjb25mMiwgaXNGb290ZXIpO1xuICAgIGNhc2UgXCJwYXJ0aWNpcGFudFwiOlxuICAgICAgcmV0dXJuIGRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudChlbGVtLCBhY3RvciwgY29uZjIsIGlzRm9vdGVyKTtcbiAgfVxufTtcbmNvbnN0IGRyYXdCb3ggPSBmdW5jdGlvbihlbGVtLCBib3gsIGNvbmYyKSB7XG4gIGNvbnN0IGJveHBsdXN0ZXh0R3JvdXAgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IGcgPSBib3hwbHVzdGV4dEdyb3VwO1xuICBkcmF3QmFja2dyb3VuZFJlY3QoZywgYm94KTtcbiAgaWYgKGJveC5uYW1lKSB7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICBib3gubmFtZSxcbiAgICAgIGcsXG4gICAgICBib3gueCxcbiAgICAgIGJveC55ICsgKGJveC50ZXh0TWF4SGVpZ2h0IHx8IDApIC8gMixcbiAgICAgIGJveC53aWR0aCxcbiAgICAgIDAsXG4gICAgICB7IGNsYXNzOiBcInRleHRcIiB9LFxuICAgICAgY29uZjJcbiAgICApO1xuICB9XG4gIGcubG93ZXIoKTtcbn07XG5jb25zdCBhbmNob3JFbGVtZW50ID0gZnVuY3Rpb24oZWxlbSkge1xuICByZXR1cm4gZWxlbS5hcHBlbmQoXCJnXCIpO1xufTtcbmNvbnN0IGRyYXdBY3RpdmF0aW9uID0gZnVuY3Rpb24oZWxlbSwgYm91bmRzMiwgdmVydGljYWxQb3MsIGNvbmYyLCBhY3RvckFjdGl2YXRpb25zMikge1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QkMSgpO1xuICBjb25zdCBnID0gYm91bmRzMi5hbmNob3JlZDtcbiAgcmVjdC54ID0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QueSA9IGJvdW5kczIuc3RhcnR5O1xuICByZWN0LmNsYXNzID0gXCJhY3RpdmF0aW9uXCIgKyBhY3RvckFjdGl2YXRpb25zMiAlIDM7XG4gIHJlY3Qud2lkdGggPSBib3VuZHMyLnN0b3B4IC0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QuaGVpZ2h0ID0gdmVydGljYWxQb3MgLSBib3VuZHMyLnN0YXJ0eTtcbiAgZHJhd1JlY3QoZywgcmVjdCk7XG59O1xuY29uc3QgZHJhd0xvb3AgPSBmdW5jdGlvbihlbGVtLCBsb29wTW9kZWwsIGxhYmVsVGV4dCwgY29uZjIpIHtcbiAgY29uc3Qge1xuICAgIGJveE1hcmdpbixcbiAgICBib3hUZXh0TWFyZ2luLFxuICAgIGxhYmVsQm94SGVpZ2h0LFxuICAgIGxhYmVsQm94V2lkdGgsXG4gICAgbWVzc2FnZUZvbnRGYW1pbHk6IGZvbnRGYW1pbHksXG4gICAgbWVzc2FnZUZvbnRTaXplOiBmb250U2l6ZSxcbiAgICBtZXNzYWdlRm9udFdlaWdodDogZm9udFdlaWdodFxuICB9ID0gY29uZjI7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IGRyYXdMb29wTGluZSA9IGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICByZXR1cm4gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBzdGFydHgpLmF0dHIoXCJ5MVwiLCBzdGFydHkpLmF0dHIoXCJ4MlwiLCBzdG9weCkuYXR0cihcInkyXCIsIHN0b3B5KS5hdHRyKFwiY2xhc3NcIiwgXCJsb29wTGluZVwiKTtcbiAgfTtcbiAgZHJhd0xvb3BMaW5lKGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdGFydHksIGxvb3BNb2RlbC5zdG9weCwgbG9vcE1vZGVsLnN0YXJ0eSk7XG4gIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RvcHgsIGxvb3BNb2RlbC5zdGFydHksIGxvb3BNb2RlbC5zdG9weCwgbG9vcE1vZGVsLnN0b3B5KTtcbiAgZHJhd0xvb3BMaW5lKGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdG9weSwgbG9vcE1vZGVsLnN0b3B4LCBsb29wTW9kZWwuc3RvcHkpO1xuICBkcmF3TG9vcExpbmUobG9vcE1vZGVsLnN0YXJ0eCwgbG9vcE1vZGVsLnN0YXJ0eSwgbG9vcE1vZGVsLnN0YXJ0eCwgbG9vcE1vZGVsLnN0b3B5KTtcbiAgaWYgKGxvb3BNb2RlbC5zZWN0aW9ucyAhPT0gdm9pZCAwKSB7XG4gICAgbG9vcE1vZGVsLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgZHJhd0xvb3BMaW5lKGxvb3BNb2RlbC5zdGFydHgsIGl0ZW0ueSwgbG9vcE1vZGVsLnN0b3B4LCBpdGVtLnkpLnN0eWxlKFxuICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIixcbiAgICAgICAgXCIzLCAzXCJcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgbGV0IHR4dCA9IGdldFRleHRPYmokMSgpO1xuICB0eHQudGV4dCA9IGxhYmVsVGV4dDtcbiAgdHh0LnggPSBsb29wTW9kZWwuc3RhcnR4O1xuICB0eHQueSA9IGxvb3BNb2RlbC5zdGFydHk7XG4gIHR4dC5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgdHh0LmZvbnRTaXplID0gZm9udFNpemU7XG4gIHR4dC5mb250V2VpZ2h0ID0gZm9udFdlaWdodDtcbiAgdHh0LmFuY2hvciA9IFwibWlkZGxlXCI7XG4gIHR4dC52YWxpZ24gPSBcIm1pZGRsZVwiO1xuICB0eHQudHNwYW4gPSBmYWxzZTtcbiAgdHh0LndpZHRoID0gbGFiZWxCb3hXaWR0aCB8fCA1MDtcbiAgdHh0LmhlaWdodCA9IGxhYmVsQm94SGVpZ2h0IHx8IDIwO1xuICB0eHQudGV4dE1hcmdpbiA9IGJveFRleHRNYXJnaW47XG4gIHR4dC5jbGFzcyA9IFwibGFiZWxUZXh0XCI7XG4gIGRyYXdMYWJlbChnLCB0eHQpO1xuICB0eHQgPSBnZXRUZXh0T2JqKCk7XG4gIHR4dC50ZXh0ID0gbG9vcE1vZGVsLnRpdGxlO1xuICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHggKyBsYWJlbEJveFdpZHRoIC8gMiArIChsb29wTW9kZWwuc3RvcHggLSBsb29wTW9kZWwuc3RhcnR4KSAvIDI7XG4gIHR4dC55ID0gbG9vcE1vZGVsLnN0YXJ0eSArIGJveE1hcmdpbiArIGJveFRleHRNYXJnaW47XG4gIHR4dC5hbmNob3IgPSBcIm1pZGRsZVwiO1xuICB0eHQudmFsaWduID0gXCJtaWRkbGVcIjtcbiAgdHh0LnRleHRNYXJnaW4gPSBib3hUZXh0TWFyZ2luO1xuICB0eHQuY2xhc3MgPSBcImxvb3BUZXh0XCI7XG4gIHR4dC5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgdHh0LmZvbnRTaXplID0gZm9udFNpemU7XG4gIHR4dC5mb250V2VpZ2h0ID0gZm9udFdlaWdodDtcbiAgdHh0LndyYXAgPSB0cnVlO1xuICBsZXQgdGV4dEVsZW0gPSBkcmF3VGV4dChnLCB0eHQpO1xuICBpZiAobG9vcE1vZGVsLnNlY3Rpb25UaXRsZXMgIT09IHZvaWQgMCkge1xuICAgIGxvb3BNb2RlbC5zZWN0aW9uVGl0bGVzLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaWR4KSB7XG4gICAgICBpZiAoaXRlbS5tZXNzYWdlKSB7XG4gICAgICAgIHR4dC50ZXh0ID0gaXRlbS5tZXNzYWdlO1xuICAgICAgICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHggKyAobG9vcE1vZGVsLnN0b3B4IC0gbG9vcE1vZGVsLnN0YXJ0eCkgLyAyO1xuICAgICAgICB0eHQueSA9IGxvb3BNb2RlbC5zZWN0aW9uc1tpZHhdLnkgKyBib3hNYXJnaW4gKyBib3hUZXh0TWFyZ2luO1xuICAgICAgICB0eHQuY2xhc3MgPSBcImxvb3BUZXh0XCI7XG4gICAgICAgIHR4dC5hbmNob3IgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0eHQudmFsaWduID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdHh0LnRzcGFuID0gZmFsc2U7XG4gICAgICAgIHR4dC5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgICAgICAgdHh0LmZvbnRTaXplID0gZm9udFNpemU7XG4gICAgICAgIHR4dC5mb250V2VpZ2h0ID0gZm9udFdlaWdodDtcbiAgICAgICAgdHh0LndyYXAgPSBsb29wTW9kZWwud3JhcDtcbiAgICAgICAgdGV4dEVsZW0gPSBkcmF3VGV4dChnLCB0eHQpO1xuICAgICAgICBsZXQgc2VjdGlvbkhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgdGV4dEVsZW0ubWFwKCh0ZSkgPT4gKHRlLl9ncm91cHMgfHwgdGUpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyKVxuICAgICAgICApO1xuICAgICAgICBsb29wTW9kZWwuc2VjdGlvbnNbaWR4XS5oZWlnaHQgKz0gc2VjdGlvbkhlaWdodCAtIChib3hNYXJnaW4gKyBib3hUZXh0TWFyZ2luKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBsb29wTW9kZWwuaGVpZ2h0ID0gTWF0aC5yb3VuZChsb29wTW9kZWwuc3RvcHkgLSBsb29wTW9kZWwuc3RhcnR5KTtcbiAgcmV0dXJuIGc7XG59O1xuY29uc3QgZHJhd0JhY2tncm91bmRSZWN0ID0gZnVuY3Rpb24oZWxlbSwgYm91bmRzMikge1xuICBkcmF3QmFja2dyb3VuZFJlY3QkMShlbGVtLCBib3VuZHMyKTtcbn07XG5jb25zdCBpbnNlcnREYXRhYmFzZUljb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiZGF0YWJhc2VcIikuYXR0cihcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIikuYXR0cihcImNsaXAtcnVsZVwiLCBcImV2ZW5vZGRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6XCJcbiAgKTtcbn07XG5jb25zdCBpbnNlcnRDb21wdXRlckljb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY29tcHV0ZXJcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3pcIlxuICApO1xufTtcbmNvbnN0IGluc2VydENsb2NrSWNvbiA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjbG9ja1wiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExelwiXG4gICk7XG59O1xuY29uc3QgaW5zZXJ0QXJyb3dIZWFkID0gZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImFycm93aGVhZFwiKS5hdHRyKFwicmVmWFwiLCA5KS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAgMCBMIDEwIDUgTCAwIDEwIHpcIik7XG59O1xuY29uc3QgaW5zZXJ0QXJyb3dGaWxsZWRIZWFkID0gZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImZpbGxlZC1oZWFkXCIpLmF0dHIoXCJyZWZYXCIsIDE4KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IGluc2VydFNlcXVlbmNlTnVtYmVyID0gZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcInNlcXVlbmNlbnVtYmVyXCIpLmF0dHIoXCJyZWZYXCIsIDE1KS5hdHRyKFwicmVmWVwiLCAxNSkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDYwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIDE1KS5hdHRyKFwiY3lcIiwgMTUpLmF0dHIoXCJyXCIsIDYpO1xufTtcbmNvbnN0IGluc2VydEFycm93Q3Jvc3NIZWFkID0gZnVuY3Rpb24oZWxlbSkge1xuICBjb25zdCBkZWZzID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpO1xuICBjb25zdCBtYXJrZXIgPSBkZWZzLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJjcm9zc2hlYWRcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmF0dHIoXCJyZWZYXCIsIDQpLmF0dHIoXCJyZWZZXCIsIDUpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZVwiLCBcIiMwMDAwMDBcIikuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMCwgMFwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB0XCIpLmF0dHIoXCJkXCIsIFwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDdcIik7XG59O1xuY29uc3QgZ2V0VGV4dE9iaiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBmaWxsOiB2b2lkIDAsXG4gICAgYW5jaG9yOiB2b2lkIDAsXG4gICAgc3R5bGU6IFwiIzY2NlwiLFxuICAgIHdpZHRoOiB2b2lkIDAsXG4gICAgaGVpZ2h0OiB2b2lkIDAsXG4gICAgdGV4dE1hcmdpbjogMCxcbiAgICByeDogMCxcbiAgICByeTogMCxcbiAgICB0c3BhbjogdHJ1ZSxcbiAgICB2YWxpZ246IHZvaWQgMFxuICB9O1xufTtcbmNvbnN0IGdldE5vdGVSZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IFwiI0VERjJBRVwiLFxuICAgIHN0cm9rZTogXCIjNjY2XCIsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBhbmNob3I6IFwic3RhcnRcIixcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICByeDogMCxcbiAgICByeTogMFxuICB9O1xufTtcbmNvbnN0IF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycykge1xuICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSArIGhlaWdodCAvIDIgKyA1KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMikge1xuICAgIGNvbnN0IHsgYWN0b3JGb250U2l6ZSwgYWN0b3JGb250RmFtaWx5LCBhY3RvckZvbnRXZWlnaHQgfSA9IGNvbmYyO1xuICAgIGNvbnN0IFtfYWN0b3JGb250U2l6ZSwgX2FjdG9yRm9udFNpemVQeF0gPSBwYXJzZUZvbnRTaXplKGFjdG9yRm9udFNpemUpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChjb21tb24ubGluZUJyZWFrUmVnZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGR5ID0gaSAqIF9hY3RvckZvbnRTaXplIC0gX2FjdG9yRm9udFNpemUgKiAobGluZXMubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1zaXplXCIsIF9hY3RvckZvbnRTaXplUHgpLnN0eWxlKFwiZm9udC13ZWlnaHRcIiwgYWN0b3JGb250V2VpZ2h0KS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGFjdG9yRm9udEZhbWlseSk7XG4gICAgICB0ZXh0LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJkeVwiLCBkeSkudGV4dChsaW5lc1tpXSk7XG4gICAgICB0ZXh0LmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpIHtcbiAgICBjb25zdCBzID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IHMuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIHMsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBmdW5jdGlvbiBfc2V0VGV4dEF0dHJzKHRvVGV4dCwgZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgaWYgKGZyb21UZXh0QXR0cnNEaWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdG9UZXh0LmF0dHIoa2V5LCBmcm9tVGV4dEF0dHJzRGljdFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbmYyKSB7XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbmNvbnN0IF9kcmF3TWVudUl0ZW1UZXh0Q2FuZGlkYXRlRnVuYyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBieVRleHQoY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBhY3RvckZvbnRTaXplLCBhY3RvckZvbnRGYW1pbHksIGFjdG9yRm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZHkgPSBpICogYWN0b3JGb250U2l6ZSAtIGFjdG9yRm9udFNpemUgKiAobGluZXMubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIikuc3R5bGUoXCJmb250LXNpemVcIiwgYWN0b3JGb250U2l6ZSkuc3R5bGUoXCJmb250LXdlaWdodFwiLCBhY3RvckZvbnRXZWlnaHQpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgYWN0b3JGb250RmFtaWx5KTtcbiAgICAgIHRleHQuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInhcIiwgeCkuYXR0cihcImR5XCIsIGR5KS50ZXh0KGxpbmVzW2ldKTtcbiAgICAgIHRleHQuYXR0cihcInlcIiwgeSArIGhlaWdodCAvIDIpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImNlbnRyYWxcIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImNlbnRyYWxcIik7XG4gICAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGJ5Rm8oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMikge1xuICAgIGNvbnN0IHMgPSBnLmFwcGVuZChcInN3aXRjaFwiKTtcbiAgICBjb25zdCBmID0gcy5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpO1xuICAgIGNvbnN0IHRleHQgPSBmLmFwcGVuZChcInhodG1sOmRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZVwiKS5zdHlsZShcImhlaWdodFwiLCBcIjEwMCVcIikuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgdGV4dC5hcHBlbmQoXCJkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKS5zdHlsZShcInRleHQtYWxpZ25cIiwgXCJjZW50ZXJcIikuc3R5bGUoXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIGJ5VHNwYW4oY29udGVudCwgcywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMik7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIGZ1bmN0aW9uIF9zZXRUZXh0QXR0cnModG9UZXh0LCBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICBpZiAoZnJvbVRleHRBdHRyc0RpY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB0b1RleHQuYXR0cihrZXksIGZyb21UZXh0QXR0cnNEaWN0W2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oY29uZjIpIHtcbiAgICByZXR1cm4gY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwib2xkXCIgPyBieVRleHQgOiBieVRzcGFuO1xuICB9O1xufSgpO1xuY29uc3Qgc3ZnRHJhdyA9IHtcbiAgZHJhd1JlY3QsXG4gIGRyYXdUZXh0LFxuICBkcmF3TGFiZWwsXG4gIGRyYXdBY3RvcixcbiAgZHJhd0JveCxcbiAgZHJhd1BvcHVwLFxuICBhbmNob3JFbGVtZW50LFxuICBkcmF3QWN0aXZhdGlvbixcbiAgZHJhd0xvb3AsXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgaW5zZXJ0QXJyb3dIZWFkLFxuICBpbnNlcnRBcnJvd0ZpbGxlZEhlYWQsXG4gIGluc2VydFNlcXVlbmNlTnVtYmVyLFxuICBpbnNlcnRBcnJvd0Nyb3NzSGVhZCxcbiAgaW5zZXJ0RGF0YWJhc2VJY29uLFxuICBpbnNlcnRDb21wdXRlckljb24sXG4gIGluc2VydENsb2NrSWNvbixcbiAgZ2V0VGV4dE9iaixcbiAgZ2V0Tm90ZVJlY3QsXG4gIHBvcHVwTWVudSxcbiAgcG9wZG93bk1lbnUsXG4gIGZpeExpZmVMaW5lSGVpZ2h0cyxcbiAgc2FuaXRpemVVcmxcbn07XG5sZXQgY29uZiA9IHt9O1xuY29uc3QgYm91bmRzID0ge1xuICBkYXRhOiB7XG4gICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgc3RvcHg6IHZvaWQgMCxcbiAgICBzdGFydHk6IHZvaWQgMCxcbiAgICBzdG9weTogdm9pZCAwXG4gIH0sXG4gIHZlcnRpY2FsUG9zOiAwLFxuICBzZXF1ZW5jZUl0ZW1zOiBbXSxcbiAgYWN0aXZhdGlvbnM6IFtdLFxuICBtb2RlbHM6IHtcbiAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmFjdG9ycy5sZW5ndGggPT09IDAgPyBbMF0gOiB0aGlzLmFjdG9ycy5tYXAoKGFjdG9yKSA9PiBhY3Rvci5oZWlnaHQgfHwgMClcbiAgICAgICkgKyAodGhpcy5sb29wcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5sb29wcy5tYXAoKGl0KSA9PiBpdC5oZWlnaHQgfHwgMCkucmVkdWNlKChhY2MsIGgpID0+IGFjYyArIGgpKSArICh0aGlzLm1lc3NhZ2VzLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLm1lc3NhZ2VzLm1hcCgoaXQpID0+IGl0LmhlaWdodCB8fCAwKS5yZWR1Y2UoKGFjYywgaCkgPT4gYWNjICsgaCkpICsgKHRoaXMubm90ZXMubGVuZ3RoID09PSAwID8gMCA6IHRoaXMubm90ZXMubWFwKChpdCkgPT4gaXQuaGVpZ2h0IHx8IDApLnJlZHVjZSgoYWNjLCBoKSA9PiBhY2MgKyBoKSk7XG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmFjdG9ycyA9IFtdO1xuICAgICAgdGhpcy5ib3hlcyA9IFtdO1xuICAgICAgdGhpcy5sb29wcyA9IFtdO1xuICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICAgICAgdGhpcy5ub3RlcyA9IFtdO1xuICAgIH0sXG4gICAgYWRkQm94OiBmdW5jdGlvbihib3hNb2RlbCkge1xuICAgICAgdGhpcy5ib3hlcy5wdXNoKGJveE1vZGVsKTtcbiAgICB9LFxuICAgIGFkZEFjdG9yOiBmdW5jdGlvbihhY3Rvck1vZGVsKSB7XG4gICAgICB0aGlzLmFjdG9ycy5wdXNoKGFjdG9yTW9kZWwpO1xuICAgIH0sXG4gICAgYWRkTG9vcDogZnVuY3Rpb24obG9vcE1vZGVsKSB7XG4gICAgICB0aGlzLmxvb3BzLnB1c2gobG9vcE1vZGVsKTtcbiAgICB9LFxuICAgIGFkZE1lc3NhZ2U6IGZ1bmN0aW9uKG1zZ01vZGVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnTW9kZWwpO1xuICAgIH0sXG4gICAgYWRkTm90ZTogZnVuY3Rpb24obm90ZU1vZGVsKSB7XG4gICAgICB0aGlzLm5vdGVzLnB1c2gobm90ZU1vZGVsKTtcbiAgICB9LFxuICAgIGxhc3RBY3RvcjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoIC0gMV07XG4gICAgfSxcbiAgICBsYXN0TG9vcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aCAtIDFdO1xuICAgIH0sXG4gICAgbGFzdE1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICB9LFxuICAgIGxhc3ROb3RlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoIC0gMV07XG4gICAgfSxcbiAgICBhY3RvcnM6IFtdLFxuICAgIGJveGVzOiBbXSxcbiAgICBsb29wczogW10sXG4gICAgbWVzc2FnZXM6IFtdLFxuICAgIG5vdGVzOiBbXVxuICB9LFxuICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNlcXVlbmNlSXRlbXMgPSBbXTtcbiAgICB0aGlzLmFjdGl2YXRpb25zID0gW107XG4gICAgdGhpcy5tb2RlbHMuY2xlYXIoKTtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBzdGFydHg6IHZvaWQgMCxcbiAgICAgIHN0b3B4OiB2b2lkIDAsXG4gICAgICBzdGFydHk6IHZvaWQgMCxcbiAgICAgIHN0b3B5OiB2b2lkIDBcbiAgICB9O1xuICAgIHRoaXMudmVydGljYWxQb3MgPSAwO1xuICAgIHNldENvbmYoZ2V0Q29uZmlnKCkpO1xuICB9LFxuICB1cGRhdGVWYWw6IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWwsIGZ1bikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBvYmpba2V5XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSBmdW4odmFsLCBvYmpba2V5XSk7XG4gICAgfVxuICB9LFxuICB1cGRhdGVCb3VuZHM6IGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICBjb25zdCBfc2VsZiA9IHRoaXM7XG4gICAgbGV0IGNudCA9IDA7XG4gICAgZnVuY3Rpb24gdXBkYXRlRm4odHlwZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1Cb3VuZHMoaXRlbSkge1xuICAgICAgICBjbnQrKztcbiAgICAgICAgY29uc3QgbiA9IF9zZWxmLnNlcXVlbmNlSXRlbXMubGVuZ3RoIC0gY250ICsgMTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5tYXgpO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHhcIiwgc3RvcHggKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICAgIF9zZWxmLnVwZGF0ZVZhbChpdGVtLCBcInN0b3B4XCIsIHN0b3B4ICsgbiAqIGNvbmYuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eVwiLCBzdGFydHkgLSBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2godXBkYXRlRm4oKSk7XG4gICAgdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKHVwZGF0ZUZuKFwiYWN0aXZhdGlvblwiKSk7XG4gIH0sXG4gIGluc2VydDogZnVuY3Rpb24oc3RhcnR4LCBzdGFydHksIHN0b3B4LCBzdG9weSkge1xuICAgIGNvbnN0IF9zdGFydHggPSBjb21tb24uZ2V0TWluKHN0YXJ0eCwgc3RvcHgpO1xuICAgIGNvbnN0IF9zdG9weCA9IGNvbW1vbi5nZXRNYXgoc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0YXJ0eSA9IGNvbW1vbi5nZXRNaW4oc3RhcnR5LCBzdG9weSk7XG4gICAgY29uc3QgX3N0b3B5ID0gY29tbW9uLmdldE1heChzdGFydHksIHN0b3B5KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdGFydHhcIiwgX3N0YXJ0eCwgTWF0aC5taW4pO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eVwiLCBfc3RhcnR5LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHhcIiwgX3N0b3B4LCBNYXRoLm1heCk7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgX3N0b3B5LCBNYXRoLm1heCk7XG4gICAgdGhpcy51cGRhdGVCb3VuZHMoX3N0YXJ0eCwgX3N0YXJ0eSwgX3N0b3B4LCBfc3RvcHkpO1xuICB9LFxuICBuZXdBY3RpdmF0aW9uOiBmdW5jdGlvbihtZXNzYWdlLCBkaWFncmFtMiwgYWN0b3JzMikge1xuICAgIGNvbnN0IGFjdG9yUmVjdCA9IGFjdG9yczJbbWVzc2FnZS5mcm9tLmFjdG9yXTtcbiAgICBjb25zdCBzdGFja2VkU2l6ZSA9IGFjdG9yQWN0aXZhdGlvbnMobWVzc2FnZS5mcm9tLmFjdG9yKS5sZW5ndGggfHwgMDtcbiAgICBjb25zdCB4ID0gYWN0b3JSZWN0LnggKyBhY3RvclJlY3Qud2lkdGggLyAyICsgKHN0YWNrZWRTaXplIC0gMSkgKiBjb25mLmFjdGl2YXRpb25XaWR0aCAvIDI7XG4gICAgdGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtcbiAgICAgIHN0YXJ0eDogeCxcbiAgICAgIHN0YXJ0eTogdGhpcy52ZXJ0aWNhbFBvcyArIDIsXG4gICAgICBzdG9weDogeCArIGNvbmYuYWN0aXZhdGlvbldpZHRoLFxuICAgICAgc3RvcHk6IHZvaWQgMCxcbiAgICAgIGFjdG9yOiBtZXNzYWdlLmZyb20uYWN0b3IsXG4gICAgICBhbmNob3JlZDogc3ZnRHJhdy5hbmNob3JFbGVtZW50KGRpYWdyYW0yKVxuICAgIH0pO1xuICB9LFxuICBlbmRBY3RpdmF0aW9uOiBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgY29uc3QgbGFzdEFjdG9yQWN0aXZhdGlvbklkeCA9IHRoaXMuYWN0aXZhdGlvbnMubWFwKGZ1bmN0aW9uKGFjdGl2YXRpb24pIHtcbiAgICAgIHJldHVybiBhY3RpdmF0aW9uLmFjdG9yO1xuICAgIH0pLmxhc3RJbmRleE9mKG1lc3NhZ2UuZnJvbS5hY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGxhc3RBY3RvckFjdGl2YXRpb25JZHgsIDEpWzBdO1xuICB9LFxuICBjcmVhdGVMb29wOiBmdW5jdGlvbih0aXRsZSA9IHsgbWVzc2FnZTogdm9pZCAwLCB3cmFwOiBmYWxzZSwgd2lkdGg6IHZvaWQgMCB9LCBmaWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0eDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB0aGlzLnZlcnRpY2FsUG9zLFxuICAgICAgc3RvcHg6IHZvaWQgMCxcbiAgICAgIHN0b3B5OiB2b2lkIDAsXG4gICAgICB0aXRsZTogdGl0bGUubWVzc2FnZSxcbiAgICAgIHdyYXA6IHRpdGxlLndyYXAsXG4gICAgICB3aWR0aDogdGl0bGUud2lkdGgsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBmaWxsXG4gICAgfTtcbiAgfSxcbiAgbmV3TG9vcDogZnVuY3Rpb24odGl0bGUgPSB7IG1lc3NhZ2U6IHZvaWQgMCwgd3JhcDogZmFsc2UsIHdpZHRoOiB2b2lkIDAgfSwgZmlsbCkge1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0aXRsZSwgZmlsbCkpO1xuICB9LFxuICBlbmRMb29wOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO1xuICB9LFxuICBpc0xvb3BPdmVybGFwOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aCA/IHRoaXMuc2VxdWVuY2VJdGVtc1t0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoIC0gMV0ub3ZlcmxhcCA6IGZhbHNlO1xuICB9LFxuICBhZGRTZWN0aW9uVG9Mb29wOiBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgY29uc3QgbG9vcCA9IHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtcbiAgICBsb29wLnNlY3Rpb25zID0gbG9vcC5zZWN0aW9ucyB8fCBbXTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMgPSBsb29wLnNlY3Rpb25UaXRsZXMgfHwgW107XG4gICAgbG9vcC5zZWN0aW9ucy5wdXNoKHsgeTogYm91bmRzLmdldFZlcnRpY2FsUG9zKCksIGhlaWdodDogMCB9KTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMucHVzaChtZXNzYWdlKTtcbiAgICB0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChsb29wKTtcbiAgfSxcbiAgc2F2ZVZlcnRpY2FsUG9zOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0xvb3BPdmVybGFwKCkpIHtcbiAgICAgIHRoaXMuc2F2ZWRWZXJ0aWNhbFBvcyA9IHRoaXMudmVydGljYWxQb3M7XG4gICAgfVxuICB9LFxuICByZXNldFZlcnRpY2FsUG9zOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0xvb3BPdmVybGFwKCkpIHtcbiAgICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnNhdmVkVmVydGljYWxQb3M7XG4gICAgfVxuICB9LFxuICBidW1wVmVydGljYWxQb3M6IGZ1bmN0aW9uKGJ1bXApIHtcbiAgICB0aGlzLnZlcnRpY2FsUG9zID0gdGhpcy52ZXJ0aWNhbFBvcyArIGJ1bXA7XG4gICAgdGhpcy5kYXRhLnN0b3B5ID0gY29tbW9uLmdldE1heCh0aGlzLmRhdGEuc3RvcHksIHRoaXMudmVydGljYWxQb3MpO1xuICB9LFxuICBnZXRWZXJ0aWNhbFBvczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxQb3M7XG4gIH0sXG4gIGdldEJvdW5kczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgYm91bmRzOiB0aGlzLmRhdGEsIG1vZGVsczogdGhpcy5tb2RlbHMgfTtcbiAgfVxufTtcbmNvbnN0IGRyYXdOb3RlID0gZnVuY3Rpb24oZWxlbSwgbm90ZU1vZGVsKSB7XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3MoY29uZi5ib3hNYXJnaW4pO1xuICBub3RlTW9kZWwuaGVpZ2h0ID0gY29uZi5ib3hNYXJnaW47XG4gIG5vdGVNb2RlbC5zdGFydHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0JDEoKTtcbiAgcmVjdC54ID0gbm90ZU1vZGVsLnN0YXJ0eDtcbiAgcmVjdC55ID0gbm90ZU1vZGVsLnN0YXJ0eTtcbiAgcmVjdC53aWR0aCA9IG5vdGVNb2RlbC53aWR0aCB8fCBjb25mLndpZHRoO1xuICByZWN0LmNsYXNzID0gXCJub3RlXCI7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHJlY3RFbGVtID0gc3ZnRHJhdy5kcmF3UmVjdChnLCByZWN0KTtcbiAgY29uc3QgdGV4dE9iaiA9IGdldFRleHRPYmokMSgpO1xuICB0ZXh0T2JqLnggPSBub3RlTW9kZWwuc3RhcnR4O1xuICB0ZXh0T2JqLnkgPSBub3RlTW9kZWwuc3RhcnR5O1xuICB0ZXh0T2JqLndpZHRoID0gcmVjdC53aWR0aDtcbiAgdGV4dE9iai5keSA9IFwiMWVtXCI7XG4gIHRleHRPYmoudGV4dCA9IG5vdGVNb2RlbC5tZXNzYWdlO1xuICB0ZXh0T2JqLmNsYXNzID0gXCJub3RlVGV4dFwiO1xuICB0ZXh0T2JqLmZvbnRGYW1pbHkgPSBjb25mLm5vdGVGb250RmFtaWx5O1xuICB0ZXh0T2JqLmZvbnRTaXplID0gY29uZi5ub3RlRm9udFNpemU7XG4gIHRleHRPYmouZm9udFdlaWdodCA9IGNvbmYubm90ZUZvbnRXZWlnaHQ7XG4gIHRleHRPYmouYW5jaG9yID0gY29uZi5ub3RlQWxpZ247XG4gIHRleHRPYmoudGV4dE1hcmdpbiA9IGNvbmYubm90ZU1hcmdpbjtcbiAgdGV4dE9iai52YWxpZ24gPSBcImNlbnRlclwiO1xuICBjb25zdCB0ZXh0RWxlbSA9IGRyYXdUZXh0KGcsIHRleHRPYmopO1xuICBjb25zdCB0ZXh0SGVpZ2h0ID0gTWF0aC5yb3VuZChcbiAgICB0ZXh0RWxlbS5tYXAoKHRlKSA9PiAodGUuX2dyb3VwcyB8fCB0ZSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIpXG4gICk7XG4gIHJlY3RFbGVtLmF0dHIoXCJoZWlnaHRcIiwgdGV4dEhlaWdodCArIDIgKiBjb25mLm5vdGVNYXJnaW4pO1xuICBub3RlTW9kZWwuaGVpZ2h0ICs9IHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luKTtcbiAgbm90ZU1vZGVsLnN0b3B5ID0gbm90ZU1vZGVsLnN0YXJ0eSArIHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBub3RlTW9kZWwuc3RvcHggPSBub3RlTW9kZWwuc3RhcnR4ICsgcmVjdC53aWR0aDtcbiAgYm91bmRzLmluc2VydChub3RlTW9kZWwuc3RhcnR4LCBub3RlTW9kZWwuc3RhcnR5LCBub3RlTW9kZWwuc3RvcHgsIG5vdGVNb2RlbC5zdG9weSk7XG4gIGJvdW5kcy5tb2RlbHMuYWRkTm90ZShub3RlTW9kZWwpO1xufTtcbmNvbnN0IG1lc3NhZ2VGb250ID0gKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5tZXNzYWdlRm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogY25mLm1lc3NhZ2VGb250U2l6ZSxcbiAgICBmb250V2VpZ2h0OiBjbmYubWVzc2FnZUZvbnRXZWlnaHRcbiAgfTtcbn07XG5jb25zdCBub3RlRm9udCA9IChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubm90ZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5ub3RlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm5vdGVGb250V2VpZ2h0XG4gIH07XG59O1xuY29uc3QgYWN0b3JGb250ID0gKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5hY3RvckZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5hY3RvckZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IGNuZi5hY3RvckZvbnRXZWlnaHRcbiAgfTtcbn07XG5mdW5jdGlvbiBib3VuZE1lc3NhZ2UoX2RpYWdyYW0sIG1zZ01vZGVsKSB7XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3MoMTApO1xuICBjb25zdCB7IHN0YXJ0eCwgc3RvcHgsIG1lc3NhZ2UgfSA9IG1zZ01vZGVsO1xuICBjb25zdCBsaW5lcyA9IGNvbW1vbi5zcGxpdEJyZWFrcyhtZXNzYWdlKS5sZW5ndGg7XG4gIGNvbnN0IHRleHREaW1zID0gdXRpbHMuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobWVzc2FnZSwgbWVzc2FnZUZvbnQoY29uZikpO1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gdGV4dERpbXMuaGVpZ2h0IC8gbGluZXM7XG4gIG1zZ01vZGVsLmhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxpbmVIZWlnaHQpO1xuICBsZXQgbGluZVN0YXJ0WTtcbiAgbGV0IHRvdGFsT2Zmc2V0ID0gdGV4dERpbXMuaGVpZ2h0IC0gMTA7XG4gIGNvbnN0IHRleHRXaWR0aCA9IHRleHREaW1zLndpZHRoO1xuICBpZiAoc3RhcnR4ID09PSBzdG9weCkge1xuICAgIGxpbmVTdGFydFkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSArIHRvdGFsT2Zmc2V0O1xuICAgIGlmICghY29uZi5yaWdodEFuZ2xlcykge1xuICAgICAgdG90YWxPZmZzZXQgKz0gY29uZi5ib3hNYXJnaW47XG4gICAgICBsaW5lU3RhcnRZID0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkgKyB0b3RhbE9mZnNldDtcbiAgICB9XG4gICAgdG90YWxPZmZzZXQgKz0gMzA7XG4gICAgY29uc3QgZHggPSBjb21tb24uZ2V0TWF4KHRleHRXaWR0aCAvIDIsIGNvbmYud2lkdGggLyAyKTtcbiAgICBib3VuZHMuaW5zZXJ0KFxuICAgICAgc3RhcnR4IC0gZHgsXG4gICAgICBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSAtIDEwICsgdG90YWxPZmZzZXQsXG4gICAgICBzdG9weCArIGR4LFxuICAgICAgYm91bmRzLmdldFZlcnRpY2FsUG9zKCkgKyAzMCArIHRvdGFsT2Zmc2V0XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0b3RhbE9mZnNldCArPSBjb25mLmJveE1hcmdpbjtcbiAgICBsaW5lU3RhcnRZID0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkgKyB0b3RhbE9mZnNldDtcbiAgICBib3VuZHMuaW5zZXJ0KHN0YXJ0eCwgbGluZVN0YXJ0WSAtIDEwLCBzdG9weCwgbGluZVN0YXJ0WSk7XG4gIH1cbiAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyh0b3RhbE9mZnNldCk7XG4gIG1zZ01vZGVsLmhlaWdodCArPSB0b3RhbE9mZnNldDtcbiAgbXNnTW9kZWwuc3RvcHkgPSBtc2dNb2RlbC5zdGFydHkgKyBtc2dNb2RlbC5oZWlnaHQ7XG4gIGJvdW5kcy5pbnNlcnQobXNnTW9kZWwuZnJvbUJvdW5kcywgbXNnTW9kZWwuc3RhcnR5LCBtc2dNb2RlbC50b0JvdW5kcywgbXNnTW9kZWwuc3RvcHkpO1xuICByZXR1cm4gbGluZVN0YXJ0WTtcbn1cbmNvbnN0IGRyYXdNZXNzYWdlID0gZnVuY3Rpb24oZGlhZ3JhbTIsIG1zZ01vZGVsLCBsaW5lU3RhcnRZLCBkaWFnT2JqKSB7XG4gIGNvbnN0IHsgc3RhcnR4LCBzdG9weCwgc3RhcnR5LCBtZXNzYWdlLCB0eXBlLCBzZXF1ZW5jZUluZGV4LCBzZXF1ZW5jZVZpc2libGUgfSA9IG1zZ01vZGVsO1xuICBjb25zdCB0ZXh0RGltcyA9IHV0aWxzLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG1lc3NhZ2UsIG1lc3NhZ2VGb250KGNvbmYpKTtcbiAgY29uc3QgdGV4dE9iaiA9IGdldFRleHRPYmokMSgpO1xuICB0ZXh0T2JqLnggPSBzdGFydHg7XG4gIHRleHRPYmoueSA9IHN0YXJ0eSArIDEwO1xuICB0ZXh0T2JqLndpZHRoID0gc3RvcHggLSBzdGFydHg7XG4gIHRleHRPYmouY2xhc3MgPSBcIm1lc3NhZ2VUZXh0XCI7XG4gIHRleHRPYmouZHkgPSBcIjFlbVwiO1xuICB0ZXh0T2JqLnRleHQgPSBtZXNzYWdlO1xuICB0ZXh0T2JqLmZvbnRGYW1pbHkgPSBjb25mLm1lc3NhZ2VGb250RmFtaWx5O1xuICB0ZXh0T2JqLmZvbnRTaXplID0gY29uZi5tZXNzYWdlRm9udFNpemU7XG4gIHRleHRPYmouZm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQ7XG4gIHRleHRPYmouYW5jaG9yID0gY29uZi5tZXNzYWdlQWxpZ247XG4gIHRleHRPYmoudmFsaWduID0gXCJjZW50ZXJcIjtcbiAgdGV4dE9iai50ZXh0TWFyZ2luID0gY29uZi53cmFwUGFkZGluZztcbiAgdGV4dE9iai50c3BhbiA9IGZhbHNlO1xuICBkcmF3VGV4dChkaWFncmFtMiwgdGV4dE9iaik7XG4gIGNvbnN0IHRleHRXaWR0aCA9IHRleHREaW1zLndpZHRoO1xuICBsZXQgbGluZTtcbiAgaWYgKHN0YXJ0eCA9PT0gc3RvcHgpIHtcbiAgICBpZiAoY29uZi5yaWdodEFuZ2xlcykge1xuICAgICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIGBNICAke3N0YXJ0eH0sJHtsaW5lU3RhcnRZfSBIICR7c3RhcnR4ICsgY29tbW9uLmdldE1heChjb25mLndpZHRoIC8gMiwgdGV4dFdpZHRoIC8gMil9IFYgJHtsaW5lU3RhcnRZICsgMjV9IEggJHtzdGFydHh9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTSBcIiArIHN0YXJ0eCArIFwiLFwiICsgbGluZVN0YXJ0WSArIFwiIEMgXCIgKyAoc3RhcnR4ICsgNjApICsgXCIsXCIgKyAobGluZVN0YXJ0WSAtIDEwKSArIFwiIFwiICsgKHN0YXJ0eCArIDYwKSArIFwiLFwiICsgKGxpbmVTdGFydFkgKyAzMCkgKyBcIiBcIiArIHN0YXJ0eCArIFwiLFwiICsgKGxpbmVTdGFydFkgKyAyMClcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxpbmUgPSBkaWFncmFtMi5hcHBlbmQoXCJsaW5lXCIpO1xuICAgIGxpbmUuYXR0cihcIngxXCIsIHN0YXJ0eCk7XG4gICAgbGluZS5hdHRyKFwieTFcIiwgbGluZVN0YXJ0WSk7XG4gICAgbGluZS5hdHRyKFwieDJcIiwgc3RvcHgpO1xuICAgIGxpbmUuYXR0cihcInkyXCIsIGxpbmVTdGFydFkpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRCB8fCB0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyB8fCB0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCB8fCB0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOKSB7XG4gICAgbGluZS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIzLCAzXCIpO1xuICAgIGxpbmUuYXR0cihcImNsYXNzXCIsIFwibWVzc2FnZUxpbmUxXCIpO1xuICB9IGVsc2Uge1xuICAgIGxpbmUuYXR0cihcImNsYXNzXCIsIFwibWVzc2FnZUxpbmUwXCIpO1xuICB9XG4gIGxldCB1cmwgPSBcIlwiO1xuICBpZiAoY29uZi5hcnJvd01hcmtlckFic29sdXRlKSB7XG4gICAgdXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCgvZywgXCJcXFxcKFwiKTtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwpL2csIFwiXFxcXClcIik7XG4gIH1cbiAgbGluZS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpO1xuICBsaW5lLmF0dHIoXCJzdHJva2VcIiwgXCJub25lXCIpO1xuICBsaW5lLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEKSB7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfUE9JTlQgfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjZmlsbGVkLWhlYWQpXCIpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSB7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Nyb3NzaGVhZClcIik7XG4gIH1cbiAgaWYgKHNlcXVlbmNlVmlzaWJsZSB8fCBjb25mLnNob3dTZXF1ZW5jZU51bWJlcnMpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNzZXF1ZW5jZW51bWJlcilcIik7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBzdGFydHgpLmF0dHIoXCJ5XCIsIGxpbmVTdGFydFkgKyA0KS5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpLmF0dHIoXCJmb250LXNpemVcIiwgXCIxMnB4XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJzZXF1ZW5jZU51bWJlclwiKS50ZXh0KHNlcXVlbmNlSW5kZXgpO1xuICB9XG59O1xuY29uc3QgZHJhd0FjdG9ycyA9IGZ1bmN0aW9uKGRpYWdyYW0yLCBhY3RvcnMyLCBhY3RvcktleXMsIHZlcnRpY2FsUG9zLCBjb25maWd1cmF0aW9uLCBtZXNzYWdlczIsIGlzRm9vdGVyKSB7XG4gIGlmIChjb25maWd1cmF0aW9uLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHMgPT09IHRydWUpIHtcbiAgICBjb25zdCBuZXdBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIG1lc3NhZ2VzMi5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICBuZXdBY3RvcnMuYWRkKG1lc3NhZ2UuZnJvbSk7XG4gICAgICBuZXdBY3RvcnMuYWRkKG1lc3NhZ2UudG8pO1xuICAgIH0pO1xuICAgIGFjdG9yS2V5cyA9IGFjdG9yS2V5cy5maWx0ZXIoKGFjdG9yS2V5KSA9PiBuZXdBY3RvcnMuaGFzKGFjdG9yS2V5KSk7XG4gIH1cbiAgbGV0IHByZXZXaWR0aCA9IDA7XG4gIGxldCBwcmV2TWFyZ2luID0gMDtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGxldCBwcmV2Qm94ID0gdm9pZCAwO1xuICBmb3IgKGNvbnN0IGFjdG9yS2V5IG9mIGFjdG9yS2V5cykge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzMlthY3RvcktleV07XG4gICAgY29uc3QgYm94ID0gYWN0b3IuYm94O1xuICAgIGlmIChwcmV2Qm94ICYmIHByZXZCb3ggIT0gYm94KSB7XG4gICAgICBpZiAoIWlzRm9vdGVyKSB7XG4gICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkQm94KHByZXZCb3gpO1xuICAgICAgfVxuICAgICAgcHJldk1hcmdpbiArPSBjb25mLmJveE1hcmdpbiArIHByZXZCb3gubWFyZ2luO1xuICAgIH1cbiAgICBpZiAoYm94ICYmIGJveCAhPSBwcmV2Qm94KSB7XG4gICAgICBpZiAoIWlzRm9vdGVyKSB7XG4gICAgICAgIGJveC54ID0gcHJldldpZHRoICsgcHJldk1hcmdpbjtcbiAgICAgICAgYm94LnkgPSB2ZXJ0aWNhbFBvcztcbiAgICAgIH1cbiAgICAgIHByZXZNYXJnaW4gKz0gYm94Lm1hcmdpbjtcbiAgICB9XG4gICAgYWN0b3Iud2lkdGggPSBhY3Rvci53aWR0aCB8fCBjb25mLndpZHRoO1xuICAgIGFjdG9yLmhlaWdodCA9IGNvbW1vbi5nZXRNYXgoYWN0b3IuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYWN0b3IubWFyZ2luID0gYWN0b3IubWFyZ2luIHx8IGNvbmYuYWN0b3JNYXJnaW47XG4gICAgYWN0b3IueCA9IHByZXZXaWR0aCArIHByZXZNYXJnaW47XG4gICAgYWN0b3IueSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpO1xuICAgIGNvbnN0IGhlaWdodCA9IHN2Z0RyYXcuZHJhd0FjdG9yKGRpYWdyYW0yLCBhY3RvciwgY29uZiwgaXNGb290ZXIpO1xuICAgIG1heEhlaWdodCA9IGNvbW1vbi5nZXRNYXgobWF4SGVpZ2h0LCBoZWlnaHQpO1xuICAgIGJvdW5kcy5pbnNlcnQoYWN0b3IueCwgdmVydGljYWxQb3MsIGFjdG9yLnggKyBhY3Rvci53aWR0aCwgYWN0b3IuaGVpZ2h0KTtcbiAgICBwcmV2V2lkdGggKz0gYWN0b3Iud2lkdGggKyBwcmV2TWFyZ2luO1xuICAgIGlmIChhY3Rvci5ib3gpIHtcbiAgICAgIGFjdG9yLmJveC53aWR0aCA9IHByZXZXaWR0aCArIGJveC5tYXJnaW4gLSBhY3Rvci5ib3gueDtcbiAgICB9XG4gICAgcHJldk1hcmdpbiA9IGFjdG9yLm1hcmdpbjtcbiAgICBwcmV2Qm94ID0gYWN0b3IuYm94O1xuICAgIGJvdW5kcy5tb2RlbHMuYWRkQWN0b3IoYWN0b3IpO1xuICB9XG4gIGlmIChwcmV2Qm94ICYmICFpc0Zvb3Rlcikge1xuICAgIGJvdW5kcy5tb2RlbHMuYWRkQm94KHByZXZCb3gpO1xuICB9XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3MobWF4SGVpZ2h0KTtcbn07XG5jb25zdCBkcmF3QWN0b3JzUG9wdXAgPSBmdW5jdGlvbihkaWFncmFtMiwgYWN0b3JzMiwgYWN0b3JLZXlzLCBkb2MpIHtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGxldCBtYXhXaWR0aCA9IDA7XG4gIGZvciAoY29uc3QgYWN0b3JLZXkgb2YgYWN0b3JLZXlzKSB7XG4gICAgY29uc3QgYWN0b3IgPSBhY3RvcnMyW2FjdG9yS2V5XTtcbiAgICBjb25zdCBtaW5NZW51V2lkdGggPSBnZXRSZXF1aXJlZFBvcHVwV2lkdGgoYWN0b3IpO1xuICAgIGNvbnN0IG1lbnVEaW1lbnNpb25zID0gc3ZnRHJhdy5kcmF3UG9wdXAoXG4gICAgICBkaWFncmFtMixcbiAgICAgIGFjdG9yLFxuICAgICAgbWluTWVudVdpZHRoLFxuICAgICAgY29uZixcbiAgICAgIGNvbmYuZm9yY2VNZW51cyxcbiAgICAgIGRvY1xuICAgICk7XG4gICAgaWYgKG1lbnVEaW1lbnNpb25zLmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgbWF4SGVpZ2h0ID0gbWVudURpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAobWVudURpbWVuc2lvbnMud2lkdGggKyBhY3Rvci54ID4gbWF4V2lkdGgpIHtcbiAgICAgIG1heFdpZHRoID0gbWVudURpbWVuc2lvbnMud2lkdGggKyBhY3Rvci54O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBtYXhIZWlnaHQsIG1heFdpZHRoIH07XG59O1xuY29uc3Qgc2V0Q29uZiA9IGZ1bmN0aW9uKGNuZikge1xuICBhc3NpZ25XaXRoRGVwdGgoY29uZiwgY25mKTtcbiAgaWYgKGNuZi5mb250RmFtaWx5KSB7XG4gICAgY29uZi5hY3RvckZvbnRGYW1pbHkgPSBjb25mLm5vdGVGb250RmFtaWx5ID0gY29uZi5tZXNzYWdlRm9udEZhbWlseSA9IGNuZi5mb250RmFtaWx5O1xuICB9XG4gIGlmIChjbmYuZm9udFNpemUpIHtcbiAgICBjb25mLmFjdG9yRm9udFNpemUgPSBjb25mLm5vdGVGb250U2l6ZSA9IGNvbmYubWVzc2FnZUZvbnRTaXplID0gY25mLmZvbnRTaXplO1xuICB9XG4gIGlmIChjbmYuZm9udFdlaWdodCkge1xuICAgIGNvbmYuYWN0b3JGb250V2VpZ2h0ID0gY29uZi5ub3RlRm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQgPSBjbmYuZm9udFdlaWdodDtcbiAgfVxufTtcbmNvbnN0IGFjdG9yQWN0aXZhdGlvbnMgPSBmdW5jdGlvbihhY3Rvcikge1xuICByZXR1cm4gYm91bmRzLmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihhY3RpdmF0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGl2YXRpb24uYWN0b3IgPT09IGFjdG9yO1xuICB9KTtcbn07XG5jb25zdCBhY3RpdmF0aW9uQm91bmRzID0gZnVuY3Rpb24oYWN0b3IsIGFjdG9yczIpIHtcbiAgY29uc3QgYWN0b3JPYmogPSBhY3RvcnMyW2FjdG9yXTtcbiAgY29uc3QgYWN0aXZhdGlvbnMgPSBhY3RvckFjdGl2YXRpb25zKGFjdG9yKTtcbiAgY29uc3QgbGVmdCA9IGFjdGl2YXRpb25zLnJlZHVjZShmdW5jdGlvbihhY2MsIGFjdGl2YXRpb24pIHtcbiAgICByZXR1cm4gY29tbW9uLmdldE1pbihhY2MsIGFjdGl2YXRpb24uc3RhcnR4KTtcbiAgfSwgYWN0b3JPYmoueCArIGFjdG9yT2JqLndpZHRoIC8gMik7XG4gIGNvbnN0IHJpZ2h0ID0gYWN0aXZhdGlvbnMucmVkdWNlKGZ1bmN0aW9uKGFjYywgYWN0aXZhdGlvbikge1xuICAgIHJldHVybiBjb21tb24uZ2V0TWF4KGFjYywgYWN0aXZhdGlvbi5zdG9weCk7XG4gIH0sIGFjdG9yT2JqLnggKyBhY3Rvck9iai53aWR0aCAvIDIpO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XTtcbn07XG5mdW5jdGlvbiBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChsb29wV2lkdGhzLCBtc2csIHByZU1hcmdpbiwgcG9zdE1hcmdpbiwgYWRkTG9vcEZuKSB7XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3MocHJlTWFyZ2luKTtcbiAgbGV0IGhlaWdodEFkanVzdCA9IHBvc3RNYXJnaW47XG4gIGlmIChtc2cuaWQgJiYgbXNnLm1lc3NhZ2UgJiYgbG9vcFdpZHRoc1ttc2cuaWRdKSB7XG4gICAgY29uc3QgbG9vcFdpZHRoID0gbG9vcFdpZHRoc1ttc2cuaWRdLndpZHRoO1xuICAgIGNvbnN0IHRleHRDb25mID0gbWVzc2FnZUZvbnQoY29uZik7XG4gICAgbXNnLm1lc3NhZ2UgPSB1dGlscy53cmFwTGFiZWwoYFske21zZy5tZXNzYWdlfV1gLCBsb29wV2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dENvbmYpO1xuICAgIG1zZy53aWR0aCA9IGxvb3BXaWR0aDtcbiAgICBtc2cud3JhcCA9IHRydWU7XG4gICAgY29uc3QgdGV4dERpbXMgPSB1dGlscy5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtc2cubWVzc2FnZSwgdGV4dENvbmYpO1xuICAgIGNvbnN0IHRvdGFsT2Zmc2V0ID0gY29tbW9uLmdldE1heCh0ZXh0RGltcy5oZWlnaHQsIGNvbmYubGFiZWxCb3hIZWlnaHQpO1xuICAgIGhlaWdodEFkanVzdCA9IHBvc3RNYXJnaW4gKyB0b3RhbE9mZnNldDtcbiAgICBsb2cuZGVidWcoYCR7dG90YWxPZmZzZXR9IC0gJHttc2cubWVzc2FnZX1gKTtcbiAgfVxuICBhZGRMb29wRm4obXNnKTtcbiAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhoZWlnaHRBZGp1c3QpO1xufVxuY29uc3QgZHJhdyA9IGZ1bmN0aW9uKF90ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgeyBzZWN1cml0eUxldmVsLCBzZXF1ZW5jZSB9ID0gZ2V0Q29uZmlnKCk7XG4gIGNvbmYgPSBzZXF1ZW5jZTtcbiAgZGlhZ09iai5kYi5jbGVhcigpO1xuICBkaWFnT2JqLnBhcnNlci5wYXJzZShfdGV4dCk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgYm91bmRzLmluaXQoKTtcbiAgbG9nLmRlYnVnKGRpYWdPYmouZGIpO1xuICBjb25zdCBkaWFncmFtMiA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCkgOiBzZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGFjdG9yczIgPSBkaWFnT2JqLmRiLmdldEFjdG9ycygpO1xuICBjb25zdCBib3hlczIgPSBkaWFnT2JqLmRiLmdldEJveGVzKCk7XG4gIGNvbnN0IGFjdG9yS2V5cyA9IGRpYWdPYmouZGIuZ2V0QWN0b3JLZXlzKCk7XG4gIGNvbnN0IG1lc3NhZ2VzMiA9IGRpYWdPYmouZGIuZ2V0TWVzc2FnZXMoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpO1xuICBjb25zdCBoYXNCb3hlcyA9IGRpYWdPYmouZGIuaGFzQXRMZWFzdE9uZUJveCgpO1xuICBjb25zdCBoYXNCb3hUaXRsZXMgPSBkaWFnT2JqLmRiLmhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKTtcbiAgY29uc3QgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IgPSBnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvcihhY3RvcnMyLCBtZXNzYWdlczIsIGRpYWdPYmopO1xuICBjb25mLmhlaWdodCA9IGNhbGN1bGF0ZUFjdG9yTWFyZ2lucyhhY3RvcnMyLCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciwgYm94ZXMyKTtcbiAgc3ZnRHJhdy5pbnNlcnRDb21wdXRlckljb24oZGlhZ3JhbTIpO1xuICBzdmdEcmF3Lmluc2VydERhdGFiYXNlSWNvbihkaWFncmFtMik7XG4gIHN2Z0RyYXcuaW5zZXJ0Q2xvY2tJY29uKGRpYWdyYW0yKTtcbiAgaWYgKGhhc0JveGVzKSB7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbik7XG4gICAgaWYgKGhhc0JveFRpdGxlcykge1xuICAgICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhib3hlczJbMF0udGV4dE1heEhlaWdodCk7XG4gICAgfVxuICB9XG4gIGRyYXdBY3RvcnMoZGlhZ3JhbTIsIGFjdG9yczIsIGFjdG9yS2V5cywgMCwgY29uZiwgbWVzc2FnZXMyLCBmYWxzZSk7XG4gIGNvbnN0IGxvb3BXaWR0aHMgPSBjYWxjdWxhdGVMb29wQm91bmRzKG1lc3NhZ2VzMiwgYWN0b3JzMiwgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IsIGRpYWdPYmopO1xuICBzdmdEcmF3Lmluc2VydEFycm93SGVhZChkaWFncmFtMik7XG4gIHN2Z0RyYXcuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3Lmluc2VydEFycm93RmlsbGVkSGVhZChkaWFncmFtMik7XG4gIHN2Z0RyYXcuaW5zZXJ0U2VxdWVuY2VOdW1iZXIoZGlhZ3JhbTIpO1xuICBmdW5jdGlvbiBhY3RpdmVFbmQobXNnLCB2ZXJ0aWNhbFBvcykge1xuICAgIGNvbnN0IGFjdGl2YXRpb25EYXRhID0gYm91bmRzLmVuZEFjdGl2YXRpb24obXNnKTtcbiAgICBpZiAoYWN0aXZhdGlvbkRhdGEuc3RhcnR5ICsgMTggPiB2ZXJ0aWNhbFBvcykge1xuICAgICAgYWN0aXZhdGlvbkRhdGEuc3RhcnR5ID0gdmVydGljYWxQb3MgLSA2O1xuICAgICAgdmVydGljYWxQb3MgKz0gMTI7XG4gICAgfVxuICAgIHN2Z0RyYXcuZHJhd0FjdGl2YXRpb24oXG4gICAgICBkaWFncmFtMixcbiAgICAgIGFjdGl2YXRpb25EYXRhLFxuICAgICAgdmVydGljYWxQb3MsXG4gICAgICBjb25mLFxuICAgICAgYWN0b3JBY3RpdmF0aW9ucyhtc2cuZnJvbS5hY3RvcikubGVuZ3RoXG4gICAgKTtcbiAgICBib3VuZHMuaW5zZXJ0KGFjdGl2YXRpb25EYXRhLnN0YXJ0eCwgdmVydGljYWxQb3MgLSAxMCwgYWN0aXZhdGlvbkRhdGEuc3RvcHgsIHZlcnRpY2FsUG9zKTtcbiAgfVxuICBsZXQgc2VxdWVuY2VJbmRleCA9IDE7XG4gIGxldCBzZXF1ZW5jZUluZGV4U3RlcCA9IDE7XG4gIGNvbnN0IG1lc3NhZ2VzVG9EcmF3ID0gW107XG4gIG1lc3NhZ2VzMi5mb3JFYWNoKGZ1bmN0aW9uKG1zZykge1xuICAgIGxldCBsb29wTW9kZWwsIG5vdGVNb2RlbCwgbXNnTW9kZWw7XG4gICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk5PVEU6XG4gICAgICAgIGJvdW5kcy5yZXNldFZlcnRpY2FsUG9zKCk7XG4gICAgICAgIG5vdGVNb2RlbCA9IG1zZy5ub3RlTW9kZWw7XG4gICAgICAgIGRyYXdOb3RlKGRpYWdyYW0yLCBub3RlTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6XG4gICAgICAgIGJvdW5kcy5uZXdBY3RpdmF0aW9uKG1zZywgZGlhZ3JhbTIsIGFjdG9yczIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOlxuICAgICAgICBhY3RpdmVFbmQobXNnLCBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5MT09QX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgc3ZnRHJhdy5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcImxvb3BcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUkVDVF9TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKHZvaWQgMCwgbWVzc2FnZS5tZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5SRUNUX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgc3ZnRHJhdy5kcmF3QmFja2dyb3VuZFJlY3QoZGlhZ3JhbTIsIGxvb3BNb2RlbCk7XG4gICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTG9vcChsb29wTW9kZWwpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuT1BUX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuT1BUX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgc3ZnRHJhdy5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcIm9wdFwiLCBjb25mKTtcbiAgICAgICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhsb29wTW9kZWwuc3RvcHkgLSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSk7XG4gICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTG9vcChsb29wTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfRUxTRTpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5hZGRTZWN0aW9uVG9Mb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFMVF9FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIHN2Z0RyYXcuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJhbHRcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYm91bmRzLnNhdmVWZXJ0aWNhbFBvcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfQU5EOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLmFkZFNlY3Rpb25Ub0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgc3ZnRHJhdy5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcInBhclwiLCBjb25mKTtcbiAgICAgICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhsb29wTW9kZWwuc3RvcHkgLSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSk7XG4gICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTG9vcChsb29wTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BVVRPTlVNQkVSOlxuICAgICAgICBzZXF1ZW5jZUluZGV4ID0gbXNnLm1lc3NhZ2Uuc3RhcnQgfHwgc2VxdWVuY2VJbmRleDtcbiAgICAgICAgc2VxdWVuY2VJbmRleFN0ZXAgPSBtc2cubWVzc2FnZS5zdGVwIHx8IHNlcXVlbmNlSW5kZXhTdGVwO1xuICAgICAgICBpZiAobXNnLm1lc3NhZ2UudmlzaWJsZSkge1xuICAgICAgICAgIGRpYWdPYmouZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlhZ09iai5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMuYWRkU2VjdGlvblRvTG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIHN2Z0RyYXcuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJjcml0aWNhbFwiLCBjb25mKTtcbiAgICAgICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhsb29wTW9kZWwuc3RvcHkgLSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSk7XG4gICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTG9vcChsb29wTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgc3ZnRHJhdy5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcImJyZWFrXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib3VuZHMucmVzZXRWZXJ0aWNhbFBvcygpO1xuICAgICAgICAgIG1zZ01vZGVsID0gbXNnLm1zZ01vZGVsO1xuICAgICAgICAgIG1zZ01vZGVsLnN0YXJ0eSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpO1xuICAgICAgICAgIG1zZ01vZGVsLnNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZUluZGV4O1xuICAgICAgICAgIG1zZ01vZGVsLnNlcXVlbmNlVmlzaWJsZSA9IGRpYWdPYmouZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO1xuICAgICAgICAgIGNvbnN0IGxpbmVTdGFydFkgPSBib3VuZE1lc3NhZ2UoZGlhZ3JhbTIsIG1zZ01vZGVsKTtcbiAgICAgICAgICBtZXNzYWdlc1RvRHJhdy5wdXNoKHsgbWVzc2FnZU1vZGVsOiBtc2dNb2RlbCwgbGluZVN0YXJ0WSB9KTtcbiAgICAgICAgICBib3VuZHMubW9kZWxzLmFkZE1lc3NhZ2UobXNnTW9kZWwpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlXCIsIGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChbXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRCxcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVELFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXG4gICAgXS5pbmNsdWRlcyhtc2cudHlwZSkpIHtcbiAgICAgIHNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZUluZGV4ICsgc2VxdWVuY2VJbmRleFN0ZXA7XG4gICAgfVxuICB9KTtcbiAgbWVzc2FnZXNUb0RyYXcuZm9yRWFjaCgoZSkgPT4gZHJhd01lc3NhZ2UoZGlhZ3JhbTIsIGUubWVzc2FnZU1vZGVsLCBlLmxpbmVTdGFydFksIGRpYWdPYmopKTtcbiAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbiAqIDIpO1xuICAgIGRyYXdBY3RvcnMoZGlhZ3JhbTIsIGFjdG9yczIsIGFjdG9yS2V5cywgYm91bmRzLmdldFZlcnRpY2FsUG9zKCksIGNvbmYsIG1lc3NhZ2VzMiwgdHJ1ZSk7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbik7XG4gICAgZml4TGlmZUxpbmVIZWlnaHRzKGRpYWdyYW0yLCBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSk7XG4gIH1cbiAgYm91bmRzLm1vZGVscy5ib3hlcy5mb3JFYWNoKGZ1bmN0aW9uKGJveDIpIHtcbiAgICBib3gyLmhlaWdodCA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpIC0gYm94Mi55O1xuICAgIGJvdW5kcy5pbnNlcnQoYm94Mi54LCBib3gyLnksIGJveDIueCArIGJveDIud2lkdGgsIGJveDIuaGVpZ2h0KTtcbiAgICBib3gyLnN0YXJ0eCA9IGJveDIueDtcbiAgICBib3gyLnN0YXJ0eSA9IGJveDIueTtcbiAgICBib3gyLnN0b3B4ID0gYm94Mi5zdGFydHggKyBib3gyLndpZHRoO1xuICAgIGJveDIuc3RvcHkgPSBib3gyLnN0YXJ0eSArIGJveDIuaGVpZ2h0O1xuICAgIGJveDIuc3Ryb2tlID0gXCJyZ2IoMCwwLDAsIDAuNSlcIjtcbiAgICBzdmdEcmF3LmRyYXdCb3goZGlhZ3JhbTIsIGJveDIsIGNvbmYpO1xuICB9KTtcbiAgaWYgKGhhc0JveGVzKSB7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbik7XG4gIH1cbiAgY29uc3QgcmVxdWlyZWRCb3hTaXplID0gZHJhd0FjdG9yc1BvcHVwKGRpYWdyYW0yLCBhY3RvcnMyLCBhY3RvcktleXMsIGRvYyk7XG4gIGNvbnN0IHsgYm91bmRzOiBib3ggfSA9IGJvdW5kcy5nZXRCb3VuZHMoKTtcbiAgbG9nLmRlYnVnKFwiRm9yIGxpbmUgaGVpZ2h0IGZpeCBRdWVyeWluZzogI1wiICsgaWQgKyBcIiAuYWN0b3ItbGluZVwiKTtcbiAgY29uc3QgYWN0b3JMaW5lcyA9IHNlbGVjdEFsbChcIiNcIiArIGlkICsgXCIgLmFjdG9yLWxpbmVcIik7XG4gIGFjdG9yTGluZXMuYXR0cihcInkyXCIsIGJveC5zdG9weSk7XG4gIGxldCBib3hIZWlnaHQgPSBib3guc3RvcHkgLSBib3guc3RhcnR5O1xuICBpZiAoYm94SGVpZ2h0IDwgcmVxdWlyZWRCb3hTaXplLm1heEhlaWdodCkge1xuICAgIGJveEhlaWdodCA9IHJlcXVpcmVkQm94U2l6ZS5tYXhIZWlnaHQ7XG4gIH1cbiAgbGV0IGhlaWdodCA9IGJveEhlaWdodCArIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5ZO1xuICBpZiAoY29uZi5taXJyb3JBY3RvcnMpIHtcbiAgICBoZWlnaHQgPSBoZWlnaHQgLSBjb25mLmJveE1hcmdpbiArIGNvbmYuYm90dG9tTWFyZ2luQWRqO1xuICB9XG4gIGxldCBib3hXaWR0aCA9IGJveC5zdG9weCAtIGJveC5zdGFydHg7XG4gIGlmIChib3hXaWR0aCA8IHJlcXVpcmVkQm94U2l6ZS5tYXhXaWR0aCkge1xuICAgIGJveFdpZHRoID0gcmVxdWlyZWRCb3hTaXplLm1heFdpZHRoO1xuICB9XG4gIGNvbnN0IHdpZHRoID0gYm94V2lkdGggKyAyICogY29uZi5kaWFncmFtTWFyZ2luWDtcbiAgaWYgKHRpdGxlKSB7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCAoYm94LnN0b3B4IC0gYm94LnN0YXJ0eCkgLyAyIC0gMiAqIGNvbmYuZGlhZ3JhbU1hcmdpblgpLmF0dHIoXCJ5XCIsIC0yNSk7XG4gIH1cbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIGNvbnN0IGV4dHJhVmVydEZvclRpdGxlID0gdGl0bGUgPyA0MCA6IDA7XG4gIGRpYWdyYW0yLmF0dHIoXG4gICAgXCJ2aWV3Qm94XCIsXG4gICAgYm94LnN0YXJ0eCAtIGNvbmYuZGlhZ3JhbU1hcmdpblggKyBcIiAtXCIgKyAoY29uZi5kaWFncmFtTWFyZ2luWSArIGV4dHJhVmVydEZvclRpdGxlKSArIFwiIFwiICsgd2lkdGggKyBcIiBcIiArIChoZWlnaHQgKyBleHRyYVZlcnRGb3JUaXRsZSlcbiAgKTtcbiAgbG9nLmRlYnVnKGBtb2RlbHM6YCwgYm91bmRzLm1vZGVscyk7XG59O1xuZnVuY3Rpb24gZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IoYWN0b3JzMiwgbWVzc2FnZXMyLCBkaWFnT2JqKSB7XG4gIGNvbnN0IG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yID0ge307XG4gIG1lc3NhZ2VzMi5mb3JFYWNoKGZ1bmN0aW9uKG1zZykge1xuICAgIGlmIChhY3RvcnMyW21zZy50b10gJiYgYWN0b3JzMlttc2cuZnJvbV0pIHtcbiAgICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzMlttc2cudG9dO1xuICAgICAgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULkxFRlRPRiAmJiAhYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChtc2cucGxhY2VtZW50ID09PSBkaWFnT2JqLmRiLlBMQUNFTUVOVC5SSUdIVE9GICYmICFhY3Rvci5uZXh0QWN0b3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNOb3RlID0gbXNnLnBsYWNlbWVudCAhPT0gdm9pZCAwO1xuICAgICAgY29uc3QgaXNNZXNzYWdlID0gIWlzTm90ZTtcbiAgICAgIGNvbnN0IHRleHRGb250ID0gaXNOb3RlID8gbm90ZUZvbnQoY29uZikgOiBtZXNzYWdlRm9udChjb25mKTtcbiAgICAgIGNvbnN0IHdyYXBwZWRNZXNzYWdlID0gbXNnLndyYXAgPyB1dGlscy53cmFwTGFiZWwobXNnLm1lc3NhZ2UsIGNvbmYud2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpIDogbXNnLm1lc3NhZ2U7XG4gICAgICBjb25zdCBtZXNzYWdlRGltZW5zaW9ucyA9IHV0aWxzLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHdyYXBwZWRNZXNzYWdlLCB0ZXh0Rm9udCk7XG4gICAgICBjb25zdCBtZXNzYWdlV2lkdGggPSBtZXNzYWdlRGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nO1xuICAgICAgaWYgKGlzTWVzc2FnZSAmJiBtc2cuZnJvbSA9PT0gYWN0b3IubmV4dEFjdG9yKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb24uZ2V0TWF4KFxuICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNZXNzYWdlICYmIG1zZy5mcm9tID09PSBhY3Rvci5wcmV2QWN0b3IpIHtcbiAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dID0gY29tbW9uLmdldE1heChcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNZXNzYWdlICYmIG1zZy5mcm9tID09PSBtc2cudG8pIHtcbiAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dID0gY29tbW9uLmdldE1heChcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGggLyAyXG4gICAgICAgICk7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb24uZ2V0TWF4KFxuICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGggLyAyXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULlJJR0hUT0YpIHtcbiAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dID0gY29tbW9uLmdldE1heChcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuTEVGVE9GKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gPSBjb21tb24uZ2V0TWF4KFxuICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuT1ZFUikge1xuICAgICAgICBpZiAoYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbYWN0b3IucHJldkFjdG9yXSA9IGNvbW1vbi5nZXRNYXgoXG4gICAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvclthY3Rvci5wcmV2QWN0b3JdIHx8IDAsXG4gICAgICAgICAgICBtZXNzYWdlV2lkdGggLyAyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0b3IubmV4dEFjdG9yKSB7XG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dID0gY29tbW9uLmdldE1heChcbiAgICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy5mcm9tXSB8fCAwLFxuICAgICAgICAgICAgbWVzc2FnZVdpZHRoIC8gMlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBsb2cuZGVidWcoXCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjpcIiwgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IpO1xuICByZXR1cm4gbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I7XG59XG5jb25zdCBnZXRSZXF1aXJlZFBvcHVwV2lkdGggPSBmdW5jdGlvbihhY3Rvcikge1xuICBsZXQgcmVxdWlyZWRQb3B1cFdpZHRoID0gMDtcbiAgY29uc3QgdGV4dEZvbnQgPSBhY3RvckZvbnQoY29uZik7XG4gIGZvciAoY29uc3Qga2V5IGluIGFjdG9yLmxpbmtzKSB7XG4gICAgY29uc3QgbGFiZWxEaW1lbnNpb25zID0gdXRpbHMuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoa2V5LCB0ZXh0Rm9udCk7XG4gICAgY29uc3QgbGFiZWxXaWR0aCA9IGxhYmVsRGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nICsgMiAqIGNvbmYuYm94TWFyZ2luO1xuICAgIGlmIChyZXF1aXJlZFBvcHVwV2lkdGggPCBsYWJlbFdpZHRoKSB7XG4gICAgICByZXF1aXJlZFBvcHVwV2lkdGggPSBsYWJlbFdpZHRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVxdWlyZWRQb3B1cFdpZHRoO1xufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZUFjdG9yTWFyZ2lucyhhY3RvcnMyLCBhY3RvclRvTWVzc2FnZVdpZHRoLCBib3hlczIpIHtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIE9iamVjdC5rZXlzKGFjdG9yczIpLmZvckVhY2goKHByb3ApID0+IHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9yczJbcHJvcF07XG4gICAgaWYgKGFjdG9yLndyYXApIHtcbiAgICAgIGFjdG9yLmRlc2NyaXB0aW9uID0gdXRpbHMud3JhcExhYmVsKFxuICAgICAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICAgICAgY29uZi53aWR0aCAtIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgICBhY3RvckZvbnQoY29uZilcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFjdERpbXMgPSB1dGlscy5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhY3Rvci5kZXNjcmlwdGlvbiwgYWN0b3JGb250KGNvbmYpKTtcbiAgICBhY3Rvci53aWR0aCA9IGFjdG9yLndyYXAgPyBjb25mLndpZHRoIDogY29tbW9uLmdldE1heChjb25mLndpZHRoLCBhY3REaW1zLndpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcpO1xuICAgIGFjdG9yLmhlaWdodCA9IGFjdG9yLndyYXAgPyBjb21tb24uZ2V0TWF4KGFjdERpbXMuaGVpZ2h0LCBjb25mLmhlaWdodCkgOiBjb25mLmhlaWdodDtcbiAgICBtYXhIZWlnaHQgPSBjb21tb24uZ2V0TWF4KG1heEhlaWdodCwgYWN0b3IuaGVpZ2h0KTtcbiAgfSk7XG4gIGZvciAoY29uc3QgYWN0b3JLZXkgaW4gYWN0b3JUb01lc3NhZ2VXaWR0aCkge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzMlthY3RvcktleV07XG4gICAgaWYgKCFhY3Rvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5leHRBY3RvciA9IGFjdG9yczJbYWN0b3IubmV4dEFjdG9yXTtcbiAgICBpZiAoIW5leHRBY3Rvcikge1xuICAgICAgY29uc3QgbWVzc2FnZVdpZHRoMiA9IGFjdG9yVG9NZXNzYWdlV2lkdGhbYWN0b3JLZXldO1xuICAgICAgY29uc3QgYWN0b3JXaWR0aDIgPSBtZXNzYWdlV2lkdGgyICsgY29uZi5hY3Rvck1hcmdpbiAtIGFjdG9yLndpZHRoIC8gMjtcbiAgICAgIGFjdG9yLm1hcmdpbiA9IGNvbW1vbi5nZXRNYXgoYWN0b3JXaWR0aDIsIGNvbmYuYWN0b3JNYXJnaW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VXaWR0aCA9IGFjdG9yVG9NZXNzYWdlV2lkdGhbYWN0b3JLZXldO1xuICAgIGNvbnN0IGFjdG9yV2lkdGggPSBtZXNzYWdlV2lkdGggKyBjb25mLmFjdG9yTWFyZ2luIC0gYWN0b3Iud2lkdGggLyAyIC0gbmV4dEFjdG9yLndpZHRoIC8gMjtcbiAgICBhY3Rvci5tYXJnaW4gPSBjb21tb24uZ2V0TWF4KGFjdG9yV2lkdGgsIGNvbmYuYWN0b3JNYXJnaW4pO1xuICB9XG4gIGxldCBtYXhCb3hIZWlnaHQgPSAwO1xuICBib3hlczIuZm9yRWFjaCgoYm94KSA9PiB7XG4gICAgY29uc3QgdGV4dEZvbnQgPSBtZXNzYWdlRm9udChjb25mKTtcbiAgICBsZXQgdG90YWxXaWR0aCA9IGJveC5hY3RvcktleXMucmVkdWNlKCh0b3RhbCwgYUtleSkgPT4ge1xuICAgICAgcmV0dXJuIHRvdGFsICs9IGFjdG9yczJbYUtleV0ud2lkdGggKyAoYWN0b3JzMlthS2V5XS5tYXJnaW4gfHwgMCk7XG4gICAgfSwgMCk7XG4gICAgdG90YWxXaWR0aCAtPSAyICogY29uZi5ib3hUZXh0TWFyZ2luO1xuICAgIGlmIChib3gud3JhcCkge1xuICAgICAgYm94Lm5hbWUgPSB1dGlscy53cmFwTGFiZWwoYm94Lm5hbWUsIHRvdGFsV2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpO1xuICAgIH1cbiAgICBjb25zdCBib3hNc2dEaW1lbnNpb25zID0gdXRpbHMuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYm94Lm5hbWUsIHRleHRGb250KTtcbiAgICBtYXhCb3hIZWlnaHQgPSBjb21tb24uZ2V0TWF4KGJveE1zZ0RpbWVuc2lvbnMuaGVpZ2h0LCBtYXhCb3hIZWlnaHQpO1xuICAgIGNvbnN0IG1pbldpZHRoID0gY29tbW9uLmdldE1heCh0b3RhbFdpZHRoLCBib3hNc2dEaW1lbnNpb25zLndpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcpO1xuICAgIGJveC5tYXJnaW4gPSBjb25mLmJveFRleHRNYXJnaW47XG4gICAgaWYgKHRvdGFsV2lkdGggPCBtaW5XaWR0aCkge1xuICAgICAgY29uc3QgbWlzc2luZyA9IChtaW5XaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcbiAgICAgIGJveC5tYXJnaW4gKz0gbWlzc2luZztcbiAgICB9XG4gIH0pO1xuICBib3hlczIuZm9yRWFjaCgoYm94KSA9PiBib3gudGV4dE1heEhlaWdodCA9IG1heEJveEhlaWdodCk7XG4gIHJldHVybiBjb21tb24uZ2V0TWF4KG1heEhlaWdodCwgY29uZi5oZWlnaHQpO1xufVxuY29uc3QgYnVpbGROb3RlTW9kZWwgPSBmdW5jdGlvbihtc2csIGFjdG9yczIsIGRpYWdPYmopIHtcbiAgY29uc3Qgc3RhcnR4ID0gYWN0b3JzMlttc2cuZnJvbV0ueDtcbiAgY29uc3Qgc3RvcHggPSBhY3RvcnMyW21zZy50b10ueDtcbiAgY29uc3Qgc2hvdWxkV3JhcCA9IG1zZy53cmFwICYmIG1zZy5tZXNzYWdlO1xuICBsZXQgdGV4dERpbWVuc2lvbnMgPSB1dGlscy5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhcbiAgICBzaG91bGRXcmFwID8gdXRpbHMud3JhcExhYmVsKG1zZy5tZXNzYWdlLCBjb25mLndpZHRoLCBub3RlRm9udChjb25mKSkgOiBtc2cubWVzc2FnZSxcbiAgICBub3RlRm9udChjb25mKVxuICApO1xuICBjb25zdCBub3RlTW9kZWwgPSB7XG4gICAgd2lkdGg6IHNob3VsZFdyYXAgPyBjb25mLndpZHRoIDogY29tbW9uLmdldE1heChjb25mLndpZHRoLCB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW4pLFxuICAgIGhlaWdodDogMCxcbiAgICBzdGFydHg6IGFjdG9yczJbbXNnLmZyb21dLngsXG4gICAgc3RvcHg6IDAsXG4gICAgc3RhcnR5OiAwLFxuICAgIHN0b3B5OiAwLFxuICAgIG1lc3NhZ2U6IG1zZy5tZXNzYWdlXG4gIH07XG4gIGlmIChtc2cucGxhY2VtZW50ID09PSBkaWFnT2JqLmRiLlBMQUNFTUVOVC5SSUdIVE9GKSB7XG4gICAgbm90ZU1vZGVsLndpZHRoID0gc2hvdWxkV3JhcCA/IGNvbW1vbi5nZXRNYXgoY29uZi53aWR0aCwgdGV4dERpbWVuc2lvbnMud2lkdGgpIDogY29tbW9uLmdldE1heChcbiAgICAgIGFjdG9yczJbbXNnLmZyb21dLndpZHRoIC8gMiArIGFjdG9yczJbbXNnLnRvXS53aWR0aCAvIDIsXG4gICAgICB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW5cbiAgICApO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggKyAoYWN0b3JzMlttc2cuZnJvbV0ud2lkdGggKyBjb25mLmFjdG9yTWFyZ2luKSAvIDI7XG4gIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuTEVGVE9GKSB7XG4gICAgbm90ZU1vZGVsLndpZHRoID0gc2hvdWxkV3JhcCA/IGNvbW1vbi5nZXRNYXgoY29uZi53aWR0aCwgdGV4dERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi5ub3RlTWFyZ2luKSA6IGNvbW1vbi5nZXRNYXgoXG4gICAgICBhY3RvcnMyW21zZy5mcm9tXS53aWR0aCAvIDIgKyBhY3RvcnMyW21zZy50b10ud2lkdGggLyAyLFxuICAgICAgdGV4dERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi5ub3RlTWFyZ2luXG4gICAgKTtcbiAgICBub3RlTW9kZWwuc3RhcnR4ID0gc3RhcnR4IC0gbm90ZU1vZGVsLndpZHRoICsgKGFjdG9yczJbbXNnLmZyb21dLndpZHRoIC0gY29uZi5hY3Rvck1hcmdpbikgLyAyO1xuICB9IGVsc2UgaWYgKG1zZy50byA9PT0gbXNnLmZyb20pIHtcbiAgICB0ZXh0RGltZW5zaW9ucyA9IHV0aWxzLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKFxuICAgICAgc2hvdWxkV3JhcCA/IHV0aWxzLndyYXBMYWJlbChcbiAgICAgICAgbXNnLm1lc3NhZ2UsXG4gICAgICAgIGNvbW1vbi5nZXRNYXgoY29uZi53aWR0aCwgYWN0b3JzMlttc2cuZnJvbV0ud2lkdGgpLFxuICAgICAgICBub3RlRm9udChjb25mKVxuICAgICAgKSA6IG1zZy5tZXNzYWdlLFxuICAgICAgbm90ZUZvbnQoY29uZilcbiAgICApO1xuICAgIG5vdGVNb2RlbC53aWR0aCA9IHNob3VsZFdyYXAgPyBjb21tb24uZ2V0TWF4KGNvbmYud2lkdGgsIGFjdG9yczJbbXNnLmZyb21dLndpZHRoKSA6IGNvbW1vbi5nZXRNYXgoXG4gICAgICBhY3RvcnMyW21zZy5mcm9tXS53aWR0aCxcbiAgICAgIGNvbmYud2lkdGgsXG4gICAgICB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW5cbiAgICApO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggKyAoYWN0b3JzMlttc2cuZnJvbV0ud2lkdGggLSBub3RlTW9kZWwud2lkdGgpIC8gMjtcbiAgfSBlbHNlIHtcbiAgICBub3RlTW9kZWwud2lkdGggPSBNYXRoLmFicyhzdGFydHggKyBhY3RvcnMyW21zZy5mcm9tXS53aWR0aCAvIDIgLSAoc3RvcHggKyBhY3RvcnMyW21zZy50b10ud2lkdGggLyAyKSkgKyBjb25mLmFjdG9yTWFyZ2luO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggPCBzdG9weCA/IHN0YXJ0eCArIGFjdG9yczJbbXNnLmZyb21dLndpZHRoIC8gMiAtIGNvbmYuYWN0b3JNYXJnaW4gLyAyIDogc3RvcHggKyBhY3RvcnMyW21zZy50b10ud2lkdGggLyAyIC0gY29uZi5hY3Rvck1hcmdpbiAvIDI7XG4gIH1cbiAgaWYgKHNob3VsZFdyYXApIHtcbiAgICBub3RlTW9kZWwubWVzc2FnZSA9IHV0aWxzLndyYXBMYWJlbChcbiAgICAgIG1zZy5tZXNzYWdlLFxuICAgICAgbm90ZU1vZGVsLndpZHRoIC0gMiAqIGNvbmYud3JhcFBhZGRpbmcsXG4gICAgICBub3RlRm9udChjb25mKVxuICAgICk7XG4gIH1cbiAgbG9nLmRlYnVnKFxuICAgIGBOTTpbJHtub3RlTW9kZWwuc3RhcnR4fSwke25vdGVNb2RlbC5zdG9weH0sJHtub3RlTW9kZWwuc3RhcnR5fSwke25vdGVNb2RlbC5zdG9weX06JHtub3RlTW9kZWwud2lkdGh9LCR7bm90ZU1vZGVsLmhlaWdodH09JHttc2cubWVzc2FnZX1dYFxuICApO1xuICByZXR1cm4gbm90ZU1vZGVsO1xufTtcbmNvbnN0IGJ1aWxkTWVzc2FnZU1vZGVsID0gZnVuY3Rpb24obXNnLCBhY3RvcnMyLCBkaWFnT2JqKSB7XG4gIGxldCBwcm9jZXNzID0gZmFsc2U7XG4gIGlmIChbXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX09QRU4sXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRCxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRCxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfUE9JTlQsXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRcbiAgXS5pbmNsdWRlcyhtc2cudHlwZSkpIHtcbiAgICBwcm9jZXNzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIXByb2Nlc3MpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgZnJvbUJvdW5kcyA9IGFjdGl2YXRpb25Cb3VuZHMobXNnLmZyb20sIGFjdG9yczIpO1xuICBjb25zdCB0b0JvdW5kcyA9IGFjdGl2YXRpb25Cb3VuZHMobXNnLnRvLCBhY3RvcnMyKTtcbiAgY29uc3QgZnJvbUlkeCA9IGZyb21Cb3VuZHNbMF0gPD0gdG9Cb3VuZHNbMF0gPyAxIDogMDtcbiAgY29uc3QgdG9JZHggPSBmcm9tQm91bmRzWzBdIDwgdG9Cb3VuZHNbMF0gPyAwIDogMTtcbiAgY29uc3QgYWxsQm91bmRzID0gWy4uLmZyb21Cb3VuZHMsIC4uLnRvQm91bmRzXTtcbiAgY29uc3QgYm91bmRlZFdpZHRoID0gTWF0aC5hYnModG9Cb3VuZHNbdG9JZHhdIC0gZnJvbUJvdW5kc1tmcm9tSWR4XSk7XG4gIGlmIChtc2cud3JhcCAmJiBtc2cubWVzc2FnZSkge1xuICAgIG1zZy5tZXNzYWdlID0gdXRpbHMud3JhcExhYmVsKFxuICAgICAgbXNnLm1lc3NhZ2UsXG4gICAgICBjb21tb24uZ2V0TWF4KGJvdW5kZWRXaWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nLCBjb25mLndpZHRoKSxcbiAgICAgIG1lc3NhZ2VGb250KGNvbmYpXG4gICAgKTtcbiAgfVxuICBjb25zdCBtc2dEaW1zID0gdXRpbHMuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIG1lc3NhZ2VGb250KGNvbmYpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY29tbW9uLmdldE1heChcbiAgICAgIG1zZy53cmFwID8gMCA6IG1zZ0RpbXMud2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZyxcbiAgICAgIGJvdW5kZWRXaWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgY29uZi53aWR0aFxuICAgICksXG4gICAgaGVpZ2h0OiAwLFxuICAgIHN0YXJ0eDogZnJvbUJvdW5kc1tmcm9tSWR4XSxcbiAgICBzdG9weDogdG9Cb3VuZHNbdG9JZHhdLFxuICAgIHN0YXJ0eTogMCxcbiAgICBzdG9weTogMCxcbiAgICBtZXNzYWdlOiBtc2cubWVzc2FnZSxcbiAgICB0eXBlOiBtc2cudHlwZSxcbiAgICB3cmFwOiBtc2cud3JhcCxcbiAgICBmcm9tQm91bmRzOiBNYXRoLm1pbi5hcHBseShudWxsLCBhbGxCb3VuZHMpLFxuICAgIHRvQm91bmRzOiBNYXRoLm1heC5hcHBseShudWxsLCBhbGxCb3VuZHMpXG4gIH07XG59O1xuY29uc3QgY2FsY3VsYXRlTG9vcEJvdW5kcyA9IGZ1bmN0aW9uKG1lc3NhZ2VzMiwgYWN0b3JzMiwgX21heFdpZHRoUGVyQWN0b3IsIGRpYWdPYmopIHtcbiAgY29uc3QgbG9vcHMgPSB7fTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IGN1cnJlbnQsIG5vdGVNb2RlbCwgbXNnTW9kZWw7XG4gIG1lc3NhZ2VzMi5mb3JFYWNoKGZ1bmN0aW9uKG1zZykge1xuICAgIG1zZy5pZCA9IHV0aWxzLnJhbmRvbSh7IGxlbmd0aDogMTAgfSk7XG4gICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIGlkOiBtc2cuaWQsXG4gICAgICAgICAgbXNnOiBtc2cubWVzc2FnZSxcbiAgICAgICAgICBmcm9tOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICB0bzogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFMVF9FTFNFOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9BTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOlxuICAgICAgICBpZiAobXNnLm1lc3NhZ2UpIHtcbiAgICAgICAgICBjdXJyZW50ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbG9vcHNbY3VycmVudC5pZF0gPSBjdXJyZW50O1xuICAgICAgICAgIGxvb3BzW21zZy5pZF0gPSBjdXJyZW50O1xuICAgICAgICAgIHN0YWNrLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuTE9PUF9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX0VORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5PUFRfRU5EOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpcbiAgICAgICAgY3VycmVudCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBsb29wc1tjdXJyZW50LmlkXSA9IGN1cnJlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGFjdG9yUmVjdCA9IGFjdG9yczJbbXNnLmZyb20gPyBtc2cuZnJvbS5hY3RvciA6IG1zZy50by5hY3Rvcl07XG4gICAgICAgICAgY29uc3Qgc3RhY2tlZFNpemUgPSBhY3RvckFjdGl2YXRpb25zKG1zZy5mcm9tID8gbXNnLmZyb20uYWN0b3IgOiBtc2cudG8uYWN0b3IpLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCB4ID0gYWN0b3JSZWN0LnggKyBhY3RvclJlY3Qud2lkdGggLyAyICsgKHN0YWNrZWRTaXplIC0gMSkgKiBjb25mLmFjdGl2YXRpb25XaWR0aCAvIDI7XG4gICAgICAgICAgY29uc3QgdG9BZGQgPSB7XG4gICAgICAgICAgICBzdGFydHg6IHgsXG4gICAgICAgICAgICBzdG9weDogeCArIGNvbmYuYWN0aXZhdGlvbldpZHRoLFxuICAgICAgICAgICAgYWN0b3I6IG1zZy5mcm9tLmFjdG9yLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgYm91bmRzLmFjdGl2YXRpb25zLnB1c2godG9BZGQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsYXN0QWN0b3JBY3RpdmF0aW9uSWR4ID0gYm91bmRzLmFjdGl2YXRpb25zLm1hcCgoYSkgPT4gYS5hY3RvcikubGFzdEluZGV4T2YobXNnLmZyb20uYWN0b3IpO1xuICAgICAgICAgIGRlbGV0ZSBib3VuZHMuYWN0aXZhdGlvbnMuc3BsaWNlKGxhc3RBY3RvckFjdGl2YXRpb25JZHgsIDEpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBpc05vdGUgPSBtc2cucGxhY2VtZW50ICE9PSB2b2lkIDA7XG4gICAgaWYgKGlzTm90ZSkge1xuICAgICAgbm90ZU1vZGVsID0gYnVpbGROb3RlTW9kZWwobXNnLCBhY3RvcnMyLCBkaWFnT2JqKTtcbiAgICAgIG1zZy5ub3RlTW9kZWwgPSBub3RlTW9kZWw7XG4gICAgICBzdGFjay5mb3JFYWNoKChzdGspID0+IHtcbiAgICAgICAgY3VycmVudCA9IHN0aztcbiAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uLmdldE1pbihjdXJyZW50LmZyb20sIG5vdGVNb2RlbC5zdGFydHgpO1xuICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uLmdldE1heChjdXJyZW50LnRvLCBub3RlTW9kZWwuc3RhcnR4ICsgbm90ZU1vZGVsLndpZHRoKTtcbiAgICAgICAgY3VycmVudC53aWR0aCA9IGNvbW1vbi5nZXRNYXgoY3VycmVudC53aWR0aCwgTWF0aC5hYnMoY3VycmVudC5mcm9tIC0gY3VycmVudC50bykpIC0gY29uZi5sYWJlbEJveFdpZHRoO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZ01vZGVsID0gYnVpbGRNZXNzYWdlTW9kZWwobXNnLCBhY3RvcnMyLCBkaWFnT2JqKTtcbiAgICAgIG1zZy5tc2dNb2RlbCA9IG1zZ01vZGVsO1xuICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCAmJiBtc2dNb2RlbC5zdG9weCAmJiBzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YWNrLmZvckVhY2goKHN0aykgPT4ge1xuICAgICAgICAgIGN1cnJlbnQgPSBzdGs7XG4gICAgICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCA9PT0gbXNnTW9kZWwuc3RvcHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSBhY3RvcnMyW21zZy5mcm9tXTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gYWN0b3JzMlttc2cudG9dO1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uLmdldE1pbihcbiAgICAgICAgICAgICAgZnJvbS54IC0gbXNnTW9kZWwud2lkdGggLyAyLFxuICAgICAgICAgICAgICBmcm9tLnggLSBmcm9tLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgY3VycmVudC5mcm9tXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudC50byA9IGNvbW1vbi5nZXRNYXgoXG4gICAgICAgICAgICAgIHRvLnggKyBtc2dNb2RlbC53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIHRvLnggKyBmcm9tLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgY3VycmVudC50b1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnQud2lkdGggPSBjb21tb24uZ2V0TWF4KGN1cnJlbnQud2lkdGgsIE1hdGguYWJzKGN1cnJlbnQudG8gLSBjdXJyZW50LmZyb20pKSAtIGNvbmYubGFiZWxCb3hXaWR0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uLmdldE1pbihtc2dNb2RlbC5zdGFydHgsIGN1cnJlbnQuZnJvbSk7XG4gICAgICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uLmdldE1heChtc2dNb2RlbC5zdG9weCwgY3VycmVudC50byk7XG4gICAgICAgICAgICBjdXJyZW50LndpZHRoID0gY29tbW9uLmdldE1heChjdXJyZW50LndpZHRoLCBtc2dNb2RlbC53aWR0aCkgLSBjb25mLmxhYmVsQm94V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBib3VuZHMuYWN0aXZhdGlvbnMgPSBbXTtcbiAgbG9nLmRlYnVnKFwiTG9vcCB0eXBlIHdpZHRoczpcIiwgbG9vcHMpO1xuICByZXR1cm4gbG9vcHM7XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIGJvdW5kcyxcbiAgZHJhd0FjdG9ycyxcbiAgZHJhd0FjdG9yc1BvcHVwLFxuICBzZXRDb25mLFxuICBkcmF3XG59O1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBwYXJzZXIkMSxcbiAgZGIsXG4gIHJlbmRlcmVyLFxuICBzdHlsZXNcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/sequenceDiagram-5dfd0049.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/stateDiagram-133e3642.js": /*!*******************************************************************!*\ !*** ../../../node_modules/mermaid/dist/stateDiagram-133e3642.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles-fa41df25.js */ \"../../../node_modules/mermaid/dist/styles-fa41df25.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst idCache = {};\nconst set = (key, val) => {\n idCache[key] = val;\n};\nconst get = (k) => idCache[k];\nconst keys = () => Object.keys(idCache);\nconst size = () => keys().length;\nconst idCache$1 = {\n get,\n set,\n keys,\n size\n};\nconst drawStartState = (g) => g.append(\"circle\").attr(\"class\", \"start-state\").attr(\"r\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit).attr(\"cx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit).attr(\"cy\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit);\nconst drawDivider = (g) => g.append(\"line\").style(\"stroke\", \"grey\").style(\"stroke-dasharray\", \"3\").attr(\"x1\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight).attr(\"class\", \"divider\").attr(\"x2\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight * 2).attr(\"y1\", 0).attr(\"y2\", 0);\nconst drawSimpleState = (g, stateDef) => {\n const state = g.append(\"text\").attr(\"x\", 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"font-size\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const classBox = state.node().getBBox();\n g.insert(\"rect\", \":first-child\").attr(\"x\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"width\", classBox.width + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"height\", classBox.height + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"rx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.radius);\n return state;\n};\nconst drawDescrState = (g, stateDef) => {\n const addTspan = function(textEl, txt, isFirst2) {\n const tSpan = textEl.append(\"tspan\").attr(\"x\", 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).text(txt);\n if (!isFirst2) {\n tSpan.attr(\"dy\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight);\n }\n };\n const title = g.append(\"text\").attr(\"x\", 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight + 1.3 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"font-size\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.descriptions[0]);\n const titleBox = title.node().getBBox();\n const titleHeight = titleBox.height;\n const description = g.append(\"text\").attr(\"x\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\n \"y\",\n titleHeight + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding * 0.4 + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.dividerMargin + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight\n ).attr(\"class\", \"state-description\");\n let isFirst = true;\n let isSecond = true;\n stateDef.descriptions.forEach(function(descr) {\n if (!isFirst) {\n addTspan(description, descr, isSecond);\n isSecond = false;\n }\n isFirst = false;\n });\n const descrLine = g.append(\"line\").attr(\"x1\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y1\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + titleHeight + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.dividerMargin / 2).attr(\"y2\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + titleHeight + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.dividerMargin / 2).attr(\"class\", \"descr-divider\");\n const descrBox = description.node().getBBox();\n const width = Math.max(descrBox.width, titleBox.width);\n descrLine.attr(\"x2\", width + 3 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding);\n g.insert(\"rect\", \":first-child\").attr(\"x\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"width\", width + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"height\", descrBox.height + titleHeight + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"rx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.radius);\n return g;\n};\nconst addTitleAndBox = (g, stateDef, altBkg) => {\n const pad = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding;\n const dblPad = 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding;\n const orgBox = g.node().getBBox();\n const orgWidth = orgBox.width;\n const orgX = orgBox.x;\n const title = g.append(\"text\").attr(\"x\", 0).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.titleShift).attr(\"font-size\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const titleBox = title.node().getBBox();\n const titleWidth = titleBox.width + dblPad;\n let width = Math.max(titleWidth, orgWidth);\n if (width === orgWidth) {\n width = width + dblPad;\n }\n let startX;\n const graphBox = g.node().getBBox();\n if (stateDef.doc)\n ;\n startX = orgX - pad;\n if (titleWidth > orgWidth) {\n startX = (orgWidth - width) / 2 + pad;\n }\n if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) {\n startX = orgX - (titleWidth - orgWidth) / 2;\n }\n const lineY = 1 - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight;\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\"y\", lineY).attr(\"class\", altBkg ? \"alt-composit\" : \"composit\").attr(\"width\", width).attr(\n \"height\",\n graphBox.height + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.titleShift + 1\n ).attr(\"rx\", \"0\");\n title.attr(\"x\", startX + pad);\n if (titleWidth <= orgWidth) {\n title.attr(\"x\", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad);\n }\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.titleShift - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding\n ).attr(\"width\", width).attr(\"height\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight * 3).attr(\"rx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.radius);\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.titleShift - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding\n ).attr(\"width\", width).attr(\"height\", graphBox.height + 3 + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.textHeight).attr(\"rx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.radius);\n return g;\n};\nconst drawEndState = (g) => {\n g.append(\"circle\").attr(\"class\", \"end-state-outer\").attr(\"r\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.miniPadding).attr(\n \"cx\",\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.miniPadding\n ).attr(\n \"cy\",\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.miniPadding\n );\n return g.append(\"circle\").attr(\"class\", \"end-state-inner\").attr(\"r\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit).attr(\"cx\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit + 2).attr(\"cy\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.sizeUnit + 2);\n};\nconst drawForkJoinState = (g, stateDef) => {\n let width = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.forkWidth;\n let height = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.forkHeight;\n if (stateDef.parentId) {\n let tmp = width;\n width = height;\n height = tmp;\n }\n return g.append(\"rect\").style(\"stroke\", \"black\").style(\"fill\", \"black\").attr(\"width\", width).attr(\"height\", height).attr(\"x\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding);\n};\nconst _drawLongText = (_text, x, y, g) => {\n let textHeight = 0;\n const textElem = g.append(\"text\");\n textElem.style(\"text-anchor\", \"start\");\n textElem.attr(\"class\", \"noteText\");\n let text = _text.replace(/\\r\\n/g, \"
\");\n text = text.replace(/\\n/g, \"
\");\n const lines = text.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex);\n let tHeight = 1.25 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.noteMargin;\n for (const line2 of lines) {\n const txt = line2.trim();\n if (txt.length > 0) {\n const span = textElem.append(\"tspan\");\n span.text(txt);\n if (tHeight === 0) {\n const textBounds = span.node().getBBox();\n tHeight += textBounds.height;\n }\n textHeight += tHeight;\n span.attr(\"x\", x + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.noteMargin);\n span.attr(\"y\", y + textHeight + 1.25 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.noteMargin);\n }\n }\n return { textWidth: textElem.node().getBBox().width, textHeight };\n};\nconst drawNote = (text, g) => {\n g.attr(\"class\", \"state-note\");\n const note = g.append(\"rect\").attr(\"x\", 0).attr(\"y\", (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding);\n const rectElem = g.append(\"g\");\n const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);\n note.attr(\"height\", textHeight + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.noteMargin);\n note.attr(\"width\", textWidth + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.noteMargin * 2);\n return note;\n};\nconst drawState = function(elem, stateDef) {\n const id = stateDef.id;\n const stateInfo = {\n id,\n label: stateDef.id,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", id).attr(\"class\", \"stateGroup\");\n if (stateDef.type === \"start\") {\n drawStartState(g);\n }\n if (stateDef.type === \"end\") {\n drawEndState(g);\n }\n if (stateDef.type === \"fork\" || stateDef.type === \"join\") {\n drawForkJoinState(g, stateDef);\n }\n if (stateDef.type === \"note\") {\n drawNote(stateDef.note.text, g);\n }\n if (stateDef.type === \"divider\") {\n drawDivider(g);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length === 0) {\n drawSimpleState(g, stateDef);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length > 0) {\n drawDescrState(g, stateDef);\n }\n const stateBox = g.node().getBBox();\n stateInfo.width = stateBox.width + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding;\n stateInfo.height = stateBox.height + 2 * (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding;\n idCache$1.set(id, stateInfo);\n return stateInfo;\n};\nlet edgeCount = 0;\nconst drawEdge = function(elem, path, relation) {\n const getRelationType = function(type) {\n switch (type) {\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.relationType.AGGREGATION:\n return \"aggregation\";\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.relationType.EXTENSION:\n return \"extension\";\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.relationType.COMPOSITION:\n return \"composition\";\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.relationType.DEPENDENCY:\n return \"dependency\";\n }\n };\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n const lineData = path.points;\n const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__.line)().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(d3__WEBPACK_IMPORTED_MODULE_0__.curveBasis);\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", \"edge\" + edgeCount).attr(\"class\", \"transition\");\n let url = \"\";\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n svgPath.attr(\n \"marker-end\",\n \"url(\" + url + \"#\" + getRelationType(_styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.relationType.DEPENDENCY) + \"End)\"\n );\n if (relation.title !== void 0) {\n const label = elem.append(\"g\").attr(\"class\", \"stateLabel\");\n const { x, y } = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.u.calcLabelPosition(path.points);\n const rows = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.getRows(relation.title);\n let titleHeight = 0;\n const titleRows = [];\n let maxWidth = 0;\n let minX = 0;\n for (let i = 0; i <= rows.length; i++) {\n const title = label.append(\"text\").attr(\"text-anchor\", \"middle\").text(rows[i]).attr(\"x\", x).attr(\"y\", y + titleHeight);\n const boundstmp = title.node().getBBox();\n maxWidth = Math.max(maxWidth, boundstmp.width);\n minX = Math.min(minX, boundstmp.x);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(boundstmp.x, x, y + titleHeight);\n if (titleHeight === 0) {\n const titleBox = title.node().getBBox();\n titleHeight = titleBox.height;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(\"Title height\", titleHeight, y);\n }\n titleRows.push(title);\n }\n let boxHeight = titleHeight * rows.length;\n if (rows.length > 1) {\n const heightAdj = (rows.length - 1) * titleHeight * 0.5;\n titleRows.forEach((title, i) => title.attr(\"y\", y + i * titleHeight - heightAdj));\n boxHeight = titleHeight * rows.length;\n }\n const bounds = label.node().getBBox();\n label.insert(\"rect\", \":first-child\").attr(\"class\", \"box\").attr(\"x\", x - maxWidth / 2 - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding / 2).attr(\"y\", y - boxHeight / 2 - (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding / 2 - 3.5).attr(\"width\", maxWidth + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding).attr(\"height\", boxHeight + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state.padding);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.info(bounds);\n }\n edgeCount++;\n};\nlet conf;\nconst transformationLog = {};\nconst setConf = function() {\n};\nconst insertMarkers = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n};\nconst draw = function(text, id, _version, diagObj) {\n conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().state;\n const securityLevel = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Rendering diagram \" + text);\n const diagram2 = root.select(`[id='${id}']`);\n insertMarkers(diagram2);\n const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__.Graph({\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n rankdir: \"RL\"\n // ranksep: '20'\n });\n graph.setDefaultEdgeLabel(function() {\n return {};\n });\n const rootDoc = diagObj.db.getRootDoc();\n renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj);\n const padding = conf.padding;\n const bounds = diagram2.node().getBBox();\n const width = bounds.width + padding * 2;\n const height = bounds.height + padding * 2;\n const svgWidth = width * 1.75;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.i)(diagram2, height, svgWidth, conf.useMaxWidth);\n diagram2.attr(\n \"viewBox\",\n `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + \" \" + height\n );\n};\nconst getLabelWidth = (text) => {\n return text ? text.length * conf.fontSizeFactor : 1;\n};\nconst renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => {\n const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__.Graph({\n compound: true,\n multigraph: true\n });\n let i;\n let edgeFreeDoc = true;\n for (i = 0; i < doc.length; i++) {\n if (doc[i].stmt === \"relation\") {\n edgeFreeDoc = false;\n break;\n }\n }\n if (parentId) {\n graph.setGraph({\n rankdir: \"LR\",\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n ranker: \"tight-tree\",\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n isMultiGraph: true\n // ranksep: 5,\n // nodesep: 1\n });\n } else {\n graph.setGraph({\n rankdir: \"TB\",\n multigraph: true,\n compound: true,\n // isCompound: true,\n // acyclicer: 'greedy',\n // ranker: 'longest-path'\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n ranker: \"tight-tree\",\n // ranker: 'network-simplex'\n isMultiGraph: true\n });\n }\n graph.setDefaultEdgeLabel(function() {\n return {};\n });\n diagObj.db.extract(doc);\n const states = diagObj.db.getStates();\n const relations = diagObj.db.getRelations();\n const keys2 = Object.keys(states);\n for (const key of keys2) {\n const stateDef = states[key];\n if (parentId) {\n stateDef.parentId = parentId;\n }\n let node;\n if (stateDef.doc) {\n let sub = diagram2.append(\"g\").attr(\"id\", stateDef.id).attr(\"class\", \"stateGroup\");\n node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);\n {\n sub = addTitleAndBox(sub, stateDef, altBkg);\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height + conf.padding / 2;\n transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n }\n } else {\n node = drawState(diagram2, stateDef);\n }\n if (stateDef.note) {\n const noteDef = {\n descriptions: [],\n id: stateDef.id + \"-note\",\n note: stateDef.note,\n type: \"note\"\n };\n const note = drawState(diagram2, noteDef);\n if (stateDef.note.position === \"left of\") {\n graph.setNode(node.id + \"-note\", note);\n graph.setNode(node.id, node);\n } else {\n graph.setNode(node.id, node);\n graph.setNode(node.id + \"-note\", note);\n }\n graph.setParent(node.id, node.id + \"-group\");\n graph.setParent(node.id + \"-note\", node.id + \"-group\");\n } else {\n graph.setNode(node.id, node);\n }\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Count=\", graph.nodeCount(), graph);\n let cnt = 0;\n relations.forEach(function(relation) {\n cnt++;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Setting edge\", relation);\n graph.setEdge(\n relation.id1,\n relation.id2,\n {\n relation,\n width: getLabelWidth(relation.title),\n height: conf.labelHeight * _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.e.getRows(relation.title).length,\n labelpos: \"c\"\n },\n \"id\" + cnt\n );\n });\n (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__.layout)(graph);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Graph after layout\", graph.nodes());\n const svgElem = diagram2.node();\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.warn(\"Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + \" )\"\n );\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\"data-x-shift\", graph.node(v).x - graph.node(v).width / 2);\n const dividers = domDocument.querySelectorAll(\"#\" + svgElem.id + \" #\" + v + \" .divider\");\n dividers.forEach((divider) => {\n const parent = divider.parentElement;\n let pWidth = 0;\n let pShift = 0;\n if (parent) {\n if (parent.parentElement) {\n pWidth = parent.parentElement.getBBox().width;\n }\n pShift = parseInt(parent.getAttribute(\"data-x-shift\"), 10);\n if (Number.isNaN(pShift)) {\n pShift = 0;\n }\n }\n divider.setAttribute(\"x1\", 0 - pShift + 8);\n divider.setAttribute(\"x2\", pWidth - pShift - 8);\n });\n } else {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"No Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n }\n });\n let stateBox = svgElem.getBBox();\n graph.edges().forEach(function(e) {\n if (e !== void 0 && graph.edge(e) !== void 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n drawEdge(diagram2, graph.edge(e), graph.edge(e).relation);\n }\n });\n stateBox = svgElem.getBBox();\n const stateInfo = {\n id: parentId ? parentId : \"root\",\n label: parentId ? parentId : \"root\",\n width: 0,\n height: 0\n };\n stateInfo.width = stateBox.width + 2 * conf.padding;\n stateInfo.height = stateBox.height + 2 * conf.padding;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_7__.l.debug(\"Doc rendered\", stateInfo, graph);\n return stateInfo;\n};\nconst renderer = {\n setConf,\n draw\n};\nconst diagram = {\n parser: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.p,\n db: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d,\n renderer,\n styles: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.s,\n init: (cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_8__.d.clear();\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdGF0ZURpYWdyYW0tMTMzZTM2NDIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUF5RTtBQUMzQjtBQUNVO0FBQ007QUFDbUQ7QUFDOUY7QUFDSjtBQUNrQjtBQUNkO0FBQ0g7QUFDYztBQUNkO0FBQ2M7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0YsdURBQVMsOEJBQThCLHVEQUFTLG1CQUFtQix1REFBUyw4QkFBOEIsdURBQVMsbUJBQW1CLHVEQUFTO0FBQ3ZPLDhHQUE4Ryx1REFBUyx5REFBeUQsdURBQVM7QUFDekw7QUFDQSwrQ0FBK0MsdURBQVMsNEJBQTRCLHVEQUFTLDBCQUEwQix1REFBUyxvQ0FBb0MsdURBQVM7QUFDN0s7QUFDQSw2Q0FBNkMsdURBQVMsNEJBQTRCLHVEQUFTLHFEQUFxRCx1REFBUyx1REFBdUQsdURBQVMsNkJBQTZCLHVEQUFTO0FBQy9QO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHVEQUFTO0FBQ2hFO0FBQ0EsdUJBQXVCLHVEQUFTO0FBQ2hDO0FBQ0E7QUFDQSwrQ0FBK0MsdURBQVMsNEJBQTRCLHVEQUFTLDRCQUE0Qix1REFBUyxvQ0FBb0MsdURBQVM7QUFDL0s7QUFDQTtBQUNBLGlEQUFpRCx1REFBUztBQUMxRDtBQUNBLGtCQUFrQix1REFBUyx5QkFBeUIsdURBQVMseUJBQXlCLHVEQUFTO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxnREFBZ0QsdURBQVMsNkJBQTZCLHVEQUFTLGlDQUFpQyx1REFBUyx1Q0FBdUMsdURBQVMsaUNBQWlDLHVEQUFTO0FBQ25PO0FBQ0E7QUFDQSxtQ0FBbUMsdURBQVM7QUFDNUMsNkNBQTZDLHVEQUFTLDRCQUE0Qix1REFBUyw0Q0FBNEMsdURBQVMscUVB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QUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEVBQUUseURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQSxJQUFJLHlEQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDJEQUFjO0FBQ2pEO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRSxzRUFBTTtBQUNSLEVBQUUseURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdEQUFRO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTixNQUFNLHlEQUFTO0FBQ2Y7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTSx5REFBUztBQUNmO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx5REFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLElBQUk7QUFDSjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBUTtBQUNaO0FBQ0E7QUFHRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L3N0YXRlRGlhZ3JhbS0xMzNlMzY0Mi5qcz8wMWVhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGQgYXMgZGIsIHAgYXMgcGFyc2VyLCBzIGFzIHN0eWxlcyB9IGZyb20gXCIuL3N0eWxlcy1mYTQxZGYyNS5qc1wiO1xuaW1wb3J0IHsgbGluZSwgY3VydmVCYXNpcywgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjIGFzIGdldENvbmZpZywgdSBhcyB1dGlscywgZSBhcyBjb21tb24sIGwgYXMgbG9nLCBpIGFzIGNvbmZpZ3VyZVN2Z1NpemUgfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5jb25zdCBpZENhY2hlID0ge307XG5jb25zdCBzZXQgPSAoa2V5LCB2YWwpID0+IHtcbiAgaWRDYWNoZVtrZXldID0gdmFsO1xufTtcbmNvbnN0IGdldCA9IChrKSA9PiBpZENhY2hlW2tdO1xuY29uc3Qga2V5cyA9ICgpID0+IE9iamVjdC5rZXlzKGlkQ2FjaGUpO1xuY29uc3Qgc2l6ZSA9ICgpID0+IGtleXMoKS5sZW5ndGg7XG5jb25zdCBpZENhY2hlJDEgPSB7XG4gIGdldCxcbiAgc2V0LFxuICBrZXlzLFxuICBzaXplXG59O1xuY29uc3QgZHJhd1N0YXJ0U3RhdGUgPSAoZykgPT4gZy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImNsYXNzXCIsIFwic3RhcnQtc3RhdGVcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpO1xuY29uc3QgZHJhd0RpdmlkZXIgPSAoZykgPT4gZy5hcHBlbmQoXCJsaW5lXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwiZ3JleVwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIzXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MlwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMikuYXR0cihcInkxXCIsIDApLmF0dHIoXCJ5MlwiLCAwKTtcbmNvbnN0IGRyYXdTaW1wbGVTdGF0ZSA9IChnLCBzdGF0ZURlZikgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgY2xhc3NCb3ggPSBzdGF0ZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIGNsYXNzQm94LndpZHRoICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgY2xhc3NCb3guaGVpZ2h0ICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJyeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5yYWRpdXMpO1xuICByZXR1cm4gc3RhdGU7XG59O1xuY29uc3QgZHJhd0Rlc2NyU3RhdGUgPSAoZywgc3RhdGVEZWYpID0+IHtcbiAgY29uc3QgYWRkVHNwYW4gPSBmdW5jdGlvbih0ZXh0RWwsIHR4dCwgaXNGaXJzdDIpIHtcbiAgICBjb25zdCB0U3BhbiA9IHRleHRFbC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykudGV4dCh0eHQpO1xuICAgIGlmICghaXNGaXJzdDIpIHtcbiAgICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHRpdGxlID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgMS4zICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImZvbnQtc2l6ZVwiLCBnZXRDb25maWcoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtdGl0bGVcIikudGV4dChzdGF0ZURlZi5kZXNjcmlwdGlvbnNbMF0pO1xuICBjb25zdCB0aXRsZUJveCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGVCb3guaGVpZ2h0O1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyAqIDAuNCArIGdldENvbmZpZygpLnN0YXRlLmRpdmlkZXJNYXJnaW4gKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0XG4gICkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtZGVzY3JpcHRpb25cIik7XG4gIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgbGV0IGlzU2Vjb25kID0gdHJ1ZTtcbiAgc3RhdGVEZWYuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24oZGVzY3IpIHtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIGFkZFRzcGFuKGRlc2NyaXB0aW9uLCBkZXNjciwgaXNTZWNvbmQpO1xuICAgICAgaXNTZWNvbmQgPSBmYWxzZTtcbiAgICB9XG4gICAgaXNGaXJzdCA9IGZhbHNlO1xuICB9KTtcbiAgY29uc3QgZGVzY3JMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieTFcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUuZGl2aWRlck1hcmdpbiAvIDIpLmF0dHIoXCJ5MlwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luIC8gMikuYXR0cihcImNsYXNzXCIsIFwiZGVzY3ItZGl2aWRlclwiKTtcbiAgY29uc3QgZGVzY3JCb3ggPSBkZXNjcmlwdGlvbi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGRlc2NyQm94LndpZHRoLCB0aXRsZUJveC53aWR0aCk7XG4gIGRlc2NyTGluZS5hdHRyKFwieDJcIiwgd2lkdGggKyAzICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgd2lkdGggKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBkZXNjckJveC5oZWlnaHQgKyB0aXRsZUhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwicnhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucmFkaXVzKTtcbiAgcmV0dXJuIGc7XG59O1xuY29uc3QgYWRkVGl0bGVBbmRCb3ggPSAoZywgc3RhdGVEZWYsIGFsdEJrZykgPT4ge1xuICBjb25zdCBwYWQgPSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nO1xuICBjb25zdCBkYmxQYWQgPSAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgY29uc3Qgb3JnQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCBvcmdXaWR0aCA9IG9yZ0JveC53aWR0aDtcbiAgY29uc3Qgb3JnWCA9IG9yZ0JveC54O1xuICBjb25zdCB0aXRsZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgdGl0bGVCb3ggPSB0aXRsZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB0aXRsZVdpZHRoID0gdGl0bGVCb3gud2lkdGggKyBkYmxQYWQ7XG4gIGxldCB3aWR0aCA9IE1hdGgubWF4KHRpdGxlV2lkdGgsIG9yZ1dpZHRoKTtcbiAgaWYgKHdpZHRoID09PSBvcmdXaWR0aCkge1xuICAgIHdpZHRoID0gd2lkdGggKyBkYmxQYWQ7XG4gIH1cbiAgbGV0IHN0YXJ0WDtcbiAgY29uc3QgZ3JhcGhCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGlmIChzdGF0ZURlZi5kb2MpXG4gICAgO1xuICBzdGFydFggPSBvcmdYIC0gcGFkO1xuICBpZiAodGl0bGVXaWR0aCA+IG9yZ1dpZHRoKSB7XG4gICAgc3RhcnRYID0gKG9yZ1dpZHRoIC0gd2lkdGgpIC8gMiArIHBhZDtcbiAgfVxuICBpZiAoTWF0aC5hYnMob3JnWCAtIGdyYXBoQm94LngpIDwgcGFkICYmIHRpdGxlV2lkdGggPiBvcmdXaWR0aCkge1xuICAgIHN0YXJ0WCA9IG9yZ1ggLSAodGl0bGVXaWR0aCAtIG9yZ1dpZHRoKSAvIDI7XG4gIH1cbiAgY29uc3QgbGluZVkgPSAxIC0gZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodDtcbiAgZy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ4XCIsIHN0YXJ0WCkuYXR0cihcInlcIiwgbGluZVkpLmF0dHIoXCJjbGFzc1wiLCBhbHRCa2cgPyBcImFsdC1jb21wb3NpdFwiIDogXCJjb21wb3NpdFwiKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXG4gICAgXCJoZWlnaHRcIixcbiAgICBncmFwaEJveC5oZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCArIDFcbiAgKS5hdHRyKFwicnhcIiwgXCIwXCIpO1xuICB0aXRsZS5hdHRyKFwieFwiLCBzdGFydFggKyBwYWQpO1xuICBpZiAodGl0bGVXaWR0aCA8PSBvcmdXaWR0aCkge1xuICAgIHRpdGxlLmF0dHIoXCJ4XCIsIG9yZ1ggKyAod2lkdGggLSBkYmxQYWQpIC8gMiAtIHRpdGxlV2lkdGggLyAyICsgcGFkKTtcbiAgfVxuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgc3RhcnRYKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnRpdGxlU2hpZnQgLSBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0IC0gZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZ1xuICApLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMykuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBzdGFydFgpLmF0dHIoXG4gICAgXCJ5XCIsXG4gICAgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCAtIGdldENvbmZpZygpLnN0YXRlLnRleHRIZWlnaHQgLSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nXG4gICkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGdyYXBoQm94LmhlaWdodCArIDMgKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIHJldHVybiBnO1xufTtcbmNvbnN0IGRyYXdFbmRTdGF0ZSA9IChnKSA9PiB7XG4gIGcuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVuZC1zdGF0ZS1vdXRlclwiKS5hdHRyKFwiclwiLCBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKFxuICAgIFwiY3hcIixcbiAgICBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyBnZXRDb25maWcoKS5zdGF0ZS5taW5pUGFkZGluZ1xuICApLmF0dHIoXG4gICAgXCJjeVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgKyBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nXG4gICk7XG4gIHJldHVybiBnLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlbmQtc3RhdGUtaW5uZXJcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyAyKS5hdHRyKFwiY3lcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIGdldENvbmZpZygpLnN0YXRlLnNpemVVbml0ICsgMik7XG59O1xuY29uc3QgZHJhd0ZvcmtKb2luU3RhdGUgPSAoZywgc3RhdGVEZWYpID0+IHtcbiAgbGV0IHdpZHRoID0gZ2V0Q29uZmlnKCkuc3RhdGUuZm9ya1dpZHRoO1xuICBsZXQgaGVpZ2h0ID0gZ2V0Q29uZmlnKCkuc3RhdGUuZm9ya0hlaWdodDtcbiAgaWYgKHN0YXRlRGVmLnBhcmVudElkKSB7XG4gICAgbGV0IHRtcCA9IHdpZHRoO1xuICAgIHdpZHRoID0gaGVpZ2h0O1xuICAgIGhlaWdodCA9IHRtcDtcbiAgfVxuICByZXR1cm4gZy5hcHBlbmQoXCJyZWN0XCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwiYmxhY2tcIikuc3R5bGUoXCJmaWxsXCIsIFwiYmxhY2tcIikuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCkuYXR0cihcInhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG59O1xuY29uc3QgX2RyYXdMb25nVGV4dCA9IChfdGV4dCwgeCwgeSwgZykgPT4ge1xuICBsZXQgdGV4dEhlaWdodCA9IDA7XG4gIGNvbnN0IHRleHRFbGVtID0gZy5hcHBlbmQoXCJ0ZXh0XCIpO1xuICB0ZXh0RWxlbS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIik7XG4gIHRleHRFbGVtLmF0dHIoXCJjbGFzc1wiLCBcIm5vdGVUZXh0XCIpO1xuICBsZXQgdGV4dCA9IF90ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCBcIjxici8+XCIpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4vZywgXCI8YnIvPlwiKTtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCk7XG4gIGxldCB0SGVpZ2h0ID0gMS4yNSAqIGdldENvbmZpZygpLnN0YXRlLm5vdGVNYXJnaW47XG4gIGZvciAoY29uc3QgbGluZTIgb2YgbGluZXMpIHtcbiAgICBjb25zdCB0eHQgPSBsaW5lMi50cmltKCk7XG4gICAgaWYgKHR4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gICAgICBzcGFuLnRleHQodHh0KTtcbiAgICAgIGlmICh0SGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRleHRCb3VuZHMgPSBzcGFuLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIHRIZWlnaHQgKz0gdGV4dEJvdW5kcy5oZWlnaHQ7XG4gICAgICB9XG4gICAgICB0ZXh0SGVpZ2h0ICs9IHRIZWlnaHQ7XG4gICAgICBzcGFuLmF0dHIoXCJ4XCIsIHggKyBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luKTtcbiAgICAgIHNwYW4uYXR0cihcInlcIiwgeSArIHRleHRIZWlnaHQgKyAxLjI1ICogZ2V0Q29uZmlnKCkuc3RhdGUubm90ZU1hcmdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHRleHRXaWR0aDogdGV4dEVsZW0ubm9kZSgpLmdldEJCb3goKS53aWR0aCwgdGV4dEhlaWdodCB9O1xufTtcbmNvbnN0IGRyYXdOb3RlID0gKHRleHQsIGcpID0+IHtcbiAgZy5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1ub3RlXCIpO1xuICBjb25zdCBub3RlID0gZy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpO1xuICBjb25zdCByZWN0RWxlbSA9IGcuYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgeyB0ZXh0V2lkdGgsIHRleHRIZWlnaHQgfSA9IF9kcmF3TG9uZ1RleHQodGV4dCwgMCwgMCwgcmVjdEVsZW0pO1xuICBub3RlLmF0dHIoXCJoZWlnaHRcIiwgdGV4dEhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luKTtcbiAgbm90ZS5hdHRyKFwid2lkdGhcIiwgdGV4dFdpZHRoICsgZ2V0Q29uZmlnKCkuc3RhdGUubm90ZU1hcmdpbiAqIDIpO1xuICByZXR1cm4gbm90ZTtcbn07XG5jb25zdCBkcmF3U3RhdGUgPSBmdW5jdGlvbihlbGVtLCBzdGF0ZURlZikge1xuICBjb25zdCBpZCA9IHN0YXRlRGVmLmlkO1xuICBjb25zdCBzdGF0ZUluZm8gPSB7XG4gICAgaWQsXG4gICAgbGFiZWw6IHN0YXRlRGVmLmlkLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9O1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcImNsYXNzXCIsIFwic3RhdGVHcm91cFwiKTtcbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwic3RhcnRcIikge1xuICAgIGRyYXdTdGFydFN0YXRlKGcpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImVuZFwiKSB7XG4gICAgZHJhd0VuZFN0YXRlKGcpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImZvcmtcIiB8fCBzdGF0ZURlZi50eXBlID09PSBcImpvaW5cIikge1xuICAgIGRyYXdGb3JrSm9pblN0YXRlKGcsIHN0YXRlRGVmKTtcbiAgfVxuICBpZiAoc3RhdGVEZWYudHlwZSA9PT0gXCJub3RlXCIpIHtcbiAgICBkcmF3Tm90ZShzdGF0ZURlZi5ub3RlLnRleHQsIGcpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImRpdmlkZXJcIikge1xuICAgIGRyYXdEaXZpZGVyKGcpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImRlZmF1bHRcIiAmJiBzdGF0ZURlZi5kZXNjcmlwdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgZHJhd1NpbXBsZVN0YXRlKGcsIHN0YXRlRGVmKTtcbiAgfVxuICBpZiAoc3RhdGVEZWYudHlwZSA9PT0gXCJkZWZhdWx0XCIgJiYgc3RhdGVEZWYuZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBkcmF3RGVzY3JTdGF0ZShnLCBzdGF0ZURlZik7XG4gIH1cbiAgY29uc3Qgc3RhdGVCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIHN0YXRlSW5mby53aWR0aCA9IHN0YXRlQm94LndpZHRoICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmc7XG4gIHN0YXRlSW5mby5oZWlnaHQgPSBzdGF0ZUJveC5oZWlnaHQgKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgaWRDYWNoZSQxLnNldChpZCwgc3RhdGVJbmZvKTtcbiAgcmV0dXJuIHN0YXRlSW5mbztcbn07XG5sZXQgZWRnZUNvdW50ID0gMDtcbmNvbnN0IGRyYXdFZGdlID0gZnVuY3Rpb24oZWxlbSwgcGF0aCwgcmVsYXRpb24pIHtcbiAgY29uc3QgZ2V0UmVsYXRpb25UeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBkYi5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046XG4gICAgICAgIHJldHVybiBcImFnZ3JlZ2F0aW9uXCI7XG4gICAgICBjYXNlIGRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046XG4gICAgICAgIHJldHVybiBcImV4dGVuc2lvblwiO1xuICAgICAgY2FzZSBkYi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046XG4gICAgICAgIHJldHVybiBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBjYXNlIGRiLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOlxuICAgICAgICByZXR1cm4gXCJkZXBlbmRlbmN5XCI7XG4gICAgfVxuICB9O1xuICBwYXRoLnBvaW50cyA9IHBhdGgucG9pbnRzLmZpbHRlcigocCkgPT4gIU51bWJlci5pc05hTihwLnkpKTtcbiAgY29uc3QgbGluZURhdGEgPSBwYXRoLnBvaW50cztcbiAgY29uc3QgbGluZUZ1bmN0aW9uID0gbGluZSgpLngoZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBkLng7XG4gIH0pLnkoZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBkLnk7XG4gIH0pLmN1cnZlKGN1cnZlQmFzaXMpO1xuICBjb25zdCBzdmdQYXRoID0gZWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIGxpbmVGdW5jdGlvbihsaW5lRGF0YSkpLmF0dHIoXCJpZFwiLCBcImVkZ2VcIiArIGVkZ2VDb3VudCkuYXR0cihcImNsYXNzXCIsIFwidHJhbnNpdGlvblwiKTtcbiAgbGV0IHVybCA9IFwiXCI7XG4gIGlmIChnZXRDb25maWcoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlKSB7XG4gICAgdXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCgvZywgXCJcXFxcKFwiKTtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwpL2csIFwiXFxcXClcIik7XG4gIH1cbiAgc3ZnUGF0aC5hdHRyKFxuICAgIFwibWFya2VyLWVuZFwiLFxuICAgIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBnZXRSZWxhdGlvblR5cGUoZGIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpICsgXCJFbmQpXCJcbiAgKTtcbiAgaWYgKHJlbGF0aW9uLnRpdGxlICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBsYWJlbCA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZUxhYmVsXCIpO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gdXRpbHMuY2FsY0xhYmVsUG9zaXRpb24ocGF0aC5wb2ludHMpO1xuICAgIGNvbnN0IHJvd3MgPSBjb21tb24uZ2V0Um93cyhyZWxhdGlvbi50aXRsZSk7XG4gICAgbGV0IHRpdGxlSGVpZ2h0ID0gMDtcbiAgICBjb25zdCB0aXRsZVJvd3MgPSBbXTtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIGxldCBtaW5YID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGxhYmVsLmFwcGVuZChcInRleHRcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnRleHQocm93c1tpXSkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSArIHRpdGxlSGVpZ2h0KTtcbiAgICAgIGNvbnN0IGJvdW5kc3RtcCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBib3VuZHN0bXAud2lkdGgpO1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIGJvdW5kc3RtcC54KTtcbiAgICAgIGxvZy5pbmZvKGJvdW5kc3RtcC54LCB4LCB5ICsgdGl0bGVIZWlnaHQpO1xuICAgICAgaWYgKHRpdGxlSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlQm94ID0gdGl0bGUubm9kZSgpLmdldEJCb3goKTtcbiAgICAgICAgdGl0bGVIZWlnaHQgPSB0aXRsZUJveC5oZWlnaHQ7XG4gICAgICAgIGxvZy5pbmZvKFwiVGl0bGUgaGVpZ2h0XCIsIHRpdGxlSGVpZ2h0LCB5KTtcbiAgICAgIH1cbiAgICAgIHRpdGxlUm93cy5wdXNoKHRpdGxlKTtcbiAgICB9XG4gICAgbGV0IGJveEhlaWdodCA9IHRpdGxlSGVpZ2h0ICogcm93cy5sZW5ndGg7XG4gICAgaWYgKHJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgaGVpZ2h0QWRqID0gKHJvd3MubGVuZ3RoIC0gMSkgKiB0aXRsZUhlaWdodCAqIDAuNTtcbiAgICAgIHRpdGxlUm93cy5mb3JFYWNoKCh0aXRsZSwgaSkgPT4gdGl0bGUuYXR0cihcInlcIiwgeSArIGkgKiB0aXRsZUhlaWdodCAtIGhlaWdodEFkaikpO1xuICAgICAgYm94SGVpZ2h0ID0gdGl0bGVIZWlnaHQgKiByb3dzLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgYm91bmRzID0gbGFiZWwubm9kZSgpLmdldEJCb3goKTtcbiAgICBsYWJlbC5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJveFwiKS5hdHRyKFwieFwiLCB4IC0gbWF4V2lkdGggLyAyIC0gZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyAvIDIpLmF0dHIoXCJ5XCIsIHkgLSBib3hIZWlnaHQgLyAyIC0gZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyAvIDIgLSAzLjUpLmF0dHIoXCJ3aWR0aFwiLCBtYXhXaWR0aCArIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYm94SGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gICAgbG9nLmluZm8oYm91bmRzKTtcbiAgfVxuICBlZGdlQ291bnQrKztcbn07XG5sZXQgY29uZjtcbmNvbnN0IHRyYW5zZm9ybWF0aW9uTG9nID0ge307XG5jb25zdCBzZXRDb25mID0gZnVuY3Rpb24oKSB7XG59O1xuY29uc3QgaW5zZXJ0TWFya2VycyA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJkZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufTtcbmNvbnN0IGRyYXcgPSBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uZiA9IGdldENvbmZpZygpLnN0YXRlO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgZGlhZ3JhbSBcIiArIHRleHQpO1xuICBjb25zdCBkaWFncmFtMiA9IHJvb3Quc2VsZWN0KGBbaWQ9JyR7aWR9J11gKTtcbiAgaW5zZXJ0TWFya2VycyhkaWFncmFtMik7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGNvbXBvdW5kOiB0cnVlLFxuICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgcmFua2RpcjogXCJSTFwiXG4gICAgLy8gcmFua3NlcDogJzIwJ1xuICB9KTtcbiAgZ3JhcGguc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBjb25zdCByb290RG9jID0gZGlhZ09iai5kYi5nZXRSb290RG9jKCk7XG4gIHJlbmRlckRvYyhyb290RG9jLCBkaWFncmFtMiwgdm9pZCAwLCBmYWxzZSwgcm9vdCwgZG9jLCBkaWFnT2JqKTtcbiAgY29uc3QgcGFkZGluZyA9IGNvbmYucGFkZGluZztcbiAgY29uc3QgYm91bmRzID0gZGlhZ3JhbTIubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBib3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBzdmdXaWR0aCA9IHdpZHRoICogMS43NTtcbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCBzdmdXaWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIGRpYWdyYW0yLmF0dHIoXG4gICAgXCJ2aWV3Qm94XCIsXG4gICAgYCR7Ym91bmRzLnggLSBjb25mLnBhZGRpbmd9ICAke2JvdW5kcy55IC0gY29uZi5wYWRkaW5nfSBgICsgd2lkdGggKyBcIiBcIiArIGhlaWdodFxuICApO1xufTtcbmNvbnN0IGdldExhYmVsV2lkdGggPSAodGV4dCkgPT4ge1xuICByZXR1cm4gdGV4dCA/IHRleHQubGVuZ3RoICogY29uZi5mb250U2l6ZUZhY3RvciA6IDE7XG59O1xuY29uc3QgcmVuZGVyRG9jID0gKGRvYywgZGlhZ3JhbTIsIHBhcmVudElkLCBhbHRCa2csIHJvb3QsIGRvbURvY3VtZW50LCBkaWFnT2JqKSA9PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICBtdWx0aWdyYXBoOiB0cnVlXG4gIH0pO1xuICBsZXQgaTtcbiAgbGV0IGVkZ2VGcmVlRG9jID0gdHJ1ZTtcbiAgZm9yIChpID0gMDsgaSA8IGRvYy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2NbaV0uc3RtdCA9PT0gXCJyZWxhdGlvblwiKSB7XG4gICAgICBlZGdlRnJlZURvYyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwYXJlbnRJZCkge1xuICAgIGdyYXBoLnNldEdyYXBoKHtcbiAgICAgIHJhbmtkaXI6IFwiTFJcIixcbiAgICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICByYW5rZXI6IFwidGlnaHQtdHJlZVwiLFxuICAgICAgcmFua3NlcDogZWRnZUZyZWVEb2MgPyAxIDogY29uZi5lZGdlTGVuZ3RoRmFjdG9yLFxuICAgICAgbm9kZVNlcDogZWRnZUZyZWVEb2MgPyAxIDogNTAsXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICAgIC8vIHJhbmtzZXA6IDUsXG4gICAgICAvLyBub2Rlc2VwOiAxXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZ3JhcGguc2V0R3JhcGgoe1xuICAgICAgcmFua2RpcjogXCJUQlwiLFxuICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgIGNvbXBvdW5kOiB0cnVlLFxuICAgICAgLy8gaXNDb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICAvLyByYW5rZXI6ICdsb25nZXN0LXBhdGgnXG4gICAgICByYW5rc2VwOiBlZGdlRnJlZURvYyA/IDEgOiBjb25mLmVkZ2VMZW5ndGhGYWN0b3IsXG4gICAgICBub2RlU2VwOiBlZGdlRnJlZURvYyA/IDEgOiA1MCxcbiAgICAgIHJhbmtlcjogXCJ0aWdodC10cmVlXCIsXG4gICAgICAvLyByYW5rZXI6ICduZXR3b3JrLXNpbXBsZXgnXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICB9KTtcbiAgfVxuICBncmFwaC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGRpYWdPYmouZGIuZXh0cmFjdChkb2MpO1xuICBjb25zdCBzdGF0ZXMgPSBkaWFnT2JqLmRiLmdldFN0YXRlcygpO1xuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKHN0YXRlcyk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMyKSB7XG4gICAgY29uc3Qgc3RhdGVEZWYgPSBzdGF0ZXNba2V5XTtcbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIHN0YXRlRGVmLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgfVxuICAgIGxldCBub2RlO1xuICAgIGlmIChzdGF0ZURlZi5kb2MpIHtcbiAgICAgIGxldCBzdWIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBzdGF0ZURlZi5pZCkuYXR0cihcImNsYXNzXCIsIFwic3RhdGVHcm91cFwiKTtcbiAgICAgIG5vZGUgPSByZW5kZXJEb2Moc3RhdGVEZWYuZG9jLCBzdWIsIHN0YXRlRGVmLmlkLCAhYWx0QmtnLCByb290LCBkb21Eb2N1bWVudCwgZGlhZ09iaik7XG4gICAgICB7XG4gICAgICAgIHN1YiA9IGFkZFRpdGxlQW5kQm94KHN1Yiwgc3RhdGVEZWYsIGFsdEJrZyk7XG4gICAgICAgIGxldCBib3hCb3VuZHMgPSBzdWIubm9kZSgpLmdldEJCb3goKTtcbiAgICAgICAgbm9kZS53aWR0aCA9IGJveEJvdW5kcy53aWR0aDtcbiAgICAgICAgbm9kZS5oZWlnaHQgPSBib3hCb3VuZHMuaGVpZ2h0ICsgY29uZi5wYWRkaW5nIC8gMjtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25Mb2dbc3RhdGVEZWYuaWRdID0geyB5OiBjb25mLmNvbXBvc2l0VGl0bGVTaXplIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBkcmF3U3RhdGUoZGlhZ3JhbTIsIHN0YXRlRGVmKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlRGVmLm5vdGUpIHtcbiAgICAgIGNvbnN0IG5vdGVEZWYgPSB7XG4gICAgICAgIGRlc2NyaXB0aW9uczogW10sXG4gICAgICAgIGlkOiBzdGF0ZURlZi5pZCArIFwiLW5vdGVcIixcbiAgICAgICAgbm90ZTogc3RhdGVEZWYubm90ZSxcbiAgICAgICAgdHlwZTogXCJub3RlXCJcbiAgICAgIH07XG4gICAgICBjb25zdCBub3RlID0gZHJhd1N0YXRlKGRpYWdyYW0yLCBub3RlRGVmKTtcbiAgICAgIGlmIChzdGF0ZURlZi5ub3RlLnBvc2l0aW9uID09PSBcImxlZnQgb2ZcIikge1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQgKyBcIi1ub3RlXCIsIG5vdGUpO1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkICsgXCItbm90ZVwiLCBub3RlKTtcbiAgICAgIH1cbiAgICAgIGdyYXBoLnNldFBhcmVudChub2RlLmlkLCBub2RlLmlkICsgXCItZ3JvdXBcIik7XG4gICAgICBncmFwaC5zZXRQYXJlbnQobm9kZS5pZCArIFwiLW5vdGVcIiwgbm9kZS5pZCArIFwiLWdyb3VwXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoXCJDb3VudD1cIiwgZ3JhcGgubm9kZUNvdW50KCksIGdyYXBoKTtcbiAgbGV0IGNudCA9IDA7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uKSB7XG4gICAgY250Kys7XG4gICAgbG9nLmRlYnVnKFwiU2V0dGluZyBlZGdlXCIsIHJlbGF0aW9uKTtcbiAgICBncmFwaC5zZXRFZGdlKFxuICAgICAgcmVsYXRpb24uaWQxLFxuICAgICAgcmVsYXRpb24uaWQyLFxuICAgICAge1xuICAgICAgICByZWxhdGlvbixcbiAgICAgICAgd2lkdGg6IGdldExhYmVsV2lkdGgocmVsYXRpb24udGl0bGUpLFxuICAgICAgICBoZWlnaHQ6IGNvbmYubGFiZWxIZWlnaHQgKiBjb21tb24uZ2V0Um93cyhyZWxhdGlvbi50aXRsZSkubGVuZ3RoLFxuICAgICAgICBsYWJlbHBvczogXCJjXCJcbiAgICAgIH0sXG4gICAgICBcImlkXCIgKyBjbnRcbiAgICApO1xuICB9KTtcbiAgbGF5b3V0KGdyYXBoKTtcbiAgbG9nLmRlYnVnKFwiR3JhcGggYWZ0ZXIgbGF5b3V0XCIsIGdyYXBoLm5vZGVzKCkpO1xuICBjb25zdCBzdmdFbGVtID0gZGlhZ3JhbTIubm9kZSgpO1xuICBncmFwaC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZ3JhcGgubm9kZSh2KSAhPT0gdm9pZCAwKSB7XG4gICAgICBsb2cud2FybihcIk5vZGUgXCIgKyB2ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGgubm9kZSh2KSkpO1xuICAgICAgcm9vdC5zZWxlY3QoXCIjXCIgKyBzdmdFbGVtLmlkICsgXCIgI1wiICsgdikuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoZ3JhcGgubm9kZSh2KS54IC0gZ3JhcGgubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZ3JhcGgubm9kZSh2KS55ICsgKHRyYW5zZm9ybWF0aW9uTG9nW3ZdID8gdHJhbnNmb3JtYXRpb25Mb2dbdl0ueSA6IDApIC0gZ3JhcGgubm9kZSh2KS5oZWlnaHQgLyAyKSArIFwiIClcIlxuICAgICAgKTtcbiAgICAgIHJvb3Quc2VsZWN0KFwiI1wiICsgc3ZnRWxlbS5pZCArIFwiICNcIiArIHYpLmF0dHIoXCJkYXRhLXgtc2hpZnRcIiwgZ3JhcGgubm9kZSh2KS54IC0gZ3JhcGgubm9kZSh2KS53aWR0aCAvIDIpO1xuICAgICAgY29uc3QgZGl2aWRlcnMgPSBkb21Eb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI1wiICsgc3ZnRWxlbS5pZCArIFwiICNcIiArIHYgKyBcIiAuZGl2aWRlclwiKTtcbiAgICAgIGRpdmlkZXJzLmZvckVhY2goKGRpdmlkZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZGl2aWRlci5wYXJlbnRFbGVtZW50O1xuICAgICAgICBsZXQgcFdpZHRoID0gMDtcbiAgICAgICAgbGV0IHBTaGlmdCA9IDA7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBpZiAocGFyZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHBXaWR0aCA9IHBhcmVudC5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcFNoaWZ0ID0gcGFyc2VJbnQocGFyZW50LmdldEF0dHJpYnV0ZShcImRhdGEteC1zaGlmdFwiKSwgMTApO1xuICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4ocFNoaWZ0KSkge1xuICAgICAgICAgICAgcFNoaWZ0ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlci5zZXRBdHRyaWJ1dGUoXCJ4MVwiLCAwIC0gcFNoaWZ0ICsgOCk7XG4gICAgICAgIGRpdmlkZXIuc2V0QXR0cmlidXRlKFwieDJcIiwgcFdpZHRoIC0gcFNoaWZ0IC0gOCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKFwiTm8gTm9kZSBcIiArIHYgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5ub2RlKHYpKSk7XG4gICAgfVxuICB9KTtcbiAgbGV0IHN0YXRlQm94ID0gc3ZnRWxlbS5nZXRCQm94KCk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgaWYgKGUgIT09IHZvaWQgMCAmJiBncmFwaC5lZGdlKGUpICE9PSB2b2lkIDApIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLmVkZ2UoZSkpKTtcbiAgICAgIGRyYXdFZGdlKGRpYWdyYW0yLCBncmFwaC5lZGdlKGUpLCBncmFwaC5lZGdlKGUpLnJlbGF0aW9uKTtcbiAgICB9XG4gIH0pO1xuICBzdGF0ZUJveCA9IHN2Z0VsZW0uZ2V0QkJveCgpO1xuICBjb25zdCBzdGF0ZUluZm8gPSB7XG4gICAgaWQ6IHBhcmVudElkID8gcGFyZW50SWQgOiBcInJvb3RcIixcbiAgICBsYWJlbDogcGFyZW50SWQgPyBwYXJlbnRJZCA6IFwicm9vdFwiLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9O1xuICBzdGF0ZUluZm8ud2lkdGggPSBzdGF0ZUJveC53aWR0aCArIDIgKiBjb25mLnBhZGRpbmc7XG4gIHN0YXRlSW5mby5oZWlnaHQgPSBzdGF0ZUJveC5oZWlnaHQgKyAyICogY29uZi5wYWRkaW5nO1xuICBsb2cuZGVidWcoXCJEb2MgcmVuZGVyZWRcIiwgc3RhdGVJbmZvLCBncmFwaCk7XG4gIHJldHVybiBzdGF0ZUluZm87XG59O1xuY29uc3QgcmVuZGVyZXIgPSB7XG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5jb25zdCBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzLFxuICBpbml0OiAoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuc3RhdGUpIHtcbiAgICAgIGNuZi5zdGF0ZSA9IHt9O1xuICAgIH1cbiAgICBjbmYuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIGRiLmNsZWFyKCk7XG4gIH1cbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/stateDiagram-133e3642.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/stateDiagram-v2-6371a76b.js": /*!**********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/stateDiagram-v2-6371a76b.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./styles-fa41df25.js */ \"../../../node_modules/mermaid/dist/styles-fa41df25.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _index_a92ac404_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./index-a92ac404.js */ \"../../../node_modules/mermaid/dist/index-a92ac404.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dagre-d3-es/src/dagre/index.js */ \"../../../node_modules/dagre-d3-es/src/dagre/index.js\");\n/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/json.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/json.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SHAPE_STATE = \"rect\";\nconst SHAPE_STATE_WITH_DESC = \"rectWithTitle\";\nconst SHAPE_START = \"start\";\nconst SHAPE_END = \"end\";\nconst SHAPE_DIVIDER = \"divider\";\nconst SHAPE_GROUP = \"roundedWithTitle\";\nconst SHAPE_NOTE = \"note\";\nconst SHAPE_NOTEGROUP = \"noteGroup\";\nconst CSS_DIAGRAM = \"statediagram\";\nconst CSS_STATE = \"state\";\nconst CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;\nconst CSS_EDGE = \"transition\";\nconst CSS_NOTE = \"note\";\nconst CSS_NOTE_EDGE = \"note-edge\";\nconst CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;\nconst CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;\nconst CSS_CLUSTER = \"cluster\";\nconst CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;\nconst CSS_CLUSTER_ALT = \"cluster-alt\";\nconst CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;\nconst PARENT = \"parent\";\nconst NOTE = \"note\";\nconst DOMID_STATE = \"state\";\nconst DOMID_TYPE_SPACER = \"----\";\nconst NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;\nconst PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`;\nconst G_EDGE_STYLE = \"fill:none\";\nconst G_EDGE_ARROWHEADSTYLE = \"fill: #333\";\nconst G_EDGE_LABELPOS = \"c\";\nconst G_EDGE_LABELTYPE = \"text\";\nconst G_EDGE_THICKNESS = \"normal\";\nlet nodeDb = {};\nlet graphItemCount = 0;\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n cnf[key];\n }\n};\nconst getClasses = function(text, diagramObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.trace(\"Extracting classes\");\n diagramObj.db.clear();\n try {\n diagramObj.parser.parse(text);\n diagramObj.db.extract(diagramObj.db.getRootDocV2());\n return diagramObj.db.getClasses();\n } catch (e) {\n return e;\n }\n};\nfunction getClassesFromDbInfo(dbInfoItem) {\n if (dbInfoItem === void 0 || dbInfoItem === null) {\n return \"\";\n } else {\n if (dbInfoItem.classes) {\n return dbInfoItem.classes.join(\" \");\n } else {\n return \"\";\n }\n }\n}\nfunction stateDomId(itemId = \"\", counter = 0, type = \"\", typeSpacer = DOMID_TYPE_SPACER) {\n const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : \"\";\n return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;\n}\nconst setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => {\n const itemId = parsedItem.id;\n const classStr = getClassesFromDbInfo(diagramStates[itemId]);\n if (itemId !== \"root\") {\n let shape = SHAPE_STATE;\n if (parsedItem.start === true) {\n shape = SHAPE_START;\n }\n if (parsedItem.start === false) {\n shape = SHAPE_END;\n }\n if (parsedItem.type !== _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.D) {\n shape = parsedItem.type;\n }\n if (!nodeDb[itemId]) {\n nodeDb[itemId] = {\n id: itemId,\n shape,\n description: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)()),\n classes: `${classStr} ${CSS_DIAGRAM_STATE}`\n };\n }\n const newNode = nodeDb[itemId];\n if (parsedItem.description) {\n if (Array.isArray(newNode.description)) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n newNode.description.push(parsedItem.description);\n } else {\n if (newNode.description.length > 0) {\n newNode.shape = SHAPE_STATE_WITH_DESC;\n if (newNode.description === itemId) {\n newNode.description = [parsedItem.description];\n } else {\n newNode.description = [newNode.description, parsedItem.description];\n }\n } else {\n newNode.shape = SHAPE_STATE;\n newNode.description = parsedItem.description;\n }\n }\n newNode.description = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)());\n }\n if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {\n newNode.shape = SHAPE_STATE;\n }\n if (!newNode.type && parsedItem.doc) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"Setting cluster for \", itemId, getDir(parsedItem));\n newNode.type = \"group\";\n newNode.dir = getDir(parsedItem);\n newNode.shape = parsedItem.type === _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.a ? SHAPE_DIVIDER : SHAPE_GROUP;\n newNode.classes = newNode.classes + \" \" + CSS_DIAGRAM_CLUSTER + \" \" + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : \"\");\n }\n const nodeData = {\n labelStyle: \"\",\n shape: newNode.shape,\n labelText: newNode.description,\n // typeof newNode.description === 'object'\n // ? newNode.description[0]\n // : newNode.description,\n classes: newNode.classes,\n style: \"\",\n //styles.style,\n id: itemId,\n dir: newNode.dir,\n domId: stateDomId(itemId, graphItemCount),\n type: newNode.type,\n padding: 15\n //getConfig().flowchart.padding\n };\n nodeData.centerLabel = true;\n if (parsedItem.note) {\n const noteData = {\n labelStyle: \"\",\n shape: SHAPE_NOTE,\n labelText: parsedItem.note.text,\n classes: CSS_DIAGRAM_NOTE,\n // useHtmlLabels: false,\n style: \"\",\n // styles.style,\n id: itemId + NOTE_ID + \"-\" + graphItemCount,\n domId: stateDomId(itemId, graphItemCount, NOTE),\n type: newNode.type,\n padding: 15\n //getConfig().flowchart.padding\n };\n const groupData = {\n labelStyle: \"\",\n shape: SHAPE_NOTEGROUP,\n labelText: parsedItem.note.text,\n classes: newNode.classes,\n style: \"\",\n // styles.style,\n id: itemId + PARENT_ID,\n domId: stateDomId(itemId, graphItemCount, PARENT),\n type: \"group\",\n padding: 0\n //getConfig().flowchart.padding\n };\n graphItemCount++;\n const parentNodeId = itemId + PARENT_ID;\n g.setNode(parentNodeId, groupData);\n g.setNode(noteData.id, noteData);\n g.setNode(itemId, nodeData);\n g.setParent(itemId, parentNodeId);\n g.setParent(noteData.id, parentNodeId);\n let from = itemId;\n let to = noteData.id;\n if (parsedItem.note.position === \"left of\") {\n from = noteData.id;\n to = itemId;\n }\n g.setEdge(from, to, {\n arrowhead: \"none\",\n arrowType: \"\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n classes: CSS_EDGE_NOTE_EDGE,\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS\n });\n } else {\n g.setNode(itemId, nodeData);\n }\n }\n if (parent && parent.id !== \"root\") {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.trace(\"Setting node \", itemId, \" to be child of its parent \", parent.id);\n g.setParent(itemId, parent.id);\n }\n if (parsedItem.doc) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.trace(\"Adding nodes children \");\n setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag);\n }\n};\nconst setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.trace(\"items\", doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.b:\n setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag);\n break;\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.D:\n setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag);\n break;\n case _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.S:\n {\n setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag);\n setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag);\n const edgeData = {\n id: \"edge\" + graphItemCount,\n arrowhead: \"normal\",\n arrowTypeEnd: \"arrow_barb\",\n style: G_EDGE_STYLE,\n labelStyle: \"\",\n label: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)()),\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n classes: CSS_EDGE\n };\n g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount);\n graphItemCount++;\n }\n break;\n }\n });\n};\nconst getDir = (parsedItem, defaultDir = _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.c) => {\n let dir = defaultDir;\n if (parsedItem.doc) {\n for (let i = 0; i < parsedItem.doc.length; i++) {\n const parsedItemDoc = parsedItem.doc[i];\n if (parsedItemDoc.stmt === \"dir\") {\n dir = parsedItemDoc.value;\n }\n }\n }\n return dir;\n};\nconst draw = async function(text, id, _version, diag) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(\"Drawing state diagram (v2)\", id);\n nodeDb = {};\n diag.db.getDirection();\n const { securityLevel, state: conf } = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.c)();\n const nodeSpacing = conf.nodeSpacing || 50;\n const rankSpacing = conf.rankSpacing || 50;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2());\n diag.db.extract(diag.db.getRootDocV2());\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2());\n const diagramStates = diag.db.getStates();\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: getDir(diag.db.getRootDocV2()),\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true);\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n await (0,_index_a92ac404_js__WEBPACK_IMPORTED_MODULE_10__.r)(element, g, [\"barb\"], CSS_DIAGRAM, id);\n const padding = 8;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, \"statediagramTitleText\", conf.titleTopMargin, diag.db.getDiagramTitle());\n const bounds = svg.node().getBBox();\n const width = bounds.width + padding * 2;\n const height = bounds.height + padding * 2;\n svg.attr(\"class\", CSS_DIAGRAM);\n const svgBounds = svg.node().getBBox();\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, height, width, conf.useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`);\n svg.attr(\"viewBox\", vBox);\n const labels = document.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", SHAPE_STATE);\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n};\nconst renderer = {\n setConf,\n getClasses,\n draw\n};\nconst diagram = {\n parser: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.p,\n db: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.d,\n renderer,\n styles: _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.s,\n init: (cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n _styles_fa41df25_js__WEBPACK_IMPORTED_MODULE_9__.d.clear();\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdGF0ZURpYWdyYW0tdjItNjM3MWE3NmIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXVMO0FBQ3pIO0FBQ2xDO0FBQ3FGO0FBQy9EO0FBQy9CO0FBQ0o7QUFDa0I7QUFDZDtBQUNIO0FBQ2M7QUFDZDtBQUNjO0FBQ1U7QUFDRTtBQUNiO0FBQ0s7QUFDQTtBQUNIO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFlBQVksR0FBRyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixVQUFVLEVBQUUsY0FBYztBQUN4RCw0QkFBNEIsWUFBWSxHQUFHLFNBQVM7QUFDcEQ7QUFDQSwrQkFBK0IsWUFBWSxHQUFHLFlBQVk7QUFDMUQ7QUFDQSxtQ0FBbUMsWUFBWSxHQUFHLGdCQUFnQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0IsRUFBRSxLQUFLO0FBQzVDLHFCQUFxQixrQkFBa0IsRUFBRSxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELFdBQVcsRUFBRSxLQUFLO0FBQzFFLFlBQVksWUFBWSxHQUFHLE9BQU8sRUFBRSxRQUFRLEdBQUcsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0RBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixnRUFBbUIsU0FBUyx1REFBUztBQUMxRCxvQkFBb0IsVUFBVSxFQUFFLGtCQUFrQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVFQUEwQixzQkFBc0IsdURBQVM7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0RBQVE7QUFDZDtBQUNBO0FBQ0EsMENBQTBDLGtEQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx5REFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBLElBQUkseURBQVM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUseURBQVM7QUFDWDtBQUNBO0FBQ0EsV0FBVyxrREFBVTtBQUNyQjtBQUNBO0FBQ0EsV0FBVyxrREFBa0I7QUFDN0I7QUFDQTtBQUNBLFdBQVcsa0RBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdFQUFtQixtQkFBbUIsdURBQVM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHlDQUF5QyxrREFBc0I7QUFDL0Q7QUFDQTtBQUNBLG9CQUFvQiwyQkFBMkI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBUTtBQUNWO0FBQ0E7QUFDQSxVQUFVLDZCQUE2QixFQUFFLHVEQUFTO0FBQ2xEO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQSxnQkFBZ0Isb0VBQWM7QUFDOUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwQ0FBTTtBQUMzQjtBQUNBLDZDQUE2QywwQ0FBTSxtREFBbUQsMENBQU07QUFDNUcsa0NBQWtDLEdBQUc7QUFDckM7QUFDQSxRQUFRLHNEQUFNO0FBQ2Q7QUFDQSxFQUFFLCtEQUFpQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx1REFBZ0I7QUFDbEIsa0JBQWtCLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxPQUFPO0FBQ3BGLEVBQUUseURBQVMsWUFBWSxLQUFLO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixJQUFJO0FBQ0o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQVE7QUFDWjtBQUNBO0FBR0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdGF0ZURpYWdyYW0tdjItNjM3MWE3NmIuanM/MTY0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEIGFzIERFRkFVTFRfU1RBVEVfVFlQRSwgYSBhcyBESVZJREVSX1RZUEUsIFMgYXMgU1RNVF9SRUxBVElPTiwgYiBhcyBTVE1UX1NUQVRFLCBjIGFzIERFRkFVTFRfTkVTVEVEX0RPQ19ESVIsIHAgYXMgcGFyc2VyLCBkIGFzIGRiLCBzIGFzIHN0eWxlcyB9IGZyb20gXCIuL3N0eWxlcy1mYTQxZGYyNS5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsIGFzIGxvZywgYyBhcyBnZXRDb25maWcsIHUgYXMgdXRpbHMsIGkgYXMgY29uZmlndXJlU3ZnU2l6ZSwgZSBhcyBjb21tb24gfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyByIGFzIHJlbmRlciB9IGZyb20gXCIuL2luZGV4LWE5MmFjNDA0LmpzXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJraHJvbWFcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9tZW1vaXplLmpzXCI7XG5pbXBvcnQgXCJzdHlsaXNcIjtcbmltcG9ydCBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgXCIuL2VkZ2VzLTQ5YWM0M2EyLmpzXCI7XG5pbXBvcnQgXCIuL2NyZWF0ZVRleHQtM2RmNjMwYjUuanNcIjtcbmltcG9ydCBcIm1kYXN0LXV0aWwtZnJvbS1tYXJrZG93blwiO1xuaW1wb3J0IFwiLi9zdmdEcmF3LTBmY2M4MTNkLmpzXCI7XG5jb25zdCBTSEFQRV9TVEFURSA9IFwicmVjdFwiO1xuY29uc3QgU0hBUEVfU1RBVEVfV0lUSF9ERVNDID0gXCJyZWN0V2l0aFRpdGxlXCI7XG5jb25zdCBTSEFQRV9TVEFSVCA9IFwic3RhcnRcIjtcbmNvbnN0IFNIQVBFX0VORCA9IFwiZW5kXCI7XG5jb25zdCBTSEFQRV9ESVZJREVSID0gXCJkaXZpZGVyXCI7XG5jb25zdCBTSEFQRV9HUk9VUCA9IFwicm91bmRlZFdpdGhUaXRsZVwiO1xuY29uc3QgU0hBUEVfTk9URSA9IFwibm90ZVwiO1xuY29uc3QgU0hBUEVfTk9URUdST1VQID0gXCJub3RlR3JvdXBcIjtcbmNvbnN0IENTU19ESUFHUkFNID0gXCJzdGF0ZWRpYWdyYW1cIjtcbmNvbnN0IENTU19TVEFURSA9IFwic3RhdGVcIjtcbmNvbnN0IENTU19ESUFHUkFNX1NUQVRFID0gYCR7Q1NTX0RJQUdSQU19LSR7Q1NTX1NUQVRFfWA7XG5jb25zdCBDU1NfRURHRSA9IFwidHJhbnNpdGlvblwiO1xuY29uc3QgQ1NTX05PVEUgPSBcIm5vdGVcIjtcbmNvbnN0IENTU19OT1RFX0VER0UgPSBcIm5vdGUtZWRnZVwiO1xuY29uc3QgQ1NTX0VER0VfTk9URV9FREdFID0gYCR7Q1NTX0VER0V9ICR7Q1NTX05PVEVfRURHRX1gO1xuY29uc3QgQ1NTX0RJQUdSQU1fTk9URSA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19OT1RFfWA7XG5jb25zdCBDU1NfQ0xVU1RFUiA9IFwiY2x1c3RlclwiO1xuY29uc3QgQ1NTX0RJQUdSQU1fQ0xVU1RFUiA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19DTFVTVEVSfWA7XG5jb25zdCBDU1NfQ0xVU1RFUl9BTFQgPSBcImNsdXN0ZXItYWx0XCI7XG5jb25zdCBDU1NfRElBR1JBTV9DTFVTVEVSX0FMVCA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19DTFVTVEVSX0FMVH1gO1xuY29uc3QgUEFSRU5UID0gXCJwYXJlbnRcIjtcbmNvbnN0IE5PVEUgPSBcIm5vdGVcIjtcbmNvbnN0IERPTUlEX1NUQVRFID0gXCJzdGF0ZVwiO1xuY29uc3QgRE9NSURfVFlQRV9TUEFDRVIgPSBcIi0tLS1cIjtcbmNvbnN0IE5PVEVfSUQgPSBgJHtET01JRF9UWVBFX1NQQUNFUn0ke05PVEV9YDtcbmNvbnN0IFBBUkVOVF9JRCA9IGAke0RPTUlEX1RZUEVfU1BBQ0VSfSR7UEFSRU5UfWA7XG5jb25zdCBHX0VER0VfU1RZTEUgPSBcImZpbGw6bm9uZVwiO1xuY29uc3QgR19FREdFX0FSUk9XSEVBRFNUWUxFID0gXCJmaWxsOiAjMzMzXCI7XG5jb25zdCBHX0VER0VfTEFCRUxQT1MgPSBcImNcIjtcbmNvbnN0IEdfRURHRV9MQUJFTFRZUEUgPSBcInRleHRcIjtcbmNvbnN0IEdfRURHRV9USElDS05FU1MgPSBcIm5vcm1hbFwiO1xubGV0IG5vZGVEYiA9IHt9O1xubGV0IGdyYXBoSXRlbUNvdW50ID0gMDtcbmNvbnN0IHNldENvbmYgPSBmdW5jdGlvbihjbmYpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNuZik7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjbmZba2V5XTtcbiAgfVxufTtcbmNvbnN0IGdldENsYXNzZXMgPSBmdW5jdGlvbih0ZXh0LCBkaWFncmFtT2JqKSB7XG4gIGxvZy50cmFjZShcIkV4dHJhY3RpbmcgY2xhc3Nlc1wiKTtcbiAgZGlhZ3JhbU9iai5kYi5jbGVhcigpO1xuICB0cnkge1xuICAgIGRpYWdyYW1PYmoucGFyc2VyLnBhcnNlKHRleHQpO1xuICAgIGRpYWdyYW1PYmouZGIuZXh0cmFjdChkaWFncmFtT2JqLmRiLmdldFJvb3REb2NWMigpKTtcbiAgICByZXR1cm4gZGlhZ3JhbU9iai5kYi5nZXRDbGFzc2VzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufTtcbmZ1bmN0aW9uIGdldENsYXNzZXNGcm9tRGJJbmZvKGRiSW5mb0l0ZW0pIHtcbiAgaWYgKGRiSW5mb0l0ZW0gPT09IHZvaWQgMCB8fCBkYkluZm9JdGVtID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRiSW5mb0l0ZW0uY2xhc3Nlcykge1xuICAgICAgcmV0dXJuIGRiSW5mb0l0ZW0uY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzdGF0ZURvbUlkKGl0ZW1JZCA9IFwiXCIsIGNvdW50ZXIgPSAwLCB0eXBlID0gXCJcIiwgdHlwZVNwYWNlciA9IERPTUlEX1RZUEVfU1BBQ0VSKSB7XG4gIGNvbnN0IHR5cGVTdHIgPSB0eXBlICE9PSBudWxsICYmIHR5cGUubGVuZ3RoID4gMCA/IGAke3R5cGVTcGFjZXJ9JHt0eXBlfWAgOiBcIlwiO1xuICByZXR1cm4gYCR7RE9NSURfU1RBVEV9LSR7aXRlbUlkfSR7dHlwZVN0cn0tJHtjb3VudGVyfWA7XG59XG5jb25zdCBzZXR1cE5vZGUgPSAoZywgcGFyZW50LCBwYXJzZWRJdGVtLCBkaWFncmFtU3RhdGVzLCBkaWFncmFtRGIsIGFsdEZsYWcpID0+IHtcbiAgY29uc3QgaXRlbUlkID0gcGFyc2VkSXRlbS5pZDtcbiAgY29uc3QgY2xhc3NTdHIgPSBnZXRDbGFzc2VzRnJvbURiSW5mbyhkaWFncmFtU3RhdGVzW2l0ZW1JZF0pO1xuICBpZiAoaXRlbUlkICE9PSBcInJvb3RcIikge1xuICAgIGxldCBzaGFwZSA9IFNIQVBFX1NUQVRFO1xuICAgIGlmIChwYXJzZWRJdGVtLnN0YXJ0ID09PSB0cnVlKSB7XG4gICAgICBzaGFwZSA9IFNIQVBFX1NUQVJUO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSXRlbS5zdGFydCA9PT0gZmFsc2UpIHtcbiAgICAgIHNoYXBlID0gU0hBUEVfRU5EO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSXRlbS50eXBlICE9PSBERUZBVUxUX1NUQVRFX1RZUEUpIHtcbiAgICAgIHNoYXBlID0gcGFyc2VkSXRlbS50eXBlO1xuICAgIH1cbiAgICBpZiAoIW5vZGVEYltpdGVtSWRdKSB7XG4gICAgICBub2RlRGJbaXRlbUlkXSA9IHtcbiAgICAgICAgaWQ6IGl0ZW1JZCxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjb21tb24uc2FuaXRpemVUZXh0KGl0ZW1JZCwgZ2V0Q29uZmlnKCkpLFxuICAgICAgICBjbGFzc2VzOiBgJHtjbGFzc1N0cn0gJHtDU1NfRElBR1JBTV9TVEFURX1gXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBuZXdOb2RlID0gbm9kZURiW2l0ZW1JZF07XG4gICAgaWYgKHBhcnNlZEl0ZW0uZGVzY3JpcHRpb24pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld05vZGUuZGVzY3JpcHRpb24pKSB7XG4gICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURV9XSVRIX0RFU0M7XG4gICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24ucHVzaChwYXJzZWRJdGVtLmRlc2NyaXB0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdOb2RlLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBuZXdOb2RlLnNoYXBlID0gU0hBUEVfU1RBVEVfV0lUSF9ERVNDO1xuICAgICAgICAgIGlmIChuZXdOb2RlLmRlc2NyaXB0aW9uID09PSBpdGVtSWQpIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbbmV3Tm9kZS5kZXNjcmlwdGlvbiwgcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICAgICAgICBuZXdOb2RlLmRlc2NyaXB0aW9uID0gcGFyc2VkSXRlbS5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3Tm9kZS5kZXNjcmlwdGlvbiA9IGNvbW1vbi5zYW5pdGl6ZVRleHRPckFycmF5KG5ld05vZGUuZGVzY3JpcHRpb24sIGdldENvbmZpZygpKTtcbiAgICB9XG4gICAgaWYgKG5ld05vZGUuZGVzY3JpcHRpb24ubGVuZ3RoID09PSAxICYmIG5ld05vZGUuc2hhcGUgPT09IFNIQVBFX1NUQVRFX1dJVEhfREVTQykge1xuICAgICAgbmV3Tm9kZS5zaGFwZSA9IFNIQVBFX1NUQVRFO1xuICAgIH1cbiAgICBpZiAoIW5ld05vZGUudHlwZSAmJiBwYXJzZWRJdGVtLmRvYykge1xuICAgICAgbG9nLmluZm8oXCJTZXR0aW5nIGNsdXN0ZXIgZm9yIFwiLCBpdGVtSWQsIGdldERpcihwYXJzZWRJdGVtKSk7XG4gICAgICBuZXdOb2RlLnR5cGUgPSBcImdyb3VwXCI7XG4gICAgICBuZXdOb2RlLmRpciA9IGdldERpcihwYXJzZWRJdGVtKTtcbiAgICAgIG5ld05vZGUuc2hhcGUgPSBwYXJzZWRJdGVtLnR5cGUgPT09IERJVklERVJfVFlQRSA/IFNIQVBFX0RJVklERVIgOiBTSEFQRV9HUk9VUDtcbiAgICAgIG5ld05vZGUuY2xhc3NlcyA9IG5ld05vZGUuY2xhc3NlcyArIFwiIFwiICsgQ1NTX0RJQUdSQU1fQ0xVU1RFUiArIFwiIFwiICsgKGFsdEZsYWcgPyBDU1NfRElBR1JBTV9DTFVTVEVSX0FMVCA6IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBub2RlRGF0YSA9IHtcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBzaGFwZTogbmV3Tm9kZS5zaGFwZSxcbiAgICAgIGxhYmVsVGV4dDogbmV3Tm9kZS5kZXNjcmlwdGlvbixcbiAgICAgIC8vIHR5cGVvZiBuZXdOb2RlLmRlc2NyaXB0aW9uID09PSAnb2JqZWN0J1xuICAgICAgLy8gICA/IG5ld05vZGUuZGVzY3JpcHRpb25bMF1cbiAgICAgIC8vICAgOiBuZXdOb2RlLmRlc2NyaXB0aW9uLFxuICAgICAgY2xhc3NlczogbmV3Tm9kZS5jbGFzc2VzLFxuICAgICAgc3R5bGU6IFwiXCIsXG4gICAgICAvL3N0eWxlcy5zdHlsZSxcbiAgICAgIGlkOiBpdGVtSWQsXG4gICAgICBkaXI6IG5ld05vZGUuZGlyLFxuICAgICAgZG9tSWQ6IHN0YXRlRG9tSWQoaXRlbUlkLCBncmFwaEl0ZW1Db3VudCksXG4gICAgICB0eXBlOiBuZXdOb2RlLnR5cGUsXG4gICAgICBwYWRkaW5nOiAxNVxuICAgICAgLy9nZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZ1xuICAgIH07XG4gICAgbm9kZURhdGEuY2VudGVyTGFiZWwgPSB0cnVlO1xuICAgIGlmIChwYXJzZWRJdGVtLm5vdGUpIHtcbiAgICAgIGNvbnN0IG5vdGVEYXRhID0ge1xuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBzaGFwZTogU0hBUEVfTk9URSxcbiAgICAgICAgbGFiZWxUZXh0OiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY2xhc3NlczogQ1NTX0RJQUdSQU1fTk9URSxcbiAgICAgICAgLy8gdXNlSHRtbExhYmVsczogZmFsc2UsXG4gICAgICAgIHN0eWxlOiBcIlwiLFxuICAgICAgICAvLyBzdHlsZXMuc3R5bGUsXG4gICAgICAgIGlkOiBpdGVtSWQgKyBOT1RFX0lEICsgXCItXCIgKyBncmFwaEl0ZW1Db3VudCxcbiAgICAgICAgZG9tSWQ6IHN0YXRlRG9tSWQoaXRlbUlkLCBncmFwaEl0ZW1Db3VudCwgTk9URSksXG4gICAgICAgIHR5cGU6IG5ld05vZGUudHlwZSxcbiAgICAgICAgcGFkZGluZzogMTVcbiAgICAgICAgLy9nZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyb3VwRGF0YSA9IHtcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgc2hhcGU6IFNIQVBFX05PVEVHUk9VUCxcbiAgICAgICAgbGFiZWxUZXh0OiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY2xhc3NlczogbmV3Tm9kZS5jbGFzc2VzLFxuICAgICAgICBzdHlsZTogXCJcIixcbiAgICAgICAgLy8gc3R5bGVzLnN0eWxlLFxuICAgICAgICBpZDogaXRlbUlkICsgUEFSRU5UX0lELFxuICAgICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50LCBQQVJFTlQpLFxuICAgICAgICB0eXBlOiBcImdyb3VwXCIsXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgLy9nZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZ1xuICAgICAgfTtcbiAgICAgIGdyYXBoSXRlbUNvdW50Kys7XG4gICAgICBjb25zdCBwYXJlbnROb2RlSWQgPSBpdGVtSWQgKyBQQVJFTlRfSUQ7XG4gICAgICBnLnNldE5vZGUocGFyZW50Tm9kZUlkLCBncm91cERhdGEpO1xuICAgICAgZy5zZXROb2RlKG5vdGVEYXRhLmlkLCBub3RlRGF0YSk7XG4gICAgICBnLnNldE5vZGUoaXRlbUlkLCBub2RlRGF0YSk7XG4gICAgICBnLnNldFBhcmVudChpdGVtSWQsIHBhcmVudE5vZGVJZCk7XG4gICAgICBnLnNldFBhcmVudChub3RlRGF0YS5pZCwgcGFyZW50Tm9kZUlkKTtcbiAgICAgIGxldCBmcm9tID0gaXRlbUlkO1xuICAgICAgbGV0IHRvID0gbm90ZURhdGEuaWQ7XG4gICAgICBpZiAocGFyc2VkSXRlbS5ub3RlLnBvc2l0aW9uID09PSBcImxlZnQgb2ZcIikge1xuICAgICAgICBmcm9tID0gbm90ZURhdGEuaWQ7XG4gICAgICAgIHRvID0gaXRlbUlkO1xuICAgICAgfVxuICAgICAgZy5zZXRFZGdlKGZyb20sIHRvLCB7XG4gICAgICAgIGFycm93aGVhZDogXCJub25lXCIsXG4gICAgICAgIGFycm93VHlwZTogXCJcIixcbiAgICAgICAgc3R5bGU6IEdfRURHRV9TVFlMRSxcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgY2xhc3NlczogQ1NTX0VER0VfTk9URV9FREdFLFxuICAgICAgICBhcnJvd2hlYWRTdHlsZTogR19FREdFX0FSUk9XSEVBRFNUWUxFLFxuICAgICAgICBsYWJlbHBvczogR19FREdFX0xBQkVMUE9TLFxuICAgICAgICBsYWJlbFR5cGU6IEdfRURHRV9MQUJFTFRZUEUsXG4gICAgICAgIHRoaWNrbmVzczogR19FREdFX1RISUNLTkVTU1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGcuc2V0Tm9kZShpdGVtSWQsIG5vZGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaWQgIT09IFwicm9vdFwiKSB7XG4gICAgbG9nLnRyYWNlKFwiU2V0dGluZyBub2RlIFwiLCBpdGVtSWQsIFwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgXCIsIHBhcmVudC5pZCk7XG4gICAgZy5zZXRQYXJlbnQoaXRlbUlkLCBwYXJlbnQuaWQpO1xuICB9XG4gIGlmIChwYXJzZWRJdGVtLmRvYykge1xuICAgIGxvZy50cmFjZShcIkFkZGluZyBub2RlcyBjaGlsZHJlbiBcIik7XG4gICAgc2V0dXBEb2MoZywgcGFyc2VkSXRlbSwgcGFyc2VkSXRlbS5kb2MsIGRpYWdyYW1TdGF0ZXMsIGRpYWdyYW1EYiwgIWFsdEZsYWcpO1xuICB9XG59O1xuY29uc3Qgc2V0dXBEb2MgPSAoZywgcGFyZW50UGFyc2VkSXRlbSwgZG9jLCBkaWFncmFtU3RhdGVzLCBkaWFncmFtRGIsIGFsdEZsYWcpID0+IHtcbiAgbG9nLnRyYWNlKFwiaXRlbXNcIiwgZG9jKTtcbiAgZG9jLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0uc3RtdCkge1xuICAgICAgY2FzZSBTVE1UX1NUQVRFOlxuICAgICAgICBzZXR1cE5vZGUoZywgcGFyZW50UGFyc2VkSXRlbSwgaXRlbSwgZGlhZ3JhbVN0YXRlcywgZGlhZ3JhbURiLCBhbHRGbGFnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERFRkFVTFRfU1RBVEVfVFlQRTpcbiAgICAgICAgc2V0dXBOb2RlKGcsIHBhcmVudFBhcnNlZEl0ZW0sIGl0ZW0sIGRpYWdyYW1TdGF0ZXMsIGRpYWdyYW1EYiwgYWx0RmxhZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVE1UX1JFTEFUSU9OOlxuICAgICAgICB7XG4gICAgICAgICAgc2V0dXBOb2RlKGcsIHBhcmVudFBhcnNlZEl0ZW0sIGl0ZW0uc3RhdGUxLCBkaWFncmFtU3RhdGVzLCBkaWFncmFtRGIsIGFsdEZsYWcpO1xuICAgICAgICAgIHNldHVwTm9kZShnLCBwYXJlbnRQYXJzZWRJdGVtLCBpdGVtLnN0YXRlMiwgZGlhZ3JhbVN0YXRlcywgZGlhZ3JhbURiLCBhbHRGbGFnKTtcbiAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiBcImVkZ2VcIiArIGdyYXBoSXRlbUNvdW50LFxuICAgICAgICAgICAgYXJyb3doZWFkOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgYXJyb3dUeXBlRW5kOiBcImFycm93X2JhcmJcIixcbiAgICAgICAgICAgIHN0eWxlOiBHX0VER0VfU1RZTEUsXG4gICAgICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IGNvbW1vbi5zYW5pdGl6ZVRleHQoaXRlbS5kZXNjcmlwdGlvbiwgZ2V0Q29uZmlnKCkpLFxuICAgICAgICAgICAgYXJyb3doZWFkU3R5bGU6IEdfRURHRV9BUlJPV0hFQURTVFlMRSxcbiAgICAgICAgICAgIGxhYmVscG9zOiBHX0VER0VfTEFCRUxQT1MsXG4gICAgICAgICAgICBsYWJlbFR5cGU6IEdfRURHRV9MQUJFTFRZUEUsXG4gICAgICAgICAgICB0aGlja25lc3M6IEdfRURHRV9USElDS05FU1MsXG4gICAgICAgICAgICBjbGFzc2VzOiBDU1NfRURHRVxuICAgICAgICAgIH07XG4gICAgICAgICAgZy5zZXRFZGdlKGl0ZW0uc3RhdGUxLmlkLCBpdGVtLnN0YXRlMi5pZCwgZWRnZURhdGEsIGdyYXBoSXRlbUNvdW50KTtcbiAgICAgICAgICBncmFwaEl0ZW1Db3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZ2V0RGlyID0gKHBhcnNlZEl0ZW0sIGRlZmF1bHREaXIgPSBERUZBVUxUX05FU1RFRF9ET0NfRElSKSA9PiB7XG4gIGxldCBkaXIgPSBkZWZhdWx0RGlyO1xuICBpZiAocGFyc2VkSXRlbS5kb2MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZEl0ZW0uZG9jLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJzZWRJdGVtRG9jID0gcGFyc2VkSXRlbS5kb2NbaV07XG4gICAgICBpZiAocGFyc2VkSXRlbURvYy5zdG10ID09PSBcImRpclwiKSB7XG4gICAgICAgIGRpciA9IHBhcnNlZEl0ZW1Eb2MudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkaXI7XG59O1xuY29uc3QgZHJhdyA9IGFzeW5jIGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZykge1xuICBsb2cuaW5mbyhcIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpXCIsIGlkKTtcbiAgbm9kZURiID0ge307XG4gIGRpYWcuZGIuZ2V0RGlyZWN0aW9uKCk7XG4gIGNvbnN0IHsgc2VjdXJpdHlMZXZlbCwgc3RhdGU6IGNvbmYgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCBub2RlU3BhY2luZyA9IGNvbmYubm9kZVNwYWNpbmcgfHwgNTA7XG4gIGNvbnN0IHJhbmtTcGFjaW5nID0gY29uZi5yYW5rU3BhY2luZyB8fCA1MDtcbiAgbG9nLmluZm8oZGlhZy5kYi5nZXRSb290RG9jVjIoKSk7XG4gIGRpYWcuZGIuZXh0cmFjdChkaWFnLmRiLmdldFJvb3REb2NWMigpKTtcbiAgbG9nLmluZm8oZGlhZy5kYi5nZXRSb290RG9jVjIoKSk7XG4gIGNvbnN0IGRpYWdyYW1TdGF0ZXMgPSBkaWFnLmRiLmdldFN0YXRlcygpO1xuICBjb25zdCBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGNvbXBvdW5kOiB0cnVlXG4gIH0pLnNldEdyYXBoKHtcbiAgICByYW5rZGlyOiBnZXREaXIoZGlhZy5kYi5nZXRSb290RG9jVjIoKSksXG4gICAgbm9kZXNlcDogbm9kZVNwYWNpbmcsXG4gICAgcmFua3NlcDogcmFua1NwYWNpbmcsXG4gICAgbWFyZ2lueDogOCxcbiAgICBtYXJnaW55OiA4XG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgc2V0dXBOb2RlKGcsIHZvaWQgMCwgZGlhZy5kYi5nZXRSb290RG9jVjIoKSwgZGlhZ3JhbVN0YXRlcywgZGlhZy5kYiwgdHJ1ZSk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IHN2ZyA9IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCBlbGVtZW50ID0gcm9vdC5zZWxlY3QoXCIjXCIgKyBpZCArIFwiIGdcIik7XG4gIGF3YWl0IHJlbmRlcihlbGVtZW50LCBnLCBbXCJiYXJiXCJdLCBDU1NfRElBR1JBTSwgaWQpO1xuICBjb25zdCBwYWRkaW5nID0gODtcbiAgdXRpbHMuaW5zZXJ0VGl0bGUoc3ZnLCBcInN0YXRlZGlhZ3JhbVRpdGxlVGV4dFwiLCBjb25mLnRpdGxlVG9wTWFyZ2luLCBkaWFnLmRiLmdldERpYWdyYW1UaXRsZSgpKTtcbiAgY29uc3QgYm91bmRzID0gc3ZnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IHdpZHRoID0gYm91bmRzLndpZHRoICsgcGFkZGluZyAqIDI7XG4gIGNvbnN0IGhlaWdodCA9IGJvdW5kcy5oZWlnaHQgKyBwYWRkaW5nICogMjtcbiAgc3ZnLmF0dHIoXCJjbGFzc1wiLCBDU1NfRElBR1JBTSk7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Zy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIGNvbnN0IHZCb3ggPSBgJHtzdmdCb3VuZHMueCAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLnkgLSBwYWRkaW5nfSAke3dpZHRofSAke2hlaWdodH1gO1xuICBsb2cuZGVidWcoYHZpZXdCb3ggJHt2Qm94fWApO1xuICBzdmcuYXR0cihcInZpZXdCb3hcIiwgdkJveCk7XG4gIGNvbnN0IGxhYmVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD1cIicgKyBpZCArICdcIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtcbiAgZm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIHtcbiAgICBjb25zdCBkaW0gPSBsYWJlbC5nZXRCQm94KCk7XG4gICAgY29uc3QgcmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFNIQVBFX1NUQVRFKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIDApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgMCk7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBkaW0ud2lkdGgpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGRpbS5oZWlnaHQpO1xuICAgIGxhYmVsLmluc2VydEJlZm9yZShyZWN0LCBsYWJlbC5maXJzdENoaWxkKTtcbiAgfVxufTtcbmNvbnN0IHJlbmRlcmVyID0ge1xuICBzZXRDb25mLFxuICBnZXRDbGFzc2VzLFxuICBkcmF3XG59O1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlcyxcbiAgaW5pdDogKGNuZikgPT4ge1xuICAgIGlmICghY25mLnN0YXRlKSB7XG4gICAgICBjbmYuc3RhdGUgPSB7fTtcbiAgICB9XG4gICAgY25mLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUgPSBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbiAgICBkYi5jbGVhcigpO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/stateDiagram-v2-6371a76b.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/styles-5f89df53.js": /*!*************************************************************!*\ !*** ../../../node_modules/mermaid/dist/styles-5f89df53.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"a\": () => (/* binding */ flowStyles),\n/* harmony export */ \"f\": () => (/* binding */ flowRendererV2)\n/* harmony export */ });\n/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dagre-d3-es/src/graphlib/index.js */ \"../../../node_modules/dagre-d3-es/src/graphlib/index.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flowDb-6a57c1b4.js */ \"../../../node_modules/mermaid/dist/flowDb-6a57c1b4.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _index_a92ac404_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./index-a92ac404.js */ \"../../../node_modules/mermaid/dist/index-a92ac404.js\");\n/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dagre-d3-es/src/dagre-js/label/add-html-label.js */ \"../../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/channel.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/rgba.js\");\n\n\n\n\n\n\n\nconst conf = {};\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst addVertices = function(vert, g, svgId, root, doc, diagObj) {\n const svg = root.select(`[id=\"${svgId}\"]`);\n const keys = Object.keys(vert);\n keys.forEach(function(id) {\n const vertex = vert[id];\n let classStr = \"default\";\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n const styles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.k)(vertex.styles);\n let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;\n let vertexNode;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"vertex\", vertex, vertex.labelType);\n if (vertex.labelType === \"markdown\") {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"vertex\", vertex, vertex.labelType);\n } else {\n if ((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.n)((0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.c)().flowchart.htmlLabels)) {\n const node = {\n label: vertexText.replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n )\n };\n vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_2__.addHtmlLabel)(svg, node).node();\n vertexNode.parentNode.removeChild(vertexNode);\n } else {\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", styles.labelStyle.replace(\"color:\", \"fill:\"));\n const rows = vertexText.split(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex);\n for (const row of rows) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"1\");\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n vertexNode = svgLabel;\n }\n }\n let radious = 0;\n let _shape = \"\";\n switch (vertex.type) {\n case \"round\":\n radious = 5;\n _shape = \"rect\";\n break;\n case \"square\":\n _shape = \"rect\";\n break;\n case \"diamond\":\n _shape = \"question\";\n break;\n case \"hexagon\":\n _shape = \"hexagon\";\n break;\n case \"odd\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n _shape = \"lean_right\";\n break;\n case \"lean_left\":\n _shape = \"lean_left\";\n break;\n case \"trapezoid\":\n _shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n _shape = \"inv_trapezoid\";\n break;\n case \"odd_right\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n _shape = \"circle\";\n break;\n case \"ellipse\":\n _shape = \"ellipse\";\n break;\n case \"stadium\":\n _shape = \"stadium\";\n break;\n case \"subroutine\":\n _shape = \"subroutine\";\n break;\n case \"cylinder\":\n _shape = \"cylinder\";\n break;\n case \"group\":\n _shape = \"rect\";\n break;\n case \"doublecircle\":\n _shape = \"doublecircle\";\n break;\n default:\n _shape = \"rect\";\n }\n g.setNode(vertex.id, {\n labelStyle: styles.labelStyle,\n shape: _shape,\n labelText: vertexText,\n labelType: vertex.labelType,\n rx: radious,\n ry: radious,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: diagObj.db.getTooltip(vertex.id) || \"\",\n domId: diagObj.db.lookUpDomId(vertex.id),\n haveCallback: vertex.haveCallback,\n width: vertex.type === \"group\" ? 500 : void 0,\n dir: vertex.dir,\n type: vertex.type,\n props: vertex.props,\n padding: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.c)().flowchart.padding\n });\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"setNode\", {\n labelStyle: styles.labelStyle,\n labelType: vertex.labelType,\n shape: _shape,\n labelText: vertexText,\n rx: radious,\n ry: radious,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n domId: diagObj.db.lookUpDomId(vertex.id),\n width: vertex.type === \"group\" ? 500 : void 0,\n type: vertex.type,\n dir: vertex.dir,\n props: vertex.props,\n padding: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.c)().flowchart.padding\n });\n });\n};\nconst addEdges = function(edges, g, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"abc78 edges = \", edges);\n let cnt = 0;\n let linkIdCnt = {};\n let defaultStyle;\n let defaultLabelStyle;\n if (edges.defaultStyle !== void 0) {\n const defaultStyles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.k)(edges.defaultStyle);\n defaultStyle = defaultStyles.style;\n defaultLabelStyle = defaultStyles.labelStyle;\n }\n edges.forEach(function(edge) {\n cnt++;\n const linkIdBase = \"L-\" + edge.start + \"-\" + edge.end;\n if (linkIdCnt[linkIdBase] === void 0) {\n linkIdCnt[linkIdBase] = 0;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n } else {\n linkIdCnt[linkIdBase]++;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n }\n let linkId = linkIdBase + \"-\" + linkIdCnt[linkIdBase];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"abc78 new link id to be used is\", linkIdBase, linkId, linkIdCnt[linkIdBase]);\n const linkNameStart = \"LS-\" + edge.start;\n const linkNameEnd = \"LE-\" + edge.end;\n const edgeData = { style: \"\", labelStyle: \"\" };\n edgeData.minlen = edge.length || 1;\n if (edge.type === \"arrow_open\") {\n edgeData.arrowhead = \"none\";\n } else {\n edgeData.arrowhead = \"normal\";\n }\n edgeData.arrowTypeStart = \"arrow_open\";\n edgeData.arrowTypeEnd = \"arrow_open\";\n switch (edge.type) {\n case \"double_arrow_cross\":\n edgeData.arrowTypeStart = \"arrow_cross\";\n case \"arrow_cross\":\n edgeData.arrowTypeEnd = \"arrow_cross\";\n break;\n case \"double_arrow_point\":\n edgeData.arrowTypeStart = \"arrow_point\";\n case \"arrow_point\":\n edgeData.arrowTypeEnd = \"arrow_point\";\n break;\n case \"double_arrow_circle\":\n edgeData.arrowTypeStart = \"arrow_circle\";\n case \"arrow_circle\":\n edgeData.arrowTypeEnd = \"arrow_circle\";\n break;\n }\n let style = \"\";\n let labelStyle = \"\";\n switch (edge.stroke) {\n case \"normal\":\n style = \"fill:none;\";\n if (defaultStyle !== void 0) {\n style = defaultStyle;\n }\n if (defaultLabelStyle !== void 0) {\n labelStyle = defaultLabelStyle;\n }\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"solid\";\n break;\n case \"dotted\":\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"dotted\";\n edgeData.style = \"fill:none;stroke-width:2px;stroke-dasharray:3;\";\n break;\n case \"thick\":\n edgeData.thickness = \"thick\";\n edgeData.pattern = \"solid\";\n edgeData.style = \"stroke-width: 3.5px;fill:none;\";\n break;\n case \"invisible\":\n edgeData.thickness = \"invisible\";\n edgeData.pattern = \"solid\";\n edgeData.style = \"stroke-width: 0;fill:none;\";\n break;\n }\n if (edge.style !== void 0) {\n const styles = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.k)(edge.style);\n style = styles.style;\n labelStyle = styles.labelStyle;\n }\n edgeData.style = edgeData.style += style;\n edgeData.labelStyle = edgeData.labelStyle += labelStyle;\n if (edge.interpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n } else if (edges.defaultInterpolate !== void 0) {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n } else {\n edgeData.curve = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__.curveLinear);\n }\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n }\n edgeData.labelType = edge.labelType;\n edgeData.label = edge.text.replace(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex, \"\\n\");\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none;\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n edgeData.id = linkId;\n edgeData.classes = \"flowchart-link \" + linkNameStart + \" \" + linkNameEnd;\n g.setEdge(edge.start, edge.end, edgeData, cnt);\n });\n};\nconst getClasses = function(text, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Extracting classes\");\n diagObj.db.clear();\n try {\n diagObj.parse(text);\n return diagObj.db.getClasses();\n } catch (e) {\n return;\n }\n};\nconst draw = async function(text, id, _version, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Drawing flowchart\");\n diagObj.db.clear();\n _flowDb_6a57c1b4_js__WEBPACK_IMPORTED_MODULE_4__.f.setGen(\"gen-2\");\n diagObj.parser.parse(text);\n let dir = diagObj.db.getDirection();\n if (dir === void 0) {\n dir = \"TD\";\n }\n const { securityLevel, flowchart: conf2 } = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.c)();\n const nodeSpacing = conf2.nodeSpacing || 50;\n const rankSpacing = conf2.rankSpacing || 50;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 0,\n marginy: 0\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n let subG;\n const subGraphs = diagObj.db.getSubGraphs();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Subgraphs - \", subGraphs);\n for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) {\n subG = subGraphs[i2];\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Subgraph - \", subG);\n diagObj.db.addVertex(\n subG.id,\n { text: subG.title, type: subG.labelType },\n \"group\",\n void 0,\n subG.classes,\n subG.dir\n );\n }\n const vert = diagObj.db.getVertices();\n const edges = diagObj.db.getEdges();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Edges\", edges);\n let i = 0;\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i];\n (0,d3__WEBPACK_IMPORTED_MODULE_1__.selectAll)(\"cluster\").append(\"text\");\n for (let j = 0; j < subG.nodes.length; j++) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.l.info(\"Setting up subgraphs\", subG.nodes[j], subG.id);\n g.setParent(subG.nodes[j], subG.id);\n }\n }\n addVertices(vert, g, id, root, doc, diagObj);\n addEdges(edges, g);\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n await (0,_index_a92ac404_js__WEBPACK_IMPORTED_MODULE_5__.r)(element, g, [\"point\", \"circle\", \"cross\"], \"flowchart\", id);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.u.insertTitle(svg, \"flowchartTitleText\", conf2.titleTopMargin, diagObj.db.getDiagramTitle());\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_3__.p)(g, svg, conf2.diagramPadding, conf2.useMaxWidth);\n diagObj.db.indexNodes(\"subGraph\" + i);\n if (!conf2.htmlLabels) {\n const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n const keys = Object.keys(vert);\n keys.forEach(function(key) {\n const vertex = vert[key];\n if (vertex.link) {\n const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__.select)(\"#\" + id + ' [id=\"' + key + '\"]');\n if (node) {\n const link = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"class\", vertex.classes.join(\" \"));\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"href\", vertex.link);\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"rel\", \"noopener\");\n if (securityLevel === \"sandbox\") {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", \"_top\");\n } else if (vertex.linkTarget) {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", vertex.linkTarget);\n }\n const linkNode = node.insert(function() {\n return link;\n }, \":first-child\");\n const shape = node.select(\".label-container\");\n if (shape) {\n linkNode.append(function() {\n return shape.node();\n });\n }\n const label = node.select(\".label\");\n if (label) {\n linkNode.append(function() {\n return label.node();\n });\n }\n }\n }\n });\n};\nconst flowRendererV2 = {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n};\nconst fade = (color, opacity) => {\n const channel = khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n const r = channel(color, \"r\");\n const g = channel(color, \"g\");\n const b = channel(color, \"b\");\n return khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"](r, g, b, opacity);\n};\nconst getStyles = (options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${options.clusterBkg};\n stroke: ${options.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\nconst flowStyles = getStyles;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdHlsZXMtNWY4OWRmNTMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUE4RDtBQUNWO0FBQ0Q7QUFDZ0k7QUFDakk7QUFDOEI7QUFDL0M7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxNQUFNO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsdURBQWtCO0FBQ3JDO0FBQ0E7QUFDQSxJQUFJLHdEQUFRO0FBQ1o7QUFDQSxNQUFNLHdEQUFRO0FBQ2QsTUFBTTtBQUNOLFVBQVUsdURBQVEsQ0FBQyx1REFBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msb0JBQW9CO0FBQ3BEO0FBQ0E7QUFDQSxxQkFBcUIsOEZBQVk7QUFDakM7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLHNDQUFzQyxrRUFBcUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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d2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L3N0eWxlcy01Zjg5ZGY1My5qcz82Y2I1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcbmltcG9ydCB7IGN1cnZlTGluZWFyLCBzZWxlY3QsIHNlbGVjdEFsbCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgZiBhcyBmbG93RGIgfSBmcm9tIFwiLi9mbG93RGItNmE1N2MxYjQuanNcIjtcbmltcG9ydCB7IGsgYXMgZ2V0U3R5bGVzRnJvbUFycmF5LCBsIGFzIGxvZywgbiBhcyBldmFsdWF0ZSwgYyBhcyBnZXRDb25maWcsIGUgYXMgY29tbW9uLCBvIGFzIGludGVycG9sYXRlVG9DdXJ2ZSwgdSBhcyB1dGlscywgcCBhcyBzZXR1cEdyYXBoVmlld2JveCB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbmltcG9ydCB7IHIgYXMgcmVuZGVyIH0gZnJvbSBcIi4vaW5kZXgtYTkyYWM0MDQuanNcIjtcbmltcG9ydCB7IGFkZEh0bWxMYWJlbCB9IGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUtanMvbGFiZWwvYWRkLWh0bWwtbGFiZWwuanNcIjtcbmltcG9ydCAqIGFzIGtocm9tYSBmcm9tIFwia2hyb21hXCI7XG5jb25zdCBjb25mID0ge307XG5jb25zdCBzZXRDb25mID0gZnVuY3Rpb24oY25mKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjbmYpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uZltrZXldID0gY25mW2tleV07XG4gIH1cbn07XG5jb25zdCBhZGRWZXJ0aWNlcyA9IGZ1bmN0aW9uKHZlcnQsIGcsIHN2Z0lkLCByb290LCBkb2MsIGRpYWdPYmopIHtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7c3ZnSWR9XCJdYCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2ZXJ0KTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdmVydFtpZF07XG4gICAgbGV0IGNsYXNzU3RyID0gXCJkZWZhdWx0XCI7XG4gICAgaWYgKHZlcnRleC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsYXNzU3RyID0gdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgfVxuICAgIGNsYXNzU3RyID0gY2xhc3NTdHIgKyBcIiBmbG93Y2hhcnQtbGFiZWxcIjtcbiAgICBjb25zdCBzdHlsZXMgPSBnZXRTdHlsZXNGcm9tQXJyYXkodmVydGV4LnN0eWxlcyk7XG4gICAgbGV0IHZlcnRleFRleHQgPSB2ZXJ0ZXgudGV4dCAhPT0gdm9pZCAwID8gdmVydGV4LnRleHQgOiB2ZXJ0ZXguaWQ7XG4gICAgbGV0IHZlcnRleE5vZGU7XG4gICAgbG9nLmluZm8oXCJ2ZXJ0ZXhcIiwgdmVydGV4LCB2ZXJ0ZXgubGFiZWxUeXBlKTtcbiAgICBpZiAodmVydGV4LmxhYmVsVHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICBsb2cuaW5mbyhcInZlcnRleFwiLCB2ZXJ0ZXgsIHZlcnRleC5sYWJlbFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgbGFiZWw6IHZlcnRleFRleHQucmVwbGFjZShcbiAgICAgICAgICAgIC9mYVtibHJzXT86ZmEtW1xcdy1dKy9nLFxuICAgICAgICAgICAgKHMpID0+IGA8aSBjbGFzcz0nJHtzLnJlcGxhY2UoXCI6XCIsIFwiIFwiKX0nPjwvaT5gXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuICAgICAgICB2ZXJ0ZXhOb2RlID0gYWRkSHRtbExhYmVsKHN2Zywgbm9kZSkubm9kZSgpO1xuICAgICAgICB2ZXJ0ZXhOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodmVydGV4Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdmdMYWJlbCA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRleHRcIik7XG4gICAgICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlcy5sYWJlbFN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKSk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB2ZXJ0ZXhUZXh0LnNwbGl0KGNvbW1vbi5saW5lQnJlYWtSZWdleCk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICBjb25zdCB0c3BhbiA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRzcGFuXCIpO1xuICAgICAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiZHlcIiwgXCIxZW1cIik7XG4gICAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjFcIik7XG4gICAgICAgICAgdHNwYW4udGV4dENvbnRlbnQgPSByb3c7XG4gICAgICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgICAgICB9XG4gICAgICAgIHZlcnRleE5vZGUgPSBzdmdMYWJlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHJhZGlvdXMgPSAwO1xuICAgIGxldCBfc2hhcGUgPSBcIlwiO1xuICAgIHN3aXRjaCAodmVydGV4LnR5cGUpIHtcbiAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICByYWRpb3VzID0gNTtcbiAgICAgICAgX3NoYXBlID0gXCJyZWN0XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNxdWFyZVwiOlxuICAgICAgICBfc2hhcGUgPSBcInJlY3RcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICBfc2hhcGUgPSBcInF1ZXN0aW9uXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImhleGFnb25cIjpcbiAgICAgICAgX3NoYXBlID0gXCJoZXhhZ29uXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9kZFwiOlxuICAgICAgICBfc2hhcGUgPSBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGVhbl9yaWdodFwiOlxuICAgICAgICBfc2hhcGUgPSBcImxlYW5fcmlnaHRcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGVhbl9sZWZ0XCI6XG4gICAgICAgIF9zaGFwZSA9IFwibGVhbl9sZWZ0XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRyYXBlem9pZFwiOlxuICAgICAgICBfc2hhcGUgPSBcInRyYXBlem9pZFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnZfdHJhcGV6b2lkXCI6XG4gICAgICAgIF9zaGFwZSA9IFwiaW52X3RyYXBlem9pZFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvZGRfcmlnaHRcIjpcbiAgICAgICAgX3NoYXBlID0gXCJyZWN0X2xlZnRfaW52X2Fycm93XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICBfc2hhcGUgPSBcImNpcmNsZVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XG4gICAgICAgIF9zaGFwZSA9IFwiZWxsaXBzZVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzdGFkaXVtXCI6XG4gICAgICAgIF9zaGFwZSA9IFwic3RhZGl1bVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzdWJyb3V0aW5lXCI6XG4gICAgICAgIF9zaGFwZSA9IFwic3Vicm91dGluZVwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjeWxpbmRlclwiOlxuICAgICAgICBfc2hhcGUgPSBcImN5bGluZGVyXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdyb3VwXCI6XG4gICAgICAgIF9zaGFwZSA9IFwicmVjdFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkb3VibGVjaXJjbGVcIjpcbiAgICAgICAgX3NoYXBlID0gXCJkb3VibGVjaXJjbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBfc2hhcGUgPSBcInJlY3RcIjtcbiAgICB9XG4gICAgZy5zZXROb2RlKHZlcnRleC5pZCwge1xuICAgICAgbGFiZWxTdHlsZTogc3R5bGVzLmxhYmVsU3R5bGUsXG4gICAgICBzaGFwZTogX3NoYXBlLFxuICAgICAgbGFiZWxUZXh0OiB2ZXJ0ZXhUZXh0LFxuICAgICAgbGFiZWxUeXBlOiB2ZXJ0ZXgubGFiZWxUeXBlLFxuICAgICAgcng6IHJhZGlvdXMsXG4gICAgICByeTogcmFkaW91cyxcbiAgICAgIGNsYXNzOiBjbGFzc1N0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgbGluazogdmVydGV4LmxpbmssXG4gICAgICBsaW5rVGFyZ2V0OiB2ZXJ0ZXgubGlua1RhcmdldCxcbiAgICAgIHRvb2x0aXA6IGRpYWdPYmouZGIuZ2V0VG9vbHRpcCh2ZXJ0ZXguaWQpIHx8IFwiXCIsXG4gICAgICBkb21JZDogZGlhZ09iai5kYi5sb29rVXBEb21JZCh2ZXJ0ZXguaWQpLFxuICAgICAgaGF2ZUNhbGxiYWNrOiB2ZXJ0ZXguaGF2ZUNhbGxiYWNrLFxuICAgICAgd2lkdGg6IHZlcnRleC50eXBlID09PSBcImdyb3VwXCIgPyA1MDAgOiB2b2lkIDAsXG4gICAgICBkaXI6IHZlcnRleC5kaXIsXG4gICAgICB0eXBlOiB2ZXJ0ZXgudHlwZSxcbiAgICAgIHByb3BzOiB2ZXJ0ZXgucHJvcHMsXG4gICAgICBwYWRkaW5nOiBnZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZ1xuICAgIH0pO1xuICAgIGxvZy5pbmZvKFwic2V0Tm9kZVwiLCB7XG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZXMubGFiZWxTdHlsZSxcbiAgICAgIGxhYmVsVHlwZTogdmVydGV4LmxhYmVsVHlwZSxcbiAgICAgIHNoYXBlOiBfc2hhcGUsXG4gICAgICBsYWJlbFRleHQ6IHZlcnRleFRleHQsXG4gICAgICByeDogcmFkaW91cyxcbiAgICAgIHJ5OiByYWRpb3VzLFxuICAgICAgY2xhc3M6IGNsYXNzU3RyLFxuICAgICAgc3R5bGU6IHN0eWxlcy5zdHlsZSxcbiAgICAgIGlkOiB2ZXJ0ZXguaWQsXG4gICAgICBkb21JZDogZGlhZ09iai5kYi5sb29rVXBEb21JZCh2ZXJ0ZXguaWQpLFxuICAgICAgd2lkdGg6IHZlcnRleC50eXBlID09PSBcImdyb3VwXCIgPyA1MDAgOiB2b2lkIDAsXG4gICAgICB0eXBlOiB2ZXJ0ZXgudHlwZSxcbiAgICAgIGRpcjogdmVydGV4LmRpcixcbiAgICAgIHByb3BzOiB2ZXJ0ZXgucHJvcHMsXG4gICAgICBwYWRkaW5nOiBnZXRDb25maWcoKS5mbG93Y2hhcnQucGFkZGluZ1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBhZGRFZGdlcyA9IGZ1bmN0aW9uKGVkZ2VzLCBnLCBkaWFnT2JqKSB7XG4gIGxvZy5pbmZvKFwiYWJjNzggZWRnZXMgPSBcIiwgZWRnZXMpO1xuICBsZXQgY250ID0gMDtcbiAgbGV0IGxpbmtJZENudCA9IHt9O1xuICBsZXQgZGVmYXVsdFN0eWxlO1xuICBsZXQgZGVmYXVsdExhYmVsU3R5bGU7XG4gIGlmIChlZGdlcy5kZWZhdWx0U3R5bGUgIT09IHZvaWQgMCkge1xuICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBnZXRTdHlsZXNGcm9tQXJyYXkoZWRnZXMuZGVmYXVsdFN0eWxlKTtcbiAgICBkZWZhdWx0U3R5bGUgPSBkZWZhdWx0U3R5bGVzLnN0eWxlO1xuICAgIGRlZmF1bHRMYWJlbFN0eWxlID0gZGVmYXVsdFN0eWxlcy5sYWJlbFN0eWxlO1xuICB9XG4gIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSkge1xuICAgIGNudCsrO1xuICAgIGNvbnN0IGxpbmtJZEJhc2UgPSBcIkwtXCIgKyBlZGdlLnN0YXJ0ICsgXCItXCIgKyBlZGdlLmVuZDtcbiAgICBpZiAobGlua0lkQ250W2xpbmtJZEJhc2VdID09PSB2b2lkIDApIHtcbiAgICAgIGxpbmtJZENudFtsaW5rSWRCYXNlXSA9IDA7XG4gICAgICBsb2cuaW5mbyhcImFiYzc4IG5ldyBlbnRyeVwiLCBsaW5rSWRCYXNlLCBsaW5rSWRDbnRbbGlua0lkQmFzZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5rSWRDbnRbbGlua0lkQmFzZV0rKztcbiAgICAgIGxvZy5pbmZvKFwiYWJjNzggbmV3IGVudHJ5XCIsIGxpbmtJZEJhc2UsIGxpbmtJZENudFtsaW5rSWRCYXNlXSk7XG4gICAgfVxuICAgIGxldCBsaW5rSWQgPSBsaW5rSWRCYXNlICsgXCItXCIgKyBsaW5rSWRDbnRbbGlua0lkQmFzZV07XG4gICAgbG9nLmluZm8oXCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzXCIsIGxpbmtJZEJhc2UsIGxpbmtJZCwgbGlua0lkQ250W2xpbmtJZEJhc2VdKTtcbiAgICBjb25zdCBsaW5rTmFtZVN0YXJ0ID0gXCJMUy1cIiArIGVkZ2Uuc3RhcnQ7XG4gICAgY29uc3QgbGlua05hbWVFbmQgPSBcIkxFLVwiICsgZWRnZS5lbmQ7XG4gICAgY29uc3QgZWRnZURhdGEgPSB7IHN0eWxlOiBcIlwiLCBsYWJlbFN0eWxlOiBcIlwiIH07XG4gICAgZWRnZURhdGEubWlubGVuID0gZWRnZS5sZW5ndGggfHwgMTtcbiAgICBpZiAoZWRnZS50eXBlID09PSBcImFycm93X29wZW5cIikge1xuICAgICAgZWRnZURhdGEuYXJyb3doZWFkID0gXCJub25lXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkZ2VEYXRhLmFycm93aGVhZCA9IFwibm9ybWFsXCI7XG4gICAgfVxuICAgIGVkZ2VEYXRhLmFycm93VHlwZVN0YXJ0ID0gXCJhcnJvd19vcGVuXCI7XG4gICAgZWRnZURhdGEuYXJyb3dUeXBlRW5kID0gXCJhcnJvd19vcGVuXCI7XG4gICAgc3dpdGNoIChlZGdlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJkb3VibGVfYXJyb3dfY3Jvc3NcIjpcbiAgICAgICAgZWRnZURhdGEuYXJyb3dUeXBlU3RhcnQgPSBcImFycm93X2Nyb3NzXCI7XG4gICAgICBjYXNlIFwiYXJyb3dfY3Jvc3NcIjpcbiAgICAgICAgZWRnZURhdGEuYXJyb3dUeXBlRW5kID0gXCJhcnJvd19jcm9zc1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkb3VibGVfYXJyb3dfcG9pbnRcIjpcbiAgICAgICAgZWRnZURhdGEuYXJyb3dUeXBlU3RhcnQgPSBcImFycm93X3BvaW50XCI7XG4gICAgICBjYXNlIFwiYXJyb3dfcG9pbnRcIjpcbiAgICAgICAgZWRnZURhdGEuYXJyb3dUeXBlRW5kID0gXCJhcnJvd19wb2ludFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkb3VibGVfYXJyb3dfY2lyY2xlXCI6XG4gICAgICAgIGVkZ2VEYXRhLmFycm93VHlwZVN0YXJ0ID0gXCJhcnJvd19jaXJjbGVcIjtcbiAgICAgIGNhc2UgXCJhcnJvd19jaXJjbGVcIjpcbiAgICAgICAgZWRnZURhdGEuYXJyb3dUeXBlRW5kID0gXCJhcnJvd19jaXJjbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBzdHlsZSA9IFwiXCI7XG4gICAgbGV0IGxhYmVsU3R5bGUgPSBcIlwiO1xuICAgIHN3aXRjaCAoZWRnZS5zdHJva2UpIHtcbiAgICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgICAgc3R5bGUgPSBcImZpbGw6bm9uZTtcIjtcbiAgICAgICAgaWYgKGRlZmF1bHRTdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgc3R5bGUgPSBkZWZhdWx0U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRMYWJlbFN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgICAgICBsYWJlbFN0eWxlID0gZGVmYXVsdExhYmVsU3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgZWRnZURhdGEudGhpY2tuZXNzID0gXCJub3JtYWxcIjtcbiAgICAgICAgZWRnZURhdGEucGF0dGVybiA9IFwic29saWRcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZG90dGVkXCI6XG4gICAgICAgIGVkZ2VEYXRhLnRoaWNrbmVzcyA9IFwibm9ybWFsXCI7XG4gICAgICAgIGVkZ2VEYXRhLnBhdHRlcm4gPSBcImRvdHRlZFwiO1xuICAgICAgICBlZGdlRGF0YS5zdHlsZSA9IFwiZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozO1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0aGlja1wiOlxuICAgICAgICBlZGdlRGF0YS50aGlja25lc3MgPSBcInRoaWNrXCI7XG4gICAgICAgIGVkZ2VEYXRhLnBhdHRlcm4gPSBcInNvbGlkXCI7XG4gICAgICAgIGVkZ2VEYXRhLnN0eWxlID0gXCJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW52aXNpYmxlXCI6XG4gICAgICAgIGVkZ2VEYXRhLnRoaWNrbmVzcyA9IFwiaW52aXNpYmxlXCI7XG4gICAgICAgIGVkZ2VEYXRhLnBhdHRlcm4gPSBcInNvbGlkXCI7XG4gICAgICAgIGVkZ2VEYXRhLnN0eWxlID0gXCJzdHJva2Utd2lkdGg6IDA7ZmlsbDpub25lO1wiO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGVkZ2Uuc3R5bGUgIT09IHZvaWQgMCkge1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzRnJvbUFycmF5KGVkZ2Uuc3R5bGUpO1xuICAgICAgc3R5bGUgPSBzdHlsZXMuc3R5bGU7XG4gICAgICBsYWJlbFN0eWxlID0gc3R5bGVzLmxhYmVsU3R5bGU7XG4gICAgfVxuICAgIGVkZ2VEYXRhLnN0eWxlID0gZWRnZURhdGEuc3R5bGUgKz0gc3R5bGU7XG4gICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IGVkZ2VEYXRhLmxhYmVsU3R5bGUgKz0gbGFiZWxTdHlsZTtcbiAgICBpZiAoZWRnZS5pbnRlcnBvbGF0ZSAhPT0gdm9pZCAwKSB7XG4gICAgICBlZGdlRGF0YS5jdXJ2ZSA9IGludGVycG9sYXRlVG9DdXJ2ZShlZGdlLmludGVycG9sYXRlLCBjdXJ2ZUxpbmVhcik7XG4gICAgfSBlbHNlIGlmIChlZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGUgIT09IHZvaWQgMCkge1xuICAgICAgZWRnZURhdGEuY3VydmUgPSBpbnRlcnBvbGF0ZVRvQ3VydmUoZWRnZXMuZGVmYXVsdEludGVycG9sYXRlLCBjdXJ2ZUxpbmVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkZ2VEYXRhLmN1cnZlID0gaW50ZXJwb2xhdGVUb0N1cnZlKGNvbmYuY3VydmUsIGN1cnZlTGluZWFyKTtcbiAgICB9XG4gICAgaWYgKGVkZ2UudGV4dCA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoZWRnZS5zdHlsZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGVkZ2VEYXRhLmFycm93aGVhZFN0eWxlID0gXCJmaWxsOiAjMzMzXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkZ2VEYXRhLmFycm93aGVhZFN0eWxlID0gXCJmaWxsOiAjMzMzXCI7XG4gICAgICBlZGdlRGF0YS5sYWJlbHBvcyA9IFwiY1wiO1xuICAgIH1cbiAgICBlZGdlRGF0YS5sYWJlbFR5cGUgPSBlZGdlLmxhYmVsVHlwZTtcbiAgICBlZGdlRGF0YS5sYWJlbCA9IGVkZ2UudGV4dC5yZXBsYWNlKGNvbW1vbi5saW5lQnJlYWtSZWdleCwgXCJcXG5cIik7XG4gICAgaWYgKGVkZ2Uuc3R5bGUgPT09IHZvaWQgMCkge1xuICAgICAgZWRnZURhdGEuc3R5bGUgPSBlZGdlRGF0YS5zdHlsZSB8fCBcInN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7XCI7XG4gICAgfVxuICAgIGVkZ2VEYXRhLmxhYmVsU3R5bGUgPSBlZGdlRGF0YS5sYWJlbFN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKTtcbiAgICBlZGdlRGF0YS5pZCA9IGxpbmtJZDtcbiAgICBlZGdlRGF0YS5jbGFzc2VzID0gXCJmbG93Y2hhcnQtbGluayBcIiArIGxpbmtOYW1lU3RhcnQgKyBcIiBcIiArIGxpbmtOYW1lRW5kO1xuICAgIGcuc2V0RWRnZShlZGdlLnN0YXJ0LCBlZGdlLmVuZCwgZWRnZURhdGEsIGNudCk7XG4gIH0pO1xufTtcbmNvbnN0IGdldENsYXNzZXMgPSBmdW5jdGlvbih0ZXh0LCBkaWFnT2JqKSB7XG4gIGxvZy5pbmZvKFwiRXh0cmFjdGluZyBjbGFzc2VzXCIpO1xuICBkaWFnT2JqLmRiLmNsZWFyKCk7XG4gIHRyeSB7XG4gICAgZGlhZ09iai5wYXJzZSh0ZXh0KTtcbiAgICByZXR1cm4gZGlhZ09iai5kYi5nZXRDbGFzc2VzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm47XG4gIH1cbn07XG5jb25zdCBkcmF3ID0gYXN5bmMgZnVuY3Rpb24odGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIGxvZy5pbmZvKFwiRHJhd2luZyBmbG93Y2hhcnRcIik7XG4gIGRpYWdPYmouZGIuY2xlYXIoKTtcbiAgZmxvd0RiLnNldEdlbihcImdlbi0yXCIpO1xuICBkaWFnT2JqLnBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgbGV0IGRpciA9IGRpYWdPYmouZGIuZ2V0RGlyZWN0aW9uKCk7XG4gIGlmIChkaXIgPT09IHZvaWQgMCkge1xuICAgIGRpciA9IFwiVERcIjtcbiAgfVxuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIGZsb3djaGFydDogY29uZjIgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCBub2RlU3BhY2luZyA9IGNvbmYyLm5vZGVTcGFjaW5nIHx8IDUwO1xuICBjb25zdCByYW5rU3BhY2luZyA9IGNvbmYyLnJhbmtTcGFjaW5nIHx8IDUwO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBkb2MgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50IDogZG9jdW1lbnQ7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIuR3JhcGgoe1xuICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgY29tcG91bmQ6IHRydWVcbiAgfSkuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IGRpcixcbiAgICBub2Rlc2VwOiBub2RlU3BhY2luZyxcbiAgICByYW5rc2VwOiByYW5rU3BhY2luZyxcbiAgICBtYXJnaW54OiAwLFxuICAgIG1hcmdpbnk6IDBcbiAgfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBsZXQgc3ViRztcbiAgY29uc3Qgc3ViR3JhcGhzID0gZGlhZ09iai5kYi5nZXRTdWJHcmFwaHMoKTtcbiAgbG9nLmluZm8oXCJTdWJncmFwaHMgLSBcIiwgc3ViR3JhcGhzKTtcbiAgZm9yIChsZXQgaTIgPSBzdWJHcmFwaHMubGVuZ3RoIC0gMTsgaTIgPj0gMDsgaTItLSkge1xuICAgIHN1YkcgPSBzdWJHcmFwaHNbaTJdO1xuICAgIGxvZy5pbmZvKFwiU3ViZ3JhcGggLSBcIiwgc3ViRyk7XG4gICAgZGlhZ09iai5kYi5hZGRWZXJ0ZXgoXG4gICAgICBzdWJHLmlkLFxuICAgICAgeyB0ZXh0OiBzdWJHLnRpdGxlLCB0eXBlOiBzdWJHLmxhYmVsVHlwZSB9LFxuICAgICAgXCJncm91cFwiLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3ViRy5jbGFzc2VzLFxuICAgICAgc3ViRy5kaXJcbiAgICApO1xuICB9XG4gIGNvbnN0IHZlcnQgPSBkaWFnT2JqLmRiLmdldFZlcnRpY2VzKCk7XG4gIGNvbnN0IGVkZ2VzID0gZGlhZ09iai5kYi5nZXRFZGdlcygpO1xuICBsb2cuaW5mbyhcIkVkZ2VzXCIsIGVkZ2VzKTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGkgPSBzdWJHcmFwaHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBzdWJHID0gc3ViR3JhcGhzW2ldO1xuICAgIHNlbGVjdEFsbChcImNsdXN0ZXJcIikuYXBwZW5kKFwidGV4dFwiKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN1Ykcubm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxvZy5pbmZvKFwiU2V0dGluZyB1cCBzdWJncmFwaHNcIiwgc3ViRy5ub2Rlc1tqXSwgc3ViRy5pZCk7XG4gICAgICBnLnNldFBhcmVudChzdWJHLm5vZGVzW2pdLCBzdWJHLmlkKTtcbiAgICB9XG4gIH1cbiAgYWRkVmVydGljZXModmVydCwgZywgaWQsIHJvb3QsIGRvYywgZGlhZ09iaik7XG4gIGFkZEVkZ2VzKGVkZ2VzLCBnKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGVsZW1lbnQgPSByb290LnNlbGVjdChcIiNcIiArIGlkICsgXCIgZ1wiKTtcbiAgYXdhaXQgcmVuZGVyKGVsZW1lbnQsIGcsIFtcInBvaW50XCIsIFwiY2lyY2xlXCIsIFwiY3Jvc3NcIl0sIFwiZmxvd2NoYXJ0XCIsIGlkKTtcbiAgdXRpbHMuaW5zZXJ0VGl0bGUoc3ZnLCBcImZsb3djaGFydFRpdGxlVGV4dFwiLCBjb25mMi50aXRsZVRvcE1hcmdpbiwgZGlhZ09iai5kYi5nZXREaWFncmFtVGl0bGUoKSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KGcsIHN2ZywgY29uZjIuZGlhZ3JhbVBhZGRpbmcsIGNvbmYyLnVzZU1heFdpZHRoKTtcbiAgZGlhZ09iai5kYi5pbmRleE5vZGVzKFwic3ViR3JhcGhcIiArIGkpO1xuICBpZiAoIWNvbmYyLmh0bWxMYWJlbHMpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBkb2MucXVlcnlTZWxlY3RvckFsbCgnW2lkPVwiJyArIGlkICsgJ1wiXSAuZWRnZUxhYmVsIC5sYWJlbCcpO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICBjb25zdCBkaW0gPSBsYWJlbC5nZXRCQm94KCk7XG4gICAgICBjb25zdCByZWN0ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgMCk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBkaW0ud2lkdGgpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgZGltLmhlaWdodCk7XG4gICAgICBsYWJlbC5pbnNlcnRCZWZvcmUocmVjdCwgbGFiZWwuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2ZXJ0KTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGNvbnN0IHZlcnRleCA9IHZlcnRba2V5XTtcbiAgICBpZiAodmVydGV4LmxpbmspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBzZWxlY3QoXCIjXCIgKyBpZCArICcgW2lkPVwiJyArIGtleSArICdcIl0nKTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJhXCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJjbGFzc1wiLCB2ZXJ0ZXguY2xhc3Nlcy5qb2luKFwiIFwiKSk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImhyZWZcIiwgdmVydGV4LmxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJyZWxcIiwgXCJub29wZW5lclwiKTtcbiAgICAgICAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGFyZ2V0XCIsIFwiX3RvcFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgubGlua1RhcmdldCkge1xuICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRhcmdldFwiLCB2ZXJ0ZXgubGlua1RhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGlua05vZGUgPSBub2RlLmluc2VydChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbGluaztcbiAgICAgICAgfSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gbm9kZS5zZWxlY3QoXCIubGFiZWwtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoc2hhcGUpIHtcbiAgICAgICAgICBsaW5rTm9kZS5hcHBlbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hhcGUubm9kZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsID0gbm9kZS5zZWxlY3QoXCIubGFiZWxcIik7XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgIGxpbmtOb2RlLmFwcGVuZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbC5ub2RlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGZsb3dSZW5kZXJlclYyID0ge1xuICBzZXRDb25mLFxuICBhZGRWZXJ0aWNlcyxcbiAgYWRkRWRnZXMsXG4gIGdldENsYXNzZXMsXG4gIGRyYXdcbn07XG5jb25zdCBmYWRlID0gKGNvbG9yLCBvcGFjaXR5KSA9PiB7XG4gIGNvbnN0IGNoYW5uZWwgPSBraHJvbWEuY2hhbm5lbDtcbiAgY29uc3QgciA9IGNoYW5uZWwoY29sb3IsIFwiclwiKTtcbiAgY29uc3QgZyA9IGNoYW5uZWwoY29sb3IsIFwiZ1wiKTtcbiAgY29uc3QgYiA9IGNoYW5uZWwoY29sb3IsIFwiYlwiKTtcbiAgcmV0dXJuIGtocm9tYS5yZ2JhKHIsIGcsIGIsIG9wYWNpdHkpO1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGNvbG9yOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHNwYW4scCB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4scCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGNvbG9yOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuICAuZmxvd2NoYXJ0LWxhYmVsIHRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gIH1cbiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7XG4gIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgLy8gfVxuICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHtcbiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gIC8vIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYXJyb3doZWFkQ29sb3J9O1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMi4wcHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICAgIGZpbGw6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi9cbiAgLmxhYmVsQmtnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2ZhZGUob3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kLCAwLjUpfTtcbiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOiBcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5jbHVzdGVyQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5jbHVzdGVyQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuXG4gIC5jbHVzdGVyIHNwYW4scCB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAvKiAuY2x1c3RlciBkaXYge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH0gKi9cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogJHtvcHRpb25zLnRlcnRpYXJ5Q29sb3J9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7b3B0aW9ucy5ib3JkZXIyfTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLmZsb3djaGFydFRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cbmA7XG5jb25zdCBmbG93U3R5bGVzID0gZ2V0U3R5bGVzO1xuZXhwb3J0IHtcbiAgZmxvd1N0eWxlcyBhcyBhLFxuICBmbG93UmVuZGVyZXJWMiBhcyBmXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/styles-5f89df53.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/styles-aefe6593.js": /*!*************************************************************!*\ !*** ../../../node_modules/mermaid/dist/styles-aefe6593.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"d\": () => (/* binding */ db),\n/* harmony export */ \"p\": () => (/* binding */ parser$1),\n/* harmony export */ \"s\": () => (/* binding */ styles)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 34], $V1 = [1, 35], $V2 = [1, 36], $V3 = [1, 37], $V4 = [1, 9], $V5 = [1, 8], $V6 = [1, 19], $V7 = [1, 20], $V8 = [1, 21], $V9 = [1, 40], $Va = [1, 41], $Vb = [1, 27], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 30], $Vj = [1, 31], $Vk = [1, 45], $Vl = [1, 42], $Vm = [1, 43], $Vn = [1, 44], $Vo = [1, 46], $Vp = [1, 24], $Vq = [1, 16, 24], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 64], $Vw = [1, 65], $Vx = [1, 66], $Vy = [1, 16, 24, 52], $Vz = [1, 77], $VA = [1, 16, 24, 27, 28, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 59, 68, 69, 70, 71, 72, 73, 74, 79, 81, 94, 96, 97, 98, 99], $VC = [1, 86], $VD = [28, 94, 96, 97, 98, 99], $VE = [28, 73, 74, 94, 96, 97, 98, 99], $VF = [28, 68, 69, 70, 71, 72, 94, 96, 97, 98, 99], $VG = [1, 99], $VH = [1, 16, 24, 50, 52, 55], $VI = [1, 16, 24, 36], $VJ = [8, 9, 10, 11, 19, 23, 44, 46, 48, 53, 57, 58, 60, 61, 63, 65, 75, 76, 78, 82, 94, 96, 97, 98, 99];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"directive\": 5, \"statements\": 6, \"direction\": 7, \"direction_tb\": 8, \"direction_bt\": 9, \"direction_rl\": 10, \"direction_lr\": 11, \"graphConfig\": 12, \"openDirective\": 13, \"typeDirective\": 14, \"closeDirective\": 15, \"NEWLINE\": 16, \":\": 17, \"argDirective\": 18, \"open_directive\": 19, \"type_directive\": 20, \"arg_directive\": 21, \"close_directive\": 22, \"CLASS_DIAGRAM\": 23, \"EOF\": 24, \"statement\": 25, \"classLabel\": 26, \"SQS\": 27, \"STR\": 28, \"SQE\": 29, \"namespaceName\": 30, \"alphaNumToken\": 31, \"className\": 32, \"classLiteralName\": 33, \"GENERICTYPE\": 34, \"relationStatement\": 35, \"LABEL\": 36, \"namespaceStatement\": 37, \"classStatement\": 38, \"methodStatement\": 39, \"annotationStatement\": 40, \"clickStatement\": 41, \"cssClassStatement\": 42, \"noteStatement\": 43, \"acc_title\": 44, \"acc_title_value\": 45, \"acc_descr\": 46, \"acc_descr_value\": 47, \"acc_descr_multiline_value\": 48, \"namespaceIdentifier\": 49, \"STRUCT_START\": 50, \"classStatements\": 51, \"STRUCT_STOP\": 52, \"NAMESPACE\": 53, \"classIdentifier\": 54, \"STYLE_SEPARATOR\": 55, \"members\": 56, \"CLASS\": 57, \"ANNOTATION_START\": 58, \"ANNOTATION_END\": 59, \"MEMBER\": 60, \"SEPARATOR\": 61, \"relation\": 62, \"NOTE_FOR\": 63, \"noteText\": 64, \"NOTE\": 65, \"relationType\": 66, \"lineType\": 67, \"AGGREGATION\": 68, \"EXTENSION\": 69, \"COMPOSITION\": 70, \"DEPENDENCY\": 71, \"LOLLIPOP\": 72, \"LINE\": 73, \"DOTTED_LINE\": 74, \"CALLBACK\": 75, \"LINK\": 76, \"LINK_TARGET\": 77, \"CLICK\": 78, \"CALLBACK_NAME\": 79, \"CALLBACK_ARGS\": 80, \"HREF\": 81, \"CSSCLASS\": 82, \"commentToken\": 83, \"textToken\": 84, \"graphCodeTokens\": 85, \"textNoTagsToken\": 86, \"TAGSTART\": 87, \"TAGEND\": 88, \"==\": 89, \"--\": 90, \"PCT\": 91, \"DEFAULT\": 92, \"SPACE\": 93, \"MINUS\": 94, \"keywords\": 95, \"UNICODE_TEXT\": 96, \"NUM\": 97, \"ALPHA\": 98, \"BQUOTE_STR\": 99, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 8: \"direction_tb\", 9: \"direction_bt\", 10: \"direction_rl\", 11: \"direction_lr\", 16: \"NEWLINE\", 17: \":\", 19: \"open_directive\", 20: \"type_directive\", 21: \"arg_directive\", 22: \"close_directive\", 23: \"CLASS_DIAGRAM\", 24: \"EOF\", 27: \"SQS\", 28: \"STR\", 29: \"SQE\", 34: \"GENERICTYPE\", 36: \"LABEL\", 44: \"acc_title\", 45: \"acc_title_value\", 46: \"acc_descr\", 47: \"acc_descr_value\", 48: \"acc_descr_multiline_value\", 50: \"STRUCT_START\", 52: \"STRUCT_STOP\", 53: \"NAMESPACE\", 55: \"STYLE_SEPARATOR\", 57: \"CLASS\", 58: \"ANNOTATION_START\", 59: \"ANNOTATION_END\", 60: \"MEMBER\", 61: \"SEPARATOR\", 63: \"NOTE_FOR\", 65: \"NOTE\", 68: \"AGGREGATION\", 69: \"EXTENSION\", 70: \"COMPOSITION\", 71: \"DEPENDENCY\", 72: \"LOLLIPOP\", 73: \"LINE\", 74: \"DOTTED_LINE\", 75: \"CALLBACK\", 76: \"LINK\", 77: \"LINK_TARGET\", 78: \"CLICK\", 79: \"CALLBACK_NAME\", 80: \"CALLBACK_ARGS\", 81: \"HREF\", 82: \"CSSCLASS\", 85: \"graphCodeTokens\", 87: \"TAGSTART\", 88: \"TAGEND\", 89: \"==\", 90: \"--\", 91: \"PCT\", 92: \"DEFAULT\", 93: \"SPACE\", 94: \"MINUS\", 95: \"keywords\", 96: \"UNICODE_TEXT\", 97: \"NUM\", 98: \"ALPHA\", 99: \"BQUOTE_STR\" },\n productions_: [0, [3, 1], [3, 2], [3, 1], [7, 1], [7, 1], [7, 1], [7, 1], [4, 1], [5, 4], [5, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [6, 1], [6, 2], [6, 3], [26, 3], [30, 1], [30, 2], [32, 1], [32, 1], [32, 2], [32, 2], [32, 2], [25, 1], [25, 2], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 2], [25, 2], [25, 1], [37, 4], [37, 5], [49, 2], [51, 1], [51, 2], [51, 3], [38, 1], [38, 3], [38, 4], [38, 6], [54, 2], [54, 3], [40, 4], [56, 1], [56, 2], [39, 1], [39, 2], [39, 1], [39, 1], [35, 3], [35, 4], [35, 4], [35, 5], [43, 3], [43, 2], [62, 3], [62, 2], [62, 2], [62, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [41, 3], [41, 4], [41, 3], [41, 4], [41, 4], [41, 5], [41, 3], [41, 4], [41, 4], [41, 5], [41, 3], [41, 4], [41, 4], [41, 5], [42, 3], [83, 1], [83, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [86, 1], [86, 1], [86, 1], [86, 1], [31, 1], [31, 1], [31, 1], [31, 1], [33, 1], [64, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.setDirection(\"TB\");\n break;\n case 5:\n yy.setDirection(\"BT\");\n break;\n case 6:\n yy.setDirection(\"RL\");\n break;\n case 7:\n yy.setDirection(\"LR\");\n break;\n case 11:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 12:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 13:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 14:\n yy.parseDirective(\"}%%\", \"close_directive\", \"class\");\n break;\n case 19:\n this.$ = $$[$0 - 1];\n break;\n case 20:\n case 22:\n case 23:\n this.$ = $$[$0];\n break;\n case 21:\n case 24:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 25:\n case 26:\n this.$ = $$[$0 - 1] + \"~\" + $$[$0] + \"~\";\n break;\n case 27:\n yy.addRelation($$[$0]);\n break;\n case 28:\n $$[$0 - 1].title = yy.cleanupLabel($$[$0]);\n yy.addRelation($$[$0 - 1]);\n break;\n case 37:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 38:\n case 39:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 40:\n yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]);\n break;\n case 41:\n yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]);\n break;\n case 42:\n this.$ = $$[$0];\n yy.addNamespace($$[$0]);\n break;\n case 43:\n this.$ = [$$[$0]];\n break;\n case 44:\n this.$ = [$$[$0 - 1]];\n break;\n case 45:\n $$[$0].unshift($$[$0 - 2]);\n this.$ = $$[$0];\n break;\n case 47:\n yy.setCssClass($$[$0 - 2], $$[$0]);\n break;\n case 48:\n yy.addMembers($$[$0 - 3], $$[$0 - 1]);\n break;\n case 49:\n yy.setCssClass($$[$0 - 5], $$[$0 - 3]);\n yy.addMembers($$[$0 - 5], $$[$0 - 1]);\n break;\n case 50:\n this.$ = $$[$0];\n yy.addClass($$[$0]);\n break;\n case 51:\n this.$ = $$[$0 - 1];\n yy.addClass($$[$0 - 1]);\n yy.setClassLabel($$[$0 - 1], $$[$0]);\n break;\n case 52:\n yy.addAnnotation($$[$0], $$[$0 - 2]);\n break;\n case 53:\n this.$ = [$$[$0]];\n break;\n case 54:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 55:\n break;\n case 56:\n yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));\n break;\n case 57:\n break;\n case 58:\n break;\n case 59:\n this.$ = { \"id1\": $$[$0 - 2], \"id2\": $$[$0], relation: $$[$0 - 1], relationTitle1: \"none\", relationTitle2: \"none\" };\n break;\n case 60:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: \"none\" };\n break;\n case 61:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: \"none\", relationTitle2: $$[$0 - 1] };\n break;\n case 62:\n this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };\n break;\n case 63:\n yy.addNote($$[$0], $$[$0 - 1]);\n break;\n case 64:\n yy.addNote($$[$0]);\n break;\n case 65:\n this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 66:\n this.$ = { type1: \"none\", type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 67:\n this.$ = { type1: $$[$0 - 1], type2: \"none\", lineType: $$[$0] };\n break;\n case 68:\n this.$ = { type1: \"none\", type2: \"none\", lineType: $$[$0] };\n break;\n case 69:\n this.$ = yy.relationType.AGGREGATION;\n break;\n case 70:\n this.$ = yy.relationType.EXTENSION;\n break;\n case 71:\n this.$ = yy.relationType.COMPOSITION;\n break;\n case 72:\n this.$ = yy.relationType.DEPENDENCY;\n break;\n case 73:\n this.$ = yy.relationType.LOLLIPOP;\n break;\n case 74:\n this.$ = yy.lineType.LINE;\n break;\n case 75:\n this.$ = yy.lineType.DOTTED_LINE;\n break;\n case 76:\n case 82:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 77:\n case 83:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 78:\n case 86:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 79:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 80:\n case 88:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 81:\n case 89:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 3], $$[$0 - 1]);\n break;\n case 84:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 85:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 87:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 90:\n yy.setCssClass($$[$0 - 1], $$[$0]);\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 3: 47, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [2, 3] }, { 1: [2, 8] }, { 14: 48, 20: [1, 49] }, o($Vp, [2, 16], { 16: [1, 50] }), { 16: [1, 51] }, { 20: [2, 11] }, o($Vq, [2, 27], { 36: [1, 52] }), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), { 45: [1, 53] }, { 47: [1, 54] }, o($Vq, [2, 39]), o($Vq, [2, 55], { 62: 55, 66: 58, 67: 59, 28: [1, 56], 36: [1, 57], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 50: [1, 67] }, o($Vy, [2, 46], { 50: [1, 69], 55: [1, 68] }), o($Vq, [2, 57]), o($Vq, [2, 58]), { 31: 70, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 71, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 72, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 73, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 74] }, { 31: 38, 32: 75, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: $Vz, 64: 76 }, o($Vq, [2, 4]), o($Vq, [2, 5]), o($Vq, [2, 6]), o($Vq, [2, 7]), o($VA, [2, 22], { 31: 38, 33: 39, 32: 78, 34: [1, 79], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), o($VA, [2, 23], { 34: [1, 80] }), { 30: 81, 31: 82, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 83, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VB, [2, 104]), o($VB, [2, 105]), o($VB, [2, 106]), o($VB, [2, 107]), o([1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 108]), { 1: [2, 2] }, { 15: 84, 17: [1, 85], 22: $VC }, o([17, 22], [2, 12]), o($Vp, [2, 17], { 25: 7, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 7: 18, 32: 22, 49: 23, 54: 24, 31: 38, 33: 39, 6: 87, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 44: $V6, 46: $V7, 48: $V8, 53: $V9, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), { 6: 88, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 28]), o($Vq, [2, 37]), o($Vq, [2, 38]), { 28: [1, 90], 31: 38, 32: 89, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 62: 91, 66: 58, 67: 59, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o($Vq, [2, 56]), { 67: 92, 73: $Vw, 74: $Vx }, o($VD, [2, 68], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VE, [2, 69]), o($VE, [2, 70]), o($VE, [2, 71]), o($VE, [2, 72]), o($VE, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), { 16: [1, 95], 38: 96, 51: 94, 54: 24, 57: $Va }, { 31: 97, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 56: 98, 60: $VG }, { 59: [1, 100] }, { 28: [1, 101] }, { 28: [1, 102] }, { 79: [1, 103], 81: [1, 104] }, { 31: 105, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 28: $Vz, 64: 106 }, o($Vq, [2, 64]), o($Vq, [2, 109]), o($VA, [2, 24]), o($VA, [2, 25]), o($VA, [2, 26]), { 50: [2, 42] }, { 30: 107, 31: 82, 50: [2, 20], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, o($VH, [2, 50], { 26: 108, 27: [1, 109] }), { 16: [1, 110] }, { 18: 111, 21: [1, 112] }, { 16: [2, 14] }, o($Vp, [2, 18]), { 24: [1, 113] }, o($VI, [2, 59]), { 31: 38, 32: 114, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 116], 31: 38, 32: 115, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 67], { 66: 117, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VD, [2, 66]), { 52: [1, 118] }, { 38: 96, 51: 119, 54: 24, 57: $Va }, { 16: [1, 120], 52: [2, 43] }, o($Vy, [2, 47], { 50: [1, 121] }), { 52: [1, 122] }, { 52: [2, 53], 56: 123, 60: $VG }, { 31: 38, 32: 124, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 76], { 28: [1, 125] }), o($Vq, [2, 78], { 28: [1, 127], 77: [1, 126] }), o($Vq, [2, 82], { 28: [1, 128], 80: [1, 129] }), o($Vq, [2, 86], { 28: [1, 131], 77: [1, 130] }), o($Vq, [2, 90]), o($Vq, [2, 63]), { 50: [2, 21] }, o($VH, [2, 51]), { 28: [1, 132] }, o($VJ, [2, 9]), { 15: 133, 22: $VC }, { 22: [2, 13] }, { 1: [2, 15] }, o($VI, [2, 61]), o($VI, [2, 60]), { 31: 38, 32: 134, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 65]), o($Vq, [2, 40]), { 52: [1, 135] }, { 38: 96, 51: 136, 52: [2, 44], 54: 24, 57: $Va }, { 56: 137, 60: $VG }, o($Vy, [2, 48]), { 52: [2, 54] }, o($Vq, [2, 52]), o($Vq, [2, 77]), o($Vq, [2, 79]), o($Vq, [2, 80], { 77: [1, 138] }), o($Vq, [2, 83]), o($Vq, [2, 84], { 28: [1, 139] }), o($Vq, [2, 87]), o($Vq, [2, 88], { 77: [1, 140] }), { 29: [1, 141] }, { 16: [1, 142] }, o($VI, [2, 62]), o($Vq, [2, 41]), { 52: [2, 45] }, { 52: [1, 143] }, o($Vq, [2, 81]), o($Vq, [2, 85]), o($Vq, [2, 89]), o($VH, [2, 19]), o($VJ, [2, 10]), o($Vy, [2, 49])],\n defaultActions: { 2: [2, 1], 4: [2, 3], 5: [2, 8], 9: [2, 11], 47: [2, 2], 81: [2, 42], 86: [2, 14], 107: [2, 21], 112: [2, 13], 113: [2, 15], 123: [2, 54], 136: [2, 45] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 19;\n case 1:\n return 8;\n case 2:\n return 9;\n case 3:\n return 10;\n case 4:\n return 11;\n case 5:\n this.begin(\"type_directive\");\n return 20;\n case 6:\n this.popState();\n this.begin(\"arg_directive\");\n return 17;\n case 7:\n this.popState();\n this.popState();\n return 22;\n case 8:\n return 21;\n case 9:\n break;\n case 10:\n break;\n case 11:\n this.begin(\"acc_title\");\n return 44;\n case 12:\n this.popState();\n return \"acc_title_value\";\n case 13:\n this.begin(\"acc_descr\");\n return 46;\n case 14:\n this.popState();\n return \"acc_descr_value\";\n case 15:\n this.begin(\"acc_descr_multiline\");\n break;\n case 16:\n this.popState();\n break;\n case 17:\n return \"acc_descr_multiline_value\";\n case 18:\n return 16;\n case 19:\n break;\n case 20:\n return 23;\n case 21:\n return 23;\n case 22:\n return \"EDGE_STATE\";\n case 23:\n this.begin(\"namespace\");\n return 53;\n case 24:\n this.popState();\n return 16;\n case 25:\n break;\n case 26:\n this.begin(\"namespace-body\");\n return 50;\n case 27:\n this.popState();\n return 52;\n case 28:\n return \"EOF_IN_STRUCT\";\n case 29:\n return 16;\n case 30:\n break;\n case 31:\n return \"EDGE_STATE\";\n case 32:\n this.begin(\"class\");\n return 57;\n case 33:\n this.popState();\n return 16;\n case 34:\n break;\n case 35:\n this.popState();\n this.popState();\n return 52;\n case 36:\n this.begin(\"class-body\");\n return 50;\n case 37:\n this.popState();\n return 52;\n case 38:\n return \"EOF_IN_STRUCT\";\n case 39:\n return \"EDGE_STATE\";\n case 40:\n return \"OPEN_IN_STRUCT\";\n case 41:\n break;\n case 42:\n return \"MEMBER\";\n case 43:\n return 82;\n case 44:\n return 75;\n case 45:\n return 76;\n case 46:\n return 78;\n case 47:\n return 63;\n case 48:\n return 65;\n case 49:\n return 58;\n case 50:\n return 59;\n case 51:\n this.begin(\"href\");\n break;\n case 52:\n this.popState();\n break;\n case 53:\n return 81;\n case 54:\n this.begin(\"callback_name\");\n break;\n case 55:\n this.popState();\n break;\n case 56:\n this.popState();\n this.begin(\"callback_args\");\n break;\n case 57:\n return 79;\n case 58:\n this.popState();\n break;\n case 59:\n return 80;\n case 60:\n this.popState();\n break;\n case 61:\n return \"GENERICTYPE\";\n case 62:\n this.begin(\"generic\");\n break;\n case 63:\n this.popState();\n break;\n case 64:\n return \"STR\";\n case 65:\n this.begin(\"string\");\n break;\n case 66:\n this.popState();\n break;\n case 67:\n return \"BQUOTE_STR\";\n case 68:\n this.begin(\"bqstring\");\n break;\n case 69:\n return 77;\n case 70:\n return 77;\n case 71:\n return 77;\n case 72:\n return 77;\n case 73:\n return 69;\n case 74:\n return 69;\n case 75:\n return 71;\n case 76:\n return 71;\n case 77:\n return 70;\n case 78:\n return 68;\n case 79:\n return 72;\n case 80:\n return 73;\n case 81:\n return 74;\n case 82:\n return 36;\n case 83:\n return 55;\n case 84:\n return 94;\n case 85:\n return \"DOT\";\n case 86:\n return \"PLUS\";\n case 87:\n return 91;\n case 88:\n return \"EQUALS\";\n case 89:\n return \"EQUALS\";\n case 90:\n return 98;\n case 91:\n return 27;\n case 92:\n return 29;\n case 93:\n return \"PUNCTUATION\";\n case 94:\n return 97;\n case 95:\n return 96;\n case 96:\n return 93;\n case 97:\n return 24;\n }\n },\n rules: [/^(?:%%\\{)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:((?:(?!\\}%%)[^:.])*))/, /^(?::)/, /^(?:\\}%%)/, /^(?:((?:(?!\\}%%).|\\n)*))/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:classDiagram-v2\\b)/, /^(?:classDiagram\\b)/, /^(?:\\[\\*\\])/, /^(?:namespace\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:\\[\\*\\])/, /^(?:class\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\[\\*\\])/, /^(?:[{])/, /^(?:[\\n])/, /^(?:[^{}\\n]*)/, /^(?:cssClass\\b)/, /^(?:callback\\b)/, /^(?:link\\b)/, /^(?:click\\b)/, /^(?:note for\\b)/, /^(?:note\\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href[\\s]+[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:[~])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[\"])/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:\\s*<\\|)/, /^(?:\\s*\\|>)/, /^(?:\\s*>)/, /^(?:\\s*<)/, /^(?:\\s*\\*)/, /^(?:\\s*o\\b)/, /^(?:\\s*\\(\\))/, /^(?:--)/, /^(?:\\.\\.)/, /^(?::{1}[^:\\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\\.)/, /^(?:\\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\\w+)/, /^(?:\\[)/, /^(?:\\])/, /^(?:[!\"#$%&'*+,-.`?\\\\/])/, /^(?:[0-9]+)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"namespace-body\": { \"rules\": [27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"namespace\": { \"rules\": [23, 24, 25, 26, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"class-body\": { \"rules\": [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"class\": { \"rules\": [33, 34, 35, 36, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [16, 17, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"acc_descr\": { \"rules\": [14, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"acc_title\": { \"rules\": [12, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"arg_directive\": { \"rules\": [7, 8, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"type_directive\": { \"rules\": [6, 7, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"open_directive\": { \"rules\": [5, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"callback_args\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 58, 59, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"callback_name\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"href\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"struct\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"generic\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 60, 61, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"bqstring\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"string\": { \"rules\": [43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 63, 64, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 32, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 62, 65, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst MERMAID_DOM_ID_PREFIX = \"classId-\";\nlet relations = [];\nlet classes = {};\nlet notes = [];\nlet classCounter = 0;\nlet namespaces = {};\nlet namespaceCounter = 0;\nlet functions = [];\nconst sanitizeText = (txt) => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)());\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type);\n};\nconst splitClassNameAndType = function(id) {\n let genericType = \"\";\n let className = id;\n if (id.indexOf(\"~\") > 0) {\n const split = id.split(\"~\");\n className = sanitizeText(split[0]);\n genericType = sanitizeText(split[1]);\n }\n return { className, type: genericType };\n};\nconst setClassLabel = function(id, label) {\n if (label) {\n label = sanitizeText(label);\n }\n const { className } = splitClassNameAndType(id);\n classes[className].label = label;\n};\nconst addClass = function(id) {\n const classId = splitClassNameAndType(id);\n if (classes[classId.className] !== void 0) {\n return;\n }\n classes[classId.className] = {\n id: classId.className,\n type: classId.type,\n label: classId.className,\n cssClasses: [],\n methods: [],\n members: [],\n annotations: [],\n domId: MERMAID_DOM_ID_PREFIX + classId.className + \"-\" + classCounter\n };\n classCounter++;\n};\nconst lookUpDomId = function(id) {\n if (id in classes) {\n return classes[id].domId;\n }\n throw new Error(\"Class not found: \" + id);\n};\nconst clear = function() {\n relations = [];\n classes = {};\n notes = [];\n functions = [];\n functions.push(setupToolTips);\n namespaces = {};\n namespaceCounter = 0;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.v)();\n};\nconst getClass = function(id) {\n return classes[id];\n};\nconst getClasses = function() {\n return classes;\n};\nconst getRelations = function() {\n return relations;\n};\nconst getNotes = function() {\n return notes;\n};\nconst addRelation = function(relation) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Adding relation: \" + JSON.stringify(relation));\n addClass(relation.id1);\n addClass(relation.id2);\n relation.id1 = splitClassNameAndType(relation.id1).className;\n relation.id2 = splitClassNameAndType(relation.id2).className;\n relation.relationTitle1 = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(\n relation.relationTitle1.trim(),\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)()\n );\n relation.relationTitle2 = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(\n relation.relationTitle2.trim(),\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)()\n );\n relations.push(relation);\n};\nconst addAnnotation = function(className, annotation) {\n const validatedClassName = splitClassNameAndType(className).className;\n classes[validatedClassName].annotations.push(annotation);\n};\nconst addMember = function(className, member) {\n const validatedClassName = splitClassNameAndType(className).className;\n const theClass = classes[validatedClassName];\n if (typeof member === \"string\") {\n const memberString = member.trim();\n if (memberString.startsWith(\"<<\") && memberString.endsWith(\">>\")) {\n theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2)));\n } else if (memberString.indexOf(\")\") > 0) {\n theClass.methods.push(sanitizeText(memberString));\n } else if (memberString) {\n theClass.members.push(sanitizeText(memberString));\n }\n }\n};\nconst addMembers = function(className, members) {\n if (Array.isArray(members)) {\n members.reverse();\n members.forEach((member) => addMember(className, member));\n }\n};\nconst addNote = function(text, className) {\n const note = {\n id: `note${notes.length}`,\n class: className,\n text\n };\n notes.push(note);\n};\nconst cleanupLabel = function(label) {\n if (label.startsWith(\":\")) {\n label = label.substring(1);\n }\n return sanitizeText(label.trim());\n};\nconst setCssClass = function(ids, className) {\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (_id[0].match(/\\d/)) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n if (classes[id] !== void 0) {\n classes[id].cssClasses.push(className);\n }\n });\n};\nconst setTooltip = function(ids, tooltip) {\n ids.split(\",\").forEach(function(id) {\n if (tooltip !== void 0) {\n classes[id].tooltip = sanitizeText(tooltip);\n }\n });\n};\nconst getTooltip = function(id, namespace) {\n if (namespace) {\n return namespaces[namespace].classes[id].tooltip;\n }\n return classes[id].tooltip;\n};\nconst setLink = function(ids, linkStr, target) {\n const config = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)();\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (_id[0].match(/\\d/)) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n if (classes[id] !== void 0) {\n classes[id].link = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config);\n if (config.securityLevel === \"sandbox\") {\n classes[id].linkTarget = \"_top\";\n } else if (typeof target === \"string\") {\n classes[id].linkTarget = sanitizeText(target);\n } else {\n classes[id].linkTarget = \"_blank\";\n }\n }\n });\n setCssClass(ids, \"clickable\");\n};\nconst setClickEvent = function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFunc(id, functionName, functionArgs);\n classes[id].haveCallback = true;\n });\n setCssClass(ids, \"clickable\");\n};\nconst setClickFunc = function(domId, functionName, functionArgs) {\n const config = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)();\n if (config.securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n const id = domId;\n if (classes[id] !== void 0) {\n const elemId = lookUpDomId(id);\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(elemId);\n }\n functions.push(function() {\n const elem = document.querySelector(`[id=\"${elemId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n function() {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n};\nconst bindFunctions = function(element) {\n functions.forEach(function(fun) {\n fun(element);\n });\n};\nconst lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n};\nconst relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n LOLLIPOP: 4\n};\nconst setupToolTips = function(element) {\n let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", function() {\n const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(this);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.top - 14 + document.body.scrollTop + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", function() {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(this);\n el.classed(\"hover\", false);\n });\n};\nfunctions.push(setupToolTips);\nlet direction = \"TB\";\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n direction = dir;\n};\nconst addNamespace = function(id) {\n if (namespaces[id] !== void 0) {\n return;\n }\n namespaces[id] = {\n id,\n classes: {},\n children: {},\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + namespaceCounter\n };\n namespaceCounter++;\n};\nconst getNamespace = function(name) {\n return namespaces[name];\n};\nconst getNamespaces = function() {\n return namespaces;\n};\nconst addClassesToNamespace = function(id, classNames) {\n if (namespaces[id] !== void 0) {\n classNames.map((className) => {\n namespaces[id].classes[className] = classes[className];\n delete classes[className];\n classCounter--;\n });\n }\n};\nconst db = {\n parseDirective,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.s,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.g,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.b,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.c)().class,\n addClass,\n bindFunctions,\n clear,\n getClass,\n getClasses,\n getNotes,\n addAnnotation,\n addNote,\n getRelations,\n addRelation,\n getDirection,\n setDirection,\n addMember,\n addMembers,\n cleanupLabel,\n lineType,\n relationType,\n setClickEvent,\n setCssClass,\n setLink,\n getTooltip,\n setTooltip,\n lookUpDomId,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.t,\n setClassLabel,\n addNamespace,\n addClassesToNamespace,\n getNamespace,\n getNamespaces\n};\nconst getStyles = (options) => `g.classGroup text {\n fill: ${options.nodeBorder};\n fill: ${options.classText};\n stroke: none;\n font-family: ${options.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${options.classText};\n}\n.edgeLabel .label rect {\n fill: ${options.mainBkg};\n}\n.label text {\n fill: ${options.classText};\n}\n.edgeLabel .label span {\n background: ${options.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${options.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`;\nconst styles = getStyles;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdHlsZXMtYWVmZTY1OTMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEI7QUFDNk47QUFDelA7QUFDQTtBQUNBLHNCQUFzQixnQkFBZ0IsS0FBSztBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsVUFBVTtBQUNWLGdCQUFnQixpd0RBQWl3RDtBQUNqeEQsa0JBQWtCLHNpQ0FBc2lDO0FBQ3hqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7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QUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQy9CO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLG1CQUFtQjtBQUM3QixZQUFZLG1CQUFtQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsVUFBVSxtQkFBbUI7QUFDN0IsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTs7QUFFQTtBQUNBLFVBQVUsbUJBQW1CO0FBQzdCLFlBQVksbUJBQW1CO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQixZQUFZLG1CQUFtQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpQkFBaUI7QUFDM0IsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTs7QUFFQTtBQUNBLFVBQVUsaUJBQWlCO0FBQzNCLFlBQVksbUJBQW1CO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQixZQUFZLG1CQUFtQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpQkFBaUI7QUFDM0IsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQTs7QUFFQTtBQUNBLFVBQVUsaUJBQWlCO0FBQzNCLFlBQVksbUJBQW1CO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFLRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L3N0eWxlcy1hZWZlNjU5My5qcz8wMjIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgcyBhcyBzZXRBY2NUaXRsZSwgZyBhcyBnZXRBY2NUaXRsZSwgYSBhcyBnZXRBY2NEZXNjcmlwdGlvbiwgYiBhcyBzZXRBY2NEZXNjcmlwdGlvbiwgYyBhcyBnZXRDb25maWcsIHIgYXMgc2V0RGlhZ3JhbVRpdGxlLCB0IGFzIGdldERpYWdyYW1UaXRsZSwgbSBhcyBtZXJtYWlkQVBJLCB2IGFzIGNsZWFyJDEsIGwgYXMgbG9nLCBlIGFzIGNvbW1vbiwgdSBhcyB1dGlscyB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCAzNF0sICRWMSA9IFsxLCAzNV0sICRWMiA9IFsxLCAzNl0sICRWMyA9IFsxLCAzN10sICRWNCA9IFsxLCA5XSwgJFY1ID0gWzEsIDhdLCAkVjYgPSBbMSwgMTldLCAkVjcgPSBbMSwgMjBdLCAkVjggPSBbMSwgMjFdLCAkVjkgPSBbMSwgNDBdLCAkVmEgPSBbMSwgNDFdLCAkVmIgPSBbMSwgMjddLCAkVmMgPSBbMSwgMjVdLCAkVmQgPSBbMSwgMjZdLCAkVmUgPSBbMSwgMzJdLCAkVmYgPSBbMSwgMzNdLCAkVmcgPSBbMSwgMjhdLCAkVmggPSBbMSwgMjldLCAkVmkgPSBbMSwgMzBdLCAkVmogPSBbMSwgMzFdLCAkVmsgPSBbMSwgNDVdLCAkVmwgPSBbMSwgNDJdLCAkVm0gPSBbMSwgNDNdLCAkVm4gPSBbMSwgNDRdLCAkVm8gPSBbMSwgNDZdLCAkVnAgPSBbMSwgMjRdLCAkVnEgPSBbMSwgMTYsIDI0XSwgJFZyID0gWzEsIDYwXSwgJFZzID0gWzEsIDYxXSwgJFZ0ID0gWzEsIDYyXSwgJFZ1ID0gWzEsIDYzXSwgJFZ2ID0gWzEsIDY0XSwgJFZ3ID0gWzEsIDY1XSwgJFZ4ID0gWzEsIDY2XSwgJFZ5ID0gWzEsIDE2LCAyNCwgNTJdLCAkVnogPSBbMSwgNzddLCAkVkEgPSBbMSwgMTYsIDI0LCAyNywgMjgsIDM2LCA1MCwgNTIsIDU1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzksIDgxXSwgJFZCID0gWzEsIDE2LCAyNCwgMjcsIDI4LCAzNCwgMzYsIDUwLCA1MiwgNTUsIDU5LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzksIDgxLCA5NCwgOTYsIDk3LCA5OCwgOTldLCAkVkMgPSBbMSwgODZdLCAkVkQgPSBbMjgsIDk0LCA5NiwgOTcsIDk4LCA5OV0sICRWRSA9IFsyOCwgNzMsIDc0LCA5NCwgOTYsIDk3LCA5OCwgOTldLCAkVkYgPSBbMjgsIDY4LCA2OSwgNzAsIDcxLCA3MiwgOTQsIDk2LCA5NywgOTgsIDk5XSwgJFZHID0gWzEsIDk5XSwgJFZIID0gWzEsIDE2LCAyNCwgNTAsIDUyLCA1NV0sICRWSSA9IFsxLCAxNiwgMjQsIDM2XSwgJFZKID0gWzgsIDksIDEwLCAxMSwgMTksIDIzLCA0NCwgNDYsIDQ4LCA1MywgNTcsIDU4LCA2MCwgNjEsIDYzLCA2NSwgNzUsIDc2LCA3OCwgODIsIDk0LCA5NiwgOTcsIDk4LCA5OV07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJtZXJtYWlkRG9jXCI6IDQsIFwiZGlyZWN0aXZlXCI6IDUsIFwic3RhdGVtZW50c1wiOiA2LCBcImRpcmVjdGlvblwiOiA3LCBcImRpcmVjdGlvbl90YlwiOiA4LCBcImRpcmVjdGlvbl9idFwiOiA5LCBcImRpcmVjdGlvbl9ybFwiOiAxMCwgXCJkaXJlY3Rpb25fbHJcIjogMTEsIFwiZ3JhcGhDb25maWdcIjogMTIsIFwib3BlbkRpcmVjdGl2ZVwiOiAxMywgXCJ0eXBlRGlyZWN0aXZlXCI6IDE0LCBcImNsb3NlRGlyZWN0aXZlXCI6IDE1LCBcIk5FV0xJTkVcIjogMTYsIFwiOlwiOiAxNywgXCJhcmdEaXJlY3RpdmVcIjogMTgsIFwib3Blbl9kaXJlY3RpdmVcIjogMTksIFwidHlwZV9kaXJlY3RpdmVcIjogMjAsIFwiYXJnX2RpcmVjdGl2ZVwiOiAyMSwgXCJjbG9zZV9kaXJlY3RpdmVcIjogMjIsIFwiQ0xBU1NfRElBR1JBTVwiOiAyMywgXCJFT0ZcIjogMjQsIFwic3RhdGVtZW50XCI6IDI1LCBcImNsYXNzTGFiZWxcIjogMjYsIFwiU1FTXCI6IDI3LCBcIlNUUlwiOiAyOCwgXCJTUUVcIjogMjksIFwibmFtZXNwYWNlTmFtZVwiOiAzMCwgXCJhbHBoYU51bVRva2VuXCI6IDMxLCBcImNsYXNzTmFtZVwiOiAzMiwgXCJjbGFzc0xpdGVyYWxOYW1lXCI6IDMzLCBcIkdFTkVSSUNUWVBFXCI6IDM0LCBcInJlbGF0aW9uU3RhdGVtZW50XCI6IDM1LCBcIkxBQkVMXCI6IDM2LCBcIm5hbWVzcGFjZVN0YXRlbWVudFwiOiAzNywgXCJjbGFzc1N0YXRlbWVudFwiOiAzOCwgXCJtZXRob2RTdGF0ZW1lbnRcIjogMzksIFwiYW5ub3RhdGlvblN0YXRlbWVudFwiOiA0MCwgXCJjbGlja1N0YXRlbWVudFwiOiA0MSwgXCJjc3NDbGFzc1N0YXRlbWVudFwiOiA0MiwgXCJub3RlU3RhdGVtZW50XCI6IDQzLCBcImFjY190aXRsZVwiOiA0NCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogNDUsIFwiYWNjX2Rlc2NyXCI6IDQ2LCBcImFjY19kZXNjcl92YWx1ZVwiOiA0NywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDQ4LCBcIm5hbWVzcGFjZUlkZW50aWZpZXJcIjogNDksIFwiU1RSVUNUX1NUQVJUXCI6IDUwLCBcImNsYXNzU3RhdGVtZW50c1wiOiA1MSwgXCJTVFJVQ1RfU1RPUFwiOiA1MiwgXCJOQU1FU1BBQ0VcIjogNTMsIFwiY2xhc3NJZGVudGlmaWVyXCI6IDU0LCBcIlNUWUxFX1NFUEFSQVRPUlwiOiA1NSwgXCJtZW1iZXJzXCI6IDU2LCBcIkNMQVNTXCI6IDU3LCBcIkFOTk9UQVRJT05fU1RBUlRcIjogNTgsIFwiQU5OT1RBVElPTl9FTkRcIjogNTksIFwiTUVNQkVSXCI6IDYwLCBcIlNFUEFSQVRPUlwiOiA2MSwgXCJyZWxhdGlvblwiOiA2MiwgXCJOT1RFX0ZPUlwiOiA2MywgXCJub3RlVGV4dFwiOiA2NCwgXCJOT1RFXCI6IDY1LCBcInJlbGF0aW9uVHlwZVwiOiA2NiwgXCJsaW5lVHlwZVwiOiA2NywgXCJBR0dSRUdBVElPTlwiOiA2OCwgXCJFWFRFTlNJT05cIjogNjksIFwiQ09NUE9TSVRJT05cIjogNzAsIFwiREVQRU5ERU5DWVwiOiA3MSwgXCJMT0xMSVBPUFwiOiA3MiwgXCJMSU5FXCI6IDczLCBcIkRPVFRFRF9MSU5FXCI6IDc0LCBcIkNBTExCQUNLXCI6IDc1LCBcIkxJTktcIjogNzYsIFwiTElOS19UQVJHRVRcIjogNzcsIFwiQ0xJQ0tcIjogNzgsIFwiQ0FMTEJBQ0tfTkFNRVwiOiA3OSwgXCJDQUxMQkFDS19BUkdTXCI6IDgwLCBcIkhSRUZcIjogODEsIFwiQ1NTQ0xBU1NcIjogODIsIFwiY29tbWVudFRva2VuXCI6IDgzLCBcInRleHRUb2tlblwiOiA4NCwgXCJncmFwaENvZGVUb2tlbnNcIjogODUsIFwidGV4dE5vVGFnc1Rva2VuXCI6IDg2LCBcIlRBR1NUQVJUXCI6IDg3LCBcIlRBR0VORFwiOiA4OCwgXCI9PVwiOiA4OSwgXCItLVwiOiA5MCwgXCJQQ1RcIjogOTEsIFwiREVGQVVMVFwiOiA5MiwgXCJTUEFDRVwiOiA5MywgXCJNSU5VU1wiOiA5NCwgXCJrZXl3b3Jkc1wiOiA5NSwgXCJVTklDT0RFX1RFWFRcIjogOTYsIFwiTlVNXCI6IDk3LCBcIkFMUEhBXCI6IDk4LCBcIkJRVU9URV9TVFJcIjogOTksIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA4OiBcImRpcmVjdGlvbl90YlwiLCA5OiBcImRpcmVjdGlvbl9idFwiLCAxMDogXCJkaXJlY3Rpb25fcmxcIiwgMTE6IFwiZGlyZWN0aW9uX2xyXCIsIDE2OiBcIk5FV0xJTkVcIiwgMTc6IFwiOlwiLCAxOTogXCJvcGVuX2RpcmVjdGl2ZVwiLCAyMDogXCJ0eXBlX2RpcmVjdGl2ZVwiLCAyMTogXCJhcmdfZGlyZWN0aXZlXCIsIDIyOiBcImNsb3NlX2RpcmVjdGl2ZVwiLCAyMzogXCJDTEFTU19ESUFHUkFNXCIsIDI0OiBcIkVPRlwiLCAyNzogXCJTUVNcIiwgMjg6IFwiU1RSXCIsIDI5OiBcIlNRRVwiLCAzNDogXCJHRU5FUklDVFlQRVwiLCAzNjogXCJMQUJFTFwiLCA0NDogXCJhY2NfdGl0bGVcIiwgNDU6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDQ2OiBcImFjY19kZXNjclwiLCA0NzogXCJhY2NfZGVzY3JfdmFsdWVcIiwgNDg6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCA1MDogXCJTVFJVQ1RfU1RBUlRcIiwgNTI6IFwiU1RSVUNUX1NUT1BcIiwgNTM6IFwiTkFNRVNQQUNFXCIsIDU1OiBcIlNUWUxFX1NFUEFSQVRPUlwiLCA1NzogXCJDTEFTU1wiLCA1ODogXCJBTk5PVEFUSU9OX1NUQVJUXCIsIDU5OiBcIkFOTk9UQVRJT05fRU5EXCIsIDYwOiBcIk1FTUJFUlwiLCA2MTogXCJTRVBBUkFUT1JcIiwgNjM6IFwiTk9URV9GT1JcIiwgNjU6IFwiTk9URVwiLCA2ODogXCJBR0dSRUdBVElPTlwiLCA2OTogXCJFWFRFTlNJT05cIiwgNzA6IFwiQ09NUE9TSVRJT05cIiwgNzE6IFwiREVQRU5ERU5DWVwiLCA3MjogXCJMT0xMSVBPUFwiLCA3MzogXCJMSU5FXCIsIDc0OiBcIkRPVFRFRF9MSU5FXCIsIDc1OiBcIkNBTExCQUNLXCIsIDc2OiBcIkxJTktcIiwgNzc6IFwiTElOS19UQVJHRVRcIiwgNzg6IFwiQ0xJQ0tcIiwgNzk6IFwiQ0FMTEJBQ0tfTkFNRVwiLCA4MDogXCJDQUxMQkFDS19BUkdTXCIsIDgxOiBcIkhSRUZcIiwgODI6IFwiQ1NTQ0xBU1NcIiwgODU6IFwiZ3JhcGhDb2RlVG9rZW5zXCIsIDg3OiBcIlRBR1NUQVJUXCIsIDg4OiBcIlRBR0VORFwiLCA4OTogXCI9PVwiLCA5MDogXCItLVwiLCA5MTogXCJQQ1RcIiwgOTI6IFwiREVGQVVMVFwiLCA5MzogXCJTUEFDRVwiLCA5NDogXCJNSU5VU1wiLCA5NTogXCJrZXl3b3Jkc1wiLCA5NjogXCJVTklDT0RFX1RFWFRcIiwgOTc6IFwiTlVNXCIsIDk4OiBcIkFMUEhBXCIsIDk5OiBcIkJRVU9URV9TVFJcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDJdLCBbMywgMV0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzQsIDFdLCBbNSwgNF0sIFs1LCA2XSwgWzEzLCAxXSwgWzE0LCAxXSwgWzE4LCAxXSwgWzE1LCAxXSwgWzEyLCA0XSwgWzYsIDFdLCBbNiwgMl0sIFs2LCAzXSwgWzI2LCAzXSwgWzMwLCAxXSwgWzMwLCAyXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzI1LCAxXSwgWzI1LCAyXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAxXSwgWzI1LCAyXSwgWzI1LCAyXSwgWzI1LCAxXSwgWzM3LCA0XSwgWzM3LCA1XSwgWzQ5LCAyXSwgWzUxLCAxXSwgWzUxLCAyXSwgWzUxLCAzXSwgWzM4LCAxXSwgWzM4LCAzXSwgWzM4LCA0XSwgWzM4LCA2XSwgWzU0LCAyXSwgWzU0LCAzXSwgWzQwLCA0XSwgWzU2LCAxXSwgWzU2LCAyXSwgWzM5LCAxXSwgWzM5LCAyXSwgWzM5LCAxXSwgWzM5LCAxXSwgWzM1LCAzXSwgWzM1LCA0XSwgWzM1LCA0XSwgWzM1LCA1XSwgWzQzLCAzXSwgWzQzLCAyXSwgWzYyLCAzXSwgWzYyLCAyXSwgWzYyLCAyXSwgWzYyLCAxXSwgWzY2LCAxXSwgWzY2LCAxXSwgWzY2LCAxXSwgWzY2LCAxXSwgWzY2LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzQxLCAzXSwgWzQxLCA0XSwgWzQxLCAzXSwgWzQxLCA0XSwgWzQxLCA0XSwgWzQxLCA1XSwgWzQxLCAzXSwgWzQxLCA0XSwgWzQxLCA0XSwgWzQxLCA1XSwgWzQxLCAzXSwgWzQxLCA0XSwgWzQxLCA0XSwgWzQxLCA1XSwgWzQyLCAzXSwgWzgzLCAxXSwgWzgzLCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg0LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzMxLCAxXSwgWzMxLCAxXSwgWzMxLCAxXSwgWzMxLCAxXSwgWzMzLCAxXSwgWzY0LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiVEJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJCVFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlJMXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiTFJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCIlJXtcIiwgXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgJCRbJDBdID0gJCRbJDBdLnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwifSUlXCIsIFwiY2xvc2VfZGlyZWN0aXZlXCIsIFwiY2xhc3NcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCJ+XCIgKyAkJFskMF0gKyBcIn5cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB5eS5hZGRSZWxhdGlvbigkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICQkWyQwIC0gMV0udGl0bGUgPSB5eS5jbGVhbnVwTGFiZWwoJCRbJDBdKTtcbiAgICAgICAgICB5eS5hZGRSZWxhdGlvbigkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIHl5LmFkZENsYXNzZXNUb05hbWVzcGFjZSgkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB5eS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoJCRbJDAgLSA0XSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIHl5LmFkZE5hbWVzcGFjZSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAkJFskMF0udW5zaGlmdCgkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgeXkuc2V0Q3NzQ2xhc3MoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICB5eS5hZGRNZW1iZXJzKCQkWyQwIC0gM10sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgIHl5LnNldENzc0NsYXNzKCQkWyQwIC0gNV0sICQkWyQwIC0gM10pO1xuICAgICAgICAgIHl5LmFkZE1lbWJlcnMoJCRbJDAgLSA1XSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIHl5LmFkZENsYXNzKCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRDbGFzc0xhYmVsKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgeXkuYWRkQW5ub3RhdGlvbigkJFskMF0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICQkWyQwXS5wdXNoKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICB5eS5hZGRNZW1iZXIoJCRbJDAgLSAxXSwgeXkuY2xlYW51cExhYmVsKCQkWyQwXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgXCJpZDFcIjogJCRbJDAgLSAyXSwgXCJpZDJcIjogJCRbJDBdLCByZWxhdGlvbjogJCRbJDAgLSAxXSwgcmVsYXRpb25UaXRsZTE6IFwibm9uZVwiLCByZWxhdGlvblRpdGxlMjogXCJub25lXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkMTogJCRbJDAgLSAzXSwgaWQyOiAkJFskMF0sIHJlbGF0aW9uOiAkJFskMCAtIDFdLCByZWxhdGlvblRpdGxlMTogJCRbJDAgLSAyXSwgcmVsYXRpb25UaXRsZTI6IFwibm9uZVwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgdGhpcy4kID0geyBpZDE6ICQkWyQwIC0gM10sIGlkMjogJCRbJDBdLCByZWxhdGlvbjogJCRbJDAgLSAyXSwgcmVsYXRpb25UaXRsZTE6IFwibm9uZVwiLCByZWxhdGlvblRpdGxlMjogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIHRoaXMuJCA9IHsgaWQxOiAkJFskMCAtIDRdLCBpZDI6ICQkWyQwXSwgcmVsYXRpb246ICQkWyQwIC0gMl0sIHJlbGF0aW9uVGl0bGUxOiAkJFskMCAtIDNdLCByZWxhdGlvblRpdGxlMjogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHl5LmFkZE5vdGUoJCRbJDBdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB5eS5hZGROb3RlKCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogJCRbJDAgLSAyXSwgdHlwZTI6ICQkWyQwXSwgbGluZVR5cGU6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGUxOiBcIm5vbmVcIiwgdHlwZTI6ICQkWyQwXSwgbGluZVR5cGU6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGUxOiAkJFskMCAtIDFdLCB0eXBlMjogXCJub25lXCIsIGxpbmVUeXBlOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2ODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGUxOiBcIm5vbmVcIiwgdHlwZTI6IFwibm9uZVwiLCBsaW5lVHlwZTogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgdGhpcy4kID0geXkucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5FWFRFTlNJT047XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgdGhpcy4kID0geXkucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5MT0xMSVBPUDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5saW5lVHlwZS5MSU5FO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmxpbmVUeXBlLkRPVFRFRF9MSU5FO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc2OlxuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc3OlxuICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzg6XG4gICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODA6XG4gICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgY2FzZSA4OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gM10sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDNdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gM10sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgeXkuc2V0Q3NzQ2xhc3MoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAyLCA1OiAzLCA2OiA0LCA3OiAxOCwgODogJFYwLCA5OiAkVjEsIDEwOiAkVjIsIDExOiAkVjMsIDEyOiA1LCAxMzogNiwgMTk6ICRWNCwgMjM6ICRWNSwgMjU6IDcsIDMxOiAzOCwgMzI6IDIyLCAzMzogMzksIDM1OiAxMCwgMzc6IDExLCAzODogMTIsIDM5OiAxMywgNDA6IDE0LCA0MTogMTUsIDQyOiAxNiwgNDM6IDE3LCA0NDogJFY2LCA0NjogJFY3LCA0ODogJFY4LCA0OTogMjMsIDUzOiAkVjksIDU0OiAyNCwgNTc6ICRWYSwgNTg6ICRWYiwgNjA6ICRWYywgNjE6ICRWZCwgNjM6ICRWZSwgNjU6ICRWZiwgNzU6ICRWZywgNzY6ICRWaCwgNzg6ICRWaSwgODI6ICRWaiwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCB7IDE6IFszXSB9LCB7IDE6IFsyLCAxXSB9LCB7IDM6IDQ3LCA0OiAyLCA1OiAzLCA2OiA0LCA3OiAxOCwgODogJFYwLCA5OiAkVjEsIDEwOiAkVjIsIDExOiAkVjMsIDEyOiA1LCAxMzogNiwgMTk6ICRWNCwgMjM6ICRWNSwgMjU6IDcsIDMxOiAzOCwgMzI6IDIyLCAzMzogMzksIDM1OiAxMCwgMzc6IDExLCAzODogMTIsIDM5OiAxMywgNDA6IDE0LCA0MTogMTUsIDQyOiAxNiwgNDM6IDE3LCA0NDogJFY2LCA0NjogJFY3LCA0ODogJFY4LCA0OTogMjMsIDUzOiAkVjksIDU0OiAyNCwgNTc6ICRWYSwgNTg6ICRWYiwgNjA6ICRWYywgNjE6ICRWZCwgNjM6ICRWZSwgNjU6ICRWZiwgNzU6ICRWZywgNzY6ICRWaCwgNzg6ICRWaSwgODI6ICRWaiwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCB7IDE6IFsyLCAzXSB9LCB7IDE6IFsyLCA4XSB9LCB7IDE0OiA0OCwgMjA6IFsxLCA0OV0gfSwgbygkVnAsIFsyLCAxNl0sIHsgMTY6IFsxLCA1MF0gfSksIHsgMTY6IFsxLCA1MV0gfSwgeyAyMDogWzIsIDExXSB9LCBvKCRWcSwgWzIsIDI3XSwgeyAzNjogWzEsIDUyXSB9KSwgbygkVnEsIFsyLCAyOV0pLCBvKCRWcSwgWzIsIDMwXSksIG8oJFZxLCBbMiwgMzFdKSwgbygkVnEsIFsyLCAzMl0pLCBvKCRWcSwgWzIsIDMzXSksIG8oJFZxLCBbMiwgMzRdKSwgbygkVnEsIFsyLCAzNV0pLCBvKCRWcSwgWzIsIDM2XSksIHsgNDU6IFsxLCA1M10gfSwgeyA0NzogWzEsIDU0XSB9LCBvKCRWcSwgWzIsIDM5XSksIG8oJFZxLCBbMiwgNTVdLCB7IDYyOiA1NSwgNjY6IDU4LCA2NzogNTksIDI4OiBbMSwgNTZdLCAzNjogWzEsIDU3XSwgNjg6ICRWciwgNjk6ICRWcywgNzA6ICRWdCwgNzE6ICRWdSwgNzI6ICRWdiwgNzM6ICRWdywgNzQ6ICRWeCB9KSwgeyA1MDogWzEsIDY3XSB9LCBvKCRWeSwgWzIsIDQ2XSwgeyA1MDogWzEsIDY5XSwgNTU6IFsxLCA2OF0gfSksIG8oJFZxLCBbMiwgNTddKSwgbygkVnEsIFsyLCA1OF0pLCB7IDMxOiA3MCwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCB7IDMxOiAzOCwgMzI6IDcxLCAzMzogMzksIDk0OiAkVmssIDk2OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4sIDk5OiAkVm8gfSwgeyAzMTogMzgsIDMyOiA3MiwgMzM6IDM5LCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuLCA5OTogJFZvIH0sIHsgMzE6IDM4LCAzMjogNzMsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCB7IDI4OiBbMSwgNzRdIH0sIHsgMzE6IDM4LCAzMjogNzUsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCB7IDI4OiAkVnosIDY0OiA3NiB9LCBvKCRWcSwgWzIsIDRdKSwgbygkVnEsIFsyLCA1XSksIG8oJFZxLCBbMiwgNl0pLCBvKCRWcSwgWzIsIDddKSwgbygkVkEsIFsyLCAyMl0sIHsgMzE6IDM4LCAzMzogMzksIDMyOiA3OCwgMzQ6IFsxLCA3OV0sIDk0OiAkVmssIDk2OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4sIDk5OiAkVm8gfSksIG8oJFZBLCBbMiwgMjNdLCB7IDM0OiBbMSwgODBdIH0pLCB7IDMwOiA4MSwgMzE6IDgyLCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMzE6IDM4LCAzMjogODMsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCBvKCRWQiwgWzIsIDEwNF0pLCBvKCRWQiwgWzIsIDEwNV0pLCBvKCRWQiwgWzIsIDEwNl0pLCBvKCRWQiwgWzIsIDEwN10pLCBvKFsxLCAxNiwgMjQsIDI3LCAyOCwgMzQsIDM2LCA1MCwgNTIsIDU1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzksIDgxXSwgWzIsIDEwOF0pLCB7IDE6IFsyLCAyXSB9LCB7IDE1OiA4NCwgMTc6IFsxLCA4NV0sIDIyOiAkVkMgfSwgbyhbMTcsIDIyXSwgWzIsIDEyXSksIG8oJFZwLCBbMiwgMTddLCB7IDI1OiA3LCAzNTogMTAsIDM3OiAxMSwgMzg6IDEyLCAzOTogMTMsIDQwOiAxNCwgNDE6IDE1LCA0MjogMTYsIDQzOiAxNywgNzogMTgsIDMyOiAyMiwgNDk6IDIzLCA1NDogMjQsIDMxOiAzOCwgMzM6IDM5LCA2OiA4NywgODogJFYwLCA5OiAkVjEsIDEwOiAkVjIsIDExOiAkVjMsIDQ0OiAkVjYsIDQ2OiAkVjcsIDQ4OiAkVjgsIDUzOiAkVjksIDU3OiAkVmEsIDU4OiAkVmIsIDYwOiAkVmMsIDYxOiAkVmQsIDYzOiAkVmUsIDY1OiAkVmYsIDc1OiAkVmcsIDc2OiAkVmgsIDc4OiAkVmksIDgyOiAkVmosIDk0OiAkVmssIDk2OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4sIDk5OiAkVm8gfSksIHsgNjogODgsIDc6IDE4LCA4OiAkVjAsIDk6ICRWMSwgMTA6ICRWMiwgMTE6ICRWMywgMjU6IDcsIDMxOiAzOCwgMzI6IDIyLCAzMzogMzksIDM1OiAxMCwgMzc6IDExLCAzODogMTIsIDM5OiAxMywgNDA6IDE0LCA0MTogMTUsIDQyOiAxNiwgNDM6IDE3LCA0NDogJFY2LCA0NjogJFY3LCA0ODogJFY4LCA0OTogMjMsIDUzOiAkVjksIDU0OiAyNCwgNTc6ICRWYSwgNTg6ICRWYiwgNjA6ICRWYywgNjE6ICRWZCwgNjM6ICRWZSwgNjU6ICRWZiwgNzU6ICRWZywgNzY6ICRWaCwgNzg6ICRWaSwgODI6ICRWaiwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCBvKCRWcSwgWzIsIDI4XSksIG8oJFZxLCBbMiwgMzddKSwgbygkVnEsIFsyLCAzOF0pLCB7IDI4OiBbMSwgOTBdLCAzMTogMzgsIDMyOiA4OSwgMzM6IDM5LCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuLCA5OTogJFZvIH0sIHsgNjI6IDkxLCA2NjogNTgsIDY3OiA1OSwgNjg6ICRWciwgNjk6ICRWcywgNzA6ICRWdCwgNzE6ICRWdSwgNzI6ICRWdiwgNzM6ICRWdywgNzQ6ICRWeCB9LCBvKCRWcSwgWzIsIDU2XSksIHsgNjc6IDkyLCA3MzogJFZ3LCA3NDogJFZ4IH0sIG8oJFZELCBbMiwgNjhdLCB7IDY2OiA5MywgNjg6ICRWciwgNjk6ICRWcywgNzA6ICRWdCwgNzE6ICRWdSwgNzI6ICRWdiB9KSwgbygkVkUsIFsyLCA2OV0pLCBvKCRWRSwgWzIsIDcwXSksIG8oJFZFLCBbMiwgNzFdKSwgbygkVkUsIFsyLCA3Ml0pLCBvKCRWRSwgWzIsIDczXSksIG8oJFZGLCBbMiwgNzRdKSwgbygkVkYsIFsyLCA3NV0pLCB7IDE2OiBbMSwgOTVdLCAzODogOTYsIDUxOiA5NCwgNTQ6IDI0LCA1NzogJFZhIH0sIHsgMzE6IDk3LCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgNTY6IDk4LCA2MDogJFZHIH0sIHsgNTk6IFsxLCAxMDBdIH0sIHsgMjg6IFsxLCAxMDFdIH0sIHsgMjg6IFsxLCAxMDJdIH0sIHsgNzk6IFsxLCAxMDNdLCA4MTogWzEsIDEwNF0gfSwgeyAzMTogMTA1LCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMjg6ICRWeiwgNjQ6IDEwNiB9LCBvKCRWcSwgWzIsIDY0XSksIG8oJFZxLCBbMiwgMTA5XSksIG8oJFZBLCBbMiwgMjRdKSwgbygkVkEsIFsyLCAyNV0pLCBvKCRWQSwgWzIsIDI2XSksIHsgNTA6IFsyLCA0Ml0gfSwgeyAzMDogMTA3LCAzMTogODIsIDUwOiBbMiwgMjBdLCA5NDogJFZrLCA5NjogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIG8oJFZILCBbMiwgNTBdLCB7IDI2OiAxMDgsIDI3OiBbMSwgMTA5XSB9KSwgeyAxNjogWzEsIDExMF0gfSwgeyAxODogMTExLCAyMTogWzEsIDExMl0gfSwgeyAxNjogWzIsIDE0XSB9LCBvKCRWcCwgWzIsIDE4XSksIHsgMjQ6IFsxLCAxMTNdIH0sIG8oJFZJLCBbMiwgNTldKSwgeyAzMTogMzgsIDMyOiAxMTQsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCB7IDI4OiBbMSwgMTE2XSwgMzE6IDM4LCAzMjogMTE1LCAzMzogMzksIDk0OiAkVmssIDk2OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4sIDk5OiAkVm8gfSwgbygkVkQsIFsyLCA2N10sIHsgNjY6IDExNywgNjg6ICRWciwgNjk6ICRWcywgNzA6ICRWdCwgNzE6ICRWdSwgNzI6ICRWdiB9KSwgbygkVkQsIFsyLCA2Nl0pLCB7IDUyOiBbMSwgMTE4XSB9LCB7IDM4OiA5NiwgNTE6IDExOSwgNTQ6IDI0LCA1NzogJFZhIH0sIHsgMTY6IFsxLCAxMjBdLCA1MjogWzIsIDQzXSB9LCBvKCRWeSwgWzIsIDQ3XSwgeyA1MDogWzEsIDEyMV0gfSksIHsgNTI6IFsxLCAxMjJdIH0sIHsgNTI6IFsyLCA1M10sIDU2OiAxMjMsIDYwOiAkVkcgfSwgeyAzMTogMzgsIDMyOiAxMjQsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCBvKCRWcSwgWzIsIDc2XSwgeyAyODogWzEsIDEyNV0gfSksIG8oJFZxLCBbMiwgNzhdLCB7IDI4OiBbMSwgMTI3XSwgNzc6IFsxLCAxMjZdIH0pLCBvKCRWcSwgWzIsIDgyXSwgeyAyODogWzEsIDEyOF0sIDgwOiBbMSwgMTI5XSB9KSwgbygkVnEsIFsyLCA4Nl0sIHsgMjg6IFsxLCAxMzFdLCA3NzogWzEsIDEzMF0gfSksIG8oJFZxLCBbMiwgOTBdKSwgbygkVnEsIFsyLCA2M10pLCB7IDUwOiBbMiwgMjFdIH0sIG8oJFZILCBbMiwgNTFdKSwgeyAyODogWzEsIDEzMl0gfSwgbygkVkosIFsyLCA5XSksIHsgMTU6IDEzMywgMjI6ICRWQyB9LCB7IDIyOiBbMiwgMTNdIH0sIHsgMTogWzIsIDE1XSB9LCBvKCRWSSwgWzIsIDYxXSksIG8oJFZJLCBbMiwgNjBdKSwgeyAzMTogMzgsIDMyOiAxMzQsIDMzOiAzOSwgOTQ6ICRWaywgOTY6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiwgOTk6ICRWbyB9LCBvKCRWRCwgWzIsIDY1XSksIG8oJFZxLCBbMiwgNDBdKSwgeyA1MjogWzEsIDEzNV0gfSwgeyAzODogOTYsIDUxOiAxMzYsIDUyOiBbMiwgNDRdLCA1NDogMjQsIDU3OiAkVmEgfSwgeyA1NjogMTM3LCA2MDogJFZHIH0sIG8oJFZ5LCBbMiwgNDhdKSwgeyA1MjogWzIsIDU0XSB9LCBvKCRWcSwgWzIsIDUyXSksIG8oJFZxLCBbMiwgNzddKSwgbygkVnEsIFsyLCA3OV0pLCBvKCRWcSwgWzIsIDgwXSwgeyA3NzogWzEsIDEzOF0gfSksIG8oJFZxLCBbMiwgODNdKSwgbygkVnEsIFsyLCA4NF0sIHsgMjg6IFsxLCAxMzldIH0pLCBvKCRWcSwgWzIsIDg3XSksIG8oJFZxLCBbMiwgODhdLCB7IDc3OiBbMSwgMTQwXSB9KSwgeyAyOTogWzEsIDE0MV0gfSwgeyAxNjogWzEsIDE0Ml0gfSwgbygkVkksIFsyLCA2Ml0pLCBvKCRWcSwgWzIsIDQxXSksIHsgNTI6IFsyLCA0NV0gfSwgeyA1MjogWzEsIDE0M10gfSwgbygkVnEsIFsyLCA4MV0pLCBvKCRWcSwgWzIsIDg1XSksIG8oJFZxLCBbMiwgODldKSwgbygkVkgsIFsyLCAxOV0pLCBvKCRWSiwgWzIsIDEwXSksIG8oJFZ5LCBbMiwgNDldKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMjogWzIsIDFdLCA0OiBbMiwgM10sIDU6IFsyLCA4XSwgOTogWzIsIDExXSwgNDc6IFsyLCAyXSwgODE6IFsyLCA0Ml0sIDg2OiBbMiwgMTRdLCAxMDc6IFsyLCAyMV0sIDExMjogWzIsIDEzXSwgMTEzOiBbMiwgMTVdLCAxMjM6IFsyLCA1NF0sIDEzNjogWzIsIDQ1XSB9LFxuICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgdmFyIHN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBsZXhlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiBmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwib3Blbl9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDk7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAxMTtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTc7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiBcIkVER0VfU1RBVEVcIjtcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm5hbWVzcGFjZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm5hbWVzcGFjZS1ib2R5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDUwO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiBcIkVPRl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIFwiRURHRV9TVEFURVwiO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xhc3NcIik7XG4gICAgICAgICAgICByZXR1cm4gNTc7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsYXNzLWJvZHlcIik7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgcmV0dXJuIFwiRU9GX0lOX1NUUlVDVFwiO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gXCJFREdFX1NUQVRFXCI7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiBcIk9QRU5fSU5fU1RSVUNUXCI7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gXCJNRU1CRVJcIjtcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDgyO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gNzU7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiA3NjtcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDc4O1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNjM7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDU4O1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gNTk7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJocmVmXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICByZXR1cm4gODE7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja19uYW1lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tfYXJnc1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgICByZXR1cm4gNzk7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICByZXR1cm4gXCJHRU5FUklDVFlQRVwiO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiZ2VuZXJpY1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHJldHVybiBcIkJRVU9URV9TVFJcIjtcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImJxc3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICAgIHJldHVybiA3NztcbiAgICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgICAgcmV0dXJuIDc3O1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICByZXR1cm4gNzc7XG4gICAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICAgIHJldHVybiA3NztcbiAgICAgICAgICBjYXNlIDczOlxuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICAgIHJldHVybiA3MTtcbiAgICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICByZXR1cm4gNzA7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgICAgcmV0dXJuIDcyO1xuICAgICAgICAgIGNhc2UgODA6XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgICAgIHJldHVybiA3NDtcbiAgICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHJldHVybiA5NDtcbiAgICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgICAgcmV0dXJuIFwiRE9UXCI7XG4gICAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICAgIHJldHVybiBcIlBMVVNcIjtcbiAgICAgICAgICBjYXNlIDg3OlxuICAgICAgICAgICAgcmV0dXJuIDkxO1xuICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICByZXR1cm4gXCJFUVVBTFNcIjtcbiAgICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgICAgcmV0dXJuIFwiRVFVQUxTXCI7XG4gICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgIHJldHVybiA5ODtcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgIHJldHVybiBcIlBVTkNUVUFUSU9OXCI7XG4gICAgICAgICAgY2FzZSA5NDpcbiAgICAgICAgICAgIHJldHVybiA5NztcbiAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgcmV0dXJuIDk2O1xuICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICByZXR1cm4gOTM7XG4gICAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiBbL14oPzolJVxceykvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OigoPzooPyFcXH0lJSlbXjouXSkqKSkvLCAvXig/OjopLywgL14oPzpcXH0lJSkvLCAvXig/OigoPzooPyFcXH0lJSkufFxcbikqKSkvLCAvXig/OiUlKD8hXFx7KSpbXlxcbl0qKFxccj9cXG4/KSspLywgL14oPzolJVteXFxuXSooXFxyP1xcbikqKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86Y2xhc3NEaWFncmFtLXYyXFxiKS8sIC9eKD86Y2xhc3NEaWFncmFtXFxiKS8sIC9eKD86XFxbXFwqXFxdKS8sIC9eKD86bmFtZXNwYWNlXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxccyooXFxyP1xcbikrKS8sIC9eKD86XFxzKykvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/OmNsYXNzXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W31dKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/Olt7XSkvLCAvXig/OltcXG5dKS8sIC9eKD86W157fVxcbl0qKS8sIC9eKD86Y3NzQ2xhc3NcXGIpLywgL14oPzpjYWxsYmFja1xcYikvLCAvXig/OmxpbmtcXGIpLywgL14oPzpjbGlja1xcYikvLCAvXig/Om5vdGUgZm9yXFxiKS8sIC9eKD86bm90ZVxcYikvLCAvXig/Ojw8KS8sIC9eKD86Pj4pLywgL14oPzpocmVmW1xcc10rW1wiXSkvLCAvXig/OltcIl0pLywgL14oPzpbXlwiXSopLywgL14oPzpjYWxsW1xcc10rKS8sIC9eKD86XFwoW1xcc10qXFwpKS8sIC9eKD86XFwoKS8sIC9eKD86W14oXSopLywgL14oPzpcXCkpLywgL14oPzpbXildKikvLCAvXig/Olt+XSkvLCAvXig/Oltefl0qKS8sIC9eKD86W35dKS8sIC9eKD86W1wiXSkvLCAvXig/OlteXCJdKikvLCAvXig/OltcIl0pLywgL14oPzpbYF0pLywgL14oPzpbXmBdKykvLCAvXig/OltgXSkvLCAvXig/Ol9zZWxmXFxiKS8sIC9eKD86X2JsYW5rXFxiKS8sIC9eKD86X3BhcmVudFxcYikvLCAvXig/Ol90b3BcXGIpLywgL14oPzpcXHMqPFxcfCkvLCAvXig/OlxccypcXHw+KS8sIC9eKD86XFxzKj4pLywgL14oPzpcXHMqPCkvLCAvXig/OlxccypcXCopLywgL14oPzpcXHMqb1xcYikvLCAvXig/OlxccypcXChcXCkpLywgL14oPzotLSkvLCAvXig/OlxcLlxcLikvLCAvXig/Ojp7MX1bXjpcXG47XSspLywgL14oPzo6ezN9KS8sIC9eKD86LSkvLCAvXig/OlxcLikvLCAvXig/OlxcKykvLCAvXig/OiUpLywgL14oPzo9KS8sIC9eKD86PSkvLCAvXig/OlxcdyspLywgL14oPzpcXFspLywgL14oPzpcXF0pLywgL14oPzpbIVwiIyQlJicqKywtLmA/XFxcXC9dKS8sIC9eKD86WzAtOV0rKS8sIC9eKD86W1xcdTAwQUFcXHUwMEI1XFx1MDBCQVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNl18W1xcdTAwRjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzddfFtcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNV18W1xcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFdfFtcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVdfFtcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXXxbXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMF18W1xcdTA4QTItXFx1MDhBQ1xcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTc3XXxbXFx1MDk3OS1cXHUwOTdGXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXXxbXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXXxbXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzldfFtcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XXxbXFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXXxbXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXXxbXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OV18W1xcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBdfFtcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzNcXHUwQzM1LVxcdTBDMzlcXHUwQzNEXXxbXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM118W1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMF18W1xcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFdfFtcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXXxbXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXXxbXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZdfFtcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXXxbXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MV18W1xcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RF18W1xcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBdfFtcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXXxbXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXXxbXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXXxbXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN118W1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFDXXxbXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XXxbXFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXXxbXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXXxbXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURdfFtcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RdfFtcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXXxbXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZdfFtcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhdfFtcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRdfFtcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM118W1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNl18W1xcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRV18W1xcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXXxbXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXXxbXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXXxbXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJdfFtcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OTdcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhdfFtcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3OTNcXHVBN0EwLVxcdUE3QUFcXHVBN0Y4LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVdfFtcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXXxbXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUFBMDAtXFx1QUEyOF18W1xcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTgwLVxcdUFBQUZcXHVBQUIxXFx1QUFCNV18W1xcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNF18W1xcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRV18W1xcdUFCQzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RF18W1xcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZdfFtcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRF18W1xcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ118W1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRl18W1xcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10pLywgL14oPzpcXHMpLywgL14oPzokKS9dLFxuICAgICAgY29uZGl0aW9uczogeyBcIm5hbWVzcGFjZS1ib2R5XCI6IHsgXCJydWxlc1wiOiBbMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTQsIDYyLCA2NSwgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5N10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibmFtZXNwYWNlXCI6IHsgXCJydWxlc1wiOiBbMjMsIDI0LCAyNSwgMjYsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsYXNzLWJvZHlcIjogeyBcInJ1bGVzXCI6IFszNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjIsIDY1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjbGFzc1wiOiB7IFwicnVsZXNcIjogWzMzLCAzNCwgMzUsIDM2LCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjIsIDY1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTYsIDE3LCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjIsIDY1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFsxNCwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTQsIDYyLCA2NSwgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5N10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMTIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFyZ19kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFs3LCA4LCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjIsIDY1LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzYsIDcsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm9wZW5fZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbNSwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTQsIDYyLCA2NSwgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5N10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2FsbGJhY2tfYXJnc1wiOiB7IFwicnVsZXNcIjogWzQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA1OCwgNTksIDYyLCA2NSwgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5N10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2FsbGJhY2tfbmFtZVwiOiB7IFwicnVsZXNcIjogWzQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDU3LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImhyZWZcIjogeyBcInJ1bGVzXCI6IFs0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cnVjdFwiOiB7IFwicnVsZXNcIjogWzQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImdlbmVyaWNcIjogeyBcInJ1bGVzXCI6IFs0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjAsIDYxLCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImJxc3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTQsIDYyLCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFs0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1NCwgNjIsIDYzLCA2NCwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMzIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDU0LCA2MiwgNjUsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTddLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xuY29uc3QgTUVSTUFJRF9ET01fSURfUFJFRklYID0gXCJjbGFzc0lkLVwiO1xubGV0IHJlbGF0aW9ucyA9IFtdO1xubGV0IGNsYXNzZXMgPSB7fTtcbmxldCBub3RlcyA9IFtdO1xubGV0IGNsYXNzQ291bnRlciA9IDA7XG5sZXQgbmFtZXNwYWNlcyA9IHt9O1xubGV0IG5hbWVzcGFjZUNvdW50ZXIgPSAwO1xubGV0IGZ1bmN0aW9ucyA9IFtdO1xuY29uc3Qgc2FuaXRpemVUZXh0ID0gKHR4dCkgPT4gY29tbW9uLnNhbml0aXplVGV4dCh0eHQsIGdldENvbmZpZygpKTtcbmNvbnN0IHBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKSB7XG4gIG1lcm1haWRBUEkucGFyc2VEaXJlY3RpdmUodGhpcywgc3RhdGVtZW50LCBjb250ZXh0LCB0eXBlKTtcbn07XG5jb25zdCBzcGxpdENsYXNzTmFtZUFuZFR5cGUgPSBmdW5jdGlvbihpZCkge1xuICBsZXQgZ2VuZXJpY1R5cGUgPSBcIlwiO1xuICBsZXQgY2xhc3NOYW1lID0gaWQ7XG4gIGlmIChpZC5pbmRleE9mKFwiflwiKSA+IDApIHtcbiAgICBjb25zdCBzcGxpdCA9IGlkLnNwbGl0KFwiflwiKTtcbiAgICBjbGFzc05hbWUgPSBzYW5pdGl6ZVRleHQoc3BsaXRbMF0pO1xuICAgIGdlbmVyaWNUeXBlID0gc2FuaXRpemVUZXh0KHNwbGl0WzFdKTtcbiAgfVxuICByZXR1cm4geyBjbGFzc05hbWUsIHR5cGU6IGdlbmVyaWNUeXBlIH07XG59O1xuY29uc3Qgc2V0Q2xhc3NMYWJlbCA9IGZ1bmN0aW9uKGlkLCBsYWJlbCkge1xuICBpZiAobGFiZWwpIHtcbiAgICBsYWJlbCA9IHNhbml0aXplVGV4dChsYWJlbCk7XG4gIH1cbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShpZCk7XG4gIGNsYXNzZXNbY2xhc3NOYW1lXS5sYWJlbCA9IGxhYmVsO1xufTtcbmNvbnN0IGFkZENsYXNzID0gZnVuY3Rpb24oaWQpIHtcbiAgY29uc3QgY2xhc3NJZCA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShpZCk7XG4gIGlmIChjbGFzc2VzW2NsYXNzSWQuY2xhc3NOYW1lXSAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsYXNzZXNbY2xhc3NJZC5jbGFzc05hbWVdID0ge1xuICAgIGlkOiBjbGFzc0lkLmNsYXNzTmFtZSxcbiAgICB0eXBlOiBjbGFzc0lkLnR5cGUsXG4gICAgbGFiZWw6IGNsYXNzSWQuY2xhc3NOYW1lLFxuICAgIGNzc0NsYXNzZXM6IFtdLFxuICAgIG1ldGhvZHM6IFtdLFxuICAgIG1lbWJlcnM6IFtdLFxuICAgIGFubm90YXRpb25zOiBbXSxcbiAgICBkb21JZDogTUVSTUFJRF9ET01fSURfUFJFRklYICsgY2xhc3NJZC5jbGFzc05hbWUgKyBcIi1cIiArIGNsYXNzQ291bnRlclxuICB9O1xuICBjbGFzc0NvdW50ZXIrKztcbn07XG5jb25zdCBsb29rVXBEb21JZCA9IGZ1bmN0aW9uKGlkKSB7XG4gIGlmIChpZCBpbiBjbGFzc2VzKSB7XG4gICAgcmV0dXJuIGNsYXNzZXNbaWRdLmRvbUlkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNsYXNzIG5vdCBmb3VuZDogXCIgKyBpZCk7XG59O1xuY29uc3QgY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgcmVsYXRpb25zID0gW107XG4gIGNsYXNzZXMgPSB7fTtcbiAgbm90ZXMgPSBbXTtcbiAgZnVuY3Rpb25zID0gW107XG4gIGZ1bmN0aW9ucy5wdXNoKHNldHVwVG9vbFRpcHMpO1xuICBuYW1lc3BhY2VzID0ge307XG4gIG5hbWVzcGFjZUNvdW50ZXIgPSAwO1xuICBjbGVhciQxKCk7XG59O1xuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihpZCkge1xuICByZXR1cm4gY2xhc3Nlc1tpZF07XG59O1xuY29uc3QgZ2V0Q2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBnZXRSZWxhdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJlbGF0aW9ucztcbn07XG5jb25zdCBnZXROb3RlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbm90ZXM7XG59O1xuY29uc3QgYWRkUmVsYXRpb24gPSBmdW5jdGlvbihyZWxhdGlvbikge1xuICBsb2cuZGVidWcoXCJBZGRpbmcgcmVsYXRpb246IFwiICsgSlNPTi5zdHJpbmdpZnkocmVsYXRpb24pKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQxKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQyKTtcbiAgcmVsYXRpb24uaWQxID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKHJlbGF0aW9uLmlkMSkuY2xhc3NOYW1lO1xuICByZWxhdGlvbi5pZDIgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUocmVsYXRpb24uaWQyKS5jbGFzc05hbWU7XG4gIHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxID0gY29tbW9uLnNhbml0aXplVGV4dChcbiAgICByZWxhdGlvbi5yZWxhdGlvblRpdGxlMS50cmltKCksXG4gICAgZ2V0Q29uZmlnKClcbiAgKTtcbiAgcmVsYXRpb24ucmVsYXRpb25UaXRsZTIgPSBjb21tb24uc2FuaXRpemVUZXh0KFxuICAgIHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxcbiAgICBnZXRDb25maWcoKVxuICApO1xuICByZWxhdGlvbnMucHVzaChyZWxhdGlvbik7XG59O1xuY29uc3QgYWRkQW5ub3RhdGlvbiA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgYW5ub3RhdGlvbikge1xuICBjb25zdCB2YWxpZGF0ZWRDbGFzc05hbWUgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUoY2xhc3NOYW1lKS5jbGFzc05hbWU7XG4gIGNsYXNzZXNbdmFsaWRhdGVkQ2xhc3NOYW1lXS5hbm5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xufTtcbmNvbnN0IGFkZE1lbWJlciA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgbWVtYmVyKSB7XG4gIGNvbnN0IHZhbGlkYXRlZENsYXNzTmFtZSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShjbGFzc05hbWUpLmNsYXNzTmFtZTtcbiAgY29uc3QgdGhlQ2xhc3MgPSBjbGFzc2VzW3ZhbGlkYXRlZENsYXNzTmFtZV07XG4gIGlmICh0eXBlb2YgbWVtYmVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgbWVtYmVyU3RyaW5nID0gbWVtYmVyLnRyaW0oKTtcbiAgICBpZiAobWVtYmVyU3RyaW5nLnN0YXJ0c1dpdGgoXCI8PFwiKSAmJiBtZW1iZXJTdHJpbmcuZW5kc1dpdGgoXCI+PlwiKSkge1xuICAgICAgdGhlQ2xhc3MuYW5ub3RhdGlvbnMucHVzaChzYW5pdGl6ZVRleHQobWVtYmVyU3RyaW5nLnN1YnN0cmluZygyLCBtZW1iZXJTdHJpbmcubGVuZ3RoIC0gMikpKTtcbiAgICB9IGVsc2UgaWYgKG1lbWJlclN0cmluZy5pbmRleE9mKFwiKVwiKSA+IDApIHtcbiAgICAgIHRoZUNsYXNzLm1ldGhvZHMucHVzaChzYW5pdGl6ZVRleHQobWVtYmVyU3RyaW5nKSk7XG4gICAgfSBlbHNlIGlmIChtZW1iZXJTdHJpbmcpIHtcbiAgICAgIHRoZUNsYXNzLm1lbWJlcnMucHVzaChzYW5pdGl6ZVRleHQobWVtYmVyU3RyaW5nKSk7XG4gICAgfVxuICB9XG59O1xuY29uc3QgYWRkTWVtYmVycyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgbWVtYmVycykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtZW1iZXJzKSkge1xuICAgIG1lbWJlcnMucmV2ZXJzZSgpO1xuICAgIG1lbWJlcnMuZm9yRWFjaCgobWVtYmVyKSA9PiBhZGRNZW1iZXIoY2xhc3NOYW1lLCBtZW1iZXIpKTtcbiAgfVxufTtcbmNvbnN0IGFkZE5vdGUgPSBmdW5jdGlvbih0ZXh0LCBjbGFzc05hbWUpIHtcbiAgY29uc3Qgbm90ZSA9IHtcbiAgICBpZDogYG5vdGUke25vdGVzLmxlbmd0aH1gLFxuICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgdGV4dFxuICB9O1xuICBub3Rlcy5wdXNoKG5vdGUpO1xufTtcbmNvbnN0IGNsZWFudXBMYWJlbCA9IGZ1bmN0aW9uKGxhYmVsKSB7XG4gIGlmIChsYWJlbC5zdGFydHNXaXRoKFwiOlwiKSkge1xuICAgIGxhYmVsID0gbGFiZWwuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiBzYW5pdGl6ZVRleHQobGFiZWwudHJpbSgpKTtcbn07XG5jb25zdCBzZXRDc3NDbGFzcyA9IGZ1bmN0aW9uKGlkcywgY2xhc3NOYW1lKSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihfaWQpIHtcbiAgICBsZXQgaWQgPSBfaWQ7XG4gICAgaWYgKF9pZFswXS5tYXRjaCgvXFxkLykpIHtcbiAgICAgIGlkID0gTUVSTUFJRF9ET01fSURfUFJFRklYICsgaWQ7XG4gICAgfVxuICAgIGlmIChjbGFzc2VzW2lkXSAhPT0gdm9pZCAwKSB7XG4gICAgICBjbGFzc2VzW2lkXS5jc3NDbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHNldFRvb2x0aXAgPSBmdW5jdGlvbihpZHMsIHRvb2x0aXApIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgaWYgKHRvb2x0aXAgIT09IHZvaWQgMCkge1xuICAgICAgY2xhc3Nlc1tpZF0udG9vbHRpcCA9IHNhbml0aXplVGV4dCh0b29sdGlwKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGdldFRvb2x0aXAgPSBmdW5jdGlvbihpZCwgbmFtZXNwYWNlKSB7XG4gIGlmIChuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlc1tuYW1lc3BhY2VdLmNsYXNzZXNbaWRdLnRvb2x0aXA7XG4gIH1cbiAgcmV0dXJuIGNsYXNzZXNbaWRdLnRvb2x0aXA7XG59O1xuY29uc3Qgc2V0TGluayA9IGZ1bmN0aW9uKGlkcywgbGlua1N0ciwgdGFyZ2V0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmIChfaWRbMF0ubWF0Y2goL1xcZC8pKSB7XG4gICAgICBpZCA9IE1FUk1BSURfRE9NX0lEX1BSRUZJWCArIGlkO1xuICAgIH1cbiAgICBpZiAoY2xhc3Nlc1tpZF0gIT09IHZvaWQgMCkge1xuICAgICAgY2xhc3Nlc1tpZF0ubGluayA9IHV0aWxzLmZvcm1hdFVybChsaW5rU3RyLCBjb25maWcpO1xuICAgICAgaWYgKGNvbmZpZy5zZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgICAgICBjbGFzc2VzW2lkXS5saW5rVGFyZ2V0ID0gXCJfdG9wXCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY2xhc3Nlc1tpZF0ubGlua1RhcmdldCA9IHNhbml0aXplVGV4dCh0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3Nlc1tpZF0ubGlua1RhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn07XG5jb25zdCBzZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bmMoaWQsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25BcmdzKTtcbiAgICBjbGFzc2VzW2lkXS5oYXZlQ2FsbGJhY2sgPSB0cnVlO1xuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn07XG5jb25zdCBzZXRDbGlja0Z1bmMgPSBmdW5jdGlvbihkb21JZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGlmIChjb25maWcuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbk5hbWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpZCA9IGRvbUlkO1xuICBpZiAoY2xhc3Nlc1tpZF0gIT09IHZvaWQgMCkge1xuICAgIGNvbnN0IGVsZW1JZCA9IGxvb2tVcERvbUlkKGlkKTtcbiAgICBsZXQgYXJnTGlzdCA9IFtdO1xuICAgIGlmICh0eXBlb2YgZnVuY3Rpb25BcmdzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhcmdMaXN0ID0gZnVuY3Rpb25BcmdzLnNwbGl0KC8sKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtID0gYXJnTGlzdFtpXS50cmltKCk7XG4gICAgICAgIGlmIChpdGVtLmNoYXJBdCgwKSA9PT0gJ1wiJyAmJiBpdGVtLmNoYXJBdChpdGVtLmxlbmd0aCAtIDEpID09PSAnXCInKSB7XG4gICAgICAgICAgaXRlbSA9IGl0ZW0uc3Vic3RyKDEsIGl0ZW0ubGVuZ3RoIC0gMik7XG4gICAgICAgIH1cbiAgICAgICAgYXJnTGlzdFtpXSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmdMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJnTGlzdC5wdXNoKGVsZW1JZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7ZWxlbUlkfVwiXWApO1xuICAgICAgaWYgKGVsZW0gIT09IG51bGwpIHtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIFwiY2xpY2tcIixcbiAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHV0aWxzLnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5jb25zdCBiaW5kRnVuY3Rpb25zID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBmdW5jdGlvbnMuZm9yRWFjaChmdW5jdGlvbihmdW4pIHtcbiAgICBmdW4oZWxlbWVudCk7XG4gIH0pO1xufTtcbmNvbnN0IGxpbmVUeXBlID0ge1xuICBMSU5FOiAwLFxuICBET1RURURfTElORTogMVxufTtcbmNvbnN0IHJlbGF0aW9uVHlwZSA9IHtcbiAgQUdHUkVHQVRJT046IDAsXG4gIEVYVEVOU0lPTjogMSxcbiAgQ09NUE9TSVRJT046IDIsXG4gIERFUEVOREVOQ1k6IDMsXG4gIExPTExJUE9QOiA0XG59O1xuY29uc3Qgc2V0dXBUb29sVGlwcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgbGV0IHRvb2x0aXBFbGVtID0gc2VsZWN0KFwiLm1lcm1haWRUb29sdGlwXCIpO1xuICBpZiAoKHRvb2x0aXBFbGVtLl9ncm91cHMgfHwgdG9vbHRpcEVsZW0pWzBdWzBdID09PSBudWxsKSB7XG4gICAgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtZXJtYWlkVG9vbHRpcFwiKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XG4gIH1cbiAgY29uc3Qgc3ZnID0gc2VsZWN0KGVsZW1lbnQpLnNlbGVjdChcInN2Z1wiKTtcbiAgY29uc3Qgbm9kZXMgPSBzdmcuc2VsZWN0QWxsKFwiZy5ub2RlXCIpO1xuICBub2Rlcy5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBjb25zdCB0aXRsZSA9IGVsLmF0dHIoXCJ0aXRsZVwiKTtcbiAgICBpZiAodGl0bGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdG9vbHRpcEVsZW0udHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoXCJvcGFjaXR5XCIsIFwiLjlcIik7XG4gICAgdG9vbHRpcEVsZW0udGV4dChlbC5hdHRyKFwidGl0bGVcIikpLnN0eWxlKFwibGVmdFwiLCB3aW5kb3cuc2Nyb2xsWCArIHJlY3QubGVmdCArIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDIgKyBcInB4XCIpLnN0eWxlKFwidG9wXCIsIHdpbmRvdy5zY3JvbGxZICsgcmVjdC50b3AgLSAxNCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgXCJweFwiKTtcbiAgICB0b29sdGlwRWxlbS5odG1sKHRvb2x0aXBFbGVtLmh0bWwoKS5yZXBsYWNlKC8mbHQ7YnJcXC8mZ3Q7L2csIFwiPGJyLz5cIikpO1xuICAgIGVsLmNsYXNzZWQoXCJob3ZlclwiLCB0cnVlKTtcbiAgfSkub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbigpIHtcbiAgICB0b29sdGlwRWxlbS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XG4gICAgY29uc3QgZWwgPSBzZWxlY3QodGhpcyk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIGZhbHNlKTtcbiAgfSk7XG59O1xuZnVuY3Rpb25zLnB1c2goc2V0dXBUb29sVGlwcyk7XG5sZXQgZGlyZWN0aW9uID0gXCJUQlwiO1xuY29uc3QgZ2V0RGlyZWN0aW9uID0gKCkgPT4gZGlyZWN0aW9uO1xuY29uc3Qgc2V0RGlyZWN0aW9uID0gKGRpcikgPT4ge1xuICBkaXJlY3Rpb24gPSBkaXI7XG59O1xuY29uc3QgYWRkTmFtZXNwYWNlID0gZnVuY3Rpb24oaWQpIHtcbiAgaWYgKG5hbWVzcGFjZXNbaWRdICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmFtZXNwYWNlc1tpZF0gPSB7XG4gICAgaWQsXG4gICAgY2xhc3Nlczoge30sXG4gICAgY2hpbGRyZW46IHt9LFxuICAgIGRvbUlkOiBNRVJNQUlEX0RPTV9JRF9QUkVGSVggKyBpZCArIFwiLVwiICsgbmFtZXNwYWNlQ291bnRlclxuICB9O1xuICBuYW1lc3BhY2VDb3VudGVyKys7XG59O1xuY29uc3QgZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gbmFtZXNwYWNlc1tuYW1lXTtcbn07XG5jb25zdCBnZXROYW1lc3BhY2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuYW1lc3BhY2VzO1xufTtcbmNvbnN0IGFkZENsYXNzZXNUb05hbWVzcGFjZSA9IGZ1bmN0aW9uKGlkLCBjbGFzc05hbWVzKSB7XG4gIGlmIChuYW1lc3BhY2VzW2lkXSAhPT0gdm9pZCAwKSB7XG4gICAgY2xhc3NOYW1lcy5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgbmFtZXNwYWNlc1tpZF0uY2xhc3Nlc1tjbGFzc05hbWVdID0gY2xhc3Nlc1tjbGFzc05hbWVdO1xuICAgICAgZGVsZXRlIGNsYXNzZXNbY2xhc3NOYW1lXTtcbiAgICAgIGNsYXNzQ291bnRlci0tO1xuICAgIH0pO1xuICB9XG59O1xuY29uc3QgZGIgPSB7XG4gIHBhcnNlRGlyZWN0aXZlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0Q29uZmlnOiAoKSA9PiBnZXRDb25maWcoKS5jbGFzcyxcbiAgYWRkQ2xhc3MsXG4gIGJpbmRGdW5jdGlvbnMsXG4gIGNsZWFyLFxuICBnZXRDbGFzcyxcbiAgZ2V0Q2xhc3NlcyxcbiAgZ2V0Tm90ZXMsXG4gIGFkZEFubm90YXRpb24sXG4gIGFkZE5vdGUsXG4gIGdldFJlbGF0aW9ucyxcbiAgYWRkUmVsYXRpb24sXG4gIGdldERpcmVjdGlvbixcbiAgc2V0RGlyZWN0aW9uLFxuICBhZGRNZW1iZXIsXG4gIGFkZE1lbWJlcnMsXG4gIGNsZWFudXBMYWJlbCxcbiAgbGluZVR5cGUsXG4gIHJlbGF0aW9uVHlwZSxcbiAgc2V0Q2xpY2tFdmVudCxcbiAgc2V0Q3NzQ2xhc3MsXG4gIHNldExpbmssXG4gIGdldFRvb2x0aXAsXG4gIHNldFRvb2x0aXAsXG4gIGxvb2tVcERvbUlkLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0Q2xhc3NMYWJlbCxcbiAgYWRkTmFtZXNwYWNlLFxuICBhZGRDbGFzc2VzVG9OYW1lc3BhY2UsXG4gIGdldE5hbWVzcGFjZSxcbiAgZ2V0TmFtZXNwYWNlc1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgZy5jbGFzc0dyb3VwIHRleHQge1xuICBmaWxsOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIGZpbGw6ICR7b3B0aW9ucy5jbGFzc1RleHR9O1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIGZvbnQtc2l6ZTogMTBweDtcblxuICAudGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxufVxuXG4ubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy5jbGFzc1RleHR9O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbn1cbi5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLmNsYXNzVGV4dH07XG59XG4uZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHtcbiAgYmFja2dyb3VuZDogJHtvcHRpb25zLm1haW5Ca2d9O1xufVxuXG4uY2xhc3NUaXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG4ubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG5cbi5kaXZpZGVyIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuZy5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmcuY2xhc3NHcm91cCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbn1cblxuZy5jbGFzc0dyb3VwIGxpbmUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uY2xhc3NMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uY2xhc3NMYWJlbCAubGFiZWwge1xuICBmaWxsOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLnJlbGF0aW9uIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uZGFzaGVkLWxpbmV7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDM7XG59XG5cbi5kb3R0ZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfSAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfSAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uU3RhcnQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfSAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ30gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNsb2xsaXBvcFN0YXJ0LCAubG9sbGlwb3Age1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ30gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNsb2xsaXBvcEVuZCwgLmxvbGxpcG9wIHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuLmNsYXNzVGl0bGVUZXh0IHtcbiAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbn1cbmA7XG5jb25zdCBzdHlsZXMgPSBnZXRTdHlsZXM7XG5leHBvcnQge1xuICBkYiBhcyBkLFxuICBwYXJzZXIkMSBhcyBwLFxuICBzdHlsZXMgYXMgc1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/styles-aefe6593.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/styles-fa41df25.js": /*!*************************************************************!*\ !*** ../../../node_modules/mermaid/dist/styles-fa41df25.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"D\": () => (/* binding */ DEFAULT_STATE_TYPE),\n/* harmony export */ \"S\": () => (/* binding */ STMT_RELATION),\n/* harmony export */ \"a\": () => (/* binding */ DIVIDER_TYPE),\n/* harmony export */ \"b\": () => (/* binding */ STMT_STATE),\n/* harmony export */ \"c\": () => (/* binding */ DEFAULT_NESTED_DOC_DIR),\n/* harmony export */ \"d\": () => (/* binding */ db),\n/* harmony export */ \"p\": () => (/* binding */ parser$1),\n/* harmony export */ \"s\": () => (/* binding */ styles)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"SPACE\": 4, \"NL\": 5, \"directive\": 6, \"SD\": 7, \"document\": 8, \"line\": 9, \"statement\": 10, \"classDefStatement\": 11, \"cssClassStatement\": 12, \"idStatement\": 13, \"DESCR\": 14, \"-->\": 15, \"HIDE_EMPTY\": 16, \"scale\": 17, \"WIDTH\": 18, \"COMPOSIT_STATE\": 19, \"STRUCT_START\": 20, \"STRUCT_STOP\": 21, \"STATE_DESCR\": 22, \"AS\": 23, \"ID\": 24, \"FORK\": 25, \"JOIN\": 26, \"CHOICE\": 27, \"CONCURRENT\": 28, \"note\": 29, \"notePosition\": 30, \"NOTE_TEXT\": 31, \"direction\": 32, \"acc_title\": 33, \"acc_title_value\": 34, \"acc_descr\": 35, \"acc_descr_value\": 36, \"acc_descr_multiline_value\": 37, \"classDef\": 38, \"CLASSDEF_ID\": 39, \"CLASSDEF_STYLEOPTS\": 40, \"DEFAULT\": 41, \"class\": 42, \"CLASSENTITY_IDS\": 43, \"STYLECLASS\": 44, \"openDirective\": 45, \"typeDirective\": 46, \"closeDirective\": 47, \":\": 48, \"argDirective\": 49, \"direction_tb\": 50, \"direction_bt\": 51, \"direction_rl\": 52, \"direction_lr\": 53, \"eol\": 54, \";\": 55, \"EDGE_STATE\": 56, \"STYLE_SEPARATOR\": 57, \"left_of\": 58, \"right_of\": 59, \"open_directive\": 60, \"type_directive\": 61, \"arg_directive\": 62, \"close_directive\": 63, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACE\", 5: \"NL\", 7: \"SD\", 14: \"DESCR\", 15: \"-->\", 16: \"HIDE_EMPTY\", 17: \"scale\", 18: \"WIDTH\", 19: \"COMPOSIT_STATE\", 20: \"STRUCT_START\", 21: \"STRUCT_STOP\", 22: \"STATE_DESCR\", 23: \"AS\", 24: \"ID\", 25: \"FORK\", 26: \"JOIN\", 27: \"CHOICE\", 28: \"CONCURRENT\", 29: \"note\", 31: \"NOTE_TEXT\", 33: \"acc_title\", 34: \"acc_title_value\", 35: \"acc_descr\", 36: \"acc_descr_value\", 37: \"acc_descr_multiline_value\", 38: \"classDef\", 39: \"CLASSDEF_ID\", 40: \"CLASSDEF_STYLEOPTS\", 41: \"DEFAULT\", 42: \"class\", 43: \"CLASSENTITY_IDS\", 44: \"STYLECLASS\", 48: \":\", 50: \"direction_tb\", 51: \"direction_bt\", 52: \"direction_rl\", 53: \"direction_lr\", 55: \";\", 56: \"EDGE_STATE\", 57: \"STYLE_SEPARATOR\", 58: \"left_of\", 59: \"right_of\", 60: \"open_directive\", 61: \"type_directive\", 62: \"arg_directive\", 63: \"close_directive\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.setRootDoc($$[$0]);\n return $$[$0];\n case 5:\n this.$ = [];\n break;\n case 6:\n if ($$[$0] != \"nl\") {\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n }\n break;\n case 7:\n case 8:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = \"nl\";\n break;\n case 12:\n this.$ = $$[$0];\n break;\n case 13:\n const stateStmt = $$[$0 - 1];\n stateStmt.description = yy.trimColon($$[$0]);\n this.$ = stateStmt;\n break;\n case 14:\n this.$ = { stmt: \"relation\", state1: $$[$0 - 2], state2: $$[$0] };\n break;\n case 15:\n const relDescription = yy.trimColon($$[$0]);\n this.$ = { stmt: \"relation\", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };\n break;\n case 19:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: \"\", doc: $$[$0 - 1] };\n break;\n case 20:\n var id = $$[$0];\n var description = $$[$0 - 2].trim();\n if ($$[$0].match(\":\")) {\n var parts = $$[$0].split(\":\");\n id = parts[0];\n description = [description, parts[1]];\n }\n this.$ = { stmt: \"state\", id, type: \"default\", description };\n break;\n case 21:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: $$[$0 - 5], doc: $$[$0 - 1] };\n break;\n case 22:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"fork\" };\n break;\n case 23:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"join\" };\n break;\n case 24:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"choice\" };\n break;\n case 25:\n this.$ = { stmt: \"state\", id: yy.getDividerId(), type: \"divider\" };\n break;\n case 26:\n this.$ = { stmt: \"state\", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };\n break;\n case 30:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 31:\n case 32:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 33:\n case 34:\n this.$ = { stmt: \"classDef\", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };\n break;\n case 35:\n this.$ = { stmt: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n yy.setDirection(\"TB\");\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 39:\n yy.setDirection(\"BT\");\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 40:\n yy.setDirection(\"RL\");\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 41:\n yy.setDirection(\"LR\");\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n case 44:\n case 45:\n this.$ = { stmt: \"state\", id: $$[$0].trim(), type: \"default\", description: \"\" };\n break;\n case 46:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n case 47:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n case 50:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 51:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 52:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 53:\n yy.parseDirective(\"}%%\", \"close_directive\", \"state\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])],\n defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 41;\n case 1:\n return 50;\n case 2:\n return 51;\n case 3:\n return 52;\n case 4:\n return 53;\n case 5:\n this.begin(\"open_directive\");\n return 60;\n case 6:\n this.begin(\"type_directive\");\n return 61;\n case 7:\n this.popState();\n this.begin(\"arg_directive\");\n return 48;\n case 8:\n this.popState();\n this.popState();\n return 63;\n case 9:\n return 62;\n case 10:\n break;\n case 11:\n break;\n case 12:\n return 5;\n case 13:\n break;\n case 14:\n break;\n case 15:\n break;\n case 16:\n break;\n case 17:\n this.pushState(\"SCALE\");\n return 17;\n case 18:\n return 18;\n case 19:\n this.popState();\n break;\n case 20:\n this.begin(\"acc_title\");\n return 33;\n case 21:\n this.popState();\n return \"acc_title_value\";\n case 22:\n this.begin(\"acc_descr\");\n return 35;\n case 23:\n this.popState();\n return \"acc_descr_value\";\n case 24:\n this.begin(\"acc_descr_multiline\");\n break;\n case 25:\n this.popState();\n break;\n case 26:\n return \"acc_descr_multiline_value\";\n case 27:\n this.pushState(\"CLASSDEF\");\n return 38;\n case 28:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n case 29:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 39;\n case 30:\n this.popState();\n return 40;\n case 31:\n this.pushState(\"CLASS\");\n return 42;\n case 32:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 43;\n case 33:\n this.popState();\n return 44;\n case 34:\n this.pushState(\"SCALE\");\n return 17;\n case 35:\n return 18;\n case 36:\n this.popState();\n break;\n case 37:\n this.pushState(\"STATE\");\n break;\n case 38:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n case 39:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n case 40:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n case 41:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n case 42:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 26;\n case 43:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 27;\n case 44:\n return 50;\n case 45:\n return 51;\n case 46:\n return 52;\n case 47:\n return 53;\n case 48:\n this.pushState(\"STATE_STRING\");\n break;\n case 49:\n this.pushState(\"STATE_ID\");\n return \"AS\";\n case 50:\n this.popState();\n return \"ID\";\n case 51:\n this.popState();\n break;\n case 52:\n return \"STATE_DESCR\";\n case 53:\n return 19;\n case 54:\n this.popState();\n break;\n case 55:\n this.popState();\n this.pushState(\"struct\");\n return 20;\n case 56:\n break;\n case 57:\n this.popState();\n return 21;\n case 58:\n break;\n case 59:\n this.begin(\"NOTE\");\n return 29;\n case 60:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 58;\n case 61:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 59;\n case 62:\n this.popState();\n this.pushState(\"FLOATING_NOTE\");\n break;\n case 63:\n this.popState();\n this.pushState(\"FLOATING_NOTE_ID\");\n return \"AS\";\n case 64:\n break;\n case 65:\n return \"NOTE_TEXT\";\n case 66:\n this.popState();\n return \"ID\";\n case 67:\n this.popState();\n this.pushState(\"NOTE_TEXT\");\n return 24;\n case 68:\n this.popState();\n yy_.yytext = yy_.yytext.substr(2).trim();\n return 31;\n case 69:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 31;\n case 70:\n return 7;\n case 71:\n return 7;\n case 72:\n return 16;\n case 73:\n return 56;\n case 74:\n return 24;\n case 75:\n yy_.yytext = yy_.yytext.trim();\n return 14;\n case 76:\n return 15;\n case 77:\n return 28;\n case 78:\n return 57;\n case 79:\n return 5;\n case 80:\n return \"INVALID\";\n }\n },\n rules: [/^(?:default\\b)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:[\\s]+)/i, /^(?:((?!\\n)\\s)+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:classDef\\s+)/i, /^(?:DEFAULT\\s+)/i, /^(?:\\w+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:class\\s+)/i, /^(?:(\\w+)+((,\\s*\\w+)*))/i, /^(?:[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:state\\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\\[\\[fork\\]\\])/i, /^(?:.*\\[\\[join\\]\\])/i, /^(?:.*\\[\\[choice\\]\\])/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\"])/i, /^(?:\\s*as\\s+)/i, /^(?:[^\\n\\{]*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n\\s\\{]+)/i, /^(?:\\n)/i, /^(?:\\{)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:\\})/i, /^(?:[\\n])/i, /^(?:note\\s+)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:\")/i, /^(?:\\s*as\\s*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n]*)/i, /^(?:\\s*[^:\\n\\s\\-]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:[\\s\\S]*?end note\\b)/i, /^(?:stateDiagram\\s+)/i, /^(?:stateDiagram-v2\\s+)/i, /^(?:hide empty description\\b)/i, /^(?:\\[\\*\\])/i, /^(?:[^:\\n\\s\\-\\{]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"LINE\": { \"rules\": [14, 15], \"inclusive\": false }, \"close_directive\": { \"rules\": [14, 15], \"inclusive\": false }, \"arg_directive\": { \"rules\": [8, 9, 14, 15], \"inclusive\": false }, \"type_directive\": { \"rules\": [7, 8, 14, 15], \"inclusive\": false }, \"open_directive\": { \"rules\": [6, 14, 15], \"inclusive\": false }, \"struct\": { \"rules\": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], \"inclusive\": false }, \"FLOATING_NOTE_ID\": { \"rules\": [66], \"inclusive\": false }, \"FLOATING_NOTE\": { \"rules\": [63, 64, 65], \"inclusive\": false }, \"NOTE_TEXT\": { \"rules\": [68, 69], \"inclusive\": false }, \"NOTE_ID\": { \"rules\": [67], \"inclusive\": false }, \"NOTE\": { \"rules\": [60, 61, 62], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [33], \"inclusive\": false }, \"CLASS\": { \"rules\": [32], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [30], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [28, 29], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [25, 26], \"inclusive\": false }, \"acc_descr\": { \"rules\": [23], \"inclusive\": false }, \"acc_title\": { \"rules\": [21], \"inclusive\": false }, \"SCALE\": { \"rules\": [18, 19, 35, 36], \"inclusive\": false }, \"ALIAS\": { \"rules\": [], \"inclusive\": false }, \"STATE_ID\": { \"rules\": [50], \"inclusive\": false }, \"STATE_STRING\": { \"rules\": [51, 52], \"inclusive\": false }, \"FORK_STATE\": { \"rules\": [], \"inclusive\": false }, \"STATE\": { \"rules\": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], \"inclusive\": false }, \"ID\": { \"rules\": [14, 15], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst DEFAULT_DIAGRAM_DIRECTION = \"LR\";\nconst DEFAULT_NESTED_DOC_DIR = \"TB\";\nconst STMT_STATE = \"state\";\nconst STMT_RELATION = \"relation\";\nconst STMT_CLASSDEF = \"classDef\";\nconst STMT_APPLYCLASS = \"applyClass\";\nconst DEFAULT_STATE_TYPE = \"default\";\nconst DIVIDER_TYPE = \"divider\";\nconst START_NODE = \"[*]\";\nconst START_TYPE = \"start\";\nconst END_NODE = START_NODE;\nconst END_TYPE = \"end\";\nconst COLOR_KEYWORD = \"color\";\nconst FILL_KEYWORD = \"fill\";\nconst BG_FILL = \"bgFill\";\nconst STYLECLASS_SEP = \",\";\nfunction newClassesList() {\n return {};\n}\nlet direction = DEFAULT_DIAGRAM_DIRECTION;\nlet rootDoc = [];\nlet classes = newClassesList();\nconst newDoc = () => {\n return {\n relations: [],\n states: {},\n documents: {}\n };\n};\nlet documents = {\n root: newDoc()\n};\nlet currentDocument = documents.root;\nlet startEndCount = 0;\nlet dividerCnt = 0;\nconst lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n};\nconst relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n};\nconst clone = (o) => JSON.parse(JSON.stringify(o));\nconst parseDirective = function(statement, context, type) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.m.parseDirective(this, statement, context, type);\n};\nconst setRootDoc = (o) => {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Setting root doc\", o);\n rootDoc = o;\n};\nconst getRootDoc = () => rootDoc;\nconst docTranslator = (parent, node, first) => {\n if (node.stmt === STMT_RELATION) {\n docTranslator(parent, node.state1, true);\n docTranslator(parent, node.state2, false);\n } else {\n if (node.stmt === STMT_STATE) {\n if (node.id === \"[*]\") {\n node.id = first ? parent.id + \"_start\" : parent.id + \"_end\";\n node.start = first;\n } else {\n node.id = node.id.trim();\n }\n }\n if (node.doc) {\n const doc = [];\n let currentDoc = [];\n let i;\n for (i = 0; i < node.doc.length; i++) {\n if (node.doc[i].type === DIVIDER_TYPE) {\n const newNode = clone(node.doc[i]);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(node.doc[i]);\n }\n }\n if (doc.length > 0 && currentDoc.length > 0) {\n const newNode = {\n stmt: STMT_STATE,\n id: (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.F)(),\n type: \"divider\",\n doc: clone(currentDoc)\n };\n doc.push(clone(newNode));\n node.doc = doc;\n }\n node.doc.forEach((docNode) => docTranslator(node, docNode, true));\n }\n }\n};\nconst getRootDocV2 = () => {\n docTranslator({ id: \"root\" }, { id: \"root\", doc: rootDoc }, true);\n return { id: \"root\", doc: rootDoc };\n};\nconst extract = (_doc) => {\n let doc;\n if (_doc.doc) {\n doc = _doc.doc;\n } else {\n doc = _doc;\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc);\n clear(true);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Extract\", doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case STMT_STATE:\n addState(\n item.id.trim(),\n item.type,\n item.doc,\n item.description,\n item.note,\n item.classes,\n item.styles,\n item.textStyles\n );\n break;\n case STMT_RELATION:\n addRelation(item.state1, item.state2, item.description);\n break;\n case STMT_CLASSDEF:\n addStyleClass(item.id.trim(), item.classes);\n break;\n case STMT_APPLYCLASS:\n setCssClass(item.id.trim(), item.styleClass);\n break;\n }\n });\n};\nconst addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) {\n const trimmedId = id == null ? void 0 : id.trim();\n if (currentDocument.states[trimmedId] === void 0) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Adding state \", trimmedId, descr);\n currentDocument.states[trimmedId] = {\n id: trimmedId,\n descriptions: [],\n type,\n doc,\n note,\n classes: [],\n styles: [],\n textStyles: []\n };\n } else {\n if (!currentDocument.states[trimmedId].doc) {\n currentDocument.states[trimmedId].doc = doc;\n }\n if (!currentDocument.states[trimmedId].type) {\n currentDocument.states[trimmedId].type = type;\n }\n }\n if (descr) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Setting state description\", trimmedId, descr);\n if (typeof descr === \"string\") {\n addDescription(trimmedId, descr.trim());\n }\n if (typeof descr === \"object\") {\n descr.forEach((des) => addDescription(trimmedId, des.trim()));\n }\n }\n if (note) {\n currentDocument.states[trimmedId].note = note;\n currentDocument.states[trimmedId].note.text = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(\n currentDocument.states[trimmedId].note.text,\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.c)()\n );\n }\n if (classes2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Setting state classes\", trimmedId, classes2);\n const classesList = typeof classes2 === \"string\" ? [classes2] : classes2;\n classesList.forEach((klass) => setCssClass(trimmedId, klass.trim()));\n }\n if (styles2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Setting state styles\", trimmedId, styles2);\n const stylesList = typeof styles2 === \"string\" ? [styles2] : styles2;\n stylesList.forEach((style) => setStyle(trimmedId, style.trim()));\n }\n if (textStyles) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Setting state styles\", trimmedId, styles2);\n const textStylesList = typeof textStyles === \"string\" ? [textStyles] : textStyles;\n textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim()));\n }\n};\nconst clear = function(saveCommon) {\n documents = {\n root: newDoc()\n };\n currentDocument = documents.root;\n startEndCount = 0;\n classes = newClassesList();\n if (!saveCommon) {\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.v)();\n }\n};\nconst getState = function(id) {\n return currentDocument.states[id];\n};\nconst getStates = function() {\n return currentDocument.states;\n};\nconst logDocuments = function() {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.l.info(\"Documents = \", documents);\n};\nconst getRelations = function() {\n return currentDocument.relations;\n};\nfunction startIdIfNeeded(id = \"\") {\n let fixedId = id;\n if (id === START_NODE) {\n startEndCount++;\n fixedId = `${START_TYPE}${startEndCount}`;\n }\n return fixedId;\n}\nfunction startTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === START_NODE ? START_TYPE : type;\n}\nfunction endIdIfNeeded(id = \"\") {\n let fixedId = id;\n if (id === END_NODE) {\n startEndCount++;\n fixedId = `${END_TYPE}${startEndCount}`;\n }\n return fixedId;\n}\nfunction endTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === END_NODE ? END_TYPE : type;\n}\nfunction addRelationObjs(item1, item2, relationTitle) {\n let id1 = startIdIfNeeded(item1.id.trim());\n let type1 = startTypeIfNeeded(item1.id.trim(), item1.type);\n let id2 = startIdIfNeeded(item2.id.trim());\n let type2 = startTypeIfNeeded(item2.id.trim(), item2.type);\n addState(\n id1,\n type1,\n item1.doc,\n item1.description,\n item1.note,\n item1.classes,\n item1.styles,\n item1.textStyles\n );\n addState(\n id2,\n type2,\n item2.doc,\n item2.description,\n item2.note,\n item2.classes,\n item2.styles,\n item2.textStyles\n );\n currentDocument.relations.push({\n id1,\n id2,\n relationTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.c)())\n });\n}\nconst addRelation = function(item1, item2, title) {\n if (typeof item1 === \"object\") {\n addRelationObjs(item1, item2, title);\n } else {\n const id1 = startIdIfNeeded(item1.trim());\n const type1 = startTypeIfNeeded(item1);\n const id2 = endIdIfNeeded(item2.trim());\n const type2 = endTypeIfNeeded(item2);\n addState(id1, type1);\n addState(id2, type2);\n currentDocument.relations.push({\n id1,\n id2,\n title: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.c)())\n });\n }\n};\nconst addDescription = function(id, descr) {\n const theState = currentDocument.states[id];\n const _descr = descr.startsWith(\":\") ? descr.replace(\":\", \"\").trim() : descr;\n theState.descriptions.push(_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.c)()));\n};\nconst cleanupLabel = function(label) {\n if (label.substring(0, 1) === \":\") {\n return label.substr(2).trim();\n } else {\n return label.trim();\n }\n};\nconst getDividerId = () => {\n dividerCnt++;\n return \"divider-id-\" + dividerCnt;\n};\nconst addStyleClass = function(id, styleAttributes = \"\") {\n if (classes[id] === void 0) {\n classes[id] = { id, styles: [], textStyles: [] };\n }\n const foundClass = classes[id];\n if (styleAttributes !== void 0 && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (attrib.match(COLOR_KEYWORD)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n};\nconst getClasses = function() {\n return classes;\n};\nconst setCssClass = function(itemIds, cssClassName) {\n itemIds.split(\",\").forEach(function(id) {\n let foundState = getState(id);\n if (foundState === void 0) {\n const trimmedId = id.trim();\n addState(trimmedId);\n foundState = getState(trimmedId);\n }\n foundState.classes.push(cssClassName);\n });\n};\nconst setStyle = function(itemId, styleText) {\n const item = getState(itemId);\n if (item !== void 0) {\n item.textStyles.push(styleText);\n }\n};\nconst setTextStyle = function(itemId, cssClassName) {\n const item = getState(itemId);\n if (item !== void 0) {\n item.textStyles.push(cssClassName);\n }\n};\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n direction = dir;\n};\nconst trimColon = (str) => str && str[0] === \":\" ? str.substr(1).trim() : str.trim();\nconst db = {\n parseDirective,\n getConfig: () => (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.c)().state,\n addState,\n clear,\n getState,\n getStates,\n getRelations,\n getClasses,\n getDirection,\n addRelation,\n getDividerId,\n setDirection,\n cleanupLabel,\n lineType,\n relationType,\n logDocuments,\n getRootDoc,\n setRootDoc,\n getRootDocV2,\n extract,\n trimColon,\n getAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.g,\n setAccTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.s,\n getAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.a,\n setAccDescription: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.b,\n addStyleClass,\n setCssClass,\n addDescription,\n setDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.r,\n getDiagramTitle: _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_0__.t\n};\nconst getStyles = (options) => `\ndefs #statediagram-barbEnd {\n fill: ${options.transitionColor};\n stroke: ${options.transitionColor};\n }\ng.stateGroup text {\n fill: ${options.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${options.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${options.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${options.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n\n text {\n fill: ${options.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${options.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${options.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${options.innerEndBackground};\n stroke: ${options.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${options.compositeBackground || options.background};\n // stroke: ${options.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${options.stateBkg || options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${options.compositeTitleBackground};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${options.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`;\nconst styles = getStyles;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdHlsZXMtZmE0MWRmMjUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQThQO0FBQzlQO0FBQ0E7QUFDQSxzQkFBc0IsZ0JBQWdCLEtBQUs7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMLFVBQVU7QUFDVixnQkFBZ0IscTRCQUFxNEIsZ01BQWdNO0FBQ3JsQyxrQkFBa0IseW5CQUF5bkIsbUtBQW1LO0FBQzl5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQiw4Q0FBOEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLG9EQUFvRCxJQUFJLFFBQVEsSUFBSSxvREFBb0QsSUFBSSxvREFBb0QsSUFBSSxxREFBcUQsMEdBQTBHLE9BQU8sS0FBSyxxQkFBcUIsSUFBSSxhQUFhLElBQUksV0FBVyxJQUFJLFdBQVcsSUFBSSxXQUFXLElBQUkscVJBQXFSLElBQUksOEJBQThCLDBDQUEwQyxtUEFBbVAsc0ZBQXNGLDBCQUEwQixzQkFBc0IsYUFBYSxvQkFBb0IsYUFBYSxLQUFLLGFBQWEsd0VBQXdFLCtDQUErQyxzQ0FBc0MsYUFBYSxJQUFJLGFBQWEscUJBQXFCLDBCQUEwQixJQUFJLGFBQWEsb0JBQW9CLGFBQWEscUJBQXFCLGFBQWEsMEZBQTBGLHFCQUFxQixzREFBc0QsMEJBQTBCLGlDQUFpQyxPQUFPLEtBQUssYUFBYSxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEsc0NBQXNDLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGFBQWEsSUFBSSxhQUFhLElBQUksaUJBQWlCLElBQUksYUFBYSxvQkFBb0IsYUFBYSxLQUFLLHVSQUF1UixvQkFBb0IsYUFBYSxLQUFLLGFBQWEsSUFBSSxhQUFhLHdKQUF3SixPQUFPLHVDQUF1Qyx1UkFBdVI7QUFDcDFGLHNCQUFzQixxRkFBcUY7QUFDM0c7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUCw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsWUFBWTtBQUNaOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1osVUFBVTs7QUFFVjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsWUFBWTtBQUNaOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWjs7QUFFQTtBQUNBLFVBQVU7QUFDVixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBLFVBQVU7QUFDVixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsY0FBYyxLQUFLO0FBQ25COztBQUVBO0FBQ0EsVUFBVTtBQUNWLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFVRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L3N0eWxlcy1mYTQxZGYyNS5qcz9jNjFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGMgYXMgZ2V0Q29uZmlnLCBnIGFzIGdldEFjY1RpdGxlLCBzIGFzIHNldEFjY1RpdGxlLCBhIGFzIGdldEFjY0Rlc2NyaXB0aW9uLCBiIGFzIHNldEFjY0Rlc2NyaXB0aW9uLCByIGFzIHNldERpYWdyYW1UaXRsZSwgdCBhcyBnZXREaWFncmFtVGl0bGUsIG0gYXMgbWVybWFpZEFQSSwgbCBhcyBsb2csIGUgYXMgY29tbW9uLCB2IGFzIGNsZWFyJDEsIEYgYXMgZ2VuZXJhdGVJZCB9IGZyb20gXCIuL21lcm1haWQtYjBhZDJkZTEuanNcIjtcbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSBmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdilcbiAgICAgIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sICRWMCA9IFsxLCAyXSwgJFYxID0gWzEsIDNdLCAkVjIgPSBbMSwgNV0sICRWMyA9IFsxLCA3XSwgJFY0ID0gWzIsIDVdLCAkVjUgPSBbMSwgMTVdLCAkVjYgPSBbMSwgMTddLCAkVjcgPSBbMSwgMjFdLCAkVjggPSBbMSwgMjJdLCAkVjkgPSBbMSwgMjNdLCAkVmEgPSBbMSwgMjRdLCAkVmIgPSBbMSwgMzddLCAkVmMgPSBbMSwgMjVdLCAkVmQgPSBbMSwgMjZdLCAkVmUgPSBbMSwgMjddLCAkVmYgPSBbMSwgMjhdLCAkVmcgPSBbMSwgMjldLCAkVmggPSBbMSwgMzJdLCAkVmkgPSBbMSwgMzNdLCAkVmogPSBbMSwgMzRdLCAkVmsgPSBbMSwgMzVdLCAkVmwgPSBbMSwgMzZdLCAkVm0gPSBbMSwgMzldLCAkVm4gPSBbMSwgNDBdLCAkVm8gPSBbMSwgNDFdLCAkVnAgPSBbMSwgNDJdLCAkVnEgPSBbMSwgMzhdLCAkVnIgPSBbMSwgNDVdLCAkVnMgPSBbMSwgNCwgNSwgMTYsIDE3LCAxOSwgMjEsIDIyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMywgMzUsIDM3LCAzOCwgNDIsIDUwLCA1MSwgNTIsIDUzLCA1NiwgNjBdLCAkVnQgPSBbMSwgNCwgNSwgMTQsIDE1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNTAsIDUxLCA1MiwgNTMsIDU2LCA2MF0sICRWdSA9IFsxLCA0LCA1LCA3LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNTAsIDUxLCA1MiwgNTMsIDU2LCA2MF0sICRWdiA9IFs0LCA1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNTAsIDUxLCA1MiwgNTMsIDU2LCA2MF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJTUEFDRVwiOiA0LCBcIk5MXCI6IDUsIFwiZGlyZWN0aXZlXCI6IDYsIFwiU0RcIjogNywgXCJkb2N1bWVudFwiOiA4LCBcImxpbmVcIjogOSwgXCJzdGF0ZW1lbnRcIjogMTAsIFwiY2xhc3NEZWZTdGF0ZW1lbnRcIjogMTEsIFwiY3NzQ2xhc3NTdGF0ZW1lbnRcIjogMTIsIFwiaWRTdGF0ZW1lbnRcIjogMTMsIFwiREVTQ1JcIjogMTQsIFwiLS0+XCI6IDE1LCBcIkhJREVfRU1QVFlcIjogMTYsIFwic2NhbGVcIjogMTcsIFwiV0lEVEhcIjogMTgsIFwiQ09NUE9TSVRfU1RBVEVcIjogMTksIFwiU1RSVUNUX1NUQVJUXCI6IDIwLCBcIlNUUlVDVF9TVE9QXCI6IDIxLCBcIlNUQVRFX0RFU0NSXCI6IDIyLCBcIkFTXCI6IDIzLCBcIklEXCI6IDI0LCBcIkZPUktcIjogMjUsIFwiSk9JTlwiOiAyNiwgXCJDSE9JQ0VcIjogMjcsIFwiQ09OQ1VSUkVOVFwiOiAyOCwgXCJub3RlXCI6IDI5LCBcIm5vdGVQb3NpdGlvblwiOiAzMCwgXCJOT1RFX1RFWFRcIjogMzEsIFwiZGlyZWN0aW9uXCI6IDMyLCBcImFjY190aXRsZVwiOiAzMywgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzQsIFwiYWNjX2Rlc2NyXCI6IDM1LCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNiwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM3LCBcImNsYXNzRGVmXCI6IDM4LCBcIkNMQVNTREVGX0lEXCI6IDM5LCBcIkNMQVNTREVGX1NUWUxFT1BUU1wiOiA0MCwgXCJERUZBVUxUXCI6IDQxLCBcImNsYXNzXCI6IDQyLCBcIkNMQVNTRU5USVRZX0lEU1wiOiA0MywgXCJTVFlMRUNMQVNTXCI6IDQ0LCBcIm9wZW5EaXJlY3RpdmVcIjogNDUsIFwidHlwZURpcmVjdGl2ZVwiOiA0NiwgXCJjbG9zZURpcmVjdGl2ZVwiOiA0NywgXCI6XCI6IDQ4LCBcImFyZ0RpcmVjdGl2ZVwiOiA0OSwgXCJkaXJlY3Rpb25fdGJcIjogNTAsIFwiZGlyZWN0aW9uX2J0XCI6IDUxLCBcImRpcmVjdGlvbl9ybFwiOiA1MiwgXCJkaXJlY3Rpb25fbHJcIjogNTMsIFwiZW9sXCI6IDU0LCBcIjtcIjogNTUsIFwiRURHRV9TVEFURVwiOiA1NiwgXCJTVFlMRV9TRVBBUkFUT1JcIjogNTcsIFwibGVmdF9vZlwiOiA1OCwgXCJyaWdodF9vZlwiOiA1OSwgXCJvcGVuX2RpcmVjdGl2ZVwiOiA2MCwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiA2MSwgXCJhcmdfZGlyZWN0aXZlXCI6IDYyLCBcImNsb3NlX2RpcmVjdGl2ZVwiOiA2MywgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiU1BBQ0VcIiwgNTogXCJOTFwiLCA3OiBcIlNEXCIsIDE0OiBcIkRFU0NSXCIsIDE1OiBcIi0tPlwiLCAxNjogXCJISURFX0VNUFRZXCIsIDE3OiBcInNjYWxlXCIsIDE4OiBcIldJRFRIXCIsIDE5OiBcIkNPTVBPU0lUX1NUQVRFXCIsIDIwOiBcIlNUUlVDVF9TVEFSVFwiLCAyMTogXCJTVFJVQ1RfU1RPUFwiLCAyMjogXCJTVEFURV9ERVNDUlwiLCAyMzogXCJBU1wiLCAyNDogXCJJRFwiLCAyNTogXCJGT1JLXCIsIDI2OiBcIkpPSU5cIiwgMjc6IFwiQ0hPSUNFXCIsIDI4OiBcIkNPTkNVUlJFTlRcIiwgMjk6IFwibm90ZVwiLCAzMTogXCJOT1RFX1RFWFRcIiwgMzM6IFwiYWNjX3RpdGxlXCIsIDM0OiBcImFjY190aXRsZV92YWx1ZVwiLCAzNTogXCJhY2NfZGVzY3JcIiwgMzY6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDM3OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMzg6IFwiY2xhc3NEZWZcIiwgMzk6IFwiQ0xBU1NERUZfSURcIiwgNDA6IFwiQ0xBU1NERUZfU1RZTEVPUFRTXCIsIDQxOiBcIkRFRkFVTFRcIiwgNDI6IFwiY2xhc3NcIiwgNDM6IFwiQ0xBU1NFTlRJVFlfSURTXCIsIDQ0OiBcIlNUWUxFQ0xBU1NcIiwgNDg6IFwiOlwiLCA1MDogXCJkaXJlY3Rpb25fdGJcIiwgNTE6IFwiZGlyZWN0aW9uX2J0XCIsIDUyOiBcImRpcmVjdGlvbl9ybFwiLCA1MzogXCJkaXJlY3Rpb25fbHJcIiwgNTU6IFwiO1wiLCA1NjogXCJFREdFX1NUQVRFXCIsIDU3OiBcIlNUWUxFX1NFUEFSQVRPUlwiLCA1ODogXCJsZWZ0X29mXCIsIDU5OiBcInJpZ2h0X29mXCIsIDYwOiBcIm9wZW5fZGlyZWN0aXZlXCIsIDYxOiBcInR5cGVfZGlyZWN0aXZlXCIsIDYyOiBcImFyZ19kaXJlY3RpdmVcIiwgNjM6IFwiY2xvc2VfZGlyZWN0aXZlXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgMl0sIFszLCAyXSwgWzMsIDJdLCBbMywgMl0sIFs4LCAwXSwgWzgsIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDNdLCBbMTAsIDRdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTAsIDRdLCBbMTAsIDNdLCBbMTAsIDZdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDRdLCBbMTAsIDRdLCBbMTAsIDFdLCBbMTAsIDFdLCBbMTAsIDJdLCBbMTAsIDJdLCBbMTAsIDFdLCBbMTEsIDNdLCBbMTEsIDNdLCBbMTIsIDNdLCBbNiwgM10sIFs2LCA1XSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzU0LCAxXSwgWzU0LCAxXSwgWzEzLCAxXSwgWzEzLCAxXSwgWzEzLCAzXSwgWzEzLCAzXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzQ1LCAxXSwgWzQ2LCAxXSwgWzQ5LCAxXSwgWzQ3LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgeXkuc2V0Um9vdERvYygkJFskMF0pO1xuICAgICAgICAgIHJldHVybiAkJFskMF07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICgkJFskMF0gIT0gXCJubFwiKSB7XG4gICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB0aGlzLiQgPSBcIm5sXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIGNvbnN0IHN0YXRlU3RtdCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgc3RhdGVTdG10LmRlc2NyaXB0aW9uID0geXkudHJpbUNvbG9uKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gc3RhdGVTdG10O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJyZWxhdGlvblwiLCBzdGF0ZTE6ICQkWyQwIC0gMl0sIHN0YXRlMjogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29uc3QgcmVsRGVzY3JpcHRpb24gPSB5eS50cmltQ29sb24oJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwicmVsYXRpb25cIiwgc3RhdGUxOiAkJFskMCAtIDNdLCBzdGF0ZTI6ICQkWyQwIC0gMV0sIGRlc2NyaXB0aW9uOiByZWxEZXNjcmlwdGlvbiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAzXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiBcIlwiLCBkb2M6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB2YXIgaWQgPSAkJFskMF07XG4gICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJCRbJDAgLSAyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCQkWyQwXS5tYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9ICQkWyQwXS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICBpZCA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBbZGVzY3JpcHRpb24sIHBhcnRzWzFdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb24gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwIC0gM10sIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbjogJCRbJDAgLSA1XSwgZG9jOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMF0sIHR5cGU6IFwiZm9ya1wiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMF0sIHR5cGU6IFwiam9pblwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMF0sIHR5cGU6IFwiY2hvaWNlXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6IHl5LmdldERpdmlkZXJJZCgpLCB0eXBlOiBcImRpdmlkZXJcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIG5vdGU6IHsgcG9zaXRpb246ICQkWyQwIC0gMl0udHJpbSgpLCB0ZXh0OiAkJFskMF0udHJpbSgpIH0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJjbGFzc0RlZlwiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIGNsYXNzZXM6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiYXBwbHlDbGFzc1wiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJCVFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkJUXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJSTFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlJMXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJMUlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXS50cmltKCksIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbjogXCJcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAyXS50cmltKCksIGNsYXNzZXM6IFskJFskMF0udHJpbSgpXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiBcIlwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDJdLnRyaW0oKSwgY2xhc3NlczogWyQkWyQwXS50cmltKCldLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb246IFwiXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZShcIiUle1wiLCBcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJ0eXBlX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMF0gPSAkJFskMF0udHJpbSgpLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoJCRbJDBdLCBcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCJ9JSVcIiwgXCJjbG9zZV9kaXJlY3RpdmVcIiwgXCJzdGF0ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAkVjAsIDU6ICRWMSwgNjogNCwgNzogJFYyLCA0NTogNiwgNjA6ICRWMyB9LCB7IDE6IFszXSB9LCB7IDM6IDgsIDQ6ICRWMCwgNTogJFYxLCA2OiA0LCA3OiAkVjIsIDQ1OiA2LCA2MDogJFYzIH0sIHsgMzogOSwgNDogJFYwLCA1OiAkVjEsIDY6IDQsIDc6ICRWMiwgNDU6IDYsIDYwOiAkVjMgfSwgeyAzOiAxMCwgNDogJFYwLCA1OiAkVjEsIDY6IDQsIDc6ICRWMiwgNDU6IDYsIDYwOiAkVjMgfSwgbyhbMSwgNCwgNSwgMTYsIDE3LCAxOSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNTAsIDUxLCA1MiwgNTMsIDU2LCA2MF0sICRWNCwgeyA4OiAxMSB9KSwgeyA0NjogMTIsIDYxOiBbMSwgMTNdIH0sIHsgNjE6IFsyLCA1MF0gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgM10gfSwgeyAxOiBbMiwgNF0sIDQ6ICRWNSwgNTogJFY2LCA2OiAzMCwgOTogMTQsIDEwOiAxNiwgMTE6IDE4LCAxMjogMTksIDEzOiAyMCwgMTY6ICRWNywgMTc6ICRWOCwgMTk6ICRWOSwgMjI6ICRWYSwgMjQ6ICRWYiwgMjU6ICRWYywgMjY6ICRWZCwgMjc6ICRWZSwgMjg6ICRWZiwgMjk6ICRWZywgMzI6IDMxLCAzMzogJFZoLCAzNTogJFZpLCAzNzogJFZqLCAzODogJFZrLCA0MjogJFZsLCA0NTogNiwgNTA6ICRWbSwgNTE6ICRWbiwgNTI6ICRWbywgNTM6ICRWcCwgNTY6ICRWcSwgNjA6ICRWMyB9LCB7IDQ3OiA0MywgNDg6IFsxLCA0NF0sIDYzOiAkVnIgfSwgbyhbNDgsIDYzXSwgWzIsIDUxXSksIG8oJFZzLCBbMiwgNl0pLCB7IDY6IDMwLCAxMDogNDYsIDExOiAxOCwgMTI6IDE5LCAxMzogMjAsIDE2OiAkVjcsIDE3OiAkVjgsIDE5OiAkVjksIDIyOiAkVmEsIDI0OiAkVmIsIDI1OiAkVmMsIDI2OiAkVmQsIDI3OiAkVmUsIDI4OiAkVmYsIDI5OiAkVmcsIDMyOiAzMSwgMzM6ICRWaCwgMzU6ICRWaSwgMzc6ICRWaiwgMzg6ICRWaywgNDI6ICRWbCwgNDU6IDYsIDUwOiAkVm0sIDUxOiAkVm4sIDUyOiAkVm8sIDUzOiAkVnAsIDU2OiAkVnEsIDYwOiAkVjMgfSwgbygkVnMsIFsyLCA4XSksIG8oJFZzLCBbMiwgOV0pLCBvKCRWcywgWzIsIDEwXSksIG8oJFZzLCBbMiwgMTFdKSwgbygkVnMsIFsyLCAxMl0sIHsgMTQ6IFsxLCA0N10sIDE1OiBbMSwgNDhdIH0pLCBvKCRWcywgWzIsIDE2XSksIHsgMTg6IFsxLCA0OV0gfSwgbygkVnMsIFsyLCAxOF0sIHsgMjA6IFsxLCA1MF0gfSksIHsgMjM6IFsxLCA1MV0gfSwgbygkVnMsIFsyLCAyMl0pLCBvKCRWcywgWzIsIDIzXSksIG8oJFZzLCBbMiwgMjRdKSwgbygkVnMsIFsyLCAyNV0pLCB7IDMwOiA1MiwgMzE6IFsxLCA1M10sIDU4OiBbMSwgNTRdLCA1OTogWzEsIDU1XSB9LCBvKCRWcywgWzIsIDI4XSksIG8oJFZzLCBbMiwgMjldKSwgeyAzNDogWzEsIDU2XSB9LCB7IDM2OiBbMSwgNTddIH0sIG8oJFZzLCBbMiwgMzJdKSwgeyAzOTogWzEsIDU4XSwgNDE6IFsxLCA1OV0gfSwgeyA0MzogWzEsIDYwXSB9LCBvKCRWdCwgWzIsIDQ0XSwgeyA1NzogWzEsIDYxXSB9KSwgbygkVnQsIFsyLCA0NV0sIHsgNTc6IFsxLCA2Ml0gfSksIG8oJFZzLCBbMiwgMzhdKSwgbygkVnMsIFsyLCAzOV0pLCBvKCRWcywgWzIsIDQwXSksIG8oJFZzLCBbMiwgNDFdKSwgbygkVnUsIFsyLCAzNl0pLCB7IDQ5OiA2MywgNjI6IFsxLCA2NF0gfSwgbygkVnUsIFsyLCA1M10pLCBvKCRWcywgWzIsIDddKSwgbygkVnMsIFsyLCAxM10pLCB7IDEzOiA2NSwgMjQ6ICRWYiwgNTY6ICRWcSB9LCBvKCRWcywgWzIsIDE3XSksIG8oJFZ2LCAkVjQsIHsgODogNjYgfSksIHsgMjQ6IFsxLCA2N10gfSwgeyAyNDogWzEsIDY4XSB9LCB7IDIzOiBbMSwgNjldIH0sIHsgMjQ6IFsyLCA0OF0gfSwgeyAyNDogWzIsIDQ5XSB9LCBvKCRWcywgWzIsIDMwXSksIG8oJFZzLCBbMiwgMzFdKSwgeyA0MDogWzEsIDcwXSB9LCB7IDQwOiBbMSwgNzFdIH0sIHsgNDQ6IFsxLCA3Ml0gfSwgeyAyNDogWzEsIDczXSB9LCB7IDI0OiBbMSwgNzRdIH0sIHsgNDc6IDc1LCA2MzogJFZyIH0sIHsgNjM6IFsyLCA1Ml0gfSwgbygkVnMsIFsyLCAxNF0sIHsgMTQ6IFsxLCA3Nl0gfSksIHsgNDogJFY1LCA1OiAkVjYsIDY6IDMwLCA5OiAxNCwgMTA6IDE2LCAxMTogMTgsIDEyOiAxOSwgMTM6IDIwLCAxNjogJFY3LCAxNzogJFY4LCAxOTogJFY5LCAyMTogWzEsIDc3XSwgMjI6ICRWYSwgMjQ6ICRWYiwgMjU6ICRWYywgMjY6ICRWZCwgMjc6ICRWZSwgMjg6ICRWZiwgMjk6ICRWZywgMzI6IDMxLCAzMzogJFZoLCAzNTogJFZpLCAzNzogJFZqLCAzODogJFZrLCA0MjogJFZsLCA0NTogNiwgNTA6ICRWbSwgNTE6ICRWbiwgNTI6ICRWbywgNTM6ICRWcCwgNTY6ICRWcSwgNjA6ICRWMyB9LCBvKCRWcywgWzIsIDIwXSwgeyAyMDogWzEsIDc4XSB9KSwgeyAzMTogWzEsIDc5XSB9LCB7IDI0OiBbMSwgODBdIH0sIG8oJFZzLCBbMiwgMzNdKSwgbygkVnMsIFsyLCAzNF0pLCBvKCRWcywgWzIsIDM1XSksIG8oJFZ0LCBbMiwgNDZdKSwgbygkVnQsIFsyLCA0N10pLCBvKCRWdSwgWzIsIDM3XSksIG8oJFZzLCBbMiwgMTVdKSwgbygkVnMsIFsyLCAxOV0pLCBvKCRWdiwgJFY0LCB7IDg6IDgxIH0pLCBvKCRWcywgWzIsIDI2XSksIG8oJFZzLCBbMiwgMjddKSwgeyA0OiAkVjUsIDU6ICRWNiwgNjogMzAsIDk6IDE0LCAxMDogMTYsIDExOiAxOCwgMTI6IDE5LCAxMzogMjAsIDE2OiAkVjcsIDE3OiAkVjgsIDE5OiAkVjksIDIxOiBbMSwgODJdLCAyMjogJFZhLCAyNDogJFZiLCAyNTogJFZjLCAyNjogJFZkLCAyNzogJFZlLCAyODogJFZmLCAyOTogJFZnLCAzMjogMzEsIDMzOiAkVmgsIDM1OiAkVmksIDM3OiAkVmosIDM4OiAkVmssIDQyOiAkVmwsIDQ1OiA2LCA1MDogJFZtLCA1MTogJFZuLCA1MjogJFZvLCA1MzogJFZwLCA1NjogJFZxLCA2MDogJFYzIH0sIG8oJFZzLCBbMiwgMjFdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgNzogWzIsIDUwXSwgODogWzIsIDFdLCA5OiBbMiwgMl0sIDEwOiBbMiwgM10sIDU0OiBbMiwgNDhdLCA1NTogWzIsIDQ5XSwgNjQ6IFsyLCA1Ml0gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYwO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ0eXBlX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MTtcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYXJnX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjM7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTQ0FMRVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDE4O1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMzU7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM4O1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGSURcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJERUZBVUxUX0NMQVNTREVGX0lEXCI7XG4gICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTX1NUWUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU0NBTEVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTc7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU1RBVEVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTgpLnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTgpLnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTEwKS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjU7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC0xMCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDUyO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU1RBVEVfU1RSSU5HXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU1RBVEVfSURcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJBU1wiO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJJRFwiO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RBVEVfREVTQ1JcIjtcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJ1Y3RcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTk9URVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT1RFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU4O1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PVEVfSURcIik7XG4gICAgICAgICAgICByZXR1cm4gNTk7XG4gICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiRkxPQVRJTkdfTk9URVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkZMT0FUSU5HX05PVEVfSURcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJBU1wiO1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9URV9URVhUXCI7XG4gICAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcIklEXCI7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9URV9URVhUXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgwLCAtOCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICBjYXNlIDczOlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiBbL14oPzpkZWZhdWx0XFxiKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrUkxbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvaSwgL14oPzolJVxceykvaSwgL14oPzooKD86KD8hXFx9JSUpW146Ll0pKikpL2ksIC9eKD86OikvaSwgL14oPzpcXH0lJSkvaSwgL14oPzooKD86KD8hXFx9JSUpLnxcXG4pKikpL2ksIC9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpbXlxcfV0lJVteXFxuXSopL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OltcXHNdKykvaSwgL14oPzooKD8hXFxuKVxccykrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OiVbXlxcbl0qKS9pLCAvXig/OnNjYWxlXFxzKykvaSwgL14oPzpcXGQrKS9pLCAvXig/Olxccyt3aWR0aFxcYikvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86Y2xhc3NEZWZcXHMrKS9pLCAvXig/OkRFRkFVTFRcXHMrKS9pLCAvXig/OlxcdytcXHMrKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86Y2xhc3NcXHMrKS9pLCAvXig/OihcXHcrKSsoKCxcXHMqXFx3KykqKSkvaSwgL14oPzpbXlxcbl0qKS9pLCAvXig/OnNjYWxlXFxzKykvaSwgL14oPzpcXGQrKS9pLCAvXig/Olxccyt3aWR0aFxcYikvaSwgL14oPzpzdGF0ZVxccyspL2ksIC9eKD86Lio8PGZvcms+PikvaSwgL14oPzouKjw8am9pbj4+KS9pLCAvXig/Oi4qPDxjaG9pY2U+PikvaSwgL14oPzouKlxcW1xcW2ZvcmtcXF1cXF0pL2ksIC9eKD86LipcXFtcXFtqb2luXFxdXFxdKS9pLCAvXig/Oi4qXFxbXFxbY2hvaWNlXFxdXFxdKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrUkxbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvaSwgL14oPzpbXCJdKS9pLCAvXig/Olxccyphc1xccyspL2ksIC9eKD86W15cXG5cXHtdKikvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKikvaSwgL14oPzpbXlxcblxcc1xce10rKS9pLCAvXig/OlxcbikvaSwgL14oPzpcXHspL2ksIC9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpcXH0pL2ksIC9eKD86W1xcbl0pL2ksIC9eKD86bm90ZVxccyspL2ksIC9eKD86bGVmdCBvZlxcYikvaSwgL14oPzpyaWdodCBvZlxcYikvaSwgL14oPzpcIikvaSwgL14oPzpcXHMqYXNcXHMqKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86XFxzKlteOlxcblxcc1xcLV0rKS9pLCAvXig/Olxccyo6W146XFxuO10rKS9pLCAvXig/OltcXHNcXFNdKj9lbmQgbm90ZVxcYikvaSwgL14oPzpzdGF0ZURpYWdyYW1cXHMrKS9pLCAvXig/OnN0YXRlRGlhZ3JhbS12MlxccyspL2ksIC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxcYikvaSwgL14oPzpcXFtcXCpcXF0pL2ksIC9eKD86W146XFxuXFxzXFwtXFx7XSspL2ksIC9eKD86XFxzKjpbXjpcXG47XSspL2ksIC9eKD86LS0+KS9pLCAvXig/Oi0tKS9pLCAvXig/Ojo6OikvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcIkxJTkVcIjogeyBcInJ1bGVzXCI6IFsxNCwgMTVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsb3NlX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzE0LCAxNV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYXJnX2RpcmVjdGl2ZVwiOiB7IFwicnVsZXNcIjogWzgsIDksIDE0LCAxNV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFs3LCA4LCAxNCwgMTVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm9wZW5fZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbNiwgMTQsIDE1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJ1Y3RcIjogeyBcInJ1bGVzXCI6IFsxNCwgMTUsIDI3LCAzMSwgMzcsIDQ0LCA0NSwgNDYsIDQ3LCA1NiwgNTcsIDU4LCA1OSwgNzMsIDc0LCA3NSwgNzYsIDc3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJGTE9BVElOR19OT1RFX0lEXCI6IHsgXCJydWxlc1wiOiBbNjZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkZMT0FUSU5HX05PVEVcIjogeyBcInJ1bGVzXCI6IFs2MywgNjQsIDY1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOT1RFX1RFWFRcIjogeyBcInJ1bGVzXCI6IFs2OCwgNjldLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIk5PVEVfSURcIjogeyBcInJ1bGVzXCI6IFs2N10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTk9URVwiOiB7IFwicnVsZXNcIjogWzYwLCA2MSwgNjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTX1NUWUxFXCI6IHsgXCJydWxlc1wiOiBbMzNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTXCI6IHsgXCJydWxlc1wiOiBbMzJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTREVGSURcIjogeyBcInJ1bGVzXCI6IFszMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NERUZcIjogeyBcInJ1bGVzXCI6IFsyOCwgMjldLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsyNSwgMjZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzIzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsyMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU0NBTEVcIjogeyBcInJ1bGVzXCI6IFsxOCwgMTksIDM1LCAzNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQUxJQVNcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUQVRFX0lEXCI6IHsgXCJydWxlc1wiOiBbNTBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUQVRFX1NUUklOR1wiOiB7IFwicnVsZXNcIjogWzUxLCA1Ml0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiRk9SS19TVEFURVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RBVEVcIjogeyBcInJ1bGVzXCI6IFsxNCwgMTUsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ4LCA0OSwgNTMsIDU0LCA1NV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSURcIjogeyBcInJ1bGVzXCI6IFsxNCwgMTVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCAxMCwgMTEsIDEyLCAxMywgMTUsIDE2LCAxNywgMjAsIDIyLCAyNCwgMjcsIDMxLCAzNCwgMzcsIDU1LCA1OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc4LCA3OSwgODBdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xuY29uc3QgREVGQVVMVF9ESUFHUkFNX0RJUkVDVElPTiA9IFwiTFJcIjtcbmNvbnN0IERFRkFVTFRfTkVTVEVEX0RPQ19ESVIgPSBcIlRCXCI7XG5jb25zdCBTVE1UX1NUQVRFID0gXCJzdGF0ZVwiO1xuY29uc3QgU1RNVF9SRUxBVElPTiA9IFwicmVsYXRpb25cIjtcbmNvbnN0IFNUTVRfQ0xBU1NERUYgPSBcImNsYXNzRGVmXCI7XG5jb25zdCBTVE1UX0FQUExZQ0xBU1MgPSBcImFwcGx5Q2xhc3NcIjtcbmNvbnN0IERFRkFVTFRfU1RBVEVfVFlQRSA9IFwiZGVmYXVsdFwiO1xuY29uc3QgRElWSURFUl9UWVBFID0gXCJkaXZpZGVyXCI7XG5jb25zdCBTVEFSVF9OT0RFID0gXCJbKl1cIjtcbmNvbnN0IFNUQVJUX1RZUEUgPSBcInN0YXJ0XCI7XG5jb25zdCBFTkRfTk9ERSA9IFNUQVJUX05PREU7XG5jb25zdCBFTkRfVFlQRSA9IFwiZW5kXCI7XG5jb25zdCBDT0xPUl9LRVlXT1JEID0gXCJjb2xvclwiO1xuY29uc3QgRklMTF9LRVlXT1JEID0gXCJmaWxsXCI7XG5jb25zdCBCR19GSUxMID0gXCJiZ0ZpbGxcIjtcbmNvbnN0IFNUWUxFQ0xBU1NfU0VQID0gXCIsXCI7XG5mdW5jdGlvbiBuZXdDbGFzc2VzTGlzdCgpIHtcbiAgcmV0dXJuIHt9O1xufVxubGV0IGRpcmVjdGlvbiA9IERFRkFVTFRfRElBR1JBTV9ESVJFQ1RJT047XG5sZXQgcm9vdERvYyA9IFtdO1xubGV0IGNsYXNzZXMgPSBuZXdDbGFzc2VzTGlzdCgpO1xuY29uc3QgbmV3RG9jID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlbGF0aW9uczogW10sXG4gICAgc3RhdGVzOiB7fSxcbiAgICBkb2N1bWVudHM6IHt9XG4gIH07XG59O1xubGV0IGRvY3VtZW50cyA9IHtcbiAgcm9vdDogbmV3RG9jKClcbn07XG5sZXQgY3VycmVudERvY3VtZW50ID0gZG9jdW1lbnRzLnJvb3Q7XG5sZXQgc3RhcnRFbmRDb3VudCA9IDA7XG5sZXQgZGl2aWRlckNudCA9IDA7XG5jb25zdCBsaW5lVHlwZSA9IHtcbiAgTElORTogMCxcbiAgRE9UVEVEX0xJTkU6IDFcbn07XG5jb25zdCByZWxhdGlvblR5cGUgPSB7XG4gIEFHR1JFR0FUSU9OOiAwLFxuICBFWFRFTlNJT046IDEsXG4gIENPTVBPU0lUSU9OOiAyLFxuICBERVBFTkRFTkNZOiAzXG59O1xuY29uc3QgY2xvbmUgPSAobykgPT4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSk7XG5jb25zdCBwYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSkge1xuICBtZXJtYWlkQVBJLnBhcnNlRGlyZWN0aXZlKHRoaXMsIHN0YXRlbWVudCwgY29udGV4dCwgdHlwZSk7XG59O1xuY29uc3Qgc2V0Um9vdERvYyA9IChvKSA9PiB7XG4gIGxvZy5pbmZvKFwiU2V0dGluZyByb290IGRvY1wiLCBvKTtcbiAgcm9vdERvYyA9IG87XG59O1xuY29uc3QgZ2V0Um9vdERvYyA9ICgpID0+IHJvb3REb2M7XG5jb25zdCBkb2NUcmFuc2xhdG9yID0gKHBhcmVudCwgbm9kZSwgZmlyc3QpID0+IHtcbiAgaWYgKG5vZGUuc3RtdCA9PT0gU1RNVF9SRUxBVElPTikge1xuICAgIGRvY1RyYW5zbGF0b3IocGFyZW50LCBub2RlLnN0YXRlMSwgdHJ1ZSk7XG4gICAgZG9jVHJhbnNsYXRvcihwYXJlbnQsIG5vZGUuc3RhdGUyLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG5vZGUuc3RtdCA9PT0gU1RNVF9TVEFURSkge1xuICAgICAgaWYgKG5vZGUuaWQgPT09IFwiWypdXCIpIHtcbiAgICAgICAgbm9kZS5pZCA9IGZpcnN0ID8gcGFyZW50LmlkICsgXCJfc3RhcnRcIiA6IHBhcmVudC5pZCArIFwiX2VuZFwiO1xuICAgICAgICBub2RlLnN0YXJ0ID0gZmlyc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmlkID0gbm9kZS5pZC50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmRvYykge1xuICAgICAgY29uc3QgZG9jID0gW107XG4gICAgICBsZXQgY3VycmVudERvYyA9IFtdO1xuICAgICAgbGV0IGk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5kb2MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG5vZGUuZG9jW2ldLnR5cGUgPT09IERJVklERVJfVFlQRSkge1xuICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSBjbG9uZShub2RlLmRvY1tpXSk7XG4gICAgICAgICAgbmV3Tm9kZS5kb2MgPSBjbG9uZShjdXJyZW50RG9jKTtcbiAgICAgICAgICBkb2MucHVzaChuZXdOb2RlKTtcbiAgICAgICAgICBjdXJyZW50RG9jID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudERvYy5wdXNoKG5vZGUuZG9jW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvYy5sZW5ndGggPiAwICYmIGN1cnJlbnREb2MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXdOb2RlID0ge1xuICAgICAgICAgIHN0bXQ6IFNUTVRfU1RBVEUsXG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWQoKSxcbiAgICAgICAgICB0eXBlOiBcImRpdmlkZXJcIixcbiAgICAgICAgICBkb2M6IGNsb25lKGN1cnJlbnREb2MpXG4gICAgICAgIH07XG4gICAgICAgIGRvYy5wdXNoKGNsb25lKG5ld05vZGUpKTtcbiAgICAgICAgbm9kZS5kb2MgPSBkb2M7XG4gICAgICB9XG4gICAgICBub2RlLmRvYy5mb3JFYWNoKChkb2NOb2RlKSA9PiBkb2NUcmFuc2xhdG9yKG5vZGUsIGRvY05vZGUsIHRydWUpKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBnZXRSb290RG9jVjIgPSAoKSA9PiB7XG4gIGRvY1RyYW5zbGF0b3IoeyBpZDogXCJyb290XCIgfSwgeyBpZDogXCJyb290XCIsIGRvYzogcm9vdERvYyB9LCB0cnVlKTtcbiAgcmV0dXJuIHsgaWQ6IFwicm9vdFwiLCBkb2M6IHJvb3REb2MgfTtcbn07XG5jb25zdCBleHRyYWN0ID0gKF9kb2MpID0+IHtcbiAgbGV0IGRvYztcbiAgaWYgKF9kb2MuZG9jKSB7XG4gICAgZG9jID0gX2RvYy5kb2M7XG4gIH0gZWxzZSB7XG4gICAgZG9jID0gX2RvYztcbiAgfVxuICBsb2cuaW5mbyhkb2MpO1xuICBjbGVhcih0cnVlKTtcbiAgbG9nLmluZm8oXCJFeHRyYWN0XCIsIGRvYyk7XG4gIGRvYy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgc3dpdGNoIChpdGVtLnN0bXQpIHtcbiAgICAgIGNhc2UgU1RNVF9TVEFURTpcbiAgICAgICAgYWRkU3RhdGUoXG4gICAgICAgICAgaXRlbS5pZC50cmltKCksXG4gICAgICAgICAgaXRlbS50eXBlLFxuICAgICAgICAgIGl0ZW0uZG9jLFxuICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgaXRlbS5ub3RlLFxuICAgICAgICAgIGl0ZW0uY2xhc3NlcyxcbiAgICAgICAgICBpdGVtLnN0eWxlcyxcbiAgICAgICAgICBpdGVtLnRleHRTdHlsZXNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUTVRfUkVMQVRJT046XG4gICAgICAgIGFkZFJlbGF0aW9uKGl0ZW0uc3RhdGUxLCBpdGVtLnN0YXRlMiwgaXRlbS5kZXNjcmlwdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVE1UX0NMQVNTREVGOlxuICAgICAgICBhZGRTdHlsZUNsYXNzKGl0ZW0uaWQudHJpbSgpLCBpdGVtLmNsYXNzZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RNVF9BUFBMWUNMQVNTOlxuICAgICAgICBzZXRDc3NDbGFzcyhpdGVtLmlkLnRyaW0oKSwgaXRlbS5zdHlsZUNsYXNzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBhZGRTdGF0ZSA9IGZ1bmN0aW9uKGlkLCB0eXBlID0gREVGQVVMVF9TVEFURV9UWVBFLCBkb2MgPSBudWxsLCBkZXNjciA9IG51bGwsIG5vdGUgPSBudWxsLCBjbGFzc2VzMiA9IG51bGwsIHN0eWxlczIgPSBudWxsLCB0ZXh0U3R5bGVzID0gbnVsbCkge1xuICBjb25zdCB0cmltbWVkSWQgPSBpZCA9PSBudWxsID8gdm9pZCAwIDogaWQudHJpbSgpO1xuICBpZiAoY3VycmVudERvY3VtZW50LnN0YXRlc1t0cmltbWVkSWRdID09PSB2b2lkIDApIHtcbiAgICBsb2cuaW5mbyhcIkFkZGluZyBzdGF0ZSBcIiwgdHJpbW1lZElkLCBkZXNjcik7XG4gICAgY3VycmVudERvY3VtZW50LnN0YXRlc1t0cmltbWVkSWRdID0ge1xuICAgICAgaWQ6IHRyaW1tZWRJZCxcbiAgICAgIGRlc2NyaXB0aW9uczogW10sXG4gICAgICB0eXBlLFxuICAgICAgZG9jLFxuICAgICAgbm90ZSxcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgc3R5bGVzOiBbXSxcbiAgICAgIHRleHRTdHlsZXM6IFtdXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWN1cnJlbnREb2N1bWVudC5zdGF0ZXNbdHJpbW1lZElkXS5kb2MpIHtcbiAgICAgIGN1cnJlbnREb2N1bWVudC5zdGF0ZXNbdHJpbW1lZElkXS5kb2MgPSBkb2M7XG4gICAgfVxuICAgIGlmICghY3VycmVudERvY3VtZW50LnN0YXRlc1t0cmltbWVkSWRdLnR5cGUpIHtcbiAgICAgIGN1cnJlbnREb2N1bWVudC5zdGF0ZXNbdHJpbW1lZElkXS50eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uXCIsIHRyaW1tZWRJZCwgZGVzY3IpO1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFkZERlc2NyaXB0aW9uKHRyaW1tZWRJZCwgZGVzY3IudHJpbSgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZGVzY3IuZm9yRWFjaCgoZGVzKSA9PiBhZGREZXNjcmlwdGlvbih0cmltbWVkSWQsIGRlcy50cmltKCkpKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vdGUpIHtcbiAgICBjdXJyZW50RG9jdW1lbnQuc3RhdGVzW3RyaW1tZWRJZF0ubm90ZSA9IG5vdGU7XG4gICAgY3VycmVudERvY3VtZW50LnN0YXRlc1t0cmltbWVkSWRdLm5vdGUudGV4dCA9IGNvbW1vbi5zYW5pdGl6ZVRleHQoXG4gICAgICBjdXJyZW50RG9jdW1lbnQuc3RhdGVzW3RyaW1tZWRJZF0ubm90ZS50ZXh0LFxuICAgICAgZ2V0Q29uZmlnKClcbiAgICApO1xuICB9XG4gIGlmIChjbGFzc2VzMikge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBjbGFzc2VzXCIsIHRyaW1tZWRJZCwgY2xhc3NlczIpO1xuICAgIGNvbnN0IGNsYXNzZXNMaXN0ID0gdHlwZW9mIGNsYXNzZXMyID09PSBcInN0cmluZ1wiID8gW2NsYXNzZXMyXSA6IGNsYXNzZXMyO1xuICAgIGNsYXNzZXNMaXN0LmZvckVhY2goKGtsYXNzKSA9PiBzZXRDc3NDbGFzcyh0cmltbWVkSWQsIGtsYXNzLnRyaW0oKSkpO1xuICB9XG4gIGlmIChzdHlsZXMyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIHN0eWxlc1wiLCB0cmltbWVkSWQsIHN0eWxlczIpO1xuICAgIGNvbnN0IHN0eWxlc0xpc3QgPSB0eXBlb2Ygc3R5bGVzMiA9PT0gXCJzdHJpbmdcIiA/IFtzdHlsZXMyXSA6IHN0eWxlczI7XG4gICAgc3R5bGVzTGlzdC5mb3JFYWNoKChzdHlsZSkgPT4gc2V0U3R5bGUodHJpbW1lZElkLCBzdHlsZS50cmltKCkpKTtcbiAgfVxuICBpZiAodGV4dFN0eWxlcykge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBzdHlsZXNcIiwgdHJpbW1lZElkLCBzdHlsZXMyKTtcbiAgICBjb25zdCB0ZXh0U3R5bGVzTGlzdCA9IHR5cGVvZiB0ZXh0U3R5bGVzID09PSBcInN0cmluZ1wiID8gW3RleHRTdHlsZXNdIDogdGV4dFN0eWxlcztcbiAgICB0ZXh0U3R5bGVzTGlzdC5mb3JFYWNoKCh0ZXh0U3R5bGUpID0+IHNldFRleHRTdHlsZSh0cmltbWVkSWQsIHRleHRTdHlsZS50cmltKCkpKTtcbiAgfVxufTtcbmNvbnN0IGNsZWFyID0gZnVuY3Rpb24oc2F2ZUNvbW1vbikge1xuICBkb2N1bWVudHMgPSB7XG4gICAgcm9vdDogbmV3RG9jKClcbiAgfTtcbiAgY3VycmVudERvY3VtZW50ID0gZG9jdW1lbnRzLnJvb3Q7XG4gIHN0YXJ0RW5kQ291bnQgPSAwO1xuICBjbGFzc2VzID0gbmV3Q2xhc3Nlc0xpc3QoKTtcbiAgaWYgKCFzYXZlQ29tbW9uKSB7XG4gICAgY2xlYXIkMSgpO1xuICB9XG59O1xuY29uc3QgZ2V0U3RhdGUgPSBmdW5jdGlvbihpZCkge1xuICByZXR1cm4gY3VycmVudERvY3VtZW50LnN0YXRlc1tpZF07XG59O1xuY29uc3QgZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjdXJyZW50RG9jdW1lbnQuc3RhdGVzO1xufTtcbmNvbnN0IGxvZ0RvY3VtZW50cyA9IGZ1bmN0aW9uKCkge1xuICBsb2cuaW5mbyhcIkRvY3VtZW50cyA9IFwiLCBkb2N1bWVudHMpO1xufTtcbmNvbnN0IGdldFJlbGF0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY3VycmVudERvY3VtZW50LnJlbGF0aW9ucztcbn07XG5mdW5jdGlvbiBzdGFydElkSWZOZWVkZWQoaWQgPSBcIlwiKSB7XG4gIGxldCBmaXhlZElkID0gaWQ7XG4gIGlmIChpZCA9PT0gU1RBUlRfTk9ERSkge1xuICAgIHN0YXJ0RW5kQ291bnQrKztcbiAgICBmaXhlZElkID0gYCR7U1RBUlRfVFlQRX0ke3N0YXJ0RW5kQ291bnR9YDtcbiAgfVxuICByZXR1cm4gZml4ZWRJZDtcbn1cbmZ1bmN0aW9uIHN0YXJ0VHlwZUlmTmVlZGVkKGlkID0gXCJcIiwgdHlwZSA9IERFRkFVTFRfU1RBVEVfVFlQRSkge1xuICByZXR1cm4gaWQgPT09IFNUQVJUX05PREUgPyBTVEFSVF9UWVBFIDogdHlwZTtcbn1cbmZ1bmN0aW9uIGVuZElkSWZOZWVkZWQoaWQgPSBcIlwiKSB7XG4gIGxldCBmaXhlZElkID0gaWQ7XG4gIGlmIChpZCA9PT0gRU5EX05PREUpIHtcbiAgICBzdGFydEVuZENvdW50Kys7XG4gICAgZml4ZWRJZCA9IGAke0VORF9UWVBFfSR7c3RhcnRFbmRDb3VudH1gO1xuICB9XG4gIHJldHVybiBmaXhlZElkO1xufVxuZnVuY3Rpb24gZW5kVHlwZUlmTmVlZGVkKGlkID0gXCJcIiwgdHlwZSA9IERFRkFVTFRfU1RBVEVfVFlQRSkge1xuICByZXR1cm4gaWQgPT09IEVORF9OT0RFID8gRU5EX1RZUEUgOiB0eXBlO1xufVxuZnVuY3Rpb24gYWRkUmVsYXRpb25PYmpzKGl0ZW0xLCBpdGVtMiwgcmVsYXRpb25UaXRsZSkge1xuICBsZXQgaWQxID0gc3RhcnRJZElmTmVlZGVkKGl0ZW0xLmlkLnRyaW0oKSk7XG4gIGxldCB0eXBlMSA9IHN0YXJ0VHlwZUlmTmVlZGVkKGl0ZW0xLmlkLnRyaW0oKSwgaXRlbTEudHlwZSk7XG4gIGxldCBpZDIgPSBzdGFydElkSWZOZWVkZWQoaXRlbTIuaWQudHJpbSgpKTtcbiAgbGV0IHR5cGUyID0gc3RhcnRUeXBlSWZOZWVkZWQoaXRlbTIuaWQudHJpbSgpLCBpdGVtMi50eXBlKTtcbiAgYWRkU3RhdGUoXG4gICAgaWQxLFxuICAgIHR5cGUxLFxuICAgIGl0ZW0xLmRvYyxcbiAgICBpdGVtMS5kZXNjcmlwdGlvbixcbiAgICBpdGVtMS5ub3RlLFxuICAgIGl0ZW0xLmNsYXNzZXMsXG4gICAgaXRlbTEuc3R5bGVzLFxuICAgIGl0ZW0xLnRleHRTdHlsZXNcbiAgKTtcbiAgYWRkU3RhdGUoXG4gICAgaWQyLFxuICAgIHR5cGUyLFxuICAgIGl0ZW0yLmRvYyxcbiAgICBpdGVtMi5kZXNjcmlwdGlvbixcbiAgICBpdGVtMi5ub3RlLFxuICAgIGl0ZW0yLmNsYXNzZXMsXG4gICAgaXRlbTIuc3R5bGVzLFxuICAgIGl0ZW0yLnRleHRTdHlsZXNcbiAgKTtcbiAgY3VycmVudERvY3VtZW50LnJlbGF0aW9ucy5wdXNoKHtcbiAgICBpZDEsXG4gICAgaWQyLFxuICAgIHJlbGF0aW9uVGl0bGU6IGNvbW1vbi5zYW5pdGl6ZVRleHQocmVsYXRpb25UaXRsZSwgZ2V0Q29uZmlnKCkpXG4gIH0pO1xufVxuY29uc3QgYWRkUmVsYXRpb24gPSBmdW5jdGlvbihpdGVtMSwgaXRlbTIsIHRpdGxlKSB7XG4gIGlmICh0eXBlb2YgaXRlbTEgPT09IFwib2JqZWN0XCIpIHtcbiAgICBhZGRSZWxhdGlvbk9ianMoaXRlbTEsIGl0ZW0yLCB0aXRsZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaWQxID0gc3RhcnRJZElmTmVlZGVkKGl0ZW0xLnRyaW0oKSk7XG4gICAgY29uc3QgdHlwZTEgPSBzdGFydFR5cGVJZk5lZWRlZChpdGVtMSk7XG4gICAgY29uc3QgaWQyID0gZW5kSWRJZk5lZWRlZChpdGVtMi50cmltKCkpO1xuICAgIGNvbnN0IHR5cGUyID0gZW5kVHlwZUlmTmVlZGVkKGl0ZW0yKTtcbiAgICBhZGRTdGF0ZShpZDEsIHR5cGUxKTtcbiAgICBhZGRTdGF0ZShpZDIsIHR5cGUyKTtcbiAgICBjdXJyZW50RG9jdW1lbnQucmVsYXRpb25zLnB1c2goe1xuICAgICAgaWQxLFxuICAgICAgaWQyLFxuICAgICAgdGl0bGU6IGNvbW1vbi5zYW5pdGl6ZVRleHQodGl0bGUsIGdldENvbmZpZygpKVxuICAgIH0pO1xuICB9XG59O1xuY29uc3QgYWRkRGVzY3JpcHRpb24gPSBmdW5jdGlvbihpZCwgZGVzY3IpIHtcbiAgY29uc3QgdGhlU3RhdGUgPSBjdXJyZW50RG9jdW1lbnQuc3RhdGVzW2lkXTtcbiAgY29uc3QgX2Rlc2NyID0gZGVzY3Iuc3RhcnRzV2l0aChcIjpcIikgPyBkZXNjci5yZXBsYWNlKFwiOlwiLCBcIlwiKS50cmltKCkgOiBkZXNjcjtcbiAgdGhlU3RhdGUuZGVzY3JpcHRpb25zLnB1c2goY29tbW9uLnNhbml0aXplVGV4dChfZGVzY3IsIGdldENvbmZpZygpKSk7XG59O1xuY29uc3QgY2xlYW51cExhYmVsID0gZnVuY3Rpb24obGFiZWwpIHtcbiAgaWYgKGxhYmVsLnN1YnN0cmluZygwLCAxKSA9PT0gXCI6XCIpIHtcbiAgICByZXR1cm4gbGFiZWwuc3Vic3RyKDIpLnRyaW0oKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGFiZWwudHJpbSgpO1xuICB9XG59O1xuY29uc3QgZ2V0RGl2aWRlcklkID0gKCkgPT4ge1xuICBkaXZpZGVyQ250Kys7XG4gIHJldHVybiBcImRpdmlkZXItaWQtXCIgKyBkaXZpZGVyQ250O1xufTtcbmNvbnN0IGFkZFN0eWxlQ2xhc3MgPSBmdW5jdGlvbihpZCwgc3R5bGVBdHRyaWJ1dGVzID0gXCJcIikge1xuICBpZiAoY2xhc3Nlc1tpZF0gPT09IHZvaWQgMCkge1xuICAgIGNsYXNzZXNbaWRdID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgfVxuICBjb25zdCBmb3VuZENsYXNzID0gY2xhc3Nlc1tpZF07XG4gIGlmIChzdHlsZUF0dHJpYnV0ZXMgIT09IHZvaWQgMCAmJiBzdHlsZUF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBzdHlsZUF0dHJpYnV0ZXMuc3BsaXQoU1RZTEVDTEFTU19TRVApLmZvckVhY2goKGF0dHJpYikgPT4ge1xuICAgICAgY29uc3QgZml4ZWRBdHRyaWIgPSBhdHRyaWIucmVwbGFjZSgvKFteO10qKTsvLCBcIiQxXCIpLnRyaW0oKTtcbiAgICAgIGlmIChhdHRyaWIubWF0Y2goQ09MT1JfS0VZV09SRCkpIHtcbiAgICAgICAgY29uc3QgbmV3U3R5bGUxID0gZml4ZWRBdHRyaWIucmVwbGFjZShGSUxMX0tFWVdPUkQsIEJHX0ZJTEwpO1xuICAgICAgICBjb25zdCBuZXdTdHlsZTIgPSBuZXdTdHlsZTEucmVwbGFjZShDT0xPUl9LRVlXT1JELCBGSUxMX0tFWVdPUkQpO1xuICAgICAgICBmb3VuZENsYXNzLnRleHRTdHlsZXMucHVzaChuZXdTdHlsZTIpO1xuICAgICAgfVxuICAgICAgZm91bmRDbGFzcy5zdHlsZXMucHVzaChmaXhlZEF0dHJpYik7XG4gICAgfSk7XG4gIH1cbn07XG5jb25zdCBnZXRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjbGFzc2VzO1xufTtcbmNvbnN0IHNldENzc0NsYXNzID0gZnVuY3Rpb24oaXRlbUlkcywgY3NzQ2xhc3NOYW1lKSB7XG4gIGl0ZW1JZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgZm91bmRTdGF0ZSA9IGdldFN0YXRlKGlkKTtcbiAgICBpZiAoZm91bmRTdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdCB0cmltbWVkSWQgPSBpZC50cmltKCk7XG4gICAgICBhZGRTdGF0ZSh0cmltbWVkSWQpO1xuICAgICAgZm91bmRTdGF0ZSA9IGdldFN0YXRlKHRyaW1tZWRJZCk7XG4gICAgfVxuICAgIGZvdW5kU3RhdGUuY2xhc3Nlcy5wdXNoKGNzc0NsYXNzTmFtZSk7XG4gIH0pO1xufTtcbmNvbnN0IHNldFN0eWxlID0gZnVuY3Rpb24oaXRlbUlkLCBzdHlsZVRleHQpIHtcbiAgY29uc3QgaXRlbSA9IGdldFN0YXRlKGl0ZW1JZCk7XG4gIGlmIChpdGVtICE9PSB2b2lkIDApIHtcbiAgICBpdGVtLnRleHRTdHlsZXMucHVzaChzdHlsZVRleHQpO1xuICB9XG59O1xuY29uc3Qgc2V0VGV4dFN0eWxlID0gZnVuY3Rpb24oaXRlbUlkLCBjc3NDbGFzc05hbWUpIHtcbiAgY29uc3QgaXRlbSA9IGdldFN0YXRlKGl0ZW1JZCk7XG4gIGlmIChpdGVtICE9PSB2b2lkIDApIHtcbiAgICBpdGVtLnRleHRTdHlsZXMucHVzaChjc3NDbGFzc05hbWUpO1xuICB9XG59O1xuY29uc3QgZ2V0RGlyZWN0aW9uID0gKCkgPT4gZGlyZWN0aW9uO1xuY29uc3Qgc2V0RGlyZWN0aW9uID0gKGRpcikgPT4ge1xuICBkaXJlY3Rpb24gPSBkaXI7XG59O1xuY29uc3QgdHJpbUNvbG9uID0gKHN0cikgPT4gc3RyICYmIHN0clswXSA9PT0gXCI6XCIgPyBzdHIuc3Vic3RyKDEpLnRyaW0oKSA6IHN0ci50cmltKCk7XG5jb25zdCBkYiA9IHtcbiAgcGFyc2VEaXJlY3RpdmUsXG4gIGdldENvbmZpZzogKCkgPT4gZ2V0Q29uZmlnKCkuc3RhdGUsXG4gIGFkZFN0YXRlLFxuICBjbGVhcixcbiAgZ2V0U3RhdGUsXG4gIGdldFN0YXRlcyxcbiAgZ2V0UmVsYXRpb25zLFxuICBnZXRDbGFzc2VzLFxuICBnZXREaXJlY3Rpb24sXG4gIGFkZFJlbGF0aW9uLFxuICBnZXREaXZpZGVySWQsXG4gIHNldERpcmVjdGlvbixcbiAgY2xlYW51cExhYmVsLFxuICBsaW5lVHlwZSxcbiAgcmVsYXRpb25UeXBlLFxuICBsb2dEb2N1bWVudHMsXG4gIGdldFJvb3REb2MsXG4gIHNldFJvb3REb2MsXG4gIGdldFJvb3REb2NWMixcbiAgZXh0cmFjdCxcbiAgdHJpbUNvbG9uLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgYWRkU3R5bGVDbGFzcyxcbiAgc2V0Q3NzQ2xhc3MsXG4gIGFkZERlc2NyaXB0aW9uLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZVxufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRyYW5zaXRpb25Db2xvcn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMudHJhbnNpdGlvbkNvbG9yfTtcbiAgfVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG5cbn1cbmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xuICBmaWxsOiAke29wdGlvbnMuc3RhdGVMYWJlbENvbG9yfTtcbn1cblxuZy5zdGF0ZUdyb3VwIHJlY3Qge1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ307XG4gIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xufVxuXG5nLnN0YXRlR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLnRyYW5zaXRpb24ge1xuICBzdHJva2U6ICR7b3B0aW9ucy50cmFuc2l0aW9uQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5iYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQge1xuICBmaWxsOiAjZTBlMGUwO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlLW5vdGUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub3RlQm9yZGVyQ29sb3J9O1xuICBmaWxsOiAke29wdGlvbnMubm90ZUJrZ0NvbG9yfTtcblxuICB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMubm90ZVRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgfVxufVxuXG4uc3RhdGVMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uZWRnZUxhYmVsIC5sYWJlbCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLmxhYmVsQmFja2dyb3VuZENvbG9yfTtcbiAgb3BhY2l0eTogMC41O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCBvcHRpb25zLnRlcnRpYXJ5VGV4dENvbG9yfTtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAke29wdGlvbnMudHJhbnNpdGlvbkxhYmVsQ29sb3IgfHwgb3B0aW9ucy50ZXJ0aWFyeVRleHRDb2xvcn07XG59XG5cbi5zdGF0ZUxhYmVsIHRleHQge1xuICBmaWxsOiAke29wdGlvbnMuc3RhdGVMYWJlbENvbG9yfTtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLXN0YXJ0IHtcbiAgZmlsbDogJHtvcHRpb25zLnNwZWNpYWxTdGF0ZUNvbG9yfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xufVxuXG4ubm9kZSAuZm9yay1qb2luIHtcbiAgZmlsbDogJHtvcHRpb25zLnNwZWNpYWxTdGF0ZUNvbG9yfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xufVxuXG4ubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHtcbiAgZmlsbDogJHtvcHRpb25zLmlubmVyRW5kQmFja2dyb3VuZH07XG4gIHN0cm9rZTogJHtvcHRpb25zLmJhY2tncm91bmR9O1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuLmVuZC1zdGF0ZS1pbm5lciB7XG4gIGZpbGw6ICR7b3B0aW9ucy5jb21wb3NpdGVCYWNrZ3JvdW5kIHx8IG9wdGlvbnMuYmFja2dyb3VuZH07XG4gIC8vIHN0cm9rZTogJHtvcHRpb25zLmJhY2tncm91bmR9O1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuXG4ubm9kZSByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLnN0YXRlQmtnIHx8IG9wdGlvbnMubWFpbkJrZ307XG4gIHN0cm9rZTogJHtvcHRpb25zLnN0YXRlQm9yZGVyIHx8IG9wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuLm5vZGUgcG9seWdvbiB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3RhdGVCb3JkZXIgfHwgb3B0aW9ucy5ub2RlQm9yZGVyfTs7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn07XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZH07XG4gIHN0cm9rZTogJHtvcHRpb25zLnN0YXRlQm9yZGVyIHx8IG9wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAke29wdGlvbnMuc3RhdGVMYWJlbENvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogJHtvcHRpb25zLnN0YXRlQm9yZGVyIHx8IG9wdGlvbnMubm9kZUJvcmRlcn07XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCBvcHRpb25zLmJhY2tncm91bmR9O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vdGVCa2dDb2xvcn07XG4gIHN0cm9rZTogJHtvcHRpb25zLm5vdGVCb3JkZXJDb2xvcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlQmtnQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub3RlQm9yZGVyQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHtcbiAgY29sb3I6IHJlZDsgLy8gJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQge1xuICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xufVxuYDtcbmNvbnN0IHN0eWxlcyA9IGdldFN0eWxlcztcbmV4cG9ydCB7XG4gIERFRkFVTFRfU1RBVEVfVFlQRSBhcyBELFxuICBTVE1UX1JFTEFUSU9OIGFzIFMsXG4gIERJVklERVJfVFlQRSBhcyBhLFxuICBTVE1UX1NUQVRFIGFzIGIsXG4gIERFRkFVTFRfTkVTVEVEX0RPQ19ESVIgYXMgYyxcbiAgZGIgYXMgZCxcbiAgcGFyc2VyJDEgYXMgcCxcbiAgc3R5bGVzIGFzIHNcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/styles-fa41df25.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/svgDraw-0fcc813d.js": /*!**************************************************************!*\ !*** ../../../node_modules/mermaid/dist/svgDraw-0fcc813d.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"p\": () => (/* binding */ parseMember),\n/* harmony export */ \"s\": () => (/* binding */ svgDraw)\n/* harmony export */ });\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n\n\nlet edgeCount = 0;\nconst drawEdge = function(elem, path, relation, conf, diagObj) {\n const getRelationType = function(type) {\n switch (type) {\n case diagObj.db.relationType.AGGREGATION:\n return \"aggregation\";\n case diagObj.db.relationType.EXTENSION:\n return \"extension\";\n case diagObj.db.relationType.COMPOSITION:\n return \"composition\";\n case diagObj.db.relationType.DEPENDENCY:\n return \"dependency\";\n case diagObj.db.relationType.LOLLIPOP:\n return \"lollipop\";\n }\n };\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n const lineData = path.points;\n const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__.line)().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(d3__WEBPACK_IMPORTED_MODULE_0__.curveBasis);\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", \"edge\" + edgeCount).attr(\"class\", \"relation\");\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n if (relation.relation.lineType == 1) {\n svgPath.attr(\"class\", \"relation dashed-line\");\n }\n if (relation.relation.lineType == 10) {\n svgPath.attr(\"class\", \"relation dotted-line\");\n }\n if (relation.relation.type1 !== \"none\") {\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + getRelationType(relation.relation.type1) + \"Start)\"\n );\n }\n if (relation.relation.type2 !== \"none\") {\n svgPath.attr(\n \"marker-end\",\n \"url(\" + url + \"#\" + getRelationType(relation.relation.type2) + \"End)\"\n );\n }\n let x, y;\n const l = path.points.length;\n let labelPosition = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points);\n x = labelPosition.x;\n y = labelPosition.y;\n let p1_card_x, p1_card_y;\n let p2_card_x, p2_card_y;\n if (l % 2 !== 0 && l > 1) {\n let cardinality_1_point = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition(\n relation.relation.type1 !== \"none\",\n path.points,\n path.points[0]\n );\n let cardinality_2_point = _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition(\n relation.relation.type2 !== \"none\",\n path.points,\n path.points[l - 1]\n );\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"cardinality_1_point \" + JSON.stringify(cardinality_1_point));\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"cardinality_2_point \" + JSON.stringify(cardinality_2_point));\n p1_card_x = cardinality_1_point.x;\n p1_card_y = cardinality_1_point.y;\n p2_card_x = cardinality_2_point.x;\n p2_card_y = cardinality_2_point.y;\n }\n if (relation.title !== void 0) {\n const g = elem.append(\"g\").attr(\"class\", \"classLabel\");\n const label = g.append(\"text\").attr(\"class\", \"label\").attr(\"x\", x).attr(\"y\", y).attr(\"fill\", \"red\").attr(\"text-anchor\", \"middle\").text(relation.title);\n window.label = label;\n const bounds = label.node().getBBox();\n g.insert(\"rect\", \":first-child\").attr(\"class\", \"box\").attr(\"x\", bounds.x - conf.padding / 2).attr(\"y\", bounds.y - conf.padding / 2).attr(\"width\", bounds.width + conf.padding).attr(\"height\", bounds.height + conf.padding);\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.info(\"Rendering relation \" + JSON.stringify(relation));\n if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== \"none\") {\n const g = elem.append(\"g\").attr(\"class\", \"cardinality\");\n g.append(\"text\").attr(\"class\", \"type1\").attr(\"x\", p1_card_x).attr(\"y\", p1_card_y).attr(\"fill\", \"black\").attr(\"font-size\", \"6\").text(relation.relationTitle1);\n }\n if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== \"none\") {\n const g = elem.append(\"g\").attr(\"class\", \"cardinality\");\n g.append(\"text\").attr(\"class\", \"type2\").attr(\"x\", p2_card_x).attr(\"y\", p2_card_y).attr(\"fill\", \"black\").attr(\"font-size\", \"6\").text(relation.relationTitle2);\n }\n edgeCount++;\n};\nconst drawClass = function(elem, classDef, conf, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Rendering class \", classDef, conf);\n const id = classDef.id;\n const classInfo = {\n id,\n label: classDef.id,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", diagObj.db.lookUpDomId(id)).attr(\"class\", \"classGroup\");\n let title;\n if (classDef.link) {\n title = g.append(\"svg:a\").attr(\"xlink:href\", classDef.link).attr(\"target\", classDef.linkTarget).append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n } else {\n title = g.append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n }\n let isFirst = true;\n classDef.annotations.forEach(function(member) {\n const titleText2 = title.append(\"tspan\").text(\"«\" + member + \"»\");\n if (!isFirst) {\n titleText2.attr(\"dy\", conf.textHeight);\n }\n isFirst = false;\n });\n let classTitleString = getClassTitleString(classDef);\n const classTitle = title.append(\"tspan\").text(classTitleString).attr(\"class\", \"title\");\n if (!isFirst) {\n classTitle.attr(\"dy\", conf.textHeight);\n }\n const titleHeight = title.node().getBBox().height;\n const membersLine = g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", conf.padding + titleHeight + conf.dividerMargin / 2).attr(\"y2\", conf.padding + titleHeight + conf.dividerMargin / 2);\n const members = g.append(\"text\").attr(\"x\", conf.padding).attr(\"y\", titleHeight + conf.dividerMargin + conf.textHeight).attr(\"fill\", \"white\").attr(\"class\", \"classText\");\n isFirst = true;\n classDef.members.forEach(function(member) {\n addTspan(members, member, isFirst, conf);\n isFirst = false;\n });\n const membersBox = members.node().getBBox();\n const methodsLine = g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr(\"y2\", conf.padding + titleHeight + conf.dividerMargin + membersBox.height);\n const methods = g.append(\"text\").attr(\"x\", conf.padding).attr(\"y\", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr(\"fill\", \"white\").attr(\"class\", \"classText\");\n isFirst = true;\n classDef.methods.forEach(function(method) {\n addTspan(methods, method, isFirst, conf);\n isFirst = false;\n });\n const classBox = g.node().getBBox();\n var cssClassStr = \" \";\n if (classDef.cssClasses.length > 0) {\n cssClassStr = cssClassStr + classDef.cssClasses.join(\" \");\n }\n const rect = g.insert(\"rect\", \":first-child\").attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", classBox.width + 2 * conf.padding).attr(\"height\", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr(\"class\", cssClassStr);\n const rectWidth = rect.node().getBBox().width;\n title.node().childNodes.forEach(function(x) {\n x.setAttribute(\"x\", (rectWidth - x.getBBox().width) / 2);\n });\n if (classDef.tooltip) {\n title.insert(\"title\").text(classDef.tooltip);\n }\n membersLine.attr(\"x2\", rectWidth);\n methodsLine.attr(\"x2\", rectWidth);\n classInfo.width = rectWidth;\n classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin;\n return classInfo;\n};\nconst getClassTitleString = function(classDef) {\n let classTitleString = classDef.id;\n if (classDef.type) {\n classTitleString += \"<\" + classDef.type + \">\";\n }\n return classTitleString;\n};\nconst drawNote = function(elem, note, conf, diagObj) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Rendering note \", note, conf);\n const id = note.id;\n const noteInfo = {\n id,\n text: note.text,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", id).attr(\"class\", \"classGroup\");\n let text = g.append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n const lines = JSON.parse(`\"${note.text}\"`).split(\"\\n\");\n lines.forEach(function(line2) {\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`);\n text.append(\"tspan\").text(line2).attr(\"class\", \"title\").attr(\"dy\", conf.textHeight);\n });\n const noteBox = g.node().getBBox();\n const rect = g.insert(\"rect\", \":first-child\").attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", noteBox.width + 2 * conf.padding).attr(\n \"height\",\n noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin\n );\n const rectWidth = rect.node().getBBox().width;\n text.node().childNodes.forEach(function(x) {\n x.setAttribute(\"x\", (rectWidth - x.getBBox().width) / 2);\n });\n noteInfo.width = rectWidth;\n noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin;\n return noteInfo;\n};\nconst parseMember = function(text) {\n let displayText = \"\";\n let cssStyle = \"\";\n let returnType = \"\";\n let visibility = \"\";\n let firstChar = text.substring(0, 1);\n let lastChar = text.substring(text.length - 1, text.length);\n if (firstChar.match(/[#+~-]/)) {\n visibility = firstChar;\n }\n let noClassifierRe = /[\\s\\w)~]/;\n if (!lastChar.match(noClassifierRe)) {\n cssStyle = parseClassifier(lastChar);\n }\n const startIndex = visibility === \"\" ? 0 : 1;\n let endIndex = cssStyle === \"\" ? text.length : text.length - 1;\n text = text.substring(startIndex, endIndex);\n const methodStart = text.indexOf(\"(\");\n const methodEnd = text.indexOf(\")\");\n const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length;\n if (isMethod) {\n let methodName = text.substring(0, methodStart).trim();\n const parameters = text.substring(methodStart + 1, methodEnd);\n displayText = visibility + methodName + \"(\" + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + \")\";\n if (methodEnd < text.length) {\n let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2);\n if (cssStyle === \"\" && !potentialClassifier.match(noClassifierRe)) {\n cssStyle = parseClassifier(potentialClassifier);\n returnType = text.substring(methodEnd + 2).trim();\n } else {\n returnType = text.substring(methodEnd + 1).trim();\n }\n if (returnType !== \"\") {\n if (returnType.charAt(0) === \":\") {\n returnType = returnType.substring(1).trim();\n }\n returnType = \" : \" + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType);\n displayText += returnType;\n }\n }\n } else {\n displayText = visibility + (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_1__.x)(text);\n }\n return {\n displayText,\n cssStyle\n };\n};\nconst addTspan = function(textEl, txt, isFirst, conf) {\n let member = parseMember(txt);\n const tSpan = textEl.append(\"tspan\").attr(\"x\", conf.padding).text(member.displayText);\n if (member.cssStyle !== \"\") {\n tSpan.attr(\"style\", member.cssStyle);\n }\n if (!isFirst) {\n tSpan.attr(\"dy\", conf.textHeight);\n }\n};\nconst parseClassifier = function(classifier) {\n switch (classifier) {\n case \"*\":\n return \"font-style:italic;\";\n case \"$\":\n return \"text-decoration:underline;\";\n default:\n return \"\";\n }\n};\nconst svgDraw = {\n getClassTitleString,\n drawClass,\n drawEdge,\n drawNote,\n parseMember\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdmdEcmF3LTBmY2M4MTNkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBc0M7QUFDK0M7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdDQUFJO0FBQzNCO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRyxRQUFRLDBDQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixxRUFBdUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwyRUFBNkI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkVBQTZCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx5REFBUztBQUNiLElBQUkseURBQVM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUseURBQVM7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHlEQUFTO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFVBQVU7QUFDekM7QUFDQSxJQUFJLHlEQUFTLGlCQUFpQixNQUFNO0FBQ3BDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELHVEQUFpQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix1REFBaUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLCtCQUErQix1REFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3Qvc3ZnRHJhdy0wZmNjODEzZC5qcz9kNDViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxpbmUsIGN1cnZlQmFzaXMgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IHUgYXMgdXRpbHMsIGwgYXMgbG9nLCB4IGFzIHBhcnNlR2VuZXJpY1R5cGVzIH0gZnJvbSBcIi4vbWVybWFpZC1iMGFkMmRlMS5qc1wiO1xubGV0IGVkZ2VDb3VudCA9IDA7XG5jb25zdCBkcmF3RWRnZSA9IGZ1bmN0aW9uKGVsZW0sIHBhdGgsIHJlbGF0aW9uLCBjb25mLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGdldFJlbGF0aW9uVHlwZSA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046XG4gICAgICAgIHJldHVybiBcImFnZ3JlZ2F0aW9uXCI7XG4gICAgICBjYXNlIGRpYWdPYmouZGIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpcbiAgICAgICAgcmV0dXJuIFwiZXh0ZW5zaW9uXCI7XG4gICAgICBjYXNlIGRpYWdPYmouZGIucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOlxuICAgICAgICByZXR1cm4gXCJjb21wb3NpdGlvblwiO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOlxuICAgICAgICByZXR1cm4gXCJkZXBlbmRlbmN5XCI7XG4gICAgICBjYXNlIGRpYWdPYmouZGIucmVsYXRpb25UeXBlLkxPTExJUE9QOlxuICAgICAgICByZXR1cm4gXCJsb2xsaXBvcFwiO1xuICAgIH1cbiAgfTtcbiAgcGF0aC5wb2ludHMgPSBwYXRoLnBvaW50cy5maWx0ZXIoKHApID0+ICFOdW1iZXIuaXNOYU4ocC55KSk7XG4gIGNvbnN0IGxpbmVEYXRhID0gcGF0aC5wb2ludHM7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KS5jdXJ2ZShjdXJ2ZUJhc2lzKTtcbiAgY29uc3Qgc3ZnUGF0aCA9IGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24obGluZURhdGEpKS5hdHRyKFwiaWRcIiwgXCJlZGdlXCIgKyBlZGdlQ291bnQpLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uXCIpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi5saW5lVHlwZSA9PSAxKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwiY2xhc3NcIiwgXCJyZWxhdGlvbiBkYXNoZWQtbGluZVwiKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24ubGluZVR5cGUgPT0gMTApIHtcbiAgICBzdmdQYXRoLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uIGRvdHRlZC1saW5lXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSAhPT0gXCJub25lXCIpIHtcbiAgICBzdmdQYXRoLmF0dHIoXG4gICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGdldFJlbGF0aW9uVHlwZShyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSkgKyBcIlN0YXJ0KVwiXG4gICAgKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24udHlwZTIgIT09IFwibm9uZVwiKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgXCJtYXJrZXItZW5kXCIsXG4gICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZ2V0UmVsYXRpb25UeXBlKHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyKSArIFwiRW5kKVwiXG4gICAgKTtcbiAgfVxuICBsZXQgeCwgeTtcbiAgY29uc3QgbCA9IHBhdGgucG9pbnRzLmxlbmd0aDtcbiAgbGV0IGxhYmVsUG9zaXRpb24gPSB1dGlscy5jYWxjTGFiZWxQb3NpdGlvbihwYXRoLnBvaW50cyk7XG4gIHggPSBsYWJlbFBvc2l0aW9uLng7XG4gIHkgPSBsYWJlbFBvc2l0aW9uLnk7XG4gIGxldCBwMV9jYXJkX3gsIHAxX2NhcmRfeTtcbiAgbGV0IHAyX2NhcmRfeCwgcDJfY2FyZF95O1xuICBpZiAobCAlIDIgIT09IDAgJiYgbCA+IDEpIHtcbiAgICBsZXQgY2FyZGluYWxpdHlfMV9wb2ludCA9IHV0aWxzLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKFxuICAgICAgcmVsYXRpb24ucmVsYXRpb24udHlwZTEgIT09IFwibm9uZVwiLFxuICAgICAgcGF0aC5wb2ludHMsXG4gICAgICBwYXRoLnBvaW50c1swXVxuICAgICk7XG4gICAgbGV0IGNhcmRpbmFsaXR5XzJfcG9pbnQgPSB1dGlscy5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihcbiAgICAgIHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyICE9PSBcIm5vbmVcIixcbiAgICAgIHBhdGgucG9pbnRzLFxuICAgICAgcGF0aC5wb2ludHNbbCAtIDFdXG4gICAgKTtcbiAgICBsb2cuZGVidWcoXCJjYXJkaW5hbGl0eV8xX3BvaW50IFwiICsgSlNPTi5zdHJpbmdpZnkoY2FyZGluYWxpdHlfMV9wb2ludCkpO1xuICAgIGxvZy5kZWJ1ZyhcImNhcmRpbmFsaXR5XzJfcG9pbnQgXCIgKyBKU09OLnN0cmluZ2lmeShjYXJkaW5hbGl0eV8yX3BvaW50KSk7XG4gICAgcDFfY2FyZF94ID0gY2FyZGluYWxpdHlfMV9wb2ludC54O1xuICAgIHAxX2NhcmRfeSA9IGNhcmRpbmFsaXR5XzFfcG9pbnQueTtcbiAgICBwMl9jYXJkX3ggPSBjYXJkaW5hbGl0eV8yX3BvaW50Lng7XG4gICAgcDJfY2FyZF95ID0gY2FyZGluYWxpdHlfMl9wb2ludC55O1xuICB9XG4gIGlmIChyZWxhdGlvbi50aXRsZSAhPT0gdm9pZCAwKSB7XG4gICAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc0xhYmVsXCIpO1xuICAgIGNvbnN0IGxhYmVsID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIFwicmVkXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KHJlbGF0aW9uLnRpdGxlKTtcbiAgICB3aW5kb3cubGFiZWwgPSBsYWJlbDtcbiAgICBjb25zdCBib3VuZHMgPSBsYWJlbC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3hcIikuYXR0cihcInhcIiwgYm91bmRzLnggLSBjb25mLnBhZGRpbmcgLyAyKS5hdHRyKFwieVwiLCBib3VuZHMueSAtIGNvbmYucGFkZGluZyAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBib3VuZHMud2lkdGggKyBjb25mLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYm91bmRzLmhlaWdodCArIGNvbmYucGFkZGluZyk7XG4gIH1cbiAgbG9nLmluZm8oXCJSZW5kZXJpbmcgcmVsYXRpb24gXCIgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbikpO1xuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTEgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMSAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMVwiKS5hdHRyKFwieFwiLCBwMV9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAxX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTIgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMiAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMlwiKS5hdHRyKFwieFwiLCBwMl9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAyX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUyKTtcbiAgfVxuICBlZGdlQ291bnQrKztcbn07XG5jb25zdCBkcmF3Q2xhc3MgPSBmdW5jdGlvbihlbGVtLCBjbGFzc0RlZiwgY29uZiwgZGlhZ09iaikge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgY2xhc3MgXCIsIGNsYXNzRGVmLCBjb25mKTtcbiAgY29uc3QgaWQgPSBjbGFzc0RlZi5pZDtcbiAgY29uc3QgY2xhc3NJbmZvID0ge1xuICAgIGlkLFxuICAgIGxhYmVsOiBjbGFzc0RlZi5pZCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfTtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgZGlhZ09iai5kYi5sb29rVXBEb21JZChpZCkpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzR3JvdXBcIik7XG4gIGxldCB0aXRsZTtcbiAgaWYgKGNsYXNzRGVmLmxpbmspIHtcbiAgICB0aXRsZSA9IGcuYXBwZW5kKFwic3ZnOmFcIikuYXR0cihcInhsaW5rOmhyZWZcIiwgY2xhc3NEZWYubGluaykuYXR0cihcInRhcmdldFwiLCBjbGFzc0RlZi5saW5rVGFyZ2V0KS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIGNvbmYudGV4dEhlaWdodCArIGNvbmYucGFkZGluZykuYXR0cihcInhcIiwgMCk7XG4gIH0gZWxzZSB7XG4gICAgdGl0bGUgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nKS5hdHRyKFwieFwiLCAwKTtcbiAgfVxuICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gIGNsYXNzRGVmLmFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24obWVtYmVyKSB7XG4gICAgY29uc3QgdGl0bGVUZXh0MiA9IHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLnRleHQoXCLCq1wiICsgbWVtYmVyICsgXCLCu1wiKTtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIHRpdGxlVGV4dDIuYXR0cihcImR5XCIsIGNvbmYudGV4dEhlaWdodCk7XG4gICAgfVxuICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgfSk7XG4gIGxldCBjbGFzc1RpdGxlU3RyaW5nID0gZ2V0Q2xhc3NUaXRsZVN0cmluZyhjbGFzc0RlZik7XG4gIGNvbnN0IGNsYXNzVGl0bGUgPSB0aXRsZS5hcHBlbmQoXCJ0c3BhblwiKS50ZXh0KGNsYXNzVGl0bGVTdHJpbmcpLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpO1xuICBpZiAoIWlzRmlyc3QpIHtcbiAgICBjbGFzc1RpdGxlLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7XG4gIGNvbnN0IG1lbWJlcnNMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKS5hdHRyKFwieTJcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKTtcbiAgY29uc3QgbWVtYmVycyA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBjb25mLnBhZGRpbmcpLmF0dHIoXCJ5XCIsIHRpdGxlSGVpZ2h0ICsgY29uZi5kaXZpZGVyTWFyZ2luICsgY29uZi50ZXh0SGVpZ2h0KS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzVGV4dFwiKTtcbiAgaXNGaXJzdCA9IHRydWU7XG4gIGNsYXNzRGVmLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbihtZW1iZXIpIHtcbiAgICBhZGRUc3BhbihtZW1iZXJzLCBtZW1iZXIsIGlzRmlyc3QsIGNvbmYpO1xuICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgfSk7XG4gIGNvbnN0IG1lbWJlcnNCb3ggPSBtZW1iZXJzLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IG1ldGhvZHNMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gKyBtZW1iZXJzQm94LmhlaWdodCkuYXR0cihcInkyXCIsIGNvbmYucGFkZGluZyArIHRpdGxlSGVpZ2h0ICsgY29uZi5kaXZpZGVyTWFyZ2luICsgbWVtYmVyc0JveC5oZWlnaHQpO1xuICBjb25zdCBtZXRob2RzID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIGNvbmYucGFkZGluZykuYXR0cihcInlcIiwgdGl0bGVIZWlnaHQgKyAyICogY29uZi5kaXZpZGVyTWFyZ2luICsgbWVtYmVyc0JveC5oZWlnaHQgKyBjb25mLnRleHRIZWlnaHQpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImNsYXNzXCIsIFwiY2xhc3NUZXh0XCIpO1xuICBpc0ZpcnN0ID0gdHJ1ZTtcbiAgY2xhc3NEZWYubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGFkZFRzcGFuKG1ldGhvZHMsIG1ldGhvZCwgaXNGaXJzdCwgY29uZik7XG4gICAgaXNGaXJzdCA9IGZhbHNlO1xuICB9KTtcbiAgY29uc3QgY2xhc3NCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIHZhciBjc3NDbGFzc1N0ciA9IFwiIFwiO1xuICBpZiAoY2xhc3NEZWYuY3NzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgY3NzQ2xhc3NTdHIgPSBjc3NDbGFzc1N0ciArIGNsYXNzRGVmLmNzc0NsYXNzZXMuam9pbihcIiBcIik7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5hdHRyKFwid2lkdGhcIiwgY2xhc3NCb3gud2lkdGggKyAyICogY29uZi5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIGNsYXNzQm94LmhlaWdodCArIGNvbmYucGFkZGluZyArIDAuNSAqIGNvbmYuZGl2aWRlck1hcmdpbikuYXR0cihcImNsYXNzXCIsIGNzc0NsYXNzU3RyKTtcbiAgY29uc3QgcmVjdFdpZHRoID0gcmVjdC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoO1xuICB0aXRsZS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcbiAgICB4LnNldEF0dHJpYnV0ZShcInhcIiwgKHJlY3RXaWR0aCAtIHguZ2V0QkJveCgpLndpZHRoKSAvIDIpO1xuICB9KTtcbiAgaWYgKGNsYXNzRGVmLnRvb2x0aXApIHtcbiAgICB0aXRsZS5pbnNlcnQoXCJ0aXRsZVwiKS50ZXh0KGNsYXNzRGVmLnRvb2x0aXApO1xuICB9XG4gIG1lbWJlcnNMaW5lLmF0dHIoXCJ4MlwiLCByZWN0V2lkdGgpO1xuICBtZXRob2RzTGluZS5hdHRyKFwieDJcIiwgcmVjdFdpZHRoKTtcbiAgY2xhc3NJbmZvLndpZHRoID0gcmVjdFdpZHRoO1xuICBjbGFzc0luZm8uaGVpZ2h0ID0gY2xhc3NCb3guaGVpZ2h0ICsgY29uZi5wYWRkaW5nICsgMC41ICogY29uZi5kaXZpZGVyTWFyZ2luO1xuICByZXR1cm4gY2xhc3NJbmZvO1xufTtcbmNvbnN0IGdldENsYXNzVGl0bGVTdHJpbmcgPSBmdW5jdGlvbihjbGFzc0RlZikge1xuICBsZXQgY2xhc3NUaXRsZVN0cmluZyA9IGNsYXNzRGVmLmlkO1xuICBpZiAoY2xhc3NEZWYudHlwZSkge1xuICAgIGNsYXNzVGl0bGVTdHJpbmcgKz0gXCI8XCIgKyBjbGFzc0RlZi50eXBlICsgXCI+XCI7XG4gIH1cbiAgcmV0dXJuIGNsYXNzVGl0bGVTdHJpbmc7XG59O1xuY29uc3QgZHJhd05vdGUgPSBmdW5jdGlvbihlbGVtLCBub3RlLCBjb25mLCBkaWFnT2JqKSB7XG4gIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyBub3RlIFwiLCBub3RlLCBjb25mKTtcbiAgY29uc3QgaWQgPSBub3RlLmlkO1xuICBjb25zdCBub3RlSW5mbyA9IHtcbiAgICBpZCxcbiAgICB0ZXh0OiBub3RlLnRleHQsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIikuYXR0cihcImlkXCIsIGlkKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc0dyb3VwXCIpO1xuICBsZXQgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieVwiLCBjb25mLnRleHRIZWlnaHQgKyBjb25mLnBhZGRpbmcpLmF0dHIoXCJ4XCIsIDApO1xuICBjb25zdCBsaW5lcyA9IEpTT04ucGFyc2UoYFwiJHtub3RlLnRleHR9XCJgKS5zcGxpdChcIlxcblwiKTtcbiAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lMikge1xuICAgIGxvZy5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7bGluZTJ9YCk7XG4gICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS50ZXh0KGxpbmUyKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZVwiKS5hdHRyKFwiZHlcIiwgY29uZi50ZXh0SGVpZ2h0KTtcbiAgfSk7XG4gIGNvbnN0IG5vdGVCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IHJlY3QgPSBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuYXR0cihcIndpZHRoXCIsIG5vdGVCb3gud2lkdGggKyAyICogY29uZi5wYWRkaW5nKS5hdHRyKFxuICAgIFwiaGVpZ2h0XCIsXG4gICAgbm90ZUJveC5oZWlnaHQgKyBsaW5lcy5sZW5ndGggKiBjb25mLnRleHRIZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW5cbiAgKTtcbiAgY29uc3QgcmVjdFdpZHRoID0gcmVjdC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoO1xuICB0ZXh0Lm5vZGUoKS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgIHguc2V0QXR0cmlidXRlKFwieFwiLCAocmVjdFdpZHRoIC0geC5nZXRCQm94KCkud2lkdGgpIC8gMik7XG4gIH0pO1xuICBub3RlSW5mby53aWR0aCA9IHJlY3RXaWR0aDtcbiAgbm90ZUluZm8uaGVpZ2h0ID0gbm90ZUJveC5oZWlnaHQgKyBsaW5lcy5sZW5ndGggKiBjb25mLnRleHRIZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW47XG4gIHJldHVybiBub3RlSW5mbztcbn07XG5jb25zdCBwYXJzZU1lbWJlciA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgbGV0IGRpc3BsYXlUZXh0ID0gXCJcIjtcbiAgbGV0IGNzc1N0eWxlID0gXCJcIjtcbiAgbGV0IHJldHVyblR5cGUgPSBcIlwiO1xuICBsZXQgdmlzaWJpbGl0eSA9IFwiXCI7XG4gIGxldCBmaXJzdENoYXIgPSB0ZXh0LnN1YnN0cmluZygwLCAxKTtcbiAgbGV0IGxhc3RDaGFyID0gdGV4dC5zdWJzdHJpbmcodGV4dC5sZW5ndGggLSAxLCB0ZXh0Lmxlbmd0aCk7XG4gIGlmIChmaXJzdENoYXIubWF0Y2goL1sjK34tXS8pKSB7XG4gICAgdmlzaWJpbGl0eSA9IGZpcnN0Q2hhcjtcbiAgfVxuICBsZXQgbm9DbGFzc2lmaWVyUmUgPSAvW1xcc1xcdyl+XS87XG4gIGlmICghbGFzdENoYXIubWF0Y2gobm9DbGFzc2lmaWVyUmUpKSB7XG4gICAgY3NzU3R5bGUgPSBwYXJzZUNsYXNzaWZpZXIobGFzdENoYXIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSB2aXNpYmlsaXR5ID09PSBcIlwiID8gMCA6IDE7XG4gIGxldCBlbmRJbmRleCA9IGNzc1N0eWxlID09PSBcIlwiID8gdGV4dC5sZW5ndGggOiB0ZXh0Lmxlbmd0aCAtIDE7XG4gIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gIGNvbnN0IG1ldGhvZFN0YXJ0ID0gdGV4dC5pbmRleE9mKFwiKFwiKTtcbiAgY29uc3QgbWV0aG9kRW5kID0gdGV4dC5pbmRleE9mKFwiKVwiKTtcbiAgY29uc3QgaXNNZXRob2QgPSBtZXRob2RTdGFydCA+IDEgJiYgbWV0aG9kRW5kID4gbWV0aG9kU3RhcnQgJiYgbWV0aG9kRW5kIDw9IHRleHQubGVuZ3RoO1xuICBpZiAoaXNNZXRob2QpIHtcbiAgICBsZXQgbWV0aG9kTmFtZSA9IHRleHQuc3Vic3RyaW5nKDAsIG1ldGhvZFN0YXJ0KS50cmltKCk7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRleHQuc3Vic3RyaW5nKG1ldGhvZFN0YXJ0ICsgMSwgbWV0aG9kRW5kKTtcbiAgICBkaXNwbGF5VGV4dCA9IHZpc2liaWxpdHkgKyBtZXRob2ROYW1lICsgXCIoXCIgKyBwYXJzZUdlbmVyaWNUeXBlcyhwYXJhbWV0ZXJzLnRyaW0oKSkgKyBcIilcIjtcbiAgICBpZiAobWV0aG9kRW5kIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIGxldCBwb3RlbnRpYWxDbGFzc2lmaWVyID0gdGV4dC5zdWJzdHJpbmcobWV0aG9kRW5kICsgMSwgbWV0aG9kRW5kICsgMik7XG4gICAgICBpZiAoY3NzU3R5bGUgPT09IFwiXCIgJiYgIXBvdGVudGlhbENsYXNzaWZpZXIubWF0Y2gobm9DbGFzc2lmaWVyUmUpKSB7XG4gICAgICAgIGNzc1N0eWxlID0gcGFyc2VDbGFzc2lmaWVyKHBvdGVudGlhbENsYXNzaWZpZXIpO1xuICAgICAgICByZXR1cm5UeXBlID0gdGV4dC5zdWJzdHJpbmcobWV0aG9kRW5kICsgMikudHJpbSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuVHlwZSA9IHRleHQuc3Vic3RyaW5nKG1ldGhvZEVuZCArIDEpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXR1cm5UeXBlICE9PSBcIlwiKSB7XG4gICAgICAgIGlmIChyZXR1cm5UeXBlLmNoYXJBdCgwKSA9PT0gXCI6XCIpIHtcbiAgICAgICAgICByZXR1cm5UeXBlID0gcmV0dXJuVHlwZS5zdWJzdHJpbmcoMSkudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblR5cGUgPSBcIiA6IFwiICsgcGFyc2VHZW5lcmljVHlwZXMocmV0dXJuVHlwZSk7XG4gICAgICAgIGRpc3BsYXlUZXh0ICs9IHJldHVyblR5cGU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpc3BsYXlUZXh0ID0gdmlzaWJpbGl0eSArIHBhcnNlR2VuZXJpY1R5cGVzKHRleHQpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGlzcGxheVRleHQsXG4gICAgY3NzU3R5bGVcbiAgfTtcbn07XG5jb25zdCBhZGRUc3BhbiA9IGZ1bmN0aW9uKHRleHRFbCwgdHh0LCBpc0ZpcnN0LCBjb25mKSB7XG4gIGxldCBtZW1iZXIgPSBwYXJzZU1lbWJlcih0eHQpO1xuICBjb25zdCB0U3BhbiA9IHRleHRFbC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCBjb25mLnBhZGRpbmcpLnRleHQobWVtYmVyLmRpc3BsYXlUZXh0KTtcbiAgaWYgKG1lbWJlci5jc3NTdHlsZSAhPT0gXCJcIikge1xuICAgIHRTcGFuLmF0dHIoXCJzdHlsZVwiLCBtZW1iZXIuY3NzU3R5bGUpO1xuICB9XG4gIGlmICghaXNGaXJzdCkge1xuICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG59O1xuY29uc3QgcGFyc2VDbGFzc2lmaWVyID0gZnVuY3Rpb24oY2xhc3NpZmllcikge1xuICBzd2l0Y2ggKGNsYXNzaWZpZXIpIHtcbiAgICBjYXNlIFwiKlwiOlxuICAgICAgcmV0dXJuIFwiZm9udC1zdHlsZTppdGFsaWM7XCI7XG4gICAgY2FzZSBcIiRcIjpcbiAgICAgIHJldHVybiBcInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuY29uc3Qgc3ZnRHJhdyA9IHtcbiAgZ2V0Q2xhc3NUaXRsZVN0cmluZyxcbiAgZHJhd0NsYXNzLFxuICBkcmF3RWRnZSxcbiAgZHJhd05vdGUsXG4gIHBhcnNlTWVtYmVyXG59O1xuZXhwb3J0IHtcbiAgcGFyc2VNZW1iZXIgYXMgcCxcbiAgc3ZnRHJhdyBhcyBzXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/svgDraw-0fcc813d.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js": /*!********************************************************************!*\ !*** ../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"a\": () => (/* binding */ drawBackgroundRect),\n/* harmony export */ \"b\": () => (/* binding */ drawEmbeddedImage),\n/* harmony export */ \"c\": () => (/* binding */ drawImage),\n/* harmony export */ \"d\": () => (/* binding */ drawRect),\n/* harmony export */ \"e\": () => (/* binding */ getTextObj),\n/* harmony export */ \"f\": () => (/* binding */ drawText),\n/* harmony export */ \"g\": () => (/* binding */ getNoteRect)\n/* harmony export */ });\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n\nconst drawRect = function(elem, rectData) {\n const rectElem = elem.append(\"rect\");\n rectElem.attr(\"x\", rectData.x);\n rectElem.attr(\"y\", rectData.y);\n rectElem.attr(\"fill\", rectData.fill);\n rectElem.attr(\"stroke\", rectData.stroke);\n rectElem.attr(\"width\", rectData.width);\n rectElem.attr(\"height\", rectData.height);\n rectElem.attr(\"rx\", rectData.rx);\n rectElem.attr(\"ry\", rectData.ry);\n if (rectData.attrs !== \"undefined\" && rectData.attrs !== null) {\n for (let attrKey in rectData.attrs) {\n rectElem.attr(attrKey, rectData.attrs[attrKey]);\n }\n }\n if (rectData.class !== \"undefined\") {\n rectElem.attr(\"class\", rectData.class);\n }\n return rectElem;\n};\nconst drawBackgroundRect = function(elem, bounds) {\n const rectElem = drawRect(elem, {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n stroke: bounds.stroke,\n class: \"rect\"\n });\n rectElem.lower();\n};\nconst drawText = function(elem, textData) {\n const nText = textData.text.replace(//gi, \" \");\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.attr(\"class\", \"legend\");\n textElem.style(\"text-anchor\", textData.anchor);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.text(nText);\n return textElem;\n};\nconst drawImage = function(elem, x, y, link) {\n const imageElem = elem.append(\"image\");\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__.sanitizeUrl)(link);\n imageElem.attr(\"xlink:href\", sanitizedLink);\n};\nconst drawEmbeddedImage = function(elem, x, y, link) {\n const imageElem = elem.append(\"use\");\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__.sanitizeUrl)(link);\n imageElem.attr(\"xlink:href\", \"#\" + sanitizedLink);\n};\nconst getNoteRect = function() {\n return {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: \"#EDF2AE\",\n stroke: \"#666\",\n anchor: \"start\",\n rx: 0,\n ry: 0\n };\n};\nconst getTextObj = function() {\n return {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: void 0,\n anchor: void 0,\n \"text-anchor\": \"start\",\n style: \"#666\",\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true,\n valign: void 0\n };\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdmdEcmF3Q29tbW9uLWYyNmNhZDM5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9FQUFXO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvRUFBVztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9zdmdEcmF3Q29tbW9uLWYyNmNhZDM5LmpzPzE1YTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2FuaXRpemVVcmwgfSBmcm9tIFwiQGJyYWludHJlZS9zYW5pdGl6ZS11cmxcIjtcbmNvbnN0IGRyYXdSZWN0ID0gZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgY29uc3QgcmVjdEVsZW0gPSBlbGVtLmFwcGVuZChcInJlY3RcIik7XG4gIHJlY3RFbGVtLmF0dHIoXCJ4XCIsIHJlY3REYXRhLngpO1xuICByZWN0RWxlbS5hdHRyKFwieVwiLCByZWN0RGF0YS55KTtcbiAgcmVjdEVsZW0uYXR0cihcImZpbGxcIiwgcmVjdERhdGEuZmlsbCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJzdHJva2VcIiwgcmVjdERhdGEuc3Ryb2tlKTtcbiAgcmVjdEVsZW0uYXR0cihcIndpZHRoXCIsIHJlY3REYXRhLndpZHRoKTtcbiAgcmVjdEVsZW0uYXR0cihcImhlaWdodFwiLCByZWN0RGF0YS5oZWlnaHQpO1xuICByZWN0RWxlbS5hdHRyKFwicnhcIiwgcmVjdERhdGEucngpO1xuICByZWN0RWxlbS5hdHRyKFwicnlcIiwgcmVjdERhdGEucnkpO1xuICBpZiAocmVjdERhdGEuYXR0cnMgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVjdERhdGEuYXR0cnMgIT09IG51bGwpIHtcbiAgICBmb3IgKGxldCBhdHRyS2V5IGluIHJlY3REYXRhLmF0dHJzKSB7XG4gICAgICByZWN0RWxlbS5hdHRyKGF0dHJLZXksIHJlY3REYXRhLmF0dHJzW2F0dHJLZXldKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlY3REYXRhLmNsYXNzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVjdEVsZW0uYXR0cihcImNsYXNzXCIsIHJlY3REYXRhLmNsYXNzKTtcbiAgfVxuICByZXR1cm4gcmVjdEVsZW07XG59O1xuY29uc3QgZHJhd0JhY2tncm91bmRSZWN0ID0gZnVuY3Rpb24oZWxlbSwgYm91bmRzKSB7XG4gIGNvbnN0IHJlY3RFbGVtID0gZHJhd1JlY3QoZWxlbSwge1xuICAgIHg6IGJvdW5kcy5zdGFydHgsXG4gICAgeTogYm91bmRzLnN0YXJ0eSxcbiAgICB3aWR0aDogYm91bmRzLnN0b3B4IC0gYm91bmRzLnN0YXJ0eCxcbiAgICBoZWlnaHQ6IGJvdW5kcy5zdG9weSAtIGJvdW5kcy5zdGFydHksXG4gICAgZmlsbDogYm91bmRzLmZpbGwsXG4gICAgc3Ryb2tlOiBib3VuZHMuc3Ryb2tlLFxuICAgIGNsYXNzOiBcInJlY3RcIlxuICB9KTtcbiAgcmVjdEVsZW0ubG93ZXIoKTtcbn07XG5jb25zdCBkcmF3VGV4dCA9IGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIGNvbnN0IG5UZXh0ID0gdGV4dERhdGEudGV4dC5yZXBsYWNlKC88YnJcXHMqXFwvPz4vZ2ksIFwiIFwiKTtcbiAgY29uc3QgdGV4dEVsZW0gPSBlbGVtLmFwcGVuZChcInRleHRcIik7XG4gIHRleHRFbGVtLmF0dHIoXCJ4XCIsIHRleHREYXRhLngpO1xuICB0ZXh0RWxlbS5hdHRyKFwieVwiLCB0ZXh0RGF0YS55KTtcbiAgdGV4dEVsZW0uYXR0cihcImNsYXNzXCIsIFwibGVnZW5kXCIpO1xuICB0ZXh0RWxlbS5zdHlsZShcInRleHQtYW5jaG9yXCIsIHRleHREYXRhLmFuY2hvcik7XG4gIGlmICh0ZXh0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgdGV4dEVsZW0uYXR0cihcImNsYXNzXCIsIHRleHREYXRhLmNsYXNzKTtcbiAgfVxuICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gIHNwYW4uYXR0cihcInhcIiwgdGV4dERhdGEueCArIHRleHREYXRhLnRleHRNYXJnaW4gKiAyKTtcbiAgc3Bhbi50ZXh0KG5UZXh0KTtcbiAgcmV0dXJuIHRleHRFbGVtO1xufTtcbmNvbnN0IGRyYXdJbWFnZSA9IGZ1bmN0aW9uKGVsZW0sIHgsIHksIGxpbmspIHtcbiAgY29uc3QgaW1hZ2VFbGVtID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ4XCIsIHgpO1xuICBpbWFnZUVsZW0uYXR0cihcInlcIiwgeSk7XG4gIHZhciBzYW5pdGl6ZWRMaW5rID0gc2FuaXRpemVVcmwobGluayk7XG4gIGltYWdlRWxlbS5hdHRyKFwieGxpbms6aHJlZlwiLCBzYW5pdGl6ZWRMaW5rKTtcbn07XG5jb25zdCBkcmF3RW1iZWRkZWRJbWFnZSA9IGZ1bmN0aW9uKGVsZW0sIHgsIHksIGxpbmspIHtcbiAgY29uc3QgaW1hZ2VFbGVtID0gZWxlbS5hcHBlbmQoXCJ1c2VcIik7XG4gIGltYWdlRWxlbS5hdHRyKFwieFwiLCB4KTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ5XCIsIHkpO1xuICBjb25zdCBzYW5pdGl6ZWRMaW5rID0gc2FuaXRpemVVcmwobGluayk7XG4gIGltYWdlRWxlbS5hdHRyKFwieGxpbms6aHJlZlwiLCBcIiNcIiArIHNhbml0aXplZExpbmspO1xufTtcbmNvbnN0IGdldE5vdGVSZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgZmlsbDogXCIjRURGMkFFXCIsXG4gICAgc3Ryb2tlOiBcIiM2NjZcIixcbiAgICBhbmNob3I6IFwic3RhcnRcIixcbiAgICByeDogMCxcbiAgICByeTogMFxuICB9O1xufTtcbmNvbnN0IGdldFRleHRPYmogPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBmaWxsOiB2b2lkIDAsXG4gICAgYW5jaG9yOiB2b2lkIDAsXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBcInN0YXJ0XCIsXG4gICAgc3R5bGU6IFwiIzY2NlwiLFxuICAgIHRleHRNYXJnaW46IDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDAsXG4gICAgdHNwYW46IHRydWUsXG4gICAgdmFsaWduOiB2b2lkIDBcbiAgfTtcbn07XG5leHBvcnQge1xuICBkcmF3QmFja2dyb3VuZFJlY3QgYXMgYSxcbiAgZHJhd0VtYmVkZGVkSW1hZ2UgYXMgYixcbiAgZHJhd0ltYWdlIGFzIGMsXG4gIGRyYXdSZWN0IGFzIGQsXG4gIGdldFRleHRPYmogYXMgZSxcbiAgZHJhd1RleHQgYXMgZixcbiAgZ2V0Tm90ZVJlY3QgYXMgZ1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/svgDrawCommon-f26cad39.js\n"); /***/ }), /***/ "../../../node_modules/mermaid/dist/timeline-definition-5ed366f4.js": /*!**************************************************************************!*\ !*** ../../../node_modules/mermaid/dist/timeline-definition-5ed366f4.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"diagram\": () => (/* binding */ diagram)\n/* harmony export */ });\n/* harmony import */ var _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mermaid-b0ad2de1.js */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ \"../../../node_modules/d3/src/index.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/is_dark.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/lighten.js\");\n/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! khroma */ \"../../../node_modules/khroma/dist/methods/darken.js\");\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ts-dedent */ \"../../../node_modules/ts-dedent/esm/index.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"../../../node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @braintree/sanitize-url */ \"../../../node_modules/mermaid/node_modules/@braintree/sanitize-url/dist/index.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ \"../../../node_modules/dompurify/dist/purify.js\");\n\n\n\n\n\n\n\n\n\n\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"timeline\": 4, \"document\": 5, \"EOF\": 6, \"directive\": 7, \"line\": 8, \"SPACE\": 9, \"statement\": 10, \"NEWLINE\": 11, \"openDirective\": 12, \"typeDirective\": 13, \"closeDirective\": 14, \":\": 15, \"argDirective\": 16, \"title\": 17, \"acc_title\": 18, \"acc_title_value\": 19, \"acc_descr\": 20, \"acc_descr_value\": 21, \"acc_descr_multiline_value\": 22, \"section\": 23, \"period_statement\": 24, \"event_statement\": 25, \"period\": 26, \"event\": 27, \"open_directive\": 28, \"type_directive\": 29, \"arg_directive\": 30, \"close_directive\": 31, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"timeline\", 6: \"EOF\", 9: \"SPACE\", 11: \"NEWLINE\", 15: \":\", 17: \"title\", 18: \"acc_title\", 19: \"acc_title_value\", 20: \"acc_descr\", 21: \"acc_descr_value\", 22: \"acc_descr_multiline_value\", 23: \"section\", 26: \"period\", 27: \"event\", 28: \"open_directive\", 29: \"type_directive\", 30: \"arg_directive\", 31: \"close_directive\" },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 3:\n this.$ = [];\n break;\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n case 8:\n this.$ = [];\n break;\n case 11:\n yy.getCommonDb().setDiagramTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n case 12:\n this.$ = $$[$0].trim();\n yy.getCommonDb().setAccTitle(this.$);\n break;\n case 13:\n case 14:\n this.$ = $$[$0].trim();\n yy.getCommonDb().setAccDescription(this.$);\n break;\n case 15:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n case 19:\n yy.addTask($$[$0], 0, \"\");\n this.$ = $$[$0];\n break;\n case 20:\n yy.addEvent($$[$0].substr(2));\n this.$ = $$[$0];\n break;\n case 21:\n yy.parseDirective(\"%%{\", \"open_directive\");\n break;\n case 22:\n yy.parseDirective($$[$0], \"type_directive\");\n break;\n case 23:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], \"arg_directive\");\n break;\n case 24:\n yy.parseDirective(\"}%%\", \"close_directive\", \"timeline\");\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])],\n defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"open_directive\");\n return 28;\n case 1:\n this.begin(\"type_directive\");\n return 29;\n case 2:\n this.popState();\n this.begin(\"arg_directive\");\n return 15;\n case 3:\n this.popState();\n this.popState();\n return 31;\n case 4:\n return 30;\n case 5:\n break;\n case 6:\n break;\n case 7:\n return 11;\n case 8:\n break;\n case 9:\n break;\n case 10:\n return 4;\n case 11:\n return 17;\n case 12:\n this.begin(\"acc_title\");\n return 18;\n case 13:\n this.popState();\n return \"acc_title_value\";\n case 14:\n this.begin(\"acc_descr\");\n return 20;\n case 15:\n this.popState();\n return \"acc_descr_value\";\n case 16:\n this.begin(\"acc_descr_multiline\");\n break;\n case 17:\n this.popState();\n break;\n case 18:\n return \"acc_descr_multiline_value\";\n case 19:\n return 23;\n case 20:\n return 27;\n case 21:\n return 26;\n case 22:\n return 6;\n case 23:\n return \"INVALID\";\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:#[^\\n]*)/i, /^(?:timeline\\b)/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:section\\s[^#:\\n;]+)/i, /^(?::\\s[^#:\\n;]+)/i, /^(?:[^#:\\n;]+)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"open_directive\": { \"rules\": [1], \"inclusive\": false }, \"type_directive\": { \"rules\": [2, 3], \"inclusive\": false }, \"arg_directive\": { \"rules\": [3, 4], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [17, 18], \"inclusive\": false }, \"acc_descr\": { \"rules\": [15], \"inclusive\": false }, \"acc_title\": { \"rules\": [13], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet currentSection = \"\";\nlet currentTaskId = 0;\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\nconst getCommonDb = () => _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.I;\nconst parseDirective = (statement, context, type) => {\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.J)(globalThis, statement, context, type);\n};\nconst clear = function() {\n sections.length = 0;\n tasks.length = 0;\n currentSection = \"\";\n rawTasks.length = 0;\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.v)();\n};\nconst addSection = function(txt) {\n currentSection = txt;\n sections.push(txt);\n};\nconst getSections = function() {\n return sections;\n};\nconst getTasks = function() {\n let allItemsProcessed = compileTasks();\n const maxDepth = 100;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n tasks.push(...rawTasks);\n return tasks;\n};\nconst addTask = function(period, length, event) {\n const rawTask = {\n id: currentTaskId++,\n section: currentSection,\n type: currentSection,\n task: period,\n score: length ? length : 0,\n //if event is defined, then add it the events array\n events: event ? [event] : []\n };\n rawTasks.push(rawTask);\n};\nconst addEvent = function(event) {\n const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1);\n currentTask.events.push(event);\n};\nconst addTaskOrg = function(descr) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n tasks.push(newTask);\n};\nconst compileTasks = function() {\n const compileTask = function(pos) {\n return rawTasks[pos].processed;\n };\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\nconst timelineDb = {\n clear,\n getCommonDb,\n addSection,\n getSections,\n getTasks,\n addTask,\n addTaskOrg,\n addEvent,\n parseDirective\n};\nconst db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n addEvent,\n addSection,\n addTask,\n addTaskOrg,\n clear,\n default: timelineDb,\n getCommonDb,\n getSections,\n getTasks,\n parseDirective\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst MAX_SECTIONS = 12;\nconst drawRect = function(elem, rectData) {\n const rectElem = elem.append(\"rect\");\n rectElem.attr(\"x\", rectData.x);\n rectElem.attr(\"y\", rectData.y);\n rectElem.attr(\"fill\", rectData.fill);\n rectElem.attr(\"stroke\", rectData.stroke);\n rectElem.attr(\"width\", rectData.width);\n rectElem.attr(\"height\", rectData.height);\n rectElem.attr(\"rx\", rectData.rx);\n rectElem.attr(\"ry\", rectData.ry);\n if (rectData.class !== void 0) {\n rectElem.attr(\"class\", rectData.class);\n }\n return rectElem;\n};\nconst drawFace = function(element, faceData) {\n const radius = 15;\n const circleElement = element.append(\"circle\").attr(\"cx\", faceData.cx).attr(\"cy\", faceData.cy).attr(\"class\", \"face\").attr(\"r\", radius).attr(\"stroke-width\", 2).attr(\"overflow\", \"visible\");\n const face = element.append(\"g\");\n face.append(\"circle\").attr(\"cx\", faceData.cx - radius / 3).attr(\"cy\", faceData.cy - radius / 3).attr(\"r\", 1.5).attr(\"stroke-width\", 2).attr(\"fill\", \"#666\").attr(\"stroke\", \"#666\");\n face.append(\"circle\").attr(\"cx\", faceData.cx + radius / 3).attr(\"cy\", faceData.cy - radius / 3).attr(\"r\", 1.5).attr(\"stroke-width\", 2).attr(\"fill\", \"#666\").attr(\"stroke\", \"#666\");\n function smile(face2) {\n const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);\n face2.append(\"path\").attr(\"class\", \"mouth\").attr(\"d\", arc$1).attr(\"transform\", \"translate(\" + faceData.cx + \",\" + (faceData.cy + 2) + \")\");\n }\n function sad(face2) {\n const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.arc)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);\n face2.append(\"path\").attr(\"class\", \"mouth\").attr(\"d\", arc$1).attr(\"transform\", \"translate(\" + faceData.cx + \",\" + (faceData.cy + 7) + \")\");\n }\n function ambivalent(face2) {\n face2.append(\"line\").attr(\"class\", \"mouth\").attr(\"stroke\", 2).attr(\"x1\", faceData.cx - 5).attr(\"y1\", faceData.cy + 7).attr(\"x2\", faceData.cx + 5).attr(\"y2\", faceData.cy + 7).attr(\"class\", \"mouth\").attr(\"stroke-width\", \"1px\").attr(\"stroke\", \"#666\");\n }\n if (faceData.score > 3) {\n smile(face);\n } else if (faceData.score < 3) {\n sad(face);\n } else {\n ambivalent(face);\n }\n return circleElement;\n};\nconst drawCircle = function(element, circleData) {\n const circleElement = element.append(\"circle\");\n circleElement.attr(\"cx\", circleData.cx);\n circleElement.attr(\"cy\", circleData.cy);\n circleElement.attr(\"class\", \"actor-\" + circleData.pos);\n circleElement.attr(\"fill\", circleData.fill);\n circleElement.attr(\"stroke\", circleData.stroke);\n circleElement.attr(\"r\", circleData.r);\n if (circleElement.class !== void 0) {\n circleElement.attr(\"class\", circleElement.class);\n }\n if (circleData.title !== void 0) {\n circleElement.append(\"title\").text(circleData.title);\n }\n return circleElement;\n};\nconst drawText = function(elem, textData) {\n const nText = textData.text.replace(//gi, \" \");\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.attr(\"class\", \"legend\");\n textElem.style(\"text-anchor\", textData.anchor);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.text(nText);\n return textElem;\n};\nconst drawLabel = function(elem, txtObject) {\n function genPoints(x, y, width, height, cut) {\n return x + \",\" + y + \" \" + (x + width) + \",\" + y + \" \" + (x + width) + \",\" + (y + height - cut) + \" \" + (x + width - cut * 1.2) + \",\" + (y + height) + \" \" + x + \",\" + (y + height);\n }\n const polygon = elem.append(\"polygon\");\n polygon.attr(\"points\", genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n polygon.attr(\"class\", \"labelBox\");\n txtObject.y = txtObject.y + txtObject.labelMargin;\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n drawText(elem, txtObject);\n};\nconst drawSection = function(elem, section, conf) {\n const g = elem.append(\"g\");\n const rect = getNoteRect();\n rect.x = section.x;\n rect.y = section.y;\n rect.fill = section.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect.class = \"journey-section section-type-\" + section.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n _drawTextCandidateFunc(conf)(\n section.text,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: \"journey-section section-type-\" + section.num },\n conf,\n section.colour\n );\n};\nlet taskCount = -1;\nconst drawTask = function(elem, task, conf) {\n const center = task.x + conf.width / 2;\n const g = elem.append(\"g\");\n taskCount++;\n const maxHeight = 300 + 5 * 30;\n g.append(\"line\").attr(\"id\", \"task\" + taskCount).attr(\"x1\", center).attr(\"y1\", task.y).attr(\"x2\", center).attr(\"y2\", maxHeight).attr(\"class\", \"task-line\").attr(\"stroke-width\", \"1px\").attr(\"stroke-dasharray\", \"4 2\").attr(\"stroke\", \"#666\");\n drawFace(g, {\n cx: center,\n cy: 300 + (5 - task.score) * 30,\n score: task.score\n });\n const rect = getNoteRect();\n rect.x = task.x;\n rect.y = task.y;\n rect.fill = task.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect.class = \"task task-type-\" + task.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n task.x + 14;\n _drawTextCandidateFunc(conf)(\n task.task,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: \"task\" },\n conf,\n task.colour\n );\n};\nconst drawBackgroundRect = function(elem, bounds) {\n const rectElem = drawRect(elem, {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n class: \"rect\"\n });\n rectElem.lower();\n};\nconst getTextObj = function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n \"text-anchor\": \"start\",\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0\n };\n};\nconst getNoteRect = function() {\n return {\n x: 0,\n y: 0,\n width: 100,\n anchor: \"start\",\n height: 100,\n rx: 0,\n ry: 0\n };\n};\nconst _drawTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs, colour) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"font-color\", colour).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n const { taskFontSize, taskFontFamily } = conf;\n const lines = content.split(//gi);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).attr(\"fill\", colour).style(\"text-anchor\", \"middle\").style(\"font-size\", taskFontSize).style(\"font-family\", taskFontFamily);\n text.append(\"tspan\").attr(\"x\", x + width / 2).attr(\"dy\", dy).text(lines[i]);\n text.attr(\"y\", y + height / 2).attr(\"dominant-baseline\", \"central\").attr(\"alignment-baseline\", \"central\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const body = g.append(\"switch\");\n const f = body.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"position\", \"fixed\");\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").attr(\"class\", \"label\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, body, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (key in fromTextAttrsDict) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf) {\n return conf.textPlacement === \"fo\" ? byFo : conf.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst initGraphics = function(graphics) {\n graphics.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 5).attr(\"refY\", 2).attr(\"markerWidth\", 6).attr(\"markerHeight\", 4).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0,0 V 4 L6,2 Z\");\n};\nfunction wrap(text, width) {\n text.each(function() {\n var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(this), words = text2.text().split(/(\\s+|
)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr(\"y\"), dy = parseFloat(text2.attr(\"dy\")), tspan = text2.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"y\", y).attr(\"dy\", dy + \"em\");\n for (let j = 0; j < words.length; j++) {\n word = words[words.length - 1 - j];\n line.push(word);\n tspan.text(line.join(\" \").trim());\n if (tspan.node().getComputedTextLength() > width || word === \"
\") {\n line.pop();\n tspan.text(line.join(\" \").trim());\n if (word === \"
\") {\n line = [\"\"];\n } else {\n line = [word];\n }\n tspan = text2.append(\"tspan\").attr(\"x\", 0).attr(\"y\", y).attr(\"dy\", lineHeight + \"em\").text(word);\n }\n }\n });\n}\nconst drawNode = function(elem, node, fullSection, conf) {\n const section = fullSection % MAX_SECTIONS - 1;\n const nodeElem = elem.append(\"g\");\n node.section = section;\n nodeElem.attr(\n \"class\",\n (node.class ? node.class + \" \" : \"\") + \"timeline-node \" + (\"section-\" + section)\n );\n const bkgElem = nodeElem.append(\"g\");\n const textElem = nodeElem.append(\"g\");\n const txt = textElem.append(\"text\").text(node.descr).attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").call(wrap, node.width);\n const bbox = txt.node().getBBox();\n const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace(\"px\", \"\") : conf.fontSize;\n node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n node.height = Math.max(node.height, node.maxHeight);\n node.width = node.width + 2 * node.padding;\n textElem.attr(\"transform\", \"translate(\" + node.width / 2 + \", \" + node.padding / 2 + \")\");\n defaultBkg(bkgElem, node, section);\n return node;\n};\nconst getVirtualNodeHeight = function(elem, node, conf) {\n const textElem = elem.append(\"g\");\n const txt = textElem.append(\"text\").text(node.descr).attr(\"dy\", \"1em\").attr(\"alignment-baseline\", \"middle\").attr(\"dominant-baseline\", \"middle\").attr(\"text-anchor\", \"middle\").call(wrap, node.width);\n const bbox = txt.node().getBBox();\n const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace(\"px\", \"\") : conf.fontSize;\n textElem.remove();\n return bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n};\nconst defaultBkg = function(elem, node, section) {\n const rd = 5;\n elem.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + node.type).attr(\n \"d\",\n `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z`\n );\n elem.append(\"line\").attr(\"class\", \"node-line-\" + section).attr(\"x1\", 0).attr(\"y1\", node.height).attr(\"x2\", node.width).attr(\"y2\", node.height);\n};\nconst svgDraw = {\n drawRect,\n drawCircle,\n drawSection,\n drawText,\n drawLabel,\n drawTask,\n drawBackgroundRect,\n getTextObj,\n getNoteRect,\n initGraphics,\n drawNode,\n getVirtualNodeHeight\n};\nconst draw = function(text, id, version, diagObj) {\n var _a, _b, _c, _d;\n const conf = (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.c)();\n const LEFT_MARGIN = conf.leftMargin ?? 50;\n (_b = (_a = diagObj.db).clear) == null ? void 0 : _b.call(_a);\n diagObj.parser.parse(text + \"\\n\");\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"timeline\", diagObj.db);\n const securityLevel = conf.securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? (\n // @ts-ignore d3 types are wrong\n (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(sandboxElement.nodes()[0].contentDocument.body)\n ) : (0,d3__WEBPACK_IMPORTED_MODULE_0__.select)(\"body\");\n const svg = root.select(\"#\" + id);\n svg.append(\"g\");\n const tasks2 = diagObj.db.getTasks();\n const title = diagObj.db.getCommonDb().getDiagramTitle();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"task\", tasks2);\n svgDraw.initGraphics(svg);\n const sections2 = diagObj.db.getSections();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"sections\", sections2);\n let maxSectionHeight = 0;\n let maxTaskHeight = 0;\n let depthY = 0;\n let sectionBeginY = 0;\n let masterX = 50 + LEFT_MARGIN;\n let masterY = 50;\n sectionBeginY = 50;\n let sectionNumber = 0;\n let hasSections = true;\n sections2.forEach(function(section) {\n const sectionNode = {\n number: sectionNumber,\n descr: section,\n section: sectionNumber,\n width: 150,\n padding: 20,\n maxHeight: maxSectionHeight\n };\n const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"sectionHeight before draw\", sectionHeight);\n maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20);\n });\n let maxEventCount = 0;\n let maxEventLineLength = 0;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"tasks.length\", tasks2.length);\n for (const [i, task] of tasks2.entries()) {\n const taskNode = {\n number: i,\n descr: task,\n section: task.section,\n width: 150,\n padding: 20,\n maxHeight: maxTaskHeight\n };\n const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"taskHeight before draw\", taskHeight);\n maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20);\n maxEventCount = Math.max(maxEventCount, task.events.length);\n let maxEventLineLengthTemp = 0;\n for (let j = 0; j < task.events.length; j++) {\n const event = task.events[j];\n const eventNode = {\n descr: event,\n section: task.section,\n number: task.section,\n width: 150,\n padding: 20,\n maxHeight: 50\n };\n maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf);\n }\n maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp);\n }\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"maxSectionHeight before draw\", maxSectionHeight);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"maxTaskHeight before draw\", maxTaskHeight);\n if (sections2 && sections2.length > 0) {\n sections2.forEach((section) => {\n const tasksForSection = tasks2.filter((task) => task.section === section);\n const sectionNode = {\n number: sectionNumber,\n descr: section,\n section: sectionNumber,\n width: 200 * Math.max(tasksForSection.length, 1) - 50,\n padding: 20,\n maxHeight: maxSectionHeight\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"sectionNode\", sectionNode);\n const sectionNodeWrapper = svg.append(\"g\");\n const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf);\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"sectionNode output\", node);\n sectionNodeWrapper.attr(\"transform\", `translate(${masterX}, ${sectionBeginY})`);\n masterY += maxSectionHeight + 50;\n if (tasksForSection.length > 0) {\n drawTasks(\n svg,\n tasksForSection,\n sectionNumber,\n masterX,\n masterY,\n maxTaskHeight,\n conf,\n maxEventCount,\n maxEventLineLength,\n maxSectionHeight,\n false\n );\n }\n masterX += 200 * Math.max(tasksForSection.length, 1);\n masterY = sectionBeginY;\n sectionNumber++;\n });\n } else {\n hasSections = false;\n drawTasks(\n svg,\n tasks2,\n sectionNumber,\n masterX,\n masterY,\n maxTaskHeight,\n conf,\n maxEventCount,\n maxEventLineLength,\n maxSectionHeight,\n true\n );\n }\n const box = svg.node().getBBox();\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"bounds\", box);\n if (title) {\n svg.append(\"text\").text(title).attr(\"x\", box.width / 2 - LEFT_MARGIN).attr(\"font-size\", \"4ex\").attr(\"font-weight\", \"bold\").attr(\"y\", 20);\n }\n depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100;\n const lineWrapper = svg.append(\"g\").attr(\"class\", \"lineWrapper\");\n lineWrapper.append(\"line\").attr(\"x1\", LEFT_MARGIN).attr(\"y1\", depthY).attr(\"x2\", box.width + 3 * LEFT_MARGIN).attr(\"y2\", depthY).attr(\"stroke-width\", 4).attr(\"stroke\", \"black\").attr(\"marker-end\", \"url(#arrowhead)\");\n (0,_mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.p)(\n void 0,\n svg,\n ((_c = conf.timeline) == null ? void 0 : _c.padding) ?? 50,\n ((_d = conf.timeline) == null ? void 0 : _d.useMaxWidth) ?? false\n );\n};\nconst drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) {\n var _a;\n for (const task of tasks2) {\n const taskNode = {\n descr: task.task,\n section: sectionColor,\n number: sectionColor,\n width: 150,\n padding: 20,\n maxHeight: maxTaskHeight\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"taskNode\", taskNode);\n const taskWrapper = diagram2.append(\"g\").attr(\"class\", \"taskWrapper\");\n const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf);\n const taskHeight = node.height;\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"taskHeight after draw\", taskHeight);\n taskWrapper.attr(\"transform\", `translate(${masterX}, ${masterY})`);\n maxTaskHeight = Math.max(maxTaskHeight, taskHeight);\n if (task.events) {\n const lineWrapper = diagram2.append(\"g\").attr(\"class\", \"lineWrapper\");\n let lineLength = maxTaskHeight;\n masterY += 100;\n lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf);\n masterY -= 100;\n lineWrapper.append(\"line\").attr(\"x1\", masterX + 190 / 2).attr(\"y1\", masterY + maxTaskHeight).attr(\"x2\", masterX + 190 / 2).attr(\n \"y2\",\n masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120\n ).attr(\"stroke-width\", 2).attr(\"stroke\", \"black\").attr(\"marker-end\", \"url(#arrowhead)\").attr(\"stroke-dasharray\", \"5,5\");\n }\n masterX = masterX + 200;\n if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) {\n sectionColor++;\n }\n }\n masterY = masterY - 10;\n};\nconst drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) {\n let maxEventHeight = 0;\n const eventBeginY = masterY;\n masterY = masterY + 100;\n for (const event of events) {\n const eventNode = {\n descr: event,\n section: sectionColor,\n number: sectionColor,\n width: 150,\n padding: 20,\n maxHeight: 50\n };\n _mermaid_b0ad2de1_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(\"eventNode\", eventNode);\n const eventWrapper = diagram2.append(\"g\").attr(\"class\", \"eventWrapper\");\n const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf);\n const eventHeight = node.height;\n maxEventHeight = maxEventHeight + eventHeight;\n eventWrapper.attr(\"transform\", `translate(${masterX}, ${masterY})`);\n masterY = masterY + 10 + eventHeight;\n }\n masterY = eventBeginY;\n return maxEventHeight;\n};\nconst renderer = {\n setConf: () => {\n },\n draw\n};\nconst genSections = (options) => {\n let sections2 = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n options[\"lineColor\" + i] = options[\"lineColor\" + i] || options[\"cScaleInv\" + i];\n if ((0,khroma__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(options[\"lineColor\" + i])) {\n options[\"lineColor\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(options[\"lineColor\" + i], 20);\n } else {\n options[\"lineColor\" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(options[\"lineColor\" + i], 20);\n }\n }\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n const sw = \"\" + (17 - 3 * i);\n sections2 += `\n .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path {\n fill: ${options[\"cScale\" + i]};\n }\n .section-${i - 1} text {\n fill: ${options[\"cScaleLabel\" + i]};\n }\n .node-icon-${i - 1} {\n font-size: 40px;\n color: ${options[\"cScaleLabel\" + i]};\n }\n .section-edge-${i - 1}{\n stroke: ${options[\"cScale\" + i]};\n }\n .edge-depth-${i - 1}{\n stroke-width: ${sw};\n }\n .section-${i - 1} line {\n stroke: ${options[\"cScaleInv\" + i]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${options[\"cScaleLabel\" + i]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `;\n }\n return sections2;\n};\nconst getStyles = (options) => `\n .edge {\n stroke-width: 3;\n }\n ${genSections(options)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${options.git0};\n }\n .section-root text {\n fill: ${options.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`;\nconst styles = getStyles;\nconst diagram = {\n db,\n renderer,\n parser: parser$1,\n styles\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC90aW1lbGluZS1kZWZpbml0aW9uLTVlZDM2NmY0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBNkk7QUFDNUc7QUFDZ0I7QUFDOUI7QUFDSjtBQUNrQjtBQUNkO0FBQ1c7QUFDZDtBQUNjO0FBQzlCO0FBQ0E7QUFDQSxzQkFBc0IsZ0JBQWdCLEtBQUs7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMLFVBQVU7QUFDVixnQkFBZ0IsNGlCQUE0aUI7QUFDNWpCLGtCQUFrQix5VUFBeVU7QUFDM1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTCxjQUFjLG9DQUFvQyxJQUFJLFFBQVEsbUJBQW1CLE1BQU0sS0FBSyxvQ0FBb0MsSUFBSSxtQkFBbUIsSUFBSSxhQUFhLElBQUksMEpBQTBKLElBQUksV0FBVyxJQUFJLDhCQUE4Qix5Q0FBeUMsV0FBVyxxQkFBcUIsOEdBQThHLHFEQUFxRCxhQUFhLElBQUksYUFBYSwySEFBMkgsYUFBYSxJQUFJLHFCQUFxQixJQUFJLGFBQWEsc0VBQXNFLGlCQUFpQixJQUFJLGFBQWEsSUFBSSxhQUFhO0FBQzU2QixzQkFBc0IsaURBQWlEO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCx1QkFBdUIsbUJBQW1CLGtDQUFrQyxxQkFBcUIsMEJBQTBCLHFCQUFxQixpR0FBaUcsNkhBQTZILGdCQUFnQixlQUFlLDRCQUE0QixzQkFBc0IsbUJBQW1CO0FBQ2xkLG9CQUFvQixvQkFBb0Isa0NBQWtDLHNCQUFzQixxQ0FBcUMscUJBQXFCLHFDQUFxQywyQkFBMkIsdUNBQXVDLGlCQUFpQixtQ0FBbUMsaUJBQWlCLG1DQUFtQyxlQUFlO0FBQ3hYO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbURBQVE7QUFDbEM7QUFDQSxFQUFFLHVEQUFnQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHVEQUFPO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdCQUF3QixpQkFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix1Q0FBRztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUNBQUc7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sc0RBQXNEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGVBQWU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUkseURBQVM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxRQUFRLElBQUksUUFBUTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwrQkFBK0I7QUFDakQ7QUFDQSxRQUFRLGtEQUFNO0FBQ2QsaUNBQWlDLGtEQUFPO0FBQ3hDLE1BQU07QUFDTixpQ0FBaUMsa0RBQU07QUFDdkM7QUFDQTtBQUNBLGtCQUFrQiwrQkFBK0I7QUFDakQ7QUFDQTtBQUNBLGVBQWUsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsT0FBTyxtQkFBbUIsT0FBTztBQUNoRyxjQUFjO0FBQ2Q7QUFDQSxlQUFlLE9BQU87QUFDdEIsYUFBYTtBQUNiO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZUFBZTtBQUNmO0FBQ0Esb0JBQW9CO0FBQ3BCLGdCQUFnQjtBQUNoQjtBQUNBLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEI7QUFDQSxlQUFlLE9BQU87QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvdGltZWxpbmUtZGVmaW5pdGlvbi01ZWQzNjZmNC5qcz9hMmJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEkgYXMgY29tbW9uRGIsIEogYXMgcGFyc2VEaXJlY3RpdmUkMSwgdiBhcyBjbGVhciQxLCBjIGFzIGdldENvbmZpZywgbCBhcyBsb2csIHAgYXMgc2V0dXBHcmFwaFZpZXdib3ggfSBmcm9tIFwiLi9tZXJtYWlkLWIwYWQyZGUxLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIGFyYyB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgaXNEYXJrLCBsaWdodGVuLCBkYXJrZW4gfSBmcm9tIFwia2hyb21hXCI7XG5pbXBvcnQgXCJ0cy1kZWRlbnRcIjtcbmltcG9ydCBcImRheWpzXCI7XG5pbXBvcnQgXCJAYnJhaW50cmVlL3Nhbml0aXplLXVybFwiO1xuaW1wb3J0IFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgXCJsb2Rhc2gtZXMvbWVtb2l6ZS5qc1wiO1xuaW1wb3J0IFwic3R5bGlzXCI7XG5pbXBvcnQgXCJsb2Rhc2gtZXMvaXNFbXB0eS5qc1wiO1xudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KVxuICAgICAgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgJFYwID0gWzEsIDJdLCAkVjEgPSBbMSwgNV0sICRWMiA9IFs2LCA5LCAxMSwgMTcsIDE4LCAyMCwgMjIsIDIzLCAyNiwgMjcsIDI4XSwgJFYzID0gWzEsIDE1XSwgJFY0ID0gWzEsIDE2XSwgJFY1ID0gWzEsIDE3XSwgJFY2ID0gWzEsIDE4XSwgJFY3ID0gWzEsIDE5XSwgJFY4ID0gWzEsIDIzXSwgJFY5ID0gWzEsIDI0XSwgJFZhID0gWzEsIDI3XSwgJFZiID0gWzQsIDYsIDksIDExLCAxNywgMTgsIDIwLCAyMiwgMjMsIDI2LCAyNywgMjhdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwidGltZWxpbmVcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcIkVPRlwiOiA2LCBcImRpcmVjdGl2ZVwiOiA3LCBcImxpbmVcIjogOCwgXCJTUEFDRVwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJORVdMSU5FXCI6IDExLCBcIm9wZW5EaXJlY3RpdmVcIjogMTIsIFwidHlwZURpcmVjdGl2ZVwiOiAxMywgXCJjbG9zZURpcmVjdGl2ZVwiOiAxNCwgXCI6XCI6IDE1LCBcImFyZ0RpcmVjdGl2ZVwiOiAxNiwgXCJ0aXRsZVwiOiAxNywgXCJhY2NfdGl0bGVcIjogMTgsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDE5LCBcImFjY19kZXNjclwiOiAyMCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMjEsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAyMiwgXCJzZWN0aW9uXCI6IDIzLCBcInBlcmlvZF9zdGF0ZW1lbnRcIjogMjQsIFwiZXZlbnRfc3RhdGVtZW50XCI6IDI1LCBcInBlcmlvZFwiOiAyNiwgXCJldmVudFwiOiAyNywgXCJvcGVuX2RpcmVjdGl2ZVwiOiAyOCwgXCJ0eXBlX2RpcmVjdGl2ZVwiOiAyOSwgXCJhcmdfZGlyZWN0aXZlXCI6IDMwLCBcImNsb3NlX2RpcmVjdGl2ZVwiOiAzMSwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwidGltZWxpbmVcIiwgNjogXCJFT0ZcIiwgOTogXCJTUEFDRVwiLCAxMTogXCJORVdMSU5FXCIsIDE1OiBcIjpcIiwgMTc6IFwidGl0bGVcIiwgMTg6IFwiYWNjX3RpdGxlXCIsIDE5OiBcImFjY190aXRsZV92YWx1ZVwiLCAyMDogXCJhY2NfZGVzY3JcIiwgMjE6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDIyOiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjM6IFwic2VjdGlvblwiLCAyNjogXCJwZXJpb2RcIiwgMjc6IFwiZXZlbnRcIiwgMjg6IFwib3Blbl9kaXJlY3RpdmVcIiwgMjk6IFwidHlwZV9kaXJlY3RpdmVcIiwgMzA6IFwiYXJnX2RpcmVjdGl2ZVwiLCAzMTogXCJjbG9zZV9kaXJlY3RpdmVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzMsIDJdLCBbNSwgMF0sIFs1LCAyXSwgWzgsIDJdLCBbOCwgMV0sIFs4LCAxXSwgWzgsIDFdLCBbNywgNF0sIFs3LCA2XSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzI0LCAxXSwgWzI1LCAxXSwgWzEyLCAxXSwgWzEzLCAxXSwgWzE2LCAxXSwgWzE0LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkuZ2V0Q29tbW9uRGIoKS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkuYWRkVGFzaygkJFskMF0sIDAsIFwiXCIpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICB5eS5hZGRFdmVudCgkJFskMF0uc3Vic3RyKDIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgeXkucGFyc2VEaXJlY3RpdmUoXCIlJXtcIiwgXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB5eS5wYXJzZURpcmVjdGl2ZSgkJFskMF0sIFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgJCRbJDBdID0gJCRbJDBdLnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpO1xuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKCQkWyQwXSwgXCJhcmdfZGlyZWN0aXZlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnBhcnNlRGlyZWN0aXZlKFwifSUlXCIsIFwiY2xvc2VfZGlyZWN0aXZlXCIsIFwidGltZWxpbmVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogJFYwLCA3OiAzLCAxMjogNCwgMjg6ICRWMSB9LCB7IDE6IFszXSB9LCBvKCRWMiwgWzIsIDNdLCB7IDU6IDYgfSksIHsgMzogNywgNDogJFYwLCA3OiAzLCAxMjogNCwgMjg6ICRWMSB9LCB7IDEzOiA4LCAyOTogWzEsIDldIH0sIHsgMjk6IFsyLCAyMV0gfSwgeyA2OiBbMSwgMTBdLCA3OiAyMiwgODogMTEsIDk6IFsxLCAxMl0sIDEwOiAxMywgMTE6IFsxLCAxNF0sIDEyOiA0LCAxNzogJFYzLCAxODogJFY0LCAyMDogJFY1LCAyMjogJFY2LCAyMzogJFY3LCAyNDogMjAsIDI1OiAyMSwgMjY6ICRWOCwgMjc6ICRWOSwgMjg6ICRWMSB9LCB7IDE6IFsyLCAyXSB9LCB7IDE0OiAyNSwgMTU6IFsxLCAyNl0sIDMxOiAkVmEgfSwgbyhbMTUsIDMxXSwgWzIsIDIyXSksIG8oJFYyLCBbMiwgOF0sIHsgMTogWzIsIDFdIH0pLCBvKCRWMiwgWzIsIDRdKSwgeyA3OiAyMiwgMTA6IDI4LCAxMjogNCwgMTc6ICRWMywgMTg6ICRWNCwgMjA6ICRWNSwgMjI6ICRWNiwgMjM6ICRWNywgMjQ6IDIwLCAyNTogMjEsIDI2OiAkVjgsIDI3OiAkVjksIDI4OiAkVjEgfSwgbygkVjIsIFsyLCA2XSksIG8oJFYyLCBbMiwgN10pLCBvKCRWMiwgWzIsIDExXSksIHsgMTk6IFsxLCAyOV0gfSwgeyAyMTogWzEsIDMwXSB9LCBvKCRWMiwgWzIsIDE0XSksIG8oJFYyLCBbMiwgMTVdKSwgbygkVjIsIFsyLCAxNl0pLCBvKCRWMiwgWzIsIDE3XSksIG8oJFYyLCBbMiwgMThdKSwgbygkVjIsIFsyLCAxOV0pLCBvKCRWMiwgWzIsIDIwXSksIHsgMTE6IFsxLCAzMV0gfSwgeyAxNjogMzIsIDMwOiBbMSwgMzNdIH0sIHsgMTE6IFsyLCAyNF0gfSwgbygkVjIsIFsyLCA1XSksIG8oJFYyLCBbMiwgMTJdKSwgbygkVjIsIFsyLCAxM10pLCBvKCRWYiwgWzIsIDldKSwgeyAxNDogMzQsIDMxOiAkVmEgfSwgeyAzMTogWzIsIDIzXSB9LCB7IDExOiBbMSwgMzVdIH0sIG8oJFZiLCBbMiwgMTBdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgNTogWzIsIDIxXSwgNzogWzIsIDJdLCAyNzogWzIsIDI0XSwgMzM6IFsyLCAyM10gfSxcbiAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIHZhciBzeW1ib2wsIHN0YXRlLCBhY3Rpb24sIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuICB2YXIgbGV4ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiBmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJvcGVuX2RpcmVjdGl2ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyODtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidHlwZV9kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFyZ19kaXJlY3RpdmVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAzMDtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICByZXR1cm4gMTc7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiBbL14oPzolJVxceykvaSwgL14oPzooKD86KD8hXFx9JSUpW146Ll0pKikpL2ksIC9eKD86OikvaSwgL14oPzpcXH0lJSkvaSwgL14oPzooKD86KD8hXFx9JSUpLnxcXG4pKikpL2ksIC9eKD86JSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbXFxuXSspL2ksIC9eKD86XFxzKykvaSwgL14oPzojW15cXG5dKikvaSwgL14oPzp0aW1lbGluZVxcYikvaSwgL14oPzp0aXRsZVxcc1teI1xcbjtdKykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86c2VjdGlvblxcc1teIzpcXG47XSspL2ksIC9eKD86Olxcc1teIzpcXG47XSspL2ksIC9eKD86W14jOlxcbjtdKykvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcIm9wZW5fZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHlwZV9kaXJlY3RpdmVcIjogeyBcInJ1bGVzXCI6IFsyLCAzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhcmdfZGlyZWN0aXZlXCI6IHsgXCJydWxlc1wiOiBbMywgNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzE3LCAxOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMTVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzEzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTQsIDE2LCAxOSwgMjAsIDIxLCAyMiwgMjNdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbmNvbnN0IHBhcnNlciQxID0gcGFyc2VyO1xubGV0IGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbmxldCBjdXJyZW50VGFza0lkID0gMDtcbmNvbnN0IHNlY3Rpb25zID0gW107XG5jb25zdCB0YXNrcyA9IFtdO1xuY29uc3QgcmF3VGFza3MgPSBbXTtcbmNvbnN0IGdldENvbW1vbkRiID0gKCkgPT4gY29tbW9uRGI7XG5jb25zdCBwYXJzZURpcmVjdGl2ZSA9IChzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpID0+IHtcbiAgcGFyc2VEaXJlY3RpdmUkMShnbG9iYWxUaGlzLCBzdGF0ZW1lbnQsIGNvbnRleHQsIHR5cGUpO1xufTtcbmNvbnN0IGNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRhc2tzLmxlbmd0aCA9IDA7XG4gIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbiAgcmF3VGFza3MubGVuZ3RoID0gMDtcbiAgY2xlYXIkMSgpO1xufTtcbmNvbnN0IGFkZFNlY3Rpb24gPSBmdW5jdGlvbih0eHQpIHtcbiAgY3VycmVudFNlY3Rpb24gPSB0eHQ7XG4gIHNlY3Rpb25zLnB1c2godHh0KTtcbn07XG5jb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2VjdGlvbnM7XG59O1xuY29uc3QgZ2V0VGFza3MgPSBmdW5jdGlvbigpIHtcbiAgbGV0IGFsbEl0ZW1zUHJvY2Vzc2VkID0gY29tcGlsZVRhc2tzKCk7XG4gIGNvbnN0IG1heERlcHRoID0gMTAwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MucHVzaCguLi5yYXdUYXNrcyk7XG4gIHJldHVybiB0YXNrcztcbn07XG5jb25zdCBhZGRUYXNrID0gZnVuY3Rpb24ocGVyaW9kLCBsZW5ndGgsIGV2ZW50KSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgaWQ6IGN1cnJlbnRUYXNrSWQrKyxcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICB0YXNrOiBwZXJpb2QsXG4gICAgc2NvcmU6IGxlbmd0aCA/IGxlbmd0aCA6IDAsXG4gICAgLy9pZiBldmVudCBpcyBkZWZpbmVkLCB0aGVuIGFkZCBpdCB0aGUgZXZlbnRzIGFycmF5XG4gICAgZXZlbnRzOiBldmVudCA/IFtldmVudF0gOiBbXVxuICB9O1xuICByYXdUYXNrcy5wdXNoKHJhd1Rhc2spO1xufTtcbmNvbnN0IGFkZEV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgY29uc3QgY3VycmVudFRhc2sgPSByYXdUYXNrcy5maW5kKCh0YXNrKSA9PiB0YXNrLmlkID09PSBjdXJyZW50VGFza0lkIC0gMSk7XG4gIGN1cnJlbnRUYXNrLmV2ZW50cy5wdXNoKGV2ZW50KTtcbn07XG5jb25zdCBhZGRUYXNrT3JnID0gZnVuY3Rpb24oZGVzY3IpIHtcbiAgY29uc3QgbmV3VGFzayA9IHtcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICBkZXNjcmlwdGlvbjogZGVzY3IsXG4gICAgdGFzazogZGVzY3IsXG4gICAgY2xhc3NlczogW11cbiAgfTtcbiAgdGFza3MucHVzaChuZXdUYXNrKTtcbn07XG5jb25zdCBjb21waWxlVGFza3MgPSBmdW5jdGlvbigpIHtcbiAgY29uc3QgY29tcGlsZVRhc2sgPSBmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH07XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn07XG5jb25zdCB0aW1lbGluZURiID0ge1xuICBjbGVhcixcbiAgZ2V0Q29tbW9uRGIsXG4gIGFkZFNlY3Rpb24sXG4gIGdldFNlY3Rpb25zLFxuICBnZXRUYXNrcyxcbiAgYWRkVGFzayxcbiAgYWRkVGFza09yZyxcbiAgYWRkRXZlbnQsXG4gIHBhcnNlRGlyZWN0aXZlXG59O1xuY29uc3QgZGIgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSgvKiBAX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHtcbiAgX19wcm90b19fOiBudWxsLFxuICBhZGRFdmVudCxcbiAgYWRkU2VjdGlvbixcbiAgYWRkVGFzayxcbiAgYWRkVGFza09yZyxcbiAgY2xlYXIsXG4gIGRlZmF1bHQ6IHRpbWVsaW5lRGIsXG4gIGdldENvbW1vbkRiLFxuICBnZXRTZWN0aW9ucyxcbiAgZ2V0VGFza3MsXG4gIHBhcnNlRGlyZWN0aXZlXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpO1xuY29uc3QgTUFYX1NFQ1RJT05TID0gMTI7XG5jb25zdCBkcmF3UmVjdCA9IGZ1bmN0aW9uKGVsZW0sIHJlY3REYXRhKSB7XG4gIGNvbnN0IHJlY3RFbGVtID0gZWxlbS5hcHBlbmQoXCJyZWN0XCIpO1xuICByZWN0RWxlbS5hdHRyKFwieFwiLCByZWN0RGF0YS54KTtcbiAgcmVjdEVsZW0uYXR0cihcInlcIiwgcmVjdERhdGEueSk7XG4gIHJlY3RFbGVtLmF0dHIoXCJmaWxsXCIsIHJlY3REYXRhLmZpbGwpO1xuICByZWN0RWxlbS5hdHRyKFwic3Ryb2tlXCIsIHJlY3REYXRhLnN0cm9rZSk7XG4gIHJlY3RFbGVtLmF0dHIoXCJ3aWR0aFwiLCByZWN0RGF0YS53aWR0aCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJoZWlnaHRcIiwgcmVjdERhdGEuaGVpZ2h0KTtcbiAgcmVjdEVsZW0uYXR0cihcInJ4XCIsIHJlY3REYXRhLnJ4KTtcbiAgcmVjdEVsZW0uYXR0cihcInJ5XCIsIHJlY3REYXRhLnJ5KTtcbiAgaWYgKHJlY3REYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICByZWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgcmVjdERhdGEuY2xhc3MpO1xuICB9XG4gIHJldHVybiByZWN0RWxlbTtcbn07XG5jb25zdCBkcmF3RmFjZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGZhY2VEYXRhKSB7XG4gIGNvbnN0IHJhZGl1cyA9IDE1O1xuICBjb25zdCBjaXJjbGVFbGVtZW50ID0gZWxlbWVudC5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4KS5hdHRyKFwiY3lcIiwgZmFjZURhdGEuY3kpLmF0dHIoXCJjbGFzc1wiLCBcImZhY2VcIikuYXR0cihcInJcIiwgcmFkaXVzKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJvdmVyZmxvd1wiLCBcInZpc2libGVcIik7XG4gIGNvbnN0IGZhY2UgPSBlbGVtZW50LmFwcGVuZChcImdcIik7XG4gIGZhY2UuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCBmYWNlRGF0YS5jeCAtIHJhZGl1cyAvIDMpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSAtIHJhZGl1cyAvIDMpLmF0dHIoXCJyXCIsIDEuNSkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKS5hdHRyKFwiZmlsbFwiLCBcIiM2NjZcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIGZhY2UuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCBmYWNlRGF0YS5jeCArIHJhZGl1cyAvIDMpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSAtIHJhZGl1cyAvIDMpLmF0dHIoXCJyXCIsIDEuNSkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKS5hdHRyKFwiZmlsbFwiLCBcIiM2NjZcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIGZ1bmN0aW9uIHNtaWxlKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjJDEgPSBhcmMoKS5zdGFydEFuZ2xlKE1hdGguUEkgLyAyKS5lbmRBbmdsZSgzICogKE1hdGguUEkgLyAyKSkuaW5uZXJSYWRpdXMocmFkaXVzIC8gMikub3V0ZXJSYWRpdXMocmFkaXVzIC8gMi4yKTtcbiAgICBmYWNlMi5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJkXCIsIGFyYyQxKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgZmFjZURhdGEuY3ggKyBcIixcIiArIChmYWNlRGF0YS5jeSArIDIpICsgXCIpXCIpO1xuICB9XG4gIGZ1bmN0aW9uIHNhZChmYWNlMikge1xuICAgIGNvbnN0IGFyYyQxID0gYXJjKCkuc3RhcnRBbmdsZSgzICogTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDUgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjJDEpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgNykgKyBcIilcIik7XG4gIH1cbiAgZnVuY3Rpb24gYW1iaXZhbGVudChmYWNlMikge1xuICAgIGZhY2UyLmFwcGVuZChcImxpbmVcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcInN0cm9rZVwiLCAyKS5hdHRyKFwieDFcIiwgZmFjZURhdGEuY3ggLSA1KS5hdHRyKFwieTFcIiwgZmFjZURhdGEuY3kgKyA3KS5hdHRyKFwieDJcIiwgZmFjZURhdGEuY3ggKyA1KS5hdHRyKFwieTJcIiwgZmFjZURhdGEuY3kgKyA3KS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB4XCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjNjY2XCIpO1xuICB9XG4gIGlmIChmYWNlRGF0YS5zY29yZSA+IDMpIHtcbiAgICBzbWlsZShmYWNlKTtcbiAgfSBlbHNlIGlmIChmYWNlRGF0YS5zY29yZSA8IDMpIHtcbiAgICBzYWQoZmFjZSk7XG4gIH0gZWxzZSB7XG4gICAgYW1iaXZhbGVudChmYWNlKTtcbiAgfVxuICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbn07XG5jb25zdCBkcmF3Q2lyY2xlID0gZnVuY3Rpb24oZWxlbWVudCwgY2lyY2xlRGF0YSkge1xuICBjb25zdCBjaXJjbGVFbGVtZW50ID0gZWxlbWVudC5hcHBlbmQoXCJjaXJjbGVcIik7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImN4XCIsIGNpcmNsZURhdGEuY3gpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjeVwiLCBjaXJjbGVEYXRhLmN5KTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgXCJhY3Rvci1cIiArIGNpcmNsZURhdGEucG9zKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiZmlsbFwiLCBjaXJjbGVEYXRhLmZpbGwpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJzdHJva2VcIiwgY2lyY2xlRGF0YS5zdHJva2UpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJyXCIsIGNpcmNsZURhdGEucik7XG4gIGlmIChjaXJjbGVFbGVtZW50LmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjbGFzc1wiLCBjaXJjbGVFbGVtZW50LmNsYXNzKTtcbiAgfVxuICBpZiAoY2lyY2xlRGF0YS50aXRsZSAhPT0gdm9pZCAwKSB7XG4gICAgY2lyY2xlRWxlbWVudC5hcHBlbmQoXCJ0aXRsZVwiKS50ZXh0KGNpcmNsZURhdGEudGl0bGUpO1xuICB9XG4gIHJldHVybiBjaXJjbGVFbGVtZW50O1xufTtcbmNvbnN0IGRyYXdUZXh0ID0gZnVuY3Rpb24oZWxlbSwgdGV4dERhdGEpIHtcbiAgY29uc3QgblRleHQgPSB0ZXh0RGF0YS50ZXh0LnJlcGxhY2UoLzxiclxccypcXC8/Pi9naSwgXCIgXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gIHRleHRFbGVtLmF0dHIoXCJ5XCIsIHRleHREYXRhLnkpO1xuICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJsZWdlbmRcIik7XG4gIHRleHRFbGVtLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHNwYW4gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0c3BhblwiKTtcbiAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbiAqIDIpO1xuICBzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59O1xuY29uc3QgZHJhd0xhYmVsID0gZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBjb25zdCBwb2x5Z29uID0gZWxlbS5hcHBlbmQoXCJwb2x5Z29uXCIpO1xuICBwb2x5Z29uLmF0dHIoXCJwb2ludHNcIiwgZ2VuUG9pbnRzKHR4dE9iamVjdC54LCB0eHRPYmplY3QueSwgNTAsIDIwLCA3KSk7XG4gIHBvbHlnb24uYXR0cihcImNsYXNzXCIsIFwibGFiZWxCb3hcIik7XG4gIHR4dE9iamVjdC55ID0gdHh0T2JqZWN0LnkgKyB0eHRPYmplY3QubGFiZWxNYXJnaW47XG4gIHR4dE9iamVjdC54ID0gdHh0T2JqZWN0LnggKyAwLjUgKiB0eHRPYmplY3QubGFiZWxNYXJnaW47XG4gIGRyYXdUZXh0KGVsZW0sIHR4dE9iamVjdCk7XG59O1xuY29uc3QgZHJhd1NlY3Rpb24gPSBmdW5jdGlvbihlbGVtLCBzZWN0aW9uLCBjb25mKSB7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSBzZWN0aW9uLng7XG4gIHJlY3QueSA9IHNlY3Rpb24ueTtcbiAgcmVjdC5maWxsID0gc2VjdGlvbi5maWxsO1xuICByZWN0LndpZHRoID0gY29uZi53aWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBjb25mLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS1cIiArIHNlY3Rpb24ubnVtO1xuICByZWN0LnJ4ID0gMztcbiAgcmVjdC5yeSA9IDM7XG4gIGRyYXdSZWN0KGcsIHJlY3QpO1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYpKFxuICAgIHNlY3Rpb24udGV4dCxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bSB9LFxuICAgIGNvbmYsXG4gICAgc2VjdGlvbi5jb2xvdXJcbiAgKTtcbn07XG5sZXQgdGFza0NvdW50ID0gLTE7XG5jb25zdCBkcmF3VGFzayA9IGZ1bmN0aW9uKGVsZW0sIHRhc2ssIGNvbmYpIHtcbiAgY29uc3QgY2VudGVyID0gdGFzay54ICsgY29uZi53aWR0aCAvIDI7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIHRhc2tDb3VudCsrO1xuICBjb25zdCBtYXhIZWlnaHQgPSAzMDAgKyA1ICogMzA7XG4gIGcuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiaWRcIiwgXCJ0YXNrXCIgKyB0YXNrQ291bnQpLmF0dHIoXCJ4MVwiLCBjZW50ZXIpLmF0dHIoXCJ5MVwiLCB0YXNrLnkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCBtYXhIZWlnaHQpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2stbGluZVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB4XCIpLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiNCAyXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjNjY2XCIpO1xuICBkcmF3RmFjZShnLCB7XG4gICAgY3g6IGNlbnRlcixcbiAgICBjeTogMzAwICsgKDUgLSB0YXNrLnNjb3JlKSAqIDMwLFxuICAgIHNjb3JlOiB0YXNrLnNjb3JlXG4gIH0pO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gdGFzay54O1xuICByZWN0LnkgPSB0YXNrLnk7XG4gIHJlY3QuZmlsbCA9IHRhc2suZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYud2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gY29uZi5oZWlnaHQ7XG4gIHJlY3QuY2xhc3MgPSBcInRhc2sgdGFzay10eXBlLVwiICsgdGFzay5udW07XG4gIHJlY3QucnggPSAzO1xuICByZWN0LnJ5ID0gMztcbiAgZHJhd1JlY3QoZywgcmVjdCk7XG4gIHRhc2sueCArIDE0O1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYpKFxuICAgIHRhc2sudGFzayxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcInRhc2tcIiB9LFxuICAgIGNvbmYsXG4gICAgdGFzay5jb2xvdXJcbiAgKTtcbn07XG5jb25zdCBkcmF3QmFja2dyb3VuZFJlY3QgPSBmdW5jdGlvbihlbGVtLCBib3VuZHMpIHtcbiAgY29uc3QgcmVjdEVsZW0gPSBkcmF3UmVjdChlbGVtLCB7XG4gICAgeDogYm91bmRzLnN0YXJ0eCxcbiAgICB5OiBib3VuZHMuc3RhcnR5LFxuICAgIHdpZHRoOiBib3VuZHMuc3RvcHggLSBib3VuZHMuc3RhcnR4LFxuICAgIGhlaWdodDogYm91bmRzLnN0b3B5IC0gYm91bmRzLnN0YXJ0eSxcbiAgICBmaWxsOiBib3VuZHMuZmlsbCxcbiAgICBjbGFzczogXCJyZWN0XCJcbiAgfSk7XG4gIHJlY3RFbGVtLmxvd2VyKCk7XG59O1xuY29uc3QgZ2V0VGV4dE9iaiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBmaWxsOiB2b2lkIDAsXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBcInN0YXJ0XCIsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB0ZXh0TWFyZ2luOiAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwXG4gIH07XG59O1xuY29uc3QgZ2V0Tm90ZVJlY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBhbmNob3I6IFwic3RhcnRcIixcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICByeDogMCxcbiAgICByeTogMFxuICB9O1xufTtcbmNvbnN0IF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29sb3VyKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMiArIDUpLnN0eWxlKFwiZm9udC1jb2xvclwiLCBjb2xvdXIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYsIGNvbG91cikge1xuICAgIGNvbnN0IHsgdGFza0ZvbnRTaXplLCB0YXNrRm9udEZhbWlseSB9ID0gY29uZjtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoLzxiclxccypcXC8/Pi9naSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZHkgPSBpICogdGFza0ZvbnRTaXplIC0gdGFza0ZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuYXR0cihcImZpbGxcIiwgY29sb3VyKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1zaXplXCIsIHRhc2tGb250U2l6ZSkuc3R5bGUoXCJmb250LWZhbWlseVwiLCB0YXNrRm9udEZhbWlseSk7XG4gICAgICB0ZXh0LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJkeVwiLCBkeSkudGV4dChsaW5lc1tpXSk7XG4gICAgICB0ZXh0LmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZikge1xuICAgIGNvbnN0IGJvZHkgPSBnLmFwcGVuZChcInN3aXRjaFwiKTtcbiAgICBjb25zdCBmID0gYm9keS5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJwb3NpdGlvblwiLCBcImZpeGVkXCIpO1xuICAgIGNvbnN0IHRleHQgPSBmLmFwcGVuZChcInhodG1sOmRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZVwiKS5zdHlsZShcImhlaWdodFwiLCBcIjEwMCVcIikuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgdGV4dC5hcHBlbmQoXCJkaXZcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWxcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKS5zdHlsZShcInRleHQtYWxpZ25cIiwgXCJjZW50ZXJcIikuc3R5bGUoXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIGJ5VHNwYW4oY29udGVudCwgYm9keSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgICAgdG9UZXh0LmF0dHIoa2V5LCBmcm9tVGV4dEF0dHJzRGljdFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbmYpIHtcbiAgICByZXR1cm4gY29uZi50ZXh0UGxhY2VtZW50ID09PSBcImZvXCIgPyBieUZvIDogY29uZi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbmNvbnN0IGluaXRHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKSB7XG4gIGdyYXBoaWNzLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImFycm93aGVhZFwiKS5hdHRyKFwicmVmWFwiLCA1KS5hdHRyKFwicmVmWVwiLCAyKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgNikuYXR0cihcIm1hcmtlckhlaWdodFwiLCA0KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwLDAgViA0IEw2LDIgWlwiKTtcbn07XG5mdW5jdGlvbiB3cmFwKHRleHQsIHdpZHRoKSB7XG4gIHRleHQuZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgdGV4dDIgPSBzZWxlY3QodGhpcyksIHdvcmRzID0gdGV4dDIudGV4dCgpLnNwbGl0KC8oXFxzK3w8YnI+KS8pLnJldmVyc2UoKSwgd29yZCwgbGluZSA9IFtdLCBsaW5lSGVpZ2h0ID0gMS4xLCB5ID0gdGV4dDIuYXR0cihcInlcIiksIGR5ID0gcGFyc2VGbG9hdCh0ZXh0Mi5hdHRyKFwiZHlcIikpLCB0c3BhbiA9IHRleHQyLnRleHQobnVsbCkuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgeSkuYXR0cihcImR5XCIsIGR5ICsgXCJlbVwiKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICB3b3JkID0gd29yZHNbd29yZHMubGVuZ3RoIC0gMSAtIGpdO1xuICAgICAgbGluZS5wdXNoKHdvcmQpO1xuICAgICAgdHNwYW4udGV4dChsaW5lLmpvaW4oXCIgXCIpLnRyaW0oKSk7XG4gICAgICBpZiAodHNwYW4ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpID4gd2lkdGggfHwgd29yZCA9PT0gXCI8YnI+XCIpIHtcbiAgICAgICAgbGluZS5wb3AoKTtcbiAgICAgICAgdHNwYW4udGV4dChsaW5lLmpvaW4oXCIgXCIpLnRyaW0oKSk7XG4gICAgICAgIGlmICh3b3JkID09PSBcIjxicj5cIikge1xuICAgICAgICAgIGxpbmUgPSBbXCJcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZSA9IFt3b3JkXTtcbiAgICAgICAgfVxuICAgICAgICB0c3BhbiA9IHRleHQyLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJkeVwiLCBsaW5lSGVpZ2h0ICsgXCJlbVwiKS50ZXh0KHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5jb25zdCBkcmF3Tm9kZSA9IGZ1bmN0aW9uKGVsZW0sIG5vZGUsIGZ1bGxTZWN0aW9uLCBjb25mKSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBmdWxsU2VjdGlvbiAlIE1BWF9TRUNUSU9OUyAtIDE7XG4gIGNvbnN0IG5vZGVFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBub2RlLnNlY3Rpb24gPSBzZWN0aW9uO1xuICBub2RlRWxlbS5hdHRyKFxuICAgIFwiY2xhc3NcIixcbiAgICAobm9kZS5jbGFzcyA/IG5vZGUuY2xhc3MgKyBcIiBcIiA6IFwiXCIpICsgXCJ0aW1lbGluZS1ub2RlIFwiICsgKFwic2VjdGlvbi1cIiArIHNlY3Rpb24pXG4gICk7XG4gIGNvbnN0IGJrZ0VsZW0gPSBub2RlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IG5vZGVFbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHR4dCA9IHRleHRFbGVtLmFwcGVuZChcInRleHRcIikudGV4dChub2RlLmRlc2NyKS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmNhbGwod3JhcCwgbm9kZS53aWR0aCk7XG4gIGNvbnN0IGJib3ggPSB0eHQubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3QgZm9udFNpemUgPSBjb25mLmZvbnRTaXplICYmIGNvbmYuZm9udFNpemUucmVwbGFjZSA/IGNvbmYuZm9udFNpemUucmVwbGFjZShcInB4XCIsIFwiXCIpIDogY29uZi5mb250U2l6ZTtcbiAgbm9kZS5oZWlnaHQgPSBiYm94LmhlaWdodCArIGZvbnRTaXplICogMS4xICogMC41ICsgbm9kZS5wYWRkaW5nO1xuICBub2RlLmhlaWdodCA9IE1hdGgubWF4KG5vZGUuaGVpZ2h0LCBub2RlLm1heEhlaWdodCk7XG4gIG5vZGUud2lkdGggPSBub2RlLndpZHRoICsgMiAqIG5vZGUucGFkZGluZztcbiAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIG5vZGUud2lkdGggLyAyICsgXCIsIFwiICsgbm9kZS5wYWRkaW5nIC8gMiArIFwiKVwiKTtcbiAgZGVmYXVsdEJrZyhia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuY29uc3QgZ2V0VmlydHVhbE5vZGVIZWlnaHQgPSBmdW5jdGlvbihlbGVtLCBub2RlLCBjb25mKSB7XG4gIGNvbnN0IHRleHRFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB0eHQgPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0ZXh0XCIpLnRleHQobm9kZS5kZXNjcikuYXR0cihcImR5XCIsIFwiMWVtXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5jYWxsKHdyYXAsIG5vZGUud2lkdGgpO1xuICBjb25zdCBiYm94ID0gdHh0Lm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IGZvbnRTaXplID0gY29uZi5mb250U2l6ZSAmJiBjb25mLmZvbnRTaXplLnJlcGxhY2UgPyBjb25mLmZvbnRTaXplLnJlcGxhY2UoXCJweFwiLCBcIlwiKSA6IGNvbmYuZm9udFNpemU7XG4gIHRleHRFbGVtLnJlbW92ZSgpO1xuICByZXR1cm4gYmJveC5oZWlnaHQgKyBmb250U2l6ZSAqIDEuMSAqIDAuNSArIG5vZGUucGFkZGluZztcbn07XG5jb25zdCBkZWZhdWx0QmtnID0gZnVuY3Rpb24oZWxlbSwgbm9kZSwgc2VjdGlvbikge1xuICBjb25zdCByZCA9IDU7XG4gIGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsgbm9kZS5pZCkuYXR0cihcImNsYXNzXCIsIFwibm9kZS1ia2cgbm9kZS1cIiArIG5vZGUudHlwZSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgJHtub2RlLmhlaWdodCAtIHJkfSB2JHstbm9kZS5oZWlnaHQgKyAyICogcmR9IHEwLC01IDUsLTUgaCR7bm9kZS53aWR0aCAtIDIgKiByZH0gcTUsMCA1LDUgdiR7bm9kZS5oZWlnaHQgLSByZH0gSDAgWmBcbiAgKTtcbiAgZWxlbS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtbGluZS1cIiArIHNlY3Rpb24pLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgbm9kZS5oZWlnaHQpLmF0dHIoXCJ4MlwiLCBub2RlLndpZHRoKS5hdHRyKFwieTJcIiwgbm9kZS5oZWlnaHQpO1xufTtcbmNvbnN0IHN2Z0RyYXcgPSB7XG4gIGRyYXdSZWN0LFxuICBkcmF3Q2lyY2xlLFxuICBkcmF3U2VjdGlvbixcbiAgZHJhd1RleHQsXG4gIGRyYXdMYWJlbCxcbiAgZHJhd1Rhc2ssXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZ2V0VGV4dE9iaixcbiAgZ2V0Tm90ZVJlY3QsXG4gIGluaXRHcmFwaGljcyxcbiAgZHJhd05vZGUsXG4gIGdldFZpcnR1YWxOb2RlSGVpZ2h0XG59O1xuY29uc3QgZHJhdyA9IGZ1bmN0aW9uKHRleHQsIGlkLCB2ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpO1xuICBjb25zdCBMRUZUX01BUkdJTiA9IGNvbmYubGVmdE1hcmdpbiA/PyA1MDtcbiAgKF9iID0gKF9hID0gZGlhZ09iai5kYikuY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgZGlhZ09iai5wYXJzZXIucGFyc2UodGV4dCArIFwiXFxuXCIpO1xuICBsb2cuZGVidWcoXCJ0aW1lbGluZVwiLCBkaWFnT2JqLmRiKTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGNvbmYuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gKFxuICAgIC8vIEB0cy1pZ25vcmUgZDMgdHlwZXMgYXJlIHdyb25nXG4gICAgc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpXG4gICkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHRhc2tzMiA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldENvbW1vbkRiKCkuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGxvZy5kZWJ1ZyhcInRhc2tcIiwgdGFza3MyKTtcbiAgc3ZnRHJhdy5pbml0R3JhcGhpY3Moc3ZnKTtcbiAgY29uc3Qgc2VjdGlvbnMyID0gZGlhZ09iai5kYi5nZXRTZWN0aW9ucygpO1xuICBsb2cuZGVidWcoXCJzZWN0aW9uc1wiLCBzZWN0aW9uczIpO1xuICBsZXQgbWF4U2VjdGlvbkhlaWdodCA9IDA7XG4gIGxldCBtYXhUYXNrSGVpZ2h0ID0gMDtcbiAgbGV0IGRlcHRoWSA9IDA7XG4gIGxldCBzZWN0aW9uQmVnaW5ZID0gMDtcbiAgbGV0IG1hc3RlclggPSA1MCArIExFRlRfTUFSR0lOO1xuICBsZXQgbWFzdGVyWSA9IDUwO1xuICBzZWN0aW9uQmVnaW5ZID0gNTA7XG4gIGxldCBzZWN0aW9uTnVtYmVyID0gMDtcbiAgbGV0IGhhc1NlY3Rpb25zID0gdHJ1ZTtcbiAgc2VjdGlvbnMyLmZvckVhY2goZnVuY3Rpb24oc2VjdGlvbikge1xuICAgIGNvbnN0IHNlY3Rpb25Ob2RlID0ge1xuICAgICAgbnVtYmVyOiBzZWN0aW9uTnVtYmVyLFxuICAgICAgZGVzY3I6IHNlY3Rpb24sXG4gICAgICBzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuICAgICAgd2lkdGg6IDE1MCxcbiAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhTZWN0aW9uSGVpZ2h0XG4gICAgfTtcbiAgICBjb25zdCBzZWN0aW9uSGVpZ2h0ID0gc3ZnRHJhdy5nZXRWaXJ0dWFsTm9kZUhlaWdodChzdmcsIHNlY3Rpb25Ob2RlLCBjb25mKTtcbiAgICBsb2cuZGVidWcoXCJzZWN0aW9uSGVpZ2h0IGJlZm9yZSBkcmF3XCIsIHNlY3Rpb25IZWlnaHQpO1xuICAgIG1heFNlY3Rpb25IZWlnaHQgPSBNYXRoLm1heChtYXhTZWN0aW9uSGVpZ2h0LCBzZWN0aW9uSGVpZ2h0ICsgMjApO1xuICB9KTtcbiAgbGV0IG1heEV2ZW50Q291bnQgPSAwO1xuICBsZXQgbWF4RXZlbnRMaW5lTGVuZ3RoID0gMDtcbiAgbG9nLmRlYnVnKFwidGFza3MubGVuZ3RoXCIsIHRhc2tzMi5sZW5ndGgpO1xuICBmb3IgKGNvbnN0IFtpLCB0YXNrXSBvZiB0YXNrczIuZW50cmllcygpKSB7XG4gICAgY29uc3QgdGFza05vZGUgPSB7XG4gICAgICBudW1iZXI6IGksXG4gICAgICBkZXNjcjogdGFzayxcbiAgICAgIHNlY3Rpb246IHRhc2suc2VjdGlvbixcbiAgICAgIHdpZHRoOiAxNTAsXG4gICAgICBwYWRkaW5nOiAyMCxcbiAgICAgIG1heEhlaWdodDogbWF4VGFza0hlaWdodFxuICAgIH07XG4gICAgY29uc3QgdGFza0hlaWdodCA9IHN2Z0RyYXcuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCB0YXNrTm9kZSwgY29uZik7XG4gICAgbG9nLmRlYnVnKFwidGFza0hlaWdodCBiZWZvcmUgZHJhd1wiLCB0YXNrSGVpZ2h0KTtcbiAgICBtYXhUYXNrSGVpZ2h0ID0gTWF0aC5tYXgobWF4VGFza0hlaWdodCwgdGFza0hlaWdodCArIDIwKTtcbiAgICBtYXhFdmVudENvdW50ID0gTWF0aC5tYXgobWF4RXZlbnRDb3VudCwgdGFzay5ldmVudHMubGVuZ3RoKTtcbiAgICBsZXQgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0YXNrLmV2ZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgZXZlbnQgPSB0YXNrLmV2ZW50c1tqXTtcbiAgICAgIGNvbnN0IGV2ZW50Tm9kZSA9IHtcbiAgICAgICAgZGVzY3I6IGV2ZW50LFxuICAgICAgICBzZWN0aW9uOiB0YXNrLnNlY3Rpb24sXG4gICAgICAgIG51bWJlcjogdGFzay5zZWN0aW9uLFxuICAgICAgICB3aWR0aDogMTUwLFxuICAgICAgICBwYWRkaW5nOiAyMCxcbiAgICAgICAgbWF4SGVpZ2h0OiA1MFxuICAgICAgfTtcbiAgICAgIG1heEV2ZW50TGluZUxlbmd0aFRlbXAgKz0gc3ZnRHJhdy5nZXRWaXJ0dWFsTm9kZUhlaWdodChzdmcsIGV2ZW50Tm9kZSwgY29uZik7XG4gICAgfVxuICAgIG1heEV2ZW50TGluZUxlbmd0aCA9IE1hdGgubWF4KG1heEV2ZW50TGluZUxlbmd0aCwgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCk7XG4gIH1cbiAgbG9nLmRlYnVnKFwibWF4U2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhd1wiLCBtYXhTZWN0aW9uSGVpZ2h0KTtcbiAgbG9nLmRlYnVnKFwibWF4VGFza0hlaWdodCBiZWZvcmUgZHJhd1wiLCBtYXhUYXNrSGVpZ2h0KTtcbiAgaWYgKHNlY3Rpb25zMiAmJiBzZWN0aW9uczIubGVuZ3RoID4gMCkge1xuICAgIHNlY3Rpb25zMi5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCB0YXNrc0ZvclNlY3Rpb24gPSB0YXNrczIuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLnNlY3Rpb24gPT09IHNlY3Rpb24pO1xuICAgICAgY29uc3Qgc2VjdGlvbk5vZGUgPSB7XG4gICAgICAgIG51bWJlcjogc2VjdGlvbk51bWJlcixcbiAgICAgICAgZGVzY3I6IHNlY3Rpb24sXG4gICAgICAgIHNlY3Rpb246IHNlY3Rpb25OdW1iZXIsXG4gICAgICAgIHdpZHRoOiAyMDAgKiBNYXRoLm1heCh0YXNrc0ZvclNlY3Rpb24ubGVuZ3RoLCAxKSAtIDUwLFxuICAgICAgICBwYWRkaW5nOiAyMCxcbiAgICAgICAgbWF4SGVpZ2h0OiBtYXhTZWN0aW9uSGVpZ2h0XG4gICAgICB9O1xuICAgICAgbG9nLmRlYnVnKFwic2VjdGlvbk5vZGVcIiwgc2VjdGlvbk5vZGUpO1xuICAgICAgY29uc3Qgc2VjdGlvbk5vZGVXcmFwcGVyID0gc3ZnLmFwcGVuZChcImdcIik7XG4gICAgICBjb25zdCBub2RlID0gc3ZnRHJhdy5kcmF3Tm9kZShzZWN0aW9uTm9kZVdyYXBwZXIsIHNlY3Rpb25Ob2RlLCBzZWN0aW9uTnVtYmVyLCBjb25mKTtcbiAgICAgIGxvZy5kZWJ1ZyhcInNlY3Rpb25Ob2RlIG91dHB1dFwiLCBub2RlKTtcbiAgICAgIHNlY3Rpb25Ob2RlV3JhcHBlci5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHttYXN0ZXJYfSwgJHtzZWN0aW9uQmVnaW5ZfSlgKTtcbiAgICAgIG1hc3RlclkgKz0gbWF4U2VjdGlvbkhlaWdodCArIDUwO1xuICAgICAgaWYgKHRhc2tzRm9yU2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRyYXdUYXNrcyhcbiAgICAgICAgICBzdmcsXG4gICAgICAgICAgdGFza3NGb3JTZWN0aW9uLFxuICAgICAgICAgIHNlY3Rpb25OdW1iZXIsXG4gICAgICAgICAgbWFzdGVyWCxcbiAgICAgICAgICBtYXN0ZXJZLFxuICAgICAgICAgIG1heFRhc2tIZWlnaHQsXG4gICAgICAgICAgY29uZixcbiAgICAgICAgICBtYXhFdmVudENvdW50LFxuICAgICAgICAgIG1heEV2ZW50TGluZUxlbmd0aCxcbiAgICAgICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBtYXN0ZXJYICs9IDIwMCAqIE1hdGgubWF4KHRhc2tzRm9yU2VjdGlvbi5sZW5ndGgsIDEpO1xuICAgICAgbWFzdGVyWSA9IHNlY3Rpb25CZWdpblk7XG4gICAgICBzZWN0aW9uTnVtYmVyKys7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaGFzU2VjdGlvbnMgPSBmYWxzZTtcbiAgICBkcmF3VGFza3MoXG4gICAgICBzdmcsXG4gICAgICB0YXNrczIsXG4gICAgICBzZWN0aW9uTnVtYmVyLFxuICAgICAgbWFzdGVyWCxcbiAgICAgIG1hc3RlclksXG4gICAgICBtYXhUYXNrSGVpZ2h0LFxuICAgICAgY29uZixcbiAgICAgIG1heEV2ZW50Q291bnQsXG4gICAgICBtYXhFdmVudExpbmVMZW5ndGgsXG4gICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cbiAgY29uc3QgYm94ID0gc3ZnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGxvZy5kZWJ1ZyhcImJvdW5kc1wiLCBib3gpO1xuICBpZiAodGl0bGUpIHtcbiAgICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBib3gud2lkdGggLyAyIC0gTEVGVF9NQVJHSU4pLmF0dHIoXCJmb250LXNpemVcIiwgXCI0ZXhcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKS5hdHRyKFwieVwiLCAyMCk7XG4gIH1cbiAgZGVwdGhZID0gaGFzU2VjdGlvbnMgPyBtYXhTZWN0aW9uSGVpZ2h0ICsgbWF4VGFza0hlaWdodCArIDE1MCA6IG1heFRhc2tIZWlnaHQgKyAxMDA7XG4gIGNvbnN0IGxpbmVXcmFwcGVyID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGluZVdyYXBwZXJcIik7XG4gIGxpbmVXcmFwcGVyLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIExFRlRfTUFSR0lOKS5hdHRyKFwieTFcIiwgZGVwdGhZKS5hdHRyKFwieDJcIiwgYm94LndpZHRoICsgMyAqIExFRlRfTUFSR0lOKS5hdHRyKFwieTJcIiwgZGVwdGhZKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDQpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybCgjYXJyb3doZWFkKVwiKTtcbiAgc2V0dXBHcmFwaFZpZXdib3goXG4gICAgdm9pZCAwLFxuICAgIHN2ZyxcbiAgICAoKF9jID0gY29uZi50aW1lbGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLnBhZGRpbmcpID8/IDUwLFxuICAgICgoX2QgPSBjb25mLnRpbWVsaW5lKSA9PSBudWxsID8gdm9pZCAwIDogX2QudXNlTWF4V2lkdGgpID8/IGZhbHNlXG4gICk7XG59O1xuY29uc3QgZHJhd1Rhc2tzID0gZnVuY3Rpb24oZGlhZ3JhbTIsIHRhc2tzMiwgc2VjdGlvbkNvbG9yLCBtYXN0ZXJYLCBtYXN0ZXJZLCBtYXhUYXNrSGVpZ2h0LCBjb25mLCBtYXhFdmVudENvdW50LCBtYXhFdmVudExpbmVMZW5ndGgsIG1heFNlY3Rpb25IZWlnaHQsIGlzV2l0aG91dFNlY3Rpb25zKSB7XG4gIHZhciBfYTtcbiAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzMikge1xuICAgIGNvbnN0IHRhc2tOb2RlID0ge1xuICAgICAgZGVzY3I6IHRhc2sudGFzayxcbiAgICAgIHNlY3Rpb246IHNlY3Rpb25Db2xvcixcbiAgICAgIG51bWJlcjogc2VjdGlvbkNvbG9yLFxuICAgICAgd2lkdGg6IDE1MCxcbiAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhUYXNrSGVpZ2h0XG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJ0YXNrTm9kZVwiLCB0YXNrTm9kZSk7XG4gICAgY29uc3QgdGFza1dyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2tXcmFwcGVyXCIpO1xuICAgIGNvbnN0IG5vZGUgPSBzdmdEcmF3LmRyYXdOb2RlKHRhc2tXcmFwcGVyLCB0YXNrTm9kZSwgc2VjdGlvbkNvbG9yLCBjb25mKTtcbiAgICBjb25zdCB0YXNrSGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgbG9nLmRlYnVnKFwidGFza0hlaWdodCBhZnRlciBkcmF3XCIsIHRhc2tIZWlnaHQpO1xuICAgIHRhc2tXcmFwcGVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke21hc3Rlclh9LCAke21hc3Rlcll9KWApO1xuICAgIG1heFRhc2tIZWlnaHQgPSBNYXRoLm1heChtYXhUYXNrSGVpZ2h0LCB0YXNrSGVpZ2h0KTtcbiAgICBpZiAodGFzay5ldmVudHMpIHtcbiAgICAgIGNvbnN0IGxpbmVXcmFwcGVyID0gZGlhZ3JhbTIuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsaW5lV3JhcHBlclwiKTtcbiAgICAgIGxldCBsaW5lTGVuZ3RoID0gbWF4VGFza0hlaWdodDtcbiAgICAgIG1hc3RlclkgKz0gMTAwO1xuICAgICAgbGluZUxlbmd0aCA9IGxpbmVMZW5ndGggKyBkcmF3RXZlbnRzKGRpYWdyYW0yLCB0YXNrLmV2ZW50cywgc2VjdGlvbkNvbG9yLCBtYXN0ZXJYLCBtYXN0ZXJZLCBjb25mKTtcbiAgICAgIG1hc3RlclkgLT0gMTAwO1xuICAgICAgbGluZVdyYXBwZXIuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgbWFzdGVyWCArIDE5MCAvIDIpLmF0dHIoXCJ5MVwiLCBtYXN0ZXJZICsgbWF4VGFza0hlaWdodCkuYXR0cihcIngyXCIsIG1hc3RlclggKyAxOTAgLyAyKS5hdHRyKFxuICAgICAgICBcInkyXCIsXG4gICAgICAgIG1hc3RlclkgKyBtYXhUYXNrSGVpZ2h0ICsgKGlzV2l0aG91dFNlY3Rpb25zID8gbWF4VGFza0hlaWdodCA6IG1heFNlY3Rpb25IZWlnaHQpICsgbWF4RXZlbnRMaW5lTGVuZ3RoICsgMTIwXG4gICAgICApLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKCNhcnJvd2hlYWQpXCIpLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiNSw1XCIpO1xuICAgIH1cbiAgICBtYXN0ZXJYID0gbWFzdGVyWCArIDIwMDtcbiAgICBpZiAoaXNXaXRob3V0U2VjdGlvbnMgJiYgISgoX2EgPSBjb25mLnRpbWVsaW5lKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZGlzYWJsZU11bHRpY29sb3IpKSB7XG4gICAgICBzZWN0aW9uQ29sb3IrKztcbiAgICB9XG4gIH1cbiAgbWFzdGVyWSA9IG1hc3RlclkgLSAxMDtcbn07XG5jb25zdCBkcmF3RXZlbnRzID0gZnVuY3Rpb24oZGlhZ3JhbTIsIGV2ZW50cywgc2VjdGlvbkNvbG9yLCBtYXN0ZXJYLCBtYXN0ZXJZLCBjb25mKSB7XG4gIGxldCBtYXhFdmVudEhlaWdodCA9IDA7XG4gIGNvbnN0IGV2ZW50QmVnaW5ZID0gbWFzdGVyWTtcbiAgbWFzdGVyWSA9IG1hc3RlclkgKyAxMDA7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgZXZlbnROb2RlID0ge1xuICAgICAgZGVzY3I6IGV2ZW50LFxuICAgICAgc2VjdGlvbjogc2VjdGlvbkNvbG9yLFxuICAgICAgbnVtYmVyOiBzZWN0aW9uQ29sb3IsXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IDUwXG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJldmVudE5vZGVcIiwgZXZlbnROb2RlKTtcbiAgICBjb25zdCBldmVudFdyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImV2ZW50V3JhcHBlclwiKTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhdy5kcmF3Tm9kZShldmVudFdyYXBwZXIsIGV2ZW50Tm9kZSwgc2VjdGlvbkNvbG9yLCBjb25mKTtcbiAgICBjb25zdCBldmVudEhlaWdodCA9IG5vZGUuaGVpZ2h0O1xuICAgIG1heEV2ZW50SGVpZ2h0ID0gbWF4RXZlbnRIZWlnaHQgKyBldmVudEhlaWdodDtcbiAgICBldmVudFdyYXBwZXIuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFzdGVyWH0sICR7bWFzdGVyWX0pYCk7XG4gICAgbWFzdGVyWSA9IG1hc3RlclkgKyAxMCArIGV2ZW50SGVpZ2h0O1xuICB9XG4gIG1hc3RlclkgPSBldmVudEJlZ2luWTtcbiAgcmV0dXJuIG1heEV2ZW50SGVpZ2h0O1xufTtcbmNvbnN0IHJlbmRlcmVyID0ge1xuICBzZXRDb25mOiAoKSA9PiB7XG4gIH0sXG4gIGRyYXdcbn07XG5jb25zdCBnZW5TZWN0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gIGxldCBzZWN0aW9uczIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gfHwgb3B0aW9uc1tcImNTY2FsZUludlwiICsgaV07XG4gICAgaWYgKGlzRGFyayhvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSkpIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gbGlnaHRlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSA9IGRhcmtlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIGNvbnN0IHN3ID0gXCJcIiArICgxNyAtIDMgKiBpKTtcbiAgICBzZWN0aW9uczIgKz0gYFxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IHJlY3QsIC5zZWN0aW9uLSR7aSAtIDF9IHBhdGgsIC5zZWN0aW9uLSR7aSAtIDF9IGNpcmNsZSwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCAge1xuICAgICAgZmlsbDogJHtvcHRpb25zW1wiY1NjYWxlXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IHRleHQge1xuICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVMYWJlbFwiICsgaV19O1xuICAgIH1cbiAgICAubm9kZS1pY29uLSR7aSAtIDF9IHtcbiAgICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICAgIGNvbG9yOiAke29wdGlvbnNbXCJjU2NhbGVMYWJlbFwiICsgaV19O1xuICAgIH1cbiAgICAuc2VjdGlvbi1lZGdlLSR7aSAtIDF9e1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLmVkZ2UtZGVwdGgtJHtpIC0gMX17XG4gICAgICBzdHJva2Utd2lkdGg6ICR7c3d9O1xuICAgIH1cbiAgICAuc2VjdGlvbi0ke2kgLSAxfSBsaW5lIHtcbiAgICAgIHN0cm9rZTogJHtvcHRpb25zW1wiY1NjYWxlSW52XCIgKyBpXX0gO1xuICAgICAgc3Ryb2tlLXdpZHRoOiAzO1xuICAgIH1cblxuICAgIC5saW5lV3JhcHBlciBsaW5le1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVMYWJlbFwiICsgaV19IDtcbiAgICB9XG5cbiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHtcbiAgICAgIGZpbGw6IGxpZ2h0Z3JheTtcbiAgICB9XG4gICAgLmRpc2FibGVkIHRleHQge1xuICAgICAgZmlsbDogI2VmZWZlZjtcbiAgICB9XG4gICAgYDtcbiAgfVxuICByZXR1cm4gc2VjdGlvbnMyO1xufTtcbmNvbnN0IGdldFN0eWxlcyA9IChvcHRpb25zKSA9PiBgXG4gIC5lZGdlIHtcbiAgICBzdHJva2Utd2lkdGg6IDM7XG4gIH1cbiAgJHtnZW5TZWN0aW9ucyhvcHRpb25zKX1cbiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlICB7XG4gICAgZmlsbDogJHtvcHRpb25zLmdpdDB9O1xuICB9XG4gIC5zZWN0aW9uLXJvb3QgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmdpdEJyYW5jaExhYmVsMH07XG4gIH1cbiAgLmljb24tY29udGFpbmVyIHtcbiAgICBoZWlnaHQ6MTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgLmVkZ2Uge1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgLmV2ZW50V3JhcHBlciAge1xuICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpO1xuICB9XG5gO1xuY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzO1xuY29uc3QgZGlhZ3JhbSA9IHtcbiAgZGIsXG4gIHJlbmRlcmVyLFxuICBwYXJzZXI6IHBhcnNlciQxLFxuICBzdHlsZXNcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/mermaid/dist/timeline-definition-5ed366f4.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/attention.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/attention.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"attention\": () => (/* binding */ attention)\n/* harmony export */ });\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-classify-character */ \"../../../node_modules/micromark-util-classify-character/dev/index.js\");\n/* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-resolve-all */ \"../../../node_modules/micromark-util-resolve-all/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\nfunction resolveAllAttention(events, context) {\n let index = -1\n /** @type {number} */\n let open\n /** @type {Token} */\n let group\n /** @type {Token} */\n let text\n /** @type {Token} */\n let openingSequence\n /** @type {Token} */\n let closingSequence\n /** @type {number} */\n let use\n /** @type {Array} */\n let nextEvents\n /** @type {number} */\n let offset\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'attentionSequence' &&\n events[index][1]._close\n ) {\n open = index\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'attentionSequence' &&\n events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n context.sliceSerialize(events[index][1]).charCodeAt(0)\n ) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if (\n (events[open][1]._close || events[index][1]._open) &&\n (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n !(\n (events[open][1].end.offset -\n events[open][1].start.offset +\n events[index][1].end.offset -\n events[index][1].start.offset) %\n 3\n )\n ) {\n continue\n }\n\n // Number of markers to use from the sequence.\n use =\n events[open][1].end.offset - events[open][1].start.offset > 1 &&\n events[index][1].end.offset - events[index][1].start.offset > 1\n ? 2\n : 1\n\n const start = Object.assign({}, events[open][1].end)\n const end = Object.assign({}, events[index][1].start)\n movePoint(start, -use)\n movePoint(end, use)\n\n openingSequence = {\n type: use > 1 ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.strongSequence : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.emphasisSequence,\n start,\n end: Object.assign({}, events[open][1].end)\n }\n closingSequence = {\n type: use > 1 ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.strongSequence : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.emphasisSequence,\n start: Object.assign({}, events[index][1].start),\n end\n }\n text = {\n type: use > 1 ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.strongText : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.emphasisText,\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n group = {\n type: use > 1 ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.strong : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.emphasis,\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n }\n\n events[open][1].end = Object.assign({}, openingSequence.start)\n events[index][1].start = Object.assign({}, closingSequence.end)\n\n nextEvents = []\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(nextEvents, [\n ['enter', events[open][1], context],\n ['exit', events[open][1], context]\n ])\n }\n\n // Opening.\n nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ])\n\n // Always populated by defaults.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n context.parser.constructs.insideSpan.null,\n 'expected `insideSpan` to be populated'\n )\n\n // Between.\n nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(\n nextEvents,\n (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__.resolveAll)(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n )\n\n // Closing.\n nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ])\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2\n nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(nextEvents, [\n ['enter', events[index][1], context],\n ['exit', events[index][1], context]\n ])\n } else {\n offset = 0\n }\n\n (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, open - 1, index - open + 3, nextEvents)\n\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1\n\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null\n const previous = this.previous\n const before = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__.classifyCharacter)(previous)\n\n /** @type {NonNullable} */\n let marker\n\n return start\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.underscore,\n 'expected asterisk or underscore'\n )\n marker = code\n effects.enter('attentionSequence')\n return inside(code)\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n\n const token = effects.exit('attentionSequence')\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__.classifyCharacter)(code)\n\n // Always populated by defaults.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(attentionMarkers, 'expected `attentionMarkers` to be populated')\n\n const open =\n !after ||\n (after === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_6__.constants.characterGroupPunctuation && before) ||\n attentionMarkers.includes(code)\n const close =\n !before ||\n (before === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_6__.constants.characterGroupPunctuation && after) ||\n attentionMarkers.includes(previous)\n\n token._open = Boolean(\n marker === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk ? open : open && (before || !close)\n )\n token._close = Boolean(\n marker === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk ? close : close && (after || !open)\n )\n return ok(code)\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9hdHRlbnRpb24uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUVtRDtBQUNnQjtBQUNkO0FBQ0Q7QUFDUTtBQUNSO0FBQ2I7O0FBRXZDLFdBQVcsV0FBVztBQUNmO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsY0FBYztBQUMzQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QyxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QixnRkFBb0IsR0FBRyxrRkFBc0I7QUFDekU7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLDRCQUE0QixnRkFBb0IsR0FBRyxrRkFBc0I7QUFDekUsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw0RUFBZ0IsR0FBRyw4RUFBa0I7QUFDakUsbUNBQW1DO0FBQ25DLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsNEJBQTRCLHdFQUFZLEdBQUcsMEVBQWM7QUFDekQsbUNBQW1DO0FBQ25DLGlDQUFpQztBQUNqQzs7QUFFQSxnREFBZ0Q7QUFDaEQsbURBQW1EOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLDREQUFJO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLDREQUFJO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLCtDQUFNO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0REFBSTtBQUMzQjtBQUNBLFlBQVksc0VBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0REFBSTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0REFBSTtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQSxVQUFVLDhEQUFNOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9GQUFpQjs7QUFFbEMsYUFBYSxtQkFBbUI7QUFDaEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTTtBQUNWLGVBQWUsMEVBQWMsYUFBYSw0RUFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0JBQWtCLG9GQUFpQjs7QUFFbkM7QUFDQSxJQUFJLCtDQUFNOztBQUVWO0FBQ0E7QUFDQSxpQkFBaUIsbUdBQW1DO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtR0FBbUM7QUFDckQ7O0FBRUE7QUFDQSxpQkFBaUIsMEVBQWM7QUFDL0I7QUFDQTtBQUNBLGlCQUFpQiwwRUFBYztBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9hdHRlbnRpb24uanM/MzIyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FdmVudH0gRXZlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtwdXNoLCBzcGxpY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnXG5pbXBvcnQge2NsYXNzaWZ5Q2hhcmFjdGVyfSBmcm9tICdtaWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXInXG5pbXBvcnQge3Jlc29sdmVBbGx9IGZyb20gJ21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgYXR0ZW50aW9uID0ge1xuICBuYW1lOiAnYXR0ZW50aW9uJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQXR0ZW50aW9uLFxuICByZXNvbHZlQWxsOiByZXNvbHZlQWxsQXR0ZW50aW9uXG59XG5cbi8qKlxuICogVGFrZSBhbGwgZXZlbnRzIGFuZCByZXNvbHZlIGF0dGVudGlvbiB0byBlbXBoYXNpcyBvciBzdHJvbmcuXG4gKlxuICogQHR5cGUge1Jlc29sdmVyfVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWxsQXR0ZW50aW9uKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IG9wZW5cbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGdyb3VwXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCB0ZXh0XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBvcGVuaW5nU2VxdWVuY2VcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNsb3NpbmdTZXF1ZW5jZVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IHVzZVxuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IG5leHRFdmVudHNcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBvZmZzZXRcblxuICAvLyBXYWxrIHRocm91Z2ggYWxsIGV2ZW50cy5cbiAgLy9cbiAgLy8gTm90ZTogcGVyZm9ybWFuY2Ugb2YgdGhpcyBpcyBmaW5lIG9uIGFuIG1iIG9mIG5vcm1hbCBtYXJrZG93biwgYnV0IGl04oCZc1xuICAvLyBhIGJvdHRsZW5lY2sgZm9yIG1hbGljaW91cyBzdHVmZi5cbiAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgLy8gRmluZCBhIHRva2VuIHRoYXQgY2FuIGNsb3NlLlxuICAgIGlmIChcbiAgICAgIGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiZcbiAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2F0dGVudGlvblNlcXVlbmNlJyAmJlxuICAgICAgZXZlbnRzW2luZGV4XVsxXS5fY2xvc2VcbiAgICApIHtcbiAgICAgIG9wZW4gPSBpbmRleFxuXG4gICAgICAvLyBOb3cgd2FsayBiYWNrIHRvIGZpbmQgYW4gb3BlbmVyLlxuICAgICAgd2hpbGUgKG9wZW4tLSkge1xuICAgICAgICAvLyBGaW5kIGEgdG9rZW4gdGhhdCBjYW4gb3BlbiB0aGUgY2xvc2VyLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnRzW29wZW5dWzBdID09PSAnZXhpdCcgJiZcbiAgICAgICAgICBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gJ2F0dGVudGlvblNlcXVlbmNlJyAmJlxuICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJlxuICAgICAgICAgIC8vIElmIHRoZSBtYXJrZXJzIGFyZSB0aGUgc2FtZTpcbiAgICAgICAgICBjb250ZXh0LnNsaWNlU2VyaWFsaXplKGV2ZW50c1tvcGVuXVsxXSkuY2hhckNvZGVBdCgwKSA9PT1cbiAgICAgICAgICAgIGNvbnRleHQuc2xpY2VTZXJpYWxpemUoZXZlbnRzW2luZGV4XVsxXSkuY2hhckNvZGVBdCgwKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiB0aGUgb3BlbmluZyBjYW4gY2xvc2Ugb3IgdGhlIGNsb3NpbmcgY2FuIG9wZW4sXG4gICAgICAgICAgLy8gYW5kIHRoZSBjbG9zZSBzaXplICppcyBub3QqIGEgbXVsdGlwbGUgb2YgdGhyZWUsXG4gICAgICAgICAgLy8gYnV0IHRoZSBzdW0gb2YgdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgc2l6ZSAqaXMqIG11bHRpcGxlIG9mIHRocmVlLFxuICAgICAgICAgIC8vIHRoZW4gZG9u4oCZdCBtYXRjaC5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZXZlbnRzW29wZW5dWzFdLl9jbG9zZSB8fCBldmVudHNbaW5kZXhdWzFdLl9vcGVuKSAmJlxuICAgICAgICAgICAgKGV2ZW50c1tpbmRleF1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQub2Zmc2V0KSAlIDMgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtXG4gICAgICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCArXG4gICAgICAgICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC1cbiAgICAgICAgICAgICAgICBldmVudHNbaW5kZXhdWzFdLnN0YXJ0Lm9mZnNldCkgJVxuICAgICAgICAgICAgICAzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE51bWJlciBvZiBtYXJrZXJzIHRvIHVzZSBmcm9tIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICB1c2UgPVxuICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ID4gMSAmJlxuICAgICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQgPiAxXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZClcbiAgICAgICAgICBjb25zdCBlbmQgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXhdWzFdLnN0YXJ0KVxuICAgICAgICAgIG1vdmVQb2ludChzdGFydCwgLXVzZSlcbiAgICAgICAgICBtb3ZlUG9pbnQoZW5kLCB1c2UpXG5cbiAgICAgICAgICBvcGVuaW5nU2VxdWVuY2UgPSB7XG4gICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gdHlwZXMuc3Ryb25nU2VxdWVuY2UgOiB0eXBlcy5lbXBoYXNpc1NlcXVlbmNlLFxuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuXVsxXS5lbmQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNsb3NpbmdTZXF1ZW5jZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyB0eXBlcy5zdHJvbmdTZXF1ZW5jZSA6IHR5cGVzLmVtcGhhc2lzU2VxdWVuY2UsXG4gICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4XVsxXS5zdGFydCksXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyB0eXBlcy5zdHJvbmdUZXh0IDogdHlwZXMuZW1waGFzaXNUZXh0LFxuICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuXVsxXS5lbmQpLFxuICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXhdWzFdLnN0YXJ0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cCA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyB0eXBlcy5zdHJvbmcgOiB0eXBlcy5lbXBoYXNpcyxcbiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBvcGVuaW5nU2VxdWVuY2Uuc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBjbG9zaW5nU2VxdWVuY2UuZW5kKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBvcGVuaW5nU2VxdWVuY2Uuc3RhcnQpXG4gICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5zdGFydCA9IE9iamVjdC5hc3NpZ24oe30sIGNsb3NpbmdTZXF1ZW5jZS5lbmQpXG5cbiAgICAgICAgICBuZXh0RXZlbnRzID0gW11cblxuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIG1hcmtlcnMgaW4gdGhlIG9wZW5pbmcsIGFkZCB0aGVtIGJlZm9yZS5cbiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0KSB7XG4gICAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbXG4gICAgICAgICAgICAgIFsnZW50ZXInLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHRdLFxuICAgICAgICAgICAgICBbJ2V4aXQnLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHRdXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE9wZW5pbmcuXG4gICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1xuICAgICAgICAgICAgWydlbnRlcicsIGdyb3VwLCBjb250ZXh0XSxcbiAgICAgICAgICAgIFsnZW50ZXInLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHRdLFxuICAgICAgICAgICAgWydleGl0Jywgb3BlbmluZ1NlcXVlbmNlLCBjb250ZXh0XSxcbiAgICAgICAgICAgIFsnZW50ZXInLCB0ZXh0LCBjb250ZXh0XVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLFxuICAgICAgICAgICAgJ2V4cGVjdGVkIGBpbnNpZGVTcGFuYCB0byBiZSBwb3B1bGF0ZWQnXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gQmV0d2Vlbi5cbiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChcbiAgICAgICAgICAgIG5leHRFdmVudHMsXG4gICAgICAgICAgICByZXNvbHZlQWxsKFxuICAgICAgICAgICAgICBjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxcbiAgICAgICAgICAgICAgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBpbmRleCksXG4gICAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBDbG9zaW5nLlxuICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtcbiAgICAgICAgICAgIFsnZXhpdCcsIHRleHQsIGNvbnRleHRdLFxuICAgICAgICAgICAgWydlbnRlcicsIGNsb3NpbmdTZXF1ZW5jZSwgY29udGV4dF0sXG4gICAgICAgICAgICBbJ2V4aXQnLCBjbG9zaW5nU2VxdWVuY2UsIGNvbnRleHRdLFxuICAgICAgICAgICAgWydleGl0JywgZ3JvdXAsIGNvbnRleHRdXG4gICAgICAgICAgXSlcblxuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIG1hcmtlcnMgaW4gdGhlIGNsb3NpbmcsIGFkZCB0aGVtIGFmdGVyLlxuICAgICAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXhdWzFdLnN0YXJ0Lm9mZnNldCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMlxuICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1xuICAgICAgICAgICAgICBbJ2VudGVyJywgZXZlbnRzW2luZGV4XVsxXSwgY29udGV4dF0sXG4gICAgICAgICAgICAgIFsnZXhpdCcsIGV2ZW50c1tpbmRleF1bMV0sIGNvbnRleHRdXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4IC0gb3BlbiArIDMsIG5leHRFdmVudHMpXG5cbiAgICAgICAgICBpbmRleCA9IG9wZW4gKyBuZXh0RXZlbnRzLmxlbmd0aCAtIG9mZnNldCAtIDJcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIHJlbWFpbmluZyBzZXF1ZW5jZXMuXG4gIGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSAnYXR0ZW50aW9uU2VxdWVuY2UnKSB7XG4gICAgICBldmVudHNbaW5kZXhdWzFdLnR5cGUgPSAnZGF0YSdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnRzXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQXR0ZW50aW9uKGVmZmVjdHMsIG9rKSB7XG4gIGNvbnN0IGF0dGVudGlvbk1hcmtlcnMgPSB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbFxuICBjb25zdCBwcmV2aW91cyA9IHRoaXMucHJldmlvdXNcbiAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMpXG5cbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBCZWZvcmUgYSBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgY29kZSA9PT0gY29kZXMuYXN0ZXJpc2sgfHwgY29kZSA9PT0gY29kZXMudW5kZXJzY29yZSxcbiAgICAgICdleHBlY3RlZCBhc3RlcmlzayBvciB1bmRlcnNjb3JlJ1xuICAgIClcbiAgICBtYXJrZXIgPSBjb2RlXG4gICAgZWZmZWN0cy5lbnRlcignYXR0ZW50aW9uU2VxdWVuY2UnKVxuICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKipcbiAgICogICAgIF5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGluc2lkZVxuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCdhdHRlbnRpb25TZXF1ZW5jZScpXG5cbiAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogbW92ZSB0aGlzIHRvIHJlc29sdmVyLCBqdXN0IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICBjb25zdCBhZnRlciA9IGNsYXNzaWZ5Q2hhcmFjdGVyKGNvZGUpXG5cbiAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgIGFzc2VydChhdHRlbnRpb25NYXJrZXJzLCAnZXhwZWN0ZWQgYGF0dGVudGlvbk1hcmtlcnNgIHRvIGJlIHBvcHVsYXRlZCcpXG5cbiAgICBjb25zdCBvcGVuID1cbiAgICAgICFhZnRlciB8fFxuICAgICAgKGFmdGVyID09PSBjb25zdGFudHMuY2hhcmFjdGVyR3JvdXBQdW5jdHVhdGlvbiAmJiBiZWZvcmUpIHx8XG4gICAgICBhdHRlbnRpb25NYXJrZXJzLmluY2x1ZGVzKGNvZGUpXG4gICAgY29uc3QgY2xvc2UgPVxuICAgICAgIWJlZm9yZSB8fFxuICAgICAgKGJlZm9yZSA9PT0gY29uc3RhbnRzLmNoYXJhY3Rlckdyb3VwUHVuY3R1YXRpb24gJiYgYWZ0ZXIpIHx8XG4gICAgICBhdHRlbnRpb25NYXJrZXJzLmluY2x1ZGVzKHByZXZpb3VzKVxuXG4gICAgdG9rZW4uX29wZW4gPSBCb29sZWFuKFxuICAgICAgbWFya2VyID09PSBjb2Rlcy5hc3RlcmlzayA/IG9wZW4gOiBvcGVuICYmIChiZWZvcmUgfHwgIWNsb3NlKVxuICAgIClcbiAgICB0b2tlbi5fY2xvc2UgPSBCb29sZWFuKFxuICAgICAgbWFya2VyID09PSBjb2Rlcy5hc3RlcmlzayA/IGNsb3NlIDogY2xvc2UgJiYgKGFmdGVyIHx8ICFvcGVuKVxuICAgIClcbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIE1vdmUgYSBwb2ludCBhIGJpdC5cbiAqXG4gKiBOb3RlOiBgbW92ZWAgb25seSB3b3JrcyBpbnNpZGUgbGluZXMhIEl04oCZcyBub3QgcG9zc2libGUgdG8gbW92ZSBwYXN0IG90aGVyXG4gKiBjaHVua3MgKHJlcGxhY2VtZW50IGNoYXJhY3RlcnMsIHRhYnMsIG9yIGxpbmUgZW5kaW5ncykuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBtb3ZlUG9pbnQocG9pbnQsIG9mZnNldCkge1xuICBwb2ludC5jb2x1bW4gKz0gb2Zmc2V0XG4gIHBvaW50Lm9mZnNldCArPSBvZmZzZXRcbiAgcG9pbnQuX2J1ZmZlckluZGV4ICs9IG9mZnNldFxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/attention.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/autolink.js": /*!***************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/autolink.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"autolink\": () => (/* binding */ autolink)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst autolink = {name: 'autolink', tokenize: tokenizeAutolink}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0\n\n return start\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan, 'expected `<`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolink)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol)\n return open\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n\n return emailAtext(code)\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.plusSign ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dot ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)\n ) {\n // Count the previous alphabetical from `open` too.\n size = 1\n return schemeInsideOrEmailAtext(code)\n }\n\n return emailAtext(code)\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.colon) {\n effects.consume(code)\n size = 0\n return urlInside\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.plusSign ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dot ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) &&\n size++ < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.autolinkSchemeSizeMax\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n\n size = 0\n return emailAtext(code)\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolink)\n return ok\n }\n\n // ASCII control, space, or `<`.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.space ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiControl)(code)\n ) {\n return nok(code)\n }\n\n effects.consume(code)\n return urlInside\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.atSign) {\n effects.consume(code)\n return emailAtSignOrDot\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAtext)(code)) {\n effects.consume(code)\n return emailAtext\n }\n\n return nok(code)\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code) ? emailLabel(code) : nok(code)\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dot) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n // Exit, then change the token type.\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol).type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkEmail\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.autolink)\n return ok\n }\n\n return emailValue(code)\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if (\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) &&\n size++ < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.autolinkDomainSizeMax\n ) {\n const next = code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash ? emailValue : emailLabel\n effects.consume(code)\n return next\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9hdXRvbGluay5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQU9pQztBQUNtQjtBQUNRO0FBQ1I7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Ysa0JBQWtCOztBQUV6QjtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsMEVBQWM7QUFDbEMsa0JBQWtCLDBFQUFjO0FBQ2hDLGtCQUFrQixnRkFBb0I7QUFDdEM7QUFDQSxpQkFBaUIsZ0ZBQW9CO0FBQ3JDLGtCQUFrQixrRkFBc0I7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsUUFBUSxvRUFBVTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEVBQWM7QUFDN0IsZUFBZSxzRUFBVTtBQUN6QixlQUFlLHFFQUFTO0FBQ3hCLE1BQU0sMkVBQWlCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLHVFQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsMEVBQWM7QUFDOUIsaUJBQWlCLHNFQUFVO0FBQzNCLGlCQUFpQixxRUFBUztBQUMxQixRQUFRLDJFQUFpQjtBQUN6QixlQUFlLCtGQUErQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDZFQUFpQjtBQUNsQyxtQkFBbUIsa0ZBQXNCO0FBQ3pDLG9CQUFvQixnRkFBb0I7QUFDeEM7QUFDQSxtQkFBbUIsZ0ZBQW9CO0FBQ3ZDLG1CQUFtQiwwRUFBYztBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLHFFQUFTO0FBQ3hCLGVBQWUsdUVBQVc7QUFDMUIsZUFBZSwwRUFBYztBQUM3QixNQUFNLHNFQUFZO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLHdFQUFZO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG9FQUFVO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFdBQVcsMkVBQWlCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsNkVBQWlCO0FBQ2xDO0FBQ0EsbUJBQW1CLGtGQUFzQixTQUFTLCtFQUFtQjtBQUNyRSxvQkFBb0IsZ0ZBQW9CO0FBQ3hDO0FBQ0EsbUJBQW1CLGdGQUFvQjtBQUN2QyxtQkFBbUIsMEVBQWM7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNFQUFVLElBQUksMkVBQWlCO0FBQy9DLGVBQWUsK0ZBQStCO0FBQzlDO0FBQ0EsNEJBQTRCLHNFQUFVO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9hdXRvbGluay5qcz9kNDJjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge1xuICBhc2NpaUFscGhhLFxuICBhc2NpaUFscGhhbnVtZXJpYyxcbiAgYXNjaWlBdGV4dCxcbiAgYXNjaWlDb250cm9sXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGF1dG9saW5rID0ge25hbWU6ICdhdXRvbGluaycsIHRva2VuaXplOiB0b2tlbml6ZUF1dG9saW5rfVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUF1dG9saW5rKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGFuIGF1dG9saW5rLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICBeXG4gICAqID4gfCBhPHVzZXJAZXhhbXBsZS5jb20+YlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMubGVzc1RoYW4sICdleHBlY3RlZCBgPGAnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuYXV0b2xpbmspXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5hdXRvbGlua01hcmtlcilcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMuYXV0b2xpbmtNYXJrZXIpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5hdXRvbGlua1Byb3RvY29sKVxuICAgIHJldHVybiBvcGVuXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDxgLCBhdCBwcm90b2NvbCBvciBhdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8aHR0cHM6Ly9leGFtcGxlLmNvbT5iXG4gICAqICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBzY2hlbWVPckVtYWlsQXRleHRcbiAgICB9XG5cbiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IHNlY29uZCBieXRlIG9mIHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzY2hlbWVPckVtYWlsQXRleHQoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBhbmQgYCtgLCBgLWAsIGFuZCBgLmAuXG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMucGx1c1NpZ24gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmRhc2ggfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmRvdCB8fFxuICAgICAgYXNjaWlBbHBoYW51bWVyaWMoY29kZSlcbiAgICApIHtcbiAgICAgIC8vIENvdW50IHRoZSBwcmV2aW91cyBhbHBoYWJldGljYWwgZnJvbSBgb3BlbmAgdG9vLlxuICAgICAgc2l6ZSA9IDFcbiAgICAgIHJldHVybiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGFtYmlndW91cyBwcm90b2NvbCBvciBhdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8aHR0cHM6Ly9leGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqID4gfCBhPHVzZXJAZXhhbXBsZS5jb20+YlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuY29sb24pIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgc2l6ZSA9IDBcbiAgICAgIHJldHVybiB1cmxJbnNpZGVcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWMgYW5kIGArYCwgYC1gLCBhbmQgYC5gLlxuICAgIGlmIChcbiAgICAgIChjb2RlID09PSBjb2Rlcy5wbHVzU2lnbiB8fFxuICAgICAgICBjb2RlID09PSBjb2Rlcy5kYXNoIHx8XG4gICAgICAgIGNvZGUgPT09IGNvZGVzLmRvdCB8fFxuICAgICAgICBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkgJiZcbiAgICAgIHNpemUrKyA8IGNvbnN0YW50cy5hdXRvbGlua1NjaGVtZVNpemVNYXhcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dFxuICAgIH1cblxuICAgIHNpemUgPSAwXG4gICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBwcm90b2NvbCwgaW4gVVJMLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdXJsSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5hdXRvbGlua1Byb3RvY29sKVxuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5hdXRvbGlua01hcmtlcilcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmF1dG9saW5rTWFya2VyKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmF1dG9saW5rKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgY29udHJvbCwgc3BhY2UsIG9yIGA8YC5cbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLnNwYWNlIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5sZXNzVGhhbiB8fFxuICAgICAgYXNjaWlDb250cm9sKGNvZGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHVybEluc2lkZVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGVtYWlsIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTx1c2VyLm5hbWVAZXhhbXBsZS5jb20+YlxuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxBdGV4dChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmF0U2lnbikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gZW1haWxBdFNpZ25PckRvdFxuICAgIH1cblxuICAgIGlmIChhc2NpaUF0ZXh0KGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBlbWFpbEF0ZXh0XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCBhZnRlciBhdC1zaWduIG9yIGRvdC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8dXNlci5uYW1lQGV4YW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgICAgIF4gICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxBdFNpZ25PckRvdChjb2RlKSB7XG4gICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGUpID8gZW1haWxMYWJlbChjb2RlKSA6IG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCB3aGVyZSBgLmAgYW5kIGA+YCBhcmUgYWxsb3dlZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8dXNlci5uYW1lQGV4YW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxMYWJlbChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmRvdCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplID0gMFxuICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3RcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIC8vIEV4aXQsIHRoZW4gY2hhbmdlIHRoZSB0b2tlbiB0eXBlLlxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmF1dG9saW5rUHJvdG9jb2wpLnR5cGUgPSB0eXBlcy5hdXRvbGlua0VtYWlsXG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmF1dG9saW5rTWFya2VyKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYXV0b2xpbmtNYXJrZXIpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYXV0b2xpbmspXG4gICAgICByZXR1cm4gb2tcbiAgICB9XG5cbiAgICByZXR1cm4gZW1haWxWYWx1ZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCB3aGVyZSBgLmAgYW5kIGA+YCBhcmUgKm5vdCogYWxsb3dlZC5cbiAgICpcbiAgICogVGhvdWdoLCB0aGlzIGlzIGFsc28gdXNlZCBpbiBgZW1haWxMYWJlbGAgdG8gcGFyc2Ugb3RoZXIgdmFsdWVzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTx1c2VyLm5hbWVAZXgtYW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsVmFsdWUoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBvciBgLWAuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPT09IGNvZGVzLmRhc2ggfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpICYmXG4gICAgICBzaXplKysgPCBjb25zdGFudHMuYXV0b2xpbmtEb21haW5TaXplTWF4XG4gICAgKSB7XG4gICAgICBjb25zdCBuZXh0ID0gY29kZSA9PT0gY29kZXMuZGFzaCA/IGVtYWlsVmFsdWUgOiBlbWFpbExhYmVsXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBuZXh0XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/autolink.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"blankLine\": () => (/* binding */ blankLine)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst blankLine = {tokenize: tokenizeBlankLine, partial: true}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__.factorySpace)(effects, after, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix)(code)\n : after(code)\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownLineEnding)(code) ? ok(code) : nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9ibGFuay1saW5lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDc0I7QUFDdEI7QUFDQTs7QUFFcEQsV0FBVyxXQUFXO0FBQ2YsbUJBQW1COztBQUUxQjtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsV0FBVyx1RUFBYTtBQUN4QixRQUFRLHFFQUFZLGlCQUFpQiw0RUFBZ0I7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLG9CQUFvQixxRUFBUyxJQUFJLDRFQUFrQjtBQUNuRDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2Rldi9saWIvYmxhbmstbGluZS5qcz85NmM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBibGFua0xpbmUgPSB7dG9rZW5pemU6IHRva2VuaXplQmxhbmtMaW5lLCBwYXJ0aWFsOiB0cnVlfVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUJsYW5rTGluZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBibGFuayBsaW5lLlxuICAgKlxuICAgKiA+IPCfkYkgKipOb3RlKio6IGDikKBgIHJlcHJlc2VudHMgYSBzcGFjZSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCDikKDikKDikIpcbiAgICogICAgIF5cbiAgICogPiB8IOKQilxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgdHlwZXMubGluZVByZWZpeCkoY29kZSlcbiAgICAgIDogYWZ0ZXIoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBlb2YvZW9sLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiA+IPCfkYkgKipOb3RlKio6IGDikKBgIHJlcHJlc2VudHMgYSBzcGFjZSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCDikKDikKDikIpcbiAgICogICAgICAgXlxuICAgKiA+IHwg4pCKXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkgPyBvayhjb2RlKSA6IG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/block-quote.js": /*!******************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/block-quote.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"blockQuote\": () => (/* binding */ blockQuote)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {tokenize: tokenizeBlockQuoteContinuation},\n exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n\n return start\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n const state = self.containerState\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(state, 'expected `containerState` to be defined in container')\n\n if (!state.open) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuote, {_container: true})\n state.open = true\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuoteMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuoteMarker)\n return after\n }\n\n return nok(code)\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefixWhitespace)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefixWhitespace)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix)\n return ok\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix)\n return ok(code)\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this\n\n return contStart\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)(\n effects,\n contBefore,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize\n )(code)\n }\n\n return contBefore(code)\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code)\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.blockQuote)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9ibG9jay1xdW90ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHVDQUF1QztBQUNwRCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDRTtBQUNGO0FBQ1E7QUFDUjtBQUNiOztBQUV2QyxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQSxpQkFBaUIseUNBQXlDO0FBQzFEO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDOztBQUVBLE1BQU0sK0NBQU07O0FBRVo7QUFDQSxzQkFBc0IsNEVBQWdCLEdBQUcsaUJBQWlCO0FBQzFEO0FBQ0E7O0FBRUEsb0JBQW9CLGtGQUFzQjtBQUMxQyxvQkFBb0Isa0ZBQXNCO0FBQzFDO0FBQ0EsbUJBQW1CLGtGQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsUUFBUSx1RUFBYTtBQUNyQixvQkFBb0IsNEZBQWdDO0FBQ3BEO0FBQ0EsbUJBQW1CLDRGQUFnQztBQUNuRCxtQkFBbUIsa0ZBQXNCO0FBQ3pDO0FBQ0E7O0FBRUEsaUJBQWlCLGtGQUFzQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsUUFBUSx1RUFBYTtBQUNyQjtBQUNBLE1BQU0sOENBQU07QUFDWjtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxxRUFBWTtBQUN6QjtBQUNBO0FBQ0EsUUFBUSw0RUFBZ0I7QUFDeEI7QUFDQTtBQUNBLFlBQVksaUZBQWlCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsZUFBZSw0RUFBZ0I7QUFDL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9ibG9jay1xdW90ZS5qcz9kNjQzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FeGl0ZXJ9IEV4aXRlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGJsb2NrUXVvdGUgPSB7XG4gIG5hbWU6ICdibG9ja1F1b3RlJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZVN0YXJ0LFxuICBjb250aW51YXRpb246IHt0b2tlbml6ZTogdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9ufSxcbiAgZXhpdFxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGJsb2NrIHF1b3RlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPiBhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHNlbGYuY29udGFpbmVyU3RhdGVcblxuICAgICAgYXNzZXJ0KHN0YXRlLCAnZXhwZWN0ZWQgYGNvbnRhaW5lclN0YXRlYCB0byBiZSBkZWZpbmVkIGluIGNvbnRhaW5lcicpXG5cbiAgICAgIGlmICghc3RhdGUub3Blbikge1xuICAgICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmJsb2NrUXVvdGUsIHtfY29udGFpbmVyOiB0cnVlfSlcbiAgICAgICAgc3RhdGUub3BlbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5ibG9ja1F1b3RlUHJlZml4KVxuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5ibG9ja1F1b3RlTWFya2VyKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYmxvY2tRdW90ZU1hcmtlcilcbiAgICAgIHJldHVybiBhZnRlclxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPmAsIGJlZm9yZSBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPiBhXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYmxvY2tRdW90ZVByZWZpeClcbiAgICAgIHJldHVybiBva1xuICAgIH1cblxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5ibG9ja1F1b3RlUHJlZml4KVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG59XG5cbi8qKlxuICogU3RhcnQgb2YgYmxvY2sgcXVvdGUgY29udGludWF0aW9uLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAgIHwgPiBhXG4gKiA+IHwgPiBiXG4gKiAgICAgXlxuICogYGBgXG4gKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQmxvY2tRdW90ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIGNvbnRTdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBibG9jayBxdW90ZSBjb250aW51YXRpb24uXG4gICAqXG4gICAqIEFsc28gdXNlZCB0byBwYXJzZSB0aGUgZmlyc3QgYmxvY2sgcXVvdGUgb3BlbmluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ID4gYVxuICAgKiA+IHwgPiBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250U3RhcnQoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgICAgYXNzZXJ0KFxuICAgICAgICBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbCxcbiAgICAgICAgJ2V4cGVjdGVkIGBkaXNhYmxlLm51bGxgIHRvIGJlIHBvcHVsYXRlZCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgY29udEJlZm9yZSxcbiAgICAgICAgdHlwZXMubGluZVByZWZpeCxcbiAgICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IGNvbnN0YW50cy50YWJTaXplXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRCZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBgPmAsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIEFsc28gdXNlZCB0byBwYXJzZSB0aGUgZmlyc3QgYmxvY2sgcXVvdGUgb3BlbmluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ID4gYVxuICAgKiA+IHwgPiBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250QmVmb3JlKGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsb2NrUXVvdGUsIG9rLCBub2spKGNvZGUpXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtFeGl0ZXJ9ICovXG5mdW5jdGlvbiBleGl0KGVmZmVjdHMpIHtcbiAgZWZmZWN0cy5leGl0KHR5cGVzLmJsb2NrUXVvdGUpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/block-quote.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/character-escape.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/character-escape.js ***! \***********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"characterEscape\": () => (/* binding */ characterEscape)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.backslash, 'expected `\\\\`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterEscape)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.escapeMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.escapeMarker)\n return inside\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiPunctuation)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterEscapeValue)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterEscapeValue)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterEscape)\n return ok\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFeUQ7QUFDTDtBQUNBO0FBQ2I7O0FBRXZDLFdBQVcsV0FBVztBQUNmO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLDJFQUFlO0FBQ25DLGtCQUFrQixpRkFBcUI7QUFDdkMsa0JBQWtCLDhFQUFrQjtBQUNwQztBQUNBLGlCQUFpQiw4RUFBa0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFFBQVEsMEVBQWdCO0FBQ3hCLG9CQUFvQixzRkFBMEI7QUFDOUM7QUFDQSxtQkFBbUIsc0ZBQTBCO0FBQzdDLG1CQUFtQixpRkFBcUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzP2Y5MTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7YXNjaWlQdW5jdHVhdGlvbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckVzY2FwZSA9IHtcbiAgbmFtZTogJ2NoYXJhY3RlckVzY2FwZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBjaGFyYWN0ZXIgZXNjYXBlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYVxcKmJcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KGNvZGUgPT09IGNvZGVzLmJhY2tzbGFzaCwgJ2V4cGVjdGVkIGBcXFxcYCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaGFyYWN0ZXJFc2NhcGUpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5lc2NhcGVNYXJrZXIpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmVzY2FwZU1hcmtlcilcbiAgICByZXR1cm4gaW5zaWRlXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgcHVuY3R1YXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFwqYlxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIC8vIEFTQ0lJIHB1bmN0dWF0aW9uLlxuICAgIGlmIChhc2NpaVB1bmN0dWF0aW9uKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlckVzY2FwZVZhbHVlKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2hhcmFjdGVyRXNjYXBlVmFsdWUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2hhcmFjdGVyRXNjYXBlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/character-escape.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/character-reference.js": /*!**************************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/character-reference.js ***! \**************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"characterReference\": () => (/* binding */ characterReference)\n/* harmony export */ });\n/* harmony import */ var decode_named_character_reference__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! decode-named-character-reference */ \"../../../node_modules/decode-named-character-reference/index.dom.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n let max\n /** @type {(code: Code) => boolean} */\n let test\n\n return start\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.ampersand, 'expected `&`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReference)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker)\n return open\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.numberSign) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerNumeric)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerNumeric)\n return numeric\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue)\n max = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceNamedSizeMax\n test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric\n return value(code)\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.uppercaseX || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lowercaseX) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerHexadecimal)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerHexadecimal)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue)\n max = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceHexadecimalSizeMax\n test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiHexDigit\n return value\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue)\n max = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceDecimalSizeMax\n test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiDigit\n return value(code)\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.semicolon && size) {\n const token = effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue)\n\n if (\n test === micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric &&\n !(0,decode_named_character_reference__WEBPACK_IMPORTED_MODULE_5__.decodeNamedCharacterReference)(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.characterReference)\n return ok\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUU4RTtBQUs3QztBQUNtQjtBQUNRO0FBQ1I7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Y7QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsMkVBQWU7QUFDbkMsa0JBQWtCLG9GQUF3QjtBQUMxQyxrQkFBa0IsMEZBQThCO0FBQ2hEO0FBQ0EsaUJBQWlCLDBGQUE4QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsNEVBQWdCO0FBQ2pDLG9CQUFvQixpR0FBcUM7QUFDekQ7QUFDQSxtQkFBbUIsaUdBQXFDO0FBQ3hEO0FBQ0E7O0FBRUEsa0JBQWtCLHlGQUE2QjtBQUMvQyxVQUFVLHdHQUF3QztBQUNsRCxXQUFXLHVFQUFpQjtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDRFQUFnQixhQUFhLDRFQUFnQjtBQUM5RCxvQkFBb0IscUdBQXlDO0FBQzdEO0FBQ0EsbUJBQW1CLHFHQUF5QztBQUM1RCxvQkFBb0IseUZBQTZCO0FBQ2pELFlBQVksOEdBQThDO0FBQzFELGFBQWEsbUVBQWE7QUFDMUI7QUFDQTs7QUFFQSxrQkFBa0IseUZBQTZCO0FBQy9DLFVBQVUsMEdBQTBDO0FBQ3BELFdBQVcsZ0VBQVU7QUFDckI7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDJFQUFlO0FBQ2hDLGlDQUFpQyx5RkFBNkI7O0FBRTlEO0FBQ0EsaUJBQWlCLHVFQUFpQjtBQUNsQyxTQUFTLCtGQUE2QjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQiwwRkFBOEI7QUFDbEQ7QUFDQSxtQkFBbUIsMEZBQThCO0FBQ2pELG1CQUFtQixvRkFBd0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzP2YzMDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UnXG5pbXBvcnQge1xuICBhc2NpaUFscGhhbnVtZXJpYyxcbiAgYXNjaWlEaWdpdCxcbiAgYXNjaWlIZXhEaWdpdFxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjaGFyYWN0ZXJSZWZlcmVuY2UgPSB7XG4gIG5hbWU6ICdjaGFyYWN0ZXJSZWZlcmVuY2UnLFxuICB0b2tlbml6ZTogdG9rZW5pemVDaGFyYWN0ZXJSZWZlcmVuY2Vcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDaGFyYWN0ZXJSZWZlcmVuY2UoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBsZXQgc2l6ZSA9IDBcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBtYXhcbiAgLyoqIEB0eXBlIHsoY29kZTogQ29kZSkgPT4gYm9vbGVhbn0gKi9cbiAgbGV0IHRlc3RcblxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgY2hhcmFjdGVyIHJlZmVyZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmYW1wO2JcbiAgICogICAgICBeXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgIF5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KGNvZGUgPT09IGNvZGVzLmFtcGVyc2FuZCwgJ2V4cGVjdGVkIGAmYCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2UpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZU1hcmtlcilcbiAgICByZXR1cm4gb3BlblxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGAmYCwgYXQgYCNgIGZvciBudW1lcmljIHJlZmVyZW5jZXMgb3IgYWxwaGFudW1lcmljIGZvciBuYW1lZFxuICAgKiByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSZhbXA7YlxuICAgKiAgICAgICBeXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgICBeXG4gICAqID4gfCBhJiN4OTtiXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5udW1iZXJTaWduKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljKVxuICAgICAgcmV0dXJuIG51bWVyaWNcbiAgICB9XG5cbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZVZhbHVlKVxuICAgIG1heCA9IGNvbnN0YW50cy5jaGFyYWN0ZXJSZWZlcmVuY2VOYW1lZFNpemVNYXhcbiAgICB0ZXN0ID0gYXNjaWlBbHBoYW51bWVyaWNcbiAgICByZXR1cm4gdmFsdWUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgI2AsIGF0IGB4YCBmb3IgaGV4YWRlY2ltYWxzIG9yIGRpZ2l0IGZvciBkZWNpbWFscy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmIzEyMztiXG4gICAqICAgICAgICBeXG4gICAqID4gfCBhJiN4OTtiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBudW1lcmljKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMudXBwZXJjYXNlWCB8fCBjb2RlID09PSBjb2Rlcy5sb3dlcmNhc2VYKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwpXG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZVZhbHVlKVxuICAgICAgbWF4ID0gY29uc3RhbnRzLmNoYXJhY3RlclJlZmVyZW5jZUhleGFkZWNpbWFsU2l6ZU1heFxuICAgICAgdGVzdCA9IGFzY2lpSGV4RGlnaXRcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUpXG4gICAgbWF4ID0gY29uc3RhbnRzLmNoYXJhY3RlclJlZmVyZW5jZURlY2ltYWxTaXplTWF4XG4gICAgdGVzdCA9IGFzY2lpRGlnaXRcbiAgICByZXR1cm4gdmFsdWUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBtYXJrZXJzIChgJiN4YCwgYCYjYCwgb3IgYCZgKSwgaW4gdmFsdWUsIGJlZm9yZSBgO2AuXG4gICAqXG4gICAqIFRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlIGtpbmQgZGVmaW5lcyB3aGF0IGFuZCBob3cgbWFueSBjaGFyYWN0ZXJzIGFyZVxuICAgKiBhbGxvd2VkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSZhbXA7YlxuICAgKiAgICAgICBeXl5cbiAgICogPiB8IGEmIzEyMztiXG4gICAqICAgICAgICBeXl5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB2YWx1ZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnNlbWljb2xvbiAmJiBzaXplKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCh0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSlcblxuICAgICAgaWYgKFxuICAgICAgICB0ZXN0ID09PSBhc2NpaUFscGhhbnVtZXJpYyAmJlxuICAgICAgICAhZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2Uoc2VsZi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCB1c2VzIGEgZGlmZmVyZW50IG5hbWU6XG4gICAgICAvLyBgQ2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyU2VtaWAuXG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZU1hcmtlcilcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmNoYXJhY3RlclJlZmVyZW5jZU1hcmtlcilcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jaGFyYWN0ZXJSZWZlcmVuY2UpXG4gICAgICByZXR1cm4gb2tcbiAgICB9XG5cbiAgICBpZiAodGVzdChjb2RlKSAmJiBzaXplKysgPCBtYXgpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/character-reference.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/code-fenced.js": /*!******************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/code-fenced.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"codeFenced\": () => (/* binding */ codeFenced)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n}\n\n/** @type {Construct} */\nconst codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n const closeStart = {tokenize: tokenizeCloseStart, partial: true}\n let initialPrefix = 0\n let sizeOpen = 0\n /** @type {NonNullable} */\n let marker\n\n return start\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code)\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.tilde,\n 'expected `` ` `` or `~`'\n )\n\n const tail = self.events[self.events.length - 1]\n initialPrefix =\n tail && tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n\n marker = code\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFenced)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence)\n return sequenceOpen(code)\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++\n effects.consume(code)\n return sequenceOpen\n }\n\n if (sizeOpen < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.codeFencedSequenceSizeMin) {\n return nok(code)\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence)\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, infoBefore, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code)\n : infoBefore(code)\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence)\n return self.interrupt\n ? ok(code)\n : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString})\n return info(code)\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo)\n return infoBefore(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo)\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, metaBefore, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent && code === marker) {\n return nok(code)\n }\n\n effects.consume(code)\n return info\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n return infoBefore(code)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceMeta)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString})\n return meta(code)\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceMeta)\n return infoBefore(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent && code === marker) {\n return nok(code)\n }\n\n effects.consume(code)\n return meta\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol')\n return effects.attempt(closeStart, after, contentBefore)(code)\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return contentStart\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(\n effects,\n beforeContentChunk,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n initialPrefix + 1\n )(code)\n : beforeContentChunk(code)\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue)\n return contentChunk(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue)\n return beforeContentChunk(code)\n }\n\n effects.consume(code)\n return contentChunk\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFenced)\n return ok(code)\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0\n\n return startBefore\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return start\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n\n // To do: `enter` here or in next state?\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence)\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(\n effects,\n beforeSequenceClose,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.tabSize\n )(code)\n : beforeSequenceClose(code)\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence)\n return sequenceClose(code)\n }\n\n return nok(code)\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++\n effects.consume(code)\n return sequenceClose\n }\n\n if (size >= sizeOpen) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence)\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, sequenceCloseAfter, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code)\n : sequenceCloseAfter(code)\n }\n\n return nok(code)\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence)\n return ok(code)\n }\n\n return nok(code)\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this\n\n return start\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return nok(code)\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return lineStart\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jb2RlLWZlbmNlZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDc0I7QUFDdEI7QUFDUTtBQUNSO0FBQ2I7O0FBRXZDLFdBQVcsV0FBVztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLDhDQUFNO0FBQ1YsZUFBZSw2RUFBaUIsYUFBYSx1RUFBVztBQUN4RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsNEVBQWdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsNEVBQWdCO0FBQ2xDLGtCQUFrQixpRkFBcUI7QUFDdkMsa0JBQWtCLHlGQUE2QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixtR0FBbUM7QUFDdEQ7QUFDQTs7QUFF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QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBOztBQUVBLElBQUksOENBQU0sQ0FBQyw0RUFBa0I7QUFDN0Isa0JBQWtCLDRFQUFnQjtBQUNsQztBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2NvZGUtZmVuY2VkLmpzP2YyNmYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3Qgbm9uTGF6eUNvbnRpbnVhdGlvbiA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvbixcbiAgcGFydGlhbDogdHJ1ZVxufVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjb2RlRmVuY2VkID0ge1xuICBuYW1lOiAnY29kZUZlbmNlZCcsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNvZGVGZW5jZWQsXG4gIGNvbmNyZXRlOiB0cnVlXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQ29kZUZlbmNlZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuICBjb25zdCBjbG9zZVN0YXJ0ID0ge3Rva2VuaXplOiB0b2tlbml6ZUNsb3NlU3RhcnQsIHBhcnRpYWw6IHRydWV9XG4gIGxldCBpbml0aWFsUHJlZml4ID0gMFxuICBsZXQgc2l6ZU9wZW4gPSAwXG4gIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8Q29kZT59ICovXG4gIGxldCBtYXJrZXJcblxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgY29kZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzXG4gICAqICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHBhcnNlIHdoaXRlc3BhY2UgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIHJldHVybiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlLCBhZnRlciBwcmVmaXgsIGF0IHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQgfHwgY29kZSA9PT0gY29kZXMudGlsZGUsXG4gICAgICAnZXhwZWN0ZWQgYGAgYCBgYCBvciBgfmAnXG4gICAgKVxuXG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgaW5pdGlhbFByZWZpeCA9XG4gICAgICB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gdHlwZXMubGluZVByZWZpeFxuICAgICAgICA/IHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoXG4gICAgICAgIDogMFxuXG4gICAgbWFya2VyID0gY29kZVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY29kZUZlbmNlZClcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNvZGVGZW5jZWRGZW5jZSlcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlKVxuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIHNpemVPcGVuKytcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlblxuICAgIH1cblxuICAgIGlmIChzaXplT3BlbiA8IGNvbnN0YW50cy5jb2RlRmVuY2VkU2VxdWVuY2VTaXplTWluKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlKVxuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBpbmZvQmVmb3JlLCB0eXBlcy53aGl0ZXNwYWNlKShjb2RlKVxuICAgICAgOiBpbmZvQmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyBmZW5jZSwgYWZ0ZXIgdGhlIHNlcXVlbmNlIChhbmQgb3B0aW9uYWwgd2hpdGVzcGFjZSksIGJlZm9yZSBpbmZvLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluZm9CZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZUZlbmNlZEZlbmNlKVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0XG4gICAgICAgID8gb2soY29kZSlcbiAgICAgICAgOiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNvZGVGZW5jZWRGZW5jZUluZm8pXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaHVua1N0cmluZywge2NvbnRlbnRUeXBlOiBjb25zdGFudHMuY29udGVudFR5cGVTdHJpbmd9KVxuICAgIHJldHVybiBpbmZvKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gaW5mby5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzXG4gICAqICAgICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbmZvKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmNodW5rU3RyaW5nKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmNvZGVGZW5jZWRGZW5jZUluZm8pXG4gICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2h1bmtTdHJpbmcpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZUZlbmNlZEZlbmNlSW5mbylcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbWV0YUJlZm9yZSwgdHlwZXMud2hpdGVzcGFjZSkoY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQgJiYgY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGluZm9cbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlLCBhZnRlciBpbmZvIGFuZCB3aGl0ZXNwYWNlLCBiZWZvcmUgbWV0YS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzIGV2YWxcbiAgICogICAgICAgICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG1ldGFCZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY29kZUZlbmNlZEZlbmNlTWV0YSlcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNodW5rU3RyaW5nLCB7Y29udGVudFR5cGU6IGNvbnN0YW50cy5jb250ZW50VHlwZVN0cmluZ30pXG4gICAgcmV0dXJuIG1ldGEoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBtZXRhLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anMgZXZhbFxuICAgKiAgICAgICAgICAgXlxuICAgKiAgIHwgYWxlcnQoMSlcbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbWV0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jaHVua1N0cmluZylcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jb2RlRmVuY2VkRmVuY2VNZXRhKVxuICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQgJiYgY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIG1ldGFcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBlb2wvZW9mIGluIGNvZGUsIGJlZm9yZSBhIG5vbi1sYXp5IGNsb3NpbmcgZmVuY2Ugb3IgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzXG4gICAqICAgICAgICAgIF5cbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICAgICAgICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXROb25MYXp5QnJlYWsoY29kZSkge1xuICAgIGFzc2VydChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksICdleHBlY3RlZCBlb2wnKVxuICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY2xvc2VTdGFydCwgYWZ0ZXIsIGNvbnRlbnRCZWZvcmUpKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIGNvZGUgY29udGVudCwgbm90IGEgY2xvc2luZyBmZW5jZSwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICAgICAgICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGVudEJlZm9yZShjb2RlKSB7XG4gICAgYXNzZXJ0KG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSwgJ2V4cGVjdGVkIGVvbCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nKVxuICAgIHJldHVybiBjb250ZW50U3RhcnRcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgY29kZSBjb250ZW50LCBub3QgYSBjbG9zaW5nIGZlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICBeXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRlbnRTdGFydChjb2RlKSB7XG4gICAgcmV0dXJuIGluaXRpYWxQcmVmaXggPiAwICYmIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVNwYWNlKFxuICAgICAgICAgIGVmZmVjdHMsXG4gICAgICAgICAgYmVmb3JlQ29udGVudENodW5rLFxuICAgICAgICAgIHR5cGVzLmxpbmVQcmVmaXgsXG4gICAgICAgICAgaW5pdGlhbFByZWZpeCArIDFcbiAgICAgICAgKShjb2RlKVxuICAgICAgOiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgY29kZSBjb250ZW50LCBhZnRlciBvcHRpb25hbCBwcmVmaXguXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB+fn5qc1xuICAgKiA+IHwgYWxlcnQoMSlcbiAgICogICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlQ29udGVudENodW5rKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY29kZUZsb3dWYWx1ZSlcbiAgICByZXR1cm4gY29udGVudENodW5rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gY29kZSBjb250ZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICBeXl5eXl5eXlxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250ZW50Q2h1bmsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZUZsb3dWYWx1ZSlcbiAgICAgIHJldHVybiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29udGVudENodW5rXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgY29kZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IH5+fmpzXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiA+IHwgfn5+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNvZGVGZW5jZWQpXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAgICogQHR5cGUge1Rva2VuaXplcn1cbiAgICovXG4gIGZ1bmN0aW9uIHRva2VuaXplQ2xvc2VTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gICAgbGV0IHNpemUgPSAwXG5cbiAgICByZXR1cm4gc3RhcnRCZWZvcmVcblxuICAgIC8qKlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U3RhdGV9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnRCZWZvcmUoY29kZSkge1xuICAgICAgYXNzZXJ0KG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSwgJ2V4cGVjdGVkIGVvbCcpXG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nKVxuICAgICAgcmV0dXJuIHN0YXJ0XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIGNsb3NpbmcgZmVuY2UsIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLFxuICAgICAgICAnZXhwZWN0ZWQgYGRpc2FibGUubnVsbGAgdG8gYmUgcG9wdWxhdGVkJ1xuICAgICAgKVxuXG4gICAgICAvLyBUbyBkbzogYGVudGVyYCBoZXJlIG9yIGluIG5leHQgc3RhdGU/XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNvZGVGZW5jZWRGZW5jZSlcbiAgICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICAgID8gZmFjdG9yeVNwYWNlKFxuICAgICAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgICAgIGJlZm9yZVNlcXVlbmNlQ2xvc2UsXG4gICAgICAgICAgICB0eXBlcy5saW5lUHJlZml4LFxuICAgICAgICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIDogY29uc3RhbnRzLnRhYlNpemVcbiAgICAgICAgICApKGNvZGUpXG4gICAgICAgIDogYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NpbmcgZmVuY2UsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UsIGF0IHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgfn5+anNcbiAgICAgKiAgIHwgYWxlcnQoMSlcbiAgICAgKiA+IHwgfn5+XG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSlcbiAgICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2UoY29kZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NpbmcgZmVuY2Ugc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgICBzaXplKytcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlXG4gICAgICB9XG5cbiAgICAgIGlmIChzaXplID49IHNpemVPcGVuKSB7XG4gICAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSlcbiAgICAgICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBzZXF1ZW5jZUNsb3NlQWZ0ZXIsIHR5cGVzLndoaXRlc3BhY2UpKGNvZGUpXG4gICAgICAgICAgOiBzZXF1ZW5jZUNsb3NlQWZ0ZXIoY29kZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGNsb3NpbmcgZmVuY2Ugc2VxdWVuY2UsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZUZlbmNlZEZlbmNlKVxuICAgICAgICByZXR1cm4gb2soY29kZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb24oZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZikge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIGFzc2VydChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksICdleHBlY3RlZCBlb2wnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICByZXR1cm4gbGluZVN0YXJ0XG4gIH1cblxuICAvKipcbiAgICpcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNvZGUpIHtcbiAgICByZXR1cm4gc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdID8gbm9rKGNvZGUpIDogb2soY29kZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/code-fenced.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/code-indented.js": /*!********************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/code-indented.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"codeIndented\": () => (/* binding */ codeIndented)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {tokenize: tokenizeFurtherStart, partial: true}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownSpace)(code))\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeIndented)\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(\n effects,\n afterPrefix,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize + 1\n )(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix &&\n tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize\n ? atBreak(code)\n : nok(code)\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof) {\n return after(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue)\n return inside(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue)\n return atBreak(code)\n }\n\n effects.consume(code)\n return inside\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.codeIndented)\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this\n\n return furtherStart\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return furtherStart\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(\n effects,\n afterPrefix,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize + 1\n )(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix &&\n tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize\n ? ok(code)\n : (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)\n ? furtherStart(code)\n : nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jb2RlLWluZGVudGVkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUVvRDtBQUNzQjtBQUN0QjtBQUNRO0FBQ1I7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Y7QUFDUDtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxXQUFXO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLENBQUMsdUVBQWE7QUFDeEIsa0JBQWtCLDhFQUFrQjtBQUNwQztBQUNBO0FBQ0EsV0FBVyxxRUFBWTtBQUN2QjtBQUNBO0FBQ0EsTUFBTSw0RUFBZ0I7QUFDdEIsTUFBTSxpRkFBaUI7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDRFQUFnQjtBQUN2QyxzREFBc0QsaUZBQWlCO0FBQ3ZFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVM7QUFDMUI7QUFDQTs7QUFFQSxRQUFRLDRFQUFrQjtBQUMxQjtBQUNBOztBQUVBLGtCQUFrQiwrRUFBbUI7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVMsSUFBSSw0RUFBa0I7QUFDaEQsbUJBQW1CLCtFQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxpQkFBaUIsOEVBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLDRFQUFrQjtBQUMxQixvQkFBb0IsNEVBQWdCO0FBQ3BDO0FBQ0EsbUJBQW1CLDRFQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUVBQVk7QUFDdkI7QUFDQTtBQUNBLE1BQU0sNEVBQWdCO0FBQ3RCLE1BQU0saUZBQWlCO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw0RUFBZ0I7QUFDdkMsc0RBQXNELGlGQUFpQjtBQUN2RTtBQUNBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2Rldi9saWIvY29kZS1pbmRlbnRlZC5qcz8zYjMwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgY29kZUluZGVudGVkID0ge1xuICBuYW1lOiAnY29kZUluZGVudGVkJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29kZUluZGVudGVkXG59XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgZnVydGhlclN0YXJ0ID0ge3Rva2VuaXplOiB0b2tlbml6ZUZ1cnRoZXJTdGFydCwgcGFydGlhbDogdHJ1ZX1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb2RlSW5kZW50ZWQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgY29kZSAoaW5kZW50ZWQpLlxuICAgKlxuICAgKiA+ICoqUGFyc2luZyBub3RlKio6IGl0IGlzIG5vdCBuZWVkZWQgdG8gY2hlY2sgaWYgdGhpcyBmaXJzdCBsaW5lIGlzIGFcbiAgICogPiBmaWxsZWQgbGluZSAodGhhdCBpdCBoYXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpLCBiZWNhdXNlIGJsYW5rIGxpbmVzXG4gICAqID4gYXJlIHBhcnNlZCBhbHJlYWR5LCBzbyB3ZSBuZXZlciBydW4gaW50byB0aGF0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgICAgIGFhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIFRvIGRvOiBtYW51YWxseSBjaGVjayBpZiBpbnRlcnJ1cHRpbmcgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIGFzc2VydChtYXJrZG93blNwYWNlKGNvZGUpKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY29kZUluZGVudGVkKVxuICAgIC8vIFRvIGRvOiB1c2UgYW4gaW1wcm92ZWQgYHNwYWNlX29yX3RhYmAgZnVuY3Rpb24gbGlrZSBgbWFya2Rvd24tcnNgLFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRyb3AgdGhlIG5leHQgc3RhdGUuXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShcbiAgICAgIGVmZmVjdHMsXG4gICAgICBhZnRlclByZWZpeCxcbiAgICAgIHR5cGVzLmxpbmVQcmVmaXgsXG4gICAgICBjb25zdGFudHMudGFiU2l6ZSArIDFcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgc3RhcnQsIGFmdGVyIDEgb3IgNCBzcGFjZXMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGNvbnN0IHRhaWwgPSBzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXVxuICAgIHJldHVybiB0YWlsICYmXG4gICAgICB0YWlsWzFdLnR5cGUgPT09IHR5cGVzLmxpbmVQcmVmaXggJiZcbiAgICAgIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IGNvbnN0YW50cy50YWJTaXplXG4gICAgICA/IGF0QnJlYWsoY29kZSlcbiAgICAgIDogbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYSBicmVhay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhdEJyZWFrKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICByZXR1cm4gYWZ0ZXIoY29kZSlcbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGZ1cnRoZXJTdGFydCwgYXRCcmVhaywgYWZ0ZXIpKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jb2RlRmxvd1ZhbHVlKVxuICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb2RlIGNvbnRlbnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICAgICAgXl5eXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmNvZGVGbG93VmFsdWUpXG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBpbnNpZGVcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZUluZGVudGVkKVxuICAgIC8vIFRvIGRvOiBhbGxvdyBpbnRlcnJ1cHRpbmcgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIC8vIEZlZWwgZnJlZSB0byBpbnRlcnJ1cHQuXG4gICAgLy8gdG9rZW5pemVyLmludGVycnVwdCA9IGZhbHNlXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVGdXJ0aGVyU3RhcnQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIHJldHVybiBmdXJ0aGVyU3RhcnRcblxuICAvKipcbiAgICogQXQgZW9sLCB0cnlpbmcgdG8gcGFyc2UgYW5vdGhlciBpbmRlbnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICAgICAgICAgXlxuICAgKiAgIHwgICAgIGJiYlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZnVydGhlclN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogaW1wcm92ZSBgbGF6eWAgLyBgcGllcmNlYCBoYW5kbGluZy5cbiAgICAvLyBJZiB0aGlzIGlzIGEgbGF6eSBsaW5lLCBpdCBjYW7igJl0IGJlIGNvZGUuXG4gICAgaWYgKHNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgICByZXR1cm4gZnVydGhlclN0YXJ0XG4gICAgfVxuXG4gICAgLy8gVG8gZG86IHRoZSBjb2RlIGhlcmUgaW4gYG1pY3JvbWFyay1qc2AgaXMgYSBiaXQgZGlmZmVyZW50IGZyb21cbiAgICAvLyBgbWFya2Rvd24tcnNgIGJlY2F1c2UgdGhlcmUgaXQgY2FuIGF0dGVtcHQgc3BhY2VzLlxuICAgIC8vIFdlIGNhbuKAmXQgeWV0LlxuICAgIC8vXG4gICAgLy8gVG8gZG86IHVzZSBhbiBpbXByb3ZlZCBgc3BhY2Vfb3JfdGFiYCBmdW5jdGlvbiBsaWtlIGBtYXJrZG93bi1yc2AsXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gZHJvcCB0aGUgbmV4dCBzdGF0ZS5cbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgICAgZWZmZWN0cyxcbiAgICAgIGFmdGVyUHJlZml4LFxuICAgICAgdHlwZXMubGluZVByZWZpeCxcbiAgICAgIGNvbnN0YW50cy50YWJTaXplICsgMVxuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCwgYWZ0ZXIgMSBvciA0IHNwYWNlcy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgcmV0dXJuIHRhaWwgJiZcbiAgICAgIHRhaWxbMV0udHlwZSA9PT0gdHlwZXMubGluZVByZWZpeCAmJlxuICAgICAgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gY29uc3RhbnRzLnRhYlNpemVcbiAgICAgID8gb2soY29kZSlcbiAgICAgIDogbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpXG4gICAgICA/IGZ1cnRoZXJTdGFydChjb2RlKVxuICAgICAgOiBub2soY29kZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/code-indented.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/code-text.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/code-text.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"codeText\": () => (/* binding */ codeText)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n let index\n /** @type {number | undefined} */\n let enter\n\n // If we start and end with an EOL or a space.\n if (\n (events[headEnterIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextData) {\n // Then we have padding.\n events[headEnterIndex][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextPadding\n events[tailExitIndex][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextPadding\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1\n tailExitIndex++\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (\n index !== tailExitIndex &&\n events[index][1].type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding\n ) {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding\n ) {\n events[enter][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextData\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent ||\n this.events[this.events.length - 1][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.characterEscape\n )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n let size\n /** @type {Token} */\n let token\n\n return start\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent, 'expected `` ` ``')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(previous.call(self, self.previous), 'expected correct previous')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeText)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextSequence)\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextSequence)\n return between(code)\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof) {\n return nok(code)\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.space) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return between\n }\n\n // Closing fence? Could also be data.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent) {\n token = effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextSequence)\n size = 0\n return sequenceClose(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n return between\n }\n\n // Data.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextData)\n return data(code)\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.space ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextData)\n return between(code)\n }\n\n effects.consume(code)\n return data\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent) {\n effects.consume(code)\n size++\n return sequenceClose\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextSequence)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeText)\n return ok(code)\n }\n\n // More or less accents: mark as data.\n token.type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.codeTextData\n return data(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jb2RlLXRleHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUUyRDtBQUNQO0FBQ0E7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Y7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsNEVBQWdCO0FBQ3hEO0FBQ0EsdUNBQXVDLDRFQUFnQjtBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQyw4RUFBa0I7QUFDdEQ7QUFDQSx5Q0FBeUMsaUZBQXFCO0FBQzlELHdDQUF3QyxpRkFBcUI7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyw0RUFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsZ0NBQWdDLDRFQUFnQjtBQUNoRDtBQUNBLDhCQUE4Qiw4RUFBa0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDZFQUFpQjtBQUM5QixvREFBb0QsaUZBQXFCO0FBQ3pFO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsNkVBQWlCO0FBQ3JDLElBQUksK0NBQU07QUFDVixrQkFBa0IsMEVBQWM7QUFDaEMsa0JBQWtCLGtGQUFzQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQiw2RUFBaUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtGQUFzQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFFQUFTO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVFQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDLDRCQUE0QixrRkFBc0I7QUFDbEQ7QUFDQTtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCLG9CQUFvQiw0RUFBZ0I7QUFDcEM7QUFDQSxtQkFBbUIsNEVBQWdCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsOEVBQWtCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFFQUFTO0FBQ3hCLGVBQWUsdUVBQVc7QUFDMUIsZUFBZSw2RUFBaUI7QUFDaEMsTUFBTSw0RUFBa0I7QUFDeEI7QUFDQSxtQkFBbUIsOEVBQWtCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDZFQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGtGQUFzQjtBQUN6QyxtQkFBbUIsMEVBQWM7QUFDakM7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQiw4RUFBa0I7QUFDbkM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2Rldi9saWIvY29kZS10ZXh0LmpzPzA2NWIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlByZXZpb3VzfSBQcmV2aW91c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VufSBUb2tlblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgY29kZVRleHQgPSB7XG4gIG5hbWU6ICdjb2RlVGV4dCcsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNvZGVUZXh0LFxuICByZXNvbHZlOiByZXNvbHZlQ29kZVRleHQsXG4gIHByZXZpb3VzXG59XG5cbi8vIFRvIGRvOiBuZXh0IG1ham9yOiBkb27igJl0IHJlc29sdmUsIGxpa2UgYG1hcmtkb3duLXJzYC5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlQ29kZVRleHQoZXZlbnRzKSB7XG4gIGxldCB0YWlsRXhpdEluZGV4ID0gZXZlbnRzLmxlbmd0aCAtIDRcbiAgbGV0IGhlYWRFbnRlckluZGV4ID0gM1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGluZGV4XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZW50ZXJcblxuICAvLyBJZiB3ZSBzdGFydCBhbmQgZW5kIHdpdGggYW4gRU9MIG9yIGEgc3BhY2UuXG4gIGlmIChcbiAgICAoZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nIHx8XG4gICAgICBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICdzcGFjZScpICYmXG4gICAgKGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nIHx8XG4gICAgICBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gJ3NwYWNlJylcbiAgKSB7XG4gICAgaW5kZXggPSBoZWFkRW50ZXJJbmRleFxuXG4gICAgLy8gQW5kIHdlIGhhdmUgZGF0YS5cbiAgICB3aGlsZSAoKytpbmRleCA8IHRhaWxFeGl0SW5kZXgpIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLmNvZGVUZXh0RGF0YSkge1xuICAgICAgICAvLyBUaGVuIHdlIGhhdmUgcGFkZGluZy5cbiAgICAgICAgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID0gdHlwZXMuY29kZVRleHRQYWRkaW5nXG4gICAgICAgIGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID0gdHlwZXMuY29kZVRleHRQYWRkaW5nXG4gICAgICAgIGhlYWRFbnRlckluZGV4ICs9IDJcbiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSAyXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWVyZ2UgYWRqYWNlbnQgc3BhY2VzIGFuZCBkYXRhLlxuICBpbmRleCA9IGhlYWRFbnRlckluZGV4IC0gMVxuICB0YWlsRXhpdEluZGV4KytcblxuICB3aGlsZSAoKytpbmRleCA8PSB0YWlsRXhpdEluZGV4KSB7XG4gICAgaWYgKGVudGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5kZXggIT09IHRhaWxFeGl0SW5kZXggJiZcbiAgICAgICAgZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSB0eXBlcy5saW5lRW5kaW5nXG4gICAgICApIHtcbiAgICAgICAgZW50ZXIgPSBpbmRleFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpbmRleCA9PT0gdGFpbEV4aXRJbmRleCB8fFxuICAgICAgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nXG4gICAgKSB7XG4gICAgICBldmVudHNbZW50ZXJdWzFdLnR5cGUgPSB0eXBlcy5jb2RlVGV4dERhdGFcblxuICAgICAgaWYgKGluZGV4ICE9PSBlbnRlciArIDIpIHtcbiAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXggLSAxXVsxXS5lbmRcbiAgICAgICAgZXZlbnRzLnNwbGljZShlbnRlciArIDIsIGluZGV4IC0gZW50ZXIgLSAyKVxuICAgICAgICB0YWlsRXhpdEluZGV4IC09IGluZGV4IC0gZW50ZXIgLSAyXG4gICAgICAgIGluZGV4ID0gZW50ZXIgKyAyXG4gICAgICB9XG5cbiAgICAgIGVudGVyID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50c1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7UHJldmlvdXN9XG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzKGNvZGUpIHtcbiAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBjb2RlLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIHRhaWwuXG4gIHJldHVybiAoXG4gICAgY29kZSAhPT0gY29kZXMuZ3JhdmVBY2NlbnQgfHxcbiAgICB0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlID09PSB0eXBlcy5jaGFyYWN0ZXJFc2NhcGVcbiAgKVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVUZXh0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IHNpemVPcGVuID0gMFxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IHNpemVcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IHRva2VuXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGNvZGUgKHRleHQpLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICBeXG4gICAqID4gfCBcXGBhYFxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQsICdleHBlY3RlZCBgYCBgIGBgJylcbiAgICBhc3NlcnQocHJldmlvdXMuY2FsbChzZWxmLCBzZWxmLnByZXZpb3VzKSwgJ2V4cGVjdGVkIGNvcnJlY3QgcHJldmlvdXMnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY29kZVRleHQpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jb2RlVGV4dFNlcXVlbmNlKVxuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5ncmF2ZUFjY2VudCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplT3BlbisrXG4gICAgICByZXR1cm4gc2VxdWVuY2VPcGVuXG4gICAgfVxuXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNvZGVUZXh0U2VxdWVuY2UpXG4gICAgcmV0dXJuIGJldHdlZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZXR3ZWVuIHNvbWV0aGluZyBhbmQgc29tZXRoaW5nIGVsc2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBgYWBcbiAgICogICAgICBeXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmV0d2Vlbihjb2RlKSB7XG4gICAgLy8gRU9GLlxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogZG9u4oCZdCBkbyBzcGFjZXMgaW4gcmVzb2x2ZSwgYnV0IHdoZW4gY29tcGlsaW5nLFxuICAgIC8vIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICAvLyBUYWJzIGRvbuKAmXQgd29yaywgYW5kIHZpcnR1YWwgc3BhY2VzIGRvbuKAmXQgbWFrZSBzZW5zZS5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuc3BhY2UpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3NwYWNlJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdzcGFjZScpXG4gICAgICByZXR1cm4gYmV0d2VlblxuICAgIH1cblxuICAgIC8vIENsb3NpbmcgZmVuY2U/IENvdWxkIGFsc28gYmUgZGF0YS5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQpIHtcbiAgICAgIHRva2VuID0gZWZmZWN0cy5lbnRlcih0eXBlcy5jb2RlVGV4dFNlcXVlbmNlKVxuICAgICAgc2l6ZSA9IDBcbiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICAgIHJldHVybiBiZXR3ZWVuXG4gICAgfVxuXG4gICAgLy8gRGF0YS5cbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmNvZGVUZXh0RGF0YSlcbiAgICByZXR1cm4gZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGRhdGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBgYWBcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkYXRhKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLnNwYWNlIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmF2ZUFjY2VudCB8fFxuICAgICAgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZVRleHREYXRhKVxuICAgICAgcmV0dXJuIGJldHdlZW4oY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNsb3Npbmcgc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBgYWBcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZShjb2RlKSB7XG4gICAgLy8gTW9yZS5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgc2l6ZSsrXG4gICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZVxuICAgIH1cblxuICAgIC8vIERvbmUhXG4gICAgaWYgKHNpemUgPT09IHNpemVPcGVuKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY29kZVRleHRTZXF1ZW5jZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jb2RlVGV4dClcbiAgICAgIHJldHVybiBvayhjb2RlKVxuICAgIH1cblxuICAgIC8vIE1vcmUgb3IgbGVzcyBhY2NlbnRzOiBtYXJrIGFzIGRhdGEuXG4gICAgdG9rZW4udHlwZSA9IHR5cGVzLmNvZGVUZXh0RGF0YVxuICAgIHJldHVybiBkYXRhKGNvZGUpXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/code-text.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/content.js": /*!**************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/content.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"content\": () => (/* binding */ content)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-subtokenize */ \"../../../node_modules/micromark-util-subtokenize/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nconst content = {tokenize: tokenizeContent, resolve: resolveContent}\n\n/** @type {Construct} */\nconst continuationConstruct = {tokenize: tokenizeContinuation, partial: true}\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n ;(0,micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_1__.subtokenize)(events)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous\n\n return chunkStart\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof && !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code),\n 'expected no eof or eol'\n )\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.content)\n previous = effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent, {\n contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeContent\n })\n return chunkInside(code)\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof) {\n return contentEnd(code)\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n }\n\n // Data.\n effects.consume(code)\n return chunkInside\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.content)\n return ok(code)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentContinue(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected eol')\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent)\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(previous, 'expected previous token')\n previous.next = effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent, {\n contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeContent,\n previous\n })\n previous = previous.next\n return chunkInside\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n\n return startLookahead\n\n /**\n *\n *\n * @type {State}\n */\n function startLookahead(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected a line ending')\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)(effects, prefixed, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n return nok(code)\n }\n\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n\n const tail = self.events[self.events.length - 1]\n\n if (\n !self.parser.constructs.disable.null.includes('codeIndented') &&\n tail &&\n tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix &&\n tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize\n ) {\n return ok(code)\n }\n\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jb250ZW50LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDTztBQUNMO0FBQ0Y7QUFDUTtBQUNSO0FBQ2I7O0FBRXZDO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDTyxpQkFBaUI7O0FBRXhCLFdBQVcsV0FBVztBQUN0QiwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxFQUFFLHdFQUFXO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBLGFBQWEsbUJBQW1CO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksK0NBQU07QUFDVixlQUFlLHFFQUFTLEtBQUssNEVBQWtCO0FBQy9DO0FBQ0E7O0FBRUEsa0JBQWtCLHlFQUFhO0FBQy9CLDZCQUE2Qiw4RUFBa0I7QUFDL0MsbUJBQW1CLDRGQUE0QjtBQUMvQyxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVM7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSw0RUFBa0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDhFQUFrQjtBQUNuQyxpQkFBaUIseUVBQWE7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksOENBQU0sQ0FBQyw0RUFBa0I7QUFDN0I7QUFDQSxpQkFBaUIsOEVBQWtCO0FBQ25DLElBQUksK0NBQU07QUFDVixrQ0FBa0MsOEVBQWtCO0FBQ3BELG1CQUFtQiw0RkFBNEI7QUFDL0M7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksK0NBQU0sQ0FBQyw0RUFBa0I7QUFDN0IsaUJBQWlCLDhFQUFrQjtBQUNuQyxrQkFBa0IsNEVBQWdCO0FBQ2xDO0FBQ0EsaUJBQWlCLDRFQUFnQjtBQUNqQyxXQUFXLHFFQUFZLG9CQUFvQiw0RUFBZ0I7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVMsSUFBSSw0RUFBa0I7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBLElBQUksOENBQU07QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDRFQUFnQjtBQUN2QyxzREFBc0QsaUZBQWlCO0FBQ3ZFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9jb250ZW50LmpzP2U2YzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmd9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7c3VidG9rZW5pemV9IGZyb20gJ21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqXG4gKiBObyBuYW1lIGJlY2F1c2UgaXQgbXVzdCBub3QgYmUgdHVybmVkIG9mZi5cbiAqIEB0eXBlIHtDb25zdHJ1Y3R9XG4gKi9cbmV4cG9ydCBjb25zdCBjb250ZW50ID0ge3Rva2VuaXplOiB0b2tlbml6ZUNvbnRlbnQsIHJlc29sdmU6IHJlc29sdmVDb250ZW50fVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGNvbnRpbnVhdGlvbkNvbnN0cnVjdCA9IHt0b2tlbml6ZTogdG9rZW5pemVDb250aW51YXRpb24sIHBhcnRpYWw6IHRydWV9XG5cbi8qKlxuICogQ29udGVudCBpcyB0cmFuc3BhcmVudDogaXTigJlzIHBhcnNlZCByaWdodCBub3cuIFRoYXQgd2F5LCBkZWZpbml0aW9ucyBhcmUgYWxzb1xuICogcGFyc2VkIHJpZ2h0IG5vdzogYmVmb3JlIHRleHQgaW4gcGFyYWdyYXBocyAoc3BlY2lmaWNhbGx5LCBtZWRpYSkgYXJlIHBhcnNlZC5cbiAqXG4gKiBAdHlwZSB7UmVzb2x2ZXJ9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDb250ZW50KGV2ZW50cykge1xuICBzdWJ0b2tlbml6ZShldmVudHMpXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb250ZW50KGVmZmVjdHMsIG9rKSB7XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBwcmV2aW91c1xuXG4gIHJldHVybiBjaHVua1N0YXJ0XG5cbiAgLyoqXG4gICAqIEJlZm9yZSBhIGNvbnRlbnQgY2h1bmsuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhYmNcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNodW5rU3RhcnQoY29kZSkge1xuICAgIGFzc2VydChcbiAgICAgIGNvZGUgIT09IGNvZGVzLmVvZiAmJiAhbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpLFxuICAgICAgJ2V4cGVjdGVkIG5vIGVvZiBvciBlb2wnXG4gICAgKVxuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jb250ZW50KVxuICAgIHByZXZpb3VzID0gZWZmZWN0cy5lbnRlcih0eXBlcy5jaHVua0NvbnRlbnQsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBjb25zdGFudHMuY29udGVudFR5cGVDb250ZW50XG4gICAgfSlcbiAgICByZXR1cm4gY2h1bmtJbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIGNvbnRlbnQgY2h1bmsuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhYmNcbiAgICogICAgIF5eXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2h1bmtJbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gVG8gZG86IGluIGBtYXJrZG93bi1yc2AsIGVhY2ggbGluZSBpcyBwYXJzZWQgb24gaXRzIG93biwgYW5kIGV2ZXJ5dGhpbmdcbiAgICAvLyBpcyBzdGl0Y2hlZCB0b2dldGhlciByZXNvbHZpbmcuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soXG4gICAgICAgIGNvbnRpbnVhdGlvbkNvbnN0cnVjdCxcbiAgICAgICAgY29udGVudENvbnRpbnVlLFxuICAgICAgICBjb250ZW50RW5kXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gRGF0YS5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY2h1bmtJbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250ZW50RW5kKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2h1bmtDb250ZW50KVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jb250ZW50KVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRlbnRDb250aW51ZShjb2RlKSB7XG4gICAgYXNzZXJ0KG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSwgJ2V4cGVjdGVkIGVvbCcpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNodW5rQ29udGVudClcbiAgICBhc3NlcnQocHJldmlvdXMsICdleHBlY3RlZCBwcmV2aW91cyB0b2tlbicpXG4gICAgcHJldmlvdXMubmV4dCA9IGVmZmVjdHMuZW50ZXIodHlwZXMuY2h1bmtDb250ZW50LCB7XG4gICAgICBjb250ZW50VHlwZTogY29uc3RhbnRzLmNvbnRlbnRUeXBlQ29udGVudCxcbiAgICAgIHByZXZpb3VzXG4gICAgfSlcbiAgICBwcmV2aW91cyA9IHByZXZpb3VzLm5leHRcbiAgICByZXR1cm4gY2h1bmtJbnNpZGVcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIHN0YXJ0TG9va2FoZWFkXG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0TG9va2FoZWFkKGNvZGUpIHtcbiAgICBhc3NlcnQobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpLCAnZXhwZWN0ZWQgYSBsaW5lIGVuZGluZycpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmNodW5rQ29udGVudClcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBwcmVmaXhlZCwgdHlwZXMubGluZVByZWZpeClcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBwcmVmaXhlZChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgIGFzc2VydChcbiAgICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLFxuICAgICAgJ2V4cGVjdGVkIGBkaXNhYmxlLm51bGxgIHRvIGJlIHBvcHVsYXRlZCdcbiAgICApXG5cbiAgICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV1cblxuICAgIGlmIChcbiAgICAgICFzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJykgJiZcbiAgICAgIHRhaWwgJiZcbiAgICAgIHRhaWxbMV0udHlwZSA9PT0gdHlwZXMubGluZVByZWZpeCAmJlxuICAgICAgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gY29uc3RhbnRzLnRhYlNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBvayhjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBlZmZlY3RzLmludGVycnVwdChzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIG5vaywgb2spKGNvZGUpXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/content.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/definition.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/definition.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"definition\": () => (/* binding */ definition)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_destination__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-destination */ \"../../../node_modules/micromark-factory-destination/dev/index.js\");\n/* harmony import */ var micromark_factory_label__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-label */ \"../../../node_modules/micromark-factory-label/dev/index.js\");\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_factory_title__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-factory-title */ \"../../../node_modules/micromark-factory-title/dev/index.js\");\n/* harmony import */ var micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-whitespace */ \"../../../node_modules/micromark-factory-whitespace/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-normalize-identifier */ \"../../../node_modules/micromark-util-normalize-identifier/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst definition = {name: 'definition', tokenize: tokenizeDefinition}\n\n/** @type {Construct} */\nconst titleBefore = {tokenize: tokenizeTitleBefore, partial: true}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n let identifier\n\n return start\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definition)\n return before(code)\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket, 'expected `[`')\n return micromark_factory_label__WEBPACK_IMPORTED_MODULE_3__.factoryLabel.call(\n self,\n effects,\n labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionLabel,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionLabelMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionLabelString\n )(code)\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_4__.normalizeIdentifier)(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.colon) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionMarker)\n return markerAfter\n }\n\n return nok(code)\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)\n ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__.factoryWhitespace)(effects, destinationBefore)(code)\n : destinationBefore(code)\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return (0,micromark_factory_destination__WEBPACK_IMPORTED_MODULE_7__.factoryDestination)(\n effects,\n destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionDestination,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionDestinationLiteral,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionDestinationLiteralMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionDestinationRaw,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionDestinationString\n )(code)\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code)\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__.factorySpace)(effects, afterWhitespace, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace)(code)\n : afterWhitespace(code)\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definition)\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier)\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)\n ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__.factoryWhitespace)(effects, beforeMarker)(code)\n : nok(code)\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return (0,micromark_factory_title__WEBPACK_IMPORTED_MODULE_9__.factoryTitle)(\n effects,\n titleAfter,\n nok,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionTitle,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionTitleMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definitionTitleString\n )(code)\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__.factorySpace)(\n effects,\n titleAfterOptionalWhitespace,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace\n )(code)\n : titleAfterOptionalWhitespace(code)\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(code) {\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code) ? ok(code) : nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9kZWZpbml0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFZ0U7QUFDWjtBQUNBO0FBQ0E7QUFDVTtBQUs3QjtBQUNzQztBQUNuQjtBQUNBO0FBQ2I7O0FBRXZDLFdBQVcsV0FBVztBQUNmLG9CQUFvQjs7QUFFM0IsV0FBVyxXQUFXO0FBQ3RCLHFCQUFxQjs7QUFFckI7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNEVBQWdCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDhDQUFNLFVBQVUsbUZBQXVCO0FBQzNDLFdBQVcsc0VBQWlCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGlGQUFxQjtBQUMzQixNQUFNLHVGQUEyQjtBQUNqQyxNQUFNLHVGQUEyQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQix3RkFBbUI7QUFDcEM7QUFDQTs7QUFFQSxpQkFBaUIsdUVBQVc7QUFDNUIsb0JBQW9CLGtGQUFzQjtBQUMxQztBQUNBLG1CQUFtQixrRkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtRkFBeUI7QUFDcEMsUUFBUSwrRUFBaUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxXQUFXLGlGQUFrQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdUZBQTJCO0FBQ2pDLE1BQU0sOEZBQWtDO0FBQ3hDLE1BQU0sb0dBQXdDO0FBQzlDLE1BQU0sMEZBQThCO0FBQ3BDLE1BQU0sNkZBQWlDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsV0FBVyx1RUFBYTtBQUN4QixRQUFRLHFFQUFZLDJCQUEyQiw0RUFBZ0I7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLHFFQUFTLElBQUksNEVBQWtCO0FBQ2hELG1CQUFtQiw0RUFBZ0I7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFdBQVcsbUZBQXlCO0FBQ3BDLFFBQVEsK0VBQWlCO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxXQUFXLHFFQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUZBQXFCO0FBQzNCLE1BQU0sdUZBQTJCO0FBQ2pDLE1BQU0sdUZBQTJCO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsV0FBVyx1RUFBYTtBQUN4QixRQUFRLHFFQUFZO0FBQ3BCO0FBQ0E7QUFDQSxVQUFVLDRFQUFnQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLHFFQUFTLElBQUksNEVBQWtCO0FBQ25EO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9kZWZpbml0aW9uLmpzP2JjMjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeURlc3RpbmF0aW9ufSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbidcbmltcG9ydCB7ZmFjdG9yeUxhYmVsfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1sYWJlbCdcbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7ZmFjdG9yeVRpdGxlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS10aXRsZSdcbmltcG9ydCB7ZmFjdG9yeVdoaXRlc3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UnXG5pbXBvcnQge1xuICBtYXJrZG93bkxpbmVFbmRpbmcsXG4gIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UsXG4gIG1hcmtkb3duU3BhY2Vcbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtub3JtYWxpemVJZGVudGlmaWVyfSBmcm9tICdtaWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uID0ge25hbWU6ICdkZWZpbml0aW9uJywgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCB0aXRsZUJlZm9yZSA9IHt0b2tlbml6ZTogdG9rZW5pemVUaXRsZUJlZm9yZSwgcGFydGlhbDogdHJ1ZX1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBpZGVudGlmaWVyXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIEF0IHN0YXJ0IG9mIGEgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIERvIG5vdCBpbnRlcnJ1cHQgcGFyYWdyYXBocyAoYnV0IGRvIGZvbGxvdyBkZWZpbml0aW9ucykuXG4gICAgLy8gVG8gZG86IGRvIGBpbnRlcnJ1cHRgIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIC8vIFRvIGRvOiBwYXJzZSB3aGl0ZXNwYWNlIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuZGVmaW5pdGlvbilcbiAgICByZXR1cm4gYmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYFtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIC8vIFRvIGRvOiBwYXJzZSB3aGl0ZXNwYWNlIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgIGFzc2VydChjb2RlID09PSBjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldCwgJ2V4cGVjdGVkIGBbYCcpXG4gICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKFxuICAgICAgc2VsZixcbiAgICAgIGVmZmVjdHMsXG4gICAgICBsYWJlbEFmdGVyLFxuICAgICAgLy8gTm90ZTogd2UgZG9u4oCZdCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgICAgbm9rLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvbkxhYmVsLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvbkxhYmVsTWFya2VyLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvbkxhYmVsU3RyaW5nXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGxhYmVsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGUpIHtcbiAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihcbiAgICAgIHNlbGYuc2xpY2VTZXJpYWxpemUoc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV1bMV0pLnNsaWNlKDEsIC0xKVxuICAgIClcblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5jb2xvbikge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5kZWZpbml0aW9uTWFya2VyKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuZGVmaW5pdGlvbk1hcmtlcilcbiAgICAgIHJldHVybiBtYXJrZXJBZnRlclxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBtYXJrZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBtYXJrZXJBZnRlcihjb2RlKSB7XG4gICAgLy8gTm90ZTogd2hpdGVzcGFjZSBpcyBvcHRpb25hbC5cbiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBkZXN0aW5hdGlvbkJlZm9yZSkoY29kZSlcbiAgICAgIDogZGVzdGluYXRpb25CZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVzdGluYXRpb25CZWZvcmUoY29kZSkge1xuICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oXG4gICAgICBlZmZlY3RzLFxuICAgICAgZGVzdGluYXRpb25BZnRlcixcbiAgICAgIC8vIE5vdGU6IHdlIGRvbuKAmXQgbmVlZCB0byByZXNldCB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy5cbiAgICAgIG5vayxcbiAgICAgIHR5cGVzLmRlZmluaXRpb25EZXN0aW5hdGlvbixcbiAgICAgIHR5cGVzLmRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwsXG4gICAgICB0eXBlcy5kZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3LFxuICAgICAgdHlwZXMuZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZXN0aW5hdGlvbkFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHRpdGxlQmVmb3JlLCBhZnRlciwgYWZ0ZXIpKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYlxuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlcldoaXRlc3BhY2UsIHR5cGVzLndoaXRlc3BhY2UpKGNvZGUpXG4gICAgICA6IGFmdGVyV2hpdGVzcGFjZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlZmluaXRpb24sIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGJcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyV2hpdGVzcGFjZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5kZWZpbml0aW9uKVxuXG4gICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IGNhcmUgYWJvdXQgdW5pcXVlbmVzcy5cbiAgICAgIC8vIEl04oCZcyBsaWtlbHkgdGhhdCB0aGF0IGRvZXNu4oCZdCBoYXBwZW4gdmVyeSBmcmVxdWVudGx5LlxuICAgICAgLy8gSXQgaXMgbW9yZSBsaWtlbHkgdGhhdCBpdCB3YXN0ZXMgcHJlY2lvdXMgdGltZS5cbiAgICAgIHNlbGYucGFyc2VyLmRlZmluZWQucHVzaChpZGVudGlmaWVyKVxuXG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCBpbnRlcnJ1cHQuXG4gICAgICAvLyAvLyBZb3XigJlkIGJlIGludGVycnVwdGluZy5cbiAgICAgIC8vIHRva2VuaXplci5pbnRlcnJ1cHQgPSB0cnVlXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVUaXRsZUJlZm9yZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiB0aXRsZUJlZm9yZVxuXG4gIC8qKlxuICAgKiBBZnRlciBkZXN0aW5hdGlvbiwgYXQgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYlxuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0aXRsZUJlZm9yZShjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgYmVmb3JlTWFya2VyKShjb2RlKVxuICAgICAgOiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IFthXTogYlxuICAgKiA+IHwgXCJjXCJcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZU1hcmtlcihjb2RlKSB7XG4gICAgcmV0dXJuIGZhY3RvcnlUaXRsZShcbiAgICAgIGVmZmVjdHMsXG4gICAgICB0aXRsZUFmdGVyLFxuICAgICAgbm9rLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvblRpdGxlLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvblRpdGxlTWFya2VyLFxuICAgICAgdHlwZXMuZGVmaW5pdGlvblRpdGxlU3RyaW5nXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHRpdGxlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGl0bGVBZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVNwYWNlKFxuICAgICAgICAgIGVmZmVjdHMsXG4gICAgICAgICAgdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZSxcbiAgICAgICAgICB0eXBlcy53aGl0ZXNwYWNlXG4gICAgICAgICkoY29kZSlcbiAgICAgIDogdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHRpdGxlLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkgPyBvayhjb2RlKSA6IG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/definition.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js": /*!************************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js ***! \************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hardBreakEscape\": () => (/* binding */ hardBreakEscape)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.backslash, 'expected `\\\\`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.hardBreakEscape)\n effects.consume(code)\n return after\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.hardBreakEscape)\n return ok(code)\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRTJEO0FBQ1A7QUFDQTtBQUNiOztBQUV2QyxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLDJFQUFlO0FBQ25DLGtCQUFrQixpRkFBcUI7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsUUFBUSw0RUFBa0I7QUFDMUIsbUJBQW1CLGlGQUFxQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2hhcmQtYnJlYWstZXNjYXBlLmpzPzY3ODMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgaGFyZEJyZWFrRXNjYXBlID0ge1xuICBuYW1lOiAnaGFyZEJyZWFrRXNjYXBlJyxcbiAgdG9rZW5pemU6IHRva2VuaXplSGFyZEJyZWFrRXNjYXBlXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplSGFyZEJyZWFrRXNjYXBlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGEgaGFyZCBicmVhayAoZXNjYXBlKS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFcXFxuICAgKiAgICAgIF5cbiAgICogICB8IGJcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMuYmFja3NsYXNoLCAnZXhwZWN0ZWQgYFxcXFxgJylcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmhhcmRCcmVha0VzY2FwZSlcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gYWZ0ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBlb2wuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFxcbiAgICogICAgICAgXlxuICAgKiAgIHwgYlxuICAgKiBgYGBcbiAgICpcbiAgICogIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuaGFyZEJyZWFrRXNjYXBlKVxuICAgICAgcmV0dXJuIG9rKGNvZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/heading-atx.js": /*!******************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/heading-atx.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"headingAtx\": () => (/* binding */ headingAtx)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n let content\n /** @type {Token} */\n let text\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace) {\n contentStart += 2\n }\n\n // Suffix whitespace, part of the closing.\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace\n ) {\n contentEnd -= 2\n }\n\n if (\n events[contentEnd][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingSequence &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingText,\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkText,\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.contentTypeText\n }\n\n ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_3__.splice)(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0\n\n return start\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeading)\n return before(code)\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign, 'expected `#`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingSequence)\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign &&\n size++ < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.atxHeadingOpeningFenceSizeMax\n ) {\n effects.consume(code)\n return sequenceOpen\n }\n\n // Always at least one `#`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingSequence)\n return atBreak(code)\n }\n\n return nok(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingSequence)\n return sequenceFurther(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeading)\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code)) {\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)(effects, atBreak, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace)(code)\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingText)\n return data(code)\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign) {\n effects.consume(code)\n return sequenceFurther\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingSequence)\n return atBreak(code)\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.atxHeadingText)\n return atBreak(code)\n }\n\n effects.consume(code)\n return data\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9oZWFkaW5nLWF0eC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSx5Q0FBeUM7QUFDdEQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBS25CO0FBQ1k7QUFDTztBQUNRO0FBQ1I7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Y7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCOztBQUVBO0FBQ0EsdUNBQXVDLDRFQUFnQjtBQUN2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyw0RUFBZ0I7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLG9GQUF3QjtBQUMzRDtBQUNBO0FBQ0EsMkNBQTJDLDRFQUFnQjtBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksZ0ZBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwyRUFBZTtBQUMzQjtBQUNBO0FBQ0EsbUJBQW1CLHlGQUF5QjtBQUM1Qzs7QUFFQSxJQUFJLCtEQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw0RUFBZ0I7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLDhDQUFNLFVBQVUsNEVBQWdCO0FBQ3BDLGtCQUFrQixvRkFBd0I7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEVBQWdCO0FBQy9CLGVBQWUsdUdBQXVDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHFFQUFTLElBQUksbUZBQXlCO0FBQ3ZELG1CQUFtQixvRkFBd0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakMsb0JBQW9CLG9GQUF3QjtBQUM1QztBQUNBOztBQUVBLGlCQUFpQixxRUFBUyxJQUFJLDRFQUFrQjtBQUNoRCxtQkFBbUIsNEVBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSx1RUFBYTtBQUNyQixhQUFhLHFFQUFZLG1CQUFtQiw0RUFBZ0I7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixnRkFBb0I7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDRFQUFnQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLG9GQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxRUFBUztBQUN4QixlQUFlLDRFQUFnQjtBQUMvQixNQUFNLG1GQUF5QjtBQUMvQjtBQUNBLG1CQUFtQixnRkFBb0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2hlYWRpbmctYXR4LmpzPzI1NzUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHtcbiAgbWFya2Rvd25MaW5lRW5kaW5nLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93blNwYWNlXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7c3BsaWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgaGVhZGluZ0F0eCA9IHtcbiAgbmFtZTogJ2hlYWRpbmdBdHgnLFxuICB0b2tlbml6ZTogdG9rZW5pemVIZWFkaW5nQXR4LFxuICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eFxufVxuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdBdHgoZXZlbnRzLCBjb250ZXh0KSB7XG4gIGxldCBjb250ZW50RW5kID0gZXZlbnRzLmxlbmd0aCAtIDJcbiAgbGV0IGNvbnRlbnRTdGFydCA9IDNcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNvbnRlbnRcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IHRleHRcblxuICAvLyBQcmVmaXggd2hpdGVzcGFjZSwgcGFydCBvZiB0aGUgb3BlbmluZy5cbiAgaWYgKGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnR5cGUgPT09IHR5cGVzLndoaXRlc3BhY2UpIHtcbiAgICBjb250ZW50U3RhcnQgKz0gMlxuICB9XG5cbiAgLy8gU3VmZml4IHdoaXRlc3BhY2UsIHBhcnQgb2YgdGhlIGNsb3NpbmcuXG4gIGlmIChcbiAgICBjb250ZW50RW5kIC0gMiA+IGNvbnRlbnRTdGFydCAmJlxuICAgIGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSB0eXBlcy53aGl0ZXNwYWNlXG4gICkge1xuICAgIGNvbnRlbnRFbmQgLT0gMlxuICB9XG5cbiAgaWYgKFxuICAgIGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSB0eXBlcy5hdHhIZWFkaW5nU2VxdWVuY2UgJiZcbiAgICAoY29udGVudFN0YXJ0ID09PSBjb250ZW50RW5kIC0gMSB8fFxuICAgICAgKGNvbnRlbnRFbmQgLSA0ID4gY29udGVudFN0YXJ0ICYmXG4gICAgICAgIGV2ZW50c1tjb250ZW50RW5kIC0gMl1bMV0udHlwZSA9PT0gdHlwZXMud2hpdGVzcGFjZSkpXG4gICkge1xuICAgIGNvbnRlbnRFbmQgLT0gY29udGVudFN0YXJ0ICsgMSA9PT0gY29udGVudEVuZCA/IDIgOiA0XG4gIH1cblxuICBpZiAoY29udGVudEVuZCA+IGNvbnRlbnRTdGFydCkge1xuICAgIGNvbnRlbnQgPSB7XG4gICAgICB0eXBlOiB0eXBlcy5hdHhIZWFkaW5nVGV4dCxcbiAgICAgIHN0YXJ0OiBldmVudHNbY29udGVudFN0YXJ0XVsxXS5zdGFydCxcbiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZFxuICAgIH1cbiAgICB0ZXh0ID0ge1xuICAgICAgdHlwZTogdHlwZXMuY2h1bmtUZXh0LFxuICAgICAgc3RhcnQ6IGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnN0YXJ0LFxuICAgICAgZW5kOiBldmVudHNbY29udGVudEVuZF1bMV0uZW5kLFxuICAgICAgY29udGVudFR5cGU6IGNvbnN0YW50cy5jb250ZW50VHlwZVRleHRcbiAgICB9XG5cbiAgICBzcGxpY2UoZXZlbnRzLCBjb250ZW50U3RhcnQsIGNvbnRlbnRFbmQgLSBjb250ZW50U3RhcnQgKyAxLCBbXG4gICAgICBbJ2VudGVyJywgY29udGVudCwgY29udGV4dF0sXG4gICAgICBbJ2VudGVyJywgdGV4dCwgY29udGV4dF0sXG4gICAgICBbJ2V4aXQnLCB0ZXh0LCBjb250ZXh0XSxcbiAgICAgIFsnZXhpdCcsIGNvbnRlbnQsIGNvbnRleHRdXG4gICAgXSlcbiAgfVxuXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGEgaGVhZGluZyAoYXR4KS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5hdHhIZWFkaW5nKVxuICAgIHJldHVybiBiZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLCBhdCBgI2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlKGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMubnVtYmVyU2lnbiwgJ2V4cGVjdGVkIGAjYCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5hdHhIZWFkaW5nU2VxdWVuY2UpXG4gICAgcmV0dXJuIHNlcXVlbmNlT3Blbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIG9wZW5pbmcgc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5udW1iZXJTaWduICYmXG4gICAgICBzaXplKysgPCBjb25zdGFudHMuYXR4SGVhZGluZ09wZW5pbmdGZW5jZVNpemVNYXhcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlblxuICAgIH1cblxuICAgIC8vIEFsd2F5cyBhdCBsZWFzdCBvbmUgYCNgLlxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmF0eEhlYWRpbmdTZXF1ZW5jZSlcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHNvbWV0aGluZywgYmVmb3JlIHNvbWV0aGluZyBlbHNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWFcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLm51bWJlclNpZ24pIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuYXR4SGVhZGluZ1NlcXVlbmNlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlcihjb2RlKVxuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuYXR4SGVhZGluZylcbiAgICAgIC8vIFRvIGRvOiBpbnRlcnJ1cHQgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgICAgLy8gLy8gRmVlbCBmcmVlIHRvIGludGVycnVwdC5cbiAgICAgIC8vIHRva2VuaXplci5pbnRlcnJ1cHQgPSBmYWxzZVxuICAgICAgcmV0dXJuIG9rKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgdHlwZXMud2hpdGVzcGFjZSkoY29kZSlcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogZ2VuZXJhdGUgYGRhdGFgIHRva2VucywgYWRkIHRoZSBgdGV4dGAgdG9rZW4gbGF0ZXIuXG4gICAgLy8gTmVlZHMgZWRpdCBtYXAsIHNlZTogYG1hcmtkb3duLnJzYC5cbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmF0eEhlYWRpbmdUZXh0KVxuICAgIHJldHVybiBkYXRhKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gZnVydGhlciBzZXF1ZW5jZSAoYWZ0ZXIgd2hpdGVzcGFjZSkuXG4gICAqXG4gICAqIENvdWxkIGJlIG5vcm1hbCDigJx2aXNpYmxl4oCdIGhhc2hlcyBpbiB0aGUgaGVhZGluZyBvciBhIGZpbmFsIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWEgIyNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcXVlbmNlRnVydGhlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLm51bWJlclNpZ24pIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlclxuICAgIH1cblxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5hdHhIZWFkaW5nU2VxdWVuY2UpXG4gICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWFcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGRhdGEoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubnVtYmVyU2lnbiB8fFxuICAgICAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmF0eEhlYWRpbmdUZXh0KVxuICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/heading-atx.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/html-flow.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/html-flow.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"htmlFlow\": () => (/* binding */ htmlFlow)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-html-tag-name */ \"../../../node_modules/micromark-util-html-tag-name/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/* harmony import */ var _blank_line_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blank-line.js */ \"../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {tokenize: tokenizeBlankLineBefore, partial: true}\nconst nonLazyContinuationStart = {\n tokenize: tokenizeNonLazyContinuationStart,\n partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n\n while (index--) {\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlow\n ) {\n break\n }\n }\n\n if (index > 1 && events[index - 2][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix) {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start\n // Remove the line prefix.\n events.splice(index - 2, 2)\n }\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n let marker\n /** @type {boolean} */\n let closingTag\n /** @type {string} */\n let buffer\n /** @type {number} */\n let index\n /** @type {Code} */\n let markerB\n\n return start\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan, 'expected `<`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlow)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlowData)\n effects.consume(code)\n return open\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.exclamationMark) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash) {\n effects.consume(code)\n closingTag = true\n return tagCloseStart\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.questionMark) {\n effects.consume(code)\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlInstruction\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n // ASCII alphabetical.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash) {\n effects.consume(code)\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment\n return commentOpenInside\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket) {\n effects.consume(code)\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlCdata\n index = 0\n return cdataOpenInside\n }\n\n // ASCII alphabetical.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) {\n effects.consume(code)\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlDeclaration\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n\n /**\n * After ` | &<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.cdataOpeningString\n\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n\n return cdataOpenInside\n }\n\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | \n * ^^\n * > | \n * ^^\n * ```\n *\n * @type {State}\n */\n function tagName(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEndingOrSpace)(code)\n ) {\n const slash = code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash\n const name = buffer.toLowerCase()\n\n if (!slash && !closingTag && micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlRawNames.includes(name)) {\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRaw\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n if (micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlBasic\n\n if (slash) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n marker = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComplete\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : closingTag\n ? completeClosingTagAfter(code)\n : completeAttributeNameBefore(code)\n }\n\n // ASCII alphanumerical and `-`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric)(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > |
\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n\n return nok(code)\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n\n return completeEnd(code)\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash) {\n effects.consume(code)\n return completeEnd\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.colon || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n\n return completeEnd(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dot ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.colon ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.underscore ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric)(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n\n return completeAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n\n return completeAttributeNameBefore(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueBefore(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent\n ) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.quotationMark || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.apostrophe) {\n effects.consume(code)\n markerB = code\n return completeAttributeValueQuoted\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n return completeAttributeValueUnquoted(code)\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code)\n markerB = null\n return completeAttributeValueQuotedAfter\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.quotationMark ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.apostrophe ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEndingOrSpace)(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ) {\n return completeAttributeNameBefore(code)\n }\n\n return nok(code)\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment) {\n effects.consume(code)\n return continuationCommentInside\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRaw) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlDeclaration) {\n effects.consume(code)\n return continuationClose\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.questionMark && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlInstruction) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.rightSquareBracket && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlCdata) {\n effects.consume(code)\n return continuationCdataInside\n }\n\n if (\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code) &&\n (marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlBasic || marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComplete)\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlowData)\n return effects.check(\n blankLineBefore,\n continuationAfter,\n continuationStart\n )(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlowData)\n return continuationStart(code)\n }\n\n effects.consume(code)\n return continuation\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(\n nonLazyContinuationStart,\n continuationStartNonLazy,\n continuationAfter\n )(code)\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code))\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n return continuationBefore\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | \n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n return continuationStart(code)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlowData)\n return continuation(code)\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.slash) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) {\n const name = buffer.toLowerCase()\n\n if (micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlRawNames.includes(name)) {\n effects.consume(code)\n return continuationClose\n }\n\n return continuation(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code) && buffer.length < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRawSizeMax) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.rightSquareBracket) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) {\n effects.consume(code)\n return continuationClose\n }\n\n // More dashes.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash && marker === micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlowData)\n return continuationAfter(code)\n }\n\n effects.consume(code)\n return continuationClose\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.htmlFlow)\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this\n\n return start\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n return after\n }\n\n return nok(code)\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected a line ending')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n return effects.attempt(_blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine, ok, nok)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9odG1sLWZsb3cuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQVFpQztBQUN3QztBQUNyQjtBQUNRO0FBQ1I7QUFDYjtBQUNFOztBQUV6QyxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxXQUFXO0FBQ3RCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsMEVBQWM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELDRFQUFnQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxhQUFhLE1BQU07QUFDbkI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksOENBQU0sVUFBVSwwRUFBYztBQUNsQyxrQkFBa0IsMEVBQWM7QUFDaEMsa0JBQWtCLDhFQUFrQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFD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QUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksK0NBQU0sQ0FBQyw0RUFBa0I7QUFDN0Isa0JBQWtCLDRFQUFnQjtBQUNsQztBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakMsMkJBQTJCLHFEQUFTO0FBQ3BDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9odG1sLWZsb3cuanM/YzhmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNjaWlBbHBoYSxcbiAgYXNjaWlBbHBoYW51bWVyaWMsXG4gIG1hcmtkb3duTGluZUVuZGluZyxcbiAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSxcbiAgbWFya2Rvd25TcGFjZVxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2h0bWxCbG9ja05hbWVzLCBodG1sUmF3TmFtZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUnXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuaW1wb3J0IHtibGFua0xpbmV9IGZyb20gJy4vYmxhbmstbGluZS5qcydcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgaHRtbEZsb3cgPSB7XG4gIG5hbWU6ICdodG1sRmxvdycsXG4gIHRva2VuaXplOiB0b2tlbml6ZUh0bWxGbG93LFxuICByZXNvbHZlVG86IHJlc29sdmVUb0h0bWxGbG93LFxuICBjb25jcmV0ZTogdHJ1ZVxufVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGJsYW5rTGluZUJlZm9yZSA9IHt0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmVCZWZvcmUsIHBhcnRpYWw6IHRydWV9XG5jb25zdCBub25MYXp5Q29udGludWF0aW9uU3RhcnQgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydCxcbiAgcGFydGlhbDogdHJ1ZVxufVxuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRvSHRtbEZsb3coZXZlbnRzKSB7XG4gIGxldCBpbmRleCA9IGV2ZW50cy5sZW5ndGhcblxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiZcbiAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMuaHRtbEZsb3dcbiAgICApIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGluZGV4ID4gMSAmJiBldmVudHNbaW5kZXggLSAyXVsxXS50eXBlID09PSB0eXBlcy5saW5lUHJlZml4KSB7XG4gICAgLy8gQWRkIHRoZSBwcmVmaXggc3RhcnQgdG8gdGhlIEhUTUwgdG9rZW4uXG4gICAgZXZlbnRzW2luZGV4XVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleCAtIDJdWzFdLnN0YXJ0XG4gICAgLy8gQWRkIHRoZSBwcmVmaXggc3RhcnQgdG8gdGhlIEhUTUwgbGluZSB0b2tlbi5cbiAgICBldmVudHNbaW5kZXggKyAxXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleCAtIDJdWzFdLnN0YXJ0XG4gICAgLy8gUmVtb3ZlIHRoZSBsaW5lIHByZWZpeC5cbiAgICBldmVudHMuc3BsaWNlKGluZGV4IC0gMiwgMilcbiAgfVxuXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIdG1sRmxvdyhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgbWFya2VyXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGNsb3NpbmdUYWdcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBidWZmZXJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBpbmRleFxuICAvKiogQHR5cGUge0NvZGV9ICovXG4gIGxldCBtYXJrZXJCXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIEhUTUwgKGZsb3cpLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHggLz5cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogcGFyc2UgaW5kZW50IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICByZXR1cm4gYmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYDxgLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHggLz5cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZShjb2RlKSB7XG4gICAgYXNzZXJ0KGNvZGUgPT09IGNvZGVzLmxlc3NUaGFuLCAnZXhwZWN0ZWQgYDxgJylcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmh0bWxGbG93KVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuaHRtbEZsb3dEYXRhKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBvcGVuXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDxgLCBhdCB0YWcgbmFtZSBvciBvdGhlciBzdHVmZi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4IC8+XG4gICAqICAgICAgXlxuICAgKiA+IHwgPCFkb2N0eXBlPlxuICAgKiAgICAgIF5cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZXhjbGFtYXRpb25NYXJrKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbk9wZW5cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuc2xhc2gpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgY2xvc2luZ1RhZyA9IHRydWVcbiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnF1ZXN0aW9uTWFyaykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSBjb25zdGFudHMuaHRtbEluc3RydWN0aW9uXG4gICAgICAvLyBUbyBkbzpcbiAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgIC8vIFRvIGRvOiB1c2UgYG1hcmtkb3duLXJzYCBzdHlsZSBpbnRlcnJ1cHQuXG4gICAgICAvLyBXaGlsZSB3ZeKAmXJlIGluIGFuIGluc3RydWN0aW9uIGluc3RlYWQgb2YgYSBkZWNsYXJhdGlvbiwgd2XigJlyZSBvbiBhIGA/YFxuICAgICAgLy8gcmlnaHQgbm93LCBzbyB3ZSBkbyBuZWVkIHRvIHNlYXJjaCBmb3IgYD5gLCBzaW1pbGFyIHRvIGRlY2xhcmF0aW9ucy5cbiAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm90IG51bGwuXG4gICAgICBidWZmZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPCFgLCBhdCBkZWNsYXJhdGlvbiwgY29tbWVudCwgb3IgQ0RBVEEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IWRvY3R5cGU+XG4gICAqICAgICAgIF5cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICAgXlxuICAgKiA+IHwgPCFbQ0RBVEFbPiY8XV0+XG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGRlY2xhcmF0aW9uT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmRhc2gpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgbWFya2VyID0gY29uc3RhbnRzLmh0bWxDb21tZW50XG4gICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGVcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgbWFya2VyID0gY29uc3RhbnRzLmh0bWxDZGF0YVxuICAgICAgaW5kZXggPSAwXG4gICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFiZXRpY2FsLlxuICAgIGlmIChhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIG1hcmtlciA9IGNvbnN0YW50cy5odG1sRGVjbGFyYXRpb25cbiAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgPyBvayA6IGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8IS1gLCBpbnNpZGUgYSBjb21tZW50LCBhdCBhbm90aGVyIGAtYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZGFzaCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPCFbYCwgaW5zaWRlIENEQVRBLCBleHBlY3RpbmcgYENEQVRBW2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IVtDREFUQVs+JjxdXT5cbiAgICogICAgICAgIF5eXl5eXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnN0YW50cy5jZGF0YU9wZW5pbmdTdHJpbmdcblxuICAgIGlmIChjb2RlID09PSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KyspKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcblxuICAgICAgaWYgKGluZGV4ID09PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gLy8gRG8gbm90IGZvcm0gY29udGFpbmVycy5cbiAgICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgPyBvayA6IGNvbnRpbnVhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8L2AsIGluIGNsb3NpbmcgdGFnLCBhdCB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwveD5cbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlKSB7XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm90IG51bGwuXG4gICAgICBidWZmZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhYj5cbiAgICogICAgICBeXlxuICAgKiA+IHwgPC9hYj5cbiAgICogICAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ05hbWUoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuc2xhc2ggfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuIHx8XG4gICAgICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpXG4gICAgKSB7XG4gICAgICBjb25zdCBzbGFzaCA9IGNvZGUgPT09IGNvZGVzLnNsYXNoXG4gICAgICBjb25zdCBuYW1lID0gYnVmZmVyLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKCFzbGFzaCAmJiAhY2xvc2luZ1RhZyAmJiBodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgbWFya2VyID0gY29uc3RhbnRzLmh0bWxSYXdcbiAgICAgICAgLy8gLy8gRG8gbm90IGZvcm0gY29udGFpbmVycy5cbiAgICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgPyBvayhjb2RlKSA6IGNvbnRpbnVhdGlvbihjb2RlKVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrTmFtZXMuaW5jbHVkZXMoYnVmZmVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIG1hcmtlciA9IGNvbnN0YW50cy5odG1sQmFzaWNcblxuICAgICAgICBpZiAoc2xhc2gpIHtcbiAgICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgICAgICByZXR1cm4gYmFzaWNTZWxmQ2xvc2luZ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLy8gRG8gbm90IGZvcm0gY29udGFpbmVycy5cbiAgICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgPyBvayhjb2RlKSA6IGNvbnRpbnVhdGlvbihjb2RlKVxuICAgICAgfVxuXG4gICAgICBtYXJrZXIgPSBjb25zdGFudHMuaHRtbENvbXBsZXRlXG4gICAgICAvLyBEbyBub3Qgc3VwcG9ydCBjb21wbGV0ZSBIVE1MIHdoZW4gaW50ZXJydXB0aW5nLlxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ICYmICFzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV1cbiAgICAgICAgPyBub2soY29kZSlcbiAgICAgICAgOiBjbG9zaW5nVGFnXG4gICAgICAgID8gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZSlcbiAgICAgICAgOiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZSlcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLlxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5kYXNoIHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGJ1ZmZlciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBjbG9zaW5nIHNsYXNoIG9mIGEgYmFzaWMgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8ZGl2Lz5cbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmFzaWNTZWxmQ2xvc2luZyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgPyBvayA6IGNvbnRpbnVhdGlvblxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBjbG9zaW5nIHNsYXNoIG9mIGEgY29tcGxldGUgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8eC8+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQ2xvc2luZ1RhZ0FmdGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBsZXRlRW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYW4gYXR0cmlidXRlIG5hbWUuXG4gICAqXG4gICAqIEF0IGZpcnN0LCB0aGlzIHN0YXRlIGlzIHVzZWQgYWZ0ZXIgYSBjb21wbGV0ZSB0YWcgbmFtZSwgYWZ0ZXIgd2hpdGVzcGFjZSxcbiAgICogd2hlcmUgaXQgZXhwZWN0cyBvcHRpb25hbCBhdHRyaWJ1dGVzIG9yIHRoZSBlbmQgb2YgdGhlIHRhZy5cbiAgICogSXQgaXMgYWxzbyByZXVzZWQgYWZ0ZXIgYXR0cmlidXRlcywgd2hlbiBleHBlY3RpbmcgbW9yZSBvcHRpb25hbFxuICAgKiBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGEgLz5cbiAgICogICAgICAgIF5cbiAgICogPiB8IDxhIDpiPlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgPGEgX2I+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8YSBiPlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgPGEgPlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuc2xhc2gpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFudW1lcmljYWwgYW5kIGA6YCBhbmQgYF9gLlxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5jb2xvbiB8fCBjb2RlID09PSBjb2Rlcy51bmRlcnNjb3JlIHx8IGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmVcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIDpiPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIF9iPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLCBgLmAsIGA6YCwgYW5kIGBfYC5cbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5kYXNoIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5kb3QgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmNvbG9uIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy51bmRlcnNjb3JlIHx8XG4gICAgICBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKVxuICAgICkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYXR0cmlidXRlIG5hbWUsIGF0IGFuIG9wdGlvbmFsIGluaXRpYWxpemVyLCB0aGUgZW5kIG9mIHRoZSB0YWcsIG9yXG4gICAqIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIGI9Yz5cbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVxdWFsc1RvKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSB1bnF1b3RlZCwgZG91YmxlIHF1b3RlZCwgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIGFsbG93aW5nXG4gICAqIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPWM+XG4gICAqICAgICAgICAgIF5cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVzc1RoYW4gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVxdWFsc1RvIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZ3JhdmVBY2NlbnRcbiAgICApIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucXVvdGF0aW9uTWFyayB8fCBjb2RlID09PSBjb2Rlcy5hcG9zdHJvcGhlKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIG1hcmtlckIgPSBjb2RlXG4gICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZFxuICAgIH1cblxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGRvdWJsZSBvciBzaW5nbGUgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgICBeXG4gICAqID4gfCA8YSBiPSdjJz5cbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXJCKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIG1hcmtlckIgPSBudWxsXG4gICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEluIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI9Yz5cbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLnF1b3RhdGlvbk1hcmsgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmFwb3N0cm9waGUgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLnNsYXNoIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5sZXNzVGhhbiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZXF1YWxzVG8gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmF2ZUFjY2VudCB8fFxuICAgICAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRvdWJsZSBvciBzaW5nbGUgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSwgYmVmb3JlIHdoaXRlc3BhY2Ugb3IgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGFnLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGEgYj1cImNcIj5cbiAgICogICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLnNsYXNoIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbiB8fFxuICAgICAgbWFya2Rvd25TcGFjZShjb2RlKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgb2YgYSBjb21wbGV0ZSB0YWcgd2hlcmUgb25seSBhbiBgPmAgaXMgYWxsb3dlZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI9XCJjXCI+XG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlRW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQWZ0ZXJcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYD5gIGluIGEgY29tcGxldGUgdGFnLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHg+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgLy8gLy8gRG8gbm90IGZvcm0gY29udGFpbmVycy5cbiAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSlcbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tcGxldGVBZnRlclxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb250aW51YXRpb24gb2YgYW55IEhUTUwga2luZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZGFzaCAmJiBtYXJrZXIgPT09IGNvbnN0YW50cy5odG1sQ29tbWVudCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ29tbWVudEluc2lkZVxuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5sZXNzVGhhbiAmJiBtYXJrZXIgPT09IGNvbnN0YW50cy5odG1sUmF3KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdUYWdPcGVuXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuICYmIG1hcmtlciA9PT0gY29uc3RhbnRzLmh0bWxEZWNsYXJhdGlvbikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2VcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucXVlc3Rpb25NYXJrICYmIG1hcmtlciA9PT0gY29uc3RhbnRzLmh0bWxJbnN0cnVjdGlvbikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRTcXVhcmVCcmFja2V0ICYmIG1hcmtlciA9PT0gY29uc3RhbnRzLmh0bWxDZGF0YSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ2RhdGFJbnNpZGVcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkgJiZcbiAgICAgIChtYXJrZXIgPT09IGNvbnN0YW50cy5odG1sQmFzaWMgfHwgbWFya2VyID09PSBjb25zdGFudHMuaHRtbENvbXBsZXRlKVxuICAgICkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmh0bWxGbG93RGF0YSlcbiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKFxuICAgICAgICBibGFua0xpbmVCZWZvcmUsXG4gICAgICAgIGNvbnRpbnVhdGlvbkFmdGVyLFxuICAgICAgICBjb250aW51YXRpb25TdGFydFxuICAgICAgKShjb2RlKVxuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuaHRtbEZsb3dEYXRhKVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbnRpbnVhdGlvbiwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHg+XG4gICAqICAgICAgICBeXG4gICAqICAgfCBhc2RcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhcbiAgICAgIG5vbkxhenlDb250aW51YXRpb25TdGFydCxcbiAgICAgIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eSxcbiAgICAgIGNvbnRpbnVhdGlvbkFmdGVyXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbnRpbnVhdGlvbiwgYXQgZW9sLCBiZWZvcmUgbm9uLWxhenkgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4PlxuICAgKiAgICAgICAgXlxuICAgKiAgIHwgYXNkXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25TdGFydE5vbkxhenkoY29kZSkge1xuICAgIGFzc2VydChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nKVxuICAgIHJldHVybiBjb250aW51YXRpb25CZWZvcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb250aW51YXRpb24sIGJlZm9yZSBub24tbGF6eSBjb250ZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgPHg+XG4gICAqID4gfCBhc2RcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkJlZm9yZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBjb250aW51YXRpb25TdGFydChjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuaHRtbEZsb3dEYXRhKVxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb21tZW50IGNvbnRpbnVhdGlvbiwgYWZ0ZXIgb25lIGAtYCwgZXhwZWN0aW5nIGFub3RoZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IS0teHh4LS0+XG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNvbW1lbnRJbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5kYXNoKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYXcgY29udGludWF0aW9uLCBhZnRlciBgPGAsIGF0IGAvYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxzY3JpcHQ+Y29uc29sZS5sb2coMSk8L3NjcmlwdD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3VGFnT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnNsYXNoKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGJ1ZmZlciA9ICcnXG4gICAgICByZXR1cm4gY29udGludWF0aW9uUmF3RW5kVGFnXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHJhdyBjb250aW51YXRpb24sIGFmdGVyIGA8L2AsIGluIGEgcmF3IHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHNjcmlwdD5jb25zb2xlLmxvZygxKTwvc2NyaXB0PlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25SYXdFbmRUYWcoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlci50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmIChodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkgJiYgYnVmZmVyLmxlbmd0aCA8IGNvbnN0YW50cy5odG1sUmF3U2l6ZU1heCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBub3QgbnVsbC5cbiAgICAgIGJ1ZmZlciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uUmF3RW5kVGFnXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNkYXRhIGNvbnRpbnVhdGlvbiwgYWZ0ZXIgYF1gLCBleHBlY3RpbmcgYF0+YC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhW0NEQVRBWz4mPF1dPlxuICAgKiAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNkYXRhSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRTcXVhcmVCcmFja2V0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBkZWNsYXJhdGlvbiBvciBpbnN0cnVjdGlvbiBjb250aW51YXRpb24sIGF0IGA+YC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhLS0+XG4gICAqICAgICAgICAgXlxuICAgKiA+IHwgPD8+XG4gICAqICAgICAgIF5cbiAgICogPiB8IDwhcT5cbiAgICogICAgICAgIF5cbiAgICogPiB8IDwhLS1hYi0tPlxuICAgKiAgICAgICAgICAgICBeXG4gICAqID4gfCA8IVtDREFUQVs+JjxdXT5cbiAgICogICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2VcbiAgICB9XG5cbiAgICAvLyBNb3JlIGRhc2hlcy5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZGFzaCAmJiBtYXJrZXIgPT09IGNvbnN0YW50cy5odG1sQ29tbWVudCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gY2xvc2VkIGNvbnRpbnVhdGlvbjogZXZlcnl0aGluZyB3ZSBnZXQgdW50aWwgdGhlIGVvbC9lb2YgaXMgcGFydCBvZiBpdC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhZG9jdHlwZT5cbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25DbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5odG1sRmxvd0RhdGEpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQWZ0ZXIoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBEb25lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCFkb2N0eXBlPlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkFmdGVyKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMuaHRtbEZsb3cpXG4gICAgLy8gLy8gRmVlbCBmcmVlIHRvIGludGVycnVwdC5cbiAgICAvLyB0b2tlbml6ZXIuaW50ZXJydXB0ID0gZmFsc2VcbiAgICAvLyAvLyBObyBsb25nZXIgY29uY3JldGUuXG4gICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gZmFsc2VcbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIEF0IGVvbCwgYmVmb3JlIGNvbnRpbnVhdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICogYGBganNcbiAgICogICAgICAgICAgICBeXG4gICAqICAgfCBiXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICAgIHJldHVybiBhZnRlclxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvbnRpbnVhdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ICogYGBganNcbiAgICogPiB8IGJcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdID8gbm9rKGNvZGUpIDogb2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUJsYW5rTGluZUJlZm9yZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZW9sLCBleHBlY3RpbmcgYmxhbmsgbGluZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxkaXY+XG4gICAqICAgICAgICAgIF5cbiAgICogICB8XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSwgJ2V4cGVjdGVkIGEgbGluZSBlbmRpbmcnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsYW5rTGluZSwgb2ssIG5vaylcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/html-flow.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/html-text.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/html-text.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"htmlText\": () => (/* binding */ htmlText)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst htmlText = {name: 'htmlText', tokenize: tokenizeHtmlText}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable | undefined} */\n let marker\n /** @type {number} */\n let index\n /** @type {State} */\n let returnState\n\n return start\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan, 'expected `<`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlText)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData)\n effects.consume(code)\n return open\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.exclamationMark) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.slash) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.questionMark) {\n effects.consume(code)\n return instruction\n }\n\n // ASCII alphabetical.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n return nok(code)\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash) {\n effects.consume(code)\n return commentOpenInside\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket) {\n effects.consume(code)\n index = 0\n return cdataOpenInside\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) {\n effects.consume(code)\n return declaration\n }\n\n return nok(code)\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash) {\n effects.consume(code)\n return commentEnd\n }\n\n return nok(code)\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash) {\n effects.consume(code)\n return commentClose\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = comment\n return lineEndingBefore(code)\n }\n\n effects.consume(code)\n return comment\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash) {\n effects.consume(code)\n return commentEnd\n }\n\n return comment(code)\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan\n ? end(code)\n : code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash\n ? commentClose(code)\n : comment(code)\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.cdataOpeningString\n\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n return index === value.length ? cdata : cdataOpenInside\n }\n\n return nok(code)\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) {\n effects.consume(code)\n return cdataClose\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = cdata\n return lineEndingBefore(code)\n }\n\n effects.consume(code)\n return cdata\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n return end(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n return end(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = declaration\n return lineEndingBefore(code)\n }\n\n effects.consume(code)\n return declaration\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.questionMark) {\n effects.consume(code)\n return instructionClose\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = instruction\n return lineEndingBefore(code)\n }\n\n effects.consume(code)\n return instruction\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ? end(code) : instruction(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return nok(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return tagCloseBetween(code)\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = tagCloseBetween\n return lineEndingBefore(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n\n return end(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code)\n ) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.slash) {\n effects.consume(code)\n return end\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.colon || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = tagOpenBetween\n return lineEndingBefore(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n\n return end(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.dot ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.colon ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.underscore ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n return tagOpenAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = tagOpenAttributeNameAfter\n return lineEndingBefore(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n\n return tagOpenBetween(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent\n ) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.quotationMark || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.apostrophe) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = tagOpenAttributeValueBefore\n return lineEndingBefore(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueQuotedAfter\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return nok(code)\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n returnState = tagOpenAttributeValueQuoted\n return lineEndingBefore(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.quotationMark ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.apostrophe ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent\n ) {\n return nok(code)\n }\n\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code)\n ) {\n return tagOpenBetween(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.slash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code)\n ) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) {\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlText)\n return ok\n }\n\n return nok(code)\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(returnState, 'expected return state')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected eol')\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return lineEndingAfter\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(\n effects,\n lineEndingAfterPrefix,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix,\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize\n )(code)\n : lineEndingAfterPrefix(code)\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData)\n return returnState(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9odG1sLXRleHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBT25CO0FBQ21CO0FBQ1E7QUFDUjtBQUNiOztBQUV2QyxXQUFXLFdBQVc7QUFDZixrQkFBa0I7O0FBRXpCO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhLCtCQUErQjtBQUM1QztBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsT0FBTztBQUNwQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsMEVBQWM7QUFDbEMsa0JBQWtCLDBFQUFjO0FBQ2hDLGtCQUFrQiw4RUFBa0I7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLGlGQUFxQjtBQUN0QztBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVFQUFXO0FBQzVCO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsOEVBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsb0VBQVU7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsc0VBQVU7QUFDM0I7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtRkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxvRUFBVTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsc0VBQVU7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLHFFQUFTO0FBQzFCO0FBQ0E7O0FBRUEsaUJBQWlCLHNFQUFVO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLDRFQUFrQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixzRUFBVTtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQkFBb0IsNkVBQWlCO0FBQ3JDO0FBQ0EsaUJBQWlCLHNFQUFVO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxrQkFBa0IsNEZBQTRCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBOztBQUVBLGlCQUFpQixvRkFBd0I7QUFDekM7QUFDQTtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLG9GQUF3QjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDO0FBQ0E7O0FBRUEsaUJBQWlCLG9GQUF3QjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVMsYUFBYSw2RUFBaUI7QUFDeEQ7QUFDQTs7QUFFQSxRQUFRLDRFQUFrQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBOztBQUVBLGlCQUFpQiw4RUFBa0I7QUFDbkM7QUFDQTtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0JBQW9CLDZFQUFpQjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFFBQVEsb0VBQVU7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0VBQVUsSUFBSSwyRUFBaUI7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsUUFBUSw0RUFBa0I7QUFDMUI7QUFDQTtBQUNBOztBQUVBLFFBQVEsdUVBQWE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0VBQVUsSUFBSSwyRUFBaUI7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSx1RUFBVztBQUMxQixlQUFlLDZFQUFpQjtBQUNoQyxNQUFNLG1GQUF5QjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsdUVBQVc7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHVFQUFXLGFBQWEsNEVBQWdCLElBQUksb0VBQVU7QUFDdkU7QUFDQTtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLHVFQUFhO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNFQUFVO0FBQ3pCLGVBQWUscUVBQVM7QUFDeEIsZUFBZSx1RUFBVztBQUMxQixlQUFlLDRFQUFnQjtBQUMvQixNQUFNLDJFQUFpQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDBFQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLDRFQUFrQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsUUFBUSx1RUFBYTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxRUFBUztBQUN4QixlQUFlLDBFQUFjO0FBQzdCLGVBQWUsMEVBQWM7QUFDN0IsZUFBZSw2RUFBaUI7QUFDaEMsZUFBZSw2RUFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiwrRUFBbUIsYUFBYSw0RUFBZ0I7QUFDakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSw0RUFBa0I7QUFDMUI7QUFDQTtBQUNBOztBQUVBLFFBQVEsdUVBQWE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFFQUFTO0FBQ3hCLGVBQWUsK0VBQW1CO0FBQ2xDLGVBQWUsNEVBQWdCO0FBQy9CLGVBQWUsMEVBQWM7QUFDN0IsZUFBZSwwRUFBYztBQUM3QixlQUFlLDZFQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLHVFQUFXO0FBQzFCLGVBQWUsNkVBQWlCO0FBQ2hDLE1BQU0sbUZBQXlCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUVBQVc7QUFDMUIsZUFBZSw2RUFBaUI7QUFDaEMsTUFBTSxtRkFBeUI7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDZFQUFpQjtBQUNsQztBQUNBLG1CQUFtQiw4RUFBa0I7QUFDckMsbUJBQW1CLDBFQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksOENBQU07QUFDVixJQUFJLCtDQUFNLENBQUMsNEVBQWtCO0FBQzdCLGlCQUFpQiw4RUFBa0I7QUFDbkMsa0JBQWtCLDRFQUFnQjtBQUNsQztBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsSUFBSSw4Q0FBTTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUVBQWE7QUFDeEIsUUFBUSxxRUFBWTtBQUNwQjtBQUNBO0FBQ0EsVUFBVSw0RUFBZ0I7QUFDMUI7QUFDQTtBQUNBLGNBQWMsaUZBQWlCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGtCQUFrQiw4RUFBa0I7QUFDcEM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2Rldi9saWIvaHRtbC10ZXh0LmpzPzYyZDciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHtcbiAgYXNjaWlBbHBoYSxcbiAgYXNjaWlBbHBoYW51bWVyaWMsXG4gIG1hcmtkb3duTGluZUVuZGluZyxcbiAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSxcbiAgbWFya2Rvd25TcGFjZVxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBodG1sVGV4dCA9IHtuYW1lOiAnaHRtbFRleHQnLCB0b2tlbml6ZTogdG9rZW5pemVIdG1sVGV4dH1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIdG1sVGV4dChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8Q29kZT4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBtYXJrZXJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBpbmRleFxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBsZXQgcmV0dXJuU3RhdGVcblxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgSFRNTCAodGV4dCkuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMubGVzc1RoYW4sICdleHBlY3RlZCBgPGAnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuaHRtbFRleHQpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5odG1sVGV4dERhdGEpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIG9wZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IHRhZyBuYW1lIG9yIG90aGVyIHN0dWZmLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8Yj4gY1xuICAgKiAgICAgICAgXlxuICAgKiA+IHwgYSA8IWRvY3R5cGU+IGNcbiAgICogICAgICAgIF5cbiAgICogPiB8IGEgPCEtLWItLT4gY1xuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gb3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmV4Y2xhbWF0aW9uTWFyaykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gZGVjbGFyYXRpb25PcGVuXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnNsYXNoKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnF1ZXN0aW9uTWFyaykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25cbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5cbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhYCwgYXQgZGVjbGFyYXRpb24sIGNvbW1lbnQsIG9yIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IWRvY3R5cGU+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhLS1iLS0+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhW0NEQVRBWz4mPF1dPiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb25PcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZGFzaCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGVcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgaW5kZXggPSAwXG4gICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlXG4gICAgfVxuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGEgY29tbWVudCwgYWZ0ZXIgYDwhLWAsIGF0IGFub3RoZXIgYC1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZGFzaCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tbWVudEVuZFxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb21tZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmRhc2gpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbW1lbnRDbG9zZVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gY29tbWVudFxuICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29tbWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbW1lbnQsIGFmdGVyIGAtYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCEtLWItLT4gY1xuICAgKiAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50Q2xvc2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5kYXNoKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21tZW50RW5kXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1lbnQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb21tZW50LCBhZnRlciBgLS1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50RW5kKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW5cbiAgICAgID8gZW5kKGNvZGUpXG4gICAgICA6IGNvZGUgPT09IGNvZGVzLmRhc2hcbiAgICAgID8gY29tbWVudENsb3NlKGNvZGUpXG4gICAgICA6IGNvbW1lbnQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPCFbYCwgaW4gQ0RBVEEsIGV4cGVjdGluZyBgQ0RBVEFbYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCFbQ0RBVEFbPiY8XV0+IGJcbiAgICogICAgICAgICAgXl5eXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjZGF0YU9wZW5JbnNpZGUoY29kZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29uc3RhbnRzLmNkYXRhT3BlbmluZ1N0cmluZ1xuXG4gICAgaWYgKGNvZGUgPT09IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgrKykpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGluZGV4ID09PSB2YWx1ZS5sZW5ndGggPyBjZGF0YSA6IGNkYXRhT3Blbkluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBDREFUQS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCFbQ0RBVEFbPiY8XV0+IGJcbiAgICogICAgICAgICAgICAgICAgXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjZGF0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZikge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNkYXRhQ2xvc2VcbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IGNkYXRhXG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEluIENEQVRBLCBhZnRlciBgXWAsIGF0IGFub3RoZXIgYF1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2RhdGFDbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY2RhdGFFbmRcbiAgICB9XG5cbiAgICByZXR1cm4gY2RhdGEoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBDREFUQSwgYWZ0ZXIgYF1dYCwgYXQgYD5gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhRW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIHJldHVybiBlbmQoY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRTcXVhcmVCcmFja2V0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjZGF0YUVuZFxuICAgIH1cblxuICAgIHJldHVybiBjZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IWI+IGNcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb24oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIHJldHVybiBlbmQoY29kZSlcbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IGRlY2xhcmF0aW9uXG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBkZWNsYXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEluIGluc3RydWN0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8P2I/PiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zdHJ1Y3Rpb24oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucXVlc3Rpb25NYXJrKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkNsb3NlXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSBpbnN0cnVjdGlvblxuICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBpbnN0cnVjdGlvbiwgYWZ0ZXIgYD9gLCBhdCBgPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDw/Yj8+IGNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc3RydWN0aW9uQ2xvc2UoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbiA/IGVuZChjb2RlKSA6IGluc3RydWN0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwvYCwgaW4gY2xvc2luZyB0YWcsIGF0IHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8L2I+IGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ0Nsb3NlXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8L3hgLCBpbiBhIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8L2I+IGNcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnQ2xvc2UoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpY2FsIGFuZCBgLWAuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmRhc2ggfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ0Nsb3NlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNsb3NpbmcgdGFnLCBhZnRlciB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPC9iPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW5cbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2VlblxuICAgIH1cblxuICAgIHJldHVybiBlbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPHhgLCBpbiBvcGVuaW5nIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8Yj4gY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW4oY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpY2FsIGFuZCBgLWAuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmRhc2ggfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5zbGFzaCB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4gfHxcbiAgICAgIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIHRhZywgYWZ0ZXIgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkJldHdlZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5zbGFzaCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gZW5kXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFiZXRpY2FsIGFuZCBgOmAgYW5kIGBfYC5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuY29sb24gfHwgY29kZSA9PT0gY29kZXMudW5kZXJzY29yZSB8fCBhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkJldHdlZW5cbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuXG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGF0dHJpYnV0ZSBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPiBkXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwgYW5kIGAtYCwgYC5gLCBgOmAsIGFuZCBgX2AuXG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMuZGFzaCB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZG90IHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5jb2xvbiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMudW5kZXJzY29yZSB8fFxuICAgICAgYXNjaWlBbHBoYW51bWVyaWMoY29kZSlcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBhdHRyaWJ1dGUgbmFtZSwgYmVmb3JlIGluaXRpYWxpemVyLCB0aGUgZW5kIG9mIHRoZSB0YWcsIG9yXG4gICAqIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM+IGRcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lcXVhbHNUbykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyXG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIHVucXVvdGVkLCBkb3VibGUgcXVvdGVkLCBvciBzaW5nbGUgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsb3dpbmdcbiAgICogd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGIgYz1kPiBlXG4gICAqICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmxlc3NUaGFuIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5lcXVhbHNUbyB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmdyYXZlQWNjZW50XG4gICAgKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnF1b3RhdGlvbk1hcmsgfHwgY29kZSA9PT0gY29kZXMuYXBvc3Ryb3BoZSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSBjb2RlXG4gICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmVcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEluIGRvdWJsZSBvciBzaW5nbGUgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGIgYz1cImRcIj4gZVxuICAgKiAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgbWFya2VyID0gdW5kZWZpbmVkXG4gICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXJcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEluIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGIgYz1kPiBlXG4gICAqICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMucXVvdGF0aW9uTWFyayB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuYXBvc3Ryb3BoZSB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVzc1RoYW4gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVxdWFsc1RvIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmF2ZUFjY2VudFxuICAgICkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLnNsYXNoIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbiB8fFxuICAgICAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVVucXVvdGVkXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZG91YmxlIG9yIHNpbmdsZSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBiZWZvcmUgd2hpdGVzcGFjZSBvciB0aGUgZW5kXG4gICAqIG9mIHRoZSB0YWcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM9XCJkXCI+IGVcbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcihjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMuc2xhc2ggfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuIHx8XG4gICAgICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIG9mIGEgdGFnIHdoZXJlIG9ubHkgYW4gYD5gIGlzIGFsbG93ZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM9XCJkXCI+IGVcbiAgICogICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBlbmQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuaHRtbFRleHREYXRhKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmh0bWxUZXh0KVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IGVvbC5cbiAgICpcbiAgICogPiDwn5GJICoqTm90ZSoqOiB3ZSBjYW7igJl0IGhhdmUgYmxhbmsgbGluZXMgaW4gdGV4dCwgc28gbm8gbmVlZCB0byB3b3JyeSBhYm91dFxuICAgKiA+IGVtcHR5IHRva2Vucy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCEtLWFcbiAgICogICAgICAgICAgICBeXG4gICAqICAgfCBiLS0+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpIHtcbiAgICBhc3NlcnQocmV0dXJuU3RhdGUsICdleHBlY3RlZCByZXR1cm4gc3RhdGUnKVxuICAgIGFzc2VydChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksICdleHBlY3RlZCBlb2wnKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5odG1sVGV4dERhdGEpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nKVxuICAgIHJldHVybiBsaW5lRW5kaW5nQWZ0ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBlb2wsIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqID4g8J+RiSAqKk5vdGUqKjogd2UgY2Fu4oCZdCBoYXZlIGJsYW5rIGxpbmVzIGluIHRleHQsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXRcbiAgICogPiBlbXB0eSB0b2tlbnMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCBhIDwhLS1hXG4gICAqID4gfCBiLS0+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXIoY29kZSkge1xuICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG4gICAgYXNzZXJ0KFxuICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwsXG4gICAgICAnZXhwZWN0ZWQgYGRpc2FibGUubnVsbGAgdG8gYmUgcG9wdWxhdGVkJ1xuICAgIClcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5U3BhY2UoXG4gICAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgICBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgsXG4gICAgICAgICAgdHlwZXMubGluZVByZWZpeCxcbiAgICAgICAgICBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJylcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGNvbnN0YW50cy50YWJTaXplXG4gICAgICAgICkoY29kZSlcbiAgICAgIDogbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZW9sLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiA+IPCfkYkgKipOb3RlKio6IHdlIGNhbuKAmXQgaGF2ZSBibGFuayBsaW5lcyBpbiB0ZXh0LCBzbyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gICAqID4gZW1wdHkgdG9rZW5zLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYSA8IS0tYVxuICAgKiA+IHwgYi0tPlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmh0bWxUZXh0RGF0YSlcbiAgICByZXR1cm4gcmV0dXJuU3RhdGUoY29kZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/html-text.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"labelEnd\": () => (/* binding */ labelEnd)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_destination__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-factory-destination */ \"../../../node_modules/micromark-factory-destination/dev/index.js\");\n/* harmony import */ var micromark_factory_label__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-factory-label */ \"../../../node_modules/micromark-factory-label/dev/index.js\");\n/* harmony import */ var micromark_factory_title__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-factory-title */ \"../../../node_modules/micromark-factory-title/dev/index.js\");\n/* harmony import */ var micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-whitespace */ \"../../../node_modules/micromark-factory-whitespace/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-normalize-identifier */ \"../../../node_modules/micromark-util-normalize-identifier/dev/index.js\");\n/* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-resolve-all */ \"../../../node_modules/micromark-util-resolve-all/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {tokenize: tokenizeResource}\n/** @type {Construct} */\nconst referenceFullConstruct = {tokenize: tokenizeReferenceFull}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {tokenize: tokenizeReferenceCollapsed}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1\n\n while (++index < events.length) {\n const token = events[index][1]\n\n if (\n token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelImage ||\n token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink ||\n token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelEnd\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelImage ? 4 : 2)\n token.type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.data\n index++\n }\n }\n\n return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n let token\n /** @type {number | undefined} */\n let open\n /** @type {number | undefined} */\n let close\n /** @type {Array} */\n let media\n\n // Find an opening.\n while (index--) {\n token = events[index][1]\n\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (\n token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.link ||\n (token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink && token._inactive)\n ) {\n break\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink) {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelImage || token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink) &&\n !token._balanced\n ) {\n open = index\n\n if (token.type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink) {\n offset = 2\n break\n }\n }\n } else if (token.type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelEnd) {\n close = index\n }\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(open !== undefined, '`open` is supposed to be found')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(close !== undefined, '`close` is supposed to be found')\n\n const group = {\n type: events[open][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.link : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.image,\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n\n const label = {\n type: micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.label,\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n }\n\n const text = {\n type: micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelText,\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n }\n\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ]\n\n // Opening marker.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, events.slice(open + 1, open + offset + 3))\n\n // Text open.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [['enter', text, context]])\n\n // Always populated by defaults.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n context.parser.constructs.insideSpan.null,\n 'expected `insideSpan.null` to be populated'\n )\n // Between.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(\n media,\n (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__.resolveAll)(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n )\n\n // Text close, marker close, label close.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ])\n\n // Reference, resource, or so.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, events.slice(close + 1))\n\n // Media close.\n media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [['exit', group, context]])\n\n ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, open, events.length, media)\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n let labelStart\n /** @type {boolean} */\n let defined\n\n // Find an opening.\n while (index--) {\n if (\n (self.events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelImage ||\n self.events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelLink) &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n\n return start\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.rightSquareBracket, 'expected `]`')\n\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code)\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code)\n }\n\n defined = self.parser.defined.includes(\n (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__.normalizeIdentifier)(\n self.sliceSerialize({start: labelStart.end, end: self.now()})\n )\n )\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelEnd)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.labelEnd)\n return after\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis) {\n return effects.attempt(\n resourceConstruct,\n labelEndOk,\n defined ? labelEndOk : labelEndNok\n )(code)\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket) {\n return effects.attempt(\n referenceFullConstruct,\n labelEndOk,\n defined ? referenceNotFull : labelEndNok\n )(code)\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code)\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(\n referenceCollapsedConstruct,\n labelEndOk,\n labelEndNok\n )(code)\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code)\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis, 'expected left paren')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resource)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceMarker)\n return resourceBefore\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code)\n ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceOpen)(code)\n : resourceOpen(code)\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.rightParenthesis) {\n return resourceEnd(code)\n }\n\n return (0,micromark_factory_destination__WEBPACK_IMPORTED_MODULE_8__.factoryDestination)(\n effects,\n resourceDestinationAfter,\n resourceDestinationMissing,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceDestination,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceDestinationLiteral,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceDestinationLiteralMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceDestinationRaw,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceDestinationString,\n micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_9__.constants.linkResourceDestinationBalanceMax\n )(code)\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code)\n ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceBetween)(code)\n : resourceEnd(code)\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code)\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.quotationMark ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.apostrophe ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis\n ) {\n return (0,micromark_factory_title__WEBPACK_IMPORTED_MODULE_10__.factoryTitle)(\n effects,\n resourceTitleAfter,\n nok,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceTitle,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceTitleMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceTitleString\n )(code)\n }\n\n return resourceEnd(code)\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code)\n ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceEnd)(code)\n : resourceEnd(code)\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.rightParenthesis) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resourceMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.resource)\n return ok\n }\n\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this\n\n return referenceFull\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket, 'expected left bracket')\n return micromark_factory_label__WEBPACK_IMPORTED_MODULE_11__.factoryLabel.call(\n self,\n effects,\n referenceFullAfter,\n referenceFullMissing,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.reference,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceMarker,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceString\n )(code)\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(\n (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__.normalizeIdentifier)(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n )\n ? ok(code)\n : nok(code)\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket, 'expected left bracket')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.reference)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceMarker)\n return referenceCollapsedOpen\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_4__.codes.rightSquareBracket) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.referenceMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.reference)\n return ok\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9sYWJlbC1lbmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSx5Q0FBeUM7QUFDdEQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRWdFO0FBQ1o7QUFDQTtBQUNVO0FBQ0k7QUFDZjtBQUNvQjtBQUNsQjtBQUNEO0FBQ1E7QUFDUjtBQUNiOztBQUV2QyxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxXQUFXO0FBQ3RCLDJCQUEyQjtBQUMzQixXQUFXLFdBQVc7QUFDdEIsZ0NBQWdDO0FBQ2hDLFdBQVcsV0FBVztBQUN0QixxQ0FBcUM7O0FBRXJDLFdBQVcsVUFBVTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsNEVBQWdCO0FBQ3JDLHFCQUFxQiwyRUFBZTtBQUNwQyxxQkFBcUIsMEVBQWM7QUFDbkM7QUFDQTtBQUNBLDhDQUE4Qyw0RUFBZ0I7QUFDOUQsbUJBQW1CLHNFQUFVO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsYUFBYSxjQUFjO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0VBQVU7QUFDakMsd0JBQXdCLDJFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlELDJFQUFlO0FBQ3hFO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLHdCQUF3Qiw0RUFBZ0IsbUJBQW1CLDJFQUFlO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsMkVBQWU7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdCQUF3QiwwRUFBYztBQUM1QztBQUNBO0FBQ0E7O0FBRUEsRUFBRSw4Q0FBTTtBQUNSLEVBQUUsK0NBQU07O0FBRVI7QUFDQSxtQ0FBbUMsMkVBQWUsR0FBRyxzRUFBVSxHQUFHLHVFQUFXO0FBQzdFLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQSxVQUFVLHVFQUFXO0FBQ3JCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQSxVQUFVLDJFQUFlO0FBQ3pCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLDREQUFJOztBQUVkO0FBQ0EsVUFBVSw0REFBSTs7QUFFZDtBQUNBLEVBQUUsK0NBQU07QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNERBQUk7QUFDZDtBQUNBLElBQUksc0VBQVU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSw0REFBSTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLDREQUFJOztBQUVkO0FBQ0EsVUFBVSw0REFBSTs7QUFFZCxFQUFFLCtEQUFNOztBQUVSO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw0RUFBZ0I7QUFDdEQsdUNBQXVDLDJFQUFlO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLG9GQUF3Qjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSx3RkFBbUI7QUFDekIsNkJBQTZCLHVDQUF1QztBQUNwRTtBQUNBO0FBQ0Esa0JBQWtCLDBFQUFjO0FBQ2hDLGtCQUFrQiw2RUFBaUI7QUFDbkM7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDLGlCQUFpQiwwRUFBYztBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaUZBQXFCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixtRkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsaUZBQXFCO0FBQ3pDLGtCQUFrQiwwRUFBYztBQUNoQyxrQkFBa0IsZ0ZBQW9CO0FBQ3RDO0FBQ0EsaUJBQWlCLGdGQUFvQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFdBQVcsbUZBQXlCO0FBQ3BDLFFBQVEsK0VBQWlCO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLGtGQUFzQjtBQUN2QztBQUNBOztBQUVBLFdBQVcsaUZBQWtCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLE1BQU0scUZBQXlCO0FBQy9CLE1BQU0sNEZBQWdDO0FBQ3RDLE1BQU0sa0dBQXNDO0FBQzVDLE1BQU0sd0ZBQTRCO0FBQ2xDLE1BQU0sMkZBQStCO0FBQ3JDLE1BQU0sMkdBQTJDO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsV0FBVyxtRkFBeUI7QUFDcEMsUUFBUSwrRUFBaUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrRUFBbUI7QUFDbEMsZUFBZSw0RUFBZ0I7QUFDL0IsZUFBZSxpRkFBcUI7QUFDcEM7QUFDQSxhQUFhLHNFQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0VBQW1CO0FBQzNCLFFBQVEscUZBQXlCO0FBQ2pDLFFBQVEscUZBQXlCO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxXQUFXLG1GQUF5QjtBQUNwQyxRQUFRLCtFQUFpQjtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixrRkFBc0I7QUFDdkMsb0JBQW9CLGdGQUFvQjtBQUN4QztBQUNBLG1CQUFtQixnRkFBb0I7QUFDdkMsbUJBQW1CLDBFQUFjO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLG1GQUF1QjtBQUMzQyxXQUFXLHVFQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMkVBQWU7QUFDckIsTUFBTSxpRkFBcUI7QUFDM0IsTUFBTSxpRkFBcUI7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0ZBQW1CO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtDQUFNLFVBQVUsbUZBQXVCO0FBQzNDLGtCQUFrQiwyRUFBZTtBQUNqQyxrQkFBa0IsaUZBQXFCO0FBQ3ZDO0FBQ0EsaUJBQWlCLGlGQUFxQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxpQkFBaUIsb0ZBQXdCO0FBQ3pDLG9CQUFvQixpRkFBcUI7QUFDekM7QUFDQSxtQkFBbUIsaUZBQXFCO0FBQ3hDLG1CQUFtQiwyRUFBZTtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2xhYmVsLWVuZC5qcz8yMzUwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FdmVudH0gRXZlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUmVzb2x2ZXJ9IFJlc29sdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlEZXN0aW5hdGlvbn0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24nXG5pbXBvcnQge2ZhY3RvcnlMYWJlbH0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktbGFiZWwnXG5pbXBvcnQge2ZhY3RvcnlUaXRsZX0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktdGl0bGUnXG5pbXBvcnQge2ZhY3RvcnlXaGl0ZXNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge3B1c2gsIHNwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcbmltcG9ydCB7bm9ybWFsaXplSWRlbnRpZmllcn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInXG5pbXBvcnQge3Jlc29sdmVBbGx9IGZyb20gJ21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGFiZWxFbmQgPSB7XG4gIG5hbWU6ICdsYWJlbEVuZCcsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsRW5kLFxuICByZXNvbHZlVG86IHJlc29sdmVUb0xhYmVsRW5kLFxuICByZXNvbHZlQWxsOiByZXNvbHZlQWxsTGFiZWxFbmRcbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCByZXNvdXJjZUNvbnN0cnVjdCA9IHt0b2tlbml6ZTogdG9rZW5pemVSZXNvdXJjZX1cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCA9IHt0b2tlbml6ZTogdG9rZW5pemVSZWZlcmVuY2VGdWxsfVxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QgPSB7dG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkfVxuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFsbExhYmVsRW5kKGV2ZW50cykge1xuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIGNvbnN0IHRva2VuID0gZXZlbnRzW2luZGV4XVsxXVxuXG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gdHlwZXMubGFiZWxJbWFnZSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gdHlwZXMubGFiZWxMaW5rIHx8XG4gICAgICB0b2tlbi50eXBlID09PSB0eXBlcy5sYWJlbEVuZFxuICAgICkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBtYXJrZXIuXG4gICAgICBldmVudHMuc3BsaWNlKGluZGV4ICsgMSwgdG9rZW4udHlwZSA9PT0gdHlwZXMubGFiZWxJbWFnZSA/IDQgOiAyKVxuICAgICAgdG9rZW4udHlwZSA9IHR5cGVzLmRhdGFcbiAgICAgIGluZGV4KytcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnRzXG59XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9MYWJlbEVuZChldmVudHMsIGNvbnRleHQpIHtcbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aFxuICBsZXQgb2Zmc2V0ID0gMFxuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBsZXQgdG9rZW5cbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBvcGVuXG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY2xvc2VcbiAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gIGxldCBtZWRpYVxuXG4gIC8vIEZpbmQgYW4gb3BlbmluZy5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB0b2tlbiA9IGV2ZW50c1tpbmRleF1bMV1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICAvLyBJZiB3ZSBzZWUgYW5vdGhlciBsaW5rLCBvciBpbmFjdGl2ZSBsaW5rIGxhYmVsLCB3ZeKAmXZlIGJlZW4gaGVyZSBiZWZvcmUuXG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuLnR5cGUgPT09IHR5cGVzLmxpbmsgfHxcbiAgICAgICAgKHRva2VuLnR5cGUgPT09IHR5cGVzLmxhYmVsTGluayAmJiB0b2tlbi5faW5hY3RpdmUpXG4gICAgICApIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayBvdGhlciBsaW5rIG9wZW5pbmdzIGFzIGluYWN0aXZlLCBhcyB3ZSBjYW7igJl0IGhhdmUgbGlua3MgaW5cbiAgICAgIC8vIGxpbmtzLlxuICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiYgdG9rZW4udHlwZSA9PT0gdHlwZXMubGFiZWxMaW5rKSB7XG4gICAgICAgIHRva2VuLl9pbmFjdGl2ZSA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsb3NlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiZcbiAgICAgICAgKHRva2VuLnR5cGUgPT09IHR5cGVzLmxhYmVsSW1hZ2UgfHwgdG9rZW4udHlwZSA9PT0gdHlwZXMubGFiZWxMaW5rKSAmJlxuICAgICAgICAhdG9rZW4uX2JhbGFuY2VkXG4gICAgICApIHtcbiAgICAgICAgb3BlbiA9IGluZGV4XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHR5cGVzLmxhYmVsTGluaykge1xuICAgICAgICAgIG9mZnNldCA9IDJcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0eXBlcy5sYWJlbEVuZCkge1xuICAgICAgY2xvc2UgPSBpbmRleFxuICAgIH1cbiAgfVxuXG4gIGFzc2VydChvcGVuICE9PSB1bmRlZmluZWQsICdgb3BlbmAgaXMgc3VwcG9zZWQgdG8gYmUgZm91bmQnKVxuICBhc3NlcnQoY2xvc2UgIT09IHVuZGVmaW5lZCwgJ2BjbG9zZWAgaXMgc3VwcG9zZWQgdG8gYmUgZm91bmQnKVxuXG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIHR5cGU6IGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSB0eXBlcy5sYWJlbExpbmsgPyB0eXBlcy5saW5rIDogdHlwZXMuaW1hZ2UsXG4gICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuXVsxXS5zdGFydCksXG4gICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZClcbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0ge1xuICAgIHR5cGU6IHR5cGVzLmxhYmVsLFxuICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uc3RhcnQpLFxuICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2Nsb3NlXVsxXS5lbmQpXG4gIH1cblxuICBjb25zdCB0ZXh0ID0ge1xuICAgIHR5cGU6IHR5cGVzLmxhYmVsVGV4dCxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW4gKyBvZmZzZXQgKyAyXVsxXS5lbmQpLFxuICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2Nsb3NlIC0gMl1bMV0uc3RhcnQpXG4gIH1cblxuICBtZWRpYSA9IFtcbiAgICBbJ2VudGVyJywgZ3JvdXAsIGNvbnRleHRdLFxuICAgIFsnZW50ZXInLCBsYWJlbCwgY29udGV4dF1cbiAgXVxuXG4gIC8vIE9wZW5pbmcgbWFya2VyLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgb3BlbiArIG9mZnNldCArIDMpKVxuXG4gIC8vIFRleHQgb3Blbi5cbiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWydlbnRlcicsIHRleHQsIGNvbnRleHRdXSlcblxuICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICBhc3NlcnQoXG4gICAgY29udGV4dC5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsXG4gICAgJ2V4cGVjdGVkIGBpbnNpZGVTcGFuLm51bGxgIHRvIGJlIHBvcHVsYXRlZCdcbiAgKVxuICAvLyBCZXR3ZWVuLlxuICBtZWRpYSA9IHB1c2goXG4gICAgbWVkaWEsXG4gICAgcmVzb2x2ZUFsbChcbiAgICAgIGNvbnRleHQucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLFxuICAgICAgZXZlbnRzLnNsaWNlKG9wZW4gKyBvZmZzZXQgKyA0LCBjbG9zZSAtIDMpLFxuICAgICAgY29udGV4dFxuICAgIClcbiAgKVxuXG4gIC8vIFRleHQgY2xvc2UsIG1hcmtlciBjbG9zZSwgbGFiZWwgY2xvc2UuXG4gIG1lZGlhID0gcHVzaChtZWRpYSwgW1xuICAgIFsnZXhpdCcsIHRleHQsIGNvbnRleHRdLFxuICAgIGV2ZW50c1tjbG9zZSAtIDJdLFxuICAgIGV2ZW50c1tjbG9zZSAtIDFdLFxuICAgIFsnZXhpdCcsIGxhYmVsLCBjb250ZXh0XVxuICBdKVxuXG4gIC8vIFJlZmVyZW5jZSwgcmVzb3VyY2UsIG9yIHNvLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShjbG9zZSArIDEpKVxuXG4gIC8vIE1lZGlhIGNsb3NlLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbJ2V4aXQnLCBncm91cCwgY29udGV4dF1dKVxuXG4gIHNwbGljZShldmVudHMsIG9wZW4sIGV2ZW50cy5sZW5ndGgsIG1lZGlhKVxuXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMYWJlbEVuZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBpbmRleCA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBsZXQgbGFiZWxTdGFydFxuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gIGxldCBkZWZpbmVkXG5cbiAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChcbiAgICAgIChzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMubGFiZWxJbWFnZSB8fFxuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMubGFiZWxMaW5rKSAmJlxuICAgICAgIXNlbGYuZXZlbnRzW2luZGV4XVsxXS5fYmFsYW5jZWRcbiAgICApIHtcbiAgICAgIGxhYmVsU3RhcnQgPSBzZWxmLmV2ZW50c1tpbmRleF1bMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGxhYmVsIGVuZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtiXSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMucmlnaHRTcXVhcmVCcmFja2V0LCAnZXhwZWN0ZWQgYF1gJylcblxuICAgIC8vIElmIHRoZXJlIGlzIG5vdCBhbiBva2F5IG9wZW5pbmcuXG4gICAgaWYgKCFsYWJlbFN0YXJ0KSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgbGFiZWwgKGxpbmspIHN0YXJ0IGlzIG1hcmtlZCBhcyBpbmFjdGl2ZSxcbiAgICAvLyBpdCBtZWFucyB3ZeKAmWQgYmUgd3JhcHBpbmcgYSBsaW5rLCBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyBgYGBtYXJrZG93blxuICAgIC8vID4gfCBhIFtiIFtjXShkKSBlXShmKSBnLlxuICAgIC8vICAgICAgICAgICAgICAgICAgXlxuICAgIC8vIGBgYFxuICAgIC8vXG4gICAgLy8gV2UgY2Fu4oCZdCBoYXZlIHRoYXQsIHNvIGl04oCZcyBqdXN0IGJhbGFuY2VkIGJyYWNrZXRzLlxuICAgIGlmIChsYWJlbFN0YXJ0Ll9pbmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGxhYmVsRW5kTm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZGVmaW5lZCA9IHNlbGYucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMoXG4gICAgICBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgICBzZWxmLnNsaWNlU2VyaWFsaXplKHtzdGFydDogbGFiZWxTdGFydC5lbmQsIGVuZDogc2VsZi5ub3coKX0pXG4gICAgICApXG4gICAgKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGFiZWxFbmQpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5sYWJlbE1hcmtlcilcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMubGFiZWxNYXJrZXIpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmxhYmVsRW5kKVxuICAgIHJldHVybiBhZnRlclxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBdYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtiXSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIC8vIE5vdGU6IGBtYXJrZG93bi1yc2AgYWxzbyBwYXJzZXMgR0ZNIGZvb3Rub3RlcyBoZXJlLCB3aGljaCBmb3IgdXMgaXMgaW5cbiAgICAvLyBhbiBleHRlbnNpb24uXG5cbiAgICAvLyBSZXNvdXJjZSAoYFthc2RdKGZnaClgKT9cbiAgICBpZiAoY29kZSA9PT0gY29kZXMubGVmdFBhcmVudGhlc2lzKSB7XG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgICByZXNvdXJjZUNvbnN0cnVjdCxcbiAgICAgICAgbGFiZWxFbmRPayxcbiAgICAgICAgZGVmaW5lZCA/IGxhYmVsRW5kT2sgOiBsYWJlbEVuZE5va1xuICAgICAgKShjb2RlKVxuICAgIH1cblxuICAgIC8vIEZ1bGwgKGBbYXNkXVtmZ2hdYCkgb3IgY29sbGFwc2VkIChgW2FzZF1bXWApIHJlZmVyZW5jZT9cbiAgICBpZiAoY29kZSA9PT0gY29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICAgIHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QsXG4gICAgICAgIGxhYmVsRW5kT2ssXG4gICAgICAgIGRlZmluZWQgPyByZWZlcmVuY2VOb3RGdWxsIDogbGFiZWxFbmROb2tcbiAgICAgICkoY29kZSlcbiAgICB9XG5cbiAgICAvLyBTaG9ydGN1dCAoYFthc2RdYCkgcmVmZXJlbmNlP1xuICAgIHJldHVybiBkZWZpbmVkID8gbGFiZWxFbmRPayhjb2RlKSA6IGxhYmVsRW5kTm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYF1gLCBhdCBgW2AsIGJ1dCBub3QgYXQgYSBmdWxsIHJlZmVyZW5jZS5cbiAgICpcbiAgICogPiDwn5GJICoqTm90ZSoqOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBsYWJlbCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdW10gYlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZU5vdEZ1bGwoY29kZSkge1xuICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QsXG4gICAgICBsYWJlbEVuZE9rLFxuICAgICAgbGFiZWxFbmROb2tcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogRG9uZSwgd2UgZm91bmQgc29tZXRoaW5nLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGNcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXVtiXSBjXG4gICAqICAgICAgICAgICBeXG4gICAqID4gfCBbYV1bXSBiXG4gICAqICAgICAgICAgIF5cbiAgICogPiB8IFthXSBiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEVuZE9rKGNvZGUpIHtcbiAgICAvLyBOb3RlOiBgbWFya2Rvd24tcnNgIGRvZXMgYSBidW5jaCBvZiBzdHVmZiBoZXJlLlxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIERvbmUsIGl04oCZcyBub3RoaW5nLlxuICAgKlxuICAgKiBUaGVyZSB3YXMgYW4gb2theSBvcGVuaW5nLCBidXQgd2UgZGlkbuKAmXQgbWF0Y2ggYW55dGhpbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBbYV1bYiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBbYV0gYlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFbmROb2soY29kZSkge1xuICAgIGxhYmVsU3RhcnQuX2JhbGFuY2VkID0gdHJ1ZVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVJlc291cmNlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgcmV0dXJuIHJlc291cmNlU3RhcnRcblxuICAvKipcbiAgICogQXQgYSByZXNvdXJjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZVN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMubGVmdFBhcmVudGhlc2lzLCAnZXhwZWN0ZWQgbGVmdCBwYXJlbicpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5yZXNvdXJjZSlcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLnJlc291cmNlTWFya2VyKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5yZXNvdXJjZU1hcmtlcilcbiAgICByZXR1cm4gcmVzb3VyY2VCZWZvcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgYChgLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZUJlZm9yZShjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VPcGVuKShjb2RlKVxuICAgICAgOiByZXNvdXJjZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYClgIG9yIGEgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLnJpZ2h0UGFyZW50aGVzaXMpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZUVuZChjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oXG4gICAgICBlZmZlY3RzLFxuICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyLFxuICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcsXG4gICAgICB0eXBlcy5yZXNvdXJjZURlc3RpbmF0aW9uLFxuICAgICAgdHlwZXMucmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWwsXG4gICAgICB0eXBlcy5yZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlcixcbiAgICAgIHR5cGVzLnJlc291cmNlRGVzdGluYXRpb25SYXcsXG4gICAgICB0eXBlcy5yZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nLFxuICAgICAgY29uc3RhbnRzLmxpbmtSZXNvdXJjZURlc3RpbmF0aW9uQmFsYW5jZU1heFxuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgZGVzdGluYXRpb24sIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZURlc3RpbmF0aW9uQWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlQmV0d2VlbikoY29kZSlcbiAgICAgIDogcmVzb3VyY2VFbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBpbnZhbGlkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKDw8KSBiXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcoY29kZSkge1xuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgZGVzdGluYXRpb24gYW5kIHdoaXRlc3BhY2UsIGF0IGAoYCBvciB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiICkgY1xuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VCZXR3ZWVuKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5xdW90YXRpb25NYXJrIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5hcG9zdHJvcGhlIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5sZWZ0UGFyZW50aGVzaXNcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5VGl0bGUoXG4gICAgICAgIGVmZmVjdHMsXG4gICAgICAgIHJlc291cmNlVGl0bGVBZnRlcixcbiAgICAgICAgbm9rLFxuICAgICAgICB0eXBlcy5yZXNvdXJjZVRpdGxlLFxuICAgICAgICB0eXBlcy5yZXNvdXJjZVRpdGxlTWFya2VyLFxuICAgICAgICB0eXBlcy5yZXNvdXJjZVRpdGxlU3RyaW5nXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGFmdGVyIHRpdGxlLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIgXCJjXCIpIGRcbiAgICogICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlVGl0bGVBZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VFbmQpKGNvZGUpXG4gICAgICA6IHJlc291cmNlRW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGF0IGApYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBkXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlRW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRQYXJlbnRoZXNpcykge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5yZXNvdXJjZU1hcmtlcilcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLnJlc291cmNlTWFya2VyKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLnJlc291cmNlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplUmVmZXJlbmNlRnVsbChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIHJlZmVyZW5jZUZ1bGxcblxuICAvKipcbiAgICogSW4gYSByZWZlcmVuY2UgKGZ1bGwpLCBhdCB0aGUgYFtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdW2JdIGRcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGwoY29kZSkge1xuICAgIGFzc2VydChjb2RlID09PSBjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldCwgJ2V4cGVjdGVkIGxlZnQgYnJhY2tldCcpXG4gICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKFxuICAgICAgc2VsZixcbiAgICAgIGVmZmVjdHMsXG4gICAgICByZWZlcmVuY2VGdWxsQWZ0ZXIsXG4gICAgICByZWZlcmVuY2VGdWxsTWlzc2luZyxcbiAgICAgIHR5cGVzLnJlZmVyZW5jZSxcbiAgICAgIHR5cGVzLnJlZmVyZW5jZU1hcmtlcixcbiAgICAgIHR5cGVzLnJlZmVyZW5jZVN0cmluZ1xuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIHJlZmVyZW5jZSAoZnVsbCksIGFmdGVyIGBdYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtiXSBkXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxBZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIHNlbGYucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMoXG4gICAgICBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgICBzZWxmLnNsaWNlU2VyaWFsaXplKHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSlcbiAgICAgIClcbiAgICApXG4gICAgICA/IG9rKGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHJlZmVyZW5jZSAoZnVsbCkgdGhhdCB3YXMgbWlzc2luZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtiIGRcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxNaXNzaW5nKGNvZGUpIHtcbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVSZWZlcmVuY2VDb2xsYXBzZWQoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkU3RhcnRcblxuICAvKipcbiAgICogSW4gcmVmZXJlbmNlIChjb2xsYXBzZWQpLCBhdCBgW2AuXG4gICAqXG4gICAqID4g8J+RiSAqKk5vdGUqKjogd2Ugb25seSBnZXQgaGVyZSBpZiB0aGUgbGFiZWwgaXMgZGVmaW5lZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtdIGRcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZFN0YXJ0KGNvZGUpIHtcbiAgICAvLyBXZSBvbmx5IGF0dGVtcHQgYSBjb2xsYXBzZWQgbGFiZWwgaWYgdGhlcmXigJlzIGEgYFtgLlxuICAgIGFzc2VydChjb2RlID09PSBjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldCwgJ2V4cGVjdGVkIGxlZnQgYnJhY2tldCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5yZWZlcmVuY2UpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5yZWZlcmVuY2VNYXJrZXIpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLnJlZmVyZW5jZU1hcmtlcilcbiAgICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkT3BlblxuICB9XG5cbiAgLyoqXG4gICAqIEluIHJlZmVyZW5jZSAoY29sbGFwc2VkKSwgYXQgYF1gLlxuICAgKlxuICAgKiA+IPCfkYkgKipOb3RlKio6IHdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGxhYmVsIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bXSBkXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMucmVmZXJlbmNlTWFya2VyKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMucmVmZXJlbmNlTWFya2VyKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLnJlZmVyZW5jZSlcbiAgICAgIHJldHVybiBva1xuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/label-start-image.js": /*!************************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/label-start-image.js ***! \************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"labelStartImage\": () => (/* binding */ labelStartImage)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/* harmony import */ var _label_end_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./label-end.js */ \"../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: _label_end_js__WEBPACK_IMPORTED_MODULE_1__.labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n\n return start\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.exclamationMark, 'expected `!`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelImage)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelImageMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelImageMarker)\n return open\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelImage)\n return after\n }\n\n return nok(code)\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.caret &&\n '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9sYWJlbC1zdGFydC1pbWFnZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBQ0E7QUFDYjtBQUNBOztBQUV2QyxXQUFXLFdBQVc7QUFDZjtBQUNQO0FBQ0E7QUFDQSxjQUFjLDhEQUFtQjtBQUNqQzs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLElBQUksK0NBQU0sVUFBVSxpRkFBcUI7QUFDekMsa0JBQWtCLDRFQUFnQjtBQUNsQyxrQkFBa0Isa0ZBQXNCO0FBQ3hDO0FBQ0EsaUJBQWlCLGtGQUFzQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlCQUFpQixtRkFBdUI7QUFDeEMsb0JBQW9CLDZFQUFpQjtBQUNyQztBQUNBLG1CQUFtQiw2RUFBaUI7QUFDcEMsbUJBQW1CLDRFQUFnQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUVBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzP2Q3NTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuaW1wb3J0IHtsYWJlbEVuZH0gZnJvbSAnLi9sYWJlbC1lbmQuanMnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGxhYmVsU3RhcnRJbWFnZSA9IHtcbiAgbmFtZTogJ2xhYmVsU3RhcnRJbWFnZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZSxcbiAgcmVzb2x2ZUFsbDogbGFiZWxFbmQucmVzb2x2ZUFsbFxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGxhYmVsIChpbWFnZSkgc3RhcnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhICFbYl0gY1xuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KGNvZGUgPT09IGNvZGVzLmV4Y2xhbWF0aW9uTWFyaywgJ2V4cGVjdGVkIGAhYCcpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5sYWJlbEltYWdlKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGFiZWxJbWFnZU1hcmtlcilcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMubGFiZWxJbWFnZU1hcmtlcilcbiAgICByZXR1cm4gb3BlblxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGAhYCwgYXQgYFtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSAhW2JdIGNcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldCkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5sYWJlbE1hcmtlcilcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmxhYmVsTWFya2VyKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmxhYmVsSW1hZ2UpXG4gICAgICByZXR1cm4gYWZ0ZXJcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYCFbYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgIVtiXSBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBpcyBuZWVkZWQgaW4gYmVjYXVzZSwgd2hlbiBHRk0gZm9vdG5vdGVzIGFyZSBlbmFibGVkLCBpbWFnZXMgbmV2ZXJcbiAgICogZm9ybSB3aGVuIHN0YXJ0ZWQgd2l0aCBhIGBeYC5cbiAgICogSW5zdGVhZCwgbGlua3MgZm9ybTpcbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogIVteYV0oYilcbiAgICpcbiAgICogIVteYV1bYl1cbiAgICpcbiAgICogW2JdOiBjXG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxwPiE8YSBocmVmPVxcXCJiXFxcIj5eYTwvYT48L3A+XG4gICAqIDxwPiE8YSBocmVmPVxcXCJjXFxcIj5eYTwvYT48L3A+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gVG8gZG86IHVzZSBhIG5ldyBmaWVsZCB0byBkbyB0aGlzLCB0aGlzIGlzIHN0aWxsIG5lZWRlZCBmb3JcbiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVgLCBidXQgdGhlIGBsYWJlbC1zdGFydC1saW5rYFxuICAgIC8vIGJlaGF2aW9yIGlzbuKAmXQuXG4gICAgLy8gSGlkZGVuIGZvb3Rub3RlcyBob29rLlxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICByZXR1cm4gY29kZSA9PT0gY29kZXMuY2FyZXQgJiZcbiAgICAgICdfaGlkZGVuRm9vdG5vdGVTdXBwb3J0JyBpbiBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzXG4gICAgICA/IG5vayhjb2RlKVxuICAgICAgOiBvayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/label-start-image.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/label-start-link.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/label-start-link.js ***! \***********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"labelStartLink\": () => (/* binding */ labelStartLink)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/* harmony import */ var _label_end_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./label-end.js */ \"../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: _label_end_js__WEBPACK_IMPORTED_MODULE_1__.labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n\n return start\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket, 'expected `[`')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelLink)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.labelLink)\n return after\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.caret &&\n '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9sYWJlbC1zdGFydC1saW5rLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDQTtBQUNiO0FBQ0E7O0FBRXZDLFdBQVcsV0FBVztBQUNmO0FBQ1A7QUFDQTtBQUNBLGNBQWMsOERBQW1CO0FBQ2pDOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLG1GQUF1QjtBQUMzQyxrQkFBa0IsMkVBQWU7QUFDakMsa0JBQWtCLDZFQUFpQjtBQUNuQztBQUNBLGlCQUFpQiw2RUFBaUI7QUFDbEMsaUJBQWlCLDJFQUFlO0FBQ2hDO0FBQ0E7O0FBRUEsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUVBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanM/N2Q4YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5pbXBvcnQge2xhYmVsRW5kfSBmcm9tICcuL2xhYmVsLWVuZC5qcydcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGFiZWxTdGFydExpbmsgPSB7XG4gIG5hbWU6ICdsYWJlbFN0YXJ0TGluaycsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rLFxuICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydExpbmsoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBsYWJlbCAobGluaykgc3RhcnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIFtiXSBjXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBhc3NlcnQoY29kZSA9PT0gY29kZXMubGVmdFNxdWFyZUJyYWNrZXQsICdleHBlY3RlZCBgW2AnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGFiZWxMaW5rKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGFiZWxNYXJrZXIpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmxhYmVsTWFya2VyKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5sYWJlbExpbmspXG4gICAgcmV0dXJuIGFmdGVyXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgLy8gVG8gZG86IHRoaXMgaXNu4oCZdCBuZWVkZWQgaW4gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCxcbiAgICAvLyByZW1vdmUuXG4gICAgLy8gSGlkZGVuIGZvb3Rub3RlcyBob29rLlxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICByZXR1cm4gY29kZSA9PT0gY29kZXMuY2FyZXQgJiZcbiAgICAgICdfaGlkZGVuRm9vdG5vdGVTdXBwb3J0JyBpbiBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzXG4gICAgICA/IG5vayhjb2RlKVxuICAgICAgOiBvayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/label-start-link.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/line-ending.js": /*!******************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/line-ending.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"lineEnding\": () => (/* binding */ lineEnding)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n/** @type {Construct} */\nconst lineEnding = {name: 'lineEnding', tokenize: tokenizeLineEnding}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start\n\n /** @type {State} */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code), 'expected eol')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, ok, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9saW5lLWVuZGluZy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBQ087QUFDUDtBQUNiOztBQUV2QyxXQUFXLFdBQVc7QUFDZixvQkFBb0I7O0FBRTNCO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsSUFBSSwrQ0FBTSxDQUFDLDRFQUFrQjtBQUM3QixrQkFBa0IsNEVBQWdCO0FBQ2xDO0FBQ0EsaUJBQWlCLDRFQUFnQjtBQUNqQyxXQUFXLHFFQUFZLGNBQWMsNEVBQWdCO0FBQ3JEO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9saW5lLWVuZGluZy5qcz9hYTA4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGxpbmVFbmRpbmcgPSB7bmFtZTogJ2xpbmVFbmRpbmcnLCB0b2tlbml6ZTogdG9rZW5pemVMaW5lRW5kaW5nfVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxpbmVFbmRpbmcoZWZmZWN0cywgb2spIHtcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGFzc2VydChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksICdleHBlY3RlZCBlb2wnKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIG9rLCB0eXBlcy5saW5lUHJlZml4KVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/line-ending.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/list.js": /*!***********************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/list.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"list\": () => (/* binding */ list)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/* harmony import */ var _blank_line_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blank-line.js */ \"../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js\");\n/* harmony import */ var _thematic_break_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./thematic-break.js */ \"../../../node_modules/micromark-core-commonmark/dev/lib/thematic-break.js\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {tokenize: tokenizeListContinuation},\n exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {tokenize: tokenizeIndent, partial: true}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n let initialSize =\n tail && tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let size = 0\n\n return start\n\n /** @type {State} */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n const kind =\n self.containerState.type ||\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.plusSign || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash\n ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listUnordered\n : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listOrdered)\n\n if (\n kind === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listUnordered\n ? !self.containerState.marker || code === self.containerState.marker\n : (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiDigit)(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {_container: true})\n }\n\n if (kind === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listUnordered) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefix)\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash\n ? effects.check(_thematic_break_js__WEBPACK_IMPORTED_MODULE_4__.thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n\n if (!self.interrupt || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.digit1) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefix)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemValue)\n return inside(code)\n }\n }\n\n return nok(code)\n }\n\n /** @type {State} */\n function inside(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiDigit)(code) && ++size < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.listItemValueSizeMax) {\n effects.consume(code)\n return inside\n }\n\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.rightParenthesis || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dot)\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemValue)\n return atMarker(code)\n }\n\n return nok(code)\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof, 'eof (`null`) is not a marker')\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemMarker)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemMarker)\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n _blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n\n /** @type {State} */\n function onBlank(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefixWhitespace)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefixWhitespace)\n return endOfPrefix\n }\n\n return nok(code)\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n self.containerState.size =\n initialSize +\n self.sliceSerialize(effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefix), true).length\n return ok(code)\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n self.containerState._closeFlow = undefined\n\n return effects.check(_blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine, onBlank, notBlank)\n\n /** @type {State} */\n function onBlank(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof self.containerState.size === 'number', 'expected size')\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)(\n effects,\n ok,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemIndent,\n self.containerState.size + 1\n )(code)\n }\n\n /** @type {State} */\n function notBlank(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n if (self.containerState.furtherBlankLines || !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) {\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined\n // Always populated by defaults.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)(\n effects,\n effects.attempt(list, ok, nok),\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix,\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize\n )(code)\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof self.containerState.size === 'number', 'expected size')\n\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)(\n effects,\n afterPrefix,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemIndent,\n self.containerState.size + 1\n )\n\n /** @type {State} */\n function afterPrefix(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(self.containerState, 'expected state')\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemIndent &&\n tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(this.containerState, 'expected state')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof this.containerState.type === 'string', 'expected type')\n effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n\n // Always populated by defaults.\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)(\n effects,\n afterPrefix,\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefixWhitespace,\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize + 1\n )\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n\n return !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code) &&\n tail &&\n tail[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefixWhitespace\n ? ok(code)\n : nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9saXN0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSwrQ0FBK0M7QUFDNUQsYUFBYSx1Q0FBdUM7QUFDcEQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBQ2M7QUFDZDtBQUNRO0FBQ1I7QUFDYjtBQUNFO0FBQ1E7O0FBRWpELFdBQVcsV0FBVztBQUNmO0FBQ1A7QUFDQTtBQUNBLGlCQUFpQixtQ0FBbUM7QUFDcEQ7QUFDQTs7QUFFQSxXQUFXLFdBQVc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxXQUFXO0FBQ3RCLHlCQUF5Qjs7QUFFekI7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qiw0RUFBZ0I7QUFDN0M7QUFDQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksK0NBQU07QUFDVjtBQUNBO0FBQ0EsZ0JBQWdCLDBFQUFjLGFBQWEsMEVBQWMsYUFBYSxzRUFBVTtBQUNoRixVQUFVLCtFQUFtQjtBQUM3QixVQUFVLDZFQUFpQjs7QUFFM0I7QUFDQSxlQUFlLCtFQUFtQjtBQUNsQztBQUNBLFVBQVUsb0VBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGlCQUFpQjtBQUM5Qzs7QUFFQSxtQkFBbUIsK0VBQW1CO0FBQ3RDLHNCQUFzQixnRkFBb0I7QUFDMUMsd0JBQXdCLDBFQUFjLGFBQWEsc0VBQVU7QUFDN0QsMEJBQTBCLDZEQUFhO0FBQ3ZDO0FBQ0E7O0FBRUEsc0NBQXNDLHdFQUFZO0FBQ2xELHNCQUFzQixnRkFBb0I7QUFDMUMsc0JBQXNCLCtFQUFtQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxJQUFJLDhDQUFNO0FBQ1YsUUFBUSxvRUFBVSxtQkFBbUIsOEZBQThCO0FBQ25FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrRkFBc0IsYUFBYSxxRUFBUztBQUMvRDtBQUNBLG1CQUFtQiwrRUFBbUI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLDhDQUFNO0FBQ1YsSUFBSSwrQ0FBTSxVQUFVLHFFQUFTO0FBQzdCLGtCQUFrQixnRkFBb0I7QUFDdEM7QUFDQSxpQkFBaUIsZ0ZBQW9CO0FBQ3JDO0FBQ0E7QUFDQSxNQUFNLHFEQUFTO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksOENBQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxRQUFRLHVFQUFhO0FBQ3JCLG9CQUFvQiwwRkFBOEI7QUFDbEQ7QUFDQSxtQkFBbUIsMEZBQThCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxJQUFJLDhDQUFNO0FBQ1Y7QUFDQTtBQUNBLHVDQUF1QyxnRkFBb0I7QUFDM0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEsRUFBRSwrQ0FBTTtBQUNSOztBQUVBLHVCQUF1QixxREFBUzs7QUFFaEMsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsSUFBSSwrQ0FBTTtBQUNWLElBQUksK0NBQU07QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcscUVBQVk7QUFDdkI7QUFDQTtBQUNBLE1BQU0sZ0ZBQW9CO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxJQUFJLDhDQUFNO0FBQ1Ysa0RBQWtELHVFQUFhO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksOENBQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSwrQ0FBTTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUVBQVk7QUFDdkI7QUFDQTtBQUNBLE1BQU0sNEVBQWdCO0FBQ3RCO0FBQ0E7QUFDQSxVQUFVLGlGQUFpQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLCtDQUFNO0FBQ1IsRUFBRSwrQ0FBTTs7QUFFUixTQUFTLHFFQUFZO0FBQ3JCO0FBQ0E7QUFDQSxJQUFJLGdGQUFvQjtBQUN4QjtBQUNBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksK0NBQU07QUFDVjtBQUNBO0FBQ0EsdUJBQXVCLGdGQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0EsRUFBRSw4Q0FBTTtBQUNSLEVBQUUsK0NBQU07QUFDUjtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLCtDQUFNO0FBQ1I7QUFDQTtBQUNBOztBQUVBLFNBQVMscUVBQVk7QUFDckI7QUFDQTtBQUNBLElBQUksMEZBQThCO0FBQ2xDO0FBQ0E7QUFDQSxRQUFRLGlGQUFpQjtBQUN6Qjs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQSxZQUFZLHVFQUFhO0FBQ3pCO0FBQ0EsdUJBQXVCLDBGQUE4QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL2xpc3QuanM/ZjMzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db250YWluZXJTdGF0ZX0gQ29udGFpbmVyU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXhpdGVyfSBFeGl0ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHthc2NpaURpZ2l0LCBtYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuaW1wb3J0IHtibGFua0xpbmV9IGZyb20gJy4vYmxhbmstbGluZS5qcydcbmltcG9ydCB7dGhlbWF0aWNCcmVha30gZnJvbSAnLi90aGVtYXRpYy1icmVhay5qcydcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGlzdCA9IHtcbiAgbmFtZTogJ2xpc3QnLFxuICB0b2tlbml6ZTogdG9rZW5pemVMaXN0U3RhcnQsXG4gIGNvbnRpbnVhdGlvbjoge3Rva2VuaXplOiB0b2tlbml6ZUxpc3RDb250aW51YXRpb259LFxuICBleGl0OiB0b2tlbml6ZUxpc3RFbmRcbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZUxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSxcbiAgcGFydGlhbDogdHJ1ZVxufVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGluZGVudENvbnN0cnVjdCA9IHt0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQsIHBhcnRpYWw6IHRydWV9XG5cbi8vIFRvIGRvOiBgbWFya2Rvd24tcnNgIHBhcnNlcyBsaXN0IGl0ZW1zIG9uIHRoZWlyIG93biBhbmQgbGF0ZXIgc3RpdGNoZXMgdGhlbVxuLy8gdG9nZXRoZXIuXG5cbi8qKlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGlzdFN0YXJ0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gIGxldCBpbml0aWFsU2l6ZSA9XG4gICAgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09IHR5cGVzLmxpbmVQcmVmaXhcbiAgICAgID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGhcbiAgICAgIDogMFxuICBsZXQgc2l6ZSA9IDBcblxuICByZXR1cm4gc3RhcnRcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KHNlbGYuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gICAgY29uc3Qga2luZCA9XG4gICAgICBzZWxmLmNvbnRhaW5lclN0YXRlLnR5cGUgfHxcbiAgICAgIChjb2RlID09PSBjb2Rlcy5hc3RlcmlzayB8fCBjb2RlID09PSBjb2Rlcy5wbHVzU2lnbiB8fCBjb2RlID09PSBjb2Rlcy5kYXNoXG4gICAgICAgID8gdHlwZXMubGlzdFVub3JkZXJlZFxuICAgICAgICA6IHR5cGVzLmxpc3RPcmRlcmVkKVxuXG4gICAgaWYgKFxuICAgICAga2luZCA9PT0gdHlwZXMubGlzdFVub3JkZXJlZFxuICAgICAgICA/ICFzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlID09PSBzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlclxuICAgICAgICA6IGFzY2lpRGlnaXQoY29kZSlcbiAgICApIHtcbiAgICAgIGlmICghc2VsZi5jb250YWluZXJTdGF0ZS50eXBlKSB7XG4gICAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUudHlwZSA9IGtpbmRcbiAgICAgICAgZWZmZWN0cy5lbnRlcihraW5kLCB7X2NvbnRhaW5lcjogdHJ1ZX0pXG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSB0eXBlcy5saXN0VW5vcmRlcmVkKSB7XG4gICAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGlzdEl0ZW1QcmVmaXgpXG4gICAgICAgIHJldHVybiBjb2RlID09PSBjb2Rlcy5hc3RlcmlzayB8fCBjb2RlID09PSBjb2Rlcy5kYXNoXG4gICAgICAgICAgPyBlZmZlY3RzLmNoZWNrKHRoZW1hdGljQnJlYWssIG5vaywgYXRNYXJrZXIpKGNvZGUpXG4gICAgICAgICAgOiBhdE1hcmtlcihjb2RlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbGYuaW50ZXJydXB0IHx8IGNvZGUgPT09IGNvZGVzLmRpZ2l0MSkge1xuICAgICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpc3RJdGVtUHJlZml4KVxuICAgICAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpc3RJdGVtVmFsdWUpXG4gICAgICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGFzc2VydChzZWxmLmNvbnRhaW5lclN0YXRlLCAnZXhwZWN0ZWQgc3RhdGUnKVxuICAgIGlmIChhc2NpaURpZ2l0KGNvZGUpICYmICsrc2l6ZSA8IGNvbnN0YW50cy5saXN0SXRlbVZhbHVlU2l6ZU1heCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gaW5zaWRlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKCFzZWxmLmludGVycnVwdCB8fCBzaXplIDwgMikgJiZcbiAgICAgIChzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlclxuICAgICAgICA/IGNvZGUgPT09IHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyXG4gICAgICAgIDogY29kZSA9PT0gY29kZXMucmlnaHRQYXJlbnRoZXNpcyB8fCBjb2RlID09PSBjb2Rlcy5kb3QpXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMubGlzdEl0ZW1WYWx1ZSlcbiAgICAgIHJldHVybiBhdE1hcmtlcihjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqKi9cbiAgZnVuY3Rpb24gYXRNYXJrZXIoY29kZSkge1xuICAgIGFzc2VydChzZWxmLmNvbnRhaW5lclN0YXRlLCAnZXhwZWN0ZWQgc3RhdGUnKVxuICAgIGFzc2VydChjb2RlICE9PSBjb2Rlcy5lb2YsICdlb2YgKGBudWxsYCkgaXMgbm90IGEgbWFya2VyJylcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpc3RJdGVtTWFya2VyKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saXN0SXRlbU1hcmtlcilcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciA9IHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyIHx8IGNvZGVcbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhcbiAgICAgIGJsYW5rTGluZSxcbiAgICAgIC8vIENhbuKAmXQgYmUgZW1wdHkgd2hlbiBpbnRlcnJ1cHRpbmcuXG4gICAgICBzZWxmLmludGVycnVwdCA/IG5vayA6IG9uQmxhbmssXG4gICAgICBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICAgIGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCxcbiAgICAgICAgZW5kT2ZQcmVmaXgsXG4gICAgICAgIG90aGVyUHJlZml4XG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gb25CbGFuayhjb2RlKSB7XG4gICAgYXNzZXJ0KHNlbGYuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZVxuICAgIGluaXRpYWxTaXplKytcbiAgICByZXR1cm4gZW5kT2ZQcmVmaXgoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG90aGVyUHJlZml4KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saXN0SXRlbVByZWZpeFdoaXRlc3BhY2UpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saXN0SXRlbVByZWZpeFdoaXRlc3BhY2UpXG4gICAgICByZXR1cm4gZW5kT2ZQcmVmaXhcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBlbmRPZlByZWZpeChjb2RlKSB7XG4gICAgYXNzZXJ0KHNlbGYuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5zaXplID1cbiAgICAgIGluaXRpYWxTaXplICtcbiAgICAgIHNlbGYuc2xpY2VTZXJpYWxpemUoZWZmZWN0cy5leGl0KHR5cGVzLmxpc3RJdGVtUHJlZml4KSwgdHJ1ZSkubGVuZ3RoXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMaXN0Q29udGludWF0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBhc3NlcnQoc2VsZi5jb250YWluZXJTdGF0ZSwgJ2V4cGVjdGVkIHN0YXRlJylcbiAgc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvbkJsYW5rLCBub3RCbGFuaylcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBvbkJsYW5rKGNvZGUpIHtcbiAgICBhc3NlcnQoc2VsZi5jb250YWluZXJTdGF0ZSwgJ2V4cGVjdGVkIHN0YXRlJylcbiAgICBhc3NlcnQodHlwZW9mIHNlbGYuY29udGFpbmVyU3RhdGUuc2l6ZSA9PT0gJ251bWJlcicsICdleHBlY3RlZCBzaXplJylcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID1cbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHxcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZVxuXG4gICAgLy8gV2UgaGF2ZSBhIGJsYW5rIGxpbmUuXG4gICAgLy8gU3RpbGwsIHRyeSB0byBjb25zdW1lIGF0IG1vc3QgdGhlIGl0ZW1zIHNpemUuXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShcbiAgICAgIGVmZmVjdHMsXG4gICAgICBvayxcbiAgICAgIHR5cGVzLmxpc3RJdGVtSW5kZW50LFxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5zaXplICsgMVxuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG5vdEJsYW5rKGNvZGUpIHtcbiAgICBhc3NlcnQoc2VsZi5jb250YWluZXJTdGF0ZSwgJ2V4cGVjdGVkIHN0YXRlJylcbiAgICBpZiAoc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyB8fCAhbWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHVuZGVmaW5lZFxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdW5kZWZpbmVkXG4gICAgICByZXR1cm4gbm90SW5DdXJyZW50SXRlbShjb2RlKVxuICAgIH1cblxuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSB1bmRlZmluZWRcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUgPSB1bmRlZmluZWRcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGluZGVudENvbnN0cnVjdCwgb2ssIG5vdEluQ3VycmVudEl0ZW0pKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBub3RJbkN1cnJlbnRJdGVtKGNvZGUpIHtcbiAgICBhc3NlcnQoc2VsZi5jb250YWluZXJTdGF0ZSwgJ2V4cGVjdGVkIHN0YXRlJylcbiAgICAvLyBXaGlsZSB3ZSBkbyBjb250aW51ZSwgd2Ugc2lnbmFsIHRoYXQgdGhlIGZsb3cgc2hvdWxkIGJlIGNsb3NlZC5cbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB0cnVlXG4gICAgLy8gQXMgd2XigJlyZSBjbG9zaW5nIGZsb3csIHdl4oCZcmUgbm8gbG9uZ2VyIGludGVycnVwdGluZy5cbiAgICBzZWxmLmludGVycnVwdCA9IHVuZGVmaW5lZFxuICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG4gICAgYXNzZXJ0KFxuICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwsXG4gICAgICAnZXhwZWN0ZWQgYGRpc2FibGUubnVsbGAgdG8gYmUgcG9wdWxhdGVkJ1xuICAgIClcbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgICAgZWZmZWN0cyxcbiAgICAgIGVmZmVjdHMuYXR0ZW1wdChsaXN0LCBvaywgbm9rKSxcbiAgICAgIHR5cGVzLmxpbmVQcmVmaXgsXG4gICAgICBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJylcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBjb25zdGFudHMudGFiU2l6ZVxuICAgICkoY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUluZGVudChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgYXNzZXJ0KHNlbGYuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gIGFzc2VydCh0eXBlb2Ygc2VsZi5jb250YWluZXJTdGF0ZS5zaXplID09PSAnbnVtYmVyJywgJ2V4cGVjdGVkIHNpemUnKVxuXG4gIHJldHVybiBmYWN0b3J5U3BhY2UoXG4gICAgZWZmZWN0cyxcbiAgICBhZnRlclByZWZpeCxcbiAgICB0eXBlcy5saXN0SXRlbUluZGVudCxcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLnNpemUgKyAxXG4gIClcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgYXNzZXJ0KHNlbGYuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgcmV0dXJuIHRhaWwgJiZcbiAgICAgIHRhaWxbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1JbmRlbnQgJiZcbiAgICAgIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSBzZWxmLmNvbnRhaW5lclN0YXRlLnNpemVcbiAgICAgID8gb2soY29kZSlcbiAgICAgIDogbm9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZSB7RXhpdGVyfVxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMaXN0RW5kKGVmZmVjdHMpIHtcbiAgYXNzZXJ0KHRoaXMuY29udGFpbmVyU3RhdGUsICdleHBlY3RlZCBzdGF0ZScpXG4gIGFzc2VydCh0eXBlb2YgdGhpcy5jb250YWluZXJTdGF0ZS50eXBlID09PSAnc3RyaW5nJywgJ2V4cGVjdGVkIHR5cGUnKVxuICBlZmZlY3RzLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKVxufVxuXG4vKipcbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cbiAgYXNzZXJ0KFxuICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLFxuICAgICdleHBlY3RlZCBgZGlzYWJsZS5udWxsYCB0byBiZSBwb3B1bGF0ZWQnXG4gIClcblxuICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgIGVmZmVjdHMsXG4gICAgYWZ0ZXJQcmVmaXgsXG4gICAgdHlwZXMubGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlLFxuICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogY29uc3RhbnRzLnRhYlNpemUgKyAxXG4gIClcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG5cbiAgICByZXR1cm4gIW1hcmtkb3duU3BhY2UoY29kZSkgJiZcbiAgICAgIHRhaWwgJiZcbiAgICAgIHRhaWxbMV0udHlwZSA9PT0gdHlwZXMubGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlXG4gICAgICA/IG9rKGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/list.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/setext-underline.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/setext-underline.js ***! \***********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setextUnderline\": () => (/* binding */ setextUnderline)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length\n /** @type {number | undefined} */\n let content\n /** @type {number | undefined} */\n let text\n /** @type {number | undefined} */\n let definition\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.content) {\n content = index\n break\n }\n\n if (events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.paragraph) {\n text = index\n }\n }\n // Exit\n else {\n if (events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.content) {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1)\n }\n\n if (!definition && events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.definition) {\n definition = index\n }\n }\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(text !== undefined, 'expected a `text` index to be found')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(content !== undefined, 'expected a `text` index to be found')\n\n const heading = {\n type: micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeading,\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n\n // Change the paragraph to setext heading text.\n events[text][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeadingText\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = Object.assign({}, events[definition][1].end)\n } else {\n events[content][1] = heading\n }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context])\n\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n /** @type {NonNullable} */\n let marker\n\n return start\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length\n /** @type {boolean | undefined} */\n let paragraph\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo,\n 'expected `=` or `-`'\n )\n\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding &&\n self.events[index][1].type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix &&\n self.events[index][1].type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.content\n ) {\n paragraph = self.events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.paragraph\n break\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeadingLine)\n marker = code\n return before(code)\n }\n\n return nok(code)\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeadingLineSequence)\n return inside(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeadingLineSequence)\n\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)(effects, after, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineSuffix)(code)\n : after(code)\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.setextHeadingLine)\n return ok(code)\n }\n\n return nok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSwwQ0FBMEM7QUFDdkQsYUFBYSx5Q0FBeUM7QUFDdEQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRW9EO0FBQ3NCO0FBQ3RCO0FBQ0E7QUFDYjs7QUFFdkMsV0FBVyxXQUFXO0FBQ2Y7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxvQkFBb0I7QUFDakM7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQztBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHlFQUFhO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsMkVBQWU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx5RUFBYTtBQUNqRDtBQUNBO0FBQ0E7O0FBRUEsbURBQW1ELDRFQUFnQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLDhDQUFNO0FBQ1IsRUFBRSwrQ0FBTTs7QUFFUjtBQUNBLFVBQVUsK0VBQW1CO0FBQzdCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQSx5QkFBeUIsbUZBQXVCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsYUFBYSxtQkFBbUI7QUFDaEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCO0FBQ3BDOztBQUVBLElBQUksK0NBQU07QUFDVixlQUFlLHNFQUFVLGFBQWEsMEVBQWM7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDRFQUFnQjtBQUN2RCx1Q0FBdUMsNEVBQWdCO0FBQ3ZELHVDQUF1Qyx5RUFBYTtBQUNwRDtBQUNBLG1EQUFtRCwyRUFBZTtBQUNsRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1GQUF1QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGtCQUFrQiwyRkFBK0I7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiwyRkFBK0I7O0FBRWhELFdBQVcsdUVBQWE7QUFDeEIsUUFBUSxxRUFBWSxpQkFBaUIsNEVBQWdCO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIscUVBQVMsSUFBSSw0RUFBa0I7QUFDaEQsbUJBQW1CLG1GQUF1QjtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL3NldGV4dC11bmRlcmxpbmUuanM/YTlmNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBzZXRleHRVbmRlcmxpbmUgPSB7XG4gIG5hbWU6ICdzZXRleHRVbmRlcmxpbmUnLFxuICB0b2tlbml6ZTogdG9rZW5pemVTZXRleHRVbmRlcmxpbmUsXG4gIHJlc29sdmVUbzogcmVzb2x2ZVRvU2V0ZXh0VW5kZXJsaW5lXG59XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUoZXZlbnRzLCBjb250ZXh0KSB7XG4gIC8vIFRvIGRvOiByZXNvbHZlIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aFxuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNvbnRlbnRcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCB0ZXh0XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZGVmaW5pdGlvblxuXG4gIC8vIEZpbmQgdGhlIG9wZW5pbmcgb2YgdGhlIGNvbnRlbnQuXG4gIC8vIEl04oCZbGwgYWx3YXlzIGV4aXN0OiB3ZSBkb27igJl0IHRva2VuaXplIGlmIGl0IGlzbuKAmXQgdGhlcmUuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicpIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLmNvbnRlbnQpIHtcbiAgICAgICAgY29udGVudCA9IGluZGV4XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLnBhcmFncmFwaCkge1xuICAgICAgICB0ZXh0ID0gaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXhpdFxuICAgIGVsc2Uge1xuICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMuY29udGVudCkge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGNvbnRlbnQgZW5kIChpZiBuZWVkZWQgd2XigJlsbCBhZGQgaXQgbGF0ZXIpXG4gICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICB9XG5cbiAgICAgIGlmICghZGVmaW5pdGlvbiAmJiBldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLmRlZmluaXRpb24pIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IGluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXNzZXJ0KHRleHQgIT09IHVuZGVmaW5lZCwgJ2V4cGVjdGVkIGEgYHRleHRgIGluZGV4IHRvIGJlIGZvdW5kJylcbiAgYXNzZXJ0KGNvbnRlbnQgIT09IHVuZGVmaW5lZCwgJ2V4cGVjdGVkIGEgYHRleHRgIGluZGV4IHRvIGJlIGZvdW5kJylcblxuICBjb25zdCBoZWFkaW5nID0ge1xuICAgIHR5cGU6IHR5cGVzLnNldGV4dEhlYWRpbmcsXG4gICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1t0ZXh0XVsxXS5zdGFydCksXG4gICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZClcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgcGFyYWdyYXBoIHRvIHNldGV4dCBoZWFkaW5nIHRleHQuXG4gIGV2ZW50c1t0ZXh0XVsxXS50eXBlID0gdHlwZXMuc2V0ZXh0SGVhZGluZ1RleHRcblxuICAvLyBJZiB3ZSBoYXZlIGRlZmluaXRpb25zIGluIHRoZSBjb250ZW50LCB3ZeKAmWxsIGtlZXAgb24gaGF2aW5nIGNvbnRlbnQsXG4gIC8vIGJ1dCB3ZSBuZWVkIG1vdmUgaXQuXG4gIGlmIChkZWZpbml0aW9uKSB7XG4gICAgZXZlbnRzLnNwbGljZSh0ZXh0LCAwLCBbJ2VudGVyJywgaGVhZGluZywgY29udGV4dF0pXG4gICAgZXZlbnRzLnNwbGljZShkZWZpbml0aW9uICsgMSwgMCwgWydleGl0JywgZXZlbnRzW2NvbnRlbnRdWzFdLCBjb250ZXh0XSlcbiAgICBldmVudHNbY29udGVudF1bMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2RlZmluaXRpb25dWzFdLmVuZClcbiAgfSBlbHNlIHtcbiAgICBldmVudHNbY29udGVudF1bMV0gPSBoZWFkaW5nXG4gIH1cblxuICAvLyBBZGQgdGhlIGhlYWRpbmcgZXhpdCBhdCB0aGUgZW5kLlxuICBldmVudHMucHVzaChbJ2V4aXQnLCBoZWFkaW5nLCBjb250ZXh0XSlcblxuICByZXR1cm4gZXZlbnRzXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplU2V0ZXh0VW5kZXJsaW5lKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCBvZiBoZWFkaW5nIChzZXRleHQpIHVuZGVybGluZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGxldCBpbmRleCA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcGFyYWdyYXBoXG5cbiAgICBhc3NlcnQoXG4gICAgICBjb2RlID09PSBjb2Rlcy5kYXNoIHx8IGNvZGUgPT09IGNvZGVzLmVxdWFsc1RvLFxuICAgICAgJ2V4cGVjdGVkIGA9YCBvciBgLWAnXG4gICAgKVxuXG4gICAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAvLyBTa2lwIGVudGVyL2V4aXQgb2YgbGluZSBlbmRpbmcsIGxpbmUgcHJlZml4LCBhbmQgY29udGVudC5cbiAgICAgIC8vIFdlIGNhbiBub3cgZWl0aGVyIGhhdmUgYSBkZWZpbml0aW9uIG9yIGEgcGFyYWdyYXBoLlxuICAgICAgaWYgKFxuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSAhPT0gdHlwZXMubGluZUVuZGluZyAmJlxuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSAhPT0gdHlwZXMubGluZVByZWZpeCAmJlxuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSAhPT0gdHlwZXMuY29udGVudFxuICAgICAgKSB7XG4gICAgICAgIHBhcmFncmFwaCA9IHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSB0eXBlcy5wYXJhZ3JhcGhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUbyBkbzogaGFuZGxlIGxhenkvcGllcmNlIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICAvLyBUbyBkbzogcGFyc2UgaW5kZW50IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICBpZiAoIXNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSAmJiAoc2VsZi5pbnRlcnJ1cHQgfHwgcGFyYWdyYXBoKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5zZXRleHRIZWFkaW5nTGluZSlcbiAgICAgIG1hcmtlciA9IGNvZGVcbiAgICAgIHJldHVybiBiZWZvcmUoY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYC1gIG9yIGA9YC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlKGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLnNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UpXG4gICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYWFcbiAgICogPiB8ID09XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGluc2lkZVxuICAgIH1cblxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5zZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlKVxuXG4gICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCB0eXBlcy5saW5lU3VmZml4KShjb2RlKVxuICAgICAgOiBhZnRlcihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHNlcXVlbmNlLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYWFcbiAgICogPiB8ID09XG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLnNldGV4dEhlYWRpbmdMaW5lKVxuICAgICAgcmV0dXJuIG9rKGNvZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/setext-underline.js\n"); /***/ }), /***/ "../../../node_modules/micromark-core-commonmark/dev/lib/thematic-break.js": /*!*********************************************************************************!*\ !*** ../../../node_modules/micromark-core-commonmark/dev/lib/thematic-break.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"thematicBreak\": () => (/* binding */ thematicBreak)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n\n\n\n\n\n\n\n/** @type {Construct} */\nconst thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable} */\n let marker\n\n return start\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.thematicBreak)\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.dash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.underscore,\n 'expected `*`, `-`, or `_`'\n )\n marker = code\n return atBreak(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.thematicBreakSequence)\n return sequence(code)\n }\n\n if (\n size >= micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.thematicBreakMarkerCountMin &&\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code))\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.thematicBreak)\n return ok(code)\n }\n\n return nok(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.thematicBreakSequence)\n return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)\n ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, atBreak, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.whitespace)(code)\n : atBreak(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvZGV2L2xpYi90aGVtYXRpYy1icmVhay5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDBDQUEwQztBQUN2RDs7QUFFb0Q7QUFDc0I7QUFDdEI7QUFDUTtBQUNSO0FBQ2I7O0FBRXZDLFdBQVcsV0FBVztBQUNmO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxrQkFBa0IsK0VBQW1CO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxJQUFJLDhDQUFNO0FBQ1YsZUFBZSwwRUFBYztBQUM3QixpQkFBaUIsc0VBQVU7QUFDM0IsaUJBQWlCLDRFQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVGQUEyQjtBQUMvQztBQUNBOztBQUVBO0FBQ0EsY0FBYyxxR0FBcUM7QUFDbkQsZ0JBQWdCLHFFQUFTLElBQUksNEVBQWtCO0FBQy9DO0FBQ0EsbUJBQW1CLCtFQUFtQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsdUZBQTJCO0FBQzVDLFdBQVcsdUVBQWE7QUFDeEIsUUFBUSxxRUFBWSxtQkFBbUIsNEVBQWdCO0FBQ3ZEO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9kZXYvbGliL3RoZW1hdGljLWJyZWFrLmpzPzcyZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IHRoZW1hdGljQnJlYWsgPSB7XG4gIG5hbWU6ICd0aGVtYXRpY0JyZWFrJyxcbiAgdG9rZW5pemU6IHRva2VuaXplVGhlbWF0aWNCcmVha1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVRoZW1hdGljQnJlYWsoZWZmZWN0cywgb2ssIG5vaykge1xuICBsZXQgc2l6ZSA9IDBcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiB0aGVtYXRpYyBicmVhay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMudGhlbWF0aWNCcmVhaylcbiAgICAvLyBUbyBkbzogcGFyc2UgaW5kZW50IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICByZXR1cm4gYmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgbWFya2VyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKioqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIGFzc2VydChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmFzdGVyaXNrIHx8XG4gICAgICAgIGNvZGUgPT09IGNvZGVzLmRhc2ggfHxcbiAgICAgICAgY29kZSA9PT0gY29kZXMudW5kZXJzY29yZSxcbiAgICAgICdleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gJ1xuICAgIClcbiAgICBtYXJrZXIgPSBjb2RlXG4gICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy50aGVtYXRpY0JyZWFrU2VxdWVuY2UpXG4gICAgICByZXR1cm4gc2VxdWVuY2UoY29kZSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzaXplID49IGNvbnN0YW50cy50aGVtYXRpY0JyZWFrTWFya2VyQ291bnRNaW4gJiZcbiAgICAgIChjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKVxuICAgICkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLnRoZW1hdGljQnJlYWspXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqKipcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcXVlbmNlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHNpemUrK1xuICAgICAgcmV0dXJuIHNlcXVlbmNlXG4gICAgfVxuXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLnRoZW1hdGljQnJlYWtTZXF1ZW5jZSlcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgdHlwZXMud2hpdGVzcGFjZSkoY29kZSlcbiAgICAgIDogYXRCcmVhayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-core-commonmark/dev/lib/thematic-break.js\n"); /***/ }), /***/ "../../../node_modules/micromark-factory-destination/dev/index.js": /*!************************************************************************!*\ !*** ../../../node_modules/micromark-factory-destination/dev/index.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"factoryDestination\": () => (/* binding */ factoryDestination)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\n\n\n\n\n\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * \n * b>\n * \n * \n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (``).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\nfunction factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n\n return start\n\n /**\n * Start of destination.\n *\n * ```markdown\n * > | \n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return enclosedBefore\n }\n\n // ASCII control, space, closing paren.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiControl)(code)\n ) {\n return nok(code)\n }\n\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString})\n return raw(code)\n }\n\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedBefore(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString})\n return enclosed(code)\n }\n\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function enclosed(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n effects.exit(stringType)\n return enclosedBefore(code)\n }\n\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)\n ) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? enclosedEscape : enclosed\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedEscape(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash\n ) {\n effects.consume(code)\n return enclosed\n }\n\n return enclosed(code)\n }\n\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function raw(code) {\n if (\n !balance &&\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code))\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n if (balance < limit && code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis) {\n effects.consume(code)\n balance++\n return raw\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis) {\n effects.consume(code)\n balance--\n return raw\n }\n\n // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiControl)(code)\n ) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? rawEscape : raw\n }\n\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n function rawEscape(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash\n ) {\n effects.consume(code)\n return raw\n }\n\n return raw(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBTWlDO0FBQ21CO0FBQ1E7QUFDUjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaUJBQWlCLDBFQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLHFFQUFTO0FBQ3hCLGVBQWUsdUVBQVc7QUFDMUIsZUFBZSxrRkFBc0I7QUFDckMsTUFBTSxzRUFBWTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDZFQUFpQixHQUFHLGFBQWEsMkZBQTJCLENBQUM7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDZFQUFpQixHQUFHLGFBQWEsMkZBQTJCLENBQUM7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxpQkFBaUIsNkVBQWlCO0FBQ2xDLG1CQUFtQiw2RUFBaUI7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxxRUFBUztBQUN4QixlQUFlLDBFQUFjO0FBQzdCLE1BQU0sNEVBQWtCO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQiwyRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEVBQWM7QUFDN0IsZUFBZSw2RUFBaUI7QUFDaEMsZUFBZSwyRUFBZTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUVBQVM7QUFDekIsaUJBQWlCLGtGQUFzQjtBQUN2QyxRQUFRLG1GQUF5QjtBQUNqQztBQUNBLG1CQUFtQiw2RUFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsaUZBQXFCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrRkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFFQUFTO0FBQ3hCLGVBQWUsdUVBQVc7QUFDMUIsZUFBZSxpRkFBcUI7QUFDcEMsTUFBTSxzRUFBWTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsMkVBQWU7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlGQUFxQjtBQUNwQyxlQUFlLGtGQUFzQjtBQUNyQyxlQUFlLDJFQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vZGV2L2luZGV4LmpzPzFhOWIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVmZmVjdHN9IEVmZmVjdHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNjaWlDb250cm9sLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93bkxpbmVFbmRpbmdcbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5cbi8qKlxuICogUGFyc2UgZGVzdGluYXRpb25zLlxuICpcbiAqICMjIyMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYG1hcmtkb3duXG4gKiA8YT5cbiAqIDxhXFw+Yj5cbiAqIDxhIGI+XG4gKiA8YSk+XG4gKiBhXG4gKiBhXFwpYlxuICogYShiKWNcbiAqIGEoYilcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RWZmZWN0c30gZWZmZWN0c1xuICogICBDb250ZXh0LlxuICogQHBhcmFtIHtTdGF0ZX0gb2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiBzdWNjZXNzZnVsLlxuICogQHBhcmFtIHtTdGF0ZX0gbm9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gdW5zdWNjZXNzZnVsLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IHR5cGVcbiAqICAgVHlwZSBmb3Igd2hvbGUgKGA8YT5gIG9yIGBiYCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gbGl0ZXJhbFR5cGVcbiAqICAgVHlwZSB3aGVuIGVuY2xvc2VkIChgPGE+YCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gbGl0ZXJhbE1hcmtlclR5cGVcbiAqICAgVHlwZSBmb3IgZW5jbG9zaW5nIChgPGAgYW5kIGA+YCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gcmF3VHlwZVxuICogICBUeXBlIHdoZW4gbm90IGVuY2xvc2VkIChgYmApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IHN0cmluZ1R5cGVcbiAqICAgVHlwZSBmb3IgdGhlIHZhbHVlIChgYWAgb3IgYGJgKS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbbWF4PUluZmluaXR5XVxuICogICBEZXB0aCBvZiBuZXN0ZWQgcGFyZW5zIChpbmNsdXNpdmUpLlxuICogQHJldHVybnMge1N0YXRlfVxuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbmV4cG9ydCBmdW5jdGlvbiBmYWN0b3J5RGVzdGluYXRpb24oXG4gIGVmZmVjdHMsXG4gIG9rLFxuICBub2ssXG4gIHR5cGUsXG4gIGxpdGVyYWxUeXBlLFxuICBsaXRlcmFsTWFya2VyVHlwZSxcbiAgcmF3VHlwZSxcbiAgc3RyaW5nVHlwZSxcbiAgbWF4XG4pIHtcbiAgY29uc3QgbGltaXQgPSBtYXggfHwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG4gIGxldCBiYWxhbmNlID0gMFxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBkZXN0aW5hdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhYT5cbiAgICogICAgIF5cbiAgICogPiB8IGFhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmxlc3NUaGFuKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGUpXG4gICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxUeXBlKVxuICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsTWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxNYXJrZXJUeXBlKVxuICAgICAgcmV0dXJuIGVuY2xvc2VkQmVmb3JlXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgY29udHJvbCwgc3BhY2UsIGNsb3NpbmcgcGFyZW4uXG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMuZW9mIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5zcGFjZSB8fFxuICAgICAgY29kZSA9PT0gY29kZXMucmlnaHRQYXJlbnRoZXNpcyB8fFxuICAgICAgYXNjaWlDb250cm9sKGNvZGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlKVxuICAgIGVmZmVjdHMuZW50ZXIocmF3VHlwZSlcbiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaHVua1N0cmluZywge2NvbnRlbnRUeXBlOiBjb25zdGFudHMuY29udGVudFR5cGVTdHJpbmd9KVxuICAgIHJldHVybiByYXcoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IGFuIGVuY2xvc2VkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGFhPlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuY2xvc2VkQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsTWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY2h1bmtTdHJpbmcsIHtjb250ZW50VHlwZTogY29uc3RhbnRzLmNvbnRlbnRUeXBlU3RyaW5nfSlcbiAgICByZXR1cm4gZW5jbG9zZWQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBlbmNsb3NlZCBkZXN0aW5hdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhYT5cbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBlbmNsb3NlZChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2h1bmtTdHJpbmcpXG4gICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSlcbiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVzc1RoYW4gfHxcbiAgICAgIG1hcmtkb3duTGluZUVuZGluZyhjb2RlKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjb2RlID09PSBjb2Rlcy5iYWNrc2xhc2ggPyBlbmNsb3NlZEVzY2FwZSA6IGVuY2xvc2VkXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgYSBzcGVjaWFsIGNoYXJhY3Rlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhXFwqYT5cbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuY2xvc2VkRXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5sZXNzVGhhbiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuZ3JlYXRlclRoYW4gfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmJhY2tzbGFzaFxuICAgICkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gZW5jbG9zZWRcbiAgICB9XG5cbiAgICByZXR1cm4gZW5jbG9zZWQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYXcgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmF3KGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICAhYmFsYW5jZSAmJlxuICAgICAgKGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgICBjb2RlID09PSBjb2Rlcy5yaWdodFBhcmVudGhlc2lzIHx8XG4gICAgICAgIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2h1bmtTdHJpbmcpXG4gICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdChyYXdUeXBlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGUpXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG5cbiAgICBpZiAoYmFsYW5jZSA8IGxpbWl0ICYmIGNvZGUgPT09IGNvZGVzLmxlZnRQYXJlbnRoZXNpcykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBiYWxhbmNlKytcbiAgICAgIHJldHVybiByYXdcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRQYXJlbnRoZXNpcykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBiYWxhbmNlLS1cbiAgICAgIHJldHVybiByYXdcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBjb250cm9sIChidXQgKm5vdCogYFxcMGApIGFuZCBzcGFjZSBhbmQgYChgLlxuICAgIC8vIE5vdGU6IGluIGBtYXJrZG93bi1yc2AsIGBcXDBgIGV4aXN0cyBpbiBjb2RlcywgaW4gYG1pY3JvbWFyay1qc2AgaXRcbiAgICAvLyBkb2VzbuKAmXQuXG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMuZW9mIHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5zcGFjZSB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVmdFBhcmVudGhlc2lzIHx8XG4gICAgICBhc2NpaUNvbnRyb2woY29kZSlcbiAgICApIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29kZSA9PT0gY29kZXMuYmFja3NsYXNoID8gcmF3RXNjYXBlIDogcmF3XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgc3BlY2lhbCBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFwqYVxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByYXdFc2NhcGUoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmxlZnRQYXJlbnRoZXNpcyB8fFxuICAgICAgY29kZSA9PT0gY29kZXMucmlnaHRQYXJlbnRoZXNpcyB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuYmFja3NsYXNoXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiByYXdcbiAgICB9XG5cbiAgICByZXR1cm4gcmF3KGNvZGUpXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-factory-destination/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-factory-label/dev/index.js": /*!******************************************************************!*\ !*** ../../../node_modules/micromark-factory-label/dev/index.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"factoryLabel\": () => (/* binding */ factoryLabel)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\n\n\n\n\n\n\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\nfunction factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n let seen\n\n return start\n\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket, 'expected `[`')\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (\n size > micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.linkReferenceSizeMax ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket ||\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket && !seen) ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.caret &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs)\n ) {\n return nok(code)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n // To do: indent? Link chunks and EOLs together?\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n return atBreak\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.contentTypeString})\n return labelInside(code)\n }\n\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code) ||\n size++ > micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.linkReferenceSizeMax\n ) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.chunkString)\n return atBreak(code)\n }\n\n effects.consume(code)\n if (!seen) seen = !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.backslash ? labelEscape : labelInside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.backslash ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket\n ) {\n effects.consume(code)\n size++\n return labelInside\n }\n\n return labelInside(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUUwRTtBQUN0QjtBQUNRO0FBQ1I7QUFDYjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsSUFBSSwrQ0FBTSxVQUFVLG1GQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGFBQWEsOEZBQThCO0FBQzNDLGVBQWUscUVBQVM7QUFDeEIsZUFBZSxtRkFBdUI7QUFDdEMsZ0JBQWdCLG9GQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVFQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLG9GQUF3QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsNEVBQWtCO0FBQzFCLG9CQUFvQiw0RUFBZ0I7QUFDcEM7QUFDQSxtQkFBbUIsNEVBQWdCO0FBQ25DO0FBQ0E7O0FBRUEsa0JBQWtCLDZFQUFpQixHQUFHLGFBQWEsMkZBQTJCLENBQUM7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUVBQVM7QUFDeEIsZUFBZSxtRkFBdUI7QUFDdEMsZUFBZSxvRkFBd0I7QUFDdkMsTUFBTSw0RUFBa0I7QUFDeEIsZUFBZSw4RkFBOEI7QUFDN0M7QUFDQSxtQkFBbUIsNkVBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsdUVBQWE7QUFDcEMsb0JBQW9CLDJFQUFlO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRkFBdUI7QUFDdEMsZUFBZSwyRUFBZTtBQUM5QixlQUFlLG9GQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktbGFiZWwvZGV2L2luZGV4LmpzP2ZhMjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVmZmVjdHN9IEVmZmVjdHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKi9cblxuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuaW1wb3J0IHt0eXBlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3R5cGVzLmpzJ1xuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ3V2dS9hc3NlcnQnXG5cbi8qKlxuICogUGFyc2UgbGFiZWxzLlxuICpcbiAqID4g8J+RiSAqKk5vdGUqKjogbGFiZWxzIGluIG1hcmtkb3duIGFyZSBjYXBwZWQgYXQgOTk5IGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy5cbiAqXG4gKiAjIyMjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGBtYXJrZG93blxuICogW2FdXG4gKiBbYVxuICogYl1cbiAqIFthXFxdYl1cbiAqIGBgYFxuICpcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiAgIFRva2VuaXplIGNvbnRleHQuXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7U3RhdGV9IG5va1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHVuc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgb2YgdGhlIHdob2xlIGxhYmVsIChgW2FdYCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gbWFya2VyVHlwZVxuICogICBUeXBlIGZvciB0aGUgbWFya2VycyAoYFtgIGFuZCBgXWApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IHN0cmluZ1R5cGVcbiAqICAgVHlwZSBmb3IgdGhlIGlkZW50aWZpZXIgKGBhYCkuXG4gKiBAcmV0dXJucyB7U3RhdGV9XG4gKiAgIFN0YXJ0IHN0YXRlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlMYWJlbChlZmZlY3RzLCBvaywgbm9rLCB0eXBlLCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBzaXplID0gMFxuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gIGxldCBzZWVuXG5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGxhYmVsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgYXNzZXJ0KGNvZGUgPT09IGNvZGVzLmxlZnRTcXVhcmVCcmFja2V0LCAnZXhwZWN0ZWQgYFtgJylcbiAgICBlZmZlY3RzLmVudGVyKHR5cGUpXG4gICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKVxuICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSlcbiAgICByZXR1cm4gYXRCcmVha1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCBhdCBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgIGlmIChcbiAgICAgIHNpemUgPiBjb25zdGFudHMubGlua1JlZmVyZW5jZVNpemVNYXggfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVmdFNxdWFyZUJyYWNrZXQgfHxcbiAgICAgIChjb2RlID09PSBjb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQgJiYgIXNlZW4pIHx8XG4gICAgICAvLyBUbyBkbzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgb25jZSB3ZeKAmXZlIHN3aXRjaGVkIGZyb21cbiAgICAgIC8vIGBtaWNyb21hcmstZXh0ZW5zaW9uLWZvb3Rub3RlYCB0byBgbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVgLFxuICAgICAgLy8gd2hpY2ggZG9lc27igJl0IG5lZWQgdGhpcy5cbiAgICAgIC8vIEhpZGRlbiBmb290bm90ZXMgaG9vay5cbiAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICAgIChjb2RlID09PSBjb2Rlcy5jYXJldCAmJlxuICAgICAgICAhc2l6ZSAmJlxuICAgICAgICAnX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCcgaW4gc2VsZi5wYXJzZXIuY29uc3RydWN0cylcbiAgICApIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMucmlnaHRTcXVhcmVCcmFja2V0KSB7XG4gICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSlcbiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZSlcbiAgICAgIHJldHVybiBva1xuICAgIH1cblxuICAgIC8vIFRvIGRvOiBpbmRlbnQ/IExpbmsgY2h1bmtzIGFuZCBFT0xzIHRvZ2V0aGVyP1xuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgICByZXR1cm4gYXRCcmVha1xuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY2h1bmtTdHJpbmcsIHtjb250ZW50VHlwZTogY29uc3RhbnRzLmNvbnRlbnRUeXBlU3RyaW5nfSlcbiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBsYWJlbCwgaW4gdGV4dC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxhYmVsSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLmxlZnRTcXVhcmVCcmFja2V0IHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQgfHxcbiAgICAgIG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSB8fFxuICAgICAgc2l6ZSsrID4gY29uc3RhbnRzLmxpbmtSZWZlcmVuY2VTaXplTWF4XG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMuY2h1bmtTdHJpbmcpXG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICAgIH1cblxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGlmICghc2Vlbikgc2VlbiA9ICFtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgcmV0dXJuIGNvZGUgPT09IGNvZGVzLmJhY2tzbGFzaCA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBhIHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FcXCphXVxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFc2NhcGUoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmxlZnRTcXVhcmVCcmFja2V0IHx8XG4gICAgICBjb2RlID09PSBjb2Rlcy5iYWNrc2xhc2ggfHxcbiAgICAgIGNvZGUgPT09IGNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldFxuICAgICkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplKytcbiAgICAgIHJldHVybiBsYWJlbEluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-factory-label/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-factory-space/dev/index.js": /*!******************************************************************!*\ !*** ../../../node_modules/micromark-factory-space/dev/index.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"factorySpace\": () => (/* binding */ factorySpace)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\n\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns\n * Start state.\n */\nfunction factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n let size = 0\n\n return start\n\n /** @type {State} */\n function start(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code)) {\n effects.enter(type)\n return prefix(code)\n }\n\n return ok(code)\n }\n\n /** @type {State} */\n function prefix(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n\n effects.exit(type)\n return ok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRXNEOztBQUV0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxRQUFRLHVFQUFhO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLFFBQVEsdUVBQWE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1zcGFjZS9kZXYvaW5kZXguanM/N2YxMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5UeXBlfSBUb2tlblR5cGVcbiAqL1xuXG5pbXBvcnQge21hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcblxuLy8gVG8gZG86IGltcGxlbWVudCBgc3BhY2VPclRhYmAsIGBzcGFjZU9yVGFiTWluTWF4YCwgYHNwYWNlT3JUYWJXaXRoT3B0aW9uc2AuXG5cbi8qKlxuICogUGFyc2Ugc3BhY2VzIGFuZCB0YWJzLlxuICpcbiAqIFRoZXJlIGlzIG5vIGBub2tgIHBhcmFtZXRlcjpcbiAqXG4gKiAqICAgc3BhY2VzIGluIG1hcmtkb3duIGFyZSBvZnRlbiBvcHRpb25hbCwgaW4gd2hpY2ggY2FzZSB0aGlzIGZhY3RvcnkgY2FuIGJlXG4gKiAgICAgdXNlZCBhbmQgYG9rYCB3aWxsIGJlIHN3aXRjaGVkIHRvIHdoZXRoZXIgc3BhY2VzIHdlcmUgZm91bmQgb3Igbm90XG4gKiAqICAgb25lIGxpbmUgZW5kaW5nIG9yIHNwYWNlIGNhbiBiZSBkZXRlY3RlZCB3aXRoIGBtYXJrZG93blNwYWNlKGNvZGUpYCByaWdodFxuICogICAgIGJlZm9yZSB1c2luZyBgZmFjdG9yeVNwYWNlYFxuICpcbiAqICMjIyMjIyBFeGFtcGxlc1xuICpcbiAqIFdoZXJlIGDikIlgIHJlcHJlc2VudHMgYSB0YWIgKHBsdXMgaG93IG11Y2ggaXQgZXhwYW5kcykgYW5kIGDikKBgIHJlcHJlc2VudHMgYVxuICogc2luZ2xlIHNwYWNlLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiDikIlcbiAqIOKQoOKQoOKQoOKQoFxuICog4pCJ4pCgXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgKGAnIFxcdCdgKS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbbWF4PUluZmluaXR5XVxuICogICBNYXggKGV4Y2x1c2l2ZSkuXG4gKiBAcmV0dXJuc1xuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvaywgdHlwZSwgbWF4KSB7XG4gIGNvbnN0IGxpbWl0ID0gbWF4ID8gbWF4IC0gMSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICBsZXQgc2l6ZSA9IDBcblxuICByZXR1cm4gc3RhcnRcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZSlcbiAgICAgIHJldHVybiBwcmVmaXgoY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHByZWZpeChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkgJiYgc2l6ZSsrIDwgbGltaXQpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHByZWZpeFxuICAgIH1cblxuICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-factory-space/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-factory-title/dev/index.js": /*!******************************************************************!*\ !*** ../../../node_modules/micromark-factory-title/dev/index.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"factoryTitle\": () => (/* binding */ factoryTitle)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\n\n\n\n\n\n\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\nfunction factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable} */\n let marker\n\n return start\n\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.quotationMark ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.apostrophe ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis\n ) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis ? micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis : code\n return begin\n }\n\n return nok(code)\n }\n\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n return atBreak(code)\n }\n\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return begin(marker)\n }\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof) {\n return nok(code)\n }\n\n // Note: blank lines can’t exist in content.\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding)\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, atBreak, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix)\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.contentTypeString})\n return inside(code)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.chunkString)\n return atBreak(code)\n }\n\n effects.consume(code)\n return code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? escape : inside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n function escape(code) {\n if (code === marker || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash) {\n effects.consume(code)\n return inside\n }\n\n return inside(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUVvRDtBQUNPO0FBQ1A7QUFDUTtBQUNSOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDTztBQUNQLGFBQWEsbUJBQW1CO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZUFBZSwrRUFBbUI7QUFDbEMsZUFBZSw0RUFBZ0I7QUFDL0IsZUFBZSxpRkFBcUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpRkFBcUIsR0FBRyxrRkFBc0I7QUFDdEU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHFFQUFTO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDRFQUFrQjtBQUMxQjtBQUNBLG9CQUFvQiw0RUFBZ0I7QUFDcEM7QUFDQSxtQkFBbUIsNEVBQWdCO0FBQ25DLGFBQWEscUVBQVksbUJBQW1CLDRFQUFnQjtBQUM1RDs7QUFFQSxrQkFBa0IsNkVBQWlCLEdBQUcsYUFBYSwyRkFBMkIsQ0FBQztBQUMvRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0NBQW9DLHFFQUFTLElBQUksNEVBQWtCO0FBQ25FLG1CQUFtQiw2RUFBaUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQiwyRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxvQ0FBb0MsMkVBQWU7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktdGl0bGUvZGV2L2luZGV4LmpzPzBkNzUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5UeXBlfSBUb2tlblR5cGVcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5cbi8qKlxuICogUGFyc2UgdGl0bGVzLlxuICpcbiAqICMjIyMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYG1hcmtkb3duXG4gKiBcImFcIlxuICogJ2InXG4gKiAoYylcbiAqIFwiYVxuICogYlwiXG4gKiAnYVxuICogICAgIGInXG4gKiAoYVxcKWIpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7U3RhdGV9IG5va1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHVuc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgb2YgdGhlIHdob2xlIHRpdGxlIChgXCJhXCJgLCBgJ2InYCwgYChjKWApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IG1hcmtlclR5cGVcbiAqICAgVHlwZSBmb3IgdGhlIG1hcmtlcnMgKGBcImAsIGAnYCwgYChgLCBhbmQgYClgKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBzdHJpbmdUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSB2YWx1ZSAoYGFgKS5cbiAqIEByZXR1cm5zIHtTdGF0ZX1cbiAqICAgU3RhcnQgc3RhdGUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5leHBvcnQgZnVuY3Rpb24gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIG9rLCBub2ssIHR5cGUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHtcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVwiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZXMucXVvdGF0aW9uTWFyayB8fFxuICAgICAgY29kZSA9PT0gY29kZXMuYXBvc3Ryb3BoZSB8fFxuICAgICAgY29kZSA9PT0gY29kZXMubGVmdFBhcmVudGhlc2lzXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGUpXG4gICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKVxuICAgICAgbWFya2VyID0gY29kZSA9PT0gY29kZXMubGVmdFBhcmVudGhlc2lzID8gY29kZXMucmlnaHRQYXJlbnRoZXNpcyA6IGNvZGVcbiAgICAgIHJldHVybiBiZWdpblxuICAgIH1cblxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcGVuaW5nIG1hcmtlci5cbiAgICpcbiAgICogVGhpcyBpcyBhbHNvIHVzZWQgYXQgdGhlIGNsb3NpbmcgbWFya2VyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgXCJhXCJcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWdpbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKVxuICAgIHJldHVybiBhdEJyZWFrKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgc29tZXRoaW5nLCBiZWZvcmUgc29tZXRoaW5nIGVsc2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBcImFcIlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKVxuICAgICAgcmV0dXJuIGJlZ2luKG1hcmtlcilcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gTm90ZTogYmxhbmsgbGluZXMgY2Fu4oCZdCBleGlzdCBpbiBjb250ZW50LlxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIC8vIFRvIGRvOiB1c2UgYHNwYWNlX29yX3RhYl9lb2xfd2l0aF9vcHRpb25zYCwgY29ubmVjdC5cbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssIHR5cGVzLmxpbmVQcmVmaXgpXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5jaHVua1N0cmluZywge2NvbnRlbnRUeXBlOiBjb25zdGFudHMuY29udGVudFR5cGVTdHJpbmd9KVxuICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIgfHwgY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmNodW5rU3RyaW5nKVxuICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgICB9XG5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29kZSA9PT0gY29kZXMuYmFja3NsYXNoID8gZXNjYXBlIDogaW5zaWRlXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYFxcYCwgYXQgYSBzcGVjaWFsIGNoYXJhY3Rlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVxcKmJcIlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlciB8fCBjb2RlID09PSBjb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGluc2lkZVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-factory-title/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-factory-whitespace/dev/index.js": /*!***********************************************************************!*\ !*** ../../../node_modules/micromark-factory-whitespace/dev/index.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"factoryWhitespace\": () => (/* binding */ factoryWhitespace)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\n\n\n\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns\n * Start state.\n */\nfunction factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n\n return start\n\n /** @type {State} */\n function start(code) {\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownLineEnding)(code)) {\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding)\n seen = true\n return start\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code)) {\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__.factorySpace)(\n effects,\n start,\n seen ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineSuffix\n )(code)\n }\n\n return ok(code)\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvZGV2L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsc0NBQXNDO0FBQ25EOztBQUVvRDtBQUNzQjtBQUN0Qjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsYUFBYSxTQUFTO0FBQ3RCOztBQUVBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLFFBQVEsNEVBQWtCO0FBQzFCLG9CQUFvQiw0RUFBZ0I7QUFDcEM7QUFDQSxtQkFBbUIsNEVBQWdCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLHVFQUFhO0FBQ3JCLGFBQWEscUVBQVk7QUFDekI7QUFDQTtBQUNBLGVBQWUsNEVBQWdCLEdBQUcsNEVBQWdCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlL2Rldi9pbmRleC5qcz9kYzJmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FZmZlY3RzfSBFZmZlY3RzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5cbi8qKlxuICogUGFyc2Ugc3BhY2VzIGFuZCB0YWJzLlxuICpcbiAqIFRoZXJlIGlzIG5vIGBub2tgIHBhcmFtZXRlcjpcbiAqXG4gKiAqICAgbGluZSBlbmRpbmdzIG9yIHNwYWNlcyBpbiBtYXJrZG93biBhcmUgb2Z0ZW4gb3B0aW9uYWwsIGluIHdoaWNoIGNhc2UgdGhpc1xuICogICAgIGZhY3RvcnkgY2FuIGJlIHVzZWQgYW5kIGBva2Agd2lsbCBiZSBzd2l0Y2hlZCB0byB3aGV0aGVyIHNwYWNlcyB3ZXJlIGZvdW5kXG4gKiAgICAgb3Igbm90XG4gKiAqICAgb25lIGxpbmUgZW5kaW5nIG9yIHNwYWNlIGNhbiBiZSBkZXRlY3RlZCB3aXRoXG4gKiAgICAgYG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlgIHJpZ2h0IGJlZm9yZSB1c2luZyBgZmFjdG9yeVdoaXRlc3BhY2VgXG4gKlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcmV0dXJuc1xuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rKSB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IHNlZW5cblxuICByZXR1cm4gc3RhcnRcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMubGluZUVuZGluZylcbiAgICAgIHNlZW4gPSB0cnVlXG4gICAgICByZXR1cm4gc3RhcnRcbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNlZW4gPyB0eXBlcy5saW5lUHJlZml4IDogdHlwZXMubGluZVN1ZmZpeFxuICAgICAgKShjb2RlKVxuICAgIH1cblxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-factory-whitespace/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-character/dev/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/micromark-util-character/dev/index.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"asciiAlpha\": () => (/* binding */ asciiAlpha),\n/* harmony export */ \"asciiAlphanumeric\": () => (/* binding */ asciiAlphanumeric),\n/* harmony export */ \"asciiAtext\": () => (/* binding */ asciiAtext),\n/* harmony export */ \"asciiControl\": () => (/* binding */ asciiControl),\n/* harmony export */ \"asciiDigit\": () => (/* binding */ asciiDigit),\n/* harmony export */ \"asciiHexDigit\": () => (/* binding */ asciiHexDigit),\n/* harmony export */ \"asciiPunctuation\": () => (/* binding */ asciiPunctuation),\n/* harmony export */ \"markdownLineEnding\": () => (/* binding */ markdownLineEnding),\n/* harmony export */ \"markdownLineEndingOrSpace\": () => (/* binding */ markdownLineEndingOrSpace),\n/* harmony export */ \"markdownSpace\": () => (/* binding */ markdownSpace),\n/* harmony export */ \"unicodePunctuation\": () => (/* binding */ unicodePunctuation),\n/* harmony export */ \"unicodeWhitespace\": () => (/* binding */ unicodeWhitespace)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var _lib_unicode_punctuation_regex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/unicode-punctuation-regex.js */ \"../../../node_modules/micromark-util-character/dev/lib/unicode-punctuation-regex.js\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n\n\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nfunction asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.del)\n )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nfunction markdownLineEnding(code) {\n return code !== null && code < micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nfunction markdownLineEndingOrSpace(code) {\n return code !== null && (code < micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.nul || code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nfunction markdownSpace(code) {\n return (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space\n )\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst unicodePunctuation = regexCheck(_lib_unicode_punctuation_regex_js__WEBPACK_IMPORTED_MODULE_1__.unicodePunctuationRegex)\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nconst unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n return check\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && regex.test(String.fromCharCode(code))\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNoYXJhY3Rlci9kZXYvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xEOztBQUVvRDtBQUNzQjs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix1RUFBVyxhQUFhLHFFQUFTO0FBQzlEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxnREFBZ0Q7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQLGlDQUFpQywrRUFBbUI7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1Asa0NBQWtDLHFFQUFTLGFBQWEsdUVBQVc7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1A7QUFDQSxhQUFhLCtFQUFtQjtBQUNoQyxhQUFhLDhFQUFrQjtBQUMvQixhQUFhLHVFQUFXO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sc0NBQXNDLHNGQUF1Qjs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNoYXJhY3Rlci9kZXYvaW5kZXguanM/YTY1NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICovXG5cbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7dW5pY29kZVB1bmN0dWF0aW9uUmVnZXh9IGZyb20gJy4vbGliL3VuaWNvZGUtcHVuY3R1YXRpb24tcmVnZXguanMnXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBhbiBBU0NJSSBhbHBoYSAoYGFgIHRocm91Z2ggYHpgLFxuICogY2FzZSBpbnNlbnNpdGl2ZSkuXG4gKlxuICogQW4gKipBU0NJSSBhbHBoYSoqIGlzIGFuIEFTQ0lJIHVwcGVyIGFscGhhIG9yIEFTQ0lJIGxvd2VyIGFscGhhLlxuICpcbiAqIEFuICoqQVNDSUkgdXBwZXIgYWxwaGEqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDA0MSAoYEFgKVxuICogdG8gVSswMDVBIChgWmApLlxuICpcbiAqIEFuICoqQVNDSUkgbG93ZXIgYWxwaGEqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDA2MSAoYGFgKVxuICogdG8gVSswMDdBIChgemApLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJuc1xuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBhc2NpaUFscGhhID0gcmVnZXhDaGVjaygvW0EtWmEtel0vKVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgYWxwaGFudW1lcmljIChgYWBcbiAqIHRocm91Z2ggYHpgLCBjYXNlIGluc2Vuc2l0aXZlLCBvciBgMGAgdGhyb3VnaCBgOWApLlxuICpcbiAqIEFuICoqQVNDSUkgYWxwaGFudW1lcmljKiogaXMgYW4gQVNDSUkgZGlnaXQgKHNlZSBgYXNjaWlEaWdpdGApIG9yIEFTQ0lJIGFscGhhXG4gKiAoc2VlIGBhc2NpaUFscGhhYCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpQWxwaGFudW1lcmljID0gcmVnZXhDaGVjaygvW1xcZEEtWmEtel0vKVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgYXRleHQuXG4gKlxuICogYXRleHQgaXMgYW4gQVNDSUkgYWxwaGFudW1lcmljIChzZWUgYGFzY2lpQWxwaGFudW1lcmljYCksIG9yIGEgY2hhcmFjdGVyIGluXG4gKiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBVKzAwMjMgTlVNQkVSIFNJR04gKGAjYCkgdG8gVSswMDI3IEFQT1NUUk9QSEUgKGAnYCksXG4gKiBVKzAwMkEgQVNURVJJU0sgKGAqYCksIFUrMDAyQiBQTFVTIFNJR04gKGArYCksIFUrMDAyRCBEQVNIIChgLWApLCBVKzAwMkZcbiAqIFNMQVNIIChgL2ApLCBVKzAwM0QgRVFVQUxTIFRPIChgPWApLCBVKzAwM0YgUVVFU1RJT04gTUFSSyAoYD9gKSwgVSswMDVFXG4gKiBDQVJFVCAoYF5gKSB0byBVKzAwNjAgR1JBVkUgQUNDRU5UIChgYCBgIGBgKSwgb3IgVSswMDdCIExFRlQgQ1VSTFkgQlJBQ0VcbiAqIChge2ApIHRvIFUrMDA3RSBUSUxERSAoYH5gKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1JGQzUzMjJdKio6XG4gKiBbSW50ZXJuZXQgTWVzc2FnZSBGb3JtYXRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MzIyKS5cbiAqIFAuIFJlc25pY2suXG4gKiBJRVRGLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJuc1xuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBhc2NpaUF0ZXh0ID0gcmVnZXhDaGVjaygvWyMtJyorXFwtLTk9P0EtWl4tfl0vKVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBjaGFyYWN0ZXIgY29kZSBpcyBhbiBBU0NJSSBjb250cm9sIGNoYXJhY3Rlci5cbiAqXG4gKiBBbiAqKkFTQ0lJIGNvbnRyb2wqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDAwMCBOVUxMIChOVUwpXG4gKiB0byBVKzAwMUYgKFVTKSwgb3IgVSswMDdGIChERUwpLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzY2lpQ29udHJvbChjb2RlKSB7XG4gIHJldHVybiAoXG4gICAgLy8gU3BlY2lhbCB3aGl0ZXNwYWNlIGNvZGVzICh3aGljaCBoYXZlIG5lZ2F0aXZlIHZhbHVlcyksIEMwIGFuZCBDb250cm9sXG4gICAgLy8gY2hhcmFjdGVyIERFTFxuICAgIGNvZGUgIT09IG51bGwgJiYgKGNvZGUgPCBjb2Rlcy5zcGFjZSB8fCBjb2RlID09PSBjb2Rlcy5kZWwpXG4gIClcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGRpZ2l0IChgMGAgdGhyb3VnaCBgOWApLlxuICpcbiAqIEFuICoqQVNDSUkgZGlnaXQqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDAzMCAoYDBgKSB0b1xuICogVSswMDM5IChgOWApLlxuICpcbiAqIEBwYXJhbSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJuc1xuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBhc2NpaURpZ2l0ID0gcmVnZXhDaGVjaygvXFxkLylcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGhleCBkaWdpdCAoYGFgIHRocm91Z2hcbiAqIGBmYCwgY2FzZSBpbnNlbnNpdGl2ZSwgb3IgYDBgIHRocm91Z2ggYDlgKS5cbiAqXG4gKiBBbiAqKkFTQ0lJIGhleCBkaWdpdCoqIGlzIGFuIEFTQ0lJIGRpZ2l0IChzZWUgYGFzY2lpRGlnaXRgKSwgQVNDSUkgdXBwZXIgaGV4XG4gKiBkaWdpdCwgb3IgYW4gQVNDSUkgbG93ZXIgaGV4IGRpZ2l0LlxuICpcbiAqIEFuICoqQVNDSUkgdXBwZXIgaGV4IGRpZ2l0KiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBVKzAwNDFcbiAqIChgQWApIHRvIFUrMDA0NiAoYEZgKS5cbiAqXG4gKiBBbiAqKkFTQ0lJIGxvd2VyIGhleCBkaWdpdCoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDYxXG4gKiAoYGFgKSB0byBVKzAwNjYgKGBmYCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpSGV4RGlnaXQgPSByZWdleENoZWNrKC9bXFxkQS1GYS1mXS8pXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBBU0NJSSBwdW5jdHVhdGlvbi5cbiAqXG4gKiBBbiAqKkFTQ0lJIHB1bmN0dWF0aW9uKiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZXMgVSswMDIxXG4gKiBFWENMQU1BVElPTiBNQVJLIChgIWApIHRvIFUrMDAyRiBTTEFTSCAoYC9gKSwgVSswMDNBIENPTE9OIChgOmApIHRvIFUrMDA0MCBBVFxuICogU0lHTiAoYEBgKSwgVSswMDVCIExFRlQgU1FVQVJFIEJSQUNLRVQgKGBbYCkgdG8gVSswMDYwIEdSQVZFIEFDQ0VOVFxuICogKGBgIGAgYGApLCBvciBVKzAwN0IgTEVGVCBDVVJMWSBCUkFDRSAoYHtgKSB0byBVKzAwN0UgVElMREUgKGB+YCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpUHVuY3R1YXRpb24gPSByZWdleENoZWNrKC9bIS0vOi1AWy1gey1+XS8pXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGEgbWFya2Rvd24gbGluZSBlbmRpbmcuXG4gKlxuICogQSAqKm1hcmtkb3duIGxpbmUgZW5kaW5nKiogaXMgdGhlIHZpcnR1YWwgY2hhcmFjdGVycyBNLTAwMDMgQ0FSUklBR0UgUkVUVVJOXG4gKiBMSU5FIEZFRUQgKENSTEYpLCBNLTAwMDQgTElORSBGRUVEIChMRikgYW5kIE0tMDAwNSBDQVJSSUFHRSBSRVRVUk4gKENSKS5cbiAqXG4gKiBJbiBtaWNyb21hcmssIHRoZSBhY3R1YWwgY2hhcmFjdGVyIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBhbmQgVSswMDBEIENBUlJJQUdFXG4gKiBSRVRVUk4gKENSKSBhcmUgcmVwbGFjZWQgYnkgdGhlc2UgdmlydHVhbCBjaGFyYWN0ZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyXG4gKiB0aGV5IG9jY3VycmVkIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSB7XG4gIHJldHVybiBjb2RlICE9PSBudWxsICYmIGNvZGUgPCBjb2Rlcy5ob3Jpem9udGFsVGFiXG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGEgbWFya2Rvd24gbGluZSBlbmRpbmcgKHNlZVxuICogYG1hcmtkb3duTGluZUVuZGluZ2ApIG9yIG1hcmtkb3duIHNwYWNlIChzZWUgYG1hcmtkb3duU3BhY2VgKS5cbiAqXG4gKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgIT09IG51bGwgJiYgKGNvZGUgPCBjb2Rlcy5udWwgfHwgY29kZSA9PT0gY29kZXMuc3BhY2UpXG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGEgbWFya2Rvd24gc3BhY2UuXG4gKlxuICogQSAqKm1hcmtkb3duIHNwYWNlKiogaXMgdGhlIGNvbmNyZXRlIGNoYXJhY3RlciBVKzAwMjAgU1BBQ0UgKFNQKSBhbmQgdGhlXG4gKiB2aXJ0dWFsIGNoYXJhY3RlcnMgTS0wMDAxIFZJUlRVQUwgU1BBQ0UgKFZTKSBhbmQgTS0wMDAyIEhPUklaT05UQUwgVEFCIChIVCkuXG4gKlxuICogSW4gbWljcm9tYXJrLCB0aGUgYWN0dWFsIGNoYXJhY3RlciBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKSBpc1xuICogcmVwbGFjZWQgYnkgb25lIE0tMDAwMiBIT1JJWk9OVEFMIFRBQiAoSFQpIGFuZCBiZXR3ZWVuIDAgYW5kIDMgTS0wMDAxIFZJUlRVQUxcbiAqIFNQQUNFIChWUykgY2hhcmFjdGVycywgZGVwZW5kaW5nIG9uIHRoZSBjb2x1bW4gYXQgd2hpY2ggdGhlIHRhYiBvY2N1cnJlZC5cbiAqXG4gKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93blNwYWNlKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBjb2RlID09PSBjb2Rlcy5ob3Jpem9udGFsVGFiIHx8XG4gICAgY29kZSA9PT0gY29kZXMudmlydHVhbFNwYWNlIHx8XG4gICAgY29kZSA9PT0gY29kZXMuc3BhY2VcbiAgKVxufVxuXG4vLyBTaXplIG5vdGU6IHJlbW92aW5nIEFTQ0lJIGZyb20gdGhlIHJlZ2V4IGFuZCB1c2luZyBgYXNjaWlQdW5jdHVhdGlvbmAgaGVyZVxuLy8gSW4gZmFjdCBhZGRzIHRvIHRoZSBidW5kbGUgc2l6ZS5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBVbmljb2RlIHB1bmN0dWF0aW9uLlxuICpcbiAqIEEgKipVbmljb2RlIHB1bmN0dWF0aW9uKiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgYFBjYCAoUHVuY3R1YXRpb24sXG4gKiBDb25uZWN0b3IpLCBgUGRgIChQdW5jdHVhdGlvbiwgRGFzaCksIGBQZWAgKFB1bmN0dWF0aW9uLCBDbG9zZSksIGBQZmBcbiAqIChQdW5jdHVhdGlvbiwgRmluYWwgcXVvdGUpLCBgUGlgIChQdW5jdHVhdGlvbiwgSW5pdGlhbCBxdW90ZSksIGBQb2BcbiAqIChQdW5jdHVhdGlvbiwgT3RoZXIpLCBvciBgUHNgIChQdW5jdHVhdGlvbiwgT3BlbikgY2F0ZWdvcmllcywgb3IgYW4gQVNDSUlcbiAqIHB1bmN0dWF0aW9uIChzZWUgYGFzY2lpUHVuY3R1YXRpb25gKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1VOSUNPREVdKio6XG4gKiBbVGhlIFVuaWNvZGUgU3RhbmRhcmRdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zLykuXG4gKiBVbmljb2RlIENvbnNvcnRpdW0uXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2sodW5pY29kZVB1bmN0dWF0aW9uUmVnZXgpXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBVbmljb2RlIHdoaXRlc3BhY2UuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZG9lcyBoYW5kbGUgbWljcm9tYXJrIHNwZWNpZmljIG1hcmtkb3duIHdoaXRlc3BhY2UgY2hhcmFjdGVycy5cbiAqIFNlZSBgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZWAgdG8gY2hlY2sgdGhhdC5cbiAqXG4gKiBBICoqVW5pY29kZSB3aGl0ZXNwYWNlKiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgYFpzYCAoU2VwYXJhdG9yLFxuICogU3BhY2UpIGNhdGVnb3J5LCBvciBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKSwgVSswMDBBIExJTkUgRkVFRCAoTEYpLFxuICogVSswMDBDIChGRiksIG9yIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSAoKipcXFtVTklDT0RFXSoqKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1VOSUNPREVdKio6XG4gKiBbVGhlIFVuaWNvZGUgU3RhbmRhcmRdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zLykuXG4gKiBVbmljb2RlIENvbnNvcnRpdW0uXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVXaGl0ZXNwYWNlID0gcmVnZXhDaGVjaygvXFxzLylcblxuLyoqXG4gKiBDcmVhdGUgYSBjb2RlIGNoZWNrIGZyb20gYSByZWdleC5cbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhcbiAqIEByZXR1cm5zIHsoY29kZTogQ29kZSkgPT4gYm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVnZXhDaGVjayhyZWdleCkge1xuICByZXR1cm4gY2hlY2tcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvZGUgbWF0Y2hlcyB0aGUgYm91bmQgcmVnZXguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICAgKiAgIENoYXJhY3RlciBjb2RlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogICBXaGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSBtYXRjaGVzIHRoZSBib3VuZCByZWdleC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSAhPT0gbnVsbCAmJiByZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpXG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-character/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-character/dev/lib/unicode-punctuation-regex.js": /*!*******************************************************************************************!*\ !*** ../../../node_modules/micromark-util-character/dev/lib/unicode-punctuation-regex.js ***! \*******************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"unicodePunctuationRegex\": () => (/* binding */ unicodePunctuationRegex)\n/* harmony export */ });\n// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\n\n/**\n * Regular expression that matches a unicode punctuation character.\n */\nconst unicodePunctuationRegex =\n /[!-/:-@[-`{-~\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNoYXJhY3Rlci9kZXYvbGliL3VuaWNvZGUtcHVuY3R1YXRpb24tcmVnZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNoYXJhY3Rlci9kZXYvbGliL3VuaWNvZGUtcHVuY3R1YXRpb24tcmVnZXguanM/NmExMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQgYnkgYHNjcmlwdC9gLlxuLy9cbi8vIENvbW1vbk1hcmsgaGFuZGxlcyBhdHRlbnRpb24gKGVtcGhhc2lzLCBzdHJvbmcpIG1hcmtlcnMgYmFzZWQgb24gd2hhdCBjb21lc1xuLy8gYmVmb3JlIG9yIGFmdGVyIHRoZW0uXG4vLyBPbmUgc3VjaCBkaWZmZXJlbmNlIGlzIGlmIHRob3NlIGNoYXJhY3RlcnMgYXJlIFVuaWNvZGUgcHVuY3R1YXRpb24uXG4vLyBUaGlzIHNjcmlwdCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgVW5pY29kZSBkYXRhLlxuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYSB1bmljb2RlIHB1bmN0dWF0aW9uIGNoYXJhY3Rlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVQdW5jdHVhdGlvblJlZ2V4ID1cbiAgL1shLS86LUBbLWB7LX5cXHUwMEExXFx1MDBBN1xcdTAwQUJcXHUwMEI2XFx1MDBCN1xcdTAwQkJcXHUwMEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRC1cXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwOUZEXFx1MEE3NlxcdTBBRjBcXHUwQzc3XFx1MEM4NFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQjdEXFx1MUI3RVxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyLVxcdTJFNURcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XS9cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-character/dev/lib/unicode-punctuation-regex.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-chunked/dev/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/micromark-util-chunked/dev/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"push\": () => (/* binding */ push),\n/* harmony export */ \"splice\": () => (/* binding */ splice)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n\n\n/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array} items\n * Items to inject into `list`.\n * @returns {void}\n * Nothing.\n */\nfunction splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {Array} */\n let parameters\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n\n remove = remove > 0 ? remove : 0\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove)\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(\n chunkStart,\n chunkStart + micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize\n )\n parameters.unshift(start, 0)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n\n chunkStart += micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize\n start += micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {Array} items\n * Items to add to `list`.\n * @returns {Array}\n * Either `list` or `items`.\n */\nfunction push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n\n return items\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNodW5rZWQvZGV2L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE0RDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFCQUFxQiw0RkFBNEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0RkFBNEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRGQUE0QjtBQUNoRCxlQUFlLDRGQUE0QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9kZXYvaW5kZXguanM/ZjA2OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcblxuLyoqXG4gKiBMaWtlIGBBcnJheSNzcGxpY2VgLCBidXQgc21hcnRlciBmb3IgZ2lhbnQgYXJyYXlzLlxuICpcbiAqIGBBcnJheSNzcGxpY2VgIHRha2VzIGFsbCBpdGVtcyB0byBiZSBpbnNlcnRlZCBhcyBpbmRpdmlkdWFsIGFyZ3VtZW50IHdoaWNoXG4gKiBjYXVzZXMgYSBzdGFjayBvdmVyZmxvdyBpbiBWOCB3aGVuIHRyeWluZyB0byBpbnNlcnQgMTAwayBpdGVtcyBmb3IgaW5zdGFuY2UuXG4gKlxuICogT3RoZXJ3aXNlLCB0aGlzIGRvZXMgbm90IHJldHVybiB0aGUgcmVtb3ZlZCBpdGVtcywgYW5kIHRha2VzIGBpdGVtc2AgYXMgYW5cbiAqIGFycmF5IGluc3RlYWQgb2YgcmVzdCBwYXJhbWV0ZXJzLlxuICpcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gVFxuICogICBJdGVtIHR5cGUuXG4gKiBAcGFyYW0ge0FycmF5PFQ+fSBsaXN0XG4gKiAgIExpc3QgdG8gb3BlcmF0ZSBvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICogICBJbmRleCB0byByZW1vdmUvaW5zZXJ0IGF0IChjYW4gYmUgbmVnYXRpdmUpLlxuICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZVxuICogICBOdW1iZXIgb2YgaXRlbXMgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXNcbiAqICAgSXRlbXMgdG8gaW5qZWN0IGludG8gYGxpc3RgLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UobGlzdCwgc3RhcnQsIHJlbW92ZSwgaXRlbXMpIHtcbiAgY29uc3QgZW5kID0gbGlzdC5sZW5ndGhcbiAgbGV0IGNodW5rU3RhcnQgPSAwXG4gIC8qKiBAdHlwZSB7QXJyYXk8dW5rbm93bj59ICovXG4gIGxldCBwYXJhbWV0ZXJzXG5cbiAgLy8gTWFrZSBzdGFydCBiZXR3ZWVuIHplcm8gYW5kIGBlbmRgIChpbmNsdWRlZCkuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGVuZCA/IDAgOiBlbmQgKyBzdGFydFxuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gc3RhcnQgPiBlbmQgPyBlbmQgOiBzdGFydFxuICB9XG5cbiAgcmVtb3ZlID0gcmVtb3ZlID4gMCA/IHJlbW92ZSA6IDBcblxuICAvLyBObyBuZWVkIHRvIGNodW5rIHRoZSBpdGVtcyBpZiB0aGVyZeKAmXMgb25seSBhIGNvdXBsZSAoMTBrKSBpdGVtcy5cbiAgaWYgKGl0ZW1zLmxlbmd0aCA8IGNvbnN0YW50cy52OE1heFNhZmVDaHVua1NpemUpIHtcbiAgICBwYXJhbWV0ZXJzID0gQXJyYXkuZnJvbShpdGVtcylcbiAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIHJlbW92ZSlcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEh1c2gsIGl04oCZcyBmaW5lLlxuICAgIGxpc3Quc3BsaWNlKC4uLnBhcmFtZXRlcnMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRGVsZXRlIGByZW1vdmVgIGl0ZW1zIHN0YXJ0aW5nIGZyb20gYHN0YXJ0YFxuICAgIGlmIChyZW1vdmUpIGxpc3Quc3BsaWNlKHN0YXJ0LCByZW1vdmUpXG5cbiAgICAvLyBJbnNlcnQgdGhlIGl0ZW1zIGluIGNodW5rcyB0byBub3QgY2F1c2Ugc3RhY2sgb3ZlcmZsb3dzLlxuICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzID0gaXRlbXMuc2xpY2UoXG4gICAgICAgIGNodW5rU3RhcnQsXG4gICAgICAgIGNodW5rU3RhcnQgKyBjb25zdGFudHMudjhNYXhTYWZlQ2h1bmtTaXplXG4gICAgICApXG4gICAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIDApXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEh1c2gsIGl04oCZcyBmaW5lLlxuICAgICAgbGlzdC5zcGxpY2UoLi4ucGFyYW1ldGVycylcblxuICAgICAgY2h1bmtTdGFydCArPSBjb25zdGFudHMudjhNYXhTYWZlQ2h1bmtTaXplXG4gICAgICBzdGFydCArPSBjb25zdGFudHMudjhNYXhTYWZlQ2h1bmtTaXplXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwZW5kIGBpdGVtc2AgKGFuIGFycmF5KSBhdCB0aGUgZW5kIG9mIGBsaXN0YCAoYW5vdGhlciBhcnJheSkuXG4gKiBXaGVuIGBsaXN0YCB3YXMgZW1wdHksIHJldHVybnMgYGl0ZW1zYCBpbnN0ZWFkLlxuICpcbiAqIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9uIHdoZW4gYGxpc3RgIGlzIGVtcHR5LFxuICogYW5kIGFkZHMgaXRlbXMgaW4gYmF0Y2hlcyB0byBwcmV2ZW50IFY4IGZyb20gaGFuZ2luZy5cbiAqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqICAgSXRlbSB0eXBlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gbGlzdFxuICogICBMaXN0IHRvIG9wZXJhdGUgb24uXG4gKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtc1xuICogICBJdGVtcyB0byBhZGQgdG8gYGxpc3RgLlxuICogQHJldHVybnMge0FycmF5PFQ+fVxuICogICBFaXRoZXIgYGxpc3RgIG9yIGBpdGVtc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGxpc3QsIGl0ZW1zKSB7XG4gIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICBzcGxpY2UobGlzdCwgbGlzdC5sZW5ndGgsIDAsIGl0ZW1zKVxuICAgIHJldHVybiBsaXN0XG4gIH1cblxuICByZXR1cm4gaXRlbXNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-chunked/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-classify-character/dev/index.js": /*!****************************************************************************!*\ !*** ../../../node_modules/micromark-util-classify-character/dev/index.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"classifyCharacter\": () => (/* binding */ classifyCharacter)\n/* harmony export */ });\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n\n\n\n\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nfunction classifyCharacter(code) {\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) ||\n (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code)\n ) {\n return micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.characterGroupWhitespace\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodePunctuation)(code)) {\n return micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.characterGroupPunctuation\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9kZXYvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7O0FBTWlDO0FBQ21CO0FBQ1E7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ087QUFDUDtBQUNBLGFBQWEscUVBQVM7QUFDdEIsSUFBSSxtRkFBeUI7QUFDN0IsSUFBSSwyRUFBaUI7QUFDckI7QUFDQSxXQUFXLGtHQUFrQztBQUM3Qzs7QUFFQSxNQUFNLDRFQUFrQjtBQUN4QixXQUFXLG1HQUFtQztBQUM5QztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXIvZGV2L2luZGV4LmpzPzQ1OTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqL1xuXG5pbXBvcnQge1xuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICB1bmljb2RlUHVuY3R1YXRpb24sXG4gIHVuaWNvZGVXaGl0ZXNwYWNlXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuXG4vKipcbiAqIENsYXNzaWZ5IHdoZXRoZXIgYSBjb2RlIHJlcHJlc2VudHMgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24sIG9yIHNvbWV0aGluZ1xuICogZWxzZS5cbiAqXG4gKiBVc2VkIGZvciBhdHRlbnRpb24gKGVtcGhhc2lzLCBzdHJvbmcpLCB3aG9zZSBzZXF1ZW5jZXMgY2FuIG9wZW4gb3IgY2xvc2VcbiAqIGJhc2VkIG9uIHRoZSBjbGFzcyBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqID4g8J+RiSAqKk5vdGUqKjogZW9mIChgbnVsbGApIGlzIHNlZW4gYXMgd2hpdGVzcGFjZS5cbiAqXG4gKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zIHt0eXBlb2YgY29uc3RhbnRzLmNoYXJhY3Rlckdyb3VwV2hpdGVzcGFjZSB8IHR5cGVvZiBjb25zdGFudHMuY2hhcmFjdGVyR3JvdXBQdW5jdHVhdGlvbiB8IHVuZGVmaW5lZH1cbiAqICAgR3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlKSB7XG4gIGlmIChcbiAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHxcbiAgICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHx8XG4gICAgdW5pY29kZVdoaXRlc3BhY2UoY29kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGNvbnN0YW50cy5jaGFyYWN0ZXJHcm91cFdoaXRlc3BhY2VcbiAgfVxuXG4gIGlmICh1bmljb2RlUHVuY3R1YXRpb24oY29kZSkpIHtcbiAgICByZXR1cm4gY29uc3RhbnRzLmNoYXJhY3Rlckdyb3VwUHVuY3R1YXRpb25cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-classify-character/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-combine-extensions/index.js": /*!************************************************************************!*\ !*** ../../../node_modules/micromark-util-combine-extensions/index.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"combineExtensions\": () => (/* binding */ combineExtensions),\n/* harmony export */ \"combineHtmlExtensions\": () => (/* binding */ combineHtmlExtensions)\n/* harmony export */ });\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\n\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nfunction combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record} */\n const left = maybe || (all[hook] = {})\n /** @type {Record | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array} existing\n * @param {Array} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_0__.splice)(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * A single combined HTML extension.\n */\nfunction combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsOENBQThDO0FBQzNELGFBQWEsb0RBQW9EO0FBQ2pFOztBQUU2Qzs7QUFFN0MseUJBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ087QUFDUCxhQUFhLHFCQUFxQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0EsZUFBZSx5QkFBeUI7QUFDeEMseUNBQXlDO0FBQ3pDLGVBQWUscUNBQXFDO0FBQ3BEO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsRUFBRSw4REFBTTtBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQLGFBQWEsZUFBZTtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBLGVBQWUsZUFBZTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMvaW5kZXguanM/YjNkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXh0ZW5zaW9ufSBFeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSGFuZGxlc30gSGFuZGxlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5IdG1sRXh0ZW5zaW9ufSBIdG1sRXh0ZW5zaW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLk5vcm1hbGl6ZWRFeHRlbnNpb259IE5vcm1hbGl6ZWRFeHRlbnNpb25cbiAqL1xuXG5pbXBvcnQge3NwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgc3ludGF4IGV4dGVuc2lvbnMgaW50byBvbmUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxFeHRlbnNpb24+fSBleHRlbnNpb25zXG4gKiAgIExpc3Qgb2Ygc3ludGF4IGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyB7Tm9ybWFsaXplZEV4dGVuc2lvbn1cbiAqICAgQSBzaW5nbGUgY29tYmluZWQgZXh0ZW5zaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucykge1xuICAvKiogQHR5cGUge05vcm1hbGl6ZWRFeHRlbnNpb259ICovXG4gIGNvbnN0IGFsbCA9IHt9XG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBleHRlbnNpb25zLmxlbmd0aCkge1xuICAgIHN5bnRheEV4dGVuc2lvbihhbGwsIGV4dGVuc2lvbnNbaW5kZXhdKVxuICB9XG5cbiAgcmV0dXJuIGFsbFxufVxuXG4vKipcbiAqIE1lcmdlIGBleHRlbnNpb25gIGludG8gYGFsbGAuXG4gKlxuICogQHBhcmFtIHtOb3JtYWxpemVkRXh0ZW5zaW9ufSBhbGxcbiAqICAgRXh0ZW5zaW9uIHRvIG1lcmdlIGludG8uXG4gKiBAcGFyYW0ge0V4dGVuc2lvbn0gZXh0ZW5zaW9uXG4gKiAgIEV4dGVuc2lvbiB0byBtZXJnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzeW50YXhFeHRlbnNpb24oYWxsLCBleHRlbnNpb24pIHtcbiAgLyoqIEB0eXBlIHtrZXlvZiBFeHRlbnNpb259ICovXG4gIGxldCBob29rXG5cbiAgZm9yIChob29rIGluIGV4dGVuc2lvbikge1xuICAgIGNvbnN0IG1heWJlID0gaGFzT3duUHJvcGVydHkuY2FsbChhbGwsIGhvb2spID8gYWxsW2hvb2tdIDogdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi9cbiAgICBjb25zdCBsZWZ0ID0gbWF5YmUgfHwgKGFsbFtob29rXSA9IHt9KVxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9ICovXG4gICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25baG9va11cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBmb3IgKGNvZGUgaW4gcmlnaHQpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxlZnQsIGNvZGUpKSBsZWZ0W2NvZGVdID0gW11cbiAgICAgICAgY29uc3QgdmFsdWUgPSByaWdodFtjb2RlXVxuICAgICAgICBjb25zdHJ1Y3RzKFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTG9va3MgbGlrZSBhIGxpc3QuXG4gICAgICAgICAgbGVmdFtjb2RlXSxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgPyBbdmFsdWVdIDogW11cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lcmdlIGBsaXN0YCBpbnRvIGBleGlzdGluZ2AgKGJvdGggbGlzdHMgb2YgY29uc3RydWN0cykuXG4gKiBNdXRhdGVzIGBleGlzdGluZ2AuXG4gKlxuICogQHBhcmFtIHtBcnJheTx1bmtub3duPn0gZXhpc3RpbmdcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IGxpc3RcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RzKGV4aXN0aW5nLCBsaXN0KSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7QXJyYXk8dW5rbm93bj59ICovXG4gIGNvbnN0IGJlZm9yZSA9IFtdXG5cbiAgd2hpbGUgKCsraW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTG9va3MgbGlrZSBhbiBvYmplY3QuXG4gICAgOyhsaXN0W2luZGV4XS5hZGQgPT09ICdhZnRlcicgPyBleGlzdGluZyA6IGJlZm9yZSkucHVzaChsaXN0W2luZGV4XSlcbiAgfVxuXG4gIHNwbGljZShleGlzdGluZywgMCwgMCwgYmVmb3JlKVxufVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgSFRNTCBleHRlbnNpb25zIGludG8gb25lLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8SHRtbEV4dGVuc2lvbj59IGh0bWxFeHRlbnNpb25zXG4gKiAgIExpc3Qgb2YgSFRNTCBleHRlbnNpb25zLlxuICogQHJldHVybnMge0h0bWxFeHRlbnNpb259XG4gKiAgIEEgc2luZ2xlIGNvbWJpbmVkIEhUTUwgZXh0ZW5zaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUh0bWxFeHRlbnNpb25zKGh0bWxFeHRlbnNpb25zKSB7XG4gIC8qKiBAdHlwZSB7SHRtbEV4dGVuc2lvbn0gKi9cbiAgY29uc3QgaGFuZGxlcnMgPSB7fVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgaHRtbEV4dGVuc2lvbnMubGVuZ3RoKSB7XG4gICAgaHRtbEV4dGVuc2lvbihoYW5kbGVycywgaHRtbEV4dGVuc2lvbnNbaW5kZXhdKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJzXG59XG5cbi8qKlxuICogTWVyZ2UgYGV4dGVuc2lvbmAgaW50byBgYWxsYC5cbiAqXG4gKiBAcGFyYW0ge0h0bWxFeHRlbnNpb259IGFsbFxuICogICBFeHRlbnNpb24gdG8gbWVyZ2UgaW50by5cbiAqIEBwYXJhbSB7SHRtbEV4dGVuc2lvbn0gZXh0ZW5zaW9uXG4gKiAgIEV4dGVuc2lvbiB0byBtZXJnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBodG1sRXh0ZW5zaW9uKGFsbCwgZXh0ZW5zaW9uKSB7XG4gIC8qKiBAdHlwZSB7a2V5b2YgSHRtbEV4dGVuc2lvbn0gKi9cbiAgbGV0IGhvb2tcblxuICBmb3IgKGhvb2sgaW4gZXh0ZW5zaW9uKSB7XG4gICAgY29uc3QgbWF5YmUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbCwgaG9vaykgPyBhbGxbaG9va10gOiB1bmRlZmluZWRcbiAgICBjb25zdCBsZWZ0ID0gbWF5YmUgfHwgKGFsbFtob29rXSA9IHt9KVxuICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uW2hvb2tdXG4gICAgLyoqIEB0eXBlIHtrZXlvZiBIYW5kbGVzfSAqL1xuICAgIGxldCB0eXBlXG5cbiAgICBpZiAocmlnaHQpIHtcbiAgICAgIGZvciAodHlwZSBpbiByaWdodCkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFzc3VtZSBkb2N1bWVudCB2cyByZWd1bGFyIGhhbmRsZXIgYXJlIG1hbmFnZWQgY29ycmVjdGx5LlxuICAgICAgICBsZWZ0W3R5cGVdID0gcmlnaHRbdHlwZV1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-combine-extensions/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-decode-numeric-character-reference/dev/index.js": /*!********************************************************************************************!*\ !*** ../../../node_modules/micromark-util-decode-numeric-character-reference/dev/index.js ***! \********************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeNumericCharacterReference\": () => (/* binding */ decodeNumericCharacterReference)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/values.js */ \"../../../node_modules/micromark-util-symbol/values.js\");\n\n\n\n/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nfunction decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.ht ||\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.vt ||\n (code > micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.cr && code < micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space) ||\n // Control character (DEL) of C0, and C1 controls.\n (code > micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.tilde && code < 160) ||\n // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) ||\n // Noncharacters.\n (code > 64975 && code < 65008) ||\n /* eslint-disable no-bitwise */\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 ||\n /* eslint-enable no-bitwise */\n // Out of range\n code > 1114111\n ) {\n return micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_1__.values.replacementCharacter\n }\n\n return String.fromCharCode(code)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UvZGV2L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFvRDtBQUNFOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ087QUFDUDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxvRUFBUTtBQUNuQixhQUFhLG9FQUFRO0FBQ3JCLFlBQVksb0VBQVEsV0FBVyx1RUFBVztBQUMxQztBQUNBLFlBQVksdUVBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0ZBQTJCO0FBQ3RDOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UvZGV2L2luZGV4LmpzPzdhZjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHt2YWx1ZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC92YWx1ZXMuanMnXG5cbi8qKlxuICogVHVybiB0aGUgbnVtYmVyIChpbiBzdHJpbmcgZm9ybSBhcyBlaXRoZXIgaGV4YS0gb3IgcGxhaW4gZGVjaW1hbCkgY29taW5nIGZyb21cbiAqIGEgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIGludG8gYSBjaGFyYWN0ZXIuXG4gKlxuICogU29ydCBvZiBsaWtlIGBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlci5wYXJzZUludCh2YWx1ZSwgYmFzZSkpYCwgYnV0IG1ha2VzXG4gKiBub24tY2hhcmFjdGVycyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIHNhZmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIFZhbHVlIHRvIGRlY29kZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gKiAgIE51bWVyaWMgYmFzZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIENoYXJhY3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUsIGJhc2UpIHtcbiAgY29uc3QgY29kZSA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgYmFzZSlcblxuICBpZiAoXG4gICAgLy8gQzAgZXhjZXB0IGZvciBIVCwgTEYsIEZGLCBDUiwgc3BhY2UuXG4gICAgY29kZSA8IGNvZGVzLmh0IHx8XG4gICAgY29kZSA9PT0gY29kZXMudnQgfHxcbiAgICAoY29kZSA+IGNvZGVzLmNyICYmIGNvZGUgPCBjb2Rlcy5zcGFjZSkgfHxcbiAgICAvLyBDb250cm9sIGNoYXJhY3RlciAoREVMKSBvZiBDMCwgYW5kIEMxIGNvbnRyb2xzLlxuICAgIChjb2RlID4gY29kZXMudGlsZGUgJiYgY29kZSA8IDE2MCkgfHxcbiAgICAvLyBMb25lIGhpZ2ggc3Vycm9nYXRlcyBhbmQgbG93IHN1cnJvZ2F0ZXMuXG4gICAgKGNvZGUgPiA1NTI5NSAmJiBjb2RlIDwgNTczNDQpIHx8XG4gICAgLy8gTm9uY2hhcmFjdGVycy5cbiAgICAoY29kZSA+IDY0OTc1ICYmIGNvZGUgPCA2NTAwOCkgfHxcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4gICAgKGNvZGUgJiA2NTUzNSkgPT09IDY1NTM1IHx8XG4gICAgKGNvZGUgJiA2NTUzNSkgPT09IDY1NTM0IHx8XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovXG4gICAgLy8gT3V0IG9mIHJhbmdlXG4gICAgY29kZSA+IDExMTQxMTFcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZXBsYWNlbWVudENoYXJhY3RlclxuICB9XG5cbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSlcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-decode-numeric-character-reference/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-decode-string/dev/index.js": /*!***********************************************************************!*\ !*** ../../../node_modules/micromark-util-decode-string/dev/index.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeString\": () => (/* binding */ decodeString)\n/* harmony export */ });\n/* harmony import */ var decode_named_character_reference__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! decode-named-character-reference */ \"../../../node_modules/decode-named-character-reference/index.dom.js\");\n/* harmony import */ var micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-decode-numeric-character-reference */ \"../../../node_modules/micromark-util-decode-numeric-character-reference/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n\n\n\n\n\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nfunction decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n }\n\n // Reference.\n const head = $2.charCodeAt(0)\n\n if (head === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.numberSign) {\n const head = $2.charCodeAt(1)\n const hex = head === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseX || head === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseX\n return (0,micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_1__.decodeNumericCharacterReference)(\n $2.slice(hex ? 2 : 1),\n hex ? micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.numericBaseHexadecimal : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_2__.constants.numericBaseDecimal\n )\n }\n\n return (0,decode_named_character_reference__WEBPACK_IMPORTED_MODULE_3__.decodeNamedCharacterReference)($2) || $0\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvZGV2L2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQThFO0FBQ21CO0FBQzdDO0FBQ1E7O0FBRTVEO0FBQ0EsaUJBQWlCLGNBQWMsSUFBSSxVQUFVLElBQUksVUFBVSxLQUFLLEVBQUU7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSw0RUFBZ0I7QUFDL0I7QUFDQSx5QkFBeUIsNEVBQWdCLGFBQWEsNEVBQWdCO0FBQ3RFLFdBQVcsa0hBQStCO0FBQzFDO0FBQ0EsWUFBWSxnR0FBZ0MsR0FBRyw0RkFBNEI7QUFDM0U7QUFDQTs7QUFFQSxTQUFTLCtGQUE2QjtBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZy9kZXYvaW5kZXguanM/OTBhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlfSBmcm9tICdkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZSdcbmltcG9ydCB7ZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZSdcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7Y29uc3RhbnRzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29uc3RhbnRzLmpzJ1xuXG5jb25zdCBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9XG4gIC9cXFxcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcXGR7MSw3fXx4W1xcZGEtZl17MSw2fSl8W1xcZGEtel17MSwzMX0pOy9naVxuXG4vKipcbiAqIERlY29kZSBtYXJrZG93biBzdHJpbmdzICh3aGljaCBvY2N1ciBpbiBwbGFjZXMgc3VjaCBhcyBmZW5jZWQgY29kZSBpbmZvXG4gKiBzdHJpbmdzLCBkZXN0aW5hdGlvbnMsIGxhYmVscywgYW5kIHRpdGxlcykuXG4gKlxuICogVGhlIOKAnHN0cmluZ+KAnSBjb250ZW50IHR5cGUgYWxsb3dzIGNoYXJhY3RlciBlc2NhcGVzIGFuZCAtcmVmZXJlbmNlcy5cbiAqIFRoaXMgZGVjb2RlcyB0aG9zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgVmFsdWUgdG8gZGVjb2RlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRGVjb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSwgZGVjb2RlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICogQHBhcmFtIHtzdHJpbmd9ICQxXG4gKiBAcGFyYW0ge3N0cmluZ30gJDJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRlY29kZSgkMCwgJDEsICQyKSB7XG4gIGlmICgkMSkge1xuICAgIC8vIEVzY2FwZS5cbiAgICByZXR1cm4gJDFcbiAgfVxuXG4gIC8vIFJlZmVyZW5jZS5cbiAgY29uc3QgaGVhZCA9ICQyLmNoYXJDb2RlQXQoMClcblxuICBpZiAoaGVhZCA9PT0gY29kZXMubnVtYmVyU2lnbikge1xuICAgIGNvbnN0IGhlYWQgPSAkMi5jaGFyQ29kZUF0KDEpXG4gICAgY29uc3QgaGV4ID0gaGVhZCA9PT0gY29kZXMubG93ZXJjYXNlWCB8fCBoZWFkID09PSBjb2Rlcy51cHBlcmNhc2VYXG4gICAgcmV0dXJuIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoXG4gICAgICAkMi5zbGljZShoZXggPyAyIDogMSksXG4gICAgICBoZXggPyBjb25zdGFudHMubnVtZXJpY0Jhc2VIZXhhZGVjaW1hbCA6IGNvbnN0YW50cy5udW1lcmljQmFzZURlY2ltYWxcbiAgICApXG4gIH1cblxuICByZXR1cm4gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoJDIpIHx8ICQwXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-decode-string/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-html-tag-name/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/micromark-util-html-tag-name/index.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"htmlBlockNames\": () => (/* binding */ htmlBlockNames),\n/* harmony export */ \"htmlRawNames\": () => (/* binding */ htmlRawNames)\n/* harmony export */ });\n/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * .\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nconst htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * .\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nconst htmlRawNames = ['pre', 'script', 'style', 'textarea']\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZS9pbmRleC5qcz9jOTExIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlzdCBvZiBsb3dlcmNhc2UgSFRNTCDigJxibG9ja+KAnSB0YWcgbmFtZXMuXG4gKlxuICogVGhlIGxpc3QsIHdoZW4gcGFyc2luZyBIVE1MIChmbG93KSwgcmVzdWx0cyBpbiBtb3JlIHJlbGF4ZWQgcnVsZXMgKGNvbmRpdGlvblxuICogNikuXG4gKiBCZWNhdXNlIHRoZXkgYXJlIGtub3duIGJsb2NrcywgdGhlIEhUTUwtbGlrZSBzeW50YXggZG9lc27igJl0IGhhdmUgdG8gYmVcbiAqIHN0cmljdGx5IHBhcnNlZC5cbiAqIEZvciB0YWcgbmFtZXMgbm90IGluIHRoaXMgbGlzdCwgYSBtb3JlIHN0cmljdCBhbGdvcml0aG0gKGNvbmRpdGlvbiA3KSBpcyB1c2VkXG4gKiB0byBkZXRlY3Qgd2hldGhlciB0aGUgSFRNTC1saWtlIHN5bnRheCBpcyBzZWVuIGFzIEhUTUwgKGZsb3cpIG9yIG5vdC5cbiAqXG4gKiBUaGlzIGlzIGNvcGllZCBmcm9tOlxuICogPGh0dHBzOi8vc3BlYy5jb21tb25tYXJrLm9yZy8wLjMwLyNodG1sLWJsb2Nrcz4uXG4gKlxuICogPiDwn5GJICoqTm90ZSoqOiBgc2VhcmNoYCB3YXMgYWRkZWQgaW4gYENvbW1vbk1hcmtAMC4zMWAuXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sQmxvY2tOYW1lcyA9IFtcbiAgJ2FkZHJlc3MnLFxuICAnYXJ0aWNsZScsXG4gICdhc2lkZScsXG4gICdiYXNlJyxcbiAgJ2Jhc2Vmb250JyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnYm9keScsXG4gICdjYXB0aW9uJyxcbiAgJ2NlbnRlcicsXG4gICdjb2wnLFxuICAnY29sZ3JvdXAnLFxuICAnZGQnLFxuICAnZGV0YWlscycsXG4gICdkaWFsb2cnLFxuICAnZGlyJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb290ZXInLFxuICAnZm9ybScsXG4gICdmcmFtZScsXG4gICdmcmFtZXNldCcsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdoZWFkJyxcbiAgJ2hlYWRlcicsXG4gICdocicsXG4gICdodG1sJyxcbiAgJ2lmcmFtZScsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbGluaycsXG4gICdtYWluJyxcbiAgJ21lbnUnLFxuICAnbWVudWl0ZW0nLFxuICAnbmF2JyxcbiAgJ25vZnJhbWVzJyxcbiAgJ29sJyxcbiAgJ29wdGdyb3VwJyxcbiAgJ29wdGlvbicsXG4gICdwJyxcbiAgJ3BhcmFtJyxcbiAgJ3NlYXJjaCcsXG4gICdzZWN0aW9uJyxcbiAgJ3N1bW1hcnknLFxuICAndGFibGUnLFxuICAndGJvZHknLFxuICAndGQnLFxuICAndGZvb3QnLFxuICAndGgnLFxuICAndGhlYWQnLFxuICAndGl0bGUnLFxuICAndHInLFxuICAndHJhY2snLFxuICAndWwnXG5dXG5cbi8qKlxuICogTGlzdCBvZiBsb3dlcmNhc2UgSFRNTCDigJxyYXfigJ0gdGFnIG5hbWVzLlxuICpcbiAqIFRoZSBsaXN0LCB3aGVuIHBhcnNpbmcgSFRNTCAoZmxvdyksIHJlc3VsdHMgaW4gSFRNTCB0aGF0IGNhbiBpbmNsdWRlIGxpbmVzXG4gKiB3aXRob3V0IGV4aXRpbmcsIHVudGlsIGEgY2xvc2luZyB0YWcgYWxzbyBpbiB0aGlzIGxpc3QgaXMgZm91bmQgKGNvbmRpdGlvblxuICogMSkuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgY29waWVkIGZyb206XG4gKiA8aHR0cHM6Ly9zcGVjLmNvbW1vbm1hcmsub3JnLzAuMzAvI2h0bWwtYmxvY2tzPi5cbiAqXG4gKiA+IPCfkYkgKipOb3RlKio6IGB0ZXh0YXJlYWAgd2FzIGFkZGVkIGluIGBDb21tb25NYXJrQDAuMzBgLlxuICovXG5leHBvcnQgY29uc3QgaHRtbFJhd05hbWVzID0gWydwcmUnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3RleHRhcmVhJ11cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-html-tag-name/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-normalize-identifier/dev/index.js": /*!******************************************************************************!*\ !*** ../../../node_modules/micromark-util-normalize-identifier/dev/index.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"normalizeIdentifier\": () => (/* binding */ normalizeIdentifier)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/values.js */ \"../../../node_modules/micromark-util-symbol/values.js\");\n\n\n/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nfunction normalizeIdentifier(value) {\n return (\n value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_0__.values.space)\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIseUVBQVk7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllci9kZXYvaW5kZXguanM/OGIwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3ZhbHVlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3ZhbHVlcy5qcydcblxuLyoqXG4gKiBOb3JtYWxpemUgYW4gaWRlbnRpZmllciAoYXMgZm91bmQgaW4gcmVmZXJlbmNlcywgZGVmaW5pdGlvbnMpLlxuICpcbiAqIENvbGxhcHNlcyBtYXJrZG93biB3aGl0ZXNwYWNlLCB0cmltLCBhbmQgdGhlbiBsb3dlci0gYW5kIHVwcGVyY2FzZS5cbiAqXG4gKiBTb21lIGNoYXJhY3RlcnMgYXJlIGNvbnNpZGVyZWQg4oCcdXBwZXJjYXNl4oCdLCBzdWNoIGFzIFUrMDNGNCAoYM+0YCksIGJ1dCBpZiB0aGVpclxuICogbG93ZXJjYXNlIGNvdW50ZXJwYXJ0IChVKzAzQjggKGDOuGApKSBpcyB1cHBlcmNhc2VkIHdpbGwgcmVzdWx0IGluIGEgZGlmZmVyZW50XG4gKiB1cHBlcmNhc2UgY2hhcmFjdGVyIChVKzAzOTggKGDOmGApKS5cbiAqIFNvLCB0byBnZXQgYSBjYW5vbmljYWwgZm9ybSwgd2UgcGVyZm9ybSBib3RoIGxvd2VyLSBhbmQgdXBwZXJjYXNlLlxuICpcbiAqIFVzaW5nIHVwcGVyY2FzZSBsYXN0IG1ha2VzIHN1cmUga2V5cyB3aWxsIG5ldmVyIGludGVyYWN0IHdpdGggZGVmYXVsdFxuICogcHJvdG90eXBhbCB2YWx1ZXMgKHN1Y2ggYXMgYGNvbnN0cnVjdG9yYCk6IG5vdGhpbmcgaW4gdGhlIHByb3RvdHlwZSBvZlxuICogYE9iamVjdGAgaXMgdXBwZXJjYXNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBJZGVudGlmaWVyIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIE5vcm1hbGl6ZWQgaWRlbnRpZmllci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkZW50aWZpZXIodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZVxuICAgICAgLy8gQ29sbGFwc2UgbWFya2Rvd24gd2hpdGVzcGFjZS5cbiAgICAgIC5yZXBsYWNlKC9bXFx0XFxuXFxyIF0rL2csIHZhbHVlcy5zcGFjZSlcbiAgICAgIC8vIFRyaW0uXG4gICAgICAucmVwbGFjZSgvXiB8ICQvZywgJycpXG4gICAgICAvLyBTb21lIGNoYXJhY3RlcnMgYXJlIGNvbnNpZGVyZWQg4oCcdXBwZXJjYXNl4oCdLCBidXQgaWYgdGhlaXIgbG93ZXJjYXNlXG4gICAgICAvLyBjb3VudGVycGFydCBpcyB1cHBlcmNhc2VkIHdpbGwgcmVzdWx0IGluIGEgZGlmZmVyZW50IHVwcGVyY2FzZVxuICAgICAgLy8gY2hhcmFjdGVyLlxuICAgICAgLy8gSGVuY2UsIHRvIGdldCB0aGF0IGZvcm0sIHdlIHBlcmZvcm0gYm90aCBsb3dlci0gYW5kIHVwcGVyY2FzZS5cbiAgICAgIC8vIFVwcGVyIGNhc2UgbWFrZXMgc3VyZSBrZXlzIHdpbGwgbm90IGludGVyYWN0IHdpdGggZGVmYXVsdCBwcm90b3R5cGFsXG4gICAgICAvLyBtZXRob2RzOiBubyBtZXRob2QgaXMgdXBwZXJjYXNlLlxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC50b1VwcGVyQ2FzZSgpXG4gIClcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-normalize-identifier/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-resolve-all/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/micromark-util-resolve-all/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"resolveAll\": () => (/* binding */ resolveAll)\n/* harmony export */ });\n/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nfunction resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBLGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEsZ0RBQWdEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTyxrQ0FBa0MsR0FBRztBQUN2RDtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDTztBQUNQLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzPzE1MDciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV2ZW50fSBFdmVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqL1xuXG4vKipcbiAqIENhbGwgYWxsIGByZXNvbHZlQWxsYHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTx7cmVzb2x2ZUFsbD86IFJlc29sdmVyIHwgdW5kZWZpbmVkfT59IGNvbnN0cnVjdHNcbiAqICAgTGlzdCBvZiBjb25zdHJ1Y3RzLCBvcHRpb25hbGx5IHdpdGggYHJlc29sdmVBbGxgcy5cbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqICAgTGlzdCBvZiBldmVudHMuXG4gKiBAcGFyYW0ge1Rva2VuaXplQ29udGV4dH0gY29udGV4dFxuICogICBDb250ZXh0IHVzZWQgYnkgYHRva2VuaXplYC5cbiAqIEByZXR1cm5zIHtBcnJheTxFdmVudD59XG4gKiAgIENoYW5nZWQgZXZlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFsbChjb25zdHJ1Y3RzLCBldmVudHMsIGNvbnRleHQpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxSZXNvbHZlcj59ICovXG4gIGNvbnN0IGNhbGxlZCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBjb25zdHJ1Y3RzLmxlbmd0aCkge1xuICAgIGNvbnN0IHJlc29sdmUgPSBjb25zdHJ1Y3RzW2luZGV4XS5yZXNvbHZlQWxsXG5cbiAgICBpZiAocmVzb2x2ZSAmJiAhY2FsbGVkLmluY2x1ZGVzKHJlc29sdmUpKSB7XG4gICAgICBldmVudHMgPSByZXNvbHZlKGV2ZW50cywgY29udGV4dClcbiAgICAgIGNhbGxlZC5wdXNoKHJlc29sdmUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50c1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-resolve-all/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-subtokenize/dev/index.js": /*!*********************************************************************!*\ !*** ../../../node_modules/micromark-util-subtokenize/dev/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"subtokenize\": () => (/* binding */ subtokenize)\n/* harmony export */ });\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\n\n\n\n\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array} events\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\nfunction subtokenize(events) {\n /** @type {Record} */\n const jumps = {}\n let index = -1\n /** @type {Event} */\n let event\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number} */\n let otherIndex\n /** @type {Event} */\n let otherEvent\n /** @type {Array} */\n let parameters\n /** @type {Array} */\n let subevents\n /** @type {boolean | undefined} */\n let more\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n\n event = events[index]\n\n // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n if (\n index &&\n event[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow &&\n events[index - 1][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.listItemPrefix\n ) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(event[1]._tokenizer, 'expected `_tokenizer` on subtokens')\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEndingBlank\n ) {\n otherIndex += 2\n }\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.content\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.content) {\n break\n }\n\n if (subevents[otherIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkText) {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n }\n\n // Enter.\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n }\n // Exit.\n else if (event[1]._container) {\n otherIndex = index\n lineIndex = undefined\n\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n\n if (\n otherEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding ||\n otherEvent[1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEndingBlank\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEndingBlank\n }\n\n otherEvent[1].type = micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n\n return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array} events\n * @param {number} eventIndex\n * @returns {Record}\n */\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1]\n const context = events[eventIndex][2]\n let startPosition = eventIndex - 1\n /** @type {Array} */\n const startPositions = []\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(token.contentType, 'expected `contentType` on subtokens')\n const tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n const childEvents = tokenizer.events\n /** @type {Array<[number, number]>} */\n const jumps = []\n /** @type {Record} */\n const gaps = {}\n /** @type {Array} */\n let stream\n /** @type {Token | undefined} */\n let previous\n let index = -1\n /** @type {Token | undefined} */\n let current = token\n let adjust = 0\n let start = 0\n const breaks = [start]\n\n // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {\n // Empty.\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n !previous || current.previous === previous,\n 'expected previous to match'\n )\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(!previous || previous.next === current, 'expected next to match')\n\n startPositions.push(startPosition)\n\n if (!current._tokenizer) {\n stream = context.sliceStream(current)\n\n if (!current.next) {\n stream.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__.codes.eof)\n }\n\n if (previous) {\n tokenizer.defineSkip(current.start)\n }\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n\n tokenizer.write(stream)\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n }\n\n // Unravel the next token.\n previous = current\n current = current.next\n }\n\n // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n current = token\n\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' &&\n childEvents[index - 1][0] === 'enter' &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(current, 'expected a current token')\n start = index + 1\n breaks.push(start)\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n current = current.next\n }\n }\n\n // Help GC.\n tokenizer.events = []\n\n // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n if (current) {\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(!current.next, 'expected no next token')\n } else {\n breaks.pop()\n }\n\n // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n index = breaks.length\n\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1])\n const start = startPositions.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(start !== undefined, 'expected a start position when splicing')\n jumps.unshift([start, start + slice.length - 1])\n ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, start, 2, slice)\n }\n\n index = -1\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n\n return gaps\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2Rldi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxzQ0FBc0M7QUFDbkQ7O0FBRTZDO0FBQ087QUFDQTtBQUNiOztBQUV2QztBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1AsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkVBQWU7QUFDdkMsb0NBQW9DLGdGQUFvQjtBQUN4RDtBQUNBLE1BQU0sOENBQU07QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsaUZBQXFCO0FBQy9EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLHlFQUFhO0FBQ3ZEO0FBQ0E7QUFDQSxnREFBZ0QseUVBQWE7QUFDN0Q7QUFDQTs7QUFFQSxnREFBZ0QsMkVBQWU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLDRFQUFnQjtBQUNqRCxpQ0FBaUMsaUZBQXFCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxpRkFBcUI7QUFDL0Q7O0FBRUEsaUNBQWlDLDRFQUFnQjtBQUNqRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQSxRQUFRLCtEQUFNO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QjtBQUNBLEVBQUUsK0NBQU07QUFDUjtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBLGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0EsYUFBYSxtQkFBbUI7QUFDaEM7QUFDQTtBQUNBLGFBQWEsbUJBQW1CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksOENBQU07QUFDVjtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtDQUFNOztBQUVWOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IscUVBQVM7QUFDN0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sOENBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtDQUFNO0FBQ1YsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksK0NBQU07QUFDVjtBQUNBLElBQUksK0RBQU07QUFDVjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9kZXYvaW5kZXguanM/MTIyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ2h1bmt9IENodW5rXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV2ZW50fSBFdmVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqL1xuXG5pbXBvcnQge3NwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKipcbiAqIFRva2VuaXplIHN1YmNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50c1xuICogICBMaXN0IG9mIGV2ZW50cy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHN1YnRva2VucyB3ZXJlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VidG9rZW5pemUoZXZlbnRzKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gKi9cbiAgY29uc3QganVtcHMgPSB7fVxuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge0V2ZW50fSAqL1xuICBsZXQgZXZlbnRcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBsaW5lSW5kZXhcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBvdGhlckluZGV4XG4gIC8qKiBAdHlwZSB7RXZlbnR9ICovXG4gIGxldCBvdGhlckV2ZW50XG4gIC8qKiBAdHlwZSB7QXJyYXk8RXZlbnQ+fSAqL1xuICBsZXQgcGFyYW1ldGVyc1xuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IHN1YmV2ZW50c1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBtb3JlXG5cbiAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKGluZGV4IGluIGp1bXBzKSB7XG4gICAgICBpbmRleCA9IGp1bXBzW2luZGV4XVxuICAgIH1cblxuICAgIGV2ZW50ID0gZXZlbnRzW2luZGV4XVxuXG4gICAgLy8gQWRkIGEgaG9vayBmb3IgdGhlIEdGTSB0YXNrbGlzdCBleHRlbnNpb24sIHdoaWNoIG5lZWRzIHRvIGtub3cgaWYgdGV4dFxuICAgIC8vIGlzIGluIHRoZSBmaXJzdCBjb250ZW50IG9mIGEgbGlzdCBpdGVtLlxuICAgIGlmIChcbiAgICAgIGluZGV4ICYmXG4gICAgICBldmVudFsxXS50eXBlID09PSB0eXBlcy5jaHVua0Zsb3cgJiZcbiAgICAgIGV2ZW50c1tpbmRleCAtIDFdWzFdLnR5cGUgPT09IHR5cGVzLmxpc3RJdGVtUHJlZml4XG4gICAgKSB7XG4gICAgICBhc3NlcnQoZXZlbnRbMV0uX3Rva2VuaXplciwgJ2V4cGVjdGVkIGBfdG9rZW5pemVyYCBvbiBzdWJ0b2tlbnMnKVxuICAgICAgc3ViZXZlbnRzID0gZXZlbnRbMV0uX3Rva2VuaXplci5ldmVudHNcbiAgICAgIG90aGVySW5kZXggPSAwXG5cbiAgICAgIGlmIChcbiAgICAgICAgb3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiZcbiAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLmxpbmVFbmRpbmdCbGFua1xuICAgICAgKSB7XG4gICAgICAgIG90aGVySW5kZXggKz0gMlxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIG90aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoICYmXG4gICAgICAgIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSB0eXBlcy5jb250ZW50XG4gICAgICApIHtcbiAgICAgICAgd2hpbGUgKCsrb3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09IHR5cGVzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSB0eXBlcy5jaHVua1RleHQpIHtcbiAgICAgICAgICAgIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB0cnVlXG4gICAgICAgICAgICBvdGhlckluZGV4KytcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbnRlci5cbiAgICBpZiAoZXZlbnRbMF0gPT09ICdlbnRlcicpIHtcbiAgICAgIGlmIChldmVudFsxXS5jb250ZW50VHlwZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGp1bXBzLCBzdWJjb250ZW50KGV2ZW50cywgaW5kZXgpKVxuICAgICAgICBpbmRleCA9IGp1bXBzW2luZGV4XVxuICAgICAgICBtb3JlID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0LlxuICAgIGVsc2UgaWYgKGV2ZW50WzFdLl9jb250YWluZXIpIHtcbiAgICAgIG90aGVySW5kZXggPSBpbmRleFxuICAgICAgbGluZUluZGV4ID0gdW5kZWZpbmVkXG5cbiAgICAgIHdoaWxlIChvdGhlckluZGV4LS0pIHtcbiAgICAgICAgb3RoZXJFdmVudCA9IGV2ZW50c1tvdGhlckluZGV4XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmxpbmVFbmRpbmcgfHxcbiAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPT09IHR5cGVzLmxpbmVFbmRpbmdCbGFua1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob3RoZXJFdmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgaWYgKGxpbmVJbmRleCkge1xuICAgICAgICAgICAgICBldmVudHNbbGluZUluZGV4XVsxXS50eXBlID0gdHlwZXMubGluZUVuZGluZ0JsYW5rXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG90aGVyRXZlbnRbMV0udHlwZSA9IHR5cGVzLmxpbmVFbmRpbmdcbiAgICAgICAgICAgIGxpbmVJbmRleCA9IG90aGVySW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGluZUluZGV4KSB7XG4gICAgICAgIC8vIEZpeCBwb3NpdGlvbi5cbiAgICAgICAgZXZlbnRbMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2xpbmVJbmRleF1bMV0uc3RhcnQpXG5cbiAgICAgICAgLy8gU3dpdGNoIGNvbnRhaW5lciBleGl0IHcvIGxpbmUgZW5kaW5ncy5cbiAgICAgICAgcGFyYW1ldGVycyA9IGV2ZW50cy5zbGljZShsaW5lSW5kZXgsIGluZGV4KVxuICAgICAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoZXZlbnQpXG4gICAgICAgIHNwbGljZShldmVudHMsIGxpbmVJbmRleCwgaW5kZXggLSBsaW5lSW5kZXggKyAxLCBwYXJhbWV0ZXJzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAhbW9yZVxufVxuXG4vKipcbiAqIFRva2VuaXplIGVtYmVkZGVkIHRva2Vucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gZXZlbnRJbmRleFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIHN1YmNvbnRlbnQoZXZlbnRzLCBldmVudEluZGV4KSB7XG4gIGNvbnN0IHRva2VuID0gZXZlbnRzW2V2ZW50SW5kZXhdWzFdXG4gIGNvbnN0IGNvbnRleHQgPSBldmVudHNbZXZlbnRJbmRleF1bMl1cbiAgbGV0IHN0YXJ0UG9zaXRpb24gPSBldmVudEluZGV4IC0gMVxuICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gIGNvbnN0IHN0YXJ0UG9zaXRpb25zID0gW11cbiAgYXNzZXJ0KHRva2VuLmNvbnRlbnRUeXBlLCAnZXhwZWN0ZWQgYGNvbnRlbnRUeXBlYCBvbiBzdWJ0b2tlbnMnKVxuICBjb25zdCB0b2tlbml6ZXIgPVxuICAgIHRva2VuLl90b2tlbml6ZXIgfHwgY29udGV4dC5wYXJzZXJbdG9rZW4uY29udGVudFR5cGVdKHRva2VuLnN0YXJ0KVxuICBjb25zdCBjaGlsZEV2ZW50cyA9IHRva2VuaXplci5ldmVudHNcbiAgLyoqIEB0eXBlIHtBcnJheTxbbnVtYmVyLCBudW1iZXJdPn0gKi9cbiAgY29uc3QganVtcHMgPSBbXVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIG51bWJlcj59ICovXG4gIGNvbnN0IGdhcHMgPSB7fVxuICAvKiogQHR5cGUge0FycmF5PENodW5rPn0gKi9cbiAgbGV0IHN0cmVhbVxuICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgcHJldmlvdXNcbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGN1cnJlbnQgPSB0b2tlblxuICBsZXQgYWRqdXN0ID0gMFxuICBsZXQgc3RhcnQgPSAwXG4gIGNvbnN0IGJyZWFrcyA9IFtzdGFydF1cblxuICAvLyBMb29wIGZvcndhcmQgdGhyb3VnaCB0aGUgbGlua2VkIHRva2VucyB0byBwYXNzIHRoZW0gaW4gb3JkZXIgdG8gdGhlXG4gIC8vIHN1YnRva2VuaXplci5cbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXZlbnQgZm9yIHRoaXMgdG9rZW4uXG4gICAgd2hpbGUgKGV2ZW50c1srK3N0YXJ0UG9zaXRpb25dWzFdICE9PSBjdXJyZW50KSB7XG4gICAgICAvLyBFbXB0eS5cbiAgICB9XG5cbiAgICBhc3NlcnQoXG4gICAgICAhcHJldmlvdXMgfHwgY3VycmVudC5wcmV2aW91cyA9PT0gcHJldmlvdXMsXG4gICAgICAnZXhwZWN0ZWQgcHJldmlvdXMgdG8gbWF0Y2gnXG4gICAgKVxuICAgIGFzc2VydCghcHJldmlvdXMgfHwgcHJldmlvdXMubmV4dCA9PT0gY3VycmVudCwgJ2V4cGVjdGVkIG5leHQgdG8gbWF0Y2gnKVxuXG4gICAgc3RhcnRQb3NpdGlvbnMucHVzaChzdGFydFBvc2l0aW9uKVxuXG4gICAgaWYgKCFjdXJyZW50Ll90b2tlbml6ZXIpIHtcbiAgICAgIHN0cmVhbSA9IGNvbnRleHQuc2xpY2VTdHJlYW0oY3VycmVudClcblxuICAgICAgaWYgKCFjdXJyZW50Lm5leHQpIHtcbiAgICAgICAgc3RyZWFtLnB1c2goY29kZXMuZW9mKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgdG9rZW5pemVyLmRlZmluZVNraXAoY3VycmVudC5zdGFydClcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7XG4gICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICB0b2tlbml6ZXIud3JpdGUoc3RyZWFtKVxuXG4gICAgICBpZiAoY3VycmVudC5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0pIHtcbiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVbnJhdmVsIHRoZSBuZXh0IHRva2VuLlxuICAgIHByZXZpb3VzID0gY3VycmVudFxuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRcbiAgfVxuXG4gIC8vIE5vdywgbG9vcCBiYWNrIHRocm91Z2ggYWxsIGV2ZW50cyAoYW5kIGxpbmtlZCB0b2tlbnMpLCB0byBmaWd1cmUgb3V0IHdoaWNoXG4gIC8vIHBhcnRzIGJlbG9uZyB3aGVyZS5cbiAgY3VycmVudCA9IHRva2VuXG5cbiAgd2hpbGUgKCsraW5kZXggPCBjaGlsZEV2ZW50cy5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgICAvLyBGaW5kIGEgdm9pZCB0b2tlbiB0aGF0IGluY2x1ZGVzIGEgYnJlYWsuXG4gICAgICBjaGlsZEV2ZW50c1tpbmRleF1bMF0gPT09ICdleGl0JyAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXggLSAxXVswXSA9PT0gJ2VudGVyJyAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IGNoaWxkRXZlbnRzW2luZGV4IC0gMV1bMV0udHlwZSAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXhdWzFdLnN0YXJ0LmxpbmUgIT09IGNoaWxkRXZlbnRzW2luZGV4XVsxXS5lbmQubGluZVxuICAgICkge1xuICAgICAgYXNzZXJ0KGN1cnJlbnQsICdleHBlY3RlZCBhIGN1cnJlbnQgdG9rZW4nKVxuICAgICAgc3RhcnQgPSBpbmRleCArIDFcbiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KVxuICAgICAgLy8gSGVscCBHQy5cbiAgICAgIGN1cnJlbnQuX3Rva2VuaXplciA9IHVuZGVmaW5lZFxuICAgICAgY3VycmVudC5wcmV2aW91cyA9IHVuZGVmaW5lZFxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHAgR0MuXG4gIHRva2VuaXplci5ldmVudHMgPSBbXVxuXG4gIC8vIElmIHRoZXJl4oCZcyBvbmUgbW9yZSB0b2tlbiAod2hpY2ggaXMgdGhlIGNhc2VzIGZvciBsaW5lcyB0aGF0IGVuZCBpbiBhblxuICAvLyBFT0YpLCB0aGF04oCZcyBwZXJmZWN0OiB0aGUgbGFzdCBwb2ludCB3ZSBmb3VuZCBzdGFydHMgaXQuXG4gIC8vIElmIHRoZXJlIGlzbuKAmXQgdGhlbiBtYWtlIHN1cmUgYW55IHJlbWFpbmluZyBjb250ZW50IGlzIGFkZGVkIHRvIGl0LlxuICBpZiAoY3VycmVudCkge1xuICAgIC8vIEhlbHAgR0MuXG4gICAgY3VycmVudC5fdG9rZW5pemVyID0gdW5kZWZpbmVkXG4gICAgY3VycmVudC5wcmV2aW91cyA9IHVuZGVmaW5lZFxuICAgIGFzc2VydCghY3VycmVudC5uZXh0LCAnZXhwZWN0ZWQgbm8gbmV4dCB0b2tlbicpXG4gIH0gZWxzZSB7XG4gICAgYnJlYWtzLnBvcCgpXG4gIH1cblxuICAvLyBOb3cgc3BsaWNlIHRoZSBldmVudHMgZnJvbSB0aGUgc3VidG9rZW5pemVyIGludG8gdGhlIGN1cnJlbnQgZXZlbnRzLFxuICAvLyBtb3ZpbmcgYmFjayB0byBmcm9udCBzbyB0aGF0IHNwbGljZSBpbmRpY2VzIGFyZW7igJl0IGFmZmVjdGVkLlxuICBpbmRleCA9IGJyZWFrcy5sZW5ndGhcblxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGNvbnN0IHNsaWNlID0gY2hpbGRFdmVudHMuc2xpY2UoYnJlYWtzW2luZGV4XSwgYnJlYWtzW2luZGV4ICsgMV0pXG4gICAgY29uc3Qgc3RhcnQgPSBzdGFydFBvc2l0aW9ucy5wb3AoKVxuICAgIGFzc2VydChzdGFydCAhPT0gdW5kZWZpbmVkLCAnZXhwZWN0ZWQgYSBzdGFydCBwb3NpdGlvbiB3aGVuIHNwbGljaW5nJylcbiAgICBqdW1wcy51bnNoaWZ0KFtzdGFydCwgc3RhcnQgKyBzbGljZS5sZW5ndGggLSAxXSlcbiAgICBzcGxpY2UoZXZlbnRzLCBzdGFydCwgMiwgc2xpY2UpXG4gIH1cblxuICBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBqdW1wcy5sZW5ndGgpIHtcbiAgICBnYXBzW2FkanVzdCArIGp1bXBzW2luZGV4XVswXV0gPSBhZGp1c3QgKyBqdW1wc1tpbmRleF1bMV1cbiAgICBhZGp1c3QgKz0ganVtcHNbaW5kZXhdWzFdIC0ganVtcHNbaW5kZXhdWzBdIC0gMVxuICB9XG5cbiAgcmV0dXJuIGdhcHNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-subtokenize/dev/index.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-symbol/codes.js": /*!************************************************************!*\ !*** ../../../node_modules/micromark-util-symbol/codes.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"codes\": () => (/* binding */ codes)\n/* harmony export */ });\n/**\n * Character codes.\n *\n * This module is compiled away!\n *\n * micromark works based on character codes.\n * This module contains constants for the ASCII block and the replacement\n * character.\n * A couple of them are handled in a special way, such as the line endings\n * (CR, LF, and CR+LF, commonly known as end-of-line: EOLs), the tab (horizontal\n * tab) and its expansion based on what column it’s at (virtual space),\n * and the end-of-file (eof) character.\n * As values are preprocessed before handling them, the actual characters LF,\n * CR, HT, and NUL (which is present as the replacement character), are\n * guaranteed to not exist.\n *\n * Unicode basic latin block.\n */\nconst codes = /** @type {const} */ ({\n carriageReturn: -5,\n lineFeed: -4,\n carriageReturnLineFeed: -3,\n horizontalTab: -2,\n virtualSpace: -1,\n eof: null,\n nul: 0,\n soh: 1,\n stx: 2,\n etx: 3,\n eot: 4,\n enq: 5,\n ack: 6,\n bel: 7,\n bs: 8,\n ht: 9, // `\\t`\n lf: 10, // `\\n`\n vt: 11, // `\\v`\n ff: 12, // `\\f`\n cr: 13, // `\\r`\n so: 14,\n si: 15,\n dle: 16,\n dc1: 17,\n dc2: 18,\n dc3: 19,\n dc4: 20,\n nak: 21,\n syn: 22,\n etb: 23,\n can: 24,\n em: 25,\n sub: 26,\n esc: 27,\n fs: 28,\n gs: 29,\n rs: 30,\n us: 31,\n space: 32,\n exclamationMark: 33, // `!`\n quotationMark: 34, // `\"`\n numberSign: 35, // `#`\n dollarSign: 36, // `$`\n percentSign: 37, // `%`\n ampersand: 38, // `&`\n apostrophe: 39, // `'`\n leftParenthesis: 40, // `(`\n rightParenthesis: 41, // `)`\n asterisk: 42, // `*`\n plusSign: 43, // `+`\n comma: 44, // `,`\n dash: 45, // `-`\n dot: 46, // `.`\n slash: 47, // `/`\n digit0: 48, // `0`\n digit1: 49, // `1`\n digit2: 50, // `2`\n digit3: 51, // `3`\n digit4: 52, // `4`\n digit5: 53, // `5`\n digit6: 54, // `6`\n digit7: 55, // `7`\n digit8: 56, // `8`\n digit9: 57, // `9`\n colon: 58, // `:`\n semicolon: 59, // `;`\n lessThan: 60, // `<`\n equalsTo: 61, // `=`\n greaterThan: 62, // `>`\n questionMark: 63, // `?`\n atSign: 64, // `@`\n uppercaseA: 65, // `A`\n uppercaseB: 66, // `B`\n uppercaseC: 67, // `C`\n uppercaseD: 68, // `D`\n uppercaseE: 69, // `E`\n uppercaseF: 70, // `F`\n uppercaseG: 71, // `G`\n uppercaseH: 72, // `H`\n uppercaseI: 73, // `I`\n uppercaseJ: 74, // `J`\n uppercaseK: 75, // `K`\n uppercaseL: 76, // `L`\n uppercaseM: 77, // `M`\n uppercaseN: 78, // `N`\n uppercaseO: 79, // `O`\n uppercaseP: 80, // `P`\n uppercaseQ: 81, // `Q`\n uppercaseR: 82, // `R`\n uppercaseS: 83, // `S`\n uppercaseT: 84, // `T`\n uppercaseU: 85, // `U`\n uppercaseV: 86, // `V`\n uppercaseW: 87, // `W`\n uppercaseX: 88, // `X`\n uppercaseY: 89, // `Y`\n uppercaseZ: 90, // `Z`\n leftSquareBracket: 91, // `[`\n backslash: 92, // `\\`\n rightSquareBracket: 93, // `]`\n caret: 94, // `^`\n underscore: 95, // `_`\n graveAccent: 96, // `` ` ``\n lowercaseA: 97, // `a`\n lowercaseB: 98, // `b`\n lowercaseC: 99, // `c`\n lowercaseD: 100, // `d`\n lowercaseE: 101, // `e`\n lowercaseF: 102, // `f`\n lowercaseG: 103, // `g`\n lowercaseH: 104, // `h`\n lowercaseI: 105, // `i`\n lowercaseJ: 106, // `j`\n lowercaseK: 107, // `k`\n lowercaseL: 108, // `l`\n lowercaseM: 109, // `m`\n lowercaseN: 110, // `n`\n lowercaseO: 111, // `o`\n lowercaseP: 112, // `p`\n lowercaseQ: 113, // `q`\n lowercaseR: 114, // `r`\n lowercaseS: 115, // `s`\n lowercaseT: 116, // `t`\n lowercaseU: 117, // `u`\n lowercaseV: 118, // `v`\n lowercaseW: 119, // `w`\n lowercaseX: 120, // `x`\n lowercaseY: 121, // `y`\n lowercaseZ: 122, // `z`\n leftCurlyBrace: 123, // `{`\n verticalBar: 124, // `|`\n rightCurlyBrace: 125, // `}`\n tilde: 126, // `~`\n del: 127,\n // Unicode Specials block.\n byteOrderMarker: 65279,\n // Unicode Specials block.\n replacementCharacter: 65533 // `�`\n})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08seUJBQXlCLE9BQU87QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzPzY3YWEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGFyYWN0ZXIgY29kZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgY29tcGlsZWQgYXdheSFcbiAqXG4gKiBtaWNyb21hcmsgd29ya3MgYmFzZWQgb24gY2hhcmFjdGVyIGNvZGVzLlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgY29uc3RhbnRzIGZvciB0aGUgQVNDSUkgYmxvY2sgYW5kIHRoZSByZXBsYWNlbWVudFxuICogY2hhcmFjdGVyLlxuICogQSBjb3VwbGUgb2YgdGhlbSBhcmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5LCBzdWNoIGFzIHRoZSBsaW5lIGVuZGluZ3NcbiAqIChDUiwgTEYsIGFuZCBDUitMRiwgY29tbW9ubHkga25vd24gYXMgZW5kLW9mLWxpbmU6IEVPTHMpLCB0aGUgdGFiIChob3Jpem9udGFsXG4gKiB0YWIpIGFuZCBpdHMgZXhwYW5zaW9uIGJhc2VkIG9uIHdoYXQgY29sdW1uIGl04oCZcyBhdCAodmlydHVhbCBzcGFjZSksXG4gKiBhbmQgdGhlIGVuZC1vZi1maWxlIChlb2YpIGNoYXJhY3Rlci5cbiAqIEFzIHZhbHVlcyBhcmUgcHJlcHJvY2Vzc2VkIGJlZm9yZSBoYW5kbGluZyB0aGVtLCB0aGUgYWN0dWFsIGNoYXJhY3RlcnMgTEYsXG4gKiBDUiwgSFQsIGFuZCBOVUwgKHdoaWNoIGlzIHByZXNlbnQgYXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3RlciksIGFyZVxuICogZ3VhcmFudGVlZCB0byBub3QgZXhpc3QuXG4gKlxuICogVW5pY29kZSBiYXNpYyBsYXRpbiBibG9jay5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvZGVzID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKHtcbiAgY2FycmlhZ2VSZXR1cm46IC01LFxuICBsaW5lRmVlZDogLTQsXG4gIGNhcnJpYWdlUmV0dXJuTGluZUZlZWQ6IC0zLFxuICBob3Jpem9udGFsVGFiOiAtMixcbiAgdmlydHVhbFNwYWNlOiAtMSxcbiAgZW9mOiBudWxsLFxuICBudWw6IDAsXG4gIHNvaDogMSxcbiAgc3R4OiAyLFxuICBldHg6IDMsXG4gIGVvdDogNCxcbiAgZW5xOiA1LFxuICBhY2s6IDYsXG4gIGJlbDogNyxcbiAgYnM6IDgsXG4gIGh0OiA5LCAvLyBgXFx0YFxuICBsZjogMTAsIC8vIGBcXG5gXG4gIHZ0OiAxMSwgLy8gYFxcdmBcbiAgZmY6IDEyLCAvLyBgXFxmYFxuICBjcjogMTMsIC8vIGBcXHJgXG4gIHNvOiAxNCxcbiAgc2k6IDE1LFxuICBkbGU6IDE2LFxuICBkYzE6IDE3LFxuICBkYzI6IDE4LFxuICBkYzM6IDE5LFxuICBkYzQ6IDIwLFxuICBuYWs6IDIxLFxuICBzeW46IDIyLFxuICBldGI6IDIzLFxuICBjYW46IDI0LFxuICBlbTogMjUsXG4gIHN1YjogMjYsXG4gIGVzYzogMjcsXG4gIGZzOiAyOCxcbiAgZ3M6IDI5LFxuICByczogMzAsXG4gIHVzOiAzMSxcbiAgc3BhY2U6IDMyLFxuICBleGNsYW1hdGlvbk1hcms6IDMzLCAvLyBgIWBcbiAgcXVvdGF0aW9uTWFyazogMzQsIC8vIGBcImBcbiAgbnVtYmVyU2lnbjogMzUsIC8vIGAjYFxuICBkb2xsYXJTaWduOiAzNiwgLy8gYCRgXG4gIHBlcmNlbnRTaWduOiAzNywgLy8gYCVgXG4gIGFtcGVyc2FuZDogMzgsIC8vIGAmYFxuICBhcG9zdHJvcGhlOiAzOSwgLy8gYCdgXG4gIGxlZnRQYXJlbnRoZXNpczogNDAsIC8vIGAoYFxuICByaWdodFBhcmVudGhlc2lzOiA0MSwgLy8gYClgXG4gIGFzdGVyaXNrOiA0MiwgLy8gYCpgXG4gIHBsdXNTaWduOiA0MywgLy8gYCtgXG4gIGNvbW1hOiA0NCwgLy8gYCxgXG4gIGRhc2g6IDQ1LCAvLyBgLWBcbiAgZG90OiA0NiwgLy8gYC5gXG4gIHNsYXNoOiA0NywgLy8gYC9gXG4gIGRpZ2l0MDogNDgsIC8vIGAwYFxuICBkaWdpdDE6IDQ5LCAvLyBgMWBcbiAgZGlnaXQyOiA1MCwgLy8gYDJgXG4gIGRpZ2l0MzogNTEsIC8vIGAzYFxuICBkaWdpdDQ6IDUyLCAvLyBgNGBcbiAgZGlnaXQ1OiA1MywgLy8gYDVgXG4gIGRpZ2l0NjogNTQsIC8vIGA2YFxuICBkaWdpdDc6IDU1LCAvLyBgN2BcbiAgZGlnaXQ4OiA1NiwgLy8gYDhgXG4gIGRpZ2l0OTogNTcsIC8vIGA5YFxuICBjb2xvbjogNTgsIC8vIGA6YFxuICBzZW1pY29sb246IDU5LCAvLyBgO2BcbiAgbGVzc1RoYW46IDYwLCAvLyBgPGBcbiAgZXF1YWxzVG86IDYxLCAvLyBgPWBcbiAgZ3JlYXRlclRoYW46IDYyLCAvLyBgPmBcbiAgcXVlc3Rpb25NYXJrOiA2MywgLy8gYD9gXG4gIGF0U2lnbjogNjQsIC8vIGBAYFxuICB1cHBlcmNhc2VBOiA2NSwgLy8gYEFgXG4gIHVwcGVyY2FzZUI6IDY2LCAvLyBgQmBcbiAgdXBwZXJjYXNlQzogNjcsIC8vIGBDYFxuICB1cHBlcmNhc2VEOiA2OCwgLy8gYERgXG4gIHVwcGVyY2FzZUU6IDY5LCAvLyBgRWBcbiAgdXBwZXJjYXNlRjogNzAsIC8vIGBGYFxuICB1cHBlcmNhc2VHOiA3MSwgLy8gYEdgXG4gIHVwcGVyY2FzZUg6IDcyLCAvLyBgSGBcbiAgdXBwZXJjYXNlSTogNzMsIC8vIGBJYFxuICB1cHBlcmNhc2VKOiA3NCwgLy8gYEpgXG4gIHVwcGVyY2FzZUs6IDc1LCAvLyBgS2BcbiAgdXBwZXJjYXNlTDogNzYsIC8vIGBMYFxuICB1cHBlcmNhc2VNOiA3NywgLy8gYE1gXG4gIHVwcGVyY2FzZU46IDc4LCAvLyBgTmBcbiAgdXBwZXJjYXNlTzogNzksIC8vIGBPYFxuICB1cHBlcmNhc2VQOiA4MCwgLy8gYFBgXG4gIHVwcGVyY2FzZVE6IDgxLCAvLyBgUWBcbiAgdXBwZXJjYXNlUjogODIsIC8vIGBSYFxuICB1cHBlcmNhc2VTOiA4MywgLy8gYFNgXG4gIHVwcGVyY2FzZVQ6IDg0LCAvLyBgVGBcbiAgdXBwZXJjYXNlVTogODUsIC8vIGBVYFxuICB1cHBlcmNhc2VWOiA4NiwgLy8gYFZgXG4gIHVwcGVyY2FzZVc6IDg3LCAvLyBgV2BcbiAgdXBwZXJjYXNlWDogODgsIC8vIGBYYFxuICB1cHBlcmNhc2VZOiA4OSwgLy8gYFlgXG4gIHVwcGVyY2FzZVo6IDkwLCAvLyBgWmBcbiAgbGVmdFNxdWFyZUJyYWNrZXQ6IDkxLCAvLyBgW2BcbiAgYmFja3NsYXNoOiA5MiwgLy8gYFxcYFxuICByaWdodFNxdWFyZUJyYWNrZXQ6IDkzLCAvLyBgXWBcbiAgY2FyZXQ6IDk0LCAvLyBgXmBcbiAgdW5kZXJzY29yZTogOTUsIC8vIGBfYFxuICBncmF2ZUFjY2VudDogOTYsIC8vIGBgIGAgYGBcbiAgbG93ZXJjYXNlQTogOTcsIC8vIGBhYFxuICBsb3dlcmNhc2VCOiA5OCwgLy8gYGJgXG4gIGxvd2VyY2FzZUM6IDk5LCAvLyBgY2BcbiAgbG93ZXJjYXNlRDogMTAwLCAvLyBgZGBcbiAgbG93ZXJjYXNlRTogMTAxLCAvLyBgZWBcbiAgbG93ZXJjYXNlRjogMTAyLCAvLyBgZmBcbiAgbG93ZXJjYXNlRzogMTAzLCAvLyBgZ2BcbiAgbG93ZXJjYXNlSDogMTA0LCAvLyBgaGBcbiAgbG93ZXJjYXNlSTogMTA1LCAvLyBgaWBcbiAgbG93ZXJjYXNlSjogMTA2LCAvLyBgamBcbiAgbG93ZXJjYXNlSzogMTA3LCAvLyBga2BcbiAgbG93ZXJjYXNlTDogMTA4LCAvLyBgbGBcbiAgbG93ZXJjYXNlTTogMTA5LCAvLyBgbWBcbiAgbG93ZXJjYXNlTjogMTEwLCAvLyBgbmBcbiAgbG93ZXJjYXNlTzogMTExLCAvLyBgb2BcbiAgbG93ZXJjYXNlUDogMTEyLCAvLyBgcGBcbiAgbG93ZXJjYXNlUTogMTEzLCAvLyBgcWBcbiAgbG93ZXJjYXNlUjogMTE0LCAvLyBgcmBcbiAgbG93ZXJjYXNlUzogMTE1LCAvLyBgc2BcbiAgbG93ZXJjYXNlVDogMTE2LCAvLyBgdGBcbiAgbG93ZXJjYXNlVTogMTE3LCAvLyBgdWBcbiAgbG93ZXJjYXNlVjogMTE4LCAvLyBgdmBcbiAgbG93ZXJjYXNlVzogMTE5LCAvLyBgd2BcbiAgbG93ZXJjYXNlWDogMTIwLCAvLyBgeGBcbiAgbG93ZXJjYXNlWTogMTIxLCAvLyBgeWBcbiAgbG93ZXJjYXNlWjogMTIyLCAvLyBgemBcbiAgbGVmdEN1cmx5QnJhY2U6IDEyMywgLy8gYHtgXG4gIHZlcnRpY2FsQmFyOiAxMjQsIC8vIGB8YFxuICByaWdodEN1cmx5QnJhY2U6IDEyNSwgLy8gYH1gXG4gIHRpbGRlOiAxMjYsIC8vIGB+YFxuICBkZWw6IDEyNyxcbiAgLy8gVW5pY29kZSBTcGVjaWFscyBibG9jay5cbiAgYnl0ZU9yZGVyTWFya2VyOiA2NTI3OSxcbiAgLy8gVW5pY29kZSBTcGVjaWFscyBibG9jay5cbiAgcmVwbGFjZW1lbnRDaGFyYWN0ZXI6IDY1NTMzIC8vIGDvv71gXG59KVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-symbol/codes.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-symbol/constants.js": /*!****************************************************************!*\ !*** ../../../node_modules/micromark-util-symbol/constants.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"constants\": () => (/* binding */ constants)\n/* harmony export */ });\n/**\n * This module is compiled away!\n *\n * Parsing markdown comes with a couple of constants, such as minimum or maximum\n * sizes of certain sequences.\n * Additionally, there are a couple symbols used inside micromark.\n * These are all defined here, but compiled away by scripts.\n */\nconst constants = /** @type {const} */ ({\n attentionSideBefore: 1, // Symbol to mark an attention sequence as before content: `*a`\n attentionSideAfter: 2, // Symbol to mark an attention sequence as after content: `a*`\n atxHeadingOpeningFenceSizeMax: 6, // 6 number signs is fine, 7 isn’t.\n autolinkDomainSizeMax: 63, // 63 characters is fine, 64 is too many.\n autolinkSchemeSizeMax: 32, // 32 characters is fine, 33 is too many.\n cdataOpeningString: 'CDATA[', // And preceded by ``\n htmlComment: 2, // Symbol for ``\n htmlInstruction: 3, // Symbol for ``\n htmlDeclaration: 4, // Symbol for ``\n htmlCdata: 5, // Symbol for ``\n htmlBasic: 6, // Symbol for ``\n htmlRawSizeMax: 8, // Length of `textarea`.\n linkResourceDestinationBalanceMax: 32, // See: , \n linkReferenceSizeMax: 999, // See: \n listItemValueSizeMax: 10, // See: \n numericBaseDecimal: 10,\n numericBaseHexadecimal: 0x10,\n tabSize: 4, // Tabs have a hard-coded size of 4, per CommonMark.\n thematicBreakMarkerCountMin: 3, // At least 3 asterisks, dashes, or underscores are needed.\n v8MaxSafeChunkSize: 10000 // V8 (and potentially others) have problems injecting giant arrays into other arrays, hence we operate in chunks.\n})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyw2QkFBNkIsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELHlEQUF5RDtBQUN6RCwyRUFBMkU7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanM/NDMwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbW9kdWxlIGlzIGNvbXBpbGVkIGF3YXkhXG4gKlxuICogUGFyc2luZyBtYXJrZG93biBjb21lcyB3aXRoIGEgY291cGxlIG9mIGNvbnN0YW50cywgc3VjaCBhcyBtaW5pbXVtIG9yIG1heGltdW1cbiAqIHNpemVzIG9mIGNlcnRhaW4gc2VxdWVuY2VzLlxuICogQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYSBjb3VwbGUgc3ltYm9scyB1c2VkIGluc2lkZSBtaWNyb21hcmsuXG4gKiBUaGVzZSBhcmUgYWxsIGRlZmluZWQgaGVyZSwgYnV0IGNvbXBpbGVkIGF3YXkgYnkgc2NyaXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnN0YW50cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovICh7XG4gIGF0dGVudGlvblNpZGVCZWZvcmU6IDEsIC8vIFN5bWJvbCB0byBtYXJrIGFuIGF0dGVudGlvbiBzZXF1ZW5jZSBhcyBiZWZvcmUgY29udGVudDogYCphYFxuICBhdHRlbnRpb25TaWRlQWZ0ZXI6IDIsIC8vIFN5bWJvbCB0byBtYXJrIGFuIGF0dGVudGlvbiBzZXF1ZW5jZSBhcyBhZnRlciBjb250ZW50OiBgYSpgXG4gIGF0eEhlYWRpbmdPcGVuaW5nRmVuY2VTaXplTWF4OiA2LCAvLyA2IG51bWJlciBzaWducyBpcyBmaW5lLCA3IGlzbuKAmXQuXG4gIGF1dG9saW5rRG9tYWluU2l6ZU1heDogNjMsIC8vIDYzIGNoYXJhY3RlcnMgaXMgZmluZSwgNjQgaXMgdG9vIG1hbnkuXG4gIGF1dG9saW5rU2NoZW1lU2l6ZU1heDogMzIsIC8vIDMyIGNoYXJhY3RlcnMgaXMgZmluZSwgMzMgaXMgdG9vIG1hbnkuXG4gIGNkYXRhT3BlbmluZ1N0cmluZzogJ0NEQVRBWycsIC8vIEFuZCBwcmVjZWRlZCBieSBgPCFbYC5cbiAgY2hhcmFjdGVyR3JvdXBXaGl0ZXNwYWNlOiAxLCAvLyBTeW1ib2wgdXNlZCB0byBpbmRpY2F0ZSBhIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlXG4gIGNoYXJhY3Rlckdyb3VwUHVuY3R1YXRpb246IDIsIC8vIFN5bWJvbCB1c2VkIHRvIGluZGljYXRlIGEgY2hhcmFjdGVyIGlzIHB1bmN0dWF0aW9uXG4gIGNoYXJhY3RlclJlZmVyZW5jZURlY2ltYWxTaXplTWF4OiA3LCAvLyBgJiM5OTk5OTk5O2AuXG4gIGNoYXJhY3RlclJlZmVyZW5jZUhleGFkZWNpbWFsU2l6ZU1heDogNiwgLy8gYCYjeGZmOTk5OTtgLlxuICBjaGFyYWN0ZXJSZWZlcmVuY2VOYW1lZFNpemVNYXg6IDMxLCAvLyBgJkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7YC5cbiAgY29kZUZlbmNlZFNlcXVlbmNlU2l6ZU1pbjogMywgLy8gQXQgbGVhc3QgMyB0aWNrcyBvciB0aWxkZXMgYXJlIG5lZWRlZC5cbiAgY29udGVudFR5cGVEb2N1bWVudDogJ2RvY3VtZW50JyxcbiAgY29udGVudFR5cGVGbG93OiAnZmxvdycsXG4gIGNvbnRlbnRUeXBlQ29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50VHlwZVN0cmluZzogJ3N0cmluZycsXG4gIGNvbnRlbnRUeXBlVGV4dDogJ3RleHQnLFxuICBoYXJkQnJlYWtQcmVmaXhTaXplTWluOiAyLCAvLyBBdCBsZWFzdCAyIHRyYWlsaW5nIHNwYWNlcyBhcmUgbmVlZGVkLlxuICBodG1sUmF3OiAxLCAvLyBTeW1ib2wgZm9yIGA8c2NyaXB0PmBcbiAgaHRtbENvbW1lbnQ6IDIsIC8vIFN5bWJvbCBmb3IgYDwhLS0tLT5gXG4gIGh0bWxJbnN0cnVjdGlvbjogMywgLy8gU3ltYm9sIGZvciBgPD9waHA/PmBcbiAgaHRtbERlY2xhcmF0aW9uOiA0LCAvLyBTeW1ib2wgZm9yIGA8IWRvY3R5cGU+YFxuICBodG1sQ2RhdGE6IDUsIC8vIFN5bWJvbCBmb3IgYDwhW0NEQVRBW11dPmBcbiAgaHRtbEJhc2ljOiA2LCAvLyBTeW1ib2wgZm9yIGA8ZGl2YFxuICBodG1sQ29tcGxldGU6IDcsIC8vIFN5bWJvbCBmb3IgYDx4PmBcbiAgaHRtbFJhd1NpemVNYXg6IDgsIC8vIExlbmd0aCBvZiBgdGV4dGFyZWFgLlxuICBsaW5rUmVzb3VyY2VEZXN0aW5hdGlvbkJhbGFuY2VNYXg6IDMyLCAvLyBTZWU6IDxodHRwczovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4zMC8jbGluay1kZXN0aW5hdGlvbj4sIDxodHRwczovL2dpdGh1Yi5jb20vcmVtYXJranMvcmVhY3QtbWFya2Rvd24vaXNzdWVzLzY1OCNpc3N1ZWNvbW1lbnQtOTg0MzQ1NTc3PlxuICBsaW5rUmVmZXJlbmNlU2l6ZU1heDogOTk5LCAvLyBTZWU6IDxodHRwczovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4zMC8jbGluay1sYWJlbD5cbiAgbGlzdEl0ZW1WYWx1ZVNpemVNYXg6IDEwLCAvLyBTZWU6IDxodHRwczovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4zMC8jb3JkZXJlZC1saXN0LW1hcmtlcj5cbiAgbnVtZXJpY0Jhc2VEZWNpbWFsOiAxMCxcbiAgbnVtZXJpY0Jhc2VIZXhhZGVjaW1hbDogMHgxMCxcbiAgdGFiU2l6ZTogNCwgLy8gVGFicyBoYXZlIGEgaGFyZC1jb2RlZCBzaXplIG9mIDQsIHBlciBDb21tb25NYXJrLlxuICB0aGVtYXRpY0JyZWFrTWFya2VyQ291bnRNaW46IDMsIC8vIEF0IGxlYXN0IDMgYXN0ZXJpc2tzLCBkYXNoZXMsIG9yIHVuZGVyc2NvcmVzIGFyZSBuZWVkZWQuXG4gIHY4TWF4U2FmZUNodW5rU2l6ZTogMTAwMDAgLy8gVjggKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMpIGhhdmUgcHJvYmxlbXMgaW5qZWN0aW5nIGdpYW50IGFycmF5cyBpbnRvIG90aGVyIGFycmF5cywgaGVuY2Ugd2Ugb3BlcmF0ZSBpbiBjaHVua3MuXG59KVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-symbol/constants.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-symbol/types.js": /*!************************************************************!*\ !*** ../../../node_modules/micromark-util-symbol/types.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"types\": () => (/* binding */ types)\n/* harmony export */ });\n/**\n * This module is compiled away!\n *\n * Here is the list of all types of tokens exposed by micromark, with a short\n * explanation of what they include and where they are found.\n * In picking names, generally, the rule is to be as explicit as possible\n * instead of reusing names.\n * For example, there is a `definitionDestination` and a `resourceDestination`,\n * instead of one shared name.\n */\n\n// Note: when changing the next record, you must also change `TokenTypeMap`\n// in `micromark-util-types/index.d.ts`.\nconst types = /** @type {const} */ ({\n // Generic type for data, such as in a title, a destination, etc.\n data: 'data',\n\n // Generic type for syntactic whitespace (tabs, virtual spaces, spaces).\n // Such as, between a fenced code fence and an info string.\n whitespace: 'whitespace',\n\n // Generic type for line endings (line feed, carriage return, carriage return +\n // line feed).\n lineEnding: 'lineEnding',\n\n // A line ending, but ending a blank line.\n lineEndingBlank: 'lineEndingBlank',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the start of a\n // line.\n linePrefix: 'linePrefix',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the end of a\n // line.\n lineSuffix: 'lineSuffix',\n\n // Whole ATX heading:\n //\n // ```markdown\n // #\n // ## Alpha\n // ### Bravo ###\n // ```\n //\n // Includes `atxHeadingSequence`, `whitespace`, `atxHeadingText`.\n atxHeading: 'atxHeading',\n\n // Sequence of number signs in an ATX heading (`###`).\n atxHeadingSequence: 'atxHeadingSequence',\n\n // Content in an ATX heading (`alpha`).\n // Includes text.\n atxHeadingText: 'atxHeadingText',\n\n // Whole autolink (`` or ``)\n // Includes `autolinkMarker` and `autolinkProtocol` or `autolinkEmail`.\n autolink: 'autolink',\n\n // Email autolink w/o markers (`admin@example.com`)\n autolinkEmail: 'autolinkEmail',\n\n // Marker around an `autolinkProtocol` or `autolinkEmail` (`<` or `>`).\n autolinkMarker: 'autolinkMarker',\n\n // Protocol autolink w/o markers (`https://example.com`)\n autolinkProtocol: 'autolinkProtocol',\n\n // A whole character escape (`\\-`).\n // Includes `escapeMarker` and `characterEscapeValue`.\n characterEscape: 'characterEscape',\n\n // The escaped character (`-`).\n characterEscapeValue: 'characterEscapeValue',\n\n // A whole character reference (`&`, `≠`, or `𝌆`).\n // Includes `characterReferenceMarker`, an optional\n // `characterReferenceMarkerNumeric`, in which case an optional\n // `characterReferenceMarkerHexadecimal`, and a `characterReferenceValue`.\n characterReference: 'characterReference',\n\n // The start or end marker (`&` or `;`).\n characterReferenceMarker: 'characterReferenceMarker',\n\n // Mark reference as numeric (`#`).\n characterReferenceMarkerNumeric: 'characterReferenceMarkerNumeric',\n\n // Mark reference as numeric (`x` or `X`).\n characterReferenceMarkerHexadecimal: 'characterReferenceMarkerHexadecimal',\n\n // Value of character reference w/o markers (`amp`, `8800`, or `1D306`).\n characterReferenceValue: 'characterReferenceValue',\n\n // Whole fenced code:\n //\n // ````markdown\n // ```js\n // alert(1)\n // ```\n // ````\n codeFenced: 'codeFenced',\n\n // A fenced code fence, including whitespace, sequence, info, and meta\n // (` ```js `).\n codeFencedFence: 'codeFencedFence',\n\n // Sequence of grave accent or tilde characters (` ``` `) in a fence.\n codeFencedFenceSequence: 'codeFencedFenceSequence',\n\n // Info word (`js`) in a fence.\n // Includes string.\n codeFencedFenceInfo: 'codeFencedFenceInfo',\n\n // Meta words (`highlight=\"1\"`) in a fence.\n // Includes string.\n codeFencedFenceMeta: 'codeFencedFenceMeta',\n\n // A line of code.\n codeFlowValue: 'codeFlowValue',\n\n // Whole indented code:\n //\n // ```markdown\n // alert(1)\n // ```\n //\n // Includes `lineEnding`, `linePrefix`, and `codeFlowValue`.\n codeIndented: 'codeIndented',\n\n // A text code (``` `alpha` ```).\n // Includes `codeTextSequence`, `codeTextData`, `lineEnding`, and can include\n // `codeTextPadding`.\n codeText: 'codeText',\n\n codeTextData: 'codeTextData',\n\n // A space or line ending right after or before a tick.\n codeTextPadding: 'codeTextPadding',\n\n // A text code fence (` `` `).\n codeTextSequence: 'codeTextSequence',\n\n // Whole content:\n //\n // ```markdown\n // [a]: b\n // c\n // =\n // d\n // ```\n //\n // Includes `paragraph` and `definition`.\n content: 'content',\n // Whole definition:\n //\n // ```markdown\n // [micromark]: https://github.com/micromark/micromark\n // ```\n //\n // Includes `definitionLabel`, `definitionMarker`, `whitespace`,\n // `definitionDestination`, and optionally `lineEnding` and `definitionTitle`.\n definition: 'definition',\n\n // Destination of a definition (`https://github.com/micromark/micromark` or\n // ``).\n // Includes `definitionDestinationLiteral` or `definitionDestinationRaw`.\n definitionDestination: 'definitionDestination',\n\n // Enclosed destination of a definition\n // (``).\n // Includes `definitionDestinationLiteralMarker` and optionally\n // `definitionDestinationString`.\n definitionDestinationLiteral: 'definitionDestinationLiteral',\n\n // Markers of an enclosed definition destination (`<` or `>`).\n definitionDestinationLiteralMarker: 'definitionDestinationLiteralMarker',\n\n // Unenclosed destination of a definition\n // (`https://github.com/micromark/micromark`).\n // Includes `definitionDestinationString`.\n definitionDestinationRaw: 'definitionDestinationRaw',\n\n // Text in an destination (`https://github.com/micromark/micromark`).\n // Includes string.\n definitionDestinationString: 'definitionDestinationString',\n\n // Label of a definition (`[micromark]`).\n // Includes `definitionLabelMarker` and `definitionLabelString`.\n definitionLabel: 'definitionLabel',\n\n // Markers of a definition label (`[` or `]`).\n definitionLabelMarker: 'definitionLabelMarker',\n\n // Value of a definition label (`micromark`).\n // Includes string.\n definitionLabelString: 'definitionLabelString',\n\n // Marker between a label and a destination (`:`).\n definitionMarker: 'definitionMarker',\n\n // Title of a definition (`\"x\"`, `'y'`, or `(z)`).\n // Includes `definitionTitleMarker` and optionally `definitionTitleString`.\n definitionTitle: 'definitionTitle',\n\n // Marker around a title of a definition (`\"`, `'`, `(`, or `)`).\n definitionTitleMarker: 'definitionTitleMarker',\n\n // Data without markers in a title (`z`).\n // Includes string.\n definitionTitleString: 'definitionTitleString',\n\n // Emphasis (`*alpha*`).\n // Includes `emphasisSequence` and `emphasisText`.\n emphasis: 'emphasis',\n\n // Sequence of emphasis markers (`*` or `_`).\n emphasisSequence: 'emphasisSequence',\n\n // Emphasis text (`alpha`).\n // Includes text.\n emphasisText: 'emphasisText',\n\n // The character escape marker (`\\`).\n escapeMarker: 'escapeMarker',\n\n // A hard break created with a backslash (`\\\\n`).\n // Note: does not include the line ending.\n hardBreakEscape: 'hardBreakEscape',\n\n // A hard break created with trailing spaces (` \\n`).\n // Does not include the line ending.\n hardBreakTrailing: 'hardBreakTrailing',\n\n // Flow HTML:\n //\n // ```markdown\n // b`).\n // Includes `lineEnding`, `htmlTextData`.\n htmlText: 'htmlText',\n\n htmlTextData: 'htmlTextData',\n\n // Whole image (`![alpha](bravo)`, `![alpha][bravo]`, `![alpha][]`, or\n // `![alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n image: 'image',\n\n // Whole link label (`[*alpha*]`).\n // Includes `labelLink` or `labelImage`, `labelText`, and `labelEnd`.\n label: 'label',\n\n // Text in an label (`*alpha*`).\n // Includes text.\n labelText: 'labelText',\n\n // Start a link label (`[`).\n // Includes a `labelMarker`.\n labelLink: 'labelLink',\n\n // Start an image label (`![`).\n // Includes `labelImageMarker` and `labelMarker`.\n labelImage: 'labelImage',\n\n // Marker of a label (`[` or `]`).\n labelMarker: 'labelMarker',\n\n // Marker to start an image (`!`).\n labelImageMarker: 'labelImageMarker',\n\n // End a label (`]`).\n // Includes `labelMarker`.\n labelEnd: 'labelEnd',\n\n // Whole link (`[alpha](bravo)`, `[alpha][bravo]`, `[alpha][]`, or `[alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n link: 'link',\n\n // Whole paragraph:\n //\n // ```markdown\n // alpha\n // bravo.\n // ```\n //\n // Includes text.\n paragraph: 'paragraph',\n\n // A reference (`[alpha]` or `[]`).\n // Includes `referenceMarker` and an optional `referenceString`.\n reference: 'reference',\n\n // A reference marker (`[` or `]`).\n referenceMarker: 'referenceMarker',\n\n // Reference text (`alpha`).\n // Includes string.\n referenceString: 'referenceString',\n\n // A resource (`(https://example.com \"alpha\")`).\n // Includes `resourceMarker`, an optional `resourceDestination` with an optional\n // `whitespace` and `resourceTitle`.\n resource: 'resource',\n\n // A resource destination (`https://example.com`).\n // Includes `resourceDestinationLiteral` or `resourceDestinationRaw`.\n resourceDestination: 'resourceDestination',\n\n // A literal resource destination (``).\n // Includes `resourceDestinationLiteralMarker` and optionally\n // `resourceDestinationString`.\n resourceDestinationLiteral: 'resourceDestinationLiteral',\n\n // A resource destination marker (`<` or `>`).\n resourceDestinationLiteralMarker: 'resourceDestinationLiteralMarker',\n\n // A raw resource destination (`https://example.com`).\n // Includes `resourceDestinationString`.\n resourceDestinationRaw: 'resourceDestinationRaw',\n\n // Resource destination text (`https://example.com`).\n // Includes string.\n resourceDestinationString: 'resourceDestinationString',\n\n // A resource marker (`(` or `)`).\n resourceMarker: 'resourceMarker',\n\n // A resource title (`\"alpha\"`, `'alpha'`, or `(alpha)`).\n // Includes `resourceTitleMarker` and optionally `resourceTitleString`.\n resourceTitle: 'resourceTitle',\n\n // A resource title marker (`\"`, `'`, `(`, or `)`).\n resourceTitleMarker: 'resourceTitleMarker',\n\n // Resource destination title (`alpha`).\n // Includes string.\n resourceTitleString: 'resourceTitleString',\n\n // Whole setext heading:\n //\n // ```markdown\n // alpha\n // bravo\n // =====\n // ```\n //\n // Includes `setextHeadingText`, `lineEnding`, `linePrefix`, and\n // `setextHeadingLine`.\n setextHeading: 'setextHeading',\n\n // Content in a setext heading (`alpha\\nbravo`).\n // Includes text.\n setextHeadingText: 'setextHeadingText',\n\n // Underline in a setext heading, including whitespace suffix (`==`).\n // Includes `setextHeadingLineSequence`.\n setextHeadingLine: 'setextHeadingLine',\n\n // Sequence of equals or dash characters in underline in a setext heading (`-`).\n setextHeadingLineSequence: 'setextHeadingLineSequence',\n\n // Strong (`**alpha**`).\n // Includes `strongSequence` and `strongText`.\n strong: 'strong',\n\n // Sequence of strong markers (`**` or `__`).\n strongSequence: 'strongSequence',\n\n // Strong text (`alpha`).\n // Includes text.\n strongText: 'strongText',\n\n // Whole thematic break:\n //\n // ```markdown\n // * * *\n // ```\n //\n // Includes `thematicBreakSequence` and `whitespace`.\n thematicBreak: 'thematicBreak',\n\n // A sequence of one or more thematic break markers (`***`).\n thematicBreakSequence: 'thematicBreakSequence',\n\n // Whole block quote:\n //\n // ```markdown\n // > a\n // >\n // > b\n // ```\n //\n // Includes `blockQuotePrefix` and flow.\n blockQuote: 'blockQuote',\n // The `>` or `> ` of a block quote.\n blockQuotePrefix: 'blockQuotePrefix',\n // The `>` of a block quote prefix.\n blockQuoteMarker: 'blockQuoteMarker',\n // The optional ` ` of a block quote prefix.\n blockQuotePrefixWhitespace: 'blockQuotePrefixWhitespace',\n\n // Whole unordered list:\n //\n // ```markdown\n // - a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listOrdered: 'listOrdered',\n\n // Whole ordered list:\n //\n // ```markdown\n // 1. a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listUnordered: 'listUnordered',\n\n // The indent of further list item lines.\n listItemIndent: 'listItemIndent',\n\n // A marker, as in, `*`, `+`, `-`, `.`, or `)`.\n listItemMarker: 'listItemMarker',\n\n // The thing that starts a list item, such as `1. `.\n // Includes `listItemValue` if ordered, `listItemMarker`, and\n // `listItemPrefixWhitespace` (unless followed by a line ending).\n listItemPrefix: 'listItemPrefix',\n\n // The whitespace after a marker.\n listItemPrefixWhitespace: 'listItemPrefixWhitespace',\n\n // The numerical value of an ordered item.\n listItemValue: 'listItemValue',\n\n // Internal types used for subtokenizers, compiled away\n chunkDocument: 'chunkDocument',\n chunkContent: 'chunkContent',\n chunkFlow: 'chunkFlow',\n chunkText: 'chunkText',\n chunkString: 'chunkString'\n})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNPLHlCQUF5QixPQUFPO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QyxXQUFXLGdCQUFnQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcz8wZGVkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtb2R1bGUgaXMgY29tcGlsZWQgYXdheSFcbiAqXG4gKiBIZXJlIGlzIHRoZSBsaXN0IG9mIGFsbCB0eXBlcyBvZiB0b2tlbnMgZXhwb3NlZCBieSBtaWNyb21hcmssIHdpdGggYSBzaG9ydFxuICogZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGV5IGluY2x1ZGUgYW5kIHdoZXJlIHRoZXkgYXJlIGZvdW5kLlxuICogSW4gcGlja2luZyBuYW1lcywgZ2VuZXJhbGx5LCB0aGUgcnVsZSBpcyB0byBiZSBhcyBleHBsaWNpdCBhcyBwb3NzaWJsZVxuICogaW5zdGVhZCBvZiByZXVzaW5nIG5hbWVzLlxuICogRm9yIGV4YW1wbGUsIHRoZXJlIGlzIGEgYGRlZmluaXRpb25EZXN0aW5hdGlvbmAgYW5kIGEgYHJlc291cmNlRGVzdGluYXRpb25gLFxuICogaW5zdGVhZCBvZiBvbmUgc2hhcmVkIG5hbWUuXG4gKi9cblxuLy8gTm90ZTogd2hlbiBjaGFuZ2luZyB0aGUgbmV4dCByZWNvcmQsIHlvdSBtdXN0IGFsc28gY2hhbmdlIGBUb2tlblR5cGVNYXBgXG4vLyBpbiBgbWljcm9tYXJrLXV0aWwtdHlwZXMvaW5kZXguZC50c2AuXG5leHBvcnQgY29uc3QgdHlwZXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoe1xuICAvLyBHZW5lcmljIHR5cGUgZm9yIGRhdGEsIHN1Y2ggYXMgaW4gYSB0aXRsZSwgYSBkZXN0aW5hdGlvbiwgZXRjLlxuICBkYXRhOiAnZGF0YScsXG5cbiAgLy8gR2VuZXJpYyB0eXBlIGZvciBzeW50YWN0aWMgd2hpdGVzcGFjZSAodGFicywgdmlydHVhbCBzcGFjZXMsIHNwYWNlcykuXG4gIC8vIFN1Y2ggYXMsIGJldHdlZW4gYSBmZW5jZWQgY29kZSBmZW5jZSBhbmQgYW4gaW5mbyBzdHJpbmcuXG4gIHdoaXRlc3BhY2U6ICd3aGl0ZXNwYWNlJyxcblxuICAvLyBHZW5lcmljIHR5cGUgZm9yIGxpbmUgZW5kaW5ncyAobGluZSBmZWVkLCBjYXJyaWFnZSByZXR1cm4sIGNhcnJpYWdlIHJldHVybiArXG4gIC8vIGxpbmUgZmVlZCkuXG4gIGxpbmVFbmRpbmc6ICdsaW5lRW5kaW5nJyxcblxuICAvLyBBIGxpbmUgZW5kaW5nLCBidXQgZW5kaW5nIGEgYmxhbmsgbGluZS5cbiAgbGluZUVuZGluZ0JsYW5rOiAnbGluZUVuZGluZ0JsYW5rJyxcblxuICAvLyBHZW5lcmljIHR5cGUgZm9yIHdoaXRlc3BhY2UgKHRhYnMsIHZpcnR1YWwgc3BhY2VzLCBzcGFjZXMpIGF0IHRoZSBzdGFydCBvZiBhXG4gIC8vIGxpbmUuXG4gIGxpbmVQcmVmaXg6ICdsaW5lUHJlZml4JyxcblxuICAvLyBHZW5lcmljIHR5cGUgZm9yIHdoaXRlc3BhY2UgKHRhYnMsIHZpcnR1YWwgc3BhY2VzLCBzcGFjZXMpIGF0IHRoZSBlbmQgb2YgYVxuICAvLyBsaW5lLlxuICBsaW5lU3VmZml4OiAnbGluZVN1ZmZpeCcsXG5cbiAgLy8gV2hvbGUgQVRYIGhlYWRpbmc6XG4gIC8vXG4gIC8vIGBgYG1hcmtkb3duXG4gIC8vICNcbiAgLy8gIyMgQWxwaGFcbiAgLy8gIyMjIEJyYXZvICMjI1xuICAvLyBgYGBcbiAgLy9cbiAgLy8gSW5jbHVkZXMgYGF0eEhlYWRpbmdTZXF1ZW5jZWAsIGB3aGl0ZXNwYWNlYCwgYGF0eEhlYWRpbmdUZXh0YC5cbiAgYXR4SGVhZGluZzogJ2F0eEhlYWRpbmcnLFxuXG4gIC8vIFNlcXVlbmNlIG9mIG51bWJlciBzaWducyBpbiBhbiBBVFggaGVhZGluZyAoYCMjI2ApLlxuICBhdHhIZWFkaW5nU2VxdWVuY2U6ICdhdHhIZWFkaW5nU2VxdWVuY2UnLFxuXG4gIC8vIENvbnRlbnQgaW4gYW4gQVRYIGhlYWRpbmcgKGBhbHBoYWApLlxuICAvLyBJbmNsdWRlcyB0ZXh0LlxuICBhdHhIZWFkaW5nVGV4dDogJ2F0eEhlYWRpbmdUZXh0JyxcblxuICAvLyBXaG9sZSBhdXRvbGluayAoYDxodHRwczovL2V4YW1wbGUuY29tPmAgb3IgYDxhZG1pbkBleGFtcGxlLmNvbT5gKVxuICAvLyBJbmNsdWRlcyBgYXV0b2xpbmtNYXJrZXJgIGFuZCBgYXV0b2xpbmtQcm90b2NvbGAgb3IgYGF1dG9saW5rRW1haWxgLlxuICBhdXRvbGluazogJ2F1dG9saW5rJyxcblxuICAvLyBFbWFpbCBhdXRvbGluayB3L28gbWFya2VycyAoYGFkbWluQGV4YW1wbGUuY29tYClcbiAgYXV0b2xpbmtFbWFpbDogJ2F1dG9saW5rRW1haWwnLFxuXG4gIC8vIE1hcmtlciBhcm91bmQgYW4gYGF1dG9saW5rUHJvdG9jb2xgIG9yIGBhdXRvbGlua0VtYWlsYCAoYDxgIG9yIGA+YCkuXG4gIGF1dG9saW5rTWFya2VyOiAnYXV0b2xpbmtNYXJrZXInLFxuXG4gIC8vIFByb3RvY29sIGF1dG9saW5rIHcvbyBtYXJrZXJzIChgaHR0cHM6Ly9leGFtcGxlLmNvbWApXG4gIGF1dG9saW5rUHJvdG9jb2w6ICdhdXRvbGlua1Byb3RvY29sJyxcblxuICAvLyBBIHdob2xlIGNoYXJhY3RlciBlc2NhcGUgKGBcXC1gKS5cbiAgLy8gSW5jbHVkZXMgYGVzY2FwZU1hcmtlcmAgYW5kIGBjaGFyYWN0ZXJFc2NhcGVWYWx1ZWAuXG4gIGNoYXJhY3RlckVzY2FwZTogJ2NoYXJhY3RlckVzY2FwZScsXG5cbiAgLy8gVGhlIGVzY2FwZWQgY2hhcmFjdGVyIChgLWApLlxuICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogJ2NoYXJhY3RlckVzY2FwZVZhbHVlJyxcblxuICAvLyBBIHdob2xlIGNoYXJhY3RlciByZWZlcmVuY2UgKGAmYW1wO2AsIGAmIzg4MDA7YCwgb3IgYCYjeDFEMzA2O2ApLlxuICAvLyBJbmNsdWRlcyBgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyYCwgYW4gb3B0aW9uYWxcbiAgLy8gYGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWNgLCBpbiB3aGljaCBjYXNlIGFuIG9wdGlvbmFsXG4gIC8vIGBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbGAsIGFuZCBhIGBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZWAuXG4gIGNoYXJhY3RlclJlZmVyZW5jZTogJ2NoYXJhY3RlclJlZmVyZW5jZScsXG5cbiAgLy8gVGhlIHN0YXJ0IG9yIGVuZCBtYXJrZXIgKGAmYCBvciBgO2ApLlxuICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXI6ICdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXInLFxuXG4gIC8vIE1hcmsgcmVmZXJlbmNlIGFzIG51bWVyaWMgKGAjYCkuXG4gIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6ICdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljJyxcblxuICAvLyBNYXJrIHJlZmVyZW5jZSBhcyBudW1lcmljIChgeGAgb3IgYFhgKS5cbiAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6ICdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCcsXG5cbiAgLy8gVmFsdWUgb2YgY2hhcmFjdGVyIHJlZmVyZW5jZSB3L28gbWFya2VycyAoYGFtcGAsIGA4ODAwYCwgb3IgYDFEMzA2YCkuXG4gIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiAnY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUnLFxuXG4gIC8vIFdob2xlIGZlbmNlZCBjb2RlOlxuICAvL1xuICAvLyBgYGBgbWFya2Rvd25cbiAgLy8gYGBganNcbiAgLy8gYWxlcnQoMSlcbiAgLy8gYGBgXG4gIC8vIGBgYGBcbiAgY29kZUZlbmNlZDogJ2NvZGVGZW5jZWQnLFxuXG4gIC8vIEEgZmVuY2VkIGNvZGUgZmVuY2UsIGluY2x1ZGluZyB3aGl0ZXNwYWNlLCBzZXF1ZW5jZSwgaW5mbywgYW5kIG1ldGFcbiAgLy8gKGAgYGBganMgYCkuXG4gIGNvZGVGZW5jZWRGZW5jZTogJ2NvZGVGZW5jZWRGZW5jZScsXG5cbiAgLy8gU2VxdWVuY2Ugb2YgZ3JhdmUgYWNjZW50IG9yIHRpbGRlIGNoYXJhY3RlcnMgKGAgYGBgIGApIGluIGEgZmVuY2UuXG4gIGNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlOiAnY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UnLFxuXG4gIC8vIEluZm8gd29yZCAoYGpzYCkgaW4gYSBmZW5jZS5cbiAgLy8gSW5jbHVkZXMgc3RyaW5nLlxuICBjb2RlRmVuY2VkRmVuY2VJbmZvOiAnY29kZUZlbmNlZEZlbmNlSW5mbycsXG5cbiAgLy8gTWV0YSB3b3JkcyAoYGhpZ2hsaWdodD1cIjFcImApIGluIGEgZmVuY2UuXG4gIC8vIEluY2x1ZGVzIHN0cmluZy5cbiAgY29kZUZlbmNlZEZlbmNlTWV0YTogJ2NvZGVGZW5jZWRGZW5jZU1ldGEnLFxuXG4gIC8vIEEgbGluZSBvZiBjb2RlLlxuICBjb2RlRmxvd1ZhbHVlOiAnY29kZUZsb3dWYWx1ZScsXG5cbiAgLy8gV2hvbGUgaW5kZW50ZWQgY29kZTpcbiAgLy9cbiAgLy8gYGBgbWFya2Rvd25cbiAgLy8gICAgIGFsZXJ0KDEpXG4gIC8vIGBgYFxuICAvL1xuICAvLyBJbmNsdWRlcyBgbGluZUVuZGluZ2AsIGBsaW5lUHJlZml4YCwgYW5kIGBjb2RlRmxvd1ZhbHVlYC5cbiAgY29kZUluZGVudGVkOiAnY29kZUluZGVudGVkJyxcblxuICAvLyBBIHRleHQgY29kZSAoYGBgIGBhbHBoYWAgYGBgKS5cbiAgLy8gSW5jbHVkZXMgYGNvZGVUZXh0U2VxdWVuY2VgLCBgY29kZVRleHREYXRhYCwgYGxpbmVFbmRpbmdgLCBhbmQgY2FuIGluY2x1ZGVcbiAgLy8gYGNvZGVUZXh0UGFkZGluZ2AuXG4gIGNvZGVUZXh0OiAnY29kZVRleHQnLFxuXG4gIGNvZGVUZXh0RGF0YTogJ2NvZGVUZXh0RGF0YScsXG5cbiAgLy8gQSBzcGFjZSBvciBsaW5lIGVuZGluZyByaWdodCBhZnRlciBvciBiZWZvcmUgYSB0aWNrLlxuICBjb2RlVGV4dFBhZGRpbmc6ICdjb2RlVGV4dFBhZGRpbmcnLFxuXG4gIC8vIEEgdGV4dCBjb2RlIGZlbmNlIChgIGBgIGApLlxuICBjb2RlVGV4dFNlcXVlbmNlOiAnY29kZVRleHRTZXF1ZW5jZScsXG5cbiAgLy8gV2hvbGUgY29udGVudDpcbiAgLy9cbiAgLy8gYGBgbWFya2Rvd25cbiAgLy8gW2FdOiBiXG4gIC8vIGNcbiAgLy8gPVxuICAvLyBkXG4gIC8vIGBgYFxuICAvL1xuICAvLyBJbmNsdWRlcyBgcGFyYWdyYXBoYCBhbmQgYGRlZmluaXRpb25gLlxuICBjb250ZW50OiAnY29udGVudCcsXG4gIC8vIFdob2xlIGRlZmluaXRpb246XG4gIC8vXG4gIC8vIGBgYG1hcmtkb3duXG4gIC8vIFttaWNyb21hcmtdOiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9tYXJrL21pY3JvbWFya1xuICAvLyBgYGBcbiAgLy9cbiAgLy8gSW5jbHVkZXMgYGRlZmluaXRpb25MYWJlbGAsIGBkZWZpbml0aW9uTWFya2VyYCwgYHdoaXRlc3BhY2VgLFxuICAvLyBgZGVmaW5pdGlvbkRlc3RpbmF0aW9uYCwgYW5kIG9wdGlvbmFsbHkgYGxpbmVFbmRpbmdgIGFuZCBgZGVmaW5pdGlvblRpdGxlYC5cbiAgZGVmaW5pdGlvbjogJ2RlZmluaXRpb24nLFxuXG4gIC8vIERlc3RpbmF0aW9uIG9mIGEgZGVmaW5pdGlvbiAoYGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hcmsvbWljcm9tYXJrYCBvclxuICAvLyBgPGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hcmsvbWljcm9tYXJrPmApLlxuICAvLyBJbmNsdWRlcyBgZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbGAgb3IgYGRlZmluaXRpb25EZXN0aW5hdGlvblJhd2AuXG4gIGRlZmluaXRpb25EZXN0aW5hdGlvbjogJ2RlZmluaXRpb25EZXN0aW5hdGlvbicsXG5cbiAgLy8gRW5jbG9zZWQgZGVzdGluYXRpb24gb2YgYSBkZWZpbml0aW9uXG4gIC8vIChgPGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hcmsvbWljcm9tYXJrPmApLlxuICAvLyBJbmNsdWRlcyBgZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlcmAgYW5kIG9wdGlvbmFsbHlcbiAgLy8gYGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZ2AuXG4gIGRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWw6ICdkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsJyxcblxuICAvLyBNYXJrZXJzIG9mIGFuIGVuY2xvc2VkIGRlZmluaXRpb24gZGVzdGluYXRpb24gKGA8YCBvciBgPmApLlxuICBkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyOiAnZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlcicsXG5cbiAgLy8gVW5lbmNsb3NlZCBkZXN0aW5hdGlvbiBvZiBhIGRlZmluaXRpb25cbiAgLy8gKGBodHRwczovL2dpdGh1Yi5jb20vbWljcm9tYXJrL21pY3JvbWFya2ApLlxuICAvLyBJbmNsdWRlcyBgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nYC5cbiAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3OiAnZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3JyxcblxuICAvLyBUZXh0IGluIGFuIGRlc3RpbmF0aW9uIChgaHR0cHM6Ly9naXRodWIuY29tL21pY3JvbWFyay9taWNyb21hcmtgKS5cbiAgLy8gSW5jbHVkZXMgc3RyaW5nLlxuICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6ICdkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmcnLFxuXG4gIC8vIExhYmVsIG9mIGEgZGVmaW5pdGlvbiAoYFttaWNyb21hcmtdYCkuXG4gIC8vIEluY2x1ZGVzIGBkZWZpbml0aW9uTGFiZWxNYXJrZXJgIGFuZCBgZGVmaW5pdGlvbkxhYmVsU3RyaW5nYC5cbiAgZGVmaW5pdGlvbkxhYmVsOiAnZGVmaW5pdGlvbkxhYmVsJyxcblxuICAvLyBNYXJrZXJzIG9mIGEgZGVmaW5pdGlvbiBsYWJlbCAoYFtgIG9yIGBdYCkuXG4gIGRlZmluaXRpb25MYWJlbE1hcmtlcjogJ2RlZmluaXRpb25MYWJlbE1hcmtlcicsXG5cbiAgLy8gVmFsdWUgb2YgYSBkZWZpbml0aW9uIGxhYmVsIChgbWljcm9tYXJrYCkuXG4gIC8vIEluY2x1ZGVzIHN0cmluZy5cbiAgZGVmaW5pdGlvbkxhYmVsU3RyaW5nOiAnZGVmaW5pdGlvbkxhYmVsU3RyaW5nJyxcblxuICAvLyBNYXJrZXIgYmV0d2VlbiBhIGxhYmVsIGFuZCBhIGRlc3RpbmF0aW9uIChgOmApLlxuICBkZWZpbml0aW9uTWFya2VyOiAnZGVmaW5pdGlvbk1hcmtlcicsXG5cbiAgLy8gVGl0bGUgb2YgYSBkZWZpbml0aW9uIChgXCJ4XCJgLCBgJ3knYCwgb3IgYCh6KWApLlxuICAvLyBJbmNsdWRlcyBgZGVmaW5pdGlvblRpdGxlTWFya2VyYCBhbmQgb3B0aW9uYWxseSBgZGVmaW5pdGlvblRpdGxlU3RyaW5nYC5cbiAgZGVmaW5pdGlvblRpdGxlOiAnZGVmaW5pdGlvblRpdGxlJyxcblxuICAvLyBNYXJrZXIgYXJvdW5kIGEgdGl0bGUgb2YgYSBkZWZpbml0aW9uIChgXCJgLCBgJ2AsIGAoYCwgb3IgYClgKS5cbiAgZGVmaW5pdGlvblRpdGxlTWFya2VyOiAnZGVmaW5pdGlvblRpdGxlTWFya2VyJyxcblxuICAvLyBEYXRhIHdpdGhvdXQgbWFya2VycyBpbiBhIHRpdGxlIChgemApLlxuICAvLyBJbmNsdWRlcyBzdHJpbmcuXG4gIGRlZmluaXRpb25UaXRsZVN0cmluZzogJ2RlZmluaXRpb25UaXRsZVN0cmluZycsXG5cbiAgLy8gRW1waGFzaXMgKGAqYWxwaGEqYCkuXG4gIC8vIEluY2x1ZGVzIGBlbXBoYXNpc1NlcXVlbmNlYCBhbmQgYGVtcGhhc2lzVGV4dGAuXG4gIGVtcGhhc2lzOiAnZW1waGFzaXMnLFxuXG4gIC8vIFNlcXVlbmNlIG9mIGVtcGhhc2lzIG1hcmtlcnMgKGAqYCBvciBgX2ApLlxuICBlbXBoYXNpc1NlcXVlbmNlOiAnZW1waGFzaXNTZXF1ZW5jZScsXG5cbiAgLy8gRW1waGFzaXMgdGV4dCAoYGFscGhhYCkuXG4gIC8vIEluY2x1ZGVzIHRleHQuXG4gIGVtcGhhc2lzVGV4dDogJ2VtcGhhc2lzVGV4dCcsXG5cbiAgLy8gVGhlIGNoYXJhY3RlciBlc2NhcGUgbWFya2VyIChgXFxgKS5cbiAgZXNjYXBlTWFya2VyOiAnZXNjYXBlTWFya2VyJyxcblxuICAvLyBBIGhhcmQgYnJlYWsgY3JlYXRlZCB3aXRoIGEgYmFja3NsYXNoIChgXFxcXG5gKS5cbiAgLy8gTm90ZTogZG9lcyBub3QgaW5jbHVkZSB0aGUgbGluZSBlbmRpbmcuXG4gIGhhcmRCcmVha0VzY2FwZTogJ2hhcmRCcmVha0VzY2FwZScsXG5cbiAgLy8gQSBoYXJkIGJyZWFrIGNyZWF0ZWQgd2l0aCB0cmFpbGluZyBzcGFjZXMgKGAgIFxcbmApLlxuICAvLyBEb2VzIG5vdCBpbmNsdWRlIHRoZSBsaW5lIGVuZGluZy5cbiAgaGFyZEJyZWFrVHJhaWxpbmc6ICdoYXJkQnJlYWtUcmFpbGluZycsXG5cbiAgLy8gRmxvdyBIVE1MOlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyA8ZGl2XG4gIC8vIGBgYFxuICAvL1xuICAvLyBJbmxjdWRlcyBgbGluZUVuZGluZ2AsIGBodG1sRmxvd0RhdGFgLlxuICBodG1sRmxvdzogJ2h0bWxGbG93JyxcblxuICBodG1sRmxvd0RhdGE6ICdodG1sRmxvd0RhdGEnLFxuXG4gIC8vIEhUTUwgaW4gdGV4dCAodGhlIHRhZyBpbiBgYSA8aT4gYmApLlxuICAvLyBJbmNsdWRlcyBgbGluZUVuZGluZ2AsIGBodG1sVGV4dERhdGFgLlxuICBodG1sVGV4dDogJ2h0bWxUZXh0JyxcblxuICBodG1sVGV4dERhdGE6ICdodG1sVGV4dERhdGEnLFxuXG4gIC8vIFdob2xlIGltYWdlIChgIVthbHBoYV0oYnJhdm8pYCwgYCFbYWxwaGFdW2JyYXZvXWAsIGAhW2FscGhhXVtdYCwgb3JcbiAgLy8gYCFbYWxwaGFdYCkuXG4gIC8vIEluY2x1ZGVzIGBsYWJlbGAgYW5kIGFuIG9wdGlvbmFsIGByZXNvdXJjZWAgb3IgYHJlZmVyZW5jZWAuXG4gIGltYWdlOiAnaW1hZ2UnLFxuXG4gIC8vIFdob2xlIGxpbmsgbGFiZWwgKGBbKmFscGhhKl1gKS5cbiAgLy8gSW5jbHVkZXMgYGxhYmVsTGlua2Agb3IgYGxhYmVsSW1hZ2VgLCBgbGFiZWxUZXh0YCwgYW5kIGBsYWJlbEVuZGAuXG4gIGxhYmVsOiAnbGFiZWwnLFxuXG4gIC8vIFRleHQgaW4gYW4gbGFiZWwgKGAqYWxwaGEqYCkuXG4gIC8vIEluY2x1ZGVzIHRleHQuXG4gIGxhYmVsVGV4dDogJ2xhYmVsVGV4dCcsXG5cbiAgLy8gU3RhcnQgYSBsaW5rIGxhYmVsIChgW2ApLlxuICAvLyBJbmNsdWRlcyBhIGBsYWJlbE1hcmtlcmAuXG4gIGxhYmVsTGluazogJ2xhYmVsTGluaycsXG5cbiAgLy8gU3RhcnQgYW4gaW1hZ2UgbGFiZWwgKGAhW2ApLlxuICAvLyBJbmNsdWRlcyBgbGFiZWxJbWFnZU1hcmtlcmAgYW5kIGBsYWJlbE1hcmtlcmAuXG4gIGxhYmVsSW1hZ2U6ICdsYWJlbEltYWdlJyxcblxuICAvLyBNYXJrZXIgb2YgYSBsYWJlbCAoYFtgIG9yIGBdYCkuXG4gIGxhYmVsTWFya2VyOiAnbGFiZWxNYXJrZXInLFxuXG4gIC8vIE1hcmtlciB0byBzdGFydCBhbiBpbWFnZSAoYCFgKS5cbiAgbGFiZWxJbWFnZU1hcmtlcjogJ2xhYmVsSW1hZ2VNYXJrZXInLFxuXG4gIC8vIEVuZCBhIGxhYmVsIChgXWApLlxuICAvLyBJbmNsdWRlcyBgbGFiZWxNYXJrZXJgLlxuICBsYWJlbEVuZDogJ2xhYmVsRW5kJyxcblxuICAvLyBXaG9sZSBsaW5rIChgW2FscGhhXShicmF2bylgLCBgW2FscGhhXVticmF2b11gLCBgW2FscGhhXVtdYCwgb3IgYFthbHBoYV1gKS5cbiAgLy8gSW5jbHVkZXMgYGxhYmVsYCBhbmQgYW4gb3B0aW9uYWwgYHJlc291cmNlYCBvciBgcmVmZXJlbmNlYC5cbiAgbGluazogJ2xpbmsnLFxuXG4gIC8vIFdob2xlIHBhcmFncmFwaDpcbiAgLy9cbiAgLy8gYGBgbWFya2Rvd25cbiAgLy8gYWxwaGFcbiAgLy8gYnJhdm8uXG4gIC8vIGBgYFxuICAvL1xuICAvLyBJbmNsdWRlcyB0ZXh0LlxuICBwYXJhZ3JhcGg6ICdwYXJhZ3JhcGgnLFxuXG4gIC8vIEEgcmVmZXJlbmNlIChgW2FscGhhXWAgb3IgYFtdYCkuXG4gIC8vIEluY2x1ZGVzIGByZWZlcmVuY2VNYXJrZXJgIGFuZCBhbiBvcHRpb25hbCBgcmVmZXJlbmNlU3RyaW5nYC5cbiAgcmVmZXJlbmNlOiAncmVmZXJlbmNlJyxcblxuICAvLyBBIHJlZmVyZW5jZSBtYXJrZXIgKGBbYCBvciBgXWApLlxuICByZWZlcmVuY2VNYXJrZXI6ICdyZWZlcmVuY2VNYXJrZXInLFxuXG4gIC8vIFJlZmVyZW5jZSB0ZXh0IChgYWxwaGFgKS5cbiAgLy8gSW5jbHVkZXMgc3RyaW5nLlxuICByZWZlcmVuY2VTdHJpbmc6ICdyZWZlcmVuY2VTdHJpbmcnLFxuXG4gIC8vIEEgcmVzb3VyY2UgKGAoaHR0cHM6Ly9leGFtcGxlLmNvbSBcImFscGhhXCIpYCkuXG4gIC8vIEluY2x1ZGVzIGByZXNvdXJjZU1hcmtlcmAsIGFuIG9wdGlvbmFsIGByZXNvdXJjZURlc3RpbmF0aW9uYCB3aXRoIGFuIG9wdGlvbmFsXG4gIC8vIGB3aGl0ZXNwYWNlYCBhbmQgYHJlc291cmNlVGl0bGVgLlxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcblxuICAvLyBBIHJlc291cmNlIGRlc3RpbmF0aW9uIChgaHR0cHM6Ly9leGFtcGxlLmNvbWApLlxuICAvLyBJbmNsdWRlcyBgcmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxgIG9yIGByZXNvdXJjZURlc3RpbmF0aW9uUmF3YC5cbiAgcmVzb3VyY2VEZXN0aW5hdGlvbjogJ3Jlc291cmNlRGVzdGluYXRpb24nLFxuXG4gIC8vIEEgbGl0ZXJhbCByZXNvdXJjZSBkZXN0aW5hdGlvbiAoYDxodHRwczovL2V4YW1wbGUuY29tPmApLlxuICAvLyBJbmNsdWRlcyBgcmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXJgIGFuZCBvcHRpb25hbGx5XG4gIC8vIGByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nYC5cbiAgcmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWw6ICdyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbCcsXG5cbiAgLy8gQSByZXNvdXJjZSBkZXN0aW5hdGlvbiBtYXJrZXIgKGA8YCBvciBgPmApLlxuICByZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlcjogJ3Jlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyJyxcblxuICAvLyBBIHJhdyByZXNvdXJjZSBkZXN0aW5hdGlvbiAoYGh0dHBzOi8vZXhhbXBsZS5jb21gKS5cbiAgLy8gSW5jbHVkZXMgYHJlc291cmNlRGVzdGluYXRpb25TdHJpbmdgLlxuICByZXNvdXJjZURlc3RpbmF0aW9uUmF3OiAncmVzb3VyY2VEZXN0aW5hdGlvblJhdycsXG5cbiAgLy8gUmVzb3VyY2UgZGVzdGluYXRpb24gdGV4dCAoYGh0dHBzOi8vZXhhbXBsZS5jb21gKS5cbiAgLy8gSW5jbHVkZXMgc3RyaW5nLlxuICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiAncmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZycsXG5cbiAgLy8gQSByZXNvdXJjZSBtYXJrZXIgKGAoYCBvciBgKWApLlxuICByZXNvdXJjZU1hcmtlcjogJ3Jlc291cmNlTWFya2VyJyxcblxuICAvLyBBIHJlc291cmNlIHRpdGxlIChgXCJhbHBoYVwiYCwgYCdhbHBoYSdgLCBvciBgKGFscGhhKWApLlxuICAvLyBJbmNsdWRlcyBgcmVzb3VyY2VUaXRsZU1hcmtlcmAgYW5kIG9wdGlvbmFsbHkgYHJlc291cmNlVGl0bGVTdHJpbmdgLlxuICByZXNvdXJjZVRpdGxlOiAncmVzb3VyY2VUaXRsZScsXG5cbiAgLy8gQSByZXNvdXJjZSB0aXRsZSBtYXJrZXIgKGBcImAsIGAnYCwgYChgLCBvciBgKWApLlxuICByZXNvdXJjZVRpdGxlTWFya2VyOiAncmVzb3VyY2VUaXRsZU1hcmtlcicsXG5cbiAgLy8gUmVzb3VyY2UgZGVzdGluYXRpb24gdGl0bGUgKGBhbHBoYWApLlxuICAvLyBJbmNsdWRlcyBzdHJpbmcuXG4gIHJlc291cmNlVGl0bGVTdHJpbmc6ICdyZXNvdXJjZVRpdGxlU3RyaW5nJyxcblxuICAvLyBXaG9sZSBzZXRleHQgaGVhZGluZzpcbiAgLy9cbiAgLy8gYGBgbWFya2Rvd25cbiAgLy8gYWxwaGFcbiAgLy8gYnJhdm9cbiAgLy8gPT09PT1cbiAgLy8gYGBgXG4gIC8vXG4gIC8vIEluY2x1ZGVzIGBzZXRleHRIZWFkaW5nVGV4dGAsIGBsaW5lRW5kaW5nYCwgYGxpbmVQcmVmaXhgLCBhbmRcbiAgLy8gYHNldGV4dEhlYWRpbmdMaW5lYC5cbiAgc2V0ZXh0SGVhZGluZzogJ3NldGV4dEhlYWRpbmcnLFxuXG4gIC8vIENvbnRlbnQgaW4gYSBzZXRleHQgaGVhZGluZyAoYGFscGhhXFxuYnJhdm9gKS5cbiAgLy8gSW5jbHVkZXMgdGV4dC5cbiAgc2V0ZXh0SGVhZGluZ1RleHQ6ICdzZXRleHRIZWFkaW5nVGV4dCcsXG5cbiAgLy8gVW5kZXJsaW5lIGluIGEgc2V0ZXh0IGhlYWRpbmcsIGluY2x1ZGluZyB3aGl0ZXNwYWNlIHN1ZmZpeCAoYD09YCkuXG4gIC8vIEluY2x1ZGVzIGBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlYC5cbiAgc2V0ZXh0SGVhZGluZ0xpbmU6ICdzZXRleHRIZWFkaW5nTGluZScsXG5cbiAgLy8gU2VxdWVuY2Ugb2YgZXF1YWxzIG9yIGRhc2ggY2hhcmFjdGVycyBpbiB1bmRlcmxpbmUgaW4gYSBzZXRleHQgaGVhZGluZyAoYC1gKS5cbiAgc2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZTogJ3NldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UnLFxuXG4gIC8vIFN0cm9uZyAoYCoqYWxwaGEqKmApLlxuICAvLyBJbmNsdWRlcyBgc3Ryb25nU2VxdWVuY2VgIGFuZCBgc3Ryb25nVGV4dGAuXG4gIHN0cm9uZzogJ3N0cm9uZycsXG5cbiAgLy8gU2VxdWVuY2Ugb2Ygc3Ryb25nIG1hcmtlcnMgKGAqKmAgb3IgYF9fYCkuXG4gIHN0cm9uZ1NlcXVlbmNlOiAnc3Ryb25nU2VxdWVuY2UnLFxuXG4gIC8vIFN0cm9uZyB0ZXh0IChgYWxwaGFgKS5cbiAgLy8gSW5jbHVkZXMgdGV4dC5cbiAgc3Ryb25nVGV4dDogJ3N0cm9uZ1RleHQnLFxuXG4gIC8vIFdob2xlIHRoZW1hdGljIGJyZWFrOlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyAqICogKlxuICAvLyBgYGBcbiAgLy9cbiAgLy8gSW5jbHVkZXMgYHRoZW1hdGljQnJlYWtTZXF1ZW5jZWAgYW5kIGB3aGl0ZXNwYWNlYC5cbiAgdGhlbWF0aWNCcmVhazogJ3RoZW1hdGljQnJlYWsnLFxuXG4gIC8vIEEgc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgdGhlbWF0aWMgYnJlYWsgbWFya2VycyAoYCoqKmApLlxuICB0aGVtYXRpY0JyZWFrU2VxdWVuY2U6ICd0aGVtYXRpY0JyZWFrU2VxdWVuY2UnLFxuXG4gIC8vIFdob2xlIGJsb2NrIHF1b3RlOlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyA+IGFcbiAgLy8gPlxuICAvLyA+IGJcbiAgLy8gYGBgXG4gIC8vXG4gIC8vIEluY2x1ZGVzIGBibG9ja1F1b3RlUHJlZml4YCBhbmQgZmxvdy5cbiAgYmxvY2tRdW90ZTogJ2Jsb2NrUXVvdGUnLFxuICAvLyBUaGUgYD5gIG9yIGA+IGAgb2YgYSBibG9jayBxdW90ZS5cbiAgYmxvY2tRdW90ZVByZWZpeDogJ2Jsb2NrUXVvdGVQcmVmaXgnLFxuICAvLyBUaGUgYD5gIG9mIGEgYmxvY2sgcXVvdGUgcHJlZml4LlxuICBibG9ja1F1b3RlTWFya2VyOiAnYmxvY2tRdW90ZU1hcmtlcicsXG4gIC8vIFRoZSBvcHRpb25hbCBgIGAgb2YgYSBibG9jayBxdW90ZSBwcmVmaXguXG4gIGJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlOiAnYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UnLFxuXG4gIC8vIFdob2xlIHVub3JkZXJlZCBsaXN0OlxuICAvL1xuICAvLyBgYGBtYXJrZG93blxuICAvLyAtIGFcbiAgLy8gICBiXG4gIC8vIGBgYFxuICAvL1xuICAvLyBJbmNsdWRlcyBgbGlzdEl0ZW1QcmVmaXhgLCBmbG93LCBhbmQgb3B0aW9uYWxseSAgYGxpc3RJdGVtSW5kZW50YCBvbiBmdXJ0aGVyXG4gIC8vIGxpbmVzLlxuICBsaXN0T3JkZXJlZDogJ2xpc3RPcmRlcmVkJyxcblxuICAvLyBXaG9sZSBvcmRlcmVkIGxpc3Q6XG4gIC8vXG4gIC8vIGBgYG1hcmtkb3duXG4gIC8vIDEuIGFcbiAgLy8gICAgYlxuICAvLyBgYGBcbiAgLy9cbiAgLy8gSW5jbHVkZXMgYGxpc3RJdGVtUHJlZml4YCwgZmxvdywgYW5kIG9wdGlvbmFsbHkgIGBsaXN0SXRlbUluZGVudGAgb24gZnVydGhlclxuICAvLyBsaW5lcy5cbiAgbGlzdFVub3JkZXJlZDogJ2xpc3RVbm9yZGVyZWQnLFxuXG4gIC8vIFRoZSBpbmRlbnQgb2YgZnVydGhlciBsaXN0IGl0ZW0gbGluZXMuXG4gIGxpc3RJdGVtSW5kZW50OiAnbGlzdEl0ZW1JbmRlbnQnLFxuXG4gIC8vIEEgbWFya2VyLCBhcyBpbiwgYCpgLCBgK2AsIGAtYCwgYC5gLCBvciBgKWAuXG4gIGxpc3RJdGVtTWFya2VyOiAnbGlzdEl0ZW1NYXJrZXInLFxuXG4gIC8vIFRoZSB0aGluZyB0aGF0IHN0YXJ0cyBhIGxpc3QgaXRlbSwgc3VjaCBhcyBgMS4gYC5cbiAgLy8gSW5jbHVkZXMgYGxpc3RJdGVtVmFsdWVgIGlmIG9yZGVyZWQsIGBsaXN0SXRlbU1hcmtlcmAsIGFuZFxuICAvLyBgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlYCAodW5sZXNzIGZvbGxvd2VkIGJ5IGEgbGluZSBlbmRpbmcpLlxuICBsaXN0SXRlbVByZWZpeDogJ2xpc3RJdGVtUHJlZml4JyxcblxuICAvLyBUaGUgd2hpdGVzcGFjZSBhZnRlciBhIG1hcmtlci5cbiAgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlOiAnbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlJyxcblxuICAvLyBUaGUgbnVtZXJpY2FsIHZhbHVlIG9mIGFuIG9yZGVyZWQgaXRlbS5cbiAgbGlzdEl0ZW1WYWx1ZTogJ2xpc3RJdGVtVmFsdWUnLFxuXG4gIC8vIEludGVybmFsIHR5cGVzIHVzZWQgZm9yIHN1YnRva2VuaXplcnMsIGNvbXBpbGVkIGF3YXlcbiAgY2h1bmtEb2N1bWVudDogJ2NodW5rRG9jdW1lbnQnLFxuICBjaHVua0NvbnRlbnQ6ICdjaHVua0NvbnRlbnQnLFxuICBjaHVua0Zsb3c6ICdjaHVua0Zsb3cnLFxuICBjaHVua1RleHQ6ICdjaHVua1RleHQnLFxuICBjaHVua1N0cmluZzogJ2NodW5rU3RyaW5nJ1xufSlcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-symbol/types.js\n"); /***/ }), /***/ "../../../node_modules/micromark-util-symbol/values.js": /*!*************************************************************!*\ !*** ../../../node_modules/micromark-util-symbol/values.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"values\": () => (/* binding */ values)\n/* harmony export */ });\n/**\n * This module is compiled away!\n *\n * While micromark works based on character codes, this module includes the\n * string versions of ’em.\n * The C0 block, except for LF, CR, HT, and w/ the replacement character added,\n * are available here.\n */\nconst values = /** @type {const} */ ({\n ht: '\\t',\n lf: '\\n',\n cr: '\\r',\n space: ' ',\n exclamationMark: '!',\n quotationMark: '\"',\n numberSign: '#',\n dollarSign: '$',\n percentSign: '%',\n ampersand: '&',\n apostrophe: \"'\",\n leftParenthesis: '(',\n rightParenthesis: ')',\n asterisk: '*',\n plusSign: '+',\n comma: ',',\n dash: '-',\n dot: '.',\n slash: '/',\n digit0: '0',\n digit1: '1',\n digit2: '2',\n digit3: '3',\n digit4: '4',\n digit5: '5',\n digit6: '6',\n digit7: '7',\n digit8: '8',\n digit9: '9',\n colon: ':',\n semicolon: ';',\n lessThan: '<',\n equalsTo: '=',\n greaterThan: '>',\n questionMark: '?',\n atSign: '@',\n uppercaseA: 'A',\n uppercaseB: 'B',\n uppercaseC: 'C',\n uppercaseD: 'D',\n uppercaseE: 'E',\n uppercaseF: 'F',\n uppercaseG: 'G',\n uppercaseH: 'H',\n uppercaseI: 'I',\n uppercaseJ: 'J',\n uppercaseK: 'K',\n uppercaseL: 'L',\n uppercaseM: 'M',\n uppercaseN: 'N',\n uppercaseO: 'O',\n uppercaseP: 'P',\n uppercaseQ: 'Q',\n uppercaseR: 'R',\n uppercaseS: 'S',\n uppercaseT: 'T',\n uppercaseU: 'U',\n uppercaseV: 'V',\n uppercaseW: 'W',\n uppercaseX: 'X',\n uppercaseY: 'Y',\n uppercaseZ: 'Z',\n leftSquareBracket: '[',\n backslash: '\\\\',\n rightSquareBracket: ']',\n caret: '^',\n underscore: '_',\n graveAccent: '`',\n lowercaseA: 'a',\n lowercaseB: 'b',\n lowercaseC: 'c',\n lowercaseD: 'd',\n lowercaseE: 'e',\n lowercaseF: 'f',\n lowercaseG: 'g',\n lowercaseH: 'h',\n lowercaseI: 'i',\n lowercaseJ: 'j',\n lowercaseK: 'k',\n lowercaseL: 'l',\n lowercaseM: 'm',\n lowercaseN: 'n',\n lowercaseO: 'o',\n lowercaseP: 'p',\n lowercaseQ: 'q',\n lowercaseR: 'r',\n lowercaseS: 's',\n lowercaseT: 't',\n lowercaseU: 'u',\n lowercaseV: 'v',\n lowercaseW: 'w',\n lowercaseX: 'x',\n lowercaseY: 'y',\n lowercaseZ: 'z',\n leftCurlyBrace: '{',\n verticalBar: '|',\n rightCurlyBrace: '}',\n tilde: '~',\n replacementCharacter: '�'\n})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN5bWJvbC92YWx1ZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTywwQkFBMEIsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zeW1ib2wvdmFsdWVzLmpzPzBjNGIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBjb21waWxlZCBhd2F5IVxuICpcbiAqIFdoaWxlIG1pY3JvbWFyayB3b3JrcyBiYXNlZCBvbiBjaGFyYWN0ZXIgY29kZXMsIHRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZVxuICogc3RyaW5nIHZlcnNpb25zIG9mIOKAmWVtLlxuICogVGhlIEMwIGJsb2NrLCBleGNlcHQgZm9yIExGLCBDUiwgSFQsIGFuZCB3LyB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGFkZGVkLFxuICogYXJlIGF2YWlsYWJsZSBoZXJlLlxuICovXG5leHBvcnQgY29uc3QgdmFsdWVzID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKHtcbiAgaHQ6ICdcXHQnLFxuICBsZjogJ1xcbicsXG4gIGNyOiAnXFxyJyxcbiAgc3BhY2U6ICcgJyxcbiAgZXhjbGFtYXRpb25NYXJrOiAnIScsXG4gIHF1b3RhdGlvbk1hcms6ICdcIicsXG4gIG51bWJlclNpZ246ICcjJyxcbiAgZG9sbGFyU2lnbjogJyQnLFxuICBwZXJjZW50U2lnbjogJyUnLFxuICBhbXBlcnNhbmQ6ICcmJyxcbiAgYXBvc3Ryb3BoZTogXCInXCIsXG4gIGxlZnRQYXJlbnRoZXNpczogJygnLFxuICByaWdodFBhcmVudGhlc2lzOiAnKScsXG4gIGFzdGVyaXNrOiAnKicsXG4gIHBsdXNTaWduOiAnKycsXG4gIGNvbW1hOiAnLCcsXG4gIGRhc2g6ICctJyxcbiAgZG90OiAnLicsXG4gIHNsYXNoOiAnLycsXG4gIGRpZ2l0MDogJzAnLFxuICBkaWdpdDE6ICcxJyxcbiAgZGlnaXQyOiAnMicsXG4gIGRpZ2l0MzogJzMnLFxuICBkaWdpdDQ6ICc0JyxcbiAgZGlnaXQ1OiAnNScsXG4gIGRpZ2l0NjogJzYnLFxuICBkaWdpdDc6ICc3JyxcbiAgZGlnaXQ4OiAnOCcsXG4gIGRpZ2l0OTogJzknLFxuICBjb2xvbjogJzonLFxuICBzZW1pY29sb246ICc7JyxcbiAgbGVzc1RoYW46ICc8JyxcbiAgZXF1YWxzVG86ICc9JyxcbiAgZ3JlYXRlclRoYW46ICc+JyxcbiAgcXVlc3Rpb25NYXJrOiAnPycsXG4gIGF0U2lnbjogJ0AnLFxuICB1cHBlcmNhc2VBOiAnQScsXG4gIHVwcGVyY2FzZUI6ICdCJyxcbiAgdXBwZXJjYXNlQzogJ0MnLFxuICB1cHBlcmNhc2VEOiAnRCcsXG4gIHVwcGVyY2FzZUU6ICdFJyxcbiAgdXBwZXJjYXNlRjogJ0YnLFxuICB1cHBlcmNhc2VHOiAnRycsXG4gIHVwcGVyY2FzZUg6ICdIJyxcbiAgdXBwZXJjYXNlSTogJ0knLFxuICB1cHBlcmNhc2VKOiAnSicsXG4gIHVwcGVyY2FzZUs6ICdLJyxcbiAgdXBwZXJjYXNlTDogJ0wnLFxuICB1cHBlcmNhc2VNOiAnTScsXG4gIHVwcGVyY2FzZU46ICdOJyxcbiAgdXBwZXJjYXNlTzogJ08nLFxuICB1cHBlcmNhc2VQOiAnUCcsXG4gIHVwcGVyY2FzZVE6ICdRJyxcbiAgdXBwZXJjYXNlUjogJ1InLFxuICB1cHBlcmNhc2VTOiAnUycsXG4gIHVwcGVyY2FzZVQ6ICdUJyxcbiAgdXBwZXJjYXNlVTogJ1UnLFxuICB1cHBlcmNhc2VWOiAnVicsXG4gIHVwcGVyY2FzZVc6ICdXJyxcbiAgdXBwZXJjYXNlWDogJ1gnLFxuICB1cHBlcmNhc2VZOiAnWScsXG4gIHVwcGVyY2FzZVo6ICdaJyxcbiAgbGVmdFNxdWFyZUJyYWNrZXQ6ICdbJyxcbiAgYmFja3NsYXNoOiAnXFxcXCcsXG4gIHJpZ2h0U3F1YXJlQnJhY2tldDogJ10nLFxuICBjYXJldDogJ14nLFxuICB1bmRlcnNjb3JlOiAnXycsXG4gIGdyYXZlQWNjZW50OiAnYCcsXG4gIGxvd2VyY2FzZUE6ICdhJyxcbiAgbG93ZXJjYXNlQjogJ2InLFxuICBsb3dlcmNhc2VDOiAnYycsXG4gIGxvd2VyY2FzZUQ6ICdkJyxcbiAgbG93ZXJjYXNlRTogJ2UnLFxuICBsb3dlcmNhc2VGOiAnZicsXG4gIGxvd2VyY2FzZUc6ICdnJyxcbiAgbG93ZXJjYXNlSDogJ2gnLFxuICBsb3dlcmNhc2VJOiAnaScsXG4gIGxvd2VyY2FzZUo6ICdqJyxcbiAgbG93ZXJjYXNlSzogJ2snLFxuICBsb3dlcmNhc2VMOiAnbCcsXG4gIGxvd2VyY2FzZU06ICdtJyxcbiAgbG93ZXJjYXNlTjogJ24nLFxuICBsb3dlcmNhc2VPOiAnbycsXG4gIGxvd2VyY2FzZVA6ICdwJyxcbiAgbG93ZXJjYXNlUTogJ3EnLFxuICBsb3dlcmNhc2VSOiAncicsXG4gIGxvd2VyY2FzZVM6ICdzJyxcbiAgbG93ZXJjYXNlVDogJ3QnLFxuICBsb3dlcmNhc2VVOiAndScsXG4gIGxvd2VyY2FzZVY6ICd2JyxcbiAgbG93ZXJjYXNlVzogJ3cnLFxuICBsb3dlcmNhc2VYOiAneCcsXG4gIGxvd2VyY2FzZVk6ICd5JyxcbiAgbG93ZXJjYXNlWjogJ3onLFxuICBsZWZ0Q3VybHlCcmFjZTogJ3snLFxuICB2ZXJ0aWNhbEJhcjogJ3wnLFxuICByaWdodEN1cmx5QnJhY2U6ICd9JyxcbiAgdGlsZGU6ICd+JyxcbiAgcmVwbGFjZW1lbnRDaGFyYWN0ZXI6ICfvv70nXG59KVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark-util-symbol/values.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/constructs.js": /*!*************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/constructs.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"attentionMarkers\": () => (/* binding */ attentionMarkers),\n/* harmony export */ \"contentInitial\": () => (/* binding */ contentInitial),\n/* harmony export */ \"disable\": () => (/* binding */ disable),\n/* harmony export */ \"document\": () => (/* binding */ document),\n/* harmony export */ \"flow\": () => (/* binding */ flow),\n/* harmony export */ \"flowInitial\": () => (/* binding */ flowInitial),\n/* harmony export */ \"insideSpan\": () => (/* binding */ insideSpan),\n/* harmony export */ \"string\": () => (/* binding */ string),\n/* harmony export */ \"text\": () => (/* binding */ text)\n/* harmony export */ });\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/list.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/block-quote.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/definition.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/code-indented.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/heading-atx.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/thematic-break.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/setext-underline.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/html-flow.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/code-fenced.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/character-reference.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/character-escape.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/line-ending.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/label-start-image.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/attention.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/autolink.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/html-text.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/label-start-link.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/label-end.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/code-text.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var _initialize_text_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./initialize/text.js */ \"../../../node_modules/micromark/dev/lib/initialize/text.js\");\n/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\n\n\n\n\n/** @satisfies {Extension['document']} */\nconst document = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.plusSign]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.dash]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit0]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit1]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit2]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit3]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit4]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit5]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit6]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit7]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit8]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.digit9]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__.blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nconst contentInitial = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__.definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nconst flowInitial = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.space]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nconst flow = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.numberSign]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_5__.headingAtx,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.dash]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__.setextUnderline, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak],\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_8__.htmlFlow,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.equalsTo]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__.setextUnderline,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.graveAccent]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__.codeFenced,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.tilde]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__.codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nconst string = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__.characterReference,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__.characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nconst text = {\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lineFeed]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturnLineFeed]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.exclamationMark]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_13__.labelStartImage,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__.characterReference,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_15__.autolink, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_16__.htmlText],\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_17__.labelStartLink,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.backslash]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_18__.hardBreakEscape, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__.characterEscape],\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_19__.labelEnd,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention,\n [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.graveAccent]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_20__.codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nconst insideSpan = {null: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention, _initialize_text_js__WEBPACK_IMPORTED_MODULE_21__.resolver]}\n\n/** @satisfies {Extension['attentionMarkers']} */\nconst attentionMarkers = {null: [micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk, micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]}\n\n/** @satisfies {Extension['disable']} */\nconst disable = {null: []}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2NvbnN0cnVjdHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBdUJrQztBQUNrQjtBQUNROztBQUU1RCxnQkFBZ0IsdUJBQXVCO0FBQ2hDO0FBQ1AsR0FBRywwRUFBYyxHQUFHLDJEQUFJO0FBQ3hCLEdBQUcsMEVBQWMsR0FBRywyREFBSTtBQUN4QixHQUFHLHNFQUFVLEdBQUcsMkRBQUk7QUFDcEIsR0FBRyx3RUFBWSxHQUFHLDJEQUFJO0FBQ3RCLEdBQUcsd0VBQVksR0FBRywyREFBSTtBQUN0QixHQUFHLHdFQUFZLEdBQUcsMkRBQUk7QUFDdEIsR0FBRyx3RUFBWSxHQUFHLDJEQUFJO0FBQ3RCLEdBQUcsd0VBQVksR0FBRywyREFBSTtBQUN0QixHQUFHLHdFQUFZLEdBQUcsMkRBQUk7QUFDdEIsR0FBRyx3RUFBWSxHQUFHLDJEQUFJO0FBQ3RCLEdBQUcsd0VBQVksR0FBRywyREFBSTtBQUN0QixHQUFHLHdFQUFZLEdBQUcsMkRBQUk7QUFDdEIsR0FBRyx3RUFBWSxHQUFHLDJEQUFJO0FBQ3RCLEdBQUcsNkVBQWlCLEdBQUcsaUVBQVU7QUFDakM7O0FBRUEsZ0JBQWdCLDZCQUE2QjtBQUN0QztBQUNQLEdBQUcsbUZBQXVCLEdBQUcsaUVBQVU7QUFDdkM7O0FBRUEsZ0JBQWdCLDBCQUEwQjtBQUNuQztBQUNQLEdBQUcsK0VBQW1CLEdBQUcsbUVBQVk7QUFDckMsR0FBRyw4RUFBa0IsR0FBRyxtRUFBWTtBQUNwQyxHQUFHLHVFQUFXLEdBQUcsbUVBQVk7QUFDN0I7O0FBRUEsZ0JBQWdCLG1CQUFtQjtBQUM1QjtBQUNQLEdBQUcsNEVBQWdCLEdBQUcsaUVBQVU7QUFDaEMsR0FBRywwRUFBYyxHQUFHLG9FQUFhO0FBQ2pDLEdBQUcsc0VBQVUsSUFBSSxzRUFBZSxFQUFFLG9FQUFhO0FBQy9DLEdBQUcsMEVBQWMsR0FBRywrREFBUTtBQUM1QixHQUFHLDBFQUFjLEdBQUcsc0VBQWU7QUFDbkMsR0FBRyw0RUFBZ0IsR0FBRyxvRUFBYTtBQUNuQyxHQUFHLDZFQUFpQixHQUFHLGlFQUFVO0FBQ2pDLEdBQUcsdUVBQVcsR0FBRyxpRUFBVTtBQUMzQjs7QUFFQSxnQkFBZ0IscUJBQXFCO0FBQzlCO0FBQ1AsR0FBRywyRUFBZSxHQUFHLDBFQUFrQjtBQUN2QyxHQUFHLDJFQUFlLEdBQUcsdUVBQWU7QUFDcEM7O0FBRUEsZ0JBQWdCLG1CQUFtQjtBQUM1QjtBQUNQLEdBQUcsZ0ZBQW9CLEdBQUcsa0VBQVU7QUFDcEMsR0FBRywwRUFBYyxHQUFHLGtFQUFVO0FBQzlCLEdBQUcsd0ZBQTRCLEdBQUcsa0VBQVU7QUFDNUMsR0FBRyxpRkFBcUIsR0FBRyx1RUFBZTtBQUMxQyxHQUFHLDJFQUFlLEdBQUcsMEVBQWtCO0FBQ3ZDLEdBQUcsMEVBQWMsR0FBRyxpRUFBUztBQUM3QixHQUFHLDBFQUFjLElBQUksZ0VBQVEsRUFBRSxnRUFBUTtBQUN2QyxHQUFHLG1GQUF1QixHQUFHLHNFQUFjO0FBQzNDLEdBQUcsMkVBQWUsSUFBSSx1RUFBZSxFQUFFLHVFQUFlO0FBQ3RELEdBQUcsb0ZBQXdCLEdBQUcsZ0VBQVE7QUFDdEMsR0FBRyw0RUFBZ0IsR0FBRyxpRUFBUztBQUMvQixHQUFHLDZFQUFpQixHQUFHLGdFQUFRO0FBQy9COztBQUVBLGdCQUFnQix5QkFBeUI7QUFDbEMsb0JBQW9CLE9BQU8saUVBQVMsRUFBRSwwREFBVzs7QUFFeEQsZ0JBQWdCLCtCQUErQjtBQUN4QywwQkFBMEIsT0FBTywwRUFBYyxFQUFFLDRFQUFnQjs7QUFFeEUsZ0JBQWdCLHNCQUFzQjtBQUMvQixpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2NvbnN0cnVjdHMuanM/ZDdiMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXh0ZW5zaW9ufSBFeHRlbnNpb25cbiAqL1xuXG5pbXBvcnQge1xuICBhdHRlbnRpb24sXG4gIGF1dG9saW5rLFxuICBibG9ja1F1b3RlLFxuICBjaGFyYWN0ZXJFc2NhcGUsXG4gIGNoYXJhY3RlclJlZmVyZW5jZSxcbiAgY29kZUZlbmNlZCxcbiAgY29kZUluZGVudGVkLFxuICBjb2RlVGV4dCxcbiAgZGVmaW5pdGlvbixcbiAgaGFyZEJyZWFrRXNjYXBlLFxuICBoZWFkaW5nQXR4LFxuICBodG1sRmxvdyxcbiAgaHRtbFRleHQsXG4gIGxhYmVsRW5kLFxuICBsYWJlbFN0YXJ0SW1hZ2UsXG4gIGxhYmVsU3RhcnRMaW5rLFxuICBsaW5lRW5kaW5nLFxuICBsaXN0LFxuICBzZXRleHRVbmRlcmxpbmUsXG4gIHRoZW1hdGljQnJlYWtcbn0gZnJvbSAnbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyaydcbmltcG9ydCB7Y29kZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb2Rlcy5qcydcbmltcG9ydCB7cmVzb2x2ZXIgYXMgcmVzb2x2ZVRleHR9IGZyb20gJy4vaW5pdGlhbGl6ZS90ZXh0LmpzJ1xuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydkb2N1bWVudCddfSAqL1xuZXhwb3J0IGNvbnN0IGRvY3VtZW50ID0ge1xuICBbY29kZXMuYXN0ZXJpc2tdOiBsaXN0LFxuICBbY29kZXMucGx1c1NpZ25dOiBsaXN0LFxuICBbY29kZXMuZGFzaF06IGxpc3QsXG4gIFtjb2Rlcy5kaWdpdDBdOiBsaXN0LFxuICBbY29kZXMuZGlnaXQxXTogbGlzdCxcbiAgW2NvZGVzLmRpZ2l0Ml06IGxpc3QsXG4gIFtjb2Rlcy5kaWdpdDNdOiBsaXN0LFxuICBbY29kZXMuZGlnaXQ0XTogbGlzdCxcbiAgW2NvZGVzLmRpZ2l0NV06IGxpc3QsXG4gIFtjb2Rlcy5kaWdpdDZdOiBsaXN0LFxuICBbY29kZXMuZGlnaXQ3XTogbGlzdCxcbiAgW2NvZGVzLmRpZ2l0OF06IGxpc3QsXG4gIFtjb2Rlcy5kaWdpdDldOiBsaXN0LFxuICBbY29kZXMuZ3JlYXRlclRoYW5dOiBibG9ja1F1b3RlXG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2NvbnRlbnRJbml0aWFsJ119ICovXG5leHBvcnQgY29uc3QgY29udGVudEluaXRpYWwgPSB7XG4gIFtjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldF06IGRlZmluaXRpb25cbn1cblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnZmxvd0luaXRpYWwnXX0gKi9cbmV4cG9ydCBjb25zdCBmbG93SW5pdGlhbCA9IHtcbiAgW2NvZGVzLmhvcml6b250YWxUYWJdOiBjb2RlSW5kZW50ZWQsXG4gIFtjb2Rlcy52aXJ0dWFsU3BhY2VdOiBjb2RlSW5kZW50ZWQsXG4gIFtjb2Rlcy5zcGFjZV06IGNvZGVJbmRlbnRlZFxufVxuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydmbG93J119ICovXG5leHBvcnQgY29uc3QgZmxvdyA9IHtcbiAgW2NvZGVzLm51bWJlclNpZ25dOiBoZWFkaW5nQXR4LFxuICBbY29kZXMuYXN0ZXJpc2tdOiB0aGVtYXRpY0JyZWFrLFxuICBbY29kZXMuZGFzaF06IFtzZXRleHRVbmRlcmxpbmUsIHRoZW1hdGljQnJlYWtdLFxuICBbY29kZXMubGVzc1RoYW5dOiBodG1sRmxvdyxcbiAgW2NvZGVzLmVxdWFsc1RvXTogc2V0ZXh0VW5kZXJsaW5lLFxuICBbY29kZXMudW5kZXJzY29yZV06IHRoZW1hdGljQnJlYWssXG4gIFtjb2Rlcy5ncmF2ZUFjY2VudF06IGNvZGVGZW5jZWQsXG4gIFtjb2Rlcy50aWxkZV06IGNvZGVGZW5jZWRcbn1cblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnc3RyaW5nJ119ICovXG5leHBvcnQgY29uc3Qgc3RyaW5nID0ge1xuICBbY29kZXMuYW1wZXJzYW5kXTogY2hhcmFjdGVyUmVmZXJlbmNlLFxuICBbY29kZXMuYmFja3NsYXNoXTogY2hhcmFjdGVyRXNjYXBlXG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ3RleHQnXX0gKi9cbmV4cG9ydCBjb25zdCB0ZXh0ID0ge1xuICBbY29kZXMuY2FycmlhZ2VSZXR1cm5dOiBsaW5lRW5kaW5nLFxuICBbY29kZXMubGluZUZlZWRdOiBsaW5lRW5kaW5nLFxuICBbY29kZXMuY2FycmlhZ2VSZXR1cm5MaW5lRmVlZF06IGxpbmVFbmRpbmcsXG4gIFtjb2Rlcy5leGNsYW1hdGlvbk1hcmtdOiBsYWJlbFN0YXJ0SW1hZ2UsXG4gIFtjb2Rlcy5hbXBlcnNhbmRdOiBjaGFyYWN0ZXJSZWZlcmVuY2UsXG4gIFtjb2Rlcy5hc3Rlcmlza106IGF0dGVudGlvbixcbiAgW2NvZGVzLmxlc3NUaGFuXTogW2F1dG9saW5rLCBodG1sVGV4dF0sXG4gIFtjb2Rlcy5sZWZ0U3F1YXJlQnJhY2tldF06IGxhYmVsU3RhcnRMaW5rLFxuICBbY29kZXMuYmFja3NsYXNoXTogW2hhcmRCcmVha0VzY2FwZSwgY2hhcmFjdGVyRXNjYXBlXSxcbiAgW2NvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldF06IGxhYmVsRW5kLFxuICBbY29kZXMudW5kZXJzY29yZV06IGF0dGVudGlvbixcbiAgW2NvZGVzLmdyYXZlQWNjZW50XTogY29kZVRleHRcbn1cblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnaW5zaWRlU3BhbiddfSAqL1xuZXhwb3J0IGNvbnN0IGluc2lkZVNwYW4gPSB7bnVsbDogW2F0dGVudGlvbiwgcmVzb2x2ZVRleHRdfVxuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydhdHRlbnRpb25NYXJrZXJzJ119ICovXG5leHBvcnQgY29uc3QgYXR0ZW50aW9uTWFya2VycyA9IHtudWxsOiBbY29kZXMuYXN0ZXJpc2ssIGNvZGVzLnVuZGVyc2NvcmVdfVxuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydkaXNhYmxlJ119ICovXG5leHBvcnQgY29uc3QgZGlzYWJsZSA9IHtudWxsOiBbXX1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/constructs.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/create-tokenizer.js": /*!*******************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/create-tokenizer.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createTokenizer\": () => (/* binding */ createTokenizer)\n/* harmony export */ });\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ \"../../../node_modules/debug/src/browser.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-resolve-all */ \"../../../node_modules/micromark-util-resolve-all/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-symbol/values.js */ \"../../../node_modules/micromark-util-symbol/values.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {void}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\n\n\n\n\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_0__('micromark')\n\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit | undefined} [from]\n * @returns {TokenizeContext}\n */\nfunction createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from ? Object.assign({}, from) : {line: 1, column: 1, offset: 0},\n {_index: 0, _bufferIndex: -1}\n )\n /** @type {Record} */\n const columnStart = {}\n /** @type {Array} */\n const resolveAllConstructs = []\n /** @type {Array} */\n let chunks = []\n /** @type {Array} */\n let stack = []\n /** @type {boolean | undefined} */\n let consumed = true\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {interrupt: true})\n }\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n previous: micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof,\n code: micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n\n /**\n * The state function.\n *\n * @type {State | void}\n */\n let state = initialize.tokenize.call(context, effects)\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n\n return context\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_3__.push)(chunks, slice)\n\n main()\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.eof) {\n return []\n }\n\n addResult(initialize, 0)\n\n // Otherwise, resolve, and exit.\n context.events = (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_4__.resolveAll)(resolveAllConstructs, context.events, context)\n\n return context.events\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {line, column, offset, _index, _bufferIndex} = point\n return {line, column, offset, _index, _bufferIndex}\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n debug('position: define skip: `%j`', point)\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {void}\n */\n function main() {\n /** @type {number} */\n let chunkIndex\n\n while (point._index < chunks.length) {\n const chunk = chunks[point._index]\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {void}\n */\n function go(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(consumed === true, 'expected character to be consumed')\n consumed = undefined\n debug('main: passing `%s` to %s', code, state && state.name)\n expectedCode = code\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof state === 'function', 'expected state')\n state = state(code)\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(code === expectedCode, 'expected given code to equal expected code')\n\n debug('consume: `%s`', code)\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(\n consumed === undefined,\n 'expected code to not have been consumed: this might be because `return x(code)` instead of `return x` was used'\n )\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(\n code === null\n ? context.events.length === 0 ||\n context.events[context.events.length - 1][0] === 'exit'\n : context.events[context.events.length - 1][0] === 'enter',\n 'expected last token to be open'\n )\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) {\n point.line++\n point.column = 1\n point.offset += code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.carriageReturnLineFeed ? 2 : 1\n accountForPotentialSkip()\n debug('position: after eol: `%j`', point)\n } else if (code !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.virtualSpace) {\n point.column++\n point.offset++\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++\n\n // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n }\n\n // Expose the previous character.\n context.previous = code\n\n // Mark as consumed.\n consumed = true\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof type === 'string', 'expected string type')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(type.length > 0, 'expected non-empty string')\n debug('enter: `%s`', type)\n\n context.events.push(['enter', token, context])\n\n stack.push(token)\n\n return token\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof type === 'string', 'expected string type')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(type.length > 0, 'expected non-empty string')\n\n const token = stack.pop()\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(token, 'cannot close w/o open tokens')\n token.end = now()\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(type === token.type, 'expected exit token to match current token')\n\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(\n !(\n token.start._index === token.end._index &&\n token.start._bufferIndex === token.end._bufferIndex\n ),\n 'expected non-empty token (`' + type + '`)'\n )\n\n debug('exit: `%s`', token.type)\n context.events.push(['exit', token, context])\n\n return token\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n */\n function constructFactory(onreturn, fields) {\n return hook\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | Construct | ConstructRecord} constructs\n * @param {State} returnState\n * @param {State | undefined} [bogusState]\n * @returns {State}\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {Array} */\n let listOfConstructs\n /** @type {number} */\n let constructIndex\n /** @type {Construct} */\n let currentConstruct\n /** @type {Info} */\n let info\n\n return Array.isArray(constructs)\n ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs)\n : 'tokenize' in constructs\n ? // @ts-expect-error Looks like a construct.\n handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n function handleMapOfConstructs(map) {\n return start\n\n /** @type {State} */\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n\n return handleListOfConstructs(list)(code)\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {Array} list\n * @returns {State}\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n\n if (list.length === 0) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(bogusState, 'expected `bogusState` to be given')\n return bogusState\n }\n\n return handleConstruct(list[constructIndex])\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n function handleConstruct(construct) {\n return start\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(\n context.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n\n /** @type {State} */\n function ok(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(code === expectedCode, 'expected code')\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n\n /** @type {State} */\n function nok(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(code === expectedCode, 'expected code')\n consumed = true\n info.restore()\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n\n return bogusState\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {void}\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n\n if (construct.resolve) {\n (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_3__.splice)(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(\n construct.partial ||\n context.events.length === 0 ||\n context.events[context.events.length - 1][0] === 'exit',\n 'expected last token to end'\n )\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n */\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n\n return {restore, from: startEventsIndex}\n\n /**\n * Restore state.\n *\n * @returns {void}\n */\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n debug('position: restore: `%j`', point)\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {void}\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array} chunks\n * @param {Pick} token\n * @returns {Array}\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array} */\n let view\n\n if (startIndex === endIndex) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(endBufferIndex > -1, 'expected non-negative end buffer index')\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(startBufferIndex > -1, 'expected non-negative start buffer index')\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n\n if (startBufferIndex > -1) {\n const head = view[0]\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex)\n } else {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(startBufferIndex === 0, 'expected `startBufferIndex` to be `0`')\n view.shift()\n }\n }\n\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n\n return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array} */\n const result = []\n /** @type {boolean | undefined} */\n let atTab\n\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n let value\n\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.carriageReturn: {\n value = micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.cr\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.lineFeed: {\n value = micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.lf\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.carriageReturnLineFeed: {\n value = micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.cr + micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.lf\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.horizontalTab: {\n value = expandTabs ? micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.space : micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.ht\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.virtualSpace: {\n if (!expandTabs && atTab) continue\n value = micromark_util_symbol_values_js__WEBPACK_IMPORTED_MODULE_6__.values.space\n\n break\n }\n\n default: {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof chunk === 'number', 'expected number')\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n\n atTab = chunk === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_2__.codes.horizontalTab\n result.push(value)\n }\n\n return result.join('')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsaURBQWlEO0FBQzlELGFBQWEsNkNBQTZDO0FBQzFELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsZ0RBQWdEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGNBQWMsU0FBUztBQUN2QixjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsTUFBTTtBQUNqQixhQUFhO0FBQ2I7O0FBRStCO0FBQzRCO0FBQ1I7QUFDRTtBQUNEO0FBQ0U7QUFDZjs7QUFFdkMsY0FBYyxrQ0FBVzs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsb0RBQW9EO0FBQy9ELGFBQWE7QUFDYjtBQUNPO0FBQ1AsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsMkJBQTJCLFdBQVcsOEJBQThCO0FBQ3BFLEtBQUs7QUFDTDtBQUNBLGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsZ0JBQWdCO0FBQ3BFOztBQUVBO0FB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QjtBQUMvQjtBQUNBLGtCQUFrQix5RUFBWTs7QUFFOUI7QUFDQTs7QUFFQTtBQUNBLFVBQVUsOENBQU07QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLCtFQUFtQjtBQUN6QztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2NyZWF0ZS10b2tlbml6ZXIuanM/YTMxMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ2h1bmt9IENodW5rXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0UmVjb3JkfSBDb25zdHJ1Y3RSZWNvcmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsQ29uc3RydWN0fSBJbml0aWFsQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBhcnNlQ29udGV4dH0gUGFyc2VDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgUmVzdG9yZVxuICogQHJldHVybnMge3ZvaWR9XG4gKlxuICogQHR5cGVkZWYgSW5mb1xuICogQHByb3BlcnR5IHtSZXN0b3JlfSByZXN0b3JlXG4gKiBAcHJvcGVydHkge251bWJlcn0gZnJvbVxuICpcbiAqIEBjYWxsYmFjayBSZXR1cm5IYW5kbGVcbiAqICAgSGFuZGxlIGEgc3VjY2Vzc2Z1bCBydW4uXG4gKiBAcGFyYW0ge0NvbnN0cnVjdH0gY29uc3RydWN0XG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbmltcG9ydCBjcmVhdGVEZWJ1ZyBmcm9tICdkZWJ1ZydcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge3B1c2gsIHNwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcbmltcG9ydCB7cmVzb2x2ZUFsbH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwnXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL3ZhbHVlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCdtaWNyb21hcmsnKVxuXG4vKipcbiAqIENyZWF0ZSBhIHRva2VuaXplci5cbiAqIFRva2VuaXplcnMgZGVhbCB3aXRoIG9uZSB0eXBlIG9mIGRhdGEgKGUuZy4sIGNvbnRhaW5lcnMsIGZsb3csIHRleHQpLlxuICogVGhlIHBhcnNlciBpcyB0aGUgb2JqZWN0IGRlYWxpbmcgd2l0aCBpdCBhbGwuXG4gKiBgaW5pdGlhbGl6ZWAgd29ya3MgbGlrZSBvdGhlciBjb25zdHJ1Y3RzLCBleGNlcHQgdGhhdCBvbmx5IGl0cyBgdG9rZW5pemVgXG4gKiBmdW5jdGlvbiBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IGRvZXNu4oCZdCByZWNlaXZlIGFuIGBva2Agb3IgYG5va2AuXG4gKiBgZnJvbWAgY2FuIGJlIGdpdmVuIHRvIHNldCB0aGUgcG9pbnQgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIGFsdGhvdWdoXG4gKiB3aGVuIGZ1cnRoZXIgbGluZXMgYXJlIGluZGVudGVkLCB0aGV5IG11c3QgYmUgc2V0IHdpdGggYGRlZmluZVNraXBgLlxuICpcbiAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBwYXJzZXJcbiAqIEBwYXJhbSB7SW5pdGlhbENvbnN0cnVjdH0gaW5pdGlhbGl6ZVxuICogQHBhcmFtIHtPbWl0PFBvaW50LCAnX2J1ZmZlckluZGV4JyB8ICdfaW5kZXgnPiB8IHVuZGVmaW5lZH0gW2Zyb21dXG4gKiBAcmV0dXJucyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbGl6ZSwgZnJvbSkge1xuICAvKiogQHR5cGUge1BvaW50fSAqL1xuICBsZXQgcG9pbnQgPSBPYmplY3QuYXNzaWduKFxuICAgIGZyb20gPyBPYmplY3QuYXNzaWduKHt9LCBmcm9tKSA6IHtsaW5lOiAxLCBjb2x1bW46IDEsIG9mZnNldDogMH0sXG4gICAge19pbmRleDogMCwgX2J1ZmZlckluZGV4OiAtMX1cbiAgKVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIG51bWJlcj59ICovXG4gIGNvbnN0IGNvbHVtblN0YXJ0ID0ge31cbiAgLyoqIEB0eXBlIHtBcnJheTxDb25zdHJ1Y3Q+fSAqL1xuICBjb25zdCByZXNvbHZlQWxsQ29uc3RydWN0cyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICBsZXQgY2h1bmtzID0gW11cbiAgLyoqIEB0eXBlIHtBcnJheTxUb2tlbj59ICovXG4gIGxldCBzdGFjayA9IFtdXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNvbnN1bWVkID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBUb29scyB1c2VkIGZvciB0b2tlbml6aW5nLlxuICAgKlxuICAgKiBAdHlwZSB7RWZmZWN0c31cbiAgICovXG4gIGNvbnN0IGVmZmVjdHMgPSB7XG4gICAgY29uc3VtZSxcbiAgICBlbnRlcixcbiAgICBleGl0LFxuICAgIGF0dGVtcHQ6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY29uc3RydWN0KSxcbiAgICBjaGVjazogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjaGVjayksXG4gICAgaW50ZXJydXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrLCB7aW50ZXJydXB0OiB0cnVlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZSBhbmQgdG9vbHMgZm9yIHJlc29sdmluZyBhbmQgc2VyaWFsaXppbmcuXG4gICAqXG4gICAqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHR9XG4gICAqL1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIHByZXZpb3VzOiBjb2Rlcy5lb2YsXG4gICAgY29kZTogY29kZXMuZW9mLFxuICAgIGNvbnRhaW5lclN0YXRlOiB7fSxcbiAgICBldmVudHM6IFtdLFxuICAgIHBhcnNlcixcbiAgICBzbGljZVN0cmVhbSxcbiAgICBzbGljZVNlcmlhbGl6ZSxcbiAgICBub3csXG4gICAgZGVmaW5lU2tpcCxcbiAgICB3cml0ZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHR5cGUge1N0YXRlIHwgdm9pZH1cbiAgICovXG4gIGxldCBzdGF0ZSA9IGluaXRpYWxpemUudG9rZW5pemUuY2FsbChjb250ZXh0LCBlZmZlY3RzKVxuXG4gIC8qKlxuICAgKiBUcmFjayB3aGljaCBjaGFyYWN0ZXIgd2UgZXhwZWN0IHRvIGJlIGNvbnN1bWVkLCB0byBjYXRjaCBidWdzLlxuICAgKlxuICAgKiBAdHlwZSB7Q29kZX1cbiAgICovXG4gIGxldCBleHBlY3RlZENvZGVcblxuICBpZiAoaW5pdGlhbGl6ZS5yZXNvbHZlQWxsKSB7XG4gICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChpbml0aWFsaXplKVxuICB9XG5cbiAgcmV0dXJuIGNvbnRleHRcblxuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dFsnd3JpdGUnXX0gKi9cbiAgZnVuY3Rpb24gd3JpdGUoc2xpY2UpIHtcbiAgICBjaHVua3MgPSBwdXNoKGNodW5rcywgc2xpY2UpXG5cbiAgICBtYWluKClcblxuICAgIC8vIEV4aXQgaWYgd2XigJlyZSBub3QgZG9uZSwgcmVzb2x2ZSBtaWdodCBjaGFuZ2Ugc3R1ZmYuXG4gICAgaWYgKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0gIT09IGNvZGVzLmVvZikge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgYWRkUmVzdWx0KGluaXRpYWxpemUsIDApXG5cbiAgICAvLyBPdGhlcndpc2UsIHJlc29sdmUsIGFuZCBleGl0LlxuICAgIGNvbnRleHQuZXZlbnRzID0gcmVzb2x2ZUFsbChyZXNvbHZlQWxsQ29uc3RydWN0cywgY29udGV4dC5ldmVudHMsIGNvbnRleHQpXG5cbiAgICByZXR1cm4gY29udGV4dC5ldmVudHNcbiAgfVxuXG4gIC8vXG4gIC8vIFRvb2xzLlxuICAvL1xuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0WydzbGljZVNlcmlhbGl6ZSddfSAqL1xuICBmdW5jdGlvbiBzbGljZVNlcmlhbGl6ZSh0b2tlbiwgZXhwYW5kVGFicykge1xuICAgIHJldHVybiBzZXJpYWxpemVDaHVua3Moc2xpY2VTdHJlYW0odG9rZW4pLCBleHBhbmRUYWJzKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHRbJ3NsaWNlU3RyZWFtJ119ICovXG4gIGZ1bmN0aW9uIHNsaWNlU3RyZWFtKHRva2VuKSB7XG4gICAgcmV0dXJuIHNsaWNlQ2h1bmtzKGNodW5rcywgdG9rZW4pXG4gIH1cblxuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dFsnbm93J119ICovXG4gIGZ1bmN0aW9uIG5vdygpIHtcbiAgICAvLyBUaGlzIGlzIGEgaG90IHBhdGgsIHNvIHdlIGNsb25lIG1hbnVhbGx5IGluc3RlYWQgb2YgYE9iamVjdC5hc3NpZ24oe30sIHBvaW50KWBcbiAgICBjb25zdCB7bGluZSwgY29sdW1uLCBvZmZzZXQsIF9pbmRleCwgX2J1ZmZlckluZGV4fSA9IHBvaW50XG4gICAgcmV0dXJuIHtsaW5lLCBjb2x1bW4sIG9mZnNldCwgX2luZGV4LCBfYnVmZmVySW5kZXh9XG4gIH1cblxuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dFsnZGVmaW5lU2tpcCddfSAqL1xuICBmdW5jdGlvbiBkZWZpbmVTa2lwKHZhbHVlKSB7XG4gICAgY29sdW1uU3RhcnRbdmFsdWUubGluZV0gPSB2YWx1ZS5jb2x1bW5cbiAgICBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpXG4gICAgZGVidWcoJ3Bvc2l0aW9uOiBkZWZpbmUgc2tpcDogYCVqYCcsIHBvaW50KVxuICB9XG5cbiAgLy9cbiAgLy8gU3RhdGUgbWFuYWdlbWVudC5cbiAgLy9cblxuICAvKipcbiAgICogTWFpbiBsb29wIChub3RlIHRoYXQgYF9pbmRleGAgYW5kIGBfYnVmZmVySW5kZXhgIGluIGBwb2ludGAgYXJlIG1vZGlmaWVkIGJ5XG4gICAqIGBjb25zdW1lYCkuXG4gICAqIEhlcmUgaXMgd2hlcmUgd2Ugd2FsayB0aHJvdWdoIHRoZSBjaHVua3MsIHdoaWNoIGVpdGhlciBpbmNsdWRlIHN0cmluZ3Mgb2ZcbiAgICogc2V2ZXJhbCBjaGFyYWN0ZXJzLCBvciBudW1lcmljYWwgY2hhcmFjdGVyIGNvZGVzLlxuICAgKiBUaGUgcmVhc29uIHRvIGRvIHRoaXMgaW4gYSBsb29wIGluc3RlYWQgb2YgYSBjYWxsIGlzIHNvIHRoZSBzdGFjayBjYW5cbiAgICogZHJhaW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gbWFpbigpIHtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgY2h1bmtJbmRleFxuXG4gICAgd2hpbGUgKHBvaW50Ll9pbmRleCA8IGNodW5rcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW3BvaW50Ll9pbmRleF1cblxuICAgICAgLy8gSWYgd2XigJlyZSBpbiBhIGJ1ZmZlciBjaHVuaywgbG9vcCB0aHJvdWdoIGl0LlxuICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2h1bmtJbmRleCA9IHBvaW50Ll9pbmRleFxuXG4gICAgICAgIGlmIChwb2ludC5fYnVmZmVySW5kZXggPCAwKSB7XG4gICAgICAgICAgcG9pbnQuX2J1ZmZlckluZGV4ID0gMFxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgIHBvaW50Ll9pbmRleCA9PT0gY2h1bmtJbmRleCAmJlxuICAgICAgICAgIHBvaW50Ll9idWZmZXJJbmRleCA8IGNodW5rLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBnbyhjaHVuay5jaGFyQ29kZUF0KHBvaW50Ll9idWZmZXJJbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdvKGNodW5rKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFsIHdpdGggb25lIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGdvKGNvZGUpIHtcbiAgICBhc3NlcnQoY29uc3VtZWQgPT09IHRydWUsICdleHBlY3RlZCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQnKVxuICAgIGNvbnN1bWVkID0gdW5kZWZpbmVkXG4gICAgZGVidWcoJ21haW46IHBhc3NpbmcgYCVzYCB0byAlcycsIGNvZGUsIHN0YXRlICYmIHN0YXRlLm5hbWUpXG4gICAgZXhwZWN0ZWRDb2RlID0gY29kZVxuICAgIGFzc2VydCh0eXBlb2Ygc3RhdGUgPT09ICdmdW5jdGlvbicsICdleHBlY3RlZCBzdGF0ZScpXG4gICAgc3RhdGUgPSBzdGF0ZShjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFZmZlY3RzWydjb25zdW1lJ119ICovXG4gIGZ1bmN0aW9uIGNvbnN1bWUoY29kZSkge1xuICAgIGFzc2VydChjb2RlID09PSBleHBlY3RlZENvZGUsICdleHBlY3RlZCBnaXZlbiBjb2RlIHRvIGVxdWFsIGV4cGVjdGVkIGNvZGUnKVxuXG4gICAgZGVidWcoJ2NvbnN1bWU6IGAlc2AnLCBjb2RlKVxuXG4gICAgYXNzZXJ0KFxuICAgICAgY29uc3VtZWQgPT09IHVuZGVmaW5lZCxcbiAgICAgICdleHBlY3RlZCBjb2RlIHRvIG5vdCBoYXZlIGJlZW4gY29uc3VtZWQ6IHRoaXMgbWlnaHQgYmUgYmVjYXVzZSBgcmV0dXJuIHgoY29kZSlgIGluc3RlYWQgb2YgYHJldHVybiB4YCB3YXMgdXNlZCdcbiAgICApXG4gICAgYXNzZXJ0KFxuICAgICAgY29kZSA9PT0gbnVsbFxuICAgICAgICA/IGNvbnRleHQuZXZlbnRzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgY29udGV4dC5ldmVudHNbY29udGV4dC5ldmVudHMubGVuZ3RoIC0gMV1bMF0gPT09ICdleGl0J1xuICAgICAgICA6IGNvbnRleHQuZXZlbnRzW2NvbnRleHQuZXZlbnRzLmxlbmd0aCAtIDFdWzBdID09PSAnZW50ZXInLFxuICAgICAgJ2V4cGVjdGVkIGxhc3QgdG9rZW4gdG8gYmUgb3BlbidcbiAgICApXG5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBwb2ludC5saW5lKytcbiAgICAgIHBvaW50LmNvbHVtbiA9IDFcbiAgICAgIHBvaW50Lm9mZnNldCArPSBjb2RlID09PSBjb2Rlcy5jYXJyaWFnZVJldHVybkxpbmVGZWVkID8gMiA6IDFcbiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKClcbiAgICAgIGRlYnVnKCdwb3NpdGlvbjogYWZ0ZXIgZW9sOiBgJWpgJywgcG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSBjb2Rlcy52aXJ0dWFsU3BhY2UpIHtcbiAgICAgIHBvaW50LmNvbHVtbisrXG4gICAgICBwb2ludC5vZmZzZXQrK1xuICAgIH1cblxuICAgIC8vIE5vdCBpbiBhIHN0cmluZyBjaHVuay5cbiAgICBpZiAocG9pbnQuX2J1ZmZlckluZGV4IDwgMCkge1xuICAgICAgcG9pbnQuX2luZGV4KytcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnQuX2J1ZmZlckluZGV4KytcblxuICAgICAgLy8gQXQgZW5kIG9mIHN0cmluZyBjaHVuay5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUG9pbnRzIHcvIG5vbi1uZWdhdGl2ZSBgX2J1ZmZlckluZGV4YCByZWZlcmVuY2VcbiAgICAgIC8vIHN0cmluZ3MuXG4gICAgICBpZiAocG9pbnQuX2J1ZmZlckluZGV4ID09PSBjaHVua3NbcG9pbnQuX2luZGV4XS5sZW5ndGgpIHtcbiAgICAgICAgcG9pbnQuX2J1ZmZlckluZGV4ID0gLTFcbiAgICAgICAgcG9pbnQuX2luZGV4KytcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci5cbiAgICBjb250ZXh0LnByZXZpb3VzID0gY29kZVxuXG4gICAgLy8gTWFyayBhcyBjb25zdW1lZC5cbiAgICBjb25zdW1lZCA9IHRydWVcbiAgfVxuXG4gIC8qKiBAdHlwZSB7RWZmZWN0c1snZW50ZXInXX0gKi9cbiAgZnVuY3Rpb24gZW50ZXIodHlwZSwgZmllbGRzKSB7XG4gICAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBhdGNoIGluc3RlYWQgb2YgYXNzaWduIHJlcXVpcmVkIGZpZWxkcyB0byBoZWxwIEdDLlxuICAgIGNvbnN0IHRva2VuID0gZmllbGRzIHx8IHt9XG4gICAgdG9rZW4udHlwZSA9IHR5cGVcbiAgICB0b2tlbi5zdGFydCA9IG5vdygpXG5cbiAgICBhc3NlcnQodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAnZXhwZWN0ZWQgc3RyaW5nIHR5cGUnKVxuICAgIGFzc2VydCh0eXBlLmxlbmd0aCA+IDAsICdleHBlY3RlZCBub24tZW1wdHkgc3RyaW5nJylcbiAgICBkZWJ1ZygnZW50ZXI6IGAlc2AnLCB0eXBlKVxuXG4gICAgY29udGV4dC5ldmVudHMucHVzaChbJ2VudGVyJywgdG9rZW4sIGNvbnRleHRdKVxuXG4gICAgc3RhY2sucHVzaCh0b2tlbilcblxuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLyoqIEB0eXBlIHtFZmZlY3RzWydleGl0J119ICovXG4gIGZ1bmN0aW9uIGV4aXQodHlwZSkge1xuICAgIGFzc2VydCh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycsICdleHBlY3RlZCBzdHJpbmcgdHlwZScpXG4gICAgYXNzZXJ0KHR5cGUubGVuZ3RoID4gMCwgJ2V4cGVjdGVkIG5vbi1lbXB0eSBzdHJpbmcnKVxuXG4gICAgY29uc3QgdG9rZW4gPSBzdGFjay5wb3AoKVxuICAgIGFzc2VydCh0b2tlbiwgJ2Nhbm5vdCBjbG9zZSB3L28gb3BlbiB0b2tlbnMnKVxuICAgIHRva2VuLmVuZCA9IG5vdygpXG5cbiAgICBhc3NlcnQodHlwZSA9PT0gdG9rZW4udHlwZSwgJ2V4cGVjdGVkIGV4aXQgdG9rZW4gdG8gbWF0Y2ggY3VycmVudCB0b2tlbicpXG5cbiAgICBhc3NlcnQoXG4gICAgICAhKFxuICAgICAgICB0b2tlbi5zdGFydC5faW5kZXggPT09IHRva2VuLmVuZC5faW5kZXggJiZcbiAgICAgICAgdG9rZW4uc3RhcnQuX2J1ZmZlckluZGV4ID09PSB0b2tlbi5lbmQuX2J1ZmZlckluZGV4XG4gICAgICApLFxuICAgICAgJ2V4cGVjdGVkIG5vbi1lbXB0eSB0b2tlbiAoYCcgKyB0eXBlICsgJ2ApJ1xuICAgIClcblxuICAgIGRlYnVnKCdleGl0OiBgJXNgJywgdG9rZW4udHlwZSlcbiAgICBjb250ZXh0LmV2ZW50cy5wdXNoKFsnZXhpdCcsIHRva2VuLCBjb250ZXh0XSlcblxuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSByZXN1bHRzLlxuICAgKlxuICAgKiBAdHlwZSB7UmV0dXJuSGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25zdWNjZXNzZnVsY29uc3RydWN0KGNvbnN0cnVjdCwgaW5mbykge1xuICAgIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGluZm8uZnJvbSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkIHJlc3VsdHMuXG4gICAqXG4gICAqIEB0eXBlIHtSZXR1cm5IYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjaGVjayhfLCBpbmZvKSB7XG4gICAgaW5mby5yZXN0b3JlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHRvIGF0dGVtcHQvY2hlY2svaW50ZXJydXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge1JldHVybkhhbmRsZX0gb25yZXR1cm5cbiAgICogQHBhcmFtIHt7aW50ZXJydXB0PzogYm9vbGVhbiB8IHVuZGVmaW5lZH0gfCB1bmRlZmluZWR9IFtmaWVsZHNdXG4gICAqL1xuICBmdW5jdGlvbiBjb25zdHJ1Y3RGYWN0b3J5KG9ucmV0dXJuLCBmaWVsZHMpIHtcbiAgICByZXR1cm4gaG9va1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGVpdGhlciBhbiBvYmplY3QgbWFwcGluZyBjb2RlcyB0byBjb25zdHJ1Y3RzLCBhIGxpc3Qgb2ZcbiAgICAgKiBjb25zdHJ1Y3RzLCBvciBhIHNpbmdsZSBjb25zdHJ1Y3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PENvbnN0cnVjdD4gfCBDb25zdHJ1Y3QgfCBDb25zdHJ1Y3RSZWNvcmR9IGNvbnN0cnVjdHNcbiAgICAgKiBAcGFyYW0ge1N0YXRlfSByZXR1cm5TdGF0ZVxuICAgICAqIEBwYXJhbSB7U3RhdGUgfCB1bmRlZmluZWR9IFtib2d1c1N0YXRlXVxuICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBob29rKGNvbnN0cnVjdHMsIHJldHVyblN0YXRlLCBib2d1c1N0YXRlKSB7XG4gICAgICAvKiogQHR5cGUge0FycmF5PENvbnN0cnVjdD59ICovXG4gICAgICBsZXQgbGlzdE9mQ29uc3RydWN0c1xuICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgICBsZXQgY29uc3RydWN0SW5kZXhcbiAgICAgIC8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuICAgICAgbGV0IGN1cnJlbnRDb25zdHJ1Y3RcbiAgICAgIC8qKiBAdHlwZSB7SW5mb30gKi9cbiAgICAgIGxldCBpbmZvXG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbnN0cnVjdHMpXG4gICAgICAgID8gLyogYzggaWdub3JlIG5leHQgMSAqL1xuICAgICAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoY29uc3RydWN0cylcbiAgICAgICAgOiAndG9rZW5pemUnIGluIGNvbnN0cnVjdHNcbiAgICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYSBjb25zdHJ1Y3QuXG4gICAgICAgICAgaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhbY29uc3RydWN0c10pXG4gICAgICAgIDogaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMpXG5cbiAgICAgIC8qKlxuICAgICAgICogSGFuZGxlIGEgbGlzdCBvZiBjb25zdHJ1Y3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtDb25zdHJ1Y3RSZWNvcmR9IG1hcFxuICAgICAgICogQHJldHVybnMge1N0YXRlfVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMobWFwKSB7XG4gICAgICAgIHJldHVybiBzdGFydFxuXG4gICAgICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAgICAgICBjb25zdCBkZWYgPSBjb2RlICE9PSBudWxsICYmIG1hcFtjb2RlXVxuICAgICAgICAgIGNvbnN0IGFsbCA9IGNvZGUgIT09IG51bGwgJiYgbWFwLm51bGxcbiAgICAgICAgICBjb25zdCBsaXN0ID0gW1xuICAgICAgICAgICAgLy8gVG8gZG86IGFkZCBtb3JlIGV4dGVuc2lvbiB0ZXN0cy5cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi9cbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KGRlZikgPyBkZWYgOiBkZWYgPyBbZGVmXSA6IFtdKSxcbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KGFsbCkgPyBhbGwgOiBhbGwgPyBbYWxsXSA6IFtdKVxuICAgICAgICAgIF1cblxuICAgICAgICAgIHJldHVybiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3QpKGNvZGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgYSBsaXN0IG9mIGNvbnN0cnVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0FycmF5PENvbnN0cnVjdD59IGxpc3RcbiAgICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0KSB7XG4gICAgICAgIGxpc3RPZkNvbnN0cnVjdHMgPSBsaXN0XG4gICAgICAgIGNvbnN0cnVjdEluZGV4ID0gMFxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGFzc2VydChib2d1c1N0YXRlLCAnZXhwZWN0ZWQgYGJvZ3VzU3RhdGVgIHRvIGJlIGdpdmVuJylcbiAgICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdChsaXN0W2NvbnN0cnVjdEluZGV4XSlcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgYSBzaW5nbGUgY29uc3RydWN0LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Q29uc3RydWN0fSBjb25zdHJ1Y3RcbiAgICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaGFuZGxlQ29uc3RydWN0KGNvbnN0cnVjdCkge1xuICAgICAgICByZXR1cm4gc3RhcnRcblxuICAgICAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICAgICAgLy8gVG8gZG86IG5vdCBuZWVkZWQgdG8gc3RvcmUgaWYgdGhlcmUgaXMgbm8gYm9ndXMgc3RhdGUsIHByb2JhYmx5P1xuICAgICAgICAgIC8vIEN1cnJlbnRseSBkb2VzbuKAmXQgd29yayBiZWNhdXNlIGBpbnNwZWN0YCBpbiBkb2N1bWVudCBkb2VzIGEgY2hlY2tcbiAgICAgICAgICAvLyB3L28gYSBib2d1cywgd2hpY2ggZG9lc27igJl0IG1ha2Ugc2Vuc2UuIEJ1dCBpdCBkb2VzIHNlZW0gdG8gaGVscCBwZXJmXG4gICAgICAgICAgLy8gYnkgbm90IHN0b3JpbmcuXG4gICAgICAgICAgaW5mbyA9IHN0b3JlKClcbiAgICAgICAgICBjdXJyZW50Q29uc3RydWN0ID0gY29uc3RydWN0XG5cbiAgICAgICAgICBpZiAoIWNvbnN0cnVjdC5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLFxuICAgICAgICAgICAgJ2V4cGVjdGVkIGBkaXNhYmxlLm51bGxgIHRvIGJlIHBvcHVsYXRlZCdcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25zdHJ1Y3QubmFtZSAmJlxuICAgICAgICAgICAgY29udGV4dC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoY29uc3RydWN0Lm5hbWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdC50b2tlbml6ZS5jYWxsKFxuICAgICAgICAgICAgLy8gSWYgd2UgZG8gaGF2ZSBmaWVsZHMsIGNyZWF0ZSBhbiBvYmplY3Qgdy8gYGNvbnRleHRgIGFzIGl0c1xuICAgICAgICAgICAgLy8gcHJvdG90eXBlLlxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgYSDigJxsaXZlIGJpbmRpbmfigJ0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgYGludGVycnVwdGAuXG4gICAgICAgICAgICBmaWVsZHMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoY29udGV4dCksIGZpZWxkcykgOiBjb250ZXh0LFxuICAgICAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgICAgIG9rLFxuICAgICAgICAgICAgbm9rXG4gICAgICAgICAgKShjb2RlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgICBmdW5jdGlvbiBvayhjb2RlKSB7XG4gICAgICAgIGFzc2VydChjb2RlID09PSBleHBlY3RlZENvZGUsICdleHBlY3RlZCBjb2RlJylcbiAgICAgICAgY29uc3VtZWQgPSB0cnVlXG4gICAgICAgIG9ucmV0dXJuKGN1cnJlbnRDb25zdHJ1Y3QsIGluZm8pXG4gICAgICAgIHJldHVybiByZXR1cm5TdGF0ZVxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgICAgZnVuY3Rpb24gbm9rKGNvZGUpIHtcbiAgICAgICAgYXNzZXJ0KGNvZGUgPT09IGV4cGVjdGVkQ29kZSwgJ2V4cGVjdGVkIGNvZGUnKVxuICAgICAgICBjb25zdW1lZCA9IHRydWVcbiAgICAgICAgaW5mby5yZXN0b3JlKClcblxuICAgICAgICBpZiAoKytjb25zdHJ1Y3RJbmRleCA8IGxpc3RPZkNvbnN0cnVjdHMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdChsaXN0T2ZDb25zdHJ1Y3RzW2NvbnN0cnVjdEluZGV4XSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBib2d1c1N0YXRlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0fSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiBhZGRSZXN1bHQoY29uc3RydWN0LCBmcm9tKSB7XG4gICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlQWxsICYmICFyZXNvbHZlQWxsQ29uc3RydWN0cy5pbmNsdWRlcyhjb25zdHJ1Y3QpKSB7XG4gICAgICByZXNvbHZlQWxsQ29uc3RydWN0cy5wdXNoKGNvbnN0cnVjdClcbiAgICB9XG5cbiAgICBpZiAoY29uc3RydWN0LnJlc29sdmUpIHtcbiAgICAgIHNwbGljZShcbiAgICAgICAgY29udGV4dC5ldmVudHMsXG4gICAgICAgIGZyb20sXG4gICAgICAgIGNvbnRleHQuZXZlbnRzLmxlbmd0aCAtIGZyb20sXG4gICAgICAgIGNvbnN0cnVjdC5yZXNvbHZlKGNvbnRleHQuZXZlbnRzLnNsaWNlKGZyb20pLCBjb250ZXh0KVxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZVRvKSB7XG4gICAgICBjb250ZXh0LmV2ZW50cyA9IGNvbnN0cnVjdC5yZXNvbHZlVG8oY29udGV4dC5ldmVudHMsIGNvbnRleHQpXG4gICAgfVxuXG4gICAgYXNzZXJ0KFxuICAgICAgY29uc3RydWN0LnBhcnRpYWwgfHxcbiAgICAgICAgY29udGV4dC5ldmVudHMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGNvbnRleHQuZXZlbnRzW2NvbnRleHQuZXZlbnRzLmxlbmd0aCAtIDFdWzBdID09PSAnZXhpdCcsXG4gICAgICAnZXhwZWN0ZWQgbGFzdCB0b2tlbiB0byBlbmQnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7SW5mb31cbiAgICovXG4gIGZ1bmN0aW9uIHN0b3JlKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBub3coKVxuICAgIGNvbnN0IHN0YXJ0UHJldmlvdXMgPSBjb250ZXh0LnByZXZpb3VzXG4gICAgY29uc3Qgc3RhcnRDdXJyZW50Q29uc3RydWN0ID0gY29udGV4dC5jdXJyZW50Q29uc3RydWN0XG4gICAgY29uc3Qgc3RhcnRFdmVudHNJbmRleCA9IGNvbnRleHQuZXZlbnRzLmxlbmd0aFxuICAgIGNvbnN0IHN0YXJ0U3RhY2sgPSBBcnJheS5mcm9tKHN0YWNrKVxuXG4gICAgcmV0dXJuIHtyZXN0b3JlLCBmcm9tOiBzdGFydEV2ZW50c0luZGV4fVxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICBwb2ludCA9IHN0YXJ0UG9pbnRcbiAgICAgIGNvbnRleHQucHJldmlvdXMgPSBzdGFydFByZXZpb3VzXG4gICAgICBjb250ZXh0LmN1cnJlbnRDb25zdHJ1Y3QgPSBzdGFydEN1cnJlbnRDb25zdHJ1Y3RcbiAgICAgIGNvbnRleHQuZXZlbnRzLmxlbmd0aCA9IHN0YXJ0RXZlbnRzSW5kZXhcbiAgICAgIHN0YWNrID0gc3RhcnRTdGFja1xuICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKVxuICAgICAgZGVidWcoJ3Bvc2l0aW9uOiByZXN0b3JlOiBgJWpgJywgcG9pbnQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGN1cnJlbnQgcG9pbnQgYSBiaXQgZm9yd2FyZCBpbiB0aGUgbGluZSB3aGVuIGl04oCZcyBvbiBhIGNvbHVtblxuICAgKiBza2lwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCkge1xuICAgIGlmIChwb2ludC5saW5lIGluIGNvbHVtblN0YXJ0ICYmIHBvaW50LmNvbHVtbiA8IDIpIHtcbiAgICAgIHBvaW50LmNvbHVtbiA9IGNvbHVtblN0YXJ0W3BvaW50LmxpbmVdXG4gICAgICBwb2ludC5vZmZzZXQgKz0gY29sdW1uU3RhcnRbcG9pbnQubGluZV0gLSAxXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaHVua3MgZnJvbSBhIHNsaWNlIG9mIGNodW5rcyBpbiB0aGUgcmFuZ2Ugb2YgYSB0b2tlbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PENodW5rPn0gY2h1bmtzXG4gKiBAcGFyYW0ge1BpY2s8VG9rZW4sICdlbmQnIHwgJ3N0YXJ0Jz59IHRva2VuXG4gKiBAcmV0dXJucyB7QXJyYXk8Q2h1bms+fVxuICovXG5mdW5jdGlvbiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKSB7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSB0b2tlbi5zdGFydC5faW5kZXhcbiAgY29uc3Qgc3RhcnRCdWZmZXJJbmRleCA9IHRva2VuLnN0YXJ0Ll9idWZmZXJJbmRleFxuICBjb25zdCBlbmRJbmRleCA9IHRva2VuLmVuZC5faW5kZXhcbiAgY29uc3QgZW5kQnVmZmVySW5kZXggPSB0b2tlbi5lbmQuX2J1ZmZlckluZGV4XG4gIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICBsZXQgdmlld1xuXG4gIGlmIChzdGFydEluZGV4ID09PSBlbmRJbmRleCkge1xuICAgIGFzc2VydChlbmRCdWZmZXJJbmRleCA+IC0xLCAnZXhwZWN0ZWQgbm9uLW5lZ2F0aXZlIGVuZCBidWZmZXIgaW5kZXgnKVxuICAgIGFzc2VydChzdGFydEJ1ZmZlckluZGV4ID4gLTEsICdleHBlY3RlZCBub24tbmVnYXRpdmUgc3RhcnQgYnVmZmVyIGluZGV4JylcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBfYnVmZmVySW5kZXhgIGlzIHVzZWQgb24gc3RyaW5nIGNodW5rcy5cbiAgICB2aWV3ID0gW2NodW5rc1tzdGFydEluZGV4XS5zbGljZShzdGFydEJ1ZmZlckluZGV4LCBlbmRCdWZmZXJJbmRleCldXG4gIH0gZWxzZSB7XG4gICAgdmlldyA9IGNodW5rcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleClcblxuICAgIGlmIChzdGFydEJ1ZmZlckluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGhlYWQgPSB2aWV3WzBdXG4gICAgICBpZiAodHlwZW9mIGhlYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZpZXdbMF0gPSBoZWFkLnNsaWNlKHN0YXJ0QnVmZmVySW5kZXgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoc3RhcnRCdWZmZXJJbmRleCA9PT0gMCwgJ2V4cGVjdGVkIGBzdGFydEJ1ZmZlckluZGV4YCB0byBiZSBgMGAnKVxuICAgICAgICB2aWV3LnNoaWZ0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kQnVmZmVySW5kZXggPiAwKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBfYnVmZmVySW5kZXhgIGlzIHVzZWQgb24gc3RyaW5nIGNodW5rcy5cbiAgICAgIHZpZXcucHVzaChjaHVua3NbZW5kSW5kZXhdLnNsaWNlKDAsIGVuZEJ1ZmZlckluZGV4KSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmlld1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgc2xpY2Ugb2YgY2h1bmtzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8Q2h1bms+fSBjaHVua3NcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gW2V4cGFuZFRhYnM9ZmFsc2VdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVDaHVua3MoY2h1bmtzLCBleHBhbmRUYWJzKSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYXRUYWJcblxuICB3aGlsZSAoKytpbmRleCA8IGNodW5rcy5sZW5ndGgpIHtcbiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpbmRleF1cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgdmFsdWVcblxuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IGNodW5rXG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKGNodW5rKSB7XG4gICAgICAgIGNhc2UgY29kZXMuY2FycmlhZ2VSZXR1cm46IHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy5jclxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgY29kZXMubGluZUZlZWQ6IHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy5sZlxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgY29kZXMuY2FycmlhZ2VSZXR1cm5MaW5lRmVlZDoge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmNyICsgdmFsdWVzLmxmXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBjb2Rlcy5ob3Jpem9udGFsVGFiOiB7XG4gICAgICAgICAgdmFsdWUgPSBleHBhbmRUYWJzID8gdmFsdWVzLnNwYWNlIDogdmFsdWVzLmh0XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBjb2Rlcy52aXJ0dWFsU3BhY2U6IHtcbiAgICAgICAgICBpZiAoIWV4cGFuZFRhYnMgJiYgYXRUYWIpIGNvbnRpbnVlXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZXMuc3BhY2VcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgYXNzZXJ0KHR5cGVvZiBjaHVuayA9PT0gJ251bWJlcicsICdleHBlY3RlZCBudW1iZXInKVxuICAgICAgICAgIC8vIEN1cnJlbnRseSBvbmx5IHJlcGxhY2VtZW50IGNoYXJhY3Rlci5cbiAgICAgICAgICB2YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2h1bmspXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGF0VGFiID0gY2h1bmsgPT09IGNvZGVzLmhvcml6b250YWxUYWJcbiAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuam9pbignJylcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/create-tokenizer.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/initialize/content.js": /*!*********************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/initialize/content.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"content\": () => (/* binding */ content)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n\n\n\n\n\n\n\n/** @type {InitialConstruct} */\nconst content = {tokenize: initializeContent}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n /** @type {Token} */\n let previous\n\n return contentStart\n\n /** @type {State} */\n function afterContentStartConstruct(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code),\n 'expected eol or eof'\n )\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n effects.consume(code)\n return\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding)\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)(effects, contentStart, micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.linePrefix)\n }\n\n /** @type {State} */\n function paragraphInitial(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code !== micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof && !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code),\n 'expected anything other than a line ending or EOF'\n )\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.paragraph)\n return lineStart(code)\n }\n\n /** @type {State} */\n function lineStart(code) {\n const token = effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.chunkText, {\n contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeText,\n previous\n })\n\n if (previous) {\n previous.next = token\n }\n\n previous = token\n\n return data(code)\n }\n\n /** @type {State} */\n function data(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.chunkText)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.paragraph)\n effects.consume(code)\n return\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) {\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_3__.types.chunkText)\n return lineStart\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvY29udGVudC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLGlEQUFpRDtBQUM5RCxhQUFhLDRDQUE0QztBQUN6RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RDs7QUFFb0Q7QUFDTztBQUNQO0FBQ1E7QUFDUjtBQUNiOztBQUV2QyxXQUFXLGtCQUFrQjtBQUN0QixpQkFBaUI7O0FBRXhCO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjs7QUFFQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxJQUFJLCtDQUFNO0FBQ1YsZUFBZSxxRUFBUyxJQUFJLDRFQUFrQjtBQUM5QztBQUNBOztBQUVBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLDRFQUFnQjtBQUNsQztBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakMsV0FBVyxxRUFBWSx3QkFBd0IsNEVBQWdCO0FBQy9EOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksOENBQU07QUFDVixlQUFlLHFFQUFTLEtBQUssNEVBQWtCO0FBQy9DO0FBQ0E7QUFDQSxrQkFBa0IsMkVBQWU7QUFDakM7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxnQ0FBZ0MsMkVBQWU7QUFDL0MsbUJBQW1CLHlGQUF5QjtBQUM1QztBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsaUJBQWlCLHFFQUFTO0FBQzFCLG1CQUFtQiwyRUFBZTtBQUNsQyxtQkFBbUIsMkVBQWU7QUFDbEM7QUFDQTtBQUNBOztBQUVBLFFBQVEsNEVBQWtCO0FBQzFCO0FBQ0EsbUJBQW1CLDJFQUFlO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2Rldi9saWIvaW5pdGlhbGl6ZS9jb250ZW50LmpzPzljMDkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxDb25zdHJ1Y3R9IEluaXRpYWxDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbGl6ZXJ9IEluaXRpYWxpemVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtJbml0aWFsQ29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNvbnRlbnQgPSB7dG9rZW5pemU6IGluaXRpYWxpemVDb250ZW50fVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVDb250ZW50KGVmZmVjdHMpIHtcbiAgY29uc3QgY29udGVudFN0YXJ0ID0gZWZmZWN0cy5hdHRlbXB0KFxuICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwsXG4gICAgYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QsXG4gICAgcGFyYWdyYXBoSW5pdGlhbFxuICApXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBwcmV2aW91c1xuXG4gIHJldHVybiBjb250ZW50U3RhcnRcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdChjb2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgY29kZSA9PT0gY29kZXMuZW9mIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSxcbiAgICAgICdleHBlY3RlZCBlb2wgb3IgZW9mJ1xuICAgIClcblxuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5saW5lRW5kaW5nKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nKVxuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udGVudFN0YXJ0LCB0eXBlcy5saW5lUHJlZml4KVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gcGFyYWdyYXBoSW5pdGlhbChjb2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgY29kZSAhPT0gY29kZXMuZW9mICYmICFtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksXG4gICAgICAnZXhwZWN0ZWQgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGxpbmUgZW5kaW5nIG9yIEVPRidcbiAgICApXG4gICAgZWZmZWN0cy5lbnRlcih0eXBlcy5wYXJhZ3JhcGgpXG4gICAgcmV0dXJuIGxpbmVTdGFydChjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNvZGUpIHtcbiAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZW50ZXIodHlwZXMuY2h1bmtUZXh0LCB7XG4gICAgICBjb250ZW50VHlwZTogY29uc3RhbnRzLmNvbnRlbnRUeXBlVGV4dCxcbiAgICAgIHByZXZpb3VzXG4gICAgfSlcblxuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMubmV4dCA9IHRva2VuXG4gICAgfVxuXG4gICAgcHJldmlvdXMgPSB0b2tlblxuXG4gICAgcmV0dXJuIGRhdGEoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRhdGEoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jaHVua1RleHQpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZXMucGFyYWdyYXBoKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5jaHVua1RleHQpXG4gICAgICByZXR1cm4gbGluZVN0YXJ0XG4gICAgfVxuXG4gICAgLy8gRGF0YS5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/initialize/content.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/initialize/document.js": /*!**********************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/initialize/document.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"document\": () => (/* binding */ document)\n/* harmony export */ });\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ \"../../../node_modules/micromark-util-chunked/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\n\n\n\n\n\n\n\n\n/** @type {InitialConstruct} */\nconst document = {tokenize: initializeDocument}\n\n/** @type {Construct} */\nconst containerConstruct = {tokenize: tokenizeContainer}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n const self = this\n /** @type {Array} */\n const stack = []\n let continued = 0\n /** @type {TokenizeContext | undefined} */\n let childFlow\n /** @type {Token | undefined} */\n let childToken\n /** @type {number} */\n let lineStartOffset\n\n return start\n\n /** @type {State} */\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued]\n self.containerState = item[1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n item[0].continuation,\n 'expected `continuation` to be defined on container construct'\n )\n return effects.attempt(\n item[0].continuation,\n documentContinue,\n checkNewContainers\n )(code)\n }\n\n // Done.\n return checkNewContainers(code)\n }\n\n /** @type {State} */\n function documentContinue(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.containerState,\n 'expected `containerState` to be defined after continuation'\n )\n\n continued++\n\n // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined\n\n if (childFlow) {\n closeFlow()\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {Point | undefined} */\n let point\n\n // Find the flow chunk.\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow\n ) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(point, 'could not find previous flow chunk')\n\n exitContainers(continued)\n\n // Fix positions.\n let index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n\n return checkNewContainers(code)\n }\n\n return start(code)\n }\n\n /** @type {State} */\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code)\n }\n\n // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code)\n }\n\n // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n self.interrupt = Boolean(\n childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n )\n }\n\n // Check if there is a new container.\n self.containerState = {}\n return effects.check(\n containerConstruct,\n thereIsANewContainer,\n thereIsNoNewContainer\n )(code)\n }\n\n /** @type {State} */\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow()\n exitContainers(continued)\n return documentContinued(code)\n }\n\n /** @type {State} */\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length\n lineStartOffset = self.now().offset\n return flowStart(code)\n }\n\n /** @type {State} */\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n\n /** @type {State} */\n function containerContinue(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.currentConstruct,\n 'expected `currentConstruct` to be defined on tokenizer'\n )\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.containerState,\n 'expected `containerState` to be defined on tokenizer'\n )\n continued++\n stack.push([self.currentConstruct, self.containerState])\n // Try another.\n return documentContinued(code)\n }\n\n /** @type {State} */\n function flowStart(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__.codes.eof) {\n if (childFlow) closeFlow()\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow, {\n contentType: micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.contentTypeFlow,\n previous: childToken,\n _tokenizer: childFlow\n })\n\n return flowContinue(code)\n }\n\n /** @type {State} */\n function flowContinue(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__.codes.eof) {\n writeToChild(effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow), true)\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) {\n effects.consume(code)\n writeToChild(effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow))\n // Get ready for the next line.\n continued = 0\n self.interrupt = undefined\n return start\n }\n\n effects.consume(code)\n return flowContinue\n }\n\n /**\n * @param {Token} token\n * @param {boolean | undefined} [eof]\n * @returns {void}\n */\n function writeToChild(token, eof) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(childFlow, 'expected `childFlow` to be defined when continuing')\n const stream = self.sliceStream(token)\n if (eof) stream.push(null)\n token.previous = childToken\n if (childToken) childToken.next = token\n childToken = token\n childFlow.defineSkip(token.start)\n childFlow.write(stream)\n\n // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length\n\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset &&\n // …and either is not ended yet…\n (!childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)\n ) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return\n }\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {boolean | undefined} */\n let seen\n /** @type {Point | undefined} */\n let point\n\n // Find the previous chunk (the one before the lazy line).\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow\n ) {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n\n seen = true\n }\n }\n\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(point, 'could not find previous flow chunk')\n\n exitContainers(continued)\n\n // Fix positions.\n index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n }\n }\n\n /**\n * @param {number} size\n * @returns {void}\n */\n function exitContainers(size) {\n let index = stack.length\n\n // Exit open containers.\n while (index-- > size) {\n const entry = stack[index]\n self.containerState = entry[1]\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n entry[0].exit,\n 'expected `exit` to be defined on container construct'\n )\n entry[0].exit.call(self, effects)\n }\n\n stack.length = size\n }\n\n function closeFlow() {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n self.containerState,\n 'expected `containerState` to be defined when closing flow'\n )\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(childFlow, 'expected `childFlow` to be defined when closing it')\n childFlow.write([micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_3__.codes.eof])\n childToken = undefined\n childFlow = undefined\n self.containerState._closeFlow = undefined\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n this.parser.constructs.disable.null,\n 'expected `disable.null` to be populated'\n )\n return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix,\n this.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize\n )\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvZG9jdW1lbnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsK0NBQStDO0FBQzVELGFBQWEsaURBQWlEO0FBQzlELGFBQWEsNENBQTRDO0FBQ3pELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMENBQTBDO0FBQ3ZEOztBQUVBO0FBQ0EsYUFBYSw2QkFBNkI7QUFDMUM7O0FBRW9EO0FBQ087QUFDZDtBQUNPO0FBQ1E7QUFDUjtBQUNiOztBQUV2QyxXQUFXLGtCQUFrQjtBQUN0QixrQkFBa0I7O0FBRXpCLFdBQVcsV0FBVztBQUN0Qiw0QkFBNEI7O0FBRTVCO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0EsYUFBYSw2QkFBNkI7QUFDMUM7QUFDQSxhQUFhLG1CQUFtQjtBQUNoQztBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sK0NBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWEsT0FBTztBQUNwQjtBQUNBLElBQUksOENBQU07QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDJF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Q0EsVUFBVTtBQUNWLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxFQUFFLDhDQUFNO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxRUFBWTtBQUNyQjtBQUNBO0FBQ0EsSUFBSSw0RUFBZ0I7QUFDcEI7QUFDQTtBQUNBLFFBQVEsaUZBQWlCO0FBQ3pCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvZG9jdW1lbnQuanM/OWIzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29udGFpbmVyU3RhdGV9IENvbnRhaW5lclN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxDb25zdHJ1Y3R9IEluaXRpYWxDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbGl6ZXJ9IEluaXRpYWxpemVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7W0NvbnN0cnVjdCwgQ29udGFpbmVyU3RhdGVdfSBTdGFja0l0ZW1cbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtzcGxpY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG4vKiogQHR5cGUge0luaXRpYWxDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgZG9jdW1lbnQgPSB7dG9rZW5pemU6IGluaXRpYWxpemVEb2N1bWVudH1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBjb250YWluZXJDb25zdHJ1Y3QgPSB7dG9rZW5pemU6IHRva2VuaXplQ29udGFpbmVyfVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVEb2N1bWVudChlZmZlY3RzKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8qKiBAdHlwZSB7QXJyYXk8U3RhY2tJdGVtPn0gKi9cbiAgY29uc3Qgc3RhY2sgPSBbXVxuICBsZXQgY29udGludWVkID0gMFxuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dCB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNoaWxkRmxvd1xuICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY2hpbGRUb2tlblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGxpbmVTdGFydE9mZnNldFxuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBGaXJzdCB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIG9wZW4gYmxvY2tzLCBzdGFydGluZyB3aXRoIHRoZSByb290XG4gICAgLy8gZG9jdW1lbnQsIGFuZCBkZXNjZW5kaW5nIHRocm91Z2ggbGFzdCBjaGlsZHJlbiBkb3duIHRvIHRoZSBsYXN0IG9wZW5cbiAgICAvLyBibG9jay5cbiAgICAvLyBFYWNoIGJsb2NrIGltcG9zZXMgYSBjb25kaXRpb24gdGhhdCB0aGUgbGluZSBtdXN0IHNhdGlzZnkgaWYgdGhlIGJsb2NrIGlzXG4gICAgLy8gdG8gcmVtYWluIG9wZW4uXG4gICAgLy8gRm9yIGV4YW1wbGUsIGEgYmxvY2sgcXVvdGUgcmVxdWlyZXMgYSBgPmAgY2hhcmFjdGVyLlxuICAgIC8vIEEgcGFyYWdyYXBoIHJlcXVpcmVzIGEgbm9uLWJsYW5rIGxpbmUuXG4gICAgLy8gSW4gdGhpcyBwaGFzZSB3ZSBtYXkgbWF0Y2ggYWxsIG9yIGp1c3Qgc29tZSBvZiB0aGUgb3BlbiBibG9ja3MuXG4gICAgLy8gQnV0IHdlIGNhbm5vdCBjbG9zZSB1bm1hdGNoZWQgYmxvY2tzIHlldCwgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBhIGxhenlcbiAgICAvLyBjb250aW51YXRpb24gbGluZS5cbiAgICBpZiAoY29udGludWVkIDwgc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBpdGVtID0gc3RhY2tbY29udGludWVkXVxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IGl0ZW1bMV1cbiAgICAgIGFzc2VydChcbiAgICAgICAgaXRlbVswXS5jb250aW51YXRpb24sXG4gICAgICAgICdleHBlY3RlZCBgY29udGludWF0aW9uYCB0byBiZSBkZWZpbmVkIG9uIGNvbnRhaW5lciBjb25zdHJ1Y3QnXG4gICAgICApXG4gICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgICBpdGVtWzBdLmNvbnRpbnVhdGlvbixcbiAgICAgICAgZG9jdW1lbnRDb250aW51ZSxcbiAgICAgICAgY2hlY2tOZXdDb250YWluZXJzXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gRG9uZS5cbiAgICByZXR1cm4gY2hlY2tOZXdDb250YWluZXJzKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBkb2N1bWVudENvbnRpbnVlKGNvZGUpIHtcbiAgICBhc3NlcnQoXG4gICAgICBzZWxmLmNvbnRhaW5lclN0YXRlLFxuICAgICAgJ2V4cGVjdGVkIGBjb250YWluZXJTdGF0ZWAgdG8gYmUgZGVmaW5lZCBhZnRlciBjb250aW51YXRpb24nXG4gICAgKVxuXG4gICAgY29udGludWVkKytcblxuICAgIC8vIE5vdGU6IHRoaXMgZmllbGQgaXMgY2FsbGVkIGBfY2xvc2VGbG93YCBidXQgaXQgYWxzbyBjbG9zZXMgY29udGFpbmVycy5cbiAgICAvLyBQZXJoYXBzIGEgZ29vZCBpZGVhIHRvIHJlbmFtZSBpdCBidXQgaXTigJlzIGFscmVhZHkgdXNlZCBpbiB0aGUgd2lsZCBieVxuICAgIC8vIGV4dGVuc2lvbnMuXG4gICAgaWYgKHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdykge1xuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmIChjaGlsZEZsb3cpIHtcbiAgICAgICAgY2xvc2VGbG93KClcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogdGhpcyBhbGdvcml0aG0gZm9yIG1vdmluZyBldmVudHMgYXJvdW5kIGlzIHNpbWlsYXIgdG8gdGhlXG4gICAgICAvLyBhbGdvcml0aG0gd2hlbiBkZWFsaW5nIHdpdGggbGF6eSBsaW5lcyBpbiBgd3JpdGVUb0NoaWxkYC5cbiAgICAgIGNvbnN0IGluZGV4QmVmb3JlRXhpdHMgPSBzZWxmLmV2ZW50cy5sZW5ndGhcbiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzXG4gICAgICAvKiogQHR5cGUge1BvaW50IHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHBvaW50XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZsb3cgY2h1bmsuXG4gICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlbGYuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICdleGl0JyAmJlxuICAgICAgICAgIHNlbGYuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0udHlwZSA9PT0gdHlwZXMuY2h1bmtGbG93XG4gICAgICAgICkge1xuICAgICAgICAgIHBvaW50ID0gc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChwb2ludCwgJ2NvdWxkIG5vdCBmaW5kIHByZXZpb3VzIGZsb3cgY2h1bmsnKVxuXG4gICAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpXG5cbiAgICAgIC8vIEZpeCBwb3NpdGlvbnMuXG4gICAgICBsZXQgaW5kZXggPSBpbmRleEJlZm9yZUV4aXRzXG5cbiAgICAgIHdoaWxlIChpbmRleCA8IHNlbGYuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcG9pbnQpXG4gICAgICAgIGluZGV4KytcbiAgICAgIH1cblxuICAgICAgLy8gSW5qZWN0IHRoZSBleGl0cyBlYXJsaWVyICh0aGV54oCZcmUgc3RpbGwgYWxzbyBhdCB0aGUgZW5kKS5cbiAgICAgIHNwbGljZShcbiAgICAgICAgc2VsZi5ldmVudHMsXG4gICAgICAgIGluZGV4QmVmb3JlRmxvdyArIDEsXG4gICAgICAgIDAsXG4gICAgICAgIHNlbGYuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpXG4gICAgICApXG5cbiAgICAgIC8vIERpc2NhcmQgdGhlIGR1cGxpY2F0ZSBleGl0cy5cbiAgICAgIHNlbGYuZXZlbnRzLmxlbmd0aCA9IGluZGV4XG5cbiAgICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhcnQoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlKSB7XG4gICAgLy8gTmV4dCwgYWZ0ZXIgY29uc3VtaW5nIHRoZSBjb250aW51YXRpb24gbWFya2VycyBmb3IgZXhpc3RpbmcgYmxvY2tzLCB3ZVxuICAgIC8vIGxvb2sgZm9yIG5ldyBibG9jayBzdGFydHMgKGUuZy4gYD5gIGZvciBhIGJsb2NrIHF1b3RlKS5cbiAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBuZXcgYmxvY2sgc3RhcnQsIHdlIGNsb3NlIGFueSBibG9ja3MgdW5tYXRjaGVkIGluXG4gICAgLy8gc3RlcCAxIGJlZm9yZSBjcmVhdGluZyB0aGUgbmV3IGJsb2NrIGFzIGEgY2hpbGQgb2YgdGhlIGxhc3QgbWF0Y2hlZFxuICAgIC8vIGJsb2NrLlxuICAgIGlmIChjb250aW51ZWQgPT09IHN0YWNrLmxlbmd0aCkge1xuICAgICAgLy8gTm8gbmVlZCB0byBgY2hlY2tgIHdoZXRoZXIgdGhlcmXigJlzIGEgY29udGFpbmVyLCBvZiBgZXhpdENvbnRhaW5lcnNgXG4gICAgICAvLyB3b3VsZCBiZSBtb290LlxuICAgICAgLy8gV2UgY2FuIGluc3RlYWQgaW1tZWRpYXRlbHkgYGF0dGVtcHRgIHRvIHBhcnNlIG9uZS5cbiAgICAgIGlmICghY2hpbGRGbG93KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBoYXZlIGNvbmNyZXRlIGNvbnRlbnQsIHN1Y2ggYXMgYmxvY2sgSFRNTCBvciBmZW5jZWQgY29kZSxcbiAgICAgIC8vIHdlIGNhbuKAmXQgaGF2ZSBjb250YWluZXJzIOKAnHBpZXJjZeKAnSBpbnRvIHRoZW0sIHNvIHdlIGNhbiBpbW1lZGlhdGVseVxuICAgICAgLy8gc3RhcnQuXG4gICAgICBpZiAoY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QgJiYgY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QuY29uY3JldGUpIHtcbiAgICAgICAgcmV0dXJuIGZsb3dTdGFydChjb2RlKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBkbyBoYXZlIGZsb3csIGl0IGNvdWxkIHN0aWxsIGJlIGEgYmxhbmsgbGluZSxcbiAgICAgIC8vIGJ1dCB3ZeKAmWQgYmUgaW50ZXJydXB0aW5nIGl0IHcvIGEgbmV3IGNvbnRhaW5lciBpZiB0aGVyZeKAmXMgYSBjdXJyZW50XG4gICAgICAvLyBjb25zdHJ1Y3QuXG4gICAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogcmVtb3ZlIGBfZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFja2AgKG5vIGxvbmdlclxuICAgICAgLy8gbmVlZGVkIGluIG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDEuMC42KS5cbiAgICAgIHNlbGYuaW50ZXJydXB0ID0gQm9vbGVhbihcbiAgICAgICAgY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QgJiYgIWNoaWxkRmxvdy5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFja1xuICAgICAgKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgbmV3IGNvbnRhaW5lci5cbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlID0ge31cbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhcbiAgICAgIGNvbnRhaW5lckNvbnN0cnVjdCxcbiAgICAgIHRoZXJlSXNBTmV3Q29udGFpbmVyLFxuICAgICAgdGhlcmVJc05vTmV3Q29udGFpbmVyXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gdGhlcmVJc0FOZXdDb250YWluZXIoY29kZSkge1xuICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpXG4gICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKVxuICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gdGhlcmVJc05vTmV3Q29udGFpbmVyKGNvZGUpIHtcbiAgICBzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV0gPSBjb250aW51ZWQgIT09IHN0YWNrLmxlbmd0aFxuICAgIGxpbmVTdGFydE9mZnNldCA9IHNlbGYubm93KCkub2Zmc2V0XG4gICAgcmV0dXJuIGZsb3dTdGFydChjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gZG9jdW1lbnRDb250aW51ZWQoY29kZSkge1xuICAgIC8vIFRyeSBuZXcgY29udGFpbmVycy5cbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlID0ge31cbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgY29udGFpbmVyQ29uc3RydWN0LFxuICAgICAgY29udGFpbmVyQ29udGludWUsXG4gICAgICBmbG93U3RhcnRcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBjb250YWluZXJDb250aW51ZShjb2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgc2VsZi5jdXJyZW50Q29uc3RydWN0LFxuICAgICAgJ2V4cGVjdGVkIGBjdXJyZW50Q29uc3RydWN0YCB0byBiZSBkZWZpbmVkIG9uIHRva2VuaXplcidcbiAgICApXG4gICAgYXNzZXJ0KFxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZSxcbiAgICAgICdleHBlY3RlZCBgY29udGFpbmVyU3RhdGVgIHRvIGJlIGRlZmluZWQgb24gdG9rZW5pemVyJ1xuICAgIClcbiAgICBjb250aW51ZWQrK1xuICAgIHN0YWNrLnB1c2goW3NlbGYuY3VycmVudENvbnN0cnVjdCwgc2VsZi5jb250YWluZXJTdGF0ZV0pXG4gICAgLy8gVHJ5IGFub3RoZXIuXG4gICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBmbG93U3RhcnQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBjb2Rlcy5lb2YpIHtcbiAgICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpXG4gICAgICBleGl0Q29udGFpbmVycygwKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjaGlsZEZsb3cgPSBjaGlsZEZsb3cgfHwgc2VsZi5wYXJzZXIuZmxvdyhzZWxmLm5vdygpKVxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuY2h1bmtGbG93LCB7XG4gICAgICBjb250ZW50VHlwZTogY29uc3RhbnRzLmNvbnRlbnRUeXBlRmxvdyxcbiAgICAgIHByZXZpb3VzOiBjaGlsZFRva2VuLFxuICAgICAgX3Rva2VuaXplcjogY2hpbGRGbG93XG4gICAgfSlcblxuICAgIHJldHVybiBmbG93Q29udGludWUoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGZsb3dDb250aW51ZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZikge1xuICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCh0eXBlcy5jaHVua0Zsb3cpLCB0cnVlKVxuICAgICAgZXhpdENvbnRhaW5lcnMoMClcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICB3cml0ZVRvQ2hpbGQoZWZmZWN0cy5leGl0KHR5cGVzLmNodW5rRmxvdykpXG4gICAgICAvLyBHZXQgcmVhZHkgZm9yIHRoZSBuZXh0IGxpbmUuXG4gICAgICBjb250aW51ZWQgPSAwXG4gICAgICBzZWxmLmludGVycnVwdCA9IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHN0YXJ0XG4gICAgfVxuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGZsb3dDb250aW51ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gW2VvZl1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB3cml0ZVRvQ2hpbGQodG9rZW4sIGVvZikge1xuICAgIGFzc2VydChjaGlsZEZsb3csICdleHBlY3RlZCBgY2hpbGRGbG93YCB0byBiZSBkZWZpbmVkIHdoZW4gY29udGludWluZycpXG4gICAgY29uc3Qgc3RyZWFtID0gc2VsZi5zbGljZVN0cmVhbSh0b2tlbilcbiAgICBpZiAoZW9mKSBzdHJlYW0ucHVzaChudWxsKVxuICAgIHRva2VuLnByZXZpb3VzID0gY2hpbGRUb2tlblxuICAgIGlmIChjaGlsZFRva2VuKSBjaGlsZFRva2VuLm5leHQgPSB0b2tlblxuICAgIGNoaWxkVG9rZW4gPSB0b2tlblxuICAgIGNoaWxkRmxvdy5kZWZpbmVTa2lwKHRva2VuLnN0YXJ0KVxuICAgIGNoaWxkRmxvdy53cml0ZShzdHJlYW0pXG5cbiAgICAvLyBBbHJpZ2h0LCBzbyB3ZSBqdXN0IGFkZGVkIGEgbGF6eSBsaW5lOlxuICAgIC8vXG4gICAgLy8gYGBgbWFya2Rvd25cbiAgICAvLyA+IGFcbiAgICAvLyBiLlxuICAgIC8vXG4gICAgLy8gT3I6XG4gICAgLy9cbiAgICAvLyA+IH5+fmNcbiAgICAvLyBkXG4gICAgLy9cbiAgICAvLyBPcjpcbiAgICAvL1xuICAgIC8vID4gfCBlIHxcbiAgICAvLyBmXG4gICAgLy8gYGBgXG4gICAgLy9cbiAgICAvLyBUaGUgY29uc3RydWN0IGluIHRoZSBzZWNvbmQgZXhhbXBsZSAoZmVuY2VkIGNvZGUpIGRvZXMgbm90IGFjY2VwdCBsYXp5XG4gICAgLy8gbGluZXMsIHNvIGl0IG1hcmtlZCBpdHNlbGYgYXMgZG9uZSBhdCB0aGUgZW5kIG9mIGl0cyBmaXJzdCBsaW5lLCBhbmRcbiAgICAvLyB0aGVuIHRoZSBjb250ZW50IGNvbnN0cnVjdCBwYXJzZXMgYGRgLlxuICAgIC8vIE1vc3QgY29uc3RydWN0cyBpbiBtYXJrZG93biBtYXRjaCBvbiB0aGUgZmlyc3QgbGluZTogaWYgdGhlIGZpcnN0IGxpbmVcbiAgICAvLyBmb3JtcyBhIGNvbnN0cnVjdCwgYSBub24tbGF6eSBsaW5lIGNhbuKAmXQg4oCcdW5tYWtl4oCdIGl0LlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbnN0cnVjdCBpbiB0aGUgdGhpcmQgZXhhbXBsZSBpcyBwb3RlbnRpYWxseSBhIEdGTSB0YWJsZSwgYW5kXG4gICAgLy8gdGhvc2UgYXJlICp3ZWlyZCouXG4gICAgLy8gSXQgKmNvdWxkKiBiZSBhIHRhYmxlLCBmcm9tIHRoZSBmaXJzdCBsaW5lLCBpZiB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAvLyBtYXRjaGVzIGEgY29uZGl0aW9uLlxuICAgIC8vIEluIHRoaXMgY2FzZSwgdGhhdCBzZWNvbmQgbGluZSBpcyBsYXp5LCB3aGljaCDigJx1bm1ha2Vz4oCdIHRoZSBmaXJzdCBsaW5lXG4gICAgLy8gYW5kIHR1cm5zIHRoZSB3aG9sZSBpbnRvIG9uZSBjb250ZW50IGJsb2NrLlxuICAgIC8vXG4gICAgLy8gV2XigJl2ZSBub3cgcGFyc2VkIHRoZSBub24tbGF6eSBhbmQgdGhlIGxhenkgbGluZSwgYW5kIGNhbiBmaWd1cmUgb3V0XG4gICAgLy8gd2hldGhlciB0aGUgbGF6eSBsaW5lIHN0YXJ0ZWQgYSBuZXcgZmxvdyBibG9jay5cbiAgICAvLyBJZiBpdCBkaWQsIHdlIGV4aXQgdGhlIGN1cnJlbnQgY29udGFpbmVycyBiZXR3ZWVuIHRoZSB0d28gZmxvdyBibG9ja3MuXG4gICAgaWYgKHNlbGYucGFyc2VyLmxhenlbdG9rZW4uc3RhcnQubGluZV0pIHtcbiAgICAgIGxldCBpbmRleCA9IGNoaWxkRmxvdy5ldmVudHMubGVuZ3RoXG5cbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBUaGUgdG9rZW4gc3RhcnRzIGJlZm9yZSB0aGUgbGluZSBlbmRpbmfigKZcbiAgICAgICAgICBjaGlsZEZsb3cuZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQgPCBsaW5lU3RhcnRPZmZzZXQgJiZcbiAgICAgICAgICAvLyDigKZhbmQgZWl0aGVyIGlzIG5vdCBlbmRlZCB5ZXTigKZcbiAgICAgICAgICAoIWNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLmVuZCB8fFxuICAgICAgICAgICAgLy8g4oCmb3IgZW5kcyBhZnRlciBpdC5cbiAgICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLmVuZC5vZmZzZXQgPiBsaW5lU3RhcnRPZmZzZXQpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEV4aXQ6IHRoZXJl4oCZcyBzdGlsbCBzb21ldGhpbmcgb3Blbiwgd2hpY2ggbWVhbnMgaXTigJlzIGEgbGF6eSBsaW5lXG4gICAgICAgICAgLy8gcGFydCBvZiBzb21ldGhpbmcuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogdGhpcyBhbGdvcml0aG0gZm9yIG1vdmluZyBldmVudHMgYXJvdW5kIGlzIHNpbWlsYXIgdG8gdGhlXG4gICAgICAvLyBhbGdvcml0aG0gd2hlbiBjbG9zaW5nIGZsb3cgaW4gYGRvY3VtZW50Q29udGludWVgLlxuICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHNcbiAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICAgIGxldCBzZWVuXG4gICAgICAvKiogQHR5cGUge1BvaW50IHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHBvaW50XG5cbiAgICAgIC8vIEZpbmQgdGhlIHByZXZpb3VzIGNodW5rICh0aGUgb25lIGJlZm9yZSB0aGUgbGF6eSBsaW5lKS5cbiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gJ2V4aXQnICYmXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSB0eXBlcy5jaHVua0Zsb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgICAgIHBvaW50ID0gc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmRcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VlbiA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3NlcnQocG9pbnQsICdjb3VsZCBub3QgZmluZCBwcmV2aW91cyBmbG93IGNodW5rJylcblxuICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKVxuXG4gICAgICAvLyBGaXggcG9zaXRpb25zLlxuICAgICAgaW5kZXggPSBpbmRleEJlZm9yZUV4aXRzXG5cbiAgICAgIHdoaWxlIChpbmRleCA8IHNlbGYuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcG9pbnQpXG4gICAgICAgIGluZGV4KytcbiAgICAgIH1cblxuICAgICAgLy8gSW5qZWN0IHRoZSBleGl0cyBlYXJsaWVyICh0aGV54oCZcmUgc3RpbGwgYWxzbyBhdCB0aGUgZW5kKS5cbiAgICAgIHNwbGljZShcbiAgICAgICAgc2VsZi5ldmVudHMsXG4gICAgICAgIGluZGV4QmVmb3JlRmxvdyArIDEsXG4gICAgICAgIDAsXG4gICAgICAgIHNlbGYuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpXG4gICAgICApXG5cbiAgICAgIC8vIERpc2NhcmQgdGhlIGR1cGxpY2F0ZSBleGl0cy5cbiAgICAgIHNlbGYuZXZlbnRzLmxlbmd0aCA9IGluZGV4XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gZXhpdENvbnRhaW5lcnMoc2l6ZSkge1xuICAgIGxldCBpbmRleCA9IHN0YWNrLmxlbmd0aFxuXG4gICAgLy8gRXhpdCBvcGVuIGNvbnRhaW5lcnMuXG4gICAgd2hpbGUgKGluZGV4LS0gPiBzaXplKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrW2luZGV4XVxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IGVudHJ5WzFdXG4gICAgICBhc3NlcnQoXG4gICAgICAgIGVudHJ5WzBdLmV4aXQsXG4gICAgICAgICdleHBlY3RlZCBgZXhpdGAgdG8gYmUgZGVmaW5lZCBvbiBjb250YWluZXIgY29uc3RydWN0J1xuICAgICAgKVxuICAgICAgZW50cnlbMF0uZXhpdC5jYWxsKHNlbGYsIGVmZmVjdHMpXG4gICAgfVxuXG4gICAgc3RhY2subGVuZ3RoID0gc2l6ZVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VGbG93KCkge1xuICAgIGFzc2VydChcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUsXG4gICAgICAnZXhwZWN0ZWQgYGNvbnRhaW5lclN0YXRlYCB0byBiZSBkZWZpbmVkIHdoZW4gY2xvc2luZyBmbG93J1xuICAgIClcbiAgICBhc3NlcnQoY2hpbGRGbG93LCAnZXhwZWN0ZWQgYGNoaWxkRmxvd2AgdG8gYmUgZGVmaW5lZCB3aGVuIGNsb3NpbmcgaXQnKVxuICAgIGNoaWxkRmxvdy53cml0ZShbY29kZXMuZW9mXSlcbiAgICBjaGlsZFRva2VuID0gdW5kZWZpbmVkXG4gICAgY2hpbGRGbG93ID0gdW5kZWZpbmVkXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb250YWluZXIoZWZmZWN0cywgb2ssIG5vaykge1xuICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICBhc3NlcnQoXG4gICAgdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwsXG4gICAgJ2V4cGVjdGVkIGBkaXNhYmxlLm51bGxgIHRvIGJlIHBvcHVsYXRlZCdcbiAgKVxuICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsIG9rLCBub2spLFxuICAgIHR5cGVzLmxpbmVQcmVmaXgsXG4gICAgdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBjb25zdGFudHMudGFiU2l6ZVxuICApXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/initialize/document.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/initialize/flow.js": /*!******************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/initialize/flow.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"flow\": () => (/* binding */ flow)\n/* harmony export */ });\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/blank-line.js\");\n/* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-core-commonmark */ \"../../../node_modules/micromark-core-commonmark/dev/lib/content.js\");\n/* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-factory-space */ \"../../../node_modules/micromark-factory-space/dev/index.js\");\n/* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-character */ \"../../../node_modules/micromark-util-character/dev/index.js\");\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n\n\n\n\n\n\n\n/** @type {InitialConstruct} */\nconst flow = {tokenize: initializeFlow}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.blankLine,\n atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__.factorySpace)(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__.content, afterConstruct)\n ),\n micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix\n )\n )\n )\n\n return initial\n\n /** @type {State} */\n function atBlankEnding(code) {\n ;(0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEnding)(code),\n 'expected eol or eof'\n )\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof) {\n effects.consume(code)\n return\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEndingBlank)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEndingBlank)\n self.currentConstruct = undefined\n return initial\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEnding)(code),\n 'expected eol or eof'\n )\n\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_5__.codes.eof) {\n effects.consume(code)\n return\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n effects.consume(code)\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding)\n self.currentConstruct = undefined\n return initial\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvZmxvdy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0EsYUFBYSxpREFBaUQ7QUFDOUQsYUFBYSw0Q0FBNEM7QUFDekQsYUFBYSxzQ0FBc0M7QUFDbkQsYUFBYSxnREFBZ0Q7QUFDN0Q7O0FBRTREO0FBQ1I7QUFDTztBQUNQO0FBQ0E7QUFDYjs7QUFFdkMsV0FBVyxrQkFBa0I7QUFDdEIsY0FBYzs7QUFFckI7QUFDQSxVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdFQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0scUVBQVk7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsOERBQU87QUFDakM7QUFDQSxRQUFRLDRFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSxPQUFPO0FBQ3BCO0FBQ0EsSUFBSSwrQ0FBTTtBQUNWLGVBQWUscUVBQVMsSUFBSSw0RUFBa0I7QUFDOUM7QUFDQTs7QUFFQSxpQkFBaUIscUVBQVM7QUFDMUI7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpRkFBcUI7QUFDdkM7QUFDQSxpQkFBaUIsaUZBQXFCO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxJQUFJLDhDQUFNO0FBQ1YsZUFBZSxxRUFBUyxJQUFJLDRFQUFrQjtBQUM5QztBQUNBOztBQUVBLGlCQUFpQixxRUFBUztBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLDRFQUFnQjtBQUNsQztBQUNBLGlCQUFpQiw0RUFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvZmxvdy5qcz9hZjM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsQ29uc3RydWN0fSBJbml0aWFsQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxpemVyfSBJbml0aWFsaXplclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqL1xuXG5pbXBvcnQge2JsYW5rTGluZSwgY29udGVudH0gZnJvbSAnbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyaydcbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge3R5cGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvdHlwZXMuanMnXG5pbXBvcnQge29rIGFzIGFzc2VydH0gZnJvbSAndXZ1L2Fzc2VydCdcblxuLyoqIEB0eXBlIHtJbml0aWFsQ29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGZsb3cgPSB7dG9rZW5pemU6IGluaXRpYWxpemVGbG93fVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVGbG93KGVmZmVjdHMpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgaW5pdGlhbCA9IGVmZmVjdHMuYXR0ZW1wdChcbiAgICAvLyBUcnkgdG8gcGFyc2UgYSBibGFuayBsaW5lLlxuICAgIGJsYW5rTGluZSxcbiAgICBhdEJsYW5rRW5kaW5nLFxuICAgIC8vIFRyeSB0byBwYXJzZSBpbml0aWFsIGZsb3cgKGVzc2VudGlhbGx5LCBvbmx5IGNvZGUpLlxuICAgIGVmZmVjdHMuYXR0ZW1wdChcbiAgICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsXG4gICAgICBhZnRlckNvbnN0cnVjdCxcbiAgICAgIGZhY3RvcnlTcGFjZShcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxcbiAgICAgICAgICBhZnRlckNvbnN0cnVjdCxcbiAgICAgICAgICBlZmZlY3RzLmF0dGVtcHQoY29udGVudCwgYWZ0ZXJDb25zdHJ1Y3QpXG4gICAgICAgICksXG4gICAgICAgIHR5cGVzLmxpbmVQcmVmaXhcbiAgICAgIClcbiAgICApXG4gIClcblxuICByZXR1cm4gaW5pdGlhbFxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGF0QmxhbmtFbmRpbmcoY29kZSkge1xuICAgIGFzc2VydChcbiAgICAgIGNvZGUgPT09IGNvZGVzLmVvZiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSksXG4gICAgICAnZXhwZWN0ZWQgZW9sIG9yIGVvZidcbiAgICApXG5cbiAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGVmZmVjdHMuZW50ZXIodHlwZXMubGluZUVuZGluZ0JsYW5rKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlcy5saW5lRW5kaW5nQmxhbmspXG4gICAgc2VsZi5jdXJyZW50Q29uc3RydWN0ID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIGluaXRpYWxcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGFmdGVyQ29uc3RydWN0KGNvZGUpIHtcbiAgICBhc3NlcnQoXG4gICAgICBjb2RlID09PSBjb2Rlcy5lb2YgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpLFxuICAgICAgJ2V4cGVjdGVkIGVvbCBvciBlb2YnXG4gICAgKVxuXG4gICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlZmZlY3RzLmVudGVyKHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KHR5cGVzLmxpbmVFbmRpbmcpXG4gICAgc2VsZi5jdXJyZW50Q29uc3RydWN0ID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIGluaXRpYWxcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/initialize/flow.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/initialize/text.js": /*!******************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/initialize/text.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"resolver\": () => (/* binding */ resolver),\n/* harmony export */ \"string\": () => (/* binding */ string),\n/* harmony export */ \"text\": () => (/* binding */ text)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/* harmony import */ var micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol/types.js */ \"../../../node_modules/micromark-util-symbol/types.js\");\n/* harmony import */ var uvu_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uvu/assert */ \"../../../node_modules/uvu/assert/index.mjs\");\n/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n\n\n\n\n\nconst resolver = {resolveAll: createResolver()}\nconst string = initializeFactory('string')\nconst text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n\n return start\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n effects.consume(code)\n return\n }\n\n effects.enter(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.data)\n effects.consume(code)\n return data\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit(micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.data)\n return text(code)\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n function atBreak(code) {\n if (code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.eof) {\n return true\n }\n\n const list = constructs[code]\n let index = -1\n\n if (list) {\n // Always populated by defaults.\n (0,uvu_assert__WEBPACK_IMPORTED_MODULE_0__.ok)(Array.isArray(list), 'expected `disable.null` to be populated')\n\n while (++index < list.length) {\n const item = list[index]\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n return resolveAllText\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number | undefined} */\n let enter\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.data) {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.data) {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) &&\n events[eventIndex - 1][1].type === micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.data\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean | undefined} */\n let tabs\n\n while (index--) {\n const chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n\n while (chunk.charCodeAt(bufferIndex - 1) === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.space) {\n size++\n bufferIndex--\n }\n\n if (bufferIndex) break\n bufferIndex = -1\n }\n // Number\n else if (chunk === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.horizontalTab) {\n tabs = true\n size++\n } else if (chunk === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_1__.codes.virtualSpace) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n\n if (size) {\n const token = {\n type:\n eventIndex === events.length ||\n tabs ||\n size < micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_3__.constants.hardBreakPrefixSizeMin\n ? micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.lineSuffix\n : micromark_util_symbol_types_js__WEBPACK_IMPORTED_MODULE_2__.types.hardBreakTrailing,\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n\n data.end = Object.assign({}, token.start)\n\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n\n eventIndex++\n }\n }\n\n return events\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvdGV4dC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLGlEQUFpRDtBQUM5RCxhQUFhLDRDQUE0QztBQUN6RCxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLGdEQUFnRDtBQUM3RDs7QUFFb0Q7QUFDUTtBQUNSO0FBQ2I7O0FBRWhDLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVQO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1osWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLE9BQU87QUFDdEI7QUFDQSxtQkFBbUIscUVBQVM7QUFDNUI7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixzRUFBVTtBQUM5QjtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQSxxQkFBcUIsc0VBQVU7QUFDL0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLG1CQUFtQixxRUFBUztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsOENBQU07O0FBRWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQyxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsc0VBQVU7QUFDakU7QUFDQTtBQUNBO0FBQ0EsUUFBUSxxREFBcUQsc0VBQVU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsNEVBQWdCO0FBQ3ZELHlDQUF5QyxzRUFBVTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIscUJBQXFCO0FBQ3RDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1REFBdUQsdUVBQVc7QUFDbEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLCtFQUFtQjtBQUM5QztBQUNBO0FBQ0EsVUFBVSxtQkFBbUIsOEVBQWtCO0FBQy9DO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnR0FBZ0M7QUFDbkQsZ0JBQWdCLDRFQUFnQjtBQUNoQyxnQkFBZ0IsbUZBQXVCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsK0JBQStCO0FBQy9COztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL2luaXRpYWxpemUvdGV4dC5qcz8xM2I5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxDb25zdHJ1Y3R9IEluaXRpYWxDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbGl6ZXJ9IEluaXRpYWxpemVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqL1xuXG5pbXBvcnQge2NvZGVzfSBmcm9tICdtaWNyb21hcmstdXRpbC1zeW1ib2wvY29kZXMuanMnXG5pbXBvcnQge2NvbnN0YW50c30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvbnN0YW50cy5qcydcbmltcG9ydCB7dHlwZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC90eXBlcy5qcydcbmltcG9ydCB7b2sgYXMgYXNzZXJ0fSBmcm9tICd1dnUvYXNzZXJ0J1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZXIgPSB7cmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoKX1cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSBpbml0aWFsaXplRmFjdG9yeSgnc3RyaW5nJylcbmV4cG9ydCBjb25zdCB0ZXh0ID0gaW5pdGlhbGl6ZUZhY3RvcnkoJ3RleHQnKVxuXG4vKipcbiAqIEBwYXJhbSB7J3N0cmluZycgfCAndGV4dCd9IGZpZWxkXG4gKiBAcmV0dXJucyB7SW5pdGlhbENvbnN0cnVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZUZhY3RvcnkoZmllbGQpIHtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZVRleHQsXG4gICAgcmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoXG4gICAgICBmaWVsZCA9PT0gJ3RleHQnID8gcmVzb2x2ZUFsbExpbmVTdWZmaXhlcyA6IHVuZGVmaW5lZFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICAgKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBpbml0aWFsaXplVGV4dChlZmZlY3RzKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICBjb25zdCBjb25zdHJ1Y3RzID0gdGhpcy5wYXJzZXIuY29uc3RydWN0c1tmaWVsZF1cbiAgICBjb25zdCB0ZXh0ID0gZWZmZWN0cy5hdHRlbXB0KGNvbnN0cnVjdHMsIHN0YXJ0LCBub3RUZXh0KVxuXG4gICAgcmV0dXJuIHN0YXJ0XG5cbiAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpID8gdGV4dChjb2RlKSA6IG5vdFRleHQoY29kZSlcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgIGZ1bmN0aW9uIG5vdFRleHQoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IGNvZGVzLmVvZikge1xuICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZXMuZGF0YSlcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgIGZ1bmN0aW9uIGRhdGEoY29kZSkge1xuICAgICAgaWYgKGF0QnJlYWsoY29kZSkpIHtcbiAgICAgICAgZWZmZWN0cy5leGl0KHR5cGVzLmRhdGEpXG4gICAgICAgIHJldHVybiB0ZXh0KGNvZGUpXG4gICAgICB9XG5cbiAgICAgIC8vIERhdGEuXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gY29kZXMuZW9mKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpc3QgPSBjb25zdHJ1Y3RzW2NvZGVdXG4gICAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgICBpZiAobGlzdCkge1xuICAgICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShsaXN0KSwgJ2V4cGVjdGVkIGBkaXNhYmxlLm51bGxgIHRvIGJlIHBvcHVsYXRlZCcpXG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0W2luZGV4XVxuICAgICAgICAgIGlmICghaXRlbS5wcmV2aW91cyB8fCBpdGVtLnByZXZpb3VzLmNhbGwoc2VsZiwgc2VsZi5wcmV2aW91cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVzb2x2ZXIgfCB1bmRlZmluZWR9IFtleHRyYVJlc29sdmVyXVxuICogQHJldHVybnMge1Jlc29sdmVyfVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlcihleHRyYVJlc29sdmVyKSB7XG4gIHJldHVybiByZXNvbHZlQWxsVGV4dFxuXG4gIC8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG4gIGZ1bmN0aW9uIHJlc29sdmVBbGxUZXh0KGV2ZW50cywgY29udGV4dCkge1xuICAgIGxldCBpbmRleCA9IC0xXG4gICAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGVudGVyXG5cbiAgICAvLyBBIHJhdGhlciBib3JpbmcgY29tcHV0YXRpb24gKHRvIG1lcmdlIGFkamFjZW50IGBkYXRhYCBldmVudHMpIHdoaWNoXG4gICAgLy8gaW1wcm92ZXMgbW0gcGVyZm9ybWFuY2UgYnkgMjklLlxuICAgIHdoaWxlICgrK2luZGV4IDw9IGV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIGlmIChlbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChldmVudHNbaW5kZXhdICYmIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gdHlwZXMuZGF0YSkge1xuICAgICAgICAgIGVudGVyID0gaW5kZXhcbiAgICAgICAgICBpbmRleCsrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWV2ZW50c1tpbmRleF0gfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSB0eXBlcy5kYXRhKSB7XG4gICAgICAgIC8vIERvbuKAmXQgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgb25lIGRhdGEgdG9rZW4uXG4gICAgICAgIGlmIChpbmRleCAhPT0gZW50ZXIgKyAyKSB7XG4gICAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXggLSAxXVsxXS5lbmRcbiAgICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXggLSBlbnRlciAtIDIpXG4gICAgICAgICAgaW5kZXggPSBlbnRlciArIDJcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHJhUmVzb2x2ZXIgPyBleHRyYVJlc29sdmVyKGV2ZW50cywgY29udGV4dCkgOiBldmVudHNcbiAgfVxufVxuXG4vKipcbiAqIEEgcmF0aGVyIHVnbHkgc2V0IG9mIGluc3RydWN0aW9ucyB3aGljaCBhZ2FpbiBsb29rcyBhdCBjaHVua3MgaW4gdGhlIGlucHV0XG4gKiBzdHJlYW0uXG4gKiBUaGUgcmVhc29uIHRvIGRvIHRoaXMgaGVyZSBpcyB0aGF0IGl0IGlzICptdWNoKiBmYXN0ZXIgdG8gcGFyc2UgaW4gcmV2ZXJzZS5cbiAqIEFuZCB0aGF0IHdlIGNhbuKAmXQgaG9vayBpbnRvIGBudWxsYCB0byBzcGxpdCB0aGUgbGluZSBzdWZmaXggYmVmb3JlIGFuIEVPRi5cbiAqIFRvIGRvOiBmaWd1cmUgb3V0IGlmIHdlIGNhbiBtYWtlIHRoaXMgaW50byBhIGNsZWFuIHV0aWxpdHksIG9yIGV2ZW4gaW4gY29yZS5cbiAqIEFzIGl0IHdpbGwgYmUgdXNlZnVsIGZvciBHRk1zIGxpdGVyYWwgYXV0b2xpbmsgZXh0ZW5zaW9uIChhbmQgbWF5YmUgZXZlblxuICogdGFibGVzPylcbiAqXG4gKiBAdHlwZSB7UmVzb2x2ZXJ9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBbGxMaW5lU3VmZml4ZXMoZXZlbnRzLCBjb250ZXh0KSB7XG4gIGxldCBldmVudEluZGV4ID0gMCAvLyBTa2lwIGZpcnN0LlxuXG4gIHdoaWxlICgrK2V2ZW50SW5kZXggPD0gZXZlbnRzLmxlbmd0aCkge1xuICAgIGlmIChcbiAgICAgIChldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8XG4gICAgICAgIGV2ZW50c1tldmVudEluZGV4XVsxXS50eXBlID09PSB0eXBlcy5saW5lRW5kaW5nKSAmJlxuICAgICAgZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXS50eXBlID09PSB0eXBlcy5kYXRhXG4gICAgKSB7XG4gICAgICBjb25zdCBkYXRhID0gZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXVxuICAgICAgY29uc3QgY2h1bmtzID0gY29udGV4dC5zbGljZVN0cmVhbShkYXRhKVxuICAgICAgbGV0IGluZGV4ID0gY2h1bmtzLmxlbmd0aFxuICAgICAgbGV0IGJ1ZmZlckluZGV4ID0gLTFcbiAgICAgIGxldCBzaXplID0gMFxuICAgICAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHRhYnNcblxuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaW5kZXhdXG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBidWZmZXJJbmRleCA9IGNodW5rLmxlbmd0aFxuXG4gICAgICAgICAgd2hpbGUgKGNodW5rLmNoYXJDb2RlQXQoYnVmZmVySW5kZXggLSAxKSA9PT0gY29kZXMuc3BhY2UpIHtcbiAgICAgICAgICAgIHNpemUrK1xuICAgICAgICAgICAgYnVmZmVySW5kZXgtLVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChidWZmZXJJbmRleCkgYnJlYWtcbiAgICAgICAgICBidWZmZXJJbmRleCA9IC0xXG4gICAgICAgIH1cbiAgICAgICAgLy8gTnVtYmVyXG4gICAgICAgIGVsc2UgaWYgKGNodW5rID09PSBjb2Rlcy5ob3Jpem9udGFsVGFiKSB7XG4gICAgICAgICAgdGFicyA9IHRydWVcbiAgICAgICAgICBzaXplKytcbiAgICAgICAgfSBlbHNlIGlmIChjaHVuayA9PT0gY29kZXMudmlydHVhbFNwYWNlKSB7XG4gICAgICAgICAgLy8gRW1wdHlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZXBsYWNlbWVudCBjaGFyYWN0ZXIsIGV4aXQuXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICAgICAgdHlwZTpcbiAgICAgICAgICAgIGV2ZW50SW5kZXggPT09IGV2ZW50cy5sZW5ndGggfHxcbiAgICAgICAgICAgIHRhYnMgfHxcbiAgICAgICAgICAgIHNpemUgPCBjb25zdGFudHMuaGFyZEJyZWFrUHJlZml4U2l6ZU1pblxuICAgICAgICAgICAgICA/IHR5cGVzLmxpbmVTdWZmaXhcbiAgICAgICAgICAgICAgOiB0eXBlcy5oYXJkQnJlYWtUcmFpbGluZyxcbiAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogZGF0YS5lbmQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogZGF0YS5lbmQuY29sdW1uIC0gc2l6ZSxcbiAgICAgICAgICAgIG9mZnNldDogZGF0YS5lbmQub2Zmc2V0IC0gc2l6ZSxcbiAgICAgICAgICAgIF9pbmRleDogZGF0YS5zdGFydC5faW5kZXggKyBpbmRleCxcbiAgICAgICAgICAgIF9idWZmZXJJbmRleDogaW5kZXhcbiAgICAgICAgICAgICAgPyBidWZmZXJJbmRleFxuICAgICAgICAgICAgICA6IGRhdGEuc3RhcnQuX2J1ZmZlckluZGV4ICsgYnVmZmVySW5kZXhcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZGF0YS5lbmQpXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KVxuXG4gICAgICAgIGlmIChkYXRhLnN0YXJ0Lm9mZnNldCA9PT0gZGF0YS5lbmQub2Zmc2V0KSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0b2tlbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudHMuc3BsaWNlKFxuICAgICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbJ2VudGVyJywgdG9rZW4sIGNvbnRleHRdLFxuICAgICAgICAgICAgWydleGl0JywgdG9rZW4sIGNvbnRleHRdXG4gICAgICAgICAgKVxuICAgICAgICAgIGV2ZW50SW5kZXggKz0gMlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2ZW50SW5kZXgrK1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudHNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/initialize/text.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/parse.js": /*!********************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/parse.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parse\": () => (/* binding */ parse)\n/* harmony export */ });\n/* harmony import */ var micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-combine-extensions */ \"../../../node_modules/micromark-util-combine-extensions/index.js\");\n/* harmony import */ var _initialize_content_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initialize/content.js */ \"../../../node_modules/micromark/dev/lib/initialize/content.js\");\n/* harmony import */ var _initialize_document_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./initialize/document.js */ \"../../../node_modules/micromark/dev/lib/initialize/document.js\");\n/* harmony import */ var _initialize_flow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./initialize/flow.js */ \"../../../node_modules/micromark/dev/lib/initialize/flow.js\");\n/* harmony import */ var _initialize_text_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./initialize/text.js */ \"../../../node_modules/micromark/dev/lib/initialize/text.js\");\n/* harmony import */ var _create_tokenizer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./create-tokenizer.js */ \"../../../node_modules/micromark/dev/lib/create-tokenizer.js\");\n/* harmony import */ var _constructs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constructs.js */ \"../../../node_modules/micromark/dev/lib/constructs.js\");\n/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\n\n\n\n\n\n\n\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nfunction parse(options) {\n const settings = options || {}\n const constructs = /** @type {FullNormalizedExtension} */ (\n (0,micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__.combineExtensions)([_constructs_js__WEBPACK_IMPORTED_MODULE_1__, ...(settings.extensions || [])])\n )\n\n /** @type {ParseContext} */\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(_initialize_content_js__WEBPACK_IMPORTED_MODULE_2__.content),\n document: create(_initialize_document_js__WEBPACK_IMPORTED_MODULE_3__.document),\n flow: create(_initialize_flow_js__WEBPACK_IMPORTED_MODULE_4__.flow),\n string: create(_initialize_text_js__WEBPACK_IMPORTED_MODULE_5__.string),\n text: create(_initialize_text_js__WEBPACK_IMPORTED_MODULE_5__.text)\n }\n\n return parser\n\n /**\n * @param {InitialConstruct} initial\n */\n function create(initial) {\n return creator\n /** @type {Create} */\n function creator(from) {\n return (0,_create_tokenizer_js__WEBPACK_IMPORTED_MODULE_6__.createTokenizer)(parser, initial, from)\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL3BhcnNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxhQUFhLHVDQUF1QztBQUNwRCxhQUFhLHdEQUF3RDtBQUNyRSxhQUFhLGlEQUFpRDtBQUM5RCxhQUFhLDZDQUE2QztBQUMxRCxhQUFhLDZDQUE2QztBQUMxRDs7QUFFbUU7QUFDcEI7QUFDRTtBQUNSO0FBQ1E7QUFDSTtBQUNEOztBQUVwRDtBQUNBLFdBQVcsaUNBQWlDO0FBQzVDLGFBQWE7QUFDYjtBQUNPO0FBQ1A7QUFDQSxnQ0FBZ0MseUJBQXlCO0FBQ3pELElBQUksb0ZBQWlCLEVBQUUsMkNBQWlCO0FBQ3hDOztBQUVBLGFBQWEsY0FBYztBQUMzQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0Esb0JBQW9CLDJEQUFPO0FBQzNCLHFCQUFxQiw2REFBUTtBQUM3QixpQkFBaUIscURBQUk7QUFDckIsbUJBQW1CLHVEQUFNO0FBQ3pCLGlCQUFpQixxREFBSTtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGFBQWEscUVBQWU7QUFDNUI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmsvZGV2L2xpYi9wYXJzZS5qcz9iMzVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5DcmVhdGV9IENyZWF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5GdWxsTm9ybWFsaXplZEV4dGVuc2lvbn0gRnVsbE5vcm1hbGl6ZWRFeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbENvbnN0cnVjdH0gSW5pdGlhbENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5QYXJzZUNvbnRleHR9IFBhcnNlQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5QYXJzZU9wdGlvbnN9IFBhcnNlT3B0aW9uc1xuICovXG5cbmltcG9ydCB7Y29tYmluZUV4dGVuc2lvbnN9IGZyb20gJ21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucydcbmltcG9ydCB7Y29udGVudH0gZnJvbSAnLi9pbml0aWFsaXplL2NvbnRlbnQuanMnXG5pbXBvcnQge2RvY3VtZW50fSBmcm9tICcuL2luaXRpYWxpemUvZG9jdW1lbnQuanMnXG5pbXBvcnQge2Zsb3d9IGZyb20gJy4vaW5pdGlhbGl6ZS9mbG93LmpzJ1xuaW1wb3J0IHt0ZXh0LCBzdHJpbmd9IGZyb20gJy4vaW5pdGlhbGl6ZS90ZXh0LmpzJ1xuaW1wb3J0IHtjcmVhdGVUb2tlbml6ZXJ9IGZyb20gJy4vY3JlYXRlLXRva2VuaXplci5qcydcbmltcG9ydCAqIGFzIGRlZmF1bHRDb25zdHJ1Y3RzIGZyb20gJy4vY29uc3RydWN0cy5qcydcblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogQHJldHVybnMge1BhcnNlQ29udGV4dH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIGNvbnN0IGNvbnN0cnVjdHMgPSAvKiogQHR5cGUge0Z1bGxOb3JtYWxpemVkRXh0ZW5zaW9ufSAqLyAoXG4gICAgY29tYmluZUV4dGVuc2lvbnMoW2RlZmF1bHRDb25zdHJ1Y3RzLCAuLi4oc2V0dGluZ3MuZXh0ZW5zaW9ucyB8fCBbXSldKVxuICApXG5cbiAgLyoqIEB0eXBlIHtQYXJzZUNvbnRleHR9ICovXG4gIGNvbnN0IHBhcnNlciA9IHtcbiAgICBkZWZpbmVkOiBbXSxcbiAgICBsYXp5OiB7fSxcbiAgICBjb25zdHJ1Y3RzLFxuICAgIGNvbnRlbnQ6IGNyZWF0ZShjb250ZW50KSxcbiAgICBkb2N1bWVudDogY3JlYXRlKGRvY3VtZW50KSxcbiAgICBmbG93OiBjcmVhdGUoZmxvdyksXG4gICAgc3RyaW5nOiBjcmVhdGUoc3RyaW5nKSxcbiAgICB0ZXh0OiBjcmVhdGUodGV4dClcbiAgfVxuXG4gIHJldHVybiBwYXJzZXJcblxuICAvKipcbiAgICogQHBhcmFtIHtJbml0aWFsQ29uc3RydWN0fSBpbml0aWFsXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGUoaW5pdGlhbCkge1xuICAgIHJldHVybiBjcmVhdG9yXG4gICAgLyoqIEB0eXBlIHtDcmVhdGV9ICovXG4gICAgZnVuY3Rpb24gY3JlYXRvcihmcm9tKSB7XG4gICAgICByZXR1cm4gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbCwgZnJvbSlcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/parse.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/postprocess.js": /*!**************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/postprocess.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"postprocess\": () => (/* binding */ postprocess)\n/* harmony export */ });\n/* harmony import */ var micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-subtokenize */ \"../../../node_modules/micromark-util-subtokenize/dev/index.js\");\n/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n\n\n/**\n * @param {Array} events\n * @returns {Array}\n */\nfunction postprocess(events) {\n while (!(0,micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__.subtokenize)(events)) {\n // Empty\n }\n\n return events\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL3Bvc3Rwcm9jZXNzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQSxhQUFhLHNDQUFzQztBQUNuRDs7QUFFc0Q7O0FBRXREO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLGFBQWE7QUFDYjtBQUNPO0FBQ1AsVUFBVSx1RUFBVztBQUNyQjtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL3Bvc3Rwcm9jZXNzLmpzPzEyOGMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV2ZW50fSBFdmVudFxuICovXG5cbmltcG9ydCB7c3VidG9rZW5pemV9IGZyb20gJ21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplJ1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqIEByZXR1cm5zIHtBcnJheTxFdmVudD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3N0cHJvY2VzcyhldmVudHMpIHtcbiAgd2hpbGUgKCFzdWJ0b2tlbml6ZShldmVudHMpKSB7XG4gICAgLy8gRW1wdHlcbiAgfVxuXG4gIHJldHVybiBldmVudHNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/postprocess.js\n"); /***/ }), /***/ "../../../node_modules/micromark/dev/lib/preprocess.js": /*!*************************************************************!*\ !*** ../../../node_modules/micromark/dev/lib/preprocess.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"preprocess\": () => (/* binding */ preprocess)\n/* harmony export */ });\n/* harmony import */ var micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol/codes.js */ \"../../../node_modules/micromark-util-symbol/codes.js\");\n/* harmony import */ var micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol/constants.js */ \"../../../node_modules/micromark-util-symbol/constants.js\");\n/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array}\n */\n\n\n\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nfunction preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean | undefined} */\n let start = true\n /** @type {boolean | undefined} */\n let atCarriageReturn\n\n return preprocessor\n\n /** @type {Preprocessor} */\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = []\n /** @type {RegExpMatchArray | null} */\n let match\n /** @type {number} */\n let next\n /** @type {number} */\n let startPosition\n /** @type {number} */\n let endPosition\n /** @type {Code} */\n let code\n\n // @ts-expect-error `Buffer` does allow an encoding.\n value = buffer + value.toString(encoding)\n startPosition = 0\n buffer = ''\n\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.byteOrderMarker) {\n startPosition++\n }\n\n start = undefined\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n\n if (\n code === micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lf &&\n startPosition === endPosition &&\n atCarriageReturn\n ) {\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturnLineFeed)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn)\n atCarriageReturn = undefined\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n\n switch (code) {\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.nul: {\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.replacementCharacter)\n column++\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.ht: {\n next = Math.ceil(column / micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_1__.constants.tabSize) * micromark_util_symbol_constants_js__WEBPACK_IMPORTED_MODULE_1__.constants.tabSize\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab)\n while (column++ < next) chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace)\n\n break\n }\n\n case micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lf: {\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.lineFeed)\n column = 1\n\n break\n }\n\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n\n startPosition = endPosition + 1\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn)\n if (buffer) chunks.push(buffer)\n chunks.push(micromark_util_symbol_codes_js__WEBPACK_IMPORTED_MODULE_0__.codes.eof)\n }\n\n return chunks\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pY3JvbWFyay9kZXYvbGliL3ByZXByb2Nlc3MuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQSxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLHNDQUFzQztBQUNuRDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsNEJBQTRCO0FBQ3ZDLGFBQWE7QUFDYjs7QUFFb0Q7QUFDUTs7QUFFNUQ7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDTztBQUNQO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBLGFBQWEscUJBQXFCO0FBQ2xDOztBQUVBOztBQUVBLGFBQWEsY0FBYztBQUMzQjtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBLGVBQWUseUJBQXlCO0FBQ3hDO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsaUZBQXFCO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsb0VBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHdGQUE0QjtBQUNoRDtBQUNBLFFBQVE7QUFDUjtBQUNBLHNCQUFzQixnRkFBb0I7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUscUVBQVM7QUFDeEIsd0JBQXdCLHNGQUEwQjtBQUNsRDs7QUFFQTtBQUNBOztBQUVBLGVBQWUsb0VBQVE7QUFDdkIsc0NBQXNDLGlGQUFpQixJQUFJLGlGQUFpQjtBQUM1RSx3QkFBd0IsK0VBQW1CO0FBQzNDLGdEQUFnRCw4RUFBa0I7O0FBRWxFO0FBQ0E7O0FBRUEsZUFBZSxvRUFBUTtBQUN2Qix3QkFBd0IsMEVBQWM7QUFDdEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QyxnRkFBb0I7QUFDNUQ7QUFDQSxrQkFBa0IscUVBQVM7QUFDM0I7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9taWNyb21hcmsvZGV2L2xpYi9wcmVwcm9jZXNzLmpzP2YwMDUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNodW5rfSBDaHVua1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVuY29kaW5nfSBFbmNvZGluZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5WYWx1ZX0gVmFsdWVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBQcmVwcm9jZXNzb3JcbiAqIEBwYXJhbSB7VmFsdWV9IHZhbHVlXG4gKiBAcGFyYW0ge0VuY29kaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nXVxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZD1mYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheTxDaHVuaz59XG4gKi9cblxuaW1wb3J0IHtjb2Rlc30gZnJvbSAnbWljcm9tYXJrLXV0aWwtc3ltYm9sL2NvZGVzLmpzJ1xuaW1wb3J0IHtjb25zdGFudHN9IGZyb20gJ21pY3JvbWFyay11dGlsLXN5bWJvbC9jb25zdGFudHMuanMnXG5cbmNvbnN0IHNlYXJjaCA9IC9bXFwwXFx0XFxuXFxyXS9nXG5cbi8qKlxuICogQHJldHVybnMge1ByZXByb2Nlc3Nvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3MoKSB7XG4gIGxldCBjb2x1bW4gPSAxXG4gIGxldCBidWZmZXIgPSAnJ1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzdGFydCA9IHRydWVcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYXRDYXJyaWFnZVJldHVyblxuXG4gIHJldHVybiBwcmVwcm9jZXNzb3JcblxuICAvKiogQHR5cGUge1ByZXByb2Nlc3Nvcn0gKi9cbiAgZnVuY3Rpb24gcHJlcHJvY2Vzc29yKHZhbHVlLCBlbmNvZGluZywgZW5kKSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxDaHVuaz59ICovXG4gICAgY29uc3QgY2h1bmtzID0gW11cbiAgICAvKiogQHR5cGUge1JlZ0V4cE1hdGNoQXJyYXkgfCBudWxsfSAqL1xuICAgIGxldCBtYXRjaFxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBuZXh0XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IHN0YXJ0UG9zaXRpb25cbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgZW5kUG9zaXRpb25cbiAgICAvKiogQHR5cGUge0NvZGV9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYEJ1ZmZlcmAgZG9lcyBhbGxvdyBhbiBlbmNvZGluZy5cbiAgICB2YWx1ZSA9IGJ1ZmZlciArIHZhbHVlLnRvU3RyaW5nKGVuY29kaW5nKVxuICAgIHN0YXJ0UG9zaXRpb24gPSAwXG4gICAgYnVmZmVyID0gJydcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgLy8gVG8gZG86IGBtYXJrZG93bi1yc2AgYWN0dWFsbHkgcGFyc2VzIEJPTXMgKGJ5dGUgb3JkZXIgbWFyaykuXG4gICAgICBpZiAodmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gY29kZXMuYnl0ZU9yZGVyTWFya2VyKSB7XG4gICAgICAgIHN0YXJ0UG9zaXRpb24rK1xuICAgICAgfVxuXG4gICAgICBzdGFydCA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICBzZWFyY2gubGFzdEluZGV4ID0gc3RhcnRQb3NpdGlvblxuICAgICAgbWF0Y2ggPSBzZWFyY2guZXhlYyh2YWx1ZSlcbiAgICAgIGVuZFBvc2l0aW9uID1cbiAgICAgICAgbWF0Y2ggJiYgbWF0Y2guaW5kZXggIT09IHVuZGVmaW5lZCA/IG1hdGNoLmluZGV4IDogdmFsdWUubGVuZ3RoXG4gICAgICBjb2RlID0gdmFsdWUuY2hhckNvZGVBdChlbmRQb3NpdGlvbilcblxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBidWZmZXIgPSB2YWx1ZS5zbGljZShzdGFydFBvc2l0aW9uKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvZGUgPT09IGNvZGVzLmxmICYmXG4gICAgICAgIHN0YXJ0UG9zaXRpb24gPT09IGVuZFBvc2l0aW9uICYmXG4gICAgICAgIGF0Q2FycmlhZ2VSZXR1cm5cbiAgICAgICkge1xuICAgICAgICBjaHVua3MucHVzaChjb2Rlcy5jYXJyaWFnZVJldHVybkxpbmVGZWVkKVxuICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdW5kZWZpbmVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikge1xuICAgICAgICAgIGNodW5rcy5wdXNoKGNvZGVzLmNhcnJpYWdlUmV0dXJuKVxuICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICBjaHVua3MucHVzaCh2YWx1ZS5zbGljZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpXG4gICAgICAgICAgY29sdW1uICs9IGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgY2FzZSBjb2Rlcy5udWw6IHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNvZGVzLnJlcGxhY2VtZW50Q2hhcmFjdGVyKVxuICAgICAgICAgICAgY29sdW1uKytcblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIGNvZGVzLmh0OiB7XG4gICAgICAgICAgICBuZXh0ID0gTWF0aC5jZWlsKGNvbHVtbiAvIGNvbnN0YW50cy50YWJTaXplKSAqIGNvbnN0YW50cy50YWJTaXplXG4gICAgICAgICAgICBjaHVua3MucHVzaChjb2Rlcy5ob3Jpem9udGFsVGFiKVxuICAgICAgICAgICAgd2hpbGUgKGNvbHVtbisrIDwgbmV4dCkgY2h1bmtzLnB1c2goY29kZXMudmlydHVhbFNwYWNlKVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgY29kZXMubGY6IHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNvZGVzLmxpbmVGZWVkKVxuICAgICAgICAgICAgY29sdW1uID0gMVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB0cnVlXG4gICAgICAgICAgICBjb2x1bW4gPSAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlvbiArIDFcbiAgICB9XG5cbiAgICBpZiAoZW5kKSB7XG4gICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikgY2h1bmtzLnB1c2goY29kZXMuY2FycmlhZ2VSZXR1cm4pXG4gICAgICBpZiAoYnVmZmVyKSBjaHVua3MucHVzaChidWZmZXIpXG4gICAgICBjaHVua3MucHVzaChjb2Rlcy5lb2YpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNodW5rc1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/micromark/dev/lib/preprocess.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/esm/incircle.js": /*!***************************************************************!*\ !*** ../../../node_modules/robust-predicates/esm/incircle.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"incircle\": () => (/* binding */ incircle),\n/* harmony export */ \"incirclefast\": () => (/* binding */ incirclefast)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/robust-predicates/esm/util.js\");\n\n\nconst iccerrboundA = (10 + 96 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst iccerrboundB = (4 + 48 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst iccerrboundC = (44 + 576 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\nconst bc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ca = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst aa = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bb = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst cc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst u = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst v = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst axtbc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst aytbc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst bxtca = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst bytca = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst cxtab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst cytab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst abt = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst bct = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst cat = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst abtt = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bctt = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst catt = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\n\nconst _8 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _16 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(16);\nconst _16b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(16);\nconst _16c = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(16);\nconst _32 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(32);\nconst _32b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(32);\nconst _48 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(48);\nconst _64 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(64);\n\nlet fin = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nlet fin2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\n\nfunction finadd(finlen, a, alen) {\n finlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(finlen, fin, a, alen, fin2);\n const tmp = fin; fin = fin2; fin2 = tmp;\n return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n let finlen;\n let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n let abtlen, bctlen, catlen;\n let abttlen, bcttlen, cattlen;\n let n1, n0;\n\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n\n s1 = bdx * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cdx * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ca[3] = u3;\n s1 = adx * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n\n finlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, adx, _8), _8, adx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdx, _8), _8, bdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdx, _8), _8, cdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n let det = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.estimate)(finlen, fin);\n let errbound = iccerrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - adx;\n adxtail = ax - (adx + bvirt) + (bvirt - dx);\n bvirt = ay - ady;\n adytail = ay - (ady + bvirt) + (bvirt - dy);\n bvirt = bx - bdx;\n bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n bvirt = by - bdy;\n bdytail = by - (bdy + bvirt) + (bvirt - dy);\n bvirt = cx - cdx;\n cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n bvirt = cy - cdy;\n cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n return det;\n }\n\n errbound = iccerrboundC * permanent + _util_js__WEBPACK_IMPORTED_MODULE_0__.resulterrbound * Math.abs(det);\n det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n 2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n 2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n 2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n s1 = adx * adx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = ady * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n ahi = c - (c - ady);\n alo = ady - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n aa[3] = u3;\n }\n if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n s1 = bdx * bdx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = bdy * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n ahi = c - (c - bdy);\n alo = bdy - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bb[3] = u3;\n }\n if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n s1 = cdx * cdx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n t1 = cdy * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n ahi = c - (c - cdy);\n alo = cdy - ahi;\n t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n _i = s0 + t0;\n bvirt = _i - s0;\n cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n cc[3] = u3;\n }\n\n if (adxtail !== 0) {\n axtbclen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, adxtail, axtbc);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(axtbclen, axtbc, 2 * adx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n }\n if (adytail !== 0) {\n aytbclen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, adytail, aytbc);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(aytbclen, aytbc, 2 * ady, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n }\n if (bdxtail !== 0) {\n bxtcalen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdxtail, bxtca);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bxtcalen, bxtca, 2 * bdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n }\n if (bdytail !== 0) {\n bytcalen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdytail, bytca);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bytcalen, bytca, 2 * bdy, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n }\n if (cdxtail !== 0) {\n cxtablen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdxtail, cxtab);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cxtablen, cxtab, 2 * cdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n }\n if (cdytail !== 0) {\n cytablen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdytail, cytab);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cytablen, cytab, 2 * cdy, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n }\n\n if (adxtail !== 0 || adytail !== 0) {\n if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n s1 = bdxtail * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * cdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n s1 = cdxtail * -bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * -bdy;\n bhi = c - (c - -bdy);\n blo = -bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * -bdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * -bdytail;\n bhi = c - (c - -bdytail);\n blo = -bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n bctlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(4, u, 4, v, bct);\n s1 = bdxtail * cdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdxtail * bdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bctt[3] = u3;\n bcttlen = 4;\n } else {\n bct[0] = 0;\n bctlen = 1;\n bctt[0] = 0;\n bcttlen = 1;\n }\n if (adxtail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bctlen, bct, adxtail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(axtbclen, axtbc, adxtail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bcttlen, bctt, adxtail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * adx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, adxtail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n if (bdytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n }\n if (cdytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n }\n }\n if (adytail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bctlen, bct, adytail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(aytbclen, aytbc, adytail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bcttlen, bctt, adytail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * ady, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, adytail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, adytail, _32), _32, _32b, _64), _64);\n }\n }\n if (bdxtail !== 0 || bdytail !== 0) {\n if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n s1 = cdxtail * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * adytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n n1 = -cdy;\n n0 = -cdytail;\n s1 = adxtail * n1;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * n1;\n bhi = c - (c - n1);\n blo = n1 - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * n0;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * n0;\n bhi = c - (c - n0);\n blo = n0 - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n catlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(4, u, 4, v, cat);\n s1 = cdxtail * adytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdxtail;\n ahi = c - (c - cdxtail);\n alo = cdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adxtail * cdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdytail;\n bhi = c - (c - cdytail);\n blo = cdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n catt[3] = u3;\n cattlen = 4;\n } else {\n cat[0] = 0;\n catlen = 1;\n catt[0] = 0;\n cattlen = 1;\n }\n if (bdxtail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(catlen, cat, bdxtail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bxtcalen, bxtca, bdxtail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cattlen, catt, bdxtail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * bdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, bdxtail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n if (cdytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n }\n if (adytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n }\n }\n if (bdytail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(catlen, cat, bdytail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bytcalen, bytca, bdytail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cattlen, catt, bdytail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * bdy, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, bdytail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, bdytail, _32), _32, _32b, _64), _64);\n }\n }\n if (cdxtail !== 0 || cdytail !== 0) {\n if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n s1 = adxtail * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * bdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n n1 = -ady;\n n0 = -adytail;\n s1 = bdxtail * n1;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * n1;\n bhi = c - (c - n1);\n blo = n1 - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * n0;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * n0;\n bhi = c - (c - n0);\n blo = n0 - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 + t0;\n bvirt = _i - s0;\n v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 + t1;\n bvirt = _i - _0;\n v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n u3 = _j + _i;\n bvirt = u3 - _j;\n v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n v[3] = u3;\n abtlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(4, u, 4, v, abt);\n s1 = adxtail * bdytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adxtail;\n ahi = c - (c - adxtail);\n alo = adxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdytail;\n bhi = c - (c - bdytail);\n blo = bdytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdxtail * adytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdxtail;\n ahi = c - (c - bdxtail);\n alo = bdxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adytail;\n bhi = c - (c - adytail);\n blo = adytail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n abtt[3] = u3;\n abttlen = 4;\n } else {\n abt[0] = 0;\n abtlen = 1;\n abtt[0] = 0;\n abttlen = 1;\n }\n if (cdxtail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abtlen, abt, cdxtail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cxtablen, cxtab, cdxtail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abttlen, abtt, cdxtail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * cdx, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, cdxtail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n if (adytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n }\n if (bdytail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n }\n }\n if (cdytail !== 0) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abtlen, abt, cdytail, _16c);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(cytablen, cytab, cdytail, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n const len2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abttlen, abtt, cdytail, _8);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, 2 * cdy, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len2, _8, cdytail, _16b), _16b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n }\n }\n\n return fin[finlen - 1];\n}\n\nfunction incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n\n const bdxcdy = bdx * cdy;\n const cdxbdy = cdx * bdy;\n const alift = adx * adx + ady * ady;\n\n const cdxady = cdx * ady;\n const adxcdy = adx * cdy;\n const blift = bdx * bdx + bdy * bdy;\n\n const adxbdy = adx * bdy;\n const bdxady = bdx * ady;\n const clift = cdx * cdx + cdy * cdy;\n\n const det =\n alift * (bdxcdy - cdxbdy) +\n blift * (cdxady - adxcdy) +\n clift * (adxbdy - bdxady);\n\n const permanent =\n (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n const errbound = iccerrboundA * permanent;\n\n if (det > errbound || -det > errbound) {\n return det;\n }\n return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nfunction incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n const adx = ax - dx;\n const ady = ay - dy;\n const bdx = bx - dx;\n const bdy = by - dy;\n const cdx = cx - dx;\n const cdy = cy - dy;\n\n const abdet = adx * bdy - bdx * ady;\n const bcdet = bdx * cdy - cdx * bdy;\n const cadet = cdx * ady - adx * cdy;\n const alift = adx * adx + ady * ady;\n const blift = bdx * bdx + bdy * bdy;\n const clift = cdx * cdx + cdy * cdy;\n\n return alift * bcdet + blift * cadet + clift * abdet;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS9pbmNpcmNsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBa0c7O0FBRWxHLGdDQUFnQyw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2xELCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELGlDQUFpQyw2Q0FBTyxJQUFJLDZDQUFPLEdBQUcsNkNBQU87O0FBRTdELFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFVBQVUsNkNBQUc7QUFDYixVQUFVLDZDQUFHO0FBQ2IsY0FBYyw2Q0FBRztBQUNqQixjQUFjLDZDQUFHO0FBQ2pCLGNBQWMsNkNBQUc7QUFDakIsY0FBYyw2Q0FBRztBQUNqQixjQUFjLDZDQUFHO0FBQ2pCLGNBQWMsNkNBQUc7QUFDakIsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLGFBQWEsNkNBQUc7O0FBRWhCLFdBQVcsNkNBQUc7QUFDZCxZQUFZLDZDQUFHO0FBQ2YsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLFlBQVksNkNBQUc7QUFDZixhQUFhLDZDQUFHO0FBQ2hCLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHOztBQUVmLFVBQVUsNkNBQUc7QUFDYixXQUFXLDZDQUFHOztBQUVkO0FBQ0EsYUFBYSw2Q0FBRztBQUNoQixxQkFBcUIsWUFBWTtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBRXJCLHlCQUF5QiwrQ0FBSztBQUM5QixvQ0FBb0MsbURBQVM7QUFDN0MsZ0JBQWdCLCtDQUFLO0FBQ3JCLGdCQUFnQiwrQ0FBSztBQUNyQixnQkFBZ0IsK0NBQUs7QUFDckI7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS9pbmNpcmNsZS5qcz84ZjBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXBzaWxvbiwgc3BsaXR0ZXIsIHJlc3VsdGVycmJvdW5kLCBlc3RpbWF0ZSwgdmVjLCBzdW0sIHN1bV90aHJlZSwgc2NhbGV9IGZyb20gJy4vdXRpbC5qcyc7XG5cbmNvbnN0IGljY2VycmJvdW5kQSA9ICgxMCArIDk2ICogZXBzaWxvbikgKiBlcHNpbG9uO1xuY29uc3QgaWNjZXJyYm91bmRCID0gKDQgKyA0OCAqIGVwc2lsb24pICogZXBzaWxvbjtcbmNvbnN0IGljY2VycmJvdW5kQyA9ICg0NCArIDU3NiAqIGVwc2lsb24pICogZXBzaWxvbiAqIGVwc2lsb247XG5cbmNvbnN0IGJjID0gdmVjKDQpO1xuY29uc3QgY2EgPSB2ZWMoNCk7XG5jb25zdCBhYiA9IHZlYyg0KTtcbmNvbnN0IGFhID0gdmVjKDQpO1xuY29uc3QgYmIgPSB2ZWMoNCk7XG5jb25zdCBjYyA9IHZlYyg0KTtcbmNvbnN0IHUgPSB2ZWMoNCk7XG5jb25zdCB2ID0gdmVjKDQpO1xuY29uc3QgYXh0YmMgPSB2ZWMoOCk7XG5jb25zdCBheXRiYyA9IHZlYyg4KTtcbmNvbnN0IGJ4dGNhID0gdmVjKDgpO1xuY29uc3QgYnl0Y2EgPSB2ZWMoOCk7XG5jb25zdCBjeHRhYiA9IHZlYyg4KTtcbmNvbnN0IGN5dGFiID0gdmVjKDgpO1xuY29uc3QgYWJ0ID0gdmVjKDgpO1xuY29uc3QgYmN0ID0gdmVjKDgpO1xuY29uc3QgY2F0ID0gdmVjKDgpO1xuY29uc3QgYWJ0dCA9IHZlYyg0KTtcbmNvbnN0IGJjdHQgPSB2ZWMoNCk7XG5jb25zdCBjYXR0ID0gdmVjKDQpO1xuXG5jb25zdCBfOCA9IHZlYyg4KTtcbmNvbnN0IF8xNiA9IHZlYygxNik7XG5jb25zdCBfMTZiID0gdmVjKDE2KTtcbmNvbnN0IF8xNmMgPSB2ZWMoMTYpO1xuY29uc3QgXzMyID0gdmVjKDMyKTtcbmNvbnN0IF8zMmIgPSB2ZWMoMzIpO1xuY29uc3QgXzQ4ID0gdmVjKDQ4KTtcbmNvbnN0IF82NCA9IHZlYyg2NCk7XG5cbmxldCBmaW4gPSB2ZWMoMTE1Mik7XG5sZXQgZmluMiA9IHZlYygxMTUyKTtcblxuZnVuY3Rpb24gZmluYWRkKGZpbmxlbiwgYSwgYWxlbikge1xuICAgIGZpbmxlbiA9IHN1bShmaW5sZW4sIGZpbiwgYSwgYWxlbiwgZmluMik7XG4gICAgY29uc3QgdG1wID0gZmluOyBmaW4gPSBmaW4yOyBmaW4yID0gdG1wO1xuICAgIHJldHVybiBmaW5sZW47XG59XG5cbmZ1bmN0aW9uIGluY2lyY2xlYWRhcHQoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgZHgsIGR5LCBwZXJtYW5lbnQpIHtcbiAgICBsZXQgZmlubGVuO1xuICAgIGxldCBhZHh0YWlsLCBiZHh0YWlsLCBjZHh0YWlsLCBhZHl0YWlsLCBiZHl0YWlsLCBjZHl0YWlsO1xuICAgIGxldCBheHRiY2xlbiwgYXl0YmNsZW4sIGJ4dGNhbGVuLCBieXRjYWxlbiwgY3h0YWJsZW4sIGN5dGFibGVuO1xuICAgIGxldCBhYnRsZW4sIGJjdGxlbiwgY2F0bGVuO1xuICAgIGxldCBhYnR0bGVuLCBiY3R0bGVuLCBjYXR0bGVuO1xuICAgIGxldCBuMSwgbjA7XG5cbiAgICBsZXQgYnZpcnQsIGMsIGFoaSwgYWxvLCBiaGksIGJsbywgX2ksIF9qLCBfMCwgczEsIHMwLCB0MSwgdDAsIHUzO1xuXG4gICAgY29uc3QgYWR4ID0gYXggLSBkeDtcbiAgICBjb25zdCBiZHggPSBieCAtIGR4O1xuICAgIGNvbnN0IGNkeCA9IGN4IC0gZHg7XG4gICAgY29uc3QgYWR5ID0gYXkgLSBkeTtcbiAgICBjb25zdCBiZHkgPSBieSAtIGR5O1xuICAgIGNvbnN0IGNkeSA9IGN5IC0gZHk7XG5cbiAgICBzMSA9IGJkeCAqIGNkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiZHg7XG4gICAgYWhpID0gYyAtIChjIC0gYmR4KTtcbiAgICBhbG8gPSBiZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogY2R5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGNkeSk7XG4gICAgYmxvID0gY2R5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGNkeCAqIGJkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjZHg7XG4gICAgYWhpID0gYyAtIChjIC0gY2R4KTtcbiAgICBhbG8gPSBjZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJkeSk7XG4gICAgYmxvID0gYmR5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGJjWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgYmNbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGJjWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgYmNbM10gPSB1MztcbiAgICBzMSA9IGNkeCAqIGFkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjZHg7XG4gICAgYWhpID0gYyAtIChjIC0gY2R4KTtcbiAgICBhbG8gPSBjZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYWR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGFkeSk7XG4gICAgYmxvID0gYWR5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGFkeCAqIGNkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhZHg7XG4gICAgYWhpID0gYyAtIChjIC0gYWR4KTtcbiAgICBhbG8gPSBhZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogY2R5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGNkeSk7XG4gICAgYmxvID0gY2R5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGNhWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgY2FbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGNhWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgY2FbM10gPSB1MztcbiAgICBzMSA9IGFkeCAqIGJkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhZHg7XG4gICAgYWhpID0gYyAtIChjIC0gYWR4KTtcbiAgICBhbG8gPSBhZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJkeSk7XG4gICAgYmxvID0gYmR5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGJkeCAqIGFkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiZHg7XG4gICAgYWhpID0gYyAtIChjIC0gYmR4KTtcbiAgICBhbG8gPSBiZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYWR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGFkeSk7XG4gICAgYmxvID0gYWR5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGFiWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgYWJbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGFiWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgYWJbM10gPSB1MztcblxuICAgIGZpbmxlbiA9IHN1bShcbiAgICAgICAgc3VtKFxuICAgICAgICAgICAgc3VtKFxuICAgICAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGJjLCBhZHgsIF84KSwgXzgsIGFkeCwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGJjLCBhZHksIF84KSwgXzgsIGFkeSwgXzE2YiksIF8xNmIsIF8zMiksIF8zMixcbiAgICAgICAgICAgIHN1bShcbiAgICAgICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBjYSwgYmR4LCBfOCksIF84LCBiZHgsIF8xNiksIF8xNixcbiAgICAgICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBjYSwgYmR5LCBfOCksIF84LCBiZHksIF8xNmIpLCBfMTZiLCBfMzJiKSwgXzMyYiwgXzY0KSwgXzY0LFxuICAgICAgICBzdW0oXG4gICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBhYiwgY2R4LCBfOCksIF84LCBjZHgsIF8xNiksIF8xNixcbiAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGFiLCBjZHksIF84KSwgXzgsIGNkeSwgXzE2YiksIF8xNmIsIF8zMiksIF8zMiwgZmluKTtcblxuICAgIGxldCBkZXQgPSBlc3RpbWF0ZShmaW5sZW4sIGZpbik7XG4gICAgbGV0IGVycmJvdW5kID0gaWNjZXJyYm91bmRCICogcGVybWFuZW50O1xuICAgIGlmIChkZXQgPj0gZXJyYm91bmQgfHwgLWRldCA+PSBlcnJib3VuZCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGJ2aXJ0ID0gYXggLSBhZHg7XG4gICAgYWR4dGFpbCA9IGF4IC0gKGFkeCArIGJ2aXJ0KSArIChidmlydCAtIGR4KTtcbiAgICBidmlydCA9IGF5IC0gYWR5O1xuICAgIGFkeXRhaWwgPSBheSAtIChhZHkgKyBidmlydCkgKyAoYnZpcnQgLSBkeSk7XG4gICAgYnZpcnQgPSBieCAtIGJkeDtcbiAgICBiZHh0YWlsID0gYnggLSAoYmR4ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZHgpO1xuICAgIGJ2aXJ0ID0gYnkgLSBiZHk7XG4gICAgYmR5dGFpbCA9IGJ5IC0gKGJkeSArIGJ2aXJ0KSArIChidmlydCAtIGR5KTtcbiAgICBidmlydCA9IGN4IC0gY2R4O1xuICAgIGNkeHRhaWwgPSBjeCAtIChjZHggKyBidmlydCkgKyAoYnZpcnQgLSBkeCk7XG4gICAgYnZpcnQgPSBjeSAtIGNkeTtcbiAgICBjZHl0YWlsID0gY3kgLSAoY2R5ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZHkpO1xuICAgIGlmIChhZHh0YWlsID09PSAwICYmIGJkeHRhaWwgPT09IDAgJiYgY2R4dGFpbCA9PT0gMCAmJiBhZHl0YWlsID09PSAwICYmIGJkeXRhaWwgPT09IDAgJiYgY2R5dGFpbCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGVycmJvdW5kID0gaWNjZXJyYm91bmRDICogcGVybWFuZW50ICsgcmVzdWx0ZXJyYm91bmQgKiBNYXRoLmFicyhkZXQpO1xuICAgIGRldCArPSAoKGFkeCAqIGFkeCArIGFkeSAqIGFkeSkgKiAoKGJkeCAqIGNkeXRhaWwgKyBjZHkgKiBiZHh0YWlsKSAtIChiZHkgKiBjZHh0YWlsICsgY2R4ICogYmR5dGFpbCkpICtcbiAgICAgICAgMiAqIChhZHggKiBhZHh0YWlsICsgYWR5ICogYWR5dGFpbCkgKiAoYmR4ICogY2R5IC0gYmR5ICogY2R4KSkgK1xuICAgICAgICAoKGJkeCAqIGJkeCArIGJkeSAqIGJkeSkgKiAoKGNkeCAqIGFkeXRhaWwgKyBhZHkgKiBjZHh0YWlsKSAtIChjZHkgKiBhZHh0YWlsICsgYWR4ICogY2R5dGFpbCkpICtcbiAgICAgICAgMiAqIChiZHggKiBiZHh0YWlsICsgYmR5ICogYmR5dGFpbCkgKiAoY2R4ICogYWR5IC0gY2R5ICogYWR4KSkgK1xuICAgICAgICAoKGNkeCAqIGNkeCArIGNkeSAqIGNkeSkgKiAoKGFkeCAqIGJkeXRhaWwgKyBiZHkgKiBhZHh0YWlsKSAtIChhZHkgKiBiZHh0YWlsICsgYmR4ICogYWR5dGFpbCkpICtcbiAgICAgICAgMiAqIChjZHggKiBjZHh0YWlsICsgY2R5ICogY2R5dGFpbCkgKiAoYWR4ICogYmR5IC0gYWR5ICogYmR4KSk7XG5cbiAgICBpZiAoZGV0ID49IGVycmJvdW5kIHx8IC1kZXQgPj0gZXJyYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGRldDtcbiAgICB9XG5cbiAgICBpZiAoYmR4dGFpbCAhPT0gMCB8fCBiZHl0YWlsICE9PSAwIHx8IGNkeHRhaWwgIT09IDAgfHwgY2R5dGFpbCAhPT0gMCkge1xuICAgICAgICBzMSA9IGFkeCAqIGFkeDtcbiAgICAgICAgYyA9IHNwbGl0dGVyICogYWR4O1xuICAgICAgICBhaGkgPSBjIC0gKGMgLSBhZHgpO1xuICAgICAgICBhbG8gPSBhZHggLSBhaGk7XG4gICAgICAgIHMwID0gYWxvICogYWxvIC0gKHMxIC0gYWhpICogYWhpIC0gKGFoaSArIGFoaSkgKiBhbG8pO1xuICAgICAgICB0MSA9IGFkeSAqIGFkeTtcbiAgICAgICAgYyA9IHNwbGl0dGVyICogYWR5O1xuICAgICAgICBhaGkgPSBjIC0gKGMgLSBhZHkpO1xuICAgICAgICBhbG8gPSBhZHkgLSBhaGk7XG4gICAgICAgIHQwID0gYWxvICogYWxvIC0gKHQxIC0gYWhpICogYWhpIC0gKGFoaSArIGFoaSkgKiBhbG8pO1xuICAgICAgICBfaSA9IHMwICsgdDA7XG4gICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgYWFbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgX2ogPSBzMSArIF9pO1xuICAgICAgICBidmlydCA9IF9qIC0gczE7XG4gICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgIF9pID0gXzAgKyB0MTtcbiAgICAgICAgYnZpcnQgPSBfaSAtIF8wO1xuICAgICAgICBhYVsxXSA9IF8wIC0gKF9pIC0gYnZpcnQpICsgKHQxIC0gYnZpcnQpO1xuICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICAgICAgYWFbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICAgICAgYWFbM10gPSB1MztcbiAgICB9XG4gICAgaWYgKGNkeHRhaWwgIT09IDAgfHwgY2R5dGFpbCAhPT0gMCB8fCBhZHh0YWlsICE9PSAwIHx8IGFkeXRhaWwgIT09IDApIHtcbiAgICAgICAgczEgPSBiZHggKiBiZHg7XG4gICAgICAgIGMgPSBzcGxpdHRlciAqIGJkeDtcbiAgICAgICAgYWhpID0gYyAtIChjIC0gYmR4KTtcbiAgICAgICAgYWxvID0gYmR4IC0gYWhpO1xuICAgICAgICBzMCA9IGFsbyAqIGFsbyAtIChzMSAtIGFoaSAqIGFoaSAtIChhaGkgKyBhaGkpICogYWxvKTtcbiAgICAgICAgdDEgPSBiZHkgKiBiZHk7XG4gICAgICAgIGMgPSBzcGxpdHRlciAqIGJkeTtcbiAgICAgICAgYWhpID0gYyAtIChjIC0gYmR5KTtcbiAgICAgICAgYWxvID0gYmR5IC0gYWhpO1xuICAgICAgICB0MCA9IGFsbyAqIGFsbyAtICh0MSAtIGFoaSAqIGFoaSAtIChhaGkgKyBhaGkpICogYWxvKTtcbiAgICAgICAgX2kgPSBzMCArIHQwO1xuICAgICAgICBidmlydCA9IF9pIC0gczA7XG4gICAgICAgIGJiWzBdID0gczAgLSAoX2kgLSBidmlydCkgKyAodDAgLSBidmlydCk7XG4gICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgICAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgIGJ2aXJ0ID0gX2kgLSBfMDtcbiAgICAgICAgYmJbMV0gPSBfMCAtIChfaSAtIGJ2aXJ0KSArICh0MSAtIGJ2aXJ0KTtcbiAgICAgICAgdTMgPSBfaiArIF9pO1xuICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgIGJiWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgIGJiWzNdID0gdTM7XG4gICAgfVxuICAgIGlmIChhZHh0YWlsICE9PSAwIHx8IGFkeXRhaWwgIT09IDAgfHwgYmR4dGFpbCAhPT0gMCB8fCBiZHl0YWlsICE9PSAwKSB7XG4gICAgICAgIHMxID0gY2R4ICogY2R4O1xuICAgICAgICBjID0gc3BsaXR0ZXIgKiBjZHg7XG4gICAgICAgIGFoaSA9IGMgLSAoYyAtIGNkeCk7XG4gICAgICAgIGFsbyA9IGNkeCAtIGFoaTtcbiAgICAgICAgczAgPSBhbG8gKiBhbG8gLSAoczEgLSBhaGkgKiBhaGkgLSAoYWhpICsgYWhpKSAqIGFsbyk7XG4gICAgICAgIHQxID0gY2R5ICogY2R5O1xuICAgICAgICBjID0gc3BsaXR0ZXIgKiBjZHk7XG4gICAgICAgIGFoaSA9IGMgLSAoYyAtIGNkeSk7XG4gICAgICAgIGFsbyA9IGNkeSAtIGFoaTtcbiAgICAgICAgdDAgPSBhbG8gKiBhbG8gLSAodDEgLSBhaGkgKiBhaGkgLSAoYWhpICsgYWhpKSAqIGFsbyk7XG4gICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgYnZpcnQgPSBfaSAtIHMwO1xuICAgICAgICBjY1swXSA9IHMwIC0gKF9pIC0gYnZpcnQpICsgKHQwIC0gYnZpcnQpO1xuICAgICAgICBfaiA9IHMxICsgX2k7XG4gICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICAgICAgX2kgPSBfMCArIHQxO1xuICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgIGNjWzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgIHUzID0gX2ogKyBfaTtcbiAgICAgICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgICAgICBjY1syXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICBjY1szXSA9IHUzO1xuICAgIH1cblxuICAgIGlmIChhZHh0YWlsICE9PSAwKSB7XG4gICAgICAgIGF4dGJjbGVuID0gc2NhbGUoNCwgYmMsIGFkeHRhaWwsIGF4dGJjKTtcbiAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtX3RocmVlKFxuICAgICAgICAgICAgc2NhbGUoYXh0YmNsZW4sIGF4dGJjLCAyICogYWR4LCBfMTYpLCBfMTYsXG4gICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBjYywgYWR4dGFpbCwgXzgpLCBfOCwgYmR5LCBfMTZiKSwgXzE2YixcbiAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGJiLCBhZHh0YWlsLCBfOCksIF84LCAtY2R5LCBfMTZjKSwgXzE2YywgXzMyLCBfNDgpLCBfNDgpO1xuICAgIH1cbiAgICBpZiAoYWR5dGFpbCAhPT0gMCkge1xuICAgICAgICBheXRiY2xlbiA9IHNjYWxlKDQsIGJjLCBhZHl0YWlsLCBheXRiYyk7XG4gICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bV90aHJlZShcbiAgICAgICAgICAgIHNjYWxlKGF5dGJjbGVuLCBheXRiYywgMiAqIGFkeSwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgc2NhbGUoc2NhbGUoNCwgYmIsIGFkeXRhaWwsIF84KSwgXzgsIGNkeCwgXzE2YiksIF8xNmIsXG4gICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBjYywgYWR5dGFpbCwgXzgpLCBfOCwgLWJkeCwgXzE2YyksIF8xNmMsIF8zMiwgXzQ4KSwgXzQ4KTtcbiAgICB9XG4gICAgaWYgKGJkeHRhaWwgIT09IDApIHtcbiAgICAgICAgYnh0Y2FsZW4gPSBzY2FsZSg0LCBjYSwgYmR4dGFpbCwgYnh0Y2EpO1xuICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzdW1fdGhyZWUoXG4gICAgICAgICAgICBzY2FsZShieHRjYWxlbiwgYnh0Y2EsIDIgKiBiZHgsIF8xNiksIF8xNixcbiAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGFhLCBiZHh0YWlsLCBfOCksIF84LCBjZHksIF8xNmIpLCBfMTZiLFxuICAgICAgICAgICAgc2NhbGUoc2NhbGUoNCwgY2MsIGJkeHRhaWwsIF84KSwgXzgsIC1hZHksIF8xNmMpLCBfMTZjLCBfMzIsIF80OCksIF80OCk7XG4gICAgfVxuICAgIGlmIChiZHl0YWlsICE9PSAwKSB7XG4gICAgICAgIGJ5dGNhbGVuID0gc2NhbGUoNCwgY2EsIGJkeXRhaWwsIGJ5dGNhKTtcbiAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtX3RocmVlKFxuICAgICAgICAgICAgc2NhbGUoYnl0Y2FsZW4sIGJ5dGNhLCAyICogYmR5LCBfMTYpLCBfMTYsXG4gICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBjYywgYmR5dGFpbCwgXzgpLCBfOCwgYWR4LCBfMTZiKSwgXzE2YixcbiAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGFhLCBiZHl0YWlsLCBfOCksIF84LCAtY2R4LCBfMTZjKSwgXzE2YywgXzMyLCBfNDgpLCBfNDgpO1xuICAgIH1cbiAgICBpZiAoY2R4dGFpbCAhPT0gMCkge1xuICAgICAgICBjeHRhYmxlbiA9IHNjYWxlKDQsIGFiLCBjZHh0YWlsLCBjeHRhYik7XG4gICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bV90aHJlZShcbiAgICAgICAgICAgIHNjYWxlKGN4dGFibGVuLCBjeHRhYiwgMiAqIGNkeCwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgc2NhbGUoc2NhbGUoNCwgYmIsIGNkeHRhaWwsIF84KSwgXzgsIGFkeSwgXzE2YiksIF8xNmIsXG4gICAgICAgICAgICBzY2FsZShzY2FsZSg0LCBhYSwgY2R4dGFpbCwgXzgpLCBfOCwgLWJkeSwgXzE2YyksIF8xNmMsIF8zMiwgXzQ4KSwgXzQ4KTtcbiAgICB9XG4gICAgaWYgKGNkeXRhaWwgIT09IDApIHtcbiAgICAgICAgY3l0YWJsZW4gPSBzY2FsZSg0LCBhYiwgY2R5dGFpbCwgY3l0YWIpO1xuICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzdW1fdGhyZWUoXG4gICAgICAgICAgICBzY2FsZShjeXRhYmxlbiwgY3l0YWIsIDIgKiBjZHksIF8xNiksIF8xNixcbiAgICAgICAgICAgIHNjYWxlKHNjYWxlKDQsIGFhLCBjZHl0YWlsLCBfOCksIF84LCBiZHgsIF8xNmIpLCBfMTZiLFxuICAgICAgICAgICAgc2NhbGUoc2NhbGUoNCwgYmIsIGNkeXRhaWwsIF84KSwgXzgsIC1hZHgsIF8xNmMpLCBfMTZjLCBfMzIsIF80OCksIF80OCk7XG4gICAgfVxuXG4gICAgaWYgKGFkeHRhaWwgIT09IDAgfHwgYWR5dGFpbCAhPT0gMCkge1xuICAgICAgICBpZiAoYmR4dGFpbCAhPT0gMCB8fCBiZHl0YWlsICE9PSAwIHx8IGNkeHRhaWwgIT09IDAgfHwgY2R5dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgczEgPSBiZHh0YWlsICogY2R5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYmR4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGJkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gYmR4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGNkeTtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGNkeSk7XG4gICAgICAgICAgICBibG8gPSBjZHkgLSBiaGk7XG4gICAgICAgICAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICB0MSA9IGJkeCAqIGNkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBiZHg7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBiZHgpO1xuICAgICAgICAgICAgYWxvID0gYmR4IC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGNkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gY2R5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgICAgIHVbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgICAgICB1WzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICB1WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICB1WzNdID0gdTM7XG4gICAgICAgICAgICBzMSA9IGNkeHRhaWwgKiAtYmR5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGNkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gY2R4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIC1iZHk7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSAtYmR5KTtcbiAgICAgICAgICAgIGJsbyA9IC1iZHkgLSBiaGk7XG4gICAgICAgICAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICB0MSA9IGNkeCAqIC1iZHl0YWlsO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R4O1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gY2R4KTtcbiAgICAgICAgICAgIGFsbyA9IGNkeCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIC1iZHl0YWlsO1xuICAgICAgICAgICAgYmhpID0gYyAtIChjIC0gLWJkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gLWJkeXRhaWwgLSBiaGk7XG4gICAgICAgICAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICBfaSA9IHMwICsgdDA7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gczA7XG4gICAgICAgICAgICB2WzBdID0gczAgLSAoX2kgLSBidmlydCkgKyAodDAgLSBidmlydCk7XG4gICAgICAgICAgICBfaiA9IHMxICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IF9qIC0gczE7XG4gICAgICAgICAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgX2kgPSBfMCArIHQxO1xuICAgICAgICAgICAgYnZpcnQgPSBfaSAtIF8wO1xuICAgICAgICAgICAgdlsxXSA9IF8wIC0gKF9pIC0gYnZpcnQpICsgKHQxIC0gYnZpcnQpO1xuICAgICAgICAgICAgdTMgPSBfaiArIF9pO1xuICAgICAgICAgICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgICAgICAgICAgdlsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgdlszXSA9IHUzO1xuICAgICAgICAgICAgYmN0bGVuID0gc3VtKDQsIHUsIDQsIHYsIGJjdCk7XG4gICAgICAgICAgICBzMSA9IGJkeHRhaWwgKiBjZHl0YWlsO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYmR4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGJkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gYmR4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGNkeXRhaWw7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBjZHl0YWlsKTtcbiAgICAgICAgICAgIGJsbyA9IGNkeXRhaWwgLSBiaGk7XG4gICAgICAgICAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICB0MSA9IGNkeHRhaWwgKiBiZHl0YWlsO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGNkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gY2R4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGJkeXRhaWw7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBiZHl0YWlsKTtcbiAgICAgICAgICAgIGJsbyA9IGJkeXRhaWwgLSBiaGk7XG4gICAgICAgICAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICBfaSA9IHMwIC0gdDA7XG4gICAgICAgICAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgICAgICAgICBiY3R0WzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgICAgICAgICBfaiA9IHMxICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IF9qIC0gczE7XG4gICAgICAgICAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgX2kgPSBfMCAtIHQxO1xuICAgICAgICAgICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgICAgICAgICAgYmN0dFsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgICAgICAgICAgdTMgPSBfaiArIF9pO1xuICAgICAgICAgICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgICAgICAgICAgYmN0dFsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgYmN0dFszXSA9IHUzO1xuICAgICAgICAgICAgYmN0dGxlbiA9IDQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiY3RbMF0gPSAwO1xuICAgICAgICAgICAgYmN0bGVuID0gMTtcbiAgICAgICAgICAgIGJjdHRbMF0gPSAwO1xuICAgICAgICAgICAgYmN0dGxlbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkeHRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHNjYWxlKGJjdGxlbiwgYmN0LCBhZHh0YWlsLCBfMTZjKTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bShcbiAgICAgICAgICAgICAgICBzY2FsZShheHRiY2xlbiwgYXh0YmMsIGFkeHRhaWwsIF8xNiksIF8xNixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIDIgKiBhZHgsIF8zMiksIF8zMiwgXzQ4KSwgXzQ4KTtcblxuICAgICAgICAgICAgY29uc3QgbGVuMiA9IHNjYWxlKGJjdHRsZW4sIGJjdHQsIGFkeHRhaWwsIF84KTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bV90aHJlZShcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4yLCBfOCwgMiAqIGFkeCwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbjIsIF84LCBhZHh0YWlsLCBfMTZiKSwgXzE2YixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIGFkeHRhaWwsIF8zMiksIF8zMiwgXzMyYiwgXzY0KSwgXzY0KTtcblxuICAgICAgICAgICAgaWYgKGJkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZShzY2FsZSg0LCBjYywgYWR4dGFpbCwgXzgpLCBfOCwgYmR5dGFpbCwgXzE2KSwgXzE2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjZHl0YWlsICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc2NhbGUoc2NhbGUoNCwgYmIsIC1hZHh0YWlsLCBfOCksIF84LCBjZHl0YWlsLCBfMTYpLCBfMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhZHl0YWlsICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSBzY2FsZShiY3RsZW4sIGJjdCwgYWR5dGFpbCwgXzE2Yyk7XG4gICAgICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzdW0oXG4gICAgICAgICAgICAgICAgc2NhbGUoYXl0YmNsZW4sIGF5dGJjLCBhZHl0YWlsLCBfMTYpLCBfMTYsXG4gICAgICAgICAgICAgICAgc2NhbGUobGVuLCBfMTZjLCAyICogYWR5LCBfMzIpLCBfMzIsIF80OCksIF80OCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlbjIgPSBzY2FsZShiY3R0bGVuLCBiY3R0LCBhZHl0YWlsLCBfOCk7XG4gICAgICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzdW1fdGhyZWUoXG4gICAgICAgICAgICAgICAgc2NhbGUobGVuMiwgXzgsIDIgKiBhZHksIF8xNiksIF8xNixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4yLCBfOCwgYWR5dGFpbCwgXzE2YiksIF8xNmIsXG4gICAgICAgICAgICAgICAgc2NhbGUobGVuLCBfMTZjLCBhZHl0YWlsLCBfMzIpLCBfMzIsIF8zMmIsIF82NCksIF82NCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJkeHRhaWwgIT09IDAgfHwgYmR5dGFpbCAhPT0gMCkge1xuICAgICAgICBpZiAoY2R4dGFpbCAhPT0gMCB8fCBjZHl0YWlsICE9PSAwIHx8IGFkeHRhaWwgIT09IDAgfHwgYWR5dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgczEgPSBjZHh0YWlsICogYWR5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGNkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gY2R4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGFkeTtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGFkeSk7XG4gICAgICAgICAgICBibG8gPSBhZHkgLSBiaGk7XG4gICAgICAgICAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICB0MSA9IGNkeCAqIGFkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBjZHg7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBjZHgpO1xuICAgICAgICAgICAgYWxvID0gY2R4IC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYWR5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGFkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gYWR5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgICAgIHVbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgICAgICB1WzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICB1WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICB1WzNdID0gdTM7XG4gICAgICAgICAgICBuMSA9IC1jZHk7XG4gICAgICAgICAgICBuMCA9IC1jZHl0YWlsO1xuICAgICAgICAgICAgczEgPSBhZHh0YWlsICogbjE7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBhZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gYWR4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBhZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogbjE7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBuMSk7XG4gICAgICAgICAgICBibG8gPSBuMSAtIGJoaTtcbiAgICAgICAgICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIHQxID0gYWR4ICogbjA7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBhZHg7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBhZHgpO1xuICAgICAgICAgICAgYWxvID0gYWR4IC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogbjA7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBuMCk7XG4gICAgICAgICAgICBibG8gPSBuMCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgICAgIHZbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgICAgICB2WzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICB2WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICB2WzNdID0gdTM7XG4gICAgICAgICAgICBjYXRsZW4gPSBzdW0oNCwgdSwgNCwgdiwgY2F0KTtcbiAgICAgICAgICAgIHMxID0gY2R4dGFpbCAqIGFkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBjZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gY2R4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBjZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYWR5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGFkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gYWR5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIHQxID0gYWR4dGFpbCAqIGNkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBhZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gYWR4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBhZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogY2R5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGNkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gY2R5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgLSB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICAgICAgICAgIGNhdHRbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wIC0gdDE7XG4gICAgICAgICAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgICAgICAgICBjYXR0WzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICBjYXR0WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBjYXR0WzNdID0gdTM7XG4gICAgICAgICAgICBjYXR0bGVuID0gNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhdFswXSA9IDA7XG4gICAgICAgICAgICBjYXRsZW4gPSAxO1xuICAgICAgICAgICAgY2F0dFswXSA9IDA7XG4gICAgICAgICAgICBjYXR0bGVuID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmR4dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gc2NhbGUoY2F0bGVuLCBjYXQsIGJkeHRhaWwsIF8xNmMpO1xuICAgICAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtKFxuICAgICAgICAgICAgICAgIHNjYWxlKGJ4dGNhbGVuLCBieHRjYSwgYmR4dGFpbCwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbiwgXzE2YywgMiAqIGJkeCwgXzMyKSwgXzMyLCBfNDgpLCBfNDgpO1xuXG4gICAgICAgICAgICBjb25zdCBsZW4yID0gc2NhbGUoY2F0dGxlbiwgY2F0dCwgYmR4dGFpbCwgXzgpO1xuICAgICAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtX3RocmVlKFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbjIsIF84LCAyICogYmR4LCBfMTYpLCBfMTYsXG4gICAgICAgICAgICAgICAgc2NhbGUobGVuMiwgXzgsIGJkeHRhaWwsIF8xNmIpLCBfMTZiLFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbiwgXzE2YywgYmR4dGFpbCwgXzMyKSwgXzMyLCBfMzJiLCBfNjQpLCBfNjQpO1xuXG4gICAgICAgICAgICBpZiAoY2R5dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHNjYWxlKHNjYWxlKDQsIGFhLCBiZHh0YWlsLCBfOCksIF84LCBjZHl0YWlsLCBfMTYpLCBfMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZShzY2FsZSg0LCBjYywgLWJkeHRhaWwsIF84KSwgXzgsIGFkeXRhaWwsIF8xNiksIF8xNik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHNjYWxlKGNhdGxlbiwgY2F0LCBiZHl0YWlsLCBfMTZjKTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bShcbiAgICAgICAgICAgICAgICBzY2FsZShieXRjYWxlbiwgYnl0Y2EsIGJkeXRhaWwsIF8xNiksIF8xNixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIDIgKiBiZHksIF8zMiksIF8zMiwgXzQ4KSwgXzQ4KTtcblxuICAgICAgICAgICAgY29uc3QgbGVuMiA9IHNjYWxlKGNhdHRsZW4sIGNhdHQsIGJkeXRhaWwsIF84KTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bV90aHJlZShcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4yLCBfOCwgMiAqIGJkeSwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbjIsIF84LCBiZHl0YWlsLCBfMTZiKSwgXzE2YixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIGJkeXRhaWwsIF8zMiksIF8zMiwgIF8zMmIsIF82NCksIF82NCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNkeHRhaWwgIT09IDAgfHwgY2R5dGFpbCAhPT0gMCkge1xuICAgICAgICBpZiAoYWR4dGFpbCAhPT0gMCB8fCBhZHl0YWlsICE9PSAwIHx8IGJkeHRhaWwgIT09IDAgfHwgYmR5dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgczEgPSBhZHh0YWlsICogYmR5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYWR4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIGFkeHRhaWwpO1xuICAgICAgICAgICAgYWxvID0gYWR4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGJkeTtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGJkeSk7XG4gICAgICAgICAgICBibG8gPSBiZHkgLSBiaGk7XG4gICAgICAgICAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICB0MSA9IGFkeCAqIGJkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBhZHg7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBhZHgpO1xuICAgICAgICAgICAgYWxvID0gYWR4IC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYmR5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGJkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gYmR5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgICAgIHVbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgICAgICB1WzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICB1WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICB1WzNdID0gdTM7XG4gICAgICAgICAgICBuMSA9IC1hZHk7XG4gICAgICAgICAgICBuMCA9IC1hZHl0YWlsO1xuICAgICAgICAgICAgczEgPSBiZHh0YWlsICogbjE7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBiZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gYmR4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBiZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogbjE7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBuMSk7XG4gICAgICAgICAgICBibG8gPSBuMSAtIGJoaTtcbiAgICAgICAgICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIHQxID0gYmR4ICogbjA7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBiZHg7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBiZHgpO1xuICAgICAgICAgICAgYWxvID0gYmR4IC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogbjA7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBuMCk7XG4gICAgICAgICAgICBibG8gPSBuMCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgKyB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2kgLSBzMDtcbiAgICAgICAgICAgIHZbMF0gPSBzMCAtIChfaSAtIGJ2aXJ0KSArICh0MCAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wICsgdDE7XG4gICAgICAgICAgICBidmlydCA9IF9pIC0gXzA7XG4gICAgICAgICAgICB2WzFdID0gXzAgLSAoX2kgLSBidmlydCkgKyAodDEgLSBidmlydCk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICB2WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICB2WzNdID0gdTM7XG4gICAgICAgICAgICBhYnRsZW4gPSBzdW0oNCwgdSwgNCwgdiwgYWJ0KTtcbiAgICAgICAgICAgIHMxID0gYWR4dGFpbCAqIGJkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBhZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gYWR4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBhZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYmR5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGJkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gYmR5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIHQxID0gYmR4dGFpbCAqIGFkeXRhaWw7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBiZHh0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gYmR4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSBiZHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYWR5dGFpbDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGFkeXRhaWwpO1xuICAgICAgICAgICAgYmxvID0gYWR5dGFpbCAtIGJoaTtcbiAgICAgICAgICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIF9pID0gczAgLSB0MDtcbiAgICAgICAgICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICAgICAgICAgIGFidHRbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICAgICAgICAgIF9qID0gczEgKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICAgICAgICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBfaSA9IF8wIC0gdDE7XG4gICAgICAgICAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgICAgICAgICBhYnR0WzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgICAgICAgICB1MyA9IF9qICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgICAgICAgICBhYnR0WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgICAgICAgICBhYnR0WzNdID0gdTM7XG4gICAgICAgICAgICBhYnR0bGVuID0gNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFidFswXSA9IDA7XG4gICAgICAgICAgICBhYnRsZW4gPSAxO1xuICAgICAgICAgICAgYWJ0dFswXSA9IDA7XG4gICAgICAgICAgICBhYnR0bGVuID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2R4dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gc2NhbGUoYWJ0bGVuLCBhYnQsIGNkeHRhaWwsIF8xNmMpO1xuICAgICAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtKFxuICAgICAgICAgICAgICAgIHNjYWxlKGN4dGFibGVuLCBjeHRhYiwgY2R4dGFpbCwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbiwgXzE2YywgMiAqIGNkeCwgXzMyKSwgXzMyLCBfNDgpLCBfNDgpO1xuXG4gICAgICAgICAgICBjb25zdCBsZW4yID0gc2NhbGUoYWJ0dGxlbiwgYWJ0dCwgY2R4dGFpbCwgXzgpO1xuICAgICAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc3VtX3RocmVlKFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbjIsIF84LCAyICogY2R4LCBfMTYpLCBfMTYsXG4gICAgICAgICAgICAgICAgc2NhbGUobGVuMiwgXzgsIGNkeHRhaWwsIF8xNmIpLCBfMTZiLFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbiwgXzE2YywgY2R4dGFpbCwgXzMyKSwgXzMyLCBfMzJiLCBfNjQpLCBfNjQpO1xuXG4gICAgICAgICAgICBpZiAoYWR5dGFpbCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHNjYWxlKHNjYWxlKDQsIGJiLCBjZHh0YWlsLCBfOCksIF84LCBhZHl0YWlsLCBfMTYpLCBfMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZShzY2FsZSg0LCBhYSwgLWNkeHRhaWwsIF84KSwgXzgsIGJkeXRhaWwsIF8xNiksIF8xNik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHNjYWxlKGFidGxlbiwgYWJ0LCBjZHl0YWlsLCBfMTZjKTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bShcbiAgICAgICAgICAgICAgICBzY2FsZShjeXRhYmxlbiwgY3l0YWIsIGNkeXRhaWwsIF8xNiksIF8xNixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIDIgKiBjZHksIF8zMiksIF8zMiwgXzQ4KSwgXzQ4KTtcblxuICAgICAgICAgICAgY29uc3QgbGVuMiA9IHNjYWxlKGFidHRsZW4sIGFidHQsIGNkeXRhaWwsIF84KTtcbiAgICAgICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHN1bV90aHJlZShcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4yLCBfOCwgMiAqIGNkeSwgXzE2KSwgXzE2LFxuICAgICAgICAgICAgICAgIHNjYWxlKGxlbjIsIF84LCBjZHl0YWlsLCBfMTZiKSwgXzE2YixcbiAgICAgICAgICAgICAgICBzY2FsZShsZW4sIF8xNmMsIGNkeXRhaWwsIF8zMiksIF8zMiwgXzMyYiwgXzY0KSwgXzY0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaW5bZmlubGVuIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNpcmNsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBkeCwgZHkpIHtcbiAgICBjb25zdCBhZHggPSBheCAtIGR4O1xuICAgIGNvbnN0IGJkeCA9IGJ4IC0gZHg7XG4gICAgY29uc3QgY2R4ID0gY3ggLSBkeDtcbiAgICBjb25zdCBhZHkgPSBheSAtIGR5O1xuICAgIGNvbnN0IGJkeSA9IGJ5IC0gZHk7XG4gICAgY29uc3QgY2R5ID0gY3kgLSBkeTtcblxuICAgIGNvbnN0IGJkeGNkeSA9IGJkeCAqIGNkeTtcbiAgICBjb25zdCBjZHhiZHkgPSBjZHggKiBiZHk7XG4gICAgY29uc3QgYWxpZnQgPSBhZHggKiBhZHggKyBhZHkgKiBhZHk7XG5cbiAgICBjb25zdCBjZHhhZHkgPSBjZHggKiBhZHk7XG4gICAgY29uc3QgYWR4Y2R5ID0gYWR4ICogY2R5O1xuICAgIGNvbnN0IGJsaWZ0ID0gYmR4ICogYmR4ICsgYmR5ICogYmR5O1xuXG4gICAgY29uc3QgYWR4YmR5ID0gYWR4ICogYmR5O1xuICAgIGNvbnN0IGJkeGFkeSA9IGJkeCAqIGFkeTtcbiAgICBjb25zdCBjbGlmdCA9IGNkeCAqIGNkeCArIGNkeSAqIGNkeTtcblxuICAgIGNvbnN0IGRldCA9XG4gICAgICAgIGFsaWZ0ICogKGJkeGNkeSAtIGNkeGJkeSkgK1xuICAgICAgICBibGlmdCAqIChjZHhhZHkgLSBhZHhjZHkpICtcbiAgICAgICAgY2xpZnQgKiAoYWR4YmR5IC0gYmR4YWR5KTtcblxuICAgIGNvbnN0IHBlcm1hbmVudCA9XG4gICAgICAgIChNYXRoLmFicyhiZHhjZHkpICsgTWF0aC5hYnMoY2R4YmR5KSkgKiBhbGlmdCArXG4gICAgICAgIChNYXRoLmFicyhjZHhhZHkpICsgTWF0aC5hYnMoYWR4Y2R5KSkgKiBibGlmdCArXG4gICAgICAgIChNYXRoLmFicyhhZHhiZHkpICsgTWF0aC5hYnMoYmR4YWR5KSkgKiBjbGlmdDtcblxuICAgIGNvbnN0IGVycmJvdW5kID0gaWNjZXJyYm91bmRBICogcGVybWFuZW50O1xuXG4gICAgaWYgKGRldCA+IGVycmJvdW5kIHx8IC1kZXQgPiBlcnJib3VuZCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cbiAgICByZXR1cm4gaW5jaXJjbGVhZGFwdChheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBkeCwgZHksIHBlcm1hbmVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNpcmNsZWZhc3QoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgZHgsIGR5KSB7XG4gICAgY29uc3QgYWR4ID0gYXggLSBkeDtcbiAgICBjb25zdCBhZHkgPSBheSAtIGR5O1xuICAgIGNvbnN0IGJkeCA9IGJ4IC0gZHg7XG4gICAgY29uc3QgYmR5ID0gYnkgLSBkeTtcbiAgICBjb25zdCBjZHggPSBjeCAtIGR4O1xuICAgIGNvbnN0IGNkeSA9IGN5IC0gZHk7XG5cbiAgICBjb25zdCBhYmRldCA9IGFkeCAqIGJkeSAtIGJkeCAqIGFkeTtcbiAgICBjb25zdCBiY2RldCA9IGJkeCAqIGNkeSAtIGNkeCAqIGJkeTtcbiAgICBjb25zdCBjYWRldCA9IGNkeCAqIGFkeSAtIGFkeCAqIGNkeTtcbiAgICBjb25zdCBhbGlmdCA9IGFkeCAqIGFkeCArIGFkeSAqIGFkeTtcbiAgICBjb25zdCBibGlmdCA9IGJkeCAqIGJkeCArIGJkeSAqIGJkeTtcbiAgICBjb25zdCBjbGlmdCA9IGNkeCAqIGNkeCArIGNkeSAqIGNkeTtcblxuICAgIHJldHVybiBhbGlmdCAqIGJjZGV0ICsgYmxpZnQgKiBjYWRldCArIGNsaWZ0ICogYWJkZXQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/esm/incircle.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/esm/insphere.js": /*!***************************************************************!*\ !*** ../../../node_modules/robust-predicates/esm/insphere.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"insphere\": () => (/* binding */ insphere),\n/* harmony export */ \"inspherefast\": () => (/* binding */ inspherefast)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/robust-predicates/esm/util.js\");\n\n\nconst isperrboundA = (16 + 224 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst isperrboundB = (5 + 72 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst isperrboundC = (71 + 1408 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\nconst ab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst cd = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst de = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ea = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ac = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bd = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ce = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst da = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst eb = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\n\nconst abc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst bcd = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst cde = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst dea = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst eab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst abd = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst bce = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst cda = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst deb = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst eac = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\n\nconst adet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nconst bdet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nconst cdet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nconst ddet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nconst edet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\nconst abdet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(2304);\nconst cddet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(2304);\nconst cdedet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(3456);\nconst deter = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(5760);\n\nconst _8 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _8b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _8c = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _16 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(16);\nconst _24 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(24);\nconst _48 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(48);\nconst _48b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(48);\nconst _96 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(96);\nconst _192 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(192);\nconst _384x = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(384);\nconst _384y = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(384);\nconst _384z = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(384);\nconst _768 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, a, az, _8), _8,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, b, bz, _8b), _8b,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n const len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(alen, a, blen, b, _48), _48,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.negate)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _96, x, _192), _192, x, _384x), _384x,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _96, y, _192), _192, y, _384y), _384y,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n s1 = ax * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bx * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n s1 = bx * cy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cx * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cx * dy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dx * cy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n cd[3] = u3;\n s1 = dx * ey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ex * dy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n de[3] = u3;\n s1 = ex * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ax * ey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ea[3] = u3;\n s1 = ax * cy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cx * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ac[3] = u3;\n s1 = bx * dy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dx * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bd[3] = u3;\n s1 = cx * ey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cx;\n ahi = c - (c - cx);\n alo = cx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ex * cy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cy;\n bhi = c - (c - cy);\n blo = cy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ce[3] = u3;\n s1 = dx * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dx;\n ahi = c - (c - dx);\n alo = dx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ax * dy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n ahi = c - (c - ax);\n alo = ax - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dy;\n bhi = c - (c - dy);\n blo = dy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n da[3] = u3;\n s1 = ex * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ex;\n ahi = c - (c - ex);\n alo = ex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bx * ey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n ahi = c - (c - bx);\n alo = bx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ey;\n bhi = c - (c - ey);\n blo = ey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n eb[3] = u3;\n\n const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n const deterlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n return deter[deterlen - 1];\n}\n\nconst xdet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(96);\nconst ydet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(96);\nconst zdet = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(96);\nconst fin = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum_three)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _24, x, _48), _48, x, xdet), xdet,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _24, y, _48), _48, y, ydet), ydet,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n let ab3, bc3, cd3, da3, ac3, bd3;\n\n let aextail, bextail, cextail, dextail;\n let aeytail, beytail, ceytail, deytail;\n let aeztail, beztail, ceztail, deztail;\n\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n const aex = ax - ex;\n const bex = bx - ex;\n const cex = cx - ex;\n const dex = dx - ex;\n const aey = ay - ey;\n const bey = by - ey;\n const cey = cy - ey;\n const dey = dy - ey;\n const aez = az - ez;\n const bez = bz - ez;\n const cez = cz - ez;\n const dez = dz - ez;\n\n s1 = aex * bey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bex * aey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n ab3 = _j + _i;\n bvirt = ab3 - _j;\n ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n ab[3] = ab3;\n s1 = bex * cey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cex * bey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n bc3 = _j + _i;\n bvirt = bc3 - _j;\n bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n bc[3] = bc3;\n s1 = cex * dey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dex * cey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n cd3 = _j + _i;\n bvirt = cd3 - _j;\n cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n cd[3] = cd3;\n s1 = dex * aey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = aex * dey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n da3 = _j + _i;\n bvirt = da3 - _j;\n da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n da[3] = da3;\n s1 = aex * cey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aex;\n ahi = c - (c - aex);\n alo = aex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cey;\n bhi = c - (c - cey);\n blo = cey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cex * aey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cex;\n ahi = c - (c - cex);\n alo = cex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * aey;\n bhi = c - (c - aey);\n blo = aey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n ac3 = _j + _i;\n bvirt = ac3 - _j;\n ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n ac[3] = ac3;\n s1 = bex * dey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bex;\n ahi = c - (c - bex);\n alo = bex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dey;\n bhi = c - (c - dey);\n blo = dey - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = dex * bey;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * dex;\n ahi = c - (c - dex);\n alo = dex - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bey;\n bhi = c - (c - bey);\n blo = bey - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n bd3 = _j + _i;\n bvirt = bd3 - _j;\n bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n bd[3] = bd3;\n\n const finlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.negate)(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.negate)(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n let det = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.estimate)(finlen, fin);\n let errbound = isperrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - aex;\n aextail = ax - (aex + bvirt) + (bvirt - ex);\n bvirt = ay - aey;\n aeytail = ay - (aey + bvirt) + (bvirt - ey);\n bvirt = az - aez;\n aeztail = az - (aez + bvirt) + (bvirt - ez);\n bvirt = bx - bex;\n bextail = bx - (bex + bvirt) + (bvirt - ex);\n bvirt = by - bey;\n beytail = by - (bey + bvirt) + (bvirt - ey);\n bvirt = bz - bez;\n beztail = bz - (bez + bvirt) + (bvirt - ez);\n bvirt = cx - cex;\n cextail = cx - (cex + bvirt) + (bvirt - ex);\n bvirt = cy - cey;\n ceytail = cy - (cey + bvirt) + (bvirt - ey);\n bvirt = cz - cez;\n ceztail = cz - (cez + bvirt) + (bvirt - ez);\n bvirt = dx - dex;\n dextail = dx - (dex + bvirt) + (bvirt - ex);\n bvirt = dy - dey;\n deytail = dy - (dey + bvirt) + (bvirt - ey);\n bvirt = dz - dez;\n deztail = dz - (dez + bvirt) + (bvirt - ez);\n if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n bextail === 0 && beytail === 0 && beztail === 0 &&\n cextail === 0 && ceytail === 0 && ceztail === 0 &&\n dextail === 0 && deytail === 0 && deztail === 0) {\n return det;\n }\n\n errbound = isperrboundC * permanent + _util_js__WEBPACK_IMPORTED_MODULE_0__.resulterrbound * Math.abs(det);\n\n const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n det +=\n (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n 2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nfunction insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n const aex = ax - ex;\n const bex = bx - ex;\n const cex = cx - ex;\n const dex = dx - ex;\n const aey = ay - ey;\n const bey = by - ey;\n const cey = cy - ey;\n const dey = dy - ey;\n const aez = az - ez;\n const bez = bz - ez;\n const cez = cz - ez;\n const dez = dz - ez;\n\n const aexbey = aex * bey;\n const bexaey = bex * aey;\n const ab = aexbey - bexaey;\n const bexcey = bex * cey;\n const cexbey = cex * bey;\n const bc = bexcey - cexbey;\n const cexdey = cex * dey;\n const dexcey = dex * cey;\n const cd = cexdey - dexcey;\n const dexaey = dex * aey;\n const aexdey = aex * dey;\n const da = dexaey - aexdey;\n const aexcey = aex * cey;\n const cexaey = cex * aey;\n const ac = aexcey - cexaey;\n const bexdey = bex * dey;\n const dexbey = dex * bey;\n const bd = bexdey - dexbey;\n\n const alift = aex * aex + aey * aey + aez * aez;\n const blift = bex * bex + bey * bey + bez * bez;\n const clift = cex * cex + cey * cey + cez * cez;\n const dlift = dex * dex + dey * dey + dez * dez;\n\n const det =\n (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n const aezplus = Math.abs(aez);\n const bezplus = Math.abs(bez);\n const cezplus = Math.abs(cez);\n const dezplus = Math.abs(dez);\n const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n const permanent =\n (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n const errbound = isperrboundA * permanent;\n if (det > errbound || -det > errbound) {\n return det;\n }\n return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nfunction inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n const aex = pax - pex;\n const bex = pbx - pex;\n const cex = pcx - pex;\n const dex = pdx - pex;\n const aey = pay - pey;\n const bey = pby - pey;\n const cey = pcy - pey;\n const dey = pdy - pey;\n const aez = paz - pez;\n const bez = pbz - pez;\n const cez = pcz - pez;\n const dez = pdz - pez;\n\n const ab = aex * bey - bex * aey;\n const bc = bex * cey - cex * bey;\n const cd = cex * dey - dex * cey;\n const da = dex * aey - aex * dey;\n const ac = aex * cey - cex * aey;\n const bd = bex * dey - dex * bey;\n\n const abc = aez * bc - bez * ac + cez * ab;\n const bcd = bez * cd - cez * bd + dez * bc;\n const cda = cez * da + dez * ac + aez * cd;\n const dab = dez * ab + aez * bd + bez * da;\n\n const alift = aex * aex + aey * aey + aez * aez;\n const blift = bex * bex + bey * bey + bez * bez;\n const clift = cex * cex + cey * cey + cez * cez;\n const dlift = dex * dex + dey * dey + dez * dez;\n\n return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS9pbnNwaGVyZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMEc7O0FBRTFHLGlDQUFpQyw2Q0FBTyxJQUFJLDZDQUFPO0FBQ25ELCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELGtDQUFrQyw2Q0FBTyxJQUFJLDZDQUFPLEdBQUcsNkNBQU87O0FBRTlELFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFdBQVcsNkNBQUc7O0FBRWQsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRzs7QUFFZixhQUFhLDZDQUFHO0FBQ2hCLGFBQWEsNkNBQUc7QUFDaEIsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLGFBQWEsNkNBQUc7QUFDaEIsY0FBYyw2Q0FBRztBQUNqQixjQUFjLDZDQUFHO0FBQ2pCLGVBQWUsNkNBQUc7QUFDbEIsY0FBYyw2Q0FBRzs7QUFFakIsV0FBVyw2Q0FBRztBQUNkLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsYUFBYSw2Q0FBRztBQUNoQixZQUFZLDZDQUFHO0FBQ2YsYUFBYSw2Q0FBRztBQUNoQixjQUFjLDZDQUFHO0FBQ2pCLGNBQWMsNkNBQUc7QUFDakIsY0FBYyw2Q0FBRztBQUNqQixhQUFhLDZDQUFHOztBQUVoQjtBQUNBLFdBQVcsbURBQVM7QUFDcEIsUUFBUSwrQ0FBSztBQUNiLFFBQVEsK0NBQUs7QUFDYixRQUFRLCtDQUFLO0FBQ2I7O0FBRUE7QUFDQSxnQkFBZ0IsNkNBQUc7QUFDbkIsUUFBUSw2Q0FBRztBQUNYLFFBQVEsZ0RBQU0sQ0FBQyw2Q0FBRzs7QUFFbEIsV0FBVyxtREFBUztBQUNwQixRQUFRLCtDQUFLLENBQUMsK0NBQUs7QUFDbkIsUUFBUSwrQ0FBSyxDQUFDLCtDQUFLO0FBQ25CLFFBQVEsK0NBQUssQ0FBQywrQ0FBSztBQUNuQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLG1EQUFTO0FBQzlCO0FBQ0E7QUFDQSxRQUFRLG1EQUFTO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGFBQWEsNkNBQUc7QUFDaEIsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLFlBQVksNkNBQUc7O0FBRWY7QUFDQTtBQUNBLFdBQVcsbURBQVM7QUFDcEIsUUFBUSwrQ0FBSyxDQUFDLCtDQUFLO0FBQ25CLFFBQVEsK0NBQUssQ0FBQywrQ0FBSztBQUNuQixRQUFRLCtDQUFLLENBQUMsK0NBQUs7QUFDbkI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsNkNBQUc7QUFDdEIsUUFBUSw2Q0FBRztBQUNYLFlBQVksZ0RBQU07QUFDbEI7QUFDQSxRQUFRLDZDQUFHO0FBQ1gsWUFBWSxnREFBTTtBQUNsQjs7QUFFQSxjQUFjLGtEQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEMsb0RBQWM7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yb2J1c3QtcHJlZGljYXRlcy9lc20vaW5zcGhlcmUuanM/NWYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Vwc2lsb24sIHNwbGl0dGVyLCByZXN1bHRlcnJib3VuZCwgZXN0aW1hdGUsIHZlYywgc3VtLCBzdW1fdGhyZWUsIHNjYWxlLCBuZWdhdGV9IGZyb20gJy4vdXRpbC5qcyc7XG5cbmNvbnN0IGlzcGVycmJvdW5kQSA9ICgxNiArIDIyNCAqIGVwc2lsb24pICogZXBzaWxvbjtcbmNvbnN0IGlzcGVycmJvdW5kQiA9ICg1ICsgNzIgKiBlcHNpbG9uKSAqIGVwc2lsb247XG5jb25zdCBpc3BlcnJib3VuZEMgPSAoNzEgKyAxNDA4ICogZXBzaWxvbikgKiBlcHNpbG9uICogZXBzaWxvbjtcblxuY29uc3QgYWIgPSB2ZWMoNCk7XG5jb25zdCBiYyA9IHZlYyg0KTtcbmNvbnN0IGNkID0gdmVjKDQpO1xuY29uc3QgZGUgPSB2ZWMoNCk7XG5jb25zdCBlYSA9IHZlYyg0KTtcbmNvbnN0IGFjID0gdmVjKDQpO1xuY29uc3QgYmQgPSB2ZWMoNCk7XG5jb25zdCBjZSA9IHZlYyg0KTtcbmNvbnN0IGRhID0gdmVjKDQpO1xuY29uc3QgZWIgPSB2ZWMoNCk7XG5cbmNvbnN0IGFiYyA9IHZlYygyNCk7XG5jb25zdCBiY2QgPSB2ZWMoMjQpO1xuY29uc3QgY2RlID0gdmVjKDI0KTtcbmNvbnN0IGRlYSA9IHZlYygyNCk7XG5jb25zdCBlYWIgPSB2ZWMoMjQpO1xuY29uc3QgYWJkID0gdmVjKDI0KTtcbmNvbnN0IGJjZSA9IHZlYygyNCk7XG5jb25zdCBjZGEgPSB2ZWMoMjQpO1xuY29uc3QgZGViID0gdmVjKDI0KTtcbmNvbnN0IGVhYyA9IHZlYygyNCk7XG5cbmNvbnN0IGFkZXQgPSB2ZWMoMTE1Mik7XG5jb25zdCBiZGV0ID0gdmVjKDExNTIpO1xuY29uc3QgY2RldCA9IHZlYygxMTUyKTtcbmNvbnN0IGRkZXQgPSB2ZWMoMTE1Mik7XG5jb25zdCBlZGV0ID0gdmVjKDExNTIpO1xuY29uc3QgYWJkZXQgPSB2ZWMoMjMwNCk7XG5jb25zdCBjZGRldCA9IHZlYygyMzA0KTtcbmNvbnN0IGNkZWRldCA9IHZlYygzNDU2KTtcbmNvbnN0IGRldGVyID0gdmVjKDU3NjApO1xuXG5jb25zdCBfOCA9IHZlYyg4KTtcbmNvbnN0IF84YiA9IHZlYyg4KTtcbmNvbnN0IF84YyA9IHZlYyg4KTtcbmNvbnN0IF8xNiA9IHZlYygxNik7XG5jb25zdCBfMjQgPSB2ZWMoMjQpO1xuY29uc3QgXzQ4ID0gdmVjKDQ4KTtcbmNvbnN0IF80OGIgPSB2ZWMoNDgpO1xuY29uc3QgXzk2ID0gdmVjKDk2KTtcbmNvbnN0IF8xOTIgPSB2ZWMoMTkyKTtcbmNvbnN0IF8zODR4ID0gdmVjKDM4NCk7XG5jb25zdCBfMzg0eSA9IHZlYygzODQpO1xuY29uc3QgXzM4NHogPSB2ZWMoMzg0KTtcbmNvbnN0IF83NjggPSB2ZWMoNzY4KTtcblxuZnVuY3Rpb24gc3VtX3RocmVlX3NjYWxlKGEsIGIsIGMsIGF6LCBieiwgY3osIG91dCkge1xuICAgIHJldHVybiBzdW1fdGhyZWUoXG4gICAgICAgIHNjYWxlKDQsIGEsIGF6LCBfOCksIF84LFxuICAgICAgICBzY2FsZSg0LCBiLCBieiwgXzhiKSwgXzhiLFxuICAgICAgICBzY2FsZSg0LCBjLCBjeiwgXzhjKSwgXzhjLCBfMTYsIG91dCk7XG59XG5cbmZ1bmN0aW9uIGxpZnRleGFjdChhbGVuLCBhLCBibGVuLCBiLCBjbGVuLCBjLCBkbGVuLCBkLCB4LCB5LCB6LCBvdXQpIHtcbiAgICBjb25zdCBsZW4gPSBzdW0oXG4gICAgICAgIHN1bShhbGVuLCBhLCBibGVuLCBiLCBfNDgpLCBfNDgsXG4gICAgICAgIG5lZ2F0ZShzdW0oY2xlbiwgYywgZGxlbiwgZCwgXzQ4YiksIF80OGIpLCBfNDhiLCBfOTYpO1xuXG4gICAgcmV0dXJuIHN1bV90aHJlZShcbiAgICAgICAgc2NhbGUoc2NhbGUobGVuLCBfOTYsIHgsIF8xOTIpLCBfMTkyLCB4LCBfMzg0eCksIF8zODR4LFxuICAgICAgICBzY2FsZShzY2FsZShsZW4sIF85NiwgeSwgXzE5MiksIF8xOTIsIHksIF8zODR5KSwgXzM4NHksXG4gICAgICAgIHNjYWxlKHNjYWxlKGxlbiwgXzk2LCB6LCBfMTkyKSwgXzE5MiwgeiwgXzM4NHopLCBfMzg0eiwgXzc2OCwgb3V0KTtcbn1cblxuZnVuY3Rpb24gaW5zcGhlcmVleGFjdChheCwgYXksIGF6LCBieCwgYnksIGJ6LCBjeCwgY3ksIGN6LCBkeCwgZHksIGR6LCBleCwgZXksIGV6KSB7XG4gICAgbGV0IGJ2aXJ0LCBjLCBhaGksIGFsbywgYmhpLCBibG8sIF9pLCBfaiwgXzAsIHMxLCBzMCwgdDEsIHQwLCB1MztcblxuICAgIHMxID0gYXggKiBieTtcbiAgICBjID0gc3BsaXR0ZXIgKiBheDtcbiAgICBhaGkgPSBjIC0gKGMgLSBheCk7XG4gICAgYWxvID0gYXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYnk7XG4gICAgYmhpID0gYyAtIChjIC0gYnkpO1xuICAgIGJsbyA9IGJ5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGJ4ICogYXk7XG4gICAgYyA9IHNwbGl0dGVyICogYng7XG4gICAgYWhpID0gYyAtIChjIC0gYngpO1xuICAgIGFsbyA9IGJ4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGF5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGF5KTtcbiAgICBibG8gPSBheSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBhYlswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGFiWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBhYlsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGFiWzNdID0gdTM7XG4gICAgczEgPSBieCAqIGN5O1xuICAgIGMgPSBzcGxpdHRlciAqIGJ4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGJ4KTtcbiAgICBhbG8gPSBieCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBjeSk7XG4gICAgYmxvID0gY3kgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gY3ggKiBieTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjeDtcbiAgICBhaGkgPSBjIC0gKGMgLSBjeCk7XG4gICAgYWxvID0gY3ggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYnk7XG4gICAgYmhpID0gYyAtIChjIC0gYnkpO1xuICAgIGJsbyA9IGJ5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGJjWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgYmNbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGJjWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgYmNbM10gPSB1MztcbiAgICBzMSA9IGN4ICogZHk7XG4gICAgYyA9IHNwbGl0dGVyICogY3g7XG4gICAgYWhpID0gYyAtIChjIC0gY3gpO1xuICAgIGFsbyA9IGN4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGR5KTtcbiAgICBibG8gPSBkeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBkeCAqIGN5O1xuICAgIGMgPSBzcGxpdHRlciAqIGR4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGR4KTtcbiAgICBhbG8gPSBkeCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBjeSk7XG4gICAgYmxvID0gY3kgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgY2RbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBjZFsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgIHUzID0gX2ogKyBfaTtcbiAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgY2RbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBjZFszXSA9IHUzO1xuICAgIHMxID0gZHggKiBleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBkeDtcbiAgICBhaGkgPSBjIC0gKGMgLSBkeCk7XG4gICAgYWxvID0gZHggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogZXk7XG4gICAgYmhpID0gYyAtIChjIC0gZXkpO1xuICAgIGJsbyA9IGV5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGV4ICogZHk7XG4gICAgYyA9IHNwbGl0dGVyICogZXg7XG4gICAgYWhpID0gYyAtIChjIC0gZXgpO1xuICAgIGFsbyA9IGV4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGR5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGR5KTtcbiAgICBibG8gPSBkeSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBkZVswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGRlWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBkZVsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGRlWzNdID0gdTM7XG4gICAgczEgPSBleCAqIGF5O1xuICAgIGMgPSBzcGxpdHRlciAqIGV4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGV4KTtcbiAgICBhbG8gPSBleCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBheTtcbiAgICBiaGkgPSBjIC0gKGMgLSBheSk7XG4gICAgYmxvID0gYXkgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gYXggKiBleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBheDtcbiAgICBhaGkgPSBjIC0gKGMgLSBheCk7XG4gICAgYWxvID0gYXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogZXk7XG4gICAgYmhpID0gYyAtIChjIC0gZXkpO1xuICAgIGJsbyA9IGV5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGVhWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgZWFbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGVhWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgZWFbM10gPSB1MztcbiAgICBzMSA9IGF4ICogY3k7XG4gICAgYyA9IHNwbGl0dGVyICogYXg7XG4gICAgYWhpID0gYyAtIChjIC0gYXgpO1xuICAgIGFsbyA9IGF4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGN5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGN5KTtcbiAgICBibG8gPSBjeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBjeCAqIGF5O1xuICAgIGMgPSBzcGxpdHRlciAqIGN4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGN4KTtcbiAgICBhbG8gPSBjeCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBheTtcbiAgICBiaGkgPSBjIC0gKGMgLSBheSk7XG4gICAgYmxvID0gYXkgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgYWNbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBhY1sxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgIHUzID0gX2ogKyBfaTtcbiAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgYWNbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBhY1szXSA9IHUzO1xuICAgIHMxID0gYnggKiBkeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBieDtcbiAgICBhaGkgPSBjIC0gKGMgLSBieCk7XG4gICAgYWxvID0gYnggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogZHk7XG4gICAgYmhpID0gYyAtIChjIC0gZHkpO1xuICAgIGJsbyA9IGR5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGR4ICogYnk7XG4gICAgYyA9IHNwbGl0dGVyICogZHg7XG4gICAgYWhpID0gYyAtIChjIC0gZHgpO1xuICAgIGFsbyA9IGR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGJ5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJ5KTtcbiAgICBibG8gPSBieSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBiZFswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGJkWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBiZFsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGJkWzNdID0gdTM7XG4gICAgczEgPSBjeCAqIGV5O1xuICAgIGMgPSBzcGxpdHRlciAqIGN4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGN4KTtcbiAgICBhbG8gPSBjeCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBleTtcbiAgICBiaGkgPSBjIC0gKGMgLSBleSk7XG4gICAgYmxvID0gZXkgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gZXggKiBjeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBleCk7XG4gICAgYWxvID0gZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogY3k7XG4gICAgYmhpID0gYyAtIChjIC0gY3kpO1xuICAgIGJsbyA9IGN5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGNlWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgY2VbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIGNlWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgY2VbM10gPSB1MztcbiAgICBzMSA9IGR4ICogYXk7XG4gICAgYyA9IHNwbGl0dGVyICogZHg7XG4gICAgYWhpID0gYyAtIChjIC0gZHgpO1xuICAgIGFsbyA9IGR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGF5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGF5KTtcbiAgICBibG8gPSBheSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBheCAqIGR5O1xuICAgIGMgPSBzcGxpdHRlciAqIGF4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGF4KTtcbiAgICBhbG8gPSBheCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBkeSk7XG4gICAgYmxvID0gZHkgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgZGFbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBkYVsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgIHUzID0gX2ogKyBfaTtcbiAgICBidmlydCA9IHUzIC0gX2o7XG4gICAgZGFbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBkYVszXSA9IHUzO1xuICAgIHMxID0gZXggKiBieTtcbiAgICBjID0gc3BsaXR0ZXIgKiBleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBleCk7XG4gICAgYWxvID0gZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYnk7XG4gICAgYmhpID0gYyAtIChjIC0gYnkpO1xuICAgIGJsbyA9IGJ5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGJ4ICogZXk7XG4gICAgYyA9IHNwbGl0dGVyICogYng7XG4gICAgYWhpID0gYyAtIChjIC0gYngpO1xuICAgIGFsbyA9IGJ4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGV5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGV5KTtcbiAgICBibG8gPSBleSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBlYlswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGViWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBlYlsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGViWzNdID0gdTM7XG5cbiAgICBjb25zdCBhYmNsZW4gPSBzdW1fdGhyZWVfc2NhbGUoYWIsIGJjLCBhYywgY3osIGF6LCAtYnosIGFiYyk7XG4gICAgY29uc3QgYmNkbGVuID0gc3VtX3RocmVlX3NjYWxlKGJjLCBjZCwgYmQsIGR6LCBieiwgLWN6LCBiY2QpO1xuICAgIGNvbnN0IGNkZWxlbiA9IHN1bV90aHJlZV9zY2FsZShjZCwgZGUsIGNlLCBleiwgY3osIC1keiwgY2RlKTtcbiAgICBjb25zdCBkZWFsZW4gPSBzdW1fdGhyZWVfc2NhbGUoZGUsIGVhLCBkYSwgYXosIGR6LCAtZXosIGRlYSk7XG4gICAgY29uc3QgZWFibGVuID0gc3VtX3RocmVlX3NjYWxlKGVhLCBhYiwgZWIsIGJ6LCBleiwgLWF6LCBlYWIpO1xuICAgIGNvbnN0IGFiZGxlbiA9IHN1bV90aHJlZV9zY2FsZShhYiwgYmQsIGRhLCBkeiwgYXosIGJ6LCBhYmQpO1xuICAgIGNvbnN0IGJjZWxlbiA9IHN1bV90aHJlZV9zY2FsZShiYywgY2UsIGViLCBleiwgYnosIGN6LCBiY2UpO1xuICAgIGNvbnN0IGNkYWxlbiA9IHN1bV90aHJlZV9zY2FsZShjZCwgZGEsIGFjLCBheiwgY3osIGR6LCBjZGEpO1xuICAgIGNvbnN0IGRlYmxlbiA9IHN1bV90aHJlZV9zY2FsZShkZSwgZWIsIGJkLCBieiwgZHosIGV6LCBkZWIpO1xuICAgIGNvbnN0IGVhY2xlbiA9IHN1bV90aHJlZV9zY2FsZShlYSwgYWMsIGNlLCBjeiwgZXosIGF6LCBlYWMpO1xuXG4gICAgY29uc3QgZGV0ZXJsZW4gPSBzdW1fdGhyZWUoXG4gICAgICAgIGxpZnRleGFjdChjZGVsZW4sIGNkZSwgYmNlbGVuLCBiY2UsIGRlYmxlbiwgZGViLCBiY2RsZW4sIGJjZCwgYXgsIGF5LCBheiwgYWRldCksIGFkZXQsXG4gICAgICAgIGxpZnRleGFjdChkZWFsZW4sIGRlYSwgY2RhbGVuLCBjZGEsIGVhY2xlbiwgZWFjLCBjZGVsZW4sIGNkZSwgYngsIGJ5LCBieiwgYmRldCksIGJkZXQsXG4gICAgICAgIHN1bV90aHJlZShcbiAgICAgICAgICAgIGxpZnRleGFjdChlYWJsZW4sIGVhYiwgZGVibGVuLCBkZWIsIGFiZGxlbiwgYWJkLCBkZWFsZW4sIGRlYSwgY3gsIGN5LCBjeiwgY2RldCksIGNkZXQsXG4gICAgICAgICAgICBsaWZ0ZXhhY3QoYWJjbGVuLCBhYmMsIGVhY2xlbiwgZWFjLCBiY2VsZW4sIGJjZSwgZWFibGVuLCBlYWIsIGR4LCBkeSwgZHosIGRkZXQpLCBkZGV0LFxuICAgICAgICAgICAgbGlmdGV4YWN0KGJjZGxlbiwgYmNkLCBhYmRsZW4sIGFiZCwgY2RhbGVuLCBjZGEsIGFiY2xlbiwgYWJjLCBleCwgZXksIGV6LCBlZGV0KSwgZWRldCwgY2RkZXQsIGNkZWRldCksIGNkZWRldCwgYWJkZXQsIGRldGVyKTtcblxuICAgIHJldHVybiBkZXRlcltkZXRlcmxlbiAtIDFdO1xufVxuXG5jb25zdCB4ZGV0ID0gdmVjKDk2KTtcbmNvbnN0IHlkZXQgPSB2ZWMoOTYpO1xuY29uc3QgemRldCA9IHZlYyg5Nik7XG5jb25zdCBmaW4gPSB2ZWMoMTE1Mik7XG5cbmZ1bmN0aW9uIGxpZnRhZGFwdChhLCBiLCBjLCBheiwgYnosIGN6LCB4LCB5LCB6LCBvdXQpIHtcbiAgICBjb25zdCBsZW4gPSBzdW1fdGhyZWVfc2NhbGUoYSwgYiwgYywgYXosIGJ6LCBjeiwgXzI0KTtcbiAgICByZXR1cm4gc3VtX3RocmVlKFxuICAgICAgICBzY2FsZShzY2FsZShsZW4sIF8yNCwgeCwgXzQ4KSwgXzQ4LCB4LCB4ZGV0KSwgeGRldCxcbiAgICAgICAgc2NhbGUoc2NhbGUobGVuLCBfMjQsIHksIF80OCksIF80OCwgeSwgeWRldCksIHlkZXQsXG4gICAgICAgIHNjYWxlKHNjYWxlKGxlbiwgXzI0LCB6LCBfNDgpLCBfNDgsIHosIHpkZXQpLCB6ZGV0LCBfMTkyLCBvdXQpO1xufVxuXG5mdW5jdGlvbiBpbnNwaGVyZWFkYXB0KGF4LCBheSwgYXosIGJ4LCBieSwgYnosIGN4LCBjeSwgY3osIGR4LCBkeSwgZHosIGV4LCBleSwgZXosIHBlcm1hbmVudCkge1xuICAgIGxldCBhYjMsIGJjMywgY2QzLCBkYTMsIGFjMywgYmQzO1xuXG4gICAgbGV0IGFleHRhaWwsIGJleHRhaWwsIGNleHRhaWwsIGRleHRhaWw7XG4gICAgbGV0IGFleXRhaWwsIGJleXRhaWwsIGNleXRhaWwsIGRleXRhaWw7XG4gICAgbGV0IGFlenRhaWwsIGJlenRhaWwsIGNlenRhaWwsIGRlenRhaWw7XG5cbiAgICBsZXQgYnZpcnQsIGMsIGFoaSwgYWxvLCBiaGksIGJsbywgX2ksIF9qLCBfMCwgczEsIHMwLCB0MSwgdDA7XG5cbiAgICBjb25zdCBhZXggPSBheCAtIGV4O1xuICAgIGNvbnN0IGJleCA9IGJ4IC0gZXg7XG4gICAgY29uc3QgY2V4ID0gY3ggLSBleDtcbiAgICBjb25zdCBkZXggPSBkeCAtIGV4O1xuICAgIGNvbnN0IGFleSA9IGF5IC0gZXk7XG4gICAgY29uc3QgYmV5ID0gYnkgLSBleTtcbiAgICBjb25zdCBjZXkgPSBjeSAtIGV5O1xuICAgIGNvbnN0IGRleSA9IGR5IC0gZXk7XG4gICAgY29uc3QgYWV6ID0gYXogLSBlejtcbiAgICBjb25zdCBiZXogPSBieiAtIGV6O1xuICAgIGNvbnN0IGNleiA9IGN6IC0gZXo7XG4gICAgY29uc3QgZGV6ID0gZHogLSBlejtcblxuICAgIHMxID0gYWV4ICogYmV5O1xuICAgIGMgPSBzcGxpdHRlciAqIGFleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBhZXgpO1xuICAgIGFsbyA9IGFleCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiZXk7XG4gICAgYmhpID0gYyAtIChjIC0gYmV5KTtcbiAgICBibG8gPSBiZXkgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gYmV4ICogYWV5O1xuICAgIGMgPSBzcGxpdHRlciAqIGJleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBiZXgpO1xuICAgIGFsbyA9IGJleCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhZXk7XG4gICAgYmhpID0gYyAtIChjIC0gYWV5KTtcbiAgICBibG8gPSBhZXkgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgYWJbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBhYlsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgIGFiMyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSBhYjMgLSBfajtcbiAgICBhYlsyXSA9IF9qIC0gKGFiMyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBhYlszXSA9IGFiMztcbiAgICBzMSA9IGJleCAqIGNleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiZXg7XG4gICAgYWhpID0gYyAtIChjIC0gYmV4KTtcbiAgICBhbG8gPSBiZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogY2V5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGNleSk7XG4gICAgYmxvID0gY2V5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGNleCAqIGJleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjZXg7XG4gICAgYWhpID0gYyAtIChjIC0gY2V4KTtcbiAgICBhbG8gPSBjZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmV5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJleSk7XG4gICAgYmxvID0gYmV5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGJjWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgYmNbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICBiYzMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gYmMzIC0gX2o7XG4gICAgYmNbMl0gPSBfaiAtIChiYzMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgYmNbM10gPSBiYzM7XG4gICAgczEgPSBjZXggKiBkZXk7XG4gICAgYyA9IHNwbGl0dGVyICogY2V4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGNleCk7XG4gICAgYWxvID0gY2V4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGRleTtcbiAgICBiaGkgPSBjIC0gKGMgLSBkZXkpO1xuICAgIGJsbyA9IGRleSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBkZXggKiBjZXk7XG4gICAgYyA9IHNwbGl0dGVyICogZGV4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGRleCk7XG4gICAgYWxvID0gZGV4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGNleTtcbiAgICBiaGkgPSBjIC0gKGMgLSBjZXkpO1xuICAgIGJsbyA9IGNleSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBjZFswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGNkWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgY2QzID0gX2ogKyBfaTtcbiAgICBidmlydCA9IGNkMyAtIF9qO1xuICAgIGNkWzJdID0gX2ogLSAoY2QzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGNkWzNdID0gY2QzO1xuICAgIHMxID0gZGV4ICogYWV5O1xuICAgIGMgPSBzcGxpdHRlciAqIGRleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBkZXgpO1xuICAgIGFsbyA9IGRleCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhZXk7XG4gICAgYmhpID0gYyAtIChjIC0gYWV5KTtcbiAgICBibG8gPSBhZXkgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gYWV4ICogZGV5O1xuICAgIGMgPSBzcGxpdHRlciAqIGFleDtcbiAgICBhaGkgPSBjIC0gKGMgLSBhZXgpO1xuICAgIGFsbyA9IGFleCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBkZXk7XG4gICAgYmhpID0gYyAtIChjIC0gZGV5KTtcbiAgICBibG8gPSBkZXkgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgZGFbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBkYVsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgIGRhMyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSBkYTMgLSBfajtcbiAgICBkYVsyXSA9IF9qIC0gKGRhMyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBkYVszXSA9IGRhMztcbiAgICBzMSA9IGFleCAqIGNleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhZXg7XG4gICAgYWhpID0gYyAtIChjIC0gYWV4KTtcbiAgICBhbG8gPSBhZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogY2V5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGNleSk7XG4gICAgYmxvID0gY2V5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGNleCAqIGFleTtcbiAgICBjID0gc3BsaXR0ZXIgKiBjZXg7XG4gICAgYWhpID0gYyAtIChjIC0gY2V4KTtcbiAgICBhbG8gPSBjZXggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYWV5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGFleSk7XG4gICAgYmxvID0gYWV5IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIGFjWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgX2ogPSBzMSArIF9pO1xuICAgIGJ2aXJ0ID0gX2ogLSBzMTtcbiAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIF9pID0gXzAgLSB0MTtcbiAgICBidmlydCA9IF8wIC0gX2k7XG4gICAgYWNbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICBhYzMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gYWMzIC0gX2o7XG4gICAgYWNbMl0gPSBfaiAtIChhYzMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgYWNbM10gPSBhYzM7XG4gICAgczEgPSBiZXggKiBkZXk7XG4gICAgYyA9IHNwbGl0dGVyICogYmV4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGJleCk7XG4gICAgYWxvID0gYmV4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGRleTtcbiAgICBiaGkgPSBjIC0gKGMgLSBkZXkpO1xuICAgIGJsbyA9IGRleSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBkZXggKiBiZXk7XG4gICAgYyA9IHNwbGl0dGVyICogZGV4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGRleCk7XG4gICAgYWxvID0gZGV4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGJleTtcbiAgICBiaGkgPSBjIC0gKGMgLSBiZXkpO1xuICAgIGJsbyA9IGJleSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBiZFswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGJkWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgYmQzID0gX2ogKyBfaTtcbiAgICBidmlydCA9IGJkMyAtIF9qO1xuICAgIGJkWzJdID0gX2ogLSAoYmQzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGJkWzNdID0gYmQzO1xuXG4gICAgY29uc3QgZmlubGVuID0gc3VtKFxuICAgICAgICBzdW0oXG4gICAgICAgICAgICBuZWdhdGUobGlmdGFkYXB0KGJjLCBjZCwgYmQsIGRleiwgYmV6LCAtY2V6LCBhZXgsIGFleSwgYWV6LCBhZGV0KSwgYWRldCksIGFkZXQsXG4gICAgICAgICAgICBsaWZ0YWRhcHQoY2QsIGRhLCBhYywgYWV6LCBjZXosIGRleiwgYmV4LCBiZXksIGJleiwgYmRldCksIGJkZXQsIGFiZGV0KSwgYWJkZXQsXG4gICAgICAgIHN1bShcbiAgICAgICAgICAgIG5lZ2F0ZShsaWZ0YWRhcHQoZGEsIGFiLCBiZCwgYmV6LCBkZXosIGFleiwgY2V4LCBjZXksIGNleiwgY2RldCksIGNkZXQpLCBjZGV0LFxuICAgICAgICAgICAgbGlmdGFkYXB0KGFiLCBiYywgYWMsIGNleiwgYWV6LCAtYmV6LCBkZXgsIGRleSwgZGV6LCBkZGV0KSwgZGRldCwgY2RkZXQpLCBjZGRldCwgZmluKTtcblxuICAgIGxldCBkZXQgPSBlc3RpbWF0ZShmaW5sZW4sIGZpbik7XG4gICAgbGV0IGVycmJvdW5kID0gaXNwZXJyYm91bmRCICogcGVybWFuZW50O1xuICAgIGlmIChkZXQgPj0gZXJyYm91bmQgfHwgLWRldCA+PSBlcnJib3VuZCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGJ2aXJ0ID0gYXggLSBhZXg7XG4gICAgYWV4dGFpbCA9IGF4IC0gKGFleCArIGJ2aXJ0KSArIChidmlydCAtIGV4KTtcbiAgICBidmlydCA9IGF5IC0gYWV5O1xuICAgIGFleXRhaWwgPSBheSAtIChhZXkgKyBidmlydCkgKyAoYnZpcnQgLSBleSk7XG4gICAgYnZpcnQgPSBheiAtIGFlejtcbiAgICBhZXp0YWlsID0gYXogLSAoYWV6ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZXopO1xuICAgIGJ2aXJ0ID0gYnggLSBiZXg7XG4gICAgYmV4dGFpbCA9IGJ4IC0gKGJleCArIGJ2aXJ0KSArIChidmlydCAtIGV4KTtcbiAgICBidmlydCA9IGJ5IC0gYmV5O1xuICAgIGJleXRhaWwgPSBieSAtIChiZXkgKyBidmlydCkgKyAoYnZpcnQgLSBleSk7XG4gICAgYnZpcnQgPSBieiAtIGJlejtcbiAgICBiZXp0YWlsID0gYnogLSAoYmV6ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZXopO1xuICAgIGJ2aXJ0ID0gY3ggLSBjZXg7XG4gICAgY2V4dGFpbCA9IGN4IC0gKGNleCArIGJ2aXJ0KSArIChidmlydCAtIGV4KTtcbiAgICBidmlydCA9IGN5IC0gY2V5O1xuICAgIGNleXRhaWwgPSBjeSAtIChjZXkgKyBidmlydCkgKyAoYnZpcnQgLSBleSk7XG4gICAgYnZpcnQgPSBjeiAtIGNlejtcbiAgICBjZXp0YWlsID0gY3ogLSAoY2V6ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZXopO1xuICAgIGJ2aXJ0ID0gZHggLSBkZXg7XG4gICAgZGV4dGFpbCA9IGR4IC0gKGRleCArIGJ2aXJ0KSArIChidmlydCAtIGV4KTtcbiAgICBidmlydCA9IGR5IC0gZGV5O1xuICAgIGRleXRhaWwgPSBkeSAtIChkZXkgKyBidmlydCkgKyAoYnZpcnQgLSBleSk7XG4gICAgYnZpcnQgPSBkeiAtIGRlejtcbiAgICBkZXp0YWlsID0gZHogLSAoZGV6ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZXopO1xuICAgIGlmIChhZXh0YWlsID09PSAwICYmIGFleXRhaWwgPT09IDAgJiYgYWV6dGFpbCA9PT0gMCAmJlxuICAgICAgICBiZXh0YWlsID09PSAwICYmIGJleXRhaWwgPT09IDAgJiYgYmV6dGFpbCA9PT0gMCAmJlxuICAgICAgICBjZXh0YWlsID09PSAwICYmIGNleXRhaWwgPT09IDAgJiYgY2V6dGFpbCA9PT0gMCAmJlxuICAgICAgICBkZXh0YWlsID09PSAwICYmIGRleXRhaWwgPT09IDAgJiYgZGV6dGFpbCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGVycmJvdW5kID0gaXNwZXJyYm91bmRDICogcGVybWFuZW50ICsgcmVzdWx0ZXJyYm91bmQgKiBNYXRoLmFicyhkZXQpO1xuXG4gICAgY29uc3QgYWJlcHMgPSAoYWV4ICogYmV5dGFpbCArIGJleSAqIGFleHRhaWwpIC0gKGFleSAqIGJleHRhaWwgKyBiZXggKiBhZXl0YWlsKTtcbiAgICBjb25zdCBiY2VwcyA9IChiZXggKiBjZXl0YWlsICsgY2V5ICogYmV4dGFpbCkgLSAoYmV5ICogY2V4dGFpbCArIGNleCAqIGJleXRhaWwpO1xuICAgIGNvbnN0IGNkZXBzID0gKGNleCAqIGRleXRhaWwgKyBkZXkgKiBjZXh0YWlsKSAtIChjZXkgKiBkZXh0YWlsICsgZGV4ICogY2V5dGFpbCk7XG4gICAgY29uc3QgZGFlcHMgPSAoZGV4ICogYWV5dGFpbCArIGFleSAqIGRleHRhaWwpIC0gKGRleSAqIGFleHRhaWwgKyBhZXggKiBkZXl0YWlsKTtcbiAgICBjb25zdCBhY2VwcyA9IChhZXggKiBjZXl0YWlsICsgY2V5ICogYWV4dGFpbCkgLSAoYWV5ICogY2V4dGFpbCArIGNleCAqIGFleXRhaWwpO1xuICAgIGNvbnN0IGJkZXBzID0gKGJleCAqIGRleXRhaWwgKyBkZXkgKiBiZXh0YWlsKSAtIChiZXkgKiBkZXh0YWlsICsgZGV4ICogYmV5dGFpbCk7XG4gICAgZGV0ICs9XG4gICAgICAgICgoKGJleCAqIGJleCArIGJleSAqIGJleSArIGJleiAqIGJleikgKiAoKGNleiAqIGRhZXBzICsgZGV6ICogYWNlcHMgKyBhZXogKiBjZGVwcykgK1xuICAgICAgICAoY2V6dGFpbCAqIGRhMyArIGRlenRhaWwgKiBhYzMgKyBhZXp0YWlsICogY2QzKSkgKyAoZGV4ICogZGV4ICsgZGV5ICogZGV5ICsgZGV6ICogZGV6KSAqXG4gICAgICAgICgoYWV6ICogYmNlcHMgLSBiZXogKiBhY2VwcyArIGNleiAqIGFiZXBzKSArIChhZXp0YWlsICogYmMzIC0gYmV6dGFpbCAqIGFjMyArIGNlenRhaWwgKiBhYjMpKSkgLVxuICAgICAgICAoKGFleCAqIGFleCArIGFleSAqIGFleSArIGFleiAqIGFleikgKiAoKGJleiAqIGNkZXBzIC0gY2V6ICogYmRlcHMgKyBkZXogKiBiY2VwcykgK1xuICAgICAgICAoYmV6dGFpbCAqIGNkMyAtIGNlenRhaWwgKiBiZDMgKyBkZXp0YWlsICogYmMzKSkgKyAoY2V4ICogY2V4ICsgY2V5ICogY2V5ICsgY2V6ICogY2V6KSAqXG4gICAgICAgICgoZGV6ICogYWJlcHMgKyBhZXogKiBiZGVwcyArIGJleiAqIGRhZXBzKSArIChkZXp0YWlsICogYWIzICsgYWV6dGFpbCAqIGJkMyArIGJlenRhaWwgKiBkYTMpKSkpICtcbiAgICAgICAgMiAqICgoKGJleCAqIGJleHRhaWwgKyBiZXkgKiBiZXl0YWlsICsgYmV6ICogYmV6dGFpbCkgKiAoY2V6ICogZGEzICsgZGV6ICogYWMzICsgYWV6ICogY2QzKSArXG4gICAgICAgIChkZXggKiBkZXh0YWlsICsgZGV5ICogZGV5dGFpbCArIGRleiAqIGRlenRhaWwpICogKGFleiAqIGJjMyAtIGJleiAqIGFjMyArIGNleiAqIGFiMykpIC1cbiAgICAgICAgKChhZXggKiBhZXh0YWlsICsgYWV5ICogYWV5dGFpbCArIGFleiAqIGFlenRhaWwpICogKGJleiAqIGNkMyAtIGNleiAqIGJkMyArIGRleiAqIGJjMykgK1xuICAgICAgICAoY2V4ICogY2V4dGFpbCArIGNleSAqIGNleXRhaWwgKyBjZXogKiBjZXp0YWlsKSAqIChkZXogKiBhYjMgKyBhZXogKiBiZDMgKyBiZXogKiBkYTMpKSk7XG5cbiAgICBpZiAoZGV0ID49IGVycmJvdW5kIHx8IC1kZXQgPj0gZXJyYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGRldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zcGhlcmVleGFjdChheCwgYXksIGF6LCBieCwgYnksIGJ6LCBjeCwgY3ksIGN6LCBkeCwgZHksIGR6LCBleCwgZXksIGV6KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BoZXJlKGF4LCBheSwgYXosIGJ4LCBieSwgYnosIGN4LCBjeSwgY3osIGR4LCBkeSwgZHosIGV4LCBleSwgZXopIHtcbiAgICBjb25zdCBhZXggPSBheCAtIGV4O1xuICAgIGNvbnN0IGJleCA9IGJ4IC0gZXg7XG4gICAgY29uc3QgY2V4ID0gY3ggLSBleDtcbiAgICBjb25zdCBkZXggPSBkeCAtIGV4O1xuICAgIGNvbnN0IGFleSA9IGF5IC0gZXk7XG4gICAgY29uc3QgYmV5ID0gYnkgLSBleTtcbiAgICBjb25zdCBjZXkgPSBjeSAtIGV5O1xuICAgIGNvbnN0IGRleSA9IGR5IC0gZXk7XG4gICAgY29uc3QgYWV6ID0gYXogLSBlejtcbiAgICBjb25zdCBiZXogPSBieiAtIGV6O1xuICAgIGNvbnN0IGNleiA9IGN6IC0gZXo7XG4gICAgY29uc3QgZGV6ID0gZHogLSBlejtcblxuICAgIGNvbnN0IGFleGJleSA9IGFleCAqIGJleTtcbiAgICBjb25zdCBiZXhhZXkgPSBiZXggKiBhZXk7XG4gICAgY29uc3QgYWIgPSBhZXhiZXkgLSBiZXhhZXk7XG4gICAgY29uc3QgYmV4Y2V5ID0gYmV4ICogY2V5O1xuICAgIGNvbnN0IGNleGJleSA9IGNleCAqIGJleTtcbiAgICBjb25zdCBiYyA9IGJleGNleSAtIGNleGJleTtcbiAgICBjb25zdCBjZXhkZXkgPSBjZXggKiBkZXk7XG4gICAgY29uc3QgZGV4Y2V5ID0gZGV4ICogY2V5O1xuICAgIGNvbnN0IGNkID0gY2V4ZGV5IC0gZGV4Y2V5O1xuICAgIGNvbnN0IGRleGFleSA9IGRleCAqIGFleTtcbiAgICBjb25zdCBhZXhkZXkgPSBhZXggKiBkZXk7XG4gICAgY29uc3QgZGEgPSBkZXhhZXkgLSBhZXhkZXk7XG4gICAgY29uc3QgYWV4Y2V5ID0gYWV4ICogY2V5O1xuICAgIGNvbnN0IGNleGFleSA9IGNleCAqIGFleTtcbiAgICBjb25zdCBhYyA9IGFleGNleSAtIGNleGFleTtcbiAgICBjb25zdCBiZXhkZXkgPSBiZXggKiBkZXk7XG4gICAgY29uc3QgZGV4YmV5ID0gZGV4ICogYmV5O1xuICAgIGNvbnN0IGJkID0gYmV4ZGV5IC0gZGV4YmV5O1xuXG4gICAgY29uc3QgYWxpZnQgPSBhZXggKiBhZXggKyBhZXkgKiBhZXkgKyBhZXogKiBhZXo7XG4gICAgY29uc3QgYmxpZnQgPSBiZXggKiBiZXggKyBiZXkgKiBiZXkgKyBiZXogKiBiZXo7XG4gICAgY29uc3QgY2xpZnQgPSBjZXggKiBjZXggKyBjZXkgKiBjZXkgKyBjZXogKiBjZXo7XG4gICAgY29uc3QgZGxpZnQgPSBkZXggKiBkZXggKyBkZXkgKiBkZXkgKyBkZXogKiBkZXo7XG5cbiAgICBjb25zdCBkZXQgPVxuICAgICAgICAoY2xpZnQgKiAoZGV6ICogYWIgKyBhZXogKiBiZCArIGJleiAqIGRhKSAtIGRsaWZ0ICogKGFleiAqIGJjIC0gYmV6ICogYWMgKyBjZXogKiBhYikpICtcbiAgICAgICAgKGFsaWZ0ICogKGJleiAqIGNkIC0gY2V6ICogYmQgKyBkZXogKiBiYykgLSBibGlmdCAqIChjZXogKiBkYSArIGRleiAqIGFjICsgYWV6ICogY2QpKTtcblxuICAgIGNvbnN0IGFlenBsdXMgPSBNYXRoLmFicyhhZXopO1xuICAgIGNvbnN0IGJlenBsdXMgPSBNYXRoLmFicyhiZXopO1xuICAgIGNvbnN0IGNlenBsdXMgPSBNYXRoLmFicyhjZXopO1xuICAgIGNvbnN0IGRlenBsdXMgPSBNYXRoLmFicyhkZXopO1xuICAgIGNvbnN0IGFleGJleXBsdXMgPSBNYXRoLmFicyhhZXhiZXkpICsgTWF0aC5hYnMoYmV4YWV5KTtcbiAgICBjb25zdCBiZXhjZXlwbHVzID0gTWF0aC5hYnMoYmV4Y2V5KSArIE1hdGguYWJzKGNleGJleSk7XG4gICAgY29uc3QgY2V4ZGV5cGx1cyA9IE1hdGguYWJzKGNleGRleSkgKyBNYXRoLmFicyhkZXhjZXkpO1xuICAgIGNvbnN0IGRleGFleXBsdXMgPSBNYXRoLmFicyhkZXhhZXkpICsgTWF0aC5hYnMoYWV4ZGV5KTtcbiAgICBjb25zdCBhZXhjZXlwbHVzID0gTWF0aC5hYnMoYWV4Y2V5KSArIE1hdGguYWJzKGNleGFleSk7XG4gICAgY29uc3QgYmV4ZGV5cGx1cyA9IE1hdGguYWJzKGJleGRleSkgKyBNYXRoLmFicyhkZXhiZXkpO1xuICAgIGNvbnN0IHBlcm1hbmVudCA9XG4gICAgICAgIChjZXhkZXlwbHVzICogYmV6cGx1cyArIGJleGRleXBsdXMgKiBjZXpwbHVzICsgYmV4Y2V5cGx1cyAqIGRlenBsdXMpICogYWxpZnQgK1xuICAgICAgICAoZGV4YWV5cGx1cyAqIGNlenBsdXMgKyBhZXhjZXlwbHVzICogZGV6cGx1cyArIGNleGRleXBsdXMgKiBhZXpwbHVzKSAqIGJsaWZ0ICtcbiAgICAgICAgKGFleGJleXBsdXMgKiBkZXpwbHVzICsgYmV4ZGV5cGx1cyAqIGFlenBsdXMgKyBkZXhhZXlwbHVzICogYmV6cGx1cykgKiBjbGlmdCArXG4gICAgICAgIChiZXhjZXlwbHVzICogYWV6cGx1cyArIGFleGNleXBsdXMgKiBiZXpwbHVzICsgYWV4YmV5cGx1cyAqIGNlenBsdXMpICogZGxpZnQ7XG5cbiAgICBjb25zdCBlcnJib3VuZCA9IGlzcGVycmJvdW5kQSAqIHBlcm1hbmVudDtcbiAgICBpZiAoZGV0ID4gZXJyYm91bmQgfHwgLWRldCA+IGVycmJvdW5kKSB7XG4gICAgICAgIHJldHVybiBkZXQ7XG4gICAgfVxuICAgIHJldHVybiAtaW5zcGhlcmVhZGFwdChheCwgYXksIGF6LCBieCwgYnksIGJ6LCBjeCwgY3ksIGN6LCBkeCwgZHksIGR6LCBleCwgZXksIGV6LCBwZXJtYW5lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGhlcmVmYXN0KHBheCwgcGF5LCBwYXosIHBieCwgcGJ5LCBwYnosIHBjeCwgcGN5LCBwY3osIHBkeCwgcGR5LCBwZHosIHBleCwgcGV5LCBwZXopIHtcbiAgICBjb25zdCBhZXggPSBwYXggLSBwZXg7XG4gICAgY29uc3QgYmV4ID0gcGJ4IC0gcGV4O1xuICAgIGNvbnN0IGNleCA9IHBjeCAtIHBleDtcbiAgICBjb25zdCBkZXggPSBwZHggLSBwZXg7XG4gICAgY29uc3QgYWV5ID0gcGF5IC0gcGV5O1xuICAgIGNvbnN0IGJleSA9IHBieSAtIHBleTtcbiAgICBjb25zdCBjZXkgPSBwY3kgLSBwZXk7XG4gICAgY29uc3QgZGV5ID0gcGR5IC0gcGV5O1xuICAgIGNvbnN0IGFleiA9IHBheiAtIHBlejtcbiAgICBjb25zdCBiZXogPSBwYnogLSBwZXo7XG4gICAgY29uc3QgY2V6ID0gcGN6IC0gcGV6O1xuICAgIGNvbnN0IGRleiA9IHBkeiAtIHBlejtcblxuICAgIGNvbnN0IGFiID0gYWV4ICogYmV5IC0gYmV4ICogYWV5O1xuICAgIGNvbnN0IGJjID0gYmV4ICogY2V5IC0gY2V4ICogYmV5O1xuICAgIGNvbnN0IGNkID0gY2V4ICogZGV5IC0gZGV4ICogY2V5O1xuICAgIGNvbnN0IGRhID0gZGV4ICogYWV5IC0gYWV4ICogZGV5O1xuICAgIGNvbnN0IGFjID0gYWV4ICogY2V5IC0gY2V4ICogYWV5O1xuICAgIGNvbnN0IGJkID0gYmV4ICogZGV5IC0gZGV4ICogYmV5O1xuXG4gICAgY29uc3QgYWJjID0gYWV6ICogYmMgLSBiZXogKiBhYyArIGNleiAqIGFiO1xuICAgIGNvbnN0IGJjZCA9IGJleiAqIGNkIC0gY2V6ICogYmQgKyBkZXogKiBiYztcbiAgICBjb25zdCBjZGEgPSBjZXogKiBkYSArIGRleiAqIGFjICsgYWV6ICogY2Q7XG4gICAgY29uc3QgZGFiID0gZGV6ICogYWIgKyBhZXogKiBiZCArIGJleiAqIGRhO1xuXG4gICAgY29uc3QgYWxpZnQgPSBhZXggKiBhZXggKyBhZXkgKiBhZXkgKyBhZXogKiBhZXo7XG4gICAgY29uc3QgYmxpZnQgPSBiZXggKiBiZXggKyBiZXkgKiBiZXkgKyBiZXogKiBiZXo7XG4gICAgY29uc3QgY2xpZnQgPSBjZXggKiBjZXggKyBjZXkgKiBjZXkgKyBjZXogKiBjZXo7XG4gICAgY29uc3QgZGxpZnQgPSBkZXggKiBkZXggKyBkZXkgKiBkZXkgKyBkZXogKiBkZXo7XG5cbiAgICByZXR1cm4gKGNsaWZ0ICogZGFiIC0gZGxpZnQgKiBhYmMpICsgKGFsaWZ0ICogYmNkIC0gYmxpZnQgKiBjZGEpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/esm/insphere.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/esm/orient2d.js": /*!***************************************************************!*\ !*** ../../../node_modules/robust-predicates/esm/orient2d.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"orient2d\": () => (/* binding */ orient2d),\n/* harmony export */ \"orient2dfast\": () => (/* binding */ orient2dfast)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/robust-predicates/esm/util.js\");\n\n\nconst ccwerrboundA = (3 + 16 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst ccwerrboundB = (2 + 12 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst ccwerrboundC = (9 + 64 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\nconst B = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst C1 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst C2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(12);\nconst D = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(16);\nconst u = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.estimate)(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + _util_js__WEBPACK_IMPORTED_MODULE_0__.resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nfunction orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nfunction orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS9vcmllbnQyZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZ0Y7O0FBRWhGLCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPLEdBQUcsNkNBQU87O0FBRTNELFVBQVUsNkNBQUc7QUFDYixXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLFVBQVUsNkNBQUc7QUFDYixVQUFVLDZDQUFHOztBQUViO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBLFFBQVEsOENBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsa0RBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLG9EQUFjO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2Q0FBRzs7QUFFckI7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2Q0FBRzs7QUFFckI7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQSxRQUFRLDhDQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0EsUUFBUSw4Q0FBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2Q0FBRzs7QUFFcEI7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yb2J1c3QtcHJlZGljYXRlcy9lc20vb3JpZW50MmQuanM/OGM1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Vwc2lsb24sIHNwbGl0dGVyLCByZXN1bHRlcnJib3VuZCwgZXN0aW1hdGUsIHZlYywgc3VtfSBmcm9tICcuL3V0aWwuanMnO1xuXG5jb25zdCBjY3dlcnJib3VuZEEgPSAoMyArIDE2ICogZXBzaWxvbikgKiBlcHNpbG9uO1xuY29uc3QgY2N3ZXJyYm91bmRCID0gKDIgKyAxMiAqIGVwc2lsb24pICogZXBzaWxvbjtcbmNvbnN0IGNjd2VycmJvdW5kQyA9ICg5ICsgNjQgKiBlcHNpbG9uKSAqIGVwc2lsb24gKiBlcHNpbG9uO1xuXG5jb25zdCBCID0gdmVjKDQpO1xuY29uc3QgQzEgPSB2ZWMoOCk7XG5jb25zdCBDMiA9IHZlYygxMik7XG5jb25zdCBEID0gdmVjKDE2KTtcbmNvbnN0IHUgPSB2ZWMoNCk7XG5cbmZ1bmN0aW9uIG9yaWVudDJkYWRhcHQoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgZGV0c3VtKSB7XG4gICAgbGV0IGFjeHRhaWwsIGFjeXRhaWwsIGJjeHRhaWwsIGJjeXRhaWw7XG4gICAgbGV0IGJ2aXJ0LCBjLCBhaGksIGFsbywgYmhpLCBibG8sIF9pLCBfaiwgXzAsIHMxLCBzMCwgdDEsIHQwLCB1MztcblxuICAgIGNvbnN0IGFjeCA9IGF4IC0gY3g7XG4gICAgY29uc3QgYmN4ID0gYnggLSBjeDtcbiAgICBjb25zdCBhY3kgPSBheSAtIGN5O1xuICAgIGNvbnN0IGJjeSA9IGJ5IC0gY3k7XG5cbiAgICBzMSA9IGFjeCAqIGJjeTtcbiAgICBjID0gc3BsaXR0ZXIgKiBhY3g7XG4gICAgYWhpID0gYyAtIChjIC0gYWN4KTtcbiAgICBhbG8gPSBhY3ggLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmN5O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJjeSk7XG4gICAgYmxvID0gYmN5IC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGFjeSAqIGJjeDtcbiAgICBjID0gc3BsaXR0ZXIgKiBhY3k7XG4gICAgYWhpID0gYyAtIChjIC0gYWN5KTtcbiAgICBhbG8gPSBhY3kgLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmN4O1xuICAgIGJoaSA9IGMgLSAoYyAtIGJjeCk7XG4gICAgYmxvID0gYmN4IC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIEJbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICBCWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBCWzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgQlszXSA9IHUzO1xuXG4gICAgbGV0IGRldCA9IGVzdGltYXRlKDQsIEIpO1xuICAgIGxldCBlcnJib3VuZCA9IGNjd2VycmJvdW5kQiAqIGRldHN1bTtcbiAgICBpZiAoZGV0ID49IGVycmJvdW5kIHx8IC1kZXQgPj0gZXJyYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGRldDtcbiAgICB9XG5cbiAgICBidmlydCA9IGF4IC0gYWN4O1xuICAgIGFjeHRhaWwgPSBheCAtIChhY3ggKyBidmlydCkgKyAoYnZpcnQgLSBjeCk7XG4gICAgYnZpcnQgPSBieCAtIGJjeDtcbiAgICBiY3h0YWlsID0gYnggLSAoYmN4ICsgYnZpcnQpICsgKGJ2aXJ0IC0gY3gpO1xuICAgIGJ2aXJ0ID0gYXkgLSBhY3k7XG4gICAgYWN5dGFpbCA9IGF5IC0gKGFjeSArIGJ2aXJ0KSArIChidmlydCAtIGN5KTtcbiAgICBidmlydCA9IGJ5IC0gYmN5O1xuICAgIGJjeXRhaWwgPSBieSAtIChiY3kgKyBidmlydCkgKyAoYnZpcnQgLSBjeSk7XG5cbiAgICBpZiAoYWN4dGFpbCA9PT0gMCAmJiBhY3l0YWlsID09PSAwICYmIGJjeHRhaWwgPT09IDAgJiYgYmN5dGFpbCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGVycmJvdW5kID0gY2N3ZXJyYm91bmRDICogZGV0c3VtICsgcmVzdWx0ZXJyYm91bmQgKiBNYXRoLmFicyhkZXQpO1xuICAgIGRldCArPSAoYWN4ICogYmN5dGFpbCArIGJjeSAqIGFjeHRhaWwpIC0gKGFjeSAqIGJjeHRhaWwgKyBiY3ggKiBhY3l0YWlsKTtcbiAgICBpZiAoZGV0ID49IGVycmJvdW5kIHx8IC1kZXQgPj0gZXJyYm91bmQpIHJldHVybiBkZXQ7XG5cbiAgICBzMSA9IGFjeHRhaWwgKiBiY3k7XG4gICAgYyA9IHNwbGl0dGVyICogYWN4dGFpbDtcbiAgICBhaGkgPSBjIC0gKGMgLSBhY3h0YWlsKTtcbiAgICBhbG8gPSBhY3h0YWlsIC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGJjeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBiY3kpO1xuICAgIGJsbyA9IGJjeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBhY3l0YWlsICogYmN4O1xuICAgIGMgPSBzcGxpdHRlciAqIGFjeXRhaWw7XG4gICAgYWhpID0gYyAtIChjIC0gYWN5dGFpbCk7XG4gICAgYWxvID0gYWN5dGFpbCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiY3g7XG4gICAgYmhpID0gYyAtIChjIC0gYmN4KTtcbiAgICBibG8gPSBiY3ggLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgdVswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIHVbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIHVbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICB1WzNdID0gdTM7XG4gICAgY29uc3QgQzFsZW4gPSBzdW0oNCwgQiwgNCwgdSwgQzEpO1xuXG4gICAgczEgPSBhY3ggKiBiY3l0YWlsO1xuICAgIGMgPSBzcGxpdHRlciAqIGFjeDtcbiAgICBhaGkgPSBjIC0gKGMgLSBhY3gpO1xuICAgIGFsbyA9IGFjeCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiY3l0YWlsO1xuICAgIGJoaSA9IGMgLSAoYyAtIGJjeXRhaWwpO1xuICAgIGJsbyA9IGJjeXRhaWwgLSBiaGk7XG4gICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIHQxID0gYWN5ICogYmN4dGFpbDtcbiAgICBjID0gc3BsaXR0ZXIgKiBhY3k7XG4gICAgYWhpID0gYyAtIChjIC0gYWN5KTtcbiAgICBhbG8gPSBhY3kgLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmN4dGFpbDtcbiAgICBiaGkgPSBjIC0gKGMgLSBiY3h0YWlsKTtcbiAgICBibG8gPSBiY3h0YWlsIC0gYmhpO1xuICAgIHQwID0gYWxvICogYmxvIC0gKHQxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaSA9IHMwIC0gdDA7XG4gICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgIHVbMF0gPSBzMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQwKTtcbiAgICBfaiA9IHMxICsgX2k7XG4gICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgIF8wID0gczEgLSAoX2ogLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgX2kgPSBfMCAtIHQxO1xuICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICB1WzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICB1WzJdID0gX2ogLSAodTMgLSBidmlydCkgKyAoX2kgLSBidmlydCk7XG4gICAgdVszXSA9IHUzO1xuICAgIGNvbnN0IEMybGVuID0gc3VtKEMxbGVuLCBDMSwgNCwgdSwgQzIpO1xuXG4gICAgczEgPSBhY3h0YWlsICogYmN5dGFpbDtcbiAgICBjID0gc3BsaXR0ZXIgKiBhY3h0YWlsO1xuICAgIGFoaSA9IGMgLSAoYyAtIGFjeHRhaWwpO1xuICAgIGFsbyA9IGFjeHRhaWwgLSBhaGk7XG4gICAgYyA9IHNwbGl0dGVyICogYmN5dGFpbDtcbiAgICBiaGkgPSBjIC0gKGMgLSBiY3l0YWlsKTtcbiAgICBibG8gPSBiY3l0YWlsIC0gYmhpO1xuICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICB0MSA9IGFjeXRhaWwgKiBiY3h0YWlsO1xuICAgIGMgPSBzcGxpdHRlciAqIGFjeXRhaWw7XG4gICAgYWhpID0gYyAtIChjIC0gYWN5dGFpbCk7XG4gICAgYWxvID0gYWN5dGFpbCAtIGFoaTtcbiAgICBjID0gc3BsaXR0ZXIgKiBiY3h0YWlsO1xuICAgIGJoaSA9IGMgLSAoYyAtIGJjeHRhaWwpO1xuICAgIGJsbyA9IGJjeHRhaWwgLSBiaGk7XG4gICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9pID0gczAgLSB0MDtcbiAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgdVswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIHVbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICB1MyA9IF9qICsgX2k7XG4gICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgIHVbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICB1WzNdID0gdTM7XG4gICAgY29uc3QgRGxlbiA9IHN1bShDMmxlbiwgQzIsIDQsIHUsIEQpO1xuXG4gICAgcmV0dXJuIERbRGxlbiAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JpZW50MmQoYXgsIGF5LCBieCwgYnksIGN4LCBjeSkge1xuICAgIGNvbnN0IGRldGxlZnQgPSAoYXkgLSBjeSkgKiAoYnggLSBjeCk7XG4gICAgY29uc3QgZGV0cmlnaHQgPSAoYXggLSBjeCkgKiAoYnkgLSBjeSk7XG4gICAgY29uc3QgZGV0ID0gZGV0bGVmdCAtIGRldHJpZ2h0O1xuXG4gICAgY29uc3QgZGV0c3VtID0gTWF0aC5hYnMoZGV0bGVmdCArIGRldHJpZ2h0KTtcbiAgICBpZiAoTWF0aC5hYnMoZGV0KSA+PSBjY3dlcnJib3VuZEEgKiBkZXRzdW0pIHJldHVybiBkZXQ7XG5cbiAgICByZXR1cm4gLW9yaWVudDJkYWRhcHQoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgZGV0c3VtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9yaWVudDJkZmFzdChheCwgYXksIGJ4LCBieSwgY3gsIGN5KSB7XG4gICAgcmV0dXJuIChheSAtIGN5KSAqIChieCAtIGN4KSAtIChheCAtIGN4KSAqIChieSAtIGN5KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/esm/orient2d.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/esm/orient3d.js": /*!***************************************************************!*\ !*** ../../../node_modules/robust-predicates/esm/orient3d.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"orient3d\": () => (/* binding */ orient3d),\n/* harmony export */ \"orient3dfast\": () => (/* binding */ orient3dfast)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"../../../node_modules/robust-predicates/esm/util.js\");\n\n\nconst o3derrboundA = (7 + 56 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst o3derrboundB = (3 + 28 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\nconst o3derrboundC = (26 + 288 * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon * _util_js__WEBPACK_IMPORTED_MODULE_0__.epsilon;\n\nconst bc = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ca = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ab = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst at_b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst at_c = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bt_c = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bt_a = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ct_a = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst ct_b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\nconst bct = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst cat = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst abt = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst u = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(4);\n\nconst _8 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _8b = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _16 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(8);\nconst _12 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(12);\n\nlet fin = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(192);\nlet fin2 = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.vec)(192);\n\nfunction finadd(finlen, alen, a) {\n finlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(finlen, fin, alen, a, fin2);\n const tmp = fin; fin = fin2; fin2 = tmp;\n return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n if (xtail === 0) {\n if (ytail === 0) {\n a[0] = 0;\n b[0] = 0;\n return 1;\n } else {\n negate = -ytail;\n s1 = negate * ax;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * negate;\n ahi = c - (c - negate);\n alo = negate - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n bhi = c - (c - ax);\n blo = ax - bhi;\n a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n a[1] = s1;\n s1 = ytail * bx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n bhi = c - (c - bx);\n blo = bx - bhi;\n b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n b[1] = s1;\n return 2;\n }\n } else {\n if (ytail === 0) {\n s1 = xtail * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n a[1] = s1;\n negate = -xtail;\n s1 = negate * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * negate;\n ahi = c - (c - negate);\n alo = negate - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n b[1] = s1;\n return 2;\n } else {\n s1 = xtail * ay;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ay;\n bhi = c - (c - ay);\n blo = ay - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = ytail * ax;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ax;\n bhi = c - (c - ax);\n blo = ax - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n a[3] = u3;\n s1 = ytail * bx;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ytail;\n ahi = c - (c - ytail);\n alo = ytail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bx;\n bhi = c - (c - bx);\n blo = bx - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = xtail * by;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * xtail;\n ahi = c - (c - xtail);\n alo = xtail - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * by;\n bhi = c - (c - by);\n blo = by - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n b[3] = u3;\n return 4;\n }\n }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n s1 = a * b;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * a;\n ahi = c - (c - a);\n alo = a - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * k;\n bhi = c - (c - k);\n blo = k - bhi;\n _i = s0 * k;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * s0;\n ahi = c - (c - s0);\n alo = s0 - ahi;\n u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n _j = s1 * k;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * s1;\n ahi = c - (c - s1);\n alo = s1 - ahi;\n _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n _k = _i + _0;\n bvirt = _k - _i;\n u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n u3 = _j + _k;\n u[2] = _k - (u3 - _j);\n u[3] = u3;\n finlen = finadd(finlen, 4, u);\n if (z !== 0) {\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * z;\n bhi = c - (c - z);\n blo = z - bhi;\n _i = s0 * z;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * s0;\n ahi = c - (c - s0);\n alo = s0 - ahi;\n u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n _j = s1 * z;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * s1;\n ahi = c - (c - s1);\n alo = s1 - ahi;\n _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n _k = _i + _0;\n bvirt = _k - _i;\n u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n u3 = _j + _k;\n u[2] = _k - (u3 - _j);\n u[3] = u3;\n finlen = finadd(finlen, 4, u);\n }\n return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n let finlen;\n let adxtail, bdxtail, cdxtail;\n let adytail, bdytail, cdytail;\n let adztail, bdztail, cdztail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n s1 = bdx * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = cdx * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n bc[3] = u3;\n s1 = cdx * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdx;\n ahi = c - (c - cdx);\n alo = cdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = adx * cdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * cdy;\n bhi = c - (c - cdy);\n blo = cdy - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ca[3] = u3;\n s1 = adx * bdy;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * adx;\n ahi = c - (c - adx);\n alo = adx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdy;\n bhi = c - (c - bdy);\n blo = bdy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = bdx * ady;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * bdx;\n ahi = c - (c - bdx);\n alo = bdx - ahi;\n c = _util_js__WEBPACK_IMPORTED_MODULE_0__.splitter * ady;\n bhi = c - (c - ady);\n blo = ady - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n ab[3] = u3;\n\n finlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, adz, _8), _8,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdz, _8b), _8b, _16), _16,\n (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdz, _8), _8, fin);\n\n let det = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.estimate)(finlen, fin);\n let errbound = o3derrboundB * permanent;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - adx;\n adxtail = ax - (adx + bvirt) + (bvirt - dx);\n bvirt = bx - bdx;\n bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n bvirt = cx - cdx;\n cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n bvirt = ay - ady;\n adytail = ay - (ady + bvirt) + (bvirt - dy);\n bvirt = by - bdy;\n bdytail = by - (bdy + bvirt) + (bvirt - dy);\n bvirt = cy - cdy;\n cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n bvirt = az - adz;\n adztail = az - (adz + bvirt) + (bvirt - dz);\n bvirt = bz - bdz;\n bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n bvirt = cz - cdz;\n cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n adytail === 0 && bdytail === 0 && cdytail === 0 &&\n adztail === 0 && bdztail === 0 && cdztail === 0) {\n return det;\n }\n\n errbound = o3derrboundC * permanent + _util_js__WEBPACK_IMPORTED_MODULE_0__.resulterrbound * Math.abs(det);\n det +=\n adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n const bctlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(bt_len, bt_c, ct_len, ct_b, bct);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bctlen, bct, adz, _16), _16);\n\n const catlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(ct_len, ct_a, at_len, at_c, cat);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(catlen, cat, bdz, _16), _16);\n\n const abtlen = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.sum)(at_len, at_b, bt_len, bt_a, abt);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abtlen, abt, cdz, _16), _16);\n\n if (adztail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, bc, adztail, _12), _12);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(bctlen, bct, adztail, _16), _16);\n }\n if (bdztail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ca, bdztail, _12), _12);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(catlen, cat, bdztail, _16), _16);\n }\n if (cdztail !== 0) {\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(4, ab, cdztail, _12), _12);\n finlen = finadd(finlen, (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.scale)(abtlen, abt, cdztail, _16), _16);\n }\n\n if (adxtail !== 0) {\n if (bdytail !== 0) {\n finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n }\n if (cdytail !== 0) {\n finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n }\n }\n if (bdxtail !== 0) {\n if (cdytail !== 0) {\n finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n }\n if (adytail !== 0) {\n finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n }\n }\n if (cdxtail !== 0) {\n if (adytail !== 0) {\n finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n }\n if (bdytail !== 0) {\n finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n }\n }\n\n return fin[finlen - 1];\n}\n\nfunction orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n const bdxcdy = bdx * cdy;\n const cdxbdy = cdx * bdy;\n\n const cdxady = cdx * ady;\n const adxcdy = adx * cdy;\n\n const adxbdy = adx * bdy;\n const bdxady = bdx * ady;\n\n const det =\n adz * (bdxcdy - cdxbdy) +\n bdz * (cdxady - adxcdy) +\n cdz * (adxbdy - bdxady);\n\n const permanent =\n (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n const errbound = o3derrboundA * permanent;\n if (det > errbound || -det > errbound) {\n return det;\n }\n\n return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nfunction orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n const adx = ax - dx;\n const bdx = bx - dx;\n const cdx = cx - dx;\n const ady = ay - dy;\n const bdy = by - dy;\n const cdy = cy - dy;\n const adz = az - dz;\n const bdz = bz - dz;\n const cdz = cz - dz;\n\n return adx * (bdy * cdz - bdz * cdy) +\n bdx * (cdy * adz - cdz * ady) +\n cdx * (ady * bdz - adz * bdy);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS9vcmllbnQzZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUY7O0FBRXZGLCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELCtCQUErQiw2Q0FBTyxJQUFJLDZDQUFPO0FBQ2pELGlDQUFpQyw2Q0FBTyxJQUFJLDZDQUFPLEdBQUcsNkNBQU87O0FBRTdELFdBQVcsNkNBQUc7QUFDZCxXQUFXLDZDQUFHO0FBQ2QsV0FBVyw2Q0FBRztBQUNkLGFBQWEsNkNBQUc7QUFDaEIsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLGFBQWEsNkNBQUc7QUFDaEIsYUFBYSw2Q0FBRztBQUNoQixhQUFhLDZDQUFHO0FBQ2hCLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRztBQUNmLFVBQVUsNkNBQUc7O0FBRWIsV0FBVyw2Q0FBRztBQUNkLFlBQVksNkNBQUc7QUFDZixZQUFZLDZDQUFHO0FBQ2YsWUFBWSw2Q0FBRzs7QUFFZixVQUFVLDZDQUFHO0FBQ2IsV0FBVyw2Q0FBRzs7QUFFZDtBQUNBLGFBQWEsNkNBQUc7QUFDaEIscUJBQXFCLFlBQVk7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUFRO0FBQ3hCO0FBQ0E7QUFDQSxnQkFBZ0IsOENBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4Q0FBUTtBQUN4QjtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUFRO0FBQ3hCO0FBQ0E7QUFDQSxnQkFBZ0IsOENBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUFRO0FBQ3hC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O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiw2Q0FBRztBQUN0Qiw0QkFBNEIsK0NBQUs7O0FBRWpDLG1CQUFtQiw2Q0FBRztBQUN0Qiw0QkFBNEIsK0NBQUs7O0FBRWpDLG1CQUFtQiw2Q0FBRztBQUN0Qiw0QkFBNEIsK0NBQUs7O0FBRWpDO0FBQ0EsZ0NBQWdDLCtDQUFLO0FBQ3JDLGdDQUFnQywrQ0FBSztBQUNyQztBQUNBO0FBQ0EsZ0NBQWdDLCtDQUFLO0FBQ3JDLGdDQUFnQywrQ0FBSztBQUNyQztBQUNBO0FBQ0EsZ0NBQWdDLCtDQUFLO0FBQ3JDLGdDQUFnQywrQ0FBSztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yb2J1c3QtcHJlZGljYXRlcy9lc20vb3JpZW50M2QuanM/NGZmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Vwc2lsb24sIHNwbGl0dGVyLCByZXN1bHRlcnJib3VuZCwgZXN0aW1hdGUsIHZlYywgc3VtLCBzY2FsZX0gZnJvbSAnLi91dGlsLmpzJztcblxuY29uc3QgbzNkZXJyYm91bmRBID0gKDcgKyA1NiAqIGVwc2lsb24pICogZXBzaWxvbjtcbmNvbnN0IG8zZGVycmJvdW5kQiA9ICgzICsgMjggKiBlcHNpbG9uKSAqIGVwc2lsb247XG5jb25zdCBvM2RlcnJib3VuZEMgPSAoMjYgKyAyODggKiBlcHNpbG9uKSAqIGVwc2lsb24gKiBlcHNpbG9uO1xuXG5jb25zdCBiYyA9IHZlYyg0KTtcbmNvbnN0IGNhID0gdmVjKDQpO1xuY29uc3QgYWIgPSB2ZWMoNCk7XG5jb25zdCBhdF9iID0gdmVjKDQpO1xuY29uc3QgYXRfYyA9IHZlYyg0KTtcbmNvbnN0IGJ0X2MgPSB2ZWMoNCk7XG5jb25zdCBidF9hID0gdmVjKDQpO1xuY29uc3QgY3RfYSA9IHZlYyg0KTtcbmNvbnN0IGN0X2IgPSB2ZWMoNCk7XG5jb25zdCBiY3QgPSB2ZWMoOCk7XG5jb25zdCBjYXQgPSB2ZWMoOCk7XG5jb25zdCBhYnQgPSB2ZWMoOCk7XG5jb25zdCB1ID0gdmVjKDQpO1xuXG5jb25zdCBfOCA9IHZlYyg4KTtcbmNvbnN0IF84YiA9IHZlYyg4KTtcbmNvbnN0IF8xNiA9IHZlYyg4KTtcbmNvbnN0IF8xMiA9IHZlYygxMik7XG5cbmxldCBmaW4gPSB2ZWMoMTkyKTtcbmxldCBmaW4yID0gdmVjKDE5Mik7XG5cbmZ1bmN0aW9uIGZpbmFkZChmaW5sZW4sIGFsZW4sIGEpIHtcbiAgICBmaW5sZW4gPSBzdW0oZmlubGVuLCBmaW4sIGFsZW4sIGEsIGZpbjIpO1xuICAgIGNvbnN0IHRtcCA9IGZpbjsgZmluID0gZmluMjsgZmluMiA9IHRtcDtcbiAgICByZXR1cm4gZmlubGVuO1xufVxuXG5mdW5jdGlvbiB0YWlsaW5pdCh4dGFpbCwgeXRhaWwsIGF4LCBheSwgYngsIGJ5LCBhLCBiKSB7XG4gICAgbGV0IGJ2aXJ0LCBjLCBhaGksIGFsbywgYmhpLCBibG8sIF9pLCBfaiwgX2ssIF8wLCBzMSwgczAsIHQxLCB0MCwgdTMsIG5lZ2F0ZTtcbiAgICBpZiAoeHRhaWwgPT09IDApIHtcbiAgICAgICAgaWYgKHl0YWlsID09PSAwKSB7XG4gICAgICAgICAgICBhWzBdID0gMDtcbiAgICAgICAgICAgIGJbMF0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWdhdGUgPSAteXRhaWw7XG4gICAgICAgICAgICBzMSA9IG5lZ2F0ZSAqIGF4O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogbmVnYXRlO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0gbmVnYXRlKTtcbiAgICAgICAgICAgIGFsbyA9IG5lZ2F0ZSAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGF4O1xuICAgICAgICAgICAgYmhpID0gYyAtIChjIC0gYXgpO1xuICAgICAgICAgICAgYmxvID0gYXggLSBiaGk7XG4gICAgICAgICAgICBhWzBdID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIGFbMV0gPSBzMTtcbiAgICAgICAgICAgIHMxID0geXRhaWwgKiBieDtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIHl0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0geXRhaWwpO1xuICAgICAgICAgICAgYWxvID0geXRhaWwgLSBhaGk7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBieDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGJ4KTtcbiAgICAgICAgICAgIGJsbyA9IGJ4IC0gYmhpO1xuICAgICAgICAgICAgYlswXSA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICBiWzFdID0gczE7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh5dGFpbCA9PT0gMCkge1xuICAgICAgICAgICAgczEgPSB4dGFpbCAqIGF5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogeHRhaWw7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSB4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSB4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGF5O1xuICAgICAgICAgICAgYmhpID0gYyAtIChjIC0gYXkpO1xuICAgICAgICAgICAgYmxvID0gYXkgLSBiaGk7XG4gICAgICAgICAgICBhWzBdID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIGFbMV0gPSBzMTtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IC14dGFpbDtcbiAgICAgICAgICAgIHMxID0gbmVnYXRlICogYnk7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBuZWdhdGU7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSBuZWdhdGUpO1xuICAgICAgICAgICAgYWxvID0gbmVnYXRlIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYnk7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBieSk7XG4gICAgICAgICAgICBibG8gPSBieSAtIGJoaTtcbiAgICAgICAgICAgIGJbMF0gPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgICAgICAgICAgYlsxXSA9IHMxO1xuICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHh0YWlsICogYXk7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiB4dGFpbDtcbiAgICAgICAgICAgIGFoaSA9IGMgLSAoYyAtIHh0YWlsKTtcbiAgICAgICAgICAgIGFsbyA9IHh0YWlsIC0gYWhpO1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogYXk7XG4gICAgICAgICAgICBiaGkgPSBjIC0gKGMgLSBheSk7XG4gICAgICAgICAgICBibG8gPSBheSAtIGJoaTtcbiAgICAgICAgICAgIHMwID0gYWxvICogYmxvIC0gKHMxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgICAgIHQxID0geXRhaWwgKiBheDtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIHl0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0geXRhaWwpO1xuICAgICAgICAgICAgYWxvID0geXRhaWwgLSBhaGk7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBheDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGF4KTtcbiAgICAgICAgICAgIGJsbyA9IGF4IC0gYmhpO1xuICAgICAgICAgICAgdDAgPSBhbG8gKiBibG8gLSAodDEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgICAgICAgICAgX2kgPSBzMCAtIHQwO1xuICAgICAgICAgICAgYnZpcnQgPSBzMCAtIF9pO1xuICAgICAgICAgICAgYVswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgICAgICAgICAgX2ogPSBzMSArIF9pO1xuICAgICAgICAgICAgYnZpcnQgPSBfaiAtIHMxO1xuICAgICAgICAgICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIF9pID0gXzAgLSB0MTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gXzAgLSBfaTtcbiAgICAgICAgICAgIGFbMV0gPSBfMCAtIChfaSArIGJ2aXJ0KSArIChidmlydCAtIHQxKTtcbiAgICAgICAgICAgIHUzID0gX2ogKyBfaTtcbiAgICAgICAgICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICAgICAgICAgIGFbMl0gPSBfaiAtICh1MyAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICAgICAgICAgIGFbM10gPSB1MztcbiAgICAgICAgICAgIHMxID0geXRhaWwgKiBieDtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIHl0YWlsO1xuICAgICAgICAgICAgYWhpID0gYyAtIChjIC0geXRhaWwpO1xuICAgICAgICAgICAgYWxvID0geXRhaWwgLSBhaGk7XG4gICAgICAgICAgICBjID0gc3BsaXR0ZXIgKiBieDtcbiAgICAgICAgICAgIGJoaSA9IGMgLSAoYyAtIGJ4KTtcbiAgICAgICAgICAgIGJsbyA9IGJ4IC0gYmhpO1xuICAgICAgICAgICAgczAgPSBhbG8gKiBibG8gLSAoczEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgICAgICAgICAgdDEgPSB4dGFpbCAqIGJ5O1xuICAgICAgICAgICAgYyA9IHNwbGl0dGVyICogeHRhaWw7XG4gICAgICAgICAgICBhaGkgPSBjIC0gKGMgLSB4dGFpbCk7XG4gICAgICAgICAgICBhbG8gPSB4dGFpbCAtIGFoaTtcbiAgICAgICAgICAgIGMgPSBzcGxpdHRlciAqIGJ5O1xuICAgICAgICAgICAgYmhpID0gYyAtIChjIC0gYnkpO1xuICAgICAgICAgICAgYmxvID0gYnkgLSBiaGk7XG4gICAgICAgICAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgICAgICAgICBfaSA9IHMwIC0gdDA7XG4gICAgICAgICAgICBidmlydCA9IHMwIC0gX2k7XG4gICAgICAgICAgICBiWzBdID0gczAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MCk7XG4gICAgICAgICAgICBfaiA9IHMxICsgX2k7XG4gICAgICAgICAgICBidmlydCA9IF9qIC0gczE7XG4gICAgICAgICAgICBfMCA9IHMxIC0gKF9qIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgX2kgPSBfMCAtIHQxO1xuICAgICAgICAgICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgICAgICAgICAgYlsxXSA9IF8wIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDEpO1xuICAgICAgICAgICAgdTMgPSBfaiArIF9pO1xuICAgICAgICAgICAgYnZpcnQgPSB1MyAtIF9qO1xuICAgICAgICAgICAgYlsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgICAgICAgICAgYlszXSA9IHUzO1xuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRhaWxhZGQoZmlubGVuLCBhLCBiLCBrLCB6KSB7XG4gICAgbGV0IGJ2aXJ0LCBjLCBhaGksIGFsbywgYmhpLCBibG8sIF9pLCBfaiwgX2ssIF8wLCBzMSwgczAsIHUzO1xuICAgIHMxID0gYSAqIGI7XG4gICAgYyA9IHNwbGl0dGVyICogYTtcbiAgICBhaGkgPSBjIC0gKGMgLSBhKTtcbiAgICBhbG8gPSBhIC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGI7XG4gICAgYmhpID0gYyAtIChjIC0gYik7XG4gICAgYmxvID0gYiAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgYyA9IHNwbGl0dGVyICogaztcbiAgICBiaGkgPSBjIC0gKGMgLSBrKTtcbiAgICBibG8gPSBrIC0gYmhpO1xuICAgIF9pID0gczAgKiBrO1xuICAgIGMgPSBzcGxpdHRlciAqIHMwO1xuICAgIGFoaSA9IGMgLSAoYyAtIHMwKTtcbiAgICBhbG8gPSBzMCAtIGFoaTtcbiAgICB1WzBdID0gYWxvICogYmxvIC0gKF9pIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICBfaiA9IHMxICogaztcbiAgICBjID0gc3BsaXR0ZXIgKiBzMTtcbiAgICBhaGkgPSBjIC0gKGMgLSBzMSk7XG4gICAgYWxvID0gczEgLSBhaGk7XG4gICAgXzAgPSBhbG8gKiBibG8gLSAoX2ogLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIF9rID0gX2kgKyBfMDtcbiAgICBidmlydCA9IF9rIC0gX2k7XG4gICAgdVsxXSA9IF9pIC0gKF9rIC0gYnZpcnQpICsgKF8wIC0gYnZpcnQpO1xuICAgIHUzID0gX2ogKyBfaztcbiAgICB1WzJdID0gX2sgLSAodTMgLSBfaik7XG4gICAgdVszXSA9IHUzO1xuICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIDQsIHUpO1xuICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgIGMgPSBzcGxpdHRlciAqIHo7XG4gICAgICAgIGJoaSA9IGMgLSAoYyAtIHopO1xuICAgICAgICBibG8gPSB6IC0gYmhpO1xuICAgICAgICBfaSA9IHMwICogejtcbiAgICAgICAgYyA9IHNwbGl0dGVyICogczA7XG4gICAgICAgIGFoaSA9IGMgLSAoYyAtIHMwKTtcbiAgICAgICAgYWxvID0gczAgLSBhaGk7XG4gICAgICAgIHVbMF0gPSBhbG8gKiBibG8gLSAoX2kgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgICAgICBfaiA9IHMxICogejtcbiAgICAgICAgYyA9IHNwbGl0dGVyICogczE7XG4gICAgICAgIGFoaSA9IGMgLSAoYyAtIHMxKTtcbiAgICAgICAgYWxvID0gczEgLSBhaGk7XG4gICAgICAgIF8wID0gYWxvICogYmxvIC0gKF9qIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgX2sgPSBfaSArIF8wO1xuICAgICAgICBidmlydCA9IF9rIC0gX2k7XG4gICAgICAgIHVbMV0gPSBfaSAtIChfayAtIGJ2aXJ0KSArIChfMCAtIGJ2aXJ0KTtcbiAgICAgICAgdTMgPSBfaiArIF9rO1xuICAgICAgICB1WzJdID0gX2sgLSAodTMgLSBfaik7XG4gICAgICAgIHVbM10gPSB1MztcbiAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgNCwgdSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5sZW47XG59XG5cbmZ1bmN0aW9uIG9yaWVudDNkYWRhcHQoYXgsIGF5LCBheiwgYngsIGJ5LCBieiwgY3gsIGN5LCBjeiwgZHgsIGR5LCBkeiwgcGVybWFuZW50KSB7XG4gICAgbGV0IGZpbmxlbjtcbiAgICBsZXQgYWR4dGFpbCwgYmR4dGFpbCwgY2R4dGFpbDtcbiAgICBsZXQgYWR5dGFpbCwgYmR5dGFpbCwgY2R5dGFpbDtcbiAgICBsZXQgYWR6dGFpbCwgYmR6dGFpbCwgY2R6dGFpbDtcbiAgICBsZXQgYnZpcnQsIGMsIGFoaSwgYWxvLCBiaGksIGJsbywgX2ksIF9qLCBfaywgXzAsIHMxLCBzMCwgdDEsIHQwLCB1MztcblxuICAgIGNvbnN0IGFkeCA9IGF4IC0gZHg7XG4gICAgY29uc3QgYmR4ID0gYnggLSBkeDtcbiAgICBjb25zdCBjZHggPSBjeCAtIGR4O1xuICAgIGNvbnN0IGFkeSA9IGF5IC0gZHk7XG4gICAgY29uc3QgYmR5ID0gYnkgLSBkeTtcbiAgICBjb25zdCBjZHkgPSBjeSAtIGR5O1xuICAgIGNvbnN0IGFkeiA9IGF6IC0gZHo7XG4gICAgY29uc3QgYmR6ID0gYnogLSBkejtcbiAgICBjb25zdCBjZHogPSBjeiAtIGR6O1xuXG4gICAgczEgPSBiZHggKiBjZHk7XG4gICAgYyA9IHNwbGl0dGVyICogYmR4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGJkeCk7XG4gICAgYWxvID0gYmR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGNkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBjZHkpO1xuICAgIGJsbyA9IGNkeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBjZHggKiBiZHk7XG4gICAgYyA9IHNwbGl0dGVyICogY2R4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGNkeCk7XG4gICAgYWxvID0gY2R4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGJkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBiZHkpO1xuICAgIGJsbyA9IGJkeSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBiY1swXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGJjWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBiY1syXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGJjWzNdID0gdTM7XG4gICAgczEgPSBjZHggKiBhZHk7XG4gICAgYyA9IHNwbGl0dGVyICogY2R4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGNkeCk7XG4gICAgYWxvID0gY2R4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGFkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBhZHkpO1xuICAgIGJsbyA9IGFkeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBhZHggKiBjZHk7XG4gICAgYyA9IHNwbGl0dGVyICogYWR4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGFkeCk7XG4gICAgYWxvID0gYWR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGNkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBjZHkpO1xuICAgIGJsbyA9IGNkeSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBjYVswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGNhWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBjYVsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGNhWzNdID0gdTM7XG4gICAgczEgPSBhZHggKiBiZHk7XG4gICAgYyA9IHNwbGl0dGVyICogYWR4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGFkeCk7XG4gICAgYWxvID0gYWR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGJkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBiZHkpO1xuICAgIGJsbyA9IGJkeSAtIGJoaTtcbiAgICBzMCA9IGFsbyAqIGJsbyAtIChzMSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgdDEgPSBiZHggKiBhZHk7XG4gICAgYyA9IHNwbGl0dGVyICogYmR4O1xuICAgIGFoaSA9IGMgLSAoYyAtIGJkeCk7XG4gICAgYWxvID0gYmR4IC0gYWhpO1xuICAgIGMgPSBzcGxpdHRlciAqIGFkeTtcbiAgICBiaGkgPSBjIC0gKGMgLSBhZHkpO1xuICAgIGJsbyA9IGFkeSAtIGJoaTtcbiAgICB0MCA9IGFsbyAqIGJsbyAtICh0MSAtIGFoaSAqIGJoaSAtIGFsbyAqIGJoaSAtIGFoaSAqIGJsbyk7XG4gICAgX2kgPSBzMCAtIHQwO1xuICAgIGJ2aXJ0ID0gczAgLSBfaTtcbiAgICBhYlswXSA9IHMwIC0gKF9pICsgYnZpcnQpICsgKGJ2aXJ0IC0gdDApO1xuICAgIF9qID0gczEgKyBfaTtcbiAgICBidmlydCA9IF9qIC0gczE7XG4gICAgXzAgPSBzMSAtIChfaiAtIGJ2aXJ0KSArIChfaSAtIGJ2aXJ0KTtcbiAgICBfaSA9IF8wIC0gdDE7XG4gICAgYnZpcnQgPSBfMCAtIF9pO1xuICAgIGFiWzFdID0gXzAgLSAoX2kgKyBidmlydCkgKyAoYnZpcnQgLSB0MSk7XG4gICAgdTMgPSBfaiArIF9pO1xuICAgIGJ2aXJ0ID0gdTMgLSBfajtcbiAgICBhYlsyXSA9IF9qIC0gKHUzIC0gYnZpcnQpICsgKF9pIC0gYnZpcnQpO1xuICAgIGFiWzNdID0gdTM7XG5cbiAgICBmaW5sZW4gPSBzdW0oXG4gICAgICAgIHN1bShcbiAgICAgICAgICAgIHNjYWxlKDQsIGJjLCBhZHosIF84KSwgXzgsXG4gICAgICAgICAgICBzY2FsZSg0LCBjYSwgYmR6LCBfOGIpLCBfOGIsIF8xNiksIF8xNixcbiAgICAgICAgc2NhbGUoNCwgYWIsIGNkeiwgXzgpLCBfOCwgZmluKTtcblxuICAgIGxldCBkZXQgPSBlc3RpbWF0ZShmaW5sZW4sIGZpbik7XG4gICAgbGV0IGVycmJvdW5kID0gbzNkZXJyYm91bmRCICogcGVybWFuZW50O1xuICAgIGlmIChkZXQgPj0gZXJyYm91bmQgfHwgLWRldCA+PSBlcnJib3VuZCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIGJ2aXJ0ID0gYXggLSBhZHg7XG4gICAgYWR4dGFpbCA9IGF4IC0gKGFkeCArIGJ2aXJ0KSArIChidmlydCAtIGR4KTtcbiAgICBidmlydCA9IGJ4IC0gYmR4O1xuICAgIGJkeHRhaWwgPSBieCAtIChiZHggKyBidmlydCkgKyAoYnZpcnQgLSBkeCk7XG4gICAgYnZpcnQgPSBjeCAtIGNkeDtcbiAgICBjZHh0YWlsID0gY3ggLSAoY2R4ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZHgpO1xuICAgIGJ2aXJ0ID0gYXkgLSBhZHk7XG4gICAgYWR5dGFpbCA9IGF5IC0gKGFkeSArIGJ2aXJ0KSArIChidmlydCAtIGR5KTtcbiAgICBidmlydCA9IGJ5IC0gYmR5O1xuICAgIGJkeXRhaWwgPSBieSAtIChiZHkgKyBidmlydCkgKyAoYnZpcnQgLSBkeSk7XG4gICAgYnZpcnQgPSBjeSAtIGNkeTtcbiAgICBjZHl0YWlsID0gY3kgLSAoY2R5ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZHkpO1xuICAgIGJ2aXJ0ID0gYXogLSBhZHo7XG4gICAgYWR6dGFpbCA9IGF6IC0gKGFkeiArIGJ2aXJ0KSArIChidmlydCAtIGR6KTtcbiAgICBidmlydCA9IGJ6IC0gYmR6O1xuICAgIGJkenRhaWwgPSBieiAtIChiZHogKyBidmlydCkgKyAoYnZpcnQgLSBkeik7XG4gICAgYnZpcnQgPSBjeiAtIGNkejtcbiAgICBjZHp0YWlsID0gY3ogLSAoY2R6ICsgYnZpcnQpICsgKGJ2aXJ0IC0gZHopO1xuXG4gICAgaWYgKGFkeHRhaWwgPT09IDAgJiYgYmR4dGFpbCA9PT0gMCAmJiBjZHh0YWlsID09PSAwICYmXG4gICAgICAgIGFkeXRhaWwgPT09IDAgJiYgYmR5dGFpbCA9PT0gMCAmJiBjZHl0YWlsID09PSAwICYmXG4gICAgICAgIGFkenRhaWwgPT09IDAgJiYgYmR6dGFpbCA9PT0gMCAmJiBjZHp0YWlsID09PSAwKSB7XG4gICAgICAgIHJldHVybiBkZXQ7XG4gICAgfVxuXG4gICAgZXJyYm91bmQgPSBvM2RlcnJib3VuZEMgKiBwZXJtYW5lbnQgKyByZXN1bHRlcnJib3VuZCAqIE1hdGguYWJzKGRldCk7XG4gICAgZGV0ICs9XG4gICAgICAgIGFkeiAqIChiZHggKiBjZHl0YWlsICsgY2R5ICogYmR4dGFpbCAtIChiZHkgKiBjZHh0YWlsICsgY2R4ICogYmR5dGFpbCkpICsgYWR6dGFpbCAqIChiZHggKiBjZHkgLSBiZHkgKiBjZHgpICtcbiAgICAgICAgYmR6ICogKGNkeCAqIGFkeXRhaWwgKyBhZHkgKiBjZHh0YWlsIC0gKGNkeSAqIGFkeHRhaWwgKyBhZHggKiBjZHl0YWlsKSkgKyBiZHp0YWlsICogKGNkeCAqIGFkeSAtIGNkeSAqIGFkeCkgK1xuICAgICAgICBjZHogKiAoYWR4ICogYmR5dGFpbCArIGJkeSAqIGFkeHRhaWwgLSAoYWR5ICogYmR4dGFpbCArIGJkeCAqIGFkeXRhaWwpKSArIGNkenRhaWwgKiAoYWR4ICogYmR5IC0gYWR5ICogYmR4KTtcbiAgICBpZiAoZGV0ID49IGVycmJvdW5kIHx8IC1kZXQgPj0gZXJyYm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGRldDtcbiAgICB9XG5cbiAgICBjb25zdCBhdF9sZW4gPSB0YWlsaW5pdChhZHh0YWlsLCBhZHl0YWlsLCBiZHgsIGJkeSwgY2R4LCBjZHksIGF0X2IsIGF0X2MpO1xuICAgIGNvbnN0IGJ0X2xlbiA9IHRhaWxpbml0KGJkeHRhaWwsIGJkeXRhaWwsIGNkeCwgY2R5LCBhZHgsIGFkeSwgYnRfYywgYnRfYSk7XG4gICAgY29uc3QgY3RfbGVuID0gdGFpbGluaXQoY2R4dGFpbCwgY2R5dGFpbCwgYWR4LCBhZHksIGJkeCwgYmR5LCBjdF9hLCBjdF9iKTtcblxuICAgIGNvbnN0IGJjdGxlbiA9IHN1bShidF9sZW4sIGJ0X2MsIGN0X2xlbiwgY3RfYiwgYmN0KTtcbiAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZShiY3RsZW4sIGJjdCwgYWR6LCBfMTYpLCBfMTYpO1xuXG4gICAgY29uc3QgY2F0bGVuID0gc3VtKGN0X2xlbiwgY3RfYSwgYXRfbGVuLCBhdF9jLCBjYXQpO1xuICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHNjYWxlKGNhdGxlbiwgY2F0LCBiZHosIF8xNiksIF8xNik7XG5cbiAgICBjb25zdCBhYnRsZW4gPSBzdW0oYXRfbGVuLCBhdF9iLCBidF9sZW4sIGJ0X2EsIGFidCk7XG4gICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc2NhbGUoYWJ0bGVuLCBhYnQsIGNkeiwgXzE2KSwgXzE2KTtcblxuICAgIGlmIChhZHp0YWlsICE9PSAwKSB7XG4gICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHNjYWxlKDQsIGJjLCBhZHp0YWlsLCBfMTIpLCBfMTIpO1xuICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZShiY3RsZW4sIGJjdCwgYWR6dGFpbCwgXzE2KSwgXzE2KTtcbiAgICB9XG4gICAgaWYgKGJkenRhaWwgIT09IDApIHtcbiAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc2NhbGUoNCwgY2EsIGJkenRhaWwsIF8xMiksIF8xMik7XG4gICAgICAgIGZpbmxlbiA9IGZpbmFkZChmaW5sZW4sIHNjYWxlKGNhdGxlbiwgY2F0LCBiZHp0YWlsLCBfMTYpLCBfMTYpO1xuICAgIH1cbiAgICBpZiAoY2R6dGFpbCAhPT0gMCkge1xuICAgICAgICBmaW5sZW4gPSBmaW5hZGQoZmlubGVuLCBzY2FsZSg0LCBhYiwgY2R6dGFpbCwgXzEyKSwgXzEyKTtcbiAgICAgICAgZmlubGVuID0gZmluYWRkKGZpbmxlbiwgc2NhbGUoYWJ0bGVuLCBhYnQsIGNkenRhaWwsIF8xNiksIF8xNik7XG4gICAgfVxuXG4gICAgaWYgKGFkeHRhaWwgIT09IDApIHtcbiAgICAgICAgaWYgKGJkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGZpbmxlbiA9IHRhaWxhZGQoZmlubGVuLCBhZHh0YWlsLCBiZHl0YWlsLCBjZHosIGNkenRhaWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZHl0YWlsICE9PSAwKSB7XG4gICAgICAgICAgICBmaW5sZW4gPSB0YWlsYWRkKGZpbmxlbiwgLWFkeHRhaWwsIGNkeXRhaWwsIGJkeiwgYmR6dGFpbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJkeHRhaWwgIT09IDApIHtcbiAgICAgICAgaWYgKGNkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGZpbmxlbiA9IHRhaWxhZGQoZmlubGVuLCBiZHh0YWlsLCBjZHl0YWlsLCBhZHosIGFkenRhaWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZHl0YWlsICE9PSAwKSB7XG4gICAgICAgICAgICBmaW5sZW4gPSB0YWlsYWRkKGZpbmxlbiwgLWJkeHRhaWwsIGFkeXRhaWwsIGNkeiwgY2R6dGFpbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNkeHRhaWwgIT09IDApIHtcbiAgICAgICAgaWYgKGFkeXRhaWwgIT09IDApIHtcbiAgICAgICAgICAgIGZpbmxlbiA9IHRhaWxhZGQoZmlubGVuLCBjZHh0YWlsLCBhZHl0YWlsLCBiZHosIGJkenRhaWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZHl0YWlsICE9PSAwKSB7XG4gICAgICAgICAgICBmaW5sZW4gPSB0YWlsYWRkKGZpbmxlbiwgLWNkeHRhaWwsIGJkeXRhaWwsIGFkeiwgYWR6dGFpbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmluW2ZpbmxlbiAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JpZW50M2QoYXgsIGF5LCBheiwgYngsIGJ5LCBieiwgY3gsIGN5LCBjeiwgZHgsIGR5LCBkeikge1xuICAgIGNvbnN0IGFkeCA9IGF4IC0gZHg7XG4gICAgY29uc3QgYmR4ID0gYnggLSBkeDtcbiAgICBjb25zdCBjZHggPSBjeCAtIGR4O1xuICAgIGNvbnN0IGFkeSA9IGF5IC0gZHk7XG4gICAgY29uc3QgYmR5ID0gYnkgLSBkeTtcbiAgICBjb25zdCBjZHkgPSBjeSAtIGR5O1xuICAgIGNvbnN0IGFkeiA9IGF6IC0gZHo7XG4gICAgY29uc3QgYmR6ID0gYnogLSBkejtcbiAgICBjb25zdCBjZHogPSBjeiAtIGR6O1xuXG4gICAgY29uc3QgYmR4Y2R5ID0gYmR4ICogY2R5O1xuICAgIGNvbnN0IGNkeGJkeSA9IGNkeCAqIGJkeTtcblxuICAgIGNvbnN0IGNkeGFkeSA9IGNkeCAqIGFkeTtcbiAgICBjb25zdCBhZHhjZHkgPSBhZHggKiBjZHk7XG5cbiAgICBjb25zdCBhZHhiZHkgPSBhZHggKiBiZHk7XG4gICAgY29uc3QgYmR4YWR5ID0gYmR4ICogYWR5O1xuXG4gICAgY29uc3QgZGV0ID1cbiAgICAgICAgYWR6ICogKGJkeGNkeSAtIGNkeGJkeSkgK1xuICAgICAgICBiZHogKiAoY2R4YWR5IC0gYWR4Y2R5KSArXG4gICAgICAgIGNkeiAqIChhZHhiZHkgLSBiZHhhZHkpO1xuXG4gICAgY29uc3QgcGVybWFuZW50ID1cbiAgICAgICAgKE1hdGguYWJzKGJkeGNkeSkgKyBNYXRoLmFicyhjZHhiZHkpKSAqIE1hdGguYWJzKGFkeikgK1xuICAgICAgICAoTWF0aC5hYnMoY2R4YWR5KSArIE1hdGguYWJzKGFkeGNkeSkpICogTWF0aC5hYnMoYmR6KSArXG4gICAgICAgIChNYXRoLmFicyhhZHhiZHkpICsgTWF0aC5hYnMoYmR4YWR5KSkgKiBNYXRoLmFicyhjZHopO1xuXG4gICAgY29uc3QgZXJyYm91bmQgPSBvM2RlcnJib3VuZEEgKiBwZXJtYW5lbnQ7XG4gICAgaWYgKGRldCA+IGVycmJvdW5kIHx8IC1kZXQgPiBlcnJib3VuZCkge1xuICAgICAgICByZXR1cm4gZGV0O1xuICAgIH1cblxuICAgIHJldHVybiBvcmllbnQzZGFkYXB0KGF4LCBheSwgYXosIGJ4LCBieSwgYnosIGN4LCBjeSwgY3osIGR4LCBkeSwgZHosIHBlcm1hbmVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmllbnQzZGZhc3QoYXgsIGF5LCBheiwgYngsIGJ5LCBieiwgY3gsIGN5LCBjeiwgZHgsIGR5LCBkeikge1xuICAgIGNvbnN0IGFkeCA9IGF4IC0gZHg7XG4gICAgY29uc3QgYmR4ID0gYnggLSBkeDtcbiAgICBjb25zdCBjZHggPSBjeCAtIGR4O1xuICAgIGNvbnN0IGFkeSA9IGF5IC0gZHk7XG4gICAgY29uc3QgYmR5ID0gYnkgLSBkeTtcbiAgICBjb25zdCBjZHkgPSBjeSAtIGR5O1xuICAgIGNvbnN0IGFkeiA9IGF6IC0gZHo7XG4gICAgY29uc3QgYmR6ID0gYnogLSBkejtcbiAgICBjb25zdCBjZHogPSBjeiAtIGR6O1xuXG4gICAgcmV0dXJuIGFkeCAqIChiZHkgKiBjZHogLSBiZHogKiBjZHkpICtcbiAgICAgICAgYmR4ICogKGNkeSAqIGFkeiAtIGNkeiAqIGFkeSkgK1xuICAgICAgICBjZHggKiAoYWR5ICogYmR6IC0gYWR6ICogYmR5KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/esm/orient3d.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/esm/util.js": /*!***********************************************************!*\ !*** ../../../node_modules/robust-predicates/esm/util.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"epsilon\": () => (/* binding */ epsilon),\n/* harmony export */ \"estimate\": () => (/* binding */ estimate),\n/* harmony export */ \"negate\": () => (/* binding */ negate),\n/* harmony export */ \"resulterrbound\": () => (/* binding */ resulterrbound),\n/* harmony export */ \"scale\": () => (/* binding */ scale),\n/* harmony export */ \"splitter\": () => (/* binding */ splitter),\n/* harmony export */ \"sum\": () => (/* binding */ sum),\n/* harmony export */ \"sum_three\": () => (/* binding */ sum_three),\n/* harmony export */ \"vec\": () => (/* binding */ vec)\n/* harmony export */ });\nconst epsilon = 1.1102230246251565e-16;\nconst splitter = 134217729;\nconst resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nfunction sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nfunction sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nfunction scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nfunction negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nfunction estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nfunction vec(n) {\n return new Float64Array(n);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2VzbS91dGlsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFPO0FBQ0E7QUFDQTs7QUFFUDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFVBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7O0FBRU87QUFDUDtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yb2J1c3QtcHJlZGljYXRlcy9lc20vdXRpbC5qcz9iMTA2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlcHNpbG9uID0gMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjtcbmV4cG9ydCBjb25zdCBzcGxpdHRlciA9IDEzNDIxNzcyOTtcbmV4cG9ydCBjb25zdCByZXN1bHRlcnJib3VuZCA9ICgzICsgOCAqIGVwc2lsb24pICogZXBzaWxvbjtcblxuLy8gZmFzdF9leHBhbnNpb25fc3VtX3plcm9lbGltIHJvdXRpbmUgZnJvbSBvcml0aW5hbCBjb2RlXG5leHBvcnQgZnVuY3Rpb24gc3VtKGVsZW4sIGUsIGZsZW4sIGYsIGgpIHtcbiAgICBsZXQgUSwgUW5ldywgaGgsIGJ2aXJ0O1xuICAgIGxldCBlbm93ID0gZVswXTtcbiAgICBsZXQgZm5vdyA9IGZbMF07XG4gICAgbGV0IGVpbmRleCA9IDA7XG4gICAgbGV0IGZpbmRleCA9IDA7XG4gICAgaWYgKChmbm93ID4gZW5vdykgPT09IChmbm93ID4gLWVub3cpKSB7XG4gICAgICAgIFEgPSBlbm93O1xuICAgICAgICBlbm93ID0gZVsrK2VpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgUSA9IGZub3c7XG4gICAgICAgIGZub3cgPSBmWysrZmluZGV4XTtcbiAgICB9XG4gICAgbGV0IGhpbmRleCA9IDA7XG4gICAgaWYgKGVpbmRleCA8IGVsZW4gJiYgZmluZGV4IDwgZmxlbikge1xuICAgICAgICBpZiAoKGZub3cgPiBlbm93KSA9PT0gKGZub3cgPiAtZW5vdykpIHtcbiAgICAgICAgICAgIFFuZXcgPSBlbm93ICsgUTtcbiAgICAgICAgICAgIGhoID0gUSAtIChRbmV3IC0gZW5vdyk7XG4gICAgICAgICAgICBlbm93ID0gZVsrK2VpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBRbmV3ID0gZm5vdyArIFE7XG4gICAgICAgICAgICBoaCA9IFEgLSAoUW5ldyAtIGZub3cpO1xuICAgICAgICAgICAgZm5vdyA9IGZbKytmaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIFEgPSBRbmV3O1xuICAgICAgICBpZiAoaGggIT09IDApIHtcbiAgICAgICAgICAgIGhbaGluZGV4KytdID0gaGg7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGVpbmRleCA8IGVsZW4gJiYgZmluZGV4IDwgZmxlbikge1xuICAgICAgICAgICAgaWYgKChmbm93ID4gZW5vdykgPT09IChmbm93ID4gLWVub3cpKSB7XG4gICAgICAgICAgICAgICAgUW5ldyA9IFEgKyBlbm93O1xuICAgICAgICAgICAgICAgIGJ2aXJ0ID0gUW5ldyAtIFE7XG4gICAgICAgICAgICAgICAgaGggPSBRIC0gKFFuZXcgLSBidmlydCkgKyAoZW5vdyAtIGJ2aXJ0KTtcbiAgICAgICAgICAgICAgICBlbm93ID0gZVsrK2VpbmRleF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFFuZXcgPSBRICsgZm5vdztcbiAgICAgICAgICAgICAgICBidmlydCA9IFFuZXcgLSBRO1xuICAgICAgICAgICAgICAgIGhoID0gUSAtIChRbmV3IC0gYnZpcnQpICsgKGZub3cgLSBidmlydCk7XG4gICAgICAgICAgICAgICAgZm5vdyA9IGZbKytmaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUSA9IFFuZXc7XG4gICAgICAgICAgICBpZiAoaGggIT09IDApIHtcbiAgICAgICAgICAgICAgICBoW2hpbmRleCsrXSA9IGhoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChlaW5kZXggPCBlbGVuKSB7XG4gICAgICAgIFFuZXcgPSBRICsgZW5vdztcbiAgICAgICAgYnZpcnQgPSBRbmV3IC0gUTtcbiAgICAgICAgaGggPSBRIC0gKFFuZXcgLSBidmlydCkgKyAoZW5vdyAtIGJ2aXJ0KTtcbiAgICAgICAgZW5vdyA9IGVbKytlaW5kZXhdO1xuICAgICAgICBRID0gUW5ldztcbiAgICAgICAgaWYgKGhoICE9PSAwKSB7XG4gICAgICAgICAgICBoW2hpbmRleCsrXSA9IGhoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChmaW5kZXggPCBmbGVuKSB7XG4gICAgICAgIFFuZXcgPSBRICsgZm5vdztcbiAgICAgICAgYnZpcnQgPSBRbmV3IC0gUTtcbiAgICAgICAgaGggPSBRIC0gKFFuZXcgLSBidmlydCkgKyAoZm5vdyAtIGJ2aXJ0KTtcbiAgICAgICAgZm5vdyA9IGZbKytmaW5kZXhdO1xuICAgICAgICBRID0gUW5ldztcbiAgICAgICAgaWYgKGhoICE9PSAwKSB7XG4gICAgICAgICAgICBoW2hpbmRleCsrXSA9IGhoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChRICE9PSAwIHx8IGhpbmRleCA9PT0gMCkge1xuICAgICAgICBoW2hpbmRleCsrXSA9IFE7XG4gICAgfVxuICAgIHJldHVybiBoaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1fdGhyZWUoYWxlbiwgYSwgYmxlbiwgYiwgY2xlbiwgYywgdG1wLCBvdXQpIHtcbiAgICByZXR1cm4gc3VtKHN1bShhbGVuLCBhLCBibGVuLCBiLCB0bXApLCB0bXAsIGNsZW4sIGMsIG91dCk7XG59XG5cbi8vIHNjYWxlX2V4cGFuc2lvbl96ZXJvZWxpbSByb3V0aW5lIGZyb20gb3JpdGluYWwgY29kZVxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKGVsZW4sIGUsIGIsIGgpIHtcbiAgICBsZXQgUSwgc3VtLCBoaCwgcHJvZHVjdDEsIHByb2R1Y3QwO1xuICAgIGxldCBidmlydCwgYywgYWhpLCBhbG8sIGJoaSwgYmxvO1xuXG4gICAgYyA9IHNwbGl0dGVyICogYjtcbiAgICBiaGkgPSBjIC0gKGMgLSBiKTtcbiAgICBibG8gPSBiIC0gYmhpO1xuICAgIGxldCBlbm93ID0gZVswXTtcbiAgICBRID0gZW5vdyAqIGI7XG4gICAgYyA9IHNwbGl0dGVyICogZW5vdztcbiAgICBhaGkgPSBjIC0gKGMgLSBlbm93KTtcbiAgICBhbG8gPSBlbm93IC0gYWhpO1xuICAgIGhoID0gYWxvICogYmxvIC0gKFEgLSBhaGkgKiBiaGkgLSBhbG8gKiBiaGkgLSBhaGkgKiBibG8pO1xuICAgIGxldCBoaW5kZXggPSAwO1xuICAgIGlmIChoaCAhPT0gMCkge1xuICAgICAgICBoW2hpbmRleCsrXSA9IGhoO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGVsZW47IGkrKykge1xuICAgICAgICBlbm93ID0gZVtpXTtcbiAgICAgICAgcHJvZHVjdDEgPSBlbm93ICogYjtcbiAgICAgICAgYyA9IHNwbGl0dGVyICogZW5vdztcbiAgICAgICAgYWhpID0gYyAtIChjIC0gZW5vdyk7XG4gICAgICAgIGFsbyA9IGVub3cgLSBhaGk7XG4gICAgICAgIHByb2R1Y3QwID0gYWxvICogYmxvIC0gKHByb2R1Y3QxIC0gYWhpICogYmhpIC0gYWxvICogYmhpIC0gYWhpICogYmxvKTtcbiAgICAgICAgc3VtID0gUSArIHByb2R1Y3QwO1xuICAgICAgICBidmlydCA9IHN1bSAtIFE7XG4gICAgICAgIGhoID0gUSAtIChzdW0gLSBidmlydCkgKyAocHJvZHVjdDAgLSBidmlydCk7XG4gICAgICAgIGlmIChoaCAhPT0gMCkge1xuICAgICAgICAgICAgaFtoaW5kZXgrK10gPSBoaDtcbiAgICAgICAgfVxuICAgICAgICBRID0gcHJvZHVjdDEgKyBzdW07XG4gICAgICAgIGhoID0gc3VtIC0gKFEgLSBwcm9kdWN0MSk7XG4gICAgICAgIGlmIChoaCAhPT0gMCkge1xuICAgICAgICAgICAgaFtoaW5kZXgrK10gPSBoaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUSAhPT0gMCB8fCBoaW5kZXggPT09IDApIHtcbiAgICAgICAgaFtoaW5kZXgrK10gPSBRO1xuICAgIH1cbiAgICByZXR1cm4gaGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKGVsZW4sIGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW47IGkrKykgZVtpXSA9IC1lW2ldO1xuICAgIHJldHVybiBlbGVuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXN0aW1hdGUoZWxlbiwgZSkge1xuICAgIGxldCBRID0gZVswXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGVsZW47IGkrKykgUSArPSBlW2ldO1xuICAgIHJldHVybiBRO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVjKG4pIHtcbiAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShuKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/esm/util.js\n"); /***/ }), /***/ "../../../node_modules/robust-predicates/index.js": /*!********************************************************!*\ !*** ../../../node_modules/robust-predicates/index.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"incircle\": () => (/* reexport safe */ _esm_incircle_js__WEBPACK_IMPORTED_MODULE_2__.incircle),\n/* harmony export */ \"incirclefast\": () => (/* reexport safe */ _esm_incircle_js__WEBPACK_IMPORTED_MODULE_2__.incirclefast),\n/* harmony export */ \"insphere\": () => (/* reexport safe */ _esm_insphere_js__WEBPACK_IMPORTED_MODULE_3__.insphere),\n/* harmony export */ \"inspherefast\": () => (/* reexport safe */ _esm_insphere_js__WEBPACK_IMPORTED_MODULE_3__.inspherefast),\n/* harmony export */ \"orient2d\": () => (/* reexport safe */ _esm_orient2d_js__WEBPACK_IMPORTED_MODULE_0__.orient2d),\n/* harmony export */ \"orient2dfast\": () => (/* reexport safe */ _esm_orient2d_js__WEBPACK_IMPORTED_MODULE_0__.orient2dfast),\n/* harmony export */ \"orient3d\": () => (/* reexport safe */ _esm_orient3d_js__WEBPACK_IMPORTED_MODULE_1__.orient3d),\n/* harmony export */ \"orient3dfast\": () => (/* reexport safe */ _esm_orient3d_js__WEBPACK_IMPORTED_MODULE_1__.orient3dfast)\n/* harmony export */ });\n/* harmony import */ var _esm_orient2d_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./esm/orient2d.js */ \"../../../node_modules/robust-predicates/esm/orient2d.js\");\n/* harmony import */ var _esm_orient3d_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./esm/orient3d.js */ \"../../../node_modules/robust-predicates/esm/orient3d.js\");\n/* harmony import */ var _esm_incircle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./esm/incircle.js */ \"../../../node_modules/robust-predicates/esm/incircle.js\");\n/* harmony import */ var _esm_insphere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./esm/insphere.js */ \"../../../node_modules/robust-predicates/esm/insphere.js\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDeUQ7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvYnVzdC1wcmVkaWNhdGVzL2luZGV4LmpzP2FjNTAiXSwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQge29yaWVudDJkLCBvcmllbnQyZGZhc3R9IGZyb20gJy4vZXNtL29yaWVudDJkLmpzJztcbmV4cG9ydCB7b3JpZW50M2QsIG9yaWVudDNkZmFzdH0gZnJvbSAnLi9lc20vb3JpZW50M2QuanMnO1xuZXhwb3J0IHtpbmNpcmNsZSwgaW5jaXJjbGVmYXN0fSBmcm9tICcuL2VzbS9pbmNpcmNsZS5qcyc7XG5leHBvcnQge2luc3BoZXJlLCBpbnNwaGVyZWZhc3R9IGZyb20gJy4vZXNtL2luc3BoZXJlLmpzJztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/robust-predicates/index.js\n"); /***/ }), /***/ "../../../node_modules/stylis/src/Enum.js": /*!************************************************!*\ !*** ../../../node_modules/stylis/src/Enum.js ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CHARSET\": () => (/* binding */ CHARSET),\n/* harmony export */ \"COMMENT\": () => (/* binding */ COMMENT),\n/* harmony export */ \"COUNTER_STYLE\": () => (/* binding */ COUNTER_STYLE),\n/* harmony export */ \"DECLARATION\": () => (/* binding */ DECLARATION),\n/* harmony export */ \"DOCUMENT\": () => (/* binding */ DOCUMENT),\n/* harmony export */ \"FONT_FACE\": () => (/* binding */ FONT_FACE),\n/* harmony export */ \"FONT_FEATURE_VALUES\": () => (/* binding */ FONT_FEATURE_VALUES),\n/* harmony export */ \"IMPORT\": () => (/* binding */ IMPORT),\n/* harmony export */ \"KEYFRAMES\": () => (/* binding */ KEYFRAMES),\n/* harmony export */ \"LAYER\": () => (/* binding */ LAYER),\n/* harmony export */ \"MEDIA\": () => (/* binding */ MEDIA),\n/* harmony export */ \"MOZ\": () => (/* binding */ MOZ),\n/* harmony export */ \"MS\": () => (/* binding */ MS),\n/* harmony export */ \"NAMESPACE\": () => (/* binding */ NAMESPACE),\n/* harmony export */ \"PAGE\": () => (/* binding */ PAGE),\n/* harmony export */ \"RULESET\": () => (/* binding */ RULESET),\n/* harmony export */ \"SUPPORTS\": () => (/* binding */ SUPPORTS),\n/* harmony export */ \"VIEWPORT\": () => (/* binding */ VIEWPORT),\n/* harmony export */ \"WEBKIT\": () => (/* binding */ WEBKIT)\n/* harmony export */ });\nvar MS = '-ms-'\nvar MOZ = '-moz-'\nvar WEBKIT = '-webkit-'\n\nvar COMMENT = 'comm'\nvar RULESET = 'rule'\nvar DECLARATION = 'decl'\n\nvar PAGE = '@page'\nvar MEDIA = '@media'\nvar IMPORT = '@import'\nvar CHARSET = '@charset'\nvar VIEWPORT = '@viewport'\nvar SUPPORTS = '@supports'\nvar DOCUMENT = '@document'\nvar NAMESPACE = '@namespace'\nvar KEYFRAMES = '@keyframes'\nvar FONT_FACE = '@font-face'\nvar COUNTER_STYLE = '@counter-style'\nvar FONT_FEATURE_VALUES = '@font-feature-values'\nvar LAYER = '@layer'\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU87QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzPzQ1MzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/stylis/src/Enum.js\n"); /***/ }), /***/ "../../../node_modules/stylis/src/Parser.js": /*!**************************************************!*\ !*** ../../../node_modules/stylis/src/Parser.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"comment\": () => (/* binding */ comment),\n/* harmony export */ \"compile\": () => (/* binding */ compile),\n/* harmony export */ \"declaration\": () => (/* binding */ declaration),\n/* harmony export */ \"parse\": () => (/* binding */ parse),\n/* harmony export */ \"ruleset\": () => (/* binding */ ruleset)\n/* harmony export */ });\n/* harmony import */ var _Enum_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Enum.js */ \"../../../node_modules/stylis/src/Enum.js\");\n/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utility.js */ \"../../../node_modules/stylis/src/Utility.js\");\n/* harmony import */ var _Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Tokenizer.js */ \"../../../node_modules/stylis/src/Tokenizer.js\");\n\n\n\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nfunction compile (value) {\n\treturn (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.dealloc)(parse('', null, null, null, [''], value = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.alloc)(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nfunction parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.next)()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.charat)(characters, length - 1) == 58) {\n\t\t\t\t\tif ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.indexof)(characters += (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.replace)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.delimit)(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.delimit)(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.whitespace)(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.escaping)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.caret)() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch ((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.peek)()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\t;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.append)(comment((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.commenter)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.next)(), (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.caret)()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.replace)(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(characters) - length))\n\t\t\t\t\t\t\t(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.append)(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.replace)(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.append)(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.charat)(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.append)(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.prev)() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.from)(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif ((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.peek)() === 45)\n\t\t\t\t\t\t\tcharacters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.delimit)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.next)())\n\n\t\t\t\t\t\tatrule = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.peek)(), offset = length = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(type = characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.identifier)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.caret)())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nfunction ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.sizeof)(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.substr)(value, post + 1, post = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.abs)(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.trim)(j > 0 ? rule[x] + ' ' + y : (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.replace)(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.node)(value, root, parent, offset === 0 ? _Enum_js__WEBPACK_IMPORTED_MODULE_2__.RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nfunction comment (value, root, parent, siblings) {\n\treturn (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.node)(value, root, parent, _Enum_js__WEBPACK_IMPORTED_MODULE_2__.COMMENT, (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.from)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.char)()), (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.substr)(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nfunction declaration (value, root, parent, length, siblings) {\n\treturn (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__.node)(value, root, parent, _Enum_js__WEBPACK_IMPORTED_MODULE_2__.DECLARATION, (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.substr)(value, 0, length), (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.substr)(value, length + 1, -1), length, siblings)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUGFyc2VyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQXVEO0FBQytDO0FBQ2tDOztBQUV4STtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDTztBQUNQLFFBQVEsc0RBQU8sMkNBQTJDLG9EQUFLO0FBQy9EOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsbURBQUk7QUFDaEQ7QUFDQTtBQUNBLDJCQUEyQixtREFBTTtBQUNqQyxTQUFTLG9EQUFPLGVBQWUsb0RBQU8sQ0FBQyxzREFBTztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHNEQUFPO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix5REFBVTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdURBQVEsQ0FBQyxvREFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQSxZQUFZLG1EQUFJO0FBQ2hCO0FBQ0EsTUFBTSxvREFBTSxTQUFTLHdEQUFTLENBQUMsbURBQUksSUFBSSxvREFBSztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtREFBTTtBQUM1QixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxvREFBTztBQUNoRSwyQkFBMkIsbURBQU07QUFDakMsT0FBTyxtREFBTSw0Q0FBNEMseURBQXlELG9EQUFPLDBCQUEwQjtBQUNuSjtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLFVBQVU7QUFDVjtBQUNBLE1BQU0sb0RBQU07O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsbURBQU07QUFDdkM7QUFDQTtBQUNBLHFEQUFxRCxtREFBTTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1EQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELG1EQUFJO0FBQ3pEOztBQUVBLDBCQUEwQixpREFBSTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsbURBQU07QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLG1EQUFJO0FBQ2QscUJBQXFCLHNEQUFPLENBQUMsbURBQUk7O0FBRWpDLGVBQWUsbURBQUksc0JBQXNCLG1EQUFNLHNCQUFzQix5REFBVSxDQUFDLG9EQUFLO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixtREFBTTtBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTtBQUNBLFlBQVksbURBQU07O0FBRWxCLCtCQUErQixXQUFXO0FBQzFDLHNCQUFzQixtREFBTSx5QkFBeUIsZ0RBQUcsNkJBQTZCLFVBQVU7QUFDL0YsV0FBVyxpREFBSSw2QkFBNkIsb0RBQU87QUFDbkQ7O0FBRUEsUUFBUSxtREFBSSxxQ0FBcUMsNkNBQU87QUFDeEQ7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUCxRQUFRLG1EQUFJLHNCQUFzQiw2Q0FBTyxFQUFFLGlEQUFJLENBQUMsbURBQUksS0FBSyxtREFBTTtBQUMvRDs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUCxRQUFRLG1EQUFJLHNCQUFzQixpREFBVyxFQUFFLG1EQUFNLG9CQUFvQixtREFBTTtBQUMvRSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanM/ZGRmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQsIGRlY2xhcmF0aW9ucyksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSwgZGVjbGFyYXRpb25zKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiwgZGVjbGFyYXRpb25zKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoLCBydWxlc2V0cyksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCwgY2hpbGRyZW4pLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoLCBzaWJsaW5ncykge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBzaWJsaW5ncykge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwLCBzaWJsaW5ncylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgsIHNpYmxpbmdzKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgsIHNpYmxpbmdzKVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/stylis/src/Parser.js\n"); /***/ }), /***/ "../../../node_modules/stylis/src/Serializer.js": /*!******************************************************!*\ !*** ../../../node_modules/stylis/src/Serializer.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"serialize\": () => (/* binding */ serialize),\n/* harmony export */ \"stringify\": () => (/* binding */ stringify)\n/* harmony export */ });\n/* harmony import */ var _Enum_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Enum.js */ \"../../../node_modules/stylis/src/Enum.js\");\n/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utility.js */ \"../../../node_modules/stylis/src/Utility.js\");\n\n\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase _Enum_js__WEBPACK_IMPORTED_MODULE_0__.LAYER: if (element.children.length) break\n\t\tcase _Enum_js__WEBPACK_IMPORTED_MODULE_0__.IMPORT: case _Enum_js__WEBPACK_IMPORTED_MODULE_0__.DECLARATION: return element.return = element.return || element.value\n\t\tcase _Enum_js__WEBPACK_IMPORTED_MODULE_0__.COMMENT: return ''\n\t\tcase _Enum_js__WEBPACK_IMPORTED_MODULE_0__.KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase _Enum_js__WEBPACK_IMPORTED_MODULE_0__.RULESET: if (!(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__.strlen)(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWlGO0FBQzlDOztBQUVuQztBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUDs7QUFFQSxpQkFBaUIscUJBQXFCO0FBQ3RDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBLE9BQU8sMkNBQUs7QUFDWixPQUFPLDRDQUFNLE9BQU8saURBQVc7QUFDL0IsT0FBTyw2Q0FBTztBQUNkLE9BQU8sK0NBQVMsNENBQTRDLDhDQUE4QztBQUMxRyxPQUFPLDZDQUFPLE9BQU8sbURBQU07QUFDM0I7O0FBRUEsUUFBUSxtREFBTSx3RkFBd0YsaUJBQWlCO0FBQ3ZIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanM/OGFiMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBpZiAoIXN0cmxlbihlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJykpKSByZXR1cm4gJydcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/stylis/src/Serializer.js\n"); /***/ }), /***/ "../../../node_modules/stylis/src/Tokenizer.js": /*!*****************************************************!*\ !*** ../../../node_modules/stylis/src/Tokenizer.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"alloc\": () => (/* binding */ alloc),\n/* harmony export */ \"caret\": () => (/* binding */ caret),\n/* harmony export */ \"char\": () => (/* binding */ char),\n/* harmony export */ \"character\": () => (/* binding */ character),\n/* harmony export */ \"characters\": () => (/* binding */ characters),\n/* harmony export */ \"column\": () => (/* binding */ column),\n/* harmony export */ \"commenter\": () => (/* binding */ commenter),\n/* harmony export */ \"copy\": () => (/* binding */ copy),\n/* harmony export */ \"dealloc\": () => (/* binding */ dealloc),\n/* harmony export */ \"delimit\": () => (/* binding */ delimit),\n/* harmony export */ \"delimiter\": () => (/* binding */ delimiter),\n/* harmony export */ \"escaping\": () => (/* binding */ escaping),\n/* harmony export */ \"identifier\": () => (/* binding */ identifier),\n/* harmony export */ \"length\": () => (/* binding */ length),\n/* harmony export */ \"lift\": () => (/* binding */ lift),\n/* harmony export */ \"line\": () => (/* binding */ line),\n/* harmony export */ \"next\": () => (/* binding */ next),\n/* harmony export */ \"node\": () => (/* binding */ node),\n/* harmony export */ \"peek\": () => (/* binding */ peek),\n/* harmony export */ \"position\": () => (/* binding */ position),\n/* harmony export */ \"prev\": () => (/* binding */ prev),\n/* harmony export */ \"slice\": () => (/* binding */ slice),\n/* harmony export */ \"token\": () => (/* binding */ token),\n/* harmony export */ \"tokenize\": () => (/* binding */ tokenize),\n/* harmony export */ \"tokenizer\": () => (/* binding */ tokenizer),\n/* harmony export */ \"whitespace\": () => (/* binding */ whitespace)\n/* harmony export */ });\n/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utility.js */ \"../../../node_modules/stylis/src/Utility.js\");\n\n\nvar line = 1\nvar column = 1\nvar length = 0\nvar position = 0\nvar character = 0\nvar characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nfunction node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nfunction copy (root, props) {\n\treturn (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.assign)(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nfunction lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\t;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.append)(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nfunction char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction prev () {\n\tcharacter = position > 0 ? (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.charat)(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction next () {\n\tcharacter = position < length ? (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.charat)(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction peek () {\n\treturn (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.charat)(characters, position)\n}\n\n/**\n * @return {number}\n */\nfunction caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction slice (begin, end) {\n\treturn (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.substr)(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nfunction alloc (value) {\n\treturn line = column = 1, length = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.strlen)(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nfunction dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction delimit (type) {\n\treturn (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.trim)(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nfunction tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nfunction tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.append)(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: ;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.append)(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: ;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.append)((0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.from)(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nfunction escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nfunction commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__.from)(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nfunction identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUErRTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVQO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkI7QUFDTztBQUNQLFNBQVM7QUFDVDs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUCxRQUFRLG1EQUFNLGdFQUFnRSxxQkFBcUI7QUFDbkc7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDTztBQUNQO0FBQ0EsMEJBQTBCLGlCQUFpQjs7QUFFM0MsQ0FBQyxvREFBTTtBQUNQOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCw0QkFBNEIsbURBQU07O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1AsaUNBQWlDLG1EQUFNOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFFBQVEsbURBQU07QUFDZDs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUCxRQUFRLG1EQUFNO0FBQ2Q7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUCxvQ0FBb0MsbURBQU07QUFDMUM7O0FBRUE7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1AsUUFBUSxpREFBSTtBQUNaOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7QUFDQSxXQUFXLG1EQUFNO0FBQ2pCO0FBQ0EsV0FBVyxvREFBTTtBQUNqQjtBQUNBLFlBQVksb0RBQU0sQ0FBQyxpREFBSTtBQUN2Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0RBQWtELGlEQUFJO0FBQ3REOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcz9kMDBjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge29iamVjdFtdfSBzaWJsaW5nc1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgsIHNpYmxpbmdzKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJywgc2libGluZ3M6IHNpYmxpbmdzfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDAsIHJvb3Quc2libGluZ3MpLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlmdCAocm9vdCkge1xuXHR3aGlsZSAocm9vdC5yb290KVxuXHRcdHJvb3QgPSBjb3B5KHJvb3Qucm9vdCwge2NoaWxkcmVuOiBbcm9vdF19KVxuXG5cdGFwcGVuZChyb290LCByb290LnNpYmxpbmdzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/stylis/src/Tokenizer.js\n"); /***/ }), /***/ "../../../node_modules/stylis/src/Utility.js": /*!***************************************************!*\ !*** ../../../node_modules/stylis/src/Utility.js ***! \***************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"abs\": () => (/* binding */ abs),\n/* harmony export */ \"append\": () => (/* binding */ append),\n/* harmony export */ \"assign\": () => (/* binding */ assign),\n/* harmony export */ \"charat\": () => (/* binding */ charat),\n/* harmony export */ \"combine\": () => (/* binding */ combine),\n/* harmony export */ \"filter\": () => (/* binding */ filter),\n/* harmony export */ \"from\": () => (/* binding */ from),\n/* harmony export */ \"hash\": () => (/* binding */ hash),\n/* harmony export */ \"indexof\": () => (/* binding */ indexof),\n/* harmony export */ \"match\": () => (/* binding */ match),\n/* harmony export */ \"replace\": () => (/* binding */ replace),\n/* harmony export */ \"sizeof\": () => (/* binding */ sizeof),\n/* harmony export */ \"strlen\": () => (/* binding */ strlen),\n/* harmony export */ \"substr\": () => (/* binding */ substr),\n/* harmony export */ \"trim\": () => (/* binding */ trim)\n/* harmony export */ });\n/**\n * @param {number}\n * @return {number}\n */\nvar abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nvar from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nvar assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nfunction hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nfunction trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nfunction match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nfunction replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nfunction indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nfunction charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nfunction strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nfunction sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nfunction append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nfunction combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nfunction filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFdBQVc7QUFDWCxZQUFZO0FBQ1o7QUFDTzs7QUFFUDtBQUNBLFdBQVc7QUFDWCxZQUFZO0FBQ1o7QUFDTzs7QUFFUDtBQUNBLFdBQVc7QUFDWCxZQUFZO0FBQ1o7QUFDTzs7QUFFUDtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDTztBQUNQLHdDQUF3QywrQkFBK0I7QUFDdkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcz84MTc3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyIChhcnJheSwgcGF0dGVybikge1xuXHRyZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gIW1hdGNoKHZhbHVlLCBwYXR0ZXJuKSB9KVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/stylis/src/Utility.js\n"); /***/ }), /***/ "../../../node_modules/unist-util-stringify-position/lib/index.js": /*!************************************************************************!*\ !*** ../../../node_modules/unist-util-stringify-position/lib/index.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"stringifyPosition\": () => (/* binding */ stringifyPosition)\n/* harmony export */ });\n/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nfunction stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQyxhQUFhLHVCQUF1QjtBQUNwQyxhQUFhLDBCQUEwQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsaUNBQWlDO0FBQy9DO0FBQ0E7QUFDQSxjQUFjLDhCQUE4QjtBQUM1QyxjQUFjLDhCQUE4QjtBQUM1QztBQUNBO0FBQ0EsY0FBYywyQkFBMkI7QUFDekMsY0FBYywyQkFBMkI7QUFDekMsY0FBYywyQkFBMkI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtGQUFrRjtBQUM3RjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHNDQUFzQztBQUNqRCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLDRDQUE0QztBQUN2RCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcz81YzA3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Ob2RlfSBOb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb3NpdGlvbn0gUG9zaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE5vZGVMaWtlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICogQHByb3BlcnR5IHtQb3NpdGlvbkxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbcG9zaXRpb25dXG4gKlxuICogQHR5cGVkZWYgUG9zaXRpb25MaWtlXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IFtzdGFydF1cbiAqIEBwcm9wZXJ0eSB7UG9pbnRMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZF1cbiAqXG4gKiBAdHlwZWRlZiBQb2ludExpa2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2xpbmVdXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtjb2x1bW5dXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtvZmZzZXRdXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBvc2l0aW9uYWwgaW5mbyBvZiBhIHBvaW50LCBwb3NpdGlvbiAoc3RhcnQgYW5kIGVuZCBwb2ludHMpLFxuICogb3Igbm9kZS5cbiAqXG4gKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IFBvc2l0aW9uIHwgUG9zaXRpb25MaWtlIHwgUG9pbnQgfCBQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbdmFsdWVdXG4gKiAgIE5vZGUsIHBvc2l0aW9uLCBvciBwb2ludC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFByZXR0eSBwcmludGVkIHBvc2l0aW9uYWwgaW5mbyBvZiBhIG5vZGUgKGBzdHJpbmdgKS5cbiAqXG4gKiAgIEluIHRoZSBmb3JtYXQgb2YgYSByYW5nZSBgbHM6Y3MtbGU6Y2VgICh3aGVuIGdpdmVuIGBub2RlYCBvciBgcG9zaXRpb25gKVxuICogICBvciBhIHBvaW50IGBsOmNgICh3aGVuIGdpdmVuIGBwb2ludGApLCB3aGVyZSBgbGAgc3RhbmRzIGZvciBsaW5lLCBgY2AgZm9yXG4gKiAgIGNvbHVtbiwgYHNgIGZvciBgc3RhcnRgLCBhbmQgYGVgIGZvciBlbmQuXG4gKiAgIEFuIGVtcHR5IHN0cmluZyAoYCcnYCkgaXMgcmV0dXJuZWQgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5laXRoZXIgYG5vZGVgLFxuICogICBgcG9zaXRpb25gLCBub3IgYHBvaW50YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVBvc2l0aW9uKHZhbHVlKSB7XG4gIC8vIE5vdGhpbmcuXG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gTm9kZS5cbiAgaWYgKCdwb3NpdGlvbicgaW4gdmFsdWUgfHwgJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlLnBvc2l0aW9uKVxuICB9XG5cbiAgLy8gUG9zaXRpb24uXG4gIGlmICgnc3RhcnQnIGluIHZhbHVlIHx8ICdlbmQnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlKVxuICB9XG5cbiAgLy8gUG9pbnQuXG4gIGlmICgnbGluZScgaW4gdmFsdWUgfHwgJ2NvbHVtbicgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gcG9pbnQodmFsdWUpXG4gIH1cblxuICAvLyA/XG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UG9pbnQgfCBQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwb2ludFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcG9pbnQocG9pbnQpIHtcbiAgcmV0dXJuIGluZGV4KHBvaW50ICYmIHBvaW50LmxpbmUpICsgJzonICsgaW5kZXgocG9pbnQgJiYgcG9pbnQuY29sdW1uKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UG9zaXRpb24gfCBQb3NpdGlvbkxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwb3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBvc2l0aW9uKHBvcykge1xuICByZXR1cm4gcG9pbnQocG9zICYmIHBvcy5zdGFydCkgKyAnLScgKyBwb2ludChwb3MgJiYgcG9zLmVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBpbmRleCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogMVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/unist-util-stringify-position/lib/index.js\n"); /***/ }), /***/ "../../../node_modules/uvu/assert/index.mjs": /*!**************************************************!*\ !*** ../../../node_modules/uvu/assert/index.mjs ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Assertion\": () => (/* binding */ Assertion),\n/* harmony export */ \"equal\": () => (/* binding */ equal),\n/* harmony export */ \"fixture\": () => (/* binding */ fixture),\n/* harmony export */ \"instance\": () => (/* binding */ instance),\n/* harmony export */ \"is\": () => (/* binding */ is),\n/* harmony export */ \"match\": () => (/* binding */ match),\n/* harmony export */ \"not\": () => (/* binding */ not),\n/* harmony export */ \"ok\": () => (/* binding */ ok),\n/* harmony export */ \"snapshot\": () => (/* binding */ snapshot),\n/* harmony export */ \"throws\": () => (/* binding */ throws),\n/* harmony export */ \"type\": () => (/* binding */ type),\n/* harmony export */ \"unreachable\": () => (/* binding */ unreachable)\n/* harmony export */ });\n/* harmony import */ var dequal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dequal */ \"../../../node_modules/dequal/dist/index.mjs\");\n/* harmony import */ var uvu_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uvu/diff */ \"../../../node_modules/uvu/diff/index.mjs\");\n\n\n\nfunction dedent(str) {\n\tstr = str.replace(/\\r?\\n/g, '\\n');\n let arr = str.match(/^[ \\t]*(?=\\S)/gm);\n let i = 0, min = 1/0, len = (arr||[]).length;\n for (; i < len; i++) min = Math.min(min, arr[i].length);\n return len && min ? str.replace(new RegExp(`^[ \\\\t]{${min}}`, 'gm'), '') : str;\n}\n\nclass Assertion extends Error {\n\tconstructor(opts={}) {\n\t\tsuper(opts.message);\n\t\tthis.name = 'Assertion';\n\t\tthis.code = 'ERR_ASSERTION';\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, this.constructor);\n\t\t}\n\t\tthis.details = opts.details || false;\n\t\tthis.generated = !!opts.generated;\n\t\tthis.operator = opts.operator;\n\t\tthis.expects = opts.expects;\n\t\tthis.actual = opts.actual;\n\t}\n}\n\nfunction assert(bool, actual, expects, operator, detailer, backup, msg) {\n\tif (bool) return;\n\tlet message = msg || backup;\n\tif (msg instanceof Error) throw msg;\n\tlet details = detailer && detailer(actual, expects);\n\tthrow new Assertion({ actual, expects, operator, message, details, generated: !msg });\n}\n\nfunction ok(val, msg) {\n\tassert(!!val, false, true, 'ok', false, 'Expected value to be truthy', msg);\n}\n\nfunction is(val, exp, msg) {\n\tassert(val === exp, val, exp, 'is', uvu_diff__WEBPACK_IMPORTED_MODULE_1__.compare, 'Expected values to be strictly equal:', msg);\n}\n\nfunction equal(val, exp, msg) {\n\tassert((0,dequal__WEBPACK_IMPORTED_MODULE_0__.dequal)(val, exp), val, exp, 'equal', uvu_diff__WEBPACK_IMPORTED_MODULE_1__.compare, 'Expected values to be deeply equal:', msg);\n}\n\nfunction unreachable(msg) {\n\tassert(false, true, false, 'unreachable', false, 'Expected not to be reached!', msg);\n}\n\nfunction type(val, exp, msg) {\n\tlet tmp = typeof val;\n\tassert(tmp === exp, tmp, exp, 'type', false, `Expected \"${tmp}\" to be \"${exp}\"`, msg);\n}\n\nfunction instance(val, exp, msg) {\n\tlet name = '`' + (exp.name || exp.constructor.name) + '`';\n\tassert(val instanceof exp, val, exp, 'instance', false, `Expected value to be an instance of ${name}`, msg);\n}\n\nfunction match(val, exp, msg) {\n\tif (typeof exp === 'string') {\n\t\tassert(val.includes(exp), val, exp, 'match', false, `Expected value to include \"${exp}\" substring`, msg);\n\t} else {\n\t\tassert(exp.test(val), val, exp, 'match', false, `Expected value to match \\`${String(exp)}\\` pattern`, msg);\n\t}\n}\n\nfunction snapshot(val, exp, msg) {\n\tval=dedent(val); exp=dedent(exp);\n\tassert(val === exp, val, exp, 'snapshot', uvu_diff__WEBPACK_IMPORTED_MODULE_1__.lines, 'Expected value to match snapshot:', msg);\n}\n\nconst lineNums = (x, y) => (0,uvu_diff__WEBPACK_IMPORTED_MODULE_1__.lines)(x, y, 1);\nfunction fixture(val, exp, msg) {\n\tval=dedent(val); exp=dedent(exp);\n\tassert(val === exp, val, exp, 'fixture', lineNums, 'Expected value to match fixture:', msg);\n}\n\nfunction throws(blk, exp, msg) {\n\tif (!msg && typeof exp === 'string') {\n\t\tmsg = exp; exp = null;\n\t}\n\n\ttry {\n\t\tblk();\n\t\tassert(false, false, true, 'throws', false, 'Expected function to throw', msg);\n\t} catch (err) {\n\t\tif (err instanceof Assertion) throw err;\n\n\t\tif (typeof exp === 'function') {\n\t\t\tassert(exp(err), false, true, 'throws', false, 'Expected function to throw matching exception', msg);\n\t\t} else if (exp instanceof RegExp) {\n\t\t\tassert(exp.test(err.message), false, true, 'throws', false, `Expected function to throw exception matching \\`${String(exp)}\\` pattern`, msg);\n\t\t}\n\t}\n}\n\n// ---\n\nfunction not(val, msg) {\n\tassert(!val, true, false, 'not', false, 'Expected value to be falsey', msg);\n}\n\nnot.ok = not;\n\nis.not = function (val, exp, msg) {\n\tassert(val !== exp, val, exp, 'is.not', false, 'Expected values not to be strictly equal', msg);\n}\n\nnot.equal = function (val, exp, msg) {\n\tassert(!(0,dequal__WEBPACK_IMPORTED_MODULE_0__.dequal)(val, exp), val, exp, 'not.equal', false, 'Expected values not to be deeply equal', msg);\n}\n\nnot.type = function (val, exp, msg) {\n\tlet tmp = typeof val;\n\tassert(tmp !== exp, tmp, exp, 'not.type', false, `Expected \"${tmp}\" not to be \"${exp}\"`, msg);\n}\n\nnot.instance = function (val, exp, msg) {\n\tlet name = '`' + (exp.name || exp.constructor.name) + '`';\n\tassert(!(val instanceof exp), val, exp, 'not.instance', false, `Expected value not to be an instance of ${name}`, msg);\n}\n\nnot.snapshot = function (val, exp, msg) {\n\tval=dedent(val); exp=dedent(exp);\n\tassert(val !== exp, val, exp, 'not.snapshot', false, 'Expected value not to match snapshot', msg);\n}\n\nnot.fixture = function (val, exp, msg) {\n\tval=dedent(val); exp=dedent(exp);\n\tassert(val !== exp, val, exp, 'not.fixture', false, 'Expected value not to match fixture', msg);\n}\n\nnot.match = function (val, exp, msg) {\n\tif (typeof exp === 'string') {\n\t\tassert(!val.includes(exp), val, exp, 'not.match', false, `Expected value not to include \"${exp}\" substring`, msg);\n\t} else {\n\t\tassert(!exp.test(val), val, exp, 'not.match', false, `Expected value not to match \\`${String(exp)}\\` pattern`, msg);\n\t}\n}\n\nnot.throws = function (blk, exp, msg) {\n\tif (!msg && typeof exp === 'string') {\n\t\tmsg = exp; exp = null;\n\t}\n\n\ttry {\n\t\tblk();\n\t} catch (err) {\n\t\tif (typeof exp === 'function') {\n\t\t\tassert(!exp(err), true, false, 'not.throws', false, 'Expected function not to throw matching exception', msg);\n\t\t} else if (exp instanceof RegExp) {\n\t\t\tassert(!exp.test(err.message), true, false, 'not.throws', false, `Expected function not to throw exception matching \\`${String(exp)}\\` pattern`, msg);\n\t\t} else if (!exp) {\n\t\t\tassert(false, true, false, 'not.throws', false, 'Expected function not to throw', msg);\n\t\t}\n\t}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V2dS9hc3NlcnQvaW5kZXgubWpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWdDO0FBQ1U7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCLHNEQUFzRCxFQUFFLEtBQUs7QUFDN0Q7O0FBRU87QUFDUCxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw4REFBOEQ7QUFDckY7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1AscUNBQXFDLDZDQUFPO0FBQzVDOztBQUVPO0FBQ1AsUUFBUSw4Q0FBTSwrQkFBK0IsNkNBQU87QUFDcEQ7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQSwyREFBMkQsSUFBSSxXQUFXLElBQUk7QUFDOUU7O0FBRU87QUFDUDtBQUNBLGdHQUFnRyxLQUFLO0FBQ3JHOztBQUVPO0FBQ1A7QUFDQSxvRkFBb0YsSUFBSTtBQUN4RixHQUFHO0FBQ0gsK0VBQStFLFlBQVk7QUFDM0Y7QUFDQTs7QUFFTztBQUNQLGtCQUFrQjtBQUNsQiwyQ0FBMkMsMkNBQUs7QUFDaEQ7O0FBRUEsMkJBQTJCLCtDQUFLO0FBQ3pCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixrSEFBa0gsWUFBWTtBQUM5SDtBQUNBO0FBQ0E7O0FBRUE7O0FBRU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsOENBQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0EsK0RBQStELElBQUksZUFBZSxJQUFJO0FBQ3RGOztBQUVBO0FBQ0E7QUFDQSwyR0FBMkcsS0FBSztBQUNoSDs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZGQUE2RixJQUFJO0FBQ2pHLEdBQUc7QUFDSCx3RkFBd0YsWUFBWTtBQUNwRztBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKLDJIQUEySCxZQUFZO0FBQ3ZJLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXZ1L2Fzc2VydC9pbmRleC5tanM/NWVmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXF1YWzCoH0gZnJvbSAnZGVxdWFsJztcbmltcG9ydCB7IGNvbXBhcmUsIGxpbmVzIH0gZnJvbSAndXZ1L2RpZmYnO1xuXG5mdW5jdGlvbiBkZWRlbnQoc3RyKSB7XG5cdHN0ciA9IHN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICdcXG4nKTtcbiAgbGV0IGFyciA9IHN0ci5tYXRjaCgvXlsgXFx0XSooPz1cXFMpL2dtKTtcbiAgbGV0IGkgPSAwLCBtaW4gPSAxLzAsIGxlbiA9IChhcnJ8fFtdKS5sZW5ndGg7XG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIG1pbiA9IE1hdGgubWluKG1pbiwgYXJyW2ldLmxlbmd0aCk7XG4gIHJldHVybiBsZW4gJiYgbWluID8gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChgXlsgXFxcXHRdeyR7bWlufX1gLCAnZ20nKSwgJycpIDogc3RyO1xufVxuXG5leHBvcnQgY2xhc3MgQXNzZXJ0aW9uIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG5cdFx0c3VwZXIob3B0cy5tZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uJztcblx0XHR0aGlzLmNvZGUgPSAnRVJSX0FTU0VSVElPTic7XG5cdFx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG5cdFx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcblx0XHR9XG5cdFx0dGhpcy5kZXRhaWxzID0gb3B0cy5kZXRhaWxzIHx8IGZhbHNlO1xuXHRcdHRoaXMuZ2VuZXJhdGVkID0gISFvcHRzLmdlbmVyYXRlZDtcblx0XHR0aGlzLm9wZXJhdG9yID0gb3B0cy5vcGVyYXRvcjtcblx0XHR0aGlzLmV4cGVjdHMgPSBvcHRzLmV4cGVjdHM7XG5cdFx0dGhpcy5hY3R1YWwgPSBvcHRzLmFjdHVhbDtcblx0fVxufVxuXG5mdW5jdGlvbiBhc3NlcnQoYm9vbCwgYWN0dWFsLCBleHBlY3RzLCBvcGVyYXRvciwgZGV0YWlsZXIsIGJhY2t1cCwgbXNnKSB7XG5cdGlmIChib29sKSByZXR1cm47XG5cdGxldCBtZXNzYWdlID0gbXNnIHx8IGJhY2t1cDtcblx0aWYgKG1zZyBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBtc2c7XG5cdGxldCBkZXRhaWxzID0gZGV0YWlsZXIgJiYgZGV0YWlsZXIoYWN0dWFsLCBleHBlY3RzKTtcblx0dGhyb3cgbmV3IEFzc2VydGlvbih7IGFjdHVhbCwgZXhwZWN0cywgb3BlcmF0b3IsIG1lc3NhZ2UsIGRldGFpbHMsIGdlbmVyYXRlZDogIW1zZyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9rKHZhbCwgbXNnKSB7XG5cdGFzc2VydCghIXZhbCwgZmFsc2UsIHRydWUsICdvaycsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgdHJ1dGh5JywgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzKHZhbCwgZXhwLCBtc2cpIHtcblx0YXNzZXJ0KHZhbCA9PT0gZXhwLCB2YWwsIGV4cCwgJ2lzJywgY29tcGFyZSwgJ0V4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDonLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWwodmFsLCBleHAsIG1zZykge1xuXHRhc3NlcnQoZGVxdWFsKHZhbCwgZXhwKSwgdmFsLCBleHAsICdlcXVhbCcsIGNvbXBhcmUsICdFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgZGVlcGx5IGVxdWFsOicsIG1zZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcblx0YXNzZXJ0KGZhbHNlLCB0cnVlLCBmYWxzZSwgJ3VucmVhY2hhYmxlJywgZmFsc2UsICdFeHBlY3RlZCBub3QgdG8gYmUgcmVhY2hlZCEnLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZSh2YWwsIGV4cCwgbXNnKSB7XG5cdGxldCB0bXAgPSB0eXBlb2YgdmFsO1xuXHRhc3NlcnQodG1wID09PSBleHAsIHRtcCwgZXhwLCAndHlwZScsIGZhbHNlLCBgRXhwZWN0ZWQgXCIke3RtcH1cIiB0byBiZSBcIiR7ZXhwfVwiYCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlKHZhbCwgZXhwLCBtc2cpIHtcblx0bGV0IG5hbWUgPSAnYCcgKyAoZXhwLm5hbWUgfHwgZXhwLmNvbnN0cnVjdG9yLm5hbWUpICsgJ2AnO1xuXHRhc3NlcnQodmFsIGluc3RhbmNlb2YgZXhwLCB2YWwsIGV4cCwgJ2luc3RhbmNlJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBvZiAke25hbWV9YCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKHZhbCwgZXhwLCBtc2cpIHtcblx0aWYgKHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0KHZhbC5pbmNsdWRlcyhleHApLCB2YWwsIGV4cCwgJ21hdGNoJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSB0byBpbmNsdWRlIFwiJHtleHB9XCIgc3Vic3RyaW5nYCwgbXNnKTtcblx0fSBlbHNlIHtcblx0XHRhc3NlcnQoZXhwLnRlc3QodmFsKSwgdmFsLCBleHAsICdtYXRjaCcsIGZhbHNlLCBgRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNuYXBzaG90KHZhbCwgZXhwLCBtc2cpIHtcblx0dmFsPWRlZGVudCh2YWwpOyBleHA9ZGVkZW50KGV4cCk7XG5cdGFzc2VydCh2YWwgPT09IGV4cCwgdmFsLCBleHAsICdzbmFwc2hvdCcsIGxpbmVzLCAnRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggc25hcHNob3Q6JywgbXNnKTtcbn1cblxuY29uc3QgbGluZU51bXMgPSAoeCwgeSkgPT4gbGluZXMoeCwgeSwgMSk7XG5leHBvcnQgZnVuY3Rpb24gZml4dHVyZSh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsID09PSBleHAsIHZhbCwgZXhwLCAnZml4dHVyZScsIGxpbmVOdW1zLCAnRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggZml4dHVyZTonLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dzKGJsaywgZXhwLCBtc2cpIHtcblx0aWYgKCFtc2cgJiYgdHlwZW9mIGV4cCA9PT0gJ3N0cmluZycpIHtcblx0XHRtc2cgPSBleHA7IGV4cCA9IG51bGw7XG5cdH1cblxuXHR0cnkge1xuXHRcdGJsaygpO1xuXHRcdGFzc2VydChmYWxzZSwgZmFsc2UsIHRydWUsICd0aHJvd3MnLCBmYWxzZSwgJ0V4cGVjdGVkIGZ1bmN0aW9uIHRvIHRocm93JywgbXNnKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIEFzc2VydGlvbikgdGhyb3cgZXJyO1xuXG5cdFx0aWYgKHR5cGVvZiBleHAgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGFzc2VydChleHAoZXJyKSwgZmFsc2UsIHRydWUsICd0aHJvd3MnLCBmYWxzZSwgJ0V4cGVjdGVkIGZ1bmN0aW9uIHRvIHRocm93IG1hdGNoaW5nIGV4Y2VwdGlvbicsIG1zZyk7XG5cdFx0fSBlbHNlIGlmIChleHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdGFzc2VydChleHAudGVzdChlcnIubWVzc2FnZSksIGZhbHNlLCB0cnVlLCAndGhyb3dzJywgZmFsc2UsIGBFeHBlY3RlZCBmdW5jdGlvbiB0byB0aHJvdyBleGNlcHRpb24gbWF0Y2hpbmcgXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdFx0fVxuXHR9XG59XG5cbi8vIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gbm90KHZhbCwgbXNnKSB7XG5cdGFzc2VydCghdmFsLCB0cnVlLCBmYWxzZSwgJ25vdCcsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgZmFsc2V5JywgbXNnKTtcbn1cblxubm90Lm9rID0gbm90O1xuXG5pcy5ub3QgPSBmdW5jdGlvbiAodmFsLCBleHAsIG1zZykge1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnaXMubm90JywgZmFsc2UsICdFeHBlY3RlZCB2YWx1ZXMgbm90IHRvIGJlIHN0cmljdGx5IGVxdWFsJywgbXNnKTtcbn1cblxubm90LmVxdWFsID0gZnVuY3Rpb24gKHZhbCwgZXhwLCBtc2cpIHtcblx0YXNzZXJ0KCFkZXF1YWwodmFsLCBleHApLCB2YWwsIGV4cCwgJ25vdC5lcXVhbCcsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWVzIG5vdCB0byBiZSBkZWVwbHkgZXF1YWwnLCBtc2cpO1xufVxuXG5ub3QudHlwZSA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdGxldCB0bXAgPSB0eXBlb2YgdmFsO1xuXHRhc3NlcnQodG1wICE9PSBleHAsIHRtcCwgZXhwLCAnbm90LnR5cGUnLCBmYWxzZSwgYEV4cGVjdGVkIFwiJHt0bXB9XCIgbm90IHRvIGJlIFwiJHtleHB9XCJgLCBtc2cpO1xufVxuXG5ub3QuaW5zdGFuY2UgPSBmdW5jdGlvbiAodmFsLCBleHAsIG1zZykge1xuXHRsZXQgbmFtZSA9ICdgJyArIChleHAubmFtZSB8fCBleHAuY29uc3RydWN0b3IubmFtZSkgKyAnYCc7XG5cdGFzc2VydCghKHZhbCBpbnN0YW5jZW9mIGV4cCksIHZhbCwgZXhwLCAnbm90Lmluc3RhbmNlJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSBub3QgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtuYW1lfWAsIG1zZyk7XG59XG5cbm5vdC5zbmFwc2hvdCA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnbm90LnNuYXBzaG90JywgZmFsc2UsICdFeHBlY3RlZCB2YWx1ZSBub3QgdG8gbWF0Y2ggc25hcHNob3QnLCBtc2cpO1xufVxuXG5ub3QuZml4dHVyZSA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnbm90LmZpeHR1cmUnLCBmYWxzZSwgJ0V4cGVjdGVkIHZhbHVlIG5vdCB0byBtYXRjaCBmaXh0dXJlJywgbXNnKTtcbn1cblxubm90Lm1hdGNoID0gZnVuY3Rpb24gKHZhbCwgZXhwLCBtc2cpIHtcblx0aWYgKHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0KCF2YWwuaW5jbHVkZXMoZXhwKSwgdmFsLCBleHAsICdub3QubWF0Y2gnLCBmYWxzZSwgYEV4cGVjdGVkIHZhbHVlIG5vdCB0byBpbmNsdWRlIFwiJHtleHB9XCIgc3Vic3RyaW5nYCwgbXNnKTtcblx0fSBlbHNlIHtcblx0XHRhc3NlcnQoIWV4cC50ZXN0KHZhbCksIHZhbCwgZXhwLCAnbm90Lm1hdGNoJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSBub3QgdG8gbWF0Y2ggXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdH1cbn1cblxubm90LnRocm93cyA9IGZ1bmN0aW9uIChibGssIGV4cCwgbXNnKSB7XG5cdGlmICghbXNnICYmIHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0bXNnID0gZXhwOyBleHAgPSBudWxsO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRibGsoKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKHR5cGVvZiBleHAgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGFzc2VydCghZXhwKGVyciksIHRydWUsIGZhbHNlLCAnbm90LnRocm93cycsIGZhbHNlLCAnRXhwZWN0ZWQgZnVuY3Rpb24gbm90IHRvIHRocm93IG1hdGNoaW5nIGV4Y2VwdGlvbicsIG1zZyk7XG5cdFx0fSBlbHNlIGlmIChleHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdGFzc2VydCghZXhwLnRlc3QoZXJyLm1lc3NhZ2UpLCB0cnVlLCBmYWxzZSwgJ25vdC50aHJvd3MnLCBmYWxzZSwgYEV4cGVjdGVkIGZ1bmN0aW9uIG5vdCB0byB0aHJvdyBleGNlcHRpb24gbWF0Y2hpbmcgXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdFx0fSBlbHNlIGlmICghZXhwKSB7XG5cdFx0XHRhc3NlcnQoZmFsc2UsIHRydWUsIGZhbHNlLCAnbm90LnRocm93cycsIGZhbHNlLCAnRXhwZWN0ZWQgZnVuY3Rpb24gbm90IHRvIHRocm93JywgbXNnKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/uvu/assert/index.mjs\n"); /***/ }), /***/ "../../../node_modules/uvu/diff/index.mjs": /*!************************************************!*\ !*** ../../../node_modules/uvu/diff/index.mjs ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"arrays\": () => (/* binding */ arrays),\n/* harmony export */ \"chars\": () => (/* binding */ chars),\n/* harmony export */ \"circular\": () => (/* binding */ circular),\n/* harmony export */ \"compare\": () => (/* binding */ compare),\n/* harmony export */ \"direct\": () => (/* binding */ direct),\n/* harmony export */ \"lines\": () => (/* binding */ lines),\n/* harmony export */ \"sort\": () => (/* binding */ sort),\n/* harmony export */ \"stringify\": () => (/* binding */ stringify)\n/* harmony export */ });\n/* harmony import */ var kleur__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kleur */ \"../../../node_modules/kleur/index.mjs\");\n/* harmony import */ var diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diff */ \"../../../node_modules/diff/lib/index.mjs\");\n\n\n\nconst colors = {\n\t'--': kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].red,\n\t'··': kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].grey,\n\t'++': kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].green,\n};\n\nconst TITLE = kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim().italic;\nconst TAB=kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim('→'), SPACE=kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim('·'), NL=kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim('↵');\nconst LOG = (sym, str) => colors[sym](sym + PRETTY(str)) + '\\n';\nconst LINE = (num, x) => kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim('L' + String(num).padStart(x, '0') + ' ');\nconst PRETTY = str => str.replace(/[ ]/g, SPACE).replace(/\\t/g, TAB).replace(/(\\r?\\n)/g, NL);\n\nfunction line(obj, prev, pad) {\n\tlet char = obj.removed ? '--' : obj.added ? '++' : '··';\n\tlet arr = obj.value.replace(/\\r?\\n$/, '').split('\\n');\n\tlet i=0, tmp, out='';\n\n\tif (obj.added) out += colors[char]().underline(TITLE('Expected:')) + '\\n';\n\telse if (obj.removed) out += colors[char]().underline(TITLE('Actual:')) + '\\n';\n\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tif (tmp != null) {\n\t\t\tif (prev) out += LINE(prev + i, pad);\n\t\t\tout += LOG(char, tmp || '\\n');\n\t\t}\n\t}\n\n\treturn out;\n}\n\n// TODO: want better diffing\n//~> complex items bail outright\nfunction arrays(input, expect) {\n\tlet arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffArrays(input, expect);\n\tlet i=0, j=0, k=0, tmp, val, char, isObj, str;\n\tlet out = LOG('··', '[');\n\n\tfor (; i < arr.length; i++) {\n\t\tchar = (tmp = arr[i]).removed ? '--' : tmp.added ? '++' : '··';\n\n\t\tif (tmp.added) {\n\t\t\tout += colors[char]().underline(TITLE('Expected:')) + '\\n';\n\t\t} else if (tmp.removed) {\n\t\t\tout += colors[char]().underline(TITLE('Actual:')) + '\\n';\n\t\t}\n\n\t\tfor (j=0; j < tmp.value.length; j++) {\n\t\t\tisObj = (tmp.value[j] && typeof tmp.value[j] === 'object');\n\t\t\tval = stringify(tmp.value[j]).split(/\\r?\\n/g);\n\t\t\tfor (k=0; k < val.length;) {\n\t\t\t\tstr = ' ' + val[k++] + (isObj ? '' : ',');\n\t\t\t\tif (isObj && k === val.length && (j + 1) < tmp.value.length) str += ',';\n\t\t\t\tout += LOG(char, str);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out + LOG('··', ']');\n}\n\nfunction lines(input, expect, linenum = 0) {\n\tlet i=0, tmp, output='';\n\tlet arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffLines(input, expect);\n\tlet pad = String(expect.split(/\\r?\\n/g).length - linenum).length;\n\n\tfor (; i < arr.length; i++) {\n\t\toutput += line(tmp = arr[i], linenum, pad);\n\t\tif (linenum && !tmp.removed) linenum += tmp.count;\n\t}\n\n\treturn output;\n}\n\nfunction chars(input, expect) {\n\tlet arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffChars(input, expect);\n\tlet i=0, output='', tmp;\n\n\tlet l1 = input.length;\n\tlet l2 = expect.length;\n\n\tlet p1 = PRETTY(input);\n\tlet p2 = PRETTY(expect);\n\n\ttmp = arr[i];\n\n\tif (l1 === l2) {\n\t\t// no length offsets\n\t} else if (tmp.removed && arr[i + 1]) {\n\t\tlet del = tmp.count - arr[i + 1].count;\n\t\tif (del == 0) {\n\t\t\t// wash~\n\t\t} else if (del > 0) {\n\t\t\texpect = ' '.repeat(del) + expect;\n\t\t\tp2 = ' '.repeat(del) + p2;\n\t\t\tl2 += del;\n\t\t} else if (del < 0) {\n\t\t\tinput = ' '.repeat(-del) + input;\n\t\t\tp1 = ' '.repeat(-del) + p1;\n\t\t\tl1 += -del;\n\t\t}\n\t}\n\n\toutput += direct(p1, p2, l1, l2);\n\n\tif (l1 === l2) {\n\t\tfor (tmp=' '; i < l1; i++) {\n\t\t\ttmp += input[i] === expect[i] ? ' ' : '^';\n\t\t}\n\t} else {\n\t\tfor (tmp=' '; i < arr.length; i++) {\n\t\t\ttmp += ((arr[i].added || arr[i].removed) ? '^' : ' ').repeat(Math.max(arr[i].count, 0));\n\t\t\tif (i + 1 < arr.length && ((arr[i].added && arr[i+1].removed) || (arr[i].removed && arr[i+1].added))) {\n\t\t\t\tarr[i + 1].count -= arr[i].count;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].red(tmp);\n}\n\nfunction direct(input, expect, lenA = String(input).length, lenB = String(expect).length) {\n\tlet gutter = 4;\n\tlet lenC = Math.max(lenA, lenB);\n\tlet typeA=typeof input, typeB=typeof expect;\n\n\tif (typeA !== typeB) {\n\t\tgutter = 2;\n\n\t\tlet delA = gutter + lenC - lenA;\n\t\tlet delB = gutter + lenC - lenB;\n\n\t\tinput += ' '.repeat(delA) + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(`[${typeA}]`);\n\t\texpect += ' '.repeat(delB) + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(`[${typeB}]`);\n\n\t\tlenA += delA + typeA.length + 2;\n\t\tlenB += delB + typeB.length + 2;\n\t\tlenC = Math.max(lenA, lenB);\n\t}\n\n\tlet output = colors['++']('++' + expect + ' '.repeat(gutter + lenC - lenB) + TITLE('(Expected)')) + '\\n';\n\treturn output + colors['--']('--' + input + ' '.repeat(gutter + lenC - lenA) + TITLE('(Actual)')) + '\\n';\n}\n\nfunction sort(input, expect) {\n\tvar k, i=0, tmp, isArr = Array.isArray(input);\n\tvar keys=[], out=isArr ? Array(input.length) : {};\n\n\tif (isArr) {\n\t\tfor (i=0; i < out.length; i++) {\n\t\t\ttmp = input[i];\n\t\t\tif (!tmp || typeof tmp !== 'object') out[i] = tmp;\n\t\t\telse out[i] = sort(tmp, expect[i]); // might not be right\n\t\t}\n\t} else {\n\t\tfor (k in expect)\n\t\t\tkeys.push(k);\n\n\t\tfor (; i < keys.length; i++) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(input, k = keys[i])) {\n\t\t\t\tif (!(tmp = input[k]) || typeof tmp !== 'object') out[k] = tmp;\n\t\t\t\telse out[k] = sort(tmp, expect[k]);\n\t\t\t}\n\t\t}\n\n\t\tfor (k in input) {\n\t\t\tif (!out.hasOwnProperty(k)) {\n\t\t\t\tout[k] = input[k]; // expect didnt have\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nfunction circular() {\n\tvar cache = new Set;\n\treturn function print(key, val) {\n\t\tif (val === void 0) return '[__VOID__]';\n\t\tif (typeof val === 'number' && val !== val) return '[__NAN__]';\n\t\tif (typeof val === 'bigint') return val.toString();\n\t\tif (!val || typeof val !== 'object') return val;\n\t\tif (cache.has(val)) return '[Circular]';\n\t\tcache.add(val); return val;\n\t}\n}\n\nfunction stringify(input) {\n\treturn JSON.stringify(input, circular(), 2).replace(/\"\\[__NAN__\\]\"/g, 'NaN').replace(/\"\\[__VOID__\\]\"/g, 'undefined');\n}\n\nfunction compare(input, expect) {\n\tif (Array.isArray(expect) && Array.isArray(input)) return arrays(input, expect);\n\tif (expect instanceof RegExp) return chars(''+input, ''+expect);\n\n\tlet isA = input && typeof input == 'object';\n\tlet isB = expect && typeof expect == 'object';\n\n\tif (isA && isB) input = sort(input, expect);\n\tif (isB) expect = stringify(expect);\n\tif (isA) input = stringify(input);\n\n\tif (expect && typeof expect == 'object') {\n\t\tinput = stringify(sort(input, expect));\n\t\texpect = stringify(expect);\n\t}\n\n\tisA = typeof input == 'string';\n\tisB = typeof expect == 'string';\n\n\tif (isA && /\\r?\\n/.test(input)) return lines(input, ''+expect);\n\tif (isB && /\\r?\\n/.test(expect)) return lines(''+input, expect);\n\tif (isA && isB) return chars(input, expect);\n\n\treturn direct(input, expect);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3V2dS9kaWZmL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTBCO0FBQ0c7O0FBRTdCO0FBQ0EsT0FBTyxpREFBUztBQUNoQixPQUFPLGtEQUFVO0FBQ2pCLE9BQU8sbURBQVc7QUFDbEI7O0FBRUEsY0FBYyxpREFBUztBQUN2QixVQUFVLGlEQUFTLGFBQWEsaURBQVMsVUFBVSxpREFBUztBQUM1RDtBQUNBLHlCQUF5QixpREFBUztBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFFBQVEsZ0JBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQLFdBQVcsNENBQWU7QUFDMUI7QUFDQTs7QUFFQSxRQUFRLGdCQUFnQjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0EsV0FBVywyQ0FBYztBQUN6Qjs7QUFFQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQLFdBQVcsMkNBQWM7QUFDekI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBLEdBQUc7QUFDSCxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsaURBQVM7QUFDMUI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhCQUE4QixpREFBUyxLQUFLLE1BQU07QUFDbEQsK0JBQStCLGlEQUFTLEtBQUssTUFBTTs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxTQUFTLGlCQUFpQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXZ1L2RpZmYvaW5kZXgubWpzPzQwYTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGtsZXVyIGZyb20gJ2tsZXVyJztcbmltcG9ydCAqIGFzIGRpZmYgZnJvbSAnZGlmZic7XG5cbmNvbnN0IGNvbG9ycyA9IHtcblx0Jy0tJzoga2xldXIucmVkLFxuXHQnwrfCtyc6IGtsZXVyLmdyZXksXG5cdCcrKyc6IGtsZXVyLmdyZWVuLFxufTtcblxuY29uc3QgVElUTEUgPSBrbGV1ci5kaW0oKS5pdGFsaWM7XG5jb25zdCBUQUI9a2xldXIuZGltKCfihpInKSwgU1BBQ0U9a2xldXIuZGltKCfCtycpLCBOTD1rbGV1ci5kaW0oJ+KGtScpO1xuY29uc3QgTE9HID0gKHN5bSwgc3RyKSA9PiBjb2xvcnNbc3ltXShzeW0gKyBQUkVUVFkoc3RyKSkgKyAnXFxuJztcbmNvbnN0IExJTkUgPSAobnVtLCB4KSA9PiBrbGV1ci5kaW0oJ0wnICsgU3RyaW5nKG51bSkucGFkU3RhcnQoeCwgJzAnKSArICcgJyk7XG5jb25zdCBQUkVUVFkgPSBzdHIgPT4gc3RyLnJlcGxhY2UoL1sgXS9nLCBTUEFDRSkucmVwbGFjZSgvXFx0L2csIFRBQikucmVwbGFjZSgvKFxccj9cXG4pL2csIE5MKTtcblxuZnVuY3Rpb24gbGluZShvYmosIHByZXYsIHBhZCkge1xuXHRsZXQgY2hhciA9IG9iai5yZW1vdmVkID8gJy0tJyA6IG9iai5hZGRlZCA/ICcrKycgOiAnwrfCtyc7XG5cdGxldCBhcnIgPSBvYmoudmFsdWUucmVwbGFjZSgvXFxyP1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuXHRsZXQgaT0wLCB0bXAsIG91dD0nJztcblxuXHRpZiAob2JqLmFkZGVkKSBvdXQgKz0gY29sb3JzW2NoYXJdKCkudW5kZXJsaW5lKFRJVExFKCdFeHBlY3RlZDonKSkgKyAnXFxuJztcblx0ZWxzZSBpZiAob2JqLnJlbW92ZWQpIG91dCArPSBjb2xvcnNbY2hhcl0oKS51bmRlcmxpbmUoVElUTEUoJ0FjdHVhbDonKSkgKyAnXFxuJztcblxuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdHRtcCA9IGFycltpXTtcblx0XHRpZiAodG1wICE9IG51bGwpIHtcblx0XHRcdGlmIChwcmV2KSBvdXQgKz0gTElORShwcmV2ICsgaSwgcGFkKTtcblx0XHRcdG91dCArPSBMT0coY2hhciwgdG1wIHx8ICdcXG4nKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0O1xufVxuXG4vLyBUT0RPOiB3YW50IGJldHRlciBkaWZmaW5nXG4vL34+IGNvbXBsZXggaXRlbXMgYmFpbCBvdXRyaWdodFxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5cyhpbnB1dCwgZXhwZWN0KSB7XG5cdGxldCBhcnIgPSBkaWZmLmRpZmZBcnJheXMoaW5wdXQsIGV4cGVjdCk7XG5cdGxldCBpPTAsIGo9MCwgaz0wLCB0bXAsIHZhbCwgY2hhciwgaXNPYmosIHN0cjtcblx0bGV0IG91dCA9IExPRygnwrfCtycsICdbJyk7XG5cblx0Zm9yICg7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0XHRjaGFyID0gKHRtcCA9IGFycltpXSkucmVtb3ZlZCA/ICctLScgOiB0bXAuYWRkZWQgPyAnKysnIDogJ8K3wrcnO1xuXG5cdFx0aWYgKHRtcC5hZGRlZCkge1xuXHRcdFx0b3V0ICs9IGNvbG9yc1tjaGFyXSgpLnVuZGVybGluZShUSVRMRSgnRXhwZWN0ZWQ6JykpICsgJ1xcbic7XG5cdFx0fSBlbHNlIGlmICh0bXAucmVtb3ZlZCkge1xuXHRcdFx0b3V0ICs9IGNvbG9yc1tjaGFyXSgpLnVuZGVybGluZShUSVRMRSgnQWN0dWFsOicpKSArICdcXG4nO1xuXHRcdH1cblxuXHRcdGZvciAoaj0wOyBqIDwgdG1wLnZhbHVlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpc09iaiA9ICh0bXAudmFsdWVbal0gJiYgdHlwZW9mIHRtcC52YWx1ZVtqXSA9PT0gJ29iamVjdCcpO1xuXHRcdFx0dmFsID0gc3RyaW5naWZ5KHRtcC52YWx1ZVtqXSkuc3BsaXQoL1xccj9cXG4vZyk7XG5cdFx0XHRmb3IgKGs9MDsgayA8IHZhbC5sZW5ndGg7KSB7XG5cdFx0XHRcdHN0ciA9ICcgICcgKyB2YWxbaysrXSArIChpc09iaiA/ICcnIDogJywnKTtcblx0XHRcdFx0aWYgKGlzT2JqICYmIGsgPT09IHZhbC5sZW5ndGggJiYgKGogKyAxKSA8IHRtcC52YWx1ZS5sZW5ndGgpIHN0ciArPSAnLCc7XG5cdFx0XHRcdG91dCArPSBMT0coY2hhciwgc3RyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0ICsgTE9HKCfCt8K3JywgJ10nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVzKGlucHV0LCBleHBlY3QsIGxpbmVudW0gPSAwKSB7XG5cdGxldCBpPTAsIHRtcCwgb3V0cHV0PScnO1xuXHRsZXQgYXJyID0gZGlmZi5kaWZmTGluZXMoaW5wdXQsIGV4cGVjdCk7XG5cdGxldCBwYWQgPSBTdHJpbmcoZXhwZWN0LnNwbGl0KC9cXHI/XFxuL2cpLmxlbmd0aCAtIGxpbmVudW0pLmxlbmd0aDtcblxuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdG91dHB1dCArPSBsaW5lKHRtcCA9IGFycltpXSwgbGluZW51bSwgcGFkKTtcblx0XHRpZiAobGluZW51bSAmJiAhdG1wLnJlbW92ZWQpIGxpbmVudW0gKz0gdG1wLmNvdW50O1xuXHR9XG5cblx0cmV0dXJuIG91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJzKGlucHV0LCBleHBlY3QpIHtcblx0bGV0IGFyciA9IGRpZmYuZGlmZkNoYXJzKGlucHV0LCBleHBlY3QpO1xuXHRsZXQgaT0wLCBvdXRwdXQ9JycsIHRtcDtcblxuXHRsZXQgbDEgPSBpbnB1dC5sZW5ndGg7XG5cdGxldCBsMiA9IGV4cGVjdC5sZW5ndGg7XG5cblx0bGV0IHAxID0gUFJFVFRZKGlucHV0KTtcblx0bGV0IHAyID0gUFJFVFRZKGV4cGVjdCk7XG5cblx0dG1wID0gYXJyW2ldO1xuXG5cdGlmIChsMSA9PT0gbDIpIHtcblx0XHQvLyBubyBsZW5ndGggb2Zmc2V0c1xuXHR9IGVsc2UgaWYgKHRtcC5yZW1vdmVkICYmIGFycltpICsgMV0pIHtcblx0XHRsZXQgZGVsID0gdG1wLmNvdW50IC0gYXJyW2kgKyAxXS5jb3VudDtcblx0XHRpZiAoZGVsID09IDApIHtcblx0XHRcdC8vIHdhc2h+XG5cdFx0fSBlbHNlIGlmIChkZWwgPiAwKSB7XG5cdFx0XHRleHBlY3QgPSAnICcucmVwZWF0KGRlbCkgKyBleHBlY3Q7XG5cdFx0XHRwMiA9ICcgJy5yZXBlYXQoZGVsKSArIHAyO1xuXHRcdFx0bDIgKz0gZGVsO1xuXHRcdH0gZWxzZSBpZiAoZGVsIDwgMCkge1xuXHRcdFx0aW5wdXQgPSAnICcucmVwZWF0KC1kZWwpICsgaW5wdXQ7XG5cdFx0XHRwMSA9ICcgJy5yZXBlYXQoLWRlbCkgKyBwMTtcblx0XHRcdGwxICs9IC1kZWw7XG5cdFx0fVxuXHR9XG5cblx0b3V0cHV0ICs9IGRpcmVjdChwMSwgcDIsIGwxLCBsMik7XG5cblx0aWYgKGwxID09PSBsMikge1xuXHRcdGZvciAodG1wPScgICc7IGkgPCBsMTsgaSsrKSB7XG5cdFx0XHR0bXAgKz0gaW5wdXRbaV0gPT09IGV4cGVjdFtpXSA/ICcgJyA6ICdeJztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICh0bXA9JyAgJzsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0dG1wICs9ICgoYXJyW2ldLmFkZGVkIHx8IGFycltpXS5yZW1vdmVkKSA/ICdeJyA6ICcgJykucmVwZWF0KE1hdGgubWF4KGFycltpXS5jb3VudCwgMCkpO1xuXHRcdFx0aWYgKGkgKyAxIDwgYXJyLmxlbmd0aCAmJiAoKGFycltpXS5hZGRlZCAmJiBhcnJbaSsxXS5yZW1vdmVkKSB8fCAoYXJyW2ldLnJlbW92ZWQgJiYgYXJyW2krMV0uYWRkZWQpKSkge1xuXHRcdFx0XHRhcnJbaSArIDFdLmNvdW50IC09IGFycltpXS5jb3VudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0ICsga2xldXIucmVkKHRtcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3QoaW5wdXQsIGV4cGVjdCwgbGVuQSA9IFN0cmluZyhpbnB1dCkubGVuZ3RoLCBsZW5CID0gU3RyaW5nKGV4cGVjdCkubGVuZ3RoKSB7XG5cdGxldCBndXR0ZXIgPSA0O1xuXHRsZXQgbGVuQyA9IE1hdGgubWF4KGxlbkEsIGxlbkIpO1xuXHRsZXQgdHlwZUE9dHlwZW9mIGlucHV0LCB0eXBlQj10eXBlb2YgZXhwZWN0O1xuXG5cdGlmICh0eXBlQSAhPT0gdHlwZUIpIHtcblx0XHRndXR0ZXIgPSAyO1xuXG5cdFx0bGV0IGRlbEEgPSBndXR0ZXIgKyBsZW5DIC0gbGVuQTtcblx0XHRsZXQgZGVsQiA9IGd1dHRlciArIGxlbkMgLSBsZW5CO1xuXG5cdFx0aW5wdXQgKz0gJyAnLnJlcGVhdChkZWxBKSArIGtsZXVyLmRpbShgWyR7dHlwZUF9XWApO1xuXHRcdGV4cGVjdCArPSAnICcucmVwZWF0KGRlbEIpICsga2xldXIuZGltKGBbJHt0eXBlQn1dYCk7XG5cblx0XHRsZW5BICs9IGRlbEEgKyB0eXBlQS5sZW5ndGggKyAyO1xuXHRcdGxlbkIgKz0gZGVsQiArIHR5cGVCLmxlbmd0aCArIDI7XG5cdFx0bGVuQyA9IE1hdGgubWF4KGxlbkEsIGxlbkIpO1xuXHR9XG5cblx0bGV0IG91dHB1dCA9IGNvbG9yc1snKysnXSgnKysnICsgZXhwZWN0ICsgJyAnLnJlcGVhdChndXR0ZXIgKyBsZW5DIC0gbGVuQikgKyBUSVRMRSgnKEV4cGVjdGVkKScpKSArICdcXG4nO1xuXHRyZXR1cm4gb3V0cHV0ICsgY29sb3JzWyctLSddKCctLScgKyBpbnB1dCArICcgJy5yZXBlYXQoZ3V0dGVyICsgbGVuQyAtIGxlbkEpICsgVElUTEUoJyhBY3R1YWwpJykpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0KGlucHV0LCBleHBlY3QpIHtcblx0dmFyIGssIGk9MCwgdG1wLCBpc0FyciA9IEFycmF5LmlzQXJyYXkoaW5wdXQpO1xuXHR2YXIga2V5cz1bXSwgb3V0PWlzQXJyID8gQXJyYXkoaW5wdXQubGVuZ3RoKSA6IHt9O1xuXG5cdGlmIChpc0Fycikge1xuXHRcdGZvciAoaT0wOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0bXAgPSBpbnB1dFtpXTtcblx0XHRcdGlmICghdG1wIHx8IHR5cGVvZiB0bXAgIT09ICdvYmplY3QnKSBvdXRbaV0gPSB0bXA7XG5cdFx0XHRlbHNlIG91dFtpXSA9IHNvcnQodG1wLCBleHBlY3RbaV0pOyAvLyBtaWdodCBub3QgYmUgcmlnaHRcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChrIGluIGV4cGVjdClcblx0XHRcdGtleXMucHVzaChrKTtcblxuXHRcdGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dCwgayA9IGtleXNbaV0pKSB7XG5cdFx0XHRcdGlmICghKHRtcCA9IGlucHV0W2tdKSB8fCB0eXBlb2YgdG1wICE9PSAnb2JqZWN0Jykgb3V0W2tdID0gdG1wO1xuXHRcdFx0XHRlbHNlIG91dFtrXSA9IHNvcnQodG1wLCBleHBlY3Rba10pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoayBpbiBpbnB1dCkge1xuXHRcdFx0aWYgKCFvdXQuaGFzT3duUHJvcGVydHkoaykpIHtcblx0XHRcdFx0b3V0W2tdID0gaW5wdXRba107IC8vIGV4cGVjdCBkaWRudCBoYXZlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmN1bGFyKCkge1xuXHR2YXIgY2FjaGUgPSBuZXcgU2V0O1xuXHRyZXR1cm4gZnVuY3Rpb24gcHJpbnQoa2V5LCB2YWwpIHtcblx0XHRpZiAodmFsID09PSB2b2lkIDApIHJldHVybiAnW19fVk9JRF9fXSc7XG5cdFx0aWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCAhPT0gdmFsKSByZXR1cm4gJ1tfX05BTl9fXSc7XG5cdFx0aWYgKHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG5cdFx0aWYgKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHJldHVybiB2YWw7XG5cdFx0aWYgKGNhY2hlLmhhcyh2YWwpKSByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuXHRcdGNhY2hlLmFkZCh2YWwpOyByZXR1cm4gdmFsO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkoaW5wdXQpIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0LCBjaXJjdWxhcigpLCAyKS5yZXBsYWNlKC9cIlxcW19fTkFOX19cXF1cIi9nLCAnTmFOJykucmVwbGFjZSgvXCJcXFtfX1ZPSURfX1xcXVwiL2csICd1bmRlZmluZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoaW5wdXQsIGV4cGVjdCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShleHBlY3QpICYmIEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gYXJyYXlzKGlucHV0LCBleHBlY3QpO1xuXHRpZiAoZXhwZWN0IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gY2hhcnMoJycraW5wdXQsICcnK2V4cGVjdCk7XG5cblx0bGV0IGlzQSA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PSAnb2JqZWN0Jztcblx0bGV0IGlzQiA9IGV4cGVjdCAmJiB0eXBlb2YgZXhwZWN0ID09ICdvYmplY3QnO1xuXG5cdGlmIChpc0EgJiYgaXNCKSBpbnB1dCA9IHNvcnQoaW5wdXQsIGV4cGVjdCk7XG5cdGlmIChpc0IpIGV4cGVjdCA9IHN0cmluZ2lmeShleHBlY3QpO1xuXHRpZiAoaXNBKSBpbnB1dCA9IHN0cmluZ2lmeShpbnB1dCk7XG5cblx0aWYgKGV4cGVjdCAmJiB0eXBlb2YgZXhwZWN0ID09ICdvYmplY3QnKSB7XG5cdFx0aW5wdXQgPSBzdHJpbmdpZnkoc29ydChpbnB1dCwgZXhwZWN0KSk7XG5cdFx0ZXhwZWN0ID0gc3RyaW5naWZ5KGV4cGVjdCk7XG5cdH1cblxuXHRpc0EgPSB0eXBlb2YgaW5wdXQgPT0gJ3N0cmluZyc7XG5cdGlzQiA9IHR5cGVvZiBleHBlY3QgPT0gJ3N0cmluZyc7XG5cblx0aWYgKGlzQSAmJiAvXFxyP1xcbi8udGVzdChpbnB1dCkpIHJldHVybiBsaW5lcyhpbnB1dCwgJycrZXhwZWN0KTtcblx0aWYgKGlzQiAmJiAvXFxyP1xcbi8udGVzdChleHBlY3QpKSByZXR1cm4gbGluZXMoJycraW5wdXQsIGV4cGVjdCk7XG5cdGlmIChpc0EgJiYgaXNCKSByZXR1cm4gY2hhcnMoaW5wdXQsIGV4cGVjdCk7XG5cblx0cmV0dXJuIGRpcmVjdChpbnB1dCwgZXhwZWN0KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/uvu/diff/index.mjs\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/directory-open-01563666.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/directory-open-01563666.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ e)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar e = (e = [{}]) => __awaiter(void 0, void 0, void 0, function* () {\n return Array.isArray(e) || (e = [e]), e[0].recursive = e[0].recursive || !1, new Promise((t, r) => {\n const i = document.createElement(\"input\");\n i.type = \"file\", i.webkitdirectory = !0;\n\n const c = e => {\n \"function\" == typeof a && a(), t(e);\n },\n a = e[0].legacySetup && e[0].legacySetup(c, () => a(r), i);\n\n i.addEventListener(\"change\", () => {\n let t = Array.from(i.files);\n e[0].recursive ? e[0].recursive && e[0].skipDirectory && (t = t.filter(t => t.webkitRelativePath.split(\"/\").every(t => !e[0].skipDirectory({\n name: t,\n kind: \"directory\"\n })))) : t = t.filter(e => 2 === e.webkitRelativePath.split(\"/\").length), c(t);\n }), i.click();\n });\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZGlyZWN0b3J5LW9wZW4tMDE1NjM2NjYuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGdCQUFnQixTQUFJLElBQUksU0FBSTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9kaXJlY3Rvcnktb3Blbi0wMTU2MzY2Ni5qcz85YmIzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSB0aGlzICYmIHRoaXMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuXG4gICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn07XG5cbnZhciBlID0gKGUgPSBbe31dKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZSkgfHwgKGUgPSBbZV0pLCBlWzBdLnJlY3Vyc2l2ZSA9IGVbMF0ucmVjdXJzaXZlIHx8ICExLCBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICAgIGNvbnN0IGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaS50eXBlID0gXCJmaWxlXCIsIGkud2Via2l0ZGlyZWN0b3J5ID0gITA7XG5cbiAgICBjb25zdCBjID0gZSA9PiB7XG4gICAgICBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGEgJiYgYSgpLCB0KGUpO1xuICAgIH0sXG4gICAgICAgICAgYSA9IGVbMF0ubGVnYWN5U2V0dXAgJiYgZVswXS5sZWdhY3lTZXR1cChjLCAoKSA9PiBhKHIpLCBpKTtcblxuICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICBsZXQgdCA9IEFycmF5LmZyb20oaS5maWxlcyk7XG4gICAgICBlWzBdLnJlY3Vyc2l2ZSA/IGVbMF0ucmVjdXJzaXZlICYmIGVbMF0uc2tpcERpcmVjdG9yeSAmJiAodCA9IHQuZmlsdGVyKHQgPT4gdC53ZWJraXRSZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpLmV2ZXJ5KHQgPT4gIWVbMF0uc2tpcERpcmVjdG9yeSh7XG4gICAgICAgIG5hbWU6IHQsXG4gICAgICAgIGtpbmQ6IFwiZGlyZWN0b3J5XCJcbiAgICAgIH0pKSkpIDogdCA9IHQuZmlsdGVyKGUgPT4gMiA9PT0gZS53ZWJraXRSZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCksIGModCk7XG4gICAgfSksIGkuY2xpY2soKTtcbiAgfSk7XG59KTtcblxuZXhwb3J0IHsgZSBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/directory-open-01563666.js\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/directory-open-4ed118d0.js": /*!*******************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/directory-open-4ed118d0.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ t)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nfunction e(r) {\n function t(e) {\n if (Object(e) !== e) return Promise.reject(new TypeError(e + \" is not an object.\"));\n var r = e.done;\n return Promise.resolve(e.value).then(function (e) {\n return {\n value: e,\n done: r\n };\n });\n }\n\n return e = function (e) {\n this.s = e, this.n = e.next;\n }, e.prototype = {\n s: null,\n n: null,\n next: function () {\n return t(this.n.apply(this.s, arguments));\n },\n return: function (e) {\n var r = this.s.return;\n return void 0 === r ? Promise.resolve({\n value: e,\n done: !0\n }) : t(r.apply(this.s, arguments));\n },\n throw: function (e) {\n var r = this.s.return;\n return void 0 === r ? Promise.reject(e) : t(r.apply(this.s, arguments));\n }\n }, new e(r);\n}\n\nconst r = (t, n, i = t.name, a) => __awaiter(void 0, void 0, void 0, function* () {\n const o = [],\n l = [];\n var s,\n u = !1,\n c = !1;\n\n try {\n for (var y, f = function (r) {\n var t,\n n,\n i,\n a = 2;\n\n for (\"undefined\" != typeof Symbol && (n = Symbol.asyncIterator, i = Symbol.iterator); a--;) {\n if (n && null != (t = r[n])) return t.call(r);\n if (i && null != (t = r[i])) return new e(t.call(r));\n n = \"@@asyncIterator\", i = \"@@iterator\";\n }\n\n throw new TypeError(\"Object is not async iterable\");\n }(t.values()); u = !(y = yield f.next()).done; u = !1) {\n const e = y.value,\n s = `${i}/${e.name}`;\n \"file\" === e.kind ? l.push(e.getFile().then(r => (r.directoryHandle = t, r.handle = e, Object.defineProperty(r, \"webkitRelativePath\", {\n configurable: !0,\n enumerable: !0,\n get: () => s\n })))) : \"directory\" !== e.kind || !n || a && a(e) || o.push(r(e, n, s, a));\n }\n } catch (e) {\n c = !0, s = e;\n } finally {\n try {\n u && null != f.return && (yield f.return());\n } finally {\n if (c) throw s;\n }\n }\n\n return [...(yield Promise.all(o)).flat(), ...(yield Promise.all(l))];\n});\n\nvar t = (e = {}) => __awaiter(void 0, void 0, void 0, function* () {\n e.recursive = e.recursive || !1;\n const t = yield window.showDirectoryPicker({\n id: e.id,\n startIn: e.startIn\n });\n return r(t, e.recursive, void 0, e.skipDirectory);\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZGlyZWN0b3J5LW9wZW4tNGVkMTE4ZDAuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGdCQUFnQixTQUFJLElBQUksU0FBSTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEZBQTRGLElBQUk7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLGNBQWMsZ0NBQWdDO0FBQ25EO0FBQ0EsbUJBQW1CLEVBQUUsR0FBRyxPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLWZzLWFjY2Vzcy9kaXN0L2RpcmVjdG9yeS1vcGVuLTRlZDExOGQwLmpzPzNlYzIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZShyKSB7XG4gIGZ1bmN0aW9uIHQoZSkge1xuICAgIGlmIChPYmplY3QoZSkgIT09IGUpIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGUgKyBcIiBpcyBub3QgYW4gb2JqZWN0LlwiKSk7XG4gICAgdmFyIHIgPSBlLmRvbmU7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlLnZhbHVlKS50aGVuKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogZSxcbiAgICAgICAgZG9uZTogclxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlID0gZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLnMgPSBlLCB0aGlzLm4gPSBlLm5leHQ7XG4gIH0sIGUucHJvdG90eXBlID0ge1xuICAgIHM6IG51bGwsXG4gICAgbjogbnVsbCxcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdCh0aGlzLm4uYXBwbHkodGhpcy5zLCBhcmd1bWVudHMpKTtcbiAgICB9LFxuICAgIHJldHVybjogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciByID0gdGhpcy5zLnJldHVybjtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IHIgPyBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogZSxcbiAgICAgICAgZG9uZTogITBcbiAgICAgIH0pIDogdChyLmFwcGx5KHRoaXMucywgYXJndW1lbnRzKSk7XG4gICAgfSxcbiAgICB0aHJvdzogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciByID0gdGhpcy5zLnJldHVybjtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IHIgPyBQcm9taXNlLnJlamVjdChlKSA6IHQoci5hcHBseSh0aGlzLnMsIGFyZ3VtZW50cykpO1xuICAgIH1cbiAgfSwgbmV3IGUocik7XG59XG5cbmNvbnN0IHIgPSAodCwgbiwgaSA9IHQubmFtZSwgYSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gIGNvbnN0IG8gPSBbXSxcbiAgICAgICAgbCA9IFtdO1xuICB2YXIgcyxcbiAgICAgIHUgPSAhMSxcbiAgICAgIGMgPSAhMTtcblxuICB0cnkge1xuICAgIGZvciAodmFyIHksIGYgPSBmdW5jdGlvbiAocikge1xuICAgICAgdmFyIHQsXG4gICAgICAgICAgbixcbiAgICAgICAgICBpLFxuICAgICAgICAgIGEgPSAyO1xuXG4gICAgICBmb3IgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiAobiA9IFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBpID0gU3ltYm9sLml0ZXJhdG9yKTsgYS0tOykge1xuICAgICAgICBpZiAobiAmJiBudWxsICE9ICh0ID0gcltuXSkpIHJldHVybiB0LmNhbGwocik7XG4gICAgICAgIGlmIChpICYmIG51bGwgIT0gKHQgPSByW2ldKSkgcmV0dXJuIG5ldyBlKHQuY2FsbChyKSk7XG4gICAgICAgIG4gPSBcIkBAYXN5bmNJdGVyYXRvclwiLCBpID0gXCJAQGl0ZXJhdG9yXCI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlXCIpO1xuICAgIH0odC52YWx1ZXMoKSk7IHUgPSAhKHkgPSB5aWVsZCBmLm5leHQoKSkuZG9uZTsgdSA9ICExKSB7XG4gICAgICBjb25zdCBlID0geS52YWx1ZSxcbiAgICAgICAgICAgIHMgPSBgJHtpfS8ke2UubmFtZX1gO1xuICAgICAgXCJmaWxlXCIgPT09IGUua2luZCA/IGwucHVzaChlLmdldEZpbGUoKS50aGVuKHIgPT4gKHIuZGlyZWN0b3J5SGFuZGxlID0gdCwgci5oYW5kbGUgPSBlLCBPYmplY3QuZGVmaW5lUHJvcGVydHkociwgXCJ3ZWJraXRSZWxhdGl2ZVBhdGhcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgZ2V0OiAoKSA9PiBzXG4gICAgICB9KSkpKSA6IFwiZGlyZWN0b3J5XCIgIT09IGUua2luZCB8fCAhbiB8fCBhICYmIGEoZSkgfHwgby5wdXNoKHIoZSwgbiwgcywgYSkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGMgPSAhMCwgcyA9IGU7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIHUgJiYgbnVsbCAhPSBmLnJldHVybiAmJiAoeWllbGQgZi5yZXR1cm4oKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjKSB0aHJvdyBzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uKHlpZWxkIFByb21pc2UuYWxsKG8pKS5mbGF0KCksIC4uLih5aWVsZCBQcm9taXNlLmFsbChsKSldO1xufSk7XG5cbnZhciB0ID0gKGUgPSB7fSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gIGUucmVjdXJzaXZlID0gZS5yZWN1cnNpdmUgfHwgITE7XG4gIGNvbnN0IHQgPSB5aWVsZCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcih7XG4gICAgaWQ6IGUuaWQsXG4gICAgc3RhcnRJbjogZS5zdGFydEluXG4gIH0pO1xuICByZXR1cm4gcih0LCBlLnJlY3Vyc2l2ZSwgdm9pZCAwLCBlLnNraXBEaXJlY3RvcnkpO1xufSk7XG5cbmV4cG9ydCB7IHQgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/directory-open-4ed118d0.js\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/file-open-002ab408.js": /*!**************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/file-open-002ab408.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ t)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nconst e = e => __awaiter(void 0, void 0, void 0, function* () {\n const t = yield e.getFile();\n return t.handle = e, t;\n});\n\nvar t = (t = [{}]) => __awaiter(void 0, void 0, void 0, function* () {\n Array.isArray(t) || (t = [t]);\n const i = [];\n t.forEach((e, t) => {\n i[t] = {\n description: e.description || \"\",\n accept: {}\n }, e.mimeTypes ? e.mimeTypes.map(a => {\n i[t].accept[a] = e.extensions || [];\n }) : i[t].accept[\"*/*\"] = e.extensions || [];\n });\n const a = yield window.showOpenFilePicker({\n id: t[0].id,\n startIn: t[0].startIn,\n types: i,\n multiple: t[0].multiple || !1,\n excludeAcceptAllOption: t[0].excludeAcceptAllOption || !1\n }),\n c = yield Promise.all(a.map(e));\n return t[0].multiple ? c : c[0];\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1vcGVuLTAwMmFiNDA4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxnQkFBZ0IsU0FBSSxJQUFJLFNBQUk7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9maWxlLW9wZW4tMDAyYWI0MDguanM/M2JjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gdGhpcyAmJiB0aGlzLl9fYXdhaXRlciB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59O1xuXG5jb25zdCBlID0gZSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgY29uc3QgdCA9IHlpZWxkIGUuZ2V0RmlsZSgpO1xuICByZXR1cm4gdC5oYW5kbGUgPSBlLCB0O1xufSk7XG5cbnZhciB0ID0gKHQgPSBbe31dKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgQXJyYXkuaXNBcnJheSh0KSB8fCAodCA9IFt0XSk7XG4gIGNvbnN0IGkgPSBbXTtcbiAgdC5mb3JFYWNoKChlLCB0KSA9PiB7XG4gICAgaVt0XSA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBlLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBhY2NlcHQ6IHt9XG4gICAgfSwgZS5taW1lVHlwZXMgPyBlLm1pbWVUeXBlcy5tYXAoYSA9PiB7XG4gICAgICBpW3RdLmFjY2VwdFthXSA9IGUuZXh0ZW5zaW9ucyB8fCBbXTtcbiAgICB9KSA6IGlbdF0uYWNjZXB0W1wiKi8qXCJdID0gZS5leHRlbnNpb25zIHx8IFtdO1xuICB9KTtcbiAgY29uc3QgYSA9IHlpZWxkIHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoe1xuICAgIGlkOiB0WzBdLmlkLFxuICAgIHN0YXJ0SW46IHRbMF0uc3RhcnRJbixcbiAgICB0eXBlczogaSxcbiAgICBtdWx0aXBsZTogdFswXS5tdWx0aXBsZSB8fCAhMSxcbiAgICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0WzBdLmV4Y2x1ZGVBY2NlcHRBbGxPcHRpb24gfHwgITFcbiAgfSksXG4gICAgICAgIGMgPSB5aWVsZCBQcm9taXNlLmFsbChhLm1hcChlKSk7XG4gIHJldHVybiB0WzBdLm11bHRpcGxlID8gYyA6IGNbMF07XG59KTtcblxuZXhwb3J0IHsgdCBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/file-open-002ab408.js\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/file-open-7c801643.js": /*!**************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/file-open-7c801643.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ e)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar e = (e = [{}]) => __awaiter(void 0, void 0, void 0, function* () {\n return Array.isArray(e) || (e = [e]), new Promise((t, n) => {\n const a = document.createElement(\"input\");\n a.type = \"file\";\n const i = [...e.map(e => e.mimeTypes || []), ...e.map(e => e.extensions || [])].join();\n a.multiple = e[0].multiple || !1, a.accept = i || \"\";\n\n const c = e => {\n \"function\" == typeof l && l(), t(e);\n },\n l = e[0].legacySetup && e[0].legacySetup(c, () => l(n), a);\n\n a.addEventListener(\"change\", () => {\n c(a.multiple ? Array.from(a.files) : a.files[0]);\n }), a.click();\n });\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1vcGVuLTdjODAxNjQzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxnQkFBZ0IsU0FBSSxJQUFJLFNBQUk7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1vcGVuLTdjODAxNjQzLmpzPzU3OGIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxudmFyIGUgPSAoZSA9IFt7fV0pID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShlKSB8fCAoZSA9IFtlXSksIG5ldyBQcm9taXNlKCh0LCBuKSA9PiB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBhLnR5cGUgPSBcImZpbGVcIjtcbiAgICBjb25zdCBpID0gWy4uLmUubWFwKGUgPT4gZS5taW1lVHlwZXMgfHwgW10pLCAuLi5lLm1hcChlID0+IGUuZXh0ZW5zaW9ucyB8fCBbXSldLmpvaW4oKTtcbiAgICBhLm11bHRpcGxlID0gZVswXS5tdWx0aXBsZSB8fCAhMSwgYS5hY2NlcHQgPSBpIHx8IFwiXCI7XG5cbiAgICBjb25zdCBjID0gZSA9PiB7XG4gICAgICBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGwgJiYgbCgpLCB0KGUpO1xuICAgIH0sXG4gICAgICAgICAgbCA9IGVbMF0ubGVnYWN5U2V0dXAgJiYgZVswXS5sZWdhY3lTZXR1cChjLCAoKSA9PiBsKG4pLCBhKTtcblxuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICBjKGEubXVsdGlwbGUgPyBBcnJheS5mcm9tKGEuZmlsZXMpIDogYS5maWxlc1swXSk7XG4gICAgfSksIGEuY2xpY2soKTtcbiAgfSk7XG59KTtcblxuZXhwb3J0IHsgZSBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/file-open-7c801643.js\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/file-save-3189631c.js": /*!**************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/file-save-3189631c.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ e)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar e = (e, t = {}) => __awaiter(void 0, void 0, void 0, function* () {\n Array.isArray(t) && (t = t[0]);\n const n = document.createElement(\"a\");\n let a = e;\n \"body\" in e && (a = yield function (e, t) {\n return __awaiter(this, void 0, void 0, function* () {\n const n = e.getReader(),\n a = new ReadableStream({\n start: e => function t() {\n return __awaiter(this, void 0, void 0, function* () {\n return n.read().then(({\n done: n,\n value: a\n }) => {\n if (!n) return e.enqueue(a), t();\n e.close();\n });\n });\n }()\n }),\n r = new Response(a),\n c = yield r.blob();\n return n.releaseLock(), new Blob([c], {\n type: t\n });\n });\n }(e.body, e.headers.get(\"content-type\"))), n.download = t.fileName || \"Untitled\", n.href = URL.createObjectURL(yield a);\n\n const r = () => {\n \"function\" == typeof c && c();\n },\n c = t.legacySetup && t.legacySetup(r, () => c(reject), n);\n\n return n.addEventListener(\"click\", () => {\n setTimeout(() => URL.revokeObjectURL(n.href), 3e4), r();\n }), n.click(), null;\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1zYXZlLTMxODk2MzFjLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxnQkFBZ0IsU0FBSSxJQUFJLFNBQUk7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1zYXZlLTMxODk2MzFjLmpzPzU0MGMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxudmFyIGUgPSAoZSwgdCA9IHt9KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgQXJyYXkuaXNBcnJheSh0KSAmJiAodCA9IHRbMF0pO1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gIGxldCBhID0gZTtcbiAgXCJib2R5XCIgaW4gZSAmJiAoYSA9IHlpZWxkIGZ1bmN0aW9uIChlLCB0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgIGNvbnN0IG4gPSBlLmdldFJlYWRlcigpLFxuICAgICAgICAgICAgYSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgIHN0YXJ0OiBlID0+IGZ1bmN0aW9uIHQoKSB7XG4gICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuLnJlYWQoKS50aGVuKCh7XG4gICAgICAgICAgICAgIGRvbmU6IG4sXG4gICAgICAgICAgICAgIHZhbHVlOiBhXG4gICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbikgcmV0dXJuIGUuZW5xdWV1ZShhKSwgdCgpO1xuICAgICAgICAgICAgICBlLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSgpXG4gICAgICB9KSxcbiAgICAgICAgICAgIHIgPSBuZXcgUmVzcG9uc2UoYSksXG4gICAgICAgICAgICBjID0geWllbGQgci5ibG9iKCk7XG4gICAgICByZXR1cm4gbi5yZWxlYXNlTG9jaygpLCBuZXcgQmxvYihbY10sIHtcbiAgICAgICAgdHlwZTogdFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0oZS5ib2R5LCBlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpKSksIG4uZG93bmxvYWQgPSB0LmZpbGVOYW1lIHx8IFwiVW50aXRsZWRcIiwgbi5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh5aWVsZCBhKTtcblxuICBjb25zdCByID0gKCkgPT4ge1xuICAgIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgYyAmJiBjKCk7XG4gIH0sXG4gICAgICAgIGMgPSB0LmxlZ2FjeVNldHVwICYmIHQubGVnYWN5U2V0dXAociwgKCkgPT4gYyhyZWplY3QpLCBuKTtcblxuICByZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpLCAzZTQpLCByKCk7XG4gIH0pLCBuLmNsaWNrKCksIG51bGw7XG59KTtcblxuZXhwb3J0IHsgZSBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/file-save-3189631c.js\n"); /***/ }), /***/ "../../../node_modules/browser-fs-access/dist/file-save-745eba88.js": /*!**************************************************************************!*\ !*** ../../../node_modules/browser-fs-access/dist/file-save-745eba88.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ e)\n/* harmony export */ });\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar e = (e, t = [{}], a = null, i = !1, n = null) => __awaiter(void 0, void 0, void 0, function* () {\n Array.isArray(t) || (t = [t]), t[0].fileName = t[0].fileName || \"Untitled\";\n const s = [];\n let c = null;\n if (e instanceof Blob && e.type ? c = e.type : e.headers && e.headers.get(\"content-type\") && (c = e.headers.get(\"content-type\")), t.forEach((e, t) => {\n s[t] = {\n description: e.description || \"\",\n accept: {}\n }, e.mimeTypes ? (0 === t && c && e.mimeTypes.push(c), e.mimeTypes.map(a => {\n s[t].accept[a] = e.extensions || [];\n })) : c && (s[t].accept[c] = e.extensions || []);\n }), a) try {\n yield a.getFile();\n } catch (e) {\n if (a = null, i) throw e;\n }\n const r = a || (yield window.showSaveFilePicker({\n suggestedName: t[0].fileName,\n id: t[0].id,\n startIn: t[0].startIn,\n types: s,\n excludeAcceptAllOption: t[0].excludeAcceptAllOption || !1\n }));\n !a && n && n();\n const l = yield r.createWritable();\n\n if (\"stream\" in e) {\n const t = e.stream();\n return yield t.pipeTo(l), r;\n }\n\n return \"body\" in e ? (yield e.body.pipeTo(l), r) : (yield l.write(yield e), yield l.close(), r);\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1zYXZlLTc0NWViYTg4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxnQkFBZ0IsU0FBSSxJQUFJLFNBQUk7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvZmlsZS1zYXZlLTc0NWViYTg4LmpzPzIzYTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9IHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufTtcblxudmFyIGUgPSAoZSwgdCA9IFt7fV0sIGEgPSBudWxsLCBpID0gITEsIG4gPSBudWxsKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgQXJyYXkuaXNBcnJheSh0KSB8fCAodCA9IFt0XSksIHRbMF0uZmlsZU5hbWUgPSB0WzBdLmZpbGVOYW1lIHx8IFwiVW50aXRsZWRcIjtcbiAgY29uc3QgcyA9IFtdO1xuICBsZXQgYyA9IG51bGw7XG4gIGlmIChlIGluc3RhbmNlb2YgQmxvYiAmJiBlLnR5cGUgPyBjID0gZS50eXBlIDogZS5oZWFkZXJzICYmIGUuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgJiYgKGMgPSBlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpKSwgdC5mb3JFYWNoKChlLCB0KSA9PiB7XG4gICAgc1t0XSA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBlLmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICBhY2NlcHQ6IHt9XG4gICAgfSwgZS5taW1lVHlwZXMgPyAoMCA9PT0gdCAmJiBjICYmIGUubWltZVR5cGVzLnB1c2goYyksIGUubWltZVR5cGVzLm1hcChhID0+IHtcbiAgICAgIHNbdF0uYWNjZXB0W2FdID0gZS5leHRlbnNpb25zIHx8IFtdO1xuICAgIH0pKSA6IGMgJiYgKHNbdF0uYWNjZXB0W2NdID0gZS5leHRlbnNpb25zIHx8IFtdKTtcbiAgfSksIGEpIHRyeSB7XG4gICAgeWllbGQgYS5nZXRGaWxlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYSA9IG51bGwsIGkpIHRocm93IGU7XG4gIH1cbiAgY29uc3QgciA9IGEgfHwgKHlpZWxkIHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIoe1xuICAgIHN1Z2dlc3RlZE5hbWU6IHRbMF0uZmlsZU5hbWUsXG4gICAgaWQ6IHRbMF0uaWQsXG4gICAgc3RhcnRJbjogdFswXS5zdGFydEluLFxuICAgIHR5cGVzOiBzLFxuICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb246IHRbMF0uZXhjbHVkZUFjY2VwdEFsbE9wdGlvbiB8fCAhMVxuICB9KSk7XG4gICFhICYmIG4gJiYgbigpO1xuICBjb25zdCBsID0geWllbGQgci5jcmVhdGVXcml0YWJsZSgpO1xuXG4gIGlmIChcInN0cmVhbVwiIGluIGUpIHtcbiAgICBjb25zdCB0ID0gZS5zdHJlYW0oKTtcbiAgICByZXR1cm4geWllbGQgdC5waXBlVG8obCksIHI7XG4gIH1cblxuICByZXR1cm4gXCJib2R5XCIgaW4gZSA/ICh5aWVsZCBlLmJvZHkucGlwZVRvKGwpLCByKSA6ICh5aWVsZCBsLndyaXRlKHlpZWxkIGUpLCB5aWVsZCBsLmNsb3NlKCksIHIpO1xufSk7XG5cbmV4cG9ydCB7IGUgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/browser-fs-access/dist/file-save-745eba88.js\n"); /***/ }) }]);